[
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: # Replace with a single Ko-fi username\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: https://www.buymeacoffee.com/r6sWkVoeU\n"
  },
  {
    "path": ".github/workflows/github-pages.yml",
    "content": "name: Deploy github page\non:\n  push:\n    branches:\n      - master\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v1\n      - name: Set up Python 3.7\n        uses: actions/setup-python@v1\n        with:\n          python-version: 3.7\n      - name: Use Node.js 10.x\n        uses: actions/setup-node@v1\n        with:\n          node-version: 10.x\n      - name: Install dependencies\n        run: |\n          python -m pip install --upgrade pip\n          pip install -r requirements.txt\n          npm install --global draw.io-export\n      - name: Build page\n        run: |\n          xvfb-run -a drawio docs/SmartHouse.xml -o docs/SmartHouse.png\n          mkdocs build -v\n      - name: Deploy\n        uses: peaceiris/actions-gh-pages@v2.4.0\n        env:\n          ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}\n          PUBLISH_BRANCH: gh-pages\n          PUBLISH_DIR: ./site\n"
  },
  {
    "path": ".gitignore",
    "content": ".docker/data/**/*\n.docker/log/**/*\n*.log\n.env.mastodon\n.env.im\n.env.transfer\n.env\n.env.zwave\n.env.simplelogin\n.env.monio\n.env.podcast\n.env.nextcloud\n.env.firefly\n.env.plex\n.env.postgresql\n.env.influxdb\n.env.grafana\n.env.busix\n.env.pihole\n.env.crontab\n.env.home-assistant\n.env.local\n.env.graylog\n.env.ethereum\n.env.dpodcast\n.env.smasher\n.env.mos\n.DS_Store\n.backups/**/*\n*.zip\ngoogle_calendars.yaml\nsonoff/sonoff.config.json\nlife360.conf\nhome-assistant/*.json\nhome-assistant/.HA_VERSION\nhome-assistant/.storage\nhome-assistant/.uuid\nhome-assistant/*.bak\nhome-assistant/*.txt\nhome-assistant/*.xml\nhome-assistant/*.conf\nhome-assistant/home-assistant.log\nhome-assistant/home-assistant_v2.db*\nhome-assistant/pyozw.sqlite\nhome-assistant/customize.yaml\nhome-assistant/known_devices.yaml\nhome-assistant/secrets.yaml\nhome-assistant/deps\nhome-assistant/.cloud\nhome-assistant/tts\nhome-assistant/spotify-token-cache.json\nhome-assistant/components/zones.yaml\nhome-assistant/sensors/pwned.yaml\nbt-mqtt-gateway/config.yaml\ngoogle_calendars.yaml\nhome-assistant/OZW_LOG.txt\nhome-assistant/options.xml\nhome-assistant/webostv.conf\nhome-assistant/.google.token\nhome-assistant/pyozw.sqlite\nhome-assistant/ip_bans.yaml\nhome-assistant/ui-lovelace.yaml\nnode_modules/**/*\n.vagrant/**/*\nprovision/playbook.retry\nprovision/vars.yml\nappdaemon/appdaemon.yaml\nappdeamon/appdaemon.yaml\nappdeamon/compiled/**/*\n__pycache__/**/*\nappdaemon/compiled/**/*\nappdaemon/apps/__pycache__/\nnode_modules/**/*\n*.pyc\n**/__pycache__/**/*\n__pycache__/**/*\n*.pickle\n*.retry\ncrontab/*.yaml\nnode_modules\npanel/package-lock.json\n.vagrant/*\n.c9/**/*\nid_rsa\nid_rsa.pub\n.AppleDouble/\n*DS_Store\n.AppleDB/\n.AppleDesktop/\nplex.conf\ninventory.ini\n.vscode\n*~\nsite/\ntmp/\nvacuum/payload\n*.ppm\nzwave/test/**/*\nvscode/**/*\n:2evscode\n.pip_progress\ndocs/SmartHouse.png\nsonoff/certs/\n.AppleDouble\n.env.mysql\n.env.notes\n.env.syncserver\norion/config.json\n.env.orion\norion/web/**/*\nblog/**/*\n.env.rss\n.env.speedtest\n.env.tv\n.env.bitcoind\n.env.ci\n.env.ci_runner\n.env.git\n.env.detox\nhome-assistant/*.html\n.env.zwave\n.env.errbit\n.log.1\n.log.*\nhome-assistant/home-assistant.log.*\n"
  },
  {
    "path": ".ruby-version",
    "content": "2.3.7\n"
  },
  {
    "path": ".tool-versions",
    "content": "ruby 2.5.0\n"
  },
  {
    "path": "Brewfile",
    "content": "brew 'fswatch'\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2019 Arkadiusz Buras\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "[![header](docs/header.jpg)](https://macbury.github.io/SmartHouse)\n\n![Last Commit](https://img.shields.io/github/last-commit/macbury/SmartHouse.svg)\n![License](https://img.shields.io/github/license/macbury/SmartHouse.svg)\n![Release](https://img.shields.io/github/tag/macbury/SmartHouse?label=Version)\n![Uptime last 7 days](https://img.shields.io/uptimerobot/ratio/7/m782818639-f9a1f36b2acd090bbfaa4435.svg)\n![Uptime Status](https://img.shields.io/uptimerobot/status/m782818639-f9a1f36b2acd090bbfaa4435.svg)\n![Maintenance](https://img.shields.io/maintenance/yes/2020.svg)\n![Deployment](https://action-badges.now.sh/macbury/SmartHouse)\n\n**[Show me all documentation](https://macbury.github.io/SmartHouse)**\n\n### MIT License\n\nCopyright (c) 2019 Arkadiusz Buras\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "RFMapping.md",
    "content": "### Mapping for RF controller\n\nA ON\nDecimal: 1361 (24Bit) Binary: 000000000000010101010001 Tri-State: 000000FFFF0F PulseLength: 321 microseconds Protocol: 1\nRaw data: 9984,232,1040,236,1048,236,1044,232,1052,224,1064,216,1044,236,1056,220,1056,224,1052,228,1048,228,1044,236,1044,236,1056,864,404,212,40,72,48,64,1244,1136,16,36,16,52,76,192,32,616,1352,32,32,40,340,\n\nA OFF\nDecimal: 1364 (24Bit) Binary: 000000000000010101010100 Tri-State: 000000FFFFF0 PulseLength: 321 microseconds Protocol: 1\nRaw data: 9980,240,1052,224,1044,236,1044,236,1044,232,1048,232,1044,236,1044,232,1044,236,1040,240,1044,232,1044,236,1052,228,1044,872,424,220,1044,876,412,24,24,48,80,136,36,300,44,244,132,408,32,44,24,24,152,\n\nB ON\nDecimal: 4433 (24Bit) Binary: 000000000001000101010001 Tri-State: 00000F0FFF0F PulseLength: 321 microseconds Protocol: 1\nRaw data: 9988,228,1044,232,1052,224,1048,232,1064,216,1052,224,1060,220,1048,232,1056,220,1052,16,76,24,16,32,56,36,92,32,88,68,24,108,16,32,64,176,16,16,28,52,1852,632,16,64,124,140,28,472,44,\n\nB OFF\nDecimal: 4436 (24Bit) Binary: 000000000001000101010100 Tri-State: 00000F0FFFF0 PulseLength: 321 microseconds Protocol: 1\nRaw data: 9988,232,1044,232,1052,228,1036,240,1044,236,1048,228,1040,244,1044,232,16,56,60,128,476,116,1536,92,16,588,20,112,268,16,20,36,304,52,2052,40,36,272,28,732,144,24,36,80,60,16,16,64,404,\n\nC ON\nDecimal: 5201 (24Bit) Binary: 000000000001010001010001 Tri-State: 00000FF0FF0F PulseLength: 321 microseconds Protocol: 1\nRaw data: 9980,248,1032,232,1044,236,1040,240,1056,216,1048,232,1048,232,1064,212,1056,228,1060,216,1048,228,1056,868,400,240,1044,876,396,244,1036,880,424,216,1052,868,408,232,1052,864,420,868,416,868,420,860,424,860,416,\n\nC OFF\nDecimal: 5204 (24Bit) Binary: 000000000001010001010100 Tri-State: 00000FF0FFF0 PulseLength: 321 microseconds Protocol: 1\nRaw data: 9976,244,1040,236,1040,240,1036,244,1052,220,1052,228,1052,220,1056,220,1052,232,1048,228,1056,224,1052,868,408,228,1052,872,400,240,1052,864,416,224,1052,864,412,228,1068,848,428,856,420,860,420,864,420,864,416,\n\nD ON\n\nDecimal: 5393 (24Bit) Binary: 000000000001010100010001 Tri-State: 00000FFF0F0F PulseLength: 321 microseconds Protocol: 1\nRaw data: 9976,252,1036,232,1032,252,1044,232,1052,224,1060,224,1040,224,1048,228,1060,224,1040,236,1044,232,1052,872,408,232,1052,864,404,240,1044,876,404,232,1048,872,416,220,1056,864,420,860,416,868,420,860,416,872,416,\n\nD OFF\nDecimal: 5396 (24Bit) Binary: 000000000001010100010100 Tri-State: 00000FFF0FF0 PulseLength: 321 microseconds Protocol: 1\nRaw data: 9976,240,1044,232,1052,228,1052,228,1040,236,1060,220,1072,208,116,32,28,124,1344,132,160,36,20,56,124,488,2004,92,24,1156,40,20,104,36,1048,216,68,676,16,76,68,72,24,80,56,52,1264,16,48,\n\n\n\n\n============\n============\n============\n============\n============\n\nDecimal: 17745 (24Bit) Binary: 000000000100010101010001 Tri-State: 0000F0FFFF0F PulseLength: 307 microseconds Protocol: 1\nRaw data: 9548,264,964,264,964,260,972,256,972,260,964,268,972,264,972,252,976,256,960,884,348,268,972,256,960,268,956,884,348,268,976,868,348,268,976,864,356,256,976,864,360,876,360,872,360,868,372,868,356,\n\nDecimal: 17748 (24Bit) Binary: 000000000100010101010100 Tri-State: 0000F0FFFFF0 PulseLength: 307 microseconds Protocol: 1\nRaw data: 9544,272,968,264,960,268,956,268,976,256,960,268,976,260,956,268,980,248,960,892,340,272,960,880,348,252,960,888,340,276,972,872,344,272,956,884,348,264,996,844,376,864,356,876,360,864,392,848,356,\n\nDecimal: 20817 (24Bit) Binary: 000000000101000101010001 Tri-State: 0000FF0FFF0F PulseLength: 307 microseconds Protocol: 1\nRaw data: 9552,272,952,272,952,280,948,276,968,260,956,276,956,268,960,268,984,236,960,892,340,272,972,872,344,240,988,864,340,276,952,888,368,248,952,896,340,276,976,864,344,892,344,888,348,880,364,872,352,\n\nDecimal: 20820 (24Bit) Binary: 000000000101000101010100 Tri-State: 0000FF0FFFF0 PulseLength: 307 microseconds Protocol: 1\nRaw data: 9556,260,960,272,956,272,952,272,972,260,956,272,960,272,952,276,976,248,972,876,344,272,960,880,344,256,980,868,340,276,952,888,364,252,960,888,340,272,988,856,360,872,352,880,372,856,392,844,368,\n\nDecimal: 21585 (24Bit) Binary: 000000000101010001010001 Tri-State: 0000FFF0FF0F PulseLength: 307 microseconds Protocol: 1\nRaw data: 9576,244,964,268,956,272,956,272,972,260,952,276,956,280,952,280,952,272,948,896,336,280,956,884,344,260,960,888,340,276,980,856,352,268,960,884,344,268,964,880,384,852,348,884,340,888,364,872,344,\n\nDecimal: 21588 (24Bit) Binary: 000000000101010001010100 Tri-State: 0000FFF0FFF0 PulseLength: 307 microseconds Protocol: 1\nRaw data: 9544,268,960,264,960,272,956,268,984,244,960,272,960,248,968,260,968,264,980,864,340,276,952,888,364,264,976,880,336,276,952,888,356,260,956,896,336,276,976,868,340,892,348,884,372,852,368,872,352,\n\nDecimal: 21777 (24Bit) Binary: 000000000101010100010001 Tri-State: 0000FFFF0F0F PulseLength: 308 microseconds Protocol: 1\nRaw data: 9552,276,964,268,952,272,956,272,960,276,948,284,948,280,948,284,948,280,944,896,336,276,976,864,372,260,964,884,344,272,984,852,368,256,960,880,384,228,996,860,332,896,340,892,348,884,340,896,336,\n\nDecimal: 21780 (24Bit) Binary: 000000000101010100010100 Tri-State: 0000FFFF0FF0 PulseLength: 308 microseconds Protocol: 1\nRaw data: 9548,276,972,260,952,280,948,276,964,268,948,280,952,272,960,260,980,256,952,892,344,264,984,868,344,260,956,888,348,268,988,852,372,248,960,888,372,236,988,868,340,888,340,888,364,872,344,888,344,\n"
  },
  {
    "path": "Vagrantfile",
    "content": "Vagrant.configure(2) do |config|\n  config.vm.box = \"macbury/bionic64\"\n  config.vm.box_version = \"1.07\"\n\n  config.ssh.forward_agent = true\n  config.ssh.insert_key = false\n\n  config.vm.network \"forwarded_port\", guest: 80, host: 7000\n  config.vm.network \"forwarded_port\", guest: 443, host: 443\n\n  config.vm.provider \"virtualbox\" do |v|\n\t  v.memory = 2524\n\t  v.cpus = 2\n    v.gui = true\n\tend\nend\n"
  },
  {
    "path": "appdaemon/.gitkeep",
    "content": ""
  },
  {
    "path": "appdaemon/apps/adaptive_room_heating.py",
    "content": "import appdaemon.plugins.hass.hassapi as hass\nimport datetime\n\nclass AdaptiveRoomHeating(hass.Hass):\n  def initialize(self):\n    self.listen_state(self.on_adaptation_callback, entity_id = self.args['outside_temperature'])\n    self.listen_state(self.on_adaptation_callback, entity_id = self.args['family_devices'])\n    self.listen_state(self.on_adaptation_callback, entity_id = self.args['calendar'])\n    if 'main_light' in self.args:\n      self.log('Has support for main light')\n      self.listen_state(self.on_adaptation_callback, entity_id = self.args['main_light'])\n    else:\n      self.log('Dont have support for main light')\n\n    if 'window_door' in self.args:\n      self.log('Has support for window or door')\n      self.listen_state(self.on_adaptation_callback, entity_id = self.args['window_door'])\n    else:\n      self.log('Dont have support for main light')\n    self.adapt_temperature()\n\n  def outside_temperature(self):\n    return float(self.get_state(self.args['outside_temperature']))\n\n  def anyone_in_home(self):\n    return self.get_state(self.args['family_devices']) == 'home'\n\n  def window_opened(self):\n    if 'window_door' in self.args:\n      return self.get_state(self.args['window_door']) == 'on'\n    else:\n      return False\n\n  def heating_time(self):\n    if self.get_state(self.args['calendar']) == 'on':\n      self.log(\"Calendar: {} is On\".format(self.args['calendar']))\n      return True\n    else:\n      self.log(\"Calendar: {} is Off\".format(self.args['calendar']))\n      return False\n\n  def main_light_on(self):\n    if 'main_light' in self.args:\n      return self.get_state(self.args['main_light']) == 'on'\n    else:\n      return False\n\n  def stop_heating(self):\n    self.log(\"Lowering temperature\")\n    self.call_service('climate/turn_off', entity_id=self.args['climate'])\n\n  def start_heating(self):\n    self.log(\"Raising temperature\")\n    self.call_service('climate/turn_on', entity_id=self.args['climate'])\n\n  def change_preset(self, preset):\n    self.log(\"Change preset to: {}\".format(preset))\n    self.call_service('climate/set_preset_mode', entity_id=self.args['climate'], preset_mode=preset)\n\n  def on_adaptation_callback(self, entity, attribute, old, new, kwargs):\n    self.log(\"State callback triggered for {} from {} to {}. Adapting temperature\".format(entity, old, new))\n    self.adapt_temperature()\n\n  def adapt_temperature(self):\n    if self.window_opened():\n      self.log(\"Window is opened, stopping heating\")\n      self.stop_heating()\n    elif self.main_light_on():\n      self.log(\"light is on, start heating\")\n      self.start_heating()\n    elif self.anyone_in_home() and self.heating_time():\n      self.log(\"Family in home, and heating time\")\n      self.start_heating()\n    else:\n      self.log(\"Stopping heating\")\n      self.stop_heating()\n"
  },
  {
    "path": "appdaemon/apps/air_purifier_ai.py",
    "content": "import appdaemon.plugins.hass.hassapi as hass\nimport datetime\n\nclass AirPurifierAI(hass.Hass):\n  def initialize(self):\n    self.log(\"Started service...\")\n    self.fan_id = self.args['fan_id']\n    self.update_handle = None\n    self.log(\"Current fan: {}\".format(self.fan_id))\n    self.listen_state(self.on_adaptation_callback, entity_id = self.args['family_devices'])\n    self.listen_state(self.on_adaptation_callback, entity_id = self.args['calendar'])\n\n    if 'balcone_door' in self.args:\n      self.listen_state(self.on_adaptation_callback, entity_id = self.args['balcone_door'])\n\n    if 'light' in self.args:\n      self.listen_state(self.on_adaptation_callback, entity_id = self.args['light'])\n\n    if 'alt_mode_entity' in self.args:\n      self.log(\"Watching entity: {}\".format(self.args['alt_mode_entity']))\n      self.listen_state(self.on_adaptation_callback, entity_id = self.args['alt_mode_entity'])\n\n    self.log(\"Finished configuration\")\n    self.adapt_air_purifier_mode()\n\n  def alt_mode_entity_working(self):\n    if 'alt_mode_entity' in self.args:\n      return self.get_state(self.args['alt_mode_entity']) == 'on'\n    else:\n      return False\n\n  def balcone_door_opened(self):\n    if 'balcone_door' in self.args:\n      return self.get_state(self.args['balcone_door']) == 'on'\n    else:\n      return False\n\n  def light_is_on(self):\n    if 'light' in self.args:\n      return self.get_state(self.args['light']) == 'on'\n    else:\n      return False\n\n  def anyone_in_home(self):\n    state = self.get_state(self.args['family_devices'])\n    self.log(\"State is {} for {}\".format(state, self.args['family_devices']))\n    return state == 'home'\n\n  def cleaning_time(self):\n    if self.get_state(self.args['calendar']) == 'on':\n      self.log(\"Calendar: {} is On\".format(self.args['calendar']))\n      return True\n    else:\n      self.log(\"Calendar: {} is Off\".format(self.args['calendar']))\n      return False\n\n  def update_speed(self, speed):\n    self.log(\"Setting speed to: {}\".format(speed))\n    self.call_service('xiaomi_miio.fan_set_favorite_level', entity_id=self.fan_id, level=speed)\n    self.call_service('fan/set_speed', entity_id=self.fan_id, speed='Auto')\n\n  def turn_off(self):\n    self.log(\"Turning off air purifier\")\n    self.call_service('fan/turn_off', entity_id=self.fan_id)\n\n  def switch_to_mode(self):\n    if self.alt_mode_entity_working():\n      self.log(\"Switching to {} mode because {} is working\".format(self.args['alt_mode'], self.args['alt_mode_entity']))\n      self.call_service('fan/set_speed', entity_id=self.fan_id, speed=self.args['alt_mode'])\n    else:\n      self.log(\"Switching to {} mode\".format(self.args['mode']))\n      self.call_service('fan/set_speed', entity_id=self.fan_id, speed=self.args['mode'])\n\n  def turn_on(self):\n    self.log(\"Turning on air purifier\")\n    self.call_service('fan/turn_on', entity_id=self.fan_id)\n\n  def on_adaptation_callback(self, entity, attribute, old, new, kwargs):\n    self.log(\"State callback triggered for {} from {} to {}. Adapting air quality\".format(entity, old, new))\n    self.adapt_air_purifier_mode()\n\n  def future_turn_on(self):\n    self.log(\"Future Adapting speed!\")\n    self.turn_on()\n    self.switch_to_mode()\n    self.update_handle = None\n\n  def adapt_air_purifier_mode(self):\n    if self.anyone_in_home():\n      self.log(\"People home\")\n      if self.light_is_on():\n        self.log(\"Main light is on\")\n        self.turn_on()\n      elif self.balcone_door_opened():\n        self.log(\"Balcone door is opened\")\n        self.turn_off()\n      elif self.cleaning_time():\n        if self.update_handle is not None:\n          self.cancel_timer(self.update_handle)\n        if 'alt_mode_entity' not in self.args:\n          self.log(\"Will adapt now\")\n          self.future_turn_on()\n        else:\n          self.log(\"Will adapt now\")\n          self.future_turn_on()\n      else:\n        self.log(\"Turning off...\")\n        self.turn_off()\n    else:\n      self.log(\"Nobody home\")\n      self.log(\"Turn off completle\")\n      self.turn_off()\n"
  },
  {
    "path": "appdaemon/apps/apps.yaml",
    "content": "living_room_humidity:\n  module: humidifier\n  class: HumidifierController\n  humidifer: humidifier.living_room_humidifer\n  family_devices: group.family\n  calendar: calendar.salon_env\n\nliving_room_air:\n  module: air_purifier_ai\n  class: AirPurifierAI\n  calendar: calendar.salon_env\n  fan_id: 'fan.living_room_air_purifier'\n  family_devices: 'group.family'\n  fallback: 5400\n  balcone_door: binary_sensor.balcone_door\n  alt_mode_entity: switch.living_room_humidifier\n  mode: 'Auto'\n  alt_mode: 'Silent'\n  light: light.tv_stand\n\nbatteries:\n  module: battery\n  class: BatteryWatcher\n  threshold: 20\n\nbedroom_air:\n  module: air_purifier_ai\n  class: AirPurifierAI\n  calendar: calendar.sypialnia_env\n  fan_id: 'fan.bedroom_air_purifier'\n  #balcone_door: binary_sensor.bedroom_window\n  family_devices: 'group.family'\n  fallback: 5400\n  mode: 'Auto'\n  light: light.bedroom\n\n\nheating_kitchen:\n  module: adaptive_room_heating\n  class: AdaptiveRoomHeating\n  calendar: calendar.kuchnia_env\n  outside_temperature: sensor.dark_sky_temperature\n  temperature_sensor: sensor.kitchen_temperature\n  family_devices: group.family\n  climate:  climate.kitchen_thermostat\n  main_light: input_boolean.pizza\n\nheating_living_room:\n  module: adaptive_room_heating\n  class: AdaptiveRoomHeating\n  calendar: calendar.salon_env\n  outside_temperature: sensor.dark_sky_temperature\n  temperature_sensor: sensor.living_room_temperature\n  family_devices: group.family\n  climate: climate.living_room_thermostat\n  window_door: binary_sensor.balcone_door\n  main_light: light.tv_stand\n\nheating_bedroom:\n  module: adaptive_room_heating\n  class: AdaptiveRoomHeating\n  calendar: calendar.sypialnia_env\n  outside_temperature: sensor.dark_sky_temperature\n  temperature_sensor: sensor.corridor_temperature\n  family_devices: group.family\n  climate: climate.bedroom_thermostatic_valve\n  window_door: binary_sensor.bedroom_window\n  main_light: light.bedroom\n"
  },
  {
    "path": "appdaemon/apps/battery.py",
    "content": "import appdaemon.plugins.hass.hassapi as hass\r\nimport datetime\r\n\r\n# Check if all devices are charged\r\nclass BatteryWatcher(hass.Hass):\r\n  def initialize(self):\r\n    self.log(\"Working!\")\r\n    time = datetime.time(18, 0, 0)\r\n    self.run_daily(self.check_batteries, time)\r\n    \r\n  def check_batteries(self, kwargs):\r\n    treshold = int(self.args[\"threshold\"])\r\n    self.log(\"Checking batteries level. Min threshold is: {}\".format(treshold))\r\n    devices = self.get_state()\r\n    values = {}\r\n    low = []\r\n    for device in devices:\r\n      battery = None\r\n      device_state = devices[device]\r\n      if \"attributes\" in device_state:\r\n        if \"battery\" in device_state[\"attributes\"]:\r\n          battery = device_state[\"attributes\"][\"battery\"]\r\n        if \"battery_level\" in device_state[\"attributes\"]:\r\n          battery = device_state[\"attributes\"][\"battery_level\"]\r\n        if battery != None:\r\n          if int(battery) < treshold:\r\n            self.log(\"Device: {} has low battery level: {}\".format(device, battery))\r\n            low.append({ 'device': device, 'battery': battery })\r\n\r\n    message = \"Bettery Level Report\\n\\n\"\r\n    if low:\r\n      message += \"The following devices are low: (< {}) \".format(self.args[\"threshold\"])\r\n      for device in low:\r\n        message = \"Device {} has {} % battery left\".format(device['device'], int(device['battery']))\r\n      message += \"\\n\\n\"\r\n      \r\n    if low:\r\n      self.log(\"Oh no! Battery is low for: \"+message)\r\n      self.call_service('notify/all', title=\"Home Assistant Battery Report\", message=message)"
  },
  {
    "path": "appdaemon/apps/cover.py",
    "content": "import appdaemon.plugins.hass.hassapi as hass\n\nclass Blinds(hass.Hass):\n  def initialize(self):\n    self.log(\"Started service...\")\n    self.listen_state(self.on_adaptation_callback, entity = self.args['family_group_entity_id'])\n    self.listen_state(self.on_adaptation_callback, entity = self.args['calendar_entity_id'])\n    self.listen_state(self.on_adaptation_callback, entity = self.args['luminance_entity_id'], duration = 3 * 60)\n    self.run_at_sunrise(self.on_adaptation_callback)\n    self.run_at_sunset(self.on_adaptation_callback)\n\n  def anyone_in_home(self):\n    family_group_entity_id = self.args['family_group_entity_id']\n    state = self.get_state(family_group_entity_id)\n    self.log(\"State is {} for {}\".format(state, family_group_entity_id))\n    return state == 'home'\n  \n  def is_in_control_time(self):\n    return self.get_state(self.args['calendar_entity_id']) == 'on'\n\n  def close_blinds(self):\n    blinds_entity_id = self.args['blinds_entity_id']\n    self.log(\"Closing blinds: {}\".format(blinds_entity_id))\n    self.call_service('cover/close_cover', entity_id=blinds_entity_id)\n\n  def open_blinds(self):\n    blinds_entity_id = self.args['blinds_entity_id']\n    self.log(\"Opening blinds: {}\".format(blinds_entity_id))\n\n    if self.current_luminance() >= 2500:\n      self.call_service('cover/set_cover_position', entity_id=blinds_entity_id, position=40)\n    else:\n      self.call_service('cover/open_cover', entity_id=blinds_entity_id)\n\n  def on_adaptation_callback(self, kwargs):\n    self.log(\"State callback triggered\")\n    self.update_blinds()\n\n  def close_treshold(self):\n    return float(self.args['close_treshold'])\n  \n  def current_luminance(self):\n    return float(self.get_state(self.args['luminance_entity_id']))\n\n  def update_blinds(self):\n    if not self.anyone_in_home():\n      self.log(\"Nobody home, closing blinds\")\n      self.close_blinds()\n      return\n\n    if self.sun_down():\n      self.log(\"Sun is down!\")\n      self.close_blinds()\n      return\n    \n    if self.is_in_control_time():\n      if self.current_luminance() >= self.close_treshold():\n        self.log(\"To bright: {} closing blinds\".format(self.current_luminance()))\n        self.close_blinds()\n      else:\n        self.log(\"It is ok: {} opening blinds\".format(self.current_luminance()))\n        self.open_blinds()\n    else:\n      self.log(\"Sun is up, but not in control time, ignore...\")\n      \n    "
  },
  {
    "path": "appdaemon/apps/humidifier.py",
    "content": "import appdaemon.plugins.hass.hassapi as hass\n\nclass HumidifierController(hass.Hass):\n  def initialize(self):\n    self.log(\"Started!\")\n\n    self.humidifer_id = self.args['humidifer']\n\n    self.listen_state(self.on_adaptation_callback, entity_id = self.args['family_devices'])\n    self.listen_state(self.on_adaptation_callback, entity_id = self.args['calendar'])\n    if 'balcone_door' in self.args:\n      self.listen_state(self.on_adaptation_callback, entity_id = self.args['balcone_door'])\n\n    self.adapt()\n\n  def on_adaptation_callback(self, entity, attribute, old, new, kwargs):\n    self.log(\"State callback triggered for {} from {} to {}. Adapting humdity\".format(entity, old, new))\n    self.adapt()\n\n  def balcone_door_opened(self):\n    if 'balcone_door' in self.args:\n      return self.get_state(self.args['balcone_door']) == 'on'\n    else:\n      return False\n\n  def anyone_in_home(self):\n    state = self.get_state(self.args['family_devices'])\n    self.log(\"State is {} for {}\".format(state, self.args['family_devices']))\n    return state == 'home'\n\n  def work_time(self):\n    if self.get_state(self.args['calendar']) == 'on':\n      self.log(\"Calendar: {} is On\".format(self.args['calendar']))\n      return True\n    else:\n      self.log(\"Calendar: {} is Off\".format(self.args['calendar']))\n      return False\n\n  def turn_off(self):\n    self.log(\"Turning off humidifier\")\n    self.call_service('humidifer/turn_off', entity_id=self.humidifer_id)\n\n  def turn_on(self):\n    self.log(\"Turning on humidifier\")\n    self.call_service('humidifier/turn_on', entity_id=self.humidifer_id)\n\n  def adapt(self):\n    self.log(\"Starting adaptation\")\n\n    if self.balcone_door_opened():\n      self.log(\"Balcone door opened, no sense to run humidify whole city\")\n      self.turn_off()\n    elif self.work_time():\n      self.turn_on()\n    else:\n      self.log(\"not working\")\n      self.turn_off()\n"
  },
  {
    "path": "appdaemon/apps/spotify_light.py",
    "content": "import appdaemon.plugins.hass.hassapi as hass\nimport json\nSPOTIFY_SENSOR_ENTITY_ID = 'sensor.spotify_cover'\nMAIN_LIGHT_ENTITY = 'group.living_room_main_light'\nAMBIENT_LIGHT = 'group.living_room_ambient_light'\nSPOTIFY_SOURCE = '[AV] Samsung Soundbar K650'\n\nclass SpotifyLight(hass.Hass):\n\n  def initialize(self):\n    self.listen_state(self.update_lighting_callback, entity = SPOTIFY_SENSOR_ENTITY_ID)\n    self.listen_state(self.update_lighting_callback, entity = MAIN_LIGHT_ENTITY)\n    self.listen_state(self.update_lighting_callback, entity = AMBIENT_LIGHT)\n    self.update()\n\n  def update_lighting_callback(self, entity, attribute, old, new, kwargs):\n    self.log(\"State callback triggered for {} from {} to {}.\".format(entity, old, new))\n    if (entity == SPOTIFY_SENSOR_ENTITY_ID and new == 'on') or (entity == MAIN_LIGHT_ENTITY and new == 'off') or (entity == AMBIENT_LIGHT):\n      self.update()\n\n  def update(self):\n    if self.get_state(SPOTIFY_SENSOR_ENTITY_ID) == 'off':\n      self.log(\"Spotify sensor is disabled... ignoring change of lighting\")\n      return\n\n    if self.get_state(MAIN_LIGHT_ENTITY) == 'on':\n      self.log(\"Main light are on, ignoreing change of lighing\")\n      return\n\n    if self.get_state(AMBIENT_LIGHT) == 'off':\n      self.log('Ambient Light turned off, so ignore...')\n      return\n\n    if self.get_state('media_player.spotify', attribute='source') != SPOTIFY_SOURCE:\n      self.log(\"Spotify source is not soundbar!, ignoring change of lighting\")\n      return\n\n    self.log(\"Accent color is: {}\".format(self.accent_color()))\n    self.log(\"Dominant color is: {}\".format(self.dominant_color()))\n\n    self.set_light('light.living_room_sofa', self.dominant_color())\n    #self.set_light('group.living_room_accent_ambient_light', self.accent_color())\n    self.publish_color('home/living_room/led_strip/desk/set', self.dominant_color(), 173)\n    self.publish_color('home/living_room/led_strip/lamp/set', self.accent_color(), 254)\n    self.publish_color('home/living_room/led_strip/tv/set', self.dominant_color(), 254)\n\n  def dominant_color(self):\n    return self.get_state(SPOTIFY_SENSOR_ENTITY_ID, attribute = 'dominant_rgb') or [255, 255, 255]\n\n  def accent_color(self):\n    return self.get_state(SPOTIFY_SENSOR_ENTITY_ID, attribute =  'accent_rgb_1') or [255, 255, 255]\n\n  def publish_color(self, topic, color, brightness):\n    self.log(\"Sending to {}\".format(topic))\n    self.call_service('mqtt/publish', topic=topic, payload=json.dumps({ 'state': 'ON', 'brightness': brightness }), qos=2)\n    self.call_service('mqtt/publish', topic=topic, payload=json.dumps({ 'state': 'ON', 'effect': 'SingleColor' }), qos=2)\n    self.call_service('mqtt/publish', topic=topic, payload=json.dumps({ 'state': 'ON', 'color': { 'r': color[0], 'g': color[1], 'b': color[2] } }), qos=2)\n\n\n  def set_light(self, entity_id, color):\n    self.turn_on(entity_id, brightness=193, rgb_color=color)\n"
  },
  {
    "path": "appdaemon/apps/temperature_lamp.py",
    "content": "import appdaemon.plugins.hass.hassapi as hass\r\n\r\ndef lerp(a, b, t):\r\n  return round(a*(1.0 - t) + b*t)\r\n\r\nclass TemperatureLamp(hass.Hass):\r\n  def initialize(self):\r\n    self.log(\"Started!\")\r\n\r\n    self.light_id = self.args['light_id']\r\n    self.temperature_id = self.args['outside_temperature_id']\r\n    self.family_devices_id = self.args['family_devices']\r\n    self.calendar_id = self.args['calendar_id']\r\n    self.cold_temperature = self.args['cold_temperature']\r\n    self.hot_temperature = self.args['hot_temperature']\r\n\r\n    self.listen_state(self.on_adaptation_callback, entity = self.family_devices_id)\r\n    self.listen_state(self.on_adaptation_callback, entity = self.temperature_id)\r\n    self.listen_state(self.on_adaptation_callback, entity = self.calendar_id)\r\n    self.adapt()\r\n\r\n  def light_time(self):\r\n    state = self.get_state(self.calendar_id)\r\n    self.log(\"State is {} for {}\".format(state, self.calendar_id))\r\n    return state == 'on'\r\n\r\n  def on_adaptation_callback(self, entity, attribute, old, new, kwargs):\r\n    self.log(\"State callback triggered for {} from {} to {}. \".format(entity, old, new))\r\n    self.adapt()\r\n\r\n  def current(self):\r\n    return float(self.get_state(self.temperature_id))\r\n\r\n  def anyone_in_home(self):\r\n    state = self.get_state(self.family_devices_id)\r\n    self.log(\"State is {} for {}\".format(state, self.family_devices_id))\r\n    return state == 'home'\r\n\r\n  def rgb_color(self):\r\n    c = [108, 181, 255]\r\n    h = [255, 162, 71]\r\n    progress = (self.current() - self.cold_temperature) / (self.hot_temperature - self.cold_temperature)\r\n    progress = max([0.0, progress])\r\n    progress = min([1.0, progress])\r\n    self.log(\"Progress: {}\".format(progress))\r\n\r\n    return [lerp(c[0], h[0], progress), lerp(c[1], h[1], progress), lerp(c[2], h[2], progress)]\r\n\r\n  def adapt(self):\r\n    self.log(\"Starting adaptation\")\r\n    if self.light_time():\r\n      if self.anyone_in_home():\r\n        self.log(\"People in home, switching on lamp\")\r\n        self.call_service('light/turn_on', entity_id = self.light_id, brightness = 150, rgb_color = self.rgb_color())\r\n      else:\r\n        self.log(\"Nobody home, turning off humidifier\")\r\n        self.call_service('light/turn_off', entity_id = self.light_id)\r\n    else:\r\n      self.log(\"No light time\")\r\n      self.call_service('light/turn_off', entity_id = self.light_id)"
  },
  {
    "path": "appdaemon/dashboards/Hello.dash",
    "content": "#\n# Main arguments, all optional\n#\ntitle: Hello Panel\nwidget_dimensions: [120, 120]\nwidget_margins: [5, 5]\ncolumns: 8\n\nlabel:\n    widget_type: label\n    text: Hello World\n    \nlayout:\n    - label(2x2)\n"
  },
  {
    "path": "bin/ddns.py",
    "content": "#!/usr/bin/env python\n# CloudFlare service mode. This enables/disables CF's traffic acceleration.\n# Enabled (orange cloud) is 1. Disabled (grey cloud) is 0.\n# cf_service_mode: 1\n#\n# CloudFlare DDNS script.\n#\n# usage:\n#   ddns.py domain subdomain cf_service_mode\n#   ddns.py test.local sub.test.local 1\n# See README for details\n#\n\nimport requests\nimport json\nimport time\nimport os\nimport sys\nfrom subprocess import Popen, PIPE\n\n# CloudFlare api url.\nCLOUDFLARE_URL = 'https://api.cloudflare.com/client/v4/'\n\n# Time-to-live for your A record. This should be as small as possible to ensure\n# changes aren't cached for too long and are propogated quickly.  CloudFlare's\n# api docs set a minimum of 120 seconds.\nTTL = '120'\n\n# DNS record type for your DDNS host. Probably an A record.\nRECORD_TYPE = 'A'\n\ndef main():\n  cf_key = os.environ['CLOUDFLARE_KEY']\n  cf_email = os.environ['CLOUDFLARE_EMAIL']\n  cf_domain = sys.argv[1]\n  cf_subdomain = sys.argv[2]\n  cf_service_mode = sys.argv[3]\n  quiet = False\n  use_dig = False\n\n  auth_headers = {\n    'X-Auth-Key': cf_key,\n    'X-Auth-Email': cf_email,\n    'Content-Type': 'application/json'\n  }\n\n  log('info', \"DDNS for domain: {} in subdomain {}\".format(cf_domain, cf_subdomain))\n  public_ip = requests.get(\"https://ipv4.icanhazip.com/\").text.strip()\n  log('info', \"Current ip is: {}\".format(public_ip))\n  ### Get zone id for the dns record we want to update\n  results = get_paginated_results(\n    'GET',\n    CLOUDFLARE_URL + '/zones',\n    auth_headers,\n  )\n  cf_zone_id = None\n  for zone in results:\n    zone_name = zone['name']\n    zone_id = zone['id']\n    if zone_name == cf_domain:\n      cf_zone_id = zone_id\n      break\n  if cf_zone_id is None:\n    raise Exception(\"Snap, can't find zone '{}'\".format(cf_domain))\n\n  ### Get record id for the record we want to update\n  if cf_subdomain == '':\n    target_name = cf_domain\n  else:\n    target_name = cf_subdomain + '.' + cf_domain\n  results = get_paginated_results(\n    'GET',\n    CLOUDFLARE_URL + '/zones/' + cf_zone_id + '/dns_records',\n    auth_headers,\n  )\n  cf_record_obj = None\n  for record in results:\n    record_id = record['id']\n    record_name = record['name']\n    if record_name == target_name:\n      cf_record_obj = record\n      break\n  if cf_record_obj is None:\n    raise Exception(\"Snap, can't find record '{}'\".format(target_name))\n\n  if not quiet:\n    print(json.dumps(cf_record_obj, indent=4))\n\n  ### Update the record\n  current_record_ip = cf_record_obj['content']\n  if current_record_ip == public_ip:\n    # If this record already has the correct IP, we return early\n    # and don't do anything.\n    if not quiet:\n      log('unchanged', '{}, {}'.format(target_name, public_ip))\n    return\n\n  cf_record_obj['content'] = public_ip\n  r = requests.put(\n    CLOUDFLARE_URL\n      + '/zones/'\n      + cf_zone_id\n      + '/dns_records/'\n      + cf_record_obj['id'],\n    headers=auth_headers,\n    json=cf_record_obj\n  )\n  status_was_error = False\n  if r.status_code < 200 or r.status_code > 299:\n    log(\n      'error',\n      \"CloudFlare returned an unexpected status code: {}, for \"\n      \"dns_records update request.\"\n      .format(r.status_code)\n    )\n    status_was_error = True\n  response = r.json()\n  if response[\"errors\"] or status_was_error:\n    die(\"Updating record failed with the response: '{}'\".format(\n      json.dumps(response)\n    ))\n  else:\n    log('updated', \"{}, {}\".format(target_name, public_ip))\n\n\n  return\n\n\ndef die(msg):\n  log('error', msg)\n  raise Exception(msg)\n\n\ndef get_paginated_results(method, url, auth_headers):\n  \"\"\"\n  Executes the cloudflare api call, fetches all pages and returns the\n  concatenated result array.\n  \"\"\"\n\n  results = []\n  page = 0\n  total_pages = None\n  while page != total_pages:\n    page += 1\n    r = requests.request(\n      method,\n      url,\n      params={ 'page': page },\n      headers=auth_headers\n    )\n\n    if r.status_code < 200 or r.status_code > 299:\n      die(\n        \"CloudFlare returned an unexpected status code: {}, for \"\n        \"request: {} {}\"\n        .format(\n          r.status_code,\n          url,\n          r.text\n        )\n      )\n\n    response = r.json()\n    results.extend(response['result'])\n    total_pages = response['result_info']['total_pages']\n  return results\n\n\n\n# TODO use a real logging framework.\ndef log(status, message=''):\n  print(\n    \"{date}, {status:>10}, '{message}'\".format(\n      date=time.ctime(),\n      status=status,\n      message=message\n    )\n  )\n  return\n\n\nif __name__ == '__main__':\n  main()\n"
  },
  {
    "path": "bin/lovelace-gen.py",
    "content": "import argparse\nimport os\nimport sys\nimport codecs\nimport time\n\nfrom ruamel.yaml import YAML\nfrom ruamel.yaml.constructor import RoundTripConstructor\nimport jinja2\n\nMAIN_FILE = 'main.yaml'\nGENERATOR_MESSAGE = \"\"\"\n# This file is automatically generated by lovelace-gen.py\n# https://github.com/thomasloven/homeassistant-lovelace-gen\n# Any changes made to it will be overwritten the next time the script is run.\n\"\"\"\n\ndef get_input_dir(inp):\n    if not inp:\n        if os.path.exists(os.path.join('/config/lovelace', MAIN_FILE)):\n            return '/config/lovelace'\n        if os.path.exists(os.path.join('lovelace/', MAIN_FILE)):\n            return 'lovelace/'\n\n    if os.path.exists(os.path.join(inp, MAIN_FILE)):\n        return inp\n    print(\"Input file main.yaml not found.\", file=sys.stderr)\n    sys.exit(2);\n\ndef process_file(path):\n    global jinja\n    template = jinja.get_template(path)\n    yaml = YAML(typ='rt')\n    yaml.preserve_quotes = True\n    yaml.Constructor = RoundTripConstructor\n    return yaml.load(template.render())\n\ndef include_statement(loader, node):\n    return process_file(node.value)\nRoundTripConstructor.add_constructor(\"!include\", include_statement)\n\ndef env_var(loader, node):\n    return os.environ[node.value]\nRoundTripConstructor.add_constructor(\"!env_var\", env_var)\n\ndef file_statement(loader, node):\n    path = node.value\n    timestamp = time.time()\n    if '?' in path:\n        return f'{path}&{str(timestamp)}'\n    else:\n        return f'{path}?{str(timestamp)}'\nRoundTripConstructor.add_constructor(\"!file\", file_statement)\n\ndef main():\n    global jinja\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"input\", help=\"Input directory\", nargs='?')\n    parser.add_argument(\"-o\", \"--output\", help=\"Output file\")\n\n    args = parser.parse_args()\n\n    inp = get_input_dir(args.input)\n    outp = args.output or os.path.join(inp, '..', 'ui-lovelace.yaml')\n\n    jinja = jinja2.Environment(loader=jinja2.FileSystemLoader(inp))\n\n    try:\n        data = process_file(MAIN_FILE)\n    except Exception as e:\n        print(\"Processing of yaml failed.\")\n        print(e)\n        raise e\n        sys.exit(3)\n\n    try:\n        with codecs.open(outp, 'w', 'utf-8') as fp:\n            fp.write(GENERATOR_MESSAGE)\n            yaml = YAML()\n            yaml.dump(data, fp)\n    except Exception as e:\n        print(\"Writing ui-lovelace.yaml failed.\")\n        print(e)\n        sys.exit(4)\n\nif __name__ == '__main__':\n    main()"
  },
  {
    "path": "bin/smart-house",
    "content": "#!/usr/bin/env bash\n\nCOMMAND=${1}\nshift 1\nCOMMAND_ARGS=${@}\n\nfunction smart_house_command_help() {\n  echo \"\n  🏡  SmartHouse\n\n  $ smart-house help                                  - print this help message\n  $ smart-house pihole                                - manage pihole\n  $ smart-house media                                 - manage media\n  $ smart-house support                               - manage support\n  $ smart-house restart                               - restart all services\n  $ smart-house docs                                  - start preview mkdocs process\n  $ smart-house certbot                               - update ssl certificates\n  $ smart-house quick-restart                         - restart only home-assistant\n  $ smart-house cleanup                               - cleanup docker shit\n  $ smart-house ps                                    - show processes\n  $ smart-house unban <ip>                            - unban ip\n  $ smart-house psql                                  - connect to docker postgresql instance\n  $ smart-house migrate                               - migrate database\n  $ smart-house health-check                          - ensure if home assistant is healthy\n  $ smart-house start                                 - start all services\n  $ smart-house status                                - status of all services\n  $ smart-house logs                                  - print all logs\n  $ smart-house stop                                  - stop all services\n  $ smart-house ddns                                  - update dns on cloudflare\n  $ smart-house backup                                - backup all data\n  $ smart-house env                                   - print all envs\n  $ smart-house dev                                   - dev mode\n  $ smart-house lovelace                              - generate lovelace config\n  $ smart-house lovelace-dev                          - regenerate lovelace on file change\n  $ smart-house validate-config                       - check if config is ok\n  $ smart-house build container                       - rebuild container\n  $ smart-house upgrade                               - upgrade current home assistant\n  $ smart-house docker-compose args                   - run docker compose commands\n  $ smart-house add-mosquitto-user name               - creates new user and generates for him random password\n  $ smart-house disable-aotec-blinking                - disable stupid blinking on aotec dongle\n\"\n}\n\nsource \"${SMART_HOUSE_DIR}/scripts/smart-house.sh\"\n\nfunction main() {\n  if [ -z ${SMART_HOUSE_DIR+x} ];\n    then echo \"\\$SMART_HOUSE_DIR is unset\";\n    return 1;\n  fi;\n\n  smart_house_load_variables \".env.postgresql\";\n  smart_house_load_variables \".env.influxdb\";\n  smart_house_load_variables \".env.grafana\";\n  smart_house_load_variables \".env.pihole\";\n  smart_house_load_variables \".env.home-assistant\";\n  smart_house_load_variables \".env.crontab\";\n  smart_house_load_variables \".env.local\";\n  smart_house_load_variables \".env.mysql\";\n  smart_house_load_variables \".env.orion\";\n\n  cd $SMART_HOUSE_DIR;\n  if ! smart_house_execute_command; then\n    return 1\n  fi\n}\n\nmain\n"
  },
  {
    "path": "bin/smart-house-provision",
    "content": "#!/usr/bin/env bash\n\nCOMMAND=${1}\nshift 1\nCOMMAND_ARGS=${@}\n\nfunction provision_command_help() {\n  echo \"\n  ☢️  SmartHouse Provisioner\n\n  $ smart-house-provision help                          - print this help message\n  $ smart-house-provision dev                           - test provision on local vagrant machine\n  $ smart-house-provision quick-dev                     - just run provision\n  $ smart-house-provision server                        - provision all home servers\n  $ smart-house-provision ngrok                         - initialize ngrok pointing into vagrant machine\n\"\n}\n\nfunction provision_validate_command() {\n  if [ \"$(type -t provision_command_${COMMAND})\" = function ]; then\n    return 0\n  else\n    echo \"Unknown command: ${COMMAND}\"\n    provision_command_help\n    return 1\n  fi\n}\n\nfunction provision_execute_command() {\n  if ! provision_validate_command; then\n    return 1\n  fi\n  provision_command_${COMMAND} ${COMMAND_ARGS}\n  return $?\n}\n\nfunction provision_run_local() {\n  ssh-add ~/.ssh/id_rsa;\n  ansible-playbook --ssh-common-args=\"-o ForwardAgent=yes $(vagrant ssh-config | awk 'NR>1 {print \" -o \"$1\"=\"$2}')\" -u vagrant provision/playbook.yml -i provision/inventory.vagrant.ini\n}\n\nfunction provision_command_dev() {\n  vagrant destroy --force;\n  vagrant up && \\\n  ansible-galaxy install -r provision/install_roles.yml && \\\n  provision_run_local;\n}\n\nfunction provision_command_ngrok() {\n  ngrok http 7000 --host-header=rewrite;\n}\n\nfunction provision_command_server() {\n  ansible-galaxy install -r provision/install_roles.yml;\n  ansible-playbook --ssh-common-args=\"-o ForwardAgent=yes\" provision/playbook.yml -i provision/inventory.ini\n}\n\nfunction provision_command_quick-dev() {\n  provision_run_local && vagrant ssh;\n}\n\nfunction main() {\n  if ! provision_execute_command; then\n    return 1\n  fi\n}\n\nmain\n"
  },
  {
    "path": "btc-explorer/Dockerfile",
    "content": "FROM node:8 as builder\r\n\r\nRUN apt-get -yqq install git \\\r\n    && git clone --depth 1 --single-branch --branch master https://github.com/janoside/btc-rpc-explorer \\\r\n    && cd /btc-rpc-explorer \\\r\n    && npm install\r\n\r\nFROM node:8-alpine\r\nWORKDIR /btc-rpc-explorer\r\nCOPY --from=builder /btc-rpc-explorer .\r\nCMD npm start\r\nEXPOSE 3002"
  },
  {
    "path": "docker-compose.health.yaml",
    "content": "# Small laboratory\r\nversion: '3.5'\r\n\r\nservices:\r\n  speedtest:\r\n    image: macbury/speedtest:latest\r\n    env_file:\r\n      - '.env.speedtest'\r\n    ports:\r\n      - 6888:80\r\n"
  },
  {
    "path": "docker-compose.media.yaml",
    "content": "# All media services, that don't need to be always online\nversion: '3.5'\n\nservices:\n  sonarr:\n    image: linuxserver/sonarr\n    ports:\n      - 8989:8989\n    environment: \n      PUID: 0\n      PGID: 0\n      TZ: \"Europe/Warsaw\"\n    volumes:\n      - .docker/data/snarr:/config\n      - /mnt/MoviesAndTV:/tv\n      - /home/downloads:/downloads\n\n  plex:\n    network_mode: host\n    image: plexinc/pms-docker:latest\n    env_file:\n      - .env.plex\n    volumes:\n      - .docker/data/plex/config:/config\n      - .docker/data/plex/transcode:/transcode\n      - /mnt:/data\n"
  },
  {
    "path": "docker-compose.support.yaml",
    "content": "\n# Supporting services, like database that always must be online\nversion: '3.5'\n\nservices:\n  glances:\n    image: nicolargo/glances:latest-full\n    volumes:\n      - \"./glances/glances.conf:/glances/conf/glances.conf\"\n      - \"/var/run/docker.sock:/var/run/docker.sock:ro\"\n    network_mode: 'host'\n    environment:\n      - GLANCES_OPT=-w\n  synapse:\n    image: \"matrixdotorg/synapse:v1.60.0\"\n    restart: \"unless-stopped\"\n    ports:\n      - \"127.0.0.1:18008:8008\"\n      - \"127.0.0.1:18448:8448\"\n    volumes:\n      - \".docker/data/im:/data\"\n    env_file:\n      - '.env.im'\n    depends_on:\n      - redis\n      - database\n  synapse_riot:\n    image: \"vectorim/element-web:latest\"\n    restart: \"unless-stopped\"\n    ports:\n      - \"127.0.0.1:18010:80\"\n    volumes:\n      - \".docker/data/synapse_riot/config.json:/app/config.json\"\n    depends_on:\n      - synapse\n  synapse_admin:\n    image: awesometechnologies/synapse-admin:latest\n    ports:\n      - \"127.0.0.1:18009:80\"\n    depends_on:\n      - synapse\n  # protonmail:\n  #   image: macbury/protonmail:latest\n  #   restart: unless-stopped\n  #   volumes:\n  #     - .docker/data/protonmail:/root\n  transfer:\n    image: dutchcoders/transfer.sh:latest\n    ports:\n      - \"18031:8080\"\n    env_file:\n      - '.env.transfer'\n    restart: always\n  ci:\n    image: drone/drone:2.12\n    env_file:\n      - '.env.ci'\n    restart: always\n    volumes:\n      - /etc/timezone:/etc/timezone:ro\n      - /etc/localtime:/etc/localtime:ro\n      - .docker/data/drone:/data\n    ports:\n      - \"4282:80\"\n    depends_on:\n      - git\n  git:\n    image: gitea/gitea:latest\n    env_file:\n      - '.env.git'\n    restart: always\n    volumes:\n      - .docker/data/gitea:/data\n      - /etc/timezone:/etc/timezone:ro\n      - /etc/localtime:/etc/localtime:ro\n    ports:\n      - \"3282:3000\"\n      - \"2222:22\"\n    depends_on:\n      - database\n  rss-bridge:\n    image: rssbridge/rss-bridge:latest\n    dns:\n      - 9.9.9.9\n      - 149.112.112.112\n    ports:\n      - '59900:80'\n  node-red:\n    build: ./node-red/\n    restart: unless-stopped\n    dns:\n      - 9.9.9.9\n      - 149.112.112.112\n    ports:\n      - 51880:1880\n    environment:\n      - TZ=Europe/Warsaw\n      - NODE_TLS_REJECT_UNAUTHORIZED=0\n    volumes:\n      - .docker/data/node-red:/data\n      - /mnt/Music:/music\n  gotify:\n    image: gotify/server:latest\n    ports:\n      - \"0.0.0.0:5580:80\"\n    volumes:\n      - .docker/data/gotify:/app/data\n  redis:\n    image: redis:4.0.10\n    ports:\n      - 6379:6379\n    volumes:\n      - .docker/data/redis:/data\n  nextcloud:\n    build: ./nextcloud/\n    ports:\n      - 4333:9000\n    env_file:\n      - '.env.nextcloud'\n    volumes:\n      - .docker/data/nextcloud_next:/var/www/html\n    depends_on:\n      - database\n      - redis\n    healthcheck:\n      test: [ \"CMD\", \"curl\", \"http://localhost\" ]\n      timeout: 45s\n      interval: 30s\n      retries: 3\n  database:\n    image: postgres:14.3-alpine3.16\n    restart: unless-stopped\n    environment:\n      POSTGRES_HOST_AUTH_METHOD: \"md5\"\n    security_opt:\n      - seccomp:unconfined\n    ports:\n      - 0.0.0.0:4101:5432\n    environment:\n      PGDATA: /data\n    env_file:\n      - '.env.postgresql'\n    volumes:\n      - .docker/data/next_postgresql:/data\n  esphome:\n    image: esphome/esphome:latest\n    volumes:\n      - .docker/data/esphome:/config\n      - /etc/localtime:/etc/localtime:ro\n    network_mode: host\n  monio:\n    restart: unless-stopped\n    image: macbury/mon.io:latest\n    ports:\n      - 14000:3000\n    volumes:\n      - .docker/data/monio/:/app/storage\n    env_file:\n      - .env.monio\n    depends_on:\n      - database\n"
  },
  {
    "path": "docker-compose.yaml",
    "content": "# Main home assistant docker compose services thingy, fuck i need a coffee, my engrish soo bad\nversion: '3.5'\nservices:\n  home-assistant:\n    image: homeassistant/home-assistant:2022.6.2\n    extra_hosts:\n      - \"outside:${HOME_ASSISTANT_IP}\"\n    env_file:\n      - '.env.home-assistant'\n      - '.env.influxdb'\n      - '.env.local'\n    restart: unless-stopped\n    cap_add:\n      - net_bind_service\n    privileged: true\n    network_mode: host\n    environment:\n      - TZ=Europe/Warsaw\n      - HOME_ASSISTANT_DB_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:4101/${POSTGRES_DB}\n    volumes:\n      - ./home-assistant:/config\n      - /var/log/fail2ban.log:/fail2ban/fail2ban.log:ro\n    devices:\n      - ${HOME_ASSISTANT_ZWAVE_DEV}:/dev/ttyACM0\n  appdaemon:\n    image: acockburn/appdaemon:latest\n    restart: unless-stopped\n    network_mode: host\n    env_file:\n      - '.env.home-assistant'\n    environment:\n      - HA_URL=http://localhost:8123\n      - TOKEN=${HOME_ASSISTANT_API_PASSWORD}\n      - DASH_URL=http://localhost:15050\n    volumes:\n      - ./appdaemon:/conf\n"
  },
  {
    "path": "docker-compose.zwave.yaml",
    "content": "version: '3'\nservices:\n  zwave:\n    build:\n      context: ./zwave\n      dockerfile: Dockerfile\n    network_mode: host\n    security_opt:\n      - seccomp:unconfined\n    devices:\n      - \"/dev/ttyACM0\"\n    volumes:\n      - .docker/data/zwavejs/cache:/cache\n    ports:\n      - \"9312:3000\"\n    restart: unless-stopped\n    env_file:\n      - '.env.zwave'\n"
  },
  {
    "path": "docs/DIY/CatFeeder/README.md",
    "content": "https://www.youtube.com/watch?v=sCOkuyH7CPo\n"
  },
  {
    "path": "docs/DIY/CatFeeder/index.md",
    "content": "## Automatic Cat Feeder\n\n![header](header.jpg)\n\nImagine, it is 6:00 AM Saturday morning, you are laying comfortably in the bed, sleeping nicely. Suddenly you hear cat is scratching on the door, loud meows become unbearable and your cat has infinite time to let you know what he needs. Do you know what he needs? I know what he wants. He needs food now! Right now! Because once upon time, in old days I've given him a food at that time... And of course it became a new standard time for feeding.\n\nThis situation gave me an idea to build automatic cat feeder, that would remove troublesome morning cat feeding and of course make cat happy.\n\n### First generation\n\nFirst generation of the cat feeder was simple MVP created using some cardboard, simple servo and ESP WeMos. It worked using servo to rotate by 180 degrees top container to dispense food.\n\n<iframe width=\"960\" height=\"415\" src=\"https://www.youtube-nocookie.com/embed/XM9isy4HUUo\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n\nMicrocontroller connected to my local WiFi and communicated with Smart Home server running HomeAssistant over MQTT protocol. Thanks to that, I was able to use HomeAssistant automation system to schedule feeding and dispensing food through Google Home commands. Scheduling for feeding was defined as special events in Google Calendar. It allowed me to easliy control cats feeding time and change it when needed.\n\nOf course this implementation had some problems:\n\n* sometimes top container had been breaking away from servo handle and had spilled whole food (I've been calling it \"The Jackpot Effect\"),\n* it didn't have the best looks,\n* cardboard started to deteriorate.\n\nAs with most MVP it had been used on production for 2 years until it finally broke.\n\n### Second generation\n\nI have decided that next cat feeder should:\n\n* be built from 3D printed parts,\n* use Raspberry Pi 3,\n* have small camera to watch, how cat is reacting and wht he is doing.\n\nI have started whole process from designing basic elements for food paritioning. Than, when designs were ready, all modeled elements were printed using Creality Ender-3 and PLA transparent filament:\n\n<iframe width=\"960\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/3vbX-7o-h1c\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n\n#### Parts\nAfter ensuring that everything is working, I proceeded to design and print rest of parts:\n\n##### Base for RaspberryPi (Level 0)\n\n![base](base.jpg)\n\nIt has special places for screws to install Raspberry Pi. Additionaly, on the front, there is a small hole for easy access to Raspberry Pi SD card.\n\n##### Bowl holder\n\nThis plastic part is used for placing metal food bowl (of course it was printed using gold filament, for cats fame and glory). It is connected with base using 2 neodymium magnets.\n\n![parts](bowl.jpg)\n\n##### Servo holder (Level 1)\n\nThis level is used for holding servo while it rotates part on the next level. It also has small slope for better food serving.\n\n![parts](servo_holder.jpg)\n\n##### Ration mechanism container (Level 2)\n\nThis is just generic level that portions food from container placed above. It is rotated by servo.\n\n![parts](ration_container.jpg)\n\n##### Food container holder (Level 3)\n\nThis part is used for holding food container. Food container is only one plastic part that is not 3D printed. The reasoning was that I wanted to minimize food contact with 3D printed parts. In theory used transparent PLA plastic don't have any toxic contaminants, but just to be sure, I bought the cheapest cereal dispenser and took the food container part. Also, it looks really cool.\n\n![parts](fc.jpg)\n\n##### Housing and lid\n\nThe last two parts were housing and lid. Nothing special here, except more gold for even better looks and cats admiration.\n\n![parts](tc.jpg)\n\n##### All parts\n\n![parts](parts.jpg)\n\n##### Final assembly\n\n![final](final.jpg)\n\n#### Software\n\nRaspberry Pi is running raspbian provisioned using [ansible playbook](https://github.com/macbury/SmartHouse/blob/master/provision/playbooks/cat_feeder/cat.yaml) to run these services:\n\n##### MotionEye\n\nMotioneye is opensource software for building your own private monitoring solution. It detects any camera connected to Raspberry Pi. Additionaly, out of the box, you get motion detection, endpoint for sharing stream and webhook support.\n\n##### Servo service\n\nThis service controls rotation of the servo. It is simple python script that connects to MQTT server running my smart house software and awaits for message triggering rotation.\n\n##### Led service\n\nAs servo service, it implements protocol for light source controlled by MQTT in [HomeAssistant](https://www.home-assistant.io/integrations/light.mqtt/)\n\n##### Home assistant automation\n\nAnd finally the HomeAssistant automation that triggers feeding.\n\nIt triggers feeding in two situations:\n\n* if feeding time in calendar appears,\n* if International Space Station is above my home location.\n\nThis automation looks like this:\n\n```YAML\n- alias: Feed the cat\n  trigger:\n    - platform: state\n      entity_id: 'binary_sensor.iss'\n      from: 'off'\n      to: 'on'\n    - platform: state\n      entity_id: calendar.cat_feed_schedule\n      from: 'off'\n      to: 'on'\n  action:\n    - service: script.feed_the_cat\n\n```\n\n### Summary\n\nIt is obvious, that this version isn't the last one. But it serves it's purpuse - cat is well nourished and I have easier mornings :)\n\n<iframe width=\"960\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/UsKsxxO5i4k\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n"
  },
  {
    "path": "docs/DIY/LedStrips/index.md",
    "content": "## Page in progress :P\nDesk led strip: 39\nPin: D3\n\nhttps://www.home-assistant.io/components/light.mqtt/\nhttps://github.com/macbury/mqtt_led_strip\n\n<iframe width=\"960\" height=\"480\" src=\"https://www.youtube-nocookie.com/embed/CUos4Ru7430?controls=0\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n\n<iframe width=\"960\" height=\"480\" src=\"https://www.youtube-nocookie.com/embed/7am4fcr48L4?controls=0\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>"
  },
  {
    "path": "docs/DIY/RiggadLamp/index.md",
    "content": "![Preview](./header.jpg)\n\nI always wanted smart lamp with wirless charging so I decided to modify my [Ikea RIGGAD Lamp](https://www.ikea.com/pl/pl/catalog/products/60385636/). This setup was done by combining:\n\n* [WeMos D1 mini](https://wiki.wemos.cc/products:d1:d1_mini)\n* [NeoPixel Ring](https://www.adafruit.com/product/1463)\n* [Pololu D24V10F5 step down 5V 1A](https://www.pololu.com/product/2831/specs)\n* [Small amount of C code](https://github.com/macbury/mqtt_led_strip)\n* [Riggad Lamp](https://www.ikea.com/pl/pl/catalog/products/60385636/)\n\nCommunication with lamp is done through MQTT and I can controll this lamp using [MQTT Light Component](https://www.home-assistant.io/components/light.mqtt/):\n\n```yaml\n- platform: mqtt_json\n  command_topic: 'home/living_room/led_strip/desk/set'\n  state_topic: 'home/living_room/led_strip/desk'\n  name: 'Work desk lamp'\n  qos: 1\n  rgb: true\n  retain: false\n  brightness: true\n  effect_list: !include led_strip_effects.yaml\n  effect_value_template: '{{ json_value.effect }}'\n```\n\n<iframe width=\"960\" height=\"480\" src=\"https://www.youtube-nocookie.com/embed/iVw9GvY-IWI\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>"
  },
  {
    "path": "docs/Hardware/index.md",
    "content": "This is the list of all hardware that is present in my smart house.\n\n## Computers\n\n### Gigabyte BRIX GB-BPCE-3455\nI needed something more powerfull than RaspberryPi to host all services running my Smart House. [Gigabyte BRIX GB-BPCE-3455](https://www.gigabyte.com/Mini-PcBarebone/GB-BPCE-3455-rev-10#ov) can be extended by normal hard drive and RAM (in my case 8GB RAM and 250GB SSD). The Intel Celeron inside this small box have enought power to even transcode 4K video(plex in docker) and small amount of machine learning.\n\n### Raspberry Pi 3\nThis small computer is used mainly for DIY stuff like [cat feeder](/DIY/CatFeeder) and [Gateway](/DIY/BluetoothGateway) . First version of my smart house run on one of these, but quickly my requirements outgrown its computing power.\n\n\n## Z-Wave\nMy adventure with [Z-Wave](https://www.z-wave.com/) started with [Danfoss Thermostats](https://products.z-wavealliance.org/products/93), after one winter, I received astronomical bill for heating. Interaction with all Z-Wave devices is done using [Aeotec Z-Stick Gen5](https://aeotec.com/z-wave-usb-stick) that is plugged to my Gigabyte BRIX. The cool thing about this setup is that each device is from different manufacturer and they work together. Currently my arsenal of Z-Wave devices consits:\n\n| Device | Quantity | Component | Notes |\n| ------------- | :---: | ------------- | ------------- |\n| [Aeotec Z-Stick Gen5](https://aeotec.com/z-wave-usb-stick) | 1 | [Z-Wave](https://www.home-assistant.io/components/zwave/) | Main Z-Wave Hub as usb dongle |\n| [Danfoss Z-Wave Thermostats](https://products.z-wavealliance.org/products/93) | 3 | [Z-Wave Climate](https://www.home-assistant.io/components/climate.zwave/) | Used for controlling temperature in rooms |\n| [NEO Coolcam - Door/Window Sensor](https://shop.zwave.eu/products/sensors/door-window-sensors/1567/neo-coolcam-door/window-sensor) | 5 | [Z-Wave Binary Sensor ](https://www.home-assistant.io/components/binary_sensor.zwave/) | Used for detecting what doors are open/closed |\n| [NEO Coolcam - Motion Sensor](https://shop.zwave.eu/detail/index/sArticle/1764) | 2 | [Z-Wave Binary Sensor ](https://www.home-assistant.io/components/binary_sensor.zwave/) | For detecting cat movement and some light automations |\n| [NEO Coolcam - Flood Water Leak Alarm Senso](https://www.aliexpress.com/item/NEO-COOLCAM-Z-wave-Flood-Water-Leak-Alarm-Sensor-Water-Leakage-Sensor-Z-wave-Sensor-Alarm/32787289062.html) | 1 | [Z-Wave Binary Sensor](https://www.home-assistant.io/components/binary_sensor.zwave/) | For detecting leakage in bathroom |\n| [Fibaro Relay Switch](https://manuals.fibaro.com/relay-switch/) | 8 | [Z-Wave Switch](https://www.home-assistant.io/components/switch.zwave/) | Controling lights and switches |\n| [Roller Shutter 3](https://manuals.fibaro.com/roller-shutter-3/) | 1 | [Z-Wave Cover](https://www.home-assistant.io/components/zwave/) | Controling living room blinds |\n| [NEO Coolcam - Power Plug](https://www.aliexpress.com/item/NEO-COOLCAM-Z-wave-EU-Smart-Power-Plug-Socket-Home-Automation-Alarm-System-home-Compatible-with/32787926055.html) | 2 | [Z-Wave switch](https://www.home-assistant.io/components/zwave/) | Used for detecting if AGD stuff is working |\n\n## ZigBee\n\n### Philips Hue\nI`m using [Philips Hue Hub Gen 2](https://www.amazon.com/gp/product/B014H2P42K/) for controlling my [TRÅDFRI](https://www.ikea.com/us/en/catalog/categories/departments/home_electronics/36812/) lights. The default gateway from Ikea was buggy as hell. After few hours it stopped responding and only fix was to restart it by plugging device from power.\n\n| Device | Quantity | Component |\n| ------------- | :---: | ------------- |\n| [TRÅDFRI Bulb](https://www.ikea.com/us/en/catalog/products/80339436/) | 2 | [Hue](https://www.home-assistant.io/components/hue/) |\n\n### Xiaomi\nCurrently most of my sensors is Xiaomi, so I need to use their Gateway to integrate them with Home Assistant. It does intergrate with its ecosystem pretty ok, with support for playing a sound and it also has a rgb led which will change colours on events like upcoming rain, etc. Gateway has blocked access to network(this is still chines company duh.)\n\n| Device | Quantity | Component | Notes |\n| ------------- | :---: | ------------- | ------------- |\n| [Mi Air Purifier 2](https://www.mi.com/global/air2/) | 1 | [Xiaomi Air Purifier](https://www.home-assistant.io/components/fan.xiaomi_miio/) | Air purifier in bedroom room |\n| [Mi Air Purifier 2s](https://www.xiaomistore.pk/mi-air-purifier-2s.html) | 1 | [Xiaomi Air Purifier](https://www.home-assistant.io/components/fan.xiaomi_miio/) | Air purifier in living room |\n| [Xiaomi Aqara Hub](https://www.aqara.com/en/smart_hub-product.html) | 1 | [Xiaomi Gateway (Aqara)](https://www.home-assistant.io/components/xiaomi_aqara/) | Used for communication with wirless switches and temperature sensors |\n| [Xiaomi Aqara Wireless Remote Switch](https://www.aqara.com/en/86plug.html) | 6 | [Xiaomi Switch](https://www.home-assistant.io/components/switch.xiaomi_aqara/) | These switches are used for triggering various automations |\n| [Xiaomi Mijia Roborock Vacuum Cleaner 2](https://xiaomi-mi.co.uk/mi-smart-home/xiaomi-mijia-roborock-robot-vacuum-cleaner-2-white/) | 1 | [Xiaomi Mi Robot Vacuum](https://www.home-assistant.io/components/vacuum.xiaomi_miio/) | Automated to run at specific times based on presence detection. |\n| [Xiaomi Mijia Roborock Vacuum Cleaner 2](https://xiaomi-mi.co.uk/mi-smart-home/xiaomi-mijia-roborock-robot-vacuum-cleaner-2-white/) | 1 | [Xiaomi Mi Robot Vacuum](https://www.home-assistant.io/components/vacuum.xiaomi_miio/) | Automated to run at specific times based on presence detection. |\n| [Xiaomi Aqara Temperature Humidity Sensor](https://www.amazon.com/OUKU-Xiaomi-Temperature-Humidity-Sensor/dp/B078T7PDTR) | 3 | [Xiaomi Aqara](https://www.home-assistant.io/components/xiaomi_aqara/) | For sampling temperature and humidity in rooms without air purifiers(they have humidity and temperature sensors inside them) |\n\n## Wi-Fi Network\nAnd here are all devices that are connected over Wi-Fi network:\n\n| Device  | Quantity | Connection | Home Assistant | Notes |\n| ------------- | :---: | ------------- | ------------- | ------------- |\n| [Amazon Echo DOT](https://www.amazon.com/gp/product/B01DFKC2SO) | 3 | WiFi | [Alexa / Amazon Echo](https://www.home-assistant.io/components/alexa/) | The Alexa devices are used as interface to interact with HomeAssistant |\n| [Playstation 4](https://www.playstation.com/en-us/explore/ps4/) | 1 | WiFi | [PS4](https://www.home-assistant.io/components/ps4/) | For playing and watching stuff that requires DVD/Blurays |\n| [HW-K650 Soundbar w/ Wireless Subwoofer](https://www.samsung.com/us/televisions-home-theater/home-theater/sound-bars/samsung-hw-k650-soundbar-w-wireless-subwoofer-hw-k650-za/) | 1 | WiFi | [ha_samsung_multi_room](https://github.com/macbury/ha_samsung_multi_room) | Some sound goodies control stuff |\n| [LG webOS TV 55SK8100PLA](https://www.lg.com/pl/telewizory/lg-55SK8100PLA) | 1 | WiFi | [LG webOS Smart TV ](https://www.home-assistant.io/components/media_player.webostv/) | Watching movies, showing Home Assistant panel and notifications |\n| [Netgear Switch GS108GE](https://www.netgear.com/support/product/GS108.aspx) | 1 | Ethernet | - | Asus lyra has only two ethernet ports. |\n| [Mesh network router Asus Lyra](https://www.asus.com/us/Networking/Lyra/) | 1 | WiFi | [Asuswrt](https://www.home-assistant.io/components/asuswrt/) | Network, remote access through VPN |\n| [QNAP TS-228](https://www.qnap.com/en-us/product/ts-228) | 1 | Ethernet | [QNAP Sensor ](https://www.home-assistant.io/components/sensor.qnap/) | Main storage array for backups, TimeMachine and photos |\n| [RIGGAD Lamp](https://www.ikea.com/pl/pl/catalog/products/60385636/) | 1 | Wi-Fi | [MQTT Light](https://www.home-assistant.io/components/light.mqtt/) | Lamp with wirless charging. Additionaly I have replaced default bulb with [NeoPixel Ring](https://www.adafruit.com/product/1463) and [WeMos D1 mini](https://wiki.wemos.cc/products:d1:d1_mini). [See this in action](https://www.youtube.com/watch?v=iVw9GvY-IWI) |\n| [Linak Desk](https://www.linak.com/business-areas/desks/office-desks/) | 1 | Bluetooth | [MQTT Cover](https://www.home-assistant.io/components/cover.mqtt/) | Nice desk with ability to adjust height |\n\n## Depracated/Old hardware\n| Device  | Quantity | Connection | Home Assistant | Notes |\n| ------------- | :---: | ------------- | ------------- | ------------- |\n| [Router Asus RT-AC56U](https://www.asus.com/us/Networking/RTAC56U/) | 1 | WiFi | [Asuswrt](https://www.home-assistant.io/components/asuswrt/) | Network, remote access through VPN |"
  },
  {
    "path": "docs/HomeAssistant/AppDaemon.md",
    "content": "## Automations\nThere are some limitations with HomeAssistant YAML configuration files. I wanted to add more sophisticated logic, and my YAML file become  unreadable cluster fuck, thankfully there is a nifty tool called [AppDaemon](https://github.com/home-assistant/appdaemon) that allowed me to implement these automations in python.\n\n### Air Purifier\nXiaomi Air Purifier has big fallacy. It detect water vapor from humidifier as pollution and quickly increases AQI. These causes feedback loop and Air purifier goes super sayian mode and sets fan spin to over 9000. To combat this problem automation changes purifier mode to favorite with speed level that equals 1. Also air purifier should stop working when balcone door or window is opened. And finnaly the schedule is controlled by calendar entity and of cource it is also based on presence in the home.  \n\n```yaml\nliving_room_air:\n  module: air_purifier_ai\n  class: AirPurifierAI\n  alt_mode_entity: switch.living_room_humidifier\n  alt_mode: 'Favorite'\n  alt_mode_speed: 1\n  calendar: calendar.oczyszczacz_salon\n  fan_id: 'fan.living_room_air_purifier'\n  family_devices: 'group.family'\n  fallback: 5400\n  mode: 'Auto'\n  balcone_door: sensor.living_room_balcone_door\n```\n\n### Adaptive Room Heating\nMy apartament is in block from 1960. Some of inside installation is pretty ancient. For example my heating radiator has a dial with range 1 to 5 but really heat going throug when is set to 5, and anything below that probabbly depends on combined pressure from all apartaments below(or it is caused by lepricons). \n\n__TODO: Write more about this__\n\n### Baterry report\n[This](https://github.com/macbury/SmartHouse/blob/master/appdaemon/apps/battery.py) automation checks everyday at 6PM if there are devices with low battery level and sends notification.\n\n### Humidifier\n\n__TODO: Write more about this__\n\n### Spotify Light\n\n__TODO: Write more about this__"
  },
  {
    "path": "docs/HomeAssistant/Components.md",
    "content": "## My Components\nHere are components developed by me.\n\n### MPKK\n\nThis custom component fetches information from [Cracow live transport system](http://www.ttss.krakow.pl/) with information when next train or bus will be on specified\n\n``` YAML\nsensor:\n  - platform: mmpk\n    name: 'Jarzebiny'\n    stop_id: 2685\n    direction: 'Bronowice Małe'\n```\n\nYou can install it from this [repository](https://github.com/macbury/ha_mpk_krakow)\n\n### It will rain\n\nThis simple sensor just checks forecast for next few hours, and switches on if there is chance of rain. I use this with simple automation, to notify about next rain by switching blue light:\n\n```yaml\n- alias: Switch on blue light alert if it is going to rain\n  trigger:\n    platform: state\n    entity_id: sensor.it_will_rain\n    to: 'on'\n  condition:\n    condition: and\n    conditions:\n      - condition: state\n        entity_id: group.family\n        state: 'home'\n      - condition: time\n        after: '7:00:00'\n        before: '23:59:59'\n  action:\n    - service: light.turn_on\n      data:\n        entity_id: light.gatewa_ambient_light\n        rgb_color: [0,190,255]\n        brightness: 45\n```\n\n### Samsung Multiroom\n\nThis custom component is used for controlling volume, and source of my multiroom device like [Samsung Soundbar K650](https://www.samsung.com/us/televisions-home-theater/home-theater/sound-bars/samsung-hw-k650-soundbar-w-wireless-subwoofer-hw-k650-za/). It is based on [unofficial api](https://github.com/bacl/WAM_API_DOC/blob/master/API_Methods.md). This component is based on my older code [from this repository](https://github.com/macbury/ha_samsung_multi_room/)\n\n``` yaml\nmedia_player:\n  - platform: samsung_multi_room\n    name: \"Soundbar\" # name, otherwise it will use name of your soundbar\n    host: 192.168.1.227 # ip of your soundbar\n    max_volume: 20 # on this level glass breaks, and there are 80 levels more on K650...\n```\n\n### KKM\n\nThis component fetch information about my train card from [www.mpk.krakow.pl](http://www.mpk.krakow.pl) and creates sensor with information about how many days is left before expiration and on what tram lines it can be used for.\n\n``` yaml\n- platform: kkm\n  name: Tram card\n  identity: 12345678\n  city_card: 12345678\n```\n\n### Lunching\n\nUsed for fetching information from [lunching.pl](http://lunching.pl) about what did I order to eat in work. Sensor contains information when food will be delivered and what was ordered.\n\n``` yaml\n- platform: lunching\n  name: foooooooood\n  username: macbury\n  password: secret password here\n```\n\n### Cracow Air Quality\n\nSimple integration with Air Quality stations in Cracow for getting \"fresh\" information. Data is fetched from [Cracow Air Quality Monitoring Page](http://monitoring.krakow.pios.gov.pl/)\n\n``` yaml\n- platform: cracow_air_quality\n  station_id: 7\n  name: 'nowa_huta'\n```\n\n### Harvest\n\nIntegration with [harvest](https://www.getharvest.com/) time tracking software. Mainly used for sending notification that work is done, and I should take my ass back to home.\n\n``` yaml\n- platform: harvest\n  name: work\n  account_id: 1234\n  token: morphing-power-token\n```\n\n### Spotify Cover Sensor\n\nThis platform extracts colors from currently played song cover. If proper scene is activated, these colors are used for setting light color:\n\n``` yaml\n- platform: spotify_cover_sensor\n  cache_path: '/config/spotify-token-cache.json'\n```\n\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/8wh9JsnNPxU\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n\n## Depracated components\n\nThese are components written by me and have been removed from my setup\n\n### PublicTransit\n\nPublic transit uses data collected by [busix](https://github.com/macbury/busix) software that scraps Cracow public transit webpage and extracts departures of buses and trains. You can specify in component starting line stop and target line stop and system will refresh and calculate next departure. There is also custom lovelace component for displaying data. \n\n``` yaml\n- platform: public_transit\n  name: work\n  from: \"Białucha\"\n  to: \"Wzgórza Krzesławickie\"\n  endpoint: \"http://busix:5000/api\"\n```\n\n## Third party components\n\nHere are components written by other people that are not in HomeAssistant core.\n\n### Alexa Media Player\n\n[This component](https://github.com/keatontaylor/alexa_media_player) exposes all my alexa devices as media player. I can also use built in annoucment feature and send audio notifications.\n\n### Google Geocode\n\nThe `google_geocode` sensor converts device tracker location into a human-readable address. Mainly used for checking in what city currently each device is.\n"
  },
  {
    "path": "docs/HomeAssistant/Lovelace/index.md",
    "content": "## Vacuum\n![Vacuum Card in action](vacuum.png)\n\n[More info here](/SmartHouse/HomeAssistant/Vacuum/)\n\n## Air Purifier\n![Air Purifier](air_purifier.gif)\n\n[air-purifier](https://github.com/macbury/SmartHouse/tree/master/home-assistant/www/custom-lovelace/air-purifier) displays custom ui for the Xiaomi Air Purifier. There is a information about current AQI, speed and special buttons that allows me to switch between sleep mode, auto mode, and setting favorite level with target speed.\n\n```yaml\n- type: custom:air-purifier-card\n  entity: fan.living_room_air_purifier\n```\n\n## Linak Desk Card\n![Card](linak.gif)\n\n[Linak Desk Card](https://github.com/macbury/SmartHouse/blob/master/home-assistant/www/custom-lovelace/linak-desk/card.js) is a much nicer fronted for [cover](https://www.home-assistant.io/components/cover.mqtt/) entity. I can prepare some presets for diffrent heights that are available through select box in top right corner.\n\n```yaml\n- type: custom:linak-desk\n  entity: cover.desk\n  height:\n    min: 68\n    max: 128\n  presets:\n    - target: 100\n      label: 'Arek Praca'\n    - target: 170\n      label: 'Arek Majsterkowanie'\n    - target: 120\n      label: 'Ola Stanie'\n    - target: 60\n      label: 'Ola Praca'\n```\n\n## QR Card\n\n[QR Card](https://github.com/macbury/SmartHouse/blob/master/home-assistant/www/custom-lovelace/qr-card/card.js) is used for generating locally QR codes. For example I use it for generating code that helps people connect to my guest network.\n\n```yaml\n- type: custom:qr-card\n  code: WIFI:S:MyAwesomeWiFi;T:WPA;P:TOTAL_SECRET_PASSWORD>;;\n```\n\n## Public Transport Card\n![Card](public_transit.png)\n\n[Transit Card](https://github.com/macbury/SmartHouse/blob/master/home-assistant/www/custom-lovelace/transit/card.js) shows public transit schedules as readable table. I have two cards of this type, on the main dashboard page that tells me when next train to my work will be and on work page.\n\n```yaml\n- type: custom:transit-card\n  entity: sensor.to_work_transit\n```\n\n## KKM Card\n\n![Card](kkm.png)\nSimple companion card for kkm_sensor that displays how many days I have left on my train card before it expires and for what lines.\n\n## dynamic-wallpaper\n\nThis lovelace extension changes background depending on current state of `sun.sun` entity.\n\n```yaml\n- type: custom:dynamic-wallpaper\n  entity: sun.sun\n```\n\n![Afternoon](afternoon.png)\n![Night](night.png)\n![Evening](evening.png)\n"
  },
  {
    "path": "docs/HomeAssistant/PresenceDetection.md",
    "content": "Presence detection is done by combination of two components: [Asuswrt](https://www.home-assistant.io/components/asuswrt/) and [Life360](https://www.home-assistant.io/components/life360/). Asuswrt connects to my router and check if any of family members phone is connected to WiFi. Life360 uses GPS phone location and zones to detect where person currently is. I did not want to use `group.all_devices` for tracking all family member home status, so I added also a [person](https://www.home-assistant.io/components/person/) component, configured each family member there and grouped them using [group](https://www.home-assistant.io/components/group/) as `group.family`. In main lovelace view there is a [picture-entity](https://www.home-assistant.io/lovelace/picture-entity/) for each family member. Each state has own picture that is [Nintendo Switch Mii](https://en.wikipedia.org/wiki/Mii).\n\n![Presence in lovelace dashboard](lovelace-presence.png)"
  },
  {
    "path": "docs/HomeAssistant/Screens/index.md",
    "content": "### Dashboard\n[![Dashboard](dashboard.png)](dashboard.png)\n### Living Room\n[![Living Room](living_room.png)](living_room.png)\n### Work Desk\n[![Work Desk](work_desk.png)](work_desk.png)\n### Bedroom\n[![Bedroom](bedroom.png)](bedroom.png)\n### Kitchen\n[![Kitchen](kitchen.png)](kitchen.png)\n### Bathroom\n[![Bathroom](bathroom.png)](bathroom.png)\n### Corridor\n[![Corridor](corridor.png)](corridor.png)\n### Monitoring\n[![Monitoring](cameras.png)](cameras.png)\n### Work\n[![Work](work.png)](work.png)\n### Network\n[![Network](networking.png)](networking.png)"
  },
  {
    "path": "docs/HomeAssistant/Vacuum/index.md",
    "content": "![header](./header.jpg)\n\nAll stuff related to my Xiaomi Vacuum\n\n## Configuration\n\nCurrent firmware **v11_001730.fullos.pkg**\n\n[Whole process of jailbreaking](https://github.com/dgiese/dustcloud/wiki/VacuumRobots-manual-update-root-Howto)\n\nI really did not want to install ansible stuff on my vacuum, so here are few commands that were used to jailbreak and install simple scripts:\n\n```bash\nsudo ./imagebuilder.sh --firmware v11_001730.fullos.pkg --public-key=id_rsa.pub --timezone=Europe/Warsaw\n\nmirobo --ip=192.168.8.1 --token=#token# raw-command miIO.ota '{\"mode\":\"normal\", \"install\":\"1\", \"app_url\":\"http://192.168.8.51:8000/v11_001730.fullos.pkg\", \"file_md5\":\"#md5#\",\"proc\":\"dnld install\"}'\n\nscp vacuum/upload_map.sh 192.168.1.222:/root/upload_map.sh\nscp vacuum/watch_map.sh 192.168.1.222:/root/watch_map.sh\n\nEDITOR=nano crontab -e\n\n@reboot sh /root/watch_map.sh >> /tmp/watch_map.log 2>&1\n\nreboot\n```\n\n### Endpoint for live map \n\nThere is also a simple node js server that handles request from `watch_map.sh` and renders nice map. The map is registered as [generic camera](https://www.home-assistant.io/components/generic/). To prevent malicious posts there is also firewall level guard, that restricts access to this endpoint. \n\n### Lovelace Card\n\n![Vacuum Card in action](./vacuum.png)\n\nFor the UI I have created custom lovelace card: [vacuum-card](https://github.com/macbury/SmartHouse/tree/master/home-assistant/www/custom-lovelace/vacuum/). \n\nYou can specify what vacuum should be controlled, from where to fetch map camera output. Additionaly there is option for adding buttons that can trigger services. This is used for triggering zone cleanups in diffrent rooms.\n\n```yaml\n- type: custom:vacuum-card\n  entity: vacuum.main_vacuum\n  map: camera.vacuum_map\n  actions:\n    - name: Clean living room\n      service: script.clean_living_room\n      icon: mdi:seat-recline-extra\n    - name: Clean bedroom\n      service: script.clean_bedroom \n      icon: mdi:hotel\n    - name: Clean kitchen\n      service: script.clean_kitchen\n      icon: mdi:fridge\n    - name: Clean corridor\n      service: script.clean_corridor\n      icon: mdi:door-closed\n```\n\n<iframe width=\"960\" height=\"480\" src=\"https://www.youtube.com/embed/qP3p4F6qskM\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n\n### Zone Cleanup Panel \nWith newest firmware update Xiaomi introduced **Map Saving**. This feature makes planned zone cleanup to actually work(before after few cleanings, robot did reset the map and need to scan the whole apartament again). To help me with preparing zone cleanup, I written a simple tool that takes generated map and allows me to select zones for cleaning:\n\n![Vacuum Panel in action](./vacuum_zones.jpg)\n\nAfter selecting area text area is updated with YAML that can look like this:\n\n```yaml\n- service: vacuum.send_command\n  data:\n    entity_id: vacuum.main_vacum\n    command: app_zoned_clean\n    params: [[27542, 20818, 28986, 22288, 1]]\n```\n\n### Automating replacment of trash bin\n\n<iframe width=\"960\" height=\"480\" src=\"https://www.youtube.com/embed/yKVzf5N_H-Q\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n\n```yaml\n- alias: Summon vacuum to trash bin if is docked\n  trigger:\n    platform: event\n    event_type: xiaomi_aqara.click\n    event_data:\n      entity_id: binary_sensor.kitchen_summon_vacuum\n      click_type: single\n  condition:\n    - condition: state\n      entity_id: vacuum.main_vacuum\n      state: docked\n  action:\n    - service: vacuum.send_command\n      data:\n        entity_id: vacuum.main_vacuum\n        command: app_goto_target\n        params: [25849, 24429]\n    - service: notify.alexa_media_kitchen\n      data:\n        message: 'Hey, vacuum take your ass near trash can!'\n        data:\n          type: announce\n          method: all\n\n- alias: Send back vacuum to its cave\n  trigger:\n    platform: event\n    event_type: xiaomi_aqara.click\n    event_data:\n      entity_id: binary_sensor.kitchen_summon_vacuum\n      click_type: single\n  condition:\n    condition: or\n    conditions:\n      - condition: state\n        entity_id: vacuum.main_vacuum\n        state: cleaning\n      - condition: state\n        entity_id: vacuum.main_vacuum\n        state: idle\n  action:\n    - service: vacuum.return_to_base\n      data:\n        entity_id: vacuum.main_vacuum\n    - service: notify.alexa_media_kitchen\n      data:\n        message: 'Ok, thats is all, go back to your cave!'\n        data:\n          type: announce\n          method: all\n```"
  },
  {
    "path": "docs/HomeAssistant/VoiceControl/index.md",
    "content": "![header](./header.jpg)\n\n## Beginning with GoogleHome\nAt the beginning I tried to use [Google Home AIY Kit](https://aiyprojects.withgoogle.com/voice/) for voice controlling. Microphone was not bad, but it wasn't good(there was a lot situations that queries were not processed). First attempt was with [snips.ai](https://snips.ai/) and [modified code that could run it on Google AIY](https://github.com/macbury/snips-aiy) but quality of voice recognition was bad, and in situations with turned on TV or playing music it just didn't work. [Next attempt](https://github.com/macbury/aiyprojects-raspbian) used [Google DialogFlow SDK](https://dialogflow.com/) for processing intents and [Amazon Polly](https://aws.amazon.com/polly/) for audio responses(codename for project was Frankenstein Monster) but I was limited to only my implemented commands.\n\n<iframe width=\"960\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/1rA9xihNHfs\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen></iframe>\n\n## Switching to Alexa\nMy current setup uses 3 alexa devices placed in living room, kitchen and bedroom. My home assistant instance is glued with alexa using [default alexa integration](https://www.home-assistant.io/components/alexa/) that points to private AWS lambda. To increase privacy and security not all entities are exposed to Alexa Cloud(only lights, few switches, media player and living room blinds). For sending notifications and to control echo dots there is [alexa_media_player](https://github.com/keatontaylor/alexa_media_player) custom component. I use it for sending voice notifications and to periodically clear voice history.\n\n"
  },
  {
    "path": "docs/References.md",
    "content": "* https://www.youtube.com/watch?v=XV4xzgraNEk\n* https://www.youtube.com/watch?v=HBXIOj5ndo4\n* https://www.awesome-ha.com/#custom-lovelace-ui-cards\n* https://github.com/lucusc/htpc/blob/362ac85e0e8b5178f3b927a961323466e67817ae/pihole/docker-compose.yml\n* https://github.com/mfallone/smarthome/blob/ad8b1422812a43bd73b254bcbc737218e2053590/docker-compose.yaml\n* https://github.com/dmarcotte/github-markdown-preview\n* https://github.com/sfromm/ansible-playbooks/blob/master/encrypt-disk.yml\n* https://community.home-assistant.io/t/howto-xiaomi-vacuum-zoned-cleaning/51293\n* https://community.home-assistant.io/t/spotify-playlist-player/22491/68\n* https://community.home-assistant.io/t/echo-devices-alexa-as-media-player-testers-needed/58639\n* https://community.home-assistant.io/t/echo-devices-alexa-as-media-player-testers-needed/58639\n\n* https://community.home-assistant.io/t/custom-dark-sky-animated-weather-card/59816\n* https://github.com/bieniu/home-assistant-config\n* https://www.reddit.com/r/homeassistant/comments/837chb/samsung_washerdryer/\n* https://www.ikea.com/pl/pl/catalog/products/S69282219/\n* https://www.youtube.com/watch?v=AB75AxprXqQ\n* https://www.amazon.com/Sabrent-Mini-Mount-Under-BK-MACM/dp/B07KWKJBQ7\n* https://www.deviousweb.com/2018/03/29/raspberry-pi-ambilight-with-usb-camera/\n\n* http://nilhcem.com/iot/reverse-engineering-simple-bluetooth-devices\n* https://www.instructables.com/id/Reverse-Engineering-Smart-Bluetooth-Low-Energy-Dev/\n* https://community.home-assistant.io/t/custom-dark-sky-animated-weather-card/59816\n* https://community.home-assistant.io/t/day-countdown-card/79900\n* https://waldobronchart.com/note/ambient-light-tv-with-a-raspberry-pi-and-camera-part2\n* https://sourceforge.net/projects/sweethome3d/\n* https://github.com/dgiese/dustcloud/wiki/VacuumRobots-manual-update-root-Howto\n* https://www.plex.tv/claim/\n* http://john.bitsurge.net/public/biglist.p2p.gz\n* https://blog.ipsumdomus.com/sonoff-switch-complete-hack-without-firmware-upgrade-1b2d6632c01?gi=ce3ba228dfad"
  },
  {
    "path": "docs/Services/FirefoxSyncServer.md",
    "content": "https://mozilla-services.readthedocs.io/en/latest/howtos/run-sync-1.5.html\nidentity.sync.tokenserver.uri: http://localhost:5000/token/1.0/sync/1.5"
  },
  {
    "path": "docs/Services/UpTimeRobot.md",
    "content": "I really wanted to get notifications in case of downtime. Currently there is cool of service called [UptimeRobot](https://uptimerobot.com/) in which you can specify url to check. In case of downtime, UptimeRobot sents alerts. And there are also cool badges:\n\n![Uptime Status](https://img.shields.io/uptimerobot/status/m782818639-f9a1f36b2acd090bbfaa4435.svg)\n![Uptime last 7 days](https://img.shields.io/uptimerobot/ratio/7/m782818639-f9a1f36b2acd090bbfaa4435.svg)\n\nThe most important piece of software to check is of course HomeAssistant instance. The only thing exposed is `ping.txt` file inside `home-assitant/www/ping.txt`:\n\n```nginx\n  location /ping.txt {\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_pass http://hass/local/ping.txt;\n  }\n```\n\nIf for some reason HomeAssistant container is down or the whole server just gone bananas, this file will not be served and response should `503 Bad Gateway`."
  },
  {
    "path": "docs/Software/Backup.md",
    "content": "Nothing fancy here. Everyday at 2:00 am cron job triggers backup using command `smart-house backup`. All processes are stopped and everything is compressed to one zip file that is later transferred to my QNAP NAS."
  },
  {
    "path": "docs/Software/Bitcoin.md",
    "content": "# Reference\r\nhttps://stadicus.github.io/RaspiBolt/"
  },
  {
    "path": "docs/Software/ControlScript.md",
    "content": "The whole infrastructure is controlled using my custom `smart-house` bash [shell script](https://github.com/macbury/SmartHouse/blob/master/bin/smart-house).\n\n```bash\n$ smart-house help\n\n  🏡   SmartHouse\n\n  $ smart-house help                                  - print this help message\n  $ smart-house restart                               - restart all services\n  $ smart-house docs                                  - start preview mkdocs process\n  $ smart-house quick-restart                         - restart only home-assistant\n  $ smart-house cleanup                               - cleanup docker shit\n  $ smart-house ps                                    - show processes\n  $ smart-house kiosk                                 - start kiosk dev mode\n  $ smart-house unban <ip>                            - unban ip\n  $ smart-house psql                                  - connect to docker postgresql instance\n  $ smart-house migrate                               - migrate database\n  $ smart-house health-check                          - ensure if home assistant is healthy\n  $ smart-house mount-nas                             - mount nas shares\n  $ smart-house start                                 - start all services\n  $ smart-house status                                - status of all services\n  $ smart-house logs                                  - print all logs\n  $ smart-house stop                                  - stop all services\n  $ smart-house ddns                                  - update dns on cloudflare\n  $ smart-house backup                                - backup all data\n  $ smart-house env                                   - print all envs\n  $ smart-house dev                                   - dev mode\n  $ smart-house lovelace                              - generate lovelace config\n  $ smart-house lovelace-dev                          - regenerate lovelace on file change\n  $ smart-house validate-config                       - check if config is ok\n  $ smart-house build container                       - rebuild container\n  $ smart-house upgrade                               - upgrade current home assistant\n  $ smart-house docker-compose args                   - run docker compose commands\n  $ smart-house add-mosquitto-user name               - creates new user and generates for him random password\n  $ smart-house disable-aotec-blinking                - disable stupid blinking on aotec dongle\n\n```"
  },
  {
    "path": "docs/Software/Degoogling.md",
    "content": "# Removing google from my life\r\n\r\nThese are services that I'm using to replace Google/Apple/Microsoft or other BigTech solutions\r\n\r\n* Search engine - [DuckDuckGo](https://duckduckgo.com/)\r\n* E-Mail - [ProtonMail](https://protonmail.com/)\r\n* YouTube - [Invidious](https://invidio.us/)\r\n* RSS Reader - [Miniflux](https://miniflux.app/)\r\n* AppleID/Random Email - [SimpleLogin](https://simplelogin.io/)\r\n* Netflix - [Plex](https://www.plex.tv/)\r\n* Android Notifications - [Gotify](https://gotify.net/)\r\n* Google Contacts/Calendars - [NextCloud](https://nextcloud.com/)\r\n* Google Drive - [QNap](https://www.qnap.com/solution/smb-solution-qsync/en-us/)\r\n* Password manager - [Enpass](https://www.enpass.io/)\r\n* Bookmarks/History - [FireFox Sync Server](https://mozilla-services.readthedocs.io/en/latest/howtos/run-sync-1.5.html)"
  },
  {
    "path": "docs/Software/Development.md",
    "content": "Most of services used by my Smart House resides inside [docker](https://www.docker.com/) containers. Thanks to that I can get about 90% similar setup on my dev machine.\n\nConfiguring of the dev environment starts from copying all `.env.example` files and filling them with credentials and configurations:\n\n```bash\ncp .env.crontab.example .env.crontab\ncp .env.grafana.example .env.grafana\ncp .env.influxdb.example .env.influxdb\ncp .env.pihole.example .env.pihole\ncp .env.postgresql.example .env.postgresql\ncp .env.nextcloud.example .env.nextcloud\ncp .env.plex.example .env.plex\ncp .env.home-assistant.example .env.home-assistant\n```\n\nNext there are few files used by docker that needs to be created(docker would create a folder for that not a file)\n\n```bash\nmkdir -p .docker/data/mosquitto\nmkdir -p .docker/log\n\ntouch .docker/data/mosquitto/users.db\ntouch .docker/log/fail2ban.log\ntouch .docker/log/mosquitto.log\n```\n\nAnd finally some python dependencies:\n```bash\nsudo pip3 install -r requirements.txt\n```\n\nNow we can Rock & Roll. There are two dev commands, the first one is `dev` that bootups all containers:\n```bash\nSMART_HOUSE_DIR=$(pwd) bin/smart-house dev\n```\n\nAnd here is simple command that watches directory with lovelace configuration, and regenerates all configuration on change:\n```bash\nSMART_HOUSE_DIR=$(pwd) bin/smart-house lovelace-dev\n```"
  },
  {
    "path": "docs/Software/Encryption.md",
    "content": "Most of credentials is stored in plain .env files, and they are pretty sensitive(duh). Most configurations of HomeAssistant is based on installing everything yolo on RaspberryPi without and counting on that most bouglars will ignore this small box.\n\nMy setup is stored on encrypted LUKS partition under `/smart-house`. After reboot, to decrypt partition I have small script named `smart-house-unlock` that asks for password, decrypts partition and starts all services."
  },
  {
    "path": "docs/Software/EspHome.md",
    "content": "## Wemos D1 to ESPHome Pin Mapping\n\n```C\nstatic const uint8_t D0   = 16;\nstatic const uint8_t D1   = 5;\nstatic const uint8_t D2   = 4;\nstatic const uint8_t D3   = 0;\nstatic const uint8_t D4   = 2;\nstatic const uint8_t D5   = 14;\nstatic const uint8_t D6   = 12;\nstatic const uint8_t D7   = 13;\nstatic const uint8_t D8   = 15;\nstatic const uint8_t RX   = 3;\nstatic const uint8_t TX   = 1;\n```\n\nhttps://github.com/esp8266/Arduino/blob/master/variants/d1_mini/pins_arduino.h#L37\n\n## How to add new device\n\nVisit web ui under http://192.168.1.12:6052. Go through the creator proces. After that you should see new item in the dashboard. Hit compile, wait for whole process to finish. You should see download button. Click it and download *.bin file. Then using https://github.com/esphome/esphome-flasher burn it to the ESP. Now next upload should be done OTA. After booting copy its ip and add new esphome integration in HomeAssistant and paste ip of D1 wemos."
  },
  {
    "path": "docs/Software/GettingStarted.md",
    "content": "## Provisioning all instances\n\nClone this repository on your local machine. Install [ansible](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html) and run the provision command:\n\n```bash\n# copy configuration for our inventory, Specify ip of all prepared servers\ncp provision/inventory.ini.example provision/inventory.ini\n# Just run the provision shit\nbin/smart-house-provision server\n```\n\n## Configuring main HomeAssistant instance\nBefore starting smart house instance, there is a few things to do. Go to `/smart-house` directory and edit all `.env` files:\n\n```bash\nssh <ssh-user>@<target-ip>\ncd /smart-house\n\n# Edit configuration under .env files\nnano .env.crontab\nnano .env.grafana\nnano .env.influxdb\nnano .env.pihole\nnano .env.postgresql\nnano .env.nextcloud\nnano .env.plex\nnano .env.home-assistant\n\n# Generate mosquitto user and password\nsmart-house add-mosquitto-user home-assistant\n# Add it to our .env.home-assitant\nnano .env.home-assistant\n\n# Configure your zones\ncp home-assistant/components/zones.yaml.example home-assistant/components/zones.yaml\nnano home-assistant/components/zones.yaml\n\n# Start home assistant instance\nsmart-house start\n\n# set key overwritewebroot to match your domain: (https://docs.nextcloud.com/server/13/admin_manual/configuration_server/reverse_proxy_configuration.html#overwrite-parameters)\nnano /smart-house/.docker/data/nextcloud/config/config.php\n\n# Generate long living token using home assistant panel\nnano appdaemon/appdaemon.yaml # paste code here\nsmart-house restart\n\n# Configure know devices\nnano home-assistant/known_devices.yaml\nsmart-house restart\n```"
  },
  {
    "path": "docs/Software/Nextcloud.md",
    "content": "docker exec --user www-data support_nextcloud_1 php occ upgrade"
  },
  {
    "path": "docs/Software/Nginx.md",
    "content": "[Nginx](https://nginx.org/) is very nice web server used to proxy all traffic from docker containers. SSL certificates are provided by [Lets Encrypt](https://letsencrypt.org/)."
  },
  {
    "path": "docs/Software/Overview.md",
    "content": "## My OpenSource Projects\n\n### DPodcast\n[DPodcast](https://github.com/macbury/DPodcast) converts youtube channels into mp3 and generates podcasts xml. I use this to have ability to listen to my favorite channels(that have mostly people talking to camera, why they don't share their content in podcast form ?!) on my phone in offline mode without paing for youtube red. All content is shared over [IPFS](https://ipfs.io)\n\n### mqtt2wol\n[mqtt2wol](https://github.com/macbury/mqtt2wol) gateway is used to send wol packets over mqtt. This is installed on separate Raspberry PI. HomeAssistant allows to [send wol packages](https://www.home-assistant.io/components/wake_on_lan/) but that would require to [add host flag](https://docs.docker.com/compose/compose-file/#network_mode) but that blows my docker setup up.\n\n### mqtt2rf\n[mqtt2rf](https://github.com/macbury/mqtt2rf) gateway is used to for relaying 433/315MHz LPD/SRD signals with generic low-cost GPIO RF modules on a Raspberry Pi.\n\n### yt-music-download-helper\n[yt-music-download-helper](https://github.com/macbury/yt-music-download-helper) is simple web ui that allows me to download video from YouTube, extract music from it and place it inside my QNAP Nas.\n\n### Busix\n[Busix](https://github.com/macbury/busix) is self hosted web scrapper that extract information from [Cracow public transit webpage](http://www.mpk.krakow.pl/pl/page-f3044045/) (that for some reason, still in 2019 uses table in table layout for displayin data.) All scrapped data is exposed through graphql endpoint:\n\n```graphql\n{\n  departures(from: \"Białucha\", to: \"Wzgórza Krzesławickie\", at: \"10 minutes from now\"){\n    edges {\n      node {\n        line {\n          name\n          kind\n        }\n\n        time {\n          formatted\n          distance\n        }\n      }\n    }\n  }\n}\n```\n\n## Other OpenSource projects\n\n### HomeAssistan\n[Home Assistant](https://www.home-assistant.io/) my main home automation software. I decided to use it because all configuration can be done by simple YAML files that can be stored inside git repository and UI is pretty decent and touch friendly.\n\n### Ansible\n[Ansible](https://www.ansible.com/) is nice nifty tool that helps me provisioning all running computer in my house(vacuum, smart panel, raspberry pi etc.). All provisioning scripts resides [here](https://github.com/macbury/SmartHouse/tree/master/provision).\n\n### Docker\n[Docker](https://www.docker.com/) is for managing all containers with software used in my SmartHome. Before I did use [hassbian](https://www.home-assistant.io/docs/installation/hassbian/installation/) but that was a bit off hassle if on upgrade something did blow or HomeAssistant did break something, and rollback was required. [Hass.io](https://www.home-assistant.io/hassio/) hides to much from me so I decided to prepare my own solution.\n\n### Ubuntu 18.04 LTS\n[Ubuntu](https://www.ubuntu.com/) it is pretty good linux with pretty good support.\n\n### Appdaemon\n[Appdaemon](https://appdaemon.readthedocs.io/en/stable/) is pretty decent extension for HomeAssistant automations. At some level I needed to [put more logic to automations](/Software/AppDaemon) and YAML files become unreadable for puny human.\n\n### PostgreSQL\n[PostgreSQL](https://www.postgresql.org/) is main database used by HomeAssistant, Nextcloud and Firefly iii. Alternative would be eating glass or MySQL.\n\n### InfluxDB and Grafana\n[Influxdb](https://www.influxdata.com/) is backend database optimized for time series data, that is collected from HomeAssistant. [Grafana](https://grafana.com/) is used as analitics dashboard for analyzing data in form of nice and sexy charts.\n\n### UFW and Fail2ban\n[UFW](https://help.ubuntu.com/community/UFW) is a firewall for sane people. Used to restrict access to smart home server. There is also a [Fail2ban](https://www.fail2ban.org/wiki/index.php/Main_Page). It looks on logs from nginx, HomeAssistant and other services, and if it detect some kind of funky activity, then blocks it using system firewall\n\n### CloudFlare\n[CloudFlare](https://www.cloudflare.com/) My smart home ip is hidden behind domain and cloudflare dns server. There is a cron job that checks my current phone ip and updates it on the cloudflare.\n\n### Plex\nPretty nice media server. [Plex](https://www.plex.tv/) is running on HomeAssistant computer and consumes photos and videos QNAP NAS. It has native client for Android/LG Web OS/Playstation 4 etc.\n\n### NextCloud\n[NextCloud](https://nextcloud.com/) is mainly used for providing calendar with CalDav and nice ui. This calendar is used mainly for triggering automations on specific times(heating, cat feeding etc.) and I wanted to avoid Google Calendar.\n\n### Slack\n[Slack](https://slack.com/) is used for sending notifications. I have my own home workspace that is shared with my wife.\n\n### IPFS\n[IPFS](https://ipfs.io) stands for Interplanetary File System. At its core it is a versioned file system which can store files and track versions over time, very much like Git. It also defines how files move across a network, making it a distributed file system, much like BitTorrent. In combining these two properties, IPFS enables a new permanent web and augments the way we use existing internet protocols like HTTP.\n\n### IFTT\n[IFTT](https://ifttt.com/discover) is used for triggering stuff using webhooks that don't expose APIs\n\n### Sonarr, Bazarr and Transmission\n[Sonarr](https://sonarr.tv/) and [Transmission](https://transmissionbt.com/) is used for tracking TV shows and Music. If a new show appear it is automatically downloaded using transmission. After download is completed stuff is moved to my NAS and Plex reindex everything. [Bazarr](https://www.bazarr.media/) is then used for finding polish subtitles.\n\n### ESPHome\n[ESPHome](https://esphome.io/) is a system to control your ESP8266/ESP32 by simple yet powerful configuration files and control them remotely through Home Automation systems.\n\n### Firefly III\n[Firefly III](https://firefly-iii.org/) is budget managment software.\n\n### Librespeed\nSelf hosted [speedtest](https://github.com/librespeed/speedtest) tool, for debugging wifi performance in house"
  },
  {
    "path": "docs/Software/PiHole.md",
    "content": "## AdGuard\r\n\r\nCurrently I have moved to [AdGuard Home](https://adguard.com/en/adguard-home/overview.html) solution for DNS based AdBlocking. [Their software](https://github.com/AdguardTeam/AdGuardHome/wiki/Docker) can run also inside docker. The main advantages of AdGuard are:\r\n\r\n* Less restrictive default ad guard rules - PiHole in default configuration did break login with Apple ID on mac os x and, there were small issues with android phone\r\n* You can convert [uBlock](https://github.com/gorhill/uBlock/) rules into AdGuard rules\r\n* Rules are just a regexp!\r\n* It is much faster and uses less resources\r\n* There is a nifty ui where you can define your own mapping for local ip(Like I want to all devices in my home see HomeAssistant instance under address https://home-assistant.here)\r\n* Supports DNS over https!\r\n\r\n## Old DNS Adblock solution\r\n\r\n### PiHole & Cloudflare\r\nEverybody is tracking you, Google, Russia(damn you Putin), China(damn you commies) and others. [PiHole](https://pi-hole.net/) is nice software that blocks Ads/Trackin site on the DNS level. Additionaly I have mapped on my router Google DNS like 8.8.8.8 to point to PiHole instance.\r\n\r\nAlso to increase security I also configured dns over https. Now everytime any device in my network hits Pihole dns server, it will use secure dns over https to resolve domain. [There is a nice tutorial how to do this](https://docs.pi-hole.net/guides/dns-over-https/) and this how my ansible configuration script looks like:\r\n\r\n\r\n```yaml\r\n- hosts: master\r\n  become: yes\r\n  handlers:\r\n    - name: restart cloudflared\r\n      become: yes\r\n      service:\r\n        name: cloudflared\r\n        enabled: yes\r\n        state: restarted\r\n    - name: reload systemctl\r\n      become: yes\r\n      command: systemctl daemon-reload\r\n  tasks:\r\n    - name: Check if cloudflared already installed\r\n      command: 'cloudflared -v'\r\n      register: is_cloudflared_installed\r\n      ignore_errors: True\r\n    - name: Download cloudflared\r\n      when: is_cloudflared_installed is failed\r\n      get_url:\r\n        url: https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.deb\r\n        dest: /tmp/cloudflared-stable-linux-amd64.deb\r\n    - name: Install cloudflared\r\n      when: is_cloudflared_installed is failed\r\n      apt:\r\n        deb: /tmp/cloudflared-stable-linux-amd64.deb\r\n    - name: Ensure group \"cloudflared\" exists\r\n      group:\r\n        name: cloudflared\r\n        state: present\r\n    - name: Adding user cloudflared\r\n      user:\r\n        name: cloudflared\r\n        group: cloudflared\r\n        create_home: no\r\n        shell: /usr/sbin/nologin\r\n        append: yes\r\n    - name: Create /etc/default/cloudflared\r\n      template:\r\n        src: ./etc/default/cloudflared.j2\r\n        dest: /etc/default/cloudflared\r\n        owner: cloudflared\r\n        group: cloudflared\r\n    - name: Change file ownership for /usr/local/bin/cloudflared\r\n      file:\r\n        path: /usr/local/bin/cloudflared\r\n        owner: cloudflared\r\n        group: cloudflared\r\n    - name: Create cloudflared.service\r\n      template:\r\n        src: ./lib/systemd/system/cloudflared.service.j2\r\n        dest: /lib/systemd/system/cloudflared.service\r\n      notify:\r\n        - reload systemctl\r\n        - restart cloudflared\r\n```"
  },
  {
    "path": "docs/Software/Ports.md",
    "content": "Port mapping for services that are running in docker\n\n| Service name | Port |\n| -------------: | ------------- |\n| Redis | 6379 |\n| MQTT | 4105 |\n| NextCloud | 4111 |\n| Influxdb | 18086 |\n| Postgresql | 4101 |\n| Home-Assistant | 4102 |\n| Grafana | 4100 |\n| PiHole | 4104 |\n| Glances | 4108 |\n| Portainer | 4112 |\n| Plex | 32400 |\n| Lidarr | 8990 |\n| Sonarr | 8989 |\n| Transmission | 8112,51413 |\n| Calendar | 4111 |\n| Plex | 32400, 3005, 5353, 1900, 8324, 32469, 32410, 32412, 32413, 32414 |\n| YTDL | 9292 |\n| Jupyter Notebook | 10000 |\n| Firefly iii | 10001 | \n| vacuum endpoint | 10005 |\n| busix | 10008 |"
  },
  {
    "path": "docs/Software/TvDashboard.md",
    "content": ""
  },
  {
    "path": "docs/Software/Upgrading.md",
    "content": "Most of upgrades are done by downloading or building new docker container.\n\n### Upgrading Home Assistant\nEdit version of docker image in first line of Dockerfile inside `home-assistant` directory. Then run command:\n\n```bash\nsmart-house upgrade\nsmart-house restart\n```\n\nIf everything still works, commit changes and tag the release:\n\n```bash\ngit commit -a -m \"New upgrade\"\ngit tag v0.93.2\ngit push origin master\ngit push origin v0.93.2\n```\n\n### Upgrading rest of stuff\n\nEdit `docker-compose.yaml`, increase version for image. Because we have our dns server inside Docker container the best thing to do is to run pull first, and then restart all containers:\n\n```bash\nsmart-house docker-compose pull name-of-upgraded-service\nsmart-house restart\n```"
  },
  {
    "path": "docs/index.md",
    "content": "![header](header.jpg)\n\n[![Trello](https://img.shields.io/badge/trello-board-blue.svg)](https://trello.com/b/pqCQJmVj)\n![Last Commit](https://img.shields.io/github/last-commit/macbury/SmartHouse.svg)\n![License](https://img.shields.io/github/license/macbury/SmartHouse.svg)\n![Release](https://img.shields.io/github/tag/macbury/SmartHouse?label=Version)\n![Uptime last 7 days](https://img.shields.io/uptimerobot/ratio/7/m782818639-f9a1f36b2acd090bbfaa4435.svg)\n![Uptime Status](https://img.shields.io/uptimerobot/status/m782818639-f9a1f36b2acd090bbfaa4435.svg)\n![Maintenance](https://img.shields.io/maintenance/yes/2019.svg)\n![Deployment](https://action-badges.now.sh/macbury/SmartHouse)\n\n[![coffee](https://www.buymeacoffee.com/assets/img/custom_images/black_img.png)](https://www.buymeacoffee.com/r6sWkVoeU)\n\n__This page is still under heavy development. Beware of changes :P__\n\nHere are all my configurations used in my Smart House. At the center of all is [Home Assistant](https://home-assistant.io) that controls all hardware in my house.\n\n* [Screenshots of the UI](HomeAssistant/Screens/)\n* [The hardware](Hardware/)\n* [The software](Software/Overview)\n\nI will try to update this documentation, maybe this will inspire/help somebody :P\n\n<div style=\"text-align: center\">\n    <figure>\n        <div>\n            <a href=\"https://www.draw.io/#Uhttps%3A%2F%2Fmacbury.github.io%2FSmartHouse%2FSmartHouse.xml\"><img src=\"SmartHouse.png\" alt=\"Smart House technology diagram\"></a>\n        </div>\n        <figcaption>\n            <p><strong>Technology diagram (<a href=\"SmartHouse.png\">Click for bigger version</a>). Made with <a href=\"https://www.draw.io/\">Draw.io</a> (<a href=\"SmartHouse.xml\">XML</a> source file).</strong></p>\n        </figcaption>\n    </figure>\n</div>\n"
  },
  {
    "path": "ff-sync/Dockerfile",
    "content": "FROM mozilla/syncserver:latest\n\nUSER root\nRUN apk --no-cache update && apk add --no-cache postgresql-libs && apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev \nRUN pip install psycopg2\nUSER app"
  },
  {
    "path": "glances/glances.conf",
    "content": "##############################################################################\n# Globals Glances parameters\n##############################################################################\n\n[global]\n# Does Glances should check if a newer version is available on PyPI ?\ncheck_update=true\n# History size (maximum number of values)\n# Default is 28800: 1 day with 1 point every 3 seconds (default refresh time)\nhistory_size=28800\n\n##############################################################################\n# User interface\n##############################################################################\n\n[outputs]\n# Theme name for the Curses interface: black or white\ncurse_theme=black\n# Limit the number of processes to display in the WebUI\nmax_processes_display=30\n\n##############################################################################\n# plugins\n##############################################################################\n\n[quicklook]\n# Set to true to disable a plugin\n# Note: you can also disable it from the command line (see --disable-plugin)\ndisable=false\n# Define CPU, MEM and SWAP thresholds in %\ncpu_careful=50\ncpu_warning=70\ncpu_critical=90\nmem_careful=50\nmem_warning=70\nmem_critical=90\nswap_careful=50\nswap_warning=70\nswap_critical=90\n\n[cpu]\ndisable=False\n# Default values if not defined: 50/70/90 (except for iowait)\nuser_careful=50\nuser_warning=70\nuser_critical=90\n#user_log=False\n#user_critical_action=echo {{user}} {{value}} {{max}} > /tmp/cpu.alert\nsystem_careful=50\nsystem_warning=70\nsystem_critical=90\nsteal_careful=50\nsteal_warning=70\nsteal_critical=90\n#steal_log=True\n# I/O wait percentage should be lower than 1/# (Logical CPU cores)\n# Leave commented to just use the default config (1/#-20% / 1/#-10% / 1/#)\n#iowait_careful=30\n#iowait_warning=40\n#iowait_critical=50\n# Context switch limit (core / second)\n# Leave commented to just use the default config (critical is 50000*# (Logical CPU cores)\n#ctx_switches_careful=10000\n#ctx_switches_warning=12000\n#ctx_switches_critical=14000\n\n[percpu]\n# Define CPU thresholds in %\n# Default values if not defined: 50/70/90\nuser_careful=50\nuser_warning=70\nuser_critical=90\niowait_careful=50\niowait_warning=70\niowait_critical=90\nsystem_careful=50\nsystem_warning=70\nsystem_critical=90\n\n[gpu]\n# Default processor values if not defined: 50/70/90\nproc_careful=50\nproc_warning=70\nproc_critical=90\n# Default memory values if not defined: 50/70/90\nmem_careful=50\nmem_warning=70\nmem_critical=90\n\n[mem]\n# Define RAM thresholds in %\n# Default values if not defined: 50/70/90\ncareful=50\n#careful_action_repeat=echo {{percent}} >> /tmp/memory.alert\nwarning=70\ncritical=90\n\n[memswap]\n# Define SWAP thresholds in %\n# Default values if not defined: 50/70/90\ncareful=50\nwarning=70\ncritical=90\n\n[load]\n# Define LOAD thresholds\n# Value * number of cores\n# Default values if not defined: 0.7/1.0/5.0 per number of cores\n# Source: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages\n#         http://www.linuxjournal.com/article/9001\ncareful=0.7\nwarning=1.0\ncritical=5.0\n#log=False\n\n[network]\n# Default bitrate thresholds in % of the network interface speed\n# Default values if not defined: 70/80/90\nrx_careful=70\nrx_warning=80\nrx_critical=90\ntx_careful=70\ntx_warning=80\ntx_critical=90\n# Define the list of hidden network interfaces (comma-separated regexp)\n#hide=docker.*,lo\n# WLAN 0 alias\n#wlan0_alias=Wireless IF\n# It is possible to overwrite the bitrate thresholds per interface\n# WLAN 0 Default limits (in bits per second aka bps) for interface bitrate\n#wlan0_rx_careful=4000000\n#wlan0_rx_warning=5000000\n#wlan0_rx_critical=6000000\n#wlan0_rx_log=True\n#wlan0_tx_careful=700000\n#wlan0_tx_warning=900000\n#wlan0_tx_critical=1000000\n#wlan0_tx_log=True\n\n[wifi]\n# Define the list of hidden wireless network interfaces (comma-separated regexp)\nhide=lo,docker.*\n# Define SIGNAL thresholds in db (lower is better...)\n# Based on: http://serverfault.com/questions/501025/industry-standard-for-minimum-wifi-signal-strength\ncareful=-65\nwarning=-75\ncritical=-85\n\n[diskio]\n# Define the list of hidden disks (comma-separated regexp)\n#hide=sda2,sda5,loop.*\nhide=loop.*\n# Alias for sda1\n#sda1_alias=IntDisk\n\n[fs]\n# Define the list of hidden file system (comma-separated regexp)\nhide=/boot.*,/snap.*\n# Define filesystem space thresholds in %\n# Default values if not defined: 50/70/90\n# It is also possible to define per mount point value\n# Example: /_careful=40\ncareful=50\nwarning=70\ncritical=90\n# Allow additional file system types (comma-separated FS type)\n#allow=zfs\n\n[folders]\n# Define a folder list to monitor\n# The list is composed of items (list_#nb <= 10)\n# An item is defined by:\n# * path: absolute path\n# * careful: optional careful threshold (in MB)\n# * warning: optional warning threshold (in MB)\n# * critical: optional critical threshold (in MB)\n#folder_1_path=/tmp\n#folder_1_careful=2500\n#folder_1_warning=3000\n#folder_1_critical=3500\n#folder_2_path=/home/nicolargo/Videos\n#folder_2_warning=17000\n#folder_2_critical=20000\n#folder_3_path=/nonexisting\n#folder_4_path=/root\n\n[sensors]\n# Sensors core thresholds (in Celsius...)\n# Default values if not defined: 60/70/80\ntemperature_core_careful=60\ntemperature_core_warning=70\ntemperature_core_critical=80\n# Temperatures threshold in °C for hddtemp\n# Default values if not defined: 45/52/60\ntemperature_hdd_careful=45\ntemperature_hdd_warning=52\ntemperature_hdd_critical=60\n# Battery threshold in %\nbattery_careful=80\nbattery_warning=90\nbattery_critical=95\n# Sensors alias\n#temp1_alias=Motherboard 0\n#temp2_alias=Motherboard 1\n#core 0_alias=CPU Core 0\n#core 1_alias=CPU Core 1\n\n[processlist]\n# Define CPU/MEM (per process) thresholds in %\n# Default values if not defined: 50/70/90\ncpu_careful=50\ncpu_warning=70\ncpu_critical=90\nmem_careful=50\nmem_warning=70\nmem_critical=90\n#\n# Nice priorities range from -20 to 19.\n# Configure nice levels using a comma separated list.\n#\n# Nice: Example 1, non-zero is warning (default behavior)\nnice_warning=-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19\n#\n# Nice: Example 2, low priority processes escalate from careful to critical\n#nice_careful=1,2,3,4,5,6,7,8,9\n#nice_warning=10,11,12,13,14\n#nice_critical=15,16,17,18,19\n\n[ports]\n# Ports scanner plugin configuration\n# Interval in second between two scans\nrefresh=30\n# Set the default timeout (in second) for a scan (can be overwritten in the scan list)\ntimeout=3\n# If port_default_gateway is True, add the default gateway on top of the scan list\nport_default_gateway=True\n#\n# Define the scan list (1 < x < 255)\n# port_x_host (name or IP) is mandatory\n# port_x_port (TCP port number) is optional (if not set, use ICMP)\n# port_x_description is optional (if not set, define to host:port)\n# port_x_timeout is optional and overwrite the default timeout value\n# port_x_rtt_warning is optional and defines the warning threshold in ms\n#\n#port_1_host=192.168.0.1\n#port_1_port=80\n#port_1_description=Home Box\n#port_1_timeout=1\n#port_2_host=www.free.fr\n#port_2_description=My ISP\n#port_3_host=www.google.com\n#port_3_description=Internet ICMP\n#port_3_rtt_warning=1000\n#port_4_description=Internet Web\n#port_4_host=www.google.com\n#port_4_port=80\n#port_4_rtt_warning=1000\n#\n# Define Web (URL) monitoring list (1 < x < 255)\n# web_x_url is the URL to monitor (example: http://my.site.com/folder)\n# web_x_description is optional (if not set, define to URL)\n# web_x_timeout is optional and overwrite the default timeout value\n# web_x_rtt_warning is optional and defines the warning respond time in ms (approximatively)\n#\n#web_1_url=https://blog.nicolargo.com\n#web_1_description=My Blog\n#web_1_rtt_warning=3000\n#web_2_url=https://github.com\n#web_3_url=http://www.google.fr\n#web_3_description=Google Fr\n#web_4_url=https://blog.nicolargo.com/nonexist\n#web_4_description=Intranet\n\n[docker]\n# Thresholds for CPU and MEM (in %)\n#cpu_careful=50\n#cpu_warning=70\n#cpu_critical=90\n#mem_careful=20\n#mem_warning=50\n#mem_critical=70\n#\n# Per container thresholds\n#containername_cpu_careful=10\n#containername_cpu_warning=20\n#containername_cpu_critical=30\n#\n# By default, Glances only display running containers\n# Set the following key to True to display all containers\nall=False\n\n##############################################################################\n# Client/server\n##############################################################################\n\n[serverlist]\n# Define the static servers list\n#server_1_name=localhost\n#server_1_alias=My local PC\n#server_1_port=61209\n#server_2_name=localhost\n#server_2_port=61235\n#server_3_name=192.168.0.17\n#server_3_alias=Another PC on my network\n#server_3_port=61209\n#server_4_name=pasbon\n#server_4_port=61237\n\n[passwords]\n# Define the passwords list\n# Syntax: host=password\n# Where: host is the hostname\n#        password is the clear password\n# Additionally (and optionally) a default password could be defined\n#localhost=abc\n#default=defaultpassword\n\n##############################################################################\n# Exports\n##############################################################################\n\n# [graph]\n# # Configuration for the --export graph option\n# # Set the path where the graph (.svg files) will be created\n# # Can be overwrite by the --graph-path command line option\n# path=/tmp\n# # It is possible to generate the graphs automatically by setting the\n# # generate_every to a non zero value corresponding to the seconds between\n# # two generation. Set it to 0 to disable graph auto generation.\n# generate_every=60\n# # See followings configuration keys definitions in the Pygal lib documentation\n# # http://pygal.org/en/stable/documentation/index.html\n# width=800\n# height=600\n# style=DarkStyle\n\n# [influxdb]\n# # Configuration for the --export influxdb option\n# # https://influxdb.com/\n# host=localhost\n# port=8086\n# user=root\n# password=root\n# db=glances\n# # Prefix will be added for all measurement name\n# # Ex: prefix=foo\n# #     => foo.cpu\n# #     => foo.mem\n# # You can also use dynamic values\n# #prefix=`hostname`\n# prefix=localhost\n# # Tags will be added for all measurements\n# #tags=foo:bar,spam:eggs\n# # You can also use dynamic values\n# #tags=system:`uname -s`\n\n# [cassandra]\n# # Configuration for the --export cassandra option\n# # Also works for the ScyllaDB\n# # https://influxdb.com/ or http://www.scylladb.com/\n# host=localhost\n# port=9042\n# protocol_version=3\n# keyspace=glances\n# replication_factor=2\n# # If not define, table name is set to host key\n# table=localhost\n\n# [opentsdb]\n# # Configuration for the --export opentsdb option\n# # http://opentsdb.net/\n# host=localhost\n# port=4242\n# #prefix=glances\n# #tags=foo:bar,spam:eggs\n\n# [statsd]\n# # Configuration for the --export statsd option\n# # https://github.com/etsy/statsd\n# host=localhost\n# port=8125\n# #prefix=glances\n\n# [elasticsearch]\n# # Configuration for the --export elasticsearch option\n# # Data are available via the ES RESTful API. ex: URL/<index>/cpu/system\n# # https://www.elastic.co\n# host=localhost\n# port=9200\n# index=glances\n\n# [riemann]\n# # Configuration for the --export riemann option\n# # http://riemann.io\n# host=localhost\n# port=5555\n\n# [rabbitmq]\n# # Configuration for the --export rabbitmq option\n# host=localhost\n# port=5672\n# user=guest\n# password=guest\n# queue=glances_queue\n\n# [mqtt]\n# # Configuration for the --export mqtt option\n# host=localhost\n# port=8883\n# user=guest\n# password=guest\n# topic=glances\n\n# [couchdb]\n# # Configuration for the --export couchdb option\n# # https://www.couchdb.org\n# host=localhost\n# port=5984\n# db=glances\n# # user and password are optional (comment if not configured on the server side)\n# #user=root\n# #password=root\n\n# [kafka]\n# # Configuration for the --export kafka option\n# # http://kafka.apache.org/\n# host=localhost\n# port=9092\n# topic=glances\n# #compression=gzip\n\n# [zeromq]\n# # Configuration for the --export zeromq option\n# # http://www.zeromq.org\n# # Use * to bind on all interfaces\n# host=*\n# port=5678\n# # Glances envelopes the stats in a publish message with two frames:\n# # - First frame containing the following prefix (STRING)\n# # - Second frame with the Glances plugin name (STRING)\n# # - Third frame with the Glances plugin stats (JSON)\n# prefix=G\n\n# [prometheus]\n# # Configuration for the --export prometheus option\n# # https://prometheus.io\n# # Create a Prometheus exporter listening on localhost:9091 (default configuration)\n# # Metric are exporter using the following name:\n# #   <prefix>_<plugin>_<stats> (all specials character are replaced by '_')\n# # Note: You should add this exporter to your Prometheus server configuration:\n# #   scrape_configs:\n# #    - job_name: 'glances_exporter'\n# #      scrape_interval: 5s\n# #      static_configs:\n# #        - targets: ['localhost:9091']\n# host=localhost\n# port=9091\n# prefix=glances\n# # Labels will be added for all measurements\n# #labels=foo:bar,spam:eggs\n# # You can also use dynamic values\n# #labels=system:`uname -s`\n\n# [restful]\n# # Configuration for the --export RESTful option\n# # Example, export to http://localhost:6789/\n# host=localhost\n# port=6789\n# protocol=http\n# path=/\n\n# ##############################################################################\n# # AMPS\n# # * enable: Enable (true) or disable (false) the AMP\n# # * regex: Regular expression to filter the process(es)\n# # * refresh: The AMP is executed every refresh seconds\n# # * one_line: (optional) Force (if true) the AMP to be displayed in one line\n# # * command: (optional) command to execute when the process is detected (thk to the regex)\n# # * countmin: (optional) minimal number of processes\n# #             A warning will be displayed if number of process < count\n# # * countmax: (optional) maximum number of processes\n# #             A warning will be displayed if number of process > count\n# # * <foo>: Others variables can be defined and used in the AMP script\n# ##############################################################################\n\n# [amp_dropbox]\n# # Use the default AMP (no dedicated AMP Python script)\n# # Check if the Dropbox daemon is running\n# # Every 3 seconds, display the 'dropbox status' command line\n# enable=false\n# regex=.*dropbox.*\n# refresh=3\n# one_line=false\n# command=dropbox status\n# countmin=1\n\n# [amp_python]\n# # Use the default AMP (no dedicated AMP Python script)\n# # Monitor all the Python scripts\n# # Alert if more than 20 Python scripts are running\n# enable=false\n# regex=.*python.*\n# refresh=3\n# countmax=20\n\n# [amp_nginx]\n# # Use the NGinx AMP\n# # Nginx status page should be enable (https://easyengine.io/tutorials/nginx/status-page/)\n# enable=false\n# regex=\\/usr\\/sbin\\/nginx\n# refresh=60\n# one_line=false\n# status_url=http://localhost/nginx_status\n\n# [amp_systemd]\n# # Use the Systemd AMP\n# enable=false\n# regex=\\/lib\\/systemd\\/systemd\n# refresh=30\n# one_line=true\n# systemctl_cmd=/bin/systemctl --plain\n\n# [amp_systemv]\n# # Use the Systemv AMP\n# enable=false\n# regex=\\/sbin\\/init\n# refresh=30\n# one_line=true\n# service_cmd=/usr/bin/service --status-all\n"
  },
  {
    "path": "helpers.md",
    "content": "# Create big file\n\nI can then remove it if I run out of disk space and try to remove stuff from database etc.\n\ntruncate -s 1GB /smart-house/tmp/lock.data\n"
  },
  {
    "path": "home-assistant/.gitkeep",
    "content": ""
  },
  {
    "path": "home-assistant/automations/adguard.yaml",
    "content": ""
  },
  {
    "path": "home-assistant/automations/agd.yaml",
    "content": "\n"
  },
  {
    "path": "home-assistant/automations/alexa.yaml",
    "content": "- alias: Inform about alexa timer off\n  trigger:\n    platform: event\n    event_type: ifttt_webhook_received\n    event_data:\n      action: alexa_timer_off\n  action:\n    - service: notify.all\n      data:\n        message: 'Alexa timer finished countdown!'"
  },
  {
    "path": "home-assistant/automations/bathroom.yaml",
    "content": "- alias: Close blinds in living room\n  trigger:\n    platform: event\n    event_type: xiaomi_aqara.click\n    event_data:\n      entity_id: binary_sensor.bathroom_left_button\n      click_type: single\n  action:\n    - service: cover.close_cover\n      data:\n        entity_id: cover.living_room\n"
  },
  {
    "path": "home-assistant/automations/blinds.yaml",
    "content": "- alias: Open blinds if humans come home\n  trigger:\n    - platform: state\n      entity_id: group.family\n      to: 'home'\n      from: 'not_home'\n  condition:\n    condition: and\n    conditions:\n      - condition: state\n        entity_id: sun.sun\n        state: above_horizon\n  action:\n    - service: cover.open_cover\n      data:\n        entity_id: cover.living_room\n\n- alias: Close blinds if it is too bright\n  trigger:\n    - platform: state\n      entity_id: binary_sensor.too_bright\n      to: 'on'\n      from: 'off'\n  action:\n    - service: cover.close_cover\n      data:\n        entity_id: cover.living_room\n"
  },
  {
    "path": "home-assistant/automations/cat.yaml",
    "content": "- alias: Motion trigger\n  trigger:\n    - platform: webhook\n      webhook_id: kitchen_cat_feeder_motion\n  action:\n    - service: light.turn_on\n      entity_id: light.puss_feeder_light\n      data:\n        effect: Manual\n        brightness: 255\n        rgb_color: [255, 255, 255]\n\n    - delay: '00:01:00'\n    - service: light.turn_off\n      entity_id: light.puss_feeder_light\n- alias: Notify puny humans about feeding of the overlord\n  trigger:\n    - platform: state\n      entity_id: calendar.pushi\n      to: 'on'\n      from: 'off'\n  condition:\n    - condition: state\n      entity_id: group.family\n      state: home\n  action:\n    - service: notify.alexa_media_living_room\n      data:\n        message: 'Attention puny humans. Himen needs pushi now!'\n        data:\n          type: announce\n          method: all\n    - service: notify.alexa_media_kitchen\n      data:\n        message: 'Attention puny humans. Himen needs pushi now!'\n        data:\n          type: announce\n          method: all\n    - delay: '00:00:15'\n    - service: notify.all\n      data:\n        message: 'Puss needs a attention!'\n\n- alias: Switch on corridor lights after cat shitter is opened\n  trigger:\n    - platform: state\n      entity_id: binary_sensor.cat_shitter_door\n      to: 'on'\n      from: 'off'\n  condition:\n    condition: and\n    conditions:\n      - condition: state\n        entity_id: 'sun.sun'\n        state: 'below_horizon'\n  action:\n    - service: light.turn_on\n      data:\n        entity_id: light.corridor\n\n- alias: Feed the cat\n  trigger:\n    - platform: state\n      entity_id: 'binary_sensor.iss'\n      from: 'off'\n      to: 'on'\n    - platform: state\n      entity_id: calendar.cat_feed_schedule\n      from: 'off'\n      to: 'on'\n  action:\n    - service: script.feed_the_cat\n\n- alias: Quick Feed The Cat\n  trigger:\n    platform: event\n    event_type: xiaomi_aqara.click\n    event_data:\n      entity_id: binary_sensor.wall_switch_quick_feed_the_cat\n      click_type: single\n  action:\n    - service: script.quick_feed_the_cat\n"
  },
  {
    "path": "home-assistant/automations/cooking.yaml",
    "content": "- alias: Switch on nexus screen on movement\n  trigger:\n    - platform: state\n      from: 'off'\n      to: 'on'\n      entity_id: binary_sensor.kitchen_movement\n  action:\n    - service: rest_command.wake_nexus\n\n- alias: Switch on cooking light if phone is connected to kitchen alexa\n  trigger:\n    - platform: template\n      value_template: '{{ is_state_attr(\"media_player.kitchen\", \"source\", \"Galaxy S10\") }}'\n    - platform: template\n      value_template: '{{ is_state_attr(\"media_player.kitchen\", \"source\", \"PATELNIA\") }}'\n  action:\n    - service: light.turn_on\n      data:\n        entity_id: light.cooking\n    - delay: '00:00:05'\n    - service: media_player.volume_set\n      data:\n        entity_id: media_player.kitchen # adjust volume of alexa device\n        volume_level: 0.8\n\n- alias: Switch off cooking light if phone is disconnected from kitchen alexa\n  trigger:\n    - platform: template\n      value_template: '{{ is_state_attr(\"media_player.kitchen\", \"source\", \"Local Speaker\") }}'\n  action:\n    - service: light.turn_off\n      data:\n        entity_id: light.cooking\n    - delay: '00:00:05'\n    - service: media_player.volume_set\n      data:\n        entity_id: media_player.kitchen # adjust volume of alexa device\n        volume_level: 0.3\n"
  },
  {
    "path": "home-assistant/automations/corridor.yaml",
    "content": "# - alias: Switch on ambient light in corridor on movement\n#   trigger:\n#     - platform: state\n#       entity_id: binary_sensor.hall_pir\n#       from: 'off'\n#       to: 'on'\n#   condition:\n#     condition: and\n#     conditions:\n#       - condition: state\n#         entity_id: 'sun.sun'\n#         state: 'below_horizon'\n#       - condition: state\n#         entity_id: light.corridor\n#         state: 'off'\n#   action:\n#     - service: light.turn_on\n#       data:\n#         entity_id: light.gatewa_ambient_light\n#         rgb_color: [255, 255, 36]\n#         brightness: 20\n#     - wait_template: \"{{ is_state('binary_sensor.hall_pir', 'off') }}\"\n#       timeout: '00:01:00'\n#       continue_on_timeout: true\n#     - service: light.turn_off\n#       entity_id: light.gatewa_ambient_light\n\n- alias: Switch on hall balls light in corridor on movement\n  trigger:\n    - platform: state\n      entity_id: binary_sensor.hall_pir\n      from: 'off'\n      to: 'on'\n  condition:\n    condition: and\n    conditions:\n      - condition: state\n        entity_id: 'sun.sun'\n        state: 'below_horizon'\n      - condition: state\n        entity_id: light.corridor\n        state: 'off'\n  action:\n    - service: light.turn_on\n      data:\n        entity_id: light.hall_balls\n    - wait_template: \"{{ is_state('binary_sensor.hall_pir', 'off') }}\"\n      timeout: '00:01:00'\n      continue_on_timeout: true\n    - service: light.turn_off\n      entity_id: light.hall_balls\n\n- alias: Ping me if main doors are open\n  trigger:\n    - platform: state\n      entity_id: binary_sensor.main_door\n      to: 'on'\n      from: 'off'\n  condition:\n    condition: and\n    conditions:\n      - condition: state\n        entity_id: 'group.family'\n        state: 'not_home'\n  action:\n    - service: notify.all\n      data:\n        message: 'Drzwi do mieszkania zostały otwarte!'\n\n- alias: Switch on ambient light if door open\n  trigger:\n    - platform: state\n      entity_id: binary_sensor.main_door\n      to: 'on'\n      from: 'off'\n  condition:\n    condition: and\n    conditions:\n      - condition: state\n        entity_id: 'sun.sun'\n        state: 'below_horizon'\n      - condition: state\n        entity_id: light.corridor\n        state: 'off'\n  action:\n    - service: light.turn_on\n      data:\n        entity_id: light.gatewa_ambient_light\n        rgb_color: [255, 255, 36]\n        brightness: 50\n    - service: light.turn_on\n      entity_id: light.hall_balls\n    - delay: '00:00:45'\n    - service: light.turn_off\n      entity_id: light.gatewa_ambient_light\n    - service: light.turn_off\n      entity_id: light.hall_balls"
  },
  {
    "path": "home-assistant/automations/disasters.yaml",
    "content": ""
  },
  {
    "path": "home-assistant/automations/fan.yaml",
    "content": "- alias: Switch off fan leds after sunset\n  trigger:\n    - platform: sun\n      event: sunset\n      offset: \"-00:10:00\"\n    - platform: time\n      at: '23:59:59'\n  action:\n    - service: xiaomi_miio.fan_set_led_off\n      data:\n        entity_id: \"fan.living_room_air_purifier\"\n    - service: xiaomi_miio.fan_set_led_off\n      data:\n        entity_id: \"fan.bedroom_air_purifier\"\n    - service: xiaomi_miio.fan_set_led_off\n      data:\n        entity_id: \"fan.living_room_humidifier\"\n\n- alias: Switch on fan leds after sunrise\n  trigger:\n    - platform: sun\n      event: sunrise\n      offset: \"-00:10:00\"\n    - platform: time\n      at: '7:00:00'\n  action:\n    - service: xiaomi_miio.fan_set_led_on\n      data:\n        entity_id: \"fan.living_room_air_purifier\"\n    - service: xiaomi_miio.fan_set_led_on\n      data:\n        entity_id: \"fan.bedroom_air_purifier\"\n    - service: xiaomi_miio.fan_set_led_on\n      data:\n        entity_id: \"fan.living_room_humidifier\""
  },
  {
    "path": "home-assistant/automations/health.yaml",
    "content": ""
  },
  {
    "path": "home-assistant/automations/home-assistant.yaml",
    "content": "- alias: 'Set theme at startup and notify about that event'\n  initial_state: 'on'\n  trigger:\n    - platform: homeassistant\n      event: start\n  action:\n    - service: frontend.set_theme\n      data:\n        name: darkblue\n    - service: automation.turn_on\n      data:\n        entity_id: all\n    - delay: '00:00:45'\n    - service: notify.all\n      data:\n        title: 'Home Assistant'\n        message: 'Home assistant finished booting'\n    - service: automation.turn_on\n      data:\n        entity_id: all\n\n- alias: Update notifications\n  trigger:\n    - platform: state\n      entity_id: updater.updater\n  action:\n    service: notify.all\n    data_template:\n      title: 'New Home Assistant Release'\n      message: \"Home Assistant  {{ states.updater.updater.state }}  is now available.\""
  },
  {
    "path": "home-assistant/automations/humidifier.yaml",
    "content": "- alias: Send notification about humidifier water is out\r\n  trigger:\r\n    - platform: numeric_state\r\n      entity_id: sensor.living_room_humidifier_current\r\n      below: 0.01\r\n      for:\r\n        minutes: 10\r\n  condition:\r\n    condition: and\r\n    conditions:\r\n      - condition: state\r\n        entity_id: 'switch.living_room_humidifier'\r\n        state: 'on'\r\n      - condition: numeric_state\r\n        entity_id: sensor.living_room_humidifier_current\r\n        below: 0.01\r\n  action:\r\n    - service: notify.all\r\n      data:\r\n        message: 'Living room humidifier needs refill!'"
  },
  {
    "path": "home-assistant/automations/lights.yaml",
    "content": "- alias: Enable flux if bedroom light is turned on\n  trigger:\n    - platform: state\n      entity_id: light.arek_szafka\n      from: 'off'\n      to: 'on'\n    - platform: state\n      entity_id: light.ola_szafka\n      from: 'off'\n      to: 'on'\n  action:\n    - service: switch.turn_on\n      entity_id: switch.flux\n\n- alias: Switch off other lights in kitchen if main light is switched off\n  trigger:\n    - platform: state\n      entity_id: light.kitchen\n      from: 'on'\n      to: 'off'\n  action:\n    - service: light.turn_off\n      entity_id: light.cooking\n    - service: light.turn_off\n      entity_id: light.coffee\n\n- alias: Switch off main light if tv stand on\n  trigger:\n    - platform: state\n      entity_id: light.tv_stand\n      from: 'off'\n      to: 'on'\n  action:\n    - service: light.turn_off\n      entity_id: light.main\n    - service: light.turn_on\n      entity_id: light.christmas_tree\n    - service: light.turn_on\n      entity_id: light.christmas_balls\n\n- alias: Switch on bathroom lights after door is opened\n  trigger:\n    - platform: state\n      entity_id: binary_sensor.bathroom_door\n      from: 'off'\n      to: 'on'\n  condition:\n    condition: and\n    conditions:\n      - condition: state\n        entity_id: light.bathroom\n        state: 'off'\n  action:\n    - service: light.turn_on\n      entity_id: light.bathroom\n\n- alias: Switch on bedroom lights after door is opened\n  trigger:\n    - platform: state\n      entity_id: binary_sensor.bedroom_door\n      from: 'off'\n      to: 'on'\n  condition:\n    condition: and\n    conditions:\n      - condition: state\n        entity_id: sun.sun\n        state: below_horizon\n      - condition: time\n        after: '16:00:00'\n        before: '21:00:00'\n      - condition: or\n        conditions:\n          - condition: state\n            entity_id: light.arek_szafka\n            state: 'off'\n          - condition: state\n            entity_id: light.ola_szafka\n            state: 'off'\n          - condition: state\n            entity_id: light.arek_szafka\n            state: 'unavailable'\n          - condition: state\n            entity_id: light.ola_szafka\n            state: 'unavailable'\n  action:\n    - service: light.turn_on\n      entity_id: light.bedroom\n\n- alias: Switch off bedroom main light if stand light are switched on\n  trigger:\n    - platform: state\n      entity_id: light.bedroom_ambient\n      from: 'off'\n      to: 'on'\n  action:\n    - service: light.turn_off\n      entity_id: light.bedroom\n\n- alias: Notify if light in bathroom is on too long\n  trigger:\n    - platform: state\n      entity_id: light.bathroom\n      to: 'on'\n      for:\n        minutes: 25\n    - platform: state\n      entity_id: light.bathroom\n      to: 'on'\n      for:\n        minutes: 45\n  action:\n    service: notify.all\n    data_template:\n      message: \"Światło w łazience świeci się długo...\"\n\n- alias: Switch on corridor lights after pantry is opened\n  trigger:\n    - platform: state\n      entity_id: binary_sensor.door_pantry\n      to: 'on'\n      from: 'off'\n    - platform: state\n      entity_id: binary_sensor.pawlacz_door\n      to: 'on'\n      from: 'off'\n    - platform: state\n      entity_id: binary_sensor.toolsheet_door\n      to: 'on'\n      from: 'off'\n    - platform: state\n      entity_id: binary_sensor.cat_shitter_door\n      to: 'on'\n      from: 'off'\n  action:\n    - service: light.turn_on\n      data:\n        entity_id: light.corridor\n\n"
  },
  {
    "path": "home-assistant/automations/media_player.yaml",
    "content": "- alias: 'Change spotify source to soundbar if alexa starts play music'\n  trigger:\n    platform: state\n    entity_id: media_player.living_room\n    to: 'playing'\n  action:\n    - service: media_player.turn_on\n      entity_id: media_player.soundbar\n    - service: media_player.select_source\n      data:\n        entity_id: media_player.spotify\n        source: 'wifi'\n    - service: media_player.select_source\n      data:\n        entity_id: media_player.spotify\n        source: 'Soundbar'\n    - service: media_player.volume_set\n      data:\n        entity_id: media_player.soundbar\n        volume_level: 0.25"
  },
  {
    "path": "home-assistant/automations/octoprint.yaml",
    "content": "- alias: Send notification if print is completed\n  trigger:\n    - platform: state\n      entity_id: sensor.octoprint_current_state\n      from: 'Printing'\n      to: 'Operational'\n  action:\n    - service: notify.all\n      data:\n        message: 'Print is complete!'\n"
  },
  {
    "path": "home-assistant/automations/pizza.yml",
    "content": "- alias: Switch off pizza mode after 4 hours\r\n  trigger:\r\n    platform: state\r\n    entity_id: input_boolean.pizza\r\n    for:\r\n      hours: 4\r\n  action:\r\n    service: input_boolean.turn_off\r\n    entity_id: input_boolean.pizza"
  },
  {
    "path": "home-assistant/automations/power-saving.yaml",
    "content": "- alias: Switch off all devices at night\n  trigger:\n    platform: time\n    at: '01:00:00'\n  action:\n    - service: media_player.turn_off\n      entity_id:\n        - media_player.tv\n        - media_player.soundbar\n    - service: switch.turn_off\n      entity_id:\n        - switch.living_room_work_desk\n\n- alias: Switch on work desk in morning\n  trigger:\n    platform: time\n    at: '07:00:00'\n  action:\n    - service: switch.turn_on\n      entity_id:\n        - switch.living_room_work_desk\n\n- alias: Switch off running shit if nobody is home\n  trigger:\n    platform: state\n    entity_id: group.family\n    from: 'home'\n    to: 'not_home'\n  action:\n    - service: light.turn_off\n      data:\n        entity_id: all\n    - service: fan.turn_off\n      entity_id: all\n    - service: media_player.turn_off\n      entity_id:\n        - media_player.tv\n        - media_player.soundbar\n        - media_player.playstation\n    - service: media_player.media_stop\n      entity_id:\n        - media_player.soundbar\n        - media_player.bedroom\n        - media_player.kitchen\n        - media_player.living_room\n    - service: cover.close_cover\n      data:\n        entity_id: cover.living_room\n"
  },
  {
    "path": "home-assistant/automations/presence.yaml",
    "content": "- alias: Notify if Ola left home\n  trigger:\n    platform: state\n    entity_id: device_tracker.ola\n    from: 'home'\n    to: 'not_home'\n  action:\n    service: notify.all\n    data:\n      message: 'Ola wyszła z domu'\n\n- alias: Notify if I left home\n  trigger:\n    platform: state\n    entity_id: device_tracker.arek\n    from: 'home'\n    to: 'not_home'\n  action:\n    service: notify.all\n    data:\n      message: 'Arek wyszedł z domu'\n\n- alias: Say hello alexa\n  trigger:\n    - platform: state\n      entity_id: group.family\n      to: 'home'\n      from: 'not_home'\n  action:\n    - delay: '00:02:00'\n    - service: notify.alexa_media_living_room\n      data:\n        message: 'Welcome back, masters!'\n        data:\n          type: announce\n          method: all\n\n- alias: Switch lights in living room after humans come\n  trigger:\n    - platform: state\n      entity_id: group.family\n      to: 'home'\n      from: 'not_home'\n  condition:\n    condition: and\n    conditions:\n      - condition: state\n        entity_id: sun.sun\n        state: below_horizon\n  action:\n    - service: light.turn_on\n      entity_id: light.main\n\n- alias: Push Arek location to orion\n  trigger:\n    - platform: state\n      entity_id: device_tracker.arek\n    - platform: state\n      entity_id: sensor.arek_last_update\n  action:\n    service: rest_command.push_to_orion\n    data_template:\n      lat: '{{ states.device_tracker.arek.attributes.latitude }}'\n      lon: '{{ states.device_tracker.arek.attributes.longitude }}'\n      accuracy: '{{ states.device_tracker.arek.attributes.gps_accuracy }}'\n      battery: '{{ states.device_tracker.arek.attributes.battery }}'\n      device: 's10'\n      user: 'arek'\n\n- alias: Push Ola location to orion\n  trigger:\n    - platform: state\n      entity_id: device_tracker.ola\n    - platform: state\n      entity_id: sensor.ola_last_update\n  action:\n    service: rest_command.push_to_orion\n    data_template:\n      lat: '{{ states.device_tracker.ola.attributes.latitude }}'\n      lon: '{{ states.device_tracker.ola.attributes.longitude }}'\n      accuracy: '{{ states.device_tracker.ola.attributes.gps_accuracy }}'\n      battery: '{{ states.device_tracker.ola.attributes.battery }}'\n      device: 's8'\n      user: 'ola'\n\n# - alias: Inform if Arek is back in cracow\n#   trigger:\n#     - platform: state\n#       entity_id: sensor.city_arek\n#       to: 'Kraków'\n#   action:\n#     - service: notify.all\n#       data:\n#         message: '@Ola, Arek jest juz w Krakowie'\n\n# - alias: Inform if Ola is back in cracow\n#   trigger:\n#     - platform: state\n#       entity_id: sensor.city_ola\n#       to: 'Kraków'\n#   action:\n#     - service: notify.all\n#       data:\n#         message: '@Arek, Ola jest juz w Krakowie'"
  },
  {
    "path": "home-assistant/automations/privacy.yaml",
    "content": "- alias: Clear Alexa History\n  trigger:\n    platform: time_pattern\n    minutes: '/15'\n  action:\n    - service: alexa_media.clear_history"
  },
  {
    "path": "home-assistant/automations/security.yaml",
    "content": "# - alias: \"Message me if there is any motion with pictures\"\n#   trigger:\n#     - entity_id: binary_sensor.hall_pir\n#       platform: 'state'\n#       from: 'off'\n#       to: 'on'\n#   condition:\n#     - condition: state\n#       entity_id: group.family\n#       state: not_home\n#   action:\n#     - service: notify.telegram_arek\n#       data:\n#         title: 'Motion detected'\n#         message: \"Here are pictures of the event\"\n#     - service: camera.snapshot\n#       data:\n#         entity_id: camera.kitchen\n#         filename: /tmp/snapshot.jpg\n#     - delay: '00:00:01'\n#     - service: notify.telegram_arek\n#       data:\n#         title: 'Motion detected'\n#         message: \"Here are pictures of the event\"\n#         data:\n#           photo:\n#             - file: /tmp/snapshot.jpg\n#     - service: camera.snapshot\n#       data:\n#         entity_id: camera.kitchen\n#         filename: /tmp/snapshot.jpg\n#     - delay: '00:00:01'\n#     - service: notify.telegram_arek\n#       data:\n#         title: 'Motion detected'\n#         message: \"Here are pictures of the event\"\n#         data:\n#           photo:\n#             - file: /tmp/snapshot.jpg\n#     - service: camera.snapshot\n#       data:\n#         entity_id: camera.kitchen\n#         filename: /tmp/snapshot.jpg\n#     - delay: '00:00:01'\n#     - service: notify.telegram_arek\n#       data:\n#         title: 'Motion detected'\n#         message: \"Here are pictures of the event\"\n#         data:\n#           photo:\n#             - file: /tmp/snapshot.jpg\n#     - service: camera.snapshot\n#       data:\n#         entity_id: camera.kitchen\n#         filename: /tmp/snapshot.jpg\n#     - delay: '00:00:01'\n#     - service: notify.telegram_arek\n#       data:\n#         title: 'Motion detected'\n#         message: \"Here are pictures of the event\"\n#         data:\n#           photo:\n#             - file: /tmp/snapshot.jpg\n#     - service: camera.snapshot\n#       data:\n#         entity_id: camera.kitchen\n#         filename: /tmp/snapshot.jpg\n#     - delay: '00:00:01'\n#     - service: notify.telegram_arek\n#       data:\n#         title: 'Motion detected'\n#         message: \"Here are pictures of the event\"\n#         data:\n#           photo:\n#             - file: /tmp/snapshot.jpg"
  },
  {
    "path": "home-assistant/automations/sun.yaml",
    "content": "- alias: Switch on tv stand room light \n  trigger:\n    - platform: sun\n      event: sunset\n  condition:\n    condition: and\n    conditions:\n      - condition: state\n        entity_id: 'group.family'\n        state: 'home'\n      - condition: state\n        entity_id: light.main\n        state: 'off'\n  action:\n    - service: light.turn_on\n      data:\n        entity_id: light.tv_stand\n\n- alias: Open blinds in morning\n  trigger:\n    - platform: time\n      at: '7:30:00'\n  condition:\n    condition: and\n    conditions:\n      - condition: state\n        entity_id: 'group.family'\n        state: 'home'\n  action:\n    - service: cover.open_cover\n      data:\n        entity_id: cover.living_room\n    - service: light.turn_off\n      entity_id: light.arek_szafka\n    - service: light.turn_off\n      entity_id: light.ola_szafka\n      \n"
  },
  {
    "path": "home-assistant/automations/system.yaml",
    "content": "- alias: Switch rack fan if system is too hot\n  trigger:\n    platform: numeric_state\n    entity_id: sensor.corridor_pawlacz_temperature\n    above: 28\n    for:\n      minutes: 5\n  action:\n    - service: switch.turn_on\n      entity_id: switch.rack_fan\n\n- alias: Switch rack fan if system is cool\n  trigger:\n    platform: numeric_state\n    entity_id: sensor.corridor_pawlacz_temperature\n    below: 28\n    for:\n      minutes: 5\n  action:\n    - service: switch.turn_off\n      entity_id: switch.rack_fan\n\n- alias: Restart router\n  trigger:\n    platform: time\n    at: '02:50:00'\n  action:\n    - service: switch.turn_off\n      entity_id: switch.router\n    - delay: '0:00:10'\n    - service: switch.turn_on\n      entity_id: switch.router"
  },
  {
    "path": "home-assistant/automations/torrents.yaml",
    "content": "- alias: Notify about completed torrent\n  trigger:\n    platform: event\n    event_type: transmission_downloaded_torrent\n  action:\n    service: notify.all\n    data_template:\n      title: \"Transmission\"\n      message: \"Torrent downloaded!\"\n\n# - alias: 'Add torrent'\n#   trigger:\n#     - platform: event\n#       event_type: telegram_command\n#       event_data:\n#         command: '/t'\n#         chat_id: 66368059\n#   action:\n#     - service: notify.telegram_arek\n#       data_template:\n#         message: Hold on, adding yer stuff...\n#     - service: transmission.add_torrent\n#       data_template:\n#         torrent: '{{ trigger.event.data.args | join(\" \") }}'"
  },
  {
    "path": "home-assistant/automations/trains.yaml",
    "content": "- alias: Notify me that my train card will expire\n  trigger:\n    - platform: time\n      at: '18:00:00'\n  condition:\n    - condition: template\n      value_template: '{{ states.sensor.arek_karta_miejsca.attributes.days <= 4 }}'\n  action:\n    - service: notify.all\n      data:\n        message: '@Arek, twoja karta miejska wygaśnie za {{ states.sensor.arek_karta_miejsca.attributes.days }} dni! Kup nowy bilet tutaj: https://ebilet.kkm.krakow.pl/ebilet/Logowanie'\n\n- alias: Nag me at the morning about next train\n  trigger:\n    platform: numeric_state\n    entity_id: sensor.to_work_transit\n    below: 600\n  condition:\n    condition: and\n    conditions:\n      - condition: state\n        entity_id: 'person.arek'\n        state: 'home'\n      - condition: time\n        # At least one of the following is required.\n        after: '7:30:00'\n        before: '9:00:00'\n        weekday:\n          - mon\n          - tue\n          - wed\n          - thu\n          - fri\n  action:\n    - service: notify.all\n      data:\n        message: >\n          @Arek, następny tramwaj za 10 min({{ states.sensor.to_work_transit.attributes.departures[0].time['formatted'] }})!\n          Kolejny będzie o {{ states.sensor.to_work_transit.attributes.departures[1].time['formatted'] }}\n\n- alias: Nag me at in work about next train\n  trigger:\n    platform: numeric_state\n    entity_id: sensor.back_from_work_transit\n    below: 600\n  condition:\n    condition: and\n    conditions:\n      - condition: state\n        entity_id: 'person.arek'\n        state: 'codesthq'\n      - condition: time\n        # At least one of the following is required.\n        after: '16:30:00'\n        before: '17:30:00'\n        weekday:\n          - mon\n          - tue\n          - wed\n          - thu\n          - fri\n  action:\n    - service: notify.all\n      data:\n        message: >\n          @Arek, następny tramwaj za 10 min({{ states.sensor.back_from_work_transit.attributes.departures[0].time['formatted'] }})!\n          Kolejny będzie o {{ states.sensor.back_from_work_transit.attributes.departures[1].time['formatted'] }}\n\n"
  },
  {
    "path": "home-assistant/automations/tv.yaml",
    "content": "- alias: Change soundbar source after TV is switched on\n  trigger:\n    platform: state\n    entity_id: media_player.tv\n    from: 'off'\n    to: 'on'\n  action:\n    - delay: '00:00:05'\n    - service: media_player.volume_set\n      data:\n        entity_id: media_player.soundbar\n        volume_level: 0.40\n\n- alias: Adjust volume after PS4 boots up\n  trigger:\n    platform: state\n    entity_id: media_player.playstation\n    to: 'playing'\n  action:\n    - service: media_player.volume_set\n      data:\n        entity_id: media_player.soundbar\n        volume_level: 0.45"
  },
  {
    "path": "home-assistant/automations/vacuum.yaml",
    "content": "- alias: Summon vacuum back to dock if sombody returns to home\n  trigger:\n    platform: state\n    entity_id: group.family\n    from: 'not_home'\n    to: 'home'\n  action:\n    - service: vacuum.return_to_base\n      data:\n        entity_id: vacuum.main_vacuum\n    - service: vacuum.set_fan_speed\n      data_template:\n        entity_id: vacuum.living_room_vacum\n        fan_speed: Balanced\n\n- alias: Start cleaning the house\n  trigger:\n    platform: state\n    entity_id: group.family\n    from: 'home'\n    to: 'not_home'\n    for:\n      minutes: 5\n  action:\n    - service: vacuum.start\n      data:\n        entity_id: vacuum.main_vacuum\n    - delay: '00:00:05'\n    - service: vacuum.set_fan_speed\n      data_template:\n        entity_id: vacuum.main_vacuum\n        fan_speed: Balanced\n\n- alias: Send vacuum near trash bin and ask for replacing trash can\n  trigger:\n    platform: state\n    entity_id: vacuum.main_vacuum\n    to: 'docked'\n  condition:\n    - condition: template\n      value_template: '{{ states.vacuum.main_vacuum.attributes.cleaning_count % 10 == 0 }}'\n  action:\n    - service: notify.slack\n      data:\n        title: 'Odkurzacz'\n        message: \"Wyrzuć śmieci z pojemnika odkurzacza\"\n        # add go to target...\n  \n- alias: Summon vacuum to trash bin if is docked\n  trigger:\n    platform: event\n    event_type: xiaomi_aqara.click\n    event_data:\n      entity_id: binary_sensor.kitchen_summon_vacuum\n      click_type: single\n  condition:\n    - condition: state\n      entity_id: vacuum.main_vacuum\n      state: docked\n  action:\n    - service: vacuum.send_command\n      data:\n        entity_id: vacuum.main_vacuum\n        command: app_goto_target\n        params: [25849, 24429]\n    - service: notify.alexa_media_kitchen\n      data:\n        message: 'Hey, vacuum take your ass near trash can!'\n        data:\n          type: announce\n          method: all\n\n- alias: Send back vacuum to its cave\n  trigger:\n    platform: event\n    event_type: xiaomi_aqara.click\n    event_data:\n      entity_id: binary_sensor.kitchen_summon_vacuum\n      click_type: single\n  condition:\n    condition: or\n    conditions:\n      - condition: state\n        entity_id: vacuum.main_vacuum\n        state: cleaning\n      - condition: state\n        entity_id: vacuum.main_vacuum\n        state: idle\n  action:\n    - service: vacuum.return_to_base\n      data:\n        entity_id: vacuum.main_vacuum\n    - service: notify.alexa_media_kitchen\n      data:\n        message: 'Ok, thats is all, go back to your cave!'\n        data:\n          type: announce\n          method: all"
  },
  {
    "path": "home-assistant/automations/weather.yaml",
    "content": "- alias: Inform about Vistula alert level\n  trigger:\n    platform: numeric_state\n    entity_id: sensor.vistula_water_level\n    above: 520 #TODO: fetch this from sensor.vistula_alert_level ?\n  action:\n    - service: notify.all\n      data:\n        title: 'Wisła'\n        message: 'Poziom Wisły przekroczył poziom alarmowy!'\n\n- alias: Switch off blue light alert\n  trigger:\n    platform: state\n    entity_id: sensor.it_will_rain\n    to: 'off'\n  action:\n    - service: light.turn_off\n      entity_id: light.gatewa_ambient_light\n\n- alias: Switch on blue light alert if it is going to rain\n  trigger:\n    platform: state\n    entity_id: sensor.it_will_rain\n    to: 'on'\n  condition:\n    condition: and\n    conditions:\n      - condition: state\n        entity_id: group.family\n        state: 'home'\n  action:\n    - service: light.turn_on\n      data:\n        entity_id: light.gatewa_ambient_light\n        rgb_color: [0, 190, 255]\n        brightness: 1"
  },
  {
    "path": "home-assistant/automations/work.yaml",
    "content": "- alias: Notify me that my work is done\n  trigger:\n    platform: numeric_state\n    entity_id: sensor.arek_czas_pracy\n    value_template: '{{ state.attributes.minutes }}'\n    above: 420\n  condition:\n    - condition: state\n      entity_id: person.arek\n      state: codesthq\n  action:\n    - service: notify.gotify\n      data:\n        title: 'Praca'\n        message: \"Fajrant, czas spierdalać do domu!\"\n\n- alias: Notify me if wife is near work\n  trigger:\n    platform: state\n    entity_id: person.ola\n    to: 'chargify'\n  action:\n    - service: notify.gotify\n      data:\n        title: 'Praca'\n        message: \"Ola jest pod biurem\"\n\n- alias: Notify wife that I left work\n  trigger:\n    - platform: state\n      entity_id: person.arek\n      from: 'chargify'\n      to: 'not_home'\n  condition:\n    - condition: state\n      entity_id: person.ola\n      state: home\n  action:\n    - service: notify.alexa_media_living_room\n      data:\n        message: \"Wife, Your housband left work\"\n        data:\n          type: announce\n          method: all\n    - delay: '00:00:45'\n    - service: notify.all\n      data:\n        message: '@Ola, Monsz wyszedł z roboty'\n\n- alias: Inform about lunching order\n  trigger:\n    platform: state\n    entity_id: person.arek\n    to: 'chargify'\n    for: '00:05:00'\n  condition:\n    - condition: state\n      entity_id: sensor.arek_jedzenie\n      state: 'off'\n  action:\n    - service: notify.lunching\n      data:\n        message: '@Arek Lunching mutafaka!'\n\n- alias: Tell me what food will be in 30 minutes delivered to my at work\n  trigger:\n    platform: numeric_state\n    entity_id: sensor.arek_jedzenie\n    value_template: '{{  states.sensor.arek_jedzenie.attributes.time_left }}'\n    below: 1800\n  condition:\n    - condition: state\n      entity_id: person.arek\n      state: chargify\n    - condition: state\n      entity_id: sensor.arek_jedzenie\n      state: 'on'\n  action:\n    - service: notify.lunching\n      data_template:\n        title: 'Praca'\n        message: \"Za pół godziny, przy dobrych mocach posejdona strawa twa będzie {{ states.sensor.arek_jedzenie.attributes.meal }}\"\n\n- alias: Notify me that food was delivered\n  trigger:\n    - platform: state\n      entity_id: sensor.arek_jedzenie\n      from: 'on'\n      to: 'off'\n  condition:\n    - condition: state\n      entity_id: person.arek\n      state: chargify\n  action:\n    - service: notify.lunching\n      data_template:\n        title: 'Praca'\n        message: >\n          Swarożycu uświęć te ofiarne napoje i strawy,\n          by Twej mocy nabrały i byśmy spożywając je bliżsi Bogom byli.\n          Przyjm w swe ciało zioła święte, niech oczyszczą to miejsce\n          i przyniosą wszystko to co dobre, dla nas i dla naszych rodzin.\n"
  },
  {
    "path": "home-assistant/automations.yaml",
    "content": "- id: '1596707193800'\n  alias: Send door code near work\n  description: ''\n  trigger:\n  - entity_id: device_tracker.arek\n    event: enter\n    platform: zone\n    zone: zone.codesthq\n  condition: []\n  action:\n  - data:\n      message: 6 kluczyk 7153\n      title: Kod do bramy\n    service: notify.gotify\n  mode: single\n- id: '1597867269400'\n  alias: If Arek weight change announce it to everybody in home\n  description: ''\n  trigger:\n  - above: '70'\n    entity_id: sensor.arek_weight\n    platform: numeric_state\n  condition: []\n  action:\n  - data:\n      message: Your weight is {{states.sensor.arek_weight.state}} kilo, so you are\n        still fat.\n      title: Weight\n    service: notify.gotify\n  mode: single\n- id: '1597870082700'\n  alias: Do not disturb alexa if nobody home or it is night\n  description: ''\n  trigger:\n  - entity_id: group.family\n    from: Home\n    platform: state\n    to: Away\n  - at: '23:00'\n    platform: time\n  condition: []\n  action:\n  - data: {}\n    entity_id: switch.everywhere_do_not_disturb_switch\n    service: switch.turn_on\n  mode: single\n- id: '1597870159000'\n  alias: Enable alexa devices at morning or if somebody is coming back\n  description: ''\n  trigger:\n  - entity_id: group.family\n    from: Away\n    platform: state\n    to: Home\n  - at: '7:00'\n    platform: time\n  condition: []\n  action:\n  - data: {}\n    entity_id: switch.everywhere_do_not_disturb_switch\n    service: switch.turn_off\n  mode: single\n- id: '1598889031447'\n  alias: Turn off light for xiaomi fan\n  description: ''\n  trigger:\n  - at: 0:02\n    platform: time\n  condition: []\n  action:\n  - data: {}\n    entity_id: fan.bedroom_air_purifier\n    service: xiaomi_miio.fan_set_led_brightness\n  mode: single\n- id: '1600170239579'\n  alias: Heal network\n  description: ''\n  trigger:\n  - at: '4:00'\n    platform: time\n  condition: []\n  action:\n  - data: {}\n    service: zwave.heal_network\n  mode: single\n- id: '1601236736500'\n  alias: Pause TV if Arek has a Call\n  description: ''\n  trigger:\n  - platform: state\n    entity_id: sensor.arek_phone_state\n    to: ringing\n    from: idle\n  - platform: state\n    entity_id: sensor.arek_phone_state\n    from: idle\n    to: offhook\n  condition:\n  - condition: state\n    entity_id: person.arek\n    state: home\n  action:\n  - service: media_player.media_pause\n    data: {}\n    entity_id: media_player.tv\n  mode: single\n- id: '1601237413600'\n  alias: 'Pause TV if Ola has a Call '\n  description: ''\n  trigger:\n  - platform: state\n    entity_id: sensor.olas8_stan_telefonu\n    to: ringing\n    from: idle\n  - platform: state\n    entity_id: sensor.olas8_stan_telefonu\n    from: idle\n    to: offhook\n  condition:\n  - condition: state\n    entity_id: person.ola\n    state: home\n  action:\n  - service: media_player.media_pause\n    data: {}\n    entity_id: media_player.tv\n  mode: single\n- id: '1601668124100'\n  alias: Prysznic\n  description: ''\n  trigger:\n  - platform: time\n    at: '19:00'\n  condition:\n  - condition: state\n    entity_id: group.family\n    state: home\n  action:\n  - service: notify.all\n    data:\n      message: Prysznic!\n  mode: single\n- id: '1606050672600'\n  alias: Ola wyjedża od Jarosa\n  description: ''\n  trigger:\n  - platform: zone\n    entity_id: person.ola\n    zone: zone.ranczo_klimkow\n    event: leave\n  condition: []\n  action:\n  - service: notify.alexa_media_living_room\n    data:\n      message: Ola is leaving Klimki House\n      data:\n        type: announce\n        method: all\n  - delay: '10'\n  - service: notify.alexa_media_kitchen\n    data:\n      message: Ola is leaving Klimki House\n      data:\n        type: announce\n        method: all\n  mode: single\n- id: '1606652899700'\n  alias: Ola wyjedża od Dzidki\n  description: ''\n  trigger:\n  - platform: zone\n    entity_id: person.ola\n    zone: zone.dzidka\n    event: leave\n  condition: []\n  action:\n  - service: notify.alexa_media_living_room\n    data:\n      message: Ola is leaving Dzidka House\n      data:\n        type: announce\n        method: all\n  - delay: '10'\n  - service: notify.alexa_media_kitchen\n    data:\n      message: Ola is leaving Dzidka House\n      data:\n        type: announce\n        method: all\n  mode: single\n- id: '1607521396700'\n  alias: Humidifier is in dry mode\n  description: Tell people in the house that humidifier is out of water\n  trigger:\n  - platform: state\n    entity_id: fan.living_room_humidifier\n    attribute: dry\n    from: 'False'\n    to: 'True'\n  condition: []\n  action:\n  - service: notify.all\n    data:\n      title: Nawilżacz\n      message: Uzupełnij wodę w nawilżaczu!\n  mode: single\n- id: '1607889011300'\n  alias: Switch on choinka\n  description: ''\n  trigger:\n  - platform: sun\n    event: sunset\n  condition:\n  - condition: state\n    entity_id: group.family\n    state: home\n  action:\n  - service: switch.turn_on\n    data: {}\n    entity_id: switch.christmas_tree\n  mode: single\n- id: '1607889099900'\n  alias: Switch off choinka\n  description: ''\n  trigger:\n  - platform: time\n    at: '23:59'\n  condition: []\n  action:\n  - service: switch.turn_off\n    data: {}\n    entity_id: switch.christmas_tree\n  mode: single\n- id: '1609398359663'\n  alias: Switch off light balls\n  description: ''\n  trigger:\n  - platform: time\n    at: '8:00'\n  condition: []\n  action:\n  - service: switch.turn_off\n    data: {}\n    entity_id: switch.hall_light\n  mode: single\n- id: '1610810175829'\n  alias: Ola wyjedża od Anki\n  description: ''\n  trigger:\n  - platform: zone\n    entity_id: person.ola\n    zone: zone.anka\n    event: leave\n  condition: []\n  action:\n  - service: notify.alexa_media_living_room\n    data:\n      message: Ola is leaving Anka House\n      data:\n        type: announce\n        method: all\n  - delay: '10'\n  - service: notify.alexa_media_kitchen\n    data:\n      message: Ola is leaving Anka House\n      data:\n        type: announce\n        method: all\n  mode: single\n- id: '1612103094478'\n  alias: Bedroom window opened too long\n  description: ''\n  trigger:\n  - platform: state\n    entity_id: binary_sensor.bedroom_window\n    from: 'off'\n    to: 'on'\n    for: '1:10:00'\n  condition: []\n  action:\n  - service: notify.all\n    data:\n      message: Okno w sypialni otwarte zbyt długo\n  mode: single\n- id: '1616752611416'\n  alias: Lazy switch off automations\n  description: ''\n  trigger:\n  - platform: homeassistant\n    event: start\n  condition: []\n  action:\n  - service: automation.turn_off\n    data: {}\n    entity_id: automation.inform_me_if_number_of_beerbug_patients_changed\n  mode: single\n- id: '1620048655385'\n  alias: Ola is in Galeria krakowska\n  description: ''\n  use_blueprint:\n    path: homeassistant/notify_leaving_zone.yaml\n    input:\n      person_entity: person.ola\n      zone_entity: zone.galeria_krakowka\n      notify_device: 3465c7e083aa4509b0ca3a5e796fc854\n- id: '1620403076688'\n  alias: Switch mosquitto killer in bedroom on before going to sleep\n  description: ''\n  trigger: []\n  condition: []\n  action: []\n  mode: single\n- id: '1620403128707'\n  alias: Switch off mosquitto killer at morning\n  description: ''\n  trigger: []\n  condition: []\n  action: []\n  mode: single\n- id: '1642450576503'\n  alias: Tag Hulajnoga is scanned\n  description: ''\n  trigger:\n  - platform: tag\n    tag_id: cb152ef9-080d-4aae-9cbc-e15a8b241f99\n  condition: []\n  action:\n  - service: notify.mobile_app_arek\n    data:\n      message: command_screen_on\n      title: keep_screen_on\n  - service: notify.mobile_app_arek\n    data:\n      message: command_activity\n      title: adriandp.m365dashboard\n      data:\n        channel: adriandp.m365dashboard\n        tag: android.intent.action.VIEW\n  mode: single\n- id: '1645086358331'\n  alias: Open Cover at night\n  description: Open cover at night for better ventilation\n  trigger:\n  - platform: time\n    at: '21:00:00'\n  - platform: state\n    entity_id: light.tv_stand\n    for:\n      hours: 0\n      minutes: 15\n      seconds: 0\n    to: 'off'\n  condition:\n  - condition: and\n    conditions:\n    - condition: state\n      entity_id: light.tv_stand\n      state: 'off'\n    - condition: time\n      after: '21:00:00'\n      before: 05:00:00\n  action:\n  - service: cover.set_cover_position\n    data:\n      position: 70\n    target:\n      entity_id: cover.living_room_controller\n  mode: single\n- id: '1646553657957'\n  alias: Inform about wibor change\n  description: ''\n  trigger:\n  - platform: state\n    entity_id: sensor.wibor_6m\n  condition: []\n  action:\n  - service: notify.mobile_app_arek\n    data:\n      title: Zmiana w wiborze\n      message: 'Wibor 3M: {{ states.sensor.wibor_3m.state }}% Wibor 6M: {{ states.sensor.wibor_6m.state\n        }}% Wibor 1R: {{ states.sensor.wibor_1r.state }}%\n\n        '\n  mode: single\n- id: '1648111535506'\n  alias: Remind me to charge my scooter\n  description: ''\n  trigger:\n  - platform: state\n    entity_id: person.arek\n    to: home\n    for:\n      hours: 0\n      minutes: 30\n      seconds: 0\n  - platform: state\n    entity_id: person.arek\n    to: chargify\n    for:\n      hours: 0\n      minutes: 30\n      seconds: 0\n  condition: []\n  action:\n  - service: notify.mobile_app_arek\n    data:\n      title: Podłącz chulajnoge do ładowania\n      message: Podłącz chulajnoge do ładowania\n  mode: single\n- id: '1651729432557'\n  alias: Tweet wibor change\n  description: ''\n  trigger:\n  - platform: state\n    entity_id: sensor.wibor_3m\n  condition: []\n  action:\n  - service: notify.twitter\n    data:\n      message: 'Zmiana w #wibor: Wibor 3M: {{ states.sensor.wibor_3m.state }}% Wibor\n        6M: {{ states.sensor.wibor_6m.state }}% Wibor 1R: {{ states.sensor.wibor_1r.state\n        }}%\n\n        '\n  mode: single\n- id: '1652639456782'\n  alias: Close blinds on sunset\n  description: ''\n  trigger:\n  - platform: state\n    entity_id: sun.sun\n    to: below_horizon\n    for:\n      hours: 0\n      minutes: 15\n      seconds: 0\n  condition: []\n  action:\n  - service: cover.close_cover\n    data: {}\n    target:\n      entity_id: cover.living_room\n  mode: single\n- id: '1653834917217'\n  alias: Send location update to node red and then next cloud for arek\n  description: ''\n  trigger:\n  - platform: state\n    entity_id:\n    - device_tracker.sm_s10_arek\n    attribute: longitude\n  - platform: state\n    entity_id:\n    - device_tracker.sm_s10_arek\n    attribute: longitude\n  condition: []\n  action:\n  - event: location-updated\n    event_data:\n      entity_id: device_tracker.sm_s10_arek\n  mode: single\n- id: '1653839172809'\n  alias: Send location update to node red and then next cloud for Ola\n  description: ''\n  trigger:\n  - platform: state\n    entity_id:\n    - person.ola\n    attribute: longitude\n  - platform: state\n    entity_id:\n    - person.ola\n    attribute: longitude\n  condition: []\n  action:\n  - event: location-updated\n    event_data:\n      entity_id: device_tracker.sm_g8_ola\n  mode: single\n- id: '1655194812809'\n  alias: Notify Arek if whosoff is not filled if he visits office\n  description: ''\n  trigger:\n  - platform: state\n    entity_id:\n    - person.arek\n    to: chargify\n    for:\n      hours: 0\n      minutes: 5\n      seconds: 0\n  condition:\n  - condition: state\n    entity_id: binary_sensor.arek_works_from_office_today\n    state: 'off'\n  action:\n  - service: notify.mobile_app_arek\n    data:\n      message: Wypełnij whosoff\n      title: Whosoff\n  mode: single\n- id: '1656338307544'\n  alias: Switch off air condition if nobody home\n  description: ''\n  trigger:\n  - platform: state\n    entity_id:\n    - group.family\n    from: home\n    for:\n      hours: 0\n      minutes: 5\n      seconds: 0\n  condition: []\n  action:\n  - service: climate.turn_off\n    data: {}\n    target:\n      entity_id: climate.air_condition\n  mode: single\n- id: '1656349030861'\n  alias: 'Tell me about bottle on balcony '\n  description: ''\n  trigger:\n  - platform: time\n    at: '19:30:00'\n  condition:\n  - condition: state\n    entity_id: group.family\n    state: home\n  action:\n  - service: notify.alexa_media_living_room\n    data:\n      data:\n        type: announce\n        method: all\n      message: Hey, Ola check the bottle with water for flowers.\n  - service: notify.all\n    data:\n      message: Sprawdź butle z wodą na balkonie\n  mode: single\n- id: '1656418899672'\n  alias: Outside is colder than inside\n  description: ''\n  trigger:\n  - platform: template\n    value_template: '{% if((states.sensor.mean_temperature.state | float) - (states.sensor.balcone_temperature.state\n      | float) > 1.0) %}true{% endif %}'\n  condition:\n  - condition: state\n    entity_id: climate.air_condition\n    state: cool\n    for:\n      hours: 0\n      minutes: 0\n      seconds: 0\n  - condition: state\n    entity_id: group.family\n    state: home\n  action:\n  - service: notify.all\n    data:\n      message: Temperatura na zewnątrz({{states.sensor.balcone_temperature.state}}\n        C) jest mniejsza niż w salonie({{ states.sensor.mean_temperature.state }}\n        C), można otworzyć okna\n  mode: single\n"
  },
  {
    "path": "home-assistant/blueprints/automation/homeassistant/motion_light.yaml",
    "content": "blueprint:\n  name: Motion-activated Light\n  description: Turn on a light when motion is detected.\n  domain: automation\n  source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/motion_light.yaml\n  input:\n    motion_entity:\n      name: Motion Sensor\n      selector:\n        entity:\n          domain: binary_sensor\n          device_class: motion\n    light_target:\n      name: Light\n      selector:\n        target:\n          entity:\n            domain: light\n    no_motion_wait:\n      name: Wait time\n      description: Time to leave the light on after last motion is detected.\n      default: 120\n      selector:\n        number:\n          min: 0\n          max: 3600\n          unit_of_measurement: seconds\n\n# If motion is detected within the delay,\n# we restart the script.\nmode: restart\nmax_exceeded: silent\n\ntrigger:\n  platform: state\n  entity_id: !input motion_entity\n  from: \"off\"\n  to: \"on\"\n\naction:\n  - service: light.turn_on\n    target: !input light_target\n  - wait_for_trigger:\n      platform: state\n      entity_id: !input motion_entity\n      from: \"on\"\n      to: \"off\"\n  - delay: !input no_motion_wait\n  - service: light.turn_off\n    target: !input light_target\n"
  },
  {
    "path": "home-assistant/blueprints/automation/homeassistant/notify_leaving_zone.yaml",
    "content": "blueprint:\n  name: Zone Notification\n  description: Send a notification to a device when a person leaves a specific zone.\n  domain: automation\n  source_url: https://github.com/home-assistant/core/blob/dev/homeassistant/components/automation/blueprints/notify_leaving_zone.yaml\n  input:\n    person_entity:\n      name: Person\n      selector:\n        entity:\n          domain: person\n    zone_entity:\n      name: Zone\n      selector:\n        entity:\n          domain: zone\n    notify_device:\n      name: Device to notify\n      description: Device needs to run the official Home Assistant app to receive notifications.\n      selector:\n        device:\n          integration: mobile_app\n\ntrigger:\n  platform: state\n  entity_id: !input person_entity\n\nvariables:\n  zone_entity: !input zone_entity\n  # This is the state of the person when it's in this zone.\n  zone_state: \"{{ states[zone_entity].name }}\"\n  person_entity: !input person_entity\n  person_name: \"{{ states[person_entity].name }}\"\n\ncondition:\n  condition: template\n  value_template: \"{{ trigger.from_state.state == zone_state and trigger.to_state.state != zone_state }}\"\n\naction:\n  domain: mobile_app\n  type: notify\n  device_id: !input notify_device\n  message: \"{{ person_name }} has left {{ zone_state }}\"\n"
  },
  {
    "path": "home-assistant/blueprints/script/homeassistant/confirmable_notification.yaml",
    "content": "blueprint:\n  name: Confirmable Notification\n  description: >-\n    A script that sends an actionable notification with a confirmation before\n    running the specified action.\n  domain: script\n  source_url: https://github.com/home-assistant/core/blob/master/homeassistant/components/script/blueprints/confirmable_notification.yaml\n  input:\n    notify_device:\n      name: Device to notify\n      description: Device needs to run the official Home Assistant app to receive notifications.\n      selector:\n        device:\n          integration: mobile_app\n    title:\n      name: \"Title\"\n      description: \"The title of the button shown in the notification.\"\n      default: \"\"\n      selector:\n        text:\n    message:\n      name: \"Message\"\n      description: \"The message body\"\n      selector:\n        text:\n    confirm_text:\n      name: \"Confirmation Text\"\n      description: \"Text to show on the confirmation button\"\n      default: \"Confirm\"\n      selector:\n        text:\n    confirm_action:\n      name: \"Confirmation Action\"\n      description: \"Action to run when notification is confirmed\"\n      default: []\n      selector:\n        action:\n    dismiss_text:\n      name: \"Dismiss Text\"\n      description: \"Text to show on the dismiss button\"\n      default: \"Dismiss\"\n      selector:\n        text:\n    dismiss_action:\n      name: \"Dismiss Action\"\n      description: \"Action to run when notification is dismissed\"\n      default: []\n      selector:\n        action:\n\nmode: restart\n\nsequence:\n  - alias: \"Set up variables\"\n    variables:\n      action_confirm: \"{{ 'CONFIRM_' ~ context.id }}\"\n      action_dismiss: \"{{ 'DISMISS_' ~ context.id }}\"\n  - alias: \"Send notification\"\n    domain: mobile_app\n    type: notify\n    device_id: !input notify_device\n    title: !input title\n    message: !input message\n    data:\n      actions:\n        - action: \"{{ action_confirm }}\"\n          title: !input confirm_text\n        - action: \"{{ action_dismiss }}\"\n          title: !input dismiss_text\n  - alias: \"Awaiting response\"\n    wait_for_trigger:\n      - platform: event\n        event_type: mobile_app_notification_action\n        event_data:\n          action: \"{{ action_confirm }}\"\n      - platform: event\n        event_type: mobile_app_notification_action\n        event_data:\n          action: \"{{ action_dismiss }}\"\n  - choose:\n      - conditions: \"{{ wait.trigger.event.data.action == action_confirm }}\"\n        sequence: !input confirm_action\n      - conditions: \"{{ wait.trigger.event.data.action == action_dismiss }}\"\n        sequence: !input dismiss_action\n"
  },
  {
    "path": "home-assistant/components/alexa.yaml",
    "content": "smart_home:\n  endpoint: https://api.amazonalexa.com/v3/events\n  client_id: !env_var HOME_ASSISTANT_ALEXA_CLIENT_ID\n  client_secret: !env_var HOME_ASSISTANT_ALEXA_CLIENT_SECRET\n  filter:\n    include_domains:\n      - light\n      - scene\n    include_entities:\n      - script.consume_pepsi\n      - switch.living_room_humidifier\n      - cover.living_room\n      - media_player.tv\n      - switch.pizza\n      - switch.adguard_protection\n      - media_player.playstation\n      - media_player.soundbar\n      - switch.macmini\n      - script.find_vacuum\n      - script.clean_kitchen\n      - script.clean_bedroom\n      - script.clean_corridor\n      - script.clean_living_room\n      - script.clean_bathroom\n      - script.stop_cleaning\n      - script.start_cleaning\n      - script.feed_the_cat"
  },
  {
    "path": "home-assistant/components/alexa_media.yaml",
    "content": ""
  },
  {
    "path": "home-assistant/components/binary_sensor.yaml",
    "content": "- platform: iss\n  show_on_map: false\n\n- platform: workday\n  country: PL\n\n"
  },
  {
    "path": "home-assistant/components/calendar.yaml",
    "content": "- platform: caldav\n  username: !env_var HOME_ASSISTANT_CALENDAR_USER\n  password: !env_var HOME_ASSISTANT_CALENDAR_PASSWORD\n  url: !env_var HOME_ASSISTANT_CALENDAR_URL"
  },
  {
    "path": "home-assistant/components/camera.yaml",
    "content": "- platform: xiaomi_cloud_map_extractor\n  name: Vacuum Map\n  host: 192.168.1.131\n  country: \"sg\"\n  token: !env_var HOME_ASSISTANT_VACUUM_TOKEN\n  username: !env_var HOME_ASSISTANT_XIAOMI_USERNAME\n  password: !env_var HOME_ASSISTANT_XIAOMI_PASSWORD\n  draw: ['all']\n  colors:\n    color_map_outside: [0,0,0,0]\n  attributes:\n    - calibration_points\n    - charger\n    - cleaned_rooms\n    - country\n    - goto\n    - goto_path\n    - goto_predicted_path\n    - image\n    - is_empty\n    - map_name\n    - no_go_areas\n    - no_mopping_areas\n    - obstacles\n    - ignored_obstacles\n    - obstacles_with_photo\n    - ignored_obstacles_with_photo\n    - path\n    - room_numbers\n    - rooms\n    - vacuum_position\n    - vacuum_room\n    - vacuum_room_name\n    - walls\n    - zones\n"
  },
  {
    "path": "home-assistant/components/climate.yaml",
    "content": "- platform: zwave\n\n- platform: generic_thermostat\n  name: Kitchen Thermostat\n  heater: switch.kitchen_heater\n  target_sensor: sensor.kitchen_temperature\n  away_temp: 20\n  keep_alive:\n    minutes: 10\n\n"
  },
  {
    "path": "home-assistant/components/cover.yaml",
    "content": "- platform: template\n  covers:\n    living_room:\n      device_class: blind\n      friendly_name: \"Cover\"\n      optimistic: true\n      open_cover:\n        service: cover.set_cover_position\n        data:\n          entity_id: cover.living_room_controller\n          position: 100\n      close_cover:\n        service: cover.set_cover_position\n        data:\n          entity_id: cover.living_room_controller\n          position: 0"
  },
  {
    "path": "home-assistant/components/customize.yaml",
    "content": "person.ola:\n  entity_picture: /local/presence/ola/home.png\nperson.arek:\n  entity_picture: /local/presence/arek/home.png\nsensor.nowa_huta_bzn:\n  friendly_name: \"Benzen\"\nsensor.nowa_huta_co:\n  friendly_name: \"Tlenek węgla\"\nsensor.nowa_huta_no:\n  friendly_name: \"Tlenek azotu\"\nsensor.nowa_huta_no2:\n  friendly_name: \"Dwutlenek azotu\"\nsensor.nowa_huta_nox:\n  friendly_name: \"Tlenki azotu\"\nsensor.nowa_huta_pm10:\n  friendly_name: \"Pył zawieszony PM10\"\nsensor.nowa_huta_pm25:\n  friendly_name: \"Pył zawieszony PM2.5\"\nsensor.nowa_huta_so2:\n  friendly_name: \"Dwutlenek siarki\"\n\nsensor.starman_speed:\n  icon: mdi:account-star\nsensor.starman_earth_distance:\n  icon: mdi:map-marker-distance\nsensor.spacex_next_launch_day:\n  icon: mdi:rocket\n\nsensor.mean_temperature:\n  friendly_name: 'Temperatura'\n  icon: mdi:temperature-celsius\n\nsensor.dark_sky_temperature:\n  friendly_name: 'Kraków Temperatura'\n  icon: mdi:temperature-celsius\n\nsensor.dark_sky_humidity:\n  friendly_name: 'Kraków Wilgotność'\n  icon: mdi:water-percent\n\nsensor.mean_humidity:\n  friendly_name: 'Wilgotność'\n  icon: mdi:water-percent\n\nsensor.mean_pressure:\n  friendly_name: 'Ciśnienie'\n  icon: mdi:diving-helmet\n\nsensor.mean_aqi:\n  friendly_name: 'AQI'\n  icon: mdi:skull-crossbones\n\nsensor.chinese_air_quality_index:\n  friendly_name: 'Kraków AQI'\n  icon: mdi:skull-crossbones\n\nsensor.corridor_temperature:\n  friendly_name: 'Temperatura'\n  icon: mdi:temperature-celsius\n\nsensor.living_room_temperature:\n  friendly_name: 'Temperatura'\n  icon: mdi:temperature-celsius\n\nsensor.living_room_humidity:\n  friendly_name: 'Wilgotność'\n  icon: mdi:water-percent\n\nsensor.bedroom_temperature:\n  friendly_name: 'Temperatura'\n  icon: mdi:temperature-celsius\n\nsensor.bedroom_humidity:\n  friendly_name: 'Wilgotność'\n  icon: mdi:water-percent\n\nsensor.vistula_water_level:\n  friendly_name: 'Poziom Wisły'\n  icon: mdi:cup-water\n\nsensor.power_consumption:\n  icon: mdi:flash-circle\n\nbinary_sensor.balcone_door:\n  friendly_name: 'Drzwi na balkon'\n  icon: mdi:glassdoor\n\nsensor.paliwo_95:\n  friendly_name: 'Benzyna'\n  icon: mdi:oil\n\ncover.desk:\n  friendly_name: 'Biurko do pracy'\n  icon: mdi:desktop-mac-dashboard\n\nsensor.dark_sky_uv_index:\n  friendly_name: 'UV Indeks'\n\nsensor.dark_sky_pressure:\n  friendly_name: 'Ciśnienie'\n\nbinary_sensor.bathroom_door:\n  icon: 'mdi:door'\n\nbinary_sensor.main_door:\n  icon: 'mdi:door'\n\nlight.work_ambient_desk:\n  friendly_name: 'Work Desk back'\n  icon: 'mdi:led-strip'\n"
  },
  {
    "path": "home-assistant/components/fan.yaml",
    "content": "- platform: xiaomi_miio\n  name: living_room_air_purifier\n  host: 192.168.1.223\n  token: !env_var HOME_ASSISTANT_LIVING_ROOM_AIR_PURIFIER_TOKEN\n\n- platform: xiaomi_miio\n  name: Living Room Humidifier\n  host: 192.168.1.136\n  token: !env_var HOME_ASSISTANT_XIAOMI_LIVING_ROOM_HUMIDIFIER\n\n- platform: xiaomi_miio\n  name: bedroom_air_purifier\n  host: 192.168.1.48\n  token: !env_var HOME_ASSISTANT_BEDROOM_AIR_PURIFIER_TOKEN"
  },
  {
    "path": "home-assistant/components/frontend.yaml",
    "content": "javascript_version: latest\n"
  },
  {
    "path": "home-assistant/components/history.yaml",
    "content": "exclude:\n  entities:\n    - sensor.time_left_to_food\n    - sensor.to_work_transit\n    - sensor.back_from_work_transit\n    - sensor.date_time\n    - sensor.internet_time\n    - sensor.time\n    - sensor.time_date\n    - sensor.time_utc\n    - sensor.uptime\n    - automation.ping_aqara_gateway\n    - automation.refresh_courtains_if_they_draw_power\n  domains:\n    - calendar\n    - zwave"
  },
  {
    "path": "home-assistant/components/homeassistant.yaml",
    "content": "auth_providers:\n  - type: homeassistant\nname: !env_var HOME_ASSISTANT_NAME\ncurrency: PLN\nlatitude: !env_var HOME_ASSISTANT_LAT\nlongitude: !env_var HOME_ASSISTANT_LNG\nelevation: !env_var HOME_ASSISTANT_ELEVATION\nunit_system: metric\ntime_zone: Europe/Warsaw\ncustomize: !include customize.yaml\nwhitelist_external_dirs:\n  - /tmp\n\nexternal_url: !env_var HOME_ASSISTANT_EXTERNAL_URL\ninternal_url: !env_var HOME_ASSISTANT_INTERNAL_URL\n"
  },
  {
    "path": "home-assistant/components/http.yaml",
    "content": "# api_password: !env_var HOME_ASSISTANT_API_PASSWORD\nbase_url: !env_var HOME_ASSISTANT_URL\nuse_x_forwarded_for: true\ntrusted_proxies:\n  - 127.0.0.1\n  - ::1\nip_ban_enabled: false\nlogin_attempts_threshold: 20\ncors_allowed_origins:\n  - https://cast.home-assistant.io"
  },
  {
    "path": "home-assistant/components/hue.yaml",
    "content": "bridges:\n  - host: 192.168.0.23\n    allow_unreachable: true\n    allow_hue_groups: true\n    filename: hue_main.conf"
  },
  {
    "path": "home-assistant/components/image_processing.yaml",
    "content": "- platform: tensorflow\n  source:\n    - entity_id: camera.main_square\n    - entity_id: camera.wawel\n  file_out:\n    - \"/tmp/{{ camera_entity.split('.')[1] }}_latest.jpg\"\n  model:\n    graph: /tensorflow/frozen_inference_graph.pb\n    labels: /tensorflow/object_detection/data/mscoco_label_map.pbtxt\n    model_dir: /tensorflow\n    categories:\n      - person\n      - cat"
  },
  {
    "path": "home-assistant/components/influxdb.yaml",
    "content": "host: localhost\nport: 18086\ndatabase: !env_var INFLUXDB_DB\nusername: !env_var INFLUXDB_ADMIN_USER\npassword: !env_var INFLUXDB_ADMIN_PASSWORD\ntags:\n  source: homeassistant\ninclude:\n  domains: \n    - sensor\n\n"
  },
  {
    "path": "home-assistant/components/input_boolean.yaml",
    "content": "comeback:\n  name: \"Wracam\"\n  initial: off\n\npizza:\n  name: 'Pizza'\n  icon: mdi:pizza\n  initial: off\n\ngiggid:\n  name: 'giggid'\n  icon: mdi:account-arrow-left\n  initial: off\n"
  },
  {
    "path": "home-assistant/components/input_number.yaml",
    "content": "living_room_target_temperature:\n  name: 'Target temperature'\n  min: 4\n  max: 28\n  initial: 24.0\n  step: 0.5"
  },
  {
    "path": "home-assistant/components/input_select.yaml",
    "content": "who_cooks:\n  name: Who cooks today\n  options:\n    - Arek\n    - Ola\n  initial: Arek\n  icon: mdi:panda\n"
  },
  {
    "path": "home-assistant/components/led_strip_effects.yaml",
    "content": "- SingleColor\n- SinColor\n- RainbowColor\n- DualColor\n- FireEffect"
  },
  {
    "path": "home-assistant/components/life360.yaml",
    "content": "accounts:\n  - username: !env_var HOME_ASSISTANT_LIFE360_USERNAME\n    password: !env_var HOME_ASSISTANT_LIFE360_PASSWORD\nmax_update_wait:\n  minutes: 15\ndriving_speed: 18\nmax_gps_accuracy: 200\nprefix: ''"
  },
  {
    "path": "home-assistant/components/light.yaml",
    "content": "- platform: switch\n  name: Work Desk\n  entity_id: switch.work_desk_light\n\n- platform: switch\n  name: Bathroom\n  entity_id: switch.bathroom_light\n\n- platform: switch\n  name: Bedroom\n  entity_id: switch.bedroom_light\n\n- platform: switch\n  name: Christmas balls\n  entity_id: switch.christmas_balls\n\n- platform: switch\n  name: Coffee\n  entity_id: switch.coffee_light\n\n- platform: switch\n  name: Hall Balls\n  entity_id: switch.new_hall_balls\n\n- platform: switch\n  name: Dinner table\n  entity_id: switch.dinner_table_light\n\n- platform: switch\n  name: Corridor\n  entity_id: switch.hall_light\n\n- platform: switch\n  name: Cooking\n  entity_id: switch.kitchen_cooking_light\n\n- platform: switch\n  name: Kitchen\n  entity_id: switch.kitchen_main_light\n\n- platform: switch\n  name: Main\n  entity_id: switch.living_room_main_light\n\n- platform: switch\n  name: Tv Stand\n  entity_id: switch.tv_light\n\n- platform: mqtt\n  schema: json\n  command_topic: 'home/kitchen/puss_feeder/light/set'\n  state_topic: 'home/kitchen/puss_feeder/light'\n  name: Puss Feeder Light\n  qos: 1\n  rgb: true\n  retain: true\n  effect: true\n  brightness: true\n  effect_list:\n    - Connecting\n    - Countdown\n    - Success\n    - Manual\n    - None\n"
  },
  {
    "path": "home-assistant/components/logbook.yaml",
    "content": "exclude:\n  entities:\n    - automation.ping_aqara_gateway\n    - automation.refresh_courtains_if_they_draw_power\n    - automation.push_arek_location_to_orion\n    - automation.push_ola_location_to_orion\ninclude:\n  entities:\n    - binary_sensor.hall_pir\n  domains:\n    - switch\n    - binary_sensor\n    - climate\n    - zone\n    - media_player\n    - light\n    - device_tracker\n    - automation\n"
  },
  {
    "path": "home-assistant/components/logger.yaml",
    "content": "default: error\nlogs:\n  homeassistant.components.http.ban: warning\n  xiaomi_gateway: error\n  matrix: debug\n  xiaomi_miio: debug\n  homeassistant.components.matrix: debug\n  homeassistant.components.xiaomi_aqara: error\n  homeassistant.components.switch.xiaomi_aqara: debug\n  homeassistant.components.xiaomi_miio: debug\n  homeassistant.components.xiaomi_miio.vacuum: debug\n  homeassistant.components.rest_command: debug\n"
  },
  {
    "path": "home-assistant/components/matrix.yaml",
    "content": "homeserver: !env_var HOME_ASSISTANT_MATRIX_SERVER\nusername: !env_var HOME_ASSISTANT_MATRIX_USER\npassword: !env_var HOME_ASSISTANT_MATRIX_PASSWORD\nrooms: [!env_var HOME_ASSISTANT_MATRIX_ROOM, !env_var HOME_ASSISTANT_DIETLY_MATRIX_ROOM]\ncommands:\n  - expression: \"tv (?P<magnet>.*)\"\n    name: download_tv\n  - expression: \"movie (?P<magnet>.*)\"\n    name: download_movie\n  - expression: \"alexa (?P<message>.*)\"\n    name: alexa_say\n  - expression: \"yt (?P<message>.*)\"\n    name: download_yt_music\n\n"
  },
  {
    "path": "home-assistant/components/media_player.yaml",
    "content": "- platform: samsung_multi_room\n  host: 192.168.1.227\n  max_volume: 20\n\n- platform: emby\n  host: localhost\n  api_key: !env_var HOME_ASSISTANT_EMBY\n  port: 8096 \n"
  },
  {
    "path": "home-assistant/components/mqtt.yaml",
    "content": "broker: localhost\nport: 4105\nusername: !env_var HOME_ASSISTANT_MQTT_USER\npassword: !env_var HOME_ASSISTANT_MQTT_PASSWORD\nbirth_message:\n  topic: 'homeassistant/status'\n  payload: 'online'"
  },
  {
    "path": "home-assistant/components/notify.yaml",
    "content": "- platform: alexa_media\n  name: alexa_media\n\n# Push messages using gotify server https://gotify.net/docs/pushmsg\n- name: gotify\n  method: POST\n  platform: rest\n  resource: !env_var HOME_ASSISTANT_GOTIFY_ENDPOINT\n\n- name: lunching\n  method: POST\n  platform: rest\n  resource: !env_var HOME_ASSISTANT_GOTIFY_LUNCHING_ENDPOINT\n\n- name: ola\n  method: POST\n  platform: rest\n  resource: !env_var HOME_ASSISTANT_OLA_GOTIFY\n\n- name: all\n  platform: group\n  services:\n    - service: ola\n    - service: gotify\n    - service: tv\n\n- name: tortuga\n  platform: matrix\n  default_room: !env_var HOME_ASSISTANT_MATRIX_ROOM\n\n- name: twitter\n  platform: twitter\n  consumer_key: !env_var TWITTER_API_KEY\n  consumer_secret: !env_var TWITTER_CONSUMER_KEY\n  access_token: !env_var TWITTER_ACCESS_TOKEN\n  access_token_secret: !env_var TWITTER_ACCESS_TOKEN_SECRET\n"
  },
  {
    "path": "home-assistant/components/octoprint.yaml",
    "content": "host: 192.168.1.165\r\napi_key: !env_var OCTOPRINT_API_KEY"
  },
  {
    "path": "home-assistant/components/panel_custom.yaml",
    "content": "- name: vacuum_plan\n  sidebar_title: Vacuum Map\n  sidebar_icon: mdi:robot-vacuum\n  url_path: vacuum_plan\n  require_admin: true\n\n- name: zwavegraph2\n  sidebar_title: Z-Wave Graph\n  sidebar_icon: mdi:access-point-network\n  url_path: zwave\n"
  },
  {
    "path": "home-assistant/components/panel_iframe.yaml",
    "content": ""
  },
  {
    "path": "home-assistant/components/person.yaml",
    "content": "- name: Arek\n  id: arek\n  user_id: dee430bb89094c628fd84988492c87ed\n  device_trackers:\n    - device_tracker.sm_s10_arek\n    - device_tracker.arek\n\n- name: Ola\n  id: ola\n  user_id: 5818d1fef6d840769796caa99959610d\n  device_trackers:\n    - device_tracker.sm_g8_ola\n"
  },
  {
    "path": "home-assistant/components/recorder.yaml",
    "content": "db_url: !env_var HOME_ASSISTANT_DB_URL\npurge_interval: 1\npurge_keep_days: 31\nauto_purge: true\ncommit_interval: 60\n"
  },
  {
    "path": "home-assistant/components/rest_commands.yaml",
    "content": "# curl -i -X POST -H \"Content-Type: application/json\" -d '{ \"_type\": \"location\", \"lat\": 0.0,\"lon\": 0.0, \"topic\": \"location/test/s10\", \"tst\": 1234, \"acc\": 0.0, \"batt\": 0.0, \"t\": \"u\", \"c\": \"m\", \"m\": \"tracker id\" }' http://localhost:5500/api/publish\n\npush_to_orion:\n  url: http://localhost:5500/api/publish\n  method: POST\n  content_type:  'application/json; charset=utf-8'\n  payload: '{ \"_type\": \"location\", \"lat\": {{ lat }}, \"lon\": {{ lon }}, \"topic\": \"location/{{ user }}/{{ device }}\", \"tst\": {{ as_timestamp(utcnow()) }}, \"acc\": {{ accuracy }}, \"batt\": {{ battery }}, \"t\": \"u\", \"conn\": \"m\", \"tid\": \"{{ user[0] }}\" }'\n\n# curl -XPOST -H \"Content-type: application/json\" -d '{\"wake\": true, \"wakeTime\": 180}' 'http://192.168.1.237:2971/api/command'\n\nwake_nexus:\n  url: http://192.168.1.237:2971/api/command\n  method: POST\n  content_type: 'application/json; charset=utf-8'\n  payload: '{\"wake\": true, \"wakeTime\": 20}'\n\n"
  },
  {
    "path": "home-assistant/components/shell_command.yaml",
    "content": "turn_off_mac_mini: bash /config/scripts/switch_off_mac_mini.sh\n"
  },
  {
    "path": "home-assistant/components/speedtestdotnet.yaml",
    "content": "scan_interval:\n  minutes: 30\nmonitored_conditions:\n  - ping\n  - download\n  - upload"
  },
  {
    "path": "home-assistant/components/switch.yaml",
    "content": "- platform: template\n  switches:\n    living_room_heater:\n      value_template: \"{{ states.climate.living_room.attributes.temperature == 28 }}\"\n      turn_on:\n        service: climate.set_temperature\n        data:\n          entity_id: climate.living_room\n          temperature: 28\n      turn_off:\n        service: climate.set_temperature\n        data:\n          entity_id: climate.living_room\n          temperature: 7\n    bedroom_heater:\n      value_template: \"{{ states.climate.bedroom.attributes.temperature == 28 }}\"\n      turn_on:\n        service: climate.set_temperature\n        data:\n          entity_id: climate.bedroom\n          temperature: 28\n      turn_off:\n        service: climate.set_temperature\n        data:\n          entity_id: climate.bedroom\n          temperature: 7\n    kitchen_heater:\n      value_template: \"{{ states.climate.kitchen.attributes.temperature == 28 }}\"\n      turn_on:\n        service: climate.set_temperature\n        data:\n          entity_id: climate.kitchen\n          temperature: 28\n      turn_off:\n        service: climate.set_temperature\n        data:\n          entity_id: climate.kitchen\n          temperature: 7\n\n- platform: flux\n  lights:\n    - light.arek_szafka\n    - light.ola_szafka\n  brightness: 83\n  mode: mired\n  disable_brightness_adjust: true\n  start_colortemp: 3500\n  sunset_colortemp: 2800\n  stop_colortemp: 2200\n\n- platform: mqtt\n  name: Dispense Food\n  command_topic: \"home/kitchen/puss_feeder/dispense_food/set\"\n  state_topic: \"home/kitchen/puss_feeder/dispense_food\"\n\n- platform: template\n  switches:\n    giggid:\n      value_template: \"{{ is_state('input_boolean.giggid', 'on') }}\"\n      turn_on:\n        service: input_boolean.turn_on\n        data:\n          entity_id: input_boolean.giggid\n      turn_off:\n        service: input_boolean.turn_off\n        data:\n          entity_id: input_boolean.giggid\n    pizza:\n      value_template: \"{{ is_state('input_boolean.pizza', 'on') }}\"\n      turn_on:\n        service: input_boolean.turn_on\n        data:\n          entity_id: input_boolean.pizza\n      turn_off:\n        service: input_boolean.turn_off\n        data:\n          entity_id: input_boolean.pizza\n"
  },
  {
    "path": "home-assistant/components/telegram.yaml",
    "content": "- platform: polling\n  api_key: !env_var HOME_ASSISTANT_TELEGRAM_KEY\n  allowed_chat_ids:\n    - 66368059\n"
  },
  {
    "path": "home-assistant/components/themes/darkblue.yaml",
    "content": "---\n# Dark blue theme by JuanMTech\n#\n# https://www.juanmtech.com/themes-in-home-assistant/3/\n#\ndarkblue:\n  # Header:\n  app-header-background-color: \"#000000\"\n  app-header-text-color: \"#BDC1C6\"\n  # Main Interface Colors\n  primary-color: \"#5F9BEA\"\n  light-primary-color: var(--primary-color)\n  primary-background-color: \"#000000\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: var(--primary-background-color)\n  # Text\n  primary-text-color: \"#BDC1C6\"\n  secondary-text-color: \"#BDC1C6\"\n  text-primary-color: \"#FFFFFF\"\n  disabled-text-color: \"#717171\"\n  # Sidebar Menu\n  sidebar-icon-color: var(--app-header-text-color)\n  sidebar-text-color: '#BDC1C6'\n  sidebar-background-color: \"#0D0D0D\"\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: \"#5F9BEA\"\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color))\n  # States and Badges\n  state-icon-color: \"#ADB2B8\"\n  state-icon-active-color: \"#5F9BEA\"\n  state-icon-unavailable-color: var(--disabled-text-color)\n  # Sliders\n  paper-slider-knob-color: \"#5F9BEA\"\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-secondary-color: var(--light-primary-color)\n  # Labels\n  label-badge-background-color: \"#000000\"\n  label-badge-text-color: \"#BDC1C6\"\n  label-badge-red: \"#BE3A3E\"\n  label-badge-green: \"#5CB861\"\n  label-badge-blue: \"#44A4CD\"\n  label-badge-yellow: \"#D5AE43\"\n  label-badge-gray: \"#5F6267\"\n\n  # Cards\n  ha-card-border-radius: \"15px\"\n  paper-card-background-color: \"#000000\"\n  paper-listbox-background-color: \"#0D0D0D\"\n  # Switches\n  switch-checked-button-color: \"#5F9BEA\"\n  switch-checked-track-color: \"#404D64\"\n  switch-unchecked-button-color: \"#636466\"\n  switch-unchecked-track-color: \"#636466\"\n  # Toggles\n  paper-toggle-button-checked-button-color: var(--switch-checked-button-color)\n  paper-toggle-button-checked-bar-color: var(--switch-checked-track-color)\n  paper-toggle-button-unchecked-button-color: var(--switch-unchecked-button-color)\n  paper-toggle-button-unchecked-bar-color: var(--switch-unchecked-track-color)\n  # Table\n  table-row-background-color: var(--primary-background-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  data-table-background-color: var(--primary-background-color)"
  },
  {
    "path": "home-assistant/components/themes/google.yaml",
    "content": "Google - Light:\r\n  ### Fonts ###\r\n  primary-font-family: \"'Open Sans','Rubik',Roboto,sans-serif\"\r\n  paper-font-common-base_-_font-family: \"var(--primary-font-family)\"\r\n  paper-font-common-code_-_font-family: \"var(--primary-font-family)\"\r\n  paper-font-body_-_font-family: \"var(--primary-font-family)\"\r\n  paper-font-subhead_-_font-family: \"var(--primary-font-family)\"\r\n  paper-font-headline_-_font-family: \"var(--primary-font-family)\"\r\n  paper-font-caption_-_font-family: \"var(--primary-font-family)\"\r\n  paper-font-title_-_font-family: \"var(--primary-font-family)\"\r\n\r\n  ha-card-border-radius: \"0px\"\r\n  ha-card-header-color: \"#757575\"\r\n  ha-card-box-shadow: \"0px 0px 1px #eeeeee\"\r\n\r\n  ### Main Interface Colors ###\r\n  app-header-background-color: \"#ffffff\"\r\n  primary-color: \"#000000\"\r\n  light-primary-color: \"#c1c1c1\"\r\n  primary-background-color: \"#F7F9FB\"\r\n  secondary-background-color: \"#ffffff\"\r\n  divider-color: \"#e7e7e7\"\r\n  ### Text ###\r\n  primary-text-color: var(--primary-color)\r\n  secondary-text-color: \"#757575\"\r\n  text-primary-color: \"#061014\"\r\n  disabled-text-color: \"#a1a1a1\"\r\n  ### Sidebar Menu ###\r\n  sidebar-background-color: \"#ffffff\"\r\n  sidebar-icon-color: \"#757575\"\r\n  sidebar-text-color: \"#212121\"\r\n  sidebar-selected-background-color: var(--primary-background-color)\r\n  sidebar-selected-icon-color: \"#4284F4\"\r\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\r\n  ### States and Badges ###\r\n  state-icon-color: \"#606367\"\r\n  state-icon-active-color: \"#ffb750\"\r\n  state-icon-unavailable-color: var(--disabled-text-color)\r\n  ### Sliders ###\r\n  paper-slider-knob-color: \"#4284F4\"\r\n  paper-slider-knob-start-color: \"#8eb8ff\"\r\n  paper-slider-pin-color: \"#8eb8ff\"\r\n  paper-slider-active-color: \"#8eb8ff\"\r\n  paper-slider-secondary-color: var(--light-primary-color)\r\n  paper-slider-container-color: \"#e7e7e7\"\r\n  ### Labels ###\r\n  label-badge-background-color: \"#252B36\"\r\n  label-badge-text-color: \"#F1F1F1\"\r\n  label-badge-red: \"#6C7B9B\"\r\n  ### Cards ###\r\n  paper-card-background-color: \"#ffffff\"\r\n  paper-listbox-background-color: \"#ffffff\"\r\n  ### Toggles ###\r\n  paper-toggle-button-checked-button-color: \"#4284F4\"\r\n  paper-toggle-button-checked-bar-color: \"#4284F4\"\r\n  paper-toggle-button-unchecked-button-color: \"#4284F4\"\r\n  paper-toggle-button-unchecked-bar-color: \"#c1c1c1\"\r\n\r\n  ### Dialog ###\r\n  paper-dialog-background-color: \"#ffffff\"\r\n\r\n  ### Table row ###\r\n  table-row-background-color: var(--primary-background-color)\r\n  table-row-alternative-background-color: var(--secondary-background-color)\r\n\r\n  iron-overlay-backdrop-background-color: \"#ffffff\"\r\n  mdc-theme-primary: \"#4284F4\"\r\n\r\n  switch-checked-color: \"var(--paper-toggle-button-checked-button-color)\"\r\n  switch-unchecked-button-color: \"var(--paper-toggle-button-unchecked-button-color)\"\r\n  switch-unchecked-color: \"var(--paper-toggle-button-unchecked-bar-color)\"\r\n  switch-unchecked-track-color: \"var(--paper-toggle-button-unchecked-bar-color)\"\r\nGoogle - Dark:\r\n  ### Fonts ###\r\n  primary-font-family: \"'Open Sans','Rubik',Roboto,sans-serif\"\r\n  paper-font-common-base_-_font-family: \"var(--primary-font-family)\"\r\n  paper-font-common-code_-_font-family: \"var(--primary-font-family)\"\r\n  paper-font-body_-_font-family: \"var(--primary-font-family)\"\r\n  paper-font-subhead_-_font-family: \"var(--primary-font-family)\"\r\n  paper-font-headline_-_font-family: \"var(--primary-font-family)\"\r\n  paper-font-caption_-_font-family: \"var(--primary-font-family)\"\r\n  paper-font-title_-_font-family: \"var(--primary-font-family)\"\r\n\r\n  ha-card-border-radius: \"0px\"\r\n  ha-card-header-color: \"#d7d7d7\"\r\n  ha-card-box-shadow: \"0px 0px 1px #000000\"\r\n\r\n  ### Main Interface Colors ###\r\n  app-header-background-color: \"#000000\"\r\n  primary-color: \"#ffffff\"\r\n  light-primary-color: \"#2b2b2b\"\r\n  primary-background-color: \"#000000\"\r\n  secondary-background-color: \"#2b2b2b\"\r\n  divider-color: \"#2b2b2b\"\r\n  ### Text ###\r\n  primary-text-color: var(--primary-color)\r\n  secondary-text-color: \"#d7d7d7\"\r\n  text-primary-color: \"#ffffff\"\r\n  disabled-text-color: \"#a1a1a1\"\r\n  ### Sidebar Menu ###\r\n  sidebar-background-color: \"#000000\"\r\n  sidebar-icon-color: \"#ffffff\"\r\n  sidebar-text-color: \"#ffffff\"\r\n  sidebar-selected-background-color: var(--primary-background-color)\r\n  sidebar-selected-icon-color: \"#4284F4\"\r\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\r\n  ### States and Badges ### \r\n  state-icon-color: \"#ffffff\"\r\n  state-icon-active-color: \"#ffb750\"\r\n  state-icon-unavailable-color: var(--disabled-text-color)\r\n  ### Sliders ###\r\n  paper-slider-knob-color: \"#4284F4\"\r\n  paper-slider-knob-start-color: \"#8eb8ff\"\r\n  paper-slider-pin-color: \"#8eb8ff\"\r\n  paper-slider-active-color: \"#8eb8ff\"\r\n  paper-slider-secondary-color: var(--light-primary-color)\r\n  paper-slider-container-color: \"#a1a1a1\"\r\n  ### Labels ###\r\n  label-badge-background-color: \"#252B36\"\r\n  label-badge-text-color: \"#F1F1F1\"\r\n  label-badge-red: \"#6C7B9B\"\r\n  ### Cards ###\r\n  paper-card-background-color: \"#2b2b2b\"\r\n  paper-listbox-background-color: \"#000000\"\r\n  ### Toggles ###\r\n  paper-toggle-button-checked-button-color: \"#4284F4\"\r\n  paper-toggle-button-checked-bar-color: \"#4284F4\"\r\n  paper-toggle-button-unchecked-button-color: \"#4284F4\"\r\n  paper-toggle-button-unchecked-bar-color: \"#c1c1c1\"\r\n\r\n  ### Dialog ###\r\n  paper-dialog-background-color: \"#2b2b2b\"\r\n\r\n  ### Table row ###\r\n  table-row-background-color: var(--primary-background-color)\r\n  table-row-alternative-background-color: var(--secondary-background-color)\r\n\r\n  iron-overlay-backdrop-background-color: \"#000000\"\r\n  mdc-theme-primary: \"#4284F4\"\r\n\r\n  switch-checked-color: \"var(--paper-toggle-button-checked-button-color)\"\r\n  switch-unchecked-button-color: \"var(--paper-toggle-button-unchecked-button-color)\"\r\n  switch-unchecked-color: \"var(--paper-toggle-button-unchecked-bar-color)\"\r\n  switch-unchecked-track-color: \"var(--paper-toggle-button-unchecked-bar-color)\"\r\n"
  },
  {
    "path": "home-assistant/components/torrent.yaml",
    "content": "- platform: deluge\n  host: localhost\n  name: torrent\n  username: admin\n  password: !env_var HOME_ASSISTANT_DELUGE_PASSWORD\n  monitored_variables:\n    - 'current_status'\n    - 'download_speed'\n    - 'upload_speed'\n"
  },
  {
    "path": "home-assistant/components/utility_meter.yaml",
    "content": "home_hourly_energy:\n  source: sensor.energy_spent\n  name: Home Hourly Energy\n  cycle: hourly\nhome_daily_energy:\n  source: sensor.energy_spent\n  name: Home Daily Energy\n  cycle: daily\nhome_monthly_energy:\n  source: sensor.energy_spent\n  name: Home Monthly Energy\n  cycle: monthly\nhome_yearly_energy:\n  source: sensor.energy_spent\n  name: Home Yearly Energy\n  cycle: yearly\n"
  },
  {
    "path": "home-assistant/components/vacuum.yaml",
    "content": ""
  },
  {
    "path": "home-assistant/components/weather.yaml",
    "content": "- platform: darksky\n  api_key: !env_var HOME_ASSISTANT_DARKSKY_API_KEY\n  mode: hourly"
  },
  {
    "path": "home-assistant/components/webostv.yaml",
    "content": "name: tv\r\nhost: 192.168.1.141\r\nturn_on_action:\r\n  service: wake_on_lan.send_magic_packet\r\n  data:\r\n    mac: 78:5D:C8:98:B4:71\r\n"
  },
  {
    "path": "home-assistant/components/zones.yaml.example",
    "content": "- name: home\n  latitude: 0\n  longitude: 0\n  radius: 80\n  icon: mdi:home\n\n- name: codesthq\n  latitude: 0\n  longitude: 0\n  radius: 100\n  icon: mdi:worker\n\n- name: netguru\n  latitude: 0\n  longitude: 0\n  radius: 100\n  icon: mdi:worker\n\n- name: Port COM\n  latitude: 50.0612024\n  longitude: 19.9297733\n  radius: 100\n  icon: mdi:beer"
  },
  {
    "path": "home-assistant/components/zwave.yaml",
    "content": "usb_path: /dev/ttyACM0\nnetwork_key: !env_var HOME_ASSISTANT_ZWAVE_KEY\ndebug: false\nautoheal: true"
  },
  {
    "path": "home-assistant/configuration.yaml",
    "content": "# A\napi:\nalexa: !include components/alexa.yaml\nautomation: !include_dir_merge_list automations/\n# B\nbinary_sensor: !include components/binary_sensor.yaml\n# C\ncalendar: !include components/calendar.yaml\ncamera: !include components/camera.yaml\nconfig:\ncover: !include components/cover.yaml\nclimate: !include components/climate.yaml\n# D\ndiscovery:\n# E\nenergy:\n# F\nfan: !include components/fan.yaml\nffmpeg:\n# G\ngroup: !include groups.yaml\n# H\nhomeassistant: !include components/homeassistant.yaml\nhttp: !include components/http.yaml\nhistory:\nhue: !include components/hue.yaml\n# I\n# influxdb: !include components/influxdb.yaml\nifttt:\n  key: !env_var HOME_ASSISTANT_IFTTT\ninput_number: !include components/input_number.yaml\n# image_processing: !include components/image_processing.yaml\ninput_boolean: !include components/input_boolean.yaml\ninput_select: !include components/input_select.yaml\n# J\nfrontend: !include components/frontend.yaml\n# K\npanel_iframe: !include components/panel_iframe.yaml\n# L\nlife360: !include components/life360.yaml\nlight: !include components/light.yaml\nlogbook: !include components/logbook.yaml\nlogger: !include components/logger.yaml\nlovelace:\n  mode: yaml\n# M\nmy:\nmqtt: !include components/mqtt.yaml\nmatrix: !include components/matrix.yaml\nmap:\nmobile_app:\nmedia_player: !include components/media_player.yaml\nmedia_source:\n# N\nrecorder: !include components/recorder.yaml\nnotify: !include components/notify.yaml\n# O\n#octoprint: !include components/octoprint.yaml\n# P\npanel_custom: !include components/panel_custom.yaml\nperson: !include components/person.yaml\n# R\nrest_command: !include components/rest_commands.yaml\n# S\nstream:\nsun:\nsystem_health:\nshell_command: !include components/shell_command.yaml\nscript: !include_dir_merge_named scripts/\nspeedtestdotnet: !include components/speedtestdotnet.yaml\nswitch: !include components/switch.yaml\nsensor: !include_dir_merge_list sensors/\nscene: !include_dir_merge_list scenes/\n# T\ntts:\n  - platform: google_translate\n    service_name: google_say\ntelegram_bot: !include components/telegram.yaml\n# U\nutility_meter: !include components/utility_meter.yaml\n# W\nwake_on_lan:\nweather: !include components/weather.yaml\nwebostv: !include components/webostv.yaml\nwebsocket_api:\n# X\n# Y\n# Z\nzeroconf:\nzone: !include components/zones.yaml\n# V\nvacuum: !include components/vacuum.yaml\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/.translations/ar.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"The Forgot Password page was detected. This normally is the result of too may failed logins. Amazon may require action before a relogin can be attempted.\",\n      \"login_failed\": \"Alexa Media Player failed to login.\",\n      \"reauth_successful\": \"Alexa Media Player successfully reauthenticated.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Invalid Built-In 2FA key\",\n      \"connection_error\": \"Error connecting; check network and retry\",\n      \"hass_url_invalid\": \"Unable to connect to Home Assistant url. Please check the External Url under Configuration -> General\",\n      \"identifier_exists\": \"Email for Alexa URL already registered\",\n      \"invalid_credentials\": \"Invalid credentials\",\n      \"unknown_error\": \"Unknown error, please enable advanced debugging and report log info\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP from the Built-in 2FA App Key confirmed successfully.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nHave you successfully confirmed an OTP from the Built-in 2FA App Key with Amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Advanced debugging\",\n          \"email\": \"Email Address\",\n          \"exclude_devices\": \"Excluded device (comma separated)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"include_devices\": \"Included device (comma separated)\",\n          \"otp_secret\": \"Built-in 2FA App Key (automatically generate 2FA Codes)\",\n          \"password\": \"Password\",\n          \"scan_interval\": \"Seconds between scans\",\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\",\n          \"url\": \"Amazon region domain (e.g., amazon.co.uk)\"\n        },\n        \"description\": \"Please confirm the information below.\",\n        \"title\": \"Alexa Media Player - Configuration\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Include devices connected via Echo\",\n          \"queue_delay\": \"Seconds to wait to queue commands together\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/.translations/de.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"Die \\\"Passwort vergessen Funktion\\\" wurde erkannt. Amazon verlangt möglicherweise Maßnahmen bevor ein erneuter Anmeldeversuch unternommen werden kann.\",\n      \"login_failed\": \"Alexa Media Player konnte nicht angemeldet werden.\",\n      \"reauth_successful\": \"Alexa Media Player erfolgreich authentifiziert\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Invalid Built-In 2FA key\",\n      \"connection_error\": \"Verbindungsfehler; Netzwerk prüfen und erneut versuchen\",\n      \"hass_url_invalid\": \"Es kann keine Verbindung zur Home Assistant-URL hergestellt werden. Bitte überprüfen Sie die externe URL unter Konfiguration - > Allgemein\",\n      \"identifier_exists\": \"Diese Email ist bereits registriert\",\n      \"invalid_credentials\": \"Falsche Zugangsdaten\",\n      \"unknown_error\": \"Unbekannter Fehler, bitte Log-Info melden\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"2FA Code (empfohlen, um Anmeldeprobleme zu vermeiden)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP from the Built-in 2FA App Key confirmed successfully.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nHave you successfully confirmed an OTP from the Built-in 2FA App Key with Amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Erweitertes debugging\",\n          \"email\": \"Email Adresse\",\n          \"exclude_devices\": \"Ausgeschlossene Geräte (komma getrennnt)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"include_devices\": \"Eingebundene Geräte (komma getrennnt)\",\n          \"otp_secret\": \"Built-in 2FA App Key (automatically generate 2FA Codes)\",\n          \"password\": \"Passwort\",\n          \"scan_interval\": \"Sekunden zwischen den Scans\",\n          \"securitycode\": \"2FA Code (empfohlen, um Anmeldeprobleme zu vermeiden)\",\n          \"url\": \"Amazon Region (z.B., amazon.de)\"\n        },\n        \"description\": \"Bitte geben Sie ihre Informationen ein.\",\n        \"title\": \"Alexa Media Player - Konfiguration\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Schließen Sie Geräte ein, die über Echo verbunden sind\",\n          \"queue_delay\": \"Sekunden zu warten, um Befehle in die Warteschlange zu stellen\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/.translations/en.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"The Forgot Password page was detected. This normally is the result of too may failed logins. Amazon may require action before a relogin can be attempted.\",\n      \"login_failed\": \"Alexa Media Player failed to login.\",\n      \"reauth_successful\": \"Alexa Media Player successfully reauthenticated.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Invalid Built-In 2FA key\",\n      \"connection_error\": \"Error connecting; check network and retry\",\n      \"hass_url_invalid\": \"Unable to connect to Home Assistant url. Please check the External Url under Configuration -> General\",\n      \"identifier_exists\": \"Email for Alexa URL already registered\",\n      \"invalid_credentials\": \"Invalid credentials\",\n      \"unknown_error\": \"Unknown error, please enable advanced debugging and report log info\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP from the Built-in 2FA App Key confirmed successfully.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nHave you successfully confirmed an OTP from the Built-in 2FA App Key with Amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Advanced debugging\",\n          \"email\": \"Email Address\",\n          \"exclude_devices\": \"Excluded device (comma separated)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"include_devices\": \"Included device (comma separated)\",\n          \"otp_secret\": \"Built-in 2FA App Key (automatically generate 2FA Codes)\",\n          \"password\": \"Password\",\n          \"scan_interval\": \"Seconds between scans\",\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\",\n          \"url\": \"Amazon region domain (e.g., amazon.co.uk)\"\n        },\n        \"description\": \"Please confirm the information below.\",\n        \"title\": \"Alexa Media Player - Configuration\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Include devices connected via Echo\",\n          \"queue_delay\": \"Seconds to wait to queue commands together\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/.translations/es.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"Se ha detectado la página de \\\"Ha olvidado su contraseña\\\". Normalmente esto ocurre si has intentado iniciar sesión varias veces de forma fallida. Amazon puede que te pida alguna acción adicional antes de poder volver a intentar iniciar sesión.\",\n      \"login_failed\": \"Alexa Media Player no pudo iniciar sesión.\",\n      \"reauth_successful\": \"Alexa Media Player se ha reautentificado correctamente.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Invalid Built-In 2FA key\",\n      \"connection_error\": \"Error al conectar, verifique la red y vuelva a intentarlo\",\n      \"hass_url_invalid\": \"No se puede conectar a la url de Home Assistant. Compruebe la dirección URL externa en Configuración -> General\",\n      \"identifier_exists\": \"Correo electrónico para la URL de Alexa ya registrado\",\n      \"invalid_credentials\": \"Credenciales no válidas\",\n      \"unknown_error\": \"Error desconocido, habilite la depuración avanzada e informe la información de registro\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de inicio de sesión)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP from the Built-in 2FA App Key confirmed successfully.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nHave you successfully confirmed an OTP from the Built-in 2FA App Key with Amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Depuración avanzada\",\n          \"email\": \"Dirección de correo electrónico\",\n          \"exclude_devices\": \"Dispositivo excluido (separado por comas)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"include_devices\": \"Dispositivo incluido (separado por comas)\",\n          \"otp_secret\": \"Built-in 2FA App Key (automatically generate 2FA Codes)\",\n          \"password\": \"Contraseña\",\n          \"scan_interval\": \"Segundos entre escaneos\",\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de inicio de sesión)\",\n          \"url\": \"Región del dominio de Amazon (por ejemplo, amazon.es)\"\n        },\n        \"description\": \"Confirme la siguiente información.\",\n        \"title\": \"Alexa Media Player - Configuración\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Incluir dispositivos conectados a través de Echo\",\n          \"queue_delay\": \"Segundos a esperar para agrupar comandos\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/.translations/fr.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"La page Mot de passe oublié a été détectée. Amazon peut nécessiter une action avant qu'une reconnexion puisse être tentée.\",\n      \"login_failed\": \"Alexa Media Player n'a pas réussi à se connecter.\",\n      \"reauth_successful\": \"Alexa Media Player s'est authentifié avec succès.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Clé 2FA intégrée non valide\",\n      \"connection_error\": \"Erreur de connexion; vérifier le réseau et réessayer\",\n      \"hass_url_invalid\": \"Impossible de se connecter à l'URL de Home Assistant. Veuillez vérifier l'URL externe sous Configuration - > Général\",\n      \"identifier_exists\": \"Email pour l'URL Alexa déjà enregistré\",\n      \"invalid_credentials\": \"Informations d'identification invalides\",\n      \"unknown_error\": \"Erreur inconnue, veuillez signaler les informations du journal\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"Code 2FA (recommandé pour éviter les problèmes de connexion)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP de la clé d'application 2FA intégrée confirmée avec succès.\"\n        },\n        \"description\": \"** {email} - alexa. {url} **\\n Avez-vous confirmé avec succès un OTP à partir de la clé d'application 2FA intégrée avec Amazon?\\n > Code OTP {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Débogage avancé\",\n          \"email\": \"Adresse Email\",\n          \"exclude_devices\": \"Appareil exclu (séparé par des virgules)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"include_devices\": \"Appareil inclus (séparé par des virgules)\",\n          \"otp_secret\": \"Clé d'application 2FA intégrée (génère automatiquement des codes 2FA)\",\n          \"password\": \"Mot de passe\",\n          \"scan_interval\": \"Secondes entre les analyses\",\n          \"securitycode\": \"Code 2FA (recommandé pour éviter les problèmes de connexion)\",\n          \"url\": \"Domaine de la région Amazon (exemple, amazon.fr)\"\n        },\n        \"description\": \"Veuillez confirmer les informations ci-dessous.\",\n        \"title\": \"Alexa Media Player - Configuration\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Inclure les appareils connectés via Echo\",\n          \"queue_delay\": \"Secondes à attendre pour mettre les commandes en file d'attente ensemble\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/.translations/it.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"È stata rilevata la pagina di password dimenticata. Normalmente questo è il risultato di troppi accessi falliti. Amazon potrebbe richiedere di eseguire alcune azioni prima di poter tentare un nuovo accesso.\",\n      \"login_failed\": \"Alexa Media Player ha fallito il login.\",\n      \"reauth_successful\": \"Alexa Media Player è stato riautenticato con successo.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Chiave 2FA incorporata non valida\",\n      \"connection_error\": \"Errore durante la connessione; controlla la rete e riprova\",\n      \"hass_url_invalid\": \"Impossibile collegarsi all'URL di Home Assistant. Controllare l'URL esterno nel menu Configurazione -> Generale\",\n      \"identifier_exists\": \"L'email per l'URL di Alexa è già stata registrata\",\n      \"invalid_credentials\": \"Credenziali non valide\",\n      \"unknown_error\": \"Errore sconosciuto, si prega di abilitare il debug avanzato e riportare i log informativi\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"Codice 2FA (raccomandato per evitare problemi di login)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"Password usa e getta (OTP) dalla chiave dell'applicazione 2FA integrata confermata con successo.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**\\nHai confermato con successo una chiave usa e getta (OTP) dall'applicazione 2FA integrata con Amazon?\\n>Codice OTP {message}\",\n        \"title\": \"Alexa Media Player - Conferma OTP\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Debug avanzato\",\n          \"email\": \"Indirizzo email\",\n          \"exclude_devices\": \"Dispositivi da escludere (separati da virgola)\",\n          \"hass_url\": \"URL per accedere a Home Assistant\",\n          \"include_devices\": \"Dispositivi da includere (separati da virgola)\",\n          \"otp_secret\": \"Chiave dell'app 2FA integrata (generazione automatica di codici 2FA)\",\n          \"password\": \"Password\",\n          \"scan_interval\": \"Tempo in secondi fra le scansioni\",\n          \"securitycode\": \"Codice 2FA (raccomandato per evitare problemi di login)\",\n          \"url\": \"Regione del dominio Amazon (ad es., amazon.it)\"\n        },\n        \"description\": \"Confermare le informazioni sottostanti.\",\n        \"title\": \"Alexa Media Player - Configurazione\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Includi i dispositivi collegati tramite Echo\",\n          \"queue_delay\": \"Secondi di attesa per accodare i comandi insieme\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/.translations/nb.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"Siden Glemt passord ble oppdaget. Dette er vanligvis et resultat av også mislykkede pålogginger. Amazon kan kreve handling før en pålogging kan forsøkes.\",\n      \"login_failed\": \"Alexa Media Player kunne ikke logge inn.\",\n      \"reauth_successful\": \"Alexa Media Player er godkjent på nytt.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Invalid Built-In 2FA key\",\n      \"connection_error\": \"Feil ved tilkobling; sjekk nettverket og prøv på nytt\",\n      \"hass_url_invalid\": \"Kan ikke koble til nettadressen til hjemmeassistenten. Vennligst sjekk den eksterne nettadressen under Konfigurasjon - > Generelt\",\n      \"identifier_exists\": \"E-post for Alexa URL allerede registrert\",\n      \"invalid_credentials\": \"ugyldige legitimasjon\",\n      \"unknown_error\": \"Ukjent feil, vennligst rapporter logginfo\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"2FA-kode (anbefales for å unngå påloggingsproblemer)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP from the Built-in 2FA App Key confirmed successfully.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nHave you successfully confirmed an OTP from the Built-in 2FA App Key with Amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Avansert feilsøking\",\n          \"email\": \"Epostadresse\",\n          \"exclude_devices\": \"Ekskludert enhet (kommaseparert)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"include_devices\": \"Inkluder enhet (kommaseparert)\",\n          \"otp_secret\": \"Built-in 2FA App Key (automatically generate 2FA Codes)\",\n          \"password\": \"Passord\",\n          \"scan_interval\": \"Sekunder mellom skanninger\",\n          \"securitycode\": \"2FA-kode (anbefales for å unngå påloggingsproblemer)\",\n          \"url\": \"Amazon-regiondomenet (f.eks. Amazon.co.uk)\"\n        },\n        \"description\": \"Bekreft informasjonen nedenfor.\",\n        \"title\": \"Alexa Media Player - Konfigurasjon\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Inkluder enheter som er koblet til via Echo\",\n          \"queue_delay\": \"Sekunder for å vente på køkommandoer sammen\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/.translations/nl.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"The Forgot Password page was detected. This normally is the result of too may failed logins. Amazon may require action before a relogin can be attempted.\",\n      \"login_failed\": \"Alexa Media Player failed to login.\",\n      \"reauth_successful\": \"Alexa Media Player successfully reauthenticated.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Invalid Built-In 2FA key\",\n      \"connection_error\": \"Fout bij verbinden; controleer netwerk en probeer opnieuw\",\n      \"hass_url_invalid\": \"Kan geen verbinding maken met de Home Assistant-URL. Controleer de externe URL onder Configuratie - > Algemeen\",\n      \"identifier_exists\": \"Dit e-mailadres is reeds geregistreerd\",\n      \"invalid_credentials\": \"Ongeldige inloggegevens\",\n      \"unknown_error\": \"Onbekende fout, meld de loggegevens\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"config::step::captcha::data::securitycode\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP from the Built-in 2FA App Key confirmed successfully.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nHave you successfully confirmed an OTP from the Built-in 2FA App Key with Amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Geavanceerd debuggen\",\n          \"email\": \"E-mailadres\",\n          \"exclude_devices\": \"Apparaten uitsluiten (Scheiding: komma)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"include_devices\": \"Apparaten toevoegen (Scheiding: komma)\",\n          \"otp_secret\": \"Built-in 2FA App Key (automatically generate 2FA Codes)\",\n          \"password\": \"Paswoord\",\n          \"scan_interval\": \"Aantal seconden tussen scans\",\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\",\n          \"url\": \"Domeinnaam van Amazon regio (bv.amazon.co.uk)\"\n        },\n        \"description\": \"Vul je gegevens in a.u.b.\",\n        \"title\": \"Alexa Media Player - Configuratie\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Inclusief apparaten die zijn verbonden via Echo\",\n          \"queue_delay\": \"Seconden om te wachten om opdrachten in de wachtrij te plaatsen\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/.translations/pl.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"Wykryto stronę Zapomniałem hasła. Zwykle jest to wynikiem również nieudanych prób logowania. Amazon może wymagać podjęcia działań przed próbą ponownego logowania.\",\n      \"login_failed\": \"Alexa Media Player nie może się zalogować.\",\n      \"reauth_successful\": \"Alexa Media Player pomyślnie uwierzytelniona.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Nieprawidłowy klucz z wbudowanej aplikacji uwierzytelniania dwuskładnikowego\",\n      \"connection_error\": \"Błąd podczas łączenia; sprawdź sieć i spróbuj ponownie\",\n      \"hass_url_invalid\": \"Nie można połączyć się z adresem URL Home Assistanta. Sprawdź publiczny adres URL w sekcji Konfiguracja -> Ogólne\",\n      \"identifier_exists\": \"Adres e-mail dla Alexy już jest zarejestrowany\",\n      \"invalid_credentials\": \"Nieprawidłowe dane logowania\",\n      \"unknown_error\": \"Nieznany błąd, włącz zaawansowane debugowanie i zgłoś log z tego zdarzenia\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"Kod uwierzytelniania dwuskładnikowego\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"Hasło jednorazowe z wbudowanej aplikacji uwierzytelniania dwuskładnikowego potwierdzone pomyślnie.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nCzy pomyślnie potwierdziłeś hasło jednorazowe z wbudowanej aplikacji uwierzytelniania dwuskładnikowego z Amazonu? \\n >Kod hasła jednorazowego {message}\",\n        \"title\": \"Alexa Media Player - Potwierdzanie hasła jednorazowego\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Zaawansowane debugowanie\",\n          \"email\": \"Adres email\",\n          \"exclude_devices\": \"Wykluczone urządzenia (oddzielone przecinkami)\",\n          \"hass_url\": \"URL dostępu do Home Assistanta\",\n          \"include_devices\": \"Dodawane urządzenia (oddzielone przecinkami)\",\n          \"otp_secret\": \"Wbudowana aplikacja kluczy uwierzytelniania dwuskładnikowego (automatycznie generuje kody uwierzytelniania dwuskładnikowego)\",\n          \"password\": \"Hasło\",\n          \"scan_interval\": \"Interwał skanowania (sekundy)\",\n          \"securitycode\": \"Kod uwierzytelniania dwuskładnikowego (zalecany w celu uniknięcia problemów z logowaniem)\",\n          \"url\": \"Region/domena Amazon (np. amazon.co.uk)\"\n        },\n        \"description\": \"Potwierdź poniższe informacje.\",\n        \"title\": \"Alexa Media Player — konfiguracja\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Uwzględnij urządzenia podłączone przez Echo\",\n          \"queue_delay\": \"Sekundy oczekiwania na kolejkowanie poleceń\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/.translations/pt-BR.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"A página Esqueci minha senha foi detectada. Isso normalmente é o resultado de muitos logins com falha. A Amazon pode exigir uma ação antes que um novo login possa ser tentado.\",\n      \"login_failed\": \"Alexa Media Player falhou no login.\",\n      \"reauth_successful\": \"O Alexa Media Player foi reautenticado com sucesso.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Chave integrada 2FA inválida\",\n      \"connection_error\": \"Erro de conexão; verifique a sua conexão e tente novamente\",\n      \"hass_url_invalid\": \"Não foi possível conectar ao URL do Home Assistant. Por favor, verifique o URL Externo em Configuração - > Geral\",\n      \"identifier_exists\": \"E-mail para URL Alexa já registrado\",\n      \"invalid_credentials\": \"Credenciais inválidas\",\n      \"unknown_error\": \"Erro desconhecido, favor habilitar depuração avançada e informações de registro de relatório\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP da chave de aplicativo 2FA integrada confirmada com sucesso.\"\n        },\n        \"description\": \"** {email} - alexa. {url} **\\n Você confirmou com sucesso um OTP da chave de aplicativo 2FA integrada com a Amazon?\\n > Código OTP {message}\",\n        \"title\": \"Alexa Media Player - Confirmação OTP\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Depuração avançada\",\n          \"email\": \"Endereço de e-mail\",\n          \"exclude_devices\": \"Dispositivos excluídos (separado por vírgula)\",\n          \"hass_url\": \"Url para acesso ao Home Assistant\",\n          \"include_devices\": \"Dispositivos incluídos (separado por vírgula)\",\n          \"otp_secret\": \"Chave de aplicativo 2FA integrada (gerar automaticamente códigos 2FA)\",\n          \"password\": \"Senha\",\n          \"scan_interval\": \"Segundos entre varreduras\",\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\",\n          \"url\": \"Domínio regional da Amazon (ex: amazon.co.uk)\"\n        },\n        \"description\": \"Por favor, confirme as informações abaixo.\",\n        \"title\": \"Alexa Media Player - Configurações\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Incluir dispositivos conectados via Echo\",\n          \"queue_delay\": \"Segundos para aguardar os comandos de fila juntos\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/.translations/pt.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"A página 'Esqueci a senha' foi detectada. Normalmente, isso é o resultado de logins que falharam. A Amazon pode exigir uma ação antes que um relogin possa ser tentado.\",\n      \"login_failed\": \"Alexa Media Player não conseguiu fazer o login.\",\n      \"reauth_successful\": \"Alexa Media Player reautenticada com sucesso.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Chave 2FA integrada inválida\",\n      \"connection_error\": \"Erro ao conectar; verifique a rede e tente novamente\",\n      \"hass_url_invalid\": \"Não foi possível conectar ao URL do Home Assistant. Verifique o URL externo em Configuração - > Geral\",\n      \"identifier_exists\": \"E-mail para URL Alexa já registado\",\n      \"invalid_credentials\": \"Credenciais inválidas\",\n      \"unknown_error\": \"Erro desconhecido, por favor habilite depuração avançada e informações de log de relatório\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"Senha de uso único do aplicativo 2FA integrado confirmado com sucesso.\"\n        },\n        \"description\": \"** {email} - alexa. {url} **\\n Você confirmou com sucesso uma senha de uso único na aplicação 2FA integrada com a Amazon?\\n > Código OTP {message}\",\n        \"title\": \"Alexa Media Player - Confirmação OTP\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Depuração avançada\",\n          \"email\": \"Endereço de e-mail\",\n          \"exclude_devices\": \"Dispositivo excluído (separado por vírgula)\",\n          \"hass_url\": \"URL para aceder o Home Assistant\",\n          \"include_devices\": \"Dispositivo incluído (separado por vírgula)\",\n          \"otp_secret\": \"Chave de aplicativo 2FA integrada (gerar códigos 2FA automaticamente)\",\n          \"password\": \"Senha\",\n          \"scan_interval\": \"Segundos entre análises\",\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\",\n          \"url\": \"Região do domínio Amazon (ex. amazon.com.br)\"\n        },\n        \"description\": \"Por favor, confirme as informações abaixo.\",\n        \"title\": \"Alexa Media Player - Configuração\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Inclui dispositivos conectados via Echo\",\n          \"queue_delay\": \"Segundos de espera para agrupar comandos\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/.translations/pt_BR.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"A página para senha esquecida foi detectada. Isto normalmente é o resultado de muitas tentativas de login falhas. A amazon pode requisitar ação antes de um novo login ser tentando.\",\n      \"login_failed\": \"Alexa Media Player falhou no login.\",\n      \"reauth_successful\": \"Alexa Media Player re-autenticado com sucesso.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Chave integrada 2FA inválida\",\n      \"connection_error\": \"Erro de conexão; Verifique a sua conexão e tente novamente\",\n      \"hass_url_invalid\": \"Não foi possível conectar a URL do Home Assistant. Por favor verifique a URL externa em Configuração -> Geral\",\n      \"identifier_exists\": \"Email para URL Alexa já registrado\",\n      \"invalid_credentials\": \"Credenciais inválidas\",\n      \"unknown_error\": \"Erro desconhecido, favor habilitar a depuração avançada e reporte as informações de registro\"\n    },\n    \"step\": {\n      \"action_required\": {\n        \"data\": {\n          \"proxy\": \"Usar método Login Proxy (Não requer 2FA)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nA amazon enviará uma notificação push para a mensagem abaixo. Por favor responda ela completamente antes de continuar.  \\n{message}\",\n        \"title\": \"Alexa Media Player - Ação Requisitada\"\n      },\n      \"authselect\": {\n        \"data\": {\n          \"authselectoption\": \"Método OTP\",\n          \"proxy\": \"Usar método Login Proxy (Não requer 2FA)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**\\n{message}\",\n        \"title\": \"Alexa Media Player - Senha de uso único\"\n      },\n      \"captcha\": {\n        \"data\": {\n          \"captcha\": \"Captcha\",\n          \"password\": \"Senha\",\n          \"proxy\": \"Usar método Login Proxy (Não requer 2FA)\",\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\n{message}  \\n {captcha_image}\",\n        \"title\": \"Alexa Media Player - Captcha\"\n      },\n      \"claimspicker\": {\n        \"data\": {\n          \"authselectoption\": \"Método de verificação\",\n          \"proxy\": \"Usar método Login Proxy (Não requer 2FA)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nPor favor selecione um método de verificação por número. (ex: `0` ou `1`)  \\n{message}\",\n        \"title\": \"Alexa Media Player - Método de verificação\"\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP do aplicativo integrado de chave 2FA confirmado com sucesso.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nVocê confirmou com sucesso um OTP no aplicativo integrado de chave 2FA com a amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - Confirmação OTP\"\n      },\n      \"twofactor\": {\n        \"data\": {\n          \"proxy\": \"Usar método Login Proxy (Não requer 2FA)\",\n          \"securitycode\": \"Código 2FA\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nInsira a senha de uso único (OTP).\\n{message}\",\n        \"title\": \"Alexa Media Player - Autenticação de dois fatores\"\n      },\n      \"user\": {\n        \"data\": {\n          \"cookies_txt\": \"Dados de cookies.txt\",\n          \"debug\": \"Depuração avançada\",\n          \"email\": \"Endereço de email\",\n          \"exclude_devices\": \"Dispositivos exclusos (separados por virgula)\",\n          \"hass_url\": \"Url para acesso ao Home Assistant\",\n          \"include_devices\": \"Dispositivos inclusos (separados por vírgula)\",\n          \"oauth_login\": \"Habilitar o aplicativo para método auth-token\",\n          \"otp_secret\": \"Aplicativo integrado para chaves 2FA (Automaticamente gera códigos 2FA)\",\n          \"password\": \"Senha\",\n          \"proxy\": \"Usar método Login Proxy (Não requer 2FA)\",\n          \"scan_interval\": \"Segundos entre varreduras\",\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\",\n          \"url\": \"Domínio regional da amazon (ex: amazon.co.uk)\"\n        },\n        \"description\": \"Por favor, confirme as informações abaixo. Para configuração legada, desative a opção `Usar método de proxy de login'.\",\n        \"title\": \"Alexa Media Player - Configurações\"\n      },\n      \"user_legacy\": {\n        \"data\": {\n          \"cookies_txt\": \"Cookies.txt data\",\n          \"debug\": \"Depuração avançada\",\n          \"email\": \"Endereço de email\",\n          \"exclude_devices\": \"Dispositivos exclusos (separados por virgula)\",\n          \"include_devices\": \"Dispositivos inclusos (separados por vírgula)\",\n          \"oauth_login\": \"Habilitar o aplicativo para método auth-token\",\n          \"otp_secret\": \"Aplicativo integrado para chaves 2FA (Automaticamente gera códigos 2FA)\",\n          \"password\": \"Senha\",\n          \"proxy\": \"Usar método Login Proxy (Não requer 2FA)\",\n          \"scan_interval\": \"Segundos entre varreduras\",\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\",\n          \"url\": \"Domínio regional da amazon (ex: amazon.co.uk)\"\n        },\n        \"description\": \"Por favor insira sua [informação](https://github.com/custom-components/alexa_media_player/wiki/Configuration#integrations-page). **[Cookie import](https://github.com/custom-components/alexa_media_player/wiki/Configuration#cookie-import) pode ser mais fácil!**   \\n**AVISO! A amazon reporta incorretamente 'Insira um email ou número de telefone válido' quando [Código de 2FA é requirido](https://github.com/custom-components/alexa_media_player/wiki/Configuration#enable-two-factor-authentication-for-your-amazon-account).**  \\n>{message}\",\n        \"title\": \"Alexa Media Player - Configurações legado\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Inclui dispositivos conectados via Echo\",\n          \"queue_delay\": \"Segundos para aguardar antes de enfileirar juntos\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/.translations/pt_PT.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"A página 'Esqueci a senha' foi detectada. Normalmente, isso é o resultado de logins que falharam. A Amazon pode exigir uma ação antes que um relogin possa ser tentado.\",\n      \"login_failed\": \"Alexa Media Player não conseguiu fazer o login.\",\n      \"reauth_successful\": \"Alexa Media Player reautenticada com sucesso.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Chave 2FA integrada inválida\",\n      \"connection_error\": \"Erro ao conectar; verifique a rede e tente novamente\",\n      \"hass_url_invalid\": \"Não foi possível conectar ao URL do Home Assistant. Verifique o URL externo em Configuração - > Geral\",\n      \"identifier_exists\": \"E-mail para URL Alexa já registado\",\n      \"invalid_credentials\": \"Credenciais inválidas\",\n      \"unknown_error\": \"Erro desconhecido, por favor habilite depuração avançada e informações de log de relatório\"\n    },\n    \"step\": {\n      \"action_required\": {\n        \"data\": {\n          \"proxy\": \"Usar método de proxy de login (2FA não é necessário)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nA Amazon enviará uma notificação push de acordo com a mensagem abaixo. Por favor, responda completamente antes de continuar.  \\n{message}\",\n        \"title\": \"Alexa Media Player - Ação Necessária\"\n      },\n      \"authselect\": {\n        \"data\": {\n          \"authselectoption\": \"Método OTP (senha de uso único)\",\n          \"proxy\": \"Usar método de proxy de login (2FA não é necessário)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\n{message}\",\n        \"title\": \"Alexa Media Player - Senha de uso único\"\n      },\n      \"captcha\": {\n        \"data\": {\n          \"captcha\": \"Captcha\",\n          \"password\": \"Senha\",\n          \"proxy\": \"Usar método de proxy de login (2FA não é necessário)\",\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\n{message}  \\n {captcha_image}\",\n        \"title\": \"Alexa Media Player - Captcha\"\n      },\n      \"claimspicker\": {\n        \"data\": {\n          \"authselectoption\": \"Método de verificação\",\n          \"proxy\": \"Usar método de proxy de login (2FA não é necessário)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nPor favor, selecione o método de verificação por número. (ex. '0' ou '1')  \\n{message}\",\n        \"title\": \"Alexa Media Player - Método de verificação\"\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"Senha de uso único do aplicativo 2FA integrado confirmado com sucesso.\"\n        },\n        \"description\": \"** {email} - alexa. {url} **\\n Você confirmou com sucesso uma senha de uso único na aplicação 2FA integrada com a Amazon?\\n > Código OTP {message}\",\n        \"title\": \"Alexa Media Player - Confirmação OTP\"\n      },\n      \"twofactor\": {\n        \"data\": {\n          \"proxy\": \"Usar método de proxy de login (2FA não é necessário)\",\n          \"securitycode\": \"Código 2FA\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nDigite a senha de uso único (OTP).  \\n{message}\",\n        \"title\": \"Alexa Media Player - autenticação de dois fatores\"\n      },\n      \"user\": {\n        \"data\": {\n          \"cookies_txt\": \"Dados de cookies.txt\",\n          \"debug\": \"Depuração avançada\",\n          \"email\": \"Endereço de e-mail\",\n          \"exclude_devices\": \"Dispositivo excluído (separado por vírgula)\",\n          \"hass_url\": \"URL para aceder o Home Assistant\",\n          \"include_devices\": \"Dispositivo incluído (separado por vírgula)\",\n          \"oauth_login\": \"Habilitar método de aplicativo oauth-token\",\n          \"otp_secret\": \"Chave de aplicativo 2FA integrada (gerar códigos 2FA automaticamente)\",\n          \"password\": \"Senha\",\n          \"proxy\": \"Usar método de proxy de login (2FA não é necessário)\",\n          \"scan_interval\": \"Segundos entre análises\",\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\",\n          \"url\": \"Região do domínio Amazon (ex. amazon.com.br)\"\n        },\n        \"description\": \"Por favor, confirme as informações abaixo. Para configuração de compatibilidade, desative a opção 'Usar método de proxy de login'.\",\n        \"title\": \"Alexa Media Player - Configuração\"\n      },\n      \"user_legacy\": {\n        \"data\": {\n          \"cookies_txt\": \"Dados de cookies.txt\",\n          \"debug\": \"Depuração avançada\",\n          \"email\": \"Endereço de e-mail\",\n          \"exclude_devices\": \"Dispositivo excluído (separado por vírgula)\",\n          \"include_devices\": \"Dispositivo incluído (separado por vírgula)\",\n          \"oauth_login\": \"Habilitar método de aplicativo oauth-token\",\n          \"otp_secret\": \"Chave de aplicativo 2FA integrada (gerar códigos 2FA automaticamente)\",\n          \"password\": \"Senha\",\n          \"proxy\": \"Usar método de proxy de login (2FA não é necessário)\",\n          \"scan_interval\": \"Segundos entre análises\",\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\",\n          \"url\": \"Região do domínio Amazon (ex. amazon.com.br)\"\n        },\n        \"description\": \"Por favor, introduza a sua [informação](https://github.com/custom-components/alexa_media_player/wiki/Configuration#integrations-page). **[Cookie import](https://github.com/custom-components/alexa_media_player/wiki/Configuration#cookie-import) pode ser mais fácil!**   \\n**Aviso: a Amazon informa incorretamente 'Insira um e-mail ou número de celular válido' quando [2FA Code é necessário](https://github.com/custom-components/alexa_media_player/wiki/Configuration#enable-two-factor-authentication-for-your-amazon-account).**  \\n>{message}\",\n        \"title\": \"Alexa Media Player - Configuração de Compatibilidade\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Inclui dispositivos conectados via Echo\",\n          \"queue_delay\": \"Segundos de espera para agrupar comandos\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/.translations/ru.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"The Forgot Password page was detected. This normally is the result of too may failed logins. Amazon may require action before a relogin can be attempted.\",\n      \"login_failed\": \"Alexa Media Player failed to login.\",\n      \"reauth_successful\": \"Alexa Media Player successfully reauthenticated.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Invalid Built-In 2FA key\",\n      \"connection_error\": \"Ошибка подключения; проверьте сеть и повторите попытку\",\n      \"hass_url_invalid\": \"Невозможно подключиться к URL-адресу Home Assistant. Пожалуйста, проверьте внешний URL-адрес в разделе \\\"Конфигурация\\\" - > Общие\\\".\",\n      \"identifier_exists\": \"Электронная почта для Alexa уже зарегистрирована\",\n      \"invalid_credentials\": \"Неверные учетные данные\",\n      \"unknown_error\": \"Неизвестная ошибка, пожалуйста, сообщите информацию журнала\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP from the Built-in 2FA App Key confirmed successfully.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nHave you successfully confirmed an OTP from the Built-in 2FA App Key with Amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Расширенные возможности отладки\",\n          \"email\": \"Адрес электронной почты\",\n          \"exclude_devices\": \"Исключенные устройства (через запятую)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"include_devices\": \"Включенные устройства (разделенное запятыми)\",\n          \"otp_secret\": \"Built-in 2FA App Key (automatically generate 2FA Codes)\",\n          \"password\": \"Пароль\",\n          \"scan_interval\": \"Секунды между сканированиями\",\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\",\n          \"url\": \"Домен региона Amazon (например, amazon.co.uk)\"\n        },\n        \"description\": \"Пожалуйста, подтвердите информацию ниже.\",\n        \"title\": \"Alexa Media Player - Конфигурация\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Включить устройства, подключенные через Echo\",\n          \"queue_delay\": \"Секунды ожидания, чтобы выполнить команды вместе\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/.translations/zh-Hans.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"The Forgot Password page was detected. This normally is the result of too may failed logins. Amazon may require action before a relogin can be attempted.\",\n      \"login_failed\": \"Alexa Media Player failed to login.\",\n      \"reauth_successful\": \"Alexa Media Player successfully reauthenticated.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Invalid Built-In 2FA key\",\n      \"connection_error\": \"连接错误；检查网络并重试\",\n      \"hass_url_invalid\": \"Unable to connect to Home Assistant url. Please check the External Url under Configuration -> General\",\n      \"identifier_exists\": \"Alexa URL的电子邮件已注册\",\n      \"invalid_credentials\": \"Invalid credentials\",\n      \"unknown_error\": \"Unknown error, please report log info\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP from the Built-in 2FA App Key confirmed successfully.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nHave you successfully confirmed an OTP from the Built-in 2FA App Key with Amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"高级调试\",\n          \"email\": \"电子邮件地址\",\n          \"exclude_devices\": \"Excluded device (comma separated)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"include_devices\": \"Included device (comma separated)\",\n          \"otp_secret\": \"Built-in 2FA App Key (automatically generate 2FA Codes)\",\n          \"password\": \"密码\",\n          \"scan_interval\": \"Seconds between scans\",\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\",\n          \"url\": \"Amazon region domain (e.g., amazon.co.uk)\"\n        },\n        \"description\": \"请确认以下信息。\",\n        \"title\": \"Alexa Media Player-配置\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Include devices connected via Echo\",\n          \"queue_delay\": \"Seconds to wait to queue commands together\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/__init__.py",
    "content": "\"\"\"\nSupport to interface with Alexa Devices.\n\nSPDX-License-Identifier: Apache-2.0\n\nFor more details about this platform, please refer to the documentation at\nhttps://community.home-assistant.io/t/echo-devices-alexa-as-media-player-testers-needed/58639\n\"\"\"\nimport asyncio\nfrom datetime import datetime, timedelta\nfrom json import JSONDecodeError\nimport logging\nimport time\nfrom typing import Optional, Text\n\nfrom alexapy import (\n    AlexaAPI,\n    AlexaLogin,\n    AlexapyConnectionError,\n    AlexapyLoginError,\n    WebsocketEchoClient,\n    __version__ as alexapy_version,\n    hide_email,\n    hide_serial,\n    obfuscate,\n)\nimport async_timeout\nfrom homeassistant import util\nfrom homeassistant.config_entries import SOURCE_IMPORT\nfrom homeassistant.const import (\n    CONF_EMAIL,\n    CONF_NAME,\n    CONF_PASSWORD,\n    CONF_SCAN_INTERVAL,\n    CONF_URL,\n    EVENT_HOMEASSISTANT_STARTED,\n    EVENT_HOMEASSISTANT_STOP,\n)\nfrom homeassistant.data_entry_flow import UnknownFlow\nfrom homeassistant.exceptions import ConfigEntryNotReady\nfrom homeassistant.helpers import config_validation as cv, device_registry as dr\nfrom homeassistant.helpers.discovery import async_load_platform\nfrom homeassistant.helpers.dispatcher import async_dispatcher_send\nfrom homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed\nfrom homeassistant.util import dt, slugify\nimport voluptuous as vol\n\nfrom .alexa_entity import AlexaEntityData, get_entity_data, parse_alexa_entities\nfrom .config_flow import in_progess_instances\nfrom .const import (\n    ALEXA_COMPONENTS,\n    CONF_ACCOUNTS,\n    CONF_DEBUG,\n    CONF_EXCLUDE_DEVICES,\n    CONF_EXTENDED_ENTITY_DISCOVERY,\n    CONF_INCLUDE_DEVICES,\n    CONF_OAUTH,\n    CONF_OTPSECRET,\n    CONF_QUEUE_DELAY,\n    DATA_ALEXAMEDIA,\n    DATA_LISTENER,\n    DEFAULT_EXTENDED_ENTITY_DISCOVERY,\n    DEFAULT_QUEUE_DELAY,\n    DEPENDENT_ALEXA_COMPONENTS,\n    DOMAIN,\n    ISSUE_URL,\n    MIN_TIME_BETWEEN_FORCED_SCANS,\n    MIN_TIME_BETWEEN_SCANS,\n    SCAN_INTERVAL,\n    STARTUP,\n)\nfrom .helpers import (\n    _catch_login_errors,\n    _existing_serials,\n    alarm_just_dismissed,\n    calculate_uuid,\n)\nfrom .notify import async_unload_entry as notify_async_unload_entry\nfrom .services import AlexaMediaServices\n\n_LOGGER = logging.getLogger(__name__)\n\n\nACCOUNT_CONFIG_SCHEMA = vol.Schema(\n    {\n        vol.Required(CONF_EMAIL): cv.string,\n        vol.Required(CONF_PASSWORD): cv.string,\n        vol.Required(CONF_URL): cv.string,\n        vol.Optional(CONF_DEBUG, default=False): cv.boolean,\n        vol.Optional(CONF_INCLUDE_DEVICES, default=[]): vol.All(\n            cv.ensure_list, [cv.string]\n        ),\n        vol.Optional(CONF_EXCLUDE_DEVICES, default=[]): vol.All(\n            cv.ensure_list, [cv.string]\n        ),\n        vol.Optional(CONF_SCAN_INTERVAL, default=SCAN_INTERVAL): cv.time_period,\n    }\n)\n\nCONFIG_SCHEMA = vol.Schema(\n    {\n        DOMAIN: vol.Schema(\n            {\n                vol.Optional(CONF_ACCOUNTS): vol.All(\n                    cv.ensure_list, [ACCOUNT_CONFIG_SCHEMA]\n                )\n            }\n        )\n    },\n    extra=vol.ALLOW_EXTRA,\n)\n\n\nasync def async_setup(hass, config, discovery_info=None):\n    # pylint: disable=unused-argument\n    \"\"\"Set up the Alexa domain.\"\"\"\n    if DOMAIN not in config:\n        _LOGGER.debug(\n            \"Nothing to import from configuration.yaml, loading from Integrations\",\n        )\n        return True\n\n    domainconfig = config.get(DOMAIN)\n    for account in domainconfig[CONF_ACCOUNTS]:\n        entry_found = False\n        _LOGGER.debug(\n            \"Importing config information for %s - %s from configuration.yaml\",\n            hide_email(account[CONF_EMAIL]),\n            account[CONF_URL],\n        )\n        if hass.config_entries.async_entries(DOMAIN):\n            _LOGGER.debug(\"Found existing config entries\")\n            for entry in hass.config_entries.async_entries(DOMAIN):\n                if (\n                    entry.data.get(CONF_EMAIL) == account[CONF_EMAIL]\n                    and entry.data.get(CONF_URL) == account[CONF_URL]\n                ):\n                    _LOGGER.debug(\"Updating existing entry\")\n                    hass.config_entries.async_update_entry(\n                        entry,\n                        data={\n                            CONF_EMAIL: account[CONF_EMAIL],\n                            CONF_PASSWORD: account[CONF_PASSWORD],\n                            CONF_URL: account[CONF_URL],\n                            CONF_DEBUG: account[CONF_DEBUG],\n                            CONF_INCLUDE_DEVICES: account[CONF_INCLUDE_DEVICES],\n                            CONF_EXCLUDE_DEVICES: account[CONF_EXCLUDE_DEVICES],\n                            CONF_SCAN_INTERVAL: account[\n                                CONF_SCAN_INTERVAL\n                            ].total_seconds(),\n                            CONF_OAUTH: account.get(\n                                CONF_OAUTH, entry.data.get(CONF_OAUTH, {})\n                            ),\n                            CONF_OTPSECRET: account.get(\n                                CONF_OTPSECRET, entry.data.get(CONF_OTPSECRET, \"\")\n                            ),\n                        },\n                    )\n                    entry_found = True\n                    break\n        if not entry_found:\n            _LOGGER.debug(\"Creating new config entry\")\n            hass.async_create_task(\n                hass.config_entries.flow.async_init(\n                    DOMAIN,\n                    context={\"source\": SOURCE_IMPORT},\n                    data={\n                        CONF_EMAIL: account[CONF_EMAIL],\n                        CONF_PASSWORD: account[CONF_PASSWORD],\n                        CONF_URL: account[CONF_URL],\n                        CONF_DEBUG: account[CONF_DEBUG],\n                        CONF_INCLUDE_DEVICES: account[CONF_INCLUDE_DEVICES],\n                        CONF_EXCLUDE_DEVICES: account[CONF_EXCLUDE_DEVICES],\n                        CONF_SCAN_INTERVAL: account[CONF_SCAN_INTERVAL].total_seconds(),\n                        CONF_OAUTH: account.get(CONF_OAUTH, {}),\n                        CONF_OTPSECRET: account.get(CONF_OTPSECRET, \"\"),\n                    },\n                )\n            )\n    return True\n\n\n# @retry_async(limit=5, delay=5, catch_exceptions=True)\nasync def async_setup_entry(hass, config_entry):\n    \"\"\"Set up Alexa Media Player as config entry.\"\"\"\n\n    async def close_alexa_media(event=None) -> None:\n        \"\"\"Clean up Alexa connections.\"\"\"\n        _LOGGER.debug(\"Received shutdown request: %s\", event)\n        if hass.data.get(DATA_ALEXAMEDIA, {}).get(\"accounts\"):\n            for email, _ in hass.data[DATA_ALEXAMEDIA][\"accounts\"].items():\n                await close_connections(hass, email)\n\n    async def complete_startup(event=None) -> None:\n        \"\"\"Run final tasks after startup.\"\"\"\n        _LOGGER.debug(\"Completing remaining startup tasks.\")\n        await asyncio.sleep(10)\n        if hass.data[DATA_ALEXAMEDIA].get(\"notify_service\"):\n            notify = hass.data[DATA_ALEXAMEDIA].get(\"notify_service\")\n            _LOGGER.debug(\"Refreshing notify targets\")\n            await notify.async_register_services()\n\n    async def relogin(event=None) -> None:\n        \"\"\"Relogin to Alexa.\"\"\"\n        if hide_email(email) == event.data.get(\"email\"):\n            _LOGGER.debug(\"%s: Received relogin request: %s\", hide_email(email), event)\n            login_obj: AlexaLogin = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email].get(\n                \"login_obj\"\n            )\n            uuid = (await calculate_uuid(hass, email, url))[\"uuid\"]\n            if login_obj is None:\n                login_obj = AlexaLogin(\n                    url=url,\n                    email=email,\n                    password=password,\n                    outputpath=hass.config.path,\n                    debug=account.get(CONF_DEBUG),\n                    otp_secret=account.get(CONF_OTPSECRET, \"\"),\n                    oauth=account.get(CONF_OAUTH, {}),\n                    uuid=uuid,\n                    oauth_login=True,\n                )\n                hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"login_obj\"] = login_obj\n            else:\n                login_obj.oauth_login = True\n            await login_obj.reset()\n            # await login_obj.login()\n            if await test_login_status(hass, config_entry, login_obj):\n                await setup_alexa(hass, config_entry, login_obj)\n\n    async def login_success(event=None) -> None:\n        \"\"\"Relogin to Alexa.\"\"\"\n        if hide_email(email) == event.data.get(\"email\"):\n            _LOGGER.debug(\"Received Login success: %s\", event)\n            login_obj: AlexaLogin = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email].get(\n                \"login_obj\"\n            )\n            await setup_alexa(hass, config_entry, login_obj)\n\n    if not hass.data.get(DATA_ALEXAMEDIA):\n        _LOGGER.info(STARTUP)\n        _LOGGER.info(\"Loaded alexapy==%s\", alexapy_version)\n    hass.data.setdefault(\n        DATA_ALEXAMEDIA, {\"accounts\": {}, \"config_flows\": {}, \"notify_service\": None}\n    )\n    if not hass.data[DATA_ALEXAMEDIA].get(\"accounts\"):\n        hass.data[DATA_ALEXAMEDIA] = {\n            \"accounts\": {},\n            \"config_flows\": {},\n        }\n    account = config_entry.data\n    email = account.get(CONF_EMAIL)\n    password = account.get(CONF_PASSWORD)\n    url = account.get(CONF_URL)\n    hass.data[DATA_ALEXAMEDIA][\"accounts\"].setdefault(\n        email,\n        {\n            \"coordinator\": None,\n            \"config_entry\": config_entry,\n            \"setup_alexa\": setup_alexa,\n            \"devices\": {\n                \"media_player\": {},\n                \"switch\": {},\n                \"guard\": [],\n                \"light\": [],\n                \"temperature\": [],\n            },\n            \"entities\": {\n                \"media_player\": {},\n                \"switch\": {},\n                \"sensor\": {},\n                \"light\": [],\n                \"alarm_control_panel\": {},\n            },\n            \"excluded\": {},\n            \"new_devices\": True,\n            \"websocket_lastattempt\": 0,\n            \"websocketerror\": 0,\n            \"websocket_commands\": {},\n            \"websocket_activity\": {\"serials\": {}, \"refreshed\": {}},\n            \"websocket\": None,\n            \"auth_info\": None,\n            \"second_account_index\": 0,\n            \"should_get_network\": True,\n            \"options\": {\n                CONF_QUEUE_DELAY: config_entry.options.get(\n                    CONF_QUEUE_DELAY, DEFAULT_QUEUE_DELAY\n                ),\n                CONF_EXTENDED_ENTITY_DISCOVERY: config_entry.options.get(\n                    CONF_EXTENDED_ENTITY_DISCOVERY, DEFAULT_EXTENDED_ENTITY_DISCOVERY\n                ),\n            },\n            DATA_LISTENER: [config_entry.add_update_listener(update_listener)],\n        },\n    )\n    uuid_dict = await calculate_uuid(hass, email, url)\n    uuid = uuid_dict[\"uuid\"]\n    hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"second_account_index\"] = uuid_dict[\n        \"index\"\n    ]\n    login: AlexaLogin = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email].get(\n        \"login_obj\",\n        AlexaLogin(\n            url=url,\n            email=email,\n            password=password,\n            outputpath=hass.config.path,\n            debug=account.get(CONF_DEBUG),\n            otp_secret=account.get(CONF_OTPSECRET, \"\"),\n            oauth=account.get(CONF_OAUTH, {}),\n            uuid=uuid,\n            oauth_login=True,\n        ),\n    )\n    hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"login_obj\"] = login\n    if not hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"second_account_index\"]:\n        hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, close_alexa_media)\n        hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STARTED, complete_startup)\n    hass.bus.async_listen(\"alexa_media_relogin_required\", relogin)\n    hass.bus.async_listen(\"alexa_media_relogin_success\", login_success)\n    try:\n        await login.login(cookies=await login.load_cookie())\n        if await test_login_status(hass, config_entry, login):\n            await setup_alexa(hass, config_entry, login)\n            return True\n        return False\n    except AlexapyConnectionError as err:\n        raise ConfigEntryNotReady(str(err) or \"Connection Error during login\") from err\n\n\nasync def setup_alexa(hass, config_entry, login_obj: AlexaLogin):\n    \"\"\"Set up a alexa api based on host parameter.\"\"\"\n\n    async def async_update_data() -> Optional[AlexaEntityData]:\n        \"\"\"Fetch data from API endpoint.\n\n        This is the place to pre-process the data to lookup tables\n        so entities can quickly look up their data.\n\n        This will ping Alexa API to identify all devices, bluetooth, and the last\n        called device.\n\n        If any guards, temperature sensors, or lights are configured, their\n        current state will be acquired. This data is returned directly so that it is available on the coordinator.\n\n        This will add new devices and services when discovered. By default this\n        runs every SCAN_INTERVAL seconds unless another method calls it. if\n        websockets is connected, it will increase the delay 10-fold between updates.\n        While throttled at MIN_TIME_BETWEEN_SCANS, care should be taken to\n        reduce the number of runs to avoid flooding. Slow changing states\n        should be checked here instead of in spawned components like\n        media_player since this object is one per account.\n        Each AlexaAPI call generally results in two webpage requests.\n        \"\"\"\n        email = config.get(CONF_EMAIL)\n        login_obj = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"login_obj\"]\n        if (\n            email not in hass.data[DATA_ALEXAMEDIA][\"accounts\"]\n            or not login_obj.status.get(\"login_successful\")\n            or login_obj.session.closed\n            or login_obj.close_requested\n        ):\n            return\n        existing_serials = _existing_serials(hass, login_obj)\n        existing_entities = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"entities\"][\n            \"media_player\"\n        ].values()\n        auth_info = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email].get(\"auth_info\")\n        new_devices = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"new_devices\"]\n        should_get_network = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\n            \"should_get_network\"\n        ]\n        extended_entity_discovery = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\n            \"options\"\n        ].get(CONF_EXTENDED_ENTITY_DISCOVERY)\n\n        devices = {}\n        bluetooth = {}\n        preferences = {}\n        dnd = {}\n        raw_notifications = {}\n        entity_state = {}\n        tasks = [\n            AlexaAPI.get_devices(login_obj),\n            AlexaAPI.get_bluetooth(login_obj),\n            AlexaAPI.get_device_preferences(login_obj),\n            AlexaAPI.get_dnd_state(login_obj),\n        ]\n        if new_devices:\n            tasks.append(AlexaAPI.get_authentication(login_obj))\n\n        entities_to_monitor = set()\n        for sensor in hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"entities\"][\n            \"sensor\"\n        ].values():\n            temp = sensor.get(\"Temperature\")\n            if temp and temp.enabled:\n                entities_to_monitor.add(temp.alexa_entity_id)\n\n        for light in hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"entities\"][\"light\"]:\n            if light.enabled:\n                entities_to_monitor.add(light.alexa_entity_id)\n\n        for guard in hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"entities\"][\n            \"alarm_control_panel\"\n        ].values():\n            if guard.enabled:\n                entities_to_monitor.add(guard.unique_id)\n\n        if entities_to_monitor:\n            tasks.append(get_entity_data(login_obj, list(entities_to_monitor)))\n\n        if should_get_network:\n            tasks.append(AlexaAPI.get_network_details(login_obj))\n\n        try:\n            # Note: asyncio.TimeoutError and aiohttp.ClientError are already\n            # handled by the data update coordinator.\n            async with async_timeout.timeout(30):\n                (\n                    devices,\n                    bluetooth,\n                    preferences,\n                    dnd,\n                    *optional_task_results,\n                ) = await asyncio.gather(*tasks)\n\n                if should_get_network:\n                    _LOGGER.debug(\n                        \"Alexa entities have been loaded. Prepared for discovery.\"\n                    )\n                    alexa_entities = parse_alexa_entities(optional_task_results.pop())\n                    hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"devices\"].update(\n                        alexa_entities\n                    )\n                    hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\n                        \"should_get_network\"\n                    ] = False\n\n                    # First run is a special case. Get the state of all entities(including disabled)\n                    # This ensures all entities have state during startup without needing to request coordinator refresh\n                    for typeOfEntity, entities in alexa_entities.items():\n                        if typeOfEntity == \"guard\" or extended_entity_discovery:\n                            for entity in entities:\n                                entities_to_monitor.add(entity.get(\"id\"))\n                    entity_state = await get_entity_data(\n                        login_obj, list(entities_to_monitor)\n                    )\n                elif entities_to_monitor:\n                    entity_state = optional_task_results.pop()\n\n                if new_devices:\n                    auth_info = optional_task_results.pop()\n                    _LOGGER.debug(\n                        \"%s: Found %s devices, %s bluetooth\",\n                        hide_email(email),\n                        len(devices) if devices is not None else \"\",\n                        len(bluetooth.get(\"bluetoothStates\", []))\n                        if bluetooth is not None\n                        else \"\",\n                    )\n\n            await process_notifications(login_obj, raw_notifications)\n            # Process last_called data to fire events\n            await update_last_called(login_obj)\n        except (AlexapyLoginError, JSONDecodeError):\n            _LOGGER.debug(\n                \"%s: Alexa API disconnected; attempting to relogin : status %s\",\n                hide_email(email),\n                login_obj.status,\n            )\n            if login_obj.status:\n                hass.bus.async_fire(\n                    \"alexa_media_relogin_required\",\n                    event_data={\"email\": hide_email(email), \"url\": login_obj.url},\n                )\n            return\n        except BaseException as err:\n            raise UpdateFailed(f\"Error communicating with API: {err}\")\n\n        new_alexa_clients = []  # list of newly discovered device names\n        exclude_filter = []\n        include_filter = []\n\n        for device in devices:\n            serial = device[\"serialNumber\"]\n            dev_name = device[\"accountName\"]\n            if include and dev_name not in include:\n                include_filter.append(dev_name)\n                if \"appDeviceList\" in device:\n                    for app in device[\"appDeviceList\"]:\n                        (\n                            hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"excluded\"][\n                                app[\"serialNumber\"]\n                            ]\n                        ) = device\n                hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"excluded\"][\n                    serial\n                ] = device\n                continue\n            if exclude and dev_name in exclude:\n                exclude_filter.append(dev_name)\n                if \"appDeviceList\" in device:\n                    for app in device[\"appDeviceList\"]:\n                        (\n                            hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"excluded\"][\n                                app[\"serialNumber\"]\n                            ]\n                        ) = device\n                hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"excluded\"][\n                    serial\n                ] = device\n                continue\n\n            if (\n                dev_name not in include_filter\n                and device.get(\"capabilities\")\n                and not any(\n                    x in device[\"capabilities\"]\n                    for x in [\"MUSIC_SKILL\", \"TIMERS_AND_ALARMS\", \"REMINDERS\"]\n                )\n            ):\n                # skip devices without music or notification skill\n                _LOGGER.debug(\"Excluding %s for lacking capability\", dev_name)\n                continue\n\n            if \"bluetoothStates\" in bluetooth:\n                for b_state in bluetooth[\"bluetoothStates\"]:\n                    if serial == b_state[\"deviceSerialNumber\"]:\n                        device[\"bluetooth_state\"] = b_state\n                        break\n\n            if \"devicePreferences\" in preferences:\n                for dev in preferences[\"devicePreferences\"]:\n                    if dev[\"deviceSerialNumber\"] == serial:\n                        device[\"locale\"] = dev[\"locale\"]\n                        device[\"timeZoneId\"] = dev[\"timeZoneId\"]\n                        _LOGGER.debug(\n                            \"%s: Locale %s timezone %s\",\n                            dev_name,\n                            device[\"locale\"],\n                            device[\"timeZoneId\"],\n                        )\n                        break\n\n            if \"doNotDisturbDeviceStatusList\" in dnd:\n                for dev in dnd[\"doNotDisturbDeviceStatusList\"]:\n                    if dev[\"deviceSerialNumber\"] == serial:\n                        device[\"dnd\"] = dev[\"enabled\"]\n                        _LOGGER.debug(\"%s: DND %s\", dev_name, device[\"dnd\"])\n                        hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"devices\"][\n                            \"switch\"\n                        ].setdefault(serial, {\"dnd\": True})\n\n                        break\n            hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"auth_info\"] = device[\n                \"auth_info\"\n            ] = auth_info\n            hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"devices\"][\"media_player\"][\n                serial\n            ] = device\n\n            if serial not in existing_serials:\n                new_alexa_clients.append(dev_name)\n            elif (\n                serial in existing_serials\n                and hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"entities\"][\n                    \"media_player\"\n                ].get(serial)\n                and hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"entities\"][\n                    \"media_player\"\n                ]\n                .get(serial)\n                .enabled\n            ):\n                await hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"entities\"][\n                    \"media_player\"\n                ].get(serial).refresh(device, skip_api=True)\n        _LOGGER.debug(\n            \"%s: Existing: %s New: %s;\"\n            \" Filtered out by not being in include: %s \"\n            \"or in exclude: %s\",\n            hide_email(email),\n            list(existing_entities),\n            new_alexa_clients,\n            include_filter,\n            exclude_filter,\n        )\n\n        if new_alexa_clients:\n            cleaned_config = config.copy()\n            cleaned_config.pop(CONF_PASSWORD, None)\n            # CONF_PASSWORD contains sensitive info which is no longer needed\n            for component in ALEXA_COMPONENTS:\n                entry_setup = len(\n                    hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"entities\"][component]\n                )\n                if not entry_setup:\n                    _LOGGER.debug(\"Loading config entry for %s\", component)\n                    hass.async_add_job(\n                        hass.config_entries.async_forward_entry_setup(\n                            config_entry, component\n                        )\n                    )\n                else:\n                    _LOGGER.debug(\"Loading %s\", component)\n                    hass.async_create_task(\n                        async_load_platform(\n                            hass,\n                            component,\n                            DOMAIN,\n                            {CONF_NAME: DOMAIN, \"config\": cleaned_config},\n                            cleaned_config,\n                        )\n                    )\n\n        hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"new_devices\"] = False\n        # prune stale devices\n        device_registry = dr.async_get(hass)\n        for device_entry in dr.async_entries_for_config_entry(\n            device_registry, config_entry.entry_id\n        ):\n            for (_, identifier) in device_entry.identifiers:\n                if identifier in hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\n                    \"devices\"\n                ][\"media_player\"].keys() or identifier in map(\n                    lambda x: slugify(f\"{x}_{email}\"),\n                    hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"devices\"][\n                        \"media_player\"\n                    ].keys(),\n                ):\n                    break\n            else:\n                device_registry.async_remove_device(device_entry.id)\n                _LOGGER.debug(\n                    \"%s: Removing stale device %s\", hide_email(email), device_entry.name\n                )\n\n        await login_obj.save_cookiefile()\n        if login_obj.access_token:\n            hass.config_entries.async_update_entry(\n                config_entry,\n                data={\n                    **config_entry.data,\n                    CONF_OAUTH: {\n                        \"access_token\": login_obj.access_token,\n                        \"refresh_token\": login_obj.refresh_token,\n                        \"expires_in\": login_obj.expires_in,\n                        \"mac_dms\": login_obj.mac_dms,\n                    },\n                },\n            )\n        return entity_state\n\n    @_catch_login_errors\n    async def process_notifications(login_obj, raw_notifications=None):\n        \"\"\"Process raw notifications json.\"\"\"\n        if not raw_notifications:\n            raw_notifications = await AlexaAPI.get_notifications(login_obj)\n        email: str = login_obj.email\n        previous = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email].get(\n            \"notifications\", {}\n        )\n        notifications = {\"process_timestamp\": dt.utcnow()}\n        for notification in raw_notifications:\n            n_dev_id = notification.get(\"deviceSerialNumber\")\n            if n_dev_id is None:\n                # skip notifications untied to a device for now\n                # https://github.com/custom-components/alexa_media_player/issues/633#issuecomment-610705651\n                continue\n            n_type = notification.get(\"type\")\n            if n_type is None:\n                continue\n            if n_type == \"MusicAlarm\":\n                n_type = \"Alarm\"\n            n_id = notification[\"notificationIndex\"]\n            if n_type == \"Alarm\":\n                n_date = notification.get(\"originalDate\")\n                n_time = notification.get(\"originalTime\")\n                notification[\"date_time\"] = (\n                    f\"{n_date} {n_time}\" if n_date and n_time else None\n                )\n                previous_alarm = previous.get(n_dev_id, {}).get(\"Alarm\", {}).get(n_id)\n                if previous_alarm and alarm_just_dismissed(\n                    notification,\n                    previous_alarm.get(\"status\"),\n                    previous_alarm.get(\"version\"),\n                ):\n                    hass.bus.async_fire(\n                        \"alexa_media_alarm_dismissal_event\",\n                        event_data={\"device\": {\"id\": n_dev_id}, \"event\": notification},\n                    )\n\n            if n_dev_id not in notifications:\n                notifications[n_dev_id] = {}\n            if n_type not in notifications[n_dev_id]:\n                notifications[n_dev_id][n_type] = {}\n            notifications[n_dev_id][n_type][n_id] = notification\n        hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"notifications\"] = notifications\n        _LOGGER.debug(\n            \"%s: Updated %s notifications for %s devices at %s\",\n            hide_email(email),\n            len(raw_notifications),\n            len(notifications),\n            dt.as_local(\n                hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"notifications\"][\n                    \"process_timestamp\"\n                ]\n            ),\n        )\n\n    @_catch_login_errors\n    async def update_last_called(login_obj, last_called=None, force=False):\n        \"\"\"Update the last called device for the login_obj.\n\n        This will store the last_called in hass.data and also fire an event\n        to notify listeners.\n        \"\"\"\n        if not last_called or not (last_called and last_called.get(\"summary\")):\n            try:\n                last_called = await AlexaAPI.get_last_device_serial(login_obj)\n            except TypeError:\n                _LOGGER.debug(\n                    \"%s: Error updating last_called: %s\",\n                    hide_email(email),\n                    hide_serial(last_called),\n                )\n                return\n        _LOGGER.debug(\n            \"%s: Updated last_called: %s\", hide_email(email), hide_serial(last_called)\n        )\n        stored_data = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email]\n        if (\n            force\n            or \"last_called\" in stored_data\n            and last_called != stored_data[\"last_called\"]\n        ) or (\"last_called\" not in stored_data and last_called is not None):\n            _LOGGER.debug(\n                \"%s: last_called changed: %s to %s\",\n                hide_email(email),\n                hide_serial(\n                    stored_data[\"last_called\"] if \"last_called\" in stored_data else None\n                ),\n                hide_serial(last_called),\n            )\n            async_dispatcher_send(\n                hass,\n                f\"{DOMAIN}_{hide_email(email)}\"[0:32],\n                {\"last_called_change\": last_called},\n            )\n        hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"last_called\"] = last_called\n\n    @_catch_login_errors\n    async def update_bluetooth_state(login_obj, device_serial):\n        \"\"\"Update the bluetooth state on ws bluetooth event.\"\"\"\n        bluetooth = await AlexaAPI.get_bluetooth(login_obj)\n        device = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"devices\"][\n            \"media_player\"\n        ][device_serial]\n\n        if \"bluetoothStates\" in bluetooth:\n            for b_state in bluetooth[\"bluetoothStates\"]:\n                if device_serial == b_state[\"deviceSerialNumber\"]:\n                    # _LOGGER.debug(\"%s: setting value for: %s to %s\",\n                    #               hide_email(email),\n                    #               hide_serial(device_serial),\n                    #               hide_serial(b_state))\n                    device[\"bluetooth_state\"] = b_state\n                    return device[\"bluetooth_state\"]\n        _LOGGER.debug(\n            \"%s: get_bluetooth for: %s failed with %s\",\n            hide_email(email),\n            hide_serial(device_serial),\n            hide_serial(bluetooth),\n        )\n        return None\n\n    @util.Throttle(MIN_TIME_BETWEEN_SCANS, MIN_TIME_BETWEEN_FORCED_SCANS)\n    @_catch_login_errors\n    async def update_dnd_state(login_obj) -> None:\n        \"\"\"Update the dnd state on ws dnd combo event.\"\"\"\n        dnd = await AlexaAPI.get_dnd_state(login_obj)\n\n        if \"doNotDisturbDeviceStatusList\" in dnd:\n            async_dispatcher_send(\n                hass,\n                f\"{DOMAIN}_{hide_email(email)}\"[0:32],\n                {\"dnd_update\": dnd[\"doNotDisturbDeviceStatusList\"]},\n            )\n            return\n        _LOGGER.debug(\"%s: get_dnd_state failed: dnd:%s\", hide_email(email), dnd)\n        return\n\n    async def ws_connect() -> WebsocketEchoClient:\n        \"\"\"Open WebSocket connection.\n\n        This will only attempt one login before failing.\n        \"\"\"\n        websocket: Optional[WebsocketEchoClient] = None\n        email = login_obj.email\n        try:\n            if login_obj.session.closed:\n                _LOGGER.debug(\n                    \"%s: Websocket creation aborted. Session is closed.\",\n                    hide_email(email),\n                )\n                return\n            websocket = WebsocketEchoClient(\n                login_obj,\n                ws_handler,\n                ws_open_handler,\n                ws_close_handler,\n                ws_error_handler,\n            )\n            _LOGGER.debug(\"%s: Websocket created: %s\", hide_email(email), websocket)\n            await websocket.async_run()\n        except AlexapyLoginError as exception_:\n            _LOGGER.debug(\n                \"%s: Login Error detected from websocket: %s\",\n                hide_email(email),\n                exception_,\n            )\n            hass.bus.async_fire(\n                \"alexa_media_relogin_required\",\n                event_data={\"email\": hide_email(email), \"url\": login_obj.url},\n            )\n            return\n        except BaseException as exception_:  # pylint: disable=broad-except\n            _LOGGER.debug(\n                \"%s: Websocket creation failed: %s\", hide_email(email), exception_\n            )\n            return\n        return websocket\n\n    async def ws_handler(message_obj):\n        \"\"\"Handle websocket messages.\n\n        This allows push notifications from Alexa to update last_called\n        and media state.\n        \"\"\"\n\n        command = (\n            message_obj.json_payload[\"command\"]\n            if isinstance(message_obj.json_payload, dict)\n            and \"command\" in message_obj.json_payload\n            else None\n        )\n        json_payload = (\n            message_obj.json_payload[\"payload\"]\n            if isinstance(message_obj.json_payload, dict)\n            and \"payload\" in message_obj.json_payload\n            else None\n        )\n        existing_serials = _existing_serials(hass, login_obj)\n        seen_commands = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\n            \"websocket_commands\"\n        ]\n        coord = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"coordinator\"]\n        if command and json_payload:\n\n            _LOGGER.debug(\n                \"%s: Received websocket command: %s : %s\",\n                hide_email(email),\n                command,\n                hide_serial(json_payload),\n            )\n            serial = None\n            command_time = time.time()\n            if command not in seen_commands:\n                _LOGGER.debug(\"Adding %s to seen_commands: %s\", command, seen_commands)\n            seen_commands[command] = command_time\n\n            if (\n                \"dopplerId\" in json_payload\n                and \"deviceSerialNumber\" in json_payload[\"dopplerId\"]\n            ):\n                serial = json_payload[\"dopplerId\"][\"deviceSerialNumber\"]\n            elif (\n                \"key\" in json_payload\n                and \"entryId\" in json_payload[\"key\"]\n                and json_payload[\"key\"][\"entryId\"].find(\"#\") != -1\n            ):\n                serial = (json_payload[\"key\"][\"entryId\"]).split(\"#\")[2]\n                json_payload[\"key\"][\"serialNumber\"] = serial\n            else:\n                serial = None\n            if command == \"PUSH_ACTIVITY\":\n                #  Last_Alexa Updated\n                last_called = {\n                    \"serialNumber\": serial,\n                    \"timestamp\": json_payload[\"timestamp\"],\n                }\n                try:\n                    await coord.async_request_refresh()\n                    if serial and serial in existing_serials:\n                        await update_last_called(login_obj, last_called)\n                    async_dispatcher_send(\n                        hass,\n                        f\"{DOMAIN}_{hide_email(email)}\"[0:32],\n                        {\"push_activity\": json_payload},\n                    )\n                except (AlexapyConnectionError):\n                    # Catch case where activities doesn't report valid json\n                    pass\n            elif command in (\n                \"PUSH_AUDIO_PLAYER_STATE\",\n                \"PUSH_MEDIA_CHANGE\",\n                \"PUSH_MEDIA_PROGRESS_CHANGE\",\n            ):\n                # Player update/ Push_media from tune_in\n                if serial and serial in existing_serials:\n                    _LOGGER.debug(\n                        \"Updating media_player: %s\", hide_serial(json_payload)\n                    )\n                    async_dispatcher_send(\n                        hass,\n                        f\"{DOMAIN}_{hide_email(email)}\"[0:32],\n                        {\"player_state\": json_payload},\n                    )\n            elif command == \"PUSH_VOLUME_CHANGE\":\n                # Player volume update\n                if serial and serial in existing_serials:\n                    _LOGGER.debug(\n                        \"Updating media_player volume: %s\", hide_serial(json_payload)\n                    )\n                    async_dispatcher_send(\n                        hass,\n                        f\"{DOMAIN}_{hide_email(email)}\"[0:32],\n                        {\"player_state\": json_payload},\n                    )\n            elif command in (\n                \"PUSH_DOPPLER_CONNECTION_CHANGE\",\n                \"PUSH_EQUALIZER_STATE_CHANGE\",\n            ):\n                # Player availability update\n                if serial and serial in existing_serials:\n                    _LOGGER.debug(\n                        \"Updating media_player availability %s\",\n                        hide_serial(json_payload),\n                    )\n                    async_dispatcher_send(\n                        hass,\n                        f\"{DOMAIN}_{hide_email(email)}\"[0:32],\n                        {\"player_state\": json_payload},\n                    )\n            elif command == \"PUSH_BLUETOOTH_STATE_CHANGE\":\n                # Player bluetooth update\n                bt_event = json_payload[\"bluetoothEvent\"]\n                bt_success = json_payload[\"bluetoothEventSuccess\"]\n                if (\n                    serial\n                    and serial in existing_serials\n                    and bt_success\n                    and bt_event\n                    and bt_event in [\"DEVICE_CONNECTED\", \"DEVICE_DISCONNECTED\"]\n                ):\n                    _LOGGER.debug(\n                        \"Updating media_player bluetooth %s\", hide_serial(json_payload)\n                    )\n                    bluetooth_state = await update_bluetooth_state(login_obj, serial)\n                    # _LOGGER.debug(\"bluetooth_state %s\",\n                    #               hide_serial(bluetooth_state))\n                    if bluetooth_state:\n                        async_dispatcher_send(\n                            hass,\n                            f\"{DOMAIN}_{hide_email(email)}\"[0:32],\n                            {\"bluetooth_change\": bluetooth_state},\n                        )\n            elif command == \"PUSH_MEDIA_QUEUE_CHANGE\":\n                # Player availability update\n                if serial and serial in existing_serials:\n                    _LOGGER.debug(\n                        \"Updating media_player queue %s\", hide_serial(json_payload)\n                    )\n                    async_dispatcher_send(\n                        hass,\n                        f\"{DOMAIN}_{hide_email(email)}\"[0:32],\n                        {\"queue_state\": json_payload},\n                    )\n            elif command == \"PUSH_NOTIFICATION_CHANGE\":\n                # Player update\n                await process_notifications(login_obj)\n                if serial and serial in existing_serials:\n                    _LOGGER.debug(\n                        \"Updating mediaplayer notifications: %s\",\n                        hide_serial(json_payload),\n                    )\n                    async_dispatcher_send(\n                        hass,\n                        f\"{DOMAIN}_{hide_email(email)}\"[0:32],\n                        {\"notification_update\": json_payload},\n                    )\n            elif command in [\n                \"PUSH_DELETE_DOPPLER_ACTIVITIES\",  # delete Alexa history\n                \"PUSH_LIST_CHANGE\",  # clear a shopping list https://github.com/custom-components/alexa_media_player/issues/1190\n                \"PUSH_LIST_ITEM_CHANGE\",  # update shopping list\n                \"PUSH_CONTENT_FOCUS_CHANGE\",  # likely prime related refocus\n                \"PUSH_DEVICE_SETUP_STATE_CHANGE\",  # likely device changes mid setup\n                \"PUSH_MEDIA_PREFERENCE_CHANGE\",  # disliking or liking songs, https://github.com/custom-components/alexa_media_player/issues/1599\n            ]:\n                pass\n            else:\n                _LOGGER.warning(\n                    \"Unhandled command: %s with data %s. Please report at %s\",\n                    command,\n                    hide_serial(json_payload),\n                    ISSUE_URL,\n                )\n            if serial in existing_serials:\n                history = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\n                    \"websocket_activity\"\n                ][\"serials\"].get(serial)\n                if history is None or (\n                    history and command_time - history[len(history) - 1][1] > 2\n                ):\n                    history = [(command, command_time)]\n                else:\n                    history.append([command, command_time])\n                hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"websocket_activity\"][\n                    \"serials\"\n                ][serial] = history\n                events = []\n                for old_command, old_command_time in history:\n                    if (\n                        old_command\n                        in {\"PUSH_VOLUME_CHANGE\", \"PUSH_EQUALIZER_STATE_CHANGE\"}\n                        and command_time - old_command_time < 0.25\n                    ):\n                        events.append(\n                            (old_command, round(command_time - old_command_time, 2))\n                        )\n                    elif old_command in {\"PUSH_AUDIO_PLAYER_STATE\"}:\n                        # There is a potential false positive generated during this event\n                        events = []\n                if len(events) >= 4:\n                    _LOGGER.debug(\n                        \"%s: Detected potential DND websocket change with %s events %s\",\n                        hide_serial(serial),\n                        len(events),\n                        events,\n                    )\n                    await update_dnd_state(login_obj)\n            if (\n                serial\n                and serial not in existing_serials\n                and serial\n                not in (\n                    hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"excluded\"].keys()\n                )\n            ):\n                _LOGGER.debug(\"Discovered new media_player %s\", serial)\n                (hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"new_devices\"]) = True\n                coordinator = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email].get(\n                    \"coordinator\"\n                )\n                if coordinator:\n                    await coordinator.async_request_refresh()\n\n    async def ws_open_handler():\n        \"\"\"Handle websocket open.\"\"\"\n\n        email: str = login_obj.email\n        _LOGGER.debug(\"%s: Websocket successfully connected\", hide_email(email))\n        hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\n            \"websocketerror\"\n        ] = 0  # set errors to 0\n        hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\n            \"websocket_lastattempt\"\n        ] = time.time()\n\n    async def ws_close_handler():\n        \"\"\"Handle websocket close.\n\n        This should attempt to reconnect up to 5 times\n        \"\"\"\n\n        email: str = login_obj.email\n        if login_obj.close_requested:\n            _LOGGER.debug(\n                \"%s: Close requested; will not reconnect websocket\", hide_email(email)\n            )\n            return\n        if not login_obj.status.get(\"login_successful\"):\n            _LOGGER.debug(\n                \"%s: Login error; will not reconnect websocket\", hide_email(email)\n            )\n            return\n        errors: int = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"websocketerror\"]\n        delay: int = 5 * 2**errors\n        last_attempt = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\n            \"websocket_lastattempt\"\n        ]\n        now = time.time()\n        if (now - last_attempt) < delay:\n            return\n        websocket_enabled: bool = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\n            \"websocket\"\n        ]\n        while errors < 5 and not (websocket_enabled):\n            _LOGGER.debug(\n                \"%s: Websocket closed; reconnect #%i in %is\",\n                hide_email(email),\n                errors,\n                delay,\n            )\n            hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\n                \"websocket_lastattempt\"\n            ] = time.time()\n            websocket_enabled = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\n                \"websocket\"\n            ] = await ws_connect()\n            errors = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"websocketerror\"] = (\n                hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"websocketerror\"] + 1\n            )\n            delay = 5 * 2**errors\n            errors = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"websocketerror\"]\n            await asyncio.sleep(delay)\n        if not websocket_enabled:\n            _LOGGER.debug(\n                \"%s: Websocket closed; retries exceeded; polling\", hide_email(email)\n            )\n        coordinator = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email].get(\"coordinator\")\n        if coordinator:\n            coordinator.update_interval = timedelta(\n                seconds=scan_interval * 10 if websocket_enabled else scan_interval\n            )\n            await coordinator.async_request_refresh()\n\n    async def ws_error_handler(message):\n        \"\"\"Handle websocket error.\n\n        This currently logs the error.  In the future, this should invalidate\n        the websocket and determine if a reconnect should be done. By\n        specification, websockets will issue a close after every error.\n        \"\"\"\n        email: str = login_obj.email\n        errors = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"websocketerror\"]\n        _LOGGER.debug(\n            \"%s: Received websocket error #%i %s: type %s\",\n            hide_email(email),\n            errors,\n            message,\n            type(message),\n        )\n        hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"websocket\"] = None\n        if not login_obj.close_requested and (\n            login_obj.session.closed or message == \"<class 'aiohttp.streams.EofStream'>\"\n        ):\n            hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"websocketerror\"] = 5\n            _LOGGER.debug(\"%s: Immediate abort on EoFstream\", hide_email(email))\n            return\n        hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"websocketerror\"] = errors + 1\n\n    _LOGGER.debug(\"Setting up Alexa devices for %s\", hide_email(login_obj.email))\n    config = config_entry.data\n    email = config.get(CONF_EMAIL)\n    include = config.get(CONF_INCLUDE_DEVICES)\n    exclude = config.get(CONF_EXCLUDE_DEVICES)\n    scan_interval: float = (\n        config.get(CONF_SCAN_INTERVAL).total_seconds()\n        if isinstance(config.get(CONF_SCAN_INTERVAL), timedelta)\n        else config.get(CONF_SCAN_INTERVAL)\n    )\n    hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"login_obj\"] = login_obj\n    websocket_enabled = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\n        \"websocket\"\n    ] = await ws_connect()\n    coordinator = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email].get(\"coordinator\")\n    if coordinator is None:\n        _LOGGER.debug(\"%s: Creating coordinator\", hide_email(email))\n        hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\n            \"coordinator\"\n        ] = coordinator = DataUpdateCoordinator(\n            hass,\n            _LOGGER,\n            # Name of the data. For logging purposes.\n            name=\"alexa_media\",\n            update_method=async_update_data,\n            # Polling interval. Will only be polled if there are subscribers.\n            update_interval=timedelta(\n                seconds=scan_interval * 10 if websocket_enabled else scan_interval\n            ),\n        )\n    else:\n        _LOGGER.debug(\"%s: Reusing coordinator\", hide_email(email))\n        coordinator.update_interval = timedelta(\n            seconds=scan_interval * 10 if websocket_enabled else scan_interval\n        )\n    # Fetch initial data so we have data when entities subscribe\n    _LOGGER.debug(\"%s: Refreshing coordinator\", hide_email(email))\n    await coordinator.async_refresh()\n\n    hass.data[DATA_ALEXAMEDIA][\"services\"] = alexa_services = AlexaMediaServices(\n        hass, functions={\"update_last_called\": update_last_called}\n    )\n    await alexa_services.register()\n    return True\n\n\nasync def async_unload_entry(hass, entry) -> bool:\n    \"\"\"Unload a config entry.\"\"\"\n    email = entry.data[\"email\"]\n    _LOGGER.debug(\"Attempting to unload entry for %s\", hide_email(email))\n    for component in ALEXA_COMPONENTS + DEPENDENT_ALEXA_COMPONENTS:\n        _LOGGER.debug(\"Forwarding unload entry to %s\", component)\n        await hass.config_entries.async_forward_entry_unload(entry, component)\n    # notify has to be handled manually as the forward does not work yet\n    await notify_async_unload_entry(hass, entry)\n    await close_connections(hass, email)\n    for listener in hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][DATA_LISTENER]:\n        listener()\n    hass.data[DATA_ALEXAMEDIA][\"accounts\"].pop(email)\n    # Clean up config flows in progress\n    flows_to_remove = []\n    if hass.data[DATA_ALEXAMEDIA].get(\"config_flows\"):\n        for key, flow in hass.data[DATA_ALEXAMEDIA][\"config_flows\"].items():\n            if key.startswith(email) and flow:\n                _LOGGER.debug(\"Aborting flow %s %s\", key, flow)\n                flows_to_remove.append(key)\n                try:\n                    hass.config_entries.flow.async_abort(flow.get(\"flow_id\"))\n                except UnknownFlow:\n                    pass\n        for flow in flows_to_remove:\n            hass.data[DATA_ALEXAMEDIA][\"config_flows\"].pop(flow)\n    # Clean up hass.data\n    if not hass.data[DATA_ALEXAMEDIA].get(\"accounts\"):\n        _LOGGER.debug(\"Removing accounts data and services\")\n        hass.data[DATA_ALEXAMEDIA].pop(\"accounts\")\n        alexa_services = hass.data[DATA_ALEXAMEDIA].get(\"services\")\n        if alexa_services:\n            await alexa_services.unregister()\n            hass.data[DATA_ALEXAMEDIA].pop(\"services\")\n    if hass.data[DATA_ALEXAMEDIA].get(\"config_flows\") == {}:\n        _LOGGER.debug(\"Removing config_flows data\")\n        hass.components.persistent_notification.async_dismiss(\n            f\"alexa_media_{slugify(email)}{slugify((entry.data['url'])[7:])}\"\n        )\n        hass.data[DATA_ALEXAMEDIA].pop(\"config_flows\")\n    if not hass.data[DATA_ALEXAMEDIA]:\n        _LOGGER.debug(\"Removing alexa_media data structure\")\n        if hass.data.get(DATA_ALEXAMEDIA):\n            hass.data.pop(DATA_ALEXAMEDIA)\n    else:\n        _LOGGER.debug(\n            \"Unable to remove alexa_media data structure: %s\",\n            hass.data.get(DATA_ALEXAMEDIA),\n        )\n    _LOGGER.debug(\"Unloaded entry for %s\", hide_email(email))\n    return True\n\n\nasync def close_connections(hass, email: str) -> None:\n    \"\"\"Clear open aiohttp connections for email.\"\"\"\n    if (\n        email not in hass.data[DATA_ALEXAMEDIA][\"accounts\"]\n        or \"login_obj\" not in hass.data[DATA_ALEXAMEDIA][\"accounts\"][email]\n    ):\n        return\n    account_dict = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email]\n    login_obj = account_dict[\"login_obj\"]\n    await login_obj.save_cookiefile()\n    await login_obj.close()\n    _LOGGER.debug(\n        \"%s: Connection closed: %s\", hide_email(email), login_obj.session.closed\n    )\n\n\nasync def update_listener(hass, config_entry):\n    \"\"\"Update when config_entry options update.\"\"\"\n    account = config_entry.data\n    email = account.get(CONF_EMAIL)\n    reload_needed: bool = False\n    for key, old_value in hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\n        \"options\"\n    ].items():\n        new_value = config_entry.options.get(key)\n        if new_value is not None and new_value != old_value:\n            hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"options\"][key] = new_value\n            _LOGGER.debug(\n                \"Changing option %s from %s to %s\",\n                key,\n                old_value,\n                hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"options\"][key],\n            )\n            if key == CONF_EXTENDED_ENTITY_DISCOVERY:\n                reload_needed = True\n    if reload_needed:\n        await hass.config_entries.async_reload(config_entry.entry_id)\n\n\nasync def test_login_status(hass, config_entry, login) -> bool:\n    \"\"\"Test the login status and spawn requests for info.\"\"\"\n\n    _LOGGER.debug(\"Testing login status: %s\", login.status)\n    if login.status and login.status.get(\"login_successful\"):\n        return True\n    account = config_entry.data\n    _LOGGER.debug(\"Logging in: %s %s\", obfuscate(account), in_progess_instances(hass))\n    _LOGGER.debug(\"Login stats: %s\", login.stats)\n    message: str = f\"Reauthenticate {login.email} on the [Integrations](/config/integrations) page. \"\n    if login.stats.get(\"login_timestamp\") != datetime(1, 1, 1):\n        elaspsed_time: str = str(datetime.now() - login.stats.get(\"login_timestamp\"))\n        api_calls: int = login.stats.get(\"api_calls\")\n        message += f\"Relogin required after {elaspsed_time} and {api_calls} api calls.\"\n    hass.components.persistent_notification.async_create(\n        title=\"Alexa Media Reauthentication Required\",\n        message=message,\n        notification_id=f\"alexa_media_{slugify(login.email)}{slugify(login.url[7:])}\",\n    )\n    flow = hass.data[DATA_ALEXAMEDIA][\"config_flows\"].get(\n        f\"{account[CONF_EMAIL]} - {account[CONF_URL]}\"\n    )\n    if flow:\n        if flow.get(\"flow_id\") in in_progess_instances(hass):\n            _LOGGER.debug(\"Existing config flow detected\")\n            return False\n        _LOGGER.debug(\"Stopping orphaned config flow %s\", flow.get(\"flow_id\"))\n        try:\n            hass.config_entries.flow.async_abort(flow.get(\"flow_id\"))\n        except UnknownFlow:\n            pass\n        hass.data[DATA_ALEXAMEDIA][\"config_flows\"][\n            f\"{account[CONF_EMAIL]} - {account[CONF_URL]}\"\n        ] = None\n    _LOGGER.debug(\"Creating new config flow to login\")\n    hass.data[DATA_ALEXAMEDIA][\"config_flows\"][\n        f\"{account[CONF_EMAIL]} - {account[CONF_URL]}\"\n    ] = await hass.config_entries.flow.async_init(\n        DOMAIN,\n        context={\"source\": \"reauth\"},\n        data={\n            CONF_EMAIL: account[CONF_EMAIL],\n            CONF_PASSWORD: account[CONF_PASSWORD],\n            CONF_URL: account[CONF_URL],\n            CONF_DEBUG: account[CONF_DEBUG],\n            CONF_INCLUDE_DEVICES: account[CONF_INCLUDE_DEVICES],\n            CONF_EXCLUDE_DEVICES: account[CONF_EXCLUDE_DEVICES],\n            CONF_SCAN_INTERVAL: account[CONF_SCAN_INTERVAL].total_seconds()\n            if isinstance(account[CONF_SCAN_INTERVAL], timedelta)\n            else account[CONF_SCAN_INTERVAL],\n            CONF_OTPSECRET: account.get(CONF_OTPSECRET, \"\"),\n        },\n    )\n    return False\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/alarm_control_panel.py",
    "content": "\"\"\"\nAlexa Devices Alarm Control Panel using Guard Mode.\n\nSPDX-License-Identifier: Apache-2.0\n\nFor more details about this platform, please refer to the documentation at\nhttps://community.home-assistant.io/t/echo-devices-alexa-as-media-player-testers-needed/58639\n\"\"\"\nfrom asyncio import sleep\nimport logging\nfrom typing import Dict, List, Optional, Text  # noqa pylint: disable=unused-import\n\nfrom alexapy import hide_email, hide_serial\nfrom homeassistant.const import (\n    CONF_EMAIL,\n    STATE_ALARM_ARMED_AWAY,\n    STATE_ALARM_DISARMED,\n    STATE_UNAVAILABLE,\n)\nfrom homeassistant.exceptions import ConfigEntryNotReady\nfrom homeassistant.helpers.update_coordinator import CoordinatorEntity\n\nfrom .alexa_entity import parse_guard_state_from_coordinator\nfrom .alexa_media import AlexaMedia\nfrom .const import (\n    CONF_EXCLUDE_DEVICES,\n    CONF_INCLUDE_DEVICES,\n    CONF_QUEUE_DELAY,\n    DATA_ALEXAMEDIA,\n    DEFAULT_QUEUE_DELAY,\n    DOMAIN as ALEXA_DOMAIN,\n)\nfrom .helpers import _catch_login_errors, add_devices\n\ntry:\n    from homeassistant.components.alarm_control_panel import (\n        AlarmControlPanelEntity as AlarmControlPanel,\n    )\nexcept ImportError:\n    from homeassistant.components.alarm_control_panel import AlarmControlPanel\n\n\n_LOGGER = logging.getLogger(__name__)\n\nDEPENDENCIES = [ALEXA_DOMAIN]\n\n\nasync def async_setup_platform(\n    hass, config, add_devices_callback, discovery_info=None\n) -> bool:\n    \"\"\"Set up the Alexa alarm control panel platform.\"\"\"\n    devices = []  # type: List[AlexaAlarmControlPanel]\n    account = config[CONF_EMAIL] if config else discovery_info[\"config\"][CONF_EMAIL]\n    include_filter = config.get(CONF_INCLUDE_DEVICES, [])\n    exclude_filter = config.get(CONF_EXCLUDE_DEVICES, [])\n    account_dict = hass.data[DATA_ALEXAMEDIA][\"accounts\"][account]\n    guard_media_players = {}\n    for key, device in account_dict[\"devices\"][\"media_player\"].items():\n        if key not in account_dict[\"entities\"][\"media_player\"]:\n            _LOGGER.debug(\n                \"%s: Media player %s not loaded yet; delaying load\",\n                hide_email(account),\n                hide_serial(key),\n            )\n            raise ConfigEntryNotReady\n        if \"GUARD_EARCON\" in device[\"capabilities\"]:\n            guard_media_players[key] = account_dict[\"entities\"][\"media_player\"][key]\n    if \"alarm_control_panel\" not in (account_dict[\"entities\"]):\n        (\n            hass.data[DATA_ALEXAMEDIA][\"accounts\"][account][\"entities\"][\n                \"alarm_control_panel\"\n            ]\n        ) = {}\n    alexa_client: Optional[AlexaAlarmControlPanel] = None\n    guard_entities = account_dict.get(\"devices\", {}).get(\"guard\", [])\n    if guard_entities:\n        alexa_client = AlexaAlarmControlPanel(\n            account_dict[\"login_obj\"],\n            account_dict[\"coordinator\"],\n            guard_entities[0],\n            guard_media_players,\n        )\n    else:\n        _LOGGER.debug(\"%s: No Alexa Guard entity found\", account)\n    if not (alexa_client and alexa_client.unique_id):\n        _LOGGER.debug(\n            \"%s: Skipping creation of uninitialized device: %s\",\n            hide_email(account),\n            alexa_client,\n        )\n    elif alexa_client.unique_id not in (\n        account_dict[\"entities\"][\"alarm_control_panel\"]\n    ):\n        devices.append(alexa_client)\n        (\n            hass.data[DATA_ALEXAMEDIA][\"accounts\"][account][\"entities\"][\n                \"alarm_control_panel\"\n            ][alexa_client.unique_id]\n        ) = alexa_client\n    else:\n        _LOGGER.debug(\n            \"%s: Skipping already added device: %s\", hide_email(account), alexa_client\n        )\n    return await add_devices(\n        hide_email(account),\n        devices,\n        add_devices_callback,\n        include_filter,\n        exclude_filter,\n    )\n\n\nasync def async_setup_entry(hass, config_entry, async_add_devices):\n    \"\"\"Set up the Alexa alarm control panel platform by config_entry.\"\"\"\n    return await async_setup_platform(\n        hass, config_entry.data, async_add_devices, discovery_info=None\n    )\n\n\nasync def async_unload_entry(hass, entry) -> bool:\n    \"\"\"Unload a config entry.\"\"\"\n    account = entry.data[CONF_EMAIL]\n    _LOGGER.debug(\"Attempting to unload alarm control panel\")\n    account_dict = hass.data[DATA_ALEXAMEDIA][\"accounts\"][account]\n    for device in account_dict[\"entities\"][\"alarm_control_panel\"].values():\n        _LOGGER.debug(\"Removing %s\", device)\n        await device.async_remove()\n    return True\n\n\nclass AlexaAlarmControlPanel(AlarmControlPanel, AlexaMedia, CoordinatorEntity):\n    \"\"\"Implementation of Alexa Media Player alarm control panel.\"\"\"\n\n    def __init__(self, login, coordinator, guard_entity, media_players=None) -> None:\n        # pylint: disable=unexpected-keyword-arg\n        \"\"\"Initialize the Alexa device.\"\"\"\n        AlexaMedia.__init__(self, None, login)\n        CoordinatorEntity.__init__(self, coordinator)\n        _LOGGER.debug(\"%s: Initiating alarm control panel\", hide_email(login.email))\n        # AlexaAPI requires a AlexaClient object, need to clean this up\n\n        # Guard info\n        self._appliance_id = guard_entity[\"appliance_id\"]\n        self._guard_entity_id = guard_entity[\"id\"]\n        self._friendly_name = \"Alexa Guard \" + self._appliance_id[-5:]\n        self._media_players = {} or media_players\n        self._attrs: Dict[Text, Text] = {}\n        _LOGGER.debug(\n            \"%s: Guard Discovered %s: %s %s\",\n            self.account,\n            self._friendly_name,\n            hide_serial(self._appliance_id),\n            hide_serial(self._guard_entity_id),\n        )\n\n    @_catch_login_errors\n    async def _async_alarm_set(self, command: Text = \"\", code=None) -> None:\n        # pylint: disable=unexpected-keyword-arg\n        \"\"\"Send command.\"\"\"\n        try:\n            if not self.enabled:\n                return\n        except AttributeError:\n            pass\n        if command not in (STATE_ALARM_ARMED_AWAY, STATE_ALARM_DISARMED):\n            _LOGGER.error(\"Invalid command: %s\", command)\n            return\n        command_map = {STATE_ALARM_ARMED_AWAY: \"AWAY\", STATE_ALARM_DISARMED: \"HOME\"}\n        available_media_players = list(\n            filter(lambda x: x.state != STATE_UNAVAILABLE, self._media_players.values())\n        )\n        if available_media_players:\n            _LOGGER.debug(\"Sending guard command to: %s\", available_media_players[0])\n            available_media_players[0].check_login_changes()\n            await available_media_players[0].alexa_api.set_guard_state(\n                self._appliance_id.split(\"_\")[2],\n                command_map[command],\n                queue_delay=self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][self.email][\n                    \"options\"\n                ].get(CONF_QUEUE_DELAY, DEFAULT_QUEUE_DELAY),\n            )\n            await sleep(2)  # delay\n        else:\n            _LOGGER.debug(\"Performing static guard command\")\n            await self.alexa_api.static_set_guard_state(\n                self._login, self._guard_entity_id, command\n            )\n        await self.coordinator.async_request_refresh()\n\n    async def async_alarm_disarm(self, code=None) -> None:\n        # pylint: disable=unexpected-keyword-arg\n        \"\"\"Send disarm command.\"\"\"\n        await self._async_alarm_set(STATE_ALARM_DISARMED)\n\n    async def async_alarm_arm_away(self, code=None) -> None:\n        \"\"\"Send arm away command.\"\"\"\n        # pylint: disable=unexpected-keyword-arg\n        await self._async_alarm_set(STATE_ALARM_ARMED_AWAY)\n\n    @property\n    def unique_id(self):\n        \"\"\"Return the unique ID.\"\"\"\n        return self._guard_entity_id\n\n    @property\n    def name(self):\n        \"\"\"Return the name of the device.\"\"\"\n        return self._friendly_name\n\n    @property\n    def state(self):\n        \"\"\"Return the state of the device.\"\"\"\n        _state = parse_guard_state_from_coordinator(\n            self.coordinator, self._guard_entity_id\n        )\n        if _state == \"ARMED_AWAY\":\n            return STATE_ALARM_ARMED_AWAY\n        elif _state == \"ARMED_STAY\":\n            return STATE_ALARM_DISARMED\n        else:\n            return STATE_ALARM_DISARMED\n\n    @property\n    def supported_features(self) -> int:\n        \"\"\"Return the list of supported features.\"\"\"\n        try:\n            from homeassistant.components.alarm_control_panel import (\n                SUPPORT_ALARM_ARM_AWAY,\n            )\n        except ImportError:\n            return 0\n        return SUPPORT_ALARM_ARM_AWAY\n\n    @property\n    def assumed_state(self) -> bool:\n        last_refresh_success = (\n            self.coordinator.data and self._guard_entity_id in self.coordinator.data\n        )\n        return not last_refresh_success\n\n    @property\n    def extra_state_attributes(self):\n        \"\"\"Return the state attributes.\"\"\"\n        return self._attrs\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/alexa_entity.py",
    "content": "\"\"\"\nAlexa Devices Sensors.\n\nSPDX-License-Identifier: Apache-2.0\n\nFor more details about this platform, please refer to the documentation at\nhttps://community.home-assistant.io/t/echo-devices-alexa-as-media-player-testers-needed/58639\n\"\"\"\nfrom datetime import datetime\nimport json\nimport logging\nimport re\nfrom typing import Any, Dict, List, Optional, Text, Tuple, TypedDict, Union\n\nfrom alexapy import AlexaAPI, AlexaLogin, hide_serial\nfrom homeassistant.helpers.update_coordinator import DataUpdateCoordinator\n\n_LOGGER = logging.getLogger(__name__)\n\n\ndef has_capability(\n    appliance: Dict[Text, Any], interface_name: Text, property_name: Text\n) -> bool:\n    \"\"\"Determine if an appliance from the Alexa network details offers a particular interface with enough support that is worth adding to Home Assistant.\n\n    Args:\n        appliance(Dict[Text, Any]): An appliance from a call to AlexaAPI.get_network_details\n        interface_name(Text): One of the interfaces documented by the Alexa Smart Home Skills API\n        property_name(Text): The property that matches the interface name.\n\n    \"\"\"\n    for cap in appliance[\"capabilities\"]:\n        props = cap.get(\"properties\")\n        if (\n            cap[\"interfaceName\"] == interface_name\n            and props\n            and (props[\"retrievable\"] or props[\"proactivelyReported\"])\n        ):\n            for prop in props[\"supported\"]:\n                if prop[\"name\"] == property_name:\n                    return True\n    return False\n\n\ndef is_hue_v1(appliance: Dict[Text, Any]) -> bool:\n    \"\"\"Determine if an appliance is managed via the Philips Hue v1 Hub.\n\n    This check catches old Philips Hue bulbs and hubs, but critically, it also catches things pretending to be older\n    Philips Hue bulbs and hubs. This includes things exposed by HA to Alexa using the emulated_hue integration.\n    \"\"\"\n    return appliance.get(\"manufacturerName\") == \"Royal Philips Electronics\"\n\n\ndef is_local(appliance: Dict[Text, Any]) -> bool:\n    \"\"\"Test whether locally connected.\n\n    This is mainly present to prevent loops with the official Alexa integration.\n    There is probably a better way to prevent that, but this works.\n    \"\"\"\n\n    if appliance.get(\"connectedVia\"):\n        # connectedVia is a flag that determines which Echo devices holds the connection. Its blank for\n        # skill derived devices and includes an Echo name for zigbee and local devices.\n        return True\n\n    # This catches the Echo/AVS devices. connectedVia isn't reliable in this case.\n    # Only the first appears to get that set.\n    if \"ALEXA_VOICE_ENABLED\" in appliance.get(\"applianceTypes\", []):\n        namespace = appliance.get(\"driverIdentity\", {}).get(\"namespace\", \"\")\n        return namespace and namespace != \"SKILL\"\n\n    # Zigbee devices are guaranteed to be local and have a particular pattern of id\n    zigbee_pattern = re.compile(\n        \"AAA_SonarCloudService_([0-9A-F][0-9A-F]:){7}[0-9A-F][0-9A-F]\", flags=re.I\n    )\n    return zigbee_pattern.fullmatch(appliance.get(\"applianceId\", \"\")) is not None\n\n\ndef is_alexa_guard(appliance: Dict[Text, Any]) -> bool:\n    \"\"\"Is the given appliance the guard alarm system of an echo.\"\"\"\n    return appliance[\"modelName\"] == \"REDROCK_GUARD_PANEL\" and has_capability(\n        appliance, \"Alexa.SecurityPanelController\", \"armState\"\n    )\n\n\ndef is_temperature_sensor(appliance: Dict[Text, Any]) -> bool:\n    \"\"\"Is the given appliance the temperature sensor of an Echo.\"\"\"\n    return is_local(appliance) and has_capability(\n        appliance, \"Alexa.TemperatureSensor\", \"temperature\"\n    )\n\n\ndef is_light(appliance: Dict[Text, Any]) -> bool:\n    \"\"\"Is the given appliance a light controlled locally by an Echo.\"\"\"\n    return (\n        is_local(appliance)\n        and \"LIGHT\" in appliance[\"applianceTypes\"]\n        and has_capability(appliance, \"Alexa.PowerController\", \"powerState\")\n    )\n\n\ndef get_friendliest_name(appliance: Dict[Text, Any]) -> Text:\n    \"\"\"Find the best friendly name. Alexa seems to store manual renames in aliases. Prefer that one.\"\"\"\n    aliases = appliance.get(\"aliases\", [])\n    for alias in aliases:\n        friendly = alias.get(\"friendlyName\")\n        if friendly:\n            return friendly\n    return appliance[\"friendlyName\"]\n\n\ndef get_device_serial(appliance: Dict[Text, Any]) -> Optional[Text]:\n    \"\"\"Find the device serial id if it is present.\"\"\"\n    alexa_device_id_list = appliance.get(\"alexaDeviceIdentifierList\", [])\n    for alexa_device_id in alexa_device_id_list:\n        if isinstance(alexa_device_id, dict):\n            return alexa_device_id.get(\"dmsDeviceSerialNumber\")\n    return None\n\n\nclass AlexaEntity(TypedDict):\n    \"\"\"Class for Alexaentity.\"\"\"\n\n    id: Text\n    appliance_id: Text\n    name: Text\n    is_hue_v1: bool\n\n\nclass AlexaLightEntity(AlexaEntity):\n    \"\"\"Class for AlexaLightEntity.\"\"\"\n\n    brightness: bool\n    color: bool\n    color_temperature: bool\n\n\nclass AlexaTemperatureEntity(AlexaEntity):\n    \"\"\"Class for AlexaTemperatureEntity.\"\"\"\n\n    device_serial: Text\n\n\nclass AlexaEntities(TypedDict):\n    \"\"\"Class for holding entities.\"\"\"\n\n    light: List[AlexaLightEntity]\n    guard: List[AlexaEntity]\n    temperature: List[AlexaTemperatureEntity]\n\n\ndef parse_alexa_entities(network_details: Optional[Dict[Text, Any]]) -> AlexaEntities:\n    \"\"\"Turn the network details into a list of useful entities with the important details extracted.\"\"\"\n    lights = []\n    guards = []\n    temperature_sensors = []\n    location_details = network_details[\"locationDetails\"][\"locationDetails\"]\n    for location in location_details.values():\n        amazon_bridge_details = location[\"amazonBridgeDetails\"][\"amazonBridgeDetails\"]\n        for bridge in amazon_bridge_details.values():\n            appliance_details = bridge[\"applianceDetails\"][\"applianceDetails\"]\n            for appliance in appliance_details.values():\n                processed_appliance = {\n                    \"id\": appliance[\"entityId\"],\n                    \"appliance_id\": appliance[\"applianceId\"],\n                    \"name\": get_friendliest_name(appliance),\n                    \"is_hue_v1\": is_hue_v1(appliance),\n                }\n                if is_alexa_guard(appliance):\n                    guards.append(processed_appliance)\n                elif is_temperature_sensor(appliance):\n                    serial = get_device_serial(appliance)\n                    processed_appliance[\"device_serial\"] = (\n                        serial if serial else appliance[\"entityId\"]\n                    )\n                    temperature_sensors.append(processed_appliance)\n                elif is_light(appliance):\n                    processed_appliance[\"brightness\"] = has_capability(\n                        appliance, \"Alexa.BrightnessController\", \"brightness\"\n                    )\n                    processed_appliance[\"color\"] = has_capability(\n                        appliance, \"Alexa.ColorController\", \"color\"\n                    )\n                    processed_appliance[\"color_temperature\"] = has_capability(\n                        appliance,\n                        \"Alexa.ColorTemperatureController\",\n                        \"colorTemperatureInKelvin\",\n                    )\n                    lights.append(processed_appliance)\n\n    return {\"light\": lights, \"guard\": guards, \"temperature\": temperature_sensors}\n\n\nclass AlexaCapabilityState(TypedDict):\n    \"\"\"Class for AlexaCapabilityState.\"\"\"\n\n    name: Text\n    namespace: Text\n    value: Union[int, Text, TypedDict]\n\n\nAlexaEntityData = Dict[Text, List[AlexaCapabilityState]]\n\n\nasync def get_entity_data(\n    login_obj: AlexaLogin, entity_ids: List[Text]\n) -> AlexaEntityData:\n    \"\"\"Get and process the entity data into a more usable format.\"\"\"\n\n    entities = {}\n    if entity_ids:\n        raw = await AlexaAPI.get_entity_state(login_obj, entity_ids=entity_ids)\n        device_states = raw.get(\"deviceStates\", []) if isinstance(raw, dict) else None\n        if device_states:\n            for device_state in device_states:\n                entity_id = device_state.get(\"entity\", {}).get(\"entityId\")\n                if entity_id:\n                    entities[entity_id] = []\n                    cap_states = device_state.get(\"capabilityStates\", [])\n                    for cap_state in cap_states:\n                        entities[entity_id].append(json.loads(cap_state))\n    return entities\n\n\ndef parse_temperature_from_coordinator(\n    coordinator: DataUpdateCoordinator, entity_id: Text\n) -> Optional[Text]:\n    \"\"\"Get the temperature of an entity from the coordinator data.\"\"\"\n    value = parse_value_from_coordinator(\n        coordinator, entity_id, \"Alexa.TemperatureSensor\", \"temperature\"\n    )\n    return value.get(\"value\") if value and \"value\" in value else None\n\n\ndef parse_brightness_from_coordinator(\n    coordinator: DataUpdateCoordinator, entity_id: Text, since: datetime\n) -> Optional[int]:\n    \"\"\"Get the brightness in the range 0-100.\"\"\"\n    return parse_value_from_coordinator(\n        coordinator, entity_id, \"Alexa.BrightnessController\", \"brightness\", since\n    )\n\n\ndef parse_color_temp_from_coordinator(\n    coordinator: DataUpdateCoordinator, entity_id: Text, since: datetime\n) -> Optional[int]:\n    \"\"\"Get the color temperature in kelvin\"\"\"\n    return parse_value_from_coordinator(\n        coordinator,\n        entity_id,\n        \"Alexa.ColorTemperatureController\",\n        \"colorTemperatureInKelvin\",\n        since,\n    )\n\n\ndef parse_color_from_coordinator(\n    coordinator: DataUpdateCoordinator, entity_id: Text, since: datetime\n) -> Optional[Tuple[float, float, float]]:\n    \"\"\"Get the color as a tuple of (hue, saturation, brightness)\"\"\"\n    value = parse_value_from_coordinator(\n        coordinator, entity_id, \"Alexa.ColorController\", \"color\", since\n    )\n    if value is not None:\n        hue = value.get(\"hue\", 0)\n        saturation = value.get(\"saturation\", 0)\n        return hue, saturation, 1\n    return None\n\n\ndef parse_power_from_coordinator(\n    coordinator: DataUpdateCoordinator, entity_id: Text, since: datetime\n) -> Optional[Text]:\n    \"\"\"Get the power state of the entity.\"\"\"\n    return parse_value_from_coordinator(\n        coordinator, entity_id, \"Alexa.PowerController\", \"powerState\", since\n    )\n\n\ndef parse_guard_state_from_coordinator(\n    coordinator: DataUpdateCoordinator, entity_id: Text\n) -> Optional[Text]:\n    \"\"\"Get the guard state from the coordinator data.\"\"\"\n    return parse_value_from_coordinator(\n        coordinator, entity_id, \"Alexa.SecurityPanelController\", \"armState\"\n    )\n\n\ndef parse_value_from_coordinator(\n    coordinator: DataUpdateCoordinator,\n    entity_id: Text,\n    namespace: Text,\n    name: Text,\n    since: Optional[datetime] = None,\n) -> Any:\n    \"\"\"Parse out values from coordinator for Alexa Entities.\"\"\"\n    if coordinator.data and entity_id in coordinator.data:\n        for cap_state in coordinator.data[entity_id]:\n            if (\n                cap_state.get(\"namespace\") == namespace\n                and cap_state.get(\"name\") == name\n            ):\n                if is_cap_state_still_acceptable(cap_state, since):\n                    return cap_state.get(\"value\")\n                else:\n                    _LOGGER.debug(\n                        \"Coordinator data for %s is too old to be returned.\",\n                        hide_serial(entity_id),\n                    )\n                    return None\n    else:\n        _LOGGER.debug(\"Coordinator has no data for %s\", hide_serial(entity_id))\n    return None\n\n\ndef is_cap_state_still_acceptable(\n    cap_state: Dict[Text, Any], since: Optional[datetime]\n) -> bool:\n    \"\"\"Determine if a particular capability state is still usable given its age.\"\"\"\n    if since is not None:\n        formatted_time_of_sample = cap_state.get(\"timeOfSample\")\n        if formatted_time_of_sample:\n            try:\n                time_of_sample = datetime.strptime(\n                    formatted_time_of_sample, \"%Y-%m-%dT%H:%M:%S.%f%z\"\n                )\n                return time_of_sample >= since\n            except ValueError:\n                pass\n    return True\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/alexa_media.py",
    "content": "\"\"\"\nAlexa Devices Base Class.\n\nSPDX-License-Identifier: Apache-2.0\n\nFor more details about this platform, please refer to the documentation at\nhttps://community.home-assistant.io/t/echo-devices-alexa-as-media-player-testers-needed/58639\n\"\"\"\n\nimport logging\nfrom typing import Dict, Text  # noqa pylint: disable=unused-import\n\nfrom alexapy import AlexaAPI, hide_email\n\nfrom .const import DATA_ALEXAMEDIA\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass AlexaMedia:\n    \"\"\"Implementation of Alexa Media Base object.\"\"\"\n\n    def __init__(self, device, login) -> None:\n        # pylint: disable=unexpected-keyword-arg\n        \"\"\"Initialize the Alexa device.\"\"\"\n\n        # Class info\n        self._login = login\n        self.alexa_api = AlexaAPI(device, login)\n        self.email = login.email\n        self.account = hide_email(login.email)\n\n    def check_login_changes(self):\n        \"\"\"Update Login object if it has changed.\"\"\"\n        # _LOGGER.debug(\"Checking if Login object has changed\")\n        try:\n            login = self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][self.email][\"login_obj\"]\n        except (AttributeError, KeyError):\n            return\n        # _LOGGER.debug(\"Login object %s closed status: %s\", login, login.session.closed)\n        # _LOGGER.debug(\n        #     \"Alexaapi %s closed status: %s\",\n        #     self.alexa_api,\n        #     self.alexa_api._session.closed,\n        # )\n        if self.alexa_api.update_login(login):\n            _LOGGER.debug(\"Login object has changed; updating\")\n            self._login = login\n            self.email = login.email\n            self.account = hide_email(login.email)\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/config_flow.py",
    "content": "\"\"\"\nAlexa Config Flow.\n\nSPDX-License-Identifier: Apache-2.0\n\nFor more details about this platform, please refer to the documentation at\nhttps://community.home-assistant.io/t/echo-devices-alexa-as-media-player-testers-needed/58639\n\"\"\"\nfrom asyncio import sleep\nfrom collections import OrderedDict\nimport datetime\nfrom datetime import timedelta\nfrom functools import reduce\nimport logging\nfrom typing import Any, Dict, List, Optional, Text\n\nfrom aiohttp import ClientConnectionError, ClientSession, web, web_response\nfrom aiohttp.web_exceptions import HTTPBadRequest\nfrom alexapy import (\n    AlexaLogin,\n    AlexaProxy,\n    AlexapyConnectionError,\n    AlexapyPyotpInvalidKey,\n    __version__ as alexapy_version,\n    hide_email,\n    obfuscate,\n)\nfrom homeassistant import config_entries\nfrom homeassistant.components.http.view import HomeAssistantView\nfrom homeassistant.const import CONF_EMAIL, CONF_PASSWORD, CONF_SCAN_INTERVAL, CONF_URL\nfrom homeassistant.core import callback\nfrom homeassistant.data_entry_flow import UnknownFlow\nfrom homeassistant.exceptions import Unauthorized\nfrom homeassistant.helpers import config_validation as cv\nfrom homeassistant.helpers.network import NoURLAvailableError, get_url\nfrom homeassistant.util import slugify\nimport httpx\nimport voluptuous as vol\nfrom yarl import URL\n\nfrom .const import (\n    AUTH_CALLBACK_NAME,\n    AUTH_CALLBACK_PATH,\n    AUTH_PROXY_NAME,\n    AUTH_PROXY_PATH,\n    CONF_DEBUG,\n    CONF_EXCLUDE_DEVICES,\n    CONF_EXTENDED_ENTITY_DISCOVERY,\n    CONF_HASS_URL,\n    CONF_INCLUDE_DEVICES,\n    CONF_OAUTH,\n    CONF_OTPSECRET,\n    CONF_QUEUE_DELAY,\n    CONF_SECURITYCODE,\n    CONF_TOTP_REGISTER,\n    DATA_ALEXAMEDIA,\n    DEFAULT_EXTENDED_ENTITY_DISCOVERY,\n    DEFAULT_QUEUE_DELAY,\n    DOMAIN,\n    ISSUE_URL,\n    STARTUP,\n)\nfrom .helpers import calculate_uuid\n\n_LOGGER = logging.getLogger(__name__)\n\n\n@callback\ndef configured_instances(hass):\n    \"\"\"Return a set of configured Alexa Media instances.\"\"\"\n    return {entry.title for entry in hass.config_entries.async_entries(DOMAIN)}\n\n\n@callback\ndef in_progess_instances(hass):\n    \"\"\"Return a set of in progress Alexa Media flows.\"\"\"\n    return {entry[\"flow_id\"] for entry in hass.config_entries.flow.async_progress()}\n\n\n@config_entries.HANDLERS.register(DOMAIN)\nclass AlexaMediaFlowHandler(config_entries.ConfigFlow):\n    \"\"\"Handle a Alexa Media config flow.\"\"\"\n\n    VERSION = 1\n    CONNECTION_CLASS = config_entries.CONN_CLASS_CLOUD_POLL\n    proxy: AlexaProxy = None\n    proxy_view: \"AlexaMediaAuthorizationProxyView\" = None\n\n    def _update_ord_dict(self, old_dict: OrderedDict, new_dict: dict) -> OrderedDict:\n        result: OrderedDict = OrderedDict()\n        for k, v in old_dict.items():\n            for key, value in new_dict.items():\n                if k == key:\n                    result.update([(key, value)])\n                    break\n            if k not in result:\n                result.update([(k, v)])\n        return result\n\n    def __init__(self):\n        \"\"\"Initialize the config flow.\"\"\"\n        if self.hass and not self.hass.data.get(DATA_ALEXAMEDIA):\n            _LOGGER.info(STARTUP)\n            _LOGGER.info(\"Loaded alexapy==%s\", alexapy_version)\n        self.login = None\n        self.securitycode: Optional[str] = None\n        self.automatic_steps: int = 0\n        self.config = OrderedDict()\n        self.proxy_schema = None\n        self.data_schema = OrderedDict(\n            [\n                (vol.Required(CONF_EMAIL), str),\n                (vol.Required(CONF_PASSWORD), str),\n                (vol.Required(CONF_URL, default=\"amazon.com\"), str),\n                (vol.Optional(CONF_SECURITYCODE), str),\n                (vol.Optional(CONF_OTPSECRET), str),\n                (vol.Optional(CONF_DEBUG, default=False), bool),\n                (vol.Optional(CONF_INCLUDE_DEVICES, default=\"\"), str),\n                (vol.Optional(CONF_EXCLUDE_DEVICES, default=\"\"), str),\n                (vol.Optional(CONF_SCAN_INTERVAL, default=60), int),\n            ]\n        )\n        self.totp_register = OrderedDict(\n            [(vol.Optional(CONF_TOTP_REGISTER, default=False), bool)]\n        )\n\n    async def async_step_import(self, import_config):\n        \"\"\"Import a config entry from configuration.yaml.\"\"\"\n        return await self.async_step_user_legacy(import_config)\n\n    async def async_step_user(self, user_input=None):\n        \"\"\"Provide a proxy for login.\"\"\"\n        self._save_user_input_to_config(user_input=user_input)\n        try:\n            hass_url: str = get_url(self.hass, prefer_external=True)\n        except NoURLAvailableError:\n            hass_url = \"\"\n        self.proxy_schema = OrderedDict(\n            [\n                (\n                    vol.Required(CONF_EMAIL, default=self.config.get(CONF_EMAIL, \"\")),\n                    str,\n                ),\n                (\n                    vol.Required(\n                        CONF_PASSWORD, default=self.config.get(CONF_PASSWORD, \"\")\n                    ),\n                    str,\n                ),\n                (\n                    vol.Required(\n                        CONF_URL, default=self.config.get(CONF_URL, \"amazon.com\")\n                    ),\n                    str,\n                ),\n                (\n                    vol.Required(\n                        CONF_HASS_URL,\n                        default=self.config.get(CONF_HASS_URL, hass_url),\n                    ),\n                    str,\n                ),\n                (\n                    vol.Optional(\n                        CONF_OTPSECRET, default=self.config.get(CONF_OTPSECRET, \"\")\n                    ),\n                    str,\n                ),\n                (\n                    vol.Optional(\n                        CONF_DEBUG, default=self.config.get(CONF_DEBUG, False)\n                    ),\n                    bool,\n                ),\n                (\n                    vol.Optional(\n                        CONF_INCLUDE_DEVICES,\n                        default=self.config.get(CONF_INCLUDE_DEVICES, \"\"),\n                    ),\n                    str,\n                ),\n                (\n                    vol.Optional(\n                        CONF_EXCLUDE_DEVICES,\n                        default=self.config.get(CONF_EXCLUDE_DEVICES, \"\"),\n                    ),\n                    str,\n                ),\n                (\n                    vol.Optional(\n                        CONF_SCAN_INTERVAL,\n                        default=self.config.get(CONF_SCAN_INTERVAL, 60),\n                    ),\n                    int,\n                ),\n            ]\n        )\n        if not user_input:\n            return self.async_show_form(\n                step_id=\"user\",\n                data_schema=vol.Schema(self.proxy_schema),\n                description_placeholders={\"message\": \"\"},\n            )\n        if self.login is None:\n            try:\n                self.login = self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][\n                    self.config[CONF_EMAIL]\n                ].get(\"login_obj\")\n            except KeyError:\n                self.login = None\n        try:\n            if not self.login or self.login.session.closed:\n                _LOGGER.debug(\"Creating new login\")\n                uuid_dict = await calculate_uuid(\n                    self.hass, self.config.get(CONF_EMAIL), self.config[CONF_URL]\n                )\n                uuid = uuid_dict[\"uuid\"]\n                self.login = AlexaLogin(\n                    url=self.config[CONF_URL],\n                    email=self.config.get(CONF_EMAIL, \"\"),\n                    password=self.config.get(CONF_PASSWORD, \"\"),\n                    outputpath=self.hass.config.path,\n                    debug=self.config[CONF_DEBUG],\n                    otp_secret=self.config.get(CONF_OTPSECRET, \"\"),\n                    oauth=self.config.get(CONF_OAUTH, {}),\n                    uuid=uuid,\n                    oauth_login=True,\n                )\n            else:\n                _LOGGER.debug(\"Using existing login\")\n                if self.config.get(CONF_EMAIL):\n                    self.login.email = self.config.get(CONF_EMAIL)\n                if self.config.get(CONF_PASSWORD):\n                    self.login.password = self.config.get(CONF_PASSWORD)\n                if self.config.get(CONF_OTPSECRET):\n                    self.login.set_totp(self.config.get(CONF_OTPSECRET, \"\"))\n        except AlexapyPyotpInvalidKey:\n            return self.async_show_form(\n                step_id=\"user\",\n                errors={\"base\": \"2fa_key_invalid\"},\n                description_placeholders={\"message\": \"\"},\n            )\n        hass_url: str = user_input.get(CONF_HASS_URL)\n        hass_url_valid: bool = False\n        async with ClientSession() as session:\n            try:\n                async with session.get(hass_url) as resp:\n                    hass_url_valid = resp.status == 200\n            except ClientConnectionError:\n                hass_url_valid = False\n        if not hass_url_valid:\n            _LOGGER.debug(\n                \"Unable to connect to provided Home Assistant url: %s\", hass_url\n            )\n            return self.async_show_form(\n                step_id=\"user\",\n                errors={\"base\": \"hass_url_invalid\"},\n                description_placeholders={\"message\": \"\"},\n            )\n        if not self.proxy:\n            self.proxy = AlexaProxy(\n                self.login, str(URL(hass_url).with_path(AUTH_PROXY_PATH))\n            )\n        # Swap the login object\n        self.proxy.change_login(self.login)\n        if (\n            user_input\n            and user_input.get(CONF_OTPSECRET)\n            and user_input.get(CONF_OTPSECRET).replace(\" \", \"\")\n        ):\n            otp: str = self.login.get_totp_token()\n            if otp:\n                _LOGGER.debug(\"Generating OTP from %s\", otp)\n                return self.async_show_form(\n                    step_id=\"totp_register\",\n                    data_schema=vol.Schema(self.totp_register),\n                    errors={},\n                    description_placeholders={\n                        \"email\": self.login.email,\n                        \"url\": self.login.url,\n                        \"message\": otp,\n                    },\n                )\n        return await self.async_step_start_proxy(user_input)\n\n    async def async_step_start_proxy(self, user_input=None):\n        \"\"\"Start proxy for login.\"\"\"\n        _LOGGER.debug(\n            \"Starting proxy for %s - %s\",\n            hide_email(self.login.email),\n            self.login.url,\n        )\n        if not self.proxy_view:\n            self.proxy_view = AlexaMediaAuthorizationProxyView(self.proxy.all_handler)\n        else:\n            _LOGGER.debug(\"Found existing proxy_view\")\n            self.proxy_view.handler = self.proxy.all_handler\n        self.hass.http.register_view(AlexaMediaAuthorizationCallbackView())\n        self.hass.http.register_view(self.proxy_view)\n        callback_url = (\n            URL(self.config[\"hass_url\"])\n            .with_path(AUTH_CALLBACK_PATH)\n            .with_query({\"flow_id\": self.flow_id})\n        )\n\n        proxy_url = self.proxy.access_url().with_query(\n            {\"config_flow_id\": self.flow_id, \"callback_url\": str(callback_url)}\n        )\n        self.login._session.cookie_jar.clear()\n        return self.async_external_step(step_id=\"check_proxy\", url=str(proxy_url))\n\n    async def async_step_check_proxy(self, user_input=None):\n        \"\"\"Check status of proxy for login.\"\"\"\n        _LOGGER.debug(\n            \"Checking proxy response for %s - %s\",\n            hide_email(self.login.email),\n            self.login.url,\n        )\n        self.proxy_view.reset()\n        return self.async_external_step_done(next_step_id=\"finish_proxy\")\n\n    async def async_step_finish_proxy(self, user_input=None):\n        \"\"\"Finish auth.\"\"\"\n        if await self.login.test_loggedin():\n            await self.login.finalize_login()\n            self.config[CONF_EMAIL] = self.login.email\n            self.config[CONF_PASSWORD] = self.login.password\n            return await self._test_login()\n        return self.async_abort(reason=\"login_failed\")\n\n    async def async_step_user_legacy(self, user_input=None):\n        \"\"\"Handle legacy input for the config flow.\"\"\"\n        # pylint: disable=too-many-return-statements\n        self._save_user_input_to_config(user_input=user_input)\n        self.data_schema = self._update_schema_defaults()\n        if not user_input:\n            self.automatic_steps = 0\n            return self.async_show_form(\n                step_id=\"user\",\n                data_schema=vol.Schema(self.data_schema),\n                description_placeholders={\"message\": \"\"},\n            )\n        if (\n            not self.config.get(\"reauth\")\n            and f\"{self.config[CONF_EMAIL]} - {self.config[CONF_URL]}\"\n            in configured_instances(self.hass)\n            and not self.hass.data[DATA_ALEXAMEDIA][\"config_flows\"].get(\n                f\"{self.config[CONF_EMAIL]} - {self.config[CONF_URL]}\"\n            )\n        ):\n            _LOGGER.debug(\"Existing account found\")\n            self.automatic_steps = 0\n            return self.async_show_form(\n                step_id=\"user\",\n                data_schema=vol.Schema(self.data_schema),\n                errors={CONF_EMAIL: \"identifier_exists\"},\n                description_placeholders={\"message\": \"\"},\n            )\n        if self.login is None:\n            try:\n                self.login = self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][\n                    self.config[CONF_EMAIL]\n                ].get(\"login_obj\")\n            except KeyError:\n                self.login = None\n        try:\n            if not self.login or self.login.session.closed:\n                _LOGGER.debug(\"Creating new login\")\n                uuid_dict = await calculate_uuid(\n                    self.hass, self.config.get(CONF_EMAIL), self.config[CONF_URL]\n                )\n                uuid = uuid_dict[\"uuid\"]\n                self.login = AlexaLogin(\n                    url=self.config[CONF_URL],\n                    email=self.config[CONF_EMAIL],\n                    password=self.config[CONF_PASSWORD],\n                    outputpath=self.hass.config.path,\n                    debug=self.config[CONF_DEBUG],\n                    otp_secret=self.config.get(CONF_OTPSECRET, \"\"),\n                    uuid=uuid,\n                    oauth_login=True,\n                )\n            else:\n                _LOGGER.debug(\"Using existing login\")\n            if (\n                not self.config.get(\"reauth\")\n                and user_input\n                and user_input.get(CONF_OTPSECRET)\n                and user_input.get(CONF_OTPSECRET).replace(\" \", \"\")\n            ):\n                otp: str = self.login.get_totp_token()\n                if otp:\n                    _LOGGER.debug(\"Generating OTP from %s\", otp)\n                    return self.async_show_form(\n                        step_id=\"totp_register\",\n                        data_schema=vol.Schema(self.totp_register),\n                        errors={},\n                        description_placeholders={\n                            \"email\": self.login.email,\n                            \"url\": self.login.url,\n                            \"message\": otp,\n                        },\n                    )\n                return self.async_show_form(\n                    step_id=\"user\",\n                    errors={\"base\": \"2fa_key_invalid\"},\n                    description_placeholders={\"message\": \"\"},\n                )\n            if self.login.status:\n                _LOGGER.debug(\"Resuming existing flow\")\n                return await self._test_login()\n            _LOGGER.debug(\"Trying to login %s\", self.login.status)\n            await self.login.login(\n                data=self.config,\n            )\n            return await self._test_login()\n        except AlexapyConnectionError:\n            self.automatic_steps = 0\n            return self.async_show_form(\n                step_id=\"user_legacy\",\n                errors={\"base\": \"connection_error\"},\n                description_placeholders={\"message\": \"\"},\n            )\n        except AlexapyPyotpInvalidKey:\n            self.automatic_steps = 0\n            return self.async_show_form(\n                step_id=\"user_legacy\",\n                errors={\"base\": \"2fa_key_invalid\"},\n                description_placeholders={\"message\": \"\"},\n            )\n        except BaseException as ex:  # pylyint: disable=broad-except\n            _LOGGER.warning(\"Unknown error: %s\", ex)\n            if self.config[CONF_DEBUG]:\n                raise\n            self.automatic_steps = 0\n            return self.async_show_form(\n                step_id=\"user_legacy\",\n                errors={\"base\": \"unknown_error\"},\n                description_placeholders={\"message\": \"\"},\n            )\n\n    async def async_step_totp_register(self, user_input=None):\n        \"\"\"Handle the input processing of the config flow.\"\"\"\n        self._save_user_input_to_config(user_input=user_input)\n        if user_input and user_input.get(\"registered\") is False:\n            _LOGGER.debug(\"Not registered, regenerating\")\n            otp: str = self.login.get_totp_token()\n            if otp:\n                _LOGGER.debug(\"Generating OTP from %s\", otp)\n                return self.async_show_form(\n                    step_id=\"totp_register\",\n                    data_schema=vol.Schema(self.totp_register),\n                    errors={},\n                    description_placeholders={\n                        \"email\": self.login.email,\n                        \"url\": self.login.url,\n                        \"message\": otp,\n                    },\n                )\n        return await self.async_step_start_proxy(user_input)\n\n    async def async_step_process(self, step_id, user_input=None):\n        \"\"\"Handle the input processing of the config flow.\"\"\"\n        _LOGGER.debug(\n            \"Processing input for %s: %s\",\n            step_id,\n            obfuscate(user_input),\n        )\n        self._save_user_input_to_config(user_input=user_input)\n        if user_input:\n            return await self.async_step_user(user_input=None)\n        return await self._test_login()\n\n    async def async_step_reauth(self, user_input=None):\n        \"\"\"Handle reauth processing for the config flow.\"\"\"\n        self._save_user_input_to_config(user_input)\n        self.config[\"reauth\"] = True\n        reauth_schema = self._update_schema_defaults()\n        _LOGGER.debug(\n            \"Creating reauth form with %s\",\n            obfuscate(self.config),\n        )\n        self.automatic_steps = 0\n        if self.login is None:\n            try:\n                self.login = self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][\n                    self.config[CONF_EMAIL]\n                ].get(\"login_obj\")\n            except KeyError:\n                self.login = None\n        seconds_since_login: int = (\n            (datetime.datetime.now() - self.login.stats[\"login_timestamp\"]).seconds\n            if self.login\n            else 60\n        )\n        if seconds_since_login < 60:\n            _LOGGER.debug(\n                \"Relogin requested within %s seconds; manual login required\",\n                seconds_since_login,\n            )\n            return self.async_show_form(\n                step_id=\"user\",\n                data_schema=vol.Schema(reauth_schema),\n                description_placeholders={\"message\": \"REAUTH\"},\n            )\n        _LOGGER.debug(\"Attempting automatic relogin\")\n        await sleep(15)\n        return await self.async_step_user_legacy(self.config)\n\n    async def _test_login(self):\n        # pylint: disable=too-many-statements, too-many-return-statements\n        login = self.login\n        email = login.email\n        _LOGGER.debug(\"Testing login status: %s\", login.status)\n        if login.status and login.status.get(\"login_successful\"):\n            existing_entry = await self.async_set_unique_id(f\"{email} - {login.url}\")\n            if self.config.get(\"reauth\"):\n                self.config.pop(\"reauth\")\n            if self.config.get(CONF_SECURITYCODE):\n                self.config.pop(CONF_SECURITYCODE)\n            if self.config.get(\"hass_url\"):\n                self.config.pop(\"hass_url\")\n            self.config[CONF_OAUTH] = {\n                \"access_token\": login.access_token,\n                \"refresh_token\": login.refresh_token,\n                \"expires_in\": login.expires_in,\n                \"mac_dms\": login.mac_dms\n            }\n            self.hass.data.setdefault(\n                DATA_ALEXAMEDIA,\n                {\"accounts\": {}, \"config_flows\": {}, \"notify_service\": None},\n            )\n            self.hass.data[DATA_ALEXAMEDIA].setdefault(\"accounts\", {})\n            self.hass.data[DATA_ALEXAMEDIA].setdefault(\"config_flows\", {})\n            if existing_entry:\n                self.hass.config_entries.async_update_entry(\n                    existing_entry, data=self.config\n                )\n                _LOGGER.debug(\"Reauth successful for %s\", hide_email(email))\n                self.hass.bus.async_fire(\n                    \"alexa_media_relogin_success\",\n                    event_data={\"email\": hide_email(email), \"url\": login.url},\n                )\n                self.hass.components.persistent_notification.async_dismiss(\n                    f\"alexa_media_{slugify(email)}{slugify(login.url[7:])}\"\n                )\n                if not self.hass.data[DATA_ALEXAMEDIA][\"accounts\"].get(\n                    self.config[CONF_EMAIL]\n                ):\n                    self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][\n                        self.config[CONF_EMAIL]\n                    ] = {}\n                self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][self.config[CONF_EMAIL]][\n                    \"login_obj\"\n                ] = self.login\n                self.hass.data[DATA_ALEXAMEDIA][\"config_flows\"][\n                    f\"{email} - {login.url}\"\n                ] = None\n                return self.async_abort(reason=\"reauth_successful\")\n            _LOGGER.debug(\n                \"Setting up Alexa devices with %s\", dict(obfuscate(self.config))\n            )\n            self._abort_if_unique_id_configured(self.config)\n            return self.async_create_entry(\n                title=f\"{login.email} - {login.url}\", data=self.config\n            )\n        if login.status and login.status.get(\"securitycode_required\"):\n            _LOGGER.debug(\n                \"Creating config_flow to request 2FA. Saved security code %s\",\n                self.securitycode,\n            )\n            generated_securitycode: str = login.get_totp_token()\n            if (\n                self.securitycode or generated_securitycode\n            ) and self.automatic_steps < 2:\n                if self.securitycode:\n                    _LOGGER.debug(\n                        \"Automatically submitting securitycode %s\", self.securitycode\n                    )\n                else:\n                    _LOGGER.debug(\n                        \"Automatically submitting generated securitycode %s\",\n                        generated_securitycode,\n                    )\n                self.automatic_steps += 1\n                await sleep(5)\n                if generated_securitycode:\n                    return await self.async_step_twofactor(\n                        user_input={CONF_SECURITYCODE: generated_securitycode}\n                    )\n                return await self.async_step_twofactor(\n                    user_input={CONF_SECURITYCODE: self.securitycode}\n                )\n        if login.status and (login.status.get(\"login_failed\")):\n            _LOGGER.debug(\"Login failed: %s\", login.status.get(\"login_failed\"))\n            await login.close()\n            self.hass.components.persistent_notification.async_dismiss(\n                f\"alexa_media_{slugify(email)}{slugify(login.url[7:])}\"\n            )\n            return self.async_abort(reason=\"login_failed\")\n        new_schema = self._update_schema_defaults()\n        if login.status and login.status.get(\"error_message\"):\n            _LOGGER.debug(\"Login error detected: %s\", login.status.get(\"error_message\"))\n            if (\n                login.status.get(\"error_message\")\n                in {\n                    \"There was a problem\\n            Enter a valid email or mobile number\\n          \"\n                }\n                and self.automatic_steps < 2\n            ):\n                _LOGGER.debug(\n                    \"Trying automatic resubmission %s for error_message 'valid email'\",\n                    self.automatic_steps,\n                )\n                self.automatic_steps += 1\n                await sleep(5)\n                return await self.async_step_user_legacy(user_input=self.config)\n            _LOGGER.debug(\n                \"Done with automatic resubmission for error_message 'valid email'; returning error message\",\n            )\n        self.automatic_steps = 0\n        return self.async_show_form(\n            step_id=\"user\",\n            data_schema=vol.Schema(new_schema),\n            description_placeholders={\n                \"message\": f\"  \\n> {login.status.get('error_message','')}\"\n            },\n        )\n\n    def _save_user_input_to_config(self, user_input=None) -> None:\n        \"\"\"Process user_input to save to self.config.\n\n        user_input can be a dictionary of strings or an internally\n        saved config_entry data entry. This function will convert all to internal strings.\n\n        \"\"\"\n        if user_input is None:\n            return\n        if CONF_HASS_URL in user_input:\n            self.config[CONF_HASS_URL] = user_input[CONF_HASS_URL]\n        self.securitycode = user_input.get(CONF_SECURITYCODE)\n        if self.securitycode is not None:\n            self.config[CONF_SECURITYCODE] = self.securitycode\n        elif CONF_SECURITYCODE in self.config:\n            self.config.pop(CONF_SECURITYCODE)\n        if user_input.get(CONF_OTPSECRET) and user_input.get(CONF_OTPSECRET).replace(\n            \" \", \"\"\n        ):\n            self.config[CONF_OTPSECRET] = user_input[CONF_OTPSECRET].replace(\" \", \"\")\n        elif user_input.get(CONF_OTPSECRET):\n            # a blank line\n            self.config.pop(CONF_OTPSECRET)\n        if CONF_EMAIL in user_input:\n            self.config[CONF_EMAIL] = user_input[CONF_EMAIL]\n        if CONF_PASSWORD in user_input:\n            self.config[CONF_PASSWORD] = user_input[CONF_PASSWORD]\n        if CONF_URL in user_input:\n            self.config[CONF_URL] = user_input[CONF_URL]\n        if CONF_DEBUG in user_input:\n            self.config[CONF_DEBUG] = user_input[CONF_DEBUG]\n        if CONF_SCAN_INTERVAL in user_input:\n            self.config[CONF_SCAN_INTERVAL] = (\n                user_input[CONF_SCAN_INTERVAL]\n                if not isinstance(user_input[CONF_SCAN_INTERVAL], timedelta)\n                else user_input[CONF_SCAN_INTERVAL].total_seconds()\n            )\n        if CONF_INCLUDE_DEVICES in user_input:\n            if isinstance(user_input[CONF_INCLUDE_DEVICES], list):\n                self.config[CONF_INCLUDE_DEVICES] = (\n                    reduce(lambda x, y: f\"{x},{y}\", user_input[CONF_INCLUDE_DEVICES])\n                    if user_input[CONF_INCLUDE_DEVICES]\n                    else \"\"\n                )\n            else:\n                self.config[CONF_INCLUDE_DEVICES] = user_input[CONF_INCLUDE_DEVICES]\n        if CONF_EXCLUDE_DEVICES in user_input:\n            if isinstance(user_input[CONF_EXCLUDE_DEVICES], list):\n                self.config[CONF_EXCLUDE_DEVICES] = (\n                    reduce(lambda x, y: f\"{x},{y}\", user_input[CONF_EXCLUDE_DEVICES])\n                    if user_input[CONF_EXCLUDE_DEVICES]\n                    else \"\"\n                )\n            else:\n                self.config[CONF_EXCLUDE_DEVICES] = user_input[CONF_EXCLUDE_DEVICES]\n\n    def _update_schema_defaults(self) -> Any:\n        new_schema = self._update_ord_dict(\n            self.data_schema,\n            {\n                vol.Required(CONF_EMAIL, default=self.config.get(CONF_EMAIL, \"\")): str,\n                vol.Required(\n                    CONF_PASSWORD, default=self.config.get(CONF_PASSWORD, \"\")\n                ): str,\n                vol.Optional(\n                    CONF_SECURITYCODE,\n                    default=self.securitycode if self.securitycode else \"\",\n                ): str,\n                vol.Optional(\n                    CONF_OTPSECRET,\n                    default=self.config.get(CONF_OTPSECRET, \"\"),\n                ): str,\n                vol.Required(\n                    CONF_URL, default=self.config.get(CONF_URL, \"amazon.com\")\n                ): str,\n                vol.Optional(\n                    CONF_DEBUG, default=bool(self.config.get(CONF_DEBUG, False))\n                ): bool,\n                vol.Optional(\n                    CONF_INCLUDE_DEVICES,\n                    default=self.config.get(CONF_INCLUDE_DEVICES, \"\"),\n                ): str,\n                vol.Optional(\n                    CONF_EXCLUDE_DEVICES,\n                    default=self.config.get(CONF_EXCLUDE_DEVICES, \"\"),\n                ): str,\n                vol.Optional(\n                    CONF_SCAN_INTERVAL, default=self.config.get(CONF_SCAN_INTERVAL, 60)\n                ): int,\n            },\n        )\n        return new_schema\n\n    @staticmethod\n    @callback\n    def async_get_options_flow(config_entry):\n        \"\"\"Get the options flow for this handler.\"\"\"\n        return OptionsFlowHandler(config_entry)\n\n\nclass OptionsFlowHandler(config_entries.OptionsFlow):\n    \"\"\"Handle a option flow for Alexa Media.\"\"\"\n\n    def __init__(self, config_entry: config_entries.ConfigEntry):\n        \"\"\"Initialize options flow.\"\"\"\n        self.config_entry = config_entry\n\n    async def async_step_init(self, user_input=None):\n        \"\"\"Handle options flow.\"\"\"\n        if user_input is not None:\n            return self.async_create_entry(title=\"\", data=user_input)\n\n        data_schema = vol.Schema(\n            {\n                vol.Optional(\n                    CONF_QUEUE_DELAY,\n                    default=self.config_entry.options.get(\n                        CONF_QUEUE_DELAY, DEFAULT_QUEUE_DELAY\n                    ),\n                ): vol.All(vol.Coerce(float), vol.Clamp(min=0)),\n                vol.Required(\n                    CONF_EXTENDED_ENTITY_DISCOVERY,\n                    default=self.config_entry.options.get(\n                        CONF_EXTENDED_ENTITY_DISCOVERY,\n                        DEFAULT_EXTENDED_ENTITY_DISCOVERY,\n                    ),\n                ): bool,\n            }\n        )\n        return self.async_show_form(step_id=\"init\", data_schema=data_schema)\n\n\nclass AlexaMediaAuthorizationCallbackView(HomeAssistantView):\n    \"\"\"Handle callback from external auth.\"\"\"\n\n    url = AUTH_CALLBACK_PATH\n    name = AUTH_CALLBACK_NAME\n    requires_auth = False\n\n    async def get(self, request: web.Request):\n        \"\"\"Receive authorization confirmation.\"\"\"\n        hass = request.app[\"hass\"]\n        try:\n            await hass.config_entries.flow.async_configure(\n                flow_id=request.query[\"flow_id\"], user_input=None\n            )\n        except (KeyError, UnknownFlow) as ex:\n            _LOGGER.debug(\"Callback flow_id is invalid.\")\n            raise HTTPBadRequest() from ex\n        return web_response.Response(\n            headers={\"content-type\": \"text/html\"},\n            text=\"<script>window.close()</script>Success! This window can be closed\",\n        )\n\n\nclass AlexaMediaAuthorizationProxyView(HomeAssistantView):\n    \"\"\"Handle proxy connections.\"\"\"\n\n    url: str = AUTH_PROXY_PATH\n    extra_urls: List[str] = [f\"{AUTH_PROXY_PATH}/{{tail:.*}}\"]\n    name: str = AUTH_PROXY_NAME\n    requires_auth: bool = False\n    handler: web.RequestHandler = None\n    known_ips: Dict[str, datetime.datetime] = {}\n    auth_seconds: int = 300\n\n    def __init__(self, handler: web.RequestHandler):\n        \"\"\"Initialize routes for view.\n\n        Args:\n            handler (web.RequestHandler): Handler to apply to all method types\n\n        \"\"\"\n        AlexaMediaAuthorizationProxyView.handler = handler\n        for method in (\"get\", \"post\", \"delete\", \"put\", \"patch\", \"head\", \"options\"):\n            setattr(self, method, self.check_auth())\n\n    @classmethod\n    def check_auth(cls):\n        \"\"\"Wrap authentication into the handler.\"\"\"\n\n        async def wrapped(request, **kwargs):\n            \"\"\"Notify that the API is running.\"\"\"\n            hass = request.app[\"hass\"]\n            success = False\n            if (\n                request.remote not in cls.known_ips\n                or (datetime.datetime.now() - cls.known_ips.get(request.remote)).seconds\n                > cls.auth_seconds\n            ):\n                try:\n                    flow_id = request.url.query[\"config_flow_id\"]\n                except KeyError as ex:\n                    raise Unauthorized() from ex\n                for flow in hass.config_entries.flow.async_progress():\n                    if flow[\"flow_id\"] == flow_id:\n                        _LOGGER.debug(\n                            \"Found flow_id; adding %s to known_ips for %s seconds\",\n                            request.remote,\n                            cls.auth_seconds,\n                        )\n                        success = True\n                if not success:\n                    raise Unauthorized()\n                cls.known_ips[request.remote] = datetime.datetime.now()\n            try:\n                return await cls.handler(request, **kwargs)\n            except httpx.ConnectError as ex:  # pylyint: disable=broad-except\n                _LOGGER.warning(\"Detected Connection error: %s\", ex)\n                return web_response.Response(\n                    headers={\"content-type\": \"text/html\"},\n                    text=f\"Connection Error! Please try refreshing. If this persists, please report this error to <a href={ISSUE_URL}>here</a>:<br /><pre>{ex}</pre>\",\n                )\n\n        return wrapped\n\n    @classmethod\n    def reset(cls) -> None:\n        \"\"\"Reset the view.\"\"\"\n        cls.known_ips = {}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/const.py",
    "content": "\"\"\"\nSupport to interface with Alexa Devices.\n\nSPDX-License-Identifier: Apache-2.0\n\nFor more details about this platform, please refer to the documentation at\nhttps://community.home-assistant.io/t/echo-devices-alexa-as-media-player-testers-needed/58639\n\"\"\"\nfrom datetime import timedelta\n\n__version__ = \"4.0.3\"\nPROJECT_URL = \"https://github.com/custom-components/alexa_media_player/\"\nISSUE_URL = f\"{PROJECT_URL}issues\"\n\nDOMAIN = \"alexa_media\"\nDATA_ALEXAMEDIA = \"alexa_media\"\n\nPLAY_SCAN_INTERVAL = 20\nSCAN_INTERVAL = timedelta(seconds=60)\nMIN_TIME_BETWEEN_SCANS = SCAN_INTERVAL\nMIN_TIME_BETWEEN_FORCED_SCANS = timedelta(seconds=1)\n\nALEXA_COMPONENTS = [\n    \"media_player\",\n]\nDEPENDENT_ALEXA_COMPONENTS = [\n    \"notify\",\n    \"switch\",\n    \"sensor\",\n    \"alarm_control_panel\",\n    \"light\",\n]\n\nHTTP_COOKIE_HEADER = \"# HTTP Cookie File\"\nCONF_ACCOUNTS = \"accounts\"\nCONF_DEBUG = \"debug\"\nCONF_HASS_URL = \"hass_url\"\nCONF_INCLUDE_DEVICES = \"include_devices\"\nCONF_EXCLUDE_DEVICES = \"exclude_devices\"\nCONF_QUEUE_DELAY = \"queue_delay\"\nCONF_EXTENDED_ENTITY_DISCOVERY = \"extended_entity_discovery\"\nCONF_SECURITYCODE = \"securitycode\"\nCONF_OTPSECRET = \"otp_secret\"\nCONF_PROXY = \"proxy\"\nCONF_TOTP_REGISTER = \"registered\"\nCONF_OAUTH = \"oauth\"\nDATA_LISTENER = \"listener\"\n\nEXCEPTION_TEMPLATE = \"An exception of type {0} occurred. Arguments:\\n{1!r}\"\n\nDEFAULT_EXTENDED_ENTITY_DISCOVERY = False\nDEFAULT_QUEUE_DELAY = 1.5\nSERVICE_CLEAR_HISTORY = \"clear_history\"\nSERVICE_UPDATE_LAST_CALLED = \"update_last_called\"\nSERVICE_FORCE_LOGOUT = \"force_logout\"\n\nRECURRING_PATTERN = {\n    None: \"Never Repeat\",\n    \"P1D\": \"Every day\",\n    \"P1M\": \"Every month\",\n    \"XXXX-WE\": \"Weekends\",\n    \"XXXX-WD\": \"Weekdays\",\n    \"XXXX-WXX-1\": \"Every Monday\",\n    \"XXXX-WXX-2\": \"Every Tuesday\",\n    \"XXXX-WXX-3\": \"Every Wednesday\",\n    \"XXXX-WXX-4\": \"Every Thursday\",\n    \"XXXX-WXX-5\": \"Every Friday\",\n    \"XXXX-WXX-6\": \"Every Saturday\",\n    \"XXXX-WXX-7\": \"Every Sunday\",\n}\n\nRECURRING_DAY = {\n    \"MO\": 1,\n    \"TU\": 2,\n    \"WE\": 3,\n    \"TH\": 4,\n    \"FR\": 5,\n    \"SA\": 6,\n    \"SU\": 7,\n}\nRECURRING_PATTERN_ISO_SET = {\n    None: {},\n    \"P1D\": {1, 2, 3, 4, 5, 6, 7},\n    \"XXXX-WE\": {6, 7},\n    \"XXXX-WD\": {1, 2, 3, 4, 5},\n    \"XXXX-WXX-1\": {1},\n    \"XXXX-WXX-2\": {2},\n    \"XXXX-WXX-3\": {3},\n    \"XXXX-WXX-4\": {4},\n    \"XXXX-WXX-5\": {5},\n    \"XXXX-WXX-6\": {6},\n    \"XXXX-WXX-7\": {7},\n}\n\nATTR_MESSAGE = \"message\"\nATTR_EMAIL = \"email\"\nATTR_NUM_ENTRIES = \"entries\"\nSTARTUP = \"\"\"\n-------------------------------------------------------------------\n{}\nVersion: {}\nThis is a custom component\nIf you have any issues with this you need to open an issue here:\n{}\n-------------------------------------------------------------------\n\"\"\".format(\n    DOMAIN, __version__, ISSUE_URL\n)\n\nAUTH_CALLBACK_PATH = \"/auth/alexamedia/callback\"\nAUTH_CALLBACK_NAME = \"auth:alexamedia:callback\"\nAUTH_PROXY_PATH = \"/auth/alexamedia/proxy\"\nAUTH_PROXY_NAME = \"auth:alexamedia:proxy\"\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/helpers.py",
    "content": "\"\"\"\nHelper functions for Alexa Media Player.\n\nSPDX-License-Identifier: Apache-2.0\n\nFor more details about this platform, please refer to the documentation at\nhttps://community.home-assistant.io/t/echo-devices-alexa-as-media-player-testers-needed/58639\n\"\"\"\nimport hashlib\nimport logging\nfrom typing import Any, Callable, Dict, List, Optional, Text\n\nfrom alexapy import AlexapyLoginCloseRequested, AlexapyLoginError, hide_email\nfrom alexapy.alexalogin import AlexaLogin\nfrom homeassistant.const import CONF_EMAIL, CONF_URL\nfrom homeassistant.exceptions import HomeAssistantError\nfrom homeassistant.helpers.entity_component import EntityComponent\nimport wrapt\n\nfrom .const import DATA_ALEXAMEDIA, EXCEPTION_TEMPLATE\n\n_LOGGER = logging.getLogger(__name__)\n\n\nasync def add_devices(\n    account: Text,\n    devices: List[EntityComponent],\n    add_devices_callback: Callable,\n    include_filter: Optional[List[Text]] = None,\n    exclude_filter: Optional[List[Text]] = None,\n) -> bool:\n    \"\"\"Add devices using add_devices_callback.\"\"\"\n    include_filter = [] or include_filter\n    exclude_filter = [] or exclude_filter\n    new_devices = []\n    for device in devices:\n        if (\n            include_filter\n            and device.name not in include_filter\n            or exclude_filter\n            and device.name in exclude_filter\n        ):\n            _LOGGER.debug(\"%s: Excluding device: %s\", account, device)\n            continue\n        new_devices.append(device)\n    devices = new_devices\n    if devices:\n        _LOGGER.debug(\"%s: Adding %s\", account, devices)\n        try:\n            add_devices_callback(devices, False)\n            return True\n        except HomeAssistantError as exception_:\n            message = exception_.message  # type: str\n            if message.startswith(\"Entity id already exists\"):\n                _LOGGER.debug(\"%s: Device already added: %s\", account, message)\n            else:\n                _LOGGER.debug(\n                    \"%s: Unable to add devices: %s : %s\", account, devices, message\n                )\n        except BaseException as ex:  # pylint: disable=broad-except\n            _LOGGER.debug(\n                \"%s: Unable to add devices: %s\",\n                account,\n                EXCEPTION_TEMPLATE.format(type(ex).__name__, ex.args),\n            )\n    else:\n        return True\n    return False\n\n\ndef retry_async(\n    limit: int = 5, delay: float = 1, catch_exceptions: bool = True\n) -> Callable:\n    \"\"\"Wrap function with retry logic.\n\n    The function will retry until true or the limit is reached. It will delay\n    for the period of time specified exponentially increasing the delay.\n\n    Parameters\n    ----------\n    limit : int\n        The max number of retries.\n    delay : float\n        The delay in seconds between retries.\n    catch_exceptions : bool\n        Whether exceptions should be caught and treated as failures or thrown.\n    Returns\n    -------\n    def\n        Wrapped function.\n\n    \"\"\"\n\n    def wrap(func) -> Callable:\n        import asyncio\n        import functools\n\n        @functools.wraps(func)\n        async def wrapper(*args, **kwargs) -> Any:\n            _LOGGER.debug(\n                \"%s.%s: Trying with limit %s delay %s catch_exceptions %s\",\n                func.__module__[func.__module__.find(\".\") + 1 :],\n                func.__name__,\n                limit,\n                delay,\n                catch_exceptions,\n            )\n            retries: int = 0\n            result: bool = False\n            next_try: int = 0\n            while not result and retries < limit:\n                if retries != 0:\n                    next_try = delay * 2 ** retries\n                    await asyncio.sleep(next_try)\n                retries += 1\n                try:\n                    result = await func(*args, **kwargs)\n                except Exception as ex:  # pylint: disable=broad-except\n                    if not catch_exceptions:\n                        raise\n                    _LOGGER.debug(\n                        \"%s.%s: failure caught due to exception: %s\",\n                        func.__module__[func.__module__.find(\".\") + 1 :],\n                        func.__name__,\n                        EXCEPTION_TEMPLATE.format(type(ex).__name__, ex.args),\n                    )\n                _LOGGER.debug(\n                    \"%s.%s: Try: %s/%s after waiting %s seconds result: %s\",\n                    func.__module__[func.__module__.find(\".\") + 1 :],\n                    func.__name__,\n                    retries,\n                    limit,\n                    next_try,\n                    result,\n                )\n            return result\n\n        return wrapper\n\n    return wrap\n\n\n@wrapt.decorator\nasync def _catch_login_errors(func, instance, args, kwargs) -> Any:\n    \"\"\"Detect AlexapyLoginError and attempt relogin.\"\"\"\n\n    result = None\n    if instance is None and args:\n        instance = args[0]\n    if hasattr(instance, \"check_login_changes\"):\n        # _LOGGER.debug(\n        #     \"%s checking for login changes\", instance,\n        # )\n        instance.check_login_changes()\n    try:\n        result = await func(*args, **kwargs)\n    except AlexapyLoginCloseRequested:\n        _LOGGER.debug(\n            \"%s.%s: Ignoring attempt to access Alexa after HA shutdown\",\n            func.__module__[func.__module__.find(\".\") + 1 :],\n            func.__name__,\n        )\n        return None\n    except AlexapyLoginError as ex:\n        login = None\n        email = None\n        all_args = list(args) + list(kwargs.values())\n        # _LOGGER.debug(\"Func %s instance %s %s %s\", func, instance, args, kwargs)\n        if instance:\n            if hasattr(instance, \"_login\"):\n                login = instance._login\n                hass = instance.hass\n        else:\n            for arg in all_args:\n                _LOGGER.debug(\"Checking %s\", arg)\n\n                if isinstance(arg, AlexaLogin):\n                    login = arg\n                    break\n                if hasattr(arg, \"_login\"):\n                    login = instance._login\n                    hass = instance.hass\n                    break\n\n        if login:\n            email = login.email\n            _LOGGER.debug(\n                \"%s.%s: detected bad login for %s: %s\",\n                func.__module__[func.__module__.find(\".\") + 1 :],\n                func.__name__,\n                hide_email(email),\n                EXCEPTION_TEMPLATE.format(type(ex).__name__, ex.args),\n            )\n        try:\n            hass\n        except NameError:\n            hass = None\n        report_relogin_required(hass, login, email)\n        return None\n    return result\n\n\ndef report_relogin_required(hass, login, email) -> bool:\n    \"\"\"Send message for relogin required.\"\"\"\n    if hass and login and email:\n        if login.status:\n            _LOGGER.debug(\n                \"Reporting need to relogin to %s with %s stats: %s\",\n                login.url,\n                hide_email(email),\n                login.stats,\n            )\n            hass.bus.async_fire(\n                \"alexa_media_relogin_required\",\n                event_data={\n                    \"email\": hide_email(email),\n                    \"url\": login.url,\n                    \"stats\": login.stats,\n                },\n            )\n            return True\n    return False\n\n\ndef _existing_serials(hass, login_obj) -> List:\n    email: Text = login_obj.email\n    existing_serials = (\n        list(\n            hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"entities\"][\n                \"media_player\"\n            ].keys()\n        )\n        if \"entities\" in (hass.data[DATA_ALEXAMEDIA][\"accounts\"][email])\n        else []\n    )\n    for serial in existing_serials:\n        device = hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"devices\"][\n            \"media_player\"\n        ][serial]\n        if \"appDeviceList\" in device and device[\"appDeviceList\"]:\n            apps = list(\n                map(\n                    lambda x: x[\"serialNumber\"] if \"serialNumber\" in x else None,\n                    device[\"appDeviceList\"],\n                )\n            )\n            # _LOGGER.debug(\"Combining %s with %s\",\n            #               existing_serials, apps)\n            existing_serials = existing_serials + apps\n    return existing_serials\n\n\nasync def calculate_uuid(hass, email: Text, url: Text) -> dict:\n    \"\"\"Return uuid and index of email/url.\n\n    Args\n        hass (bool): Hass entity\n        url (Text): url for account\n        email (Text): email for account\n\n    Returns\n        dict: dictionary with uuid and index\n\n    \"\"\"\n    result = {}\n    return_index = 0\n    if hass.config_entries.async_entries(DATA_ALEXAMEDIA):\n        for index, entry in enumerate(\n            hass.config_entries.async_entries(DATA_ALEXAMEDIA)\n        ):\n            if entry.data.get(CONF_EMAIL) == email and entry.data.get(CONF_URL) == url:\n                return_index = index\n                break\n    uuid = await hass.helpers.instance_id.async_get()\n    result[\"uuid\"] = hex(\n        int(uuid, 16)\n        # increment uuid for second accounts\n        + return_index\n        # hash email/url in case HA uuid duplicated\n        + int(hashlib.md5((email.lower() + url.lower()).encode()).hexdigest(), 16)\n    )[-32:]\n    result[\"index\"] = return_index\n    _LOGGER.debug(\"%s: Returning uuid %s\", hide_email(email), result)\n    return result\n\n\ndef alarm_just_dismissed(\n    alarm: Dict[Text, Any],\n    previous_status: Optional[Text],\n    previous_version: Optional[Text],\n) -> bool:\n    \"\"\"Given the previous state of an alarm, determine if it has just been dismissed.\"\"\"\n\n    if previous_status not in (\"SNOOZED\", \"ON\"):\n        # The alarm had to be in a status that supported being dismissed\n        return False\n\n    if previous_version is None:\n        # The alarm was probably just created\n        return False\n\n    if not alarm:\n        # The alarm that was probably just deleted.\n        return False\n\n    if alarm.get(\"status\") not in (\"OFF\", \"ON\"):\n        # A dismissed alarm is guaranteed to be turned off(one-off alarm) or left on(recurring alarm)\n        return False\n\n    if previous_version == alarm.get(\"version\"):\n        # A dismissal always has a changed version.\n        return False\n\n    if int(alarm.get(\"version\", \"0\")) > 1 + int(previous_version):\n        # This is an absurd thing to check, but it solves many, many edge cases.\n        # Experimentally, when an alarm is dismissed, the version always increases by 1\n        # When an alarm is edited either via app or voice, its version always increases by 2+\n        return False\n\n    # It seems obvious that a check involving time should be necessary. It is not.\n    # We know there was a change and that it wasn't an edit.\n    # We also know the alarm's status rules out a snooze.\n    # The only remaining possibility is that this alarm was just dismissed.\n    return True\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/light.py",
    "content": "\"\"\"\nAlexa Devices Sensors.\n\nSPDX-License-Identifier: Apache-2.0\n\nFor more details about this platform, please refer to the documentation at\nhttps://community.home-assistant.io/t/echo-devices-alexa-as-media-player-testers-needed/58639\n\"\"\"\nimport datetime\nimport logging\nfrom math import sqrt\nfrom typing import (  # noqa pylint: disable=unused-import\n    Callable,\n    List,\n    Optional,\n    Text,\n    Tuple,\n)\n\nfrom alexapy import AlexaAPI, hide_serial\nfrom homeassistant.components.light import (\n    ATTR_BRIGHTNESS,\n    ATTR_COLOR_TEMP,\n    ATTR_HS_COLOR,\n    SUPPORT_BRIGHTNESS,\n    SUPPORT_COLOR,\n    SUPPORT_COLOR_TEMP,\n    LightEntity,\n)\n\ntry:\n    from homeassistant.components.light import (\n        COLOR_MODE_BRIGHTNESS,\n        COLOR_MODE_COLOR_TEMP,\n        COLOR_MODE_HS,\n        COLOR_MODE_ONOFF,\n    )\nexcept ImportError:\n    # Continue to support HA < 2021.4.\n    COLOR_MODE_BRIGHTNESS = \"brightness\"\n    COLOR_MODE_COLOR_TEMP = \"color_temp\"\n    COLOR_MODE_HS = \"hs\"\n    COLOR_MODE_ONOFF = \"onoff\"\n\nfrom homeassistant.helpers.update_coordinator import CoordinatorEntity\nfrom homeassistant.util.color import (\n    color_hs_to_RGB,\n    color_hsb_to_RGB,\n    color_name_to_rgb,\n    color_RGB_to_hs,\n    color_temperature_kelvin_to_mired,\n)\n\nfrom . import (\n    CONF_EMAIL,\n    CONF_EXCLUDE_DEVICES,\n    CONF_INCLUDE_DEVICES,\n    DATA_ALEXAMEDIA,\n    hide_email,\n)\nfrom .alexa_entity import (\n    parse_brightness_from_coordinator,\n    parse_color_from_coordinator,\n    parse_color_temp_from_coordinator,\n    parse_power_from_coordinator,\n)\nfrom .const import CONF_EXTENDED_ENTITY_DISCOVERY\nfrom .helpers import add_devices\n\n_LOGGER = logging.getLogger(__name__)\n\nLOCAL_TIMEZONE = datetime.datetime.now(datetime.timezone.utc).astimezone().tzinfo\n\n\nasync def async_setup_platform(hass, config, add_devices_callback, discovery_info=None):\n    \"\"\"Set up the Alexa sensor platform.\"\"\"\n    devices: List[LightEntity] = []\n    account = config[CONF_EMAIL] if config else discovery_info[\"config\"][CONF_EMAIL]\n    account_dict = hass.data[DATA_ALEXAMEDIA][\"accounts\"][account]\n    include_filter = config.get(CONF_INCLUDE_DEVICES, [])\n    exclude_filter = config.get(CONF_EXCLUDE_DEVICES, [])\n    coordinator = account_dict[\"coordinator\"]\n    hue_emulated_enabled = \"emulated_hue\" in hass.config.as_dict().get(\n        \"components\", set()\n    )\n    light_entities = account_dict.get(\"devices\", {}).get(\"light\", [])\n    if light_entities and account_dict[\"options\"].get(CONF_EXTENDED_ENTITY_DISCOVERY):\n        for le in light_entities:\n            if not (le[\"is_hue_v1\"] and hue_emulated_enabled):\n                _LOGGER.debug(\n                    \"Creating entity %s for a light with name %s\",\n                    hide_serial(le[\"id\"]),\n                    le[\"name\"],\n                )\n                light = AlexaLight(coordinator, account_dict[\"login_obj\"], le)\n                account_dict[\"entities\"][\"light\"].append(light)\n                devices.append(light)\n            else:\n                _LOGGER.debug(\n                    \"Light '%s' has not been added because it may originate from emulated_hue\",\n                    le[\"name\"],\n                )\n\n    return await add_devices(\n        hide_email(account),\n        devices,\n        add_devices_callback,\n        include_filter,\n        exclude_filter,\n    )\n\n\nasync def async_setup_entry(hass, config_entry, async_add_devices):\n    \"\"\"Set up the Alexa sensor platform by config_entry.\"\"\"\n    return await async_setup_platform(\n        hass, config_entry.data, async_add_devices, discovery_info=None\n    )\n\n\nasync def async_unload_entry(hass, entry) -> bool:\n    \"\"\"Unload a config entry.\"\"\"\n    account = entry.data[CONF_EMAIL]\n    account_dict = hass.data[DATA_ALEXAMEDIA][\"accounts\"][account]\n    _LOGGER.debug(\"Attempting to unload lights\")\n    for light in account_dict[\"entities\"][\"light\"]:\n        await light.async_remove()\n    return True\n\n\ndef color_modes(details):\n    if details[\"color\"] and details[\"color_temperature\"]:\n        return [COLOR_MODE_HS, COLOR_MODE_COLOR_TEMP]\n    elif details[\"color\"]:\n        return [COLOR_MODE_HS]\n    elif details[\"color_temperature\"]:\n        return [COLOR_MODE_COLOR_TEMP]\n    elif details[\"brightness\"]:\n        return [COLOR_MODE_BRIGHTNESS]\n    else:\n        return [COLOR_MODE_ONOFF]\n\n\nclass AlexaLight(CoordinatorEntity, LightEntity):\n    \"\"\"A light controlled by an Echo.\"\"\"\n\n    def __init__(self, coordinator, login, details):\n        super().__init__(coordinator)\n        self.alexa_entity_id = details[\"id\"]\n        self._name = details[\"name\"]\n        self._login = login\n        self._color_modes = color_modes(details)\n\n        # Store the requested state from the last call to _set_state\n        # This is so that no new network call is needed just to get values that are already known\n        # This is useful because refreshing the full state can take a bit when many lights are in play.\n        # Especially since Alexa actually polls the lights and that appears to be error-prone with some Zigbee lights.\n        # That delay(1-5s in practice) causes the UI controls to jump all over the place after _set_state\n        self._requested_state_at = None  # When was state last set in UTC\n        self._requested_power = None\n        self._requested_ha_brightness = None\n        self._requested_mired = None\n        self._requested_hs = None\n\n    @property\n    def name(self):\n        return self._name\n\n    @property\n    def unique_id(self):\n        return self.alexa_entity_id\n\n    @property\n    def supported_features(self):\n        # The HA documentation marks every single feature that Alexa lights can support as deprecated.\n        # The new alternative is the supported_color_modes and color_mode properties(HA 2021.4)\n        # This SHOULD just need to return 0 according to the light entity docs.\n        # Actually doing that causes the UI to remove color controls even in HA 2021.4.\n        # So, continue to provide a backwards compatible method here until HA is fixed and the min HA version is raised.\n        if COLOR_MODE_BRIGHTNESS in self._color_modes:\n            return SUPPORT_BRIGHTNESS\n        elif (\n            COLOR_MODE_HS in self._color_modes\n            and COLOR_MODE_COLOR_TEMP in self._color_modes\n        ):\n            return SUPPORT_BRIGHTNESS | SUPPORT_COLOR | SUPPORT_COLOR_TEMP\n        elif COLOR_MODE_HS in self._color_modes:\n            return SUPPORT_BRIGHTNESS | SUPPORT_COLOR\n        elif COLOR_MODE_COLOR_TEMP in self._color_modes:\n            return SUPPORT_BRIGHTNESS | SUPPORT_COLOR_TEMP\n        else:\n\n            return 0\n\n    @property\n    def color_mode(self):\n        if (\n            COLOR_MODE_HS in self._color_modes\n            and COLOR_MODE_COLOR_TEMP in self._color_modes\n        ):\n            hs = self.hs_color\n            if hs is None or (hs[0] == 0 and hs[1] == 0):\n                # (0,0) is white. When white, color temp is the better plan.\n                return COLOR_MODE_COLOR_TEMP\n            else:\n                return COLOR_MODE_HS\n        else:\n            return self._color_modes[0]\n\n    @property\n    def supported_color_modes(self):\n        return self._color_modes\n\n    @property\n    def is_on(self):\n        power = parse_power_from_coordinator(\n            self.coordinator, self.alexa_entity_id, self._requested_state_at\n        )\n        if power is None:\n            return self._requested_power if self._requested_power is not None else False\n        else:\n            return power == \"ON\"\n\n    @property\n    def brightness(self):\n        bright = parse_brightness_from_coordinator(\n            self.coordinator, self.alexa_entity_id, self._requested_state_at\n        )\n        if bright is None:\n            return self._requested_ha_brightness\n        else:\n            return alexa_brightness_to_ha(bright)\n\n    @property\n    def min_mireds(self):\n        return 143\n\n    @property\n    def max_mireds(self):\n        return 454\n\n    @property\n    def color_temp(self):\n        kelvin = parse_color_temp_from_coordinator(\n            self.coordinator, self.alexa_entity_id, self._requested_state_at\n        )\n        if kelvin is None:\n            return self._requested_mired\n        else:\n            return alexa_kelvin_to_mired(kelvin)\n\n    @property\n    def hs_color(self):\n        hsb = parse_color_from_coordinator(\n            self.coordinator, self.alexa_entity_id, self._requested_state_at\n        )\n        if hsb is None:\n            return self._requested_hs\n        else:\n            adjusted_hs, color_name = hsb_to_alexa_color(hsb)\n            return adjusted_hs\n\n    @property\n    def assumed_state(self) -> bool:\n        last_refresh_success = (\n            self.coordinator.data and self.alexa_entity_id in self.coordinator.data\n        )\n        return not last_refresh_success\n\n    async def _set_state(self, power_on, brightness=None, mired=None, hs=None):\n        # This is \"rounding\" on mired to the closest value Alexa is willing to acknowledge the existence of.\n        # The alternative implementation would be to use effects instead.\n        # That is far more non-standard, and would lock users out of things like the Flux integration.\n        # The downsides to this approach is that the UI is giving the user a slider\n        # When the user picks a slider value, the UI will \"jump\" to the closest possible value.\n        # This trade-off doesn't feel as bad in practice as it sounds.\n        adjusted_mired, color_temperature_name = mired_to_alexa(mired)\n        if color_temperature_name is None:\n            # This is \"rounding\" on HS color to closest value Alexa supports.\n            # The alexa color list is short, but covers a pretty broad spectrum.\n            # Like for mired above, this sounds bad but works ok in practice.\n            adjusted_hs, color_name = hs_to_alexa_color(hs)\n        else:\n            # If a color temperature is being set, it is not possible to also adjust the color.\n            adjusted_hs = None\n            color_name = None\n\n        response = await AlexaAPI.set_light_state(\n            self._login,\n            self.alexa_entity_id,\n            power_on,\n            brightness=ha_brightness_to_alexa(brightness),\n            color_temperature_name=color_temperature_name,\n            color_name=color_name,\n        )\n        control_responses = response.get(\"controlResponses\", [])\n        for response in control_responses:\n            if not response.get(\"code\") == \"SUCCESS\":\n                # If something failed any state is possible, fallback to a full refresh\n                return await self.coordinator.async_request_refresh()\n        self._requested_power = power_on\n        self._requested_ha_brightness = (\n            brightness if brightness is not None else self.brightness\n        )\n        self._requested_mired = (\n            adjusted_mired if adjusted_mired is not None else self.color_temp\n        )\n        if adjusted_hs is not None:\n            self._requested_hs = adjusted_hs\n        elif adjusted_mired is not None:\n            # If a mired value was set, it is critical that color is cleared out so that color mode is set properly\n            self._requested_hs = None\n        else:\n            self._requested_hs = self.hs_color\n        self._requested_state_at = datetime.datetime.now(\n            datetime.timezone.utc\n        )  # must be set last so that previous getters work properly\n        self.async_write_ha_state()\n\n    async def async_turn_on(self, **kwargs):\n        brightness = None\n        mired = None\n        hs = None\n        if COLOR_MODE_ONOFF not in self._color_modes and ATTR_BRIGHTNESS in kwargs:\n            brightness = kwargs[ATTR_BRIGHTNESS]\n        if COLOR_MODE_COLOR_TEMP in self._color_modes and ATTR_COLOR_TEMP in kwargs:\n            mired = kwargs[ATTR_COLOR_TEMP]\n        if COLOR_MODE_HS in self._color_modes and ATTR_HS_COLOR in kwargs:\n            hs = kwargs[ATTR_HS_COLOR]\n        await self._set_state(True, brightness, mired, hs)\n\n    async def async_turn_off(self, **kwargs):\n        await self._set_state(False)\n\n\ndef mired_to_alexa(mired: Optional[float]) -> Tuple[Optional[float], Optional[Text]]:\n    \"\"\"Convert a given color temperature in mired to the closest available value that Alexa has support for.\"\"\"\n    if mired is None:\n        return None, None\n    elif mired <= 162.5:\n        return 143, \"cool_white\"\n    elif mired <= 216:\n        return 182, \"daylight_white\"\n    elif mired <= 310:\n        return 250, \"white\"\n    elif mired <= 412:\n        return 370, \"soft_white\"\n    else:\n        return 454, \"warm_white\"\n\n\ndef alexa_kelvin_to_mired(kelvin: float) -> float:\n    \"\"\"Convert a value in kelvin to the closest mired value that Alexa has support for.\"\"\"\n    raw_mired = color_temperature_kelvin_to_mired(kelvin)\n    return mired_to_alexa(raw_mired)[0]\n\n\ndef ha_brightness_to_alexa(ha: Optional[float]) -> Optional[float]:\n    return (ha / 255 * 100) if ha is not None else None\n\n\ndef alexa_brightness_to_ha(alexa: Optional[float]) -> Optional[float]:\n    return (alexa / 100 * 255) if alexa is not None else None\n\n\n# This is a fairly complete list of all the colors that Alexa will respond to and their associated RGB value.\nALEXA_COLORS = {\n    \"alice_blue\": (240, 248, 255),\n    \"antique_white\": (250, 235, 215),\n    \"aqua\": (0, 255, 255),\n    \"aquamarine\": (127, 255, 212),\n    \"azure\": (240, 255, 255),\n    \"beige\": (245, 245, 220),\n    \"bisque\": (255, 228, 196),\n    \"black\": (0, 0, 0),\n    \"blanched_almond\": (255, 235, 205),\n    \"blue\": (0, 0, 255),\n    \"blue_violet\": (138, 43, 226),\n    \"brown\": (165, 42, 42),\n    \"burlywood\": (222, 184, 135),\n    \"cadet_blue\": (95, 158, 160),\n    \"chartreuse\": (127, 255, 0),\n    \"chocolate\": (210, 105, 30),\n    \"coral\": (255, 127, 80),\n    \"cornflower_blue\": (100, 149, 237),\n    \"cornsilk\": (255, 248, 220),\n    \"crimson\": (220, 20, 60),\n    \"cyan\": (0, 255, 255),\n    \"dark_blue\": (0, 0, 139),\n    \"dark_cyan\": (0, 139, 139),\n    \"dark_goldenrod\": (184, 134, 11),\n    \"dark_green\": (0, 100, 0),\n    \"dark_grey\": (169, 169, 169),\n    \"dark_khaki\": (189, 183, 107),\n    \"dark_magenta\": (139, 0, 139),\n    \"dark_olive_green\": (85, 107, 47),\n    \"dark_orange\": (255, 140, 0),\n    \"dark_orchid\": (153, 50, 204),\n    \"dark_red\": (139, 0, 0),\n    \"dark_salmon\": (233, 150, 122),\n    \"dark_sea_green\": (143, 188, 143),\n    \"dark_slate_blue\": (72, 61, 139),\n    \"dark_slate_grey\": (47, 79, 79),\n    \"dark_turquoise\": (0, 206, 209),\n    \"dark_violet\": (148, 0, 211),\n    \"deep_pink\": (255, 20, 147),\n    \"deep_sky_blue\": (0, 191, 255),\n    \"dim_grey\": (105, 105, 105),\n    \"dodger_blue\": (30, 144, 255),\n    \"firebrick\": (178, 34, 34),\n    \"floral_white\": (255, 250, 240),\n    \"forest_green\": (34, 139, 34),\n    \"fuchsia\": (255, 0, 255),\n    \"gainsboro\": (220, 220, 220),\n    \"ghost_white\": (248, 248, 255),\n    \"gold\": (255, 215, 0),\n    \"goldenrod\": (218, 165, 32),\n    \"green\": (0, 128, 0),\n    \"green_yellow\": (173, 255, 47),\n    \"grey\": (128, 128, 128),\n    \"honey_dew\": (240, 255, 240),\n    \"hot_pink\": (255, 105, 180),\n    \"indian_red\": (205, 92, 92),\n    \"indigo\": (75, 0, 130),\n    \"ivory\": (255, 255, 240),\n    \"khaki\": (240, 230, 140),\n    \"lavender\": (230, 230, 250),\n    \"lavender_blush\": (255, 240, 245),\n    \"lawn_green\": (124, 252, 0),\n    \"lemon_chiffon\": (255, 250, 205),\n    \"light_blue\": (173, 216, 230),\n    \"light_coral\": (240, 128, 128),\n    \"light_cyan\": (224, 255, 255),\n    \"light_goldenrod_yellow\": (250, 250, 210),\n    \"light_green\": (144, 238, 144),\n    \"light_grey\": (211, 211, 211),\n    \"light_pink\": (255, 182, 193),\n    \"light_salmon\": (255, 160, 122),\n    \"light_sea_green\": (32, 178, 170),\n    \"light_sky_blue\": (135, 206, 250),\n    \"light_slate_grey\": (119, 136, 153),\n    \"light_steel_blue\": (176, 196, 222),\n    \"light_yellow\": (255, 255, 224),\n    \"lime\": (0, 255, 0),\n    \"lime_green\": (50, 205, 50),\n    \"linen\": (250, 240, 230),\n    \"magenta\": (255, 0, 255),\n    \"maroon\": (128, 0, 0),\n    \"medium_aqua_marine\": (102, 205, 170),\n    \"medium_blue\": (0, 0, 205),\n    \"medium_orchid\": (186, 85, 211),\n    \"medium_purple\": (147, 112, 219),\n    \"medium_sea_green\": (60, 179, 113),\n    \"medium_slate_blue\": (123, 104, 238),\n    \"medium_spring_green\": (0, 250, 154),\n    \"medium_turquoise\": (72, 209, 204),\n    \"medium_violet_red\": (199, 21, 133),\n    \"midnight_blue\": (25, 25, 112),\n    \"mint_cream\": (245, 255, 250),\n    \"misty_rose\": (255, 228, 225),\n    \"moccasin\": (255, 228, 181),\n    \"navajo_white\": (255, 222, 173),\n    \"navy\": (0, 0, 128),\n    \"old_lace\": (253, 245, 230),\n    \"olive\": (128, 128, 0),\n    \"olive_drab\": (107, 142, 35),\n    \"orange\": (255, 165, 0),\n    \"orange_red\": (255, 69, 0),\n    \"orchid\": (218, 112, 214),\n    \"pale_goldenrod\": (238, 232, 170),\n    \"pale_green\": (152, 251, 152),\n    \"pale_turquoise\": (175, 238, 238),\n    \"pale_violet_red\": (219, 112, 147),\n    \"papaya_whip\": (255, 239, 213),\n    \"peach_puff\": (255, 218, 185),\n    \"peru\": (205, 133, 63),\n    \"pink\": (255, 192, 203),\n    \"plum\": (221, 160, 221),\n    \"powder_blue\": (176, 224, 230),\n    \"purple\": (128, 0, 128),\n    \"rebecca_purple\": (102, 51, 153),\n    \"red\": (255, 0, 0),\n    \"rosy_brown\": (188, 143, 143),\n    \"royal_blue\": (65, 105, 225),\n    \"saddle_brown\": (139, 69, 19),\n    \"salmon\": (250, 128, 114),\n    \"sandy_brown\": (244, 164, 96),\n    \"sea_green\": (46, 139, 87),\n    \"sea_shell\": (255, 245, 238),\n    \"sienna\": (160, 82, 45),\n    \"silver\": (192, 192, 192),\n    \"sky_blue\": (135, 206, 235),\n    \"slate_blue\": (106, 90, 205),\n    \"slate_grey\": (112, 128, 144),\n    \"snow\": (255, 250, 250),\n    \"spring_green\": (0, 255, 127),\n    \"steel_blue\": (70, 130, 180),\n    \"tan\": (210, 180, 140),\n    \"teal\": (0, 128, 128),\n    \"thistle\": (216, 191, 216),\n    \"tomato\": (255, 99, 71),\n    \"turquoise\": (64, 224, 208),\n    \"violet\": (238, 130, 238),\n    \"wheat\": (245, 222, 179),\n    \"white\": (255, 255, 255),\n    \"white_smoke\": (245, 245, 245),\n    \"yellow\": (255, 255, 0),\n    \"yellow_green\": (154, 205, 50),\n}\n\n\ndef red_mean(color1: Tuple[int, int, int], color2: Tuple[int, int, int]) -> float:\n    \"\"\"Get an approximate 'distance' between two colors using red mean.\n    Wikipedia says this method is \"one of the better low-cost approximations\".\n    \"\"\"\n    r_avg = (color2[0] + color1[0]) / 2\n    r_delta = color2[0] - color1[0]\n    g_delta = color2[1] - color1[1]\n    b_delta = color2[2] - color1[2]\n    r_term = (2 + r_avg / 256) * pow(r_delta, 2)\n    g_term = 4 * pow(g_delta, 2)\n    b_term = (2 + (255 - r_avg) / 256) * pow(b_delta, 2)\n    return sqrt(r_term + g_term + b_term)\n\n\ndef alexa_color_name_to_rgb(color_name: Text) -> Tuple[int, int, int]:\n    \"\"\"Convert an alexa color name into RGB\"\"\"\n    return color_name_to_rgb(color_name.replace(\"_\", \"\"))\n\n\ndef rgb_to_alexa_color(\n    rgb: Tuple[int, int, int]\n) -> Tuple[Optional[Tuple[float, float]], Optional[Text]]:\n    \"\"\"Convert a given RGB value into the closest Alexa color.\"\"\"\n    (name, alexa_rgb) = min(\n        ALEXA_COLORS.items(),\n        key=lambda alexa_color: red_mean(alexa_color[1], rgb),\n    )\n    red, green, blue = alexa_rgb\n    return color_RGB_to_hs(red, green, blue), name\n\n\ndef hs_to_alexa_color(\n    hs: Optional[Tuple[float, float]]\n) -> Tuple[Optional[Tuple[float, float]], Optional[Text]]:\n    \"\"\"Convert a given hue/saturation value into the closest Alexa color.\"\"\"\n    if hs is None:\n        return None, None\n    hue, saturation = hs\n    return rgb_to_alexa_color(color_hs_to_RGB(hue, saturation))\n\n\ndef hsb_to_alexa_color(\n    hsb: Optional[Tuple[float, float, float]]\n) -> Tuple[Optional[Tuple[float, float]], Optional[Text]]:\n    \"\"\"Convert a given hue/saturation/brightness value into the closest Alexa color.\"\"\"\n    if hsb is None:\n        return None, None\n    hue, saturation, brightness = hsb\n    return rgb_to_alexa_color(color_hsb_to_RGB(hue, saturation, brightness))\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/manifest.json",
    "content": "{\n  \"domain\": \"alexa_media\",\n  \"name\": \"Alexa Media Player\",\n  \"version\": \"4.0.3\",\n  \"config_flow\": true,\n  \"documentation\": \"https://github.com/custom-components/alexa_media_player/wiki\",\n  \"issue_tracker\": \"https://github.com/custom-components/alexa_media_player/issues\",\n  \"dependencies\": [\"persistent_notification\", \"http\"],\n  \"codeowners\": [\"@alandtse\", \"@keatontaylor\"],\n  \"requirements\": [\"alexapy==1.26.1\", \"packaging>=20.3\", \"wrapt>=1.12.1\"],\n  \"iot_class\": \"cloud_polling\"\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/media_player.py",
    "content": "\"\"\"\nSupport to interface with Alexa Devices.\n\nSPDX-License-Identifier: Apache-2.0\n\nFor more details about this platform, please refer to the documentation at\nhttps://community.home-assistant.io/t/echo-devices-alexa-as-media-player-testers-needed/58639\n\"\"\"\nimport asyncio\nimport logging\nimport re\nfrom typing import List, Optional, Text  # noqa pylint: disable=unused-import\n\nfrom alexapy import AlexaAPI\nfrom homeassistant import util\nfrom homeassistant.components.media_player.const import (\n    MEDIA_TYPE_MUSIC,\n    SUPPORT_NEXT_TRACK,\n    SUPPORT_PAUSE,\n    SUPPORT_PLAY,\n    SUPPORT_PLAY_MEDIA,\n    SUPPORT_PREVIOUS_TRACK,\n    SUPPORT_SELECT_SOURCE,\n    SUPPORT_SHUFFLE_SET,\n    SUPPORT_STOP,\n    SUPPORT_TURN_OFF,\n    SUPPORT_TURN_ON,\n    SUPPORT_VOLUME_MUTE,\n    SUPPORT_VOLUME_SET,\n)\nfrom homeassistant.const import (\n    CONF_EMAIL,\n    CONF_NAME,\n    CONF_PASSWORD,\n    STATE_IDLE,\n    STATE_PAUSED,\n    STATE_PLAYING,\n    STATE_STANDBY,\n    STATE_UNAVAILABLE,\n)\nfrom homeassistant.exceptions import ConfigEntryNotReady\nfrom homeassistant.helpers.discovery import async_load_platform\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\nfrom homeassistant.helpers.event import async_call_later\nfrom homeassistant.util import slugify\n\nfrom . import (\n    CONF_QUEUE_DELAY,\n    DATA_ALEXAMEDIA,\n    DEFAULT_QUEUE_DELAY,\n    DOMAIN as ALEXA_DOMAIN,\n    hide_email,\n    hide_serial,\n)\nfrom .alexa_media import AlexaMedia\nfrom .const import (\n    DEPENDENT_ALEXA_COMPONENTS,\n    MIN_TIME_BETWEEN_FORCED_SCANS,\n    MIN_TIME_BETWEEN_SCANS,\n    PLAY_SCAN_INTERVAL,\n)\nfrom .helpers import _catch_login_errors, add_devices\n\ntry:\n    from homeassistant.components.media_player import (\n        MediaPlayerEntity as MediaPlayerDevice,\n    )\nexcept ImportError:\n    from homeassistant.components.media_player import MediaPlayerDevice\n\nSUPPORT_ALEXA = (\n    SUPPORT_PAUSE\n    | SUPPORT_PREVIOUS_TRACK\n    | SUPPORT_NEXT_TRACK\n    | SUPPORT_STOP\n    | SUPPORT_VOLUME_SET\n    | SUPPORT_PLAY\n    | SUPPORT_PLAY_MEDIA\n    | SUPPORT_TURN_OFF\n    | SUPPORT_TURN_ON\n    | SUPPORT_VOLUME_MUTE\n    | SUPPORT_PAUSE\n    | SUPPORT_SELECT_SOURCE\n    | SUPPORT_SHUFFLE_SET\n)\n_LOGGER = logging.getLogger(__name__)\n\nDEPENDENCIES = [ALEXA_DOMAIN]\n\n\n# @retry_async(limit=5, delay=2, catch_exceptions=True)\nasync def async_setup_platform(hass, config, add_devices_callback, discovery_info=None):\n    # pylint: disable=unused-argument\n    \"\"\"Set up the Alexa media player platform.\"\"\"\n    devices = []  # type: List[AlexaClient]\n    account = config[CONF_EMAIL] if config else discovery_info[\"config\"][CONF_EMAIL]\n    account_dict = hass.data[DATA_ALEXAMEDIA][\"accounts\"][account]\n    entry_setup = len(account_dict[\"entities\"][\"media_player\"])\n    alexa_client = None\n    for key, device in account_dict[\"devices\"][\"media_player\"].items():\n        if key not in account_dict[\"entities\"][\"media_player\"]:\n            alexa_client = AlexaClient(\n                device,\n                account_dict[\"login_obj\"],\n                hass.data[DATA_ALEXAMEDIA][\"accounts\"][account][\"second_account_index\"],\n            )\n            await alexa_client.init(device)\n            devices.append(alexa_client)\n            (\n                hass.data[DATA_ALEXAMEDIA][\"accounts\"][account][\"entities\"][\n                    \"media_player\"\n                ][key]\n            ) = alexa_client\n        else:\n            _LOGGER.debug(\n                \"%s: Skipping already added device: %s:%s\",\n                hide_email(account),\n                hide_serial(key),\n                alexa_client,\n            )\n    result = await add_devices(hide_email(account), devices, add_devices_callback)\n    if result and entry_setup:\n        _LOGGER.debug(\"Detected config entry already setup, using load platform\")\n        for component in DEPENDENT_ALEXA_COMPONENTS:\n            hass.async_create_task(\n                async_load_platform(\n                    hass,\n                    component,\n                    ALEXA_DOMAIN,\n                    {CONF_NAME: ALEXA_DOMAIN, \"config\": config},\n                    config,\n                )\n            )\n    return result\n\n\nasync def async_setup_entry(hass, config_entry, async_add_devices):\n    \"\"\"Set up the Alexa media player platform by config_entry.\"\"\"\n    if await async_setup_platform(\n        hass, config_entry.data, async_add_devices, discovery_info=None\n    ):\n        account = config_entry.data[CONF_EMAIL]\n        account_dict = hass.data[DATA_ALEXAMEDIA][\"accounts\"][account]\n        for component in DEPENDENT_ALEXA_COMPONENTS:\n            try:\n                entry_setup = len(account_dict[\"entities\"][component])\n            except (TypeError, KeyError):\n                entry_setup = 1\n            if entry_setup or component == \"notify\":\n                _LOGGER.debug(\"%s: Loading %s\", hide_email(account), component)\n                cleaned_config = config_entry.data.copy()\n                cleaned_config.pop(CONF_PASSWORD, None)\n                # CONF_PASSWORD contains sensitive info which is no longer needed\n                hass.async_create_task(\n                    async_load_platform(\n                        hass,\n                        component,\n                        ALEXA_DOMAIN,\n                        {CONF_NAME: ALEXA_DOMAIN, \"config\": cleaned_config},\n                        cleaned_config,\n                    )\n                )\n            else:\n                _LOGGER.debug(\n                    \"%s: Loading config entry for %s\", hide_email(account), component\n                )\n                hass.async_add_job(\n                    hass.config_entries.async_forward_entry_setup(\n                        config_entry, component\n                    )\n                )\n        return True\n    raise ConfigEntryNotReady\n\n\nasync def async_unload_entry(hass, entry) -> bool:\n    \"\"\"Unload a config entry.\"\"\"\n    account = entry.data[CONF_EMAIL]\n    _LOGGER.debug(\"%s: Attempting to unload media players\", hide_email(account))\n    account_dict = hass.data[DATA_ALEXAMEDIA][\"accounts\"][account]\n    for device in account_dict[\"entities\"][\"media_player\"].values():\n        _LOGGER.debug(\"%s: Removing %s\", hide_email(account), device)\n        await device.async_remove()\n    return True\n\n\nclass AlexaClient(MediaPlayerDevice, AlexaMedia):\n    \"\"\"Representation of a Alexa device.\"\"\"\n\n    def __init__(self, device, login, second_account_index=0):\n        # pylint: disable=unused-argument\n        \"\"\"Initialize the Alexa device.\"\"\"\n        super().__init__(self, login)\n\n        # Logged in info\n        self._authenticated = None\n        self._can_access_prime_music = None\n        self._customer_email = None\n        self._customer_id = None\n        self._customer_name = None\n\n        # Device info\n        self._device = device\n        self._device_name = None\n        self._device_serial_number = None\n        self._device_type = None\n        self._device_family = None\n        self._device_owner_customer_id = None\n        self._software_version = None\n        self._available = None\n        self._assumed_state = False\n        self._capabilities = []\n        self._cluster_members = []\n        self._locale = None\n        # Media\n        self._session = None\n        self._media_duration = None\n        self._media_image_url = None\n        self._media_title = None\n        self._media_pos = None\n        self._media_album_name = None\n        self._media_artist = None\n        self._media_player_state = None\n        self._media_is_muted = None\n        self._media_vol_level = None\n        self._previous_volume = None\n        self._source = None\n        self._source_list = []\n        self._connected_bluetooth = None\n        self._bluetooth_list = []\n        self._shuffle = None\n        self._repeat = None\n        self._playing_parent = None\n        # Last Device\n        self._last_called = None\n        self._last_called_timestamp = None\n        self._last_called_summary = None\n        # Do not Disturb state\n        self._dnd = None\n        # Polling state\n        self._should_poll = True\n        self._last_update = util.utcnow()\n        self._listener = None\n        self._bluetooth_state = None\n        self._app_device_list = None\n        self._parent_clusters = None\n        self._timezone = None\n        self._second_account_index = second_account_index\n\n    async def init(self, device):\n        \"\"\"Initialize.\"\"\"\n        await self.refresh(device, skip_api=True)\n\n    async def async_added_to_hass(self):\n        \"\"\"Perform tasks after loading.\"\"\"\n        # Register event handler on bus\n        await self.refresh(self._device)\n        self._listener = async_dispatcher_connect(\n            self.hass,\n            f\"{ALEXA_DOMAIN}_{hide_email(self._login.email)}\"[0:32],\n            self._handle_event,\n        )\n        # Register to coordinator:\n        email = self._login.email\n        coordinator = self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][email].get(\n            \"coordinator\"\n        )\n        if coordinator:\n            coordinator.async_add_listener(self.update)\n\n    async def async_will_remove_from_hass(self):\n        \"\"\"Prepare to remove entity.\"\"\"\n        # Register event handler on bus\n        self._listener()\n        email = self._login.email\n        coordinator = self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][email].get(\n            \"coordinator\"\n        )\n        if coordinator:\n            coordinator.async_remove_listener(self.update)\n\n    async def _handle_event(self, event):\n        \"\"\"Handle events.\n\n        This will update last_called and player_state events.\n        Each MediaClient reports if it's the last_called MediaClient and will\n        listen for HA events to determine it is the last_called.\n        When polling instead of websockets, all devices on same account will\n        update to handle starting music with other devices. If websocket is on\n        only the updated alexa will update.\n        Last_called events are only sent if it's a new device or timestamp.\n        Without polling, we must schedule the HA update manually.\n        https://developers.home-assistant.io/docs/en/entity_index.html#subscribing-to-updates\n        The difference between self.update and self.schedule_update_ha_state\n        is self.update will pull data from Amazon, while schedule_update\n        assumes the MediaClient state is already updated.\n        \"\"\"\n\n        async def _refresh_if_no_audiopush(already_refreshed=False):\n            email = self._login.email\n            seen_commands = (\n                self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\n                    \"websocket_commands\"\n                ].keys()\n                if \"websocket_commands\"\n                in (self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][email])\n                else None\n            )\n            if (\n                not already_refreshed\n                and seen_commands\n                and not (\n                    \"PUSH_AUDIO_PLAYER_STATE\" in seen_commands\n                    or \"PUSH_MEDIA_CHANGE\" in seen_commands\n                    or \"PUSH_MEDIA_PROGRESS_CHANGE\" in seen_commands\n                )\n            ):\n                # force refresh if player_state update not found, see #397\n                _LOGGER.debug(\n                    \"%s: No PUSH_AUDIO_PLAYER_STATE/\"\n                    \"PUSH_MEDIA_CHANGE/PUSH_MEDIA_PROGRESS_CHANGE in %s;\"\n                    \"forcing refresh\",\n                    hide_email(email),\n                    seen_commands,\n                )\n                await self.async_update()\n\n        try:\n            if not self.enabled:\n                return\n        except AttributeError:\n            pass\n        already_refreshed = False\n        event_serial = None\n        if \"last_called_change\" in event:\n            event_serial = (\n                event[\"last_called_change\"][\"serialNumber\"]\n                if event[\"last_called_change\"]\n                else None\n            )\n        elif \"bluetooth_change\" in event:\n            event_serial = (\n                event[\"bluetooth_change\"][\"deviceSerialNumber\"]\n                if event[\"bluetooth_change\"]\n                else None\n            )\n        elif \"player_state\" in event:\n            event_serial = (\n                event[\"player_state\"][\"dopplerId\"][\"deviceSerialNumber\"]\n                if event[\"player_state\"]\n                else None\n            )\n        elif \"queue_state\" in event:\n            event_serial = (\n                event[\"queue_state\"][\"dopplerId\"][\"deviceSerialNumber\"]\n                if event[\"queue_state\"]\n                else None\n            )\n        elif \"push_activity\" in event:\n            event_serial = (\n                event.get(\"push_activity\", {}).get(\"key\", {}).get(\"serialNumber\")\n            )\n        if not event_serial:\n            return\n        if event_serial == self.device_serial_number:\n            self._available = True\n            self.async_write_ha_state()\n        if \"last_called_change\" in event:\n            if (\n                event_serial == self.device_serial_number\n                or any(\n                    item[\"serialNumber\"] == event_serial\n                    for item in self._app_device_list\n                )\n                and self._last_called_timestamp\n                != event[\"last_called_change\"][\"timestamp\"]\n            ):\n\n                _LOGGER.debug(\n                    \"%s: %s is last_called: %s\",\n                    hide_email(self._login.email),\n                    self,\n                    hide_serial(self.device_serial_number),\n                )\n                self._last_called = True\n                self._last_called_timestamp = event[\"last_called_change\"][\"timestamp\"]\n                self._last_called_summary = event[\"last_called_change\"].get(\"summary\")\n                if self.hass and self.async_write_ha_state:\n                    self.async_write_ha_state()\n                await self._update_notify_targets()\n            else:\n                self._last_called = False\n            if self.hass and self.async_schedule_update_ha_state:\n                email = self._login.email\n                force_refresh = not (\n                    self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"websocket\"]\n                )\n                self.async_schedule_update_ha_state(force_refresh=force_refresh)\n        elif \"bluetooth_change\" in event:\n            if event_serial == self.device_serial_number:\n                _LOGGER.debug(\n                    \"%s: %s bluetooth_state update: %s\",\n                    hide_email(self._login.email),\n                    self.name,\n                    hide_serial(event[\"bluetooth_change\"]),\n                )\n                self._bluetooth_state = event[\"bluetooth_change\"]\n                # the setting of bluetooth_state is not consistent as this\n                # takes from the event instead of the hass storage. We're\n                # setting the value twice. Architectually we should have a\n                # single authoritative source of truth.\n                self._source = self._get_source()\n                self._source_list = self._get_source_list()\n                self._connected_bluetooth = self._get_connected_bluetooth()\n                self._bluetooth_list = self._get_bluetooth_list()\n                if self.hass and self.async_write_ha_state:\n                    self.async_write_ha_state()\n        elif \"player_state\" in event:\n            player_state = event[\"player_state\"]\n            if event_serial == self.device_serial_number:\n                if \"audioPlayerState\" in player_state:\n                    _LOGGER.debug(\n                        \"%s: %s state update: %s\",\n                        hide_email(self._login.email),\n                        self.name,\n                        player_state[\"audioPlayerState\"],\n                    )\n                    # allow delay before trying to refresh to avoid http 400 errors\n                    await asyncio.sleep(2)\n                    await self.async_update()\n                    already_refreshed = True\n                elif \"mediaReferenceId\" in player_state:\n                    _LOGGER.debug(\n                        \"%s: %s media update: %s\",\n                        hide_email(self._login.email),\n                        self.name,\n                        player_state[\"mediaReferenceId\"],\n                    )\n                    await self.async_update()\n                    already_refreshed = True\n                elif \"volumeSetting\" in player_state:\n                    _LOGGER.debug(\n                        \"%s: %s volume updated: %s\",\n                        hide_email(self._login.email),\n                        self.name,\n                        player_state[\"volumeSetting\"],\n                    )\n                    self._media_vol_level = player_state[\"volumeSetting\"] / 100\n                    if self.hass and self.async_write_ha_state:\n                        self.async_write_ha_state()\n                elif \"dopplerConnectionState\" in player_state:\n                    self.available = player_state[\"dopplerConnectionState\"] == \"ONLINE\"\n                    if self.hass and self.async_write_ha_state:\n                        self.async_write_ha_state()\n                await _refresh_if_no_audiopush(already_refreshed)\n        elif \"push_activity\" in event:\n            if self.state in {STATE_IDLE, STATE_PAUSED, STATE_PLAYING}:\n                _LOGGER.debug(\n                    \"%s: %s checking for potential state update due to push activity on %s\",\n                    hide_email(self._login.email),\n                    self.name,\n                    hide_serial(event_serial),\n                )\n                # allow delay before trying to refresh to avoid http 400 errors\n                await asyncio.sleep(2)\n                await self.async_update()\n                already_refreshed = True\n        if \"queue_state\" in event:\n            queue_state = event[\"queue_state\"]\n            if event_serial == self.device_serial_number:\n                if (\n                    \"trackOrderChanged\" in queue_state\n                    and not queue_state[\"trackOrderChanged\"]\n                    and \"loopMode\" in queue_state\n                ):\n                    self._repeat = queue_state[\"loopMode\"] == \"LOOP_QUEUE\"\n                    _LOGGER.debug(\n                        \"%s: %s repeat updated to: %s %s\",\n                        hide_email(self._login.email),\n                        self.name,\n                        self._repeat,\n                        queue_state[\"loopMode\"],\n                    )\n                elif \"playBackOrder\" in queue_state:\n                    self._shuffle = queue_state[\"playBackOrder\"] == \"SHUFFLE_ALL\"\n                    _LOGGER.debug(\n                        \"%s: %s shuffle updated to: %s %s\",\n                        hide_email(self._login.email),\n                        self.name,\n                        self._shuffle,\n                        queue_state[\"playBackOrder\"],\n                    )\n                await _refresh_if_no_audiopush(already_refreshed)\n\n    def _clear_media_details(self):\n        \"\"\"Set all Media Items to None.\"\"\"\n        # General\n        self._media_duration = None\n        self._media_image_url = None\n        self._media_title = None\n        self._media_pos = None\n        self._media_album_name = None\n        self._media_artist = None\n        self._media_player_state = None\n        self._media_is_muted = None\n        # volume is also used for announce/tts so state should remain\n        # self._media_vol_level = None\n\n    def _set_authentication_details(self, auth):\n        \"\"\"Set Authentication based off auth.\"\"\"\n        self._authenticated = auth[\"authenticated\"]\n        self._can_access_prime_music = auth[\"canAccessPrimeMusicContent\"]\n        self._customer_email = auth[\"customerEmail\"]\n        self._customer_id = auth[\"customerId\"]\n        self._customer_name = auth[\"customerName\"]\n\n    @util.Throttle(MIN_TIME_BETWEEN_SCANS, MIN_TIME_BETWEEN_FORCED_SCANS)\n    @_catch_login_errors\n    async def refresh(self, device=None, skip_api: bool = False):\n        \"\"\"Refresh device data.\n\n        This is a per device refresh and for many Alexa devices can result in\n        many refreshes from each individual device. This will call the\n        AlexaAPI directly.\n\n        Args:\n        device (json): A refreshed device json from Amazon. For efficiency,\n                       an individual device does not refresh if it's reported\n                       as offline.\n        skip_api (bool): Whether to only due a device json update and not hit the API\n\n        \"\"\"\n        if device is not None:\n            self._device_name = device[\"accountName\"]\n            self._device_family = device[\"deviceFamily\"]\n            self._device_type = device[\"deviceType\"]\n            self._device_serial_number = device[\"serialNumber\"]\n            self._app_device_list = device[\"appDeviceList\"]\n            self._device_owner_customer_id = device[\"deviceOwnerCustomerId\"]\n            self._software_version = device[\"softwareVersion\"]\n            self._available = device[\"online\"]\n            self._capabilities = device[\"capabilities\"]\n            self._cluster_members = device[\"clusterMembers\"]\n            self._parent_clusters = device[\"parentClusters\"]\n            self._bluetooth_state = device.get(\"bluetooth_state\", {})\n            self._locale = device[\"locale\"] if \"locale\" in device else \"en-US\"\n            self._timezone = device[\"timeZoneId\"] if \"timeZoneId\" in device else \"UTC\"\n            self._dnd = device[\"dnd\"] if \"dnd\" in device else None\n            self._set_authentication_details(device[\"auth_info\"])\n        session = None\n        if self.available:\n            _LOGGER.debug(\"%s: Refreshing %s\", self.account, self)\n            self._assumed_state = False\n            if \"PAIR_BT_SOURCE\" in self._capabilities:\n                self._source = self._get_source()\n                self._source_list = self._get_source_list()\n                self._connected_bluetooth = self._get_connected_bluetooth()\n                self._bluetooth_list = self._get_bluetooth_list()\n            new_last_called = self._get_last_called()\n            if new_last_called and self._last_called != new_last_called:\n                self._last_called = new_last_called\n                self._last_called_timestamp = self.hass.data[DATA_ALEXAMEDIA][\n                    \"accounts\"\n                ][self._login.email][\"last_called\"][\"timestamp\"]\n                self._last_called_summary = self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][\n                    self._login.email\n                ][\"last_called\"].get(\"summary\")\n                await self._update_notify_targets()\n            if skip_api and self.hass:\n                self.async_write_ha_state()\n                return\n            if \"MUSIC_SKILL\" in self._capabilities:\n                if self._parent_clusters and self.hass:\n                    playing_parents = list(\n                        filter(\n                            lambda x: (\n                                self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][\n                                    self._login.email\n                                ][\"entities\"][\"media_player\"].get(x)\n                                and self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][\n                                    self._login.email\n                                ][\"entities\"][\"media_player\"][x].state\n                                == STATE_PLAYING\n                            ),\n                            self._parent_clusters,\n                        )\n                    )\n                else:\n                    playing_parents = []\n                parent_session = {}\n                if playing_parents:\n                    if len(playing_parents) > 1:\n                        _LOGGER.warning(\n                            \"Found multiple playing parents \" \"please file an issue\"\n                        )\n                    parent = self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][\n                        self._login.email\n                    ][\"entities\"][\"media_player\"][playing_parents[0]]\n                    self._playing_parent = parent\n                    parent_session = parent.session\n                if parent_session:\n                    session = parent_session.copy()\n                    session[\"isPlayingInLemur\"] = False\n                    session[\"lemurVolume\"] = None\n                    session[\"volume\"] = (\n                        parent_session[\"lemurVolume\"][\"memberVolume\"][\n                            self.device_serial_number\n                        ]\n                        if parent_session.get(\"lemurVolume\")\n                        and parent_session.get(\"lemurVolume\", {})\n                        .get(\"memberVolume\", {})\n                        .get(self.device_serial_number)\n                        else session[\"volume\"]\n                    )\n                    session = {\"playerInfo\": session}\n                else:\n                    self._playing_parent = None\n                    session = await self.alexa_api.get_state()\n        self._clear_media_details()\n        # update the session if it exists\n        self._session = session if session else None\n        if self._session and self._session.get(\"playerInfo\"):\n            self._session = self._session[\"playerInfo\"]\n            if self._session.get(\"transport\"):\n                self._shuffle = (\n                    self._session[\"transport\"][\"shuffle\"] == \"SELECTED\"\n                    if (\n                        \"shuffle\" in self._session[\"transport\"]\n                        and self._session[\"transport\"][\"shuffle\"] != \"DISABLED\"\n                    )\n                    else None\n                )\n                self._repeat = (\n                    self._session[\"transport\"][\"repeat\"] == \"SELECTED\"\n                    if (\n                        \"repeat\" in self._session[\"transport\"]\n                        and self._session[\"transport\"][\"repeat\"] != \"DISABLED\"\n                    )\n                    else None\n                )\n            if self._session.get(\"state\"):\n                self._media_player_state = self._session[\"state\"]\n                self._media_title = self._session.get(\"infoText\", {}).get(\"title\")\n                self._media_artist = self._session.get(\"infoText\", {}).get(\"subText1\")\n                self._media_album_name = self._session.get(\"infoText\", {}).get(\n                    \"subText2\"\n                )\n                self._media_image_url = (\n                    self._session.get(\"mainArt\", {}).get(\"url\")\n                    if self._session.get(\"mainArt\")\n                    else None\n                )\n                self._media_pos = (\n                    self._session.get(\"progress\", {}).get(\"mediaProgress\")\n                    if self._session.get(\"progress\")\n                    else None\n                )\n                self._media_duration = (\n                    self._session.get(\"progress\", {}).get(\"mediaLength\")\n                    if self._session.get(\"progress\")\n                    else None\n                )\n                if not self._session.get(\"lemurVolume\"):\n                    self._media_is_muted = (\n                        self._session.get(\"volume\", {}).get(\"muted\")\n                        if self._session.get(\"volume\")\n                        else self._media_is_muted\n                    )\n                    self._media_vol_level = (\n                        self._session[\"volume\"][\"volume\"] / 100\n                        if self._session.get(\"volume\")\n                        and self._session.get(\"volume\", {}).get(\"volume\")\n                        else self._media_vol_level\n                    )\n                else:\n                    self._media_is_muted = (\n                        self._session.get(\"lemurVolume\", {})\n                        .get(\"compositeVolume\", {})\n                        .get(\"muted\")\n                    )\n                    self._media_vol_level = (\n                        self._session[\"lemurVolume\"][\"compositeVolume\"][\"volume\"] / 100\n                        if (\n                            self._session.get(\"lemurVolume\", {})\n                            .get(\"compositeVolume\", {})\n                            .get(\"volume\")\n                        )\n                        else self._media_vol_level\n                    )\n                if self.hass and self._session.get(\"isPlayingInLemur\"):\n                    asyncio.gather(\n                        *map(\n                            lambda x: (\n                                self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][\n                                    self._login.email\n                                ][\"entities\"][\"media_player\"][x].async_update()\n                            ),\n                            filter(\n                                lambda x: (\n                                    self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][\n                                        self._login.email\n                                    ][\"entities\"][\"media_player\"].get(x)\n                                    and self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][\n                                        self._login.email\n                                    ][\"entities\"][\"media_player\"][x].available\n                                ),\n                                self._cluster_members,\n                            ),\n                        )\n                    )\n        if self.hass:\n            self.async_write_ha_state()\n\n    @property\n    def source(self):\n        \"\"\"Return the current input source.\"\"\"\n        return self._source\n\n    @property\n    def source_list(self):\n        \"\"\"List of available input sources.\"\"\"\n        return self._source_list\n\n    @_catch_login_errors\n    async def async_select_source(self, source):\n        \"\"\"Select input source.\"\"\"\n        if source == \"Local Speaker\":\n            if self.hass:\n                self.hass.async_create_task(self.alexa_api.disconnect_bluetooth())\n            else:\n                await self.alexa_api.disconnect_bluetooth()\n            self._source = \"Local Speaker\"\n        elif self._bluetooth_state.get(\"pairedDeviceList\"):\n            for devices in self._bluetooth_state[\"pairedDeviceList\"]:\n                if devices[\"friendlyName\"] == source:\n                    if self.hass:\n                        self.hass.async_create_task(\n                            self.alexa_api.set_bluetooth(devices[\"address\"])\n                        )\n                    else:\n                        await self.alexa_api.set_bluetooth(devices[\"address\"])\n                    self._source = source\n        if not (\n            self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][self._login.email][\"websocket\"]\n        ):\n            await self.async_update()\n\n    def _get_source(self):\n        source = \"Local Speaker\"\n        if self._bluetooth_state.get(\"pairedDeviceList\"):\n            for device in self._bluetooth_state[\"pairedDeviceList\"]:\n                if (\n                    device[\"connected\"] is True\n                    and device[\"friendlyName\"] in self.source_list\n                ):\n                    return device[\"friendlyName\"]\n        return source\n\n    def _get_source_list(self):\n        sources = []\n        if self._bluetooth_state.get(\"pairedDeviceList\"):\n            for devices in self._bluetooth_state[\"pairedDeviceList\"]:\n                if devices[\"profiles\"] and \"A2DP-SOURCE\" in devices[\"profiles\"]:\n                    sources.append(devices[\"friendlyName\"])\n        return [\"Local Speaker\"] + sources\n\n    def _get_connected_bluetooth(self):\n        source = None\n        if self._bluetooth_state.get(\"pairedDeviceList\"):\n            for device in self._bluetooth_state[\"pairedDeviceList\"]:\n                if device[\"connected\"] is True:\n                    return device[\"friendlyName\"]\n        return source\n\n    def _get_bluetooth_list(self):\n        sources = []\n        if self._bluetooth_state.get(\"pairedDeviceList\"):\n            for devices in self._bluetooth_state[\"pairedDeviceList\"]:\n                sources.append(devices[\"friendlyName\"])\n        return sources\n\n    def _get_last_called(self):\n        try:\n            last_called_serial = (\n                None\n                if self.hass is None\n                else (\n                    self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][self._login.email][\n                        \"last_called\"\n                    ][\"serialNumber\"]\n                )\n            )\n        except (TypeError, KeyError):\n            last_called_serial = None\n        _LOGGER.debug(\n            \"%s: %s: Last_called check: self: %s reported: %s\",\n            hide_email(self._login.email),\n            self._device_name,\n            hide_serial(self._device_serial_number),\n            hide_serial(last_called_serial),\n        )\n        return last_called_serial is not None and (\n            self._device_serial_number == last_called_serial\n            or any(\n                item[\"serialNumber\"] == last_called_serial\n                for item in self._app_device_list\n            )\n        )\n\n    @property\n    def available(self):\n        \"\"\"Return the availability of the client.\"\"\"\n        return self._available\n\n    @available.setter\n    def available(self, state):\n        \"\"\"Set the availability state.\"\"\"\n        self._available = state\n\n    @property\n    def assumed_state(self):\n        \"\"\"Return whether the state is an assumed_state.\"\"\"\n        return self._assumed_state\n\n    @property\n    def hidden(self):\n        \"\"\"Return whether the sensor should be hidden.\"\"\"\n        return \"MUSIC_SKILL\" not in self._capabilities\n\n    @property\n    def unique_id(self):\n        \"\"\"Return the id of this Alexa client.\"\"\"\n        email = self._login.email\n        return (\n            slugify(f\"{self.device_serial_number}_{email}\")\n            if self._second_account_index\n            else self.device_serial_number\n        )\n\n    @property\n    def name(self):\n        \"\"\"Return the name of the device.\"\"\"\n        return self._device_name\n\n    @property\n    def device_serial_number(self):\n        \"\"\"Return the machine identifier of the device.\"\"\"\n        return self._device_serial_number\n\n    @property\n    def session(self):\n        \"\"\"Return the session, if any.\"\"\"\n        return self._session\n\n    @property\n    def state(self):\n        \"\"\"Return the state of the device.\"\"\"\n        if not self.available:\n            return STATE_UNAVAILABLE\n        if self._media_player_state == \"PLAYING\":\n            return STATE_PLAYING\n        if self._media_player_state == \"PAUSED\":\n            return STATE_PAUSED\n        if self._media_player_state == \"IDLE\":\n            return STATE_IDLE\n        return STATE_STANDBY\n\n    def update(self):\n        \"\"\"Get the latest details on a media player synchronously.\"\"\"\n        return\n        # return self.hass.add_job(async_update)\n\n    @_catch_login_errors\n    async def async_update(self):\n        \"\"\"Get the latest details on a media player.\n\n        Because media players spend the majority of time idle, an adaptive\n        update should be used to avoid flooding Amazon focusing on known\n        play states. An initial version included an update_devices call on\n        every update. However, this quickly floods the network for every new\n        device added. This should only call refresh() to call the AlexaAPI.\n        \"\"\"\n        try:\n            if not self.enabled:\n                return\n        except AttributeError:\n            pass\n        email = self._login.email\n        if (\n            self.entity_id is None  # Device has not initialized yet\n            or email not in self.hass.data[DATA_ALEXAMEDIA][\"accounts\"]\n            or self._login.session.closed\n        ):\n            self._assumed_state = True\n            self.available = False\n            return\n        device = self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\"devices\"][\n            \"media_player\"\n        ][self.device_serial_number]\n        seen_commands = (\n            self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][email][\n                \"websocket_commands\"\n            ].keys()\n            if \"websocket_commands\"\n            in (self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][email])\n            else None\n        )\n        await self.refresh(  # pylint: disable=unexpected-keyword-arg\n            device, no_throttle=True\n        )\n        websocket_enabled = (\n            self.hass.data[DATA_ALEXAMEDIA][\"accounts\"].get(email, {}).get(\"websocket\")\n        )\n        if (\n            self.state in [STATE_PLAYING]\n            and\n            #  only enable polling if websocket not connected\n            (\n                not websocket_enabled\n                or not seen_commands\n                or not (\n                    \"PUSH_AUDIO_PLAYER_STATE\" in seen_commands\n                    or \"PUSH_MEDIA_CHANGE\" in seen_commands\n                    or \"PUSH_MEDIA_PROGRESS_CHANGE\" in seen_commands\n                )\n            )\n        ):\n            self._should_poll = False  # disable polling since manual update\n            if (\n                self._last_update == 0\n                or util.dt.as_timestamp(util.utcnow())\n                - util.dt.as_timestamp(self._last_update)\n                > PLAY_SCAN_INTERVAL\n            ):\n                _LOGGER.debug(\n                    \"%s: %s playing; scheduling update in %s seconds\",\n                    hide_email(self._login.email),\n                    self.name,\n                    PLAY_SCAN_INTERVAL,\n                )\n                async_call_later(\n                    self.hass,\n                    PLAY_SCAN_INTERVAL,\n                    lambda _: self.async_schedule_update_ha_state(force_refresh=True),\n                )\n        elif self._should_poll:  # Not playing, one last poll\n            self._should_poll = False\n            if not websocket_enabled:\n                _LOGGER.debug(\n                    \"%s: Disabling polling and scheduling last update in\"\n                    \" 300 seconds for %s\",\n                    hide_email(self._login.email),\n                    self.name,\n                )\n                async_call_later(\n                    self.hass,\n                    300,\n                    lambda _: self.async_schedule_update_ha_state(force_refresh=True),\n                )\n            else:\n                _LOGGER.debug(\n                    \"%s: Disabling polling for %s\",\n                    hide_email(self._login.email),\n                    self.name,\n                )\n        self._last_update = util.utcnow()\n        self.async_write_ha_state()\n\n    @property\n    def media_content_type(self):\n        \"\"\"Return the content type of current playing media.\"\"\"\n        if self.state in [STATE_PLAYING, STATE_PAUSED]:\n            return MEDIA_TYPE_MUSIC\n        return STATE_STANDBY\n\n    @property\n    def media_artist(self):\n        \"\"\"Return the artist of current playing media, music track only.\"\"\"\n        return self._media_artist\n\n    @property\n    def media_album_name(self):\n        \"\"\"Return the album name of current playing media, music track only.\"\"\"\n        return self._media_album_name\n\n    @property\n    def media_duration(self):\n        \"\"\"Return the duration of current playing media in seconds.\"\"\"\n        return self._media_duration\n\n    @property\n    def media_position(self):\n        \"\"\"Return the duration of current playing media in seconds.\"\"\"\n        return self._media_pos\n\n    @property\n    def media_position_updated_at(self):\n        \"\"\"When was the position of the current playing media valid.\"\"\"\n        return self._last_update\n\n    @property\n    def media_image_url(self) -> Optional[Text]:\n        \"\"\"Return the image URL of current playing media.\"\"\"\n        if self._media_image_url:\n            return re.sub(\"\\\\(\", \"%28\", re.sub(\"\\\\)\", \"%29\", self._media_image_url))\n            # fix failure of HA media player ui to quote \"(\" or \")\"\n        return None\n\n    @property\n    def media_image_remotely_accessible(self):\n        \"\"\"Return whether image is accessible outside of the home network.\"\"\"\n        return bool(self._media_image_url)\n\n    @property\n    def media_title(self):\n        \"\"\"Return the title of current playing media.\"\"\"\n        return self._media_title\n\n    @property\n    def device_family(self):\n        \"\"\"Return the make of the device (ex. Echo, Other).\"\"\"\n        return self._device_family\n\n    @property\n    def dnd_state(self):\n        \"\"\"Return the Do Not Disturb state.\"\"\"\n        return self._dnd\n\n    @dnd_state.setter\n    def dnd_state(self, state):\n        \"\"\"Set the Do Not Disturb state.\"\"\"\n        self._dnd = state\n\n    @_catch_login_errors\n    async def async_set_shuffle(self, shuffle):\n        \"\"\"Enable/disable shuffle mode.\"\"\"\n        if self.hass:\n            self.hass.async_create_task(self.alexa_api.shuffle(shuffle))\n        else:\n            await self.alexa_api.shuffle(shuffle)\n        self._shuffle = shuffle\n\n    @property\n    def shuffle(self):\n        \"\"\"Return the Shuffle state.\"\"\"\n        return self._shuffle\n\n    @shuffle.setter\n    def shuffle(self, state):\n        \"\"\"Set the Shuffle state.\"\"\"\n        self._shuffle = state\n        self.async_write_ha_state()\n\n    @property\n    def repeat_state(self):\n        \"\"\"Return the Repeat state.\"\"\"\n        return self._repeat\n\n    @repeat_state.setter\n    def repeat_state(self, state):\n        \"\"\"Set the Repeat state.\"\"\"\n        self._repeat = state\n        self.async_write_ha_state()\n\n    @property\n    def supported_features(self):\n        \"\"\"Flag media player features that are supported.\"\"\"\n        return SUPPORT_ALEXA\n\n    @_catch_login_errors\n    async def async_set_volume_level(self, volume):\n        \"\"\"Set volume level, range 0..1.\"\"\"\n        if not self.available:\n            return\n        if self.hass:\n            self.hass.async_create_task(self.alexa_api.set_volume(volume))\n        else:\n            await self.alexa_api.set_volume(volume)\n        self._media_vol_level = volume\n        if not (\n            self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][self._login.email][\"websocket\"]\n        ):\n            await self.async_update()\n\n    @property\n    def volume_level(self):\n        \"\"\"Return the volume level of the client (0..1).\"\"\"\n        return self._media_vol_level\n\n    @property\n    def is_volume_muted(self):\n        \"\"\"Return boolean if volume is currently muted.\"\"\"\n        if self.volume_level == 0:\n            return True\n        return False\n\n    @_catch_login_errors\n    async def async_mute_volume(self, mute):\n        \"\"\"Mute the volume.\n\n        Since we can't actually mute, we'll:\n        - On mute, store volume and set volume to 0\n        - On unmute, set volume to previously stored volume\n        \"\"\"\n        if not self.available:\n            return\n\n        self._media_is_muted = mute\n        if mute:\n            self._previous_volume = self.volume_level\n            if self.hass:\n                self.hass.async_create_task(self.alexa_api.set_volume(0))\n            else:\n                await self.alexa_api.set_volume(0)\n        else:\n            if self._previous_volume is not None:\n                if self.hass:\n                    self.hass.async_create_task(\n                        self.alexa_api.set_volume(self._previous_volume)\n                    )\n                else:\n                    await self.alexa_api.set_volume(self._previous_volume)\n            else:\n                if self.hass:\n                    self.hass.async_create_task(self.alexa_api.set_volume(50))\n                else:\n                    await self.alexa_api.set_volume(50)\n        if not (\n            self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][self._login.email][\"websocket\"]\n        ):\n            await self.async_update()\n\n    @_catch_login_errors\n    async def async_media_play(self):\n        \"\"\"Send play command.\"\"\"\n        if not (self.state in [STATE_PLAYING, STATE_PAUSED] and self.available):\n            return\n        if self._playing_parent:\n            await self._playing_parent.async_media_play()\n        else:\n            if self.hass:\n                self.hass.async_create_task(self.alexa_api.play())\n            else:\n                await self.alexa_api.play()\n        if not (\n            self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][self._login.email][\"websocket\"]\n        ):\n            await self.async_update()\n\n    @_catch_login_errors\n    async def async_media_pause(self):\n        \"\"\"Send pause command.\"\"\"\n        if not (self.state in [STATE_PLAYING, STATE_PAUSED] and self.available):\n            return\n        if self._playing_parent:\n            await self._playing_parent.async_media_pause()\n        else:\n            if self.hass:\n                self.hass.async_create_task(self.alexa_api.pause())\n            else:\n                await self.alexa_api.pause()\n        if not (\n            self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][self._login.email][\"websocket\"]\n        ):\n            await self.async_update()\n\n    @_catch_login_errors\n    async def async_media_stop(self):\n        \"\"\"Send stop command.\"\"\"\n        if not self.available:\n            return\n        if self._playing_parent:\n            await self._playing_parent.async_media_stop()\n        else:\n            if self.hass:\n                self.hass.async_create_task(\n                    self.alexa_api.stop(\n                        customer_id=self._customer_id,\n                        queue_delay=self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][\n                            self.email\n                        ][\"options\"][CONF_QUEUE_DELAY],\n                    )\n                )\n            else:\n                await self.alexa_api.stop(\n                    customer_id=self._customer_id,\n                    queue_delay=self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][self.email][\n                        \"options\"\n                    ][CONF_QUEUE_DELAY],\n                )\n        if not (\n            self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][self._login.email][\"websocket\"]\n        ):\n            await self.async_update()\n\n    @_catch_login_errors\n    async def async_turn_off(self):\n        \"\"\"Turn the client off.\n\n        While Alexa's do not have on/off capability, we can use this as another\n        trigger to do updates. For turning off, we can clear media_details.\n        \"\"\"\n        self._should_poll = False\n        await self.async_media_pause()\n        self._clear_media_details()\n\n    @_catch_login_errors\n    async def async_turn_on(self):\n        \"\"\"Turn the client on.\n\n        While Alexa's do not have on/off capability, we can use this as another\n        trigger to do updates.\n        \"\"\"\n        self._should_poll = True\n        await self.async_media_pause()\n\n    @_catch_login_errors\n    async def async_media_next_track(self):\n        \"\"\"Send next track command.\"\"\"\n        if not (self.state in [STATE_PLAYING, STATE_PAUSED] and self.available):\n            return\n        if self._playing_parent:\n            await self._playing_parent.async_media_next_track()\n        else:\n            if self.hass:\n                self.hass.async_create_task(self.alexa_api.next())\n            else:\n                await self.alexa_api.next()\n        if not (\n            self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][self._login.email][\"websocket\"]\n        ):\n            await self.async_update()\n\n    @_catch_login_errors\n    async def async_media_previous_track(self):\n        \"\"\"Send previous track command.\"\"\"\n        if not (self.state in [STATE_PLAYING, STATE_PAUSED] and self.available):\n            return\n        if self._playing_parent:\n            await self._playing_parent.async_media_previous_track()\n        else:\n            if self.hass:\n                self.hass.async_create_task(self.alexa_api.previous())\n            else:\n                await self.alexa_api.previous()\n        if not (\n            self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][self._login.email][\"websocket\"]\n        ):\n            await self.async_update()\n\n    @_catch_login_errors\n    async def async_send_tts(self, message, **kwargs):\n        \"\"\"Send TTS to Device.\n\n        NOTE: Does not work on WHA Groups.\n        \"\"\"\n        if self.hass:\n            self.hass.async_create_task(\n                self.alexa_api.send_tts(\n                    message, customer_id=self._customer_id, **kwargs\n                )\n            )\n        else:\n            await self.alexa_api.send_tts(\n                message, customer_id=self._customer_id, **kwargs\n            )\n\n    @_catch_login_errors\n    async def async_send_announcement(self, message, **kwargs):\n        \"\"\"Send announcement to the media player.\"\"\"\n        if self.hass:\n            self.hass.async_create_task(\n                self.alexa_api.send_announcement(\n                    message, customer_id=self._customer_id, **kwargs\n                )\n            )\n        else:\n            await self.alexa_api.send_announcement(\n                message, customer_id=self._customer_id, **kwargs\n            )\n\n    @_catch_login_errors\n    async def async_send_mobilepush(self, message, **kwargs):\n        \"\"\"Send push to the media player's associated mobile devices.\"\"\"\n        if self.hass:\n            self.hass.async_create_task(\n                self.alexa_api.send_mobilepush(\n                    message, customer_id=self._customer_id, **kwargs\n                )\n            )\n        else:\n            await self.alexa_api.send_mobilepush(\n                message, customer_id=self._customer_id, **kwargs\n            )\n\n    @_catch_login_errors\n    async def async_send_dropin_notification(self, message, **kwargs):\n        \"\"\"Send notification dropin to the media player's associated mobile devices.\"\"\"\n        if self.hass:\n            self.hass.async_create_task(\n                self.alexa_api.send_dropin_notification(\n                    message, customer_id=self._customer_id, **kwargs\n                )\n            )\n        else:\n            await self.alexa_api.send_dropin_notification(\n                message, customer_id=self._customer_id, **kwargs\n            )\n\n    @_catch_login_errors\n    async def async_play_media(self, media_type, media_id, enqueue=None, **kwargs):\n        # pylint: disable=unused-argument\n        \"\"\"Send the play_media command to the media player.\"\"\"\n        queue_delay = self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][self.email][\n            \"options\"\n        ].get(CONF_QUEUE_DELAY, DEFAULT_QUEUE_DELAY)\n        if media_type == \"music\":\n            await self.async_send_tts(\n                \"Sorry, text to speech can only be called\"\n                \" with the notify.alexa_media service.\"\n                \" Please see the alexa_media wiki for details.\"\n            )\n            _LOGGER.warning(\n                \"Sorry, text to speech can only be called\"\n                \" with the notify.alexa_media service.\"\n                \" Please see the alexa_media wiki for details.\"\n                \"https://github.com/custom-components/alexa_media_player/wiki/Configuration%3A-Notification-Component#use-the-notifyalexa_media-service\"\n            )\n        elif media_type == \"sequence\":\n            _LOGGER.debug(\n                \"%s: %s:Running sequence %s with queue_delay %s\",\n                hide_email(self._login.email),\n                self,\n                media_id,\n                queue_delay,\n            )\n            if self.hass:\n                self.hass.async_create_task(\n                    self.alexa_api.send_sequence(\n                        media_id,\n                        customer_id=self._customer_id,\n                        queue_delay=queue_delay,\n                        **kwargs,\n                    )\n                )\n            else:\n                await self.alexa_api.send_sequence(\n                    media_id,\n                    customer_id=self._customer_id,\n                    queue_delay=queue_delay,\n                    **kwargs,\n                )\n        elif media_type == \"routine\":\n            _LOGGER.debug(\n                \"%s: %s:Running routine %s with queue_delay %s\",\n                hide_email(self._login.email),\n                self,\n                media_id,\n                queue_delay,\n            )\n            if self.hass:\n                self.hass.async_create_task(\n                    self.alexa_api.run_routine(\n                        media_id,\n                        queue_delay=queue_delay,\n                    )\n                )\n            else:\n                await self.alexa_api.run_routine(\n                    media_id,\n                    queue_delay=queue_delay,\n                )\n        elif media_type == \"sound\":\n            _LOGGER.debug(\n                \"%s: %s:Playing sound %s with queue_delay %s\",\n                hide_email(self._login.email),\n                self,\n                media_id,\n                queue_delay,\n            )\n            if self.hass:\n                self.hass.async_create_task(\n                    self.alexa_api.play_sound(\n                        media_id,\n                        customer_id=self._customer_id,\n                        queue_delay=queue_delay,\n                        **kwargs,\n                    )\n                )\n            else:\n                await self.alexa_api.play_sound(\n                    media_id,\n                    customer_id=self._customer_id,\n                    queue_delay=queue_delay,\n                    **kwargs,\n                )\n        elif media_type == \"skill\":\n            _LOGGER.debug(\n                \"%s: %s:Running skill %s with queue_delay %s\",\n                hide_email(self._login.email),\n                self,\n                media_id,\n                queue_delay,\n            )\n            if self.hass:\n                self.hass.async_create_task(\n                    self.alexa_api.run_skill(\n                        media_id,\n                        queue_delay=queue_delay,\n                    )\n                )\n            else:\n                await self.alexa_api.run_skill(\n                    media_id,\n                    queue_delay=queue_delay,\n                )\n        elif media_type == \"image\":\n            _LOGGER.debug(\n                \"%s: %s:Setting background to %s\",\n                hide_email(self._login.email),\n                self,\n                media_id,\n            )\n            if self.hass:\n                self.hass.async_create_task(self.alexa_api.set_background(media_id))\n            else:\n                await self.alexa_api.set_background(media_id)\n        elif media_type == \"custom\":\n            _LOGGER.debug(\n                '%s: %s:Running custom command: \"%s\" with queue_delay %s',\n                hide_email(self._login.email),\n                self,\n                media_id,\n                queue_delay,\n            )\n            if self.hass:\n                self.hass.async_create_task(\n                    self.alexa_api.run_custom(\n                        media_id,\n                        customer_id=self._customer_id,\n                        queue_delay=queue_delay,\n                        **kwargs,\n                    )\n                )\n            else:\n                await self.alexa_api.run_custom(\n                    media_id,\n                    customer_id=self._customer_id,\n                    queue_delay=queue_delay,\n                    **kwargs,\n                )\n        else:\n            _LOGGER.debug(\n                \"%s: %s:Playing music %s on %s with queue_delay %s\",\n                hide_email(self._login.email),\n                self,\n                media_id,\n                media_type,\n                queue_delay,\n            )\n            if self.hass:\n                self.hass.async_create_task(\n                    self.alexa_api.play_music(\n                        media_type,\n                        media_id,\n                        customer_id=self._customer_id,\n                        queue_delay=queue_delay,\n                        timer=kwargs.get(\"extra\", {}).get(\"timer\", None),\n                        **kwargs,\n                    )\n                )\n            else:\n                await self.alexa_api.play_music(\n                    media_type,\n                    media_id,\n                    customer_id=self._customer_id,\n                    queue_delay=queue_delay,\n                    timer=kwargs.get(\"extra\", {}).get(\"timer\", None),\n                    **kwargs,\n                )\n        if not (\n            self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][self._login.email][\"websocket\"]\n        ):\n            await self.async_update()\n\n    @property\n    def extra_state_attributes(self):\n        \"\"\"Return the state attributes.\"\"\"\n        attr = {\n            \"available\": self.available,\n            \"last_called\": self._last_called,\n            \"last_called_timestamp\": self._last_called_timestamp,\n            \"last_called_summary\": self._last_called_summary,\n            \"connected_bluetooth\": self._connected_bluetooth,\n            \"bluetooth_list\": self._bluetooth_list,\n        }\n        return attr\n\n    @property\n    def should_poll(self):\n        \"\"\"Return the polling state.\"\"\"\n        return self._should_poll\n\n    @property\n    def device_info(self):\n        \"\"\"Return the device_info of the device.\"\"\"\n        return {\n            \"identifiers\": {(ALEXA_DOMAIN, self.unique_id)},\n            \"name\": self.name,\n            \"manufacturer\": \"Amazon\",\n            \"model\": f\"{self._device_family} {self._device_type}\",\n            \"sw_version\": self._software_version,\n        }\n\n    async def _update_notify_targets(self) -> None:\n        \"\"\"Update notification service targets.\"\"\"\n        if self.hass.data[DATA_ALEXAMEDIA].get(\"notify_service\"):\n            notify = self.hass.data[DATA_ALEXAMEDIA].get(\"notify_service\")\n            if hasattr(notify, \"registered_targets\"):\n                _LOGGER.debug(\n                    \"%s: Refreshing notify targets\",\n                    hide_email(self._login.email),\n                )\n                await notify.async_register_services()\n                entity_name_last_called = f\"{ALEXA_DOMAIN}_last_called{'_'+ self._login.email if self.unique_id[-1:].isdigit() else ''}\"\n                await asyncio.sleep(2)\n                if (\n                    notify.last_called\n                    and notify.registered_targets.get(entity_name_last_called)\n                    != self.unique_id\n                ):\n                    _LOGGER.debug(\n                        \"%s: Changing notify.targets is not supported by HA version < 2021.2.0; using toggle method\",\n                        hide_email(self._login.email),\n                    )\n                    notify.last_called = False\n                    await notify.async_register_services()\n                    await asyncio.sleep(2)\n                    notify.last_called = True\n                    await notify.async_register_services()\n            else:\n                _LOGGER.debug(\n                    \"%s: Unable to refresh notify targets; notify not ready\",\n                    hide_email(self._login.email),\n                )\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/notify.py",
    "content": "\"\"\"\nAlexa Devices notification service.\n\nSPDX-License-Identifier: Apache-2.0\n\nFor more details about this platform, please refer to the documentation at\nhttps://community.home-assistant.io/t/echo-devices-alexa-as-media-player-testers-needed/58639\n\"\"\"\nimport asyncio\nimport json\nimport logging\n\nfrom homeassistant.components.notify import (\n    ATTR_DATA,\n    ATTR_TARGET,\n    ATTR_TITLE,\n    ATTR_TITLE_DEFAULT,\n    SERVICE_NOTIFY,\n    BaseNotificationService,\n)\n\nfrom . import (\n    CONF_EMAIL,\n    CONF_QUEUE_DELAY,\n    DATA_ALEXAMEDIA,\n    DEFAULT_QUEUE_DELAY,\n    DOMAIN,\n    hide_email,\n    hide_serial,\n)\nfrom .helpers import retry_async\n\n_LOGGER = logging.getLogger(__name__)\n\n\n@retry_async(limit=5, delay=2, catch_exceptions=True)\nasync def async_get_service(hass, config, discovery_info=None):\n    # pylint: disable=unused-argument\n    \"\"\"Get the demo notification service.\"\"\"\n    result = False\n    for account, account_dict in hass.data[DATA_ALEXAMEDIA][\"accounts\"].items():\n        for key, _ in account_dict[\"devices\"][\"media_player\"].items():\n            if key not in account_dict[\"entities\"][\"media_player\"]:\n                _LOGGER.debug(\n                    \"%s: Media player %s not loaded yet; delaying load\",\n                    hide_email(account),\n                    hide_serial(key),\n                )\n                return False\n    result = hass.data[DATA_ALEXAMEDIA][\"notify_service\"] = AlexaNotificationService(\n        hass\n    )\n    return result\n\n\nasync def async_unload_entry(hass, entry) -> bool:\n    \"\"\"Unload a config entry.\"\"\"\n    _LOGGER.debug(\"Attempting to unload notify\")\n    target_account = entry.data[CONF_EMAIL]\n    other_accounts = False\n    for account, account_dict in hass.data[DATA_ALEXAMEDIA][\"accounts\"].items():\n        if account == target_account:\n            if \"entities\" not in account_dict:\n                continue\n            for device in account_dict[\"entities\"][\"media_player\"].values():\n                entity_id = device.entity_id.split(\".\")\n                hass.services.async_remove(SERVICE_NOTIFY, f\"{DOMAIN}_{entity_id[1]}\")\n        else:\n            other_accounts = True\n    if not other_accounts:\n        hass.services.async_remove(SERVICE_NOTIFY, f\"{DOMAIN}\")\n        if hass.data[DATA_ALEXAMEDIA].get(\"notify_service\"):\n            hass.data[DATA_ALEXAMEDIA].pop(\"notify_service\")\n    return True\n\n\nclass AlexaNotificationService(BaseNotificationService):\n    \"\"\"Implement Alexa Media Player notification service.\"\"\"\n\n    def __init__(self, hass):\n        \"\"\"Initialize the service.\"\"\"\n        self.hass = hass\n        self.last_called = True\n\n    def convert(self, names, type_=\"entities\", filter_matches=False):\n        \"\"\"Return a list of converted Alexa devices based on names.\n\n        Names may be matched either by serialNumber, accountName, or\n        Homeassistant entity_id and can return any of the above plus entities\n\n        Parameters\n        ----------\n        names : list(string)\n            A list of names to convert\n        type_ : string\n            The type to return entities, entity_ids, serialnumbers, names\n        filter_matches : bool\n            Whether non-matching items are removed from the returned list.\n\n        Returns\n        -------\n        list(string)\n            List of home assistant entity_ids\n\n        \"\"\"\n        devices = []\n        if isinstance(names, str):\n            names = [names]\n        for item in names:\n            matched = False\n            for alexa in self.devices:\n                # _LOGGER.debug(\n                #     \"Testing item: %s against (%s, %s, %s, %s)\",\n                #     item,\n                #     alexa,\n                #     alexa.name,\n                #     hide_serial(alexa.unique_id),\n                #     alexa.entity_id,\n                # )\n                if item in (\n                    alexa,\n                    alexa.name,\n                    alexa.unique_id,\n                    alexa.entity_id,\n                    alexa.device_serial_number,\n                ):\n                    if type_ == \"entities\":\n                        converted = alexa\n                    elif type_ == \"serialnumbers\":\n                        converted = alexa.device_serial_number\n                    elif type_ == \"names\":\n                        converted = alexa.name\n                    elif type_ == \"entity_ids\":\n                        converted = alexa.entity_id\n                    devices.append(converted)\n                    matched = True\n                    # _LOGGER.debug(\"Converting: %s to (%s): %s\", item, type_, converted)\n            if not filter_matches and not matched:\n                devices.append(item)\n        return devices\n\n    @property\n    def targets(self):\n        \"\"\"Return a dictionary of Alexa devices.\"\"\"\n        devices = {}\n        for email, account_dict in self.hass.data[DATA_ALEXAMEDIA][\"accounts\"].items():\n            if \"entities\" not in account_dict:\n                return devices\n            last_called_entity = None\n            for _, entity in account_dict[\"entities\"][\"media_player\"].items():\n                entity_name = (entity.entity_id).split(\".\")[1]\n                devices[entity_name] = entity.unique_id\n                if self.last_called and entity.extra_state_attributes.get(\n                    \"last_called\"\n                ):\n                    if last_called_entity is None:\n                        _LOGGER.debug(\n                            \"%s: Found last_called %s called at %s\",\n                            hide_email(email),\n                            entity,\n                            entity.extra_state_attributes.get(\"last_called_timestamp\"),\n                        )                                           \n                        last_called_entity = entity\n                    elif (last_called_entity.extra_state_attributes.get(\"last_called_timestamp\")\n                            < entity.extra_state_attributes.get(\"last_called_timestamp\")\n                    ):                        \n                        _LOGGER.debug(\n                            \"%s: Found newer last_called %s called at %s\",\n                            hide_email(email),\n                            entity,\n                            entity.extra_state_attributes.get(\"last_called_timestamp\"),\n                        )                   \n                        last_called_entity = entity\n            if last_called_entity is not None:\n                entity_name = (last_called_entity.entity_id).split(\".\")[1]\n                entity_name_last_called = (\n                    f\"last_called{'_'+ email if entity_name[-1:].isdigit() else ''}\"\n                )\n                _LOGGER.debug(\n                    \"%s: Creating last_called target %s using %s called at %s\",\n                    hide_email(email),\n                    entity_name_last_called,\n                    last_called_entity,\n                    last_called_entity.extra_state_attributes.get(\"last_called_timestamp\"),\n                )\n                devices[entity_name_last_called] = last_called_entity.unique_id\n        return devices\n\n    @property\n    def devices(self):\n        \"\"\"Return a list of Alexa devices.\"\"\"\n        devices = []\n        if (\n            \"accounts\" not in self.hass.data[DATA_ALEXAMEDIA]\n            and not self.hass.data[DATA_ALEXAMEDIA][\"accounts\"].items()\n        ):\n            return devices\n        for _, account_dict in self.hass.data[DATA_ALEXAMEDIA][\"accounts\"].items():\n            devices = devices + list(account_dict[\"entities\"][\"media_player\"].values())\n        return devices\n\n    async def async_send_message(self, message=\"\", **kwargs):\n        \"\"\"Send a message to a Alexa device.\"\"\"\n        _LOGGER.debug(\"Message: %s, kwargs: %s\", message, kwargs)\n        _LOGGER.debug(\"Target type: %s\", type(kwargs.get(ATTR_TARGET)))\n        kwargs[\"message\"] = message\n        targets = kwargs.get(ATTR_TARGET)\n        title = kwargs.get(ATTR_TITLE, ATTR_TITLE_DEFAULT)\n        data = kwargs.get(ATTR_DATA)\n        if isinstance(targets, str):\n            try:\n                targets = json.loads(targets)\n            except json.JSONDecodeError:\n                _LOGGER.error(\"Target must be a valid json\")\n                return\n        processed_targets = []\n        for target in targets:\n            _LOGGER.debug(\"Processing: %s\", target)\n            try:\n                processed_targets += json.loads(target)\n                _LOGGER.debug(\"Processed Target by json: %s\", processed_targets)\n            except json.JSONDecodeError:\n                if target.find(\",\"):\n                    processed_targets += list(\n                        map(lambda x: x.strip(), target.split(\",\"))\n                    )\n                    _LOGGER.debug(\"Processed Target by string: %s\", processed_targets)\n        entities = self.convert(processed_targets, type_=\"entities\")\n        try:\n            entities.extend(self.hass.components.group.expand_entity_ids(entities))\n        except ValueError:\n            _LOGGER.debug(\"Invalid Home Assistant entity in %s\", entities)\n        tasks = []\n        for account, account_dict in self.hass.data[DATA_ALEXAMEDIA][\n            \"accounts\"\n        ].items():\n            for alexa in account_dict[\"entities\"][\"media_player\"].values():\n                if data[\"type\"] == \"tts\":\n                    targets = self.convert(\n                        entities, type_=\"entities\", filter_matches=True\n                    )\n                    # _LOGGER.debug(\"TTS entities: %s\", targets)\n                    if alexa in targets and alexa.available:\n                        _LOGGER.debug(\"TTS by %s : %s\", alexa, message)\n                        tasks.append(\n                            alexa.async_send_tts(\n                                message,\n                                queue_delay=self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][\n                                    account\n                                ][\"options\"].get(CONF_QUEUE_DELAY, DEFAULT_QUEUE_DELAY),\n                            )\n                        )\n                elif data[\"type\"] == \"announce\":\n                    targets = self.convert(\n                        entities, type_=\"serialnumbers\", filter_matches=True\n                    )\n                    # _LOGGER.debug(\n                    #     \"Announce targets: %s entities: %s\",\n                    #     list(map(hide_serial, targets)),\n                    #     entities,\n                    # )\n                    if alexa.device_serial_number in targets and alexa.available:\n                        _LOGGER.debug(\n                            (\"%s: Announce by %s to \" \"targets: %s: %s\"),\n                            hide_email(account),\n                            alexa,\n                            list(map(hide_serial, targets)),\n                            message,\n                        )\n                        tasks.append(\n                            alexa.async_send_announcement(\n                                message,\n                                targets=targets,\n                                title=title,\n                                method=(data[\"method\"] if \"method\" in data else \"all\"),\n                                queue_delay=self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][\n                                    account\n                                ][\"options\"].get(CONF_QUEUE_DELAY, DEFAULT_QUEUE_DELAY),\n                            )\n                        )\n                        break\n                elif data[\"type\"] == \"push\":\n                    targets = self.convert(\n                        entities, type_=\"entities\", filter_matches=True\n                    )\n                    if alexa in targets and alexa.available:\n                        _LOGGER.debug(\"Push by %s: %s %s\", alexa, title, message)\n                        tasks.append(\n                            alexa.async_send_mobilepush(\n                                message,\n                                title=title,\n                                queue_delay=self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][\n                                    account\n                                ][\"options\"].get(CONF_QUEUE_DELAY, DEFAULT_QUEUE_DELAY),\n                            )\n                        )\n                elif data[\"type\"] == \"dropin_notification\":\n                    targets = self.convert(\n                        entities, type_=\"entities\", filter_matches=True\n                    )\n                    if alexa in targets and alexa.available:\n                        _LOGGER.debug(\n                            \"Notification dropin by %s: %s %s\", alexa, title, message\n                        )\n                        tasks.append(\n                            alexa.async_send_dropin_notification(\n                                message,\n                                title=title,\n                                queue_delay=self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][\n                                    account\n                                ][\"options\"].get(CONF_QUEUE_DELAY, DEFAULT_QUEUE_DELAY),\n                            )\n                        )\n        await asyncio.gather(*tasks)\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/sensor.py",
    "content": "\"\"\"\nAlexa Devices Sensors.\n\nSPDX-License-Identifier: Apache-2.0\n\nFor more details about this platform, please refer to the documentation at\nhttps://community.home-assistant.io/t/echo-devices-alexa-as-media-player-testers-needed/58639\n\"\"\"\nimport datetime\nimport logging\nfrom typing import Callable, List, Optional, Text  # noqa pylint: disable=unused-import\n\nfrom homeassistant.components.sensor import SensorEntity\nfrom homeassistant.const import (\n    DEVICE_CLASS_TIMESTAMP,\n    STATE_UNAVAILABLE,\n    TEMP_CELSIUS,\n    __version__ as HA_VERSION,\n)\nfrom homeassistant.exceptions import ConfigEntryNotReady, NoEntitySpecifiedError\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\nfrom homeassistant.helpers.event import async_track_point_in_utc_time\nfrom homeassistant.helpers.update_coordinator import CoordinatorEntity\nfrom homeassistant.util import dt\nfrom packaging import version\nimport pytz\n\nfrom . import (\n    CONF_EMAIL,\n    CONF_EXCLUDE_DEVICES,\n    CONF_INCLUDE_DEVICES,\n    DATA_ALEXAMEDIA,\n    DOMAIN as ALEXA_DOMAIN,\n    hide_email,\n    hide_serial,\n)\nfrom .alexa_entity import parse_temperature_from_coordinator\nfrom .const import (\n    CONF_EXTENDED_ENTITY_DISCOVERY,\n    RECURRING_DAY,\n    RECURRING_PATTERN,\n    RECURRING_PATTERN_ISO_SET,\n)\nfrom .helpers import add_devices, alarm_just_dismissed\n\n_LOGGER = logging.getLogger(__name__)\n\nLOCAL_TIMEZONE = datetime.datetime.now(datetime.timezone.utc).astimezone().tzinfo\n\n\nasync def async_setup_platform(hass, config, add_devices_callback, discovery_info=None):\n    \"\"\"Set up the Alexa sensor platform.\"\"\"\n    devices: List[AlexaMediaNotificationSensor] = []\n    SENSOR_TYPES = {\n        \"Alarm\": AlarmSensor,\n        \"Timer\": TimerSensor,\n        \"Reminder\": ReminderSensor,\n    }\n    account = config[CONF_EMAIL] if config else discovery_info[\"config\"][CONF_EMAIL]\n    include_filter = config.get(CONF_INCLUDE_DEVICES, [])\n    exclude_filter = config.get(CONF_EXCLUDE_DEVICES, [])\n    account_dict = hass.data[DATA_ALEXAMEDIA][\"accounts\"][account]\n    _LOGGER.debug(\"%s: Loading sensors\", hide_email(account))\n    if \"sensor\" not in account_dict[\"entities\"]:\n        (hass.data[DATA_ALEXAMEDIA][\"accounts\"][account][\"entities\"][\"sensor\"]) = {}\n    for key, device in account_dict[\"devices\"][\"media_player\"].items():\n        if key not in account_dict[\"entities\"][\"media_player\"]:\n            _LOGGER.debug(\n                \"%s: Media player %s not loaded yet; delaying load\",\n                hide_email(account),\n                hide_serial(key),\n            )\n            raise ConfigEntryNotReady\n        if key not in (account_dict[\"entities\"][\"sensor\"]):\n            (account_dict[\"entities\"][\"sensor\"][key]) = {}\n            for (n_type, class_) in SENSOR_TYPES.items():\n                n_type_dict = (\n                    account_dict[\"notifications\"][key][n_type]\n                    if key in account_dict[\"notifications\"]\n                    and n_type in account_dict[\"notifications\"][key]\n                    else {}\n                )\n                if (\n                    n_type in (\"Alarm, Timer\")\n                    and \"TIMERS_AND_ALARMS\" in device[\"capabilities\"]\n                ):\n                    alexa_client = class_(\n                        account_dict[\"entities\"][\"media_player\"][key],\n                        n_type_dict,\n                        account,\n                    )\n                elif n_type in (\"Reminder\") and \"REMINDERS\" in device[\"capabilities\"]:\n                    alexa_client = class_(\n                        account_dict[\"entities\"][\"media_player\"][key],\n                        n_type_dict,\n                        account,\n                    )\n                else:\n                    continue\n                _LOGGER.debug(\n                    \"%s: Found %s %s sensor (%s) with next: %s\",\n                    hide_email(account),\n                    hide_serial(key),\n                    n_type,\n                    len(n_type_dict.keys()),\n                    alexa_client.state,\n                )\n                devices.append(alexa_client)\n                (account_dict[\"entities\"][\"sensor\"][key][n_type]) = alexa_client\n        else:\n            for alexa_client in account_dict[\"entities\"][\"sensor\"][key].values():\n                _LOGGER.debug(\n                    \"%s: Skipping already added device: %s\",\n                    hide_email(account),\n                    alexa_client,\n                )\n\n    temperature_sensors = []\n    temperature_entities = account_dict.get(\"devices\", {}).get(\"temperature\", [])\n    if temperature_entities and account_dict[\"options\"].get(\n        CONF_EXTENDED_ENTITY_DISCOVERY\n    ):\n        temperature_sensors = await create_temperature_sensors(\n            account_dict, temperature_entities\n        )\n\n    return await add_devices(\n        hide_email(account),\n        devices + temperature_sensors,\n        add_devices_callback,\n        include_filter,\n        exclude_filter,\n    )\n\n\nasync def async_setup_entry(hass, config_entry, async_add_devices):\n    \"\"\"Set up the Alexa sensor platform by config_entry.\"\"\"\n    return await async_setup_platform(\n        hass, config_entry.data, async_add_devices, discovery_info=None\n    )\n\n\nasync def async_unload_entry(hass, entry) -> bool:\n    \"\"\"Unload a config entry.\"\"\"\n    account = entry.data[CONF_EMAIL]\n    account_dict = hass.data[DATA_ALEXAMEDIA][\"accounts\"][account]\n    _LOGGER.debug(\"Attempting to unload sensors\")\n    for key, sensors in account_dict[\"entities\"][\"sensor\"].items():\n        for device in sensors[key].values():\n            _LOGGER.debug(\"Removing %s\", device)\n            await device.async_remove()\n    return True\n\n\nasync def create_temperature_sensors(account_dict, temperature_entities):\n    devices = []\n    coordinator = account_dict[\"coordinator\"]\n    for temp in temperature_entities:\n        _LOGGER.debug(\n            \"Creating entity %s for a temperature sensor with name %s\",\n            temp[\"id\"],\n            temp[\"name\"],\n        )\n        serial = temp[\"device_serial\"]\n        device_info = lookup_device_info(account_dict, serial)\n        sensor = TemperatureSensor(coordinator, temp[\"id\"], temp[\"name\"], device_info)\n        account_dict[\"entities\"][\"sensor\"].setdefault(serial, {})\n        account_dict[\"entities\"][\"sensor\"][serial][\"Temperature\"] = sensor\n        devices.append(sensor)\n    return devices\n\n\ndef lookup_device_info(account_dict, device_serial):\n    \"\"\"Get the device to use for a given Echo based on a given device serial id.\n\n    This may return nothing as there is no guarantee that a given temperature sensor is actually attached to an Echo.\n    \"\"\"\n    for key, mp in account_dict[\"entities\"][\"media_player\"].items():\n        if key == device_serial and mp.device_info and \"identifiers\" in mp.device_info:\n            for ident in mp.device_info[\"identifiers\"]:\n                return ident\n    return None\n\n\nclass TemperatureSensor(SensorEntity, CoordinatorEntity):\n    \"\"\"A temperature sensor reported by an Echo.\"\"\"\n\n    def __init__(self, coordinator, entity_id, name, media_player_device_id):\n        super().__init__(coordinator)\n        self.alexa_entity_id = entity_id\n        self._name = name\n        self._media_player_device_id = media_player_device_id\n\n    @property\n    def name(self):\n        return self._name + \" Temperature\"\n\n    @property\n    def device_info(self):\n        \"\"\"Return the device_info of the device.\"\"\"\n        if self._media_player_device_id:\n            return {\n                \"identifiers\": {self._media_player_device_id},\n                \"via_device\": self._media_player_device_id,\n            }\n        return None\n\n    @property\n    def unit_of_measurement(self):\n        return TEMP_CELSIUS\n\n    @property\n    def state(self):\n        return parse_temperature_from_coordinator(\n            self.coordinator, self.alexa_entity_id\n        )\n\n    @property\n    def unique_id(self):\n        # This includes \"_temperature\" because the Alexa entityId is for a physical device\n        # A single physical device could have multiple HA entities\n        return self.alexa_entity_id + \"_temperature\"\n\n\nclass AlexaMediaNotificationSensor(SensorEntity):\n    \"\"\"Representation of Alexa Media sensors.\"\"\"\n\n    def __init__(\n        self,\n        client,\n        n_dict,\n        sensor_property: str,\n        account,\n        name=\"Next Notification\",\n        icon=None,\n    ):\n        \"\"\"Initialize the Alexa sensor device.\"\"\"\n        # Class info\n        self._client = client\n        self._n_dict = n_dict\n        self._sensor_property = sensor_property\n        self._account = account\n        self._dev_id = client.unique_id\n        self._name = name\n        self._unit = None\n        self._device_class = DEVICE_CLASS_TIMESTAMP\n        self._icon = icon\n        self._all = []\n        self._active = []\n        self._next = None\n        self._prior_value = None\n        self._timestamp: Optional[datetime.datetime] = None\n        self._tracker: Optional[Callable] = None\n        self._state: Optional[datetime.datetime] = None\n        self._dismissed: Optional[datetime.datetime] = None\n        self._status: Optional[str] = None\n        self._amz_id: Optional[str] = None\n        self._version: Optional[str] = None\n\n    def _process_raw_notifications(self):\n        self._all = (\n            list(map(self._fix_alarm_date_time, self._n_dict.items()))\n            if self._n_dict\n            else []\n        )\n        self._all = list(map(self._update_recurring_alarm, self._all))\n        self._all = sorted(self._all, key=lambda x: x[1][self._sensor_property])\n        self._prior_value = self._next if self._active else None\n        self._active = (\n            list(filter(lambda x: x[1][\"status\"] in (\"ON\", \"SNOOZED\"), self._all))\n            if self._all\n            else []\n        )\n        self._next = self._active[0][1] if self._active else None\n        alarm = next(\n            (alarm[1] for alarm in self._all if alarm[1].get(\"id\") == self._amz_id),\n            None,\n        )\n        if alarm_just_dismissed(alarm, self._status, self._version):\n            self._dismissed = dt.now().isoformat()\n        self._state = self._process_state(self._next)\n        self._status = self._next.get(\"status\", \"OFF\") if self._next else \"OFF\"\n        self._version = self._next.get(\"version\", \"0\") if self._next else None\n        self._amz_id = self._next.get(\"id\") if self._next else None\n\n        if self._state == STATE_UNAVAILABLE or self._next != self._prior_value:\n            # cancel any event triggers\n            if self._tracker:\n                _LOGGER.debug(\n                    \"%s: Cancelling old event\",\n                    self,\n                )\n                self._tracker()\n            if self._state != STATE_UNAVAILABLE and self._status != \"SNOOZED\":\n                _LOGGER.debug(\n                    \"%s: Scheduling event in %s\",\n                    self,\n                    dt.as_utc(dt.parse_datetime(self._state)) - dt.utcnow(),\n                )\n                self._tracker = async_track_point_in_utc_time(\n                    self.hass,\n                    self._trigger_event,\n                    dt.as_utc(dt.parse_datetime(self._state)),\n                )\n\n    def _trigger_event(self, time_date) -> None:\n        _LOGGER.debug(\n            \"%s:Firing %s at %s\",\n            self,\n            \"alexa_media_notification_event\",\n            dt.as_local(time_date),\n        )\n        self.hass.bus.async_fire(\n            \"alexa_media_notification_event\",\n            event_data={\n                \"email\": hide_email(self._account),\n                \"device\": {\"name\": self.name, \"entity_id\": self.entity_id},\n                \"event\": self._active[0],\n            },\n        )\n\n    def _fix_alarm_date_time(self, value):\n        if (\n            self._sensor_property != \"date_time\"\n            or not value\n            or isinstance(value[1][self._sensor_property], datetime.datetime)\n        ):\n            return value\n        naive_time = dt.parse_datetime(value[1][self._sensor_property])\n        timezone = pytz.timezone(self._client._timezone)\n        if timezone and naive_time:\n            value[1][self._sensor_property] = timezone.localize(naive_time)\n        elif not naive_time:\n            # this is typically an older alarm\n            value[1][self._sensor_property] = datetime.datetime.fromtimestamp(\n                value[1][\"alarmTime\"] / 1000, tz=LOCAL_TIMEZONE\n            )\n            _LOGGER.warning(\n                \"There is an old format alarm on %s set for %s. \"\n                \" This alarm should be removed in the Alexa app and recreated. \",\n                self._client.name,\n                dt.as_local(value[1][self._sensor_property]),\n            )\n        else:\n            _LOGGER.warning(\n                \"%s is returning erroneous data. \"\n                \"Returned times may be wrong. \"\n                \"Please confirm the timezone in the Alexa app is correct. \"\n                \"Debugging info: \\nRaw: %s \\nNaive Time: %s \"\n                \"\\nTimezone: %s\",\n                self._client.name,\n                value[1],\n                naive_time,\n                self._client._timezone,\n            )\n        return value\n\n    def _update_recurring_alarm(self, value):\n        _LOGGER.debug(\"Sensor value %s\", value)\n        next_item = value[1]\n        alarm = next_item[self._sensor_property]\n        reminder = None\n        recurrence = []\n        if isinstance(next_item[self._sensor_property], (int, float)):\n            reminder = True\n            alarm = dt.as_local(\n                self._round_time(\n                    datetime.datetime.fromtimestamp(alarm / 1000, tz=LOCAL_TIMEZONE)\n                )\n            )\n        alarm_on = next_item[\"status\"] == \"ON\"\n        r_rule_data = next_item.get(\"rRuleData\")\n        if r_rule_data:  # the new recurrence pattern; https://github.com/custom-components/alexa_media_player/issues/1608\n            next_trigger_times = r_rule_data.get(\"nextTriggerTimes\")\n            weekdays = r_rule_data.get(\"byWeekDays\")\n            if next_trigger_times:\n                alarm = next_trigger_times[0]\n            elif weekdays:\n                for day in weekdays:\n                    recurrence.append(RECURRING_DAY[day])\n        else:\n            recurring_pattern = next_item.get(\"recurringPattern\")\n            recurrence = RECURRING_PATTERN_ISO_SET.get(recurring_pattern)\n        while (\n            alarm_on\n            and recurrence\n            and alarm.isoweekday not in recurrence\n            and alarm < dt.now()\n        ):\n            alarm += datetime.timedelta(days=1)\n        if reminder:\n            alarm = dt.as_timestamp(alarm) * 1000\n        if alarm != next_item[self._sensor_property]:\n            _LOGGER.debug(\n                \"%s with recurrence %s set to %s\",\n                next_item[\"type\"],\n                recurrence,\n                alarm,\n            )\n        next_item[self._sensor_property] = alarm\n        return value\n\n    @staticmethod\n    def _round_time(value: datetime.datetime) -> datetime.datetime:\n        precision = datetime.timedelta(seconds=1).total_seconds()\n        seconds = (value - value.min.replace(tzinfo=value.tzinfo)).seconds\n        rounding = (seconds + precision / 2) // precision * precision\n        return value + datetime.timedelta(0, rounding - seconds, -value.microsecond)\n\n    async def async_added_to_hass(self):\n        \"\"\"Store register state change callback.\"\"\"\n        try:\n            if not self.enabled:\n                return\n        except AttributeError:\n            pass\n        self._process_raw_notifications()\n        # Register event handler on bus\n        self._listener = async_dispatcher_connect(\n            self.hass,\n            f\"{ALEXA_DOMAIN}_{hide_email(self._account)}\"[0:32],\n            self._handle_event,\n        )\n        await self.async_update()\n\n    async def async_will_remove_from_hass(self):\n        \"\"\"Prepare to remove entity.\"\"\"\n        # Register event handler on bus\n        self._listener()\n        if self._tracker:\n            self._tracker()\n\n    def _handle_event(self, event):\n        \"\"\"Handle events.\n\n        This will update PUSH_NOTIFICATION_CHANGE events to see if the sensor\n        should be updated.\n        \"\"\"\n        try:\n            if not self.enabled:\n                return\n        except AttributeError:\n            pass\n        if \"notification_update\" in event:\n            if (\n                event[\"notification_update\"][\"dopplerId\"][\"deviceSerialNumber\"]\n                == self._client.device_serial_number\n            ):\n                _LOGGER.debug(\"Updating sensor %s\", self)\n                self.async_schedule_update_ha_state(True)\n\n    @property\n    def available(self):\n        \"\"\"Return the availability of the sensor.\"\"\"\n        return self._client.available\n\n    @property\n    def assumed_state(self):\n        \"\"\"Return whether the state is an assumed_state.\"\"\"\n        return self._client.assumed_state\n\n    @property\n    def hidden(self):\n        \"\"\"Return whether the sensor should be hidden.\"\"\"\n        return self.state == STATE_UNAVAILABLE\n\n    @property\n    def unique_id(self):\n        \"\"\"Return the unique ID.\"\"\"\n        return f\"{self._client.unique_id}_{self._name}\"\n\n    @property\n    def name(self):\n        \"\"\"Return the name of the sensor.\"\"\"\n        return f\"{self._client.name} {self._name}\"\n\n    @property\n    def should_poll(self):\n        \"\"\"Return the polling state.\"\"\"\n        return not (\n            self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][self._account][\"websocket\"]\n        )\n\n    @property\n    def state(self) -> datetime.datetime:\n        \"\"\"Return the state of the sensor.\"\"\"\n        return self._state\n\n    def _process_state(self, value):\n        return (\n            dt.as_local(value[self._sensor_property]).isoformat()\n            if value\n            else STATE_UNAVAILABLE\n        )\n\n    @property\n    def unit_of_measurement(self):\n        \"\"\"Return the unit_of_measurement of the device.\"\"\"\n        return self._unit\n\n    @property\n    def device_class(self):\n        \"\"\"Return the device_class of the device.\"\"\"\n        return self._device_class\n\n    async def async_update(self):\n        \"\"\"Update state.\"\"\"\n        try:\n            if not self.enabled:\n                return\n        except AttributeError:\n            pass\n        account_dict = self.hass.data[DATA_ALEXAMEDIA][\"accounts\"][self._account]\n        self._timestamp = account_dict[\"notifications\"][\"process_timestamp\"]\n        try:\n            self._n_dict = account_dict[\"notifications\"][\n                self._client.device_serial_number\n            ][self._type]\n        except KeyError:\n            self._n_dict = None\n        self._process_raw_notifications()\n        try:\n            self.async_write_ha_state()\n        except NoEntitySpecifiedError:\n            pass  # we ignore this due to a harmless startup race condition\n\n    @property\n    def device_info(self):\n        \"\"\"Return the device_info of the device.\"\"\"\n        return {\n            \"identifiers\": {(ALEXA_DOMAIN, self._dev_id)},\n            \"via_device\": (ALEXA_DOMAIN, self._dev_id),\n        }\n\n    @property\n    def icon(self):\n        \"\"\"Return the icon of the sensor.\"\"\"\n        return self._icon\n\n    @property\n    def recurrence(self):\n        \"\"\"Return the recurrence pattern of the sensor.\"\"\"\n        return (\n            RECURRING_PATTERN.get(self._next.get(\"recurringPattern\"))\n            if self._next\n            else None\n        )\n\n    @property\n    def extra_state_attributes(self):\n        \"\"\"Return additional attributes.\"\"\"\n        import json\n\n        attr = {\n            \"recurrence\": self.recurrence,\n            \"process_timestamp\": dt.as_local(self._timestamp).isoformat(),\n            \"prior_value\": self._process_state(self._prior_value),\n            \"total_active\": len(self._active),\n            \"total_all\": len(self._all),\n            \"sorted_active\": json.dumps(self._active, default=str),\n            \"sorted_all\": json.dumps(self._all, default=str),\n            \"status\": self._status,\n            \"dismissed\": self._dismissed,\n        }\n        return attr\n\n\nclass AlarmSensor(AlexaMediaNotificationSensor):\n    \"\"\"Representation of a Alexa Alarm sensor.\"\"\"\n\n    def __init__(self, client, n_json, account):\n        \"\"\"Initialize the Alexa sensor.\"\"\"\n        # Class info\n        self._type = \"Alarm\"\n        super().__init__(\n            client, n_json, \"date_time\", account, f\"next {self._type}\", \"mdi:alarm\"\n        )\n\n\nclass TimerSensor(AlexaMediaNotificationSensor):\n    \"\"\"Representation of a Alexa Timer sensor.\"\"\"\n\n    def __init__(self, client, n_json, account):\n        \"\"\"Initialize the Alexa sensor.\"\"\"\n        # Class info\n        self._type = \"Timer\"\n        super().__init__(\n            client,\n            n_json,\n            \"remainingTime\",\n            account,\n            f\"next {self._type}\",\n            \"mdi:timer-outline\"\n            if (version.parse(HA_VERSION) >= version.parse(\"0.113.0\"))\n            else \"mdi:timer\",\n        )\n\n    def _process_state(self, value):\n        return (\n            dt.as_local(\n                super()._round_time(\n                    self._timestamp\n                    + datetime.timedelta(milliseconds=value[self._sensor_property])\n                )\n            ).isoformat()\n            if value and self._timestamp\n            else STATE_UNAVAILABLE\n        )\n\n    @property\n    def paused(self) -> Optional[bool]:\n        \"\"\"Return the paused state of the sensor.\"\"\"\n        return self._next[\"status\"] == \"PAUSED\" if self._next else None\n\n    @property\n    def icon(self):\n        \"\"\"Return the icon of the sensor.\"\"\"\n        off_icon = (\n            \"mdi:timer-off-outline\"\n            if (version.parse(HA_VERSION) >= version.parse(\"0.113.0\"))\n            else \"mdi:timer-off\"\n        )\n        return self._icon if not self.paused else off_icon\n\n\nclass ReminderSensor(AlexaMediaNotificationSensor):\n    \"\"\"Representation of a Alexa Reminder sensor.\"\"\"\n\n    def __init__(self, client, n_json, account):\n        \"\"\"Initialize the Alexa sensor.\"\"\"\n        # Class info\n        self._type = \"Reminder\"\n        super().__init__(\n            client, n_json, \"alarmTime\", account, f\"next {self._type}\", \"mdi:reminder\"\n        )\n\n    def _process_state(self, value):\n        return (\n            dt.as_local(\n                super()._round_time(\n                    datetime.datetime.fromtimestamp(\n                        value[self._sensor_property] / 1000, tz=LOCAL_TIMEZONE\n                    )\n                )\n            ).isoformat()\n            if value\n            else STATE_UNAVAILABLE\n        )\n\n    @property\n    def reminder(self):\n        \"\"\"Return the reminder of the sensor.\"\"\"\n        return self._next[\"reminderLabel\"] if self._next else None\n\n    @property\n    def extra_state_attributes(self):\n        \"\"\"Return the scene state attributes.\"\"\"\n        attr = super().extra_state_attributes\n        attr.update({\"reminder\": self.reminder})\n        return attr\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/services.py",
    "content": "\"\"\"\nAlexa Services.\n\nSPDX-License-Identifier: Apache-2.0\n\nFor more details about this platform, please refer to the documentation at\nhttps://community.home-assistant.io/t/echo-devices-alexa-as-media-player-testers-needed/58639\n\"\"\"\n\nimport logging\nfrom typing import Callable, Dict, Text\n\nfrom alexapy import AlexaAPI, AlexapyLoginError, hide_email\nfrom alexapy.errors import AlexapyConnectionError\nfrom homeassistant.helpers import config_validation as cv\nimport voluptuous as vol\n\nfrom .const import (\n    ATTR_EMAIL,\n    ATTR_NUM_ENTRIES,\n    DATA_ALEXAMEDIA,\n    DOMAIN,\n    SERVICE_CLEAR_HISTORY,\n    SERVICE_FORCE_LOGOUT,\n    SERVICE_UPDATE_LAST_CALLED,\n)\nfrom .helpers import _catch_login_errors, report_relogin_required\n\n_LOGGER = logging.getLogger(__name__)\n\n\nCLEAR_HISTORY_SCHEMA = vol.Schema(\n    {\n        vol.Optional(ATTR_EMAIL, default=[]): vol.All(cv.ensure_list, [cv.string]),\n        vol.Optional(ATTR_NUM_ENTRIES, default=50): vol.All(\n            int, vol.Range(min=1, max=50)\n        ),\n    }\n)\n\nFORCE_LOGOUT_SCHEMA = vol.Schema(\n    {vol.Optional(ATTR_EMAIL, default=[]): vol.All(cv.ensure_list, [cv.string])}\n)\nLAST_CALL_UPDATE_SCHEMA = vol.Schema(\n    {vol.Optional(ATTR_EMAIL, default=[]): vol.All(cv.ensure_list, [cv.string])}\n)\n\n\nclass AlexaMediaServices:\n    \"\"\"Class that holds our services that should be published to hass.\"\"\"\n\n    def __init__(self, hass, functions: Dict[Text, Callable]):\n        \"\"\"Initialize with self.hass.\"\"\"\n        self.hass = hass\n        self.functions: Dict[Text, Callable] = functions\n\n    async def register(self):\n        \"\"\"Register services to hass.\"\"\"\n        self.hass.services.async_register(\n            DOMAIN,\n            SERVICE_UPDATE_LAST_CALLED,\n            self.last_call_handler,\n            schema=LAST_CALL_UPDATE_SCHEMA,\n        )\n        self.hass.services.async_register(\n            DOMAIN,\n            SERVICE_CLEAR_HISTORY,\n            self.clear_history,\n            schema=CLEAR_HISTORY_SCHEMA,\n        )\n        self.hass.services.async_register(\n            DOMAIN, SERVICE_FORCE_LOGOUT, self.force_logout, schema=FORCE_LOGOUT_SCHEMA\n        )\n\n    async def unregister(self):\n        \"\"\"Register services to hass.\"\"\"\n        self.hass.services.async_remove(\n            DOMAIN,\n            SERVICE_UPDATE_LAST_CALLED,\n        )\n        self.hass.services.async_remove(\n            DOMAIN,\n            SERVICE_CLEAR_HISTORY,\n        )\n        self.hass.services.async_remove(DOMAIN, SERVICE_FORCE_LOGOUT)\n\n    @_catch_login_errors\n    async def clear_history(self, call):\n        \"\"\"Handle clear history service request.\n\n        Arguments\n            call.ATTR_EMAIL {List[str: None]} -- Case-sensitive Alexa emails.\n                                                    Default is all known emails.\n            call.ATTR_NUM_ENTRIES {int: 50} -- Number of entries to delete.\n\n        Returns\n            bool -- True if deletion successful\n\n        \"\"\"\n        _LOGGER.debug(\"call %s\", call)\n        requested_emails = call.data.get(ATTR_EMAIL)\n        items: int = int(call.data.get(ATTR_NUM_ENTRIES))\n\n        _LOGGER.debug(\n            \"Service clear_history called for: %i items for %s\", items, requested_emails\n        )\n        success = False\n        for email, account_dict in self.hass.data[DATA_ALEXAMEDIA][\"accounts\"].items():\n            if requested_emails and email not in requested_emails:\n                continue\n            login_obj = account_dict[\"login_obj\"]\n            try:\n                await AlexaAPI.clear_history(login_obj, items)\n            except AlexapyLoginError:\n                report_relogin_required(self.hass, login_obj, email)\n                success = True\n            except AlexapyConnectionError:\n                _LOGGER.error(\n                    \"Unable to connect to Alexa for %s;\"\n                    \" check your network connection and try again\",\n                    hide_email(email),\n                )\n        return success\n\n    @_catch_login_errors\n    async def force_logout(self, call) -> bool:\n        \"\"\"Handle force logout service request.\n\n        Arguments\n            call.ATTR_EMAIL {List[str: None]} -- Case-sensitive Alexa emails.\n                                                    Default is all known emails.\n\n        Returns\n            bool -- True if force logout successful\n\n        \"\"\"\n        requested_emails = call.data.get(ATTR_EMAIL)\n\n        _LOGGER.debug(\"Service force_logout called for: %s\", requested_emails)\n        success = False\n        for email, account_dict in self.hass.data[DATA_ALEXAMEDIA][\"accounts\"].items():\n            if requested_emails and email not in requested_emails:\n                continue\n            login_obj = account_dict[\"login_obj\"]\n            try:\n                await AlexaAPI.force_logout()\n            except AlexapyLoginError:\n                report_relogin_required(self.hass, login_obj, email)\n                success = True\n            except AlexapyConnectionError:\n                _LOGGER.error(\n                    \"Unable to connect to Alexa for %s;\"\n                    \" check your network connection and try again\",\n                    hide_email(email),\n                )\n        return success\n\n    async def last_call_handler(self, call):\n        \"\"\"Handle last call service request.\n\n        Args:\n        call.ATTR_EMAIL: List of case-sensitive Alexa email addresses. If None\n                            all accounts are updated.\n\n        \"\"\"\n        requested_emails = call.data.get(ATTR_EMAIL)\n        _LOGGER.debug(\"Service update_last_called for: %s\", requested_emails)\n        for email, account_dict in self.hass.data[DATA_ALEXAMEDIA][\"accounts\"].items():\n            if requested_emails and email not in requested_emails:\n                continue\n            login_obj = account_dict[\"login_obj\"]\n            try:\n                await self.functions.get(\"update_last_called\")(login_obj)\n            except AlexapyLoginError:\n                report_relogin_required(self.hass, login_obj, email)\n            except AlexapyConnectionError:\n                _LOGGER.error(\n                    \"Unable to connect to Alexa for %s;\"\n                    \" check your network connection and try again\",\n                    hide_email(email),\n                )\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/services.yaml",
    "content": "#  SPDX-License-Identifier: Apache-2.0\nupdate_last_called:\n  # Description of the service\n  description: Forces update of last_called echo device for each Alexa account.\n  # Different fields that your service accepts\n  fields:\n    # Key of the field\n    email:\n      # Description of the field\n      description: List of Alexa accounts to update. If empty, will update all known accounts.\n      # Example value that can be passed for this field\n      example: \"my_email@alexa.com\"\n\nclear_history:\n  # Description of the service\n  description: Clear last entries from Alexa history for each Alexa account.\n  # Different fields that your service accepts\n  fields:\n    # Key of the field\n    email:\n      # Description of the field\n      description: List of Alexa accounts to update. If empty, will delete from all known accounts.\n      # Example value that can be passed for this field\n      example: \"my_email@alexa.com\"\n    entries:\n      # Description of the field\n      description: Number of entries to clear from 1 to 50. If empty, clear 50.\n      # Example value that can be passed for this field\n      example: 50\n\nforce_logout:\n  # Description of the service\n  description: Force logout of Alexa Login account and deletion of .pickle. Intended for debugging use.\n  # Different fields that your service accepts\n  fields:\n    # Key of the field\n    email:\n      # Description of the field\n      description: List of Alexa accounts to log out. If empty, will log out from all known accounts.\n      # Example value that can be passed for this field\n      example: \"my_email@alexa.com\"\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/strings.json",
    "content": "{\n  \"config\": {\n    \"error\": {\n      \"connection_error\": \"Error connecting; check network and retry\",\n      \"identifier_exists\": \"Email for Alexa URL already registered\",\n      \"invalid_credentials\": \"Invalid credentials\",\n      \"2fa_key_invalid\": \"Invalid Built-In 2FA key\",\n      \"hass_url_invalid\": \"Unable to connect to Home Assistant url. Please check the Internal Url under Configuration -> General\",\n      \"unknown_error\": \"Unknown error, please enable advanced debugging and report log info\"\n    },\n    \"step\": {\n      \"user\": {\n        \"data\": {\n          \"password\": \"Password\",\n          \"email\": \"Email Address\",\n          \"url\": \"Amazon region domain (e.g., amazon.co.uk)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"otp_secret\": \"Built-in 2FA App Key (automatically generate 2FA Codes)\",\n          \"include_devices\": \"Included device (comma separated)\",\n          \"exclude_devices\": \"Excluded device (comma separated)\",\n          \"debug\": \"Advanced debugging\",\n          \"scan_interval\": \"Seconds between scans\",\n          \"proxy\": \"Use Login Proxy method (2FA not required)\",\n          \"oauth_login\": \"Enable oauth-token app method\"\n        },\n        \"description\": \"Please confirm the information below. For legacy configuration, disable `Use Login Proxy method` option.\",\n        \"title\": \"Alexa Media Player - Configuration\"\n      },\n      \"user_legacy\": {\n        \"data\": {\n          \"proxy\": \"Use Login Proxy method (2FA not required)\",\n          \"password\": \"Password\",\n          \"email\": \"Email Address\",\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\",\n          \"otp_secret\": \"Built-in 2FA App Key (automatically generate 2FA Codes)\",\n          \"url\": \"Amazon region domain (e.g., amazon.co.uk)\",\n          \"include_devices\": \"Included device (comma separated)\",\n          \"exclude_devices\": \"Excluded device (comma separated)\",\n          \"debug\": \"Advanced debugging\",\n          \"scan_interval\": \"Seconds between scans\",\n          \"cookies_txt\": \"Cookies.txt data\",\n          \"oauth_login\": \"Enable oauth-token app method\"\n        },\n        \"description\": \"Please enter your [information](https://github.com/custom-components/alexa_media_player/wiki/Configuration#integrations-page). **[Cookie import](https://github.com/custom-components/alexa_media_player/wiki/Configuration#cookie-import) may be easiest!**   \\n**WARNING: Amazon incorrectly reports 'Enter a valid email or mobile number' when [2FA Code is required](https://github.com/custom-components/alexa_media_player/wiki/Configuration#enable-two-factor-authentication-for-your-amazon-account).**  \\n>{message}\",\n        \"title\": \"Alexa Media Player - Legacy Configuration\"\n      },\n      \"captcha\": {\n        \"data\": {\n          \"password\": \"Password\",\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\",\n          \"captcha\": \"Captcha\",\n          \"proxy\": \"Use Login Proxy method (2FA not required)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\n{message}  \\n {captcha_image}\",\n        \"title\": \"Alexa Media Player - Captcha\"\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP from the Built-in 2FA App Key confirmed successfully.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nHave you successfully confirmed an OTP from the Built-in 2FA App Key with Amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"twofactor\": {\n        \"data\": {\n          \"securitycode\": \"2FA Code\",\n          \"proxy\": \"Use Login Proxy method (2FA not required)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nEnter the One Time Password (OTP).  \\n{message}\",\n        \"title\": \"Alexa Media Player - Two Factor Authentication\"\n      },\n      \"authselect\": {\n        \"data\": {\n          \"authselectoption\": \"OTP method\",\n          \"proxy\": \"Use Login Proxy method (2FA not required)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\n{message}\",\n        \"title\": \"Alexa Media Player - One Time Password\"\n      },\n      \"claimspicker\": {\n        \"data\": {\n          \"authselectoption\": \"Verification method\",\n          \"proxy\": \"Use Login Proxy method (2FA not required)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nPlease select verification method by number. (e.g., `0` or `1`)  \\n{message}\",\n        \"title\": \"Alexa Media Player - Verification Method\"\n      },\n      \"action_required\": {\n        \"data\": {\n          \"proxy\": \"Use Login Proxy method (2FA not required)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nAmazon will send a push notification per the below message. Please completely respond before continuing.  \\n{message}\",\n        \"title\": \"Alexa Media Player - Action Required\"\n      }\n    },\n    \"abort\": {\n      \"forgot_password\": \"The Forgot Password page was detected. This normally is the result of too may failed logins. Amazon may require action before a relogin can be attempted.\",\n      \"login_failed\": \"Alexa Media Player failed to login.\",\n      \"reauth_successful\": \"Alexa Media Player successfully reauthenticated.\"\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"queue_delay\": \"Seconds to wait to queue commands together\",\n          \"extended_entity_discovery\": \"Include devices connected via Echo\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/switch.py",
    "content": "\"\"\"\nAlexa Devices Switches.\n\nSPDX-License-Identifier: Apache-2.0\n\nFor more details about this platform, please refer to the documentation at\nhttps://community.home-assistant.io/t/echo-devices-alexa-as-media-player-testers-needed/58639\n\"\"\"\nimport logging\nfrom typing import List, Text  # noqa pylint: disable=unused-import\n\nfrom homeassistant.exceptions import ConfigEntryNotReady, NoEntitySpecifiedError\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\nfrom homeassistant.helpers.entity import EntityCategory\n\nfrom . import (\n    CONF_EMAIL,\n    CONF_EXCLUDE_DEVICES,\n    CONF_INCLUDE_DEVICES,\n    DATA_ALEXAMEDIA,\n    DOMAIN as ALEXA_DOMAIN,\n    hide_email,\n    hide_serial,\n)\nfrom .alexa_media import AlexaMedia\nfrom .helpers import _catch_login_errors, add_devices\n\ntry:\n    from homeassistant.components.switch import SwitchEntity as SwitchDevice\nexcept ImportError:\n    from homeassistant.components.switch import SwitchDevice\n\n_LOGGER = logging.getLogger(__name__)\n\n\nasync def async_setup_platform(hass, config, add_devices_callback, discovery_info=None):\n    \"\"\"Set up the Alexa switch platform.\"\"\"\n    devices = []  # type: List[DNDSwitch]\n    SWITCH_TYPES = [\n        (\"dnd\", DNDSwitch),\n        (\"shuffle\", ShuffleSwitch),\n        (\"repeat\", RepeatSwitch),\n    ]\n    account = config[CONF_EMAIL] if config else discovery_info[\"config\"][CONF_EMAIL]\n    include_filter = config.get(CONF_INCLUDE_DEVICES, [])\n    exclude_filter = config.get(CONF_EXCLUDE_DEVICES, [])\n    account_dict = hass.data[DATA_ALEXAMEDIA][\"accounts\"][account]\n    _LOGGER.debug(\"%s: Loading switches\", hide_email(account))\n    if \"switch\" not in account_dict[\"entities\"]:\n        (hass.data[DATA_ALEXAMEDIA][\"accounts\"][account][\"entities\"][\"switch\"]) = {}\n    for key, _ in account_dict[\"devices\"][\"media_player\"].items():\n        if key not in account_dict[\"entities\"][\"media_player\"]:\n            _LOGGER.debug(\n                \"%s: Media player %s not loaded yet; delaying load\",\n                hide_email(account),\n                hide_serial(key),\n            )\n            raise ConfigEntryNotReady\n        if key not in (\n            hass.data[DATA_ALEXAMEDIA][\"accounts\"][account][\"entities\"][\"switch\"]\n        ):\n            hass.data[DATA_ALEXAMEDIA][\"accounts\"][account][\"entities\"][\"switch\"][\n                key\n            ] = {}\n            for (switch_key, class_) in SWITCH_TYPES:\n                if (\n                    switch_key == \"dnd\"\n                    and not account_dict[\"devices\"][\"switch\"].get(key, {}).get(\"dnd\")\n                ) or (\n                    switch_key in [\"shuffle\", \"repeat\"]\n                    and \"MUSIC_SKILL\"\n                    not in account_dict[\"devices\"][\"media_player\"]\n                    .get(key, {})\n                    .get(\"capabilities\", {})\n                ):\n                    _LOGGER.debug(\n                        \"%s: Skipping %s for %s\",\n                        hide_email(account),\n                        switch_key,\n                        hide_serial(key),\n                    )\n                    continue\n                alexa_client = class_(\n                    account_dict[\"entities\"][\"media_player\"][key]\n                )  # type: AlexaMediaSwitch\n                _LOGGER.debug(\n                    \"%s: Found %s %s switch with status: %s\",\n                    hide_email(account),\n                    hide_serial(key),\n                    switch_key,\n                    alexa_client.is_on,\n                )\n                devices.append(alexa_client)\n                (\n                    hass.data[DATA_ALEXAMEDIA][\"accounts\"][account][\"entities\"][\n                        \"switch\"\n                    ][key][switch_key]\n                ) = alexa_client\n        else:\n            for alexa_client in hass.data[DATA_ALEXAMEDIA][\"accounts\"][account][\n                \"entities\"\n            ][\"switch\"][key].values():\n                _LOGGER.debug(\n                    \"%s: Skipping already added device: %s\",\n                    hide_email(account),\n                    alexa_client,\n                )\n    return await add_devices(\n        hide_email(account),\n        devices,\n        add_devices_callback,\n        include_filter,\n        exclude_filter,\n    )\n\n\nasync def async_setup_entry(hass, config_entry, async_add_devices):\n    \"\"\"Set up the Alexa switch platform by config_entry.\"\"\"\n    return await async_setup_platform(\n        hass, config_entry.data, async_add_devices, discovery_info=None\n    )\n\n\nasync def async_unload_entry(hass, entry) -> bool:\n    \"\"\"Unload a config entry.\"\"\"\n    account = entry.data[CONF_EMAIL]\n    _LOGGER.debug(\"Attempting to unload switch\")\n    account_dict = hass.data[DATA_ALEXAMEDIA][\"accounts\"][account]\n    for key, switches in account_dict[\"entities\"][\"switch\"].items():\n        for device in switches[key].values():\n            _LOGGER.debug(\"Removing %s\", device)\n            await device.async_remove()\n    return True\n\n\nclass AlexaMediaSwitch(SwitchDevice, AlexaMedia):\n    \"\"\"Representation of a Alexa Media switch.\"\"\"\n\n    def __init__(\n        self,\n        client,\n        switch_property: Text,\n        switch_function: Text,\n        name=\"Alexa\",\n    ):\n        \"\"\"Initialize the Alexa Switch device.\"\"\"\n        # Class info\n        self._client = client\n        self._name = name\n        self._switch_property = switch_property\n        self._switch_function = switch_function\n        super().__init__(client, client._login)\n\n    async def async_added_to_hass(self):\n        \"\"\"Store register state change callback.\"\"\"\n        try:\n            if not self.enabled:\n                return\n        except AttributeError:\n            pass\n        # Register event handler on bus\n        self._listener = async_dispatcher_connect(\n            self.hass,\n            f\"{ALEXA_DOMAIN}_{hide_email(self.email)}\"[0:32],\n            self._handle_event,\n        )\n\n    async def async_will_remove_from_hass(self):\n        \"\"\"Prepare to remove entity.\"\"\"\n        # Register event handler on bus\n        self._listener()\n\n    def _handle_event(self, event):\n        \"\"\"Handle events.\n\n        This will update PUSH_MEDIA_QUEUE_CHANGE events to see if the switch\n        should be updated.\n        \"\"\"\n        try:\n            if not self.enabled:\n                return\n        except AttributeError:\n            pass\n        if \"queue_state\" in event:\n            queue_state = event[\"queue_state\"]\n            if queue_state[\"dopplerId\"][\"deviceSerialNumber\"] == self._client.unique_id:\n                self.async_write_ha_state()\n\n    @_catch_login_errors\n    async def _set_switch(self, state, **kwargs):\n        try:\n            if not self.enabled:\n                return\n        except AttributeError:\n            pass\n        success = await getattr(self.alexa_api, self._switch_function)(state)\n        # if function returns success, make immediate state change\n        if success:\n            setattr(self._client, self._switch_property, state)\n            _LOGGER.debug(\n                \"Setting %s to %s\",\n                self.name,\n                getattr(self._client, self._switch_property),\n            )\n            self.async_write_ha_state()\n        elif self.should_poll:\n            # if we need to poll, refresh media_client\n            _LOGGER.debug(\n                \"Requesting update of %s due to %s switch to %s\",\n                self._client,\n                self._name,\n                state,\n            )\n            await self._client.async_update()\n\n    @property\n    def is_on(self):\n        \"\"\"Return true if on.\"\"\"\n        return self.available and getattr(self._client, self._switch_property)\n\n    async def async_turn_on(self, **kwargs):\n        \"\"\"Turn on switch.\"\"\"\n        await self._set_switch(True, **kwargs)\n\n    async def async_turn_off(self, **kwargs):\n        \"\"\"Turn off switch.\"\"\"\n        await self._set_switch(False, **kwargs)\n\n    @property\n    def available(self):\n        \"\"\"Return the availability of the switch.\"\"\"\n        return (\n            self._client.available\n            and getattr(self._client, self._switch_property) is not None\n        )\n\n    @property\n    def assumed_state(self):\n        \"\"\"Return whether the state is an assumed_state.\"\"\"\n        return self._client.assumed_state\n\n    @property\n    def unique_id(self):\n        \"\"\"Return the unique ID.\"\"\"\n        return self._client.unique_id + \"_\" + self._name\n\n    @property\n    def name(self):\n        \"\"\"Return the name of the switch.\"\"\"\n        return f\"{self._client.name} {self._name} switch\"\n\n    @property\n    def device_class(self):\n        \"\"\"Return the device_class of the switch.\"\"\"\n        return \"switch\"\n\n    @property\n    def hidden(self):\n        \"\"\"Return whether the switch should be hidden from the UI.\"\"\"\n        return not self.available\n\n    @property\n    def should_poll(self):\n        \"\"\"Return the polling state.\"\"\"\n        return True\n\n    @_catch_login_errors\n    async def async_update(self):\n        \"\"\"Update state.\"\"\"\n        try:\n            if not self.enabled:\n                return\n        except AttributeError:\n            pass\n        try:\n            self.async_write_ha_state()\n        except NoEntitySpecifiedError:\n            pass  # we ignore this due to a harmless startup race condition\n\n    @property\n    def device_info(self):\n        \"\"\"Return device_info for device registry.\"\"\"\n        return {\n            \"identifiers\": {(ALEXA_DOMAIN, self._client.unique_id)},\n            \"via_device\": (ALEXA_DOMAIN, self._client.unique_id),\n        }\n\n    @property\n    def icon(self):\n        \"\"\"Return the icon of the switch.\"\"\"\n        return self._icon()\n\n    def _icon(self, on=None, off=None):\n        return on if self.is_on else off\n\n\nclass DNDSwitch(AlexaMediaSwitch):\n    \"\"\"Representation of a Alexa Media Do Not Disturb switch.\"\"\"\n\n    def __init__(self, client):\n        \"\"\"Initialize the Alexa Switch.\"\"\"\n        # Class info\n        super().__init__(\n            client,\n            \"dnd_state\",\n            \"set_dnd_state\",\n            \"do not disturb\",\n        )\n\n    @property\n    def icon(self):\n        \"\"\"Return the icon of the switch.\"\"\"\n        return super()._icon(\"mdi:minus-circle\", \"mdi:minus-circle-off\")\n\n    @property\n    def entity_category(self):\n        \"\"\"Return the entity category of the switch.\"\"\"\n        return EntityCategory.CONFIG\n\n    def _handle_event(self, event):\n        \"\"\"Handle events.\"\"\"\n        try:\n            if not self.enabled:\n                return\n        except AttributeError:\n            pass\n        if \"dnd_update\" in event:\n            result = list(\n                filter(\n                    lambda x: x[\"deviceSerialNumber\"]\n                    == self._client.device_serial_number,\n                    event[\"dnd_update\"],\n                )\n            )\n            if result:\n                state = result[0][\"enabled\"] is True\n                if state != self.is_on:\n                    _LOGGER.debug(\"Detected %s changed to %s\", self, state)\n                    setattr(self._client, self._switch_property, state)\n                    self.async_write_ha_state()\n\n\nclass ShuffleSwitch(AlexaMediaSwitch):\n    \"\"\"Representation of a Alexa Media Shuffle switch.\"\"\"\n\n    def __init__(self, client):\n        \"\"\"Initialize the Alexa Switch.\"\"\"\n        # Class info\n        super().__init__(client, \"shuffle\", \"shuffle\", \"shuffle\")\n\n    @property\n    def icon(self):\n        \"\"\"Return the icon of the switch.\"\"\"\n        return super()._icon(\"mdi:shuffle\", \"mdi:shuffle-disabled\")\n\n    @property\n    def entity_category(self):\n        \"\"\"Return the entity category of the switch.\"\"\"\n        return EntityCategory.CONFIG\n\n\nclass RepeatSwitch(AlexaMediaSwitch):\n    \"\"\"Representation of a Alexa Media Repeat switch.\"\"\"\n\n    def __init__(self, client):\n        \"\"\"Initialize the Alexa Switch.\"\"\"\n        # Class info\n        super().__init__(client, \"repeat_state\", \"repeat\", \"repeat\")\n\n    @property\n    def icon(self):\n        \"\"\"Return the icon of the switch.\"\"\"\n        return super()._icon(\"mdi:repeat\", \"mdi:repeat-off\")\n\n    @property\n    def entity_category(self):\n        \"\"\"Return the entity category of the switch.\"\"\"\n        return EntityCategory.CONFIG\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/translations/ar.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"The Forgot Password page was detected. This normally is the result of too may failed logins. Amazon may require action before a relogin can be attempted.\",\n      \"login_failed\": \"Alexa Media Player failed to login.\",\n      \"reauth_successful\": \"Alexa Media Player successfully reauthenticated.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Invalid Built-In 2FA key\",\n      \"connection_error\": \"Error connecting; check network and retry\",\n      \"hass_url_invalid\": \"Unable to connect to Home Assistant url. Please check the External Url under Configuration -> General\",\n      \"identifier_exists\": \"Email for Alexa URL already registered\",\n      \"invalid_credentials\": \"Invalid credentials\",\n      \"unknown_error\": \"Unknown error, please enable advanced debugging and report log info\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP from the Built-in 2FA App Key confirmed successfully.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nHave you successfully confirmed an OTP from the Built-in 2FA App Key with Amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Advanced debugging\",\n          \"email\": \"Email Address\",\n          \"exclude_devices\": \"Excluded device (comma separated)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"include_devices\": \"Included device (comma separated)\",\n          \"otp_secret\": \"Built-in 2FA App Key (automatically generate 2FA Codes)\",\n          \"password\": \"Password\",\n          \"scan_interval\": \"Seconds between scans\",\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\",\n          \"url\": \"Amazon region domain (e.g., amazon.co.uk)\"\n        },\n        \"description\": \"Please confirm the information below.\",\n        \"title\": \"Alexa Media Player - Configuration\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Include devices connected via Echo\",\n          \"queue_delay\": \"Seconds to wait to queue commands together\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/translations/de.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"Die \\\"Passwort vergessen Funktion\\\" wurde erkannt. Amazon verlangt möglicherweise Maßnahmen bevor ein erneuter Anmeldeversuch unternommen werden kann.\",\n      \"login_failed\": \"Alexa Media Player konnte nicht angemeldet werden.\",\n      \"reauth_successful\": \"Alexa Media Player erfolgreich authentifiziert\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Invalid Built-In 2FA key\",\n      \"connection_error\": \"Verbindungsfehler; Netzwerk prüfen und erneut versuchen\",\n      \"hass_url_invalid\": \"Es kann keine Verbindung zur Home Assistant-URL hergestellt werden. Bitte überprüfen Sie die externe URL unter Konfiguration - > Allgemein\",\n      \"identifier_exists\": \"Diese Email ist bereits registriert\",\n      \"invalid_credentials\": \"Falsche Zugangsdaten\",\n      \"unknown_error\": \"Unbekannter Fehler, bitte Log-Info melden\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"2FA Code (empfohlen, um Anmeldeprobleme zu vermeiden)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP from the Built-in 2FA App Key confirmed successfully.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nHave you successfully confirmed an OTP from the Built-in 2FA App Key with Amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Erweitertes debugging\",\n          \"email\": \"Email Adresse\",\n          \"exclude_devices\": \"Ausgeschlossene Geräte (komma getrennnt)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"include_devices\": \"Eingebundene Geräte (komma getrennnt)\",\n          \"otp_secret\": \"Built-in 2FA App Key (automatically generate 2FA Codes)\",\n          \"password\": \"Passwort\",\n          \"scan_interval\": \"Sekunden zwischen den Scans\",\n          \"securitycode\": \"2FA Code (empfohlen, um Anmeldeprobleme zu vermeiden)\",\n          \"url\": \"Amazon Region (z.B., amazon.de)\"\n        },\n        \"description\": \"Bitte geben Sie ihre Informationen ein.\",\n        \"title\": \"Alexa Media Player - Konfiguration\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Schließen Sie Geräte ein, die über Echo verbunden sind\",\n          \"queue_delay\": \"Sekunden zu warten, um Befehle in die Warteschlange zu stellen\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/translations/en.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"The Forgot Password page was detected. This normally is the result of too may failed logins. Amazon may require action before a relogin can be attempted.\",\n      \"login_failed\": \"Alexa Media Player failed to login.\",\n      \"reauth_successful\": \"Alexa Media Player successfully reauthenticated.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Invalid Built-In 2FA key\",\n      \"connection_error\": \"Error connecting; check network and retry\",\n      \"hass_url_invalid\": \"Unable to connect to Home Assistant url. Please check the External Url under Configuration -> General\",\n      \"identifier_exists\": \"Email for Alexa URL already registered\",\n      \"invalid_credentials\": \"Invalid credentials\",\n      \"unknown_error\": \"Unknown error, please enable advanced debugging and report log info\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP from the Built-in 2FA App Key confirmed successfully.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nHave you successfully confirmed an OTP from the Built-in 2FA App Key with Amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Advanced debugging\",\n          \"email\": \"Email Address\",\n          \"exclude_devices\": \"Excluded device (comma separated)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"include_devices\": \"Included device (comma separated)\",\n          \"otp_secret\": \"Built-in 2FA App Key (automatically generate 2FA Codes)\",\n          \"password\": \"Password\",\n          \"scan_interval\": \"Seconds between scans\",\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\",\n          \"url\": \"Amazon region domain (e.g., amazon.co.uk)\"\n        },\n        \"description\": \"Please confirm the information below.\",\n        \"title\": \"Alexa Media Player - Configuration\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Include devices connected via Echo\",\n          \"queue_delay\": \"Seconds to wait to queue commands together\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/translations/es.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"Se ha detectado la página de \\\"Ha olvidado su contraseña\\\". Normalmente esto ocurre si has intentado iniciar sesión varias veces de forma fallida. Amazon puede que te pida alguna acción adicional antes de poder volver a intentar iniciar sesión.\",\n      \"login_failed\": \"Alexa Media Player no pudo iniciar sesión.\",\n      \"reauth_successful\": \"Alexa Media Player se ha reautentificado correctamente.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Invalid Built-In 2FA key\",\n      \"connection_error\": \"Error al conectar, verifique la red y vuelva a intentarlo\",\n      \"hass_url_invalid\": \"No se puede conectar a la url de Home Assistant. Compruebe la dirección URL externa en Configuración -> General\",\n      \"identifier_exists\": \"Correo electrónico para la URL de Alexa ya registrado\",\n      \"invalid_credentials\": \"Credenciales no válidas\",\n      \"unknown_error\": \"Error desconocido, habilite la depuración avanzada e informe la información de registro\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de inicio de sesión)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP from the Built-in 2FA App Key confirmed successfully.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nHave you successfully confirmed an OTP from the Built-in 2FA App Key with Amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Depuración avanzada\",\n          \"email\": \"Dirección de correo electrónico\",\n          \"exclude_devices\": \"Dispositivo excluido (separado por comas)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"include_devices\": \"Dispositivo incluido (separado por comas)\",\n          \"otp_secret\": \"Built-in 2FA App Key (automatically generate 2FA Codes)\",\n          \"password\": \"Contraseña\",\n          \"scan_interval\": \"Segundos entre escaneos\",\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de inicio de sesión)\",\n          \"url\": \"Región del dominio de Amazon (por ejemplo, amazon.es)\"\n        },\n        \"description\": \"Confirme la siguiente información.\",\n        \"title\": \"Alexa Media Player - Configuración\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Incluir dispositivos conectados a través de Echo\",\n          \"queue_delay\": \"Segundos a esperar para agrupar comandos\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/translations/fr.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"La page Mot de passe oublié a été détectée. Amazon peut nécessiter une action avant qu'une reconnexion puisse être tentée.\",\n      \"login_failed\": \"Alexa Media Player n'a pas réussi à se connecter.\",\n      \"reauth_successful\": \"Alexa Media Player s'est authentifié avec succès.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Clé 2FA intégrée non valide\",\n      \"connection_error\": \"Erreur de connexion; vérifier le réseau et réessayer\",\n      \"hass_url_invalid\": \"Impossible de se connecter à l'URL de Home Assistant. Veuillez vérifier l'URL externe sous Configuration - > Général\",\n      \"identifier_exists\": \"Email pour l'URL Alexa déjà enregistré\",\n      \"invalid_credentials\": \"Informations d'identification invalides\",\n      \"unknown_error\": \"Erreur inconnue, veuillez signaler les informations du journal\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"Code 2FA (recommandé pour éviter les problèmes de connexion)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP de la clé d'application 2FA intégrée confirmée avec succès.\"\n        },\n        \"description\": \"** {email} - alexa. {url} **\\n Avez-vous confirmé avec succès un OTP à partir de la clé d'application 2FA intégrée avec Amazon?\\n > Code OTP {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Débogage avancé\",\n          \"email\": \"Adresse Email\",\n          \"exclude_devices\": \"Appareil exclu (séparé par des virgules)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"include_devices\": \"Appareil inclus (séparé par des virgules)\",\n          \"otp_secret\": \"Clé d'application 2FA intégrée (génère automatiquement des codes 2FA)\",\n          \"password\": \"Mot de passe\",\n          \"scan_interval\": \"Secondes entre les analyses\",\n          \"securitycode\": \"Code 2FA (recommandé pour éviter les problèmes de connexion)\",\n          \"url\": \"Domaine de la région Amazon (exemple, amazon.fr)\"\n        },\n        \"description\": \"Veuillez confirmer les informations ci-dessous.\",\n        \"title\": \"Alexa Media Player - Configuration\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Inclure les appareils connectés via Echo\",\n          \"queue_delay\": \"Secondes à attendre pour mettre les commandes en file d'attente ensemble\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/translations/it.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"È stata rilevata la pagina di password dimenticata. Normalmente questo è il risultato di troppi accessi falliti. Amazon potrebbe richiedere di eseguire alcune azioni prima di poter tentare un nuovo accesso.\",\n      \"login_failed\": \"Alexa Media Player ha fallito il login.\",\n      \"reauth_successful\": \"Alexa Media Player è stato riautenticato con successo.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Chiave 2FA incorporata non valida\",\n      \"connection_error\": \"Errore durante la connessione; controlla la rete e riprova\",\n      \"hass_url_invalid\": \"Impossibile collegarsi all'URL di Home Assistant. Controllare l'URL esterno nel menu Configurazione -> Generale\",\n      \"identifier_exists\": \"L'email per l'URL di Alexa è già stata registrata\",\n      \"invalid_credentials\": \"Credenziali non valide\",\n      \"unknown_error\": \"Errore sconosciuto, si prega di abilitare il debug avanzato e riportare i log informativi\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"Codice 2FA (raccomandato per evitare problemi di login)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"Password usa e getta (OTP) dalla chiave dell'applicazione 2FA integrata confermata con successo.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**\\nHai confermato con successo una chiave usa e getta (OTP) dall'applicazione 2FA integrata con Amazon?\\n>Codice OTP {message}\",\n        \"title\": \"Alexa Media Player - Conferma OTP\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Debug avanzato\",\n          \"email\": \"Indirizzo email\",\n          \"exclude_devices\": \"Dispositivi da escludere (separati da virgola)\",\n          \"hass_url\": \"URL per accedere a Home Assistant\",\n          \"include_devices\": \"Dispositivi da includere (separati da virgola)\",\n          \"otp_secret\": \"Chiave dell'app 2FA integrata (generazione automatica di codici 2FA)\",\n          \"password\": \"Password\",\n          \"scan_interval\": \"Tempo in secondi fra le scansioni\",\n          \"securitycode\": \"Codice 2FA (raccomandato per evitare problemi di login)\",\n          \"url\": \"Regione del dominio Amazon (ad es., amazon.it)\"\n        },\n        \"description\": \"Confermare le informazioni sottostanti.\",\n        \"title\": \"Alexa Media Player - Configurazione\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Includi i dispositivi collegati tramite Echo\",\n          \"queue_delay\": \"Secondi di attesa per accodare i comandi insieme\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/translations/nb.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"Siden Glemt passord ble oppdaget. Dette er vanligvis et resultat av også mislykkede pålogginger. Amazon kan kreve handling før en pålogging kan forsøkes.\",\n      \"login_failed\": \"Alexa Media Player kunne ikke logge inn.\",\n      \"reauth_successful\": \"Alexa Media Player er godkjent på nytt.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Invalid Built-In 2FA key\",\n      \"connection_error\": \"Feil ved tilkobling; sjekk nettverket og prøv på nytt\",\n      \"hass_url_invalid\": \"Kan ikke koble til nettadressen til hjemmeassistenten. Vennligst sjekk den eksterne nettadressen under Konfigurasjon - > Generelt\",\n      \"identifier_exists\": \"E-post for Alexa URL allerede registrert\",\n      \"invalid_credentials\": \"ugyldige legitimasjon\",\n      \"unknown_error\": \"Ukjent feil, vennligst rapporter logginfo\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"2FA-kode (anbefales for å unngå påloggingsproblemer)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP from the Built-in 2FA App Key confirmed successfully.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nHave you successfully confirmed an OTP from the Built-in 2FA App Key with Amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Avansert feilsøking\",\n          \"email\": \"Epostadresse\",\n          \"exclude_devices\": \"Ekskludert enhet (kommaseparert)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"include_devices\": \"Inkluder enhet (kommaseparert)\",\n          \"otp_secret\": \"Built-in 2FA App Key (automatically generate 2FA Codes)\",\n          \"password\": \"Passord\",\n          \"scan_interval\": \"Sekunder mellom skanninger\",\n          \"securitycode\": \"2FA-kode (anbefales for å unngå påloggingsproblemer)\",\n          \"url\": \"Amazon-regiondomenet (f.eks. Amazon.co.uk)\"\n        },\n        \"description\": \"Bekreft informasjonen nedenfor.\",\n        \"title\": \"Alexa Media Player - Konfigurasjon\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Inkluder enheter som er koblet til via Echo\",\n          \"queue_delay\": \"Sekunder for å vente på køkommandoer sammen\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/translations/nl.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"The Forgot Password page was detected. This normally is the result of too may failed logins. Amazon may require action before a relogin can be attempted.\",\n      \"login_failed\": \"Alexa Media Player failed to login.\",\n      \"reauth_successful\": \"Alexa Media Player successfully reauthenticated.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Invalid Built-In 2FA key\",\n      \"connection_error\": \"Fout bij verbinden; controleer netwerk en probeer opnieuw\",\n      \"hass_url_invalid\": \"Kan geen verbinding maken met de Home Assistant-URL. Controleer de externe URL onder Configuratie - > Algemeen\",\n      \"identifier_exists\": \"Dit e-mailadres is reeds geregistreerd\",\n      \"invalid_credentials\": \"Ongeldige inloggegevens\",\n      \"unknown_error\": \"Onbekende fout, meld de loggegevens\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"config::step::captcha::data::securitycode\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP from the Built-in 2FA App Key confirmed successfully.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nHave you successfully confirmed an OTP from the Built-in 2FA App Key with Amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Geavanceerd debuggen\",\n          \"email\": \"E-mailadres\",\n          \"exclude_devices\": \"Apparaten uitsluiten (Scheiding: komma)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"include_devices\": \"Apparaten toevoegen (Scheiding: komma)\",\n          \"otp_secret\": \"Built-in 2FA App Key (automatically generate 2FA Codes)\",\n          \"password\": \"Paswoord\",\n          \"scan_interval\": \"Aantal seconden tussen scans\",\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\",\n          \"url\": \"Domeinnaam van Amazon regio (bv.amazon.co.uk)\"\n        },\n        \"description\": \"Vul je gegevens in a.u.b.\",\n        \"title\": \"Alexa Media Player - Configuratie\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Inclusief apparaten die zijn verbonden via Echo\",\n          \"queue_delay\": \"Seconden om te wachten om opdrachten in de wachtrij te plaatsen\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/translations/pl.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"Wykryto stronę Zapomniałem hasła. Zwykle jest to wynikiem również nieudanych prób logowania. Amazon może wymagać podjęcia działań przed próbą ponownego logowania.\",\n      \"login_failed\": \"Alexa Media Player nie może się zalogować.\",\n      \"reauth_successful\": \"Alexa Media Player pomyślnie uwierzytelniona.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Nieprawidłowy klucz z wbudowanej aplikacji uwierzytelniania dwuskładnikowego\",\n      \"connection_error\": \"Błąd podczas łączenia; sprawdź sieć i spróbuj ponownie\",\n      \"hass_url_invalid\": \"Nie można połączyć się z adresem URL Home Assistanta. Sprawdź publiczny adres URL w sekcji Konfiguracja -> Ogólne\",\n      \"identifier_exists\": \"Adres e-mail dla Alexy już jest zarejestrowany\",\n      \"invalid_credentials\": \"Nieprawidłowe dane logowania\",\n      \"unknown_error\": \"Nieznany błąd, włącz zaawansowane debugowanie i zgłoś log z tego zdarzenia\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"Kod uwierzytelniania dwuskładnikowego\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"Hasło jednorazowe z wbudowanej aplikacji uwierzytelniania dwuskładnikowego potwierdzone pomyślnie.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nCzy pomyślnie potwierdziłeś hasło jednorazowe z wbudowanej aplikacji uwierzytelniania dwuskładnikowego z Amazonu? \\n >Kod hasła jednorazowego {message}\",\n        \"title\": \"Alexa Media Player - Potwierdzanie hasła jednorazowego\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Zaawansowane debugowanie\",\n          \"email\": \"Adres email\",\n          \"exclude_devices\": \"Wykluczone urządzenia (oddzielone przecinkami)\",\n          \"hass_url\": \"URL dostępu do Home Assistanta\",\n          \"include_devices\": \"Dodawane urządzenia (oddzielone przecinkami)\",\n          \"otp_secret\": \"Wbudowana aplikacja kluczy uwierzytelniania dwuskładnikowego (automatycznie generuje kody uwierzytelniania dwuskładnikowego)\",\n          \"password\": \"Hasło\",\n          \"scan_interval\": \"Interwał skanowania (sekundy)\",\n          \"securitycode\": \"Kod uwierzytelniania dwuskładnikowego (zalecany w celu uniknięcia problemów z logowaniem)\",\n          \"url\": \"Region/domena Amazon (np. amazon.co.uk)\"\n        },\n        \"description\": \"Potwierdź poniższe informacje.\",\n        \"title\": \"Alexa Media Player — konfiguracja\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Uwzględnij urządzenia podłączone przez Echo\",\n          \"queue_delay\": \"Sekundy oczekiwania na kolejkowanie poleceń\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/translations/pt-BR.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"A página Esqueci minha senha foi detectada. Isso normalmente é o resultado de muitos logins com falha. A Amazon pode exigir uma ação antes que um novo login possa ser tentado.\",\n      \"login_failed\": \"Alexa Media Player falhou no login.\",\n      \"reauth_successful\": \"O Alexa Media Player foi reautenticado com sucesso.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Chave integrada 2FA inválida\",\n      \"connection_error\": \"Erro de conexão; verifique a sua conexão e tente novamente\",\n      \"hass_url_invalid\": \"Não foi possível conectar ao URL do Home Assistant. Por favor, verifique o URL Externo em Configuração - > Geral\",\n      \"identifier_exists\": \"E-mail para URL Alexa já registrado\",\n      \"invalid_credentials\": \"Credenciais inválidas\",\n      \"unknown_error\": \"Erro desconhecido, favor habilitar depuração avançada e informações de registro de relatório\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP da chave de aplicativo 2FA integrada confirmada com sucesso.\"\n        },\n        \"description\": \"** {email} - alexa. {url} **\\n Você confirmou com sucesso um OTP da chave de aplicativo 2FA integrada com a Amazon?\\n > Código OTP {message}\",\n        \"title\": \"Alexa Media Player - Confirmação OTP\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Depuração avançada\",\n          \"email\": \"Endereço de e-mail\",\n          \"exclude_devices\": \"Dispositivos excluídos (separado por vírgula)\",\n          \"hass_url\": \"Url para acesso ao Home Assistant\",\n          \"include_devices\": \"Dispositivos incluídos (separado por vírgula)\",\n          \"otp_secret\": \"Chave de aplicativo 2FA integrada (gerar automaticamente códigos 2FA)\",\n          \"password\": \"Senha\",\n          \"scan_interval\": \"Segundos entre varreduras\",\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\",\n          \"url\": \"Domínio regional da Amazon (ex: amazon.co.uk)\"\n        },\n        \"description\": \"Por favor, confirme as informações abaixo.\",\n        \"title\": \"Alexa Media Player - Configurações\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Incluir dispositivos conectados via Echo\",\n          \"queue_delay\": \"Segundos para aguardar os comandos de fila juntos\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/translations/pt.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"A página 'Esqueci a senha' foi detectada. Normalmente, isso é o resultado de logins que falharam. A Amazon pode exigir uma ação antes que um relogin possa ser tentado.\",\n      \"login_failed\": \"Alexa Media Player não conseguiu fazer o login.\",\n      \"reauth_successful\": \"Alexa Media Player reautenticada com sucesso.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Chave 2FA integrada inválida\",\n      \"connection_error\": \"Erro ao conectar; verifique a rede e tente novamente\",\n      \"hass_url_invalid\": \"Não foi possível conectar ao URL do Home Assistant. Verifique o URL externo em Configuração - > Geral\",\n      \"identifier_exists\": \"E-mail para URL Alexa já registado\",\n      \"invalid_credentials\": \"Credenciais inválidas\",\n      \"unknown_error\": \"Erro desconhecido, por favor habilite depuração avançada e informações de log de relatório\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"Senha de uso único do aplicativo 2FA integrado confirmado com sucesso.\"\n        },\n        \"description\": \"** {email} - alexa. {url} **\\n Você confirmou com sucesso uma senha de uso único na aplicação 2FA integrada com a Amazon?\\n > Código OTP {message}\",\n        \"title\": \"Alexa Media Player - Confirmação OTP\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Depuração avançada\",\n          \"email\": \"Endereço de e-mail\",\n          \"exclude_devices\": \"Dispositivo excluído (separado por vírgula)\",\n          \"hass_url\": \"URL para aceder o Home Assistant\",\n          \"include_devices\": \"Dispositivo incluído (separado por vírgula)\",\n          \"otp_secret\": \"Chave de aplicativo 2FA integrada (gerar códigos 2FA automaticamente)\",\n          \"password\": \"Senha\",\n          \"scan_interval\": \"Segundos entre análises\",\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\",\n          \"url\": \"Região do domínio Amazon (ex. amazon.com.br)\"\n        },\n        \"description\": \"Por favor, confirme as informações abaixo.\",\n        \"title\": \"Alexa Media Player - Configuração\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Inclui dispositivos conectados via Echo\",\n          \"queue_delay\": \"Segundos de espera para agrupar comandos\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/translations/pt_BR.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"A página para senha esquecida foi detectada. Isto normalmente é o resultado de muitas tentativas de login falhas. A amazon pode requisitar ação antes de um novo login ser tentando.\",\n      \"login_failed\": \"Alexa Media Player falhou no login.\",\n      \"reauth_successful\": \"Alexa Media Player re-autenticado com sucesso.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Chave integrada 2FA inválida\",\n      \"connection_error\": \"Erro de conexão; Verifique a sua conexão e tente novamente\",\n      \"hass_url_invalid\": \"Não foi possível conectar a URL do Home Assistant. Por favor verifique a URL externa em Configuração -> Geral\",\n      \"identifier_exists\": \"Email para URL Alexa já registrado\",\n      \"invalid_credentials\": \"Credenciais inválidas\",\n      \"unknown_error\": \"Erro desconhecido, favor habilitar a depuração avançada e reporte as informações de registro\"\n    },\n    \"step\": {\n      \"action_required\": {\n        \"data\": {\n          \"proxy\": \"Usar método Login Proxy (Não requer 2FA)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nA amazon enviará uma notificação push para a mensagem abaixo. Por favor responda ela completamente antes de continuar.  \\n{message}\",\n        \"title\": \"Alexa Media Player - Ação Requisitada\"\n      },\n      \"authselect\": {\n        \"data\": {\n          \"authselectoption\": \"Método OTP\",\n          \"proxy\": \"Usar método Login Proxy (Não requer 2FA)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**\\n{message}\",\n        \"title\": \"Alexa Media Player - Senha de uso único\"\n      },\n      \"captcha\": {\n        \"data\": {\n          \"captcha\": \"Captcha\",\n          \"password\": \"Senha\",\n          \"proxy\": \"Usar método Login Proxy (Não requer 2FA)\",\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\n{message}  \\n {captcha_image}\",\n        \"title\": \"Alexa Media Player - Captcha\"\n      },\n      \"claimspicker\": {\n        \"data\": {\n          \"authselectoption\": \"Método de verificação\",\n          \"proxy\": \"Usar método Login Proxy (Não requer 2FA)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nPor favor selecione um método de verificação por número. (ex: `0` ou `1`)  \\n{message}\",\n        \"title\": \"Alexa Media Player - Método de verificação\"\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP do aplicativo integrado de chave 2FA confirmado com sucesso.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nVocê confirmou com sucesso um OTP no aplicativo integrado de chave 2FA com a amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - Confirmação OTP\"\n      },\n      \"twofactor\": {\n        \"data\": {\n          \"proxy\": \"Usar método Login Proxy (Não requer 2FA)\",\n          \"securitycode\": \"Código 2FA\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nInsira a senha de uso único (OTP).\\n{message}\",\n        \"title\": \"Alexa Media Player - Autenticação de dois fatores\"\n      },\n      \"user\": {\n        \"data\": {\n          \"cookies_txt\": \"Dados de cookies.txt\",\n          \"debug\": \"Depuração avançada\",\n          \"email\": \"Endereço de email\",\n          \"exclude_devices\": \"Dispositivos exclusos (separados por virgula)\",\n          \"hass_url\": \"Url para acesso ao Home Assistant\",\n          \"include_devices\": \"Dispositivos inclusos (separados por vírgula)\",\n          \"oauth_login\": \"Habilitar o aplicativo para método auth-token\",\n          \"otp_secret\": \"Aplicativo integrado para chaves 2FA (Automaticamente gera códigos 2FA)\",\n          \"password\": \"Senha\",\n          \"proxy\": \"Usar método Login Proxy (Não requer 2FA)\",\n          \"scan_interval\": \"Segundos entre varreduras\",\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\",\n          \"url\": \"Domínio regional da amazon (ex: amazon.co.uk)\"\n        },\n        \"description\": \"Por favor, confirme as informações abaixo. Para configuração legada, desative a opção `Usar método de proxy de login'.\",\n        \"title\": \"Alexa Media Player - Configurações\"\n      },\n      \"user_legacy\": {\n        \"data\": {\n          \"cookies_txt\": \"Cookies.txt data\",\n          \"debug\": \"Depuração avançada\",\n          \"email\": \"Endereço de email\",\n          \"exclude_devices\": \"Dispositivos exclusos (separados por virgula)\",\n          \"include_devices\": \"Dispositivos inclusos (separados por vírgula)\",\n          \"oauth_login\": \"Habilitar o aplicativo para método auth-token\",\n          \"otp_secret\": \"Aplicativo integrado para chaves 2FA (Automaticamente gera códigos 2FA)\",\n          \"password\": \"Senha\",\n          \"proxy\": \"Usar método Login Proxy (Não requer 2FA)\",\n          \"scan_interval\": \"Segundos entre varreduras\",\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\",\n          \"url\": \"Domínio regional da amazon (ex: amazon.co.uk)\"\n        },\n        \"description\": \"Por favor insira sua [informação](https://github.com/custom-components/alexa_media_player/wiki/Configuration#integrations-page). **[Cookie import](https://github.com/custom-components/alexa_media_player/wiki/Configuration#cookie-import) pode ser mais fácil!**   \\n**AVISO! A amazon reporta incorretamente 'Insira um email ou número de telefone válido' quando [Código de 2FA é requirido](https://github.com/custom-components/alexa_media_player/wiki/Configuration#enable-two-factor-authentication-for-your-amazon-account).**  \\n>{message}\",\n        \"title\": \"Alexa Media Player - Configurações legado\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Inclui dispositivos conectados via Echo\",\n          \"queue_delay\": \"Segundos para aguardar antes de enfileirar juntos\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/translations/pt_PT.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"A página 'Esqueci a senha' foi detectada. Normalmente, isso é o resultado de logins que falharam. A Amazon pode exigir uma ação antes que um relogin possa ser tentado.\",\n      \"login_failed\": \"Alexa Media Player não conseguiu fazer o login.\",\n      \"reauth_successful\": \"Alexa Media Player reautenticada com sucesso.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Chave 2FA integrada inválida\",\n      \"connection_error\": \"Erro ao conectar; verifique a rede e tente novamente\",\n      \"hass_url_invalid\": \"Não foi possível conectar ao URL do Home Assistant. Verifique o URL externo em Configuração - > Geral\",\n      \"identifier_exists\": \"E-mail para URL Alexa já registado\",\n      \"invalid_credentials\": \"Credenciais inválidas\",\n      \"unknown_error\": \"Erro desconhecido, por favor habilite depuração avançada e informações de log de relatório\"\n    },\n    \"step\": {\n      \"action_required\": {\n        \"data\": {\n          \"proxy\": \"Usar método de proxy de login (2FA não é necessário)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nA Amazon enviará uma notificação push de acordo com a mensagem abaixo. Por favor, responda completamente antes de continuar.  \\n{message}\",\n        \"title\": \"Alexa Media Player - Ação Necessária\"\n      },\n      \"authselect\": {\n        \"data\": {\n          \"authselectoption\": \"Método OTP (senha de uso único)\",\n          \"proxy\": \"Usar método de proxy de login (2FA não é necessário)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\n{message}\",\n        \"title\": \"Alexa Media Player - Senha de uso único\"\n      },\n      \"captcha\": {\n        \"data\": {\n          \"captcha\": \"Captcha\",\n          \"password\": \"Senha\",\n          \"proxy\": \"Usar método de proxy de login (2FA não é necessário)\",\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\n{message}  \\n {captcha_image}\",\n        \"title\": \"Alexa Media Player - Captcha\"\n      },\n      \"claimspicker\": {\n        \"data\": {\n          \"authselectoption\": \"Método de verificação\",\n          \"proxy\": \"Usar método de proxy de login (2FA não é necessário)\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nPor favor, selecione o método de verificação por número. (ex. '0' ou '1')  \\n{message}\",\n        \"title\": \"Alexa Media Player - Método de verificação\"\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"Senha de uso único do aplicativo 2FA integrado confirmado com sucesso.\"\n        },\n        \"description\": \"** {email} - alexa. {url} **\\n Você confirmou com sucesso uma senha de uso único na aplicação 2FA integrada com a Amazon?\\n > Código OTP {message}\",\n        \"title\": \"Alexa Media Player - Confirmação OTP\"\n      },\n      \"twofactor\": {\n        \"data\": {\n          \"proxy\": \"Usar método de proxy de login (2FA não é necessário)\",\n          \"securitycode\": \"Código 2FA\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nDigite a senha de uso único (OTP).  \\n{message}\",\n        \"title\": \"Alexa Media Player - autenticação de dois fatores\"\n      },\n      \"user\": {\n        \"data\": {\n          \"cookies_txt\": \"Dados de cookies.txt\",\n          \"debug\": \"Depuração avançada\",\n          \"email\": \"Endereço de e-mail\",\n          \"exclude_devices\": \"Dispositivo excluído (separado por vírgula)\",\n          \"hass_url\": \"URL para aceder o Home Assistant\",\n          \"include_devices\": \"Dispositivo incluído (separado por vírgula)\",\n          \"oauth_login\": \"Habilitar método de aplicativo oauth-token\",\n          \"otp_secret\": \"Chave de aplicativo 2FA integrada (gerar códigos 2FA automaticamente)\",\n          \"password\": \"Senha\",\n          \"proxy\": \"Usar método de proxy de login (2FA não é necessário)\",\n          \"scan_interval\": \"Segundos entre análises\",\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\",\n          \"url\": \"Região do domínio Amazon (ex. amazon.com.br)\"\n        },\n        \"description\": \"Por favor, confirme as informações abaixo. Para configuração de compatibilidade, desative a opção 'Usar método de proxy de login'.\",\n        \"title\": \"Alexa Media Player - Configuração\"\n      },\n      \"user_legacy\": {\n        \"data\": {\n          \"cookies_txt\": \"Dados de cookies.txt\",\n          \"debug\": \"Depuração avançada\",\n          \"email\": \"Endereço de e-mail\",\n          \"exclude_devices\": \"Dispositivo excluído (separado por vírgula)\",\n          \"include_devices\": \"Dispositivo incluído (separado por vírgula)\",\n          \"oauth_login\": \"Habilitar método de aplicativo oauth-token\",\n          \"otp_secret\": \"Chave de aplicativo 2FA integrada (gerar códigos 2FA automaticamente)\",\n          \"password\": \"Senha\",\n          \"proxy\": \"Usar método de proxy de login (2FA não é necessário)\",\n          \"scan_interval\": \"Segundos entre análises\",\n          \"securitycode\": \"Código 2FA (recomendado para evitar problemas de login)\",\n          \"url\": \"Região do domínio Amazon (ex. amazon.com.br)\"\n        },\n        \"description\": \"Por favor, introduza a sua [informação](https://github.com/custom-components/alexa_media_player/wiki/Configuration#integrations-page). **[Cookie import](https://github.com/custom-components/alexa_media_player/wiki/Configuration#cookie-import) pode ser mais fácil!**   \\n**Aviso: a Amazon informa incorretamente 'Insira um e-mail ou número de celular válido' quando [2FA Code é necessário](https://github.com/custom-components/alexa_media_player/wiki/Configuration#enable-two-factor-authentication-for-your-amazon-account).**  \\n>{message}\",\n        \"title\": \"Alexa Media Player - Configuração de Compatibilidade\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Inclui dispositivos conectados via Echo\",\n          \"queue_delay\": \"Segundos de espera para agrupar comandos\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/translations/ru.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"The Forgot Password page was detected. This normally is the result of too may failed logins. Amazon may require action before a relogin can be attempted.\",\n      \"login_failed\": \"Alexa Media Player failed to login.\",\n      \"reauth_successful\": \"Alexa Media Player successfully reauthenticated.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Invalid Built-In 2FA key\",\n      \"connection_error\": \"Ошибка подключения; проверьте сеть и повторите попытку\",\n      \"hass_url_invalid\": \"Невозможно подключиться к URL-адресу Home Assistant. Пожалуйста, проверьте внешний URL-адрес в разделе \\\"Конфигурация\\\" - > Общие\\\".\",\n      \"identifier_exists\": \"Электронная почта для Alexa уже зарегистрирована\",\n      \"invalid_credentials\": \"Неверные учетные данные\",\n      \"unknown_error\": \"Неизвестная ошибка, пожалуйста, сообщите информацию журнала\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP from the Built-in 2FA App Key confirmed successfully.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nHave you successfully confirmed an OTP from the Built-in 2FA App Key with Amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"Расширенные возможности отладки\",\n          \"email\": \"Адрес электронной почты\",\n          \"exclude_devices\": \"Исключенные устройства (через запятую)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"include_devices\": \"Включенные устройства (разделенное запятыми)\",\n          \"otp_secret\": \"Built-in 2FA App Key (automatically generate 2FA Codes)\",\n          \"password\": \"Пароль\",\n          \"scan_interval\": \"Секунды между сканированиями\",\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\",\n          \"url\": \"Домен региона Amazon (например, amazon.co.uk)\"\n        },\n        \"description\": \"Пожалуйста, подтвердите информацию ниже.\",\n        \"title\": \"Alexa Media Player - Конфигурация\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Включить устройства, подключенные через Echo\",\n          \"queue_delay\": \"Секунды ожидания, чтобы выполнить команды вместе\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/alexa_media/translations/zh-Hans.json",
    "content": "{\n  \"config\": {\n    \"abort\": {\n      \"forgot_password\": \"The Forgot Password page was detected. This normally is the result of too may failed logins. Amazon may require action before a relogin can be attempted.\",\n      \"login_failed\": \"Alexa Media Player failed to login.\",\n      \"reauth_successful\": \"Alexa Media Player successfully reauthenticated.\"\n    },\n    \"error\": {\n      \"2fa_key_invalid\": \"Invalid Built-In 2FA key\",\n      \"connection_error\": \"连接错误；检查网络并重试\",\n      \"hass_url_invalid\": \"Unable to connect to Home Assistant url. Please check the External Url under Configuration -> General\",\n      \"identifier_exists\": \"Alexa URL的电子邮件已注册\",\n      \"invalid_credentials\": \"Invalid credentials\",\n      \"unknown_error\": \"Unknown error, please report log info\"\n    },\n    \"step\": {\n      \"captcha\": {\n        \"data\": {\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\"\n        }\n      },\n      \"totp_register\": {\n        \"data\": {\n          \"registered\": \"OTP from the Built-in 2FA App Key confirmed successfully.\"\n        },\n        \"description\": \"**{email} - alexa.{url}**  \\nHave you successfully confirmed an OTP from the Built-in 2FA App Key with Amazon?  \\n >OTP Code {message}\",\n        \"title\": \"Alexa Media Player - OTP Confirmation\"\n      },\n      \"user\": {\n        \"data\": {\n          \"debug\": \"高级调试\",\n          \"email\": \"电子邮件地址\",\n          \"exclude_devices\": \"Excluded device (comma separated)\",\n          \"hass_url\": \"Url to access Home Assistant\",\n          \"include_devices\": \"Included device (comma separated)\",\n          \"otp_secret\": \"Built-in 2FA App Key (automatically generate 2FA Codes)\",\n          \"password\": \"密码\",\n          \"scan_interval\": \"Seconds between scans\",\n          \"securitycode\": \"2FA Code (recommended to avoid login issues)\",\n          \"url\": \"Amazon region domain (e.g., amazon.co.uk)\"\n        },\n        \"description\": \"请确认以下信息。\",\n        \"title\": \"Alexa Media Player-配置\"\n      }\n    }\n  },\n  \"options\": {\n    \"step\": {\n      \"init\": {\n        \"data\": {\n          \"extended_entity_discovery\": \"Include devices connected via Echo\",\n          \"queue_delay\": \"Seconds to wait to queue commands together\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/attributes/__init__.py",
    "content": "\"\"\"Attributes breakout sensor\"\"\"\n"
  },
  {
    "path": "home-assistant/custom_components/attributes/manifest.json",
    "content": "{\n  \"domain\": \"attributes\",\n  \"name\": \"Attributes\",\n  \"version\": \"1.2.0\",\n  \"documentation\": \"https://github.com/pilotak/homeassistant-attributes\",\n  \"issue_tracker\": \"https://github.com/pilotak/homeassistant-attributes/issues\",\n  \"requirements\": [],\n  \"dependencies\": [],\n  \"codeowners\": [\"@pilotak\"]\n}\n"
  },
  {
    "path": "home-assistant/custom_components/attributes/sensor.py",
    "content": "# \"\"\"\n# Creates a sensor that breaks out attribute of defined entities.\n# \"\"\"\nimport asyncio\nimport logging\n\nimport voluptuous as vol\n\nfrom homeassistant.core import callback\nfrom homeassistant.components.sensor import ENTITY_ID_FORMAT, PLATFORM_SCHEMA\nfrom homeassistant.const import (\n    ATTR_FRIENDLY_NAME, ATTR_UNIT_OF_MEASUREMENT, ATTR_ICON, CONF_ENTITIES,\n    ATTR_DEVICE_CLASS, EVENT_HOMEASSISTANT_START, STATE_UNKNOWN,\n    STATE_UNAVAILABLE, CONF_VALUE_TEMPLATE)\nfrom homeassistant.exceptions import TemplateError\nimport homeassistant.helpers.config_validation as cv\nfrom homeassistant.helpers.entity import Entity, async_generate_entity_id\nfrom homeassistant.helpers.event import async_track_state_change\nfrom homeassistant.helpers.restore_state import RestoreEntity\nfrom homeassistant.helpers import template as template_helper\nfrom homeassistant.util import slugify\n\n__version__ = '1.2.0'\n\n_LOGGER = logging.getLogger(__name__)\n\nCONF_ATTRIBUTE = \"attribute\"\nCONF_TIME_FORMAT = \"time_format\"\nCONF_ROUND_TO = \"round_to\"\n\nPLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({\n    vol.Optional(ATTR_ICON): cv.string,\n    vol.Optional(ATTR_FRIENDLY_NAME): cv.string,\n    vol.Optional(ATTR_DEVICE_CLASS): cv.string,\n    vol.Optional(ATTR_UNIT_OF_MEASUREMENT): cv.string,\n    vol.Optional(CONF_TIME_FORMAT): cv.string,\n    vol.Optional(CONF_ROUND_TO): cv.positive_int,\n    vol.Optional(CONF_VALUE_TEMPLATE): cv.string,\n    vol.Required(CONF_ATTRIBUTE): cv.string,\n    vol.Required(CONF_ENTITIES): cv.entity_ids\n})\n\n\n@asyncio.coroutine\ndef async_setup_platform(hass, config, async_add_devices, discovery_info=None):\n    \"\"\"Set up the attributes sensors.\"\"\"\n    _LOGGER.info(\"Starting attribute sensor\")\n    sensors = []\n\n    for device in config[CONF_ENTITIES]:\n        attr = config.get(CONF_ATTRIBUTE)\n        time_format = str(config.get(CONF_TIME_FORMAT))\n\n        if (attr == \"last_triggered\" or\n                attr == \"last_changed\") and time_format:\n\n            state_template = (\"{{% if states('{0}') != '{2}' \"\n                              \"and states('{0}') != '{4}' %}}\\\n                              {{{{ as_timestamp(state_attr('{0}', '{1}'))\\\n                              | int | timestamp_local()\\\n                              | timestamp_custom('{2}') }}}}\\\n                              {{% else %}} {3} {{% endif %}}\").format(\n                device, attr, time_format, STATE_UNKNOWN, STATE_UNAVAILABLE)\n        else:\n            round_to = config.get(CONF_ROUND_TO, None)\n            additional_template = config.get(CONF_VALUE_TEMPLATE, \"\")\n\n            state_template = \"{{% if states('{0}') != '{2}' \"\n            state_template += \"and states('{0}') != '{5}' %}}\"\n\n            if round_to is None:\n                state_template += \"{{{{ state_attr('{0}', '{1}') {4} }}}}\"\n            elif round_to > 0:\n                state_template += \"{{{{ (state_attr('{0}', '{1}') | float)\"\n                state_template += \" | round({3}) {4} }}}}\"\n            else:\n                state_template += \"{{{{ state_attr('{0}', '{1}')\"\n                state_template += \" | int {4} }}}}\"\n\n            state_template += \"{{% else %}} {2} {{% endif %}}\"\n            state_template = state_template.format(\n                device, attr, STATE_UNKNOWN, round_to, additional_template,\n                STATE_UNAVAILABLE)\n\n        _LOGGER.info(\"Adding attribute: %s of entity: %s\", attr, device)\n        _LOGGER.debug(\"Applying template: %s\", state_template)\n\n        state_template = template_helper.Template(state_template)\n        state_template.hass = hass\n\n        icon = str(config.get(ATTR_ICON))\n\n        device_state = hass.states.get(device)\n\n        if device_state is not None:\n            device_friendly_name = device_state.attributes.get('friendly_name')\n        else:\n            device_friendly_name = device.split(\".\", 1)[1]\n\n        friendly_name = config.get(ATTR_FRIENDLY_NAME, None)\n\n        if device_state is not None:\n            device_class = config.get(\n                ATTR_DEVICE_CLASS, device_state.attributes.get('device_class'))\n        else:\n            device_class = config.get(ATTR_DEVICE_CLASS, None)\n\n        unit_of_measurement = config.get(ATTR_UNIT_OF_MEASUREMENT)\n\n        if icon.startswith('mdi:') or icon.startswith('hass:'):\n            _LOGGER.debug(\"Applying user defined icon: '%s'\", icon)\n            new_icon = (\"{{% if states('{0}') != '{2}' \"\n                        \"and states('{0}') != '{3}' %}} {1} {{% else %}}\\\n                mdi:eye {{% endif %}}\").format(device, icon, STATE_UNKNOWN,\n                                               STATE_UNAVAILABLE)\n\n            new_icon = template_helper.Template(new_icon)\n            new_icon.hass = hass\n        elif (device_class is None or device_class != \"battery\") \\\n                and attr == \"battery\" or attr == \"battery_level\":\n            _LOGGER.debug(\"Applying battery icon template\")\n\n            new_icon = (\"{{% if states('{0}') != '{2}' \"\n                        \"and states('{0}') != '{3}' %}}\\\n                {{% set batt = states.{0}.attributes['{1}']|int %}}\\\n                {{% if batt == 'unknown' %}}\\\n                mdi:battery-unknown\\\n                {{% elif batt > 95 %}}\\\n                mdi:battery\\\n                {{% elif batt > 85 %}}\\\n                mdi:battery-90\\\n                {{% elif batt > 75 %}}\\\n                mdi:battery-80\\\n                {{% elif batt > 65 %}}\\\n                mdi:battery-70\\\n                {{% elif batt > 55 %}}\\\n                mdi:battery-60\\\n                {{% elif batt > 45 %}}\\\n                mdi:battery-50\\\n                {{% elif batt > 35 %}}\\\n                mdi:battery-40\\\n                {{% elif batt > 25 %}}\\\n                mdi:battery-30\\\n                {{% elif batt > 15 %}}\\\n                mdi:battery-20\\\n                {{% elif batt > 10 %}}\\\n                mdi:battery-10\\\n                {{% else %}}\\\n                mdi:battery-outline\\\n                {{% endif %}}\\\n            {{% else %}}\\\n            mdi:battery-unknown\\\n            {{% endif %}}\").format(\n                device, attr, STATE_UNKNOWN, STATE_UNAVAILABLE)\n            new_icon = template_helper.Template(str(new_icon))\n            new_icon.hass = hass\n        else:\n            _LOGGER.debug(\"No icon applied\")\n            new_icon = None\n\n        sensors.append(\n            AttributeSensor(\n                hass,\n                (\"{0}_{1}\").format(device.split(\".\", 1)[1], attr),\n                friendly_name,\n                device_friendly_name,\n                device_class,\n                unit_of_measurement,\n                state_template,\n                new_icon,\n                device)\n        )\n    if not sensors:\n        _LOGGER.error(\"No sensors added\")\n        return False\n\n    async_add_devices(sensors)\n    return True\n\n\nclass AttributeSensor(RestoreEntity):\n    \"\"\"Representation of a Attribute Sensor.\"\"\"\n\n    def __init__(self, hass, device_id, friendly_name, device_friendly_name,\n                 device_class, unit_of_measurement, state_template,\n                 icon_template, entity_id):\n        \"\"\"Initialize the sensor.\"\"\"\n        self.hass = hass\n        self.entity_id = async_generate_entity_id(ENTITY_ID_FORMAT, device_id,\n                                                  hass=hass)\n        self._name = friendly_name if friendly_name is not None \\\n            else device_friendly_name\n        self._friendly_name = friendly_name\n        self._unique_id = slugify(f\"{entity_id}_{device_id}\")\n        self._device_class = device_class\n        self._unit_of_measurement = unit_of_measurement\n        self._template = state_template\n        self._state = None\n        self._icon_template = icon_template\n        self._icon = None\n        self._entity = entity_id\n\n    @asyncio.coroutine\n    def async_added_to_hass(self):\n        \"\"\"Register callbacks.\"\"\"\n        state = yield from self.async_get_last_state()\n        if state:\n            self._state = state.state\n\n        @callback\n        def template_sensor_state_listener(entity, old_state, new_state):\n            \"\"\"Handle device state changes.\"\"\"\n            self.hass.async_add_job(self.async_update_ha_state(True))\n\n        @callback\n        def template_sensor_startup(event):\n            \"\"\"Update on startup.\"\"\"\n            async_track_state_change(\n                self.hass, self._entity, template_sensor_state_listener)\n\n            self.hass.async_add_job(self.async_update_ha_state(True))\n\n        self.hass.bus.async_listen_once(\n            EVENT_HOMEASSISTANT_START, template_sensor_startup)\n\n    @property\n    def name(self):\n        \"\"\"Return the name of the sensor.\"\"\"\n        return self._name\n\n    @property\n    def unique_id(self):\n        \"\"\"Return the unique ID of the sensor.\"\"\"\n        return self._unique_id\n\n    @property\n    def state(self):\n        \"\"\"Return the state of the sensor.\"\"\"\n        return self._state\n\n    @property\n    def icon(self):\n        \"\"\"Return the icon to use in the frontend, if any.\"\"\"\n        return self._icon\n\n    @property\n    def device_class(self):\n        \"\"\"Return the device_class.\"\"\"\n        return self._device_class\n\n    @property\n    def unit_of_measurement(self):\n        \"\"\"Return the unit_of_measurement of the device.\"\"\"\n        return self._unit_of_measurement\n\n    @property\n    def should_poll(self):\n        \"\"\"No polling needed.\"\"\"\n        return False\n\n    @asyncio.coroutine\n    def async_update(self):\n        \"\"\"Update the state from the template and the friendly name.\"\"\"\n\n        entity_state = self.hass.states.get(self._entity)\n        if self._friendly_name is None and entity_state is not None:\n            dev_friendly_name = entity_state.attributes.get('friendly_name')\n            if dev_friendly_name is not None:\n                self._name = dev_friendly_name\n\n        try:\n            self._state = self._template.async_render()\n        except TemplateError as ex:\n            if ex.args and (\n                    ex.args[0].startswith(\n                        \"UndefinedError: 'None' has no attribute\") or\n                    ex.args[0].startswith(\n                        \"UndefinedError: 'mappingproxy object' has \"\n                        \"no attribute\")):\n                # Common during HA startup - so just a warning\n                _LOGGER.warning('Could not render attribute sensor for %s,'\n                                ' the state is unknown.', self._entity)\n                return\n            self._state = None\n            _LOGGER.error('Could not attribute sensor for %s: %s',\n                          self._entity, ex)\n\n        if self._icon_template is not None:\n            try:\n                self._icon = self._icon_template.async_render()\n            except TemplateError as ex:\n                if ex.args and (\n                        ex.args[0].startswith(\n                            \"UndefinedError: 'None' has no attribute\") or\n                        ex.args[0].startswith(\n                            \"UndefinedError: 'mappingproxy object' has \"\n                            \"no attribute\")):\n                    # Common during HA startup - so just a warning\n                    _LOGGER.warning('Could not render icon template %s,'\n                                    ' the state is unknown.', self._name)\n                    return\n                self._icon = super().icon\n                _LOGGER.error('Could not render icon template %s: %s',\n                              self._name, ex)\n"
  },
  {
    "path": "home-assistant/custom_components/burze_dzis_net/__init__.py",
    "content": "\"\"\"Burze.dzis.net\"\"\""
  },
  {
    "path": "home-assistant/custom_components/burze_dzis_net/binary_sensor.py",
    "content": "from datetime import timedelta\nimport voluptuous as vol\nimport logging\n\nfrom homeassistant.util import Throttle\nfrom homeassistant.util.dt import parse_datetime\nfrom homeassistant.components.binary_sensor import DEVICE_CLASS_SAFETY, PLATFORM_SCHEMA, ENTITY_ID_FORMAT\nfrom homeassistant.const import CONF_NAME, CONF_RADIUS, CONF_API_KEY, ATTR_ATTRIBUTION, CONF_LATITUDE, CONF_LONGITUDE, \\\n    CONF_SCAN_INTERVAL\nimport homeassistant.helpers.config_validation as cv\ntry:\n    from homeassistant.components.binary_sensor import BinarySensorEntity\nexcept ImportError:\n    from homeassistant.components.binary_sensor import BinarySensorDevice as BinarySensorEntity\nfrom homeassistant.helpers.entity import async_generate_entity_id\n\n_LOGGER = logging.getLogger(__name__)\n\nCONF_WARNINGS = 'warnings'\nCONF_STORMS_NEARBY = 'storms_nearby'\n\nDEFAULT_NAME = 'Burze.dzis.net'\nDEFAULT_SCAN_INTERVAL = timedelta(minutes=2, seconds=30)\nATTRIBUTION = 'Information provided by Burze.dzis.net.'\n\nWARNING_TYPES = {\n    'frost_warning': ['mroz', 'Ostrzeżenie - Mróz', 'mdi:weather-snowy'],\n    'heat_warning': ['upal', 'Ostrzeżenie - Upał', 'mdi:weather-sunny'],\n    'wind_warning': ['wiatr', 'Ostrzeżenie - Wiatr', 'mdi:weather-windy'],\n    'precipitation_warning': ['opad', 'Ostrzeżenie - Opad', 'mdi:weather-pouring'],\n    'storm_warning': ['burza', 'Ostrzeżenie - Burza', 'mdi:weather-lightning-rainy'],\n    'tornado_warning': ['traba', 'Ostrzeżenie - Trąba', 'mdi:weather-hurricane'],\n}\nWARNING_DESCRIPTIONS = {\n    'frost_warning': {\n        1: \"od -20 do -25°C\",\n        2: \"od -26 do -30°C\",\n        3: \"poniżej -30°C\"\n    },\n    'heat_warning': {\n        1: \"od 30 do 34°C\",\n        2: \"od 35 do 38°C\",\n        3: \"powyżej 38°C\"\n    },\n    'wind_warning': {\n        1: \"w porywach od 70 do 90 km/h\",\n        2: \"w porywach od 91 do 110 km/h\",\n        3: \"w porywach powyżej 110 km/h\"\n    },\n    'precipitation_warning': {\n        1: \"deszcz od 25 do 40 mm w ciągu 24 godzin/śnieg od 10 do 15 cm w ciągu 24 godzin\",\n        2: \"deszcz od 41 do 70 mm w ciągu 24 godzin/śnieg od 16 do 30 cm w ciągu 24 godzin/śnieg od 10 do 15 cm w ciągu 12 godzin\",\n        3: \"deszcz powyżej 70 mm w ciągu 24 godzin/śnieg powyżej 30 cm w ciągu 24 godzin/śnieg powyżej 15 cm w ciągu 12 godzin\"\n    },\n    'storm_warning': {\n        1: \"deszcz od 15 do 40 mm/wiatr w porywach od 60 do 90 km/h/grad poniżej 2 cm\",\n        2: \"deszcz od 41 do 70 mm/wiatr w porywach od 91 do 110 km/h/grad od 2 do 5 cm\",\n        3: \"wiatr w porywach od 91 do 110 km/h/grad od 2 do 5 cm/deszcz powyżej 70 mm/wiatr w porywach powyżej 110 km/h/grad powyżej 5 cm\"\n    },\n    'tornado_warning': {\n        1: \"ryzyko niewielkie\",\n        2: \"ryzyko umiarkowane\",\n        3: \"ryzyko wysokie\"\n    }\n}\nSTORM_NEARBY = ['Burze w pobliżu', 'mdi:weather-lightning']\n\nPLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({\n    vol.Optional(CONF_LATITUDE): cv.string,\n    vol.Optional(CONF_LONGITUDE): cv.string,\n    vol.Required(CONF_API_KEY): cv.string,\n    vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,\n    vol.Optional(CONF_WARNINGS, default=[]):\n        vol.All(cv.ensure_list, [vol.In(WARNING_TYPES)]),\n    vol.Optional(CONF_STORMS_NEARBY):\n        vol.Schema({\n            vol.Required(CONF_RADIUS): cv.positive_int\n        }),\n    vol.Optional(CONF_SCAN_INTERVAL, default=DEFAULT_SCAN_INTERVAL): cv.time_period\n})\n\n\ndef convert_to_dm(dmf):\n    return '{}.{:02}'.format(int(dmf), round(dmf % 1 * 60))\n\n\nasync def async_setup_platform(hass, config, async_add_entities, discovery_info=None):\n    name = config.get(CONF_NAME)\n    latitude = float(config.get(CONF_LATITUDE, hass.config.latitude))\n    longitude = float(config.get(CONF_LONGITUDE, hass.config.longitude))\n    api_key = config.get(CONF_API_KEY)\n    warnings = config.get(CONF_WARNINGS)\n    storms_nearby = config.get(CONF_STORMS_NEARBY)\n    scan_interval = config.get(CONF_SCAN_INTERVAL)\n    radius = 0\n    if storms_nearby is not None:\n        radius = storms_nearby.get(CONF_RADIUS)\n    sensors = []\n    sensor_name = '{} - '.format(name)\n    x = convert_to_dm(longitude)\n    y = convert_to_dm(latitude)\n    updater = BurzeDzisNetDataUpdater(hass, x, y, radius, api_key, scan_interval)\n    await updater.async_update()\n    for warning_type in warnings:\n        uid = '{}_{}'.format(name, warning_type)\n        entity_id = async_generate_entity_id(ENTITY_ID_FORMAT, uid, hass=hass)\n        sensors.append(BurzeDzisNetWarningsSensor(entity_id, sensor_name, updater, warning_type))\n    if storms_nearby is not None:\n        uid = '{}_storms_nearby'.format(name)\n        entity_id = async_generate_entity_id(ENTITY_ID_FORMAT, uid, hass=hass)\n        sensors.append(BurzeDzisNetStormsNearbySensor(entity_id, sensor_name, updater))\n    async_add_entities(sensors, True)\n\n\nclass BurzeDzisNetSensor(BinarySensorEntity):\n\n    def __init__(self, entity_id, name, updater):\n        self.entity_id = entity_id\n        self._name = name\n        self._updater = updater\n        self._data = None\n\n    @property\n    def extra_state_attributes(self):\n        output = dict()\n        output[ATTR_ATTRIBUTION] = ATTRIBUTION\n        return output\n\n    @property\n    def device_class(self):\n        return DEVICE_CLASS_SAFETY\n\n    async def async_update(self):\n        await self._updater.async_update()\n\n\nclass BurzeDzisNetWarningsSensor(BurzeDzisNetSensor):\n    def __init__(self, entity_id, name, updater, warning_type):\n        super().__init__(entity_id, name, updater)\n        self._warning_type = warning_type\n        self._warning_key = WARNING_TYPES[self._warning_type][0]\n\n    @property\n    def is_on(self):\n        data = self._updater.ostrzezenia_pogodowe_output\n        return data is not None and data[self._warning_key] > 0\n\n    @property\n    def extra_state_attributes(self):\n        output = super().extra_state_attributes\n        if self.is_on:\n            data = self._updater.ostrzezenia_pogodowe_output\n            output['level'] = data[self._warning_key]\n            output['description'] = WARNING_DESCRIPTIONS[self._warning_type][data[self._warning_key]]\n            output['from'] = str(parse_datetime(data[self._warning_key + '_od_dnia'] + 'Z'))\n            output['to'] = str(parse_datetime(data[self._warning_key + '_do_dnia'] + 'Z'))\n        return output\n\n    @property\n    def icon(self):\n        return WARNING_TYPES[self._warning_type][2]\n\n    @property\n    def name(self):\n        return self._name + WARNING_TYPES[self._warning_type][1]\n\n\nclass BurzeDzisNetStormsNearbySensor(BurzeDzisNetSensor):\n    def __init__(self, entity_id, name, updater):\n        super().__init__(entity_id, name, updater)\n\n    @property\n    def is_on(self):\n        data = self._updater.szukaj_burzy_output\n        return data is not None and data['liczba'] > 0\n\n    @property\n    def extra_state_attributes(self):\n        output = super().extra_state_attributes\n        if self.is_on:\n            data = self._updater.szukaj_burzy_output\n            output['number'] = data['liczba']\n            output['distance'] = data['odleglosc']\n            output['direction'] = data['kierunek']\n            output['period'] = data['okres']\n        return output\n\n    @property\n    def name(self):\n        return self._name + STORM_NEARBY[0]\n\n    @property\n    def icon(self):\n        return STORM_NEARBY[1]\n\n\nclass BurzeDzisNetDataUpdater:\n    def __init__(self, hass, x, y, radius, api_key, scan_interval):\n        self._hass = hass\n        self._x = x\n        self._y = y\n        self._radius = radius\n        self._api_key = api_key\n        self.szukaj_burzy_output = None\n        self.ostrzezenia_pogodowe_output = None\n        self.async_update = Throttle(scan_interval)(self._async_update)\n\n    async def _async_update(self):\n        await self._hass.async_add_executor_job(self._update_data)\n\n    def _update_data(self):\n        from zeep import Client\n        from zeep.exceptions import Fault\n        service = Client('https://burze.dzis.net/soap.php?WSDL').service\n        try:\n            self.ostrzezenia_pogodowe_output = service.ostrzezenia_pogodowe(self._y, self._x, self._api_key)\n            self.szukaj_burzy_output = service.szukaj_burzy(self._y, self._x, self._radius, self._api_key)\n        except Fault as fault:\n            _LOGGER.error('Error setting up burze_dzis_net: {}', fault)\n"
  },
  {
    "path": "home-assistant/custom_components/burze_dzis_net/manifest.json",
    "content": "{\n  \"domain\": \"burze_dzis_net\",\n  \"name\": \"Burze.dzis.net\",\n  \"documentation\": \"https://github.com/PiotrMachowski/Home-Assistant-custom-components-Burze.dzis.net\",\n  \"issue_tracker\": \"https://github.com/PiotrMachowski/Home-Assistant-custom-components-Burze.dzis.net/issues\",\n  \"dependencies\": [],\n  \"codeowners\": [\"@PiotrMachowski\"],\n  \"requirements\": [\"zeep\"],\n  \"version\": \"v1.0.4\",\n  \"iot_class\": \"cloud_polling\"\n}"
  },
  {
    "path": "home-assistant/custom_components/car_wash/__init__.py",
    "content": "\"\"\"\nThe Car Wash binary sensor.\n\nFor more details about this platform, please refer to the documentation at\nhttps://github.com/Limych/ha-car_wash/\n\"\"\"\n"
  },
  {
    "path": "home-assistant/custom_components/car_wash/binary_sensor.py",
    "content": "#  Copyright (c) 2019-2021, Andrey \"Limych\" Khrolenok <andrey@khrolenok.ru>\n#  Creative Commons BY-NC-SA 4.0 International Public License\n#  (see LICENSE.md or https://creativecommons.org/licenses/by-nc-sa/4.0/)\n\"\"\"\nThe Car Wash binary sensor.\n\nFor more details about this platform, please refer to the documentation at\nhttps://github.com/Limych/ha-car_wash/\n\"\"\"\n\nimport logging\nfrom datetime import datetime\nfrom typing import Callable, Optional\n\nimport voluptuous as vol\nfrom homeassistant.components.binary_sensor import BinarySensorEntity\nfrom homeassistant.components.weather import (\n    ATTR_FORECAST,\n    ATTR_FORECAST_CONDITION,\n    ATTR_FORECAST_PRECIPITATION,\n    ATTR_FORECAST_TEMP,\n    ATTR_FORECAST_TEMP_LOW,\n    ATTR_FORECAST_TIME,\n    ATTR_WEATHER_TEMPERATURE,\n)\nfrom homeassistant.const import (\n    CONF_NAME,\n    CONF_UNIQUE_ID,\n    EVENT_HOMEASSISTANT_START,\n    TEMP_CELSIUS,\n)\nfrom homeassistant.core import HomeAssistant, callback\nfrom homeassistant.exceptions import HomeAssistantError\nfrom homeassistant.helpers import config_validation as cv\nfrom homeassistant.helpers.event import async_track_state_change\nfrom homeassistant.helpers.typing import ConfigType\nfrom homeassistant.util import dt as dt_util\nfrom homeassistant.util.temperature import convert as convert_temperature\n\nfrom .const import (\n    BAD_CONDITIONS,\n    CONF_DAYS,\n    CONF_WEATHER,\n    DEFAULT_DAYS,\n    DEFAULT_NAME,\n    DOMAIN,\n    ICON,\n    STARTUP_MESSAGE,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\n\nPLATFORM_SCHEMA = cv.PLATFORM_SCHEMA.extend(\n    {\n        vol.Required(CONF_WEATHER): cv.entity_id,\n        vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,\n        vol.Optional(CONF_DAYS, default=DEFAULT_DAYS): cv.positive_int,\n        vol.Optional(CONF_UNIQUE_ID): cv.string,\n    }\n)\n\n\n# pylint: disable=unused-argument\nasync def async_setup_platform(\n    hass: HomeAssistant,\n    config: ConfigType,\n    async_add_entities: Callable,\n    discovery_info=None,\n):\n    \"\"\"Set up the Car Wash sensor.\"\"\"\n    # Print startup message\n    _LOGGER.info(STARTUP_MESSAGE)\n\n    async_add_entities(\n        [\n            CarWashBinarySensor(\n                config.get(CONF_UNIQUE_ID),\n                config.get(CONF_NAME),\n                config.get(CONF_WEATHER),\n                config.get(CONF_DAYS),\n            )\n        ]\n    )\n\n\nclass CarWashBinarySensor(BinarySensorEntity):\n    \"\"\"Implementation of an Car Wash binary sensor.\"\"\"\n\n    def __init__(\n        self,\n        unique_id: Optional[str],\n        friendly_name: str,\n        weather_entity: str,\n        days: int,\n    ):\n        \"\"\"Initialize the sensor.\"\"\"\n        self._weather_entity = weather_entity\n        self._days = days\n\n        self._attr_should_poll = False  # No polling needed\n        self._attr_name = friendly_name\n        self._attr_is_on = None\n        self._attr_icon = ICON\n        self._attr_device_class = f\"{DOMAIN}__\"\n        #\n        self._attr_unique_id = (\n            DOMAIN + \"-\" + str(self._weather_entity).split(\".\")[1]\n            if unique_id == \"__legacy__\"\n            else unique_id\n        )\n\n    @property\n    def available(self) -> bool:\n        \"\"\"Return True if entity is available.\"\"\"\n        return self._attr_is_on is not None\n\n    async def async_added_to_hass(self):\n        \"\"\"Register callbacks.\"\"\"\n\n        # pylint: disable=unused-argument\n        @callback\n        def sensor_state_listener(entity, old_state, new_state):\n            \"\"\"Handle device state changes.\"\"\"\n            self.async_schedule_update_ha_state(True)\n\n        # pylint: disable=unused-argument\n        @callback\n        def sensor_startup(event):\n            \"\"\"Update template on startup.\"\"\"\n            async_track_state_change(\n                self.hass, [self._weather_entity], sensor_state_listener\n            )\n\n            self.async_schedule_update_ha_state(True)\n\n        self.hass.bus.async_listen_once(EVENT_HOMEASSISTANT_START, sensor_startup)\n\n    @staticmethod\n    def _temp2c(temperature: Optional[float], temperature_unit: str) -> Optional[float]:\n        \"\"\"Convert weather temperature to Celsius degree.\"\"\"\n        if temperature is not None and temperature_unit != TEMP_CELSIUS:\n            temperature = convert_temperature(\n                temperature, temperature_unit, TEMP_CELSIUS\n            )\n\n        return temperature\n\n    # pylint: disable=too-many-branches,too-many-statements\n    async def async_update(self):\n        \"\"\"Update the sensor state.\"\"\"\n        wdata = self.hass.states.get(self._weather_entity)\n\n        if wdata is None:\n            raise HomeAssistantError(\n                f\"Unable to find an entity called {self._weather_entity}\"\n            )\n\n        tmpu = self.hass.config.units.temperature_unit\n        temp = wdata.attributes.get(ATTR_WEATHER_TEMPERATURE)\n        cond = wdata.state\n        forecast = wdata.attributes.get(ATTR_FORECAST)\n\n        if forecast is None:\n            self._attr_is_on = None\n            raise HomeAssistantError(\n                \"Can't get forecast data! Are you sure it's the weather provider?\"\n            )\n\n        _LOGGER.debug(\"Current temperature %s, condition '%s'\", temp, cond)\n\n        temp = self._temp2c(temp, tmpu)\n\n        if cond in BAD_CONDITIONS:\n            _LOGGER.debug(\"Detected bad weather condition\")\n            self._attr_is_on = False\n            return\n\n        today = dt_util.start_of_local_day()\n        cur_date = today.strftime(\"%F\")\n        stop_date = datetime.fromtimestamp(\n            today.timestamp() + 86400 * (self._days + 1)\n        ).strftime(\"%F\")\n\n        _LOGGER.debug(\"Inspect weather forecast from now till %s\", stop_date)\n        for fcast in forecast:\n            fc_date = fcast.get(ATTR_FORECAST_TIME)\n            if isinstance(fc_date, int):\n                fc_date = dt_util.as_local(\n                    datetime.utcfromtimestamp(fc_date / 1000)\n                ).isoformat()\n            elif isinstance(fc_date, datetime):\n                fc_date = dt_util.as_local(fc_date).isoformat()\n            fc_date = fc_date[:10]\n            if fc_date < cur_date:\n                continue\n            if fc_date == stop_date:\n                break\n            _LOGGER.debug(\"Inspect weather forecast for %s\", fc_date)\n\n            prec = fcast.get(ATTR_FORECAST_PRECIPITATION)\n            cond = fcast.get(ATTR_FORECAST_CONDITION)\n            tmin = fcast.get(ATTR_FORECAST_TEMP_LOW)\n            tmax = fcast.get(ATTR_FORECAST_TEMP)\n            _LOGGER.debug(\n                \"Precipitation %s, Condition '%s',\"\n                \" Min temperature: %s, Max temperature %s\",\n                prec,\n                cond,\n                tmin,\n                tmax,\n            )\n\n            if prec and prec != \"null\":\n                _LOGGER.debug(\"Precipitation detected\")\n                self._attr_is_on = False\n                return\n            if cond in BAD_CONDITIONS:\n                _LOGGER.debug(\"Detected bad weather condition\")\n                self._attr_is_on = False\n                return\n            if tmin is not None and fc_date != cur_date:\n                tmin = self._temp2c(tmin, tmpu)\n                if temp < 0 <= tmin:\n                    _LOGGER.debug(\n                        \"Detected passage of temperature through melting point\"\n                    )\n                    self._attr_is_on = False\n                    return\n                temp = tmin\n            if tmax is not None:\n                tmax = self._temp2c(tmax, tmpu)\n                if temp < 0 <= tmax:\n                    _LOGGER.debug(\n                        \"Detected passage of temperature through melting point\"\n                    )\n                    self._attr_is_on = False\n                    return\n                temp = tmax\n\n        _LOGGER.debug(\"Inspection done. No bad forecast detected\")\n        self._attr_is_on = True\n"
  },
  {
    "path": "home-assistant/custom_components/car_wash/const.py",
    "content": "#  Copyright (c) 2019-2021, Andrey \"Limych\" Khrolenok <andrey@khrolenok.ru>\n#  Creative Commons BY-NC-SA 4.0 International Public License\n#  (see LICENSE.md or https://creativecommons.org/licenses/by-nc-sa/4.0/)\n\"\"\"\nThe Car Wash binary sensor.\n\nFor more details about this platform, please refer to the documentation at\nhttps://github.com/Limych/ha-car_wash/\n\"\"\"\n\nfrom homeassistant.components.weather import (\n    ATTR_CONDITION_EXCEPTIONAL,\n    ATTR_CONDITION_HAIL,\n    ATTR_CONDITION_LIGHTNING_RAINY,\n    ATTR_CONDITION_POURING,\n    ATTR_CONDITION_RAINY,\n    ATTR_CONDITION_SNOWY,\n    ATTR_CONDITION_SNOWY_RAINY,\n)\n\n# Base component constants\nNAME = \"Car Wash\"\nDOMAIN = \"car_wash\"\nVERSION = \"1.5.1\"\nISSUE_URL = \"https://github.com/Limych/ha-car_wash/issues\"\n\nSTARTUP_MESSAGE = f\"\"\"\n-------------------------------------------------------------------\n{NAME}\nVersion: {VERSION}\nThis is a custom integration!\nIf you have ANY issues with this you need to open an issue here:\n{ISSUE_URL}\n-------------------------------------------------------------------\n\"\"\"\n\n# Icons\nICON = \"mdi:car-wash\"\n\n# Configuration and options\nCONF_WEATHER = \"weather\"\nCONF_DAYS = \"days\"\n\n# Defaults\nDEFAULT_NAME = \"Car Wash\"\nDEFAULT_DAYS = 2\n\n\nBAD_CONDITIONS = [\n    ATTR_CONDITION_LIGHTNING_RAINY,\n    ATTR_CONDITION_RAINY,\n    ATTR_CONDITION_POURING,\n    ATTR_CONDITION_SNOWY,\n    ATTR_CONDITION_SNOWY_RAINY,\n    ATTR_CONDITION_HAIL,\n    ATTR_CONDITION_EXCEPTIONAL,\n]\n"
  },
  {
    "path": "home-assistant/custom_components/car_wash/manifest.json",
    "content": "{\n  \"domain\": \"car_wash\",\n  \"name\": \"Car Wash\",\n  \"version\": \"1.5.1\",\n  \"documentation\": \"https://github.com/Limych/ha-car_wash\",\n  \"issue_tracker\": \"https://github.com/Limych/ha-car_wash/issues\",\n  \"dependencies\": [\n    \"weather\"\n  ],\n  \"config_flow\": false,\n  \"codeowners\": [\n    \"@Limych\"\n  ],\n  \"requirements\": [],\n  \"iot_class\": \"calculated\"\n}\n"
  },
  {
    "path": "home-assistant/custom_components/car_wash/translations/binary_sensor.de.json",
    "content": "{\n  \"state\": {\n    \"car_wash__\": {\n      \"off\": \"Waschen sinnlos\",\n      \"on\": \"Jetzt waschen\"\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/car_wash/translations/binary_sensor.en.json",
    "content": "{\n  \"state\": {\n    \"car_wash__\": {\n      \"off\": \"Should not wash\",\n      \"on\": \"Worth wash\"\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/car_wash/translations/binary_sensor.it.json",
    "content": "{\n  \"state\": {\n    \"car_wash__\": {\n      \"off\": \"Lavaggio sconsigliato\",\n      \"on\": \"Procedi al lavaggio\"\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/car_wash/translations/binary_sensor.pl.json",
    "content": "{\n  \"state\": {\n    \"car_wash__\": {\n      \"off\": \"Nie należy myć\",\n      \"on\": \"Warto umyć\"\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/car_wash/translations/binary_sensor.ru.json",
    "content": "{\n  \"state\": {\n    \"car_wash__\": {\n      \"off\": \"Нет смысла мыть\",\n      \"on\": \"Стоит помыть\"\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/car_wash/translations/binary_sensor.uk.json",
    "content": "{\n  \"state\": {\n    \"car_wash__\": {\n      \"off\": \"Не варто мити\",\n      \"on\": \"Варто помити\"\n    }\n  }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/cracow_air_quality/__init__.py",
    "content": "\n__version__ = '1.0.0'"
  },
  {
    "path": "home-assistant/custom_components/cracow_air_quality/sensor.py",
    "content": "import logging\nimport json\nfrom datetime import datetime, timedelta\nimport voluptuous as vol\nimport homeassistant.helpers.config_validation as cv\nfrom requests import (Request, Session)\n\n_LOGGER = logging.getLogger(__name__)\nfrom homeassistant.helpers.entity import Entity\nfrom homeassistant.components.sensor import PLATFORM_SCHEMA\nfrom homeassistant.util import Throttle\nfrom homeassistant.const import (CONF_NAME)\nCONF_STATION_ID = 'station_id'\n\nDEFAULT_NAME = 'Cracow Air Quality'\n\nPLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({\n  vol.Required(CONF_STATION_ID): cv.string,\n  vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string\n})\n\nclass AirQualityData(object):\n  def __init__(self, stationId):\n    self.stationId = stationId\n    self.table = {}\n    self.update = Throttle(timedelta(minutes=30))(self._update)\n\n  def _update(self):\n    try:\n      data_request = Request(\n        \"POST\", \n        \"http://monitoring.krakow.pios.gov.pl/dane-pomiarowe/pobierz\", \n        data=self._body()\n      ).prepare()\n      _LOGGER.info(\"Downloading sensor inforamtion\")\n      with Session() as sess:\n        response = sess.send(data_request, timeout=10)\n        data = json.loads(response.text)['data']\n        temp_table = {}\n        for metric in data['series']:\n          temp_table[metric['paramId']] = metric\n        self.table = temp_table\n    except Exception as e:\n      _LOGGER.error(e)\n    \n  def get(self, key):\n    return self.table.get(key, {})\n\n  def _body(self):\n    return {\n      'query': json.dumps({\n        'measType': 'Auto',\n        'viewType': 'Station',\n        'viewTypeEntityId': self.stationId,\n        'channels': [49,54,61,57,211,53,50,55],\n        'dateRange': 'Day',\n        'date': datetime.now().strftime(\"%d.%m.%Y\")\n      })\n    }\n\nclass AirCracowQualitySensor(Entity):\n  def __init__(self, data, metric_type, name):\n    self.metric_type = metric_type\n    self.data = data\n    self._friendly_name = self.get('paramLabel')\n    self._name = \"{}_{}\".format(name,metric_type)\n    self._state = 0\n    self._unit = None\n\n  @property\n  def friendly_name(self):\n    return self._friendly_name\n\n  @property\n  def name(self):\n    return self._name\n\n  @property\n  def state(self):\n    return self._state\n\n  @property\n  def unit_of_measurement(self):\n    return self._unit\n\n  @property\n  def icon(self):\n    return \"mdi:skull\"\n\n  def get(self, key):\n    return self.data.get(self.metric_type).get(key)\n\n  def update(self):\n    try:\n      self.data.update()\n      self._unit = self.get('unit')\n      self._state = self.get('data')[-1][1]\n    except Exception as e:\n      _LOGGER.error(\"Could not update sensor!\")\n      _LOGGER.error(e)\n    \n\ndef setup_platform(hass, config, add_devices, discovery_info=None):\n  stationId = config.get(CONF_STATION_ID)\n  name = config.get(CONF_NAME)\n  data = AirQualityData(stationId)\n  data.update()\n\n  sensors = []\n  for metric_type in data.table:\n    _LOGGER.info(\"Adding sensor: {}\".format(metric_type))\n    sensors.append(AirCracowQualitySensor(data, metric_type, name))\n  add_devices(sensors, True)\n"
  },
  {
    "path": "home-assistant/custom_components/emby_upcoming_media/__init__.py",
    "content": ""
  },
  {
    "path": "home-assistant/custom_components/emby_upcoming_media/client.py",
    "content": "\"\"\"Client.\"\"\"\nimport datetime\nimport requests\nimport logging\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass EmbyClient:\n    \"\"\"Client class\"\"\"\n\n    def __init__(self, host, api_key, ssl, port, max_items, user_id):\n        \"\"\"Init.\"\"\"\n        self.data = {}\n        self.host = host\n        self.ssl = \"s\" if ssl else \"\"\n        self.port = port\n        self.api_key = api_key\n        self.user_id = user_id\n        self.max_items = max_items\n\n    def get_view_categories(self):\n        \"\"\"This will pull the list of all View Categories on Emby\"\"\"\n        try:\n            url = \"http{0}://{1}:{2}/Users/{3}/Views\".format(\n                self.ssl, self.host, self.port, self.user_id\n            )\n            _LOGGER.info(\"Making API call on URL %s\", url)\n            api = requests.get(url, timeout=10)\n        except OSError:\n            _LOGGER.warning(\"Host %s is not available\", self.host)\n            self._state = \"%s cannot be reached\" % self.host\n            return\n\n        if api.status_code == 200:\n            self.data[\"ViewCategories\"] = api.json()[\"Items\"]\n\n        else:\n            _LOGGER.info(\"Could not reach url %s\", url)\n            self._state = \"%s cannot be reached\" % self.host\n\n        return self.data[\"ViewCategories\"]\n\n    def get_data(self, categoryId):\n        try:\n            url = \"http{0}://{1}:{2}/Users/{3}/Items/Latest?Limit={4}&Fields=CommunityRating,Studios,PremiereDate,Genres,DateCreated&ParentId={5}&api_key={6}&GroupItems=false\".format(\n                self.ssl,\n                self.host,\n                self.port,\n                self.user_id,\n                self.max_items,\n                categoryId,\n                self.api_key,\n            )\n            _LOGGER.info(\"Making API call on URL %s\", url)\n            api = requests.get(url, timeout=10)\n        except OSError:\n            _LOGGER.warning(\"Host %s is not available\", self.host)\n            self._state = \"%s cannot be reached\" % self.host\n            return\n\n        if api.status_code == 200:\n            self._state = \"Online\"\n            self.data[categoryId] = api.json()[: self.max_items]\n\n        else:\n            _LOGGER.info(\"Could not reach url %s\", url)\n            self._state = \"%s cannot be reached\" % self.host\n            return\n\n        return self.data[categoryId]\n\n    def get_image_url(self, itemId, imageType):\n        url = \"http{0}://{1}:{2}/Items/{3}/Images/{4}?maxHeight=360&maxWidth=640&quality=90\".format(\n            self.ssl, self.host, self.port, itemId, imageType\n        )\n        return url\n"
  },
  {
    "path": "home-assistant/custom_components/emby_upcoming_media/manifest.json",
    "content": "{\n  \"domain\": \"emby_upcoming_media\",\n  \"name\": \"Emby Latest Media\",\n  \"documentation\": \"https://github.com/gcorgnet/sensor.emby_upcoming_media\",\n  \"dependencies\": [],\n  \"codeowners\": [\n    \"@gcorgnet\"\n  ],\n  \"requirements\": [\"python-dateutil\"],\n  \"version\": \"0.3.5\"\n}\n"
  },
  {
    "path": "home-assistant/custom_components/emby_upcoming_media/sensor.py",
    "content": "\"\"\"\nHome Assistant component to feed the Upcoming Media Lovelace card with\nEmby Latest Media.\n\nhttps://github.com/gcorgnet/sensor.emby_upcoming_media\n\nhttps://github.com/custom-cards/upcoming-media-card\n\n\"\"\"\nimport logging\nimport json\nimport time\nimport re\nimport requests\nimport dateutil.parser\nfrom datetime import date, datetime\nfrom datetime import timedelta\nimport voluptuous as vol\nfrom itertools import groupby\nimport homeassistant.helpers.config_validation as cv\nfrom homeassistant.components.sensor import PLATFORM_SCHEMA\nfrom homeassistant.components import sensor\nfrom homeassistant.const import CONF_API_KEY, CONF_HOST, CONF_PORT, CONF_SSL\nfrom homeassistant.helpers.entity import Entity\n\nfrom .client import EmbyClient\n\n__version__ = \"0.0.1\"\n\nDOMAIN = \"emby_upcoming_media\"\nDOMAIN_DATA = f\"{DOMAIN}_data\"\nATTRIBUTION = \"Data is provided by Emby.\"\n\nDICT_LIBRARY_TYPES = {\"tvshows\": \"TV Shows\", \"movies\": \"Movies\"}\n\n# Configuration\nCONF_SENSOR = \"sensor\"\nCONF_ENABLED = \"enabled\"\nCONF_NAME = \"name\"\nCONF_INCLUDE = \"include\"\nCONF_MAX = \"max\"\nCONF_USER_ID = \"user_id\"\nCONF_USE_BACKDROP = \"use_backdrop\"\nCONF_GROUP_LIBRARIES = \"group_libraries\"\n\nCATEGORY_NAME = \"CategoryName\"\nCATEGORY_ID = \"CategoryId\"\nCATEGORY_TYPE = \"CollectionType\"\n\n\nSCAN_INTERVAL_SECONDS = 3600  # Scan once per hour\n\nTV_DEFAULT = {\"title_default\": \"$title\", \"line1_default\": \"$episode\", \"line2_default\": \"$release\", \"line3_default\": \"$rating - $runtime\", \"line4_default\": \"$number - $studio\", \"icon\": \"mdi:arrow-down-bold\"}\nMOVIE_DEFAULT = {\"title_default\": \"$title\", \"line1_default\": \"$release\", \"line2_default\": \"$genres\", \"line3_default\": \"$rating - $runtime\", \"line4_default\": \"$studio\", \"icon\": \"mdi:arrow-down-bold\"}\nOTHER_DEFAULT = {\"title_default\": \"$title\", \"line1_default\": \"$number - $studio\", \"line2_default\": \"$aired\", \"line3_default\": \"$episode\", \"line4_default\": \"$rating - $runtime\", \"icon\": \"mdi:arrow-down-bold\"}\n\n_LOGGER = logging.getLogger(__name__)\n\nPLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(\n    {\n        vol.Optional(CONF_API_KEY): cv.string,\n        vol.Optional(CONF_USER_ID): cv.string,\n        vol.Optional(CONF_HOST, default=\"localhost\"): cv.string,\n        vol.Optional(CONF_PORT, default=8096): cv.port,\n        vol.Optional(CONF_SSL, default=False): cv.boolean,\n        vol.Optional(CONF_INCLUDE, default=[]): vol.All(cv.ensure_list),\n        vol.Optional(CONF_MAX, default=5): cv.Number,\n        vol.Optional(CONF_USE_BACKDROP, default=False): cv.boolean,\n        vol.Optional(CONF_GROUP_LIBRARIES, default=False): cv.boolean\n    }\n)\n\n\ndef setup_platform(hass, config, add_devices, discovery_info=None):\n\n    # Create DATA dict\n    hass.data[DOMAIN_DATA] = {}\n\n    # Get \"global\" configuration.\n    api_key = config.get(CONF_API_KEY)\n    host = config.get(CONF_HOST)\n    ssl = config.get(CONF_SSL)\n    port = config.get(CONF_PORT)\n    max_items = config.get(CONF_MAX)\n    user_id = config.get(CONF_USER_ID)\n    include = config.get(CONF_INCLUDE)\n\n    # Configure the client.\n    client = EmbyClient(host, api_key, ssl, port, max_items, user_id)\n    hass.data[DOMAIN_DATA][\"client\"] = client\n\n    categories = client.get_view_categories()\n    \n    categories = filter(lambda el: 'CollectionType' in el.keys() and el[\"CollectionType\"] in DICT_LIBRARY_TYPES.keys(), categories) #just include supported library types (movie/tv)\n\n    if include != []:\n        categories = filter(lambda el: el[\"Name\"] in include, categories)\n            \n    if config.get(CONF_GROUP_LIBRARIES) == True:\n        l=[list(y) for x,y in groupby(sorted(list(categories),key=lambda x: (x['CollectionType'])),lambda x: (x['CollectionType']))]\n        categories = [{k:(v if k!='Id' else list(set([x['Id'] for x in i]))) for k,v in i[0].items()} for i in l]\n\n    mapped = map(\n        lambda cat: EmbyUpcomingMediaSensor(\n            hass, {**config, CATEGORY_NAME: cat[\"Name\"], CATEGORY_ID: cat[\"Id\"], CATEGORY_TYPE: DICT_LIBRARY_TYPES[cat[\"CollectionType\"]]}\n        ),\n        categories,\n    )\n\n    add_devices(mapped, True)\n\n\nSCAN_INTERVAL = timedelta(seconds=SCAN_INTERVAL_SECONDS)\n\n\nclass EmbyUpcomingMediaSensor(Entity):\n    def __init__(self, hass, conf):\n        self._client = hass.data[DOMAIN_DATA][\"client\"]\n        self._state = None\n        self.data = []\n        self.use_backdrop = conf.get(CONF_USE_BACKDROP)\n        self.category_name = (conf.get(CATEGORY_TYPE) if conf.get(CONF_GROUP_LIBRARIES) == True else conf.get(CATEGORY_NAME))\n        self.category_id = conf.get(CATEGORY_ID)\n        self.friendly_name = \"Emby Latest Media \" + self.category_name\n        self.entity_id = sensor.ENTITY_ID_FORMAT.format(\n            \"emby_latest_\"\n            + re.sub(\n                \"\\_$\", \"\", re.sub(\"\\W+\", \"_\", self.category_name)\n            ).lower()  # remove special characters\n        )\n\n    @property\n    def name(self):\n        return \"Latest {0} on Emby\".format(self.category_name)\n\n    @property\n    def state(self):\n        return self._state\n\n    def handle_tv_show(self):\n        \"\"\"Return the state attributes.\"\"\"\n\n        attributes = {}\n        default = TV_DEFAULT\n        card_json = []\n\n        card_json.append(default)\n\n        for show in self.data:\n\n            card_item = {}\n            card_item[\"title\"] = show[\"SeriesName\"]\n            card_item['episode'] = show.get('Name', '')\n\n            card_item[\"airdate\"] = show.get(\"PremiereDate\", datetime.now().isoformat())\n\n            if \"RunTimeTicks\" in show:\n                timeobject = timedelta(microseconds=show[\"RunTimeTicks\"] / 10)\n                card_item[\"runtime\"] = timeobject.total_seconds() / 60\n            else:\n                card_item[\"runtime\"] = \"\"\n\n            if \"ParentIndexNumber\" and \"IndexNumber\" in show:\n                card_item[\"number\"] = \"S{:02d}E{:02d}\".format(\n                    show[\"ParentIndexNumber\"], show[\"IndexNumber\"]\n                )\n\n            if \"ParentBackdropItemId\" in show:\n                card_item[\"poster\"] = self.hass.data[DOMAIN_DATA][\"client\"].get_image_url(\n                    show[\"ParentBackdropItemId\"], \"Backdrop\" if self.use_backdrop else \"Primary\"\n                )\n\n            if \"CommunityRating\" in show:\n                card_item[\"rating\"] = \"%s %s\" % (\n                    \"\\u2605\",  # Star character\n                    show.get(\"CommunityRating\", \"\"),\n                )\n\n            card_json.append(card_item)\n\n        attributes[\"data\"] = json.dumps(card_json)\n        attributes[\"attribution\"] = ATTRIBUTION\n\n        return attributes\n\n    def handle_movie(self):\n        \"\"\"Return the state attributes.\"\"\"\n\n        attributes = {}\n        default = MOVIE_DEFAULT\n        card_json = []\n\n        card_json.append(default)\n\n        for show in self.data:\n\n            card_item = {}\n            card_item[\"title\"] = show[\"Name\"]\n\n            card_item[\"officialrating\"] = show.get(\"OfficialRating\", \"\")\n\n            if \"PremiereDate\" in show:\n                card_item[\"release\"] = dateutil.parser.isoparse(show.get(\"PremiereDate\", \"\")).year\n\n            card_item[\"airdate\"] = datetime.now().isoformat()\n\n            if \"Studios\" in show and len(show[\"Studios\"]) > 0:\n                card_item[\"studio\"] = show[\"Studios\"][0][\"Name\"]\n\n\n            if \"Genres\" in show:\n                card_item[\"genres\"] = \", \".join(show[\"Genres\"])\n\n            if \"RunTimeTicks\" in show:\n                timeobject = timedelta(microseconds=show[\"RunTimeTicks\"] / 10)\n                card_item[\"runtime\"] = timeobject.total_seconds() / 60\n            else:\n                card_item[\"runtime\"] = \"\"\n\n            card_item[\"poster\"] = self.hass.data[DOMAIN_DATA][\"client\"].get_image_url(\n                show[\"Id\"], \"Backdrop\" if self.use_backdrop else \"Primary\"\n            )\n\n            card_item[\"rating\"] = \"%s %s\" % (\n                \"\\u2605\",  # Star character\n                show.get(\"CommunityRating\", \"\"),\n            )\n\n            card_json.append(card_item)\n\n        attributes[\"data\"] = json.dumps(card_json)\n        attributes[\"attribution\"] = ATTRIBUTION\n\n        return attributes\n\n    @property\n    def extra_state_attributes(self):\n        \"\"\"Return the state attributes.\"\"\"\n\n        attributes = {}\n        default = OTHER_DEFAULT\n        card_json = []\n\n        if len(self.data) == 0:\n            return attributes\n        elif self.data[0][\"Type\"] == \"Episode\":\n            return self.handle_tv_show()\n        elif self.data[0][\"Type\"] == \"Movie\":\n            return self.handle_movie()\n        else:\n            card_json.append(default)\n\n            # for show in self.data[self._category_id]:\n            for show in self.data:\n\n                card_item = {}\n                card_item[\"title\"] = show[\"Name\"]\n\n                card_item[\"episode\"] = show.get(\"OfficialRating\", \"\")\n                card_item[\"officialrating\"] = show.get(\"OfficialRating\", \"\")\n\n                card_item[\"airdate\"] = show.get(\"PremiereDate\", datetime.now().isoformat())\n\n                if \"RunTimeTicks\" in show:\n                    timeobject = timedelta(microseconds=show[\"RunTimeTicks\"] / 10)\n                    card_item[\"runtime\"] = timeobject.total_seconds() / 60\n                else:\n                    card_item[\"runtime\"] = \"\"\n\n                if \"ParentIndexNumber\" in show and \"IndexNumber\" in show:\n                    card_item[\"number\"] = \"S{:02d}E{:02d}\".format(\n                        show[\"ParentIndexNumber\"], show[\"IndexNumber\"]\n                    )\n                else:\n                    card_item[\"number\"] = show.get(\"ProductionYear\", \"\")\n\n                card_item[\"poster\"] = self.hass.data[DOMAIN_DATA][\"client\"].get_image_url(\n                    show[\"Id\"], \"Backdrop\" if self.use_backdrop else \"Primary\"\n                )\n\n                card_item[\"rating\"] = \"%s %s\" % (\n                    \"\\u2605\",  # Star character\n                    show.get(\"CommunityRating\", \"\"),\n                )\n\n                card_json.append(card_item)\n\n            attributes[\"data\"] = json.dumps(card_json)\n            attributes[\"attribution\"] = ATTRIBUTION\n\n        return attributes\n\n    def update(self):\n        if isinstance(self.category_id, str): \n            data = self._client.get_data(self.category_id)\n        else:\n            data = []\n            for element in self.category_id:\n                for res in self._client.get_data(element):\n                    data.append(res)\n            data.sort(key=lambda item:item['DateCreated'], reverse=True) #as we added all libraries we now resort to get the newest at top\n\n        if data is not None:\n            self._state = \"Online\"\n            self.data = data\n        else:\n            self._state = \"error\"\n            _LOGGER.error(\"ERROR\")\n"
  },
  {
    "path": "home-assistant/custom_components/google_geocode/README.md",
    "content": "# Google Geocode\n\nThis component has been created to be used with Home Assistant.\n\nGoogle geocode is the process of converting device tracker location into a human-readable address.\n\nThe sensor will update the address each time the device tracker location changes. If the device tracker is in a zone it will display the zone.\n\n### Installation:\n\nCopy the manifest.json file and place it in <config_dir>/custom_components/google_geocode/manifest.json\n\nCopy the sensor.py file and place it in <config_dir>/custom_components/google_geocode/sensor.py\n\n### Example Screenshot:\n![alt text](https://github.com/michaelmcarthur/GoogleGeocode-HASS/blob/master/Google_Geocode_Screenshot.png \"Screenshot\")\n\n### Example entry for configuration.yaml\n```\nsensor:\n\n  - platform: google_geocode\n    origin: device_tracker.mobile_phone\n```\n### Configuration variables:\n\norigin (Required): Tracking can be setup to track entity type device_tracker. The component updates it will use the latest location of that entity and update the sensor.\n\nname (Optional): A name to display on the sensor. The default is “Google Geocode\"\n\noptions (Optional): Select what level of address information you want. Choices are 'street_number', 'street', 'city', 'county', 'state', 'postal_code', 'country' or 'formatted_address'. You can use any combination of these options, separate each option with a comma. The default is “street, city\"\n\ndisplay_zone (Optional): Choose to display a zone when in a zone. Choices are 'show' or 'hide'. The default is 'show'\n\ngravatar (Optional): An email address for the device’s owner. You can set up a Gravatar [here.](https://gravatar.com) If provided, it will override `picture` The default is 'none'\n\napi_key (Optional): Your application’s API key (get one by following the instructions below). This key identifies your application for purposes of quota management. Most users will not need to use this unless multiple sensors are created.\n\nYou need to register for an API key to use Google Geocode. This can be done by following these instructions\n* Go to [Google Maps Platform API](https://cloud.google.com/maps-platform/#get-started)\n* Click on 'Get Started'\n* Select 'Maps' and 'Places' then click 'continue'\n* Create a new project or select an existing one then click 'next'.\n* Clcik 'Create Billing Account'\n* Create a name for the account then click 'Continue'\n* Confirm your Country then click 'Confirm'\n* Fill in your detail the click 'Submit and enable billing'\n* To Emable your API's Click 'Next'\n* Copy your API key.\n\n\n### Example with optional entry for configuration.yaml\n```\n- platform: google_geocode\n  name: michael\n  origin: device_tracker.mobile_phone\n  options: street_number, street, city\n  display_zone: hide\n  gravatar: youremail@address.com\n  api_key: XXXX_XXXXX_XXXXX\n```\n"
  },
  {
    "path": "home-assistant/custom_components/google_geocode/google_geocode.markdown",
    "content": "---\nlayout: page\ntitle: \"Google Geocode\"\ndescription: \"Convert device tracker location into a human-readable address.\"\ndate: 2017-07-30 11:00\nsidebar: true\ncomments: false\nsharing: true\nfooter: true\nlogo: google_maps.png\nha_category: Sensor\nha_iot_class: \"Cloud Polling\"\nha_release: 0.6\n---\n\n\n\nThe `google_geocode` sensor converts device tracker location into a human-readable address.\n\nThe sensor will update the address each time the device tracker location changes. If the device tracker is in a zone it will display the zone.\n\n### Example Screenshot:\n![alt text](https://github.com/michaelmcarthur/GoogleGeocode-HASS/blob/master/Google_Geocode_Screenshot.png \"Screenshot\")\n\n### Example entry for configuration.yaml\n```\nsensor:\n  - platform: google_geocode\n    origin: device_tracker.mobile_phone\n```\n### Configuration variables:\n\norigin (Required): Tracking can be setup to track entity type device_tracker. The component updates it will use the latest location of that entity and update the sensor.\n\nname (Optional): A name to display on the sensor. The default is “Google Geocode\"\n\noptions (Optional): Select what level of address information you want. Choices are 'street_number', 'street', 'city', 'county', 'state', 'postal_code', 'country' or 'formatted_address'. You can use any combination of these options, separate each option with a comma. The default is “street, city\"\n\ndisplay_zone (Optional): Choose to display a zone when in a zone. Choices are 'show' or 'hide'. The default is “show\"\n\n### Example with optional entry for configuration.yaml\n```\n- platform: google_geocode\n  name: michael\n  origin: device_tracker.mobile_phone\n  options: street_number, street, city\n  display_zone: hide\n```\n\nPowered by [Google Maps](http://www.google.com/maps/)\n"
  },
  {
    "path": "home-assistant/custom_components/google_geocode/manifest.json",
    "content": "{\n  \"domain\": \"google_geocode\",\n  \"name\": \"Google Geocode\",\n  \"documentation\": \"https://github.com/michaelmcarthur/GoogleGeocode-HASS\",\n  \"dependencies\": [],\n  \"codeowners\": [],\n  \"requirements\": []\n}\n"
  },
  {
    "path": "home-assistant/custom_components/google_geocode/sensor.py",
    "content": "\"\"\"\nSupport for Google Geocode sensors.\n\nFor more details about this platform, please refer to the documentation at\nhttps://github.com/michaelmcarthur/GoogleGeocode-HASS\n\"\"\"\nfrom datetime import datetime\nfrom datetime import timedelta \nimport logging\nimport json\nimport requests\nfrom requests import get\n\nimport voluptuous as vol\n\nfrom homeassistant.components.sensor import PLATFORM_SCHEMA\nfrom homeassistant.const import (\n    CONF_API_KEY, CONF_NAME, CONF_SCAN_INTERVAL, ATTR_ATTRIBUTION, ATTR_LATITUDE, ATTR_LONGITUDE)\nimport homeassistant.helpers.location as location\nfrom homeassistant.util import Throttle\nfrom homeassistant.helpers.entity import Entity\nimport homeassistant.helpers.config_validation as cv\n\n_LOGGER = logging.getLogger(__name__)\n\nCONF_ORIGIN = 'origin'\nCONF_OPTIONS = 'options'\nCONF_DISPLAY_ZONE = 'display_zone'\nCONF_ATTRIBUTION = \"Data provided by maps.google.com\"\nCONF_GRAVATAR = 'gravatar'\n\nATTR_STREET_NUMBER = 'Street Number'\nATTR_STREET = 'Street'\nATTR_CITY = 'City'\nATTR_POSTAL_TOWN = 'Postal Town'\nATTR_POSTAL_CODE = 'Postal Code'\nATTR_REGION = 'State'\nATTR_COUNTRY = 'Country'\nATTR_COUNTY = 'County'\nATTR_FORMATTED_ADDRESS = 'Formatted Address'\n\nDEFAULT_NAME = 'Google Geocode'\nDEFAULT_OPTION = 'street, city'\nDEFAULT_DISPLAY_ZONE = 'display'\nDEFAULT_KEY = 'no key'\ncurrent = '0,0'\nzone_check = 'a'\nSCAN_INTERVAL = timedelta(seconds=60)\n\nPLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({\n    vol.Required(CONF_ORIGIN): cv.string,\n    vol.Optional(CONF_API_KEY, default=DEFAULT_KEY): cv.string,\n    vol.Optional(CONF_OPTIONS, default=DEFAULT_OPTION): cv.string,\n    vol.Optional(CONF_DISPLAY_ZONE, default=DEFAULT_DISPLAY_ZONE): cv.string,\n    vol.Optional(CONF_GRAVATAR, default=None): vol.Any(None, cv.string),\n    vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,\n    vol.Optional(CONF_SCAN_INTERVAL, default=SCAN_INTERVAL):\n        cv.time_period,\n})\n\nTRACKABLE_DOMAINS = ['device_tracker', 'sensor', 'person']\n\ndef setup_platform(hass, config, add_devices, discovery_info=None):\n    \"\"\"Setup the sensor platform.\"\"\"\n    name = config.get(CONF_NAME)\n    api_key = config.get(CONF_API_KEY)\n    origin = config.get(CONF_ORIGIN)\n    options = config.get(CONF_OPTIONS)\n    display_zone = config.get(CONF_DISPLAY_ZONE)\n    gravatar = config.get(CONF_GRAVATAR) \n\n    add_devices([GoogleGeocode(hass, origin, name, api_key, options, display_zone, gravatar)])\n\n\nclass GoogleGeocode(Entity):\n    \"\"\"Representation of a Google Geocode Sensor.\"\"\"\n\n    def __init__(self, hass, origin, name, api_key, options, display_zone, gravatar):\n        \"\"\"Initialize the sensor.\"\"\"\n        self._hass = hass\n        self._name = name\n        self._api_key = api_key\n        self._options = options.lower()\n        self._display_zone = display_zone.lower()\n        self._state = \"Awaiting Update\"\n        self._gravatar = gravatar\n\n        self._street_number = None\n        self._street = None\n        self._city = None\n        self._postal_town = None\n        self._postal_code = None\n        self._city = None\n        self._region = None\n        self._country = None\n        self._county = None\n        self._formatted_address = None\n        self._zone_check_current = None\n\n        # Check if origin is a trackable entity\n        if origin.split('.', 1)[0] in TRACKABLE_DOMAINS:\n            self._origin_entity_id = origin\n        else:\n            self._origin = origin\n\n        if gravatar is not None:\n            self._picture = self._get_gravatar_for_email(gravatar)\n        else:\n            self._picture = None\n\n    @property\n    def name(self):\n        \"\"\"Return the name of the sensor.\"\"\"\n        return self._name\n\n    @property\n    def state(self):\n        \"\"\"Return the state of the sensor.\"\"\"\n        return self._state\n\n    @property\n    def entity_picture(self):\n        \"\"\"Return the picture of the device.\"\"\"\n        return self._picture\n        \n    @property\n    def device_state_attributes(self):\n        \"\"\"Return the state attributes.\"\"\"\n        return{\n            ATTR_STREET_NUMBER: self._street_number,\n            ATTR_STREET: self._street,\n            ATTR_CITY: self._city,\n            ATTR_POSTAL_TOWN: self._postal_town,\n            ATTR_POSTAL_CODE: self._postal_code,\n            ATTR_REGION: self._region,\n            ATTR_COUNTRY: self._country,\n            ATTR_COUNTY: self._county,\n            ATTR_ATTRIBUTION: CONF_ATTRIBUTION,\n            ATTR_FORMATTED_ADDRESS: self._formatted_address,\n        }\n\n    @Throttle(SCAN_INTERVAL)\n    def update(self):\n        \"\"\"Get the latest data and updates the states.\"\"\"\n\n        if hasattr(self, '_origin_entity_id'):\n            self._origin = self._get_location_from_entity(\n                self._origin_entity_id\n            )\n\n        \"\"\"Update if location has changed.\"\"\"\n\n        global current\n        global zone_check_count\n        global zone_check\n        global user_display\n        zone_check = self.hass.states.get(self._origin_entity_id).state\n        zone_check_count = 2\n\n        if zone_check == self._zone_check_current:\n            zone_check_count = 1\n        if zone_check == 'not_home':\n            zone_check_count = 2\n        if zone_check_count == 1:\n            pass\n        elif self._origin == None:\n            pass\n        elif current == self._origin:\n            pass\n        else:\n            _LOGGER.info(\"google request sent\")\n            self._zone_check_current = self.hass.states.get(self._origin_entity_id).state\n            zone_check_count = 2\n            lat = self._origin\n            current = lat\n            self._reset_attributes()\n            if self._api_key == 'no key':\n                url = \"https://maps.google.com/maps/api/geocode/json?latlng=\" + lat\n            else:\n                url = \"https://maps.googleapis.com/maps/api/geocode/json?latlng=\" + lat + \"&key=\" + self._api_key\n            response = get(url)\n            json_input = response.text\n            decoded = json.loads(json_input)\n            street_number = ''\n            street = 'Unnamed Road'\n            alt_street = 'Unnamed Road'\n            city = ''\n            postal_town = ''\n            formatted_address = ''\n            state = ''\n            county = ''\n            country = ''\n\n\n            \n            for result in decoded[\"results\"]:\n                for component in result[\"address_components\"]:\n                    if 'street_number' in component[\"types\"]:\n                        street_number = component[\"long_name\"]\n                        self._street_number = street_number\n                    if 'route' in component[\"types\"]:\n                        street = component[\"long_name\"]\n                        self._street = street\n                    if 'sublocality_level_1' in component[\"types\"]:\n                        alt_street = component[\"long_name\"]\n                    if 'postal_town' in component[\"types\"]:\n                        postal_town = component[\"long_name\"]\n                        self._postal_town = postal_town\n                    if 'locality' in component[\"types\"]:\n                        city = component[\"long_name\"]\n                        self._city = city\n                    if 'administrative_area_level_1' in component[\"types\"]:\n                        state = component[\"long_name\"]\n                        self._region = state\n                    if 'administrative_area_level_2' in component[\"types\"]:\n                        county = component[\"long_name\"]\n                        self._county = county\n                    if 'country' in component[\"types\"]:\n                        country = component[\"long_name\"]\n                        self._country = country\n                    if 'postal_code' in component[\"types\"]:\n                        postal_code = component[\"long_name\"]\n                        self._postal_code = postal_code\n\n            try:\n                if 'formatted_address' in decoded['results'][0]:\n                    formatted_address = decoded['results'][0]['formatted_address']\n                    self._formatted_address = formatted_address\n            except IndexError:\n                pass\n\n            if 'error_message' in decoded:\n                self._state = decoded['error_message']\n                _LOGGER.error(\"You have exceeded your daily requests or entered a incorrect key please create or check the api key.\")\n            elif self._display_zone == 'hide' or zone_check == \"not_home\":\n                if street == 'Unnamed Road':\n                    street = alt_street\n                    self._street = alt_street\n                if city == '':\n                    city = postal_town\n                    if city == '':\n                        city = county\n\n                display_options = self._options\n                user_display = []\n\n                if \"street_number\" in display_options:\n                    user_display.append(street_number)\n                if \"street\" in display_options:\n                    user_display.append(street)\n                if \"city\" in display_options:\n                    self._append_to_user_display(city)\n                if \"county\" in display_options:\n                    self._append_to_user_display(county)\n                if \"state\" in display_options:\n                    self._append_to_user_display(state)\n                if \"postal_code\" in display_options:\n                    self._append_to_user_display(postal_code)\n                if \"country\" in display_options:\n                    self._append_to_user_display(country)\n                if \"formatted_address\" in display_options:\n                    self._append_to_user_display(formatted_address)\n                        \n                user_display = ', '.join(  x for x in user_display )\n                \n                if user_display == '':\n                    user_display = street\n                self._state = user_display\n            else:\n                self._state = zone_check[0].upper() + zone_check[1:]\n\n    def _get_location_from_entity(self, entity_id):\n        \"\"\"Get the origin from the entity state or attributes.\"\"\"\n        entity = self._hass.states.get(entity_id)\n\n        if entity is None:\n            _LOGGER.error(\"Unable to find entity %s\", entity_id)\n            return None\n\n        # Check if the entity has origin attributes\n        if location.has_location(entity):\n            return self._get_location_from_attributes(entity)\n\n        # When everything fails just return nothing\n        return None\n\n    def _reset_attributes(self):\n        \"\"\"Resets attributes.\"\"\"\n        self._street = None\n        self._street_number = None\n        self._city = None\n        self._postal_town = None\n        self._postal_code = None\n        self._region = None\n        self._country = None\n        self._county = None\n        self._formatted_address = None\n\n    def _append_to_user_display(self, append_check):\n        \"\"\"Appends attribute to state if false.\"\"\"\n        if append_check == \"\":\n            pass\n        else:\n            user_display.append(append_check)\n\n    @staticmethod\n    def _get_location_from_attributes(entity):\n        \"\"\"Get the lat/long string from an entities attributes.\"\"\"\n        attr = entity.attributes\n        return \"%s,%s\" % (attr.get(ATTR_LATITUDE), attr.get(ATTR_LONGITUDE))\n        \n    def _get_gravatar_for_email(self, email: str):\n        \"\"\"Return an 80px Gravatar for the given email address.\n        Async friendly.\n        \"\"\"\n        import hashlib\n        url = 'https://www.gravatar.com/avatar/{}.jpg?s=80&d=wavatar'\n        return url.format(hashlib.md5(email.encode('utf-8').lower()).hexdigest())\n"
  },
  {
    "path": "home-assistant/custom_components/grocy/__init__.py",
    "content": "\"\"\"\nCustom integration to integrate Grocy with Home Assistant.\n\nFor more details about this integration, please refer to\nhttps://github.com/custom-components/grocy\n\"\"\"\nimport asyncio\nimport logging\nfrom datetime import timedelta\nfrom typing import List\n\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.core import Config, HomeAssistant\nfrom homeassistant.exceptions import ConfigEntryNotReady\nfrom homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed\nfrom pygrocy import Grocy\n\nfrom .const import (\n    CONF_API_KEY,\n    CONF_PORT,\n    CONF_URL,\n    CONF_VERIFY_SSL,\n    DOMAIN,\n    GrocyEntityType,\n    PLATFORMS,\n    STARTUP_MESSAGE,\n)\nfrom .grocy_data import GrocyData, async_setup_image_api\nfrom .services import async_setup_services, async_unload_services\n\nSCAN_INTERVAL = timedelta(seconds=30)\n\n_LOGGER = logging.getLogger(__name__)\n\n\nasync def async_setup(_hass: HomeAssistant, _config: Config):\n    \"\"\"Set up this integration using YAML is not supported.\"\"\"\n    return True\n\n\nasync def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry):\n    \"\"\"Set up this integration using UI.\"\"\"\n    hass.data.setdefault(DOMAIN, {})\n    _LOGGER.info(STARTUP_MESSAGE)\n\n    coordinator = GrocyDataUpdateCoordinator(\n        hass,\n        config_entry.data[CONF_URL],\n        config_entry.data[CONF_API_KEY],\n        config_entry.data[CONF_PORT],\n        config_entry.data[CONF_VERIFY_SSL],\n    )\n\n    await coordinator.async_refresh()\n\n    if not coordinator.last_update_success:\n        raise ConfigEntryNotReady\n\n    hass.data[DOMAIN] = coordinator\n\n    for platform in PLATFORMS:\n        hass.async_add_job(\n            hass.config_entries.async_forward_entry_setup(config_entry, platform)\n        )\n\n    await async_setup_services(hass, config_entry)\n\n    # Setup http endpoint for proxying images from grocy\n    await async_setup_image_api(hass, config_entry.data)\n\n    config_entry.add_update_listener(async_reload_entry)\n    return True\n\n\nclass GrocyDataUpdateCoordinator(DataUpdateCoordinator):\n    \"\"\"Class to manage fetching data from the API.\"\"\"\n\n    def __init__(self, hass, url, api_key, port_number, verify_ssl):\n        \"\"\"Initialize.\"\"\"\n        super().__init__(hass, _LOGGER, name=DOMAIN, update_interval=SCAN_INTERVAL)\n        self.api = Grocy(url, api_key, port_number, verify_ssl)\n        self.entities = []\n        self.data = {}\n\n    async def _async_update_data(self):\n        \"\"\"Update data via library.\"\"\"\n        grocy_data = GrocyData(self.hass, self.api)\n        data = {}\n        features = []\n        try:\n            features = await async_supported_features(grocy_data)\n            if not features:\n                raise UpdateFailed(\"No features enabled\")\n        except Exception as exception:\n            raise UpdateFailed(exception)\n\n        for entity in self.entities:\n            if entity.enabled and entity.entity_type in features:\n                try:\n                    data[entity.entity_type] = await grocy_data.async_update_data(\n                        entity.entity_type\n                    )\n                except Exception as exception:\n                    _LOGGER.error(\n                        f\"Update of {entity.entity_type} failed with {exception}\"\n                    )\n            elif entity.entity_type not in features:\n                _LOGGER.warning(\n                    f\"You have enabled the entity for {entity.name}, but this feature is not enabled in Grocy\",\n                )\n        return data\n\n\nasync def async_supported_features(grocy_data) -> List[str]:\n    \"\"\"Return a list of supported features.\"\"\"\n    features = []\n    config = await grocy_data.async_get_config()\n    if config:\n        if config[\"FEATURE_FLAG_STOCK\"] != \"0\":\n            features.append(GrocyEntityType.STOCK)\n            features.append(GrocyEntityType.PRODUCTS)\n            features.append(GrocyEntityType.MISSING_PRODUCTS)\n            features.append(GrocyEntityType.EXPIRED_PRODUCTS)\n            features.append(GrocyEntityType.EXPIRING_PRODUCTS)\n\n        if config[\"FEATURE_FLAG_SHOPPINGLIST\"] != \"0\":\n            features.append(GrocyEntityType.SHOPPING_LIST)\n\n        if config[\"FEATURE_FLAG_TASKS\"] != \"0\":\n            features.append(GrocyEntityType.TASKS)\n            features.append(GrocyEntityType.OVERDUE_TASKS)\n\n        if config[\"FEATURE_FLAG_CHORES\"] != \"0\":\n            features.append(GrocyEntityType.CHORES)\n            features.append(GrocyEntityType.OVERDUE_CHORES)\n\n        if config[\"FEATURE_FLAG_RECIPES\"] != \"0\":\n            features.append(GrocyEntityType.MEAL_PLAN)\n\n    return features\n\n\nasync def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):\n    \"\"\"Handle removal of an entry.\"\"\"\n    _LOGGER.debug(\"Unloading with state %s\", entry.state)\n    if entry.state == \"loaded\":\n        unloaded = all(\n            await asyncio.gather(\n                *[\n                    hass.config_entries.async_forward_entry_unload(entry, platform)\n                    for platform in PLATFORMS\n                ]\n            )\n        )\n        _LOGGER.debug(\"Unloaded? %s\", unloaded)\n        del hass.data[DOMAIN]\n        return unloaded\n    return False\n\n\nasync def async_reload_entry(hass: HomeAssistant, entry: ConfigEntry):\n    \"\"\"Reload config entry.\"\"\"\n    unloaded = await async_unload_entry(hass, entry)\n    _LOGGER.error(\"Unloaded successfully: %s\", unloaded)\n    if unloaded:\n        await async_setup_entry(hass, entry)\n        await async_unload_services(hass)\n"
  },
  {
    "path": "home-assistant/custom_components/grocy/binary_sensor.py",
    "content": "\"\"\"Binary sensor platform for Grocy.\"\"\"\nimport logging\nfrom homeassistant.components.binary_sensor import BinarySensorDevice\n\n# pylint: disable=relative-beyond-top-level\nfrom .const import (\n    DOMAIN,\n    GrocyEntityType,\n)\nfrom .entity import GrocyEntity\n\n_LOGGER = logging.getLogger(__name__)\nBINARY_SENSOR_TYPES = [\n    GrocyEntityType.EXPIRED_PRODUCTS,\n    GrocyEntityType.EXPIRING_PRODUCTS,\n    GrocyEntityType.MISSING_PRODUCTS,\n    GrocyEntityType.OVERDUE_CHORES,\n    GrocyEntityType.OVERDUE_TASKS,\n]\n\n\nasync def async_setup_entry(hass, entry, async_add_entities):\n    \"\"\"Setup binary_sensor platform.\"\"\"\n    coordinator = hass.data[DOMAIN]\n\n    entities = []\n    for binary_sensor in BINARY_SENSOR_TYPES:\n        _LOGGER.debug(\"Adding %s binary sensor\", binary_sensor)\n        entity = GrocyBinarySensor(coordinator, entry, binary_sensor)\n        coordinator.entities.append(entity)\n        entities.append(entity)\n\n    async_add_entities(entities, True)\n\n\nclass GrocyBinarySensor(GrocyEntity, BinarySensorDevice):\n    \"\"\"Grocy binary_sensor class.\"\"\"\n\n    @property\n    def is_on(self):\n        \"\"\"Return true if the binary_sensor is on.\"\"\"\n        if not self.entity_data:\n            return\n\n        return len(self.entity_data) > 0\n"
  },
  {
    "path": "home-assistant/custom_components/grocy/breaking_changes",
    "content": "services:\n    add_project -> add_product_to_stock\n        price -> str (was int)\n\n    consume_product -> consume_product_from_stock"
  },
  {
    "path": "home-assistant/custom_components/grocy/config_flow.py",
    "content": "\"\"\"Adds config flow for Grocy.\"\"\"\nimport logging\nfrom collections import OrderedDict\n\nimport voluptuous as vol\nfrom homeassistant import config_entries\nfrom pygrocy import Grocy\n\nfrom .const import (\n    CONF_API_KEY,\n    CONF_PORT,  # pylint: disable=unused-import\n    CONF_URL,\n    CONF_VERIFY_SSL,\n    DEFAULT_PORT,\n    DOMAIN,\n    NAME,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass GrocyFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):\n    \"\"\"Config flow for Grocy.\"\"\"\n\n    VERSION = 1\n    CONNECTION_CLASS = config_entries.CONN_CLASS_CLOUD_POLL\n\n    def __init__(self):\n        \"\"\"Initialize.\"\"\"\n        self._errors = {}\n\n    async def async_step_user(self, user_input=None):\n        \"\"\"Handle a flow initialized by the user.\"\"\"\n        self._errors = {}\n        _LOGGER.debug(\"Step user\")\n\n        # Uncomment the next 2 lines if only a single instance of the integration is allowed:\n        if self._async_current_entries():\n            return self.async_abort(reason=\"single_instance_allowed\")\n\n        if user_input is not None:\n            valid = await self._test_credentials(\n                user_input[CONF_URL],\n                user_input[CONF_API_KEY],\n                user_input[CONF_PORT],\n                user_input[CONF_VERIFY_SSL],\n            )\n            _LOGGER.debug(\"Testing of credentials returned: \")\n            _LOGGER.debug(valid)\n            if valid:\n                return self.async_create_entry(title=NAME, data=user_input)\n            else:\n                self._errors[\"base\"] = \"auth\"\n            return await self._show_config_form(user_input)\n\n        return await self._show_config_form(user_input)\n\n    async def _show_config_form(self, user_input):  # pylint: disable=unused-argument\n        \"\"\"Show the configuration form to edit the data.\"\"\"\n        data_schema = OrderedDict()\n        data_schema[vol.Required(CONF_URL, default=\"\")] = str\n        data_schema[vol.Required(CONF_API_KEY, default=\"\",)] = str\n        data_schema[vol.Optional(CONF_PORT, default=DEFAULT_PORT)] = int\n        data_schema[vol.Optional(CONF_VERIFY_SSL, default=False)] = bool\n        _LOGGER.debug(\"config form\")\n\n        return self.async_show_form(\n            step_id=\"user\", data_schema=vol.Schema(data_schema), errors=self._errors,\n        )\n\n    async def _test_credentials(self, url, api_key, port, verify_ssl):\n        \"\"\"Return true if credentials is valid.\"\"\"\n        try:\n            client = Grocy(url, api_key, port, verify_ssl)\n\n            _LOGGER.debug(\"Testing credentials\")\n\n            def system_info():\n                \"\"\"Get system information from Grocy.\"\"\"\n                client._api_client._do_get_request(\"/api/system/info\")\n\n            await self.hass.async_add_executor_job(system_info)\n            return True\n        except Exception as e:  # pylint: disable=broad-except\n            _LOGGER.error(e)\n            pass\n        return False\n"
  },
  {
    "path": "home-assistant/custom_components/grocy/const.py",
    "content": "\"\"\"Constants for Grocy.\"\"\"\nfrom enum import Enum\n\n# Base component constants\nNAME = \"Grocy\"\nDOMAIN = \"grocy\"\nVERSION = \"v2.2.2\"\n\nISSUE_URL = \"https://github.com/custom-components/grocy/issues\"\n\n\n# Platforms\nPLATFORMS = [\"binary_sensor\", \"sensor\"]\n\n# Configuration and options\nCONF_NAME = \"name\"\n\nDEFAULT_PORT = 9192\nCONF_URL = \"url\"\nCONF_PORT = \"port\"\nCONF_API_KEY = \"api_key\"\nCONF_VERIFY_SSL = \"verify_ssl\"\n\nSTARTUP_MESSAGE = f\"\"\"\n-------------------------------------------------------------------\n{NAME}\nVersion: {VERSION}\nThis is a custom integration!\nIf you have any issues with this you need to open an issue here:\n{ISSUE_URL}\n-------------------------------------------------------------------\n\"\"\"\n\n\nclass GrocyEntityType(str, Enum):\n    \"\"\"Entity type for Grocy entities.\"\"\"\n\n    CHORES = \"Chores\"\n    EXPIRED_PRODUCTS = \"Expired_products\"\n    EXPIRING_PRODUCTS = \"Expiring_products\"\n    MEAL_PLAN = \"Meal_plan\"\n    MISSING_PRODUCTS = \"Missing_products\"\n    OVERDUE_CHORES = \"Overdue_chores\"\n    OVERDUE_TASKS = \"Overdue_tasks\"\n    PRODUCTS = \"Products\"\n    SHOPPING_LIST = \"Shopping_list\"\n    STOCK = \"Stock\"\n    TASKS = \"Tasks\"\n\n\nclass GrocyEntityUnit(str, Enum):\n    \"\"\"Unit of measurement for Grocy entities.\"\"\"\n\n    CHORES = \"Chore(s)\"\n    MEALS = \"Meal(s)\"\n    PRODUCTS = \"Product(s)\"\n    TASKS = \"Task(s)\"\n\n\nclass GrocyEntityIcon(str, Enum):\n    \"\"\"Icon for a Grocy entity.\"\"\"\n\n    DEFAULT = \"mdi:format-quote-close\"\n\n    CHORES = \"mdi:broom\"\n    EXPIRED_PRODUCTS = \"mdi:delete-alert-outline\"\n    EXPIRING_PRODUCTS = \"mdi:clock-fast\"\n    MEAL_PLAN = \"mdi:silverware-variant\"\n    MISSING_PRODUCTS = \"mdi:flask-round-bottom-empty-outline\"\n    OVERDUE_CHORES = \"mdi:alert-circle-check-outline\"\n    OVERDUE_TASKS = \"mdi:alert-circle-check-outline\"\n    PRODUCTS = \"mdi:food-fork-drink\"\n    SHOPPING_LIST = \"mdi:cart-outline\"\n    STOCK = \"mdi:fridge-outline\"\n    TASKS = \"mdi:checkbox-marked-circle-outline\"\n\n"
  },
  {
    "path": "home-assistant/custom_components/grocy/entity.py",
    "content": "\"\"\"GrocyEntity class\"\"\"\nfrom homeassistant.helpers import entity\nfrom homeassistant.helpers.update_coordinator import DataUpdateCoordinator\n\n# pylint: disable=relative-beyond-top-level\nfrom .const import (\n    DOMAIN,\n    GrocyEntityIcon,\n    GrocyEntityType,\n    GrocyEntityUnit,\n    NAME,\n    VERSION,\n)\n\n\nclass GrocyCoordinatorEntity(entity.Entity):\n    \"\"\"\n    CoordinatorEntity was added to HA in 0.115, this is a  copy of the\n    class CoordinatorEntity from homeassistant.helpers.update_coordinator\n\n    Remove this class and use CoordinatorEntity instead when grocy require min version 0.115\n    \"\"\"\n\n    def __init__(self, coordinator: DataUpdateCoordinator) -> None:\n        \"\"\"Create the entity with a DataUpdateCoordinator.\"\"\"\n        self.coordinator = coordinator\n\n    @property\n    def should_poll(self) -> bool:\n        \"\"\"No need to poll. Coordinator notifies entity of updates.\"\"\"\n        return False\n\n    @property\n    def available(self) -> bool:\n        \"\"\"Return if entity is available.\"\"\"\n        return self.coordinator.last_update_success\n\n    async def async_added_to_hass(self) -> None:\n        \"\"\"When entity is added to hass.\"\"\"\n        await super().async_added_to_hass()\n        self.async_on_remove(\n            self.coordinator.async_add_listener(self.async_write_ha_state)\n        )\n\n    async def async_update(self) -> None:\n        \"\"\"Update the entity.\n\n        Only used by the generic entity update service.\n        \"\"\"\n\n        # Ignore manual update requests if the entity is disabled\n        if not self.enabled:\n            return\n\n        await self.coordinator.async_request_refresh()\n\n\nclass GrocyEntity(GrocyCoordinatorEntity):\n    def __init__(self, coordinator, config_entry, entity_type):\n        super().__init__(coordinator)\n        self.config_entry = config_entry\n        self.entity_type = entity_type\n\n    @property\n    def unique_id(self):\n        \"\"\"Return a unique ID to use for this entity.\"\"\"\n        return f\"{self.config_entry.entry_id}{self.entity_type.lower()}\"\n\n    @property\n    def name(self):\n        \"\"\"Return the name of the binary_sensor.\"\"\"\n        return f\"{NAME} {self.entity_type.lower().replace('_', ' ')}\"\n\n    @property\n    def entity_registry_enabled_default(self) -> bool:\n        \"\"\"Return if the entity should be enabled when first added to the entity registry.\"\"\"\n        return False\n\n    @property\n    def entity_data(self):\n        \"\"\"Return the entity_data of the entity.\"\"\"\n        return self.coordinator.data.get(self.entity_type)\n\n    @property\n    def unit_of_measurement(self):\n        \"\"\"Return the unit the value is expressed in.\"\"\"\n        if GrocyEntityType(self.entity_type).name in [x.name for x in GrocyEntityUnit]:\n            return GrocyEntityUnit[GrocyEntityType(self.entity_type).name]\n\n    @property\n    def icon(self):\n        \"\"\"Return the icon of the entity.\"\"\"\n        if GrocyEntityType(self.entity_type).name in [x.name for x in GrocyEntityIcon]:\n            return GrocyEntityIcon[GrocyEntityType(self.entity_type).name]\n\n        return GrocyEntityIcon.DEFAULT\n\n    @property\n    def device_info(self):\n        return {\n            # \"identifiers\": {(DOMAIN, self.unique_id)},\n            \"identifiers\": {(DOMAIN, self.config_entry.entry_id)},\n            \"name\": NAME,\n            \"model\": VERSION,\n            \"manufacturer\": NAME,\n            \"entry_type\": \"service\",\n        }\n\n    @property\n    def device_state_attributes(self):\n        \"\"\"Return the state attributes.\"\"\"\n        if not self.entity_data:\n            return\n        elif self.entity_type == GrocyEntityType.CHORES:\n            return {\"chores\": [x.as_dict() for x in self.entity_data]}\n        elif self.entity_type == GrocyEntityType.EXPIRED_PRODUCTS:\n            return {\"expired\": [x.as_dict() for x in self.entity_data]}\n        elif self.entity_type == GrocyEntityType.EXPIRING_PRODUCTS:\n            return {\"expiring\": [x.as_dict() for x in self.entity_data]}\n        elif self.entity_type == GrocyEntityType.MEAL_PLAN:\n            return {\"meals\": [x.as_dict() for x in self.entity_data]}\n        elif self.entity_type == GrocyEntityType.MISSING_PRODUCTS:\n            return {\"missing\": [x.as_dict() for x in self.entity_data]}\n        elif self.entity_type == GrocyEntityType.OVERDUE_CHORES:\n            return {\"chores\": [x.as_dict() for x in self.entity_data]}\n        elif self.entity_type == GrocyEntityType.OVERDUE_TASKS:\n            return {\"tasks\": [x.as_dict() for x in self.entity_data]}\n        elif self.entity_type == GrocyEntityType.PRODUCTS:\n            return {\"products\": [x.as_dict() for x in self.entity_data]}\n        elif self.entity_type == GrocyEntityType.SHOPPING_LIST:\n            return {\"products\": [x.as_dict() for x in self.entity_data]}\n        elif self.entity_type == GrocyEntityType.STOCK:\n            return {\"products\": [x.as_dict() for x in self.entity_data]}\n        elif self.entity_type == GrocyEntityType.TASKS:\n            return {\"tasks\": [x.as_dict() for x in self.entity_data]}\n"
  },
  {
    "path": "home-assistant/custom_components/grocy/grocy_data.py",
    "content": "from aiohttp import hdrs, web\nfrom datetime import timedelta, datetime\nimport logging\nimport pytz\n\nfrom homeassistant.components.http import HomeAssistantView\nfrom homeassistant.helpers.aiohttp_client import async_get_clientsession\n\nfrom .const import (\n    CONF_API_KEY,\n    CONF_URL,\n    CONF_PORT,\n    GrocyEntityType,\n)\nfrom .helpers import MealPlanItem\n\nMIN_TIME_BETWEEN_UPDATES = timedelta(seconds=60)\n_LOGGER = logging.getLogger(__name__)\n\nutc = pytz.UTC\n\n\nclass GrocyData:\n    \"\"\"This class handle communication and stores the data.\"\"\"\n\n    def __init__(self, hass, client):\n        \"\"\"Initialize the class.\"\"\"\n        self.hass = hass\n        self.client = client\n        self.sensor_types_dict = {\n            GrocyEntityType.STOCK: self.async_update_stock,\n            GrocyEntityType.CHORES: self.async_update_chores,\n            GrocyEntityType.TASKS: self.async_update_tasks,\n            GrocyEntityType.SHOPPING_LIST: self.async_update_shopping_list,\n            GrocyEntityType.EXPIRING_PRODUCTS: self.async_update_expiring_products,\n            GrocyEntityType.EXPIRED_PRODUCTS: self.async_update_expired_products,\n            GrocyEntityType.MISSING_PRODUCTS: self.async_update_missing_products,\n            GrocyEntityType.MEAL_PLAN: self.async_update_meal_plan,\n            GrocyEntityType.OVERDUE_CHORES: self.async_update_overdue_chores,\n            GrocyEntityType.OVERDUE_TASKS: self.async_update_overdue_tasks,\n        }\n        self.sensor_update_dict = {\n            GrocyEntityType.STOCK: None,\n            GrocyEntityType.CHORES: None,\n            GrocyEntityType.TASKS: None,\n            GrocyEntityType.SHOPPING_LIST: None,\n            GrocyEntityType.EXPIRING_PRODUCTS: None,\n            GrocyEntityType.EXPIRED_PRODUCTS: None,\n            GrocyEntityType.MISSING_PRODUCTS: None,\n            GrocyEntityType.MEAL_PLAN: None,\n            GrocyEntityType.OVERDUE_CHORES: None,\n            GrocyEntityType.OVERDUE_TASKS: None,\n        }\n\n    async def async_update_data(self, sensor_type):\n        \"\"\"Update data.\"\"\"\n        sensor_update = self.sensor_update_dict[sensor_type]\n        db_changed = await self.hass.async_add_executor_job(\n            self.client.get_last_db_changed\n        )\n        if db_changed != sensor_update:\n            self.sensor_update_dict[sensor_type] = db_changed\n            if sensor_type in self.sensor_types_dict:\n                # This is where the main logic to update platform data goes.\n                return await self.sensor_types_dict[sensor_type]()\n\n    async def async_update_stock(self):\n        \"\"\"Update data.\"\"\"\n        # This is where the main logic to update platform data goes.\n        return await self.hass.async_add_executor_job(self.client.stock)\n\n    async def async_update_chores(self):\n        \"\"\"Update data.\"\"\"\n        # This is where the main logic to update platform data goes.\n        def wrapper():\n            return self.client.chores(True)\n\n        return await self.hass.async_add_executor_job(wrapper)\n\n    async def async_update_overdue_chores(self):\n        \"\"\"Update data.\"\"\"\n        # This is where the main logic to update platform data goes.\n        def wrapper():\n            return self.client.chores(True)\n\n        chores = await self.hass.async_add_executor_job(wrapper)\n        overdue_chores = []\n        for chore in chores:\n            if chore.next_estimated_execution_time:\n                now = datetime.now().replace(tzinfo=utc)\n                due = chore.next_estimated_execution_time.replace(tzinfo=utc)\n                if due < now:\n                    overdue_chores.append(chore)\n        return overdue_chores\n\n    async def async_get_config(self):\n        \"\"\"Get the configuration from Grocy.\"\"\"\n\n        def wrapper():\n            return self.client._api_client._do_get_request(\"/api/system/config\")\n\n        return await self.hass.async_add_executor_job(wrapper)\n\n    async def async_update_tasks(self):\n        \"\"\"Update data.\"\"\"\n        # This is where the main logic to update platform data goes.\n        return await self.hass.async_add_executor_job(self.client.tasks)\n\n    async def async_update_overdue_tasks(self):\n        \"\"\"Update data.\"\"\"\n        # This is where the main logic to update platform data goes.\n        tasks = await self.hass.async_add_executor_job(self.client.tasks)\n\n        overdue_tasks = []\n        for task in tasks:\n            if task.due_date:\n                now = datetime.now().replace(tzinfo=utc)\n                due = task.due_date.replace(tzinfo=utc)\n                if due < now:\n                    overdue_tasks.append(task)\n        return overdue_tasks\n\n    async def async_update_shopping_list(self):\n        \"\"\"Update data.\"\"\"\n        # This is where the main logic to update platform data goes.\n        def wrapper():\n            return self.client.shopping_list(True)\n\n        return await self.hass.async_add_executor_job(wrapper)\n\n    async def async_update_expiring_products(self):\n        \"\"\"Update data.\"\"\"\n        # This is where the main logic to update platform data goes.\n        def wrapper():\n            return self.client.expiring_products(True)\n\n        return await self.hass.async_add_executor_job(wrapper)\n\n    async def async_update_expired_products(self):\n        \"\"\"Update data.\"\"\"\n        # This is where the main logic to update platform data goes.\n        def wrapper():\n            return self.client.expired_products(True)\n\n        return await self.hass.async_add_executor_job(wrapper)\n\n    async def async_update_missing_products(self):\n        \"\"\"Update data.\"\"\"\n        # This is where the main logic to update platform data goes.\n        def wrapper():\n            return self.client.missing_products(True)\n\n        return await self.hass.async_add_executor_job(wrapper)\n\n    async def async_update_meal_plan(self):\n        \"\"\"Update data.\"\"\"\n        # This is where the main logic to update platform data goes.\n        def wrapper():\n            meal_plan = self.client.meal_plan(True)\n            today = datetime.today().date()\n            plan = [\n                MealPlanItem(item) for item in meal_plan if item.day.date() >= today\n            ]\n            return sorted(plan, key=lambda item: item.day)\n\n        return await self.hass.async_add_executor_job(wrapper)\n\n\nasync def async_setup_image_api(hass, config):\n    session = async_get_clientsession(hass)\n\n    url = config.get(CONF_URL)\n    api_key = config.get(CONF_API_KEY)\n    port_number = config.get(CONF_PORT)\n    base_url = f\"{url}:{port_number}\"\n    hass.http.register_view(GrocyPictureView(session, base_url, api_key))\n\n\nclass GrocyPictureView(HomeAssistantView):\n    \"\"\"View to render pictures from grocy without auth.\"\"\"\n\n    requires_auth = False\n    url = \"/api/grocy/{picture_type}/{filename}\"\n    name = \"api:grocy:picture\"\n\n    def __init__(self, session, base_url, api_key):\n        self._session = session\n        self._base_url = base_url\n        self._api_key = api_key\n\n    async def get(self, request, picture_type: str, filename: str) -> web.Response:\n        width = request.query.get(\"width\", 400)\n        url = f\"{self._base_url}/api/files/{picture_type}/{filename}\"\n        url = f\"{url}?force_serve_as=picture&best_fit_width={int(width)}\"\n        headers = {\"GROCY-API-KEY\": self._api_key, \"accept\": \"*/*\"}\n\n        async with self._session.get(url, headers=headers) as resp:\n            resp.raise_for_status()\n\n            response_headers = {}\n            for name, value in resp.headers.items():\n                if name in (\n                    hdrs.CACHE_CONTROL,\n                    hdrs.CONTENT_DISPOSITION,\n                    hdrs.CONTENT_LENGTH,\n                    hdrs.CONTENT_TYPE,\n                    hdrs.CONTENT_ENCODING,\n                ):\n                    response_headers[name] = value\n\n            body = await resp.read()\n            return web.Response(body=body, headers=response_headers)\n"
  },
  {
    "path": "home-assistant/custom_components/grocy/helpers.py",
    "content": "import base64\n\nclass MealPlanItem(object):\n    def __init__(self, data):\n        self.day = data.day\n        self.note = data.note\n        self.recipe_name = data.recipe.name\n        self.desired_servings = data.recipe.desired_servings\n\n        if data.recipe.picture_file_name is not None:\n            b64name = base64.b64encode(data.recipe.picture_file_name.encode(\"ascii\"))\n            self.picture_url = f\"/api/grocy/recipepictures/{str(b64name, 'utf-8')}\"\n        else:\n            self.picture_url = None\n\n    def as_dict(self):\n        return vars(self)\n"
  },
  {
    "path": "home-assistant/custom_components/grocy/manifest.json",
    "content": "{\n  \"domain\": \"grocy\",\n  \"name\": \"Grocy\",\n  \"documentation\": \"https://github.com/custom-components/grocy\",\n  \"dependencies\": [\n    \"http\"\n  ],\n  \"config_flow\": true,\n  \"codeowners\": [\n    \"@SebRut\",\n    \"@isabellaalstrom\"\n  ],\n  \"requirements\": [\n    \"sampleclient\",\n    \"pygrocy==0.24.1\",\n    \"iso8601==0.1.12\",\n    \"integrationhelper\"\n  ]\n}\n"
  },
  {
    "path": "home-assistant/custom_components/grocy/sensor.py",
    "content": "\"\"\"Sensor platform for Grocy.\"\"\"\n\nimport logging\n\nfrom .const import DOMAIN, GrocyEntityType\nfrom .entity import GrocyEntity\n\n_LOGGER = logging.getLogger(__name__)\nSENSOR_TYPES = [\n    GrocyEntityType.CHORES,\n    GrocyEntityType.MEAL_PLAN,\n    GrocyEntityType.SHOPPING_LIST,\n    GrocyEntityType.STOCK,\n    GrocyEntityType.TASKS,\n]\n\n\nasync def async_setup_entry(hass, entry, async_add_entities):\n    \"\"\"Setup sensor platform.\"\"\"\n    coordinator = hass.data[DOMAIN]\n\n    entities = []\n    for sensor in SENSOR_TYPES:\n        _LOGGER.debug(\"Adding %s sensor\", sensor)\n        entity = GrocySensor(coordinator, entry, sensor)\n        coordinator.entities.append(entity)\n        entities.append(entity)\n\n    async_add_entities(entities, True)\n\n\nclass GrocySensor(GrocyEntity):\n    \"\"\"Grocy Sensor class.\"\"\"\n\n    @property\n    def state(self):\n        \"\"\"Return the state of the sensor.\"\"\"\n        if not self.entity_data:\n            return\n        return len(self.entity_data)\n"
  },
  {
    "path": "home-assistant/custom_components/grocy/services.py",
    "content": "\"\"\"Grocy services.\"\"\"\nimport asyncio\nimport voluptuous as vol\nimport iso8601\nfrom homeassistant.helpers import config_validation as cv\nfrom homeassistant.helpers import entity_component\n\nfrom pygrocy import TransactionType\nfrom datetime import datetime\n\n# pylint: disable=relative-beyond-top-level\nfrom .const import DOMAIN\n\nGROCY_SERVICES = \"grocy_services\"\n\nSERVICE_PRODUCT_ID = \"product_id\"\nSERVICE_AMOUNT = \"amount\"\nSERVICE_PRICE = \"price\"\nSERVICE_SPOILED = \"spoiled\"\nSERVICE_TRANSACTION_TYPE = \"transaction_type\"\nSERVICE_CHORE_ID = \"chore_id\"\nSERVICE_TRACKED_TIME = \"tracked_time\"\nSERVICE_DONE_BY = \"done_by\"\nSERVICE_TASK_ID = \"task_id\"\nSERVICE_DONE_TIME = \"done_time\"\nSERVICE_ENTITY_TYPE = \"entity_type\"\nSERVICE_DATA = \"data\"\n\nSERVICE_ADD_PRODUCT = \"add_product_to_stock\"\nSERVICE_CONSUME_PRODUCT = \"consume_product_from_stock\"\nSERVICE_EXECUTE_CHORE = \"execute_chore\"\nSERVICE_COMPLETE_TASK = \"complete_task\"\nSERVICE_ADD_GENERIC = \"add_generic\"\n\nSERVICE_ADD_PRODUCT_SCHEMA = vol.All(\n    vol.Schema(\n        {\n            vol.Required(SERVICE_PRODUCT_ID): int,\n            vol.Required(SERVICE_AMOUNT): int,\n            vol.Optional(SERVICE_PRICE): str,\n        }\n    )\n)\n\nSERVICE_CONSUME_PRODUCT_SCHEMA = vol.All(\n    vol.Schema(\n        {\n            vol.Required(SERVICE_PRODUCT_ID): int,\n            vol.Required(SERVICE_AMOUNT): int,\n            vol.Optional(SERVICE_SPOILED): bool,\n            vol.Optional(SERVICE_TRANSACTION_TYPE): str,\n        }\n    )\n)\n\nSERVICE_EXECUTE_CHORE_SCHEMA = vol.All(\n    vol.Schema(\n        {\n            vol.Required(SERVICE_CHORE_ID): int,\n            vol.Optional(SERVICE_DONE_BY): int,\n            vol.Optional(SERVICE_TRACKED_TIME): str,\n        }\n    )\n)\n\nSERVICE_COMPLETE_TASK_SCHEMA = vol.All(\n    vol.Schema(\n        {vol.Required(SERVICE_TASK_ID): int, vol.Optional(SERVICE_DONE_TIME): str,}\n    )\n)\n\nSERVICE_ADD_GENERIC_SCHEMA = vol.All(\n    vol.Schema(\n        {vol.Required(SERVICE_ENTITY_TYPE): str, vol.Required(SERVICE_DATA): object,}\n    )\n)\n\n\nasync def async_setup_services(hass, entry):\n    \"\"\"Set up services for Grocy integration.\"\"\"\n    coordinator = hass.data[DOMAIN]\n    if hass.data.get(GROCY_SERVICES, False):\n        return\n\n    hass.data[GROCY_SERVICES] = True\n\n    async def async_call_grocy_service(service_call):\n        \"\"\"Call correct Grocy service.\"\"\"\n        service = service_call.service\n        service_data = service_call.data\n\n        if service == SERVICE_ADD_PRODUCT:\n            await async_add_product_service(hass, coordinator, service_data)\n\n        elif service == SERVICE_CONSUME_PRODUCT:\n            await async_consume_product_service(hass, coordinator, service_data)\n\n        elif service == SERVICE_EXECUTE_CHORE:\n            await async_execute_chore_service(hass, coordinator, service_data)\n\n        elif service == SERVICE_COMPLETE_TASK:\n            await async_complete_task_service(hass, coordinator, service_data)\n\n        elif service == SERVICE_ADD_GENERIC:\n            await async_add_generic_service(hass, coordinator, service_data)\n\n    hass.services.async_register(\n        DOMAIN,\n        SERVICE_ADD_PRODUCT,\n        async_call_grocy_service,\n        schema=SERVICE_ADD_PRODUCT_SCHEMA,\n    )\n\n    hass.services.async_register(\n        DOMAIN,\n        SERVICE_CONSUME_PRODUCT,\n        async_call_grocy_service,\n        schema=SERVICE_CONSUME_PRODUCT_SCHEMA,\n    )\n\n    hass.services.async_register(\n        DOMAIN,\n        SERVICE_EXECUTE_CHORE,\n        async_call_grocy_service,\n        schema=SERVICE_EXECUTE_CHORE_SCHEMA,\n    )\n\n    hass.services.async_register(\n        DOMAIN,\n        SERVICE_COMPLETE_TASK,\n        async_call_grocy_service,\n        schema=SERVICE_COMPLETE_TASK_SCHEMA,\n    )\n\n    hass.services.async_register(\n        DOMAIN,\n        SERVICE_ADD_GENERIC,\n        async_call_grocy_service,\n        schema=SERVICE_ADD_GENERIC_SCHEMA,\n    )\n\n\nasync def async_unload_services(hass):\n    \"\"\"Unload Grocy services.\"\"\"\n    if not hass.data.get(GROCY_SERVICES):\n        return\n\n    hass.data[GROCY_SERVICES] = False\n\n    hass.services.async_remove(DOMAIN, SERVICE_ADD_PRODUCT)\n    hass.services.async_remove(DOMAIN, SERVICE_CONSUME_PRODUCT)\n    hass.services.async_remove(DOMAIN, SERVICE_EXECUTE_CHORE)\n    hass.services.async_remove(DOMAIN, SERVICE_COMPLETE_TASK)\n\n\nasync def async_add_product_service(hass, coordinator, data):\n    \"\"\"Add a product in Grocy.\"\"\"\n    product_id = data[SERVICE_PRODUCT_ID]\n    amount = data[SERVICE_AMOUNT]\n    price = data.get(SERVICE_PRICE, \"\")\n\n    coordinator.api.add_product(product_id, amount, price)\n\n\nasync def async_consume_product_service(hass, coordinator, data):\n    \"\"\"Consume a product in Grocy.\"\"\"\n    product_id = data[SERVICE_PRODUCT_ID]\n    amount = data[SERVICE_AMOUNT]\n    spoiled = data.get(SERVICE_SPOILED, False)\n\n    transaction_type_raw = data.get(SERVICE_TRANSACTION_TYPE, None)\n    transaction_type = TransactionType.CONSUME\n\n    if transaction_type_raw is not None:\n        transaction_type = TransactionType[transaction_type_raw]\n    coordinator.api.consume_product(\n        product_id, amount, spoiled=spoiled, transaction_type=transaction_type\n    )\n\n\nasync def async_execute_chore_service(hass, coordinator, data):\n    \"\"\"Execute a chore in Grocy.\"\"\"\n    chore_id = data[SERVICE_CHORE_ID]\n    done_by = data.get(SERVICE_DONE_BY, \"\")\n    tracked_time_str = data.get(SERVICE_TRACKED_TIME, \"\")\n\n    tracked_time = datetime.now()\n    if tracked_time_str is not None and tracked_time_str != \"\":\n        tracked_time = iso8601.parse_date(tracked_time_str)\n\n    coordinator.api.execute_chore(chore_id, done_by, tracked_time)\n    asyncio.run_coroutine_threadsafe(\n        entity_component.async_update_entity(hass, \"sensor.grocy_chores\"), hass.loop\n    )\n\n\nasync def async_complete_task_service(hass, coordinator, data):\n    \"\"\"Complete a task in Grocy.\"\"\"\n    task_id = data[SERVICE_TASK_ID]\n    done_time_str = data.get(SERVICE_DONE_TIME, None)\n\n    done_time = datetime.now()\n    if done_time_str is not None and done_time_str != \"\":\n        done_time = iso8601.parse_date(done_time_str)\n\n    coordinator.api.complete_task(task_id, done_time)\n    asyncio.run_coroutine_threadsafe(\n        entity_component.async_update_entity(hass, \"sensor.grocy_tasks\"), hass.loop\n    )\n\n\nasync def async_add_generic_service(hass, coordinator, data):\n    \"\"\"Add a generic entity in Grocy.\"\"\"\n    entity_type = data[SERVICE_ENTITY_TYPE]\n    data = data[SERVICE_DATA]\n\n    coordinator.api.add_generic(entity_type, data)\n"
  },
  {
    "path": "home-assistant/custom_components/grocy/services.yaml",
    "content": "add_product_to_stock:\n  description: Adds a given amount of a product to the stock\n  fields:\n    product_id:\n      example: '3'\n      description: The id of the product to add to stock\n    amount:\n      description: The amount to add to stock\n      example: 3.0\n    price:\n      example: 1.99\n      description: The purchase price per purchase quantity unit of the added product\nconsume_product_from_stock:\n  description: Consumes a given amount of a product to the stock\n  fields:\n    product_id:\n      example: '3'\n      description: The id of the product to consume\n    amount:\n      example: 3.0\n      description: The amount to consume\n    spoiled:\n      example: false\n      description: if the product was removed because of spoilage\n    transaction_type:\n      example: \"CONSUME\"\n      description: The type of the transaction. One of \"CONSUME\", \"PURCHASE\", \"INVENTORY_CORRECTION\" or \"PRODUCT_OPENED\"\nexecute_chore:\n  description: Executes the given chore with an optional timestamp and executor\n  fields:\n    chore_id:\n      example: '3'\n      description: The id of the chore to execute\n    tracked_time:\n      example: '2019-06-18T19:00:00.251Z'\n      description: The timestamp at when the chore got executed as ISO8601\n    done_by:\n      example: '0'\n      description: The id of the user who executed the chore\n\ncomplete_task:\n  description: Completes the given task\n  fields:\n    task_id:\n      example: '3'\n      description: The id of the task to complete\n    done_time:\n      example: '2019-06-18T19:00:00.251Z'\n      description: The timestamp at when the task got completed as ISO8601\n\nadd_generic:\n  description: Adds a single object of the given entity type\n  fields:\n    entity_type:\n      example: 'tasks'\n      description: Entity type is the type of entity you like to add. See Grocy api documentation on \"Generic entity interactions\" for more information.\n    data:\n      example: '{\"name\": \"This is a task\"}'\n      description: Data is a json object with what data you want to add.\n"
  },
  {
    "path": "home-assistant/custom_components/grocy/translations/en.json",
    "content": "{\n    \"config\": {\n        \"abort\": {\n            \"single_instance_allowed\": \"Only a single configuration of Grocy is allowed.\"\n        },\n        \"error\": {\n            \"auth\": \"Something went wrong.\"\n        },\n        \"step\": {\n            \"user\": {\n                \"data\": {\n                    \"api_key\": \"Grocy API Key\",\n                    \"port\": \"Port Number (9192)\",\n                    \"url\": \"Grocy API URL (e.g. \\\"http:\\/\\/yourgrocyurl.com\\\")\",\n                    \"verify_ssl\": \"Verify SSL Certificate\"\n                },\n                \"description\": \"If you need help with the configuration have a look here: https:\\/\\/github.com\\/custom-components\\/grocy\",\n                \"title\": \"Grocy\"\n            }\n        },\n        \"title\": \"Grocy\"\n    }\n}"
  },
  {
    "path": "home-assistant/custom_components/grocy/translations/hr.json",
    "content": "{\n    \"config\": {\n        \"abort\": {\n            \"single_instance_allowed\": \"Dozvoljena je samo jedna Grocy konfiguracija\"\n        },\n        \"error\": {\n            \"auth\": \"Nešto je pošlo po zlu.\"\n        },\n        \"step\": {\n            \"user\": {\n                \"data\": {\n                    \"api_key\": \"Grocy API ključ\",\n                    \"port\": \"Broj port-a (9192)\",\n                    \"url\": \"Grocy API URL (npr. \\\"http:\\/\\/yourgrocyurl.com\\\")\",\n                    \"verify_ssl\": \"Provjerite SSL certifikat.\"\n                },\n                \"description\": \"Ako vam je potrebna pomoć oko konfiguracije, pogledajte ovdje: https:\\/\\/github.com\\/custom-components\\/grocy\",\n                \"title\": \"Grocy\"\n            }\n        },\n        \"title\": \"Grocy\"\n    }\n}"
  },
  {
    "path": "home-assistant/custom_components/hacs/__init__.py",
    "content": "\"\"\"\nHACS gives you a powerful UI to handle downloads of all your custom needs.\n\nFor more details about this integration, please refer to the documentation at\nhttps://hacs.xyz/\n\"\"\"\nfrom __future__ import annotations\n\nimport os\nfrom typing import Any\n\nfrom aiogithubapi import AIOGitHubAPIException, GitHub, GitHubAPI\nfrom aiogithubapi.const import ACCEPT_HEADERS\nfrom awesomeversion import AwesomeVersion\nfrom homeassistant.components.lovelace.system_health import system_health_info\nfrom homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry\nfrom homeassistant.const import Platform, __version__ as HAVERSION\nfrom homeassistant.core import HomeAssistant\nfrom homeassistant.helpers.aiohttp_client import async_get_clientsession\nfrom homeassistant.helpers.discovery import async_load_platform\nfrom homeassistant.helpers.event import async_call_later\nfrom homeassistant.helpers.start import async_at_start\nfrom homeassistant.loader import async_get_integration\nimport voluptuous as vol\n\nfrom custom_components.hacs.frontend import async_register_frontend\n\nfrom .base import HacsBase\nfrom .const import DOMAIN, MINIMUM_HA_VERSION, STARTUP\nfrom .enums import ConfigurationType, HacsDisabledReason, HacsStage, LovelaceMode\nfrom .utils.configuration_schema import hacs_config_combined\nfrom .utils.data import HacsData\nfrom .utils.queue_manager import QueueManager\nfrom .utils.version import version_left_higher_or_equal_then_right\nfrom .websocket import async_register_websocket_commands\n\nCONFIG_SCHEMA = vol.Schema({DOMAIN: hacs_config_combined()}, extra=vol.ALLOW_EXTRA)\n\n\nasync def async_initialize_integration(\n    hass: HomeAssistant,\n    *,\n    config_entry: ConfigEntry | None = None,\n    config: dict[str, Any] | None = None,\n) -> bool:\n    \"\"\"Initialize the integration\"\"\"\n    hass.data[DOMAIN] = hacs = HacsBase()\n    hacs.enable_hacs()\n\n    if config is not None:\n        if DOMAIN not in config:\n            return True\n        if hacs.configuration.config_type == ConfigurationType.CONFIG_ENTRY:\n            return True\n        hacs.configuration.update_from_dict(\n            {\n                \"config_type\": ConfigurationType.YAML,\n                **config[DOMAIN],\n                \"config\": config[DOMAIN],\n            }\n        )\n\n    if config_entry is not None:\n        if config_entry.source == SOURCE_IMPORT:\n            hass.async_create_task(hass.config_entries.async_remove(config_entry.entry_id))\n            return False\n\n        hacs.configuration.update_from_dict(\n            {\n                \"config_entry\": config_entry,\n                \"config_type\": ConfigurationType.CONFIG_ENTRY,\n                **config_entry.data,\n                **config_entry.options,\n            }\n        )\n\n    integration = await async_get_integration(hass, DOMAIN)\n\n    hacs.set_stage(None)\n\n    hacs.log.info(STARTUP, integration.version)\n\n    clientsession = async_get_clientsession(hass)\n\n    hacs.integration = integration\n    hacs.version = integration.version\n    hacs.configuration.dev = integration.version == \"0.0.0\"\n    hacs.hass = hass\n    hacs.queue = QueueManager(hass=hass)\n    hacs.data = HacsData(hacs=hacs)\n    hacs.system.running = True\n    hacs.session = clientsession\n\n    hacs.core.lovelace_mode = LovelaceMode.YAML\n    try:\n        lovelace_info = await system_health_info(hacs.hass)\n        hacs.core.lovelace_mode = LovelaceMode(lovelace_info.get(\"mode\", \"yaml\"))\n    except BaseException:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n        # If this happens, the users YAML is not valid, we assume YAML mode\n        pass\n    hacs.log.debug(\"Configuration type: %s\", hacs.configuration.config_type)\n    hacs.core.config_path = hacs.hass.config.path()\n\n    if hacs.core.ha_version is None:\n        hacs.core.ha_version = AwesomeVersion(HAVERSION)\n\n    ## Legacy GitHub client\n    hacs.github = GitHub(\n        hacs.configuration.token,\n        clientsession,\n        headers={\n            \"User-Agent\": f\"HACS/{hacs.version}\",\n            \"Accept\": ACCEPT_HEADERS[\"preview\"],\n        },\n    )\n\n    ## New GitHub client\n    hacs.githubapi = GitHubAPI(\n        token=hacs.configuration.token,\n        session=clientsession,\n        **{\"client_name\": f\"HACS/{hacs.version}\"},\n    )\n\n    async def async_startup():\n        \"\"\"HACS startup tasks.\"\"\"\n        hacs.enable_hacs()\n\n        for location in (\n            hass.config.path(\"custom_components/custom_updater.py\"),\n            hass.config.path(\"custom_components/custom_updater/__init__.py\"),\n        ):\n            if os.path.exists(location):\n                hacs.log.critical(\n                    \"This cannot be used with custom_updater. \"\n                    \"To use this you need to remove custom_updater form %s\",\n                    location,\n                )\n\n                hacs.disable_hacs(HacsDisabledReason.CONSTRAINS)\n                return False\n\n        if not version_left_higher_or_equal_then_right(\n            hacs.core.ha_version.string,\n            MINIMUM_HA_VERSION,\n        ):\n            hacs.log.critical(\n                \"You need HA version %s or newer to use this integration.\",\n                MINIMUM_HA_VERSION,\n            )\n            hacs.disable_hacs(HacsDisabledReason.CONSTRAINS)\n            return False\n\n        if not await hacs.data.restore():\n            hacs.disable_hacs(HacsDisabledReason.RESTORE)\n            return False\n\n        can_update = await hacs.async_can_update()\n        hacs.log.debug(\"Can update %s repositories\", can_update)\n\n        hacs.set_active_categories()\n\n        async_register_websocket_commands(hass)\n        async_register_frontend(hass, hacs)\n\n        if hacs.configuration.config_type == ConfigurationType.YAML:\n            hass.async_create_task(\n                async_load_platform(hass, Platform.SENSOR, DOMAIN, {}, hacs.configuration.config)\n            )\n            hacs.log.info(\"Update entities are only supported when using UI configuration\")\n\n        else:\n            if hacs.configuration.experimental:\n                hass.config_entries.async_setup_platforms(\n                    hacs.configuration.config_entry, [Platform.SENSOR, Platform.UPDATE]\n                )\n            else:\n                hass.config_entries.async_setup_platforms(\n                    hacs.configuration.config_entry, [Platform.SENSOR]\n                )\n\n        hacs.set_stage(HacsStage.SETUP)\n        if hacs.system.disabled:\n            return False\n\n        # Schedule startup tasks\n        async_at_start(hass=hass, at_start_cb=hacs.startup_tasks)\n\n        hacs.set_stage(HacsStage.WAITING)\n        hacs.log.info(\"Setup complete, waiting for Home Assistant before startup tasks starts\")\n\n        return not hacs.system.disabled\n\n    async def async_try_startup(_=None):\n        \"\"\"Startup wrapper for yaml config.\"\"\"\n        try:\n            startup_result = await async_startup()\n        except AIOGitHubAPIException:\n            startup_result = False\n        if not startup_result:\n            if (\n                hacs.configuration.config_type == ConfigurationType.YAML\n                or hacs.system.disabled_reason != HacsDisabledReason.INVALID_TOKEN\n            ):\n                hacs.log.info(\"Could not setup HACS, trying again in 15 min\")\n                async_call_later(hass, 900, async_try_startup)\n            return\n        hacs.enable_hacs()\n\n    await async_try_startup()\n\n    # Mischief managed!\n    return True\n\n\nasync def async_setup(hass: HomeAssistant, config: dict[str, Any]) -> bool:\n    \"\"\"Set up this integration using yaml.\"\"\"\n    return await async_initialize_integration(hass=hass, config=config)\n\n\nasync def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:\n    \"\"\"Set up this integration using UI.\"\"\"\n    config_entry.async_on_unload(config_entry.add_update_listener(async_reload_entry))\n    setup_result = await async_initialize_integration(hass=hass, config_entry=config_entry)\n    hacs: HacsBase = hass.data[DOMAIN]\n    return setup_result and not hacs.system.disabled\n\n\nasync def async_unload_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:\n    \"\"\"Handle removal of an entry.\"\"\"\n    hacs: HacsBase = hass.data[DOMAIN]\n\n    # Clear out pending queue\n    hacs.queue.clear()\n\n    for task in hacs.recuring_tasks:\n        # Cancel all pending tasks\n        task()\n\n    # Store data\n    await hacs.data.async_write(force=True)\n\n    try:\n        if hass.data.get(\"frontend_panels\", {}).get(\"hacs\"):\n            hacs.log.info(\"Removing sidepanel\")\n            hass.components.frontend.async_remove_panel(\"hacs\")\n    except AttributeError:\n        pass\n\n    platforms = [\"sensor\"]\n    if hacs.configuration.experimental:\n        platforms.append(\"update\")\n\n    unload_ok = await hass.config_entries.async_unload_platforms(config_entry, platforms)\n\n    hacs.set_stage(None)\n    hacs.disable_hacs(HacsDisabledReason.REMOVED)\n\n    hass.data.pop(DOMAIN, None)\n\n    return unload_ok\n\n\nasync def async_reload_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> None:\n    \"\"\"Reload the HACS config entry.\"\"\"\n    await async_unload_entry(hass, config_entry)\n    await async_setup_entry(hass, config_entry)\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/base.py",
    "content": "\"\"\"Base HACS class.\"\"\"\nfrom __future__ import annotations\n\nimport asyncio\nfrom dataclasses import asdict, dataclass, field\nfrom datetime import timedelta\nimport gzip\nimport logging\nimport math\nimport os\nimport pathlib\nimport shutil\nfrom typing import TYPE_CHECKING, Any, Awaitable, Callable\n\nfrom aiogithubapi import (\n    AIOGitHubAPIException,\n    GitHub,\n    GitHubAPI,\n    GitHubAuthenticationException,\n    GitHubException,\n    GitHubNotModifiedException,\n    GitHubRatelimitException,\n)\nfrom aiogithubapi.objects.repository import AIOGitHubAPIRepository\nfrom aiohttp.client import ClientSession, ClientTimeout\nfrom awesomeversion import AwesomeVersion\nfrom homeassistant.config_entries import ConfigEntry, ConfigEntryState\nfrom homeassistant.const import EVENT_HOMEASSISTANT_FINAL_WRITE, Platform\nfrom homeassistant.core import HomeAssistant, callback\nfrom homeassistant.helpers.dispatcher import async_dispatcher_send\nfrom homeassistant.loader import Integration\nfrom homeassistant.util import dt\n\nfrom .const import TV\nfrom .enums import (\n    ConfigurationType,\n    HacsCategory,\n    HacsDisabledReason,\n    HacsDispatchEvent,\n    HacsGitHubRepo,\n    HacsStage,\n    LovelaceMode,\n)\nfrom .exceptions import (\n    AddonRepositoryException,\n    HacsException,\n    HacsExecutionStillInProgress,\n    HacsExpectedException,\n    HacsRepositoryArchivedException,\n    HacsRepositoryExistException,\n    HomeAssistantCoreRepositoryException,\n)\nfrom .repositories import RERPOSITORY_CLASSES\nfrom .utils.decode import decode_content\nfrom .utils.json import json_loads\nfrom .utils.logger import LOGGER\nfrom .utils.queue_manager import QueueManager\nfrom .utils.store import async_load_from_store, async_save_to_store\n\nif TYPE_CHECKING:\n    from .repositories.base import HacsRepository\n    from .utils.data import HacsData\n    from .validate.manager import ValidationManager\n\n\n@dataclass\nclass RemovedRepository:\n    \"\"\"Removed repository.\"\"\"\n\n    repository: str | None = None\n    reason: str | None = None\n    link: str | None = None\n    removal_type: str = None  # archived, not_compliant, critical, dev, broken\n    acknowledged: bool = False\n\n    def update_data(self, data: dict):\n        \"\"\"Update data of the repository.\"\"\"\n        for key in data:\n            if data[key] is None:\n                continue\n            if key in (\n                \"reason\",\n                \"link\",\n                \"removal_type\",\n                \"acknowledged\",\n            ):\n                self.__setattr__(key, data[key])\n\n    def to_json(self):\n        \"\"\"Return a JSON representation of the data.\"\"\"\n        return {\n            \"repository\": self.repository,\n            \"reason\": self.reason,\n            \"link\": self.link,\n            \"removal_type\": self.removal_type,\n            \"acknowledged\": self.acknowledged,\n        }\n\n\n@dataclass\nclass HacsConfiguration:\n    \"\"\"HacsConfiguration class.\"\"\"\n\n    appdaemon_path: str = \"appdaemon/apps/\"\n    appdaemon: bool = False\n    config: dict[str, Any] = field(default_factory=dict)\n    config_entry: ConfigEntry | None = None\n    config_type: ConfigurationType | None = None\n    country: str = \"ALL\"\n    debug: bool = False\n    dev: bool = False\n    experimental: bool = False\n    frontend_repo_url: str = \"\"\n    frontend_repo: str = \"\"\n    netdaemon_path: str = \"netdaemon/apps/\"\n    netdaemon: bool = False\n    plugin_path: str = \"www/community/\"\n    python_script_path: str = \"python_scripts/\"\n    python_script: bool = False\n    release_limit: int = 5\n    sidepanel_icon: str = \"hacs:hacs\"\n    sidepanel_title: str = \"HACS\"\n    theme_path: str = \"themes/\"\n    theme: bool = False\n    token: str = None\n\n    def to_json(self) -> str:\n        \"\"\"Return a json string.\"\"\"\n        return asdict(self)\n\n    def update_from_dict(self, data: dict) -> None:\n        \"\"\"Set attributes from dicts.\"\"\"\n        if not isinstance(data, dict):\n            raise HacsException(\"Configuration is not valid.\")\n\n        for key in data:\n            self.__setattr__(key, data[key])\n\n\n@dataclass\nclass HacsCore:\n    \"\"\"HACS Core info.\"\"\"\n\n    config_path: pathlib.Path | None = None\n    ha_version: AwesomeVersion | None = None\n    lovelace_mode = LovelaceMode(\"yaml\")\n\n\n@dataclass\nclass HacsCommon:\n    \"\"\"Common for HACS.\"\"\"\n\n    categories: set[str] = field(default_factory=set)\n    renamed_repositories: dict[str, str] = field(default_factory=dict)\n    archived_repositories: list[str] = field(default_factory=list)\n    ignored_repositories: list[str] = field(default_factory=list)\n    skip: list[str] = field(default_factory=list)\n\n\n@dataclass\nclass HacsStatus:\n    \"\"\"HacsStatus.\"\"\"\n\n    startup: bool = True\n    new: bool = False\n\n\n@dataclass\nclass HacsSystem:\n    \"\"\"HACS System info.\"\"\"\n\n    disabled_reason: HacsDisabledReason | None = None\n    running: bool = False\n    stage = HacsStage.SETUP\n    action: bool = False\n\n    @property\n    def disabled(self) -> bool:\n        \"\"\"Return if HACS is disabled.\"\"\"\n        return self.disabled_reason is not None\n\n\n@dataclass\nclass HacsRepositories:\n    \"\"\"HACS Repositories.\"\"\"\n\n    _default_repositories: set[str] = field(default_factory=set)\n    _repositories: list[HacsRepository] = field(default_factory=list)\n    _repositories_by_full_name: dict[str, str] = field(default_factory=dict)\n    _repositories_by_id: dict[str, str] = field(default_factory=dict)\n    _removed_repositories: list[RemovedRepository] = field(default_factory=list)\n\n    @property\n    def list_all(self) -> list[HacsRepository]:\n        \"\"\"Return a list of repositories.\"\"\"\n        return self._repositories\n\n    @property\n    def list_removed(self) -> list[RemovedRepository]:\n        \"\"\"Return a list of removed repositories.\"\"\"\n        return self._removed_repositories\n\n    @property\n    def list_downloaded(self) -> list[HacsRepository]:\n        \"\"\"Return a list of downloaded repositories.\"\"\"\n        return [repo for repo in self._repositories if repo.data.installed]\n\n    def register(self, repository: HacsRepository, default: bool = False) -> None:\n        \"\"\"Register a repository.\"\"\"\n        repo_id = str(repository.data.id)\n\n        if repo_id == \"0\":\n            return\n\n        if self.is_registered(repository_id=repo_id):\n            return\n\n        if repository not in self._repositories:\n            self._repositories.append(repository)\n\n        self._repositories_by_id[repo_id] = repository\n        self._repositories_by_full_name[repository.data.full_name_lower] = repository\n\n        if default:\n            self.mark_default(repository)\n\n    def unregister(self, repository: HacsRepository) -> None:\n        \"\"\"Unregister a repository.\"\"\"\n        repo_id = str(repository.data.id)\n\n        if repo_id == \"0\":\n            return\n\n        if not self.is_registered(repository_id=repo_id):\n            return\n\n        if self.is_default(repo_id):\n            self._default_repositories.remove(repo_id)\n\n        if repository in self._repositories:\n            self._repositories.remove(repository)\n\n        self._repositories_by_id.pop(repo_id, None)\n        self._repositories_by_full_name.pop(repository.data.full_name_lower, None)\n\n    def mark_default(self, repository: HacsRepository) -> None:\n        \"\"\"Mark a repository as default.\"\"\"\n        repo_id = str(repository.data.id)\n\n        if repo_id == \"0\":\n            return\n\n        if not self.is_registered(repository_id=repo_id):\n            return\n\n        self._default_repositories.add(repo_id)\n\n    def set_repository_id(self, repository, repo_id):\n        \"\"\"Update a repository id.\"\"\"\n        existing_repo_id = str(repository.data.id)\n        if existing_repo_id == repo_id:\n            return\n        if existing_repo_id != \"0\":\n            raise ValueError(\n                f\"The repo id for {repository.data.full_name_lower} \"\n                f\"is already set to {existing_repo_id}\"\n            )\n        repository.data.id = repo_id\n        self.register(repository)\n\n    def is_default(self, repository_id: str | None = None) -> bool:\n        \"\"\"Check if a repository is default.\"\"\"\n        if not repository_id:\n            return False\n        return repository_id in self._default_repositories\n\n    def is_registered(\n        self,\n        repository_id: str | None = None,\n        repository_full_name: str | None = None,\n    ) -> bool:\n        \"\"\"Check if a repository is registered.\"\"\"\n        if repository_id is not None:\n            return repository_id in self._repositories_by_id\n        if repository_full_name is not None:\n            return repository_full_name in self._repositories_by_full_name\n        return False\n\n    def is_downloaded(\n        self,\n        repository_id: str | None = None,\n        repository_full_name: str | None = None,\n    ) -> bool:\n        \"\"\"Check if a repository is registered.\"\"\"\n        if repository_id is not None:\n            repo = self.get_by_id(repository_id)\n        if repository_full_name is not None:\n            repo = self.get_by_full_name(repository_full_name)\n        if repo is None:\n            return False\n        return repo.data.installed\n\n    def get_by_id(self, repository_id: str | None) -> HacsRepository | None:\n        \"\"\"Get repository by id.\"\"\"\n        if not repository_id:\n            return None\n        return self._repositories_by_id.get(str(repository_id))\n\n    def get_by_full_name(self, repository_full_name: str | None) -> HacsRepository | None:\n        \"\"\"Get repository by full name.\"\"\"\n        if not repository_full_name:\n            return None\n        return self._repositories_by_full_name.get(repository_full_name.lower())\n\n    def is_removed(self, repository_full_name: str) -> bool:\n        \"\"\"Check if a repository is removed.\"\"\"\n        return repository_full_name in (\n            repository.repository for repository in self._removed_repositories\n        )\n\n    def removed_repository(self, repository_full_name: str) -> RemovedRepository:\n        \"\"\"Get repository by full name.\"\"\"\n        if self.is_removed(repository_full_name):\n            if removed := [\n                repository\n                for repository in self._removed_repositories\n                if repository.repository == repository_full_name\n            ]:\n                return removed[0]\n\n        removed = RemovedRepository(repository=repository_full_name)\n        self._removed_repositories.append(removed)\n        return removed\n\n\nclass HacsBase:\n    \"\"\"Base HACS class.\"\"\"\n\n    common = HacsCommon()\n    configuration = HacsConfiguration()\n    core = HacsCore()\n    data: HacsData | None = None\n    frontend_version: str | None = None\n    github: GitHub | None = None\n    githubapi: GitHubAPI | None = None\n    hass: HomeAssistant | None = None\n    integration: Integration | None = None\n    log: logging.Logger = LOGGER\n    queue: QueueManager | None = None\n    recuring_tasks = []\n    repositories: HacsRepositories = HacsRepositories()\n    repository: AIOGitHubAPIRepository | None = None\n    session: ClientSession | None = None\n    stage: HacsStage | None = None\n    status = HacsStatus()\n    system = HacsSystem()\n    validation: ValidationManager | None = None\n    version: str | None = None\n\n    @property\n    def integration_dir(self) -> pathlib.Path:\n        \"\"\"Return the HACS integration dir.\"\"\"\n        return self.integration.file_path\n\n    def set_stage(self, stage: HacsStage | None) -> None:\n        \"\"\"Set HACS stage.\"\"\"\n        if stage and self.stage == stage:\n            return\n\n        self.stage = stage\n        if stage is not None:\n            self.log.info(\"Stage changed: %s\", self.stage)\n            self.async_dispatch(HacsDispatchEvent.STAGE, {\"stage\": self.stage})\n\n    def disable_hacs(self, reason: HacsDisabledReason) -> None:\n        \"\"\"Disable HACS.\"\"\"\n        if self.system.disabled_reason == reason:\n            return\n\n        self.system.disabled_reason = reason\n        if reason != HacsDisabledReason.REMOVED:\n            self.log.error(\"HACS is disabled - %s\", reason)\n\n        if (\n            reason == HacsDisabledReason.INVALID_TOKEN\n            and self.configuration.config_type == ConfigurationType.CONFIG_ENTRY\n        ):\n            self.configuration.config_entry.state = ConfigEntryState.SETUP_ERROR\n            self.configuration.config_entry.reason = \"Authentication failed\"\n            self.hass.add_job(self.configuration.config_entry.async_start_reauth, self.hass)\n\n    def enable_hacs(self) -> None:\n        \"\"\"Enable HACS.\"\"\"\n        if self.system.disabled_reason is not None:\n            self.system.disabled_reason = None\n            self.log.info(\"HACS is enabled\")\n\n    def enable_hacs_category(self, category: HacsCategory) -> None:\n        \"\"\"Enable HACS category.\"\"\"\n        if category not in self.common.categories:\n            self.log.info(\"Enable category: %s\", category)\n            self.common.categories.add(category)\n\n    def disable_hacs_category(self, category: HacsCategory) -> None:\n        \"\"\"Disable HACS category.\"\"\"\n        if category in self.common.categories:\n            self.log.info(\"Disabling category: %s\", category)\n            self.common.categories.pop(category)\n\n    async def async_save_file(self, file_path: str, content: Any) -> bool:\n        \"\"\"Save a file.\"\"\"\n\n        def _write_file():\n            with open(\n                file_path,\n                mode=\"w\" if isinstance(content, str) else \"wb\",\n                encoding=\"utf-8\" if isinstance(content, str) else None,\n                errors=\"ignore\" if isinstance(content, str) else None,\n            ) as file_handler:\n                file_handler.write(content)\n\n            # Create gz for .js files\n            if os.path.isfile(file_path):\n                if file_path.endswith(\".js\"):\n                    with open(file_path, \"rb\") as f_in:\n                        with gzip.open(file_path + \".gz\", \"wb\") as f_out:\n                            shutil.copyfileobj(f_in, f_out)\n\n            # LEGACY! Remove with 2.0\n            if \"themes\" in file_path and file_path.endswith(\".yaml\"):\n                filename = file_path.split(\"/\")[-1]\n                base = file_path.split(\"/themes/\")[0]\n                combined = f\"{base}/themes/{filename}\"\n                if os.path.exists(combined):\n                    self.log.info(\"Removing old theme file %s\", combined)\n                    os.remove(combined)\n\n        try:\n            await self.hass.async_add_executor_job(_write_file)\n        except BaseException as error:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n            self.log.error(\"Could not write data to %s - %s\", file_path, error)\n            return False\n\n        return os.path.exists(file_path)\n\n    async def async_can_update(self) -> int:\n        \"\"\"Helper to calculate the number of repositories we can fetch data for.\"\"\"\n        try:\n            response = await self.async_github_api_method(self.githubapi.rate_limit)\n            if ((limit := response.data.resources.core.remaining or 0) - 1000) >= 10:\n                return math.floor((limit - 1000) / 10)\n            reset = dt.as_local(dt.utc_from_timestamp(response.data.resources.core.reset))\n            self.log.info(\n                \"GitHub API ratelimited - %s remaining (%s)\",\n                response.data.resources.core.remaining,\n                f\"{reset.hour}:{reset.minute}:{reset.second}\",\n            )\n            self.disable_hacs(HacsDisabledReason.RATE_LIMIT)\n        except BaseException as exception:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n            self.log.exception(exception)\n\n        return 0\n\n    async def async_github_get_hacs_default_file(self, filename: str) -> list:\n        \"\"\"Get the content of a default file.\"\"\"\n        response = await self.async_github_api_method(\n            method=self.githubapi.repos.contents.get,\n            repository=HacsGitHubRepo.DEFAULT,\n            path=filename,\n        )\n        if response is None:\n            return []\n\n        return json_loads(decode_content(response.data.content))\n\n    async def async_github_api_method(\n        self,\n        method: Callable[[], Awaitable[TV]],\n        *args,\n        raise_exception: bool = True,\n        **kwargs,\n    ) -> TV | None:\n        \"\"\"Call a GitHub API method\"\"\"\n        _exception = None\n\n        try:\n            return await method(*args, **kwargs)\n        except GitHubAuthenticationException as exception:\n            self.disable_hacs(HacsDisabledReason.INVALID_TOKEN)\n            _exception = exception\n        except GitHubRatelimitException as exception:\n            self.disable_hacs(HacsDisabledReason.RATE_LIMIT)\n            _exception = exception\n        except GitHubNotModifiedException as exception:\n            raise exception\n        except GitHubException as exception:\n            _exception = exception\n        except BaseException as exception:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n            self.log.exception(exception)\n            _exception = exception\n\n        if raise_exception and _exception is not None:\n            raise HacsException(_exception)\n        return None\n\n    async def async_register_repository(\n        self,\n        repository_full_name: str,\n        category: HacsCategory,\n        *,\n        check: bool = True,\n        ref: str | None = None,\n        repository_id: str | None = None,\n        default: bool = False,\n    ) -> None:\n        \"\"\"Register a repository.\"\"\"\n        if repository_full_name in self.common.skip:\n            if repository_full_name != HacsGitHubRepo.INTEGRATION:\n                raise HacsExpectedException(f\"Skipping {repository_full_name}\")\n\n        if repository_full_name == \"home-assistant/core\":\n            raise HomeAssistantCoreRepositoryException()\n\n        if repository_full_name == \"home-assistant/addons\" or repository_full_name.startswith(\n            \"hassio-addons/\"\n        ):\n            raise AddonRepositoryException()\n\n        if category not in RERPOSITORY_CLASSES:\n            raise HacsException(f\"{category} is not a valid repository category.\")\n\n        if (renamed := self.common.renamed_repositories.get(repository_full_name)) is not None:\n            repository_full_name = renamed\n\n        repository: HacsRepository = RERPOSITORY_CLASSES[category](self, repository_full_name)\n        if check:\n            try:\n                await repository.async_registration(ref)\n                if self.status.new:\n                    repository.data.new = False\n                if repository.validate.errors:\n                    self.common.skip.append(repository.data.full_name)\n                    if not self.status.startup:\n                        self.log.error(\"Validation for %s failed.\", repository_full_name)\n                    if self.system.action:\n                        raise HacsException(\n                            f\"::error:: Validation for {repository_full_name} failed.\"\n                        )\n                    return repository.validate.errors\n                if self.system.action:\n                    repository.logger.info(\"%s Validation completed\", repository.string)\n                else:\n                    repository.logger.info(\"%s Registration completed\", repository.string)\n            except (HacsRepositoryExistException, HacsRepositoryArchivedException):\n                return\n            except AIOGitHubAPIException as exception:\n                self.common.skip.append(repository.data.full_name)\n                raise HacsException(\n                    f\"Validation for {repository_full_name} failed with {exception}.\"\n                ) from exception\n\n        if repository_id is not None:\n            repository.data.id = repository_id\n\n        if str(repository.data.id) != \"0\" and (\n            exists := self.repositories.get_by_id(repository.data.id)\n        ):\n            self.repositories.unregister(exists)\n\n        else:\n            if self.hass is not None and ((check and repository.data.new) or self.status.new):\n                self.async_dispatch(\n                    HacsDispatchEvent.REPOSITORY,\n                    {\n                        \"action\": \"registration\",\n                        \"repository\": repository.data.full_name,\n                        \"repository_id\": repository.data.id,\n                    },\n                )\n\n        self.repositories.register(repository, default)\n\n    async def startup_tasks(self, _=None) -> None:\n        \"\"\"Tasks that are started after setup.\"\"\"\n        self.set_stage(HacsStage.STARTUP)\n\n        try:\n            repository = self.repositories.get_by_full_name(HacsGitHubRepo.INTEGRATION)\n            if repository is None:\n                await self.async_register_repository(\n                    repository_full_name=HacsGitHubRepo.INTEGRATION,\n                    category=HacsCategory.INTEGRATION,\n                    default=True,\n                )\n                repository = self.repositories.get_by_full_name(HacsGitHubRepo.INTEGRATION)\n            if repository is None:\n                raise HacsException(\"Unknown error\")\n\n            repository.data.installed = True\n            repository.data.installed_version = self.integration.version.string\n            repository.data.new = False\n            repository.data.releases = True\n\n            self.repository = repository.repository_object\n            self.repositories.mark_default(repository)\n        except HacsException as exception:\n            if \"403\" in str(exception):\n                self.log.critical(\n                    \"GitHub API is ratelimited, or the token is wrong.\",\n                )\n            else:\n                self.log.critical(\"Could not load HACS! - %s\", exception)\n            self.disable_hacs(HacsDisabledReason.LOAD_HACS)\n\n        if critical := await async_load_from_store(self.hass, \"critical\"):\n            for repo in critical:\n                if not repo[\"acknowledged\"]:\n                    self.log.critical(\"URGENT!: Check the HACS panel!\")\n                    self.hass.components.persistent_notification.create(\n                        title=\"URGENT!\", message=\"**Check the HACS panel!**\"\n                    )\n                    break\n\n        self.recuring_tasks.append(\n            self.hass.helpers.event.async_track_time_interval(\n                self.async_get_all_category_repositories, timedelta(hours=3)\n            )\n        )\n        self.recuring_tasks.append(\n            self.hass.helpers.event.async_track_time_interval(\n                self.async_update_all_repositories, timedelta(hours=25)\n            )\n        )\n        self.recuring_tasks.append(\n            self.hass.helpers.event.async_track_time_interval(\n                self.async_check_rate_limit, timedelta(minutes=5)\n            )\n        )\n        self.recuring_tasks.append(\n            self.hass.helpers.event.async_track_time_interval(\n                self.async_prosess_queue, timedelta(minutes=10)\n            )\n        )\n        self.recuring_tasks.append(\n            self.hass.helpers.event.async_track_time_interval(\n                self.async_update_downloaded_repositories, timedelta(hours=2)\n            )\n        )\n        self.recuring_tasks.append(\n            self.hass.helpers.event.async_track_time_interval(\n                self.async_handle_critical_repositories, timedelta(hours=2)\n            )\n        )\n\n        self.hass.bus.async_listen_once(\n            EVENT_HOMEASSISTANT_FINAL_WRITE, self.data.async_force_write\n        )\n\n        self.status.startup = False\n        self.async_dispatch(HacsDispatchEvent.STATUS, {})\n\n        await self.async_handle_removed_repositories()\n        await self.async_get_all_category_repositories()\n        await self.async_update_downloaded_repositories()\n\n        self.set_stage(HacsStage.RUNNING)\n\n        self.async_dispatch(HacsDispatchEvent.RELOAD, {\"force\": True})\n\n        await self.async_handle_critical_repositories()\n        await self.async_prosess_queue()\n\n        self.async_dispatch(HacsDispatchEvent.STATUS, {})\n\n    async def async_download_file(self, url: str, *, headers: dict | None = None) -> bytes | None:\n        \"\"\"Download files, and return the content.\"\"\"\n        if url is None:\n            return None\n\n        if \"tags/\" in url:\n            url = url.replace(\"tags/\", \"\")\n\n        self.log.debug(\"Downloading %s\", url)\n        timeouts = 0\n\n        while timeouts < 5:\n            try:\n                request = await self.session.get(\n                    url=url,\n                    timeout=ClientTimeout(total=60),\n                    headers=headers,\n                )\n\n                # Make sure that we got a valid result\n                if request.status == 200:\n                    return await request.read()\n\n                raise HacsException(\n                    f\"Got status code {request.status} when trying to download {url}\"\n                )\n            except asyncio.TimeoutError:\n                self.log.warning(\n                    \"A timeout of 60! seconds was encountered while downloading %s, \"\n                    \"using over 60 seconds to download a single file is not normal. \"\n                    \"This is not a problem with HACS but how your host communicates with GitHub. \"\n                    \"Retrying up to 5 times to mask/hide your host/network problems to \"\n                    \"stop the flow of issues opened about it. \"\n                    \"Tries left %s\",\n                    url,\n                    (4 - timeouts),\n                )\n                timeouts += 1\n                await asyncio.sleep(1)\n                continue\n\n            except BaseException as exception:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n                self.log.exception(\"Download failed - %s\", exception)\n\n            return None\n\n    async def async_recreate_entities(self) -> None:\n        \"\"\"Recreate entities.\"\"\"\n        if self.configuration == ConfigurationType.YAML or not self.configuration.experimental:\n            return\n\n        platforms = [Platform.SENSOR, Platform.UPDATE]\n\n        await self.hass.config_entries.async_unload_platforms(\n            entry=self.configuration.config_entry,\n            platforms=platforms,\n        )\n\n        self.hass.config_entries.async_setup_platforms(self.configuration.config_entry, platforms)\n\n    @callback\n    def async_dispatch(self, signal: HacsDispatchEvent, data: dict | None = None) -> None:\n        \"\"\"Dispatch a signal with data.\"\"\"\n        async_dispatcher_send(self.hass, signal, data)\n\n    def set_active_categories(self) -> None:\n        \"\"\"Set the active categories.\"\"\"\n        self.common.categories = set()\n        for category in (HacsCategory.INTEGRATION, HacsCategory.PLUGIN):\n            self.enable_hacs_category(HacsCategory(category))\n\n        if HacsCategory.PYTHON_SCRIPT in self.hass.config.components:\n            self.enable_hacs_category(HacsCategory.PYTHON_SCRIPT)\n\n        if self.hass.services.has_service(\"frontend\", \"reload_themes\"):\n            self.enable_hacs_category(HacsCategory.THEME)\n\n        if self.configuration.appdaemon:\n            self.enable_hacs_category(HacsCategory.APPDAEMON)\n        if self.configuration.netdaemon:\n            self.enable_hacs_category(HacsCategory.NETDAEMON)\n\n    async def async_get_all_category_repositories(self, _=None) -> None:\n        \"\"\"Get all category repositories.\"\"\"\n        if self.system.disabled:\n            return\n        self.log.info(\"Loading known repositories\")\n        await asyncio.gather(\n            *[\n                self.async_get_category_repositories(HacsCategory(category))\n                for category in self.common.categories or []\n            ]\n        )\n\n    async def async_get_category_repositories(self, category: HacsCategory) -> None:\n        \"\"\"Get repositories from category.\"\"\"\n        if self.system.disabled:\n            return\n        try:\n            repositories = await self.async_github_get_hacs_default_file(category)\n        except HacsException:\n            return\n\n        for repo in repositories:\n            if self.common.renamed_repositories.get(repo):\n                repo = self.common.renamed_repositories[repo]\n            if self.repositories.is_removed(repo):\n                continue\n            if repo in self.common.archived_repositories:\n                continue\n            repository = self.repositories.get_by_full_name(repo)\n            if repository is not None:\n                self.repositories.mark_default(repository)\n                if self.status.new and self.configuration.dev:\n                    # Force update for new installations\n                    self.queue.add(repository.common_update())\n                continue\n\n            self.queue.add(\n                self.async_register_repository(\n                    repository_full_name=repo,\n                    category=category,\n                    default=True,\n                )\n            )\n\n    async def async_update_all_repositories(self, _=None) -> None:\n        \"\"\"Update all repositories.\"\"\"\n        if self.system.disabled:\n            return\n        self.log.debug(\"Starting recurring background task for all repositories\")\n\n        for repository in self.repositories.list_all:\n            if repository.data.category in self.common.categories:\n                self.queue.add(repository.common_update())\n\n        self.async_dispatch(HacsDispatchEvent.REPOSITORY, {\"action\": \"reload\"})\n        self.log.debug(\"Recurring background task for all repositories done\")\n\n    async def async_check_rate_limit(self, _=None) -> None:\n        \"\"\"Check rate limit.\"\"\"\n        if not self.system.disabled or self.system.disabled_reason != HacsDisabledReason.RATE_LIMIT:\n            return\n\n        self.log.debug(\"Checking if ratelimit has lifted\")\n        can_update = await self.async_can_update()\n        self.log.debug(\"Ratelimit indicate we can update %s\", can_update)\n        if can_update > 0:\n            self.enable_hacs()\n            await self.async_prosess_queue()\n\n    async def async_prosess_queue(self, _=None) -> None:\n        \"\"\"Process the queue.\"\"\"\n        if self.system.disabled:\n            self.log.debug(\"HACS is disabled\")\n            return\n        if not self.queue.has_pending_tasks:\n            self.log.debug(\"Nothing in the queue\")\n            return\n        if self.queue.running:\n            self.log.debug(\"Queue is already running\")\n            return\n\n        async def _handle_queue():\n            if not self.queue.has_pending_tasks:\n                await self.data.async_write()\n                return\n            can_update = await self.async_can_update()\n            self.log.debug(\n                \"Can update %s repositories, \" \"items in queue %s\",\n                can_update,\n                self.queue.pending_tasks,\n            )\n            if can_update != 0:\n                try:\n                    await self.queue.execute(can_update)\n                except HacsExecutionStillInProgress:\n                    return\n\n                await _handle_queue()\n\n        await _handle_queue()\n\n    async def async_handle_removed_repositories(self, _=None) -> None:\n        \"\"\"Handle removed repositories.\"\"\"\n        if self.system.disabled:\n            return\n        need_to_save = False\n        self.log.info(\"Loading removed repositories\")\n\n        try:\n            removed_repositories = await self.async_github_get_hacs_default_file(\n                HacsCategory.REMOVED\n            )\n        except HacsException:\n            return\n\n        for item in removed_repositories:\n            removed = self.repositories.removed_repository(item[\"repository\"])\n            removed.update_data(item)\n\n        for removed in self.repositories.list_removed:\n            if (repository := self.repositories.get_by_full_name(removed.repository)) is None:\n                continue\n            if repository.data.full_name in self.common.ignored_repositories:\n                continue\n            if repository.data.installed and removed.removal_type != \"critical\":\n                self.log.warning(\n                    \"You have '%s' installed with HACS \"\n                    \"this repository has been removed from HACS, please consider removing it. \"\n                    \"Removal reason (%s)\",\n                    repository.data.full_name,\n                    removed.reason,\n                )\n            else:\n                need_to_save = True\n                repository.remove()\n\n        if need_to_save:\n            await self.data.async_write()\n\n    async def async_update_downloaded_repositories(self, _=None) -> None:\n        \"\"\"Execute the task.\"\"\"\n        if self.system.disabled:\n            return\n        self.log.info(\"Starting recurring background task for downloaded repositories\")\n\n        for repository in self.repositories.list_downloaded:\n            if repository.data.category in self.common.categories:\n                self.queue.add(repository.update_repository(ignore_issues=True))\n\n        self.log.debug(\"Recurring background task for downloaded repositories done\")\n\n    async def async_handle_critical_repositories(self, _=None) -> None:\n        \"\"\"Handle critical repositories.\"\"\"\n        critical_queue = QueueManager(hass=self.hass)\n        instored = []\n        critical = []\n        was_installed = False\n\n        try:\n            critical = await self.async_github_get_hacs_default_file(\"critical\")\n        except GitHubNotModifiedException:\n            return\n        except HacsException:\n            pass\n\n        if not critical:\n            self.log.debug(\"No critical repositories\")\n            return\n\n        stored_critical = await async_load_from_store(self.hass, \"critical\")\n\n        for stored in stored_critical or []:\n            instored.append(stored[\"repository\"])\n\n        stored_critical = []\n\n        for repository in critical:\n            removed_repo = self.repositories.removed_repository(repository[\"repository\"])\n            removed_repo.removal_type = \"critical\"\n            repo = self.repositories.get_by_full_name(repository[\"repository\"])\n\n            stored = {\n                \"repository\": repository[\"repository\"],\n                \"reason\": repository[\"reason\"],\n                \"link\": repository[\"link\"],\n                \"acknowledged\": True,\n            }\n            if repository[\"repository\"] not in instored:\n                if repo is not None and repo.data.installed:\n                    self.log.critical(\n                        \"Removing repository %s, it is marked as critical\",\n                        repository[\"repository\"],\n                    )\n                    was_installed = True\n                    stored[\"acknowledged\"] = False\n                    # Remove from HACS\n                    critical_queue.add(repo.uninstall())\n                    repo.remove()\n\n            stored_critical.append(stored)\n            removed_repo.update_data(stored)\n\n        # Uninstall\n        await critical_queue.execute()\n\n        # Save to FS\n        await async_save_to_store(self.hass, \"critical\", stored_critical)\n\n        # Restart HASS\n        if was_installed:\n            self.log.critical(\"Restarting Home Assistant\")\n            self.hass.async_create_task(self.hass.async_stop(100))\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/config_flow.py",
    "content": "\"\"\"Adds config flow for HACS.\"\"\"\nfrom aiogithubapi import GitHubDeviceAPI, GitHubException\nfrom aiogithubapi.common.const import OAUTH_USER_LOGIN\nfrom awesomeversion import AwesomeVersion\nfrom homeassistant import config_entries\nfrom homeassistant.const import __version__ as HAVERSION\nfrom homeassistant.core import callback\nfrom homeassistant.helpers import aiohttp_client\nfrom homeassistant.helpers.event import async_call_later\nfrom homeassistant.loader import async_get_integration\nimport voluptuous as vol\n\nfrom .base import HacsBase\nfrom .const import CLIENT_ID, DOMAIN, MINIMUM_HA_VERSION\nfrom .enums import ConfigurationType\nfrom .utils.configuration_schema import RELEASE_LIMIT, hacs_config_option_schema\nfrom .utils.logger import LOGGER\n\n\nclass HacsFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):\n    \"\"\"Config flow for HACS.\"\"\"\n\n    VERSION = 1\n    CONNECTION_CLASS = config_entries.CONN_CLASS_CLOUD_POLL\n\n    def __init__(self):\n        \"\"\"Initialize.\"\"\"\n        self._errors = {}\n        self.device = None\n        self.activation = None\n        self.log = LOGGER\n        self._progress_task = None\n        self._login_device = None\n        self._reauth = False\n\n    async def async_step_user(self, user_input):\n        \"\"\"Handle a flow initialized by the user.\"\"\"\n        self._errors = {}\n        if self._async_current_entries():\n            return self.async_abort(reason=\"single_instance_allowed\")\n        if self.hass.data.get(DOMAIN):\n            return self.async_abort(reason=\"single_instance_allowed\")\n\n        if user_input:\n            if [x for x in user_input if not user_input[x]]:\n                self._errors[\"base\"] = \"acc\"\n                return await self._show_config_form(user_input)\n\n            return await self.async_step_device(user_input)\n\n        ## Initial form\n        return await self._show_config_form(user_input)\n\n    async def async_step_device(self, _user_input):\n        \"\"\"Handle device steps\"\"\"\n\n        async def _wait_for_activation(_=None):\n            if self._login_device is None or self._login_device.expires_in is None:\n                async_call_later(self.hass, 1, _wait_for_activation)\n                return\n\n            response = await self.device.activation(device_code=self._login_device.device_code)\n            self.activation = response.data\n            self.hass.async_create_task(\n                self.hass.config_entries.flow.async_configure(flow_id=self.flow_id)\n            )\n\n        if not self.activation:\n            integration = await async_get_integration(self.hass, DOMAIN)\n            if not self.device:\n                self.device = GitHubDeviceAPI(\n                    client_id=CLIENT_ID,\n                    session=aiohttp_client.async_get_clientsession(self.hass),\n                    **{\"client_name\": f\"HACS/{integration.version}\"},\n                )\n            async_call_later(self.hass, 1, _wait_for_activation)\n            try:\n                response = await self.device.register()\n                self._login_device = response.data\n                return self.async_show_progress(\n                    step_id=\"device\",\n                    progress_action=\"wait_for_device\",\n                    description_placeholders={\n                        \"url\": OAUTH_USER_LOGIN,\n                        \"code\": self._login_device.user_code,\n                    },\n                )\n            except GitHubException as exception:\n                self.log.error(exception)\n                return self.async_abort(reason=\"github\")\n\n        return self.async_show_progress_done(next_step_id=\"device_done\")\n\n    async def _show_config_form(self, user_input):\n        \"\"\"Show the configuration form to edit location data.\"\"\"\n\n        if not user_input:\n            user_input = {}\n\n        if AwesomeVersion(HAVERSION) < MINIMUM_HA_VERSION:\n            return self.async_abort(\n                reason=\"min_ha_version\",\n                description_placeholders={\"version\": MINIMUM_HA_VERSION},\n            )\n        return self.async_show_form(\n            step_id=\"user\",\n            data_schema=vol.Schema(\n                {\n                    vol.Required(\"acc_logs\", default=user_input.get(\"acc_logs\", False)): bool,\n                    vol.Required(\"acc_addons\", default=user_input.get(\"acc_addons\", False)): bool,\n                    vol.Required(\n                        \"acc_untested\", default=user_input.get(\"acc_untested\", False)\n                    ): bool,\n                    vol.Required(\"acc_disable\", default=user_input.get(\"acc_disable\", False)): bool,\n                }\n            ),\n            errors=self._errors,\n        )\n\n    async def async_step_device_done(self, _user_input):\n        \"\"\"Handle device steps\"\"\"\n        if self._reauth:\n            existing_entry = self.hass.config_entries.async_get_entry(self.context[\"entry_id\"])\n            self.hass.config_entries.async_update_entry(\n                existing_entry, data={\"token\": self.activation.access_token}\n            )\n            await self.hass.config_entries.async_reload(existing_entry.entry_id)\n            return self.async_abort(reason=\"reauth_successful\")\n\n        return self.async_create_entry(title=\"\", data={\"token\": self.activation.access_token})\n\n    async def async_step_reauth(self, user_input=None):\n        \"\"\"Perform reauth upon an API authentication error.\"\"\"\n        return await self.async_step_reauth_confirm()\n\n    async def async_step_reauth_confirm(self, user_input=None):\n        \"\"\"Dialog that informs the user that reauth is required.\"\"\"\n        if user_input is None:\n            return self.async_show_form(\n                step_id=\"reauth_confirm\",\n                data_schema=vol.Schema({}),\n            )\n        self._reauth = True\n        return await self.async_step_device(None)\n\n    @staticmethod\n    @callback\n    def async_get_options_flow(config_entry):\n        return HacsOptionsFlowHandler(config_entry)\n\n\nclass HacsOptionsFlowHandler(config_entries.OptionsFlow):\n    \"\"\"HACS config flow options handler.\"\"\"\n\n    def __init__(self, config_entry):\n        \"\"\"Initialize HACS options flow.\"\"\"\n        self.config_entry = config_entry\n\n    async def async_step_init(self, _user_input=None):\n        \"\"\"Manage the options.\"\"\"\n        return await self.async_step_user()\n\n    async def async_step_user(self, user_input=None):\n        \"\"\"Handle a flow initialized by the user.\"\"\"\n        hacs: HacsBase = self.hass.data.get(DOMAIN)\n        if user_input is not None:\n            limit = int(user_input.get(RELEASE_LIMIT, 5))\n            if limit <= 0 or limit > 100:\n                return self.async_abort(reason=\"release_limit_value\")\n            return self.async_create_entry(title=\"\", data=user_input)\n\n        if hacs is None or hacs.configuration is None:\n            return self.async_abort(reason=\"not_setup\")\n\n        if hacs.configuration.config_type == ConfigurationType.YAML:\n            schema = {vol.Optional(\"not_in_use\", default=\"\"): str}\n        else:\n            schema = hacs_config_option_schema(self.config_entry.options)\n            del schema[\"frontend_repo\"]\n            del schema[\"frontend_repo_url\"]\n\n        return self.async_show_form(step_id=\"user\", data_schema=vol.Schema(schema))\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/const.py",
    "content": "\"\"\"Constants for HACS\"\"\"\nfrom typing import TypeVar\n\nfrom aiogithubapi.common.const import ACCEPT_HEADERS\n\nNAME_SHORT = \"HACS\"\nDOMAIN = \"hacs\"\nCLIENT_ID = \"395a8e669c5de9f7c6e8\"\nMINIMUM_HA_VERSION = \"2022.4.0\"\n\nTV = TypeVar(\"TV\")\n\nPACKAGE_NAME = \"custom_components.hacs\"\n\nDEFAULT_CONCURRENT_TASKS = 15\nDEFAULT_CONCURRENT_BACKOFF_TIME = 1\n\nHACS_ACTION_GITHUB_API_HEADERS = {\n    \"User-Agent\": \"HACS/action\",\n    \"Accept\": ACCEPT_HEADERS[\"preview\"],\n}\n\nVERSION_STORAGE = \"6\"\nSTORENAME = \"hacs\"\n\nHACS_SYSTEM_ID = \"0717a0cd-745c-48fd-9b16-c8534c9704f9-bc944b0f-fd42-4a58-a072-ade38d1444cd\"\n\nSTARTUP = \"\"\"\n-------------------------------------------------------------------\nHACS (Home Assistant Community Store)\n\nVersion: %s\nThis is a custom integration\nIf you have any issues with this you need to open an issue here:\nhttps://github.com/hacs/integration/issues\n-------------------------------------------------------------------\n\"\"\"\n\nLOCALE = [\n    \"ALL\",\n    \"AF\",\n    \"AL\",\n    \"DZ\",\n    \"AS\",\n    \"AD\",\n    \"AO\",\n    \"AI\",\n    \"AQ\",\n    \"AG\",\n    \"AR\",\n    \"AM\",\n    \"AW\",\n    \"AU\",\n    \"AT\",\n    \"AZ\",\n    \"BS\",\n    \"BH\",\n    \"BD\",\n    \"BB\",\n    \"BY\",\n    \"BE\",\n    \"BZ\",\n    \"BJ\",\n    \"BM\",\n    \"BT\",\n    \"BO\",\n    \"BQ\",\n    \"BA\",\n    \"BW\",\n    \"BV\",\n    \"BR\",\n    \"IO\",\n    \"BN\",\n    \"BG\",\n    \"BF\",\n    \"BI\",\n    \"KH\",\n    \"CM\",\n    \"CA\",\n    \"CV\",\n    \"KY\",\n    \"CF\",\n    \"TD\",\n    \"CL\",\n    \"CN\",\n    \"CX\",\n    \"CC\",\n    \"CO\",\n    \"KM\",\n    \"CG\",\n    \"CD\",\n    \"CK\",\n    \"CR\",\n    \"HR\",\n    \"CU\",\n    \"CW\",\n    \"CY\",\n    \"CZ\",\n    \"CI\",\n    \"DK\",\n    \"DJ\",\n    \"DM\",\n    \"DO\",\n    \"EC\",\n    \"EG\",\n    \"SV\",\n    \"GQ\",\n    \"ER\",\n    \"EE\",\n    \"ET\",\n    \"FK\",\n    \"FO\",\n    \"FJ\",\n    \"FI\",\n    \"FR\",\n    \"GF\",\n    \"PF\",\n    \"TF\",\n    \"GA\",\n    \"GM\",\n    \"GE\",\n    \"DE\",\n    \"GH\",\n    \"GI\",\n    \"GR\",\n    \"GL\",\n    \"GD\",\n    \"GP\",\n    \"GU\",\n    \"GT\",\n    \"GG\",\n    \"GN\",\n    \"GW\",\n    \"GY\",\n    \"HT\",\n    \"HM\",\n    \"VA\",\n    \"HN\",\n    \"HK\",\n    \"HU\",\n    \"IS\",\n    \"IN\",\n    \"ID\",\n    \"IR\",\n    \"IQ\",\n    \"IE\",\n    \"IM\",\n    \"IL\",\n    \"IT\",\n    \"JM\",\n    \"JP\",\n    \"JE\",\n    \"JO\",\n    \"KZ\",\n    \"KE\",\n    \"KI\",\n    \"KP\",\n    \"KR\",\n    \"KW\",\n    \"KG\",\n    \"LA\",\n    \"LV\",\n    \"LB\",\n    \"LS\",\n    \"LR\",\n    \"LY\",\n    \"LI\",\n    \"LT\",\n    \"LU\",\n    \"MO\",\n    \"MK\",\n    \"MG\",\n    \"MW\",\n    \"MY\",\n    \"MV\",\n    \"ML\",\n    \"MT\",\n    \"MH\",\n    \"MQ\",\n    \"MR\",\n    \"MU\",\n    \"YT\",\n    \"MX\",\n    \"FM\",\n    \"MD\",\n    \"MC\",\n    \"MN\",\n    \"ME\",\n    \"MS\",\n    \"MA\",\n    \"MZ\",\n    \"MM\",\n    \"NA\",\n    \"NR\",\n    \"NP\",\n    \"NL\",\n    \"NC\",\n    \"NZ\",\n    \"NI\",\n    \"NE\",\n    \"NG\",\n    \"NU\",\n    \"NF\",\n    \"MP\",\n    \"NO\",\n    \"OM\",\n    \"PK\",\n    \"PW\",\n    \"PS\",\n    \"PA\",\n    \"PG\",\n    \"PY\",\n    \"PE\",\n    \"PH\",\n    \"PN\",\n    \"PL\",\n    \"PT\",\n    \"PR\",\n    \"QA\",\n    \"RO\",\n    \"RU\",\n    \"RW\",\n    \"RE\",\n    \"BL\",\n    \"SH\",\n    \"KN\",\n    \"LC\",\n    \"MF\",\n    \"PM\",\n    \"VC\",\n    \"WS\",\n    \"SM\",\n    \"ST\",\n    \"SA\",\n    \"SN\",\n    \"RS\",\n    \"SC\",\n    \"SL\",\n    \"SG\",\n    \"SX\",\n    \"SK\",\n    \"SI\",\n    \"SB\",\n    \"SO\",\n    \"ZA\",\n    \"GS\",\n    \"SS\",\n    \"ES\",\n    \"LK\",\n    \"SD\",\n    \"SR\",\n    \"SJ\",\n    \"SZ\",\n    \"SE\",\n    \"CH\",\n    \"SY\",\n    \"TW\",\n    \"TJ\",\n    \"TZ\",\n    \"TH\",\n    \"TL\",\n    \"TG\",\n    \"TK\",\n    \"TO\",\n    \"TT\",\n    \"TN\",\n    \"TR\",\n    \"TM\",\n    \"TC\",\n    \"TV\",\n    \"UG\",\n    \"UA\",\n    \"AE\",\n    \"GB\",\n    \"US\",\n    \"UM\",\n    \"UY\",\n    \"UZ\",\n    \"VU\",\n    \"VE\",\n    \"VN\",\n    \"VG\",\n    \"VI\",\n    \"WF\",\n    \"EH\",\n    \"YE\",\n    \"ZM\",\n    \"ZW\",\n]\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/diagnostics.py",
    "content": "\"\"\"Diagnostics support for HACS.\"\"\"\nfrom __future__ import annotations\n\nfrom typing import Any\n\nfrom aiogithubapi import GitHubException\nfrom homeassistant.components.diagnostics import async_redact_data\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.core import HomeAssistant\n\nfrom .base import HacsBase\nfrom .const import DOMAIN\nfrom .utils.configuration_schema import TOKEN\n\n\nasync def async_get_config_entry_diagnostics(\n    hass: HomeAssistant,\n    entry: ConfigEntry,\n) -> dict[str, Any]:\n    \"\"\"Return diagnostics for a config entry.\"\"\"\n    hacs: HacsBase = hass.data[DOMAIN]\n\n    data = {\n        \"entry\": entry.as_dict(),\n        \"hacs\": {\n            \"stage\": hacs.stage,\n            \"version\": hacs.version,\n            \"disabled_reason\": hacs.system.disabled_reason,\n            \"new\": hacs.status.new,\n            \"startup\": hacs.status.startup,\n            \"categories\": hacs.common.categories,\n            \"renamed_repositories\": hacs.common.renamed_repositories,\n            \"archived_repositories\": hacs.common.archived_repositories,\n            \"ignored_repositories\": hacs.common.ignored_repositories,\n            \"lovelace_mode\": hacs.core.lovelace_mode,\n            \"configuration\": {},\n        },\n        \"custom_repositories\": [\n            repo.data.full_name\n            for repo in hacs.repositories.list_all\n            if not hacs.repositories.is_default(str(repo.data.id))\n        ],\n        \"repositories\": [],\n    }\n\n    for key in (\n        \"appdaemon\",\n        \"country\",\n        \"debug\",\n        \"dev\",\n        \"experimental\",\n        \"netdaemon\",\n        \"python_script\",\n        \"release_limit\",\n        \"theme\",\n    ):\n        data[\"hacs\"][\"configuration\"][key] = getattr(hacs.configuration, key, None)\n\n    for repository in hacs.repositories.list_downloaded:\n        data[\"repositories\"].append(\n            {\n                \"data\": repository.data.to_json(),\n                \"integration_manifest\": repository.integration_manifest,\n                \"repository_manifest\": repository.repository_manifest.to_dict(),\n                \"ref\": repository.ref,\n                \"paths\": {\n                    \"localpath\": repository.localpath.replace(hacs.core.config_path, \"/config\"),\n                    \"local\": repository.content.path.local.replace(\n                        hacs.core.config_path, \"/config\"\n                    ),\n                    \"remote\": repository.content.path.remote,\n                },\n            }\n        )\n\n    try:\n        rate_limit_response = await hacs.githubapi.rate_limit()\n        data[\"rate_limit\"] = rate_limit_response.data.as_dict\n    except GitHubException as exception:\n        data[\"rate_limit\"] = str(exception)\n\n    return async_redact_data(data, (TOKEN,))\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/entity.py",
    "content": "\"\"\"HACS Base entities.\"\"\"\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING, Any\n\nfrom homeassistant.core import callback\nfrom homeassistant.helpers.device_registry import DeviceEntryType\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\nfrom homeassistant.helpers.entity import Entity\n\nfrom .const import DOMAIN, HACS_SYSTEM_ID, NAME_SHORT\nfrom .enums import HacsDispatchEvent, HacsGitHubRepo\n\nif TYPE_CHECKING:\n    from .base import HacsBase\n    from .repositories.base import HacsRepository\n\n\ndef system_info(hacs: HacsBase) -> dict:\n    \"\"\"Return system info.\"\"\"\n    return {\n        \"identifiers\": {(DOMAIN, HACS_SYSTEM_ID)},\n        \"name\": NAME_SHORT,\n        \"manufacturer\": \"hacs.xyz\",\n        \"model\": \"\",\n        \"sw_version\": str(hacs.version),\n        \"configuration_url\": \"homeassistant://hacs\",\n        \"entry_type\": DeviceEntryType.SERVICE,\n    }\n\n\nclass HacsBaseEntity(Entity):\n    \"\"\"Base HACS entity.\"\"\"\n\n    repository: HacsRepository | None = None\n    _attr_should_poll = False\n\n    def __init__(self, hacs: HacsBase) -> None:\n        \"\"\"Initialize.\"\"\"\n        self.hacs = hacs\n\n    async def async_added_to_hass(self) -> None:\n        \"\"\"Register for status events.\"\"\"\n        self.async_on_remove(\n            async_dispatcher_connect(\n                self.hass,\n                HacsDispatchEvent.REPOSITORY,\n                self._update_and_write_state,\n            )\n        )\n\n    @callback\n    def _update(self) -> None:\n        \"\"\"Update the sensor.\"\"\"\n\n    async def async_update(self) -> None:\n        \"\"\"Manual updates of the sensor.\"\"\"\n        self._update()\n\n    @callback\n    def _update_and_write_state(self, _: Any) -> None:\n        \"\"\"Update the entity and write state.\"\"\"\n        self._update()\n        self.async_write_ha_state()\n\n\nclass HacsSystemEntity(HacsBaseEntity):\n    \"\"\"Base system entity.\"\"\"\n\n    _attr_icon = \"hacs:hacs\"\n    _attr_unique_id = HACS_SYSTEM_ID\n\n    @property\n    def device_info(self) -> dict[str, any]:\n        \"\"\"Return device information about HACS.\"\"\"\n        return system_info(self.hacs)\n\n\nclass HacsRepositoryEntity(HacsBaseEntity):\n    \"\"\"Base repository entity.\"\"\"\n\n    def __init__(\n        self,\n        hacs: HacsBase,\n        repository: HacsRepository,\n    ) -> None:\n        \"\"\"Initialize.\"\"\"\n        super().__init__(hacs=hacs)\n        self.repository = repository\n        self._attr_unique_id = str(repository.data.id)\n\n    @property\n    def available(self) -> bool:\n        \"\"\"Return True if entity is available.\"\"\"\n        return self.hacs.repositories.is_downloaded(repository_id=str(self.repository.data.id))\n\n    @property\n    def device_info(self) -> dict[str, any]:\n        \"\"\"Return device information about HACS.\"\"\"\n        if self.repository.data.full_name == HacsGitHubRepo.INTEGRATION:\n            return system_info(self.hacs)\n\n        return {\n            \"identifiers\": {(DOMAIN, str(self.repository.data.id))},\n            \"name\": self.repository.display_name,\n            \"model\": self.repository.data.category,\n            \"manufacturer\": \", \".join(\n                author.replace(\"@\", \"\") for author in self.repository.data.authors\n            ),\n            \"configuration_url\": \"homeassistant://hacs\",\n            \"entry_type\": DeviceEntryType.SERVICE,\n        }\n\n    @callback\n    def _update_and_write_state(self, data: dict) -> None:\n        \"\"\"Update the entity and write state.\"\"\"\n        if data.get(\"repository_id\") == self.repository.data.id:\n            self._update()\n            self.async_write_ha_state()\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/enums.py",
    "content": "\"\"\"Helper constants.\"\"\"\n# pylint: disable=missing-class-docstring\nfrom enum import Enum\n\n\nclass HacsGitHubRepo(str, Enum):\n    \"\"\"HacsGitHubRepo.\"\"\"\n\n    DEFAULT = \"hacs/default\"\n    INTEGRATION = \"hacs/integration\"\n\n\nclass HacsCategory(str, Enum):\n    APPDAEMON = \"appdaemon\"\n    INTEGRATION = \"integration\"\n    LOVELACE = \"lovelace\"\n    PLUGIN = \"plugin\"  # Kept for legacy purposes\n    NETDAEMON = \"netdaemon\"\n    PYTHON_SCRIPT = \"python_script\"\n    THEME = \"theme\"\n    REMOVED = \"removed\"\n\n    def __str__(self):\n        return str(self.value)\n\n\nclass HacsDispatchEvent(str, Enum):\n    \"\"\"HacsDispatchEvent.\"\"\"\n\n    CONFIG = \"hacs_dispatch_config\"\n    ERROR = \"hacs_dispatch_error\"\n    RELOAD = \"hacs_dispatch_reload\"\n    REPOSITORY = \"hacs_dispatch_repository\"\n    REPOSITORY_DOWNLOAD_PROGRESS = \"hacs_dispatch_repository_download_progress\"\n    STAGE = \"hacs_dispatch_stage\"\n    STARTUP = \"hacs_dispatch_startup\"\n    STATUS = \"hacs_dispatch_status\"\n\n\nclass RepositoryFile(str, Enum):\n    \"\"\"Repository file names.\"\"\"\n\n    HACS_JSON = \"hacs.json\"\n    MAINIFEST_JSON = \"manifest.json\"\n\n\nclass ConfigurationType(str, Enum):\n    YAML = \"yaml\"\n    CONFIG_ENTRY = \"config_entry\"\n\n\nclass LovelaceMode(str, Enum):\n    \"\"\"Lovelace Modes.\"\"\"\n\n    STORAGE = \"storage\"\n    AUTO = \"auto\"\n    AUTO_GEN = \"auto-gen\"\n    YAML = \"yaml\"\n\n\nclass HacsStage(str, Enum):\n    SETUP = \"setup\"\n    STARTUP = \"startup\"\n    WAITING = \"waiting\"\n    RUNNING = \"running\"\n    BACKGROUND = \"background\"\n\n\nclass HacsDisabledReason(str, Enum):\n    RATE_LIMIT = \"rate_limit\"\n    REMOVED = \"removed\"\n    INVALID_TOKEN = \"invalid_token\"\n    CONSTRAINS = \"constrains\"\n    LOAD_HACS = \"load_hacs\"\n    RESTORE = \"restore\"\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/exceptions.py",
    "content": "\"\"\"Custom Exceptions for HACS.\"\"\"\n\n\nclass HacsException(Exception):\n    \"\"\"Super basic.\"\"\"\n\n\nclass HacsRepositoryArchivedException(HacsException):\n    \"\"\"For repositories that are archived.\"\"\"\n\n\nclass HacsNotModifiedException(HacsException):\n    \"\"\"For responses that are not modified.\"\"\"\n\n\nclass HacsExpectedException(HacsException):\n    \"\"\"For stuff that are expected.\"\"\"\n\n\nclass HacsRepositoryExistException(HacsException):\n    \"\"\"For repositories that are already exist.\"\"\"\n\n\nclass HacsExecutionStillInProgress(HacsException):\n    \"\"\"Exception to raise if execution is still in progress.\"\"\"\n\n\nclass AddonRepositoryException(HacsException):\n    \"\"\"Exception to raise when user tries to add add-on repository.\"\"\"\n\n    exception_message = (\n        \"The repository does not seem to be a integration, \"\n        \"but an add-on repository. HACS does not manage add-ons.\"\n    )\n\n    def __init__(self) -> None:\n        super().__init__(self.exception_message)\n\n\nclass HomeAssistantCoreRepositoryException(HacsException):\n    \"\"\"Exception to raise when user tries to add the home-assistant/core repository.\"\"\"\n\n    exception_message = (\n        \"You can not add homeassistant/core, to use core integrations \"\n        \"check the Home Assistant documentation for how to add them.\"\n    )\n\n    def __init__(self) -> None:\n        super().__init__(self.exception_message)\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/frontend.py",
    "content": "\"\"\"\"Starting setup task: Frontend\".\"\"\"\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nfrom aiohttp import web\nfrom homeassistant.components.http import HomeAssistantView\nfrom homeassistant.core import HomeAssistant, callback\n\nfrom .const import DOMAIN\nfrom .hacs_frontend import locate_dir\nfrom .hacs_frontend.version import VERSION as FE_VERSION\n\nURL_BASE = \"/hacsfiles\"\n\nif TYPE_CHECKING:\n    from .base import HacsBase\n\n\n@callback\ndef async_register_frontend(hass: HomeAssistant, hacs: HacsBase) -> None:\n    \"\"\"Register the frontend.\"\"\"\n\n    # Register themes\n    hass.http.register_static_path(f\"{URL_BASE}/themes\", hass.config.path(\"themes\"))\n\n    # Register frontend\n    if hacs.configuration.frontend_repo_url:\n        hacs.log.warning(\n            \"<HacsFrontend> Frontend development mode enabled. Do not run in production!\"\n        )\n        hass.http.register_view(HacsFrontendDev())\n    else:\n        #\n        hass.http.register_static_path(f\"{URL_BASE}/frontend\", locate_dir(), cache_headers=False)\n\n    # Custom iconset\n    hass.http.register_static_path(\n        f\"{URL_BASE}/iconset.js\", str(hacs.integration_dir / \"iconset.js\")\n    )\n    if \"frontend_extra_module_url\" not in hass.data:\n        hass.data[\"frontend_extra_module_url\"] = set()\n    hass.data[\"frontend_extra_module_url\"].add(f\"{URL_BASE}/iconset.js\")\n\n    # Register www/community for all other files\n    use_cache = hacs.core.lovelace_mode == \"storage\"\n    hacs.log.info(\n        \"<HacsFrontend> %s mode, cache for /hacsfiles/: %s\",\n        hacs.core.lovelace_mode,\n        use_cache,\n    )\n\n    hass.http.register_static_path(\n        URL_BASE,\n        hass.config.path(\"www/community\"),\n        cache_headers=use_cache,\n    )\n\n    hacs.frontend_version = FE_VERSION\n\n    # Add to sidepanel if needed\n    if DOMAIN not in hass.data.get(\"frontend_panels\", {}):\n        hass.components.frontend.async_register_built_in_panel(\n            component_name=\"custom\",\n            sidebar_title=hacs.configuration.sidepanel_title,\n            sidebar_icon=hacs.configuration.sidepanel_icon,\n            frontend_url_path=DOMAIN,\n            config={\n                \"_panel_custom\": {\n                    \"name\": \"hacs-frontend\",\n                    \"embed_iframe\": True,\n                    \"trust_external\": False,\n                    \"js_url\": f\"/hacsfiles/frontend/entrypoint.js?hacstag={FE_VERSION}\",\n                }\n            },\n            require_admin=True,\n        )\n\n\nclass HacsFrontendDev(HomeAssistantView):\n    \"\"\"Dev View Class for HACS.\"\"\"\n\n    requires_auth = False\n    name = \"hacs_files:frontend\"\n    url = r\"/hacsfiles/frontend/{requested_file:.+}\"\n\n    async def get(self, request, requested_file):  # pylint: disable=unused-argument\n        \"\"\"Handle HACS Web requests.\"\"\"\n        hacs: HacsBase = request.app[\"hass\"].data.get(DOMAIN)\n        requested = requested_file.split(\"/\")[-1]\n        request = await hacs.session.get(f\"{hacs.configuration.frontend_repo_url}/{requested}\")\n        if request.status == 200:\n            result = await request.read()\n            response = web.Response(body=result)\n            response.headers[\"Content-Type\"] = \"application/javascript\"\n\n            return response\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/__init__.py",
    "content": "\"\"\"HACS Frontend\"\"\"\r\nfrom .version import VERSION\r\n\r\ndef locate_dir():\r\n    return __path__[0]"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.004a7b01.js",
    "content": "var t=function(){if(\"undefined\"!=typeof Map)return Map;function t(t,e){var n=-1;return t.some((function(t,r){return t[0]===e&&(n=r,!0)})),n}return function(){function e(){this.__entries__=[]}return Object.defineProperty(e.prototype,\"size\",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),e.prototype.get=function(e){var n=t(this.__entries__,e),r=this.__entries__[n];return r&&r[1]},e.prototype.set=function(e,n){var r=t(this.__entries__,e);~r?this.__entries__[r][1]=n:this.__entries__.push([e,n])},e.prototype.delete=function(e){var n=this.__entries__,r=t(n,e);~r&&n.splice(r,1)},e.prototype.has=function(e){return!!~t(this.__entries__,e)},e.prototype.clear=function(){this.__entries__.splice(0)},e.prototype.forEach=function(t,e){void 0===e&&(e=null);for(var n=0,r=this.__entries__;n<r.length;n++){var i=r[n];t.call(e,i[1],i[0])}},e}()}(),e=\"undefined\"!=typeof window&&\"undefined\"!=typeof document&&window.document===document,n=\"undefined\"!=typeof global&&global.Math===Math?global:\"undefined\"!=typeof self&&self.Math===Math?self:\"undefined\"!=typeof window&&window.Math===Math?window:Function(\"return this\")(),r=\"function\"==typeof requestAnimationFrame?requestAnimationFrame.bind(n):function(t){return setTimeout((function(){return t(Date.now())}),1e3/60)};var i=[\"top\",\"right\",\"bottom\",\"left\",\"width\",\"height\",\"size\",\"weight\"],o=\"undefined\"!=typeof MutationObserver,s=function(){function t(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(t,e){var n=!1,i=!1,o=0;function s(){n&&(n=!1,t()),i&&c()}function a(){r(s)}function c(){var t=Date.now();if(n){if(t-o<2)return;i=!0}else n=!0,i=!1,setTimeout(a,e);o=t}return c}(this.refresh.bind(this),20)}return t.prototype.addObserver=function(t){~this.observers_.indexOf(t)||this.observers_.push(t),this.connected_||this.connect_()},t.prototype.removeObserver=function(t){var e=this.observers_,n=e.indexOf(t);~n&&e.splice(n,1),!e.length&&this.connected_&&this.disconnect_()},t.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},t.prototype.updateObservers_=function(){var t=this.observers_.filter((function(t){return t.gatherActive(),t.hasActive()}));return t.forEach((function(t){return t.broadcastActive()})),t.length>0},t.prototype.connect_=function(){e&&!this.connected_&&(document.addEventListener(\"transitionend\",this.onTransitionEnd_),window.addEventListener(\"resize\",this.refresh),o?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener(\"DOMSubtreeModified\",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){e&&this.connected_&&(document.removeEventListener(\"transitionend\",this.onTransitionEnd_),window.removeEventListener(\"resize\",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener(\"DOMSubtreeModified\",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(t){var e=t.propertyName,n=void 0===e?\"\":e;i.some((function(t){return!!~n.indexOf(t)}))&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),a=function(t,e){for(var n=0,r=Object.keys(e);n<r.length;n++){var i=r[n];Object.defineProperty(t,i,{value:e[i],enumerable:!1,writable:!1,configurable:!0})}return t},c=function(t){return t&&t.ownerDocument&&t.ownerDocument.defaultView||n},h=l(0,0,0,0);function u(t){return parseFloat(t)||0}function f(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return e.reduce((function(e,n){return e+u(t[\"border-\"+n+\"-width\"])}),0)}function d(t){var e=t.clientWidth,n=t.clientHeight;if(!e&&!n)return h;var r=c(t).getComputedStyle(t),i=function(t){for(var e={},n=0,r=[\"top\",\"right\",\"bottom\",\"left\"];n<r.length;n++){var i=r[n],o=t[\"padding-\"+i];e[i]=u(o)}return e}(r),o=i.left+i.right,s=i.top+i.bottom,a=u(r.width),d=u(r.height);if(\"border-box\"===r.boxSizing&&(Math.round(a+o)!==e&&(a-=f(r,\"left\",\"right\")+o),Math.round(d+s)!==n&&(d-=f(r,\"top\",\"bottom\")+s)),!function(t){return t===c(t).document.documentElement}(t)){var p=Math.round(a+o)-e,v=Math.round(d+s)-n;1!==Math.abs(p)&&(a-=p),1!==Math.abs(v)&&(d-=v)}return l(i.left,i.top,a,d)}var p=\"undefined\"!=typeof SVGGraphicsElement?function(t){return t instanceof c(t).SVGGraphicsElement}:function(t){return t instanceof c(t).SVGElement&&\"function\"==typeof t.getBBox};function v(t){return e?p(t)?function(t){var e=t.getBBox();return l(0,0,e.width,e.height)}(t):d(t):h}function l(t,e,n,r){return{x:t,y:e,width:n,height:r}}var _=function(){function t(t){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=l(0,0,0,0),this.target=t}return t.prototype.isActive=function(){var t=v(this.target);return this.contentRect_=t,t.width!==this.broadcastWidth||t.height!==this.broadcastHeight},t.prototype.broadcastRect=function(){var t=this.contentRect_;return this.broadcastWidth=t.width,this.broadcastHeight=t.height,t},t}(),b=function(t,e){var n,r,i,o,s,c,h,u=(r=(n=e).x,i=n.y,o=n.width,s=n.height,c=\"undefined\"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,h=Object.create(c.prototype),a(h,{x:r,y:i,width:o,height:s,top:i,right:r+o,bottom:s+i,left:r}),h);a(this,{target:t,contentRect:u})},m=function(){function e(e,n,r){if(this.activeObservations_=[],this.observations_=new t,\"function\"!=typeof e)throw new TypeError(\"The callback provided as parameter 1 is not a function.\");this.callback_=e,this.controller_=n,this.callbackCtx_=r}return e.prototype.observe=function(t){if(!arguments.length)throw new TypeError(\"1 argument required, but only 0 present.\");if(\"undefined\"!=typeof Element&&Element instanceof Object){if(!(t instanceof c(t).Element))throw new TypeError('parameter 1 is not of type \"Element\".');var e=this.observations_;e.has(t)||(e.set(t,new _(t)),this.controller_.addObserver(this),this.controller_.refresh())}},e.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError(\"1 argument required, but only 0 present.\");if(\"undefined\"!=typeof Element&&Element instanceof Object){if(!(t instanceof c(t).Element))throw new TypeError('parameter 1 is not of type \"Element\".');var e=this.observations_;e.has(t)&&(e.delete(t),e.size||this.controller_.removeObserver(this))}},e.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},e.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach((function(e){e.isActive()&&t.activeObservations_.push(e)}))},e.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,e=this.activeObservations_.map((function(t){return new b(t.target,t.broadcastRect())}));this.callback_.call(t,e,t),this.clearActive()}},e.prototype.clearActive=function(){this.activeObservations_.splice(0)},e.prototype.hasActive=function(){return this.activeObservations_.length>0},e}(),y=\"undefined\"!=typeof WeakMap?new WeakMap:new t,g=function t(e){if(!(this instanceof t))throw new TypeError(\"Cannot call a class as a function.\");if(!arguments.length)throw new TypeError(\"1 argument required, but only 0 present.\");var n=s.getInstance(),r=new m(e,n,this);y.set(this,r)};[\"observe\",\"unobserve\",\"disconnect\"].forEach((function(t){g.prototype[t]=function(){var e;return(e=y.get(this))[t].apply(e,arguments)}}));var w=void 0!==n.ResizeObserver?n.ResizeObserver:g;export{w as default};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.05e9df28.js",
    "content": "import{a as t,r as i,n as a}from\"./main-a0d7432d.js\";import{L as n,s}from\"./c.936d9772.js\";let r=t([a(\"ha-list-item\")],(function(t,a){return{F:class extends a{constructor(...i){super(...i),t(this)}},d:[{kind:\"get\",static:!0,key:\"styles\",value:function(){return[s,i`\n        :host {\n          padding-left: var(--mdc-list-side-padding, 20px);\n          padding-right: var(--mdc-list-side-padding, 20px);\n        }\n        :host([graphic=\"avatar\"]:not([twoLine])),\n        :host([graphic=\"icon\"]:not([twoLine])) {\n          height: 48px;\n        }\n        span.material-icons:first-of-type {\n          margin-inline-start: 0px !important;\n          margin-inline-end: var(\n            --mdc-list-item-graphic-margin,\n            16px\n          ) !important;\n          direction: var(--direction);\n        }\n        span.material-icons:last-of-type {\n          margin-inline-start: auto !important;\n          margin-inline-end: 0px !important;\n          direction: var(--direction);\n        }\n      `]}}]}}),n);const e=t=>`https://brands.home-assistant.io/${t.useFallback?\"_/\":\"\"}${t.domain}/${t.darkOptimized?\"dark_\":\"\"}${t.type}.png`,o=t=>t.split(\"/\")[4],d=t=>t.startsWith(\"https://brands.home-assistant.io/\");export{r as H,e as b,o as e,d as i};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.0732ee74.js",
    "content": "import{a as e,h as i,e as t,$ as r,d as o,r as d,n as c}from\"./main-a0d7432d.js\";import\"./c.c176780d.js\";e([c(\"hacs-filter\")],(function(e,i){return{F:class extends i{constructor(...i){super(...i),e(this)}},d:[{kind:\"field\",decorators:[t({attribute:!1})],key:\"filters\",value:void 0},{kind:\"field\",decorators:[t({attribute:!1})],key:\"hacs\",value:void 0},{kind:\"method\",key:\"render\",value:function(){var e;return r`\n      <div class=\"filter\">\n        ${null===(e=this.filters)||void 0===e?void 0:e.map((e=>r`\n            <ha-formfield\n              class=\"checkbox\"\n              .label=${this.hacs.localize(`common.${e.id}`)||e.value}\n            >\n              <ha-checkbox\n                .checked=${e.checked||!1}\n                .id=${e.id}\n                @click=${this._filterClick}\n              >\n              </ha-checkbox>\n            </ha-formfield>\n          `))}\n      </div>\n    `}},{kind:\"method\",key:\"_filterClick\",value:function(e){const i=e.currentTarget;this.dispatchEvent(new CustomEvent(\"filter-change\",{detail:{id:i.id},bubbles:!0,composed:!0}))}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[o,d`\n        .filter {\n          display: flex;\n          border-bottom: 1px solid var(--divider-color);\n          align-items: center;\n          font-size: 16px;\n          height: 32px;\n          line-height: 4px;\n          background-color: var(--sidebar-background-color);\n          padding: 0 16px;\n          box-sizing: border-box;\n        }\n\n        .checkbox:not(:first-child) {\n          margin-left: 20px;\n        }\n      `]}}]}}),i);\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.15331ea4.js",
    "content": "import{a as o,h as t,e,$ as i,w as s,r as a,n as r,t as n,L as h,N as l,a2 as c,a3 as d,m as p,c as u,ai as m,aN as y,aO as f,aP as v,E as g,aQ as _,z as b,aR as k,aS as w,aT as $,aU as x,aV as z,aW as j,ah as R,am as S,ar as F,as as I,aX as L,d as P}from\"./main-a0d7432d.js\";import\"./c.8f19de42.js\";import{e as T}from\"./c.50bfd408.js\";import\"./c.58a9b586.js\";import{r as U}from\"./c.c98162aa.js\";import{g as E}from\"./c.6711bf6c.js\";import{s as C}from\"./c.bca0f55d.js\";import\"./c.0732ee74.js\";import{f as D}from\"./c.fe747ba2.js\";import{m as K}from\"./c.9d6aaabf.js\";import\"./c.88ebfd3e.js\";import\"./c.c176780d.js\";import\"./c.936d9772.js\";import\"./c.8e28b461.js\";import\"./c.5ede7966.js\";import\"./c.c7df5815.js\";import\"./c.d2d70fc0.js\";import\"./c.743a15a1.js\";o([r(\"hass-subpage\")],(function(o,t){return{F:class extends t{constructor(...t){super(...t),o(this)}},d:[{kind:\"field\",decorators:[e({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[e()],key:\"header\",value:void 0},{kind:\"field\",decorators:[e({type:Boolean,attribute:\"main-page\"})],key:\"mainPage\",value:()=>!1},{kind:\"field\",decorators:[e({type:String,attribute:\"back-path\"})],key:\"backPath\",value:void 0},{kind:\"field\",decorators:[e({type:Boolean,reflect:!0})],key:\"narrow\",value:()=>!1},{kind:\"field\",decorators:[e({type:Boolean})],key:\"supervisor\",value:()=>!1},{kind:\"field\",decorators:[U(\".content\")],key:\"_savedScrollPos\",value:void 0},{kind:\"method\",key:\"render\",value:function(){var o;return i`\n      <div class=\"toolbar\">\n        ${this.mainPage||null!==(o=history.state)&&void 0!==o&&o.root?i`\n              <ha-menu-button\n                .hassio=${this.supervisor}\n                .hass=${this.hass}\n                .narrow=${this.narrow}\n              ></ha-menu-button>\n            `:this.backPath?i`\n              <a href=${this.backPath}>\n                <ha-icon-button-arrow-prev\n                  .hass=${this.hass}\n                ></ha-icon-button-arrow-prev>\n              </a>\n            `:i`\n              <ha-icon-button-arrow-prev\n                .hass=${this.hass}\n                @click=${this._backTapped}\n              ></ha-icon-button-arrow-prev>\n            `}\n\n        <div class=\"main-title\">${this.header}</div>\n        <slot name=\"toolbar-icon\"></slot>\n      </div>\n      <div class=\"content\" @scroll=${this._saveScrollPos}><slot></slot></div>\n    `}},{kind:\"method\",decorators:[s({passive:!0})],key:\"_saveScrollPos\",value:function(o){this._savedScrollPos=o.target.scrollTop}},{kind:\"method\",key:\"_backTapped\",value:function(){history.back()}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return a`\n      :host {\n        display: block;\n        height: 100%;\n        background-color: var(--primary-background-color);\n      }\n\n      :host([narrow]) {\n        width: 100%;\n        position: fixed;\n      }\n\n      .toolbar {\n        display: flex;\n        align-items: center;\n        font-size: 20px;\n        height: var(--header-height);\n        padding: 0 16px;\n        pointer-events: none;\n        background-color: var(--app-header-background-color);\n        font-weight: 400;\n        color: var(--app-header-text-color, white);\n        border-bottom: var(--app-header-border-bottom, none);\n        box-sizing: border-box;\n      }\n      .toolbar a {\n        color: var(--sidebar-text-color);\n        text-decoration: none;\n      }\n\n      ha-menu-button,\n      ha-icon-button-arrow-prev,\n      ::slotted([slot=\"toolbar-icon\"]) {\n        pointer-events: auto;\n        color: var(--sidebar-icon-color);\n      }\n\n      .main-title {\n        margin: 0 0 0 24px;\n        line-height: 20px;\n        flex-grow: 1;\n      }\n\n      .content {\n        position: relative;\n        width: 100%;\n        height: calc(100% - 1px - var(--header-height));\n        overflow-y: auto;\n        overflow: auto;\n        -webkit-overflow-scrolling: touch;\n      }\n    `}}]}}),t);let B=o([r(\"hacs-repository-panel\")],(function(o,t){class s extends t{constructor(...t){super(...t),o(this)}}return{F:s,d:[{kind:\"field\",decorators:[e({attribute:!1})],key:\"hacs\",value:void 0},{kind:\"field\",decorators:[e({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[e({attribute:!1})],key:\"narrow\",value:void 0},{kind:\"field\",decorators:[e({attribute:!1})],key:\"isWide\",value:void 0},{kind:\"field\",decorators:[e({attribute:!1})],key:\"route\",value:void 0},{kind:\"field\",decorators:[e({attribute:!1})],key:\"_repository\",value:void 0},{kind:\"field\",decorators:[n()],key:\"_error\",value:void 0},{kind:\"method\",key:\"firstUpdated\",value:async function(o){h(l(s.prototype),\"firstUpdated\",this).call(this,o),document.body.addEventListener(\"keydown\",(o=>{if(!(o.ctrlKey||o.shiftKey||o.metaKey||o.altKey)&&[\"m\"].includes(o.key)){const o=new URLSearchParams({redirect:\"hacs_repository\",owner:this._repository.full_name.split(\"/\")[0],repository:this._repository.full_name.split(\"/\")[0],category:this._repository.category});window.open(`https://my.home-assistant.io/create-link/?${o.toString()}`,\"_blank\")}}));const t=T();if(Object.entries(t).length){let o;const e=`${t.owner}/${t.repository}`;if(o=this.hacs.repositories.find((o=>o.full_name.toLocaleLowerCase()===e.toLocaleLowerCase())),!o&&t.category){if(!await C(this,{title:this.hacs.localize(\"my.add_repository_title\"),text:this.hacs.localize(\"my.add_repository_description\",{repository:e}),confirmText:this.hacs.localize(\"common.add\"),dismissText:this.hacs.localize(\"common.cancel\")}))return void(this._error=this.hacs.localize(\"my.repository_not_found\",{repository:e}));try{await c(this.hass,e,t.category),this.hacs.repositories=await d(this.hass),o=this.hacs.repositories.find((o=>o.full_name.toLocaleLowerCase()===e.toLocaleLowerCase()))}catch(o){return void(this._error=o)}}o?this._fetchRepository(String(o.id)):this._error=this.hacs.localize(\"my.repository_not_found\",{repository:e})}else{const o=this.route.path.indexOf(\"/\",1),t=this.route.path.substr(o+1);if(!t)return void(this._error=\"Missing repositoryId from route\");this._fetchRepository(t)}}},{kind:\"method\",key:\"updated\",value:function(o){h(l(s.prototype),\"updated\",this).call(this,o),o.has(\"repositories\")&&this._repository&&this._fetchRepository()}},{kind:\"method\",key:\"_fetchRepository\",value:async function(o){try{this._repository=await D(this.hass,o||String(this._repository.id))}catch(o){this._error=null==o?void 0:o.message}}},{kind:\"field\",key:\"_getAuthors\",value:()=>p((o=>{const t=[];if(!o.authors)return t;if(o.authors.forEach((o=>t.push(o.replace(\"@\",\"\")))),0===t.length){const e=o.full_name.split(\"/\")[0];if([\"custom-cards\",\"custom-components\",\"home-assistant-community-themes\"].includes(e))return t;t.push(e)}return t}))},{kind:\"method\",key:\"render\",value:function(){if(this._error)return i`<hass-error-screen .error=${this._error}></hass-error-screen>`;if(!this._repository)return i`<hass-loading-screen></hass-loading-screen>`;const o=this._getAuthors(this._repository);return i`\n      <hass-subpage\n        .hass=${this.hass}\n        .narrow=${this.narrow}\n        .route=${this.route}\n        .header=${this._repository.name}\n        hasFab\n      >\n        <ha-icon-overflow-menu\n          slot=\"toolbar-icon\"\n          narrow\n          .hass=${this.hass}\n          .items=${[{path:u,label:this.hacs.localize(\"common.repository\"),action:()=>m.open(`https://github.com/${this._repository.full_name}`,\"_blank\",\"noreferrer=true\")},{path:y,label:this.hacs.localize(\"repository_card.update_information\"),action:()=>this._refreshReopsitoryInfo()},{path:f,label:this.hacs.localize(\"repository_card.redownload\"),action:()=>this._downloadRepositoryDialog(),hideForUninstalled:!0},{category:\"plugin\",hideForUninstalled:!0,path:v,label:this.hacs.localize(\"repository_card.open_source\"),action:()=>m.open(`/hacsfiles/${this._repository.local_path.split(\"/\").pop()}/${this._repository.file_name}`,\"_blank\",\"noreferrer=true\")},{path:g,label:this.hacs.localize(\"repository_card.open_issue\"),action:()=>m.open(`https://github.com/${this._repository.full_name}/issues`,\"_blank\",\"noreferrer=true\")},{hideForId:\"172733314\",path:_,label:this.hacs.localize(\"repository_card.report\"),hideForUninstalled:!0,action:()=>m.open(`https://github.com/hacs/integration/issues/new?assignees=ludeeus&labels=flag&template=removal.yml&repo=${this._repository.full_name}&title=Request for removal of ${this._repository.full_name}`,\"_blank\",\"noreferrer=true\")},{hideForId:\"172733314\",hideForUninstalled:!0,path:b,label:this.hacs.localize(\"common.remove\"),action:()=>this._removeRepositoryDialog()}].filter((o=>(!o.category||this._repository.category===o.category)&&(!o.hideForId||String(this._repository.id)!==o.hideForId)&&(!o.hideForUninstalled||this._repository.installed_version)))}\n        >\n        </ha-icon-overflow-menu>\n        <div class=\"content\">\n          <div class=\"chips\">\n            ${this._repository.installed?i`\n                  <ha-chip title=\"${this.hacs.localize(\"dialog_info.version_installed\")}\" hasIcon>\n                    <ha-svg-icon slot=\"icon\" .path=${k}></ha-svg-icon>\n                    ${this._repository.installed_version}\n                  </ha-chip>\n                `:\"\"}\n            ${o?o.map((o=>i`<hacs-link .url=\"https://github.com/${o}\">\n                    <ha-chip title=\"${this.hacs.localize(\"dialog_info.author\")}\" hasIcon>\n                      <ha-svg-icon slot=\"icon\" .path=${w}></ha-svg-icon>\n                      @${o}\n                    </ha-chip>\n                  </hacs-link>`)):\"\"}\n            ${this._repository.downloads?i` <ha-chip hasIcon title=\"${this.hacs.localize(\"dialog_info.downloads\")}\">\n                  <ha-svg-icon slot=\"icon\" .path=${$}></ha-svg-icon>\n                  ${this._repository.downloads}\n                </ha-chip>`:\"\"}\n            <ha-chip title=\"${this.hacs.localize(\"dialog_info.stars\")}\" hasIcon>\n              <ha-svg-icon slot=\"icon\" .path=${x}></ha-svg-icon>\n              ${this._repository.stars}\n            </ha-chip>\n            <hacs-link .url=\"https://github.com/${this._repository.full_name}/issues\">\n              <ha-chip title=\"${this.hacs.localize(\"dialog_info.open_issues\")}\" hasIcon>\n                <ha-svg-icon slot=\"icon\" .path=${z}></ha-svg-icon>\n                ${this._repository.issues}\n              </ha-chip>\n            </hacs-link>\n          </div>\n          ${K.html(this._repository.additional_info||this.hacs.localize(\"dialog_info.no_info\"),this._repository)}\n        </div>\n        ${this._repository.installed_version?\"\":i`<ha-fab\n              .label=${this.hacs.localize(\"common.download\")}\n              .extended=${!this.narrow}\n              @click=${this._downloadRepositoryDialog}\n            >\n              <ha-svg-icon slot=\"icon\" .path=${j}></ha-svg-icon>\n            </ha-fab>`}\n      </hass-subpage>\n    `}},{kind:\"method\",key:\"_downloadRepositoryDialog\",value:function(){this.dispatchEvent(new CustomEvent(\"hacs-dialog\",{detail:{type:\"download\",repository:this._repository.id},bubbles:!0,composed:!0}))}},{kind:\"method\",key:\"_removeRepositoryDialog\",value:async function(){if(\"integration\"===this._repository.category&&this._repository.config_flow){if((await E(this.hass)).some((o=>o.domain===this._repository.domain))){if(await C(this,{title:this.hacs.localize(\"dialog.configured.title\"),text:this.hacs.localize(\"dialog.configured.message\",{name:this._repository.name}),dismissText:this.hacs.localize(\"common.ignore\"),confirmText:this.hacs.localize(\"common.navigate\"),confirm:()=>{R(\"/config/integrations\",{replace:!0})}}))return}}this.dispatchEvent(new CustomEvent(\"hacs-dialog\",{detail:{type:\"progress\",title:this.hacs.localize(\"dialog.remove.title\"),confirmText:this.hacs.localize(\"dialog.remove.title\"),content:this.hacs.localize(\"dialog.remove.message\",{name:this._repository.name}),confirm:async()=>{await this._repositoryRemove()}},bubbles:!0,composed:!0}))}},{kind:\"method\",key:\"_repositoryRemove\",value:async function(){var o;if(\"plugin\"===this._repository.category&&\"yaml\"!==(null===(o=this.hacs.info)||void 0===o?void 0:o.lovelace_mode)){(await S(this.hass)).filter((o=>o.url.startsWith(`/hacsfiles/${this._repository.full_name.split(\"/\")[1]}/${this._repository.file_name}`))).forEach((async o=>{await F(this.hass,String(o.id))}))}await I(this.hass,String(this._repository.id)),history.back()}},{kind:\"method\",key:\"_refreshReopsitoryInfo\",value:async function(){await L(this.hass,String(this._repository.id))}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[P,a`\n        hass-loading-screen {\n          --app-header-background-color: var(--sidebar-background-color);\n          --app-header-text-color: var(--sidebar-text-color);\n          height: 100vh;\n        }\n\n        hass-subpage {\n          position: absolute;\n          width: 100vw;\n        }\n\n        ha-svg-icon {\n          color: var(--hcv-text-color-on-background);\n        }\n\n        ha-fab {\n          position: fixed;\n          float: right;\n          right: calc(18px + env(safe-area-inset-right));\n          bottom: calc(16px + env(safe-area-inset-bottom));\n          z-index: 1;\n        }\n\n        ha-fab.rtl {\n          float: left;\n          right: auto;\n          left: calc(18px + env(safe-area-inset-left));\n        }\n\n        .content {\n          padding: 12px;\n          margin-bottom: 64px;\n        }\n\n        .chips {\n          display: flex;\n          flex-wrap: wrap;\n          padding-bottom: 8px;\n          gap: 4px;\n        }\n\n        @media all and (max-width: 500px) {\n          .content {\n            margin: 8px 4px 64px;\n          }\n        }\n      `]}}]}}),t);export{B as HacsRepositoryPanel};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.175b9792.js",
    "content": "import{a as e,h as t,e as i,$ as o,o as r,z as s,A as n,r as a,n as c,C as l,D as d,E as p,F as u}from\"./main-a0d7432d.js\";const y={info:l,warning:d,error:p,success:u};e([c(\"ha-alert\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[i()],key:\"title\",value:()=>\"\"},{kind:\"field\",decorators:[i({attribute:\"alert-type\"})],key:\"alertType\",value:()=>\"info\"},{kind:\"field\",decorators:[i({type:Boolean})],key:\"dismissable\",value:()=>!1},{kind:\"field\",decorators:[i({type:Boolean})],key:\"rtl\",value:()=>!1},{kind:\"method\",key:\"render\",value:function(){return o`\n      <div\n        class=\"issue-type ${r({rtl:this.rtl,[this.alertType]:!0})}\"\n        role=\"alert\"\n      >\n        <div class=\"icon ${this.title?\"\":\"no-title\"}\">\n          <slot name=\"icon\">\n            <ha-svg-icon .path=${y[this.alertType]}></ha-svg-icon>\n          </slot>\n        </div>\n        <div class=\"content\">\n          <div class=\"main-content\">\n            ${this.title?o`<div class=\"title\">${this.title}</div>`:\"\"}\n            <slot></slot>\n          </div>\n          <div class=\"action\">\n            <slot name=\"action\">\n              ${this.dismissable?o`<ha-icon-button\n                    @click=${this._dismiss_clicked}\n                    label=\"Dismiss alert\"\n                    .path=${s}\n                  ></ha-icon-button>`:\"\"}\n            </slot>\n          </div>\n        </div>\n      </div>\n    `}},{kind:\"method\",key:\"_dismiss_clicked\",value:function(){n(this,\"alert-dismissed-clicked\")}},{kind:\"field\",static:!0,key:\"styles\",value:()=>a`\n    .issue-type {\n      position: relative;\n      padding: 8px;\n      display: flex;\n      margin: 4px 0;\n    }\n    .issue-type.rtl {\n      flex-direction: row-reverse;\n    }\n    .issue-type::after {\n      position: absolute;\n      top: 0;\n      right: 0;\n      bottom: 0;\n      left: 0;\n      opacity: 0.12;\n      pointer-events: none;\n      content: \"\";\n      border-radius: 4px;\n    }\n    .icon {\n      z-index: 1;\n    }\n    .icon.no-title {\n      align-self: center;\n    }\n    .issue-type.rtl > .content {\n      flex-direction: row-reverse;\n      text-align: right;\n    }\n    .content {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      width: 100%;\n    }\n    .action {\n      z-index: 1;\n      width: min-content;\n      --mdc-theme-primary: var(--primary-text-color);\n    }\n    .main-content {\n      overflow-wrap: anywhere;\n      word-break: break-word;\n      margin-left: 8px;\n      margin-right: 0;\n    }\n    .issue-type.rtl > .content > .main-content {\n      margin-left: 0;\n      margin-right: 8px;\n    }\n    .title {\n      margin-top: 2px;\n      font-weight: bold;\n    }\n    .action mwc-button,\n    .action ha-icon-button {\n      --mdc-theme-primary: var(--primary-text-color);\n      --mdc-icon-button-size: 36px;\n    }\n    .issue-type.info > .icon {\n      color: var(--info-color);\n    }\n    .issue-type.info::after {\n      background-color: var(--info-color);\n    }\n\n    .issue-type.warning > .icon {\n      color: var(--warning-color);\n    }\n    .issue-type.warning::after {\n      background-color: var(--warning-color);\n    }\n\n    .issue-type.error > .icon {\n      color: var(--error-color);\n    }\n    .issue-type.error::after {\n      background-color: var(--error-color);\n    }\n\n    .issue-type.success > .icon {\n      color: var(--success-color);\n    }\n    .issue-type.success::after {\n      background-color: var(--success-color);\n    }\n  `}]}}),t);\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.1b450c80.js",
    "content": "import{a as e,h as i,e as t,i as a,$ as n,O as l,z as o,A as s,r as c,n as r,m as d}from\"./main-a0d7432d.js\";import\"./c.fbd8d2ba.js\";e([r(\"search-input\")],(function(e,i){return{F:class extends i{constructor(...i){super(...i),e(this)}},d:[{kind:\"field\",decorators:[t({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[t()],key:\"filter\",value:void 0},{kind:\"field\",decorators:[t({type:Boolean})],key:\"suffix\",value:()=>!1},{kind:\"field\",decorators:[t({type:Boolean})],key:\"autofocus\",value:()=>!1},{kind:\"field\",decorators:[t({type:String})],key:\"label\",value:void 0},{kind:\"method\",key:\"focus\",value:function(){var e;null===(e=this._input)||void 0===e||e.focus()}},{kind:\"field\",decorators:[a(\"ha-textfield\",!0)],key:\"_input\",value:void 0},{kind:\"method\",key:\"render\",value:function(){return n`\n      <ha-textfield\n        .autofocus=${this.autofocus}\n        .label=${this.label||\"Search\"}\n        .value=${this.filter||\"\"}\n        icon\n        .iconTrailing=${this.filter||this.suffix}\n        @input=${this._filterInputChanged}\n      >\n        <slot name=\"prefix\" slot=\"leadingIcon\">\n          <ha-svg-icon\n            tabindex=\"-1\"\n            class=\"prefix\"\n            .path=${l}\n          ></ha-svg-icon>\n        </slot>\n        <div class=\"trailing\" slot=\"trailingIcon\">\n          ${this.filter&&n`\n            <ha-icon-button\n              @click=${this._clearSearch}\n              .label=${this.hass.localize(\"ui.common.clear\")}\n              .path=${o}\n              class=\"clear-button\"\n            ></ha-icon-button>\n          `}\n          <slot name=\"suffix\"></slot>\n        </div>\n      </ha-textfield>\n    `}},{kind:\"method\",key:\"_filterChanged\",value:async function(e){s(this,\"value-changed\",{value:String(e)})}},{kind:\"method\",key:\"_filterInputChanged\",value:async function(e){this._filterChanged(e.target.value)}},{kind:\"method\",key:\"_clearSearch\",value:async function(){this._filterChanged(\"\")}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return c`\n      :host {\n        display: inline-flex;\n      }\n      ha-svg-icon,\n      ha-icon-button {\n        color: var(--primary-text-color);\n      }\n      ha-svg-icon {\n        outline: none;\n      }\n      .clear-button {\n        --mdc-icon-size: 20px;\n      }\n      ha-textfield {\n        display: inherit;\n      }\n      .trailing {\n        display: flex;\n        align-items: center;\n      }\n    `}}]}}),i);const u=d(((e,i)=>e.filter((e=>h(e.name).includes(h(i))||h(e.description).includes(h(i))||h(e.category).includes(h(i))||h(e.full_name).includes(h(i))||h(e.authors).includes(h(i))||h(e.domain).includes(h(i)))))),h=d((e=>String(e||\"\").toLocaleLowerCase().replace(/-|_| /g,\"\")));export{u as f};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.21c042d4.js",
    "content": "const n=(n,o)=>n&&n.config.components.includes(o);export{n as i};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.24bd2446.js",
    "content": "var t=\"undefined\"!=typeof window&&\"undefined\"!=typeof document&&window.document===document,e=\"undefined\"!=typeof global&&global.Math===Math?global:\"undefined\"!=typeof self&&self.Math===Math?self:\"undefined\"!=typeof window&&window.Math===Math?window:Function(\"return this\")(),n=function(){if(\"function\"==typeof requestAnimationFrame)return requestAnimationFrame.bind(e);return function(t){return setTimeout((function(){t(+Date.now())}),1e3/60)}}();var r=[\"top\",\"right\",\"bottom\",\"left\",\"width\",\"height\",\"size\",\"weight\"],i=\"undefined\"!=typeof MutationObserver,o=t&&HTMLElement.prototype.attachShadow&&-1!==HTMLElement.prototype.attachShadow.toString().indexOf(\"[native code]\")?HTMLElement.prototype.attachShadow:null,s=function(){function e(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(t,e){var r=!1,i=!1,o=0;function s(){r&&(r=!1,t()),i&&c()}function a(){n(s)}function c(){var t=Date.now();if(r){if(t-o<2)return;i=!0}else r=!0,i=!1,setTimeout(a,e);o=t}return c}(this.refresh.bind(this),20)}return e.prototype.addObserver=function(t){~this.observers_.indexOf(t)||this.observers_.push(t),this.connected_||this.connect_()},e.prototype.removeObserver=function(t){var e=this.observers_,n=e.indexOf(t);~n&&e.splice(n,1),!e.length&&this.connected_&&this.disconnect_()},e.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},e.prototype.updateObservers_=function(){var t=this.observers_.filter((function(t){return t.gatherActive(),t.hasActive()}));return t.forEach((function(t){return t.broadcastActive()})),t.length>0},e.prototype.connect_=function(){if(t&&!this.connected_){if(document.addEventListener(\"transitionend\",this.onTransitionEnd_),window.addEventListener(\"resize\",this.refresh),i){this.mutationsObserver_=new MutationObserver(this.refresh);var e={attributes:!0,childList:!0,characterData:!0,subtree:!0};if(this.mutationsObserver_.observe(document,e),o){var n=this;!function t(r){var i=r.shadowRoot;i&&(n.mutationsObserver_.observe(i,e),t(i));for(var o=r.firstElementChild;o;)t(o),o=o.nextElementSibling}(document),HTMLElement.prototype.attachShadow=function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];var i=o.apply(this,t);return n.mutationsObserver_.observe(i,e),i}}}else document.addEventListener(\"DOMSubtreeModified\",this.refresh),this.mutationEventsAdded_=!0;this.connected_=!0}},e.prototype.disconnect_=function(){t&&this.connected_&&(document.removeEventListener(\"transitionend\",this.onTransitionEnd_),window.removeEventListener(\"resize\",this.refresh),this.mutationsObserver_&&(this.mutationsObserver_.disconnect(),o&&(HTMLElement.prototype.attachShadow=o)),this.mutationEventsAdded_&&document.removeEventListener(\"DOMSubtreeModified\",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},e.prototype.onTransitionEnd_=function(t){var e=t.propertyName,n=void 0===e?\"\":e;r.some((function(t){return!!~n.indexOf(t)}))&&this.refresh()},e.getInstance=function(){return e.instance_||(e.instance_=new e),e.instance_},e.instance_=null,e}();function a(t){var e=\"function\"==typeof Symbol&&t[Symbol.iterator],n=0;return e?e.call(t):{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}}var c=function(t,e){var n,r;try{for(var i=a(Object.keys(e)),o=i.next();!o.done;o=i.next()){var s=o.value;Object.defineProperty(t,s,{value:e[s],enumerable:!1,writable:!1,configurable:!0})}}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return t},h=function(t){var n;return(null===(n=null==t?void 0:t.ownerDocument)||void 0===n?void 0:n.defaultView)||e},u=_(0,0,0,0);function f(t){return\"number\"==typeof t?t:parseFloat(t)||0}function d(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];return e.reduce((function(e,n){return e+f(t[\"border-\"+n+\"-width\"])}),0)}function l(t){var e=t.clientWidth,n=t.clientHeight;if(!e&&!n)return u;var r=h(t).getComputedStyle(t),i=function(t){var e=t;return{top:f(e[\"padding-top\"]),right:f(e[\"padding-right\"]),bottom:f(e[\"padding-bottom\"]),left:f(e[\"padding-left\"])}}(r),o=i.left+i.right,s=i.top+i.bottom,a=f(r.width),c=f(r.height);if(\"border-box\"===r.boxSizing&&(Math.round(a+o)!==e&&(a-=d(r,\"left\",\"right\")+o),Math.round(c+s)!==n&&(c-=d(r,\"top\",\"bottom\")+s)),!function(t){return t===h(t).document.documentElement}(t)){var l=Math.round(a+o)-e,v=Math.round(c+s)-n;1!==Math.abs(l)&&(a-=l),1!==Math.abs(v)&&(c-=v)}return _(i.left,i.top,a,c)}var v=\"undefined\"!=typeof SVGGraphicsElement?function(t){return t instanceof h(t).SVGGraphicsElement}:function(t){return t instanceof h(t).SVGElement&&\"function\"==typeof t.getBBox};function p(e){return t?v(e)?function(t){var e=t.getBBox();return _(0,0,e.width,e.height)}(e):l(e):u}function _(t,e,n,r){return{x:t,y:e,width:n,height:r}}var b=function(){function t(t){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=_(0,0,0,0),this.target=t}return t.prototype.isActive=function(){var t=p(this.target);return this.contentRect_=t,t.width!==this.broadcastWidth||t.height!==this.broadcastHeight},t.prototype.broadcastRect=function(){var t=this.contentRect_;return this.broadcastWidth=t.width,this.broadcastHeight=t.height,t},t}(),y=function(t,e){var n,r,i,o,s,a,h,u=(r=(n=e).x,i=n.y,o=n.width,s=n.height,a=\"undefined\"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,h=Object.create(a.prototype),c(h,{x:r,y:i,width:o,height:s,top:i,right:r+o,bottom:s+i,left:r}),h);c(this,{target:t,contentRect:u})},m=function(){if(\"undefined\"!=typeof Map)return Map;function t(t,e){var n=-1;return t.some((function(t,r){return t[0]===e&&(n=r,!0)})),n}return function(){function e(){this.__entries__=[]}return Object.defineProperty(e.prototype,\"size\",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),e.prototype.get=function(e){var n,r=t(this.__entries__,e);return null===(n=this.__entries__[r])||void 0===n?void 0:n[1]},e.prototype.set=function(e,n){var r=t(this.__entries__,e);~r?this.__entries__[r][1]=n:this.__entries__.push([e,n])},e.prototype.delete=function(e){var n=this.__entries__,r=t(n,e);~r&&n.splice(r,1)},e.prototype.has=function(e){return!!~t(this.__entries__,e)},e.prototype.clear=function(){this.__entries__.splice(0)},e.prototype.forEach=function(t,e){var n,r;void 0===e&&(e=null);try{for(var i=a(this.__entries__),o=i.next();!o.done;o=i.next()){var s=o.value;t.call(e,s[1],s[0])}}catch(t){n={error:t}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}},e}()}(),w=function(){function t(t,e,n){if(this.activeObservations_=[],this.observations_=new m,\"function\"!=typeof t)throw new TypeError(\"The callback provided as parameter 1 is not a function.\");this.callback_=t,this.controller_=e,this.callbackCtx_=n}return t.prototype.observe=function(t){if(void 0===t)throw new TypeError(\"1 argument required, but only 0 present.\");if(\"undefined\"!=typeof Element&&Element instanceof Object){if(!(t instanceof h(t).Element))throw new TypeError('parameter 1 is not of type \"Element\".');var e=this.observations_;e.has(t)||(e.set(t,new b(t)),this.controller_.addObserver(this),this.controller_.refresh())}},t.prototype.unobserve=function(t){if(void 0===t)throw new TypeError(\"1 argument required, but only 0 present.\");if(\"undefined\"!=typeof Element&&Element instanceof Object){if(!(t instanceof h(t).Element))throw new TypeError('parameter 1 is not of type \"Element\".');var e=this.observations_;e.has(t)&&(e.delete(t),e.size||this.controller_.removeObserver(this))}},t.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},t.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach((function(e){e.isActive()&&t.activeObservations_.push(e)}))},t.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,e=this.activeObservations_.map((function(t){return new y(t.target,t.broadcastRect())}));this.callback_.call(t,e,t),this.clearActive()}},t.prototype.clearActive=function(){this.activeObservations_.splice(0)},t.prototype.hasActive=function(){return this.activeObservations_.length>0},t}(),g=function(){function t(e){if(!(this instanceof t))throw new TypeError(\"Cannot call a class as a function.\");if(!arguments.length)throw new TypeError(\"1 argument required, but only 0 present.\");var n=s.getInstance();this.observer_=new w(e,n,this)}return t.prototype.observe=function(t){this.observer_.observe(t)},t.prototype.unobserve=function(t){this.observer_.unobserve(t)},t.prototype.disconnect=function(){this.observer_.disconnect()},t}(),E=void 0!==e.ResizeObserver?e.ResizeObserver:g;export{E as default};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.250c89dd.js",
    "content": "import{Q as e,S as t,b0 as a,x as i,$ as r,r as o,ea as n,_ as s,e as l,i as d,w as c,h,o as u,a as p,t as y,A as m,P as f,n as b}from\"./main-a0d7432d.js\";import{v as _,b as v,c as w,u as g,p as k}from\"./c.fbd8d2ba.js\";import{c as D}from\"./c.587d89ba.js\";import\"./c.c608beec.js\";import\"./c.c176780d.js\";import\"./c.936d9772.js\";import\"./c.8e28b461.js\";const x=Intl&&Intl.DateTimeFormat,T=[38,33,36],C=[40,34,35],S=new Set([37,...T]),$=new Set([39,...C]),F=new Set([39,...T]),U=new Set([37,...C]),N=new Set([37,39,...T,...C]),M=e(class extends t{constructor(e){super(e),this.tt=new WeakMap}render(e){return[e]}update(e,[t]){if(_(this.it)&&(!_(t)||this.it.strings!==t.strings)){const t=v(e).pop();let r=this.tt.get(this.it.strings);if(void 0===r){const e=document.createDocumentFragment();r=a(i,e),r.setConnected(!1),this.tt.set(this.it.strings,r)}w(r,[t]),g(r,void 0,t)}if(_(t)){if(!_(this.it)||this.it.strings!==t.strings){const a=this.tt.get(t.strings);if(void 0!==a){const t=v(a).pop();k(e),g(e,void 0,t),w(e,[t])}}this.it=t}else this.it=void 0;return this.render(t)}});function E(e,t,a){return new Date(Date.UTC(e,t,a))}const L=r`<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\"></path></svg>`,W=r`<svg height=\"24\" viewBox=\"0 0 24 24\" width=\"24\"><path d=\"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\"></path></svg>`,Y=o`\nbutton {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n\n  position: relative;\n  display: block;\n  margin: 0;\n  padding: 0;\n  background: none; /** NOTE: IE11 fix */\n  color: inherit;\n  border: none;\n  font: inherit;\n  text-align: left;\n  text-transform: inherit;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n`;o`\na {\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n\n  position: relative;\n  display: inline-block;\n  background: initial;\n  color: inherit;\n  font: inherit;\n  text-transform: inherit;\n  text-decoration: none;\n  outline: none;\n}\na:focus,\na:focus.page-selected {\n  text-decoration: underline;\n}\n`,o`\nsvg {\n  display: block;\n  min-width: var(--svg-icon-min-width, 24px);\n  min-height: var(--svg-icon-min-height, 24px);\n  fill: var(--svg-icon-fill, currentColor);\n  pointer-events: none;\n}\n`,o`[hidden] { display: none !important; }`;const V=o`\n:host {\n  display: block;\n\n  /* --app-datepicker-width: 300px; */\n  /* --app-datepicker-primary-color: #4285f4; */\n  /* --app-datepicker-header-height: 80px; */\n}\n\n* {\n  box-sizing: border-box;\n}\n`;function O(e,t){return+t-+e}function A({hasAltKey:e,keyCode:t,focusedDate:a,selectedDate:i,disabledDaysSet:r,disabledDatesSet:o,minTime:n,maxTime:s}){const l=a.getUTCFullYear(),d=a.getUTCMonth(),c=a.getUTCDate(),h=+a,u=i.getUTCFullYear(),p=i.getUTCMonth();let y=l,m=d,f=c,b=!0;switch((p!==d||u!==l)&&(y=u,m=p,f=1,b=34===t||33===t||35===t),b){case h===n&&S.has(t):case h===s&&$.has(t):break;case 38===t:f-=7;break;case 40===t:f+=7;break;case 37===t:f-=1;break;case 39===t:f+=1;break;case 34===t:e?y+=1:m+=1;break;case 33===t:e?y-=1:m-=1;break;case 35===t:m+=1,f=0;break;default:f=1}if(34===t||33===t){const e=E(y,m+1,0).getUTCDate();f>e&&(f=e)}const _=function({keyCode:e,disabledDaysSet:t,disabledDatesSet:a,focusedDate:i,maxTime:r,minTime:o}){const n=+i;let s=n<o,l=n>r;if(O(o,r)<864e5)return i;let d=s||l||t.has(i.getUTCDay())||a.has(n);if(!d)return i;let c=0,h=s===l?i:new Date(s?o-864e5:864e5+r);const u=h.getUTCFullYear(),p=h.getUTCMonth();let y=h.getUTCDate();for(;d;)(s||!l&&F.has(e))&&(y+=1),(l||!s&&U.has(e))&&(y-=1),h=E(u,p,y),c=+h,s||(s=c<o,s&&(h=new Date(o),c=+h,y=h.getUTCDate())),l||(l=c>r,l&&(h=new Date(r),c=+h,y=h.getUTCDate())),d=t.has(h.getUTCDay())||a.has(c);return h}({keyCode:t,maxTime:s,minTime:n,disabledDaysSet:r,disabledDatesSet:o,focusedDate:E(y,m,f)});return _}function P(e,t,a){return e.dispatchEvent(new CustomEvent(t,{detail:a,bubbles:!0,composed:!0}))}function j(e,t){return e.composedPath().find((e=>e instanceof HTMLElement&&t(e)))}function I(e){return t=>e.format(t).replace(/\\u200e/gi,\"\")}function z(e){const t=x(e,{timeZone:\"UTC\",weekday:\"short\",month:\"short\",day:\"numeric\"}),a=x(e,{timeZone:\"UTC\",day:\"numeric\"}),i=x(e,{timeZone:\"UTC\",year:\"numeric\",month:\"short\",day:\"numeric\"}),r=x(e,{timeZone:\"UTC\",year:\"numeric\",month:\"long\"}),o=x(e,{timeZone:\"UTC\",weekday:\"long\"}),n=x(e,{timeZone:\"UTC\",weekday:\"narrow\"}),s=x(e,{timeZone:\"UTC\",year:\"numeric\"});return{locale:e,dateFormat:I(t),dayFormat:I(a),fullDateFormat:I(i),longMonthYearFormat:I(r),longWeekdayFormat:I(o),narrowWeekdayFormat:I(n),yearFormat:I(s)}}function K(e,t){const a=function(e,t){const a=t.getUTCFullYear(),i=t.getUTCMonth(),r=t.getUTCDate(),o=t.getUTCDay();let n=o;return\"first-4-day-week\"===e&&(n=3),\"first-day-of-year\"===e&&(n=6),\"first-full-week\"===e&&(n=0),E(a,i,r-o+n)}(e,t),i=E(a.getUTCFullYear(),0,1),r=1+(+a-+i)/864e5;return Math.ceil(r/7)}function B(e){if(e>=0&&e<7)return Math.abs(e);return((e<0?7*Math.ceil(Math.abs(e)):0)+e)%7}function R(e,t,a){const i=B(e-t);return a?1+i:i}function Z(e){const{dayFormat:t,fullDateFormat:a,locale:i,longWeekdayFormat:r,narrowWeekdayFormat:o,selectedDate:n,disabledDates:s,disabledDays:l,firstDayOfWeek:d,max:c,min:h,showWeekNumber:u,weekLabel:p,weekNumberType:y}=e,m=null==h?Number.MIN_SAFE_INTEGER:+h,f=null==c?Number.MAX_SAFE_INTEGER:+c,b=function(e){const{firstDayOfWeek:t=0,showWeekNumber:a=!1,weekLabel:i,longWeekdayFormat:r,narrowWeekdayFormat:o}=e||{},n=1+(t+(t<0?7:0))%7,s=i||\"Wk\",l=a?[{label:\"Wk\"===s?\"Week\":s,value:s}]:[],d=Array.from(Array(7)).reduce(((e,t,a)=>{const i=E(2017,0,n+a);return e.push({label:r(i),value:o(i)}),e}),l);return d}({longWeekdayFormat:r,narrowWeekdayFormat:o,firstDayOfWeek:d,showWeekNumber:u,weekLabel:p}),_=e=>[i,e.toJSON(),null==s?void 0:s.join(\"_\"),null==l?void 0:l.join(\"_\"),d,null==c?void 0:c.toJSON(),null==h?void 0:h.toJSON(),u,p,y].filter(Boolean).join(\":\"),v=n.getUTCFullYear(),w=n.getUTCMonth(),g=[-1,0,1].map((e=>{const r=E(v,w+e,1),o=+E(v,w+e+1,0),n=_(r);if(o<m||+r>f)return{key:n,calendar:[],disabledDatesSet:new Set,disabledDaysSet:new Set};const b=function(e){const{date:t,dayFormat:a,disabledDates:i=[],disabledDays:r=[],firstDayOfWeek:o=0,fullDateFormat:n,locale:s=\"en-US\",max:l,min:d,showWeekNumber:c=!1,weekLabel:h=\"Week\",weekNumberType:u=\"first-4-day-week\"}=e||{},p=B(o),y=t.getUTCFullYear(),m=t.getUTCMonth(),f=E(y,m,1),b=new Set(r.map((e=>R(e,p,c)))),_=new Set(i.map((e=>+e))),v=[f.toJSON(),p,s,null==l?\"\":l.toJSON(),null==d?\"\":d.toJSON(),Array.from(b).join(\",\"),Array.from(_).join(\",\"),u].filter(Boolean).join(\":\"),w=R(f.getUTCDay(),p,c),g=null==d?+new Date(\"2000-01-01\"):+d,k=null==l?+new Date(\"2100-12-31\"):+l,D=c?8:7,x=E(y,1+m,0).getUTCDate(),T=[];let C=[],S=!1,$=1;for(const e of[0,1,2,3,4,5]){for(const t of[0,1,2,3,4,5,6].concat(7===D?[]:[7])){const i=t+e*D;if(!S&&c&&0===t){const t=K(u,E(y,m,$-(e<1?p:0))),a=`${h} ${t}`;C.push({fullDate:null,label:a,value:`${t}`,key:`${v}:${a}`,disabled:!0});continue}if(S||i<w){C.push({fullDate:null,label:\"\",value:\"\",key:`${v}:${i}`,disabled:!0});continue}const r=E(y,m,$),o=+r,s=b.has(t)||_.has(o)||o<g||o>k;s&&_.add(o),C.push({fullDate:r,label:n(r),value:a(r),key:`${v}:${r.toJSON()}`,disabled:s}),$+=1,$>x&&(S=!0)}T.push(C),C=[]}return{disabledDatesSet:_,calendar:T,disabledDaysSet:new Set(r.map((e=>B(e)))),key:v}}({dayFormat:t,fullDateFormat:a,locale:i,disabledDates:s,disabledDays:l,firstDayOfWeek:d,max:c,min:h,showWeekNumber:u,weekLabel:p,weekNumberType:y,date:r});return{...b,key:n}})),k=[],D=new Set,x=new Set;for(const e of g){const{disabledDatesSet:t,disabledDaysSet:a,...i}=e;if(i.calendar.length>0){if(a.size>0)for(const e of a)x.add(e);if(t.size>0)for(const e of t)D.add(e)}k.push(i)}return{calendars:k,weekdays:b,disabledDatesSet:D,disabledDaysSet:x,key:_(n)}}function q(e){const t=null==e?new Date:new Date(e),a=\"string\"==typeof e&&(/^\\d{4}-\\d{2}-\\d{2}$/i.test(e)||/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}(Z|\\+00:00|-00:00)$/i.test(e)),i=\"number\"==typeof e&&e>0&&isFinite(e);let r=t.getFullYear(),o=t.getMonth(),n=t.getDate();return(a||i)&&(r=t.getUTCFullYear(),o=t.getUTCMonth(),n=t.getUTCDate()),E(r,o,n)}function J(e,t){return e.classList.contains(t)}function X(e,t){return!(null==e||!(t instanceof Date)||isNaN(+t))}function H(e){return e-Math.floor(e)>0?+e.toFixed(3):e}function G(e){return{passive:!0,handleEvent:e}}function Q(e,t){const a=\"string\"==typeof e&&e.length>0?e.split(/,\\s*/i):[];return a.length?\"function\"==typeof t?a.map(t):a:[]}function ee(e){if(e instanceof Date&&!isNaN(+e)){const t=e.toJSON();return null==t?\"\":t.replace(/^(.+)T.+/i,\"$1\")}return\"\"}function te(e,t){if(O(e,t)<864e5)return[];const a=e.getUTCFullYear();return Array.from(Array(t.getUTCFullYear()-a+1),((e,t)=>t+a))}function ae(e,t,a){const i=\"number\"==typeof e?e:+e,r=+t,o=+a;return i<r?r:i>o?o:e}function ie(e){const{clientX:t,clientY:a,pageX:i,pageY:r}=e,o=Math.max(i,t),n=Math.max(r,a),s=e.identifier||e.pointerId;return{x:o,y:n,id:null==s?0:s}}function re(e,t){const a=t.changedTouches;if(null==a)return{newPointer:ie(t),oldPointer:e};const i=Array.from(a,(e=>ie(e))),r=null==e?i[0]:i.find((t=>t.id===e.id));return{newPointer:r,oldPointer:e}}function oe(e,t,a){e.addEventListener(t,a,!!n&&{passive:!0})}class ne{constructor(e,t){this._element=e,this._startPointer=null;const{down:a,move:i,up:r}=t;this._down=this._onDown(a),this._move=this._onMove(i),this._up=this._onUp(r),e&&e.addEventListener&&(e.addEventListener(\"mousedown\",this._down),oe(e,\"touchstart\",this._down),oe(e,\"touchmove\",this._move),oe(e,\"touchend\",this._up))}disconnect(){const e=this._element;e&&e.removeEventListener&&(e.removeEventListener(\"mousedown\",this._down),e.removeEventListener(\"touchstart\",this._down),e.removeEventListener(\"touchmove\",this._move),e.removeEventListener(\"touchend\",this._up))}_onDown(e){return t=>{t instanceof MouseEvent&&(this._element.addEventListener(\"mousemove\",this._move),this._element.addEventListener(\"mouseup\",this._up),this._element.addEventListener(\"mouseleave\",this._up));const{newPointer:a}=re(this._startPointer,t);e(a,t),this._startPointer=a}}_onMove(e){return t=>{this._updatePointers(e,t)}}_onUp(e){return t=>{this._updatePointers(e,t,!0)}}_updatePointers(e,t,a){a&&t instanceof MouseEvent&&(this._element.removeEventListener(\"mousemove\",this._move),this._element.removeEventListener(\"mouseup\",this._up),this._element.removeEventListener(\"mouseleave\",this._up));const{newPointer:i,oldPointer:r}=re(this._startPointer,t);e(i,r,t),this._startPointer=a?null:i}}class se extends h{constructor(){super(),this.firstDayOfWeek=0,this.showWeekNumber=!1,this.weekNumberType=\"first-4-day-week\",this.landscape=!1,this.locale=x&&x().resolvedOptions&&x().resolvedOptions().locale||\"en-US\",this.disabledDays=\"\",this.disabledDates=\"\",this.weekLabel=\"Wk\",this.inline=!1,this.dragRatio=.15,this._hasMin=!1,this._hasMax=!1,this._disabledDaysSet=new Set,this._disabledDatesSet=new Set,this._dx=-1/0,this._hasNativeWebAnimation=\"animate\"in HTMLElement.prototype,this._updatingDateWithKey=!1;const e=q(),t=z(this.locale),a=ee(e),i=q(\"2100-12-31\");this.value=a,this.startView=\"calendar\",this._min=new Date(e),this._max=new Date(i),this._todayDate=e,this._maxDate=i,this._yearList=te(e,i),this._selectedDate=new Date(e),this._focusedDate=new Date(e),this._formatters=t}get startView(){return this._startView}set startView(e){const t=e||\"calendar\";if(\"calendar\"!==t&&\"yearList\"!==t)return;const a=this._startView;this._startView=t,this.requestUpdate(\"startView\",a)}get min(){return this._hasMin?ee(this._min):\"\"}set min(e){const t=q(e),a=X(e,t);this._min=a?t:this._todayDate,this._hasMin=a,this.requestUpdate(\"min\")}get max(){return this._hasMax?ee(this._max):\"\"}set max(e){const t=q(e),a=X(e,t);this._max=a?t:this._maxDate,this._hasMax=a,this.requestUpdate(\"max\")}get value(){return ee(this._focusedDate)}set value(e){const t=q(e),a=X(e,t)?t:this._todayDate;this._focusedDate=new Date(a),this._selectedDate=this._lastSelectedDate=new Date(a)}disconnectedCallback(){super.disconnectedCallback(),this._tracker&&(this._tracker.disconnect(),this._tracker=void 0)}render(){this._formatters.locale!==this.locale&&(this._formatters=z(this.locale));const e=\"yearList\"===this._startView?this._renderDatepickerYearList():this._renderDatepickerCalendar(),t=this.inline?null:r`<div class=\"datepicker-header\" part=\"header\">${this._renderHeaderSelectorButton()}</div>`;return r`\n    ${t}\n    <div class=\"datepicker-body\" part=\"body\">${M(e)}</div>\n    `}firstUpdated(){let e;e=\"calendar\"===this._startView?this.inline?this.shadowRoot.querySelector(\".btn__month-selector\"):this._buttonSelectorYear:this._yearViewListItem,P(this,\"datepicker-first-updated\",{firstFocusableElement:e,value:this.value})}async updated(e){const t=this._startView;if(e.has(\"min\")||e.has(\"max\")){this._yearList=te(this._min,this._max),\"yearList\"===t&&this.requestUpdate();const e=+this._min,a=+this._max;if(O(e,a)>864e5){const t=+this._focusedDate;let i=t;t<e&&(i=e),t>a&&(i=a),this.value=ee(new Date(i))}}if(e.has(\"_startView\")||e.has(\"startView\")){if(\"yearList\"===t){const e=48*(this._selectedDate.getUTCFullYear()-this._min.getUTCFullYear()-2);!function(e,t){if(null==e.scrollTo){const{top:a,left:i}=t||{};e.scrollTop=a||0,e.scrollLeft=i||0}else e.scrollTo(t)}(this._yearViewFullList,{top:e,left:0})}if(\"calendar\"===t&&null==this._tracker){const e=this.calendarsContainer;let t=!1,a=!1,i=!1;if(e){const r={down:()=>{i||(t=!0,this._dx=0)},move:(r,o)=>{if(i||!t)return;const n=this._dx,s=n<0&&J(e,\"has-max-date\")||n>0&&J(e,\"has-min-date\");!s&&Math.abs(n)>0&&t&&(a=!0,e.style.transform=`translateX(${H(n)}px)`),this._dx=s?0:n+(r.x-o.x)},up:async(r,o,n)=>{if(t&&a){const r=this._dx,o=e.getBoundingClientRect().width/3,n=Math.abs(r)>Number(this.dragRatio)*o,s=350,l=\"cubic-bezier(0, 0, .4, 1)\",d=n?H(o*(r<0?-1:1)):0;i=!0,await async function(e,t){const{hasNativeWebAnimation:a=!1,keyframes:i=[],options:r={duration:100}}=t||{};if(Array.isArray(i)&&i.length)return new Promise((t=>{if(a)e.animate(i,r).onfinish=()=>t();else{const[,a]=i||[],o=()=>{e.removeEventListener(\"transitionend\",o),t()};e.addEventListener(\"transitionend\",o),e.style.transitionDuration=`${r.duration}ms`,r.easing&&(e.style.transitionTimingFunction=r.easing),Object.keys(a).forEach((t=>{t&&(e.style[t]=a[t])}))}}))}(e,{hasNativeWebAnimation:this._hasNativeWebAnimation,keyframes:[{transform:`translateX(${r}px)`},{transform:`translateX(${d}px)`}],options:{duration:s,easing:l}}),n&&this._updateMonth(r<0?\"next\":\"previous\").handleEvent(),t=a=i=!1,this._dx=-1/0,e.removeAttribute(\"style\"),P(this,\"datepicker-animation-finished\")}else t&&(this._updateFocusedDate(n),t=a=!1,this._dx=-1/0)}};this._tracker=new ne(e,r)}}e.get(\"_startView\")&&\"calendar\"===t&&this._focusElement('[part=\"year-selector\"]')}this._updatingDateWithKey&&(this._focusElement('[part=\"calendars\"]:nth-of-type(2) .day--focused'),this._updatingDateWithKey=!1)}_focusElement(e){const t=this.shadowRoot.querySelector(e);t&&t.focus()}_renderHeaderSelectorButton(){const{yearFormat:e,dateFormat:t}=this._formatters,a=\"calendar\"===this.startView,i=this._focusedDate,o=t(i),n=e(i);return r`\n    <button\n      class=\"${u({\"btn__year-selector\":!0,selected:!a})}\"\n      type=\"button\"\n      part=\"year-selector\"\n      data-view=\"${\"yearList\"}\"\n      @click=\"${this._updateView(\"yearList\")}\">${n}</button>\n\n    <div class=\"datepicker-toolbar\" part=\"toolbar\">\n      <button\n        class=\"${u({\"btn__calendar-selector\":!0,selected:a})}\"\n        type=\"button\"\n        part=\"calendar-selector\"\n        data-view=\"${\"calendar\"}\"\n        @click=\"${this._updateView(\"calendar\")}\">${o}</button>\n    </div>\n    `}_renderDatepickerYearList(){const{yearFormat:e}=this._formatters,t=this._focusedDate.getUTCFullYear();return r`\n    <div class=\"datepicker-body__year-list-view\" part=\"year-list-view\">\n      <div class=\"year-list-view__full-list\" part=\"year-list\" @click=\"${this._updateYear}\">\n      ${this._yearList.map((a=>r`<button\n        class=\"${u({\"year-list-view__list-item\":!0,\"year--selected\":t===a})}\"\n        type=\"button\"\n        part=\"year\"\n        .year=\"${a}\">${e(E(a,0,1))}</button>`))}</div>\n    </div>\n    `}_renderDatepickerCalendar(){const{longMonthYearFormat:e,dayFormat:t,fullDateFormat:a,longWeekdayFormat:i,narrowWeekdayFormat:o}=this._formatters,n=Q(this.disabledDays,Number),s=Q(this.disabledDates,q),l=this.showWeekNumber,d=this._focusedDate,c=this.firstDayOfWeek,h=q(),p=this._selectedDate,y=this._max,m=this._min,{calendars:f,disabledDaysSet:b,disabledDatesSet:_,weekdays:v}=Z({dayFormat:t,fullDateFormat:a,longWeekdayFormat:i,narrowWeekdayFormat:o,firstDayOfWeek:c,disabledDays:n,disabledDates:s,locale:this.locale,selectedDate:p,showWeekNumber:this.showWeekNumber,weekNumberType:this.weekNumberType,max:y,min:m,weekLabel:this.weekLabel}),w=!f[0].calendar.length,g=!f[2].calendar.length,k=v.map((e=>r`<th\n        class=\"calendar-weekday\"\n        part=\"calendar-weekday\"\n        role=\"columnheader\"\n        aria-label=\"${e.label}\"\n      >\n        <div class=\"weekday\" part=\"weekday\">${e.value}</div>\n      </th>`)),x=D(f,(e=>e.key),(({calendar:t},a)=>{if(!t.length)return r`<div class=\"calendar-container\" part=\"calendar\"></div>`;const i=`calendarcaption${a}`,o=t[1][1].fullDate,n=1===a,s=n&&!this._isInVisibleMonth(d,p)?A({disabledDaysSet:b,disabledDatesSet:_,hasAltKey:!1,keyCode:36,focusedDate:d,selectedDate:p,minTime:+m,maxTime:+y}):d;return r`\n      <div class=\"calendar-container\" part=\"calendar\">\n        <table class=\"calendar-table\" part=\"table\" role=\"grid\" aria-labelledby=\"${i}\">\n          <caption id=\"${i}\">\n            <div class=\"calendar-label\" part=\"label\">${o?e(o):\"\"}</div>\n          </caption>\n\n          <thead role=\"rowgroup\">\n            <tr class=\"calendar-weekdays\" part=\"weekdays\" role=\"row\">${k}</tr>\n          </thead>\n\n          <tbody role=\"rowgroup\">${t.map((e=>r`<tr role=\"row\">${e.map(((e,t)=>{const{disabled:a,fullDate:i,label:o,value:c}=e;if(!i&&c&&l&&t<1)return r`<th\n                      class=\"full-calendar__day weekday-label\"\n                      part=\"calendar-day\"\n                      scope=\"row\"\n                      role=\"rowheader\"\n                      abbr=\"${o}\"\n                      aria-label=\"${o}\"\n                    >${c}</th>`;if(!c||!i)return r`<td class=\"full-calendar__day day--empty\" part=\"calendar-day\"></td>`;const p=+new Date(i),y=+d===p,m=n&&s.getUTCDate()===Number(c);return r`\n                  <td\n                    tabindex=\"${m?\"0\":\"-1\"}\"\n                    class=\"${u({\"full-calendar__day\":!0,\"day--disabled\":a,\"day--today\":+h===p,\"day--focused\":!a&&y})}\"\n                    part=\"calendar-day\"\n                    role=\"gridcell\"\n                    aria-disabled=\"${a?\"true\":\"false\"}\"\n                    aria-label=\"${o}\"\n                    aria-selected=\"${y?\"true\":\"false\"}\"\n                    .fullDate=\"${i}\"\n                    .day=\"${c}\"\n                  >\n                    <div class=\"calendar-day\" part=\"day\">${c}</div>\n                  </td>\n                  `}))}</tr>`))}</tbody>\n        </table>\n      </div>\n      `}));return this._disabledDatesSet=_,this._disabledDaysSet=b,r`\n    <div class=\"datepicker-body__calendar-view\" part=\"calendar-view\">\n      <div class=\"calendar-view__month-selector\" part=\"month-selectors\">\n        <div class=\"month-selector-container\">${w?null:r`\n          <button\n            class=\"btn__month-selector\"\n            type=\"button\"\n            part=\"month-selector\"\n            aria-label=\"Previous month\"\n            @click=\"${this._updateMonth(\"previous\")}\"\n          >${L}</button>\n        `}</div>\n\n        <div class=\"month-selector-container\">${g?null:r`\n          <button\n            class=\"btn__month-selector\"\n            type=\"button\"\n            part=\"month-selector\"\n            aria-label=\"Next month\"\n            @click=\"${this._updateMonth(\"next\")}\"\n          >${W}</button>\n        `}</div>\n      </div>\n\n      <div\n        class=\"${u({\"calendars-container\":!0,\"has-min-date\":w,\"has-max-date\":g})}\"\n        part=\"calendars\"\n        @keyup=\"${this._updateFocusedDateWithKeyboard}\"\n      >${x}</div>\n    </div>\n    `}_updateView(e){return G((()=>{\"calendar\"===e&&(this._selectedDate=this._lastSelectedDate=new Date(ae(this._focusedDate,this._min,this._max))),this._startView=e}))}_updateMonth(e){return G((()=>{if(null==this.calendarsContainer)return this.updateComplete;const t=this._lastSelectedDate||this._selectedDate,a=this._min,i=this._max,r=\"previous\"===e,o=E(t.getUTCFullYear(),t.getUTCMonth()+(r?-1:1),1),n=o.getUTCFullYear(),s=o.getUTCMonth(),l=a.getUTCFullYear(),d=a.getUTCMonth(),c=i.getUTCFullYear(),h=i.getUTCMonth();return n<l||n<=l&&s<d||(n>c||n>=c&&s>h)||(this._lastSelectedDate=o,this._selectedDate=this._lastSelectedDate),this.updateComplete}))}_updateYear(e){const t=j(e,(e=>J(e,\"year-list-view__list-item\")));if(null==t)return;const a=ae(new Date(this._focusedDate).setUTCFullYear(+t.year),this._min,this._max);this._selectedDate=this._lastSelectedDate=new Date(a),this._focusedDate=new Date(a),this._startView=\"calendar\"}_updateFocusedDate(e){const t=j(e,(e=>J(e,\"full-calendar__day\")));null==t||[\"day--empty\",\"day--disabled\",\"day--focused\",\"weekday-label\"].some((e=>J(t,e)))||(this._focusedDate=new Date(t.fullDate),P(this,\"datepicker-value-updated\",{isKeypress:!1,value:this.value}))}_updateFocusedDateWithKeyboard(e){const t=e.keyCode;if(13===t||32===t)return P(this,\"datepicker-value-updated\",{keyCode:t,isKeypress:!0,value:this.value}),void(this._focusedDate=new Date(this._selectedDate));if(9===t||!N.has(t))return;const a=this._selectedDate,i=A({keyCode:t,selectedDate:a,disabledDatesSet:this._disabledDatesSet,disabledDaysSet:this._disabledDaysSet,focusedDate:this._focusedDate,hasAltKey:e.altKey,maxTime:+this._max,minTime:+this._min});this._isInVisibleMonth(i,a)||(this._selectedDate=this._lastSelectedDate=i),this._focusedDate=i,this._updatingDateWithKey=!0,P(this,\"datepicker-value-updated\",{keyCode:t,isKeypress:!0,value:this.value})}_isInVisibleMonth(e,t){const a=e.getUTCFullYear(),i=e.getUTCMonth(),r=t.getUTCFullYear(),o=t.getUTCMonth();return a===r&&i===o}get calendarsContainer(){return this.shadowRoot.querySelector(\".calendars-container\")}}var le,de;se.styles=[V,Y,o`\n    :host {\n      width: 312px;\n      /** NOTE: Magic number as 16:9 aspect ratio does not look good */\n      /* height: calc((var(--app-datepicker-width) / .66) - var(--app-datepicker-footer-height, 56px)); */\n      background-color: var(--app-datepicker-bg-color, #fff);\n      color: var(--app-datepicker-color, #000);\n      border-radius:\n        var(--app-datepicker-border-top-left-radius, 0)\n        var(--app-datepicker-border-top-right-radius, 0)\n        var(--app-datepicker-border-bottom-right-radius, 0)\n        var(--app-datepicker-border-bottom-left-radius, 0);\n      contain: content;\n      overflow: hidden;\n    }\n    :host([landscape]) {\n      display: flex;\n\n      /** <iphone-5-landscape-width> - <standard-side-margin-width> */\n      min-width: calc(568px - 16px * 2);\n      width: calc(568px - 16px * 2);\n    }\n\n    .datepicker-header + .datepicker-body {\n      border-top: 1px solid var(--app-datepicker-separator-color, #ddd);\n    }\n    :host([landscape]) > .datepicker-header + .datepicker-body {\n      border-top: none;\n      border-left: 1px solid var(--app-datepicker-separator-color, #ddd);\n    }\n\n    .datepicker-header {\n      display: flex;\n      flex-direction: column;\n      align-items: flex-start;\n\n      position: relative;\n      padding: 16px 24px;\n    }\n    :host([landscape]) > .datepicker-header {\n      /** :this.<one-liner-month-day-width> + :this.<side-padding-width> */\n      min-width: calc(14ch + 24px * 2);\n    }\n\n    .btn__year-selector,\n    .btn__calendar-selector {\n      color: var(--app-datepicker-selector-color, rgba(0, 0, 0, .55));\n      cursor: pointer;\n      /* outline: none; */\n    }\n    .btn__year-selector.selected,\n    .btn__calendar-selector.selected {\n      color: currentColor;\n    }\n\n    /**\n      * NOTE: IE11-only fix. This prevents formatted focused date from overflowing the container.\n      */\n    .datepicker-toolbar {\n      width: 100%;\n    }\n\n    .btn__year-selector {\n      font-size: 16px;\n      font-weight: 700;\n    }\n    .btn__calendar-selector {\n      font-size: 36px;\n      font-weight: 700;\n      line-height: 1;\n    }\n\n    .datepicker-body {\n      position: relative;\n      width: 100%;\n      overflow: hidden;\n    }\n\n    .datepicker-body__calendar-view {\n      min-height: 56px;\n    }\n\n    .calendar-view__month-selector {\n      display: flex;\n      align-items: center;\n\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n      padding: 0 8px;\n      z-index: 1;\n    }\n\n    .month-selector-container {\n      max-height: 56px;\n      height: 100%;\n    }\n    .month-selector-container + .month-selector-container {\n      margin: 0 0 0 auto;\n    }\n\n    .btn__month-selector {\n      padding: calc((56px - 24px) / 2);\n      /**\n        * NOTE: button element contains no text, only SVG.\n        * No extra height will incur with such setting.\n        */\n      line-height: 0;\n    }\n    .btn__month-selector > svg {\n      fill: currentColor;\n    }\n\n    .calendars-container {\n      display: flex;\n      justify-content: center;\n\n      position: relative;\n      top: 0;\n      left: calc(-100%);\n      width: calc(100% * 3);\n      transform: translateZ(0);\n      will-change: transform;\n      /**\n        * NOTE: Required for Pointer Events API to work on touch devices.\n        * Native \\`pan-y\\` action will be fired by the browsers since we only care about the\n        * horizontal direction. This is great as vertical scrolling still works even when touch\n        * event happens on a datepicker's calendar.\n        */\n      touch-action: pan-y;\n      /* outline: none; */\n    }\n\n    .year-list-view__full-list {\n      max-height: calc(48px * 7);\n      overflow-y: auto;\n\n      scrollbar-color: var(--app-datepicker-scrollbar-thumb-bg-color, rgba(0, 0, 0, .35)) rgba(0, 0, 0, 0);\n      scrollbar-width: thin;\n    }\n    .year-list-view__full-list::-webkit-scrollbar {\n      width: 8px;\n      background-color: rgba(0, 0, 0, 0);\n    }\n    .year-list-view__full-list::-webkit-scrollbar-thumb {\n      background-color: var(--app-datepicker-scrollbar-thumb-bg-color, rgba(0, 0, 0, .35));\n      border-radius: 50px;\n    }\n    .year-list-view__full-list::-webkit-scrollbar-thumb:hover {\n      background-color: var(--app-datepicker-scrollbar-thumb-hover-bg-color, rgba(0, 0, 0, .5));\n    }\n\n    .calendar-weekdays > th,\n    .weekday-label {\n      color: var(--app-datepicker-weekday-color, rgba(0, 0, 0, .55));\n      font-weight: 400;\n      transform: translateZ(0);\n      will-change: transform;\n    }\n\n    .calendar-container,\n    .calendar-label,\n    .calendar-table {\n      width: 100%;\n    }\n\n    .calendar-container {\n      position: relative;\n      padding: 0 16px 16px;\n    }\n\n    .calendar-table {\n      -moz-user-select: none;\n      -webkit-user-select: none;\n      user-select: none;\n\n      border-collapse: collapse;\n      border-spacing: 0;\n      text-align: center;\n    }\n\n    .calendar-label {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n\n      height: 56px;\n      font-weight: 500;\n      text-align: center;\n    }\n\n    .calendar-weekday,\n    .full-calendar__day {\n      position: relative;\n      width: calc(100% / 7);\n      height: 0;\n      padding: calc(100% / 7 / 2) 0;\n      outline: none;\n      text-align: center;\n    }\n    .full-calendar__day:not(.day--disabled):focus {\n      outline: #000 dotted 1px;\n      outline: -webkit-focus-ring-color auto 1px;\n    }\n    :host([showweeknumber]) .calendar-weekday,\n    :host([showweeknumber]) .full-calendar__day {\n      width: calc(100% / 8);\n      padding-top: calc(100% / 8);\n      padding-bottom: 0;\n    }\n    :host([showweeknumber]) th.weekday-label {\n      padding: 0;\n    }\n\n    /**\n      * NOTE: Interesting fact! That is ::after will trigger paint when dragging. This will trigger\n      * layout and paint on **ONLY** affected nodes. This is much cheaper as compared to rendering\n      * all :::after of all calendar day elements. When dragging the entire calendar container,\n      * because of all layout and paint trigger on each and every ::after, this becomes a expensive\n      * task for the browsers especially on low-end devices. Even though animating opacity is much\n      * cheaper, the technique does not work here. Adding 'will-change' will further reduce overall\n      * painting at the expense of memory consumption as many cells in a table has been promoted\n      * a its own layer.\n      */\n    .full-calendar__day:not(.day--empty):not(.day--disabled):not(.weekday-label) {\n      transform: translateZ(0);\n      will-change: transform;\n    }\n    .full-calendar__day:not(.day--empty):not(.day--disabled):not(.weekday-label).day--focused::after,\n    .full-calendar__day:not(.day--empty):not(.day--disabled):not(.day--focused):not(.weekday-label):hover::after {\n      content: '';\n      display: block;\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n      background-color: var(--app-datepicker-accent-color, #1a73e8);\n      border-radius: 50%;\n      opacity: 0;\n      pointer-events: none;\n    }\n    .full-calendar__day:not(.day--empty):not(.day--disabled):not(.weekday-label) {\n      cursor: pointer;\n      pointer-events: auto;\n      -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n    }\n    .full-calendar__day.day--focused:not(.day--empty):not(.day--disabled):not(.weekday-label)::after,\n    .full-calendar__day.day--today.day--focused:not(.day--empty):not(.day--disabled):not(.weekday-label)::after {\n      opacity: 1;\n    }\n\n    .calendar-weekday > .weekday,\n    .full-calendar__day > .calendar-day {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n\n      position: absolute;\n      top: 5%;\n      left: 5%;\n      width: 90%;\n      height: 90%;\n      color: currentColor;\n      font-size: 14px;\n      pointer-events: none;\n      z-index: 1;\n    }\n    .full-calendar__day.day--today {\n      color: var(--app-datepicker-accent-color, #1a73e8);\n    }\n    .full-calendar__day.day--focused,\n    .full-calendar__day.day--today.day--focused {\n      color: var(--app-datepicker-focused-day-color, #fff);\n    }\n    .full-calendar__day.day--empty,\n    .full-calendar__day.weekday-label,\n    .full-calendar__day.day--disabled > .calendar-day {\n      pointer-events: none;\n    }\n    .full-calendar__day.day--disabled:not(.day--today) {\n      color: var(--app-datepicker-disabled-day-color, rgba(0, 0, 0, .55));\n    }\n\n    .year-list-view__list-item {\n      position: relative;\n      width: 100%;\n      padding: 12px 16px;\n      text-align: center;\n      /** NOTE: Reduce paint when hovering and scrolling, but this increases memory usage */\n      /* will-change: opacity; */\n      /* outline: none; */\n    }\n    .year-list-view__list-item::after {\n      content: '';\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n      background-color: var(--app-datepicker-focused-year-bg-color, #000);\n      opacity: 0;\n      pointer-events: none;\n    }\n    .year-list-view__list-item:focus::after {\n      opacity: .05;\n    }\n    .year-list-view__list-item.year--selected {\n      color: var(--app-datepicker-accent-color, #1a73e8);\n      font-size: 24px;\n      font-weight: 500;\n    }\n\n    @media (any-hover: hover) {\n      .btn__month-selector:hover,\n      .year-list-view__list-item:hover {\n        cursor: pointer;\n      }\n      .full-calendar__day:not(.day--empty):not(.day--disabled):not(.day--focused):not(.weekday-label):hover::after {\n        opacity: .15;\n      }\n      .year-list-view__list-item:hover::after {\n        opacity: .05;\n      }\n    }\n\n    @supports (background: -webkit-canvas(squares)) {\n      .calendar-container {\n        padding: 56px 16px 16px;\n      }\n\n      table > caption {\n        position: absolute;\n        top: 0;\n        left: 50%;\n        transform: translate3d(-50%, 0, 0);\n        will-change: transform;\n      }\n    }\n    `],s([l({type:Number,reflect:!0})],se.prototype,\"firstDayOfWeek\",void 0),s([l({type:Boolean,reflect:!0})],se.prototype,\"showWeekNumber\",void 0),s([l({type:String,reflect:!0})],se.prototype,\"weekNumberType\",void 0),s([l({type:Boolean,reflect:!0})],se.prototype,\"landscape\",void 0),s([l({type:String,reflect:!0})],se.prototype,\"startView\",null),s([l({type:String,reflect:!0})],se.prototype,\"min\",null),s([l({type:String,reflect:!0})],se.prototype,\"max\",null),s([l({type:String})],se.prototype,\"value\",null),s([l({type:String})],se.prototype,\"locale\",void 0),s([l({type:String})],se.prototype,\"disabledDays\",void 0),s([l({type:String})],se.prototype,\"disabledDates\",void 0),s([l({type:String})],se.prototype,\"weekLabel\",void 0),s([l({type:Boolean})],se.prototype,\"inline\",void 0),s([l({type:Number})],se.prototype,\"dragRatio\",void 0),s([l({type:Date,attribute:!1})],se.prototype,\"_selectedDate\",void 0),s([l({type:Date,attribute:!1})],se.prototype,\"_focusedDate\",void 0),s([l({type:String,attribute:!1})],se.prototype,\"_startView\",void 0),s([d(\".year-list-view__full-list\")],se.prototype,\"_yearViewFullList\",void 0),s([d(\".btn__year-selector\")],se.prototype,\"_buttonSelectorYear\",void 0),s([d(\".year-list-view__list-item\")],se.prototype,\"_yearViewListItem\",void 0),s([c({passive:!0})],se.prototype,\"_updateYear\",null),s([c({passive:!0})],se.prototype,\"_updateFocusedDateWithKeyboard\",null),le=\"app-datepicker\",de=se,window.customElements&&!window.customElements.get(le)&&window.customElements.define(le,de);let ce=p([b(\"ha-dialog-date-picker\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[l()],key:\"value\",value:void 0},{kind:\"field\",decorators:[l({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[l()],key:\"label\",value:void 0},{kind:\"field\",decorators:[y()],key:\"_params\",value:void 0},{kind:\"field\",decorators:[y()],key:\"_value\",value:void 0},{kind:\"method\",key:\"showDialog\",value:function(e){this._params=e,this._value=e.value}},{kind:\"method\",key:\"closeDialog\",value:function(){this._params=void 0,m(this,\"dialog-closed\",{dialog:this.localName})}},{kind:\"method\",key:\"render\",value:function(){return this._params?r`<ha-dialog open @closed=${this.closeDialog}>\n      <app-datepicker\n        .value=${this._value}\n        .min=${this._params.min}\n        .max=${this._params.max}\n        .locale=${this._params.locale}\n        @datepicker-value-updated=${this._valueChanged}\n      ></app-datepicker>\n      <mwc-button slot=\"secondaryAction\" @click=${this._setToday}\n        >today</mwc-button\n      >\n      <mwc-button slot=\"primaryAction\" dialogaction=\"cancel\" class=\"cancel-btn\">\n        cancel\n      </mwc-button>\n      <mwc-button slot=\"primaryAction\" @click=${this._setValue}>ok</mwc-button>\n    </ha-dialog>`:r``}},{kind:\"method\",key:\"_valueChanged\",value:function(e){this._value=e.detail.value}},{kind:\"method\",key:\"_setToday\",value:function(){this._value=(new Date).toISOString().split(\"T\")[0]}},{kind:\"method\",key:\"_setValue\",value:function(){var e;null===(e=this._params)||void 0===e||e.onChange(this._value),this.closeDialog()}},{kind:\"field\",static:!0,key:\"styles\",value:()=>[f,o`\n      ha-dialog {\n        --dialog-content-padding: 0;\n        --justify-action-buttons: space-between;\n      }\n      app-datepicker {\n        --app-datepicker-accent-color: var(--primary-color);\n        --app-datepicker-bg-color: transparent;\n        --app-datepicker-color: var(--primary-text-color);\n        --app-datepicker-disabled-day-color: var(--disabled-text-color);\n        --app-datepicker-focused-day-color: var(--text-primary-color);\n        --app-datepicker-focused-year-bg-color: var(--primary-color);\n        --app-datepicker-selector-color: var(--secondary-text-color);\n        --app-datepicker-separator-color: var(--divider-color);\n        --app-datepicker-weekday-color: var(--secondary-text-color);\n      }\n      app-datepicker::part(calendar-day):focus {\n        outline: none;\n      }\n      @media all and (min-width: 450px) {\n        ha-dialog {\n          --mdc-dialog-min-width: 300px;\n        }\n      }\n      @media all and (max-width: 450px), all and (max-height: 500px) {\n        app-datepicker {\n          width: 100%;\n        }\n      }\n    `]}]}}),h);export{ce as HaDialogDatePicker};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.362d16d4.js",
    "content": "import{a as r,h as e,e as t,t as s,$ as i,ah as o,n as a}from\"./main-a0d7432d.js\";import{e as n,c}from\"./c.50bfd408.js\";const d={hacs_repository:{redirect:\"/hacs/repository\",params:{owner:\"string\",repository:\"string\",category:\"string?\"}}};r([a(\"hacs-my-redirect\")],(function(r,e){return{F:class extends e{constructor(...e){super(...e),r(this)}},d:[{kind:\"field\",decorators:[t({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[t({attribute:!1})],key:\"hacs\",value:void 0},{kind:\"field\",decorators:[t({attribute:!1})],key:\"route\",value:void 0},{kind:\"field\",decorators:[s()],key:\"_error\",value:void 0},{kind:\"method\",key:\"firstUpdated\",value:function(r){const e=this.route.path.indexOf(\"/\",1),t=this.route.path.substr(e+1),s=d[t];if(!s)return void(this._error=this.hacs.localize(\"my.not_supported\",{link:i`<a\n          target=\"_blank\"\n          rel=\"noreferrer noopener\"\n          href=\"https://my.home-assistant.io/faq.html#supported-pages\"\n        >\n          ${this.hacs.localize(\"my.faq_link\")}\n        </a>`}));let a;try{a=this._createRedirectUrl(s)}catch(r){return void(this._error=this.hacs.localize(\"my.error\"))}o(a,{replace:!0})}},{kind:\"method\",key:\"render\",value:function(){return this._error?i`<hass-error-screen .error=${this._error}></hass-error-screen>`:i``}},{kind:\"method\",key:\"_createRedirectUrl\",value:function(r){const e=this._createRedirectParams(r);return`${r.redirect}${e}`}},{kind:\"method\",key:\"_createRedirectParams\",value:function(r){const e=n();if(!r.params&&!Object.keys(e).length)return\"\";const t={};for(const[s,i]of Object.entries(r.params||{}))if(e[s]||!i.endsWith(\"?\")){if(!e[s]||!this._checkParamType(i,e[s]))throw Error();t[s]=e[s]}return`?${c(t)}`}},{kind:\"method\",key:\"_checkParamType\",value:function(r,e){return\"string\"===r||\"string?\"===r}}]}}),e);export{d as REDIRECTS};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.3c651323.js",
    "content": "import{c as e,u as t}from\"./c.743a15a1.js\";import{u as n,ef as r}from\"./main-a0d7432d.js\";import{a,e as u,f as i}from\"./c.9d5cd8b6.js\";import\"./c.47f687e9.js\";import\"./c.175b9792.js\";import\"./c.c176780d.js\";import\"./c.936d9772.js\";import\"./c.8e28b461.js\";import\"./c.fbd8d2ba.js\";import\"./c.c7df5815.js\";import\"./c.db2e6bb6.js\";import\"./c.88ebfd3e.js\";import\"./c.bca0f55d.js\";import\"./c.05e9df28.js\";import\"./c.21c042d4.js\";import\"./c.5ba288d8.js\";import\"./c.6711bf6c.js\";import\"./c.5ede7966.js\";import\"./c.63dc92d5.js\";function o(e){return Intl.getCanonicalLocales(e)}function l(e){if(\"symbol\"==typeof e)throw TypeError(\"Cannot convert a Symbol value to a string\");return String(e)}function s(e){if(void 0===e)return NaN;if(null===e)return 0;if(\"boolean\"==typeof e)return e?1:0;if(\"number\"==typeof e)return e;if(\"symbol\"==typeof e||\"bigint\"==typeof e)throw new TypeError(\"Cannot convert symbol/bigint to number\");return Number(e)}function c(e){if(null==e)throw new TypeError(\"undefined/null cannot be converted to object\");return Object(e)}function f(e,t){return Object.is?Object.is(e,t):e===t?0!==e||1/e==1/t:e!=e&&t!=t}function m(e){return new Array(e)}function p(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function d(e,t){return e-Math.floor(e/t)*t}function g(e){return Math.floor(e/864e5)}function D(e){return Date.UTC(e,0)/864e5}function y(e){return new Date(e).getUTCFullYear()}function v(e){return e%4!=0?365:e%100!=0?366:e%400!=0?365:366}function b(e){return g(e)-D(y(e))}function h(e){return 365===v(y(e))?0:1}function F(e){var t=b(e),n=h(e);if(t>=0&&t<31)return 0;if(t<59+n)return 1;if(t<90+n)return 2;if(t<120+n)return 3;if(t<151+n)return 4;if(t<181+n)return 5;if(t<212+n)return 6;if(t<243+n)return 7;if(t<273+n)return 8;if(t<304+n)return 9;if(t<334+n)return 10;if(t<365+n)return 11;throw new Error(\"Invalid time\")}function E(e){return void 0===e?Object.create(null):c(e)}function C(e,t,n,r){if(void 0!==e){if(e=Number(e),isNaN(e)||e<t||e>n)throw new RangeError(\"\".concat(e,\" is outside of range [\").concat(t,\", \").concat(n,\"]\"));return Math.floor(e)}return r}function S(e,t,n,r,a){return C(e[t],n,r,a)}function w(e,t,n,r,a){if(\"object\"!=typeof e)throw new TypeError(\"Options must be an object\");var u=e[t];if(void 0!==u){if(\"boolean\"!==n&&\"string\"!==n)throw new TypeError(\"invalid type\");if(\"boolean\"===n&&(u=Boolean(u)),\"string\"===n&&(u=l(u)),void 0!==r&&!r.filter((function(e){return e==u})).length)throw new RangeError(\"\".concat(u,\" is not within \").concat(r.join(\", \")));return u}return a}var T=[\"angle-degree\",\"area-acre\",\"area-hectare\",\"concentr-percent\",\"digital-bit\",\"digital-byte\",\"digital-gigabit\",\"digital-gigabyte\",\"digital-kilobit\",\"digital-kilobyte\",\"digital-megabit\",\"digital-megabyte\",\"digital-petabyte\",\"digital-terabit\",\"digital-terabyte\",\"duration-day\",\"duration-hour\",\"duration-millisecond\",\"duration-minute\",\"duration-month\",\"duration-second\",\"duration-week\",\"duration-year\",\"length-centimeter\",\"length-foot\",\"length-inch\",\"length-kilometer\",\"length-meter\",\"length-mile-scandinavian\",\"length-mile\",\"length-millimeter\",\"length-yard\",\"mass-gram\",\"mass-kilogram\",\"mass-ounce\",\"mass-pound\",\"mass-stone\",\"temperature-celsius\",\"temperature-fahrenheit\",\"volume-fluid-ounce\",\"volume-gallon\",\"volume-liter\",\"volume-milliliter\"];function A(e){return e.slice(e.indexOf(\"-\")+1)}var M=T.map(A);function L(e){return M.indexOf(e)>-1}var I=/[^A-Z]/;function B(e){return 3===(e=e.replace(/([a-z])/g,(function(e,t){return t.toUpperCase()}))).length&&!I.test(e)}function N(e){if(L(e=e.replace(/([A-Z])/g,(function(e,t){return t.toLowerCase()}))))return!0;var t=e.split(\"-per-\");if(2!==t.length)return!1;var n=t[0],r=t[1];return!(!L(n)||!L(r))}function O(e){return Math.floor(Math.log(e)*Math.LOG10E)}function k(e,t){if(\"function\"==typeof e.repeat)return e.repeat(t);for(var n=new Array(t),r=0;r<n.length;r++)n[r]=e;return n.join(\"\")}function j(e,t,n,r){e.get(t)||e.set(t,Object.create(null)),e.get(t)[n]=r}function P(e,t){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];var a=e.get(t);if(!a)throw new TypeError(\"\".concat(t,\" InternalSlot has not been initialized\"));return n.reduce((function(e,t){return e[t]=a[t],e}),Object.create(null))}function R(e,t,n){if(void 0===n&&(n=Error),!e)throw new n(t)}function G(e,t,n){var r=(0,n.getInternalSlots)(e),a=r.notation,u=r.dataLocaleData,i=r.numberingSystem;switch(a){case\"standard\":return 0;case\"scientific\":return t;case\"engineering\":return 3*Math.floor(t/3);default:var o=r.compactDisplay,l=r.style,s=r.currencyDisplay,c=void 0;if(\"currency\"===l&&\"name\"!==s){c=(u.numbers.currency[i]||u.numbers.currency[u.numbers.nu[0]]).short}else{var f=u.numbers.decimal[i]||u.numbers.decimal[u.numbers.nu[0]];c=\"long\"===o?f.long:f.short}if(!c)return 0;var m=String(Math.pow(10,t)),p=Object.keys(c);if(m<p[0])return 0;if(m>p[p.length-1])return p[p.length-1].length-1;var d=p.indexOf(m);if(-1===d)return 0;var g=p[d];return\"0\"===c[g].other?0:g.length-c[g].other.match(/0+/)[0].length}}function x(e,t,n){var r,a,u,i,o=n;if(0===e)r=k(\"0\",o),a=0,u=0;else{var l=e.toString(),s=l.indexOf(\"e\"),c=l.split(\"e\"),f=c[0],m=c[1],p=f.replace(\".\",\"\");if(s>=0&&p.length<=o)a=+m,r=p+k(\"0\",o-p.length),u=e;else{var d=(a=O(e))-o+1,g=Math.round(y(e,d));y(g,o-1)>=10&&(a+=1,g=Math.floor(g/10)),r=g.toString(),u=y(g,o-1-a)}}if(a>=o-1?(r+=k(\"0\",a-o+1),i=a+1):a>=0?(r=\"\".concat(r.slice(0,a+1),\".\").concat(r.slice(a+1)),i=a+1):(r=\"0.\".concat(k(\"0\",-a-1)).concat(r),i=1),r.indexOf(\".\")>=0&&n>t){for(var D=n-t;D>0&&\"0\"===r[r.length-1];)r=r.slice(0,-1),D--;\".\"===r[r.length-1]&&(r=r.slice(0,-1))}return{formattedString:r,roundedNumber:u,integerDigitsCount:i};function y(e,t){return t<0?e*Math.pow(10,-t):e/Math.pow(10,t)}}function _(e,t,n){var r,a,u=n,i=Math.round(e*Math.pow(10,u)),o=i/Math.pow(10,u);if(i<1e21)r=i.toString();else{var l=(r=i.toString()).split(\"e\"),s=l[0],c=l[1];r=s.replace(\".\",\"\"),r+=k(\"0\",Math.max(+c-r.length+1,0))}if(0!==u){var f=r.length;if(f<=u)r=k(\"0\",u+1-f)+r,f=u+1;var m=r.slice(0,f-u),p=r.slice(f-u);r=\"\".concat(m,\".\").concat(p),a=m.length}else a=r.length;for(var d=n-t;d>0&&\"0\"===r[r.length-1];)r=r.slice(0,-1),d--;return\".\"===r[r.length-1]&&(r=r.slice(0,-1)),{formattedString:r,roundedNumber:o,integerDigitsCount:a}}function z(e,t){var n,r=t<0||f(t,-0);switch(r&&(t=-t),e.roundingType){case\"significantDigits\":n=x(t,e.minimumSignificantDigits,e.maximumSignificantDigits);break;case\"fractionDigits\":n=_(t,e.minimumFractionDigits,e.maximumFractionDigits);break;default:(n=x(t,1,2)).integerDigitsCount>1&&(n=_(t,0,0))}t=n.roundedNumber;var a=n.formattedString,u=n.integerDigitsCount,i=e.minimumIntegerDigits;u<i&&(a=k(\"0\",i-u)+a);return r&&(t=-t),{roundedNumber:t,formattedString:a}}function U(e,t,n){var r=n.getInternalSlots;if(0===t)return[0,0];t<0&&(t=-t);var a=O(t),u=G(e,a,{getInternalSlots:r});t=u<0?t*Math.pow(10,-u):t/Math.pow(10,u);var i=z(r(e),t);return 0===i.roundedNumber||O(i.roundedNumber)===a-u?[u,a]:[G(e,a+1,{getInternalSlots:r}),a+1]}function H(e,t){var n=t.currencyDigitsData;return p(n,e)?n[e]:2}var K,Y={adlm:[\"𞥐\",\"𞥑\",\"𞥒\",\"𞥓\",\"𞥔\",\"𞥕\",\"𞥖\",\"𞥗\",\"𞥘\",\"𞥙\"],ahom:[\"𑜰\",\"𑜱\",\"𑜲\",\"𑜳\",\"𑜴\",\"𑜵\",\"𑜶\",\"𑜷\",\"𑜸\",\"𑜹\"],arab:[\"٠\",\"١\",\"٢\",\"٣\",\"٤\",\"٥\",\"٦\",\"٧\",\"٨\",\"٩\"],arabext:[\"۰\",\"۱\",\"۲\",\"۳\",\"۴\",\"۵\",\"۶\",\"۷\",\"۸\",\"۹\"],bali:[\"᭐\",\"᭑\",\"᭒\",\"᭓\",\"᭔\",\"᭕\",\"᭖\",\"᭗\",\"᭘\",\"᭙\"],beng:[\"০\",\"১\",\"২\",\"৩\",\"৪\",\"৫\",\"৬\",\"৭\",\"৮\",\"৯\"],bhks:[\"𑱐\",\"𑱑\",\"𑱒\",\"𑱓\",\"𑱔\",\"𑱕\",\"𑱖\",\"𑱗\",\"𑱘\",\"𑱙\"],brah:[\"𑁦\",\"𑁧\",\"𑁨\",\"𑁩\",\"𑁪\",\"𑁫\",\"𑁬\",\"𑁭\",\"𑁮\",\"𑁯\"],cakm:[\"𑄶\",\"𑄷\",\"𑄸\",\"𑄹\",\"𑄺\",\"𑄻\",\"𑄼\",\"𑄽\",\"𑄾\",\"𑄿\"],cham:[\"꩐\",\"꩑\",\"꩒\",\"꩓\",\"꩔\",\"꩕\",\"꩖\",\"꩗\",\"꩘\",\"꩙\"],deva:[\"०\",\"१\",\"२\",\"३\",\"४\",\"५\",\"६\",\"७\",\"८\",\"९\"],diak:[\"𑥐\",\"𑥑\",\"𑥒\",\"𑥓\",\"𑥔\",\"𑥕\",\"𑥖\",\"𑥗\",\"𑥘\",\"𑥙\"],fullwide:[\"０\",\"１\",\"２\",\"３\",\"４\",\"５\",\"６\",\"７\",\"８\",\"９\"],gong:[\"𑶠\",\"𑶡\",\"𑶢\",\"𑶣\",\"𑶤\",\"𑶥\",\"𑶦\",\"𑶧\",\"𑶨\",\"𑶩\"],gonm:[\"𑵐\",\"𑵑\",\"𑵒\",\"𑵓\",\"𑵔\",\"𑵕\",\"𑵖\",\"𑵗\",\"𑵘\",\"𑵙\"],gujr:[\"૦\",\"૧\",\"૨\",\"૩\",\"૪\",\"૫\",\"૬\",\"૭\",\"૮\",\"૯\"],guru:[\"੦\",\"੧\",\"੨\",\"੩\",\"੪\",\"੫\",\"੬\",\"੭\",\"੮\",\"੯\"],hanidec:[\"〇\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\",\"八\",\"九\"],hmng:[\"𖭐\",\"𖭑\",\"𖭒\",\"𖭓\",\"𖭔\",\"𖭕\",\"𖭖\",\"𖭗\",\"𖭘\",\"𖭙\"],hmnp:[\"𞅀\",\"𞅁\",\"𞅂\",\"𞅃\",\"𞅄\",\"𞅅\",\"𞅆\",\"𞅇\",\"𞅈\",\"𞅉\"],java:[\"꧐\",\"꧑\",\"꧒\",\"꧓\",\"꧔\",\"꧕\",\"꧖\",\"꧗\",\"꧘\",\"꧙\"],kali:[\"꤀\",\"꤁\",\"꤂\",\"꤃\",\"꤄\",\"꤅\",\"꤆\",\"꤇\",\"꤈\",\"꤉\"],khmr:[\"០\",\"១\",\"២\",\"៣\",\"៤\",\"៥\",\"៦\",\"៧\",\"៨\",\"៩\"],knda:[\"೦\",\"೧\",\"೨\",\"೩\",\"೪\",\"೫\",\"೬\",\"೭\",\"೮\",\"೯\"],lana:[\"᪀\",\"᪁\",\"᪂\",\"᪃\",\"᪄\",\"᪅\",\"᪆\",\"᪇\",\"᪈\",\"᪉\"],lanatham:[\"᪐\",\"᪑\",\"᪒\",\"᪓\",\"᪔\",\"᪕\",\"᪖\",\"᪗\",\"᪘\",\"᪙\"],laoo:[\"໐\",\"໑\",\"໒\",\"໓\",\"໔\",\"໕\",\"໖\",\"໗\",\"໘\",\"໙\"],lepc:[\"᪐\",\"᪑\",\"᪒\",\"᪓\",\"᪔\",\"᪕\",\"᪖\",\"᪗\",\"᪘\",\"᪙\"],limb:[\"᥆\",\"᥇\",\"᥈\",\"᥉\",\"᥊\",\"᥋\",\"᥌\",\"᥍\",\"᥎\",\"᥏\"],mathbold:[\"𝟎\",\"𝟏\",\"𝟐\",\"𝟑\",\"𝟒\",\"𝟓\",\"𝟔\",\"𝟕\",\"𝟖\",\"𝟗\"],mathdbl:[\"𝟘\",\"𝟙\",\"𝟚\",\"𝟛\",\"𝟜\",\"𝟝\",\"𝟞\",\"𝟟\",\"𝟠\",\"𝟡\"],mathmono:[\"𝟶\",\"𝟷\",\"𝟸\",\"𝟹\",\"𝟺\",\"𝟻\",\"𝟼\",\"𝟽\",\"𝟾\",\"𝟿\"],mathsanb:[\"𝟬\",\"𝟭\",\"𝟮\",\"𝟯\",\"𝟰\",\"𝟱\",\"𝟲\",\"𝟳\",\"𝟴\",\"𝟵\"],mathsans:[\"𝟢\",\"𝟣\",\"𝟤\",\"𝟥\",\"𝟦\",\"𝟧\",\"𝟨\",\"𝟩\",\"𝟪\",\"𝟫\"],mlym:[\"൦\",\"൧\",\"൨\",\"൩\",\"൪\",\"൫\",\"൬\",\"൭\",\"൮\",\"൯\"],modi:[\"𑙐\",\"𑙑\",\"𑙒\",\"𑙓\",\"𑙔\",\"𑙕\",\"𑙖\",\"𑙗\",\"𑙘\",\"𑙙\"],mong:[\"᠐\",\"᠑\",\"᠒\",\"᠓\",\"᠔\",\"᠕\",\"᠖\",\"᠗\",\"᠘\",\"᠙\"],mroo:[\"𖩠\",\"𖩡\",\"𖩢\",\"𖩣\",\"𖩤\",\"𖩥\",\"𖩦\",\"𖩧\",\"𖩨\",\"𖩩\"],mtei:[\"꯰\",\"꯱\",\"꯲\",\"꯳\",\"꯴\",\"꯵\",\"꯶\",\"꯷\",\"꯸\",\"꯹\"],mymr:[\"၀\",\"၁\",\"၂\",\"၃\",\"၄\",\"၅\",\"၆\",\"၇\",\"၈\",\"၉\"],mymrshan:[\"႐\",\"႑\",\"႒\",\"႓\",\"႔\",\"႕\",\"႖\",\"႗\",\"႘\",\"႙\"],mymrtlng:[\"꧰\",\"꧱\",\"꧲\",\"꧳\",\"꧴\",\"꧵\",\"꧶\",\"꧷\",\"꧸\",\"꧹\"],newa:[\"𑑐\",\"𑑑\",\"𑑒\",\"𑑓\",\"𑑔\",\"𑑕\",\"𑑖\",\"𑑗\",\"𑑘\",\"𑑙\"],nkoo:[\"߀\",\"߁\",\"߂\",\"߃\",\"߄\",\"߅\",\"߆\",\"߇\",\"߈\",\"߉\"],olck:[\"᱐\",\"᱑\",\"᱒\",\"᱓\",\"᱔\",\"᱕\",\"᱖\",\"᱗\",\"᱘\",\"᱙\"],orya:[\"୦\",\"୧\",\"୨\",\"୩\",\"୪\",\"୫\",\"୬\",\"୭\",\"୮\",\"୯\"],osma:[\"𐒠\",\"𐒡\",\"𐒢\",\"𐒣\",\"𐒤\",\"𐒥\",\"𐒦\",\"𐒧\",\"𐒨\",\"𐒩\"],rohg:[\"𐴰\",\"𐴱\",\"𐴲\",\"𐴳\",\"𐴴\",\"𐴵\",\"𐴶\",\"𐴷\",\"𐴸\",\"𐴹\"],saur:[\"꣐\",\"꣑\",\"꣒\",\"꣓\",\"꣔\",\"꣕\",\"꣖\",\"꣗\",\"꣘\",\"꣙\"],segment:[\"🯰\",\"🯱\",\"🯲\",\"🯳\",\"🯴\",\"🯵\",\"🯶\",\"🯷\",\"🯸\",\"🯹\"],shrd:[\"𑇐\",\"𑇑\",\"𑇒\",\"𑇓\",\"𑇔\",\"𑇕\",\"𑇖\",\"𑇗\",\"𑇘\",\"𑇙\"],sind:[\"𑋰\",\"𑋱\",\"𑋲\",\"𑋳\",\"𑋴\",\"𑋵\",\"𑋶\",\"𑋷\",\"𑋸\",\"𑋹\"],sinh:[\"෦\",\"෧\",\"෨\",\"෩\",\"෪\",\"෫\",\"෬\",\"෭\",\"෮\",\"෯\"],sora:[\"𑃰\",\"𑃱\",\"𑃲\",\"𑃳\",\"𑃴\",\"𑃵\",\"𑃶\",\"𑃷\",\"𑃸\",\"𑃹\"],sund:[\"᮰\",\"᮱\",\"᮲\",\"᮳\",\"᮴\",\"᮵\",\"᮶\",\"᮷\",\"᮸\",\"᮹\"],takr:[\"𑛀\",\"𑛁\",\"𑛂\",\"𑛃\",\"𑛄\",\"𑛅\",\"𑛆\",\"𑛇\",\"𑛈\",\"𑛉\"],talu:[\"᧐\",\"᧑\",\"᧒\",\"᧓\",\"᧔\",\"᧕\",\"᧖\",\"᧗\",\"᧘\",\"᧙\"],tamldec:[\"௦\",\"௧\",\"௨\",\"௩\",\"௪\",\"௫\",\"௬\",\"௭\",\"௮\",\"௯\"],telu:[\"౦\",\"౧\",\"౨\",\"౩\",\"౪\",\"౫\",\"౬\",\"౭\",\"౮\",\"౯\"],thai:[\"๐\",\"๑\",\"๒\",\"๓\",\"๔\",\"๕\",\"๖\",\"๗\",\"๘\",\"๙\"],tibt:[\"༠\",\"༡\",\"༢\",\"༣\",\"༤\",\"༥\",\"༦\",\"༧\",\"༨\",\"༩\"],tirh:[\"𑓐\",\"𑓑\",\"𑓒\",\"𑓓\",\"𑓔\",\"𑓕\",\"𑓖\",\"𑓗\",\"𑓘\",\"𑓙\"],vaii:[\"ᘠ\",\"ᘡ\",\"ᘢ\",\"ᘣ\",\"ᘤ\",\"ᘥ\",\"ᘦ\",\"ᘧ\",\"ᘨ\",\"ᘩ\"],wara:[\"𑣠\",\"𑣡\",\"𑣢\",\"𑣣\",\"𑣤\",\"𑣥\",\"𑣦\",\"𑣧\",\"𑣨\",\"𑣩\"],wcho:[\"𞋰\",\"𞋱\",\"𞋲\",\"𞋳\",\"𞋴\",\"𞋵\",\"𞋶\",\"𞋷\",\"𞋸\",\"𞋹\"]},W=/[\\$\\+<->\\^`\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20BF\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBC1\\uFDFC\\uFDFD\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDE8\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED7\\uDEE0-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF73\\uDF80-\\uDFD8\\uDFE0-\\uDFEB]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6\\uDF00-\\uDF92\\uDF94-\\uDFCA]/,Z=new RegExp(\"^\".concat(W.source)),V=new RegExp(\"\".concat(W.source,\"$\")),q=/[#0](?:[\\.,][#0]+)*/g;function J(e,t,n,r){var a,u,i=e.sign,o=e.exponent,l=e.magnitude,s=r.notation,c=r.style,f=r.numberingSystem,m=t.numbers.nu[0],p=null;if(\"compact\"===s&&l&&(p=function(e,t,n,r,a,u,i){var o,l,s=e.roundedNumber,c=e.sign,f=e.magnitude,m=String(Math.pow(10,f)),p=n.numbers.nu[0];if(\"currency\"===r&&\"name\"!==u){var d=null===(o=((g=n.numbers.currency)[i]||g[p]).short)||void 0===o?void 0:o[m];if(!d)return null;l=$(t,s,d)}else{var g,D=((g=n.numbers.decimal)[i]||g[p])[a][m];if(!D)return null;l=$(t,s,D)}if(\"0\"===l)return null;return l=X(l,c).replace(/([^\\s;\\-\\+\\d¤]+)/g,\"{c:$1}\").replace(/0+/,\"0\")}(e,n,t,c,r.compactDisplay,r.currencyDisplay,f)),\"currency\"===c&&\"name\"!==r.currencyDisplay){var d=t.currencies[r.currency];if(d)switch(r.currencyDisplay){case\"code\":a=r.currency;break;case\"symbol\":a=d.symbol;break;default:a=d.narrow}else a=r.currency}if(p)u=p;else if(\"decimal\"===c||\"unit\"===c||\"currency\"===c&&\"name\"===r.currencyDisplay)u=X((t.numbers.decimal[f]||t.numbers.decimal[m]).standard,i);else if(\"currency\"===c){u=X((D=t.numbers.currency[f]||t.numbers.currency[m])[r.currencySign],i)}else{u=X(t.numbers.percent[f]||t.numbers.percent[m],i)}var g=q.exec(u)[0];if(u=u.replace(q,\"{0}\").replace(/'(.)'/g,\"$1\"),\"currency\"===c&&\"name\"!==r.currencyDisplay){var D,y=(D=t.numbers.currency[f]||t.numbers.currency[m]).currencySpacing.afterInsertBetween;y&&!V.test(a)&&(u=u.replace(\"¤{0}\",\"¤\".concat(y,\"{0}\")));var v=D.currencySpacing.beforeInsertBetween;v&&!Z.test(a)&&(u=u.replace(\"{0}¤\",\"{0}\".concat(v,\"¤\")))}for(var b=u.split(/({c:[^}]+}|\\{0\\}|[¤%\\-\\+])/g),h=[],F=t.numbers.symbols[f]||t.numbers.symbols[m],E=0,C=b;E<C.length;E++){if(U=C[E])switch(U){case\"{0}\":h.push.apply(h,Q(F,e,s,o,f,!p&&r.useGrouping,g));break;case\"-\":h.push({type:\"minusSign\",value:F.minusSign});break;case\"+\":h.push({type:\"plusSign\",value:F.plusSign});break;case\"%\":h.push({type:\"percentSign\",value:F.percentSign});break;case\"¤\":h.push({type:\"currency\",value:a});break;default:/^\\{c:/.test(U)?h.push({type:\"compact\",value:U.substring(3,U.length-1)}):h.push({type:\"literal\",value:U})}}switch(c){case\"currency\":if(\"name\"===r.currencyDisplay){var S=(t.numbers.currency[f]||t.numbers.currency[m]).unitPattern,w=void 0,T=t.currencies[r.currency];w=T?$(n,e.roundedNumber*Math.pow(10,o),T.displayName):r.currency;for(var A=[],M=0,L=S.split(/(\\{[01]\\})/g);M<L.length;M++){switch(U=L[M]){case\"{0}\":A.push.apply(A,h);break;case\"{1}\":A.push({type:\"currency\",value:w});break;default:U&&A.push({type:\"literal\",value:U})}}return A}return h;case\"unit\":var I=r.unit,B=r.unitDisplay,N=t.units.simple[I];S=void 0;if(N)S=$(n,e.roundedNumber*Math.pow(10,o),t.units.simple[I][B]);else{var O=I.split(\"-per-\"),k=O[0],j=O[1];N=t.units.simple[k];var P=$(n,e.roundedNumber*Math.pow(10,o),t.units.simple[k][B]),R=t.units.simple[j].perUnit[B];if(R)S=R.replace(\"{0}\",P);else{var G=t.units.compound.per[B],x=$(n,1,t.units.simple[j][B]);S=S=G.replace(\"{0}\",P).replace(\"{1}\",x.replace(\"{0}\",\"\"))}}A=[];for(var _=0,z=S.split(/(\\s*\\{0\\}\\s*)/);_<z.length;_++){var U=z[_],H=/^(\\s*)\\{0\\}(\\s*)$/.exec(U);H?(H[1]&&A.push({type:\"literal\",value:H[1]}),A.push.apply(A,h),H[2]&&A.push({type:\"literal\",value:H[2]})):U&&A.push({type:\"unit\",value:U})}return A;default:return h}}function Q(e,t,n,r,a,u,i){var o=[],l=t.formattedString,s=t.roundedNumber;if(isNaN(s))return[{type:\"nan\",value:l}];if(!isFinite(s))return[{type:\"infinity\",value:l}];var c=Y[a];c&&(l=l.replace(/\\d/g,(function(e){return c[+e]||e})));var f,m,p=l.indexOf(\".\");if(p>0?(f=l.slice(0,p),m=l.slice(p+1)):f=l,u&&(\"compact\"!==n||s>=1e4)){var d=e.group,g=[],D=i.split(\".\")[0].split(\",\"),y=3,v=3;D.length>1&&(y=D[D.length-1].length),D.length>2&&(v=D[D.length-2].length);var b=f.length-y;if(b>0){for(g.push(f.slice(b,b+y)),b-=v;b>0;b-=v)g.push(f.slice(b,b+v));g.push(f.slice(0,b+v))}else g.push(f);for(;g.length>0;){var h=g.pop();o.push({type:\"integer\",value:h}),g.length>0&&o.push({type:\"group\",value:d})}}else o.push({type:\"integer\",value:f});if(void 0!==m&&o.push({type:\"decimal\",value:e.decimal},{type:\"fraction\",value:m}),(\"scientific\"===n||\"engineering\"===n)&&isFinite(s)){o.push({type:\"exponentSeparator\",value:e.exponential}),r<0&&(o.push({type:\"exponentMinusSign\",value:e.minusSign}),r=-r);var F=_(r,0,0);o.push({type:\"exponentInteger\",value:F.formattedString})}return o}function X(e,t){e.indexOf(\";\")<0&&(e=\"\".concat(e,\";-\").concat(e));var n=e.split(\";\"),r=n[0],a=n[1];switch(t){case 0:return r;case-1:return a;default:return a.indexOf(\"-\")>=0?a.replace(/-/g,\"+\"):\"+\".concat(r)}}function $(e,t,n){return n[e.select(t)]||n.other}function ee(e,t,n){var r,a,u,i=n.getInternalSlots,o=i(e),l=o.pl,s=o.dataLocaleData,c=o.numberingSystem,m=s.numbers.symbols[c]||s.numbers.symbols[s.numbers.nu[0]],p=0,d=0;if(isNaN(t))a=m.nan;else if(isFinite(t)){\"percent\"===o.style&&(t*=100),d=(r=U(e,t,{getInternalSlots:i}))[0],p=r[1];var g=z(o,t=d<0?t*Math.pow(10,-d):t/Math.pow(10,d));a=g.formattedString,t=g.roundedNumber}else a=m.infinity;switch(o.signDisplay){case\"never\":u=0;break;case\"auto\":u=f(t,0)||t>0||isNaN(t)?0:-1;break;case\"always\":u=f(t,0)||t>0||isNaN(t)?1:-1;break;default:u=0===t||isNaN(t)?0:t>0?1:-1}return J({roundedNumber:t,formattedString:a,exponent:d,magnitude:p,sign:u},o.dataLocaleData,l,o)}function te(e,t,n){void 0===t&&(t=Object.create(null));var r=(0,n.getInternalSlots)(e),a=w(t,\"style\",\"string\",[\"decimal\",\"percent\",\"currency\",\"unit\"],\"decimal\");r.style=a;var u=w(t,\"currency\",\"string\",void 0,void 0);if(void 0!==u&&!B(u))throw RangeError(\"Malformed currency code\");if(\"currency\"===a&&void 0===u)throw TypeError(\"currency cannot be undefined\");var i=w(t,\"currencyDisplay\",\"string\",[\"code\",\"symbol\",\"narrowSymbol\",\"name\"],\"symbol\"),o=w(t,\"currencySign\",\"string\",[\"standard\",\"accounting\"],\"standard\"),l=w(t,\"unit\",\"string\",void 0,void 0);if(void 0!==l&&!N(l))throw RangeError(\"Invalid unit argument for Intl.NumberFormat()\");if(\"unit\"===a&&void 0===l)throw TypeError(\"unit cannot be undefined\");var s=w(t,\"unitDisplay\",\"string\",[\"short\",\"narrow\",\"long\"],\"short\");\"currency\"===a&&(r.currency=u.toUpperCase(),r.currencyDisplay=i,r.currencySign=o),\"unit\"===a&&(r.unit=l,r.unitDisplay=s)}function ne(e,t,n,r,a){var u=S(t,\"minimumIntegerDigits\",1,21,1),i=t.minimumFractionDigits,o=t.maximumFractionDigits,l=t.minimumSignificantDigits,s=t.maximumSignificantDigits;if(e.minimumIntegerDigits=u,void 0!==l||void 0!==s)e.roundingType=\"significantDigits\",l=C(l,1,21,1),s=C(s,l,21,21),e.minimumSignificantDigits=l,e.maximumSignificantDigits=s;else if(void 0!==i||void 0!==o){e.roundingType=\"fractionDigits\",i=C(i,0,20,n),o=C(o,i,20,Math.max(i,r)),e.minimumFractionDigits=i,e.maximumFractionDigits=o}else\"compact\"===a?e.roundingType=\"compactRounding\":(e.roundingType=\"fractionDigits\",e.minimumFractionDigits=n,e.maximumFractionDigits=r)}!function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.type=\"MISSING_LOCALE_DATA\",t}n(t,e)}(Error),function(e){e.startRange=\"startRange\",e.shared=\"shared\",e.endRange=\"endRange\"}(K||(K={}));var re=Object.freeze({__proto__:null,_formatToParts:J,getInternalSlot:function(e,t,n){return P(e,t,n)[n]},getMultiInternalSlots:P,isLiteralPart:function(e){return\"literal\"===e.type},setInternalSlot:j,setMultiInternalSlots:function(e,t,n){for(var r=0,a=Object.keys(n);r<a.length;r++){var u=a[r];j(e,t,u,n[u])}},getMagnitude:O,defineProperty:function(e,t,n){var r=n.value;Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:!0,value:r})},isMissingLocaleDataError:function(e){return\"MISSING_LOCALE_DATA\"===e.type},invariant:R,CanonicalizeLocaleList:o,CanonicalizeTimeZoneName:function(e,t){var n=t.tzData,r=t.uppercaseLinks,a=e.toUpperCase(),u=Object.keys(n).reduce((function(e,t){return e[t.toUpperCase()]=t,e}),{}),i=r[a]||u[a];return\"Etc/UTC\"===i||\"Etc/GMT\"===i?\"UTC\":i},CoerceOptionsToObject:E,GetNumberOption:S,GetOption:w,GetOptionsObject:function(e){if(void 0===e)return Object.create(null);if(\"object\"==typeof e)return e;throw new TypeError(\"Options must be an object\")},SANCTIONED_UNITS:T,removeUnitNamespace:A,SIMPLE_UNITS:M,IsSanctionedSimpleUnitIdentifier:L,IsValidTimeZoneName:function(e,t){var n=t.tzData,r=t.uppercaseLinks,a=e.toUpperCase(),u=new Set,i=new Set;return Object.keys(n).map((function(e){return e.toUpperCase()})).forEach((function(e){return u.add(e)})),Object.keys(r).forEach((function(e){i.add(e.toUpperCase()),u.add(r[e].toUpperCase())})),u.has(a)||i.has(a)},IsWellFormedCurrencyCode:B,IsWellFormedUnitIdentifier:N,ComputeExponent:U,ComputeExponentForMagnitude:G,CurrencyDigits:H,FormatNumericToParts:function(e,t,n){for(var r=ee(e,t,n),a=m(0),u=0,i=r;u<i.length;u++){var o=i[u];a.push({type:o.type,value:o.value})}return a},FormatNumericToString:z,InitializeNumberFormat:function(e,t,n,r){var u=r.getInternalSlots,i=r.localeData,l=r.availableLocales,s=r.numberingSystemNames,c=r.getDefaultLocale,f=r.currencyDigitsData,m=o(t),p=E(n),d=Object.create(null),g=w(p,\"localeMatcher\",\"string\",[\"lookup\",\"best fit\"],\"best fit\");d.localeMatcher=g;var D=w(p,\"numberingSystem\",\"string\",void 0,void 0);if(void 0!==D&&s.indexOf(D)<0)throw RangeError(\"Invalid numberingSystems: \".concat(D));d.nu=D;var y=a(l,m,d,[\"nu\"],i,c),v=i[y.dataLocale];R(!!v,\"Missing locale data for \".concat(y.dataLocale));var b=u(e);b.locale=y.locale,b.dataLocale=y.dataLocale,b.numberingSystem=y.nu,b.dataLocaleData=v,te(e,p,{getInternalSlots:u});var h,F,C=b.style;if(\"currency\"===C){var S=H(b.currency,{currencyDigitsData:f});h=S,F=S}else h=0,F=\"percent\"===C?0:3;var T=w(p,\"notation\",\"string\",[\"standard\",\"scientific\",\"engineering\",\"compact\"],\"standard\");b.notation=T,ne(b,p,h,F,T);var A=w(p,\"compactDisplay\",\"string\",[\"short\",\"long\"],\"short\");\"compact\"===T&&(b.compactDisplay=A);var M=w(p,\"useGrouping\",\"boolean\",void 0,!0);b.useGrouping=M;var L=w(p,\"signDisplay\",\"string\",[\"auto\",\"never\",\"always\",\"exceptZero\"],\"auto\");return b.signDisplay=L,e},PartitionNumberPattern:ee,SetNumberFormatDigitOptions:ne,SetNumberFormatUnitOptions:te,ToRawFixed:_,ToRawPrecision:x,PartitionPattern:function(e){for(var t=[],n=e.indexOf(\"{\"),r=0,a=0,u=e.length;n<e.length&&n>-1;)R((r=e.indexOf(\"}\",n))>n,\"Invalid pattern \".concat(e)),n>a&&t.push({type:\"literal\",value:e.substring(a,n)}),t.push({type:e.substring(n+1,r),value:void 0}),a=r+1,n=e.indexOf(\"{\",a);return a<u&&t.push({type:\"literal\",value:e.substring(a,u)}),t},SupportedLocales:function(e,t,n){return void 0!==n&&w(n=c(n),\"localeMatcher\",\"string\",[\"lookup\",\"best fit\"],\"best fit\"),u(e,t)},get RangePatternType(){return K},ToString:l,ToNumber:s,TimeClip:function(e){return isFinite(e)?Math.abs(e)>8640000000000001?NaN:function(e){var t=s(e);if(isNaN(t)||f(t,-0))return 0;if(isFinite(t))return t;var n=Math.floor(Math.abs(t));return t<0&&(n=-n),f(n,-0)?0:n}(e):NaN},ToObject:c,SameValue:f,ArrayCreate:m,HasOwnProperty:p,Type:function(e){return null===e?\"Null\":void 0===e?\"Undefined\":\"function\"==typeof e||\"object\"==typeof e?\"Object\":\"number\"==typeof e?\"Number\":\"boolean\"==typeof e?\"Boolean\":\"string\"==typeof e?\"String\":\"symbol\"==typeof e?\"Symbol\":\"bigint\"==typeof e?\"BigInt\":void 0},Day:g,WeekDay:function(e){return d(g(e)+4,7)},DayFromYear:D,TimeFromYear:function(e){return Date.UTC(e,0)},YearFromTime:y,DaysInYear:v,DayWithinYear:b,InLeapYear:h,MonthFromTime:F,DateFromTime:function(e){var t=b(e),n=F(e),r=h(e);if(0===n)return t+1;if(1===n)return t-30;if(2===n)return t-58-r;if(3===n)return t-89-r;if(4===n)return t-119-r;if(5===n)return t-150-r;if(6===n)return t-180-r;if(7===n)return t-211-r;if(8===n)return t-242-r;if(9===n)return t-272-r;if(10===n)return t-303-r;if(11===n)return t-333-r;throw new Error(\"Invalid time\")},HourFromTime:function(e){return d(Math.floor(e/36e5),24)},MinFromTime:function(e){return d(Math.floor(e/6e4),60)},SecFromTime:function(e){return d(Math.floor(e/1e3),60)},OrdinaryHasInstance:function(e,t,n){if(\"function\"!=typeof e)return!1;if(null==n?void 0:n.boundTargetFunction)return t instanceof(null==n?void 0:n.boundTargetFunction);if(\"object\"!=typeof t)return!1;var r=e.prototype;if(\"object\"!=typeof r)throw new TypeError(\"OrdinaryHasInstance called on an object with an invalid prototype property.\");return Object.prototype.isPrototypeOf.call(r,t)},msFromTime:function(e){return d(e,1e3)}}),ae=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.InitializeRelativeTimeFormat=void 0;var n=/^[a-z0-9]{3,8}(-[a-z0-9]{3,8})*$/i;t.InitializeRelativeTimeFormat=function(e,t,r,a){var u=a.getInternalSlots,o=a.availableLocales,l=a.relevantExtensionKeys,s=a.localeData,c=a.getDefaultLocale,f=u(e);f.initializedRelativeTimeFormat=!0;var m=(0,re.CanonicalizeLocaleList)(t),p=Object.create(null),d=(0,re.CoerceOptionsToObject)(r),g=(0,re.GetOption)(d,\"localeMatcher\",\"string\",[\"best fit\",\"lookup\"],\"best fit\");p.localeMatcher=g;var D=(0,re.GetOption)(d,\"numberingSystem\",\"string\",void 0,void 0);if(void 0!==D&&!n.test(D))throw new RangeError(\"Invalid numbering system \".concat(D));p.nu=D;var y=(0,i.ResolveLocale)(o,m,p,l,s,c),v=y.locale,b=y.nu;f.locale=v,f.style=(0,re.GetOption)(d,\"style\",\"string\",[\"long\",\"narrow\",\"short\"],\"long\"),f.numeric=(0,re.GetOption)(d,\"numeric\",\"string\",[\"always\",\"auto\"],\"always\");var h=s[y.dataLocale];return(0,re.invariant)(!!h,\"Missing locale data for \".concat(y.dataLocale)),f.fields=h,f.numberFormat=new Intl.NumberFormat(t),f.pluralRules=new Intl.PluralRules(t),f.numberingSystem=b,e}}));t(ae),ae.InitializeRelativeTimeFormat;var ue=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.SingularRelativeTimeUnit=void 0,t.SingularRelativeTimeUnit=function(e){if((0,re.invariant)(\"String\"===(0,re.Type)(e),\"unit must be a string\"),\"seconds\"===e)return\"second\";if(\"minutes\"===e)return\"minute\";if(\"hours\"===e)return\"hour\";if(\"days\"===e)return\"day\";if(\"weeks\"===e)return\"week\";if(\"months\"===e)return\"month\";if(\"quarters\"===e)return\"quarter\";if(\"years\"===e)return\"year\";if(\"second\"!==e&&\"minute\"!==e&&\"hour\"!==e&&\"day\"!==e&&\"week\"!==e&&\"month\"!==e&&\"quarter\"!==e&&\"year\"!==e)throw new RangeError(\"invalid unit\");return e}}));t(ue),ue.SingularRelativeTimeUnit;var ie=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.MakePartsList=void 0,t.MakePartsList=function(e,t,n){for(var r=[],a=0,u=(0,re.PartitionPattern)(e);a<u.length;a++){var i=u[a];if(\"literal\"===i.type)r.push({type:\"literal\",value:i.value});else{(0,re.invariant)(\"0\"===i.type,\"Malformed pattern \".concat(e));for(var o=0,l=n;o<l.length;o++){var s=l[o];r.push({type:s.type,value:s.value,unit:t})}}}return r}}));t(ie),ie.MakePartsList;var oe=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.PartitionRelativeTimePattern=void 0,t.PartitionRelativeTimePattern=function(e,t,n,r){var a=r.getInternalSlots;if((0,re.invariant)(\"Number\"===(0,re.Type)(t),\"value must be number, instead got \".concat(typeof t),TypeError),(0,re.invariant)(\"String\"===(0,re.Type)(n),\"unit must be number, instead got \".concat(typeof t),TypeError),isNaN(t)||!isFinite(t))throw new RangeError(\"Invalid value \".concat(t));var u=(0,ue.SingularRelativeTimeUnit)(n),i=a(e),o=i.fields,l=i.style,s=i.numeric,c=i.pluralRules,f=i.numberFormat,m=u;\"short\"===l?m=\"\".concat(u,\"-short\"):\"narrow\"===l&&(m=\"\".concat(u,\"-narrow\")),m in o||(m=u);var p=o[m];if(\"auto\"===s&&(0,re.ToString)(t)in p)return[{type:\"literal\",value:p[(0,re.ToString)(t)]}];var d=\"future\";((0,re.SameValue)(t,-0)||t<0)&&(d=\"past\");var g=p[d],D=\"function\"==typeof f.formatToParts?f.formatToParts(Math.abs(t)):[{type:\"literal\",value:f.format(Math.abs(t)),unit:n}],y=g[c.select(t)];return(0,ie.MakePartsList)(y,u,D)}}));t(oe),oe.PartitionRelativeTimePattern;var le=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0});var n=new WeakMap;t.default=function(e){var t=n.get(e);return t||(t=Object.create(null),n.set(e,t)),t}}));t(le);var se=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0});var n=(0,r.__importDefault)(le),a=function(){function e(t,r){if(!(this&&this instanceof e?this.constructor:void 0))throw new TypeError(\"Intl.RelativeTimeFormat must be called with 'new'\");return(0,ae.InitializeRelativeTimeFormat)(this,t,r,{getInternalSlots:n.default,availableLocales:e.availableLocales,relevantExtensionKeys:e.relevantExtensionKeys,localeData:e.localeData,getDefaultLocale:e.getDefaultLocale})}return e.prototype.format=function(e,t){if(\"object\"!=typeof this)throw new TypeError(\"format was called on a non-object\");if(!(0,n.default)(this).initializedRelativeTimeFormat)throw new TypeError(\"format was called on a invalid context\");return(0,oe.PartitionRelativeTimePattern)(this,Number(e),(0,re.ToString)(t),{getInternalSlots:n.default}).map((function(e){return e.value})).join(\"\")},e.prototype.formatToParts=function(e,t){if(\"object\"!=typeof this)throw new TypeError(\"formatToParts was called on a non-object\");if(!(0,n.default)(this).initializedRelativeTimeFormat)throw new TypeError(\"formatToParts was called on a invalid context\");return(0,oe.PartitionRelativeTimePattern)(this,Number(e),(0,re.ToString)(t),{getInternalSlots:n.default})},e.prototype.resolvedOptions=function(){if(\"object\"!=typeof this)throw new TypeError(\"resolvedOptions was called on a non-object\");var e=(0,n.default)(this);if(!e.initializedRelativeTimeFormat)throw new TypeError(\"resolvedOptions was called on a invalid context\");return{locale:e.locale,style:e.style,numeric:e.numeric,numberingSystem:e.numberingSystem}},e.supportedLocalesOf=function(t,n){return(0,re.SupportedLocales)(e.availableLocales,(0,re.CanonicalizeLocaleList)(t),n)},e.__addLocaleData=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];for(var r=0,a=t;r<a.length;r++){var u=a[r],i=u.data,o=u.locale,l=new Intl.Locale(o).minimize().toString();e.localeData[o]=e.localeData[l]=i,e.availableLocales.add(l),e.availableLocales.add(o),e.__defaultLocale||(e.__defaultLocale=l)}},e.getDefaultLocale=function(){return e.__defaultLocale},e.localeData={},e.availableLocales=new Set,e.__defaultLocale=\"\",e.relevantExtensionKeys=[\"nu\"],e.polyfilled=!0,e}();t.default=a;try{\"undefined\"!=typeof Symbol&&Object.defineProperty(a.prototype,Symbol.toStringTag,{value:\"Intl.RelativeTimeFormat\",writable:!1,enumerable:!1,configurable:!0}),Object.defineProperty(a.prototype.constructor,\"length\",{value:0,writable:!1,enumerable:!1,configurable:!0}),Object.defineProperty(a.supportedLocalesOf,\"length\",{value:1,writable:!1,enumerable:!1,configurable:!0})}catch(e){}}));t(se);var ce=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.supportedLocales=void 0,t.supportedLocales=[\"af-NA\",\"af\",\"agq\",\"ak\",\"am\",\"ar-AE\",\"ar-BH\",\"ar-DJ\",\"ar-DZ\",\"ar-EG\",\"ar-EH\",\"ar-ER\",\"ar-IL\",\"ar-IQ\",\"ar-JO\",\"ar-KM\",\"ar-KW\",\"ar-LB\",\"ar-LY\",\"ar-MA\",\"ar-MR\",\"ar-OM\",\"ar-PS\",\"ar-QA\",\"ar-SA\",\"ar-SD\",\"ar-SO\",\"ar-SS\",\"ar-SY\",\"ar-TD\",\"ar-TN\",\"ar-YE\",\"ar\",\"as\",\"asa\",\"ast\",\"az-Cyrl\",\"az-Latn\",\"az\",\"bas\",\"be-tarask\",\"be\",\"bem\",\"bez\",\"bg\",\"bm\",\"bn-IN\",\"bn\",\"bo-IN\",\"bo\",\"br\",\"brx\",\"bs-Cyrl\",\"bs-Latn\",\"bs\",\"ca-AD\",\"ca-ES-valencia\",\"ca-FR\",\"ca-IT\",\"ca\",\"ccp-IN\",\"ccp\",\"ce\",\"ceb\",\"cgg\",\"chr\",\"ckb-IR\",\"ckb\",\"cs\",\"cy\",\"da-GL\",\"da\",\"dav\",\"de-AT\",\"de-BE\",\"de-CH\",\"de-IT\",\"de-LI\",\"de-LU\",\"de\",\"dje\",\"doi\",\"dsb\",\"dua\",\"dyo\",\"dz\",\"ebu\",\"ee-TG\",\"ee\",\"el-CY\",\"el\",\"en-001\",\"en-150\",\"en-AE\",\"en-AG\",\"en-AI\",\"en-AS\",\"en-AT\",\"en-AU\",\"en-BB\",\"en-BE\",\"en-BI\",\"en-BM\",\"en-BS\",\"en-BW\",\"en-BZ\",\"en-CA\",\"en-CC\",\"en-CH\",\"en-CK\",\"en-CM\",\"en-CX\",\"en-CY\",\"en-DE\",\"en-DG\",\"en-DK\",\"en-DM\",\"en-ER\",\"en-FI\",\"en-FJ\",\"en-FK\",\"en-FM\",\"en-GB\",\"en-GD\",\"en-GG\",\"en-GH\",\"en-GI\",\"en-GM\",\"en-GU\",\"en-GY\",\"en-HK\",\"en-IE\",\"en-IL\",\"en-IM\",\"en-IN\",\"en-IO\",\"en-JE\",\"en-JM\",\"en-KE\",\"en-KI\",\"en-KN\",\"en-KY\",\"en-LC\",\"en-LR\",\"en-LS\",\"en-MG\",\"en-MH\",\"en-MO\",\"en-MP\",\"en-MS\",\"en-MT\",\"en-MU\",\"en-MW\",\"en-MY\",\"en-NA\",\"en-NF\",\"en-NG\",\"en-NL\",\"en-NR\",\"en-NU\",\"en-NZ\",\"en-PG\",\"en-PH\",\"en-PK\",\"en-PN\",\"en-PR\",\"en-PW\",\"en-RW\",\"en-SB\",\"en-SC\",\"en-SD\",\"en-SE\",\"en-SG\",\"en-SH\",\"en-SI\",\"en-SL\",\"en-SS\",\"en-SX\",\"en-SZ\",\"en-TC\",\"en-TK\",\"en-TO\",\"en-TT\",\"en-TV\",\"en-TZ\",\"en-UG\",\"en-UM\",\"en-VC\",\"en-VG\",\"en-VI\",\"en-VU\",\"en-WS\",\"en-ZA\",\"en-ZM\",\"en-ZW\",\"en\",\"eo\",\"es-419\",\"es-AR\",\"es-BO\",\"es-BR\",\"es-BZ\",\"es-CL\",\"es-CO\",\"es-CR\",\"es-CU\",\"es-DO\",\"es-EA\",\"es-EC\",\"es-GQ\",\"es-GT\",\"es-HN\",\"es-IC\",\"es-MX\",\"es-NI\",\"es-PA\",\"es-PE\",\"es-PH\",\"es-PR\",\"es-PY\",\"es-SV\",\"es-US\",\"es-UY\",\"es-VE\",\"es\",\"et\",\"eu\",\"ewo\",\"fa-AF\",\"fa\",\"ff-Adlm-BF\",\"ff-Adlm-CM\",\"ff-Adlm-GH\",\"ff-Adlm-GM\",\"ff-Adlm-GW\",\"ff-Adlm-LR\",\"ff-Adlm-MR\",\"ff-Adlm-NE\",\"ff-Adlm-NG\",\"ff-Adlm-SL\",\"ff-Adlm-SN\",\"ff-Adlm\",\"ff-Latn-BF\",\"ff-Latn-CM\",\"ff-Latn-GH\",\"ff-Latn-GM\",\"ff-Latn-GN\",\"ff-Latn-GW\",\"ff-Latn-LR\",\"ff-Latn-MR\",\"ff-Latn-NE\",\"ff-Latn-NG\",\"ff-Latn-SL\",\"ff-Latn\",\"ff\",\"fi\",\"fil\",\"fo-DK\",\"fo\",\"fr-BE\",\"fr-BF\",\"fr-BI\",\"fr-BJ\",\"fr-BL\",\"fr-CA\",\"fr-CD\",\"fr-CF\",\"fr-CG\",\"fr-CH\",\"fr-CI\",\"fr-CM\",\"fr-DJ\",\"fr-DZ\",\"fr-GA\",\"fr-GF\",\"fr-GN\",\"fr-GP\",\"fr-GQ\",\"fr-HT\",\"fr-KM\",\"fr-LU\",\"fr-MA\",\"fr-MC\",\"fr-MF\",\"fr-MG\",\"fr-ML\",\"fr-MQ\",\"fr-MR\",\"fr-MU\",\"fr-NC\",\"fr-NE\",\"fr-PF\",\"fr-PM\",\"fr-RE\",\"fr-RW\",\"fr-SC\",\"fr-SN\",\"fr-SY\",\"fr-TD\",\"fr-TG\",\"fr-TN\",\"fr-VU\",\"fr-WF\",\"fr-YT\",\"fr\",\"fur\",\"fy\",\"ga-GB\",\"ga\",\"gd\",\"gl\",\"gsw-FR\",\"gsw-LI\",\"gsw\",\"gu\",\"guz\",\"gv\",\"ha-GH\",\"ha-NE\",\"ha\",\"haw\",\"he\",\"hi\",\"hr-BA\",\"hr\",\"hsb\",\"hu\",\"hy\",\"ia\",\"id\",\"ig\",\"ii\",\"is\",\"it-CH\",\"it-SM\",\"it-VA\",\"it\",\"ja\",\"jgo\",\"jmc\",\"jv\",\"ka\",\"kab\",\"kam\",\"kde\",\"kea\",\"kgp\",\"khq\",\"ki\",\"kk\",\"kkj\",\"kl\",\"kln\",\"km\",\"kn\",\"ko-KP\",\"ko\",\"kok\",\"ks-Arab\",\"ks\",\"ksb\",\"ksf\",\"ksh\",\"ku\",\"kw\",\"ky\",\"lag\",\"lb\",\"lg\",\"lkt\",\"ln-AO\",\"ln-CF\",\"ln-CG\",\"ln\",\"lo\",\"lrc-IQ\",\"lrc\",\"lt\",\"lu\",\"luo\",\"luy\",\"lv\",\"mai\",\"mas-TZ\",\"mas\",\"mer\",\"mfe\",\"mg\",\"mgh\",\"mgo\",\"mi\",\"mk\",\"ml\",\"mn\",\"mni-Beng\",\"mni\",\"mr\",\"ms-BN\",\"ms-ID\",\"ms-SG\",\"ms\",\"mt\",\"mua\",\"my\",\"mzn\",\"naq\",\"nb-SJ\",\"nb\",\"nd\",\"nds-NL\",\"nds\",\"ne-IN\",\"ne\",\"nl-AW\",\"nl-BE\",\"nl-BQ\",\"nl-CW\",\"nl-SR\",\"nl-SX\",\"nl\",\"nmg\",\"nn\",\"nnh\",\"no\",\"nus\",\"nyn\",\"om-KE\",\"om\",\"or\",\"os-RU\",\"os\",\"pa-Arab\",\"pa-Guru\",\"pa\",\"pcm\",\"pl\",\"ps-PK\",\"ps\",\"pt-AO\",\"pt-CH\",\"pt-CV\",\"pt-GQ\",\"pt-GW\",\"pt-LU\",\"pt-MO\",\"pt-MZ\",\"pt-PT\",\"pt-ST\",\"pt-TL\",\"pt\",\"qu-BO\",\"qu-EC\",\"qu\",\"rm\",\"rn\",\"ro-MD\",\"ro\",\"rof\",\"ru-BY\",\"ru-KG\",\"ru-KZ\",\"ru-MD\",\"ru-UA\",\"ru\",\"rw\",\"rwk\",\"sa\",\"sah\",\"saq\",\"sat-Olck\",\"sat\",\"sbp\",\"sc\",\"sd-Arab\",\"sd-Deva\",\"sd\",\"se-FI\",\"se-SE\",\"se\",\"seh\",\"ses\",\"sg\",\"shi-Latn\",\"shi-Tfng\",\"shi\",\"si\",\"sk\",\"sl\",\"smn\",\"sn\",\"so-DJ\",\"so-ET\",\"so-KE\",\"so\",\"sq-MK\",\"sq-XK\",\"sq\",\"sr-Cyrl-BA\",\"sr-Cyrl-ME\",\"sr-Cyrl-XK\",\"sr-Cyrl\",\"sr-Latn-BA\",\"sr-Latn-ME\",\"sr-Latn-XK\",\"sr-Latn\",\"sr\",\"su-Latn\",\"su\",\"sv-AX\",\"sv-FI\",\"sv\",\"sw-CD\",\"sw-KE\",\"sw-UG\",\"sw\",\"ta-LK\",\"ta-MY\",\"ta-SG\",\"ta\",\"te\",\"teo-KE\",\"teo\",\"tg\",\"th\",\"ti-ER\",\"ti\",\"tk\",\"to\",\"tr-CY\",\"tr\",\"tt\",\"twq\",\"tzm\",\"ug\",\"uk\",\"und\",\"ur-IN\",\"ur\",\"uz-Arab\",\"uz-Cyrl\",\"uz-Latn\",\"uz\",\"vai-Latn\",\"vai-Vaii\",\"vai\",\"vi\",\"vun\",\"wae\",\"wo\",\"xh\",\"xog\",\"yav\",\"yi\",\"yo-BJ\",\"yo\",\"yrl-CO\",\"yrl-VE\",\"yrl\",\"yue-Hans\",\"yue-Hant\",\"yue\",\"zgh\",\"zh-Hans-HK\",\"zh-Hans-MO\",\"zh-Hans-SG\",\"zh-Hans\",\"zh-Hant-HK\",\"zh-Hant-MO\",\"zh-Hant\",\"zh\",\"zu\"]}));t(ce),ce.supportedLocales;var fe=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.shouldPolyfill=void 0,t.shouldPolyfill=function(e){if(void 0===e&&(e=\"en\"),!(\"RelativeTimeFormat\"in Intl)||!function(e){if(!e)return!0;var t=Array.isArray(e)?e:[e];return Intl.RelativeTimeFormat.supportedLocalesOf(t).length===t.length}(e)||!function(e){try{return\"numberingSystem\"in new Intl.RelativeTimeFormat(e||\"en\",{numeric:\"auto\"}).resolvedOptions()}catch(e){return!1}}(e))return(0,i.match)([e],ce.supportedLocales,\"en\")}}));t(fe),fe.shouldPolyfill;var me=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0});var n=(0,r.__importDefault)(se);(0,fe.shouldPolyfill)()&&Object.defineProperty(Intl,\"RelativeTimeFormat\",{value:n.default,writable:!0,enumerable:!1,configurable:!0})})),pe=t(me);export{me as __moduleExports,pe as default};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.4053bced.js",
    "content": "import{a as e,h as i,e as t,t as a,i as s,$ as o,at as r,o as n,A as d,ae as l,r as c,n as h,H as p,L as m,N as u,au as y,a0 as v,a1 as g,av as _,ai as x,s as f,d as k}from\"./main-a0d7432d.js\";import{c as b}from\"./c.4a97632a.js\";import\"./c.175b9792.js\";import{s as $}from\"./c.bca0f55d.js\";import{f as w,a as z}from\"./c.fe747ba2.js\";import{m as j}from\"./c.9d6aaabf.js\";import{u as C}from\"./c.dba55e54.js\";import\"./c.d2d70fc0.js\";import\"./c.7ee871d3.js\";import\"./c.743a15a1.js\";import\"./c.c608beec.js\";import\"./c.8e28b461.js\";e([h(\"ha-expansion-panel\")],(function(e,i){return{F:class extends i{constructor(...i){super(...i),e(this)}},d:[{kind:\"field\",decorators:[t({type:Boolean,reflect:!0})],key:\"expanded\",value:()=>!1},{kind:\"field\",decorators:[t({type:Boolean,reflect:!0})],key:\"outlined\",value:()=>!1},{kind:\"field\",decorators:[t()],key:\"header\",value:void 0},{kind:\"field\",decorators:[t()],key:\"secondary\",value:void 0},{kind:\"field\",decorators:[a()],key:\"_showContent\",value(){return this.expanded}},{kind:\"field\",decorators:[s(\".container\")],key:\"_container\",value:void 0},{kind:\"method\",key:\"render\",value:function(){return o`\n      <div\n        id=\"summary\"\n        @click=${this._toggleContainer}\n        @keydown=${this._toggleContainer}\n        role=\"button\"\n        tabindex=\"0\"\n        aria-expanded=${this.expanded}\n        aria-controls=\"sect1\"\n      >\n        <slot class=\"header\" name=\"header\">\n          ${this.header}\n          <slot class=\"secondary\" name=\"secondary\">${this.secondary}</slot>\n        </slot>\n        <ha-svg-icon\n          .path=${r}\n          class=\"summary-icon ${n({expanded:this.expanded})}\"\n        ></ha-svg-icon>\n      </div>\n      <div\n        class=\"container ${n({expanded:this.expanded})}\"\n        @transitionend=${this._handleTransitionEnd}\n        role=\"region\"\n        aria-labelledby=\"summary\"\n        aria-hidden=${!this.expanded}\n        tabindex=\"-1\"\n      >\n        ${this._showContent?o`<slot></slot>`:\"\"}\n      </div>\n    `}},{kind:\"method\",key:\"willUpdate\",value:function(e){e.has(\"expanded\")&&this.expanded&&(this._showContent=this.expanded)}},{kind:\"method\",key:\"_handleTransitionEnd\",value:function(){this._container.style.removeProperty(\"height\"),this._showContent=this.expanded}},{kind:\"method\",key:\"_toggleContainer\",value:async function(e){if(\"keydown\"===e.type&&\"Enter\"!==e.key&&\" \"!==e.key)return;e.preventDefault();const i=!this.expanded;d(this,\"expanded-will-change\",{expanded:i}),i&&(this._showContent=!0,await l());const t=this._container.scrollHeight;this._container.style.height=`${t}px`,i||setTimeout((()=>{this._container.style.height=\"0px\"}),0),this.expanded=i,d(this,\"expanded-changed\",{expanded:this.expanded})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return c`\n      :host {\n        display: block;\n      }\n\n      :host([outlined]) {\n        box-shadow: none;\n        border-width: 1px;\n        border-style: solid;\n        border-color: var(\n          --ha-card-border-color,\n          var(--divider-color, #e0e0e0)\n        );\n        border-radius: var(--ha-card-border-radius, 4px);\n      }\n\n      #summary {\n        display: flex;\n        padding: var(--expansion-panel-summary-padding, 0 8px);\n        min-height: 48px;\n        align-items: center;\n        cursor: pointer;\n        overflow: hidden;\n        font-weight: 500;\n        outline: none;\n      }\n\n      #summary:focus {\n        background: var(--input-fill-color);\n      }\n\n      .summary-icon {\n        transition: transform 150ms cubic-bezier(0.4, 0, 0.2, 1);\n        margin-left: auto;\n        margin-inline-start: auto;\n        margin-inline-end: initial;\n        direction: var(--direction);\n      }\n\n      .summary-icon.expanded {\n        transform: rotate(180deg);\n      }\n\n      .container {\n        padding: var(--expansion-panel-content-padding, 0 8px);\n        overflow: hidden;\n        transition: height 300ms cubic-bezier(0.4, 0, 0.2, 1);\n        height: 0px;\n      }\n\n      .container.expanded {\n        height: auto;\n      }\n\n      .header {\n        display: block;\n      }\n\n      .secondary {\n        display: block;\n        color: var(--secondary-text-color);\n        font-size: 12px;\n      }\n    `}}]}}),i);let R=e([h(\"hacs-update-dialog\")],(function(e,i){class s extends i{constructor(...i){super(...i),e(this)}}return{F:s,d:[{kind:\"field\",decorators:[t()],key:\"repository\",value:void 0},{kind:\"field\",decorators:[t({type:Boolean})],key:\"_updating\",value:()=>!1},{kind:\"field\",decorators:[t()],key:\"_error\",value:void 0},{kind:\"field\",decorators:[t({attribute:!1})],key:\"_releaseNotes\",value:()=>[]},{kind:\"field\",decorators:[a()],key:\"_repository\",value:void 0},{kind:\"method\",key:\"firstUpdated\",value:async function(e){m(u(s.prototype),\"firstUpdated\",this).call(this,e),this._repository=await w(this.hass,this.repository),this._repository&&(\"commit\"!==this._repository.version_or_commit&&(this._releaseNotes=await y(this.hass,String(this._repository.id))),v(this.hass,(e=>this._error=e),g.ERROR))}},{kind:\"method\",key:\"render\",value:function(){var e;return this.active&&this._repository?o`\n      <hacs-dialog\n        .active=${this.active}\n        .title=${this.hacs.localize(\"dialog_update.title\")}\n        .hass=${this.hass}\n      >\n        <div class=${n({content:!0,narrow:this.narrow})}>\n          <p class=\"message\">\n            ${this.hacs.localize(\"dialog_update.message\",{name:this._repository.name})}\n          </p>\n          <div class=\"version-container\">\n            <div class=\"version-element\">\n              <span class=\"version-number\">${this._repository.installed_version}</span>\n              <small class=\"version-text\">${this.hacs.localize(\"dialog_update.downloaded_version\")}</small>\n            </div>\n\n            <span class=\"version-separator\">\n              <ha-svg-icon\n                .path=${_}\n              ></ha-svg-icon>\n            </span>\n\n            <div class=\"version-element\">\n                <span class=\"version-number\">${this._repository.available_version}</span>\n                <small class=\"version-text\">${this.hacs.localize(\"dialog_update.available_version\")}</small>\n              </div>\n            </div>\n          </div>\n\n          ${this._releaseNotes.length>0?this._releaseNotes.map((e=>o`\n                    <ha-expansion-panel\n                      .header=${e.name&&e.name!==e.tag?`${e.tag}: ${e.name}`:e.tag}\n                      outlined\n                      ?expanded=${1===this._releaseNotes.length}\n                    >\n                      ${e.body?j.html(e.body,this._repository):this.hacs.localize(\"dialog_update.no_info\")}\n                    </ha-expansion-panel>\n                  `)):\"\"}\n          ${this._repository.can_download?\"\":o`<ha-alert alert-type=\"error\" .rtl=${b(this.hass)}>\n                  ${this.hacs.localize(\"confirm.home_assistant_version_not_correct\",{haversion:this.hass.config.version,minversion:this._repository.homeassistant})}\n                </ha-alert>`}\n          ${\"integration\"===this._repository.category?o`<p>${this.hacs.localize(\"dialog_download.restart\")}</p>`:\"\"}\n          ${null!==(e=this._error)&&void 0!==e&&e.message?o`<ha-alert alert-type=\"error\" .rtl=${b(this.hass)}>\n                  ${this._error.message}\n                </ha-alert>`:\"\"}\n        </div>\n        <mwc-button\n          slot=\"primaryaction\"\n          ?disabled=${!this._repository.can_download}\n          @click=${this._updateRepository}\n          raised\n          >\n          ${this._updating?o`<ha-circular-progress active size=\"small\"></ha-circular-progress>`:this.hacs.localize(\"common.update\")}\n          </mwc-button\n        >\n        <div class=\"secondary\" slot=\"secondaryaction\">\n          <hacs-link .url=${this._getChanglogURL()||\"\"}>\n            <mwc-button>${this.hacs.localize(\"dialog_update.changelog\")}\n          </mwc-button>\n          </hacs-link>\n          <hacs-link .url=\"https://github.com/${this._repository.full_name}\">\n            <mwc-button>${this.hacs.localize(\"common.repository\")}\n          </mwc-button>\n          </hacs-link>\n        </div>\n      </hacs-dialog>\n    `:o``}},{kind:\"method\",key:\"_updateRepository\",value:async function(){this._updating=!0,\"commit\"!==this._repository.version_or_commit?await z(this.hass,String(this._repository.id),this._repository.available_version):await z(this.hass,String(this._repository.id)),\"plugin\"===this._repository.category&&\"storage\"===this.hacs.info.lovelace_mode&&await C(this.hass,this._repository,this._repository.available_version),this._updating=!1,this.dispatchEvent(new Event(\"hacs-dialog-closed\",{bubbles:!0,composed:!0})),\"plugin\"===this._repository.category&&$(this,{title:this.hacs.localize(\"common.reload\"),text:o`${this.hacs.localize(\"dialog.reload.description\")}<br />${this.hacs.localize(\"dialog.reload.confirm\")}`,dismissText:this.hacs.localize(\"common.cancel\"),confirmText:this.hacs.localize(\"common.reload\"),confirm:()=>{x.location.href=x.location.href}})}},{kind:\"method\",key:\"_getChanglogURL\",value:function(){return\"commit\"===this._repository.version_or_commit?`https://github.com/${this._repository.full_name}/compare/${this._repository.installed_version}...${this._repository.available_version}`:`https://github.com/${this._repository.full_name}/releases`}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[f,k,c`\n        .content {\n          width: 360px;\n          display: contents;\n        }\n        ha-expansion-panel {\n          margin: 8px 0;\n        }\n        ha-expansion-panel[expanded] {\n          padding-bottom: 16px;\n        }\n\n        .secondary {\n          display: flex;\n        }\n        .message {\n          text-align: center;\n          margin: 0;\n        }\n        .version-container {\n          margin: 24px 0 12px 0;\n          width: 360px;\n          min-width: 100%;\n          max-width: 100%;\n          display: flex;\n          flex-direction: row;\n        }\n        .version-element {\n          display: flex;\n          flex-direction: column;\n          flex: 1;\n          padding: 0 12px;\n          text-align: center;\n        }\n        .version-text {\n          color: var(--secondary-text-color);\n        }\n        .version-number {\n          font-size: 1.5rem;\n          margin-bottom: 4px;\n        }\n      `]}}]}}),p);export{R as HacsUpdateDialog};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.47f687e9.js",
    "content": "import{Q as e,S as t,a5 as i,T as a,V as n,_ as r,n as s,a as o,h as l,e as d,i as c,$ as u,A as h,r as p,L as m,N as v,a6 as b,a7 as f,a8 as y,a9 as g,aa as _,ab as k,o as x,t as w,ac as $,ad as C,x as E,ae as S,J as A,u as B,v as V,M as R,g as M,K as L,w as T,R as K,y as P,j as D,z as I,m as F,af as O,ag as q}from\"./main-a0d7432d.js\";import\"./c.175b9792.js\";import{s as N,a as H,b as z,c as U,d as X,F as j}from\"./c.c176780d.js\";import\"./c.fbd8d2ba.js\";import\"./c.c7df5815.js\";import{L as W,s as G}from\"./c.936d9772.js\";import{S as Y,s as J,a as Q}from\"./c.db2e6bb6.js\";import{o as Z}from\"./c.8e28b461.js\";const ee=e(class extends t{constructor(e){if(super(e),i(this,\"_element\",void 0),e.type!==a.CHILD)throw new Error(\"dynamicElementDirective can only be used in content bindings\")}update(e,[t,i]){return this._element&&this._element.localName===t?(i&&Object.entries(i).forEach((([e,t])=>{this._element[e]=t})),n):this.render(t,i)}render(e,t){return this._element=document.createElement(e),t&&Object.entries(t).forEach((([e,t])=>{this._element[e]=t})),this._element}});let te=class extends H{};te.styles=[N],te=r([s(\"mwc-formfield\")],te),o([s(\"ha-form-boolean\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[d()],key:\"schema\",value:void 0},{kind:\"field\",decorators:[d()],key:\"data\",value:void 0},{kind:\"field\",decorators:[d()],key:\"label\",value:void 0},{kind:\"field\",decorators:[d({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[c(\"ha-checkbox\",!0)],key:\"_input\",value:void 0},{kind:\"method\",key:\"focus\",value:function(){this._input&&this._input.focus()}},{kind:\"method\",key:\"render\",value:function(){return u`\n      <mwc-formfield .label=${this.label}>\n        <ha-checkbox\n          .checked=${this.data}\n          .disabled=${this.disabled}\n          @change=${this._valueChanged}\n        ></ha-checkbox>\n      </mwc-formfield>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(e){h(this,\"value-changed\",{value:e.target.checked})}}]}}),l),o([s(\"ha-form-constant\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[d({attribute:!1})],key:\"schema\",value:void 0},{kind:\"field\",decorators:[d()],key:\"label\",value:void 0},{kind:\"method\",key:\"render\",value:function(){return u`<span class=\"label\">${this.label}</span>${this.schema.value?`: ${this.schema.value}`:\"\"}`}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return p`\n      :host {\n        display: block;\n      }\n      .label {\n        font-weight: 500;\n      }\n    `}}]}}),l),o([s(\"ha-form-grid\")],(function(e,t){class i extends t{constructor(...t){super(...t),e(this)}}return{F:i,d:[{kind:\"field\",decorators:[d({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[d({attribute:!1})],key:\"data\",value:void 0},{kind:\"field\",decorators:[d({attribute:!1})],key:\"schema\",value:void 0},{kind:\"field\",decorators:[d({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[d()],key:\"computeLabel\",value:void 0},{kind:\"field\",decorators:[d()],key:\"computeHelper\",value:void 0},{kind:\"method\",key:\"firstUpdated\",value:function(e){m(v(i.prototype),\"firstUpdated\",this).call(this,e),this.setAttribute(\"own-margin\",\"\")}},{kind:\"method\",key:\"updated\",value:function(e){m(v(i.prototype),\"updated\",this).call(this,e),e.has(\"schema\")&&(this.schema.column_min_width?this.style.setProperty(\"--form-grid-min-width\",this.schema.column_min_width):this.style.setProperty(\"--form-grid-min-width\",\"\"))}},{kind:\"method\",key:\"render\",value:function(){return u`\n      ${this.schema.schema.map((e=>u`\n            <ha-form\n              .hass=${this.hass}\n              .data=${this.data}\n              .schema=${[e]}\n              .disabled=${this.disabled}\n              .computeLabel=${this.computeLabel}\n              .computeHelper=${this.computeHelper}\n            ></ha-form>\n          `))}\n    `}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return p`\n      :host {\n        display: grid !important;\n        grid-template-columns: repeat(\n          var(--form-grid-column-count, auto-fit),\n          minmax(var(--form-grid-min-width, 200px), 1fr)\n        );\n        grid-gap: 8px;\n      }\n      :host > ha-form {\n        display: block;\n        margin-bottom: 24px;\n      }\n    `}}]}}),l),o([s(\"ha-form-float\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[d({attribute:!1})],key:\"schema\",value:void 0},{kind:\"field\",decorators:[d({attribute:!1})],key:\"data\",value:void 0},{kind:\"field\",decorators:[d()],key:\"label\",value:void 0},{kind:\"field\",decorators:[d({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[c(\"ha-textfield\")],key:\"_input\",value:void 0},{kind:\"method\",key:\"focus\",value:function(){this._input&&this._input.focus()}},{kind:\"method\",key:\"render\",value:function(){var e;return u`\n      <ha-textfield\n        inputMode=\"decimal\"\n        .label=${this.label}\n        .value=${void 0!==this.data?this.data:\"\"}\n        .disabled=${this.disabled}\n        .required=${this.schema.required}\n        .autoValidate=${this.schema.required}\n        .suffix=${null===(e=this.schema.description)||void 0===e?void 0:e.suffix}\n        .validationMessage=${this.schema.required?\"Required\":void 0}\n        @input=${this._valueChanged}\n      ></ha-textfield>\n    `}},{kind:\"method\",key:\"updated\",value:function(e){e.has(\"schema\")&&this.toggleAttribute(\"own-margin\",!!this.schema.required)}},{kind:\"method\",key:\"_valueChanged\",value:function(e){const t=e.target,i=t.value.replace(\",\",\".\");let a;if(!i.endsWith(\".\"))if(\"\"!==i&&(a=parseFloat(i),isNaN(a)&&(a=void 0)),this.data!==a)h(this,\"value-changed\",{value:a});else{const e=void 0===a?\"\":String(a);t.value!==e&&(t.value=e)}}},{kind:\"field\",static:!0,key:\"styles\",value:()=>p`\n    :host([own-margin]) {\n      margin-bottom: 5px;\n    }\n    ha-textfield {\n      display: block;\n    }\n  `}]}}),l);const ie=b({_template:f`\n    <style>\n      :host {\n        display: inline-block;\n        position: fixed;\n        clip: rect(0px,0px,0px,0px);\n      }\n    </style>\n    <div aria-live$=\"[[mode]]\">[[_text]]</div>\n`,is:\"iron-a11y-announcer\",properties:{mode:{type:String,value:\"polite\"},timeout:{type:Number,value:150},_text:{type:String,value:\"\"}},created:function(){ie.instance||(ie.instance=this),document.addEventListener(\"iron-announce\",this._onIronAnnounce.bind(this))},announce:function(e){this._text=\"\",this.async((function(){this._text=e}),this.timeout)},_onIronAnnounce:function(e){e.detail&&e.detail.text&&this.announce(e.detail.text)}});ie.instance=null,ie.requestAvailability=function(){ie.instance||(ie.instance=document.createElement(\"iron-a11y-announcer\")),document.body?document.body.appendChild(ie.instance):document.addEventListener(\"load\",(function(){document.body.appendChild(ie.instance)}))};class ae{constructor(e){ae[\" \"](e),this.type=e&&e.type||\"default\",this.key=e&&e.key,e&&\"value\"in e&&(this.value=e.value)}get value(){var e=this.type,t=this.key;if(e&&t)return ae.types[e]&&ae.types[e][t]}set value(e){var t=this.type,i=this.key;t&&i&&(t=ae.types[t]=ae.types[t]||{},null==e?delete t[i]:t[i]=e)}get list(){if(this.type){var e=ae.types[this.type];return e?Object.keys(e).map((function(e){return ne[this.type][e]}),this):[]}}byKey(e){return this.key=e,this.value}}ae[\" \"]=function(){},ae.types={};var ne=ae.types;b({is:\"iron-meta\",properties:{type:{type:String,value:\"default\"},key:{type:String},value:{type:String,notify:!0},self:{type:Boolean,observer:\"_selfChanged\"},__meta:{type:Boolean,computed:\"__computeMeta(type, key, value)\"}},hostAttributes:{hidden:!0},__computeMeta:function(e,t,i){var a=new ae({type:e,key:t});return void 0!==i&&i!==a.value?a.value=i:this.value!==a.value&&(this.value=a.value),a},get list(){return this.__meta&&this.__meta.list},_selfChanged:function(e){e&&(this.value=this)},byKey:function(e){return new ae({type:this.type,key:e}).value}});let re=null;const se={properties:{validator:{type:String},invalid:{notify:!0,reflectToAttribute:!0,type:Boolean,value:!1,observer:\"_invalidChanged\"}},registered:function(){re=new ae({type:\"validator\"})},_invalidChanged:function(){this.invalid?this.setAttribute(\"aria-invalid\",\"true\"):this.removeAttribute(\"aria-invalid\")},get _validator(){return re&&re.byKey(this.validator)},hasValidator:function(){return null!=this._validator},validate:function(e){return void 0===e&&void 0!==this.value?this.invalid=!this._getValidity(this.value):this.invalid=!this._getValidity(e),!this.invalid},_getValidity:function(e){return!this.hasValidator()||this._validator.validate(e)}};b({_template:f`\n    <style>\n      :host {\n        display: inline-block;\n      }\n    </style>\n    <slot id=\"content\"></slot>\n`,is:\"iron-input\",behaviors:[se],properties:{bindValue:{type:String,value:\"\"},value:{type:String,computed:\"_computeValue(bindValue)\"},allowedPattern:{type:String},autoValidate:{type:Boolean,value:!1},_inputElement:Object},observers:[\"_bindValueChanged(bindValue, _inputElement)\"],listeners:{input:\"_onInput\",keypress:\"_onKeypress\"},created:function(){ie.requestAvailability(),this._previousValidInput=\"\",this._patternAlreadyChecked=!1},attached:function(){this._observer=y(this).observeNodes(function(e){this._initSlottedInput()}.bind(this))},detached:function(){this._observer&&(y(this).unobserveNodes(this._observer),this._observer=null)},get inputElement(){return this._inputElement},_initSlottedInput:function(){this._inputElement=this.getEffectiveChildren()[0],this.inputElement&&this.inputElement.value&&(this.bindValue=this.inputElement.value),this.fire(\"iron-input-ready\")},get _patternRegExp(){var e;if(this.allowedPattern)e=new RegExp(this.allowedPattern);else if(\"number\"===this.inputElement.type)e=/[0-9.,e-]/;return e},_bindValueChanged:function(e,t){t&&(void 0===e?t.value=null:e!==t.value&&(this.inputElement.value=e),this.autoValidate&&this.validate(),this.fire(\"bind-value-changed\",{value:e}))},_onInput:function(){this.allowedPattern&&!this._patternAlreadyChecked&&(this._checkPatternValidity()||(this._announceInvalidCharacter(\"Invalid string of characters not entered.\"),this.inputElement.value=this._previousValidInput));this.bindValue=this._previousValidInput=this.inputElement.value,this._patternAlreadyChecked=!1},_isPrintable:function(e){var t=8==e.keyCode||9==e.keyCode||13==e.keyCode||27==e.keyCode,i=19==e.keyCode||20==e.keyCode||45==e.keyCode||46==e.keyCode||144==e.keyCode||145==e.keyCode||e.keyCode>32&&e.keyCode<41||e.keyCode>111&&e.keyCode<124;return!(t||0==e.charCode&&i)},_onKeypress:function(e){if(this.allowedPattern||\"number\"===this.inputElement.type){var t=this._patternRegExp;if(t&&!(e.metaKey||e.ctrlKey||e.altKey)){this._patternAlreadyChecked=!0;var i=String.fromCharCode(e.charCode);this._isPrintable(e)&&!t.test(i)&&(e.preventDefault(),this._announceInvalidCharacter(\"Invalid character \"+i+\" not entered.\"))}}},_checkPatternValidity:function(){var e=this._patternRegExp;if(!e)return!0;for(var t=0;t<this.inputElement.value.length;t++)if(!e.test(this.inputElement.value[t]))return!1;return!0},validate:function(){if(!this.inputElement)return this.invalid=!1,!0;var e=this.inputElement.checkValidity();return e&&(this.required&&\"\"===this.bindValue?e=!1:this.hasValidator()&&(e=se.validate.call(this,this.bindValue))),this.invalid=!e,this.fire(\"iron-input-validate\"),e},_announceInvalidCharacter:function(e){this.fire(\"iron-announce\",{text:e})},_computeValue:function(e){return e}});const oe={attached:function(){this.fire(\"addon-attached\")},update:function(e){}};b({_template:f`\n    <style>\n      :host {\n        display: inline-block;\n        float: right;\n\n        @apply --paper-font-caption;\n        @apply --paper-input-char-counter;\n      }\n\n      :host([hidden]) {\n        display: none !important;\n      }\n\n      :host(:dir(rtl)) {\n        float: left;\n      }\n    </style>\n\n    <span>[[_charCounterStr]]</span>\n`,is:\"paper-input-char-counter\",behaviors:[oe],properties:{_charCounterStr:{type:String,value:\"0\"}},update:function(e){if(e.inputElement){e.value=e.value||\"\";var t=e.value.toString().length.toString();e.inputElement.hasAttribute(\"maxlength\")&&(t+=\"/\"+e.inputElement.getAttribute(\"maxlength\")),this._charCounterStr=t}}});const le=f`\n<custom-style>\n  <style is=\"custom-style\">\n    html {\n      --paper-input-container-shared-input-style: {\n        position: relative; /* to make a stacking context */\n        outline: none;\n        box-shadow: none;\n        padding: 0;\n        margin: 0;\n        width: 100%;\n        max-width: 100%;\n        background: transparent;\n        border: none;\n        color: var(--paper-input-container-input-color, var(--primary-text-color));\n        -webkit-appearance: none;\n        text-align: inherit;\n        vertical-align: var(--paper-input-container-input-align, bottom);\n\n        @apply --paper-font-subhead;\n      };\n    }\n  </style>\n</custom-style>\n`;le.setAttribute(\"style\",\"display: none;\"),document.head.appendChild(le.content),b({_template:f`\n    <style>\n      :host {\n        display: block;\n        padding: 8px 0;\n        @apply --paper-input-container;\n      }\n\n      :host([inline]) {\n        display: inline-block;\n      }\n\n      :host([disabled]) {\n        pointer-events: none;\n        opacity: 0.33;\n\n        @apply --paper-input-container-disabled;\n      }\n\n      :host([hidden]) {\n        display: none !important;\n      }\n\n      [hidden] {\n        display: none !important;\n      }\n\n      .floated-label-placeholder {\n        @apply --paper-font-caption;\n      }\n\n      .underline {\n        height: 2px;\n        position: relative;\n      }\n\n      .focused-line {\n        @apply --layout-fit;\n        border-bottom: 2px solid var(--paper-input-container-focus-color, var(--primary-color));\n\n        -webkit-transform-origin: center center;\n        transform-origin: center center;\n        -webkit-transform: scale3d(0,1,1);\n        transform: scale3d(0,1,1);\n\n        @apply --paper-input-container-underline-focus;\n      }\n\n      .underline.is-highlighted .focused-line {\n        -webkit-transform: none;\n        transform: none;\n        -webkit-transition: -webkit-transform 0.25s;\n        transition: transform 0.25s;\n\n        @apply --paper-transition-easing;\n      }\n\n      .underline.is-invalid .focused-line {\n        border-color: var(--paper-input-container-invalid-color, var(--error-color));\n        -webkit-transform: none;\n        transform: none;\n        -webkit-transition: -webkit-transform 0.25s;\n        transition: transform 0.25s;\n\n        @apply --paper-transition-easing;\n      }\n\n      .unfocused-line {\n        @apply --layout-fit;\n        border-bottom: 1px solid var(--paper-input-container-color, var(--secondary-text-color));\n        @apply --paper-input-container-underline;\n      }\n\n      :host([disabled]) .unfocused-line {\n        border-bottom: 1px dashed;\n        border-color: var(--paper-input-container-color, var(--secondary-text-color));\n        @apply --paper-input-container-underline-disabled;\n      }\n\n      .input-wrapper {\n        @apply --layout-horizontal;\n        @apply --layout-center;\n        position: relative;\n      }\n\n      .input-content {\n        @apply --layout-flex-auto;\n        @apply --layout-relative;\n        max-width: 100%;\n      }\n\n      .input-content ::slotted(label),\n      .input-content ::slotted(.paper-input-label) {\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        font: inherit;\n        color: var(--paper-input-container-color, var(--secondary-text-color));\n        -webkit-transition: -webkit-transform 0.25s, width 0.25s;\n        transition: transform 0.25s, width 0.25s;\n        -webkit-transform-origin: left top;\n        transform-origin: left top;\n        /* Fix for safari not focusing 0-height date/time inputs with -webkit-apperance: none; */\n        min-height: 1px;\n\n        @apply --paper-font-common-nowrap;\n        @apply --paper-font-subhead;\n        @apply --paper-input-container-label;\n        @apply --paper-transition-easing;\n      }\n\n\n      .input-content ::slotted(label):before,\n      .input-content ::slotted(.paper-input-label):before {\n        @apply --paper-input-container-label-before;\n      }\n\n      .input-content ::slotted(label):after,\n      .input-content ::slotted(.paper-input-label):after {\n        @apply --paper-input-container-label-after;\n      }\n\n      .input-content.label-is-floating ::slotted(label),\n      .input-content.label-is-floating ::slotted(.paper-input-label) {\n        -webkit-transform: translateY(-75%) scale(0.75);\n        transform: translateY(-75%) scale(0.75);\n\n        /* Since we scale to 75/100 of the size, we actually have 100/75 of the\n        original space now available */\n        width: 133%;\n\n        @apply --paper-input-container-label-floating;\n      }\n\n      :host(:dir(rtl)) .input-content.label-is-floating ::slotted(label),\n      :host(:dir(rtl)) .input-content.label-is-floating ::slotted(.paper-input-label) {\n        right: 0;\n        left: auto;\n        -webkit-transform-origin: right top;\n        transform-origin: right top;\n      }\n\n      .input-content.label-is-highlighted ::slotted(label),\n      .input-content.label-is-highlighted ::slotted(.paper-input-label) {\n        color: var(--paper-input-container-focus-color, var(--primary-color));\n\n        @apply --paper-input-container-label-focus;\n      }\n\n      .input-content.is-invalid ::slotted(label),\n      .input-content.is-invalid ::slotted(.paper-input-label) {\n        color: var(--paper-input-container-invalid-color, var(--error-color));\n      }\n\n      .input-content.label-is-hidden ::slotted(label),\n      .input-content.label-is-hidden ::slotted(.paper-input-label) {\n        visibility: hidden;\n      }\n\n      .input-content ::slotted(input),\n      .input-content ::slotted(iron-input),\n      .input-content ::slotted(textarea),\n      .input-content ::slotted(iron-autogrow-textarea),\n      .input-content ::slotted(.paper-input-input) {\n        @apply --paper-input-container-shared-input-style;\n        /* The apply shim doesn't apply the nested color custom property,\n          so we have to re-apply it here. */\n        color: var(--paper-input-container-input-color, var(--primary-text-color));\n        @apply --paper-input-container-input;\n      }\n\n      .input-content ::slotted(input)::-webkit-outer-spin-button,\n      .input-content ::slotted(input)::-webkit-inner-spin-button {\n        @apply --paper-input-container-input-webkit-spinner;\n      }\n\n      .input-content.focused ::slotted(input),\n      .input-content.focused ::slotted(iron-input),\n      .input-content.focused ::slotted(textarea),\n      .input-content.focused ::slotted(iron-autogrow-textarea),\n      .input-content.focused ::slotted(.paper-input-input) {\n        @apply --paper-input-container-input-focus;\n      }\n\n      .input-content.is-invalid ::slotted(input),\n      .input-content.is-invalid ::slotted(iron-input),\n      .input-content.is-invalid ::slotted(textarea),\n      .input-content.is-invalid ::slotted(iron-autogrow-textarea),\n      .input-content.is-invalid ::slotted(.paper-input-input) {\n        @apply --paper-input-container-input-invalid;\n      }\n\n      .prefix ::slotted(*) {\n        display: inline-block;\n        @apply --paper-font-subhead;\n        @apply --layout-flex-none;\n        @apply --paper-input-prefix;\n      }\n\n      .suffix ::slotted(*) {\n        display: inline-block;\n        @apply --paper-font-subhead;\n        @apply --layout-flex-none;\n\n        @apply --paper-input-suffix;\n      }\n\n      /* Firefox sets a min-width on the input, which can cause layout issues */\n      .input-content ::slotted(input) {\n        min-width: 0;\n      }\n\n      .input-content ::slotted(textarea) {\n        resize: none;\n      }\n\n      .add-on-content {\n        position: relative;\n      }\n\n      .add-on-content.is-invalid ::slotted(*) {\n        color: var(--paper-input-container-invalid-color, var(--error-color));\n      }\n\n      .add-on-content.is-highlighted ::slotted(*) {\n        color: var(--paper-input-container-focus-color, var(--primary-color));\n      }\n    </style>\n\n    <div class=\"floated-label-placeholder\" aria-hidden=\"true\" hidden=\"[[noLabelFloat]]\">&nbsp;</div>\n\n    <div class=\"input-wrapper\">\n      <span class=\"prefix\"><slot name=\"prefix\"></slot></span>\n\n      <div class$=\"[[_computeInputContentClass(noLabelFloat,alwaysFloatLabel,focused,invalid,_inputHasContent)]]\" id=\"labelAndInputContainer\">\n        <slot name=\"label\"></slot>\n        <slot name=\"input\"></slot>\n      </div>\n\n      <span class=\"suffix\"><slot name=\"suffix\"></slot></span>\n    </div>\n\n    <div class$=\"[[_computeUnderlineClass(focused,invalid)]]\">\n      <div class=\"unfocused-line\"></div>\n      <div class=\"focused-line\"></div>\n    </div>\n\n    <div class$=\"[[_computeAddOnContentClass(focused,invalid)]]\">\n      <slot name=\"add-on\"></slot>\n    </div>\n`,is:\"paper-input-container\",properties:{noLabelFloat:{type:Boolean,value:!1},alwaysFloatLabel:{type:Boolean,value:!1},attrForValue:{type:String,value:\"bind-value\"},autoValidate:{type:Boolean,value:!1},invalid:{observer:\"_invalidChanged\",type:Boolean,value:!1},focused:{readOnly:!0,type:Boolean,value:!1,notify:!0},_addons:{type:Array},_inputHasContent:{type:Boolean,value:!1},_inputSelector:{type:String,value:\"input,iron-input,textarea,.paper-input-input\"},_boundOnFocus:{type:Function,value:function(){return this._onFocus.bind(this)}},_boundOnBlur:{type:Function,value:function(){return this._onBlur.bind(this)}},_boundOnInput:{type:Function,value:function(){return this._onInput.bind(this)}},_boundValueChanged:{type:Function,value:function(){return this._onValueChanged.bind(this)}}},listeners:{\"addon-attached\":\"_onAddonAttached\",\"iron-input-validate\":\"_onIronInputValidate\"},get _valueChangedEvent(){return this.attrForValue+\"-changed\"},get _propertyForValue(){return g(this.attrForValue)},get _inputElement(){return y(this).querySelector(this._inputSelector)},get _inputElementValue(){return this._inputElement[this._propertyForValue]||this._inputElement.value},ready:function(){this.__isFirstValueUpdate=!0,this._addons||(this._addons=[]),this.addEventListener(\"focus\",this._boundOnFocus,!0),this.addEventListener(\"blur\",this._boundOnBlur,!0)},attached:function(){this.attrForValue?this._inputElement.addEventListener(this._valueChangedEvent,this._boundValueChanged):this.addEventListener(\"input\",this._onInput),this._inputElementValue&&\"\"!=this._inputElementValue?this._handleValueAndAutoValidate(this._inputElement):this._handleValue(this._inputElement)},_onAddonAttached:function(e){this._addons||(this._addons=[]);var t=e.target;-1===this._addons.indexOf(t)&&(this._addons.push(t),this.isAttached&&this._handleValue(this._inputElement))},_onFocus:function(){this._setFocused(!0)},_onBlur:function(){this._setFocused(!1),this._handleValueAndAutoValidate(this._inputElement)},_onInput:function(e){this._handleValueAndAutoValidate(e.target)},_onValueChanged:function(e){var t=e.target;this.__isFirstValueUpdate&&(this.__isFirstValueUpdate=!1,void 0===t.value||\"\"===t.value)||this._handleValueAndAutoValidate(e.target)},_handleValue:function(e){var t=this._inputElementValue;t||0===t||\"number\"===e.type&&!e.checkValidity()?this._inputHasContent=!0:this._inputHasContent=!1,this.updateAddons({inputElement:e,value:t,invalid:this.invalid})},_handleValueAndAutoValidate:function(e){var t;this.autoValidate&&e&&(t=e.validate?e.validate(this._inputElementValue):e.checkValidity(),this.invalid=!t);this._handleValue(e)},_onIronInputValidate:function(e){this.invalid=this._inputElement.invalid},_invalidChanged:function(){this._addons&&this.updateAddons({invalid:this.invalid})},updateAddons:function(e){for(var t,i=0;t=this._addons[i];i++)t.update(e)},_computeInputContentClass:function(e,t,i,a,n){var r=\"input-content\";if(e)n&&(r+=\" label-is-hidden\"),a&&(r+=\" is-invalid\");else{var s=this.querySelector(\"label\");t||n?(r+=\" label-is-floating\",this.$.labelAndInputContainer.style.position=\"static\",a?r+=\" is-invalid\":i&&(r+=\" label-is-highlighted\")):(s&&(this.$.labelAndInputContainer.style.position=\"relative\"),a&&(r+=\" is-invalid\"))}return i&&(r+=\" focused\"),r},_computeUnderlineClass:function(e,t){var i=\"underline\";return t?i+=\" is-invalid\":e&&(i+=\" is-highlighted\"),i},_computeAddOnContentClass:function(e,t){var i=\"add-on-content\";return t?i+=\" is-invalid\":e&&(i+=\" is-highlighted\"),i}}),b({_template:f`\n    <style>\n      :host {\n        display: inline-block;\n        visibility: hidden;\n\n        color: var(--paper-input-container-invalid-color, var(--error-color));\n\n        @apply --paper-font-caption;\n        @apply --paper-input-error;\n        position: absolute;\n        left:0;\n        right:0;\n      }\n\n      :host([invalid]) {\n        visibility: visible;\n      }\n\n      #a11yWrapper {\n        visibility: hidden;\n      }\n\n      :host([invalid]) #a11yWrapper {\n        visibility: visible;\n      }\n    </style>\n\n    <!--\n    If the paper-input-error element is directly referenced by an\n    \\`aria-describedby\\` attribute, such as when used as a paper-input add-on,\n    then applying \\`visibility: hidden;\\` to the paper-input-error element itself\n    does not hide the error.\n\n    For more information, see:\n    https://www.w3.org/TR/accname-1.1/#mapping_additional_nd_description\n    -->\n    <div id=\"a11yWrapper\">\n      <slot></slot>\n    </div>\n`,is:\"paper-input-error\",behaviors:[oe],properties:{invalid:{readOnly:!0,reflectToAttribute:!0,type:Boolean}},update:function(e){this._setInvalid(e.invalid)}});const de={properties:{name:{type:String},value:{notify:!0,type:String},required:{type:Boolean,value:!1}},attached:function(){},detached:function(){}};var ce={\"U+0008\":\"backspace\",\"U+0009\":\"tab\",\"U+001B\":\"esc\",\"U+0020\":\"space\",\"U+007F\":\"del\"},ue={8:\"backspace\",9:\"tab\",13:\"enter\",27:\"esc\",33:\"pageup\",34:\"pagedown\",35:\"end\",36:\"home\",32:\"space\",37:\"left\",38:\"up\",39:\"right\",40:\"down\",46:\"del\",106:\"*\"},he={shift:\"shiftKey\",ctrl:\"ctrlKey\",alt:\"altKey\",meta:\"metaKey\"},pe=/[a-z0-9*]/,me=/U\\+/,ve=/^arrow/,be=/^space(bar)?/,fe=/^escape$/;function ye(e,t){var i=\"\";if(e){var a=e.toLowerCase();\" \"===a||be.test(a)?i=\"space\":fe.test(a)?i=\"esc\":1==a.length?t&&!pe.test(a)||(i=a):i=ve.test(a)?a.replace(\"arrow\",\"\"):\"multiply\"==a?\"*\":a}return i}function ge(e,t){return e.key?ye(e.key,t):e.detail&&e.detail.key?ye(e.detail.key,t):(i=e.keyIdentifier,a=\"\",i&&(i in ce?a=ce[i]:me.test(i)?(i=parseInt(i.replace(\"U+\",\"0x\"),16),a=String.fromCharCode(i).toLowerCase()):a=i.toLowerCase()),a||function(e){var t=\"\";return Number(e)&&(t=e>=65&&e<=90?String.fromCharCode(32+e):e>=112&&e<=123?\"f\"+(e-112+1):e>=48&&e<=57?String(e-48):e>=96&&e<=105?String(e-96):ue[e]),t}(e.keyCode)||\"\");var i,a}function _e(e,t){return ge(t,e.hasModifiers)===e.key&&(!e.hasModifiers||!!t.shiftKey==!!e.shiftKey&&!!t.ctrlKey==!!e.ctrlKey&&!!t.altKey==!!e.altKey&&!!t.metaKey==!!e.metaKey)}function ke(e){return e.trim().split(\" \").map((function(e){return function(e){return 1===e.length?{combo:e,key:e,event:\"keydown\"}:e.split(\"+\").reduce((function(e,t){var i=t.split(\":\"),a=i[0],n=i[1];return a in he?(e[he[a]]=!0,e.hasModifiers=!0):(e.key=a,e.event=n||\"keydown\"),e}),{combo:e.split(\":\").shift()})}(e)}))}const xe={properties:{keyEventTarget:{type:Object,value:function(){return this}},stopKeyboardEventPropagation:{type:Boolean,value:!1},_boundKeyHandlers:{type:Array,value:function(){return[]}},_imperativeKeyBindings:{type:Object,value:function(){return{}}}},observers:[\"_resetKeyEventListeners(keyEventTarget, _boundKeyHandlers)\"],keyBindings:{},registered:function(){this._prepKeyBindings()},attached:function(){this._listenKeyEventListeners()},detached:function(){this._unlistenKeyEventListeners()},addOwnKeyBinding:function(e,t){this._imperativeKeyBindings[e]=t,this._prepKeyBindings(),this._resetKeyEventListeners()},removeOwnKeyBindings:function(){this._imperativeKeyBindings={},this._prepKeyBindings(),this._resetKeyEventListeners()},keyboardEventMatchesKeys:function(e,t){for(var i=ke(t),a=0;a<i.length;++a)if(_e(i[a],e))return!0;return!1},_collectKeyBindings:function(){var e=this.behaviors.map((function(e){return e.keyBindings}));return-1===e.indexOf(this.keyBindings)&&e.push(this.keyBindings),e},_prepKeyBindings:function(){for(var e in this._keyBindings={},this._collectKeyBindings().forEach((function(e){for(var t in e)this._addKeyBinding(t,e[t])}),this),this._imperativeKeyBindings)this._addKeyBinding(e,this._imperativeKeyBindings[e]);for(var t in this._keyBindings)this._keyBindings[t].sort((function(e,t){var i=e[0].hasModifiers;return i===t[0].hasModifiers?0:i?-1:1}))},_addKeyBinding:function(e,t){ke(e).forEach((function(e){this._keyBindings[e.event]=this._keyBindings[e.event]||[],this._keyBindings[e.event].push([e,t])}),this)},_resetKeyEventListeners:function(){this._unlistenKeyEventListeners(),this.isAttached&&this._listenKeyEventListeners()},_listenKeyEventListeners:function(){this.keyEventTarget&&Object.keys(this._keyBindings).forEach((function(e){var t=this._keyBindings[e],i=this._onKeyBindingEvent.bind(this,t);this._boundKeyHandlers.push([this.keyEventTarget,e,i]),this.keyEventTarget.addEventListener(e,i)}),this)},_unlistenKeyEventListeners:function(){for(var e,t,i,a;this._boundKeyHandlers.length;)t=(e=this._boundKeyHandlers.pop())[0],i=e[1],a=e[2],t.removeEventListener(i,a)},_onKeyBindingEvent:function(e,t){if(this.stopKeyboardEventPropagation&&t.stopPropagation(),!t.defaultPrevented)for(var i=0;i<e.length;i++){var a=e[i][0],n=e[i][1];if(_e(a,t)&&(this._triggerKeyHandler(a,n,t),t.defaultPrevented))return}},_triggerKeyHandler:function(e,t,i){var a=Object.create(e);a.keyboardEvent=i;var n=new CustomEvent(e.event,{detail:a,cancelable:!0});this[t].call(this,n),n.defaultPrevented&&i.preventDefault()}},we={properties:{focused:{type:Boolean,value:!1,notify:!0,readOnly:!0,reflectToAttribute:!0},disabled:{type:Boolean,value:!1,notify:!0,observer:\"_disabledChanged\",reflectToAttribute:!0},_oldTabIndex:{type:String},_boundFocusBlurHandler:{type:Function,value:function(){return this._focusBlurHandler.bind(this)}}},observers:[\"_changedControlState(focused, disabled)\"],ready:function(){this.addEventListener(\"focus\",this._boundFocusBlurHandler,!0),this.addEventListener(\"blur\",this._boundFocusBlurHandler,!0)},_focusBlurHandler:function(e){this._setFocused(\"focus\"===e.type)},_disabledChanged:function(e,t){this.setAttribute(\"aria-disabled\",e?\"true\":\"false\"),this.style.pointerEvents=e?\"none\":\"\",e?(this._oldTabIndex=this.getAttribute(\"tabindex\"),this._setFocused(!1),this.tabIndex=-1,this.blur()):void 0!==this._oldTabIndex&&(null===this._oldTabIndex?this.removeAttribute(\"tabindex\"):this.setAttribute(\"tabindex\",this._oldTabIndex))},_changedControlState:function(){this._controlStateChanged&&this._controlStateChanged()}},$e={NextLabelID:1,NextAddonID:1,NextInputID:1},Ce={properties:{label:{type:String},value:{notify:!0,type:String},disabled:{type:Boolean,value:!1},invalid:{type:Boolean,value:!1,notify:!0},allowedPattern:{type:String},type:{type:String},list:{type:String},pattern:{type:String},required:{type:Boolean,value:!1},errorMessage:{type:String},charCounter:{type:Boolean,value:!1},noLabelFloat:{type:Boolean,value:!1},alwaysFloatLabel:{type:Boolean,value:!1},autoValidate:{type:Boolean,value:!1},validator:{type:String},autocomplete:{type:String,value:\"off\"},autofocus:{type:Boolean,observer:\"_autofocusChanged\"},inputmode:{type:String},minlength:{type:Number},maxlength:{type:Number},min:{type:String},max:{type:String},step:{type:String},name:{type:String},placeholder:{type:String,value:\"\"},readonly:{type:Boolean,value:!1},size:{type:Number},autocapitalize:{type:String,value:\"none\"},autocorrect:{type:String,value:\"off\"},autosave:{type:String},results:{type:Number},accept:{type:String},multiple:{type:Boolean},_ariaDescribedBy:{type:String,value:\"\"},_ariaLabelledBy:{type:String,value:\"\"},_inputId:{type:String,value:\"\"}},listeners:{\"addon-attached\":\"_onAddonAttached\"},keyBindings:{\"shift+tab:keydown\":\"_onShiftTabDown\"},hostAttributes:{tabindex:0},get inputElement(){return this.$||(this.$={}),this.$.input||(this._generateInputId(),this.$.input=this.$$(\"#\"+this._inputId)),this.$.input},get _focusableElement(){return this.inputElement},created:function(){this._typesThatHaveText=[\"date\",\"datetime\",\"datetime-local\",\"month\",\"time\",\"week\",\"file\"]},attached:function(){this._updateAriaLabelledBy(),!_&&this.inputElement&&-1!==this._typesThatHaveText.indexOf(this.inputElement.type)&&(this.alwaysFloatLabel=!0)},_appendStringWithSpace:function(e,t){return e=e?e+\" \"+t:t},_onAddonAttached:function(e){var t=y(e).rootTarget;if(t.id)this._ariaDescribedBy=this._appendStringWithSpace(this._ariaDescribedBy,t.id);else{var i=\"paper-input-add-on-\"+$e.NextAddonID++;t.id=i,this._ariaDescribedBy=this._appendStringWithSpace(this._ariaDescribedBy,i)}},validate:function(){return this.inputElement.validate()},_focusBlurHandler:function(e){we._focusBlurHandler.call(this,e),this.focused&&!this._shiftTabPressed&&this._focusableElement&&this._focusableElement.focus()},_onShiftTabDown:function(e){var t=this.getAttribute(\"tabindex\");this._shiftTabPressed=!0,this.setAttribute(\"tabindex\",\"-1\"),this.async((function(){this.setAttribute(\"tabindex\",t),this._shiftTabPressed=!1}),1)},_handleAutoValidate:function(){this.autoValidate&&this.validate()},updateValueAndPreserveCaret:function(e){try{var t=this.inputElement.selectionStart;this.value=e,this.inputElement.selectionStart=t,this.inputElement.selectionEnd=t}catch(t){this.value=e}},_computeAlwaysFloatLabel:function(e,t){return t||e},_updateAriaLabelledBy:function(){var e,t=y(this.root).querySelector(\"label\");t?(t.id?e=t.id:(e=\"paper-input-label-\"+$e.NextLabelID++,t.id=e),this._ariaLabelledBy=e):this._ariaLabelledBy=\"\"},_generateInputId:function(){this._inputId&&\"\"!==this._inputId||(this._inputId=\"input-\"+$e.NextInputID++)},_onChange:function(e){this.shadowRoot&&this.fire(e.type,{sourceEvent:e},{node:this,bubbles:e.bubbles,cancelable:e.cancelable})},_autofocusChanged:function(){if(this.autofocus&&this._focusableElement){var e=document.activeElement;e instanceof HTMLElement&&e!==document.body&&e!==document.documentElement||this._focusableElement.focus()}}};b({is:\"paper-input\",_template:f`\n    <style>\n      :host {\n        display: block;\n      }\n\n      :host([focused]) {\n        outline: none;\n      }\n\n      :host([hidden]) {\n        display: none !important;\n      }\n\n      input {\n        /* Firefox sets a min-width on the input, which can cause layout issues */\n        min-width: 0;\n      }\n\n      /* In 1.x, the <input> is distributed to paper-input-container, which styles it.\n      In 2.x the <iron-input> is distributed to paper-input-container, which styles\n      it, but in order for this to work correctly, we need to reset some\n      of the native input's properties to inherit (from the iron-input) */\n      iron-input > input {\n        @apply --paper-input-container-shared-input-style;\n        font-family: inherit;\n        font-weight: inherit;\n        font-size: inherit;\n        letter-spacing: inherit;\n        word-spacing: inherit;\n        line-height: inherit;\n        text-shadow: inherit;\n        color: inherit;\n        cursor: inherit;\n      }\n\n      input:disabled {\n        @apply --paper-input-container-input-disabled;\n      }\n\n      input::-webkit-outer-spin-button,\n      input::-webkit-inner-spin-button {\n        @apply --paper-input-container-input-webkit-spinner;\n      }\n\n      input::-webkit-clear-button {\n        @apply --paper-input-container-input-webkit-clear;\n      }\n\n      input::-webkit-calendar-picker-indicator {\n        @apply --paper-input-container-input-webkit-calendar-picker-indicator;\n      }\n\n      input::-webkit-input-placeholder {\n        color: var(--paper-input-container-color, var(--secondary-text-color));\n      }\n\n      input:-moz-placeholder {\n        color: var(--paper-input-container-color, var(--secondary-text-color));\n      }\n\n      input::-moz-placeholder {\n        color: var(--paper-input-container-color, var(--secondary-text-color));\n      }\n\n      input::-ms-clear {\n        @apply --paper-input-container-ms-clear;\n      }\n\n      input::-ms-reveal {\n        @apply --paper-input-container-ms-reveal;\n      }\n\n      input:-ms-input-placeholder {\n        color: var(--paper-input-container-color, var(--secondary-text-color));\n      }\n\n      label {\n        pointer-events: none;\n      }\n    </style>\n\n    <paper-input-container id=\"container\" no-label-float=\"[[noLabelFloat]]\" always-float-label=\"[[_computeAlwaysFloatLabel(alwaysFloatLabel,placeholder)]]\" auto-validate$=\"[[autoValidate]]\" disabled$=\"[[disabled]]\" invalid=\"[[invalid]]\">\n\n      <slot name=\"prefix\" slot=\"prefix\"></slot>\n\n      <label hidden$=\"[[!label]]\" aria-hidden=\"true\" for$=\"[[_inputId]]\" slot=\"label\">[[label]]</label>\n\n      <!-- Need to bind maxlength so that the paper-input-char-counter works correctly -->\n      <iron-input bind-value=\"{{value}}\" slot=\"input\" class=\"input-element\" id$=\"[[_inputId]]\" maxlength$=\"[[maxlength]]\" allowed-pattern=\"[[allowedPattern]]\" invalid=\"{{invalid}}\" validator=\"[[validator]]\">\n        <input aria-labelledby$=\"[[_ariaLabelledBy]]\" aria-describedby$=\"[[_ariaDescribedBy]]\" disabled$=\"[[disabled]]\" title$=\"[[title]]\" type$=\"[[type]]\" pattern$=\"[[pattern]]\" required$=\"[[required]]\" autocomplete$=\"[[autocomplete]]\" autofocus$=\"[[autofocus]]\" inputmode$=\"[[inputmode]]\" minlength$=\"[[minlength]]\" maxlength$=\"[[maxlength]]\" min$=\"[[min]]\" max$=\"[[max]]\" step$=\"[[step]]\" name$=\"[[name]]\" placeholder$=\"[[placeholder]]\" readonly$=\"[[readonly]]\" list$=\"[[list]]\" size$=\"[[size]]\" autocapitalize$=\"[[autocapitalize]]\" autocorrect$=\"[[autocorrect]]\" on-change=\"_onChange\" tabindex$=\"[[tabIndex]]\" autosave$=\"[[autosave]]\" results$=\"[[results]]\" accept$=\"[[accept]]\" multiple$=\"[[multiple]]\" role$=\"[[inputRole]]\" aria-haspopup$=\"[[inputAriaHaspopup]]\">\n      </iron-input>\n\n      <slot name=\"suffix\" slot=\"suffix\"></slot>\n\n      <template is=\"dom-if\" if=\"[[errorMessage]]\">\n        <paper-input-error aria-live=\"assertive\" slot=\"add-on\">[[errorMessage]]</paper-input-error>\n      </template>\n\n      <template is=\"dom-if\" if=\"[[charCounter]]\">\n        <paper-input-char-counter slot=\"add-on\"></paper-input-char-counter>\n      </template>\n\n    </paper-input-container>\n  `,behaviors:[[we,xe,Ce],de],properties:{value:{type:String},inputRole:{type:String,value:void 0},inputAriaHaspopup:{type:String,value:void 0}},get _focusableElement(){return this.inputElement._inputElement},listeners:{\"iron-input-ready\":\"_onIronInputReady\"},_onIronInputReady:function(){this.$.nativeInput||(this.$.nativeInput=this.$$(\"input\")),this.inputElement&&-1!==this._typesThatHaveText.indexOf(this.$.nativeInput.type)&&(this.alwaysFloatLabel=!0),this.inputElement.bindValue&&this.$.container._handleValueAndAutoValidate(this.inputElement)}});const Ee={properties:{value:{type:Number,value:0,notify:!0,reflectToAttribute:!0},min:{type:Number,value:0,notify:!0},max:{type:Number,value:100,notify:!0},step:{type:Number,value:1,notify:!0},ratio:{type:Number,value:0,readOnly:!0,notify:!0}},observers:[\"_update(value, min, max, step)\"],_calcRatio:function(e){return(this._clampValue(e)-this.min)/(this.max-this.min)},_clampValue:function(e){return Math.min(this.max,Math.max(this.min,this._calcStep(e)))},_calcStep:function(e){if(e=parseFloat(e),!this.step)return e;var t=Math.round((e-this.min)/this.step);return this.step<1?t/(1/this.step)+this.min:t*this.step+this.min},_validateValue:function(){var e=this._clampValue(this.value);return this.value=this.oldValue=isNaN(e)?this.oldValue:e,this.value!==e},_update:function(){this._validateValue(),this._setRatio(100*this._calcRatio(this.value))}};b({_template:f`\n    <style>\n      :host {\n        display: block;\n        width: 200px;\n        position: relative;\n        overflow: hidden;\n      }\n\n      :host([hidden]), [hidden] {\n        display: none !important;\n      }\n\n      #progressContainer {\n        @apply --paper-progress-container;\n        position: relative;\n      }\n\n      #progressContainer,\n      /* the stripe for the indeterminate animation*/\n      .indeterminate::after {\n        height: var(--paper-progress-height, 4px);\n      }\n\n      #primaryProgress,\n      #secondaryProgress,\n      .indeterminate::after {\n        @apply --layout-fit;\n      }\n\n      #progressContainer,\n      .indeterminate::after {\n        background: var(--paper-progress-container-color, var(--google-grey-300));\n      }\n\n      :host(.transiting) #primaryProgress,\n      :host(.transiting) #secondaryProgress {\n        -webkit-transition-property: -webkit-transform;\n        transition-property: transform;\n\n        /* Duration */\n        -webkit-transition-duration: var(--paper-progress-transition-duration, 0.08s);\n        transition-duration: var(--paper-progress-transition-duration, 0.08s);\n\n        /* Timing function */\n        -webkit-transition-timing-function: var(--paper-progress-transition-timing-function, ease);\n        transition-timing-function: var(--paper-progress-transition-timing-function, ease);\n\n        /* Delay */\n        -webkit-transition-delay: var(--paper-progress-transition-delay, 0s);\n        transition-delay: var(--paper-progress-transition-delay, 0s);\n      }\n\n      #primaryProgress,\n      #secondaryProgress {\n        @apply --layout-fit;\n        -webkit-transform-origin: left center;\n        transform-origin: left center;\n        -webkit-transform: scaleX(0);\n        transform: scaleX(0);\n        will-change: transform;\n      }\n\n      #primaryProgress {\n        background: var(--paper-progress-active-color, var(--google-green-500));\n      }\n\n      #secondaryProgress {\n        background: var(--paper-progress-secondary-color, var(--google-green-100));\n      }\n\n      :host([disabled]) #primaryProgress {\n        background: var(--paper-progress-disabled-active-color, var(--google-grey-500));\n      }\n\n      :host([disabled]) #secondaryProgress {\n        background: var(--paper-progress-disabled-secondary-color, var(--google-grey-300));\n      }\n\n      :host(:not([disabled])) #primaryProgress.indeterminate {\n        -webkit-transform-origin: right center;\n        transform-origin: right center;\n        -webkit-animation: indeterminate-bar var(--paper-progress-indeterminate-cycle-duration, 2s) linear infinite;\n        animation: indeterminate-bar var(--paper-progress-indeterminate-cycle-duration, 2s) linear infinite;\n      }\n\n      :host(:not([disabled])) #primaryProgress.indeterminate::after {\n        content: \"\";\n        -webkit-transform-origin: center center;\n        transform-origin: center center;\n\n        -webkit-animation: indeterminate-splitter var(--paper-progress-indeterminate-cycle-duration, 2s) linear infinite;\n        animation: indeterminate-splitter var(--paper-progress-indeterminate-cycle-duration, 2s) linear infinite;\n      }\n\n      @-webkit-keyframes indeterminate-bar {\n        0% {\n          -webkit-transform: scaleX(1) translateX(-100%);\n        }\n        50% {\n          -webkit-transform: scaleX(1) translateX(0%);\n        }\n        75% {\n          -webkit-transform: scaleX(1) translateX(0%);\n          -webkit-animation-timing-function: cubic-bezier(.28,.62,.37,.91);\n        }\n        100% {\n          -webkit-transform: scaleX(0) translateX(0%);\n        }\n      }\n\n      @-webkit-keyframes indeterminate-splitter {\n        0% {\n          -webkit-transform: scaleX(.75) translateX(-125%);\n        }\n        30% {\n          -webkit-transform: scaleX(.75) translateX(-125%);\n          -webkit-animation-timing-function: cubic-bezier(.42,0,.6,.8);\n        }\n        90% {\n          -webkit-transform: scaleX(.75) translateX(125%);\n        }\n        100% {\n          -webkit-transform: scaleX(.75) translateX(125%);\n        }\n      }\n\n      @keyframes indeterminate-bar {\n        0% {\n          transform: scaleX(1) translateX(-100%);\n        }\n        50% {\n          transform: scaleX(1) translateX(0%);\n        }\n        75% {\n          transform: scaleX(1) translateX(0%);\n          animation-timing-function: cubic-bezier(.28,.62,.37,.91);\n        }\n        100% {\n          transform: scaleX(0) translateX(0%);\n        }\n      }\n\n      @keyframes indeterminate-splitter {\n        0% {\n          transform: scaleX(.75) translateX(-125%);\n        }\n        30% {\n          transform: scaleX(.75) translateX(-125%);\n          animation-timing-function: cubic-bezier(.42,0,.6,.8);\n        }\n        90% {\n          transform: scaleX(.75) translateX(125%);\n        }\n        100% {\n          transform: scaleX(.75) translateX(125%);\n        }\n      }\n    </style>\n\n    <div id=\"progressContainer\">\n      <div id=\"secondaryProgress\" hidden\\$=\"[[_hideSecondaryProgress(secondaryRatio)]]\"></div>\n      <div id=\"primaryProgress\"></div>\n    </div>\n`,is:\"paper-progress\",behaviors:[Ee],properties:{secondaryProgress:{type:Number,value:0},secondaryRatio:{type:Number,value:0,readOnly:!0},indeterminate:{type:Boolean,value:!1,observer:\"_toggleIndeterminate\"},disabled:{type:Boolean,value:!1,reflectToAttribute:!0,observer:\"_disabledChanged\"}},observers:[\"_progressChanged(secondaryProgress, value, min, max, indeterminate)\"],hostAttributes:{role:\"progressbar\"},_toggleIndeterminate:function(e){this.toggleClass(\"indeterminate\",e,this.$.primaryProgress)},_transformProgress:function(e,t){var i=\"scaleX(\"+t/100+\")\";e.style.transform=e.style.webkitTransform=i},_mainRatioChanged:function(e){this._transformProgress(this.$.primaryProgress,e)},_progressChanged:function(e,t,i,a,n){e=this._clampValue(e),t=this._clampValue(t);var r=100*this._calcRatio(e),s=100*this._calcRatio(t);this._setSecondaryRatio(r),this._transformProgress(this.$.secondaryProgress,r),this._transformProgress(this.$.primaryProgress,s),this.secondaryProgress=e,n?this.removeAttribute(\"aria-valuenow\"):this.setAttribute(\"aria-valuenow\",t),this.setAttribute(\"aria-valuemin\",i),this.setAttribute(\"aria-valuemax\",a)},_disabledChanged:function(e){this.setAttribute(\"aria-disabled\",e?\"true\":\"false\")},_hideSecondaryProgress:function(e){return 0===e}});const Se={properties:{pressed:{type:Boolean,readOnly:!0,value:!1,reflectToAttribute:!0,observer:\"_pressedChanged\"},toggles:{type:Boolean,value:!1,reflectToAttribute:!0},active:{type:Boolean,value:!1,notify:!0,reflectToAttribute:!0},pointerDown:{type:Boolean,readOnly:!0,value:!1},receivedFocusFromKeyboard:{type:Boolean,readOnly:!0},ariaActiveAttribute:{type:String,value:\"aria-pressed\",observer:\"_ariaActiveAttributeChanged\"}},listeners:{down:\"_downHandler\",up:\"_upHandler\",tap:\"_tapHandler\"},observers:[\"_focusChanged(focused)\",\"_activeChanged(active, ariaActiveAttribute)\"],keyBindings:{\"enter:keydown\":\"_asyncClick\",\"space:keydown\":\"_spaceKeyDownHandler\",\"space:keyup\":\"_spaceKeyUpHandler\"},_mouseEventRe:/^mouse/,_tapHandler:function(){this.toggles?this._userActivate(!this.active):this.active=!1},_focusChanged:function(e){this._detectKeyboardFocus(e),e||this._setPressed(!1)},_detectKeyboardFocus:function(e){this._setReceivedFocusFromKeyboard(!this.pointerDown&&e)},_userActivate:function(e){this.active!==e&&(this.active=e,this.fire(\"change\"))},_downHandler:function(e){this._setPointerDown(!0),this._setPressed(!0),this._setReceivedFocusFromKeyboard(!1)},_upHandler:function(){this._setPointerDown(!1),this._setPressed(!1)},_spaceKeyDownHandler:function(e){var t=e.detail.keyboardEvent,i=y(t).localTarget;this.isLightDescendant(i)||(t.preventDefault(),t.stopImmediatePropagation(),this._setPressed(!0))},_spaceKeyUpHandler:function(e){var t=e.detail.keyboardEvent,i=y(t).localTarget;this.isLightDescendant(i)||(this.pressed&&this._asyncClick(),this._setPressed(!1))},_asyncClick:function(){this.async((function(){this.click()}),1)},_pressedChanged:function(e){this._changedButtonState()},_ariaActiveAttributeChanged:function(e,t){t&&t!=e&&this.hasAttribute(t)&&this.removeAttribute(t)},_activeChanged:function(e,t){this.toggles?this.setAttribute(this.ariaActiveAttribute,e?\"true\":\"false\"):this.removeAttribute(this.ariaActiveAttribute),this._changedButtonState()},_controlStateChanged:function(){this.disabled?this._setPressed(!1):this._changedButtonState()},_changedButtonState:function(){this._buttonStateChanged&&this._buttonStateChanged()}},Ae=[xe,Se];var Be={distance:function(e,t,i,a){var n=e-i,r=t-a;return Math.sqrt(n*n+r*r)},now:window.performance&&window.performance.now?window.performance.now.bind(window.performance):Date.now};function Ve(e){this.element=e,this.width=this.boundingRect.width,this.height=this.boundingRect.height,this.size=Math.max(this.width,this.height)}function Re(e){this.element=e,this.color=window.getComputedStyle(e).color,this.wave=document.createElement(\"div\"),this.waveContainer=document.createElement(\"div\"),this.wave.style.backgroundColor=this.color,this.wave.classList.add(\"wave\"),this.waveContainer.classList.add(\"wave-container\"),y(this.waveContainer).appendChild(this.wave),this.resetInteractionState()}Ve.prototype={get boundingRect(){return this.element.getBoundingClientRect()},furthestCornerDistanceFrom:function(e,t){var i=Be.distance(e,t,0,0),a=Be.distance(e,t,this.width,0),n=Be.distance(e,t,0,this.height),r=Be.distance(e,t,this.width,this.height);return Math.max(i,a,n,r)}},Re.MAX_RADIUS=300,Re.prototype={get recenters(){return this.element.recenters},get center(){return this.element.center},get mouseDownElapsed(){var e;return this.mouseDownStart?(e=Be.now()-this.mouseDownStart,this.mouseUpStart&&(e-=this.mouseUpElapsed),e):0},get mouseUpElapsed(){return this.mouseUpStart?Be.now()-this.mouseUpStart:0},get mouseDownElapsedSeconds(){return this.mouseDownElapsed/1e3},get mouseUpElapsedSeconds(){return this.mouseUpElapsed/1e3},get mouseInteractionSeconds(){return this.mouseDownElapsedSeconds+this.mouseUpElapsedSeconds},get initialOpacity(){return this.element.initialOpacity},get opacityDecayVelocity(){return this.element.opacityDecayVelocity},get radius(){var e=this.containerMetrics.width*this.containerMetrics.width,t=this.containerMetrics.height*this.containerMetrics.height,i=1.1*Math.min(Math.sqrt(e+t),Re.MAX_RADIUS)+5,a=1.1-i/Re.MAX_RADIUS*.2,n=this.mouseInteractionSeconds/a,r=i*(1-Math.pow(80,-n));return Math.abs(r)},get opacity(){return this.mouseUpStart?Math.max(0,this.initialOpacity-this.mouseUpElapsedSeconds*this.opacityDecayVelocity):this.initialOpacity},get outerOpacity(){var e=.3*this.mouseUpElapsedSeconds,t=this.opacity;return Math.max(0,Math.min(e,t))},get isOpacityFullyDecayed(){return this.opacity<.01&&this.radius>=Math.min(this.maxRadius,Re.MAX_RADIUS)},get isRestingAtMaxRadius(){return this.opacity>=this.initialOpacity&&this.radius>=Math.min(this.maxRadius,Re.MAX_RADIUS)},get isAnimationComplete(){return this.mouseUpStart?this.isOpacityFullyDecayed:this.isRestingAtMaxRadius},get translationFraction(){return Math.min(1,this.radius/this.containerMetrics.size*2/Math.sqrt(2))},get xNow(){return this.xEnd?this.xStart+this.translationFraction*(this.xEnd-this.xStart):this.xStart},get yNow(){return this.yEnd?this.yStart+this.translationFraction*(this.yEnd-this.yStart):this.yStart},get isMouseDown(){return this.mouseDownStart&&!this.mouseUpStart},resetInteractionState:function(){this.maxRadius=0,this.mouseDownStart=0,this.mouseUpStart=0,this.xStart=0,this.yStart=0,this.xEnd=0,this.yEnd=0,this.slideDistance=0,this.containerMetrics=new Ve(this.element)},draw:function(){var e,t,i;this.wave.style.opacity=this.opacity,e=this.radius/(this.containerMetrics.size/2),t=this.xNow-this.containerMetrics.width/2,i=this.yNow-this.containerMetrics.height/2,this.waveContainer.style.webkitTransform=\"translate(\"+t+\"px, \"+i+\"px)\",this.waveContainer.style.transform=\"translate3d(\"+t+\"px, \"+i+\"px, 0)\",this.wave.style.webkitTransform=\"scale(\"+e+\",\"+e+\")\",this.wave.style.transform=\"scale3d(\"+e+\",\"+e+\",1)\"},downAction:function(e){var t=this.containerMetrics.width/2,i=this.containerMetrics.height/2;this.resetInteractionState(),this.mouseDownStart=Be.now(),this.center?(this.xStart=t,this.yStart=i,this.slideDistance=Be.distance(this.xStart,this.yStart,this.xEnd,this.yEnd)):(this.xStart=e?e.detail.x-this.containerMetrics.boundingRect.left:this.containerMetrics.width/2,this.yStart=e?e.detail.y-this.containerMetrics.boundingRect.top:this.containerMetrics.height/2),this.recenters&&(this.xEnd=t,this.yEnd=i,this.slideDistance=Be.distance(this.xStart,this.yStart,this.xEnd,this.yEnd)),this.maxRadius=this.containerMetrics.furthestCornerDistanceFrom(this.xStart,this.yStart),this.waveContainer.style.top=(this.containerMetrics.height-this.containerMetrics.size)/2+\"px\",this.waveContainer.style.left=(this.containerMetrics.width-this.containerMetrics.size)/2+\"px\",this.waveContainer.style.width=this.containerMetrics.size+\"px\",this.waveContainer.style.height=this.containerMetrics.size+\"px\"},upAction:function(e){this.isMouseDown&&(this.mouseUpStart=Be.now())},remove:function(){y(y(this.waveContainer).parentNode).removeChild(this.waveContainer)}},b({_template:f`\n    <style>\n      :host {\n        display: block;\n        position: absolute;\n        border-radius: inherit;\n        overflow: hidden;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n\n        /* See PolymerElements/paper-behaviors/issues/34. On non-Chrome browsers,\n         * creating a node (with a position:absolute) in the middle of an event\n         * handler \"interrupts\" that event handler (which happens when the\n         * ripple is created on demand) */\n        pointer-events: none;\n      }\n\n      :host([animating]) {\n        /* This resolves a rendering issue in Chrome (as of 40) where the\n           ripple is not properly clipped by its parent (which may have\n           rounded corners). See: http://jsbin.com/temexa/4\n\n           Note: We only apply this style conditionally. Otherwise, the browser\n           will create a new compositing layer for every ripple element on the\n           page, and that would be bad. */\n        -webkit-transform: translate(0, 0);\n        transform: translate3d(0, 0, 0);\n      }\n\n      #background,\n      #waves,\n      .wave-container,\n      .wave {\n        pointer-events: none;\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n      }\n\n      #background,\n      .wave {\n        opacity: 0;\n      }\n\n      #waves,\n      .wave {\n        overflow: hidden;\n      }\n\n      .wave-container,\n      .wave {\n        border-radius: 50%;\n      }\n\n      :host(.circle) #background,\n      :host(.circle) #waves {\n        border-radius: 50%;\n      }\n\n      :host(.circle) .wave-container {\n        overflow: hidden;\n      }\n    </style>\n\n    <div id=\"background\"></div>\n    <div id=\"waves\"></div>\n`,is:\"paper-ripple\",behaviors:[xe],properties:{initialOpacity:{type:Number,value:.25},opacityDecayVelocity:{type:Number,value:.8},recenters:{type:Boolean,value:!1},center:{type:Boolean,value:!1},ripples:{type:Array,value:function(){return[]}},animating:{type:Boolean,readOnly:!0,reflectToAttribute:!0,value:!1},holdDown:{type:Boolean,value:!1,observer:\"_holdDownChanged\"},noink:{type:Boolean,value:!1},_animating:{type:Boolean},_boundAnimate:{type:Function,value:function(){return this.animate.bind(this)}}},get target(){return this.keyEventTarget},keyBindings:{\"enter:keydown\":\"_onEnterKeydown\",\"space:keydown\":\"_onSpaceKeydown\",\"space:keyup\":\"_onSpaceKeyup\"},attached:function(){11==y(this).parentNode.nodeType?this.keyEventTarget=y(this).getOwnerRoot().host:this.keyEventTarget=y(this).parentNode;var e=this.keyEventTarget;this.listen(e,\"up\",\"uiUpAction\"),this.listen(e,\"down\",\"uiDownAction\")},detached:function(){this.unlisten(this.keyEventTarget,\"up\",\"uiUpAction\"),this.unlisten(this.keyEventTarget,\"down\",\"uiDownAction\"),this.keyEventTarget=null},get shouldKeepAnimating(){for(var e=0;e<this.ripples.length;++e)if(!this.ripples[e].isAnimationComplete)return!0;return!1},simulatedRipple:function(){this.downAction(null),this.async((function(){this.upAction()}),1)},uiDownAction:function(e){this.noink||this.downAction(e)},downAction:function(e){this.holdDown&&this.ripples.length>0||(this.addRipple().downAction(e),this._animating||(this._animating=!0,this.animate()))},uiUpAction:function(e){this.noink||this.upAction(e)},upAction:function(e){this.holdDown||(this.ripples.forEach((function(t){t.upAction(e)})),this._animating=!0,this.animate())},onAnimationComplete:function(){this._animating=!1,this.$.background.style.backgroundColor=\"\",this.fire(\"transitionend\")},addRipple:function(){var e=new Re(this);return y(this.$.waves).appendChild(e.waveContainer),this.$.background.style.backgroundColor=e.color,this.ripples.push(e),this._setAnimating(!0),e},removeRipple:function(e){var t=this.ripples.indexOf(e);t<0||(this.ripples.splice(t,1),e.remove(),this.ripples.length||this._setAnimating(!1))},animate:function(){if(this._animating){var e,t;for(e=0;e<this.ripples.length;++e)(t=this.ripples[e]).draw(),this.$.background.style.opacity=t.outerOpacity,t.isOpacityFullyDecayed&&!t.isRestingAtMaxRadius&&this.removeRipple(t);this.shouldKeepAnimating||0!==this.ripples.length?window.requestAnimationFrame(this._boundAnimate):this.onAnimationComplete()}},animateRipple:function(){return this.animate()},_onEnterKeydown:function(){this.uiDownAction(),this.async(this.uiUpAction,1)},_onSpaceKeydown:function(){this.uiDownAction()},_onSpaceKeyup:function(){this.uiUpAction()},_holdDownChanged:function(e,t){void 0!==t&&(e?this.downAction():this.upAction())}});const Me={properties:{noink:{type:Boolean,observer:\"_noinkChanged\"},_rippleContainer:{type:Object}},_buttonStateChanged:function(){this.focused&&this.ensureRipple()},_downHandler:function(e){Se._downHandler.call(this,e),this.pressed&&this.ensureRipple(e)},ensureRipple:function(e){if(!this.hasRipple()){this._ripple=this._createRipple(),this._ripple.noink=this.noink;var t=this._rippleContainer||this.root;if(t&&y(t).appendChild(this._ripple),e){var i=y(this._rippleContainer||this),a=y(e).rootTarget;i.deepContains(a)&&this._ripple.uiDownAction(e)}}},getRipple:function(){return this.ensureRipple(),this._ripple},hasRipple:function(){return Boolean(this._ripple)},_createRipple:function(){return document.createElement(\"paper-ripple\")},_noinkChanged:function(e){this.hasRipple()&&(this._ripple.noink=e)}},Le={observers:[\"_focusedChanged(receivedFocusFromKeyboard)\"],_focusedChanged:function(e){e&&this.ensureRipple(),this.hasRipple()&&(this._ripple.holdDown=e)},_createRipple:function(){var e=Me._createRipple();return e.id=\"ink\",e.setAttribute(\"center\",\"\"),e.classList.add(\"circle\"),e}},Te=[Ae,we,Me,Le],Ke=f`\n  <style>\n    :host {\n      @apply --layout;\n      @apply --layout-justified;\n      @apply --layout-center;\n      width: 200px;\n      cursor: default;\n      -webkit-user-select: none;\n      -moz-user-select: none;\n      -ms-user-select: none;\n      user-select: none;\n      -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n      --paper-progress-active-color: var(--paper-slider-active-color, var(--google-blue-700));\n      --paper-progress-secondary-color: var(--paper-slider-secondary-color, var(--google-blue-300));\n      --paper-progress-disabled-active-color: var(--paper-slider-disabled-active-color, var(--paper-grey-400));\n      --paper-progress-disabled-secondary-color: var(--paper-slider-disabled-secondary-color, var(--paper-grey-400));\n      --calculated-paper-slider-height: var(--paper-slider-height, 2px);\n    }\n\n    /* focus shows the ripple */\n    :host(:focus) {\n      outline: none;\n    }\n\n    /**\n      * NOTE(keanulee): Though :host-context is not universally supported, some pages\n      * still rely on paper-slider being flipped when dir=\"rtl\" is set on body. For full\n      * compatibility, dir=\"rtl\" must be explicitly set on paper-slider.\n      */\n    :dir(rtl) #sliderContainer {\n      -webkit-transform: scaleX(-1);\n      transform: scaleX(-1);\n    }\n\n    /**\n      * NOTE(keanulee): This is separate from the rule above because :host-context may\n      * not be recognized.\n      */\n    :host([dir=\"rtl\"]) #sliderContainer {\n      -webkit-transform: scaleX(-1);\n      transform: scaleX(-1);\n    }\n\n    /**\n      * NOTE(keanulee): Needed to override the :host-context rule (where supported)\n      * to support LTR sliders in RTL pages.\n      */\n    :host([dir=\"ltr\"]) #sliderContainer {\n      -webkit-transform: scaleX(1);\n      transform: scaleX(1);\n    }\n\n    #sliderContainer {\n      position: relative;\n      width: 100%;\n      height: calc(30px + var(--calculated-paper-slider-height));\n      margin-left: calc(15px + var(--calculated-paper-slider-height)/2);\n      margin-right: calc(15px + var(--calculated-paper-slider-height)/2);\n    }\n\n    #sliderContainer:focus {\n      outline: 0;\n    }\n\n    #sliderContainer.editable {\n      margin-top: 12px;\n      margin-bottom: 12px;\n    }\n\n    .bar-container {\n      position: absolute;\n      top: 0;\n      bottom: 0;\n      left: 0;\n      right: 0;\n      overflow: hidden;\n    }\n\n    .ring > .bar-container {\n      left: calc(5px + var(--calculated-paper-slider-height)/2);\n      transition: left 0.18s ease;\n    }\n\n    .ring.expand.dragging > .bar-container {\n      transition: none;\n    }\n\n    .ring.expand:not(.pin) > .bar-container {\n      left: calc(8px + var(--calculated-paper-slider-height)/2);\n    }\n\n    #sliderBar {\n      padding: 15px 0;\n      width: 100%;\n      background-color: var(--paper-slider-bar-color, transparent);\n      --paper-progress-container-color: var(--paper-slider-container-color, var(--paper-grey-400));\n      --paper-progress-height: var(--calculated-paper-slider-height);\n    }\n\n    .slider-markers {\n      position: absolute;\n      /* slider-knob is 30px + the slider-height so that the markers should start at a offset of 15px*/\n      top: 15px;\n      height: var(--calculated-paper-slider-height);\n      left: 0;\n      right: -1px;\n      box-sizing: border-box;\n      pointer-events: none;\n      @apply --layout-horizontal;\n    }\n\n    .slider-marker {\n      @apply --layout-flex;\n    }\n    .slider-markers::after,\n    .slider-marker::after {\n      content: \"\";\n      display: block;\n      margin-left: -1px;\n      width: 2px;\n      height: var(--calculated-paper-slider-height);\n      border-radius: 50%;\n      background-color: var(--paper-slider-markers-color, #000);\n    }\n\n    .slider-knob {\n      position: absolute;\n      left: 0;\n      top: 0;\n      margin-left: calc(-15px - var(--calculated-paper-slider-height)/2);\n      width: calc(30px + var(--calculated-paper-slider-height));\n      height: calc(30px + var(--calculated-paper-slider-height));\n    }\n\n    .transiting > .slider-knob {\n      transition: left 0.08s ease;\n    }\n\n    .slider-knob:focus {\n      outline: none;\n    }\n\n    .slider-knob.dragging {\n      transition: none;\n    }\n\n    .snaps > .slider-knob.dragging {\n      transition: -webkit-transform 0.08s ease;\n      transition: transform 0.08s ease;\n    }\n\n    .slider-knob-inner {\n      margin: 10px;\n      width: calc(100% - 20px);\n      height: calc(100% - 20px);\n      background-color: var(--paper-slider-knob-color, var(--google-blue-700));\n      border: 2px solid var(--paper-slider-knob-color, var(--google-blue-700));\n      border-radius: 50%;\n\n      -moz-box-sizing: border-box;\n      box-sizing: border-box;\n\n      transition-property: -webkit-transform, background-color, border;\n      transition-property: transform, background-color, border;\n      transition-duration: 0.18s;\n      transition-timing-function: ease;\n    }\n\n    .expand:not(.pin) > .slider-knob > .slider-knob-inner {\n      -webkit-transform: scale(1.5);\n      transform: scale(1.5);\n    }\n\n    .ring > .slider-knob > .slider-knob-inner {\n      background-color: var(--paper-slider-knob-start-color, transparent);\n      border: 2px solid var(--paper-slider-knob-start-border-color, var(--paper-grey-400));\n    }\n\n    .slider-knob-inner::before {\n      background-color: var(--paper-slider-pin-color, var(--google-blue-700));\n    }\n\n    .pin > .slider-knob > .slider-knob-inner::before {\n      content: \"\";\n      position: absolute;\n      top: 0;\n      left: 50%;\n      margin-left: -13px;\n      width: 26px;\n      height: 26px;\n      border-radius: 50% 50% 50% 0;\n\n      -webkit-transform: rotate(-45deg) scale(0) translate(0);\n      transform: rotate(-45deg) scale(0) translate(0);\n    }\n\n    .slider-knob-inner::before,\n    .slider-knob-inner::after {\n      transition: -webkit-transform .18s ease, background-color .18s ease;\n      transition: transform .18s ease, background-color .18s ease;\n    }\n\n    .pin.ring > .slider-knob > .slider-knob-inner::before {\n      background-color: var(--paper-slider-pin-start-color, var(--paper-grey-400));\n    }\n\n    .pin.expand > .slider-knob > .slider-knob-inner::before {\n      -webkit-transform: rotate(-45deg) scale(1) translate(17px, -17px);\n      transform: rotate(-45deg) scale(1) translate(17px, -17px);\n    }\n\n    .pin > .slider-knob > .slider-knob-inner::after {\n      content: attr(value);\n      position: absolute;\n      top: 0;\n      left: 50%;\n      margin-left: -16px;\n      width: 32px;\n      height: 26px;\n      text-align: center;\n      color: var(--paper-slider-font-color, #fff);\n      font-size: 10px;\n\n      -webkit-transform: scale(0) translate(0);\n      transform: scale(0) translate(0);\n    }\n\n    .pin.expand > .slider-knob > .slider-knob-inner::after {\n      -webkit-transform: scale(1) translate(0, -17px);\n      transform: scale(1) translate(0, -17px);\n    }\n\n    /* paper-input */\n    .slider-input {\n      width: 50px;\n      overflow: hidden;\n      --paper-input-container-input: {\n        text-align: center;\n        @apply --paper-slider-input-container-input;\n      };\n      @apply --paper-slider-input;\n    }\n\n    /* disabled state */\n    #sliderContainer.disabled {\n      pointer-events: none;\n    }\n\n    .disabled > .slider-knob > .slider-knob-inner {\n      background-color: var(--paper-slider-disabled-knob-color, var(--paper-grey-400));\n      border: 2px solid var(--paper-slider-disabled-knob-color, var(--paper-grey-400));\n      -webkit-transform: scale3d(0.75, 0.75, 1);\n      transform: scale3d(0.75, 0.75, 1);\n    }\n\n    .disabled.ring > .slider-knob > .slider-knob-inner {\n      background-color: var(--paper-slider-knob-start-color, transparent);\n      border: 2px solid var(--paper-slider-knob-start-border-color, var(--paper-grey-400));\n    }\n\n    paper-ripple {\n      color: var(--paper-slider-knob-color, var(--google-blue-700));\n    }\n  </style>\n\n  <div id=\"sliderContainer\" class\\$=\"[[_getClassNames(disabled, pin, snaps, immediateValue, min, expand, dragging, transiting, editable)]]\">\n    <div class=\"bar-container\">\n      <paper-progress disabled\\$=\"[[disabled]]\" id=\"sliderBar\" aria-hidden=\"true\" min=\"[[min]]\" max=\"[[max]]\" step=\"[[step]]\" value=\"[[immediateValue]]\" secondary-progress=\"[[secondaryProgress]]\" on-down=\"_bardown\" on-up=\"_resetKnob\" on-track=\"_bartrack\" on-tap=\"_barclick\">\n      </paper-progress>\n    </div>\n\n    <template is=\"dom-if\" if=\"[[snaps]]\">\n      <div class=\"slider-markers\">\n        <template is=\"dom-repeat\" items=\"[[markers]]\">\n          <div class=\"slider-marker\"></div>\n        </template>\n      </div>\n    </template>\n\n    <div id=\"sliderKnob\" class=\"slider-knob\" on-down=\"_knobdown\" on-up=\"_resetKnob\" on-track=\"_onTrack\" on-transitionend=\"_knobTransitionEnd\">\n        <div class=\"slider-knob-inner\" value\\$=\"[[immediateValue]]\"></div>\n    </div>\n  </div>\n\n  <template is=\"dom-if\" if=\"[[editable]]\">\n    <paper-input id=\"input\" type=\"number\" step=\"[[step]]\" min=\"[[min]]\" max=\"[[max]]\" class=\"slider-input\" disabled\\$=\"[[disabled]]\" value=\"[[immediateValue]]\" on-change=\"_changeValue\" on-keydown=\"_inputKeyDown\" no-label-float>\n    </paper-input>\n  </template>\n`;Ke.setAttribute(\"strip-whitespace\",\"\"),b({_template:Ke,is:\"paper-slider\",behaviors:[xe,de,Te,Ee],properties:{value:{type:Number,value:0},snaps:{type:Boolean,value:!1,notify:!0},pin:{type:Boolean,value:!1,notify:!0},secondaryProgress:{type:Number,value:0,notify:!0,observer:\"_secondaryProgressChanged\"},editable:{type:Boolean,value:!1},immediateValue:{type:Number,value:0,readOnly:!0,notify:!0},maxMarkers:{type:Number,value:0,notify:!0},expand:{type:Boolean,value:!1,readOnly:!0},ignoreBarTouch:{type:Boolean,value:!1},dragging:{type:Boolean,value:!1,readOnly:!0,notify:!0},transiting:{type:Boolean,value:!1,readOnly:!0},markers:{type:Array,readOnly:!0,value:function(){return[]}}},observers:[\"_updateKnob(value, min, max, snaps, step)\",\"_valueChanged(value)\",\"_immediateValueChanged(immediateValue)\",\"_updateMarkers(maxMarkers, min, max, snaps)\"],hostAttributes:{role:\"slider\",tabindex:0},keyBindings:{left:\"_leftKey\",right:\"_rightKey\",\"down pagedown home\":\"_decrementKey\",\"up pageup end\":\"_incrementKey\"},ready:function(){this.ignoreBarTouch&&k(this.$.sliderBar,\"auto\")},increment:function(){this.value=this._clampValue(this.value+this.step)},decrement:function(){this.value=this._clampValue(this.value-this.step)},_updateKnob:function(e,t,i,a,n){this.setAttribute(\"aria-valuemin\",t),this.setAttribute(\"aria-valuemax\",i),this.setAttribute(\"aria-valuenow\",e),this._positionKnob(100*this._calcRatio(e))},_valueChanged:function(){this.fire(\"value-change\",{composed:!0})},_immediateValueChanged:function(){this.dragging?this.fire(\"immediate-value-change\",{composed:!0}):this.value=this.immediateValue},_secondaryProgressChanged:function(){this.secondaryProgress=this._clampValue(this.secondaryProgress)},_expandKnob:function(){this._setExpand(!0)},_resetKnob:function(){this.cancelDebouncer(\"expandKnob\"),this._setExpand(!1)},_positionKnob:function(e){this._setImmediateValue(this._calcStep(this._calcKnobPosition(e))),this._setRatio(100*this._calcRatio(this.immediateValue)),this.$.sliderKnob.style.left=this.ratio+\"%\",this.dragging&&(this._knobstartx=this.ratio*this._w/100,this.translate3d(0,0,0,this.$.sliderKnob))},_calcKnobPosition:function(e){return(this.max-this.min)*e/100+this.min},_onTrack:function(e){switch(e.stopPropagation(),e.detail.state){case\"start\":this._trackStart(e);break;case\"track\":this._trackX(e);break;case\"end\":this._trackEnd()}},_trackStart:function(e){this._setTransiting(!1),this._w=this.$.sliderBar.offsetWidth,this._x=this.ratio*this._w/100,this._startx=this._x,this._knobstartx=this._startx,this._minx=-this._startx,this._maxx=this._w-this._startx,this.$.sliderKnob.classList.add(\"dragging\"),this._setDragging(!0)},_trackX:function(e){this.dragging||this._trackStart(e);var t=this._isRTL?-1:1,i=Math.min(this._maxx,Math.max(this._minx,e.detail.dx*t));this._x=this._startx+i;var a=this._calcStep(this._calcKnobPosition(this._x/this._w*100));this._setImmediateValue(a);var n=this._calcRatio(this.immediateValue)*this._w-this._knobstartx;this.translate3d(n+\"px\",0,0,this.$.sliderKnob)},_trackEnd:function(){var e=this.$.sliderKnob.style;this.$.sliderKnob.classList.remove(\"dragging\"),this._setDragging(!1),this._resetKnob(),this.value=this.immediateValue,e.transform=e.webkitTransform=\"\",this.fire(\"change\",{composed:!0})},_knobdown:function(e){this._expandKnob(),e.preventDefault(),this.focus()},_bartrack:function(e){this._allowBarEvent(e)&&this._onTrack(e)},_barclick:function(e){this._w=this.$.sliderBar.offsetWidth;var t=this.$.sliderBar.getBoundingClientRect(),i=(e.detail.x-t.left)/this._w*100;this._isRTL&&(i=100-i);var a=this.ratio;this._setTransiting(!0),this._positionKnob(i),a===this.ratio&&this._setTransiting(!1),this.async((function(){this.fire(\"change\",{composed:!0})})),e.preventDefault(),this.focus()},_bardown:function(e){this._allowBarEvent(e)&&(this.debounce(\"expandKnob\",this._expandKnob,60),this._barclick(e))},_knobTransitionEnd:function(e){e.target===this.$.sliderKnob&&this._setTransiting(!1)},_updateMarkers:function(e,t,i,a){a||this._setMarkers([]);var n=Math.round((i-t)/this.step);n>e&&(n=e),(n<0||!isFinite(n))&&(n=0),this._setMarkers(new Array(n))},_mergeClasses:function(e){return Object.keys(e).filter((function(t){return e[t]})).join(\" \")},_getClassNames:function(){return this._mergeClasses({disabled:this.disabled,pin:this.pin,snaps:this.snaps,ring:this.immediateValue<=this.min,expand:this.expand,dragging:this.dragging,transiting:this.transiting,editable:this.editable})},_allowBarEvent:function(e){return!this.ignoreBarTouch||e.detail.sourceEvent instanceof MouseEvent},get _isRTL(){return void 0===this.__isRTL&&(this.__isRTL=\"rtl\"===window.getComputedStyle(this).direction),this.__isRTL},_leftKey:function(e){this._isRTL?this._incrementKey(e):this._decrementKey(e)},_rightKey:function(e){this._isRTL?this._decrementKey(e):this._incrementKey(e)},_incrementKey:function(e){this.disabled||(\"end\"===e.detail.key?this.value=this.max:this.increment(),this.fire(\"change\"),e.preventDefault())},_decrementKey:function(e){this.disabled||(\"home\"===e.detail.key?this.value=this.min:this.decrement(),this.fire(\"change\"),e.preventDefault())},_changeValue:function(e){this.value=e.target.value,this.fire(\"change\",{composed:!0})},_inputKeyDown:function(e){e.stopPropagation()},_createRipple:function(){return this._rippleContainer=this.$.sliderKnob,Le._createRipple.call(this)},_focusedChanged:function(e){e&&this.ensureRipple(),this.hasRipple()&&(this._ripple.style.display=e?\"\":\"none\",this._ripple.holdDown=e)}});const Pe=customElements.get(\"paper-slider\");let De;customElements.define(\"ha-slider\",class extends Pe{static get template(){if(!De){De=Pe.template.cloneNode(!0);De.content.querySelector(\"style\").appendChild(document.createTextNode('\\n          :host([dir=\"rtl\"]) #sliderContainer.pin.expand > .slider-knob > .slider-knob-inner::after {\\n            -webkit-transform: scale(1) translate(0, -17px) scaleX(-1) !important;\\n            transform: scale(1) translate(0, -17px) scaleX(-1) !important;\\n            }\\n\\n            .pin > .slider-knob > .slider-knob-inner {\\n              font-size:  var(--ha-slider-pin-font-size, 15px);\\n              line-height: normal;\\n              cursor: pointer;\\n            }\\n\\n            .disabled.ring > .slider-knob > .slider-knob-inner {\\n              background-color: var(--paper-slider-disabled-knob-color, var(--disabled-text-color));\\n              border: 2px solid var(--paper-slider-disabled-knob-color, var(--disabled-text-color));\\n            }\\n\\n            .pin > .slider-knob > .slider-knob-inner::before {\\n              top: unset;\\n              margin-left: unset;\\n\\n              bottom: calc(15px + var(--calculated-paper-slider-height)/2);\\n              left: 50%;\\n              width: 2.2em;\\n              height: 2.2em;\\n\\n              -webkit-transform-origin: left bottom;\\n              transform-origin: left bottom;\\n              -webkit-transform: rotate(-45deg) scale(0) translate(0);\\n              transform: rotate(-45deg) scale(0) translate(0);\\n            }\\n\\n            .pin.expand > .slider-knob > .slider-knob-inner::before {\\n              -webkit-transform: rotate(-45deg) scale(1) translate(7px, -7px);\\n              transform: rotate(-45deg) scale(1) translate(7px, -7px);\\n            }\\n\\n            .pin > .slider-knob > .slider-knob-inner::after {\\n              top: unset;\\n              font-size: unset;\\n\\n              bottom: calc(15px + var(--calculated-paper-slider-height)/2);\\n              left: 50%;\\n              margin-left: -1.1em;\\n              width: 2.2em;\\n              height: 2.1em;\\n\\n              -webkit-transform-origin: center bottom;\\n              transform-origin: center bottom;\\n              -webkit-transform: scale(0) translate(0);\\n              transform: scale(0) translate(0);\\n            }\\n\\n            .pin.expand > .slider-knob > .slider-knob-inner::after {\\n              -webkit-transform: scale(1) translate(0, -10px);\\n              transform: scale(1) translate(0, -10px);\\n            }\\n\\n            .slider-input {\\n              width: 54px;\\n            }\\n        '))}return De}_setImmediateValue(e){super._setImmediateValue(this.step>=1?Math.round(e):Math.round(100*e)/100)}_calcStep(e){if(!this.step)return parseFloat(e);const t=Math.round((e-this.min)/this.step),i=this.step.toString(),a=i.indexOf(\".\");if(-1!==a){const e=10**(i.length-a-1);return Math.round((t*this.step+this.min)*e)/e}return t*this.step+this.min}}),o([s(\"ha-form-integer\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[d({attribute:!1})],key:\"schema\",value:void 0},{kind:\"field\",decorators:[d({attribute:!1})],key:\"data\",value:void 0},{kind:\"field\",decorators:[d()],key:\"label\",value:void 0},{kind:\"field\",decorators:[d({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[c(\"ha-textfield ha-slider\")],key:\"_input\",value:void 0},{kind:\"field\",key:\"_lastValue\",value:void 0},{kind:\"method\",key:\"focus\",value:function(){this._input&&this._input.focus()}},{kind:\"method\",key:\"render\",value:function(){var e;return void 0!==this.schema.valueMin&&void 0!==this.schema.valueMax&&this.schema.valueMax-this.schema.valueMin<256?u`\n        <div>\n          ${this.label}\n          <div class=\"flex\">\n            ${this.schema.required?\"\":u`\n                  <ha-checkbox\n                    @change=${this._handleCheckboxChange}\n                    .checked=${void 0!==this.data}\n                    .disabled=${this.disabled}\n                  ></ha-checkbox>\n                `}\n            <ha-slider\n              pin\n              ignore-bar-touch\n              .value=${this._value}\n              .min=${this.schema.valueMin}\n              .max=${this.schema.valueMax}\n              .disabled=${this.disabled||void 0===this.data&&!this.schema.required}\n              @change=${this._valueChanged}\n            ></ha-slider>\n          </div>\n        </div>\n      `:u`\n      <ha-textfield\n        type=\"number\"\n        inputMode=\"numeric\"\n        .label=${this.label}\n        .value=${void 0!==this.data?this.data:\"\"}\n        .disabled=${this.disabled}\n        .required=${this.schema.required}\n        .autoValidate=${this.schema.required}\n        .suffix=${null===(e=this.schema.description)||void 0===e?void 0:e.suffix}\n        .validationMessage=${this.schema.required?\"Required\":void 0}\n        @input=${this._valueChanged}\n      ></ha-textfield>\n    `}},{kind:\"method\",key:\"updated\",value:function(e){e.has(\"schema\")&&this.toggleAttribute(\"own-margin\",!(\"valueMin\"in this.schema&&\"valueMax\"in this.schema||!this.schema.required))}},{kind:\"get\",key:\"_value\",value:function(){var e;return void 0!==this.data?this.data:this.schema.required?(null===(e=this.schema.description)||void 0===e?void 0:e.suggested_value)||this.schema.default||this.schema.valueMin||0:this.schema.valueMin||0}},{kind:\"method\",key:\"_handleCheckboxChange\",value:function(e){let t;if(e.target.checked)for(const e of[this._lastValue,null===(i=this.schema.description)||void 0===i?void 0:i.suggested_value,this.schema.default,0]){var i;if(void 0!==e){t=e;break}}else this._lastValue=this.data;h(this,\"value-changed\",{value:t})}},{kind:\"method\",key:\"_valueChanged\",value:function(e){const t=e.target,i=t.value;let a;if(\"\"!==i&&(a=parseInt(String(i))),this.data!==a)h(this,\"value-changed\",{value:a});else{const e=void 0===a?\"\":String(a);t.value!==e&&(t.value=e)}}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return p`\n      :host([own-margin]) {\n        margin-bottom: 5px;\n      }\n      .flex {\n        display: flex;\n      }\n      ha-slider {\n        flex: 1;\n      }\n      ha-textfield {\n        display: block;\n      }\n    `}}]}}),l);let Ie=class extends U{};Ie.styles=[z],Ie=r([s(\"mwc-checkbox\")],Ie);class Fe extends W{constructor(){super(...arguments),this.left=!1,this.graphic=\"control\"}render(){const e={\"mdc-deprecated-list-item__graphic\":this.left,\"mdc-deprecated-list-item__meta\":!this.left},t=this.renderText(),i=this.graphic&&\"control\"!==this.graphic&&!this.left?this.renderGraphic():u``,a=this.hasMeta&&this.left?this.renderMeta():u``,n=this.renderRipple();return u`\n      ${n}\n      ${i}\n      ${this.left?\"\":t}\n      <span class=${x(e)}>\n        <mwc-checkbox\n            reducedTouchTarget\n            tabindex=${this.tabindex}\n            .checked=${this.selected}\n            ?disabled=${this.disabled}\n            @change=${this.onChange}>\n        </mwc-checkbox>\n      </span>\n      ${this.left?t:\"\"}\n      ${a}`}async onChange(e){const t=e.target;this.selected===t.checked||(this._skipPropRequest=!0,this.selected=t.checked,await this.updateComplete,this._skipPropRequest=!1)}}r([c(\"slot\")],Fe.prototype,\"slotElement\",void 0),r([c(\"mwc-checkbox\")],Fe.prototype,\"checkboxElement\",void 0),r([d({type:Boolean})],Fe.prototype,\"left\",void 0),r([d({type:String,reflect:!0})],Fe.prototype,\"graphic\",void 0);const Oe=p`:host(:not([twoline])){height:56px}:host(:not([left])) .mdc-deprecated-list-item__meta{height:40px;width:40px}`;function qe(e){return Array.isArray(e)?e[0]:e}function Ne(e){return Array.isArray(e)?e[1]||e[0]:e}o([s(\"ha-check-list-item\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",static:!0,key:\"styles\",value:()=>[G,Oe,p`\n      :host {\n        --mdc-theme-secondary: var(--primary-color);\n      }\n    `]}]}}),Fe);o([s(\"ha-form-multi_select\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[d()],key:\"schema\",value:void 0},{kind:\"field\",decorators:[d()],key:\"data\",value:void 0},{kind:\"field\",decorators:[d()],key:\"label\",value:void 0},{kind:\"field\",decorators:[d({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[w()],key:\"_opened\",value:()=>!1},{kind:\"field\",decorators:[c(\"ha-button-menu\")],key:\"_input\",value:void 0},{kind:\"method\",key:\"focus\",value:function(){this._input&&this._input.focus()}},{kind:\"method\",key:\"render\",value:function(){const e=Array.isArray(this.schema.options)?this.schema.options:Object.entries(this.schema.options),t=this.data||[];return e.length<6?u`<div>\n        ${this.label}${e.map((e=>{const i=qe(e);return u`\n            <ha-formfield .label=${Ne(e)}>\n              <ha-checkbox\n                .checked=${t.includes(i)}\n                .value=${i}\n                .disabled=${this.disabled}\n                @change=${this._valueChanged}\n              ></ha-checkbox>\n            </ha-formfield>\n          `}))}\n      </div> `:u`\n      <ha-button-menu\n        .disabled=${this.disabled}\n        fixed\n        corner=\"BOTTOM_START\"\n        @opened=${this._handleOpen}\n        @closed=${this._handleClose}\n        multi\n        activatable\n      >\n        <ha-textfield\n          slot=\"trigger\"\n          .label=${this.label}\n          .value=${t.map((e=>this.schema.options[e]||e)).join(\", \")}\n          .disabled=${this.disabled}\n          tabindex=\"-1\"\n        ></ha-textfield>\n        <ha-svg-icon\n          slot=\"trigger\"\n          .path=${this._opened?$:C}\n        ></ha-svg-icon>\n        ${e.map((e=>{const i=qe(e),a=t.includes(i);return u`<ha-check-list-item\n            left\n            .selected=${a}\n            .activated=${a}\n            @request-selected=${this._selectedChanged}\n            .value=${i}\n            .disabled=${this.disabled}\n          >\n            ${Ne(e)}\n          </ha-check-list-item>`}))}\n      </ha-button-menu>\n    `}},{kind:\"method\",key:\"firstUpdated\",value:function(){this.updateComplete.then((()=>{var e;const{formElement:t,mdcRoot:i}=(null===(e=this.shadowRoot)||void 0===e?void 0:e.querySelector(\"ha-textfield\"))||{};t&&(t.style.textOverflow=\"ellipsis\"),i&&(i.style.cursor=\"pointer\")}))}},{kind:\"method\",key:\"updated\",value:function(e){e.has(\"schema\")&&this.toggleAttribute(\"own-margin\",Object.keys(this.schema.options).length>=6&&!!this.schema.required)}},{kind:\"method\",key:\"_selectedChanged\",value:function(e){e.stopPropagation(),\"property\"!==e.detail.source&&this._handleValueChanged(e.target.value,e.detail.selected)}},{kind:\"method\",key:\"_valueChanged\",value:function(e){const{value:t,checked:i}=e.target;this._handleValueChanged(t,i)}},{kind:\"method\",key:\"_handleValueChanged\",value:function(e,t){let i;if(t)if(this.data){if(this.data.includes(e))return;i=[...this.data,e]}else i=[e];else{if(!this.data.includes(e))return;i=this.data.filter((t=>t!==e))}h(this,\"value-changed\",{value:i})}},{kind:\"method\",key:\"_handleOpen\",value:function(e){e.stopPropagation(),this._opened=!0,this.toggleAttribute(\"opened\",!0)}},{kind:\"method\",key:\"_handleClose\",value:function(e){e.stopPropagation(),this._opened=!1,this.toggleAttribute(\"opened\",!1)}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return p`\n      :host([own-margin]) {\n        margin-bottom: 5px;\n      }\n      ha-button-menu {\n        display: block;\n        cursor: pointer;\n      }\n      ha-formfield {\n        display: block;\n        padding-right: 16px;\n        padding-inline-end: 16px;\n        padding-inline-start: initial;\n        direction: var(--direction);\n      }\n      ha-textfield {\n        display: block;\n        pointer-events: none;\n      }\n      ha-svg-icon {\n        color: var(--input-dropdown-icon-color);\n        position: absolute;\n        right: 1em;\n        top: 1em;\n        cursor: pointer;\n        inset-inline-end: 1em;\n        inset-inline-start: initial;\n        direction: var(--direction);\n      }\n      :host([opened]) ha-svg-icon {\n        color: var(--primary-color);\n      }\n      :host([opened]) ha-button-menu {\n        --mdc-text-field-idle-line-color: var(--input-hover-line-color);\n        --mdc-text-field-label-ink-color: var(--primary-color);\n      }\n    `}}]}}),l);const He=(e,t,i=!1)=>{let a;const n=(...n)=>{const r=i&&!a;clearTimeout(a),a=window.setTimeout((()=>{a=void 0,i||e(...n)}),t),r&&e(...n)};return n.cancel=()=>{clearTimeout(a)},n};o([s(\"ha-select\")],(function(e,t){class i extends t{constructor(...t){super(...t),e(this)}}return{F:i,d:[{kind:\"field\",decorators:[d({type:Boolean})],key:\"icon\",value:void 0},{kind:\"method\",key:\"renderLeadingIcon\",value:function(){return this.icon?u`<span class=\"mdc-select__icon\"\n      ><slot name=\"icon\"></slot\n    ></span>`:E}},{kind:\"method\",key:\"connectedCallback\",value:function(){m(v(i.prototype),\"connectedCallback\",this).call(this),window.addEventListener(\"translations-updated\",this._translationsUpdated)}},{kind:\"method\",key:\"disconnectedCallback\",value:function(){m(v(i.prototype),\"disconnectedCallback\",this).call(this),window.removeEventListener(\"translations-updated\",this._translationsUpdated)}},{kind:\"field\",key:\"_translationsUpdated\",value(){return He((async()=>{await S(),this.layoutOptions()}),500)}},{kind:\"field\",static:!0,key:\"styles\",value:()=>[J,p`\n      .mdc-select:not(.mdc-select--disabled) .mdc-select__icon {\n        color: var(--secondary-text-color);\n      }\n      .mdc-select__anchor {\n        width: var(--ha-select-min-width, 200px);\n      }\n      .mdc-select--filled .mdc-floating-label {\n        inset-inline-start: 12px;\n        inset-inline-end: initial;\n        direction: var(--direction);\n      }\n      .mdc-select .mdc-select__anchor {\n        padding-inline-start: 12px;\n        padding-inline-end: 0px;\n        direction: var(--direction);\n      }\n      .mdc-select__anchor .mdc-floating-label--float-above {\n        transform-origin: var(--float-start);\n      }\n    `]}]}}),Y),o([s(\"ha-input-helper-text\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"method\",key:\"render\",value:function(){return u`<slot></slot>`}},{kind:\"field\",static:!0,key:\"styles\",value:()=>p`\n    :host {\n      display: block;\n      color: var(--mdc-text-field-label-ink-color, rgba(0, 0, 0, 0.6));\n      font-size: 0.75rem;\n      padding-left: 16px;\n      padding-right: 16px;\n    }\n  `}]}}),l),o([s(\"ha-base-time-input\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[d()],key:\"label\",value:void 0},{kind:\"field\",decorators:[d()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[d({type:Boolean})],key:\"autoValidate\",value:()=>!1},{kind:\"field\",decorators:[d({type:Boolean})],key:\"required\",value:void 0},{kind:\"field\",decorators:[d({type:Number})],key:\"format\",value:()=>12},{kind:\"field\",decorators:[d({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[d({type:Number})],key:\"days\",value:()=>0},{kind:\"field\",decorators:[d({type:Number})],key:\"hours\",value:()=>0},{kind:\"field\",decorators:[d({type:Number})],key:\"minutes\",value:()=>0},{kind:\"field\",decorators:[d({type:Number})],key:\"seconds\",value:()=>0},{kind:\"field\",decorators:[d({type:Number})],key:\"milliseconds\",value:()=>0},{kind:\"field\",decorators:[d()],key:\"dayLabel\",value:()=>\"\"},{kind:\"field\",decorators:[d()],key:\"hourLabel\",value:()=>\"\"},{kind:\"field\",decorators:[d()],key:\"minLabel\",value:()=>\"\"},{kind:\"field\",decorators:[d()],key:\"secLabel\",value:()=>\"\"},{kind:\"field\",decorators:[d()],key:\"millisecLabel\",value:()=>\"\"},{kind:\"field\",decorators:[d({type:Boolean})],key:\"enableSecond\",value:()=>!1},{kind:\"field\",decorators:[d({type:Boolean})],key:\"enableMillisecond\",value:()=>!1},{kind:\"field\",decorators:[d({type:Boolean})],key:\"enableDay\",value:()=>!1},{kind:\"field\",decorators:[d({type:Boolean})],key:\"noHoursLimit\",value:()=>!1},{kind:\"field\",decorators:[d()],key:\"amPm\",value:()=>\"AM\"},{kind:\"field\",decorators:[d()],key:\"value\",value:void 0},{kind:\"method\",key:\"render\",value:function(){return u`\n      ${this.label?u`<label>${this.label}${this.required?\" *\":\"\"}</label>`:\"\"}\n      <div class=\"time-input-wrap\">\n        ${this.enableDay?u`\n              <ha-textfield\n                id=\"day\"\n                type=\"number\"\n                inputmode=\"numeric\"\n                .value=${this.days}\n                .label=${this.dayLabel}\n                name=\"days\"\n                @input=${this._valueChanged}\n                @focus=${this._onFocus}\n                no-spinner\n                .required=${this.required}\n                .autoValidate=${this.autoValidate}\n                min=\"0\"\n                .disabled=${this.disabled}\n                suffix=\":\"\n                class=\"hasSuffix\"\n              >\n              </ha-textfield>\n            `:\"\"}\n\n        <ha-textfield\n          id=\"hour\"\n          type=\"number\"\n          inputmode=\"numeric\"\n          .value=${this.hours}\n          .label=${this.hourLabel}\n          name=\"hours\"\n          @input=${this._valueChanged}\n          @focus=${this._onFocus}\n          no-spinner\n          .required=${this.required}\n          .autoValidate=${this.autoValidate}\n          maxlength=\"2\"\n          .max=${this._hourMax}\n          min=\"0\"\n          .disabled=${this.disabled}\n          suffix=\":\"\n          class=\"hasSuffix\"\n        >\n        </ha-textfield>\n        <ha-textfield\n          id=\"min\"\n          type=\"number\"\n          inputmode=\"numeric\"\n          .value=${this._formatValue(this.minutes)}\n          .label=${this.minLabel}\n          @input=${this._valueChanged}\n          @focus=${this._onFocus}\n          name=\"minutes\"\n          no-spinner\n          .required=${this.required}\n          .autoValidate=${this.autoValidate}\n          maxlength=\"2\"\n          max=\"59\"\n          min=\"0\"\n          .disabled=${this.disabled}\n          .suffix=${this.enableSecond?\":\":\"\"}\n          class=${this.enableSecond?\"has-suffix\":\"\"}\n        >\n        </ha-textfield>\n        ${this.enableSecond?u`<ha-textfield\n              id=\"sec\"\n              type=\"number\"\n              inputmode=\"numeric\"\n              .value=${this._formatValue(this.seconds)}\n              .label=${this.secLabel}\n              @input=${this._valueChanged}\n              @focus=${this._onFocus}\n              name=\"seconds\"\n              no-spinner\n              .required=${this.required}\n              .autoValidate=${this.autoValidate}\n              maxlength=\"2\"\n              max=\"59\"\n              min=\"0\"\n              .disabled=${this.disabled}\n              .suffix=${this.enableMillisecond?\":\":\"\"}\n              class=${this.enableMillisecond?\"has-suffix\":\"\"}\n            >\n            </ha-textfield>`:\"\"}\n        ${this.enableMillisecond?u`<ha-textfield\n              id=\"millisec\"\n              type=\"number\"\n              .value=${this._formatValue(this.milliseconds,3)}\n              .label=${this.millisecLabel}\n              @input=${this._valueChanged}\n              @focus=${this._onFocus}\n              name=\"milliseconds\"\n              no-spinner\n              .required=${this.required}\n              .autoValidate=${this.autoValidate}\n              maxlength=\"3\"\n              max=\"999\"\n              min=\"0\"\n              .disabled=${this.disabled}\n            >\n            </ha-textfield>`:\"\"}\n        ${24===this.format?\"\":u`<ha-select\n              .required=${this.required}\n              .value=${this.amPm}\n              .disabled=${this.disabled}\n              name=\"amPm\"\n              naturalMenuWidth\n              fixedMenuPosition\n              @selected=${this._valueChanged}\n              @closed=${Q}\n            >\n              <mwc-list-item value=\"AM\">AM</mwc-list-item>\n              <mwc-list-item value=\"PM\">PM</mwc-list-item>\n            </ha-select>`}\n      </div>\n      ${this.helper?u`<ha-input-helper-text>${this.helper}</ha-input-helper-text>`:\"\"}\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(e){this[e.target.name]=\"amPm\"===e.target.name?e.target.value:Number(e.target.value);const t={hours:this.hours,minutes:this.minutes,seconds:this.seconds,milliseconds:this.milliseconds};12===this.format&&(t.amPm=this.amPm),h(this,\"value-changed\",{value:t})}},{kind:\"method\",key:\"_onFocus\",value:function(e){e.target.select()}},{kind:\"method\",key:\"_formatValue\",value:function(e,t=2){return e.toString().padStart(t,\"0\")}},{kind:\"get\",key:\"_hourMax\",value:function(){return this.noHoursLimit?null:12===this.format?12:23}},{kind:\"field\",static:!0,key:\"styles\",value:()=>p`\n    :host {\n      display: block;\n    }\n    .time-input-wrap {\n      display: flex;\n      border-radius: var(--mdc-shape-small, 4px) var(--mdc-shape-small, 4px) 0 0;\n      overflow: hidden;\n      position: relative;\n      direction: ltr;\n    }\n    ha-textfield {\n      width: 40px;\n      text-align: center;\n      --mdc-shape-small: 0;\n      --text-field-appearance: none;\n      --text-field-padding: 0 4px;\n      --text-field-suffix-padding-left: 2px;\n      --text-field-suffix-padding-right: 0;\n      --text-field-text-align: center;\n    }\n    ha-textfield.hasSuffix {\n      --text-field-padding: 0 0 0 4px;\n    }\n    ha-textfield:first-child {\n      --text-field-border-top-left-radius: var(--mdc-shape-medium);\n    }\n    ha-textfield:last-child {\n      --text-field-border-top-right-radius: var(--mdc-shape-medium);\n    }\n    ha-select {\n      --mdc-shape-small: 0;\n      width: 85px;\n    }\n    label {\n      -moz-osx-font-smoothing: grayscale;\n      -webkit-font-smoothing: antialiased;\n      font-family: var(\n        --mdc-typography-body2-font-family,\n        var(--mdc-typography-font-family, Roboto, sans-serif)\n      );\n      font-size: var(--mdc-typography-body2-font-size, 0.875rem);\n      line-height: var(--mdc-typography-body2-line-height, 1.25rem);\n      font-weight: var(--mdc-typography-body2-font-weight, 400);\n      letter-spacing: var(\n        --mdc-typography-body2-letter-spacing,\n        0.0178571429em\n      );\n      text-decoration: var(--mdc-typography-body2-text-decoration, inherit);\n      text-transform: var(--mdc-typography-body2-text-transform, inherit);\n      color: var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87));\n      padding-left: 4px;\n    }\n  `}]}}),l),o([s(\"ha-duration-input\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[d({attribute:!1})],key:\"data\",value:void 0},{kind:\"field\",decorators:[d()],key:\"label\",value:void 0},{kind:\"field\",decorators:[d()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[d({type:Boolean})],key:\"required\",value:void 0},{kind:\"field\",decorators:[d({type:Boolean})],key:\"enableMillisecond\",value:void 0},{kind:\"field\",decorators:[d({type:Boolean})],key:\"enableDay\",value:void 0},{kind:\"field\",decorators:[d({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[c(\"paper-time-input\",!0)],key:\"_input\",value:void 0},{kind:\"method\",key:\"focus\",value:function(){this._input&&this._input.focus()}},{kind:\"method\",key:\"render\",value:function(){return u`\n      <ha-base-time-input\n        .label=${this.label}\n        .helper=${this.helper}\n        .required=${this.required}\n        .autoValidate=${this.required}\n        .disabled=${this.disabled}\n        errorMessage=\"Required\"\n        enableSecond\n        .enableMillisecond=${this.enableMillisecond}\n        .enableDay=${this.enableDay}\n        format=\"24\"\n        .days=${this._days}\n        .hours=${this._hours}\n        .minutes=${this._minutes}\n        .seconds=${this._seconds}\n        .milliseconds=${this._milliseconds}\n        @value-changed=${this._durationChanged}\n        noHoursLimit\n        dayLabel=\"dd\"\n        hourLabel=\"hh\"\n        minLabel=\"mm\"\n        secLabel=\"ss\"\n        millisecLabel=\"ms\"\n      ></ha-base-time-input>\n    `}},{kind:\"get\",key:\"_days\",value:function(){var e;return null!==(e=this.data)&&void 0!==e&&e.days?Number(this.data.days):0}},{kind:\"get\",key:\"_hours\",value:function(){var e;return null!==(e=this.data)&&void 0!==e&&e.hours?Number(this.data.hours):0}},{kind:\"get\",key:\"_minutes\",value:function(){var e;return null!==(e=this.data)&&void 0!==e&&e.minutes?Number(this.data.minutes):0}},{kind:\"get\",key:\"_seconds\",value:function(){var e;return null!==(e=this.data)&&void 0!==e&&e.seconds?Number(this.data.seconds):0}},{kind:\"get\",key:\"_milliseconds\",value:function(){var e;return null!==(e=this.data)&&void 0!==e&&e.milliseconds?Number(this.data.milliseconds):0}},{kind:\"method\",key:\"_durationChanged\",value:function(e){e.stopPropagation();const t={...e.detail.value};var i;(this.enableMillisecond||t.milliseconds?t.milliseconds>999&&(t.seconds+=Math.floor(t.milliseconds/1e3),t.milliseconds%=1e3):delete t.milliseconds,t.seconds>59&&(t.minutes+=Math.floor(t.seconds/60),t.seconds%=60),t.minutes>59&&(t.hours+=Math.floor(t.minutes/60),t.minutes%=60),this.enableDay&&t.hours>24)&&(t.days=(null!==(i=t.days)&&void 0!==i?i:0)+Math.floor(t.hours/24),t.hours%=24);h(this,\"value-changed\",{value:t})}}]}}),l),o([s(\"ha-form-positive_time_period_dict\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[d()],key:\"schema\",value:void 0},{kind:\"field\",decorators:[d()],key:\"data\",value:void 0},{kind:\"field\",decorators:[d()],key:\"label\",value:void 0},{kind:\"field\",decorators:[d({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[c(\"ha-time-input\",!0)],key:\"_input\",value:void 0},{kind:\"method\",key:\"focus\",value:function(){this._input&&this._input.focus()}},{kind:\"method\",key:\"render\",value:function(){return u`\n      <ha-duration-input\n        .label=${this.label}\n        .required=${this.schema.required}\n        .data=${this.data}\n        .disabled=${this.disabled}\n      ></ha-duration-input>\n    `}}]}}),l),o([s(\"ha-chip-set\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"method\",key:\"render\",value:function(){return u`\n      <div class=\"mdc-chip-set\">\n        <slot></slot>\n      </div>\n    `}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return p`\n      ${A(X)}\n\n      slot::slotted(ha-chip) {\n        margin: 4px 4px 4px 0;\n      }\n    `}}]}}),l);const ze=Symbol(\"selection controller\");class Ue{constructor(){this.selected=null,this.ordered=null,this.set=new Set}}class Xe{constructor(e){this.sets={},this.focusedSet=null,this.mouseIsDown=!1,this.updating=!1,e.addEventListener(\"keydown\",(e=>{this.keyDownHandler(e)})),e.addEventListener(\"mousedown\",(()=>{this.mousedownHandler()})),e.addEventListener(\"mouseup\",(()=>{this.mouseupHandler()}))}static getController(e){const t=!(\"global\"in e)||\"global\"in e&&e.global?document:e.getRootNode();let i=t[ze];return void 0===i&&(i=new Xe(t),t[ze]=i),i}keyDownHandler(e){const t=e.target;\"checked\"in t&&this.has(t)&&(\"ArrowRight\"==e.key||\"ArrowDown\"==e.key?this.selectNext(t):\"ArrowLeft\"!=e.key&&\"ArrowUp\"!=e.key||this.selectPrevious(t))}mousedownHandler(){this.mouseIsDown=!0}mouseupHandler(){this.mouseIsDown=!1}has(e){return this.getSet(e.name).set.has(e)}selectPrevious(e){const t=this.getOrdered(e),i=t.indexOf(e),a=t[i-1]||t[t.length-1];return this.select(a),a}selectNext(e){const t=this.getOrdered(e),i=t.indexOf(e),a=t[i+1]||t[0];return this.select(a),a}select(e){e.click()}focus(e){if(this.mouseIsDown)return;const t=this.getSet(e.name),i=this.focusedSet;this.focusedSet=t,i!=t&&t.selected&&t.selected!=e&&t.selected.focus()}isAnySelected(e){const t=this.getSet(e.name);for(const e of t.set)if(e.checked)return!0;return!1}getOrdered(e){const t=this.getSet(e.name);return t.ordered||(t.ordered=Array.from(t.set),t.ordered.sort(((e,t)=>e.compareDocumentPosition(t)==Node.DOCUMENT_POSITION_PRECEDING?1:0))),t.ordered}getSet(e){return this.sets[e]||(this.sets[e]=new Ue),this.sets[e]}register(e){const t=e.name||e.getAttribute(\"name\")||\"\",i=this.getSet(t);i.set.add(e),i.ordered=null}unregister(e){const t=this.getSet(e.name);t.set.delete(e),t.ordered=null,t.selected==e&&(t.selected=null)}update(e){if(this.updating)return;this.updating=!0;const t=this.getSet(e.name);if(e.checked){for(const i of t.set)i!=e&&(i.checked=!1);t.selected=e}if(this.isAnySelected(e))for(const e of t.set){if(void 0===e.formElementTabIndex)break;e.formElementTabIndex=e.checked?0:-1}this.updating=!1}}var je={NATIVE_CONTROL_SELECTOR:\".mdc-radio__native-control\"},We={DISABLED:\"mdc-radio--disabled\",ROOT:\"mdc-radio\"},Ge=function(e){function t(i){return e.call(this,V(V({},t.defaultAdapter),i))||this}return B(t,e),Object.defineProperty(t,\"cssClasses\",{get:function(){return We},enumerable:!1,configurable:!0}),Object.defineProperty(t,\"strings\",{get:function(){return je},enumerable:!1,configurable:!0}),Object.defineProperty(t,\"defaultAdapter\",{get:function(){return{addClass:function(){},removeClass:function(){},setNativeControlDisabled:function(){}}},enumerable:!1,configurable:!0}),t.prototype.setDisabled=function(e){var i=t.cssClasses.DISABLED;this.adapter.setNativeControlDisabled(e),e?this.adapter.addClass(i):this.adapter.removeClass(i)},t}(R);class Ye extends j{constructor(){super(...arguments),this._checked=!1,this.useStateLayerCustomProperties=!1,this.global=!1,this.disabled=!1,this.value=\"on\",this.name=\"\",this.reducedTouchTarget=!1,this.mdcFoundationClass=Ge,this.formElementTabIndex=0,this.focused=!1,this.shouldRenderRipple=!1,this.rippleElement=null,this.rippleHandlers=new K((()=>(this.shouldRenderRipple=!0,this.ripple.then((e=>{this.rippleElement=e})),this.ripple)))}get checked(){return this._checked}set checked(e){var t,i;const a=this._checked;e!==a&&(this._checked=e,this.formElement&&(this.formElement.checked=e),null===(t=this._selectionController)||void 0===t||t.update(this),!1===e&&(null===(i=this.formElement)||void 0===i||i.blur()),this.requestUpdate(\"checked\",a),this.dispatchEvent(new Event(\"checked\",{bubbles:!0,composed:!0})))}_handleUpdatedValue(e){this.formElement.value=e}renderRipple(){return this.shouldRenderRipple?u`<mwc-ripple unbounded accent\n        .internalUseStateLayerCustomProperties=\"${this.useStateLayerCustomProperties}\"\n        .disabled=\"${this.disabled}\"></mwc-ripple>`:\"\"}get isRippleActive(){var e;return(null===(e=this.rippleElement)||void 0===e?void 0:e.isActive)||!1}connectedCallback(){super.connectedCallback(),this._selectionController=Xe.getController(this),this._selectionController.register(this),this._selectionController.update(this)}disconnectedCallback(){this._selectionController.unregister(this),this._selectionController=void 0}focus(){this.formElement.focus()}createAdapter(){return Object.assign(Object.assign({},P(this.mdcRoot)),{setNativeControlDisabled:e=>{this.formElement.disabled=e}})}handleFocus(){this.focused=!0,this.handleRippleFocus()}handleClick(){this.formElement.focus()}handleBlur(){this.focused=!1,this.formElement.blur(),this.rippleHandlers.endFocus()}setFormData(e){this.name&&this.checked&&e.append(this.name,this.value)}render(){const e={\"mdc-radio--touch\":!this.reducedTouchTarget,\"mdc-ripple-upgraded--background-focused\":this.focused,\"mdc-radio--disabled\":this.disabled};return u`\n      <div class=\"mdc-radio ${x(e)}\">\n        <input\n          tabindex=\"${this.formElementTabIndex}\"\n          class=\"mdc-radio__native-control\"\n          type=\"radio\"\n          name=\"${this.name}\"\n          aria-label=\"${D(this.ariaLabel)}\"\n          aria-labelledby=\"${D(this.ariaLabelledBy)}\"\n          .checked=\"${this.checked}\"\n          .value=\"${this.value}\"\n          ?disabled=\"${this.disabled}\"\n          @change=\"${this.changeHandler}\"\n          @focus=\"${this.handleFocus}\"\n          @click=\"${this.handleClick}\"\n          @blur=\"${this.handleBlur}\"\n          @mousedown=\"${this.handleRippleMouseDown}\"\n          @mouseenter=\"${this.handleRippleMouseEnter}\"\n          @mouseleave=\"${this.handleRippleMouseLeave}\"\n          @touchstart=\"${this.handleRippleTouchStart}\"\n          @touchend=\"${this.handleRippleDeactivate}\"\n          @touchcancel=\"${this.handleRippleDeactivate}\">\n        <div class=\"mdc-radio__background\">\n          <div class=\"mdc-radio__outer-circle\"></div>\n          <div class=\"mdc-radio__inner-circle\"></div>\n        </div>\n        ${this.renderRipple()}\n      </div>`}handleRippleMouseDown(e){const t=()=>{window.removeEventListener(\"mouseup\",t),this.handleRippleDeactivate()};window.addEventListener(\"mouseup\",t),this.rippleHandlers.startPress(e)}handleRippleTouchStart(e){this.rippleHandlers.startPress(e)}handleRippleDeactivate(){this.rippleHandlers.endPress()}handleRippleMouseEnter(){this.rippleHandlers.startHover()}handleRippleMouseLeave(){this.rippleHandlers.endHover()}handleRippleFocus(){this.rippleHandlers.startFocus()}changeHandler(){this.checked=this.formElement.checked}}r([c(\".mdc-radio\")],Ye.prototype,\"mdcRoot\",void 0),r([c(\"input\")],Ye.prototype,\"formElement\",void 0),r([w()],Ye.prototype,\"useStateLayerCustomProperties\",void 0),r([d({type:Boolean})],Ye.prototype,\"global\",void 0),r([d({type:Boolean,reflect:!0})],Ye.prototype,\"checked\",null),r([d({type:Boolean}),Z((function(e){this.mdcFoundation.setDisabled(e)}))],Ye.prototype,\"disabled\",void 0),r([d({type:String}),Z((function(e){this._handleUpdatedValue(e)}))],Ye.prototype,\"value\",void 0),r([d({type:String})],Ye.prototype,\"name\",void 0),r([d({type:Boolean})],Ye.prototype,\"reducedTouchTarget\",void 0),r([d({type:Number})],Ye.prototype,\"formElementTabIndex\",void 0),r([w()],Ye.prototype,\"focused\",void 0),r([w()],Ye.prototype,\"shouldRenderRipple\",void 0),r([M(\"mwc-ripple\")],Ye.prototype,\"ripple\",void 0),r([L,d({attribute:\"aria-label\"})],Ye.prototype,\"ariaLabel\",void 0),r([L,d({attribute:\"aria-labelledby\"})],Ye.prototype,\"ariaLabelledBy\",void 0),r([T({passive:!0})],Ye.prototype,\"handleRippleTouchStart\",null);const Je=p`.mdc-touch-target-wrapper{display:inline}.mdc-radio{padding:calc((40px - 20px) / 2)}.mdc-radio .mdc-radio__native-control:enabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:rgba(0, 0, 0, 0.54)}.mdc-radio .mdc-radio__native-control:enabled:checked+.mdc-radio__background .mdc-radio__outer-circle{border-color:#018786;border-color:var(--mdc-theme-secondary, #018786)}.mdc-radio .mdc-radio__native-control:enabled+.mdc-radio__background .mdc-radio__inner-circle{border-color:#018786;border-color:var(--mdc-theme-secondary, #018786)}.mdc-radio [aria-disabled=true] .mdc-radio__native-control:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio .mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:rgba(0, 0, 0, 0.38)}.mdc-radio [aria-disabled=true] .mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__outer-circle{border-color:rgba(0, 0, 0, 0.38)}.mdc-radio [aria-disabled=true] .mdc-radio__native-control+.mdc-radio__background .mdc-radio__inner-circle,.mdc-radio .mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__inner-circle{border-color:rgba(0, 0, 0, 0.38)}.mdc-radio .mdc-radio__background::before{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}.mdc-radio .mdc-radio__background::before{top:calc(-1 * (40px - 20px) / 2);left:calc(-1 * (40px - 20px) / 2);width:40px;height:40px}.mdc-radio .mdc-radio__native-control{top:calc((40px - 40px) / 2);right:calc((40px - 40px) / 2);left:calc((40px - 40px) / 2);width:40px;height:40px}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-radio [aria-disabled=true] .mdc-radio__native-control:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio .mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:GrayText}.mdc-radio [aria-disabled=true] .mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__outer-circle{border-color:GrayText}.mdc-radio [aria-disabled=true] .mdc-radio__native-control+.mdc-radio__background .mdc-radio__inner-circle,.mdc-radio .mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__inner-circle{border-color:GrayText}}.mdc-radio{display:inline-block;position:relative;flex:0 0 auto;box-sizing:content-box;width:20px;height:20px;cursor:pointer;will-change:opacity,transform,border-color,color}.mdc-radio__background{display:inline-block;position:relative;box-sizing:border-box;width:20px;height:20px}.mdc-radio__background::before{position:absolute;transform:scale(0, 0);border-radius:50%;opacity:0;pointer-events:none;content:\"\";transition:opacity 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-radio__outer-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;border-width:2px;border-style:solid;border-radius:50%;transition:border-color 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-radio__inner-circle{position:absolute;top:0;left:0;box-sizing:border-box;width:100%;height:100%;transform:scale(0, 0);border-width:10px;border-style:solid;border-radius:50%;transition:transform 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1),border-color 120ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-radio__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit;z-index:1}.mdc-radio--touch{margin-top:4px;margin-bottom:4px;margin-right:4px;margin-left:4px}.mdc-radio--touch .mdc-radio__native-control{top:calc((40px - 48px) / 2);right:calc((40px - 48px) / 2);left:calc((40px - 48px) / 2);width:48px;height:48px}.mdc-radio__native-control:checked+.mdc-radio__background,.mdc-radio__native-control:disabled+.mdc-radio__background{transition:opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__outer-circle{transition:border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__inner-circle,.mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__inner-circle{transition:transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1),border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-radio--disabled{cursor:default;pointer-events:none}.mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__inner-circle{transform:scale(0.5);transition:transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1),border-color 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-radio__native-control:disabled+.mdc-radio__background,[aria-disabled=true] .mdc-radio__native-control+.mdc-radio__background{cursor:default}.mdc-radio__native-control:focus+.mdc-radio__background::before{transform:scale(1);opacity:.12;transition:opacity 120ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 120ms 0ms cubic-bezier(0, 0, 0.2, 1)}:host{display:inline-block;outline:none}.mdc-radio{vertical-align:bottom}.mdc-radio .mdc-radio__native-control:enabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-unchecked-color, rgba(0, 0, 0, 0.54))}.mdc-radio [aria-disabled=true] .mdc-radio__native-control:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio .mdc-radio__native-control:disabled:not(:checked)+.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-disabled-color, rgba(0, 0, 0, 0.38))}.mdc-radio [aria-disabled=true] .mdc-radio__native-control:checked+.mdc-radio__background .mdc-radio__outer-circle,.mdc-radio .mdc-radio__native-control:disabled:checked+.mdc-radio__background .mdc-radio__outer-circle{border-color:var(--mdc-radio-disabled-color, rgba(0, 0, 0, 0.38))}.mdc-radio [aria-disabled=true] .mdc-radio__native-control+.mdc-radio__background .mdc-radio__inner-circle,.mdc-radio .mdc-radio__native-control:disabled+.mdc-radio__background .mdc-radio__inner-circle{border-color:var(--mdc-radio-disabled-color, rgba(0, 0, 0, 0.38))}`;o([s(\"ha-radio\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",static:!0,key:\"styles\",value:()=>[Je,p`\n      :host {\n        --mdc-theme-secondary: var(--primary-color);\n      }\n    `]}]}}),Ye),o([s(\"ha-selector-select\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[d({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[d({attribute:!1})],key:\"selector\",value:void 0},{kind:\"field\",decorators:[d()],key:\"value\",value:void 0},{kind:\"field\",decorators:[d()],key:\"label\",value:void 0},{kind:\"field\",decorators:[d()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[d({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[d({type:Boolean})],key:\"required\",value:()=>!0},{kind:\"field\",decorators:[c(\"ha-combo-box\",!0)],key:\"comboBox\",value:void 0},{kind:\"field\",key:\"_filter\",value:()=>\"\"},{kind:\"method\",key:\"render\",value:function(){const e=this.selector.select.options.map((e=>\"object\"==typeof e?e:{value:e,label:e}));if(!this.selector.select.custom_value&&\"list\"===this._mode)return!this.selector.select.multiple||this.required?u`\n          <div>\n            ${this.label}\n            ${e.map((e=>u`\n                <ha-formfield .label=${e.label}>\n                  <ha-radio\n                    .checked=${e.value===this.value}\n                    .value=${e.value}\n                    .disabled=${this.disabled}\n                    @change=${this._valueChanged}\n                  ></ha-radio>\n                </ha-formfield>\n              `))}\n          </div>\n          ${this._renderHelper()}\n        `:u`\n        <div>\n          ${this.label}${e.map((e=>{var t;return u`\n              <ha-formfield .label=${e.label}>\n                <ha-checkbox\n                  .checked=${null===(t=this.value)||void 0===t?void 0:t.includes(e.value)}\n                  .value=${e.value}\n                  .disabled=${this.disabled}\n                  @change=${this._checkboxChanged}\n                ></ha-checkbox>\n              </ha-formfield>\n            `}))}\n        </div>\n        ${this._renderHelper()}\n      `;if(this.selector.select.multiple){const t=this.value&&\"\"!==this.value?this.value:[];return u`\n        <ha-chip-set>\n          ${null==t?void 0:t.map(((t,i)=>{var a;return u`\n                <ha-chip hasTrailingIcon>\n                  ${(null===(a=e.find((e=>e.value===t)))||void 0===a?void 0:a.label)||t}\n                  <ha-svg-icon\n                    slot=\"trailing-icon\"\n                    .path=${I}\n                    .idx=${i}\n                    @click=${this._removeItem}\n                  ></ha-svg-icon>\n                </ha-chip>\n              `}))}\n        </ha-chip-set>\n\n        <ha-combo-box\n          item-value-path=\"value\"\n          item-label-path=\"label\"\n          .hass=${this.hass}\n          .label=${this.label}\n          .helper=${this.helper}\n          .disabled=${this.disabled}\n          .required=${this.required&&!t.length}\n          .value=${this._filter}\n          .items=${e.filter((e=>{var t;return!(null!==(t=this.value)&&void 0!==t&&t.includes(e.value))}))}\n          @filter-changed=${this._filterChanged}\n          @value-changed=${this._comboBoxValueChanged}\n        ></ha-combo-box>\n      `}return this.selector.select.custom_value?(void 0===this.value||e.find((e=>e.value===this.value))||e.unshift({value:this.value,label:this.value}),u`\n        <ha-combo-box\n          item-value-path=\"value\"\n          item-label-path=\"label\"\n          .hass=${this.hass}\n          .label=${this.label}\n          .helper=${this.helper}\n          .disabled=${this.disabled}\n          .required=${this.required}\n          .items=${e}\n          .value=${this.value}\n          @filter-changed=${this._filterChanged}\n          @value-changed=${this._comboBoxValueChanged}\n        ></ha-combo-box>\n      `):u`\n      <ha-select\n        fixedMenuPosition\n        naturalMenuWidth\n        .label=${this.label}\n        .value=${this.value}\n        .helper=${this.helper}\n        .disabled=${this.disabled}\n        @closed=${Q}\n        @selected=${this._valueChanged}\n      >\n        ${e.map((e=>u`\n            <mwc-list-item .value=${e.value}>${e.label}</mwc-list-item>\n          `))}\n      </ha-select>\n    `}},{kind:\"method\",key:\"_renderHelper\",value:function(){return this.helper?u`<ha-input-helper-text>${this.helper}</ha-input-helper-text>`:\"\"}},{kind:\"get\",key:\"_mode\",value:function(){return this.selector.select.mode||(this.selector.select.options.length<6?\"list\":\"dropdown\")}},{kind:\"method\",key:\"_valueChanged\",value:function(e){var t;e.stopPropagation();const i=(null===(t=e.detail)||void 0===t?void 0:t.value)||e.target.value;!this.disabled&&i&&h(this,\"value-changed\",{value:i})}},{kind:\"method\",key:\"_checkboxChanged\",value:function(e){if(e.stopPropagation(),this.disabled)return;let t;const i=e.target.value;if(e.target.checked)if(this.value){if(this.value.includes(i))return;t=[...this.value,i]}else t=[i];else{var a;if(null===(a=this.value)||void 0===a||!a.includes(i))return;t=this.value.filter((e=>e!==i))}h(this,\"value-changed\",{value:t})}},{kind:\"method\",key:\"_removeItem\",value:async function(e){const t=[...this.value];t.splice(e.target.idx,1),h(this,\"value-changed\",{value:t}),await this.updateComplete,this._filterChanged()}},{kind:\"method\",key:\"_comboBoxValueChanged\",value:function(e){var t;e.stopPropagation();const i=e.detail.value;if(this.disabled||\"\"===i)return;if(!this.selector.select.multiple)return void h(this,\"value-changed\",{value:i});if(void 0!==i&&null!==(t=this.value)&&void 0!==t&&t.includes(i))return;setTimeout((()=>{this._filterChanged(),this.comboBox.setInputValue(\"\")}),0);const a=this.value&&\"\"!==this.value?this.value:[];h(this,\"value-changed\",{value:[...a,i]})}},{kind:\"method\",key:\"_filterChanged\",value:function(e){var t;this._filter=(null==e?void 0:e.detail.value)||\"\";const i=null===(t=this.comboBox.items)||void 0===t?void 0:t.filter((e=>{var t,i;if(this.selector.select.multiple&&null!==(t=this.value)&&void 0!==t&&t.includes(e.value))return!1;return(e.label||e.value).toLowerCase().includes(null===(i=this._filter)||void 0===i?void 0:i.toLowerCase())}));this._filter&&this.selector.select.custom_value&&(null==i||i.unshift({label:this._filter,value:this._filter})),this.comboBox.filteredItems=i}},{kind:\"field\",static:!0,key:\"styles\",value:()=>p`\n    ha-select,\n    mwc-formfield,\n    ha-formfield {\n      display: block;\n    }\n  `}]}}),l),o([s(\"ha-form-select\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[d({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[d({attribute:!1})],key:\"schema\",value:void 0},{kind:\"field\",decorators:[d()],key:\"data\",value:void 0},{kind:\"field\",decorators:[d()],key:\"label\",value:void 0},{kind:\"field\",decorators:[d({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",key:\"_selectSchema\",value:()=>F((e=>({select:{options:e.map((e=>({value:e[0],label:e[1]})))}})))},{kind:\"method\",key:\"render\",value:function(){return u`\n      <ha-selector-select\n        .hass=${this.hass}\n        .schema=${this.schema}\n        .value=${this.data}\n        .label=${this.label}\n        .disabled=${this.disabled}\n        .required=${this.schema.required}\n        .selector=${this._selectSchema(this.schema.options)}\n        @value-changed=${this._valueChanged}\n      ></ha-selector-select>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(e){e.stopPropagation();let t=e.detail.value;t!==this.data&&(\"\"===t&&(t=void 0),h(this,\"value-changed\",{value:t}))}}]}}),l);const Qe=[\"password\",\"secret\",\"token\"];o([s(\"ha-form-string\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[d()],key:\"schema\",value:void 0},{kind:\"field\",decorators:[d()],key:\"data\",value:void 0},{kind:\"field\",decorators:[d()],key:\"label\",value:void 0},{kind:\"field\",decorators:[d()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[d({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[w()],key:\"_unmaskedPassword\",value:()=>!1},{kind:\"field\",decorators:[c(\"ha-textfield\")],key:\"_input\",value:void 0},{kind:\"method\",key:\"focus\",value:function(){this._input&&this._input.focus()}},{kind:\"method\",key:\"render\",value:function(){var e;const t=Qe.some((e=>this.schema.name.includes(e)));return u`\n      <ha-textfield\n        .type=${t?this._unmaskedPassword?\"text\":\"password\":this._stringType}\n        .label=${this.label}\n        .value=${this.data||\"\"}\n        .helper=${this.helper}\n        helperPersistent\n        .disabled=${this.disabled}\n        .required=${this.schema.required}\n        .autoValidate=${this.schema.required}\n        .suffix=${t?u`<div style=\"width: 24px\"></div>`:null===(e=this.schema.description)||void 0===e?void 0:e.suffix}\n        .validationMessage=${this.schema.required?\"Required\":void 0}\n        @input=${this._valueChanged}\n      ></ha-textfield>\n      ${t?u`<ha-icon-button\n            toggles\n            .label=${(this._unmaskedPassword?\"Hide\":\"Show\")+\" password\"}\n            @click=${this._toggleUnmaskedPassword}\n            .path=${this._unmaskedPassword?O:q}\n          ></ha-icon-button>`:\"\"}\n    `}},{kind:\"method\",key:\"updated\",value:function(e){e.has(\"schema\")&&this.toggleAttribute(\"own-margin\",!!this.schema.required)}},{kind:\"method\",key:\"_toggleUnmaskedPassword\",value:function(){this._unmaskedPassword=!this._unmaskedPassword}},{kind:\"method\",key:\"_valueChanged\",value:function(e){let t=e.target.value;this.data!==t&&(\"\"!==t||this.schema.required||(t=void 0),h(this,\"value-changed\",{value:t}))}},{kind:\"get\",key:\"_stringType\",value:function(){if(this.schema.format){if([\"email\",\"url\"].includes(this.schema.format))return this.schema.format;if(\"fqdnurl\"===this.schema.format)return\"url\"}return\"text\"}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return p`\n      :host {\n        display: block;\n        position: relative;\n      }\n      :host([own-margin]) {\n        margin-bottom: 5px;\n      }\n      ha-textfield {\n        display: block;\n      }\n      ha-icon-button {\n        position: absolute;\n        top: 1em;\n        right: 12px;\n        --mdc-icon-button-size: 24px;\n        color: var(--secondary-text-color);\n      }\n\n      ha-icon-button {\n        inset-inline-start: initial;\n        inset-inline-end: 12px;\n        direction: var(--direction);\n      }\n    `}}]}}),l);const Ze=(e,t)=>e?t.name?e[t.name]:e:null;let et=!1;o([s(\"ha-form\")],(function(e,t){class i extends t{constructor(...t){super(...t),e(this)}}return{F:i,d:[{kind:\"field\",decorators:[d({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[d({attribute:!1})],key:\"data\",value:void 0},{kind:\"field\",decorators:[d({attribute:!1})],key:\"schema\",value:void 0},{kind:\"field\",decorators:[d()],key:\"error\",value:void 0},{kind:\"field\",decorators:[d({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[d()],key:\"computeError\",value:void 0},{kind:\"field\",decorators:[d()],key:\"computeLabel\",value:void 0},{kind:\"field\",decorators:[d()],key:\"computeHelper\",value:void 0},{kind:\"method\",key:\"focus\",value:function(){var e;const t=null===(e=this.shadowRoot)||void 0===e?void 0:e.querySelector(\".root\");if(t)for(const e of t.children)if(\"HA-ALERT\"!==e.tagName){e.focus();break}}},{kind:\"method\",key:\"willUpdate\",value:function(e){var t;m(v(i.prototype),\"willUpdate\",this).call(this,e),!et&&e.has(\"schema\")&&null!==(t=this.schema)&&void 0!==t&&t.some((e=>\"selector\"in e))&&(et=!0,import(\"./c.9d5cd8b6.js\").then((function(e){return e.h})))}},{kind:\"method\",key:\"render\",value:function(){return u`\n      <div class=\"root\" part=\"root\">\n        ${this.error&&this.error.base?u`\n              <ha-alert alert-type=\"error\">\n                ${this._computeError(this.error.base,this.schema)}\n              </ha-alert>\n            `:\"\"}\n        ${this.schema.map((e=>{const t=((e,t)=>e&&t.name?e[t.name]:null)(this.error,e);return u`\n            ${t?u`\n                  <ha-alert own-margin alert-type=\"error\">\n                    ${this._computeError(t,e)}\n                  </ha-alert>\n                `:\"\"}\n            ${\"selector\"in e?u`<ha-selector\n                  .schema=${e}\n                  .hass=${this.hass}\n                  .selector=${e.selector}\n                  .value=${Ze(this.data,e)}\n                  .label=${this._computeLabel(e,this.data)}\n                  .disabled=${this.disabled}\n                  .helper=${this._computeHelper(e)}\n                  .required=${e.required||!1}\n                  .context=${this._generateContext(e)}\n                ></ha-selector>`:ee(`ha-form-${e.type}`,{schema:e,data:Ze(this.data,e),label:this._computeLabel(e,this.data),disabled:this.disabled,hass:this.hass,computeLabel:this.computeLabel,computeHelper:this.computeHelper,context:this._generateContext(e)})}\n          `}))}\n      </div>\n    `}},{kind:\"method\",key:\"_generateContext\",value:function(e){if(!e.context)return;const t={};for(const[i,a]of Object.entries(e.context))t[i]=this.data[a];return t}},{kind:\"method\",key:\"createRenderRoot\",value:function(){const e=m(v(i.prototype),\"createRenderRoot\",this).call(this);return e.addEventListener(\"value-changed\",(e=>{e.stopPropagation();const t=e.target.schema,i=t.name?{[t.name]:e.detail.value}:e.detail.value;h(this,\"value-changed\",{value:{...this.data,...i}})})),e}},{kind:\"method\",key:\"_computeLabel\",value:function(e,t){return this.computeLabel?this.computeLabel(e,t):e?e.name:\"\"}},{kind:\"method\",key:\"_computeHelper\",value:function(e){return this.computeHelper?this.computeHelper(e):\"\"}},{kind:\"method\",key:\"_computeError\",value:function(e,t){return this.computeError?this.computeError(e,t):e}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return p`\n      .root {\n        margin-bottom: -24px;\n        overflow: clip visible;\n      }\n      .root > * {\n        display: block;\n      }\n      .root > *:not([own-margin]) {\n        margin-bottom: 24px;\n      }\n      ha-alert[own-margin] {\n        margin-bottom: 4px;\n      }\n    `}}]}}),l);export{ee as a,He as d};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.4a97632a.js",
    "content": "function t(t){const a=t.language||\"en\";return t.translationMetadata.translations[a]&&t.translationMetadata.translations[a].isRTL||!1}function a(a){return t(a)?\"rtl\":\"ltr\"}export{a,t as c};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.4c31e630.js",
    "content": "import{_ as r,i as e,e as a,t as i,h as s,$ as t,o as n,I as o,j as l,r as c,n as d,a as m,H as p,ah as g,d as f}from\"./main-a0d7432d.js\";import\"./c.7ee871d3.js\";import\"./c.c608beec.js\";import\"./c.8e28b461.js\";class y extends s{constructor(){super(...arguments),this.indeterminate=!1,this.progress=0,this.buffer=1,this.reverse=!1,this.closed=!1,this.stylePrimaryHalf=\"\",this.stylePrimaryFull=\"\",this.styleSecondaryQuarter=\"\",this.styleSecondaryHalf=\"\",this.styleSecondaryFull=\"\",this.animationReady=!0,this.closedAnimationOff=!1,this.resizeObserver=null}connectedCallback(){super.connectedCallback(),this.rootEl&&this.attachResizeObserver()}render(){const r={\"mdc-linear-progress--closed\":this.closed,\"mdc-linear-progress--closed-animation-off\":this.closedAnimationOff,\"mdc-linear-progress--indeterminate\":this.indeterminate,\"mdc-linear-progress--animation-ready\":this.animationReady},e={\"--mdc-linear-progress-primary-half\":this.stylePrimaryHalf,\"--mdc-linear-progress-primary-half-neg\":\"\"!==this.stylePrimaryHalf?`-${this.stylePrimaryHalf}`:\"\",\"--mdc-linear-progress-primary-full\":this.stylePrimaryFull,\"--mdc-linear-progress-primary-full-neg\":\"\"!==this.stylePrimaryFull?`-${this.stylePrimaryFull}`:\"\",\"--mdc-linear-progress-secondary-quarter\":this.styleSecondaryQuarter,\"--mdc-linear-progress-secondary-quarter-neg\":\"\"!==this.styleSecondaryQuarter?`-${this.styleSecondaryQuarter}`:\"\",\"--mdc-linear-progress-secondary-half\":this.styleSecondaryHalf,\"--mdc-linear-progress-secondary-half-neg\":\"\"!==this.styleSecondaryHalf?`-${this.styleSecondaryHalf}`:\"\",\"--mdc-linear-progress-secondary-full\":this.styleSecondaryFull,\"--mdc-linear-progress-secondary-full-neg\":\"\"!==this.styleSecondaryFull?`-${this.styleSecondaryFull}`:\"\"},a={\"flex-basis\":this.indeterminate?\"100%\":100*this.buffer+\"%\"},i={transform:this.indeterminate?\"scaleX(1)\":`scaleX(${this.progress})`};return t`\n      <div\n          role=\"progressbar\"\n          class=\"mdc-linear-progress ${n(r)}\"\n          style=\"${o(e)}\"\n          dir=\"${l(this.reverse?\"rtl\":void 0)}\"\n          aria-label=\"${l(this.ariaLabel)}\"\n          aria-valuemin=\"0\"\n          aria-valuemax=\"1\"\n          aria-valuenow=\"${l(this.indeterminate?void 0:this.progress)}\"\n        @transitionend=\"${this.syncClosedState}\">\n        <div class=\"mdc-linear-progress__buffer\">\n          <div\n            class=\"mdc-linear-progress__buffer-bar\"\n            style=${o(a)}>\n          </div>\n          <div class=\"mdc-linear-progress__buffer-dots\"></div>\n        </div>\n        <div\n            class=\"mdc-linear-progress__bar mdc-linear-progress__primary-bar\"\n            style=${o(i)}>\n          <span class=\"mdc-linear-progress__bar-inner\"></span>\n        </div>\n        <div class=\"mdc-linear-progress__bar mdc-linear-progress__secondary-bar\">\n          <span class=\"mdc-linear-progress__bar-inner\"></span>\n        </div>\n      </div>`}update(r){!r.has(\"closed\")||this.closed&&void 0!==r.get(\"closed\")||this.syncClosedState(),super.update(r)}async firstUpdated(r){super.firstUpdated(r),this.attachResizeObserver()}syncClosedState(){this.closedAnimationOff=this.closed}updated(r){!r.has(\"indeterminate\")&&r.has(\"reverse\")&&this.indeterminate&&this.restartAnimation(),r.has(\"indeterminate\")&&void 0!==r.get(\"indeterminate\")&&this.indeterminate&&window.ResizeObserver&&this.calculateAndSetAnimationDimensions(this.rootEl.offsetWidth),super.updated(r)}disconnectedCallback(){this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null),super.disconnectedCallback()}attachResizeObserver(){if(window.ResizeObserver)return this.resizeObserver=new window.ResizeObserver((r=>{if(this.indeterminate)for(const e of r)if(e.contentRect){const r=e.contentRect.width;this.calculateAndSetAnimationDimensions(r)}})),void this.resizeObserver.observe(this.rootEl);this.resizeObserver=null}calculateAndSetAnimationDimensions(r){const e=.8367142*r,a=2.00611057*r,i=.37651913*r,s=.84386165*r,t=1.60277782*r;this.stylePrimaryHalf=`${e}px`,this.stylePrimaryFull=`${a}px`,this.styleSecondaryQuarter=`${i}px`,this.styleSecondaryHalf=`${s}px`,this.styleSecondaryFull=`${t}px`,this.restartAnimation()}async restartAnimation(){this.animationReady=!1,await this.updateComplete,await new Promise(requestAnimationFrame),this.animationReady=!0,await this.updateComplete}open(){this.closed=!1}close(){this.closed=!0}}r([e(\".mdc-linear-progress\")],y.prototype,\"rootEl\",void 0),r([a({type:Boolean,reflect:!0})],y.prototype,\"indeterminate\",void 0),r([a({type:Number})],y.prototype,\"progress\",void 0),r([a({type:Number})],y.prototype,\"buffer\",void 0),r([a({type:Boolean,reflect:!0})],y.prototype,\"reverse\",void 0),r([a({type:Boolean,reflect:!0})],y.prototype,\"closed\",void 0),r([function(r,e,a){if(void 0!==e)return function(r,e,a){const i=r.constructor;if(!a){const r=`__${e}`;if(!(a=i.getPropertyDescriptor(e,r)))throw new Error(\"@ariaProperty must be used after a @property decorator\")}const s=a;let t=\"\";if(!s.set)throw new Error(`@ariaProperty requires a setter for ${e}`);if(r.dispatchWizEvent)return a;const n={configurable:!0,enumerable:!0,set(r){if(\"\"===t){const r=i.getPropertyOptions(e);t=\"string\"==typeof r.attribute?r.attribute:e}this.hasAttribute(t)&&this.removeAttribute(t),s.set.call(this,r)}};return s.get&&(n.get=function(){return s.get.call(this)}),n}(r,e,a);throw new Error(\"@ariaProperty only supports TypeScript Decorators\")},a({attribute:\"aria-label\"})],y.prototype,\"ariaLabel\",void 0),r([i()],y.prototype,\"stylePrimaryHalf\",void 0),r([i()],y.prototype,\"stylePrimaryFull\",void 0),r([i()],y.prototype,\"styleSecondaryQuarter\",void 0),r([i()],y.prototype,\"styleSecondaryHalf\",void 0),r([i()],y.prototype,\"styleSecondaryFull\",void 0),r([i()],y.prototype,\"animationReady\",void 0),r([i()],y.prototype,\"closedAnimationOff\",void 0);const u=c`@keyframes mdc-linear-progress-primary-indeterminate-translate{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(83.67142%);transform:translateX(var(--mdc-linear-progress-primary-half, 83.67142%))}100%{transform:translateX(200.611057%);transform:translateX(var(--mdc-linear-progress-primary-full, 200.611057%))}}@keyframes mdc-linear-progress-primary-indeterminate-scale{0%{transform:scaleX(0.08)}36.65%{animation-timing-function:cubic-bezier(0.334731, 0.12482, 0.785844, 1);transform:scaleX(0.08)}69.15%{animation-timing-function:cubic-bezier(0.06, 0.11, 0.6, 1);transform:scaleX(0.661479)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-secondary-indeterminate-translate{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(37.651913%);transform:translateX(var(--mdc-linear-progress-secondary-quarter, 37.651913%))}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(84.386165%);transform:translateX(var(--mdc-linear-progress-secondary-half, 84.386165%))}100%{transform:translateX(160.277782%);transform:translateX(var(--mdc-linear-progress-secondary-full, 160.277782%))}}@keyframes mdc-linear-progress-secondary-indeterminate-scale{0%{animation-timing-function:cubic-bezier(0.205028, 0.057051, 0.57661, 0.453971);transform:scaleX(0.08)}19.15%{animation-timing-function:cubic-bezier(0.152313, 0.196432, 0.648374, 1.004315);transform:scaleX(0.457104)}44.15%{animation-timing-function:cubic-bezier(0.257759, -0.003163, 0.211762, 1.38179);transform:scaleX(0.72796)}100%{transform:scaleX(0.08)}}@keyframes mdc-linear-progress-buffering{from{transform:rotate(180deg) translateX(-10px)}}@keyframes mdc-linear-progress-primary-indeterminate-translate-reverse{0%{transform:translateX(0)}20%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(0)}59.15%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(-83.67142%);transform:translateX(var(--mdc-linear-progress-primary-half-neg, -83.67142%))}100%{transform:translateX(-200.611057%);transform:translateX(var(--mdc-linear-progress-primary-full-neg, -200.611057%))}}@keyframes mdc-linear-progress-secondary-indeterminate-translate-reverse{0%{animation-timing-function:cubic-bezier(0.15, 0, 0.515058, 0.409685);transform:translateX(0)}25%{animation-timing-function:cubic-bezier(0.31033, 0.284058, 0.8, 0.733712);transform:translateX(-37.651913%);transform:translateX(var(--mdc-linear-progress-secondary-quarter-neg, -37.651913%))}48.35%{animation-timing-function:cubic-bezier(0.4, 0.627035, 0.6, 0.902026);transform:translateX(-84.386165%);transform:translateX(var(--mdc-linear-progress-secondary-half-neg, -84.386165%))}100%{transform:translateX(-160.277782%);transform:translateX(var(--mdc-linear-progress-secondary-full-neg, -160.277782%))}}@keyframes mdc-linear-progress-buffering-reverse{from{transform:translateX(-10px)}}.mdc-linear-progress{position:relative;width:100%;transform:translateZ(0);outline:1px solid transparent;overflow:hidden;transition:opacity 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}@media screen and (forced-colors: active){.mdc-linear-progress{outline-color:CanvasText}}.mdc-linear-progress__bar{position:absolute;width:100%;height:100%;animation:none;transform-origin:top left;transition:transform 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-linear-progress__bar-inner{display:inline-block;position:absolute;width:100%;animation:none;border-top-style:solid}.mdc-linear-progress__buffer{display:flex;position:absolute;width:100%;height:100%}.mdc-linear-progress__buffer-dots{background-repeat:repeat-x;flex:auto;transform:rotate(180deg);animation:mdc-linear-progress-buffering 250ms infinite linear}.mdc-linear-progress__buffer-bar{flex:0 1 100%;transition:flex-basis 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-linear-progress__primary-bar{transform:scaleX(0)}.mdc-linear-progress__secondary-bar{display:none}.mdc-linear-progress--indeterminate .mdc-linear-progress__bar{transition:none}.mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{left:-145.166611%}.mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{left:-54.888891%;display:block}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation:mdc-linear-progress-primary-indeterminate-translate 2s infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-primary-indeterminate-scale 2s infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation:mdc-linear-progress-secondary-indeterminate-translate 2s infinite linear}.mdc-linear-progress--indeterminate.mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar>.mdc-linear-progress__bar-inner{animation:mdc-linear-progress-secondary-indeterminate-scale 2s infinite linear}[dir=rtl] .mdc-linear-progress:not([dir=ltr]) .mdc-linear-progress__bar,.mdc-linear-progress[dir=rtl]:not([dir=ltr]) .mdc-linear-progress__bar{right:0;-webkit-transform-origin:center right;transform-origin:center right}[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar,.mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__primary-bar{animation-name:mdc-linear-progress-primary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar,.mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--animation-ready .mdc-linear-progress__secondary-bar{animation-name:mdc-linear-progress-secondary-indeterminate-translate-reverse}[dir=rtl] .mdc-linear-progress:not([dir=ltr]) .mdc-linear-progress__buffer-dots,.mdc-linear-progress[dir=rtl]:not([dir=ltr]) .mdc-linear-progress__buffer-dots{animation:mdc-linear-progress-buffering-reverse 250ms infinite linear;transform:rotate(0)}[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar,.mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__primary-bar{right:-145.166611%;left:auto}[dir=rtl] .mdc-linear-progress:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar,.mdc-linear-progress[dir=rtl]:not([dir=ltr]).mdc-linear-progress--indeterminate .mdc-linear-progress__secondary-bar{right:-54.888891%;left:auto}.mdc-linear-progress--closed{opacity:0}.mdc-linear-progress--closed-animation-off .mdc-linear-progress__buffer-dots{animation:none}.mdc-linear-progress--closed-animation-off.mdc-linear-progress--indeterminate .mdc-linear-progress__bar,.mdc-linear-progress--closed-animation-off.mdc-linear-progress--indeterminate .mdc-linear-progress__bar .mdc-linear-progress__bar-inner{animation:none}.mdc-linear-progress__bar-inner{border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee)}.mdc-linear-progress__buffer-dots{background-image:url(\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='none slice'%3E%3Ccircle cx='1' cy='1' r='1' fill='%23e6e6e6'/%3E%3C/svg%3E\")}.mdc-linear-progress__buffer-bar{background-color:#e6e6e6}.mdc-linear-progress{height:4px}.mdc-linear-progress__bar-inner{border-top-width:4px}.mdc-linear-progress__buffer-dots{background-size:10px 4px}:host{display:block}.mdc-linear-progress__buffer-bar{background-color:#e6e6e6;background-color:var(--mdc-linear-progress-buffer-color, #e6e6e6)}.mdc-linear-progress__buffer-dots{background-image:url(\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='none slice'%3E%3Ccircle cx='1' cy='1' r='1' fill='%23e6e6e6'/%3E%3C/svg%3E\");background-image:var(--mdc-linear-progress-buffering-dots-image, url(\"data:image/svg+xml,%3Csvg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' enable-background='new 0 0 5 2' xml:space='preserve' viewBox='0 0 5 2' preserveAspectRatio='none slice'%3E%3Ccircle cx='1' cy='1' r='1' fill='%23e6e6e6'/%3E%3C/svg%3E\"))}`;let h=class extends y{};h.styles=[u],h=r([d(\"mwc-linear-progress\")],h);let b=m([d(\"hacs-navigate-dialog\")],(function(r,e){return{F:class extends e{constructor(...e){super(...e),r(this)}},d:[{kind:\"field\",decorators:[a()],key:\"path\",value:void 0},{kind:\"field\",decorators:[i()],key:\"_progress\",value:()=>0},{kind:\"method\",key:\"firstUpdated\",value:async function(){this._updateProgress()}},{kind:\"method\",key:\"render\",value:function(){return this.active?t`\n      <hacs-dialog\n        @closed=${this.closeDialog}\n        .active=${this.active}\n        .hass=${this.hass}\n        title=\"Navigating away from HACS\"\n      >\n        <div class=\"content\">\n          This takes you away from HACS and to another page, what you see on that page is not a part\n          of HACS.\n          <br /><br />\n          Redirect will happen automatically in 10 seconds, if you do not want to wait click the \"GO\n          NOW\" button.\n        </div>\n        <mwc-linear-progress .progress=${this._progress}></mwc-linear-progress>\n        <mwc-button slot=\"primaryaction\" @click=${this._navigate}> Go now </mwc-button>\n      </hacs-dialog>\n    `:t``}},{kind:\"method\",key:\"closeDialog\",value:function(){this.active=!1}},{kind:\"method\",key:\"_updateProgress\",value:function(){setTimeout((()=>{this.active&&(this._progress+=.1,1===this._progress?this._navigate():this._updateProgress())}),1e3)}},{kind:\"method\",key:\"_navigate\",value:function(){this.active&&g(this.path)}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[f,c`\n        hacs-dialog {\n          --hacs-dialog-max-width: 460px;\n        }\n        mwc-linear-progress {\n          --mdc-theme-primary: var(--primary-color);\n        }\n      `]}}]}}),p);export{b as HacsNavigateDialog};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.50bfd408.js",
    "content": "const e=()=>{const e={},r=new URLSearchParams(location.search);for(const[n,t]of r.entries())e[n]=t;return e},r=e=>{const r=new URLSearchParams;return Object.entries(e).forEach((([e,n])=>{r.append(e,n)})),r.toString()};export{r as c,e};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.56433b09.js",
    "content": "import{S as t,T as e,Q as i,V as a,a as s,h as o,$ as r,J as n,r as l,n as d,x as c,e as h,a5 as p,t as m,L as u,N as _,m as g,A as b,eb as f,i as v,o as y,cm as w,aK as x,ec as k,I as $,w as z,aD as C,ed as I,ee as O,z as S,P as E}from\"./main-a0d7432d.js\";import{a as T}from\"./c.4a97632a.js\";import\"./c.c608beec.js\";import{r as L,t as M}from\"./c.fbd8d2ba.js\";import{c as R}from\"./c.587d89ba.js\";import{grid as A}from\"@lit-labs/virtualizer/layouts/grid\";import\"./c.936d9772.js\";import\"./c.5ede7966.js\";import{d as j}from\"./c.47f687e9.js\";import{t as D,c as P,U as V,M as N,g as H,B as U,b as B,i as F,d as W}from\"./c.9d5cd8b6.js\";import{a as q}from\"./c.bca0f55d.js\";import{i as G,b as K,e as Y}from\"./c.05e9df28.js\";import\"./c.175b9792.js\";import\"./c.c7df5815.js\";import\"./c.88ebfd3e.js\";import\"./c.58a9b586.js\";import{a as J}from\"./c.db2e6bb6.js\";const Q=(t,e)=>{var i,a;const s=t._$AN;if(void 0===s)return!1;for(const t of s)null===(a=(i=t)._$AO)||void 0===a||a.call(i,e,!1),Q(t,e);return!0},X=t=>{let e,i;do{if(void 0===(e=t._$AM))break;i=e._$AN,i.delete(t),t=e}while(0===(null==i?void 0:i.size))},Z=t=>{for(let e;e=t._$AM;t=e){let i=e._$AN;if(void 0===i)e._$AN=i=new Set;else if(i.has(t))break;i.add(t),it(e)}};function tt(t){void 0!==this._$AN?(X(this),this._$AM=t,Z(this)):this._$AM=t}function et(t,e=!1,i=0){const a=this._$AH,s=this._$AN;if(void 0!==s&&0!==s.size)if(e)if(Array.isArray(a))for(let t=i;t<a.length;t++)Q(a[t],!1),X(a[t]);else null!=a&&(Q(a,!1),X(a));else Q(this,t)}const it=t=>{var i,a,s,o;t.type==e.CHILD&&(null!==(i=(s=t)._$AP)&&void 0!==i||(s._$AP=et),null!==(a=(o=t)._$AQ)&&void 0!==a||(o._$AQ=tt))};class at extends t{constructor(){super(...arguments),this._$AN=void 0}_$AT(t,e,i){super._$AT(t,e,i),Z(this),this.isConnected=t._$AU}_$AO(t,e=!0){var i,a;t!==this.isConnected&&(this.isConnected=t,t?null===(i=this.reconnected)||void 0===i||i.call(this):null===(a=this.disconnected)||void 0===a||a.call(this)),e&&(Q(this,t),X(this))}setValue(t){if(L(this._$Ct))this._$Ct._$AI(t,this);else{const e=[...this._$Ct._$AH];e[this._$Ci]=t,this._$Ct._$AI(e,this,0)}}disconnected(){}reconnected(){}}class st{constructor(t){this.U=t}disconnect(){this.U=void 0}reconnect(t){this.U=t}deref(){return this.U}}class ot{constructor(){this.Y=void 0,this.q=void 0}get(){return this.Y}pause(){var t;null!==(t=this.Y)&&void 0!==t||(this.Y=new Promise((t=>this.q=t)))}resume(){var t;null===(t=this.q)||void 0===t||t.call(this),this.Y=this.q=void 0}}const rt=t=>!M(t)&&\"function\"==typeof t.then;const nt=i(class extends at{constructor(){super(...arguments),this._$Cft=1073741823,this._$Cwt=[],this._$CG=new st(this),this._$CK=new ot}render(...t){var e;return null!==(e=t.find((t=>!rt(t))))&&void 0!==e?e:a}update(t,e){const i=this._$Cwt;let s=i.length;this._$Cwt=e;const o=this._$CG,r=this._$CK;this.isConnected||this.disconnected();for(let t=0;t<e.length&&!(t>this._$Cft);t++){const a=e[t];if(!rt(a))return this._$Cft=t,a;t<s&&a===i[t]||(this._$Cft=1073741823,s=0,Promise.resolve(a).then((async t=>{for(;r.get();)await r.get();const e=o.deref();if(void 0!==e){const i=e._$Cwt.indexOf(a);i>-1&&i<e._$Cft&&(e._$Cft=i,e.setValue(t))}})))}return a}disconnected(){this._$CG.disconnect(),this._$CK.pause()}reconnected(){this._$CG.reconnect(this),this._$CK.resume()}});let lt,dt;async function ct(){return dt||async function(){if(lt)return(await lt).default;lt=window.ResizeObserver;try{new lt((function(){}))}catch(t){lt=import(\"./c.24bd2446.js\"),lt=(await lt).default}return dt=lt}()}s([d(\"ha-header-bar\")],(function(t,e){return{F:class extends e{constructor(...e){super(...e),t(this)}},d:[{kind:\"method\",key:\"render\",value:function(){return r`<header class=\"mdc-top-app-bar\">\n      <div class=\"mdc-top-app-bar__row\">\n        <section\n          class=\"mdc-top-app-bar__section mdc-top-app-bar__section--align-start\"\n          id=\"navigation\"\n        >\n          <slot name=\"navigationIcon\"></slot>\n          <span class=\"mdc-top-app-bar__title\">\n            <slot name=\"title\"></slot>\n          </span>\n        </section>\n        <section\n          class=\"mdc-top-app-bar__section mdc-top-app-bar__section--align-end\"\n          id=\"actions\"\n          role=\"toolbar\"\n        >\n          <slot name=\"actionItems\"></slot>\n        </section>\n      </div>\n    </header>`}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[n(\"/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://github.com/material-components/material-components-web/blob/master/LICENSE\\n */\\n.mdc-top-app-bar{background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee);color:white;display:flex;position:fixed;flex-direction:column;justify-content:space-between;box-sizing:border-box;width:100%;z-index:4}.mdc-top-app-bar .mdc-top-app-bar__action-item,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon{color:#fff;color:var(--mdc-theme-on-primary, #fff)}.mdc-top-app-bar .mdc-top-app-bar__action-item::before,.mdc-top-app-bar .mdc-top-app-bar__action-item::after,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon::before,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon::after{background-color:#fff;background-color:var(--mdc-ripple-color, var(--mdc-theme-on-primary, #fff))}.mdc-top-app-bar .mdc-top-app-bar__action-item:hover::before,.mdc-top-app-bar .mdc-top-app-bar__action-item.mdc-ripple-surface--hover::before,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon:hover::before,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon.mdc-ripple-surface--hover::before{opacity:0.08;opacity:var(--mdc-ripple-hover-opacity, 0.08)}.mdc-top-app-bar .mdc-top-app-bar__action-item.mdc-ripple-upgraded--background-focused::before,.mdc-top-app-bar .mdc-top-app-bar__action-item:not(.mdc-ripple-upgraded):focus::before,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon.mdc-ripple-upgraded--background-focused::before,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-focus-opacity, 0.24)}.mdc-top-app-bar .mdc-top-app-bar__action-item:not(.mdc-ripple-upgraded)::after,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-top-app-bar .mdc-top-app-bar__action-item:not(.mdc-ripple-upgraded):active::after,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-top-app-bar .mdc-top-app-bar__action-item.mdc-ripple-upgraded,.mdc-top-app-bar .mdc-top-app-bar__navigation-icon.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-top-app-bar__row{display:flex;position:relative;box-sizing:border-box;width:100%;height:64px}.mdc-top-app-bar__section{display:inline-flex;flex:1 1 auto;align-items:center;min-width:0;padding:8px 12px;z-index:1}.mdc-top-app-bar__section--align-start{justify-content:flex-start;order:-1}.mdc-top-app-bar__section--align-end{justify-content:flex-end;order:1}.mdc-top-app-bar__title{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline6-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1.25rem;font-size:var(--mdc-typography-headline6-font-size, 1.25rem);line-height:2rem;line-height:var(--mdc-typography-headline6-line-height, 2rem);font-weight:500;font-weight:var(--mdc-typography-headline6-font-weight, 500);letter-spacing:0.0125em;letter-spacing:var(--mdc-typography-headline6-letter-spacing, 0.0125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline6-text-transform, inherit);padding-left:20px;padding-right:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;z-index:1}[dir=rtl] .mdc-top-app-bar__title,.mdc-top-app-bar__title[dir=rtl]{padding-left:0;padding-right:20px}.mdc-top-app-bar--short-collapsed{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:24px;border-bottom-left-radius:0}[dir=rtl] .mdc-top-app-bar--short-collapsed,.mdc-top-app-bar--short-collapsed[dir=rtl]{border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:24px}.mdc-top-app-bar--short{top:0;right:auto;left:0;width:100%;transition:width 250ms cubic-bezier(0.4, 0, 0.2, 1)}[dir=rtl] .mdc-top-app-bar--short,.mdc-top-app-bar--short[dir=rtl]{right:0;left:auto}.mdc-top-app-bar--short .mdc-top-app-bar__row{height:56px}.mdc-top-app-bar--short .mdc-top-app-bar__section{padding:4px}.mdc-top-app-bar--short .mdc-top-app-bar__title{transition:opacity 200ms cubic-bezier(0.4, 0, 0.2, 1);opacity:1}.mdc-top-app-bar--short-collapsed{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0,0,0,.12);width:56px;transition:width 300ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-top-app-bar--short-collapsed .mdc-top-app-bar__title{display:none}.mdc-top-app-bar--short-collapsed .mdc-top-app-bar__action-item{transition:padding 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-top-app-bar--short-collapsed.mdc-top-app-bar--short-has-action-item{width:112px}.mdc-top-app-bar--short-collapsed.mdc-top-app-bar--short-has-action-item .mdc-top-app-bar__section--align-end{padding-left:0;padding-right:12px}[dir=rtl] .mdc-top-app-bar--short-collapsed.mdc-top-app-bar--short-has-action-item .mdc-top-app-bar__section--align-end,.mdc-top-app-bar--short-collapsed.mdc-top-app-bar--short-has-action-item .mdc-top-app-bar__section--align-end[dir=rtl]{padding-left:12px;padding-right:0}.mdc-top-app-bar--dense .mdc-top-app-bar__row{height:48px}.mdc-top-app-bar--dense .mdc-top-app-bar__section{padding:0 4px}.mdc-top-app-bar--dense .mdc-top-app-bar__title{padding-left:12px;padding-right:0}[dir=rtl] .mdc-top-app-bar--dense .mdc-top-app-bar__title,.mdc-top-app-bar--dense .mdc-top-app-bar__title[dir=rtl]{padding-left:0;padding-right:12px}.mdc-top-app-bar--prominent .mdc-top-app-bar__row{height:128px}.mdc-top-app-bar--prominent .mdc-top-app-bar__title{align-self:flex-end;padding-bottom:2px}.mdc-top-app-bar--prominent .mdc-top-app-bar__action-item,.mdc-top-app-bar--prominent .mdc-top-app-bar__navigation-icon{align-self:flex-start}.mdc-top-app-bar--fixed{transition:box-shadow 200ms linear}.mdc-top-app-bar--fixed-scrolled{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0,0,0,.12);transition:box-shadow 200ms linear}.mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__row{height:96px}.mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__section{padding:0 12px}.mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__title{padding-left:20px;padding-right:0;padding-bottom:9px}[dir=rtl] .mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__title,.mdc-top-app-bar--dense.mdc-top-app-bar--prominent .mdc-top-app-bar__title[dir=rtl]{padding-left:0;padding-right:20px}.mdc-top-app-bar--fixed-adjust{padding-top:64px}.mdc-top-app-bar--dense-fixed-adjust{padding-top:48px}.mdc-top-app-bar--short-fixed-adjust{padding-top:56px}.mdc-top-app-bar--prominent-fixed-adjust{padding-top:128px}.mdc-top-app-bar--dense-prominent-fixed-adjust{padding-top:96px}@media(max-width: 599px){.mdc-top-app-bar__row{height:56px}.mdc-top-app-bar__section{padding:4px}.mdc-top-app-bar--short{transition:width 200ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-top-app-bar--short-collapsed{transition:width 250ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-top-app-bar--short-collapsed .mdc-top-app-bar__section--align-end{padding-left:0;padding-right:12px}[dir=rtl] .mdc-top-app-bar--short-collapsed .mdc-top-app-bar__section--align-end,.mdc-top-app-bar--short-collapsed .mdc-top-app-bar__section--align-end[dir=rtl]{padding-left:12px;padding-right:0}.mdc-top-app-bar--prominent .mdc-top-app-bar__title{padding-bottom:6px}.mdc-top-app-bar--fixed-adjust{padding-top:56px}}\\n\\n/*# sourceMappingURL=mdc.top-app-bar.min.css.map*/\"),l`\n        .mdc-top-app-bar {\n          position: static;\n          color: var(--mdc-theme-on-primary, #fff);\n        }\n      `]}}]}}),o);const ht=Symbol(\"scrollerRef\");let pt=\"attachShadow\"in Element.prototype&&(!(\"ShadyDOM\"in window)||!window.ShadyDOM.inUse);let mt=null;function ut(t,e){return`\\n    ${t} {\\n      display: block;\\n      position: relative;\\n      contain: strict;\\n      height: 150px;\\n      overflow: auto;\\n    }\\n    ${e} {\\n      box-sizing: border-box;\\n    }`}class _t{constructor(t){this._benchmarkStart=null,this._layout=null,this._scrollTarget=null,this._sizer=null,this._scrollSize=null,this._scrollErr=null,this._childrenPos=null,this._childMeasurements=null,this._toBeMeasured=new Map,this._rangeChanged=!0,this._itemsChanged=!0,this._visibilityChanged=!0,this._container=null,this._containerElement=null,this._containerInlineStyle=null,this._containerStylesheet=null,this._containerSize=null,this._containerRO=null,this._childrenRO=null,this._mutationObserver=null,this._mutationPromise=null,this._mutationPromiseResolver=null,this._mutationsObserved=!1,this._loadListener=this._childLoaded.bind(this),this._scrollToIndex=null,this._items=[],this._totalItems=null,this._first=0,this._last=0,this._scheduled=new WeakSet,this._measureCallback=null,this._measureChildOverride=null,this._first=-1,this._last=-1,t&&Object.assign(this,t)}set items(t){t!==this._items&&(this._itemsChanged=!0,this._items=t,this._schedule(this._updateLayout))}get totalItems(){return null===this._totalItems?this._items.length:this._totalItems}set totalItems(t){if(\"number\"!=typeof t&&null!==t)throw new Error(\"New value must be a number.\");t!==this._totalItems&&(this._totalItems=t,this._schedule(this._updateLayout))}get container(){return this._container}set container(t){t!==this._container&&(this._container&&this._children.forEach((t=>t.parentNode.removeChild(t))),this._container=t,this._schedule(this._updateLayout),this._initResizeObservers().then((()=>{const e=this._containerElement,i=t&&t.nodeType===Node.DOCUMENT_FRAGMENT_NODE?t.host:t;e!==i&&(this._containerRO.disconnect(),this._containerSize=null,e?(this._containerInlineStyle?e.setAttribute(\"style\",this._containerInlineStyle):e.removeAttribute(\"style\"),this._containerInlineStyle=null,e===this._scrollTarget&&(e.removeEventListener(\"scroll\",this,{passive:!0}),this._sizer&&this._sizer.remove()),e.removeEventListener(\"load\",this._loadListener,!0),this._mutationObserver.disconnect()):addEventListener(\"scroll\",this,{passive:!0}),this._containerElement=i,i&&(this._containerInlineStyle=i.getAttribute(\"style\")||null,this._applyContainerStyles(),i===this._scrollTarget&&(this._sizer=this._sizer||this._createContainerSizer(),this._container.insertBefore(this._sizer,this._container.firstChild)),this._schedule(this._updateLayout),this._containerRO.observe(i),this._mutationObserver.observe(i,{childList:!0}),this._mutationPromise=new Promise((t=>this._mutationPromiseResolver=t)),this._layout&&this._layout.listenForChildLoadEvents&&i.addEventListener(\"load\",this._loadListener,!0)))})))}get layout(){return this._layout}set layout(t){if(this._layout===t)return;let e,i;if(\"object\"==typeof t?(void 0!==t.type&&(e=t.type,delete t.type),i=t):e=t,\"function\"==typeof e){if(this._layout instanceof e)return void(i&&(this._layout.config=i));e=new e(i)}this._layout&&(this._measureCallback=null,this._measureChildOverride=null,this._layout.removeEventListener(\"scrollsizechange\",this),this._layout.removeEventListener(\"scrollerrorchange\",this),this._layout.removeEventListener(\"itempositionchange\",this),this._layout.removeEventListener(\"rangechange\",this),delete this.container[ht],this.container.removeEventListener(\"load\",this._loadListener,!0),this._containerElement&&this._sizeContainer(void 0)),this._layout=e,this._layout&&(this._layout.measureChildren&&\"function\"==typeof this._layout.updateItemSizes&&(\"function\"==typeof this._layout.measureChildren&&(this._measureChildOverride=this._layout.measureChildren),this._measureCallback=this._layout.updateItemSizes.bind(this._layout)),this._layout.addEventListener(\"scrollsizechange\",this),this._layout.addEventListener(\"scrollerrorchange\",this),this._layout.addEventListener(\"itempositionchange\",this),this._layout.addEventListener(\"rangechange\",this),this._container[ht]=this,this._layout.listenForChildLoadEvents&&this._container.addEventListener(\"load\",this._loadListener,!0),this._schedule(this._updateLayout))}startBenchmarking(){null===this._benchmarkStart&&(this._benchmarkStart=window.performance.now())}stopBenchmarking(){if(null!==this._benchmarkStart){const t=window.performance.now(),e=t-this._benchmarkStart,i=performance.getEntriesByName(\"uv-virtualizing\",\"measure\").filter((e=>e.startTime>=this._benchmarkStart&&e.startTime<t)).reduce(((t,e)=>t+e.duration),0);return this._benchmarkStart=null,{timeElapsed:e,virtualizationTime:i}}return null}_measureChildren(){const t={},e=this._children,i=this._measureChildOverride||this._measureChild;for(let a=0;a<e.length;a++){const s=e[a],o=this._first+a;(this._itemsChanged||this._toBeMeasured.has(s))&&(t[o]=i.call(this,s,this._items[o]))}this._childMeasurements=t,this._schedule(this._updateLayout),this._toBeMeasured.clear()}_measureChild(t){const{width:e,height:i}=t.getBoundingClientRect();return Object.assign({width:e,height:i},function(t){const e=window.getComputedStyle(t);return{marginTop:gt(e.marginTop),marginRight:gt(e.marginRight),marginBottom:gt(e.marginBottom),marginLeft:gt(e.marginLeft)}}(t))}get scrollTarget(){return this._scrollTarget}set scrollTarget(t){t===window&&(t=null),this._scrollTarget!==t&&(this._sizeContainer(void 0),this._scrollTarget&&(this._scrollTarget.removeEventListener(\"scroll\",this,{passive:!0}),this._sizer&&this._scrollTarget===this._containerElement&&this._sizer.remove()),this._scrollTarget=t,t&&(t.addEventListener(\"scroll\",this,{passive:!0}),t===this._containerElement&&(this._sizer=this._sizer||this._createContainerSizer(),this._container.insertBefore(this._sizer,this._container.firstChild))))}set scrollToIndex(t){this._scrollToIndex=t,this._schedule(this._updateLayout)}async _schedule(t){this._scheduled.has(t)||(this._scheduled.add(t),await Promise.resolve(),this._scheduled.delete(t),t.call(this))}async _updateDOM(){const{_rangeChanged:t,_itemsChanged:e}=this;this._visibilityChanged&&(this._notifyVisibility(),this._visibilityChanged=!1),(t||e)&&(this._notifyRange(),this._rangeChanged=!1,this._itemsChanged=!1,await this._mutationPromise),this._layout.measureChildren&&this._children.forEach((t=>this._childrenRO.observe(t))),this._positionChildren(this._childrenPos),this._sizeContainer(this._scrollSize),this._scrollErr&&(this._correctScrollError(this._scrollErr),this._scrollErr=null),this._benchmarkStart&&\"mark\"in window.performance&&window.performance.mark(\"uv-end\")}_updateLayout(){this._layout.totalItems=this._totalItems,null!==this._scrollToIndex&&(this._layout.scrollToIndex(this._scrollToIndex.index,this._scrollToIndex.position),this._scrollToIndex=null),this._updateView(),null!==this._childMeasurements&&(this._measureCallback&&this._measureCallback(this._childMeasurements),this._childMeasurements=null),this._layout.reflowIfNeeded(this._itemsChanged),this._benchmarkStart&&\"mark\"in window.performance&&window.performance.mark(\"uv-end\")}_handleScrollEvent(){if(this._benchmarkStart&&\"mark\"in window.performance){try{window.performance.measure(\"uv-virtualizing\",\"uv-start\",\"uv-end\")}catch(t){}window.performance.mark(\"uv-start\")}this._schedule(this._updateLayout)}handleEvent(t){switch(t.type){case\"scroll\":this._scrollTarget&&t.target!==this._scrollTarget||this._handleScrollEvent();break;case\"scrollsizechange\":this._scrollSize=t.detail,this._schedule(this._updateDOM);break;case\"scrollerrorchange\":this._scrollErr=t.detail,this._schedule(this._updateDOM);break;case\"itempositionchange\":this._childrenPos=t.detail,this._schedule(this._updateDOM);break;case\"rangechange\":this._adjustRange(t.detail),this._schedule(this._updateDOM);break;default:console.warn(\"event not handled\",t)}}async _initResizeObservers(){if(null===this._containerRO){const t=await ct();this._containerRO=new t((t=>this._containerSizeChanged(t[0].contentRect))),this._childrenRO=new t(this._childrenSizeChanged.bind(this)),this._mutationObserver=new MutationObserver(this._observeMutations.bind(this))}}_applyContainerStyles(){if(pt){if(null===this._containerStylesheet){(this._containerStylesheet=document.createElement(\"style\")).textContent=ut(\":host\",\"::slotted(*)\")}const t=this._containerElement.shadowRoot||this._containerElement.attachShadow({mode:\"open\"}),e=t.querySelector(\"slot:not([name])\");t.appendChild(this._containerStylesheet),e||t.appendChild(document.createElement(\"slot\"))}else mt||(mt=document.createElement(\"style\"),mt.textContent=ut(\".uni-virtualizer-host\",\".uni-virtualizer-host > *\"),document.head.appendChild(mt)),this._containerElement&&this._containerElement.classList.add(\"uni-virtualizer-host\")}_createContainerSizer(){const t=document.createElement(\"div\");return Object.assign(t.style,{position:\"absolute\",margin:\"-2px 0 0 0\",padding:0,visibility:\"hidden\",fontSize:\"2px\"}),t.innerHTML=\"&nbsp;\",t.id=\"uni-virtualizer-spacer\",t}get _children(){const t=[];let e=this.container.firstElementChild;for(;e;)\"uni-virtualizer-spacer\"!==e.id&&t.push(e),e=e.nextElementSibling;return t}_updateView(){if(!this.container||!this._containerElement||!this._layout)return;let t,e,i,a;if(this._scrollTarget===this._containerElement&&null!==this._containerSize)t=this._containerSize.width,e=this._containerSize.height,a=this._containerElement.scrollLeft,i=this._containerElement.scrollTop;else{const s=this._containerElement.getBoundingClientRect(),o=this._scrollTarget?this._scrollTarget.getBoundingClientRect():{top:s.top+window.pageYOffset,left:s.left+window.pageXOffset,width:innerWidth,height:innerHeight},r=o.width,n=o.height,l=Math.max(0,Math.min(r,s.left-o.left)),d=Math.max(0,Math.min(n,s.top-o.top));t=(\"vertical\"===this._layout.direction?Math.max(0,Math.min(r,s.right-o.left)):r)-l,e=(\"vertical\"===this._layout.direction?n:Math.max(0,Math.min(n,s.bottom-o.top)))-d,a=Math.max(0,-(s.left-o.left)),i=Math.max(0,-(s.top-o.top))}this._layout.viewportSize={width:t,height:e},this._layout.viewportScroll={top:i,left:a}}_sizeContainer(t){if(this._scrollTarget===this._containerElement){const e=t&&t.width?t.width-1:0,i=t&&t.height?t.height-1:0;this._sizer&&(this._sizer.style.transform=`translate(${e}px, ${i}px)`)}else if(this._containerElement){const e=this._containerElement.style;e.minWidth=t&&t.width?t.width+\"px\":null,e.minHeight=t&&t.height?t.height+\"px\":null}}_positionChildren(t){if(t){const e=this._children;Object.keys(t).forEach((i=>{const a=i-this._first,s=e[a];if(s){const{top:e,left:a,width:o,height:r}=t[i];s.style.position=\"absolute\",s.style.transform=`translate(${a}px, ${e}px)`,void 0!==o&&(s.style.width=o+\"px\"),void 0!==r&&(s.style.height=r+\"px\")}}))}}async _adjustRange(t){const{_first:e,_last:i,_firstVisible:a,_lastVisible:s}=this;this._first=t.first,this._last=t.last,this._firstVisible=t.firstVisible,this._lastVisible=t.lastVisible,this._rangeChanged=this._rangeChanged||this._first!==e||this._last!==i,this._visibilityChanged=this._visibilityChanged||this._firstVisible!==a||this._lastVisible!==s}_correctScrollError(t){this._scrollTarget?(this._scrollTarget.scrollTop-=t.top,this._scrollTarget.scrollLeft-=t.left):window.scroll(window.pageXOffset-t.left,window.pageYOffset-t.top)}_notifyRange(){this._container.dispatchEvent(new CustomEvent(\"rangeChanged\",{detail:{first:this._first,last:this._last,firstVisible:this._firstVisible,lastVisible:this._lastVisible}}))}_notifyVisibility(){this._container.dispatchEvent(new CustomEvent(\"visibilityChanged\",{detail:{first:this._first,last:this._last,firstVisible:this._firstVisible,lastVisible:this._lastVisible}}))}_containerSizeChanged(t){const{width:e,height:i}=t;this._containerSize={width:e,height:i},this._schedule(this._updateLayout)}async _observeMutations(){this._mutationsObserved||(this._mutationsObserved=!0,this._mutationPromiseResolver(),this._mutationPromise=new Promise((t=>this._mutationPromiseResolver=t)),this._mutationsObserved=!1)}_childLoaded(){}_childrenSizeChanged(t){for(let e of t)this._toBeMeasured.set(e.target,e.contentRect);this._measureChildren(),this._schedule(this._updateLayout)}}function gt(t){const e=t?parseFloat(t):NaN;return Number.isNaN(e)?0:e}const bt=t=>t;const ft=i(class extends at{constructor(t){if(super(t),this.first=0,this.last=-1,t.type!==e.CHILD)throw new Error(\"The scroll directive can only be used in child expressions\")}render(t){t&&(this.renderItem=t.renderItem,this.keyFunction=t.keyFunction);const e=[];if(this.first>=0&&this.last>=this.first)for(let t=this.first;t<this.last+1;t++)e.push(this.items[t]);return R(e,this.keyFunction||bt,this.renderItem)}update(t,[e]){var i;if(this.scroller||this._initialize(t,e)){const{scroller:t}=this;return this.items=t.items=e.items,t.totalItems=e.totalItems||(null===(i=e.items)||void 0===i?void 0:i.length)||0,t.layout=e.layout,t.scrollTarget=e.scrollTarget||this.container,e.scrollToIndex&&(t.scrollToIndex=e.scrollToIndex),this.render(e)}return c}_initialize(t,e){const i=this.container=t.parentNode;return i&&1===i.nodeType?(this.scroller=new _t({container:i}),i.addEventListener(\"rangeChanged\",(t=>{this.first=t.detail.first,this.last=t.detail.last,this.setValue(this.render())})),!0):(Promise.resolve().then((()=>this.update(t,[e]))),!1)}});function vt(t,e,i,a){var s,o=arguments.length,r=o<3?e:null===a?a=Object.getOwnPropertyDescriptor(e,i):a;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)r=Reflect.decorate(t,e,i,a);else for(var n=t.length-1;n>=0;n--)(s=t[n])&&(r=(o<3?s(r):o>3?s(e,i,r):s(e,i))||r);return o>3&&r&&Object.defineProperty(e,i,r),r}let yt=class extends o{constructor(){super(...arguments),this.scrollTarget=this}createRenderRoot(){return this}set layout(t){this._layout=t,this.requestUpdate()}get layout(){return this[ht].layout}async scrollToIndex(t,e=\"start\"){this._scrollToIndex={index:t,position:e},this.requestUpdate(),await this.updateComplete,this._scrollToIndex=null}render(){const{items:t,renderItem:e,keyFunction:i,scrollTarget:a}=this,s=this._layout;return r`\n            ${ft({items:t,renderItem:e,layout:s,keyFunction:i,scrollTarget:a,scrollToIndex:this._scrollToIndex})}\n        `}};vt([h()],yt.prototype,\"renderItem\",void 0),vt([h({attribute:!1})],yt.prototype,\"items\",void 0),vt([h({attribute:!1})],yt.prototype,\"scrollTarget\",void 0),vt([h()],yt.prototype,\"keyFunction\",void 0),vt([h({attribute:!1})],yt.prototype,\"layout\",null),yt=vt([d(\"lit-virtualizer\")],yt);const wt=(t,e)=>t.callWS({type:\"media_source/browse_media\",media_content_id:e}),xt=t=>t.startsWith(\"media-source://media_source\"),kt=async(t,e,i)=>{const a=new FormData;a.append(\"media_content_id\",e),a.append(\"file\",i);const s=await t.fetchWithAuth(\"/api/media_source/local_source/upload\",{method:\"POST\",body:a});if(413===s.status)throw new Error(`Uploaded file is too large (${i.name})`);if(200!==s.status)throw new Error(\"Unknown error\");return s.json()},$t=async(t,e)=>t.callWS({type:\"media_source/local_source/remove\",media_content_id:e});class zt{constructor(t=!0){p(this,\"_storage\",{}),p(this,\"_listeners\",{}),t&&window.addEventListener(\"storage\",(t=>{t.key&&this.hasKey(t.key)&&(this._storage[t.key]=t.newValue?JSON.parse(t.newValue):t.newValue,this._listeners[t.key]&&this._listeners[t.key].forEach((e=>e(t.oldValue?JSON.parse(t.oldValue):t.oldValue,this._storage[t.key]))))}))}addFromStorage(t){if(!this._storage[t]){const e=window.localStorage.getItem(t);e&&(this._storage[t]=JSON.parse(e))}}subscribeChanges(t,e){return this._listeners[t]?this._listeners[t].push(e):this._listeners[t]=[e],()=>{this.unsubscribeChanges(t,e)}}unsubscribeChanges(t,e){if(!(t in this._listeners))return;const i=this._listeners[t].indexOf(e);-1!==i&&this._listeners[t].splice(i,1)}hasKey(t){return t in this._storage}getValue(t){return this._storage[t]}setValue(t,e){this._storage[t]=e;try{window.localStorage.setItem(t,JSON.stringify(e))}catch(t){}}}const Ct=new zt,It=(t,e,i=!0,a)=>s=>{const o=i?Ct:new zt(!1),r=String(s.key);t=t||String(s.key);const n=s.initializer?s.initializer():void 0;o.addFromStorage(t);const l=()=>o.hasKey(t)?o.getValue(t):n;return{kind:\"method\",placement:\"prototype\",key:s.key,descriptor:{set(i){((i,a)=>{let r;e&&(r=l()),o.setValue(t,a),e&&i.requestUpdate(s.key,r)})(this,i)},get:()=>l(),enumerable:!0,configurable:!0},finisher(n){if(e&&i){const e=n.prototype.connectedCallback,i=n.prototype.disconnectedCallback;n.prototype.connectedCallback=function(){var i;e.call(this),this[`__unbsubLocalStorage${r}`]=(i=this,o.subscribeChanges(t,(t=>{i.requestUpdate(s.key,t)})))},n.prototype.disconnectedCallback=function(){i.call(this),this[`__unbsubLocalStorage${r}`]()}}e&&n.createProperty(s.key,{noAccessor:!0,...a})}}},Ot=t=>{const e=[];if(!t)return e;const i=new Set;for(const[a]of t.languages){if(i.has(a))continue;i.add(a);let t=a;if(a in D.translations)t=D.translations[a].nativeName;else{const[e,i]=a.split(\"-\");e in D.translations&&(t=`${D.translations[e].nativeName}`,e.toLowerCase()!==i.toLowerCase()&&(t+=` (${i})`))}e.push([a,t])}return e.sort(((t,e)=>P(t[1],e[1])))},St=(t,e,i)=>{const a=[];if(!e)return a;for(const[s,o]of e.languages)s===t&&a.push([o,i(`ui.panel.media-browser.tts.gender_${o}`)||i(`ui.panel.config.cloud.account.tts.${o}`)||o]);return a.sort(((t,e)=>P(t[1],e[1])))};s([d(\"ha-browse-media-tts\")],(function(t,e){class i extends e{constructor(...e){super(...e),t(this)}}return{F:i,d:[{kind:\"field\",decorators:[h()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[h()],key:\"item\",value:void 0},{kind:\"field\",decorators:[h()],key:\"action\",value:void 0},{kind:\"field\",decorators:[m()],key:\"_cloudDefaultOptions\",value:void 0},{kind:\"field\",decorators:[m()],key:\"_cloudOptions\",value:void 0},{kind:\"field\",decorators:[m()],key:\"_cloudTTSInfo\",value:void 0},{kind:\"field\",decorators:[It(\"cloudTtsTryMessage\",!0,!1)],key:\"_message\",value:void 0},{kind:\"method\",key:\"render\",value:function(){var t;return r`<ha-card>\n      <div class=\"card-content\">\n        <ha-textarea\n          autogrow\n          .label=${this.hass.localize(\"ui.components.media-browser.tts.message\")}\n          .value=${this._message||this.hass.localize(\"ui.components.media-browser.tts.example_message\",{name:(null===(t=this.hass.user)||void 0===t?void 0:t.name)||\"\"})}\n        >\n        </ha-textarea>\n        ${this._cloudDefaultOptions?this._renderCloudOptions():\"\"}\n      </div>\n      <div class=\"card-actions\">\n        ${!this._cloudDefaultOptions||this._cloudDefaultOptions[0]===this._cloudOptions[0]&&this._cloudDefaultOptions[1]===this._cloudOptions[1]?r`<span></span>`:r`\n              <button class=\"link\" @click=${this._storeDefaults}>\n                ${this.hass.localize(\"ui.components.media-browser.tts.set_as_default\")}\n              </button>\n            `}\n\n        <mwc-button @click=${this._ttsClicked}>\n          ${this.hass.localize(`ui.components.media-browser.tts.action_${this.action}`)}\n        </mwc-button>\n      </div>\n    </ha-card> `}},{kind:\"method\",key:\"_renderCloudOptions\",value:function(){if(!this._cloudTTSInfo||!this._cloudOptions)return\"\";const t=this.getLanguages(this._cloudTTSInfo),e=this._cloudOptions,i=this.getSupportedGenders(e[0],this._cloudTTSInfo,this.hass.localize);return r`\n      <div class=\"cloud-options\">\n        <ha-select\n          fixedMenuPosition\n          naturalMenuWidth\n          .label=${this.hass.localize(\"ui.components.media-browser.tts.language\")}\n          .value=${e[0]}\n          @selected=${this._handleLanguageChange}\n          @closed=${J}\n        >\n          ${t.map((([t,e])=>r`<mwc-list-item .value=${t}>${e}</mwc-list-item>`))}\n        </ha-select>\n\n        <ha-select\n          fixedMenuPosition\n          naturalMenuWidth\n          .label=${this.hass.localize(\"ui.components.media-browser.tts.gender\")}\n          .value=${e[1]}\n          @selected=${this._handleGenderChange}\n          @closed=${J}\n        >\n          ${i.map((([t,e])=>r`<mwc-list-item .value=${t}>${e}</mwc-list-item>`))}\n        </ha-select>\n      </div>\n    `}},{kind:\"method\",key:\"willUpdate\",value:function(t){var e,a;if(u(_(i.prototype),\"willUpdate\",this).call(this,t),t.has(\"item\")){if(this.item.media_content_id){const t=new URLSearchParams(this.item.media_content_id.split(\"?\")[1]),e=t.get(\"message\"),i=t.get(\"language\"),a=t.get(\"gender\");e&&(this._message=e),i&&a&&(this._cloudOptions=[i,a])}this.isCloudItem&&!this._cloudTTSInfo&&((a=this.hass,a.callWS({type:\"cloud/tts/info\"})).then((t=>{this._cloudTTSInfo=t})),(t=>t.callWS({type:\"cloud/status\"}))(this.hass).then((t=>{t.logged_in&&(this._cloudDefaultOptions=t.prefs.tts_default_voice,this._cloudOptions||(this._cloudOptions={...this._cloudDefaultOptions}))})))}if(t.has(\"message\"))return;const s=null===(e=this.shadowRoot.querySelector(\"ha-textarea\"))||void 0===e?void 0:e.value;void 0!==s&&s!==this._message&&(this._message=s)}},{kind:\"method\",key:\"_handleLanguageChange\",value:async function(t){t.target.value!==this._cloudOptions[0]&&(this._cloudOptions=[t.target.value,this._cloudOptions[1]])}},{kind:\"method\",key:\"_handleGenderChange\",value:async function(t){t.target.value!==this._cloudOptions[1]&&(this._cloudOptions=[this._cloudOptions[0],t.target.value])}},{kind:\"field\",key:\"getLanguages\",value:()=>g(Ot)},{kind:\"field\",key:\"getSupportedGenders\",value:()=>g(St)},{kind:\"get\",key:\"isCloudItem\",value:function(){return this.item.media_content_id.startsWith(\"media-source://tts/cloud\")}},{kind:\"method\",key:\"_ttsClicked\",value:async function(){const t=this.shadowRoot.querySelector(\"ha-textarea\").value;this._message=t;const e={...this.item},i=new URLSearchParams;i.append(\"message\",t),this._cloudOptions&&(i.append(\"language\",this._cloudOptions[0]),i.append(\"gender\",this._cloudOptions[1])),e.media_content_id=`${e.media_content_id.split(\"?\")[0]}?${i.toString()}`,e.can_play=!0,e.title=t,b(this,\"tts-picked\",{item:e})}},{kind:\"method\",key:\"_storeDefaults\",value:async function(){const t=this._cloudDefaultOptions;this._cloudDefaultOptions=[...this._cloudOptions];try{await(e=this.hass,i={tts_default_voice:this._cloudDefaultOptions},e.callWS({type:\"cloud/update_prefs\",...i}))}catch(e){this._cloudDefaultOptions=t,q(this,{text:this.hass.localize(\"ui.components.media-browser.tts.faild_to_store_defaults\",{error:e.message||e})})}var e,i}},{kind:\"field\",static:!0,key:\"styles\",value:()=>[f,l`\n      :host {\n        margin: 16px auto;\n        padding: 0 8px;\n        display: flex;\n        flex-direction: column;\n        max-width: 400px;\n      }\n      .cloud-options {\n        margin-top: 16px;\n        display: flex;\n        justify-content: space-between;\n      }\n      .cloud-options ha-select {\n        width: 48%;\n      }\n      ha-textarea {\n        width: 100%;\n      }\n      button.link {\n        color: var(--primary-color);\n      }\n      .card-actions {\n        display: flex;\n        justify-content: space-between;\n      }\n    `]}]}}),o),s([d(\"ha-media-player-browse\")],(function(t,e){class i extends e{constructor(...e){super(...e),t(this)}}return{F:i,d:[{kind:\"field\",decorators:[h({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[h()],key:\"entityId\",value:void 0},{kind:\"field\",decorators:[h()],key:\"action\",value:()=>\"play\"},{kind:\"field\",decorators:[h({type:Boolean})],key:\"dialog\",value:()=>!1},{kind:\"field\",decorators:[h()],key:\"navigateIds\",value:void 0},{kind:\"field\",decorators:[h({type:Boolean,attribute:\"narrow\",reflect:!0})],key:\"_narrow\",value:()=>!1},{kind:\"field\",decorators:[h({type:Boolean,attribute:\"scroll\",reflect:!0})],key:\"_scrolled\",value:()=>!1},{kind:\"field\",decorators:[m()],key:\"_error\",value:void 0},{kind:\"field\",decorators:[m()],key:\"_parentItem\",value:void 0},{kind:\"field\",decorators:[m()],key:\"_currentItem\",value:void 0},{kind:\"field\",decorators:[v(\".header\")],key:\"_header\",value:void 0},{kind:\"field\",decorators:[v(\".content\")],key:\"_content\",value:void 0},{kind:\"field\",decorators:[v(\"lit-virtualizer\")],key:\"_virtualizer\",value:void 0},{kind:\"field\",key:\"_observed\",value:()=>!1},{kind:\"field\",key:\"_headerOffsetHeight\",value:()=>0},{kind:\"field\",key:\"_resizeObserver\",value:void 0},{kind:\"method\",key:\"connectedCallback\",value:function(){u(_(i.prototype),\"connectedCallback\",this).call(this),this.updateComplete.then((()=>this._attachResizeObserver()))}},{kind:\"method\",key:\"disconnectedCallback\",value:function(){this._resizeObserver&&this._resizeObserver.disconnect()}},{kind:\"method\",key:\"refresh\",value:async function(){const t=this.navigateIds[this.navigateIds.length-1];try{this._currentItem=await this._fetchData(this.entityId,t.media_content_id,t.media_content_type),b(this,\"media-browsed\",{ids:this.navigateIds,current:this._currentItem})}catch(t){this._setError(t)}}},{kind:\"method\",key:\"play\",value:function(){var t;null!==(t=this._currentItem)&&void 0!==t&&t.can_play&&this._runAction(this._currentItem)}},{kind:\"method\",key:\"willUpdate\",value:function(t){var e;if(u(_(i.prototype),\"willUpdate\",this).call(this,t),t.has(\"entityId\"))this._setError(void 0);else if(!t.has(\"navigateIds\"))return;this._setError(void 0);const a=t.get(\"navigateIds\"),s=this.navigateIds;null===(e=this._content)||void 0===e||e.scrollTo(0,0),this._scrolled=!1;const o=this._currentItem,r=this._parentItem;this._currentItem=void 0,this._parentItem=void 0;const n=s[s.length-1],l=s.length>1?s[s.length-2]:void 0;let d,c;t.has(\"entityId\")||(a&&s.length===a.length+1&&a.every(((t,e)=>{const i=s[e];return i.media_content_id===t.media_content_id&&i.media_content_type===t.media_content_type}))?c=Promise.resolve(o):a&&s.length===a.length-1&&s.every(((t,e)=>{const i=a[e];return t.media_content_id===i.media_content_id&&t.media_content_type===i.media_content_type}))&&(d=Promise.resolve(r))),d||(d=this._fetchData(this.entityId,n.media_content_id,n.media_content_type)),d.then((t=>{this._currentItem=t,b(this,\"media-browsed\",{ids:s,current:t})}),(e=>{var i;a&&t.has(\"entityId\")&&s.length===a.length&&a.every(((t,e)=>s[e].media_content_id===t.media_content_id&&s[e].media_content_type===t.media_content_type))?b(this,\"media-browsed\",{ids:[{media_content_id:void 0,media_content_type:void 0}],replace:!0}):\"entity_not_found\"===e.code&&V.includes(null===(i=this.hass.states[this.entityId])||void 0===i?void 0:i.state)?this._setError({message:this.hass.localize(\"ui.components.media-browser.media_player_unavailable\"),code:\"entity_not_found\"}):this._setError(e)})),c||void 0===l||(c=this._fetchData(this.entityId,l.media_content_id,l.media_content_type)),c&&c.then((t=>{this._parentItem=t}))}},{kind:\"method\",key:\"shouldUpdate\",value:function(t){if(t.size>1||!t.has(\"hass\"))return!0;const e=t.get(\"hass\");return void 0===e||e.localize!==this.hass.localize}},{kind:\"method\",key:\"firstUpdated\",value:function(){this._measureCard(),this._attachResizeObserver()}},{kind:\"method\",key:\"updated\",value:function(t){if(u(_(i.prototype),\"updated\",this).call(this,t),t.has(\"_scrolled\"))this._animateHeaderHeight();else if(t.has(\"_currentItem\")){var e;if(this._setHeaderHeight(),this._observed)return;const t=null===(e=this._virtualizer)||void 0===e?void 0:e._virtualizer;t&&(this._observed=!0,setTimeout((()=>t._observeMutations()),0))}}},{kind:\"method\",key:\"render\",value:function(){if(this._error)return r`\n        <div class=\"container\">\n          <ha-alert alert-type=\"error\">\n            ${this._renderError(this._error)}\n          </ha-alert>\n        </div>\n      `;if(!this._currentItem)return r`<ha-circular-progress active></ha-circular-progress>`;const t=this._currentItem,e=this.hass.localize(`ui.components.media-browser.class.${t.media_class}`),i=t.children||[],a=N[t.media_class],s=t.children_media_class?N[t.children_media_class]:N.directory,o=t.thumbnail?this._getSignedThumbnail(t.thumbnail).then((t=>`url(${t})`)):\"none\";return r`\n              ${t.can_play?r`\n                      <div\n                        class=\"header ${y({\"no-img\":!t.thumbnail,\"no-dialog\":!this.dialog})}\"\n                        @transitionend=${this._setHeaderHeight}\n                      >\n                        <div class=\"header-content\">\n                          ${t.thumbnail?r`\n                                <div\n                                  class=\"img\"\n                                  style=\"background-image: ${nt(o,\"\")}\"\n                                >\n                                  ${this._narrow&&null!=t&&t.can_play?r`\n                                        <ha-fab\n                                          mini\n                                          .item=${t}\n                                          @click=${this._actionClicked}\n                                        >\n                                          <ha-svg-icon\n                                            slot=\"icon\"\n                                            .label=${this.hass.localize(`ui.components.media-browser.${this.action}-media`)}\n                                            .path=${\"play\"===this.action?w:x}\n                                          ></ha-svg-icon>\n                                          ${this.hass.localize(`ui.components.media-browser.${this.action}`)}\n                                        </ha-fab>\n                                      `:\"\"}\n                                </div>\n                              `:r``}\n                          <div class=\"header-info\">\n                            <div class=\"breadcrumb\">\n                              <h1 class=\"title\">${t.title}</h1>\n                              ${e?r` <h2 class=\"subtitle\">${e}</h2> `:\"\"}\n                            </div>\n                            ${!t.can_play||t.thumbnail&&this._narrow?\"\":r`\n                                  <mwc-button\n                                    raised\n                                    .item=${t}\n                                    @click=${this._actionClicked}\n                                  >\n                                    <ha-svg-icon\n                                      .label=${this.hass.localize(`ui.components.media-browser.${this.action}-media`)}\n                                      .path=${\"play\"===this.action?w:x}\n                                    ></ha-svg-icon>\n                                    ${this.hass.localize(`ui.components.media-browser.${this.action}`)}\n                                  </mwc-button>\n                                `}\n                          </div>\n                        </div>\n                      </div>\n                    `:\"\"}\n          <div\n            class=\"content\"\n            @scroll=${this._scroll}\n            @touchmove=${this._scroll}\n          >\n            ${this._error?r`\n                    <div class=\"container\">\n                      <ha-alert alert-type=\"error\">\n                        ${this._renderError(this._error)}\n                      </ha-alert>\n                    </div>\n                  `:(n=t.media_content_id,n.startsWith(\"media-source://tts/\")?r`\n                    <ha-browse-media-tts\n                      .item=${t}\n                      .hass=${this.hass}\n                      .action=${this.action}\n                      @tts-picked=${this._ttsPicked}\n                    ></ha-browse-media-tts>\n                  `:i.length||t.not_shown?\"grid\"===s.layout?r`\n                    <lit-virtualizer\n                      scroller\n                      .layout=${A({itemSize:{width:\"175px\",height:\"portrait\"===s.thumbnail_ratio?\"312px\":\"225px\"},gap:\"16px\",flex:{preserve:\"aspect-ratio\"},justify:\"space-evenly\",direction:\"vertical\"})}\n                      .items=${i}\n                      .renderItem=${this._renderGridItem}\n                      class=\"children ${y({portrait:\"portrait\"===s.thumbnail_ratio,not_shown:!!t.not_shown})}\"\n                    ></lit-virtualizer>\n                    ${t.not_shown?r`\n                          <div class=\"grid not-shown\">\n                            <div class=\"title\">\n                              ${this.hass.localize(\"ui.components.media-browser.not_shown\",{count:t.not_shown})}\n                            </div>\n                          </div>\n                        `:\"\"}\n                  `:r`\n                    <mwc-list>\n                      <lit-virtualizer\n                        scroller\n                        .items=${i}\n                        style=${$({height:72*i.length+26+\"px\"})}\n                        .renderItem=${this._renderListItem}\n                      ></lit-virtualizer>\n                      ${t.not_shown?r`\n                            <mwc-list-item\n                              noninteractive\n                              class=\"not-shown\"\n                              .graphic=${a.show_list_images?\"medium\":\"avatar\"}\n                              dir=${T(this.hass)}\n                            >\n                              <span class=\"title\">\n                                ${this.hass.localize(\"ui.components.media-browser.not_shown\",{count:t.not_shown})}\n                              </span>\n                            </mwc-list-item>\n                          `:\"\"}\n                    </mwc-list>\n                  `:r`\n                    <div class=\"container no-items\">\n                      ${\"media-source://media_source/local/.\"===t.media_content_id?r`\n                            <div class=\"highlight-add-button\">\n                              <span>\n                                <ha-svg-icon\n                                  .path=${k}\n                                ></ha-svg-icon>\n                              </span>\n                              <span>\n                                ${this.hass.localize(\"ui.components.media-browser.file_management.highlight_button\")}\n                              </span>\n                            </div>\n                          `:this.hass.localize(\"ui.components.media-browser.no_items\")}\n                    </div>\n                  `)}\n          </div>\n        </div>\n      </div>\n    `;var n}},{kind:\"field\",key:\"_renderGridItem\",value(){return t=>{const e=t.thumbnail?this._getSignedThumbnail(t.thumbnail).then((t=>`url(${t})`)):\"none\";return r`\n      <div class=\"child\" .item=${t} @click=${this._childClicked}>\n        <ha-card outlined>\n          <div class=\"thumbnail\">\n            ${t.thumbnail?r`\n                  <div\n                    class=\"${[\"app\",\"directory\"].includes(t.media_class)?\"centered-image\":\"\"} ${G(t.thumbnail)?\"brand-image\":\"\"} image\"\n                    style=\"background-image: ${nt(e,\"\")}\"\n                  ></div>\n                `:r`\n                  <div class=\"icon-holder image\">\n                    <ha-svg-icon\n                      class=\"folder\"\n                      .path=${N[\"directory\"===t.media_class&&t.children_media_class||t.media_class].icon}\n                    ></ha-svg-icon>\n                  </div>\n                `}\n            ${t.can_play?r`\n                  <ha-icon-button\n                    class=\"play ${y({can_expand:t.can_expand})}\"\n                    .item=${t}\n                    .label=${this.hass.localize(`ui.components.media-browser.${this.action}-media`)}\n                    .path=${\"play\"===this.action?w:x}\n                    @click=${this._actionClicked}\n                  ></ha-icon-button>\n                `:\"\"}\n          </div>\n          <div class=\"title\">\n            ${t.title}\n            <paper-tooltip fitToVisibleBounds position=\"top\" offset=\"4\"\n              >${t.title}</paper-tooltip\n            >\n          </div>\n        </ha-card>\n      </div>\n    `}}},{kind:\"field\",key:\"_renderListItem\",value(){return t=>{const e=this._currentItem,i=N[e.media_class],a=i.show_list_images&&t.thumbnail?this._getSignedThumbnail(t.thumbnail).then((t=>`url(${t})`)):\"none\";return r`\n      <mwc-list-item\n        @click=${this._childClicked}\n        .item=${t}\n        .graphic=${i.show_list_images?\"medium\":\"avatar\"}\n        dir=${T(this.hass)}\n      >\n        <div\n          class=${y({graphic:!0,thumbnail:!0===i.show_list_images})}\n          style=\"background-image: ${nt(a,\"\")}\"\n          slot=\"graphic\"\n        >\n          <ha-icon-button\n            class=\"play ${y({show:!i.show_list_images||!t.thumbnail})}\"\n            .item=${t}\n            .label=${this.hass.localize(`ui.components.media-browser.${this.action}-media`)}\n            .path=${\"play\"===this.action?w:x}\n            @click=${this._actionClicked}\n          ></ha-icon-button>\n        </div>\n        <span class=\"title\">${t.title}</span>\n      </mwc-list-item>\n    `}}},{kind:\"method\",key:\"_getSignedThumbnail\",value:async function(t){if(!t)return\"\";if(t.startsWith(\"/\"))return(await H(this.hass,t)).path;var e;G(t)&&(t=K({domain:Y(t),type:\"icon\",useFallback:!0,darkOptimized:null===(e=this.hass.themes)||void 0===e?void 0:e.darkMode}));return t}},{kind:\"field\",key:\"_actionClicked\",value(){return t=>{t.stopPropagation();const e=t.currentTarget.item;this._runAction(e)}}},{kind:\"method\",key:\"_runAction\",value:function(t){b(this,\"media-picked\",{item:t,navigateIds:this.navigateIds})}},{kind:\"method\",key:\"_ttsPicked\",value:function(t){t.stopPropagation();const e=this.navigateIds.slice(0,-1);e.push(t.detail.item),b(this,\"media-picked\",{...t.detail,navigateIds:e})}},{kind:\"field\",key:\"_childClicked\",value(){return async t=>{const e=t.currentTarget.item;e&&(e.can_expand?b(this,\"media-browsed\",{ids:[...this.navigateIds,e]}):this._runAction(e))}}},{kind:\"method\",key:\"_fetchData\",value:async function(t,e,i){return t!==U?B(this.hass,t,e,i):wt(this.hass,e)}},{kind:\"method\",key:\"_measureCard\",value:function(){this._narrow=(this.dialog?window.innerWidth:this.offsetWidth)<450}},{kind:\"method\",key:\"_attachResizeObserver\",value:async function(){this._resizeObserver||(await F(),this._resizeObserver=new ResizeObserver(j((()=>this._measureCard()),250,!1))),this._resizeObserver.observe(this)}},{kind:\"method\",key:\"_closeDialogAction\",value:function(){b(this,\"close-dialog\")}},{kind:\"method\",key:\"_setError\",value:function(t){this.dialog?t&&(this._closeDialogAction(),q(this,{title:this.hass.localize(\"ui.components.media-browser.media_browsing_error\"),text:this._renderError(t)})):this._error=t}},{kind:\"method\",key:\"_renderError\",value:function(t){return\"Media directory does not exist.\"===t.message?r`\n        <h2>\n          ${this.hass.localize(\"ui.components.media-browser.no_local_media_found\")}\n        </h2>\n        <p>\n          ${this.hass.localize(\"ui.components.media-browser.no_media_folder\")}\n          <br />\n          ${this.hass.localize(\"ui.components.media-browser.setup_local_help\",\"documentation\",r`<a\n              href=${W(this.hass,\"/more-info/local-media/setup-media\")}\n              target=\"_blank\"\n              rel=\"noreferrer\"\n              >${this.hass.localize(\"ui.components.media-browser.documentation\")}</a\n            >`)}\n          <br />\n          ${this.hass.localize(\"ui.components.media-browser.local_media_files\")}\n        </p>\n      `:r`<span class=\"error\">${t.message}</span>`}},{kind:\"method\",key:\"_setHeaderHeight\",value:async function(){await this.updateComplete;const t=this._header,e=this._content;t&&e&&(this._headerOffsetHeight=t.offsetHeight,e.style.marginTop=`${this._headerOffsetHeight}px`,e.style.maxHeight=`calc(var(--media-browser-max-height, 100%) - ${this._headerOffsetHeight}px)`)}},{kind:\"method\",key:\"_animateHeaderHeight\",value:function(){let t;const e=i=>{void 0===t&&(t=i);const a=i-t;this._setHeaderHeight(),a<400&&requestAnimationFrame(e)};requestAnimationFrame(e)}},{kind:\"method\",decorators:[z({passive:!0})],key:\"_scroll\",value:function(t){const e=t.currentTarget;!this._scrolled&&e.scrollTop>this._headerOffsetHeight?this._scrolled=!0:this._scrolled&&e.scrollTop<this._headerOffsetHeight&&(this._scrolled=!1)}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[C,l`\n        :host {\n          display: flex;\n          flex-direction: column;\n          position: relative;\n        }\n\n        ha-circular-progress {\n          --mdc-theme-primary: var(--primary-color);\n          display: flex;\n          justify-content: center;\n          margin: 40px;\n        }\n\n        .container {\n          padding: 16px;\n        }\n\n        .no-items {\n          padding-left: 32px;\n        }\n\n        .highlight-add-button {\n          display: flex;\n          flex-direction: row-reverse;\n          margin-right: 48px;\n        }\n\n        .highlight-add-button ha-svg-icon {\n          position: relative;\n          top: -0.5em;\n          margin-left: 8px;\n        }\n\n        .content {\n          overflow-y: auto;\n          box-sizing: border-box;\n          height: 100%;\n        }\n\n        /* HEADER */\n\n        .header {\n          display: flex;\n          justify-content: space-between;\n          border-bottom: 1px solid var(--divider-color);\n          background-color: var(--card-background-color);\n          position: absolute;\n          top: 0;\n          right: 0;\n          left: 0;\n          z-index: 5;\n          padding: 16px;\n        }\n        .header_button {\n          position: relative;\n          right: -8px;\n        }\n        .header-content {\n          display: flex;\n          flex-wrap: wrap;\n          flex-grow: 1;\n          align-items: flex-start;\n        }\n        .header-content .img {\n          height: 175px;\n          width: 175px;\n          margin-right: 16px;\n          background-size: cover;\n          border-radius: 2px;\n          transition: width 0.4s, height 0.4s;\n        }\n        .header-info {\n          display: flex;\n          flex-direction: column;\n          justify-content: space-between;\n          align-self: stretch;\n          min-width: 0;\n          flex: 1;\n        }\n        .header-info mwc-button {\n          display: block;\n          --mdc-theme-primary: var(--primary-color);\n          padding-bottom: 16px;\n        }\n        .breadcrumb {\n          display: flex;\n          flex-direction: column;\n          overflow: hidden;\n          flex-grow: 1;\n          padding-top: 16px;\n        }\n        .breadcrumb .title {\n          font-size: 32px;\n          line-height: 1.2;\n          font-weight: bold;\n          margin: 0;\n          overflow: hidden;\n          display: -webkit-box;\n          -webkit-box-orient: vertical;\n          -webkit-line-clamp: 2;\n          padding-right: 8px;\n        }\n        .breadcrumb .previous-title {\n          font-size: 14px;\n          padding-bottom: 8px;\n          color: var(--secondary-text-color);\n          overflow: hidden;\n          text-overflow: ellipsis;\n          cursor: pointer;\n          --mdc-icon-size: 14px;\n        }\n        .breadcrumb .subtitle {\n          font-size: 16px;\n          overflow: hidden;\n          text-overflow: ellipsis;\n          margin-bottom: 0;\n          transition: height 0.5s, margin 0.5s;\n        }\n\n        .not-shown {\n          font-style: italic;\n          color: var(--secondary-text-color);\n          padding: 8px 16px 8px;\n        }\n\n        .grid.not-shown {\n          display: flex;\n          align-items: center;\n          text-align: center;\n        }\n\n        /* ============= CHILDREN ============= */\n\n        mwc-list {\n          --mdc-list-vertical-padding: 0;\n          --mdc-list-item-graphic-margin: 0;\n          --mdc-theme-text-icon-on-background: var(--secondary-text-color);\n          margin-top: 10px;\n        }\n\n        mwc-list li:last-child {\n          display: none;\n        }\n\n        mwc-list li[divider] {\n          border-bottom-color: var(--divider-color);\n        }\n\n        mwc-list-item {\n          width: 100%;\n        }\n\n        div.children {\n          display: grid;\n          grid-template-columns: repeat(\n            auto-fit,\n            minmax(var(--media-browse-item-size, 175px), 0.1fr)\n          );\n          grid-gap: 16px;\n          padding: 16px;\n        }\n\n        :host([dialog]) .children {\n          grid-template-columns: repeat(\n            auto-fit,\n            minmax(var(--media-browse-item-size, 175px), 0.33fr)\n          );\n        }\n\n        .child {\n          display: flex;\n          flex-direction: column;\n          cursor: pointer;\n        }\n\n        ha-card {\n          position: relative;\n          width: 100%;\n          box-sizing: border-box;\n        }\n\n        .children ha-card .thumbnail {\n          width: 100%;\n          position: relative;\n          box-sizing: border-box;\n          transition: padding-bottom 0.1s ease-out;\n          padding-bottom: 100%;\n        }\n\n        .portrait ha-card .thumbnail {\n          padding-bottom: 150%;\n        }\n\n        ha-card .image {\n          border-radius: 3px 3px 0 0;\n        }\n\n        .image {\n          position: absolute;\n          top: 0;\n          right: 0;\n          left: 0;\n          bottom: 0;\n          background-size: cover;\n          background-repeat: no-repeat;\n          background-position: center;\n        }\n\n        .centered-image {\n          margin: 0 8px;\n          background-size: contain;\n        }\n\n        .brand-image {\n          background-size: 40%;\n        }\n\n        .children ha-card .icon-holder {\n          display: flex;\n          justify-content: center;\n          align-items: center;\n        }\n\n        .child .folder {\n          color: var(--secondary-text-color);\n          --mdc-icon-size: calc(var(--media-browse-item-size, 175px) * 0.4);\n        }\n\n        .child .play {\n          position: absolute;\n          transition: color 0.5s;\n          border-radius: 50%;\n          top: calc(50% - 50px);\n          right: calc(50% - 35px);\n          opacity: 0;\n          transition: opacity 0.1s ease-out;\n        }\n\n        .child .play:not(.can_expand) {\n          --mdc-icon-button-size: 70px;\n          --mdc-icon-size: 48px;\n        }\n\n        ha-card:hover .play {\n          opacity: 1;\n        }\n\n        ha-card:hover .play:not(.can_expand) {\n          color: var(--primary-color);\n        }\n\n        ha-card:hover .play.can_expand {\n          bottom: 8px;\n        }\n\n        .child .play.can_expand {\n          background-color: rgba(var(--rgb-card-background-color), 0.5);\n          top: auto;\n          bottom: 0px;\n          right: 8px;\n          transition: bottom 0.1s ease-out, opacity 0.1s ease-out;\n        }\n\n        .child .play:hover {\n          color: var(--primary-color);\n        }\n\n        .child .title {\n          font-size: 16px;\n          padding-top: 16px;\n          padding-left: 2px;\n          overflow: hidden;\n          display: -webkit-box;\n          -webkit-box-orient: vertical;\n          -webkit-line-clamp: 1;\n          text-overflow: ellipsis;\n        }\n\n        .child ha-card .title {\n          margin-bottom: 16px;\n          padding-left: 16px;\n        }\n\n        mwc-list-item .graphic {\n          background-size: contain;\n          border-radius: 2px;\n          display: flex;\n          align-content: center;\n          align-items: center;\n          line-height: initial;\n        }\n\n        mwc-list-item .graphic .play {\n          opacity: 0;\n          transition: all 0.5s;\n          background-color: rgba(var(--rgb-card-background-color), 0.5);\n          border-radius: 50%;\n          --mdc-icon-button-size: 40px;\n        }\n\n        mwc-list-item:hover .graphic .play {\n          opacity: 1;\n          color: var(--primary-text-color);\n        }\n\n        mwc-list-item .graphic .play.show {\n          opacity: 1;\n          background-color: transparent;\n        }\n\n        mwc-list-item .title {\n          margin-left: 16px;\n        }\n        mwc-list-item[dir=\"rtl\"] .title {\n          margin-right: 16px;\n          margin-left: 0;\n        }\n\n        /* ============= Narrow ============= */\n\n        :host([narrow]) {\n          padding: 0;\n        }\n\n        :host([narrow]) .media-source {\n          padding: 0 24px;\n        }\n\n        :host([narrow]) div.children {\n          grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) !important;\n        }\n\n        :host([narrow]) .breadcrumb .title {\n          font-size: 24px;\n        }\n        :host([narrow]) .header {\n          padding: 0;\n        }\n        :host([narrow]) .header.no-dialog {\n          display: block;\n        }\n        :host([narrow]) .header_button {\n          position: absolute;\n          top: 14px;\n          right: 8px;\n        }\n        :host([narrow]) .header-content {\n          flex-direction: column;\n          flex-wrap: nowrap;\n        }\n        :host([narrow]) .header-content .img {\n          height: auto;\n          width: 100%;\n          margin-right: 0;\n          padding-bottom: 50%;\n          margin-bottom: 8px;\n          position: relative;\n          background-position: center;\n          border-radius: 0;\n          transition: width 0.4s, height 0.4s, padding-bottom 0.4s;\n        }\n        ha-fab {\n          position: absolute;\n          --mdc-theme-secondary: var(--primary-color);\n          bottom: -20px;\n          right: 20px;\n        }\n        :host([narrow]) .header-info mwc-button {\n          margin-top: 16px;\n          margin-bottom: 8px;\n        }\n        :host([narrow]) .header-info {\n          padding: 0 16px 8px;\n        }\n\n        /* ============= Scroll ============= */\n        :host([scroll]) .breadcrumb .subtitle {\n          height: 0;\n          margin: 0;\n        }\n        :host([scroll]) .breadcrumb .title {\n          -webkit-line-clamp: 1;\n        }\n        :host(:not([narrow])[scroll]) .header:not(.no-img) ha-icon-button {\n          align-self: center;\n        }\n        :host([scroll]) .header-info mwc-button,\n        .no-img .header-info mwc-button {\n          padding-right: 4px;\n        }\n        :host([scroll][narrow]) .no-img .header-info mwc-button {\n          padding-right: 16px;\n        }\n        :host([scroll]) .header-info {\n          flex-direction: row;\n        }\n        :host([scroll]) .header-info mwc-button {\n          align-self: center;\n          margin-top: 0;\n          margin-bottom: 0;\n          padding-bottom: 0;\n        }\n        :host([scroll][narrow]) .no-img .header-info {\n          flex-direction: row-reverse;\n        }\n        :host([scroll][narrow]) .header-info {\n          padding: 20px 24px 10px 24px;\n          align-items: center;\n        }\n        :host([scroll]) .header-content {\n          align-items: flex-end;\n          flex-direction: row;\n        }\n        :host([scroll]) .header-content .img {\n          height: 75px;\n          width: 75px;\n        }\n        :host([scroll]) .breadcrumb {\n          padding-top: 0;\n          align-self: center;\n        }\n        :host([scroll][narrow]) .header-content .img {\n          height: 100px;\n          width: 100px;\n          padding-bottom: initial;\n          margin-bottom: 0;\n        }\n        :host([scroll]) ha-fab {\n          bottom: 0px;\n          right: -24px;\n          --mdc-fab-box-shadow: none;\n          --mdc-theme-secondary: rgba(var(--rgb-primary-color), 0.5);\n        }\n\n        lit-virtualizer {\n          height: 100%;\n          overflow: overlay !important;\n          contain: size layout !important;\n        }\n\n        lit-virtualizer.not_shown {\n          height: calc(100% - 36px);\n        }\n      `]}}]}}),o);s([d(\"ha-media-manage-button\")],(function(t,e){return{F:class extends e{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[h({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[h()],key:\"currentItem\",value:void 0},{kind:\"field\",decorators:[m()],key:\"_uploading\",value:()=>0},{kind:\"method\",key:\"render\",value:function(){return this.currentItem&&xt(this.currentItem.media_content_id||\"\")?r`\n      <mwc-button\n        .label=${this.hass.localize(\"ui.components.media-browser.file_management.manage\")}\n        @click=${this._manage}\n      >\n        <ha-svg-icon .path=${I} slot=\"icon\"></ha-svg-icon>\n      </mwc-button>\n    `:r``}},{kind:\"method\",key:\"_manage\",value:function(){var t,e;t=this,e={currentItem:this.currentItem,onClose:()=>b(this,\"media-refresh\")},b(t,\"show-dialog\",{dialogTag:\"dialog-media-manage\",dialogImport:()=>import(\"./c.ba5bc454.js\"),dialogParams:e})}},{kind:\"field\",static:!0,key:\"styles\",value:()=>l`\n    mwc-button {\n      /* We use icon + text to show disabled state */\n      --mdc-button-disabled-ink-color: --mdc-theme-primary;\n    }\n\n    ha-svg-icon[slot=\"icon\"],\n    ha-circular-progress[slot=\"icon\"] {\n      vertical-align: middle;\n    }\n\n    ha-svg-icon[slot=\"icon\"] {\n      margin-inline-start: 0px;\n      margin-inline-end: 8px;\n      direction: var(--direction);\n    }\n  `}]}}),o),s([d(\"dialog-media-player-browse\")],(function(t,e){return{F:class extends e{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[h({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[m()],key:\"_currentItem\",value:void 0},{kind:\"field\",decorators:[m()],key:\"_navigateIds\",value:void 0},{kind:\"field\",decorators:[m()],key:\"_params\",value:void 0},{kind:\"field\",decorators:[v(\"ha-media-player-browse\")],key:\"_browser\",value:void 0},{kind:\"method\",key:\"showDialog\",value:function(t){this._params=t,this._navigateIds=t.navigateIds||[{media_content_id:void 0,media_content_type:void 0}]}},{kind:\"method\",key:\"closeDialog\",value:function(){this._params=void 0,this._navigateIds=void 0,this._currentItem=void 0,b(this,\"dialog-closed\",{dialog:this.localName})}},{kind:\"method\",key:\"render\",value:function(){return this._params&&this._navigateIds?r`\n      <ha-dialog\n        open\n        scrimClickAction\n        escapeKeyAction\n        hideActions\n        flexContent\n        .heading=${this._currentItem?this._currentItem.title:this.hass.localize(\"ui.components.media-browser.media-player-browser\")}\n        @closed=${this.closeDialog}\n      >\n        <ha-header-bar slot=\"heading\">\n          ${this._navigateIds.length>1?r`\n                <ha-icon-button\n                  slot=\"navigationIcon\"\n                  .path=${O}\n                  @click=${this._goBack}\n                ></ha-icon-button>\n              `:\"\"}\n          <span slot=\"title\">\n            ${this._currentItem?this._currentItem.title:this.hass.localize(\"ui.components.media-browser.media-player-browser\")}\n          </span>\n\n          <ha-media-manage-button\n            slot=\"actionItems\"\n            .hass=${this.hass}\n            .currentItem=${this._currentItem}\n            @media-refresh=${this._refreshMedia}\n          ></ha-media-manage-button>\n          <ha-icon-button\n            .label=${this.hass.localize(\"ui.dialogs.generic.close\")}\n            .path=${S}\n            dialogAction=\"close\"\n            slot=\"actionItems\"\n            class=\"header_button\"\n            dir=${T(this.hass)}\n          ></ha-icon-button>\n        </ha-header-bar>\n        <ha-media-player-browse\n          dialog\n          .hass=${this.hass}\n          .entityId=${this._params.entityId}\n          .navigateIds=${this._navigateIds}\n          .action=${this._action}\n          @close-dialog=${this.closeDialog}\n          @media-picked=${this._mediaPicked}\n          @media-browsed=${this._mediaBrowsed}\n        ></ha-media-player-browse>\n      </ha-dialog>\n    `:r``}},{kind:\"method\",key:\"_goBack\",value:function(){var t;this._navigateIds=null===(t=this._navigateIds)||void 0===t?void 0:t.slice(0,-1),this._currentItem=void 0}},{kind:\"method\",key:\"_mediaBrowsed\",value:function(t){this._navigateIds=t.detail.ids,this._currentItem=t.detail.current}},{kind:\"method\",key:\"_mediaPicked\",value:function(t){this._params.mediaPickedCallback(t.detail),\"play\"!==this._action&&this.closeDialog()}},{kind:\"get\",key:\"_action\",value:function(){return this._params.action||\"play\"}},{kind:\"method\",key:\"_refreshMedia\",value:function(){this._browser.refresh()}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[E,l`\n        ha-dialog {\n          --dialog-z-index: 8;\n          --dialog-content-padding: 0;\n        }\n\n        ha-media-player-browse {\n          --media-browser-max-height: calc(100vh - 65px);\n          height: calc(100vh - 65px);\n          direction: ltr;\n        }\n\n        @media (min-width: 800px) {\n          ha-dialog {\n            --mdc-dialog-max-width: 800px;\n            --dialog-surface-position: fixed;\n            --dialog-surface-top: 40px;\n            --mdc-dialog-max-height: calc(100vh - 72px);\n          }\n          ha-media-player-browse {\n            position: initial;\n            --media-browser-max-height: 100vh - 137px;\n            height: 100vh - 137px;\n            width: 700px;\n          }\n        }\n\n        ha-header-bar {\n          --mdc-theme-on-primary: var(--primary-text-color);\n          --mdc-theme-primary: var(--mdc-theme-surface);\n          flex-shrink: 0;\n          border-bottom: 1px solid var(--divider-color, rgba(0, 0, 0, 0.12));\n        }\n\n        ha-media-manage-button {\n          --mdc-theme-primary: var(--mdc-theme-on-primary);\n        }\n      `]}}]}}),o);var Et=Object.freeze({__proto__:null});export{Et as a,wt as b,at as d,xt as i,$t as r,kt as u};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.587d89ba.js",
    "content": "import{Q as s,S as e,T as t,V as r}from\"./main-a0d7432d.js\";import{b as l,d as n,u as o,m as a,c as i}from\"./c.fbd8d2ba.js\";const f=(s,e,t)=>{const r=new Map;for(let l=e;l<=t;l++)r.set(s[l],l);return r},u=s(class extends e{constructor(s){if(super(s),s.type!==t.CHILD)throw Error(\"repeat() can only be used in text expressions\")}dt(s,e,t){let r;void 0===t?t=e:void 0!==e&&(r=e);const l=[],n=[];let o=0;for(const e of s)l[o]=r?r(e,o):o,n[o]=t(e,o),o++;return{values:n,keys:l}}render(s,e,t){return this.dt(s,e,t).values}update(s,[e,t,u]){var d;const c=l(s),{values:h,keys:p}=this.dt(e,t,u);if(!Array.isArray(c))return this.at=p,h;const v=null!==(d=this.at)&&void 0!==d?d:this.at=[],y=[];let m,b,x=0,g=c.length-1,j=0,k=h.length-1;for(;x<=g&&j<=k;)if(null===c[x])x++;else if(null===c[g])g--;else if(v[x]===p[j])y[j]=n(c[x],h[j]),x++,j++;else if(v[g]===p[k])y[k]=n(c[g],h[k]),g--,k--;else if(v[x]===p[k])y[k]=n(c[x],h[k]),o(s,y[k+1],c[x]),x++,k--;else if(v[g]===p[j])y[j]=n(c[g],h[j]),o(s,c[x],c[g]),g--,j++;else if(void 0===m&&(m=f(p,j,k),b=f(v,x,g)),m.has(v[x]))if(m.has(v[g])){const e=b.get(p[j]),t=void 0!==e?c[e]:null;if(null===t){const e=o(s,c[x]);n(e,h[j]),y[j]=e}else y[j]=n(t,h[j]),o(s,c[x],t),c[e]=null;j++}else a(c[g]),g--;else a(c[x]),x++;for(;j<=k;){const e=o(s,y[k+1]);n(e,h[j]),y[j++]=e}for(;x<=g;){const s=c[x++];null!==s&&a(s)}return this.at=p,i(s,y),r}});export{u as c};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.58a9b586.js",
    "content": "import{_ as e,g as t,e as a,t as o,w as i,h as d,R as r,$ as n,o as p,r as c,a as s,L as l,N as m,n as x}from\"./main-a0d7432d.js\";class b extends d{constructor(){super(...arguments),this.mini=!1,this.exited=!1,this.disabled=!1,this.extended=!1,this.showIconAtEnd=!1,this.reducedTouchTarget=!1,this.icon=\"\",this.label=\"\",this.shouldRenderRipple=!1,this.useStateLayerCustomProperties=!1,this.rippleHandlers=new r((()=>(this.shouldRenderRipple=!0,this.ripple)))}render(){const e=this.mini&&!this.reducedTouchTarget,t={\"mdc-fab--mini\":this.mini,\"mdc-fab--touch\":e,\"mdc-fab--exited\":this.exited,\"mdc-fab--extended\":this.extended,\"icon-end\":this.showIconAtEnd},a=this.label?this.label:this.icon;return n`<button\n          class=\"mdc-fab ${p(t)}\"\n          ?disabled=\"${this.disabled}\"\n          aria-label=\"${a}\"\n          @mouseenter=${this.handleRippleMouseEnter}\n          @mouseleave=${this.handleRippleMouseLeave}\n          @focus=${this.handleRippleFocus}\n          @blur=${this.handleRippleBlur}\n          @mousedown=${this.handleRippleActivate}\n          @touchstart=${this.handleRippleStartPress}\n          @touchend=${this.handleRippleDeactivate}\n          @touchcancel=${this.handleRippleDeactivate}><!--\n        -->${this.renderBeforeRipple()}<!--\n        -->${this.renderRipple()}<!--\n        -->${this.showIconAtEnd?this.renderLabel():\"\"}<!--\n        --><span class=\"material-icons mdc-fab__icon\"><!--\n          --><slot name=\"icon\">${this.icon}</slot><!--\n       --></span><!--\n        -->${this.showIconAtEnd?\"\":this.renderLabel()}<!--\n        -->${this.renderTouchTarget()}<!--\n      --></button>`}renderIcon(){return n``}renderTouchTarget(){const e=this.mini&&!this.reducedTouchTarget;return n`${e?n`<div class=\"mdc-fab__touch\"></div>`:\"\"}`}renderLabel(){const e=\"\"!==this.label&&this.extended;return n`${e?n`<span class=\"mdc-fab__label\">${this.label}</span>`:\"\"}`}renderBeforeRipple(){return n``}renderRipple(){return this.shouldRenderRipple?n`<mwc-ripple class=\"ripple\"\n        .internalUseStateLayerCustomProperties=\"${this.useStateLayerCustomProperties}\"\n         ></mwc-ripple>`:\"\"}handleRippleActivate(e){const t=()=>{window.removeEventListener(\"mouseup\",t),this.handleRippleDeactivate()};window.addEventListener(\"mouseup\",t),this.handleRippleStartPress(e)}handleRippleStartPress(e){this.rippleHandlers.startPress(e)}handleRippleDeactivate(){this.rippleHandlers.endPress()}handleRippleMouseEnter(){this.rippleHandlers.startHover()}handleRippleMouseLeave(){this.rippleHandlers.endHover()}handleRippleFocus(){this.rippleHandlers.startFocus()}handleRippleBlur(){this.rippleHandlers.endFocus()}}b.shadowRootOptions={mode:\"open\",delegatesFocus:!0},e([t(\"mwc-ripple\")],b.prototype,\"ripple\",void 0),e([a({type:Boolean})],b.prototype,\"mini\",void 0),e([a({type:Boolean})],b.prototype,\"exited\",void 0),e([a({type:Boolean})],b.prototype,\"disabled\",void 0),e([a({type:Boolean})],b.prototype,\"extended\",void 0),e([a({type:Boolean})],b.prototype,\"showIconAtEnd\",void 0),e([a({type:Boolean})],b.prototype,\"reducedTouchTarget\",void 0),e([a()],b.prototype,\"icon\",void 0),e([a()],b.prototype,\"label\",void 0),e([o()],b.prototype,\"shouldRenderRipple\",void 0),e([o()],b.prototype,\"useStateLayerCustomProperties\",void 0),e([i({passive:!0})],b.prototype,\"handleRippleStartPress\",null);const f=c`:host .mdc-fab .material-icons{font-family:var(--mdc-icon-font, \"Material Icons\");font-weight:normal;font-style:normal;font-size:var(--mdc-icon-size, 24px);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}:host{outline:none;--mdc-ripple-color: currentcolor;user-select:none;-webkit-tap-highlight-color:transparent;display:inline-flex;-webkit-tap-highlight-color:transparent;display:inline-flex;outline:none;user-select:none}:host .mdc-touch-target-wrapper{display:inline}:host .mdc-elevation-overlay{position:absolute;border-radius:inherit;pointer-events:none;opacity:0;opacity:var(--mdc-elevation-overlay-opacity, 0);transition:opacity 280ms cubic-bezier(0.4, 0, 0.2, 1);background-color:#fff;background-color:var(--mdc-elevation-overlay-color, #fff)}:host .mdc-fab{position:relative;display:inline-flex;position:relative;align-items:center;justify-content:center;box-sizing:border-box;width:56px;height:56px;padding:0;border:none;fill:currentColor;text-decoration:none;cursor:pointer;user-select:none;-moz-appearance:none;-webkit-appearance:none;overflow:visible;transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1),opacity 15ms linear 30ms,transform 270ms 0ms cubic-bezier(0, 0, 0.2, 1)}:host .mdc-fab .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}:host .mdc-fab::-moz-focus-inner{padding:0;border:0}:host .mdc-fab:hover{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12)}:host .mdc-fab.mdc-ripple-upgraded--background-focused,:host .mdc-fab:not(.mdc-ripple-upgraded):focus{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12)}:host .mdc-fab:active,:host .mdc-fab:focus:active{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 12px 17px 2px rgba(0, 0, 0, 0.14),0px 5px 22px 4px rgba(0,0,0,.12)}:host .mdc-fab:active,:host .mdc-fab:focus{outline:none}:host .mdc-fab:hover{cursor:pointer}:host .mdc-fab>svg{width:100%}:host .mdc-fab--mini{width:40px;height:40px}:host .mdc-fab--extended{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-button-font-size, 0.875rem);line-height:2.25rem;line-height:var(--mdc-typography-button-line-height, 2.25rem);font-weight:500;font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:0.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing, 0.0892857143em);text-decoration:none;text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform, uppercase);border-radius:24px;padding-left:20px;padding-right:20px;width:auto;max-width:100%;height:48px;line-height:normal}:host .mdc-fab--extended .mdc-fab__ripple{border-radius:24px}:host .mdc-fab--extended .mdc-fab__icon{margin-left:calc(12px - 20px);margin-right:12px}[dir=rtl] :host .mdc-fab--extended .mdc-fab__icon,:host .mdc-fab--extended .mdc-fab__icon[dir=rtl]{margin-left:12px;margin-right:calc(12px - 20px)}:host .mdc-fab--extended .mdc-fab__label+.mdc-fab__icon{margin-left:12px;margin-right:calc(12px - 20px)}[dir=rtl] :host .mdc-fab--extended .mdc-fab__label+.mdc-fab__icon,:host .mdc-fab--extended .mdc-fab__label+.mdc-fab__icon[dir=rtl]{margin-left:calc(12px - 20px);margin-right:12px}:host .mdc-fab--touch{margin-top:4px;margin-bottom:4px;margin-right:4px;margin-left:4px}:host .mdc-fab--touch .mdc-fab__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%, -50%)}:host .mdc-fab::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid transparent;border-radius:inherit;content:\"\";pointer-events:none}:host .mdc-fab__label{justify-content:flex-start;text-overflow:ellipsis;white-space:nowrap;overflow-x:hidden;overflow-y:visible}:host .mdc-fab__icon{transition:transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1);fill:currentColor;will-change:transform}:host .mdc-fab .mdc-fab__icon{display:inline-flex;align-items:center;justify-content:center}:host .mdc-fab--exited{transform:scale(0);opacity:0;transition:opacity 15ms linear 150ms,transform 180ms 0ms cubic-bezier(0.4, 0, 1, 1)}:host .mdc-fab--exited .mdc-fab__icon{transform:scale(0);transition:transform 135ms 0ms cubic-bezier(0.4, 0, 1, 1)}:host .mdc-fab{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786);box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2),0px 6px 10px 0px rgba(0, 0, 0, 0.14),0px 1px 18px 0px rgba(0,0,0,.12)}:host .mdc-fab .mdc-fab__icon{width:24px;height:24px;font-size:24px}:host .mdc-fab,:host .mdc-fab:not(:disabled) .mdc-fab__icon,:host .mdc-fab:not(:disabled) .mdc-fab__label,:host .mdc-fab:disabled .mdc-fab__icon,:host .mdc-fab:disabled .mdc-fab__label{color:#fff;color:var(--mdc-theme-on-secondary, #fff)}:host .mdc-fab:not(.mdc-fab--extended){border-radius:50%}:host .mdc-fab:not(.mdc-fab--extended) .mdc-fab__ripple{border-radius:50%}:host .mdc-fab{position:relative;display:inline-flex;position:relative;align-items:center;justify-content:center;box-sizing:border-box;width:56px;height:56px;padding:0;border:none;fill:currentColor;text-decoration:none;cursor:pointer;user-select:none;-moz-appearance:none;-webkit-appearance:none;overflow:visible;transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1),opacity 15ms linear 30ms,transform 270ms 0ms cubic-bezier(0, 0, 0.2, 1)}:host .mdc-fab .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}:host .mdc-fab::-moz-focus-inner{padding:0;border:0}:host .mdc-fab:hover{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12)}:host .mdc-fab.mdc-ripple-upgraded--background-focused,:host .mdc-fab:not(.mdc-ripple-upgraded):focus{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12)}:host .mdc-fab:active,:host .mdc-fab:focus:active{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2),0px 12px 17px 2px rgba(0, 0, 0, 0.14),0px 5px 22px 4px rgba(0,0,0,.12)}:host .mdc-fab:active,:host .mdc-fab:focus{outline:none}:host .mdc-fab:hover{cursor:pointer}:host .mdc-fab>svg{width:100%}:host .mdc-fab--mini{width:40px;height:40px}:host .mdc-fab--extended{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-button-font-size, 0.875rem);line-height:2.25rem;line-height:var(--mdc-typography-button-line-height, 2.25rem);font-weight:500;font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:0.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing, 0.0892857143em);text-decoration:none;text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform, uppercase);border-radius:24px;padding-left:20px;padding-right:20px;width:auto;max-width:100%;height:48px;line-height:normal}:host .mdc-fab--extended .mdc-fab__ripple{border-radius:24px}:host .mdc-fab--extended .mdc-fab__icon{margin-left:calc(12px - 20px);margin-right:12px}[dir=rtl] :host .mdc-fab--extended .mdc-fab__icon,:host .mdc-fab--extended .mdc-fab__icon[dir=rtl]{margin-left:12px;margin-right:calc(12px - 20px)}:host .mdc-fab--extended .mdc-fab__label+.mdc-fab__icon{margin-left:12px;margin-right:calc(12px - 20px)}[dir=rtl] :host .mdc-fab--extended .mdc-fab__label+.mdc-fab__icon,:host .mdc-fab--extended .mdc-fab__label+.mdc-fab__icon[dir=rtl]{margin-left:calc(12px - 20px);margin-right:12px}:host .mdc-fab--touch{margin-top:4px;margin-bottom:4px;margin-right:4px;margin-left:4px}:host .mdc-fab--touch .mdc-fab__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%, -50%)}:host .mdc-fab::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:1px solid transparent;border-radius:inherit;content:\"\";pointer-events:none}:host .mdc-fab__label{justify-content:flex-start;text-overflow:ellipsis;white-space:nowrap;overflow-x:hidden;overflow-y:visible}:host .mdc-fab__icon{transition:transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1);fill:currentColor;will-change:transform}:host .mdc-fab .mdc-fab__icon{display:inline-flex;align-items:center;justify-content:center}:host .mdc-fab--exited{transform:scale(0);opacity:0;transition:opacity 15ms linear 150ms,transform 180ms 0ms cubic-bezier(0.4, 0, 1, 1)}:host .mdc-fab--exited .mdc-fab__icon{transform:scale(0);transition:transform 135ms 0ms cubic-bezier(0.4, 0, 1, 1)}:host .mdc-fab .ripple{overflow:hidden}:host .mdc-fab:not(.mdc-fab--extended) .ripple{border-radius:50%}:host .mdc-fab.mdc-fab--extended .ripple{border-radius:24px}:host .mdc-fab .mdc-fab__label{z-index:0}:host .mdc-fab .mdc-fab__icon ::slotted(*){width:inherit;height:inherit;font-size:inherit}:host .mdc-fab--extended.mdc-fab--exited .mdc-fab__icon ::slotted(*){transform:scale(0);transition:transform 135ms 0ms cubic-bezier(0.4, 0, 1, 1)}:host .mdc-fab{padding-top:0px;padding-top:max(0px, var(--mdc-fab-focus-outline-width, 0px));padding-right:0px;padding-right:max(0px, var(--mdc-fab-focus-outline-width, 0px));padding-bottom:0px;padding-bottom:max(0px, var(--mdc-fab-focus-outline-width, 0px));padding-left:0px;padding-left:max(0px, var(--mdc-fab-focus-outline-width, 0px));box-shadow:0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12);box-shadow:var(--mdc-fab-box-shadow, 0px 3px 5px -1px rgba(0, 0, 0, 0.2), 0px 6px 10px 0px rgba(0, 0, 0, 0.14), 0px 1px 18px 0px rgba(0, 0, 0, 0.12))}:host .mdc-fab:not(:disabled).mdc-ripple-upgraded--background-focused,:host .mdc-fab:not(:disabled):not(.mdc-ripple-upgraded):focus{border-color:initial;border-color:var(--mdc-fab-focus-outline-color, initial)}:host .mdc-fab:not(:disabled).mdc-ripple-upgraded--background-focused,:host .mdc-fab:not(:disabled):not(.mdc-ripple-upgraded):focus{border-style:solid;border-width:var(--mdc-fab-focus-outline-width, 0px);padding-top:0px;padding-top:max(calc(0px - var(--mdc-fab-focus-outline-width, 0px)), calc(calc(0px - var(--mdc-fab-focus-outline-width, 0px)) * -1));padding-right:0px;padding-right:max(calc(0px - var(--mdc-fab-focus-outline-width, 0px)), calc(calc(0px - var(--mdc-fab-focus-outline-width, 0px)) * -1));padding-bottom:0px;padding-bottom:max(calc(0px - var(--mdc-fab-focus-outline-width, 0px)), calc(calc(0px - var(--mdc-fab-focus-outline-width, 0px)) * -1));padding-left:0px;padding-left:max(calc(0px - var(--mdc-fab-focus-outline-width, 0px)), calc(calc(0px - var(--mdc-fab-focus-outline-width, 0px)) * -1))}:host .mdc-fab:hover,:host .mdc-fab:focus{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);box-shadow:var(--mdc-fab-box-shadow, 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12))}:host .mdc-fab:active{box-shadow:0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12);box-shadow:var(--mdc-fab-box-shadow, 0px 7px 8px -4px rgba(0, 0, 0, 0.2), 0px 12px 17px 2px rgba(0, 0, 0, 0.14), 0px 5px 22px 4px rgba(0, 0, 0, 0.12))}:host .mdc-fab .ripple{overflow:hidden}:host .mdc-fab .mdc-fab__label{z-index:0}:host .mdc-fab:not(.mdc-fab--extended) .ripple{border-radius:50%}:host .mdc-fab.mdc-fab--extended .ripple{border-radius:24px}:host .mdc-fab .mdc-fab__icon{width:24px;width:var(--mdc-icon-size, 24px);height:24px;height:var(--mdc-icon-size, 24px);font-size:24px;font-size:var(--mdc-icon-size, 24px);transition:transform 180ms 90ms cubic-bezier(0, 0, 0.2, 1);fill:currentColor;will-change:transform;display:inline-flex;align-items:center;justify-content:center}:host .mdc-fab.mdc-fab--extended{padding-top:0px;padding-top:max(0px, var(--mdc-fab-focus-outline-width, 0px));padding-right:20px;padding-right:max(var(--mdc-fab-extended-label-padding, 20px), var(--mdc-fab-focus-outline-width, 0px));padding-bottom:0px;padding-bottom:max(0px, var(--mdc-fab-focus-outline-width, 0px));padding-left:20px;padding-left:max(var(--mdc-fab-extended-label-padding, 20px), var(--mdc-fab-focus-outline-width, 0px))}:host .mdc-fab.mdc-fab--extended:not(:disabled).mdc-ripple-upgraded--background-focused,:host .mdc-fab.mdc-fab--extended:not(:disabled):not(.mdc-ripple-upgraded):focus{border-style:solid;border-width:var(--mdc-fab-focus-outline-width, 0px);padding-top:0px;padding-top:max(calc(0px - var(--mdc-fab-focus-outline-width, 0px)), calc(calc(0px - var(--mdc-fab-focus-outline-width, 0px)) * -1));padding-right:20px;padding-right:max(calc(var(--mdc-fab-extended-label-padding, 20px) - var(--mdc-fab-focus-outline-width, 0px)), calc(calc(var(--mdc-fab-extended-label-padding, 20px) - var(--mdc-fab-focus-outline-width, 0px)) * -1));padding-bottom:0px;padding-bottom:max(calc(0px - var(--mdc-fab-focus-outline-width, 0px)), calc(calc(0px - var(--mdc-fab-focus-outline-width, 0px)) * -1));padding-left:20px;padding-left:max(calc(var(--mdc-fab-extended-label-padding, 20px) - var(--mdc-fab-focus-outline-width, 0px)), calc(calc(var(--mdc-fab-extended-label-padding, 20px) - var(--mdc-fab-focus-outline-width, 0px)) * -1))}:host .mdc-fab.mdc-fab--extended.icon-end .mdc-fab__icon{margin-left:12px;margin-left:var(--mdc-fab-extended-icon-padding, 12px);margin-right:calc(12px - 20px);margin-right:calc(var(--mdc-fab-extended-icon-padding, 12px) - var(--mdc-fab-extended-label-padding, 20px))}[dir=rtl] :host .mdc-fab.mdc-fab--extended.icon-end .mdc-fab__icon,:host .mdc-fab.mdc-fab--extended.icon-end .mdc-fab__icon[dir=rtl]{margin-left:calc(12px - 20px);margin-left:calc(var(--mdc-fab-extended-icon-padding, 12px) - var(--mdc-fab-extended-label-padding, 20px));margin-right:12px;margin-right:var(--mdc-fab-extended-icon-padding, 12px)}`;s([x(\"ha-fab\")],(function(e,t){class a extends t{constructor(...t){super(...t),e(this)}}return{F:a,d:[{kind:\"method\",key:\"firstUpdated\",value:function(e){l(m(a.prototype),\"firstUpdated\",this).call(this,e),this.style.setProperty(\"--mdc-theme-secondary\",\"var(--primary-color)\")}},{kind:\"field\",static:!0,key:\"styles\",value:()=>[f,c`\n      :host .mdc-fab--extended .mdc-fab__icon {\n        margin-inline-start: -8px;\n        margin-inline-end: 12px;\n        direction: var(--direction);\n      }\n    `,\"rtl\"===document.dir?c`\n          :host .mdc-fab--extended .mdc-fab__icon {\n            direction: rtl;\n          }\n        `:c``]}]}}),b);\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.5b87ad2c.js",
    "content": "import{m as o}from\"./c.9d6aaabf.js\";import{a as t}from\"./c.bca0f55d.js\";const n=async(n,s)=>t(n,{title:\"Home Assistant Community Store\",confirmText:s.localize(\"common.close\"),text:o.html(`\\n  **${s.localize(\"dialog_about.integration_version\")}:** | ${s.info.version}\\n  --|--\\n  **${s.localize(\"dialog_about.frontend_version\")}:** | 20220709114425\\n  **${s.localize(\"common.repositories\")}:** | ${s.repositories.length}\\n  **${s.localize(\"dialog_about.downloaded_repositories\")}:** | ${s.repositories.filter((o=>o.installed)).length}\\n\\n  **${s.localize(\"dialog_about.useful_links\")}:**\\n\\n  - [General documentation](https://hacs.xyz/)\\n  - [Configuration](https://hacs.xyz/docs/configuration/start)\\n  - [FAQ](https://hacs.xyz/docs/faq/what)\\n  - [GitHub](https://github.com/hacs)\\n  - [Discord](https://discord.gg/apgchf8)\\n  - [Become a GitHub sponsor? ❤️](https://github.com/sponsors/ludeeus)\\n  - [BuyMe~~Coffee~~Beer? 🍺🙈](https://buymeacoffee.com/ludeeus)\\n\\n  ***\\n\\n  _Everything you find in HACS is **not** tested by Home Assistant, that includes HACS itself.\\n  The HACS and Home Assistant teams do not support **anything** you find here._`)});export{n as s};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.5ba288d8.js",
    "content": "import{u as e,v as t,M as c,_ as i,e as r,K as s,i as o,g as d,t as a,w as n,B as h,R as l,y as p,$ as u,j as m,r as b,A as w,a as v,L as k,N as f,n as _}from\"./main-a0d7432d.js\";import{o as y}from\"./c.8e28b461.js\";var g={CHECKED:\"mdc-switch--checked\",DISABLED:\"mdc-switch--disabled\"},C={ARIA_CHECKED_ATTR:\"aria-checked\",NATIVE_CONTROL_SELECTOR:\".mdc-switch__native-control\",RIPPLE_SURFACE_SELECTOR:\".mdc-switch__thumb-underlay\"},x=function(c){function i(e){return c.call(this,t(t({},i.defaultAdapter),e))||this}return e(i,c),Object.defineProperty(i,\"strings\",{get:function(){return C},enumerable:!1,configurable:!0}),Object.defineProperty(i,\"cssClasses\",{get:function(){return g},enumerable:!1,configurable:!0}),Object.defineProperty(i,\"defaultAdapter\",{get:function(){return{addClass:function(){},removeClass:function(){},setNativeControlChecked:function(){},setNativeControlDisabled:function(){},setNativeControlAttr:function(){}}},enumerable:!1,configurable:!0}),i.prototype.setChecked=function(e){this.adapter.setNativeControlChecked(e),this.updateAriaChecked(e),this.updateCheckedStyling(e)},i.prototype.setDisabled=function(e){this.adapter.setNativeControlDisabled(e),e?this.adapter.addClass(g.DISABLED):this.adapter.removeClass(g.DISABLED)},i.prototype.handleChange=function(e){var t=e.target;this.updateAriaChecked(t.checked),this.updateCheckedStyling(t.checked)},i.prototype.updateCheckedStyling=function(e){e?this.adapter.addClass(g.CHECKED):this.adapter.removeClass(g.CHECKED)},i.prototype.updateAriaChecked=function(e){this.adapter.setNativeControlAttr(C.ARIA_CHECKED_ATTR,\"\"+!!e)},i}(c);class R extends h{constructor(){super(...arguments),this.checked=!1,this.disabled=!1,this.shouldRenderRipple=!1,this.mdcFoundationClass=x,this.rippleHandlers=new l((()=>(this.shouldRenderRipple=!0,this.ripple)))}changeHandler(e){this.mdcFoundation.handleChange(e),this.checked=this.formElement.checked}createAdapter(){return Object.assign(Object.assign({},p(this.mdcRoot)),{setNativeControlChecked:e=>{this.formElement.checked=e},setNativeControlDisabled:e=>{this.formElement.disabled=e},setNativeControlAttr:(e,t)=>{this.formElement.setAttribute(e,t)}})}renderRipple(){return this.shouldRenderRipple?u`\n        <mwc-ripple\n          .accent=\"${this.checked}\"\n          .disabled=\"${this.disabled}\"\n          unbounded>\n        </mwc-ripple>`:\"\"}focus(){const e=this.formElement;e&&(this.rippleHandlers.startFocus(),e.focus())}blur(){const e=this.formElement;e&&(this.rippleHandlers.endFocus(),e.blur())}click(){this.formElement&&!this.disabled&&(this.formElement.focus(),this.formElement.click())}firstUpdated(){super.firstUpdated(),this.shadowRoot&&this.mdcRoot.addEventListener(\"change\",(e=>{this.dispatchEvent(new Event(\"change\",e))}))}render(){return u`\n      <div class=\"mdc-switch\">\n        <div class=\"mdc-switch__track\"></div>\n        <div class=\"mdc-switch__thumb-underlay\">\n          ${this.renderRipple()}\n          <div class=\"mdc-switch__thumb\">\n            <input\n              type=\"checkbox\"\n              id=\"basic-switch\"\n              class=\"mdc-switch__native-control\"\n              role=\"switch\"\n              aria-label=\"${m(this.ariaLabel)}\"\n              aria-labelledby=\"${m(this.ariaLabelledBy)}\"\n              @change=\"${this.changeHandler}\"\n              @focus=\"${this.handleRippleFocus}\"\n              @blur=\"${this.handleRippleBlur}\"\n              @mousedown=\"${this.handleRippleMouseDown}\"\n              @mouseenter=\"${this.handleRippleMouseEnter}\"\n              @mouseleave=\"${this.handleRippleMouseLeave}\"\n              @touchstart=\"${this.handleRippleTouchStart}\"\n              @touchend=\"${this.handleRippleDeactivate}\"\n              @touchcancel=\"${this.handleRippleDeactivate}\">\n          </div>\n        </div>\n      </div>`}handleRippleMouseDown(e){const t=()=>{window.removeEventListener(\"mouseup\",t),this.handleRippleDeactivate()};window.addEventListener(\"mouseup\",t),this.rippleHandlers.startPress(e)}handleRippleTouchStart(e){this.rippleHandlers.startPress(e)}handleRippleDeactivate(){this.rippleHandlers.endPress()}handleRippleMouseEnter(){this.rippleHandlers.startHover()}handleRippleMouseLeave(){this.rippleHandlers.endHover()}handleRippleFocus(){this.rippleHandlers.startFocus()}handleRippleBlur(){this.rippleHandlers.endFocus()}}i([r({type:Boolean}),y((function(e){this.mdcFoundation.setChecked(e)}))],R.prototype,\"checked\",void 0),i([r({type:Boolean}),y((function(e){this.mdcFoundation.setDisabled(e)}))],R.prototype,\"disabled\",void 0),i([s,r({attribute:\"aria-label\"})],R.prototype,\"ariaLabel\",void 0),i([s,r({attribute:\"aria-labelledby\"})],R.prototype,\"ariaLabelledBy\",void 0),i([o(\".mdc-switch\")],R.prototype,\"mdcRoot\",void 0),i([o(\"input\")],R.prototype,\"formElement\",void 0),i([d(\"mwc-ripple\")],R.prototype,\"ripple\",void 0),i([a()],R.prototype,\"shouldRenderRipple\",void 0),i([n({passive:!0})],R.prototype,\"handleRippleMouseDown\",null),i([n({passive:!0})],R.prototype,\"handleRippleTouchStart\",null);const E=b`.mdc-switch__thumb-underlay{left:-14px;right:initial;top:-17px;width:48px;height:48px}[dir=rtl] .mdc-switch__thumb-underlay,.mdc-switch__thumb-underlay[dir=rtl]{left:initial;right:-14px}.mdc-switch__native-control{width:64px;height:48px}.mdc-switch{display:inline-block;position:relative;outline:none;user-select:none}.mdc-switch.mdc-switch--checked .mdc-switch__track{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786)}.mdc-switch.mdc-switch--checked .mdc-switch__thumb{background-color:#018786;background-color:var(--mdc-theme-secondary, #018786);border-color:#018786;border-color:var(--mdc-theme-secondary, #018786)}.mdc-switch:not(.mdc-switch--checked) .mdc-switch__track{background-color:#000;background-color:var(--mdc-theme-on-surface, #000)}.mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb{background-color:#fff;background-color:var(--mdc-theme-surface, #fff);border-color:#fff;border-color:var(--mdc-theme-surface, #fff)}.mdc-switch__native-control{left:0;right:initial;position:absolute;top:0;margin:0;opacity:0;cursor:pointer;pointer-events:auto;transition:transform 90ms cubic-bezier(0.4, 0, 0.2, 1)}[dir=rtl] .mdc-switch__native-control,.mdc-switch__native-control[dir=rtl]{left:initial;right:0}.mdc-switch__track{box-sizing:border-box;width:36px;height:14px;border:1px solid transparent;border-radius:7px;opacity:.38;transition:opacity 90ms cubic-bezier(0.4, 0, 0.2, 1),background-color 90ms cubic-bezier(0.4, 0, 0.2, 1),border-color 90ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-switch__thumb-underlay{display:flex;position:absolute;align-items:center;justify-content:center;transform:translateX(0);transition:transform 90ms cubic-bezier(0.4, 0, 0.2, 1),background-color 90ms cubic-bezier(0.4, 0, 0.2, 1),border-color 90ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-switch__thumb{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0,0,0,.12);box-sizing:border-box;width:20px;height:20px;border:10px solid;border-radius:50%;pointer-events:none;z-index:1}.mdc-switch--checked .mdc-switch__track{opacity:.54}.mdc-switch--checked .mdc-switch__thumb-underlay{transform:translateX(16px)}[dir=rtl] .mdc-switch--checked .mdc-switch__thumb-underlay,.mdc-switch--checked .mdc-switch__thumb-underlay[dir=rtl]{transform:translateX(-16px)}.mdc-switch--checked .mdc-switch__native-control{transform:translateX(-16px)}[dir=rtl] .mdc-switch--checked .mdc-switch__native-control,.mdc-switch--checked .mdc-switch__native-control[dir=rtl]{transform:translateX(16px)}.mdc-switch--disabled{opacity:.38;pointer-events:none}.mdc-switch--disabled .mdc-switch__thumb{border-width:1px}.mdc-switch--disabled .mdc-switch__native-control{cursor:default;pointer-events:none}:host{display:inline-flex;outline:none;-webkit-tap-highlight-color:transparent}`;v([_(\"ha-switch\")],(function(e,t){class c extends t{constructor(...t){super(...t),e(this)}}return{F:c,d:[{kind:\"field\",decorators:[r({type:Boolean})],key:\"haptic\",value:()=>!1},{kind:\"method\",key:\"firstUpdated\",value:function(){k(f(c.prototype),\"firstUpdated\",this).call(this),this.addEventListener(\"change\",(()=>{this.haptic&&w(window,\"haptic\",\"light\")}))}},{kind:\"field\",static:!0,key:\"styles\",value:()=>[E,b`\n      :host {\n        --mdc-theme-secondary: var(--switch-checked-color);\n      }\n      .mdc-switch.mdc-switch--checked .mdc-switch__thumb {\n        background-color: var(--switch-checked-button-color);\n        border-color: var(--switch-checked-button-color);\n      }\n      .mdc-switch.mdc-switch--checked .mdc-switch__track {\n        background-color: var(--switch-checked-track-color);\n        border-color: var(--switch-checked-track-color);\n      }\n      .mdc-switch:not(.mdc-switch--checked) .mdc-switch__thumb {\n        background-color: var(--switch-unchecked-button-color);\n        border-color: var(--switch-unchecked-button-color);\n      }\n      .mdc-switch:not(.mdc-switch--checked) .mdc-switch__track {\n        background-color: var(--switch-unchecked-track-color);\n        border-color: var(--switch-unchecked-track-color);\n      }\n    `]}]}}),R);\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.5ede7966.js",
    "content": "import{a6 as t,a7 as i,a8 as a}from\"./main-a0d7432d.js\";t({_template:i`\n    <style>\n      :host {\n        display: block;\n        position: absolute;\n        outline: none;\n        z-index: 1002;\n        -moz-user-select: none;\n        -ms-user-select: none;\n        -webkit-user-select: none;\n        user-select: none;\n        cursor: default;\n      }\n\n      #tooltip {\n        display: block;\n        outline: none;\n        @apply --paper-font-common-base;\n        font-size: 10px;\n        line-height: 1;\n        background-color: var(--paper-tooltip-background, #616161);\n        color: var(--paper-tooltip-text-color, white);\n        padding: 8px;\n        border-radius: 2px;\n        @apply --paper-tooltip;\n      }\n\n      @keyframes keyFrameScaleUp {\n        0% {\n          transform: scale(0.0);\n        }\n        100% {\n          transform: scale(1.0);\n        }\n      }\n\n      @keyframes keyFrameScaleDown {\n        0% {\n          transform: scale(1.0);\n        }\n        100% {\n          transform: scale(0.0);\n        }\n      }\n\n      @keyframes keyFrameFadeInOpacity {\n        0% {\n          opacity: 0;\n        }\n        100% {\n          opacity: var(--paper-tooltip-opacity, 0.9);\n        }\n      }\n\n      @keyframes keyFrameFadeOutOpacity {\n        0% {\n          opacity: var(--paper-tooltip-opacity, 0.9);\n        }\n        100% {\n          opacity: 0;\n        }\n      }\n\n      @keyframes keyFrameSlideDownIn {\n        0% {\n          transform: translateY(-2000px);\n          opacity: 0;\n        }\n        10% {\n          opacity: 0.2;\n        }\n        100% {\n          transform: translateY(0);\n          opacity: var(--paper-tooltip-opacity, 0.9);\n        }\n      }\n\n      @keyframes keyFrameSlideDownOut {\n        0% {\n          transform: translateY(0);\n          opacity: var(--paper-tooltip-opacity, 0.9);\n        }\n        10% {\n          opacity: 0.2;\n        }\n        100% {\n          transform: translateY(-2000px);\n          opacity: 0;\n        }\n      }\n\n      .fade-in-animation {\n        opacity: 0;\n        animation-delay: var(--paper-tooltip-delay-in, 500ms);\n        animation-name: keyFrameFadeInOpacity;\n        animation-iteration-count: 1;\n        animation-timing-function: ease-in;\n        animation-duration: var(--paper-tooltip-duration-in, 500ms);\n        animation-fill-mode: forwards;\n        @apply --paper-tooltip-animation;\n      }\n\n      .fade-out-animation {\n        opacity: var(--paper-tooltip-opacity, 0.9);\n        animation-delay: var(--paper-tooltip-delay-out, 0ms);\n        animation-name: keyFrameFadeOutOpacity;\n        animation-iteration-count: 1;\n        animation-timing-function: ease-in;\n        animation-duration: var(--paper-tooltip-duration-out, 500ms);\n        animation-fill-mode: forwards;\n        @apply --paper-tooltip-animation;\n      }\n\n      .scale-up-animation {\n        transform: scale(0);\n        opacity: var(--paper-tooltip-opacity, 0.9);\n        animation-delay: var(--paper-tooltip-delay-in, 500ms);\n        animation-name: keyFrameScaleUp;\n        animation-iteration-count: 1;\n        animation-timing-function: ease-in;\n        animation-duration: var(--paper-tooltip-duration-in, 500ms);\n        animation-fill-mode: forwards;\n        @apply --paper-tooltip-animation;\n      }\n\n      .scale-down-animation {\n        transform: scale(1);\n        opacity: var(--paper-tooltip-opacity, 0.9);\n        animation-delay: var(--paper-tooltip-delay-out, 500ms);\n        animation-name: keyFrameScaleDown;\n        animation-iteration-count: 1;\n        animation-timing-function: ease-in;\n        animation-duration: var(--paper-tooltip-duration-out, 500ms);\n        animation-fill-mode: forwards;\n        @apply --paper-tooltip-animation;\n      }\n\n      .slide-down-animation {\n        transform: translateY(-2000px);\n        opacity: 0;\n        animation-delay: var(--paper-tooltip-delay-out, 500ms);\n        animation-name: keyFrameSlideDownIn;\n        animation-iteration-count: 1;\n        animation-timing-function: cubic-bezier(0.0, 0.0, 0.2, 1);\n        animation-duration: var(--paper-tooltip-duration-out, 500ms);\n        animation-fill-mode: forwards;\n        @apply --paper-tooltip-animation;\n      }\n\n      .slide-down-animation-out {\n        transform: translateY(0);\n        opacity: var(--paper-tooltip-opacity, 0.9);\n        animation-delay: var(--paper-tooltip-delay-out, 500ms);\n        animation-name: keyFrameSlideDownOut;\n        animation-iteration-count: 1;\n        animation-timing-function: cubic-bezier(0.4, 0.0, 1, 1);\n        animation-duration: var(--paper-tooltip-duration-out, 500ms);\n        animation-fill-mode: forwards;\n        @apply --paper-tooltip-animation;\n      }\n\n      .cancel-animation {\n        animation-delay: -30s !important;\n      }\n\n      /* Thanks IE 10. */\n\n      .hidden {\n        display: none !important;\n      }\n    </style>\n\n    <div id=\"tooltip\" class=\"hidden\">\n      <slot></slot>\n    </div>\n`,is:\"paper-tooltip\",hostAttributes:{role:\"tooltip\",tabindex:-1},properties:{for:{type:String,observer:\"_findTarget\"},manualMode:{type:Boolean,value:!1,observer:\"_manualModeChanged\"},position:{type:String,value:\"bottom\"},fitToVisibleBounds:{type:Boolean,value:!1},offset:{type:Number,value:14},marginTop:{type:Number,value:14},animationDelay:{type:Number,value:500,observer:\"_delayChange\"},animationEntry:{type:String,value:\"\"},animationExit:{type:String,value:\"\"},animationConfig:{type:Object,value:function(){return{entry:[{name:\"fade-in-animation\",node:this,timing:{delay:0}}],exit:[{name:\"fade-out-animation\",node:this}]}}},_showing:{type:Boolean,value:!1}},listeners:{webkitAnimationEnd:\"_onAnimationEnd\"},get target(){var t=a(this).parentNode,i=a(this).getOwnerRoot();return this.for?a(i).querySelector(\"#\"+this.for):t.nodeType==Node.DOCUMENT_FRAGMENT_NODE?i.host:t},attached:function(){this._findTarget()},detached:function(){this.manualMode||this._removeListeners()},playAnimation:function(t){\"entry\"===t?this.show():\"exit\"===t&&this.hide()},cancelAnimation:function(){this.$.tooltip.classList.add(\"cancel-animation\")},show:function(){if(!this._showing){if(\"\"===a(this).textContent.trim()){for(var t=!0,i=a(this).getEffectiveChildNodes(),n=0;n<i.length;n++)if(\"\"!==i[n].textContent.trim()){t=!1;break}if(t)return}this._showing=!0,this.$.tooltip.classList.remove(\"hidden\"),this.$.tooltip.classList.remove(\"cancel-animation\"),this.$.tooltip.classList.remove(this._getAnimationType(\"exit\")),this.updatePosition(),this._animationPlaying=!0,this.$.tooltip.classList.add(this._getAnimationType(\"entry\"))}},hide:function(){if(this._showing){if(this._animationPlaying)return this._showing=!1,void this._cancelAnimation();this._onAnimationFinish(),this._showing=!1,this._animationPlaying=!0}},updatePosition:function(){if(this._target&&this.offsetParent){var t=this.offset;14!=this.marginTop&&14==this.offset&&(t=this.marginTop);var i,a,n=this.offsetParent.getBoundingClientRect(),e=this._target.getBoundingClientRect(),o=this.getBoundingClientRect(),s=(e.width-o.width)/2,r=(e.height-o.height)/2,l=e.left-n.left,p=e.top-n.top;switch(this.position){case\"top\":i=l+s,a=p-o.height-t;break;case\"bottom\":i=l+s,a=p+e.height+t;break;case\"left\":i=l-o.width-t,a=p+r;break;case\"right\":i=l+e.width+t,a=p+r}this.fitToVisibleBounds?(n.left+i+o.width>window.innerWidth?(this.style.right=\"0px\",this.style.left=\"auto\"):(this.style.left=Math.max(0,i)+\"px\",this.style.right=\"auto\"),n.top+a+o.height>window.innerHeight?(this.style.bottom=n.height-p+t+\"px\",this.style.top=\"auto\"):(this.style.top=Math.max(-n.top,a)+\"px\",this.style.bottom=\"auto\")):(this.style.left=i+\"px\",this.style.top=a+\"px\")}},_addListeners:function(){this._target&&(this.listen(this._target,\"mouseenter\",\"show\"),this.listen(this._target,\"focus\",\"show\"),this.listen(this._target,\"mouseleave\",\"hide\"),this.listen(this._target,\"blur\",\"hide\"),this.listen(this._target,\"tap\",\"hide\")),this.listen(this.$.tooltip,\"animationend\",\"_onAnimationEnd\"),this.listen(this,\"mouseenter\",\"hide\")},_findTarget:function(){this.manualMode||this._removeListeners(),this._target=this.target,this.manualMode||this._addListeners()},_delayChange:function(t){500!==t&&this.updateStyles({\"--paper-tooltip-delay-in\":t+\"ms\"})},_manualModeChanged:function(){this.manualMode?this._removeListeners():this._addListeners()},_cancelAnimation:function(){this.$.tooltip.classList.remove(this._getAnimationType(\"entry\")),this.$.tooltip.classList.remove(this._getAnimationType(\"exit\")),this.$.tooltip.classList.remove(\"cancel-animation\"),this.$.tooltip.classList.add(\"hidden\")},_onAnimationFinish:function(){this._showing&&(this.$.tooltip.classList.remove(this._getAnimationType(\"entry\")),this.$.tooltip.classList.remove(\"cancel-animation\"),this.$.tooltip.classList.add(this._getAnimationType(\"exit\")))},_onAnimationEnd:function(){this._animationPlaying=!1,this._showing||(this.$.tooltip.classList.remove(this._getAnimationType(\"exit\")),this.$.tooltip.classList.add(\"hidden\"))},_getAnimationType:function(t){if(\"entry\"===t&&\"\"!==this.animationEntry)return this.animationEntry;if(\"exit\"===t&&\"\"!==this.animationExit)return this.animationExit;if(this.animationConfig[t]&&\"string\"==typeof this.animationConfig[t][0].name){if(this.animationConfig[t][0].timing&&this.animationConfig[t][0].timing.delay&&0!==this.animationConfig[t][0].timing.delay){var i=this.animationConfig[t][0].timing.delay;\"entry\"===t?this.updateStyles({\"--paper-tooltip-delay-in\":i+\"ms\"}):\"exit\"===t&&this.updateStyles({\"--paper-tooltip-delay-out\":i+\"ms\"})}return this.animationConfig[t][0].name}},_removeListeners:function(){this._target&&(this.unlisten(this._target,\"mouseenter\",\"show\"),this.unlisten(this._target,\"focus\",\"show\"),this.unlisten(this._target,\"mouseleave\",\"hide\"),this.unlisten(this._target,\"blur\",\"hide\"),this.unlisten(this._target,\"tap\",\"hide\")),this.unlisten(this.$.tooltip,\"animationend\",\"_onAnimationEnd\"),this.unlisten(this,\"mouseenter\",\"hide\")}});\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.63dc92d5.js",
    "content": "import{a6 as e,a7 as t,a as o,h as i,e as n,$ as a,r,n as l}from\"./main-a0d7432d.js\";e({_template:t`\n    <style>\n      :host {\n        overflow: hidden; /* needed for text-overflow: ellipsis to work on ff */\n        @apply --layout-vertical;\n        @apply --layout-center-justified;\n        @apply --layout-flex;\n      }\n\n      :host([two-line]) {\n        min-height: var(--paper-item-body-two-line-min-height, 72px);\n      }\n\n      :host([three-line]) {\n        min-height: var(--paper-item-body-three-line-min-height, 88px);\n      }\n\n      :host > ::slotted(*) {\n        overflow: hidden;\n        text-overflow: ellipsis;\n        white-space: nowrap;\n      }\n\n      :host > ::slotted([secondary]) {\n        @apply --paper-font-body1;\n\n        color: var(--paper-item-body-secondary-color, var(--secondary-text-color));\n\n        @apply --paper-item-body-secondary;\n      }\n    </style>\n\n    <slot></slot>\n`,is:\"paper-item-body\"}),o([l(\"ha-settings-row\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[n({type:Boolean,reflect:!0})],key:\"narrow\",value:void 0},{kind:\"field\",decorators:[n({type:Boolean,attribute:\"three-line\"})],key:\"threeLine\",value:()=>!1},{kind:\"method\",key:\"render\",value:function(){return a`\n      <div class=\"prefix-wrap\">\n        <slot name=\"prefix\"></slot>\n        <paper-item-body\n          ?two-line=${!this.threeLine}\n          ?three-line=${this.threeLine}\n        >\n          <slot name=\"heading\"></slot>\n          <div secondary><slot name=\"description\"></slot></div>\n        </paper-item-body>\n      </div>\n      <div class=\"content\"><slot></slot></div>\n    `}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return r`\n      :host {\n        display: flex;\n        padding: 0 16px;\n        align-content: normal;\n        align-self: auto;\n        align-items: center;\n      }\n      paper-item-body {\n        padding: 8px 16px 8px 0;\n      }\n      paper-item-body[two-line] {\n        min-height: calc(\n          var(--paper-item-body-two-line-min-height, 72px) - 16px\n        );\n        flex: 1;\n      }\n      .content {\n        display: contents;\n      }\n      :host(:not([narrow])) .content {\n        display: var(--settings-row-content-display, flex);\n        justify-content: flex-end;\n        flex: 1;\n        padding: 16px 0;\n      }\n      .content ::slotted(*) {\n        width: var(--settings-row-content-width);\n      }\n      :host([narrow]) {\n        align-items: normal;\n        flex-direction: column;\n        border-top: 1px solid var(--divider-color);\n        padding-bottom: 8px;\n      }\n      ::slotted(ha-switch) {\n        padding: 16px 0;\n      }\n      div[secondary] {\n        white-space: normal;\n      }\n      .prefix-wrap {\n        display: var(--settings-row-prefix-display);\n      }\n      :host([narrow]) .prefix-wrap {\n        display: flex;\n        align-items: center;\n      }\n    `}}]}}),i);\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.656daa82.js",
    "content": "var a=[];export{a as default};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.6711bf6c.js",
    "content": "const t=(t,e)=>{const n={};return e&&(e.type&&(n.type_filter=e.type),e.domain&&(n.domain=e.domain)),t.callWS({type:\"config_entries/get\",...n})};export{t as g};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.6b0f0543.js",
    "content": "import{a as e,H as t,e as i,m as o,$ as s,n as r}from\"./main-a0d7432d.js\";import{m as a}from\"./c.9d6aaabf.js\";import\"./c.7ee871d3.js\";import\"./c.d2d70fc0.js\";import\"./c.743a15a1.js\";import\"./c.c608beec.js\";import\"./c.8e28b461.js\";let d=e([r(\"hacs-generic-dialog\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[i({type:Boolean})],key:\"markdown\",value:()=>!1},{kind:\"field\",decorators:[i()],key:\"repository\",value:void 0},{kind:\"field\",decorators:[i()],key:\"header\",value:void 0},{kind:\"field\",decorators:[i()],key:\"content\",value:void 0},{kind:\"field\",key:\"_getRepository\",value:()=>o(((e,t)=>null==e?void 0:e.find((e=>String(e.id)===t))))},{kind:\"method\",key:\"render\",value:function(){if(!this.active||!this.repository)return s``;const e=this._getRepository(this.hacs.repositories,this.repository);return s`\n      <hacs-dialog .active=${this.active} .narrow=${this.narrow} .hass=${this.hass}>\n        <div slot=\"header\">${this.header||\"\"}</div>\n        ${this.markdown?this.repository?a.html(this.content||\"\",e):a.html(this.content||\"\"):this.content||\"\"}\n      </hacs-dialog>\n    `}}]}}),t);export{d as HacsGenericDialog};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.743a15a1.js",
    "content": "var e=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:{};function o(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,\"default\")?e.default:e}function t(e,o){return e(o={exports:{}},o.exports),o.exports}function n(e){return e&&e.default||e}export{e as a,t as c,n as g,o as u};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.7ee871d3.js",
    "content": "import{a as e,H as i,e as t,$ as o,P as s,d as a,r as c,n}from\"./main-a0d7432d.js\";import{c as l}from\"./c.c608beec.js\";e([n(\"hacs-dialog\")],(function(e,i){return{F:class extends i{constructor(...i){super(...i),e(this)}},d:[{kind:\"field\",decorators:[t({type:Boolean})],key:\"hideActions\",value:()=>!1},{kind:\"field\",decorators:[t({type:Boolean})],key:\"scrimClickAction\",value:()=>!1},{kind:\"field\",decorators:[t({type:Boolean})],key:\"escapeKeyAction\",value:()=>!1},{kind:\"field\",decorators:[t({type:Boolean})],key:\"noClose\",value:()=>!1},{kind:\"field\",decorators:[t({type:Boolean})],key:\"maxWidth\",value:()=>!1},{kind:\"field\",decorators:[t()],key:\"title\",value:void 0},{kind:\"method\",key:\"render\",value:function(){return this.active?o`<ha-dialog\n      ?maxWidth=${this.maxWidth}\n      ?open=${this.active}\n      ?scrimClickAction=${this.scrimClickAction}\n      ?escapeKeyAction=${this.escapeKeyAction}\n      @closed=${this.closeDialog}\n      ?hideActions=${this.hideActions}\n      .heading=${this.noClose?this.title:l(this.hass,this.title)}\n    >\n      <slot></slot>\n      <slot class=\"primary\" name=\"primaryaction\" slot=\"primaryAction\"></slot>\n      <slot class=\"secondary\" name=\"secondaryaction\" slot=\"secondaryAction\"></slot>\n    </ha-dialog>`:o``}},{kind:\"method\",key:\"closeDialog\",value:function(){this.active=!1,this.dispatchEvent(new CustomEvent(\"closed\",{bubbles:!0,composed:!0}))}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[s,a,c`\n        ha-dialog[maxWidth] {\n          --mdc-dialog-max-width: calc(100vw - 32px);\n        }\n      `]}}]}}),i);\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.822f38be.js",
    "content": "import{a as o,H as t,e as s,t as i,m as e,a0 as a,a1 as r,$ as l,aj as n,ak as h,a3 as d,ai as c,d as p,r as _,n as m}from\"./main-a0d7432d.js\";import{c as y}from\"./c.4a97632a.js\";import\"./c.175b9792.js\";import\"./c.47f687e9.js\";import{s as v}from\"./c.bca0f55d.js\";import{f as g,r as u,a as f}from\"./c.fe747ba2.js\";import{u as b}from\"./c.dba55e54.js\";import\"./c.d2d70fc0.js\";import\"./c.7ee871d3.js\";import\"./c.c176780d.js\";import\"./c.936d9772.js\";import\"./c.8e28b461.js\";import\"./c.fbd8d2ba.js\";import\"./c.c7df5815.js\";import\"./c.db2e6bb6.js\";import\"./c.c608beec.js\";let w=o([m(\"hacs-download-dialog\")],(function(o,t){return{F:class extends t{constructor(...t){super(...t),o(this)}},d:[{kind:\"field\",decorators:[s()],key:\"repository\",value:void 0},{kind:\"field\",decorators:[i()],key:\"_toggle\",value:()=>!0},{kind:\"field\",decorators:[i()],key:\"_installing\",value:()=>!1},{kind:\"field\",decorators:[i()],key:\"_error\",value:void 0},{kind:\"field\",decorators:[i()],key:\"_repository\",value:void 0},{kind:\"field\",decorators:[i()],key:\"_downloadRepositoryData\",value:()=>({beta:!1,version:\"\"})},{kind:\"method\",key:\"shouldUpdate\",value:function(o){return o.forEach(((o,t)=>{\"hass\"===t&&(this.sidebarDocked='\"docked\"'===window.localStorage.getItem(\"dockedSidebar\")),\"repositories\"===t&&this._fetchRepository()})),o.has(\"sidebarDocked\")||o.has(\"narrow\")||o.has(\"active\")||o.has(\"_toggle\")||o.has(\"_error\")||o.has(\"_repository\")||o.has(\"_downloadRepositoryData\")||o.has(\"_installing\")}},{kind:\"field\",key:\"_getInstallPath\",value:()=>e((o=>{let t=o.local_path;return\"theme\"===o.category&&(t=`${t}/${o.file_name}`),t}))},{kind:\"method\",key:\"firstUpdated\",value:async function(){var o;await this._fetchRepository(),this._toggle=!1,a(this.hass,(o=>this._error=o),r.ERROR),this._downloadRepositoryData.beta=this._repository.beta,this._downloadRepositoryData.version=\"version\"===(null===(o=this._repository)||void 0===o?void 0:o.version_or_commit)?this._repository.releases[0]:\"\"}},{kind:\"method\",key:\"_fetchRepository\",value:async function(){this._repository=await g(this.hass,this.repository)}},{kind:\"method\",key:\"render\",value:function(){var o;if(!this.active||!this._repository)return l``;const t=this._getInstallPath(this._repository),s=[{name:\"beta\",selector:{boolean:{}}},{name:\"version\",selector:{select:{options:\"version\"===this._repository.version_or_commit?this._repository.releases.concat(\"hacs/integration\"===this._repository.full_name||this._repository.hide_default_branch?[]:[this._repository.default_branch]):[],mode:\"dropdown\"}}}];return l`\n      <hacs-dialog\n        .active=${this.active}\n        .narrow=${this.narrow}\n        .hass=${this.hass}\n        .secondary=${this.secondary}\n        .title=${this._repository.name}\n      >\n        <div class=\"content\">\n          ${\"version\"===this._repository.version_or_commit?l`\n                <ha-form\n                  .disabled=${this._toggle}\n                  ?narrow=${this.narrow}\n                  .data=${this._downloadRepositoryData}\n                  .schema=${s}\n                  .computeLabel=${o=>\"beta\"===o.name?this.hacs.localize(\"dialog_download.show_beta\"):this.hacs.localize(\"dialog_download.select_version\")}\n                  @value-changed=${this._valueChanged}\n                >\n                </ha-form>\n              `:\"\"}\n          ${this._repository.can_download?\"\":l`<ha-alert alert-type=\"error\" .rtl=${y(this.hass)}>\n                ${this.hacs.localize(\"confirm.home_assistant_version_not_correct\",{haversion:this.hass.config.version,minversion:this._repository.homeassistant})}\n              </ha-alert>`}\n          <div class=\"note\">\n            ${this.hacs.localize(\"dialog_download.note_downloaded\",{location:l`<code>'${t}'</code>`})}\n            ${\"plugin\"===this._repository.category&&\"storage\"!==this.hacs.info.lovelace_mode?l`\n                  <p>${this.hacs.localize(\"dialog_download.lovelace_instruction\")}</p>\n                  <pre>\n                url: ${n({repository:this._repository,skipTag:!0})}\n                type: module\n                </pre\n                  >\n                `:\"\"}\n            ${\"integration\"===this._repository.category?l`<p>${this.hacs.localize(\"dialog_download.restart\")}</p>`:\"\"}\n          </div>\n          ${null!==(o=this._error)&&void 0!==o&&o.message?l`<ha-alert alert-type=\"error\" .rtl=${y(this.hass)}>\n                ${this._error.message}\n              </ha-alert>`:\"\"}\n        </div>\n        <mwc-button\n          slot=\"primaryaction\"\n          ?disabled=${!(this._repository.can_download&&!this._toggle&&\"version\"!==this._repository.version_or_commit)&&!this._downloadRepositoryData.version}\n          @click=${this._installRepository}\n        >\n          ${this._installing?l`<ha-circular-progress active size=\"small\"></ha-circular-progress>`:this.hacs.localize(\"common.download\")}\n        </mwc-button>\n      </hacs-dialog>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:async function(o){let t=!1;if(this._downloadRepositoryData.beta!==o.detail.value.beta&&(t=!0,this._toggle=!0,await h(this.hass,this.repository,o.detail.value.beta)),o.detail.value.version&&(t=!0,this._toggle=!0,await u(this.hass,this.repository,o.detail.value.version)),t){const o=await d(this.hass);await this._fetchRepository(),this.dispatchEvent(new CustomEvent(\"update-hacs\",{detail:{repositories:o},bubbles:!0,composed:!0})),this._toggle=!1}this._downloadRepositoryData=o.detail.value}},{kind:\"method\",key:\"_installRepository\",value:async function(){var o;if(this._installing=!0,!this._repository)return;const t=this._downloadRepositoryData.version||this._repository.available_version||this._repository.default_branch;\"commit\"!==(null===(o=this._repository)||void 0===o?void 0:o.version_or_commit)?await f(this.hass,String(this._repository.id),t):await f(this.hass,String(this._repository.id)),this.hacs.log.debug(this._repository.category,\"_installRepository\"),this.hacs.log.debug(this.hacs.info.lovelace_mode,\"_installRepository\"),\"plugin\"===this._repository.category&&\"storage\"===this.hacs.info.lovelace_mode&&await b(this.hass,this._repository,t),this._installing=!1,this.dispatchEvent(new Event(\"hacs-secondary-dialog-closed\",{bubbles:!0,composed:!0})),this.dispatchEvent(new Event(\"hacs-dialog-closed\",{bubbles:!0,composed:!0})),\"plugin\"===this._repository.category&&v(this,{title:this.hacs.localize(\"common.reload\"),text:l`${this.hacs.localize(\"dialog.reload.description\")}<br />${this.hacs.localize(\"dialog.reload.confirm\")}`,dismissText:this.hacs.localize(\"common.cancel\"),confirmText:this.hacs.localize(\"common.reload\"),confirm:()=>{c.location.href=c.location.href}})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[p,_`\n        .note {\n          margin-top: 12px;\n        }\n        .lovelace {\n          margin-top: 8px;\n        }\n        pre {\n          white-space: pre-line;\n          user-select: all;\n        }\n      `]}}]}}),t);export{w as HacsDonwloadDialog};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.88ebfd3e.js",
    "content": "import{a as r,h as a,e as o,r as e,$ as d,n as t}from\"./main-a0d7432d.js\";r([t(\"ha-card\")],(function(r,a){return{F:class extends a{constructor(...a){super(...a),r(this)}},d:[{kind:\"field\",decorators:[o()],key:\"header\",value:void 0},{kind:\"field\",decorators:[o({type:Boolean,reflect:!0})],key:\"outlined\",value:()=>!1},{kind:\"get\",static:!0,key:\"styles\",value:function(){return e`\n      :host {\n        background: var(\n          --ha-card-background,\n          var(--card-background-color, white)\n        );\n        border-radius: var(--ha-card-border-radius, 4px);\n        box-shadow: var(\n          --ha-card-box-shadow,\n          0px 2px 1px -1px rgba(0, 0, 0, 0.2),\n          0px 1px 1px 0px rgba(0, 0, 0, 0.14),\n          0px 1px 3px 0px rgba(0, 0, 0, 0.12)\n        );\n        color: var(--primary-text-color);\n        display: block;\n        transition: all 0.3s ease-out;\n        position: relative;\n      }\n\n      :host([outlined]) {\n        box-shadow: none;\n        border-width: var(--ha-card-border-width, 1px);\n        border-style: solid;\n        border-color: var(\n          --ha-card-border-color,\n          var(--divider-color, #e0e0e0)\n        );\n      }\n\n      .card-header,\n      :host ::slotted(.card-header) {\n        color: var(--ha-card-header-color, --primary-text-color);\n        font-family: var(--ha-card-header-font-family, inherit);\n        font-size: var(--ha-card-header-font-size, 24px);\n        letter-spacing: -0.012em;\n        line-height: 48px;\n        padding: 12px 16px 16px;\n        display: block;\n        margin-block-start: 0px;\n        margin-block-end: 0px;\n        font-weight: normal;\n      }\n\n      :host ::slotted(.card-content:not(:first-child)),\n      slot:not(:first-child)::slotted(.card-content) {\n        padding-top: 0px;\n        margin-top: -8px;\n      }\n\n      :host ::slotted(.card-content) {\n        padding: 16px;\n      }\n\n      :host ::slotted(.card-actions) {\n        border-top: 1px solid var(--divider-color, #e8e8e8);\n        padding: 5px 16px;\n      }\n    `}},{kind:\"method\",key:\"render\",value:function(){return d`\n      ${this.header?d`<h1 class=\"card-header\">${this.header}</h1>`:d``}\n      <slot></slot>\n    `}}]}}),a);\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.8e28b461.js",
    "content": "const r=r=>(s,o)=>{if(s.constructor._observers){if(!s.constructor.hasOwnProperty(\"_observers\")){const r=s.constructor._observers;s.constructor._observers=new Map,r.forEach(((r,o)=>s.constructor._observers.set(o,r)))}}else{s.constructor._observers=new Map;const r=s.updated;s.updated=function(s){r.call(this,s),s.forEach(((r,s)=>{const o=this.constructor._observers.get(s);void 0!==o&&o.call(this,this[s],r)}))}}s.constructor._observers.set(o,r)};export{r as o};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.8f19de42.js",
    "content": "import{aE as t,a8 as e,aF as i,aG as s,aH as n,a6 as o,a7 as r}from\"./main-a0d7432d.js\";var a=new Set;const l=[{properties:{_parentResizable:{type:Object,observer:\"_parentResizableChanged\"},_notifyingDescendant:{type:Boolean,value:!1}},listeners:{\"iron-request-resize-notifications\":\"_onIronRequestResizeNotifications\"},created:function(){this._interestedResizables=[],this._boundNotifyResize=this.notifyResize.bind(this),this._boundOnDescendantIronResize=this._onDescendantIronResize.bind(this)},attached:function(){this._requestResizeNotifications()},detached:function(){this._parentResizable?this._parentResizable.stopResizeNotificationsFor(this):(a.delete(this),window.removeEventListener(\"resize\",this._boundNotifyResize)),this._parentResizable=null},notifyResize:function(){this.isAttached&&(this._interestedResizables.forEach((function(t){this.resizerShouldNotify(t)&&this._notifyDescendant(t)}),this),this._fireResize())},assignParentResizable:function(t){this._parentResizable&&this._parentResizable.stopResizeNotificationsFor(this),this._parentResizable=t,t&&-1===t._interestedResizables.indexOf(this)&&(t._interestedResizables.push(this),t._subscribeIronResize(this))},stopResizeNotificationsFor:function(t){var e=this._interestedResizables.indexOf(t);e>-1&&(this._interestedResizables.splice(e,1),this._unsubscribeIronResize(t))},_subscribeIronResize:function(t){t.addEventListener(\"iron-resize\",this._boundOnDescendantIronResize)},_unsubscribeIronResize:function(t){t.removeEventListener(\"iron-resize\",this._boundOnDescendantIronResize)},resizerShouldNotify:function(t){return!0},_onDescendantIronResize:function(e){this._notifyingDescendant?e.stopPropagation():t||this._fireResize()},_fireResize:function(){this.fire(\"iron-resize\",null,{node:this,bubbles:!1})},_onIronRequestResizeNotifications:function(t){var i=e(t).rootTarget;i!==this&&(i.assignParentResizable(this),this._notifyDescendant(i),t.stopPropagation())},_parentResizableChanged:function(t){t&&window.removeEventListener(\"resize\",this._boundNotifyResize)},_notifyDescendant:function(t){this.isAttached&&(this._notifyingDescendant=!0,t.notifyResize(),this._notifyingDescendant=!1)},_requestResizeNotifications:function(){if(this.isAttached)if(\"loading\"===document.readyState){var t=this._requestResizeNotifications.bind(this);document.addEventListener(\"readystatechange\",(function e(){document.removeEventListener(\"readystatechange\",e),t()}))}else this._findParent(),this._parentResizable?this._parentResizable._interestedResizables.forEach((function(t){t!==this&&t._findParent()}),this):(a.forEach((function(t){t!==this&&t._findParent()}),this),window.addEventListener(\"resize\",this._boundNotifyResize),this.notifyResize())},_findParent:function(){this.assignParentResizable(null),this.fire(\"iron-request-resize-notifications\",null,{node:this,bubbles:!0,cancelable:!0}),this._parentResizable?a.delete(this):a.add(this)}},{listeners:{\"app-reset-layout\":\"_appResetLayoutHandler\",\"iron-resize\":\"resetLayout\"},attached:function(){this.fire(\"app-reset-layout\")},_appResetLayoutHandler:function(t){e(t).path[0]!==this&&(this.resetLayout(),t.stopPropagation())},_updateLayoutStates:function(){console.error(\"unimplemented\")},resetLayout:function(){var t=this._updateLayoutStates.bind(this);this._layoutDebouncer=i.debounce(this._layoutDebouncer,s,t),n(this._layoutDebouncer),this._notifyDescendantResize()},_notifyLayoutChanged:function(){var t=this;requestAnimationFrame((function(){t.fire(\"app-reset-layout\")}))},_notifyDescendantResize:function(){this.isAttached&&this._interestedResizables.forEach((function(t){this.resizerShouldNotify(t)&&this._notifyDescendant(t)}),this)}}],h={properties:{scrollTarget:{type:HTMLElement,value:function(){return this._defaultScrollTarget}}},observers:[\"_scrollTargetChanged(scrollTarget, isAttached)\"],_shouldHaveListener:!0,_scrollTargetChanged:function(t,i){if(this._oldScrollTarget&&(this._toggleScrollListener(!1,this._oldScrollTarget),this._oldScrollTarget=null),i)if(\"document\"===t)this.scrollTarget=this._doc;else if(\"string\"==typeof t){var s=this.domHost;this.scrollTarget=s&&s.$?s.$[t]:e(this.ownerDocument).querySelector(\"#\"+t)}else this._isValidScrollTarget()&&(this._oldScrollTarget=t,this._toggleScrollListener(this._shouldHaveListener,t))},_scrollHandler:function(){},get _defaultScrollTarget(){return this._doc},get _doc(){return this.ownerDocument.documentElement},get _scrollTop(){return this._isValidScrollTarget()?this.scrollTarget===this._doc?window.pageYOffset:this.scrollTarget.scrollTop:0},get _scrollLeft(){return this._isValidScrollTarget()?this.scrollTarget===this._doc?window.pageXOffset:this.scrollTarget.scrollLeft:0},set _scrollTop(t){this.scrollTarget===this._doc?window.scrollTo(window.pageXOffset,t):this._isValidScrollTarget()&&(this.scrollTarget.scrollTop=t)},set _scrollLeft(t){this.scrollTarget===this._doc?window.scrollTo(t,window.pageYOffset):this._isValidScrollTarget()&&(this.scrollTarget.scrollLeft=t)},scroll:function(t,e){var i;\"object\"==typeof t?(i=t.left,e=t.top):i=t,i=i||0,e=e||0,this.scrollTarget===this._doc?window.scrollTo(i,e):this._isValidScrollTarget()&&(this.scrollTarget.scrollLeft=i,this.scrollTarget.scrollTop=e)},get _scrollTargetWidth(){return this._isValidScrollTarget()?this.scrollTarget===this._doc?window.innerWidth:this.scrollTarget.offsetWidth:0},get _scrollTargetHeight(){return this._isValidScrollTarget()?this.scrollTarget===this._doc?window.innerHeight:this.scrollTarget.offsetHeight:0},_isValidScrollTarget:function(){return this.scrollTarget instanceof HTMLElement},_toggleScrollListener:function(t,e){var i=e===this._doc?window:e;t?this._boundScrollHandler||(this._boundScrollHandler=this._scrollHandler.bind(this),i.addEventListener(\"scroll\",this._boundScrollHandler)):this._boundScrollHandler&&(i.removeEventListener(\"scroll\",this._boundScrollHandler),this._boundScrollHandler=null)},toggleScrollListener:function(t){this._shouldHaveListener=t,this._toggleScrollListener(t,this.scrollTarget)}},c={};o({_template:r`\n    <style>\n      :host {\n        position: relative;\n        display: block;\n        transition-timing-function: linear;\n        transition-property: -webkit-transform;\n        transition-property: transform;\n      }\n\n      :host::before {\n        position: absolute;\n        right: 0px;\n        bottom: -5px;\n        left: 0px;\n        width: 100%;\n        height: 5px;\n        content: \"\";\n        transition: opacity 0.4s;\n        pointer-events: none;\n        opacity: 0;\n        box-shadow: inset 0px 5px 6px -3px rgba(0, 0, 0, 0.4);\n        will-change: opacity;\n        @apply --app-header-shadow;\n      }\n\n      :host([shadow])::before {\n        opacity: 1;\n      }\n\n      #background {\n        @apply --layout-fit;\n        overflow: hidden;\n      }\n\n      #backgroundFrontLayer,\n      #backgroundRearLayer {\n        @apply --layout-fit;\n        height: 100%;\n        pointer-events: none;\n        background-size: cover;\n      }\n\n      #backgroundFrontLayer {\n        @apply --app-header-background-front-layer;\n      }\n\n      #backgroundRearLayer {\n        opacity: 0;\n        @apply --app-header-background-rear-layer;\n      }\n\n      #contentContainer {\n        position: relative;\n        width: 100%;\n        height: 100%;\n      }\n\n      :host([disabled]),\n      :host([disabled])::after,\n      :host([disabled]) #backgroundFrontLayer,\n      :host([disabled]) #backgroundRearLayer,\n      /* Silent scrolling should not run CSS transitions */\n      :host([silent-scroll]),\n      :host([silent-scroll])::after,\n      :host([silent-scroll]) #backgroundFrontLayer,\n      :host([silent-scroll]) #backgroundRearLayer {\n        transition: none !important;\n      }\n\n      :host([disabled]) ::slotted(app-toolbar:first-of-type),\n      :host([disabled]) ::slotted([sticky]),\n      /* Silent scrolling should not run CSS transitions */\n      :host([silent-scroll]) ::slotted(app-toolbar:first-of-type),\n      :host([silent-scroll]) ::slotted([sticky]) {\n        transition: none !important;\n      }\n\n    </style>\n    <div id=\"contentContainer\">\n      <slot id=\"slot\"></slot>\n    </div>\n`,is:\"app-header\",behaviors:[[h,{properties:{effects:{type:String},effectsConfig:{type:Object,value:function(){return{}}},disabled:{type:Boolean,reflectToAttribute:!0,value:!1},threshold:{type:Number,value:0},thresholdTriggered:{type:Boolean,notify:!0,readOnly:!0,reflectToAttribute:!0}},observers:[\"_effectsChanged(effects, effectsConfig, isAttached)\"],_updateScrollState:function(t){},isOnScreen:function(){return!1},isContentBelow:function(){return!1},_effectsRunFn:null,_effects:null,get _clampedScrollTop(){return Math.max(0,this._scrollTop)},attached:function(){this._scrollStateChanged()},detached:function(){this._tearDownEffects()},createEffect:function(t,e){var i=c[t];if(!i)throw new ReferenceError(this._getUndefinedMsg(t));var s=this._boundEffect(i,e||{});return s.setUp(),s},_effectsChanged:function(t,e,i){this._tearDownEffects(),t&&i&&(t.split(\" \").forEach((function(t){var i;\"\"!==t&&((i=c[t])?this._effects.push(this._boundEffect(i,e[t])):console.warn(this._getUndefinedMsg(t)))}),this),this._setUpEffect())},_layoutIfDirty:function(){return this.offsetWidth},_boundEffect:function(t,e){e=e||{};var i=parseFloat(e.startsAt||0),s=parseFloat(e.endsAt||1),n=s-i,o=function(){},r=0===i&&1===s?t.run:function(e,s){t.run.call(this,Math.max(0,(e-i)/n),s)};return{setUp:t.setUp?t.setUp.bind(this,e):o,run:t.run?r.bind(this):o,tearDown:t.tearDown?t.tearDown.bind(this):o}},_setUpEffect:function(){this.isAttached&&this._effects&&(this._effectsRunFn=[],this._effects.forEach((function(t){!1!==t.setUp()&&this._effectsRunFn.push(t.run)}),this))},_tearDownEffects:function(){this._effects&&this._effects.forEach((function(t){t.tearDown()})),this._effectsRunFn=[],this._effects=[]},_runEffects:function(t,e){this._effectsRunFn&&this._effectsRunFn.forEach((function(i){i(t,e)}))},_scrollHandler:function(){this._scrollStateChanged()},_scrollStateChanged:function(){if(!this.disabled){var t=this._clampedScrollTop;this._updateScrollState(t),this.threshold>0&&this._setThresholdTriggered(t>=this.threshold)}},_getDOMRef:function(t){console.warn(\"_getDOMRef\",\"`\"+t+\"` is undefined\")},_getUndefinedMsg:function(t){return\"Scroll effect `\"+t+\"` is undefined. Did you forget to import app-layout/app-scroll-effects/effects/\"+t+\".html ?\"}}],l],properties:{condenses:{type:Boolean,value:!1},fixed:{type:Boolean,value:!1},reveals:{type:Boolean,value:!1},shadow:{type:Boolean,reflectToAttribute:!0,value:!1}},observers:[\"_configChanged(isAttached, condenses, fixed)\"],_height:0,_dHeight:0,_stickyElTop:0,_stickyElRef:null,_top:0,_progress:0,_wasScrollingDown:!1,_initScrollTop:0,_initTimestamp:0,_lastTimestamp:0,_lastScrollTop:0,get _maxHeaderTop(){return this.fixed?this._dHeight:this._height+5},get _stickyEl(){if(this._stickyElRef)return this._stickyElRef;for(var t,i=e(this.$.slot).getDistributedNodes(),s=0;t=i[s];s++)if(t.nodeType===Node.ELEMENT_NODE){if(t.hasAttribute(\"sticky\")){this._stickyElRef=t;break}this._stickyElRef||(this._stickyElRef=t)}return this._stickyElRef},_configChanged:function(){this.resetLayout(),this._notifyLayoutChanged()},_updateLayoutStates:function(){if(0!==this.offsetWidth||0!==this.offsetHeight){var t=this._clampedScrollTop,e=0===this._height||0===t,i=this.disabled;this._height=this.offsetHeight,this._stickyElRef=null,this.disabled=!0,e||this._updateScrollState(0,!0),this._mayMove()?this._dHeight=this._stickyEl?this._height-this._stickyEl.offsetHeight:0:this._dHeight=0,this._stickyElTop=this._stickyEl?this._stickyEl.offsetTop:0,this._setUpEffect(),e?this._updateScrollState(t,!0):(this._updateScrollState(this._lastScrollTop,!0),this._layoutIfDirty()),this.disabled=i}},_updateScrollState:function(t,e){if(0!==this._height){var i=0,s=0,n=this._top;this._lastScrollTop;var o=this._maxHeaderTop,r=t-this._lastScrollTop,a=Math.abs(r),l=t>this._lastScrollTop,h=performance.now();if(this._mayMove()&&(s=this._clamp(this.reveals?n+r:t,0,o)),t>=this._dHeight&&(s=this.condenses&&!this.fixed?Math.max(this._dHeight,s):s,this.style.transitionDuration=\"0ms\"),this.reveals&&!this.disabled&&a<100&&((h-this._initTimestamp>300||this._wasScrollingDown!==l)&&(this._initScrollTop=t,this._initTimestamp=h),t>=o))if(Math.abs(this._initScrollTop-t)>30||a>10){l&&t>=o?s=o:!l&&t>=this._dHeight&&(s=this.condenses&&!this.fixed?this._dHeight:0);var c=r/(h-this._lastTimestamp);this.style.transitionDuration=this._clamp((s-n)/c,0,300)+\"ms\"}else s=this._top;i=0===this._dHeight?t>0?1:0:s/this._dHeight,e||(this._lastScrollTop=t,this._top=s,this._wasScrollingDown=l,this._lastTimestamp=h),(e||i!==this._progress||n!==s||0===t)&&(this._progress=i,this._runEffects(i,s),this._transformHeader(s))}},_mayMove:function(){return this.condenses||!this.fixed},willCondense:function(){return this._dHeight>0&&this.condenses},isOnScreen:function(){return 0!==this._height&&this._top<this._height},isContentBelow:function(){return 0===this._top?this._clampedScrollTop>0:this._clampedScrollTop-this._maxHeaderTop>=0},_transformHeader:function(t){this.translate3d(0,-t+\"px\",0),this._stickyEl&&this.translate3d(0,this.condenses&&t>=this._stickyElTop?Math.min(t,this._dHeight)-this._stickyElTop+\"px\":0,0,this._stickyEl)},_clamp:function(t,e,i){return Math.min(i,Math.max(e,t))},_ensureBgContainers:function(){this._bgContainer||(this._bgContainer=document.createElement(\"div\"),this._bgContainer.id=\"background\",this._bgRear=document.createElement(\"div\"),this._bgRear.id=\"backgroundRearLayer\",this._bgContainer.appendChild(this._bgRear),this._bgFront=document.createElement(\"div\"),this._bgFront.id=\"backgroundFrontLayer\",this._bgContainer.appendChild(this._bgFront),e(this.root).insertBefore(this._bgContainer,this.$.contentContainer))},_getDOMRef:function(t){switch(t){case\"backgroundFrontLayer\":return this._ensureBgContainers(),this._bgFront;case\"backgroundRearLayer\":return this._ensureBgContainers(),this._bgRear;case\"background\":return this._ensureBgContainers(),this._bgContainer;case\"mainTitle\":return e(this).querySelector(\"[main-title]\");case\"condensedTitle\":return e(this).querySelector(\"[condensed-title]\")}return null},getScrollState:function(){return{progress:this._progress,top:this._top}}});export{l as A};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.936d9772.js",
    "content": "import{l as t,f as e,_ as i,i as s,g as r,e as d,t as a,h as n,R as o,$ as c,o as l,r as m,n as h,M as p,B as u,j as g,k as _,p as f,q as x}from\"./main-a0d7432d.js\";import{o as v}from\"./c.8e28b461.js\";function E(i,s,r){let d,a=i;return\"object\"==typeof i?(a=i.slot,d=i):d={flatten:s},r?t({slot:a,flatten:s,selector:r}):e({descriptor:t=>({get(){var t,e;const i=\"slot\"+(a?`[name=${a}]`:\":not([name])\"),s=null===(t=this.renderRoot)||void 0===t?void 0:t.querySelector(i);return null!==(e=null==s?void 0:s.assignedNodes(d))&&void 0!==e?e:[]},enumerable:!0,configurable:!0})})}class I extends n{constructor(){super(...arguments),this.value=\"\",this.group=null,this.tabindex=-1,this.disabled=!1,this.twoline=!1,this.activated=!1,this.graphic=null,this.multipleGraphics=!1,this.hasMeta=!1,this.noninteractive=!1,this.selected=!1,this.shouldRenderRipple=!1,this._managingList=null,this.boundOnClick=this.onClick.bind(this),this._firstChanged=!0,this._skipPropRequest=!1,this.rippleHandlers=new o((()=>(this.shouldRenderRipple=!0,this.ripple))),this.listeners=[{target:this,eventNames:[\"click\"],cb:()=>{this.onClick()}},{target:this,eventNames:[\"mouseenter\"],cb:this.rippleHandlers.startHover},{target:this,eventNames:[\"mouseleave\"],cb:this.rippleHandlers.endHover},{target:this,eventNames:[\"focus\"],cb:this.rippleHandlers.startFocus},{target:this,eventNames:[\"blur\"],cb:this.rippleHandlers.endFocus},{target:this,eventNames:[\"mousedown\",\"touchstart\"],cb:t=>{const e=t.type;this.onDown(\"mousedown\"===e?\"mouseup\":\"touchend\",t)}}]}get text(){const t=this.textContent;return t?t.trim():\"\"}render(){const t=this.renderText(),e=this.graphic?this.renderGraphic():c``,i=this.hasMeta?this.renderMeta():c``;return c`\n      ${this.renderRipple()}\n      ${e}\n      ${t}\n      ${i}`}renderRipple(){return this.shouldRenderRipple?c`\n      <mwc-ripple\n        .activated=${this.activated}>\n      </mwc-ripple>`:this.activated?c`<div class=\"fake-activated-ripple\"></div>`:\"\"}renderGraphic(){const t={multi:this.multipleGraphics};return c`\n      <span class=\"mdc-deprecated-list-item__graphic material-icons ${l(t)}\">\n        <slot name=\"graphic\"></slot>\n      </span>`}renderMeta(){return c`\n      <span class=\"mdc-deprecated-list-item__meta material-icons\">\n        <slot name=\"meta\"></slot>\n      </span>`}renderText(){const t=this.twoline?this.renderTwoline():this.renderSingleLine();return c`\n      <span class=\"mdc-deprecated-list-item__text\">\n        ${t}\n      </span>`}renderSingleLine(){return c`<slot></slot>`}renderTwoline(){return c`\n      <span class=\"mdc-deprecated-list-item__primary-text\">\n        <slot></slot>\n      </span>\n      <span class=\"mdc-deprecated-list-item__secondary-text\">\n        <slot name=\"secondary\"></slot>\n      </span>\n    `}onClick(){this.fireRequestSelected(!this.selected,\"interaction\")}onDown(t,e){const i=()=>{window.removeEventListener(t,i),this.rippleHandlers.endPress()};window.addEventListener(t,i),this.rippleHandlers.startPress(e)}fireRequestSelected(t,e){if(this.noninteractive)return;const i=new CustomEvent(\"request-selected\",{bubbles:!0,composed:!0,detail:{source:e,selected:t}});this.dispatchEvent(i)}connectedCallback(){super.connectedCallback(),this.noninteractive||this.setAttribute(\"mwc-list-item\",\"\");for(const t of this.listeners)for(const e of t.eventNames)t.target.addEventListener(e,t.cb,{passive:!0})}disconnectedCallback(){super.disconnectedCallback();for(const t of this.listeners)for(const e of t.eventNames)t.target.removeEventListener(e,t.cb);this._managingList&&(this._managingList.debouncedLayout?this._managingList.debouncedLayout(!0):this._managingList.layout(!0))}firstUpdated(){const t=new Event(\"list-item-rendered\",{bubbles:!0,composed:!0});this.dispatchEvent(t)}}i([s(\"slot\")],I.prototype,\"slotElement\",void 0),i([r(\"mwc-ripple\")],I.prototype,\"ripple\",void 0),i([d({type:String})],I.prototype,\"value\",void 0),i([d({type:String,reflect:!0})],I.prototype,\"group\",void 0),i([d({type:Number,reflect:!0})],I.prototype,\"tabindex\",void 0),i([d({type:Boolean,reflect:!0}),v((function(t){t?this.setAttribute(\"aria-disabled\",\"true\"):this.setAttribute(\"aria-disabled\",\"false\")}))],I.prototype,\"disabled\",void 0),i([d({type:Boolean,reflect:!0})],I.prototype,\"twoline\",void 0),i([d({type:Boolean,reflect:!0})],I.prototype,\"activated\",void 0),i([d({type:String,reflect:!0})],I.prototype,\"graphic\",void 0),i([d({type:Boolean})],I.prototype,\"multipleGraphics\",void 0),i([d({type:Boolean})],I.prototype,\"hasMeta\",void 0),i([d({type:Boolean,reflect:!0}),v((function(t){t?(this.removeAttribute(\"aria-checked\"),this.removeAttribute(\"mwc-list-item\"),this.selected=!1,this.activated=!1,this.tabIndex=-1):this.setAttribute(\"mwc-list-item\",\"\")}))],I.prototype,\"noninteractive\",void 0),i([d({type:Boolean,reflect:!0}),v((function(t){const e=this.getAttribute(\"role\"),i=\"gridcell\"===e||\"option\"===e||\"row\"===e||\"tab\"===e;i&&t?this.setAttribute(\"aria-selected\",\"true\"):i&&this.setAttribute(\"aria-selected\",\"false\"),this._firstChanged?this._firstChanged=!1:this._skipPropRequest||this.fireRequestSelected(t,\"property\")}))],I.prototype,\"selected\",void 0),i([a()],I.prototype,\"shouldRenderRipple\",void 0),i([a()],I.prototype,\"_managingList\",void 0);const b=m`:host{cursor:pointer;user-select:none;-webkit-tap-highlight-color:transparent;height:48px;display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;padding:0;padding-left:var(--mdc-list-side-padding, 16px);padding-right:var(--mdc-list-side-padding, 16px);outline:none;height:48px;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87))}:host:focus{outline:none}:host([activated]){color:#6200ee;color:var(--mdc-theme-primary, #6200ee);--mdc-ripple-color: var( --mdc-theme-primary, #6200ee )}:host([activated]) .mdc-deprecated-list-item__graphic{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}:host([activated]) .fake-activated-ripple::before{position:absolute;display:block;top:0;bottom:0;left:0;right:0;width:100%;height:100%;pointer-events:none;z-index:1;content:\"\";opacity:0.12;opacity:var(--mdc-ripple-activated-opacity, 0.12);background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-deprecated-list-item__graphic{flex-shrink:0;align-items:center;justify-content:center;fill:currentColor;display:inline-flex}.mdc-deprecated-list-item__graphic ::slotted(*){flex-shrink:0;align-items:center;justify-content:center;fill:currentColor;width:100%;height:100%;text-align:center}.mdc-deprecated-list-item__meta{width:var(--mdc-list-item-meta-size, 24px);height:var(--mdc-list-item-meta-size, 24px);margin-left:auto;margin-right:0;color:rgba(0, 0, 0, 0.38);color:var(--mdc-theme-text-hint-on-background, rgba(0, 0, 0, 0.38))}.mdc-deprecated-list-item__meta.multi{width:auto}.mdc-deprecated-list-item__meta ::slotted(*){width:var(--mdc-list-item-meta-size, 24px);line-height:var(--mdc-list-item-meta-size, 24px)}.mdc-deprecated-list-item__meta ::slotted(.material-icons),.mdc-deprecated-list-item__meta ::slotted(mwc-icon){line-height:var(--mdc-list-item-meta-size, 24px) !important}.mdc-deprecated-list-item__meta ::slotted(:not(.material-icons):not(mwc-icon)){-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.75rem;font-size:var(--mdc-typography-caption-font-size, 0.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:0.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, 0.0333333333em);text-decoration:inherit;text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform, inherit)}[dir=rtl] .mdc-deprecated-list-item__meta,.mdc-deprecated-list-item__meta[dir=rtl]{margin-left:0;margin-right:auto}.mdc-deprecated-list-item__meta ::slotted(*){width:100%;height:100%}.mdc-deprecated-list-item__text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mdc-deprecated-list-item__text ::slotted([for]),.mdc-deprecated-list-item__text[for]{pointer-events:none}.mdc-deprecated-list-item__primary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;line-height:normal;margin-bottom:-20px;display:block}.mdc-deprecated-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:\"\";vertical-align:0}.mdc-deprecated-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\"\";vertical-align:-20px}.mdc-deprecated-list-item__secondary-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;line-height:normal;display:block}.mdc-deprecated-list-item__secondary-text::before{display:inline-block;width:0;height:20px;content:\"\";vertical-align:0}.mdc-deprecated-list--dense .mdc-deprecated-list-item__secondary-text{font-size:inherit}* ::slotted(a),a{color:inherit;text-decoration:none}:host([twoline]){height:72px}:host([twoline]) .mdc-deprecated-list-item__text{align-self:flex-start}:host([disabled]),:host([noninteractive]){cursor:default;pointer-events:none}:host([disabled]) .mdc-deprecated-list-item__text ::slotted(*){opacity:.38}:host([disabled]) .mdc-deprecated-list-item__text ::slotted(*),:host([disabled]) .mdc-deprecated-list-item__primary-text ::slotted(*),:host([disabled]) .mdc-deprecated-list-item__secondary-text ::slotted(*){color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-deprecated-list-item__secondary-text ::slotted(*){color:rgba(0, 0, 0, 0.54);color:var(--mdc-theme-text-secondary-on-background, rgba(0, 0, 0, 0.54))}.mdc-deprecated-list-item__graphic ::slotted(*){background-color:transparent;color:rgba(0, 0, 0, 0.38);color:var(--mdc-theme-text-icon-on-background, rgba(0, 0, 0, 0.38))}.mdc-deprecated-list-group__subheader ::slotted(*){color:rgba(0, 0, 0, 0.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87))}:host([graphic=avatar]) .mdc-deprecated-list-item__graphic{width:var(--mdc-list-item-graphic-size, 40px);height:var(--mdc-list-item-graphic-size, 40px)}:host([graphic=avatar]) .mdc-deprecated-list-item__graphic.multi{width:auto}:host([graphic=avatar]) .mdc-deprecated-list-item__graphic ::slotted(*){width:var(--mdc-list-item-graphic-size, 40px);line-height:var(--mdc-list-item-graphic-size, 40px)}:host([graphic=avatar]) .mdc-deprecated-list-item__graphic ::slotted(.material-icons),:host([graphic=avatar]) .mdc-deprecated-list-item__graphic ::slotted(mwc-icon){line-height:var(--mdc-list-item-graphic-size, 40px) !important}:host([graphic=avatar]) .mdc-deprecated-list-item__graphic ::slotted(*){border-radius:50%}:host([graphic=avatar]) .mdc-deprecated-list-item__graphic,:host([graphic=medium]) .mdc-deprecated-list-item__graphic,:host([graphic=large]) .mdc-deprecated-list-item__graphic,:host([graphic=control]) .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:var(--mdc-list-item-graphic-margin, 16px)}[dir=rtl] :host([graphic=avatar]) .mdc-deprecated-list-item__graphic,[dir=rtl] :host([graphic=medium]) .mdc-deprecated-list-item__graphic,[dir=rtl] :host([graphic=large]) .mdc-deprecated-list-item__graphic,[dir=rtl] :host([graphic=control]) .mdc-deprecated-list-item__graphic,:host([graphic=avatar]) .mdc-deprecated-list-item__graphic[dir=rtl],:host([graphic=medium]) .mdc-deprecated-list-item__graphic[dir=rtl],:host([graphic=large]) .mdc-deprecated-list-item__graphic[dir=rtl],:host([graphic=control]) .mdc-deprecated-list-item__graphic[dir=rtl]{margin-left:var(--mdc-list-item-graphic-margin, 16px);margin-right:0}:host([graphic=icon]) .mdc-deprecated-list-item__graphic{width:var(--mdc-list-item-graphic-size, 24px);height:var(--mdc-list-item-graphic-size, 24px);margin-left:0;margin-right:var(--mdc-list-item-graphic-margin, 32px)}:host([graphic=icon]) .mdc-deprecated-list-item__graphic.multi{width:auto}:host([graphic=icon]) .mdc-deprecated-list-item__graphic ::slotted(*){width:var(--mdc-list-item-graphic-size, 24px);line-height:var(--mdc-list-item-graphic-size, 24px)}:host([graphic=icon]) .mdc-deprecated-list-item__graphic ::slotted(.material-icons),:host([graphic=icon]) .mdc-deprecated-list-item__graphic ::slotted(mwc-icon){line-height:var(--mdc-list-item-graphic-size, 24px) !important}[dir=rtl] :host([graphic=icon]) .mdc-deprecated-list-item__graphic,:host([graphic=icon]) .mdc-deprecated-list-item__graphic[dir=rtl]{margin-left:var(--mdc-list-item-graphic-margin, 32px);margin-right:0}:host([graphic=avatar]:not([twoLine])),:host([graphic=icon]:not([twoLine])){height:56px}:host([graphic=medium]:not([twoLine])),:host([graphic=large]:not([twoLine])){height:72px}:host([graphic=medium]) .mdc-deprecated-list-item__graphic,:host([graphic=large]) .mdc-deprecated-list-item__graphic{width:var(--mdc-list-item-graphic-size, 56px);height:var(--mdc-list-item-graphic-size, 56px)}:host([graphic=medium]) .mdc-deprecated-list-item__graphic.multi,:host([graphic=large]) .mdc-deprecated-list-item__graphic.multi{width:auto}:host([graphic=medium]) .mdc-deprecated-list-item__graphic ::slotted(*),:host([graphic=large]) .mdc-deprecated-list-item__graphic ::slotted(*){width:var(--mdc-list-item-graphic-size, 56px);line-height:var(--mdc-list-item-graphic-size, 56px)}:host([graphic=medium]) .mdc-deprecated-list-item__graphic ::slotted(.material-icons),:host([graphic=medium]) .mdc-deprecated-list-item__graphic ::slotted(mwc-icon),:host([graphic=large]) .mdc-deprecated-list-item__graphic ::slotted(.material-icons),:host([graphic=large]) .mdc-deprecated-list-item__graphic ::slotted(mwc-icon){line-height:var(--mdc-list-item-graphic-size, 56px) !important}:host([graphic=large]){padding-left:0px}`;let y=class extends I{};y.styles=[b],y=i([h(\"mwc-list-item\")],y);var S={UNKNOWN:\"Unknown\",BACKSPACE:\"Backspace\",ENTER:\"Enter\",SPACEBAR:\"Spacebar\",PAGE_UP:\"PageUp\",PAGE_DOWN:\"PageDown\",END:\"End\",HOME:\"Home\",ARROW_LEFT:\"ArrowLeft\",ARROW_UP:\"ArrowUp\",ARROW_RIGHT:\"ArrowRight\",ARROW_DOWN:\"ArrowDown\",DELETE:\"Delete\",ESCAPE:\"Escape\",TAB:\"Tab\"},A=new Set;A.add(S.BACKSPACE),A.add(S.ENTER),A.add(S.SPACEBAR),A.add(S.PAGE_UP),A.add(S.PAGE_DOWN),A.add(S.END),A.add(S.HOME),A.add(S.ARROW_LEFT),A.add(S.ARROW_UP),A.add(S.ARROW_RIGHT),A.add(S.ARROW_DOWN),A.add(S.DELETE),A.add(S.ESCAPE),A.add(S.TAB);var T=8,R=13,L=32,w=33,C=34,F=35,O=36,D=37,N=38,M=39,k=40,P=46,U=27,z=9,B=new Map;B.set(T,S.BACKSPACE),B.set(R,S.ENTER),B.set(L,S.SPACEBAR),B.set(w,S.PAGE_UP),B.set(C,S.PAGE_DOWN),B.set(F,S.END),B.set(O,S.HOME),B.set(D,S.ARROW_LEFT),B.set(N,S.ARROW_UP),B.set(M,S.ARROW_RIGHT),B.set(k,S.ARROW_DOWN),B.set(P,S.DELETE),B.set(U,S.ESCAPE),B.set(z,S.TAB);var H,W,X=new Set;function V(t){var e=t.key;if(A.has(e))return e;var i=B.get(t.keyCode);return i||S.UNKNOWN}X.add(S.PAGE_UP),X.add(S.PAGE_DOWN),X.add(S.END),X.add(S.HOME),X.add(S.ARROW_LEFT),X.add(S.ARROW_UP),X.add(S.ARROW_RIGHT),X.add(S.ARROW_DOWN);var G={LIST_ITEM_ACTIVATED_CLASS:\"mdc-list-item--activated\",LIST_ITEM_CLASS:\"mdc-list-item\",LIST_ITEM_DISABLED_CLASS:\"mdc-list-item--disabled\",LIST_ITEM_SELECTED_CLASS:\"mdc-list-item--selected\",LIST_ITEM_TEXT_CLASS:\"mdc-list-item__text\",LIST_ITEM_PRIMARY_TEXT_CLASS:\"mdc-list-item__primary-text\",ROOT:\"mdc-list\"};(H={})[\"\"+G.LIST_ITEM_ACTIVATED_CLASS]=\"mdc-list-item--activated\",H[\"\"+G.LIST_ITEM_CLASS]=\"mdc-list-item\",H[\"\"+G.LIST_ITEM_DISABLED_CLASS]=\"mdc-list-item--disabled\",H[\"\"+G.LIST_ITEM_SELECTED_CLASS]=\"mdc-list-item--selected\",H[\"\"+G.LIST_ITEM_PRIMARY_TEXT_CLASS]=\"mdc-list-item__primary-text\",H[\"\"+G.ROOT]=\"mdc-list\";var $=((W={})[\"\"+G.LIST_ITEM_ACTIVATED_CLASS]=\"mdc-deprecated-list-item--activated\",W[\"\"+G.LIST_ITEM_CLASS]=\"mdc-deprecated-list-item\",W[\"\"+G.LIST_ITEM_DISABLED_CLASS]=\"mdc-deprecated-list-item--disabled\",W[\"\"+G.LIST_ITEM_SELECTED_CLASS]=\"mdc-deprecated-list-item--selected\",W[\"\"+G.LIST_ITEM_TEXT_CLASS]=\"mdc-deprecated-list-item__text\",W[\"\"+G.LIST_ITEM_PRIMARY_TEXT_CLASS]=\"mdc-deprecated-list-item__primary-text\",W[\"\"+G.ROOT]=\"mdc-deprecated-list\",W),K={ACTION_EVENT:\"MDCList:action\",ARIA_CHECKED:\"aria-checked\",ARIA_CHECKED_CHECKBOX_SELECTOR:'[role=\"checkbox\"][aria-checked=\"true\"]',ARIA_CHECKED_RADIO_SELECTOR:'[role=\"radio\"][aria-checked=\"true\"]',ARIA_CURRENT:\"aria-current\",ARIA_DISABLED:\"aria-disabled\",ARIA_ORIENTATION:\"aria-orientation\",ARIA_ORIENTATION_HORIZONTAL:\"horizontal\",ARIA_ROLE_CHECKBOX_SELECTOR:'[role=\"checkbox\"]',ARIA_SELECTED:\"aria-selected\",ARIA_INTERACTIVE_ROLES_SELECTOR:'[role=\"listbox\"], [role=\"menu\"]',ARIA_MULTI_SELECTABLE_SELECTOR:'[aria-multiselectable=\"true\"]',CHECKBOX_RADIO_SELECTOR:'input[type=\"checkbox\"], input[type=\"radio\"]',CHECKBOX_SELECTOR:'input[type=\"checkbox\"]',CHILD_ELEMENTS_TO_TOGGLE_TABINDEX:\"\\n    .\"+G.LIST_ITEM_CLASS+\" button:not(:disabled),\\n    .\"+G.LIST_ITEM_CLASS+\" a,\\n    .\"+$[G.LIST_ITEM_CLASS]+\" button:not(:disabled),\\n    .\"+$[G.LIST_ITEM_CLASS]+\" a\\n  \",DEPRECATED_SELECTOR:\".mdc-deprecated-list\",FOCUSABLE_CHILD_ELEMENTS:\"\\n    .\"+G.LIST_ITEM_CLASS+\" button:not(:disabled),\\n    .\"+G.LIST_ITEM_CLASS+\" a,\\n    .\"+G.LIST_ITEM_CLASS+' input[type=\"radio\"]:not(:disabled),\\n    .'+G.LIST_ITEM_CLASS+' input[type=\"checkbox\"]:not(:disabled),\\n    .'+$[G.LIST_ITEM_CLASS]+\" button:not(:disabled),\\n    .\"+$[G.LIST_ITEM_CLASS]+\" a,\\n    .\"+$[G.LIST_ITEM_CLASS]+' input[type=\"radio\"]:not(:disabled),\\n    .'+$[G.LIST_ITEM_CLASS]+' input[type=\"checkbox\"]:not(:disabled)\\n  ',RADIO_SELECTOR:'input[type=\"radio\"]',SELECTED_ITEM_SELECTOR:'[aria-selected=\"true\"], [aria-current=\"true\"]'},q={UNSET_INDEX:-1,TYPEAHEAD_BUFFER_CLEAR_TIMEOUT_MS:300};const j=(t,e)=>t-e,Y=[\"input\",\"button\",\"textarea\",\"select\"];function Z(t){return t instanceof Set}const J=t=>{const e=t===q.UNSET_INDEX?new Set:t;return Z(e)?new Set(e):new Set([e])};class Q extends p{constructor(t){super(Object.assign(Object.assign({},Q.defaultAdapter),t)),this.isMulti_=!1,this.wrapFocus_=!1,this.isVertical_=!0,this.selectedIndex_=q.UNSET_INDEX,this.focusedItemIndex_=q.UNSET_INDEX,this.useActivatedClass_=!1,this.ariaCurrentAttrValue_=null}static get strings(){return K}static get numbers(){return q}static get defaultAdapter(){return{focusItemAtIndex:()=>{},getFocusedElementIndex:()=>0,getListItemCount:()=>0,isFocusInsideList:()=>!1,isRootFocused:()=>!1,notifyAction:()=>{},notifySelected:()=>{},getSelectedStateForElementIndex:()=>!1,setDisabledStateForElementIndex:()=>{},getDisabledStateForElementIndex:()=>!1,setSelectedStateForElementIndex:()=>{},setActivatedStateForElementIndex:()=>{},setTabIndexForElementIndex:()=>{},setAttributeForElementIndex:()=>{},getAttributeForElementIndex:()=>null}}setWrapFocus(t){this.wrapFocus_=t}setMulti(t){this.isMulti_=t;const e=this.selectedIndex_;if(t){if(!Z(e)){const t=e===q.UNSET_INDEX;this.selectedIndex_=t?new Set:new Set([e])}}else if(Z(e))if(e.size){const t=Array.from(e).sort(j);this.selectedIndex_=t[0]}else this.selectedIndex_=q.UNSET_INDEX}setVerticalOrientation(t){this.isVertical_=t}setUseActivatedClass(t){this.useActivatedClass_=t}getSelectedIndex(){return this.selectedIndex_}setSelectedIndex(t){this.isIndexValid_(t)&&(this.isMulti_?this.setMultiSelectionAtIndex_(J(t)):this.setSingleSelectionAtIndex_(t))}handleFocusIn(t,e){e>=0&&this.adapter.setTabIndexForElementIndex(e,0)}handleFocusOut(t,e){e>=0&&this.adapter.setTabIndexForElementIndex(e,-1),setTimeout((()=>{this.adapter.isFocusInsideList()||this.setTabindexToFirstSelectedItem_()}),0)}handleKeydown(t,e,i){const s=\"ArrowLeft\"===V(t),r=\"ArrowUp\"===V(t),d=\"ArrowRight\"===V(t),a=\"ArrowDown\"===V(t),n=\"Home\"===V(t),o=\"End\"===V(t),c=\"Enter\"===V(t),l=\"Spacebar\"===V(t);if(this.adapter.isRootFocused())return void(r||o?(t.preventDefault(),this.focusLastElement()):(a||n)&&(t.preventDefault(),this.focusFirstElement()));let m,h=this.adapter.getFocusedElementIndex();if(!(-1===h&&(h=i,h<0))){if(this.isVertical_&&a||!this.isVertical_&&d)this.preventDefaultEvent(t),m=this.focusNextElement(h);else if(this.isVertical_&&r||!this.isVertical_&&s)this.preventDefaultEvent(t),m=this.focusPrevElement(h);else if(n)this.preventDefaultEvent(t),m=this.focusFirstElement();else if(o)this.preventDefaultEvent(t),m=this.focusLastElement();else if((c||l)&&e){const e=t.target;if(e&&\"A\"===e.tagName&&c)return;this.preventDefaultEvent(t),this.setSelectedIndexOnAction_(h,!0)}this.focusedItemIndex_=h,void 0!==m&&(this.setTabindexAtIndex_(m),this.focusedItemIndex_=m)}}handleSingleSelection(t,e,i){t!==q.UNSET_INDEX&&(this.setSelectedIndexOnAction_(t,e,i),this.setTabindexAtIndex_(t),this.focusedItemIndex_=t)}focusNextElement(t){let e=t+1;if(e>=this.adapter.getListItemCount()){if(!this.wrapFocus_)return t;e=0}return this.adapter.focusItemAtIndex(e),e}focusPrevElement(t){let e=t-1;if(e<0){if(!this.wrapFocus_)return t;e=this.adapter.getListItemCount()-1}return this.adapter.focusItemAtIndex(e),e}focusFirstElement(){return this.adapter.focusItemAtIndex(0),0}focusLastElement(){const t=this.adapter.getListItemCount()-1;return this.adapter.focusItemAtIndex(t),t}setEnabled(t,e){this.isIndexValid_(t)&&this.adapter.setDisabledStateForElementIndex(t,!e)}preventDefaultEvent(t){const e=`${t.target.tagName}`.toLowerCase();-1===Y.indexOf(e)&&t.preventDefault()}setSingleSelectionAtIndex_(t,e=!0){this.selectedIndex_!==t&&(this.selectedIndex_!==q.UNSET_INDEX&&(this.adapter.setSelectedStateForElementIndex(this.selectedIndex_,!1),this.useActivatedClass_&&this.adapter.setActivatedStateForElementIndex(this.selectedIndex_,!1)),e&&this.adapter.setSelectedStateForElementIndex(t,!0),this.useActivatedClass_&&this.adapter.setActivatedStateForElementIndex(t,!0),this.setAriaForSingleSelectionAtIndex_(t),this.selectedIndex_=t,this.adapter.notifySelected(t))}setMultiSelectionAtIndex_(t,e=!0){const i=((t,e)=>{const i=Array.from(t),s=Array.from(e),r={added:[],removed:[]},d=i.sort(j),a=s.sort(j);let n=0,o=0;for(;n<d.length||o<a.length;){const t=d[n],e=a[o];t!==e?void 0!==t&&(void 0===e||t<e)?(r.removed.push(t),n++):void 0!==e&&(void 0===t||e<t)&&(r.added.push(e),o++):(n++,o++)}return r})(J(this.selectedIndex_),t);if(i.removed.length||i.added.length){for(const t of i.removed)e&&this.adapter.setSelectedStateForElementIndex(t,!1),this.useActivatedClass_&&this.adapter.setActivatedStateForElementIndex(t,!1);for(const t of i.added)e&&this.adapter.setSelectedStateForElementIndex(t,!0),this.useActivatedClass_&&this.adapter.setActivatedStateForElementIndex(t,!0);this.selectedIndex_=t,this.adapter.notifySelected(t,i)}}setAriaForSingleSelectionAtIndex_(t){this.selectedIndex_===q.UNSET_INDEX&&(this.ariaCurrentAttrValue_=this.adapter.getAttributeForElementIndex(t,K.ARIA_CURRENT));const e=null!==this.ariaCurrentAttrValue_,i=e?K.ARIA_CURRENT:K.ARIA_SELECTED;this.selectedIndex_!==q.UNSET_INDEX&&this.adapter.setAttributeForElementIndex(this.selectedIndex_,i,\"false\");const s=e?this.ariaCurrentAttrValue_:\"true\";this.adapter.setAttributeForElementIndex(t,i,s)}setTabindexAtIndex_(t){this.focusedItemIndex_===q.UNSET_INDEX&&0!==t?this.adapter.setTabIndexForElementIndex(0,-1):this.focusedItemIndex_>=0&&this.focusedItemIndex_!==t&&this.adapter.setTabIndexForElementIndex(this.focusedItemIndex_,-1),this.adapter.setTabIndexForElementIndex(t,0)}setTabindexToFirstSelectedItem_(){let t=0;\"number\"==typeof this.selectedIndex_&&this.selectedIndex_!==q.UNSET_INDEX?t=this.selectedIndex_:Z(this.selectedIndex_)&&this.selectedIndex_.size>0&&(t=Math.min(...this.selectedIndex_)),this.setTabindexAtIndex_(t)}isIndexValid_(t){if(t instanceof Set){if(!this.isMulti_)throw new Error(\"MDCListFoundation: Array of index is only supported for checkbox based list\");if(0===t.size)return!0;{let e=!1;for(const i of t)if(e=this.isIndexInRange_(i),e)break;return e}}if(\"number\"==typeof t){if(this.isMulti_)throw new Error(\"MDCListFoundation: Expected array of index for checkbox based list but got number: \"+t);return t===q.UNSET_INDEX||this.isIndexInRange_(t)}return!1}isIndexInRange_(t){const e=this.adapter.getListItemCount();return t>=0&&t<e}setSelectedIndexOnAction_(t,e,i){if(this.adapter.getDisabledStateForElementIndex(t))return;let s=t;if(this.isMulti_&&(s=new Set([t])),this.isIndexValid_(s)){if(this.isMulti_)this.toggleMultiAtIndex(t,i,e);else if(e||i)this.setSingleSelectionAtIndex_(t,e);else{this.selectedIndex_===t&&this.setSingleSelectionAtIndex_(q.UNSET_INDEX)}e&&this.adapter.notifyAction(t)}}toggleMultiAtIndex(t,e,i=!0){let s=!1;s=void 0===e?!this.adapter.getSelectedStateForElementIndex(t):e;const r=J(this.selectedIndex_);s?r.add(t):r.delete(t),this.setMultiSelectionAtIndex_(r,i)}}const tt=t=>t.hasAttribute(\"mwc-list-item\");function et(){const t=this.itemsReadyResolver;this.itemsReady=new Promise((t=>this.itemsReadyResolver=t)),t()}class it extends u{constructor(){super(),this.mdcAdapter=null,this.mdcFoundationClass=Q,this.activatable=!1,this.multi=!1,this.wrapFocus=!1,this.itemRoles=null,this.innerRole=null,this.innerAriaLabel=null,this.rootTabbable=!1,this.previousTabindex=null,this.noninteractive=!1,this.itemsReadyResolver=()=>{},this.itemsReady=Promise.resolve([]),this.items_=[];const t=function(t,e=50){let i;return function(s=!0){clearTimeout(i),i=setTimeout((()=>{t(s)}),e)}}(this.layout.bind(this));this.debouncedLayout=(e=!0)=>{et.call(this),t(e)}}async getUpdateComplete(){const t=await super.getUpdateComplete();return await this.itemsReady,t}get items(){return this.items_}updateItems(){var t;const e=null!==(t=this.assignedElements)&&void 0!==t?t:[],i=[];for(const t of e)tt(t)&&(i.push(t),t._managingList=this),t.hasAttribute(\"divider\")&&!t.hasAttribute(\"role\")&&t.setAttribute(\"role\",\"separator\");this.items_=i;const s=new Set;if(this.items_.forEach(((t,e)=>{this.itemRoles?t.setAttribute(\"role\",this.itemRoles):t.removeAttribute(\"role\"),t.selected&&s.add(e)})),this.multi)this.select(s);else{const t=s.size?s.entries().next().value[1]:-1;this.select(t)}const r=new Event(\"items-updated\",{bubbles:!0,composed:!0});this.dispatchEvent(r)}get selected(){const t=this.index;if(!Z(t))return-1===t?null:this.items[t];const e=[];for(const i of t)e.push(this.items[i]);return e}get index(){return this.mdcFoundation?this.mdcFoundation.getSelectedIndex():-1}render(){const t=null===this.innerRole?void 0:this.innerRole,e=null===this.innerAriaLabel?void 0:this.innerAriaLabel,i=this.rootTabbable?\"0\":\"-1\";return c`\n      <!-- @ts-ignore -->\n      <ul\n          tabindex=${i}\n          role=\"${g(t)}\"\n          aria-label=\"${g(e)}\"\n          class=\"mdc-deprecated-list\"\n          @keydown=${this.onKeydown}\n          @focusin=${this.onFocusIn}\n          @focusout=${this.onFocusOut}\n          @request-selected=${this.onRequestSelected}\n          @list-item-rendered=${this.onListItemConnected}>\n        <slot></slot>\n        ${this.renderPlaceholder()}\n      </ul>\n    `}renderPlaceholder(){var t;const e=null!==(t=this.assignedElements)&&void 0!==t?t:[];return void 0!==this.emptyMessage&&0===e.length?c`\n        <mwc-list-item noninteractive>${this.emptyMessage}</mwc-list-item>\n      `:null}firstUpdated(){super.firstUpdated(),this.items.length||(this.mdcFoundation.setMulti(this.multi),this.layout())}onFocusIn(t){if(this.mdcFoundation&&this.mdcRoot){const e=this.getIndexOfTarget(t);this.mdcFoundation.handleFocusIn(t,e)}}onFocusOut(t){if(this.mdcFoundation&&this.mdcRoot){const e=this.getIndexOfTarget(t);this.mdcFoundation.handleFocusOut(t,e)}}onKeydown(t){if(this.mdcFoundation&&this.mdcRoot){const e=this.getIndexOfTarget(t),i=t.target,s=tt(i);this.mdcFoundation.handleKeydown(t,s,e)}}onRequestSelected(t){if(this.mdcFoundation){let e=this.getIndexOfTarget(t);if(-1===e&&(this.layout(),e=this.getIndexOfTarget(t),-1===e))return;if(this.items[e].disabled)return;const i=t.detail.selected,s=t.detail.source;this.mdcFoundation.handleSingleSelection(e,\"interaction\"===s,i),t.stopPropagation()}}getIndexOfTarget(t){const e=this.items,i=t.composedPath();for(const t of i){let i=-1;if(_(t)&&tt(t)&&(i=e.indexOf(t)),-1!==i)return i}return-1}createAdapter(){return this.mdcAdapter={getListItemCount:()=>this.mdcRoot?this.items.length:0,getFocusedElementIndex:this.getFocusedItemIndex,getAttributeForElementIndex:(t,e)=>{if(!this.mdcRoot)return\"\";const i=this.items[t];return i?i.getAttribute(e):\"\"},setAttributeForElementIndex:(t,e,i)=>{if(!this.mdcRoot)return;const s=this.items[t];s&&s.setAttribute(e,i)},focusItemAtIndex:t=>{const e=this.items[t];e&&e.focus()},setTabIndexForElementIndex:(t,e)=>{const i=this.items[t];i&&(i.tabindex=e)},notifyAction:t=>{const e={bubbles:!0,composed:!0};e.detail={index:t};const i=new CustomEvent(\"action\",e);this.dispatchEvent(i)},notifySelected:(t,e)=>{const i={bubbles:!0,composed:!0};i.detail={index:t,diff:e};const s=new CustomEvent(\"selected\",i);this.dispatchEvent(s)},isFocusInsideList:()=>f(this),isRootFocused:()=>{const t=this.mdcRoot;return t.getRootNode().activeElement===t},setDisabledStateForElementIndex:(t,e)=>{const i=this.items[t];i&&(i.disabled=e)},getDisabledStateForElementIndex:t=>{const e=this.items[t];return!!e&&e.disabled},setSelectedStateForElementIndex:(t,e)=>{const i=this.items[t];i&&(i.selected=e)},getSelectedStateForElementIndex:t=>{const e=this.items[t];return!!e&&e.selected},setActivatedStateForElementIndex:(t,e)=>{const i=this.items[t];i&&(i.activated=e)}},this.mdcAdapter}selectUi(t,e=!1){const i=this.items[t];i&&(i.selected=!0,i.activated=e)}deselectUi(t){const e=this.items[t];e&&(e.selected=!1,e.activated=!1)}select(t){this.mdcFoundation&&this.mdcFoundation.setSelectedIndex(t)}toggle(t,e){this.multi&&this.mdcFoundation.toggleMultiAtIndex(t,e)}onListItemConnected(t){const e=t.target;this.layout(-1===this.items.indexOf(e))}layout(t=!0){t&&this.updateItems();const e=this.items[0];for(const t of this.items)t.tabindex=-1;e&&(this.noninteractive?this.previousTabindex||(this.previousTabindex=e):e.tabindex=0),this.itemsReadyResolver()}getFocusedItemIndex(){if(!this.mdcRoot)return-1;if(!this.items.length)return-1;const t=x();if(!t.length)return-1;for(let e=t.length-1;e>=0;e--){const i=t[e];if(tt(i))return this.items.indexOf(i)}return-1}focusItemAtIndex(t){for(const t of this.items)if(0===t.tabindex){t.tabindex=-1;break}this.items[t].tabindex=0,this.items[t].focus()}focus(){const t=this.mdcRoot;t&&t.focus()}blur(){const t=this.mdcRoot;t&&t.blur()}}i([d({type:String})],it.prototype,\"emptyMessage\",void 0),i([s(\".mdc-deprecated-list\")],it.prototype,\"mdcRoot\",void 0),i([E(\"\",!0,\"*\")],it.prototype,\"assignedElements\",void 0),i([E(\"\",!0,'[tabindex=\"0\"]')],it.prototype,\"tabbableElements\",void 0),i([d({type:Boolean}),v((function(t){this.mdcFoundation&&this.mdcFoundation.setUseActivatedClass(t)}))],it.prototype,\"activatable\",void 0),i([d({type:Boolean}),v((function(t,e){this.mdcFoundation&&this.mdcFoundation.setMulti(t),void 0!==e&&this.layout()}))],it.prototype,\"multi\",void 0),i([d({type:Boolean}),v((function(t){this.mdcFoundation&&this.mdcFoundation.setWrapFocus(t)}))],it.prototype,\"wrapFocus\",void 0),i([d({type:String}),v((function(t,e){void 0!==e&&this.updateItems()}))],it.prototype,\"itemRoles\",void 0),i([d({type:String})],it.prototype,\"innerRole\",void 0),i([d({type:String})],it.prototype,\"innerAriaLabel\",void 0),i([d({type:Boolean})],it.prototype,\"rootTabbable\",void 0),i([d({type:Boolean,reflect:!0}),v((function(t){var e,i;if(t){const t=null!==(i=null===(e=this.tabbableElements)||void 0===e?void 0:e[0])&&void 0!==i?i:null;this.previousTabindex=t,t&&t.setAttribute(\"tabindex\",\"-1\")}else!t&&this.previousTabindex&&(this.previousTabindex.setAttribute(\"tabindex\",\"0\"),this.previousTabindex=null)}))],it.prototype,\"noninteractive\",void 0);const st=m`@keyframes mdc-ripple-fg-radius-in{from{animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1)}to{transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}}@keyframes mdc-ripple-fg-opacity-in{from{animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@keyframes mdc-ripple-fg-opacity-out{from{animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}:host{display:block}.mdc-deprecated-list{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);line-height:1.5rem;margin:0;padding:8px 0;list-style-type:none;color:rgba(0, 0, 0, 0.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87));padding:var(--mdc-list-vertical-padding, 8px) 0}.mdc-deprecated-list:focus{outline:none}.mdc-deprecated-list-item{height:48px}.mdc-deprecated-list--dense{padding-top:4px;padding-bottom:4px;font-size:.812rem}.mdc-deprecated-list ::slotted([divider]){height:0;margin:0;border:none;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgba(0, 0, 0, 0.12)}.mdc-deprecated-list ::slotted([divider][padded]){margin:0 var(--mdc-list-side-padding, 16px)}.mdc-deprecated-list ::slotted([divider][inset]){margin-left:var(--mdc-list-inset-margin, 72px);margin-right:0;width:calc( 100% - var(--mdc-list-inset-margin, 72px) )}[dir=rtl] .mdc-deprecated-list ::slotted([divider][inset]),.mdc-deprecated-list ::slotted([divider][inset][dir=rtl]){margin-left:0;margin-right:var(--mdc-list-inset-margin, 72px)}.mdc-deprecated-list ::slotted([divider][inset][padded]){width:calc( 100% - var(--mdc-list-inset-margin, 72px) - var(--mdc-list-side-padding, 16px) )}.mdc-deprecated-list--dense ::slotted([mwc-list-item]){height:40px}.mdc-deprecated-list--dense ::slotted([mwc-list]){--mdc-list-item-graphic-size: 20px}.mdc-deprecated-list--two-line.mdc-deprecated-list--dense ::slotted([mwc-list-item]),.mdc-deprecated-list--avatar-list.mdc-deprecated-list--dense ::slotted([mwc-list-item]){height:60px}.mdc-deprecated-list--avatar-list.mdc-deprecated-list--dense ::slotted([mwc-list]){--mdc-list-item-graphic-size: 36px}:host([noninteractive]){pointer-events:none;cursor:default}.mdc-deprecated-list--dense ::slotted(.mdc-deprecated-list-item__primary-text){display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-deprecated-list--dense ::slotted(.mdc-deprecated-list-item__primary-text)::before{display:inline-block;width:0;height:24px;content:\"\";vertical-align:0}.mdc-deprecated-list--dense ::slotted(.mdc-deprecated-list-item__primary-text)::after{display:inline-block;width:0;height:20px;content:\"\";vertical-align:-20px}`;let rt=class extends it{};rt.styles=[st],rt=i([h(\"mwc-list\")],rt);export{S as K,I as L,V as a,G as c,q as n,E as o,b as s};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.99c1c4ba.js",
    "content": "import{c as t,a as i}from\"./c.743a15a1.js\";var e=t((function(t,i){!function(t){var i=\"1.8.0\";function e(t){var i,e,n,o;for(e=1,n=arguments.length;e<n;e++)for(i in o=arguments[e])t[i]=o[i];return t}var n=Object.create||function(){function t(){}return function(i){return t.prototype=i,new t}}();function o(t,i){var e=Array.prototype.slice;if(t.bind)return t.bind.apply(t,e.call(arguments,1));var n=e.call(arguments,2);return function(){return t.apply(i,n.length?n.concat(e.call(arguments)):arguments)}}var s=0;function r(t){return\"_leaflet_id\"in t||(t._leaflet_id=++s),t._leaflet_id}function a(t,i,e){var n,o,s,r;return r=function(){n=!1,o&&(s.apply(e,o),o=!1)},s=function(){n?o=arguments:(t.apply(e,arguments),setTimeout(r,i),n=!0)},s}function h(t,i,e){var n=i[1],o=i[0],s=n-o;return t===n&&e?t:((t-o)%s+s)%s+o}function u(){return!1}function l(t,i){if(!1===i)return t;var e=Math.pow(10,void 0===i?6:i);return Math.round(t*e)/e}function c(t){return t.trim?t.trim():t.replace(/^\\s+|\\s+$/g,\"\")}function _(t){return c(t).split(/\\s+/)}function d(t,i){for(var e in Object.prototype.hasOwnProperty.call(t,\"options\")||(t.options=t.options?n(t.options):{}),i)t.options[e]=i[e];return t.options}function p(t,i,e){var n=[];for(var o in t)n.push(encodeURIComponent(e?o.toUpperCase():o)+\"=\"+encodeURIComponent(t[o]));return(i&&-1!==i.indexOf(\"?\")?\"&\":\"?\")+n.join(\"&\")}var m=/\\{ *([\\w_ -]+) *\\}/g;function f(t,i){return t.replace(m,(function(t,e){var n=i[e];if(void 0===n)throw new Error(\"No value provided for variable \"+t);return\"function\"==typeof n&&(n=n(i)),n}))}var g=Array.isArray||function(t){return\"[object Array]\"===Object.prototype.toString.call(t)};function v(t,i){for(var e=0;e<t.length;e++)if(t[e]===i)return e;return-1}var y=\"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=\";function x(t){return window[\"webkit\"+t]||window[\"moz\"+t]||window[\"ms\"+t]}var w=0;function P(t){var i=+new Date,e=Math.max(0,16-(i-w));return w=i+e,window.setTimeout(t,e)}var b=window.requestAnimationFrame||x(\"RequestAnimationFrame\")||P,T=window.cancelAnimationFrame||x(\"CancelAnimationFrame\")||x(\"CancelRequestAnimationFrame\")||function(t){window.clearTimeout(t)};function z(t,i,e){if(!e||b!==P)return b.call(window,o(t,i));t.call(i)}function M(t){t&&T.call(window,t)}var C={__proto__:null,extend:e,create:n,bind:o,get lastId(){return s},stamp:r,throttle:a,wrapNum:h,falseFn:u,formatNum:l,trim:c,splitWords:_,setOptions:d,getParamString:p,template:f,isArray:g,indexOf:v,emptyImageUrl:y,requestFn:b,cancelFn:T,requestAnimFrame:z,cancelAnimFrame:M};function Z(){}function S(t){if(\"undefined\"!=typeof L&&L&&L.Mixin){t=g(t)?t:[t];for(var i=0;i<t.length;i++)t[i]===L.Mixin.Events&&console.warn(\"Deprecated include of L.Mixin.Events: this property will be removed in future releases, please inherit from L.Evented instead.\",(new Error).stack)}}Z.extend=function(t){var i=function(){d(this),this.initialize&&this.initialize.apply(this,arguments),this.callInitHooks()},o=i.__super__=this.prototype,s=n(o);for(var r in s.constructor=i,i.prototype=s,this)Object.prototype.hasOwnProperty.call(this,r)&&\"prototype\"!==r&&\"__super__\"!==r&&(i[r]=this[r]);return t.statics&&e(i,t.statics),t.includes&&(S(t.includes),e.apply(null,[s].concat(t.includes))),e(s,t),delete s.statics,delete s.includes,s.options&&(s.options=o.options?n(o.options):{},e(s.options,t.options)),s._initHooks=[],s.callInitHooks=function(){if(!this._initHooksCalled){o.callInitHooks&&o.callInitHooks.call(this),this._initHooksCalled=!0;for(var t=0,i=s._initHooks.length;t<i;t++)s._initHooks[t].call(this)}},i},Z.include=function(t){var i=this.prototype.options;return e(this.prototype,t),t.options&&(this.prototype.options=i,this.mergeOptions(t.options)),this},Z.mergeOptions=function(t){return e(this.prototype.options,t),this},Z.addInitHook=function(t){var i=Array.prototype.slice.call(arguments,1),e=\"function\"==typeof t?t:function(){this[t].apply(this,i)};return this.prototype._initHooks=this.prototype._initHooks||[],this.prototype._initHooks.push(e),this};var k={on:function(t,i,e){if(\"object\"==typeof t)for(var n in t)this._on(n,t[n],i);else for(var o=0,s=(t=_(t)).length;o<s;o++)this._on(t[o],i,e);return this},off:function(t,i,e){if(arguments.length)if(\"object\"==typeof t)for(var n in t)this._off(n,t[n],i);else{t=_(t);for(var o=1===arguments.length,s=0,r=t.length;s<r;s++)o?this._off(t[s]):this._off(t[s],i,e)}else delete this._events;return this},_on:function(t,i,e){if(\"function\"==typeof i){this._events=this._events||{};var n=this._events[t];n||(n=[],this._events[t]=n),e===this&&(e=void 0);for(var o={fn:i,ctx:e},s=n,r=0,a=s.length;r<a;r++)if(s[r].fn===i&&s[r].ctx===e)return;s.push(o)}else console.warn(\"wrong listener type: \"+typeof i)},_off:function(t,i,e){var n,o,s;if(this._events&&(n=this._events[t]))if(1!==arguments.length)if(e===this&&(e=void 0),\"function\"==typeof i){for(o=0,s=n.length;o<s;o++){var r=n[o];if(r.ctx===e&&r.fn===i)return this._firingCount&&(r.fn=u,this._events[t]=n=n.slice()),void n.splice(o,1)}console.warn(\"listener not found\")}else console.warn(\"wrong listener type: \"+typeof i);else{if(this._firingCount)for(o=0,s=n.length;o<s;o++)n[o].fn=u;delete this._events[t]}},fire:function(t,i,n){if(!this.listens(t,n))return this;var o=e({},i,{type:t,target:this,sourceTarget:i&&i.sourceTarget||this});if(this._events){var s=this._events[t];if(s){this._firingCount=this._firingCount+1||1;for(var r=0,a=s.length;r<a;r++){var h=s[r];h.fn.call(h.ctx||this,o)}this._firingCount--}}return n&&this._propagateEvent(o),this},listens:function(t,i){\"string\"!=typeof t&&console.warn('\"string\" type argument expected');var e=this._events&&this._events[t];if(e&&e.length)return!0;if(i)for(var n in this._eventParents)if(this._eventParents[n].listens(t,i))return!0;return!1},once:function(t,i,e){if(\"object\"==typeof t){for(var n in t)this.once(n,t[n],i);return this}var s=o((function(){this.off(t,i,e).off(t,s,e)}),this);return this.on(t,i,e).on(t,s,e)},addEventParent:function(t){return this._eventParents=this._eventParents||{},this._eventParents[r(t)]=t,this},removeEventParent:function(t){return this._eventParents&&delete this._eventParents[r(t)],this},_propagateEvent:function(t){for(var i in this._eventParents)this._eventParents[i].fire(t.type,e({layer:t.target,propagatedFrom:t.target},t),!0)}};k.addEventListener=k.on,k.removeEventListener=k.clearAllEventListeners=k.off,k.addOneTimeEventListener=k.once,k.fireEvent=k.fire,k.hasEventListeners=k.listens;var E=Z.extend(k);function B(t,i,e){this.x=e?Math.round(t):t,this.y=e?Math.round(i):i}var A=Math.trunc||function(t){return t>0?Math.floor(t):Math.ceil(t)};function I(t,i,e){return t instanceof B?t:g(t)?new B(t[0],t[1]):null==t?t:\"object\"==typeof t&&\"x\"in t&&\"y\"in t?new B(t.x,t.y):new B(t,i,e)}function O(t,i){if(t)for(var e=i?[t,i]:t,n=0,o=e.length;n<o;n++)this.extend(e[n])}function R(t,i){return!t||t instanceof O?t:new O(t,i)}function N(t,i){if(t)for(var e=i?[t,i]:t,n=0,o=e.length;n<o;n++)this.extend(e[n])}function D(t,i){return t instanceof N?t:new N(t,i)}function j(t,i,e){if(isNaN(t)||isNaN(i))throw new Error(\"Invalid LatLng object: (\"+t+\", \"+i+\")\");this.lat=+t,this.lng=+i,void 0!==e&&(this.alt=+e)}function H(t,i,e){return t instanceof j?t:g(t)&&\"object\"!=typeof t[0]?3===t.length?new j(t[0],t[1],t[2]):2===t.length?new j(t[0],t[1]):null:null==t?t:\"object\"==typeof t&&\"lat\"in t?new j(t.lat,\"lng\"in t?t.lng:t.lon,t.alt):void 0===i?null:new j(t,i,e)}B.prototype={clone:function(){return new B(this.x,this.y)},add:function(t){return this.clone()._add(I(t))},_add:function(t){return this.x+=t.x,this.y+=t.y,this},subtract:function(t){return this.clone()._subtract(I(t))},_subtract:function(t){return this.x-=t.x,this.y-=t.y,this},divideBy:function(t){return this.clone()._divideBy(t)},_divideBy:function(t){return this.x/=t,this.y/=t,this},multiplyBy:function(t){return this.clone()._multiplyBy(t)},_multiplyBy:function(t){return this.x*=t,this.y*=t,this},scaleBy:function(t){return new B(this.x*t.x,this.y*t.y)},unscaleBy:function(t){return new B(this.x/t.x,this.y/t.y)},round:function(){return this.clone()._round()},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},floor:function(){return this.clone()._floor()},_floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.clone()._ceil()},_ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},trunc:function(){return this.clone()._trunc()},_trunc:function(){return this.x=A(this.x),this.y=A(this.y),this},distanceTo:function(t){var i=(t=I(t)).x-this.x,e=t.y-this.y;return Math.sqrt(i*i+e*e)},equals:function(t){return(t=I(t)).x===this.x&&t.y===this.y},contains:function(t){return t=I(t),Math.abs(t.x)<=Math.abs(this.x)&&Math.abs(t.y)<=Math.abs(this.y)},toString:function(){return\"Point(\"+l(this.x)+\", \"+l(this.y)+\")\"}},O.prototype={extend:function(t){return t=I(t),this.min||this.max?(this.min.x=Math.min(t.x,this.min.x),this.max.x=Math.max(t.x,this.max.x),this.min.y=Math.min(t.y,this.min.y),this.max.y=Math.max(t.y,this.max.y)):(this.min=t.clone(),this.max=t.clone()),this},getCenter:function(t){return new B((this.min.x+this.max.x)/2,(this.min.y+this.max.y)/2,t)},getBottomLeft:function(){return new B(this.min.x,this.max.y)},getTopRight:function(){return new B(this.max.x,this.min.y)},getTopLeft:function(){return this.min},getBottomRight:function(){return this.max},getSize:function(){return this.max.subtract(this.min)},contains:function(t){var i,e;return(t=\"number\"==typeof t[0]||t instanceof B?I(t):R(t))instanceof O?(i=t.min,e=t.max):i=e=t,i.x>=this.min.x&&e.x<=this.max.x&&i.y>=this.min.y&&e.y<=this.max.y},intersects:function(t){t=R(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>=i.x&&n.x<=e.x,r=o.y>=i.y&&n.y<=e.y;return s&&r},overlaps:function(t){t=R(t);var i=this.min,e=this.max,n=t.min,o=t.max,s=o.x>i.x&&n.x<e.x,r=o.y>i.y&&n.y<e.y;return s&&r},isValid:function(){return!(!this.min||!this.max)}},N.prototype={extend:function(t){var i,e,n=this._southWest,o=this._northEast;if(t instanceof j)i=t,e=t;else{if(!(t instanceof N))return t?this.extend(H(t)||D(t)):this;if(i=t._southWest,e=t._northEast,!i||!e)return this}return n||o?(n.lat=Math.min(i.lat,n.lat),n.lng=Math.min(i.lng,n.lng),o.lat=Math.max(e.lat,o.lat),o.lng=Math.max(e.lng,o.lng)):(this._southWest=new j(i.lat,i.lng),this._northEast=new j(e.lat,e.lng)),this},pad:function(t){var i=this._southWest,e=this._northEast,n=Math.abs(i.lat-e.lat)*t,o=Math.abs(i.lng-e.lng)*t;return new N(new j(i.lat-n,i.lng-o),new j(e.lat+n,e.lng+o))},getCenter:function(){return new j((this._southWest.lat+this._northEast.lat)/2,(this._southWest.lng+this._northEast.lng)/2)},getSouthWest:function(){return this._southWest},getNorthEast:function(){return this._northEast},getNorthWest:function(){return new j(this.getNorth(),this.getWest())},getSouthEast:function(){return new j(this.getSouth(),this.getEast())},getWest:function(){return this._southWest.lng},getSouth:function(){return this._southWest.lat},getEast:function(){return this._northEast.lng},getNorth:function(){return this._northEast.lat},contains:function(t){t=\"number\"==typeof t[0]||t instanceof j||\"lat\"in t?H(t):D(t);var i,e,n=this._southWest,o=this._northEast;return t instanceof N?(i=t.getSouthWest(),e=t.getNorthEast()):i=e=t,i.lat>=n.lat&&e.lat<=o.lat&&i.lng>=n.lng&&e.lng<=o.lng},intersects:function(t){t=D(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>=i.lat&&n.lat<=e.lat,r=o.lng>=i.lng&&n.lng<=e.lng;return s&&r},overlaps:function(t){t=D(t);var i=this._southWest,e=this._northEast,n=t.getSouthWest(),o=t.getNorthEast(),s=o.lat>i.lat&&n.lat<e.lat,r=o.lng>i.lng&&n.lng<e.lng;return s&&r},toBBoxString:function(){return[this.getWest(),this.getSouth(),this.getEast(),this.getNorth()].join(\",\")},equals:function(t,i){return!!t&&(t=D(t),this._southWest.equals(t.getSouthWest(),i)&&this._northEast.equals(t.getNorthEast(),i))},isValid:function(){return!(!this._southWest||!this._northEast)}},j.prototype={equals:function(t,i){return!!t&&(t=H(t),Math.max(Math.abs(this.lat-t.lat),Math.abs(this.lng-t.lng))<=(void 0===i?1e-9:i))},toString:function(t){return\"LatLng(\"+l(this.lat,t)+\", \"+l(this.lng,t)+\")\"},distanceTo:function(t){return U.distance(this,H(t))},wrap:function(){return U.wrapLatLng(this)},toBounds:function(t){var i=180*t/40075017,e=i/Math.cos(Math.PI/180*this.lat);return D([this.lat-i,this.lng-e],[this.lat+i,this.lng+e])},clone:function(){return new j(this.lat,this.lng,this.alt)}};var W,F={latLngToPoint:function(t,i){var e=this.projection.project(t),n=this.scale(i);return this.transformation._transform(e,n)},pointToLatLng:function(t,i){var e=this.scale(i),n=this.transformation.untransform(t,e);return this.projection.unproject(n)},project:function(t){return this.projection.project(t)},unproject:function(t){return this.projection.unproject(t)},scale:function(t){return 256*Math.pow(2,t)},zoom:function(t){return Math.log(t/256)/Math.LN2},getProjectedBounds:function(t){if(this.infinite)return null;var i=this.projection.bounds,e=this.scale(t);return new O(this.transformation.transform(i.min,e),this.transformation.transform(i.max,e))},infinite:!1,wrapLatLng:function(t){var i=this.wrapLng?h(t.lng,this.wrapLng,!0):t.lng;return new j(this.wrapLat?h(t.lat,this.wrapLat,!0):t.lat,i,t.alt)},wrapLatLngBounds:function(t){var i=t.getCenter(),e=this.wrapLatLng(i),n=i.lat-e.lat,o=i.lng-e.lng;if(0===n&&0===o)return t;var s=t.getSouthWest(),r=t.getNorthEast();return new N(new j(s.lat-n,s.lng-o),new j(r.lat-n,r.lng-o))}},U=e({},F,{wrapLng:[-180,180],R:6371e3,distance:function(t,i){var e=Math.PI/180,n=t.lat*e,o=i.lat*e,s=Math.sin((i.lat-t.lat)*e/2),r=Math.sin((i.lng-t.lng)*e/2),a=s*s+Math.cos(n)*Math.cos(o)*r*r,h=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));return this.R*h}}),V=6378137,q={R:V,MAX_LATITUDE:85.0511287798,project:function(t){var i=Math.PI/180,e=this.MAX_LATITUDE,n=Math.max(Math.min(e,t.lat),-e),o=Math.sin(n*i);return new B(this.R*t.lng*i,this.R*Math.log((1+o)/(1-o))/2)},unproject:function(t){var i=180/Math.PI;return new j((2*Math.atan(Math.exp(t.y/this.R))-Math.PI/2)*i,t.x*i/this.R)},bounds:(W=V*Math.PI,new O([-W,-W],[W,W]))};function G(t,i,e,n){if(g(t))return this._a=t[0],this._b=t[1],this._c=t[2],void(this._d=t[3]);this._a=t,this._b=i,this._c=e,this._d=n}function K(t,i,e,n){return new G(t,i,e,n)}G.prototype={transform:function(t,i){return this._transform(t.clone(),i)},_transform:function(t,i){return i=i||1,t.x=i*(this._a*t.x+this._b),t.y=i*(this._c*t.y+this._d),t},untransform:function(t,i){return i=i||1,new B((t.x/i-this._b)/this._a,(t.y/i-this._d)/this._c)}};var Y=e({},U,{code:\"EPSG:3857\",projection:q,transformation:function(){var t=.5/(Math.PI*q.R);return K(t,.5,-t,.5)}()}),X=e({},Y,{code:\"EPSG:900913\"});function J(t){return document.createElementNS(\"http://www.w3.org/2000/svg\",t)}function $(t,i){var e,n,o,s,r,a,h=\"\";for(e=0,o=t.length;e<o;e++){for(n=0,s=(r=t[e]).length;n<s;n++)h+=(n?\"L\":\"M\")+(a=r[n]).x+\" \"+a.y;h+=i?Ot.svg?\"z\":\"x\":\"\"}return h||\"M0 0\"}var Q,tt=document.documentElement.style,it=\"ActiveXObject\"in window,et=it&&!document.addEventListener,nt=\"msLaunchUri\"in navigator&&!(\"documentMode\"in document),ot=It(\"webkit\"),st=It(\"android\"),rt=It(\"android 2\")||It(\"android 3\"),at=parseInt(/WebKit\\/([0-9]+)|$/.exec(navigator.userAgent)[1],10),ht=st&&It(\"Google\")&&at<537&&!(\"AudioNode\"in window),ut=!!window.opera,lt=!nt&&It(\"chrome\"),ct=It(\"gecko\")&&!ot&&!ut&&!it,_t=!lt&&It(\"safari\"),dt=It(\"phantom\"),pt=\"OTransition\"in tt,mt=0===navigator.platform.indexOf(\"Win\"),ft=it&&\"transition\"in tt,gt=\"WebKitCSSMatrix\"in window&&\"m11\"in new window.WebKitCSSMatrix&&!rt,vt=\"MozPerspective\"in tt,yt=!window.L_DISABLE_3D&&(ft||gt||vt)&&!pt&&!dt,xt=\"undefined\"!=typeof orientation||It(\"mobile\"),wt=xt&&ot,Pt=xt&&gt,bt=!window.PointerEvent&&window.MSPointerEvent,Lt=!(!window.PointerEvent&&!bt),Tt=\"ontouchstart\"in window||!!window.TouchEvent,zt=!window.L_NO_TOUCH&&(Tt||Lt),Mt=xt&&ut,Ct=xt&&ct,Zt=(window.devicePixelRatio||window.screen.deviceXDPI/window.screen.logicalXDPI)>1,St=function(){var t=!1;try{var i=Object.defineProperty({},\"passive\",{get:function(){t=!0}});window.addEventListener(\"testPassiveEventSupport\",u,i),window.removeEventListener(\"testPassiveEventSupport\",u,i)}catch(t){}return t}(),kt=!!document.createElement(\"canvas\").getContext,Et=!(!document.createElementNS||!J(\"svg\").createSVGRect),Bt=!!Et&&((Q=document.createElement(\"div\")).innerHTML=\"<svg/>\",\"http://www.w3.org/2000/svg\"===(Q.firstChild&&Q.firstChild.namespaceURI)),At=!Et&&function(){try{var t=document.createElement(\"div\");t.innerHTML='<v:shape adj=\"1\"/>';var i=t.firstChild;return i.style.behavior=\"url(#default#VML)\",i&&\"object\"==typeof i.adj}catch(t){return!1}}();function It(t){return navigator.userAgent.toLowerCase().indexOf(t)>=0}var Ot={ie:it,ielt9:et,edge:nt,webkit:ot,android:st,android23:rt,androidStock:ht,opera:ut,chrome:lt,gecko:ct,safari:_t,phantom:dt,opera12:pt,win:mt,ie3d:ft,webkit3d:gt,gecko3d:vt,any3d:yt,mobile:xt,mobileWebkit:wt,mobileWebkit3d:Pt,msPointer:bt,pointer:Lt,touch:zt,touchNative:Tt,mobileOpera:Mt,mobileGecko:Ct,retina:Zt,passiveEvents:St,canvas:kt,svg:Et,vml:At,inlineSvg:Bt},Rt=Ot.msPointer?\"MSPointerDown\":\"pointerdown\",Nt=Ot.msPointer?\"MSPointerMove\":\"pointermove\",Dt=Ot.msPointer?\"MSPointerUp\":\"pointerup\",jt=Ot.msPointer?\"MSPointerCancel\":\"pointercancel\",Ht={touchstart:Rt,touchmove:Nt,touchend:Dt,touchcancel:jt},Wt={touchstart:$t,touchmove:Jt,touchend:Jt,touchcancel:Jt},Ft={},Ut=!1;function Vt(t,i,e){return\"touchstart\"===i&&Xt(),Wt[i]?(e=Wt[i].bind(this,e),t.addEventListener(Ht[i],e,!1),e):(console.warn(\"wrong event specified:\",i),L.Util.falseFn)}function qt(t,i,e){Ht[i]?t.removeEventListener(Ht[i],e,!1):console.warn(\"wrong event specified:\",i)}function Gt(t){Ft[t.pointerId]=t}function Kt(t){Ft[t.pointerId]&&(Ft[t.pointerId]=t)}function Yt(t){delete Ft[t.pointerId]}function Xt(){Ut||(document.addEventListener(Rt,Gt,!0),document.addEventListener(Nt,Kt,!0),document.addEventListener(Dt,Yt,!0),document.addEventListener(jt,Yt,!0),Ut=!0)}function Jt(t,i){if(i.pointerType!==(i.MSPOINTER_TYPE_MOUSE||\"mouse\")){for(var e in i.touches=[],Ft)i.touches.push(Ft[e]);i.changedTouches=[i],t(i)}}function $t(t,i){i.MSPOINTER_TYPE_TOUCH&&i.pointerType===i.MSPOINTER_TYPE_TOUCH&&Gi(i),Jt(t,i)}function Qt(t){var i,e,n={};for(e in t)i=t[e],n[e]=i&&i.bind?i.bind(t):i;return t=n,n.type=\"dblclick\",n.detail=2,n.isTrusted=!1,n._simulated=!0,n}var ti=200;function ii(t,i){t.addEventListener(\"dblclick\",i);var e,n=0;function o(t){if(1===t.detail){if(\"mouse\"!==t.pointerType&&(!t.sourceCapabilities||t.sourceCapabilities.firesTouchEvents)){var o=Date.now();o-n<=ti?2==++e&&i(Qt(t)):e=1,n=o}}else e=t.detail}return t.addEventListener(\"click\",o),{dblclick:i,simDblclick:o}}function ei(t,i){t.removeEventListener(\"dblclick\",i.dblclick),t.removeEventListener(\"click\",i.simDblclick)}var ni,oi,si,ri,ai,hi=Ti([\"transform\",\"webkitTransform\",\"OTransform\",\"MozTransform\",\"msTransform\"]),ui=Ti([\"webkitTransition\",\"transition\",\"OTransition\",\"MozTransition\",\"msTransition\"]),li=\"webkitTransition\"===ui||\"OTransition\"===ui?ui+\"End\":\"transitionend\";function ci(t){return\"string\"==typeof t?document.getElementById(t):t}function _i(t,i){var e=t.style[i]||t.currentStyle&&t.currentStyle[i];if((!e||\"auto\"===e)&&document.defaultView){var n=document.defaultView.getComputedStyle(t,null);e=n?n[i]:null}return\"auto\"===e?null:e}function di(t,i,e){var n=document.createElement(t);return n.className=i||\"\",e&&e.appendChild(n),n}function pi(t){var i=t.parentNode;i&&i.removeChild(t)}function mi(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function fi(t){var i=t.parentNode;i&&i.lastChild!==t&&i.appendChild(t)}function gi(t){var i=t.parentNode;i&&i.firstChild!==t&&i.insertBefore(t,i.firstChild)}function vi(t,i){if(void 0!==t.classList)return t.classList.contains(i);var e=Pi(t);return e.length>0&&new RegExp(\"(^|\\\\s)\"+i+\"(\\\\s|$)\").test(e)}function yi(t,i){if(void 0!==t.classList)for(var e=_(i),n=0,o=e.length;n<o;n++)t.classList.add(e[n]);else if(!vi(t,i)){var s=Pi(t);wi(t,(s?s+\" \":\"\")+i)}}function xi(t,i){void 0!==t.classList?t.classList.remove(i):wi(t,c((\" \"+Pi(t)+\" \").replace(\" \"+i+\" \",\" \")))}function wi(t,i){void 0===t.className.baseVal?t.className=i:t.className.baseVal=i}function Pi(t){return t.correspondingElement&&(t=t.correspondingElement),void 0===t.className.baseVal?t.className:t.className.baseVal}function bi(t,i){\"opacity\"in t.style?t.style.opacity=i:\"filter\"in t.style&&Li(t,i)}function Li(t,i){var e=!1,n=\"DXImageTransform.Microsoft.Alpha\";try{e=t.filters.item(n)}catch(t){if(1===i)return}i=Math.round(100*i),e?(e.Enabled=100!==i,e.Opacity=i):t.style.filter+=\" progid:\"+n+\"(opacity=\"+i+\")\"}function Ti(t){for(var i=document.documentElement.style,e=0;e<t.length;e++)if(t[e]in i)return t[e];return!1}function zi(t,i,e){var n=i||new B(0,0);t.style[hi]=(Ot.ie3d?\"translate(\"+n.x+\"px,\"+n.y+\"px)\":\"translate3d(\"+n.x+\"px,\"+n.y+\"px,0)\")+(e?\" scale(\"+e+\")\":\"\")}function Mi(t,i){t._leaflet_pos=i,Ot.any3d?zi(t,i):(t.style.left=i.x+\"px\",t.style.top=i.y+\"px\")}function Ci(t){return t._leaflet_pos||new B(0,0)}if(\"onselectstart\"in document)ni=function(){Ri(window,\"selectstart\",Gi)},oi=function(){Di(window,\"selectstart\",Gi)};else{var Zi=Ti([\"userSelect\",\"WebkitUserSelect\",\"OUserSelect\",\"MozUserSelect\",\"msUserSelect\"]);ni=function(){if(Zi){var t=document.documentElement.style;si=t[Zi],t[Zi]=\"none\"}},oi=function(){Zi&&(document.documentElement.style[Zi]=si,si=void 0)}}function Si(){Ri(window,\"dragstart\",Gi)}function ki(){Di(window,\"dragstart\",Gi)}function Ei(t){for(;-1===t.tabIndex;)t=t.parentNode;t.style&&(Bi(),ri=t,ai=t.style.outline,t.style.outline=\"none\",Ri(window,\"keydown\",Bi))}function Bi(){ri&&(ri.style.outline=ai,ri=void 0,ai=void 0,Di(window,\"keydown\",Bi))}function Ai(t){do{t=t.parentNode}while(!(t.offsetWidth&&t.offsetHeight||t===document.body));return t}function Ii(t){var i=t.getBoundingClientRect();return{x:i.width/t.offsetWidth||1,y:i.height/t.offsetHeight||1,boundingClientRect:i}}var Oi={__proto__:null,TRANSFORM:hi,TRANSITION:ui,TRANSITION_END:li,get:ci,getStyle:_i,create:di,remove:pi,empty:mi,toFront:fi,toBack:gi,hasClass:vi,addClass:yi,removeClass:xi,setClass:wi,getClass:Pi,setOpacity:bi,testProp:Ti,setTransform:zi,setPosition:Mi,getPosition:Ci,get disableTextSelection(){return ni},get enableTextSelection(){return oi},disableImageDrag:Si,enableImageDrag:ki,preventOutline:Ei,restoreOutline:Bi,getSizedParentNode:Ai,getScale:Ii};function Ri(t,i,e,n){if(i&&\"object\"==typeof i)for(var o in i)Wi(t,o,i[o],e);else for(var s=0,r=(i=_(i)).length;s<r;s++)Wi(t,i[s],e,n);return this}var Ni=\"_leaflet_events\";function Di(t,i,e,n){if(1===arguments.length)ji(t),delete t[Ni];else if(i&&\"object\"==typeof i)for(var o in i)Fi(t,o,i[o],e);else if(i=_(i),2===arguments.length)ji(t,(function(t){return-1!==v(i,t)}));else for(var s=0,r=i.length;s<r;s++)Fi(t,i[s],e,n);return this}function ji(t,i){for(var e in t[Ni]){var n=e.split(/\\d/)[0];i&&!i(n)||Fi(t,n,null,null,e)}}var Hi={mouseenter:\"mouseover\",mouseleave:\"mouseout\",wheel:!(\"onwheel\"in window)&&\"mousewheel\"};function Wi(t,i,e,n){var o=i+r(e)+(n?\"_\"+r(n):\"\");if(t[Ni]&&t[Ni][o])return this;var s=function(i){return e.call(n||t,i||window.event)},a=s;!Ot.touchNative&&Ot.pointer&&0===i.indexOf(\"touch\")?s=Vt(t,i,s):Ot.touch&&\"dblclick\"===i?s=ii(t,s):\"addEventListener\"in t?\"touchstart\"===i||\"touchmove\"===i||\"wheel\"===i||\"mousewheel\"===i?t.addEventListener(Hi[i]||i,s,!!Ot.passiveEvents&&{passive:!1}):\"mouseenter\"===i||\"mouseleave\"===i?(s=function(i){i=i||window.event,$i(t,i)&&a(i)},t.addEventListener(Hi[i],s,!1)):t.addEventListener(i,a,!1):t.attachEvent(\"on\"+i,s),t[Ni]=t[Ni]||{},t[Ni][o]=s}function Fi(t,i,e,n,o){o=o||i+r(e)+(n?\"_\"+r(n):\"\");var s=t[Ni]&&t[Ni][o];if(!s)return this;!Ot.touchNative&&Ot.pointer&&0===i.indexOf(\"touch\")?qt(t,i,s):Ot.touch&&\"dblclick\"===i?ei(t,s):\"removeEventListener\"in t?t.removeEventListener(Hi[i]||i,s,!1):t.detachEvent(\"on\"+i,s),t[Ni][o]=null}function Ui(t){return t.stopPropagation?t.stopPropagation():t.originalEvent?t.originalEvent._stopped=!0:t.cancelBubble=!0,this}function Vi(t){return Wi(t,\"wheel\",Ui),this}function qi(t){return Ri(t,\"mousedown touchstart dblclick contextmenu\",Ui),t._leaflet_disable_click=!0,this}function Gi(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this}function Ki(t){return Gi(t),Ui(t),this}function Yi(t,i){if(!i)return new B(t.clientX,t.clientY);var e=Ii(i),n=e.boundingClientRect;return new B((t.clientX-n.left)/e.x-i.clientLeft,(t.clientY-n.top)/e.y-i.clientTop)}var Xi=Ot.win&&Ot.chrome?2*window.devicePixelRatio:Ot.gecko?window.devicePixelRatio:1;function Ji(t){return Ot.edge?t.wheelDeltaY/2:t.deltaY&&0===t.deltaMode?-t.deltaY/Xi:t.deltaY&&1===t.deltaMode?20*-t.deltaY:t.deltaY&&2===t.deltaMode?60*-t.deltaY:t.deltaX||t.deltaZ?0:t.wheelDelta?(t.wheelDeltaY||t.wheelDelta)/2:t.detail&&Math.abs(t.detail)<32765?20*-t.detail:t.detail?t.detail/-32765*60:0}function $i(t,i){var e=i.relatedTarget;if(!e)return!0;try{for(;e&&e!==t;)e=e.parentNode}catch(t){return!1}return e!==t}var Qi={__proto__:null,on:Ri,off:Di,stopPropagation:Ui,disableScrollPropagation:Vi,disableClickPropagation:qi,preventDefault:Gi,stop:Ki,getMousePosition:Yi,getWheelDelta:Ji,isExternalTarget:$i,addListener:Ri,removeListener:Di},te=E.extend({run:function(t,i,e,n){this.stop(),this._el=t,this._inProgress=!0,this._duration=e||.25,this._easeOutPower=1/Math.max(n||.5,.2),this._startPos=Ci(t),this._offset=i.subtract(this._startPos),this._startTime=+new Date,this.fire(\"start\"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=z(this._animate,this),this._step()},_step:function(t){var i=+new Date-this._startTime,e=1e3*this._duration;i<e?this._runFrame(this._easeOut(i/e),t):(this._runFrame(1),this._complete())},_runFrame:function(t,i){var e=this._startPos.add(this._offset.multiplyBy(t));i&&e._round(),Mi(this._el,e),this.fire(\"step\")},_complete:function(){M(this._animId),this._inProgress=!1,this.fire(\"end\")},_easeOut:function(t){return 1-Math.pow(1-t,this._easeOutPower)}}),ie=E.extend({options:{crs:Y,center:void 0,zoom:void 0,minZoom:void 0,maxZoom:void 0,layers:[],maxBounds:void 0,renderer:void 0,zoomAnimation:!0,zoomAnimationThreshold:4,fadeAnimation:!0,markerZoomAnimation:!0,transform3DLimit:8388608,zoomSnap:1,zoomDelta:1,trackResize:!0},initialize:function(t,i){i=d(this,i),this._handlers=[],this._layers={},this._zoomBoundLayers={},this._sizeChanged=!0,this._initContainer(t),this._initLayout(),this._onResize=o(this._onResize,this),this._initEvents(),i.maxBounds&&this.setMaxBounds(i.maxBounds),void 0!==i.zoom&&(this._zoom=this._limitZoom(i.zoom)),i.center&&void 0!==i.zoom&&this.setView(H(i.center),i.zoom,{reset:!0}),this.callInitHooks(),this._zoomAnimated=ui&&Ot.any3d&&!Ot.mobileOpera&&this.options.zoomAnimation,this._zoomAnimated&&(this._createAnimProxy(),Ri(this._proxy,li,this._catchTransitionEnd,this)),this._addLayers(this.options.layers)},setView:function(t,i,n){return i=void 0===i?this._zoom:this._limitZoom(i),t=this._limitCenter(H(t),i,this.options.maxBounds),n=n||{},this._stop(),this._loaded&&!n.reset&&!0!==n&&(void 0!==n.animate&&(n.zoom=e({animate:n.animate},n.zoom),n.pan=e({animate:n.animate,duration:n.duration},n.pan)),this._zoom!==i?this._tryAnimatedZoom&&this._tryAnimatedZoom(t,i,n.zoom):this._tryAnimatedPan(t,n.pan))?(clearTimeout(this._sizeTimer),this):(this._resetView(t,i),this)},setZoom:function(t,i){return this._loaded?this.setView(this.getCenter(),t,{zoom:i}):(this._zoom=t,this)},zoomIn:function(t,i){return t=t||(Ot.any3d?this.options.zoomDelta:1),this.setZoom(this._zoom+t,i)},zoomOut:function(t,i){return t=t||(Ot.any3d?this.options.zoomDelta:1),this.setZoom(this._zoom-t,i)},setZoomAround:function(t,i,e){var n=this.getZoomScale(i),o=this.getSize().divideBy(2),s=(t instanceof B?t:this.latLngToContainerPoint(t)).subtract(o).multiplyBy(1-1/n),r=this.containerPointToLatLng(o.add(s));return this.setView(r,i,{zoom:e})},_getBoundsCenterZoom:function(t,i){i=i||{},t=t.getBounds?t.getBounds():D(t);var e=I(i.paddingTopLeft||i.padding||[0,0]),n=I(i.paddingBottomRight||i.padding||[0,0]),o=this.getBoundsZoom(t,!1,e.add(n));if((o=\"number\"==typeof i.maxZoom?Math.min(i.maxZoom,o):o)===1/0)return{center:t.getCenter(),zoom:o};var s=n.subtract(e).divideBy(2),r=this.project(t.getSouthWest(),o),a=this.project(t.getNorthEast(),o);return{center:this.unproject(r.add(a).divideBy(2).add(s),o),zoom:o}},fitBounds:function(t,i){if(!(t=D(t)).isValid())throw new Error(\"Bounds are not valid.\");var e=this._getBoundsCenterZoom(t,i);return this.setView(e.center,e.zoom,i)},fitWorld:function(t){return this.fitBounds([[-90,-180],[90,180]],t)},panTo:function(t,i){return this.setView(t,this._zoom,{pan:i})},panBy:function(t,i){if(i=i||{},!(t=I(t).round()).x&&!t.y)return this.fire(\"moveend\");if(!0!==i.animate&&!this.getSize().contains(t))return this._resetView(this.unproject(this.project(this.getCenter()).add(t)),this.getZoom()),this;if(this._panAnim||(this._panAnim=new te,this._panAnim.on({step:this._onPanTransitionStep,end:this._onPanTransitionEnd},this)),i.noMoveStart||this.fire(\"movestart\"),!1!==i.animate){yi(this._mapPane,\"leaflet-pan-anim\");var e=this._getMapPanePos().subtract(t).round();this._panAnim.run(this._mapPane,e,i.duration||.25,i.easeLinearity)}else this._rawPanBy(t),this.fire(\"move\").fire(\"moveend\");return this},flyTo:function(t,i,e){if(!1===(e=e||{}).animate||!Ot.any3d)return this.setView(t,i,e);this._stop();var n=this.project(this.getCenter()),o=this.project(t),s=this.getSize(),r=this._zoom;t=H(t),i=void 0===i?r:i;var a=Math.max(s.x,s.y),h=a*this.getZoomScale(r,i),u=o.distanceTo(n)||1,l=1.42,c=l*l;function _(t){var i=(h*h-a*a+(t?-1:1)*c*c*u*u)/(2*(t?h:a)*c*u),e=Math.sqrt(i*i+1)-i;return e<1e-9?-18:Math.log(e)}function d(t){return(Math.exp(t)-Math.exp(-t))/2}function p(t){return(Math.exp(t)+Math.exp(-t))/2}function m(t){return d(t)/p(t)}var f=_(0);function g(t){return a*(p(f)/p(f+l*t))}function v(t){return a*(p(f)*m(f+l*t)-d(f))/c}function y(t){return 1-Math.pow(1-t,1.5)}var x=Date.now(),w=(_(1)-f)/l,P=e.duration?1e3*e.duration:1e3*w*.8;function b(){var e=(Date.now()-x)/P,s=y(e)*w;e<=1?(this._flyToFrame=z(b,this),this._move(this.unproject(n.add(o.subtract(n).multiplyBy(v(s)/u)),r),this.getScaleZoom(a/g(s),r),{flyTo:!0})):this._move(t,i)._moveEnd(!0)}return this._moveStart(!0,e.noMoveStart),b.call(this),this},flyToBounds:function(t,i){var e=this._getBoundsCenterZoom(t,i);return this.flyTo(e.center,e.zoom,i)},setMaxBounds:function(t){return(t=D(t)).isValid()?(this.options.maxBounds&&this.off(\"moveend\",this._panInsideMaxBounds),this.options.maxBounds=t,this._loaded&&this._panInsideMaxBounds(),this.on(\"moveend\",this._panInsideMaxBounds)):(this.options.maxBounds=null,this.off(\"moveend\",this._panInsideMaxBounds))},setMinZoom:function(t){var i=this.options.minZoom;return this.options.minZoom=t,this._loaded&&i!==t&&(this.fire(\"zoomlevelschange\"),this.getZoom()<this.options.minZoom)?this.setZoom(t):this},setMaxZoom:function(t){var i=this.options.maxZoom;return this.options.maxZoom=t,this._loaded&&i!==t&&(this.fire(\"zoomlevelschange\"),this.getZoom()>this.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,i){this._enforcingBounds=!0;var e=this.getCenter(),n=this._limitCenter(e,this._zoom,D(t));return e.equals(n)||this.panTo(n,i),this._enforcingBounds=!1,this},panInside:function(t,i){var e=I((i=i||{}).paddingTopLeft||i.padding||[0,0]),n=I(i.paddingBottomRight||i.padding||[0,0]),o=this.project(this.getCenter()),s=this.project(t),r=this.getPixelBounds(),a=R([r.min.add(e),r.max.subtract(n)]),h=a.getSize();if(!a.contains(s)){this._enforcingBounds=!0;var u=s.subtract(a.getCenter()),l=a.extend(s).getSize().subtract(h);o.x+=u.x<0?-l.x:l.x,o.y+=u.y<0?-l.y:l.y,this.panTo(this.unproject(o),i),this._enforcingBounds=!1}return this},invalidateSize:function(t){if(!this._loaded)return this;t=e({animate:!1,pan:!0},!0===t?{animate:!0}:t);var i=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var n=this.getSize(),s=i.divideBy(2).round(),r=n.divideBy(2).round(),a=s.subtract(r);return a.x||a.y?(t.animate&&t.pan?this.panBy(a):(t.pan&&this._rawPanBy(a),this.fire(\"move\"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(o(this.fire,this,\"moveend\"),200)):this.fire(\"moveend\")),this.fire(\"resize\",{oldSize:i,newSize:n})):this},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire(\"viewreset\"),this._stop()},locate:function(t){if(t=this._locateOptions=e({timeout:1e4,watch:!1},t),!(\"geolocation\"in navigator))return this._handleGeolocationError({code:0,message:\"Geolocation not supported.\"}),this;var i=o(this._handleGeolocationResponse,this),n=o(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(i,n,t):navigator.geolocation.getCurrentPosition(i,n,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){if(this._container._leaflet_id){var i=t.code,e=t.message||(1===i?\"permission denied\":2===i?\"position unavailable\":\"timeout\");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire(\"locationerror\",{code:i,message:\"Geolocation error: \"+e+\".\"})}},_handleGeolocationResponse:function(t){if(this._container._leaflet_id){var i=new j(t.coords.latitude,t.coords.longitude),e=i.toBounds(2*t.coords.accuracy),n=this._locateOptions;if(n.setView){var o=this.getBoundsZoom(e);this.setView(i,n.maxZoom?Math.min(o,n.maxZoom):o)}var s={latlng:i,bounds:e,timestamp:t.timestamp};for(var r in t.coords)\"number\"==typeof t.coords[r]&&(s[r]=t.coords[r]);this.fire(\"locationfound\",s)}},addHandler:function(t,i){if(!i)return this;var e=this[t]=new i(this);return this._handlers.push(e),this.options[t]&&e.enable(),this},remove:function(){if(this._initEvents(!0),this.options.maxBounds&&this.off(\"moveend\",this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw new Error(\"Map container is being reused by another instance\");try{delete this._container._leaflet_id,delete this._containerId}catch(t){this._container._leaflet_id=void 0,this._containerId=void 0}var t;for(t in void 0!==this._locationWatchId&&this.stopLocate(),this._stop(),pi(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(M(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire(\"unload\"),this._layers)this._layers[t].remove();for(t in this._panes)pi(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,i){var e=di(\"div\",\"leaflet-pane\"+(t?\" leaflet-\"+t.replace(\"Pane\",\"\")+\"-pane\":\"\"),i||this._mapPane);return t&&(this._panes[t]=e),e},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds();return new N(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return void 0===this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return void 0===this.options.maxZoom?void 0===this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,i,e){t=D(t),e=I(e||[0,0]);var n=this.getZoom()||0,o=this.getMinZoom(),s=this.getMaxZoom(),r=t.getNorthWest(),a=t.getSouthEast(),h=this.getSize().subtract(e),u=R(this.project(a,n),this.project(r,n)).getSize(),l=Ot.any3d?this.options.zoomSnap:1,c=h.x/u.x,_=h.y/u.y,d=i?Math.max(c,_):Math.min(c,_);return n=this.getScaleZoom(d,n),l&&(n=Math.round(n/(l/100))*(l/100),n=i?Math.ceil(n/l)*l:Math.floor(n/l)*l),Math.max(o,Math.min(s,n))},getSize:function(){return this._size&&!this._sizeChanged||(this._size=new B(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,i){var e=this._getTopLeftPoint(t,i);return new O(e,e.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(void 0===t?this.getZoom():t)},getPane:function(t){return\"string\"==typeof t?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,i){var e=this.options.crs;return i=void 0===i?this._zoom:i,e.scale(t)/e.scale(i)},getScaleZoom:function(t,i){var e=this.options.crs;i=void 0===i?this._zoom:i;var n=e.zoom(t*e.scale(i));return isNaN(n)?1/0:n},project:function(t,i){return i=void 0===i?this._zoom:i,this.options.crs.latLngToPoint(H(t),i)},unproject:function(t,i){return i=void 0===i?this._zoom:i,this.options.crs.pointToLatLng(I(t),i)},layerPointToLatLng:function(t){var i=I(t).add(this.getPixelOrigin());return this.unproject(i)},latLngToLayerPoint:function(t){return this.project(H(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(H(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(D(t))},distance:function(t,i){return this.options.crs.distance(H(t),H(i))},containerPointToLayerPoint:function(t){return I(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return I(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var i=this.containerPointToLayerPoint(I(t));return this.layerPointToLatLng(i)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(H(t)))},mouseEventToContainerPoint:function(t){return Yi(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var i=this._container=ci(t);if(!i)throw new Error(\"Map container not found.\");if(i._leaflet_id)throw new Error(\"Map container is already initialized.\");Ri(i,\"scroll\",this._onScroll,this),this._containerId=r(i)},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&Ot.any3d,yi(t,\"leaflet-container\"+(Ot.touch?\" leaflet-touch\":\"\")+(Ot.retina?\" leaflet-retina\":\"\")+(Ot.ielt9?\" leaflet-oldie\":\"\")+(Ot.safari?\" leaflet-safari\":\"\")+(this._fadeAnimated?\" leaflet-fade-anim\":\"\"));var i=_i(t,\"position\");\"absolute\"!==i&&\"relative\"!==i&&\"fixed\"!==i&&(t.style.position=\"relative\"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane(\"mapPane\",this._container),Mi(this._mapPane,new B(0,0)),this.createPane(\"tilePane\"),this.createPane(\"overlayPane\"),this.createPane(\"shadowPane\"),this.createPane(\"markerPane\"),this.createPane(\"tooltipPane\"),this.createPane(\"popupPane\"),this.options.markerZoomAnimation||(yi(t.markerPane,\"leaflet-zoom-hide\"),yi(t.shadowPane,\"leaflet-zoom-hide\"))},_resetView:function(t,i){Mi(this._mapPane,new B(0,0));var e=!this._loaded;this._loaded=!0,i=this._limitZoom(i),this.fire(\"viewprereset\");var n=this._zoom!==i;this._moveStart(n,!1)._move(t,i)._moveEnd(n),this.fire(\"viewreset\"),e&&this.fire(\"load\")},_moveStart:function(t,i){return t&&this.fire(\"zoomstart\"),i||this.fire(\"movestart\"),this},_move:function(t,i,e,n){void 0===i&&(i=this._zoom);var o=this._zoom!==i;return this._zoom=i,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),n?e&&e.pinch&&this.fire(\"zoom\",e):((o||e&&e.pinch)&&this.fire(\"zoom\",e),this.fire(\"move\",e)),this},_moveEnd:function(t){return t&&this.fire(\"zoomend\"),this.fire(\"moveend\")},_stop:function(){return M(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){Mi(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error(\"Set map center and zoom first.\")},_initEvents:function(t){this._targets={},this._targets[r(this._container)]=this;var i=t?Di:Ri;i(this._container,\"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup\",this._handleDOMEvent,this),this.options.trackResize&&i(window,\"resize\",this._onResize,this),Ot.any3d&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,\"moveend\",this._onMoveEnd)},_onResize:function(){M(this._resizeRequest),this._resizeRequest=z((function(){this.invalidateSize({debounceMoveend:!0})}),this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,i){for(var e,n=[],o=\"mouseout\"===i||\"mouseover\"===i,s=t.target||t.srcElement,a=!1;s;){if((e=this._targets[r(s)])&&(\"click\"===i||\"preclick\"===i)&&this._draggableMoved(e)){a=!0;break}if(e&&e.listens(i,!0)){if(o&&!$i(s,t))break;if(n.push(e),o)break}if(s===this._container)break;s=s.parentNode}return n.length||a||o||!this.listens(i,!0)||(n=[this]),n},_isClickDisabled:function(t){for(;t!==this._container;){if(t._leaflet_disable_click)return!0;t=t.parentNode}},_handleDOMEvent:function(t){var i=t.target||t.srcElement;if(!(!this._loaded||i._leaflet_disable_events||\"click\"===t.type&&this._isClickDisabled(i))){var e=t.type;\"mousedown\"===e&&Ei(i),this._fireDOMEvent(t,e)}},_mouseEvents:[\"click\",\"dblclick\",\"mouseover\",\"mouseout\",\"contextmenu\"],_fireDOMEvent:function(t,i,n){if(\"click\"===t.type){var o=e({},t);o.type=\"preclick\",this._fireDOMEvent(o,o.type,n)}var s=this._findEventTargets(t,i);if(n){for(var r=[],a=0;a<n.length;a++)n[a].listens(i,!0)&&r.push(n[a]);s=r.concat(s)}if(s.length){\"contextmenu\"===i&&Gi(t);var h=s[0],u={originalEvent:t};if(\"keypress\"!==t.type&&\"keydown\"!==t.type&&\"keyup\"!==t.type){var l=h.getLatLng&&(!h._radius||h._radius<=10);u.containerPoint=l?this.latLngToContainerPoint(h.getLatLng()):this.mouseEventToContainerPoint(t),u.layerPoint=this.containerPointToLayerPoint(u.containerPoint),u.latlng=l?h.getLatLng():this.layerPointToLatLng(u.layerPoint)}for(a=0;a<s.length;a++)if(s[a].fire(i,u,!0),u.originalEvent._stopped||!1===s[a].options.bubblingMouseEvents&&-1!==v(this._mouseEvents,i))return}},_draggableMoved:function(t){return(t=t.dragging&&t.dragging.enabled()?t:this).dragging&&t.dragging.moved()||this.boxZoom&&this.boxZoom.moved()},_clearHandlers:function(){for(var t=0,i=this._handlers.length;t<i;t++)this._handlers[t].disable()},whenReady:function(t,i){return this._loaded?t.call(i||this,{target:this}):this.on(\"load\",t,i),this},_getMapPanePos:function(){return Ci(this._mapPane)||new B(0,0)},_moved:function(){var t=this._getMapPanePos();return t&&!t.equals([0,0])},_getTopLeftPoint:function(t,i){return(t&&void 0!==i?this._getNewPixelOrigin(t,i):this.getPixelOrigin()).subtract(this._getMapPanePos())},_getNewPixelOrigin:function(t,i){var e=this.getSize()._divideBy(2);return this.project(t,i)._subtract(e)._add(this._getMapPanePos())._round()},_latLngToNewLayerPoint:function(t,i,e){var n=this._getNewPixelOrigin(e,i);return this.project(t,i)._subtract(n)},_latLngBoundsToNewLayerBounds:function(t,i,e){var n=this._getNewPixelOrigin(e,i);return R([this.project(t.getSouthWest(),i)._subtract(n),this.project(t.getNorthWest(),i)._subtract(n),this.project(t.getSouthEast(),i)._subtract(n),this.project(t.getNorthEast(),i)._subtract(n)])},_getCenterLayerPoint:function(){return this.containerPointToLayerPoint(this.getSize()._divideBy(2))},_getCenterOffset:function(t){return this.latLngToLayerPoint(t).subtract(this._getCenterLayerPoint())},_limitCenter:function(t,i,e){if(!e)return t;var n=this.project(t,i),o=this.getSize().divideBy(2),s=new O(n.subtract(o),n.add(o)),r=this._getBoundsOffset(s,e,i);return r.round().equals([0,0])?t:this.unproject(n.add(r),i)},_limitOffset:function(t,i){if(!i)return t;var e=this.getPixelBounds(),n=new O(e.min.add(t),e.max.add(t));return t.add(this._getBoundsOffset(n,i))},_getBoundsOffset:function(t,i,e){var n=R(this.project(i.getNorthEast(),e),this.project(i.getSouthWest(),e)),o=n.min.subtract(t.min),s=n.max.subtract(t.max);return new B(this._rebound(o.x,-s.x),this._rebound(o.y,-s.y))},_rebound:function(t,i){return t+i>0?Math.round(t-i)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(i))},_limitZoom:function(t){var i=this.getMinZoom(),e=this.getMaxZoom(),n=Ot.any3d?this.options.zoomSnap:1;return n&&(t=Math.round(t/n)*n),Math.max(i,Math.min(e,t))},_onPanTransitionStep:function(){this.fire(\"move\")},_onPanTransitionEnd:function(){xi(this._mapPane,\"leaflet-pan-anim\"),this.fire(\"moveend\")},_tryAnimatedPan:function(t,i){var e=this._getCenterOffset(t)._trunc();return!(!0!==(i&&i.animate)&&!this.getSize().contains(e)||(this.panBy(e,i),0))},_createAnimProxy:function(){var t=this._proxy=di(\"div\",\"leaflet-proxy leaflet-zoom-animated\");this._panes.mapPane.appendChild(t),this.on(\"zoomanim\",(function(t){var i=hi,e=this._proxy.style[i];zi(this._proxy,this.project(t.center,t.zoom),this.getZoomScale(t.zoom,1)),e===this._proxy.style[i]&&this._animatingZoom&&this._onZoomTransitionEnd()}),this),this.on(\"load moveend\",this._animMoveEnd,this),this._on(\"unload\",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){pi(this._proxy),this.off(\"load moveend\",this._animMoveEnd,this),delete this._proxy},_animMoveEnd:function(){var t=this.getCenter(),i=this.getZoom();zi(this._proxy,this.project(t,i),this.getZoomScale(i,1))},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf(\"transform\")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName(\"leaflet-zoom-animated\").length},_tryAnimatedZoom:function(t,i,e){if(this._animatingZoom)return!0;if(e=e||{},!this._zoomAnimated||!1===e.animate||this._nothingToAnimate()||Math.abs(i-this._zoom)>this.options.zoomAnimationThreshold)return!1;var n=this.getZoomScale(i),o=this._getCenterOffset(t)._divideBy(1-1/n);return!(!0!==e.animate&&!this.getSize().contains(o)||(z((function(){this._moveStart(!0,!1)._animateZoom(t,i,!0)}),this),0))},_animateZoom:function(t,i,e,n){this._mapPane&&(e&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=i,yi(this._mapPane,\"leaflet-zoom-anim\")),this.fire(\"zoomanim\",{center:t,zoom:i,noUpdate:n}),this._tempFireZoomEvent||(this._tempFireZoomEvent=this._zoom!==this._animateToZoom),this._move(this._animateToCenter,this._animateToZoom,void 0,!0),setTimeout(o(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&xi(this._mapPane,\"leaflet-zoom-anim\"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom,void 0,!0),this._tempFireZoomEvent&&this.fire(\"zoom\"),delete this._tempFireZoomEvent,this.fire(\"move\"),this._moveEnd(!0))}});function ee(t,i){return new ie(t,i)}var ne=Z.extend({options:{position:\"topright\"},initialize:function(t){d(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var i=this._map;return i&&i.removeControl(this),this.options.position=t,i&&i.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var i=this._container=this.onAdd(t),e=this.getPosition(),n=t._controlCorners[e];return yi(i,\"leaflet-control\"),-1!==e.indexOf(\"bottom\")?n.insertBefore(i,n.firstChild):n.appendChild(i),this._map.on(\"unload\",this.remove,this),this},remove:function(){return this._map?(pi(this._container),this.onRemove&&this.onRemove(this._map),this._map.off(\"unload\",this.remove,this),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),oe=function(t){return new ne(t)};ie.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){var t=this._controlCorners={},i=\"leaflet-\",e=this._controlContainer=di(\"div\",i+\"control-container\",this._container);function n(n,o){var s=i+n+\" \"+i+o;t[n+o]=di(\"div\",s,e)}n(\"top\",\"left\"),n(\"top\",\"right\"),n(\"bottom\",\"left\"),n(\"bottom\",\"right\")},_clearControlPos:function(){for(var t in this._controlCorners)pi(this._controlCorners[t]);pi(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var se=ne.extend({options:{collapsed:!0,position:\"topright\",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,i,e,n){return e<n?-1:n<e?1:0}},initialize:function(t,i,e){for(var n in d(this,e),this._layerControlInputs=[],this._layers=[],this._lastZIndex=0,this._handlingClick=!1,t)this._addLayer(t[n],n);for(n in i)this._addLayer(i[n],n,!0)},onAdd:function(t){this._initLayout(),this._update(),this._map=t,t.on(\"zoomend\",this._checkDisabledLayers,this);for(var i=0;i<this._layers.length;i++)this._layers[i].layer.on(\"add remove\",this._onLayerChange,this);return this._container},addTo:function(t){return ne.prototype.addTo.call(this,t),this._expandIfNotCollapsed()},onRemove:function(){this._map.off(\"zoomend\",this._checkDisabledLayers,this);for(var t=0;t<this._layers.length;t++)this._layers[t].layer.off(\"add remove\",this._onLayerChange,this)},addBaseLayer:function(t,i){return this._addLayer(t,i),this._map?this._update():this},addOverlay:function(t,i){return this._addLayer(t,i,!0),this._map?this._update():this},removeLayer:function(t){t.off(\"add remove\",this._onLayerChange,this);var i=this._getLayer(r(t));return i&&this._layers.splice(this._layers.indexOf(i),1),this._map?this._update():this},expand:function(){yi(this._container,\"leaflet-control-layers-expanded\"),this._section.style.height=null;var t=this._map.getSize().y-(this._container.offsetTop+50);return t<this._section.clientHeight?(yi(this._section,\"leaflet-control-layers-scrollbar\"),this._section.style.height=t+\"px\"):xi(this._section,\"leaflet-control-layers-scrollbar\"),this._checkDisabledLayers(),this},collapse:function(){return xi(this._container,\"leaflet-control-layers-expanded\"),this},_initLayout:function(){var t=\"leaflet-control-layers\",i=this._container=di(\"div\",t),e=this.options.collapsed;i.setAttribute(\"aria-haspopup\",!0),qi(i),Vi(i);var n=this._section=di(\"section\",t+\"-list\");e&&(this._map.on(\"click\",this.collapse,this),Ri(i,{mouseenter:function(){Ri(n,\"click\",Gi),this.expand(),setTimeout((function(){Di(n,\"click\",Gi)}))},mouseleave:this.collapse},this));var o=this._layersLink=di(\"a\",t+\"-toggle\",i);o.href=\"#\",o.title=\"Layers\",o.setAttribute(\"role\",\"button\"),Ri(o,\"click\",Gi),Ri(o,\"focus\",this.expand,this),e||this.expand(),this._baseLayersList=di(\"div\",t+\"-base\",n),this._separator=di(\"div\",t+\"-separator\",n),this._overlaysList=di(\"div\",t+\"-overlays\",n),i.appendChild(n)},_getLayer:function(t){for(var i=0;i<this._layers.length;i++)if(this._layers[i]&&r(this._layers[i].layer)===t)return this._layers[i]},_addLayer:function(t,i,e){this._map&&t.on(\"add remove\",this._onLayerChange,this),this._layers.push({layer:t,name:i,overlay:e}),this.options.sortLayers&&this._layers.sort(o((function(t,i){return this.options.sortFunction(t.layer,i.layer,t.name,i.name)}),this)),this.options.autoZIndex&&t.setZIndex&&(this._lastZIndex++,t.setZIndex(this._lastZIndex)),this._expandIfNotCollapsed()},_update:function(){if(!this._container)return this;mi(this._baseLayersList),mi(this._overlaysList),this._layerControlInputs=[];var t,i,e,n,o=0;for(e=0;e<this._layers.length;e++)n=this._layers[e],this._addItem(n),i=i||n.overlay,t=t||!n.overlay,o+=n.overlay?0:1;return this.options.hideSingleBase&&(t=t&&o>1,this._baseLayersList.style.display=t?\"\":\"none\"),this._separator.style.display=i&&t?\"\":\"none\",this},_onLayerChange:function(t){this._handlingClick||this._update();var i=this._getLayer(r(t.target)),e=i.overlay?\"add\"===t.type?\"overlayadd\":\"overlayremove\":\"add\"===t.type?\"baselayerchange\":null;e&&this._map.fire(e,i)},_createRadioElement:function(t,i){var e='<input type=\"radio\" class=\"leaflet-control-layers-selector\" name=\"'+t+'\"'+(i?' checked=\"checked\"':\"\")+\"/>\",n=document.createElement(\"div\");return n.innerHTML=e,n.firstChild},_addItem:function(t){var i,e=document.createElement(\"label\"),n=this._map.hasLayer(t.layer);t.overlay?((i=document.createElement(\"input\")).type=\"checkbox\",i.className=\"leaflet-control-layers-selector\",i.defaultChecked=n):i=this._createRadioElement(\"leaflet-base-layers_\"+r(this),n),this._layerControlInputs.push(i),i.layerId=r(t.layer),Ri(i,\"click\",this._onInputClick,this);var o=document.createElement(\"span\");o.innerHTML=\" \"+t.name;var s=document.createElement(\"span\");return e.appendChild(s),s.appendChild(i),s.appendChild(o),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){var t,i,e=this._layerControlInputs,n=[],o=[];this._handlingClick=!0;for(var s=e.length-1;s>=0;s--)t=e[s],i=this._getLayer(t.layerId).layer,t.checked?n.push(i):t.checked||o.push(i);for(s=0;s<o.length;s++)this._map.hasLayer(o[s])&&this._map.removeLayer(o[s]);for(s=0;s<n.length;s++)this._map.hasLayer(n[s])||this._map.addLayer(n[s]);this._handlingClick=!1,this._refocusOnMap()},_checkDisabledLayers:function(){for(var t,i,e=this._layerControlInputs,n=this._map.getZoom(),o=e.length-1;o>=0;o--)t=e[o],i=this._getLayer(t.layerId).layer,t.disabled=void 0!==i.options.minZoom&&n<i.options.minZoom||void 0!==i.options.maxZoom&&n>i.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this}}),re=function(t,i,e){return new se(t,i,e)},ae=ne.extend({options:{position:\"topleft\",zoomInText:'<span aria-hidden=\"true\">+</span>',zoomInTitle:\"Zoom in\",zoomOutText:'<span aria-hidden=\"true\">&#x2212;</span>',zoomOutTitle:\"Zoom out\"},onAdd:function(t){var i=\"leaflet-control-zoom\",e=di(\"div\",i+\" leaflet-bar\"),n=this.options;return this._zoomInButton=this._createButton(n.zoomInText,n.zoomInTitle,i+\"-in\",e,this._zoomIn),this._zoomOutButton=this._createButton(n.zoomOutText,n.zoomOutTitle,i+\"-out\",e,this._zoomOut),this._updateDisabled(),t.on(\"zoomend zoomlevelschange\",this._updateDisabled,this),e},onRemove:function(t){t.off(\"zoomend zoomlevelschange\",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoom<this._map.getMaxZoom()&&this._map.zoomIn(this._map.options.zoomDelta*(t.shiftKey?3:1))},_zoomOut:function(t){!this._disabled&&this._map._zoom>this._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,i,e,n,o){var s=di(\"a\",e,n);return s.innerHTML=t,s.href=\"#\",s.title=i,s.setAttribute(\"role\",\"button\"),s.setAttribute(\"aria-label\",i),qi(s),Ri(s,\"click\",Ki),Ri(s,\"click\",o,this),Ri(s,\"click\",this._refocusOnMap,this),s},_updateDisabled:function(){var t=this._map,i=\"leaflet-disabled\";xi(this._zoomInButton,i),xi(this._zoomOutButton,i),this._zoomInButton.setAttribute(\"aria-disabled\",\"false\"),this._zoomOutButton.setAttribute(\"aria-disabled\",\"false\"),(this._disabled||t._zoom===t.getMinZoom())&&(yi(this._zoomOutButton,i),this._zoomOutButton.setAttribute(\"aria-disabled\",\"true\")),(this._disabled||t._zoom===t.getMaxZoom())&&(yi(this._zoomInButton,i),this._zoomInButton.setAttribute(\"aria-disabled\",\"true\"))}});ie.mergeOptions({zoomControl:!0}),ie.addInitHook((function(){this.options.zoomControl&&(this.zoomControl=new ae,this.addControl(this.zoomControl))}));var he=function(t){return new ae(t)},ue=ne.extend({options:{position:\"bottomleft\",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var i=\"leaflet-control-scale\",e=di(\"div\",i),n=this.options;return this._addScales(n,i+\"-line\",e),t.on(n.updateWhenIdle?\"moveend\":\"move\",this._update,this),t.whenReady(this._update,this),e},onRemove:function(t){t.off(this.options.updateWhenIdle?\"moveend\":\"move\",this._update,this)},_addScales:function(t,i,e){t.metric&&(this._mScale=di(\"div\",i,e)),t.imperial&&(this._iScale=di(\"div\",i,e))},_update:function(){var t=this._map,i=t.getSize().y/2,e=t.distance(t.containerPointToLatLng([0,i]),t.containerPointToLatLng([this.options.maxWidth,i]));this._updateScales(e)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var i=this._getRoundNum(t),e=i<1e3?i+\" m\":i/1e3+\" km\";this._updateScale(this._mScale,e,i/t)},_updateImperial:function(t){var i,e,n,o=3.2808399*t;o>5280?(i=o/5280,e=this._getRoundNum(i),this._updateScale(this._iScale,e+\" mi\",e/i)):(n=this._getRoundNum(o),this._updateScale(this._iScale,n+\" ft\",n/o))},_updateScale:function(t,i,e){t.style.width=Math.round(this.options.maxWidth*e)+\"px\",t.innerHTML=i},_getRoundNum:function(t){var i=Math.pow(10,(Math.floor(t)+\"\").length-1),e=t/i;return i*(e=e>=10?10:e>=5?5:e>=3?3:e>=2?2:1)}}),le=function(t){return new ue(t)},ce='<svg aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"8\"><path fill=\"#4C7BE1\" d=\"M0 0h12v4H0z\"/><path fill=\"#FFD500\" d=\"M0 4h12v3H0z\"/><path fill=\"#E0BC00\" d=\"M0 7h12v1H0z\"/></svg>',_e=ne.extend({options:{position:\"bottomright\",prefix:'<a href=\"https://leafletjs.com\" title=\"A JavaScript library for interactive maps\">'+(Ot.inlineSvg?ce+\" \":\"\")+\"Leaflet</a>\"},initialize:function(t){d(this,t),this._attributions={}},onAdd:function(t){for(var i in t.attributionControl=this,this._container=di(\"div\",\"leaflet-control-attribution\"),qi(this._container),t._layers)t._layers[i].getAttribution&&this.addAttribution(t._layers[i].getAttribution());return this._update(),t.on(\"layeradd\",this._addAttribution,this),this._container},onRemove:function(t){t.off(\"layeradd\",this._addAttribution,this)},_addAttribution:function(t){t.layer.getAttribution&&(this.addAttribution(t.layer.getAttribution()),t.layer.once(\"remove\",(function(){this.removeAttribution(t.layer.getAttribution())}),this))},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var t=[];for(var i in this._attributions)this._attributions[i]&&t.push(i);var e=[];this.options.prefix&&e.push(this.options.prefix),t.length&&e.push(t.join(\", \")),this._container.innerHTML=e.join(' <span aria-hidden=\"true\">|</span> ')}}});ie.mergeOptions({attributionControl:!0}),ie.addInitHook((function(){this.options.attributionControl&&(new _e).addTo(this)}));var de=function(t){return new _e(t)};ne.Layers=se,ne.Zoom=ae,ne.Scale=ue,ne.Attribution=_e,oe.layers=re,oe.zoom=he,oe.scale=le,oe.attribution=de;var pe=Z.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled||(this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});pe.addTo=function(t,i){return t.addHandler(i,this),this};var me,fe={Events:k},ge=Ot.touch?\"touchstart mousedown\":\"mousedown\",ve=E.extend({options:{clickTolerance:3},initialize:function(t,i,e,n){d(this,n),this._element=t,this._dragStartTarget=i||t,this._preventOutline=e},enable:function(){this._enabled||(Ri(this._dragStartTarget,ge,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(ve._dragging===this&&this.finishDrag(!0),Di(this._dragStartTarget,ge,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(this._enabled&&(this._moved=!1,!vi(this._element,\"leaflet-zoom-anim\")))if(t.touches&&1!==t.touches.length)ve._dragging===this&&this.finishDrag();else if(!(ve._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(ve._dragging=this,this._preventOutline&&Ei(this._element),Si(),ni(),this._moving))){this.fire(\"down\");var i=t.touches?t.touches[0]:t,e=Ai(this._element);this._startPoint=new B(i.clientX,i.clientY),this._startPos=Ci(this._element),this._parentScale=Ii(e);var n=\"mousedown\"===t.type;Ri(document,n?\"mousemove\":\"touchmove\",this._onMove,this),Ri(document,n?\"mouseup\":\"touchend touchcancel\",this._onUp,this)}},_onMove:function(t){if(this._enabled)if(t.touches&&t.touches.length>1)this._moved=!0;else{var i=t.touches&&1===t.touches.length?t.touches[0]:t,e=new B(i.clientX,i.clientY)._subtract(this._startPoint);(e.x||e.y)&&(Math.abs(e.x)+Math.abs(e.y)<this.options.clickTolerance||(e.x/=this._parentScale.x,e.y/=this._parentScale.y,Gi(t),this._moved||(this.fire(\"dragstart\"),this._moved=!0,yi(document.body,\"leaflet-dragging\"),this._lastTarget=t.target||t.srcElement,window.SVGElementInstance&&this._lastTarget instanceof window.SVGElementInstance&&(this._lastTarget=this._lastTarget.correspondingUseElement),yi(this._lastTarget,\"leaflet-drag-target\")),this._newPos=this._startPos.add(e),this._moving=!0,this._lastEvent=t,this._updatePosition()))}},_updatePosition:function(){var t={originalEvent:this._lastEvent};this.fire(\"predrag\",t),Mi(this._element,this._newPos),this.fire(\"drag\",t)},_onUp:function(){this._enabled&&this.finishDrag()},finishDrag:function(t){xi(document.body,\"leaflet-dragging\"),this._lastTarget&&(xi(this._lastTarget,\"leaflet-drag-target\"),this._lastTarget=null),Di(document,\"mousemove touchmove\",this._onMove,this),Di(document,\"mouseup touchend touchcancel\",this._onUp,this),ki(),oi(),this._moved&&this._moving&&this.fire(\"dragend\",{noInertia:t,distance:this._newPos.distanceTo(this._startPos)}),this._moving=!1,ve._dragging=!1}});function ye(t,i){if(!i||!t.length)return t.slice();var e=i*i;return t=Pe(t=Le(t,e),e)}function xe(t,i,e){return Math.sqrt(Ze(t,i,e,!0))}function we(t,i,e){return Ze(t,i,e)}function Pe(t,i){var e=t.length,n=new(typeof Uint8Array!=void 0+\"\"?Uint8Array:Array)(e);n[0]=n[e-1]=1,be(t,n,i,0,e-1);var o,s=[];for(o=0;o<e;o++)n[o]&&s.push(t[o]);return s}function be(t,i,e,n,o){var s,r,a,h=0;for(r=n+1;r<=o-1;r++)(a=Ze(t[r],t[n],t[o],!0))>h&&(s=r,h=a);h>e&&(i[s]=1,be(t,i,e,n,s),be(t,i,e,s,o))}function Le(t,i){for(var e=[t[0]],n=1,o=0,s=t.length;n<s;n++)Ce(t[n],t[o])>i&&(e.push(t[n]),o=n);return o<s-1&&e.push(t[s-1]),e}function Te(t,i,e,n,o){var s,r,a,h=n?me:Me(t,e),u=Me(i,e);for(me=u;;){if(!(h|u))return[t,i];if(h&u)return!1;a=Me(r=ze(t,i,s=h||u,e,o),e),s===h?(t=r,h=a):(i=r,u=a)}}function ze(t,i,e,n,o){var s,r,a=i.x-t.x,h=i.y-t.y,u=n.min,l=n.max;return 8&e?(s=t.x+a*(l.y-t.y)/h,r=l.y):4&e?(s=t.x+a*(u.y-t.y)/h,r=u.y):2&e?(s=l.x,r=t.y+h*(l.x-t.x)/a):1&e&&(s=u.x,r=t.y+h*(u.x-t.x)/a),new B(s,r,o)}function Me(t,i){var e=0;return t.x<i.min.x?e|=1:t.x>i.max.x&&(e|=2),t.y<i.min.y?e|=4:t.y>i.max.y&&(e|=8),e}function Ce(t,i){var e=i.x-t.x,n=i.y-t.y;return e*e+n*n}function Ze(t,i,e,n){var o,s=i.x,r=i.y,a=e.x-s,h=e.y-r,u=a*a+h*h;return u>0&&((o=((t.x-s)*a+(t.y-r)*h)/u)>1?(s=e.x,r=e.y):o>0&&(s+=a*o,r+=h*o)),a=t.x-s,h=t.y-r,n?a*a+h*h:new B(s,r)}function Se(t){return!g(t[0])||\"object\"!=typeof t[0][0]&&void 0!==t[0][0]}function ke(t){return console.warn(\"Deprecated use of _flat, please use L.LineUtil.isFlat instead.\"),Se(t)}var Ee={__proto__:null,simplify:ye,pointToSegmentDistance:xe,closestPointOnSegment:we,clipSegment:Te,_getEdgeIntersection:ze,_getBitCode:Me,_sqClosestPointOnSegment:Ze,isFlat:Se,_flat:ke};function Be(t,i,e){var n,o,s,r,a,h,u,l,c,_=[1,4,2,8];for(o=0,u=t.length;o<u;o++)t[o]._code=Me(t[o],i);for(r=0;r<4;r++){for(l=_[r],n=[],o=0,s=(u=t.length)-1;o<u;s=o++)a=t[o],h=t[s],a._code&l?h._code&l||((c=ze(h,a,l,i,e))._code=Me(c,i),n.push(c)):(h._code&l&&((c=ze(h,a,l,i,e))._code=Me(c,i),n.push(c)),n.push(a));t=n}return t}var Ae={__proto__:null,clipPolygon:Be},Ie={project:function(t){return new B(t.lng,t.lat)},unproject:function(t){return new j(t.y,t.x)},bounds:new O([-180,-90],[180,90])},Oe={R:6378137,R_MINOR:6356752.314245179,bounds:new O([-20037508.34279,-15496570.73972],[20037508.34279,18764656.23138]),project:function(t){var i=Math.PI/180,e=this.R,n=t.lat*i,o=this.R_MINOR/e,s=Math.sqrt(1-o*o),r=s*Math.sin(n),a=Math.tan(Math.PI/4-n/2)/Math.pow((1-r)/(1+r),s/2);return n=-e*Math.log(Math.max(a,1e-10)),new B(t.lng*i*e,n)},unproject:function(t){for(var i,e=180/Math.PI,n=this.R,o=this.R_MINOR/n,s=Math.sqrt(1-o*o),r=Math.exp(-t.y/n),a=Math.PI/2-2*Math.atan(r),h=0,u=.1;h<15&&Math.abs(u)>1e-7;h++)i=s*Math.sin(a),i=Math.pow((1-i)/(1+i),s/2),a+=u=Math.PI/2-2*Math.atan(r*i)-a;return new j(a*e,t.x*e/n)}},Re={__proto__:null,LonLat:Ie,Mercator:Oe,SphericalMercator:q},Ne=e({},U,{code:\"EPSG:3395\",projection:Oe,transformation:function(){var t=.5/(Math.PI*Oe.R);return K(t,.5,-t,.5)}()}),De=e({},U,{code:\"EPSG:4326\",projection:Ie,transformation:K(1/180,1,-1/180,.5)}),je=e({},F,{projection:Ie,transformation:K(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,i){var e=i.lng-t.lng,n=i.lat-t.lat;return Math.sqrt(e*e+n*n)},infinite:!0});F.Earth=U,F.EPSG3395=Ne,F.EPSG3857=Y,F.EPSG900913=X,F.EPSG4326=De,F.Simple=je;var He=E.extend({options:{pane:\"overlayPane\",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[r(t)]=this,this},removeInteractiveTarget:function(t){return delete this._map._targets[r(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var i=t.target;if(i.hasLayer(this)){if(this._map=i,this._zoomAnimated=i._zoomAnimated,this.getEvents){var e=this.getEvents();i.on(e,this),this.once(\"remove\",(function(){i.off(e,this)}),this)}this.onAdd(i),this.fire(\"add\"),i.fire(\"layeradd\",{layer:this})}}});ie.include({addLayer:function(t){if(!t._layerAdd)throw new Error(\"The provided object is not a Layer.\");var i=r(t);return this._layers[i]||(this._layers[i]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t)),this},removeLayer:function(t){var i=r(t);return this._layers[i]?(this._loaded&&t.onRemove(this),delete this._layers[i],this._loaded&&(this.fire(\"layerremove\",{layer:t}),t.fire(\"remove\")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return r(t)in this._layers},eachLayer:function(t,i){for(var e in this._layers)t.call(i,this._layers[e]);return this},_addLayers:function(t){for(var i=0,e=(t=t?g(t)?t:[t]:[]).length;i<e;i++)this.addLayer(t[i])},_addZoomLimit:function(t){isNaN(t.options.maxZoom)&&isNaN(t.options.minZoom)||(this._zoomBoundLayers[r(t)]=t,this._updateZoomLevels())},_removeZoomLimit:function(t){var i=r(t);this._zoomBoundLayers[i]&&(delete this._zoomBoundLayers[i],this._updateZoomLevels())},_updateZoomLevels:function(){var t=1/0,i=-1/0,e=this._getZoomSpan();for(var n in this._zoomBoundLayers){var o=this._zoomBoundLayers[n].options;t=void 0===o.minZoom?t:Math.min(t,o.minZoom),i=void 0===o.maxZoom?i:Math.max(i,o.maxZoom)}this._layersMaxZoom=i===-1/0?void 0:i,this._layersMinZoom=t===1/0?void 0:t,e!==this._getZoomSpan()&&this.fire(\"zoomlevelschange\"),void 0===this.options.maxZoom&&this._layersMaxZoom&&this.getZoom()>this._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()<this._layersMinZoom&&this.setZoom(this._layersMinZoom)}});var We=He.extend({initialize:function(t,i){var e,n;if(d(this,i),this._layers={},t)for(e=0,n=t.length;e<n;e++)this.addLayer(t[e])},addLayer:function(t){var i=this.getLayerId(t);return this._layers[i]=t,this._map&&this._map.addLayer(t),this},removeLayer:function(t){var i=t in this._layers?t:this.getLayerId(t);return this._map&&this._layers[i]&&this._map.removeLayer(this._layers[i]),delete this._layers[i],this},hasLayer:function(t){return(\"number\"==typeof t?t:this.getLayerId(t))in this._layers},clearLayers:function(){return this.eachLayer(this.removeLayer,this)},invoke:function(t){var i,e,n=Array.prototype.slice.call(arguments,1);for(i in this._layers)(e=this._layers[i])[t]&&e[t].apply(e,n);return this},onAdd:function(t){this.eachLayer(t.addLayer,t)},onRemove:function(t){this.eachLayer(t.removeLayer,t)},eachLayer:function(t,i){for(var e in this._layers)t.call(i,this._layers[e]);return this},getLayer:function(t){return this._layers[t]},getLayers:function(){var t=[];return this.eachLayer(t.push,t),t},setZIndex:function(t){return this.invoke(\"setZIndex\",t)},getLayerId:function(t){return r(t)}}),Fe=function(t,i){return new We(t,i)},Ue=We.extend({addLayer:function(t){return this.hasLayer(t)?this:(t.addEventParent(this),We.prototype.addLayer.call(this,t),this.fire(\"layeradd\",{layer:t}))},removeLayer:function(t){return this.hasLayer(t)?(t in this._layers&&(t=this._layers[t]),t.removeEventParent(this),We.prototype.removeLayer.call(this,t),this.fire(\"layerremove\",{layer:t})):this},setStyle:function(t){return this.invoke(\"setStyle\",t)},bringToFront:function(){return this.invoke(\"bringToFront\")},bringToBack:function(){return this.invoke(\"bringToBack\")},getBounds:function(){var t=new N;for(var i in this._layers){var e=this._layers[i];t.extend(e.getBounds?e.getBounds():e.getLatLng())}return t}}),Ve=function(t,i){return new Ue(t,i)},qe=Z.extend({options:{popupAnchor:[0,0],tooltipAnchor:[0,0],crossOrigin:!1},initialize:function(t){d(this,t)},createIcon:function(t){return this._createIcon(\"icon\",t)},createShadow:function(t){return this._createIcon(\"shadow\",t)},_createIcon:function(t,i){var e=this._getIconUrl(t);if(!e){if(\"icon\"===t)throw new Error(\"iconUrl not set in Icon options (see the docs).\");return null}var n=this._createImg(e,i&&\"IMG\"===i.tagName?i:null);return this._setIconStyles(n,t),(this.options.crossOrigin||\"\"===this.options.crossOrigin)&&(n.crossOrigin=!0===this.options.crossOrigin?\"\":this.options.crossOrigin),n},_setIconStyles:function(t,i){var e=this.options,n=e[i+\"Size\"];\"number\"==typeof n&&(n=[n,n]);var o=I(n),s=I(\"shadow\"===i&&e.shadowAnchor||e.iconAnchor||o&&o.divideBy(2,!0));t.className=\"leaflet-marker-\"+i+\" \"+(e.className||\"\"),s&&(t.style.marginLeft=-s.x+\"px\",t.style.marginTop=-s.y+\"px\"),o&&(t.style.width=o.x+\"px\",t.style.height=o.y+\"px\")},_createImg:function(t,i){return(i=i||document.createElement(\"img\")).src=t,i},_getIconUrl:function(t){return Ot.retina&&this.options[t+\"RetinaUrl\"]||this.options[t+\"Url\"]}});function Ge(t){return new qe(t)}var Ke=qe.extend({options:{iconUrl:\"marker-icon.png\",iconRetinaUrl:\"marker-icon-2x.png\",shadowUrl:\"marker-shadow.png\",iconSize:[25,41],iconAnchor:[12,41],popupAnchor:[1,-34],tooltipAnchor:[16,-28],shadowSize:[41,41]},_getIconUrl:function(t){return\"string\"!=typeof Ke.imagePath&&(Ke.imagePath=this._detectIconPath()),(this.options.imagePath||Ke.imagePath)+qe.prototype._getIconUrl.call(this,t)},_stripUrl:function(t){var i=function(t,i,e){var n=i.exec(t);return n&&n[e]};return(t=i(t,/^url\\((['\"])?(.+)\\1\\)$/,2))&&i(t,/^(.*)marker-icon\\.png$/,1)},_detectIconPath:function(){var t=di(\"div\",\"leaflet-default-icon-path\",document.body),i=_i(t,\"background-image\")||_i(t,\"backgroundImage\");if(document.body.removeChild(t),i=this._stripUrl(i))return i;var e=document.querySelector('link[href$=\"leaflet.css\"]');return e?e.href.substring(0,e.href.length-\"leaflet.css\".length-1):\"\"}}),Ye=pe.extend({initialize:function(t){this._marker=t},addHooks:function(){var t=this._marker._icon;this._draggable||(this._draggable=new ve(t,t,!0)),this._draggable.on({dragstart:this._onDragStart,predrag:this._onPreDrag,drag:this._onDrag,dragend:this._onDragEnd},this).enable(),yi(t,\"leaflet-marker-draggable\")},removeHooks:function(){this._draggable.off({dragstart:this._onDragStart,predrag:this._onPreDrag,drag:this._onDrag,dragend:this._onDragEnd},this).disable(),this._marker._icon&&xi(this._marker._icon,\"leaflet-marker-draggable\")},moved:function(){return this._draggable&&this._draggable._moved},_adjustPan:function(t){var i=this._marker,e=i._map,n=this._marker.options.autoPanSpeed,o=this._marker.options.autoPanPadding,s=Ci(i._icon),r=e.getPixelBounds(),a=e.getPixelOrigin(),h=R(r.min._subtract(a).add(o),r.max._subtract(a).subtract(o));if(!h.contains(s)){var u=I((Math.max(h.max.x,s.x)-h.max.x)/(r.max.x-h.max.x)-(Math.min(h.min.x,s.x)-h.min.x)/(r.min.x-h.min.x),(Math.max(h.max.y,s.y)-h.max.y)/(r.max.y-h.max.y)-(Math.min(h.min.y,s.y)-h.min.y)/(r.min.y-h.min.y)).multiplyBy(n);e.panBy(u,{animate:!1}),this._draggable._newPos._add(u),this._draggable._startPos._add(u),Mi(i._icon,this._draggable._newPos),this._onDrag(t),this._panRequest=z(this._adjustPan.bind(this,t))}},_onDragStart:function(){this._oldLatLng=this._marker.getLatLng(),this._marker.closePopup&&this._marker.closePopup(),this._marker.fire(\"movestart\").fire(\"dragstart\")},_onPreDrag:function(t){this._marker.options.autoPan&&(M(this._panRequest),this._panRequest=z(this._adjustPan.bind(this,t)))},_onDrag:function(t){var i=this._marker,e=i._shadow,n=Ci(i._icon),o=i._map.layerPointToLatLng(n);e&&Mi(e,n),i._latlng=o,t.latlng=o,t.oldLatLng=this._oldLatLng,i.fire(\"move\",t).fire(\"drag\",t)},_onDragEnd:function(t){M(this._panRequest),delete this._oldLatLng,this._marker.fire(\"moveend\").fire(\"dragend\",t)}}),Xe=He.extend({options:{icon:new Ke,interactive:!0,keyboard:!0,title:\"\",alt:\"Marker\",zIndexOffset:0,opacity:1,riseOnHover:!1,riseOffset:250,pane:\"markerPane\",shadowPane:\"shadowPane\",bubblingMouseEvents:!1,autoPanOnFocus:!0,draggable:!1,autoPan:!1,autoPanPadding:[50,50],autoPanSpeed:10},initialize:function(t,i){d(this,i),this._latlng=H(t)},onAdd:function(t){this._zoomAnimated=this._zoomAnimated&&t.options.markerZoomAnimation,this._zoomAnimated&&t.on(\"zoomanim\",this._animateZoom,this),this._initIcon(),this.update()},onRemove:function(t){this.dragging&&this.dragging.enabled()&&(this.options.draggable=!0,this.dragging.removeHooks()),delete this.dragging,this._zoomAnimated&&t.off(\"zoomanim\",this._animateZoom,this),this._removeIcon(),this._removeShadow()},getEvents:function(){return{zoom:this.update,viewreset:this.update}},getLatLng:function(){return this._latlng},setLatLng:function(t){var i=this._latlng;return this._latlng=H(t),this.update(),this.fire(\"move\",{oldLatLng:i,latlng:this._latlng})},setZIndexOffset:function(t){return this.options.zIndexOffset=t,this.update()},getIcon:function(){return this.options.icon},setIcon:function(t){return this.options.icon=t,this._map&&(this._initIcon(),this.update()),this._popup&&this.bindPopup(this._popup,this._popup.options),this},getElement:function(){return this._icon},update:function(){if(this._icon&&this._map){var t=this._map.latLngToLayerPoint(this._latlng).round();this._setPos(t)}return this},_initIcon:function(){var t=this.options,i=\"leaflet-zoom-\"+(this._zoomAnimated?\"animated\":\"hide\"),e=t.icon.createIcon(this._icon),n=!1;e!==this._icon&&(this._icon&&this._removeIcon(),n=!0,t.title&&(e.title=t.title),\"IMG\"===e.tagName&&(e.alt=t.alt||\"\")),yi(e,i),t.keyboard&&(e.tabIndex=\"0\",e.setAttribute(\"role\",\"button\")),this._icon=e,t.riseOnHover&&this.on({mouseover:this._bringToFront,mouseout:this._resetZIndex}),this.options.autoPanOnFocus&&Ri(e,\"focus\",this._panOnFocus,this);var o=t.icon.createShadow(this._shadow),s=!1;o!==this._shadow&&(this._removeShadow(),s=!0),o&&(yi(o,i),o.alt=\"\"),this._shadow=o,t.opacity<1&&this._updateOpacity(),n&&this.getPane().appendChild(this._icon),this._initInteraction(),o&&s&&this.getPane(t.shadowPane).appendChild(this._shadow)},_removeIcon:function(){this.options.riseOnHover&&this.off({mouseover:this._bringToFront,mouseout:this._resetZIndex}),this.options.autoPanOnFocus&&Di(this._icon,\"focus\",this._panOnFocus,this),pi(this._icon),this.removeInteractiveTarget(this._icon),this._icon=null},_removeShadow:function(){this._shadow&&pi(this._shadow),this._shadow=null},_setPos:function(t){this._icon&&Mi(this._icon,t),this._shadow&&Mi(this._shadow,t),this._zIndex=t.y+this.options.zIndexOffset,this._resetZIndex()},_updateZIndex:function(t){this._icon&&(this._icon.style.zIndex=this._zIndex+t)},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center).round();this._setPos(i)},_initInteraction:function(){if(this.options.interactive&&(yi(this._icon,\"leaflet-interactive\"),this.addInteractiveTarget(this._icon),Ye)){var t=this.options.draggable;this.dragging&&(t=this.dragging.enabled(),this.dragging.disable()),this.dragging=new Ye(this),t&&this.dragging.enable()}},setOpacity:function(t){return this.options.opacity=t,this._map&&this._updateOpacity(),this},_updateOpacity:function(){var t=this.options.opacity;this._icon&&bi(this._icon,t),this._shadow&&bi(this._shadow,t)},_bringToFront:function(){this._updateZIndex(this.options.riseOffset)},_resetZIndex:function(){this._updateZIndex(0)},_panOnFocus:function(){var t=this._map;if(t){var i=this.options.icon.options,e=i.iconSize?I(i.iconSize):I(0,0),n=i.iconAnchor?I(i.iconAnchor):I(0,0);t.panInside(this._latlng,{paddingTopLeft:n,paddingBottomRight:e.subtract(n)})}},_getPopupAnchor:function(){return this.options.icon.options.popupAnchor},_getTooltipAnchor:function(){return this.options.icon.options.tooltipAnchor}});function Je(t,i){return new Xe(t,i)}var $e=He.extend({options:{stroke:!0,color:\"#3388ff\",weight:3,opacity:1,lineCap:\"round\",lineJoin:\"round\",dashArray:null,dashOffset:null,fill:!1,fillColor:null,fillOpacity:.2,fillRule:\"evenodd\",interactive:!0,bubblingMouseEvents:!0},beforeAdd:function(t){this._renderer=t.getRenderer(this)},onAdd:function(){this._renderer._initPath(this),this._reset(),this._renderer._addPath(this)},onRemove:function(){this._renderer._removePath(this)},redraw:function(){return this._map&&this._renderer._updatePath(this),this},setStyle:function(t){return d(this,t),this._renderer&&(this._renderer._updateStyle(this),this.options.stroke&&t&&Object.prototype.hasOwnProperty.call(t,\"weight\")&&this._updateBounds()),this},bringToFront:function(){return this._renderer&&this._renderer._bringToFront(this),this},bringToBack:function(){return this._renderer&&this._renderer._bringToBack(this),this},getElement:function(){return this._path},_reset:function(){this._project(),this._update()},_clickTolerance:function(){return(this.options.stroke?this.options.weight/2:0)+(this._renderer.options.tolerance||0)}}),Qe=$e.extend({options:{fill:!0,radius:10},initialize:function(t,i){d(this,i),this._latlng=H(t),this._radius=this.options.radius},setLatLng:function(t){var i=this._latlng;return this._latlng=H(t),this.redraw(),this.fire(\"move\",{oldLatLng:i,latlng:this._latlng})},getLatLng:function(){return this._latlng},setRadius:function(t){return this.options.radius=this._radius=t,this.redraw()},getRadius:function(){return this._radius},setStyle:function(t){var i=t&&t.radius||this._radius;return $e.prototype.setStyle.call(this,t),this.setRadius(i),this},_project:function(){this._point=this._map.latLngToLayerPoint(this._latlng),this._updateBounds()},_updateBounds:function(){var t=this._radius,i=this._radiusY||t,e=this._clickTolerance(),n=[t+e,i+e];this._pxBounds=new O(this._point.subtract(n),this._point.add(n))},_update:function(){this._map&&this._updatePath()},_updatePath:function(){this._renderer._updateCircle(this)},_empty:function(){return this._radius&&!this._renderer._bounds.intersects(this._pxBounds)},_containsPoint:function(t){return t.distanceTo(this._point)<=this._radius+this._clickTolerance()}});function tn(t,i){return new Qe(t,i)}var en=Qe.extend({initialize:function(t,i,n){if(\"number\"==typeof i&&(i=e({},n,{radius:i})),d(this,i),this._latlng=H(t),isNaN(this.options.radius))throw new Error(\"Circle radius cannot be NaN\");this._mRadius=this.options.radius},setRadius:function(t){return this._mRadius=t,this.redraw()},getRadius:function(){return this._mRadius},getBounds:function(){var t=[this._radius,this._radiusY||this._radius];return new N(this._map.layerPointToLatLng(this._point.subtract(t)),this._map.layerPointToLatLng(this._point.add(t)))},setStyle:$e.prototype.setStyle,_project:function(){var t=this._latlng.lng,i=this._latlng.lat,e=this._map,n=e.options.crs;if(n.distance===U.distance){var o=Math.PI/180,s=this._mRadius/U.R/o,r=e.project([i+s,t]),a=e.project([i-s,t]),h=r.add(a).divideBy(2),u=e.unproject(h).lat,l=Math.acos((Math.cos(s*o)-Math.sin(i*o)*Math.sin(u*o))/(Math.cos(i*o)*Math.cos(u*o)))/o;(isNaN(l)||0===l)&&(l=s/Math.cos(Math.PI/180*i)),this._point=h.subtract(e.getPixelOrigin()),this._radius=isNaN(l)?0:h.x-e.project([u,t-l]).x,this._radiusY=h.y-r.y}else{var c=n.unproject(n.project(this._latlng).subtract([this._mRadius,0]));this._point=e.latLngToLayerPoint(this._latlng),this._radius=this._point.x-e.latLngToLayerPoint(c).x}this._updateBounds()}});function nn(t,i,e){return new en(t,i,e)}var on=$e.extend({options:{smoothFactor:1,noClip:!1},initialize:function(t,i){d(this,i),this._setLatLngs(t)},getLatLngs:function(){return this._latlngs},setLatLngs:function(t){return this._setLatLngs(t),this.redraw()},isEmpty:function(){return!this._latlngs.length},closestLayerPoint:function(t){for(var i,e,n=1/0,o=null,s=Ze,r=0,a=this._parts.length;r<a;r++)for(var h=this._parts[r],u=1,l=h.length;u<l;u++){var c=s(t,i=h[u-1],e=h[u],!0);c<n&&(n=c,o=s(t,i,e))}return o&&(o.distance=Math.sqrt(n)),o},getCenter:function(){if(!this._map)throw new Error(\"Must add layer to map before using getCenter()\");var t,i,e,n,o,s,r,a=this._rings[0],h=a.length;if(!h)return null;for(t=0,i=0;t<h-1;t++)i+=a[t].distanceTo(a[t+1])/2;if(0===i)return this._map.layerPointToLatLng(a[0]);for(t=0,n=0;t<h-1;t++)if(o=a[t],s=a[t+1],(n+=e=o.distanceTo(s))>i)return r=(n-i)/e,this._map.layerPointToLatLng([s.x-r*(s.x-o.x),s.y-r*(s.y-o.y)])},getBounds:function(){return this._bounds},addLatLng:function(t,i){return i=i||this._defaultShape(),t=H(t),i.push(t),this._bounds.extend(t),this.redraw()},_setLatLngs:function(t){this._bounds=new N,this._latlngs=this._convertLatLngs(t)},_defaultShape:function(){return Se(this._latlngs)?this._latlngs:this._latlngs[0]},_convertLatLngs:function(t){for(var i=[],e=Se(t),n=0,o=t.length;n<o;n++)e?(i[n]=H(t[n]),this._bounds.extend(i[n])):i[n]=this._convertLatLngs(t[n]);return i},_project:function(){var t=new O;this._rings=[],this._projectLatlngs(this._latlngs,this._rings,t),this._bounds.isValid()&&t.isValid()&&(this._rawPxBounds=t,this._updateBounds())},_updateBounds:function(){var t=this._clickTolerance(),i=new B(t,t);this._rawPxBounds&&(this._pxBounds=new O([this._rawPxBounds.min.subtract(i),this._rawPxBounds.max.add(i)]))},_projectLatlngs:function(t,i,e){var n,o,s=t[0]instanceof j,r=t.length;if(s){for(o=[],n=0;n<r;n++)o[n]=this._map.latLngToLayerPoint(t[n]),e.extend(o[n]);i.push(o)}else for(n=0;n<r;n++)this._projectLatlngs(t[n],i,e)},_clipPoints:function(){var t=this._renderer._bounds;if(this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else{var i,e,n,o,s,r,a,h=this._parts;for(i=0,n=0,o=this._rings.length;i<o;i++)for(e=0,s=(a=this._rings[i]).length;e<s-1;e++)(r=Te(a[e],a[e+1],t,e,!0))&&(h[n]=h[n]||[],h[n].push(r[0]),r[1]===a[e+1]&&e!==s-2||(h[n].push(r[1]),n++))}},_simplifyPoints:function(){for(var t=this._parts,i=this.options.smoothFactor,e=0,n=t.length;e<n;e++)t[e]=ye(t[e],i)},_update:function(){this._map&&(this._clipPoints(),this._simplifyPoints(),this._updatePath())},_updatePath:function(){this._renderer._updatePoly(this)},_containsPoint:function(t,i){var e,n,o,s,r,a,h=this._clickTolerance();if(!this._pxBounds||!this._pxBounds.contains(t))return!1;for(e=0,s=this._parts.length;e<s;e++)for(n=0,o=(r=(a=this._parts[e]).length)-1;n<r;o=n++)if((i||0!==n)&&xe(t,a[o],a[n])<=h)return!0;return!1}});function sn(t,i){return new on(t,i)}on._flat=ke;var rn=on.extend({options:{fill:!0},isEmpty:function(){return!this._latlngs.length||!this._latlngs[0].length},getCenter:function(){if(!this._map)throw new Error(\"Must add layer to map before using getCenter()\");var t,i,e,n,o,s,r,a,h,u=this._rings[0],l=u.length;if(!l)return null;for(s=r=a=0,t=0,i=l-1;t<l;i=t++)e=u[t],n=u[i],o=e.y*n.x-n.y*e.x,r+=(e.x+n.x)*o,a+=(e.y+n.y)*o,s+=3*o;return h=0===s?u[0]:[r/s,a/s],this._map.layerPointToLatLng(h)},_convertLatLngs:function(t){var i=on.prototype._convertLatLngs.call(this,t),e=i.length;return e>=2&&i[0]instanceof j&&i[0].equals(i[e-1])&&i.pop(),i},_setLatLngs:function(t){on.prototype._setLatLngs.call(this,t),Se(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return Se(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,i=this.options.weight,e=new B(i,i);if(t=new O(t.min.subtract(e),t.max.add(e)),this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else for(var n,o=0,s=this._rings.length;o<s;o++)(n=Be(this._rings[o],t,!0)).length&&this._parts.push(n)},_updatePath:function(){this._renderer._updatePoly(this,!0)},_containsPoint:function(t){var i,e,n,o,s,r,a,h,u=!1;if(!this._pxBounds||!this._pxBounds.contains(t))return!1;for(o=0,a=this._parts.length;o<a;o++)for(s=0,r=(h=(i=this._parts[o]).length)-1;s<h;r=s++)e=i[s],n=i[r],e.y>t.y!=n.y>t.y&&t.x<(n.x-e.x)*(t.y-e.y)/(n.y-e.y)+e.x&&(u=!u);return u||on.prototype._containsPoint.call(this,t,!0)}});function an(t,i){return new rn(t,i)}var hn=Ue.extend({initialize:function(t,i){d(this,i),this._layers={},t&&this.addData(t)},addData:function(t){var i,e,n,o=g(t)?t:t.features;if(o){for(i=0,e=o.length;i<e;i++)((n=o[i]).geometries||n.geometry||n.features||n.coordinates)&&this.addData(n);return this}var s=this.options;if(s.filter&&!s.filter(t))return this;var r=un(t,s);return r?(r.feature=fn(t),r.defaultOptions=r.options,this.resetStyle(r),s.onEachFeature&&s.onEachFeature(t,r),this.addLayer(r)):this},resetStyle:function(t){return void 0===t?this.eachLayer(this.resetStyle,this):(t.options=e({},t.defaultOptions),this._setLayerStyle(t,this.options.style),this)},setStyle:function(t){return this.eachLayer((function(i){this._setLayerStyle(i,t)}),this)},_setLayerStyle:function(t,i){t.setStyle&&(\"function\"==typeof i&&(i=i(t.feature)),t.setStyle(i))}});function un(t,i){var e,n,o,s,r=\"Feature\"===t.type?t.geometry:t,a=r?r.coordinates:null,h=[],u=i&&i.pointToLayer,l=i&&i.coordsToLatLng||cn;if(!a&&!r)return null;switch(r.type){case\"Point\":return ln(u,t,e=l(a),i);case\"MultiPoint\":for(o=0,s=a.length;o<s;o++)e=l(a[o]),h.push(ln(u,t,e,i));return new Ue(h);case\"LineString\":case\"MultiLineString\":return n=_n(a,\"LineString\"===r.type?0:1,l),new on(n,i);case\"Polygon\":case\"MultiPolygon\":return n=_n(a,\"Polygon\"===r.type?1:2,l),new rn(n,i);case\"GeometryCollection\":for(o=0,s=r.geometries.length;o<s;o++){var c=un({geometry:r.geometries[o],type:\"Feature\",properties:t.properties},i);c&&h.push(c)}return new Ue(h);default:throw new Error(\"Invalid GeoJSON object.\")}}function ln(t,i,e,n){return t?t(i,e):new Xe(e,n&&n.markersInheritOptions&&n)}function cn(t){return new j(t[1],t[0],t[2])}function _n(t,i,e){for(var n,o=[],s=0,r=t.length;s<r;s++)n=i?_n(t[s],i-1,e):(e||cn)(t[s]),o.push(n);return o}function dn(t,i){return void 0!==(t=H(t)).alt?[l(t.lng,i),l(t.lat,i),l(t.alt,i)]:[l(t.lng,i),l(t.lat,i)]}function pn(t,i,e,n){for(var o=[],s=0,r=t.length;s<r;s++)o.push(i?pn(t[s],i-1,e,n):dn(t[s],n));return!i&&e&&o.push(o[0]),o}function mn(t,i){return t.feature?e({},t.feature,{geometry:i}):fn(i)}function fn(t){return\"Feature\"===t.type||\"FeatureCollection\"===t.type?t:{type:\"Feature\",properties:{},geometry:t}}var gn={toGeoJSON:function(t){return mn(this,{type:\"Point\",coordinates:dn(this.getLatLng(),t)})}};function vn(t,i){return new hn(t,i)}Xe.include(gn),en.include(gn),Qe.include(gn),on.include({toGeoJSON:function(t){var i=!Se(this._latlngs);return mn(this,{type:(i?\"Multi\":\"\")+\"LineString\",coordinates:pn(this._latlngs,i?1:0,!1,t)})}}),rn.include({toGeoJSON:function(t){var i=!Se(this._latlngs),e=i&&!Se(this._latlngs[0]),n=pn(this._latlngs,e?2:i?1:0,!0,t);return i||(n=[n]),mn(this,{type:(e?\"Multi\":\"\")+\"Polygon\",coordinates:n})}}),We.include({toMultiPoint:function(t){var i=[];return this.eachLayer((function(e){i.push(e.toGeoJSON(t).geometry.coordinates)})),mn(this,{type:\"MultiPoint\",coordinates:i})},toGeoJSON:function(t){var i=this.feature&&this.feature.geometry&&this.feature.geometry.type;if(\"MultiPoint\"===i)return this.toMultiPoint(t);var e=\"GeometryCollection\"===i,n=[];return this.eachLayer((function(i){if(i.toGeoJSON){var o=i.toGeoJSON(t);if(e)n.push(o.geometry);else{var s=fn(o);\"FeatureCollection\"===s.type?n.push.apply(n,s.features):n.push(s)}}})),e?mn(this,{geometries:n,type:\"GeometryCollection\"}):{type:\"FeatureCollection\",features:n}}});var yn=vn,xn=He.extend({options:{opacity:1,alt:\"\",interactive:!1,crossOrigin:!1,errorOverlayUrl:\"\",zIndex:1,className:\"\"},initialize:function(t,i,e){this._url=t,this._bounds=D(i),d(this,e)},onAdd:function(){this._image||(this._initImage(),this.options.opacity<1&&this._updateOpacity()),this.options.interactive&&(yi(this._image,\"leaflet-interactive\"),this.addInteractiveTarget(this._image)),this.getPane().appendChild(this._image),this._reset()},onRemove:function(){pi(this._image),this.options.interactive&&this.removeInteractiveTarget(this._image)},setOpacity:function(t){return this.options.opacity=t,this._image&&this._updateOpacity(),this},setStyle:function(t){return t.opacity&&this.setOpacity(t.opacity),this},bringToFront:function(){return this._map&&fi(this._image),this},bringToBack:function(){return this._map&&gi(this._image),this},setUrl:function(t){return this._url=t,this._image&&(this._image.src=t),this},setBounds:function(t){return this._bounds=D(t),this._map&&this._reset(),this},getEvents:function(){var t={zoom:this._reset,viewreset:this._reset};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},getBounds:function(){return this._bounds},getElement:function(){return this._image},_initImage:function(){var t=\"IMG\"===this._url.tagName,i=this._image=t?this._url:di(\"img\");yi(i,\"leaflet-image-layer\"),this._zoomAnimated&&yi(i,\"leaflet-zoom-animated\"),this.options.className&&yi(i,this.options.className),i.onselectstart=u,i.onmousemove=u,i.onload=o(this.fire,this,\"load\"),i.onerror=o(this._overlayOnError,this,\"error\"),(this.options.crossOrigin||\"\"===this.options.crossOrigin)&&(i.crossOrigin=!0===this.options.crossOrigin?\"\":this.options.crossOrigin),this.options.zIndex&&this._updateZIndex(),t?this._url=i.src:(i.src=this._url,i.alt=this.options.alt)},_animateZoom:function(t){var i=this._map.getZoomScale(t.zoom),e=this._map._latLngBoundsToNewLayerBounds(this._bounds,t.zoom,t.center).min;zi(this._image,e,i)},_reset:function(){var t=this._image,i=new O(this._map.latLngToLayerPoint(this._bounds.getNorthWest()),this._map.latLngToLayerPoint(this._bounds.getSouthEast())),e=i.getSize();Mi(t,i.min),t.style.width=e.x+\"px\",t.style.height=e.y+\"px\"},_updateOpacity:function(){bi(this._image,this.options.opacity)},_updateZIndex:function(){this._image&&void 0!==this.options.zIndex&&null!==this.options.zIndex&&(this._image.style.zIndex=this.options.zIndex)},_overlayOnError:function(){this.fire(\"error\");var t=this.options.errorOverlayUrl;t&&this._url!==t&&(this._url=t,this._image.src=t)},getCenter:function(){return this._bounds.getCenter()}}),wn=function(t,i,e){return new xn(t,i,e)},Pn=xn.extend({options:{autoplay:!0,loop:!0,keepAspectRatio:!0,muted:!1,playsInline:!0},_initImage:function(){var t=\"VIDEO\"===this._url.tagName,i=this._image=t?this._url:di(\"video\");if(yi(i,\"leaflet-image-layer\"),this._zoomAnimated&&yi(i,\"leaflet-zoom-animated\"),this.options.className&&yi(i,this.options.className),i.onselectstart=u,i.onmousemove=u,i.onloadeddata=o(this.fire,this,\"load\"),t){for(var e=i.getElementsByTagName(\"source\"),n=[],s=0;s<e.length;s++)n.push(e[s].src);this._url=e.length>0?n:[i.src]}else{g(this._url)||(this._url=[this._url]),!this.options.keepAspectRatio&&Object.prototype.hasOwnProperty.call(i.style,\"objectFit\")&&(i.style.objectFit=\"fill\"),i.autoplay=!!this.options.autoplay,i.loop=!!this.options.loop,i.muted=!!this.options.muted,i.playsInline=!!this.options.playsInline;for(var r=0;r<this._url.length;r++){var a=di(\"source\");a.src=this._url[r],i.appendChild(a)}}}});function bn(t,i,e){return new Pn(t,i,e)}var Ln=xn.extend({_initImage:function(){var t=this._image=this._url;yi(t,\"leaflet-image-layer\"),this._zoomAnimated&&yi(t,\"leaflet-zoom-animated\"),this.options.className&&yi(t,this.options.className),t.onselectstart=u,t.onmousemove=u}});function Tn(t,i,e){return new Ln(t,i,e)}var zn=He.extend({options:{interactive:!1,offset:[0,0],className:\"\",pane:void 0},initialize:function(t,i){d(this,t),this._source=i},openOn:function(t){return(t=arguments.length?t:this._source._map).hasLayer(this)||t.addLayer(this),this},close:function(){return this._map&&this._map.removeLayer(this),this},toggle:function(t){return this._map?this.close():(arguments.length?this._source=t:t=this._source,this._prepareOpen(),this.openOn(t._map)),this},onAdd:function(t){this._zoomAnimated=t._zoomAnimated,this._container||this._initLayout(),t._fadeAnimated&&bi(this._container,0),clearTimeout(this._removeTimeout),this.getPane().appendChild(this._container),this.update(),t._fadeAnimated&&bi(this._container,1),this.bringToFront(),this.options.interactive&&(yi(this._container,\"leaflet-interactive\"),this.addInteractiveTarget(this._container))},onRemove:function(t){t._fadeAnimated?(bi(this._container,0),this._removeTimeout=setTimeout(o(pi,void 0,this._container),200)):pi(this._container),this.options.interactive&&(xi(this._container,\"leaflet-interactive\"),this.removeInteractiveTarget(this._container))},getLatLng:function(){return this._latlng},setLatLng:function(t){return this._latlng=H(t),this._map&&(this._updatePosition(),this._adjustPan()),this},getContent:function(){return this._content},setContent:function(t){return this._content=t,this.update(),this},getElement:function(){return this._container},update:function(){this._map&&(this._container.style.visibility=\"hidden\",this._updateContent(),this._updateLayout(),this._updatePosition(),this._container.style.visibility=\"\",this._adjustPan())},getEvents:function(){var t={zoom:this._updatePosition,viewreset:this._updatePosition};return this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},isOpen:function(){return!!this._map&&this._map.hasLayer(this)},bringToFront:function(){return this._map&&fi(this._container),this},bringToBack:function(){return this._map&&gi(this._container),this},_prepareOpen:function(t){var i=this._source;if(!i._map)return!1;if(i instanceof Ue){i=null;var e=this._source._layers;for(var n in e)if(e[n]._map){i=e[n];break}if(!i)return!1;this._source=i}if(!t)if(i.getCenter)t=i.getCenter();else if(i.getLatLng)t=i.getLatLng();else{if(!i.getBounds)throw new Error(\"Unable to get source layer LatLng.\");t=i.getBounds().getCenter()}return this.setLatLng(t),this._map&&this.update(),!0},_updateContent:function(){if(this._content){var t=this._contentNode,i=\"function\"==typeof this._content?this._content(this._source||this):this._content;if(\"string\"==typeof i)t.innerHTML=i;else{for(;t.hasChildNodes();)t.removeChild(t.firstChild);t.appendChild(i)}this.fire(\"contentupdate\")}},_updatePosition:function(){if(this._map){var t=this._map.latLngToLayerPoint(this._latlng),i=I(this.options.offset),e=this._getAnchor();this._zoomAnimated?Mi(this._container,t.add(e)):i=i.add(t).add(e);var n=this._containerBottom=-i.y,o=this._containerLeft=-Math.round(this._containerWidth/2)+i.x;this._container.style.bottom=n+\"px\",this._container.style.left=o+\"px\"}},_getAnchor:function(){return[0,0]}});ie.include({_initOverlay:function(t,i,e,n){var o=i;return o instanceof t||(o=new t(n).setContent(i)),e&&o.setLatLng(e),o}}),He.include({_initOverlay:function(t,i,e,n){var o=e;return o instanceof t?(d(o,n),o._source=this):(o=i&&!n?i:new t(n,this)).setContent(e),o}});var Mn=zn.extend({options:{pane:\"popupPane\",offset:[0,7],maxWidth:300,minWidth:50,maxHeight:null,autoPan:!0,autoPanPaddingTopLeft:null,autoPanPaddingBottomRight:null,autoPanPadding:[5,5],keepInView:!1,closeButton:!0,autoClose:!0,closeOnEscapeKey:!0,className:\"\"},openOn:function(t){return!(t=arguments.length?t:this._source._map).hasLayer(this)&&t._popup&&t._popup.options.autoClose&&t.removeLayer(t._popup),t._popup=this,zn.prototype.openOn.call(this,t)},onAdd:function(t){zn.prototype.onAdd.call(this,t),t.fire(\"popupopen\",{popup:this}),this._source&&(this._source.fire(\"popupopen\",{popup:this},!0),this._source instanceof $e||this._source.on(\"preclick\",Ui))},onRemove:function(t){zn.prototype.onRemove.call(this,t),t.fire(\"popupclose\",{popup:this}),this._source&&(this._source.fire(\"popupclose\",{popup:this},!0),this._source instanceof $e||this._source.off(\"preclick\",Ui))},getEvents:function(){var t=zn.prototype.getEvents.call(this);return(void 0!==this.options.closeOnClick?this.options.closeOnClick:this._map.options.closePopupOnClick)&&(t.preclick=this.close),this.options.keepInView&&(t.moveend=this._adjustPan),t},_initLayout:function(){var t=\"leaflet-popup\",i=this._container=di(\"div\",t+\" \"+(this.options.className||\"\")+\" leaflet-zoom-animated\"),e=this._wrapper=di(\"div\",t+\"-content-wrapper\",i);if(this._contentNode=di(\"div\",t+\"-content\",e),qi(i),Vi(this._contentNode),Ri(i,\"contextmenu\",Ui),this._tipContainer=di(\"div\",t+\"-tip-container\",i),this._tip=di(\"div\",t+\"-tip\",this._tipContainer),this.options.closeButton){var n=this._closeButton=di(\"a\",t+\"-close-button\",i);n.setAttribute(\"role\",\"button\"),n.setAttribute(\"aria-label\",\"Close popup\"),n.href=\"#close\",n.innerHTML='<span aria-hidden=\"true\">&#215;</span>',Ri(n,\"click\",this.close,this)}},_updateLayout:function(){var t=this._contentNode,i=t.style;i.width=\"\",i.whiteSpace=\"nowrap\";var e=t.offsetWidth;e=Math.min(e,this.options.maxWidth),e=Math.max(e,this.options.minWidth),i.width=e+1+\"px\",i.whiteSpace=\"\",i.height=\"\";var n=t.offsetHeight,o=this.options.maxHeight,s=\"leaflet-popup-scrolled\";o&&n>o?(i.height=o+\"px\",yi(t,s)):xi(t,s),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),e=this._getAnchor();Mi(this._container,i.add(e))},_adjustPan:function(t){if(this.options.autoPan){this._map._panAnim&&this._map._panAnim.stop();var i=this._map,e=parseInt(_i(this._container,\"marginBottom\"),10)||0,n=this._container.offsetHeight+e,o=this._containerWidth,s=new B(this._containerLeft,-n-this._containerBottom);s._add(Ci(this._container));var r=i.layerPointToContainerPoint(s),a=I(this.options.autoPanPadding),h=I(this.options.autoPanPaddingTopLeft||a),u=I(this.options.autoPanPaddingBottomRight||a),l=i.getSize(),c=0,_=0;r.x+o+u.x>l.x&&(c=r.x+o-l.x+u.x),r.x-c-h.x<0&&(c=r.x-h.x),r.y+n+u.y>l.y&&(_=r.y+n-l.y+u.y),r.y-_-h.y<0&&(_=r.y-h.y),(c||_)&&i.fire(\"autopanstart\").panBy([c,_],{animate:t&&\"moveend\"===t.type})}},_getAnchor:function(){return I(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}}),Cn=function(t,i){return new Mn(t,i)};ie.mergeOptions({closePopupOnClick:!0}),ie.include({openPopup:function(t,i,e){return this._initOverlay(Mn,t,i,e).openOn(this),this},closePopup:function(t){return(t=arguments.length?t:this._popup)&&t.close(),this}}),He.include({bindPopup:function(t,i){return this._popup=this._initOverlay(Mn,this._popup,t,i),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t){return this._popup&&this._popup._prepareOpen(t)&&this._popup.openOn(this._map),this},closePopup:function(){return this._popup&&this._popup.close(),this},togglePopup:function(){return this._popup&&this._popup.toggle(this),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){if(this._popup&&this._map){Ki(t);var i=t.layer||t.target;this._popup._source!==i||i instanceof $e?(this._popup._source=i,this.openPopup(t.latlng)):this._map.hasLayer(this._popup)?this.closePopup():this.openPopup(t.latlng)}},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}});var Zn=zn.extend({options:{pane:\"tooltipPane\",offset:[0,0],direction:\"auto\",permanent:!1,sticky:!1,opacity:.9},onAdd:function(t){zn.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire(\"tooltipopen\",{tooltip:this}),this._source&&(this.addEventParent(this._source),this._source.fire(\"tooltipopen\",{tooltip:this},!0))},onRemove:function(t){zn.prototype.onRemove.call(this,t),t.fire(\"tooltipclose\",{tooltip:this}),this._source&&(this.removeEventParent(this._source),this._source.fire(\"tooltipclose\",{tooltip:this},!0))},getEvents:function(){var t=zn.prototype.getEvents.call(this);return this.options.permanent||(t.preclick=this.close),t},_initLayout:function(){var t=\"leaflet-tooltip \"+(this.options.className||\"\")+\" leaflet-zoom-\"+(this._zoomAnimated?\"animated\":\"hide\");this._contentNode=this._container=di(\"div\",t)},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var i,e,n=this._map,o=this._container,s=n.latLngToContainerPoint(n.getCenter()),r=n.layerPointToContainerPoint(t),a=this.options.direction,h=o.offsetWidth,u=o.offsetHeight,l=I(this.options.offset),c=this._getAnchor();\"top\"===a?(i=h/2,e=u):\"bottom\"===a?(i=h/2,e=0):\"center\"===a?(i=h/2,e=u/2):\"right\"===a?(i=0,e=u/2):\"left\"===a?(i=h,e=u/2):r.x<s.x?(a=\"right\",i=0,e=u/2):(a=\"left\",i=h+2*(l.x+c.x),e=u/2),t=t.subtract(I(i,e,!0)).add(l).add(c),xi(o,\"leaflet-tooltip-right\"),xi(o,\"leaflet-tooltip-left\"),xi(o,\"leaflet-tooltip-top\"),xi(o,\"leaflet-tooltip-bottom\"),yi(o,\"leaflet-tooltip-\"+a),Mi(o,t)},_updatePosition:function(){var t=this._map.latLngToLayerPoint(this._latlng);this._setPosition(t)},setOpacity:function(t){this.options.opacity=t,this._container&&bi(this._container,t)},_animateZoom:function(t){var i=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center);this._setPosition(i)},_getAnchor:function(){return I(this._source&&this._source._getTooltipAnchor&&!this.options.sticky?this._source._getTooltipAnchor():[0,0])}}),Sn=function(t,i){return new Zn(t,i)};ie.include({openTooltip:function(t,i,e){return this._initOverlay(Zn,t,i,e).openOn(this),this},closeTooltip:function(t){return t.close(),this}}),He.include({bindTooltip:function(t,i){return this._tooltip&&this.isTooltipOpen()&&this.unbindTooltip(),this._tooltip=this._initOverlay(Zn,this._tooltip,t,i),this._initTooltipInteractions(),this._tooltip.options.permanent&&this._map&&this._map.hasLayer(this)&&this.openTooltip(),this},unbindTooltip:function(){return this._tooltip&&(this._initTooltipInteractions(!0),this.closeTooltip(),this._tooltip=null),this},_initTooltipInteractions:function(t){if(t||!this._tooltipHandlersAdded){var i=t?\"off\":\"on\",e={remove:this.closeTooltip,move:this._moveTooltip};this._tooltip.options.permanent?e.add=this._openTooltip:(e.mouseover=this._openTooltip,e.mouseout=this.closeTooltip,e.click=this._openTooltip),this._tooltip.options.sticky&&(e.mousemove=this._moveTooltip),this[i](e),this._tooltipHandlersAdded=!t}},openTooltip:function(t){return this._tooltip&&this._tooltip._prepareOpen(t)&&this._tooltip.openOn(this._map),this},closeTooltip:function(){if(this._tooltip)return this._tooltip.close()},toggleTooltip:function(){return this._tooltip&&this._tooltip.toggle(this),this},isTooltipOpen:function(){return this._tooltip.isOpen()},setTooltipContent:function(t){return this._tooltip&&this._tooltip.setContent(t),this},getTooltip:function(){return this._tooltip},_openTooltip:function(t){!this._tooltip||!this._map||this._map.dragging&&this._map.dragging.moving()||(this._tooltip._source=t.layer||t.target,this.openTooltip(this._tooltip.options.sticky?t.latlng:void 0))},_moveTooltip:function(t){var i,e,n=t.latlng;this._tooltip.options.sticky&&t.originalEvent&&(i=this._map.mouseEventToContainerPoint(t.originalEvent),e=this._map.containerPointToLayerPoint(i),n=this._map.layerPointToLatLng(e)),this._tooltip.setLatLng(n)}});var kn=qe.extend({options:{iconSize:[12,12],html:!1,bgPos:null,className:\"leaflet-div-icon\"},createIcon:function(t){var i=t&&\"DIV\"===t.tagName?t:document.createElement(\"div\"),e=this.options;if(e.html instanceof Element?(mi(i),i.appendChild(e.html)):i.innerHTML=!1!==e.html?e.html:\"\",e.bgPos){var n=I(e.bgPos);i.style.backgroundPosition=-n.x+\"px \"+-n.y+\"px\"}return this._setIconStyles(i,\"icon\"),i},createShadow:function(){return null}});function En(t){return new kn(t)}qe.Default=Ke;var Bn=He.extend({options:{tileSize:256,opacity:1,updateWhenIdle:Ot.mobile,updateWhenZooming:!0,updateInterval:200,zIndex:1,bounds:null,minZoom:0,maxZoom:void 0,maxNativeZoom:void 0,minNativeZoom:void 0,noWrap:!1,pane:\"tilePane\",className:\"\",keepBuffer:2},initialize:function(t){d(this,t)},onAdd:function(){this._initContainer(),this._levels={},this._tiles={},this._resetView()},beforeAdd:function(t){t._addZoomLimit(this)},onRemove:function(t){this._removeAllTiles(),pi(this._container),t._removeZoomLimit(this),this._container=null,this._tileZoom=void 0},bringToFront:function(){return this._map&&(fi(this._container),this._setAutoZIndex(Math.max)),this},bringToBack:function(){return this._map&&(gi(this._container),this._setAutoZIndex(Math.min)),this},getContainer:function(){return this._container},setOpacity:function(t){return this.options.opacity=t,this._updateOpacity(),this},setZIndex:function(t){return this.options.zIndex=t,this._updateZIndex(),this},isLoading:function(){return this._loading},redraw:function(){if(this._map){this._removeAllTiles();var t=this._clampZoom(this._map.getZoom());t!==this._tileZoom&&(this._tileZoom=t,this._updateLevels()),this._update()}return this},getEvents:function(){var t={viewprereset:this._invalidateAll,viewreset:this._resetView,zoom:this._resetView,moveend:this._onMoveEnd};return this.options.updateWhenIdle||(this._onMove||(this._onMove=a(this._onMoveEnd,this.options.updateInterval,this)),t.move=this._onMove),this._zoomAnimated&&(t.zoomanim=this._animateZoom),t},createTile:function(){return document.createElement(\"div\")},getTileSize:function(){var t=this.options.tileSize;return t instanceof B?t:new B(t,t)},_updateZIndex:function(){this._container&&void 0!==this.options.zIndex&&null!==this.options.zIndex&&(this._container.style.zIndex=this.options.zIndex)},_setAutoZIndex:function(t){for(var i,e=this.getPane().children,n=-t(-1/0,1/0),o=0,s=e.length;o<s;o++)i=e[o].style.zIndex,e[o]!==this._container&&i&&(n=t(n,+i));isFinite(n)&&(this.options.zIndex=n+t(-1,1),this._updateZIndex())},_updateOpacity:function(){if(this._map&&!Ot.ielt9){bi(this._container,this.options.opacity);var t=+new Date,i=!1,e=!1;for(var n in this._tiles){var o=this._tiles[n];if(o.current&&o.loaded){var s=Math.min(1,(t-o.loaded)/200);bi(o.el,s),s<1?i=!0:(o.active?e=!0:this._onOpaqueTile(o),o.active=!0)}}e&&!this._noPrune&&this._pruneTiles(),i&&(M(this._fadeFrame),this._fadeFrame=z(this._updateOpacity,this))}},_onOpaqueTile:u,_initContainer:function(){this._container||(this._container=di(\"div\",\"leaflet-layer \"+(this.options.className||\"\")),this._updateZIndex(),this.options.opacity<1&&this._updateOpacity(),this.getPane().appendChild(this._container))},_updateLevels:function(){var t=this._tileZoom,i=this.options.maxZoom;if(void 0!==t){for(var e in this._levels)e=Number(e),this._levels[e].el.children.length||e===t?(this._levels[e].el.style.zIndex=i-Math.abs(t-e),this._onUpdateLevel(e)):(pi(this._levels[e].el),this._removeTilesAtZoom(e),this._onRemoveLevel(e),delete this._levels[e]);var n=this._levels[t],o=this._map;return n||((n=this._levels[t]={}).el=di(\"div\",\"leaflet-tile-container leaflet-zoom-animated\",this._container),n.el.style.zIndex=i,n.origin=o.project(o.unproject(o.getPixelOrigin()),t).round(),n.zoom=t,this._setZoomTransform(n,o.getCenter(),o.getZoom()),u(n.el.offsetWidth),this._onCreateLevel(n)),this._level=n,n}},_onUpdateLevel:u,_onRemoveLevel:u,_onCreateLevel:u,_pruneTiles:function(){if(this._map){var t,i,e=this._map.getZoom();if(e>this.options.maxZoom||e<this.options.minZoom)this._removeAllTiles();else{for(t in this._tiles)(i=this._tiles[t]).retain=i.current;for(t in this._tiles)if((i=this._tiles[t]).current&&!i.active){var n=i.coords;this._retainParent(n.x,n.y,n.z,n.z-5)||this._retainChildren(n.x,n.y,n.z,n.z+2)}for(t in this._tiles)this._tiles[t].retain||this._removeTile(t)}}},_removeTilesAtZoom:function(t){for(var i in this._tiles)this._tiles[i].coords.z===t&&this._removeTile(i)},_removeAllTiles:function(){for(var t in this._tiles)this._removeTile(t)},_invalidateAll:function(){for(var t in this._levels)pi(this._levels[t].el),this._onRemoveLevel(Number(t)),delete this._levels[t];this._removeAllTiles(),this._tileZoom=void 0},_retainParent:function(t,i,e,n){var o=Math.floor(t/2),s=Math.floor(i/2),r=e-1,a=new B(+o,+s);a.z=+r;var h=this._tileCoordsToKey(a),u=this._tiles[h];return u&&u.active?(u.retain=!0,!0):(u&&u.loaded&&(u.retain=!0),r>n&&this._retainParent(o,s,r,n))},_retainChildren:function(t,i,e,n){for(var o=2*t;o<2*t+2;o++)for(var s=2*i;s<2*i+2;s++){var r=new B(o,s);r.z=e+1;var a=this._tileCoordsToKey(r),h=this._tiles[a];h&&h.active?h.retain=!0:(h&&h.loaded&&(h.retain=!0),e+1<n&&this._retainChildren(o,s,e+1,n))}},_resetView:function(t){var i=t&&(t.pinch||t.flyTo);this._setView(this._map.getCenter(),this._map.getZoom(),i,i)},_animateZoom:function(t){this._setView(t.center,t.zoom,!0,t.noUpdate)},_clampZoom:function(t){var i=this.options;return void 0!==i.minNativeZoom&&t<i.minNativeZoom?i.minNativeZoom:void 0!==i.maxNativeZoom&&i.maxNativeZoom<t?i.maxNativeZoom:t},_setView:function(t,i,e,n){var o=Math.round(i);o=void 0!==this.options.maxZoom&&o>this.options.maxZoom||void 0!==this.options.minZoom&&o<this.options.minZoom?void 0:this._clampZoom(o);var s=this.options.updateWhenZooming&&o!==this._tileZoom;n&&!s||(this._tileZoom=o,this._abortLoading&&this._abortLoading(),this._updateLevels(),this._resetGrid(),void 0!==o&&this._update(t),e||this._pruneTiles(),this._noPrune=!!e),this._setZoomTransforms(t,i)},_setZoomTransforms:function(t,i){for(var e in this._levels)this._setZoomTransform(this._levels[e],t,i)},_setZoomTransform:function(t,i,e){var n=this._map.getZoomScale(e,t.zoom),o=t.origin.multiplyBy(n).subtract(this._map._getNewPixelOrigin(i,e)).round();Ot.any3d?zi(t.el,o,n):Mi(t.el,o)},_resetGrid:function(){var t=this._map,i=t.options.crs,e=this._tileSize=this.getTileSize(),n=this._tileZoom,o=this._map.getPixelWorldBounds(this._tileZoom);o&&(this._globalTileRange=this._pxBoundsToTileRange(o)),this._wrapX=i.wrapLng&&!this.options.noWrap&&[Math.floor(t.project([0,i.wrapLng[0]],n).x/e.x),Math.ceil(t.project([0,i.wrapLng[1]],n).x/e.y)],this._wrapY=i.wrapLat&&!this.options.noWrap&&[Math.floor(t.project([i.wrapLat[0],0],n).y/e.x),Math.ceil(t.project([i.wrapLat[1],0],n).y/e.y)]},_onMoveEnd:function(){this._map&&!this._map._animatingZoom&&this._update()},_getTiledPixelBounds:function(t){var i=this._map,e=i._animatingZoom?Math.max(i._animateToZoom,i.getZoom()):i.getZoom(),n=i.getZoomScale(e,this._tileZoom),o=i.project(t,this._tileZoom).floor(),s=i.getSize().divideBy(2*n);return new O(o.subtract(s),o.add(s))},_update:function(t){var i=this._map;if(i){var e=this._clampZoom(i.getZoom());if(void 0===t&&(t=i.getCenter()),void 0!==this._tileZoom){var n=this._getTiledPixelBounds(t),o=this._pxBoundsToTileRange(n),s=o.getCenter(),r=[],a=this.options.keepBuffer,h=new O(o.getBottomLeft().subtract([a,-a]),o.getTopRight().add([a,-a]));if(!(isFinite(o.min.x)&&isFinite(o.min.y)&&isFinite(o.max.x)&&isFinite(o.max.y)))throw new Error(\"Attempted to load an infinite number of tiles\");for(var u in this._tiles){var l=this._tiles[u].coords;l.z===this._tileZoom&&h.contains(new B(l.x,l.y))||(this._tiles[u].current=!1)}if(Math.abs(e-this._tileZoom)>1)this._setView(t,e);else{for(var c=o.min.y;c<=o.max.y;c++)for(var _=o.min.x;_<=o.max.x;_++){var d=new B(_,c);if(d.z=this._tileZoom,this._isValidTile(d)){var p=this._tiles[this._tileCoordsToKey(d)];p?p.current=!0:r.push(d)}}if(r.sort((function(t,i){return t.distanceTo(s)-i.distanceTo(s)})),0!==r.length){this._loading||(this._loading=!0,this.fire(\"loading\"));var m=document.createDocumentFragment();for(_=0;_<r.length;_++)this._addTile(r[_],m);this._level.el.appendChild(m)}}}}},_isValidTile:function(t){var i=this._map.options.crs;if(!i.infinite){var e=this._globalTileRange;if(!i.wrapLng&&(t.x<e.min.x||t.x>e.max.x)||!i.wrapLat&&(t.y<e.min.y||t.y>e.max.y))return!1}if(!this.options.bounds)return!0;var n=this._tileCoordsToBounds(t);return D(this.options.bounds).overlaps(n)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var i=this._map,e=this.getTileSize(),n=t.scaleBy(e),o=n.add(e);return[i.unproject(n,t.z),i.unproject(o,t.z)]},_tileCoordsToBounds:function(t){var i=this._tileCoordsToNwSe(t),e=new N(i[0],i[1]);return this.options.noWrap||(e=this._map.wrapLatLngBounds(e)),e},_tileCoordsToKey:function(t){return t.x+\":\"+t.y+\":\"+t.z},_keyToTileCoords:function(t){var i=t.split(\":\"),e=new B(+i[0],+i[1]);return e.z=+i[2],e},_removeTile:function(t){var i=this._tiles[t];i&&(pi(i.el),delete this._tiles[t],this.fire(\"tileunload\",{tile:i.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){yi(t,\"leaflet-tile\");var i=this.getTileSize();t.style.width=i.x+\"px\",t.style.height=i.y+\"px\",t.onselectstart=u,t.onmousemove=u,Ot.ielt9&&this.options.opacity<1&&bi(t,this.options.opacity)},_addTile:function(t,i){var e=this._getTilePos(t),n=this._tileCoordsToKey(t),s=this.createTile(this._wrapCoords(t),o(this._tileReady,this,t));this._initTile(s),this.createTile.length<2&&z(o(this._tileReady,this,t,null,s)),Mi(s,e),this._tiles[n]={el:s,coords:t,current:!0},i.appendChild(s),this.fire(\"tileloadstart\",{tile:s,coords:t})},_tileReady:function(t,i,e){i&&this.fire(\"tileerror\",{error:i,tile:e,coords:t});var n=this._tileCoordsToKey(t);(e=this._tiles[n])&&(e.loaded=+new Date,this._map._fadeAnimated?(bi(e.el,0),M(this._fadeFrame),this._fadeFrame=z(this._updateOpacity,this)):(e.active=!0,this._pruneTiles()),i||(yi(e.el,\"leaflet-tile-loaded\"),this.fire(\"tileload\",{tile:e.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire(\"load\"),Ot.ielt9||!this._map._fadeAnimated?z(this._pruneTiles,this):setTimeout(o(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var i=new B(this._wrapX?h(t.x,this._wrapX):t.x,this._wrapY?h(t.y,this._wrapY):t.y);return i.z=t.z,i},_pxBoundsToTileRange:function(t){var i=this.getTileSize();return new O(t.min.unscaleBy(i).floor(),t.max.unscaleBy(i).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}});function An(t){return new Bn(t)}var In=Bn.extend({options:{minZoom:0,maxZoom:18,subdomains:\"abc\",errorTileUrl:\"\",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1,referrerPolicy:!1},initialize:function(t,i){this._url=t,(i=d(this,i)).detectRetina&&Ot.retina&&i.maxZoom>0&&(i.tileSize=Math.floor(i.tileSize/2),i.zoomReverse?(i.zoomOffset--,i.minZoom++):(i.zoomOffset++,i.maxZoom--),i.minZoom=Math.max(0,i.minZoom)),\"string\"==typeof i.subdomains&&(i.subdomains=i.subdomains.split(\"\")),this.on(\"tileunload\",this._onTileRemove)},setUrl:function(t,i){return this._url===t&&void 0===i&&(i=!0),this._url=t,i||this.redraw(),this},createTile:function(t,i){var e=document.createElement(\"img\");return Ri(e,\"load\",o(this._tileOnLoad,this,i,e)),Ri(e,\"error\",o(this._tileOnError,this,i,e)),(this.options.crossOrigin||\"\"===this.options.crossOrigin)&&(e.crossOrigin=!0===this.options.crossOrigin?\"\":this.options.crossOrigin),\"string\"==typeof this.options.referrerPolicy&&(e.referrerPolicy=this.options.referrerPolicy),e.alt=\"\",e.setAttribute(\"role\",\"presentation\"),e.src=this.getTileUrl(t),e},getTileUrl:function(t){var i={r:Ot.retina?\"@2x\":\"\",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var n=this._globalTileRange.max.y-t.y;this.options.tms&&(i.y=n),i[\"-y\"]=n}return f(this._url,e(i,this.options))},_tileOnLoad:function(t,i){Ot.ielt9?setTimeout(o(t,this,null,i),0):t(null,i)},_tileOnError:function(t,i,e){var n=this.options.errorTileUrl;n&&i.getAttribute(\"src\")!==n&&(i.src=n),t(e,i)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,i=this.options.maxZoom;return this.options.zoomReverse&&(t=i-t),t+this.options.zoomOffset},_getSubdomain:function(t){var i=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[i]},_abortLoading:function(){var t,i;for(t in this._tiles)if(this._tiles[t].coords.z!==this._tileZoom&&((i=this._tiles[t].el).onload=u,i.onerror=u,!i.complete)){i.src=y;var e=this._tiles[t].coords;pi(i),delete this._tiles[t],this.fire(\"tileabort\",{tile:i,coords:e})}},_removeTile:function(t){var i=this._tiles[t];if(i)return i.el.setAttribute(\"src\",y),Bn.prototype._removeTile.call(this,t)},_tileReady:function(t,i,e){if(this._map&&(!e||e.getAttribute(\"src\")!==y))return Bn.prototype._tileReady.call(this,t,i,e)}});function On(t,i){return new In(t,i)}var Rn=In.extend({defaultWmsParams:{service:\"WMS\",request:\"GetMap\",layers:\"\",styles:\"\",format:\"image/jpeg\",transparent:!1,version:\"1.1.1\"},options:{crs:null,uppercase:!1},initialize:function(t,i){this._url=t;var n=e({},this.defaultWmsParams);for(var o in i)o in this.options||(n[o]=i[o]);var s=(i=d(this,i)).detectRetina&&Ot.retina?2:1,r=this.getTileSize();n.width=r.x*s,n.height=r.y*s,this.wmsParams=n},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var i=this._wmsVersion>=1.3?\"crs\":\"srs\";this.wmsParams[i]=this._crs.code,In.prototype.onAdd.call(this,t)},getTileUrl:function(t){var i=this._tileCoordsToNwSe(t),e=this._crs,n=R(e.project(i[0]),e.project(i[1])),o=n.min,s=n.max,r=(this._wmsVersion>=1.3&&this._crs===De?[o.y,o.x,s.y,s.x]:[o.x,o.y,s.x,s.y]).join(\",\"),a=In.prototype.getTileUrl.call(this,t);return a+p(this.wmsParams,a,this.options.uppercase)+(this.options.uppercase?\"&BBOX=\":\"&bbox=\")+r},setParams:function(t,i){return e(this.wmsParams,t),i||this.redraw(),this}});function Nn(t,i){return new Rn(t,i)}In.WMS=Rn,On.wms=Nn;var Dn=He.extend({options:{padding:.1},initialize:function(t){d(this,t),r(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),this._zoomAnimated&&yi(this._container,\"leaflet-zoom-animated\")),this.getPane().appendChild(this._container),this._update(),this.on(\"update\",this._updatePaths,this)},onRemove:function(){this.off(\"update\",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,i){var e=this._map.getZoomScale(i,this._zoom),n=this._map.getSize().multiplyBy(.5+this.options.padding),o=this._map.project(this._center,i),s=n.multiplyBy(-e).add(o).subtract(this._map._getNewPixelOrigin(t,i));Ot.any3d?zi(this._container,s,e):Mi(this._container,s)},_reset:function(){for(var t in this._update(),this._updateTransform(this._center,this._zoom),this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,i=this._map.getSize(),e=this._map.containerPointToLayerPoint(i.multiplyBy(-t)).round();this._bounds=new O(e,e.add(i.multiplyBy(1+2*t)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),jn=Dn.extend({options:{tolerance:0},getEvents:function(){var t=Dn.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){Dn.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement(\"canvas\");Ri(t,\"mousemove\",this._onMouseMove,this),Ri(t,\"click dblclick mousedown mouseup contextmenu\",this._onClick,this),Ri(t,\"mouseout\",this._handleMouseOut,this),t._leaflet_disable_events=!0,this._ctx=t.getContext(\"2d\")},_destroyContainer:function(){M(this._redrawRequest),delete this._ctx,pi(this._container),Di(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){for(var t in this._redrawBounds=null,this._layers)this._layers[t]._update();this._redraw()}},_update:function(){if(!this._map._animatingZoom||!this._bounds){Dn.prototype._update.call(this);var t=this._bounds,i=this._container,e=t.getSize(),n=Ot.retina?2:1;Mi(i,t.min),i.width=n*e.x,i.height=n*e.y,i.style.width=e.x+\"px\",i.style.height=e.y+\"px\",Ot.retina&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire(\"update\")}},_reset:function(){Dn.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layers[r(t)]=t;var i=t._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=i),this._drawLast=i,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var i=t._order,e=i.next,n=i.prev;e?e.prev=n:this._drawLast=n,n?n.next=e:this._drawFirst=e,delete t._order,delete this._layers[r(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if(\"string\"==typeof t.options.dashArray){var i,e,n=t.options.dashArray.split(/[, ]+/),o=[];for(e=0;e<n.length;e++){if(i=Number(n[e]),isNaN(i))return;o.push(i)}t.options._dashArray=o}else t.options._dashArray=t.options.dashArray},_requestRedraw:function(t){this._map&&(this._extendRedrawBounds(t),this._redrawRequest=this._redrawRequest||z(this._redraw,this))},_extendRedrawBounds:function(t){if(t._pxBounds){var i=(t.options.weight||0)+1;this._redrawBounds=this._redrawBounds||new O,this._redrawBounds.extend(t._pxBounds.min.subtract([i,i])),this._redrawBounds.extend(t._pxBounds.max.add([i,i]))}},_redraw:function(){this._redrawRequest=null,this._redrawBounds&&(this._redrawBounds.min._floor(),this._redrawBounds.max._ceil()),this._clear(),this._draw(),this._redrawBounds=null},_clear:function(){var t=this._redrawBounds;if(t){var i=t.getSize();this._ctx.clearRect(t.min.x,t.min.y,i.x,i.y)}else this._ctx.save(),this._ctx.setTransform(1,0,0,1,0,0),this._ctx.clearRect(0,0,this._container.width,this._container.height),this._ctx.restore()},_draw:function(){var t,i=this._redrawBounds;if(this._ctx.save(),i){var e=i.getSize();this._ctx.beginPath(),this._ctx.rect(i.min.x,i.min.y,e.x,e.y),this._ctx.clip()}this._drawing=!0;for(var n=this._drawFirst;n;n=n.next)t=n.layer,(!i||t._pxBounds&&t._pxBounds.intersects(i))&&t._updatePath();this._drawing=!1,this._ctx.restore()},_updatePoly:function(t,i){if(this._drawing){var e,n,o,s,r=t._parts,a=r.length,h=this._ctx;if(a){for(h.beginPath(),e=0;e<a;e++){for(n=0,o=r[e].length;n<o;n++)s=r[e][n],h[n?\"lineTo\":\"moveTo\"](s.x,s.y);i&&h.closePath()}this._fillStroke(h,t)}}},_updateCircle:function(t){if(this._drawing&&!t._empty()){var i=t._point,e=this._ctx,n=Math.max(Math.round(t._radius),1),o=(Math.max(Math.round(t._radiusY),1)||n)/n;1!==o&&(e.save(),e.scale(1,o)),e.beginPath(),e.arc(i.x,i.y/o,n,0,2*Math.PI,!1),1!==o&&e.restore(),this._fillStroke(e,t)}},_fillStroke:function(t,i){var e=i.options;e.fill&&(t.globalAlpha=e.fillOpacity,t.fillStyle=e.fillColor||e.color,t.fill(e.fillRule||\"evenodd\")),e.stroke&&0!==e.weight&&(t.setLineDash&&t.setLineDash(i.options&&i.options._dashArray||[]),t.globalAlpha=e.opacity,t.lineWidth=e.weight,t.strokeStyle=e.color,t.lineCap=e.lineCap,t.lineJoin=e.lineJoin,t.stroke())},_onClick:function(t){for(var i,e,n=this._map.mouseEventToLayerPoint(t),o=this._drawFirst;o;o=o.next)(i=o.layer).options.interactive&&i._containsPoint(n)&&(\"click\"!==t.type&&\"preclick\"!==t.type||!this._map._draggableMoved(i))&&(e=i);this._fireEvent(!!e&&[e],t)},_onMouseMove:function(t){if(this._map&&!this._map.dragging.moving()&&!this._map._animatingZoom){var i=this._map.mouseEventToLayerPoint(t);this._handleMouseHover(t,i)}},_handleMouseOut:function(t){var i=this._hoveredLayer;i&&(xi(this._container,\"leaflet-interactive\"),this._fireEvent([i],t,\"mouseout\"),this._hoveredLayer=null,this._mouseHoverThrottled=!1)},_handleMouseHover:function(t,i){if(!this._mouseHoverThrottled){for(var e,n,s=this._drawFirst;s;s=s.next)(e=s.layer).options.interactive&&e._containsPoint(i)&&(n=e);n!==this._hoveredLayer&&(this._handleMouseOut(t),n&&(yi(this._container,\"leaflet-interactive\"),this._fireEvent([n],t,\"mouseover\"),this._hoveredLayer=n)),this._fireEvent(!!this._hoveredLayer&&[this._hoveredLayer],t),this._mouseHoverThrottled=!0,setTimeout(o((function(){this._mouseHoverThrottled=!1}),this),32)}},_fireEvent:function(t,i,e){this._map._fireDOMEvent(i,e||i.type,t)},_bringToFront:function(t){var i=t._order;if(i){var e=i.next,n=i.prev;e&&(e.prev=n,n?n.next=e:e&&(this._drawFirst=e),i.prev=this._drawLast,this._drawLast.next=i,i.next=null,this._drawLast=i,this._requestRedraw(t))}},_bringToBack:function(t){var i=t._order;if(i){var e=i.next,n=i.prev;n&&(n.next=e,e?e.prev=n:n&&(this._drawLast=n),i.prev=null,i.next=this._drawFirst,this._drawFirst.prev=i,this._drawFirst=i,this._requestRedraw(t))}}});function Hn(t){return Ot.canvas?new jn(t):null}var Wn=function(){try{return document.namespaces.add(\"lvml\",\"urn:schemas-microsoft-com:vml\"),function(t){return document.createElement(\"<lvml:\"+t+' class=\"lvml\">')}}catch(t){}return function(t){return document.createElement(\"<\"+t+' xmlns=\"urn:schemas-microsoft.com:vml\" class=\"lvml\">')}}(),Fn={_initContainer:function(){this._container=di(\"div\",\"leaflet-vml-container\")},_update:function(){this._map._animatingZoom||(Dn.prototype._update.call(this),this.fire(\"update\"))},_initPath:function(t){var i=t._container=Wn(\"shape\");yi(i,\"leaflet-vml-shape \"+(this.options.className||\"\")),i.coordsize=\"1 1\",t._path=Wn(\"path\"),i.appendChild(t._path),this._updateStyle(t),this._layers[r(t)]=t},_addPath:function(t){var i=t._container;this._container.appendChild(i),t.options.interactive&&t.addInteractiveTarget(i)},_removePath:function(t){var i=t._container;pi(i),t.removeInteractiveTarget(i),delete this._layers[r(t)]},_updateStyle:function(t){var i=t._stroke,e=t._fill,n=t.options,o=t._container;o.stroked=!!n.stroke,o.filled=!!n.fill,n.stroke?(i||(i=t._stroke=Wn(\"stroke\")),o.appendChild(i),i.weight=n.weight+\"px\",i.color=n.color,i.opacity=n.opacity,n.dashArray?i.dashStyle=g(n.dashArray)?n.dashArray.join(\" \"):n.dashArray.replace(/( *, *)/g,\" \"):i.dashStyle=\"\",i.endcap=n.lineCap.replace(\"butt\",\"flat\"),i.joinstyle=n.lineJoin):i&&(o.removeChild(i),t._stroke=null),n.fill?(e||(e=t._fill=Wn(\"fill\")),o.appendChild(e),e.color=n.fillColor||n.color,e.opacity=n.fillOpacity):e&&(o.removeChild(e),t._fill=null)},_updateCircle:function(t){var i=t._point.round(),e=Math.round(t._radius),n=Math.round(t._radiusY||e);this._setPath(t,t._empty()?\"M0 0\":\"AL \"+i.x+\",\"+i.y+\" \"+e+\",\"+n+\" 0,23592600\")},_setPath:function(t,i){t._path.v=i},_bringToFront:function(t){fi(t._container)},_bringToBack:function(t){gi(t._container)}},Un=Ot.vml?Wn:J,Vn=Dn.extend({_initContainer:function(){this._container=Un(\"svg\"),this._container.setAttribute(\"pointer-events\",\"none\"),this._rootGroup=Un(\"g\"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){pi(this._container),Di(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_update:function(){if(!this._map._animatingZoom||!this._bounds){Dn.prototype._update.call(this);var t=this._bounds,i=t.getSize(),e=this._container;this._svgSize&&this._svgSize.equals(i)||(this._svgSize=i,e.setAttribute(\"width\",i.x),e.setAttribute(\"height\",i.y)),Mi(e,t.min),e.setAttribute(\"viewBox\",[t.min.x,t.min.y,i.x,i.y].join(\" \")),this.fire(\"update\")}},_initPath:function(t){var i=t._path=Un(\"path\");t.options.className&&yi(i,t.options.className),t.options.interactive&&yi(i,\"leaflet-interactive\"),this._updateStyle(t),this._layers[r(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){pi(t._path),t.removeInteractiveTarget(t._path),delete this._layers[r(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var i=t._path,e=t.options;i&&(e.stroke?(i.setAttribute(\"stroke\",e.color),i.setAttribute(\"stroke-opacity\",e.opacity),i.setAttribute(\"stroke-width\",e.weight),i.setAttribute(\"stroke-linecap\",e.lineCap),i.setAttribute(\"stroke-linejoin\",e.lineJoin),e.dashArray?i.setAttribute(\"stroke-dasharray\",e.dashArray):i.removeAttribute(\"stroke-dasharray\"),e.dashOffset?i.setAttribute(\"stroke-dashoffset\",e.dashOffset):i.removeAttribute(\"stroke-dashoffset\")):i.setAttribute(\"stroke\",\"none\"),e.fill?(i.setAttribute(\"fill\",e.fillColor||e.color),i.setAttribute(\"fill-opacity\",e.fillOpacity),i.setAttribute(\"fill-rule\",e.fillRule||\"evenodd\")):i.setAttribute(\"fill\",\"none\"))},_updatePoly:function(t,i){this._setPath(t,$(t._parts,i))},_updateCircle:function(t){var i=t._point,e=Math.max(Math.round(t._radius),1),n=\"a\"+e+\",\"+(Math.max(Math.round(t._radiusY),1)||e)+\" 0 1,0 \",o=t._empty()?\"M0 0\":\"M\"+(i.x-e)+\",\"+i.y+n+2*e+\",0 \"+n+2*-e+\",0 \";this._setPath(t,o)},_setPath:function(t,i){t._path.setAttribute(\"d\",i)},_bringToFront:function(t){fi(t._path)},_bringToBack:function(t){gi(t._path)}});function qn(t){return Ot.svg||Ot.vml?new Vn(t):null}Ot.vml&&Vn.include(Fn),ie.include({getRenderer:function(t){var i=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return i||(i=this._renderer=this._createRenderer()),this.hasLayer(i)||this.addLayer(i),i},_getPaneRenderer:function(t){if(\"overlayPane\"===t||void 0===t)return!1;var i=this._paneRenderers[t];return void 0===i&&(i=this._createRenderer({pane:t}),this._paneRenderers[t]=i),i},_createRenderer:function(t){return this.options.preferCanvas&&Hn(t)||qn(t)}});var Gn=rn.extend({initialize:function(t,i){rn.prototype.initialize.call(this,this._boundsToLatLngs(t),i)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return[(t=D(t)).getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});function Kn(t,i){return new Gn(t,i)}Vn.create=Un,Vn.pointsToPath=$,hn.geometryToLayer=un,hn.coordsToLatLng=cn,hn.coordsToLatLngs=_n,hn.latLngToCoords=dn,hn.latLngsToCoords=pn,hn.getFeature=mn,hn.asFeature=fn,ie.mergeOptions({boxZoom:!0});var Yn=pe.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on(\"unload\",this._destroy,this)},addHooks:function(){Ri(this._container,\"mousedown\",this._onMouseDown,this)},removeHooks:function(){Di(this._container,\"mousedown\",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){pi(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),ni(),Si(),this._startPoint=this._map.mouseEventToContainerPoint(t),Ri(document,{contextmenu:Ki,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=di(\"div\",\"leaflet-zoom-box\",this._container),yi(this._container,\"leaflet-crosshair\"),this._map.fire(\"boxzoomstart\")),this._point=this._map.mouseEventToContainerPoint(t);var i=new O(this._point,this._startPoint),e=i.getSize();Mi(this._box,i.min),this._box.style.width=e.x+\"px\",this._box.style.height=e.y+\"px\"},_finish:function(){this._moved&&(pi(this._box),xi(this._container,\"leaflet-crosshair\")),oi(),ki(),Di(document,{contextmenu:Ki,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if((1===t.which||1===t.button)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(o(this._resetState,this),0);var i=new N(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(i).fire(\"boxzoomend\",{boxZoomBounds:i})}},_onKeyDown:function(t){27===t.keyCode&&(this._finish(),this._clearDeferredResetState(),this._resetState())}});ie.addInitHook(\"addHandler\",\"boxZoom\",Yn),ie.mergeOptions({doubleClickZoom:!0});var Xn=pe.extend({addHooks:function(){this._map.on(\"dblclick\",this._onDoubleClick,this)},removeHooks:function(){this._map.off(\"dblclick\",this._onDoubleClick,this)},_onDoubleClick:function(t){var i=this._map,e=i.getZoom(),n=i.options.zoomDelta,o=t.originalEvent.shiftKey?e-n:e+n;\"center\"===i.options.doubleClickZoom?i.setZoom(o):i.setZoomAround(t.containerPoint,o)}});ie.addInitHook(\"addHandler\",\"doubleClickZoom\",Xn),ie.mergeOptions({dragging:!0,inertia:!0,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var Jn=pe.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new ve(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on(\"predrag\",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on(\"predrag\",this._onPreDragWrap,this),t.on(\"zoomend\",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}yi(this._map._container,\"leaflet-grab leaflet-touch-drag\"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){xi(this._map._container,\"leaflet-grab\"),xi(this._map._container,\"leaflet-touch-drag\"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var i=D(this._map.options.maxBounds);this._offsetLimit=R(this._map.latLngToContainerPoint(i.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(i.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire(\"movestart\").fire(\"dragstart\"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var i=this._lastTime=+new Date,e=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(e),this._times.push(i),this._prunePositions(i)}this._map.fire(\"move\",t).fire(\"drag\",t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),i=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=i.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,i){return t-(t-i)*this._viscosity},_onPreDragLimit:function(){if(this._viscosity&&this._offsetLimit){var t=this._draggable._newPos.subtract(this._draggable._startPos),i=this._offsetLimit;t.x<i.min.x&&(t.x=this._viscousLimit(t.x,i.min.x)),t.y<i.min.y&&(t.y=this._viscousLimit(t.y,i.min.y)),t.x>i.max.x&&(t.x=this._viscousLimit(t.x,i.max.x)),t.y>i.max.y&&(t.y=this._viscousLimit(t.y,i.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,i=Math.round(t/2),e=this._initialWorldOffset,n=this._draggable._newPos.x,o=(n-i+e)%t+i-e,s=(n+i+e)%t-i-e,r=Math.abs(o+e)<Math.abs(s+e)?o:s;this._draggable._absPos=this._draggable._newPos.clone(),this._draggable._newPos.x=r},_onDragEnd:function(t){var i=this._map,e=i.options,n=!e.inertia||t.noInertia||this._times.length<2;if(i.fire(\"dragend\",t),n)i.fire(\"moveend\");else{this._prunePositions(+new Date);var o=this._lastPos.subtract(this._positions[0]),s=(this._lastTime-this._times[0])/1e3,r=e.easeLinearity,a=o.multiplyBy(r/s),h=a.distanceTo([0,0]),u=Math.min(e.inertiaMaxSpeed,h),l=a.multiplyBy(u/h),c=u/(e.inertiaDeceleration*r),_=l.multiplyBy(-c/2).round();_.x||_.y?(_=i._limitOffset(_,i.options.maxBounds),z((function(){i.panBy(_,{duration:c,easeLinearity:r,noMoveStart:!0,animate:!0})}))):i.fire(\"moveend\")}}});ie.addInitHook(\"addHandler\",\"dragging\",Jn),ie.mergeOptions({keyboard:!0,keyboardPanDelta:80});var $n=pe.extend({keyCodes:{left:[37],right:[39],down:[40],up:[38],zoomIn:[187,107,61,171],zoomOut:[189,109,54,173]},initialize:function(t){this._map=t,this._setPanDelta(t.options.keyboardPanDelta),this._setZoomDelta(t.options.zoomDelta)},addHooks:function(){var t=this._map._container;t.tabIndex<=0&&(t.tabIndex=\"0\"),Ri(t,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.on({focus:this._addHooks,blur:this._removeHooks},this)},removeHooks:function(){this._removeHooks(),Di(this._map._container,{focus:this._onFocus,blur:this._onBlur,mousedown:this._onMouseDown},this),this._map.off({focus:this._addHooks,blur:this._removeHooks},this)},_onMouseDown:function(){if(!this._focused){var t=document.body,i=document.documentElement,e=t.scrollTop||i.scrollTop,n=t.scrollLeft||i.scrollLeft;this._map._container.focus(),window.scrollTo(n,e)}},_onFocus:function(){this._focused=!0,this._map.fire(\"focus\")},_onBlur:function(){this._focused=!1,this._map.fire(\"blur\")},_setPanDelta:function(t){var i,e,n=this._panKeys={},o=this.keyCodes;for(i=0,e=o.left.length;i<e;i++)n[o.left[i]]=[-1*t,0];for(i=0,e=o.right.length;i<e;i++)n[o.right[i]]=[t,0];for(i=0,e=o.down.length;i<e;i++)n[o.down[i]]=[0,t];for(i=0,e=o.up.length;i<e;i++)n[o.up[i]]=[0,-1*t]},_setZoomDelta:function(t){var i,e,n=this._zoomKeys={},o=this.keyCodes;for(i=0,e=o.zoomIn.length;i<e;i++)n[o.zoomIn[i]]=t;for(i=0,e=o.zoomOut.length;i<e;i++)n[o.zoomOut[i]]=-t},_addHooks:function(){Ri(document,\"keydown\",this._onKeyDown,this)},_removeHooks:function(){Di(document,\"keydown\",this._onKeyDown,this)},_onKeyDown:function(t){if(!(t.altKey||t.ctrlKey||t.metaKey)){var i,e=t.keyCode,n=this._map;if(e in this._panKeys)n._panAnim&&n._panAnim._inProgress||(i=this._panKeys[e],t.shiftKey&&(i=I(i).multiplyBy(3)),n.panBy(i),n.options.maxBounds&&n.panInsideBounds(n.options.maxBounds));else if(e in this._zoomKeys)n.setZoom(n.getZoom()+(t.shiftKey?3:1)*this._zoomKeys[e]);else{if(27!==e||!n._popup||!n._popup.options.closeOnEscapeKey)return;n.closePopup()}Ki(t)}}});ie.addInitHook(\"addHandler\",\"keyboard\",$n),ie.mergeOptions({scrollWheelZoom:!0,wheelDebounceTime:40,wheelPxPerZoomLevel:60});var Qn=pe.extend({addHooks:function(){Ri(this._map._container,\"wheel\",this._onWheelScroll,this),this._delta=0},removeHooks:function(){Di(this._map._container,\"wheel\",this._onWheelScroll,this)},_onWheelScroll:function(t){var i=Ji(t),e=this._map.options.wheelDebounceTime;this._delta+=i,this._lastMousePos=this._map.mouseEventToContainerPoint(t),this._startTime||(this._startTime=+new Date);var n=Math.max(e-(+new Date-this._startTime),0);clearTimeout(this._timer),this._timer=setTimeout(o(this._performZoom,this),n),Ki(t)},_performZoom:function(){var t=this._map,i=t.getZoom(),e=this._map.options.zoomSnap||0;t._stop();var n=this._delta/(4*this._map.options.wheelPxPerZoomLevel),o=4*Math.log(2/(1+Math.exp(-Math.abs(n))))/Math.LN2,s=e?Math.ceil(o/e)*e:o,r=t._limitZoom(i+(this._delta>0?s:-s))-i;this._delta=0,this._startTime=null,r&&(\"center\"===t.options.scrollWheelZoom?t.setZoom(i+r):t.setZoomAround(this._lastMousePos,i+r))}});ie.addInitHook(\"addHandler\",\"scrollWheelZoom\",Qn);var to=600;ie.mergeOptions({tapHold:Ot.touchNative&&Ot.safari&&Ot.mobile,tapTolerance:15});var io=pe.extend({addHooks:function(){Ri(this._map._container,\"touchstart\",this._onDown,this)},removeHooks:function(){Di(this._map._container,\"touchstart\",this._onDown,this)},_onDown:function(t){if(clearTimeout(this._holdTimeout),1===t.touches.length){var i=t.touches[0];this._startPos=this._newPos=new B(i.clientX,i.clientY),this._holdTimeout=setTimeout(o((function(){this._cancel(),this._isTapValid()&&(Ri(document,\"touchend\",Gi),Ri(document,\"touchend touchcancel\",this._cancelClickPrevent),this._simulateEvent(\"contextmenu\",i))}),this),to),Ri(document,\"touchend touchcancel contextmenu\",this._cancel,this),Ri(document,\"touchmove\",this._onMove,this)}},_cancelClickPrevent:function t(){Di(document,\"touchend\",Gi),Di(document,\"touchend touchcancel\",t)},_cancel:function(){clearTimeout(this._holdTimeout),Di(document,\"touchend touchcancel contextmenu\",this._cancel,this),Di(document,\"touchmove\",this._onMove,this)},_onMove:function(t){var i=t.touches[0];this._newPos=new B(i.clientX,i.clientY)},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_simulateEvent:function(t,i){var e=new MouseEvent(t,{bubbles:!0,cancelable:!0,view:window,screenX:i.screenX,screenY:i.screenY,clientX:i.clientX,clientY:i.clientY});e._simulated=!0,i.target.dispatchEvent(e)}});ie.addInitHook(\"addHandler\",\"tapHold\",io),ie.mergeOptions({touchZoom:Ot.touch,bounceAtZoomLimits:!0});var eo=pe.extend({addHooks:function(){yi(this._map._container,\"leaflet-touch-zoom\"),Ri(this._map._container,\"touchstart\",this._onTouchStart,this)},removeHooks:function(){xi(this._map._container,\"leaflet-touch-zoom\"),Di(this._map._container,\"touchstart\",this._onTouchStart,this)},_onTouchStart:function(t){var i=this._map;if(t.touches&&2===t.touches.length&&!i._animatingZoom&&!this._zooming){var e=i.mouseEventToContainerPoint(t.touches[0]),n=i.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=i.getSize()._divideBy(2),this._startLatLng=i.containerPointToLatLng(this._centerPoint),\"center\"!==i.options.touchZoom&&(this._pinchStartLatLng=i.containerPointToLatLng(e.add(n)._divideBy(2))),this._startDist=e.distanceTo(n),this._startZoom=i.getZoom(),this._moved=!1,this._zooming=!0,i._stop(),Ri(document,\"touchmove\",this._onTouchMove,this),Ri(document,\"touchend touchcancel\",this._onTouchEnd,this),Gi(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length&&this._zooming){var i=this._map,e=i.mouseEventToContainerPoint(t.touches[0]),n=i.mouseEventToContainerPoint(t.touches[1]),s=e.distanceTo(n)/this._startDist;if(this._zoom=i.getScaleZoom(s,this._startZoom),!i.options.bounceAtZoomLimits&&(this._zoom<i.getMinZoom()&&s<1||this._zoom>i.getMaxZoom()&&s>1)&&(this._zoom=i._limitZoom(this._zoom)),\"center\"===i.options.touchZoom){if(this._center=this._startLatLng,1===s)return}else{var r=e._add(n)._divideBy(2)._subtract(this._centerPoint);if(1===s&&0===r.x&&0===r.y)return;this._center=i.unproject(i.project(this._pinchStartLatLng,this._zoom).subtract(r),this._zoom)}this._moved||(i._moveStart(!0,!1),this._moved=!0),M(this._animRequest);var a=o(i._move,i,this._center,this._zoom,{pinch:!0,round:!1});this._animRequest=z(a,this,!0),Gi(t)}},_onTouchEnd:function(){this._moved&&this._zooming?(this._zooming=!1,M(this._animRequest),Di(document,\"touchmove\",this._onTouchMove,this),Di(document,\"touchend touchcancel\",this._onTouchEnd,this),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))):this._zooming=!1}});ie.addInitHook(\"addHandler\",\"touchZoom\",eo),ie.BoxZoom=Yn,ie.DoubleClickZoom=Xn,ie.Drag=Jn,ie.Keyboard=$n,ie.ScrollWheelZoom=Qn,ie.TapHold=io,ie.TouchZoom=eo,t.Bounds=O,t.Browser=Ot,t.CRS=F,t.Canvas=jn,t.Circle=en,t.CircleMarker=Qe,t.Class=Z,t.Control=ne,t.DivIcon=kn,t.DivOverlay=zn,t.DomEvent=Qi,t.DomUtil=Oi,t.Draggable=ve,t.Evented=E,t.FeatureGroup=Ue,t.GeoJSON=hn,t.GridLayer=Bn,t.Handler=pe,t.Icon=qe,t.ImageOverlay=xn,t.LatLng=j,t.LatLngBounds=N,t.Layer=He,t.LayerGroup=We,t.LineUtil=Ee,t.Map=ie,t.Marker=Xe,t.Mixin=fe,t.Path=$e,t.Point=B,t.PolyUtil=Ae,t.Polygon=rn,t.Polyline=on,t.Popup=Mn,t.PosAnimation=te,t.Projection=Re,t.Rectangle=Gn,t.Renderer=Dn,t.SVG=Vn,t.SVGOverlay=Ln,t.TileLayer=In,t.Tooltip=Zn,t.Transformation=G,t.Util=C,t.VideoOverlay=Pn,t.bind=o,t.bounds=R,t.canvas=Hn,t.circle=nn,t.circleMarker=tn,t.control=oe,t.divIcon=En,t.extend=e,t.featureGroup=Ve,t.geoJSON=vn,t.geoJson=yn,t.gridLayer=An,t.icon=Ge,t.imageOverlay=wn,t.latLng=H,t.latLngBounds=D,t.layerGroup=Fe,t.map=ee,t.marker=Je,t.point=I,t.polygon=an,t.polyline=sn,t.popup=Cn,t.rectangle=Kn,t.setOptions=d,t.stamp=r,t.svg=qn,t.svgOverlay=Tn,t.tileLayer=On,t.tooltip=Sn,t.transformation=K,t.version=i,t.videoOverlay=bn;var no=window.L;t.noConflict=function(){return window.L=no,this},window.L=t}(i)}));export{e as __moduleExports,e as default};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.9d5cd8b6.js",
    "content": "import{A as e,aY as t,r as i,aZ as a,aa as n,a7 as o,a_ as s,a$ as r,a9 as l,S as d,T as c,x as u,Q as h,b0 as p,a as v,h as m,e as f,i as g,L as _,N as y,$ as k,z as b,ac as x,ad as $,n as w,b1 as C,aQ as A,b2 as I,b3 as E,b4 as z,b5 as S,b6 as L,b7 as T,b8 as O,b9 as P,ba as M,bb as F,bc as D,aB as B,bd as N,be as V,bf as j,bg as q,bh as R,bi as U,bj as H,bk as G,bl as W,bm as K,bn as Y,aS as Z,bo as Q,bp as X,bq as J,br as ee,bs as te,ag as ie,bt as ae,bu as ne,bv as oe,bw as se,bx as re,by as le,bz as de,bA as ce,bB as ue,bC as he,bD as pe,bE as ve,bF as me,bG as fe,bH as ge,bI as _e,bJ as ye,bK as ke,bL as be,bM as xe,bN as $e,bO as we,bP as Ce,bQ as Ae,bR as Ie,E as Ee,bS as ze,bT as Se,bU as Le,bV as Te,bW as Oe,bX as Pe,bY as Me,bZ as Fe,b_ as De,b$ as Be,c0 as Ne,c1 as Ve,c2 as je,c3 as qe,c4 as Re,c5 as Ue,c6 as He,c7 as Ge,c8 as We,c9 as Ke,ca as Ye,cb as Ze,cc as Qe,cd as Xe,ce as Je,cf as et,cg as tt,ch as it,ci as at,cj as nt,ck as ot,cl as st,cm as rt,cn as lt,co as dt,cp as ct,cq as ut,cr as ht,cs as pt,ct as vt,cu as mt,cv as ft,cw as gt,cx as _t,cy as yt,cz as kt,cA as bt,cB as xt,cC as $t,cD as wt,az as Ct,cE as At,cF as It,cG as Et,cH as zt,cI as St,cJ as Lt,cK as Tt,cL as Ot,cM as Pt,cN as Mt,cO as Ft,cP as Dt,cQ as Bt,cR as Nt,cS as Vt,cT as jt,cU as qt,cV as Rt,cW as Ut,cX as Ht,cY as Gt,cZ as Wt,c_ as Kt,c$ as Yt,d0 as Zt,d1 as Qt,d2 as Xt,d3 as Jt,d4 as ei,d5 as ti,d6 as ii,d7 as ai,d8 as ni,d9 as oi,da as si,db as ri,dc as li,dd as di,de as ci,df as ui,dg as hi,dh as pi,di as vi,dj as mi,dk as fi,dl as gi,dm as _i,dn as yi,dp as ki,dq as bi,dr as xi,ds as $i,dt as wi,du as Ci,dv as Ai,dw as Ii,dx as Ei,dy as zi,dz as Si,dA as Li,dB as Ti,dC as Oi,dD as Pi,dE as Mi,dF as Fi,dG as Di,dH as Bi,dI as Ni,t as Vi,I as ji,j as qi,m as Ri,Z as Ui,aD as Hi,dJ as Gi,dK as Wi,dL as Ki,aM as Yi,dM as Zi,_ as Qi,o as Xi,dN as Ji,dO as ea,dP as ta,dQ as ia,dR as aa,dS as na,dT as oa,dU as sa,dV as ra,dW as la,dX as da,dY as ca,dZ as ua,d_ as ha,d$ as pa,aK as va,e0 as ma,e1 as fa,V as ga,e2 as _a,e3 as ya,e4 as ka,e5 as ba,e6 as xa,e7 as $a,e8 as wa,e9 as Ca,J as Aa,af as Ia}from\"./main-a0d7432d.js\";import{d as Ea,a as za}from\"./c.47f687e9.js\";import\"./c.88ebfd3e.js\";import\"./c.936d9772.js\";import\"./c.175b9792.js\";import\"./c.c7df5815.js\";import{s as Sa,a as La,b as Ta}from\"./c.bca0f55d.js\";import{T as Oa,a as Pa,s as Ma}from\"./c.fbd8d2ba.js\";import{b as Fa,e as Da}from\"./c.05e9df28.js\";import{d as Ba}from\"./c.c176780d.js\";import{i as Na}from\"./c.21c042d4.js\";import{c as Va,u as ja}from\"./c.743a15a1.js\";import\"./c.5ba288d8.js\";import{g as qa}from\"./c.6711bf6c.js\";import\"./c.5ede7966.js\";import{a as Ra}from\"./c.db2e6bb6.js\";import\"./c.63dc92d5.js\";let Ua=!1,Ha=[],Ga=[];function Wa(){Ua=!0,requestAnimationFrame((function(){Ua=!1,function(e){for(;e.length;)Ka(e.shift())}(Ha),setTimeout((function(){!function(e){for(let t=0,i=e.length;t<i;t++)Ka(e.shift())}(Ga)}))}))}function Ka(e){const t=e[0],i=e[1],a=e[2];try{i.apply(t,a)}catch(e){setTimeout((()=>{throw e}))}}function Ya(e){if(!e||\"object\"!=typeof e)return e;if(\"[object Date]\"==Object.prototype.toString.call(e))return new Date(e.getTime());if(Array.isArray(e))return e.map(Ya);var t={};return Object.keys(e).forEach((function(i){t[i]=Ya(e[i])})),t}const Za=(e,t)=>e<t?-1:e>t?1:0,Qa=(e,t)=>Za(e.toLowerCase(),t.toLowerCase());class Xa extends TypeError{constructor(e,t){let i;const{message:a,...n}=e,{path:o}=e;super(0===o.length?a:\"At path: \"+o.join(\".\")+\" -- \"+a),this.value=void 0,this.key=void 0,this.type=void 0,this.refinement=void 0,this.path=void 0,this.branch=void 0,this.failures=void 0,Object.assign(this,n),this.name=this.constructor.name,this.failures=()=>{var a;return null!=(a=i)?a:i=[e,...t()]}}}function Ja(e){return\"object\"==typeof e&&null!=e}function en(e){return\"string\"==typeof e?JSON.stringify(e):\"\"+e}function tn(e,t,i,a){if(!0===e)return;!1===e?e={}:\"string\"==typeof e&&(e={message:e});const{path:n,branch:o}=t,{type:s}=i,{refinement:r,message:l=\"Expected a value of type `\"+s+\"`\"+(r?\" with refinement `\"+r+\"`\":\"\")+\", but received: `\"+en(a)+\"`\"}=e;return{value:a,type:s,refinement:r,key:n[n.length-1],path:n,branch:o,...e,message:l}}function*an(e,t,i,a){(function(e){return Ja(e)&&\"function\"==typeof e[Symbol.iterator]})(e)||(e=[e]);for(const n of e){const e=tn(n,t,i,a);e&&(yield e)}}function*nn(e,t,i){void 0===i&&(i={});const{path:a=[],branch:n=[e],coerce:o=!1,mask:s=!1}=i,r={path:a,branch:n};if(o&&(e=t.coercer(e,r),s&&\"type\"!==t.type&&Ja(t.schema)&&Ja(e)&&!Array.isArray(e)))for(const i in e)void 0===t.schema[i]&&delete e[i];let l=!0;for(const i of t.validator(e,r))l=!1,yield[i,void 0];for(let[i,d,c]of t.entries(e,r)){const t=nn(d,c,{path:void 0===i?a:[...a,i],branch:void 0===i?n:[...n,d],coerce:o,mask:s});for(const a of t)a[0]?(l=!1,yield[a[0],void 0]):o&&(d=a[1],void 0===i?e=d:e instanceof Map?e.set(i,d):e instanceof Set?e.add(d):Ja(e)&&(e[i]=d))}if(l)for(const i of t.refiner(e,r))l=!1,yield[i,void 0];l&&(yield[void 0,e])}class on{constructor(e){this.TYPE=void 0,this.type=void 0,this.schema=void 0,this.coercer=void 0,this.validator=void 0,this.refiner=void 0,this.entries=void 0;const{type:t,schema:i,validator:a,refiner:n,coercer:o=(e=>e),entries:s=function*(){}}=e;this.type=t,this.schema=i,this.entries=s,this.coercer=o,this.validator=a?(e,t)=>an(a(e,t),t,this,e):()=>[],this.refiner=n?(e,t)=>an(n(e,t),t,this,e):()=>[]}assert(e){return sn(e,this)}create(e){return function(e,t){const i=ln(e,t,{coerce:!0});if(i[0])throw i[0];return i[1]}(e,this)}is(e){return rn(e,this)}mask(e){return function(e,t){const i=ln(e,t,{coerce:!0,mask:!0});if(i[0])throw i[0];return i[1]}(e,this)}validate(e,t){return void 0===t&&(t={}),ln(e,this,t)}}function sn(e,t){const i=ln(e,t);if(i[0])throw i[0]}function rn(e,t){return!ln(e,t)[0]}function ln(e,t,i){void 0===i&&(i={});const a=nn(e,t,i),n=function(e){const{done:t,value:i}=e.next();return t?void 0:i}(a);if(n[0]){const e=new Xa(n[0],(function*(){for(const e of a)e[0]&&(yield e[0])}));return[e,void 0]}return[void 0,n[1]]}function dn(){for(var e=arguments.length,t=new Array(e),i=0;i<e;i++)t[i]=arguments[i];const a=\"type\"===t[0].type,n=t.map((e=>e.schema)),o=Object.assign({},...n);return a?yn(o):fn(o)}function cn(e,t){return new on({type:e,schema:null,validator:t})}function un(){return cn(\"any\",(()=>!0))}function hn(e){return new on({type:\"array\",schema:e,*entries(t){if(e&&Array.isArray(t))for(const[i,a]of t.entries())yield[i,a,e]},coercer:e=>Array.isArray(e)?e.slice():e,validator:e=>Array.isArray(e)||\"Expected an array value, but received: \"+en(e)})}function pn(){return cn(\"boolean\",(e=>\"boolean\"==typeof e))}function vn(e){const t=en(e),i=typeof e;return new on({type:\"literal\",schema:\"string\"===i||\"number\"===i||\"boolean\"===i?e:null,validator:i=>i===e||\"Expected the literal `\"+t+\"`, but received: \"+en(i)})}function mn(){return cn(\"number\",(e=>\"number\"==typeof e&&!isNaN(e)||\"Expected a number, but received: \"+en(e)))}function fn(e){const t=e?Object.keys(e):[],i=cn(\"never\",(()=>!1));return new on({type:\"object\",schema:e||null,*entries(a){if(e&&Ja(a)){const n=new Set(Object.keys(a));for(const i of t)n.delete(i),yield[i,a[i],e[i]];for(const e of n)yield[e,a[e],i]}},validator:e=>Ja(e)||\"Expected an object, but received: \"+en(e),coercer:e=>Ja(e)?{...e}:e})}function gn(e){return new on({...e,validator:(t,i)=>void 0===t||e.validator(t,i),refiner:(t,i)=>void 0===t||e.refiner(t,i)})}function _n(){return cn(\"string\",(e=>\"string\"==typeof e||\"Expected a string, but received: \"+en(e)))}function yn(e){const t=Object.keys(e);return new on({type:\"type\",schema:e,*entries(i){if(Ja(i))for(const a of t)yield[a,i[a],e[a]]},validator:e=>Ja(e)||\"Expected an object, but received: \"+en(e)})}function kn(e){const t=e.map((e=>e.type)).join(\" | \");return new on({type:\"union\",schema:null,coercer(t,i){const a=e.find((e=>{const[i]=e.validate(t,{coerce:!0});return!i}))||cn(\"unknown\",(()=>!0));return a.coercer(t,i)},validator(i,a){const n=[];for(const t of e){const[...e]=nn(i,t,a),[o]=e;if(!o[0])return[];for(const[t]of e)t&&n.push(t)}return[\"Expected the value to satisfy a union of `\"+t+\"`, but received: \"+en(i),...n]}})}const bn=(e,t)=>{if(!(t instanceof Xa))return{warnings:[t.message],errors:void 0};const i=[],a=[];for(const n of t.failures())if(void 0===n.value)i.push(e.localize(\"ui.errors.config.key_missing\",\"key\",n.path.join(\".\")));else if(\"never\"===n.type)a.push(e.localize(\"ui.errors.config.key_not_expected\",\"key\",n.path.join(\".\")));else{if(\"union\"===n.type)continue;\"enums\"===n.type?a.push(e.localize(\"ui.errors.config.key_wrong_type\",\"key\",n.path.join(\".\"),\"type_correct\",n.message.replace(\"Expected \",\"\").split(\", \")[0],\"type_wrong\",JSON.stringify(n.value))):a.push(e.localize(\"ui.errors.config.key_wrong_type\",\"key\",n.path.join(\".\"),\"type_correct\",n.refinement||n.type,\"type_wrong\",JSON.stringify(n.value)))}return{warnings:a,errors:i}},xn=(e,t)=>e.callWS({type:\"validate_config\",...t}),$n=e=>e.substr(e.indexOf(\".\")+1),wn=fn({alias:gn(_n()),enabled:gn(pn())}),Cn=fn({entity_id:gn(kn([_n(),hn(_n())])),device_id:gn(kn([_n(),hn(_n())])),area_id:gn(kn([_n(),hn(_n())]))});dn(wn,fn({service:gn(_n()),service_template:gn(_n()),entity_id:gn(_n()),target:gn(Cn),data:gn(fn())}));const An=dn(wn,fn({service:vn(\"media_player.play_media\"),target:gn(fn({entity_id:gn(_n())})),entity_id:gn(_n()),data:fn({media_content_id:_n(),media_content_type:_n()}),metadata:fn()})),In=dn(wn,fn({service:vn(\"scene.turn_on\"),target:gn(fn({entity_id:gn(_n())})),entity_id:gn(_n()),metadata:fn()})),En=(t,i)=>e(t,\"hass-notification\",i),zn=e=>e.substr(0,e.indexOf(\".\")),Sn=e=>{return t=e.entity_id,void 0===(i=e.attributes).friendly_name?$n(t).replace(/_/g,\" \"):i.friendly_name||\"\";var t,i};class Ln extends HTMLElement{static get version(){return\"23.1.3\"}}customElements.define(\"vaadin-material-styles\",Ln);const Tn=e=>class extends e{static get properties(){return{theme:{type:String,reflectToAttribute:!0,observer:\"__deprecatedThemePropertyChanged\"},_theme:{type:String,readOnly:!0}}}__deprecatedThemePropertyChanged(e){this._set_theme(e)}},On=[];function Pn(e,i,a={}){var n;e&&(n=e,Nn(customElements.get(n))&&console.warn(`The custom element definition for \"${e}\"\\n      was finalized before a style module was registered.\\n      Make sure to add component specific style modules before\\n      importing the corresponding custom element.`)),i=function(e=[]){return[e].flat(1/0).filter((e=>e instanceof t||(console.warn(\"An item in styles is not of type CSSResult. Use `unsafeCSS` or `css`.\"),!1)))}(i),window.Vaadin&&window.Vaadin.styleModules?window.Vaadin.styleModules.registerStyles(e,i,a):On.push({themeFor:e,styles:i,include:a.include,moduleId:a.moduleId})}function Mn(){return window.Vaadin&&window.Vaadin.styleModules?window.Vaadin.styleModules.getAllThemes():On}function Fn(e=\"\"){let t=0;return 0===e.indexOf(\"lumo-\")||0===e.indexOf(\"material-\")?t=1:0===e.indexOf(\"vaadin-\")&&(t=2),t}function Dn(e){const t=[];return e.include&&[].concat(e.include).forEach((e=>{const i=Mn().find((t=>t.moduleId===e));i?t.push(...Dn(i),...i.styles):console.warn(`Included moduleId ${e} not found in style registry`)}),e.styles),t}function Bn(e){const t=`${e}-default-theme`,i=Mn().filter((i=>i.moduleId!==t&&function(e,t){return(e||\"\").split(\" \").some((e=>new RegExp(`^${e.split(\"*\").join(\".*\")}$`).test(t)))}(i.themeFor,e))).map((e=>({...e,styles:[...Dn(e),...e.styles],includePriority:Fn(e.moduleId)}))).sort(((e,t)=>t.includePriority-e.includePriority));return i.length>0?i:Mn().filter((e=>e.moduleId===t))}function Nn(e){return e&&Object.prototype.hasOwnProperty.call(e,\"__themes\")}const Vn=e=>class extends(Tn(e)){static finalize(){if(super.finalize(),this.elementStyles)return;const e=this.prototype._template;e&&!Nn(this)&&function(e,t){const i=document.createElement(\"style\");i.innerHTML=e.map((e=>e.cssText)).join(\"\\n\"),t.content.appendChild(i)}(this.getStylesForThis(),e)}static finalizeStyles(e){const t=this.getStylesForThis();return e?[...super.finalizeStyles(e),...t]:t}static getStylesForThis(){const e=Object.getPrototypeOf(this.prototype),t=(e?e.constructor.__themes:[])||[];this.__themes=[...t,...Bn(this.is)];const i=this.__themes.flatMap((e=>e.styles));return i.filter(((e,t)=>t===i.lastIndexOf(e)))}};Pn(\"\",i`\n  :host {\n    /* Text colors */\n    --material-body-text-color: var(--light-theme-text-color, rgba(0, 0, 0, 0.87));\n    --material-secondary-text-color: var(--light-theme-secondary-color, rgba(0, 0, 0, 0.54));\n    --material-disabled-text-color: var(--light-theme-disabled-color, rgba(0, 0, 0, 0.38));\n\n    /* Primary colors */\n    --material-primary-color: var(--primary-color, #6200ee);\n    --material-primary-contrast-color: var(--dark-theme-base-color, #fff);\n    --material-primary-text-color: var(--material-primary-color);\n\n    /* Error colors */\n    --material-error-color: var(--error-color, #b00020);\n    --material-error-text-color: var(--material-error-color);\n\n    /* Background colors */\n    --material-background-color: var(--light-theme-background-color, #fff);\n    --material-secondary-background-color: var(--light-theme-secondary-background-color, #f5f5f5);\n    --material-disabled-color: rgba(0, 0, 0, 0.26);\n\n    /* Divider colors */\n    --material-divider-color: rgba(0, 0, 0, 0.12);\n\n    /* Undocumented internal properties (prefixed with three dashes) */\n\n    /* Text field tweaks */\n    --_material-text-field-input-line-background-color: initial;\n    --_material-text-field-input-line-opacity: initial;\n    --_material-text-field-input-line-hover-opacity: initial;\n    --_material-text-field-focused-label-opacity: initial;\n\n    /* Button tweaks */\n    --_material-button-raised-background-color: initial;\n    --_material-button-outline-color: initial;\n\n    /* Grid tweaks */\n    --_material-grid-row-hover-background-color: initial;\n\n    /* Split layout tweaks */\n    --_material-split-layout-splitter-background-color: initial;\n\n    background-color: var(--material-background-color);\n    color: var(--material-body-text-color);\n  }\n\n  [theme~='dark'] {\n    /* Text colors */\n    --material-body-text-color: var(--dark-theme-text-color, rgba(255, 255, 255, 1));\n    --material-secondary-text-color: var(--dark-theme-secondary-color, rgba(255, 255, 255, 0.7));\n    --material-disabled-text-color: var(--dark-theme-disabled-color, rgba(255, 255, 255, 0.5));\n\n    /* Primary colors */\n    --material-primary-color: var(--light-primary-color, #7e3ff2);\n    --material-primary-text-color: #b794f6;\n\n    /* Error colors */\n    --material-error-color: var(--error-color, #de2839);\n    --material-error-text-color: var(--material-error-color);\n\n    /* Background colors */\n    --material-background-color: var(--dark-theme-background-color, #303030);\n    --material-secondary-background-color: var(--dark-theme-secondary-background-color, #3b3b3b);\n    --material-disabled-color: rgba(255, 255, 255, 0.3);\n\n    /* Divider colors */\n    --material-divider-color: rgba(255, 255, 255, 0.12);\n\n    /* Undocumented internal properties (prefixed with three dashes) */\n\n    /* Text field tweaks */\n    --_material-text-field-input-line-background-color: #fff;\n    --_material-text-field-input-line-opacity: 0.7;\n    --_material-text-field-input-line-hover-opacity: 1;\n    --_material-text-field-focused-label-opacity: 1;\n\n    /* Button tweaks */\n    --_material-button-raised-background-color: rgba(255, 255, 255, 0.08);\n    --_material-button-outline-color: rgba(255, 255, 255, 0.2);\n\n    /* Grid tweaks */\n    --_material-grid-row-hover-background-color: rgba(255, 255, 255, 0.08);\n    --_material-grid-row-selected-overlay-opacity: 0.16;\n\n    /* Split layout tweaks */\n    --_material-split-layout-splitter-background-color: rgba(255, 255, 255, 0.8);\n\n    background-color: var(--material-background-color);\n    color: var(--material-body-text-color);\n  }\n\n  a {\n    color: inherit;\n  }\n`,{moduleId:\"material-color-light\"});Pn(\"\",i`\n  :host {\n    /* Text colors */\n    --material-body-text-color: var(--dark-theme-text-color, rgba(255, 255, 255, 1));\n    --material-secondary-text-color: var(--dark-theme-secondary-color, rgba(255, 255, 255, 0.7));\n    --material-disabled-text-color: var(--dark-theme-disabled-color, rgba(255, 255, 255, 0.5));\n\n    /* Primary colors */\n    --material-primary-color: var(--light-primary-color, #7e3ff2);\n    --material-primary-text-color: #b794f6;\n\n    /* Error colors */\n    --material-error-color: var(--error-color, #de2839);\n    --material-error-text-color: var(--material-error-color);\n\n    /* Background colors */\n    --material-background-color: var(--dark-theme-background-color, #303030);\n    --material-secondary-background-color: var(--dark-theme-secondary-background-color, #3b3b3b);\n    --material-disabled-color: rgba(255, 255, 255, 0.3);\n\n    /* Divider colors */\n    --material-divider-color: rgba(255, 255, 255, 0.12);\n\n    /* Undocumented internal properties (prefixed with three dashes) */\n\n    /* Text field tweaks */\n    --_material-text-field-input-line-background-color: #fff;\n    --_material-text-field-input-line-opacity: 0.7;\n    --_material-text-field-input-line-hover-opacity: 1;\n    --_material-text-field-focused-label-opacity: 1;\n\n    /* Button tweaks */\n    --_material-button-raised-background-color: rgba(255, 255, 255, 0.08);\n    --_material-button-outline-color: rgba(255, 255, 255, 0.2);\n\n    /* Grid tweaks */\n    --_material-grid-row-hover-background-color: rgba(255, 255, 255, 0.08);\n    --_material-grid-row-selected-overlay-opacity: 0.16;\n\n    /* Split layout tweaks */\n    --_material-split-layout-splitter-background-color: rgba(255, 255, 255, 0.8);\n\n    background-color: var(--material-background-color);\n    color: var(--material-body-text-color);\n  }\n`,{moduleId:\"material-color-dark\"});const jn=i`\n  :host {\n    /* Text colors */\n    --material-body-text-color: var(--light-theme-text-color, rgba(0, 0, 0, 0.87));\n    --material-secondary-text-color: var(--light-theme-secondary-color, rgba(0, 0, 0, 0.54));\n    --material-disabled-text-color: var(--light-theme-disabled-color, rgba(0, 0, 0, 0.38));\n\n    /* Primary colors */\n    --material-primary-color: var(--primary-color, #6200ee);\n    --material-primary-contrast-color: var(--dark-theme-base-color, #fff);\n    --material-primary-text-color: var(--material-primary-color);\n\n    /* Error colors */\n    --material-error-color: var(--error-color, #b00020);\n    --material-error-text-color: var(--material-error-color);\n\n    /* Background colors */\n    --material-background-color: var(--light-theme-background-color, #fff);\n    --material-secondary-background-color: var(--light-theme-secondary-background-color, #f5f5f5);\n    --material-disabled-color: rgba(0, 0, 0, 0.26);\n\n    /* Divider colors */\n    --material-divider-color: rgba(0, 0, 0, 0.12);\n  }\n`,qn=document.createElement(\"template\");qn.innerHTML=`<style>${jn.toString().replace(\":host\",\"html\")}</style>`,document.head.appendChild(qn.content);const Rn=i`\n  :host {\n    /* Font family */\n    --material-font-family: 'Roboto', sans-serif;\n\n    /* Font sizes */\n    --material-h1-font-size: 6rem;\n    --material-h2-font-size: 3.75rem;\n    --material-h3-font-size: 3rem;\n    --material-h4-font-size: 2.125rem;\n    --material-h5-font-size: 1.5rem;\n    --material-h6-font-size: 1.25rem;\n    --material-body-font-size: 1rem;\n    --material-small-font-size: 0.875rem;\n    --material-button-font-size: 0.875rem;\n    --material-caption-font-size: 0.75rem;\n\n    /* Icon size */\n    --material-icon-font-size: 20px;\n  }\n`;Pn(\"\",i`\n  body,\n  :host {\n    font-family: var(--material-font-family);\n    font-size: var(--material-body-font-size);\n    line-height: 1.4;\n    -webkit-text-size-adjust: 100%;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n  }\n\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    color: inherit;\n    line-height: 1.1;\n    margin-top: 1.5em;\n  }\n\n  h1 {\n    font-size: var(--material-h3-font-size);\n    font-weight: 300;\n    letter-spacing: -0.015em;\n    margin-bottom: 1em;\n    text-indent: -0.07em;\n  }\n\n  h2 {\n    font-size: var(--material-h4-font-size);\n    font-weight: 300;\n    letter-spacing: -0.01em;\n    margin-bottom: 0.75em;\n    text-indent: -0.07em;\n  }\n\n  h3 {\n    font-size: var(--material-h5-font-size);\n    font-weight: 400;\n    margin-bottom: 0.75em;\n    text-indent: -0.05em;\n  }\n\n  h4 {\n    font-size: var(--material-h6-font-size);\n    font-weight: 400;\n    letter-spacing: 0.01em;\n    margin-bottom: 0.75em;\n    text-indent: -0.05em;\n  }\n\n  h5 {\n    font-size: var(--material-body-font-size);\n    font-weight: 500;\n    margin-bottom: 0.5em;\n    text-indent: -0.025em;\n  }\n\n  h6 {\n    font-size: var(--material-small-font-size);\n    font-weight: 500;\n    letter-spacing: 0.01em;\n    margin-bottom: 0.25em;\n    text-indent: -0.025em;\n  }\n\n  a,\n  b,\n  strong {\n    font-weight: 500;\n  }\n`,{moduleId:\"material-typography\"});const Un=document.createElement(\"template\");if(Un.innerHTML=`<style>${Rn.toString().replace(\":host\",\"html\")}</style>`,document.head.appendChild(Un.content),!window.polymerSkipLoadingFontRoboto){const e=\"https://fonts.googleapis.com/css?family=Roboto+Mono:400,700|Roboto:400,300,300italic,400italic,500,500italic,700,700italic\",t=document.createElement(\"link\");t.rel=\"stylesheet\",t.type=\"text/css\",t.crossOrigin=\"anonymous\",t.href=e,document.head.appendChild(t)}const Hn=i`\n  /* prettier-ignore */\n  :host {\n    /* from http://codepen.io/shyndman/pen/c5394ddf2e8b2a5c9185904b57421cdb */\n    --material-shadow-elevation-2dp: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);\n    --material-shadow-elevation-3dp: 0 3px 4px 0 rgba(0, 0, 0, 0.14), 0 1px 8px 0 rgba(0, 0, 0, 0.12), 0 3px 3px -2px rgba(0, 0, 0, 0.4);\n    --material-shadow-elevation-4dp: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.4);\n    --material-shadow-elevation-6dp: 0 6px 10px 0 rgba(0, 0, 0, 0.14), 0 1px 18px 0 rgba(0, 0, 0, 0.12), 0 3px 5px -1px rgba(0, 0, 0, 0.4);\n    --material-shadow-elevation-8dp: 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12), 0 5px 5px -3px rgba(0, 0, 0, 0.4);\n    --material-shadow-elevation-12dp: 0 12px 16px 1px rgba(0, 0, 0, 0.14), 0 4px 22px 3px rgba(0, 0, 0, 0.12), 0 6px 7px -4px rgba(0, 0, 0, 0.4);\n    --material-shadow-elevation-16dp: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.4);\n    --material-shadow-elevation-24dp: 0 24px 38px 3px rgba(0, 0, 0, 0.14), 0 9px 46px 8px rgba(0, 0, 0, 0.12), 0 11px 15px -7px rgba(0, 0, 0, 0.4);\n  }\n`,Gn=document.createElement(\"template\");Gn.innerHTML=`<style>${Hn.toString().replace(\":host\",\"html\")}</style>`,document.head.appendChild(Gn.content);const Wn=i`\n  :host {\n    top: 16px;\n    right: 16px;\n    /* TODO (@jouni): remove unnecessary multiplication after https://github.com/vaadin/vaadin-overlay/issues/90 is fixed */\n    bottom: calc(1px * var(--vaadin-overlay-viewport-bottom) + 16px);\n    left: 16px;\n  }\n\n  [part='overlay'] {\n    background-color: var(--material-background-color);\n    border-radius: 4px;\n    box-shadow: var(--material-shadow-elevation-4dp);\n    color: var(--material-body-text-color);\n    font-family: var(--material-font-family);\n    font-size: var(--material-body-font-size);\n    font-weight: 400;\n  }\n\n  [part='content'] {\n    padding: 8px 0;\n  }\n\n  [part='backdrop'] {\n    opacity: 0.2;\n    animation: 0.2s vaadin-overlay-backdrop-enter;\n    will-change: opacity;\n  }\n\n  @keyframes vaadin-overlay-backdrop-enter {\n    0% {\n      opacity: 0;\n    }\n  }\n`;Pn(\"\",Wn,{moduleId:\"material-overlay\"}),Pn(\"vaadin-overlay\",Wn,{moduleId:\"material-vaadin-overlay\"});const Kn=e=>e.test(navigator.userAgent),Yn=e=>e.test(navigator.platform);Kn(/Android/),Kn(/Chrome/)&&/Google Inc/.test(navigator.vendor),Kn(/Firefox/);const Zn=Yn(/^iPad/)||Yn(/^Mac/)&&navigator.maxTouchPoints>1,Qn=Yn(/^iPhone/)||Zn,Xn=Kn(/^((?!chrome|android).)*safari/i),Jn=(()=>{try{return document.createEvent(\"TouchEvent\"),!0}catch(e){return!1}})(),eo=a((e=>class extends e{constructor(){super(),this.__controllers=new Set}connectedCallback(){super.connectedCallback(),this.__controllers.forEach((e=>{e.hostConnected&&e.hostConnected()}))}disconnectedCallback(){super.disconnectedCallback(),this.__controllers.forEach((e=>{e.hostDisconnected&&e.hostDisconnected()}))}addController(e){this.__controllers.add(e),void 0!==this.$&&this.isConnected&&e.hostConnected&&e.hostConnected()}removeController(e){this.__controllers.delete(e)}}));class to{static detectScrollType(){const e=document.createElement(\"div\");e.textContent=\"ABCD\",e.dir=\"rtl\",e.style.fontSize=\"14px\",e.style.width=\"4px\",e.style.height=\"1px\",e.style.position=\"absolute\",e.style.top=\"-1000px\",e.style.overflow=\"scroll\",document.body.appendChild(e);let t=\"reverse\";return e.scrollLeft>0?t=\"default\":(e.scrollLeft=2,e.scrollLeft<2&&(t=\"negative\")),document.body.removeChild(e),t}static getNormalizedScrollLeft(e,t,i){const{scrollLeft:a}=i;if(\"rtl\"!==t||!e)return a;switch(e){case\"negative\":return i.scrollWidth-i.clientWidth+a;case\"reverse\":return i.scrollWidth-i.clientWidth-a;default:return a}}static setNormalizedScrollLeft(e,t,i,a){if(\"rtl\"===t&&e)switch(e){case\"negative\":i.scrollLeft=i.clientWidth-i.scrollWidth+a;break;case\"reverse\":i.scrollLeft=i.scrollWidth-i.clientWidth-a;break;default:i.scrollLeft=a}else i.scrollLeft=a}}const io=[];let ao;function no(e,t,i=e.getAttribute(\"dir\")){t?e.setAttribute(\"dir\",t):null!=i&&e.removeAttribute(\"dir\")}function oo(){return document.documentElement.getAttribute(\"dir\")}new MutationObserver((function(){const e=oo();io.forEach((t=>{no(t,e)}))})).observe(document.documentElement,{attributes:!0,attributeFilter:[\"dir\"]});const so=e=>class extends e{static get properties(){return{dir:{type:String,value:\"\",reflectToAttribute:!0,converter:{fromAttribute:e=>e||\"\",toAttribute:e=>\"\"===e?null:e}}}}static finalize(){super.finalize(),ao||(ao=to.detectScrollType())}connectedCallback(){super.connectedCallback(),this.hasAttribute(\"dir\")||(this.__subscribe(),no(this,oo(),null))}attributeChangedCallback(e,t,i){if(super.attributeChangedCallback(e,t,i),\"dir\"!==e)return;const a=oo(),n=i===a&&-1===io.indexOf(this),o=!i&&t&&-1===io.indexOf(this),s=i!==a&&t===a;n||o?(this.__subscribe(),no(this,a,i)):s&&this.__subscribe(!1)}disconnectedCallback(){super.disconnectedCallback(),this.__subscribe(!1),this.removeAttribute(\"dir\")}_valueToNodeAttribute(e,t,i){(\"dir\"!==i||\"\"!==t||e.hasAttribute(\"dir\"))&&super._valueToNodeAttribute(e,t,i)}_attributeToProperty(e,t,i){\"dir\"!==e||t?super._attributeToProperty(e,t,i):this.dir=\"\"}__subscribe(e=!0){e?io.includes(this)||io.push(this):io.includes(this)&&io.splice(io.indexOf(this),1)}__getNormalizedScrollLeft(e){return to.getNormalizedScrollLeft(ao,this.getAttribute(\"dir\")||\"ltr\",e)}__setNormalizedScrollLeft(e,t){return to.setNormalizedScrollLeft(ao,this.getAttribute(\"dir\")||\"ltr\",e,t)}};function ro(e,t){const i=Math.max(e.tabIndex,0),a=Math.max(t.tabIndex,0);return 0===i||0===a?a>i:i>a}function lo(e){const t=e.length;if(t<2)return e;const i=Math.ceil(t/2);return function(e,t){const i=[];for(;e.length>0&&t.length>0;)ro(e[0],t[0])?i.push(t.shift()):i.push(e.shift());return i.concat(e,t)}(lo(e.slice(0,i)),lo(e.slice(i)))}function co(e,t){if(e.nodeType!==Node.ELEMENT_NODE||function(e){const t=e.style;if(\"hidden\"===t.visibility||\"none\"===t.display)return!0;const i=window.getComputedStyle(e);return\"hidden\"===i.visibility||\"none\"===i.display}(e))return!1;const i=e,a=function(e){if(!function(e){return!e.matches('[tabindex=\"-1\"]')&&(e.matches(\"input, select, textarea, button, object\")?e.matches(\":not([disabled])\"):e.matches(\"a[href], area[href], iframe, [tabindex], [contentEditable]\"))}(e))return-1;const t=e.getAttribute(\"tabindex\")||0;return Number(t)}(i);let n=a>0;a>=0&&t.push(i);let o=[];return o=\"slot\"===i.localName?i.assignedNodes({flatten:!0}):(i.shadowRoot||i).children,[...o].forEach((e=>{n=co(e,t)||n})),n}function uo(e){return e.getRootNode().activeElement===e}const ho=[];class po{constructor(e){this.host=e,this.__trapNode=null,this.__onKeyDown=this.__onKeyDown.bind(this)}hostConnected(){document.addEventListener(\"keydown\",this.__onKeyDown)}hostDisconnected(){document.removeEventListener(\"keydown\",this.__onKeyDown)}trapFocus(e){if(this.__trapNode=e,0===this.__focusableElements.length)throw this.__trapNode=null,new Error(\"The trap node should have at least one focusable descendant or be focusable itself.\");ho.push(this),-1===this.__focusedElementIndex&&this.__focusableElements[0].focus()}releaseFocus(){this.__trapNode=null,ho.pop()}__onKeyDown(e){if(this.__trapNode&&this===Array.from(ho).pop()&&\"Tab\"===e.key){e.preventDefault();const t=e.shiftKey;this.__focusNextElement(t)}}__focusNextElement(e=!1){const t=this.__focusableElements,i=e?-1:1,a=this.__focusedElementIndex;t[(t.length+a+i)%t.length].focus()}get __focusableElements(){return function(e){const t=[];return co(e,t)?lo(t):t}(this.__trapNode)}get __focusedElementIndex(){const e=this.__focusableElements;return e.indexOf(e.filter(uo).pop())}}class vo extends(Vn(so(eo(n)))){static get template(){return o`\n      <style>\n        :host {\n          z-index: 200;\n          position: fixed;\n\n          /* Despite of what the names say, <vaadin-overlay> is just a container\n          for position/sizing/alignment. The actual overlay is the overlay part. */\n\n          /* Default position constraints: the entire viewport. Note: themes can\n          override this to introduce gaps between the overlay and the viewport. */\n          top: 0;\n          right: 0;\n          bottom: var(--vaadin-overlay-viewport-bottom);\n          left: 0;\n\n          /* Use flexbox alignment for the overlay part. */\n          display: flex;\n          flex-direction: column; /* makes dropdowns sizing easier */\n          /* Align to center by default. */\n          align-items: center;\n          justify-content: center;\n\n          /* Allow centering when max-width/max-height applies. */\n          margin: auto;\n\n          /* The host is not clickable, only the overlay part is. */\n          pointer-events: none;\n\n          /* Remove tap highlight on touch devices. */\n          -webkit-tap-highlight-color: transparent;\n\n          /* CSS API for host */\n          --vaadin-overlay-viewport-bottom: 0;\n        }\n\n        :host([hidden]),\n        :host(:not([opened]):not([closing])) {\n          display: none !important;\n        }\n\n        [part='overlay'] {\n          -webkit-overflow-scrolling: touch;\n          overflow: auto;\n          pointer-events: auto;\n\n          /* Prevent overflowing the host in MSIE 11 */\n          max-width: 100%;\n          box-sizing: border-box;\n\n          -webkit-tap-highlight-color: initial; /* reenable tap highlight inside */\n        }\n\n        [part='backdrop'] {\n          z-index: -1;\n          content: '';\n          background: rgba(0, 0, 0, 0.5);\n          position: fixed;\n          top: 0;\n          left: 0;\n          bottom: 0;\n          right: 0;\n          pointer-events: auto;\n        }\n      </style>\n\n      <div id=\"backdrop\" part=\"backdrop\" hidden$=\"[[!withBackdrop]]\"></div>\n      <div part=\"overlay\" id=\"overlay\" tabindex=\"0\">\n        <div part=\"content\" id=\"content\">\n          <slot></slot>\n        </div>\n      </div>\n    `}static get is(){return\"vaadin-overlay\"}static get properties(){return{opened:{type:Boolean,notify:!0,observer:\"_openedChanged\",reflectToAttribute:!0},owner:Element,renderer:Function,template:{type:Object,notify:!0},content:{type:Object,notify:!0},withBackdrop:{type:Boolean,value:!1,reflectToAttribute:!0},model:Object,modeless:{type:Boolean,value:!1,reflectToAttribute:!0,observer:\"_modelessChanged\"},hidden:{type:Boolean,reflectToAttribute:!0,observer:\"_hiddenChanged\"},focusTrap:{type:Boolean,value:!1},restoreFocusOnClose:{type:Boolean,value:!1},restoreFocusNode:{type:HTMLElement},_mouseDownInside:{type:Boolean},_mouseUpInside:{type:Boolean},_instance:{type:Object},_originalContentPart:Object,_contentNodes:Array,_oldOwner:Element,_oldModel:Object,_oldTemplate:Object,_oldRenderer:Object,_oldOpened:Boolean}}static get observers(){return[\"_templateOrRendererChanged(template, renderer, owner, model, opened)\"]}constructor(){super(),this._boundMouseDownListener=this._mouseDownListener.bind(this),this._boundMouseUpListener=this._mouseUpListener.bind(this),this._boundOutsideClickListener=this._outsideClickListener.bind(this),this._boundKeydownListener=this._keydownListener.bind(this),this._observer=new s(this,(e=>{this._setTemplateFromNodes(e.addedNodes)})),this._boundIronOverlayCanceledListener=this._ironOverlayCanceled.bind(this),Qn&&(this._boundIosResizeListener=()=>this._detectIosNavbar()),this.__focusTrapController=new po(this)}ready(){super.ready(),this._observer.flush(),this.addEventListener(\"click\",(()=>{})),this.$.backdrop.addEventListener(\"click\",(()=>{})),this.addController(this.__focusTrapController)}_detectIosNavbar(){if(!this.opened)return;const e=window.innerHeight,t=window.innerWidth>e,i=document.documentElement.clientHeight;t&&i>e?this.style.setProperty(\"--vaadin-overlay-viewport-bottom\",i-e+\"px\"):this.style.setProperty(\"--vaadin-overlay-viewport-bottom\",\"0\")}_setTemplateFromNodes(e){this.template=e.filter((e=>e.localName&&\"template\"===e.localName))[0]||this.template}close(e){const t=new CustomEvent(\"vaadin-overlay-close\",{bubbles:!0,cancelable:!0,detail:{sourceEvent:e}});this.dispatchEvent(t),t.defaultPrevented||(this.opened=!1)}connectedCallback(){super.connectedCallback(),this._boundIosResizeListener&&(this._detectIosNavbar(),window.addEventListener(\"resize\",this._boundIosResizeListener))}disconnectedCallback(){super.disconnectedCallback(),this._boundIosResizeListener&&window.removeEventListener(\"resize\",this._boundIosResizeListener)}requestContentUpdate(){this.renderer&&this.renderer.call(this.owner,this.content,this.owner,this.model)}_ironOverlayCanceled(e){e.preventDefault()}_mouseDownListener(e){this._mouseDownInside=e.composedPath().indexOf(this.$.overlay)>=0}_mouseUpListener(e){this._mouseUpInside=e.composedPath().indexOf(this.$.overlay)>=0}_outsideClickListener(e){if(e.composedPath().includes(this.$.overlay)||this._mouseDownInside||this._mouseUpInside)return this._mouseDownInside=!1,void(this._mouseUpInside=!1);if(!this._last)return;const t=new CustomEvent(\"vaadin-overlay-outside-click\",{bubbles:!0,cancelable:!0,detail:{sourceEvent:e}});this.dispatchEvent(t),this.opened&&!t.defaultPrevented&&this.close(e)}_keydownListener(e){if(this._last&&(!this.modeless||e.composedPath().includes(this.$.overlay))&&\"Escape\"===e.key){const t=new CustomEvent(\"vaadin-overlay-escape-press\",{bubbles:!0,cancelable:!0,detail:{sourceEvent:e}});this.dispatchEvent(t),this.opened&&!t.defaultPrevented&&this.close(e)}}_ensureTemplatized(){this._setTemplateFromNodes(Array.from(this.children))}_openedChanged(e,t){var i,a,n;this._instance||this._ensureTemplatized(),e?(this.__restoreFocusNode=this._getActiveElement(),this._animatedOpening(),i=this,a=()=>{this.focusTrap&&this.__focusTrapController.trapFocus(this.$.overlay);const e=new CustomEvent(\"vaadin-overlay-open\",{bubbles:!0});this.dispatchEvent(e)},Ua||Wa(),Ga.push([i,a,n]),document.addEventListener(\"keydown\",this._boundKeydownListener),this.modeless||this._addGlobalListeners()):t&&(this.focusTrap&&this.__focusTrapController.releaseFocus(),this._animatedClosing(),document.removeEventListener(\"keydown\",this._boundKeydownListener),this.modeless||this._removeGlobalListeners())}_hiddenChanged(e){e&&this.hasAttribute(\"closing\")&&this._flushAnimation(\"closing\")}_shouldAnimate(){const e=getComputedStyle(this).getPropertyValue(\"animation-name\");return!(\"none\"===getComputedStyle(this).getPropertyValue(\"display\"))&&e&&\"none\"!==e}_enqueueAnimation(e,t){const i=`__${e}Handler`,a=e=>{e&&e.target!==this||(t(),this.removeEventListener(\"animationend\",a),delete this[i])};this[i]=a,this.addEventListener(\"animationend\",a)}_flushAnimation(e){const t=`__${e}Handler`;\"function\"==typeof this[t]&&this[t]()}_animatedOpening(){this.parentNode===document.body&&this.hasAttribute(\"closing\")&&this._flushAnimation(\"closing\"),this._attachOverlay(),this.modeless||this._enterModalState(),this.setAttribute(\"opening\",\"\"),this._shouldAnimate()?this._enqueueAnimation(\"opening\",(()=>{this._finishOpening()})):this._finishOpening()}_attachOverlay(){this._placeholder=document.createComment(\"vaadin-overlay-placeholder\"),this.parentNode.insertBefore(this._placeholder,this),document.body.appendChild(this),this.bringToFront()}_finishOpening(){document.addEventListener(\"iron-overlay-canceled\",this._boundIronOverlayCanceledListener),this.removeAttribute(\"opening\")}_finishClosing(){document.removeEventListener(\"iron-overlay-canceled\",this._boundIronOverlayCanceledListener),this._detachOverlay(),this.$.overlay.style.removeProperty(\"pointer-events\"),this.removeAttribute(\"closing\")}_animatedClosing(){if(this.hasAttribute(\"opening\")&&this._flushAnimation(\"opening\"),this._placeholder){this._exitModalState();const e=this.restoreFocusNode||this.__restoreFocusNode;if(this.restoreFocusOnClose&&e){const t=this._getActiveElement();(t===document.body||this._deepContains(t))&&setTimeout((()=>e.focus())),this.__restoreFocusNode=null}this.setAttribute(\"closing\",\"\"),this.dispatchEvent(new CustomEvent(\"vaadin-overlay-closing\")),this._shouldAnimate()?this._enqueueAnimation(\"closing\",(()=>{this._finishClosing()})):this._finishClosing()}}_detachOverlay(){this._placeholder.parentNode.insertBefore(this,this._placeholder),this._placeholder.parentNode.removeChild(this._placeholder)}static get __attachedInstances(){return Array.from(document.body.children).filter((e=>e instanceof vo&&!e.hasAttribute(\"closing\"))).sort(((e,t)=>e.__zIndex-t.__zIndex||0))}get _last(){return this===vo.__attachedInstances.pop()}_modelessChanged(e){e?(this._removeGlobalListeners(),this._exitModalState()):this.opened&&(this._addGlobalListeners(),this._enterModalState())}_addGlobalListeners(){document.addEventListener(\"mousedown\",this._boundMouseDownListener),document.addEventListener(\"mouseup\",this._boundMouseUpListener),document.documentElement.addEventListener(\"click\",this._boundOutsideClickListener,!0)}_enterModalState(){\"none\"!==document.body.style.pointerEvents&&(this._previousDocumentPointerEvents=document.body.style.pointerEvents,document.body.style.pointerEvents=\"none\"),vo.__attachedInstances.forEach((e=>{e!==this&&(e.shadowRoot.querySelector('[part=\"overlay\"]').style.pointerEvents=\"none\")}))}_removeGlobalListeners(){document.removeEventListener(\"mousedown\",this._boundMouseDownListener),document.removeEventListener(\"mouseup\",this._boundMouseUpListener),document.documentElement.removeEventListener(\"click\",this._boundOutsideClickListener,!0)}_exitModalState(){void 0!==this._previousDocumentPointerEvents&&(document.body.style.pointerEvents=this._previousDocumentPointerEvents,delete this._previousDocumentPointerEvents);const e=vo.__attachedInstances;let t;for(;(t=e.pop())&&(t===this||(t.shadowRoot.querySelector('[part=\"overlay\"]').style.removeProperty(\"pointer-events\"),t.modeless)););}_removeOldContent(){this.content&&this._contentNodes&&(this._observer.disconnect(),this._contentNodes.forEach((e=>{e.parentNode===this.content&&this.content.removeChild(e)})),this._originalContentPart&&(this.$.content.parentNode.replaceChild(this._originalContentPart,this.$.content),this.$.content=this._originalContentPart,this._originalContentPart=void 0),this._observer.connect(),this._contentNodes=void 0,this.content=void 0)}_stampOverlayTemplate(e){this._removeOldContent(),e._Templatizer||(e._Templatizer=r(e,this,{forwardHostProp(e,t){this._instance&&this._instance.forwardHostProp(e,t)}})),this._instance=new e._Templatizer({}),this._contentNodes=Array.from(this._instance.root.childNodes);const t=e._templateRoot||(e._templateRoot=e.getRootNode());if(t!==document){this.$.content.shadowRoot||this.$.content.attachShadow({mode:\"open\"});let e=Array.from(t.querySelectorAll(\"style\")).reduce(((e,t)=>e+t.textContent),\"\");if(e=e.replace(/:host/g,\":host-nomatch\"),e){const t=document.createElement(\"style\");t.textContent=e,this.$.content.shadowRoot.appendChild(t),this._contentNodes.unshift(t)}this.$.content.shadowRoot.appendChild(this._instance.root),this.content=this.$.content.shadowRoot}else this.appendChild(this._instance.root),this.content=this}_removeNewRendererOrTemplate(e,t,i,a){e!==t?this.template=void 0:i!==a&&(this.renderer=void 0)}_templateOrRendererChanged(e,t,i,a,n){if(e&&t)throw this._removeNewRendererOrTemplate(e,this._oldTemplate,t,this._oldRenderer),new Error(\"You should only use either a renderer or a template for overlay content\");const o=this._oldOwner!==i||this._oldModel!==a;this._oldModel=a,this._oldOwner=i;const s=this._oldTemplate!==e;this._oldTemplate=e;const r=this._oldRenderer!==t;this._oldRenderer=t;const l=this._oldOpened!==n;this._oldOpened=n,r&&(this.content=this,this.content.innerHTML=\"\",delete this.content._$litPart$),e&&s?this._stampOverlayTemplate(e):t&&(r||l||o)&&n&&this.requestContentUpdate()}_getActiveElement(){let e=document.activeElement||document.body;for(;e.shadowRoot&&e.shadowRoot.activeElement;)e=e.shadowRoot.activeElement;return e}_deepContains(e){if(this.contains(e))return!0;let t=e;const i=e.ownerDocument;for(;t&&t!==i&&t!==this;)t=t.parentNode||t.host;return t===this}bringToFront(){let e=\"\";const t=vo.__attachedInstances.filter((e=>e!==this)).pop();if(t){e=t.__zIndex+1}this.style.zIndex=e,this.__zIndex=e||parseFloat(getComputedStyle(this).zIndex)}}customElements.define(vo.is,vo);const mo=Wn;Pn(\"\",mo,{moduleId:\"material-menu-overlay\"});Pn(\"vaadin-combo-box-overlay\",[mo,i`\n  :host {\n    --_vaadin-combo-box-items-container-border-width: 8px 0;\n    --_vaadin-combo-box-items-container-border-style: solid;\n    --_vaadin-combo-box-items-container-border-color: transparent;\n  }\n\n  [part='overlay'] {\n    position: relative;\n    overflow: visible;\n    border-top-left-radius: 0;\n    border-top-right-radius: 0;\n  }\n\n  [part='content'] {\n    padding: 0;\n  }\n\n  :host([loading]) [part='loader'] {\n    height: 2px;\n    position: absolute;\n    z-index: 1;\n    top: -2px;\n    left: 0;\n    right: 0;\n    background: var(--material-background-color)\n      linear-gradient(\n        90deg,\n        transparent 0%,\n        transparent 20%,\n        var(--material-primary-color) 20%,\n        var(--material-primary-color) 40%,\n        transparent 40%,\n        transparent 60%,\n        var(--material-primary-color) 60%,\n        var(--material-primary-color) 80%,\n        transparent 80%,\n        transparent 100%\n      )\n      0 0 / 400% 100% repeat-x;\n    opacity: 0;\n    animation: 3s linear infinite material-combo-box-loader-progress, 0.3s 0.1s both material-combo-box-loader-fade-in;\n  }\n\n  [part='loader']::before {\n    content: '';\n    display: block;\n    height: 100%;\n    opacity: 0.16;\n    background: var(--material-primary-color);\n  }\n\n  @keyframes material-combo-box-loader-fade-in {\n    0% {\n      opacity: 0;\n    }\n\n    100% {\n      opacity: 1;\n    }\n  }\n\n  @keyframes material-combo-box-loader-progress {\n    0% {\n      background-position: 0 0;\n      background-size: 300% 100%;\n    }\n\n    33% {\n      background-position: -100% 0;\n      background-size: 400% 100%;\n    }\n\n    67% {\n      background-position: -200% 0;\n      background-size: 250% 100%;\n    }\n\n    100% {\n      background-position: -300% 0;\n      background-size: 300% 100%;\n    }\n  }\n\n  /* RTL specific styles */\n\n  @keyframes material-combo-box-loader-progress-rtl {\n    0% {\n      background-position: 100% 0;\n      background-size: 300% 100%;\n    }\n\n    33% {\n      background-position: 200% 0;\n      background-size: 400% 100%;\n    }\n\n    67% {\n      background-position: 300% 0;\n      background-size: 250% 100%;\n    }\n\n    100% {\n      background-position: 400% 0;\n      background-size: 300% 100%;\n    }\n  }\n\n  :host([loading][dir='rtl']) [part='loader'] {\n    animation: 3s linear infinite material-combo-box-loader-progress-rtl,\n      0.3s 0.1s both material-combo-box-loader-fade-in;\n  }\n`],{moduleId:\"material-combo-box-overlay\"});const fo=document.createElement(\"template\");fo.innerHTML='\\n  <style>\\n    @font-face {\\n      font-family: \\'material-icons\\';\\n      src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAjAAAsAAAAADaAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAARAAAAFZSk1xEY21hcAAAAYgAAACNAAACNOuCXH5nbHlmAAACGAAABDoAAAX4NWGBxmhlYWQAAAZUAAAAMAAAADZhSa2YaGhlYQAABoQAAAAeAAAAJBGxCLtobXR4AAAGpAAAABMAAABAjXoAAGxvY2EAAAa4AAAAIgAAACIKMAjcbWF4cAAABtwAAAAfAAAAIAEeAFRuYW1lAAAG/AAAATQAAAJe3l764XBvc3QAAAgwAAAAkAAAAMondETCeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYOS4wTiBgZWBga2WbQIDA2MAhGZpYChlymZgYGJgZWbACgLSXFMYHF4xvuJnv/CvgOEG+wXG6UBhRpAcAA0HDXt4nO2R2Q0DIQxEHwt7HzSSGlJQvlJkqqGJjYdJGbH0PPJgELKBEcjBIyiQ3iQUr3BT9zNb9wvP3lPkt3rfkZNy1KXnIXpLvDgxs7DGvZ2Dk4saxxP/OHr+/KqqCZo+08EgzUa7acVoym002lubDNLZIF0M0tUg3Yz22XaD9DD6XTsN0ssgrYb6BZEQJiUAAAB4nH1UXUgcVxS+Z2ZnZpeq7IT9CbTY2Z24o1m72+zPTB/UFSS2MWssTZRs6doqialmy27bPIghPzQttCxjfEhjfGhoUFLBQoVdKixSkofCEkurwQdBgw1NqeCWFrokVt3b3pnRqm3J/Nw598537v3Od869CBC5uFm2EZkRAgl4kQcOuFm1NJcv3R+kBVpQS/dNdzcilH9w80e0F+8EPsiDAjCkUv485SMIgqd8GxHT3dIc8UYUQnjefINLoGfR88RDDIt2F3lFdwXYeVslBF2BBgjzIR/QLt7FzZ7Kb+7Pn5LfkMnDNhrfP++wjexYnlx6Z9fPtTXGZnAyh5hbiEHIApwFJPpD/OYg5TdNqnAJbpFgiGXgWIbp13AgWQhxllFL49RJFcumVWKVxlWY2cI1buHIdE6gV1S4h2WVOsn0qziMw8Ta0iLBLKFnjPk0qDYrlyArluaIJnpD+UmXaSONbu38IO40Qn+9RPQxo/3oEFLIPG6ORRxrdTqQ0yEoMlJkq+RBkod2Sz6QPFalARRZcFaC02HlKoBjaVFLgemrmVwGr0aPHYuCPZOD4VwG7NG2tihezeRmRq8NPaiPROofDF2D5h373etU+VHcwJkJrJDN4b5cFhc0J7Blc3A9lwVbtG1t7T9+OKfbjK00jr89D1r4umZj9IqWcQtFTUMRivQKLoPinhifQ8LTYhTDwbDIB02TM//HxGB5RiuEp1NeP5DPkwQZ+pLa2GQr0D7kRY3ba/+z8C5lQ7qyAV1Zm6EswXKszelwOgKKrMghySN5TJOPlxfwVEcHHFlYhsLyAhzp6MBTC8uPe+KxtEeSPOlY/Lsds+e15qbqmprqpuaxbYOt6IrjicVFPBHv6opD++IitMe7Nir/7WqYtLDHWTeQieyrXssyN4sqUBWqQy8jVMWKgqaivE/RahBYu02PJRhQJFZ0a9zDIcUCcjikxyu6OUkOCloSWIoMBwNaoHYb+8v8I1wsruKRzro7FzGXNi+l12PV3oPD3aeTZ7uzZeWxaEttLZi68Q+yt0YbvZD69acnUPZHAc50Rr4vfYYvCm4d1Nna1wPv/zYClrdhLf3kQJr5ovts8nT3cI23OgMveFuisfLyUh4OpS5oowe9cuH13h6s/v45LsB7cIWt9ba0xlxo114j9QU80IIpyiytf0xNo11nko90SJiCnj3rdvREEFEbEPfm2eEEF8/+nLxqlHNdJFJHSnt0avTmw9rZmvHUucsDycRtn9/vu51IFpN9x/E31DTTnty7B0jh8V+e+zoQ2oJpHi/6TmhYjRalNZa3CLcqVGuw05XX+Gj3do5cAZ1VWC8x4MlRSI6Tq+6+3pGbmcErl+5FPj0/cPgVfY0BxmZUWqS+N1HqxSk8r2+2RxPpT1pfDQam+q0njl/+6IbB3qjBD1LvNB3GD3EKhqCIy9DfIQrMlQAAeJxjYGRgYABiYWGbw/H8Nl8ZuDkTgCIMNaobGhH0v0zO++wXgFwOBiaQKAAHHgoPeJxjYGRgYL/wr4CBgcuKAQg47zMwMqACAQBc2wOEAAB4nGNgYGDgTCAec1mh8gG9VgYDAAAAAAAAGAAwAGIAdgCKAJ4AwAEkATIBcAHcAlQCYgKwAvwAAHicY2BkYGAQYPBgYGEAASYg5gJCBob/YD4DABFeAXMAeJx9kL1uwjAUhU8gUJVIVaWqnRgsVepSEX5G1BkkRgb2EBwIcuLIMUi8QR+kT9CH6NgH6VP0xHiBAVtyvvvdc50oAB7xgwDNCvDgzma1cMfqzG3Ss+eQ/Oq5gwhjz136D889vGPhOcITDrwhCO9p+vj03GL+y3Ob/ttzSP713MEL/jx30Q/guYdV0Pcc4S0wRWKlyRM1yFNd1ku5PajkSl5WK2nqXJdiHI8uG3NZSkOzEeuTqI/bibWZyIwuxEyXViqlRWX0XqY23llbTYfDzPs41QUKJLCQMMhJCgM+U2iUqLGk3/JfKHbMzeSt3sr5mqapBf9/jNHNiTl96XrnzIZTa5x41jjyiya0FhnrjBnNuwRmbrZJK25NU7nenialj7FzUxWmGHJnV/nYvb34BzHZcLZ4nG2M0Q6CMBRDV2CIOhTf/Ak+am5XIdyw5QoS/l4W4ptN2uYkTVWmdt3VfzXIkKOARokDKhxxwhkGNS64osFNXaxIWFoflnGx4s2Oc0xQOcs0eivadeQGs+VHwtgyPaf6B9K/ukk7pjTj4IbKS4jpT9P2JTmtZDa3vn/bB5MvItu1FOJgfTnHVEp9AbKdMX4=) format(\\'woff\\');\\n      font-weight: normal;\\n      font-style: normal;\\n    }\\n\\n    html {\\n      --material-icons-arrow-downward: \"\\\\ea01\";\\n      --material-icons-arrow-upward: \"\\\\ea02\";\\n      --material-icons-calendar: \"\\\\ea03\";\\n      --material-icons-check: \"\\\\ea04\";\\n      --material-icons-chevron-left: \"\\\\ea05\";\\n      --material-icons-chevron-right: \"\\\\ea06\";\\n      --material-icons-clear: \"\\\\ea07\";\\n      --material-icons-clock: \"\\\\ea08\";\\n      --material-icons-dropdown: \"\\\\ea09\";\\n      --material-icons-error: \"\\\\ea0a\";\\n      --material-icons-eye: \"\\\\ea0b\";\\n      --material-icons-eye-disabled: \"\\\\ea0c\";\\n      --material-icons-play: \"\\\\ea0d\";\\n      --material-icons-reload: \"\\\\ea0e\";\\n      --material-icons-upload: \"\\\\ea0f\";\\n    }\\n  </style>\\n',document.head.appendChild(fo.content);const go=i`\n  :host {\n    display: flex;\n    align-items: center;\n    box-sizing: border-box;\n    min-height: 36px;\n    padding: 8px 32px 8px 10px;\n    overflow: hidden;\n    font-family: var(--material-font-family);\n    font-size: var(--material-small-font-size);\n    line-height: 24px;\n  }\n\n  /* It's the list-box's responsibility to add the focus style */\n  :host([focused]) {\n    outline: none;\n  }\n\n  /* Checkmark */\n  [part='checkmark']::before {\n    display: var(--_material-item-selected-icon-display, none);\n    content: '';\n    font-family: material-icons;\n    font-size: 24px;\n    line-height: 1;\n    font-weight: 400;\n    width: 24px;\n    text-align: center;\n    margin-right: 10px;\n    color: var(--material-secondary-text-color);\n    flex: none;\n  }\n\n  :host([selected]) [part='checkmark']::before {\n    content: var(--material-icons-check);\n  }\n\n  @media (any-hover: hover) {\n    :host(:hover:not([disabled])) {\n      background-color: var(--material-secondary-background-color);\n    }\n\n    :host([focused]:not([disabled])) {\n      background-color: var(--material-divider-color);\n    }\n  }\n\n  /* Disabled */\n  :host([disabled]) {\n    color: var(--material-disabled-text-color);\n    cursor: default;\n    pointer-events: none;\n  }\n\n  /* RTL specific styles */\n  :host([dir='rtl']) {\n    padding: 8px 10px 8px 32px;\n  }\n\n  :host([dir='rtl']) [part='checkmark']::before {\n    margin-right: 0;\n    margin-left: 10px;\n  }\n`;Pn(\"vaadin-item\",go,{moduleId:\"material-item\"});Pn(\"vaadin-combo-box-item\",[go,i`\n  :host {\n    cursor: pointer;\n    -webkit-tap-highlight-color: transparent;\n    padding: 4px 10px;\n    --_material-item-selected-icon-display: block;\n  }\n`],{moduleId:\"material-combo-box-item\"});class _o extends(Vn(so(n))){static get template(){return o`\n      <style>\n        :host {\n          display: block;\n        }\n\n        :host([hidden]) {\n          display: none;\n        }\n      </style>\n      <span part=\"checkmark\" aria-hidden=\"true\"></span>\n      <div part=\"content\">\n        <slot></slot>\n      </div>\n    `}static get is(){return\"vaadin-combo-box-item\"}static get properties(){return{index:Number,item:Object,label:String,selected:{type:Boolean,value:!1,reflectToAttribute:!0},focused:{type:Boolean,value:!1,reflectToAttribute:!0},renderer:Function,_oldRenderer:Function}}static get observers(){return[\"__rendererOrItemChanged(renderer, index, item.*, selected, focused)\",\"__updateLabel(label, renderer)\"]}connectedCallback(){super.connectedCallback(),this._comboBox=this.parentNode.comboBox;const e=this._comboBox.getAttribute(\"dir\");e&&this.setAttribute(\"dir\",e)}requestContentUpdate(){if(!this.renderer)return;const e={index:this.index,item:this.item,focused:this.focused,selected:this.selected};this.renderer(this,this._comboBox,e)}__rendererOrItemChanged(e,t,i){void 0!==i&&void 0!==t&&(this._oldRenderer!==e&&(this.innerHTML=\"\",delete this._$litPart$),e&&(this._oldRenderer=e,this.requestContentUpdate()))}__updateLabel(e,t){t||(this.textContent=e)}}customElements.define(_o.is,_o);const yo={start:\"top\",end:\"bottom\"},ko={start:\"left\",end:\"right\"},bo=e=>class extends e{static get properties(){return{positionTarget:{type:Object,value:null},horizontalAlign:{type:String,value:\"start\"},verticalAlign:{type:String,value:\"top\"},noHorizontalOverlap:{type:Boolean,value:!1},noVerticalOverlap:{type:Boolean,value:!1}}}static get observers(){return[\"__positionSettingsChanged(horizontalAlign, verticalAlign, noHorizontalOverlap, noVerticalOverlap)\",\"__overlayOpenedChanged(opened, positionTarget)\"]}constructor(){super(),this._updatePosition=this._updatePosition.bind(this)}connectedCallback(){super.connectedCallback(),this.opened&&this.__addUpdatePositionEventListeners()}disconnectedCallback(){super.disconnectedCallback(),this.__removeUpdatePositionEventListeners()}__addUpdatePositionEventListeners(){window.addEventListener(\"resize\",this._updatePosition),this.__positionTargetAncestorRootNodes=function(e){const t=[];for(;e;){if(e.nodeType===Node.DOCUMENT_NODE){t.push(e);break}e.nodeType!==Node.DOCUMENT_FRAGMENT_NODE?e=e.assignedSlot?e.assignedSlot:e.parentNode:(t.push(e),e=e.host)}return t}(this.positionTarget),this.__positionTargetAncestorRootNodes.forEach((e=>{e.addEventListener(\"scroll\",this._updatePosition,!0)}))}__removeUpdatePositionEventListeners(){window.removeEventListener(\"resize\",this._updatePosition),this.__positionTargetAncestorRootNodes&&(this.__positionTargetAncestorRootNodes.forEach((e=>{e.removeEventListener(\"scroll\",this._updatePosition,!0)})),this.__positionTargetAncestorRootNodes=null)}__overlayOpenedChanged(e,t){if(this.__removeUpdatePositionEventListeners(),e&&t&&this.__addUpdatePositionEventListeners(),e){const e=getComputedStyle(this);this.__margins||(this.__margins={},[\"top\",\"bottom\",\"left\",\"right\"].forEach((t=>{this.__margins[t]=parseInt(e[t],10)}))),this.setAttribute(\"dir\",e.direction),this._updatePosition(),requestAnimationFrame((()=>this._updatePosition()))}}get __isRTL(){return\"rtl\"===this.getAttribute(\"dir\")}__positionSettingsChanged(){this._updatePosition()}_updatePosition(){if(!this.positionTarget||!this.opened)return;const e=this.positionTarget.getBoundingClientRect(),t=this.__shouldAlignStartVertically(e);this.style.justifyContent=t?\"flex-start\":\"flex-end\";const i=this.__shouldAlignStartHorizontally(e,this.__isRTL),a=!this.__isRTL&&i||this.__isRTL&&!i;this.style.alignItems=a?\"flex-start\":\"flex-end\";const n=this.getBoundingClientRect(),o=this.__calculatePositionInOneDimension(e,n,this.noVerticalOverlap,yo,this,t),s=this.__calculatePositionInOneDimension(e,n,this.noHorizontalOverlap,ko,this,i);Object.assign(this.style,o,s),this.toggleAttribute(\"bottom-aligned\",!t),this.toggleAttribute(\"top-aligned\",t),this.toggleAttribute(\"end-aligned\",!a),this.toggleAttribute(\"start-aligned\",a)}__shouldAlignStartHorizontally(e,t){const i=Math.max(this.__oldContentWidth||0,this.$.overlay.offsetWidth);this.__oldContentWidth=this.$.overlay.offsetWidth;const a=Math.min(window.innerWidth,document.documentElement.clientWidth),n=!t&&\"start\"===this.horizontalAlign||t&&\"end\"===this.horizontalAlign;return this.__shouldAlignStart(e,i,a,this.__margins,n,this.noHorizontalOverlap,ko)}__shouldAlignStartVertically(e){const t=Math.max(this.__oldContentHeight||0,this.$.overlay.offsetHeight);this.__oldContentHeight=this.$.overlay.offsetHeight;const i=Math.min(window.innerHeight,document.documentElement.clientHeight),a=\"top\"===this.verticalAlign;return this.__shouldAlignStart(e,t,i,this.__margins,a,this.noVerticalOverlap,yo)}__shouldAlignStart(e,t,i,a,n,o,s){const r=i-e[o?s.end:s.start]-a[s.end],l=e[o?s.start:s.end]-a[s.start],d=n?r:l;return n===(d>(n?l:r)||d>t)}__calculatePositionInOneDimension(e,t,i,a,n,o){const s=o?a.start:a.end,r=o?a.end:a.start;return{[s]:`${parseFloat(n.style[s]||getComputedStyle(n)[s])+(t[o?a.start:a.end]-e[i===o?a.end:a.start])*(o?-1:1)}px`,[r]:\"\"}}};let xo;Pn(\"vaadin-combo-box-overlay\",i`\n    #overlay {\n      width: var(--vaadin-combo-box-overlay-width, var(--_vaadin-combo-box-overlay-default-width, auto));\n    }\n\n    [part='content'] {\n      display: flex;\n      flex-direction: column;\n      height: 100%;\n    }\n  `,{moduleId:\"vaadin-combo-box-overlay-styles\"});class $o extends(bo(vo)){static get is(){return\"vaadin-combo-box-overlay\"}static get template(){return xo||(xo=super.template.cloneNode(!0),xo.content.querySelector('[part~=\"overlay\"]').removeAttribute(\"tabindex\")),xo}static get observers(){return[\"_setOverlayWidth(positionTarget, opened)\"]}connectedCallback(){super.connectedCallback();const e=this.__dataHost,t=e&&e.getRootNode().host;this._comboBox=t;const i=t&&t.getAttribute(\"dir\");i&&this.setAttribute(\"dir\",i)}ready(){super.ready();const e=document.createElement(\"div\");e.setAttribute(\"part\",\"loader\");const t=this.shadowRoot.querySelector('[part~=\"content\"]');t.parentNode.insertBefore(e,t)}_outsideClickListener(e){const t=e.composedPath();t.includes(this.positionTarget)||t.includes(this)||this.close()}_setOverlayWidth(e,t){if(e&&t){const t=this.localName;this.style.setProperty(`--_${t}-default-width`,`${e.clientWidth}px`);const i=getComputedStyle(this._comboBox).getPropertyValue(`--${t}-width`);\"\"===i?this.style.removeProperty(`--${t}-width`):this.style.setProperty(`--${t}-width`,i),this._updatePosition()}}}customElements.define($o.is,$o);let wo=0,Co=0;const Ao=[];let Io=0,Eo=!1;const zo=document.createTextNode(\"\");new window.MutationObserver((function(){Eo=!1;const e=Ao.length;for(let t=0;t<e;t++){const e=Ao[t];if(e)try{e()}catch(e){setTimeout((()=>{throw e}))}}Ao.splice(0,e),Co+=e})).observe(zo,{characterData:!0});const So={after:e=>({run:t=>window.setTimeout(t,e),cancel(e){window.clearTimeout(e)}}),run:(e,t)=>window.setTimeout(e,t),cancel(e){window.clearTimeout(e)}},Lo={run:e=>window.requestAnimationFrame(e),cancel(e){window.cancelAnimationFrame(e)}},To={run:e=>window.requestIdleCallback?window.requestIdleCallback(e):window.setTimeout(e,16),cancel(e){window.cancelIdleCallback?window.cancelIdleCallback(e):window.clearTimeout(e)}},Oo={run(e){Eo||(Eo=!0,zo.textContent=Io,Io+=1),Ao.push(e);const t=wo;return wo+=1,t},cancel(e){const t=e-Co;if(t>=0){if(!Ao[t])throw new Error(`invalid async handle: ${e}`);Ao[t]=null}}};class Po{static debounce(e,t,i){return e instanceof Po?e._cancelAsync():e=new Po,e.setConfig(t,i),e}constructor(){this._asyncModule=null,this._callback=null,this._timer=null}setConfig(e,t){this._asyncModule=e,this._callback=t,this._timer=this._asyncModule.run((()=>{this._timer=null,Mo.delete(this),this._callback()}))}cancel(){this.isActive()&&(this._cancelAsync(),Mo.delete(this))}_cancelAsync(){this.isActive()&&(this._asyncModule.cancel(this._timer),this._timer=null)}flush(){this.isActive()&&(this.cancel(),this._callback())}isActive(){return null!=this._timer}}let Mo=new Set;function Fo(){const e=Boolean(Mo.size);return Mo.forEach((e=>{try{e.flush()}catch(e){setTimeout((()=>{throw e}))}})),e}const Do=()=>{let e;do{e=Fo()}while(e)},Bo=navigator.userAgent.match(/iP(?:hone|ad;(?: U;)? CPU) OS (\\d+)/),No=Bo&&Bo[1]>=8,Vo={_ratio:.5,_scrollerPaddingTop:0,_scrollPosition:0,_physicalSize:0,_physicalAverage:0,_physicalAverageCount:0,_physicalTop:0,_virtualCount:0,_estScrollHeight:0,_scrollHeight:0,_viewportHeight:0,_viewportWidth:0,_physicalItems:null,_physicalSizes:null,_firstVisibleIndexVal:null,_lastVisibleIndexVal:null,_maxPages:2,_templateCost:0,get _physicalBottom(){return this._physicalTop+this._physicalSize},get _scrollBottom(){return this._scrollPosition+this._viewportHeight},get _virtualEnd(){return this._virtualStart+this._physicalCount-1},get _hiddenContentSize(){return this._physicalSize-this._viewportHeight},get _maxScrollTop(){return this._estScrollHeight-this._viewportHeight+this._scrollOffset},get _maxVirtualStart(){const e=this._virtualCount;return Math.max(0,e-this._physicalCount)},get _virtualStart(){return this._virtualStartVal||0},set _virtualStart(e){e=this._clamp(e,0,this._maxVirtualStart),this._virtualStartVal=e},get _physicalStart(){return this._physicalStartVal||0},set _physicalStart(e){(e%=this._physicalCount)<0&&(e=this._physicalCount+e),this._physicalStartVal=e},get _physicalEnd(){return(this._physicalStart+this._physicalCount-1)%this._physicalCount},get _physicalCount(){return this._physicalCountVal||0},set _physicalCount(e){this._physicalCountVal=e},get _optPhysicalSize(){return 0===this._viewportHeight?1/0:this._viewportHeight*this._maxPages},get _isVisible(){return Boolean(this.offsetWidth||this.offsetHeight)},get firstVisibleIndex(){let e=this._firstVisibleIndexVal;if(null==e){let t=this._physicalTop+this._scrollOffset;e=this._iterateItems(((e,i)=>{if(t+=this._getPhysicalSizeIncrement(e),t>this._scrollPosition)return i}))||0,this._firstVisibleIndexVal=e}return e},get lastVisibleIndex(){let e=this._lastVisibleIndexVal;if(null==e){let t=this._physicalTop+this._scrollOffset;this._iterateItems(((i,a)=>{t<this._scrollBottom&&(e=a),t+=this._getPhysicalSizeIncrement(i)})),this._lastVisibleIndexVal=e}return e},get _scrollOffset(){return this._scrollerPaddingTop+this.scrollOffset},_scrollHandler(){const e=Math.max(0,Math.min(this._maxScrollTop,this._scrollTop));let t=e-this._scrollPosition;const i=t>=0;if(this._scrollPosition=e,this._firstVisibleIndexVal=null,this._lastVisibleIndexVal=null,Math.abs(t)>this._physicalSize&&this._physicalSize>0){t-=this._scrollOffset;const e=Math.round(t/this._physicalAverage);this._virtualStart+=e,this._physicalStart+=e,this._physicalTop=Math.min(Math.floor(this._virtualStart)*this._physicalAverage,this._scrollPosition),this._update()}else if(this._physicalCount>0){const e=this._getReusables(i);i?(this._physicalTop=e.physicalTop,this._virtualStart+=e.indexes.length,this._physicalStart+=e.indexes.length):(this._virtualStart-=e.indexes.length,this._physicalStart-=e.indexes.length),this._update(e.indexes,i?null:e.indexes),this._debounce(\"_increasePoolIfNeeded\",this._increasePoolIfNeeded.bind(this,0),Oo)}},_getReusables(e){let t,i,a;const n=[],o=this._hiddenContentSize*this._ratio,s=this._virtualStart,r=this._virtualEnd,l=this._physicalCount;let d=this._physicalTop+this._scrollOffset;const c=this._physicalBottom+this._scrollOffset,u=this._scrollPosition,h=this._scrollBottom;for(e?(t=this._physicalStart,i=u-d):(t=this._physicalEnd,i=c-h);a=this._getPhysicalSizeIncrement(t),i-=a,!(n.length>=l||i<=o);)if(e){if(r+n.length+1>=this._virtualCount)break;if(d+a>=u-this._scrollOffset)break;n.push(t),d+=a,t=(t+1)%l}else{if(s-n.length<=0)break;if(d+this._physicalSize-a<=h)break;n.push(t),d-=a,t=0===t?l-1:t-1}return{indexes:n,physicalTop:d-this._scrollOffset}},_update(e,t){if(!(e&&0===e.length||0===this._physicalCount)){if(this._assignModels(e),this._updateMetrics(e),t)for(;t.length;){const e=t.pop();this._physicalTop-=this._getPhysicalSizeIncrement(e)}this._positionItems(),this._updateScrollerSize()}},_isClientFull(){return 0!==this._scrollBottom&&this._physicalBottom-1>=this._scrollBottom&&this._physicalTop<=this._scrollPosition},_increasePoolIfNeeded(e){const t=this._clamp(this._physicalCount+e,3,this._virtualCount-this._virtualStart)-this._physicalCount;let i=Math.round(.5*this._physicalCount);if(!(t<0)){if(t>0){const e=window.performance.now();[].push.apply(this._physicalItems,this._createPool(t));for(let e=0;e<t;e++)this._physicalSizes.push(0);this._physicalCount+=t,this._physicalStart>this._physicalEnd&&this._isIndexRendered(this._focusedVirtualIndex)&&this._getPhysicalIndex(this._focusedVirtualIndex)<this._physicalEnd&&(this._physicalStart+=t),this._update(),this._templateCost=(window.performance.now()-e)/t,i=Math.round(.5*this._physicalCount)}this._virtualEnd>=this._virtualCount-1||0===i||(this._isClientFull()?this._physicalSize<this._optPhysicalSize&&this._debounce(\"_increasePoolIfNeeded\",this._increasePoolIfNeeded.bind(this,this._clamp(Math.round(50/this._templateCost),1,i)),To):this._debounce(\"_increasePoolIfNeeded\",this._increasePoolIfNeeded.bind(this,i),Oo))}},_render(){if(this.isAttached&&this._isVisible)if(0!==this._physicalCount){const e=this._getReusables(!0);this._physicalTop=e.physicalTop,this._virtualStart+=e.indexes.length,this._physicalStart+=e.indexes.length,this._update(e.indexes),this._update(),this._increasePoolIfNeeded(0)}else this._virtualCount>0&&(this.updateViewportBoundaries(),this._increasePoolIfNeeded(3))},_itemsChanged(e){\"items\"===e.path&&(this._virtualStart=0,this._physicalTop=0,this._virtualCount=this.items?this.items.length:0,this._physicalIndexForKey={},this._firstVisibleIndexVal=null,this._lastVisibleIndexVal=null,this._physicalCount=this._physicalCount||0,this._physicalItems=this._physicalItems||[],this._physicalSizes=this._physicalSizes||[],this._physicalStart=0,this._scrollTop>this._scrollOffset&&this._resetScrollPosition(0),this._debounce(\"_render\",this._render,Lo))},_iterateItems(e,t){let i,a,n,o;if(2===arguments.length&&t){for(o=0;o<t.length;o++)if(i=t[o],a=this._computeVidx(i),null!=(n=e.call(this,i,a)))return n}else{for(i=this._physicalStart,a=this._virtualStart;i<this._physicalCount;i++,a++)if(null!=(n=e.call(this,i,a)))return n;for(i=0;i<this._physicalStart;i++,a++)if(null!=(n=e.call(this,i,a)))return n}},_computeVidx(e){return e>=this._physicalStart?this._virtualStart+(e-this._physicalStart):this._virtualStart+(this._physicalCount-this._physicalStart)+e},_updateMetrics(e){Do();let t=0,i=0;const a=this._physicalAverageCount,n=this._physicalAverage;this._iterateItems(((e,a)=>{i+=this._physicalSizes[e],this._physicalSizes[e]=this._physicalItems[e].offsetHeight,t+=this._physicalSizes[e],this._physicalAverageCount+=this._physicalSizes[e]?1:0}),e),this._physicalSize=this._physicalSize+t-i,this._physicalAverageCount!==a&&(this._physicalAverage=Math.round((n*a+t)/this._physicalAverageCount))},_positionItems(){this._adjustScrollPosition();let e=this._physicalTop;this._iterateItems((t=>{this.translate3d(0,`${e}px`,0,this._physicalItems[t]),e+=this._physicalSizes[t]}))},_getPhysicalSizeIncrement(e){return this._physicalSizes[e]},_adjustScrollPosition(){const e=0===this._virtualStart?this._physicalTop:Math.min(this._scrollPosition+this._physicalTop,0);if(0!==e){this._physicalTop-=e;const t=this._scrollPosition;!No&&t>0&&this._resetScrollPosition(t-e)}},_resetScrollPosition(e){this.scrollTarget&&e>=0&&(this._scrollTop=e,this._scrollPosition=this._scrollTop)},_updateScrollerSize(e){this._estScrollHeight=this._physicalBottom+Math.max(this._virtualCount-this._physicalCount-this._virtualStart,0)*this._physicalAverage,((e=(e=e||0===this._scrollHeight)||this._scrollPosition>=this._estScrollHeight-this._physicalSize)||Math.abs(this._estScrollHeight-this._scrollHeight)>=this._viewportHeight)&&(this.$.items.style.height=`${this._estScrollHeight}px`,this._scrollHeight=this._estScrollHeight)},scrollToIndex(e){if(\"number\"!=typeof e||e<0||e>this.items.length-1)return;if(Do(),0===this._physicalCount)return;e=this._clamp(e,0,this._virtualCount-1),(!this._isIndexRendered(e)||e>=this._maxVirtualStart)&&(this._virtualStart=e-1),this._assignModels(),this._updateMetrics(),this._physicalTop=this._virtualStart*this._physicalAverage;let t=this._physicalStart,i=this._virtualStart,a=0;const n=this._hiddenContentSize;for(;i<e&&a<=n;)a+=this._getPhysicalSizeIncrement(t),t=(t+1)%this._physicalCount,i+=1;this._updateScrollerSize(!0),this._positionItems(),this._resetScrollPosition(this._physicalTop+this._scrollOffset+a),this._increasePoolIfNeeded(0),this._firstVisibleIndexVal=null,this._lastVisibleIndexVal=null},_resetAverage(){this._physicalAverage=0,this._physicalAverageCount=0},_resizeHandler(){this._debounce(\"_render\",(()=>{this._firstVisibleIndexVal=null,this._lastVisibleIndexVal=null,this._isVisible?(this.updateViewportBoundaries(),this.toggleScrollListener(!0),this._resetAverage(),this._render()):this.toggleScrollListener(!1)}),Lo)},_isIndexRendered(e){return e>=this._virtualStart&&e<=this._virtualEnd},_getPhysicalIndex(e){return(this._physicalStart+(e-this._virtualStart))%this._physicalCount},_clamp:(e,t,i)=>Math.min(i,Math.max(t,e)),_debounce(e,t,i){var a;this._debouncers=this._debouncers||{},this._debouncers[e]=Po.debounce(this._debouncers[e],i,t.bind(this)),a=this._debouncers[e],Mo.add(a)}};class jo{constructor({createElements:e,updateElement:t,scrollTarget:i,scrollContainer:a,elementsContainer:n,reorderElements:o}){this.isAttached=!0,this._vidxOffset=0,this.createElements=e,this.updateElement=t,this.scrollTarget=i,this.scrollContainer=a,this.elementsContainer=n||a,this.reorderElements=o,this._maxPages=1.3,this.__placeholderHeight=200,this.__elementHeightQueue=Array(10),this.timeouts={SCROLL_REORDER:500,IGNORE_WHEEL:500},this.__resizeObserver=new ResizeObserver((()=>this._resizeHandler())),\"visible\"===getComputedStyle(this.scrollTarget).overflow&&(this.scrollTarget.style.overflow=\"auto\"),\"static\"===getComputedStyle(this.scrollContainer).position&&(this.scrollContainer.style.position=\"relative\"),this.__resizeObserver.observe(this.scrollTarget),this.scrollTarget.addEventListener(\"scroll\",(()=>this._scrollHandler())),this._scrollLineHeight=this._getScrollLineHeight(),this.scrollTarget.addEventListener(\"wheel\",(e=>this.__onWheel(e))),this.reorderElements&&(this.scrollTarget.addEventListener(\"mousedown\",(()=>this.__mouseDown=!0)),this.scrollTarget.addEventListener(\"mouseup\",(()=>{this.__mouseDown=!1,this.__pendingReorder&&this.__reorderElements()})))}get scrollOffset(){return 0}get adjustedFirstVisibleIndex(){return this.firstVisibleIndex+this._vidxOffset}get adjustedLastVisibleIndex(){return this.lastVisibleIndex+this._vidxOffset}scrollToIndex(e){if(\"number\"!=typeof e||isNaN(e)||0===this.size||!this.scrollTarget.offsetHeight)return;e=this._clamp(e,0,this.size-1);const t=this.__getVisibleElements().length;let i=Math.floor(e/this.size*this._virtualCount);this._virtualCount-i<t?(i=this._virtualCount-(this.size-e),this._vidxOffset=this.size-this._virtualCount):i<t?e<1e3?(i=e,this._vidxOffset=0):(i=1e3,this._vidxOffset=e-i):this._vidxOffset=e-i,this.__skipNextVirtualIndexAdjust=!0,super.scrollToIndex(i),this.adjustedFirstVisibleIndex!==e&&this._scrollTop<this._maxScrollTop&&!this.grid&&(this._scrollTop-=this.__getIndexScrollOffset(e)||0),this._scrollHandler()}flush(){0!==this.scrollTarget.offsetHeight&&(this._resizeHandler(),Do(),this._scrollHandler(),this.__scrollReorderDebouncer&&this.__scrollReorderDebouncer.flush(),this.__debouncerWheelAnimationFrame&&this.__debouncerWheelAnimationFrame.flush())}update(e=0,t=this.size-1){this.__getVisibleElements().forEach((i=>{i.__virtualIndex>=e&&i.__virtualIndex<=t&&this.__updateElement(i,i.__virtualIndex,!0)}))}__updateElement(e,t,i){e.style.paddingTop&&(e.style.paddingTop=\"\"),this.__preventElementUpdates||e.__lastUpdatedIndex===t&&!i||(this.updateElement(e,t),e.__lastUpdatedIndex=t);const a=e.offsetHeight;if(0===a)e.style.paddingTop=`${this.__placeholderHeight}px`;else{this.__elementHeightQueue.push(a),this.__elementHeightQueue.shift();const e=this.__elementHeightQueue.filter((e=>void 0!==e));this.__placeholderHeight=Math.round(e.reduce(((e,t)=>e+t),0)/e.length)}}__getIndexScrollOffset(e){const t=this.__getVisibleElements().find((t=>t.__virtualIndex===e));return t?this.scrollTarget.getBoundingClientRect().top-t.getBoundingClientRect().top:void 0}get size(){return this.__size}set size(e){if(e===this.size)return;let t,i;if(this.__preventElementUpdates=!0,e>0&&(t=this.adjustedFirstVisibleIndex,i=this.__getIndexScrollOffset(t)),this.__size=e,Do(),this._itemsChanged({path:\"items\"}),Do(),e>0){t=Math.min(t,e-1),this.scrollToIndex(t);const a=this.__getIndexScrollOffset(t);void 0!==i&&void 0!==a&&(this._scrollTop+=i-a)}this.elementsContainer.children.length||requestAnimationFrame((()=>this._resizeHandler())),this.__preventElementUpdates=!1,this._resizeHandler(),Do()}get _scrollTop(){return this.scrollTarget.scrollTop}set _scrollTop(e){this.scrollTarget.scrollTop=e}get items(){return{length:Math.min(this.size,1e5)}}get offsetHeight(){return this.scrollTarget.offsetHeight}get $(){return{items:this.scrollContainer}}updateViewportBoundaries(){const e=window.getComputedStyle(this.scrollTarget);this._scrollerPaddingTop=this.scrollTarget===this?0:parseInt(e[\"padding-top\"],10),this._isRTL=Boolean(\"rtl\"===e.direction),this._viewportWidth=this.elementsContainer.offsetWidth,this._viewportHeight=this.scrollTarget.offsetHeight,this._scrollPageHeight=this._viewportHeight-this._scrollLineHeight,this.grid&&this._updateGridMetrics()}setAttribute(){}_createPool(e){const t=this.createElements(e),i=document.createDocumentFragment();return t.forEach((e=>{e.style.position=\"absolute\",i.appendChild(e),this.__resizeObserver.observe(e)})),this.elementsContainer.appendChild(i),t}_assignModels(e){this._iterateItems(((e,t)=>{const i=this._physicalItems[e];i.hidden=t>=this.size,i.hidden?delete i.__lastUpdatedIndex:(i.__virtualIndex=t+(this._vidxOffset||0),this.__updateElement(i,i.__virtualIndex))}),e)}_isClientFull(){return setTimeout((()=>this.__clientFull=!0)),this.__clientFull||super._isClientFull()}translate3d(e,t,i,a){a.style.transform=`translateY(${t})`}toggleScrollListener(){}_scrollHandler(){this._adjustVirtualIndexOffset(this._scrollTop-(this.__previousScrollTop||0));const e=this.scrollTarget.scrollTop-this._scrollPosition;if(super._scrollHandler(),0!==this._physicalCount){const t=e>=0,i=this._getReusables(!t);i.indexes.length&&(this._physicalTop=i.physicalTop,t?(this._virtualStart-=i.indexes.length,this._physicalStart-=i.indexes.length):(this._virtualStart+=i.indexes.length,this._physicalStart+=i.indexes.length),this._resizeHandler())}this.reorderElements&&(this.__scrollReorderDebouncer=Po.debounce(this.__scrollReorderDebouncer,So.after(this.timeouts.SCROLL_REORDER),(()=>this.__reorderElements()))),this.__previousScrollTop=this._scrollTop}__onWheel(e){if(e.ctrlKey||this._hasScrolledAncestor(e.target,e.deltaX,e.deltaY))return;let t=e.deltaY;if(e.deltaMode===WheelEvent.DOM_DELTA_LINE?t*=this._scrollLineHeight:e.deltaMode===WheelEvent.DOM_DELTA_PAGE&&(t*=this._scrollPageHeight),this._deltaYAcc=this._deltaYAcc||0,this._wheelAnimationFrame)return this._deltaYAcc+=t,void e.preventDefault();t+=this._deltaYAcc,this._deltaYAcc=0,this._wheelAnimationFrame=!0,this.__debouncerWheelAnimationFrame=Po.debounce(this.__debouncerWheelAnimationFrame,Lo,(()=>this._wheelAnimationFrame=!1));const i=Math.abs(e.deltaX)+Math.abs(t);this._canScroll(this.scrollTarget,e.deltaX,t)?(e.preventDefault(),this.scrollTarget.scrollTop+=t,this.scrollTarget.scrollLeft+=e.deltaX,this._hasResidualMomentum=!0,this._ignoreNewWheel=!0,this._debouncerIgnoreNewWheel=Po.debounce(this._debouncerIgnoreNewWheel,So.after(this.timeouts.IGNORE_WHEEL),(()=>this._ignoreNewWheel=!1))):this._hasResidualMomentum&&i<=this._previousMomentum||this._ignoreNewWheel?e.preventDefault():i>this._previousMomentum&&(this._hasResidualMomentum=!1),this._previousMomentum=i}_hasScrolledAncestor(e,t,i){return e!==this.scrollTarget&&e!==this.scrollTarget.getRootNode().host&&(!(!this._canScroll(e,t,i)||-1===[\"auto\",\"scroll\"].indexOf(getComputedStyle(e).overflow))||(e!==this&&e.parentElement?this._hasScrolledAncestor(e.parentElement,t,i):void 0))}_canScroll(e,t,i){return i>0&&e.scrollTop<e.scrollHeight-e.offsetHeight||i<0&&e.scrollTop>0||t>0&&e.scrollLeft<e.scrollWidth-e.offsetWidth||t<0&&e.scrollLeft>0}_getScrollLineHeight(){const e=document.createElement(\"div\");e.style.fontSize=\"initial\",e.style.display=\"none\",document.body.appendChild(e);const t=window.getComputedStyle(e).fontSize;return document.body.removeChild(e),t?window.parseInt(t):void 0}__getVisibleElements(){return Array.from(this.elementsContainer.children).filter((e=>!e.hidden))}__reorderElements(){if(this.__mouseDown)return void(this.__pendingReorder=!0);this.__pendingReorder=!1;const e=this._virtualStart+(this._vidxOffset||0),t=this.__getVisibleElements(),i=t.find((e=>e.contains(this.elementsContainer.getRootNode().activeElement)||e.contains(this.scrollTarget.getRootNode().activeElement)))||t[0];if(!i)return;const a=i.__virtualIndex-e,n=t.indexOf(i)-a;if(n>0)for(let e=0;e<n;e++)this.elementsContainer.appendChild(t[e]);else if(n<0)for(let e=t.length+n;e<t.length;e++)this.elementsContainer.insertBefore(t[e],t[0]);if(Xn){const{transform:e}=this.scrollTarget.style;this.scrollTarget.style.transform=\"translateZ(0)\",setTimeout((()=>this.scrollTarget.style.transform=e))}}_adjustVirtualIndexOffset(e){if(this._virtualCount>=this.size)this._vidxOffset=0;else if(this.__skipNextVirtualIndexAdjust)this.__skipNextVirtualIndexAdjust=!1;else if(Math.abs(e)>1e4){const e=this._scrollTop/(this.scrollTarget.scrollHeight-this.scrollTarget.offsetHeight),t=e*this.size;this._vidxOffset=Math.round(t-e*this._virtualCount)}else{const e=this._vidxOffset,t=1e3,i=100;0===this._scrollTop?(this._vidxOffset=0,e!==this._vidxOffset&&super.scrollToIndex(0)):this.firstVisibleIndex<t&&this._vidxOffset>0&&(this._vidxOffset-=Math.min(this._vidxOffset,i),super.scrollToIndex(this.firstVisibleIndex+(e-this._vidxOffset)));const a=this.size-this._virtualCount;this._scrollTop>=this._maxScrollTop&&this._maxScrollTop>0?(this._vidxOffset=a,e!==this._vidxOffset&&super.scrollToIndex(this._virtualCount-1)):this.firstVisibleIndex>this._virtualCount-t&&this._vidxOffset<a&&(this._vidxOffset+=Math.min(a-this._vidxOffset,i),super.scrollToIndex(this.firstVisibleIndex-(this._vidxOffset-e)))}}}Object.setPrototypeOf(jo.prototype,Vo);class qo{constructor(e){this.__adapter=new jo(e)}get size(){return this.__adapter.size}set size(e){this.__adapter.size=e}scrollToIndex(e){this.__adapter.scrollToIndex(e)}update(e=0,t=this.size-1){this.__adapter.update(e,t)}flush(){this.__adapter.flush()}get firstVisibleIndex(){return this.__adapter.adjustedFirstVisibleIndex}get lastVisibleIndex(){return this.__adapter.adjustedLastVisibleIndex}}const Ro=class{toString(){return\"\"}};class Uo extends n{static get is(){return\"vaadin-combo-box-scroller\"}static get template(){return o`\n      <style>\n        :host {\n          display: block;\n          min-height: 1px;\n          overflow: auto;\n\n          /* Fixes item background from getting on top of scrollbars on Safari */\n          transform: translate3d(0, 0, 0);\n\n          /* Enable momentum scrolling on iOS */\n          -webkit-overflow-scrolling: touch;\n\n          /* Fixes scrollbar disappearing when 'Show scroll bars: Always' enabled in Safari */\n          box-shadow: 0 0 0 white;\n        }\n\n        #selector {\n          border-width: var(--_vaadin-combo-box-items-container-border-width);\n          border-style: var(--_vaadin-combo-box-items-container-border-style);\n          border-color: var(--_vaadin-combo-box-items-container-border-color);\n        }\n      </style>\n      <div id=\"selector\">\n        <slot></slot>\n      </div>\n    `}static get properties(){return{items:{type:Array,observer:\"__itemsChanged\"},focusedIndex:{type:Number,observer:\"__focusedIndexChanged\"},loading:{type:Boolean,observer:\"__loadingChanged\"},opened:{type:Boolean,observer:\"__openedChanged\"},selectedItem:{type:Object},itemIdPath:{type:String},comboBox:{type:Object},getItemLabel:{type:Object},renderer:{type:Object,observer:\"__rendererChanged\"},theme:{type:String}}}constructor(){super(),this.__boundOnItemClick=this.__onItemClick.bind(this)}__openedChanged(e){e&&this.requestContentUpdate()}ready(){super.ready(),this.__hostTagName=this.constructor.is.replace(\"-scroller\",\"\"),this.setAttribute(\"role\",\"listbox\"),this.addEventListener(\"click\",(e=>e.stopPropagation())),this.__patchWheelOverScrolling(),this.__virtualizer=new qo({createElements:this.__createElements.bind(this),updateElement:this.__updateElement.bind(this),elementsContainer:this,scrollTarget:this,scrollContainer:this.$.selector})}requestContentUpdate(){this.__virtualizer&&this.__virtualizer.update()}scrollIntoView(e){if(!(this.opened&&e>=0))return;const t=this._visibleItemsCount();let i=e;e>this.__virtualizer.lastVisibleIndex-1?(this.__virtualizer.scrollToIndex(e),i=e-t+1):e>this.__virtualizer.firstVisibleIndex&&(i=this.__virtualizer.firstVisibleIndex),this.__virtualizer.scrollToIndex(Math.max(0,i));const a=[...this.children].find((e=>!e.hidden&&e.index===this.__virtualizer.lastVisibleIndex));if(!a||e!==a.index)return;const n=a.getBoundingClientRect(),o=this.getBoundingClientRect(),s=n.bottom-o.bottom+this._viewportTotalPaddingBottom;s>0&&(this.scrollTop+=s)}__getAriaRole(e){return void 0!==e&&\"option\"}__getAriaSelected(e,t){return this.__isItemFocused(e,t).toString()}__isItemFocused(e,t){return e===t}__isItemSelected(e,t,i){return!(e instanceof Ro)&&(i&&void 0!==e&&void 0!==t?this.get(i,e)===this.get(i,t):e===t)}__itemsChanged(e){this.__virtualizer&&e&&(this.__virtualizer.size=e.length,this.__virtualizer.flush(),this.setAttribute(\"aria-setsize\",e.length),this.requestContentUpdate())}__loadingChanged(e){this.__virtualizer&&!e&&setTimeout((()=>this.requestContentUpdate()))}__focusedIndexChanged(e,t){this.__virtualizer&&(e!==t&&this.requestContentUpdate(),e>=0&&!this.loading&&this.scrollIntoView(e))}__rendererChanged(e,t){(e||t)&&this.requestContentUpdate()}__createElements(e){return[...Array(e)].map((()=>{const e=document.createElement(`${this.__hostTagName}-item`);return e.addEventListener(\"click\",this.__boundOnItemClick),e.tabIndex=\"-1\",e.style.width=\"100%\",e}))}__updateElement(e,t){const i=this.items[t],a=this.focusedIndex;e.setProperties({item:i,index:this.__requestItemByIndex(i,t),label:this.getItemLabel(i),selected:this.__isItemSelected(i,this.selectedItem,this.itemIdPath),renderer:this.renderer,focused:this.__isItemFocused(a,t)}),e.id=`${this.__hostTagName}-item-${t}`,e.setAttribute(\"role\",this.__getAriaRole(t)),e.setAttribute(\"aria-selected\",this.__getAriaSelected(a,t)),e.setAttribute(\"aria-posinset\",t+1),this.theme?e.setAttribute(\"theme\",this.theme):e.removeAttribute(\"theme\")}__onItemClick(e){this.dispatchEvent(new CustomEvent(\"selection-changed\",{detail:{item:e.currentTarget.item}}))}__patchWheelOverScrolling(){this.$.selector.addEventListener(\"wheel\",(e=>{const t=0===this.scrollTop,i=this.scrollHeight-this.scrollTop-this.clientHeight<=1;(t&&e.deltaY<0||i&&e.deltaY>0)&&e.preventDefault()}))}get _viewportTotalPaddingBottom(){if(void 0===this._cachedViewportTotalPaddingBottom){const e=window.getComputedStyle(this.$.selector);this._cachedViewportTotalPaddingBottom=[e.paddingBottom,e.borderBottomWidth].map((e=>parseInt(e,10))).reduce(((e,t)=>e+t))}return this._cachedViewportTotalPaddingBottom}__requestItemByIndex(e,t){return e instanceof Ro&&void 0!==t&&this.dispatchEvent(new CustomEvent(\"index-requested\",{detail:{index:t,currentScrollerPos:this._oldScrollerPosition}})),t}_visibleItemsCount(){this.__virtualizer.scrollToIndex(this.__virtualizer.firstVisibleIndex);return this.__virtualizer.size>0?this.__virtualizer.lastVisibleIndex-this.__virtualizer.firstVisibleIndex+1:0}}customElements.define(Uo.is,Uo);class Ho extends n{static get is(){return\"vaadin-combo-box-dropdown\"}static get template(){return o`\n      <vaadin-combo-box-overlay\n        id=\"overlay\"\n        hidden$=\"[[_isOverlayHidden(_items.*, loading)]]\"\n        loading$=\"[[loading]]\"\n        opened=\"{{_overlayOpened}}\"\n        theme$=\"[[theme]]\"\n        position-target=\"[[positionTarget]]\"\n        no-vertical-overlap\n        restore-focus-on-close=\"[[restoreFocusOnClose]]\"\n        restore-focus-node=\"[[restoreFocusNode]]\"\n      ></vaadin-combo-box-overlay>\n    `}static get properties(){return{opened:Boolean,positionTarget:{type:Object},renderer:Function,loading:{type:Boolean,value:!1,reflectToAttribute:!0},theme:String,_selectedItem:{type:Object},_items:{type:Array},_focusedIndex:{type:Number,value:-1},focusedItem:{type:String,computed:\"_getFocusedItem(_focusedIndex)\"},_itemLabelPath:{type:String,value:\"label\"},_itemValuePath:{type:String,value:\"value\"},_scroller:Object,_itemIdPath:String,_overlayOpened:{type:Boolean,observer:\"_openedChanged\"}}}static get observers(){return[\"_openedOrItemsChanged(opened, _items, loading)\",\"__updateScroller(_scroller, _items, opened, loading, _selectedItem, _itemIdPath, _focusedIndex, renderer, theme)\"]}constructor(){super();const e=Ho._uniqueId=1+Ho._uniqueId||0;this.scrollerId=`${this.localName}-scroller-${e}`}ready(){super.ready(),this.__hostTagName=this.constructor.is.replace(\"-dropdown\",\"\");const e=this.$.overlay,t=`${this.__hostTagName}-scroller`;e.renderer=e=>{if(!e.firstChild){const i=document.createElement(t);e.appendChild(i)}},e.requestContentUpdate(),this._scroller=e.content.querySelector(t),this._scroller.id=this.scrollerId,this._scroller.getItemLabel=this.getItemLabel.bind(this),this._scroller.comboBox=this.getRootNode().host,this._scroller.addEventListener(\"selection-changed\",(e=>this._forwardScrollerEvent(e))),this._scroller.addEventListener(\"index-requested\",(e=>this._forwardScrollerEvent(e))),e.addEventListener(\"touchend\",(e=>this._fireTouchAction(e))),e.addEventListener(\"touchmove\",(e=>this._fireTouchAction(e))),e.addEventListener(\"mousedown\",(e=>e.preventDefault())),e.addEventListener(\"vaadin-overlay-outside-click\",(e=>{e.preventDefault()}))}disconnectedCallback(){super.disconnectedCallback(),this._overlayOpened=!1}_fireTouchAction(e){this.dispatchEvent(new CustomEvent(\"vaadin-overlay-touch-action\",{detail:{sourceEvent:e}}))}_forwardScrollerEvent(e){this.dispatchEvent(new CustomEvent(e.type,{detail:e.detail}))}_openedChanged(e,t){e?(this._scroller.style.maxHeight=getComputedStyle(this).getPropertyValue(`--${this.__hostTagName}-overlay-max-height`)||\"65vh\",this.dispatchEvent(new CustomEvent(\"vaadin-combo-box-dropdown-opened\",{bubbles:!0,composed:!0}))):t&&!this.__emptyItems&&this.dispatchEvent(new CustomEvent(\"vaadin-combo-box-dropdown-closed\",{bubbles:!0,composed:!0}))}_openedOrItemsChanged(e,t,i){const a=t&&t.length;a||(this.__emptyItems=!0),this._overlayOpened=!(!e||!i&&!a),this.__emptyItems=!1}_getFocusedItem(e){if(e>=0)return this._items[e]}indexOfLabel(e){if(this._items&&e)for(let t=0;t<this._items.length;t++)if(this.getItemLabel(this._items[t]).toString().toLowerCase()===e.toString().toLowerCase())return t;return-1}getItemLabel(e,t){t=t||this._itemLabelPath;let i=e&&t?this.get(t,e):void 0;return null==i&&(i=e?e.toString():\"\"),i}_scrollIntoView(e){this._scroller&&this._scroller.scrollIntoView(e)}adjustScrollPosition(){this.opened&&this._items&&this._scrollIntoView(this._focusedIndex)}__updateScroller(e,t,i,a,n,o,s,r,l){e&&e.setProperties({items:i?t:[],opened:i,loading:a,selectedItem:n,itemIdPath:o,focusedIndex:s,renderer:r,theme:l})}_isOverlayHidden(){return!(this.loading||this._items&&this._items.length)}}customElements.define(Ho.is,Ho);const Go=e=>class extends e{static get properties(){return{pageSize:{type:Number,value:50,observer:\"_pageSizeChanged\"},size:{type:Number,observer:\"_sizeChanged\"},dataProvider:{type:Object,observer:\"_dataProviderChanged\"},_pendingRequests:{value:()=>({})},__placeHolder:{value:new Ro},__previousDataProviderFilter:{type:String}}}static get observers(){return[\"_dataProviderFilterChanged(filter)\",\"_warnDataProviderValue(dataProvider, value)\",\"_ensureFirstPage(opened)\"]}ready(){super.ready(),this.$.dropdown.addEventListener(\"index-requested\",(e=>{const t=e.detail.index,i=e.detail.currentScrollerPos,a=Math.floor(1.5*this.pageSize);if(!this._shouldSkipIndex(t,a,i)&&void 0!==t){const e=this._getPageForIndex(t);this._shouldLoadPage(e)&&this._loadPage(e)}}))}_dataProviderFilterChanged(e){void 0!==this.__previousDataProviderFilter||\"\"!==e?this.__previousDataProviderFilter!==e&&(this.__previousDataProviderFilter=e,this._pendingRequests={},this.loading=this._shouldFetchData(),this.size=void 0,this.clearCache()):this.__previousDataProviderFilter=e}_shouldFetchData(){return!!this.dataProvider&&(this.opened||this.filter&&this.filter.length)}_ensureFirstPage(e){e&&this._shouldLoadPage(0)&&this._loadPage(0)}_shouldSkipIndex(e,t,i){return 0!==i&&e>=i-t&&e<=i+t}_shouldLoadPage(e){if(!this.filteredItems||this._forceNextRequest)return this._forceNextRequest=!1,!0;const t=this.filteredItems[e*this.pageSize];return void 0!==t?t instanceof Ro:void 0===this.size}_loadPage(e){if(!this._pendingRequests[e]&&this.dataProvider){this.loading=!0;const t={page:e,pageSize:this.pageSize,filter:this.filter},i=(a,n)=>{if(this._pendingRequests[e]===i){const i=this.filteredItems?[...this.filteredItems]:[];i.splice(t.page*t.pageSize,a.length,...a),this.filteredItems=i,this._isValidValue(this.value)&&this._getItemValue(this.selectedItem)!==this.value&&this._selectItemForValue(this.value),this.opened||this.hasAttribute(\"focused\")||this._commitValue(),this.size=n,delete this._pendingRequests[e],0===Object.keys(this._pendingRequests).length&&(this.loading=!1)}};this._pendingRequests[e]||(this._pendingRequests[e]=i,this.dataProvider(t,i))}}_getPageForIndex(e){return Math.floor(e/this.pageSize)}clearCache(){if(!this.dataProvider)return;this._pendingRequests={};const e=[];for(let t=0;t<(this.size||0);t++)e.push(this.__placeHolder);this.filteredItems=e,this._shouldFetchData()?(this._forceNextRequest=!1,this._loadPage(0)):this._forceNextRequest=!0}_sizeChanged(e=0){const t=(this.filteredItems||[]).slice(0,e);for(let i=0;i<e;i++)t[i]=void 0!==t[i]?t[i]:this.__placeHolder;this.filteredItems=t,this._flushPendingRequests(e)}_pageSizeChanged(e,t){if(Math.floor(e)!==e||e<1)throw this.pageSize=t,new Error(\"`pageSize` value must be an integer > 0\");this.clearCache()}_dataProviderChanged(e,t){this._ensureItemsOrDataProvider((()=>{this.dataProvider=t})),this.clearCache()}_ensureItemsOrDataProvider(e){if(void 0!==this.items&&void 0!==this.dataProvider)throw e(),new Error(\"Using `items` and `dataProvider` together is not supported\");this.dataProvider&&!this.filteredItems&&(this.filteredItems=[])}_warnDataProviderValue(e,t){if(e&&\"\"!==t&&(void 0===this.selectedItem||null===this.selectedItem)){const e=this._indexOfValue(t,this.filteredItems);(e<0||!this._getItemLabel(this.filteredItems[e]))&&console.warn(\"Warning: unable to determine the label for the provided `value`. Nothing to display in the text field. This usually happens when setting an initial `value` before any items are returned from the `dataProvider` callback. Consider setting `selectedItem` instead of `value`\")}}_flushPendingRequests(e){if(this._pendingRequests){const t=Math.ceil(e/this.pageSize),i=Object.keys(this._pendingRequests);for(let a=0;a<i.length;a++){const n=parseInt(i[a]);n>=t&&this._pendingRequests[n]([],e)}}}},Wo=a((e=>class extends e{static get properties(){return{disabled:{type:Boolean,value:!1,observer:\"_disabledChanged\",reflectToAttribute:!0}}}_disabledChanged(e){this._setAriaDisabled(e)}_setAriaDisabled(e){e?this.setAttribute(\"aria-disabled\",\"true\"):this.removeAttribute(\"aria-disabled\")}click(){this.disabled||super.click()}})),Ko=a((e=>class extends e{ready(){super.ready(),this.addEventListener(\"keydown\",(e=>{this._onKeyDown(e)})),this.addEventListener(\"keyup\",(e=>{this._onKeyUp(e)}))}_onKeyDown(e){switch(e.key){case\"Enter\":this._onEnter(e);break;case\"Escape\":this._onEscape(e)}}_onKeyUp(e){}_onEnter(e){}_onEscape(e){}}));const Yo=a((e=>class extends e{static get properties(){return{inputElement:{type:Object,readOnly:!0,observer:\"_inputElementChanged\"},type:{type:String,readOnly:!0},value:{type:String,value:\"\",observer:\"_valueChanged\",notify:!0}}}constructor(){super(),this._boundOnInput=this._onInput.bind(this),this._boundOnChange=this._onChange.bind(this)}clear(){this.value=\"\"}_addInputListeners(e){e.addEventListener(\"input\",this._boundOnInput),e.addEventListener(\"change\",this._boundOnChange)}_removeInputListeners(e){e.removeEventListener(\"input\",this._boundOnInput),e.removeEventListener(\"change\",this._boundOnChange)}_forwardInputValue(e){this.inputElement&&(this.inputElement.value=null!=e?e:\"\")}_inputElementChanged(e,t){e?this._addInputListeners(e):t&&this._removeInputListeners(t)}_onInput(e){this.__userInput=e.isTrusted,this.value=e.target.value,this.__userInput=!1}_onChange(e){}_toggleHasValue(e){this.toggleAttribute(\"has-value\",e)}_valueChanged(e,t){this._toggleHasValue(\"\"!==e&&null!=e),\"\"===e&&void 0===t||this.__userInput||this._forwardInputValue(e)}}));class Zo{constructor(e){this.host=e,e.addEventListener(\"opened-changed\",(()=>{e.opened||this.__setVirtualKeyboardEnabled(!1)})),e.addEventListener(\"blur\",(()=>this.__setVirtualKeyboardEnabled(!0))),e.addEventListener(\"touchstart\",(()=>this.__setVirtualKeyboardEnabled(!0)))}__setVirtualKeyboardEnabled(e){this.host.inputElement&&(this.host.inputElement.inputMode=e?\"\":\"none\")}}const Qo=e=>class extends(eo(Ko(Yo(Wo(e))))){static get properties(){return{opened:{type:Boolean,notify:!0,value:!1,reflectToAttribute:!0,observer:\"_openedChanged\"},autoOpenDisabled:{type:Boolean},readonly:{type:Boolean,value:!1,reflectToAttribute:!0},renderer:Function,items:{type:Array,observer:\"_itemsChanged\"},allowCustomValue:{type:Boolean,value:!1},filteredItems:{type:Array},_lastCommittedValue:String,loading:{type:Boolean,value:!1,reflectToAttribute:!0,observer:\"_loadingChanged\"},_focusedIndex:{type:Number,observer:\"_focusedIndexChanged\",value:-1},filter:{type:String,value:\"\",notify:!0},selectedItem:{type:Object,notify:!0},itemLabelPath:{type:String,value:\"label\",observer:\"_itemLabelPathChanged\"},itemValuePath:{type:String,value:\"value\"},itemIdPath:String,_toggleElement:{type:Object,observer:\"_toggleElementChanged\"},_closeOnBlurIsPrevented:Boolean,__restoreFocusOnClose:Boolean}}static get observers(){return[\"_filterChanged(filter, itemValuePath, itemLabelPath)\",\"_filteredItemsChanged(filteredItems)\",\"_selectedItemChanged(selectedItem, itemValuePath, itemLabelPath)\"]}constructor(){super(),this._boundOnFocusout=this._onFocusout.bind(this),this._boundOverlaySelectedItemChanged=this._overlaySelectedItemChanged.bind(this),this._boundOnClearButtonMouseDown=this.__onClearButtonMouseDown.bind(this),this._boundClose=this.close.bind(this),this._boundOnOpened=this._onOpened.bind(this),this._boundOnClick=this._onClick.bind(this),this._boundOnOverlayTouchAction=this._onOverlayTouchAction.bind(this),this._boundOnTouchend=this._onTouchend.bind(this)}get _inputElementValue(){return this.inputElement?this.inputElement[this._propertyForValue]:void 0}set _inputElementValue(e){this.inputElement&&(this.inputElement[this._propertyForValue]=e)}_inputElementChanged(e){super._inputElementChanged(e),e&&(e.autocomplete=\"off\",e.autocapitalize=\"off\",e.setAttribute(\"role\",\"combobox\"),e.setAttribute(\"aria-autocomplete\",\"list\"),e.setAttribute(\"aria-expanded\",!!this.opened),e.setAttribute(\"spellcheck\",\"false\"),e.setAttribute(\"autocorrect\",\"off\"),this._revertInputValueToValue(),this.clearElement&&this.clearElement.addEventListener(\"mousedown\",this._boundOnClearButtonMouseDown))}ready(){super.ready(),this.addEventListener(\"focusout\",this._boundOnFocusout),this._lastCommittedValue=this.value,this.$.dropdown.addEventListener(\"selection-changed\",this._boundOverlaySelectedItemChanged),this.addEventListener(\"vaadin-combo-box-dropdown-closed\",this._boundClose),this.addEventListener(\"vaadin-combo-box-dropdown-opened\",this._boundOnOpened),this.addEventListener(\"click\",this._boundOnClick),this.$.dropdown.addEventListener(\"vaadin-overlay-touch-action\",this._boundOnOverlayTouchAction),this.addEventListener(\"touchend\",this._boundOnTouchend);const e=()=>{requestAnimationFrame((()=>{this.$.dropdown.$.overlay.bringToFront()}))};var t;this.addEventListener(\"mousedown\",e),this.addEventListener(\"touchstart\",e),t=this,window.Vaadin&&window.Vaadin.templateRendererCallback?window.Vaadin.templateRendererCallback(t):t.querySelector(\"template\")&&console.warn(`WARNING: <template> inside <${t.localName}> is no longer supported. Import @vaadin/polymer-legacy-adapter/template-renderer.js to enable compatibility.`),this.addController(new Zo(this))}requestContentUpdate(){this.$.dropdown._scroller&&(this.$.dropdown._scroller.requestContentUpdate(),this._getItemElements().forEach((e=>{e.requestContentUpdate()})))}open(){this.disabled||this.readonly||(this.opened=!0)}close(){this.opened=!1}_focusedIndexChanged(e,t){void 0!==t&&this._updateActiveDescendant(e)}_updateActiveDescendant(e){const t=this.inputElement;if(!t)return;const i=this._getItemElements().find((t=>t.index===e));i?t.setAttribute(\"aria-activedescendant\",i.id):t.removeAttribute(\"aria-activedescendant\")}_openedChanged(e,t){if(void 0===t)return;e?(this._openedWithFocusRing=this.hasAttribute(\"focus-ring\"),this.hasAttribute(\"focused\")||Jn||this.focus(),this.__restoreFocusOnClose=!0):(this._onClosed(),this._openedWithFocusRing&&this.hasAttribute(\"focused\")&&this.setAttribute(\"focus-ring\",\"\"));const i=this.inputElement;i&&(i.setAttribute(\"aria-expanded\",!!e),e?i.setAttribute(\"aria-controls\",this.$.dropdown.scrollerId):i.removeAttribute(\"aria-controls\"))}_onOverlayTouchAction(){this._closeOnBlurIsPrevented=!0,this.inputElement.blur(),this._closeOnBlurIsPrevented=!1}_isClearButton(e){return e.composedPath()[0]===this.clearElement}_handleClearButtonClick(e){e.preventDefault(),this._clear(),this.opened&&this.requestContentUpdate()}_onToggleButtonClick(e){e.preventDefault(),this.opened?this.close():this.open()}_onHostClick(e){this.autoOpenDisabled||(e.preventDefault(),this.open())}_onClick(e){this._closeOnBlurIsPrevented=!0;const t=e.composedPath();this._isClearButton(e)?this._handleClearButtonClick(e):t.indexOf(this._toggleElement)>-1?this._onToggleButtonClick(e):this._onHostClick(e),this._closeOnBlurIsPrevented=!1}_onKeyDown(e){super._onKeyDown(e),\"Tab\"===e.key?this.__restoreFocusOnClose=!1:\"ArrowDown\"===e.key?(this._closeOnBlurIsPrevented=!0,this._onArrowDown(),this._closeOnBlurIsPrevented=!1,e.preventDefault()):\"ArrowUp\"===e.key&&(this._closeOnBlurIsPrevented=!0,this._onArrowUp(),this._closeOnBlurIsPrevented=!1,e.preventDefault())}_getItemLabel(e){return this.$.dropdown.getItemLabel(e)}_getItemValue(e){let t=e&&this.itemValuePath?this.get(this.itemValuePath,e):void 0;return void 0===t&&(t=e?e.toString():\"\"),t}_onArrowDown(){if(this.opened){const e=this._getOverlayItems();e&&(this._focusedIndex=Math.min(e.length-1,this._focusedIndex+1),this._prefillFocusedItemLabel())}else this.open()}_onArrowUp(){if(this.opened){if(this._focusedIndex>-1)this._focusedIndex=Math.max(0,this._focusedIndex-1);else{const e=this._getOverlayItems();e&&(this._focusedIndex=e.length-1)}this._prefillFocusedItemLabel()}else this.open()}_prefillFocusedItemLabel(){this._focusedIndex>-1&&(this._inputElementValue=this._getItemLabel(this.$.dropdown.focusedItem),this._markAllSelectionRange())}_setSelectionRange(e,t){this.hasAttribute(\"focused\")&&this.inputElement.setSelectionRange(e,t)}_markAllSelectionRange(){void 0!==this._inputElementValue&&this._setSelectionRange(0,this._inputElementValue.length)}_clearSelectionRange(){if(void 0!==this._inputElementValue){const e=this._inputElementValue?this._inputElementValue.length:0;this._setSelectionRange(e,e)}}_closeOrCommit(){this.opened||this.loading?this.close():this._commitValue()}_onEnter(e){if(!this.allowCustomValue&&\"\"!==this._inputElementValue&&this._focusedIndex<0)return e.preventDefault(),void e.stopPropagation();this.opened&&(e.preventDefault(),e.stopPropagation()),this._closeOrCommit()}_onEscape(e){this.autoOpenDisabled?this.opened||this.value!==this._inputElementValue&&this._inputElementValue.length>0?(e.stopPropagation(),this._focusedIndex=-1,this.cancel()):this.clearButtonVisible&&!this.opened&&this.value&&(e.stopPropagation(),this._clear()):this.opened?(e.stopPropagation(),this._focusedIndex>-1?(this._focusedIndex=-1,this._revertInputValue()):this.cancel()):this.clearButtonVisible&&this.value&&(e.stopPropagation(),this._clear())}_toggleElementChanged(e){e&&(e.addEventListener(\"mousedown\",(e=>e.preventDefault())),e.addEventListener(\"click\",(()=>{Jn&&!this.hasAttribute(\"focused\")&&document.activeElement.blur()})))}_clear(){this.selectedItem=null,this.allowCustomValue&&(this.value=\"\"),this._detectAndDispatchChange()}cancel(){this._revertInputValueToValue(),this._lastCommittedValue=this.value,this._closeOrCommit()}_onOpened(){requestAnimationFrame((()=>{this.$.dropdown.adjustScrollPosition(),this._updateActiveDescendant(this._focusedIndex)})),this._lastCommittedValue=this.value}_onClosed(){this.loading&&!this.allowCustomValue||this._commitValue()}_commitValue(){const e=this._getOverlayItems();if(e&&this._focusedIndex>-1){const t=e[this._focusedIndex];this.selectedItem!==t&&(this.selectedItem=t),this._inputElementValue=this._getItemLabel(this.selectedItem)}else if(\"\"===this._inputElementValue||void 0===this._inputElementValue)this.selectedItem=null,this.allowCustomValue&&(this.value=\"\");else{const e=e=>e&&e.toLowerCase&&e.toLowerCase(),t=[...this.filteredItems||[],this.selectedItem].find((t=>e(this._getItemLabel(t))===e(this._inputElementValue)));if(this.allowCustomValue&&!t){const e=this._inputElementValue;this._lastCustomValue=e;const t=new CustomEvent(\"custom-value-set\",{detail:e,composed:!0,cancelable:!0,bubbles:!0});this.dispatchEvent(t),t.defaultPrevented||(this._selectItemForValue(e),this.value=e)}else this.allowCustomValue||this.opened||!t?this._inputElementValue=this.selectedItem?this._getItemLabel(this.selectedItem):this.value||\"\":this.value=this._getItemValue(t)}this._detectAndDispatchChange(),this._clearSelectionRange(),this.filter=\"\"}get _propertyForValue(){return\"value\"}_onInput(e){this.opened||this._isClearButton(e)||this.autoOpenDisabled||this.open();const t=this._inputElementValue;this.filter===t?this._filterChanged(this.filter,this.itemValuePath,this.itemLabelPath):this.filter=t}_onChange(e){e.stopPropagation()}_itemLabelPathChanged(e){\"string\"!=typeof e&&console.error(\"You should set itemLabelPath to a valid string\")}_filterChanged(e,t,i){void 0!==e&&(this.$.dropdown._scrollIntoView(0),this.items?this.filteredItems=this._filterItems(this.items,e):this._filteredItemsChanged(this.filteredItems))}_loadingChanged(e){e&&(this._focusedIndex=-1)}_revertInputValue(){\"\"!==this.filter?this._inputElementValue=this.filter:this._revertInputValueToValue(),this._clearSelectionRange()}_revertInputValueToValue(){this.allowCustomValue&&!this.selectedItem?this._inputElementValue=this.value:this._inputElementValue=this._getItemLabel(this.selectedItem)}_selectedItemChanged(e){if(null==e)this.filteredItems&&(this.allowCustomValue||(this.value=\"\"),this._toggleHasValue(\"\"!==this.value),this._inputElementValue=this.value);else{const t=this._getItemValue(e);if(this.value!==t&&(this.value=t,this.value!==t))return;this._toggleHasValue(!0),this._inputElementValue=this._getItemLabel(e)}this.$.dropdown._selectedItem=e;const t=this._getOverlayItems();this.filteredItems&&t&&(this._focusedIndex=this.filteredItems.indexOf(e))}_valueChanged(e,t){\"\"===e&&void 0===t||(this._isValidValue(e)?(this._getItemValue(this.selectedItem)!==e&&this._selectItemForValue(e),!this.selectedItem&&this.allowCustomValue&&(this._inputElementValue=e),this._toggleHasValue(\"\"!==this.value)):this.selectedItem=null,this.filter=\"\",this._lastCommittedValue=void 0)}_detectAndDispatchChange(){this.value!==this._lastCommittedValue&&(this.dispatchEvent(new CustomEvent(\"change\",{bubbles:!0})),this._lastCommittedValue=this.value)}_itemsChanged(e,t){this._ensureItemsOrDataProvider((()=>{this.items=t})),e?this.filteredItems=e.slice(0):this.__previousItems&&(this.filteredItems=null);const i=this._indexOfValue(this.value,e);this._focusedIndex=i;const a=i>-1&&e[i];a&&(this.selectedItem=a),this.__previousItems=e}_filteredItemsChanged(e,t,i){this._setOverlayItems(e);const a=this._indexOfValue(this.value,e);null===this.selectedItem&&a>=0&&this._selectItemForValue(this.value);const n=this._inputElementValue;void 0===n||n===this._getItemLabel(this.selectedItem)?this._focusedIndex=this.$.dropdown.indexOfLabel(this._getItemLabel(this.selectedItem)):this._focusedIndex=this.$.dropdown.indexOfLabel(this.filter)}_filterItems(e,t){if(!e)return e;const i=e.filter((e=>(t=t?t.toString().toLowerCase():\"\",this._getItemLabel(e).toString().toLowerCase().indexOf(t)>-1)));return i}_selectItemForValue(e){const t=this._indexOfValue(e,this.filteredItems),i=this.selectedItem;t>=0?this.selectedItem=this.filteredItems[t]:this.dataProvider&&void 0===this.selectedItem?this.selectedItem=void 0:this.selectedItem=null,null===this.selectedItem&&null===i&&this._selectedItemChanged(this.selectedItem)}_getItemElements(){return Array.from(this.$.dropdown._scroller.querySelectorAll(\"vaadin-combo-box-item\"))}_getOverlayItems(){return this.$.dropdown._items}_setOverlayItems(e){this.$.dropdown.set(\"_items\",e)}_indexOfValue(e,t){return t&&this._isValidValue(e)?t.findIndex((t=>!(t instanceof Ro)&&this._getItemValue(t)===e)):-1}_isValidValue(e){return null!=e}_overlaySelectedItemChanged(e){e.stopPropagation(),e.detail.item instanceof Ro||(this.opened?(this._focusedIndex=this.filteredItems.indexOf(e.detail.item),this.close()):this.selectedItem!==e.detail.item&&(this.selectedItem=e.detail.item,this._detectAndDispatchChange()))}__onClearButtonMouseDown(e){e.preventDefault(),this.inputElement.focus()}_onFocusout(e){if(e.relatedTarget!==this.$.dropdown.$.overlay){if(!this.readonly&&!this._closeOnBlurIsPrevented){if(!this.opened&&this.allowCustomValue&&this._inputElementValue===this._lastCustomValue)return void delete this._lastCustomValue;this._closeOrCommit()}}else e.composedPath()[0].focus()}_onTouchend(e){this.clearElement&&e.composedPath()[0]===this.clearElement&&(e.preventDefault(),this._clear())}validate(){return!(this.invalid=!this.checkValidity())}checkValidity(){return super.checkValidity?super.checkValidity():!this.required||!!this.value}};class Xo extends(Go(Qo(Vn(n)))){static get is(){return\"vaadin-combo-box-light\"}static get template(){return o`\n      <style>\n        :host([opened]) {\n          pointer-events: auto;\n        }\n      </style>\n\n      <slot></slot>\n\n      <vaadin-combo-box-dropdown\n        id=\"dropdown\"\n        opened=\"[[opened]]\"\n        position-target=\"[[inputElement]]\"\n        restore-focus-on-close=\"[[__restoreFocusOnClose]]\"\n        restore-focus-node=\"[[inputElement]]\"\n        renderer=\"[[renderer]]\"\n        _focused-index=\"[[_focusedIndex]]\"\n        _item-id-path=\"[[itemIdPath]]\"\n        _item-label-path=\"[[itemLabelPath]]\"\n        loading=\"[[loading]]\"\n        theme=\"[[_theme]]\"\n      ></vaadin-combo-box-dropdown>\n    `}static get properties(){return{attrForValue:{type:String,value:\"value\"}}}get clearElement(){return this.querySelector(\".clear-button\")}ready(){super.ready(),this._toggleElement=this.querySelector(\".toggle-button\")}connectedCallback(){super.connectedCallback(),this._setInputElement(this.querySelector(\"vaadin-text-field,.input\")),this._revertInputValue()}checkValidity(){return this.inputElement.validate?this.inputElement.validate():super.checkValidity()}get _propertyForValue(){return l(this.attrForValue)}_isClearButton(e){return super._isClearButton(e)||\"input\"===e.type&&!e.isTrusted||\"clear-button\"===e.composedPath()[0].getAttribute(\"part\")}_onChange(e){super._onChange(e),this._isClearButton(e)&&this._clear()}}customElements.define(Xo.is,Xo);const Jo={};class es extends d{constructor(e){if(super(e),this.previousValue=Jo,e.type!==c.ELEMENT)throw new Error(\"renderer only supports binding to element\")}render(e,t){return u}update(e,[t,i]){var a;const n=this.previousValue===Jo;if(!this.hasChanged(i))return u;this.previousValue=Array.isArray(i)?Array.from(i):i;const o=e.element;if(n){const i=null===(a=e.options)||void 0===a?void 0:a.host;this.addRenderer(o,t,{host:i})}else this.runRenderer(o);return u}hasChanged(e){let t=!0;return Array.isArray(e)?Array.isArray(this.previousValue)&&this.previousValue.length===e.length&&e.every(((e,t)=>e===this.previousValue[t]))&&(t=!1):this.previousValue===e&&(t=!1),t}}const ts=h(class extends es{addRenderer(e,t,i){e.renderer=(e,a,n)=>{p(t.call(i.host,n.item,n,a),e,i)}}runRenderer(e){e.requestContentUpdate()}});Pn(\"vaadin-combo-box-item\",i`\n    :host {\n      padding: 0;\n    }\n    :host([focused]:not([disabled])) {\n      background-color: rgba(var(--rgb-primary-text-color, 0, 0, 0), 0.12);\n    }\n    :host([selected]:not([disabled])) {\n      background-color: transparent;\n      color: var(--mdc-theme-primary);\n      --mdc-ripple-color: var(--mdc-theme-primary);\n      --mdc-theme-text-primary-on-background: var(--mdc-theme-primary);\n    }\n    :host([selected]:not([disabled])):before {\n      background-color: var(--mdc-theme-primary);\n      opacity: 0.12;\n      content: \"\";\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n    }\n    :host([selected][focused]:not([disabled])):before {\n      opacity: 0.24;\n    }\n    :host(:hover:not([disabled])) {\n      background-color: transparent;\n    }\n    [part=\"content\"] {\n      width: 100%;\n    }\n    [part=\"checkmark\"] {\n      display: none;\n    }\n  `),v([w(\"ha-combo-box\")],(function(t,a){class n extends a{constructor(...e){super(...e),t(this)}}return{F:n,d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"placeholder\",value:void 0},{kind:\"field\",decorators:[f()],key:\"validationMessage\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({attribute:\"error-message\"})],key:\"errorMessage\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"invalid\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"icon\",value:void 0},{kind:\"field\",decorators:[f()],key:\"items\",value:void 0},{kind:\"field\",decorators:[f()],key:\"filteredItems\",value:void 0},{kind:\"field\",decorators:[f({attribute:\"allow-custom-value\",type:Boolean})],key:\"allowCustomValue\",value:void 0},{kind:\"field\",decorators:[f({attribute:\"item-value-path\"})],key:\"itemValuePath\",value:void 0},{kind:\"field\",decorators:[f({attribute:\"item-label-path\"})],key:\"itemLabelPath\",value:void 0},{kind:\"field\",decorators:[f({attribute:\"item-id-path\"})],key:\"itemIdPath\",value:void 0},{kind:\"field\",decorators:[f()],key:\"renderer\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean,reflect:!0,attribute:\"opened\"})],key:\"_opened\",value:void 0},{kind:\"field\",decorators:[g(\"vaadin-combo-box-light\",!0)],key:\"_comboBox\",value:void 0},{kind:\"field\",key:\"_overlayMutationObserver\",value:void 0},{kind:\"method\",key:\"open\",value:function(){this.updateComplete.then((()=>{var e;null===(e=this._comboBox)||void 0===e||e.open()}))}},{kind:\"method\",key:\"focus\",value:function(){this.updateComplete.then((()=>{var e,t;null===(e=this._comboBox)||void 0===e||null===(t=e.inputElement)||void 0===t||t.focus()}))}},{kind:\"method\",key:\"disconnectedCallback\",value:function(){_(y(n.prototype),\"disconnectedCallback\",this).call(this),this._overlayMutationObserver&&(this._overlayMutationObserver.disconnect(),this._overlayMutationObserver=void 0)}},{kind:\"get\",key:\"selectedItem\",value:function(){return this._comboBox.selectedItem}},{kind:\"method\",key:\"setInputValue\",value:function(e){this._comboBox.value=e}},{kind:\"method\",key:\"render\",value:function(){var e,t,i,a;return k`\n      <vaadin-combo-box-light\n        .itemValuePath=${this.itemValuePath}\n        .itemIdPath=${this.itemIdPath}\n        .itemLabelPath=${this.itemLabelPath}\n        .items=${this.items}\n        .value=${this.value||\"\"}\n        .filteredItems=${this.filteredItems}\n        .allowCustomValue=${this.allowCustomValue}\n        .disabled=${this.disabled}\n        .required=${this.required}\n        ${i=this.renderer||this._defaultRowRenderer,ts(i,a)}\n        @opened-changed=${this._openedChanged}\n        @filter-changed=${this._filterChanged}\n        @value-changed=${this._valueChanged}\n        attr-for-value=\"value\"\n      >\n        <ha-textfield\n          .label=${this.label}\n          .placeholder=${this.placeholder}\n          .disabled=${this.disabled}\n          .required=${this.required}\n          .validationMessage=${this.validationMessage}\n          .errorMessage=${this.errorMessage}\n          class=\"input\"\n          autocapitalize=\"none\"\n          autocomplete=\"off\"\n          autocorrect=\"off\"\n          spellcheck=\"false\"\n          .suffix=${k`<div style=\"width: 28px;\"></div>`}\n          .icon=${this.icon}\n          .invalid=${this.invalid}\n          .helper=${this.helper}\n          helperPersistent\n        >\n          <slot name=\"icon\" slot=\"leadingIcon\"></slot>\n        </ha-textfield>\n        ${this.value?k`<ha-svg-icon\n              aria-label=${null===(e=this.hass)||void 0===e?void 0:e.localize(\"ui.components.combo-box.clear\")}\n              class=\"clear-button\"\n              .path=${b}\n              @click=${this._clearValue}\n            ></ha-svg-icon>`:\"\"}\n        <ha-svg-icon\n          aria-label=${null===(t=this.hass)||void 0===t?void 0:t.localize(\"ui.components.combo-box.show\")}\n          class=\"toggle-button\"\n          .path=${this._opened?x:$}\n          @click=${this._toggleOpen}\n        ></ha-svg-icon>\n      </vaadin-combo-box-light>\n    `}},{kind:\"field\",key:\"_defaultRowRenderer\",value(){return e=>k`<mwc-list-item>\n      ${this.itemLabelPath?e[this.itemLabelPath]:e}\n    </mwc-list-item>`}},{kind:\"method\",key:\"_clearValue\",value:function(t){t.stopPropagation(),e(this,\"value-changed\",{value:void 0})}},{kind:\"method\",key:\"_toggleOpen\",value:function(e){var t,i;this._opened?(null===(t=this._comboBox)||void 0===t||t.close(),e.stopPropagation()):null===(i=this._comboBox)||void 0===i||i.inputElement.focus()}},{kind:\"method\",key:\"_openedChanged\",value:function(t){const i=t.detail.value;if(setTimeout((()=>{this._opened=i}),0),e(this,t.type,t.detail),i&&\"MutationObserver\"in window&&!this._overlayMutationObserver){const e=document.querySelector(\"vaadin-combo-box-overlay\");if(!e)return;this._overlayMutationObserver=new MutationObserver((t=>{t.forEach((t=>{var i;\"attributes\"===t.type&&\"inert\"===t.attributeName?(null===(i=this._overlayMutationObserver)||void 0===i||i.disconnect(),this._overlayMutationObserver=void 0,e.inert=!1):\"childList\"===t.type&&t.removedNodes.forEach((e=>{var t;\"VAADIN-COMBO-BOX-OVERLAY\"===e.nodeName&&(null===(t=this._overlayMutationObserver)||void 0===t||t.disconnect(),this._overlayMutationObserver=void 0)}))}))})),this._overlayMutationObserver.observe(e,{attributes:!0}),this._overlayMutationObserver.observe(document.body,{childList:!0})}}},{kind:\"method\",key:\"_filterChanged\",value:function(t){e(this,t.type,t.detail,{composed:!1})}},{kind:\"method\",key:\"_valueChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;i!==this.value&&e(this,\"value-changed\",{value:i})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      :host {\n        display: block;\n        width: 100%;\n      }\n      vaadin-combo-box-light {\n        position: relative;\n      }\n      ha-textfield {\n        width: 100%;\n      }\n      ha-textfield > ha-icon-button {\n        --mdc-icon-button-size: 24px;\n        padding: 2px;\n        color: var(--secondary-text-color);\n      }\n      ha-svg-icon {\n        color: var(--input-dropdown-icon-color);\n        position: absolute;\n        cursor: pointer;\n      }\n      .toggle-button {\n        right: 12px;\n        top: -10px;\n        inset-inline-start: initial;\n        inset-inline-end: 12px;\n        direction: var(--direction);\n      }\n      :host([opened]) .toggle-button {\n        color: var(--primary-color);\n      }\n      .clear-button {\n        --mdc-icon-size: 20px;\n        top: -7px;\n        right: 36px;\n        inset-inline-start: initial;\n        inset-inline-end: 36px;\n        direction: var(--direction);\n      }\n    `}}]}}),m);const is=[\"unavailable\",\"unknown\"],as=e=>zn(e.entity_id),ns=i`\n  ha-state-icon[data-domain=\"alert\"][data-state=\"on\"],\n  ha-state-icon[data-domain=\"automation\"][data-state=\"on\"],\n  ha-state-icon[data-domain=\"binary_sensor\"][data-state=\"on\"],\n  ha-state-icon[data-domain=\"calendar\"][data-state=\"on\"],\n  ha-state-icon[data-domain=\"camera\"][data-state=\"streaming\"],\n  ha-state-icon[data-domain=\"cover\"][data-state=\"open\"],\n  ha-state-icon[data-domain=\"device_tracker\"][data-state=\"home\"],\n  ha-state-icon[data-domain=\"fan\"][data-state=\"on\"],\n  ha-state-icon[data-domain=\"humidifier\"][data-state=\"on\"],\n  ha-state-icon[data-domain=\"light\"][data-state=\"on\"],\n  ha-state-icon[data-domain=\"input_boolean\"][data-state=\"on\"],\n  ha-state-icon[data-domain=\"lock\"][data-state=\"unlocked\"],\n  ha-state-icon[data-domain=\"media_player\"][data-state=\"on\"],\n  ha-state-icon[data-domain=\"media_player\"][data-state=\"paused\"],\n  ha-state-icon[data-domain=\"media_player\"][data-state=\"playing\"],\n  ha-state-icon[data-domain=\"remote\"][data-state=\"on\"],\n  ha-state-icon[data-domain=\"script\"][data-state=\"on\"],\n  ha-state-icon[data-domain=\"sun\"][data-state=\"above_horizon\"],\n  ha-state-icon[data-domain=\"switch\"][data-state=\"on\"],\n  ha-state-icon[data-domain=\"timer\"][data-state=\"active\"],\n  ha-state-icon[data-domain=\"vacuum\"][data-state=\"cleaning\"],\n  ha-state-icon[data-domain=\"group\"][data-state=\"on\"],\n  ha-state-icon[data-domain=\"group\"][data-state=\"home\"],\n  ha-state-icon[data-domain=\"group\"][data-state=\"open\"],\n  ha-state-icon[data-domain=\"group\"][data-state=\"locked\"],\n  ha-state-icon[data-domain=\"group\"][data-state=\"problem\"] {\n    color: var(--paper-item-icon-active-color, #fdd835);\n  }\n\n  ha-state-icon[data-domain=\"climate\"][data-state=\"cooling\"] {\n    color: var(--cool-color, var(--state-climate-cool-color));\n  }\n\n  ha-state-icon[data-domain=\"climate\"][data-state=\"heating\"] {\n    color: var(--heat-color, var(--state-climate-heat-color));\n  }\n\n  ha-state-icon[data-domain=\"climate\"][data-state=\"drying\"] {\n    color: var(--dry-color, var(--state-climate-dry-color));\n  }\n\n  ha-state-icon[data-domain=\"alarm_control_panel\"] {\n    color: var(--alarm-color-armed, var(--label-badge-red));\n  }\n  ha-state-icon[data-domain=\"alarm_control_panel\"][data-state=\"disarmed\"] {\n    color: var(--alarm-color-disarmed, var(--label-badge-green));\n  }\n  ha-state-icon[data-domain=\"alarm_control_panel\"][data-state=\"pending\"],\n  ha-state-icon[data-domain=\"alarm_control_panel\"][data-state=\"arming\"] {\n    color: var(--alarm-color-pending, var(--label-badge-yellow));\n    animation: pulse 1s infinite;\n  }\n  ha-state-icon[data-domain=\"alarm_control_panel\"][data-state=\"triggered\"] {\n    color: var(--alarm-color-triggered, var(--label-badge-red));\n    animation: pulse 1s infinite;\n  }\n\n  @keyframes pulse {\n    0% {\n      opacity: 1;\n    }\n    50% {\n      opacity: 0;\n    }\n    100% {\n      opacity: 1;\n    }\n  }\n\n  ha-state-icon[data-domain=\"plant\"][data-state=\"problem\"] {\n    color: var(--state-icon-error-color);\n  }\n\n  /* Color the icon if unavailable */\n  ha-state-icon[data-state=\"unavailable\"] {\n    color: var(--state-unavailable-color);\n  }\n`,os=(e,t)=>e.callWS({type:\"auth/sign_path\",path:t}),ss=C,rs={alert:A,air_quality:I,automation:E,calendar:z,camera:S,climate:L,configurator:T,conversation:O,counter:P,fan:M,google_assistant:F,group:D,homeassistant:B,homekit:N,image_processing:V,input_button:j,input_datetime:q,input_number:R,input_select:U,input_text:H,light:G,mailbox:W,notify:K,number:R,persistent_notification:Y,person:Z,plant:Q,proximity:X,remote:J,scene:ee,script:te,select:U,sensor:ie,siren:ae,simple_alarm:Y,sun:ne,timer:oe,updater:se,vacuum:re,water_heater:le,weather:de,zone:ce},ls={apparent_power:ue,aqi:I,carbon_dioxide:he,carbon_monoxide:pe,current:ve,date:z,energy:me,frequency:fe,gas:ge,humidity:_e,illuminance:ye,monetary:ke,nitrogen_dioxide:be,nitrogen_monoxide:be,nitrous_oxide:be,ozone:be,pm1:be,pm10:be,pm25:be,power:ue,power_factor:xe,pressure:$e,reactive_power:ue,signal_strength:we,sulphur_dioxide:be,temperature:le,timestamp:Ce,volatile_organic_compounds:be,voltage:fe},ds=(e,t)=>0!=(e.supported_features&t),cs=e=>ds(e,4)&&\"number\"==typeof e.in_progress,us=e=>(e=>cs(e.attributes))(e)||!!e.attributes.in_progress;let hs,ps;!function(e){e.language=\"language\",e.system=\"system\",e.comma_decimal=\"comma_decimal\",e.decimal_comma=\"decimal_comma\",e.space_comma=\"space_comma\",e.none=\"none\"}(hs||(hs={})),function(e){e.language=\"language\",e.system=\"system\",e.am_pm=\"12\",e.twenty_four=\"24\"}(ps||(ps={}));const vs={\"clear-night\":Ie,cloudy:de,exceptional:Ee,fog:ze,hail:Se,lightning:Le,\"lightning-rainy\":Te,partlycloudy:Oe,pouring:Pe,rainy:Me,snowy:Fe,\"snowy-rainy\":De,sunny:Be,windy:Ne,\"windy-variant\":Ve};i`\n  .rain {\n    fill: var(--weather-icon-rain-color, #30b3ff);\n  }\n  .sun {\n    fill: var(--weather-icon-sun-color, #fdd93c);\n  }\n  .moon {\n    fill: var(--weather-icon-moon-color, #fcf497);\n  }\n  .cloud-back {\n    fill: var(--weather-icon-cloud-back-color, #d4d4d4);\n  }\n  .cloud-front {\n    fill: var(--weather-icon-cloud-front-color, #f9f9f9);\n  }\n`;const ms={10:ai,20:ni,30:oi,40:si,50:ri,60:li,70:di,80:ci,90:ui,100:Mt},fs={10:hi,20:pi,30:vi,40:mi,50:fi,60:gi,70:_i,80:yi,90:ki,100:Ft},gs=(e,t)=>{const i=Number(e);if(isNaN(i))return\"off\"===e?Mt:\"on\"===e?Jt:ei;const a=10*Math.round(i/10);return t&&i>=10?fs[a]:t?ti:i<=5?ii:ms[a]},_s=e=>{const t=null==e?void 0:e.attributes.device_class;if(t&&t in ls)return ls[t];if(\"battery\"===t)return e?((e,t)=>{const i=e.state,a=t&&\"on\"===t.state;return gs(i,a)})(e):Mt;const i=null==e?void 0:e.attributes.unit_of_measurement;return\"°C\"===i||\"°F\"===i?le:void 0},ys=(e,t,i)=>{const a=void 0!==i?i:null==t?void 0:t.state;switch(e){case\"alarm_control_panel\":return(e=>{switch(e){case\"armed_away\":return Ye;case\"armed_vacation\":return Ke;case\"armed_home\":return We;case\"armed_night\":return Ge;case\"armed_custom_bypass\":return He;case\"pending\":return Ue;case\"triggered\":return Re;case\"disarmed\":return qe;default:return je}})(a);case\"binary_sensor\":return((e,t)=>{const i=\"off\"===e;switch(null==t?void 0:t.attributes.device_class){case\"battery\":return i?Mt:Dt;case\"battery_charging\":return i?Mt:Ft;case\"carbon_monoxide\":return i?Ot:Pt;case\"cold\":return i?le:Tt;case\"connectivity\":return i?St:Lt;case\"door\":return i?Et:zt;case\"garage_door\":return i?At:It;case\"power\":case\"plug\":return i?ct:ut;case\"gas\":case\"problem\":case\"safety\":case\"tamper\":return i?wt:Ct;case\"smoke\":return i?xt:$t;case\"heat\":return i?le:bt;case\"light\":return i?ye:kt;case\"lock\":return i?_t:yt;case\"moisture\":return i?ft:gt;case\"motion\":return i?vt:mt;case\"occupancy\":case\"presence\":return i?lt:dt;case\"opening\":return i?ht:pt;case\"running\":return i?st:rt;case\"sound\":return i?nt:ot;case\"update\":return i?it:at;case\"vibration\":return i?et:tt;case\"window\":return i?Xe:Je;default:return i?Ze:Qe}})(a,t);case\"button\":switch(null==t?void 0:t.attributes.device_class){case\"restart\":return Ni;case\"update\":return at;default:return j}case\"cover\":return((e,t)=>{const i=\"closed\"!==e;switch(null==t?void 0:t.attributes.device_class){case\"garage\":switch(e){case\"opening\":return Nt;case\"closing\":return Bt;case\"closed\":return At;default:return It}case\"gate\":switch(e){case\"opening\":case\"closing\":return Xt;case\"closed\":return Qt;default:return Zt}case\"door\":return i?zt:Et;case\"damper\":return i?Kt:Yt;case\"shutter\":switch(e){case\"opening\":return Nt;case\"closing\":return Bt;case\"closed\":return Wt;default:return Gt}case\"curtain\":switch(e){case\"opening\":return Ht;case\"closing\":return Ut;case\"closed\":return Rt;default:return qt}case\"blind\":case\"shade\":switch(e){case\"opening\":return Nt;case\"closing\":return Bt;case\"closed\":return jt;default:return Vt}case\"window\":switch(e){case\"opening\":return Nt;case\"closing\":return Bt;case\"closed\":return Xe;default:return Je}}switch(e){case\"opening\":return Nt;case\"closing\":return Bt;case\"closed\":return Xe;default:return Je}})(a,t);case\"device_tracker\":return\"router\"===(null==t?void 0:t.attributes.source_type)?\"home\"===a?Pi:Mi:[\"bluetooth\",\"bluetooth_le\"].includes(null==t?void 0:t.attributes.source_type)?\"home\"===a?Fi:Di:\"not_home\"===a?Bi:Z;case\"humidifier\":return i&&\"off\"===i?Ti:Oi;case\"input_boolean\":return\"on\"===a?Si:Li;case\"input_datetime\":if(null==t||!t.attributes.has_date)return Ce;if(!t.attributes.has_time)return z;break;case\"lock\":switch(a){case\"unlocked\":return yt;case\"jammed\":return zi;case\"locking\":case\"unlocking\":return Ei;default:return _t}case\"media_player\":return\"playing\"===a?Ai:Ii;case\"switch\":switch(null==t?void 0:t.attributes.device_class){case\"outlet\":return\"on\"===a?ut:ct;case\"switch\":return\"on\"===a?wi:Ci;default:return wi}case\"sensor\":{const e=_s(t);if(e)return e;break}case\"sun\":return\"above_horizon\"===(null==t?void 0:t.state)?rs[e]:Ie;case\"switch_as_x\":return $i;case\"threshold\":return xi;case\"update\":return\"on\"===a?us(t)?bi:at:it;case\"weather\":return((e,t)=>e?t&&\"partlycloudy\"===e?Ae:vs[e]:void 0)(null==t?void 0:t.state)}if(e in rs)return rs[e]},ks=e=>e?((e,t,i)=>ys(e,t,i)||(console.warn(`Unable to find icon for domain ${e}`),ss))(zn(e.entity_id),e):ss;v([w(\"ha-state-icon\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"state\",value:void 0},{kind:\"field\",decorators:[f()],key:\"icon\",value:void 0},{kind:\"method\",key:\"render\",value:function(){var e,t;return this.icon||null!==(e=this.state)&&void 0!==e&&e.attributes.icon?k`<ha-icon\n        .icon=${this.icon||(null===(t=this.state)||void 0===t?void 0:t.attributes.icon)}\n      ></ha-icon>`:k`<ha-svg-icon .path=${ks(this.state)}></ha-svg-icon>`}}]}}),m);let bs=v(null,(function(e,t){class a extends t{constructor(...t){super(...t),e(this)}}return{F:a,d:[{kind:\"field\",key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"stateObj\",value:void 0},{kind:\"field\",decorators:[f()],key:\"overrideIcon\",value:void 0},{kind:\"field\",decorators:[f()],key:\"overrideImage\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"stateColor\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean,reflect:!0,attribute:\"icon\"})],key:\"_showIcon\",value:()=>!0},{kind:\"field\",decorators:[Vi()],key:\"_iconStyle\",value:()=>({})},{kind:\"method\",key:\"render\",value:function(){const e=this.stateObj;if(!e&&!this.overrideIcon&&!this.overrideImage)return k`<div class=\"missing\">\n        <ha-svg-icon .path=${A}></ha-svg-icon>\n      </div>`;if(!this._showIcon)return k``;const t=e?as(e):void 0;return k`<ha-state-icon\n      style=${ji(this._iconStyle)}\n      data-domain=${qi(this.stateColor||\"light\"===t&&!1!==this.stateColor?t:void 0)}\n      data-state=${e?(e=>{if(is.includes(e.state))return e.state;const t=e.entity_id.split(\".\")[0];let i=e.state;return\"climate\"===t&&(i=e.attributes.hvac_action),i})(e):\"\"}\n      .icon=${this.overrideIcon}\n      .state=${e}\n    ></ha-state-icon>`}},{kind:\"method\",key:\"willUpdate\",value:function(e){if(_(y(a.prototype),\"willUpdate\",this).call(this,e),!e.has(\"stateObj\")&&!e.has(\"overrideImage\")&&!e.has(\"overrideIcon\"))return;const t=this.stateObj,i={},n={backgroundImage:\"\"};if(this._showIcon=!0,t&&void 0===this.overrideImage)if(!t.attributes.entity_picture_local&&!t.attributes.entity_picture||this.overrideIcon){if(\"on\"===t.state&&(!1!==this.stateColor&&t.attributes.rgb_color&&(i.color=`rgb(${t.attributes.rgb_color.join(\",\")})`),t.attributes.brightness&&!1!==this.stateColor)){const e=t.attributes.brightness;if(\"number\"!=typeof e){const i=`Type error: state-badge expected number, but type of ${t.entity_id}.attributes.brightness is ${typeof e} (${e})`;console.warn(i)}i.filter=`brightness(${(e+245)/5}%)`}}else{let e=t.attributes.entity_picture_local||t.attributes.entity_picture;this.hass&&(e=this.hass.hassUrl(e)),\"camera\"===zn(t.entity_id)&&(e=`${e}&width=${80}&height=${80}`),n.backgroundImage=`url(${e})`,this._showIcon=!1}else if(this.overrideImage){let e=this.overrideImage;this.hass&&(e=this.hass.hassUrl(e)),n.backgroundImage=`url(${e})`,this._showIcon=!1}this._iconStyle=i,Object.assign(this.style,n)}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[ns,i`\n        :host {\n          position: relative;\n          display: inline-block;\n          width: 40px;\n          color: var(--paper-item-icon-color, #44739e);\n          border-radius: 50%;\n          height: 40px;\n          text-align: center;\n          background-size: cover;\n          line-height: 40px;\n          vertical-align: middle;\n          box-sizing: border-box;\n        }\n        :host(:focus) {\n          outline: none;\n        }\n        :host(:not([icon]):focus) {\n          border: 2px solid var(--divider-color);\n        }\n        :host([icon]:focus) {\n          background: var(--divider-color);\n        }\n        ha-state-icon {\n          transition: color 0.3s ease-in-out, filter 0.3s ease-in-out;\n        }\n        .missing {\n          color: #fce588;\n        }\n      `]}}]}}),m);customElements.define(\"state-badge\",bs);const xs=e=>k`<mwc-list-item graphic=\"avatar\" .twoline=${!!e.entity_id}>\n    ${e.state?k`<state-badge slot=\"graphic\" .stateObj=${e}></state-badge>`:\"\"}\n    <span>${e.friendly_name}</span>\n    <span slot=\"secondary\">${e.entity_id}</span>\n  </mwc-list-item>`;v([w(\"ha-entity-picker\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"autofocus\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean,attribute:\"allow-custom-entity\"})],key:\"allowCustomEntity\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"include-domains\"})],key:\"includeDomains\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"exclude-domains\"})],key:\"excludeDomains\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"include-device-classes\"})],key:\"includeDeviceClasses\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"include-unit-of-measurement\"})],key:\"includeUnitOfMeasurement\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"include-entities\"})],key:\"includeEntities\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"exclude-entities\"})],key:\"excludeEntities\",value:void 0},{kind:\"field\",decorators:[f()],key:\"entityFilter\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"hideClearIcon\",value:()=>!1},{kind:\"field\",decorators:[Vi()],key:\"_opened\",value:()=>!1},{kind:\"field\",decorators:[g(\"ha-combo-box\",!0)],key:\"comboBox\",value:void 0},{kind:\"method\",key:\"open\",value:function(){this.updateComplete.then((()=>{var e;null===(e=this.comboBox)||void 0===e||e.open()}))}},{kind:\"method\",key:\"focus\",value:function(){this.updateComplete.then((()=>{var e;null===(e=this.comboBox)||void 0===e||e.focus()}))}},{kind:\"field\",key:\"_initedStates\",value:()=>!1},{kind:\"field\",key:\"_states\",value:()=>[]},{kind:\"field\",key:\"_getStates\",value(){return Ri(((e,t,i,a,n,o,s,r,l)=>{let d=[];if(!t)return[];let c=Object.keys(t.states);return c.length?r?(c=c.filter((e=>this.includeEntities.includes(e))),c.map((e=>({...t.states[e],friendly_name:Sn(t.states[e])||e}))).sort(((e,t)=>Qa(e.friendly_name,t.friendly_name)))):(l&&(c=c.filter((e=>!l.includes(e)))),i&&(c=c.filter((e=>i.includes(zn(e))))),a&&(c=c.filter((e=>!a.includes(zn(e))))),d=c.map((e=>({...t.states[e],friendly_name:Sn(t.states[e])||e}))).sort(((e,t)=>Qa(e.friendly_name,t.friendly_name))),o&&(d=d.filter((e=>e.entity_id===this.value||e.attributes.device_class&&o.includes(e.attributes.device_class)))),s&&(d=d.filter((e=>e.entity_id===this.value||e.attributes.unit_of_measurement&&s.includes(e.attributes.unit_of_measurement)))),n&&(d=d.filter((e=>e.entity_id===this.value||n(e)))),d.length?d:[{entity_id:\"\",state:\"\",last_changed:\"\",last_updated:\"\",context:{id:\"\",user_id:null,parent_id:null},friendly_name:this.hass.localize(\"ui.components.entity.entity-picker.no_match\"),attributes:{friendly_name:this.hass.localize(\"ui.components.entity.entity-picker.no_match\"),icon:\"mdi:magnify\"}}]):[{entity_id:\"\",state:\"\",last_changed:\"\",last_updated:\"\",context:{id:\"\",user_id:null,parent_id:null},friendly_name:this.hass.localize(\"ui.components.entity.entity-picker.no_entities\"),attributes:{friendly_name:this.hass.localize(\"ui.components.entity.entity-picker.no_entities\"),icon:\"mdi:magnify\"}}]}))}},{kind:\"method\",key:\"shouldUpdate\",value:function(e){return!!(e.has(\"value\")||e.has(\"label\")||e.has(\"disabled\"))||!(!e.has(\"_opened\")&&this._opened)}},{kind:\"method\",key:\"willUpdate\",value:function(e){(!this._initedStates||e.has(\"_opened\")&&this._opened)&&(this._states=this._getStates(this._opened,this.hass,this.includeDomains,this.excludeDomains,this.entityFilter,this.includeDeviceClasses,this.includeUnitOfMeasurement,this.includeEntities,this.excludeEntities),this._initedStates&&(this.comboBox.filteredItems=this._states),this._initedStates=!0)}},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-combo-box\n        item-value-path=\"entity_id\"\n        item-label-path=\"friendly_name\"\n        .hass=${this.hass}\n        .value=${this._value}\n        .label=${void 0===this.label?this.hass.localize(\"ui.components.entity.entity-picker.entity\"):this.label}\n        .helper=${this.helper}\n        .allowCustomValue=${this.allowCustomEntity}\n        .filteredItems=${this._states}\n        .renderer=${xs}\n        .required=${this.required}\n        @opened-changed=${this._openedChanged}\n        @value-changed=${this._valueChanged}\n        @filter-changed=${this._filterChanged}\n      >\n      </ha-combo-box>\n    `}},{kind:\"get\",key:\"_value\",value:function(){return this.value||\"\"}},{kind:\"method\",key:\"_openedChanged\",value:function(e){this._opened=e.detail.value}},{kind:\"method\",key:\"_valueChanged\",value:function(e){e.stopPropagation();const t=e.detail.value;t!==this._value&&this._setValue(t)}},{kind:\"method\",key:\"_filterChanged\",value:function(e){const t=e.detail.value.toLowerCase();this.comboBox.filteredItems=this._states.filter((e=>e.entity_id.toLowerCase().includes(t)||Sn(e).toLowerCase().includes(t)))}},{kind:\"method\",key:\"_setValue\",value:function(t){this.value=t,setTimeout((()=>{e(this,\"value-changed\",{value:t}),e(this,\"change\")}),0)}}]}}),m);const $s=[\"scene\"];function ws(e){return void 0===e||Array.isArray(e)?e:[e]}function Cs(e){return null==e}v([w(\"ha-automation-action-activate_scene\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"action\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{service:\"scene.turn_on\",target:{entity_id:\"\"},metadata:{}}}},{kind:\"method\",key:\"render\",value:function(){let e;var t;\"scene\"in this.action?e=this.action.scene:e=null===(t=this.action.target)||void 0===t?void 0:t.entity_id;return k`\n      <ha-entity-picker\n        .hass=${this.hass}\n        .value=${e}\n        @value-changed=${this._entityPicked}\n        .includeDomains=${$s}\n        allow-custom-entity\n      ></ha-entity-picker>\n    `}},{kind:\"method\",key:\"_entityPicked\",value:function(t){t.stopPropagation(),e(this,\"value-changed\",{value:{service:\"scene.turn_on\",target:{entity_id:t.detail.value},metadata:{}}})}}]}}),m),v([w(\"ha-automation-action-choose\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"action\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{choose:[{conditions:[],sequence:[]}],default:[]}}},{kind:\"method\",key:\"render\",value:function(){const e=this.action;return k`\n      ${(e.choose?ws(e.choose):[]).map(((e,t)=>k`<ha-card>\n          <ha-icon-button\n            .idx=${t}\n            @click=${this._removeOption}\n            .label=${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.choose.remove_option\")}\n            .path=${Ui}\n          ></ha-icon-button>\n          <div class=\"card-content\">\n            <h2>\n              ${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.choose.option\",\"number\",t+1)}:\n            </h2>\n            <h3>\n              ${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.choose.conditions\")}:\n            </h3>\n            <ha-automation-condition\n              .conditions=${e.conditions}\n              .hass=${this.hass}\n              .idx=${t}\n              @value-changed=${this._conditionChanged}\n            ></ha-automation-condition>\n            <h3>\n              ${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.choose.sequence\")}:\n            </h3>\n            <ha-form\n              .hass=${this.hass}\n              .schema=${[{name:\"sequence\",selector:{action:{}}}]}\n              .data=${e}\n              .idx=${t}\n              @value-changed=${this._actionChanged}\n            ></ha-form>\n          </div>\n        </ha-card>`))}\n      <ha-card outlined>\n        <div class=\"card-actions add-card\">\n          <mwc-button @click=${this._addOption}>\n            ${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.choose.add_option\")}\n          </mwc-button>\n        </div>\n      </ha-card>\n      <h2>\n        ${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.choose.default\")}:\n      </h2>\n      <ha-automation-action\n        .actions=${e.default||[]}\n        @value-changed=${this._defaultChanged}\n        .hass=${this.hass}\n      ></ha-automation-action>\n    `}},{kind:\"method\",key:\"_conditionChanged\",value:function(t){t.stopPropagation();const i=t.detail.value,a=t.target.idx,n=this.action.choose?[...ws(this.action.choose)]:[];n[a].conditions=i,e(this,\"value-changed\",{value:{...this.action,choose:n}})}},{kind:\"method\",key:\"_actionChanged\",value:function(t){t.stopPropagation();const i=t.detail.value.sequence,a=t.target.idx,n=this.action.choose?[...ws(this.action.choose)]:[];n[a].sequence=i,e(this,\"value-changed\",{value:{...this.action,choose:n}})}},{kind:\"method\",key:\"_addOption\",value:function(){const t=this.action.choose?[...ws(this.action.choose)]:[];t.push({conditions:[],sequence:[]}),e(this,\"value-changed\",{value:{...this.action,choose:t}})}},{kind:\"method\",key:\"_removeOption\",value:function(t){const i=t.currentTarget.idx,a=this.action.choose?[...ws(this.action.choose)]:[];a.splice(i,1),e(this,\"value-changed\",{value:{...this.action,choose:a}})}},{kind:\"method\",key:\"_defaultChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;e(this,\"value-changed\",{value:{...this.action,default:i}})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[Hi,i`\n        ha-card {\n          margin-top: 16px;\n        }\n        .add-card mwc-button {\n          display: block;\n          text-align: center;\n        }\n        ha-icon-button {\n          position: absolute;\n          right: 0;\n          padding: 4px;\n        }\n        ha-form::part(root) {\n          overflow: visible;\n        }\n      `]}}]}}),m);var As=function(e,t){var i,a=\"\";for(i=0;i<t;i+=1)a+=e;return a},Is=function(e){return 0===e&&Number.NEGATIVE_INFINITY===1/e},Es={isNothing:Cs,isObject:function(e){return\"object\"==typeof e&&null!==e},toArray:function(e){return Array.isArray(e)?e:Cs(e)?[]:[e]},repeat:As,isNegativeZero:Is,extend:function(e,t){var i,a,n,o;if(t)for(i=0,a=(o=Object.keys(t)).length;i<a;i+=1)e[n=o[i]]=t[n];return e}};function zs(e,t){var i=\"\",a=e.reason||\"(unknown reason)\";return e.mark?(e.mark.name&&(i+='in \"'+e.mark.name+'\" '),i+=\"(\"+(e.mark.line+1)+\":\"+(e.mark.column+1)+\")\",!t&&e.mark.snippet&&(i+=\"\\n\\n\"+e.mark.snippet),a+\" \"+i):a}function Ss(e,t){Error.call(this),this.name=\"YAMLException\",this.reason=e,this.mark=t,this.message=zs(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack||\"\"}Ss.prototype=Object.create(Error.prototype),Ss.prototype.constructor=Ss,Ss.prototype.toString=function(e){return this.name+\": \"+zs(this,e)};var Ls=Ss;function Ts(e,t,i,a,n){var o=\"\",s=\"\",r=Math.floor(n/2)-1;return a-t>r&&(t=a-r+(o=\" ... \").length),i-a>r&&(i=a+r-(s=\" ...\").length),{str:o+e.slice(t,i).replace(/\\t/g,\"→\")+s,pos:a-t+o.length}}function Os(e,t){return Es.repeat(\" \",t-e.length)+e}var Ps=function(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),\"number\"!=typeof t.indent&&(t.indent=1),\"number\"!=typeof t.linesBefore&&(t.linesBefore=3),\"number\"!=typeof t.linesAfter&&(t.linesAfter=2);for(var i,a=/\\r?\\n|\\r|\\0/g,n=[0],o=[],s=-1;i=a.exec(e.buffer);)o.push(i.index),n.push(i.index+i[0].length),e.position<=i.index&&s<0&&(s=n.length-2);s<0&&(s=n.length-1);var r,l,d=\"\",c=Math.min(e.line+t.linesAfter,o.length).toString().length,u=t.maxLength-(t.indent+c+3);for(r=1;r<=t.linesBefore&&!(s-r<0);r++)l=Ts(e.buffer,n[s-r],o[s-r],e.position-(n[s]-n[s-r]),u),d=Es.repeat(\" \",t.indent)+Os((e.line-r+1).toString(),c)+\" | \"+l.str+\"\\n\"+d;for(l=Ts(e.buffer,n[s],o[s],e.position,u),d+=Es.repeat(\" \",t.indent)+Os((e.line+1).toString(),c)+\" | \"+l.str+\"\\n\",d+=Es.repeat(\"-\",t.indent+c+3+l.pos)+\"^\\n\",r=1;r<=t.linesAfter&&!(s+r>=o.length);r++)l=Ts(e.buffer,n[s+r],o[s+r],e.position-(n[s]-n[s+r]),u),d+=Es.repeat(\" \",t.indent)+Os((e.line+r+1).toString(),c)+\" | \"+l.str+\"\\n\";return d.replace(/\\n$/,\"\")},Ms=[\"kind\",\"multi\",\"resolve\",\"construct\",\"instanceOf\",\"predicate\",\"represent\",\"representName\",\"defaultStyle\",\"styleAliases\"],Fs=[\"scalar\",\"sequence\",\"mapping\"];var Ds=function(e,t){if(t=t||{},Object.keys(t).forEach((function(t){if(-1===Ms.indexOf(t))throw new Ls('Unknown option \"'+t+'\" is met in definition of \"'+e+'\" YAML type.')})),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=function(e){var t={};return null!==e&&Object.keys(e).forEach((function(i){e[i].forEach((function(e){t[String(e)]=i}))})),t}(t.styleAliases||null),-1===Fs.indexOf(this.kind))throw new Ls('Unknown kind \"'+this.kind+'\" is specified for \"'+e+'\" YAML type.')};function Bs(e,t){var i=[];return e[t].forEach((function(e){var t=i.length;i.forEach((function(i,a){i.tag===e.tag&&i.kind===e.kind&&i.multi===e.multi&&(t=a)})),i[t]=e})),i}function Ns(e){return this.extend(e)}Ns.prototype.extend=function(e){var t=[],i=[];if(e instanceof Ds)i.push(e);else if(Array.isArray(e))i=i.concat(e);else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new Ls(\"Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })\");e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(i=i.concat(e.explicit))}t.forEach((function(e){if(!(e instanceof Ds))throw new Ls(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\");if(e.loadKind&&\"scalar\"!==e.loadKind)throw new Ls(\"There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.\");if(e.multi)throw new Ls(\"There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.\")})),i.forEach((function(e){if(!(e instanceof Ds))throw new Ls(\"Specified list of YAML types (or a single Type object) contains a non-Type object.\")}));var a=Object.create(Ns.prototype);return a.implicit=(this.implicit||[]).concat(t),a.explicit=(this.explicit||[]).concat(i),a.compiledImplicit=Bs(a,\"implicit\"),a.compiledExplicit=Bs(a,\"explicit\"),a.compiledTypeMap=function(){var e,t,i={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function a(e){e.multi?(i.multi[e.kind].push(e),i.multi.fallback.push(e)):i[e.kind][e.tag]=i.fallback[e.tag]=e}for(e=0,t=arguments.length;e<t;e+=1)arguments[e].forEach(a);return i}(a.compiledImplicit,a.compiledExplicit),a};var Vs=new Ns({explicit:[new Ds(\"tag:yaml.org,2002:str\",{kind:\"scalar\",construct:function(e){return null!==e?e:\"\"}}),new Ds(\"tag:yaml.org,2002:seq\",{kind:\"sequence\",construct:function(e){return null!==e?e:[]}}),new Ds(\"tag:yaml.org,2002:map\",{kind:\"mapping\",construct:function(e){return null!==e?e:{}}})]});var js=new Ds(\"tag:yaml.org,2002:null\",{kind:\"scalar\",resolve:function(e){if(null===e)return!0;var t=e.length;return 1===t&&\"~\"===e||4===t&&(\"null\"===e||\"Null\"===e||\"NULL\"===e)},construct:function(){return null},predicate:function(e){return null===e},represent:{canonical:function(){return\"~\"},lowercase:function(){return\"null\"},uppercase:function(){return\"NULL\"},camelcase:function(){return\"Null\"},empty:function(){return\"\"}},defaultStyle:\"lowercase\"});var qs=new Ds(\"tag:yaml.org,2002:bool\",{kind:\"scalar\",resolve:function(e){if(null===e)return!1;var t=e.length;return 4===t&&(\"true\"===e||\"True\"===e||\"TRUE\"===e)||5===t&&(\"false\"===e||\"False\"===e||\"FALSE\"===e)},construct:function(e){return\"true\"===e||\"True\"===e||\"TRUE\"===e},predicate:function(e){return\"[object Boolean]\"===Object.prototype.toString.call(e)},represent:{lowercase:function(e){return e?\"true\":\"false\"},uppercase:function(e){return e?\"TRUE\":\"FALSE\"},camelcase:function(e){return e?\"True\":\"False\"}},defaultStyle:\"lowercase\"});function Rs(e){return 48<=e&&e<=55}function Us(e){return 48<=e&&e<=57}var Hs=new Ds(\"tag:yaml.org,2002:int\",{kind:\"scalar\",resolve:function(e){if(null===e)return!1;var t,i,a=e.length,n=0,o=!1;if(!a)return!1;if(\"-\"!==(t=e[n])&&\"+\"!==t||(t=e[++n]),\"0\"===t){if(n+1===a)return!0;if(\"b\"===(t=e[++n])){for(n++;n<a;n++)if(\"_\"!==(t=e[n])){if(\"0\"!==t&&\"1\"!==t)return!1;o=!0}return o&&\"_\"!==t}if(\"x\"===t){for(n++;n<a;n++)if(\"_\"!==(t=e[n])){if(!(48<=(i=e.charCodeAt(n))&&i<=57||65<=i&&i<=70||97<=i&&i<=102))return!1;o=!0}return o&&\"_\"!==t}if(\"o\"===t){for(n++;n<a;n++)if(\"_\"!==(t=e[n])){if(!Rs(e.charCodeAt(n)))return!1;o=!0}return o&&\"_\"!==t}}if(\"_\"===t)return!1;for(;n<a;n++)if(\"_\"!==(t=e[n])){if(!Us(e.charCodeAt(n)))return!1;o=!0}return!(!o||\"_\"===t)},construct:function(e){var t,i=e,a=1;if(-1!==i.indexOf(\"_\")&&(i=i.replace(/_/g,\"\")),\"-\"!==(t=i[0])&&\"+\"!==t||(\"-\"===t&&(a=-1),t=(i=i.slice(1))[0]),\"0\"===i)return 0;if(\"0\"===t){if(\"b\"===i[1])return a*parseInt(i.slice(2),2);if(\"x\"===i[1])return a*parseInt(i.slice(2),16);if(\"o\"===i[1])return a*parseInt(i.slice(2),8)}return a*parseInt(i,10)},predicate:function(e){return\"[object Number]\"===Object.prototype.toString.call(e)&&e%1==0&&!Es.isNegativeZero(e)},represent:{binary:function(e){return e>=0?\"0b\"+e.toString(2):\"-0b\"+e.toString(2).slice(1)},octal:function(e){return e>=0?\"0o\"+e.toString(8):\"-0o\"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?\"0x\"+e.toString(16).toUpperCase():\"-0x\"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:\"decimal\",styleAliases:{binary:[2,\"bin\"],octal:[8,\"oct\"],decimal:[10,\"dec\"],hexadecimal:[16,\"hex\"]}}),Gs=new RegExp(\"^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\\\.(?:inf|Inf|INF)|\\\\.(?:nan|NaN|NAN))$\");var Ws=/^[-+]?[0-9]+e/;var Ks=new Ds(\"tag:yaml.org,2002:float\",{kind:\"scalar\",resolve:function(e){return null!==e&&!(!Gs.test(e)||\"_\"===e[e.length-1])},construct:function(e){var t,i;return i=\"-\"===(t=e.replace(/_/g,\"\").toLowerCase())[0]?-1:1,\"+-\".indexOf(t[0])>=0&&(t=t.slice(1)),\".inf\"===t?1===i?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:\".nan\"===t?NaN:i*parseFloat(t,10)},predicate:function(e){return\"[object Number]\"===Object.prototype.toString.call(e)&&(e%1!=0||Es.isNegativeZero(e))},represent:function(e,t){var i;if(isNaN(e))switch(t){case\"lowercase\":return\".nan\";case\"uppercase\":return\".NAN\";case\"camelcase\":return\".NaN\"}else if(Number.POSITIVE_INFINITY===e)switch(t){case\"lowercase\":return\".inf\";case\"uppercase\":return\".INF\";case\"camelcase\":return\".Inf\"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case\"lowercase\":return\"-.inf\";case\"uppercase\":return\"-.INF\";case\"camelcase\":return\"-.Inf\"}else if(Es.isNegativeZero(e))return\"-0.0\";return i=e.toString(10),Ws.test(i)?i.replace(\"e\",\".e\"):i},defaultStyle:\"lowercase\"}),Ys=Vs.extend({implicit:[js,qs,Hs,Ks]}),Zs=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$\"),Qs=new RegExp(\"^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\\\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\\\.([0-9]*))?(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$\");var Xs=new Ds(\"tag:yaml.org,2002:timestamp\",{kind:\"scalar\",resolve:function(e){return null!==e&&(null!==Zs.exec(e)||null!==Qs.exec(e))},construct:function(e){var t,i,a,n,o,s,r,l,d=0,c=null;if(null===(t=Zs.exec(e))&&(t=Qs.exec(e)),null===t)throw new Error(\"Date resolve error\");if(i=+t[1],a=+t[2]-1,n=+t[3],!t[4])return new Date(Date.UTC(i,a,n));if(o=+t[4],s=+t[5],r=+t[6],t[7]){for(d=t[7].slice(0,3);d.length<3;)d+=\"0\";d=+d}return t[9]&&(c=6e4*(60*+t[10]+ +(t[11]||0)),\"-\"===t[9]&&(c=-c)),l=new Date(Date.UTC(i,a,n,o,s,r,d)),c&&l.setTime(l.getTime()-c),l},instanceOf:Date,represent:function(e){return e.toISOString()}});var Js=new Ds(\"tag:yaml.org,2002:merge\",{kind:\"scalar\",resolve:function(e){return\"<<\"===e||null===e}}),er=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r\";var tr=new Ds(\"tag:yaml.org,2002:binary\",{kind:\"scalar\",resolve:function(e){if(null===e)return!1;var t,i,a=0,n=e.length,o=er;for(i=0;i<n;i++)if(!((t=o.indexOf(e.charAt(i)))>64)){if(t<0)return!1;a+=6}return a%8==0},construct:function(e){var t,i,a=e.replace(/[\\r\\n=]/g,\"\"),n=a.length,o=er,s=0,r=[];for(t=0;t<n;t++)t%4==0&&t&&(r.push(s>>16&255),r.push(s>>8&255),r.push(255&s)),s=s<<6|o.indexOf(a.charAt(t));return 0===(i=n%4*6)?(r.push(s>>16&255),r.push(s>>8&255),r.push(255&s)):18===i?(r.push(s>>10&255),r.push(s>>2&255)):12===i&&r.push(s>>4&255),new Uint8Array(r)},predicate:function(e){return\"[object Uint8Array]\"===Object.prototype.toString.call(e)},represent:function(e){var t,i,a=\"\",n=0,o=e.length,s=er;for(t=0;t<o;t++)t%3==0&&t&&(a+=s[n>>18&63],a+=s[n>>12&63],a+=s[n>>6&63],a+=s[63&n]),n=(n<<8)+e[t];return 0===(i=o%3)?(a+=s[n>>18&63],a+=s[n>>12&63],a+=s[n>>6&63],a+=s[63&n]):2===i?(a+=s[n>>10&63],a+=s[n>>4&63],a+=s[n<<2&63],a+=s[64]):1===i&&(a+=s[n>>2&63],a+=s[n<<4&63],a+=s[64],a+=s[64]),a}}),ir=Object.prototype.hasOwnProperty,ar=Object.prototype.toString;var nr=new Ds(\"tag:yaml.org,2002:omap\",{kind:\"sequence\",resolve:function(e){if(null===e)return!0;var t,i,a,n,o,s=[],r=e;for(t=0,i=r.length;t<i;t+=1){if(a=r[t],o=!1,\"[object Object]\"!==ar.call(a))return!1;for(n in a)if(ir.call(a,n)){if(o)return!1;o=!0}if(!o)return!1;if(-1!==s.indexOf(n))return!1;s.push(n)}return!0},construct:function(e){return null!==e?e:[]}}),or=Object.prototype.toString;var sr=new Ds(\"tag:yaml.org,2002:pairs\",{kind:\"sequence\",resolve:function(e){if(null===e)return!0;var t,i,a,n,o,s=e;for(o=new Array(s.length),t=0,i=s.length;t<i;t+=1){if(a=s[t],\"[object Object]\"!==or.call(a))return!1;if(1!==(n=Object.keys(a)).length)return!1;o[t]=[n[0],a[n[0]]]}return!0},construct:function(e){if(null===e)return[];var t,i,a,n,o,s=e;for(o=new Array(s.length),t=0,i=s.length;t<i;t+=1)a=s[t],n=Object.keys(a),o[t]=[n[0],a[n[0]]];return o}}),rr=Object.prototype.hasOwnProperty;var lr=new Ds(\"tag:yaml.org,2002:set\",{kind:\"mapping\",resolve:function(e){if(null===e)return!0;var t,i=e;for(t in i)if(rr.call(i,t)&&null!==i[t])return!1;return!0},construct:function(e){return null!==e?e:{}}}),dr=Ys.extend({implicit:[Xs,Js],explicit:[tr,nr,sr,lr]}),cr=Object.prototype.hasOwnProperty,ur=/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/,hr=/[\\x85\\u2028\\u2029]/,pr=/[,\\[\\]\\{\\}]/,vr=/^(?:!|!!|![a-z\\-]+!)$/i,mr=/^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;function fr(e){return Object.prototype.toString.call(e)}function gr(e){return 10===e||13===e}function _r(e){return 9===e||32===e}function yr(e){return 9===e||32===e||10===e||13===e}function kr(e){return 44===e||91===e||93===e||123===e||125===e}function br(e){var t;return 48<=e&&e<=57?e-48:97<=(t=32|e)&&t<=102?t-97+10:-1}function xr(e){return 48===e?\"\\0\":97===e?\"\u0007\":98===e?\"\\b\":116===e||9===e?\"\\t\":110===e?\"\\n\":118===e?\"\\v\":102===e?\"\\f\":114===e?\"\\r\":101===e?\"\u001b\":32===e?\" \":34===e?'\"':47===e?\"/\":92===e?\"\\\\\":78===e?\"\":95===e?\" \":76===e?\"\\u2028\":80===e?\"\\u2029\":\"\"}function $r(e){return e<=65535?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10),56320+(e-65536&1023))}for(var wr=new Array(256),Cr=new Array(256),Ar=0;Ar<256;Ar++)wr[Ar]=xr(Ar)?1:0,Cr[Ar]=xr(Ar);function Ir(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||dr,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function Er(e,t){var i={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return i.snippet=Ps(i),new Ls(t,i)}function zr(e,t){throw Er(e,t)}function Sr(e,t){e.onWarning&&e.onWarning.call(null,Er(e,t))}var Lr={YAML:function(e,t,i){var a,n,o;null!==e.version&&zr(e,\"duplication of %YAML directive\"),1!==i.length&&zr(e,\"YAML directive accepts exactly one argument\"),null===(a=/^([0-9]+)\\.([0-9]+)$/.exec(i[0]))&&zr(e,\"ill-formed argument of the YAML directive\"),n=parseInt(a[1],10),o=parseInt(a[2],10),1!==n&&zr(e,\"unacceptable YAML version of the document\"),e.version=i[0],e.checkLineBreaks=o<2,1!==o&&2!==o&&Sr(e,\"unsupported YAML version of the document\")},TAG:function(e,t,i){var a,n;2!==i.length&&zr(e,\"TAG directive accepts exactly two arguments\"),a=i[0],n=i[1],vr.test(a)||zr(e,\"ill-formed tag handle (first argument) of the TAG directive\"),cr.call(e.tagMap,a)&&zr(e,'there is a previously declared suffix for \"'+a+'\" tag handle'),mr.test(n)||zr(e,\"ill-formed tag prefix (second argument) of the TAG directive\");try{n=decodeURIComponent(n)}catch(t){zr(e,\"tag prefix is malformed: \"+n)}e.tagMap[a]=n}};function Tr(e,t,i,a){var n,o,s,r;if(t<i){if(r=e.input.slice(t,i),a)for(n=0,o=r.length;n<o;n+=1)9===(s=r.charCodeAt(n))||32<=s&&s<=1114111||zr(e,\"expected valid JSON character\");else ur.test(r)&&zr(e,\"the stream contains non-printable characters\");e.result+=r}}function Or(e,t,i,a){var n,o,s,r;for(Es.isObject(i)||zr(e,\"cannot merge mappings; the provided source object is unacceptable\"),s=0,r=(n=Object.keys(i)).length;s<r;s+=1)o=n[s],cr.call(t,o)||(t[o]=i[o],a[o]=!0)}function Pr(e,t,i,a,n,o,s,r,l){var d,c;if(Array.isArray(n))for(d=0,c=(n=Array.prototype.slice.call(n)).length;d<c;d+=1)Array.isArray(n[d])&&zr(e,\"nested arrays are not supported inside keys\"),\"object\"==typeof n&&\"[object Object]\"===fr(n[d])&&(n[d]=\"[object Object]\");if(\"object\"==typeof n&&\"[object Object]\"===fr(n)&&(n=\"[object Object]\"),n=String(n),null===t&&(t={}),\"tag:yaml.org,2002:merge\"===a)if(Array.isArray(o))for(d=0,c=o.length;d<c;d+=1)Or(e,t,o[d],i);else Or(e,t,o,i);else e.json||cr.call(i,n)||!cr.call(t,n)||(e.line=s||e.line,e.lineStart=r||e.lineStart,e.position=l||e.position,zr(e,\"duplicated mapping key\")),\"__proto__\"===n?Object.defineProperty(t,n,{configurable:!0,enumerable:!0,writable:!0,value:o}):t[n]=o,delete i[n];return t}function Mr(e){var t;10===(t=e.input.charCodeAt(e.position))?e.position++:13===t?(e.position++,10===e.input.charCodeAt(e.position)&&e.position++):zr(e,\"a line break is expected\"),e.line+=1,e.lineStart=e.position,e.firstTabInLine=-1}function Fr(e,t,i){for(var a=0,n=e.input.charCodeAt(e.position);0!==n;){for(;_r(n);)9===n&&-1===e.firstTabInLine&&(e.firstTabInLine=e.position),n=e.input.charCodeAt(++e.position);if(t&&35===n)do{n=e.input.charCodeAt(++e.position)}while(10!==n&&13!==n&&0!==n);if(!gr(n))break;for(Mr(e),n=e.input.charCodeAt(e.position),a++,e.lineIndent=0;32===n;)e.lineIndent++,n=e.input.charCodeAt(++e.position)}return-1!==i&&0!==a&&e.lineIndent<i&&Sr(e,\"deficient indentation\"),a}function Dr(e){var t,i=e.position;return!(45!==(t=e.input.charCodeAt(i))&&46!==t||t!==e.input.charCodeAt(i+1)||t!==e.input.charCodeAt(i+2)||(i+=3,0!==(t=e.input.charCodeAt(i))&&!yr(t)))}function Br(e,t){1===t?e.result+=\" \":t>1&&(e.result+=Es.repeat(\"\\n\",t-1))}function Nr(e,t){var i,a,n=e.tag,o=e.anchor,s=[],r=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=s),a=e.input.charCodeAt(e.position);0!==a&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,zr(e,\"tab characters must not be used in indentation\")),45===a)&&yr(e.input.charCodeAt(e.position+1));)if(r=!0,e.position++,Fr(e,!0,-1)&&e.lineIndent<=t)s.push(null),a=e.input.charCodeAt(e.position);else if(i=e.line,qr(e,t,3,!1,!0),s.push(e.result),Fr(e,!0,-1),a=e.input.charCodeAt(e.position),(e.line===i||e.lineIndent>t)&&0!==a)zr(e,\"bad indentation of a sequence entry\");else if(e.lineIndent<t)break;return!!r&&(e.tag=n,e.anchor=o,e.kind=\"sequence\",e.result=s,!0)}function Vr(e){var t,i,a,n,o=!1,s=!1;if(33!==(n=e.input.charCodeAt(e.position)))return!1;if(null!==e.tag&&zr(e,\"duplication of a tag property\"),60===(n=e.input.charCodeAt(++e.position))?(o=!0,n=e.input.charCodeAt(++e.position)):33===n?(s=!0,i=\"!!\",n=e.input.charCodeAt(++e.position)):i=\"!\",t=e.position,o){do{n=e.input.charCodeAt(++e.position)}while(0!==n&&62!==n);e.position<e.length?(a=e.input.slice(t,e.position),n=e.input.charCodeAt(++e.position)):zr(e,\"unexpected end of the stream within a verbatim tag\")}else{for(;0!==n&&!yr(n);)33===n&&(s?zr(e,\"tag suffix cannot contain exclamation marks\"):(i=e.input.slice(t-1,e.position+1),vr.test(i)||zr(e,\"named tag handle cannot contain such characters\"),s=!0,t=e.position+1)),n=e.input.charCodeAt(++e.position);a=e.input.slice(t,e.position),pr.test(a)&&zr(e,\"tag suffix cannot contain flow indicator characters\")}a&&!mr.test(a)&&zr(e,\"tag name cannot contain such characters: \"+a);try{a=decodeURIComponent(a)}catch(t){zr(e,\"tag name is malformed: \"+a)}return o?e.tag=a:cr.call(e.tagMap,i)?e.tag=e.tagMap[i]+a:\"!\"===i?e.tag=\"!\"+a:\"!!\"===i?e.tag=\"tag:yaml.org,2002:\"+a:zr(e,'undeclared tag handle \"'+i+'\"'),!0}function jr(e){var t,i;if(38!==(i=e.input.charCodeAt(e.position)))return!1;for(null!==e.anchor&&zr(e,\"duplication of an anchor property\"),i=e.input.charCodeAt(++e.position),t=e.position;0!==i&&!yr(i)&&!kr(i);)i=e.input.charCodeAt(++e.position);return e.position===t&&zr(e,\"name of an anchor node must contain at least one character\"),e.anchor=e.input.slice(t,e.position),!0}function qr(e,t,i,a,n){var o,s,r,l,d,c,u,h,p,v=1,m=!1,f=!1;if(null!==e.listener&&e.listener(\"open\",e),e.tag=null,e.anchor=null,e.kind=null,e.result=null,o=s=r=4===i||3===i,a&&Fr(e,!0,-1)&&(m=!0,e.lineIndent>t?v=1:e.lineIndent===t?v=0:e.lineIndent<t&&(v=-1)),1===v)for(;Vr(e)||jr(e);)Fr(e,!0,-1)?(m=!0,r=o,e.lineIndent>t?v=1:e.lineIndent===t?v=0:e.lineIndent<t&&(v=-1)):r=!1;if(r&&(r=m||n),1!==v&&4!==i||(h=1===i||2===i?t:t+1,p=e.position-e.lineStart,1===v?r&&(Nr(e,p)||function(e,t,i){var a,n,o,s,r,l,d,c=e.tag,u=e.anchor,h={},p=Object.create(null),v=null,m=null,f=null,g=!1,_=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=h),d=e.input.charCodeAt(e.position);0!==d;){if(g||-1===e.firstTabInLine||(e.position=e.firstTabInLine,zr(e,\"tab characters must not be used in indentation\")),a=e.input.charCodeAt(e.position+1),o=e.line,63!==d&&58!==d||!yr(a)){if(s=e.line,r=e.lineStart,l=e.position,!qr(e,i,2,!1,!0))break;if(e.line===o){for(d=e.input.charCodeAt(e.position);_r(d);)d=e.input.charCodeAt(++e.position);if(58===d)yr(d=e.input.charCodeAt(++e.position))||zr(e,\"a whitespace character is expected after the key-value separator within a block mapping\"),g&&(Pr(e,h,p,v,m,null,s,r,l),v=m=f=null),_=!0,g=!1,n=!1,v=e.tag,m=e.result;else{if(!_)return e.tag=c,e.anchor=u,!0;zr(e,\"can not read an implicit mapping pair; a colon is missed\")}}else{if(!_)return e.tag=c,e.anchor=u,!0;zr(e,\"can not read a block mapping entry; a multiline key may not be an implicit key\")}}else 63===d?(g&&(Pr(e,h,p,v,m,null,s,r,l),v=m=f=null),_=!0,g=!0,n=!0):g?(g=!1,n=!0):zr(e,\"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line\"),e.position+=1,d=a;if((e.line===o||e.lineIndent>t)&&(g&&(s=e.line,r=e.lineStart,l=e.position),qr(e,t,4,!0,n)&&(g?m=e.result:f=e.result),g||(Pr(e,h,p,v,m,f,s,r,l),v=m=f=null),Fr(e,!0,-1),d=e.input.charCodeAt(e.position)),(e.line===o||e.lineIndent>t)&&0!==d)zr(e,\"bad indentation of a mapping entry\");else if(e.lineIndent<t)break}return g&&Pr(e,h,p,v,m,null,s,r,l),_&&(e.tag=c,e.anchor=u,e.kind=\"mapping\",e.result=h),_}(e,p,h))||function(e,t){var i,a,n,o,s,r,l,d,c,u,h,p,v=!0,m=e.tag,f=e.anchor,g=Object.create(null);if(91===(p=e.input.charCodeAt(e.position)))s=93,d=!1,o=[];else{if(123!==p)return!1;s=125,d=!0,o={}}for(null!==e.anchor&&(e.anchorMap[e.anchor]=o),p=e.input.charCodeAt(++e.position);0!==p;){if(Fr(e,!0,t),(p=e.input.charCodeAt(e.position))===s)return e.position++,e.tag=m,e.anchor=f,e.kind=d?\"mapping\":\"sequence\",e.result=o,!0;v?44===p&&zr(e,\"expected the node content, but found ','\"):zr(e,\"missed comma between flow collection entries\"),h=null,r=l=!1,63===p&&yr(e.input.charCodeAt(e.position+1))&&(r=l=!0,e.position++,Fr(e,!0,t)),i=e.line,a=e.lineStart,n=e.position,qr(e,t,1,!1,!0),u=e.tag,c=e.result,Fr(e,!0,t),p=e.input.charCodeAt(e.position),!l&&e.line!==i||58!==p||(r=!0,p=e.input.charCodeAt(++e.position),Fr(e,!0,t),qr(e,t,1,!1,!0),h=e.result),d?Pr(e,o,g,u,c,h,i,a,n):r?o.push(Pr(e,null,g,u,c,h,i,a,n)):o.push(c),Fr(e,!0,t),44===(p=e.input.charCodeAt(e.position))?(v=!0,p=e.input.charCodeAt(++e.position)):v=!1}zr(e,\"unexpected end of the stream within a flow collection\")}(e,h)?f=!0:(s&&function(e,t){var i,a,n,o,s,r=1,l=!1,d=!1,c=t,u=0,h=!1;if(124===(o=e.input.charCodeAt(e.position)))a=!1;else{if(62!==o)return!1;a=!0}for(e.kind=\"scalar\",e.result=\"\";0!==o;)if(43===(o=e.input.charCodeAt(++e.position))||45===o)1===r?r=43===o?3:2:zr(e,\"repeat of a chomping mode identifier\");else{if(!((n=48<=(s=o)&&s<=57?s-48:-1)>=0))break;0===n?zr(e,\"bad explicit indentation width of a block scalar; it cannot be less than one\"):d?zr(e,\"repeat of an indentation width identifier\"):(c=t+n-1,d=!0)}if(_r(o)){do{o=e.input.charCodeAt(++e.position)}while(_r(o));if(35===o)do{o=e.input.charCodeAt(++e.position)}while(!gr(o)&&0!==o)}for(;0!==o;){for(Mr(e),e.lineIndent=0,o=e.input.charCodeAt(e.position);(!d||e.lineIndent<c)&&32===o;)e.lineIndent++,o=e.input.charCodeAt(++e.position);if(!d&&e.lineIndent>c&&(c=e.lineIndent),gr(o))u++;else{if(e.lineIndent<c){3===r?e.result+=Es.repeat(\"\\n\",l?1+u:u):1===r&&l&&(e.result+=\"\\n\");break}for(a?_r(o)?(h=!0,e.result+=Es.repeat(\"\\n\",l?1+u:u)):h?(h=!1,e.result+=Es.repeat(\"\\n\",u+1)):0===u?l&&(e.result+=\" \"):e.result+=Es.repeat(\"\\n\",u):e.result+=Es.repeat(\"\\n\",l?1+u:u),l=!0,d=!0,u=0,i=e.position;!gr(o)&&0!==o;)o=e.input.charCodeAt(++e.position);Tr(e,i,e.position,!1)}}return!0}(e,h)||function(e,t){var i,a,n;if(39!==(i=e.input.charCodeAt(e.position)))return!1;for(e.kind=\"scalar\",e.result=\"\",e.position++,a=n=e.position;0!==(i=e.input.charCodeAt(e.position));)if(39===i){if(Tr(e,a,e.position,!0),39!==(i=e.input.charCodeAt(++e.position)))return!0;a=e.position,e.position++,n=e.position}else gr(i)?(Tr(e,a,n,!0),Br(e,Fr(e,!1,t)),a=n=e.position):e.position===e.lineStart&&Dr(e)?zr(e,\"unexpected end of the document within a single quoted scalar\"):(e.position++,n=e.position);zr(e,\"unexpected end of the stream within a single quoted scalar\")}(e,h)||function(e,t){var i,a,n,o,s,r,l;if(34!==(r=e.input.charCodeAt(e.position)))return!1;for(e.kind=\"scalar\",e.result=\"\",e.position++,i=a=e.position;0!==(r=e.input.charCodeAt(e.position));){if(34===r)return Tr(e,i,e.position,!0),e.position++,!0;if(92===r){if(Tr(e,i,e.position,!0),gr(r=e.input.charCodeAt(++e.position)))Fr(e,!1,t);else if(r<256&&wr[r])e.result+=Cr[r],e.position++;else if((s=120===(l=r)?2:117===l?4:85===l?8:0)>0){for(n=s,o=0;n>0;n--)(s=br(r=e.input.charCodeAt(++e.position)))>=0?o=(o<<4)+s:zr(e,\"expected hexadecimal character\");e.result+=$r(o),e.position++}else zr(e,\"unknown escape sequence\");i=a=e.position}else gr(r)?(Tr(e,i,a,!0),Br(e,Fr(e,!1,t)),i=a=e.position):e.position===e.lineStart&&Dr(e)?zr(e,\"unexpected end of the document within a double quoted scalar\"):(e.position++,a=e.position)}zr(e,\"unexpected end of the stream within a double quoted scalar\")}(e,h)?f=!0:!function(e){var t,i,a;if(42!==(a=e.input.charCodeAt(e.position)))return!1;for(a=e.input.charCodeAt(++e.position),t=e.position;0!==a&&!yr(a)&&!kr(a);)a=e.input.charCodeAt(++e.position);return e.position===t&&zr(e,\"name of an alias node must contain at least one character\"),i=e.input.slice(t,e.position),cr.call(e.anchorMap,i)||zr(e,'unidentified alias \"'+i+'\"'),e.result=e.anchorMap[i],Fr(e,!0,-1),!0}(e)?function(e,t,i){var a,n,o,s,r,l,d,c,u=e.kind,h=e.result;if(yr(c=e.input.charCodeAt(e.position))||kr(c)||35===c||38===c||42===c||33===c||124===c||62===c||39===c||34===c||37===c||64===c||96===c)return!1;if((63===c||45===c)&&(yr(a=e.input.charCodeAt(e.position+1))||i&&kr(a)))return!1;for(e.kind=\"scalar\",e.result=\"\",n=o=e.position,s=!1;0!==c;){if(58===c){if(yr(a=e.input.charCodeAt(e.position+1))||i&&kr(a))break}else if(35===c){if(yr(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&Dr(e)||i&&kr(c))break;if(gr(c)){if(r=e.line,l=e.lineStart,d=e.lineIndent,Fr(e,!1,-1),e.lineIndent>=t){s=!0,c=e.input.charCodeAt(e.position);continue}e.position=o,e.line=r,e.lineStart=l,e.lineIndent=d;break}}s&&(Tr(e,n,o,!1),Br(e,e.line-r),n=o=e.position,s=!1),_r(c)||(o=e.position+1),c=e.input.charCodeAt(++e.position)}return Tr(e,n,o,!1),!!e.result||(e.kind=u,e.result=h,!1)}(e,h,1===i)&&(f=!0,null===e.tag&&(e.tag=\"?\")):(f=!0,null===e.tag&&null===e.anchor||zr(e,\"alias node should not have any properties\")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===v&&(f=r&&Nr(e,p))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);else if(\"?\"===e.tag){for(null!==e.result&&\"scalar\"!==e.kind&&zr(e,'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"'+e.kind+'\"'),l=0,d=e.implicitTypes.length;l<d;l+=1)if((u=e.implicitTypes[l]).resolve(e.result)){e.result=u.construct(e.result),e.tag=u.tag,null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);break}}else if(\"!\"!==e.tag){if(cr.call(e.typeMap[e.kind||\"fallback\"],e.tag))u=e.typeMap[e.kind||\"fallback\"][e.tag];else for(u=null,l=0,d=(c=e.typeMap.multi[e.kind||\"fallback\"]).length;l<d;l+=1)if(e.tag.slice(0,c[l].tag.length)===c[l].tag){u=c[l];break}u||zr(e,\"unknown tag !<\"+e.tag+\">\"),null!==e.result&&u.kind!==e.kind&&zr(e,\"unacceptable node kind for !<\"+e.tag+'> tag; it should be \"'+u.kind+'\", not \"'+e.kind+'\"'),u.resolve(e.result,e.tag)?(e.result=u.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):zr(e,\"cannot resolve a node with !<\"+e.tag+\"> explicit tag\")}return null!==e.listener&&e.listener(\"close\",e),null!==e.tag||null!==e.anchor||f}function Rr(e){var t,i,a,n,o=e.position,s=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(n=e.input.charCodeAt(e.position))&&(Fr(e,!0,-1),n=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==n));){for(s=!0,n=e.input.charCodeAt(++e.position),t=e.position;0!==n&&!yr(n);)n=e.input.charCodeAt(++e.position);for(a=[],(i=e.input.slice(t,e.position)).length<1&&zr(e,\"directive name must not be less than one character in length\");0!==n;){for(;_r(n);)n=e.input.charCodeAt(++e.position);if(35===n){do{n=e.input.charCodeAt(++e.position)}while(0!==n&&!gr(n));break}if(gr(n))break;for(t=e.position;0!==n&&!yr(n);)n=e.input.charCodeAt(++e.position);a.push(e.input.slice(t,e.position))}0!==n&&Mr(e),cr.call(Lr,i)?Lr[i](e,i,a):Sr(e,'unknown document directive \"'+i+'\"')}Fr(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,Fr(e,!0,-1)):s&&zr(e,\"directives end mark is expected\"),qr(e,e.lineIndent-1,4,!1,!0),Fr(e,!0,-1),e.checkLineBreaks&&hr.test(e.input.slice(o,e.position))&&Sr(e,\"non-ASCII line breaks are interpreted as content\"),e.documents.push(e.result),e.position===e.lineStart&&Dr(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,Fr(e,!0,-1)):e.position<e.length-1&&zr(e,\"end of the stream or a document separator is expected\")}function Ur(e,t){t=t||{},0!==(e=String(e)).length&&(10!==e.charCodeAt(e.length-1)&&13!==e.charCodeAt(e.length-1)&&(e+=\"\\n\"),65279===e.charCodeAt(0)&&(e=e.slice(1)));var i=new Ir(e,t),a=e.indexOf(\"\\0\");for(-1!==a&&(i.position=a,zr(i,\"null byte is not allowed in input\")),i.input+=\"\\0\";32===i.input.charCodeAt(i.position);)i.lineIndent+=1,i.position+=1;for(;i.position<i.length-1;)Rr(i);return i.documents}var Hr={loadAll:function(e,t,i){null!==t&&\"object\"==typeof t&&void 0===i&&(i=t,t=null);var a=Ur(e,i);if(\"function\"!=typeof t)return a;for(var n=0,o=a.length;n<o;n+=1)t(a[n])},load:function(e,t){var i=Ur(e,t);if(0!==i.length){if(1===i.length)return i[0];throw new Ls(\"expected a single document in the stream, but found more\")}}},Gr=Object.prototype.toString,Wr=Object.prototype.hasOwnProperty,Kr={0:\"\\\\0\",7:\"\\\\a\",8:\"\\\\b\",9:\"\\\\t\",10:\"\\\\n\",11:\"\\\\v\",12:\"\\\\f\",13:\"\\\\r\",27:\"\\\\e\",34:'\\\\\"',92:\"\\\\\\\\\",133:\"\\\\N\",160:\"\\\\_\",8232:\"\\\\L\",8233:\"\\\\P\"},Yr=[\"y\",\"Y\",\"yes\",\"Yes\",\"YES\",\"on\",\"On\",\"ON\",\"n\",\"N\",\"no\",\"No\",\"NO\",\"off\",\"Off\",\"OFF\"],Zr=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\\.[0-9_]*)?$/;function Qr(e){var t,i,a;if(t=e.toString(16).toUpperCase(),e<=255)i=\"x\",a=2;else if(e<=65535)i=\"u\",a=4;else{if(!(e<=4294967295))throw new Ls(\"code point within a string may not be greater than 0xFFFFFFFF\");i=\"U\",a=8}return\"\\\\\"+i+Es.repeat(\"0\",a-t.length)+t}function Xr(e){this.schema=e.schema||dr,this.indent=Math.max(1,e.indent||2),this.noArrayIndent=e.noArrayIndent||!1,this.skipInvalid=e.skipInvalid||!1,this.flowLevel=Es.isNothing(e.flowLevel)?-1:e.flowLevel,this.styleMap=function(e,t){var i,a,n,o,s,r,l;if(null===t)return{};for(i={},n=0,o=(a=Object.keys(t)).length;n<o;n+=1)s=a[n],r=String(t[s]),\"!!\"===s.slice(0,2)&&(s=\"tag:yaml.org,2002:\"+s.slice(2)),(l=e.compiledTypeMap.fallback[s])&&Wr.call(l.styleAliases,r)&&(r=l.styleAliases[r]),i[s]=r;return i}(this.schema,e.styles||null),this.sortKeys=e.sortKeys||!1,this.lineWidth=e.lineWidth||80,this.noRefs=e.noRefs||!1,this.noCompatMode=e.noCompatMode||!1,this.condenseFlow=e.condenseFlow||!1,this.quotingType='\"'===e.quotingType?2:1,this.forceQuotes=e.forceQuotes||!1,this.replacer=\"function\"==typeof e.replacer?e.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result=\"\",this.duplicates=[],this.usedDuplicates=null}function Jr(e,t){for(var i,a=Es.repeat(\" \",t),n=0,o=-1,s=\"\",r=e.length;n<r;)-1===(o=e.indexOf(\"\\n\",n))?(i=e.slice(n),n=r):(i=e.slice(n,o+1),n=o+1),i.length&&\"\\n\"!==i&&(s+=a),s+=i;return s}function el(e,t){return\"\\n\"+Es.repeat(\" \",e.indent*t)}function tl(e){return 32===e||9===e}function il(e){return 32<=e&&e<=126||161<=e&&e<=55295&&8232!==e&&8233!==e||57344<=e&&e<=65533&&65279!==e||65536<=e&&e<=1114111}function al(e){return il(e)&&65279!==e&&13!==e&&10!==e}function nl(e,t,i){var a=al(e),n=a&&!tl(e);return(i?a:a&&44!==e&&91!==e&&93!==e&&123!==e&&125!==e)&&35!==e&&!(58===t&&!n)||al(t)&&!tl(t)&&35===e||58===t&&n}function ol(e,t){var i,a=e.charCodeAt(t);return a>=55296&&a<=56319&&t+1<e.length&&(i=e.charCodeAt(t+1))>=56320&&i<=57343?1024*(a-55296)+i-56320+65536:a}function sl(e){return/^\\n* /.test(e)}function rl(e,t,i,a,n,o,s,r){var l,d,c=0,u=null,h=!1,p=!1,v=-1!==a,m=-1,f=il(d=ol(e,0))&&65279!==d&&!tl(d)&&45!==d&&63!==d&&58!==d&&44!==d&&91!==d&&93!==d&&123!==d&&125!==d&&35!==d&&38!==d&&42!==d&&33!==d&&124!==d&&61!==d&&62!==d&&39!==d&&34!==d&&37!==d&&64!==d&&96!==d&&function(e){return!tl(e)&&58!==e}(ol(e,e.length-1));if(t||s)for(l=0;l<e.length;c>=65536?l+=2:l++){if(!il(c=ol(e,l)))return 5;f=f&&nl(c,u,r),u=c}else{for(l=0;l<e.length;c>=65536?l+=2:l++){if(10===(c=ol(e,l)))h=!0,v&&(p=p||l-m-1>a&&\" \"!==e[m+1],m=l);else if(!il(c))return 5;f=f&&nl(c,u,r),u=c}p=p||v&&l-m-1>a&&\" \"!==e[m+1]}return h||p?i>9&&sl(e)?5:s?2===o?5:2:p?4:3:!f||s||n(e)?2===o?5:2:1}function ll(e,t,i,a,n){e.dump=function(){if(0===t.length)return 2===e.quotingType?'\"\"':\"''\";if(!e.noCompatMode&&(-1!==Yr.indexOf(t)||Zr.test(t)))return 2===e.quotingType?'\"'+t+'\"':\"'\"+t+\"'\";var o=e.indent*Math.max(1,i),s=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-o),r=a||e.flowLevel>-1&&i>=e.flowLevel;switch(rl(t,r,e.indent,s,(function(t){return function(e,t){var i,a;for(i=0,a=e.implicitTypes.length;i<a;i+=1)if(e.implicitTypes[i].resolve(t))return!0;return!1}(e,t)}),e.quotingType,e.forceQuotes&&!a,n)){case 1:return t;case 2:return\"'\"+t.replace(/'/g,\"''\")+\"'\";case 3:return\"|\"+dl(t,e.indent)+cl(Jr(t,o));case 4:return\">\"+dl(t,e.indent)+cl(Jr(function(e,t){var i,a,n=/(\\n+)([^\\n]*)/g,o=(r=e.indexOf(\"\\n\"),r=-1!==r?r:e.length,n.lastIndex=r,ul(e.slice(0,r),t)),s=\"\\n\"===e[0]||\" \"===e[0];var r;for(;a=n.exec(e);){var l=a[1],d=a[2];i=\" \"===d[0],o+=l+(s||i||\"\"===d?\"\":\"\\n\")+ul(d,t),s=i}return o}(t,s),o));case 5:return'\"'+function(e){for(var t,i=\"\",a=0,n=0;n<e.length;a>=65536?n+=2:n++)a=ol(e,n),!(t=Kr[a])&&il(a)?(i+=e[n],a>=65536&&(i+=e[n+1])):i+=t||Qr(a);return i}(t)+'\"';default:throw new Ls(\"impossible error: invalid scalar style\")}}()}function dl(e,t){var i=sl(e)?String(t):\"\",a=\"\\n\"===e[e.length-1];return i+(a&&(\"\\n\"===e[e.length-2]||\"\\n\"===e)?\"+\":a?\"\":\"-\")+\"\\n\"}function cl(e){return\"\\n\"===e[e.length-1]?e.slice(0,-1):e}function ul(e,t){if(\"\"===e||\" \"===e[0])return e;for(var i,a,n=/ [^ ]/g,o=0,s=0,r=0,l=\"\";i=n.exec(e);)(r=i.index)-o>t&&(a=s>o?s:r,l+=\"\\n\"+e.slice(o,a),o=a+1),s=r;return l+=\"\\n\",e.length-o>t&&s>o?l+=e.slice(o,s)+\"\\n\"+e.slice(s+1):l+=e.slice(o),l.slice(1)}function hl(e,t,i,a){var n,o,s,r=\"\",l=e.tag;for(n=0,o=i.length;n<o;n+=1)s=i[n],e.replacer&&(s=e.replacer.call(i,String(n),s)),(vl(e,t+1,s,!0,!0,!1,!0)||void 0===s&&vl(e,t+1,null,!0,!0,!1,!0))&&(a&&\"\"===r||(r+=el(e,t)),e.dump&&10===e.dump.charCodeAt(0)?r+=\"-\":r+=\"- \",r+=e.dump);e.tag=l,e.dump=r||\"[]\"}function pl(e,t,i){var a,n,o,s,r,l;for(o=0,s=(n=i?e.explicitTypes:e.implicitTypes).length;o<s;o+=1)if(((r=n[o]).instanceOf||r.predicate)&&(!r.instanceOf||\"object\"==typeof t&&t instanceof r.instanceOf)&&(!r.predicate||r.predicate(t))){if(i?r.multi&&r.representName?e.tag=r.representName(t):e.tag=r.tag:e.tag=\"?\",r.represent){if(l=e.styleMap[r.tag]||r.defaultStyle,\"[object Function]\"===Gr.call(r.represent))a=r.represent(t,l);else{if(!Wr.call(r.represent,l))throw new Ls(\"!<\"+r.tag+'> tag resolver accepts not \"'+l+'\" style');a=r.represent[l](t,l)}e.dump=a}return!0}return!1}function vl(e,t,i,a,n,o,s){e.tag=null,e.dump=i,pl(e,i,!1)||pl(e,i,!0);var r,l=Gr.call(e.dump),d=a;a&&(a=e.flowLevel<0||e.flowLevel>t);var c,u,h=\"[object Object]\"===l||\"[object Array]\"===l;if(h&&(u=-1!==(c=e.duplicates.indexOf(i))),(null!==e.tag&&\"?\"!==e.tag||u||2!==e.indent&&t>0)&&(n=!1),u&&e.usedDuplicates[c])e.dump=\"*ref_\"+c;else{if(h&&u&&!e.usedDuplicates[c]&&(e.usedDuplicates[c]=!0),\"[object Object]\"===l)a&&0!==Object.keys(e.dump).length?(!function(e,t,i,a){var n,o,s,r,l,d,c=\"\",u=e.tag,h=Object.keys(i);if(!0===e.sortKeys)h.sort();else if(\"function\"==typeof e.sortKeys)h.sort(e.sortKeys);else if(e.sortKeys)throw new Ls(\"sortKeys must be a boolean or a function\");for(n=0,o=h.length;n<o;n+=1)d=\"\",a&&\"\"===c||(d+=el(e,t)),r=i[s=h[n]],e.replacer&&(r=e.replacer.call(i,s,r)),vl(e,t+1,s,!0,!0,!0)&&((l=null!==e.tag&&\"?\"!==e.tag||e.dump&&e.dump.length>1024)&&(e.dump&&10===e.dump.charCodeAt(0)?d+=\"?\":d+=\"? \"),d+=e.dump,l&&(d+=el(e,t)),vl(e,t+1,r,!0,l)&&(e.dump&&10===e.dump.charCodeAt(0)?d+=\":\":d+=\": \",c+=d+=e.dump));e.tag=u,e.dump=c||\"{}\"}(e,t,e.dump,n),u&&(e.dump=\"&ref_\"+c+e.dump)):(!function(e,t,i){var a,n,o,s,r,l=\"\",d=e.tag,c=Object.keys(i);for(a=0,n=c.length;a<n;a+=1)r=\"\",\"\"!==l&&(r+=\", \"),e.condenseFlow&&(r+='\"'),s=i[o=c[a]],e.replacer&&(s=e.replacer.call(i,o,s)),vl(e,t,o,!1,!1)&&(e.dump.length>1024&&(r+=\"? \"),r+=e.dump+(e.condenseFlow?'\"':\"\")+\":\"+(e.condenseFlow?\"\":\" \"),vl(e,t,s,!1,!1)&&(l+=r+=e.dump));e.tag=d,e.dump=\"{\"+l+\"}\"}(e,t,e.dump),u&&(e.dump=\"&ref_\"+c+\" \"+e.dump));else if(\"[object Array]\"===l)a&&0!==e.dump.length?(e.noArrayIndent&&!s&&t>0?hl(e,t-1,e.dump,n):hl(e,t,e.dump,n),u&&(e.dump=\"&ref_\"+c+e.dump)):(!function(e,t,i){var a,n,o,s=\"\",r=e.tag;for(a=0,n=i.length;a<n;a+=1)o=i[a],e.replacer&&(o=e.replacer.call(i,String(a),o)),(vl(e,t,o,!1,!1)||void 0===o&&vl(e,t,null,!1,!1))&&(\"\"!==s&&(s+=\",\"+(e.condenseFlow?\"\":\" \")),s+=e.dump);e.tag=r,e.dump=\"[\"+s+\"]\"}(e,t,e.dump),u&&(e.dump=\"&ref_\"+c+\" \"+e.dump));else{if(\"[object String]\"!==l){if(\"[object Undefined]\"===l)return!1;if(e.skipInvalid)return!1;throw new Ls(\"unacceptable kind of an object to dump \"+l)}\"?\"!==e.tag&&ll(e,e.dump,t,o,d)}null!==e.tag&&\"?\"!==e.tag&&(r=encodeURI(\"!\"===e.tag[0]?e.tag.slice(1):e.tag).replace(/!/g,\"%21\"),r=\"!\"===e.tag[0]?\"!\"+r:\"tag:yaml.org,2002:\"===r.slice(0,18)?\"!!\"+r.slice(18):\"!<\"+r+\">\",e.dump=r+\" \"+e.dump)}return!0}function ml(e,t){var i,a,n=[],o=[];for(fl(e,n,o),i=0,a=o.length;i<a;i+=1)t.duplicates.push(n[o[i]]);t.usedDuplicates=new Array(a)}function fl(e,t,i){var a,n,o;if(null!==e&&\"object\"==typeof e)if(-1!==(n=t.indexOf(e)))-1===i.indexOf(n)&&i.push(n);else if(t.push(e),Array.isArray(e))for(n=0,o=e.length;n<o;n+=1)fl(e[n],t,i);else for(n=0,o=(a=Object.keys(e)).length;n<o;n+=1)fl(e[a[n]],t,i)}var gl=dr,_l=Hr.load,yl={dump:function(e,t){var i=new Xr(t=t||{});i.noRefs||ml(e,i);var a=e;return i.replacer&&(a=i.replacer.call({\"\":a},\"\",a)),vl(i,0,a,!0,!0)?i.dump+\"\\n\":\"\"}}.dump;let kl;const bl={key:\"Mod-s\",run:t=>(e(t.dom,\"editor-save\"),!0)},xl=e=>{const t=document.createElement(\"ha-icon\");return t.icon=e.label,t};v([w(\"ha-code-editor\")],(function(t,a){class n extends a{constructor(...e){super(...e),t(this)}}return{F:n,d:[{kind:\"field\",key:\"codemirror\",value:void 0},{kind:\"field\",decorators:[f()],key:\"mode\",value:()=>\"yaml\"},{kind:\"field\",key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"autofocus\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"readOnly\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean,attribute:\"autocomplete-entities\"})],key:\"autocompleteEntities\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean,attribute:\"autocomplete-icons\"})],key:\"autocompleteIcons\",value:()=>!1},{kind:\"field\",decorators:[f()],key:\"error\",value:()=>!1},{kind:\"field\",decorators:[Vi()],key:\"_value\",value:()=>\"\"},{kind:\"field\",key:\"_loadedCodeMirror\",value:void 0},{kind:\"field\",key:\"_iconList\",value:void 0},{kind:\"set\",key:\"value\",value:function(e){this._value=e}},{kind:\"get\",key:\"value\",value:function(){return this.codemirror?this.codemirror.state.doc.toString():this._value}},{kind:\"get\",key:\"hasComments\",value:function(){if(!this.codemirror||!this._loadedCodeMirror)return!1;const e=this._loadedCodeMirror.HighlightStyle.get(this.codemirror.state,this._loadedCodeMirror.tags.comment);return!!this.shadowRoot.querySelector(`span.${e}`)}},{kind:\"method\",key:\"connectedCallback\",value:function(){_(y(n.prototype),\"connectedCallback\",this).call(this),this.codemirror&&!1!==this.autofocus&&this.codemirror.focus()}},{kind:\"method\",key:\"update\",value:function(e){_(y(n.prototype),\"update\",this).call(this,e),this.codemirror&&(e.has(\"mode\")&&this.codemirror.dispatch({effects:this._loadedCodeMirror.langCompartment.reconfigure(this._mode)}),e.has(\"readOnly\")&&this.codemirror.dispatch({effects:this._loadedCodeMirror.readonlyCompartment.reconfigure(this._loadedCodeMirror.EditorView.editable.of(!this.readOnly))}),e.has(\"_value\")&&this._value!==this.value&&this.codemirror.dispatch({changes:{from:0,to:this.codemirror.state.doc.length,insert:this._value}}),e.has(\"error\")&&this.classList.toggle(\"error-state\",this.error))}},{kind:\"method\",key:\"firstUpdated\",value:function(e){_(y(n.prototype),\"firstUpdated\",this).call(this,e),this._blockKeyboardShortcuts(),this._load()}},{kind:\"get\",key:\"_mode\",value:function(){return this._loadedCodeMirror.langs[this.mode]}},{kind:\"method\",key:\"_load\",value:async function(){this._loadedCodeMirror=await(async()=>(kl||(kl=import(\"./c.da8de431.js\")),kl))();const e=[this._loadedCodeMirror.lineNumbers(),this._loadedCodeMirror.EditorState.allowMultipleSelections.of(!0),this._loadedCodeMirror.history(),this._loadedCodeMirror.highlightSelectionMatches(),this._loadedCodeMirror.highlightActiveLine(),this._loadedCodeMirror.drawSelection(),this._loadedCodeMirror.rectangularSelection(),this._loadedCodeMirror.keymap.of([...this._loadedCodeMirror.defaultKeymap,...this._loadedCodeMirror.searchKeymap,...this._loadedCodeMirror.historyKeymap,...this._loadedCodeMirror.tabKeyBindings,bl]),this._loadedCodeMirror.langCompartment.of(this._mode),this._loadedCodeMirror.theme,this._loadedCodeMirror.Prec.fallback(this._loadedCodeMirror.highlightStyle),this._loadedCodeMirror.readonlyCompartment.of(this._loadedCodeMirror.EditorView.editable.of(!this.readOnly)),this._loadedCodeMirror.EditorView.updateListener.of((e=>this._onUpdate(e)))];if(!this.readOnly){const t=[];this.autocompleteEntities&&this.hass&&t.push(this._entityCompletions.bind(this)),this.autocompleteIcons&&t.push(this._mdiCompletions.bind(this)),t.length>0&&e.push(this._loadedCodeMirror.autocompletion({override:t,maxRenderedOptions:10}))}this.codemirror=new this._loadedCodeMirror.EditorView({state:this._loadedCodeMirror.EditorState.create({doc:this._value,extensions:e}),root:this.shadowRoot,parent:this.shadowRoot})}},{kind:\"field\",key:\"_getStates\",value:()=>Ri((e=>{if(!e)return[];return Object.keys(e).map((t=>({type:\"variable\",label:t,detail:e[t].attributes.friendly_name,info:`State: ${e[t].state}`})))}))},{kind:\"method\",key:\"_entityCompletions\",value:function(e){const t=e.matchBefore(/[a-z_]{3,}\\.\\w*/);if(!t||t.from===t.to&&!e.explicit)return null;const i=this._getStates(this.hass.states);return i&&i.length?{from:Number(t.from),options:i,span:/^[a-z_]{3,}\\.\\w*$/}:null}},{kind:\"field\",key:\"_getIconItems\",value(){return async()=>{if(!this._iconList){let e;e=[],this._iconList=e.map((e=>({type:\"variable\",label:`mdi:${e.name}`,detail:e.keywords.join(\", \"),info:xl})))}return this._iconList}}},{kind:\"method\",key:\"_mdiCompletions\",value:async function(e){const t=e.matchBefore(/mdi:\\S*/);if(!t||t.from===t.to&&!e.explicit)return null;const i=await this._getIconItems();return{from:Number(t.from),options:i,span:/^mdi:\\S*$/}}},{kind:\"method\",key:\"_blockKeyboardShortcuts\",value:function(){this.addEventListener(\"keydown\",(e=>e.stopPropagation()))}},{kind:\"method\",key:\"_onUpdate\",value:function(t){if(!t.docChanged)return;const i=this.value;i!==this._value&&(this._value=i,e(this,\"value-changed\",{value:this._value}))}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      :host(.error-state) .cm-gutters {\n        border-color: var(--error-state-color, red);\n      }\n    `}}]}}),Gi);v([w(\"ha-yaml-editor\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"yamlSchema\",value:()=>gl},{kind:\"field\",decorators:[f()],key:\"defaultValue\",value:void 0},{kind:\"field\",decorators:[f()],key:\"isValid\",value:()=>!0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"readOnly\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!1},{kind:\"field\",decorators:[Vi()],key:\"_yaml\",value:()=>\"\"},{kind:\"method\",key:\"setValue\",value:function(e){try{this._yaml=e&&!(e=>{if(\"object\"!=typeof e)return!1;for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t))return!1;return!0})(e)?yl(e,{schema:this.yamlSchema}):\"\"}catch(t){console.error(t,e),alert(`There was an error converting to YAML: ${t}`)}}},{kind:\"method\",key:\"firstUpdated\",value:function(){this.defaultValue&&this.setValue(this.defaultValue)}},{kind:\"method\",key:\"render\",value:function(){return void 0===this._yaml?k``:k`\n      ${this.label?k`<p>${this.label}${this.required?\" *\":\"\"}</p>`:\"\"}\n      <ha-code-editor\n        .hass=${this.hass}\n        .value=${this._yaml}\n        .readOnly=${this.readOnly}\n        mode=\"yaml\"\n        autocomplete-entities\n        autocomplete-icons\n        .error=${!1===this.isValid}\n        @value-changed=${this._onChange}\n        dir=\"ltr\"\n      ></ha-code-editor>\n    `}},{kind:\"method\",key:\"_onChange\",value:function(t){let i;t.stopPropagation(),this._yaml=t.detail.value;let a=!0;if(this._yaml)try{i=_l(this._yaml,{schema:this.yamlSchema})}catch(e){a=!1}else i={};this.value=i,this.isValid=a,e(this,\"value-changed\",{value:i,isValid:a})}},{kind:\"get\",key:\"yaml\",value:function(){return this._yaml}}]}}),m);v([w(\"ha-progress-button\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"progress\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"raised\",value:()=>!1},{kind:\"field\",decorators:[Vi()],key:\"_result\",value:void 0},{kind:\"method\",key:\"render\",value:function(){const e=this._result||this.progress;return k`\n      <mwc-button\n        ?raised=${this.raised}\n        .disabled=${this.disabled||this.progress}\n        @click=${this._buttonTapped}\n        class=${this._result||\"\"}\n      >\n        <slot></slot>\n      </mwc-button>\n      ${e?k`\n            <div class=\"progress\">\n              ${\"success\"===this._result?k`<ha-svg-icon .path=${Wi}></ha-svg-icon>`:\"error\"===this._result?k`<ha-svg-icon .path=${Ki}></ha-svg-icon>`:this.progress?k`\n                    <ha-circular-progress\n                      size=\"small\"\n                      active\n                    ></ha-circular-progress>\n                  `:\"\"}\n            </div>\n          `:\"\"}\n    `}},{kind:\"method\",key:\"actionSuccess\",value:function(){this._setResult(\"success\")}},{kind:\"method\",key:\"actionError\",value:function(){this._setResult(\"error\")}},{kind:\"method\",key:\"_setResult\",value:function(e){this._result=e,setTimeout((()=>{this._result=void 0}),2e3)}},{kind:\"method\",key:\"_buttonTapped\",value:function(e){this.progress&&e.stopPropagation()}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      :host {\n        outline: none;\n        display: inline-block;\n        position: relative;\n      }\n\n      mwc-button {\n        transition: all 1s;\n      }\n\n      mwc-button.success {\n        --mdc-theme-primary: white;\n        background-color: var(--success-color);\n        transition: none;\n        border-radius: 4px;\n        pointer-events: none;\n      }\n\n      mwc-button[raised].success {\n        --mdc-theme-primary: var(--success-color);\n        --mdc-theme-on-primary: white;\n      }\n\n      mwc-button.error {\n        --mdc-theme-primary: white;\n        background-color: var(--error-color);\n        transition: none;\n        border-radius: 4px;\n        pointer-events: none;\n      }\n\n      mwc-button[raised].error {\n        --mdc-theme-primary: var(--error-color);\n        --mdc-theme-on-primary: white;\n      }\n\n      .progress {\n        bottom: 4px;\n        position: absolute;\n        text-align: center;\n        top: 4px;\n        width: 100%;\n      }\n\n      ha-svg-icon {\n        color: white;\n      }\n\n      mwc-button.success slot,\n      mwc-button.error slot {\n        visibility: hidden;\n      }\n    `}}]}}),m);v([w(\"ha-automation-condition-row\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"condition\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_yamlMode\",value:()=>!1},{kind:\"field\",decorators:[Vi()],key:\"_warnings\",value:void 0},{kind:\"field\",decorators:[g(\"ha-yaml-editor\")],key:\"_yamlEditor\",value:void 0},{kind:\"method\",key:\"render\",value:function(){return this.condition?k`\n      <ha-card outlined>\n        ${!1===this.condition.enabled?k`<div class=\"disabled-bar\">\n              ${this.hass.localize(\"ui.panel.config.automation.editor.actions.disabled\")}\n            </div>`:\"\"}\n        <div class=\"card-menu\">\n          <ha-progress-button @click=${this._testCondition}>\n            ${this.hass.localize(\"ui.panel.config.automation.editor.conditions.test\")}\n          </ha-progress-button>\n          <ha-button-menu corner=\"BOTTOM_START\" @action=${this._handleAction}>\n            <ha-icon-button\n              slot=\"trigger\"\n              .label=${this.hass.localize(\"ui.common.menu\")}\n              .path=${Yi}\n            >\n            </ha-icon-button>\n            <mwc-list-item>\n              ${this._yamlMode?this.hass.localize(\"ui.panel.config.automation.editor.edit_ui\"):this.hass.localize(\"ui.panel.config.automation.editor.edit_yaml\")}\n            </mwc-list-item>\n            <mwc-list-item>\n              ${this.hass.localize(\"ui.panel.config.automation.editor.actions.duplicate\")}\n            </mwc-list-item>\n            <mwc-list-item>\n              ${!1===this.condition.enabled?this.hass.localize(\"ui.panel.config.automation.editor.actions.enable\"):this.hass.localize(\"ui.panel.config.automation.editor.actions.disable\")}\n            </mwc-list-item>\n            <mwc-list-item class=\"warning\">\n              ${this.hass.localize(\"ui.panel.config.automation.editor.actions.delete\")}\n            </mwc-list-item>\n          </ha-button-menu>\n        </div>\n        <div\n          class=\"card-content ${!1===this.condition.enabled?\"disabled\":\"\"}\"\n        >\n          ${this._warnings?k`<ha-alert\n                alert-type=\"warning\"\n                .title=${this.hass.localize(\"ui.errors.config.editor_not_supported\")}\n              >\n                ${this._warnings.length>0&&void 0!==this._warnings[0]?k` <ul>\n                      ${this._warnings.map((e=>k`<li>${e}</li>`))}\n                    </ul>`:\"\"}\n                ${this.hass.localize(\"ui.errors.config.edit_in_yaml_supported\")}\n              </ha-alert>`:\"\"}\n          <ha-automation-condition-editor\n            @ui-mode-not-available=${this._handleUiModeNotAvailable}\n            @value-changed=${this._handleChangeEvent}\n            .yamlMode=${this._yamlMode}\n            .hass=${this.hass}\n            .condition=${this.condition}\n          ></ha-automation-condition-editor>\n        </div>\n      </ha-card>\n    `:k``}},{kind:\"method\",key:\"_handleUiModeNotAvailable\",value:function(e){e.stopPropagation(),this._warnings=bn(this.hass,e.detail).warnings,this._yamlMode||(this._yamlMode=!0)}},{kind:\"method\",key:\"_handleChangeEvent\",value:function(e){e.detail.yaml&&(this._warnings=void 0)}},{kind:\"method\",key:\"_handleAction\",value:function(t){switch(t.detail.index){case 0:this._switchYamlMode();break;case 1:e(this,\"duplicate\");break;case 2:this._onDisable();break;case 3:this._onDelete()}}},{kind:\"method\",key:\"_onDisable\",value:function(){var t;const i=!(null===(t=this.condition.enabled)||void 0===t||t),a={...this.condition,enabled:i};var n;(e(this,\"value-changed\",{value:a}),this._yamlMode)&&(null===(n=this._yamlEditor)||void 0===n||n.setValue(a))}},{kind:\"method\",key:\"_onDelete\",value:function(){Sa(this,{text:this.hass.localize(\"ui.panel.config.automation.editor.conditions.delete_confirm\"),dismissText:this.hass.localize(\"ui.common.cancel\"),confirmText:this.hass.localize(\"ui.common.delete\"),confirm:()=>{e(this,\"value-changed\",{value:null})}})}},{kind:\"method\",key:\"_switchYamlMode\",value:function(){this._warnings=void 0,this._yamlMode=!this._yamlMode}},{kind:\"method\",key:\"_testCondition\",value:async function(e){const t=this.condition,i=e.target;if(!i.progress){i.progress=!0;try{const e=await xn(this.hass,{condition:t});if(this.condition!==t)return;if(!e.condition.valid)return void La(this,{title:this.hass.localize(\"ui.panel.config.automation.editor.conditions.invalid_condition\"),text:e.condition.error});let a;try{a=await((e,t,i)=>e.callWS({type:\"test_condition\",condition:t,variables:i}))(this.hass,t)}catch(e){if(this.condition!==t)return;return void La(this,{title:this.hass.localize(\"ui.panel.config.automation.editor.conditions.test_failed\"),text:e.message})}if(this.condition!==t)return;a.result?i.actionSuccess():i.actionError()}finally{i.progress=!1}}}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[Hi,i`\n        .disabled {\n          opacity: 0.5;\n          pointer-events: none;\n        }\n        .card-content {\n          padding-top: 16px;\n          margin-top: 0;\n        }\n        .disabled-bar {\n          background: var(--divider-color, #e0e0e0);\n          text-align: center;\n          border-top-right-radius: var(--ha-card-border-radius);\n          border-top-left-radius: var(--ha-card-border-radius);\n        }\n        .card-menu {\n          float: var(--float-end, right);\n          z-index: 3;\n          margin: 4px;\n          --mdc-theme-text-primary-on-background: var(--primary-text-color);\n          display: flex;\n          align-items: center;\n        }\n        mwc-list-item[disabled] {\n          --mdc-theme-text-primary-on-background: var(--disabled-text-color);\n        }\n      `]}}]}}),m);const $l=(e,t)=>e.callWS({type:\"device_automation/action/list\",device_id:t}),wl=(e,t)=>e.callWS({type:\"device_automation/condition/list\",device_id:t}),Cl=(e,t)=>e.callWS({type:\"device_automation/trigger/list\",device_id:t}),Al=[\"device_id\",\"domain\",\"entity_id\",\"type\",\"subtype\",\"event\",\"condition\",\"platform\"],Il=(e,t)=>{if(typeof e!=typeof t)return!1;for(const i in e)if(Al.includes(i)&&!Object.is(e[i],t[i]))return!1;for(const i in t)if(Al.includes(i)&&!Object.is(e[i],t[i]))return!1;return!0},El=(e,t)=>{const i=t.entity_id?e.states[t.entity_id]:void 0;return e.localize(`component.${t.domain}.device_automation.action_type.${t.type}`,\"entity_name\",i?Sn(i):t.entity_id||\"<unknown>\",\"subtype\",t.subtype?e.localize(`component.${t.domain}.device_automation.action_subtype.${t.subtype}`)||t.subtype:\"\")||(t.subtype?`\"${t.subtype}\" ${t.type}`:t.type)},zl=(e,t)=>{const i=t.entity_id?e.states[t.entity_id]:void 0;return e.localize(`component.${t.domain}.device_automation.condition_type.${t.type}`,\"entity_name\",i?Sn(i):t.entity_id||\"<unknown>\",\"subtype\",t.subtype?e.localize(`component.${t.domain}.device_automation.condition_subtype.${t.subtype}`)||t.subtype:\"\")||(t.subtype?`\"${t.subtype}\" ${t.type}`:t.type)},Sl=(e,t)=>{const i=t.entity_id?e.states[t.entity_id]:void 0;return e.localize(`component.${t.domain}.device_automation.trigger_type.${t.type}`,\"entity_name\",i?Sn(i):t.entity_id||\"<unknown>\",\"subtype\",t.subtype?e.localize(`component.${t.domain}.device_automation.trigger_subtype.${t.subtype}`)||t.subtype:\"\")||(t.subtype?`\"${t.subtype}\" ${t.type}`:t.type)},Ll=(e,t)=>{var i,a,n,o;return null===(i=e.metadata)||void 0===i||!i.secondary||null!==(a=t.metadata)&&void 0!==a&&a.secondary?null!==(n=e.metadata)&&void 0!==n&&n.secondary||null===(o=t.metadata)||void 0===o||!o.secondary?0:-1:1},Tl=\"NO_AUTOMATION\",Ol=\"UNKNOWN_AUTOMATION\";let Pl=v(null,(function(t,a){class n extends a{constructor(e,i,a){super(),t(this),this._localizeDeviceAutomation=e,this._fetchDeviceAutomations=i,this._createNoAutomation=a}}return{F:n,d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"deviceId\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_automations\",value:()=>[]},{kind:\"field\",decorators:[Vi()],key:\"_renderEmpty\",value:()=>!1},{kind:\"get\",key:\"NO_AUTOMATION_TEXT\",value:function(){return this.hass.localize(\"ui.panel.config.devices.automation.actions.no_actions\")}},{kind:\"get\",key:\"UNKNOWN_AUTOMATION_TEXT\",value:function(){return this.hass.localize(\"ui.panel.config.devices.automation.actions.unknown_action\")}},{kind:\"field\",key:\"_localizeDeviceAutomation\",value:void 0},{kind:\"field\",key:\"_fetchDeviceAutomations\",value:void 0},{kind:\"field\",key:\"_createNoAutomation\",value:void 0},{kind:\"get\",key:\"_value\",value:function(){if(!this.value)return\"\";if(!this._automations.length)return Tl;const e=this._automations.findIndex((e=>Il(e,this.value)));return-1===e?Ol:`${this._automations[e].device_id}_${e}`}},{kind:\"method\",key:\"render\",value:function(){if(this._renderEmpty)return k``;const e=this._value;return k`\n      <ha-select\n        .label=${this.label}\n        .value=${e}\n        @selected=${this._automationChanged}\n        .disabled=${0===this._automations.length}\n      >\n        ${e===Tl?k`<mwc-list-item .value=${Tl}>\n              ${this.NO_AUTOMATION_TEXT}\n            </mwc-list-item>`:\"\"}\n        ${e===Ol?k`<mwc-list-item .value=${Ol}>\n              ${this.UNKNOWN_AUTOMATION_TEXT}\n            </mwc-list-item>`:\"\"}\n        ${this._automations.map(((e,t)=>k`\n            <mwc-list-item .value=${`${e.device_id}_${t}`}>\n              ${this._localizeDeviceAutomation(this.hass,e)}\n            </mwc-list-item>\n          `))}\n      </ha-select>\n    `}},{kind:\"method\",key:\"updated\",value:function(e){_(y(n.prototype),\"updated\",this).call(this,e),e.has(\"deviceId\")&&this._updateDeviceInfo()}},{kind:\"method\",key:\"_updateDeviceInfo\",value:async function(){this._automations=this.deviceId?(await this._fetchDeviceAutomations(this.hass,this.deviceId)).sort(Ll):[],this.value&&this.value.device_id===this.deviceId||this._setValue(this._automations.length?this._automations[0]:this._createNoAutomation(this.deviceId)),this._renderEmpty=!0,await this.updateComplete,this._renderEmpty=!1}},{kind:\"method\",key:\"_automationChanged\",value:function(e){const t=e.target.value;if(!t||[Ol,Tl].includes(t))return;const[i,a]=t.split(\"_\"),n=this._automations[a];n.device_id===i&&this._setValue(n)}},{kind:\"method\",key:\"_setValue\",value:function(t){if(this.value&&Il(t,this.value))return;const i={...t};delete i.metadata,e(this,\"value-changed\",{value:i})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      ha-select {\n        width: 100%;\n        margin-top: 4px;\n      }\n    `}}]}}),m);v([w(\"ha-device-condition-picker\")],(function(e,t){return{F:class extends t{constructor(){super(zl,wl,(e=>({device_id:e||\"\",condition:\"device\",domain:\"\",entity_id:\"\"}))),e(this)}},d:[{kind:\"get\",key:\"NO_AUTOMATION_TEXT\",value:function(){return this.hass.localize(\"ui.panel.config.devices.automation.conditions.no_conditions\")}},{kind:\"get\",key:\"UNKNOWN_AUTOMATION_TEXT\",value:function(){return this.hass.localize(\"ui.panel.config.devices.automation.conditions.unknown_condition\")}}]}}),Pl);const Ml=e=>e.sendMessagePromise({type:\"config/area_registry/list\"}).then((e=>e.sort(((e,t)=>Za(e.name,t.name))))),Fl=(e,t)=>e.subscribeEvents(Ea((()=>Ml(e).then((e=>t.setState(e,!0)))),500,!0),\"area_registry_updated\"),Dl=(e,t)=>Zi(\"_areaRegistry\",Ml,Fl,e,t),Bl=(e,t,i)=>e.name_by_user||e.name||i&&((e,t)=>{for(const i of t||[]){const t=\"string\"==typeof i?i:i.entity_id,a=e.states[t];if(a)return Sn(a)}})(t,i)||t.localize(\"ui.panel.config.devices.unnamed_device\",\"type\",t.localize(`ui.panel.config.devices.type.${e.entry_type||\"device\"}`)),Nl=e=>e.sendMessagePromise({type:\"config/device_registry/list\"}),Vl=(e,t)=>e.subscribeEvents(Ea((()=>Nl(e).then((e=>t.setState(e,!0)))),500,!0),\"device_registry_updated\"),jl=(e,t)=>Zi(\"_dr\",Nl,Vl,e,t),ql=e=>e.sendMessagePromise({type:\"config/entity_registry/list\"}),Rl=(e,t)=>e.subscribeEvents(Ea((()=>ql(e).then((e=>t.setState(e,!0)))),500,!0),\"entity_registry_updated\"),Ul=(e,t)=>Zi(\"_entityRegistry\",ql,Rl,e,t),Hl=e=>v(null,(function(e,t){class i extends t{constructor(...t){super(...t),e(this)}}return{F:i,d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",key:\"hassSubscribeRequiredHostProps\",value:void 0},{kind:\"field\",key:\"__unsubs\",value:void 0},{kind:\"method\",key:\"connectedCallback\",value:function(){_(y(i.prototype),\"connectedCallback\",this).call(this),this.__checkSubscribed()}},{kind:\"method\",key:\"disconnectedCallback\",value:function(){if(_(y(i.prototype),\"disconnectedCallback\",this).call(this),this.__unsubs){for(;this.__unsubs.length;){const e=this.__unsubs.pop();e instanceof Promise?e.then((e=>e())):e()}this.__unsubs=void 0}}},{kind:\"method\",key:\"updated\",value:function(e){if(_(y(i.prototype),\"updated\",this).call(this,e),e.has(\"hass\"))this.__checkSubscribed();else if(this.hassSubscribeRequiredHostProps)for(const t of e.keys())if(this.hassSubscribeRequiredHostProps.includes(t))return void this.__checkSubscribed()}},{kind:\"method\",key:\"hassSubscribe\",value:function(){return[]}},{kind:\"method\",key:\"__checkSubscribed\",value:function(){var e;void 0!==this.__unsubs||!this.isConnected||void 0===this.hass||null!==(e=this.hassSubscribeRequiredHostProps)&&void 0!==e&&e.some((e=>void 0===this[e]))||(this.__unsubs=this.hassSubscribe())}}]}}),e),Gl=e=>k`<mwc-list-item\n  .twoline=${!!e.area}\n>\n  <span>${e.name}</span>\n  <span slot=\"secondary\">${e.area}</span>\n</mwc-list-item>`;v([w(\"ha-device-picker\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f()],key:\"devices\",value:void 0},{kind:\"field\",decorators:[f()],key:\"areas\",value:void 0},{kind:\"field\",decorators:[f()],key:\"entities\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"include-domains\"})],key:\"includeDomains\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"exclude-domains\"})],key:\"excludeDomains\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"include-device-classes\"})],key:\"includeDeviceClasses\",value:void 0},{kind:\"field\",decorators:[f()],key:\"deviceFilter\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_opened\",value:void 0},{kind:\"field\",decorators:[g(\"ha-combo-box\",!0)],key:\"comboBox\",value:void 0},{kind:\"field\",key:\"_init\",value:()=>!1},{kind:\"field\",key:\"_getDevices\",value(){return Ri(((e,t,i,a,n,o,s)=>{if(!e.length)return[{id:\"no_devices\",area:\"\",name:this.hass.localize(\"ui.components.device-picker.no_devices\")}];const r={};if(a||n||o)for(const e of i)e.device_id&&(e.device_id in r||(r[e.device_id]=[]),r[e.device_id].push(e));const l={};for(const e of t)l[e.area_id]=e;let d=e.filter((e=>e.id===this.value||!e.disabled_by));a&&(d=d.filter((e=>{const t=r[e.id];return!(!t||!t.length)&&r[e.id].some((e=>a.includes(zn(e.entity_id))))}))),n&&(d=d.filter((e=>{const t=r[e.id];return!t||!t.length||i.every((e=>!n.includes(zn(e.entity_id))))}))),o&&(d=d.filter((e=>{const t=r[e.id];return!(!t||!t.length)&&r[e.id].some((e=>{const t=this.hass.states[e.entity_id];return!!t&&(t.attributes.device_class&&o.includes(t.attributes.device_class))}))}))),s&&(d=d.filter((e=>e.id===this.value||s(e))));const c=d.map((e=>({id:e.id,name:Bl(e,this.hass,r[e.id]),area:e.area_id&&l[e.area_id]?l[e.area_id].name:this.hass.localize(\"ui.components.device-picker.no_area\")})));return c.length?1===c.length?c:c.sort(((e,t)=>Za(e.name||\"\",t.name||\"\"))):[{id:\"no_devices\",area:\"\",name:this.hass.localize(\"ui.components.device-picker.no_match\")}]}))}},{kind:\"method\",key:\"open\",value:function(){var e;null===(e=this.comboBox)||void 0===e||e.open()}},{kind:\"method\",key:\"focus\",value:function(){var e;null===(e=this.comboBox)||void 0===e||e.focus()}},{kind:\"method\",key:\"hassSubscribe\",value:function(){return[jl(this.hass.connection,(e=>{this.devices=e})),Dl(this.hass.connection,(e=>{this.areas=e})),Ul(this.hass.connection,(e=>{this.entities=e}))]}},{kind:\"method\",key:\"updated\",value:function(e){(!this._init&&this.devices&&this.areas&&this.entities||e.has(\"_opened\")&&this._opened)&&(this._init=!0,this.comboBox.items=this._getDevices(this.devices,this.areas,this.entities,this.includeDomains,this.excludeDomains,this.includeDeviceClasses,this.deviceFilter))}},{kind:\"method\",key:\"render\",value:function(){return this.devices&&this.areas&&this.entities?k`\n      <ha-combo-box\n        .hass=${this.hass}\n        .label=${void 0===this.label&&this.hass?this.hass.localize(\"ui.components.device-picker.device\"):this.label}\n        .value=${this._value}\n        .helper=${this.helper}\n        .renderer=${Gl}\n        .disabled=${this.disabled}\n        .required=${this.required}\n        item-value-path=\"id\"\n        item-label-path=\"name\"\n        @opened-changed=${this._openedChanged}\n        @value-changed=${this._deviceChanged}\n      ></ha-combo-box>\n    `:k``}},{kind:\"get\",key:\"_value\",value:function(){return this.value||\"\"}},{kind:\"method\",key:\"_deviceChanged\",value:function(e){e.stopPropagation();let t=e.detail.value;\"no_devices\"===t&&(t=\"\"),t!==this._value&&this._setValue(t)}},{kind:\"method\",key:\"_openedChanged\",value:function(e){this._opened=e.detail.value}},{kind:\"method\",key:\"_setValue\",value:function(t){this.value=t,setTimeout((()=>{e(this,\"value-changed\",{value:t}),e(this,\"change\")}),0)}}]}}),Hl(m));let Wl=v([w(\"ha-automation-condition-device\")],(function(t,a){class n extends a{constructor(...e){super(...e),t(this)}}return{F:n,d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({type:Object})],key:\"condition\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_deviceId\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_capabilities\",value:void 0},{kind:\"field\",key:\"_origCondition\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{device_id:\"\",domain:\"\",entity_id:\"\"}}},{kind:\"field\",key:\"_extraFieldsData\",value:()=>Ri(((e,t)=>{const i={};return t.extra_fields.forEach((t=>{void 0!==e[t.name]&&(i[t.name]=e[t.name])})),i}))},{kind:\"method\",key:\"render\",value:function(){var e;const t=this._deviceId||this.condition.device_id;return k`\n      <ha-device-picker\n        .value=${t}\n        @value-changed=${this._devicePicked}\n        .hass=${this.hass}\n        label=${this.hass.localize(\"ui.panel.config.automation.editor.conditions.type.device.label\")}\n      ></ha-device-picker>\n      <ha-device-condition-picker\n        .value=${this.condition}\n        .deviceId=${t}\n        @value-changed=${this._deviceConditionPicked}\n        .hass=${this.hass}\n        label=${this.hass.localize(\"ui.panel.config.automation.editor.conditions.type.device.condition\")}\n      ></ha-device-condition-picker>\n      ${null!==(e=this._capabilities)&&void 0!==e&&e.extra_fields?k`\n            <ha-form\n              .hass=${this.hass}\n              .data=${this._extraFieldsData(this.condition,this._capabilities)}\n              .schema=${this._capabilities.extra_fields}\n              .computeLabel=${this._extraFieldsComputeLabelCallback(this.hass.localize)}\n              @value-changed=${this._extraFieldsChanged}\n            ></ha-form>\n          `:\"\"}\n    `}},{kind:\"method\",key:\"firstUpdated\",value:function(){this._capabilities||this._getCapabilities(),this.condition&&(this._origCondition=this.condition)}},{kind:\"method\",key:\"updated\",value:function(e){const t=e.get(\"condition\");t&&!Il(t,this.condition)&&this._getCapabilities()}},{kind:\"method\",key:\"_getCapabilities\",value:async function(){const e=this.condition;this._capabilities=e.domain?await((e,t)=>e.callWS({type:\"device_automation/condition/capabilities\",condition:t}))(this.hass,e):void 0}},{kind:\"method\",key:\"_devicePicked\",value:function(t){t.stopPropagation(),this._deviceId=t.target.value,void 0===this._deviceId&&e(this,\"value-changed\",{value:{...n.defaultConfig,condition:\"device\"}})}},{kind:\"method\",key:\"_deviceConditionPicked\",value:function(t){t.stopPropagation();let i=t.detail.value;this._origCondition&&Il(this._origCondition,i)&&(i=this._origCondition),e(this,\"value-changed\",{value:i})}},{kind:\"method\",key:\"_extraFieldsChanged\",value:function(t){t.stopPropagation(),e(this,\"value-changed\",{value:{...this.condition,...t.detail.value}})}},{kind:\"method\",key:\"_extraFieldsComputeLabelCallback\",value:function(e){return t=>e(`ui.panel.config.automation.editor.conditions.type.device.extra_fields.${t.name}`)||t.name}},{kind:\"field\",static:!0,key:\"styles\",value:()=>i`\n    ha-device-picker {\n      display: block;\n      margin-bottom: 24px;\n    }\n  `}]}}),m);v([w(\"ha-automation-condition\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"conditions\",value:void 0},{kind:\"method\",key:\"updated\",value:function(t){if(!t.has(\"conditions\"))return;let i;Array.isArray(this.conditions)||(i=[this.conditions]),(i||this.conditions).forEach(((e,t)=>{\"string\"==typeof e&&(i=i||[...this.conditions],i[t]={condition:\"template\",value_template:e})})),i&&e(this,\"value-changed\",{value:i})}},{kind:\"method\",key:\"render\",value:function(){return Array.isArray(this.conditions)?k`\n      ${this.conditions.map(((e,t)=>k`\n          <ha-automation-condition-row\n            .index=${t}\n            .condition=${e}\n            @duplicate=${this._duplicateCondition}\n            @value-changed=${this._conditionChanged}\n            .hass=${this.hass}\n          ></ha-automation-condition-row>\n        `))}\n      <ha-card outlined>\n        <div class=\"card-actions add-card\">\n          <mwc-button @click=${this._addCondition}>\n            ${this.hass.localize(\"ui.panel.config.automation.editor.conditions.add\")}\n          </mwc-button>\n        </div>\n      </ha-card>\n    `:k``}},{kind:\"method\",key:\"_addCondition\",value:function(){const t=this.conditions.concat({condition:\"device\",...Wl.defaultConfig});e(this,\"value-changed\",{value:t})}},{kind:\"method\",key:\"_conditionChanged\",value:function(t){t.stopPropagation();const i=[...this.conditions],a=t.detail.value,n=t.target.index;null===a?i.splice(n,1):i[n]=a,e(this,\"value-changed\",{value:i})}},{kind:\"method\",key:\"_duplicateCondition\",value:function(t){t.stopPropagation();const i=t.target.index;e(this,\"value-changed\",{value:this.conditions.concat(Ya(this.conditions[i]))})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      ha-automation-condition-row,\n      ha-card {\n        display: block;\n        margin-top: 16px;\n      }\n      .add-card mwc-button {\n        display: block;\n        text-align: center;\n      }\n    `}}]}}),m);const Kl=e=>{if(void 0===e)return;if(\"object\"!=typeof e){if(\"string\"==typeof e||isNaN(e)){const t=(null==e?void 0:e.toString().split(\":\"))||[];return{hours:Number(t[0])||0,minutes:Number(t[1])||0,seconds:Number(t[2])||0,milliseconds:Number(t[3])||0}}return{seconds:e}}if(!(\"days\"in e))return e;const{days:t,minutes:i,seconds:a,milliseconds:n}=e;let o=e.hours||0;return o=(o||0)+24*(t||0),{hours:o,minutes:i,seconds:a,milliseconds:n}},Yl=fn({platform:_n(),id:gn(_n()),enabled:gn(pn())}),Zl=fn({days:gn(mn()),hours:gn(mn()),minutes:gn(mn()),seconds:gn(mn())}),Ql=fn({condition:vn(\"state\"),entity_id:gn(_n()),attribute:gn(_n()),state:gn(_n()),for:gn(kn([_n(),Zl]))});let Xl=v([w(\"ha-automation-condition-state\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"condition\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{entity_id:\"\",state:\"\"}}},{kind:\"field\",key:\"_schema\",value:()=>Ri((e=>[{name:\"entity_id\",required:!0,selector:{entity:{}}},{name:\"attribute\",selector:{attribute:{entity_id:e}}},{name:\"state\",selector:{text:{}}},{name:\"for\",selector:{duration:{}}}]))},{kind:\"method\",key:\"shouldUpdate\",value:function(t){if(t.has(\"condition\"))try{sn(this.condition,Ql)}catch(t){return e(this,\"ui-mode-not-available\",t),!1}return!0}},{kind:\"method\",key:\"render\",value:function(){const e=Kl(this.condition.for),t={...this.condition,for:e},i=this._schema(this.condition.entity_id);return k`\n      <ha-form\n        .hass=${this.hass}\n        .data=${t}\n        .schema=${i}\n        @value-changed=${this._valueChanged}\n        .computeLabel=${this._computeLabelCallback}\n      ></ha-form>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;Object.keys(i).forEach((e=>void 0===i[e]||\"\"===i[e]?delete i[e]:{})),e(this,\"value-changed\",{value:i})}},{kind:\"field\",key:\"_computeLabelCallback\",value(){return e=>{switch(e.name){case\"entity_id\":return this.hass.localize(\"ui.components.entity.entity-picker.entity\");case\"attribute\":return this.hass.localize(\"ui.components.entity.entity-attribute-picker.attribute\");case\"for\":return this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.state.for\");default:return this.hass.localize(`ui.panel.config.automation.editor.conditions.type.state.${e.name}`)}}}}]}}),m),Jl=v([w(\"ha-automation-condition-logical\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"condition\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{conditions:[{condition:\"state\",...Xl.defaultConfig}]}}},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-automation-condition\n        .conditions=${this.condition.conditions||[]}\n        @value-changed=${this._valueChanged}\n        .hass=${this.hass}\n      ></ha-automation-condition>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){t.stopPropagation(),e(this,\"value-changed\",{value:{...this.condition,conditions:t.detail.value}})}}]}}),m);v([w(\"ha-automation-condition-and\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[]}}),Jl),v([w(\"ha-automation-condition-not\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[]}}),Jl),v([w(\"ha-automation-condition-numeric_state\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"condition\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{entity_id:\"\"}}},{kind:\"field\",key:\"_schema\",value:()=>Ri((e=>[{name:\"entity_id\",required:!0,selector:{entity:{}}},{name:\"attribute\",selector:{attribute:{entity_id:e}}},{name:\"above\",selector:{text:{}}},{name:\"below\",selector:{text:{}}},{name:\"value_template\",selector:{text:{multiline:!0}}}]))},{kind:\"method\",key:\"render\",value:function(){const e=this._schema(this.condition.entity_id);return k`\n      <ha-form\n        .hass=${this.hass}\n        .data=${this.condition}\n        .schema=${e}\n        @value-changed=${this._valueChanged}\n        .computeLabel=${this._computeLabelCallback}\n      ></ha-form>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;e(this,\"value-changed\",{value:i})}},{kind:\"field\",key:\"_computeLabelCallback\",value(){return e=>{switch(e.name){case\"entity_id\":return this.hass.localize(\"ui.components.entity.entity-picker.entity\");case\"attribute\":return this.hass.localize(\"ui.components.entity.entity-attribute-picker.attribute\");default:return this.hass.localize(`ui.panel.config.automation.editor.triggers.type.numeric_state.${e.name}`)}}}}]}}),m),v([w(\"ha-automation-condition-or\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[]}}),Jl),v([w(\"ha-automation-condition-sun\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"condition\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{}}},{kind:\"field\",key:\"_schema\",value:()=>Ri((e=>[{name:\"before\",type:\"select\",required:!0,options:[[\"sunrise\",e(\"ui.panel.config.automation.editor.conditions.type.sun.sunrise\")],[\"sunset\",e(\"ui.panel.config.automation.editor.conditions.type.sun.sunset\")]]},{name:\"before_offset\",selector:{text:{}}},{name:\"after\",type:\"select\",required:!0,options:[[\"sunrise\",e(\"ui.panel.config.automation.editor.conditions.type.sun.sunrise\")],[\"sunset\",e(\"ui.panel.config.automation.editor.conditions.type.sun.sunset\")]]},{name:\"after_offset\",selector:{text:{}}}]))},{kind:\"method\",key:\"render\",value:function(){const e=this._schema(this.hass.localize);return k`\n      <ha-form\n        .schema=${e}\n        .data=${this.condition}\n        .hass=${this.hass}\n        .computeLabel=${this._computeLabelCallback}\n        @value-changed=${this._valueChanged}\n      ></ha-form>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;e(this,\"value-changed\",{value:i})}},{kind:\"field\",key:\"_computeLabelCallback\",value(){return e=>this.hass.localize(`ui.panel.config.automation.editor.conditions.type.sun.${e.name}`)}}]}}),m);const ed={fromAttribute:e=>null!==e&&(\"\"===e||e),toAttribute:e=>\"boolean\"==typeof e?e?\"\":null:e};class td extends Oa{constructor(){super(...arguments),this.rows=2,this.cols=20,this.charCounter=!1}render(){const e=this.charCounter&&-1!==this.maxLength,t=e&&\"internal\"===this.charCounter,i=e&&!t,a=!!this.helper||!!this.validationMessage||i,n={\"mdc-text-field--disabled\":this.disabled,\"mdc-text-field--no-label\":!this.label,\"mdc-text-field--filled\":!this.outlined,\"mdc-text-field--outlined\":this.outlined,\"mdc-text-field--end-aligned\":this.endAligned,\"mdc-text-field--with-internal-counter\":t};return k`\n      <label class=\"mdc-text-field mdc-text-field--textarea ${Xi(n)}\">\n        ${this.renderRipple()}\n        ${this.outlined?this.renderOutline():this.renderLabel()}\n        ${this.renderInput()}\n        ${this.renderCharCounter(t)}\n        ${this.renderLineRipple()}\n      </label>\n      ${this.renderHelperText(a,i)}\n    `}renderInput(){const e=this.label?\"label\":void 0,t=-1===this.minLength?void 0:this.minLength,i=-1===this.maxLength?void 0:this.maxLength,a=this.autocapitalize?this.autocapitalize:void 0;return k`\n      <textarea\n          aria-labelledby=${qi(e)}\n          class=\"mdc-text-field__input\"\n          .value=\"${Pa(this.value)}\"\n          rows=\"${this.rows}\"\n          cols=\"${this.cols}\"\n          ?disabled=\"${this.disabled}\"\n          placeholder=\"${this.placeholder}\"\n          ?required=\"${this.required}\"\n          ?readonly=\"${this.readOnly}\"\n          minlength=\"${qi(t)}\"\n          maxlength=\"${qi(i)}\"\n          name=\"${qi(\"\"===this.name?void 0:this.name)}\"\n          inputmode=\"${qi(this.inputMode)}\"\n          autocapitalize=\"${qi(a)}\"\n          @input=\"${this.handleInputChange}\"\n          @blur=\"${this.onInputBlur}\">\n      </textarea>`}}Qi([g(\"textarea\")],td.prototype,\"formElement\",void 0),Qi([f({type:Number})],td.prototype,\"rows\",void 0),Qi([f({type:Number})],td.prototype,\"cols\",void 0),Qi([f({converter:ed})],td.prototype,\"charCounter\",void 0);const id=i`.mdc-text-field{height:100%}.mdc-text-field__input{resize:none}`;v([w(\"ha-textarea\")],(function(e,t){class a extends t{constructor(...t){super(...t),e(this)}}return{F:a,d:[{kind:\"field\",decorators:[f({type:Boolean,reflect:!0})],key:\"autogrow\",value:()=>!1},{kind:\"method\",key:\"updated\",value:function(e){_(y(a.prototype),\"updated\",this).call(this,e),this.autogrow&&e.has(\"value\")&&(this.mdcRoot.dataset.value=this.value+'=​\"')}},{kind:\"field\",static:!0,key:\"styles\",value:()=>[Ma,id,i`\n      :host([autogrow]) .mdc-text-field {\n        position: relative;\n        min-height: 74px;\n        min-width: 178px;\n        max-height: 200px;\n      }\n      :host([autogrow]) .mdc-text-field:after {\n        content: attr(data-value);\n        margin-top: 23px;\n        margin-bottom: 9px;\n        line-height: 1.5rem;\n        min-height: 42px;\n        padding: 0px 32px 0 16px;\n        letter-spacing: var(\n          --mdc-typography-subtitle1-letter-spacing,\n          0.009375em\n        );\n        visibility: hidden;\n        white-space: pre-wrap;\n      }\n      :host([autogrow]) .mdc-text-field__input {\n        position: absolute;\n        height: calc(100% - 32px);\n      }\n      :host([autogrow]) .mdc-text-field.mdc-text-field--no-label:after {\n        margin-top: 16px;\n        margin-bottom: 16px;\n      }\n    `]}]}}),td),v([w(\"ha-automation-condition-template\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"condition\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{value_template:\"\"}}},{kind:\"method\",key:\"render\",value:function(){const{value_template:e}=this.condition;return k`\n      <p>\n        ${this.hass.localize(\"ui.panel.config.automation.editor.conditions.type.template.value_template\")}\n        *\n      </p>\n      <ha-code-editor\n        .name=${\"value_template\"}\n        mode=\"jinja2\"\n        .hass=${this.hass}\n        .value=${e}\n        autocomplete-entities\n        @value-changed=${this._valueChanged}\n        dir=\"ltr\"\n      ></ha-code-editor>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){((t,i)=>{var a,n,o;i.stopPropagation();const s=null===(a=i.currentTarget)||void 0===a?void 0:a.name;if(!s)return;const r=(null===(n=i.detail)||void 0===n?void 0:n.value)||(null===(o=i.currentTarget)||void 0===o?void 0:o.value);if((t.condition[s]||\"\")===r)return;let l;r?l={...t.condition,[s]:r}:(l={...t.condition},delete l[s]),e(t,\"value-changed\",{value:l})})(this,t)}}]}}),m);const ad={mon:1,tue:2,wed:3,thu:4,fri:5,sat:6,sun:7};v([w(\"ha-automation-condition-time\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"condition\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_inputModeBefore\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_inputModeAfter\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{}}},{kind:\"field\",key:\"_schema\",value:()=>Ri(((e,t,i)=>{const a=t?{name:\"after\",selector:{entity:{domain:\"input_datetime\"}}}:{name:\"after\",selector:{time:{}}},n=i?{name:\"before\",selector:{entity:{domain:\"input_datetime\"}}}:{name:\"before\",selector:{time:{}}};return[{name:\"mode_after\",type:\"select\",required:!0,options:[[\"value\",e(\"ui.panel.config.automation.editor.conditions.type.time.type_value\")],[\"input\",e(\"ui.panel.config.automation.editor.conditions.type.time.type_input\")]]},a,{name:\"mode_before\",type:\"select\",required:!0,options:[[\"value\",e(\"ui.panel.config.automation.editor.conditions.type.time.type_value\")],[\"input\",e(\"ui.panel.config.automation.editor.conditions.type.time.type_input\")]]},n,{type:\"multi_select\",name:\"weekday\",options:Object.keys(ad).map((t=>[t,e(`ui.panel.config.automation.editor.conditions.type.time.weekdays.${t}`)]))}]}))},{kind:\"method\",key:\"render\",value:function(){var e,t,i,a;const n=null!==(e=this._inputModeBefore)&&void 0!==e?e:null===(t=this.condition.before)||void 0===t?void 0:t.startsWith(\"input_datetime.\"),o=null!==(i=this._inputModeAfter)&&void 0!==i?i:null===(a=this.condition.after)||void 0===a?void 0:a.startsWith(\"input_datetime.\"),s=this._schema(this.hass.localize,o,n),r={mode_before:n?\"input\":\"value\",mode_after:o?\"input\":\"value\",...this.condition};return k`\n      <ha-form\n        .hass=${this.hass}\n        .data=${r}\n        .schema=${s}\n        @value-changed=${this._valueChanged}\n        .computeLabel=${this._computeLabelCallback}\n      ></ha-form>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;this._inputModeAfter=\"input\"===i.mode_after,this._inputModeBefore=\"input\"===i.mode_before,delete i.mode_after,delete i.mode_before,Object.keys(i).forEach((e=>void 0===i[e]||\"\"===i[e]?delete i[e]:{})),e(this,\"value-changed\",{value:i})}},{kind:\"field\",key:\"_computeLabelCallback\",value(){return e=>this.hass.localize(`ui.panel.config.automation.editor.conditions.type.time.${e.name}`)}}]}}),m),v([w(\"ha-automation-condition-trigger\")],(function(t,i){class a extends i{constructor(...e){super(...e),t(this)}}return{F:a,d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"condition\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_triggers\",value:()=>[]},{kind:\"field\",key:\"_unsub\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{id:\"\"}}},{kind:\"method\",key:\"connectedCallback\",value:function(){_(y(a.prototype),\"connectedCallback\",this).call(this);const t={callback:e=>this._automationUpdated(e)};e(this,\"subscribe-automation-config\",t),this._unsub=t.unsub}},{kind:\"method\",key:\"disconnectedCallback\",value:function(){_(y(a.prototype),\"disconnectedCallback\",this).call(this),this._unsub&&this._unsub()}},{kind:\"method\",key:\"render\",value:function(){const{id:e}=this.condition;return this._triggers.length?k`<ha-select\n      .label=${this.hass.localize(\"ui.panel.config.automation.editor.conditions.type.trigger.id\")}\n      .value=${e}\n      @selected=${this._triggerPicked}\n    >\n      ${this._triggers.map((e=>k`\n            <mwc-list-item .value=${e.id}> ${e.id} </mwc-list-item>\n          `))}\n    </ha-select>`:this.hass.localize(\"ui.panel.config.automation.editor.conditions.type.trigger.no_triggers\")}},{kind:\"method\",key:\"_automationUpdated\",value:function(e){this._triggers=null!=e&&e.trigger?ws(e.trigger).filter((e=>e.id)):[]}},{kind:\"method\",key:\"_triggerPicked\",value:function(t){if(t.stopPropagation(),!t.target.value)return;const i=t.target.value;this.condition.id!==i&&e(this,\"value-changed\",{value:{...this.condition,id:i}})}}]}}),m);const nd=e=>\"latitude\"in e.attributes&&\"longitude\"in e.attributes;function od(e){return nd(e)&&\"zone\"!==as(e)}const sd=[\"zone\"];v([w(\"ha-automation-condition-zone\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"condition\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{entity_id:\"\",zone:\"\"}}},{kind:\"method\",key:\"render\",value:function(){const{entity_id:e,zone:t}=this.condition;return k`\n      <ha-entity-picker\n        .label=${this.hass.localize(\"ui.panel.config.automation.editor.conditions.type.zone.entity\")}\n        .value=${e}\n        @value-changed=${this._entityPicked}\n        .hass=${this.hass}\n        allow-custom-entity\n        .entityFilter=${od}\n      ></ha-entity-picker>\n      <ha-entity-picker\n        .label=${this.hass.localize(\"ui.panel.config.automation.editor.conditions.type.zone.zone\")}\n        .value=${t}\n        @value-changed=${this._zonePicked}\n        .hass=${this.hass}\n        allow-custom-entity\n        .includeDomains=${sd}\n      ></ha-entity-picker>\n      <label id=\"eventlabel\">\n        ${this.hass.localize(\"ui.panel.config.automation.editor.conditions.type.zone.event\")}\n      </label>\n    `}},{kind:\"method\",key:\"_entityPicked\",value:function(t){t.stopPropagation(),e(this,\"value-changed\",{value:{...this.condition,entity_id:t.detail.value}})}},{kind:\"method\",key:\"_zonePicked\",value:function(t){t.stopPropagation(),e(this,\"value-changed\",{value:{...this.condition,zone:t.detail.value}})}},{kind:\"field\",static:!0,key:\"styles\",value:()=>i`\n    ha-entity-picker {\n      display: block;\n      margin-bottom: 24px;\n    }\n  `}]}}),m);const rd=[\"device\",\"and\",\"or\",\"not\",\"state\",\"numeric_state\",\"sun\",\"template\",\"time\",\"trigger\",\"zone\"];v([w(\"ha-automation-condition-editor\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"condition\",value:void 0},{kind:\"field\",decorators:[f()],key:\"yamlMode\",value:()=>!1},{kind:\"field\",key:\"_processedCondition\",value:()=>Ri((e=>(e=>{if(\"condition\"in e&&Array.isArray(e.condition))return{condition:\"and\",conditions:e.condition};for(const t of[\"and\",\"or\",\"not\"])if(t in e)return{condition:t,conditions:e[t]};return e})(e)))},{kind:\"field\",key:\"_processedTypes\",value:()=>Ri((e=>rd.map((t=>[t,e(`ui.panel.config.automation.editor.conditions.type.${t}.label`)])).sort(((e,t)=>Za(e[1],t[1])))))},{kind:\"method\",key:\"render\",value:function(){const e=this._processedCondition(this.condition),t=rd.indexOf(e.condition),i=this.yamlMode||-1===t;return k`\n      ${i?k`\n            ${-1===t?k`\n                  ${this.hass.localize(\"ui.panel.config.automation.editor.conditions.unsupported_condition\",\"condition\",e.condition)}\n                `:\"\"}\n            <h2>\n              ${this.hass.localize(\"ui.panel.config.automation.editor.edit_yaml\")}\n            </h2>\n            <ha-yaml-editor\n              .hass=${this.hass}\n              .defaultValue=${this.condition}\n              @value-changed=${this._onYamlChange}\n            ></ha-yaml-editor>\n          `:k`\n            <ha-select\n              .label=${this.hass.localize(\"ui.panel.config.automation.editor.conditions.type_select\")}\n              .value=${e.condition}\n              naturalMenuWidth\n              @selected=${this._typeChanged}\n            >\n              ${this._processedTypes(this.hass.localize).map((([e,t])=>k`\n                  <mwc-list-item .value=${e}>${t}</mwc-list-item>\n                `))}\n            </ha-select>\n\n            <div>\n              ${za(`ha-automation-condition-${e.condition}`,{hass:this.hass,condition:e})}\n            </div>\n          `}\n    `}},{kind:\"method\",key:\"_typeChanged\",value:function(t){const i=t.target.value;if(!i)return;const a=customElements.get(`ha-automation-condition-${i}`);i!==this._processedCondition(this.condition).condition&&e(this,\"value-changed\",{value:{condition:i,...a.defaultConfig}})}},{kind:\"method\",key:\"_onYamlChange\",value:function(t){t.stopPropagation(),t.detail.isValid&&e(this,\"value-changed\",{value:t.detail.value,yaml:!0})}},{kind:\"field\",static:!0,key:\"styles\",value:()=>[Hi,i`\n      ha-select {\n        margin-bottom: 24px;\n      }\n    `]}]}}),m),v([w(\"ha-automation-action-condition\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"action\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{condition:\"state\"}}},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-automation-condition-editor\n        .condition=${this.action}\n        .hass=${this.hass}\n        @value-changed=${this._conditionChanged}\n      ></ha-automation-condition-editor>\n    `}},{kind:\"method\",key:\"_conditionChanged\",value:function(t){t.stopPropagation(),e(this,\"value-changed\",{value:t.detail.value})}}]}}),m);const ld=new RegExp(\"{%|{{\"),dd=e=>{if(!e)return!1;if(\"string\"==typeof e)return(e=>ld.test(e))(e);if(\"object\"==typeof e){return(Array.isArray(e)?e:Object.values(e)).some((e=>e&&dd(e)))}return!1};v([w(\"ha-automation-action-delay\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"action\",value:void 0},{kind:\"field\",decorators:[f()],key:\"_timeData\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{delay:\"\"}}},{kind:\"method\",key:\"willUpdate\",value:function(t){t.has(\"action\")&&(this.action&&dd(this.action)?e(this,\"ui-mode-not-available\",Error(this.hass.localize(\"ui.errors.config.no_template_editor_support\"))):this._timeData=Kl(this.action.delay))}},{kind:\"method\",key:\"render\",value:function(){return k`<ha-duration-input\n      .label=${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.delay.delay\")}\n      .data=${this._timeData}\n      enableMillisecond\n      @value-changed=${this._valueChanged}\n    ></ha-duration-input>`}},{kind:\"method\",key:\"_valueChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;i&&e(this,\"value-changed\",{value:{...this.action,delay:i}})}}]}}),m),v([w(\"ha-device-action-picker\")],(function(e,t){return{F:class extends t{constructor(){super(El,$l,(e=>({device_id:e||\"\",domain:\"\",entity_id:\"\"}))),e(this)}},d:[{kind:\"get\",key:\"NO_AUTOMATION_TEXT\",value:function(){return this.hass.localize(\"ui.panel.config.devices.automation.actions.no_actions\")}},{kind:\"get\",key:\"UNKNOWN_AUTOMATION_TEXT\",value:function(){return this.hass.localize(\"ui.panel.config.devices.automation.actions.unknown_action\")}}]}}),Pl);let cd=v([w(\"ha-automation-action-device_id\")],(function(t,a){class n extends a{constructor(...e){super(...e),t(this)}}return{F:n,d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({type:Object})],key:\"action\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_deviceId\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_capabilities\",value:void 0},{kind:\"field\",key:\"_origAction\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{device_id:\"\",domain:\"\",entity_id:\"\"}}},{kind:\"field\",key:\"_extraFieldsData\",value:()=>Ri(((e,t)=>{const i={};return t.extra_fields.forEach((t=>{void 0!==e[t.name]&&(i[t.name]=e[t.name])})),i}))},{kind:\"method\",key:\"render\",value:function(){var e;const t=this._deviceId||this.action.device_id;return k`\n      <ha-device-picker\n        .value=${t}\n        @value-changed=${this._devicePicked}\n        .hass=${this.hass}\n        label=${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.device_id.label\")}\n      ></ha-device-picker>\n      <ha-device-action-picker\n        .value=${this.action}\n        .deviceId=${t}\n        @value-changed=${this._deviceActionPicked}\n        .hass=${this.hass}\n        label=${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.device_id.action\")}\n      ></ha-device-action-picker>\n      ${null!==(e=this._capabilities)&&void 0!==e&&e.extra_fields?k`\n            <ha-form\n              .hass=${this.hass}\n              .data=${this._extraFieldsData(this.action,this._capabilities)}\n              .schema=${this._capabilities.extra_fields}\n              .computeLabel=${this._extraFieldsComputeLabelCallback(this.hass.localize)}\n              @value-changed=${this._extraFieldsChanged}\n            ></ha-form>\n          `:\"\"}\n    `}},{kind:\"method\",key:\"firstUpdated\",value:function(){this._capabilities||this._getCapabilities(),this.action&&(this._origAction=this.action)}},{kind:\"method\",key:\"updated\",value:function(e){const t=e.get(\"action\");t&&!Il(t,this.action)&&(this._deviceId=void 0,this._getCapabilities())}},{kind:\"method\",key:\"_getCapabilities\",value:async function(){var e,t;this._capabilities=this.action.domain?await(e=this.hass,t=this.action,e.callWS({type:\"device_automation/action/capabilities\",action:t})):void 0}},{kind:\"method\",key:\"_devicePicked\",value:function(t){t.stopPropagation(),this._deviceId=t.target.value,void 0===this._deviceId&&e(this,\"value-changed\",{value:n.defaultConfig})}},{kind:\"method\",key:\"_deviceActionPicked\",value:function(t){t.stopPropagation();let i=t.detail.value;this._origAction&&Il(this._origAction,i)&&(i=this._origAction),e(this,\"value-changed\",{value:i})}},{kind:\"method\",key:\"_extraFieldsChanged\",value:function(t){t.stopPropagation(),e(this,\"value-changed\",{value:{...this.action,...t.detail.value}})}},{kind:\"method\",key:\"_extraFieldsComputeLabelCallback\",value:function(e){return t=>e(`ui.panel.config.automation.editor.actions.type.device_id.extra_fields.${t.name}`)||t.name}},{kind:\"field\",static:!0,key:\"styles\",value:()=>i`\n    ha-device-picker {\n      display: block;\n      margin-bottom: 16px;\n    }\n    ha-device-action-picker {\n      display: block;\n    }\n  `}]}}),m);const ud=(e,t,i)=>e(`component.${t}.title`)||(null==i?void 0:i.name)||t,hd=e=>k`<mwc-list-item twoline>\n  <span>${e.name}</span>\n  <span slot=\"secondary\"\n    >${e.name===e.service?\"\":e.service}</span\n  >\n</mwc-list-item>`;let pd=v(null,(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_filter\",value:void 0},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-combo-box\n        .hass=${this.hass}\n        .label=${this.hass.localize(\"ui.components.service-picker.service\")}\n        .filteredItems=${this._filteredServices(this.hass.localize,this.hass.services,this._filter)}\n        .value=${this.value}\n        .renderer=${hd}\n        item-value-path=\"service\"\n        item-label-path=\"name\"\n        allow-custom-value\n        @filter-changed=${this._filterChanged}\n        @value-changed=${this._valueChanged}\n      ></ha-combo-box>\n    `}},{kind:\"field\",key:\"_services\",value:()=>Ri(((e,t)=>{if(!t)return[];const i=[];return Object.keys(t).sort().forEach((a=>{const n=Object.keys(t[a]).sort();for(const o of n)i.push({service:`${a}.${o}`,name:`${ud(e,a)}: ${t[a][o].name||o}`})})),i}))},{kind:\"field\",key:\"_filteredServices\",value(){return Ri(((e,t,i)=>{if(!t)return[];const a=this._services(e,t);return i?a.filter((e=>{var t;return e.service.toLowerCase().includes(i)||(null===(t=e.name)||void 0===t?void 0:t.toLowerCase().includes(i))})):a}))}},{kind:\"method\",key:\"_filterChanged\",value:function(e){this._filter=e.detail.value.toLowerCase()}},{kind:\"method\",key:\"_valueChanged\",value:function(t){this.value=t.detail.value,e(this,\"change\"),e(this,\"value-changed\",{value:this.value})}}]}}),m);customElements.define(\"ha-service-picker\",pd),v([w(\"ha-automation-action-event\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"action\",value:void 0},{kind:\"field\",decorators:[g(\"ha-yaml-editor\",!0)],key:\"_yamlEditor\",value:void 0},{kind:\"field\",key:\"_actionData\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{event:\"\",event_data:{}}}},{kind:\"method\",key:\"updated\",value:function(e){e.has(\"action\")&&(this._actionData&&this._actionData!==this.action.event_data&&this._yamlEditor&&this._yamlEditor.setValue(this.action.event_data),this._actionData=this.action.event_data)}},{kind:\"method\",key:\"render\",value:function(){const{event:e,event_data:t}=this.action;return k`\n      <ha-textfield\n        .label=${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.event.event\")}\n        .value=${e}\n        @change=${this._eventChanged}\n      ></ha-textfield>\n      <ha-yaml-editor\n        .hass=${this.hass}\n        .label=${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.event.event_data\")}\n        .name=${\"event_data\"}\n        .defaultValue=${t}\n        @value-changed=${this._dataChanged}\n      ></ha-yaml-editor>\n    `}},{kind:\"method\",key:\"_dataChanged\",value:function(e){e.stopPropagation(),e.detail.isValid&&(this._actionData=e.detail.value,qd(this,e))}},{kind:\"method\",key:\"_eventChanged\",value:function(t){t.stopPropagation(),e(this,\"value-changed\",{value:{...this.action,event:t.target.value}})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      ha-textfield {\n        display: block;\n      }\n    `}}]}}),m),v([w(\"ha-automation-action-if\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"action\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{if:[{...Wl.defaultConfig,condition:\"device\"}],then:[cd.defaultConfig]}}},{kind:\"method\",key:\"render\",value:function(){const e=this.action;return k`\n      <h3>\n        ${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.if.if\")}*:\n      </h3>\n      <ha-automation-condition\n        .conditions=${e.if}\n        .hass=${this.hass}\n        @value-changed=${this._ifChanged}\n      ></ha-automation-condition>\n\n      <h3>\n        ${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.if.then\")}*:\n      </h3>\n      <ha-automation-action\n        .actions=${e.then}\n        @value-changed=${this._thenChanged}\n        .hass=${this.hass}\n      ></ha-automation-action>\n\n      <h3>\n        ${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.if.else\")}:\n      </h3>\n      <ha-automation-action\n        .actions=${e.else||[]}\n        @value-changed=${this._elseChanged}\n        .hass=${this.hass}\n      ></ha-automation-action>\n    `}},{kind:\"method\",key:\"_ifChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;e(this,\"value-changed\",{value:{...this.action,if:i}})}},{kind:\"method\",key:\"_thenChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;e(this,\"value-changed\",{value:{...this.action,then:i}})}},{kind:\"method\",key:\"_elseChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;e(this,\"value-changed\",{value:{...this.action,else:i}})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return Hi}}]}}),m),v([w(\"ha-automation-action-parallel\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"action\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{parallel:[cd.defaultConfig]}}},{kind:\"method\",key:\"render\",value:function(){const e=this.action;return k`\n      <ha-automation-action\n        .actions=${e.parallel}\n        @value-changed=${this._actionsChanged}\n        .hass=${this.hass}\n      ></ha-automation-action>\n    `}},{kind:\"method\",key:\"_actionsChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;e(this,\"value-changed\",{value:{...this.action,parallel:i}})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return Hi}}]}}),m);const vd=\"browser\",md={album:{icon:Ji,layout:\"grid\"},app:{icon:ea,layout:\"grid\"},artist:{icon:ta,layout:\"grid\",show_list_images:!0},channel:{icon:ia,thumbnail_ratio:\"portrait\",layout:\"grid\"},composer:{icon:aa,layout:\"grid\",show_list_images:!0},contributing_artist:{icon:ta,layout:\"grid\",show_list_images:!0},directory:{icon:na,layout:\"grid\",show_list_images:!0},episode:{icon:ia,layout:\"grid\",thumbnail_ratio:\"portrait\"},game:{icon:oa,layout:\"grid\",thumbnail_ratio:\"portrait\"},genre:{icon:sa,layout:\"grid\",show_list_images:!0},image:{icon:ra,layout:\"grid\"},movie:{icon:la,thumbnail_ratio:\"portrait\",layout:\"grid\"},music:{icon:da},playlist:{icon:ca,layout:\"grid\",show_list_images:!0},podcast:{icon:ua,layout:\"grid\"},season:{icon:ia,layout:\"grid\",thumbnail_ratio:\"portrait\"},track:{icon:ha},tv_show:{icon:ia,layout:\"grid\",thumbnail_ratio:\"portrait\"},url:{icon:pa},video:{icon:S,layout:\"grid\"}},fd=(e,t,i,a)=>e.callWS({type:\"media_player/browse_media\",entity_id:t,media_content_id:i,media_content_type:a}),gd=[{name:\"media_content_id\",required:!1,selector:{text:{}}},{name:\"media_content_type\",required:!1,selector:{text:{}}}];v([w(\"ha-selector-media\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"selector\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean,reflect:!0})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean,reflect:!0})],key:\"required\",value:()=>!0},{kind:\"field\",decorators:[Vi()],key:\"_thumbnailUrl\",value:void 0},{kind:\"method\",key:\"willUpdate\",value:function(e){if(e.has(\"value\")){var t,i,a,n;const s=null===(t=this.value)||void 0===t||null===(i=t.metadata)||void 0===i?void 0:i.thumbnail;if(s===(null===(a=e.get(\"value\"))||void 0===a||null===(n=a.metadata)||void 0===n?void 0:n.thumbnail))return;if(s&&s.startsWith(\"/\"))this._thumbnailUrl=void 0,os(this.hass,s).then((e=>{this._thumbnailUrl=e.path}));else if(s&&s.startsWith(\"https://brands.home-assistant.io\")){var o;this._thumbnailUrl=Fa({domain:Da(s),type:\"icon\",useFallback:!0,darkOptimized:null===(o=this.hass.themes)||void 0===o?void 0:o.darkMode})}else this._thumbnailUrl=s}}},{kind:\"method\",key:\"render\",value:function(){var e,t,i,a,n,o,s,r,l,d,c,u,h;const p=null!==(e=this.value)&&void 0!==e&&e.entity_id?this.hass.states[this.value.entity_id]:void 0,v=!(null!==(t=this.value)&&void 0!==t&&t.entity_id)||p&&((e,t)=>ds(e.attributes,t))(p,131072);return k`<ha-entity-picker\n        .hass=${this.hass}\n        .value=${null===(i=this.value)||void 0===i?void 0:i.entity_id}\n        .label=${this.label||this.hass.localize(\"ui.components.selectors.media.pick_media_player\")}\n        .disabled=${this.disabled}\n        .helper=${this.helper}\n        .required=${this.required}\n        include-domains='[\"media_player\"]'\n        allow-custom-entity\n        @value-changed=${this._entityChanged}\n      ></ha-entity-picker>\n      ${v?k`<ha-card\n            outlined\n            @click=${this._pickMedia}\n            class=${this.disabled||null===(a=this.value)||void 0===a||!a.entity_id?\"disabled\":\"\"}\n          >\n            <div\n              class=\"thumbnail ${Xi({portrait:!(null===(n=this.value)||void 0===n||null===(o=n.metadata)||void 0===o||!o.media_class)&&\"portrait\"===md[this.value.metadata.children_media_class||this.value.metadata.media_class].thumbnail_ratio})}\"\n            >\n              ${null!==(s=this.value)&&void 0!==s&&null!==(r=s.metadata)&&void 0!==r&&r.thumbnail?k`\n                    <div\n                      class=\"${Xi({\"centered-image\":!!this.value.metadata.media_class&&[\"app\",\"directory\"].includes(this.value.metadata.media_class)})}\n                        image\"\n                      style=${this._thumbnailUrl?`background-image: url(${this._thumbnailUrl});`:\"\"}\n                    ></div>\n                  `:k`\n                    <div class=\"icon-holder image\">\n                      <ha-svg-icon\n                        class=\"folder\"\n                        .path=${null!==(l=this.value)&&void 0!==l&&l.media_content_id?null!==(d=this.value)&&void 0!==d&&null!==(c=d.metadata)&&void 0!==c&&c.media_class?md[\"directory\"===this.value.metadata.media_class&&this.value.metadata.children_media_class||this.value.metadata.media_class].icon:ma:va}\n                      ></ha-svg-icon>\n                    </div>\n                  `}\n            </div>\n            <div class=\"title\">\n              ${null!==(u=this.value)&&void 0!==u&&u.media_content_id?(null===(h=this.value.metadata)||void 0===h?void 0:h.title)||this.value.media_content_id:this.hass.localize(\"ui.components.selectors.media.pick_media\")}\n            </div>\n          </ha-card>`:k`<ha-alert>\n              ${this.hass.localize(\"ui.components.selectors.media.browse_not_supported\")}\n            </ha-alert>\n            <ha-form\n              .hass=${this.hass}\n              .data=${this.value}\n              .schema=${gd}\n              .computeLabel=${this._computeLabelCallback}\n            ></ha-form>`}`}},{kind:\"field\",key:\"_computeLabelCallback\",value(){return e=>this.hass.localize(`ui.components.selectors.media.${e.name}`)}},{kind:\"method\",key:\"_entityChanged\",value:function(t){t.stopPropagation(),e(this,\"value-changed\",{value:{entity_id:t.detail.value,media_content_id:\"\",media_content_type:\"\"}})}},{kind:\"method\",key:\"_pickMedia\",value:function(){var t,i,a;i=this,a={action:\"pick\",entityId:this.value.entity_id,navigateIds:null===(t=this.value.metadata)||void 0===t?void 0:t.navigateIds,mediaPickedCallback:t=>{var i;e(this,\"value-changed\",{value:{...this.value,media_content_id:t.item.media_content_id,media_content_type:t.item.media_content_type,metadata:{title:t.item.title,thumbnail:t.item.thumbnail,media_class:t.item.media_class,children_media_class:t.item.children_media_class,navigateIds:null===(i=t.navigateIds)||void 0===i?void 0:i.map((e=>({media_content_type:e.media_content_type,media_content_id:e.media_content_id})))}}})}},e(i,\"show-dialog\",{dialogTag:\"dialog-media-player-browse\",dialogImport:()=>import(\"./c.56433b09.js\").then((function(e){return e.a})),dialogParams:a})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      ha-entity-picker {\n        display: block;\n        margin-bottom: 16px;\n      }\n      mwc-button {\n        margin-top: 8px;\n      }\n      ha-alert {\n        display: block;\n        margin-bottom: 16px;\n      }\n      ha-card {\n        position: relative;\n        width: 200px;\n        box-sizing: border-box;\n        cursor: pointer;\n      }\n      ha-card.disabled {\n        pointer-events: none;\n        color: var(--disabled-text-color);\n      }\n      ha-card .thumbnail {\n        width: 100%;\n        position: relative;\n        box-sizing: border-box;\n        transition: padding-bottom 0.1s ease-out;\n        padding-bottom: 100%;\n      }\n      ha-card .thumbnail.portrait {\n        padding-bottom: 150%;\n      }\n      ha-card .image {\n        border-radius: 3px 3px 0 0;\n      }\n      .folder {\n        --mdc-icon-size: calc(var(--media-browse-item-size, 175px) * 0.4);\n      }\n      .title {\n        font-size: 16px;\n        padding-top: 16px;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        margin-bottom: 16px;\n        padding-left: 16px;\n        padding-right: 4px;\n        white-space: nowrap;\n      }\n      .image {\n        position: absolute;\n        top: 0;\n        right: 0;\n        left: 0;\n        bottom: 0;\n        background-size: cover;\n        background-repeat: no-repeat;\n        background-position: center;\n      }\n      .centered-image {\n        margin: 0 8px;\n        background-size: contain;\n      }\n      .icon-holder {\n        display: flex;\n        justify-content: center;\n        align-items: center;\n      }\n    `}}]}}),m),v([w(\"ha-automation-action-play_media\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"action\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"narrow\",value:()=>!1},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{service:\"media_player.play_media\",target:{entity_id:\"\"},data:{media_content_id:\"\",media_content_type:\"\"},metadata:{}}}},{kind:\"field\",key:\"_getSelectorValue\",value:()=>Ri((e=>{var t,i,a;return{entity_id:(null===(t=e.target)||void 0===t?void 0:t.entity_id)||e.entity_id,media_content_id:null===(i=e.data)||void 0===i?void 0:i.media_content_id,media_content_type:null===(a=e.data)||void 0===a?void 0:a.media_content_type,metadata:e.metadata}}))},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-selector-media\n        .hass=${this.hass}\n        .value=${this._getSelectorValue(this.action)}\n        @value-changed=${this._valueChanged}\n      ></ha-selector-media>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){t.stopPropagation(),e(this,\"value-changed\",{value:{service:\"media_player.play_media\",target:{entity_id:t.detail.value.entity_id},data:{media_content_id:t.detail.value.media_content_id,media_content_type:t.detail.value.media_content_type},metadata:t.detail.value.metadata||{}}})}}]}}),m);const _d=[\"count\",\"while\",\"until\"],yd=e=>_d.find((t=>t in e));v([w(\"ha-automation-action-repeat\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"action\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{repeat:{count:2,sequence:[]}}}},{kind:\"method\",key:\"render\",value:function(){const e=this.action.repeat,t=yd(e);return k`\n      <ha-select\n        .label=${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.repeat.type_select\")}\n        .value=${t}\n        @selected=${this._typeChanged}\n      >\n        ${_d.map((e=>k`\n            <mwc-list-item .value=${e}>\n              ${this.hass.localize(`ui.panel.config.automation.editor.actions.type.repeat.type.${e}.label`)}\n            </mwc-list-item>\n          `))}\n      </ha-select>\n      ${\"count\"===t?k`\n            <ha-textfield\n              .label=${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.repeat.type.count.label\")}\n              name=\"count\"\n              .value=${e.count||\"0\"}\n              @change=${this._countChanged}\n            ></ha-textfield>\n          `:\"\"}\n      ${\"while\"===t?k` <h3>\n              ${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.repeat.type.while.conditions\")}:\n            </h3>\n            <ha-automation-condition\n              .conditions=${e.while||[]}\n              .hass=${this.hass}\n              @value-changed=${this._conditionChanged}\n            ></ha-automation-condition>`:\"\"}\n      ${\"until\"===t?k` <h3>\n              ${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.repeat.type.until.conditions\")}:\n            </h3>\n            <ha-automation-condition\n              .conditions=${e.until||[]}\n              .hass=${this.hass}\n              @value-changed=${this._conditionChanged}\n            ></ha-automation-condition>`:\"\"}\n      <h3>\n        ${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.repeat.sequence\")}:\n      </h3>\n      <ha-automation-action\n        .actions=${e.sequence}\n        @value-changed=${this._actionChanged}\n        .hass=${this.hass}\n      ></ha-automation-action>\n    `}},{kind:\"method\",key:\"_typeChanged\",value:function(t){const i=t.target.value;if(!i||i===yd(this.action.repeat))return;e(this,\"value-changed\",{value:{repeat:{[i]:\"count\"===i?2:[],sequence:this.action.repeat.sequence}}})}},{kind:\"method\",key:\"_conditionChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;e(this,\"value-changed\",{value:{repeat:{...this.action.repeat,[yd(this.action.repeat)]:i}}})}},{kind:\"method\",key:\"_actionChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;e(this,\"value-changed\",{value:{repeat:{...this.action.repeat,sequence:i}}})}},{kind:\"method\",key:\"_countChanged\",value:function(t){const i=t.target.value;this.action.repeat.count!==i&&e(this,\"value-changed\",{value:{repeat:{...this.action.repeat,count:i}}})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[Hi,i`\n        ha-textfield {\n          margin-top: 16px;\n        }\n      `]}}]}}),m);const kd=e=>\"all\"===e||(e=>e.includes(\".\"))(e),bd=(e,t)=>`https://${e.config.version.includes(\"b\")?\"rc\":e.config.version.includes(\"dev\")?\"next\":\"www\"}.home-assistant.io${t}`,xd=e=>e.selector&&!e.required&&!(\"boolean\"in e.selector&&e.default);v([w(\"ha-service-control\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"value\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_value\",value:void 0},{kind:\"field\",decorators:[f({reflect:!0,type:Boolean})],key:\"narrow\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"showAdvanced\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_checkedKeys\",value:()=>new Set},{kind:\"field\",decorators:[Vi()],key:\"_manifest\",value:void 0},{kind:\"field\",decorators:[g(\"ha-yaml-editor\")],key:\"_yamlEditor\",value:void 0},{kind:\"method\",key:\"willUpdate\",value:function(t){var i,a,n,o,s,r,l,d,c,u,h;if(!t.has(\"value\"))return;const p=t.get(\"value\");(null==p?void 0:p.service)!==(null===(i=this.value)||void 0===i?void 0:i.service)&&(this._checkedKeys=new Set);const v=this._getServiceInfo(null===(a=this.value)||void 0===a?void 0:a.service,this.hass.services);var m;null!==(n=this.value)&&void 0!==n&&n.service?null!=p&&p.service&&zn(this.value.service)===zn(p.service)||this._fetchManifest(zn(null===(m=this.value)||void 0===m?void 0:m.service)):this._manifest=void 0;if(v&&\"target\"in v&&(null!==(o=this.value)&&void 0!==o&&null!==(s=o.data)&&void 0!==s&&s.entity_id||null!==(r=this.value)&&void 0!==r&&null!==(l=r.data)&&void 0!==l&&l.area_id||null!==(d=this.value)&&void 0!==d&&null!==(c=d.data)&&void 0!==c&&c.device_id)){var f,g,_;const e={...this.value.target};!this.value.data.entity_id||null!==(f=this.value.target)&&void 0!==f&&f.entity_id||(e.entity_id=this.value.data.entity_id),!this.value.data.area_id||null!==(g=this.value.target)&&void 0!==g&&g.area_id||(e.area_id=this.value.data.area_id),!this.value.data.device_id||null!==(_=this.value.target)&&void 0!==_&&_.device_id||(e.device_id=this.value.data.device_id),this._value={...this.value,target:e,data:{...this.value.data}},delete this._value.data.entity_id,delete this._value.data.device_id,delete this._value.data.area_id}else this._value=this.value;if((null==p?void 0:p.service)!==(null===(u=this.value)||void 0===u?void 0:u.service)){let t=!1;this._value&&v&&(this._value.data||(this._value.data={}),v.fields.forEach((e=>{e.selector&&e.required&&void 0===e.default&&\"boolean\"in e.selector&&void 0===this._value.data[e.key]&&(t=!0,this._value.data[e.key]=!1)}))),t&&e(this,\"value-changed\",{value:{...this._value}})}if(null!==(h=this._value)&&void 0!==h&&h.data){const e=this._yamlEditor;e&&e.value!==this._value.data&&e.setValue(this._value.data)}}},{kind:\"field\",key:\"_getServiceInfo\",value:()=>Ri(((e,t)=>{if(!e||!t)return;const i=zn(e),a=$n(e);if(!(i in t))return;if(!(a in t[i]))return;const n=Object.entries(t[i][a].fields).map((([e,t])=>({key:e,...t,selector:t.selector})));return{...t[i][a],fields:n,hasSelector:n.length?n.filter((e=>e.selector)).map((e=>e.key)):[]}}))},{kind:\"method\",key:\"render\",value:function(){var e,t,i,a,n,o,s;const r=this._getServiceInfo(null===(e=this._value)||void 0===e?void 0:e.service,this.hass.services),l=(null==r?void 0:r.fields.length)&&!r.hasSelector.length||r&&Object.keys((null===(t=this._value)||void 0===t?void 0:t.data)||{}).some((e=>!r.hasSelector.includes(e))),d=l&&(null==r?void 0:r.fields.find((e=>\"entity_id\"===e.key))),c=Boolean(!l&&(null==r?void 0:r.fields.some((e=>xd(e)))));return k`<ha-service-picker\n        .hass=${this.hass}\n        .value=${null===(i=this._value)||void 0===i?void 0:i.service}\n        @value-changed=${this._serviceChanged}\n      ></ha-service-picker>\n      <div class=\"description\">\n        <p>${null==r?void 0:r.description}</p>\n        ${this._manifest?k` <a\n              href=${this._manifest.is_built_in?bd(this.hass,`/integrations/${this._manifest.domain}`):this._manifest.documentation}\n              title=${this.hass.localize(\"ui.components.service-control.integration_doc\")}\n              target=\"_blank\"\n              rel=\"noreferrer\"\n            >\n              <ha-icon-button\n                .path=${fa}\n                class=\"help-icon\"\n              ></ha-icon-button>\n            </a>`:\"\"}\n      </div>\n      ${r&&\"target\"in r?k`<ha-settings-row .narrow=${this.narrow}>\n            ${c?k`<div slot=\"prefix\" class=\"checkbox-spacer\"></div>`:\"\"}\n            <span slot=\"heading\"\n              >${this.hass.localize(\"ui.components.service-control.target\")}</span\n            >\n            <span slot=\"description\"\n              >${this.hass.localize(\"ui.components.service-control.target_description\")}</span\n            ><ha-selector\n              .hass=${this.hass}\n              .selector=${r.target?{target:r.target}:{target:{}}}\n              @value-changed=${this._targetChanged}\n              .value=${null===(a=this._value)||void 0===a?void 0:a.target}\n            ></ha-selector\n          ></ha-settings-row>`:d?k`<ha-entity-picker\n            .hass=${this.hass}\n            .value=${null===(n=this._value)||void 0===n||null===(o=n.data)||void 0===o?void 0:o.entity_id}\n            .label=${d.description}\n            @value-changed=${this._entityPicked}\n            allow-custom-entity\n          ></ha-entity-picker>`:\"\"}\n      ${l?k`<ha-yaml-editor\n            .hass=${this.hass}\n            .label=${this.hass.localize(\"ui.components.service-control.data\")}\n            .name=${\"data\"}\n            .defaultValue=${null===(s=this._value)||void 0===s?void 0:s.data}\n            @value-changed=${this._dataChanged}\n          ></ha-yaml-editor>`:null==r?void 0:r.fields.map((e=>{var t,i,a,n;const o=xd(e);return e.selector&&(!e.advanced||this.showAdvanced||null!==(t=this._value)&&void 0!==t&&t.data&&void 0!==this._value.data[e.key])?k`<ha-settings-row .narrow=${this.narrow}>\n                  ${o?k`<ha-checkbox\n                        .key=${e.key}\n                        .checked=${this._checkedKeys.has(e.key)||(null===(i=this._value)||void 0===i?void 0:i.data)&&void 0!==this._value.data[e.key]}\n                        @change=${this._checkboxChanged}\n                        slot=\"prefix\"\n                      ></ha-checkbox>`:c?k`<div slot=\"prefix\" class=\"checkbox-spacer\"></div>`:\"\"}\n                  <span slot=\"heading\">${e.name||e.key}</span>\n                  <span slot=\"description\">${null==e?void 0:e.description}</span>\n                  <ha-selector\n                    .disabled=${o&&!this._checkedKeys.has(e.key)&&(!(null!==(a=this._value)&&void 0!==a&&a.data)||void 0===this._value.data[e.key])}\n                    .hass=${this.hass}\n                    .selector=${e.selector}\n                    .key=${e.key}\n                    @value-changed=${this._serviceDataChanged}\n                    .value=${null!==(n=this._value)&&void 0!==n&&n.data&&void 0!==this._value.data[e.key]?this._value.data[e.key]:e.default}\n                  ></ha-selector>\n                </ha-settings-row>`:\"\"}))}`}},{kind:\"method\",key:\"_checkboxChanged\",value:function(t){const i=t.currentTarget.checked,a=t.currentTarget.key;let n;if(i){var o,s,r;this._checkedKeys.add(a);const e=null===(o=this._getServiceInfo(null===(r=this._value)||void 0===r?void 0:r.service,this.hass.services))||void 0===o||null===(s=o.fields.find((e=>e.key===a)))||void 0===s?void 0:s.default;var l;if(e)n={...null===(l=this._value)||void 0===l?void 0:l.data,[a]:e}}else{var d;this._checkedKeys.delete(a),n={...null===(d=this._value)||void 0===d?void 0:d.data},delete n[a]}n&&e(this,\"value-changed\",{value:{...this._value,data:n}}),this.requestUpdate(\"_checkedKeys\")}},{kind:\"method\",key:\"_serviceChanged\",value:function(t){var i;t.stopPropagation(),t.detail.value!==(null===(i=this._value)||void 0===i?void 0:i.service)&&e(this,\"value-changed\",{value:{service:t.detail.value||\"\"}})}},{kind:\"method\",key:\"_entityPicked\",value:function(t){var i,a,n;t.stopPropagation();const o=t.detail.value;if((null===(i=this._value)||void 0===i||null===(a=i.data)||void 0===a?void 0:a.entity_id)===o)return;let s;var r;!o&&null!==(n=this._value)&&void 0!==n&&n.data?(s={...this._value},delete s.data.entity_id):s={...this._value,data:{...null===(r=this._value)||void 0===r?void 0:r.data,entity_id:t.detail.value}};e(this,\"value-changed\",{value:s})}},{kind:\"method\",key:\"_targetChanged\",value:function(t){var i;t.stopPropagation();const a=t.detail.value;if((null===(i=this._value)||void 0===i?void 0:i.target)===a)return;let n;a?n={...this._value,target:t.detail.value}:(n={...this._value},delete n.target),e(this,\"value-changed\",{value:n})}},{kind:\"method\",key:\"_serviceDataChanged\",value:function(t){var i,a,n,o,s;t.stopPropagation();const r=t.currentTarget.key,l=t.detail.value;if((null===(i=this._value)||void 0===i||null===(a=i.data)||void 0===a?void 0:a[r])===l||(null===(n=this._value)||void 0===n||null===(o=n.data)||void 0===o||!o[r])&&(\"\"===l||void 0===l))return;const d={...null===(s=this._value)||void 0===s?void 0:s.data,[r]:l};\"\"!==l&&void 0!==l||delete d[r],e(this,\"value-changed\",{value:{...this._value,data:d}})}},{kind:\"method\",key:\"_dataChanged\",value:function(t){t.stopPropagation(),t.detail.isValid&&e(this,\"value-changed\",{value:{...this._value,data:t.detail.value}})}},{kind:\"method\",key:\"_fetchManifest\",value:async function(e){this._manifest=void 0;try{this._manifest=await((e,t)=>e.callWS({type:\"manifest/get\",integration:t}))(this.hass,e)}catch(e){}}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      ha-settings-row {\n        padding: var(--service-control-padding, 0 16px);\n      }\n      ha-settings-row {\n        --paper-time-input-justify-content: flex-end;\n        --settings-row-content-width: 100%;\n        --settings-row-prefix-display: contents;\n        border-top: var(\n          --service-control-items-border-top,\n          1px solid var(--divider-color)\n        );\n      }\n      ha-service-picker,\n      ha-entity-picker,\n      ha-yaml-editor {\n        display: block;\n        margin: var(--service-control-padding, 0 16px);\n      }\n      ha-yaml-editor {\n        padding: 16px 0;\n      }\n      p {\n        margin: var(--service-control-padding, 0 16px);\n        padding: 16px 0;\n      }\n      .checkbox-spacer {\n        width: 32px;\n      }\n      ha-checkbox {\n        margin-left: -16px;\n      }\n      .help-icon {\n        color: var(--secondary-text-color);\n      }\n      .description {\n        justify-content: space-between;\n        display: flex;\n        align-items: center;\n        padding-right: 2px;\n      }\n    `}}]}}),m);const $d=fn({service:gn(_n()),entity_id:gn((wd=_n(),Cd=\"entity ID (domain.entity or all)\",Ad=kd,new on({...wd,*refiner(e,t){yield*wd.refiner(e,t);const i=an(Ad(e,t),t,wd,e);for(const e of i)yield{...e,refinement:Cd}}}))),target:gn(un()),data:gn(un())});var wd,Cd,Ad;v([w(\"ha-automation-action-service\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"action\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"narrow\",value:()=>!1},{kind:\"field\",decorators:[Vi()],key:\"_action\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{service:\"\",data:{}}}},{kind:\"method\",key:\"willUpdate\",value:function(t){if(t.has(\"action\")){try{sn(this.action,$d)}catch(t){return void e(this,\"ui-mode-not-available\",t)}this.action&&dd(this.action)?e(this,\"ui-mode-not-available\",Error(this.hass.localize(\"ui.errors.config.no_template_editor_support\"))):this.action.entity_id?(this._action={...this.action,data:{...this.action.data,entity_id:this.action.entity_id}},delete this._action.entity_id):this._action=this.action}}},{kind:\"method\",key:\"render\",value:function(){var e;return k`\n      <ha-service-control\n        .narrow=${this.narrow}\n        .hass=${this.hass}\n        .value=${this._action}\n        .showAdvanced=${null===(e=this.hass.userData)||void 0===e?void 0:e.showAdvanced}\n        @value-changed=${this._actionChanged}\n      ></ha-service-control>\n    `}},{kind:\"method\",key:\"_actionChanged\",value:function(e){e.detail.value===this._action&&e.stopPropagation()}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      ha-service-control {\n        display: block;\n        margin: 0 -16px;\n      }\n    `}}]}}),m),v([w(\"ha-automation-action-stop\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"action\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{stop:\"\"}}},{kind:\"method\",key:\"render\",value:function(){const{error:e,stop:t}=this.action;return k`\n      <ha-textfield\n        .label=${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.stop.stop\")}\n        .value=${t}\n        @change=${this._stopChanged}\n      ></ha-textfield>\n      <ha-formfield\n        .label=${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.stop.error\")}\n      >\n        <ha-switch\n          .checked=${null!=e&&e}\n          @change=${this._errorChanged}\n        ></ha-switch>\n      </ha-formfield>\n    `}},{kind:\"method\",key:\"_stopChanged\",value:function(t){t.stopPropagation(),e(this,\"value-changed\",{value:{...this.action,stop:t.target.value}})}},{kind:\"method\",key:\"_errorChanged\",value:function(t){t.stopPropagation(),e(this,\"value-changed\",{value:{...this.action,error:t.target.checked}})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      ha-textfield {\n        display: block;\n        margin-bottom: 24px;\n      }\n    `}}]}}),m),v([w(\"ha-automation-trigger-calendar\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"trigger\",value:void 0},{kind:\"field\",key:\"_schema\",value:()=>Ri((e=>[{name:\"entity_id\",required:!0,selector:{entity:{domain:\"calendar\"}}},{name:\"event\",type:\"select\",required:!0,options:[[\"start\",e(\"ui.panel.config.automation.editor.triggers.type.calendar.start\")],[\"end\",e(\"ui.panel.config.automation.editor.triggers.type.calendar.end\")]]},{name:\"offset\",selector:{duration:{}}},{name:\"offset_type\",type:\"select\",required:!0,options:[[\"before\",e(\"ui.panel.config.automation.editor.triggers.type.calendar.before\")],[\"after\",e(\"ui.panel.config.automation.editor.triggers.type.calendar.after\")]]}]))},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{event:\"start\",offset:0}}},{kind:\"method\",key:\"render\",value:function(){const e=this._schema(this.hass.localize),t=this.trigger.offset,i=Kl(t);let a=\"after\";(\"object\"==typeof t&&i.hours<0||\"string\"==typeof t&&t.startsWith(\"-\"))&&(i.hours=Math.abs(i.hours),a=\"before\");const n={...this.trigger,offset:i,offset_type:a};return k`\n      <ha-form\n        .schema=${e}\n        .data=${n}\n        .hass=${this.hass}\n        .computeLabel=${this._computeLabelCallback}\n        @value-changed=${this._valueChanged}\n      ></ha-form>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){var i,a,n;t.stopPropagation();const o=t.detail.value.offset,s=\"before\"===t.detail.value.offset_type?\"-\":\"\",r={...t.detail.value,offset:`${s}${null!==(i=o.hours)&&void 0!==i?i:0}:${null!==(a=o.minutes)&&void 0!==a?a:0}:${null!==(n=o.seconds)&&void 0!==n?n:0}`};delete r.offset_type,e(this,\"value-changed\",{value:r})}},{kind:\"field\",key:\"_computeLabelCallback\",value(){return e=>this.hass.localize(`ui.panel.config.automation.editor.triggers.type.calendar.${e.name}`)}}]}}),m),v([w(\"ha-device-trigger-picker\")],(function(e,t){return{F:class extends t{constructor(){super(Sl,Cl,(e=>({device_id:e||\"\",platform:\"device\",domain:\"\",entity_id:\"\"}))),e(this)}},d:[{kind:\"get\",key:\"NO_AUTOMATION_TEXT\",value:function(){return this.hass.localize(\"ui.panel.config.devices.automation.triggers.no_triggers\")}},{kind:\"get\",key:\"UNKNOWN_AUTOMATION_TEXT\",value:function(){return this.hass.localize(\"ui.panel.config.devices.automation.triggers.unknown_trigger\")}}]}}),Pl);let Id=v([w(\"ha-automation-trigger-device\")],(function(t,a){class n extends a{constructor(...e){super(...e),t(this)}}return{F:n,d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({type:Object})],key:\"trigger\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_deviceId\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_capabilities\",value:void 0},{kind:\"field\",key:\"_origTrigger\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{device_id:\"\",domain:\"\",entity_id:\"\"}}},{kind:\"field\",key:\"_extraFieldsData\",value:()=>Ri(((e,t)=>{const i={};return t.extra_fields.forEach((t=>{void 0!==e[t.name]&&(i[t.name]=e[t.name])})),i}))},{kind:\"method\",key:\"render\",value:function(){var e;const t=this._deviceId||this.trigger.device_id;return k`\n      <ha-device-picker\n        .value=${t}\n        @value-changed=${this._devicePicked}\n        .hass=${this.hass}\n        label=${this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.device.label\")}\n      ></ha-device-picker>\n      <ha-device-trigger-picker\n        .value=${this.trigger}\n        .deviceId=${t}\n        @value-changed=${this._deviceTriggerPicked}\n        .hass=${this.hass}\n        label=${this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.device.trigger\")}\n      ></ha-device-trigger-picker>\n      ${null!==(e=this._capabilities)&&void 0!==e&&e.extra_fields?k`\n            <ha-form\n              .hass=${this.hass}\n              .data=${this._extraFieldsData(this.trigger,this._capabilities)}\n              .schema=${this._capabilities.extra_fields}\n              .computeLabel=${this._extraFieldsComputeLabelCallback(this.hass.localize)}\n              @value-changed=${this._extraFieldsChanged}\n            ></ha-form>\n          `:\"\"}\n    `}},{kind:\"method\",key:\"firstUpdated\",value:function(){this._capabilities||this._getCapabilities(),this.trigger&&(this._origTrigger=this.trigger)}},{kind:\"method\",key:\"updated\",value:function(e){if(!e.has(\"trigger\"))return;const t=e.get(\"trigger\");t&&!Il(t,this.trigger)&&this._getCapabilities()}},{kind:\"method\",key:\"_getCapabilities\",value:async function(){const e=this.trigger;this._capabilities=e.domain?await((e,t)=>e.callWS({type:\"device_automation/trigger/capabilities\",trigger:t}))(this.hass,e):void 0}},{kind:\"method\",key:\"_devicePicked\",value:function(t){t.stopPropagation(),this._deviceId=t.target.value,void 0===this._deviceId&&e(this,\"value-changed\",{value:{...n.defaultConfig,platform:\"device\"}})}},{kind:\"method\",key:\"_deviceTriggerPicked\",value:function(t){t.stopPropagation();let i=t.detail.value;this._origTrigger&&Il(this._origTrigger,i)&&(i=this._origTrigger),this.trigger.id&&(i.id=this.trigger.id),e(this,\"value-changed\",{value:i})}},{kind:\"method\",key:\"_extraFieldsChanged\",value:function(t){t.stopPropagation(),e(this,\"value-changed\",{value:{...this.trigger,...t.detail.value}})}},{kind:\"method\",key:\"_extraFieldsComputeLabelCallback\",value:function(e){return t=>e(`ui.panel.config.automation.editor.triggers.type.device.extra_fields.${t.name}`)||t.name}},{kind:\"field\",static:!0,key:\"styles\",value:()=>i`\n    ha-device-picker {\n      display: block;\n      margin-bottom: 24px;\n    }\n  `}]}}),m);const Ed={},zd=h(class extends d{constructor(){super(...arguments),this.nt=Ed}render(e,t){return t()}update(e,[t,i]){if(Array.isArray(t)){if(Array.isArray(this.nt)&&this.nt.length===t.length&&t.every(((e,t)=>e===this.nt[t])))return ga}else if(this.nt===t)return ga;return this.nt=Array.isArray(t)?Array.from(t):t,this.render(t,i)}}),Sd=async e=>e.callWS({type:\"config/auth/list\"});v([w(\"ha-user-badge\")],(function(e,t){class a extends t{constructor(...t){super(...t),e(this)}}return{F:a,d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"user\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_personPicture\",value:void 0},{kind:\"field\",key:\"_personEntityId\",value:void 0},{kind:\"method\",key:\"willUpdate\",value:function(e){if(_(y(a.prototype),\"willUpdate\",this).call(this,e),e.has(\"user\"))return void this._getPersonPicture();const t=e.get(\"hass\");if(this._personEntityId&&t&&this.hass.states[this._personEntityId]!==t.states[this._personEntityId]){const e=this.hass.states[this._personEntityId];e?this._personPicture=e.attributes.entity_picture:this._getPersonPicture()}else!this._personEntityId&&t&&this._getPersonPicture()}},{kind:\"method\",key:\"render\",value:function(){if(!this.hass||!this.user)return k``;const e=this._personPicture;if(e)return k`<div\n        style=${ji({backgroundImage:`url(${e})`})}\n        class=\"picture\"\n      ></div>`;const t=(e=>e?e.trim().split(\" \").slice(0,3).map((e=>e.substring(0,1))).join(\"\"):\"?\")(this.user.name);return k`<div\n      class=\"initials ${Xi({long:t.length>2})}\"\n    >\n      ${t}\n    </div>`}},{kind:\"method\",key:\"_getPersonPicture\",value:function(){if(this._personEntityId=void 0,this._personPicture=void 0,this.hass&&this.user)for(const e of Object.values(this.hass.states))if(e.attributes.user_id===this.user.id&&\"person\"===as(e)){this._personEntityId=e.entity_id,this._personPicture=e.attributes.entity_picture;break}}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      :host {\n        display: contents;\n      }\n      .picture {\n        width: 40px;\n        height: 40px;\n        background-size: cover;\n        border-radius: 50%;\n      }\n      .initials {\n        display: inline-block;\n        box-sizing: border-box;\n        width: 40px;\n        line-height: 40px;\n        border-radius: 50%;\n        text-align: center;\n        background-color: var(--light-primary-color);\n        text-decoration: none;\n        color: var(--text-light-primary-color, var(--primary-text-color));\n        overflow: hidden;\n      }\n      .initials.long {\n        font-size: 80%;\n      }\n    `}}]}}),m);let Ld=v(null,(function(t,a){class n extends a{constructor(...e){super(...e),t(this)}}return{F:n,d:[{kind:\"field\",key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"noUserLabel\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:()=>\"\"},{kind:\"field\",decorators:[f()],key:\"users\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",key:\"_sortedUsers\",value:()=>Ri((e=>e?e.filter((e=>!e.system_generated)).sort(((e,t)=>Za(e.name,t.name))):[]))},{kind:\"method\",key:\"render\",value:function(){var e,t;return k`\n      <ha-select\n        .label=${this.label}\n        .disabled=${this.disabled}\n        .value=${this.value}\n        @selected=${this._userChanged}\n      >\n        ${0===(null===(e=this.users)||void 0===e?void 0:e.length)?k`<mwc-list-item value=\"\">\n              ${this.noUserLabel||(null===(t=this.hass)||void 0===t?void 0:t.localize(\"ui.components.user-picker.no_user\"))}\n            </mwc-list-item>`:\"\"}\n        ${this._sortedUsers(this.users).map((e=>k`\n            <ha-list-item graphic=\"avatar\" .value=${e.id}>\n              <ha-user-badge\n                .hass=${this.hass}\n                .user=${e}\n                slot=\"graphic\"\n              ></ha-user-badge>\n              ${e.name}\n            </ha-list-item>\n          `))}\n      </ha-select>\n    `}},{kind:\"method\",key:\"firstUpdated\",value:function(e){_(y(n.prototype),\"firstUpdated\",this).call(this,e),void 0===this.users&&Sd(this.hass).then((e=>{this.users=e}))}},{kind:\"method\",key:\"_userChanged\",value:function(t){const i=t.target.value;i!==this.value&&(this.value=i,setTimeout((()=>{e(this,\"value-changed\",{value:i}),e(this,\"change\")}),0))}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      :host {\n        display: inline-block;\n      }\n      mwc-list {\n        display: block;\n      }\n    `}}]}}),m);customElements.define(\"ha-user-picker\",Ld),v([w(\"ha-users-picker\")],(function(t,a){class n extends a{constructor(...e){super(...e),t(this)}}return{F:n,d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f({attribute:\"picked-user-label\"})],key:\"pickedUserLabel\",value:void 0},{kind:\"field\",decorators:[f({attribute:\"pick-user-label\"})],key:\"pickUserLabel\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"users\",value:void 0},{kind:\"method\",key:\"firstUpdated\",value:function(e){_(y(n.prototype),\"firstUpdated\",this).call(this,e),void 0===this.users&&Sd(this.hass).then((e=>{this.users=e}))}},{kind:\"method\",key:\"render\",value:function(){if(!this.hass||!this.users)return k``;const e=this._notSelectedUsers(this.users,this.value);return k`\n      ${zd([e],(()=>{var t;return null===(t=this.value)||void 0===t?void 0:t.map(((t,i)=>k`\n            <div>\n              <ha-user-picker\n                .label=${this.pickedUserLabel}\n                .noUserLabel=${this.hass.localize(\"ui.components.user-picker.remove_user\")}\n                .index=${i}\n                .hass=${this.hass}\n                .value=${t}\n                .users=${this._notSelectedUsersAndSelected(t,this.users,e)}\n                @value-changed=${this._userChanged}\n              ></ha-user-picker>\n              <ha-icon-button\n                .userId=${t}\n                .label=${this.hass.localize(\"ui.components.user-picker.remove_user\")}\n                .path=${b}\n                @click=${this._removeUser}\n              >\n                ></ha-icon-button\n              >\n            </div>\n          `))}))}\n      <ha-user-picker\n        .label=${this.pickUserLabel||this.hass.localize(\"ui.components.user-picker.add_user\")}\n        .hass=${this.hass}\n        .users=${e}\n        .disabled=${!(null!=e&&e.length)}\n        @value-changed=${this._addUser}\n      ></ha-user-picker>\n    `}},{kind:\"field\",key:\"_notSelectedUsers\",value:()=>Ri(((e,t)=>t?null==e?void 0:e.filter((e=>!e.system_generated&&!t.includes(e.id))):null==e?void 0:e.filter((e=>!e.system_generated))))},{kind:\"field\",key:\"_notSelectedUsersAndSelected\",value:()=>(e,t,i)=>{const a=null==t?void 0:t.find((t=>t.id===e));return a?i?[...i,a]:[a]:i}},{kind:\"get\",key:\"_currentUsers\",value:function(){return this.value||[]}},{kind:\"method\",key:\"_updateUsers\",value:async function(t){this.value=t,e(this,\"value-changed\",{value:t})}},{kind:\"method\",key:\"_userChanged\",value:function(e){e.stopPropagation();const t=e.currentTarget.index,i=e.detail.value,a=[...this._currentUsers];\"\"===i?a.splice(t,1):a.splice(t,1,i),this._updateUsers(a)}},{kind:\"method\",key:\"_addUser\",value:async function(e){e.stopPropagation();const t=e.detail.value;if(e.currentTarget.value=\"\",!t)return;const i=this._currentUsers;i.includes(t)||this._updateUsers([...i,t])}},{kind:\"method\",key:\"_removeUser\",value:function(e){const t=e.currentTarget.userId;this._updateUsers(this._currentUsers.filter((e=>e!==t)))}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      :host {\n        display: block;\n      }\n      div {\n        display: flex;\n        align-items: center;\n      }\n    `}}]}}),m),v([w(\"ha-automation-trigger-event\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"trigger\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{event_type:\"\"}}},{kind:\"method\",key:\"render\",value:function(){const{event_type:e,event_data:t,context:i}=this.trigger;return k`\n      <ha-textfield\n        .label=${this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.event.event_type\")}\n        name=\"event_type\"\n        .value=${e}\n        @change=${this._valueChanged}\n      ></ha-textfield>\n      <ha-yaml-editor\n        .hass=${this.hass}\n        .label=${this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.event.event_data\")}\n        .name=${\"event_data\"}\n        .defaultValue=${t}\n        @value-changed=${this._dataChanged}\n      ></ha-yaml-editor>\n      <br />\n      ${this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.event.context_users\")}\n      <ha-users-picker\n        .pickedUserLabel=${this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.event.context_user_picked\")}\n        .pickUserLabel=${this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.event.context_user_pick\")}\n        .hass=${this.hass}\n        .value=${this._wrapUsersInArray(null==i?void 0:i.user_id)}\n        @value-changed=${this._usersChanged}\n      ></ha-users-picker>\n    `}},{kind:\"method\",key:\"_wrapUsersInArray\",value:function(e){return e?\"string\"==typeof e?[e]:e:[]}},{kind:\"method\",key:\"_valueChanged\",value:function(e){e.stopPropagation(),Bd(this,e)}},{kind:\"method\",key:\"_dataChanged\",value:function(e){e.stopPropagation(),e.detail.isValid&&Bd(this,e)}},{kind:\"method\",key:\"_usersChanged\",value:function(t){t.stopPropagation();const i={...this.trigger};!t.detail.value.length&&i.context?delete i.context.user_id:(i.context||(i.context={}),i.context.user_id=t.detail.value),e(this,\"value-changed\",{value:i})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      ha-textfield {\n        display: block;\n      }\n    `}}]}}),m),v([w(\"ha-automation-trigger-geo_location\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"trigger\",value:void 0},{kind:\"field\",key:\"_schema\",value:()=>Ri((e=>[{name:\"source\",selector:{text:{}}},{name:\"zone\",selector:{entity:{domain:\"zone\"}}},{name:\"event\",type:\"select\",required:!0,options:[[\"enter\",e(\"ui.panel.config.automation.editor.triggers.type.geo_location.enter\")],[\"leave\",e(\"ui.panel.config.automation.editor.triggers.type.geo_location.leave\")]]}]))},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{source:\"\",zone:\"\",event:\"enter\"}}},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-form\n        .schema=${this._schema(this.hass.localize)}\n        .data=${this.trigger}\n        .hass=${this.hass}\n        .computeLabel=${this._computeLabelCallback}\n        @value-changed=${this._valueChanged}\n      ></ha-form>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;e(this,\"value-changed\",{value:i})}},{kind:\"field\",key:\"_computeLabelCallback\",value(){return e=>this.hass.localize(`ui.panel.config.automation.editor.triggers.type.geo_location.${e.name}`)}}]}}),m),v([w(\"ha-automation-trigger-homeassistant\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"trigger\",value:void 0},{kind:\"field\",key:\"_schema\",value:()=>Ri((e=>[{name:\"event\",type:\"select\",required:!0,options:[[\"start\",e(\"ui.panel.config.automation.editor.triggers.type.homeassistant.start\")],[\"shutdown\",e(\"ui.panel.config.automation.editor.triggers.type.homeassistant.shutdown\")]]}]))},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{event:\"start\"}}},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-form\n        .schema=${this._schema(this.hass.localize)}\n        .data=${this.trigger}\n        .hass=${this.hass}\n        .computeLabel=${this._computeLabelCallback}\n        @value-changed=${this._valueChanged}\n      ></ha-form>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;e(this,\"value-changed\",{value:i})}},{kind:\"field\",key:\"_computeLabelCallback\",value(){return e=>this.hass.localize(`ui.panel.config.automation.editor.triggers.type.geo_location.${e.name}`)}},{kind:\"field\",static:!0,key:\"styles\",value:()=>i`\n    label {\n      display: flex;\n      align-items: center;\n    }\n  `}]}}),m);const Td=[{name:\"topic\",required:!0,selector:{text:{}}},{name:\"payload\",selector:{text:{}}}];v([w(\"ha-automation-trigger-mqtt\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"trigger\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{topic:\"\"}}},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-form\n        .schema=${Td}\n        .data=${this.trigger}\n        .hass=${this.hass}\n        .computeLabel=${this._computeLabelCallback}\n        @value-changed=${this._valueChanged}\n      ></ha-form>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;e(this,\"value-changed\",{value:i})}},{kind:\"field\",key:\"_computeLabelCallback\",value(){return e=>this.hass.localize(`ui.panel.config.automation.editor.triggers.type.mqtt.${e.name}`)}}]}}),m),v([w(\"ha-automation-trigger-numeric_state\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"trigger\",value:void 0},{kind:\"field\",key:\"_schema\",value:()=>Ri((e=>[{name:\"entity_id\",required:!0,selector:{entity:{}}},{name:\"attribute\",selector:{attribute:{entity_id:e}}},{name:\"above\",selector:{text:{}}},{name:\"below\",selector:{text:{}}},{name:\"value_template\",selector:{text:{multiline:!0}}},{name:\"for\",selector:{duration:{}}}]))},{kind:\"method\",key:\"willUpdate\",value:function(t){t.has(\"trigger\")&&this.trigger&&dd(this.trigger)&&e(this,\"ui-mode-not-available\",Error(this.hass.localize(\"ui.errors.config.no_template_editor_support\")))}},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{entity_id:\"\"}}},{kind:\"method\",key:\"render\",value:function(){const e=Kl(this.trigger.for),t={...this.trigger,for:e},i=this._schema(this.trigger.entity_id);return k`\n      <ha-form\n        .hass=${this.hass}\n        .data=${t}\n        .schema=${i}\n        @value-changed=${this._valueChanged}\n        .computeLabel=${this._computeLabelCallback}\n      ></ha-form>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;e(this,\"value-changed\",{value:i})}},{kind:\"field\",key:\"_computeLabelCallback\",value(){return e=>{switch(e.name){case\"entity_id\":return this.hass.localize(\"ui.components.entity.entity-picker.entity\");case\"attribute\":return this.hass.localize(\"ui.components.entity.entity-attribute-picker.attribute\");case\"for\":return this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.state.for\");default:return this.hass.localize(`ui.panel.config.automation.editor.triggers.type.numeric_state.${e.name}`)}}}}]}}),m);const Od=dn(Yl,fn({platform:vn(\"state\"),entity_id:gn(kn([_n(),hn(_n())])),attribute:gn(_n()),from:gn(_n()),to:gn(_n()),for:gn(kn([_n(),Zl]))}));v([w(\"ha-automation-trigger-state\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"trigger\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{entity_id:[]}}},{kind:\"field\",key:\"_schema\",value:()=>Ri((e=>[{name:\"entity_id\",required:!0,selector:{entity:{multiple:!0}}},{name:\"attribute\",selector:{attribute:{entity_id:e}}},{name:\"from\",selector:{text:{}}},{name:\"to\",selector:{text:{}}},{name:\"for\",selector:{duration:{}}}]))},{kind:\"method\",key:\"shouldUpdate\",value:function(t){if(!t.has(\"trigger\"))return!0;if(this.trigger.for&&\"object\"==typeof this.trigger.for&&0===this.trigger.for.milliseconds&&delete this.trigger.for.milliseconds,this.trigger&&dd(this.trigger))return e(this,\"ui-mode-not-available\",Error(this.hass.localize(\"ui.errors.config.no_template_editor_support\"))),!1;try{sn(this.trigger,Od)}catch(t){return e(this,\"ui-mode-not-available\",t),!1}return!0}},{kind:\"method\",key:\"render\",value:function(){const e=Kl(this.trigger.for),t={...this.trigger,entity_id:ws(this.trigger.entity_id),for:e},i=this._schema(this.trigger.entity_id);return k`\n      <ha-form\n        .hass=${this.hass}\n        .data=${t}\n        .schema=${i}\n        @value-changed=${this._valueChanged}\n        .computeLabel=${this._computeLabelCallback}\n      ></ha-form>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;Object.keys(i).forEach((e=>void 0===i[e]||\"\"===i[e]?delete i[e]:{})),e(this,\"value-changed\",{value:i})}},{kind:\"field\",key:\"_computeLabelCallback\",value(){return e=>this.hass.localize(\"entity_id\"===e.name?\"ui.components.entity.entity-picker.entity\":`ui.panel.config.automation.editor.triggers.type.state.${e.name}`)}}]}}),m),v([w(\"ha-automation-trigger-sun\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"trigger\",value:void 0},{kind:\"field\",key:\"_schema\",value:()=>Ri((e=>[{name:\"event\",type:\"select\",required:!0,options:[[\"sunrise\",e(\"ui.panel.config.automation.editor.triggers.type.sun.sunrise\")],[\"sunset\",e(\"ui.panel.config.automation.editor.triggers.type.sun.sunset\")]]},{name:\"offset\",selector:{text:{}}}]))},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{event:\"sunrise\",offset:0}}},{kind:\"method\",key:\"render\",value:function(){const e=this._schema(this.hass.localize);return k`\n      <ha-form\n        .schema=${e}\n        .data=${this.trigger}\n        .hass=${this.hass}\n        .computeLabel=${this._computeLabelCallback}\n        @value-changed=${this._valueChanged}\n      ></ha-form>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;e(this,\"value-changed\",{value:i})}},{kind:\"field\",key:\"_computeLabelCallback\",value(){return e=>this.hass.localize(`ui.panel.config.automation.editor.triggers.type.sun.${e.name}`)}}]}}),m);v([w(\"ha-automation-trigger-tag\")],(function(t,i){class a extends i{constructor(...e){super(...e),t(this)}}return{F:a,d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"trigger\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_tags\",value:()=>[]},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{tag_id:\"\"}}},{kind:\"method\",key:\"firstUpdated\",value:function(e){_(y(a.prototype),\"firstUpdated\",this).call(this,e),this._fetchTags()}},{kind:\"method\",key:\"render\",value:function(){const{tag_id:e}=this.trigger;return k`\n      <ha-select\n        .label=${this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.tag.label\")}\n        .disabled=${0===this._tags.length}\n        .value=${e}\n        @selected=${this._tagChanged}\n      >\n        ${this._tags.map((e=>k`\n            <mwc-list-item .value=${e.id}>\n              ${e.name||e.id}\n            </mwc-list-item>\n          `))}\n      </ha-select>\n    `}},{kind:\"method\",key:\"_fetchTags\",value:async function(){this._tags=await(async e=>e.callWS({type:\"tag/list\"}))(this.hass),this._tags.sort(((e,t)=>Qa(e.name||e.id,t.name||t.id)))}},{kind:\"method\",key:\"_tagChanged\",value:function(t){e(this,\"value-changed\",{value:{...this.trigger,tag_id:t.target.value}})}}]}}),m),v([w(\"ha-automation-trigger-template\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"trigger\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{value_template:\"\"}}},{kind:\"method\",key:\"render\",value:function(){const{value_template:e}=this.trigger;return k`\n      <p>\n        ${this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.template.value_template\")}\n        *\n      </p>\n      <ha-code-editor\n        .name=${\"value_template\"}\n        mode=\"jinja2\"\n        .hass=${this.hass}\n        .value=${e}\n        autocomplete-entities\n        @value-changed=${this._valueChanged}\n        dir=\"ltr\"\n      ></ha-code-editor>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(e){Bd(this,e)}}]}}),m),v([w(\"ha-automation-trigger-time\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"trigger\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_inputMode\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{at:\"\"}}},{kind:\"field\",key:\"_schema\",value:()=>Ri(((e,t)=>{const i=t?{entity:{domain:\"input_datetime\"}}:{time:{}};return[{name:\"mode\",type:\"select\",required:!0,options:[[\"value\",e(\"ui.panel.config.automation.editor.triggers.type.time.type_value\")],[\"input\",e(\"ui.panel.config.automation.editor.triggers.type.time.type_input\")]]},{name:\"at\",selector:i}]}))},{kind:\"method\",key:\"willUpdate\",value:function(t){t.has(\"trigger\")&&this.trigger&&Array.isArray(this.trigger.at)&&e(this,\"ui-mode-not-available\",Error(this.hass.localize(\"ui.errors.config.editor_not_supported\")))}},{kind:\"method\",key:\"render\",value:function(){var e;const t=this.trigger.at;if(Array.isArray(t))return k``;const i=null!==(e=this._inputMode)&&void 0!==e?e:(null==t?void 0:t.startsWith(\"input_datetime.\"))||(null==t?void 0:t.startsWith(\"sensor.\")),a=this._schema(this.hass.localize,i),n={mode:i?\"input\":\"value\",...this.trigger};return k`\n      <ha-form\n        .hass=${this.hass}\n        .data=${n}\n        .schema=${a}\n        @value-changed=${this._valueChanged}\n        .computeLabel=${this._computeLabelCallback}\n      ></ha-form>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;this._inputMode=\"input\"===i.mode,delete i.mode,Object.keys(i).forEach((e=>void 0===i[e]||\"\"===i[e]?delete i[e]:{})),e(this,\"value-changed\",{value:i})}},{kind:\"field\",key:\"_computeLabelCallback\",value(){return e=>this.hass.localize(`ui.panel.config.automation.editor.triggers.type.time.${e.name}`)}}]}}),m);const Pd=[{name:\"hours\",selector:{text:{}}},{name:\"minutes\",selector:{text:{}}},{name:\"seconds\",selector:{text:{}}}];v([w(\"ha-automation-trigger-time_pattern\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"trigger\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{}}},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-form\n        .hass=${this.hass}\n        .schema=${Pd}\n        .data=${this.trigger}\n        .computeLabel=${this._computeLabelCallback}\n        @value-changed=${this._valueChanged}\n      ></ha-form>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){t.stopPropagation();const i=t.detail.value;e(this,\"value-changed\",{value:i})}},{kind:\"field\",key:\"_computeLabelCallback\",value(){return e=>this.hass.localize(`ui.panel.config.automation.editor.triggers.type.time_pattern.${e.name}`)}}]}}),m);function Md(e){return nd(e)&&\"zone\"!==as(e)}v([w(\"ha-automation-trigger-webhook\")],(function(t,a){class n extends a{constructor(...e){super(...e),t(this)}}return{F:n,d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"trigger\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_config\",value:void 0},{kind:\"field\",key:\"_unsub\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{webhook_id:\"\"}}},{kind:\"method\",key:\"connectedCallback\",value:function(){_(y(n.prototype),\"connectedCallback\",this).call(this);const t={callback:e=>{this._config=e}};e(this,\"subscribe-automation-config\",t),this._unsub=t.unsub}},{kind:\"method\",key:\"disconnectedCallback\",value:function(){_(y(n.prototype),\"disconnectedCallback\",this).call(this),this._unsub&&this._unsub()}},{kind:\"method\",key:\"_generateWebhookId\",value:function(){var e;const t=crypto.getRandomValues(new Uint8Array(18)),i=btoa(String.fromCharCode(...t)).replace(/\\+/g,\"-\").replace(/\\//g,\"_\"),a=((e,t=\"_\")=>{const i=\"àáäâãåăæąçćčđďèéěėëêęğǵḧìíïîįłḿǹńňñòóöôœøṕŕřßşśšșťțùúüûǘůűūųẃẍÿýźžż·/_,:;\",a=`aaaaaaaaacccddeeeeeeegghiiiiilmnnnnooooooprrsssssttuuuuuuuuuwxyyzzz${t}${t}${t}${t}${t}${t}`,n=new RegExp(i.split(\"\").join(\"|\"),\"g\");return e.toString().toLowerCase().replace(/\\s+/g,t).replace(n,(e=>a.charAt(i.indexOf(e)))).replace(/&/g,`${t}and${t}`).replace(/[^\\w-]+/g,\"\").replace(/-/g,t).replace(new RegExp(`(${t})\\\\1+`,\"g\"),\"$1\").replace(new RegExp(`^${t}+`),\"\").replace(new RegExp(`${t}+$`),\"\")})((null===(e=this._config)||void 0===e?void 0:e.alias)||\"\",\"-\");return`${a}-${i}`}},{kind:\"method\",key:\"willUpdate\",value:function(e){_(y(n.prototype),\"willUpdate\",this).call(this,e),e.has(\"trigger\")&&\"\"===this.trigger.webhook_id&&(this.trigger.webhook_id=this._generateWebhookId())}},{kind:\"method\",key:\"render\",value:function(){const{webhook_id:e}=this.trigger;return k`\n      <ha-textfield\n        name=\"webhook_id\"\n        .label=${this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.webhook.webhook_id\")}\n        .helper=${this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.webhook.webhook_id_helper\")}\n        iconTrailing\n        .value=${e||\"\"}\n        @input=${this._valueChanged}\n      >\n        <ha-icon-button\n          @click=${this._copyUrl}\n          slot=\"trailingIcon\"\n          .label=${this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.webhook.copy_url\")}\n          .path=${_a}\n        ></ha-icon-button>\n      </ha-textfield>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(e){Bd(this,e)}},{kind:\"method\",key:\"_copyUrl\",value:async function(e){const t=e.target.parentElement,i=this.hass.hassUrl(`/api/webhook/${t.value}`);await(async e=>{if(navigator.clipboard)try{return void await navigator.clipboard.writeText(e)}catch{}const t=document.createElement(\"textarea\");t.value=e,document.body.appendChild(t),t.select(),document.execCommand(\"copy\"),document.body.removeChild(t)})(i),En(this,{message:this.hass.localize(\"ui.common.copied_clipboard\")})}},{kind:\"field\",static:!0,key:\"styles\",value:()=>i`\n    ha-textfield {\n      display: block;\n    }\n\n    ha-textfield > ha-icon-button {\n      --mdc-icon-button-size: 24px;\n      --mdc-icon-size: 18px;\n    }\n  `}]}}),m);const Fd=[\"zone\"];v([w(\"ha-automation-trigger-zone\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"trigger\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{entity_id:\"\",zone:\"\",event:\"enter\"}}},{kind:\"method\",key:\"render\",value:function(){const{entity_id:e,zone:t,event:i}=this.trigger;return k`\n      <ha-entity-picker\n        .label=${this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.zone.entity\")}\n        .value=${e}\n        @value-changed=${this._entityPicked}\n        .hass=${this.hass}\n        allow-custom-entity\n        .entityFilter=${Md}\n      ></ha-entity-picker>\n      <ha-entity-picker\n        .label=${this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.zone.zone\")}\n        .value=${t}\n        @value-changed=${this._zonePicked}\n        .hass=${this.hass}\n        allow-custom-entity\n        .includeDomains=${Fd}\n      ></ha-entity-picker>\n\n      <label>\n        ${this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.zone.event\")}\n        <ha-formfield\n          .label=${this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.zone.enter\")}\n        >\n          <ha-radio\n            name=\"event\"\n            value=\"enter\"\n            .checked=${\"enter\"===i}\n            @change=${this._radioGroupPicked}\n          ></ha-radio>\n        </ha-formfield>\n        <ha-formfield\n          .label=${this.hass.localize(\"ui.panel.config.automation.editor.triggers.type.zone.leave\")}\n        >\n          <ha-radio\n            name=\"event\"\n            value=\"leave\"\n            .checked=${\"leave\"===i}\n            @change=${this._radioGroupPicked}\n          ></ha-radio>\n        </ha-formfield>\n      </label>\n    `}},{kind:\"method\",key:\"_entityPicked\",value:function(t){t.stopPropagation(),e(this,\"value-changed\",{value:{...this.trigger,entity_id:t.detail.value}})}},{kind:\"method\",key:\"_zonePicked\",value:function(t){t.stopPropagation(),e(this,\"value-changed\",{value:{...this.trigger,zone:t.detail.value}})}},{kind:\"method\",key:\"_radioGroupPicked\",value:function(t){t.stopPropagation(),e(this,\"value-changed\",{value:{...this.trigger,event:t.target.value}})}},{kind:\"field\",static:!0,key:\"styles\",value:()=>i`\n    label {\n      display: flex;\n      align-items: center;\n    }\n    ha-entity-picker {\n      display: block;\n      margin-bottom: 24px;\n    }\n  `}]}}),m);const Dd=[\"calendar\",\"device\",\"event\",\"state\",\"geo_location\",\"homeassistant\",\"mqtt\",\"numeric_state\",\"sun\",\"tag\",\"template\",\"time\",\"time_pattern\",\"webhook\",\"zone\"],Bd=(t,i)=>{var a,n;i.stopPropagation();const o=null===(a=i.currentTarget)||void 0===a?void 0:a.name;if(!o)return;const s=null===(n=i.target)||void 0===n?void 0:n.value;if((t.trigger[o]||\"\")===s)return;let r;void 0===s||\"\"===s?(r={...t.trigger},delete r[o]):r={...t.trigger,[o]:s},e(t,\"value-changed\",{value:r})};v([w(\"ha-automation-trigger-row\")],(function(t,a){class n extends a{constructor(...e){super(...e),t(this)}}return{F:n,d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"trigger\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_warnings\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_yamlMode\",value:()=>!1},{kind:\"field\",decorators:[Vi()],key:\"_requestShowId\",value:()=>!1},{kind:\"field\",decorators:[Vi()],key:\"_triggered\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_triggerColor\",value:()=>!1},{kind:\"field\",decorators:[g(\"ha-yaml-editor\")],key:\"_yamlEditor\",value:void 0},{kind:\"field\",key:\"_triggerUnsub\",value:void 0},{kind:\"field\",key:\"_processedTypes\",value:()=>Ri((e=>Dd.map((t=>[t,e(`ui.panel.config.automation.editor.triggers.type.${t}.label`)])).sort(((e,t)=>Za(e[1],t[1])))))},{kind:\"method\",key:\"render\",value:function(){const e=Dd.indexOf(this.trigger.platform),t=this._yamlMode||-1===e,i=\"id\"in this.trigger||this._requestShowId;return k`\n      <ha-card outlined>\n        ${!1===this.trigger.enabled?k`<div class=\"disabled-bar\">\n              ${this.hass.localize(\"ui.panel.config.automation.editor.actions.disabled\")}\n            </div>`:\"\"}\n        <div class=\"card-menu\">\n          <ha-button-menu corner=\"BOTTOM_START\" @action=${this._handleAction}>\n            <ha-icon-button\n              slot=\"trigger\"\n              .label=${this.hass.localize(\"ui.common.menu\")}\n              .path=${Yi}\n            ></ha-icon-button>\n            <mwc-list-item>\n              ${this.hass.localize(\"ui.panel.config.automation.editor.triggers.edit_id\")}\n            </mwc-list-item>\n            <mwc-list-item .disabled=${-1===e}>\n              ${t?this.hass.localize(\"ui.panel.config.automation.editor.edit_ui\"):this.hass.localize(\"ui.panel.config.automation.editor.edit_yaml\")}\n            </mwc-list-item>\n            <mwc-list-item>\n              ${this.hass.localize(\"ui.panel.config.automation.editor.actions.duplicate\")}\n            </mwc-list-item>\n            <mwc-list-item>\n              ${!1===this.trigger.enabled?this.hass.localize(\"ui.panel.config.automation.editor.actions.enable\"):this.hass.localize(\"ui.panel.config.automation.editor.actions.disable\")}\n            </mwc-list-item>\n            <mwc-list-item class=\"warning\">\n              ${this.hass.localize(\"ui.panel.config.automation.editor.actions.delete\")}\n            </mwc-list-item>\n          </ha-button-menu>\n        </div>\n        <div\n          class=\"card-content ${!1===this.trigger.enabled?\"disabled\":\"\"}\"\n        >\n          ${this._warnings?k`<ha-alert\n                alert-type=\"warning\"\n                .title=${this.hass.localize(\"ui.errors.config.editor_not_supported\")}\n              >\n                ${this._warnings.length&&void 0!==this._warnings[0]?k` <ul>\n                      ${this._warnings.map((e=>k`<li>${e}</li>`))}\n                    </ul>`:\"\"}\n                ${this.hass.localize(\"ui.errors.config.edit_in_yaml_supported\")}\n              </ha-alert>`:\"\"}\n          ${t?k`\n                ${-1===e?k`\n                      ${this.hass.localize(\"ui.panel.config.automation.editor.triggers.unsupported_platform\",\"platform\",this.trigger.platform)}\n                    `:\"\"}\n                <h2>\n                  ${this.hass.localize(\"ui.panel.config.automation.editor.edit_yaml\")}\n                </h2>\n                <ha-yaml-editor\n                  .hass=${this.hass}\n                  .defaultValue=${this.trigger}\n                  @value-changed=${this._onYamlChange}\n                ></ha-yaml-editor>\n              `:k`\n                <ha-select\n                  .label=${this.hass.localize(\"ui.panel.config.automation.editor.triggers.type_select\")}\n                  .value=${this.trigger.platform}\n                  naturalMenuWidth\n                  @selected=${this._typeChanged}\n                >\n                  ${this._processedTypes(this.hass.localize).map((([e,t])=>k`\n                      <mwc-list-item .value=${e}>${t}</mwc-list-item>\n                    `))}\n                </ha-select>\n                ${i?k`\n                      <ha-textfield\n                        .label=${this.hass.localize(\"ui.panel.config.automation.editor.triggers.id\")}\n                        .value=${this.trigger.id||\"\"}\n                        @change=${this._idChanged}\n                      >\n                      </ha-textfield>\n                    `:\"\"}\n                <div @ui-mode-not-available=${this._handleUiModeNotAvailable}>\n                  ${za(`ha-automation-trigger-${this.trigger.platform}`,{hass:this.hass,trigger:this.trigger})}\n                </div>\n              `}\n        </div>\n        <div\n          class=\"triggered ${Xi({active:void 0!==this._triggered,accent:this._triggerColor})}\"\n          @click=${this._showTriggeredInfo}\n        >\n          ${this.hass.localize(\"ui.panel.config.automation.editor.triggers.triggered\")}\n        </div>\n      </ha-card>\n    `}},{kind:\"method\",key:\"updated\",value:function(e){_(y(n.prototype),\"updated\",this).call(this,e),e.has(\"trigger\")&&this._subscribeTrigger()}},{kind:\"method\",key:\"connectedCallback\",value:function(){_(y(n.prototype),\"connectedCallback\",this).call(this),this.hasUpdated&&this.trigger&&this._subscribeTrigger()}},{kind:\"method\",key:\"disconnectedCallback\",value:function(){_(y(n.prototype),\"disconnectedCallback\",this).call(this),this._triggerUnsub&&(this._triggerUnsub.then((e=>e())),this._triggerUnsub=void 0),this._doSubscribeTrigger.cancel()}},{kind:\"method\",key:\"_subscribeTrigger\",value:function(){this._triggerUnsub&&(this._triggerUnsub.then((e=>e())),this._triggerUnsub=void 0),this._doSubscribeTrigger()}},{kind:\"field\",key:\"_doSubscribeTrigger\",value(){return Ea((async()=>{let e;const t=this.trigger;this._triggerUnsub&&(this._triggerUnsub.then((e=>e())),this._triggerUnsub=void 0);if(!(await xn(this.hass,{trigger:t})).trigger.valid||this.trigger!==t)return;const i=((e,t,i,a)=>e.connection.subscribeMessage(t,{type:\"subscribe_trigger\",trigger:i,variables:a}))(this.hass,(t=>{void 0!==e?(clearTimeout(e),this._triggerColor=!this._triggerColor):this._triggerColor=!1,this._triggered=t,e=window.setTimeout((()=>{this._triggered=void 0,e=void 0}),5e3)}),t);i.catch((()=>{this._triggerUnsub===i&&(this._triggerUnsub=void 0)})),this._triggerUnsub=i}),5e3)}},{kind:\"method\",key:\"_handleUiModeNotAvailable\",value:function(e){this._warnings=bn(this.hass,e.detail).warnings,this._yamlMode||(this._yamlMode=!0)}},{kind:\"method\",key:\"_handleAction\",value:function(t){switch(t.detail.index){case 0:this._requestShowId=!0;break;case 1:this._switchYamlMode();break;case 2:e(this,\"duplicate\");break;case 3:this._onDisable();break;case 4:this._onDelete()}}},{kind:\"method\",key:\"_onDelete\",value:function(){Sa(this,{text:this.hass.localize(\"ui.panel.config.automation.editor.triggers.delete_confirm\"),dismissText:this.hass.localize(\"ui.common.cancel\"),confirmText:this.hass.localize(\"ui.common.delete\"),confirm:()=>{e(this,\"value-changed\",{value:null})}})}},{kind:\"method\",key:\"_onDisable\",value:function(){var t;const i=!(null===(t=this.trigger.enabled)||void 0===t||t),a={...this.trigger,enabled:i};var n;(e(this,\"value-changed\",{value:a}),this._yamlMode)&&(null===(n=this._yamlEditor)||void 0===n||n.setValue(a))}},{kind:\"method\",key:\"_typeChanged\",value:function(t){const i=t.target.value;if(!i)return;const a=customElements.get(`ha-automation-trigger-${i}`);if(i!==this.trigger.platform){const t={platform:i,...a.defaultConfig};this.trigger.id&&(t.id=this.trigger.id),e(this,\"value-changed\",{value:t})}}},{kind:\"method\",key:\"_idChanged\",value:function(t){var i;const a=t.target.value;if(a===(null!==(i=this.trigger.id)&&void 0!==i?i:\"\"))return;this._requestShowId=!0;const n={...this.trigger};a?n.id=a:delete n.id,e(this,\"value-changed\",{value:n})}},{kind:\"method\",key:\"_onYamlChange\",value:function(t){t.stopPropagation(),t.detail.isValid&&(this._warnings=void 0,e(this,\"value-changed\",{value:t.detail.value}))}},{kind:\"method\",key:\"_switchYamlMode\",value:function(){this._warnings=void 0,this._yamlMode=!this._yamlMode}},{kind:\"method\",key:\"_showTriggeredInfo\",value:function(){La(this,{text:k`\n        <ha-yaml-editor\n          readOnly\n          .hass=${this.hass}\n          .defaultValue=${this._triggered}\n        ></ha-yaml-editor>\n      `})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[Hi,i`\n        .disabled {\n          opacity: 0.5;\n          pointer-events: none;\n        }\n        .card-content {\n          padding-top: 16px;\n          margin-top: 0;\n        }\n        .disabled-bar {\n          background: var(--divider-color, #e0e0e0);\n          text-align: center;\n          border-top-right-radius: var(--ha-card-border-radius);\n          border-top-left-radius: var(--ha-card-border-radius);\n        }\n        .card-menu {\n          float: var(--float-end, right);\n          z-index: 3;\n          margin: 4px;\n          --mdc-theme-text-primary-on-background: var(--primary-text-color);\n          display: flex;\n          align-items: center;\n        }\n        .triggered {\n          cursor: pointer;\n          position: absolute;\n          top: 0px;\n          right: 0px;\n          left: 0px;\n          text-transform: uppercase;\n          font-weight: bold;\n          font-size: 14px;\n          background-color: var(--primary-color);\n          color: var(--text-primary-color);\n          max-height: 0px;\n          overflow: hidden;\n          transition: max-height 0.3s;\n          text-align: center;\n          border-top-right-radius: var(--ha-card-border-radius, 4px);\n          border-top-left-radius: var(--ha-card-border-radius, 4px);\n        }\n        .triggered.active {\n          max-height: 100px;\n        }\n        .triggered:hover {\n          opacity: 0.8;\n        }\n        .triggered.accent {\n          background-color: var(--accent-color);\n          color: var(--text-accent-color, var(--text-primary-color));\n        }\n        mwc-list-item[disabled] {\n          --mdc-theme-text-primary-on-background: var(--disabled-text-color);\n        }\n        ha-select {\n          margin-bottom: 24px;\n        }\n        ha-textfield {\n          display: block;\n          margin-bottom: 24px;\n        }\n      `]}}]}}),m),v([w(\"ha-automation-trigger\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"triggers\",value:void 0},{kind:\"method\",key:\"render\",value:function(){return k`\n      ${this.triggers.map(((e,t)=>k`\n          <ha-automation-trigger-row\n            .index=${t}\n            .trigger=${e}\n            @duplicate=${this._duplicateTrigger}\n            @value-changed=${this._triggerChanged}\n            .hass=${this.hass}\n          ></ha-automation-trigger-row>\n        `))}\n      <ha-card outlined>\n        <div class=\"card-actions add-card\">\n          <mwc-button @click=${this._addTrigger}>\n            ${this.hass.localize(\"ui.panel.config.automation.editor.triggers.add\")}\n          </mwc-button>\n        </div>\n      </ha-card>\n    `}},{kind:\"method\",key:\"_addTrigger\",value:function(){const t=this.triggers.concat({platform:\"device\",...Id.defaultConfig});e(this,\"value-changed\",{value:t})}},{kind:\"method\",key:\"_triggerChanged\",value:function(t){t.stopPropagation();const i=[...this.triggers],a=t.detail.value,n=t.target.index;null===a?i.splice(n,1):i[n]=a,e(this,\"value-changed\",{value:i})}},{kind:\"method\",key:\"_duplicateTrigger\",value:function(t){t.stopPropagation();const i=t.target.index;e(this,\"value-changed\",{value:this.triggers.concat(Ya(this.triggers[i]))})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      ha-automation-trigger-row,\n      ha-card {\n        display: block;\n        margin-top: 16px;\n      }\n      .add-card mwc-button {\n        display: block;\n        text-align: center;\n      }\n    `}}]}}),m),v([w(\"ha-automation-action-wait_for_trigger\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"action\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{wait_for_trigger:[]}}},{kind:\"method\",key:\"render\",value:function(){const{wait_for_trigger:e,continue_on_timeout:t,timeout:i}=this.action;return k`\n      <ha-textfield\n        .label=${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.wait_for_trigger.timeout\")}\n        .name=${\"timeout\"}\n        .value=${i||\"\"}\n        @change=${this._valueChanged}\n      ></ha-textfield>\n      <ha-formfield\n        .label=${this.hass.localize(\"ui.panel.config.automation.editor.actions.type.wait_for_trigger.continue_timeout\")}\n      >\n        <ha-switch\n          .checked=${null==t||t}\n          @change=${this._continueChanged}\n        ></ha-switch>\n      </ha-formfield>\n      <ha-automation-trigger\n        .triggers=${e}\n        .hass=${this.hass}\n        .name=${\"wait_for_trigger\"}\n        @value-changed=${this._valueChanged}\n      ></ha-automation-trigger>\n    `}},{kind:\"method\",key:\"_continueChanged\",value:function(t){e(this,\"value-changed\",{value:{...this.action,continue_on_timeout:t.target.checked}})}},{kind:\"method\",key:\"_valueChanged\",value:function(e){qd(this,e)}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      ha-textfield {\n        display: block;\n        margin-bottom: 24px;\n      }\n    `}}]}}),m);const Nd=[{name:\"wait_template\",selector:{template:{}}},{name:\"timeout\",required:!1,selector:{text:{}}},{name:\"continue_on_timeout\",selector:{boolean:{}}}];v([w(\"ha-automation-action-wait_template\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"action\",value:void 0},{kind:\"get\",static:!0,key:\"defaultConfig\",value:function(){return{wait_template:\"\",continue_on_timeout:!0}}},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-form\n        .hass=${this.hass}\n        .data=${this.action}\n        .schema=${Nd}\n        .computeLabel=${this._computeLabelCallback}\n      ></ha-form>\n    `}},{kind:\"field\",key:\"_computeLabelCallback\",value(){return e=>this.hass.localize(`ui.panel.config.automation.editor.actions.type.wait_template.${\"continue_on_timeout\"===e.name?\"continue_timeout\":e.name}`)}}]}}),m);const Vd=[\"condition\",\"delay\",\"event\",\"play_media\",\"activate_scene\",\"service\",\"wait_template\",\"wait_for_trigger\",\"repeat\",\"choose\",\"if\",\"device_id\",\"stop\",\"parallel\"],jd=e=>{if(e)return\"service\"in e||\"scene\"in e?(e=>{if(\"delay\"in e)return\"delay\";if(\"wait_template\"in e)return\"wait_template\";if([\"condition\",\"and\",\"or\",\"not\"].some((t=>t in e)))return\"check_condition\";if(\"event\"in e)return\"fire_event\";if(\"device_id\"in e)return\"device_action\";if(\"scene\"in e)return\"activate_scene\";if(\"repeat\"in e)return\"repeat\";if(\"choose\"in e)return\"choose\";if(\"if\"in e)return\"if\";if(\"wait_for_trigger\"in e)return\"wait_for_trigger\";if(\"variables\"in e)return\"variables\";if(\"stop\"in e)return\"stop\";if(\"parallel\"in e)return\"parallel\";if(\"service\"in e){if(\"metadata\"in e){if(rn(e,In))return\"activate_scene\";if(rn(e,An))return\"play_media\"}return\"service\"}return\"unknown\"})(e):[\"and\",\"or\",\"not\"].some((t=>t in e))?\"condition\":Vd.find((t=>t in e))},qd=(t,i)=>{var a,n;i.stopPropagation();const o=null===(a=i.target)||void 0===a?void 0:a.name;if(!o)return;const s=(null===(n=i.detail)||void 0===n?void 0:n.value)||i.target.value;if((t.action[o]||\"\")===s)return;let r;s?r={...t.action,[o]:s}:(r={...t.action},delete r[o]),e(t,\"value-changed\",{value:r})};v([w(\"ha-automation-action-row\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"action\",value:void 0},{kind:\"field\",decorators:[f()],key:\"index\",value:void 0},{kind:\"field\",decorators:[f()],key:\"totalActions\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"narrow\",value:()=>!1},{kind:\"field\",decorators:[Vi()],key:\"_warnings\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_uiModeAvailable\",value:()=>!0},{kind:\"field\",decorators:[Vi()],key:\"_yamlMode\",value:()=>!1},{kind:\"field\",decorators:[g(\"ha-yaml-editor\")],key:\"_yamlEditor\",value:void 0},{kind:\"field\",key:\"_processedTypes\",value:()=>Ri((e=>Vd.map((t=>[t,e(`ui.panel.config.automation.editor.actions.type.${t}.label`)])).sort(((e,t)=>Za(e[1],t[1])))))},{kind:\"method\",key:\"willUpdate\",value:function(e){e.has(\"action\")&&(this._uiModeAvailable=void 0!==jd(this.action),this._uiModeAvailable||this._yamlMode||(this._yamlMode=!0))}},{kind:\"method\",key:\"updated\",value:function(e){if(e.has(\"action\")&&this._yamlMode){const e=this._yamlEditor;e&&e.value!==this.action&&e.setValue(this.action)}}},{kind:\"method\",key:\"render\",value:function(){const e=jd(this.action),t=this._yamlMode;return k`\n      <ha-card outlined>\n        ${!1===this.action.enabled?k`<div class=\"disabled-bar\">\n              ${this.hass.localize(\"ui.panel.config.automation.editor.actions.disabled\")}\n            </div>`:\"\"}\n        <div class=\"card-menu\">\n          ${0!==this.index?k`\n                <ha-icon-button\n                  .label=${this.hass.localize(\"ui.panel.config.automation.editor.move_up\")}\n                  .path=${ya}\n                  @click=${this._moveUp}\n                ></ha-icon-button>\n              `:\"\"}\n          ${this.index!==this.totalActions-1?k`\n                <ha-icon-button\n                  .label=${this.hass.localize(\"ui.panel.config.automation.editor.move_down\")}\n                  .path=${ka}\n                  @click=${this._moveDown}\n                ></ha-icon-button>\n              `:\"\"}\n          <ha-button-menu corner=\"BOTTOM_START\" @action=${this._handleAction}>\n            <ha-icon-button\n              slot=\"trigger\"\n              .label=${this.hass.localize(\"ui.common.menu\")}\n              .path=${Yi}\n            ></ha-icon-button>\n            <mwc-list-item>\n              ${this.hass.localize(\"ui.panel.config.automation.editor.actions.run_action\")}\n            </mwc-list-item>\n            <mwc-list-item .disabled=${!this._uiModeAvailable}>\n              ${t?this.hass.localize(\"ui.panel.config.automation.editor.edit_ui\"):this.hass.localize(\"ui.panel.config.automation.editor.edit_yaml\")}\n            </mwc-list-item>\n            <mwc-list-item>\n              ${this.hass.localize(\"ui.panel.config.automation.editor.actions.duplicate\")}\n            </mwc-list-item>\n            <mwc-list-item>\n              ${!1===this.action.enabled?this.hass.localize(\"ui.panel.config.automation.editor.actions.enable\"):this.hass.localize(\"ui.panel.config.automation.editor.actions.disable\")}\n            </mwc-list-item>\n            <mwc-list-item class=\"warning\">\n              ${this.hass.localize(\"ui.panel.config.automation.editor.actions.delete\")}\n            </mwc-list-item>\n          </ha-button-menu>\n        </div>\n        <div\n          class=\"card-content ${!1===this.action.enabled?\"disabled\":\"\"}\"\n        >\n          ${this._warnings?k`<ha-alert\n                alert-type=\"warning\"\n                .title=${this.hass.localize(\"ui.errors.config.editor_not_supported\")}\n              >\n                ${this._warnings.length>0&&void 0!==this._warnings[0]?k` <ul>\n                      ${this._warnings.map((e=>k`<li>${e}</li>`))}\n                    </ul>`:\"\"}\n                ${this.hass.localize(\"ui.errors.config.edit_in_yaml_supported\")}\n              </ha-alert>`:\"\"}\n          ${t?k`\n                ${void 0===e?k`\n                      ${this.hass.localize(\"ui.panel.config.automation.editor.actions.unsupported_action\",\"action\",e)}\n                    `:\"\"}\n                <h2>\n                  ${this.hass.localize(\"ui.panel.config.automation.editor.edit_yaml\")}\n                </h2>\n                <ha-yaml-editor\n                  .hass=${this.hass}\n                  .defaultValue=${this.action}\n                  @value-changed=${this._onYamlChange}\n                ></ha-yaml-editor>\n              `:k`\n                <ha-select\n                  .label=${this.hass.localize(\"ui.panel.config.automation.editor.actions.type_select\")}\n                  .value=${jd(this.action)}\n                  naturalMenuWidth\n                  @selected=${this._typeChanged}\n                >\n                  ${this._processedTypes(this.hass.localize).map((([e,t])=>k`\n                      <mwc-list-item .value=${e}>${t}</mwc-list-item>\n                    `))}\n                </ha-select>\n\n                <div @ui-mode-not-available=${this._handleUiModeNotAvailable}>\n                  ${za(`ha-automation-action-${e}`,{hass:this.hass,action:this.action,narrow:this.narrow})}\n                </div>\n              `}\n        </div>\n      </ha-card>\n    `}},{kind:\"method\",key:\"_handleUiModeNotAvailable\",value:function(e){e.stopPropagation(),this._warnings=bn(this.hass,e.detail).warnings,this._yamlMode||(this._yamlMode=!0)}},{kind:\"method\",key:\"_moveUp\",value:function(){e(this,\"move-action\",{direction:\"up\"})}},{kind:\"method\",key:\"_moveDown\",value:function(){e(this,\"move-action\",{direction:\"down\"})}},{kind:\"method\",key:\"_handleAction\",value:function(t){switch(t.detail.index){case 0:this._runAction();break;case 1:this._switchYamlMode();break;case 2:e(this,\"duplicate\");break;case 3:this._onDisable();break;case 4:this._onDelete()}}},{kind:\"method\",key:\"_onDisable\",value:function(){var t;const i=!(null===(t=this.action.enabled)||void 0===t||t),a={...this.action,enabled:i};var n;(e(this,\"value-changed\",{value:a}),this._yamlMode)&&(null===(n=this._yamlEditor)||void 0===n||n.setValue(a))}},{kind:\"method\",key:\"_runAction\",value:async function(){const e=await xn(this.hass,{action:this.action});if(e.action.valid){try{await(t=this.hass,i=this.action,t.callWS({type:\"execute_script\",sequence:i}))}catch(e){return void La(this,{title:this.hass.localize(\"ui.panel.config.automation.editor.actions.run_action_error\"),text:e.message||e})}var t,i;En(this,{message:this.hass.localize(\"ui.panel.config.automation.editor.actions.run_action_success\")})}else La(this,{title:this.hass.localize(\"ui.panel.config.automation.editor.actions.invalid_action\"),text:e.action.error})}},{kind:\"method\",key:\"_onDelete\",value:function(){Sa(this,{text:this.hass.localize(\"ui.panel.config.automation.editor.actions.delete_confirm\"),dismissText:this.hass.localize(\"ui.common.cancel\"),confirmText:this.hass.localize(\"ui.common.delete\"),confirm:()=>{e(this,\"value-changed\",{value:null})}})}},{kind:\"method\",key:\"_typeChanged\",value:function(t){const i=t.target.value;if(i&&(this._uiModeAvailable=Vd.includes(i),this._uiModeAvailable||this._yamlMode||(this._yamlMode=!1),i!==jd(this.action))){const t=customElements.get(`ha-automation-action-${i}`);e(this,\"value-changed\",{value:{...t.defaultConfig}})}}},{kind:\"method\",key:\"_onYamlChange\",value:function(t){t.stopPropagation(),t.detail.isValid&&e(this,\"value-changed\",{value:t.detail.value})}},{kind:\"method\",key:\"_switchYamlMode\",value:function(){this._warnings=void 0,this._yamlMode=!this._yamlMode}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[Hi,i`\n        .disabled {\n          opacity: 0.5;\n          pointer-events: none;\n        }\n        .card-content {\n          padding-top: 16px;\n          margin-top: 0;\n        }\n        .disabled-bar {\n          background: var(--divider-color, #e0e0e0);\n          text-align: center;\n          border-top-right-radius: var(--ha-card-border-radius);\n          border-top-left-radius: var(--ha-card-border-radius);\n        }\n        .card-menu {\n          float: var(--float-end, right);\n          z-index: 3;\n          margin: 4px;\n          --mdc-theme-text-primary-on-background: var(--primary-text-color);\n          display: flex;\n          align-items: center;\n        }\n        mwc-list-item[disabled] {\n          --mdc-theme-text-primary-on-background: var(--disabled-text-color);\n        }\n        .warning {\n          margin-bottom: 8px;\n        }\n        .warning ul {\n          margin: 4px 0;\n        }\n        ha-select {\n          margin-bottom: 24px;\n        }\n      `]}}]}}),m),v([w(\"ha-automation-action\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"narrow\",value:()=>!1},{kind:\"field\",decorators:[f()],key:\"actions\",value:void 0},{kind:\"method\",key:\"render\",value:function(){return k`\n      ${this.actions.map(((e,t)=>k`\n          <ha-automation-action-row\n            .index=${t}\n            .totalActions=${this.actions.length}\n            .action=${e}\n            .narrow=${this.narrow}\n            @duplicate=${this._duplicateAction}\n            @move-action=${this._move}\n            @value-changed=${this._actionChanged}\n            .hass=${this.hass}\n          ></ha-automation-action-row>\n        `))}\n      <ha-card outlined>\n        <div class=\"card-actions add-card\">\n          <mwc-button @click=${this._addAction}>\n            ${this.hass.localize(\"ui.panel.config.automation.editor.actions.add\")}\n          </mwc-button>\n        </div>\n      </ha-card>\n    `}},{kind:\"method\",key:\"_addAction\",value:function(){const t=this.actions.concat({...cd.defaultConfig});e(this,\"value-changed\",{value:t})}},{kind:\"method\",key:\"_move\",value:function(t){t.stopPropagation();const i=t.target.index,a=\"up\"===t.detail.direction?i-1:i+1,n=this.actions.concat(),o=n.splice(i,1)[0];n.splice(a,0,o),e(this,\"value-changed\",{value:n})}},{kind:\"method\",key:\"_actionChanged\",value:function(t){t.stopPropagation();const i=[...this.actions],a=t.detail.value,n=t.target.index;null===a?i.splice(n,1):i[n]=a,e(this,\"value-changed\",{value:i})}},{kind:\"method\",key:\"_duplicateAction\",value:function(t){t.stopPropagation();const i=t.target.index;e(this,\"value-changed\",{value:this.actions.concat(Ya(this.actions[i]))})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      ha-automation-action-row,\n      ha-card {\n        display: block;\n        margin-top: 16px;\n      }\n      .add-card mwc-button {\n        display: block;\n        text-align: center;\n      }\n    `}}]}}),m),v([w(\"ha-selector-action\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"selector\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean,reflect:!0})],key:\"disabled\",value:()=>!1},{kind:\"method\",key:\"render\",value:function(){return k`<ha-automation-action\n      .disabled=${this.disabled}\n      .actions=${this.value||[]}\n      .hass=${this.hass}\n    ></ha-automation-action>`}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      ha-automation-action {\n        display: block;\n        margin-bottom: 16px;\n      }\n      :host([disabled]) ha-automation-action {\n        opacity: var(--light-disabled-opacity);\n        pointer-events: none;\n      }\n    `}}]}}),m);const Rd=async e=>((e,t,i,a)=>{const[n,o,s]=e.split(\".\",3);return Number(n)>t||Number(n)===t&&(void 0===a?Number(o)>=i:Number(o)>i)||void 0!==a&&Number(n)===t&&Number(o)===i&&Number(s)>=a})(e.config.version,2021,2,4)?e.callWS({type:\"supervisor/api\",endpoint:\"/addons\",method:\"get\"}):(await e.callApi(\"GET\",\"hassio/addons\")).data,Ud=e=>k`<mwc-list-item twoline graphic=\"icon\">\n  <span>${e.name}</span>\n  <span slot=\"secondary\">${e.slug}</span>\n  ${e.icon?k`<img slot=\"graphic\" .src=\"/api/hassio/addons/${e.slug}/icon\" />`:\"\"}\n</mwc-list-item>`;v([w(\"ha-addon-picker\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:()=>\"\"},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_addons\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!1},{kind:\"field\",decorators:[g(\"ha-combo-box\")],key:\"_comboBox\",value:void 0},{kind:\"method\",key:\"open\",value:function(){var e;null===(e=this._comboBox)||void 0===e||e.open()}},{kind:\"method\",key:\"focus\",value:function(){var e;null===(e=this._comboBox)||void 0===e||e.focus()}},{kind:\"method\",key:\"firstUpdated\",value:function(){this._getAddons()}},{kind:\"method\",key:\"render\",value:function(){return this._addons?k`\n      <ha-combo-box\n        .hass=${this.hass}\n        .label=${void 0===this.label&&this.hass?this.hass.localize(\"ui.components.addon-picker.addon\"):this.label}\n        .value=${this._value}\n        .required=${this.required}\n        .disabled=${this.disabled}\n        .helper=${this.helper}\n        .renderer=${Ud}\n        .items=${this._addons}\n        item-value-path=\"slug\"\n        item-id-path=\"slug\"\n        item-label-path=\"name\"\n        @value-changed=${this._addonChanged}\n      ></ha-combo-box>\n    `:k``}},{kind:\"method\",key:\"_getAddons\",value:async function(){try{if(Na(this.hass,\"hassio\")){const e=await Rd(this.hass);this._addons=e.addons.filter((e=>e.version)).sort(((e,t)=>Za(e.name,t.name)))}else La(this,{title:this.hass.localize(\"ui.componencts.addon-picker.error.no_supervisor.title\"),text:this.hass.localize(\"ui.componencts.addon-picker.error.no_supervisor.description\")})}catch(e){La(this,{title:this.hass.localize(\"ui.componencts.addon-picker.error.fetch_addons.title\"),text:this.hass.localize(\"ui.componencts.addon-picker.error.fetch_addons.description\")})}}},{kind:\"get\",key:\"_value\",value:function(){return this.value||\"\"}},{kind:\"method\",key:\"_addonChanged\",value:function(e){e.stopPropagation();const t=e.detail.value;t!==this._value&&this._setValue(t)}},{kind:\"method\",key:\"_setValue\",value:function(t){this.value=t,setTimeout((()=>{e(this,\"value-changed\",{value:t}),e(this,\"change\")}),0)}}]}}),m),v([w(\"ha-selector-addon\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"selector\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!0},{kind:\"method\",key:\"render\",value:function(){return k`<ha-addon-picker\n      .hass=${this.hass}\n      .value=${this.value}\n      .label=${this.label}\n      .helper=${this.helper}\n      .disabled=${this.disabled}\n      .required=${this.required}\n      allow-custom-entity\n    ></ha-addon-picker>`}},{kind:\"field\",static:!0,key:\"styles\",value:()=>i`\n    ha-addon-picker {\n      width: 100%;\n    }\n  `}]}}),m);const Hd=async(e,t,i,a,n,...o)=>{const s=n,r=s[e],l=r=>a&&a(n,r.result)!==r.cacheKey?(s[e]=void 0,Hd(e,t,i,a,n,...o)):r.result;if(r)return r instanceof Promise?r.then(l):l(r);const d=i(n,...o);return s[e]=d,d.then((i=>{s[e]={result:i,cacheKey:null==a?void 0:a(n,i)},setTimeout((()=>{s[e]=void 0}),t)}),(()=>{s[e]=void 0})),d},Gd=(e,t)=>e.callWS({type:\"entity/source\",entity_id:t}),Wd=(e,t)=>t?Gd(e,t):Hd(\"_entitySources\",3e4,Gd,(e=>Object.keys(e.states).length),e),Kd=e=>k`<mwc-list-item\n  class=${Xi({\"add-new\":\"add_new\"===e.area_id})}\n>\n  ${e.name}\n</mwc-list-item>`;v([w(\"ha-area-picker\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f()],key:\"placeholder\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean,attribute:\"no-add\"})],key:\"noAdd\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"include-domains\"})],key:\"includeDomains\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"exclude-domains\"})],key:\"excludeDomains\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"include-device-classes\"})],key:\"includeDeviceClasses\",value:void 0},{kind:\"field\",decorators:[f()],key:\"deviceFilter\",value:void 0},{kind:\"field\",decorators:[f()],key:\"entityFilter\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_areas\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_devices\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_entities\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_opened\",value:void 0},{kind:\"field\",decorators:[g(\"ha-combo-box\",!0)],key:\"comboBox\",value:void 0},{kind:\"field\",key:\"_filter\",value:void 0},{kind:\"field\",key:\"_init\",value:()=>!1},{kind:\"method\",key:\"hassSubscribe\",value:function(){return[Dl(this.hass.connection,(e=>{this._areas=e})),jl(this.hass.connection,(e=>{this._devices=e})),Ul(this.hass.connection,(e=>{this._entities=e}))]}},{kind:\"method\",key:\"open\",value:function(){this.updateComplete.then((()=>{var e;null===(e=this.comboBox)||void 0===e||e.open()}))}},{kind:\"method\",key:\"focus\",value:function(){this.updateComplete.then((()=>{var e;null===(e=this.comboBox)||void 0===e||e.focus()}))}},{kind:\"field\",key:\"_getAreas\",value(){return Ri(((e,t,i,a,n,o,s,r,l)=>{if(!e.length)return[{area_id:\"no_areas\",name:this.hass.localize(\"ui.components.area-picker.no_areas\"),picture:null}];const d={};let c,u;if(a||n||o){for(const e of i)e.device_id&&(e.device_id in d||(d[e.device_id]=[]),d[e.device_id].push(e));c=t,u=i.filter((e=>e.area_id))}else s&&(c=t),r&&(u=i.filter((e=>e.area_id)));a&&(c=c.filter((e=>{const t=d[e.id];return!(!t||!t.length)&&d[e.id].some((e=>a.includes(zn(e.entity_id))))})),u=u.filter((e=>a.includes(zn(e.entity_id))))),n&&(c=c.filter((e=>{const t=d[e.id];return!t||!t.length||i.every((e=>!n.includes(zn(e.entity_id))))})),u=u.filter((e=>!n.includes(zn(e.entity_id))))),o&&(c=c.filter((e=>{const t=d[e.id];return!(!t||!t.length)&&d[e.id].some((e=>{const t=this.hass.states[e.entity_id];return!!t&&(t.attributes.device_class&&o.includes(t.attributes.device_class))}))})),u=u.filter((e=>{const t=this.hass.states[e.entity_id];return t.attributes.device_class&&o.includes(t.attributes.device_class)}))),s&&(c=c.filter((e=>s(e)))),r&&(u=u.filter((e=>r(e))));let h,p=e;var v;(c&&(h=c.filter((e=>e.area_id)).map((e=>e.area_id))),u)&&(h=(null!==(v=h)&&void 0!==v?v:[]).concat(u.filter((e=>e.area_id)).map((e=>e.area_id))));return h&&(p=e.filter((e=>h.includes(e.area_id)))),p.length||(p=[{area_id:\"no_areas\",name:this.hass.localize(\"ui.components.area-picker.no_match\"),picture:null}]),l?p:[...p,{area_id:\"add_new\",name:this.hass.localize(\"ui.components.area-picker.add_new\"),picture:null}]}))}},{kind:\"method\",key:\"updated\",value:function(e){(!this._init&&this._devices&&this._areas&&this._entities||e.has(\"_opened\")&&this._opened)&&(this._init=!0,this.comboBox.items=this._getAreas(this._areas,this._devices,this._entities,this.includeDomains,this.excludeDomains,this.includeDeviceClasses,this.deviceFilter,this.entityFilter,this.noAdd))}},{kind:\"method\",key:\"render\",value:function(){var e;return this._devices&&this._areas&&this._entities?k`\n      <ha-combo-box\n        .hass=${this.hass}\n        .helper=${this.helper}\n        item-value-path=\"area_id\"\n        item-id-path=\"area_id\"\n        item-label-path=\"name\"\n        .value=${this.value}\n        .disabled=${this.disabled}\n        .required=${this.required}\n        .label=${void 0===this.label&&this.hass?this.hass.localize(\"ui.components.area-picker.area\"):this.label}\n        .placeholder=${this.placeholder?null===(e=this._area(this.placeholder))||void 0===e?void 0:e.name:void 0}\n        .renderer=${Kd}\n        @filter-changed=${this._filterChanged}\n        @opened-changed=${this._openedChanged}\n        @value-changed=${this._areaChanged}\n      >\n      </ha-combo-box>\n    `:k``}},{kind:\"field\",key:\"_area\",value(){return Ri((e=>{var t;return null===(t=this._areas)||void 0===t?void 0:t.find((t=>t.area_id===e))}))}},{kind:\"method\",key:\"_filterChanged\",value:function(e){var t,i;(this._filter=e.detail.value,this._filter)?this.noAdd||0!==(null===(t=this.comboBox._comboBox.filteredItems)||void 0===t?void 0:t.length)?this.comboBox.filteredItems=null===(i=this.comboBox.items)||void 0===i?void 0:i.filter((e=>e.name.toLowerCase().includes(this._filter.toLowerCase()))):this.comboBox.filteredItems=[{area_id:\"add_new_suggestion\",name:this.hass.localize(\"ui.components.area-picker.add_new_sugestion\",{name:this._filter}),picture:null}]:this.comboBox.filteredItems=this.comboBox.items}},{kind:\"get\",key:\"_value\",value:function(){return this.value||\"\"}},{kind:\"method\",key:\"_openedChanged\",value:function(e){this._opened=e.detail.value}},{kind:\"method\",key:\"_areaChanged\",value:function(e){e.stopPropagation();let t=e.detail.value;\"no_areas\"===t&&(t=\"\"),[\"add_new_suggestion\",\"add_new\"].includes(t)?(e.target.value=this._value,Ta(this,{title:this.hass.localize(\"ui.components.area-picker.add_dialog.title\"),text:this.hass.localize(\"ui.components.area-picker.add_dialog.text\"),confirmText:this.hass.localize(\"ui.components.area-picker.add_dialog.add\"),inputLabel:this.hass.localize(\"ui.components.area-picker.add_dialog.name\"),defaultValue:\"add_new_suggestion\"===t?this._filter:void 0,confirm:async e=>{var t,i;if(e)try{const a=await(t=this.hass,i={name:e},t.callWS({type:\"config/area_registry/create\",...i}));this._areas=[...this._areas,a],this.comboBox.filteredItems=this._getAreas(this._areas,this._devices,this._entities,this.includeDomains,this.excludeDomains,this.includeDeviceClasses,this.deviceFilter,this.entityFilter,this.noAdd),await this.updateComplete,await this.comboBox.updateComplete,this._setValue(a.area_id)}catch(e){La(this,{title:this.hass.localize(\"ui.components.area-picker.add_dialog.failed_create_area\"),text:e.message})}}})):t!==this._value&&this._setValue(t)}},{kind:\"method\",key:\"_setValue\",value:function(t){this.value=t,setTimeout((()=>{e(this,\"value-changed\",{value:t}),e(this,\"change\")}),0)}}]}}),Hl(m)),v([w(\"ha-areas-picker\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f()],key:\"placeholder\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean,attribute:\"no-add\"})],key:\"noAdd\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"include-domains\"})],key:\"includeDomains\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"exclude-domains\"})],key:\"excludeDomains\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"include-device-classes\"})],key:\"includeDeviceClasses\",value:void 0},{kind:\"field\",decorators:[f()],key:\"deviceFilter\",value:void 0},{kind:\"field\",decorators:[f()],key:\"entityFilter\",value:void 0},{kind:\"field\",decorators:[f({attribute:\"picked-area-label\"})],key:\"pickedAreaLabel\",value:void 0},{kind:\"field\",decorators:[f({attribute:\"pick-area-label\"})],key:\"pickAreaLabel\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:void 0},{kind:\"method\",key:\"render\",value:function(){if(!this.hass)return k``;const e=this._currentAreas;return k`\n      ${e.map((e=>k`\n          <div>\n            <ha-area-picker\n              .curValue=${e}\n              .noAdd=${this.noAdd}\n              .hass=${this.hass}\n              .value=${e}\n              .label=${this.pickedAreaLabel}\n              .includeDomains=${this.includeDomains}\n              .excludeDomains=${this.excludeDomains}\n              .includeDeviceClasses=${this.includeDeviceClasses}\n              .deviceFilter=${this.deviceFilter}\n              .entityFilter=${this.entityFilter}\n              .disabled=${this.disabled}\n              @value-changed=${this._areaChanged}\n            ></ha-area-picker>\n          </div>\n        `))}\n      <div>\n        <ha-area-picker\n          .noAdd=${this.noAdd}\n          .hass=${this.hass}\n          .label=${this.pickAreaLabel}\n          .helper=${this.helper}\n          .includeDomains=${this.includeDomains}\n          .excludeDomains=${this.excludeDomains}\n          .includeDeviceClasses=${this.includeDeviceClasses}\n          .deviceFilter=${this.deviceFilter}\n          .entityFilter=${this.entityFilter}\n          .disabled=${this.disabled}\n          .placeholder=${this.placeholder}\n          .required=${this.required&&!e.length}\n          @value-changed=${this._addArea}\n        ></ha-area-picker>\n      </div>\n    `}},{kind:\"get\",key:\"_currentAreas\",value:function(){return this.value||[]}},{kind:\"method\",key:\"_updateAreas\",value:async function(t){this.value=t,e(this,\"value-changed\",{value:t})}},{kind:\"method\",key:\"_areaChanged\",value:function(e){e.stopPropagation();const t=e.currentTarget.curValue,i=e.detail.value;if(i===t)return;const a=this._currentAreas;i&&!a.includes(i)?this._updateAreas(a.map((e=>e===t?i:e))):this._updateAreas(a.filter((e=>e!==t)))}},{kind:\"method\",key:\"_addArea\",value:function(e){e.stopPropagation();const t=e.detail.value;if(!t)return;e.currentTarget.value=\"\";const i=this._currentAreas;i.includes(t)||this._updateAreas([...i,t])}},{kind:\"field\",static:!0,key:\"styles\",value:()=>i`\n    div {\n      margin-top: 8px;\n    }\n  `}]}}),Hl(m)),v([w(\"ha-selector-area\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"selector\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_entitySources\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_entities\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!0},{kind:\"method\",key:\"hassSubscribe\",value:function(){return[Ul(this.hass.connection,(e=>{this._entities=e.filter((e=>null!==e.device_id))}))]}},{kind:\"method\",key:\"updated\",value:function(e){var t,i;e.has(\"selector\")&&(null!==(t=this.selector.area.device)&&void 0!==t&&t.integration||null!==(i=this.selector.area.entity)&&void 0!==i&&i.integration)&&!this._entitySources&&Wd(this.hass).then((e=>{this._entitySources=e}))}},{kind:\"method\",key:\"render\",value:function(){var e,t,i,a,n,o;return(null!==(e=this.selector.area.device)&&void 0!==e&&e.integration||null!==(t=this.selector.area.entity)&&void 0!==t&&t.integration)&&!this._entitySources?k``:this.selector.area.multiple?k`\n      <ha-areas-picker\n        .hass=${this.hass}\n        .value=${this.value}\n        .helper=${this.helper}\n        .pickAreaLabel=${this.label}\n        no-add\n        .deviceFilter=${this._filterDevices}\n        .entityFilter=${this._filterEntities}\n        .includeDeviceClasses=${null!==(i=this.selector.area.entity)&&void 0!==i&&i.device_class?[this.selector.area.entity.device_class]:void 0}\n        .includeDomains=${null!==(a=this.selector.area.entity)&&void 0!==a&&a.domain?[this.selector.area.entity.domain]:void 0}\n        .disabled=${this.disabled}\n        .required=${this.required}\n      ></ha-areas-picker>\n    `:k`\n        <ha-area-picker\n          .hass=${this.hass}\n          .value=${this.value}\n          .label=${this.label}\n          .helper=${this.helper}\n          no-add\n          .deviceFilter=${this._filterDevices}\n          .entityFilter=${this._filterEntities}\n          .includeDeviceClasses=${null!==(n=this.selector.area.entity)&&void 0!==n&&n.device_class?[this.selector.area.entity.device_class]:void 0}\n          .includeDomains=${null!==(o=this.selector.area.entity)&&void 0!==o&&o.domain?[this.selector.area.entity.domain]:void 0}\n          .disabled=${this.disabled}\n          .required=${this.required}\n        ></ha-area-picker>\n      `}},{kind:\"field\",key:\"_filterEntities\",value(){return e=>{var t,i,a;const n=null===(t=this.selector.area.entity)||void 0===t?void 0:t.integration;return!n||(null===(i=this._entitySources)||void 0===i||null===(a=i[e.entity_id])||void 0===a?void 0:a.domain)===n}}},{kind:\"field\",key:\"_filterDevices\",value(){return e=>{if(!this.selector.area.device)return!0;const{manufacturer:t,model:i,integration:a}=this.selector.area.device;if(t&&e.manufacturer!==t)return!1;if(i&&e.model!==i)return!1;if(a&&this._entitySources&&this._entities){var n;const t=this._deviceIntegrations(this._entitySources,this._entities);if(null==t||null===(n=t[e.id])||void 0===n||!n.includes(a))return!1}return!0}}},{kind:\"field\",key:\"_deviceIntegrations\",value:()=>Ri(((e,t)=>{const i={};for(const a of t){const t=e[a.entity_id];null!=t&&t.domain&&(i[a.device_id]||(i[a.device_id]=[]),i[a.device_id].push(t.domain))}return i}))}]}}),Hl(m));var Yd=/-u(?:-[0-9a-z]{2,8})+/gi;function Zd(e,t,i){if(void 0===i&&(i=Error),!e)throw new i(t)}function Qd(e,t){for(var i=t;;){if(e.has(i))return i;var a=i.lastIndexOf(\"-\");if(!~a)return;a>=2&&\"-\"===i[a-2]&&(a-=2),i=i.slice(0,a)}}function Xd(e,t){Zd(2===t.length,\"key must have 2 elements\");var i=e.length,a=\"-\".concat(t,\"-\"),n=e.indexOf(a);if(-1!==n){for(var o=n+4,s=o,r=o,l=!1;!l;){var d=e.indexOf(\"-\",r);2===(-1===d?i-r:d-r)?l=!0:-1===d?(s=i,l=!0):(s=d,r=d+1)}return e.slice(o,s)}if(a=\"-\".concat(t),-1!==(n=e.indexOf(a))&&n+3===i)return\"\"}function Jd(e,t,i,a,n,o){var s;s=\"lookup\"===i.localeMatcher?function(e,t,i){for(var a={locale:\"\"},n=0,o=t;n<o.length;n++){var s=o[n],r=s.replace(Yd,\"\"),l=Qd(e,r);if(l)return a.locale=l,s!==r&&(a.extension=s.slice(r.length+1,s.length)),a}return a.locale=i(),a}(e,t,o):function(e,t,i){var a,n={},o={},s={},r=new Set;e.forEach((function(e){var t=new Intl.Locale(e).minimize().toString(),i=Intl.getCanonicalLocales(e)[0]||e;n[t]=e,o[e]=e,s[i]=e,r.add(t),r.add(e),r.add(i)}));for(var l=0,d=t;l<d.length;l++){var c=d[l];if(a)break;var u=c.replace(Yd,\"\");if(e.has(u)){a=u;break}if(r.has(u)){a=u;break}var h=new Intl.Locale(u),p=h.maximize().toString(),v=h.minimize().toString();if(r.has(v)){a=v;break}a=Qd(r,p)}return a?{locale:o[a]||s[a]||n[a]||a}:{locale:i()}}(e,t,o);for(var r=s.locale,l={locale:\"\",dataLocale:r},d=\"-u\",c=0,u=a;c<u.length;c++){var h=u[c];Zd(r in n,\"Missing locale data for \".concat(r));var p=n[r];Zd(\"object\"==typeof p&&null!==p,\"locale data \".concat(h,\" must be an object\"));var v=p[h];Zd(Array.isArray(v),\"keyLocaleData for \".concat(h,\" must be an array\"));var m=v[0];Zd(\"string\"==typeof m||null===m,\"value must be string or null but got \".concat(typeof m,\" in key \").concat(h));var f=\"\";if(s.extension){var g=Xd(s.extension,h);void 0!==g&&(\"\"!==g?~v.indexOf(g)&&(m=g,f=\"-\".concat(h,\"-\").concat(m)):~g.indexOf(\"true\")&&(m=\"true\",f=\"-\".concat(h)))}if(h in i){var _=i[h];Zd(\"string\"==typeof _||null==_,\"optionsValue must be String, Undefined or Null\"),~v.indexOf(_)&&_!==m&&(m=_,f=\"\")}l[h]=m,d+=f}if(d.length>2){var y=r.indexOf(\"-x-\");if(-1===y)r+=d;else{var k=r.slice(0,y),b=r.slice(y,r.length);r=k+d+b}r=Intl.getCanonicalLocales(r)[0]}return l.locale=r,l}function ec(e,t,i,a){var n=t.reduce((function(e,t){return e.add(t),e}),new Set);return Jd(n,function(e){return Intl.getCanonicalLocales(e)}(e),{localeMatcher:(null==a?void 0:a.algorithm)||\"best fit\"},[],{},(function(){return i})).locale}var tc=Object.freeze({__proto__:null,match:ec,LookupSupportedLocales:function(e,t){for(var i=[],a=0,n=t;a<n.length;a++){var o=Qd(e,n[a].replace(Yd,\"\"));o&&i.push(o)}return i},ResolveLocale:Jd}),ic=[\"af\",\"ak\",\"am\",\"an\",\"ar\",\"ars\",\"as\",\"asa\",\"ast\",\"az\",\"bal\",\"be\",\"bem\",\"bez\",\"bg\",\"bho\",\"bm\",\"bn\",\"bo\",\"br\",\"brx\",\"bs\",\"ca\",\"ce\",\"ceb\",\"cgg\",\"chr\",\"ckb\",\"cs\",\"cy\",\"da\",\"de\",\"doi\",\"dsb\",\"dv\",\"dz\",\"ee\",\"el\",\"en\",\"eo\",\"es\",\"et\",\"eu\",\"fa\",\"ff\",\"fi\",\"fil\",\"fo\",\"fr\",\"fur\",\"fy\",\"ga\",\"gd\",\"gl\",\"gsw\",\"gu\",\"guw\",\"gv\",\"ha\",\"haw\",\"he\",\"hi\",\"hnj\",\"hr\",\"hsb\",\"hu\",\"hy\",\"ia\",\"id\",\"ig\",\"ii\",\"io\",\"is\",\"it\",\"iu\",\"ja\",\"jbo\",\"jgo\",\"jmc\",\"jv\",\"jw\",\"ka\",\"kab\",\"kaj\",\"kcg\",\"kde\",\"kea\",\"kk\",\"kkj\",\"kl\",\"km\",\"kn\",\"ko\",\"ks\",\"ksb\",\"ksh\",\"ku\",\"kw\",\"ky\",\"lag\",\"lb\",\"lg\",\"lij\",\"lkt\",\"ln\",\"lo\",\"lt\",\"lv\",\"mas\",\"mg\",\"mgo\",\"mk\",\"ml\",\"mn\",\"mo\",\"mr\",\"ms\",\"mt\",\"my\",\"nah\",\"naq\",\"nb\",\"nd\",\"ne\",\"nl\",\"nn\",\"nnh\",\"no\",\"nqo\",\"nr\",\"nso\",\"ny\",\"nyn\",\"om\",\"or\",\"os\",\"osa\",\"pa\",\"pap\",\"pcm\",\"pl\",\"prg\",\"ps\",\"pt-PT\",\"pt\",\"rm\",\"ro\",\"rof\",\"ru\",\"rwk\",\"sah\",\"saq\",\"sat\",\"sc\",\"scn\",\"sd\",\"sdh\",\"se\",\"seh\",\"ses\",\"sg\",\"sh\",\"shi\",\"si\",\"sk\",\"sl\",\"sma\",\"smi\",\"smj\",\"smn\",\"sms\",\"sn\",\"so\",\"sq\",\"sr\",\"ss\",\"ssy\",\"st\",\"su\",\"sv\",\"sw\",\"syr\",\"ta\",\"te\",\"teo\",\"th\",\"ti\",\"tig\",\"tk\",\"tl\",\"tn\",\"to\",\"tpi\",\"tr\",\"ts\",\"tzm\",\"ug\",\"uk\",\"und\",\"ur\",\"uz\",\"ve\",\"vi\",\"vo\",\"vun\",\"wa\",\"wae\",\"wo\",\"xh\",\"xog\",\"yi\",\"yo\",\"yue\",\"zh\",\"zu\"];var ac=Va((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.CanonicalizeLocaleList=void 0,t.CanonicalizeLocaleList=function(e){return Intl.getCanonicalLocales(e)}}));ja(ac),ac.CanonicalizeLocaleList;var nc=Va((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.invariant=t.UNICODE_EXTENSION_SEQUENCE_REGEX=void 0,t.UNICODE_EXTENSION_SEQUENCE_REGEX=/-u(?:-[0-9a-z]{2,8})+/gi,t.invariant=function(e,t,i){if(void 0===i&&(i=Error),!e)throw new i(t)}}));ja(nc),nc.invariant,nc.UNICODE_EXTENSION_SEQUENCE_REGEX;var oc=Va((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.BestAvailableLocale=void 0,t.BestAvailableLocale=function(e,t){for(var i=t;;){if(e.has(i))return i;var a=i.lastIndexOf(\"-\");if(!~a)return;a>=2&&\"-\"===i[a-2]&&(a-=2),i=i.slice(0,a)}}}));ja(oc),oc.BestAvailableLocale;var sc=Va((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.LookupMatcher=void 0,t.LookupMatcher=function(e,t,i){for(var a={locale:\"\"},n=0,o=t;n<o.length;n++){var s=o[n],r=s.replace(nc.UNICODE_EXTENSION_SEQUENCE_REGEX,\"\"),l=(0,oc.BestAvailableLocale)(e,r);if(l)return a.locale=l,s!==r&&(a.extension=s.slice(r.length+1,s.length)),a}return a.locale=i(),a}}));ja(sc),sc.LookupMatcher;var rc=Va((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.BestFitMatcher=void 0,t.BestFitMatcher=function(e,t,i){var a,n={},o={},s={},r=new Set;e.forEach((function(e){var t=new Intl.Locale(e).minimize().toString(),i=Intl.getCanonicalLocales(e)[0]||e;n[t]=e,o[e]=e,s[i]=e,r.add(t),r.add(e),r.add(i)}));for(var l=0,d=t;l<d.length;l++){var c=d[l];if(a)break;var u=c.replace(nc.UNICODE_EXTENSION_SEQUENCE_REGEX,\"\");if(e.has(u)){a=u;break}if(r.has(u)){a=u;break}var h=new Intl.Locale(u),p=h.maximize().toString(),v=h.minimize().toString();if(r.has(v)){a=v;break}a=(0,oc.BestAvailableLocale)(r,p)}return a?{locale:o[a]||s[a]||n[a]||a}:{locale:i()}}}));ja(rc),rc.BestFitMatcher;var lc=Va((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.UnicodeExtensionValue=void 0,t.UnicodeExtensionValue=function(e,t){(0,nc.invariant)(2===t.length,\"key must have 2 elements\");var i=e.length,a=\"-\".concat(t,\"-\"),n=e.indexOf(a);if(-1!==n){for(var o=n+4,s=o,r=o,l=!1;!l;){var d=e.indexOf(\"-\",r);2===(-1===d?i-r:d-r)?l=!0:-1===d?(s=i,l=!0):(s=d,r=d+1)}return e.slice(o,s)}if(a=\"-\".concat(t),-1!==(n=e.indexOf(a))&&n+3===i)return\"\"}}));ja(lc),lc.UnicodeExtensionValue;var dc=Va((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.ResolveLocale=void 0,t.ResolveLocale=function(e,t,i,a,n,o){for(var s,r=(s=\"lookup\"===i.localeMatcher?(0,sc.LookupMatcher)(e,t,o):(0,rc.BestFitMatcher)(e,t,o)).locale,l={locale:\"\",dataLocale:r},d=\"-u\",c=0,u=a;c<u.length;c++){var h=u[c];(0,nc.invariant)(r in n,\"Missing locale data for \".concat(r));var p=n[r];(0,nc.invariant)(\"object\"==typeof p&&null!==p,\"locale data \".concat(h,\" must be an object\"));var v=p[h];(0,nc.invariant)(Array.isArray(v),\"keyLocaleData for \".concat(h,\" must be an array\"));var m=v[0];(0,nc.invariant)(\"string\"==typeof m||null===m,\"value must be string or null but got \".concat(typeof m,\" in key \").concat(h));var f=\"\";if(s.extension){var g=(0,lc.UnicodeExtensionValue)(s.extension,h);void 0!==g&&(\"\"!==g?~v.indexOf(g)&&(m=g,f=\"-\".concat(h,\"-\").concat(m)):~g.indexOf(\"true\")&&(m=\"true\",f=\"-\".concat(h)))}if(h in i){var _=i[h];(0,nc.invariant)(\"string\"==typeof _||null==_,\"optionsValue must be String, Undefined or Null\"),~v.indexOf(_)&&_!==m&&(m=_,f=\"\")}l[h]=m,d+=f}if(d.length>2){var y=r.indexOf(\"-x-\");if(-1===y)r+=d;else{var k=r.slice(0,y),b=r.slice(y,r.length);r=k+d+b}r=Intl.getCanonicalLocales(r)[0]}return l.locale=r,l}}));ja(dc),dc.ResolveLocale;var cc=Va((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.LookupSupportedLocales=void 0,t.LookupSupportedLocales=function(e,t){for(var i=[],a=0,n=t;a<n.length;a++){var o=n[a].replace(nc.UNICODE_EXTENSION_SEQUENCE_REGEX,\"\"),s=(0,oc.BestAvailableLocale)(e,o);s&&i.push(s)}return i}}));ja(cc),cc.LookupSupportedLocales;var uc=Va((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.ResolveLocale=t.LookupSupportedLocales=t.match=void 0,t.match=function(e,t,i,a){var n=t.reduce((function(e,t){return e.add(t),e}),new Set);return(0,dc.ResolveLocale)(n,(0,ac.CanonicalizeLocaleList)(e),{localeMatcher:(null==a?void 0:a.algorithm)||\"best fit\"},[],{},(function(){return i})).locale},Object.defineProperty(t,\"LookupSupportedLocales\",{enumerable:!0,get:function(){return cc.LookupSupportedLocales}});var i=dc;Object.defineProperty(t,\"ResolveLocale\",{enumerable:!0,get:function(){return i.ResolveLocale}})}));ja(uc);var hc=uc.ResolveLocale,pc=uc.LookupSupportedLocales,vc=uc.match,mc=[\"af-NA\",\"af\",\"agq\",\"ak\",\"am\",\"ar-AE\",\"ar-BH\",\"ar-DJ\",\"ar-DZ\",\"ar-EG\",\"ar-EH\",\"ar-ER\",\"ar-IL\",\"ar-IQ\",\"ar-JO\",\"ar-KM\",\"ar-KW\",\"ar-LB\",\"ar-LY\",\"ar-MA\",\"ar-MR\",\"ar-OM\",\"ar-PS\",\"ar-QA\",\"ar-SA\",\"ar-SD\",\"ar-SO\",\"ar-SS\",\"ar-SY\",\"ar-TD\",\"ar-TN\",\"ar-YE\",\"ar\",\"as\",\"asa\",\"ast\",\"az-Cyrl\",\"az-Latn\",\"az\",\"bas\",\"be-tarask\",\"be\",\"bem\",\"bez\",\"bg\",\"bm\",\"bn-IN\",\"bn\",\"bo-IN\",\"bo\",\"br\",\"brx\",\"bs-Cyrl\",\"bs-Latn\",\"bs\",\"ca-AD\",\"ca-ES-valencia\",\"ca-FR\",\"ca-IT\",\"ca\",\"ccp-IN\",\"ccp\",\"ce\",\"ceb\",\"cgg\",\"chr\",\"ckb-IR\",\"ckb\",\"cs\",\"cy\",\"da-GL\",\"da\",\"dav\",\"de-AT\",\"de-BE\",\"de-CH\",\"de-IT\",\"de-LI\",\"de-LU\",\"de\",\"dje\",\"doi\",\"dsb\",\"dua\",\"dyo\",\"dz\",\"ebu\",\"ee-TG\",\"ee\",\"el-CY\",\"el\",\"en-001\",\"en-150\",\"en-AE\",\"en-AG\",\"en-AI\",\"en-AS\",\"en-AT\",\"en-AU\",\"en-BB\",\"en-BE\",\"en-BI\",\"en-BM\",\"en-BS\",\"en-BW\",\"en-BZ\",\"en-CA\",\"en-CC\",\"en-CH\",\"en-CK\",\"en-CM\",\"en-CX\",\"en-CY\",\"en-DE\",\"en-DG\",\"en-DK\",\"en-DM\",\"en-ER\",\"en-FI\",\"en-FJ\",\"en-FK\",\"en-FM\",\"en-GB\",\"en-GD\",\"en-GG\",\"en-GH\",\"en-GI\",\"en-GM\",\"en-GU\",\"en-GY\",\"en-HK\",\"en-IE\",\"en-IL\",\"en-IM\",\"en-IN\",\"en-IO\",\"en-JE\",\"en-JM\",\"en-KE\",\"en-KI\",\"en-KN\",\"en-KY\",\"en-LC\",\"en-LR\",\"en-LS\",\"en-MG\",\"en-MH\",\"en-MO\",\"en-MP\",\"en-MS\",\"en-MT\",\"en-MU\",\"en-MW\",\"en-MY\",\"en-NA\",\"en-NF\",\"en-NG\",\"en-NL\",\"en-NR\",\"en-NU\",\"en-NZ\",\"en-PG\",\"en-PH\",\"en-PK\",\"en-PN\",\"en-PR\",\"en-PW\",\"en-RW\",\"en-SB\",\"en-SC\",\"en-SD\",\"en-SE\",\"en-SG\",\"en-SH\",\"en-SI\",\"en-SL\",\"en-SS\",\"en-SX\",\"en-SZ\",\"en-TC\",\"en-TK\",\"en-TO\",\"en-TT\",\"en-TV\",\"en-TZ\",\"en-UG\",\"en-UM\",\"en-VC\",\"en-VG\",\"en-VI\",\"en-VU\",\"en-WS\",\"en-ZA\",\"en-ZM\",\"en-ZW\",\"en\",\"eo\",\"es-419\",\"es-AR\",\"es-BO\",\"es-BR\",\"es-BZ\",\"es-CL\",\"es-CO\",\"es-CR\",\"es-CU\",\"es-DO\",\"es-EA\",\"es-EC\",\"es-GQ\",\"es-GT\",\"es-HN\",\"es-IC\",\"es-MX\",\"es-NI\",\"es-PA\",\"es-PE\",\"es-PH\",\"es-PR\",\"es-PY\",\"es-SV\",\"es-US\",\"es-UY\",\"es-VE\",\"es\",\"et\",\"eu\",\"ewo\",\"fa-AF\",\"fa\",\"ff-Adlm-BF\",\"ff-Adlm-CM\",\"ff-Adlm-GH\",\"ff-Adlm-GM\",\"ff-Adlm-GW\",\"ff-Adlm-LR\",\"ff-Adlm-MR\",\"ff-Adlm-NE\",\"ff-Adlm-NG\",\"ff-Adlm-SL\",\"ff-Adlm-SN\",\"ff-Adlm\",\"ff-Latn-BF\",\"ff-Latn-CM\",\"ff-Latn-GH\",\"ff-Latn-GM\",\"ff-Latn-GN\",\"ff-Latn-GW\",\"ff-Latn-LR\",\"ff-Latn-MR\",\"ff-Latn-NE\",\"ff-Latn-NG\",\"ff-Latn-SL\",\"ff-Latn\",\"ff\",\"fi\",\"fil\",\"fo-DK\",\"fo\",\"fr-BE\",\"fr-BF\",\"fr-BI\",\"fr-BJ\",\"fr-BL\",\"fr-CA\",\"fr-CD\",\"fr-CF\",\"fr-CG\",\"fr-CH\",\"fr-CI\",\"fr-CM\",\"fr-DJ\",\"fr-DZ\",\"fr-GA\",\"fr-GF\",\"fr-GN\",\"fr-GP\",\"fr-GQ\",\"fr-HT\",\"fr-KM\",\"fr-LU\",\"fr-MA\",\"fr-MC\",\"fr-MF\",\"fr-MG\",\"fr-ML\",\"fr-MQ\",\"fr-MR\",\"fr-MU\",\"fr-NC\",\"fr-NE\",\"fr-PF\",\"fr-PM\",\"fr-RE\",\"fr-RW\",\"fr-SC\",\"fr-SN\",\"fr-SY\",\"fr-TD\",\"fr-TG\",\"fr-TN\",\"fr-VU\",\"fr-WF\",\"fr-YT\",\"fr\",\"fur\",\"fy\",\"ga-GB\",\"ga\",\"gd\",\"gl\",\"gsw-FR\",\"gsw-LI\",\"gsw\",\"gu\",\"guz\",\"gv\",\"ha-GH\",\"ha-NE\",\"ha\",\"haw\",\"he\",\"hi\",\"hr-BA\",\"hr\",\"hsb\",\"hu\",\"hy\",\"ia\",\"id\",\"ig\",\"ii\",\"is\",\"it-CH\",\"it-SM\",\"it-VA\",\"it\",\"ja\",\"jgo\",\"jmc\",\"jv\",\"ka\",\"kab\",\"kam\",\"kde\",\"kea\",\"kgp\",\"khq\",\"ki\",\"kk\",\"kkj\",\"kl\",\"kln\",\"km\",\"kn\",\"ko-KP\",\"ko\",\"kok\",\"ks-Arab\",\"ks\",\"ksb\",\"ksf\",\"ksh\",\"ku\",\"kw\",\"ky\",\"lag\",\"lb\",\"lg\",\"lkt\",\"ln-AO\",\"ln-CF\",\"ln-CG\",\"ln\",\"lo\",\"lrc-IQ\",\"lrc\",\"lt\",\"lu\",\"luo\",\"luy\",\"lv\",\"mai\",\"mas-TZ\",\"mas\",\"mer\",\"mfe\",\"mg\",\"mgh\",\"mgo\",\"mi\",\"mk\",\"ml\",\"mn\",\"mni-Beng\",\"mni\",\"mr\",\"ms-BN\",\"ms-ID\",\"ms-SG\",\"ms\",\"mt\",\"mua\",\"my\",\"mzn\",\"naq\",\"nb-SJ\",\"nb\",\"nd\",\"nds-NL\",\"nds\",\"ne-IN\",\"ne\",\"nl-AW\",\"nl-BE\",\"nl-BQ\",\"nl-CW\",\"nl-SR\",\"nl-SX\",\"nl\",\"nmg\",\"nn\",\"nnh\",\"no\",\"nus\",\"nyn\",\"om-KE\",\"om\",\"or\",\"os-RU\",\"os\",\"pa-Arab\",\"pa-Guru\",\"pa\",\"pcm\",\"pl\",\"ps-PK\",\"ps\",\"pt-AO\",\"pt-CH\",\"pt-CV\",\"pt-GQ\",\"pt-GW\",\"pt-LU\",\"pt-MO\",\"pt-MZ\",\"pt-PT\",\"pt-ST\",\"pt-TL\",\"pt\",\"qu-BO\",\"qu-EC\",\"qu\",\"rm\",\"rn\",\"ro-MD\",\"ro\",\"rof\",\"ru-BY\",\"ru-KG\",\"ru-KZ\",\"ru-MD\",\"ru-UA\",\"ru\",\"rw\",\"rwk\",\"sa\",\"sah\",\"saq\",\"sat-Olck\",\"sat\",\"sbp\",\"sc\",\"sd-Arab\",\"sd-Deva\",\"sd\",\"se-FI\",\"se-SE\",\"se\",\"seh\",\"ses\",\"sg\",\"shi-Latn\",\"shi-Tfng\",\"shi\",\"si\",\"sk\",\"sl\",\"smn\",\"sn\",\"so-DJ\",\"so-ET\",\"so-KE\",\"so\",\"sq-MK\",\"sq-XK\",\"sq\",\"sr-Cyrl-BA\",\"sr-Cyrl-ME\",\"sr-Cyrl-XK\",\"sr-Cyrl\",\"sr-Latn-BA\",\"sr-Latn-ME\",\"sr-Latn-XK\",\"sr-Latn\",\"sr\",\"su-Latn\",\"su\",\"sv-AX\",\"sv-FI\",\"sv\",\"sw-CD\",\"sw-KE\",\"sw-UG\",\"sw\",\"ta-LK\",\"ta-MY\",\"ta-SG\",\"ta\",\"te\",\"teo-KE\",\"teo\",\"tg\",\"th\",\"ti-ER\",\"ti\",\"tk\",\"to\",\"tr-CY\",\"tr\",\"tt\",\"twq\",\"tzm\",\"ug\",\"uk\",\"und\",\"ur-IN\",\"ur\",\"uz-Arab\",\"uz-Cyrl\",\"uz-Latn\",\"uz\",\"vai-Latn\",\"vai-Vaii\",\"vai\",\"vi\",\"vun\",\"wae\",\"wo\",\"xh\",\"xog\",\"yav\",\"yi\",\"yo-BJ\",\"yo\",\"yrl-CO\",\"yrl-VE\",\"yrl\",\"yue-Hans\",\"yue-Hant\",\"yue\",\"zgh\",\"zh-Hans-HK\",\"zh-Hans-MO\",\"zh-Hans-SG\",\"zh-Hans\",\"zh-Hant-HK\",\"zh-Hant-MO\",\"zh-Hant\",\"zh\",\"zu\"];var fc=[\"af-NA\",\"af\",\"agq\",\"ak\",\"am\",\"ar-AE\",\"ar-BH\",\"ar-DJ\",\"ar-DZ\",\"ar-EG\",\"ar-EH\",\"ar-ER\",\"ar-IL\",\"ar-IQ\",\"ar-JO\",\"ar-KM\",\"ar-KW\",\"ar-LB\",\"ar-LY\",\"ar-MA\",\"ar-MR\",\"ar-OM\",\"ar-PS\",\"ar-QA\",\"ar-SA\",\"ar-SD\",\"ar-SO\",\"ar-SS\",\"ar-SY\",\"ar-TD\",\"ar-TN\",\"ar-YE\",\"ar\",\"as\",\"asa\",\"ast\",\"az-Cyrl\",\"az-Latn\",\"az\",\"bas\",\"be-tarask\",\"be\",\"bem\",\"bez\",\"bg\",\"bm\",\"bn-IN\",\"bn\",\"bo-IN\",\"bo\",\"br\",\"brx\",\"bs-Cyrl\",\"bs-Latn\",\"bs\",\"ca-AD\",\"ca-ES-valencia\",\"ca-FR\",\"ca-IT\",\"ca\",\"ccp-IN\",\"ccp\",\"ce\",\"ceb\",\"cgg\",\"chr\",\"ckb-IR\",\"ckb\",\"cs\",\"cy\",\"da-GL\",\"da\",\"dav\",\"de-AT\",\"de-BE\",\"de-CH\",\"de-IT\",\"de-LI\",\"de-LU\",\"de\",\"dje\",\"doi\",\"dsb\",\"dua\",\"dyo\",\"dz\",\"ebu\",\"ee-TG\",\"ee\",\"el-CY\",\"el\",\"en-001\",\"en-150\",\"en-AE\",\"en-AG\",\"en-AI\",\"en-AS\",\"en-AT\",\"en-AU\",\"en-BB\",\"en-BE\",\"en-BI\",\"en-BM\",\"en-BS\",\"en-BW\",\"en-BZ\",\"en-CA\",\"en-CC\",\"en-CH\",\"en-CK\",\"en-CM\",\"en-CX\",\"en-CY\",\"en-DE\",\"en-DG\",\"en-DK\",\"en-DM\",\"en-ER\",\"en-FI\",\"en-FJ\",\"en-FK\",\"en-FM\",\"en-GB\",\"en-GD\",\"en-GG\",\"en-GH\",\"en-GI\",\"en-GM\",\"en-GU\",\"en-GY\",\"en-HK\",\"en-IE\",\"en-IL\",\"en-IM\",\"en-IN\",\"en-IO\",\"en-JE\",\"en-JM\",\"en-KE\",\"en-KI\",\"en-KN\",\"en-KY\",\"en-LC\",\"en-LR\",\"en-LS\",\"en-MG\",\"en-MH\",\"en-MO\",\"en-MP\",\"en-MS\",\"en-MT\",\"en-MU\",\"en-MW\",\"en-MY\",\"en-NA\",\"en-NF\",\"en-NG\",\"en-NL\",\"en-NR\",\"en-NU\",\"en-NZ\",\"en-PG\",\"en-PH\",\"en-PK\",\"en-PN\",\"en-PR\",\"en-PW\",\"en-RW\",\"en-SB\",\"en-SC\",\"en-SD\",\"en-SE\",\"en-SG\",\"en-SH\",\"en-SI\",\"en-SL\",\"en-SS\",\"en-SX\",\"en-SZ\",\"en-TC\",\"en-TK\",\"en-TO\",\"en-TT\",\"en-TV\",\"en-TZ\",\"en-UG\",\"en-UM\",\"en-VC\",\"en-VG\",\"en-VI\",\"en-VU\",\"en-WS\",\"en-ZA\",\"en-ZM\",\"en-ZW\",\"en\",\"eo\",\"es-419\",\"es-AR\",\"es-BO\",\"es-BR\",\"es-BZ\",\"es-CL\",\"es-CO\",\"es-CR\",\"es-CU\",\"es-DO\",\"es-EA\",\"es-EC\",\"es-GQ\",\"es-GT\",\"es-HN\",\"es-IC\",\"es-MX\",\"es-NI\",\"es-PA\",\"es-PE\",\"es-PH\",\"es-PR\",\"es-PY\",\"es-SV\",\"es-US\",\"es-UY\",\"es-VE\",\"es\",\"et\",\"eu\",\"ewo\",\"fa-AF\",\"fa\",\"ff-Adlm-BF\",\"ff-Adlm-CM\",\"ff-Adlm-GH\",\"ff-Adlm-GM\",\"ff-Adlm-GW\",\"ff-Adlm-LR\",\"ff-Adlm-MR\",\"ff-Adlm-NE\",\"ff-Adlm-NG\",\"ff-Adlm-SL\",\"ff-Adlm-SN\",\"ff-Adlm\",\"ff-Latn-BF\",\"ff-Latn-CM\",\"ff-Latn-GH\",\"ff-Latn-GM\",\"ff-Latn-GN\",\"ff-Latn-GW\",\"ff-Latn-LR\",\"ff-Latn-MR\",\"ff-Latn-NE\",\"ff-Latn-NG\",\"ff-Latn-SL\",\"ff-Latn\",\"ff\",\"fi\",\"fil\",\"fo-DK\",\"fo\",\"fr-BE\",\"fr-BF\",\"fr-BI\",\"fr-BJ\",\"fr-BL\",\"fr-CA\",\"fr-CD\",\"fr-CF\",\"fr-CG\",\"fr-CH\",\"fr-CI\",\"fr-CM\",\"fr-DJ\",\"fr-DZ\",\"fr-GA\",\"fr-GF\",\"fr-GN\",\"fr-GP\",\"fr-GQ\",\"fr-HT\",\"fr-KM\",\"fr-LU\",\"fr-MA\",\"fr-MC\",\"fr-MF\",\"fr-MG\",\"fr-ML\",\"fr-MQ\",\"fr-MR\",\"fr-MU\",\"fr-NC\",\"fr-NE\",\"fr-PF\",\"fr-PM\",\"fr-RE\",\"fr-RW\",\"fr-SC\",\"fr-SN\",\"fr-SY\",\"fr-TD\",\"fr-TG\",\"fr-TN\",\"fr-VU\",\"fr-WF\",\"fr-YT\",\"fr\",\"fur\",\"fy\",\"ga-GB\",\"ga\",\"gd\",\"gl\",\"gsw-FR\",\"gsw-LI\",\"gsw\",\"gu\",\"guz\",\"gv\",\"ha-GH\",\"ha-NE\",\"ha\",\"haw\",\"he\",\"hi\",\"hr-BA\",\"hr\",\"hsb\",\"hu\",\"hy\",\"ia\",\"id\",\"ig\",\"ii\",\"is\",\"it-CH\",\"it-SM\",\"it-VA\",\"it\",\"ja\",\"jgo\",\"jmc\",\"jv\",\"ka\",\"kab\",\"kam\",\"kde\",\"kea\",\"kgp\",\"khq\",\"ki\",\"kk\",\"kkj\",\"kl\",\"kln\",\"km\",\"kn\",\"ko-KP\",\"ko\",\"kok\",\"ks-Arab\",\"ks\",\"ksb\",\"ksf\",\"ksh\",\"ku\",\"kw\",\"ky\",\"lag\",\"lb\",\"lg\",\"lkt\",\"ln-AO\",\"ln-CF\",\"ln-CG\",\"ln\",\"lo\",\"lrc-IQ\",\"lrc\",\"lt\",\"lu\",\"luo\",\"luy\",\"lv\",\"mai\",\"mas-TZ\",\"mas\",\"mer\",\"mfe\",\"mg\",\"mgh\",\"mgo\",\"mi\",\"mk\",\"ml\",\"mn\",\"mni-Beng\",\"mni\",\"mr\",\"ms-BN\",\"ms-ID\",\"ms-SG\",\"ms\",\"mt\",\"mua\",\"my\",\"mzn\",\"naq\",\"nb-SJ\",\"nb\",\"nd\",\"nds-NL\",\"nds\",\"ne-IN\",\"ne\",\"nl-AW\",\"nl-BE\",\"nl-BQ\",\"nl-CW\",\"nl-SR\",\"nl-SX\",\"nl\",\"nmg\",\"nn\",\"nnh\",\"no\",\"nus\",\"nyn\",\"om-KE\",\"om\",\"or\",\"os-RU\",\"os\",\"pa-Arab\",\"pa-Guru\",\"pa\",\"pcm\",\"pl\",\"ps-PK\",\"ps\",\"pt-AO\",\"pt-CH\",\"pt-CV\",\"pt-GQ\",\"pt-GW\",\"pt-LU\",\"pt-MO\",\"pt-MZ\",\"pt-PT\",\"pt-ST\",\"pt-TL\",\"pt\",\"qu-BO\",\"qu-EC\",\"qu\",\"rm\",\"rn\",\"ro-MD\",\"ro\",\"rof\",\"ru-BY\",\"ru-KG\",\"ru-KZ\",\"ru-MD\",\"ru-UA\",\"ru\",\"rw\",\"rwk\",\"sa\",\"sah\",\"saq\",\"sat-Olck\",\"sat\",\"sbp\",\"sc\",\"sd-Arab\",\"sd-Deva\",\"sd\",\"se-FI\",\"se-SE\",\"se\",\"seh\",\"ses\",\"sg\",\"shi-Latn\",\"shi-Tfng\",\"shi\",\"si\",\"sk\",\"sl\",\"smn\",\"sn\",\"so-DJ\",\"so-ET\",\"so-KE\",\"so\",\"sq-MK\",\"sq-XK\",\"sq\",\"sr-Cyrl-BA\",\"sr-Cyrl-ME\",\"sr-Cyrl-XK\",\"sr-Cyrl\",\"sr-Latn-BA\",\"sr-Latn-ME\",\"sr-Latn-XK\",\"sr-Latn\",\"sr\",\"su-Latn\",\"su\",\"sv-AX\",\"sv-FI\",\"sv\",\"sw-CD\",\"sw-KE\",\"sw-UG\",\"sw\",\"ta-LK\",\"ta-MY\",\"ta-SG\",\"ta\",\"te\",\"teo-KE\",\"teo\",\"tg\",\"th\",\"ti-ER\",\"ti\",\"tk\",\"to\",\"tr-CY\",\"tr\",\"tt\",\"twq\",\"tzm\",\"ug\",\"uk\",\"und\",\"ur-IN\",\"ur\",\"uz-Arab\",\"uz-Cyrl\",\"uz-Latn\",\"uz\",\"vai-Latn\",\"vai-Vaii\",\"vai\",\"vi\",\"vun\",\"wae\",\"wo\",\"xh\",\"xog\",\"yav\",\"yi\",\"yo-BJ\",\"yo\",\"yrl-CO\",\"yrl-VE\",\"yrl\",\"yue-Hans\",\"yue-Hant\",\"yue\",\"zgh\",\"zh-Hans-HK\",\"zh-Hans-MO\",\"zh-Hans-SG\",\"zh-Hans\",\"zh-Hant-HK\",\"zh-Hant-MO\",\"zh-Hant\",\"zh\",\"zu\"];const gc={},_c=window.localStorage||{},yc={\"zh-cn\":\"zh-Hans\",\"zh-sg\":\"zh-Hans\",\"zh-my\":\"zh-Hans\",\"zh-tw\":\"zh-Hant\",\"zh-hk\":\"zh-Hant\",\"zh-mo\":\"zh-Hant\",zh:\"zh-Hant\"};function kc(e){if(e in gc.translations)return e;const t=e.toLowerCase();if(t in yc)return yc[t];const i=Object.keys(gc.translations).find((e=>e.toLowerCase()===t));return i||(e.includes(\"-\")?kc(e.split(\"-\")[0]):void 0)}const bc=new Set,xc=[];\"Locale\"in Intl&&!function(){try{return\"x-private\"===new Intl.Locale(\"und-x-private\").toString()}catch(e){return!0}}()||xc.push(import(\"./c.a0bc44e3.js\")),function(e){if(void 0===e&&(e=\"en\"),!(\"PluralRules\"in Intl)||\"one\"===new Intl.PluralRules(\"en\",{minimumFractionDigits:2}).select(1)||!function(e){if(!e)return!0;var t=Array.isArray(e)?e:[e];return Intl.PluralRules.supportedLocalesOf(t).length===t.length}(e))return e?ec([e],ic,\"en\"):void 0}()&&(xc.push(import(\"./c.ef5e31a4.js\")),xc.push(import(\"./c.e23b0d0b.js\"))),function(e){if(void 0===e&&(e=\"en\"),!(\"RelativeTimeFormat\"in Intl)||!function(e){if(!e)return!0;var t=Array.isArray(e)?e:[e];return Intl.RelativeTimeFormat.supportedLocalesOf(t).length===t.length}(e)||!function(e){try{return\"numberingSystem\"in new Intl.RelativeTimeFormat(e||\"en\",{numeric:\"auto\"}).resolvedOptions()}catch(e){return!1}}(e))return vc([e],mc,\"en\")}()&&xc.push(import(\"./c.3c651323.js\")),function(e){if(void 0===e&&(e=\"en\"),!(\"DateTimeFormat\"in Intl)||!(\"formatToParts\"in Intl.DateTimeFormat.prototype)||!(\"formatRange\"in Intl.DateTimeFormat.prototype)||function(){try{return\"dayPeriod\"!==new Intl.DateTimeFormat(\"en\",{hourCycle:\"h11\",hour:\"numeric\"}).formatToParts(0)[2].type}catch(e){return!1}}()||function(){try{return!!new Intl.DateTimeFormat(\"en\",{dateStyle:\"short\",hour:\"numeric\"}).format(new Date(0))}catch(e){return!1}}()||!function(){try{return!!new Intl.DateTimeFormat(void 0,{dateStyle:\"short\"}).resolvedOptions().dateStyle}catch(e){return!1}}()||!function(e){if(!e)return!0;var t=Array.isArray(e)?e:[e];return Intl.DateTimeFormat.supportedLocalesOf(t).length===t.length}(e))return e?vc([e],fc,\"en\"):void 0}()&&(xc.push(import(\"./c.e7b530de.js\")),xc.push(import(\"./c.ad739743.js\")));const $c=0===xc.length?void 0:Promise.all(xc).then((()=>wc(function(){let e=null;if(_c.selectedLanguage)try{const t=JSON.parse(_c.selectedLanguage);if(t&&(e=kc(t),e))return e}catch(e){}if(navigator.languages)for(const t of navigator.languages)if(e=kc(t),e)return e;return e=kc(navigator.language),e||\"en\"}()))),wc=async e=>{if(!bc.has(e)){bc.add(e);try{if(Intl.NumberFormat&&\"function\"==typeof Intl.NumberFormat.__addLocaleData){const t=await fetch(`/static/locale-data/intl-numberformat/${e}.json`);Intl.NumberFormat.__addLocaleData(await t.json())}if(Intl.RelativeTimeFormat&&\"function\"==typeof Intl.RelativeTimeFormat.__addLocaleData){const t=await fetch(`/static/locale-data/intl-relativetimeformat/${e}.json`);Intl.RelativeTimeFormat.__addLocaleData(await t.json())}if(Intl.DateTimeFormat&&\"function\"==typeof Intl.DateTimeFormat.__addLocaleData){const t=await fetch(`/static/locale-data/intl-datetimeformat/${e}.json`);Intl.DateTimeFormat.__addLocaleData(await t.json())}}catch(e){}}};$c&&await $c,Ri((e=>new Intl.DateTimeFormat(e.language,{weekday:\"long\",month:\"long\",day:\"numeric\"}))),Ri((e=>new Intl.DateTimeFormat(e.language,{year:\"numeric\",month:\"long\",day:\"numeric\"})));const Cc=Ri((e=>new Intl.DateTimeFormat(e.language,{year:\"numeric\",month:\"numeric\",day:\"numeric\"})));Ri((e=>new Intl.DateTimeFormat(e.language,{day:\"numeric\",month:\"short\"}))),Ri((e=>new Intl.DateTimeFormat(e.language,{month:\"long\",year:\"numeric\"}))),Ri((e=>new Intl.DateTimeFormat(e.language,{month:\"long\"}))),Ri((e=>new Intl.DateTimeFormat(e.language,{year:\"numeric\"})));const Ac=Ri((e=>{if(e.time_format===ps.language||e.time_format===ps.system){const t=e.time_format===ps.language?e.language:void 0,i=(new Date).toLocaleString(t);return i.includes(\"AM\")||i.includes(\"PM\")}return e.time_format===ps.am_pm}));$c&&await $c,Ri((e=>new Intl.DateTimeFormat(\"en\"!==e.language||Ac(e)?e.language:\"en-u-hc-h23\",{year:\"numeric\",month:\"long\",day:\"numeric\",hour:Ac(e)?\"numeric\":\"2-digit\",minute:\"2-digit\",hour12:Ac(e)}))),Ri((e=>new Intl.DateTimeFormat(\"en\"!==e.language||Ac(e)?e.language:\"en-u-hc-h23\",{year:\"numeric\",month:\"long\",day:\"numeric\",hour:Ac(e)?\"numeric\":\"2-digit\",minute:\"2-digit\",second:\"2-digit\",hour12:Ac(e)}))),Ri((e=>new Intl.DateTimeFormat(\"en\"!==e.language||Ac(e)?e.language:\"en-u-hc-h23\",{year:\"numeric\",month:\"numeric\",day:\"numeric\",hour:\"numeric\",minute:\"2-digit\",hour12:Ac(e)})));v([w(\"ha-entity-attribute-picker\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"entityId\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"autofocus\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean,attribute:\"allow-custom-value\"})],key:\"allowCustomValue\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"_opened\",value:()=>!1},{kind:\"field\",decorators:[g(\"ha-combo-box\",!0)],key:\"_comboBox\",value:void 0},{kind:\"method\",key:\"shouldUpdate\",value:function(e){return!(!e.has(\"_opened\")&&this._opened)}},{kind:\"method\",key:\"updated\",value:function(e){if(e.has(\"_opened\")&&this._opened){const e=this.entityId?this.hass.states[this.entityId]:void 0;this._comboBox.items=e?Object.keys(e.attributes).map((e=>{return{value:e,label:(t=e,(e=>e.charAt(0).toUpperCase()+e.slice(1))(t=t.replace(/_/g,\" \").replace(/\\bid\\b/g,\"ID\").replace(/\\bip\\b/g,\"IP\").replace(/\\bmac\\b/g,\"MAC\").replace(/\\bgps\\b/g,\"GPS\")))};var t})):[]}}},{kind:\"method\",key:\"render\",value:function(){var e;return this.hass?k`\n      <ha-combo-box\n        .hass=${this.hass}\n        .value=${this.value||\"\"}\n        .autofocus=${this.autofocus}\n        .label=${null!==(e=this.label)&&void 0!==e?e:this.hass.localize(\"ui.components.entity.entity-attribute-picker.attribute\")}\n        .disabled=${this.disabled||!this.entityId}\n        .required=${this.required}\n        .helper=${this.helper}\n        .allowCustomValue=${this.allowCustomValue}\n        item-value-path=\"value\"\n        item-label-path=\"label\"\n        @opened-changed=${this._openedChanged}\n        @value-changed=${this._valueChanged}\n      >\n      </ha-combo-box>\n    `:k``}},{kind:\"method\",key:\"_openedChanged\",value:function(e){this._opened=e.detail.value}},{kind:\"method\",key:\"_valueChanged\",value:function(e){this.value=e.detail.value}}]}}),m),v([w(\"ha-selector-attribute\")],(function(t,i){class a extends i{constructor(...e){super(...e),t(this)}}return{F:a,d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"selector\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!0},{kind:\"field\",decorators:[f()],key:\"context\",value:void 0},{kind:\"method\",key:\"render\",value:function(){var e;return k`\n      <ha-entity-attribute-picker\n        .hass=${this.hass}\n        .entityId=${this.selector.attribute.entity_id||(null===(e=this.context)||void 0===e?void 0:e.filter_entity)}\n        .value=${this.value}\n        .label=${this.label}\n        .helper=${this.helper}\n        .disabled=${this.disabled}\n        .required=${this.required}\n        allow-custom-value\n      ></ha-entity-attribute-picker>\n    `}},{kind:\"method\",key:\"updated\",value:function(t){if(_(y(a.prototype),\"updated\",this).call(this,t),!this.value||this.selector.attribute.entity_id||!t.has(\"context\"))return;const i=t.get(\"context\");if(!this.context||(null==i?void 0:i.filter_entity)===this.context.filter_entity)return;let n=!1;if(this.context.filter_entity){const e=this.hass.states[this.context.filter_entity];e&&this.value in e.attributes||(n=!0)}else n=void 0!==this.value;n&&e(this,\"value-changed\",{value:void 0})}}]}}),Hl(m)),v([w(\"ha-selector-boolean\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-formfield alignEnd spaceBetween .label=${this.label}>\n        <ha-switch\n          .checked=${this.value}\n          @change=${this._handleChange}\n          .disabled=${this.disabled}\n        ></ha-switch>\n      </ha-formfield>\n      ${this.helper?k`<ha-input-helper-text>${this.helper}</ha-input-helper-text>`:\"\"}\n    `}},{kind:\"method\",key:\"_handleChange\",value:function(t){const i=t.target.checked;this.value!==i&&e(this,\"value-changed\",{value:i})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      ha-formfield {\n        display: flex;\n        height: 56px;\n        align-items: center;\n        --mdc-typography-body2-font-size: 1em;\n      }\n    `}}]}}),m),v([w(\"ha-selector-color_rgb\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"selector\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean,reflect:!0})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!0},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-textfield\n        type=\"color\"\n        helperPersistent\n        .value=${this.value?ba(this.value):\"\"}\n        .label=${this.label||\"\"}\n        .required=${this.required}\n        .helper=${this.helper}\n        .disalbled=${this.disabled}\n        @change=${this._valueChanged}\n      ></ha-textfield>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){const i=t.target.value;e(this,\"value-changed\",{value:xa(i)})}},{kind:\"field\",static:!0,key:\"styles\",value:()=>i`\n    :host {\n      display: flex;\n      justify-content: flex-end;\n      align-items: center;\n    }\n    ha-textfield {\n      --text-field-padding: 8px;\n      min-width: 75px;\n      flex-grow: 1;\n      margin: 0 4px;\n    }\n  `}]}}),m);const Ic=()=>import(\"./c.250c89dd.js\");v([w(\"ha-date-input\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"locale\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!1},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"method\",key:\"render\",value:function(){return k`<ha-textfield\n      .label=${this.label}\n      .helper=${this.helper}\n      .disabled=${this.disabled}\n      iconTrailing\n      helperPersistent\n      @click=${this._openDialog}\n      .value=${this.value?(e=new Date(this.value),t=this.locale,Cc(t).format(e)):\"\"}\n      .required=${this.required}\n    >\n      <ha-svg-icon slot=\"trailingIcon\" .path=${z}></ha-svg-icon>\n    </ha-textfield>`;var e,t}},{kind:\"method\",key:\"_openDialog\",value:function(){var t,i;this.disabled||(t=this,i={min:\"1970-01-01\",value:this.value,onChange:e=>this._valueChanged(e),locale:this.locale.language},e(t,\"show-dialog\",{dialogTag:\"ha-dialog-date-picker\",dialogImport:Ic,dialogParams:i}))}},{kind:\"method\",key:\"_valueChanged\",value:function(t){this.value!==t&&(this.value=t,e(this,\"change\"),e(this,\"value-changed\",{value:t}))}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      ha-svg-icon {\n        color: var(--secondary-text-color);\n      }\n    `}}]}}),m),v([w(\"ha-selector-date\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"selector\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean,reflect:!0})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!0},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-date-input\n        .label=${this.label}\n        .locale=${this.hass.locale}\n        .disabled=${this.disabled}\n        .value=${this.value}\n        .required=${this.required}\n        .helper=${this.helper}\n      >\n      </ha-date-input>\n    `}}]}}),m),v([w(\"ha-time-input\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"locale\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean,attribute:\"enable-second\"})],key:\"enableSecond\",value:()=>!1},{kind:\"method\",key:\"render\",value:function(){var e;const t=Ac(this.locale),i=(null===(e=this.value)||void 0===e?void 0:e.split(\":\"))||[];let a=i[0];const n=Number(i[0]);return n&&t&&n>12&&n<24&&(a=String(n-12).padStart(2,\"0\")),t&&0===n&&(a=\"12\"),k`\n      <ha-base-time-input\n        .label=${this.label}\n        .hours=${Number(a)}\n        .minutes=${Number(i[1])}\n        .seconds=${Number(i[2])}\n        .format=${t?12:24}\n        .amPm=${t&&(n>=12?\"PM\":\"AM\")}\n        .disabled=${this.disabled}\n        @value-changed=${this._timeChanged}\n        .enableSecond=${this.enableSecond}\n        .required=${this.required}\n        .helper=${this.helper}\n      ></ha-base-time-input>\n    `}},{kind:\"method\",key:\"_timeChanged\",value:function(t){t.stopPropagation();const i=t.detail.value,a=Ac(this.locale);let n=i.hours||0;i&&a&&(\"PM\"===i.amPm&&n<12&&(n+=12),\"AM\"===i.amPm&&12===n&&(n=0));const o=`${n.toString().padStart(2,\"0\")}:${i.minutes?i.minutes.toString().padStart(2,\"0\"):\"00\"}:${i.seconds?i.seconds.toString().padStart(2,\"0\"):\"00\"}`;o!==this.value&&(this.value=o,e(this,\"change\"),e(this,\"value-changed\",{value:o}))}}]}}),m),v([w(\"ha-selector-datetime\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"selector\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean,reflect:!0})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!0},{kind:\"field\",decorators:[g(\"ha-date-input\")],key:\"_dateInput\",value:void 0},{kind:\"field\",decorators:[g(\"ha-time-input\")],key:\"_timeInput\",value:void 0},{kind:\"method\",key:\"render\",value:function(){var e;const t=null===(e=this.value)||void 0===e?void 0:e.split(\" \");return k`\n      <div class=\"input\">\n        <ha-date-input\n          .label=${this.label}\n          .locale=${this.hass.locale}\n          .disabled=${this.disabled}\n          .required=${this.required}\n          .value=${null==t?void 0:t[0]}\n          @value-changed=${this._valueChanged}\n        >\n        </ha-date-input>\n        <ha-time-input\n          enable-second\n          .value=${(null==t?void 0:t[1])||\"0:00:00\"}\n          .locale=${this.hass.locale}\n          .disabled=${this.disabled}\n          .required=${this.required}\n          @value-changed=${this._valueChanged}\n        ></ha-time-input>\n      </div>\n      ${this.helper?k`<ha-input-helper-text>${this.helper}</ha-input-helper-text>`:\"\"}\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){t.stopPropagation(),e(this,\"value-changed\",{value:`${this._dateInput.value} ${this._timeInput.value}`})}},{kind:\"field\",static:!0,key:\"styles\",value:()=>i`\n    .input {\n      display: flex;\n      align-items: center;\n      flex-direction: row;\n    }\n\n    ha-date-input {\n      min-width: 150px;\n      margin-right: 4px;\n    }\n  `}]}}),m),v([w(\"ha-devices-picker\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"include-domains\"})],key:\"includeDomains\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"exclude-domains\"})],key:\"excludeDomains\",value:void 0},{kind:\"field\",decorators:[f({attribute:\"picked-device-label\"}),f({type:Array,attribute:\"include-device-classes\"})],key:\"includeDeviceClasses\",value:void 0},{kind:\"field\",key:\"pickedDeviceLabel\",value:void 0},{kind:\"field\",decorators:[f({attribute:\"pick-device-label\"})],key:\"pickDeviceLabel\",value:void 0},{kind:\"field\",decorators:[f()],key:\"deviceFilter\",value:void 0},{kind:\"method\",key:\"render\",value:function(){if(!this.hass)return k``;const e=this._currentDevices;return k`\n      ${e.map((e=>k`\n          <div>\n            <ha-device-picker\n              allow-custom-entity\n              .curValue=${e}\n              .hass=${this.hass}\n              .deviceFilter=${this.deviceFilter}\n              .includeDomains=${this.includeDomains}\n              .excludeDomains=${this.excludeDomains}\n              .includeDeviceClasses=${this.includeDeviceClasses}\n              .value=${e}\n              .label=${this.pickedDeviceLabel}\n              .disabled=${this.disabled}\n              @value-changed=${this._deviceChanged}\n            ></ha-device-picker>\n          </div>\n        `))}\n      <div>\n        <ha-device-picker\n          allow-custom-entity\n          .hass=${this.hass}\n          .helper=${this.helper}\n          .deviceFilter=${this.deviceFilter}\n          .includeDomains=${this.includeDomains}\n          .excludeDomains=${this.excludeDomains}\n          .includeDeviceClasses=${this.includeDeviceClasses}\n          .label=${this.pickDeviceLabel}\n          .disabled=${this.disabled}\n          .required=${this.required&&!e.length}\n          @value-changed=${this._addDevice}\n        ></ha-device-picker>\n      </div>\n    `}},{kind:\"get\",key:\"_currentDevices\",value:function(){return this.value||[]}},{kind:\"method\",key:\"_updateDevices\",value:async function(t){e(this,\"value-changed\",{value:t}),this.value=t}},{kind:\"method\",key:\"_deviceChanged\",value:function(e){e.stopPropagation();const t=e.currentTarget.curValue,i=e.detail.value;i!==t&&\"\"===i&&(\"\"===i?this._updateDevices(this._currentDevices.filter((e=>e!==t))):this._updateDevices(this._currentDevices.map((e=>e===t?i:e))))}},{kind:\"method\",key:\"_addDevice\",value:async function(e){e.stopPropagation();const t=e.detail.value;if(e.currentTarget.value=\"\",!t)return;const i=this._currentDevices;i.includes(t)||this._updateDevices([...i,t])}},{kind:\"field\",static:!0,key:\"styles\",value:()=>i`\n    div {\n      margin-top: 8px;\n    }\n  `}]}}),m),v([w(\"ha-selector-device\")],(function(e,t){class i extends t{constructor(...t){super(...t),e(this)}}return{F:i,d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"selector\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_entitySources\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_entities\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_configEntries\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!0},{kind:\"method\",key:\"hassSubscribe\",value:function(){return[Ul(this.hass.connection,(e=>{this._entities=e.filter((e=>null!==e.device_id))}))]}},{kind:\"method\",key:\"updated\",value:function(e){_(y(i.prototype),\"updated\",this).call(this,e),e.has(\"selector\")&&this.selector.device.integration&&!this._entitySources&&Wd(this.hass).then((e=>{this._entitySources=e}))}},{kind:\"method\",key:\"render\",value:function(){var e,t,i,a;return this.selector.device.integration&&!this._entitySources?k``:this.selector.device.multiple?k`\n      ${this.label?k`<label>${this.label}</label>`:\"\"}\n      <ha-devices-picker\n        .hass=${this.hass}\n        .value=${this.value}\n        .helper=${this.helper}\n        .deviceFilter=${this._filterDevices}\n        .includeDeviceClasses=${null!==(e=this.selector.device.entity)&&void 0!==e&&e.device_class?[this.selector.device.entity.device_class]:void 0}\n        .includeDomains=${null!==(t=this.selector.device.entity)&&void 0!==t&&t.domain?[this.selector.device.entity.domain]:void 0}\n        .disabled=${this.disabled}\n        .required=${this.required}\n      ></ha-devices-picker>\n    `:k`\n        <ha-device-picker\n          .hass=${this.hass}\n          .value=${this.value}\n          .label=${this.label}\n          .helper=${this.helper}\n          .deviceFilter=${this._filterDevices}\n          .includeDeviceClasses=${null!==(i=this.selector.device.entity)&&void 0!==i&&i.device_class?[this.selector.device.entity.device_class]:void 0}\n          .includeDomains=${null!==(a=this.selector.device.entity)&&void 0!==a&&a.domain?[this.selector.device.entity.domain]:void 0}\n          .disabled=${this.disabled}\n          .required=${this.required}\n          allow-custom-entity\n        ></ha-device-picker>\n      `}},{kind:\"field\",key:\"_filterDevices\",value(){return e=>{const{manufacturer:t,model:i,integration:a}=this.selector.device;if(t&&e.manufacturer!==t)return!1;if(i&&e.model!==i)return!1;if(a&&this._entitySources&&this._entities){var n;const t=this._deviceIntegrations(this._entitySources,this._entities);if(null==t||null===(n=t[e.id])||void 0===n||!n.includes(a))return!1}return!0}}},{kind:\"field\",key:\"_deviceIntegrations\",value:()=>Ri(((e,t)=>{const i={};for(const a of t){const t=e[a.entity_id];null!=t&&t.domain&&(i[a.device_id]||(i[a.device_id]=[]),i[a.device_id].push(t.domain))}return i}))}]}}),Hl(m)),v([w(\"ha-selector-duration\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"selector\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!0},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-duration-input\n        .label=${this.label}\n        .helper=${this.helper}\n        .data=${this.value}\n        .disabled=${this.disabled}\n        .required=${this.required}\n        .enableDay=${this.selector.duration.enable_day}\n      ></ha-duration-input>\n    `}}]}}),m);const Ec=/^(\\w+)\\.(\\w+)$/;v([w(\"ha-entities-picker\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({type:Array})],key:\"value\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"include-domains\"})],key:\"includeDomains\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"exclude-domains\"})],key:\"excludeDomains\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"include-device-classes\"})],key:\"includeDeviceClasses\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"include-unit-of-measurement\"})],key:\"includeUnitOfMeasurement\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"include-entities\"})],key:\"includeEntities\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"exclude-entities\"})],key:\"excludeEntities\",value:void 0},{kind:\"field\",decorators:[f({attribute:\"picked-entity-label\"})],key:\"pickedEntityLabel\",value:void 0},{kind:\"field\",decorators:[f({attribute:\"pick-entity-label\"})],key:\"pickEntityLabel\",value:void 0},{kind:\"field\",decorators:[f()],key:\"entityFilter\",value:void 0},{kind:\"method\",key:\"render\",value:function(){if(!this.hass)return k``;const e=this._currentEntities;return k`\n      ${e.map((e=>k`\n          <div>\n            <ha-entity-picker\n              allow-custom-entity\n              .curValue=${e}\n              .hass=${this.hass}\n              .includeDomains=${this.includeDomains}\n              .excludeDomains=${this.excludeDomains}\n              .includeEntities=${this.includeEntities}\n              .excludeEntities=${this.excludeEntities}\n              .includeDeviceClasses=${this.includeDeviceClasses}\n              .includeUnitOfMeasurement=${this.includeUnitOfMeasurement}\n              .entityFilter=${this._entityFilter}\n              .value=${e}\n              .label=${this.pickedEntityLabel}\n              .disabled=${this.disabled}\n              @value-changed=${this._entityChanged}\n            ></ha-entity-picker>\n          </div>\n        `))}\n      <div>\n        <ha-entity-picker\n          allow-custom-entity\n          .hass=${this.hass}\n          .includeDomains=${this.includeDomains}\n          .excludeDomains=${this.excludeDomains}\n          .includeEntities=${this.includeEntities}\n          .excludeEntities=${this.excludeEntities}\n          .includeDeviceClasses=${this.includeDeviceClasses}\n          .includeUnitOfMeasurement=${this.includeUnitOfMeasurement}\n          .entityFilter=${this._entityFilter}\n          .label=${this.pickEntityLabel}\n          .helper=${this.helper}\n          .disabled=${this.disabled}\n          .required=${this.required&&!e.length}\n          @value-changed=${this._addEntity}\n        ></ha-entity-picker>\n      </div>\n    `}},{kind:\"field\",key:\"_entityFilter\",value(){return e=>(!this.value||!this.value.includes(e.entity_id))&&(!this.entityFilter||this.entityFilter(e))}},{kind:\"get\",key:\"_currentEntities\",value:function(){return this.value||[]}},{kind:\"method\",key:\"_updateEntities\",value:async function(t){this.value=t,e(this,\"value-changed\",{value:t})}},{kind:\"method\",key:\"_entityChanged\",value:function(e){e.stopPropagation();const t=e.currentTarget.curValue,i=e.detail.value;if(i===t||void 0!==i&&(a=i,!Ec.test(a)))return;var a;const n=this._currentEntities;i&&!n.includes(i)?this._updateEntities(n.map((e=>e===t?i:e))):this._updateEntities(n.filter((e=>e!==t)))}},{kind:\"method\",key:\"_addEntity\",value:async function(e){e.stopPropagation();const t=e.detail.value;if(!t)return;if(e.currentTarget.value=\"\",!t)return;const i=this._currentEntities;i.includes(t)||this._updateEntities([...i,t])}},{kind:\"field\",static:!0,key:\"styles\",value:()=>i`\n    div {\n      margin-top: 8px;\n    }\n  `}]}}),m),v([w(\"ha-selector-entity\")],(function(e,t){class i extends t{constructor(...t){super(...t),e(this)}}return{F:i,d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"selector\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_entitySources\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!0},{kind:\"method\",key:\"render\",value:function(){return this.selector.entity.multiple?k`\n      ${this.label?k`<label>${this.label}</label>`:\"\"}\n      <ha-entities-picker\n        .hass=${this.hass}\n        .value=${this.value}\n        .helper=${this.helper}\n        .includeEntities=${this.selector.entity.include_entities}\n        .excludeEntities=${this.selector.entity.exclude_entities}\n        .entityFilter=${this._filterEntities}\n        .disabled=${this.disabled}\n        .required=${this.required}\n      ></ha-entities-picker>\n    `:k`<ha-entity-picker\n        .hass=${this.hass}\n        .value=${this.value}\n        .label=${this.label}\n        .helper=${this.helper}\n        .includeEntities=${this.selector.entity.include_entities}\n        .excludeEntities=${this.selector.entity.exclude_entities}\n        .entityFilter=${this._filterEntities}\n        .disabled=${this.disabled}\n        .required=${this.required}\n        allow-custom-entity\n      ></ha-entity-picker>`}},{kind:\"method\",key:\"updated\",value:function(e){_(y(i.prototype),\"updated\",this).call(this,e),e.has(\"selector\")&&this.selector.entity.integration&&!this._entitySources&&Wd(this.hass).then((e=>{this._entitySources=e}))}},{kind:\"field\",key:\"_filterEntities\",value(){return e=>{var t,i;const{domain:a,device_class:n,integration:o}=this.selector.entity;if(a){const t=as(e);if(Array.isArray(a)?!a.includes(t):t!==a)return!1}return(!n||e.attributes.device_class===n)&&(!o||(null===(t=this._entitySources)||void 0===t||null===(i=t[e.entity_id])||void 0===i?void 0:i.domain)===o)}}}]}}),m),v([w(\"ha-selector-number\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"selector\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"placeholder\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"method\",key:\"render\",value:function(){var e,t,i;const a=\"box\"===this.selector.number.mode;return k`\n      ${this.label?k`${this.label}${this.required?\" *\":\"\"}`:\"\"}\n      <div class=\"input\">\n        ${a?\"\":k`<ha-slider\n              .min=${this.selector.number.min}\n              .max=${this.selector.number.max}\n              .value=${this._value}\n              .step=${null!==(e=this.selector.number.step)&&void 0!==e?e:1}\n              .disabled=${this.disabled}\n              .required=${this.required}\n              pin\n              ignore-bar-touch\n              @change=${this._handleSliderChange}\n            >\n            </ha-slider>`}\n        <ha-textfield\n          inputMode=\"numeric\"\n          pattern=\"[0-9]+([\\\\.][0-9]+)?\"\n          .label=${\"box\"!==this.selector.number.mode?void 0:this.label}\n          .placeholder=${this.placeholder}\n          class=${Xi({single:\"box\"===this.selector.number.mode})}\n          .min=${this.selector.number.min}\n          .max=${this.selector.number.max}\n          .value=${null!==(t=this.value)&&void 0!==t?t:\"\"}\n          .step=${null!==(i=this.selector.number.step)&&void 0!==i?i:1}\n          helperPersistent\n          .helper=${a?this.helper:void 0}\n          .disabled=${this.disabled}\n          .required=${this.required}\n          .suffix=${this.selector.number.unit_of_measurement}\n          type=\"number\"\n          autoValidate\n          ?no-spinner=${\"box\"!==this.selector.number.mode}\n          @input=${this._handleInputChange}\n        >\n        </ha-textfield>\n      </div>\n      ${!a&&this.helper?k`<ha-input-helper-text>${this.helper}</ha-input-helper-text>`:\"\"}\n    `}},{kind:\"get\",key:\"_value\",value:function(){var e;return null!==(e=this.value)&&void 0!==e?e:this.selector.number.min||0}},{kind:\"method\",key:\"_handleInputChange\",value:function(t){t.stopPropagation();const i=\"\"===t.target.value||isNaN(t.target.value)?this.required?this.selector.number.min||0:void 0:Number(t.target.value);this.value!==i&&e(this,\"value-changed\",{value:i})}},{kind:\"method\",key:\"_handleSliderChange\",value:function(t){t.stopPropagation();const i=Number(t.target.value);this.value!==i&&e(this,\"value-changed\",{value:i})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      .input {\n        display: flex;\n        justify-content: space-between;\n        align-items: center;\n        direction: ltr;\n      }\n      ha-slider {\n        flex: 1;\n      }\n      ha-textfield {\n        --ha-textfield-input-width: 40px;\n      }\n      .single {\n        --ha-textfield-input-width: unset;\n        flex: 1;\n      }\n    `}}]}}),m),v([w(\"ha-selector-object\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f()],key:\"placeholder\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!0},{kind:\"method\",key:\"render\",value:function(){return k`<ha-yaml-editor\n        .hass=${this.hass}\n        .readonly=${this.disabled}\n        .label=${this.label}\n        .required=${this.required}\n        .placeholder=${this.placeholder}\n        .defaultValue=${this.value}\n        @value-changed=${this._handleChange}\n      ></ha-yaml-editor>\n      ${this.helper?k`<ha-input-helper-text>${this.helper}</ha-input-helper-text>`:\"\"} `}},{kind:\"method\",key:\"_handleChange\",value:function(t){const i=t.target.value;t.target.isValid&&this.value!==i&&e(this,\"value-changed\",{value:i})}}]}}),m),v([w(\"ha-target-picker\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"include-domains\"})],key:\"includeDomains\",value:void 0},{kind:\"field\",decorators:[f({type:Array,attribute:\"include-device-classes\"})],key:\"includeDeviceClasses\",value:void 0},{kind:\"field\",decorators:[f()],key:\"deviceFilter\",value:void 0},{kind:\"field\",decorators:[f()],key:\"entityRegFilter\",value:void 0},{kind:\"field\",decorators:[f()],key:\"entityFilter\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean,reflect:!0})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"horizontal\",value:()=>!1},{kind:\"field\",decorators:[Vi()],key:\"_areas\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_devices\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_entities\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_addMode\",value:void 0},{kind:\"field\",decorators:[g(\"#input\")],key:\"_inputElement\",value:void 0},{kind:\"method\",key:\"hassSubscribe\",value:function(){return[Dl(this.hass.connection,(e=>{const t={};for(const i of e)t[i.area_id]=i;this._areas=t})),jl(this.hass.connection,(e=>{const t={};for(const i of e)t[i.id]=i;this._devices=t})),Ul(this.hass.connection,(e=>{this._entities=e}))]}},{kind:\"method\",key:\"render\",value:function(){return this._areas&&this._devices&&this._entities?k`<div class=${this.horizontal?\"horizontal-container\":\"\"}>\n      ${this.horizontal?this._renderChips():this._renderItems()}\n      ${this._renderPicker()}\n      ${this.horizontal?this._renderItems():this._renderChips()}\n    </div>`:k``}},{kind:\"method\",key:\"_renderItems\",value:function(){var e,t,i;return k`<div class=\"mdc-chip-set items\">\n      ${null!==(e=this.value)&&void 0!==e&&e.area_id?ws(this.value.area_id).map((e=>{const t=this._areas[e];return this._renderChip(\"area_id\",e,(null==t?void 0:t.name)||e,void 0,$a)})):\"\"}\n      ${null!==(t=this.value)&&void 0!==t&&t.device_id?ws(this.value.device_id).map((e=>{const t=this._devices[e];return this._renderChip(\"device_id\",e,t?Bl(t,this.hass):e,void 0,wa)})):\"\"}\n      ${null!==(i=this.value)&&void 0!==i&&i.entity_id?ws(this.value.entity_id).map((e=>{const t=this.hass.states[e];return this._renderChip(\"entity_id\",e,t?Sn(t):e,t)})):\"\"}\n    </div>`}},{kind:\"method\",key:\"_renderChips\",value:function(){return k`<div class=\"mdc-chip-set\">\n        <div\n          class=\"mdc-chip area_id add\"\n          .type=${\"area_id\"}\n          @click=${this._showPicker}\n        >\n          <div class=\"mdc-chip__ripple\"></div>\n          <ha-svg-icon\n            class=\"mdc-chip__icon mdc-chip__icon--leading\"\n            .path=${va}\n          ></ha-svg-icon>\n          <span role=\"gridcell\">\n            <span role=\"button\" tabindex=\"0\" class=\"mdc-chip__primary-action\">\n              <span class=\"mdc-chip__text\"\n                >${this.hass.localize(\"ui.components.target-picker.add_area_id\")}</span\n              >\n            </span>\n          </span>\n        </div>\n        <div\n          class=\"mdc-chip device_id add\"\n          .type=${\"device_id\"}\n          @click=${this._showPicker}\n        >\n          <div class=\"mdc-chip__ripple\"></div>\n          <ha-svg-icon\n            class=\"mdc-chip__icon mdc-chip__icon--leading\"\n            .path=${va}\n          ></ha-svg-icon>\n          <span role=\"gridcell\">\n            <span role=\"button\" tabindex=\"0\" class=\"mdc-chip__primary-action\">\n              <span class=\"mdc-chip__text\"\n                >${this.hass.localize(\"ui.components.target-picker.add_device_id\")}</span\n              >\n            </span>\n          </span>\n        </div>\n        <div\n          class=\"mdc-chip entity_id add\"\n          .type=${\"entity_id\"}\n          @click=${this._showPicker}\n        >\n          <div class=\"mdc-chip__ripple\"></div>\n          <ha-svg-icon\n            class=\"mdc-chip__icon mdc-chip__icon--leading\"\n            .path=${va}\n          ></ha-svg-icon>\n          <span role=\"gridcell\">\n            <span role=\"button\" tabindex=\"0\" class=\"mdc-chip__primary-action\">\n              <span class=\"mdc-chip__text\"\n                >${this.hass.localize(\"ui.components.target-picker.add_entity_id\")}</span\n              >\n            </span>\n          </span>\n        </div>\n      </div>\n      ${this.helper?k`<ha-input-helper-text>${this.helper}</ha-input-helper-text>`:\"\"} `}},{kind:\"method\",key:\"_showPicker\",value:async function(e){this._addMode=e.currentTarget.type,await this.updateComplete,setTimeout((()=>{var e,t;null===(e=this._inputElement)||void 0===e||e.open(),null===(t=this._inputElement)||void 0===t||t.focus()}),0)}},{kind:\"method\",key:\"_renderChip\",value:function(e,t,i,a,n){return k`\n      <div\n        class=\"mdc-chip ${Xi({[e]:!0})}\"\n      >\n        ${n?k`<ha-svg-icon\n              class=\"mdc-chip__icon mdc-chip__icon--leading\"\n              .path=${n}\n            ></ha-svg-icon>`:\"\"}\n        ${a?k`<ha-state-icon\n              class=\"mdc-chip__icon mdc-chip__icon--leading\"\n              .state=${a}\n            ></ha-state-icon>`:\"\"}\n        <span role=\"gridcell\">\n          <span role=\"button\" tabindex=\"0\" class=\"mdc-chip__primary-action\">\n            <span class=\"mdc-chip__text\">${i}</span>\n          </span>\n        </span>\n        ${\"entity_id\"===e?\"\":k` <span role=\"gridcell\">\n              <ha-icon-button\n                class=\"expand-btn mdc-chip__icon mdc-chip__icon--trailing\"\n                tabindex=\"-1\"\n                role=\"button\"\n                .label=${this.hass.localize(\"ui.components.target-picker.expand\")}\n                .path=${Ca}\n                hideTooltip\n                .id=${t}\n                .type=${e}\n                @click=${this._handleExpand}\n              ></ha-icon-button>\n              <paper-tooltip class=\"expand\" animation-delay=\"0\"\n                >${this.hass.localize(`ui.components.target-picker.expand_${e}`)}</paper-tooltip\n              >\n            </span>`}\n        <span role=\"gridcell\">\n          <ha-icon-button\n            class=\"mdc-chip__icon mdc-chip__icon--trailing\"\n            tabindex=\"-1\"\n            role=\"button\"\n            .label=${this.hass.localize(\"ui.components.target-picker.expand\")}\n            .path=${b}\n            hideTooltip\n            .id=${t}\n            .type=${e}\n            @click=${this._handleRemove}\n          ></ha-icon-button>\n          <paper-tooltip animation-delay=\"0\"\n            >${this.hass.localize(`ui.components.target-picker.remove_${e}`)}</paper-tooltip\n          >\n        </span>\n      </div>\n    `}},{kind:\"method\",key:\"_renderPicker\",value:function(){switch(this._addMode){case\"area_id\":return k`<ha-area-picker\n          .hass=${this.hass}\n          id=\"input\"\n          .type=${\"area_id\"}\n          .label=${this.hass.localize(\"ui.components.target-picker.add_area_id\")}\n          no-add\n          .deviceFilter=${this.deviceFilter}\n          .entityFilter=${this.entityRegFilter}\n          .includeDeviceClasses=${this.includeDeviceClasses}\n          .includeDomains=${this.includeDomains}\n          class=${this.horizontal?\"hidden-picker\":\"\"}\n          @value-changed=${this._targetPicked}\n        ></ha-area-picker>`;case\"device_id\":return k`<ha-device-picker\n          .hass=${this.hass}\n          id=\"input\"\n          .type=${\"device_id\"}\n          .label=${this.hass.localize(\"ui.components.target-picker.add_device_id\")}\n          .deviceFilter=${this.deviceFilter}\n          .entityFilter=${this.entityRegFilter}\n          .includeDeviceClasses=${this.includeDeviceClasses}\n          .includeDomains=${this.includeDomains}\n          class=${this.horizontal?\"hidden-picker\":\"\"}\n          @value-changed=${this._targetPicked}\n        ></ha-device-picker>`;case\"entity_id\":return k`<ha-entity-picker\n          .hass=${this.hass}\n          id=\"input\"\n          .type=${\"entity_id\"}\n          .label=${this.hass.localize(\"ui.components.target-picker.add_entity_id\")}\n          .entityFilter=${this.entityFilter}\n          .includeDeviceClasses=${this.includeDeviceClasses}\n          .includeDomains=${this.includeDomains}\n          class=${this.horizontal?\"hidden-picker\":\"\"}\n          @value-changed=${this._targetPicked}\n          allow-custom-entity\n        ></ha-entity-picker>`}return k``}},{kind:\"method\",key:\"_targetPicked\",value:function(t){if(t.stopPropagation(),!t.detail.value)return;const i=t.detail.value,a=t.currentTarget;a.value=\"\",this._addMode=void 0,e(this,\"value-changed\",{value:this.value?{...this.value,[a.type]:this.value[a.type]?[...ws(this.value[a.type]),i]:i}:{[a.type]:i}})}},{kind:\"method\",key:\"_handleExpand\",value:function(t){const i=t.currentTarget,a=[],n=[];if(\"area_id\"===i.type)Object.values(this._devices).forEach((e=>{var t;e.area_id!==i.id||null!==(t=this.value.device_id)&&void 0!==t&&t.includes(e.id)||!this._deviceMeetsFilter(e)||a.push(e.id)})),this._entities.forEach((e=>{var t;e.area_id!==i.id||null!==(t=this.value.entity_id)&&void 0!==t&&t.includes(e.entity_id)||!this._entityRegMeetsFilter(e)||n.push(e.entity_id)}));else{if(\"device_id\"!==i.type)return;this._entities.forEach((e=>{var t;e.device_id!==i.id||null!==(t=this.value.entity_id)&&void 0!==t&&t.includes(e.entity_id)||!this._entityRegMeetsFilter(e)||n.push(e.entity_id)}))}let o=this.value;n.length&&(o=this._addItems(o,\"entity_id\",n)),a.length&&(o=this._addItems(o,\"device_id\",a)),o=this._removeItem(o,i.type,i.id),e(this,\"value-changed\",{value:o})}},{kind:\"method\",key:\"_handleRemove\",value:function(t){const i=t.currentTarget;e(this,\"value-changed\",{value:this._removeItem(this.value,i.type,i.id)})}},{kind:\"method\",key:\"_addItems\",value:function(e,t,i){return{...e,[t]:e[t]?ws(e[t]).concat(i):i}}},{kind:\"method\",key:\"_removeItem\",value:function(e,t,i){const a=ws(e[t]).filter((e=>String(e)!==i));if(a.length)return{...e,[t]:a};const n={...e};return delete n[t],Object.keys(n).length?n:void 0}},{kind:\"method\",key:\"_deviceMeetsFilter\",value:function(e){var t;const i=null===(t=this._entities)||void 0===t?void 0:t.filter((t=>t.device_id===e.id));if(this.includeDomains){if(!i||!i.length)return!1;if(!i.some((e=>this.includeDomains.includes(zn(e.entity_id)))))return!1}if(this.includeDeviceClasses){if(!i||!i.length)return!1;if(!i.some((e=>{const t=this.hass.states[e.entity_id];return!!t&&(t.attributes.device_class&&this.includeDeviceClasses.includes(t.attributes.device_class))})))return!1}return!this.deviceFilter||this.deviceFilter(e)}},{kind:\"method\",key:\"_entityRegMeetsFilter\",value:function(e){if(e.entity_category)return!1;if(this.includeDomains&&!this.includeDomains.includes(zn(e.entity_id)))return!1;if(this.includeDeviceClasses){const t=this.hass.states[e.entity_id];if(!t)return!1;if(!t.attributes.device_class||!this.includeDeviceClasses.includes(t.attributes.device_class))return!1}return!this.entityRegFilter||this.entityRegFilter(e)}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      ${Aa(Ba)}\n      .hidden-picker {\n        height: 0px;\n        display: inline-block;\n        overflow: hidden;\n        position: absolute;\n      }\n      .horizontal-container {\n        display: flex;\n        flex-wrap: wrap;\n      }\n      .mdc-chip {\n        color: var(--primary-text-color);\n      }\n      .items {\n        z-index: 2;\n      }\n      .mdc-chip-set {\n        padding: 4px 0;\n      }\n      .mdc-chip.add {\n        color: rgba(0, 0, 0, 0.87);\n      }\n      .mdc-chip:not(.add) {\n        cursor: default;\n      }\n      .mdc-chip ha-icon-button {\n        --mdc-icon-button-size: 24px;\n        display: flex;\n        align-items: center;\n        outline: none;\n      }\n      .mdc-chip ha-icon-button ha-svg-icon {\n        border-radius: 50%;\n        background: var(--secondary-text-color);\n      }\n      .mdc-chip__icon.mdc-chip__icon--trailing {\n        width: 16px;\n        height: 16px;\n        --mdc-icon-size: 14px;\n        color: var(--secondary-text-color);\n        margin-inline-start: 4px !important;\n        margin-inline-end: -4px !important;\n        direction: var(--direction);\n      }\n      .mdc-chip__icon--leading {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        --mdc-icon-size: 20px;\n        border-radius: 50%;\n        padding: 6px;\n        margin-left: -14px !important;\n        margin-inline-start: -14px !important;\n        margin-inline-end: 4px !important;\n        direction: var(--direction);\n      }\n      .expand-btn {\n        margin-right: 0;\n      }\n      .mdc-chip.area_id:not(.add) {\n        border: 2px solid #fed6a4;\n        background: var(--card-background-color);\n      }\n      .mdc-chip.area_id:not(.add) .mdc-chip__icon--leading,\n      .mdc-chip.area_id.add {\n        background: #fed6a4;\n      }\n      .mdc-chip.device_id:not(.add) {\n        border: 2px solid #a8e1fb;\n        background: var(--card-background-color);\n      }\n      .mdc-chip.device_id:not(.add) .mdc-chip__icon--leading,\n      .mdc-chip.device_id.add {\n        background: #a8e1fb;\n      }\n      .mdc-chip.entity_id:not(.add) {\n        border: 2px solid #d2e7b9;\n        background: var(--card-background-color);\n      }\n      .mdc-chip.entity_id:not(.add) .mdc-chip__icon--leading,\n      .mdc-chip.entity_id.add {\n        background: #d2e7b9;\n      }\n      .mdc-chip:hover {\n        z-index: 5;\n      }\n      paper-tooltip.expand {\n        min-width: 200px;\n      }\n      :host([disabled]) .mdc-chip {\n        opacity: var(--light-disabled-opacity);\n        pointer-events: none;\n      }\n    `}}]}}),Hl(m)),v([w(\"ha-selector-target\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"selector\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_entityPlaformLookup\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_configEntries\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"method\",key:\"hassSubscribe\",value:function(){return[Ul(this.hass.connection,(e=>{const t={};for(const i of e)i.platform&&(t[i.entity_id]=i.platform);this._entityPlaformLookup=t}))]}},{kind:\"method\",key:\"updated\",value:function(e){if(e.has(\"selector\")){var t,i;e.get(\"selector\")!==this.selector&&(null!==(t=this.selector.target.device)&&void 0!==t&&t.integration||null!==(i=this.selector.target.entity)&&void 0!==i&&i.integration)&&this._loadConfigEntries()}}},{kind:\"method\",key:\"render\",value:function(){var e,t;return k`<ha-target-picker\n      .hass=${this.hass}\n      .value=${this.value}\n      .helper=${this.helper}\n      .deviceFilter=${this._filterDevices}\n      .entityRegFilter=${this._filterRegEntities}\n      .entityFilter=${this._filterEntities}\n      .includeDeviceClasses=${null!==(e=this.selector.target.entity)&&void 0!==e&&e.device_class?[this.selector.target.entity.device_class]:void 0}\n      .includeDomains=${null!==(t=this.selector.target.entity)&&void 0!==t&&t.domain?[this.selector.target.entity.domain]:void 0}\n      .disabled=${this.disabled}\n    ></ha-target-picker>`}},{kind:\"field\",key:\"_filterEntities\",value(){return e=>{var t,i,a,n;if((null!==(t=this.selector.target.entity)&&void 0!==t&&t.integration||null!==(i=this.selector.target.device)&&void 0!==i&&i.integration)&&(!this._entityPlaformLookup||this._entityPlaformLookup[e.entity_id]!==((null===(a=this.selector.target.entity)||void 0===a?void 0:a.integration)||(null===(n=this.selector.target.device)||void 0===n?void 0:n.integration))))return!1;return!0}}},{kind:\"field\",key:\"_filterRegEntities\",value(){return e=>{var t;return null===(t=this.selector.target.entity)||void 0===t||!t.integration||e.platform===this.selector.target.entity.integration}}},{kind:\"field\",key:\"_filterDevices\",value(){return e=>{var t,i,a,n,o;if(null!==(t=this.selector.target.device)&&void 0!==t&&t.manufacturer&&e.manufacturer!==this.selector.target.device.manufacturer)return!1;if(null!==(i=this.selector.target.device)&&void 0!==i&&i.model&&e.model!==this.selector.target.device.model)return!1;if((null!==(a=this.selector.target.device)&&void 0!==a&&a.integration||null!==(n=this.selector.target.entity)&&void 0!==n&&n.integration)&&(null===(o=this._configEntries)||void 0===o||!o.some((t=>e.config_entries.includes(t.entry_id)))))return!1;return!0}}},{kind:\"method\",key:\"_loadConfigEntries\",value:async function(){this._configEntries=(await qa(this.hass)).filter((e=>{var t,i;return e.domain===(null===(t=this.selector.target.device)||void 0===t?void 0:t.integration)||e.domain===(null===(i=this.selector.target.entity)||void 0===i?void 0:i.integration)}))}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      ha-target-picker {\n        display: block;\n      }\n    `}}]}}),Hl(m)),v([w(\"ha-selector-template\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!0},{kind:\"method\",key:\"render\",value:function(){return k`\n      ${this.label?k`<p>${this.label}${this.required?\" *\":\"\"}</p>`:\"\"}\n      <ha-code-editor\n        mode=\"jinja2\"\n        .hass=${this.hass}\n        .value=${this.value}\n        .readOnly=${this.disabled}\n        autofocus\n        autocomplete-entities\n        autocomplete-icons\n        @value-changed=${this._handleChange}\n        dir=\"ltr\"\n      ></ha-code-editor>\n      ${this.helper?k`<ha-input-helper-text>${this.helper}</ha-input-helper-text>`:\"\"}\n    `}},{kind:\"method\",key:\"_handleChange\",value:function(t){const i=t.target.value;this.value!==i&&e(this,\"value-changed\",{value:i})}}]}}),m),v([w(\"ha-selector-text\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"placeholder\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f()],key:\"selector\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!0},{kind:\"field\",decorators:[Vi()],key:\"_unmaskedPassword\",value:()=>!1},{kind:\"method\",key:\"render\",value:function(){var e,t,i,a,n;return null!==(e=this.selector.text)&&void 0!==e&&e.multiline?k`<ha-textarea\n        .label=${this.label}\n        .placeholder=${this.placeholder}\n        .value=${this.value||\"\"}\n        .helper=${this.helper}\n        helperPersistent\n        .disabled=${this.disabled}\n        @input=${this._handleChange}\n        autocapitalize=\"none\"\n        autocomplete=\"off\"\n        spellcheck=\"false\"\n        .required=${this.required}\n        autogrow\n      ></ha-textarea>`:k`<ha-textfield\n        .value=${this.value||\"\"}\n        .placeholder=${this.placeholder||\"\"}\n        .helper=${this.helper}\n        helperPersistent\n        .disabled=${this.disabled}\n        .type=${this._unmaskedPassword?\"text\":null===(t=this.selector.text)||void 0===t?void 0:t.type}\n        @input=${this._handleChange}\n        .label=${this.label||\"\"}\n        .suffix=${\"password\"===(null===(i=this.selector.text)||void 0===i?void 0:i.type)?k`<div style=\"width: 24px\"></div>`:null===(a=this.selector.text)||void 0===a?void 0:a.suffix}\n        .required=${this.required}\n      ></ha-textfield>\n      ${\"password\"===(null===(n=this.selector.text)||void 0===n?void 0:n.type)?k`<ha-icon-button\n            toggles\n            .label=${(this._unmaskedPassword?\"Hide\":\"Show\")+\" password\"}\n            @click=${this._toggleUnmaskedPassword}\n            .path=${this._unmaskedPassword?Ia:ie}\n          ></ha-icon-button>`:\"\"}`}},{kind:\"method\",key:\"_toggleUnmaskedPassword\",value:function(){this._unmaskedPassword=!this._unmaskedPassword}},{kind:\"method\",key:\"_handleChange\",value:function(t){let i=t.target.value;this.value!==i&&(\"\"!==i||this.required||(i=void 0),e(this,\"value-changed\",{value:i}))}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      :host {\n        display: block;\n        position: relative;\n      }\n      ha-textarea,\n      ha-textfield {\n        width: 100%;\n      }\n      ha-icon-button {\n        position: absolute;\n        top: 16px;\n        right: 16px;\n        --mdc-icon-button-size: 24px;\n        --mdc-icon-size: 20px;\n        color: var(--secondary-text-color);\n        inset-inline-start: initial;\n        inset-inline-end: 16px;\n        direction: var(--direction);\n      }\n    `}}]}}),m),v([w(\"ha-selector-time\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"selector\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!1},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-time-input\n        .value=${this.value}\n        .locale=${this.hass.locale}\n        .disabled=${this.disabled}\n        .required=${this.required}\n        .helper=${this.helper}\n        .label=${this.label}\n        enable-second\n      ></ha-time-input>\n    `}}]}}),m),v([w(\"ha-selector-icon\")],(function(t,i){return{F:class extends i{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"selector\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean,reflect:!0})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!0},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-icon-picker\n        .label=${this.label}\n        .value=${this.value}\n        .required=${this.required}\n        .disabled=${this.disabled}\n        .helper=${this.helper}\n        .fallbackPath=${this.selector.icon.fallbackPath}\n        .placeholder=${this.selector.icon.placeholder}\n        @value-changed=${this._valueChanged}\n      ></ha-icon-picker>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){e(this,\"value-changed\",{value:t.detail.value})}}]}}),m),v([w(\"ha-theme-picker\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean,reflect:!0})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!1},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-select\n        .label=${this.label||this.hass.localize(\"ui.components.theme_picker.theme\")}\n        .value=${this.value}\n        .required=${this.required}\n        .disabled=${this.disabled}\n        @selected=${this._changed}\n        @closed=${Ra}\n        fixedMenuPosition\n        naturalMenuWidth\n      >\n        <mwc-list-item value=\"remove\"\n          >${this.hass.localize(\"ui.components.theme_picker.no_theme\")}</mwc-list-item\n        >\n        ${Object.keys(this.hass.themes.themes).sort().map((e=>k`<mwc-list-item .value=${e}>${e}</mwc-list-item>`))}\n      </ha-select>\n    `}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      ha-select {\n        width: 100%;\n      }\n    `}},{kind:\"method\",key:\"_changed\",value:function(t){this.hass&&\"\"!==t.target.value&&(this.value=\"remove\"===t.target.value?void 0:t.target.value,e(this,\"value-changed\",{value:this.value}))}}]}}),m),v([w(\"ha-selector-theme\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"selector\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean,reflect:!0})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!0},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-theme-picker\n        .hass=${this.hass}\n        .value=${this.value}\n        .label=${this.label}\n        .disabled=${this.disabled}\n        .required=${this.required}\n      ></ha-theme-picker>\n    `}}]}}),m);const zc=(e,t)=>e.tileLayer(`https://{s}.basemaps.cartocdn.com/${t?\"dark_all\":\"light_all\"}/{z}/{x}/{y}${e.Browser.retina?\"@2x.png\":\".png\"}`,{attribution:'&copy; <a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a>, &copy; <a href=\"https://carto.com/attributions\">CARTO</a>',subdomains:\"abcd\",minZoom:0,maxZoom:20});let Sc=v(null,(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:\"entity-id\"})],key:\"entityId\",value:void 0},{kind:\"field\",decorators:[f({attribute:\"entity-name\"})],key:\"entityName\",value:void 0},{kind:\"field\",decorators:[f({attribute:\"entity-picture\"})],key:\"entityPicture\",value:void 0},{kind:\"field\",decorators:[f({attribute:\"entity-color\"})],key:\"entityColor\",value:void 0},{kind:\"method\",key:\"render\",value:function(){return k`\n      <div\n        class=\"marker\"\n        style=${ji({\"border-color\":this.entityColor})}\n        @click=${this._badgeTap}\n      >\n        ${this.entityPicture?k`<div\n              class=\"entity-picture\"\n              style=${ji({\"background-image\":`url(${this.entityPicture})`})}\n            ></div>`:this.entityName}\n      </div>\n    `}},{kind:\"method\",key:\"_badgeTap\",value:function(t){t.stopPropagation(),this.entityId&&e(this,\"hass-more-info\",{entityId:this.entityId})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      .marker {\n        display: flex;\n        justify-content: center;\n        align-items: center;\n        box-sizing: border-box;\n        overflow: hidden;\n        width: 48px;\n        height: 48px;\n        font-size: var(--ha-marker-font-size, 1.5em);\n        border-radius: 50%;\n        border: 1px solid var(--ha-marker-color, var(--primary-color));\n        color: var(--primary-text-color);\n        background-color: var(--card-background-color);\n      }\n      .entity-picture {\n        background-size: cover;\n        height: 100%;\n        width: 100%;\n      }\n    `}}]}}),m);customElements.define(\"ha-entity-marker\",Sc);const Lc=async()=>{\"function\"!=typeof ResizeObserver&&(window.ResizeObserver=(await import(\"./c.004a7b01.js\")).default)},Tc=e=>\"string\"==typeof e?e:e.entity_id;v([w(\"ha-map\")],(function(e,t){class a extends t{constructor(...t){super(...t),e(this)}}return{F:a,d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"entities\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"paths\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"layers\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"autoFit\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"fitZones\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"darkMode\",value:void 0},{kind:\"field\",decorators:[f({type:Number})],key:\"zoom\",value:()=>14},{kind:\"field\",decorators:[Vi()],key:\"_loaded\",value:()=>!1},{kind:\"field\",key:\"leafletMap\",value:void 0},{kind:\"field\",key:\"Leaflet\",value:void 0},{kind:\"field\",key:\"_tileLayer\",value:void 0},{kind:\"field\",key:\"_resizeObserver\",value:void 0},{kind:\"field\",key:\"_mapItems\",value:()=>[]},{kind:\"field\",key:\"_mapZones\",value:()=>[]},{kind:\"field\",key:\"_mapPaths\",value:()=>[]},{kind:\"method\",key:\"connectedCallback\",value:function(){_(y(a.prototype),\"connectedCallback\",this).call(this),this._loadMap(),this._attachObserver()}},{kind:\"method\",key:\"disconnectedCallback\",value:function(){_(y(a.prototype),\"disconnectedCallback\",this).call(this),this.leafletMap&&(this.leafletMap.remove(),this.leafletMap=void 0,this.Leaflet=void 0),this._loaded=!1,this._resizeObserver&&this._resizeObserver.unobserve(this)}},{kind:\"method\",key:\"update\",value:function(e){var t;if(_(y(a.prototype),\"update\",this).call(this,e),!this._loaded)return;const i=e.get(\"hass\");if(e.has(\"_loaded\")||e.has(\"entities\"))this._drawEntities();else if(this._loaded&&i&&this.entities)for(const e of this.entities)if(i.states[Tc(e)]!==this.hass.states[Tc(e)]){this._drawEntities();break}if((e.has(\"_loaded\")||e.has(\"paths\"))&&this._drawPaths(),(e.has(\"_loaded\")||e.has(\"layers\"))&&this._drawLayers(e.get(\"layers\")),(e.has(\"_loaded\")||(e.has(\"entities\")||e.has(\"layers\"))&&this.autoFit)&&this.fitMap(),e.has(\"zoom\")&&this.leafletMap.setZoom(this.zoom),!e.has(\"darkMode\")&&(!e.has(\"hass\")||i&&i.themes.darkMode===this.hass.themes.darkMode))return;const n=null!==(t=this.darkMode)&&void 0!==t?t:this.hass.themes.darkMode;this._tileLayer=((e,t,i,a)=>(t.removeLayer(i),(i=zc(e,a)).addTo(t),i))(this.Leaflet,this.leafletMap,this._tileLayer,n),this.shadowRoot.getElementById(\"map\").classList.toggle(\"dark\",n)}},{kind:\"method\",key:\"_loadMap\",value:async function(){var e;let t=this.shadowRoot.getElementById(\"map\");t||(t=document.createElement(\"div\"),t.id=\"map\",this.shadowRoot.append(t));const i=null!==(e=this.darkMode)&&void 0!==e?e:this.hass.themes.darkMode;[this.leafletMap,this.Leaflet,this._tileLayer]=await(async(e,t)=>{if(!e.parentNode)throw new Error(\"Cannot setup Leaflet map on disconnected element\");const i=(await import(\"./c.99c1c4ba.js\")).default;i.Icon.Default.imagePath=\"/static/images/leaflet/images/\";const a=i.map(e),n=document.createElement(\"link\");return n.setAttribute(\"href\",\"/static/images/leaflet/leaflet.css\"),n.setAttribute(\"rel\",\"stylesheet\"),e.parentNode.appendChild(n),a.setView([52.3731339,4.8903147],13),[a,i,zc(i,Boolean(t)).addTo(a)]})(t,i),this.shadowRoot.getElementById(\"map\").classList.toggle(\"dark\",i),this._loaded=!0}},{kind:\"method\",key:\"fitMap\",value:function(){var e,t;if(!this.leafletMap||!this.Leaflet||!this.hass)return;if(!(this._mapItems.length||null!==(e=this.layers)&&void 0!==e&&e.length))return void this.leafletMap.setView(new this.Leaflet.LatLng(this.hass.config.latitude,this.hass.config.longitude),this.zoom);let i=this.Leaflet.latLngBounds(this._mapItems?this._mapItems.map((e=>e.getLatLng())):[]);var a;this.fitZones&&(null===(a=this._mapZones)||void 0===a||a.forEach((e=>{i.extend(\"getBounds\"in e?e.getBounds():e.getLatLng())})));null===(t=this.layers)||void 0===t||t.forEach((e=>{i.extend(\"getBounds\"in e?e.getBounds():e.getLatLng())})),this.layers||(i=i.pad(.5)),this.leafletMap.fitBounds(i,{maxZoom:this.zoom})}},{kind:\"method\",key:\"_drawLayers\",value:function(e){if(e&&e.forEach((e=>e.remove())),!this.layers)return;const t=this.leafletMap;this.layers.forEach((e=>{t.addLayer(e)}))}},{kind:\"method\",key:\"_drawPaths\",value:function(){const e=this.hass,t=this.leafletMap,i=this.Leaflet;if(!e||!t||!i)return;if(this._mapPaths.length&&(this._mapPaths.forEach((e=>e.remove())),this._mapPaths=[]),!this.paths)return;const a=getComputedStyle(this).getPropertyValue(\"--dark-primary-color\");this.paths.forEach((e=>{let n,o;e.gradualOpacity&&(n=e.gradualOpacity/(e.points.length-2),o=1-e.gradualOpacity);for(let t=0;t<e.points.length-1;t++){const s=e.gradualOpacity?o+t*n:void 0;this._mapPaths.push(i.circleMarker(e.points[t],{radius:3,color:e.color||a,opacity:s,fillOpacity:s,interactive:!1})),this._mapPaths.push(i.polyline([e.points[t],e.points[t+1]],{color:e.color||a,opacity:s,interactive:!1}))}const s=e.points.length-1;if(s>=0){const t=e.gradualOpacity?o+s*n:void 0;this._mapPaths.push(i.circleMarker(e.points[s],{radius:3,color:e.color||a,opacity:t,fillOpacity:t,interactive:!1}))}this._mapPaths.forEach((e=>t.addLayer(e)))}))}},{kind:\"method\",key:\"_drawEntities\",value:function(){var e;const t=this.hass,i=this.leafletMap,a=this.Leaflet;if(!t||!i||!a)return;if(this._mapItems.length&&(this._mapItems.forEach((e=>e.remove())),this._mapItems=[]),this._mapZones.length&&(this._mapZones.forEach((e=>e.remove())),this._mapZones=[]),!this.entities)return;const n=getComputedStyle(this),o=n.getPropertyValue(\"--accent-color\"),s=n.getPropertyValue(\"--dark-primary-color\"),r=(null!==(e=this.darkMode)&&void 0!==e?e:this.hass.themes.darkMode)?\"dark\":\"light\";for(const e of this.entities){const i=t.states[Tc(e)];if(!i)continue;const n=Sn(i),{latitude:l,longitude:d,passive:c,icon:u,radius:h,entity_picture:p,gps_accuracy:v}=i.attributes;if(!l||!d)continue;if(\"zone\"===as(i)){if(c)continue;let e=\"\";if(u){const t=document.createElement(\"ha-icon\");t.setAttribute(\"icon\",u),e=t.outerHTML}else{const t=document.createElement(\"span\");t.innerHTML=n,e=t.outerHTML}this._mapZones.push(a.marker([l,d],{icon:a.divIcon({html:e,iconSize:[24,24],className:r}),interactive:!1,title:n})),this._mapZones.push(a.circle([l,d],{interactive:!1,color:o,radius:h}));continue}const m=n.split(\" \").map((e=>e[0])).join(\"\").substr(0,3);this._mapItems.push(a.marker([l,d],{icon:a.divIcon({html:`\\n              <ha-entity-marker\\n                entity-id=\"${Tc(e)}\"\\n                entity-name=\"${m}\"\\n                entity-picture=\"${p?this.hass.hassUrl(p):\"\"}\"\\n                ${\"string\"!=typeof e?`entity-color=\"${e.color}\"`:\"\"}\\n              ></ha-entity-marker>\\n            `,iconSize:[48,48],className:\"\"}),title:Sn(i)})),v&&this._mapItems.push(a.circle([l,d],{interactive:!1,color:s,radius:v}))}this._mapItems.forEach((e=>i.addLayer(e))),this._mapZones.forEach((e=>i.addLayer(e)))}},{kind:\"method\",key:\"_attachObserver\",value:async function(){this._resizeObserver||(await Lc(),this._resizeObserver=new ResizeObserver((()=>{var e;null===(e=this.leafletMap)||void 0===e||e.invalidateSize({debounceMoveend:!0})}))),this._resizeObserver.observe(this)}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      :host {\n        display: block;\n        height: 300px;\n      }\n      #map {\n        height: 100%;\n      }\n      #map.dark {\n        background: #090909;\n      }\n      .light {\n        color: #000000;\n      }\n      .dark {\n        color: #ffffff;\n      }\n      .leaflet-marker-draggable {\n        cursor: move !important;\n      }\n      .leaflet-edit-resize {\n        border-radius: 50%;\n        cursor: nesw-resize !important;\n      }\n      .named-icon {\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        flex-direction: column;\n        text-align: center;\n        color: var(--primary-text-color);\n      }\n      .leaflet-pane {\n        z-index: 0 !important;\n      }\n      .leaflet-control,\n      .leaflet-top,\n      .leaflet-bottom {\n        z-index: 1 !important;\n      }\n    `}}]}}),Gi),v([w(\"ha-locations-editor\")],(function(t,a){class n extends a{constructor(){super(),t(this),import(\"./c.99c1c4ba.js\").then((e=>{import(\"./c.bc53dda1.js\").then((()=>{this.Leaflet=e.default,this._updateMarkers(),this.updateComplete.then((()=>this.fitMap()))}))}))}}return{F:n,d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"locations\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"autoFit\",value:()=>!1},{kind:\"field\",decorators:[f({type:Number})],key:\"zoom\",value:()=>16},{kind:\"field\",decorators:[f({type:Boolean})],key:\"darkMode\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_locationMarkers\",value:void 0},{kind:\"field\",decorators:[Vi()],key:\"_circles\",value:()=>({})},{kind:\"field\",decorators:[g(\"ha-map\",!0)],key:\"map\",value:void 0},{kind:\"field\",key:\"Leaflet\",value:void 0},{kind:\"method\",key:\"fitMap\",value:function(){this.map.fitMap()}},{kind:\"method\",key:\"fitMarker\",value:function(e){if(!this.map.leafletMap||!this._locationMarkers)return;const t=this._locationMarkers[e];if(t)if(\"getBounds\"in t)this.map.leafletMap.fitBounds(t.getBounds()),t.bringToFront();else{const i=this._circles[e];i?this.map.leafletMap.fitBounds(i.getBounds()):this.map.leafletMap.setView(t.getLatLng(),this.zoom)}}},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-map\n        .hass=${this.hass}\n        .layers=${this._getLayers(this._circles,this._locationMarkers)}\n        .zoom=${this.zoom}\n        .autoFit=${this.autoFit}\n        .darkMode=${this.darkMode}\n      ></ha-map>\n      ${this.helper?k`<ha-input-helper-text>${this.helper}</ha-input-helper-text>`:\"\"}\n    `}},{kind:\"field\",key:\"_getLayers\",value:()=>Ri(((e,t)=>{const i=[];return Array.prototype.push.apply(i,Object.values(e)),t&&Array.prototype.push.apply(i,Object.values(t)),i}))},{kind:\"method\",key:\"willUpdate\",value:function(e){_(y(n.prototype),\"willUpdate\",this).call(this,e),this.Leaflet&&e.has(\"locations\")&&this._updateMarkers()}},{kind:\"method\",key:\"_updateLocation\",value:function(t){const i=t.target,a=i.getLatLng();let n=a.lng;Math.abs(n)>180&&(n=(n%360+540)%360-180);const o=[a.lat,n];e(this,\"location-updated\",{id:i.id,location:o},{bubbles:!1})}},{kind:\"method\",key:\"_updateRadius\",value:function(t){const i=t.target,a=this._locationMarkers[i.id];e(this,\"radius-updated\",{id:i.id,radius:a.getRadius()},{bubbles:!1})}},{kind:\"method\",key:\"_markerClicked\",value:function(t){const i=t.target;e(this,\"marker-clicked\",{id:i.id},{bubbles:!1})}},{kind:\"method\",key:\"_updateMarkers\",value:function(){if(!this.locations||!this.locations.length)return this._circles={},void(this._locationMarkers=void 0);const t={},i={},a=getComputedStyle(this).getPropertyValue(\"--accent-color\");this.locations.forEach((e=>{let n;if(e.icon){const t=document.createElement(\"div\");t.className=\"named-icon\",e.name&&(t.innerText=e.name);const i=document.createElement(\"ha-icon\");i.setAttribute(\"icon\",e.icon),t.prepend(i),n=this.Leaflet.divIcon({html:t.outerHTML,iconSize:[24,24],className:\"light\"})}if(e.radius){const o=this.Leaflet.circle([e.latitude,e.longitude],{color:e.radius_color||a,radius:e.radius});e.radius_editable||e.location_editable?(o.editing.enable(),o.addEventListener(\"add\",(()=>{const t=o.editing._moveMarker,i=o.editing._resizeMarkers[0];n&&t.setIcon(n),i.id=t.id=e.id,t.addEventListener(\"dragend\",(e=>this._updateLocation(e))).addEventListener(\"click\",(e=>this._markerClicked(e))),e.radius_editable?i.addEventListener(\"dragend\",(e=>this._updateRadius(e))):i.remove()})),t[e.id]=o):i[e.id]=o}if(!e.radius||!e.radius_editable&&!e.location_editable){const i={title:e.name,draggable:e.location_editable};n&&(i.icon=n);const a=this.Leaflet.marker([e.latitude,e.longitude],i).addEventListener(\"dragend\",(e=>this._updateLocation(e))).addEventListener(\"click\",(e=>this._markerClicked(e)));a.id=e.id,t[e.id]=a}})),this._circles=i,this._locationMarkers=t,e(this,\"markers-updated\")}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return i`\n      ha-map {\n        display: block;\n        height: 100%;\n      }\n    `}}]}}),m),v([w(\"ha-selector-location\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f({attribute:!1})],key:\"selector\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean,reflect:!0})],key:\"disabled\",value:()=>!1},{kind:\"method\",key:\"render\",value:function(){return k`\n      <ha-locations-editor\n        class=\"flex\"\n        .hass=${this.hass}\n        .helper=${this.helper}\n        .locations=${this._location(this.selector,this.value)}\n        @location-updated=${this._locationChanged}\n        @radius-updated=${this._radiusChanged}\n      ></ha-locations-editor>\n    `}},{kind:\"field\",key:\"_location\",value(){return Ri(((e,t)=>{const i=getComputedStyle(this),a=e.location.radius?i.getPropertyValue(\"--zone-radius-color\")||i.getPropertyValue(\"--accent-color\"):void 0;return[{id:\"location\",latitude:(null==t?void 0:t.latitude)||this.hass.config.latitude,longitude:(null==t?void 0:t.longitude)||this.hass.config.longitude,radius:e.location.radius?(null==t?void 0:t.radius)||1e3:void 0,radius_color:a,icon:e.location.icon||e.location.radius?\"mdi:map-marker-radius\":\"mdi:map-marker\",location_editable:!0,radius_editable:!0}]}))}},{kind:\"method\",key:\"_locationChanged\",value:function(t){const[i,a]=t.detail.location;e(this,\"value-changed\",{value:{...this.value,latitude:i,longitude:a}})}},{kind:\"method\",key:\"_radiusChanged\",value:function(t){const i=t.detail.radius;e(this,\"value-changed\",{value:{...this.value,radius:i}})}},{kind:\"field\",static:!0,key:\"styles\",value:()=>i`\n    :host {\n      display: block;\n      height: 400px;\n    }\n  `}]}}),m);customElements.define(\"ha-labeled-slider\",class extends n{static get template(){return o`\n      <style>\n        :host {\n          display: block;\n        }\n\n        .title {\n          margin: 5px 0 8px;\n          color: var(--primary-text-color);\n        }\n\n        .slider-container {\n          display: flex;\n        }\n\n        ha-icon {\n          margin-top: 4px;\n          color: var(--secondary-text-color);\n        }\n\n        ha-slider {\n          flex-grow: 1;\n          background-image: var(--ha-slider-background);\n          border-radius: 4px;\n        }\n      </style>\n\n      <div class=\"title\">[[_getTitle()]]</div>\n      <div class=\"extra-container\"><slot name=\"extra\"></slot></div>\n      <div class=\"slider-container\">\n        <ha-icon icon=\"[[icon]]\" hidden$=\"[[!icon]]\"></ha-icon>\n        <ha-slider\n          min=\"[[min]]\"\n          max=\"[[max]]\"\n          step=\"[[step]]\"\n          pin=\"[[pin]]\"\n          disabled=\"[[disabled]]\"\n          value=\"{{value}}\"\n        ></ha-slider>\n      </div>\n      <template is=\"dom-if\" if=\"[[helper]]\">\n        <ha-input-helper-text>[[helper]]</ha-input-helper-text>\n      </template>\n    `}_getTitle(){return`${this.caption}${this.caption&&this.required?\" *\":\"\"}`}static get properties(){return{caption:String,disabled:Boolean,required:Boolean,min:Number,max:Number,pin:Boolean,step:Number,helper:String,extra:{type:Boolean,value:!1},ignoreBarTouch:{type:Boolean,value:!0},icon:{type:String,value:\"\"},value:{type:Number,notify:!0}}}}),v([w(\"ha-selector-color_temp\")],(function(t,a){return{F:class extends a{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"selector\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean,reflect:!0})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!0},{kind:\"method\",key:\"render\",value:function(){var e,t,i,a;return k`\n      <ha-labeled-slider\n        pin\n        icon=\"hass:thermometer\"\n        .caption=${this.label||\"\"}\n        .min=${null!==(e=null===(t=this.selector.color_temp)||void 0===t?void 0:t.min_mireds)&&void 0!==e?e:153}\n        .max=${null!==(i=null===(a=this.selector.color_temp)||void 0===a?void 0:a.max_mireds)&&void 0!==i?i:500}\n        .value=${this.value}\n        .disabled=${this.disabled}\n        .helper=${this.helper}\n        .required=${this.required}\n        @change=${this._valueChanged}\n      ></ha-labeled-slider>\n    `}},{kind:\"method\",key:\"_valueChanged\",value:function(t){e(this,\"value-changed\",{value:Number(t.target.value)})}},{kind:\"field\",static:!0,key:\"styles\",value:()=>i`\n    ha-labeled-slider {\n      --ha-slider-background: -webkit-linear-gradient(\n        right,\n        rgb(255, 160, 0) 0%,\n        white 50%,\n        rgb(166, 209, 255) 100%\n      );\n      /* The color temp minimum value shouldn't be rendered differently. It's not \"off\". */\n      --paper-slider-knob-start-border-color: var(--primary-color);\n    }\n  `}]}}),m);let Oc=v([w(\"ha-selector\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[f()],key:\"hass\",value:void 0},{kind:\"field\",decorators:[f()],key:\"selector\",value:void 0},{kind:\"field\",decorators:[f()],key:\"value\",value:void 0},{kind:\"field\",decorators:[f()],key:\"label\",value:void 0},{kind:\"field\",decorators:[f()],key:\"helper\",value:void 0},{kind:\"field\",decorators:[f()],key:\"placeholder\",value:void 0},{kind:\"field\",decorators:[f({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[f({type:Boolean})],key:\"required\",value:()=>!0},{kind:\"field\",decorators:[f()],key:\"context\",value:void 0},{kind:\"method\",key:\"focus\",value:function(){var e,t;null===(e=this.shadowRoot)||void 0===e||null===(t=e.getElementById(\"selector\"))||void 0===t||t.focus()}},{kind:\"get\",key:\"_type\",value:function(){return Object.keys(this.selector)[0]}},{kind:\"method\",key:\"render\",value:function(){return k`\n      ${za(`ha-selector-${this._type}`,{hass:this.hass,selector:this.selector,value:this.value,label:this.label,placeholder:this.placeholder,disabled:this.disabled,required:this.required,helper:this.helper,context:this.context,id:\"selector\"})}\n    `}}]}}),m);var Pc=Object.freeze({__proto__:null,HaSelector:Oc});export{vd as B,md as M,is as U,hc as a,fd as b,Qa as c,bd as d,pc as e,uc as f,os as g,Pc as h,Lc as i,tc as l,gc as t};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.9d6aaabf.js",
    "content": "import{c as e,a as n,u as t,g as r}from\"./c.743a15a1.js\";import{$ as o}from\"./main-a0d7432d.js\";import\"./c.d2d70fc0.js\";var a=e((function(e,n){e.exports=function(){function e(n){return e=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},e(n)}function n(e,t){return n=Object.setPrototypeOf||function(e,n){return e.__proto__=n,e},n(e,t)}function t(){if(\"undefined\"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(\"function\"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}function r(e,o,a){return r=t()?Reflect.construct:function(e,t,r){var o=[null];o.push.apply(o,t);var a=new(Function.bind.apply(e,o));return r&&n(a,r.prototype),a},r.apply(null,arguments)}function o(e){return a(e)||i(e)||s(e)||u()}function a(e){if(Array.isArray(e))return l(e)}function i(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}function s(e,n){if(e){if(\"string\"==typeof e)return l(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t?Array.from(e):\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?l(e,n):void 0}}function l(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}function u(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var c=Object.hasOwnProperty,d=Object.setPrototypeOf,h=Object.isFrozen,p=Object.getPrototypeOf,m=Object.getOwnPropertyDescriptor,g=Object.freeze,_=Object.seal,f=Object.create,b=\"undefined\"!=typeof Reflect&&Reflect,w=b.apply,k=b.construct;w||(w=function(e,n,t){return e.apply(n,t)}),g||(g=function(e){return e}),_||(_=function(e){return e}),k||(k=function(e,n){return r(e,o(n))});var y=S(Array.prototype.forEach),D=S(Array.prototype.pop),A=S(Array.prototype.push),x=S(String.prototype.toLowerCase),v=S(String.prototype.match),E=S(String.prototype.replace),C=S(String.prototype.indexOf),F=S(String.prototype.trim),B=S(RegExp.prototype.test),z=N(TypeError);function S(e){return function(n){for(var t=arguments.length,r=new Array(t>1?t-1:0),o=1;o<t;o++)r[o-1]=arguments[o];return w(e,n,r)}}function N(e){return function(){for(var n=arguments.length,t=new Array(n),r=0;r<n;r++)t[r]=arguments[r];return k(e,t)}}function T(e,n){d&&d(e,null);for(var t=n.length;t--;){var r=n[t];if(\"string\"==typeof r){var o=x(r);o!==r&&(h(n)||(n[t]=o),r=o)}e[r]=!0}return e}function O(e){var n,t=f(null);for(n in e)w(c,e,[n])&&(t[n]=e[n]);return t}function j(e,n){for(;null!==e;){var t=m(e,n);if(t){if(t.get)return S(t.get);if(\"function\"==typeof t.value)return S(t.value)}e=p(e)}function r(e){return console.warn(\"fallback value for\",e),null}return r}var R=g([\"a\",\"abbr\",\"acronym\",\"address\",\"area\",\"article\",\"aside\",\"audio\",\"b\",\"bdi\",\"bdo\",\"big\",\"blink\",\"blockquote\",\"body\",\"br\",\"button\",\"canvas\",\"caption\",\"center\",\"cite\",\"code\",\"col\",\"colgroup\",\"content\",\"data\",\"datalist\",\"dd\",\"decorator\",\"del\",\"details\",\"dfn\",\"dialog\",\"dir\",\"div\",\"dl\",\"dt\",\"element\",\"em\",\"fieldset\",\"figcaption\",\"figure\",\"font\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"header\",\"hgroup\",\"hr\",\"html\",\"i\",\"img\",\"input\",\"ins\",\"kbd\",\"label\",\"legend\",\"li\",\"main\",\"map\",\"mark\",\"marquee\",\"menu\",\"menuitem\",\"meter\",\"nav\",\"nobr\",\"ol\",\"optgroup\",\"option\",\"output\",\"p\",\"picture\",\"pre\",\"progress\",\"q\",\"rp\",\"rt\",\"ruby\",\"s\",\"samp\",\"section\",\"select\",\"shadow\",\"small\",\"source\",\"spacer\",\"span\",\"strike\",\"strong\",\"style\",\"sub\",\"summary\",\"sup\",\"table\",\"tbody\",\"td\",\"template\",\"textarea\",\"tfoot\",\"th\",\"thead\",\"time\",\"tr\",\"track\",\"tt\",\"u\",\"ul\",\"var\",\"video\",\"wbr\"]),M=g([\"svg\",\"a\",\"altglyph\",\"altglyphdef\",\"altglyphitem\",\"animatecolor\",\"animatemotion\",\"animatetransform\",\"circle\",\"clippath\",\"defs\",\"desc\",\"ellipse\",\"filter\",\"font\",\"g\",\"glyph\",\"glyphref\",\"hkern\",\"image\",\"line\",\"lineargradient\",\"marker\",\"mask\",\"metadata\",\"mpath\",\"path\",\"pattern\",\"polygon\",\"polyline\",\"radialgradient\",\"rect\",\"stop\",\"style\",\"switch\",\"symbol\",\"text\",\"textpath\",\"title\",\"tref\",\"tspan\",\"view\",\"vkern\"]),I=g([\"feBlend\",\"feColorMatrix\",\"feComponentTransfer\",\"feComposite\",\"feConvolveMatrix\",\"feDiffuseLighting\",\"feDisplacementMap\",\"feDistantLight\",\"feFlood\",\"feFuncA\",\"feFuncB\",\"feFuncG\",\"feFuncR\",\"feGaussianBlur\",\"feImage\",\"feMerge\",\"feMergeNode\",\"feMorphology\",\"feOffset\",\"fePointLight\",\"feSpecularLighting\",\"feSpotLight\",\"feTile\",\"feTurbulence\"]),L=g([\"animate\",\"color-profile\",\"cursor\",\"discard\",\"fedropshadow\",\"font-face\",\"font-face-format\",\"font-face-name\",\"font-face-src\",\"font-face-uri\",\"foreignobject\",\"hatch\",\"hatchpath\",\"mesh\",\"meshgradient\",\"meshpatch\",\"meshrow\",\"missing-glyph\",\"script\",\"set\",\"solidcolor\",\"unknown\",\"use\"]),$=g([\"math\",\"menclose\",\"merror\",\"mfenced\",\"mfrac\",\"mglyph\",\"mi\",\"mlabeledtr\",\"mmultiscripts\",\"mn\",\"mo\",\"mover\",\"mpadded\",\"mphantom\",\"mroot\",\"mrow\",\"ms\",\"mspace\",\"msqrt\",\"mstyle\",\"msub\",\"msup\",\"msubsup\",\"mtable\",\"mtd\",\"mtext\",\"mtr\",\"munder\",\"munderover\"]),U=g([\"maction\",\"maligngroup\",\"malignmark\",\"mlongdiv\",\"mscarries\",\"mscarry\",\"msgroup\",\"mstack\",\"msline\",\"msrow\",\"semantics\",\"annotation\",\"annotation-xml\",\"mprescripts\",\"none\"]),q=g([\"#text\"]),P=g([\"accept\",\"action\",\"align\",\"alt\",\"autocapitalize\",\"autocomplete\",\"autopictureinpicture\",\"autoplay\",\"background\",\"bgcolor\",\"border\",\"capture\",\"cellpadding\",\"cellspacing\",\"checked\",\"cite\",\"class\",\"clear\",\"color\",\"cols\",\"colspan\",\"controls\",\"controlslist\",\"coords\",\"crossorigin\",\"datetime\",\"decoding\",\"default\",\"dir\",\"disabled\",\"disablepictureinpicture\",\"disableremoteplayback\",\"download\",\"draggable\",\"enctype\",\"enterkeyhint\",\"face\",\"for\",\"headers\",\"height\",\"hidden\",\"high\",\"href\",\"hreflang\",\"id\",\"inputmode\",\"integrity\",\"ismap\",\"kind\",\"label\",\"lang\",\"list\",\"loading\",\"loop\",\"low\",\"max\",\"maxlength\",\"media\",\"method\",\"min\",\"minlength\",\"multiple\",\"muted\",\"name\",\"nonce\",\"noshade\",\"novalidate\",\"nowrap\",\"open\",\"optimum\",\"pattern\",\"placeholder\",\"playsinline\",\"poster\",\"preload\",\"pubdate\",\"radiogroup\",\"readonly\",\"rel\",\"required\",\"rev\",\"reversed\",\"role\",\"rows\",\"rowspan\",\"spellcheck\",\"scope\",\"selected\",\"shape\",\"size\",\"sizes\",\"span\",\"srclang\",\"start\",\"src\",\"srcset\",\"step\",\"style\",\"summary\",\"tabindex\",\"title\",\"translate\",\"type\",\"usemap\",\"valign\",\"value\",\"width\",\"xmlns\",\"slot\"]),H=g([\"accent-height\",\"accumulate\",\"additive\",\"alignment-baseline\",\"ascent\",\"attributename\",\"attributetype\",\"azimuth\",\"basefrequency\",\"baseline-shift\",\"begin\",\"bias\",\"by\",\"class\",\"clip\",\"clippathunits\",\"clip-path\",\"clip-rule\",\"color\",\"color-interpolation\",\"color-interpolation-filters\",\"color-profile\",\"color-rendering\",\"cx\",\"cy\",\"d\",\"dx\",\"dy\",\"diffuseconstant\",\"direction\",\"display\",\"divisor\",\"dur\",\"edgemode\",\"elevation\",\"end\",\"fill\",\"fill-opacity\",\"fill-rule\",\"filter\",\"filterunits\",\"flood-color\",\"flood-opacity\",\"font-family\",\"font-size\",\"font-size-adjust\",\"font-stretch\",\"font-style\",\"font-variant\",\"font-weight\",\"fx\",\"fy\",\"g1\",\"g2\",\"glyph-name\",\"glyphref\",\"gradientunits\",\"gradienttransform\",\"height\",\"href\",\"id\",\"image-rendering\",\"in\",\"in2\",\"k\",\"k1\",\"k2\",\"k3\",\"k4\",\"kerning\",\"keypoints\",\"keysplines\",\"keytimes\",\"lang\",\"lengthadjust\",\"letter-spacing\",\"kernelmatrix\",\"kernelunitlength\",\"lighting-color\",\"local\",\"marker-end\",\"marker-mid\",\"marker-start\",\"markerheight\",\"markerunits\",\"markerwidth\",\"maskcontentunits\",\"maskunits\",\"max\",\"mask\",\"media\",\"method\",\"mode\",\"min\",\"name\",\"numoctaves\",\"offset\",\"operator\",\"opacity\",\"order\",\"orient\",\"orientation\",\"origin\",\"overflow\",\"paint-order\",\"path\",\"pathlength\",\"patterncontentunits\",\"patterntransform\",\"patternunits\",\"points\",\"preservealpha\",\"preserveaspectratio\",\"primitiveunits\",\"r\",\"rx\",\"ry\",\"radius\",\"refx\",\"refy\",\"repeatcount\",\"repeatdur\",\"restart\",\"result\",\"rotate\",\"scale\",\"seed\",\"shape-rendering\",\"specularconstant\",\"specularexponent\",\"spreadmethod\",\"startoffset\",\"stddeviation\",\"stitchtiles\",\"stop-color\",\"stop-opacity\",\"stroke-dasharray\",\"stroke-dashoffset\",\"stroke-linecap\",\"stroke-linejoin\",\"stroke-miterlimit\",\"stroke-opacity\",\"stroke\",\"stroke-width\",\"style\",\"surfacescale\",\"systemlanguage\",\"tabindex\",\"targetx\",\"targety\",\"transform\",\"transform-origin\",\"text-anchor\",\"text-decoration\",\"text-rendering\",\"textlength\",\"type\",\"u1\",\"u2\",\"unicode\",\"values\",\"viewbox\",\"visibility\",\"version\",\"vert-adv-y\",\"vert-origin-x\",\"vert-origin-y\",\"width\",\"word-spacing\",\"wrap\",\"writing-mode\",\"xchannelselector\",\"ychannelselector\",\"x\",\"x1\",\"x2\",\"xmlns\",\"y\",\"y1\",\"y2\",\"z\",\"zoomandpan\"]),Z=g([\"accent\",\"accentunder\",\"align\",\"bevelled\",\"close\",\"columnsalign\",\"columnlines\",\"columnspan\",\"denomalign\",\"depth\",\"dir\",\"display\",\"displaystyle\",\"encoding\",\"fence\",\"frame\",\"height\",\"href\",\"id\",\"largeop\",\"length\",\"linethickness\",\"lspace\",\"lquote\",\"mathbackground\",\"mathcolor\",\"mathsize\",\"mathvariant\",\"maxsize\",\"minsize\",\"movablelimits\",\"notation\",\"numalign\",\"open\",\"rowalign\",\"rowlines\",\"rowspacing\",\"rowspan\",\"rspace\",\"rquote\",\"scriptlevel\",\"scriptminsize\",\"scriptsizemultiplier\",\"selection\",\"separator\",\"separators\",\"stretchy\",\"subscriptshift\",\"supscriptshift\",\"symmetric\",\"voffset\",\"width\",\"xmlns\"]),G=g([\"xlink:href\",\"xml:id\",\"xlink:title\",\"xml:space\",\"xmlns:xlink\"]),W=_(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm),Q=_(/<%[\\w\\W]*|[\\w\\W]*%>/gm),Y=_(/^data-[\\-\\w.\\u00B7-\\uFFFF]/),K=_(/^aria-[\\-\\w]+$/),X=_(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i),J=_(/^(?:\\w+script|data):/i),V=_(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g),ee=_(/^html$/i),ne=function(){return\"undefined\"==typeof window?null:window},te=function(n,t){if(\"object\"!==e(n)||\"function\"!=typeof n.createPolicy)return null;var r=null,o=\"data-tt-policy-suffix\";t.currentScript&&t.currentScript.hasAttribute(o)&&(r=t.currentScript.getAttribute(o));var a=\"dompurify\"+(r?\"#\"+r:\"\");try{return n.createPolicy(a,{createHTML:function(e){return e}})}catch(e){return console.warn(\"TrustedTypes policy \"+a+\" could not be created.\"),null}};function re(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:ne(),t=function(e){return re(e)};if(t.version=\"2.3.8\",t.removed=[],!n||!n.document||9!==n.document.nodeType)return t.isSupported=!1,t;var r=n.document,a=n.document,i=n.DocumentFragment,s=n.HTMLTemplateElement,l=n.Node,u=n.Element,c=n.NodeFilter,d=n.NamedNodeMap,h=void 0===d?n.NamedNodeMap||n.MozNamedAttrMap:d,p=n.HTMLFormElement,m=n.DOMParser,_=n.trustedTypes,f=u.prototype,b=j(f,\"cloneNode\"),w=j(f,\"nextSibling\"),k=j(f,\"childNodes\"),S=j(f,\"parentNode\");if(\"function\"==typeof s){var N=a.createElement(\"template\");N.content&&N.content.ownerDocument&&(a=N.content.ownerDocument)}var oe=te(_,r),ae=oe?oe.createHTML(\"\"):\"\",ie=a,se=ie.implementation,le=ie.createNodeIterator,ue=ie.createDocumentFragment,ce=ie.getElementsByTagName,de=r.importNode,he={};try{he=O(a).documentMode?a.documentMode:{}}catch(e){}var pe={};t.isSupported=\"function\"==typeof S&&se&&void 0!==se.createHTMLDocument&&9!==he;var me,ge,_e=W,fe=Q,be=Y,we=K,ke=J,ye=V,De=X,Ae=null,xe=T({},[].concat(o(R),o(M),o(I),o($),o(q))),ve=null,Ee=T({},[].concat(o(P),o(H),o(Z),o(G))),Ce=Object.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Fe=null,Be=null,ze=!0,Se=!0,Ne=!1,Te=!1,Oe=!1,je=!1,Re=!1,Me=!1,Ie=!1,Le=!1,$e=!0,Ue=!0,qe=!1,Pe={},He=null,Ze=T({},[\"annotation-xml\",\"audio\",\"colgroup\",\"desc\",\"foreignobject\",\"head\",\"iframe\",\"math\",\"mi\",\"mn\",\"mo\",\"ms\",\"mtext\",\"noembed\",\"noframes\",\"noscript\",\"plaintext\",\"script\",\"style\",\"svg\",\"template\",\"thead\",\"title\",\"video\",\"xmp\"]),Ge=null,We=T({},[\"audio\",\"video\",\"img\",\"source\",\"image\",\"track\"]),Qe=null,Ye=T({},[\"alt\",\"class\",\"for\",\"id\",\"label\",\"name\",\"pattern\",\"placeholder\",\"role\",\"summary\",\"title\",\"value\",\"style\",\"xmlns\"]),Ke=\"http://www.w3.org/1998/Math/MathML\",Xe=\"http://www.w3.org/2000/svg\",Je=\"http://www.w3.org/1999/xhtml\",Ve=Je,en=!1,nn=[\"application/xhtml+xml\",\"text/html\"],tn=\"text/html\",rn=null,on=a.createElement(\"form\"),an=function(e){return e instanceof RegExp||e instanceof Function},sn=function(n){rn&&rn===n||(n&&\"object\"===e(n)||(n={}),n=O(n),Ae=\"ALLOWED_TAGS\"in n?T({},n.ALLOWED_TAGS):xe,ve=\"ALLOWED_ATTR\"in n?T({},n.ALLOWED_ATTR):Ee,Qe=\"ADD_URI_SAFE_ATTR\"in n?T(O(Ye),n.ADD_URI_SAFE_ATTR):Ye,Ge=\"ADD_DATA_URI_TAGS\"in n?T(O(We),n.ADD_DATA_URI_TAGS):We,He=\"FORBID_CONTENTS\"in n?T({},n.FORBID_CONTENTS):Ze,Fe=\"FORBID_TAGS\"in n?T({},n.FORBID_TAGS):{},Be=\"FORBID_ATTR\"in n?T({},n.FORBID_ATTR):{},Pe=\"USE_PROFILES\"in n&&n.USE_PROFILES,ze=!1!==n.ALLOW_ARIA_ATTR,Se=!1!==n.ALLOW_DATA_ATTR,Ne=n.ALLOW_UNKNOWN_PROTOCOLS||!1,Te=n.SAFE_FOR_TEMPLATES||!1,Oe=n.WHOLE_DOCUMENT||!1,Me=n.RETURN_DOM||!1,Ie=n.RETURN_DOM_FRAGMENT||!1,Le=n.RETURN_TRUSTED_TYPE||!1,Re=n.FORCE_BODY||!1,$e=!1!==n.SANITIZE_DOM,Ue=!1!==n.KEEP_CONTENT,qe=n.IN_PLACE||!1,De=n.ALLOWED_URI_REGEXP||De,Ve=n.NAMESPACE||Je,n.CUSTOM_ELEMENT_HANDLING&&an(n.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(Ce.tagNameCheck=n.CUSTOM_ELEMENT_HANDLING.tagNameCheck),n.CUSTOM_ELEMENT_HANDLING&&an(n.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(Ce.attributeNameCheck=n.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),n.CUSTOM_ELEMENT_HANDLING&&\"boolean\"==typeof n.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(Ce.allowCustomizedBuiltInElements=n.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),me=me=-1===nn.indexOf(n.PARSER_MEDIA_TYPE)?tn:n.PARSER_MEDIA_TYPE,ge=\"application/xhtml+xml\"===me?function(e){return e}:x,Te&&(Se=!1),Ie&&(Me=!0),Pe&&(Ae=T({},o(q)),ve=[],!0===Pe.html&&(T(Ae,R),T(ve,P)),!0===Pe.svg&&(T(Ae,M),T(ve,H),T(ve,G)),!0===Pe.svgFilters&&(T(Ae,I),T(ve,H),T(ve,G)),!0===Pe.mathMl&&(T(Ae,$),T(ve,Z),T(ve,G))),n.ADD_TAGS&&(Ae===xe&&(Ae=O(Ae)),T(Ae,n.ADD_TAGS)),n.ADD_ATTR&&(ve===Ee&&(ve=O(ve)),T(ve,n.ADD_ATTR)),n.ADD_URI_SAFE_ATTR&&T(Qe,n.ADD_URI_SAFE_ATTR),n.FORBID_CONTENTS&&(He===Ze&&(He=O(He)),T(He,n.FORBID_CONTENTS)),Ue&&(Ae[\"#text\"]=!0),Oe&&T(Ae,[\"html\",\"head\",\"body\"]),Ae.table&&(T(Ae,[\"tbody\"]),delete Fe.tbody),g&&g(n),rn=n)},ln=T({},[\"mi\",\"mo\",\"mn\",\"ms\",\"mtext\"]),un=T({},[\"foreignobject\",\"desc\",\"title\",\"annotation-xml\"]),cn=T({},[\"title\",\"style\",\"font\",\"a\",\"script\"]),dn=T({},M);T(dn,I),T(dn,L);var hn=T({},$);T(hn,U);var pn=function(e){var n=S(e);n&&n.tagName||(n={namespaceURI:Je,tagName:\"template\"});var t=x(e.tagName),r=x(n.tagName);return e.namespaceURI===Xe?n.namespaceURI===Je?\"svg\"===t:n.namespaceURI===Ke?\"svg\"===t&&(\"annotation-xml\"===r||ln[r]):Boolean(dn[t]):e.namespaceURI===Ke?n.namespaceURI===Je?\"math\"===t:n.namespaceURI===Xe?\"math\"===t&&un[r]:Boolean(hn[t]):e.namespaceURI===Je&&!(n.namespaceURI===Xe&&!un[r])&&!(n.namespaceURI===Ke&&!ln[r])&&!hn[t]&&(cn[t]||!dn[t])},mn=function(e){A(t.removed,{element:e});try{e.parentNode.removeChild(e)}catch(n){try{e.outerHTML=ae}catch(n){e.remove()}}},gn=function(e,n){try{A(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch(e){A(t.removed,{attribute:null,from:n})}if(n.removeAttribute(e),\"is\"===e&&!ve[e])if(Me||Ie)try{mn(n)}catch(e){}else try{n.setAttribute(e,\"\")}catch(e){}},_n=function(e){var n,t;if(Re)e=\"<remove></remove>\"+e;else{var r=v(e,/^[\\r\\n\\t ]+/);t=r&&r[0]}\"application/xhtml+xml\"===me&&(e='<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>'+e+\"</body></html>\");var o=oe?oe.createHTML(e):e;if(Ve===Je)try{n=(new m).parseFromString(o,me)}catch(e){}if(!n||!n.documentElement){n=se.createDocument(Ve,\"template\",null);try{n.documentElement.innerHTML=en?\"\":o}catch(e){}}var i=n.body||n.documentElement;return e&&t&&i.insertBefore(a.createTextNode(t),i.childNodes[0]||null),Ve===Je?ce.call(n,Oe?\"html\":\"body\")[0]:Oe?n.documentElement:i},fn=function(e){return le.call(e.ownerDocument||e,e,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT,null,!1)},bn=function(e){return e instanceof p&&(\"string\"!=typeof e.nodeName||\"string\"!=typeof e.textContent||\"function\"!=typeof e.removeChild||!(e.attributes instanceof h)||\"function\"!=typeof e.removeAttribute||\"function\"!=typeof e.setAttribute||\"string\"!=typeof e.namespaceURI||\"function\"!=typeof e.insertBefore)},wn=function(n){return\"object\"===e(l)?n instanceof l:n&&\"object\"===e(n)&&\"number\"==typeof n.nodeType&&\"string\"==typeof n.nodeName},kn=function(e,n,r){pe[e]&&y(pe[e],(function(e){e.call(t,n,r,rn)}))},yn=function(e){var n;if(kn(\"beforeSanitizeElements\",e,null),bn(e))return mn(e),!0;if(B(/[\\u0080-\\uFFFF]/,e.nodeName))return mn(e),!0;var r=ge(e.nodeName);if(kn(\"uponSanitizeElement\",e,{tagName:r,allowedTags:Ae}),e.hasChildNodes()&&!wn(e.firstElementChild)&&(!wn(e.content)||!wn(e.content.firstElementChild))&&B(/<[/\\w]/g,e.innerHTML)&&B(/<[/\\w]/g,e.textContent))return mn(e),!0;if(\"select\"===r&&B(/<template/i,e.innerHTML))return mn(e),!0;if(!Ae[r]||Fe[r]){if(!Fe[r]&&An(r)){if(Ce.tagNameCheck instanceof RegExp&&B(Ce.tagNameCheck,r))return!1;if(Ce.tagNameCheck instanceof Function&&Ce.tagNameCheck(r))return!1}if(Ue&&!He[r]){var o=S(e)||e.parentNode,a=k(e)||e.childNodes;if(a&&o)for(var i=a.length-1;i>=0;--i)o.insertBefore(b(a[i],!0),w(e))}return mn(e),!0}return e instanceof u&&!pn(e)?(mn(e),!0):\"noscript\"!==r&&\"noembed\"!==r||!B(/<\\/no(script|embed)/i,e.innerHTML)?(Te&&3===e.nodeType&&(n=e.textContent,n=E(n,_e,\" \"),n=E(n,fe,\" \"),e.textContent!==n&&(A(t.removed,{element:e.cloneNode()}),e.textContent=n)),kn(\"afterSanitizeElements\",e,null),!1):(mn(e),!0)},Dn=function(e,n,t){if($e&&(\"id\"===n||\"name\"===n)&&(t in a||t in on))return!1;if(Se&&!Be[n]&&B(be,n));else if(ze&&B(we,n));else if(!ve[n]||Be[n]){if(!(An(e)&&(Ce.tagNameCheck instanceof RegExp&&B(Ce.tagNameCheck,e)||Ce.tagNameCheck instanceof Function&&Ce.tagNameCheck(e))&&(Ce.attributeNameCheck instanceof RegExp&&B(Ce.attributeNameCheck,n)||Ce.attributeNameCheck instanceof Function&&Ce.attributeNameCheck(n))||\"is\"===n&&Ce.allowCustomizedBuiltInElements&&(Ce.tagNameCheck instanceof RegExp&&B(Ce.tagNameCheck,t)||Ce.tagNameCheck instanceof Function&&Ce.tagNameCheck(t))))return!1}else if(Qe[n]);else if(B(De,E(t,ye,\"\")));else if(\"src\"!==n&&\"xlink:href\"!==n&&\"href\"!==n||\"script\"===e||0!==C(t,\"data:\")||!Ge[e])if(Ne&&!B(ke,E(t,ye,\"\")));else if(t)return!1;return!0},An=function(e){return e.indexOf(\"-\")>0},xn=function(e){var n,r,o,a;kn(\"beforeSanitizeAttributes\",e,null);var i=e.attributes;if(i){var s={attrName:\"\",attrValue:\"\",keepAttr:!0,allowedAttributes:ve};for(a=i.length;a--;){var l=n=i[a],u=l.name,c=l.namespaceURI;if(r=\"value\"===u?n.value:F(n.value),o=ge(u),s.attrName=o,s.attrValue=r,s.keepAttr=!0,s.forceKeepAttr=void 0,kn(\"uponSanitizeAttribute\",e,s),r=s.attrValue,!s.forceKeepAttr&&(gn(u,e),s.keepAttr))if(B(/\\/>/i,r))gn(u,e);else{Te&&(r=E(r,_e,\" \"),r=E(r,fe,\" \"));var d=ge(e.nodeName);if(Dn(d,o,r))try{c?e.setAttributeNS(c,u,r):e.setAttribute(u,r),D(t.removed)}catch(e){}}}kn(\"afterSanitizeAttributes\",e,null)}},vn=function e(n){var t,r=fn(n);for(kn(\"beforeSanitizeShadowDOM\",n,null);t=r.nextNode();)kn(\"uponSanitizeShadowNode\",t,null),yn(t)||(t.content instanceof i&&e(t.content),xn(t));kn(\"afterSanitizeShadowDOM\",n,null)};return t.sanitize=function(o,a){var s,u,c,d,h;if((en=!o)&&(o=\"\\x3c!--\\x3e\"),\"string\"!=typeof o&&!wn(o)){if(\"function\"!=typeof o.toString)throw z(\"toString is not a function\");if(\"string\"!=typeof(o=o.toString()))throw z(\"dirty is not a string, aborting\")}if(!t.isSupported){if(\"object\"===e(n.toStaticHTML)||\"function\"==typeof n.toStaticHTML){if(\"string\"==typeof o)return n.toStaticHTML(o);if(wn(o))return n.toStaticHTML(o.outerHTML)}return o}if(je||sn(a),t.removed=[],\"string\"==typeof o&&(qe=!1),qe){if(o.nodeName){var p=ge(o.nodeName);if(!Ae[p]||Fe[p])throw z(\"root node is forbidden and cannot be sanitized in-place\")}}else if(o instanceof l)1===(u=(s=_n(\"\\x3c!----\\x3e\")).ownerDocument.importNode(o,!0)).nodeType&&\"BODY\"===u.nodeName||\"HTML\"===u.nodeName?s=u:s.appendChild(u);else{if(!Me&&!Te&&!Oe&&-1===o.indexOf(\"<\"))return oe&&Le?oe.createHTML(o):o;if(!(s=_n(o)))return Me?null:Le?ae:\"\"}s&&Re&&mn(s.firstChild);for(var m=fn(qe?o:s);c=m.nextNode();)3===c.nodeType&&c===d||yn(c)||(c.content instanceof i&&vn(c.content),xn(c),d=c);if(d=null,qe)return o;if(Me){if(Ie)for(h=ue.call(s.ownerDocument);s.firstChild;)h.appendChild(s.firstChild);else h=s;return ve.shadowroot&&(h=de.call(r,h,!0)),h}var g=Oe?s.outerHTML:s.innerHTML;return Oe&&Ae[\"!doctype\"]&&s.ownerDocument&&s.ownerDocument.doctype&&s.ownerDocument.doctype.name&&B(ee,s.ownerDocument.doctype.name)&&(g=\"<!DOCTYPE \"+s.ownerDocument.doctype.name+\">\\n\"+g),Te&&(g=E(g,_e,\" \"),g=E(g,fe,\" \")),oe&&Le?oe.createHTML(g):g},t.setConfig=function(e){sn(e),je=!0},t.clearConfig=function(){rn=null,je=!1},t.isValidAttribute=function(e,n,t){rn||sn({});var r=ge(e),o=ge(n);return Dn(r,o,t)},t.addHook=function(e,n){\"function\"==typeof n&&(pe[e]=pe[e]||[],A(pe[e],n))},t.removeHook=function(e){if(pe[e])return D(pe[e])},t.removeHooks=function(e){pe[e]&&(pe[e]=[])},t.removeAllHooks=function(){pe={}},t}return re()}()})),i={exports:{}};function s(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error(\"map is read-only\")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error(\"set is read-only\")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((function(n){var t=e[n];\"object\"!=typeof t||Object.isFrozen(t)||s(t)})),e}i.exports=s,i.exports.default=s;var l=i.exports;class u{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function c(e){return e.replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#x27;\")}function d(e,...n){const t=Object.create(null);for(const n in e)t[n]=e[n];return n.forEach((function(e){for(const n in e)t[n]=e[n]})),t}const h=e=>!!e.kind;class p{constructor(e,n){this.buffer=\"\",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=c(e)}openNode(e){if(!h(e))return;let n=e.kind;n=e.sublanguage?`language-${n}`:((e,{prefix:n})=>{if(e.includes(\".\")){const t=e.split(\".\");return[`${n}${t.shift()}`,...t.map(((e,n)=>`${e}${\"_\".repeat(n+1)}`))].join(\" \")}return`${n}${e}`})(n,{prefix:this.classPrefix}),this.span(n)}closeNode(e){h(e)&&(this.buffer+=\"</span>\")}value(){return this.buffer}span(e){this.buffer+=`<span class=\"${e}\">`}}class m{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const n={kind:e,children:[]};this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return\"string\"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach((n=>this._walk(e,n))),e.closeNode(n)),e}static _collapse(e){\"string\"!=typeof e&&e.children&&(e.children.every((e=>\"string\"==typeof e))?e.children=[e.children.join(\"\")]:e.children.forEach((e=>{m._collapse(e)})))}}class g extends m{constructor(e){super(),this.options=e}addKeyword(e,n){\"\"!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){\"\"!==e&&this.add(e)}addSublanguage(e,n){const t=e.root;t.kind=n,t.sublanguage=!0,this.add(t)}toHTML(){return new p(this,this.options).value()}finalize(){return!0}}function _(e){return e?\"string\"==typeof e?e:e.source:null}function f(e){return k(\"(?=\",e,\")\")}function b(e){return k(\"(?:\",e,\")*\")}function w(e){return k(\"(?:\",e,\")?\")}function k(...e){const n=e.map((e=>_(e))).join(\"\");return n}function y(...e){const n=function(e){const n=e[e.length-1];return\"object\"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{}}(e),t=\"(\"+(n.capture?\"\":\"?:\")+e.map((e=>_(e))).join(\"|\")+\")\";return t}function D(e){return new RegExp(e.toString()+\"|\").exec(\"\").length-1}const A=/\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;function x(e,{joinWith:n}){let t=0;return e.map((e=>{t+=1;const n=t;let r=_(e),o=\"\";for(;r.length>0;){const e=A.exec(r);if(!e){o+=r;break}o+=r.substring(0,e.index),r=r.substring(e.index+e[0].length),\"\\\\\"===e[0][0]&&e[1]?o+=\"\\\\\"+String(Number(e[1])+n):(o+=e[0],\"(\"===e[0]&&t++)}return o})).map((e=>`(${e})`)).join(n)}const v=\"(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\",E={begin:\"\\\\\\\\[\\\\s\\\\S]\",relevance:0},C={scope:\"string\",begin:\"'\",end:\"'\",illegal:\"\\\\n\",contains:[E]},F={scope:\"string\",begin:'\"',end:'\"',illegal:\"\\\\n\",contains:[E]},B=function(e,n,t={}){const r=d({scope:\"comment\",begin:e,end:n,contains:[]},t);r.contains.push({scope:\"doctag\",begin:\"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)\",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const o=y(\"I\",\"a\",\"is\",\"so\",\"us\",\"to\",\"at\",\"if\",\"in\",\"it\",\"on\",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return r.contains.push({begin:k(/[ ]+/,\"(\",o,/[.]?[:]?([.][ ]|[ ])/,\"){3}\")}),r},z=B(\"//\",\"$\"),S=B(\"/\\\\*\",\"\\\\*/\"),N=B(\"#\",\"$\"),T={scope:\"number\",begin:\"\\\\b\\\\d+(\\\\.\\\\d+)?\",relevance:0},O={scope:\"number\",begin:v,relevance:0},j={scope:\"number\",begin:\"\\\\b(0b[01]+)\",relevance:0},R={begin:/(?=\\/[^/\\n]*\\/)/,contains:[{scope:\"regexp\",begin:/\\//,end:/\\/[gimuy]*/,illegal:/\\n/,contains:[E,{begin:/\\[/,end:/\\]/,relevance:0,contains:[E]}]}]},M={scope:\"title\",begin:\"[a-zA-Z]\\\\w*\",relevance:0},I={scope:\"title\",begin:\"[a-zA-Z_]\\\\w*\",relevance:0},L={begin:\"\\\\.\\\\s*[a-zA-Z_]\\\\w*\",relevance:0};var $=Object.freeze({__proto__:null,MATCH_NOTHING_RE:/\\b\\B/,IDENT_RE:\"[a-zA-Z]\\\\w*\",UNDERSCORE_IDENT_RE:\"[a-zA-Z_]\\\\w*\",NUMBER_RE:\"\\\\b\\\\d+(\\\\.\\\\d+)?\",C_NUMBER_RE:v,BINARY_NUMBER_RE:\"\\\\b(0b[01]+)\",RE_STARTERS_RE:\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\",SHEBANG:(e={})=>{const n=/^#![ ]*\\//;return e.binary&&(e.begin=k(n,/.*\\b/,e.binary,/\\b.*/)),d({scope:\"meta\",begin:n,end:/$/,relevance:0,\"on:begin\":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},BACKSLASH_ESCAPE:E,APOS_STRING_MODE:C,QUOTE_STRING_MODE:F,PHRASAL_WORDS_MODE:{begin:/\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/},COMMENT:B,C_LINE_COMMENT_MODE:z,C_BLOCK_COMMENT_MODE:S,HASH_COMMENT_MODE:N,NUMBER_MODE:T,C_NUMBER_MODE:O,BINARY_NUMBER_MODE:j,REGEXP_MODE:R,TITLE_MODE:M,UNDERSCORE_TITLE_MODE:I,METHOD_GUARD:L,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{\"on:begin\":(e,n)=>{n.data._beginMatch=e[1]},\"on:end\":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}})}});function U(e,n){\".\"===e.input[e.index-1]&&n.ignoreMatch()}function q(e,n){void 0!==e.className&&(e.scope=e.className,delete e.className)}function P(e,n){n&&e.beginKeywords&&(e.begin=\"\\\\b(\"+e.beginKeywords.split(\" \").join(\"|\")+\")(?!\\\\.)(?=\\\\b|\\\\s)\",e.__beforeBegin=U,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,void 0===e.relevance&&(e.relevance=0))}function H(e,n){Array.isArray(e.illegal)&&(e.illegal=y(...e.illegal))}function Z(e,n){if(e.match){if(e.begin||e.end)throw new Error(\"begin & end are not supported with match\");e.begin=e.match,delete e.match}}function G(e,n){void 0===e.relevance&&(e.relevance=1)}const W=(e,n)=>{if(!e.beforeMatch)return;if(e.starts)throw new Error(\"beforeMatch cannot be used with starts\");const t=Object.assign({},e);Object.keys(e).forEach((n=>{delete e[n]})),e.keywords=t.keywords,e.begin=k(t.beforeMatch,f(t.begin)),e.starts={relevance:0,contains:[Object.assign(t,{endsParent:!0})]},e.relevance=0,delete t.beforeMatch},Q=[\"of\",\"and\",\"for\",\"in\",\"not\",\"or\",\"if\",\"then\",\"parent\",\"list\",\"value\"];function Y(e,n,t=\"keyword\"){const r=Object.create(null);return\"string\"==typeof e?o(t,e.split(\" \")):Array.isArray(e)?o(t,e):Object.keys(e).forEach((function(t){Object.assign(r,Y(e[t],n,t))})),r;function o(e,t){n&&(t=t.map((e=>e.toLowerCase()))),t.forEach((function(n){const t=n.split(\"|\");r[t[0]]=[e,K(t[0],t[1])]}))}}function K(e,n){return n?Number(n):function(e){return Q.includes(e.toLowerCase())}(e)?0:1}const X={},J=e=>{console.error(e)},V=(e,...n)=>{console.log(`WARN: ${e}`,...n)},ee=(e,n)=>{X[`${e}/${n}`]||(console.log(`Deprecated as of ${e}. ${n}`),X[`${e}/${n}`]=!0)},ne=new Error;function te(e,n,{key:t}){let r=0;const o=e[t],a={},i={};for(let e=1;e<=n.length;e++)i[e+r]=o[e],a[e+r]=!0,r+=D(n[e-1]);e[t]=i,e[t]._emit=a,e[t]._multi=!0}function re(e){!function(e){e.scope&&\"object\"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,delete e.scope)}(e),\"string\"==typeof e.beginScope&&(e.beginScope={_wrap:e.beginScope}),\"string\"==typeof e.endScope&&(e.endScope={_wrap:e.endScope}),function(e){if(Array.isArray(e.begin)){if(e.skip||e.excludeBegin||e.returnBegin)throw J(\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\"),ne;if(\"object\"!=typeof e.beginScope||null===e.beginScope)throw J(\"beginScope must be object\"),ne;te(e,e.begin,{key:\"beginScope\"}),e.begin=x(e.begin,{joinWith:\"\"})}}(e),function(e){if(Array.isArray(e.end)){if(e.skip||e.excludeEnd||e.returnEnd)throw J(\"skip, excludeEnd, returnEnd not compatible with endScope: {}\"),ne;if(\"object\"!=typeof e.endScope||null===e.endScope)throw J(\"endScope must be object\"),ne;te(e,e.end,{key:\"endScope\"}),e.end=x(e.end,{joinWith:\"\"})}}(e)}function oe(e){function n(n,t){return new RegExp(_(n),\"m\"+(e.case_insensitive?\"i\":\"\")+(e.unicodeRegex?\"u\":\"\")+(t?\"g\":\"\"))}class t{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=D(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map((e=>e[1]));this.matcherRe=n(x(e,{joinWith:\"|\"}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const n=this.matcherRe.exec(e);if(!n)return null;const t=n.findIndex(((e,n)=>n>0&&void 0!==e)),r=this.matchIndexes[t];return n.splice(0,t),Object.assign(n,r)}}class r{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t;return this.rules.slice(e).forEach((([e,t])=>n.addRule(e,t))),n.compile(),this.multiRegexes[e]=n,n}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),\"begin\"===n.type&&this.count++}exec(e){const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;let t=n.exec(e);if(this.resumingScanAtSamePosition())if(t&&t.index===this.lastIndex);else{const n=this.getMatcher(0);n.lastIndex=this.lastIndex+1,t=n.exec(e)}return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&this.considerAll()),t}}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes(\"self\"))throw new Error(\"ERR: contains `self` is not supported at the top-level of a language.  See documentation.\");return e.classNameAliases=d(e.classNameAliases||{}),function t(o,a){const i=o;if(o.isCompiled)return i;[q,Z,re,W].forEach((e=>e(o,a))),e.compilerExtensions.forEach((e=>e(o,a))),o.__beforeBegin=null,[P,H,G].forEach((e=>e(o,a))),o.isCompiled=!0;let s=null;return\"object\"==typeof o.keywords&&o.keywords.$pattern&&(o.keywords=Object.assign({},o.keywords),s=o.keywords.$pattern,delete o.keywords.$pattern),s=s||/\\w+/,o.keywords&&(o.keywords=Y(o.keywords,e.case_insensitive)),i.keywordPatternRe=n(s,!0),a&&(o.begin||(o.begin=/\\B|\\b/),i.beginRe=n(i.begin),o.end||o.endsWithParent||(o.end=/\\B|\\b/),o.end&&(i.endRe=n(i.end)),i.terminatorEnd=_(i.end)||\"\",o.endsWithParent&&a.terminatorEnd&&(i.terminatorEnd+=(o.end?\"|\":\"\")+a.terminatorEnd)),o.illegal&&(i.illegalRe=n(o.illegal)),o.contains||(o.contains=[]),o.contains=[].concat(...o.contains.map((function(e){return function(e){e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((function(n){return d(e,{variants:null},n)})));if(e.cachedVariants)return e.cachedVariants;if(ae(e))return d(e,{starts:e.starts?d(e.starts):null});if(Object.isFrozen(e))return d(e);return e}(\"self\"===e?o:e)}))),o.contains.forEach((function(e){t(e,i)})),o.starts&&t(o.starts,a),i.matcher=function(e){const n=new r;return e.contains.forEach((e=>n.addRule(e.begin,{rule:e,type:\"begin\"}))),e.terminatorEnd&&n.addRule(e.terminatorEnd,{type:\"end\"}),e.illegal&&n.addRule(e.illegal,{type:\"illegal\"}),n}(i),i}(e)}function ae(e){return!!e&&(e.endsWithParent||ae(e.starts))}class ie extends Error{constructor(e,n){super(e),this.name=\"HTMLInjectionError\",this.html=n}}const se=c,le=d,ue=Symbol(\"nomatch\");var ce=function(e){const n=Object.create(null),t=Object.create(null),r=[];let o=!0;const a=\"Could not find the language '{}', did you forget to load/include a language module?\",i={disableAutodetect:!0,name:\"Plain text\",contains:[]};let s={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\\blang(?:uage)?-([\\w-]+)\\b/i,classPrefix:\"hljs-\",cssSelector:\"pre code\",languages:null,__emitter:g};function c(e){return s.noHighlightRe.test(e)}function d(e,n,t){let r=\"\",o=\"\";\"object\"==typeof n?(r=e,t=n.ignoreIllegals,o=n.language):(ee(\"10.7.0\",\"highlight(lang, code, ...args) has been deprecated.\"),ee(\"10.7.0\",\"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\"),o=e,r=n),void 0===t&&(t=!0);const a={code:r,language:o};E(\"before:highlight\",a);const i=a.result?a.result:h(a.language,a.code,t);return i.code=a.code,E(\"after:highlight\",i),i}function h(e,t,r,i){const l=Object.create(null);function c(){if(!v.keywords)return void C.addText(F);let e=0;v.keywordPatternRe.lastIndex=0;let n=v.keywordPatternRe.exec(F),t=\"\";for(;n;){t+=F.substring(e,n.index);const o=y.case_insensitive?n[0].toLowerCase():n[0],a=(r=o,v.keywords[r]);if(a){const[e,r]=a;if(C.addText(t),t=\"\",l[o]=(l[o]||0)+1,l[o]<=7&&(B+=r),e.startsWith(\"_\"))t+=n[0];else{const t=y.classNameAliases[e]||e;C.addKeyword(n[0],t)}}else t+=n[0];e=v.keywordPatternRe.lastIndex,n=v.keywordPatternRe.exec(F)}var r;t+=F.substr(e),C.addText(t)}function d(){null!=v.subLanguage?function(){if(\"\"===F)return;let e=null;if(\"string\"==typeof v.subLanguage){if(!n[v.subLanguage])return void C.addText(F);e=h(v.subLanguage,F,!0,E[v.subLanguage]),E[v.subLanguage]=e._top}else e=p(F,v.subLanguage.length?v.subLanguage:null);v.relevance>0&&(B+=e.relevance),C.addSublanguage(e._emitter,e.language)}():c(),F=\"\"}function m(e,n){let t=1;const r=n.length-1;for(;t<=r;){if(!e._emit[t]){t++;continue}const r=y.classNameAliases[e[t]]||e[t],o=n[t];r?C.addKeyword(o,r):(F=o,c(),F=\"\"),t++}}function g(e,n){return e.scope&&\"string\"==typeof e.scope&&C.openNode(y.classNameAliases[e.scope]||e.scope),e.beginScope&&(e.beginScope._wrap?(C.addKeyword(F,y.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),F=\"\"):e.beginScope._multi&&(m(e.beginScope,n),F=\"\")),v=Object.create(e,{parent:{value:v}}),v}function _(e,n,t){let r=function(e,n){const t=e&&e.exec(n);return t&&0===t.index}(e.endRe,t);if(r){if(e[\"on:end\"]){const t=new u(e);e[\"on:end\"](n,t),t.isMatchIgnored&&(r=!1)}if(r){for(;e.endsParent&&e.parent;)e=e.parent;return e}}if(e.endsWithParent)return _(e.parent,n,t)}function f(e){return 0===v.matcher.regexIndex?(F+=e[0],1):(N=!0,0)}function b(e){const n=e[0],r=t.substr(e.index),o=_(v,e,r);if(!o)return ue;const a=v;v.endScope&&v.endScope._wrap?(d(),C.addKeyword(n,v.endScope._wrap)):v.endScope&&v.endScope._multi?(d(),m(v.endScope,e)):a.skip?F+=n:(a.returnEnd||a.excludeEnd||(F+=n),d(),a.excludeEnd&&(F=n));do{v.scope&&C.closeNode(),v.skip||v.subLanguage||(B+=v.relevance),v=v.parent}while(v!==o.parent);return o.starts&&g(o.starts,e),a.returnEnd?0:n.length}let w={};function k(n,a){const i=a&&a[0];if(F+=n,null==i)return d(),0;if(\"begin\"===w.type&&\"end\"===a.type&&w.index===a.index&&\"\"===i){if(F+=t.slice(a.index,a.index+1),!o){const n=new Error(`0 width match regex (${e})`);throw n.languageName=e,n.badRule=w.rule,n}return 1}if(w=a,\"begin\"===a.type)return function(e){const n=e[0],t=e.rule,r=new u(t),o=[t.__beforeBegin,t[\"on:begin\"]];for(const t of o)if(t&&(t(e,r),r.isMatchIgnored))return f(n);return t.skip?F+=n:(t.excludeBegin&&(F+=n),d(),t.returnBegin||t.excludeBegin||(F=n)),g(t,e),t.returnBegin?0:n.length}(a);if(\"illegal\"===a.type&&!r){const e=new Error('Illegal lexeme \"'+i+'\" for mode \"'+(v.scope||\"<unnamed>\")+'\"');throw e.mode=v,e}if(\"end\"===a.type){const e=b(a);if(e!==ue)return e}if(\"illegal\"===a.type&&\"\"===i)return 1;if(S>1e5&&S>3*a.index){throw new Error(\"potential infinite loop, way more iterations than matches\")}return F+=i,i.length}const y=A(e);if(!y)throw J(a.replace(\"{}\",e)),new Error('Unknown language: \"'+e+'\"');const D=oe(y);let x=\"\",v=i||D;const E={},C=new s.__emitter(s);!function(){const e=[];for(let n=v;n!==y;n=n.parent)n.scope&&e.unshift(n.scope);e.forEach((e=>C.openNode(e)))}();let F=\"\",B=0,z=0,S=0,N=!1;try{for(v.matcher.considerAll();;){S++,N?N=!1:v.matcher.considerAll(),v.matcher.lastIndex=z;const e=v.matcher.exec(t);if(!e)break;const n=k(t.substring(z,e.index),e);z=e.index+n}return k(t.substr(z)),C.closeAllNodes(),C.finalize(),x=C.toHTML(),{language:e,value:x,relevance:B,illegal:!1,_emitter:C,_top:v}}catch(n){if(n.message&&n.message.includes(\"Illegal\"))return{language:e,value:se(t),illegal:!0,relevance:0,_illegalBy:{message:n.message,index:z,context:t.slice(z-100,z+100),mode:n.mode,resultSoFar:x},_emitter:C};if(o)return{language:e,value:se(t),illegal:!1,relevance:0,errorRaised:n,_emitter:C,_top:v};throw n}}function p(e,t){t=t||s.languages||Object.keys(n);const r=function(e){const n={value:se(e),illegal:!1,relevance:0,_top:i,_emitter:new s.__emitter(s)};return n._emitter.addText(e),n}(e),o=t.filter(A).filter(v).map((n=>h(n,e,!1)));o.unshift(r);const a=o.sort(((e,n)=>{if(e.relevance!==n.relevance)return n.relevance-e.relevance;if(e.language&&n.language){if(A(e.language).supersetOf===n.language)return 1;if(A(n.language).supersetOf===e.language)return-1}return 0})),[l,u]=a,c=l;return c.secondBest=u,c}function m(e){let n=null;const r=function(e){let n=e.className+\" \";n+=e.parentNode?e.parentNode.className:\"\";const t=s.languageDetectRe.exec(n);if(t){const n=A(t[1]);return n||(V(a.replace(\"{}\",t[1])),V(\"Falling back to no-highlight mode for this block.\",e)),n?t[1]:\"no-highlight\"}return n.split(/\\s+/).find((e=>c(e)||A(e)))}(e);if(c(r))return;if(E(\"before:highlightElement\",{el:e,language:r}),e.children.length>0&&(s.ignoreUnescapedHTML||(console.warn(\"One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\"),console.warn(\"https://github.com/highlightjs/highlight.js/wiki/security\"),console.warn(\"The element with unescaped HTML:\"),console.warn(e)),s.throwUnescapedHTML)){throw new ie(\"One of your code blocks includes unescaped HTML.\",e.innerHTML)}n=e;const o=n.textContent,i=r?d(o,{language:r,ignoreIllegals:!0}):p(o);e.innerHTML=i.value,function(e,n,r){const o=n&&t[n]||r;e.classList.add(\"hljs\"),e.classList.add(`language-${o}`)}(e,r,i.language),e.result={language:i.language,re:i.relevance,relevance:i.relevance},i.secondBest&&(e.secondBest={language:i.secondBest.language,relevance:i.secondBest.relevance}),E(\"after:highlightElement\",{el:e,result:i,text:o})}let _=!1;function D(){if(\"loading\"===document.readyState)return void(_=!0);document.querySelectorAll(s.cssSelector).forEach(m)}function A(e){return e=(e||\"\").toLowerCase(),n[e]||n[t[e]]}function x(e,{languageName:n}){\"string\"==typeof e&&(e=[e]),e.forEach((e=>{t[e.toLowerCase()]=n}))}function v(e){const n=A(e);return n&&!n.disableAutodetect}function E(e,n){const t=e;r.forEach((function(e){e[t]&&e[t](n)}))}\"undefined\"!=typeof window&&window.addEventListener&&window.addEventListener(\"DOMContentLoaded\",(function(){_&&D()}),!1),Object.assign(e,{highlight:d,highlightAuto:p,highlightAll:D,highlightElement:m,highlightBlock:function(e){return ee(\"10.7.0\",\"highlightBlock will be removed entirely in v12.0\"),ee(\"10.7.0\",\"Please use highlightElement now.\"),m(e)},configure:function(e){s=le(s,e)},initHighlighting:()=>{D(),ee(\"10.6.0\",\"initHighlighting() deprecated.  Use highlightAll() now.\")},initHighlightingOnLoad:function(){D(),ee(\"10.6.0\",\"initHighlightingOnLoad() deprecated.  Use highlightAll() now.\")},registerLanguage:function(t,r){let a=null;try{a=r(e)}catch(e){if(J(\"Language definition for '{}' could not be registered.\".replace(\"{}\",t)),!o)throw e;J(e),a=i}a.name||(a.name=t),n[t]=a,a.rawDefinition=r.bind(null,e),a.aliases&&x(a.aliases,{languageName:t})},unregisterLanguage:function(e){delete n[e];for(const n of Object.keys(t))t[n]===e&&delete t[n]},listLanguages:function(){return Object.keys(n)},getLanguage:A,registerAliases:x,autoDetection:v,inherit:le,addPlugin:function(e){!function(e){e[\"before:highlightBlock\"]&&!e[\"before:highlightElement\"]&&(e[\"before:highlightElement\"]=n=>{e[\"before:highlightBlock\"](Object.assign({block:n.el},n))}),e[\"after:highlightBlock\"]&&!e[\"after:highlightElement\"]&&(e[\"after:highlightElement\"]=n=>{e[\"after:highlightBlock\"](Object.assign({block:n.el},n))})}(e),r.push(e)}}),e.debugMode=function(){o=!1},e.safeMode=function(){o=!0},e.versionString=\"11.5.1\",e.regex={concat:k,lookahead:f,either:y,optional:w,anyNumberOfTimes:b};for(const e in $)\"object\"==typeof $[e]&&l($[e]);return Object.assign(e,$),e}({}),de=ce;ce.HighlightJS=ce,ce.default=ce;var he=de;const pe=[\"as\",\"in\",\"of\",\"if\",\"for\",\"while\",\"finally\",\"var\",\"new\",\"function\",\"do\",\"return\",\"void\",\"else\",\"break\",\"catch\",\"instanceof\",\"with\",\"throw\",\"case\",\"default\",\"try\",\"switch\",\"continue\",\"typeof\",\"delete\",\"let\",\"yield\",\"const\",\"class\",\"debugger\",\"async\",\"await\",\"static\",\"import\",\"from\",\"export\",\"extends\"],me=[\"true\",\"false\",\"null\",\"undefined\",\"NaN\",\"Infinity\"],ge=[\"Object\",\"Function\",\"Boolean\",\"Symbol\",\"Math\",\"Date\",\"Number\",\"BigInt\",\"String\",\"RegExp\",\"Array\",\"Float32Array\",\"Float64Array\",\"Int8Array\",\"Uint8Array\",\"Uint8ClampedArray\",\"Int16Array\",\"Int32Array\",\"Uint16Array\",\"Uint32Array\",\"BigInt64Array\",\"BigUint64Array\",\"Set\",\"Map\",\"WeakSet\",\"WeakMap\",\"ArrayBuffer\",\"SharedArrayBuffer\",\"Atomics\",\"DataView\",\"JSON\",\"Promise\",\"Generator\",\"GeneratorFunction\",\"AsyncFunction\",\"Reflect\",\"Proxy\",\"Intl\",\"WebAssembly\"],_e=[\"Error\",\"EvalError\",\"InternalError\",\"RangeError\",\"ReferenceError\",\"SyntaxError\",\"TypeError\",\"URIError\"],fe=[\"setInterval\",\"setTimeout\",\"clearInterval\",\"clearTimeout\",\"require\",\"exports\",\"eval\",\"isFinite\",\"isNaN\",\"parseFloat\",\"parseInt\",\"decodeURI\",\"decodeURIComponent\",\"encodeURI\",\"encodeURIComponent\",\"escape\",\"unescape\"],be=[\"arguments\",\"this\",\"super\",\"console\",\"window\",\"document\",\"localStorage\",\"module\",\"global\"],we=[].concat(fe,ge,_e);var ke=function(e){const n=e.regex,t=\"[A-Za-z$_][0-9A-Za-z$_]*\",r=\"<>\",o=\"</>\",a={begin:/<[A-Za-z0-9\\\\._:-]+/,end:/\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,isTrulyOpeningTag:(e,n)=>{const t=e[0].length+e.index,r=e.input[t];if(\"<\"===r||\",\"===r)return void n.ignoreMatch();let o;\">\"===r&&(((e,{after:n})=>{const t=\"</\"+e[0].slice(1);return-1!==e.input.indexOf(t,n)})(e,{after:t})||n.ignoreMatch());(o=e.input.substr(t).match(/^\\s+extends\\s+/))&&0===o.index&&n.ignoreMatch()}},i={$pattern:\"[A-Za-z$_][0-9A-Za-z$_]*\",keyword:pe,literal:me,built_in:we,\"variable.language\":be},s=\"\\\\.([0-9](_?[0-9])*)\",l=\"0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*\",u={className:\"number\",variants:[{begin:`(\\\\b(${l})((${s})|\\\\.)?|(${s}))[eE][+-]?([0-9](_?[0-9])*)\\\\b`},{begin:`\\\\b(${l})\\\\b((${s})\\\\b|\\\\.)?|(${s})\\\\b`},{begin:\"\\\\b(0|[1-9](_?[0-9])*)n\\\\b\"},{begin:\"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\"},{begin:\"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\"},{begin:\"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\"},{begin:\"\\\\b0[0-7]+n?\\\\b\"}],relevance:0},c={className:\"subst\",begin:\"\\\\$\\\\{\",end:\"\\\\}\",keywords:i,contains:[]},d={begin:\"html`\",end:\"\",starts:{end:\"`\",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,c],subLanguage:\"xml\"}},h={begin:\"css`\",end:\"\",starts:{end:\"`\",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,c],subLanguage:\"css\"}},p={className:\"string\",begin:\"`\",end:\"`\",contains:[e.BACKSLASH_ESCAPE,c]},m={className:\"comment\",variants:[e.COMMENT(/\\/\\*\\*(?!\\/)/,\"\\\\*/\",{relevance:0,contains:[{begin:\"(?=@[A-Za-z]+)\",relevance:0,contains:[{className:\"doctag\",begin:\"@[A-Za-z]+\"},{className:\"type\",begin:\"\\\\{\",end:\"\\\\}\",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:\"variable\",begin:t+\"(?=\\\\s*(-)|$)\",endsParent:!0,relevance:0},{begin:/(?=[^\\n])\\s/,relevance:0}]}]}),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]},g=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,h,p,u];c.contains=g.concat({begin:/\\{/,end:/\\}/,keywords:i,contains:[\"self\"].concat(g)});const _=[].concat(m,c.contains),f=_.concat([{begin:/\\(/,end:/\\)/,keywords:i,contains:[\"self\"].concat(_)}]),b={className:\"params\",begin:/\\(/,end:/\\)/,excludeBegin:!0,excludeEnd:!0,keywords:i,contains:f},w={variants:[{match:[/class/,/\\s+/,t,/\\s+/,/extends/,/\\s+/,n.concat(t,\"(\",n.concat(/\\./,t),\")*\")],scope:{1:\"keyword\",3:\"title.class\",5:\"keyword\",7:\"title.class.inherited\"}},{match:[/class/,/\\s+/,t],scope:{1:\"keyword\",3:\"title.class\"}}]},k={relevance:0,match:n.either(/\\bJSON/,/\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,/\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,/\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/),className:\"title.class\",keywords:{_:[...ge,..._e]}},y={variants:[{match:[/function/,/\\s+/,t,/(?=\\s*\\()/]},{match:[/function/,/\\s*(?=\\()/]}],className:{1:\"keyword\",3:\"title.function\"},label:\"func.def\",contains:[b],illegal:/%/},D={match:n.concat(/\\b/,(A=[...fe,\"super\"],n.concat(\"(?!\",A.join(\"|\"),\")\")),t,n.lookahead(/\\(/)),className:\"title.function\",relevance:0};var A;const x={begin:n.concat(/\\./,n.lookahead(n.concat(t,/(?![0-9A-Za-z$_(])/))),end:t,excludeBegin:!0,keywords:\"prototype\",className:\"property\",relevance:0},v={match:[/get|set/,/\\s+/,t,/(?=\\()/],className:{1:\"keyword\",3:\"title.function\"},contains:[{begin:/\\(\\)/},b]},E=\"(\\\\([^()]*(\\\\([^()]*(\\\\([^()]*\\\\)[^()]*)*\\\\)[^()]*)*\\\\)|\"+e.UNDERSCORE_IDENT_RE+\")\\\\s*=>\",C={match:[/const|var|let/,/\\s+/,t,/\\s*/,/=\\s*/,/(async\\s*)?/,n.lookahead(E)],keywords:\"async\",className:{1:\"keyword\",3:\"title.function\"},contains:[b]};return{name:\"Javascript\",aliases:[\"js\",\"jsx\",\"mjs\",\"cjs\"],keywords:i,exports:{PARAMS_CONTAINS:f,CLASS_REFERENCE:k},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:\"shebang\",binary:\"node\",relevance:5}),{label:\"use_strict\",className:\"meta\",relevance:10,begin:/^\\s*['\"]use (strict|asm)['\"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,h,p,m,u,k,{className:\"attr\",begin:t+n.lookahead(\":\"),relevance:0},C,{begin:\"(\"+e.RE_STARTERS_RE+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",keywords:\"return throw case\",relevance:0,contains:[m,e.REGEXP_MODE,{className:\"function\",begin:E,returnBegin:!0,end:\"\\\\s*=>\",contains:[{className:\"params\",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\\(\\s*\\)/,skip:!0},{begin:/\\(/,end:/\\)/,excludeBegin:!0,excludeEnd:!0,keywords:i,contains:f}]}]},{begin:/,/,relevance:0},{match:/\\s+/,relevance:0},{variants:[{begin:r,end:o},{match:/<[A-Za-z0-9\\\\._:-]+\\s*\\/>/},{begin:a.begin,\"on:begin\":a.isTrulyOpeningTag,end:a.end}],subLanguage:\"xml\",contains:[{begin:a.begin,end:a.end,skip:!0,contains:[\"self\"]}]}]},y,{beginKeywords:\"while if switch catch for\"},{begin:\"\\\\b(?!function)\"+e.UNDERSCORE_IDENT_RE+\"\\\\([^()]*(\\\\([^()]*(\\\\([^()]*\\\\)[^()]*)*\\\\)[^()]*)*\\\\)\\\\s*\\\\{\",returnBegin:!0,label:\"func.def\",contains:[b,e.inherit(e.TITLE_MODE,{begin:t,className:\"title.function\"})]},{match:/\\.\\.\\./,relevance:0},x,{match:\"\\\\$\"+t,relevance:0},{match:[/\\bconstructor(?=\\s*\\()/],className:{1:\"title.function\"},contains:[b]},D,{relevance:0,match:/\\b[A-Z][A-Z_0-9]+\\b/,className:\"variable.constant\"},w,v,{match:/\\$[(.]/}]}},ye=ke;var De=function(e){const n={beginKeywords:[\"true\",\"false\",\"null\"].join(\" \")};return{name:\"JSON\",contains:[{className:\"attr\",begin:/\"(\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,relevance:1.01},{match:/[{}[\\],:]/,className:\"punctuation\",relevance:0},e.QUOTE_STRING_MODE,n,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:\"\\\\S\"}},Ae=De;var xe=function(e){const n=\"true false yes no null\",t=\"[\\\\w#;/?:@&=+$,.~*'()[\\\\]]+\",r={className:\"string\",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/\"/,end:/\"/},{begin:/\\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:\"template-variable\",variants:[{begin:/\\{\\{/,end:/\\}\\}/},{begin:/%\\{/,end:/\\}/}]}]},o=e.inherit(r,{variants:[{begin:/'/,end:/'/},{begin:/\"/,end:/\"/},{begin:/[^\\s,{}[\\]]+/}]}),a={className:\"number\",begin:\"\\\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\\\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\\\.[0-9]*)?([ \\\\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\\\b\"},i={end:\",\",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},s={begin:/\\{/,end:/\\}/,contains:[i],illegal:\"\\\\n\",relevance:0},l={begin:\"\\\\[\",end:\"\\\\]\",contains:[i],illegal:\"\\\\n\",relevance:0},u=[{className:\"attr\",variants:[{begin:\"\\\\w[\\\\w :\\\\/.-]*:(?=[ \\t]|$)\"},{begin:'\"\\\\w[\\\\w :\\\\/.-]*\":(?=[ \\t]|$)'},{begin:\"'\\\\w[\\\\w :\\\\/.-]*':(?=[ \\t]|$)\"}]},{className:\"meta\",begin:\"^---\\\\s*$\",relevance:10},{className:\"string\",begin:\"[\\\\|>]([1-9]?[+-])?[ ]*\\\\n( +)[^ ][^\\\\n]*\\\\n(\\\\2[^\\\\n]+\\\\n?)*\"},{begin:\"<%[%=-]?\",end:\"[%-]?%>\",subLanguage:\"ruby\",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:\"type\",begin:\"!\\\\w+!\"+t},{className:\"type\",begin:\"!<\"+t+\">\"},{className:\"type\",begin:\"!\"+t},{className:\"type\",begin:\"!!\"+t},{className:\"meta\",begin:\"&\"+e.UNDERSCORE_IDENT_RE+\"$\"},{className:\"meta\",begin:\"\\\\*\"+e.UNDERSCORE_IDENT_RE+\"$\"},{className:\"bullet\",begin:\"-(?=[ ]|$)\",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},a,{className:\"number\",begin:e.C_NUMBER_RE+\"\\\\b\",relevance:0},s,l,r],c=[...u];return c.pop(),c.push(o),i.contains=c,{name:\"YAML\",case_insensitive:!0,aliases:[\"yml\"],contains:u}},ve=xe,Ee=e((function(e,n){!function(e){function n(e,n){for(var t=0;t<n.length;t++){var r=n[t];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function t(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),Object.defineProperty(e,\"prototype\",{writable:!1}),e}function r(e,n){if(e){if(\"string\"==typeof e)return o(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);return\"Object\"===t&&e.constructor&&(t=e.constructor.name),\"Map\"===t||\"Set\"===t?Array.from(e):\"Arguments\"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?o(e,n):void 0}}function o(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}function a(e,n){var t=\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(t)return(t=t.call(e)).next.bind(t);if(Array.isArray(e)||(t=r(e))||n&&e&&\"number\"==typeof e.length){t&&(e=t);var o=0;return function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function i(){return{baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:\"\",highlight:null,langPrefix:\"language-\",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}function s(n){e.defaults=n}e.defaults=i();var l=/[&<>\"']/,u=/[&<>\"']/g,c=/[<>\"']|&(?!#?\\w+;)/,d=/[<>\"']|&(?!#?\\w+;)/g,h={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},p=function(e){return h[e]};function m(e,n){if(n){if(l.test(e))return e.replace(u,p)}else if(c.test(e))return e.replace(d,p);return e}var g=/&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/gi;function _(e){return e.replace(g,(function(e,n){return\"colon\"===(n=n.toLowerCase())?\":\":\"#\"===n.charAt(0)?\"x\"===n.charAt(1)?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1)):\"\"}))}var f=/(^|[^\\[])\\^/g;function b(e,n){e=\"string\"==typeof e?e:e.source,n=n||\"\";var t={replace:function(n,r){return r=(r=r.source||r).replace(f,\"$1\"),e=e.replace(n,r),t},getRegex:function(){return new RegExp(e,n)}};return t}var w=/[^\\w:]/g,k=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function y(e,n,t){if(e){var r;try{r=decodeURIComponent(_(t)).replace(w,\"\").toLowerCase()}catch(e){return null}if(0===r.indexOf(\"javascript:\")||0===r.indexOf(\"vbscript:\")||0===r.indexOf(\"data:\"))return null}n&&!k.test(t)&&(t=E(n,t));try{t=encodeURI(t).replace(/%25/g,\"%\")}catch(e){return null}return t}var D={},A=/^[^:]+:\\/*[^/]*$/,x=/^([^:]+:)[\\s\\S]*$/,v=/^([^:]+:\\/*[^/]*)[\\s\\S]*$/;function E(e,n){D[\" \"+e]||(A.test(e)?D[\" \"+e]=e+\"/\":D[\" \"+e]=z(e,\"/\",!0));var t=-1===(e=D[\" \"+e]).indexOf(\":\");return\"//\"===n.substring(0,2)?t?n:e.replace(x,\"$1\")+n:\"/\"===n.charAt(0)?t?n:e.replace(v,\"$1\")+n:e+n}var C={exec:function(){}};function F(e){for(var n,t,r=1;r<arguments.length;r++)for(t in n=arguments[r])Object.prototype.hasOwnProperty.call(n,t)&&(e[t]=n[t]);return e}function B(e,n){var t=e.replace(/\\|/g,(function(e,n,t){for(var r=!1,o=n;--o>=0&&\"\\\\\"===t[o];)r=!r;return r?\"|\":\" |\"})).split(/ \\|/),r=0;if(t[0].trim()||t.shift(),t.length>0&&!t[t.length-1].trim()&&t.pop(),t.length>n)t.splice(n);else for(;t.length<n;)t.push(\"\");for(;r<t.length;r++)t[r]=t[r].trim().replace(/\\\\\\|/g,\"|\");return t}function z(e,n,t){var r=e.length;if(0===r)return\"\";for(var o=0;o<r;){var a=e.charAt(r-o-1);if(a!==n||t){if(a===n||!t)break;o++}else o++}return e.slice(0,r-o)}function S(e,n){if(-1===e.indexOf(n[1]))return-1;for(var t=e.length,r=0,o=0;o<t;o++)if(\"\\\\\"===e[o])o++;else if(e[o]===n[0])r++;else if(e[o]===n[1]&&--r<0)return o;return-1}function N(e){e&&e.sanitize&&!e.silent&&console.warn(\"marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options\")}function T(e,n){if(n<1)return\"\";for(var t=\"\";n>1;)1&n&&(t+=e),n>>=1,e+=e;return t+e}function O(e,n,t,r){var o=n.href,a=n.title?m(n.title):null,i=e[1].replace(/\\\\([\\[\\]])/g,\"$1\");if(\"!\"!==e[0].charAt(0)){r.state.inLink=!0;var s={type:\"link\",raw:t,href:o,title:a,text:i,tokens:r.inlineTokens(i,[])};return r.state.inLink=!1,s}return{type:\"image\",raw:t,href:o,title:a,text:m(i)}}function j(e,n){var t=e.match(/^(\\s+)(?:```)/);if(null===t)return n;var r=t[1];return n.split(\"\\n\").map((function(e){var n=e.match(/^\\s+/);return null===n?e:n[0].length>=r.length?e.slice(r.length):e})).join(\"\\n\")}var R=function(){function n(n){this.options=n||e.defaults}var t=n.prototype;return t.space=function(e){var n=this.rules.block.newline.exec(e);if(n&&n[0].length>0)return{type:\"space\",raw:n[0]}},t.code=function(e){var n=this.rules.block.code.exec(e);if(n){var t=n[0].replace(/^ {1,4}/gm,\"\");return{type:\"code\",raw:n[0],codeBlockStyle:\"indented\",text:this.options.pedantic?t:z(t,\"\\n\")}}},t.fences=function(e){var n=this.rules.block.fences.exec(e);if(n){var t=n[0],r=j(t,n[3]||\"\");return{type:\"code\",raw:t,lang:n[2]?n[2].trim():n[2],text:r}}},t.heading=function(e){var n=this.rules.block.heading.exec(e);if(n){var t=n[2].trim();if(/#$/.test(t)){var r=z(t,\"#\");this.options.pedantic?t=r.trim():r&&!/ $/.test(r)||(t=r.trim())}var o={type:\"heading\",raw:n[0],depth:n[1].length,text:t,tokens:[]};return this.lexer.inline(o.text,o.tokens),o}},t.hr=function(e){var n=this.rules.block.hr.exec(e);if(n)return{type:\"hr\",raw:n[0]}},t.blockquote=function(e){var n=this.rules.block.blockquote.exec(e);if(n){var t=n[0].replace(/^ *>[ \\t]?/gm,\"\");return{type:\"blockquote\",raw:n[0],tokens:this.lexer.blockTokens(t,[]),text:t}}},t.list=function(e){var n=this.rules.block.list.exec(e);if(n){var t,r,o,i,s,l,u,c,d,h,p,m,g=n[1].trim(),_=g.length>1,f={type:\"list\",raw:\"\",ordered:_,start:_?+g.slice(0,-1):\"\",loose:!1,items:[]};g=_?\"\\\\d{1,9}\\\\\"+g.slice(-1):\"\\\\\"+g,this.options.pedantic&&(g=_?g:\"[*+-]\");for(var b=new RegExp(\"^( {0,3}\"+g+\")((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))\");e&&(m=!1,n=b.exec(e))&&!this.rules.block.hr.test(e);){if(t=n[0],e=e.substring(t.length),c=n[2].split(\"\\n\",1)[0],d=e.split(\"\\n\",1)[0],this.options.pedantic?(i=2,p=c.trimLeft()):(i=(i=n[2].search(/[^ ]/))>4?1:i,p=c.slice(i),i+=n[1].length),l=!1,!c&&/^ *$/.test(d)&&(t+=d+\"\\n\",e=e.substring(d.length+1),m=!0),!m)for(var w=new RegExp(\"^ {0,\"+Math.min(3,i-1)+\"}(?:[*+-]|\\\\d{1,9}[.)])((?: [^\\\\n]*)?(?:\\\\n|$))\"),k=new RegExp(\"^ {0,\"+Math.min(3,i-1)+\"}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)\"),y=new RegExp(\"^( {0,\"+Math.min(3,i-1)+\"})(```|~~~)\");e&&(c=h=e.split(\"\\n\",1)[0],this.options.pedantic&&(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g,\"  \")),!y.test(c))&&!this.rules.block.heading.test(c)&&!w.test(c)&&!k.test(e);){if(c.search(/[^ ]/)>=i||!c.trim())p+=\"\\n\"+c.slice(i);else{if(l)break;p+=\"\\n\"+c}l||c.trim()||(l=!0),t+=h+\"\\n\",e=e.substring(h.length+1)}f.loose||(u?f.loose=!0:/\\n *\\n *$/.test(t)&&(u=!0)),this.options.gfm&&(r=/^\\[[ xX]\\] /.exec(p))&&(o=\"[ ] \"!==r[0],p=p.replace(/^\\[[ xX]\\] +/,\"\")),f.items.push({type:\"list_item\",raw:t,task:!!r,checked:o,loose:!1,text:p}),f.raw+=t}f.items[f.items.length-1].raw=t.trimRight(),f.items[f.items.length-1].text=p.trimRight(),f.raw=f.raw.trimRight();var D=f.items.length;for(s=0;s<D;s++){this.lexer.state.top=!1,f.items[s].tokens=this.lexer.blockTokens(f.items[s].text,[]);var A=f.items[s].tokens.filter((function(e){return\"space\"===e.type})),x=A.every((function(e){for(var n,t=0,r=a(e.raw.split(\"\"));!(n=r()).done;)if(\"\\n\"===n.value&&(t+=1),t>1)return!0;return!1}));!f.loose&&A.length&&x&&(f.loose=!0,f.items[s].loose=!0)}return f}},t.html=function(e){var n=this.rules.block.html.exec(e);if(n){var t={type:\"html\",raw:n[0],pre:!this.options.sanitizer&&(\"pre\"===n[1]||\"script\"===n[1]||\"style\"===n[1]),text:n[0]};return this.options.sanitize&&(t.type=\"paragraph\",t.text=this.options.sanitizer?this.options.sanitizer(n[0]):m(n[0]),t.tokens=[],this.lexer.inline(t.text,t.tokens)),t}},t.def=function(e){var n=this.rules.block.def.exec(e);if(n)return n[3]&&(n[3]=n[3].substring(1,n[3].length-1)),{type:\"def\",tag:n[1].toLowerCase().replace(/\\s+/g,\" \"),raw:n[0],href:n[2],title:n[3]}},t.table=function(e){var n=this.rules.block.table.exec(e);if(n){var t={type:\"table\",header:B(n[1]).map((function(e){return{text:e}})),align:n[2].replace(/^ *|\\| *$/g,\"\").split(/ *\\| */),rows:n[3]&&n[3].trim()?n[3].replace(/\\n[ \\t]*$/,\"\").split(\"\\n\"):[]};if(t.header.length===t.align.length){t.raw=n[0];var r,o,a,i,s=t.align.length;for(r=0;r<s;r++)/^ *-+: *$/.test(t.align[r])?t.align[r]=\"right\":/^ *:-+: *$/.test(t.align[r])?t.align[r]=\"center\":/^ *:-+ *$/.test(t.align[r])?t.align[r]=\"left\":t.align[r]=null;for(s=t.rows.length,r=0;r<s;r++)t.rows[r]=B(t.rows[r],t.header.length).map((function(e){return{text:e}}));for(s=t.header.length,o=0;o<s;o++)t.header[o].tokens=[],this.lexer.inline(t.header[o].text,t.header[o].tokens);for(s=t.rows.length,o=0;o<s;o++)for(i=t.rows[o],a=0;a<i.length;a++)i[a].tokens=[],this.lexer.inline(i[a].text,i[a].tokens);return t}}},t.lheading=function(e){var n=this.rules.block.lheading.exec(e);if(n){var t={type:\"heading\",raw:n[0],depth:\"=\"===n[2].charAt(0)?1:2,text:n[1],tokens:[]};return this.lexer.inline(t.text,t.tokens),t}},t.paragraph=function(e){var n=this.rules.block.paragraph.exec(e);if(n){var t={type:\"paragraph\",raw:n[0],text:\"\\n\"===n[1].charAt(n[1].length-1)?n[1].slice(0,-1):n[1],tokens:[]};return this.lexer.inline(t.text,t.tokens),t}},t.text=function(e){var n=this.rules.block.text.exec(e);if(n){var t={type:\"text\",raw:n[0],text:n[0],tokens:[]};return this.lexer.inline(t.text,t.tokens),t}},t.escape=function(e){var n=this.rules.inline.escape.exec(e);if(n)return{type:\"escape\",raw:n[0],text:m(n[1])}},t.tag=function(e){var n=this.rules.inline.tag.exec(e);if(n)return!this.lexer.state.inLink&&/^<a /i.test(n[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&/^<\\/a>/i.test(n[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\\s|>)/i.test(n[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\\/(pre|code|kbd|script)(\\s|>)/i.test(n[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?\"text\":\"html\",raw:n[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(n[0]):m(n[0]):n[0]}},t.link=function(e){var n=this.rules.inline.link.exec(e);if(n){var t=n[2].trim();if(!this.options.pedantic&&/^</.test(t)){if(!/>$/.test(t))return;var r=z(t.slice(0,-1),\"\\\\\");if((t.length-r.length)%2==0)return}else{var o=S(n[2],\"()\");if(o>-1){var a=(0===n[0].indexOf(\"!\")?5:4)+n[1].length+o;n[2]=n[2].substring(0,o),n[0]=n[0].substring(0,a).trim(),n[3]=\"\"}}var i=n[2],s=\"\";if(this.options.pedantic){var l=/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(i);l&&(i=l[1],s=l[3])}else s=n[3]?n[3].slice(1,-1):\"\";return i=i.trim(),/^</.test(i)&&(i=this.options.pedantic&&!/>$/.test(t)?i.slice(1):i.slice(1,-1)),O(n,{href:i?i.replace(this.rules.inline._escapes,\"$1\"):i,title:s?s.replace(this.rules.inline._escapes,\"$1\"):s},n[0],this.lexer)}},t.reflink=function(e,n){var t;if((t=this.rules.inline.reflink.exec(e))||(t=this.rules.inline.nolink.exec(e))){var r=(t[2]||t[1]).replace(/\\s+/g,\" \");if(!(r=n[r.toLowerCase()])||!r.href){var o=t[0].charAt(0);return{type:\"text\",raw:o,text:o}}return O(t,r,t[0],this.lexer)}},t.emStrong=function(e,n,t){void 0===t&&(t=\"\");var r=this.rules.inline.emStrong.lDelim.exec(e);if(r&&(!r[3]||!t.match(/(?:[0-9A-Za-z\\xAA\\xB2\\xB3\\xB5\\xB9\\xBA\\xBC-\\xBE\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u0660-\\u0669\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07C0-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0966-\\u096F\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09E6-\\u09F1\\u09F4-\\u09F9\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A6F\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AE6-\\u0AEF\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71-\\u0B77\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0BE6-\\u0BF2\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D58-\\u0D61\\u0D66-\\u0D78\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DE6-\\u0DEF\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F20-\\u0F33\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F-\\u1049\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1090-\\u1099\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1369-\\u137C\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B50-\\u1B59\\u1B83-\\u1BA0\\u1BAE-\\u1BE5\\u1C00-\\u1C23\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2070\\u2071\\u2074-\\u2079\\u207F-\\u2089\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2150-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2CFD\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u3192-\\u3195\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA830-\\uA835\\uA840-\\uA873\\uA882-\\uA8B3\\uA8D0-\\uA8D9\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA900-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF-\\uA9D9\\uA9E0-\\uA9E4\\uA9E6-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD07-\\uDD33\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE1-\\uDEFB\\uDF00-\\uDF23\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC58-\\uDC76\\uDC79-\\uDC9E\\uDCA7-\\uDCAF\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDCFB-\\uDD1B\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBC-\\uDDCF\\uDDD2-\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE40-\\uDE48\\uDE60-\\uDE7E\\uDE80-\\uDE9F\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDEEB-\\uDEEF\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF58-\\uDF72\\uDF78-\\uDF91\\uDFA9-\\uDFAF]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDCFA-\\uDD23\\uDD30-\\uDD39\\uDE60-\\uDE7E\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF27\\uDF30-\\uDF45\\uDF51-\\uDF54\\uDF70-\\uDF81\\uDFB0-\\uDFCB\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC52-\\uDC6F\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD03-\\uDD26\\uDD36-\\uDD3F\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDD0-\\uDDDA\\uDDDC\\uDDE1-\\uDDF4\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDEF0-\\uDEF9\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC50-\\uDC59\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEAA\\uDEB8\\uDEC0-\\uDEC9\\uDF00-\\uDF1A\\uDF30-\\uDF3B\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCF2\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDD50-\\uDD59\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC50-\\uDC6C\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD50-\\uDD59\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDDA0-\\uDDA9\\uDEE0-\\uDEF2\\uDFB0\\uDFC0-\\uDFD4]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDE70-\\uDEBE\\uDEC0-\\uDEC9\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF5B-\\uDF61\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE96\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD834[\\uDEE0-\\uDEF3\\uDF60-\\uDF78]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB\\uDEF0-\\uDEF9]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDCC7-\\uDCCF\\uDD00-\\uDD43\\uDD4B\\uDD50-\\uDD59]|\\uD83B[\\uDC71-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDCB4\\uDD01-\\uDD2D\\uDD2F-\\uDD3D\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD83C[\\uDD00-\\uDD0C]|\\uD83E[\\uDFF0-\\uDFF9]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/))){var o=r[1]||r[2]||\"\";if(!o||o&&(\"\"===t||this.rules.inline.punctuation.exec(t))){var a,i,s=r[0].length-1,l=s,u=0,c=\"*\"===r[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(c.lastIndex=0,n=n.slice(-1*e.length+s);null!=(r=c.exec(n));)if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6])if(i=a.length,r[3]||r[4])l+=i;else if(!((r[5]||r[6])&&s%3)||(s+i)%3){if(!((l-=i)>0)){if(i=Math.min(i,i+l+u),Math.min(s,i)%2){var d=e.slice(1,s+r.index+i);return{type:\"em\",raw:e.slice(0,s+r.index+i+1),text:d,tokens:this.lexer.inlineTokens(d,[])}}var h=e.slice(2,s+r.index+i-1);return{type:\"strong\",raw:e.slice(0,s+r.index+i+1),text:h,tokens:this.lexer.inlineTokens(h,[])}}}else u+=i}}},t.codespan=function(e){var n=this.rules.inline.code.exec(e);if(n){var t=n[2].replace(/\\n/g,\" \"),r=/[^ ]/.test(t),o=/^ /.test(t)&&/ $/.test(t);return r&&o&&(t=t.substring(1,t.length-1)),t=m(t,!0),{type:\"codespan\",raw:n[0],text:t}}},t.br=function(e){var n=this.rules.inline.br.exec(e);if(n)return{type:\"br\",raw:n[0]}},t.del=function(e){var n=this.rules.inline.del.exec(e);if(n)return{type:\"del\",raw:n[0],text:n[2],tokens:this.lexer.inlineTokens(n[2],[])}},t.autolink=function(e,n){var t,r,o=this.rules.inline.autolink.exec(e);if(o)return r=\"@\"===o[2]?\"mailto:\"+(t=m(this.options.mangle?n(o[1]):o[1])):t=m(o[1]),{type:\"link\",raw:o[0],text:t,href:r,tokens:[{type:\"text\",raw:t,text:t}]}},t.url=function(e,n){var t;if(t=this.rules.inline.url.exec(e)){var r,o;if(\"@\"===t[2])o=\"mailto:\"+(r=m(this.options.mangle?n(t[0]):t[0]));else{var a;do{a=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])[0]}while(a!==t[0]);r=m(t[0]),o=\"www.\"===t[1]?\"http://\"+r:r}return{type:\"link\",raw:t[0],text:r,href:o,tokens:[{type:\"text\",raw:r,text:r}]}}},t.inlineText=function(e,n){var t,r=this.rules.inline.text.exec(e);if(r)return t=this.lexer.state.inRawBlock?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):m(r[0]):r[0]:m(this.options.smartypants?n(r[0]):r[0]),{type:\"text\",raw:r[0],text:t}},n}(),M={newline:/^(?: *(?:\\n|$))+/,code:/^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,hr:/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,list:/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/,html:\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$))\",def:/^ {0,3}\\[(label)\\]: *(?:\\n *)?<?([^\\s>]+)>?(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/,table:C,lheading:/^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,_paragraph:/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,text:/^[^\\n]+/,_label:/(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/,_title:/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/};M.def=b(M.def).replace(\"label\",M._label).replace(\"title\",M._title).getRegex(),M.bullet=/(?:[*+-]|\\d{1,9}[.)])/,M.listItemStart=b(/^( *)(bull) */).replace(\"bull\",M.bullet).getRegex(),M.list=b(M.list).replace(/bull/g,M.bullet).replace(\"hr\",\"\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))\").replace(\"def\",\"\\\\n+(?=\"+M.def.source+\")\").getRegex(),M._tag=\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",M._comment=/<!--(?!-?>)[\\s\\S]*?(?:-->|$)/,M.html=b(M.html,\"i\").replace(\"comment\",M._comment).replace(\"tag\",M._tag).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),M.paragraph=b(M._paragraph).replace(\"hr\",M.hr).replace(\"heading\",\" {0,3}#{1,6} \").replace(\"|lheading\",\"\").replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",M._tag).getRegex(),M.blockquote=b(M.blockquote).replace(\"paragraph\",M.paragraph).getRegex(),M.normal=F({},M),M.gfm=F({},M.normal,{table:\"^ *([^\\\\n ].*\\\\|.*)\\\\n {0,3}(?:\\\\| *)?(:?-+:? *(?:\\\\| *:?-+:? *)*)(?:\\\\| *)?(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\"}),M.gfm.table=b(M.gfm.table).replace(\"hr\",M.hr).replace(\"heading\",\" {0,3}#{1,6} \").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\" {4}[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",M._tag).getRegex(),M.gfm.paragraph=b(M._paragraph).replace(\"hr\",M.hr).replace(\"heading\",\" {0,3}#{1,6} \").replace(\"|lheading\",\"\").replace(\"table\",M.gfm.table).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)]) \").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",M._tag).getRegex(),M.pedantic=F({},M.normal,{html:b(\"^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\\\"[^\\\"]*\\\"|'[^']*'|\\\\s[^'\\\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))\").replace(\"comment\",M._comment).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:C,paragraph:b(M.normal._paragraph).replace(\"hr\",M.hr).replace(\"heading\",\" *#{1,6} *[^\\n]\").replace(\"lheading\",M.lheading).replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").getRegex()});var I={escape:/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,autolink:/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,url:C,tag:\"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\",link:/^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,reflink:/^!?\\[(label)\\]\\[(ref)\\]/,nolink:/^!?\\[(ref)\\](?:\\[\\])?/,reflinkSearch:\"reflink|nolink(?!\\\\()\",emStrong:{lDelim:/^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,rDelimAst:/^[^_*]*?\\_\\_[^_*]*?\\*[^_*]*?(?=\\_\\_)|[^*]+(?=[^*])|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,rDelimUnd:/^[^_*]*?\\*\\*[^_*]*?\\_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,br:/^( {2,}|\\\\)\\n(?!\\s*$)/,del:C,text:/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,punctuation:/^([\\spunctuation])/};function L(e){return e.replace(/---/g,\"—\").replace(/--/g,\"–\").replace(/(^|[-\\u2014/(\\[{\"\\s])'/g,\"$1‘\").replace(/'/g,\"’\").replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g,\"$1“\").replace(/\"/g,\"”\").replace(/\\.{3}/g,\"…\")}function $(e){var n,t,r=\"\",o=e.length;for(n=0;n<o;n++)t=e.charCodeAt(n),Math.random()>.5&&(t=\"x\"+t.toString(16)),r+=\"&#\"+t+\";\";return r}I._punctuation=\"!\\\"#$%&'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~\",I.punctuation=b(I.punctuation).replace(/punctuation/g,I._punctuation).getRegex(),I.blockSkip=/\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g,I.escapedEmSt=/\\\\\\*|\\\\_/g,I._comment=b(M._comment).replace(\"(?:--\\x3e|$)\",\"--\\x3e\").getRegex(),I.emStrong.lDelim=b(I.emStrong.lDelim).replace(/punct/g,I._punctuation).getRegex(),I.emStrong.rDelimAst=b(I.emStrong.rDelimAst,\"g\").replace(/punct/g,I._punctuation).getRegex(),I.emStrong.rDelimUnd=b(I.emStrong.rDelimUnd,\"g\").replace(/punct/g,I._punctuation).getRegex(),I._escapes=/\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g,I._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,I._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,I.autolink=b(I.autolink).replace(\"scheme\",I._scheme).replace(\"email\",I._email).getRegex(),I._attribute=/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/,I.tag=b(I.tag).replace(\"comment\",I._comment).replace(\"attribute\",I._attribute).getRegex(),I._label=/(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/,I._href=/<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/,I._title=/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/,I.link=b(I.link).replace(\"label\",I._label).replace(\"href\",I._href).replace(\"title\",I._title).getRegex(),I.reflink=b(I.reflink).replace(\"label\",I._label).replace(\"ref\",M._label).getRegex(),I.nolink=b(I.nolink).replace(\"ref\",M._label).getRegex(),I.reflinkSearch=b(I.reflinkSearch,\"g\").replace(\"reflink\",I.reflink).replace(\"nolink\",I.nolink).getRegex(),I.normal=F({},I),I.pedantic=F({},I.normal,{strong:{start:/^__|\\*\\*/,middle:/^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,endAst:/\\*\\*(?!\\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\\*/,middle:/^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,endAst:/\\*(?!\\*)/g,endUnd:/_(?!_)/g},link:b(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",I._label).getRegex(),reflink:b(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",I._label).getRegex()}),I.gfm=F({},I.normal,{escape:b(I.escape).replace(\"])\",\"~|])\").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/}),I.gfm.url=b(I.gfm.url,\"i\").replace(\"email\",I.gfm._extended_email).getRegex(),I.breaks=F({},I.gfm,{br:b(I.br).replace(\"{2,}\",\"*\").getRegex(),text:b(I.gfm.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()});var U=function(){function n(n){this.tokens=[],this.tokens.links=Object.create(null),this.options=n||e.defaults,this.options.tokenizer=this.options.tokenizer||new R,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};var t={block:M.normal,inline:I.normal};this.options.pedantic?(t.block=M.pedantic,t.inline=I.pedantic):this.options.gfm&&(t.block=M.gfm,this.options.breaks?t.inline=I.breaks:t.inline=I.gfm),this.tokenizer.rules=t}n.lex=function(e,t){return new n(t).lex(e)},n.lexInline=function(e,t){return new n(t).inlineTokens(e)};var r=n.prototype;return r.lex=function(e){var n;for(e=e.replace(/\\r\\n|\\r/g,\"\\n\"),this.blockTokens(e,this.tokens);n=this.inlineQueue.shift();)this.inlineTokens(n.src,n.tokens);return this.tokens},r.blockTokens=function(e,n){var t,r,o,a,i=this;for(void 0===n&&(n=[]),e=this.options.pedantic?e.replace(/\\t/g,\"    \").replace(/^ +$/gm,\"\"):e.replace(/^( *)(\\t+)/gm,(function(e,n,t){return n+\"    \".repeat(t.length)}));e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some((function(r){return!!(t=r.call({lexer:i},e,n))&&(e=e.substring(t.raw.length),n.push(t),!0)}))))if(t=this.tokenizer.space(e))e=e.substring(t.raw.length),1===t.raw.length&&n.length>0?n[n.length-1].raw+=\"\\n\":n.push(t);else if(t=this.tokenizer.code(e))e=e.substring(t.raw.length),!(r=n[n.length-1])||\"paragraph\"!==r.type&&\"text\"!==r.type?n.push(t):(r.raw+=\"\\n\"+t.raw,r.text+=\"\\n\"+t.text,this.inlineQueue[this.inlineQueue.length-1].src=r.text);else if(t=this.tokenizer.fences(e))e=e.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.heading(e))e=e.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.hr(e))e=e.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.blockquote(e))e=e.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.list(e))e=e.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.html(e))e=e.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.def(e))e=e.substring(t.raw.length),!(r=n[n.length-1])||\"paragraph\"!==r.type&&\"text\"!==r.type?this.tokens.links[t.tag]||(this.tokens.links[t.tag]={href:t.href,title:t.title}):(r.raw+=\"\\n\"+t.raw,r.text+=\"\\n\"+t.raw,this.inlineQueue[this.inlineQueue.length-1].src=r.text);else if(t=this.tokenizer.table(e))e=e.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.lheading(e))e=e.substring(t.raw.length),n.push(t);else if(o=e,this.options.extensions&&this.options.extensions.startBlock&&function(){var n=1/0,t=e.slice(1),r=void 0;i.options.extensions.startBlock.forEach((function(e){\"number\"==typeof(r=e.call({lexer:this},t))&&r>=0&&(n=Math.min(n,r))})),n<1/0&&n>=0&&(o=e.substring(0,n+1))}(),this.state.top&&(t=this.tokenizer.paragraph(o)))r=n[n.length-1],a&&\"paragraph\"===r.type?(r.raw+=\"\\n\"+t.raw,r.text+=\"\\n\"+t.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=r.text):n.push(t),a=o.length!==e.length,e=e.substring(t.raw.length);else if(t=this.tokenizer.text(e))e=e.substring(t.raw.length),(r=n[n.length-1])&&\"text\"===r.type?(r.raw+=\"\\n\"+t.raw,r.text+=\"\\n\"+t.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=r.text):n.push(t);else if(e){var s=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(s);break}throw new Error(s)}return this.state.top=!0,n},r.inline=function(e,n){this.inlineQueue.push({src:e,tokens:n})},r.inlineTokens=function(e,n){var t,r,o,a=this;void 0===n&&(n=[]);var i,s,l,u=e;if(this.tokens.links){var c=Object.keys(this.tokens.links);if(c.length>0)for(;null!=(i=this.tokenizer.rules.inline.reflinkSearch.exec(u));)c.includes(i[0].slice(i[0].lastIndexOf(\"[\")+1,-1))&&(u=u.slice(0,i.index)+\"[\"+T(\"a\",i[0].length-2)+\"]\"+u.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(i=this.tokenizer.rules.inline.blockSkip.exec(u));)u=u.slice(0,i.index)+\"[\"+T(\"a\",i[0].length-2)+\"]\"+u.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(i=this.tokenizer.rules.inline.escapedEmSt.exec(u));)u=u.slice(0,i.index)+\"++\"+u.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(s||(l=\"\"),s=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((function(r){return!!(t=r.call({lexer:a},e,n))&&(e=e.substring(t.raw.length),n.push(t),!0)}))))if(t=this.tokenizer.escape(e))e=e.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.tag(e))e=e.substring(t.raw.length),(r=n[n.length-1])&&\"text\"===t.type&&\"text\"===r.type?(r.raw+=t.raw,r.text+=t.text):n.push(t);else if(t=this.tokenizer.link(e))e=e.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(t.raw.length),(r=n[n.length-1])&&\"text\"===t.type&&\"text\"===r.type?(r.raw+=t.raw,r.text+=t.text):n.push(t);else if(t=this.tokenizer.emStrong(e,u,l))e=e.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.codespan(e))e=e.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.br(e))e=e.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.del(e))e=e.substring(t.raw.length),n.push(t);else if(t=this.tokenizer.autolink(e,$))e=e.substring(t.raw.length),n.push(t);else if(this.state.inLink||!(t=this.tokenizer.url(e,$))){if(o=e,this.options.extensions&&this.options.extensions.startInline&&function(){var n=1/0,t=e.slice(1),r=void 0;a.options.extensions.startInline.forEach((function(e){\"number\"==typeof(r=e.call({lexer:this},t))&&r>=0&&(n=Math.min(n,r))})),n<1/0&&n>=0&&(o=e.substring(0,n+1))}(),t=this.tokenizer.inlineText(o,L))e=e.substring(t.raw.length),\"_\"!==t.raw.slice(-1)&&(l=t.raw.slice(-1)),s=!0,(r=n[n.length-1])&&\"text\"===r.type?(r.raw+=t.raw,r.text+=t.text):n.push(t);else if(e){var d=\"Infinite loop on byte: \"+e.charCodeAt(0);if(this.options.silent){console.error(d);break}throw new Error(d)}}else e=e.substring(t.raw.length),n.push(t);return n},t(n,null,[{key:\"rules\",get:function(){return{block:M,inline:I}}}]),n}(),q=function(){function n(n){this.options=n||e.defaults}var t=n.prototype;return t.code=function(e,n,t){var r=(n||\"\").match(/\\S*/)[0];if(this.options.highlight){var o=this.options.highlight(e,r);null!=o&&o!==e&&(t=!0,e=o)}return e=e.replace(/\\n$/,\"\")+\"\\n\",r?'<pre><code class=\"'+this.options.langPrefix+m(r,!0)+'\">'+(t?e:m(e,!0))+\"</code></pre>\\n\":\"<pre><code>\"+(t?e:m(e,!0))+\"</code></pre>\\n\"},t.blockquote=function(e){return\"<blockquote>\\n\"+e+\"</blockquote>\\n\"},t.html=function(e){return e},t.heading=function(e,n,t,r){return this.options.headerIds?\"<h\"+n+' id=\"'+(this.options.headerPrefix+r.slug(t))+'\">'+e+\"</h\"+n+\">\\n\":\"<h\"+n+\">\"+e+\"</h\"+n+\">\\n\"},t.hr=function(){return this.options.xhtml?\"<hr/>\\n\":\"<hr>\\n\"},t.list=function(e,n,t){var r=n?\"ol\":\"ul\";return\"<\"+r+(n&&1!==t?' start=\"'+t+'\"':\"\")+\">\\n\"+e+\"</\"+r+\">\\n\"},t.listitem=function(e){return\"<li>\"+e+\"</li>\\n\"},t.checkbox=function(e){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\"'+(this.options.xhtml?\" /\":\"\")+\"> \"},t.paragraph=function(e){return\"<p>\"+e+\"</p>\\n\"},t.table=function(e,n){return n&&(n=\"<tbody>\"+n+\"</tbody>\"),\"<table>\\n<thead>\\n\"+e+\"</thead>\\n\"+n+\"</table>\\n\"},t.tablerow=function(e){return\"<tr>\\n\"+e+\"</tr>\\n\"},t.tablecell=function(e,n){var t=n.header?\"th\":\"td\";return(n.align?\"<\"+t+' align=\"'+n.align+'\">':\"<\"+t+\">\")+e+\"</\"+t+\">\\n\"},t.strong=function(e){return\"<strong>\"+e+\"</strong>\"},t.em=function(e){return\"<em>\"+e+\"</em>\"},t.codespan=function(e){return\"<code>\"+e+\"</code>\"},t.br=function(){return this.options.xhtml?\"<br/>\":\"<br>\"},t.del=function(e){return\"<del>\"+e+\"</del>\"},t.link=function(e,n,t){if(null===(e=y(this.options.sanitize,this.options.baseUrl,e)))return t;var r='<a href=\"'+m(e)+'\"';return n&&(r+=' title=\"'+n+'\"'),r+=\">\"+t+\"</a>\"},t.image=function(e,n,t){if(null===(e=y(this.options.sanitize,this.options.baseUrl,e)))return t;var r='<img src=\"'+e+'\" alt=\"'+t+'\"';return n&&(r+=' title=\"'+n+'\"'),r+=this.options.xhtml?\"/>\":\">\"},t.text=function(e){return e},n}(),P=function(){function e(){}var n=e.prototype;return n.strong=function(e){return e},n.em=function(e){return e},n.codespan=function(e){return e},n.del=function(e){return e},n.html=function(e){return e},n.text=function(e){return e},n.link=function(e,n,t){return\"\"+t},n.image=function(e,n,t){return\"\"+t},n.br=function(){return\"\"},e}(),H=function(){function e(){this.seen={}}var n=e.prototype;return n.serialize=function(e){return e.toLowerCase().trim().replace(/<[!\\/a-z].*?>/gi,\"\").replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g,\"\").replace(/\\s/g,\"-\")},n.getNextSafeSlug=function(e,n){var t=e,r=0;if(this.seen.hasOwnProperty(t)){r=this.seen[e];do{t=e+\"-\"+ ++r}while(this.seen.hasOwnProperty(t))}return n||(this.seen[e]=r,this.seen[t]=0),t},n.slug=function(e,n){void 0===n&&(n={});var t=this.serialize(e);return this.getNextSafeSlug(t,n.dryrun)},e}(),Z=function(){function n(n){this.options=n||e.defaults,this.options.renderer=this.options.renderer||new q,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new P,this.slugger=new H}n.parse=function(e,t){return new n(t).parse(e)},n.parseInline=function(e,t){return new n(t).parseInline(e)};var t=n.prototype;return t.parse=function(e,n){void 0===n&&(n=!0);var t,r,o,a,i,s,l,u,c,d,h,p,m,g,f,b,w,k,y,D=\"\",A=e.length;for(t=0;t<A;t++)if(d=e[t],!(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[d.type])||!1===(y=this.options.extensions.renderers[d.type].call({parser:this},d))&&[\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"paragraph\",\"text\"].includes(d.type))switch(d.type){case\"space\":continue;case\"hr\":D+=this.renderer.hr();continue;case\"heading\":D+=this.renderer.heading(this.parseInline(d.tokens),d.depth,_(this.parseInline(d.tokens,this.textRenderer)),this.slugger);continue;case\"code\":D+=this.renderer.code(d.text,d.lang,d.escaped);continue;case\"table\":for(u=\"\",l=\"\",a=d.header.length,r=0;r<a;r++)l+=this.renderer.tablecell(this.parseInline(d.header[r].tokens),{header:!0,align:d.align[r]});for(u+=this.renderer.tablerow(l),c=\"\",a=d.rows.length,r=0;r<a;r++){for(l=\"\",i=(s=d.rows[r]).length,o=0;o<i;o++)l+=this.renderer.tablecell(this.parseInline(s[o].tokens),{header:!1,align:d.align[o]});c+=this.renderer.tablerow(l)}D+=this.renderer.table(u,c);continue;case\"blockquote\":c=this.parse(d.tokens),D+=this.renderer.blockquote(c);continue;case\"list\":for(h=d.ordered,p=d.start,m=d.loose,a=d.items.length,c=\"\",r=0;r<a;r++)b=(f=d.items[r]).checked,w=f.task,g=\"\",f.task&&(k=this.renderer.checkbox(b),m?f.tokens.length>0&&\"paragraph\"===f.tokens[0].type?(f.tokens[0].text=k+\" \"+f.tokens[0].text,f.tokens[0].tokens&&f.tokens[0].tokens.length>0&&\"text\"===f.tokens[0].tokens[0].type&&(f.tokens[0].tokens[0].text=k+\" \"+f.tokens[0].tokens[0].text)):f.tokens.unshift({type:\"text\",text:k}):g+=k),g+=this.parse(f.tokens,m),c+=this.renderer.listitem(g,w,b);D+=this.renderer.list(c,h,p);continue;case\"html\":D+=this.renderer.html(d.text);continue;case\"paragraph\":D+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case\"text\":for(c=d.tokens?this.parseInline(d.tokens):d.text;t+1<A&&\"text\"===e[t+1].type;)c+=\"\\n\"+((d=e[++t]).tokens?this.parseInline(d.tokens):d.text);D+=n?this.renderer.paragraph(c):c;continue;default:var x='Token with \"'+d.type+'\" type was not found.';if(this.options.silent)return void console.error(x);throw new Error(x)}else D+=y||\"\";return D},t.parseInline=function(e,n){n=n||this.renderer;var t,r,o,a=\"\",i=e.length;for(t=0;t<i;t++)if(r=e[t],!(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[r.type])||!1===(o=this.options.extensions.renderers[r.type].call({parser:this},r))&&[\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(r.type))switch(r.type){case\"escape\":case\"text\":a+=n.text(r.text);break;case\"html\":a+=n.html(r.text);break;case\"link\":a+=n.link(r.href,r.title,this.parseInline(r.tokens,n));break;case\"image\":a+=n.image(r.href,r.title,r.text);break;case\"strong\":a+=n.strong(this.parseInline(r.tokens,n));break;case\"em\":a+=n.em(this.parseInline(r.tokens,n));break;case\"codespan\":a+=n.codespan(r.text);break;case\"br\":a+=n.br();break;case\"del\":a+=n.del(this.parseInline(r.tokens,n));break;default:var s='Token with \"'+r.type+'\" type was not found.';if(this.options.silent)return void console.error(s);throw new Error(s)}else a+=o||\"\";return a},n}();function G(e,n,t){if(null==e)throw new Error(\"marked(): input parameter is undefined or null\");if(\"string\"!=typeof e)throw new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(e)+\", string expected\");if(\"function\"==typeof n&&(t=n,n=null),N(n=F({},G.defaults,n||{})),t){var r,o=n.highlight;try{r=U.lex(e,n)}catch(e){return t(e)}var a=function(e){var a;if(!e)try{n.walkTokens&&G.walkTokens(r,n.walkTokens),a=Z.parse(r,n)}catch(n){e=n}return n.highlight=o,e?t(e):t(null,a)};if(!o||o.length<3)return a();if(delete n.highlight,!r.length)return a();var i=0;return G.walkTokens(r,(function(e){\"code\"===e.type&&(i++,setTimeout((function(){o(e.text,e.lang,(function(n,t){if(n)return a(n);null!=t&&t!==e.text&&(e.text=t,e.escaped=!0),0==--i&&a()}))}),0))})),void(0===i&&a())}try{var s=U.lex(e,n);return n.walkTokens&&G.walkTokens(s,n.walkTokens),Z.parse(s,n)}catch(e){if(e.message+=\"\\nPlease report this to https://github.com/markedjs/marked.\",n.silent)return\"<p>An error occurred:</p><pre>\"+m(e.message+\"\",!0)+\"</pre>\";throw e}}G.options=G.setOptions=function(e){return F(G.defaults,e),s(G.defaults),G},G.getDefaults=i,G.defaults=e.defaults,G.use=function(){for(var e=arguments.length,n=new Array(e),t=0;t<e;t++)n[t]=arguments[t];var r,o=F.apply(void 0,[{}].concat(n)),a=G.defaults.extensions||{renderers:{},childTokens:{}};n.forEach((function(e){if(e.extensions&&(r=!0,e.extensions.forEach((function(e){if(!e.name)throw new Error(\"extension name required\");if(e.renderer){var n=a.renderers?a.renderers[e.name]:null;a.renderers[e.name]=n?function(){for(var t=arguments.length,r=new Array(t),o=0;o<t;o++)r[o]=arguments[o];var a=e.renderer.apply(this,r);return!1===a&&(a=n.apply(this,r)),a}:e.renderer}if(e.tokenizer){if(!e.level||\"block\"!==e.level&&\"inline\"!==e.level)throw new Error(\"extension level must be 'block' or 'inline'\");a[e.level]?a[e.level].unshift(e.tokenizer):a[e.level]=[e.tokenizer],e.start&&(\"block\"===e.level?a.startBlock?a.startBlock.push(e.start):a.startBlock=[e.start]:\"inline\"===e.level&&(a.startInline?a.startInline.push(e.start):a.startInline=[e.start]))}e.childTokens&&(a.childTokens[e.name]=e.childTokens)}))),e.renderer&&function(){var n=G.defaults.renderer||new q,t=function(t){var r=n[t];n[t]=function(){for(var o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];var s=e.renderer[t].apply(n,a);return!1===s&&(s=r.apply(n,a)),s}};for(var r in e.renderer)t(r);o.renderer=n}(),e.tokenizer&&function(){var n=G.defaults.tokenizer||new R,t=function(t){var r=n[t];n[t]=function(){for(var o=arguments.length,a=new Array(o),i=0;i<o;i++)a[i]=arguments[i];var s=e.tokenizer[t].apply(n,a);return!1===s&&(s=r.apply(n,a)),s}};for(var r in e.tokenizer)t(r);o.tokenizer=n}(),e.walkTokens){var n=G.defaults.walkTokens;o.walkTokens=function(t){e.walkTokens.call(this,t),n&&n.call(this,t)}}r&&(o.extensions=a),G.setOptions(o)}))},G.walkTokens=function(e,n){for(var t,r=function(){var e=t.value;switch(n.call(G,e),e.type){case\"table\":for(var r,o=a(e.header);!(r=o()).done;){var i=r.value;G.walkTokens(i.tokens,n)}for(var s,l=a(e.rows);!(s=l()).done;)for(var u,c=a(s.value);!(u=c()).done;){var d=u.value;G.walkTokens(d.tokens,n)}break;case\"list\":G.walkTokens(e.items,n);break;default:G.defaults.extensions&&G.defaults.extensions.childTokens&&G.defaults.extensions.childTokens[e.type]?G.defaults.extensions.childTokens[e.type].forEach((function(t){G.walkTokens(e[t],n)})):e.tokens&&G.walkTokens(e.tokens,n)}},o=a(e);!(t=o()).done;)r()},G.parseInline=function(e,n){if(null==e)throw new Error(\"marked.parseInline(): input parameter is undefined or null\");if(\"string\"!=typeof e)throw new Error(\"marked.parseInline(): input parameter is of type \"+Object.prototype.toString.call(e)+\", string expected\");N(n=F({},G.defaults,n||{}));try{var t=U.lexInline(e,n);return n.walkTokens&&G.walkTokens(t,n.walkTokens),Z.parseInline(t,n)}catch(e){if(e.message+=\"\\nPlease report this to https://github.com/markedjs/marked.\",n.silent)return\"<p>An error occurred:</p><pre>\"+m(e.message+\"\",!0)+\"</pre>\";throw e}},G.Parser=Z,G.parser=Z.parse,G.Renderer=q,G.TextRenderer=P,G.Lexer=U,G.lexer=U.lex,G.Tokenizer=R,G.Slugger=H,G.parse=G;var W=G.options,Q=G.setOptions,Y=G.use,K=G.walkTokens,X=G.parseInline,J=G,V=Z.parse,ee=U.lex;e.Lexer=U,e.Parser=Z,e.Renderer=q,e.Slugger=H,e.TextRenderer=P,e.Tokenizer=R,e.getDefaults=i,e.lexer=ee,e.marked=G,e.options=W,e.parse=J,e.parseInline=X,e.parser=V,e.setOptions=Q,e.use=Y,e.walkTokens=K,Object.defineProperty(e,\"__esModule\",{value:!0})}(n)})),Ce=t(Ee),Fe=\"[object Map]\",Be=\"[object Set]\",ze=/^\\[object .+?Constructor\\]$/,Se=/^(?:0|[1-9]\\d*)$/,Ne=\"[\\\\ud800-\\\\udfff]\",Te=\"[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23\\\\u20d0-\\\\u20f0]\",Oe=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",je=\"[^\\\\ud800-\\\\udfff]\",Re=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",Me=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",Ie=\"(?:\"+Te+\"|\"+Oe+\")\"+\"?\",Le=\"[\\\\ufe0e\\\\ufe0f]?\"+Ie+(\"(?:\\\\u200d(?:\"+[je,Re,Me].join(\"|\")+\")[\\\\ufe0e\\\\ufe0f]?\"+Ie+\")*\"),$e=\"(?:\"+[je+Te+\"?\",Te,Re,Me,Ne].join(\"|\")+\")\",Ue=RegExp(Oe+\"(?=\"+Oe+\")|\"+$e+Le,\"g\"),qe=RegExp(\"[\\\\u200d\\\\ud800-\\\\udfff\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23\\\\u20d0-\\\\u20f0\\\\ufe0e\\\\ufe0f]\"),Pe=\"object\"==typeof n&&n&&n.Object===Object&&n,He=\"object\"==typeof self&&self&&self.Object===Object&&self,Ze=Pe||He||Function(\"return this\")();function Ge(e,n){return function(e,n){for(var t=-1,r=e?e.length:0,o=Array(r);++t<r;)o[t]=n(e[t],t,e);return o}(n,(function(n){return e[n]}))}function We(e){var n=-1,t=Array(e.size);return e.forEach((function(e,r){t[++n]=[r,e]})),t}function Qe(e){var n=-1,t=Array(e.size);return e.forEach((function(e){t[++n]=e})),t}function Ye(e){return function(e){return qe.test(e)}(e)?function(e){return e.match(Ue)||[]}(e):function(e){return e.split(\"\")}(e)}var Ke,Xe,Je,Ve=Function.prototype,en=Object.prototype,nn=Ze[\"__core-js_shared__\"],tn=(Ke=/[^.]+$/.exec(nn&&nn.keys&&nn.keys.IE_PROTO||\"\"))?\"Symbol(src)_1.\"+Ke:\"\",rn=Ve.toString,on=en.hasOwnProperty,an=en.toString,sn=RegExp(\"^\"+rn.call(on).replace(/[\\\\^$.*+?()[\\]{}|]/g,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),ln=Ze.Symbol,un=ln?ln.iterator:void 0,cn=en.propertyIsEnumerable,dn=(Xe=Object.keys,Je=Object,function(e){return Xe(Je(e))}),hn=vn(Ze,\"DataView\"),pn=vn(Ze,\"Map\"),mn=vn(Ze,\"Promise\"),gn=vn(Ze,\"Set\"),_n=vn(Ze,\"WeakMap\"),fn=Fn(hn),bn=Fn(pn),wn=Fn(mn),kn=Fn(gn),yn=Fn(_n);function Dn(e,n){var t=Bn(e)||function(e){return function(e){return Tn(e)&&zn(e)}(e)&&on.call(e,\"callee\")&&(!cn.call(e,\"callee\")||\"[object Arguments]\"==an.call(e))}(e)?function(e,n){for(var t=-1,r=Array(e);++t<e;)r[t]=n(t);return r}(e.length,String):[],r=t.length,o=!!r;for(var a in e)!n&&!on.call(e,a)||o&&(\"length\"==a||Cn(a,r))||t.push(a);return t}function An(e){if(!Nn(e)||function(e){return!!tn&&tn in e}(e))return!1;var n=Sn(e)||function(e){var n=!1;if(null!=e&&\"function\"!=typeof e.toString)try{n=!!(e+\"\")}catch(e){}return n}(e)?sn:ze;return n.test(Fn(e))}function xn(e){if(t=(n=e)&&n.constructor,r=\"function\"==typeof t&&t.prototype||en,n!==r)return dn(e);var n,t,r,o=[];for(var a in Object(e))on.call(e,a)&&\"constructor\"!=a&&o.push(a);return o}function vn(e,n){var t=function(e,n){return null==e?void 0:e[n]}(e,n);return An(t)?t:void 0}var En=function(e){return an.call(e)};function Cn(e,n){return!!(n=null==n?9007199254740991:n)&&(\"number\"==typeof e||Se.test(e))&&e>-1&&e%1==0&&e<n}function Fn(e){if(null!=e){try{return rn.call(e)}catch(e){}try{return e+\"\"}catch(e){}}return\"\"}(hn&&\"[object DataView]\"!=En(new hn(new ArrayBuffer(1)))||pn&&En(new pn)!=Fe||mn&&\"[object Promise]\"!=En(mn.resolve())||gn&&En(new gn)!=Be||_n&&\"[object WeakMap]\"!=En(new _n))&&(En=function(e){var n=an.call(e),t=\"[object Object]\"==n?e.constructor:void 0,r=t?Fn(t):void 0;if(r)switch(r){case fn:return\"[object DataView]\";case bn:return Fe;case wn:return\"[object Promise]\";case kn:return Be;case yn:return\"[object WeakMap]\"}return n});var Bn=Array.isArray;function zn(e){return null!=e&&function(e){return\"number\"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}(e.length)&&!Sn(e)}function Sn(e){var n=Nn(e)?an.call(e):\"\";return\"[object Function]\"==n||\"[object GeneratorFunction]\"==n}function Nn(e){var n=typeof e;return!!e&&(\"object\"==n||\"function\"==n)}function Tn(e){return!!e&&\"object\"==typeof e}function On(e){return e?Ge(e,function(e){return zn(e)?Dn(e):xn(e)}(e)):[]}var jn=function(e){if(!e)return[];if(zn(e))return function(e){return\"string\"==typeof e||!Bn(e)&&Tn(e)&&\"[object String]\"==an.call(e)}(e)?Ye(e):function(e,n){var t=-1,r=e.length;for(n||(n=Array(r));++t<r;)n[t]=e[t];return n}(e);if(un&&e[un])return function(e){for(var n,t=[];!(n=e.next()).done;)t.push(n.value);return t}(e[un]());var n=En(e);return(n==Fe?We:n==Be?Qe:On)(e)};var Rn={100:\"💯\",1234:\"🔢\",umbrella_with_rain_drops:\"☔\",coffee:\"☕\",aries:\"♈\",taurus:\"♉\",sagittarius:\"♐\",capricorn:\"♑\",aquarius:\"♒\",pisces:\"♓\",anchor:\"⚓\",white_check_mark:\"✅\",sparkles:\"✨\",question:\"❓\",grey_question:\"❔\",grey_exclamation:\"❕\",exclamation:\"❗\",heavy_exclamation_mark:\"❗\",heavy_plus_sign:\"➕\",heavy_minus_sign:\"➖\",heavy_division_sign:\"➗\",hash:\"#️⃣\",keycap_star:\"*️⃣\",zero:\"0️⃣\",one:\"1️⃣\",two:\"2️⃣\",three:\"3️⃣\",four:\"4️⃣\",five:\"5️⃣\",six:\"6️⃣\",seven:\"7️⃣\",eight:\"8️⃣\",nine:\"9️⃣\",copyright:\"©️\",registered:\"®️\",mahjong:\"🀄\",black_joker:\"🃏\",a:\"🅰️\",b:\"🅱️\",o2:\"🅾️\",parking:\"🅿️\",ab:\"🆎\",cl:\"🆑\",cool:\"🆒\",free:\"🆓\",id:\"🆔\",new:\"🆕\",ng:\"🆖\",ok:\"🆗\",sos:\"🆘\",up:\"🆙\",vs:\"🆚\",koko:\"🈁\",sa:\"🈂️\",u7121:\"🈚\",u6307:\"🈯\",u7981:\"🈲\",u7a7a:\"🈳\",u5408:\"🈴\",u6e80:\"🈵\",u6709:\"🈶\",u6708:\"🈷️\",u7533:\"🈸\",u5272:\"🈹\",u55b6:\"🈺\",ideograph_advantage:\"🉐\",accept:\"🉑\",cyclone:\"🌀\",foggy:\"🌁\",closed_umbrella:\"🌂\",night_with_stars:\"🌃\",sunrise_over_mountains:\"🌄\",sunrise:\"🌅\",city_sunset:\"🌆\",city_sunrise:\"🌇\",rainbow:\"🌈\",bridge_at_night:\"🌉\",ocean:\"🌊\",volcano:\"🌋\",milky_way:\"🌌\",earth_africa:\"🌍\",earth_americas:\"🌎\",earth_asia:\"🌏\",globe_with_meridians:\"🌐\",new_moon:\"🌑\",waxing_crescent_moon:\"🌒\",first_quarter_moon:\"🌓\",moon:\"🌔\",waxing_gibbous_moon:\"🌔\",full_moon:\"🌕\",waning_gibbous_moon:\"🌖\",last_quarter_moon:\"🌗\",waning_crescent_moon:\"🌘\",crescent_moon:\"🌙\",new_moon_with_face:\"🌚\",first_quarter_moon_with_face:\"🌛\",last_quarter_moon_with_face:\"🌜\",full_moon_with_face:\"🌝\",sun_with_face:\"🌞\",star2:\"🌟\",stars:\"🌠\",thermometer:\"🌡️\",mostly_sunny:\"🌤️\",sun_small_cloud:\"🌤️\",barely_sunny:\"🌥️\",sun_behind_cloud:\"🌥️\",partly_sunny_rain:\"🌦️\",sun_behind_rain_cloud:\"🌦️\",rain_cloud:\"🌧️\",snow_cloud:\"🌨️\",lightning:\"🌩️\",lightning_cloud:\"🌩️\",tornado:\"🌪️\",tornado_cloud:\"🌪️\",fog:\"🌫️\",wind_blowing_face:\"🌬️\",hotdog:\"🌭\",taco:\"🌮\",burrito:\"🌯\",chestnut:\"🌰\",seedling:\"🌱\",evergreen_tree:\"🌲\",deciduous_tree:\"🌳\",palm_tree:\"🌴\",cactus:\"🌵\",hot_pepper:\"🌶️\",tulip:\"🌷\",cherry_blossom:\"🌸\",rose:\"🌹\",hibiscus:\"🌺\",sunflower:\"🌻\",blossom:\"🌼\",corn:\"🌽\",ear_of_rice:\"🌾\",herb:\"🌿\",four_leaf_clover:\"🍀\",maple_leaf:\"🍁\",fallen_leaf:\"🍂\",leaves:\"🍃\",mushroom:\"🍄\",tomato:\"🍅\",eggplant:\"🍆\",grapes:\"🍇\",melon:\"🍈\",watermelon:\"🍉\",tangerine:\"🍊\",lemon:\"🍋\",banana:\"🍌\",pineapple:\"🍍\",apple:\"🍎\",green_apple:\"🍏\",pear:\"🍐\",peach:\"🍑\",cherries:\"🍒\",strawberry:\"🍓\",hamburger:\"🍔\",pizza:\"🍕\",meat_on_bone:\"🍖\",poultry_leg:\"🍗\",rice_cracker:\"🍘\",rice_ball:\"🍙\",rice:\"🍚\",curry:\"🍛\",ramen:\"🍜\",spaghetti:\"🍝\",bread:\"🍞\",fries:\"🍟\",sweet_potato:\"🍠\",dango:\"🍡\",oden:\"🍢\",sushi:\"🍣\",fried_shrimp:\"🍤\",fish_cake:\"🍥\",icecream:\"🍦\",shaved_ice:\"🍧\",ice_cream:\"🍨\",doughnut:\"🍩\",cookie:\"🍪\",chocolate_bar:\"🍫\",candy:\"🍬\",lollipop:\"🍭\",custard:\"🍮\",honey_pot:\"🍯\",cake:\"🍰\",bento:\"🍱\",stew:\"🍲\",fried_egg:\"🍳\",cooking:\"🍳\",fork_and_knife:\"🍴\",tea:\"🍵\",sake:\"🍶\",wine_glass:\"🍷\",cocktail:\"🍸\",tropical_drink:\"🍹\",beer:\"🍺\",beers:\"🍻\",baby_bottle:\"🍼\",knife_fork_plate:\"🍽️\",champagne:\"🍾\",popcorn:\"🍿\",ribbon:\"🎀\",gift:\"🎁\",birthday:\"🎂\",jack_o_lantern:\"🎃\",christmas_tree:\"🎄\",santa:\"🎅\",fireworks:\"🎆\",sparkler:\"🎇\",balloon:\"🎈\",tada:\"🎉\",confetti_ball:\"🎊\",tanabata_tree:\"🎋\",crossed_flags:\"🎌\",bamboo:\"🎍\",dolls:\"🎎\",flags:\"🎏\",wind_chime:\"🎐\",rice_scene:\"🎑\",school_satchel:\"🎒\",mortar_board:\"🎓\",medal:\"🎖️\",reminder_ribbon:\"🎗️\",studio_microphone:\"🎙️\",level_slider:\"🎚️\",control_knobs:\"🎛️\",film_frames:\"🎞️\",admission_tickets:\"🎟️\",carousel_horse:\"🎠\",ferris_wheel:\"🎡\",roller_coaster:\"🎢\",fishing_pole_and_fish:\"🎣\",microphone:\"🎤\",movie_camera:\"🎥\",cinema:\"🎦\",headphones:\"🎧\",art:\"🎨\",tophat:\"🎩\",circus_tent:\"🎪\",ticket:\"🎫\",clapper:\"🎬\",performing_arts:\"🎭\",video_game:\"🎮\",dart:\"🎯\",slot_machine:\"🎰\",\"8ball\":\"🎱\",game_die:\"🎲\",bowling:\"🎳\",flower_playing_cards:\"🎴\",musical_note:\"🎵\",notes:\"🎶\",saxophone:\"🎷\",guitar:\"🎸\",musical_keyboard:\"🎹\",trumpet:\"🎺\",violin:\"🎻\",musical_score:\"🎼\",running_shirt_with_sash:\"🎽\",tennis:\"🎾\",ski:\"🎿\",basketball:\"🏀\",checkered_flag:\"🏁\",snowboarder:\"🏂\",\"woman-running\":\"🏃‍♀️\",\"man-running\":\"🏃‍♂️\",runner:\"🏃‍♂️\",running:\"🏃‍♂️\",\"woman-surfing\":\"🏄‍♀️\",\"man-surfing\":\"🏄‍♂️\",surfer:\"🏄‍♂️\",sports_medal:\"🏅\",trophy:\"🏆\",horse_racing:\"🏇\",football:\"🏈\",rugby_football:\"🏉\",\"woman-swimming\":\"🏊‍♀️\",\"man-swimming\":\"🏊‍♂️\",swimmer:\"🏊‍♂️\",\"woman-lifting-weights\":\"🏋️‍♀️\",\"man-lifting-weights\":\"🏋️‍♂️\",weight_lifter:\"🏋️‍♂️\",\"woman-golfing\":\"🏌️‍♀️\",\"man-golfing\":\"🏌️‍♂️\",golfer:\"🏌️‍♂️\",racing_motorcycle:\"🏍️\",racing_car:\"🏎️\",cricket_bat_and_ball:\"🏏\",volleyball:\"🏐\",field_hockey_stick_and_ball:\"🏑\",ice_hockey_stick_and_puck:\"🏒\",table_tennis_paddle_and_ball:\"🏓\",snow_capped_mountain:\"🏔️\",camping:\"🏕️\",beach_with_umbrella:\"🏖️\",building_construction:\"🏗️\",house_buildings:\"🏘️\",cityscape:\"🏙️\",derelict_house_building:\"🏚️\",classical_building:\"🏛️\",desert:\"🏜️\",desert_island:\"🏝️\",national_park:\"🏞️\",stadium:\"🏟️\",house:\"🏠\",house_with_garden:\"🏡\",office:\"🏢\",post_office:\"🏣\",european_post_office:\"🏤\",hospital:\"🏥\",bank:\"🏦\",atm:\"🏧\",hotel:\"🏨\",love_hotel:\"🏩\",convenience_store:\"🏪\",school:\"🏫\",department_store:\"🏬\",factory:\"🏭\",izakaya_lantern:\"🏮\",lantern:\"🏮\",japanese_castle:\"🏯\",european_castle:\"🏰\",\"rainbow-flag\":\"🏳️‍🌈\",waving_white_flag:\"🏳️\",\"flag-england\":\"🏴󠁧󠁢󠁥󠁮󠁧󠁿\",\"flag-scotland\":\"🏴󠁧󠁢󠁳󠁣󠁴󠁿\",\"flag-wales\":\"🏴󠁧󠁢󠁷󠁬󠁳󠁿\",waving_black_flag:\"🏴\",rosette:\"🏵️\",label:\"🏷️\",badminton_racquet_and_shuttlecock:\"🏸\",bow_and_arrow:\"🏹\",amphora:\"🏺\",rat:\"🐀\",mouse2:\"🐁\",ox:\"🐂\",water_buffalo:\"🐃\",cow2:\"🐄\",tiger2:\"🐅\",leopard:\"🐆\",rabbit2:\"🐇\",cat2:\"🐈\",dragon:\"🐉\",crocodile:\"🐊\",whale2:\"🐋\",snail:\"🐌\",snake:\"🐍\",racehorse:\"🐎\",ram:\"🐏\",goat:\"🐐\",sheep:\"🐑\",monkey:\"🐒\",rooster:\"🐓\",chicken:\"🐔\",dog2:\"🐕\",pig2:\"🐖\",boar:\"🐗\",elephant:\"🐘\",octopus:\"🐙\",shell:\"🐚\",bug:\"🐛\",ant:\"🐜\",bee:\"🐝\",honeybee:\"🐝\",beetle:\"🐞\",fish:\"🐟\",tropical_fish:\"🐠\",blowfish:\"🐡\",turtle:\"🐢\",hatching_chick:\"🐣\",baby_chick:\"🐤\",hatched_chick:\"🐥\",bird:\"🐦\",penguin:\"🐧\",koala:\"🐨\",poodle:\"🐩\",dromedary_camel:\"🐪\",camel:\"🐫\",dolphin:\"🐬\",flipper:\"🐬\",mouse:\"🐭\",cow:\"🐮\",tiger:\"🐯\",rabbit:\"🐰\",cat:\"🐱\",dragon_face:\"🐲\",whale:\"🐳\",horse:\"🐴\",monkey_face:\"🐵\",dog:\"🐶\",pig:\"🐷\",frog:\"🐸\",hamster:\"🐹\",wolf:\"🐺\",bear:\"🐻\",panda_face:\"🐼\",pig_nose:\"🐽\",feet:\"🐾\",paw_prints:\"🐾\",chipmunk:\"🐿️\",eyes:\"👀\",\"eye-in-speech-bubble\":\"👁️‍🗨️\",eye:\"👁️\",ear:\"👂\",nose:\"👃\",lips:\"👄\",tongue:\"👅\",point_up_2:\"👆\",point_down:\"👇\",point_left:\"👈\",point_right:\"👉\",facepunch:\"👊\",punch:\"👊\",wave:\"👋\",ok_hand:\"👌\",\"+1\":\"👍\",thumbsup:\"👍\",\"-1\":\"👎\",thumbsdown:\"👎\",clap:\"👏\",open_hands:\"👐\",crown:\"👑\",womans_hat:\"👒\",eyeglasses:\"👓\",necktie:\"👔\",shirt:\"👕\",tshirt:\"👕\",jeans:\"👖\",dress:\"👗\",kimono:\"👘\",bikini:\"👙\",womans_clothes:\"👚\",purse:\"👛\",handbag:\"👜\",pouch:\"👝\",mans_shoe:\"👞\",shoe:\"👞\",athletic_shoe:\"👟\",high_heel:\"👠\",sandal:\"👡\",boot:\"👢\",footprints:\"👣\",bust_in_silhouette:\"👤\",busts_in_silhouette:\"👥\",boy:\"👦\",girl:\"👧\",\"male-farmer\":\"👨‍🌾\",\"male-cook\":\"👨‍🍳\",\"male-student\":\"👨‍🎓\",\"male-singer\":\"👨‍🎤\",\"male-artist\":\"👨‍🎨\",\"male-teacher\":\"👨‍🏫\",\"male-factory-worker\":\"👨‍🏭\",\"man-boy-boy\":\"👨‍👦‍👦\",\"man-boy\":\"👨‍👦\",\"man-girl-boy\":\"👨‍👧‍👦\",\"man-girl-girl\":\"👨‍👧‍👧\",\"man-girl\":\"👨‍👧\",\"man-man-boy\":\"👨‍👨‍👦\",\"man-man-boy-boy\":\"👨‍👨‍👦‍👦\",\"man-man-girl\":\"👨‍👨‍👧\",\"man-man-girl-boy\":\"👨‍👨‍👧‍👦\",\"man-man-girl-girl\":\"👨‍👨‍👧‍👧\",\"man-woman-boy\":\"👨‍👩‍👦\",family:\"👨‍👩‍👦\",\"man-woman-boy-boy\":\"👨‍👩‍👦‍👦\",\"man-woman-girl\":\"👨‍👩‍👧\",\"man-woman-girl-boy\":\"👨‍👩‍👧‍👦\",\"man-woman-girl-girl\":\"👨‍👩‍👧‍👧\",\"male-technologist\":\"👨‍💻\",\"male-office-worker\":\"👨‍💼\",\"male-mechanic\":\"👨‍🔧\",\"male-scientist\":\"👨‍🔬\",\"male-astronaut\":\"👨‍🚀\",\"male-firefighter\":\"👨‍🚒\",\"male-doctor\":\"👨‍⚕️\",\"male-judge\":\"👨‍⚖️\",\"male-pilot\":\"👨‍✈️\",\"man-heart-man\":\"👨‍❤️‍👨\",\"man-kiss-man\":\"👨‍❤️‍💋‍👨\",man:\"👨\",\"female-farmer\":\"👩‍🌾\",\"female-cook\":\"👩‍🍳\",\"female-student\":\"👩‍🎓\",\"female-singer\":\"👩‍🎤\",\"female-artist\":\"👩‍🎨\",\"female-teacher\":\"👩‍🏫\",\"female-factory-worker\":\"👩‍🏭\",\"woman-boy-boy\":\"👩‍👦‍👦\",\"woman-boy\":\"👩‍👦\",\"woman-girl-boy\":\"👩‍👧‍👦\",\"woman-girl-girl\":\"👩‍👧‍👧\",\"woman-girl\":\"👩‍👧\",\"woman-woman-boy\":\"👩‍👩‍👦\",\"woman-woman-boy-boy\":\"👩‍👩‍👦‍👦\",\"woman-woman-girl\":\"👩‍👩‍👧\",\"woman-woman-girl-boy\":\"👩‍👩‍👧‍👦\",\"woman-woman-girl-girl\":\"👩‍👩‍👧‍👧\",\"female-technologist\":\"👩‍💻\",\"female-office-worker\":\"👩‍💼\",\"female-mechanic\":\"👩‍🔧\",\"female-scientist\":\"👩‍🔬\",\"female-astronaut\":\"👩‍🚀\",\"female-firefighter\":\"👩‍🚒\",\"female-doctor\":\"👩‍⚕️\",\"female-judge\":\"👩‍⚖️\",\"female-pilot\":\"👩‍✈️\",\"woman-heart-man\":\"👩‍❤️‍👨\",couple_with_heart:\"👩‍❤️‍👨\",\"woman-heart-woman\":\"👩‍❤️‍👩\",\"woman-kiss-man\":\"👩‍❤️‍💋‍👨\",couplekiss:\"👩‍❤️‍💋‍👨\",\"woman-kiss-woman\":\"👩‍❤️‍💋‍👩\",woman:\"👩\",couple:\"👫\",man_and_woman_holding_hands:\"👫\",two_men_holding_hands:\"👬\",two_women_holding_hands:\"👭\",\"female-police-officer\":\"👮‍♀️\",\"male-police-officer\":\"👮‍♂️\",cop:\"👮‍♂️\",\"woman-with-bunny-ears-partying\":\"👯‍♀️\",dancers:\"👯‍♀️\",\"man-with-bunny-ears-partying\":\"👯‍♂️\",bride_with_veil:\"👰\",\"blond-haired-woman\":\"👱‍♀️\",\"blond-haired-man\":\"👱‍♂️\",person_with_blond_hair:\"👱‍♂️\",man_with_gua_pi_mao:\"👲\",\"woman-wearing-turban\":\"👳‍♀️\",\"man-wearing-turban\":\"👳‍♂️\",man_with_turban:\"👳‍♂️\",older_man:\"👴\",older_woman:\"👵\",baby:\"👶\",\"female-construction-worker\":\"👷‍♀️\",\"male-construction-worker\":\"👷‍♂️\",construction_worker:\"👷‍♂️\",princess:\"👸\",japanese_ogre:\"👹\",japanese_goblin:\"👺\",ghost:\"👻\",angel:\"👼\",alien:\"👽\",space_invader:\"👾\",imp:\"👿\",skull:\"💀\",\"woman-tipping-hand\":\"💁‍♀️\",information_desk_person:\"💁‍♀️\",\"man-tipping-hand\":\"💁‍♂️\",\"female-guard\":\"💂‍♀️\",\"male-guard\":\"💂‍♂️\",guardsman:\"💂‍♂️\",dancer:\"💃\",lipstick:\"💄\",nail_care:\"💅\",\"woman-getting-massage\":\"💆‍♀️\",massage:\"💆‍♀️\",\"man-getting-massage\":\"💆‍♂️\",\"woman-getting-haircut\":\"💇‍♀️\",haircut:\"💇‍♀️\",\"man-getting-haircut\":\"💇‍♂️\",barber:\"💈\",syringe:\"💉\",pill:\"💊\",kiss:\"💋\",love_letter:\"💌\",ring:\"💍\",gem:\"💎\",bouquet:\"💐\",wedding:\"💒\",heartbeat:\"💓\",broken_heart:\"💔\",two_hearts:\"💕\",sparkling_heart:\"💖\",heartpulse:\"💗\",cupid:\"💘\",blue_heart:\"💙\",green_heart:\"💚\",yellow_heart:\"💛\",purple_heart:\"💜\",gift_heart:\"💝\",revolving_hearts:\"💞\",heart_decoration:\"💟\",diamond_shape_with_a_dot_inside:\"💠\",bulb:\"💡\",anger:\"💢\",bomb:\"💣\",zzz:\"💤\",boom:\"💥\",collision:\"💥\",sweat_drops:\"💦\",droplet:\"💧\",dash:\"💨\",poop:\"💩\",muscle:\"💪\",dizzy:\"💫\",speech_balloon:\"💬\",thought_balloon:\"💭\",white_flower:\"💮\",moneybag:\"💰\",currency_exchange:\"💱\",heavy_dollar_sign:\"💲\",credit_card:\"💳\",yen:\"💴\",dollar:\"💵\",euro:\"💶\",pound:\"💷\",money_with_wings:\"💸\",chart:\"💹\",seat:\"💺\",computer:\"💻\",briefcase:\"💼\",minidisc:\"💽\",floppy_disk:\"💾\",cd:\"💿\",dvd:\"📀\",file_folder:\"📁\",open_file_folder:\"📂\",page_with_curl:\"📃\",page_facing_up:\"📄\",date:\"📅\",calendar:\"📆\",card_index:\"📇\",chart_with_upwards_trend:\"📈\",chart_with_downwards_trend:\"📉\",bar_chart:\"📊\",clipboard:\"📋\",pushpin:\"📌\",round_pushpin:\"📍\",paperclip:\"📎\",straight_ruler:\"📏\",triangular_ruler:\"📐\",bookmark_tabs:\"📑\",ledger:\"📒\",notebook:\"📓\",notebook_with_decorative_cover:\"📔\",closed_book:\"📕\",book:\"📖\",open_book:\"📖\",green_book:\"📗\",blue_book:\"📘\",orange_book:\"📙\",books:\"📚\",name_badge:\"📛\",scroll:\"📜\",memo:\"📝\",pencil:\"📝\",telephone_receiver:\"📞\",pager:\"📟\",fax:\"📠\",satellite_antenna:\"📡\",loudspeaker:\"📢\",mega:\"📣\",outbox_tray:\"📤\",inbox_tray:\"📥\",package:\"📦\",\"e-mail\":\"📧\",incoming_envelope:\"📨\",envelope_with_arrow:\"📩\",mailbox_closed:\"📪\",mailbox:\"📫\",mailbox_with_mail:\"📬\",mailbox_with_no_mail:\"📭\",postbox:\"📮\",postal_horn:\"📯\",newspaper:\"📰\",iphone:\"📱\",calling:\"📲\",vibration_mode:\"📳\",mobile_phone_off:\"📴\",no_mobile_phones:\"📵\",signal_strength:\"📶\",camera:\"📷\",camera_with_flash:\"📸\",video_camera:\"📹\",tv:\"📺\",radio:\"📻\",vhs:\"📼\",film_projector:\"📽️\",prayer_beads:\"📿\",twisted_rightwards_arrows:\"🔀\",repeat:\"🔁\",repeat_one:\"🔂\",arrows_clockwise:\"🔃\",arrows_counterclockwise:\"🔄\",low_brightness:\"🔅\",high_brightness:\"🔆\",mute:\"🔇\",speaker:\"🔈\",sound:\"🔉\",loud_sound:\"🔊\",battery:\"🔋\",electric_plug:\"🔌\",mag:\"🔍\",mag_right:\"🔎\",lock_with_ink_pen:\"🔏\",closed_lock_with_key:\"🔐\",key:\"🔑\",lock:\"🔒\",unlock:\"🔓\",bell:\"🔔\",no_bell:\"🔕\",bookmark:\"🔖\",link:\"🔗\",radio_button:\"🔘\",back:\"🔙\",end:\"🔚\",on:\"🔛\",soon:\"🔜\",underage:\"🔞\",keycap_ten:\"🔟\",capital_abcd:\"🔠\",abcd:\"🔡\",symbols:\"🔣\",abc:\"🔤\",fire:\"🔥\",flashlight:\"🔦\",wrench:\"🔧\",hammer:\"🔨\",nut_and_bolt:\"🔩\",hocho:\"🔪\",knife:\"🔪\",gun:\"🔫\",microscope:\"🔬\",telescope:\"🔭\",crystal_ball:\"🔮\",six_pointed_star:\"🔯\",beginner:\"🔰\",trident:\"🔱\",black_square_button:\"🔲\",white_square_button:\"🔳\",red_circle:\"🔴\",large_blue_circle:\"🔵\",large_orange_diamond:\"🔶\",large_blue_diamond:\"🔷\",small_orange_diamond:\"🔸\",small_blue_diamond:\"🔹\",small_red_triangle:\"🔺\",small_red_triangle_down:\"🔻\",arrow_up_small:\"🔼\",arrow_down_small:\"🔽\",om_symbol:\"🕉️\",dove_of_peace:\"🕊️\",kaaba:\"🕋\",mosque:\"🕌\",synagogue:\"🕍\",menorah_with_nine_branches:\"🕎\",candle:\"🕯️\",mantelpiece_clock:\"🕰️\",hole:\"🕳️\",man_in_business_suit_levitating:\"🕴️\",\"female-detective\":\"🕵️‍♀️\",\"male-detective\":\"🕵️‍♂️\",sleuth_or_spy:\"🕵️‍♂️\",dark_sunglasses:\"🕶️\",spider:\"🕷️\",spider_web:\"🕸️\",joystick:\"🕹️\",man_dancing:\"🕺\",linked_paperclips:\"🖇️\",lower_left_ballpoint_pen:\"🖊️\",lower_left_fountain_pen:\"🖋️\",lower_left_paintbrush:\"🖌️\",lower_left_crayon:\"🖍️\",raised_hand_with_fingers_splayed:\"🖐️\",middle_finger:\"🖕\",reversed_hand_with_middle_finger_extended:\"🖕\",\"spock-hand\":\"🖖\",black_heart:\"🖤\",desktop_computer:\"🖥️\",printer:\"🖨️\",three_button_mouse:\"🖱️\",trackball:\"🖲️\",frame_with_picture:\"🖼️\",card_index_dividers:\"🗂️\",card_file_box:\"🗃️\",file_cabinet:\"🗄️\",wastebasket:\"🗑️\",spiral_note_pad:\"🗒️\",spiral_calendar_pad:\"🗓️\",compression:\"🗜️\",old_key:\"🗝️\",rolled_up_newspaper:\"🗞️\",dagger_knife:\"🗡️\",speaking_head_in_silhouette:\"🗣️\",left_speech_bubble:\"🗨️\",right_anger_bubble:\"🗯️\",ballot_box_with_ballot:\"🗳️\",world_map:\"🗺️\",mount_fuji:\"🗻\",tokyo_tower:\"🗼\",statue_of_liberty:\"🗽\",japan:\"🗾\",moyai:\"🗿\",grinning:\"😀\",grin:\"😁\",joy:\"😂\",smiley:\"😃\",smile:\"😄\",sweat_smile:\"😅\",laughing:\"😆\",satisfied:\"😆\",innocent:\"😇\",smiling_imp:\"😈\",wink:\"😉\",blush:\"😊\",yum:\"😋\",relieved:\"😌\",heart_eyes:\"😍\",sunglasses:\"😎\",smirk:\"😏\",neutral_face:\"😐\",expressionless:\"😑\",unamused:\"😒\",sweat:\"😓\",pensive:\"😔\",confused:\"😕\",confounded:\"😖\",kissing:\"😗\",kissing_heart:\"😘\",kissing_smiling_eyes:\"😙\",kissing_closed_eyes:\"😚\",stuck_out_tongue:\"😛\",stuck_out_tongue_winking_eye:\"😜\",stuck_out_tongue_closed_eyes:\"😝\",disappointed:\"😞\",worried:\"😟\",angry:\"😠\",rage:\"😡\",cry:\"😢\",persevere:\"😣\",triumph:\"😤\",disappointed_relieved:\"😥\",frowning:\"😦\",anguished:\"😧\",fearful:\"😨\",weary:\"😩\",sleepy:\"😪\",tired_face:\"😫\",grimacing:\"😬\",sob:\"😭\",open_mouth:\"😮\",hushed:\"😯\",cold_sweat:\"😰\",scream:\"😱\",astonished:\"😲\",flushed:\"😳\",sleeping:\"😴\",dizzy_face:\"😵\",no_mouth:\"😶\",mask:\"😷\",smile_cat:\"😸\",joy_cat:\"😹\",smiley_cat:\"😺\",heart_eyes_cat:\"😻\",smirk_cat:\"😼\",kissing_cat:\"😽\",pouting_cat:\"😾\",crying_cat_face:\"😿\",scream_cat:\"🙀\",slightly_frowning_face:\"🙁\",slightly_smiling_face:\"🙂\",upside_down_face:\"🙃\",face_with_rolling_eyes:\"🙄\",\"woman-gesturing-no\":\"🙅‍♀️\",no_good:\"🙅‍♀️\",\"man-gesturing-no\":\"🙅‍♂️\",\"woman-gesturing-ok\":\"🙆‍♀️\",ok_woman:\"🙆‍♀️\",\"man-gesturing-ok\":\"🙆‍♂️\",\"woman-bowing\":\"🙇‍♀️\",\"man-bowing\":\"🙇‍♂️\",bow:\"🙇‍♂️\",see_no_evil:\"🙈\",hear_no_evil:\"🙉\",speak_no_evil:\"🙊\",\"woman-raising-hand\":\"🙋‍♀️\",raising_hand:\"🙋‍♀️\",\"man-raising-hand\":\"🙋‍♂️\",raised_hands:\"🙌\",\"woman-frowning\":\"🙍‍♀️\",person_frowning:\"🙍‍♀️\",\"man-frowning\":\"🙍‍♂️\",\"woman-pouting\":\"🙎‍♀️\",person_with_pouting_face:\"🙎‍♀️\",\"man-pouting\":\"🙎‍♂️\",pray:\"🙏\",rocket:\"🚀\",helicopter:\"🚁\",steam_locomotive:\"🚂\",railway_car:\"🚃\",bullettrain_side:\"🚄\",bullettrain_front:\"🚅\",train2:\"🚆\",metro:\"🚇\",light_rail:\"🚈\",station:\"🚉\",tram:\"🚊\",train:\"🚋\",bus:\"🚌\",oncoming_bus:\"🚍\",trolleybus:\"🚎\",busstop:\"🚏\",minibus:\"🚐\",ambulance:\"🚑\",fire_engine:\"🚒\",police_car:\"🚓\",oncoming_police_car:\"🚔\",taxi:\"🚕\",oncoming_taxi:\"🚖\",car:\"🚗\",red_car:\"🚗\",oncoming_automobile:\"🚘\",blue_car:\"🚙\",truck:\"🚚\",articulated_lorry:\"🚛\",tractor:\"🚜\",monorail:\"🚝\",mountain_railway:\"🚞\",suspension_railway:\"🚟\",mountain_cableway:\"🚠\",aerial_tramway:\"🚡\",ship:\"🚢\",\"woman-rowing-boat\":\"🚣‍♀️\",\"man-rowing-boat\":\"🚣‍♂️\",rowboat:\"🚣‍♂️\",speedboat:\"🚤\",traffic_light:\"🚥\",vertical_traffic_light:\"🚦\",construction:\"🚧\",rotating_light:\"🚨\",triangular_flag_on_post:\"🚩\",door:\"🚪\",no_entry_sign:\"🚫\",smoking:\"🚬\",no_smoking:\"🚭\",put_litter_in_its_place:\"🚮\",do_not_litter:\"🚯\",potable_water:\"🚰\",\"non-potable_water\":\"🚱\",bike:\"🚲\",no_bicycles:\"🚳\",\"woman-biking\":\"🚴‍♀️\",\"man-biking\":\"🚴‍♂️\",bicyclist:\"🚴‍♂️\",\"woman-mountain-biking\":\"🚵‍♀️\",\"man-mountain-biking\":\"🚵‍♂️\",mountain_bicyclist:\"🚵‍♂️\",\"woman-walking\":\"🚶‍♀️\",\"man-walking\":\"🚶‍♂️\",walking:\"🚶‍♂️\",no_pedestrians:\"🚷\",children_crossing:\"🚸\",mens:\"🚹\",womens:\"🚺\",restroom:\"🚻\",baby_symbol:\"🚼\",toilet:\"🚽\",wc:\"🚾\",shower:\"🚿\",bath:\"🛀\",bathtub:\"🛁\",passport_control:\"🛂\",customs:\"🛃\",baggage_claim:\"🛄\",left_luggage:\"🛅\",couch_and_lamp:\"🛋️\",sleeping_accommodation:\"🛌\",shopping_bags:\"🛍️\",bellhop_bell:\"🛎️\",bed:\"🛏️\",place_of_worship:\"🛐\",octagonal_sign:\"🛑\",shopping_trolley:\"🛒\",hammer_and_wrench:\"🛠️\",shield:\"🛡️\",oil_drum:\"🛢️\",motorway:\"🛣️\",railway_track:\"🛤️\",motor_boat:\"🛥️\",small_airplane:\"🛩️\",airplane_departure:\"🛫\",airplane_arriving:\"🛬\",satellite:\"🛰️\",passenger_ship:\"🛳️\",scooter:\"🛴\",motor_scooter:\"🛵\",canoe:\"🛶\",sled:\"🛷\",flying_saucer:\"🛸\",zipper_mouth_face:\"🤐\",money_mouth_face:\"🤑\",face_with_thermometer:\"🤒\",nerd_face:\"🤓\",thinking_face:\"🤔\",face_with_head_bandage:\"🤕\",robot_face:\"🤖\",hugging_face:\"🤗\",the_horns:\"🤘\",sign_of_the_horns:\"🤘\",call_me_hand:\"🤙\",raised_back_of_hand:\"🤚\",\"left-facing_fist\":\"🤛\",\"right-facing_fist\":\"🤜\",handshake:\"🤝\",crossed_fingers:\"🤞\",hand_with_index_and_middle_fingers_crossed:\"🤞\",i_love_you_hand_sign:\"🤟\",face_with_cowboy_hat:\"🤠\",clown_face:\"🤡\",nauseated_face:\"🤢\",rolling_on_the_floor_laughing:\"🤣\",drooling_face:\"🤤\",lying_face:\"🤥\",\"woman-facepalming\":\"🤦‍♀️\",\"man-facepalming\":\"🤦‍♂️\",face_palm:\"🤦\",sneezing_face:\"🤧\",face_with_raised_eyebrow:\"🤨\",face_with_one_eyebrow_raised:\"🤨\",\"star-struck\":\"🤩\",grinning_face_with_star_eyes:\"🤩\",zany_face:\"🤪\",grinning_face_with_one_large_and_one_small_eye:\"🤪\",shushing_face:\"🤫\",face_with_finger_covering_closed_lips:\"🤫\",face_with_symbols_on_mouth:\"🤬\",serious_face_with_symbols_covering_mouth:\"🤬\",face_with_hand_over_mouth:\"🤭\",smiling_face_with_smiling_eyes_and_hand_covering_mouth:\"🤭\",face_vomiting:\"🤮\",face_with_open_mouth_vomiting:\"🤮\",exploding_head:\"🤯\",shocked_face_with_exploding_head:\"🤯\",pregnant_woman:\"🤰\",\"breast-feeding\":\"🤱\",palms_up_together:\"🤲\",selfie:\"🤳\",prince:\"🤴\",man_in_tuxedo:\"🤵\",mrs_claus:\"🤶\",mother_christmas:\"🤶\",\"woman-shrugging\":\"🤷‍♀️\",\"man-shrugging\":\"🤷‍♂️\",shrug:\"🤷\",\"woman-cartwheeling\":\"🤸‍♀️\",\"man-cartwheeling\":\"🤸‍♂️\",person_doing_cartwheel:\"🤸\",\"woman-juggling\":\"🤹‍♀️\",\"man-juggling\":\"🤹‍♂️\",juggling:\"🤹\",fencer:\"🤺\",\"woman-wrestling\":\"🤼‍♀️\",\"man-wrestling\":\"🤼‍♂️\",wrestlers:\"🤼\",\"woman-playing-water-polo\":\"🤽‍♀️\",\"man-playing-water-polo\":\"🤽‍♂️\",water_polo:\"🤽\",\"woman-playing-handball\":\"🤾‍♀️\",\"man-playing-handball\":\"🤾‍♂️\",handball:\"🤾\",wilted_flower:\"🥀\",drum_with_drumsticks:\"🥁\",clinking_glasses:\"🥂\",tumbler_glass:\"🥃\",spoon:\"🥄\",goal_net:\"🥅\",first_place_medal:\"🥇\",second_place_medal:\"🥈\",third_place_medal:\"🥉\",boxing_glove:\"🥊\",martial_arts_uniform:\"🥋\",curling_stone:\"🥌\",croissant:\"🥐\",avocado:\"🥑\",cucumber:\"🥒\",bacon:\"🥓\",potato:\"🥔\",carrot:\"🥕\",baguette_bread:\"🥖\",green_salad:\"🥗\",shallow_pan_of_food:\"🥘\",stuffed_flatbread:\"🥙\",egg:\"🥚\",glass_of_milk:\"🥛\",peanuts:\"🥜\",kiwifruit:\"🥝\",pancakes:\"🥞\",dumpling:\"🥟\",fortune_cookie:\"🥠\",takeout_box:\"🥡\",chopsticks:\"🥢\",bowl_with_spoon:\"🥣\",cup_with_straw:\"🥤\",coconut:\"🥥\",broccoli:\"🥦\",pie:\"🥧\",pretzel:\"🥨\",cut_of_meat:\"🥩\",sandwich:\"🥪\",canned_food:\"🥫\",crab:\"🦀\",lion_face:\"🦁\",scorpion:\"🦂\",turkey:\"🦃\",unicorn_face:\"🦄\",eagle:\"🦅\",duck:\"🦆\",bat:\"🦇\",shark:\"🦈\",owl:\"🦉\",fox_face:\"🦊\",butterfly:\"🦋\",deer:\"🦌\",gorilla:\"🦍\",lizard:\"🦎\",rhinoceros:\"🦏\",shrimp:\"🦐\",squid:\"🦑\",giraffe_face:\"🦒\",zebra_face:\"🦓\",hedgehog:\"🦔\",sauropod:\"🦕\",\"t-rex\":\"🦖\",cricket:\"🦗\",cheese_wedge:\"🧀\",face_with_monocle:\"🧐\",adult:\"🧑\",child:\"🧒\",older_adult:\"🧓\",bearded_person:\"🧔\",person_with_headscarf:\"🧕\",woman_in_steamy_room:\"🧖‍♀️\",man_in_steamy_room:\"🧖‍♂️\",person_in_steamy_room:\"🧖‍♂️\",woman_climbing:\"🧗‍♀️\",person_climbing:\"🧗‍♀️\",man_climbing:\"🧗‍♂️\",woman_in_lotus_position:\"🧘‍♀️\",person_in_lotus_position:\"🧘‍♀️\",man_in_lotus_position:\"🧘‍♂️\",female_mage:\"🧙‍♀️\",mage:\"🧙‍♀️\",male_mage:\"🧙‍♂️\",female_fairy:\"🧚‍♀️\",fairy:\"🧚‍♀️\",male_fairy:\"🧚‍♂️\",female_vampire:\"🧛‍♀️\",vampire:\"🧛‍♀️\",male_vampire:\"🧛‍♂️\",mermaid:\"🧜‍♀️\",merman:\"🧜‍♂️\",merperson:\"🧜‍♂️\",female_elf:\"🧝‍♀️\",male_elf:\"🧝‍♂️\",elf:\"🧝‍♂️\",female_genie:\"🧞‍♀️\",male_genie:\"🧞‍♂️\",genie:\"🧞‍♂️\",female_zombie:\"🧟‍♀️\",male_zombie:\"🧟‍♂️\",zombie:\"🧟‍♂️\",brain:\"🧠\",orange_heart:\"🧡\",billed_cap:\"🧢\",scarf:\"🧣\",gloves:\"🧤\",coat:\"🧥\",socks:\"🧦\",bangbang:\"‼️\",interrobang:\"⁉️\",tm:\"™️\",information_source:\"ℹ️\",left_right_arrow:\"↔️\",arrow_up_down:\"↕️\",arrow_upper_left:\"↖️\",arrow_upper_right:\"↗️\",arrow_lower_right:\"↘️\",arrow_lower_left:\"↙️\",leftwards_arrow_with_hook:\"↩️\",arrow_right_hook:\"↪️\",watch:\"⌚\",hourglass:\"⌛\",keyboard:\"⌨️\",eject:\"⏏️\",fast_forward:\"⏩\",rewind:\"⏪\",arrow_double_up:\"⏫\",arrow_double_down:\"⏬\",black_right_pointing_double_triangle_with_vertical_bar:\"⏭️\",black_left_pointing_double_triangle_with_vertical_bar:\"⏮️\",black_right_pointing_triangle_with_double_vertical_bar:\"⏯️\",alarm_clock:\"⏰\",stopwatch:\"⏱️\",timer_clock:\"⏲️\",hourglass_flowing_sand:\"⏳\",double_vertical_bar:\"⏸️\",black_square_for_stop:\"⏹️\",black_circle_for_record:\"⏺️\",m:\"Ⓜ️\",black_small_square:\"▪️\",white_small_square:\"▫️\",arrow_forward:\"▶️\",arrow_backward:\"◀️\",white_medium_square:\"◻️\",black_medium_square:\"◼️\",white_medium_small_square:\"◽\",black_medium_small_square:\"◾\",sunny:\"☀️\",cloud:\"☁️\",umbrella:\"☂️\",snowman:\"☃️\",comet:\"☄️\",phone:\"☎️\",telephone:\"☎️\",ballot_box_with_check:\"☑️\",shamrock:\"☘️\",point_up:\"☝️\",skull_and_crossbones:\"☠️\",radioactive_sign:\"☢️\",biohazard_sign:\"☣️\",orthodox_cross:\"☦️\",star_and_crescent:\"☪️\",peace_symbol:\"☮️\",yin_yang:\"☯️\",wheel_of_dharma:\"☸️\",white_frowning_face:\"☹️\",relaxed:\"☺️\",female_sign:\"♀️\",male_sign:\"♂️\",gemini:\"♊\",cancer:\"♋\",leo:\"♌\",virgo:\"♍\",libra:\"♎\",scorpius:\"♏\",spades:\"♠️\",clubs:\"♣️\",hearts:\"♥️\",diamonds:\"♦️\",hotsprings:\"♨️\",recycle:\"♻️\",wheelchair:\"♿\",hammer_and_pick:\"⚒️\",crossed_swords:\"⚔️\",medical_symbol:\"⚕️\",staff_of_aesculapius:\"⚕️\",scales:\"⚖️\",alembic:\"⚗️\",gear:\"⚙️\",atom_symbol:\"⚛️\",fleur_de_lis:\"⚜️\",warning:\"⚠️\",zap:\"⚡\",white_circle:\"⚪\",black_circle:\"⚫\",coffin:\"⚰️\",funeral_urn:\"⚱️\",soccer:\"⚽\",baseball:\"⚾\",snowman_without_snow:\"⛄\",partly_sunny:\"⛅\",thunder_cloud_and_rain:\"⛈️\",ophiuchus:\"⛎\",pick:\"⛏️\",helmet_with_white_cross:\"⛑️\",chains:\"⛓️\",no_entry:\"⛔\",shinto_shrine:\"⛩️\",church:\"⛪\",mountain:\"⛰️\",umbrella_on_ground:\"⛱️\",fountain:\"⛲\",golf:\"⛳\",ferry:\"⛴️\",boat:\"⛵\",sailboat:\"⛵\",skier:\"⛷️\",ice_skate:\"⛸️\",\"woman-bouncing-ball\":\"⛹️‍♀️\",\"man-bouncing-ball\":\"⛹️‍♂️\",person_with_ball:\"⛹️‍♂️\",tent:\"⛺\",fuelpump:\"⛽\",scissors:\"✂️\",airplane:\"✈️\",email:\"✉️\",envelope:\"✉️\",fist:\"✊\",hand:\"✋\",raised_hand:\"✋\",v:\"✌️\",writing_hand:\"✍️\",pencil2:\"✏️\",black_nib:\"✒️\",heavy_check_mark:\"✔️\",heavy_multiplication_x:\"✖️\",latin_cross:\"✝️\",star_of_david:\"✡️\",eight_spoked_asterisk:\"✳️\",eight_pointed_black_star:\"✴️\",snowflake:\"❄️\",sparkle:\"❇️\",x:\"❌\",negative_squared_cross_mark:\"❎\",heavy_heart_exclamation_mark_ornament:\"❣️\",heart:\"❤️\",arrow_right:\"➡️\",curly_loop:\"➰\",loop:\"➿\",arrow_heading_up:\"⤴️\",arrow_heading_down:\"⤵️\",arrow_left:\"⬅️\",arrow_up:\"⬆️\",arrow_down:\"⬇️\",black_large_square:\"⬛\",white_large_square:\"⬜\",star:\"⭐\",o:\"⭕\",wavy_dash:\"〰️\",part_alternation_mark:\"〽️\",congratulations:\"㊗️\",secret:\"㊙️\"},Mn=r(Object.freeze({__proto__:null,umbrella_with_rain_drops:\"☔\",coffee:\"☕\",aries:\"♈\",taurus:\"♉\",sagittarius:\"♐\",capricorn:\"♑\",aquarius:\"♒\",pisces:\"♓\",anchor:\"⚓\",white_check_mark:\"✅\",sparkles:\"✨\",question:\"❓\",grey_question:\"❔\",grey_exclamation:\"❕\",exclamation:\"❗\",heavy_exclamation_mark:\"❗\",heavy_plus_sign:\"➕\",heavy_minus_sign:\"➖\",heavy_division_sign:\"➗\",hash:\"#️⃣\",keycap_star:\"*️⃣\",zero:\"0️⃣\",one:\"1️⃣\",two:\"2️⃣\",three:\"3️⃣\",four:\"4️⃣\",five:\"5️⃣\",six:\"6️⃣\",seven:\"7️⃣\",eight:\"8️⃣\",nine:\"9️⃣\",copyright:\"©️\",registered:\"®️\",mahjong:\"🀄\",black_joker:\"🃏\",a:\"🅰️\",b:\"🅱️\",o2:\"🅾️\",parking:\"🅿️\",ab:\"🆎\",cl:\"🆑\",cool:\"🆒\",free:\"🆓\",id:\"🆔\",ng:\"🆖\",ok:\"🆗\",sos:\"🆘\",up:\"🆙\",vs:\"🆚\",koko:\"🈁\",sa:\"🈂️\",u7121:\"🈚\",u6307:\"🈯\",u7981:\"🈲\",u7a7a:\"🈳\",u5408:\"🈴\",u6e80:\"🈵\",u6709:\"🈶\",u6708:\"🈷️\",u7533:\"🈸\",u5272:\"🈹\",u55b6:\"🈺\",ideograph_advantage:\"🉐\",accept:\"🉑\",cyclone:\"🌀\",foggy:\"🌁\",closed_umbrella:\"🌂\",night_with_stars:\"🌃\",sunrise_over_mountains:\"🌄\",sunrise:\"🌅\",city_sunset:\"🌆\",city_sunrise:\"🌇\",rainbow:\"🌈\",bridge_at_night:\"🌉\",ocean:\"🌊\",volcano:\"🌋\",milky_way:\"🌌\",earth_africa:\"🌍\",earth_americas:\"🌎\",earth_asia:\"🌏\",globe_with_meridians:\"🌐\",new_moon:\"🌑\",waxing_crescent_moon:\"🌒\",first_quarter_moon:\"🌓\",moon:\"🌔\",waxing_gibbous_moon:\"🌔\",full_moon:\"🌕\",waning_gibbous_moon:\"🌖\",last_quarter_moon:\"🌗\",waning_crescent_moon:\"🌘\",crescent_moon:\"🌙\",new_moon_with_face:\"🌚\",first_quarter_moon_with_face:\"🌛\",last_quarter_moon_with_face:\"🌜\",full_moon_with_face:\"🌝\",sun_with_face:\"🌞\",star2:\"🌟\",stars:\"🌠\",thermometer:\"🌡️\",mostly_sunny:\"🌤️\",sun_small_cloud:\"🌤️\",barely_sunny:\"🌥️\",sun_behind_cloud:\"🌥️\",partly_sunny_rain:\"🌦️\",sun_behind_rain_cloud:\"🌦️\",rain_cloud:\"🌧️\",snow_cloud:\"🌨️\",lightning:\"🌩️\",lightning_cloud:\"🌩️\",tornado:\"🌪️\",tornado_cloud:\"🌪️\",fog:\"🌫️\",wind_blowing_face:\"🌬️\",hotdog:\"🌭\",taco:\"🌮\",burrito:\"🌯\",chestnut:\"🌰\",seedling:\"🌱\",evergreen_tree:\"🌲\",deciduous_tree:\"🌳\",palm_tree:\"🌴\",cactus:\"🌵\",hot_pepper:\"🌶️\",tulip:\"🌷\",cherry_blossom:\"🌸\",rose:\"🌹\",hibiscus:\"🌺\",sunflower:\"🌻\",blossom:\"🌼\",corn:\"🌽\",ear_of_rice:\"🌾\",herb:\"🌿\",four_leaf_clover:\"🍀\",maple_leaf:\"🍁\",fallen_leaf:\"🍂\",leaves:\"🍃\",mushroom:\"🍄\",tomato:\"🍅\",eggplant:\"🍆\",grapes:\"🍇\",melon:\"🍈\",watermelon:\"🍉\",tangerine:\"🍊\",lemon:\"🍋\",banana:\"🍌\",pineapple:\"🍍\",apple:\"🍎\",green_apple:\"🍏\",pear:\"🍐\",peach:\"🍑\",cherries:\"🍒\",strawberry:\"🍓\",hamburger:\"🍔\",pizza:\"🍕\",meat_on_bone:\"🍖\",poultry_leg:\"🍗\",rice_cracker:\"🍘\",rice_ball:\"🍙\",rice:\"🍚\",curry:\"🍛\",ramen:\"🍜\",spaghetti:\"🍝\",bread:\"🍞\",fries:\"🍟\",sweet_potato:\"🍠\",dango:\"🍡\",oden:\"🍢\",sushi:\"🍣\",fried_shrimp:\"🍤\",fish_cake:\"🍥\",icecream:\"🍦\",shaved_ice:\"🍧\",ice_cream:\"🍨\",doughnut:\"🍩\",cookie:\"🍪\",chocolate_bar:\"🍫\",candy:\"🍬\",lollipop:\"🍭\",custard:\"🍮\",honey_pot:\"🍯\",cake:\"🍰\",bento:\"🍱\",stew:\"🍲\",fried_egg:\"🍳\",cooking:\"🍳\",fork_and_knife:\"🍴\",tea:\"🍵\",sake:\"🍶\",wine_glass:\"🍷\",cocktail:\"🍸\",tropical_drink:\"🍹\",beer:\"🍺\",beers:\"🍻\",baby_bottle:\"🍼\",knife_fork_plate:\"🍽️\",champagne:\"🍾\",popcorn:\"🍿\",ribbon:\"🎀\",gift:\"🎁\",birthday:\"🎂\",jack_o_lantern:\"🎃\",christmas_tree:\"🎄\",santa:\"🎅\",fireworks:\"🎆\",sparkler:\"🎇\",balloon:\"🎈\",tada:\"🎉\",confetti_ball:\"🎊\",tanabata_tree:\"🎋\",crossed_flags:\"🎌\",bamboo:\"🎍\",dolls:\"🎎\",flags:\"🎏\",wind_chime:\"🎐\",rice_scene:\"🎑\",school_satchel:\"🎒\",mortar_board:\"🎓\",medal:\"🎖️\",reminder_ribbon:\"🎗️\",studio_microphone:\"🎙️\",level_slider:\"🎚️\",control_knobs:\"🎛️\",film_frames:\"🎞️\",admission_tickets:\"🎟️\",carousel_horse:\"🎠\",ferris_wheel:\"🎡\",roller_coaster:\"🎢\",fishing_pole_and_fish:\"🎣\",microphone:\"🎤\",movie_camera:\"🎥\",cinema:\"🎦\",headphones:\"🎧\",art:\"🎨\",tophat:\"🎩\",circus_tent:\"🎪\",ticket:\"🎫\",clapper:\"🎬\",performing_arts:\"🎭\",video_game:\"🎮\",dart:\"🎯\",slot_machine:\"🎰\",game_die:\"🎲\",bowling:\"🎳\",flower_playing_cards:\"🎴\",musical_note:\"🎵\",notes:\"🎶\",saxophone:\"🎷\",guitar:\"🎸\",musical_keyboard:\"🎹\",trumpet:\"🎺\",violin:\"🎻\",musical_score:\"🎼\",running_shirt_with_sash:\"🎽\",tennis:\"🎾\",ski:\"🎿\",basketball:\"🏀\",checkered_flag:\"🏁\",snowboarder:\"🏂\",runner:\"🏃‍♂️\",running:\"🏃‍♂️\",surfer:\"🏄‍♂️\",sports_medal:\"🏅\",trophy:\"🏆\",horse_racing:\"🏇\",football:\"🏈\",rugby_football:\"🏉\",swimmer:\"🏊‍♂️\",weight_lifter:\"🏋️‍♂️\",golfer:\"🏌️‍♂️\",racing_motorcycle:\"🏍️\",racing_car:\"🏎️\",cricket_bat_and_ball:\"🏏\",volleyball:\"🏐\",field_hockey_stick_and_ball:\"🏑\",ice_hockey_stick_and_puck:\"🏒\",table_tennis_paddle_and_ball:\"🏓\",snow_capped_mountain:\"🏔️\",camping:\"🏕️\",beach_with_umbrella:\"🏖️\",building_construction:\"🏗️\",house_buildings:\"🏘️\",cityscape:\"🏙️\",derelict_house_building:\"🏚️\",classical_building:\"🏛️\",desert:\"🏜️\",desert_island:\"🏝️\",national_park:\"🏞️\",stadium:\"🏟️\",house:\"🏠\",house_with_garden:\"🏡\",office:\"🏢\",post_office:\"🏣\",european_post_office:\"🏤\",hospital:\"🏥\",bank:\"🏦\",atm:\"🏧\",hotel:\"🏨\",love_hotel:\"🏩\",convenience_store:\"🏪\",school:\"🏫\",department_store:\"🏬\",factory:\"🏭\",izakaya_lantern:\"🏮\",lantern:\"🏮\",japanese_castle:\"🏯\",european_castle:\"🏰\",waving_white_flag:\"🏳️\",waving_black_flag:\"🏴\",rosette:\"🏵️\",label:\"🏷️\",badminton_racquet_and_shuttlecock:\"🏸\",bow_and_arrow:\"🏹\",amphora:\"🏺\",rat:\"🐀\",mouse2:\"🐁\",ox:\"🐂\",water_buffalo:\"🐃\",cow2:\"🐄\",tiger2:\"🐅\",leopard:\"🐆\",rabbit2:\"🐇\",cat2:\"🐈\",dragon:\"🐉\",crocodile:\"🐊\",whale2:\"🐋\",snail:\"🐌\",snake:\"🐍\",racehorse:\"🐎\",ram:\"🐏\",goat:\"🐐\",sheep:\"🐑\",monkey:\"🐒\",rooster:\"🐓\",chicken:\"🐔\",dog2:\"🐕\",pig2:\"🐖\",boar:\"🐗\",elephant:\"🐘\",octopus:\"🐙\",shell:\"🐚\",bug:\"🐛\",ant:\"🐜\",bee:\"🐝\",honeybee:\"🐝\",beetle:\"🐞\",fish:\"🐟\",tropical_fish:\"🐠\",blowfish:\"🐡\",turtle:\"🐢\",hatching_chick:\"🐣\",baby_chick:\"🐤\",hatched_chick:\"🐥\",bird:\"🐦\",penguin:\"🐧\",koala:\"🐨\",poodle:\"🐩\",dromedary_camel:\"🐪\",camel:\"🐫\",dolphin:\"🐬\",flipper:\"🐬\",mouse:\"🐭\",cow:\"🐮\",tiger:\"🐯\",rabbit:\"🐰\",cat:\"🐱\",dragon_face:\"🐲\",whale:\"🐳\",horse:\"🐴\",monkey_face:\"🐵\",dog:\"🐶\",pig:\"🐷\",frog:\"🐸\",hamster:\"🐹\",wolf:\"🐺\",bear:\"🐻\",panda_face:\"🐼\",pig_nose:\"🐽\",feet:\"🐾\",paw_prints:\"🐾\",chipmunk:\"🐿️\",eyes:\"👀\",eye:\"👁️\",ear:\"👂\",nose:\"👃\",lips:\"👄\",tongue:\"👅\",point_up_2:\"👆\",point_down:\"👇\",point_left:\"👈\",point_right:\"👉\",facepunch:\"👊\",punch:\"👊\",wave:\"👋\",ok_hand:\"👌\",thumbsup:\"👍\",thumbsdown:\"👎\",clap:\"👏\",open_hands:\"👐\",crown:\"👑\",womans_hat:\"👒\",eyeglasses:\"👓\",necktie:\"👔\",shirt:\"👕\",tshirt:\"👕\",jeans:\"👖\",dress:\"👗\",kimono:\"👘\",bikini:\"👙\",womans_clothes:\"👚\",purse:\"👛\",handbag:\"👜\",pouch:\"👝\",mans_shoe:\"👞\",shoe:\"👞\",athletic_shoe:\"👟\",high_heel:\"👠\",sandal:\"👡\",boot:\"👢\",footprints:\"👣\",bust_in_silhouette:\"👤\",busts_in_silhouette:\"👥\",boy:\"👦\",girl:\"👧\",family:\"👨‍👩‍👦\",man:\"👨\",couple_with_heart:\"👩‍❤️‍👨\",couplekiss:\"👩‍❤️‍💋‍👨\",woman:\"👩\",couple:\"👫\",man_and_woman_holding_hands:\"👫\",two_men_holding_hands:\"👬\",two_women_holding_hands:\"👭\",cop:\"👮‍♂️\",dancers:\"👯‍♀️\",bride_with_veil:\"👰\",person_with_blond_hair:\"👱‍♂️\",man_with_gua_pi_mao:\"👲\",man_with_turban:\"👳‍♂️\",older_man:\"👴\",older_woman:\"👵\",baby:\"👶\",construction_worker:\"👷‍♂️\",princess:\"👸\",japanese_ogre:\"👹\",japanese_goblin:\"👺\",ghost:\"👻\",angel:\"👼\",alien:\"👽\",space_invader:\"👾\",imp:\"👿\",skull:\"💀\",information_desk_person:\"💁‍♀️\",guardsman:\"💂‍♂️\",dancer:\"💃\",lipstick:\"💄\",nail_care:\"💅\",massage:\"💆‍♀️\",haircut:\"💇‍♀️\",barber:\"💈\",syringe:\"💉\",pill:\"💊\",kiss:\"💋\",love_letter:\"💌\",ring:\"💍\",gem:\"💎\",bouquet:\"💐\",wedding:\"💒\",heartbeat:\"💓\",broken_heart:\"💔\",two_hearts:\"💕\",sparkling_heart:\"💖\",heartpulse:\"💗\",cupid:\"💘\",blue_heart:\"💙\",green_heart:\"💚\",yellow_heart:\"💛\",purple_heart:\"💜\",gift_heart:\"💝\",revolving_hearts:\"💞\",heart_decoration:\"💟\",diamond_shape_with_a_dot_inside:\"💠\",bulb:\"💡\",anger:\"💢\",bomb:\"💣\",zzz:\"💤\",boom:\"💥\",collision:\"💥\",sweat_drops:\"💦\",droplet:\"💧\",dash:\"💨\",poop:\"💩\",muscle:\"💪\",dizzy:\"💫\",speech_balloon:\"💬\",thought_balloon:\"💭\",white_flower:\"💮\",moneybag:\"💰\",currency_exchange:\"💱\",heavy_dollar_sign:\"💲\",credit_card:\"💳\",yen:\"💴\",dollar:\"💵\",euro:\"💶\",pound:\"💷\",money_with_wings:\"💸\",chart:\"💹\",seat:\"💺\",computer:\"💻\",briefcase:\"💼\",minidisc:\"💽\",floppy_disk:\"💾\",cd:\"💿\",dvd:\"📀\",file_folder:\"📁\",open_file_folder:\"📂\",page_with_curl:\"📃\",page_facing_up:\"📄\",date:\"📅\",calendar:\"📆\",card_index:\"📇\",chart_with_upwards_trend:\"📈\",chart_with_downwards_trend:\"📉\",bar_chart:\"📊\",clipboard:\"📋\",pushpin:\"📌\",round_pushpin:\"📍\",paperclip:\"📎\",straight_ruler:\"📏\",triangular_ruler:\"📐\",bookmark_tabs:\"📑\",ledger:\"📒\",notebook:\"📓\",notebook_with_decorative_cover:\"📔\",closed_book:\"📕\",book:\"📖\",open_book:\"📖\",green_book:\"📗\",blue_book:\"📘\",orange_book:\"📙\",books:\"📚\",name_badge:\"📛\",scroll:\"📜\",memo:\"📝\",pencil:\"📝\",telephone_receiver:\"📞\",pager:\"📟\",fax:\"📠\",satellite_antenna:\"📡\",loudspeaker:\"📢\",mega:\"📣\",outbox_tray:\"📤\",inbox_tray:\"📥\",incoming_envelope:\"📨\",envelope_with_arrow:\"📩\",mailbox_closed:\"📪\",mailbox:\"📫\",mailbox_with_mail:\"📬\",mailbox_with_no_mail:\"📭\",postbox:\"📮\",postal_horn:\"📯\",newspaper:\"📰\",iphone:\"📱\",calling:\"📲\",vibration_mode:\"📳\",mobile_phone_off:\"📴\",no_mobile_phones:\"📵\",signal_strength:\"📶\",camera:\"📷\",camera_with_flash:\"📸\",video_camera:\"📹\",tv:\"📺\",radio:\"📻\",vhs:\"📼\",film_projector:\"📽️\",prayer_beads:\"📿\",twisted_rightwards_arrows:\"🔀\",repeat:\"🔁\",repeat_one:\"🔂\",arrows_clockwise:\"🔃\",arrows_counterclockwise:\"🔄\",low_brightness:\"🔅\",high_brightness:\"🔆\",mute:\"🔇\",speaker:\"🔈\",sound:\"🔉\",loud_sound:\"🔊\",battery:\"🔋\",electric_plug:\"🔌\",mag:\"🔍\",mag_right:\"🔎\",lock_with_ink_pen:\"🔏\",closed_lock_with_key:\"🔐\",key:\"🔑\",lock:\"🔒\",unlock:\"🔓\",bell:\"🔔\",no_bell:\"🔕\",bookmark:\"🔖\",link:\"🔗\",radio_button:\"🔘\",back:\"🔙\",end:\"🔚\",on:\"🔛\",soon:\"🔜\",underage:\"🔞\",keycap_ten:\"🔟\",capital_abcd:\"🔠\",abcd:\"🔡\",symbols:\"🔣\",abc:\"🔤\",fire:\"🔥\",flashlight:\"🔦\",wrench:\"🔧\",hammer:\"🔨\",nut_and_bolt:\"🔩\",hocho:\"🔪\",knife:\"🔪\",gun:\"🔫\",microscope:\"🔬\",telescope:\"🔭\",crystal_ball:\"🔮\",six_pointed_star:\"🔯\",beginner:\"🔰\",trident:\"🔱\",black_square_button:\"🔲\",white_square_button:\"🔳\",red_circle:\"🔴\",large_blue_circle:\"🔵\",large_orange_diamond:\"🔶\",large_blue_diamond:\"🔷\",small_orange_diamond:\"🔸\",small_blue_diamond:\"🔹\",small_red_triangle:\"🔺\",small_red_triangle_down:\"🔻\",arrow_up_small:\"🔼\",arrow_down_small:\"🔽\",om_symbol:\"🕉️\",dove_of_peace:\"🕊️\",kaaba:\"🕋\",mosque:\"🕌\",synagogue:\"🕍\",menorah_with_nine_branches:\"🕎\",candle:\"🕯️\",mantelpiece_clock:\"🕰️\",hole:\"🕳️\",man_in_business_suit_levitating:\"🕴️\",sleuth_or_spy:\"🕵️‍♂️\",dark_sunglasses:\"🕶️\",spider:\"🕷️\",spider_web:\"🕸️\",joystick:\"🕹️\",man_dancing:\"🕺\",linked_paperclips:\"🖇️\",lower_left_ballpoint_pen:\"🖊️\",lower_left_fountain_pen:\"🖋️\",lower_left_paintbrush:\"🖌️\",lower_left_crayon:\"🖍️\",raised_hand_with_fingers_splayed:\"🖐️\",middle_finger:\"🖕\",reversed_hand_with_middle_finger_extended:\"🖕\",black_heart:\"🖤\",desktop_computer:\"🖥️\",printer:\"🖨️\",three_button_mouse:\"🖱️\",trackball:\"🖲️\",frame_with_picture:\"🖼️\",card_index_dividers:\"🗂️\",card_file_box:\"🗃️\",file_cabinet:\"🗄️\",wastebasket:\"🗑️\",spiral_note_pad:\"🗒️\",spiral_calendar_pad:\"🗓️\",compression:\"🗜️\",old_key:\"🗝️\",rolled_up_newspaper:\"🗞️\",dagger_knife:\"🗡️\",speaking_head_in_silhouette:\"🗣️\",left_speech_bubble:\"🗨️\",right_anger_bubble:\"🗯️\",ballot_box_with_ballot:\"🗳️\",world_map:\"🗺️\",mount_fuji:\"🗻\",tokyo_tower:\"🗼\",statue_of_liberty:\"🗽\",japan:\"🗾\",moyai:\"🗿\",grinning:\"😀\",grin:\"😁\",joy:\"😂\",smiley:\"😃\",smile:\"😄\",sweat_smile:\"😅\",laughing:\"😆\",satisfied:\"😆\",innocent:\"😇\",smiling_imp:\"😈\",wink:\"😉\",blush:\"😊\",yum:\"😋\",relieved:\"😌\",heart_eyes:\"😍\",sunglasses:\"😎\",smirk:\"😏\",neutral_face:\"😐\",expressionless:\"😑\",unamused:\"😒\",sweat:\"😓\",pensive:\"😔\",confused:\"😕\",confounded:\"😖\",kissing:\"😗\",kissing_heart:\"😘\",kissing_smiling_eyes:\"😙\",kissing_closed_eyes:\"😚\",stuck_out_tongue:\"😛\",stuck_out_tongue_winking_eye:\"😜\",stuck_out_tongue_closed_eyes:\"😝\",disappointed:\"😞\",worried:\"😟\",angry:\"😠\",rage:\"😡\",cry:\"😢\",persevere:\"😣\",triumph:\"😤\",disappointed_relieved:\"😥\",frowning:\"😦\",anguished:\"😧\",fearful:\"😨\",weary:\"😩\",sleepy:\"😪\",tired_face:\"😫\",grimacing:\"😬\",sob:\"😭\",open_mouth:\"😮\",hushed:\"😯\",cold_sweat:\"😰\",scream:\"😱\",astonished:\"😲\",flushed:\"😳\",sleeping:\"😴\",dizzy_face:\"😵\",no_mouth:\"😶\",mask:\"😷\",smile_cat:\"😸\",joy_cat:\"😹\",smiley_cat:\"😺\",heart_eyes_cat:\"😻\",smirk_cat:\"😼\",kissing_cat:\"😽\",pouting_cat:\"😾\",crying_cat_face:\"😿\",scream_cat:\"🙀\",slightly_frowning_face:\"🙁\",slightly_smiling_face:\"🙂\",upside_down_face:\"🙃\",face_with_rolling_eyes:\"🙄\",no_good:\"🙅‍♀️\",ok_woman:\"🙆‍♀️\",bow:\"🙇‍♂️\",see_no_evil:\"🙈\",hear_no_evil:\"🙉\",speak_no_evil:\"🙊\",raising_hand:\"🙋‍♀️\",raised_hands:\"🙌\",person_frowning:\"🙍‍♀️\",person_with_pouting_face:\"🙎‍♀️\",pray:\"🙏\",rocket:\"🚀\",helicopter:\"🚁\",steam_locomotive:\"🚂\",railway_car:\"🚃\",bullettrain_side:\"🚄\",bullettrain_front:\"🚅\",train2:\"🚆\",metro:\"🚇\",light_rail:\"🚈\",station:\"🚉\",tram:\"🚊\",train:\"🚋\",bus:\"🚌\",oncoming_bus:\"🚍\",trolleybus:\"🚎\",busstop:\"🚏\",minibus:\"🚐\",ambulance:\"🚑\",fire_engine:\"🚒\",police_car:\"🚓\",oncoming_police_car:\"🚔\",taxi:\"🚕\",oncoming_taxi:\"🚖\",car:\"🚗\",red_car:\"🚗\",oncoming_automobile:\"🚘\",blue_car:\"🚙\",truck:\"🚚\",articulated_lorry:\"🚛\",tractor:\"🚜\",monorail:\"🚝\",mountain_railway:\"🚞\",suspension_railway:\"🚟\",mountain_cableway:\"🚠\",aerial_tramway:\"🚡\",ship:\"🚢\",rowboat:\"🚣‍♂️\",speedboat:\"🚤\",traffic_light:\"🚥\",vertical_traffic_light:\"🚦\",construction:\"🚧\",rotating_light:\"🚨\",triangular_flag_on_post:\"🚩\",door:\"🚪\",no_entry_sign:\"🚫\",smoking:\"🚬\",no_smoking:\"🚭\",put_litter_in_its_place:\"🚮\",do_not_litter:\"🚯\",potable_water:\"🚰\",bike:\"🚲\",no_bicycles:\"🚳\",bicyclist:\"🚴‍♂️\",mountain_bicyclist:\"🚵‍♂️\",walking:\"🚶‍♂️\",no_pedestrians:\"🚷\",children_crossing:\"🚸\",mens:\"🚹\",womens:\"🚺\",restroom:\"🚻\",baby_symbol:\"🚼\",toilet:\"🚽\",wc:\"🚾\",shower:\"🚿\",bath:\"🛀\",bathtub:\"🛁\",passport_control:\"🛂\",customs:\"🛃\",baggage_claim:\"🛄\",left_luggage:\"🛅\",couch_and_lamp:\"🛋️\",sleeping_accommodation:\"🛌\",shopping_bags:\"🛍️\",bellhop_bell:\"🛎️\",bed:\"🛏️\",place_of_worship:\"🛐\",octagonal_sign:\"🛑\",shopping_trolley:\"🛒\",hammer_and_wrench:\"🛠️\",shield:\"🛡️\",oil_drum:\"🛢️\",motorway:\"🛣️\",railway_track:\"🛤️\",motor_boat:\"🛥️\",small_airplane:\"🛩️\",airplane_departure:\"🛫\",airplane_arriving:\"🛬\",satellite:\"🛰️\",passenger_ship:\"🛳️\",scooter:\"🛴\",motor_scooter:\"🛵\",canoe:\"🛶\",sled:\"🛷\",flying_saucer:\"🛸\",zipper_mouth_face:\"🤐\",money_mouth_face:\"🤑\",face_with_thermometer:\"🤒\",nerd_face:\"🤓\",thinking_face:\"🤔\",face_with_head_bandage:\"🤕\",robot_face:\"🤖\",hugging_face:\"🤗\",the_horns:\"🤘\",sign_of_the_horns:\"🤘\",call_me_hand:\"🤙\",raised_back_of_hand:\"🤚\",handshake:\"🤝\",crossed_fingers:\"🤞\",hand_with_index_and_middle_fingers_crossed:\"🤞\",i_love_you_hand_sign:\"🤟\",face_with_cowboy_hat:\"🤠\",clown_face:\"🤡\",nauseated_face:\"🤢\",rolling_on_the_floor_laughing:\"🤣\",drooling_face:\"🤤\",lying_face:\"🤥\",face_palm:\"🤦\",sneezing_face:\"🤧\",face_with_raised_eyebrow:\"🤨\",face_with_one_eyebrow_raised:\"🤨\",grinning_face_with_star_eyes:\"🤩\",zany_face:\"🤪\",grinning_face_with_one_large_and_one_small_eye:\"🤪\",shushing_face:\"🤫\",face_with_finger_covering_closed_lips:\"🤫\",face_with_symbols_on_mouth:\"🤬\",serious_face_with_symbols_covering_mouth:\"🤬\",face_with_hand_over_mouth:\"🤭\",smiling_face_with_smiling_eyes_and_hand_covering_mouth:\"🤭\",face_vomiting:\"🤮\",face_with_open_mouth_vomiting:\"🤮\",exploding_head:\"🤯\",shocked_face_with_exploding_head:\"🤯\",pregnant_woman:\"🤰\",palms_up_together:\"🤲\",selfie:\"🤳\",prince:\"🤴\",man_in_tuxedo:\"🤵\",mrs_claus:\"🤶\",mother_christmas:\"🤶\",shrug:\"🤷\",person_doing_cartwheel:\"🤸\",juggling:\"🤹\",fencer:\"🤺\",wrestlers:\"🤼\",water_polo:\"🤽\",handball:\"🤾\",wilted_flower:\"🥀\",drum_with_drumsticks:\"🥁\",clinking_glasses:\"🥂\",tumbler_glass:\"🥃\",spoon:\"🥄\",goal_net:\"🥅\",first_place_medal:\"🥇\",second_place_medal:\"🥈\",third_place_medal:\"🥉\",boxing_glove:\"🥊\",martial_arts_uniform:\"🥋\",curling_stone:\"🥌\",croissant:\"🥐\",avocado:\"🥑\",cucumber:\"🥒\",bacon:\"🥓\",potato:\"🥔\",carrot:\"🥕\",baguette_bread:\"🥖\",green_salad:\"🥗\",shallow_pan_of_food:\"🥘\",stuffed_flatbread:\"🥙\",egg:\"🥚\",glass_of_milk:\"🥛\",peanuts:\"🥜\",kiwifruit:\"🥝\",pancakes:\"🥞\",dumpling:\"🥟\",fortune_cookie:\"🥠\",takeout_box:\"🥡\",chopsticks:\"🥢\",bowl_with_spoon:\"🥣\",cup_with_straw:\"🥤\",coconut:\"🥥\",broccoli:\"🥦\",pie:\"🥧\",pretzel:\"🥨\",cut_of_meat:\"🥩\",sandwich:\"🥪\",canned_food:\"🥫\",crab:\"🦀\",lion_face:\"🦁\",scorpion:\"🦂\",turkey:\"🦃\",unicorn_face:\"🦄\",eagle:\"🦅\",duck:\"🦆\",bat:\"🦇\",shark:\"🦈\",owl:\"🦉\",fox_face:\"🦊\",butterfly:\"🦋\",deer:\"🦌\",gorilla:\"🦍\",lizard:\"🦎\",rhinoceros:\"🦏\",shrimp:\"🦐\",squid:\"🦑\",giraffe_face:\"🦒\",zebra_face:\"🦓\",hedgehog:\"🦔\",sauropod:\"🦕\",cricket:\"🦗\",cheese_wedge:\"🧀\",face_with_monocle:\"🧐\",adult:\"🧑\",child:\"🧒\",older_adult:\"🧓\",bearded_person:\"🧔\",person_with_headscarf:\"🧕\",woman_in_steamy_room:\"🧖‍♀️\",man_in_steamy_room:\"🧖‍♂️\",person_in_steamy_room:\"🧖‍♂️\",woman_climbing:\"🧗‍♀️\",person_climbing:\"🧗‍♀️\",man_climbing:\"🧗‍♂️\",woman_in_lotus_position:\"🧘‍♀️\",person_in_lotus_position:\"🧘‍♀️\",man_in_lotus_position:\"🧘‍♂️\",female_mage:\"🧙‍♀️\",mage:\"🧙‍♀️\",male_mage:\"🧙‍♂️\",female_fairy:\"🧚‍♀️\",fairy:\"🧚‍♀️\",male_fairy:\"🧚‍♂️\",female_vampire:\"🧛‍♀️\",vampire:\"🧛‍♀️\",male_vampire:\"🧛‍♂️\",mermaid:\"🧜‍♀️\",merman:\"🧜‍♂️\",merperson:\"🧜‍♂️\",female_elf:\"🧝‍♀️\",male_elf:\"🧝‍♂️\",elf:\"🧝‍♂️\",female_genie:\"🧞‍♀️\",male_genie:\"🧞‍♂️\",genie:\"🧞‍♂️\",female_zombie:\"🧟‍♀️\",male_zombie:\"🧟‍♂️\",zombie:\"🧟‍♂️\",brain:\"🧠\",orange_heart:\"🧡\",billed_cap:\"🧢\",scarf:\"🧣\",gloves:\"🧤\",coat:\"🧥\",socks:\"🧦\",bangbang:\"‼️\",interrobang:\"⁉️\",tm:\"™️\",information_source:\"ℹ️\",left_right_arrow:\"↔️\",arrow_up_down:\"↕️\",arrow_upper_left:\"↖️\",arrow_upper_right:\"↗️\",arrow_lower_right:\"↘️\",arrow_lower_left:\"↙️\",leftwards_arrow_with_hook:\"↩️\",arrow_right_hook:\"↪️\",watch:\"⌚\",hourglass:\"⌛\",keyboard:\"⌨️\",eject:\"⏏️\",fast_forward:\"⏩\",rewind:\"⏪\",arrow_double_up:\"⏫\",arrow_double_down:\"⏬\",black_right_pointing_double_triangle_with_vertical_bar:\"⏭️\",black_left_pointing_double_triangle_with_vertical_bar:\"⏮️\",black_right_pointing_triangle_with_double_vertical_bar:\"⏯️\",alarm_clock:\"⏰\",stopwatch:\"⏱️\",timer_clock:\"⏲️\",hourglass_flowing_sand:\"⏳\",double_vertical_bar:\"⏸️\",black_square_for_stop:\"⏹️\",black_circle_for_record:\"⏺️\",m:\"Ⓜ️\",black_small_square:\"▪️\",white_small_square:\"▫️\",arrow_forward:\"▶️\",arrow_backward:\"◀️\",white_medium_square:\"◻️\",black_medium_square:\"◼️\",white_medium_small_square:\"◽\",black_medium_small_square:\"◾\",sunny:\"☀️\",cloud:\"☁️\",umbrella:\"☂️\",snowman:\"☃️\",comet:\"☄️\",phone:\"☎️\",telephone:\"☎️\",ballot_box_with_check:\"☑️\",shamrock:\"☘️\",point_up:\"☝️\",skull_and_crossbones:\"☠️\",radioactive_sign:\"☢️\",biohazard_sign:\"☣️\",orthodox_cross:\"☦️\",star_and_crescent:\"☪️\",peace_symbol:\"☮️\",yin_yang:\"☯️\",wheel_of_dharma:\"☸️\",white_frowning_face:\"☹️\",relaxed:\"☺️\",female_sign:\"♀️\",male_sign:\"♂️\",gemini:\"♊\",cancer:\"♋\",leo:\"♌\",virgo:\"♍\",libra:\"♎\",scorpius:\"♏\",spades:\"♠️\",clubs:\"♣️\",hearts:\"♥️\",diamonds:\"♦️\",hotsprings:\"♨️\",recycle:\"♻️\",wheelchair:\"♿\",hammer_and_pick:\"⚒️\",crossed_swords:\"⚔️\",medical_symbol:\"⚕️\",staff_of_aesculapius:\"⚕️\",scales:\"⚖️\",alembic:\"⚗️\",gear:\"⚙️\",atom_symbol:\"⚛️\",fleur_de_lis:\"⚜️\",warning:\"⚠️\",zap:\"⚡\",white_circle:\"⚪\",black_circle:\"⚫\",coffin:\"⚰️\",funeral_urn:\"⚱️\",soccer:\"⚽\",baseball:\"⚾\",snowman_without_snow:\"⛄\",partly_sunny:\"⛅\",thunder_cloud_and_rain:\"⛈️\",ophiuchus:\"⛎\",pick:\"⛏️\",helmet_with_white_cross:\"⛑️\",chains:\"⛓️\",no_entry:\"⛔\",shinto_shrine:\"⛩️\",church:\"⛪\",mountain:\"⛰️\",umbrella_on_ground:\"⛱️\",fountain:\"⛲\",golf:\"⛳\",ferry:\"⛴️\",boat:\"⛵\",sailboat:\"⛵\",skier:\"⛷️\",ice_skate:\"⛸️\",person_with_ball:\"⛹️‍♂️\",tent:\"⛺\",fuelpump:\"⛽\",scissors:\"✂️\",airplane:\"✈️\",email:\"✉️\",envelope:\"✉️\",fist:\"✊\",hand:\"✋\",raised_hand:\"✋\",v:\"✌️\",writing_hand:\"✍️\",pencil2:\"✏️\",black_nib:\"✒️\",heavy_check_mark:\"✔️\",heavy_multiplication_x:\"✖️\",latin_cross:\"✝️\",star_of_david:\"✡️\",eight_spoked_asterisk:\"✳️\",eight_pointed_black_star:\"✴️\",snowflake:\"❄️\",sparkle:\"❇️\",x:\"❌\",negative_squared_cross_mark:\"❎\",heavy_heart_exclamation_mark_ornament:\"❣️\",heart:\"❤️\",arrow_right:\"➡️\",curly_loop:\"➰\",loop:\"➿\",arrow_heading_up:\"⤴️\",arrow_heading_down:\"⤵️\",arrow_left:\"⬅️\",arrow_up:\"⬆️\",arrow_down:\"⬇️\",black_large_square:\"⬛\",white_large_square:\"⬜\",star:\"⭐\",o:\"⭕\",wavy_dash:\"〰️\",part_alternation_mark:\"〽️\",congratulations:\"㊗️\",secret:\"㊙️\",default:Rn})),In=/:([a-zA-Z0-9_\\-\\+]+):/g,Ln=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;function $n(e){var n=e.indexOf(\":\");return n>-1?n===e.length-1?$n(e=e.substring(0,n)):$n(e=e.substr(n+1)):e}function Un(e){return\"string\"==typeof e&&e.length>0?\":\"+e+\":\":e}var qn=Object.keys(Mn).reduce((function(e,n){return e[Mn[n]]=n,e}),{}),Pn={emoji:Mn};Pn._get=function(e){return Mn.hasOwnProperty(e)?Mn[e]:\"string\"==typeof(n=e)&&\":\"!==n[0]?Un(n):n;var n},Pn.get=function(e){return e=$n(e),Pn._get(e)},Pn.find=function(e){return Pn.findByName(e)||Pn.findByCode(e)},Pn.findByName=function(e){var n=$n(e),t=Mn[n];return t?{emoji:t,key:n}:void 0},Pn.findByCode=function(e){var n=qn[e];return n?{emoji:Mn[n],key:n}:void 0},Pn.hasEmoji=function(e){return Pn.hasEmojiByName(e)||Pn.hasEmojiByCode(e)},Pn.hasEmojiByName=function(e){var n=Pn.findByName(e);return!!n&&n.key===$n(e)},Pn.hasEmojiByCode=function(e){var n=Pn.findByCode(e);return!!n&&n.emoji===e},Pn.which=function(e,n){var t=qn[e];return n?Un(t):t},Pn.emojify=function(e,n,t){return e?e.split(In).map((function(e,r){if(r%2==0)return e;var o=Pn._get(e),a=o.indexOf(\":\")>-1;return a&&\"function\"==typeof n?n(e):a||\"function\"!=typeof t?o:t(o,e)})).join(\"\"):\"\"},Pn.random=function(){var e=Object.keys(Mn),n=e[Math.floor(Math.random()*e.length)];return{key:n,emoji:Pn._get(n)}},Pn.search=function(e){var n=Object.keys(Mn),t=$n(e),r=n.filter((function(e){return 0===e.toString().indexOf(t)}));return r.map((function(e){return{key:e,emoji:Pn._get(e)}}))},Pn.unemojify=function(e){return e?jn(e).map((function(e){return Pn.which(e,!0)||e})).join(\"\"):\"\"},Pn.replace=function(e,n,t){if(!e)return\"\";var r=\"function\"==typeof n?n:function(){return n},o=jn(e),a=o.map((function(e,n){var a=Pn.findByCode(e);return a&&t&&\" \"===o[n+1]&&(o[n+1]=\"\"),a?r(a):e})).join(\"\");return t?a.replace(Ln,\"\"):a},Pn.strip=function(e){return Pn.replace(e,\"\",!0)};var Hn=Pn;he.registerLanguage(\"yaml\",ve),he.registerLanguage(\"javascript\",ye),he.registerLanguage(\"json\",Ae);const Zn=Ce;Zn.setOptions({highlight:function(e,n){return n&&he.getLanguage(n)?he.highlight(e,{language:n,ignoreIllegals:!0}).value:he.highlightAuto(e).value},breaks:!0,gfm:!0,tables:!0,langPrefix:\"\"});class Gn{static convert(e){return Zn.parse(e)}static html(e,n){e=(e=Hn.emojify(e)).replace(/(https:\\/\\/github\\.com\\/.*.\\/blob*.[^\\s]+)/g,(function(e){return e.includes(\".md\")?e:e.replace(\"https://github.com/\",\"https://raw.githubusercontent.com/\").replace(\"/blob/\",\"/\")})),n&&(e=e.replace(/!\\[*.*\\]\\((?!.*:\\/\\/).*\\/*.*\\.\\w*\\)/g,(function(e){return e.replace(\"(/\",\"(\").replace(\"(\",`(https://raw.githubusercontent.com/${n.full_name}/${n.available_version||n.default_branch}/`).replace(\"/blob/\",\"/\")}))),e=e.replace(/[^(]https:\\/\\/github\\.com\\/\\S*\\/commit\\/([0-9a-f]{40})/g,((e,n)=>`[\\`${n.substr(0,7)}\\`](${e})`)),n&&(e=e.replace(/(?:\\w[\\w-.]+\\/\\w[\\w-.]+|\\B)#[1-9]\\d*\\b/g,(e=>{const t=e.replace(/^#/,`${n.full_name}#`),[r,o]=t.split(\"#\");return`[${e}](https://github.com/${r}/issues/${o})`})));const t=document.createElement(\"div\");t.className=\"markdown-body\",t.innerHTML=a.sanitize(Zn.parse(e),{css:!1}).replace(/\\<a href=\"http\\w:\\/\\/.*.\\\">.*.\\<\\/a>\\W/g,(function(e){return e.replace(/<a href=/gm,\"<hacs-link url=\").replace(/<\\/a>/gm,\"</hacs-link>\")}));const r=document.createElement(\"style\");return r.innerText='\\n  /*\\n\\ngithub.com style (c) Vasily Polovnyov <vast@whiteants.net>\\n\\n*/\\n\\n  .hljs {\\n    display: block;\\n    overflow-x: auto;\\n    padding: 0.5em;\\n    color: #333;\\n    background: #f8f8f8;\\n  }\\n\\n  .hljs-comment,\\n  .hljs-quote {\\n    color: #998;\\n    font-style: italic;\\n  }\\n\\n  .hljs-keyword,\\n  .hljs-selector-tag,\\n  .hljs-subst {\\n    color: #333;\\n    font-weight: bold;\\n  }\\n\\n  .hljs-number,\\n  .hljs-literal,\\n  .hljs-variable,\\n  .hljs-template-variable,\\n  .hljs-tag .hljs-attr {\\n    color: #008080;\\n  }\\n\\n  .hljs-string,\\n  .hljs-doctag {\\n    color: #d14;\\n  }\\n\\n  .hljs-title,\\n  .hljs-section,\\n  .hljs-selector-id {\\n    color: #900;\\n    font-weight: bold;\\n  }\\n\\n  .hljs-subst {\\n    font-weight: normal;\\n  }\\n\\n  .hljs-type,\\n  .hljs-class .hljs-title {\\n    color: #458;\\n    font-weight: bold;\\n  }\\n\\n  .hljs-tag,\\n  .hljs-name,\\n  .hljs-attribute {\\n    color: #000080;\\n    font-weight: normal;\\n  }\\n\\n  .hljs-regexp,\\n  .hljs-link {\\n    color: #009926;\\n  }\\n\\n  .hljs-symbol,\\n  .hljs-bullet {\\n    color: #990073;\\n  }\\n\\n  .hljs-built_in,\\n  .hljs-builtin-name {\\n    color: #0086b3;\\n  }\\n\\n  .hljs-meta {\\n    color: #999;\\n    font-weight: bold;\\n  }\\n\\n  .hljs-deletion {\\n    background: #fdd;\\n  }\\n\\n  .hljs-addition {\\n    background: #dfd;\\n  }\\n\\n  .hljs-emphasis {\\n    font-style: italic;\\n  }\\n\\n  .hljs-strong {\\n    font-weight: bold;\\n  }\\n\\n  @font-face {\\n    font-family: octicons-link;\\n    src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==)\\n      format(\"woff\");\\n  }\\n\\n  .markdown-body .octicon {\\n    display: inline-block;\\n    fill: currentColor;\\n    vertical-align: text-bottom;\\n  }\\n\\n  .markdown-body .anchor {\\n    float: left;\\n    line-height: 1;\\n    margin-left: -20px;\\n    padding-right: 4px;\\n  }\\n\\n  .markdown-body .anchor:focus {\\n    outline: none;\\n  }\\n\\n  .markdown-body h1 .octicon-link,\\n  .markdown-body h2 .octicon-link,\\n  .markdown-body h3 .octicon-link,\\n  .markdown-body h4 .octicon-link,\\n  .markdown-body h5 .octicon-link,\\n  .markdown-body h6 .octicon-link {\\n    color: #1b1f23;\\n    vertical-align: middle;\\n    visibility: hidden;\\n  }\\n\\n  .markdown-body h1:hover .anchor,\\n  .markdown-body h2:hover .anchor,\\n  .markdown-body h3:hover .anchor,\\n  .markdown-body h4:hover .anchor,\\n  .markdown-body h5:hover .anchor,\\n  .markdown-body h6:hover .anchor {\\n    text-decoration: none;\\n  }\\n\\n  .markdown-body h1:hover .anchor .octicon-link,\\n  .markdown-body h2:hover .anchor .octicon-link,\\n  .markdown-body h3:hover .anchor .octicon-link,\\n  .markdown-body h4:hover .anchor .octicon-link,\\n  .markdown-body h5:hover .anchor .octicon-link,\\n  .markdown-body h6:hover .anchor .octicon-link {\\n    visibility: visible;\\n  }\\n  .markdown-body {\\n    -ms-text-size-adjust: 100%;\\n    -webkit-text-size-adjust: 100%;\\n    line-height: 1.5;\\n    font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial,\\n      sans-serif, Apple Color Emoji, Segoe UI Emoji;\\n    font-size: 16px;\\n    line-height: 1.5;\\n    word-wrap: break-word;\\n  }\\n\\n  .markdown-body .pl-c {\\n    color: #6a737d;\\n  }\\n\\n  .markdown-body .pl-c1,\\n  .markdown-body .pl-s .pl-v {\\n    color: #005cc5;\\n  }\\n\\n  .markdown-body .pl-e,\\n  .markdown-body .pl-en {\\n    color: #6f42c1;\\n  }\\n\\n  .markdown-body .pl-s .pl-s1,\\n  .markdown-body .pl-smi {\\n    color: #24292e;\\n  }\\n\\n  .markdown-body .pl-ent {\\n    color: #22863a;\\n  }\\n\\n  .markdown-body .pl-k {\\n    color: #d73a49;\\n  }\\n\\n  .markdown-body .pl-pds,\\n  .markdown-body .pl-s,\\n  .markdown-body .pl-s .pl-pse .pl-s1,\\n  .markdown-body .pl-sr,\\n  .markdown-body .pl-sr .pl-cce,\\n  .markdown-body .pl-sr .pl-sra,\\n  .markdown-body .pl-sr .pl-sre {\\n    color: #032f62;\\n  }\\n\\n  .markdown-body .pl-smw,\\n  .markdown-body .pl-v {\\n    color: #e36209;\\n  }\\n\\n  .markdown-body .pl-bu {\\n    color: #b31d28;\\n  }\\n\\n  .markdown-body .pl-ii {\\n    color: #fafbfc;\\n    background-color: #b31d28;\\n  }\\n\\n  .markdown-body .pl-c2 {\\n    color: #fafbfc;\\n    background-color: #d73a49;\\n  }\\n\\n  .markdown-body .pl-c2:before {\\n    content: \"^M\";\\n  }\\n\\n  .markdown-body .pl-sr .pl-cce {\\n    font-weight: 700;\\n    color: #22863a;\\n  }\\n\\n  .markdown-body .pl-ml {\\n    color: #735c0f;\\n  }\\n\\n  .markdown-body .pl-mh,\\n  .markdown-body .pl-mh .pl-en,\\n  .markdown-body .pl-ms {\\n    font-weight: 700;\\n    color: #005cc5;\\n  }\\n\\n  .markdown-body .pl-mi {\\n    font-style: italic;\\n    color: #24292e;\\n  }\\n\\n  .markdown-body .pl-mb {\\n    font-weight: 700;\\n    color: #24292e;\\n  }\\n\\n  .markdown-body .pl-md {\\n    color: #b31d28;\\n    background-color: #ffeef0;\\n  }\\n\\n  .markdown-body .pl-mi1 {\\n    color: #22863a;\\n    background-color: #f0fff4;\\n  }\\n\\n  .markdown-body .pl-mc {\\n    color: #e36209;\\n    background-color: #ffebda;\\n  }\\n\\n  .markdown-body .pl-mi2 {\\n    color: #f6f8fa;\\n    background-color: #005cc5;\\n  }\\n\\n  .markdown-body .pl-mdr {\\n    font-weight: 700;\\n    color: #6f42c1;\\n  }\\n\\n  .markdown-body .pl-ba {\\n    color: #586069;\\n  }\\n\\n  .markdown-body .pl-sg {\\n    color: #959da5;\\n  }\\n\\n  .markdown-body .pl-corl {\\n    text-decoration: underline;\\n    color: #032f62;\\n  }\\n\\n  .markdown-body details {\\n    display: block;\\n  }\\n\\n  .markdown-body summary {\\n    display: list-item;\\n  }\\n\\n  .markdown-body a {\\n    background-color: initial;\\n  }\\n\\n  .markdown-body a:active,\\n  .markdown-body a:hover {\\n    outline-width: 0;\\n  }\\n\\n  .markdown-body strong {\\n    font-weight: inherit;\\n    font-weight: bolder;\\n  }\\n\\n  .markdown-body h1 {\\n    font-size: 2em;\\n    margin: 0.67em 0;\\n  }\\n\\n  .markdown-body img {\\n    border-style: none;\\n  }\\n\\n  .markdown-body code,\\n  .markdown-body kbd,\\n  .markdown-body pre {\\n    font-family: monospace, monospace;\\n    font-size: 1em;\\n    background-color: var(--hcv-color-markdown-background);\\n  }\\n\\n  .markdown-body hr {\\n    box-sizing: initial;\\n    height: 0;\\n    overflow: visible;\\n  }\\n\\n  .markdown-body input {\\n    font: inherit;\\n    margin: 0;\\n  }\\n\\n  .markdown-body input {\\n    overflow: visible;\\n  }\\n\\n  .markdown-body [type=\"checkbox\"] {\\n    box-sizing: border-box;\\n    padding: 0;\\n  }\\n\\n  .markdown-body * {\\n    box-sizing: border-box;\\n  }\\n\\n  .markdown-body input {\\n    font-family: inherit;\\n    font-size: inherit;\\n    line-height: inherit;\\n  }\\n\\n  .markdown-body a {\\n    color: var(--link-text-color, var(--accent-color));\\n    font-weight: 600;\\n    text-decoration: none;\\n  }\\n\\n  .markdown-body a:hover {\\n    text-decoration: underline;\\n  }\\n\\n  .markdown-body strong {\\n    font-weight: 600;\\n  }\\n\\n  .markdown-body hr {\\n    height: 0;\\n    margin: 15px 0;\\n    overflow: hidden;\\n    background: transparent;\\n    border: 0;\\n    border-bottom: 1px solid #dfe2e5;\\n  }\\n\\n  .markdown-body hr:after,\\n  .markdown-body hr:before {\\n    display: table;\\n    content: \"\";\\n  }\\n\\n  .markdown-body hr:after {\\n    clear: both;\\n  }\\n\\n  .markdown-body table {\\n    border-spacing: 0;\\n    border-collapse: collapse;\\n  }\\n\\n  .markdown-body td,\\n  .markdown-body th {\\n    padding: 0;\\n  }\\n\\n  .markdown-body details summary {\\n    cursor: pointer;\\n  }\\n\\n  .markdown-body kbd {\\n    display: inline-block;\\n    padding: 3px 5px;\\n    font: 11px SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;\\n    line-height: 10px;\\n    color: #444d56;\\n    vertical-align: middle;\\n    background-color: var(--hcv-color-markdown-background);\\n    border: 1px solid #d1d5da;\\n    border-radius: 3px;\\n    box-shadow: inset 0 -1px 0 #d1d5da;\\n  }\\n\\n  .markdown-body h1,\\n  .markdown-body h2,\\n  .markdown-body h3,\\n  .markdown-body h4,\\n  .markdown-body h5,\\n  .markdown-body h6 {\\n    margin-top: 0;\\n    margin-bottom: 0;\\n  }\\n\\n  .markdown-body h1 {\\n    font-size: 32px;\\n  }\\n\\n  .markdown-body h1,\\n  .markdown-body h2 {\\n    font-weight: 600;\\n  }\\n\\n  .markdown-body h2 {\\n    font-size: 24px;\\n  }\\n\\n  .markdown-body h3 {\\n    font-size: 20px;\\n  }\\n\\n  .markdown-body h3,\\n  .markdown-body h4 {\\n    font-weight: 600;\\n  }\\n\\n  .markdown-body h4 {\\n    font-size: 16px;\\n  }\\n\\n  .markdown-body h5 {\\n    font-size: 14px;\\n  }\\n\\n  .markdown-body h5,\\n  .markdown-body h6 {\\n    font-weight: 600;\\n  }\\n\\n  .markdown-body h6 {\\n    font-size: 12px;\\n  }\\n\\n  .markdown-body p {\\n    margin-top: 0;\\n    margin-bottom: 10px;\\n  }\\n\\n  .markdown-body blockquote {\\n    margin: 0;\\n  }\\n\\n  .markdown-body ol,\\n  .markdown-body ul {\\n    padding-left: 0;\\n    margin-top: 0;\\n    margin-bottom: 0;\\n  }\\n\\n  .markdown-body ol ol,\\n  .markdown-body ul ol {\\n    list-style-type: lower-roman;\\n  }\\n\\n  .markdown-body ol ol ol,\\n  .markdown-body ol ul ol,\\n  .markdown-body ul ol ol,\\n  .markdown-body ul ul ol {\\n    list-style-type: lower-alpha;\\n  }\\n\\n  .markdown-body dd {\\n    margin-left: 0;\\n  }\\n\\n  .markdown-body code,\\n  .markdown-body pre {\\n    font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;\\n    font-size: 12px;\\n  }\\n\\n  .markdown-body pre {\\n    margin-top: 0;\\n    margin-bottom: 0;\\n  }\\n\\n  .markdown-body input::-webkit-inner-spin-button,\\n  .markdown-body input::-webkit-outer-spin-button {\\n    margin: 0;\\n    -webkit-appearance: none;\\n    appearance: none;\\n  }\\n\\n  .markdown-body .border {\\n    border: 1px solid #e1e4e8 !important;\\n  }\\n\\n  .markdown-body .border-0 {\\n    border: 0 !important;\\n  }\\n\\n  .markdown-body .border-bottom {\\n    border-bottom: 1px solid #e1e4e8 !important;\\n  }\\n\\n  .markdown-body .rounded-1 {\\n    border-radius: 3px !important;\\n  }\\n\\n  .markdown-body .bg-white {\\n    background-color: #fff !important;\\n  }\\n\\n  .markdown-body .bg-gray-light {\\n    background-color: #fafbfc !important;\\n  }\\n\\n  .markdown-body .text-gray-light {\\n    color: #6a737d !important;\\n  }\\n\\n  .markdown-body .mb-0 {\\n    margin-bottom: 0 !important;\\n  }\\n\\n  .markdown-body .my-2 {\\n    margin-top: 8px !important;\\n    margin-bottom: 8px !important;\\n  }\\n\\n  .markdown-body .pl-0 {\\n    padding-left: 0 !important;\\n  }\\n\\n  .markdown-body .py-0 {\\n    padding-top: 0 !important;\\n    padding-bottom: 0 !important;\\n  }\\n\\n  .markdown-body .pl-1 {\\n    padding-left: 4px !important;\\n  }\\n\\n  .markdown-body .pl-2 {\\n    padding-left: 8px !important;\\n  }\\n\\n  .markdown-body .py-2 {\\n    padding-top: 8px !important;\\n    padding-bottom: 8px !important;\\n  }\\n\\n  .markdown-body .pl-3,\\n  .markdown-body .px-3 {\\n    padding-left: 16px !important;\\n  }\\n\\n  .markdown-body .px-3 {\\n    padding-right: 16px !important;\\n  }\\n\\n  .markdown-body .pl-4 {\\n    padding-left: 24px !important;\\n  }\\n\\n  .markdown-body .pl-5 {\\n    padding-left: 32px !important;\\n  }\\n\\n  .markdown-body .pl-6 {\\n    padding-left: 40px !important;\\n  }\\n\\n  .markdown-body .f6 {\\n    font-size: 12px !important;\\n  }\\n\\n  .markdown-body .lh-condensed {\\n    line-height: 1.25 !important;\\n  }\\n\\n  .markdown-body .text-bold {\\n    font-weight: 600 !important;\\n  }\\n\\n  .markdown-body .pl-7 {\\n    padding-left: 48px !important;\\n  }\\n\\n  .markdown-body .pl-8 {\\n    padding-left: 64px !important;\\n  }\\n\\n  .markdown-body .pl-9 {\\n    padding-left: 80px !important;\\n  }\\n\\n  .markdown-body .pl-10 {\\n    padding-left: 96px !important;\\n  }\\n\\n  .markdown-body .pl-11 {\\n    padding-left: 112px !important;\\n  }\\n\\n  .markdown-body .pl-12 {\\n    padding-left: 128px !important;\\n  }\\n\\n  .markdown-body hr {\\n    border-bottom-color: #eee;\\n  }\\n\\n  .markdown-body kbd {\\n    display: inline-block;\\n    padding: 3px 5px;\\n    font: 11px SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;\\n    line-height: 10px;\\n    color: #444d56;\\n    vertical-align: middle;\\n    background-color: var(--hcv-color-markdown-background);\\n    border: 1px solid #d1d5da;\\n    border-radius: 3px;\\n    box-shadow: inset 0 -1px 0 #d1d5da;\\n  }\\n\\n  .markdown-body:after,\\n  .markdown-body:before {\\n    display: table;\\n    content: \"\";\\n  }\\n\\n  .markdown-body:after {\\n    clear: both;\\n  }\\n\\n  .markdown-body > :first-child {\\n    margin-top: 0 !important;\\n  }\\n\\n  .markdown-body > :last-child {\\n    margin-bottom: 0 !important;\\n  }\\n\\n  .markdown-body a:not([href]) {\\n    color: inherit;\\n    text-decoration: none;\\n  }\\n\\n  .markdown-body blockquote,\\n  .markdown-body details,\\n  .markdown-body dl,\\n  .markdown-body ol,\\n  .markdown-body p,\\n  .markdown-body pre,\\n  .markdown-body table,\\n  .markdown-body ul {\\n    margin-top: 0;\\n    margin-bottom: 16px;\\n  }\\n\\n  .markdown-body hr {\\n    height: 0.25em;\\n    padding: 0;\\n    margin: 24px 0;\\n    background-color: #e1e4e8;\\n    border: 0;\\n  }\\n\\n  .markdown-body blockquote {\\n    padding: 0 1em;\\n    color: #6a737d;\\n    border-left: 0.25em solid #dfe2e5;\\n  }\\n\\n  .markdown-body blockquote > :first-child {\\n    margin-top: 0;\\n  }\\n\\n  .markdown-body blockquote > :last-child {\\n    margin-bottom: 0;\\n  }\\n\\n  .markdown-body h1,\\n  .markdown-body h2,\\n  .markdown-body h3,\\n  .markdown-body h4,\\n  .markdown-body h5,\\n  .markdown-body h6 {\\n    margin-top: 24px;\\n    margin-bottom: 16px;\\n    font-weight: 600;\\n    line-height: 1.25;\\n  }\\n\\n  .markdown-body h1 {\\n    font-size: 2em;\\n  }\\n\\n  .markdown-body h1,\\n  .markdown-body h2 {\\n    padding-bottom: 0.3em;\\n    border-bottom: 1px solid #eaecef;\\n  }\\n\\n  .markdown-body h2 {\\n    font-size: 1.5em;\\n  }\\n\\n  .markdown-body h3 {\\n    font-size: 1.25em;\\n  }\\n\\n  .markdown-body h4 {\\n    font-size: 1em;\\n  }\\n\\n  .markdown-body h5 {\\n    font-size: 0.875em;\\n  }\\n\\n  .markdown-body h6 {\\n    font-size: 0.85em;\\n    color: #6a737d;\\n  }\\n\\n  .markdown-body ol,\\n  .markdown-body ul {\\n    padding-left: 2em;\\n  }\\n\\n  .markdown-body ol ol,\\n  .markdown-body ol ul,\\n  .markdown-body ul ol,\\n  .markdown-body ul ul {\\n    margin-top: 0;\\n    margin-bottom: 0;\\n  }\\n\\n  .markdown-body li {\\n    word-wrap: break-all;\\n  }\\n\\n  .markdown-body li > p {\\n    margin-top: 16px;\\n  }\\n\\n  .markdown-body li + li {\\n    margin-top: 0.25em;\\n  }\\n\\n  .markdown-body dl {\\n    padding: 0;\\n  }\\n\\n  .markdown-body dl dt {\\n    padding: 0;\\n    margin-top: 16px;\\n    font-size: 1em;\\n    font-style: italic;\\n    font-weight: 600;\\n  }\\n\\n  .markdown-body dl dd {\\n    padding: 0 16px;\\n    margin-bottom: 16px;\\n  }\\n\\n  .markdown-body table {\\n    display: block;\\n    width: 100%;\\n    overflow: auto;\\n  }\\n\\n  .markdown-body table th {\\n    font-weight: 600;\\n  }\\n\\n  .markdown-body table td,\\n  .markdown-body table th {\\n    padding: 6px 13px;\\n    border: 1px solid #dfe2e5;\\n  }\\n\\n  .markdown-body table th {\\n    background-color: var(--primary-background-color, #fff);\\n  }\\n\\n  .markdown-body table tr {\\n    background-color: hsla(var(--primary-background-color, #fff), 0.1);\\n    border-top: 1px solid #c6cbd1;\\n  }\\n\\n  .markdown-body table tr:nth-child(2n) {\\n    background-color: var(--primary-background-color, #fff);\\n  }\\n\\n  .markdown-body img {\\n    max-width: 100%;\\n    box-sizing: initial;\\n    border-radius: var(--ha-card-border-radius);\\n  }\\n\\n  .markdown-body img[align=\"right\"] {\\n    padding-left: 20px;\\n  }\\n\\n  .markdown-body img[align=\"left\"] {\\n    padding-right: 20px;\\n  }\\n\\n  .markdown-body code {\\n    padding: 0.2em 0.4em;\\n    margin: 0;\\n    font-size: 85%;\\n    background-color: var(--hcv-color-markdown-background);\\n    border-radius: 3px;\\n  }\\n\\n  .markdown-body pre {\\n    word-wrap: normal;\\n  }\\n\\n  .markdown-body pre > code {\\n    padding: 0;\\n    margin: 0;\\n    font-size: 100%;\\n    word-break: normal;\\n    white-space: pre;\\n    background: transparent;\\n    border: 0;\\n  }\\n\\n  .markdown-body .highlight {\\n    margin-bottom: 16px;\\n  }\\n\\n  .markdown-body .highlight pre {\\n    margin-bottom: 0;\\n    word-break: normal;\\n  }\\n\\n  .markdown-body .highlight pre,\\n  .markdown-body pre {\\n    padding: 16px;\\n    overflow: auto;\\n    font-size: 85%;\\n    line-height: 1.45;\\n    background-color: var(--hcv-color-markdown-background);\\n    border-radius: var(--ha-card-border-radius, 3px);\\n  }\\n\\n  .markdown-body pre code {\\n    display: inline;\\n    max-width: auto;\\n    padding: 0;\\n    margin: 0;\\n    overflow: visible;\\n    line-height: inherit;\\n    word-wrap: normal;\\n    background-color: initial;\\n    border: 0;\\n  }\\n\\n  .markdown-body .commit-tease-sha {\\n    display: inline-block;\\n    font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;\\n    font-size: 90%;\\n    color: #444d56;\\n  }\\n\\n  .markdown-body .full-commit .btn-outline:not(:disabled):hover {\\n    color: #005cc5;\\n    border-color: #005cc5;\\n  }\\n\\n  .markdown-body .blob-wrapper {\\n    overflow-x: auto;\\n    overflow-y: hidden;\\n  }\\n\\n  .markdown-body .blob-wrapper-embedded {\\n    max-height: 240px;\\n    overflow-y: auto;\\n  }\\n\\n  .markdown-body .blob-num {\\n    width: 1%;\\n    min-width: 50px;\\n    padding-right: 10px;\\n    padding-left: 10px;\\n    font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;\\n    font-size: 12px;\\n    line-height: 20px;\\n    color: rgba(27, 31, 35, 0.3);\\n    text-align: right;\\n    white-space: nowrap;\\n    vertical-align: top;\\n    cursor: pointer;\\n    -webkit-user-select: none;\\n    -moz-user-select: none;\\n    -ms-user-select: none;\\n    user-select: none;\\n  }\\n\\n  .markdown-body .blob-num:hover {\\n    color: rgba(27, 31, 35, 0.6);\\n  }\\n\\n  .markdown-body .blob-num:before {\\n    content: attr(data-line-number);\\n  }\\n\\n  .markdown-body .blob-code {\\n    position: relative;\\n    padding-right: 10px;\\n    padding-left: 10px;\\n    line-height: 20px;\\n    vertical-align: top;\\n  }\\n\\n  .markdown-body .blob-code-inner {\\n    overflow: visible;\\n    font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;\\n    font-size: 12px;\\n    color: #24292e;\\n    word-wrap: normal;\\n    white-space: pre;\\n  }\\n\\n  .markdown-body .pl-token.active,\\n  .markdown-body .pl-token:hover {\\n    cursor: pointer;\\n    background: #ffea7f;\\n  }\\n\\n  .markdown-body :checked + .radio-label {\\n    position: relative;\\n    z-index: 1;\\n    border-color: var(--link-text-color, var(--accent-color));\\n  }\\n\\n  .markdown-body\\n    .select-menu-item\\n    input[type=\"radio\"]:not(:checked)\\n    + .octicon-check,\\n  .markdown-body\\n    .select-menu-item\\n    input[type=\"radio\"]:not(:checked)\\n    + .octicon-circle-slash {\\n    visibility: hidden;\\n  }\\n\\n  .markdown-body .pl-7 {\\n    padding-left: 48px !important;\\n  }\\n\\n  .markdown-body .pl-8 {\\n    padding-left: 64px !important;\\n  }\\n\\n  .markdown-body .pl-9 {\\n    padding-left: 80px !important;\\n  }\\n\\n  .markdown-body .pl-10 {\\n    padding-left: 96px !important;\\n  }\\n\\n  .markdown-body .pl-11 {\\n    padding-left: 112px !important;\\n  }\\n\\n  .markdown-body .pl-12 {\\n    padding-left: 128px !important;\\n  }\\n\\n  .markdown-body .tab-size[data-tab-size=\"1\"] {\\n    -moz-tab-size: 1;\\n    tab-size: 1;\\n  }\\n\\n  .markdown-body .tab-size[data-tab-size=\"2\"] {\\n    -moz-tab-size: 2;\\n    tab-size: 2;\\n  }\\n\\n  .markdown-body .tab-size[data-tab-size=\"3\"] {\\n    -moz-tab-size: 3;\\n    tab-size: 3;\\n  }\\n\\n  .markdown-body .tab-size[data-tab-size=\"4\"] {\\n    -moz-tab-size: 4;\\n    tab-size: 4;\\n  }\\n\\n  .markdown-body .tab-size[data-tab-size=\"5\"] {\\n    -moz-tab-size: 5;\\n    tab-size: 5;\\n  }\\n\\n  .markdown-body .tab-size[data-tab-size=\"6\"] {\\n    -moz-tab-size: 6;\\n    tab-size: 6;\\n  }\\n\\n  .markdown-body .tab-size[data-tab-size=\"7\"] {\\n    -moz-tab-size: 7;\\n    tab-size: 7;\\n  }\\n\\n  .markdown-body .tab-size[data-tab-size=\"8\"] {\\n    -moz-tab-size: 8;\\n    tab-size: 8;\\n  }\\n\\n  .markdown-body .tab-size[data-tab-size=\"9\"] {\\n    -moz-tab-size: 9;\\n    tab-size: 9;\\n  }\\n\\n  .markdown-body .tab-size[data-tab-size=\"10\"] {\\n    -moz-tab-size: 10;\\n    tab-size: 10;\\n  }\\n\\n  .markdown-body .tab-size[data-tab-size=\"11\"] {\\n    -moz-tab-size: 11;\\n    tab-size: 11;\\n  }\\n\\n  .markdown-body .tab-size[data-tab-size=\"12\"] {\\n    -moz-tab-size: 12;\\n    tab-size: 12;\\n  }\\n\\n  .markdown-body .task-list-item {\\n    list-style-type: none;\\n  }\\n\\n  .markdown-body .task-list-item + .task-list-item {\\n    margin-top: 3px;\\n  }\\n\\n  .markdown-body .task-list-item input {\\n    margin: 0 0.2em 0.25em -1.6em;\\n    vertical-align: middle;\\n  }\\n',o`${r}${t} `}}export{Gn as m};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.a0bc44e3.js",
    "content": "import{c as a,u as n}from\"./c.743a15a1.js\";import{ef as t}from\"./main-a0d7432d.js\";import{l as r}from\"./c.b054aba2.js\";var e=a((function(a,n){Object.defineProperty(n,\"__esModule\",{value:!0}),n.parseUnicodeLocaleId=n.parseUnicodeLanguageId=n.isUnicodeVariantSubtag=n.isUnicodeScriptSubtag=n.isUnicodeRegionSubtag=n.isStructurallyValidLanguageTag=n.isUnicodeLanguageSubtag=n.SEPARATOR=void 0;var r=/^[a-z0-9]{1,8}$/i,e=/^[a-z0-9]{2,8}$/i,L=/^[a-z0-9]{3,8}$/i,i=/^[a-z0-9][a-z]$/i,u=/^[a-z0-9]{3,8}$/i,Z=/^[a-z]{4}$/i,d=/^[0-9a-svwyz]$/i,o=/^([a-z]{2}|[0-9]{3})$/i,s=/^([a-z0-9]{5,8}|[0-9][a-z0-9]{3})$/i,l=/^([a-z]{2,3}|[a-z]{5,8})$/i,g=/^[a-z][0-9]$/i;function b(a){return l.test(a)}function c(a){return o.test(a)}function m(a){return Z.test(a)}function k(a){return s.test(a)}function h(a){\"string\"==typeof a&&(a=a.split(n.SEPARATOR));var t,r,e=a.shift();if(!e)throw new RangeError(\"Missing unicode_language_subtag\");if(\"root\"===e)return{lang:\"root\",variants:[]};if(!b(e))throw new RangeError(\"Malformed unicode_language_subtag\");a.length&&m(a[0])&&(t=a.shift()),a.length&&c(a[0])&&(r=a.shift());for(var L={};a.length&&k(a[0]);){var i=a.shift();if(i in L)throw new RangeError('Duplicate variant \"'.concat(i,'\"'));L[i]=1}return{lang:e,script:t,region:r,variants:Object.keys(L)}}function p(a){for(var n,t=[];a.length&&(n=f(a));)t.push(n);if(t.length)return{type:\"u\",keywords:t,attributes:[]};for(var r=[];a.length&&L.test(a[0]);)r.push(a.shift());for(;a.length&&(n=f(a));)t.push(n);if(t.length||r.length)return{type:\"u\",attributes:r,keywords:t};throw new RangeError(\"Malformed unicode_extension\")}function f(a){var t;if(i.test(a[0])){t=a.shift();for(var r=[];a.length&&u.test(a[0]);)r.push(a.shift());var e=\"\";return r.length&&(e=r.join(n.SEPARATOR)),[t,e]}}function y(a){var t;try{t=h(a)}catch(a){}for(var r=[];a.length&&g.test(a[0]);){for(var e=a.shift(),i=[];a.length&&L.test(a[0]);)i.push(a.shift());if(!i.length)throw new RangeError('Missing tvalue for tkey \"'.concat(e,'\"'));r.push([e,i.join(n.SEPARATOR)])}if(r.length)return{type:\"t\",fields:r,lang:t};throw new RangeError(\"Malformed transformed_extension\")}function A(a){for(var t=[];a.length&&r.test(a[0]);)t.push(a.shift());if(t.length)return{type:\"x\",value:t.join(n.SEPARATOR)};throw new RangeError(\"Malformed private_use_extension\")}function v(a){for(var t=[];a.length&&e.test(a[0]);)t.push(a.shift());return t.length?t.join(n.SEPARATOR):\"\"}n.SEPARATOR=\"-\",n.isUnicodeLanguageSubtag=b,n.isStructurallyValidLanguageTag=function(a){try{h(a.split(n.SEPARATOR))}catch(a){return!1}return!0},n.isUnicodeRegionSubtag=c,n.isUnicodeScriptSubtag=m,n.isUnicodeVariantSubtag=k,n.parseUnicodeLanguageId=h,n.parseUnicodeLocaleId=function(a){var r=a.split(n.SEPARATOR),e=h(r);return(0,t.__assign)({lang:e},function(a){if(!a.length)return{extensions:[]};var n,t,r,e=[],L={};do{var i=a.shift();switch(i){case\"u\":case\"U\":if(n)throw new RangeError(\"There can only be 1 -u- extension\");n=p(a),e.push(n);break;case\"t\":case\"T\":if(t)throw new RangeError(\"There can only be 1 -t- extension\");t=y(a),e.push(t);break;case\"x\":case\"X\":if(r)throw new RangeError(\"There can only be 1 -x- extension\");r=A(a),e.push(r);break;default:if(!d.test(i))throw new RangeError(\"Malformed extension type\");if(i in L)throw new RangeError(\"There can only be 1 -\".concat(i,\"- extension\"));var u={type:i,value:v(a)};L[u.type]=u,e.push(u)}}while(a.length);return{extensions:e}}(r))}}));n(e),e.parseUnicodeLocaleId,e.parseUnicodeLanguageId,e.isUnicodeVariantSubtag,e.isUnicodeScriptSubtag,e.isUnicodeRegionSubtag,e.isStructurallyValidLanguageTag,e.isUnicodeLanguageSubtag,e.SEPARATOR;var L=a((function(a,n){function r(a){return a?(0,t.__spreadArray)([a.lang,a.script,a.region],a.variants||[],!0).filter(Boolean).join(\"-\"):\"\"}Object.defineProperty(n,\"__esModule\",{value:!0}),n.emitUnicodeLocaleId=n.emitUnicodeLanguageId=void 0,n.emitUnicodeLanguageId=r,n.emitUnicodeLocaleId=function(a){for(var n=a.lang,e=a.extensions,L=[r(n)],i=0,u=e;i<u.length;i++){var Z=u[i];switch(L.push(Z.type),Z.type){case\"u\":L.push.apply(L,(0,t.__spreadArray)((0,t.__spreadArray)([],Z.attributes,!1),Z.keywords.reduce((function(a,n){return a.concat(n)}),[]),!1));break;case\"t\":L.push.apply(L,(0,t.__spreadArray)([r(Z.lang)],Z.fields.reduce((function(a,n){return a.concat(n)}),[]),!1));break;default:L.push(Z.value)}}return L.filter(Boolean).join(\"-\")}}));n(L),L.emitUnicodeLocaleId,L.emitUnicodeLanguageId;var i=a((function(a,n){Object.defineProperty(n,\"__esModule\",{value:!0}),n.variantAlias=n.scriptAlias=n.territoryAlias=n.languageAlias=void 0,n.languageAlias={\"aa-saaho\":\"ssy\",aam:\"aas\",aar:\"aa\",abk:\"ab\",adp:\"dz\",afr:\"af\",agp:\"apf\",ais:\"ami\",aju:\"jrb\",aka:\"ak\",alb:\"sq\",als:\"sq\",amh:\"am\",ara:\"ar\",arb:\"ar\",arg:\"an\",arm:\"hy\",\"art-lojban\":\"jbo\",asd:\"snz\",asm:\"as\",aue:\"ktz\",ava:\"av\",ave:\"ae\",aym:\"ay\",ayr:\"ay\",ayx:\"nun\",aze:\"az\",azj:\"az\",bak:\"ba\",bam:\"bm\",baq:\"eu\",baz:\"nvo\",bcc:\"bal\",bcl:\"bik\",bel:\"be\",ben:\"bn\",bgm:\"bcg\",bh:\"bho\",bhk:\"fbl\",bic:\"bir\",bih:\"bho\",bis:\"bi\",bjd:\"drl\",bjq:\"bzc\",bkb:\"ebk\",blg:\"iba\",bod:\"bo\",bos:\"bs\",bre:\"br\",btb:\"beb\",bul:\"bg\",bur:\"my\",bxk:\"luy\",bxr:\"bua\",cat:\"ca\",ccq:\"rki\",\"cel-gaulish\":\"xtg\",ces:\"cs\",cha:\"ch\",che:\"ce\",chi:\"zh\",chu:\"cu\",chv:\"cv\",cjr:\"mom\",cka:\"cmr\",cld:\"syr\",cmk:\"xch\",cmn:\"zh\",cnr:\"sr-ME\",cor:\"kw\",cos:\"co\",coy:\"pij\",cqu:\"quh\",cre:\"cr\",cwd:\"cr\",cym:\"cy\",cze:\"cs\",daf:\"dnj\",dan:\"da\",dap:\"njz\",deu:\"de\",dgo:\"doi\",dhd:\"mwr\",dik:\"din\",diq:\"zza\",dit:\"dif\",div:\"dv\",djl:\"dze\",dkl:\"aqd\",drh:\"mn\",drr:\"kzk\",drw:\"fa-AF\",dud:\"uth\",duj:\"dwu\",dut:\"nl\",dwl:\"dbt\",dzo:\"dz\",ekk:\"et\",ell:\"el\",elp:\"amq\",emk:\"man\",\"en-GB-oed\":\"en-GB-oxendict\",eng:\"en\",epo:\"eo\",esk:\"ik\",est:\"et\",eus:\"eu\",ewe:\"ee\",fao:\"fo\",fas:\"fa\",fat:\"ak\",fij:\"fj\",fin:\"fi\",fra:\"fr\",fre:\"fr\",fry:\"fy\",fuc:\"ff\",ful:\"ff\",gav:\"dev\",gaz:\"om\",gbc:\"wny\",gbo:\"grb\",geo:\"ka\",ger:\"de\",gfx:\"vaj\",ggn:\"gvr\",ggo:\"esg\",ggr:\"gtu\",gio:\"aou\",gla:\"gd\",gle:\"ga\",glg:\"gl\",gli:\"kzk\",glv:\"gv\",gno:\"gon\",gre:\"el\",grn:\"gn\",gti:\"nyc\",gug:\"gn\",guj:\"gu\",guv:\"duz\",gya:\"gba\",hat:\"ht\",hau:\"ha\",hbs:\"sr-Latn\",hdn:\"hai\",hea:\"hmn\",heb:\"he\",her:\"hz\",him:\"srx\",hin:\"hi\",hmo:\"ho\",hrr:\"jal\",hrv:\"hr\",hun:\"hu\",\"hy-arevmda\":\"hyw\",hye:\"hy\",\"i-ami\":\"ami\",\"i-bnn\":\"bnn\",\"i-default\":\"en-x-i-default\",\"i-enochian\":\"und-x-i-enochian\",\"i-hak\":\"hak\",\"i-klingon\":\"tlh\",\"i-lux\":\"lb\",\"i-mingo\":\"see-x-i-mingo\",\"i-navajo\":\"nv\",\"i-pwn\":\"pwn\",\"i-tao\":\"tao\",\"i-tay\":\"tay\",\"i-tsu\":\"tsu\",ibi:\"opa\",ibo:\"ig\",ice:\"is\",ido:\"io\",iii:\"ii\",ike:\"iu\",iku:\"iu\",ile:\"ie\",ill:\"ilm\",ilw:\"gal\",in:\"id\",ina:\"ia\",ind:\"id\",ipk:\"ik\",isl:\"is\",ita:\"it\",iw:\"he\",izi:\"eza\",jar:\"jgk\",jav:\"jv\",jeg:\"oyb\",ji:\"yi\",jpn:\"ja\",jw:\"jv\",kal:\"kl\",kan:\"kn\",kas:\"ks\",kat:\"ka\",kau:\"kr\",kaz:\"kk\",kdv:\"zkd\",kgc:\"tdf\",kgd:\"ncq\",kgh:\"kml\",khk:\"mn\",khm:\"km\",kik:\"ki\",kin:\"rw\",kir:\"ky\",kmr:\"ku\",knc:\"kr\",kng:\"kg\",knn:\"kok\",koj:\"kwv\",kom:\"kv\",kon:\"kg\",kor:\"ko\",kpp:\"jkm\",kpv:\"kv\",krm:\"bmf\",ktr:\"dtp\",kua:\"kj\",kur:\"ku\",kvs:\"gdj\",kwq:\"yam\",kxe:\"tvd\",kxl:\"kru\",kzh:\"dgl\",kzj:\"dtp\",kzt:\"dtp\",lao:\"lo\",lat:\"la\",lav:\"lv\",lbk:\"bnc\",leg:\"enl\",lii:\"raq\",lim:\"li\",lin:\"ln\",lit:\"lt\",llo:\"ngt\",lmm:\"rmx\",ltz:\"lb\",lub:\"lu\",lug:\"lg\",lvs:\"lv\",mac:\"mk\",mah:\"mh\",mal:\"ml\",mao:\"mi\",mar:\"mr\",may:\"ms\",meg:\"cir\",mgx:\"jbk\",mhr:\"chm\",mkd:\"mk\",mlg:\"mg\",mlt:\"mt\",mnk:\"man\",mnt:\"wnn\",mo:\"ro\",mof:\"xnt\",mol:\"ro\",mon:\"mn\",mri:\"mi\",msa:\"ms\",mst:\"mry\",mup:\"raj\",mwd:\"dmw\",mwj:\"vaj\",mya:\"my\",myd:\"aog\",myt:\"mry\",nad:\"xny\",nau:\"na\",nav:\"nv\",nbf:\"nru\",nbl:\"nr\",nbx:\"ekc\",ncp:\"kdz\",nde:\"nd\",ndo:\"ng\",nep:\"ne\",nld:\"nl\",nln:\"azd\",nlr:\"nrk\",nno:\"nn\",nns:\"nbr\",nnx:\"ngv\",\"no-bok\":\"nb\",\"no-bokmal\":\"nb\",\"no-nyn\":\"nn\",\"no-nynorsk\":\"nn\",nob:\"nb\",noo:\"dtd\",nor:\"no\",npi:\"ne\",nts:\"pij\",nxu:\"bpp\",nya:\"ny\",oci:\"oc\",ojg:\"oj\",oji:\"oj\",ori:\"or\",orm:\"om\",ory:\"or\",oss:\"os\",oun:\"vaj\",pan:\"pa\",pat:\"kxr\",pbu:\"ps\",pcr:\"adx\",per:\"fa\",pes:\"fa\",pli:\"pi\",plt:\"mg\",pmc:\"huw\",pmu:\"phr\",pnb:\"lah\",pol:\"pl\",por:\"pt\",ppa:\"bfy\",ppr:\"lcq\",prs:\"fa-AF\",pry:\"prt\",pus:\"ps\",puz:\"pub\",que:\"qu\",quz:\"qu\",rmr:\"emx\",rmy:\"rom\",roh:\"rm\",ron:\"ro\",rum:\"ro\",run:\"rn\",rus:\"ru\",sag:\"sg\",san:\"sa\",sap:\"aqt\",sca:\"hle\",scc:\"sr\",scr:\"hr\",sgl:\"isk\",\"sgn-BE-FR\":\"sfb\",\"sgn-BE-NL\":\"vgt\",\"sgn-BR\":\"bzs\",\"sgn-CH-DE\":\"sgg\",\"sgn-CO\":\"csn\",\"sgn-DE\":\"gsg\",\"sgn-DK\":\"dsl\",\"sgn-ES\":\"ssp\",\"sgn-FR\":\"fsl\",\"sgn-GB\":\"bfi\",\"sgn-GR\":\"gss\",\"sgn-IE\":\"isg\",\"sgn-IT\":\"ise\",\"sgn-JP\":\"jsl\",\"sgn-MX\":\"mfs\",\"sgn-NI\":\"ncs\",\"sgn-NL\":\"dse\",\"sgn-NO\":\"nsi\",\"sgn-PT\":\"psr\",\"sgn-SE\":\"swl\",\"sgn-US\":\"ase\",\"sgn-ZA\":\"sfs\",sh:\"sr-Latn\",sin:\"si\",skk:\"oyb\",slk:\"sk\",slo:\"sk\",slv:\"sl\",sme:\"se\",smo:\"sm\",sna:\"sn\",snd:\"sd\",som:\"so\",sot:\"st\",spa:\"es\",spy:\"kln\",sqi:\"sq\",src:\"sc\",srd:\"sc\",srp:\"sr\",ssw:\"ss\",sul:\"sgd\",sum:\"ulw\",sun:\"su\",swa:\"sw\",swc:\"sw-CD\",swe:\"sv\",swh:\"sw\",tah:\"ty\",tam:\"ta\",tat:\"tt\",tdu:\"dtp\",tel:\"te\",tgg:\"bjp\",tgk:\"tg\",tgl:\"fil\",tha:\"th\",thc:\"tpo\",thw:\"ola\",thx:\"oyb\",tib:\"bo\",tid:\"itd\",tie:\"ras\",tir:\"ti\",tkk:\"twm\",tl:\"fil\",tlw:\"weo\",tmp:\"tyj\",tne:\"kak\",tnf:\"fa-AF\",ton:\"to\",tsf:\"taj\",tsn:\"tn\",tso:\"ts\",ttq:\"tmh\",tuk:\"tk\",tur:\"tr\",tw:\"ak\",twi:\"ak\",uig:\"ug\",ukr:\"uk\",umu:\"del\",\"und-aaland\":\"und-AX\",\"und-arevela\":\"und\",\"und-arevmda\":\"und\",\"und-bokmal\":\"und\",\"und-hakka\":\"und\",\"und-hepburn-heploc\":\"und-alalc97\",\"und-lojban\":\"und\",\"und-nynorsk\":\"und\",\"und-saaho\":\"und\",\"und-xiang\":\"und\",unp:\"wro\",uok:\"ema\",urd:\"ur\",uzb:\"uz\",uzn:\"uz\",ven:\"ve\",vie:\"vi\",vol:\"vo\",wel:\"cy\",wgw:\"wgb\",wit:\"nol\",wiw:\"nwo\",wln:\"wa\",wol:\"wo\",xba:\"cax\",xho:\"xh\",xia:\"acn\",xkh:\"waw\",xpe:\"kpe\",xrq:\"dmw\",xsj:\"suj\",xsl:\"den\",ybd:\"rki\",ydd:\"yi\",yen:\"ynq\",yid:\"yi\",yiy:\"yrm\",yma:\"lrr\",ymt:\"mtm\",yor:\"yo\",yos:\"zom\",yuu:\"yug\",zai:\"zap\",\"zh-cmn\":\"zh\",\"zh-cmn-Hans\":\"zh-Hans\",\"zh-cmn-Hant\":\"zh-Hant\",\"zh-gan\":\"gan\",\"zh-guoyu\":\"zh\",\"zh-hakka\":\"hak\",\"zh-min\":\"nan-x-zh-min\",\"zh-min-nan\":\"nan\",\"zh-wuu\":\"wuu\",\"zh-xiang\":\"hsn\",\"zh-yue\":\"yue\",zha:\"za\",zho:\"zh\",zir:\"scv\",zsm:\"ms\",zul:\"zu\",zyb:\"za\"},n.territoryAlias={100:\"BG\",104:\"MM\",108:\"BI\",112:\"BY\",116:\"KH\",120:\"CM\",124:\"CA\",132:\"CV\",136:\"KY\",140:\"CF\",144:\"LK\",148:\"TD\",152:\"CL\",156:\"CN\",158:\"TW\",162:\"CX\",166:\"CC\",170:\"CO\",172:\"RU AM AZ BY GE KG KZ MD TJ TM UA UZ\",174:\"KM\",175:\"YT\",178:\"CG\",180:\"CD\",184:\"CK\",188:\"CR\",191:\"HR\",192:\"CU\",196:\"CY\",200:\"CZ SK\",203:\"CZ\",204:\"BJ\",208:\"DK\",212:\"DM\",214:\"DO\",218:\"EC\",222:\"SV\",226:\"GQ\",230:\"ET\",231:\"ET\",232:\"ER\",233:\"EE\",234:\"FO\",238:\"FK\",239:\"GS\",242:\"FJ\",246:\"FI\",248:\"AX\",249:\"FR\",250:\"FR\",254:\"GF\",258:\"PF\",260:\"TF\",262:\"DJ\",266:\"GA\",268:\"GE\",270:\"GM\",275:\"PS\",276:\"DE\",278:\"DE\",280:\"DE\",288:\"GH\",292:\"GI\",296:\"KI\",300:\"GR\",304:\"GL\",308:\"GD\",312:\"GP\",316:\"GU\",320:\"GT\",324:\"GN\",328:\"GY\",332:\"HT\",334:\"HM\",336:\"VA\",340:\"HN\",344:\"HK\",348:\"HU\",352:\"IS\",356:\"IN\",360:\"ID\",364:\"IR\",368:\"IQ\",372:\"IE\",376:\"IL\",380:\"IT\",384:\"CI\",388:\"JM\",392:\"JP\",398:\"KZ\",400:\"JO\",404:\"KE\",408:\"KP\",410:\"KR\",414:\"KW\",417:\"KG\",418:\"LA\",422:\"LB\",426:\"LS\",428:\"LV\",430:\"LR\",434:\"LY\",438:\"LI\",440:\"LT\",442:\"LU\",446:\"MO\",450:\"MG\",454:\"MW\",458:\"MY\",462:\"MV\",466:\"ML\",470:\"MT\",474:\"MQ\",478:\"MR\",480:\"MU\",484:\"MX\",492:\"MC\",496:\"MN\",498:\"MD\",499:\"ME\",500:\"MS\",504:\"MA\",508:\"MZ\",512:\"OM\",516:\"NA\",520:\"NR\",524:\"NP\",528:\"NL\",530:\"CW SX BQ\",531:\"CW\",532:\"CW SX BQ\",533:\"AW\",534:\"SX\",535:\"BQ\",536:\"SA IQ\",540:\"NC\",548:\"VU\",554:\"NZ\",558:\"NI\",562:\"NE\",566:\"NG\",570:\"NU\",574:\"NF\",578:\"NO\",580:\"MP\",581:\"UM\",582:\"FM MH MP PW\",583:\"FM\",584:\"MH\",585:\"PW\",586:\"PK\",591:\"PA\",598:\"PG\",600:\"PY\",604:\"PE\",608:\"PH\",612:\"PN\",616:\"PL\",620:\"PT\",624:\"GW\",626:\"TL\",630:\"PR\",634:\"QA\",638:\"RE\",642:\"RO\",643:\"RU\",646:\"RW\",652:\"BL\",654:\"SH\",659:\"KN\",660:\"AI\",662:\"LC\",663:\"MF\",666:\"PM\",670:\"VC\",674:\"SM\",678:\"ST\",682:\"SA\",686:\"SN\",688:\"RS\",690:\"SC\",694:\"SL\",702:\"SG\",703:\"SK\",704:\"VN\",705:\"SI\",706:\"SO\",710:\"ZA\",716:\"ZW\",720:\"YE\",724:\"ES\",728:\"SS\",729:\"SD\",732:\"EH\",736:\"SD\",740:\"SR\",744:\"SJ\",748:\"SZ\",752:\"SE\",756:\"CH\",760:\"SY\",762:\"TJ\",764:\"TH\",768:\"TG\",772:\"TK\",776:\"TO\",780:\"TT\",784:\"AE\",788:\"TN\",792:\"TR\",795:\"TM\",796:\"TC\",798:\"TV\",800:\"UG\",804:\"UA\",807:\"MK\",810:\"RU AM AZ BY EE GE KZ KG LV LT MD TJ TM UA UZ\",818:\"EG\",826:\"GB\",830:\"JE GG\",831:\"GG\",832:\"JE\",833:\"IM\",834:\"TZ\",840:\"US\",850:\"VI\",854:\"BF\",858:\"UY\",860:\"UZ\",862:\"VE\",876:\"WF\",882:\"WS\",886:\"YE\",887:\"YE\",890:\"RS ME SI HR MK BA\",891:\"RS ME\",894:\"ZM\",958:\"AA\",959:\"QM\",960:\"QN\",962:\"QP\",963:\"QQ\",964:\"QR\",965:\"QS\",966:\"QT\",967:\"EU\",968:\"QV\",969:\"QW\",970:\"QX\",971:\"QY\",972:\"QZ\",973:\"XA\",974:\"XB\",975:\"XC\",976:\"XD\",977:\"XE\",978:\"XF\",979:\"XG\",980:\"XH\",981:\"XI\",982:\"XJ\",983:\"XK\",984:\"XL\",985:\"XM\",986:\"XN\",987:\"XO\",988:\"XP\",989:\"XQ\",990:\"XR\",991:\"XS\",992:\"XT\",993:\"XU\",994:\"XV\",995:\"XW\",996:\"XX\",997:\"XY\",998:\"XZ\",999:\"ZZ\",\"004\":\"AF\",\"008\":\"AL\",\"010\":\"AQ\",\"012\":\"DZ\",\"016\":\"AS\",\"020\":\"AD\",\"024\":\"AO\",\"028\":\"AG\",\"031\":\"AZ\",\"032\":\"AR\",\"036\":\"AU\",\"040\":\"AT\",\"044\":\"BS\",\"048\":\"BH\",\"050\":\"BD\",\"051\":\"AM\",\"052\":\"BB\",\"056\":\"BE\",\"060\":\"BM\",\"062\":\"034 143\",\"064\":\"BT\",\"068\":\"BO\",\"070\":\"BA\",\"072\":\"BW\",\"074\":\"BV\",\"076\":\"BR\",\"084\":\"BZ\",\"086\":\"IO\",\"090\":\"SB\",\"092\":\"VG\",\"096\":\"BN\",AAA:\"AA\",ABW:\"AW\",AFG:\"AF\",AGO:\"AO\",AIA:\"AI\",ALA:\"AX\",ALB:\"AL\",AN:\"CW SX BQ\",AND:\"AD\",ANT:\"CW SX BQ\",ARE:\"AE\",ARG:\"AR\",ARM:\"AM\",ASC:\"AC\",ASM:\"AS\",ATA:\"AQ\",ATF:\"TF\",ATG:\"AG\",AUS:\"AU\",AUT:\"AT\",AZE:\"AZ\",BDI:\"BI\",BEL:\"BE\",BEN:\"BJ\",BES:\"BQ\",BFA:\"BF\",BGD:\"BD\",BGR:\"BG\",BHR:\"BH\",BHS:\"BS\",BIH:\"BA\",BLM:\"BL\",BLR:\"BY\",BLZ:\"BZ\",BMU:\"BM\",BOL:\"BO\",BRA:\"BR\",BRB:\"BB\",BRN:\"BN\",BTN:\"BT\",BU:\"MM\",BUR:\"MM\",BVT:\"BV\",BWA:\"BW\",CAF:\"CF\",CAN:\"CA\",CCK:\"CC\",CHE:\"CH\",CHL:\"CL\",CHN:\"CN\",CIV:\"CI\",CMR:\"CM\",COD:\"CD\",COG:\"CG\",COK:\"CK\",COL:\"CO\",COM:\"KM\",CPT:\"CP\",CPV:\"CV\",CRI:\"CR\",CS:\"RS ME\",CT:\"KI\",CUB:\"CU\",CUW:\"CW\",CXR:\"CX\",CYM:\"KY\",CYP:\"CY\",CZE:\"CZ\",DD:\"DE\",DDR:\"DE\",DEU:\"DE\",DGA:\"DG\",DJI:\"DJ\",DMA:\"DM\",DNK:\"DK\",DOM:\"DO\",DY:\"BJ\",DZA:\"DZ\",ECU:\"EC\",EGY:\"EG\",ERI:\"ER\",ESH:\"EH\",ESP:\"ES\",EST:\"EE\",ETH:\"ET\",FIN:\"FI\",FJI:\"FJ\",FLK:\"FK\",FQ:\"AQ TF\",FRA:\"FR\",FRO:\"FO\",FSM:\"FM\",FX:\"FR\",FXX:\"FR\",GAB:\"GA\",GBR:\"GB\",GEO:\"GE\",GGY:\"GG\",GHA:\"GH\",GIB:\"GI\",GIN:\"GN\",GLP:\"GP\",GMB:\"GM\",GNB:\"GW\",GNQ:\"GQ\",GRC:\"GR\",GRD:\"GD\",GRL:\"GL\",GTM:\"GT\",GUF:\"GF\",GUM:\"GU\",GUY:\"GY\",HKG:\"HK\",HMD:\"HM\",HND:\"HN\",HRV:\"HR\",HTI:\"HT\",HUN:\"HU\",HV:\"BF\",IDN:\"ID\",IMN:\"IM\",IND:\"IN\",IOT:\"IO\",IRL:\"IE\",IRN:\"IR\",IRQ:\"IQ\",ISL:\"IS\",ISR:\"IL\",ITA:\"IT\",JAM:\"JM\",JEY:\"JE\",JOR:\"JO\",JPN:\"JP\",JT:\"UM\",KAZ:\"KZ\",KEN:\"KE\",KGZ:\"KG\",KHM:\"KH\",KIR:\"KI\",KNA:\"KN\",KOR:\"KR\",KWT:\"KW\",LAO:\"LA\",LBN:\"LB\",LBR:\"LR\",LBY:\"LY\",LCA:\"LC\",LIE:\"LI\",LKA:\"LK\",LSO:\"LS\",LTU:\"LT\",LUX:\"LU\",LVA:\"LV\",MAC:\"MO\",MAF:\"MF\",MAR:\"MA\",MCO:\"MC\",MDA:\"MD\",MDG:\"MG\",MDV:\"MV\",MEX:\"MX\",MHL:\"MH\",MI:\"UM\",MKD:\"MK\",MLI:\"ML\",MLT:\"MT\",MMR:\"MM\",MNE:\"ME\",MNG:\"MN\",MNP:\"MP\",MOZ:\"MZ\",MRT:\"MR\",MSR:\"MS\",MTQ:\"MQ\",MUS:\"MU\",MWI:\"MW\",MYS:\"MY\",MYT:\"YT\",NAM:\"NA\",NCL:\"NC\",NER:\"NE\",NFK:\"NF\",NGA:\"NG\",NH:\"VU\",NIC:\"NI\",NIU:\"NU\",NLD:\"NL\",NOR:\"NO\",NPL:\"NP\",NQ:\"AQ\",NRU:\"NR\",NT:\"SA IQ\",NTZ:\"SA IQ\",NZL:\"NZ\",OMN:\"OM\",PAK:\"PK\",PAN:\"PA\",PC:\"FM MH MP PW\",PCN:\"PN\",PER:\"PE\",PHL:\"PH\",PLW:\"PW\",PNG:\"PG\",POL:\"PL\",PRI:\"PR\",PRK:\"KP\",PRT:\"PT\",PRY:\"PY\",PSE:\"PS\",PU:\"UM\",PYF:\"PF\",PZ:\"PA\",QAT:\"QA\",QMM:\"QM\",QNN:\"QN\",QPP:\"QP\",QQQ:\"QQ\",QRR:\"QR\",QSS:\"QS\",QTT:\"QT\",QU:\"EU\",QUU:\"EU\",QVV:\"QV\",QWW:\"QW\",QXX:\"QX\",QYY:\"QY\",QZZ:\"QZ\",REU:\"RE\",RH:\"ZW\",ROU:\"RO\",RUS:\"RU\",RWA:\"RW\",SAU:\"SA\",SCG:\"RS ME\",SDN:\"SD\",SEN:\"SN\",SGP:\"SG\",SGS:\"GS\",SHN:\"SH\",SJM:\"SJ\",SLB:\"SB\",SLE:\"SL\",SLV:\"SV\",SMR:\"SM\",SOM:\"SO\",SPM:\"PM\",SRB:\"RS\",SSD:\"SS\",STP:\"ST\",SU:\"RU AM AZ BY EE GE KZ KG LV LT MD TJ TM UA UZ\",SUN:\"RU AM AZ BY EE GE KZ KG LV LT MD TJ TM UA UZ\",SUR:\"SR\",SVK:\"SK\",SVN:\"SI\",SWE:\"SE\",SWZ:\"SZ\",SXM:\"SX\",SYC:\"SC\",SYR:\"SY\",TAA:\"TA\",TCA:\"TC\",TCD:\"TD\",TGO:\"TG\",THA:\"TH\",TJK:\"TJ\",TKL:\"TK\",TKM:\"TM\",TLS:\"TL\",TMP:\"TL\",TON:\"TO\",TP:\"TL\",TTO:\"TT\",TUN:\"TN\",TUR:\"TR\",TUV:\"TV\",TWN:\"TW\",TZA:\"TZ\",UGA:\"UG\",UK:\"GB\",UKR:\"UA\",UMI:\"UM\",URY:\"UY\",USA:\"US\",UZB:\"UZ\",VAT:\"VA\",VCT:\"VC\",VD:\"VN\",VEN:\"VE\",VGB:\"VG\",VIR:\"VI\",VNM:\"VN\",VUT:\"VU\",WK:\"UM\",WLF:\"WF\",WSM:\"WS\",XAA:\"XA\",XBB:\"XB\",XCC:\"XC\",XDD:\"XD\",XEE:\"XE\",XFF:\"XF\",XGG:\"XG\",XHH:\"XH\",XII:\"XI\",XJJ:\"XJ\",XKK:\"XK\",XLL:\"XL\",XMM:\"XM\",XNN:\"XN\",XOO:\"XO\",XPP:\"XP\",XQQ:\"XQ\",XRR:\"XR\",XSS:\"XS\",XTT:\"XT\",XUU:\"XU\",XVV:\"XV\",XWW:\"XW\",XXX:\"XX\",XYY:\"XY\",XZZ:\"XZ\",YD:\"YE\",YEM:\"YE\",YMD:\"YE\",YU:\"RS ME\",YUG:\"RS ME\",ZAF:\"ZA\",ZAR:\"CD\",ZMB:\"ZM\",ZR:\"CD\",ZWE:\"ZW\",ZZZ:\"ZZ\"},n.scriptAlias={Qaai:\"Zinh\"},n.variantAlias={heploc:\"alalc97\",polytoni:\"polyton\"}}));n(i),i.variantAlias,i.scriptAlias,i.territoryAlias,i.languageAlias;var u=a((function(a,n){Object.defineProperty(n,\"__esModule\",{value:!0}),n.likelySubtags=void 0,n.likelySubtags={aa:\"aa-Latn-ET\",aai:\"aai-Latn-ZZ\",aak:\"aak-Latn-ZZ\",aau:\"aau-Latn-ZZ\",ab:\"ab-Cyrl-GE\",abi:\"abi-Latn-ZZ\",abq:\"abq-Cyrl-ZZ\",abr:\"abr-Latn-GH\",abt:\"abt-Latn-ZZ\",aby:\"aby-Latn-ZZ\",acd:\"acd-Latn-ZZ\",ace:\"ace-Latn-ID\",ach:\"ach-Latn-UG\",ada:\"ada-Latn-GH\",ade:\"ade-Latn-ZZ\",adj:\"adj-Latn-ZZ\",adp:\"adp-Tibt-BT\",ady:\"ady-Cyrl-RU\",adz:\"adz-Latn-ZZ\",ae:\"ae-Avst-IR\",aeb:\"aeb-Arab-TN\",aey:\"aey-Latn-ZZ\",af:\"af-Latn-ZA\",agc:\"agc-Latn-ZZ\",agd:\"agd-Latn-ZZ\",agg:\"agg-Latn-ZZ\",agm:\"agm-Latn-ZZ\",ago:\"ago-Latn-ZZ\",agq:\"agq-Latn-CM\",aha:\"aha-Latn-ZZ\",ahl:\"ahl-Latn-ZZ\",aho:\"aho-Ahom-IN\",ajg:\"ajg-Latn-ZZ\",ak:\"ak-Latn-GH\",akk:\"akk-Xsux-IQ\",ala:\"ala-Latn-ZZ\",ali:\"ali-Latn-ZZ\",aln:\"aln-Latn-XK\",alt:\"alt-Cyrl-RU\",am:\"am-Ethi-ET\",amm:\"amm-Latn-ZZ\",amn:\"amn-Latn-ZZ\",amo:\"amo-Latn-NG\",amp:\"amp-Latn-ZZ\",an:\"an-Latn-ES\",anc:\"anc-Latn-ZZ\",ank:\"ank-Latn-ZZ\",ann:\"ann-Latn-ZZ\",any:\"any-Latn-ZZ\",aoj:\"aoj-Latn-ZZ\",aom:\"aom-Latn-ZZ\",aoz:\"aoz-Latn-ID\",apc:\"apc-Arab-ZZ\",apd:\"apd-Arab-TG\",ape:\"ape-Latn-ZZ\",apr:\"apr-Latn-ZZ\",aps:\"aps-Latn-ZZ\",apz:\"apz-Latn-ZZ\",ar:\"ar-Arab-EG\",arc:\"arc-Armi-IR\",\"arc-Nbat\":\"arc-Nbat-JO\",\"arc-Palm\":\"arc-Palm-SY\",arh:\"arh-Latn-ZZ\",arn:\"arn-Latn-CL\",aro:\"aro-Latn-BO\",arq:\"arq-Arab-DZ\",ars:\"ars-Arab-SA\",ary:\"ary-Arab-MA\",arz:\"arz-Arab-EG\",as:\"as-Beng-IN\",asa:\"asa-Latn-TZ\",ase:\"ase-Sgnw-US\",asg:\"asg-Latn-ZZ\",aso:\"aso-Latn-ZZ\",ast:\"ast-Latn-ES\",ata:\"ata-Latn-ZZ\",atg:\"atg-Latn-ZZ\",atj:\"atj-Latn-CA\",auy:\"auy-Latn-ZZ\",av:\"av-Cyrl-RU\",avl:\"avl-Arab-ZZ\",avn:\"avn-Latn-ZZ\",avt:\"avt-Latn-ZZ\",avu:\"avu-Latn-ZZ\",awa:\"awa-Deva-IN\",awb:\"awb-Latn-ZZ\",awo:\"awo-Latn-ZZ\",awx:\"awx-Latn-ZZ\",ay:\"ay-Latn-BO\",ayb:\"ayb-Latn-ZZ\",az:\"az-Latn-AZ\",\"az-Arab\":\"az-Arab-IR\",\"az-IQ\":\"az-Arab-IQ\",\"az-IR\":\"az-Arab-IR\",\"az-RU\":\"az-Cyrl-RU\",ba:\"ba-Cyrl-RU\",bal:\"bal-Arab-PK\",ban:\"ban-Latn-ID\",bap:\"bap-Deva-NP\",bar:\"bar-Latn-AT\",bas:\"bas-Latn-CM\",bav:\"bav-Latn-ZZ\",bax:\"bax-Bamu-CM\",bba:\"bba-Latn-ZZ\",bbb:\"bbb-Latn-ZZ\",bbc:\"bbc-Latn-ID\",bbd:\"bbd-Latn-ZZ\",bbj:\"bbj-Latn-CM\",bbp:\"bbp-Latn-ZZ\",bbr:\"bbr-Latn-ZZ\",bcf:\"bcf-Latn-ZZ\",bch:\"bch-Latn-ZZ\",bci:\"bci-Latn-CI\",bcm:\"bcm-Latn-ZZ\",bcn:\"bcn-Latn-ZZ\",bco:\"bco-Latn-ZZ\",bcq:\"bcq-Ethi-ZZ\",bcu:\"bcu-Latn-ZZ\",bdd:\"bdd-Latn-ZZ\",be:\"be-Cyrl-BY\",bef:\"bef-Latn-ZZ\",beh:\"beh-Latn-ZZ\",bej:\"bej-Arab-SD\",bem:\"bem-Latn-ZM\",bet:\"bet-Latn-ZZ\",bew:\"bew-Latn-ID\",bex:\"bex-Latn-ZZ\",bez:\"bez-Latn-TZ\",bfd:\"bfd-Latn-CM\",bfq:\"bfq-Taml-IN\",bft:\"bft-Arab-PK\",bfy:\"bfy-Deva-IN\",bg:\"bg-Cyrl-BG\",bgc:\"bgc-Deva-IN\",bgn:\"bgn-Arab-PK\",bgx:\"bgx-Grek-TR\",bhb:\"bhb-Deva-IN\",bhg:\"bhg-Latn-ZZ\",bhi:\"bhi-Deva-IN\",bhl:\"bhl-Latn-ZZ\",bho:\"bho-Deva-IN\",bhy:\"bhy-Latn-ZZ\",bi:\"bi-Latn-VU\",bib:\"bib-Latn-ZZ\",big:\"big-Latn-ZZ\",bik:\"bik-Latn-PH\",bim:\"bim-Latn-ZZ\",bin:\"bin-Latn-NG\",bio:\"bio-Latn-ZZ\",biq:\"biq-Latn-ZZ\",bjh:\"bjh-Latn-ZZ\",bji:\"bji-Ethi-ZZ\",bjj:\"bjj-Deva-IN\",bjn:\"bjn-Latn-ID\",bjo:\"bjo-Latn-ZZ\",bjr:\"bjr-Latn-ZZ\",bjt:\"bjt-Latn-SN\",bjz:\"bjz-Latn-ZZ\",bkc:\"bkc-Latn-ZZ\",bkm:\"bkm-Latn-CM\",bkq:\"bkq-Latn-ZZ\",bku:\"bku-Latn-PH\",bkv:\"bkv-Latn-ZZ\",blg:\"blg-Latn-MY\",blt:\"blt-Tavt-VN\",bm:\"bm-Latn-ML\",bmh:\"bmh-Latn-ZZ\",bmk:\"bmk-Latn-ZZ\",bmq:\"bmq-Latn-ML\",bmu:\"bmu-Latn-ZZ\",bn:\"bn-Beng-BD\",bng:\"bng-Latn-ZZ\",bnm:\"bnm-Latn-ZZ\",bnp:\"bnp-Latn-ZZ\",bo:\"bo-Tibt-CN\",boj:\"boj-Latn-ZZ\",bom:\"bom-Latn-ZZ\",bon:\"bon-Latn-ZZ\",bpy:\"bpy-Beng-IN\",bqc:\"bqc-Latn-ZZ\",bqi:\"bqi-Arab-IR\",bqp:\"bqp-Latn-ZZ\",bqv:\"bqv-Latn-CI\",br:\"br-Latn-FR\",bra:\"bra-Deva-IN\",brh:\"brh-Arab-PK\",brx:\"brx-Deva-IN\",brz:\"brz-Latn-ZZ\",bs:\"bs-Latn-BA\",bsj:\"bsj-Latn-ZZ\",bsq:\"bsq-Bass-LR\",bss:\"bss-Latn-CM\",bst:\"bst-Ethi-ZZ\",bto:\"bto-Latn-PH\",btt:\"btt-Latn-ZZ\",btv:\"btv-Deva-PK\",bua:\"bua-Cyrl-RU\",buc:\"buc-Latn-YT\",bud:\"bud-Latn-ZZ\",bug:\"bug-Latn-ID\",buk:\"buk-Latn-ZZ\",bum:\"bum-Latn-CM\",buo:\"buo-Latn-ZZ\",bus:\"bus-Latn-ZZ\",buu:\"buu-Latn-ZZ\",bvb:\"bvb-Latn-GQ\",bwd:\"bwd-Latn-ZZ\",bwr:\"bwr-Latn-ZZ\",bxh:\"bxh-Latn-ZZ\",bye:\"bye-Latn-ZZ\",byn:\"byn-Ethi-ER\",byr:\"byr-Latn-ZZ\",bys:\"bys-Latn-ZZ\",byv:\"byv-Latn-CM\",byx:\"byx-Latn-ZZ\",bza:\"bza-Latn-ZZ\",bze:\"bze-Latn-ML\",bzf:\"bzf-Latn-ZZ\",bzh:\"bzh-Latn-ZZ\",bzw:\"bzw-Latn-ZZ\",ca:\"ca-Latn-ES\",cad:\"cad-Latn-US\",can:\"can-Latn-ZZ\",cbj:\"cbj-Latn-ZZ\",cch:\"cch-Latn-NG\",ccp:\"ccp-Cakm-BD\",ce:\"ce-Cyrl-RU\",ceb:\"ceb-Latn-PH\",cfa:\"cfa-Latn-ZZ\",cgg:\"cgg-Latn-UG\",ch:\"ch-Latn-GU\",chk:\"chk-Latn-FM\",chm:\"chm-Cyrl-RU\",cho:\"cho-Latn-US\",chp:\"chp-Latn-CA\",chr:\"chr-Cher-US\",cic:\"cic-Latn-US\",cja:\"cja-Arab-KH\",cjm:\"cjm-Cham-VN\",cjv:\"cjv-Latn-ZZ\",ckb:\"ckb-Arab-IQ\",ckl:\"ckl-Latn-ZZ\",cko:\"cko-Latn-ZZ\",cky:\"cky-Latn-ZZ\",cla:\"cla-Latn-ZZ\",cme:\"cme-Latn-ZZ\",cmg:\"cmg-Soyo-MN\",co:\"co-Latn-FR\",cop:\"cop-Copt-EG\",cps:\"cps-Latn-PH\",cr:\"cr-Cans-CA\",crh:\"crh-Cyrl-UA\",crj:\"crj-Cans-CA\",crk:\"crk-Cans-CA\",crl:\"crl-Cans-CA\",crm:\"crm-Cans-CA\",crs:\"crs-Latn-SC\",cs:\"cs-Latn-CZ\",csb:\"csb-Latn-PL\",csw:\"csw-Cans-CA\",ctd:\"ctd-Pauc-MM\",cu:\"cu-Cyrl-RU\",\"cu-Glag\":\"cu-Glag-BG\",cv:\"cv-Cyrl-RU\",cy:\"cy-Latn-GB\",da:\"da-Latn-DK\",dad:\"dad-Latn-ZZ\",daf:\"daf-Latn-CI\",dag:\"dag-Latn-ZZ\",dah:\"dah-Latn-ZZ\",dak:\"dak-Latn-US\",dar:\"dar-Cyrl-RU\",dav:\"dav-Latn-KE\",dbd:\"dbd-Latn-ZZ\",dbq:\"dbq-Latn-ZZ\",dcc:\"dcc-Arab-IN\",ddn:\"ddn-Latn-ZZ\",de:\"de-Latn-DE\",ded:\"ded-Latn-ZZ\",den:\"den-Latn-CA\",dga:\"dga-Latn-ZZ\",dgh:\"dgh-Latn-ZZ\",dgi:\"dgi-Latn-ZZ\",dgl:\"dgl-Arab-ZZ\",dgr:\"dgr-Latn-CA\",dgz:\"dgz-Latn-ZZ\",dia:\"dia-Latn-ZZ\",dje:\"dje-Latn-NE\",dmf:\"dmf-Medf-NG\",dnj:\"dnj-Latn-CI\",dob:\"dob-Latn-ZZ\",doi:\"doi-Deva-IN\",dop:\"dop-Latn-ZZ\",dow:\"dow-Latn-ZZ\",drh:\"drh-Mong-CN\",dri:\"dri-Latn-ZZ\",drs:\"drs-Ethi-ZZ\",dsb:\"dsb-Latn-DE\",dtm:\"dtm-Latn-ML\",dtp:\"dtp-Latn-MY\",dts:\"dts-Latn-ZZ\",dty:\"dty-Deva-NP\",dua:\"dua-Latn-CM\",duc:\"duc-Latn-ZZ\",dud:\"dud-Latn-ZZ\",dug:\"dug-Latn-ZZ\",dv:\"dv-Thaa-MV\",dva:\"dva-Latn-ZZ\",dww:\"dww-Latn-ZZ\",dyo:\"dyo-Latn-SN\",dyu:\"dyu-Latn-BF\",dz:\"dz-Tibt-BT\",dzg:\"dzg-Latn-ZZ\",ebu:\"ebu-Latn-KE\",ee:\"ee-Latn-GH\",efi:\"efi-Latn-NG\",egl:\"egl-Latn-IT\",egy:\"egy-Egyp-EG\",eka:\"eka-Latn-ZZ\",eky:\"eky-Kali-MM\",el:\"el-Grek-GR\",ema:\"ema-Latn-ZZ\",emi:\"emi-Latn-ZZ\",en:\"en-Latn-US\",\"en-Shaw\":\"en-Shaw-GB\",enn:\"enn-Latn-ZZ\",enq:\"enq-Latn-ZZ\",eo:\"eo-Latn-001\",eri:\"eri-Latn-ZZ\",es:\"es-Latn-ES\",esg:\"esg-Gonm-IN\",esu:\"esu-Latn-US\",et:\"et-Latn-EE\",etr:\"etr-Latn-ZZ\",ett:\"ett-Ital-IT\",etu:\"etu-Latn-ZZ\",etx:\"etx-Latn-ZZ\",eu:\"eu-Latn-ES\",ewo:\"ewo-Latn-CM\",ext:\"ext-Latn-ES\",eza:\"eza-Latn-ZZ\",fa:\"fa-Arab-IR\",faa:\"faa-Latn-ZZ\",fab:\"fab-Latn-ZZ\",fag:\"fag-Latn-ZZ\",fai:\"fai-Latn-ZZ\",fan:\"fan-Latn-GQ\",ff:\"ff-Latn-SN\",\"ff-Adlm\":\"ff-Adlm-GN\",ffi:\"ffi-Latn-ZZ\",ffm:\"ffm-Latn-ML\",fi:\"fi-Latn-FI\",fia:\"fia-Arab-SD\",fil:\"fil-Latn-PH\",fit:\"fit-Latn-SE\",fj:\"fj-Latn-FJ\",flr:\"flr-Latn-ZZ\",fmp:\"fmp-Latn-ZZ\",fo:\"fo-Latn-FO\",fod:\"fod-Latn-ZZ\",fon:\"fon-Latn-BJ\",for:\"for-Latn-ZZ\",fpe:\"fpe-Latn-ZZ\",fqs:\"fqs-Latn-ZZ\",fr:\"fr-Latn-FR\",frc:\"frc-Latn-US\",frp:\"frp-Latn-FR\",frr:\"frr-Latn-DE\",frs:\"frs-Latn-DE\",fub:\"fub-Arab-CM\",fud:\"fud-Latn-WF\",fue:\"fue-Latn-ZZ\",fuf:\"fuf-Latn-GN\",fuh:\"fuh-Latn-ZZ\",fuq:\"fuq-Latn-NE\",fur:\"fur-Latn-IT\",fuv:\"fuv-Latn-NG\",fuy:\"fuy-Latn-ZZ\",fvr:\"fvr-Latn-SD\",fy:\"fy-Latn-NL\",ga:\"ga-Latn-IE\",gaa:\"gaa-Latn-GH\",gaf:\"gaf-Latn-ZZ\",gag:\"gag-Latn-MD\",gah:\"gah-Latn-ZZ\",gaj:\"gaj-Latn-ZZ\",gam:\"gam-Latn-ZZ\",gan:\"gan-Hans-CN\",gaw:\"gaw-Latn-ZZ\",gay:\"gay-Latn-ID\",gba:\"gba-Latn-ZZ\",gbf:\"gbf-Latn-ZZ\",gbm:\"gbm-Deva-IN\",gby:\"gby-Latn-ZZ\",gbz:\"gbz-Arab-IR\",gcr:\"gcr-Latn-GF\",gd:\"gd-Latn-GB\",gde:\"gde-Latn-ZZ\",gdn:\"gdn-Latn-ZZ\",gdr:\"gdr-Latn-ZZ\",geb:\"geb-Latn-ZZ\",gej:\"gej-Latn-ZZ\",gel:\"gel-Latn-ZZ\",gez:\"gez-Ethi-ET\",gfk:\"gfk-Latn-ZZ\",ggn:\"ggn-Deva-NP\",ghs:\"ghs-Latn-ZZ\",gil:\"gil-Latn-KI\",gim:\"gim-Latn-ZZ\",gjk:\"gjk-Arab-PK\",gjn:\"gjn-Latn-ZZ\",gju:\"gju-Arab-PK\",gkn:\"gkn-Latn-ZZ\",gkp:\"gkp-Latn-ZZ\",gl:\"gl-Latn-ES\",glk:\"glk-Arab-IR\",gmm:\"gmm-Latn-ZZ\",gmv:\"gmv-Ethi-ZZ\",gn:\"gn-Latn-PY\",gnd:\"gnd-Latn-ZZ\",gng:\"gng-Latn-ZZ\",god:\"god-Latn-ZZ\",gof:\"gof-Ethi-ZZ\",goi:\"goi-Latn-ZZ\",gom:\"gom-Deva-IN\",gon:\"gon-Telu-IN\",gor:\"gor-Latn-ID\",gos:\"gos-Latn-NL\",got:\"got-Goth-UA\",grb:\"grb-Latn-ZZ\",grc:\"grc-Cprt-CY\",\"grc-Linb\":\"grc-Linb-GR\",grt:\"grt-Beng-IN\",grw:\"grw-Latn-ZZ\",gsw:\"gsw-Latn-CH\",gu:\"gu-Gujr-IN\",gub:\"gub-Latn-BR\",guc:\"guc-Latn-CO\",gud:\"gud-Latn-ZZ\",gur:\"gur-Latn-GH\",guw:\"guw-Latn-ZZ\",gux:\"gux-Latn-ZZ\",guz:\"guz-Latn-KE\",gv:\"gv-Latn-IM\",gvf:\"gvf-Latn-ZZ\",gvr:\"gvr-Deva-NP\",gvs:\"gvs-Latn-ZZ\",gwc:\"gwc-Arab-ZZ\",gwi:\"gwi-Latn-CA\",gwt:\"gwt-Arab-ZZ\",gyi:\"gyi-Latn-ZZ\",ha:\"ha-Latn-NG\",\"ha-CM\":\"ha-Arab-CM\",\"ha-SD\":\"ha-Arab-SD\",hag:\"hag-Latn-ZZ\",hak:\"hak-Hans-CN\",ham:\"ham-Latn-ZZ\",haw:\"haw-Latn-US\",haz:\"haz-Arab-AF\",hbb:\"hbb-Latn-ZZ\",hdy:\"hdy-Ethi-ZZ\",he:\"he-Hebr-IL\",hhy:\"hhy-Latn-ZZ\",hi:\"hi-Deva-IN\",hia:\"hia-Latn-ZZ\",hif:\"hif-Latn-FJ\",hig:\"hig-Latn-ZZ\",hih:\"hih-Latn-ZZ\",hil:\"hil-Latn-PH\",hla:\"hla-Latn-ZZ\",hlu:\"hlu-Hluw-TR\",hmd:\"hmd-Plrd-CN\",hmt:\"hmt-Latn-ZZ\",hnd:\"hnd-Arab-PK\",hne:\"hne-Deva-IN\",hnj:\"hnj-Hmnp-US\",hnn:\"hnn-Latn-PH\",hno:\"hno-Arab-PK\",ho:\"ho-Latn-PG\",hoc:\"hoc-Deva-IN\",hoj:\"hoj-Deva-IN\",hot:\"hot-Latn-ZZ\",hr:\"hr-Latn-HR\",hsb:\"hsb-Latn-DE\",hsn:\"hsn-Hans-CN\",ht:\"ht-Latn-HT\",hu:\"hu-Latn-HU\",hui:\"hui-Latn-ZZ\",hy:\"hy-Armn-AM\",hz:\"hz-Latn-NA\",ia:\"ia-Latn-001\",ian:\"ian-Latn-ZZ\",iar:\"iar-Latn-ZZ\",iba:\"iba-Latn-MY\",ibb:\"ibb-Latn-NG\",iby:\"iby-Latn-ZZ\",ica:\"ica-Latn-ZZ\",ich:\"ich-Latn-ZZ\",id:\"id-Latn-ID\",idd:\"idd-Latn-ZZ\",idi:\"idi-Latn-ZZ\",idu:\"idu-Latn-ZZ\",ife:\"ife-Latn-TG\",ig:\"ig-Latn-NG\",igb:\"igb-Latn-ZZ\",ige:\"ige-Latn-ZZ\",ii:\"ii-Yiii-CN\",ijj:\"ijj-Latn-ZZ\",ik:\"ik-Latn-US\",ikk:\"ikk-Latn-ZZ\",ikt:\"ikt-Latn-CA\",ikw:\"ikw-Latn-ZZ\",ikx:\"ikx-Latn-ZZ\",ilo:\"ilo-Latn-PH\",imo:\"imo-Latn-ZZ\",in:\"in-Latn-ID\",inh:\"inh-Cyrl-RU\",io:\"io-Latn-001\",iou:\"iou-Latn-ZZ\",iri:\"iri-Latn-ZZ\",is:\"is-Latn-IS\",it:\"it-Latn-IT\",iu:\"iu-Cans-CA\",iw:\"iw-Hebr-IL\",iwm:\"iwm-Latn-ZZ\",iws:\"iws-Latn-ZZ\",izh:\"izh-Latn-RU\",izi:\"izi-Latn-ZZ\",ja:\"ja-Jpan-JP\",jab:\"jab-Latn-ZZ\",jam:\"jam-Latn-JM\",jar:\"jar-Latn-ZZ\",jbo:\"jbo-Latn-001\",jbu:\"jbu-Latn-ZZ\",jen:\"jen-Latn-ZZ\",jgk:\"jgk-Latn-ZZ\",jgo:\"jgo-Latn-CM\",ji:\"ji-Hebr-UA\",jib:\"jib-Latn-ZZ\",jmc:\"jmc-Latn-TZ\",jml:\"jml-Deva-NP\",jra:\"jra-Latn-ZZ\",jut:\"jut-Latn-DK\",jv:\"jv-Latn-ID\",jw:\"jw-Latn-ID\",ka:\"ka-Geor-GE\",kaa:\"kaa-Cyrl-UZ\",kab:\"kab-Latn-DZ\",kac:\"kac-Latn-MM\",kad:\"kad-Latn-ZZ\",kai:\"kai-Latn-ZZ\",kaj:\"kaj-Latn-NG\",kam:\"kam-Latn-KE\",kao:\"kao-Latn-ML\",kbd:\"kbd-Cyrl-RU\",kbm:\"kbm-Latn-ZZ\",kbp:\"kbp-Latn-ZZ\",kbq:\"kbq-Latn-ZZ\",kbx:\"kbx-Latn-ZZ\",kby:\"kby-Arab-NE\",kcg:\"kcg-Latn-NG\",kck:\"kck-Latn-ZW\",kcl:\"kcl-Latn-ZZ\",kct:\"kct-Latn-ZZ\",kde:\"kde-Latn-TZ\",kdh:\"kdh-Latn-TG\",kdl:\"kdl-Latn-ZZ\",kdt:\"kdt-Thai-TH\",kea:\"kea-Latn-CV\",ken:\"ken-Latn-CM\",kez:\"kez-Latn-ZZ\",kfo:\"kfo-Latn-CI\",kfr:\"kfr-Deva-IN\",kfy:\"kfy-Deva-IN\",kg:\"kg-Latn-CD\",kge:\"kge-Latn-ID\",kgf:\"kgf-Latn-ZZ\",kgp:\"kgp-Latn-BR\",kha:\"kha-Latn-IN\",khb:\"khb-Talu-CN\",khn:\"khn-Deva-IN\",khq:\"khq-Latn-ML\",khs:\"khs-Latn-ZZ\",kht:\"kht-Mymr-IN\",khw:\"khw-Arab-PK\",khz:\"khz-Latn-ZZ\",ki:\"ki-Latn-KE\",kij:\"kij-Latn-ZZ\",kiu:\"kiu-Latn-TR\",kiw:\"kiw-Latn-ZZ\",kj:\"kj-Latn-NA\",kjd:\"kjd-Latn-ZZ\",kjg:\"kjg-Laoo-LA\",kjs:\"kjs-Latn-ZZ\",kjy:\"kjy-Latn-ZZ\",kk:\"kk-Cyrl-KZ\",\"kk-AF\":\"kk-Arab-AF\",\"kk-Arab\":\"kk-Arab-CN\",\"kk-CN\":\"kk-Arab-CN\",\"kk-IR\":\"kk-Arab-IR\",\"kk-MN\":\"kk-Arab-MN\",kkc:\"kkc-Latn-ZZ\",kkj:\"kkj-Latn-CM\",kl:\"kl-Latn-GL\",kln:\"kln-Latn-KE\",klq:\"klq-Latn-ZZ\",klt:\"klt-Latn-ZZ\",klx:\"klx-Latn-ZZ\",km:\"km-Khmr-KH\",kmb:\"kmb-Latn-AO\",kmh:\"kmh-Latn-ZZ\",kmo:\"kmo-Latn-ZZ\",kms:\"kms-Latn-ZZ\",kmu:\"kmu-Latn-ZZ\",kmw:\"kmw-Latn-ZZ\",kn:\"kn-Knda-IN\",knf:\"knf-Latn-GW\",knp:\"knp-Latn-ZZ\",ko:\"ko-Kore-KR\",koi:\"koi-Cyrl-RU\",kok:\"kok-Deva-IN\",kol:\"kol-Latn-ZZ\",kos:\"kos-Latn-FM\",koz:\"koz-Latn-ZZ\",kpe:\"kpe-Latn-LR\",kpf:\"kpf-Latn-ZZ\",kpo:\"kpo-Latn-ZZ\",kpr:\"kpr-Latn-ZZ\",kpx:\"kpx-Latn-ZZ\",kqb:\"kqb-Latn-ZZ\",kqf:\"kqf-Latn-ZZ\",kqs:\"kqs-Latn-ZZ\",kqy:\"kqy-Ethi-ZZ\",kr:\"kr-Latn-ZZ\",krc:\"krc-Cyrl-RU\",kri:\"kri-Latn-SL\",krj:\"krj-Latn-PH\",krl:\"krl-Latn-RU\",krs:\"krs-Latn-ZZ\",kru:\"kru-Deva-IN\",ks:\"ks-Arab-IN\",ksb:\"ksb-Latn-TZ\",ksd:\"ksd-Latn-ZZ\",ksf:\"ksf-Latn-CM\",ksh:\"ksh-Latn-DE\",ksj:\"ksj-Latn-ZZ\",ksr:\"ksr-Latn-ZZ\",ktb:\"ktb-Ethi-ZZ\",ktm:\"ktm-Latn-ZZ\",kto:\"kto-Latn-ZZ\",ktr:\"ktr-Latn-MY\",ku:\"ku-Latn-TR\",\"ku-Arab\":\"ku-Arab-IQ\",\"ku-LB\":\"ku-Arab-LB\",\"ku-Yezi\":\"ku-Yezi-GE\",kub:\"kub-Latn-ZZ\",kud:\"kud-Latn-ZZ\",kue:\"kue-Latn-ZZ\",kuj:\"kuj-Latn-ZZ\",kum:\"kum-Cyrl-RU\",kun:\"kun-Latn-ZZ\",kup:\"kup-Latn-ZZ\",kus:\"kus-Latn-ZZ\",kv:\"kv-Cyrl-RU\",kvg:\"kvg-Latn-ZZ\",kvr:\"kvr-Latn-ID\",kvx:\"kvx-Arab-PK\",kw:\"kw-Latn-GB\",kwj:\"kwj-Latn-ZZ\",kwo:\"kwo-Latn-ZZ\",kwq:\"kwq-Latn-ZZ\",kxa:\"kxa-Latn-ZZ\",kxc:\"kxc-Ethi-ZZ\",kxe:\"kxe-Latn-ZZ\",kxl:\"kxl-Deva-IN\",kxm:\"kxm-Thai-TH\",kxp:\"kxp-Arab-PK\",kxw:\"kxw-Latn-ZZ\",kxz:\"kxz-Latn-ZZ\",ky:\"ky-Cyrl-KG\",\"ky-Arab\":\"ky-Arab-CN\",\"ky-CN\":\"ky-Arab-CN\",\"ky-Latn\":\"ky-Latn-TR\",\"ky-TR\":\"ky-Latn-TR\",kye:\"kye-Latn-ZZ\",kyx:\"kyx-Latn-ZZ\",kzh:\"kzh-Arab-ZZ\",kzj:\"kzj-Latn-MY\",kzr:\"kzr-Latn-ZZ\",kzt:\"kzt-Latn-MY\",la:\"la-Latn-VA\",lab:\"lab-Lina-GR\",lad:\"lad-Hebr-IL\",lag:\"lag-Latn-TZ\",lah:\"lah-Arab-PK\",laj:\"laj-Latn-UG\",las:\"las-Latn-ZZ\",lb:\"lb-Latn-LU\",lbe:\"lbe-Cyrl-RU\",lbu:\"lbu-Latn-ZZ\",lbw:\"lbw-Latn-ID\",lcm:\"lcm-Latn-ZZ\",lcp:\"lcp-Thai-CN\",ldb:\"ldb-Latn-ZZ\",led:\"led-Latn-ZZ\",lee:\"lee-Latn-ZZ\",lem:\"lem-Latn-ZZ\",lep:\"lep-Lepc-IN\",leq:\"leq-Latn-ZZ\",leu:\"leu-Latn-ZZ\",lez:\"lez-Cyrl-RU\",lg:\"lg-Latn-UG\",lgg:\"lgg-Latn-ZZ\",li:\"li-Latn-NL\",lia:\"lia-Latn-ZZ\",lid:\"lid-Latn-ZZ\",lif:\"lif-Deva-NP\",\"lif-Limb\":\"lif-Limb-IN\",lig:\"lig-Latn-ZZ\",lih:\"lih-Latn-ZZ\",lij:\"lij-Latn-IT\",lis:\"lis-Lisu-CN\",ljp:\"ljp-Latn-ID\",lki:\"lki-Arab-IR\",lkt:\"lkt-Latn-US\",lle:\"lle-Latn-ZZ\",lln:\"lln-Latn-ZZ\",lmn:\"lmn-Telu-IN\",lmo:\"lmo-Latn-IT\",lmp:\"lmp-Latn-ZZ\",ln:\"ln-Latn-CD\",lns:\"lns-Latn-ZZ\",lnu:\"lnu-Latn-ZZ\",lo:\"lo-Laoo-LA\",loj:\"loj-Latn-ZZ\",lok:\"lok-Latn-ZZ\",lol:\"lol-Latn-CD\",lor:\"lor-Latn-ZZ\",los:\"los-Latn-ZZ\",loz:\"loz-Latn-ZM\",lrc:\"lrc-Arab-IR\",lt:\"lt-Latn-LT\",ltg:\"ltg-Latn-LV\",lu:\"lu-Latn-CD\",lua:\"lua-Latn-CD\",luo:\"luo-Latn-KE\",luy:\"luy-Latn-KE\",luz:\"luz-Arab-IR\",lv:\"lv-Latn-LV\",lwl:\"lwl-Thai-TH\",lzh:\"lzh-Hans-CN\",lzz:\"lzz-Latn-TR\",mad:\"mad-Latn-ID\",maf:\"maf-Latn-CM\",mag:\"mag-Deva-IN\",mai:\"mai-Deva-IN\",mak:\"mak-Latn-ID\",man:\"man-Latn-GM\",\"man-GN\":\"man-Nkoo-GN\",\"man-Nkoo\":\"man-Nkoo-GN\",mas:\"mas-Latn-KE\",maw:\"maw-Latn-ZZ\",maz:\"maz-Latn-MX\",mbh:\"mbh-Latn-ZZ\",mbo:\"mbo-Latn-ZZ\",mbq:\"mbq-Latn-ZZ\",mbu:\"mbu-Latn-ZZ\",mbw:\"mbw-Latn-ZZ\",mci:\"mci-Latn-ZZ\",mcp:\"mcp-Latn-ZZ\",mcq:\"mcq-Latn-ZZ\",mcr:\"mcr-Latn-ZZ\",mcu:\"mcu-Latn-ZZ\",mda:\"mda-Latn-ZZ\",mde:\"mde-Arab-ZZ\",mdf:\"mdf-Cyrl-RU\",mdh:\"mdh-Latn-PH\",mdj:\"mdj-Latn-ZZ\",mdr:\"mdr-Latn-ID\",mdx:\"mdx-Ethi-ZZ\",med:\"med-Latn-ZZ\",mee:\"mee-Latn-ZZ\",mek:\"mek-Latn-ZZ\",men:\"men-Latn-SL\",mer:\"mer-Latn-KE\",met:\"met-Latn-ZZ\",meu:\"meu-Latn-ZZ\",mfa:\"mfa-Arab-TH\",mfe:\"mfe-Latn-MU\",mfn:\"mfn-Latn-ZZ\",mfo:\"mfo-Latn-ZZ\",mfq:\"mfq-Latn-ZZ\",mg:\"mg-Latn-MG\",mgh:\"mgh-Latn-MZ\",mgl:\"mgl-Latn-ZZ\",mgo:\"mgo-Latn-CM\",mgp:\"mgp-Deva-NP\",mgy:\"mgy-Latn-TZ\",mh:\"mh-Latn-MH\",mhi:\"mhi-Latn-ZZ\",mhl:\"mhl-Latn-ZZ\",mi:\"mi-Latn-NZ\",mif:\"mif-Latn-ZZ\",min:\"min-Latn-ID\",miw:\"miw-Latn-ZZ\",mk:\"mk-Cyrl-MK\",mki:\"mki-Arab-ZZ\",mkl:\"mkl-Latn-ZZ\",mkp:\"mkp-Latn-ZZ\",mkw:\"mkw-Latn-ZZ\",ml:\"ml-Mlym-IN\",mle:\"mle-Latn-ZZ\",mlp:\"mlp-Latn-ZZ\",mls:\"mls-Latn-SD\",mmo:\"mmo-Latn-ZZ\",mmu:\"mmu-Latn-ZZ\",mmx:\"mmx-Latn-ZZ\",mn:\"mn-Cyrl-MN\",\"mn-CN\":\"mn-Mong-CN\",\"mn-Mong\":\"mn-Mong-CN\",mna:\"mna-Latn-ZZ\",mnf:\"mnf-Latn-ZZ\",mni:\"mni-Beng-IN\",mnw:\"mnw-Mymr-MM\",mo:\"mo-Latn-RO\",moa:\"moa-Latn-ZZ\",moe:\"moe-Latn-CA\",moh:\"moh-Latn-CA\",mos:\"mos-Latn-BF\",mox:\"mox-Latn-ZZ\",mpp:\"mpp-Latn-ZZ\",mps:\"mps-Latn-ZZ\",mpt:\"mpt-Latn-ZZ\",mpx:\"mpx-Latn-ZZ\",mql:\"mql-Latn-ZZ\",mr:\"mr-Deva-IN\",mrd:\"mrd-Deva-NP\",mrj:\"mrj-Cyrl-RU\",mro:\"mro-Mroo-BD\",ms:\"ms-Latn-MY\",\"ms-CC\":\"ms-Arab-CC\",mt:\"mt-Latn-MT\",mtc:\"mtc-Latn-ZZ\",mtf:\"mtf-Latn-ZZ\",mti:\"mti-Latn-ZZ\",mtr:\"mtr-Deva-IN\",mua:\"mua-Latn-CM\",mur:\"mur-Latn-ZZ\",mus:\"mus-Latn-US\",mva:\"mva-Latn-ZZ\",mvn:\"mvn-Latn-ZZ\",mvy:\"mvy-Arab-PK\",mwk:\"mwk-Latn-ML\",mwr:\"mwr-Deva-IN\",mwv:\"mwv-Latn-ID\",mww:\"mww-Hmnp-US\",mxc:\"mxc-Latn-ZW\",mxm:\"mxm-Latn-ZZ\",my:\"my-Mymr-MM\",myk:\"myk-Latn-ZZ\",mym:\"mym-Ethi-ZZ\",myv:\"myv-Cyrl-RU\",myw:\"myw-Latn-ZZ\",myx:\"myx-Latn-UG\",myz:\"myz-Mand-IR\",mzk:\"mzk-Latn-ZZ\",mzm:\"mzm-Latn-ZZ\",mzn:\"mzn-Arab-IR\",mzp:\"mzp-Latn-ZZ\",mzw:\"mzw-Latn-ZZ\",mzz:\"mzz-Latn-ZZ\",na:\"na-Latn-NR\",nac:\"nac-Latn-ZZ\",naf:\"naf-Latn-ZZ\",nak:\"nak-Latn-ZZ\",nan:\"nan-Hans-CN\",nap:\"nap-Latn-IT\",naq:\"naq-Latn-NA\",nas:\"nas-Latn-ZZ\",nb:\"nb-Latn-NO\",nca:\"nca-Latn-ZZ\",nce:\"nce-Latn-ZZ\",ncf:\"ncf-Latn-ZZ\",nch:\"nch-Latn-MX\",nco:\"nco-Latn-ZZ\",ncu:\"ncu-Latn-ZZ\",nd:\"nd-Latn-ZW\",ndc:\"ndc-Latn-MZ\",nds:\"nds-Latn-DE\",ne:\"ne-Deva-NP\",neb:\"neb-Latn-ZZ\",new:\"new-Deva-NP\",nex:\"nex-Latn-ZZ\",nfr:\"nfr-Latn-ZZ\",ng:\"ng-Latn-NA\",nga:\"nga-Latn-ZZ\",ngb:\"ngb-Latn-ZZ\",ngl:\"ngl-Latn-MZ\",nhb:\"nhb-Latn-ZZ\",nhe:\"nhe-Latn-MX\",nhw:\"nhw-Latn-MX\",nif:\"nif-Latn-ZZ\",nii:\"nii-Latn-ZZ\",nij:\"nij-Latn-ID\",nin:\"nin-Latn-ZZ\",niu:\"niu-Latn-NU\",niy:\"niy-Latn-ZZ\",niz:\"niz-Latn-ZZ\",njo:\"njo-Latn-IN\",nkg:\"nkg-Latn-ZZ\",nko:\"nko-Latn-ZZ\",nl:\"nl-Latn-NL\",nmg:\"nmg-Latn-CM\",nmz:\"nmz-Latn-ZZ\",nn:\"nn-Latn-NO\",nnf:\"nnf-Latn-ZZ\",nnh:\"nnh-Latn-CM\",nnk:\"nnk-Latn-ZZ\",nnm:\"nnm-Latn-ZZ\",nnp:\"nnp-Wcho-IN\",no:\"no-Latn-NO\",nod:\"nod-Lana-TH\",noe:\"noe-Deva-IN\",non:\"non-Runr-SE\",nop:\"nop-Latn-ZZ\",nou:\"nou-Latn-ZZ\",nqo:\"nqo-Nkoo-GN\",nr:\"nr-Latn-ZA\",nrb:\"nrb-Latn-ZZ\",nsk:\"nsk-Cans-CA\",nsn:\"nsn-Latn-ZZ\",nso:\"nso-Latn-ZA\",nss:\"nss-Latn-ZZ\",nst:\"nst-Tnsa-IN\",ntm:\"ntm-Latn-ZZ\",ntr:\"ntr-Latn-ZZ\",nui:\"nui-Latn-ZZ\",nup:\"nup-Latn-ZZ\",nus:\"nus-Latn-SS\",nuv:\"nuv-Latn-ZZ\",nux:\"nux-Latn-ZZ\",nv:\"nv-Latn-US\",nwb:\"nwb-Latn-ZZ\",nxq:\"nxq-Latn-CN\",nxr:\"nxr-Latn-ZZ\",ny:\"ny-Latn-MW\",nym:\"nym-Latn-TZ\",nyn:\"nyn-Latn-UG\",nzi:\"nzi-Latn-GH\",oc:\"oc-Latn-FR\",ogc:\"ogc-Latn-ZZ\",okr:\"okr-Latn-ZZ\",okv:\"okv-Latn-ZZ\",om:\"om-Latn-ET\",ong:\"ong-Latn-ZZ\",onn:\"onn-Latn-ZZ\",ons:\"ons-Latn-ZZ\",opm:\"opm-Latn-ZZ\",or:\"or-Orya-IN\",oro:\"oro-Latn-ZZ\",oru:\"oru-Arab-ZZ\",os:\"os-Cyrl-GE\",osa:\"osa-Osge-US\",ota:\"ota-Arab-ZZ\",otk:\"otk-Orkh-MN\",oui:\"oui-Ougr-143\",ozm:\"ozm-Latn-ZZ\",pa:\"pa-Guru-IN\",\"pa-Arab\":\"pa-Arab-PK\",\"pa-PK\":\"pa-Arab-PK\",pag:\"pag-Latn-PH\",pal:\"pal-Phli-IR\",\"pal-Phlp\":\"pal-Phlp-CN\",pam:\"pam-Latn-PH\",pap:\"pap-Latn-AW\",pau:\"pau-Latn-PW\",pbi:\"pbi-Latn-ZZ\",pcd:\"pcd-Latn-FR\",pcm:\"pcm-Latn-NG\",pdc:\"pdc-Latn-US\",pdt:\"pdt-Latn-CA\",ped:\"ped-Latn-ZZ\",peo:\"peo-Xpeo-IR\",pex:\"pex-Latn-ZZ\",pfl:\"pfl-Latn-DE\",phl:\"phl-Arab-ZZ\",phn:\"phn-Phnx-LB\",pil:\"pil-Latn-ZZ\",pip:\"pip-Latn-ZZ\",pka:\"pka-Brah-IN\",pko:\"pko-Latn-KE\",pl:\"pl-Latn-PL\",pla:\"pla-Latn-ZZ\",pms:\"pms-Latn-IT\",png:\"png-Latn-ZZ\",pnn:\"pnn-Latn-ZZ\",pnt:\"pnt-Grek-GR\",pon:\"pon-Latn-FM\",ppa:\"ppa-Deva-IN\",ppo:\"ppo-Latn-ZZ\",pra:\"pra-Khar-PK\",prd:\"prd-Arab-IR\",prg:\"prg-Latn-001\",ps:\"ps-Arab-AF\",pss:\"pss-Latn-ZZ\",pt:\"pt-Latn-BR\",ptp:\"ptp-Latn-ZZ\",puu:\"puu-Latn-GA\",pwa:\"pwa-Latn-ZZ\",qu:\"qu-Latn-PE\",quc:\"quc-Latn-GT\",qug:\"qug-Latn-EC\",rai:\"rai-Latn-ZZ\",raj:\"raj-Deva-IN\",rao:\"rao-Latn-ZZ\",rcf:\"rcf-Latn-RE\",rej:\"rej-Latn-ID\",rel:\"rel-Latn-ZZ\",res:\"res-Latn-ZZ\",rgn:\"rgn-Latn-IT\",rhg:\"rhg-Rohg-MM\",ria:\"ria-Latn-IN\",rif:\"rif-Tfng-MA\",\"rif-NL\":\"rif-Latn-NL\",rjs:\"rjs-Deva-NP\",rkt:\"rkt-Beng-BD\",rm:\"rm-Latn-CH\",rmf:\"rmf-Latn-FI\",rmo:\"rmo-Latn-CH\",rmt:\"rmt-Arab-IR\",rmu:\"rmu-Latn-SE\",rn:\"rn-Latn-BI\",rna:\"rna-Latn-ZZ\",rng:\"rng-Latn-MZ\",ro:\"ro-Latn-RO\",rob:\"rob-Latn-ID\",rof:\"rof-Latn-TZ\",roo:\"roo-Latn-ZZ\",rro:\"rro-Latn-ZZ\",rtm:\"rtm-Latn-FJ\",ru:\"ru-Cyrl-RU\",rue:\"rue-Cyrl-UA\",rug:\"rug-Latn-SB\",rw:\"rw-Latn-RW\",rwk:\"rwk-Latn-TZ\",rwo:\"rwo-Latn-ZZ\",ryu:\"ryu-Kana-JP\",sa:\"sa-Deva-IN\",saf:\"saf-Latn-GH\",sah:\"sah-Cyrl-RU\",saq:\"saq-Latn-KE\",sas:\"sas-Latn-ID\",sat:\"sat-Olck-IN\",sav:\"sav-Latn-SN\",saz:\"saz-Saur-IN\",sba:\"sba-Latn-ZZ\",sbe:\"sbe-Latn-ZZ\",sbp:\"sbp-Latn-TZ\",sc:\"sc-Latn-IT\",sck:\"sck-Deva-IN\",scl:\"scl-Arab-ZZ\",scn:\"scn-Latn-IT\",sco:\"sco-Latn-GB\",scs:\"scs-Latn-CA\",sd:\"sd-Arab-PK\",\"sd-Deva\":\"sd-Deva-IN\",\"sd-Khoj\":\"sd-Khoj-IN\",\"sd-Sind\":\"sd-Sind-IN\",sdc:\"sdc-Latn-IT\",sdh:\"sdh-Arab-IR\",se:\"se-Latn-NO\",sef:\"sef-Latn-CI\",seh:\"seh-Latn-MZ\",sei:\"sei-Latn-MX\",ses:\"ses-Latn-ML\",sg:\"sg-Latn-CF\",sga:\"sga-Ogam-IE\",sgs:\"sgs-Latn-LT\",sgw:\"sgw-Ethi-ZZ\",sgz:\"sgz-Latn-ZZ\",shi:\"shi-Tfng-MA\",shk:\"shk-Latn-ZZ\",shn:\"shn-Mymr-MM\",shu:\"shu-Arab-ZZ\",si:\"si-Sinh-LK\",sid:\"sid-Latn-ET\",sig:\"sig-Latn-ZZ\",sil:\"sil-Latn-ZZ\",sim:\"sim-Latn-ZZ\",sjr:\"sjr-Latn-ZZ\",sk:\"sk-Latn-SK\",skc:\"skc-Latn-ZZ\",skr:\"skr-Arab-PK\",sks:\"sks-Latn-ZZ\",sl:\"sl-Latn-SI\",sld:\"sld-Latn-ZZ\",sli:\"sli-Latn-PL\",sll:\"sll-Latn-ZZ\",sly:\"sly-Latn-ID\",sm:\"sm-Latn-WS\",sma:\"sma-Latn-SE\",smj:\"smj-Latn-SE\",smn:\"smn-Latn-FI\",smp:\"smp-Samr-IL\",smq:\"smq-Latn-ZZ\",sms:\"sms-Latn-FI\",sn:\"sn-Latn-ZW\",snc:\"snc-Latn-ZZ\",snk:\"snk-Latn-ML\",snp:\"snp-Latn-ZZ\",snx:\"snx-Latn-ZZ\",sny:\"sny-Latn-ZZ\",so:\"so-Latn-SO\",sog:\"sog-Sogd-UZ\",sok:\"sok-Latn-ZZ\",soq:\"soq-Latn-ZZ\",sou:\"sou-Thai-TH\",soy:\"soy-Latn-ZZ\",spd:\"spd-Latn-ZZ\",spl:\"spl-Latn-ZZ\",sps:\"sps-Latn-ZZ\",sq:\"sq-Latn-AL\",sr:\"sr-Cyrl-RS\",\"sr-ME\":\"sr-Latn-ME\",\"sr-RO\":\"sr-Latn-RO\",\"sr-RU\":\"sr-Latn-RU\",\"sr-TR\":\"sr-Latn-TR\",srb:\"srb-Sora-IN\",srn:\"srn-Latn-SR\",srr:\"srr-Latn-SN\",srx:\"srx-Deva-IN\",ss:\"ss-Latn-ZA\",ssd:\"ssd-Latn-ZZ\",ssg:\"ssg-Latn-ZZ\",ssy:\"ssy-Latn-ER\",st:\"st-Latn-ZA\",stk:\"stk-Latn-ZZ\",stq:\"stq-Latn-DE\",su:\"su-Latn-ID\",sua:\"sua-Latn-ZZ\",sue:\"sue-Latn-ZZ\",suk:\"suk-Latn-TZ\",sur:\"sur-Latn-ZZ\",sus:\"sus-Latn-GN\",sv:\"sv-Latn-SE\",sw:\"sw-Latn-TZ\",swb:\"swb-Arab-YT\",swc:\"swc-Latn-CD\",swg:\"swg-Latn-DE\",swp:\"swp-Latn-ZZ\",swv:\"swv-Deva-IN\",sxn:\"sxn-Latn-ID\",sxw:\"sxw-Latn-ZZ\",syl:\"syl-Beng-BD\",syr:\"syr-Syrc-IQ\",szl:\"szl-Latn-PL\",ta:\"ta-Taml-IN\",taj:\"taj-Deva-NP\",tal:\"tal-Latn-ZZ\",tan:\"tan-Latn-ZZ\",taq:\"taq-Latn-ZZ\",tbc:\"tbc-Latn-ZZ\",tbd:\"tbd-Latn-ZZ\",tbf:\"tbf-Latn-ZZ\",tbg:\"tbg-Latn-ZZ\",tbo:\"tbo-Latn-ZZ\",tbw:\"tbw-Latn-PH\",tbz:\"tbz-Latn-ZZ\",tci:\"tci-Latn-ZZ\",tcy:\"tcy-Knda-IN\",tdd:\"tdd-Tale-CN\",tdg:\"tdg-Deva-NP\",tdh:\"tdh-Deva-NP\",tdu:\"tdu-Latn-MY\",te:\"te-Telu-IN\",ted:\"ted-Latn-ZZ\",tem:\"tem-Latn-SL\",teo:\"teo-Latn-UG\",tet:\"tet-Latn-TL\",tfi:\"tfi-Latn-ZZ\",tg:\"tg-Cyrl-TJ\",\"tg-Arab\":\"tg-Arab-PK\",\"tg-PK\":\"tg-Arab-PK\",tgc:\"tgc-Latn-ZZ\",tgo:\"tgo-Latn-ZZ\",tgu:\"tgu-Latn-ZZ\",th:\"th-Thai-TH\",thl:\"thl-Deva-NP\",thq:\"thq-Deva-NP\",thr:\"thr-Deva-NP\",ti:\"ti-Ethi-ET\",tif:\"tif-Latn-ZZ\",tig:\"tig-Ethi-ER\",tik:\"tik-Latn-ZZ\",tim:\"tim-Latn-ZZ\",tio:\"tio-Latn-ZZ\",tiv:\"tiv-Latn-NG\",tk:\"tk-Latn-TM\",tkl:\"tkl-Latn-TK\",tkr:\"tkr-Latn-AZ\",tkt:\"tkt-Deva-NP\",tl:\"tl-Latn-PH\",tlf:\"tlf-Latn-ZZ\",tlx:\"tlx-Latn-ZZ\",tly:\"tly-Latn-AZ\",tmh:\"tmh-Latn-NE\",tmy:\"tmy-Latn-ZZ\",tn:\"tn-Latn-ZA\",tnh:\"tnh-Latn-ZZ\",to:\"to-Latn-TO\",tof:\"tof-Latn-ZZ\",tog:\"tog-Latn-MW\",toq:\"toq-Latn-ZZ\",tpi:\"tpi-Latn-PG\",tpm:\"tpm-Latn-ZZ\",tpz:\"tpz-Latn-ZZ\",tqo:\"tqo-Latn-ZZ\",tr:\"tr-Latn-TR\",tru:\"tru-Latn-TR\",trv:\"trv-Latn-TW\",trw:\"trw-Arab-PK\",ts:\"ts-Latn-ZA\",tsd:\"tsd-Grek-GR\",tsf:\"tsf-Deva-NP\",tsg:\"tsg-Latn-PH\",tsj:\"tsj-Tibt-BT\",tsw:\"tsw-Latn-ZZ\",tt:\"tt-Cyrl-RU\",ttd:\"ttd-Latn-ZZ\",tte:\"tte-Latn-ZZ\",ttj:\"ttj-Latn-UG\",ttr:\"ttr-Latn-ZZ\",tts:\"tts-Thai-TH\",ttt:\"ttt-Latn-AZ\",tuh:\"tuh-Latn-ZZ\",tul:\"tul-Latn-ZZ\",tum:\"tum-Latn-MW\",tuq:\"tuq-Latn-ZZ\",tvd:\"tvd-Latn-ZZ\",tvl:\"tvl-Latn-TV\",tvu:\"tvu-Latn-ZZ\",twh:\"twh-Latn-ZZ\",twq:\"twq-Latn-NE\",txg:\"txg-Tang-CN\",txo:\"txo-Toto-IN\",ty:\"ty-Latn-PF\",tya:\"tya-Latn-ZZ\",tyv:\"tyv-Cyrl-RU\",tzm:\"tzm-Latn-MA\",ubu:\"ubu-Latn-ZZ\",udi:\"udi-Aghb-RU\",udm:\"udm-Cyrl-RU\",ug:\"ug-Arab-CN\",\"ug-Cyrl\":\"ug-Cyrl-KZ\",\"ug-KZ\":\"ug-Cyrl-KZ\",\"ug-MN\":\"ug-Cyrl-MN\",uga:\"uga-Ugar-SY\",uk:\"uk-Cyrl-UA\",uli:\"uli-Latn-FM\",umb:\"umb-Latn-AO\",und:\"en-Latn-US\",\"und-002\":\"en-Latn-NG\",\"und-003\":\"en-Latn-US\",\"und-005\":\"pt-Latn-BR\",\"und-009\":\"en-Latn-AU\",\"und-011\":\"en-Latn-NG\",\"und-013\":\"es-Latn-MX\",\"und-014\":\"sw-Latn-TZ\",\"und-015\":\"ar-Arab-EG\",\"und-017\":\"sw-Latn-CD\",\"und-018\":\"en-Latn-ZA\",\"und-019\":\"en-Latn-US\",\"und-021\":\"en-Latn-US\",\"und-029\":\"es-Latn-CU\",\"und-030\":\"zh-Hans-CN\",\"und-034\":\"hi-Deva-IN\",\"und-035\":\"id-Latn-ID\",\"und-039\":\"it-Latn-IT\",\"und-053\":\"en-Latn-AU\",\"und-054\":\"en-Latn-PG\",\"und-057\":\"en-Latn-GU\",\"und-061\":\"sm-Latn-WS\",\"und-142\":\"zh-Hans-CN\",\"und-143\":\"uz-Latn-UZ\",\"und-145\":\"ar-Arab-SA\",\"und-150\":\"ru-Cyrl-RU\",\"und-151\":\"ru-Cyrl-RU\",\"und-154\":\"en-Latn-GB\",\"und-155\":\"de-Latn-DE\",\"und-202\":\"en-Latn-NG\",\"und-419\":\"es-Latn-419\",\"und-AD\":\"ca-Latn-AD\",\"und-Adlm\":\"ff-Adlm-GN\",\"und-AE\":\"ar-Arab-AE\",\"und-AF\":\"fa-Arab-AF\",\"und-Aghb\":\"udi-Aghb-RU\",\"und-Ahom\":\"aho-Ahom-IN\",\"und-AL\":\"sq-Latn-AL\",\"und-AM\":\"hy-Armn-AM\",\"und-AO\":\"pt-Latn-AO\",\"und-AQ\":\"und-Latn-AQ\",\"und-AR\":\"es-Latn-AR\",\"und-Arab\":\"ar-Arab-EG\",\"und-Arab-CC\":\"ms-Arab-CC\",\"und-Arab-CN\":\"ug-Arab-CN\",\"und-Arab-GB\":\"ks-Arab-GB\",\"und-Arab-ID\":\"ms-Arab-ID\",\"und-Arab-IN\":\"ur-Arab-IN\",\"und-Arab-KH\":\"cja-Arab-KH\",\"und-Arab-MM\":\"rhg-Arab-MM\",\"und-Arab-MN\":\"kk-Arab-MN\",\"und-Arab-MU\":\"ur-Arab-MU\",\"und-Arab-NG\":\"ha-Arab-NG\",\"und-Arab-PK\":\"ur-Arab-PK\",\"und-Arab-TG\":\"apd-Arab-TG\",\"und-Arab-TH\":\"mfa-Arab-TH\",\"und-Arab-TJ\":\"fa-Arab-TJ\",\"und-Arab-TR\":\"az-Arab-TR\",\"und-Arab-YT\":\"swb-Arab-YT\",\"und-Armi\":\"arc-Armi-IR\",\"und-Armn\":\"hy-Armn-AM\",\"und-AS\":\"sm-Latn-AS\",\"und-AT\":\"de-Latn-AT\",\"und-Avst\":\"ae-Avst-IR\",\"und-AW\":\"nl-Latn-AW\",\"und-AX\":\"sv-Latn-AX\",\"und-AZ\":\"az-Latn-AZ\",\"und-BA\":\"bs-Latn-BA\",\"und-Bali\":\"ban-Bali-ID\",\"und-Bamu\":\"bax-Bamu-CM\",\"und-Bass\":\"bsq-Bass-LR\",\"und-Batk\":\"bbc-Batk-ID\",\"und-BD\":\"bn-Beng-BD\",\"und-BE\":\"nl-Latn-BE\",\"und-Beng\":\"bn-Beng-BD\",\"und-BF\":\"fr-Latn-BF\",\"und-BG\":\"bg-Cyrl-BG\",\"und-BH\":\"ar-Arab-BH\",\"und-Bhks\":\"sa-Bhks-IN\",\"und-BI\":\"rn-Latn-BI\",\"und-BJ\":\"fr-Latn-BJ\",\"und-BL\":\"fr-Latn-BL\",\"und-BN\":\"ms-Latn-BN\",\"und-BO\":\"es-Latn-BO\",\"und-Bopo\":\"zh-Bopo-TW\",\"und-BQ\":\"pap-Latn-BQ\",\"und-BR\":\"pt-Latn-BR\",\"und-Brah\":\"pka-Brah-IN\",\"und-Brai\":\"fr-Brai-FR\",\"und-BT\":\"dz-Tibt-BT\",\"und-Bugi\":\"bug-Bugi-ID\",\"und-Buhd\":\"bku-Buhd-PH\",\"und-BV\":\"und-Latn-BV\",\"und-BY\":\"be-Cyrl-BY\",\"und-Cakm\":\"ccp-Cakm-BD\",\"und-Cans\":\"cr-Cans-CA\",\"und-Cari\":\"xcr-Cari-TR\",\"und-CD\":\"sw-Latn-CD\",\"und-CF\":\"fr-Latn-CF\",\"und-CG\":\"fr-Latn-CG\",\"und-CH\":\"de-Latn-CH\",\"und-Cham\":\"cjm-Cham-VN\",\"und-Cher\":\"chr-Cher-US\",\"und-Chrs\":\"xco-Chrs-UZ\",\"und-CI\":\"fr-Latn-CI\",\"und-CL\":\"es-Latn-CL\",\"und-CM\":\"fr-Latn-CM\",\"und-CN\":\"zh-Hans-CN\",\"und-CO\":\"es-Latn-CO\",\"und-Copt\":\"cop-Copt-EG\",\"und-CP\":\"und-Latn-CP\",\"und-Cpmn\":\"und-Cpmn-CY\",\"und-Cpmn-CY\":\"und-Cpmn-CY\",\"und-Cprt\":\"grc-Cprt-CY\",\"und-CR\":\"es-Latn-CR\",\"und-CU\":\"es-Latn-CU\",\"und-CV\":\"pt-Latn-CV\",\"und-CW\":\"pap-Latn-CW\",\"und-CY\":\"el-Grek-CY\",\"und-Cyrl\":\"ru-Cyrl-RU\",\"und-Cyrl-AL\":\"mk-Cyrl-AL\",\"und-Cyrl-BA\":\"sr-Cyrl-BA\",\"und-Cyrl-GE\":\"os-Cyrl-GE\",\"und-Cyrl-GR\":\"mk-Cyrl-GR\",\"und-Cyrl-MD\":\"uk-Cyrl-MD\",\"und-Cyrl-RO\":\"bg-Cyrl-RO\",\"und-Cyrl-SK\":\"uk-Cyrl-SK\",\"und-Cyrl-TR\":\"kbd-Cyrl-TR\",\"und-Cyrl-XK\":\"sr-Cyrl-XK\",\"und-CZ\":\"cs-Latn-CZ\",\"und-DE\":\"de-Latn-DE\",\"und-Deva\":\"hi-Deva-IN\",\"und-Deva-BT\":\"ne-Deva-BT\",\"und-Deva-FJ\":\"hif-Deva-FJ\",\"und-Deva-MU\":\"bho-Deva-MU\",\"und-Deva-PK\":\"btv-Deva-PK\",\"und-Diak\":\"dv-Diak-MV\",\"und-DJ\":\"aa-Latn-DJ\",\"und-DK\":\"da-Latn-DK\",\"und-DO\":\"es-Latn-DO\",\"und-Dogr\":\"doi-Dogr-IN\",\"und-Dupl\":\"fr-Dupl-FR\",\"und-DZ\":\"ar-Arab-DZ\",\"und-EA\":\"es-Latn-EA\",\"und-EC\":\"es-Latn-EC\",\"und-EE\":\"et-Latn-EE\",\"und-EG\":\"ar-Arab-EG\",\"und-Egyp\":\"egy-Egyp-EG\",\"und-EH\":\"ar-Arab-EH\",\"und-Elba\":\"sq-Elba-AL\",\"und-Elym\":\"arc-Elym-IR\",\"und-ER\":\"ti-Ethi-ER\",\"und-ES\":\"es-Latn-ES\",\"und-ET\":\"am-Ethi-ET\",\"und-Ethi\":\"am-Ethi-ET\",\"und-EU\":\"en-Latn-IE\",\"und-EZ\":\"de-Latn-EZ\",\"und-FI\":\"fi-Latn-FI\",\"und-FO\":\"fo-Latn-FO\",\"und-FR\":\"fr-Latn-FR\",\"und-GA\":\"fr-Latn-GA\",\"und-GE\":\"ka-Geor-GE\",\"und-Geor\":\"ka-Geor-GE\",\"und-GF\":\"fr-Latn-GF\",\"und-GH\":\"ak-Latn-GH\",\"und-GL\":\"kl-Latn-GL\",\"und-Glag\":\"cu-Glag-BG\",\"und-GN\":\"fr-Latn-GN\",\"und-Gong\":\"wsg-Gong-IN\",\"und-Gonm\":\"esg-Gonm-IN\",\"und-Goth\":\"got-Goth-UA\",\"und-GP\":\"fr-Latn-GP\",\"und-GQ\":\"es-Latn-GQ\",\"und-GR\":\"el-Grek-GR\",\"und-Gran\":\"sa-Gran-IN\",\"und-Grek\":\"el-Grek-GR\",\"und-Grek-TR\":\"bgx-Grek-TR\",\"und-GS\":\"und-Latn-GS\",\"und-GT\":\"es-Latn-GT\",\"und-Gujr\":\"gu-Gujr-IN\",\"und-Guru\":\"pa-Guru-IN\",\"und-GW\":\"pt-Latn-GW\",\"und-Hanb\":\"zh-Hanb-TW\",\"und-Hang\":\"ko-Hang-KR\",\"und-Hani\":\"zh-Hani-CN\",\"und-Hano\":\"hnn-Hano-PH\",\"und-Hans\":\"zh-Hans-CN\",\"und-Hant\":\"zh-Hant-TW\",\"und-Hebr\":\"he-Hebr-IL\",\"und-Hebr-CA\":\"yi-Hebr-CA\",\"und-Hebr-GB\":\"yi-Hebr-GB\",\"und-Hebr-SE\":\"yi-Hebr-SE\",\"und-Hebr-UA\":\"yi-Hebr-UA\",\"und-Hebr-US\":\"yi-Hebr-US\",\"und-Hira\":\"ja-Hira-JP\",\"und-HK\":\"zh-Hant-HK\",\"und-Hluw\":\"hlu-Hluw-TR\",\"und-HM\":\"und-Latn-HM\",\"und-Hmng\":\"hnj-Hmng-LA\",\"und-Hmnp\":\"hnj-Hmnp-US\",\"und-HN\":\"es-Latn-HN\",\"und-HR\":\"hr-Latn-HR\",\"und-HT\":\"ht-Latn-HT\",\"und-HU\":\"hu-Latn-HU\",\"und-Hung\":\"hu-Hung-HU\",\"und-IC\":\"es-Latn-IC\",\"und-ID\":\"id-Latn-ID\",\"und-IL\":\"he-Hebr-IL\",\"und-IN\":\"hi-Deva-IN\",\"und-IQ\":\"ar-Arab-IQ\",\"und-IR\":\"fa-Arab-IR\",\"und-IS\":\"is-Latn-IS\",\"und-IT\":\"it-Latn-IT\",\"und-Ital\":\"ett-Ital-IT\",\"und-Jamo\":\"ko-Jamo-KR\",\"und-Java\":\"jv-Java-ID\",\"und-JO\":\"ar-Arab-JO\",\"und-JP\":\"ja-Jpan-JP\",\"und-Jpan\":\"ja-Jpan-JP\",\"und-Kali\":\"eky-Kali-MM\",\"und-Kana\":\"ja-Kana-JP\",\"und-KE\":\"sw-Latn-KE\",\"und-KG\":\"ky-Cyrl-KG\",\"und-KH\":\"km-Khmr-KH\",\"und-Khar\":\"pra-Khar-PK\",\"und-Khmr\":\"km-Khmr-KH\",\"und-Khoj\":\"sd-Khoj-IN\",\"und-Kits\":\"zkt-Kits-CN\",\"und-KM\":\"ar-Arab-KM\",\"und-Knda\":\"kn-Knda-IN\",\"und-Kore\":\"ko-Kore-KR\",\"und-KP\":\"ko-Kore-KP\",\"und-KR\":\"ko-Kore-KR\",\"und-Kthi\":\"bho-Kthi-IN\",\"und-KW\":\"ar-Arab-KW\",\"und-KZ\":\"ru-Cyrl-KZ\",\"und-LA\":\"lo-Laoo-LA\",\"und-Lana\":\"nod-Lana-TH\",\"und-Laoo\":\"lo-Laoo-LA\",\"und-Latn-AF\":\"tk-Latn-AF\",\"und-Latn-AM\":\"ku-Latn-AM\",\"und-Latn-CN\":\"za-Latn-CN\",\"und-Latn-CY\":\"tr-Latn-CY\",\"und-Latn-DZ\":\"fr-Latn-DZ\",\"und-Latn-ET\":\"en-Latn-ET\",\"und-Latn-GE\":\"ku-Latn-GE\",\"und-Latn-IR\":\"tk-Latn-IR\",\"und-Latn-KM\":\"fr-Latn-KM\",\"und-Latn-MA\":\"fr-Latn-MA\",\"und-Latn-MK\":\"sq-Latn-MK\",\"und-Latn-MM\":\"kac-Latn-MM\",\"und-Latn-MO\":\"pt-Latn-MO\",\"und-Latn-MR\":\"fr-Latn-MR\",\"und-Latn-RU\":\"krl-Latn-RU\",\"und-Latn-SY\":\"fr-Latn-SY\",\"und-Latn-TN\":\"fr-Latn-TN\",\"und-Latn-TW\":\"trv-Latn-TW\",\"und-Latn-UA\":\"pl-Latn-UA\",\"und-LB\":\"ar-Arab-LB\",\"und-Lepc\":\"lep-Lepc-IN\",\"und-LI\":\"de-Latn-LI\",\"und-Limb\":\"lif-Limb-IN\",\"und-Lina\":\"lab-Lina-GR\",\"und-Linb\":\"grc-Linb-GR\",\"und-Lisu\":\"lis-Lisu-CN\",\"und-LK\":\"si-Sinh-LK\",\"und-LS\":\"st-Latn-LS\",\"und-LT\":\"lt-Latn-LT\",\"und-LU\":\"fr-Latn-LU\",\"und-LV\":\"lv-Latn-LV\",\"und-LY\":\"ar-Arab-LY\",\"und-Lyci\":\"xlc-Lyci-TR\",\"und-Lydi\":\"xld-Lydi-TR\",\"und-MA\":\"ar-Arab-MA\",\"und-Mahj\":\"hi-Mahj-IN\",\"und-Maka\":\"mak-Maka-ID\",\"und-Mand\":\"myz-Mand-IR\",\"und-Mani\":\"xmn-Mani-CN\",\"und-Marc\":\"bo-Marc-CN\",\"und-MC\":\"fr-Latn-MC\",\"und-MD\":\"ro-Latn-MD\",\"und-ME\":\"sr-Latn-ME\",\"und-Medf\":\"dmf-Medf-NG\",\"und-Mend\":\"men-Mend-SL\",\"und-Merc\":\"xmr-Merc-SD\",\"und-Mero\":\"xmr-Mero-SD\",\"und-MF\":\"fr-Latn-MF\",\"und-MG\":\"mg-Latn-MG\",\"und-MK\":\"mk-Cyrl-MK\",\"und-ML\":\"bm-Latn-ML\",\"und-Mlym\":\"ml-Mlym-IN\",\"und-MM\":\"my-Mymr-MM\",\"und-MN\":\"mn-Cyrl-MN\",\"und-MO\":\"zh-Hant-MO\",\"und-Modi\":\"mr-Modi-IN\",\"und-Mong\":\"mn-Mong-CN\",\"und-MQ\":\"fr-Latn-MQ\",\"und-MR\":\"ar-Arab-MR\",\"und-Mroo\":\"mro-Mroo-BD\",\"und-MT\":\"mt-Latn-MT\",\"und-Mtei\":\"mni-Mtei-IN\",\"und-MU\":\"mfe-Latn-MU\",\"und-Mult\":\"skr-Mult-PK\",\"und-MV\":\"dv-Thaa-MV\",\"und-MX\":\"es-Latn-MX\",\"und-MY\":\"ms-Latn-MY\",\"und-Mymr\":\"my-Mymr-MM\",\"und-Mymr-IN\":\"kht-Mymr-IN\",\"und-Mymr-TH\":\"mnw-Mymr-TH\",\"und-MZ\":\"pt-Latn-MZ\",\"und-NA\":\"af-Latn-NA\",\"und-Nand\":\"sa-Nand-IN\",\"und-Narb\":\"xna-Narb-SA\",\"und-Nbat\":\"arc-Nbat-JO\",\"und-NC\":\"fr-Latn-NC\",\"und-NE\":\"ha-Latn-NE\",\"und-Newa\":\"new-Newa-NP\",\"und-NI\":\"es-Latn-NI\",\"und-Nkoo\":\"man-Nkoo-GN\",\"und-NL\":\"nl-Latn-NL\",\"und-NO\":\"nb-Latn-NO\",\"und-NP\":\"ne-Deva-NP\",\"und-Nshu\":\"zhx-Nshu-CN\",\"und-Ogam\":\"sga-Ogam-IE\",\"und-Olck\":\"sat-Olck-IN\",\"und-OM\":\"ar-Arab-OM\",\"und-Orkh\":\"otk-Orkh-MN\",\"und-Orya\":\"or-Orya-IN\",\"und-Osge\":\"osa-Osge-US\",\"und-Osma\":\"so-Osma-SO\",\"und-Ougr\":\"oui-Ougr-143\",\"und-PA\":\"es-Latn-PA\",\"und-Palm\":\"arc-Palm-SY\",\"und-Pauc\":\"ctd-Pauc-MM\",\"und-PE\":\"es-Latn-PE\",\"und-Perm\":\"kv-Perm-RU\",\"und-PF\":\"fr-Latn-PF\",\"und-PG\":\"tpi-Latn-PG\",\"und-PH\":\"fil-Latn-PH\",\"und-Phag\":\"lzh-Phag-CN\",\"und-Phli\":\"pal-Phli-IR\",\"und-Phlp\":\"pal-Phlp-CN\",\"und-Phnx\":\"phn-Phnx-LB\",\"und-PK\":\"ur-Arab-PK\",\"und-PL\":\"pl-Latn-PL\",\"und-Plrd\":\"hmd-Plrd-CN\",\"und-PM\":\"fr-Latn-PM\",\"und-PR\":\"es-Latn-PR\",\"und-Prti\":\"xpr-Prti-IR\",\"und-PS\":\"ar-Arab-PS\",\"und-PT\":\"pt-Latn-PT\",\"und-PW\":\"pau-Latn-PW\",\"und-PY\":\"gn-Latn-PY\",\"und-QA\":\"ar-Arab-QA\",\"und-QO\":\"en-Latn-DG\",\"und-RE\":\"fr-Latn-RE\",\"und-Rjng\":\"rej-Rjng-ID\",\"und-RO\":\"ro-Latn-RO\",\"und-Rohg\":\"rhg-Rohg-MM\",\"und-RS\":\"sr-Cyrl-RS\",\"und-RU\":\"ru-Cyrl-RU\",\"und-Runr\":\"non-Runr-SE\",\"und-RW\":\"rw-Latn-RW\",\"und-SA\":\"ar-Arab-SA\",\"und-Samr\":\"smp-Samr-IL\",\"und-Sarb\":\"xsa-Sarb-YE\",\"und-Saur\":\"saz-Saur-IN\",\"und-SC\":\"fr-Latn-SC\",\"und-SD\":\"ar-Arab-SD\",\"und-SE\":\"sv-Latn-SE\",\"und-Sgnw\":\"ase-Sgnw-US\",\"und-Shaw\":\"en-Shaw-GB\",\"und-Shrd\":\"sa-Shrd-IN\",\"und-SI\":\"sl-Latn-SI\",\"und-Sidd\":\"sa-Sidd-IN\",\"und-Sind\":\"sd-Sind-IN\",\"und-Sinh\":\"si-Sinh-LK\",\"und-SJ\":\"nb-Latn-SJ\",\"und-SK\":\"sk-Latn-SK\",\"und-SM\":\"it-Latn-SM\",\"und-SN\":\"fr-Latn-SN\",\"und-SO\":\"so-Latn-SO\",\"und-Sogd\":\"sog-Sogd-UZ\",\"und-Sogo\":\"sog-Sogo-UZ\",\"und-Sora\":\"srb-Sora-IN\",\"und-Soyo\":\"cmg-Soyo-MN\",\"und-SR\":\"nl-Latn-SR\",\"und-ST\":\"pt-Latn-ST\",\"und-Sund\":\"su-Sund-ID\",\"und-SV\":\"es-Latn-SV\",\"und-SY\":\"ar-Arab-SY\",\"und-Sylo\":\"syl-Sylo-BD\",\"und-Syrc\":\"syr-Syrc-IQ\",\"und-Tagb\":\"tbw-Tagb-PH\",\"und-Takr\":\"doi-Takr-IN\",\"und-Tale\":\"tdd-Tale-CN\",\"und-Talu\":\"khb-Talu-CN\",\"und-Taml\":\"ta-Taml-IN\",\"und-Tang\":\"txg-Tang-CN\",\"und-Tavt\":\"blt-Tavt-VN\",\"und-TD\":\"fr-Latn-TD\",\"und-Telu\":\"te-Telu-IN\",\"und-TF\":\"fr-Latn-TF\",\"und-Tfng\":\"zgh-Tfng-MA\",\"und-TG\":\"fr-Latn-TG\",\"und-Tglg\":\"fil-Tglg-PH\",\"und-TH\":\"th-Thai-TH\",\"und-Thaa\":\"dv-Thaa-MV\",\"und-Thai\":\"th-Thai-TH\",\"und-Thai-CN\":\"lcp-Thai-CN\",\"und-Thai-KH\":\"kdt-Thai-KH\",\"und-Thai-LA\":\"kdt-Thai-LA\",\"und-Tibt\":\"bo-Tibt-CN\",\"und-Tirh\":\"mai-Tirh-IN\",\"und-TJ\":\"tg-Cyrl-TJ\",\"und-TK\":\"tkl-Latn-TK\",\"und-TL\":\"pt-Latn-TL\",\"und-TM\":\"tk-Latn-TM\",\"und-TN\":\"ar-Arab-TN\",\"und-Tnsa\":\"nst-Tnsa-IN\",\"und-TO\":\"to-Latn-TO\",\"und-Toto\":\"txo-Toto-IN\",\"und-TR\":\"tr-Latn-TR\",\"und-TV\":\"tvl-Latn-TV\",\"und-TW\":\"zh-Hant-TW\",\"und-TZ\":\"sw-Latn-TZ\",\"und-UA\":\"uk-Cyrl-UA\",\"und-UG\":\"sw-Latn-UG\",\"und-Ugar\":\"uga-Ugar-SY\",\"und-UY\":\"es-Latn-UY\",\"und-UZ\":\"uz-Latn-UZ\",\"und-VA\":\"it-Latn-VA\",\"und-Vaii\":\"vai-Vaii-LR\",\"und-VE\":\"es-Latn-VE\",\"und-Vith\":\"sq-Vith-AL\",\"und-VN\":\"vi-Latn-VN\",\"und-VU\":\"bi-Latn-VU\",\"und-Wara\":\"hoc-Wara-IN\",\"und-Wcho\":\"nnp-Wcho-IN\",\"und-WF\":\"fr-Latn-WF\",\"und-WS\":\"sm-Latn-WS\",\"und-XK\":\"sq-Latn-XK\",\"und-Xpeo\":\"peo-Xpeo-IR\",\"und-Xsux\":\"akk-Xsux-IQ\",\"und-YE\":\"ar-Arab-YE\",\"und-Yezi\":\"ku-Yezi-GE\",\"und-Yiii\":\"ii-Yiii-CN\",\"und-YT\":\"fr-Latn-YT\",\"und-Zanb\":\"cmg-Zanb-MN\",\"und-ZW\":\"sn-Latn-ZW\",unr:\"unr-Beng-IN\",\"unr-Deva\":\"unr-Deva-NP\",\"unr-NP\":\"unr-Deva-NP\",unx:\"unx-Beng-IN\",uok:\"uok-Latn-ZZ\",ur:\"ur-Arab-PK\",uri:\"uri-Latn-ZZ\",urt:\"urt-Latn-ZZ\",urw:\"urw-Latn-ZZ\",usa:\"usa-Latn-ZZ\",uth:\"uth-Latn-ZZ\",utr:\"utr-Latn-ZZ\",uvh:\"uvh-Latn-ZZ\",uvl:\"uvl-Latn-ZZ\",uz:\"uz-Latn-UZ\",\"uz-AF\":\"uz-Arab-AF\",\"uz-Arab\":\"uz-Arab-AF\",\"uz-CN\":\"uz-Cyrl-CN\",vag:\"vag-Latn-ZZ\",vai:\"vai-Vaii-LR\",van:\"van-Latn-ZZ\",ve:\"ve-Latn-ZA\",vec:\"vec-Latn-IT\",vep:\"vep-Latn-RU\",vi:\"vi-Latn-VN\",vic:\"vic-Latn-SX\",viv:\"viv-Latn-ZZ\",vls:\"vls-Latn-BE\",vmf:\"vmf-Latn-DE\",vmw:\"vmw-Latn-MZ\",vo:\"vo-Latn-001\",vot:\"vot-Latn-RU\",vro:\"vro-Latn-EE\",vun:\"vun-Latn-TZ\",vut:\"vut-Latn-ZZ\",wa:\"wa-Latn-BE\",wae:\"wae-Latn-CH\",waj:\"waj-Latn-ZZ\",wal:\"wal-Ethi-ET\",wan:\"wan-Latn-ZZ\",war:\"war-Latn-PH\",wbp:\"wbp-Latn-AU\",wbq:\"wbq-Telu-IN\",wbr:\"wbr-Deva-IN\",wci:\"wci-Latn-ZZ\",wer:\"wer-Latn-ZZ\",wgi:\"wgi-Latn-ZZ\",whg:\"whg-Latn-ZZ\",wib:\"wib-Latn-ZZ\",wiu:\"wiu-Latn-ZZ\",wiv:\"wiv-Latn-ZZ\",wja:\"wja-Latn-ZZ\",wji:\"wji-Latn-ZZ\",wls:\"wls-Latn-WF\",wmo:\"wmo-Latn-ZZ\",wnc:\"wnc-Latn-ZZ\",wni:\"wni-Arab-KM\",wnu:\"wnu-Latn-ZZ\",wo:\"wo-Latn-SN\",wob:\"wob-Latn-ZZ\",wos:\"wos-Latn-ZZ\",wrs:\"wrs-Latn-ZZ\",wsg:\"wsg-Gong-IN\",wsk:\"wsk-Latn-ZZ\",wtm:\"wtm-Deva-IN\",wuu:\"wuu-Hans-CN\",wuv:\"wuv-Latn-ZZ\",wwa:\"wwa-Latn-ZZ\",xav:\"xav-Latn-BR\",xbi:\"xbi-Latn-ZZ\",xco:\"xco-Chrs-UZ\",xcr:\"xcr-Cari-TR\",xes:\"xes-Latn-ZZ\",xh:\"xh-Latn-ZA\",xla:\"xla-Latn-ZZ\",xlc:\"xlc-Lyci-TR\",xld:\"xld-Lydi-TR\",xmf:\"xmf-Geor-GE\",xmn:\"xmn-Mani-CN\",xmr:\"xmr-Merc-SD\",xna:\"xna-Narb-SA\",xnr:\"xnr-Deva-IN\",xog:\"xog-Latn-UG\",xon:\"xon-Latn-ZZ\",xpr:\"xpr-Prti-IR\",xrb:\"xrb-Latn-ZZ\",xsa:\"xsa-Sarb-YE\",xsi:\"xsi-Latn-ZZ\",xsm:\"xsm-Latn-ZZ\",xsr:\"xsr-Deva-NP\",xwe:\"xwe-Latn-ZZ\",yam:\"yam-Latn-ZZ\",yao:\"yao-Latn-MZ\",yap:\"yap-Latn-FM\",yas:\"yas-Latn-ZZ\",yat:\"yat-Latn-ZZ\",yav:\"yav-Latn-CM\",yay:\"yay-Latn-ZZ\",yaz:\"yaz-Latn-ZZ\",yba:\"yba-Latn-ZZ\",ybb:\"ybb-Latn-CM\",yby:\"yby-Latn-ZZ\",yer:\"yer-Latn-ZZ\",ygr:\"ygr-Latn-ZZ\",ygw:\"ygw-Latn-ZZ\",yi:\"yi-Hebr-001\",yko:\"yko-Latn-ZZ\",yle:\"yle-Latn-ZZ\",ylg:\"ylg-Latn-ZZ\",yll:\"yll-Latn-ZZ\",yml:\"yml-Latn-ZZ\",yo:\"yo-Latn-NG\",yon:\"yon-Latn-ZZ\",yrb:\"yrb-Latn-ZZ\",yre:\"yre-Latn-ZZ\",yrl:\"yrl-Latn-BR\",yss:\"yss-Latn-ZZ\",yua:\"yua-Latn-MX\",yue:\"yue-Hant-HK\",\"yue-CN\":\"yue-Hans-CN\",\"yue-Hans\":\"yue-Hans-CN\",yuj:\"yuj-Latn-ZZ\",yut:\"yut-Latn-ZZ\",yuw:\"yuw-Latn-ZZ\",za:\"za-Latn-CN\",zag:\"zag-Latn-SD\",zdj:\"zdj-Arab-KM\",zea:\"zea-Latn-NL\",zgh:\"zgh-Tfng-MA\",zh:\"zh-Hans-CN\",\"zh-AU\":\"zh-Hant-AU\",\"zh-BN\":\"zh-Hant-BN\",\"zh-Bopo\":\"zh-Bopo-TW\",\"zh-GB\":\"zh-Hant-GB\",\"zh-GF\":\"zh-Hant-GF\",\"zh-Hanb\":\"zh-Hanb-TW\",\"zh-Hant\":\"zh-Hant-TW\",\"zh-HK\":\"zh-Hant-HK\",\"zh-ID\":\"zh-Hant-ID\",\"zh-MO\":\"zh-Hant-MO\",\"zh-PA\":\"zh-Hant-PA\",\"zh-PF\":\"zh-Hant-PF\",\"zh-PH\":\"zh-Hant-PH\",\"zh-SR\":\"zh-Hant-SR\",\"zh-TH\":\"zh-Hant-TH\",\"zh-TW\":\"zh-Hant-TW\",\"zh-US\":\"zh-Hant-US\",\"zh-VN\":\"zh-Hant-VN\",zhx:\"zhx-Nshu-CN\",zia:\"zia-Latn-ZZ\",zkt:\"zkt-Kits-CN\",zlm:\"zlm-Latn-TG\",zmi:\"zmi-Latn-MY\",zne:\"zne-Latn-ZZ\",zu:\"zu-Latn-ZA\",zza:\"zza-Latn-TR\"}}));n(u),u.likelySubtags;var Z=a((function(a,n){function r(a){for(var n={},t=[],r=0,e=a;r<e.length;r++){var L=e[r];L[0]in n||(n[L[0]]=1,L[1]&&\"true\"!==L[1]?t.push([L[0].toLowerCase(),L[1].toLowerCase()]):t.push([L[0].toLowerCase()]))}return t.sort(Z)}function Z(a,n){return a[0]<n[0]?-1:a[0]>n[0]?1:0}function d(a,n){return a.type<n.type?-1:a.type>n.type?1:0}function o(a,n){for(var r=(0,t.__spreadArray)([],a,!0),e=0,L=n;e<L.length;e++){var i=L[e];a.indexOf(i)<0&&r.push(i)}return r}function s(a){var n=a;if(a.variants.length)for(var t=\"\",r=0,Z=a.variants;r<Z.length;r++){var d=Z[r];if(t=i.languageAlias[(0,L.emitUnicodeLanguageId)({lang:a.lang,variants:[d]})]){n={lang:(g=(0,e.parseUnicodeLanguageId)(t.split(e.SEPARATOR))).lang,script:n.script||g.script,region:n.region||g.region,variants:o(n.variants,g.variants)};break}}if(n.script&&n.region){var s=i.languageAlias[(0,L.emitUnicodeLanguageId)({lang:n.lang,script:n.script,region:n.region,variants:[]})];if(s)n={lang:(g=(0,e.parseUnicodeLanguageId)(s.split(e.SEPARATOR))).lang,script:g.script,region:g.region,variants:n.variants}}if(n.region){var l=i.languageAlias[(0,L.emitUnicodeLanguageId)({lang:n.lang,region:n.region,variants:[]})];if(l)n={lang:(g=(0,e.parseUnicodeLanguageId)(l.split(e.SEPARATOR))).lang,script:n.script||g.script,region:g.region,variants:n.variants}}var g,b=i.languageAlias[(0,L.emitUnicodeLanguageId)({lang:n.lang,variants:[]})];b&&(n={lang:(g=(0,e.parseUnicodeLanguageId)(b.split(e.SEPARATOR))).lang,script:n.script||g.script,region:n.region||g.region,variants:n.variants});if(n.region){var c=n.region.toUpperCase(),m=i.territoryAlias[c],k=void 0;if(m){var h=m.split(\" \");k=h[0];var p=u.likelySubtags[(0,L.emitUnicodeLanguageId)({lang:n.lang,script:n.script,variants:[]})];if(p){var f=(0,e.parseUnicodeLanguageId)(p.split(e.SEPARATOR)).region;f&&h.indexOf(f)>-1&&(k=f)}}k&&(n.region=k),n.region=n.region.toUpperCase()}if(n.script&&(n.script=n.script[0].toUpperCase()+n.script.slice(1).toLowerCase(),i.scriptAlias[n.script]&&(n.script=i.scriptAlias[n.script])),n.variants.length){for(var y=0;y<n.variants.length;y++){d=n.variants[y].toLowerCase();if(i.variantAlias[d]){var A=i.variantAlias[d];(0,e.isUnicodeVariantSubtag)(A)?n.variants[y]=A:(0,e.isUnicodeLanguageSubtag)(A)&&(n.lang=A)}}n.variants.sort()}return n}Object.defineProperty(n,\"__esModule\",{value:!0}),n.canonicalizeUnicodeLocaleId=n.canonicalizeUnicodeLanguageId=void 0,n.canonicalizeUnicodeLanguageId=s,n.canonicalizeUnicodeLocaleId=function(a){if(a.lang=s(a.lang),a.extensions){for(var n=0,t=a.extensions;n<t.length;n++){var e=t[n];switch(e.type){case\"u\":e.keywords=r(e.keywords),e.attributes&&(e.attributes=(L=e.attributes,Object.keys(L.reduce((function(a,n){return a[n.toLowerCase()]=1,a}),{})).sort()));break;case\"t\":e.lang&&(e.lang=s(e.lang)),e.fields=r(e.fields);break;default:e.value=e.value.toLowerCase()}}a.extensions.sort(d)}var L;return a}}));n(Z),Z.canonicalizeUnicodeLocaleId,Z.canonicalizeUnicodeLanguageId;var d=a((function(a,n){Object.defineProperty(n,\"__esModule\",{value:!0})}));n(d);var o=a((function(a,n){Object.defineProperty(n,\"__esModule\",{value:!0}),n.isUnicodeLanguageSubtag=n.isUnicodeScriptSubtag=n.isUnicodeRegionSubtag=n.isStructurallyValidLanguageTag=n.parseUnicodeLanguageId=n.parseUnicodeLocaleId=n.getCanonicalLocales=void 0,n.getCanonicalLocales=function(a){return function(a){if(void 0===a)return[];var n=[];\"string\"==typeof a&&(a=[a]);for(var t=0,r=a;t<r.length;t++){var i=r[t],u=(0,L.emitUnicodeLocaleId)((0,Z.canonicalizeUnicodeLocaleId)((0,e.parseUnicodeLocaleId)(i)));n.indexOf(u)<0&&n.push(u)}return n}(a)};var r=e;Object.defineProperty(n,\"parseUnicodeLocaleId\",{enumerable:!0,get:function(){return r.parseUnicodeLocaleId}}),Object.defineProperty(n,\"parseUnicodeLanguageId\",{enumerable:!0,get:function(){return r.parseUnicodeLanguageId}}),Object.defineProperty(n,\"isStructurallyValidLanguageTag\",{enumerable:!0,get:function(){return r.isStructurallyValidLanguageTag}}),Object.defineProperty(n,\"isUnicodeRegionSubtag\",{enumerable:!0,get:function(){return r.isUnicodeRegionSubtag}}),Object.defineProperty(n,\"isUnicodeScriptSubtag\",{enumerable:!0,get:function(){return r.isUnicodeScriptSubtag}}),Object.defineProperty(n,\"isUnicodeLanguageSubtag\",{enumerable:!0,get:function(){return r.isUnicodeLanguageSubtag}}),(0,t.__exportStar)(d,n),(0,t.__exportStar)(L,n),(0,t.__exportStar)(u,n)}));n(o),o.isUnicodeLanguageSubtag,o.isUnicodeScriptSubtag,o.isUnicodeRegionSubtag,o.isStructurallyValidLanguageTag,o.parseUnicodeLanguageId,o.parseUnicodeLocaleId,o.getCanonicalLocales;var s=a((function(a,n){Object.defineProperty(n,\"__esModule\",{value:!0});var t=new WeakMap;n.default=function(a){var n=t.get(a);return n||(n=Object.create(null),t.set(a,n)),n}}));n(s);var l=a((function(a,n){Object.defineProperty(n,\"__esModule\",{value:!0}),n.Locale=void 0;var e=(0,t.__importDefault)(s),L=[\"ca\",\"co\",\"hc\",\"kf\",\"kn\",\"nu\"],i=/^[a-z0-9]{3,8}(-[a-z0-9]{3,8})*$/i;function u(a,n,r,e,L){return void 0===e&&(e=[]),L?{lang:a&&\"und\"!==a?a:L.lang,script:n||L.script,region:r||L.region,variants:(0,t.__spreadArray)((0,t.__spreadArray)([],e,!0),L.variants,!0)}:{lang:a||\"und\",script:n,region:r,variants:e}}function Z(a){var n=(0,o.parseUnicodeLocaleId)(a),t=n.lang,r=t.lang,e=t.script,L=t.region,i=t.variants;if(e&&L){var Z=o.likelySubtags[(0,o.emitUnicodeLanguageId)({lang:r,script:e,region:L,variants:[]})];if(Z){var d=(0,o.parseUnicodeLanguageId)(Z);return n.lang=u(void 0,void 0,void 0,i,d),(0,o.emitUnicodeLocaleId)(n)}}if(e){var s=o.likelySubtags[(0,o.emitUnicodeLanguageId)({lang:r,script:e,variants:[]})];if(s){var l=(0,o.parseUnicodeLanguageId)(s);return n.lang=u(void 0,void 0,L,i,l),(0,o.emitUnicodeLocaleId)(n)}}if(L){var g=o.likelySubtags[(0,o.emitUnicodeLanguageId)({lang:r,region:L,variants:[]})];if(g){var b=(0,o.parseUnicodeLanguageId)(g);return n.lang=u(void 0,e,void 0,i,b),(0,o.emitUnicodeLocaleId)(n)}}var c=o.likelySubtags[r]||o.likelySubtags[(0,o.emitUnicodeLanguageId)({lang:\"und\",script:e,variants:[]})];if(!c)throw new Error(\"No match for addLikelySubtags\");var m=(0,o.parseUnicodeLanguageId)(c);return n.lang=u(void 0,e,L,i,m),(0,o.emitUnicodeLocaleId)(n)}var d=function(){function a(n,L){if(!(this&&this instanceof a?this.constructor:void 0))throw new TypeError(\"Intl.Locale must be called with 'new'\");var u,Z=a.relevantExtensionKeys;if(Z.indexOf(\"kf\"),Z.indexOf(\"kn\"),void 0===n)throw new TypeError(\"First argument to Intl.Locale constructor can't be empty or missing\");if(\"string\"!=typeof n&&\"object\"!=typeof n)throw new TypeError(\"tag must be a string or object\");n=\"object\"==typeof n&&(u=(0,e.default)(n))&&u.initializedLocale?u.locale:n.toString(),u=(0,e.default)(this);var d=(0,r.CoerceOptionsToObject)(L);n=function(a,n){(0,r.invariant)(\"string\"==typeof a,\"language tag must be a string\"),(0,r.invariant)((0,o.isStructurallyValidLanguageTag)(a),\"malformed language tag\",RangeError);var e=(0,r.GetOption)(n,\"language\",\"string\",void 0,void 0);void 0!==e&&(0,r.invariant)((0,o.isUnicodeLanguageSubtag)(e),\"Malformed unicode_language_subtag\",RangeError);var L=(0,r.GetOption)(n,\"script\",\"string\",void 0,void 0);void 0!==L&&(0,r.invariant)((0,o.isUnicodeScriptSubtag)(L),\"Malformed unicode_script_subtag\",RangeError);var i=(0,r.GetOption)(n,\"region\",\"string\",void 0,void 0);void 0!==i&&(0,r.invariant)((0,o.isUnicodeRegionSubtag)(i),\"Malformed unicode_region_subtag\",RangeError);var u=(0,o.parseUnicodeLanguageId)(a);return void 0!==e&&(u.lang=e),void 0!==L&&(u.script=L),void 0!==i&&(u.region=i),Intl.getCanonicalLocales((0,o.emitUnicodeLocaleId)((0,t.__assign)((0,t.__assign)({},(0,o.parseUnicodeLocaleId)(a)),{lang:u})))[0]}(n,d);var s=Object.create(null),l=(0,r.GetOption)(d,\"calendar\",\"string\",void 0,void 0);if(void 0!==l&&!i.test(l))throw new RangeError(\"invalid calendar\");s.ca=l;var g=(0,r.GetOption)(d,\"collation\",\"string\",void 0,void 0);if(void 0!==g&&!i.test(g))throw new RangeError(\"invalid collation\");s.co=g;var b=(0,r.GetOption)(d,\"hourCycle\",\"string\",[\"h11\",\"h12\",\"h23\",\"h24\"],void 0);s.hc=b;var c=(0,r.GetOption)(d,\"caseFirst\",\"string\",[\"upper\",\"lower\",\"false\"],void 0);s.kf=c;var m,k=(0,r.GetOption)(d,\"numeric\",\"boolean\",void 0,void 0);void 0!==k&&(m=String(k)),s.kn=m;var h=(0,r.GetOption)(d,\"numberingSystem\",\"string\",void 0,void 0);if(void 0!==h&&!i.test(h))throw new RangeError(\"Invalid numberingSystem\");s.nu=h;var p=function(a,n,t){for(var e,L=[],i=(0,o.parseUnicodeLocaleId)(a),u=0,Z=i.extensions;u<Z.length;u++){var d=Z[u];\"u\"===d.type&&(e=d,Array.isArray(d.keywords)&&(L=d.keywords))}for(var s=Object.create(null),l=0,g=t;l<g.length;l++){for(var b=g[l],c=void 0,m=void 0,k=0,h=L;k<h.length;k++){var p=h[k];p[0]===b&&(c=(m=p)[1])}(0,r.invariant)(b in n,\"\".concat(b,\" must be in options\"));var f=n[b];void 0!==f&&((0,r.invariant)(\"string\"==typeof f,\"Value for \".concat(b,\" must be a string\")),c=f,m?m[1]=c:L.push([b,c])),s[b]=c}return e?e.keywords=L:L.length&&i.extensions.push({type:\"u\",keywords:L,attributes:[]}),s.locale=Intl.getCanonicalLocales((0,o.emitUnicodeLocaleId)(i))[0],s}(n,s,Z);u.locale=p.locale,u.calendar=p.ca,u.collation=p.co,u.hourCycle=p.hc,Z.indexOf(\"kf\")>-1&&(u.caseFirst=p.kf),Z.indexOf(\"kn\")>-1&&(u.numeric=(0,r.SameValue)(p.kn,\"true\")),u.numberingSystem=p.nu}return a.prototype.maximize=function(){var n=(0,e.default)(this).locale;try{return new a(Z(n))}catch(t){return new a(n)}},a.prototype.minimize=function(){var n=(0,e.default)(this).locale;try{return new a(function(a){var n=Z(a);if(!n)return a;n=(0,o.emitUnicodeLanguageId)((0,t.__assign)((0,t.__assign)({},(0,o.parseUnicodeLanguageId)(n)),{variants:[]}));var r=(0,o.parseUnicodeLocaleId)(a),e=r.lang,L=e.lang,i=e.script,d=e.region,s=e.variants;return Z((0,o.emitUnicodeLanguageId)({lang:L,variants:[]}))===n?(0,o.emitUnicodeLocaleId)((0,t.__assign)((0,t.__assign)({},r),{lang:u(L,void 0,void 0,s)})):d&&Z((0,o.emitUnicodeLanguageId)({lang:L,region:d,variants:[]}))===n?(0,o.emitUnicodeLocaleId)((0,t.__assign)((0,t.__assign)({},r),{lang:u(L,void 0,d,s)})):i&&Z((0,o.emitUnicodeLanguageId)({lang:L,script:i,variants:[]}))===n?(0,o.emitUnicodeLocaleId)((0,t.__assign)((0,t.__assign)({},r),{lang:u(L,i,void 0,s)})):a}(n))}catch(t){return new a(n)}},a.prototype.toString=function(){return(0,e.default)(this).locale},Object.defineProperty(a.prototype,\"baseName\",{get:function(){var a=(0,e.default)(this).locale;return(0,o.emitUnicodeLanguageId)((0,o.parseUnicodeLanguageId)(a))},enumerable:!1,configurable:!0}),Object.defineProperty(a.prototype,\"calendar\",{get:function(){return(0,e.default)(this).calendar},enumerable:!1,configurable:!0}),Object.defineProperty(a.prototype,\"collation\",{get:function(){return(0,e.default)(this).collation},enumerable:!1,configurable:!0}),Object.defineProperty(a.prototype,\"hourCycle\",{get:function(){return(0,e.default)(this).hourCycle},enumerable:!1,configurable:!0}),Object.defineProperty(a.prototype,\"caseFirst\",{get:function(){return(0,e.default)(this).caseFirst},enumerable:!1,configurable:!0}),Object.defineProperty(a.prototype,\"numeric\",{get:function(){return(0,e.default)(this).numeric},enumerable:!1,configurable:!0}),Object.defineProperty(a.prototype,\"numberingSystem\",{get:function(){return(0,e.default)(this).numberingSystem},enumerable:!1,configurable:!0}),Object.defineProperty(a.prototype,\"language\",{get:function(){var a=(0,e.default)(this).locale;return(0,o.parseUnicodeLanguageId)(a).lang},enumerable:!1,configurable:!0}),Object.defineProperty(a.prototype,\"script\",{get:function(){var a=(0,e.default)(this).locale;return(0,o.parseUnicodeLanguageId)(a).script},enumerable:!1,configurable:!0}),Object.defineProperty(a.prototype,\"region\",{get:function(){var a=(0,e.default)(this).locale;return(0,o.parseUnicodeLanguageId)(a).region},enumerable:!1,configurable:!0}),a.relevantExtensionKeys=L,a}();n.Locale=d;try{\"undefined\"!=typeof Symbol&&Object.defineProperty(d.prototype,Symbol.toStringTag,{value:\"Intl.Locale\",writable:!1,enumerable:!1,configurable:!0}),Object.defineProperty(d.prototype.constructor,\"length\",{value:1,writable:!1,enumerable:!1,configurable:!0})}catch(a){}n.default=d}));n(l),l.Locale;var g=a((function(a,n){Object.defineProperty(n,\"__esModule\",{value:!0}),n.shouldPolyfill=void 0,n.shouldPolyfill=function(){return!(\"Locale\"in Intl)||function(){try{return\"x-private\"===new Intl.Locale(\"und-x-private\").toString()}catch(a){return!0}}()}}));n(g),g.shouldPolyfill;var b=a((function(a,n){Object.defineProperty(n,\"__esModule\",{value:!0}),(0,g.shouldPolyfill)()&&Object.defineProperty(Intl,\"Locale\",{value:l.Locale,writable:!0,enumerable:!1,configurable:!0})})),c=n(b);export{b as __moduleExports,c as default};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.ad739743.js",
    "content": "\"DateTimeFormat\"in Intl&&Intl.DateTimeFormat.__addTZData&&Intl.DateTimeFormat.__addTZData({zones:[\"Africa/Accra|,0,0,0|-u9rgl5,0,0,0|-u9rgl4,1,1,0|NaN,1,1,0\",\"Africa/Addis_Ababa|,0,2,0|-w6p5hh,0,2,0|-w6p5hg,2,3,0|-lnsey1,2,3,0|-lnsey0,3,4,0|-kvcdo1,3,4,0|-kvcdo0,2,3,0|-h80ka1,2,3,0|-h80ka0,4,5,0|-eb6ib1,4,5,0|-eb6ib0,3,4,0|NaN,3,4,0\",\"Africa/Algiers|,0,6,0|-154gb8d,0,6,0|-154gb8c,5,7,0|-uozn3m,5,7,0|-uozn3l,6,1,0|-ry2lg1,6,1,0|-ry2lg0,7,8,1|-rsgqs1,7,8,1|-rsgqs0,6,1,0|-rjiis1,6,1,0|-rjiis0,7,8,1|-r9dpg1,7,8,1|-r9dpg0,6,1,0|-r1idg1,6,1,0|-r1idg0,7,8,1|-qqnms1,7,8,1|-qqnms0,6,1,0|-qj59g1,6,1,0|-qj59g0,7,8,1|-q7xk41,7,8,1|-q7xk40,6,1,0|-q15441,6,1,0|-q15440,7,8,1|-po6g41,7,8,1|-po6g40,6,1,0|-pgvhg1,6,1,0|-pgvhg0,7,8,1|-pbs5g1,7,8,1|-pbs5g0,6,1,0|-fte841,6,1,0|-fte840,7,8,1|-fpw801,7,8,1|-fpw800,6,1,0|-fkul41,6,1,0|-fkul40,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d62o01,9,9,1|-d62o00,8,8,0|-cx0nw1,8,8,0|-cx0nw0,9,9,1|-cofk41,9,9,1|-cofk40,8,8,0|-c4kqs1,8,8,0|-c4kqs0,6,1,0|-79mio1,6,1,0|-79mio0,8,8,0|-3i8is1,8,8,0|-3i8is0,6,1,0|oot7z,6,1,0|oot80,7,8,1|wlzvz,7,8,1|wlzw0,6,1,0|3tynzz,6,1,0|3tyo00,7,8,1|42lp7z,7,8,1|42lp80,8,8,0|4aiynz,8,8,0|4aiyo0,9,9,1|4jw2rz,9,9,1|4jw2s0,8,8,0|54et7z,8,8,0|54et80,6,1,0|5drxbz,6,1,0|5drxc0,7,8,1|5ni03z,7,8,1|5ni040,6,1,0|5wuynz,6,1,0|5wuyo0,8,8,0|NaN,8,8,0\",\"Africa/Asmara|,0,2,0|-w6p5hh,0,2,0|-w6p5hg,2,3,0|-lnsey1,2,3,0|-lnsey0,3,4,0|-kvcdo1,3,4,0|-kvcdo0,2,3,0|-h80ka1,2,3,0|-h80ka0,4,5,0|-eb6ib1,4,5,0|-eb6ib0,3,4,0|NaN,3,4,0\",\"Africa/Bamako|,0,0,0|-u9rgl5,0,0,0|-u9rgl4,1,1,0|NaN,1,1,0\",\"Africa/Bangui|,0,10,0|-xnxnao,0,10,0|-xnxnan,1,1,0|-w3k001,1,1,0|-w3k000,0,10,0|-t85smo,0,10,0|-t85smn,10,11,0|-q9qc21,10,11,0|-q9qc20,11,8,0|NaN,11,8,0\",\"Africa/Banjul|,0,0,0|-u9rgl5,0,0,0|-u9rgl4,1,1,0|NaN,1,1,0\",\"Africa/Bissau|,0,12,0|-u9rek1,0,12,0|-u9rek0,12,13,0|2lxk3z,12,13,0|2lxk40,1,1,0|NaN,1,1,0\",\"Africa/Blantyre|,0,14,0|-yvtfd9,0,14,0|-yvtfd8,13,9,0|NaN,13,9,0\",\"Africa/Brazzaville|,0,10,0|-xnxnao,0,10,0|-xnxnan,1,1,0|-w3k001,1,1,0|-w3k000,0,10,0|-t85smo,0,10,0|-t85smn,10,11,0|-q9qc21,10,11,0|-q9qc20,11,8,0|NaN,11,8,0\",\"Africa/Bujumbura|,0,14,0|-yvtfd9,0,14,0|-yvtfd8,13,9,0|NaN,13,9,0\",\"Africa/Cairo|,0,15,0|-1054wgm,0,15,0|-1054wgl,14,9,0|-fdls81,14,9,0|-fdls80,15,4,1|-f9lf01,15,4,1|-f9lf00,14,9,0|-ezidk1,14,9,0|-ezidk0,15,4,1|-erl9o1,15,4,1|-erl9o0,14,9,0|-ehgdk1,14,9,0|-ehgdk0,15,4,1|-e6pf01,15,4,1|-e6pf00,14,9,0|-dyog81,14,9,0|-dyog80,15,4,1|-dno8c1,15,4,1|-dno8c0,14,9,0|-dfuo81,14,9,0|-dfuo80,15,4,1|-d4ugc1,15,4,1|-d4ugc0,14,9,0|-cwayw1,14,9,0|-cwayw0,15,4,1|-cm2j01,15,4,1|-cm2j00,14,9,0|-6lluw1,14,9,0|-6lluw0,15,4,1|-6e79o1,15,4,1|-6e79o0,14,9,0|-63alk1,14,9,0|-63alk0,15,4,1|-5vfcc1,15,4,1|-5vfcc0,14,9,0|-5kilg1,14,9,0|-5kilg0,15,4,1|-5cp1c1,15,4,1|-5cp1c0,14,9,0|-51otg1,14,9,0|-51otg0,15,4,1|-4tv9c1,15,4,1|-4tv9c0,14,9,0|-4iww41,14,9,0|-4iww40,15,4,1|-4b3c01,15,4,1|-4b3c00,14,9,0|-404ys1,14,9,0|-404ys0,15,4,1|-3sbeo1,15,4,1|-3sbeo0,14,9,0|-3hd1g1,14,9,0|-3hd1g0,15,4,1|-39jhc1,15,4,1|-39jhc0,14,9,0|-2yj9g1,14,9,0|-2yj9g0,15,4,1|-2qppc1,15,4,1|-2qppc0,14,9,0|-2frc41,14,9,0|-2frc40,15,4,1|-27xs01,15,4,1|-27xs00,14,9,0|-1wzes1,14,9,0|-1wzes0,15,4,1|-1p4001,15,4,1|-1p4000,14,9,0|-1e7hg1,14,9,0|-1e7hg0,15,4,1|-16c2o1,15,4,1|-16c2o0,14,9,0|-vdpg1,14,9,0|-vdpg0,15,4,1|-niao1,15,4,1|-niao0,14,9,0|-cls41,14,9,0|-cls40,15,4,1|-4qdc1,15,4,1|-4qdc0,14,9,0|6657z,14,9,0|66580,15,4,1|e1jzz,15,4,1|e1k00,14,9,0|oy2jz,14,9,0|oy2k0,15,4,1|wthbz,15,4,1|wthc0,14,9,0|17rujz,14,9,0|17ruk0,15,4,1|1fn9bz,15,4,1|1fn9c0,14,9,0|1qjrvz,14,9,0|1qjrw0,15,4,1|1yf6nz,15,4,1|1yf6o0,14,9,0|29bp7z,14,9,0|29bp80,15,4,1|2h73zz,15,4,1|2h7400,14,9,0|2s3mjz,14,9,0|2s3mk0,15,4,1|2zz1bz,15,4,1|2zz1c0,14,9,0|3axejz,14,9,0|3axek0,15,4,1|3istbz,15,4,1|3istc0,14,9,0|3tpbvz,14,9,0|3tpbw0,15,4,1|41kqnz,15,4,1|41kqo0,14,9,0|4ch97z,14,9,0|4ch980,15,4,1|4kcnzz,15,4,1|4kco00,14,9,0|4v96jz,14,9,0|4v96k0,15,4,1|534lbz,15,4,1|534lc0,14,9,0|5e2yjz,14,9,0|5e2yk0,15,4,1|5lydbz,15,4,1|5lydc0,14,9,0|5wuvvz,14,9,0|5wuvw0,15,4,1|64qanz,15,4,1|64qao0,14,9,0|6k07vz,14,9,0|6k07w0,15,4,1|6ni7zz,15,4,1|6ni800,14,9,0|7242jz,14,9,0|7242k0,15,4,1|76a5bz,15,4,1|76a5c0,14,9,0|7h8ijz,14,9,0|7h8ik0,15,4,1|7p3xbz,15,4,1|7p3xc0,14,9,0|800fvz,14,9,0|800fw0,15,4,1|87vunz,15,4,1|87vuo0,14,9,0|8isd7z,14,9,0|8isd80,15,4,1|8qnrzz,15,4,1|8qns00,14,9,0|91kajz,14,9,0|91kak0,15,4,1|99fpbz,15,4,1|99fpc0,14,9,0|9ke2jz,14,9,0|9ke2k0,15,4,1|9s9hbz,15,4,1|9s9hc0,14,9,0|a3f97z,14,9,0|a3f980,15,4,1|ab1enz,15,4,1|ab1eo0,14,9,0|alxx7z,14,9,0|alxx80,15,4,1|attbzz,15,4,1|attc00,14,9,0|b4pujz,14,9,0|b4puk0,15,4,1|bcl9bz,15,4,1|bcl9c0,14,9,0|bnjmjz,14,9,0|bnjmk0,15,4,1|bvf1bz,15,4,1|bvf1c0,14,9,0|c6bjvz,14,9,0|c6bjw0,15,4,1|ce6ynz,15,4,1|ce6yo0,14,9,0|cp3h7z,14,9,0|cp3h80,15,4,1|cwyvzz,15,4,1|cwyw00,14,9,0|d7prrz,14,9,0|d7prs0,15,4,1|dfmvnz,15,4,1|dfmvo0,14,9,0|dqfufz,14,9,0|dqfug0,15,4,1|dycybz,15,4,1|dycyc0,14,9,0|e95x3z,14,9,0|e95x40,15,4,1|eh30zz,15,4,1|eh3100,14,9,0|ervzrz,14,9,0|ervzs0,15,4,1|ezt3nz,15,4,1|ezt3o0,14,9,0|faz13z,14,9,0|faz140,15,4,1|fiw4zz,15,4,1|fiw500,14,9,0|ftp3rz,14,9,0|ftp3s0,15,4,1|g1m7nz,15,4,1|g1m7o0,14,9,0|gcf6fz,14,9,0|gcf6g0,15,4,1|gkcabz,15,4,1|gkcac0,14,9,0|gv593z,14,9,0|gv5940,15,4,1|h32czz,15,4,1|h32d00,14,9,0|hdvbrz,14,9,0|hdvbs0,15,4,1|hlsfnz,15,4,1|hlsfo0,14,9,0|hwyd3z,14,9,0|hwyd40,15,4,1|i4vgzz,15,4,1|i4vh00,14,9,0|ifofrz,14,9,0|ifofs0,15,4,1|inljnz,15,4,1|inljo0,14,9,0|iyeifz,14,9,0|iyeig0,15,4,1|j5ynnz,15,4,1|j5yno0,14,9,0|jh4l3z,14,9,0|jh4l40,15,4,1|jnyszz,15,4,1|jnyt00,14,9,0|jzunrz,14,9,0|jzuns0,15,4,1|k6bwzz,15,4,1|k6bx00,14,9,0|kikqfz,14,9,0|kikqg0,15,4,1|kop0zz,15,4,1|kop100,14,9,0|l1nrrz,14,9,0|l1nrs0,15,4,1|l6yfnz,15,4,1|l6yfo0,14,9,0|l8i2fz,14,9,0|l8i2g0,15,4,1|l9kvnz,15,4,1|l9kvo0,14,9,0|n5myfz,14,9,0|n5myg0,15,4,1|n7snnz,15,4,1|n7sno0,14,9,0|n9ljrz,14,9,0|n9ljs0,15,4,1|nch6bz,15,4,1|nch6c0,14,9,0|NaN,14,9,0\",\"Africa/Casablanca|,0,16,0|-tblt9h,0,16,0|-tblt9g,16,1,0|-fte5c1,16,1,0|-fte5c0,17,8,1|-fpwas1,17,8,1|-fpwas0,16,1,0|-fkuqo1,16,1,0|-fkuqo0,17,8,1|-cl6w41,17,8,1|-cl6w40,16,1,0|-a7hmo1,16,1,0|-a7hmo0,17,8,1|-a0ag41,17,8,1|-a0ag40,16,1,0|-1chdc1,16,1,0|-1chdc0,17,8,1|-16c5g1,17,8,1|-16c5g0,16,1,0|2c3rzz,16,1,0|2c3s00,17,8,1|2fnh7z,17,8,1|2fnh80,16,1,0|3axhbz,16,1,0|3axhc0,17,8,1|3fnrvz,17,8,1|3fnrw0,16,1,0|3tpenz,16,1,0|3tpeo0,17,8,1|41f3vz,17,8,1|41f3w0,16,1,0|4e2qnz,16,1,0|4e2qo0,17,8,1|4hd6jz,17,8,1|4hd6k0,16,1,0|7evenz,16,1,0|7eveo0,17,8,0|8cm57z,17,8,0|8cm580,16,1,0|k1rbzz,16,1,0|k1rc00,17,8,1|k6hmjz,17,8,1|k6hmk0,16,1,0|kkj9bz,16,1,0|kkj9c0,17,8,1|kop6jz,17,8,1|kop6k0,16,1,0|l1rmnz,16,1,0|l1rmo0,17,8,1|l6t17z,17,8,1|l6t180,16,1,0|lj1unz,16,1,0|lj1uo0,17,8,1|lp657z,17,8,1|lp6580,16,1,0|m37xjz,16,1,0|m37xk0,17,8,1|m7fs7z,17,8,1|m7fs80,16,1,0|m916vz,16,1,0|m916w0,17,8,1|mb547z,17,8,1|mb5480,16,1,0|mly07z,16,1,0|mly080,17,8,1|mpjmvz,17,8,1|mpjmw0,16,1,0|mraljz,16,1,0|mralk0,17,8,1|mvb1jz,17,8,1|mvb1k0,16,1,0|n3887z,16,1,0|n38880,17,8,1|n7uw7z,17,8,1|n7uw80,16,1,0|n9npjz,16,1,0|n9npk0,17,8,1|ne147z,17,8,1|ne1480,16,1,0|nlyavz,16,1,0|nlyaw0,17,8,1|npww7z,17,8,1|npww80,16,1,0|nrppjz,16,1,0|nrppk0,17,8,1|nwr6vz,17,8,1|nwr6w0,16,1,0|o4odjz,16,1,0|o4odk0,17,8,1|o8a07z,17,8,1|o8a080,16,1,0|oa2tjz,16,1,0|oa2tk0,17,8,1|ofu87z,17,8,1|ofu880,16,1,0|oneg7z,16,1,0|oneg80,17,8,1|oqa5jz,17,8,1|oqa5k0,16,1,0|osfxjz,16,1,0|osfxk0,17,8,1|oykavz,17,8,1|oykaw0,16,1,0|p64ivz,16,1,0|p64iw0,17,8,1|p8n9jz,17,8,1|p8n9k0,16,1,0|pag2vz,16,1,0|pag2w0,17,8,1|phadjz,17,8,1|phadk0,17,8,0|pr0djz,17,8,0|pr0dk0,16,1,1|pst6vz,16,1,1|pst6w0,17,8,0|q90ivz,17,8,0|q90iw0,16,1,1|qb6avz,16,1,1|qb6aw0,17,8,0|qrdmvz,17,8,0|qrdmw0,16,1,1|qt6g7z,16,1,1|qt6g80,17,8,0|r9ds7z,17,8,0|r9ds80,16,1,1|rbjk7z,16,1,1|rbjk80,17,8,0|rrqw7z,17,8,0|rrqw80,16,1,1|rtwo7z,16,1,1|rtwo80,17,8,0|sa407z,17,8,0|sa4080,16,1,1|sbwtjz,16,1,1|sbwtk0,17,8,0|ss45jz,17,8,0|ss45k0,16,1,1|su9xjz,16,1,1|su9xk0,17,8,0|tah9jz,17,8,0|tah9k0,16,1,1|tca2vz,16,1,1|tca2w0,17,8,0|tsudjz,17,8,0|tsudk0,16,1,1|tun6vz,16,1,1|tun6w0,17,8,0|uauivz,17,8,0|uauiw0,16,1,1|ud0avz,16,1,1|ud0aw0,17,8,0|ut7mvz,17,8,0|ut7mw0,16,1,1|uv0g7z,16,1,1|uv0g80,17,8,0|vb7s7z,17,8,0|vb7s80,16,1,1|vddk7z,16,1,1|vddk80,17,8,0|vtkw7z,17,8,0|vtkw80,16,1,1|vvqo7z,16,1,1|vvqo80,17,8,0|wby07z,17,8,0|wby080,16,1,1|wdqtjz,16,1,1|wdqtk0,17,8,0|wty5jz,17,8,0|wty5k0,16,1,1|ww3xjz,16,1,1|ww3xk0,17,8,0|xcb9jz,17,8,0|xcb9k0,16,1,1|xe42vz,16,1,1|xe42w0,17,8,0|xubevz,17,8,0|xubew0,16,1,1|xwh6vz,16,1,1|xwh6w0,17,8,0|ycoivz,17,8,0|ycoiw0,16,1,1|yeuavz,16,1,1|yeuaw0,17,8,0|yv1mvz,17,8,0|yv1mw0,16,1,1|ywug7z,16,1,1|ywug80,17,8,0|zd1s7z,17,8,0|zd1s80,16,1,1|zf7k7z,16,1,1|zf7k80,17,8,0|zvew7z,17,8,0|zvew80,16,1,1|zxko7z,16,1,1|zxko80,17,8,0|10ds07z,17,8,0|10ds080,16,1,1|10fktjz,16,1,1|10fktk0,17,8,0|10vs5jz,17,8,0|10vs5k0,16,1,1|10xxxjz,16,1,1|10xxxk0,17,8,0|11e59jz,17,8,0|11e59k0,16,1,1|11fy2vz,16,1,1|11fy2w0,17,8,0|11w5evz,17,8,0|11w5ew0,16,1,1|11yb6vz,16,1,1|11yb6w0,17,8,0|12eiivz,17,8,0|12eiiw0,16,1,1|12goavz,16,1,1|12goaw0,17,8,0|12wvmvz,17,8,0|12wvmw0,16,1,1|12yog7z,16,1,1|12yog80,17,8,0|13evs7z,17,8,0|13evs80,16,1,1|13h1k7z,16,1,1|13h1k80,17,8,0|13x8w7z,17,8,0|13x8w80,16,1,1|13zeo7z,16,1,1|13zeo80,17,8,0|14fm07z,17,8,0|14fm080,16,1,1|14hetjz,16,1,1|14hetk0,17,8,0|14xm5jz,17,8,0|14xm5k0,16,1,1|14zrxjz,16,1,1|14zrxk0,17,8,0|15fz9jz,17,8,0|15fz9k0,16,1,1|15hs2vz,16,1,1|15hs2w0,17,8,0|15xzevz,17,8,0|15xzew0,16,1,1|16056vz,16,1,1|16056w0,17,8,0|16gcivz,17,8,0|16gciw0,16,1,1|16iiavz,16,1,1|16iiaw0,17,8,0|16ypmvz,17,8,0|16ypmw0,16,1,1|170ig7z,16,1,1|170ig80,17,8,0|17gps7z,17,8,0|17gps80,16,1,1|17ivk7z,16,1,1|17ivk80,17,8,0|17z2w7z,17,8,0|17z2w80,16,1,1|1818o7z,16,1,1|1818o80,17,8,0|18hg07z,17,8,0|18hg080,16,1,1|18j8tjz,16,1,1|18j8tk0,17,8,0|18zg5jz,17,8,0|18zg5k0,16,1,1|191lxjz,16,1,1|191lxk0,17,8,0|19ht9jz,17,8,0|19ht9k0,16,1,1|19jm2vz,16,1,1|19jm2w0,17,8,0|19ztevz,17,8,0|19ztew0,16,1,1|1a1z6vz,16,1,1|1a1z6w0,17,8,0|1ai6ivz,17,8,0|1ai6iw0,16,1,1|1akcavz,16,1,1|1akcaw0,17,8,0|1b0jmvz,17,8,0|1b0jmw0,16,1,1|1b2cg7z,16,1,1|1b2cg80,17,8,0|1bijs7z,17,8,0|1bijs80,16,1,1|1bkpk7z,16,1,1|1bkpk80,17,8,0|1c0ww7z,17,8,0|1c0ww80,16,1,1|1c32o7z,16,1,1|1c32o80,17,8,0|1cja07z,17,8,0|1cja080,16,1,1|1cl2tjz,16,1,1|1cl2tk0,17,8,0|1d1a5jz,17,8,0|1d1a5k0,16,1,1|1d3fxjz,16,1,1|1d3fxk0,17,8,0|1djn9jz,17,8,0|1djn9k0,16,1,1|1dlg2vz,16,1,1|1dlg2w0,17,8,0|1e1nevz,17,8,0|1e1new0,16,1,1|1e3t6vz,16,1,1|1e3t6w0,17,8,0|1ek0ivz,17,8,0|1ek0iw0,16,1,1|1em6avz,16,1,1|1em6aw0,17,8,0|1f2dmvz,17,8,0|1f2dmw0,16,1,1|1f46g7z,16,1,1|1f46g80,17,8,0|1fkds7z,17,8,0|1fkds80,16,1,1|1fmjk7z,16,1,1|1fmjk80,17,8,0|1g2qw7z,17,8,0|1g2qw80,16,1,1|1g4wo7z,16,1,1|1g4wo80,17,8,0|1gl407z,17,8,0|1gl4080,16,1,1|1gmwtjz,16,1,1|1gmwtk0,17,8,0|1h345jz,17,8,0|1h345k0,16,1,1|1h59xjz,16,1,1|1h59xk0,17,8,0|1hlh9jz,17,8,0|1hlh9k0,16,1,1|1hna2vz,16,1,1|1hna2w0,17,8,0|1i3hevz,17,8,0|1i3hew0,16,1,1|1i5n6vz,16,1,1|1i5n6w0,17,8,0|1iluivz,17,8,0|1iluiw0,16,1,1|1io0avz,16,1,1|1io0aw0,17,8,0|1j47mvz,17,8,0|1j47mw0,16,1,1|1j60g7z,16,1,1|1j60g80,17,8,0|1jm7s7z,17,8,0|1jm7s80,16,1,1|1jodk7z,16,1,1|1jodk80,17,8,0|1k4kw7z,17,8,0|1k4kw80,16,1,1|1k6qo7z,16,1,1|1k6qo80,17,8,0|1kmy07z,17,8,0|1kmy080,16,1,1|1koqtjz,16,1,1|1koqtk0,17,8,0|1l4y5jz,17,8,0|1l4y5k0,16,1,1|1l73xjz,16,1,1|1l73xk0,17,8,0|1lnb9jz,17,8,0|1lnb9k0,16,1,1|1lp42vz,16,1,1|1lp42w0,17,8,0|1m5bevz,17,8,0|1m5bew0,16,1,1|1m7h6vz,16,1,1|1m7h6w0,17,8,0|1mnoivz,17,8,0|1mnoiw0,16,1,1|1mpuavz,16,1,1|1mpuaw0,17,8,0|1n61mvz,17,8,0|1n61mw0,16,1,1|1n7ug7z,16,1,1|1n7ug80,17,8,0|1no1s7z,17,8,0|1no1s80,16,1,1|1nq7k7z,16,1,1|1nq7k80,17,8,0|1o6ew7z,17,8,0|1o6ew80,16,1,1|1o8ko7z,16,1,1|1o8ko80,17,8,0|1oos07z,17,8,0|1oos080,16,1,1|1oqktjz,16,1,1|1oqktk0,17,8,0|1p6s5jz,17,8,0|1p6s5k0,16,1,1|1p8xxjz,16,1,1|1p8xxk0,17,8,0|NaN,17,8,0\",\"Africa/Ceuta|,0,17,0|-100edc1,0,17,0|-100edc0,6,1,0|-qyiys1,6,1,0|-qyiys0,7,8,1|-qqluw1,7,8,1|-qqluw0,6,1,0|-nusqs1,6,1,0|-nusqs0,7,8,1|-nm0001,7,8,1|-nm0000,6,1,0|-mt71g1,6,1,0|-mt71g0,7,8,1|-mkjuo1,7,8,1|-mkjuo0,6,1,0|-matxg1,6,1,0|-matxg0,7,8,1|-m1ts01,7,8,1|-m1ts00,6,1,0|-lrqtc1,6,1,0|-lrqtc0,7,8,1|-liqqo1,7,8,1|-liqqo0,6,1,0|-1chdc1,6,1,0|-1chdc0,7,8,1|-16c5g1,7,8,1|-16c5g0,6,1,0|2c3rzz,6,1,0|2c3s00,7,8,1|2fnh7z,7,8,1|2fnh80,6,1,0|3axhbz,6,1,0|3axhc0,7,8,1|3fnrvz,7,8,1|3fnrw0,6,1,0|3tpenz,6,1,0|3tpeo0,7,8,1|41f3vz,7,8,1|41f3w0,6,1,0|4e2qnz,6,1,0|4e2qo0,7,8,1|4hd6jz,7,8,1|4hd6k0,6,1,0|7evenz,6,1,0|7eveo0,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Africa/Conakry|,0,0,0|-u9rgl5,0,0,0|-u9rgl4,1,1,0|NaN,1,1,0\",\"Africa/Dakar|,0,0,0|-u9rgl5,0,0,0|-u9rgl4,1,1,0|NaN,1,1,0\",\"Africa/Dar_es_Salaam|,0,2,0|-w6p5hh,0,2,0|-w6p5hg,2,3,0|-lnsey1,2,3,0|-lnsey0,3,4,0|-kvcdo1,3,4,0|-kvcdo0,2,3,0|-h80ka1,2,3,0|-h80ka0,4,5,0|-eb6ib1,4,5,0|-eb6ib0,3,4,0|NaN,3,4,0\",\"Africa/Djibouti|,0,2,0|-w6p5hh,0,2,0|-w6p5hg,2,3,0|-lnsey1,2,3,0|-lnsey0,3,4,0|-kvcdo1,3,4,0|-kvcdo0,2,3,0|-h80ka1,2,3,0|-h80ka0,4,5,0|-eb6ib1,4,5,0|-eb6ib0,3,4,0|NaN,3,4,0\",\"Africa/Douala|,0,10,0|-xnxnao,0,10,0|-xnxnan,1,1,0|-w3k001,1,1,0|-w3k000,0,10,0|-t85smo,0,10,0|-t85smn,10,11,0|-q9qc21,10,11,0|-q9qc20,11,8,0|NaN,11,8,0\",\"Africa/El_Aaiun|,0,18,0|-isdxk1,0,18,0|-isdxk0,12,13,0|3a22rz,12,13,0|3a22s0,16,1,0|3axhbz,16,1,0|3axhc0,17,8,1|3fnrvz,17,8,1|3fnrw0,16,1,0|3tpenz,16,1,0|3tpeo0,17,8,1|41f3vz,17,8,1|41f3w0,16,1,0|4e2qnz,16,1,0|4e2qo0,17,8,1|4hd6jz,17,8,1|4hd6k0,16,1,0|k1rbzz,16,1,0|k1rc00,17,8,1|k6hmjz,17,8,1|k6hmk0,16,1,0|kkj9bz,16,1,0|kkj9c0,17,8,1|kop6jz,17,8,1|kop6k0,16,1,0|l1rmnz,16,1,0|l1rmo0,17,8,1|l6t17z,17,8,1|l6t180,16,1,0|lj1unz,16,1,0|lj1uo0,17,8,1|lp657z,17,8,1|lp6580,16,1,0|m37xjz,16,1,0|m37xk0,17,8,1|m7fs7z,17,8,1|m7fs80,16,1,0|m916vz,16,1,0|m916w0,17,8,1|mb547z,17,8,1|mb5480,16,1,0|mly07z,16,1,0|mly080,17,8,1|mpjmvz,17,8,1|mpjmw0,16,1,0|mraljz,16,1,0|mralk0,17,8,1|mvb1jz,17,8,1|mvb1k0,16,1,0|n3887z,16,1,0|n38880,17,8,1|n7uw7z,17,8,1|n7uw80,16,1,0|n9npjz,16,1,0|n9npk0,17,8,1|ne147z,17,8,1|ne1480,16,1,0|nlyavz,16,1,0|nlyaw0,17,8,1|npww7z,17,8,1|npww80,16,1,0|nrppjz,16,1,0|nrppk0,17,8,1|nwr6vz,17,8,1|nwr6w0,16,1,0|o4odjz,16,1,0|o4odk0,17,8,1|o8a07z,17,8,1|o8a080,16,1,0|oa2tjz,16,1,0|oa2tk0,17,8,1|ofu87z,17,8,1|ofu880,16,1,0|oneg7z,16,1,0|oneg80,17,8,1|oqa5jz,17,8,1|oqa5k0,16,1,0|osfxjz,16,1,0|osfxk0,17,8,1|oykavz,17,8,1|oykaw0,16,1,0|p64ivz,16,1,0|p64iw0,17,8,1|p8n9jz,17,8,1|p8n9k0,16,1,0|pag2vz,16,1,0|pag2w0,17,8,1|phadjz,17,8,1|phadk0,17,8,0|pr0djz,17,8,0|pr0dk0,16,1,1|pst6vz,16,1,1|pst6w0,17,8,0|q90ivz,17,8,0|q90iw0,16,1,1|qb6avz,16,1,1|qb6aw0,17,8,0|qrdmvz,17,8,0|qrdmw0,16,1,1|qt6g7z,16,1,1|qt6g80,17,8,0|r9ds7z,17,8,0|r9ds80,16,1,1|rbjk7z,16,1,1|rbjk80,17,8,0|rrqw7z,17,8,0|rrqw80,16,1,1|rtwo7z,16,1,1|rtwo80,17,8,0|sa407z,17,8,0|sa4080,16,1,1|sbwtjz,16,1,1|sbwtk0,17,8,0|ss45jz,17,8,0|ss45k0,16,1,1|su9xjz,16,1,1|su9xk0,17,8,0|tah9jz,17,8,0|tah9k0,16,1,1|tca2vz,16,1,1|tca2w0,17,8,0|tsudjz,17,8,0|tsudk0,16,1,1|tun6vz,16,1,1|tun6w0,17,8,0|uauivz,17,8,0|uauiw0,16,1,1|ud0avz,16,1,1|ud0aw0,17,8,0|ut7mvz,17,8,0|ut7mw0,16,1,1|uv0g7z,16,1,1|uv0g80,17,8,0|vb7s7z,17,8,0|vb7s80,16,1,1|vddk7z,16,1,1|vddk80,17,8,0|vtkw7z,17,8,0|vtkw80,16,1,1|vvqo7z,16,1,1|vvqo80,17,8,0|wby07z,17,8,0|wby080,16,1,1|wdqtjz,16,1,1|wdqtk0,17,8,0|wty5jz,17,8,0|wty5k0,16,1,1|ww3xjz,16,1,1|ww3xk0,17,8,0|xcb9jz,17,8,0|xcb9k0,16,1,1|xe42vz,16,1,1|xe42w0,17,8,0|xubevz,17,8,0|xubew0,16,1,1|xwh6vz,16,1,1|xwh6w0,17,8,0|ycoivz,17,8,0|ycoiw0,16,1,1|yeuavz,16,1,1|yeuaw0,17,8,0|yv1mvz,17,8,0|yv1mw0,16,1,1|ywug7z,16,1,1|ywug80,17,8,0|zd1s7z,17,8,0|zd1s80,16,1,1|zf7k7z,16,1,1|zf7k80,17,8,0|zvew7z,17,8,0|zvew80,16,1,1|zxko7z,16,1,1|zxko80,17,8,0|10ds07z,17,8,0|10ds080,16,1,1|10fktjz,16,1,1|10fktk0,17,8,0|10vs5jz,17,8,0|10vs5k0,16,1,1|10xxxjz,16,1,1|10xxxk0,17,8,0|11e59jz,17,8,0|11e59k0,16,1,1|11fy2vz,16,1,1|11fy2w0,17,8,0|11w5evz,17,8,0|11w5ew0,16,1,1|11yb6vz,16,1,1|11yb6w0,17,8,0|12eiivz,17,8,0|12eiiw0,16,1,1|12goavz,16,1,1|12goaw0,17,8,0|12wvmvz,17,8,0|12wvmw0,16,1,1|12yog7z,16,1,1|12yog80,17,8,0|13evs7z,17,8,0|13evs80,16,1,1|13h1k7z,16,1,1|13h1k80,17,8,0|13x8w7z,17,8,0|13x8w80,16,1,1|13zeo7z,16,1,1|13zeo80,17,8,0|14fm07z,17,8,0|14fm080,16,1,1|14hetjz,16,1,1|14hetk0,17,8,0|14xm5jz,17,8,0|14xm5k0,16,1,1|14zrxjz,16,1,1|14zrxk0,17,8,0|15fz9jz,17,8,0|15fz9k0,16,1,1|15hs2vz,16,1,1|15hs2w0,17,8,0|15xzevz,17,8,0|15xzew0,16,1,1|16056vz,16,1,1|16056w0,17,8,0|16gcivz,17,8,0|16gciw0,16,1,1|16iiavz,16,1,1|16iiaw0,17,8,0|16ypmvz,17,8,0|16ypmw0,16,1,1|170ig7z,16,1,1|170ig80,17,8,0|17gps7z,17,8,0|17gps80,16,1,1|17ivk7z,16,1,1|17ivk80,17,8,0|17z2w7z,17,8,0|17z2w80,16,1,1|1818o7z,16,1,1|1818o80,17,8,0|18hg07z,17,8,0|18hg080,16,1,1|18j8tjz,16,1,1|18j8tk0,17,8,0|18zg5jz,17,8,0|18zg5k0,16,1,1|191lxjz,16,1,1|191lxk0,17,8,0|19ht9jz,17,8,0|19ht9k0,16,1,1|19jm2vz,16,1,1|19jm2w0,17,8,0|19ztevz,17,8,0|19ztew0,16,1,1|1a1z6vz,16,1,1|1a1z6w0,17,8,0|1ai6ivz,17,8,0|1ai6iw0,16,1,1|1akcavz,16,1,1|1akcaw0,17,8,0|1b0jmvz,17,8,0|1b0jmw0,16,1,1|1b2cg7z,16,1,1|1b2cg80,17,8,0|1bijs7z,17,8,0|1bijs80,16,1,1|1bkpk7z,16,1,1|1bkpk80,17,8,0|1c0ww7z,17,8,0|1c0ww80,16,1,1|1c32o7z,16,1,1|1c32o80,17,8,0|1cja07z,17,8,0|1cja080,16,1,1|1cl2tjz,16,1,1|1cl2tk0,17,8,0|1d1a5jz,17,8,0|1d1a5k0,16,1,1|1d3fxjz,16,1,1|1d3fxk0,17,8,0|1djn9jz,17,8,0|1djn9k0,16,1,1|1dlg2vz,16,1,1|1dlg2w0,17,8,0|1e1nevz,17,8,0|1e1new0,16,1,1|1e3t6vz,16,1,1|1e3t6w0,17,8,0|1ek0ivz,17,8,0|1ek0iw0,16,1,1|1em6avz,16,1,1|1em6aw0,17,8,0|1f2dmvz,17,8,0|1f2dmw0,16,1,1|1f46g7z,16,1,1|1f46g80,17,8,0|1fkds7z,17,8,0|1fkds80,16,1,1|1fmjk7z,16,1,1|1fmjk80,17,8,0|1g2qw7z,17,8,0|1g2qw80,16,1,1|1g4wo7z,16,1,1|1g4wo80,17,8,0|1gl407z,17,8,0|1gl4080,16,1,1|1gmwtjz,16,1,1|1gmwtk0,17,8,0|1h345jz,17,8,0|1h345k0,16,1,1|1h59xjz,16,1,1|1h59xk0,17,8,0|1hlh9jz,17,8,0|1hlh9k0,16,1,1|1hna2vz,16,1,1|1hna2w0,17,8,0|1i3hevz,17,8,0|1i3hew0,16,1,1|1i5n6vz,16,1,1|1i5n6w0,17,8,0|1iluivz,17,8,0|1iluiw0,16,1,1|1io0avz,16,1,1|1io0aw0,17,8,0|1j47mvz,17,8,0|1j47mw0,16,1,1|1j60g7z,16,1,1|1j60g80,17,8,0|1jm7s7z,17,8,0|1jm7s80,16,1,1|1jodk7z,16,1,1|1jodk80,17,8,0|1k4kw7z,17,8,0|1k4kw80,16,1,1|1k6qo7z,16,1,1|1k6qo80,17,8,0|1kmy07z,17,8,0|1kmy080,16,1,1|1koqtjz,16,1,1|1koqtk0,17,8,0|1l4y5jz,17,8,0|1l4y5k0,16,1,1|1l73xjz,16,1,1|1l73xk0,17,8,0|1lnb9jz,17,8,0|1lnb9k0,16,1,1|1lp42vz,16,1,1|1lp42w0,17,8,0|1m5bevz,17,8,0|1m5bew0,16,1,1|1m7h6vz,16,1,1|1m7h6w0,17,8,0|1mnoivz,17,8,0|1mnoiw0,16,1,1|1mpuavz,16,1,1|1mpuaw0,17,8,0|1n61mvz,17,8,0|1n61mw0,16,1,1|1n7ug7z,16,1,1|1n7ug80,17,8,0|1no1s7z,17,8,0|1no1s80,16,1,1|1nq7k7z,16,1,1|1nq7k80,17,8,0|1o6ew7z,17,8,0|1o6ew80,16,1,1|1o8ko7z,16,1,1|1o8ko80,17,8,0|1oos07z,17,8,0|1oos080,16,1,1|1oqktjz,16,1,1|1oqktk0,17,8,0|1p6s5jz,17,8,0|1p6s5k0,16,1,1|1p8xxjz,16,1,1|1p8xxk0,17,8,0|NaN,17,8,0\",\"Africa/Freetown|,0,0,0|-u9rgl5,0,0,0|-u9rgl4,1,1,0|NaN,1,1,0\",\"Africa/Gaborone|,0,14,0|-yvtfd9,0,14,0|-yvtfd8,13,9,0|NaN,13,9,0\",\"Africa/Harare|,0,14,0|-yvtfd9,0,14,0|-yvtfd8,13,9,0|NaN,13,9,0\",\"Africa/Johannesburg|,0,19,0|-14nj6ip,0,19,0|-14nj6io,18,20,0|-yvtdi1,18,20,0|-yvtdi0,18,9,0|-e8lpc1,18,9,0|-e8lpc0,18,4,1|-dz8qs1,18,4,1|-dz8qs0,18,9,0|-dpvmo1,18,9,0|-dpvmo0,18,4,1|-dgio41,18,4,1|-dgio40,18,9,0|NaN,18,9,0\",\"Africa/Juba|,0,21,0|-kcrsit,0,21,0|-kcrsis,13,9,0|662fz,13,9,0|662g0,19,4,1|er8zz,19,4,1|er900,13,9,0|ow53z,13,9,0|ow540,19,4,1|xj6bz,19,4,1|xj6c0,13,9,0|17px3z,13,9,0|17px40,19,4,1|1gcybz,19,4,1|1gcyc0,13,9,0|1qfzrz,13,9,0|1qfzs0,19,4,1|1z4vnz,19,4,1|1z4vo0,13,9,0|2962fz,13,9,0|2962g0,19,4,1|2hwszz,19,4,1|2hwt00,13,9,0|2rw53z,13,9,0|2rw540,19,4,1|30oqbz,19,4,1|30oqc0,13,9,0|3am7rz,13,9,0|3am7s0,19,4,1|3jiibz,19,4,1|3jiic0,13,9,0|3tcafz,13,9,0|3tcag0,19,4,1|42afnz,19,4,1|42afo0,13,9,0|4cfbrz,13,9,0|4cfbs0,19,4,1|4l2czz,19,4,1|4l2d00,13,9,0|4v5efz,13,9,0|4v5eg0,19,4,1|53uabz,19,4,1|53uac0,13,9,0|5dvh3z,13,9,0|5dvh40,19,4,1|5mo2bz,19,4,1|5mo2c0,13,9,0|5wljrz,13,9,0|5wljs0,19,4,1|65fznz,19,4,1|65fzo0,13,9,0|6fbmfz,13,9,0|6fbmg0,19,4,1|6o7wzz,19,4,1|6o7x00,13,9,0|6y1p3z,13,9,0|6y1p40,19,4,1|76zubz,19,4,1|76zuc0,13,9,0|7h4qfz,13,9,0|7h4qg0,19,4,1|7ptmbz,19,4,1|7ptmc0,13,9,0|7zut3z,13,9,0|7zut40,19,4,1|88ljnz,19,4,1|88ljo0,13,9,0|fodfrz,13,9,0|fodfs0,3,4,0|qntgzz,3,4,0|qnth00,13,9,0|NaN,13,9,0\",\"Africa/Kampala|,0,2,0|-w6p5hh,0,2,0|-w6p5hg,2,3,0|-lnsey1,2,3,0|-lnsey0,3,4,0|-kvcdo1,3,4,0|-kvcdo0,2,3,0|-h80ka1,2,3,0|-h80ka0,4,5,0|-eb6ib1,4,5,0|-eb6ib0,3,4,0|NaN,3,4,0\",\"Africa/Khartoum|,0,22,0|-kcrsox,0,22,0|-kcrsow,13,9,0|662fz,13,9,0|662g0,19,4,1|er8zz,19,4,1|er900,13,9,0|ow53z,13,9,0|ow540,19,4,1|xj6bz,19,4,1|xj6c0,13,9,0|17px3z,13,9,0|17px40,19,4,1|1gcybz,19,4,1|1gcyc0,13,9,0|1qfzrz,13,9,0|1qfzs0,19,4,1|1z4vnz,19,4,1|1z4vo0,13,9,0|2962fz,13,9,0|2962g0,19,4,1|2hwszz,19,4,1|2hwt00,13,9,0|2rw53z,13,9,0|2rw540,19,4,1|30oqbz,19,4,1|30oqc0,13,9,0|3am7rz,13,9,0|3am7s0,19,4,1|3jiibz,19,4,1|3jiic0,13,9,0|3tcafz,13,9,0|3tcag0,19,4,1|42afnz,19,4,1|42afo0,13,9,0|4cfbrz,13,9,0|4cfbs0,19,4,1|4l2czz,19,4,1|4l2d00,13,9,0|4v5efz,13,9,0|4v5eg0,19,4,1|53uabz,19,4,1|53uac0,13,9,0|5dvh3z,13,9,0|5dvh40,19,4,1|5mo2bz,19,4,1|5mo2c0,13,9,0|5wljrz,13,9,0|5wljs0,19,4,1|65fznz,19,4,1|65fzo0,13,9,0|6fbmfz,13,9,0|6fbmg0,19,4,1|6o7wzz,19,4,1|6o7x00,13,9,0|6y1p3z,13,9,0|6y1p40,19,4,1|76zubz,19,4,1|76zuc0,13,9,0|7h4qfz,13,9,0|7h4qg0,19,4,1|7ptmbz,19,4,1|7ptmc0,13,9,0|7zut3z,13,9,0|7zut40,19,4,1|88ljnz,19,4,1|88ljo0,13,9,0|fodfrz,13,9,0|fodfs0,3,4,0|oypgzz,3,4,0|oyph00,13,9,0|NaN,13,9,0\",\"Africa/Kigali|,0,14,0|-yvtfd9,0,14,0|-yvtfd8,13,9,0|NaN,13,9,0\",\"Africa/Kinshasa|,0,10,0|-xnxnao,0,10,0|-xnxnan,1,1,0|-w3k001,1,1,0|-w3k000,0,10,0|-t85smo,0,10,0|-t85smn,10,11,0|-q9qc21,10,11,0|-q9qc20,11,8,0|NaN,11,8,0\",\"Africa/Lagos|,0,10,0|-xnxnao,0,10,0|-xnxnan,1,1,0|-w3k001,1,1,0|-w3k000,0,10,0|-t85smo,0,10,0|-t85smn,10,11,0|-q9qc21,10,11,0|-q9qc20,11,8,0|NaN,11,8,0\",\"Africa/Libreville|,0,10,0|-xnxnao,0,10,0|-xnxnan,1,1,0|-w3k001,1,1,0|-w3k000,0,10,0|-t85smo,0,10,0|-t85smn,10,11,0|-q9qc21,10,11,0|-q9qc20,11,8,0|NaN,11,8,0\",\"Africa/Lome|,0,0,0|-u9rgl5,0,0,0|-u9rgl4,1,1,0|NaN,1,1,0\",\"Africa/Luanda|,0,10,0|-xnxnao,0,10,0|-xnxnan,1,1,0|-w3k001,1,1,0|-w3k000,0,10,0|-t85smo,0,10,0|-t85smn,10,11,0|-q9qc21,10,11,0|-q9qc20,11,8,0|NaN,11,8,0\",\"Africa/Lubumbashi|,0,14,0|-yvtfd9,0,14,0|-yvtfd8,13,9,0|NaN,13,9,0\",\"Africa/Lusaka|,0,14,0|-yvtfd9,0,14,0|-yvtfd8,13,9,0|NaN,13,9,0\",\"Africa/Malabo|,0,10,0|-xnxnao,0,10,0|-xnxnan,1,1,0|-w3k001,1,1,0|-w3k000,0,10,0|-t85smo,0,10,0|-t85smn,10,11,0|-q9qc21,10,11,0|-q9qc20,11,8,0|NaN,11,8,0\",\"Africa/Maputo|,0,14,0|-yvtfd9,0,14,0|-yvtfd8,13,9,0|NaN,13,9,0\",\"Africa/Maseru|,0,19,0|-14nj6ip,0,19,0|-14nj6io,18,20,0|-yvtdi1,18,20,0|-yvtdi0,18,9,0|-e8lpc1,18,9,0|-e8lpc0,18,4,1|-dz8qs1,18,4,1|-dz8qs0,18,9,0|-dpvmo1,18,9,0|-dpvmo0,18,4,1|-dgio41,18,4,1|-dgio40,18,9,0|NaN,18,9,0\",\"Africa/Mbabane|,0,19,0|-14nj6ip,0,19,0|-14nj6io,18,20,0|-yvtdi1,18,20,0|-yvtdi0,18,9,0|-e8lpc1,18,9,0|-e8lpc0,18,4,1|-dz8qs1,18,4,1|-dz8qs0,18,9,0|-dpvmo1,18,9,0|-dpvmo0,18,4,1|-dgio41,18,4,1|-dgio40,18,9,0|NaN,18,9,0\",\"Africa/Mogadishu|,0,2,0|-w6p5hh,0,2,0|-w6p5hg,2,3,0|-lnsey1,2,3,0|-lnsey0,3,4,0|-kvcdo1,3,4,0|-kvcdo0,2,3,0|-h80ka1,2,3,0|-h80ka0,4,5,0|-eb6ib1,4,5,0|-eb6ib0,3,4,0|NaN,3,4,0\",\"Africa/Monrovia|,0,23,0|-19xcbc5,0,23,0|-19xcbc4,20,23,0|-qj6zc5,20,23,0|-qj6zc4,20,24,0|11v0q5,20,24,0|11v0q6,1,1,0|NaN,1,1,0\",\"Africa/Nairobi|,0,2,0|-w6p5hh,0,2,0|-w6p5hg,2,3,0|-lnsey1,2,3,0|-lnsey0,3,4,0|-kvcdo1,3,4,0|-kvcdo0,2,3,0|-h80ka1,2,3,0|-h80ka0,4,5,0|-eb6ib1,4,5,0|-eb6ib0,3,4,0|NaN,3,4,0\",\"Africa/Ndjamena|,0,25,0|-u9rk4d,0,25,0|-u9rk4c,11,8,0|53sl7z,11,8,0|53sl80,21,9,1|5bavrz,21,9,1|5bavs0,11,8,0|NaN,11,8,0\",\"Africa/Niamey|,0,10,0|-xnxnao,0,10,0|-xnxnan,1,1,0|-w3k001,1,1,0|-w3k000,0,10,0|-t85smo,0,10,0|-t85smn,10,11,0|-q9qc21,10,11,0|-q9qc20,11,8,0|NaN,11,8,0\",\"Africa/Nouakchott|,0,0,0|-u9rgl5,0,0,0|-u9rgl4,1,1,0|NaN,1,1,0\",\"Africa/Ouagadougou|,0,0,0|-u9rgl5,0,0,0|-u9rgl4,1,1,0|NaN,1,1,0\",\"Africa/Porto-Novo|,0,10,0|-xnxnao,0,10,0|-xnxnan,1,1,0|-w3k001,1,1,0|-w3k000,0,10,0|-t85smo,0,10,0|-t85smn,10,11,0|-q9qc21,10,11,0|-q9qc20,11,8,0|NaN,11,8,0\",\"Africa/Sao_Tome|,0,26,0|-18vsjwx,0,26,0|-18vsjww,0,27,0|-u9rhc1,0,27,0|-u9rhc0,1,1,0|p1uqrz,1,1,0|p1uqs0,11,8,0|pkmo3z,11,8,0|pkmo40,1,1,0|NaN,1,1,0\",\"Africa/Tripoli|,0,28,0|-q3gfrx,0,28,0|-q3gfrw,8,8,0|-9ia581,8,8,0|-9ia580,9,9,1|-9e82w1,9,9,1|-9e82w0,8,8,0|-8gxp81,8,8,0|-8gxp80,9,9,1|-8cmdk1,9,9,1|-8cmdk0,8,8,0|-7fuo41,8,8,0|-7fuo40,9,9,1|-7b2iw1,9,9,1|-7b2iw0,8,8,0|-5qotg1,8,8,0|-5qotg0,14,9,0|69gifz,14,9,0|69gig0,8,8,0|6e397z,8,8,0|6e3980,9,9,1|6ni2fz,9,9,1|6ni2g0,8,8,0|6wv6jz,8,8,0|6wv6k0,9,9,1|769zrz,9,9,1|769zs0,8,8,0|7foyjz,8,8,0|7foyk0,9,9,1|7p3rrz,9,9,1|7p3rs0,8,8,0|7yq57z,8,8,0|7yq580,9,9,1|87vp3z,9,9,1|87vp40,8,8,0|8hed7z,8,8,0|8hed80,9,9,1|8qrbrz,9,9,1|8qrbs0,8,8,0|900qjz,8,8,0|900qk0,9,9,1|99fjrz,9,9,1|99fjs0,8,8,0|9iuijz,8,8,0|9iuik0,9,9,1|9s9brz,9,9,1|9s9bs0,8,8,0|a1mfvz,8,8,0|a1mfw0,9,9,1|ab193z,9,9,1|ab1940,8,8,0|am3h7z,8,8,0|am3h80,14,9,0|dyil3z,14,9,0|dyil40,8,8,0|e833vz,8,8,0|e833w0,9,9,1|ehhx3z,9,9,1|ehhx40,14,9,0|md8vzz,14,9,0|md8w00,8,8,0|mkeanz,8,8,0|mkeao0,9,9,1|mv76nz,9,9,1|mv76o0,14,9,0|NaN,14,9,0\",\"Africa/Tunis|,0,29,0|-1a9dr7x,0,29,0|-1a9dr7w,5,7,0|-uozn3m,5,7,0|-uozn3l,8,8,0|-g12881,8,8,0|-g12880,9,9,1|-fpwdk1,9,9,1|-fpwdk0,8,8,0|-fkt1k1,8,8,0|-fkt1k0,9,9,1|-eqk5k1,9,9,1|-eqk5k0,8,8,0|-eimw41,8,8,0|-eimw40,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dxuo01,9,9,1|-dxuo00,8,8,0|-dxfrw1,8,8,0|-dxfrw0,9,9,1|-dp3uo1,9,9,1|-dp3uo0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d62tk1,9,9,1|-d62tk0,8,8,0|-cx0nw1,8,8,0|-cx0nw0,9,9,1|-cofmw1,9,9,1|-cofmw0,8,8,0|3tnh7z,8,8,0|3tnh80,9,9,1|417p7z,9,9,1|417p80,8,8,0|4ch97z,8,8,0|4ch980,9,9,1|4kcl7z,9,9,1|4kcl80,8,8,0|9lzh7z,8,8,0|9lzh80,9,9,1|9ryajz,9,9,1|9ryak0,8,8,0|a1bbvz,8,8,0|a1bbw0,9,9,1|aaod7z,9,9,1|aaod80,8,8,0|alxx7z,8,8,0|alxx80,9,9,1|atrejz,9,9,1|atrek0,8,8,0|ifs7vz,8,8,0|ifs7w0,9,9,1|inlrzz,9,9,1|inls00,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|NaN,8,8,0\",\"Africa/Windhoek|,0,30,0|-14nj4i1,0,30,0|-14nj4i0,22,20,0|-yvtdi1,22,20,0|-yvtdi0,18,9,0|-e8lpc1,18,9,0|-e8lpc0,18,4,1|-dz8qs1,18,4,1|-dz8qs0,18,9,0|ajtx3z,18,9,0|ajtx40,13,9,0|cmzh3z,13,9,0|cmzh40,11,8,1|cvkyrz,11,8,1|cvkys0,13,9,0|d6drzz,13,9,0|d6ds00,11,8,1|deb1fz,11,8,1|deb1g0,13,9,0|dpgtbz,13,9,0|dpgtc0,11,8,1|dx143z,11,8,1|dx1440,13,9,0|e86vzz,13,9,0|e86w00,11,8,1|eg45fz,11,8,1|eg45g0,13,9,0|eqwynz,13,9,0|eqwyo0,11,8,1|eyu83z,11,8,1|eyu840,13,9,0|f9n1bz,13,9,0|f9n1c0,11,8,1|fhkarz,11,8,1|fhkas0,13,9,0|fsd3zz,13,9,0|fsd400,11,8,1|g0adfz,11,8,1|g0adg0,13,9,0|gb36nz,13,9,0|gb36o0,11,8,1|gj0g3z,11,8,1|gj0g40,13,9,0|gu67zz,13,9,0|gu6800,11,8,1|h1qirz,11,8,1|h1qis0,13,9,0|hcwanz,13,9,0|hcwao0,11,8,1|hktk3z,11,8,1|hktk40,13,9,0|hvmdbz,13,9,0|hvmdc0,11,8,1|i3jmrz,11,8,1|i3jms0,13,9,0|iecfzz,13,9,0|iecg00,11,8,1|im9pfz,11,8,1|im9pg0,13,9,0|ix2inz,13,9,0|ix2io0,11,8,1|j4zs3z,11,8,1|j4zs40,13,9,0|jfslbz,13,9,0|jfslc0,11,8,1|jnpurz,11,8,1|jnpus0,13,9,0|jyvmnz,13,9,0|jyvmo0,11,8,1|k6sw3z,11,8,1|k6sw40,13,9,0|khlpbz,13,9,0|khlpc0,11,8,1|kpiyrz,11,8,1|kpiys0,13,9,0|l0brzz,13,9,0|l0bs00,11,8,1|l891fz,11,8,1|l891g0,13,9,0|lj1unz,13,9,0|lj1uo0,11,8,1|lqz43z,11,8,1|lqz440,13,9,0|m1rxbz,13,9,0|m1rxc0,11,8,1|m9p6rz,11,8,1|m9p6s0,13,9,0|mkuynz,13,9,0|mkuyo0,11,8,1|msf9fz,11,8,1|msf9g0,13,9,0|n3l1bz,13,9,0|n3l1c0,11,8,1|nbiarz,11,8,1|nbias0,13,9,0|nmb3zz,13,9,0|nmb400,11,8,1|nu8dfz,11,8,1|nu8dg0,13,9,0|o516nz,13,9,0|o516o0,11,8,1|ocyg3z,11,8,1|ocyg40,13,9,0|onr9bz,13,9,0|onr9c0,11,8,1|ovoirz,11,8,1|ovois0,13,9,0|NaN,13,9,0\",\"America/Adak|,0,31,0|-1hc7qk0,0,31,0|-1hc7qjz,0,32,0|-1078omb,0,32,0|-1078oma,23,33,0|-ek1nw1,23,33,0|-ek1nw0,24,34,1|-cq2tg1,24,34,1|-cq2tg0,25,34,1|-cnomo1,25,34,1|-cnomo0,23,33,0|-1fq441,23,33,0|-1fq440,26,33,0|-cs3w1,26,33,0|-cs3w0,27,34,1|-3f5c1,27,34,1|-3f5c0,26,33,0|5xyrz,26,33,0|5xys0,27,34,1|faxbz,27,34,1|faxc0,26,33,0|oo1fz,26,33,0|oo1g0,27,34,1|ydynz,27,34,1|ydyo0,26,33,0|17r2rz,26,33,0|17r2s0,27,34,1|1h41bz,27,34,1|1h41c0,26,33,0|1qh5fz,26,33,0|1qh5g0,27,34,1|1zu3zz,27,34,1|1zu400,26,33,0|23ftfz,26,33,0|23ftg0,27,34,1|2ik6nz,27,34,1|2ik6o0,26,33,0|2oomrz,26,33,0|2ooms0,27,34,1|31a9bz,27,34,1|31a9c0,26,33,0|3andfz,26,33,0|3andg0,27,34,1|3kdanz,27,34,1|3kdao0,26,33,0|3tdg3z,26,33,0|3tdg40,27,34,1|433dbz,27,34,1|433dc0,26,33,0|4cghfz,26,33,0|4cghg0,27,34,1|4ltfzz,27,34,1|4ltg00,26,33,0|4v6k3z,26,33,0|4v6k40,27,34,1|54jinz,27,34,1|54jio0,26,33,0|5dwmrz,26,33,0|5dwms0,27,34,1|5n9lbz,27,34,1|5n9lc0,26,33,0|5wmpfz,26,33,0|5wmpg0,27,34,1|65znzz,27,34,1|65zo00,26,33,0|6fcs3z,26,33,0|6fcs40,27,34,1|6p2pbz,27,34,1|6p2pc0,26,33,0|6y2urz,26,33,0|6y2us0,27,34,1|77srzz,27,34,1|77ss00,28,34,0|79e13z,28,34,0|79e140,29,34,0|7h5tbz,29,34,0|7h5tc0,30,35,1|7qirvz,30,35,1|7qirw0,29,34,0|7zvvzz,29,34,0|7zvw00,30,35,1|898ujz,30,35,1|898uk0,29,34,0|8ilynz,29,34,0|8ilyo0,30,35,1|8ryx7z,30,35,1|8ryx80,29,34,0|9095bz,29,34,0|9095c0,30,35,1|9aozvz,30,35,1|9aozw0,29,34,0|9iz7zz,29,34,0|9iz800,30,35,1|9ts17z,30,35,1|9ts180,29,34,0|a1panz,29,34,0|a1pao0,30,35,1|aci3vz,30,35,1|aci3w0,29,34,0|akfdbz,29,34,0|akfdc0,30,35,1|av86jz,30,35,1|av86k0,29,34,0|b3ienz,29,34,0|b3ieo0,30,35,1|bdy97z,30,35,1|bdy980,29,34,0|bm8hbz,29,34,0|bm8hc0,30,35,1|bwobvz,30,35,1|bwobw0,29,34,0|c4yjzz,29,34,0|c4yk00,30,35,1|cfrd7z,30,35,1|cfrd80,29,34,0|cnomnz,29,34,0|cnomo0,30,35,1|cyhfvz,30,35,1|cyhfw0,29,34,0|d6epbz,29,34,0|d6epc0,30,35,1|dh7ijz,30,35,1|dh7ik0,29,34,0|dphqnz,29,34,0|dphqo0,30,35,1|dzxl7z,30,35,1|dzxl80,29,34,0|e87tbz,29,34,0|e87tc0,30,35,1|einnvz,30,35,1|einnw0,29,34,0|eqxvzz,29,34,0|eqxw00,30,35,1|f1dqjz,30,35,1|f1dqk0,29,34,0|f9nynz,29,34,0|f9nyo0,30,35,1|fkgrvz,30,35,1|fkgrw0,29,34,0|fse1bz,29,34,0|fse1c0,30,35,1|g36ujz,30,35,1|g36uk0,29,34,0|gb43zz,29,34,0|gb4400,30,35,1|glwx7z,30,35,1|glwx80,29,34,0|gu75bz,29,34,0|gu75c0,30,35,1|h4mzvz,30,35,1|h4mzw0,29,34,0|hcx7zz,29,34,0|hcx800,30,35,1|hnd2jz,30,35,1|hnd2k0,29,34,0|hvnanz,29,34,0|hvnao0,30,35,1|i6g3vz,30,35,1|i6g3w0,29,34,0|ieddbz,29,34,0|ieddc0,30,35,1|ip66jz,30,35,1|ip66k0,29,34,0|ix3fzz,29,34,0|ix3g00,30,35,1|j7w97z,30,35,1|j7w980,29,34,0|jeqmnz,29,34,0|jeqmo0,30,35,1|jqzajz,30,35,1|jqzak0,29,34,0|jxgpbz,29,34,0|jxgpc0,30,35,1|k9pd7z,30,35,1|k9pd80,29,34,0|kg6rzz,29,34,0|kg6s00,30,35,1|ksffvz,30,35,1|ksffw0,29,34,0|kz9tbz,29,34,0|kz9tc0,30,35,1|lbih7z,30,35,1|lbih80,29,34,0|lhzvzz,29,34,0|lhzw00,30,35,1|lu8jvz,30,35,1|lu8jw0,29,34,0|m0pynz,29,34,0|m0pyo0,30,35,1|mcymjz,30,35,1|mcymk0,29,34,0|mjg1bz,29,34,0|mjg1c0,30,35,1|mvop7z,30,35,1|mvop80,29,34,0|n263zz,29,34,0|n26400,30,35,1|neervz,30,35,1|neerw0,29,34,0|nkw6nz,29,34,0|nkw6o0,30,35,1|nx4ujz,30,35,1|nx4uk0,29,34,0|o3z7zz,29,34,0|o3z800,30,35,1|og7vvz,30,35,1|og7vw0,29,34,0|ompanz,29,34,0|ompao0,30,35,1|oyxyjz,30,35,1|oyxyk0,29,34,0|p5fdbz,29,34,0|p5fdc0,30,35,1|pho17z,30,35,1|pho180,29,34,0|po5fzz,29,34,0|po5g00,30,35,1|q0e3vz,30,35,1|q0e3w0,29,34,0|q6vinz,29,34,0|q6vio0,30,35,1|qj46jz,30,35,1|qj46k0,29,34,0|qpyjzz,29,34,0|qpyk00,30,35,1|r277vz,30,35,1|r277w0,29,34,0|r8omnz,29,34,0|r8omo0,30,35,1|rkxajz,30,35,1|rkxak0,29,34,0|rrepbz,29,34,0|rrepc0,30,35,1|s3nd7z,30,35,1|s3nd80,29,34,0|sa4rzz,29,34,0|sa4s00,30,35,1|smdfvz,30,35,1|smdfw0,29,34,0|ssuunz,29,34,0|ssuuo0,30,35,1|t53ijz,30,35,1|t53ik0,29,34,0|tbkxbz,29,34,0|tbkxc0,30,35,1|tntl7z,30,35,1|tntl80,29,34,0|tunynz,29,34,0|tunyo0,30,35,1|u6wmjz,30,35,1|u6wmk0,29,34,0|ude1bz,29,34,0|ude1c0,30,35,1|upmp7z,30,35,1|upmp80,29,34,0|uw43zz,29,34,0|uw4400,30,35,1|v8crvz,30,35,1|v8crw0,29,34,0|veu6nz,29,34,0|veu6o0,30,35,1|vr2ujz,30,35,1|vr2uk0,29,34,0|vxk9bz,29,34,0|vxk9c0,30,35,1|w9sx7z,30,35,1|w9sx80,29,34,0|wgnanz,29,34,0|wgnao0,30,35,1|wsvyjz,30,35,1|wsvyk0,29,34,0|wzddbz,29,34,0|wzddc0,30,35,1|xbm17z,30,35,1|xbm180,29,34,0|xi3fzz,29,34,0|xi3g00,30,35,1|xuc3vz,30,35,1|xuc3w0,29,34,0|y0tinz,29,34,0|y0tio0,30,35,1|yd26jz,30,35,1|yd26k0,29,34,0|yjjlbz,29,34,0|yjjlc0,30,35,1|yvs97z,30,35,1|yvs980,29,34,0|z29nzz,29,34,0|z29o00,30,35,1|zeibvz,30,35,1|zeibw0,29,34,0|zlcpbz,29,34,0|zlcpc0,30,35,1|zxld7z,30,35,1|zxld80,29,34,0|1042rzz,29,34,0|1042s00,30,35,1|10gbfvz,30,35,1|10gbfw0,29,34,0|10msunz,29,34,0|10msuo0,30,35,1|10z1ijz,30,35,1|10z1ik0,29,34,0|115ixbz,29,34,0|115ixc0,30,35,1|11hrl7z,30,35,1|11hrl80,29,34,0|11o8zzz,29,34,0|11o9000,30,35,1|120hnvz,30,35,1|120hnw0,29,34,0|126z2nz,29,34,0|126z2o0,30,35,1|12j7qjz,30,35,1|12j7qk0,29,34,0|12q23zz,29,34,0|12q2400,30,35,1|132arvz,30,35,1|132arw0,29,34,0|138s6nz,29,34,0|138s6o0,30,35,1|13l0ujz,30,35,1|13l0uk0,29,34,0|13ri9bz,29,34,0|13ri9c0,30,35,1|143qx7z,30,35,1|143qx80,29,34,0|14a8bzz,29,34,0|14a8c00,30,35,1|14mgzvz,30,35,1|14mgzw0,29,34,0|14syenz,29,34,0|14syeo0,30,35,1|15572jz,30,35,1|15572k0,29,34,0|15c1fzz,29,34,0|15c1g00,30,35,1|15oa3vz,30,35,1|15oa3w0,29,34,0|15urinz,29,34,0|15urio0,30,35,1|16706jz,30,35,1|16706k0,29,34,0|16dhlbz,29,34,0|16dhlc0,30,35,1|16pq97z,30,35,1|16pq980,29,34,0|16w7nzz,29,34,0|16w7o00,30,35,1|178gbvz,30,35,1|178gbw0,29,34,0|17exqnz,29,34,0|17exqo0,30,35,1|17r6ejz,30,35,1|17r6ek0,29,34,0|17xntbz,29,34,0|17xntc0,30,35,1|189wh7z,30,35,1|189wh80,29,34,0|18gqunz,29,34,0|18gquo0,30,35,1|18szijz,30,35,1|18szik0,29,34,0|18zgxbz,29,34,0|18zgxc0,30,35,1|19bpl7z,30,35,1|19bpl80,29,34,0|19i6zzz,29,34,0|19i7000,30,35,1|19ufnvz,30,35,1|19ufnw0,29,34,0|1a0x2nz,29,34,0|1a0x2o0,30,35,1|1ad5qjz,30,35,1|1ad5qk0,29,34,0|1ajn5bz,29,34,0|1ajn5c0,30,35,1|1avvt7z,30,35,1|1avvt80,29,34,0|1b2q6nz,29,34,0|1b2q6o0,30,35,1|1beyujz,30,35,1|1beyuk0,29,34,0|1blg9bz,29,34,0|1blg9c0,30,35,1|1bxox7z,30,35,1|1bxox80,29,34,0|1c46bzz,29,34,0|1c46c00,30,35,1|1cgezvz,30,35,1|1cgezw0,29,34,0|1cmwenz,29,34,0|1cmweo0,30,35,1|1cz52jz,30,35,1|1cz52k0,29,34,0|1d5mhbz,29,34,0|1d5mhc0,30,35,1|1dhv57z,30,35,1|1dhv580,29,34,0|1docjzz,29,34,0|1dock00,30,35,1|1e0l7vz,30,35,1|1e0l7w0,29,34,0|1e7flbz,29,34,0|1e7flc0,30,35,1|1ejo97z,30,35,1|1ejo980,29,34,0|1eq5nzz,29,34,0|1eq5o00,30,35,1|1f2ebvz,30,35,1|1f2ebw0,29,34,0|1f8vqnz,29,34,0|1f8vqo0,30,35,1|1fl4ejz,30,35,1|1fl4ek0,29,34,0|1frltbz,29,34,0|1frltc0,30,35,1|1g3uh7z,30,35,1|1g3uh80,29,34,0|1gabvzz,29,34,0|1gabw00,30,35,1|1gmkjvz,30,35,1|1gmkjw0,29,34,0|1gt1ynz,29,34,0|1gt1yo0,30,35,1|1h5amjz,30,35,1|1h5amk0,29,34,0|1hc4zzz,29,34,0|1hc5000,30,35,1|1hodnvz,30,35,1|1hodnw0,29,34,0|1huv2nz,29,34,0|1huv2o0,30,35,1|1i73qjz,30,35,1|1i73qk0,29,34,0|1idl5bz,29,34,0|1idl5c0,30,35,1|1iptt7z,30,35,1|1iptt80,29,34,0|1iwb7zz,29,34,0|1iwb800,30,35,1|1j8jvvz,30,35,1|1j8jvw0,29,34,0|1jf1anz,29,34,0|1jf1ao0,30,35,1|1jr9yjz,30,35,1|1jr9yk0,29,34,0|1jy4bzz,29,34,0|1jy4c00,30,35,1|1kaczvz,30,35,1|1kaczw0,29,34,0|1kguenz,29,34,0|1kgueo0,30,35,1|1kt32jz,30,35,1|1kt32k0,29,34,0|1kzkhbz,29,34,0|1kzkhc0,30,35,1|1lbt57z,30,35,1|1lbt580,29,34,0|1liajzz,29,34,0|1liak00,30,35,1|1luj7vz,30,35,1|1luj7w0,29,34,0|1m10mnz,29,34,0|1m10mo0,30,35,1|1md9ajz,30,35,1|1md9ak0,29,34,0|1mjqpbz,29,34,0|1mjqpc0,30,35,1|1mvzd7z,30,35,1|1mvzd80,29,34,0|1n2tqnz,29,34,0|1n2tqo0,30,35,1|1nf2ejz,30,35,1|1nf2ek0,29,34,0|1nljtbz,29,34,0|1nljtc0,30,35,1|1nxsh7z,30,35,1|1nxsh80,29,34,0|1o49vzz,29,34,0|1o49w00,30,35,1|1ogijvz,30,35,1|1ogijw0,29,34,0|1omzynz,29,34,0|1omzyo0,30,35,1|1oz8mjz,30,35,1|1oz8mk0,29,34,0|1p5q1bz,29,34,0|1p5q1c0,30,35,1|1phyp7z,30,35,1|1phyp80,29,34,0|1pot2nz,29,34,0|1pot2o0,30,35,1|1q11qjz,30,35,1|1q11qk0,29,34,0|1q7j5bz,29,34,0|1q7j5c0,30,35,1|1qjrt7z,30,35,1|1qjrt80,29,34,0|1qq97zz,29,34,0|1qq9800,30,35,1|1r2hvvz,30,35,1|1r2hvw0,29,34,0|1r8zanz,29,34,0|1r8zao0,30,35,1|1rl7yjz,30,35,1|1rl7yk0,29,34,0|1rrpdbz,29,34,0|1rrpdc0,30,35,1|1s3y17z,30,35,1|1s3y180,29,34,0|1saffzz,29,34,0|1safg00,30,35,1|1smo3vz,30,35,1|1smo3w0,29,34,0|1stihbz,29,34,0|1stihc0,30,35,1|1t5r57z,30,35,1|1t5r580,29,34,0|1tc8jzz,29,34,0|1tc8k00,30,35,1|1toh7vz,30,35,1|1toh7w0,29,34,0|1tuymnz,29,34,0|1tuymo0,30,35,1|1u77ajz,30,35,1|1u77ak0,29,34,0|1udopbz,29,34,0|1udopc0,30,35,1|1upxd7z,30,35,1|1upxd80,29,34,0|1uwerzz,29,34,0|1uwes00,30,35,1|1v8nfvz,30,35,1|1v8nfw0,29,34,0|1vf4unz,29,34,0|1vf4uo0,30,35,1|1vrdijz,30,35,1|1vrdik0,29,34,0|NaN,29,34,0\",\"America/Anchorage|,0,36,0|-1hc7qk0,0,36,0|-1hc7qjz,0,37,0|-1078tkp,0,37,0|-1078tko,31,34,0|-ek1qo1,31,34,0|-ek1qo0,32,35,1|-cq2tg1,32,35,1|-cq2tg0,33,35,1|-cnopg1,33,35,1|-cnopg0,31,34,0|-1fq6w1,31,34,0|-1fq6w0,28,34,0|-cs6o1,28,34,0|-cs6o0,34,35,1|-3f841,34,35,1|-3f840,28,34,0|5xvzz,28,34,0|5xw00,34,35,1|faujz,34,35,1|fauk0,28,34,0|onynz,28,34,0|onyo0,34,35,1|ydvvz,34,35,1|ydvw0,28,34,0|17qzzz,28,34,0|17r000,34,35,1|1h3yjz,34,35,1|1h3yk0,28,34,0|1qh2nz,28,34,0|1qh2o0,34,35,1|1zu17z,34,35,1|1zu180,28,34,0|23fqnz,28,34,0|23fqo0,34,35,1|2ik3vz,34,35,1|2ik3w0,28,34,0|2oojzz,28,34,0|2ook00,34,35,1|31a6jz,34,35,1|31a6k0,28,34,0|3ananz,28,34,0|3anao0,34,35,1|3kd7vz,34,35,1|3kd7w0,28,34,0|3tddbz,28,34,0|3tddc0,34,35,1|433ajz,34,35,1|433ak0,28,34,0|4cgenz,28,34,0|4cgeo0,34,35,1|4ltd7z,34,35,1|4ltd80,28,34,0|4v6hbz,28,34,0|4v6hc0,34,35,1|54jfvz,34,35,1|54jfw0,28,34,0|5dwjzz,28,34,0|5dwk00,34,35,1|5n9ijz,34,35,1|5n9ik0,28,34,0|5wmmnz,28,34,0|5wmmo0,34,35,1|65zl7z,34,35,1|65zl80,28,34,0|6fcpbz,28,34,0|6fcpc0,34,35,1|6p2mjz,34,35,1|6p2mk0,28,34,0|6y2rzz,28,34,0|6y2s00,34,35,1|77sp7z,34,35,1|77sp80,35,35,0|79dybz,35,35,0|79dyc0,36,35,0|7h5qjz,36,35,0|7h5qk0,37,38,1|7qip3z,37,38,1|7qip40,36,35,0|7zvt7z,36,35,0|7zvt80,37,38,1|898rrz,37,38,1|898rs0,36,35,0|8ilvvz,36,35,0|8ilvw0,37,38,1|8ryufz,37,38,1|8ryug0,36,35,0|9092jz,36,35,0|9092k0,37,38,1|9aox3z,37,38,1|9aox40,36,35,0|9iz57z,36,35,0|9iz580,37,38,1|9tryfz,37,38,1|9tryg0,36,35,0|a1p7vz,36,35,0|a1p7w0,37,38,1|aci13z,37,38,1|aci140,36,35,0|akfajz,36,35,0|akfak0,37,38,1|av83rz,37,38,1|av83s0,36,35,0|b3ibvz,36,35,0|b3ibw0,37,38,1|bdy6fz,37,38,1|bdy6g0,36,35,0|bm8ejz,36,35,0|bm8ek0,37,38,1|bwo93z,37,38,1|bwo940,36,35,0|c4yh7z,36,35,0|c4yh80,37,38,1|cfrafz,37,38,1|cfrag0,36,35,0|cnojvz,36,35,0|cnojw0,37,38,1|cyhd3z,37,38,1|cyhd40,36,35,0|d6emjz,36,35,0|d6emk0,37,38,1|dh7frz,37,38,1|dh7fs0,36,35,0|dphnvz,36,35,0|dphnw0,37,38,1|dzxifz,37,38,1|dzxig0,36,35,0|e87qjz,36,35,0|e87qk0,37,38,1|einl3z,37,38,1|einl40,36,35,0|eqxt7z,36,35,0|eqxt80,37,38,1|f1dnrz,37,38,1|f1dns0,36,35,0|f9nvvz,36,35,0|f9nvw0,37,38,1|fkgp3z,37,38,1|fkgp40,36,35,0|fsdyjz,36,35,0|fsdyk0,37,38,1|g36rrz,37,38,1|g36rs0,36,35,0|gb417z,36,35,0|gb4180,37,38,1|glwufz,37,38,1|glwug0,36,35,0|gu72jz,36,35,0|gu72k0,37,38,1|h4mx3z,37,38,1|h4mx40,36,35,0|hcx57z,36,35,0|hcx580,37,38,1|hnczrz,37,38,1|hnczs0,36,35,0|hvn7vz,36,35,0|hvn7w0,37,38,1|i6g13z,37,38,1|i6g140,36,35,0|iedajz,36,35,0|iedak0,37,38,1|ip63rz,37,38,1|ip63s0,36,35,0|ix3d7z,36,35,0|ix3d80,37,38,1|j7w6fz,37,38,1|j7w6g0,36,35,0|jeqjvz,36,35,0|jeqjw0,37,38,1|jqz7rz,37,38,1|jqz7s0,36,35,0|jxgmjz,36,35,0|jxgmk0,37,38,1|k9pafz,37,38,1|k9pag0,36,35,0|kg6p7z,36,35,0|kg6p80,37,38,1|ksfd3z,37,38,1|ksfd40,36,35,0|kz9qjz,36,35,0|kz9qk0,37,38,1|lbiefz,37,38,1|lbieg0,36,35,0|lhzt7z,36,35,0|lhzt80,37,38,1|lu8h3z,37,38,1|lu8h40,36,35,0|m0pvvz,36,35,0|m0pvw0,37,38,1|mcyjrz,37,38,1|mcyjs0,36,35,0|mjfyjz,36,35,0|mjfyk0,37,38,1|mvomfz,37,38,1|mvomg0,36,35,0|n2617z,36,35,0|n26180,37,38,1|neep3z,37,38,1|neep40,36,35,0|nkw3vz,36,35,0|nkw3w0,37,38,1|nx4rrz,37,38,1|nx4rs0,36,35,0|o3z57z,36,35,0|o3z580,37,38,1|og7t3z,37,38,1|og7t40,36,35,0|omp7vz,36,35,0|omp7w0,37,38,1|oyxvrz,37,38,1|oyxvs0,36,35,0|p5fajz,36,35,0|p5fak0,37,38,1|phnyfz,37,38,1|phnyg0,36,35,0|po5d7z,36,35,0|po5d80,37,38,1|q0e13z,37,38,1|q0e140,36,35,0|q6vfvz,36,35,0|q6vfw0,37,38,1|qj43rz,37,38,1|qj43s0,36,35,0|qpyh7z,36,35,0|qpyh80,37,38,1|r2753z,37,38,1|r27540,36,35,0|r8ojvz,36,35,0|r8ojw0,37,38,1|rkx7rz,37,38,1|rkx7s0,36,35,0|rremjz,36,35,0|rremk0,37,38,1|s3nafz,37,38,1|s3nag0,36,35,0|sa4p7z,36,35,0|sa4p80,37,38,1|smdd3z,37,38,1|smdd40,36,35,0|ssurvz,36,35,0|ssurw0,37,38,1|t53frz,37,38,1|t53fs0,36,35,0|tbkujz,36,35,0|tbkuk0,37,38,1|tntifz,37,38,1|tntig0,36,35,0|tunvvz,36,35,0|tunvw0,37,38,1|u6wjrz,37,38,1|u6wjs0,36,35,0|uddyjz,36,35,0|uddyk0,37,38,1|upmmfz,37,38,1|upmmg0,36,35,0|uw417z,36,35,0|uw4180,37,38,1|v8cp3z,37,38,1|v8cp40,36,35,0|veu3vz,36,35,0|veu3w0,37,38,1|vr2rrz,37,38,1|vr2rs0,36,35,0|vxk6jz,36,35,0|vxk6k0,37,38,1|w9sufz,37,38,1|w9sug0,36,35,0|wgn7vz,36,35,0|wgn7w0,37,38,1|wsvvrz,37,38,1|wsvvs0,36,35,0|wzdajz,36,35,0|wzdak0,37,38,1|xblyfz,37,38,1|xblyg0,36,35,0|xi3d7z,36,35,0|xi3d80,37,38,1|xuc13z,37,38,1|xuc140,36,35,0|y0tfvz,36,35,0|y0tfw0,37,38,1|yd23rz,37,38,1|yd23s0,36,35,0|yjjijz,36,35,0|yjjik0,37,38,1|yvs6fz,37,38,1|yvs6g0,36,35,0|z29l7z,36,35,0|z29l80,37,38,1|zei93z,37,38,1|zei940,36,35,0|zlcmjz,36,35,0|zlcmk0,37,38,1|zxlafz,37,38,1|zxlag0,36,35,0|1042p7z,36,35,0|1042p80,37,38,1|10gbd3z,37,38,1|10gbd40,36,35,0|10msrvz,36,35,0|10msrw0,37,38,1|10z1frz,37,38,1|10z1fs0,36,35,0|115iujz,36,35,0|115iuk0,37,38,1|11hrifz,37,38,1|11hrig0,36,35,0|11o8x7z,36,35,0|11o8x80,37,38,1|120hl3z,37,38,1|120hl40,36,35,0|126yzvz,36,35,0|126yzw0,37,38,1|12j7nrz,37,38,1|12j7ns0,36,35,0|12q217z,36,35,0|12q2180,37,38,1|132ap3z,37,38,1|132ap40,36,35,0|138s3vz,36,35,0|138s3w0,37,38,1|13l0rrz,37,38,1|13l0rs0,36,35,0|13ri6jz,36,35,0|13ri6k0,37,38,1|143qufz,37,38,1|143qug0,36,35,0|14a897z,36,35,0|14a8980,37,38,1|14mgx3z,37,38,1|14mgx40,36,35,0|14sybvz,36,35,0|14sybw0,37,38,1|1556zrz,37,38,1|1556zs0,36,35,0|15c1d7z,36,35,0|15c1d80,37,38,1|15oa13z,37,38,1|15oa140,36,35,0|15urfvz,36,35,0|15urfw0,37,38,1|16703rz,37,38,1|16703s0,36,35,0|16dhijz,36,35,0|16dhik0,37,38,1|16pq6fz,37,38,1|16pq6g0,36,35,0|16w7l7z,36,35,0|16w7l80,37,38,1|178g93z,37,38,1|178g940,36,35,0|17exnvz,36,35,0|17exnw0,37,38,1|17r6brz,37,38,1|17r6bs0,36,35,0|17xnqjz,36,35,0|17xnqk0,37,38,1|189wefz,37,38,1|189weg0,36,35,0|18gqrvz,36,35,0|18gqrw0,37,38,1|18szfrz,37,38,1|18szfs0,36,35,0|18zgujz,36,35,0|18zguk0,37,38,1|19bpifz,37,38,1|19bpig0,36,35,0|19i6x7z,36,35,0|19i6x80,37,38,1|19ufl3z,37,38,1|19ufl40,36,35,0|1a0wzvz,36,35,0|1a0wzw0,37,38,1|1ad5nrz,37,38,1|1ad5ns0,36,35,0|1ajn2jz,36,35,0|1ajn2k0,37,38,1|1avvqfz,37,38,1|1avvqg0,36,35,0|1b2q3vz,36,35,0|1b2q3w0,37,38,1|1beyrrz,37,38,1|1beyrs0,36,35,0|1blg6jz,36,35,0|1blg6k0,37,38,1|1bxoufz,37,38,1|1bxoug0,36,35,0|1c4697z,36,35,0|1c46980,37,38,1|1cgex3z,37,38,1|1cgex40,36,35,0|1cmwbvz,36,35,0|1cmwbw0,37,38,1|1cz4zrz,37,38,1|1cz4zs0,36,35,0|1d5mejz,36,35,0|1d5mek0,37,38,1|1dhv2fz,37,38,1|1dhv2g0,36,35,0|1doch7z,36,35,0|1doch80,37,38,1|1e0l53z,37,38,1|1e0l540,36,35,0|1e7fijz,36,35,0|1e7fik0,37,38,1|1ejo6fz,37,38,1|1ejo6g0,36,35,0|1eq5l7z,36,35,0|1eq5l80,37,38,1|1f2e93z,37,38,1|1f2e940,36,35,0|1f8vnvz,36,35,0|1f8vnw0,37,38,1|1fl4brz,37,38,1|1fl4bs0,36,35,0|1frlqjz,36,35,0|1frlqk0,37,38,1|1g3uefz,37,38,1|1g3ueg0,36,35,0|1gabt7z,36,35,0|1gabt80,37,38,1|1gmkh3z,37,38,1|1gmkh40,36,35,0|1gt1vvz,36,35,0|1gt1vw0,37,38,1|1h5ajrz,37,38,1|1h5ajs0,36,35,0|1hc4x7z,36,35,0|1hc4x80,37,38,1|1hodl3z,37,38,1|1hodl40,36,35,0|1huuzvz,36,35,0|1huuzw0,37,38,1|1i73nrz,37,38,1|1i73ns0,36,35,0|1idl2jz,36,35,0|1idl2k0,37,38,1|1iptqfz,37,38,1|1iptqg0,36,35,0|1iwb57z,36,35,0|1iwb580,37,38,1|1j8jt3z,37,38,1|1j8jt40,36,35,0|1jf17vz,36,35,0|1jf17w0,37,38,1|1jr9vrz,37,38,1|1jr9vs0,36,35,0|1jy497z,36,35,0|1jy4980,37,38,1|1kacx3z,37,38,1|1kacx40,36,35,0|1kgubvz,36,35,0|1kgubw0,37,38,1|1kt2zrz,37,38,1|1kt2zs0,36,35,0|1kzkejz,36,35,0|1kzkek0,37,38,1|1lbt2fz,37,38,1|1lbt2g0,36,35,0|1liah7z,36,35,0|1liah80,37,38,1|1luj53z,37,38,1|1luj540,36,35,0|1m10jvz,36,35,0|1m10jw0,37,38,1|1md97rz,37,38,1|1md97s0,36,35,0|1mjqmjz,36,35,0|1mjqmk0,37,38,1|1mvzafz,37,38,1|1mvzag0,36,35,0|1n2tnvz,36,35,0|1n2tnw0,37,38,1|1nf2brz,37,38,1|1nf2bs0,36,35,0|1nljqjz,36,35,0|1nljqk0,37,38,1|1nxsefz,37,38,1|1nxseg0,36,35,0|1o49t7z,36,35,0|1o49t80,37,38,1|1ogih3z,37,38,1|1ogih40,36,35,0|1omzvvz,36,35,0|1omzvw0,37,38,1|1oz8jrz,37,38,1|1oz8js0,36,35,0|1p5pyjz,36,35,0|1p5pyk0,37,38,1|1phymfz,37,38,1|1phymg0,36,35,0|1poszvz,36,35,0|1poszw0,37,38,1|1q11nrz,37,38,1|1q11ns0,36,35,0|1q7j2jz,36,35,0|1q7j2k0,37,38,1|1qjrqfz,37,38,1|1qjrqg0,36,35,0|1qq957z,36,35,0|1qq9580,37,38,1|1r2ht3z,37,38,1|1r2ht40,36,35,0|1r8z7vz,36,35,0|1r8z7w0,37,38,1|1rl7vrz,37,38,1|1rl7vs0,36,35,0|1rrpajz,36,35,0|1rrpak0,37,38,1|1s3xyfz,37,38,1|1s3xyg0,36,35,0|1safd7z,36,35,0|1safd80,37,38,1|1smo13z,37,38,1|1smo140,36,35,0|1stiejz,36,35,0|1stiek0,37,38,1|1t5r2fz,37,38,1|1t5r2g0,36,35,0|1tc8h7z,36,35,0|1tc8h80,37,38,1|1toh53z,37,38,1|1toh540,36,35,0|1tuyjvz,36,35,0|1tuyjw0,37,38,1|1u777rz,37,38,1|1u777s0,36,35,0|1udomjz,36,35,0|1udomk0,37,38,1|1upxafz,37,38,1|1upxag0,36,35,0|1uwep7z,36,35,0|1uwep80,37,38,1|1v8nd3z,37,38,1|1v8nd40,36,35,0|1vf4rvz,36,35,0|1vf4rw0,37,38,1|1vrdfrz,37,38,1|1vrdfs0,36,35,0|NaN,36,35,0\",\"America/Anguilla|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/Antigua|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/Araguaina|,0,42,0|-t85j2p,0,42,0|-t85j2o,38,41,0|-jylag1,38,41,0|-jylag0,39,43,1|-jpb141,39,43,1|-jpb140,38,41,0|-jfsd01,38,41,0|-jfsd00,39,43,1|-j6j3s1,39,43,1|-j6j3s0,38,41,0|-ahcyc1,38,41,0|-ahcyc0,39,43,1|-aad3o1,39,43,1|-aad3o0,38,41,0|-9yl101,38,41,0|-9yl100,39,43,1|-9sd141,39,43,1|-9sd140,38,41,0|-9ft3o1,38,41,0|-9ft3o0,39,43,1|-99j941,39,43,1|-99j940,38,41,0|-8wzbo1,38,41,0|-8wzbo0,39,43,1|-8scqg1,39,43,1|-8scqg0,38,41,0|-35xmc1,38,41,0|-35xmc0,39,43,1|-31nzs1,39,43,1|-31nzs0,38,41,0|-2kdp01,38,41,0|-2kdp00,39,43,1|-2hcig1,39,43,1|-2hcig0,38,41,0|-24qqc1,38,41,0|-24qqc0,39,43,1|-204541,39,43,1|-204540,38,41,0|-1nid01,38,41,0|-1nid00,39,43,1|-1hc7s1,39,43,1|-1hc7s0,38,41,0|-14qfo1,38,41,0|-14qfo0,39,43,1|-yifs1,39,43,1|-yifs0,38,41,0|89jcbz,38,41,0|89jcc0,39,43,1|8gdk7z,39,43,1|8gdk80,38,41,0|8rwgbz,38,41,0|8rwgc0,39,43,1|8xns7z,39,43,1|8xns80,38,41,0|9aodnz,38,41,0|9aodo0,39,43,1|9g2qvz,39,43,1|9g2qw0,38,41,0|9t1hnz,38,41,0|9t1ho0,39,43,1|9yfuvz,39,43,1|9yfuw0,38,41,0|abrkbz,38,41,0|abrkc0,39,43,1|ahvuvz,39,43,1|ahvuw0,38,41,0|dggyzz,38,41,0|dggz00,39,43,1|dml9jz,39,43,1|dml9k0,38,41,0|dyu2zz,38,41,0|dyu300,39,43,1|e5oavz,39,43,1|e5oaw0,38,41,0|ehm0bz,38,41,0|ehm0c0,39,43,1|ep4avz,39,43,1|ep4aw0,38,41,0|f0n6zz,38,41,0|f0n700,39,43,1|f7hevz,39,43,1|f7hew0,38,41,0|fj0azz,38,41,0|fj0b00,39,43,1|fqkg7z,39,43,1|fqkg80,38,41,0|g23cbz,38,41,0|g23cc0,39,43,1|g8xk7z,39,43,1|g8xk80,38,41,0|gl6dnz,38,41,0|gl6do0,39,43,1|grnmvz,39,43,1|grnmw0,38,41,0|h4zcbz,38,41,0|h4zcc0,39,43,1|hadpjz,39,43,1|hadpk0,38,41,0|mc82zz,38,41,0|mc8300,39,43,1|micdjz,39,43,1|micdk0,38,41,0|NaN,38,41,0\",\"America/Argentina/Buenos_Aires|,0,44,0|-138aaid,0,44,0|-138aaic,40,45,0|-px7ys1,40,45,0|-px7ys0,41,40,0|-kecq81,41,40,0|-kecq80,38,41,1|-k84qc1,38,41,1|-k84qc0,41,40,0|-jxzu81,41,40,0|-jxzu80,38,41,1|-jqwd01,38,41,1|-jqwd00,41,40,0|-jeakw1,41,40,0|-jeakw0,38,41,1|-j84fo1,38,41,1|-j84fo0,41,40,0|-ivink1,41,40,0|-ivink0,38,41,1|-ipcic1,38,41,1|-ipcic0,41,40,0|-icqq81,41,40,0|-icqq80,38,41,1|-i6kl01,38,41,1|-i6kl00,41,40,0|-htysw1,41,40,0|-htysw0,38,41,1|-hnqt01,38,41,1|-hnqt00,41,40,0|-hb50w1,41,40,0|-hb50w0,38,41,1|-h4yvo1,38,41,1|-h4yvo0,41,40,0|-gsd3k1,41,40,0|-gsd3k0,38,41,1|-gm6yc1,38,41,1|-gm6yc0,41,40,0|-g9l681,41,40,0|-g9l680,38,41,1|-g3f101,38,41,1|-g3f100,41,40,0|-fqt8w1,41,40,0|-fqt8w0,38,41,1|-fkl901,38,41,1|-fkl900,41,40,0|-feb8w1,41,40,0|-feb8w0,38,41,1|-ewd101,38,41,1|-ewd100,41,40,0|-eq30w1,41,40,0|-eq30w0,38,41,1|-dse501,38,41,1|-dse500,41,40,0|-doj681,41,40,0|-doj680,38,41,1|-cfvuc1,38,41,1|-cfvuc0,41,40,0|-c4vgw1,41,40,0|-c4vgw0,38,41,1|-39hec1,38,41,1|-39hec0,41,40,0|-35mfk1,41,40,0|-35mfk0,38,41,1|-31nx01,38,41,1|-31nx00,41,40,0|-2pxm81,41,40,0|-2pxm80,38,41,1|-2ivzo1,38,41,1|-2ivzo0,41,40,0|-275ow1,41,40,0|-275ow0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1odrk1,41,40,0|-1odrk0,38,41,1|-1fovo1,38,41,1|-1fovo0,41,40,0|-16brk1,41,40,0|-16brk0,38,41,1|-wluc1,38,41,1|-wluc0,41,40,0|-n8q81,41,40,0|-n8q80,38,41,1|-dvro1,38,41,1|-dvro0,41,40,0|-4ink1,41,40,0|-4ink0,38,41,0|24aizz,38,41,0|24aj00,39,43,1|29bxjz,39,43,1|29bxk0,38,41,0|9veobz,38,41,0|9veoc0,39,43,1|a08o7z,39,43,1|a08o80,38,41,0|abrkbz,38,41,0|abrkc0,39,43,1|aiyqvz,39,43,1|aiyqw0,38,41,0|auulnz,38,41,0|auulo0,39,43,1|b1otjz,39,43,1|b1otk0,38,41,0|bdkobz,38,41,0|bdkoc0,39,43,1|bkew7z,39,43,1|bkew80,38,41,0|bwaqzz,38,41,0|bwar00,39,43,1|c3hxjz,39,43,1|c3hxk0,38,41,0|fj0azz,38,41,0|fj0b00,38,41,1|fqtsbz,38,41,1|fqtsc0,38,41,0|jtudnz,38,41,0|jtudo0,39,43,1|jxsw7z,39,43,1|jxsw80,38,41,0|k8ytnz,38,41,0|k8yto0,39,43,1|kgiyvz,39,43,1|kgiyw0,38,41,0|NaN,38,41,0\",\"America/Argentina/Catamarca|,0,46,0|-138a95h,0,46,0|-138a95g,40,45,0|-px7ys1,40,45,0|-px7ys0,41,40,0|-kecq81,41,40,0|-kecq80,38,41,1|-k84qc1,38,41,1|-k84qc0,41,40,0|-jxzu81,41,40,0|-jxzu80,38,41,1|-jqwd01,38,41,1|-jqwd00,41,40,0|-jeakw1,41,40,0|-jeakw0,38,41,1|-j84fo1,38,41,1|-j84fo0,41,40,0|-ivink1,41,40,0|-ivink0,38,41,1|-ipcic1,38,41,1|-ipcic0,41,40,0|-icqq81,41,40,0|-icqq80,38,41,1|-i6kl01,38,41,1|-i6kl00,41,40,0|-htysw1,41,40,0|-htysw0,38,41,1|-hnqt01,38,41,1|-hnqt00,41,40,0|-hb50w1,41,40,0|-hb50w0,38,41,1|-h4yvo1,38,41,1|-h4yvo0,41,40,0|-gsd3k1,41,40,0|-gsd3k0,38,41,1|-gm6yc1,38,41,1|-gm6yc0,41,40,0|-g9l681,41,40,0|-g9l680,38,41,1|-g3f101,38,41,1|-g3f100,41,40,0|-fqt8w1,41,40,0|-fqt8w0,38,41,1|-fkl901,38,41,1|-fkl900,41,40,0|-feb8w1,41,40,0|-feb8w0,38,41,1|-ewd101,38,41,1|-ewd100,41,40,0|-eq30w1,41,40,0|-eq30w0,38,41,1|-dse501,38,41,1|-dse500,41,40,0|-doj681,41,40,0|-doj680,38,41,1|-cfvuc1,38,41,1|-cfvuc0,41,40,0|-c4vgw1,41,40,0|-c4vgw0,38,41,1|-39hec1,38,41,1|-39hec0,41,40,0|-35mfk1,41,40,0|-35mfk0,38,41,1|-31nx01,38,41,1|-31nx00,41,40,0|-2pxm81,41,40,0|-2pxm80,38,41,1|-2ivzo1,38,41,1|-2ivzo0,41,40,0|-275ow1,41,40,0|-275ow0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1odrk1,41,40,0|-1odrk0,38,41,1|-1fovo1,38,41,1|-1fovo0,41,40,0|-16brk1,41,40,0|-16brk0,38,41,1|-wluc1,38,41,1|-wluc0,41,40,0|-n8q81,41,40,0|-n8q80,38,41,1|-dvro1,38,41,1|-dvro0,41,40,0|-4ink1,41,40,0|-4ink0,38,41,0|24aizz,38,41,0|24aj00,39,43,1|29bxjz,39,43,1|29bxk0,38,41,0|9veobz,38,41,0|9veoc0,39,43,1|a08o7z,39,43,1|a08o80,38,41,0|abrkbz,38,41,0|abrkc0,39,43,1|aiyqvz,39,43,1|aiyqw0,38,41,0|auulnz,38,41,0|auulo0,39,43,1|b1otjz,39,43,1|b1otk0,41,40,0|bdkr3z,41,40,0|bdkr40,39,43,1|bkew7z,39,43,1|bkew80,38,41,0|bwaqzz,38,41,0|bwar00,39,43,1|c3hxjz,39,43,1|c3hxk0,38,41,0|fj0azz,38,41,0|fj0b00,38,41,1|fqtsbz,38,41,1|fqtsc0,38,41,0|hym0bz,38,41,0|hym0c0,41,40,0|hzl9rz,41,40,0|hzl9s0,38,41,0|jtudnz,38,41,0|jtudo0,39,43,1|jxsw7z,39,43,1|jxsw80,38,41,0|NaN,38,41,0\",\"America/Argentina/Cordoba|,0,45,0|-138a9g1,0,45,0|-138a9g0,40,45,0|-px7ys1,40,45,0|-px7ys0,41,40,0|-kecq81,41,40,0|-kecq80,38,41,1|-k84qc1,38,41,1|-k84qc0,41,40,0|-jxzu81,41,40,0|-jxzu80,38,41,1|-jqwd01,38,41,1|-jqwd00,41,40,0|-jeakw1,41,40,0|-jeakw0,38,41,1|-j84fo1,38,41,1|-j84fo0,41,40,0|-ivink1,41,40,0|-ivink0,38,41,1|-ipcic1,38,41,1|-ipcic0,41,40,0|-icqq81,41,40,0|-icqq80,38,41,1|-i6kl01,38,41,1|-i6kl00,41,40,0|-htysw1,41,40,0|-htysw0,38,41,1|-hnqt01,38,41,1|-hnqt00,41,40,0|-hb50w1,41,40,0|-hb50w0,38,41,1|-h4yvo1,38,41,1|-h4yvo0,41,40,0|-gsd3k1,41,40,0|-gsd3k0,38,41,1|-gm6yc1,38,41,1|-gm6yc0,41,40,0|-g9l681,41,40,0|-g9l680,38,41,1|-g3f101,38,41,1|-g3f100,41,40,0|-fqt8w1,41,40,0|-fqt8w0,38,41,1|-fkl901,38,41,1|-fkl900,41,40,0|-feb8w1,41,40,0|-feb8w0,38,41,1|-ewd101,38,41,1|-ewd100,41,40,0|-eq30w1,41,40,0|-eq30w0,38,41,1|-dse501,38,41,1|-dse500,41,40,0|-doj681,41,40,0|-doj680,38,41,1|-cfvuc1,38,41,1|-cfvuc0,41,40,0|-c4vgw1,41,40,0|-c4vgw0,38,41,1|-39hec1,38,41,1|-39hec0,41,40,0|-35mfk1,41,40,0|-35mfk0,38,41,1|-31nx01,38,41,1|-31nx00,41,40,0|-2pxm81,41,40,0|-2pxm80,38,41,1|-2ivzo1,38,41,1|-2ivzo0,41,40,0|-275ow1,41,40,0|-275ow0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1odrk1,41,40,0|-1odrk0,38,41,1|-1fovo1,38,41,1|-1fovo0,41,40,0|-16brk1,41,40,0|-16brk0,38,41,1|-wluc1,38,41,1|-wluc0,41,40,0|-n8q81,41,40,0|-n8q80,38,41,1|-dvro1,38,41,1|-dvro0,41,40,0|-4ink1,41,40,0|-4ink0,38,41,0|24aizz,38,41,0|24aj00,39,43,1|29bxjz,39,43,1|29bxk0,38,41,0|9veobz,38,41,0|9veoc0,39,43,1|a08o7z,39,43,1|a08o80,38,41,0|abrkbz,38,41,0|abrkc0,39,43,1|aiyqvz,39,43,1|aiyqw0,38,41,0|auulnz,38,41,0|auulo0,39,43,1|b1otjz,39,43,1|b1otk0,41,40,0|bdkr3z,41,40,0|bdkr40,39,43,1|bkew7z,39,43,1|bkew80,38,41,0|bwaqzz,38,41,0|bwar00,39,43,1|c3hxjz,39,43,1|c3hxk0,38,41,0|fj0azz,38,41,0|fj0b00,38,41,1|fqtsbz,38,41,1|fqtsc0,38,41,0|jtudnz,38,41,0|jtudo0,39,43,1|jxsw7z,39,43,1|jxsw80,38,41,0|k8ytnz,38,41,0|k8yto0,39,43,1|kgiyvz,39,43,1|kgiyw0,38,41,0|NaN,38,41,0\",\"America/Argentina/Jujuy|,0,47,0|-138a98p,0,47,0|-138a98o,40,45,0|-px7ys1,40,45,0|-px7ys0,41,40,0|-kecq81,41,40,0|-kecq80,38,41,1|-k84qc1,38,41,1|-k84qc0,41,40,0|-jxzu81,41,40,0|-jxzu80,38,41,1|-jqwd01,38,41,1|-jqwd00,41,40,0|-jeakw1,41,40,0|-jeakw0,38,41,1|-j84fo1,38,41,1|-j84fo0,41,40,0|-ivink1,41,40,0|-ivink0,38,41,1|-ipcic1,38,41,1|-ipcic0,41,40,0|-icqq81,41,40,0|-icqq80,38,41,1|-i6kl01,38,41,1|-i6kl00,41,40,0|-htysw1,41,40,0|-htysw0,38,41,1|-hnqt01,38,41,1|-hnqt00,41,40,0|-hb50w1,41,40,0|-hb50w0,38,41,1|-h4yvo1,38,41,1|-h4yvo0,41,40,0|-gsd3k1,41,40,0|-gsd3k0,38,41,1|-gm6yc1,38,41,1|-gm6yc0,41,40,0|-g9l681,41,40,0|-g9l680,38,41,1|-g3f101,38,41,1|-g3f100,41,40,0|-fqt8w1,41,40,0|-fqt8w0,38,41,1|-fkl901,38,41,1|-fkl900,41,40,0|-feb8w1,41,40,0|-feb8w0,38,41,1|-ewd101,38,41,1|-ewd100,41,40,0|-eq30w1,41,40,0|-eq30w0,38,41,1|-dse501,38,41,1|-dse500,41,40,0|-doj681,41,40,0|-doj680,38,41,1|-cfvuc1,38,41,1|-cfvuc0,41,40,0|-c4vgw1,41,40,0|-c4vgw0,38,41,1|-39hec1,38,41,1|-39hec0,41,40,0|-35mfk1,41,40,0|-35mfk0,38,41,1|-31nx01,38,41,1|-31nx00,41,40,0|-2pxm81,41,40,0|-2pxm80,38,41,1|-2ivzo1,38,41,1|-2ivzo0,41,40,0|-275ow1,41,40,0|-275ow0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1odrk1,41,40,0|-1odrk0,38,41,1|-1fovo1,38,41,1|-1fovo0,41,40,0|-16brk1,41,40,0|-16brk0,38,41,1|-wluc1,38,41,1|-wluc0,41,40,0|-n8q81,41,40,0|-n8q80,38,41,1|-dvro1,38,41,1|-dvro0,41,40,0|-4ink1,41,40,0|-4ink0,38,41,0|24aizz,38,41,0|24aj00,39,43,1|29bxjz,39,43,1|29bxk0,38,41,0|9veobz,38,41,0|9veoc0,39,43,1|a08o7z,39,43,1|a08o80,38,41,0|abrkbz,38,41,0|abrkc0,39,43,1|aiyqvz,39,43,1|aiyqw0,41,40,0|av7n3z,41,40,0|av7n40,38,41,1|b2etnz,38,41,1|b2eto0,41,40,0|bcutrz,41,40,0|bcuts0,39,43,1|bkew7z,39,43,1|bkew80,38,41,0|bwaqzz,38,41,0|bwar00,39,43,1|c3hxjz,39,43,1|c3hxk0,38,41,0|fj0azz,38,41,0|fj0b00,38,41,1|fqtsbz,38,41,1|fqtsc0,38,41,0|jtudnz,38,41,0|jtudo0,39,43,1|jxsw7z,39,43,1|jxsw80,38,41,0|NaN,38,41,0\",\"America/Argentina/La_Rioja|,0,48,0|-138a8yd,0,48,0|-138a8yc,40,45,0|-px7ys1,40,45,0|-px7ys0,41,40,0|-kecq81,41,40,0|-kecq80,38,41,1|-k84qc1,38,41,1|-k84qc0,41,40,0|-jxzu81,41,40,0|-jxzu80,38,41,1|-jqwd01,38,41,1|-jqwd00,41,40,0|-jeakw1,41,40,0|-jeakw0,38,41,1|-j84fo1,38,41,1|-j84fo0,41,40,0|-ivink1,41,40,0|-ivink0,38,41,1|-ipcic1,38,41,1|-ipcic0,41,40,0|-icqq81,41,40,0|-icqq80,38,41,1|-i6kl01,38,41,1|-i6kl00,41,40,0|-htysw1,41,40,0|-htysw0,38,41,1|-hnqt01,38,41,1|-hnqt00,41,40,0|-hb50w1,41,40,0|-hb50w0,38,41,1|-h4yvo1,38,41,1|-h4yvo0,41,40,0|-gsd3k1,41,40,0|-gsd3k0,38,41,1|-gm6yc1,38,41,1|-gm6yc0,41,40,0|-g9l681,41,40,0|-g9l680,38,41,1|-g3f101,38,41,1|-g3f100,41,40,0|-fqt8w1,41,40,0|-fqt8w0,38,41,1|-fkl901,38,41,1|-fkl900,41,40,0|-feb8w1,41,40,0|-feb8w0,38,41,1|-ewd101,38,41,1|-ewd100,41,40,0|-eq30w1,41,40,0|-eq30w0,38,41,1|-dse501,38,41,1|-dse500,41,40,0|-doj681,41,40,0|-doj680,38,41,1|-cfvuc1,38,41,1|-cfvuc0,41,40,0|-c4vgw1,41,40,0|-c4vgw0,38,41,1|-39hec1,38,41,1|-39hec0,41,40,0|-35mfk1,41,40,0|-35mfk0,38,41,1|-31nx01,38,41,1|-31nx00,41,40,0|-2pxm81,41,40,0|-2pxm80,38,41,1|-2ivzo1,38,41,1|-2ivzo0,41,40,0|-275ow1,41,40,0|-275ow0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1odrk1,41,40,0|-1odrk0,38,41,1|-1fovo1,38,41,1|-1fovo0,41,40,0|-16brk1,41,40,0|-16brk0,38,41,1|-wluc1,38,41,1|-wluc0,41,40,0|-n8q81,41,40,0|-n8q80,38,41,1|-dvro1,38,41,1|-dvro0,41,40,0|-4ink1,41,40,0|-4ink0,38,41,0|24aizz,38,41,0|24aj00,39,43,1|29bxjz,39,43,1|29bxk0,38,41,0|9veobz,38,41,0|9veoc0,39,43,1|a08o7z,39,43,1|a08o80,38,41,0|abrkbz,38,41,0|abrkc0,39,43,1|aiyqvz,39,43,1|aiyqw0,38,41,0|auulnz,38,41,0|auulo0,39,43,1|b1l47z,39,43,1|b1l480,41,40,0|b51cfz,41,40,0|b51cg0,38,41,0|bdkobz,38,41,0|bdkoc0,39,43,1|bkew7z,39,43,1|bkew80,38,41,0|bwaqzz,38,41,0|bwar00,39,43,1|c3hxjz,39,43,1|c3hxk0,38,41,0|fj0azz,38,41,0|fj0b00,38,41,1|fqtsbz,38,41,1|fqtsc0,38,41,0|hym0bz,38,41,0|hym0c0,41,40,0|hzl9rz,41,40,0|hzl9s0,38,41,0|jtudnz,38,41,0|jtudo0,39,43,1|jxsw7z,39,43,1|jxsw80,38,41,0|NaN,38,41,0\",\"America/Argentina/Mendoza|,0,49,0|-138a8l9,0,49,0|-138a8l8,40,45,0|-px7ys1,40,45,0|-px7ys0,41,40,0|-kecq81,41,40,0|-kecq80,38,41,1|-k84qc1,38,41,1|-k84qc0,41,40,0|-jxzu81,41,40,0|-jxzu80,38,41,1|-jqwd01,38,41,1|-jqwd00,41,40,0|-jeakw1,41,40,0|-jeakw0,38,41,1|-j84fo1,38,41,1|-j84fo0,41,40,0|-ivink1,41,40,0|-ivink0,38,41,1|-ipcic1,38,41,1|-ipcic0,41,40,0|-icqq81,41,40,0|-icqq80,38,41,1|-i6kl01,38,41,1|-i6kl00,41,40,0|-htysw1,41,40,0|-htysw0,38,41,1|-hnqt01,38,41,1|-hnqt00,41,40,0|-hb50w1,41,40,0|-hb50w0,38,41,1|-h4yvo1,38,41,1|-h4yvo0,41,40,0|-gsd3k1,41,40,0|-gsd3k0,38,41,1|-gm6yc1,38,41,1|-gm6yc0,41,40,0|-g9l681,41,40,0|-g9l680,38,41,1|-g3f101,38,41,1|-g3f100,41,40,0|-fqt8w1,41,40,0|-fqt8w0,38,41,1|-fkl901,38,41,1|-fkl900,41,40,0|-feb8w1,41,40,0|-feb8w0,38,41,1|-ewd101,38,41,1|-ewd100,41,40,0|-eq30w1,41,40,0|-eq30w0,38,41,1|-dse501,38,41,1|-dse500,41,40,0|-doj681,41,40,0|-doj680,38,41,1|-cfvuc1,38,41,1|-cfvuc0,41,40,0|-c4vgw1,41,40,0|-c4vgw0,38,41,1|-39hec1,38,41,1|-39hec0,41,40,0|-35mfk1,41,40,0|-35mfk0,38,41,1|-31nx01,38,41,1|-31nx00,41,40,0|-2pxm81,41,40,0|-2pxm80,38,41,1|-2ivzo1,38,41,1|-2ivzo0,41,40,0|-275ow1,41,40,0|-275ow0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1odrk1,41,40,0|-1odrk0,38,41,1|-1fovo1,38,41,1|-1fovo0,41,40,0|-16brk1,41,40,0|-16brk0,38,41,1|-wluc1,38,41,1|-wluc0,41,40,0|-n8q81,41,40,0|-n8q80,38,41,1|-dvro1,38,41,1|-dvro0,41,40,0|-4ink1,41,40,0|-4ink0,38,41,0|24aizz,38,41,0|24aj00,39,43,1|29bxjz,39,43,1|29bxk0,38,41,0|9veobz,38,41,0|9veoc0,39,43,1|a08o7z,39,43,1|a08o80,38,41,0|abrkbz,38,41,0|abrkc0,39,43,1|aiyqvz,39,43,1|aiyqw0,41,40,0|aujkfz,41,40,0|aujkg0,38,41,1|b1l6zz,38,41,1|b1l700,41,40,0|bdbhrz,41,40,0|bdbhs0,38,41,1|bkeyzz,38,41,1|bkez00,41,40,0|bwatrz,41,40,0|bwats0,39,43,1|c3hxjz,39,43,1|c3hxk0,38,41,0|fj0azz,38,41,0|fj0b00,38,41,1|fqtsbz,38,41,1|fqtsc0,38,41,0|hy5cbz,38,41,0|hy5cc0,41,40,0|i4mr3z,41,40,0|i4mr40,38,41,0|jtudnz,38,41,0|jtudo0,39,43,1|jxsw7z,39,43,1|jxsw80,38,41,0|NaN,38,41,0\",\"America/Argentina/Rio_Gallegos|,0,50,0|-138a8il,0,50,0|-138a8ik,40,45,0|-px7ys1,40,45,0|-px7ys0,41,40,0|-kecq81,41,40,0|-kecq80,38,41,1|-k84qc1,38,41,1|-k84qc0,41,40,0|-jxzu81,41,40,0|-jxzu80,38,41,1|-jqwd01,38,41,1|-jqwd00,41,40,0|-jeakw1,41,40,0|-jeakw0,38,41,1|-j84fo1,38,41,1|-j84fo0,41,40,0|-ivink1,41,40,0|-ivink0,38,41,1|-ipcic1,38,41,1|-ipcic0,41,40,0|-icqq81,41,40,0|-icqq80,38,41,1|-i6kl01,38,41,1|-i6kl00,41,40,0|-htysw1,41,40,0|-htysw0,38,41,1|-hnqt01,38,41,1|-hnqt00,41,40,0|-hb50w1,41,40,0|-hb50w0,38,41,1|-h4yvo1,38,41,1|-h4yvo0,41,40,0|-gsd3k1,41,40,0|-gsd3k0,38,41,1|-gm6yc1,38,41,1|-gm6yc0,41,40,0|-g9l681,41,40,0|-g9l680,38,41,1|-g3f101,38,41,1|-g3f100,41,40,0|-fqt8w1,41,40,0|-fqt8w0,38,41,1|-fkl901,38,41,1|-fkl900,41,40,0|-feb8w1,41,40,0|-feb8w0,38,41,1|-ewd101,38,41,1|-ewd100,41,40,0|-eq30w1,41,40,0|-eq30w0,38,41,1|-dse501,38,41,1|-dse500,41,40,0|-doj681,41,40,0|-doj680,38,41,1|-cfvuc1,38,41,1|-cfvuc0,41,40,0|-c4vgw1,41,40,0|-c4vgw0,38,41,1|-39hec1,38,41,1|-39hec0,41,40,0|-35mfk1,41,40,0|-35mfk0,38,41,1|-31nx01,38,41,1|-31nx00,41,40,0|-2pxm81,41,40,0|-2pxm80,38,41,1|-2ivzo1,38,41,1|-2ivzo0,41,40,0|-275ow1,41,40,0|-275ow0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1odrk1,41,40,0|-1odrk0,38,41,1|-1fovo1,38,41,1|-1fovo0,41,40,0|-16brk1,41,40,0|-16brk0,38,41,1|-wluc1,38,41,1|-wluc0,41,40,0|-n8q81,41,40,0|-n8q80,38,41,1|-dvro1,38,41,1|-dvro0,41,40,0|-4ink1,41,40,0|-4ink0,38,41,0|24aizz,38,41,0|24aj00,39,43,1|29bxjz,39,43,1|29bxk0,38,41,0|9veobz,38,41,0|9veoc0,39,43,1|a08o7z,39,43,1|a08o80,38,41,0|abrkbz,38,41,0|abrkc0,39,43,1|aiyqvz,39,43,1|aiyqw0,38,41,0|auulnz,38,41,0|auulo0,39,43,1|b1otjz,39,43,1|b1otk0,38,41,0|bdkobz,38,41,0|bdkoc0,39,43,1|bkew7z,39,43,1|bkew80,38,41,0|bwaqzz,38,41,0|bwar00,39,43,1|c3hxjz,39,43,1|c3hxk0,38,41,0|fj0azz,38,41,0|fj0b00,38,41,1|fqtsbz,38,41,1|fqtsc0,38,41,0|hym0bz,38,41,0|hym0c0,41,40,0|hzl9rz,41,40,0|hzl9s0,38,41,0|jtudnz,38,41,0|jtudo0,39,43,1|jxsw7z,39,43,1|jxsw80,38,41,0|NaN,38,41,0\",\"America/Argentina/Salta|,0,51,0|-138a97x,0,51,0|-138a97w,40,45,0|-px7ys1,40,45,0|-px7ys0,41,40,0|-kecq81,41,40,0|-kecq80,38,41,1|-k84qc1,38,41,1|-k84qc0,41,40,0|-jxzu81,41,40,0|-jxzu80,38,41,1|-jqwd01,38,41,1|-jqwd00,41,40,0|-jeakw1,41,40,0|-jeakw0,38,41,1|-j84fo1,38,41,1|-j84fo0,41,40,0|-ivink1,41,40,0|-ivink0,38,41,1|-ipcic1,38,41,1|-ipcic0,41,40,0|-icqq81,41,40,0|-icqq80,38,41,1|-i6kl01,38,41,1|-i6kl00,41,40,0|-htysw1,41,40,0|-htysw0,38,41,1|-hnqt01,38,41,1|-hnqt00,41,40,0|-hb50w1,41,40,0|-hb50w0,38,41,1|-h4yvo1,38,41,1|-h4yvo0,41,40,0|-gsd3k1,41,40,0|-gsd3k0,38,41,1|-gm6yc1,38,41,1|-gm6yc0,41,40,0|-g9l681,41,40,0|-g9l680,38,41,1|-g3f101,38,41,1|-g3f100,41,40,0|-fqt8w1,41,40,0|-fqt8w0,38,41,1|-fkl901,38,41,1|-fkl900,41,40,0|-feb8w1,41,40,0|-feb8w0,38,41,1|-ewd101,38,41,1|-ewd100,41,40,0|-eq30w1,41,40,0|-eq30w0,38,41,1|-dse501,38,41,1|-dse500,41,40,0|-doj681,41,40,0|-doj680,38,41,1|-cfvuc1,38,41,1|-cfvuc0,41,40,0|-c4vgw1,41,40,0|-c4vgw0,38,41,1|-39hec1,38,41,1|-39hec0,41,40,0|-35mfk1,41,40,0|-35mfk0,38,41,1|-31nx01,38,41,1|-31nx00,41,40,0|-2pxm81,41,40,0|-2pxm80,38,41,1|-2ivzo1,38,41,1|-2ivzo0,41,40,0|-275ow1,41,40,0|-275ow0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1odrk1,41,40,0|-1odrk0,38,41,1|-1fovo1,38,41,1|-1fovo0,41,40,0|-16brk1,41,40,0|-16brk0,38,41,1|-wluc1,38,41,1|-wluc0,41,40,0|-n8q81,41,40,0|-n8q80,38,41,1|-dvro1,38,41,1|-dvro0,41,40,0|-4ink1,41,40,0|-4ink0,38,41,0|24aizz,38,41,0|24aj00,39,43,1|29bxjz,39,43,1|29bxk0,38,41,0|9veobz,38,41,0|9veoc0,39,43,1|a08o7z,39,43,1|a08o80,38,41,0|abrkbz,38,41,0|abrkc0,39,43,1|aiyqvz,39,43,1|aiyqw0,38,41,0|auulnz,38,41,0|auulo0,39,43,1|b1otjz,39,43,1|b1otk0,41,40,0|bdkr3z,41,40,0|bdkr40,39,43,1|bkew7z,39,43,1|bkew80,38,41,0|bwaqzz,38,41,0|bwar00,39,43,1|c3hxjz,39,43,1|c3hxk0,38,41,0|fj0azz,38,41,0|fj0b00,38,41,1|fqtsbz,38,41,1|fqtsc0,38,41,0|jtudnz,38,41,0|jtudo0,39,43,1|jxsw7z,39,43,1|jxsw80,38,41,0|NaN,38,41,0\",\"America/Argentina/San_Juan|,0,52,0|-138a8n9,0,52,0|-138a8n8,40,45,0|-px7ys1,40,45,0|-px7ys0,41,40,0|-kecq81,41,40,0|-kecq80,38,41,1|-k84qc1,38,41,1|-k84qc0,41,40,0|-jxzu81,41,40,0|-jxzu80,38,41,1|-jqwd01,38,41,1|-jqwd00,41,40,0|-jeakw1,41,40,0|-jeakw0,38,41,1|-j84fo1,38,41,1|-j84fo0,41,40,0|-ivink1,41,40,0|-ivink0,38,41,1|-ipcic1,38,41,1|-ipcic0,41,40,0|-icqq81,41,40,0|-icqq80,38,41,1|-i6kl01,38,41,1|-i6kl00,41,40,0|-htysw1,41,40,0|-htysw0,38,41,1|-hnqt01,38,41,1|-hnqt00,41,40,0|-hb50w1,41,40,0|-hb50w0,38,41,1|-h4yvo1,38,41,1|-h4yvo0,41,40,0|-gsd3k1,41,40,0|-gsd3k0,38,41,1|-gm6yc1,38,41,1|-gm6yc0,41,40,0|-g9l681,41,40,0|-g9l680,38,41,1|-g3f101,38,41,1|-g3f100,41,40,0|-fqt8w1,41,40,0|-fqt8w0,38,41,1|-fkl901,38,41,1|-fkl900,41,40,0|-feb8w1,41,40,0|-feb8w0,38,41,1|-ewd101,38,41,1|-ewd100,41,40,0|-eq30w1,41,40,0|-eq30w0,38,41,1|-dse501,38,41,1|-dse500,41,40,0|-doj681,41,40,0|-doj680,38,41,1|-cfvuc1,38,41,1|-cfvuc0,41,40,0|-c4vgw1,41,40,0|-c4vgw0,38,41,1|-39hec1,38,41,1|-39hec0,41,40,0|-35mfk1,41,40,0|-35mfk0,38,41,1|-31nx01,38,41,1|-31nx00,41,40,0|-2pxm81,41,40,0|-2pxm80,38,41,1|-2ivzo1,38,41,1|-2ivzo0,41,40,0|-275ow1,41,40,0|-275ow0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1odrk1,41,40,0|-1odrk0,38,41,1|-1fovo1,38,41,1|-1fovo0,41,40,0|-16brk1,41,40,0|-16brk0,38,41,1|-wluc1,38,41,1|-wluc0,41,40,0|-n8q81,41,40,0|-n8q80,38,41,1|-dvro1,38,41,1|-dvro0,41,40,0|-4ink1,41,40,0|-4ink0,38,41,0|24aizz,38,41,0|24aj00,39,43,1|29bxjz,39,43,1|29bxk0,38,41,0|9veobz,38,41,0|9veoc0,39,43,1|a08o7z,39,43,1|a08o80,38,41,0|abrkbz,38,41,0|abrkc0,39,43,1|aiyqvz,39,43,1|aiyqw0,38,41,0|auulnz,38,41,0|auulo0,39,43,1|b1l47z,39,43,1|b1l480,41,40,0|b51cfz,41,40,0|b51cg0,38,41,0|bdkobz,38,41,0|bdkoc0,39,43,1|bkew7z,39,43,1|bkew80,38,41,0|bwaqzz,38,41,0|bwar00,39,43,1|c3hxjz,39,43,1|c3hxk0,38,41,0|fj0azz,38,41,0|fj0b00,38,41,1|fqtsbz,38,41,1|fqtsc0,38,41,0|hyk5nz,38,41,0|hyk5o0,41,40,0|i1e33z,41,40,0|i1e340,38,41,0|jtudnz,38,41,0|jtudo0,39,43,1|jxsw7z,39,43,1|jxsw80,38,41,0|NaN,38,41,0\",\"America/Argentina/San_Luis|,0,53,0|-138a91p,0,53,0|-138a91o,40,45,0|-px7ys1,40,45,0|-px7ys0,41,40,0|-kecq81,41,40,0|-kecq80,38,41,1|-k84qc1,38,41,1|-k84qc0,41,40,0|-jxzu81,41,40,0|-jxzu80,38,41,1|-jqwd01,38,41,1|-jqwd00,41,40,0|-jeakw1,41,40,0|-jeakw0,38,41,1|-j84fo1,38,41,1|-j84fo0,41,40,0|-ivink1,41,40,0|-ivink0,38,41,1|-ipcic1,38,41,1|-ipcic0,41,40,0|-icqq81,41,40,0|-icqq80,38,41,1|-i6kl01,38,41,1|-i6kl00,41,40,0|-htysw1,41,40,0|-htysw0,38,41,1|-hnqt01,38,41,1|-hnqt00,41,40,0|-hb50w1,41,40,0|-hb50w0,38,41,1|-h4yvo1,38,41,1|-h4yvo0,41,40,0|-gsd3k1,41,40,0|-gsd3k0,38,41,1|-gm6yc1,38,41,1|-gm6yc0,41,40,0|-g9l681,41,40,0|-g9l680,38,41,1|-g3f101,38,41,1|-g3f100,41,40,0|-fqt8w1,41,40,0|-fqt8w0,38,41,1|-fkl901,38,41,1|-fkl900,41,40,0|-feb8w1,41,40,0|-feb8w0,38,41,1|-ewd101,38,41,1|-ewd100,41,40,0|-eq30w1,41,40,0|-eq30w0,38,41,1|-dse501,38,41,1|-dse500,41,40,0|-doj681,41,40,0|-doj680,38,41,1|-cfvuc1,38,41,1|-cfvuc0,41,40,0|-c4vgw1,41,40,0|-c4vgw0,38,41,1|-39hec1,38,41,1|-39hec0,41,40,0|-35mfk1,41,40,0|-35mfk0,38,41,1|-31nx01,38,41,1|-31nx00,41,40,0|-2pxm81,41,40,0|-2pxm80,38,41,1|-2ivzo1,38,41,1|-2ivzo0,41,40,0|-275ow1,41,40,0|-275ow0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1odrk1,41,40,0|-1odrk0,38,41,1|-1fovo1,38,41,1|-1fovo0,41,40,0|-16brk1,41,40,0|-16brk0,38,41,1|-wluc1,38,41,1|-wluc0,41,40,0|-n8q81,41,40,0|-n8q80,38,41,1|-dvro1,38,41,1|-dvro0,41,40,0|-4ink1,41,40,0|-4ink0,38,41,0|24aizz,38,41,0|24aj00,39,43,1|29bxjz,39,43,1|29bxk0,38,41,0|9veobz,38,41,0|9veoc0,39,43,1|a08o7z,39,43,1|a08o80,38,41,0|abrkbz,38,41,0|abrkc0,39,43,1|ajh9jz,39,43,1|ajh9k0,41,40,0|aujkfz,41,40,0|aujkg0,38,41,1|b1l6zz,38,41,1|b1l700,41,40,0|b6bn3z,41,40,0|b6bn40,38,41,0|fj0azz,38,41,0|fj0b00,38,41,1|fqtsbz,38,41,1|fqtsc0,38,41,0|hyk5nz,38,41,0|hyk5o0,41,40,0|i1e33z,41,40,0|i1e340,38,41,0|jtudnz,38,41,0|jtudo0,39,43,1|juz1jz,39,43,1|juz1k0,38,41,1|jxg0bz,38,41,1|jxg0c0,41,40,0|k8lxrz,41,40,0|k8lxs0,38,41,1|kg62zz,38,41,1|kg6300,41,40,0|krc0fz,41,40,0|krc0g0,38,41,0|NaN,38,41,0\",\"America/Argentina/Tucuman|,0,54,0|-138a999,0,54,0|-138a998,40,45,0|-px7ys1,40,45,0|-px7ys0,41,40,0|-kecq81,41,40,0|-kecq80,38,41,1|-k84qc1,38,41,1|-k84qc0,41,40,0|-jxzu81,41,40,0|-jxzu80,38,41,1|-jqwd01,38,41,1|-jqwd00,41,40,0|-jeakw1,41,40,0|-jeakw0,38,41,1|-j84fo1,38,41,1|-j84fo0,41,40,0|-ivink1,41,40,0|-ivink0,38,41,1|-ipcic1,38,41,1|-ipcic0,41,40,0|-icqq81,41,40,0|-icqq80,38,41,1|-i6kl01,38,41,1|-i6kl00,41,40,0|-htysw1,41,40,0|-htysw0,38,41,1|-hnqt01,38,41,1|-hnqt00,41,40,0|-hb50w1,41,40,0|-hb50w0,38,41,1|-h4yvo1,38,41,1|-h4yvo0,41,40,0|-gsd3k1,41,40,0|-gsd3k0,38,41,1|-gm6yc1,38,41,1|-gm6yc0,41,40,0|-g9l681,41,40,0|-g9l680,38,41,1|-g3f101,38,41,1|-g3f100,41,40,0|-fqt8w1,41,40,0|-fqt8w0,38,41,1|-fkl901,38,41,1|-fkl900,41,40,0|-feb8w1,41,40,0|-feb8w0,38,41,1|-ewd101,38,41,1|-ewd100,41,40,0|-eq30w1,41,40,0|-eq30w0,38,41,1|-dse501,38,41,1|-dse500,41,40,0|-doj681,41,40,0|-doj680,38,41,1|-cfvuc1,38,41,1|-cfvuc0,41,40,0|-c4vgw1,41,40,0|-c4vgw0,38,41,1|-39hec1,38,41,1|-39hec0,41,40,0|-35mfk1,41,40,0|-35mfk0,38,41,1|-31nx01,38,41,1|-31nx00,41,40,0|-2pxm81,41,40,0|-2pxm80,38,41,1|-2ivzo1,38,41,1|-2ivzo0,41,40,0|-275ow1,41,40,0|-275ow0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1odrk1,41,40,0|-1odrk0,38,41,1|-1fovo1,38,41,1|-1fovo0,41,40,0|-16brk1,41,40,0|-16brk0,38,41,1|-wluc1,38,41,1|-wluc0,41,40,0|-n8q81,41,40,0|-n8q80,38,41,1|-dvro1,38,41,1|-dvro0,41,40,0|-4ink1,41,40,0|-4ink0,38,41,0|24aizz,38,41,0|24aj00,39,43,1|29bxjz,39,43,1|29bxk0,38,41,0|9veobz,38,41,0|9veoc0,39,43,1|a08o7z,39,43,1|a08o80,38,41,0|abrkbz,38,41,0|abrkc0,39,43,1|aiyqvz,39,43,1|aiyqw0,38,41,0|auulnz,38,41,0|auulo0,39,43,1|b1otjz,39,43,1|b1otk0,41,40,0|bdkr3z,41,40,0|bdkr40,39,43,1|bkew7z,39,43,1|bkew80,38,41,0|bwaqzz,38,41,0|bwar00,39,43,1|c3hxjz,39,43,1|c3hxk0,38,41,0|fj0azz,38,41,0|fj0b00,38,41,1|fqtsbz,38,41,1|fqtsc0,38,41,0|hym0bz,38,41,0|hym0c0,41,40,0|hz8b3z,41,40,0|hz8b40,38,41,0|jtudnz,38,41,0|jtudo0,39,43,1|jxsw7z,39,43,1|jxsw80,38,41,0|k8ytnz,38,41,0|k8yto0,39,43,1|kgiyvz,39,43,1|kgiyw0,38,41,0|NaN,38,41,0\",\"America/Argentina/Ushuaia|,0,55,0|-138a8op,0,55,0|-138a8oo,40,45,0|-px7ys1,40,45,0|-px7ys0,41,40,0|-kecq81,41,40,0|-kecq80,38,41,1|-k84qc1,38,41,1|-k84qc0,41,40,0|-jxzu81,41,40,0|-jxzu80,38,41,1|-jqwd01,38,41,1|-jqwd00,41,40,0|-jeakw1,41,40,0|-jeakw0,38,41,1|-j84fo1,38,41,1|-j84fo0,41,40,0|-ivink1,41,40,0|-ivink0,38,41,1|-ipcic1,38,41,1|-ipcic0,41,40,0|-icqq81,41,40,0|-icqq80,38,41,1|-i6kl01,38,41,1|-i6kl00,41,40,0|-htysw1,41,40,0|-htysw0,38,41,1|-hnqt01,38,41,1|-hnqt00,41,40,0|-hb50w1,41,40,0|-hb50w0,38,41,1|-h4yvo1,38,41,1|-h4yvo0,41,40,0|-gsd3k1,41,40,0|-gsd3k0,38,41,1|-gm6yc1,38,41,1|-gm6yc0,41,40,0|-g9l681,41,40,0|-g9l680,38,41,1|-g3f101,38,41,1|-g3f100,41,40,0|-fqt8w1,41,40,0|-fqt8w0,38,41,1|-fkl901,38,41,1|-fkl900,41,40,0|-feb8w1,41,40,0|-feb8w0,38,41,1|-ewd101,38,41,1|-ewd100,41,40,0|-eq30w1,41,40,0|-eq30w0,38,41,1|-dse501,38,41,1|-dse500,41,40,0|-doj681,41,40,0|-doj680,38,41,1|-cfvuc1,38,41,1|-cfvuc0,41,40,0|-c4vgw1,41,40,0|-c4vgw0,38,41,1|-39hec1,38,41,1|-39hec0,41,40,0|-35mfk1,41,40,0|-35mfk0,38,41,1|-31nx01,38,41,1|-31nx00,41,40,0|-2pxm81,41,40,0|-2pxm80,38,41,1|-2ivzo1,38,41,1|-2ivzo0,41,40,0|-275ow1,41,40,0|-275ow0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1odrk1,41,40,0|-1odrk0,38,41,1|-1fovo1,38,41,1|-1fovo0,41,40,0|-16brk1,41,40,0|-16brk0,38,41,1|-wluc1,38,41,1|-wluc0,41,40,0|-n8q81,41,40,0|-n8q80,38,41,1|-dvro1,38,41,1|-dvro0,41,40,0|-4ink1,41,40,0|-4ink0,38,41,0|24aizz,38,41,0|24aj00,39,43,1|29bxjz,39,43,1|29bxk0,38,41,0|9veobz,38,41,0|9veoc0,39,43,1|a08o7z,39,43,1|a08o80,38,41,0|abrkbz,38,41,0|abrkc0,39,43,1|aiyqvz,39,43,1|aiyqw0,38,41,0|auulnz,38,41,0|auulo0,39,43,1|b1otjz,39,43,1|b1otk0,38,41,0|bdkobz,38,41,0|bdkoc0,39,43,1|bkew7z,39,43,1|bkew80,38,41,0|bwaqzz,38,41,0|bwar00,39,43,1|c3hxjz,39,43,1|c3hxk0,38,41,0|fj0azz,38,41,0|fj0b00,38,41,1|fqtsbz,38,41,1|fqtsc0,38,41,0|hyiazz,38,41,0|hyib00,41,40,0|hzl9rz,41,40,0|hzl9s0,38,41,0|jtudnz,38,41,0|jtudo0,39,43,1|jxsw7z,39,43,1|jxsw80,38,41,0|NaN,38,41,0\",\"America/Aruba|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/Asuncion|,0,56,0|-15r0ynl,0,56,0|-15r0ynk,42,56,0|-jy93zl,42,56,0|-jy93zk,41,40,0|1fnkfz,41,40,0|1fnkg0,38,41,0|27sgbz,38,41,0|27sgc0,41,40,0|2zzcfz,41,40,0|2zzcg0,38,41,1|37sqzz,38,41,1|37sr00,41,40,0|3it4fz,41,40,0|3it4g0,38,41,1|3qkobz,38,41,1|3qkoc0,41,40,0|41l1rz,41,40,0|41l1s0,38,41,1|49clnz,38,41,1|49clo0,41,40,0|4kcz3z,41,40,0|4kcz40,38,41,1|4tpxnz,38,41,1|4tpxo0,41,40,0|534wfz,41,40,0|534wg0,38,41,1|5cjpnz,38,41,1|5cjpo0,41,40,0|5lyofz,41,40,0|5lyog0,38,41,1|5vbmzz,38,41,1|5vbn00,41,40,0|64qlrz,41,40,0|64qls0,38,41,1|6e3kbz,38,41,1|6e3kc0,41,40,0|6nij3z,41,40,0|6nij40,38,41,1|6wvhnz,38,41,1|6wvho0,41,40,0|76agfz,41,40,0|76agg0,38,41,1|7fp9nz,38,41,1|7fp9o0,41,40,0|7p48fz,41,40,0|7p48g0,38,41,1|7yh6zz,38,41,1|7yh700,41,40,0|87w5rz,41,40,0|87w5s0,38,41,1|8h94bz,38,41,1|8h94c0,41,40,0|8qo33z,41,40,0|8qo340,38,41,1|9011nz,38,41,1|9011o0,41,40,0|99g0fz,41,40,0|99g0g0,38,41,1|9iutnz,38,41,1|9iuto0,41,40,0|9s9sfz,41,40,0|9s9sg0,38,41,1|a1mqzz,38,41,1|a1mr00,41,40,0|ac4lrz,41,40,0|ac4ls0,38,41,1|akeobz,38,41,1|akeoc0,41,40,0|attn3z,41,40,0|attn40,38,41,1|b36lnz,38,41,1|b36lo0,41,40,0|bcutrz,41,40,0|bcuts0,38,41,1|bkeyzz,38,41,1|bkez00,41,40,0|bvmr3z,41,40,0|bvmr40,38,41,1|c4qgbz,38,41,1|c4qgc0,41,40,0|ce79rz,41,40,0|ce79s0,38,41,1|clv4bz,38,41,1|clv4c0,41,40,0|cwz73z,41,40,0|cwz740,38,41,1|d4l6zz,38,41,1|d4l700,41,40,0|dfr4fz,41,40,0|dfr4g0,38,41,1|dnkizz,38,41,1|dnkj00,41,40,0|dyu5rz,41,40,0|dyu5s0,38,41,1|e61cbz,38,41,1|e61cc0,41,40,0|ehk8fz,41,40,0|ehk8g0,38,41,1|ep4dnz,38,41,1|ep4do0,41,40,0|f0ab3z,41,40,0|f0ab40,38,41,1|f87ezz,38,41,1|f87f00,41,40,0|fj0drz,41,40,0|fj0ds0,38,41,1|fqxhnz,38,41,1|fqxho0,41,40,0|g1qgfz,41,40,0|g1qgg0,38,41,1|g9nkbz,38,41,1|g9nkc0,41,40,0|gkthrz,41,40,0|gkths0,38,41,1|gu6gbz,38,41,1|gu6gc0,41,40,0|h1qr3z,41,40,0|h1qr40,38,41,1|hcwizz,38,41,1|hcwj00,41,40,0|hktsfz,41,40,0|hktsg0,38,41,1|hvmlnz,38,41,1|hvmlo0,41,40,0|i5pn3z,41,40,0|i5pn40,38,41,1|id9sbz,38,41,1|id9sc0,41,40,0|iofprz,41,40,0|iofps0,38,41,1|ivzuzz,38,41,1|ivzv00,41,40,0|j75sfz,41,40,0|j75sg0,38,41,1|jepxnz,38,41,1|jepxo0,41,40,0|jq8trz,41,40,0|jq8ts0,38,41,1|jxg0bz,38,41,1|jxg0c0,41,40,0|k8ywfz,41,40,0|k8ywg0,38,41,1|kg62zz,38,41,1|kg6300,41,40,0|kroz3z,41,40,0|kroz40,38,41,1|l0oyzz,38,41,1|l0oz00,41,40,0|l9p4fz,41,40,0|l9p4g0,38,41,1|ljf1nz,38,41,1|ljf1o0,41,40,0|lsf73z,41,40,0|lsf740,38,41,1|m254bz,38,41,1|m254c0,41,40,0|mbi8fz,41,40,0|mbi8g0,38,41,1|mk59nz,38,41,1|mk59o0,41,40,0|mu8b3z,41,40,0|mu8b40,38,41,1|n2vcbz,38,41,1|n2vcc0,41,40,0|ncydrz,41,40,0|ncyds0,38,41,1|nllezz,38,41,1|nllf00,41,40,0|nvogfz,41,40,0|nvogg0,38,41,1|o4ogbz,38,41,1|o4ogc0,41,40,0|oeej3z,41,40,0|oeej40,38,41,1|oneizz,38,41,1|onej00,41,40,0|ox4lrz,41,40,0|ox4ls0,38,41,1|p64lnz,38,41,1|p64lo0,41,40,0|pg7n3z,41,40,0|pg7n40,38,41,1|pouobz,38,41,1|pouoc0,41,40,0|pyxprz,41,40,0|pyxps0,38,41,1|q7kqzz,38,41,1|q7kr00,41,40,0|qhnsfz,41,40,0|qhnsg0,38,41,1|qqnsbz,38,41,1|qqnsc0,41,40,0|r0dv3z,41,40,0|r0dv40,38,41,1|r9duzz,38,41,1|r9dv00,41,40,0|rj3xrz,41,40,0|rj3xs0,38,41,1|rs3xnz,38,41,1|rs3xo0,41,40,0|s1u0fz,41,40,0|s1u0g0,38,41,1|sau0bz,38,41,1|sau0c0,41,40,0|skx1rz,41,40,0|skx1s0,38,41,1|stk2zz,38,41,1|stk300,41,40,0|t3n4fz,41,40,0|t3n4g0,38,41,1|tca5nz,38,41,1|tca5o0,41,40,0|tmd73z,41,40,0|tmd740,38,41,1|tvd6zz,38,41,1|tvd700,41,40,0|u539rz,41,40,0|u539s0,38,41,1|ue39nz,38,41,1|ue39o0,41,40,0|untcfz,41,40,0|untcg0,38,41,1|uwtcbz,38,41,1|uwtcc0,41,40,0|v6wdrz,41,40,0|v6wds0,38,41,1|vfjezz,38,41,1|vfjf00,41,40,0|vpmgfz,41,40,0|vpmgg0,38,41,1|vy9hnz,38,41,1|vy9ho0,41,40,0|w8cj3z,41,40,0|w8cj40,38,41,1|whcizz,38,41,1|whcj00,41,40,0|wr2lrz,41,40,0|wr2ls0,38,41,1|x02lnz,38,41,1|x02lo0,41,40,0|x9sofz,41,40,0|x9sog0,38,41,1|xisobz,38,41,1|xisoc0,41,40,0|xsir3z,41,40,0|xsir40,38,41,1|y1iqzz,38,41,1|y1ir00,41,40,0|yblsfz,41,40,0|yblsg0,38,41,1|yk8tnz,38,41,1|yk8to0,41,40,0|yubv3z,41,40,0|yubv40,38,41,1|z2ywbz,38,41,1|z2ywc0,41,40,0|zd1xrz,41,40,0|zd1xs0,38,41,1|zm1xnz,38,41,1|zm1xo0,41,40,0|zvs0fz,41,40,0|zvs0g0,38,41,1|104s0bz,38,41,1|104s0c0,41,40,0|10ei33z,41,40,0|10ei340,38,41,1|10ni2zz,38,41,1|10ni300,41,40,0|10xl4fz,41,40,0|10xl4g0,38,41,1|11685nz,38,41,1|11685o0,41,40,0|11gb73z,41,40,0|11gb740,38,41,1|11oy8bz,38,41,1|11oy8c0,41,40,0|11z19rz,41,40,0|11z19s0,38,41,1|127oazz,38,41,1|127ob00,41,40,0|12hrcfz,41,40,0|12hrcg0,38,41,1|12qrcbz,38,41,1|12qrcc0,41,40,0|130hf3z,41,40,0|130hf40,38,41,1|139hezz,38,41,1|139hf00,41,40,0|13j7hrz,41,40,0|13j7hs0,38,41,1|13s7hnz,38,41,1|13s7ho0,41,40,0|142aj3z,41,40,0|142aj40,38,41,1|14axkbz,38,41,1|14axkc0,41,40,0|14l0lrz,41,40,0|14l0ls0,38,41,1|14tnmzz,38,41,1|14tnn00,41,40,0|153qofz,41,40,0|153qog0,38,41,1|15cqobz,38,41,1|15cqoc0,41,40,0|15mgr3z,41,40,0|15mgr40,38,41,1|15vgqzz,38,41,1|15vgr00,41,40,0|1656trz,41,40,0|1656ts0,38,41,1|16e6tnz,38,41,1|16e6to0,41,40,0|16nwwfz,41,40,0|16nwwg0,38,41,1|16wwwbz,38,41,1|16wwwc0,41,40,0|176zxrz,41,40,0|176zxs0,38,41,1|17fmyzz,38,41,1|17fmz00,41,40,0|17pq0fz,41,40,0|17pq0g0,38,41,1|17yd1nz,38,41,1|17yd1o0,41,40,0|188g33z,41,40,0|188g340,38,41,1|18hg2zz,38,41,1|18hg300,41,40,0|18r65rz,41,40,0|18r65s0,38,41,1|19065nz,38,41,1|19065o0,41,40,0|199w8fz,41,40,0|199w8g0,38,41,1|19iw8bz,38,41,1|19iw8c0,41,40,0|19sz9rz,41,40,0|19sz9s0,38,41,1|1a1mazz,38,41,1|1a1mb00,41,40,0|1abpcfz,41,40,0|1abpcg0,38,41,1|1akcdnz,38,41,1|1akcdo0,41,40,0|1auff3z,41,40,0|1auff40,38,41,1|1b3fezz,38,41,1|1b3ff00,41,40,0|1bd5hrz,41,40,0|1bd5hs0,38,41,1|1bm5hnz,38,41,1|1bm5ho0,41,40,0|1bvvkfz,41,40,0|1bvvkg0,38,41,1|1c4vkbz,38,41,1|1c4vkc0,41,40,0|1celn3z,41,40,0|1celn40,38,41,1|1cnlmzz,38,41,1|1cnln00,41,40,0|1cxoofz,41,40,0|1cxoog0,38,41,1|1d6bpnz,38,41,1|1d6bpo0,41,40,0|1dger3z,41,40,0|1dger40,38,41,1|1dp1sbz,38,41,1|1dp1sc0,41,40,0|1dz4trz,41,40,0|1dz4ts0,38,41,1|1e84tnz,38,41,1|1e84to0,41,40,0|1ehuwfz,41,40,0|1ehuwg0,38,41,1|1equwbz,38,41,1|1equwc0,41,40,0|1f0kz3z,41,40,0|1f0kz40,38,41,1|1f9kyzz,38,41,1|1f9kz00,41,40,0|1fjo0fz,41,40,0|1fjo0g0,38,41,1|1fsb1nz,38,41,1|1fsb1o0,41,40,0|1g2e33z,41,40,0|1g2e340,38,41,1|1gb14bz,38,41,1|1gb14c0,41,40,0|1gl45rz,41,40,0|1gl45s0,38,41,1|1gtr6zz,38,41,1|1gtr700,41,40,0|1h3u8fz,41,40,0|1h3u8g0,38,41,1|1hcu8bz,38,41,1|1hcu8c0,41,40,0|1hmkb3z,41,40,0|1hmkb40,38,41,1|1hvkazz,38,41,1|1hvkb00,41,40,0|1i5adrz,41,40,0|1i5ads0,38,41,1|1ieadnz,38,41,1|1ieado0,41,40,0|1iodf3z,41,40,0|1iodf40,38,41,1|1ix0gbz,38,41,1|1ix0gc0,41,40,0|1j73hrz,41,40,0|1j73hs0,38,41,1|1jfqizz,38,41,1|1jfqj00,41,40,0|1jptkfz,41,40,0|1jptkg0,38,41,1|1jytkbz,38,41,1|1jytkc0,41,40,0|1k8jn3z,41,40,0|1k8jn40,38,41,1|1khjmzz,38,41,1|1khjn00,41,40,0|1kr9prz,41,40,0|1kr9ps0,38,41,1|1l09pnz,38,41,1|1l09po0,41,40,0|1l9zsfz,41,40,0|1l9zsg0,38,41,1|1lizsbz,38,41,1|1lizsc0,41,40,0|1lt2trz,41,40,0|1lt2ts0,38,41,1|1m1puzz,38,41,1|1m1pv00,41,40,0|1mbswfz,41,40,0|1mbswg0,38,41,1|1mkfxnz,38,41,1|1mkfxo0,41,40,0|1muiz3z,41,40,0|1muiz40,38,41,1|1n3iyzz,38,41,1|1n3iz00,41,40,0|1nd91rz,41,40,0|1nd91s0,38,41,1|1nm91nz,38,41,1|1nm91o0,41,40,0|1nvz4fz,41,40,0|1nvz4g0,38,41,1|1o4z4bz,38,41,1|1o4z4c0,41,40,0|1of25rz,41,40,0|1of25s0,38,41,1|1onp6zz,38,41,1|1onp700,41,40,0|1oxs8fz,41,40,0|1oxs8g0,38,41,1|1p6f9nz,38,41,1|1p6f9o0,41,40,0|1pgib3z,41,40,0|1pgib40,38,41,1|1ppiazz,38,41,1|1ppib00,41,40,0|1pz8drz,41,40,0|1pz8ds0,38,41,1|1q88dnz,38,41,1|1q88do0,41,40,0|1qhygfz,41,40,0|1qhygg0,38,41,1|1qqygbz,38,41,1|1qqygc0,41,40,0|1r0oj3z,41,40,0|1r0oj40,38,41,1|1r9oizz,38,41,1|1r9oj00,41,40,0|1rjrkfz,41,40,0|1rjrkg0,38,41,1|1rselnz,38,41,1|1rselo0,41,40,0|1s2hn3z,41,40,0|1s2hn40,38,41,1|1sb4obz,38,41,1|1sb4oc0,41,40,0|1sl7prz,41,40,0|1sl7ps0,38,41,1|1su7pnz,38,41,1|1su7po0,41,40,0|1t3xsfz,41,40,0|1t3xsg0,38,41,1|1tcxsbz,38,41,1|1tcxsc0,41,40,0|1tmnv3z,41,40,0|1tmnv40,38,41,1|1tvnuzz,38,41,1|1tvnv00,41,40,0|1u5qwfz,41,40,0|1u5qwg0,38,41,1|1uedxnz,38,41,1|1uedxo0,41,40,0|1uogz3z,41,40,0|1uogz40,38,41,1|1ux40bz,38,41,1|1ux40c0,41,40,0|1v771rz,41,40,0|1v771s0,38,41,1|1vfu2zz,38,41,1|1vfu300,41,40,0|1vpx4fz,41,40,0|1vpx4g0,38,41,1|NaN,38,41,1\",\"America/Atikokan|,0,57,0|-15r0ult,0,57,0|-15r0uls,40,58,0|-w757vd,40,58,0|-w757vc,43,59,0|NaN,43,59,0\",\"America/Bahia|,0,60,0|-t85kv9,0,60,0|-t85kv8,38,41,0|-jylag1,38,41,0|-jylag0,39,43,1|-jpb141,39,43,1|-jpb140,38,41,0|-jfsd01,38,41,0|-jfsd00,39,43,1|-j6j3s1,39,43,1|-j6j3s0,38,41,0|-ahcyc1,38,41,0|-ahcyc0,39,43,1|-aad3o1,39,43,1|-aad3o0,38,41,0|-9yl101,38,41,0|-9yl100,39,43,1|-9sd141,39,43,1|-9sd140,38,41,0|-9ft3o1,38,41,0|-9ft3o0,39,43,1|-99j941,39,43,1|-99j940,38,41,0|-8wzbo1,38,41,0|-8wzbo0,39,43,1|-8scqg1,39,43,1|-8scqg0,38,41,0|-35xmc1,38,41,0|-35xmc0,39,43,1|-31nzs1,39,43,1|-31nzs0,38,41,0|-2kdp01,38,41,0|-2kdp00,39,43,1|-2hcig1,39,43,1|-2hcig0,38,41,0|-24qqc1,38,41,0|-24qqc0,39,43,1|-204541,39,43,1|-204540,38,41,0|-1nid01,38,41,0|-1nid00,39,43,1|-1hc7s1,39,43,1|-1hc7s0,38,41,0|-14qfo1,38,41,0|-14qfo0,39,43,1|-yifs1,39,43,1|-yifs0,38,41,0|89jcbz,38,41,0|89jcc0,39,43,1|8gdk7z,39,43,1|8gdk80,38,41,0|8rwgbz,38,41,0|8rwgc0,39,43,1|8xns7z,39,43,1|8xns80,38,41,0|9aodnz,38,41,0|9aodo0,39,43,1|9g2qvz,39,43,1|9g2qw0,38,41,0|9t1hnz,38,41,0|9t1ho0,39,43,1|9yfuvz,39,43,1|9yfuw0,38,41,0|abrkbz,38,41,0|abrkc0,39,43,1|ahvuvz,39,43,1|ahvuw0,38,41,0|auulnz,38,41,0|auulo0,39,43,1|b0yw7z,39,43,1|b0yw80,38,41,0|bdkobz,38,41,0|bdkoc0,39,43,1|bjc07z,39,43,1|bjc080,38,41,0|bwnpnz,38,41,0|bwnpo0,39,43,1|c1p47z,39,43,1|c1p480,38,41,0|cf0tnz,38,41,0|cf0to0,39,43,1|cli2vz,39,43,1|cli2w0,38,41,0|cxqwbz,38,41,0|cxqwc0,39,43,1|d485jz,39,43,1|d485k0,38,41,0|dggyzz,38,41,0|dggz00,39,43,1|dml9jz,39,43,1|dml9k0,38,41,0|dyu2zz,38,41,0|dyu300,39,43,1|e5oavz,39,43,1|e5oaw0,38,41,0|ehm0bz,38,41,0|ehm0c0,39,43,1|ep4avz,39,43,1|ep4aw0,38,41,0|f0n6zz,38,41,0|f0n700,39,43,1|f7hevz,39,43,1|f7hew0,38,41,0|fj0azz,38,41,0|fj0b00,39,43,1|fqkg7z,39,43,1|fqkg80,38,41,0|g23cbz,38,41,0|g23cc0,39,43,1|g8xk7z,39,43,1|g8xk80,38,41,0|gl6dnz,38,41,0|gl6do0,39,43,1|grnmvz,39,43,1|grnmw0,38,41,0|h4zcbz,38,41,0|h4zcc0,39,43,1|hadpjz,39,43,1|hadpk0,38,41,0|lt51nz,38,41,0|lt51o0,39,43,1|lzz9jz,39,43,1|lzz9k0,38,41,0|NaN,38,41,0\",\"America/Bahia_Banderas|,0,61,0|-p1u4k1,0,61,0|-p1u4k0,44,62,0|-m7mko1,44,62,0|-m7mko0,45,63,0|-kf67c1,45,63,0|-kf67c0,44,62,0|-k6j3c1,44,62,0|-k6j3c0,45,63,0|-jypm01,45,63,0|-jypm00,44,62,0|-jpan81,44,62,0|-jpan80,45,63,0|-eg9601,45,63,0|-eg9600,44,62,0|-axv381,44,62,0|-axv380,46,38,0|m7z,46,38,0|m80,44,62,0|dphibz,44,62,0|dphic0,47,63,1|dzxcvz,47,63,1|dzxcw0,44,62,0|e87kzz,44,62,0|e87l00,47,63,1|einfjz,47,63,1|einfk0,44,62,0|eqxnnz,44,62,0|eqxno0,47,63,1|f1di7z,47,63,1|f1di80,44,62,0|f9nqbz,44,62,0|f9nqc0,47,63,1|fkgjjz,47,63,1|fkgjk0,44,62,0|fsdszz,44,62,0|fsdt00,47,63,1|g36m7z,47,63,1|g36m80,44,62,0|gcwozz,44,62,0|gcwp00,47,63,1|gkgu7z,47,63,1|gkgu80,44,62,0|gu6wzz,44,62,0|gu6x00,47,63,1|h4mrjz,47,63,1|h4mrk0,44,62,0|hcwznz,44,62,0|hcwzo0,47,63,1|hncu7z,47,63,1|hncu80,44,62,0|hvn2bz,44,62,0|hvn2c0,47,63,1|i6fvjz,47,63,1|i6fvk0,44,62,0|ied4zz,44,62,0|ied500,47,63,1|ip5y7z,47,63,1|ip5y80,44,62,0|ix37nz,44,62,0|ix37o0,47,63,1|j7w0vz,47,63,1|j7w0w0,44,62,0|jftabz,44,62,0|jftac0,47,63,1|jqm3jz,47,63,1|jqm3k0,44,62,0|jywbnz,44,62,0|jywbo0,47,63,1|k9c67z,47,63,1|k9c680,44,62,0|khmebz,44,62,0|khmec0,47,63,1|ks28vz,47,63,1|ks28w0,44,62,0|l0cgzz,44,62,0|l0ch00,48,59,1|lb57fz,48,59,1|lb57g0,45,63,0|lj2gvz,45,63,0|lj2gw0,48,59,1|ltva3z,48,59,1|ltva40,45,63,0|m1sjjz,45,63,0|m1sjk0,48,59,1|mclcrz,48,59,1|mclcs0,45,63,0|mkvkvz,45,63,0|mkvkw0,48,59,1|mvbffz,48,59,1|mvbfg0,45,63,0|n3lnjz,45,63,0|n3lnk0,48,59,1|ne1i3z,48,59,1|ne1i40,45,63,0|nmbq7z,45,63,0|nmbq80,48,59,1|nwrkrz,48,59,1|nwrks0,45,63,0|o51svz,45,63,0|o51sw0,48,59,1|ofum3z,48,59,1|ofum40,45,63,0|onrvjz,45,63,0|onrvk0,48,59,1|oykorz,48,59,1|oykos0,45,63,0|p6hy7z,45,63,0|p6hy80,48,59,1|pharfz,48,59,1|pharg0,45,63,0|ppkzjz,45,63,0|ppkzk0,48,59,1|q00u3z,48,59,1|q00u40,45,63,0|q8b27z,45,63,0|q8b280,48,59,1|qiqwrz,48,59,1|qiqws0,45,63,0|qr14vz,45,63,0|qr14w0,48,59,1|r1ty3z,48,59,1|r1ty40,45,63,0|r9r7jz,45,63,0|r9r7k0,48,59,1|rkk0rz,48,59,1|rkk0s0,45,63,0|rsha7z,45,63,0|rsha80,48,59,1|s3a3fz,48,59,1|s3a3g0,45,63,0|sbkbjz,45,63,0|sbkbk0,48,59,1|sm063z,48,59,1|sm0640,45,63,0|suae7z,45,63,0|suae80,48,59,1|t4q8rz,48,59,1|t4q8s0,45,63,0|td0gvz,45,63,0|td0gw0,48,59,1|tngbfz,48,59,1|tngbg0,45,63,0|tvqjjz,45,63,0|tvqjk0,48,59,1|u6jcrz,48,59,1|u6jcs0,45,63,0|uegm7z,45,63,0|uegm80,48,59,1|up9ffz,48,59,1|up9fg0,45,63,0|ux6ovz,45,63,0|ux6ow0,48,59,1|v7zi3z,48,59,1|v7zi40,45,63,0|vg9q7z,45,63,0|vg9q80,48,59,1|vqpkrz,48,59,1|vqpks0,45,63,0|vyzsvz,45,63,0|vyzsw0,48,59,1|w9fnfz,48,59,1|w9fng0,45,63,0|whpvjz,45,63,0|whpvk0,48,59,1|wsiorz,48,59,1|wsios0,45,63,0|x0fy7z,45,63,0|x0fy80,48,59,1|xb8rfz,48,59,1|xb8rg0,45,63,0|xj60vz,45,63,0|xj60w0,48,59,1|xtyu3z,48,59,1|xtyu40,45,63,0|y1w3jz,45,63,0|y1w3k0,48,59,1|ycowrz,48,59,1|ycows0,45,63,0|ykz4vz,45,63,0|ykz4w0,48,59,1|yvezfz,48,59,1|yvezg0,45,63,0|z3p7jz,45,63,0|z3p7k0,48,59,1|ze523z,48,59,1|ze5240,45,63,0|zmfa7z,45,63,0|zmfa80,48,59,1|zx83fz,48,59,1|zx83g0,45,63,0|1055cvz,45,63,0|1055cw0,48,59,1|10fy63z,48,59,1|10fy640,45,63,0|10nvfjz,45,63,0|10nvfk0,48,59,1|10yo8rz,48,59,1|10yo8s0,45,63,0|116ygvz,45,63,0|116ygw0,48,59,1|11hebfz,48,59,1|11hebg0,45,63,0|11pojjz,45,63,0|11pojk0,48,59,1|1204e3z,48,59,1|1204e40,45,63,0|128em7z,45,63,0|128em80,48,59,1|12iugrz,48,59,1|12iugs0,45,63,0|12r4ovz,45,63,0|12r4ow0,48,59,1|131xi3z,48,59,1|131xi40,45,63,0|139urjz,45,63,0|139urk0,48,59,1|13knkrz,48,59,1|13knks0,45,63,0|13sku7z,45,63,0|13sku80,48,59,1|143dnfz,48,59,1|143dng0,45,63,0|14bnvjz,45,63,0|14bnvk0,48,59,1|14m3q3z,48,59,1|14m3q40,45,63,0|14udy7z,45,63,0|14udy80,48,59,1|154tsrz,48,59,1|154tss0,45,63,0|15d40vz,45,63,0|15d40w0,48,59,1|15nwu3z,48,59,1|15nwu40,45,63,0|15vu3jz,45,63,0|15vu3k0,48,59,1|166mwrz,48,59,1|166mws0,45,63,0|16ek67z,45,63,0|16ek680,48,59,1|16pczfz,48,59,1|16pczg0,45,63,0|16xn7jz,45,63,0|16xn7k0,48,59,1|178323z,48,59,1|1783240,45,63,0|17gda7z,45,63,0|17gda80,48,59,1|17qt4rz,48,59,1|17qt4s0,45,63,0|17z3cvz,45,63,0|17z3cw0,48,59,1|189j7fz,48,59,1|189j7g0,45,63,0|18htfjz,45,63,0|18htfk0,48,59,1|18sm8rz,48,59,1|18sm8s0,45,63,0|190ji7z,45,63,0|190ji80,48,59,1|19bcbfz,48,59,1|19bcbg0,45,63,0|19j9kvz,45,63,0|19j9kw0,48,59,1|19u2e3z,48,59,1|19u2e40,45,63,0|1a2cm7z,45,63,0|1a2cm80,48,59,1|1acsgrz,48,59,1|1acsgs0,45,63,0|1al2ovz,45,63,0|1al2ow0,48,59,1|1avijfz,48,59,1|1avijg0,45,63,0|1b3srjz,45,63,0|1b3srk0,48,59,1|1belkrz,48,59,1|1belks0,45,63,0|1bmiu7z,45,63,0|1bmiu80,48,59,1|1bxbnfz,48,59,1|1bxbng0,45,63,0|1c58wvz,45,63,0|1c58ww0,48,59,1|1cg1q3z,48,59,1|1cg1q40,45,63,0|1cnyzjz,45,63,0|1cnyzk0,48,59,1|1cyrsrz,48,59,1|1cyrss0,45,63,0|1d720vz,45,63,0|1d720w0,48,59,1|1dhhvfz,48,59,1|1dhhvg0,45,63,0|1dps3jz,45,63,0|1dps3k0,48,59,1|1e07y3z,48,59,1|1e07y40,45,63,0|1e8i67z,45,63,0|1e8i680,48,59,1|1ejazfz,48,59,1|1ejazg0,45,63,0|1er88vz,45,63,0|1er88w0,48,59,1|1f2123z,48,59,1|1f21240,45,63,0|1f9ybjz,45,63,0|1f9ybk0,48,59,1|1fkr4rz,48,59,1|1fkr4s0,45,63,0|1ft1cvz,45,63,0|1ft1cw0,48,59,1|1g3h7fz,48,59,1|1g3h7g0,45,63,0|1gbrfjz,45,63,0|1gbrfk0,48,59,1|1gm7a3z,48,59,1|1gm7a40,45,63,0|1guhi7z,45,63,0|1guhi80,48,59,1|1h4xcrz,48,59,1|1h4xcs0,45,63,0|1hd7kvz,45,63,0|1hd7kw0,48,59,1|1ho0e3z,48,59,1|1ho0e40,45,63,0|1hvxnjz,45,63,0|1hvxnk0,48,59,1|1i6qgrz,48,59,1|1i6qgs0,45,63,0|1ienq7z,45,63,0|1ienq80,48,59,1|1ipgjfz,48,59,1|1ipgjg0,45,63,0|1ixqrjz,45,63,0|1ixqrk0,48,59,1|1j86m3z,48,59,1|1j86m40,45,63,0|1jggu7z,45,63,0|1jggu80,48,59,1|1jqworz,48,59,1|1jqwos0,45,63,0|1jz6wvz,45,63,0|1jz6ww0,48,59,1|1k9zq3z,48,59,1|1k9zq40,45,63,0|1khwzjz,45,63,0|1khwzk0,48,59,1|1kspsrz,48,59,1|1kspss0,45,63,0|1l0n27z,45,63,0|1l0n280,48,59,1|1lbfvfz,48,59,1|1lbfvg0,45,63,0|1ljq3jz,45,63,0|1ljq3k0,48,59,1|1lu5y3z,48,59,1|1lu5y40,45,63,0|1m2g67z,45,63,0|1m2g680,48,59,1|1mcw0rz,48,59,1|1mcw0s0,45,63,0|1ml68vz,45,63,0|1ml68w0,48,59,1|1mvm3fz,48,59,1|1mvm3g0,45,63,0|1n3wbjz,45,63,0|1n3wbk0,48,59,1|1nep4rz,48,59,1|1nep4s0,45,63,0|1nmme7z,45,63,0|1nmme80,48,59,1|1nxf7fz,48,59,1|1nxf7g0,45,63,0|1o5cgvz,45,63,0|1o5cgw0,48,59,1|1og5a3z,48,59,1|1og5a40,45,63,0|1oofi7z,45,63,0|1oofi80,48,59,1|1oyvcrz,48,59,1|1oyvcs0,45,63,0|1p75kvz,45,63,0|1p75kw0,48,59,1|1phlffz,48,59,1|1phlfg0,45,63,0|1ppvnjz,45,63,0|1ppvnk0,48,59,1|1q0ogrz,48,59,1|1q0ogs0,45,63,0|1q8lq7z,45,63,0|1q8lq80,48,59,1|1qjejfz,48,59,1|1qjejg0,45,63,0|1qrbsvz,45,63,0|1qrbsw0,48,59,1|1r24m3z,48,59,1|1r24m40,45,63,0|1ra1vjz,45,63,0|1ra1vk0,48,59,1|1rkuorz,48,59,1|1rkuos0,45,63,0|1rt4wvz,45,63,0|1rt4ww0,48,59,1|1s3krfz,48,59,1|1s3krg0,45,63,0|1sbuzjz,45,63,0|1sbuzk0,48,59,1|1smau3z,48,59,1|1smau40,45,63,0|1sul27z,45,63,0|1sul280,48,59,1|1t5dvfz,48,59,1|1t5dvg0,45,63,0|1tdb4vz,45,63,0|1tdb4w0,48,59,1|1to3y3z,48,59,1|1to3y40,45,63,0|1tw17jz,45,63,0|1tw17k0,48,59,1|1u6u0rz,48,59,1|1u6u0s0,45,63,0|1uf48vz,45,63,0|1uf48w0,48,59,1|1upk3fz,48,59,1|1upk3g0,45,63,0|1uxubjz,45,63,0|1uxubk0,48,59,1|1v8a63z,48,59,1|1v8a640,45,63,0|1vgke7z,45,63,0|1vgke80,48,59,1|1vr08rz,48,59,1|1vr08s0,45,63,0|NaN,45,63,0\",\"America/Barbados|,0,64,0|-ug8iak,0,64,0|-ug8iaj,31,40,0|-egii41,31,40,0|-egii40,49,41,1|-e9ma01,49,41,1|-e9ma00,31,40,0|-dx2i41,31,40,0|-dx2i40,49,41,1|-dql3c1,49,41,1|-dql3c0,31,40,0|-dfdgs1,31,40,0|-dfdgs0,50,65,1|-d7i201,50,65,1|-d7i200,31,40,0|3vvnbz,31,40,0|3vvnc0,49,41,1|41mz7z,49,41,1|41mz80,31,40,0|4bq0nz,31,40,0|4bq0o0,49,41,1|4kd1vz,49,41,1|4kd1w0,31,40,0|4ug3bz,31,40,0|4ug3c0,49,41,1|5334jz,49,41,1|5334k0,31,40,0|5dj4nz,31,40,0|5dj4o0,49,41,1|5lnn7z,49,41,1|5lnn80,31,40,0|NaN,31,40,0\",\"America/Belem|,0,66,0|-t85j0t,0,66,0|-t85j0s,38,41,0|-jylag1,38,41,0|-jylag0,39,43,1|-jpb141,39,43,1|-jpb140,38,41,0|-jfsd01,38,41,0|-jfsd00,39,43,1|-j6j3s1,39,43,1|-j6j3s0,38,41,0|-ahcyc1,38,41,0|-ahcyc0,39,43,1|-aad3o1,39,43,1|-aad3o0,38,41,0|-9yl101,38,41,0|-9yl100,39,43,1|-9sd141,39,43,1|-9sd140,38,41,0|-9ft3o1,38,41,0|-9ft3o0,39,43,1|-99j941,39,43,1|-99j940,38,41,0|-8wzbo1,38,41,0|-8wzbo0,39,43,1|-8scqg1,39,43,1|-8scqg0,38,41,0|-35xmc1,38,41,0|-35xmc0,39,43,1|-31nzs1,39,43,1|-31nzs0,38,41,0|-2kdp01,38,41,0|-2kdp00,39,43,1|-2hcig1,39,43,1|-2hcig0,38,41,0|-24qqc1,38,41,0|-24qqc0,39,43,1|-204541,39,43,1|-204540,38,41,0|-1nid01,38,41,0|-1nid00,39,43,1|-1hc7s1,39,43,1|-1hc7s0,38,41,0|-14qfo1,38,41,0|-14qfo0,39,43,1|-yifs1,39,43,1|-yifs0,38,41,0|89jcbz,38,41,0|89jcc0,39,43,1|8gdk7z,39,43,1|8gdk80,38,41,0|8rwgbz,38,41,0|8rwgc0,39,43,1|8xns7z,39,43,1|8xns80,38,41,0|9aodnz,38,41,0|9aodo0,39,43,1|9g2qvz,39,43,1|9g2qw0,38,41,0|NaN,38,41,0\",\"America/Belize|,0,67,0|-u52ic1,0,67,0|-u52ic0,45,63,0|-qqoy01,45,63,0|-qqoy00,51,68,1|-qk7ne1,51,68,1|-qk7ne0,45,63,0|-q7yvc1,45,63,0|-q7yvc0,51,68,1|-q14m21,51,68,1|-q14m20,45,63,0|-pp8so1,45,63,0|-pp8so0,51,68,1|-pieje1,51,68,1|-pieje0,45,63,0|-p6iq01,45,63,0|-p6iq00,51,68,1|-ozogq1,51,68,1|-ozogq0,45,63,0|-onfoo1,45,63,0|-onfoo0,51,68,1|-ogye21,51,68,1|-ogye20,45,63,0|-o4pm01,45,63,0|-o4pm00,51,68,1|-ny8be1,51,68,1|-ny8be0,45,63,0|-nlzjc1,45,63,0|-nlzjc0,51,68,1|-nf5a21,51,68,1|-nf5a20,45,63,0|-n39go1,45,63,0|-n39go0,51,68,1|-mwf7e1,51,68,1|-mwf7e0,45,63,0|-mkje01,45,63,0|-mkje00,51,68,1|-mdp4q1,51,68,1|-mdp4q0,45,63,0|-m1tbc1,45,63,0|-m1tbc0,51,68,1|-luz221,51,68,1|-luz220,45,63,0|-liqa01,45,63,0|-liqa00,51,68,1|-lc8ze1,51,68,1|-lc8ze0,45,63,0|-l007c1,45,63,0|-l007c0,51,68,1|-ktiwq1,51,68,1|-ktiwq0,45,63,0|-kha4o1,45,63,0|-kha4o0,51,68,1|-kafve1,51,68,1|-kafve0,45,63,0|-jyk201,45,63,0|-jyk200,51,68,1|-jrpsq1,51,68,1|-jrpsq0,45,63,0|-jftzc1,45,63,0|-jftzc0,51,68,1|-j8zq21,51,68,1|-j8zq20,45,63,0|-iwqy01,45,63,0|-iwqy00,51,68,1|-iq9ne1,51,68,1|-iq9ne0,45,63,0|-ie0vc1,45,63,0|-ie0vc0,51,68,1|-i7jkq1,51,68,1|-i7jkq0,45,63,0|-hvaso1,45,63,0|-hvaso0,51,68,1|-hoti21,51,68,1|-hoti20,45,63,0|-hckq01,45,63,0|-hckq00,51,68,1|-h5qgq1,51,68,1|-h5qgq0,45,63,0|-gtunc1,45,63,0|-gtunc0,51,68,1|-gn0e21,51,68,1|-gn0e20,45,63,0|-gb4ko1,45,63,0|-gb4ko0,51,68,1|-g4abe1,51,68,1|-g4abe0,45,63,0|-fs1jc1,45,63,0|-fs1jc0,51,68,1|-flk8q1,51,68,1|-flk8q0,45,63,0|-f9bgo1,45,63,0|-f9bgo0,51,68,1|-f2u621,51,68,1|-f2u620,45,63,0|-eqle01,45,63,0|-eqle00,51,68,1|-ejr4q1,51,68,1|-ejr4q0,45,63,0|-ecwso1,45,63,0|-ecwso0,52,59,1|-cq2tg1,52,59,1|-cq2tg0,53,59,1|-cjqks1,53,59,1|-cjqks0,45,63,0|-blvzc1,45,63,0|-blvzc0,51,68,1|-bf1q21,51,68,1|-bf1q20,45,63,0|-b35wo1,45,63,0|-b35wo0,51,68,1|-awbne1,51,68,1|-awbne0,45,63,0|-akfu01,45,63,0|-akfu00,51,68,1|-adlkq1,51,68,1|-adlkq0,45,63,0|-a1cso1,45,63,0|-a1cso0,51,68,1|-9uvi21,51,68,1|-9uvi20,45,63,0|-9imq01,45,63,0|-9imq00,51,68,1|-9c5fe1,51,68,1|-9c5fe0,45,63,0|-8zwnc1,45,63,0|-8zwnc0,51,68,1|-8t2e21,51,68,1|-8t2e20,45,63,0|-8h6ko1,45,63,0|-8h6ko0,51,68,1|-8acbe1,51,68,1|-8acbe0,45,63,0|-7ygi01,45,63,0|-7ygi00,51,68,1|-7rm8q1,51,68,1|-7rm8q0,45,63,0|-7fqfc1,45,63,0|-7fqfc0,51,68,1|-78w621,51,68,1|-78w620,45,63,0|-6wne01,45,63,0|-6wne00,51,68,1|-6q63e1,51,68,1|-6q63e0,45,63,0|-6dxbc1,45,63,0|-6dxbc0,51,68,1|-67g0q1,51,68,1|-67g0q0,45,63,0|-5v78o1,45,63,0|-5v78o0,51,68,1|-5ocze1,51,68,1|-5ocze0,45,63,0|-5ch601,45,63,0|-5ch600,51,68,1|-55mwq1,51,68,1|-55mwq0,45,63,0|-4tr3c1,45,63,0|-4tr3c0,51,68,1|-4mwu21,51,68,1|-4mwu20,45,63,0|-4ao201,45,63,0|-4ao200,51,68,1|-446re1,51,68,1|-446re0,45,63,0|-3rxzc1,45,63,0|-3rxzc0,51,68,1|-3lgoq1,51,68,1|-3lgoq0,45,63,0|-397wo1,45,63,0|-397wo0,51,68,1|-32qm21,51,68,1|-32qm20,45,63,0|-2qhu01,45,63,0|-2qhu00,51,68,1|-2jnkq1,51,68,1|-2jnkq0,45,63,0|-27rrc1,45,63,0|-27rrc0,51,68,1|-20xi21,51,68,1|-20xi20,45,63,0|-1p1oo1,45,63,0|-1p1oo0,51,68,1|-1i7fe1,51,68,1|-1i7fe0,45,63,0|-15ync1,45,63,0|-15ync0,51,68,1|-zhcq1,51,68,1|-zhcq0,45,63,0|21s0nz,45,63,0|21s0o0,48,59,1|2565vz,48,59,1|2565w0,45,63,0|6rj4nz,45,63,0|6rj4o0,48,59,1|6uer7z,48,59,1|6uer80,45,63,0|NaN,45,63,0\",\"America/Blanc-Sablon|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/Boa_Vista|,0,69,0|-t85grl,0,69,0|-t85grk,41,40,0|-jyl7o1,41,40,0|-jyl7o0,38,41,1|-jpayc1,38,41,1|-jpayc0,41,40,0|-jfsa81,41,40,0|-jfsa80,38,41,1|-j6j101,38,41,1|-j6j100,41,40,0|-ahcvk1,41,40,0|-ahcvk0,38,41,1|-aad0w1,38,41,1|-aad0w0,41,40,0|-9yky81,41,40,0|-9yky80,38,41,1|-9scyc1,38,41,1|-9scyc0,41,40,0|-9ft0w1,41,40,0|-9ft0w0,38,41,1|-99j6c1,38,41,1|-99j6c0,41,40,0|-8wz8w1,41,40,0|-8wz8w0,38,41,1|-8scno1,38,41,1|-8scno0,41,40,0|-35xjk1,41,40,0|-35xjk0,38,41,1|-31nx01,38,41,1|-31nx00,41,40,0|-2kdm81,41,40,0|-2kdm80,38,41,1|-2hcfo1,38,41,1|-2hcfo0,41,40,0|-24qnk1,41,40,0|-24qnk0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1nia81,41,40,0|-1nia80,38,41,1|-1hc501,38,41,1|-1hc500,41,40,0|-14qcw1,41,40,0|-14qcw0,38,41,1|-yid01,38,41,1|-yid00,41,40,0|89jf3z,41,40,0|89jf40,38,41,1|8gdmzz,38,41,1|8gdn00,41,40,0|8rwj3z,41,40,0|8rwj40,38,41,1|8xnuzz,38,41,1|8xnv00,41,40,0|9aogfz,41,40,0|9aogg0,38,41,1|9g2tnz,38,41,1|9g2to0,41,40,0|fj0drz,41,40,0|fj0ds0,38,41,1|fqkizz,38,41,1|fqkj00,41,40,0|g23f3z,41,40,0|g23f40,38,41,1|g2gazz,38,41,1|g2gb00,41,40,0|NaN,41,40,0\",\"America/Bogota|,0,70,0|-18s2sy9,0,70,0|-18s2sy8,54,70,0|-srdoy9,54,70,0|-srdoy8,55,59,0|bnnsjz,55,59,0|bnnsk0,41,40,1|c4xxrz,41,40,1|c4xxs0,55,59,0|NaN,55,59,0\",\"America/Boise|,0,71,0|-18y0gg1,0,71,0|-18y0gg0,46,38,0|-r0emw1,46,38,0|-r0emw0,56,62,1|-qplto1,56,62,1|-qplto0,46,38,0|-qhok81,46,38,0|-qhok80,56,62,1|-q6vr01,56,62,1|-q6vr00,46,38,0|-oc9iw1,46,38,0|-oc9iw0,44,62,0|-ek1z01,44,62,0|-ek1z00,57,63,1|-cq2tg1,57,63,1|-cq2tg0,58,63,1|-cnoxs1,58,63,1|-cnoxs0,44,62,0|-1e8kc1,44,62,0|-1e8kc0,47,63,1|-14vls1,47,63,1|-14vls0,44,62,0|-viho1,44,62,0|-viho0,47,63,1|-m5j41,47,63,1|-m5j40,44,62,0|-csf01,44,62,0|-csf00,47,63,1|-3fgg1,47,63,1|-3fgg0,44,62,0|5xnnz,44,62,0|5xno0,47,63,1|fam7z,47,63,1|fam80,44,62,0|onqbz,44,62,0|onqc0,47,63,1|ydnjz,47,63,1|ydnk0,44,62,0|17qrnz,44,62,0|17qro0,47,63,1|1h3q7z,47,63,1|1h3q80,44,62,0|1qgubz,44,62,0|1qguc0,47,63,1|1ztsvz,47,63,1|1ztsw0,44,62,0|24vczz,44,62,0|24vd00,47,63,1|2ijvjz,47,63,1|2ijvk0,44,62,0|2oobnz,44,62,0|2oobo0,47,63,1|319y7z,47,63,1|319y80,44,62,0|3an2bz,44,62,0|3an2c0,47,63,1|3kczjz,47,63,1|3kczk0,44,62,0|3td4zz,44,62,0|3td500,47,63,1|43327z,47,63,1|433280,44,62,0|4cg6bz,44,62,0|4cg6c0,47,63,1|4lt4vz,47,63,1|4lt4w0,44,62,0|4v68zz,44,62,0|4v6900,47,63,1|54j7jz,47,63,1|54j7k0,44,62,0|5dwbnz,44,62,0|5dwbo0,47,63,1|5n9a7z,47,63,1|5n9a80,44,62,0|5wmebz,44,62,0|5wmec0,47,63,1|65zcvz,47,63,1|65zcw0,44,62,0|6fcgzz,44,62,0|6fch00,47,63,1|6p2e7z,47,63,1|6p2e80,44,62,0|6y2jnz,44,62,0|6y2jo0,47,63,1|77sgvz,47,63,1|77sgw0,44,62,0|7h5kzz,44,62,0|7h5l00,47,63,1|7qijjz,47,63,1|7qijk0,44,62,0|7zvnnz,44,62,0|7zvno0,47,63,1|898m7z,47,63,1|898m80,44,62,0|8ilqbz,44,62,0|8ilqc0,47,63,1|8ryovz,47,63,1|8ryow0,44,62,0|908wzz,44,62,0|908x00,47,63,1|9aorjz,47,63,1|9aork0,44,62,0|9iyznz,44,62,0|9iyzo0,47,63,1|9trsvz,47,63,1|9trsw0,44,62,0|a1p2bz,44,62,0|a1p2c0,47,63,1|achvjz,47,63,1|achvk0,44,62,0|akf4zz,44,62,0|akf500,47,63,1|av7y7z,47,63,1|av7y80,44,62,0|b3i6bz,44,62,0|b3i6c0,47,63,1|bdy0vz,47,63,1|bdy0w0,44,62,0|bm88zz,44,62,0|bm8900,47,63,1|bwo3jz,47,63,1|bwo3k0,44,62,0|c4ybnz,44,62,0|c4ybo0,47,63,1|cfr4vz,47,63,1|cfr4w0,44,62,0|cnoebz,44,62,0|cnoec0,47,63,1|cyh7jz,47,63,1|cyh7k0,44,62,0|d6egzz,44,62,0|d6eh00,47,63,1|dh7a7z,47,63,1|dh7a80,44,62,0|dphibz,44,62,0|dphic0,47,63,1|dzxcvz,47,63,1|dzxcw0,44,62,0|e87kzz,44,62,0|e87l00,47,63,1|einfjz,47,63,1|einfk0,44,62,0|eqxnnz,44,62,0|eqxno0,47,63,1|f1di7z,47,63,1|f1di80,44,62,0|f9nqbz,44,62,0|f9nqc0,47,63,1|fkgjjz,47,63,1|fkgjk0,44,62,0|fsdszz,44,62,0|fsdt00,47,63,1|g36m7z,47,63,1|g36m80,44,62,0|gb3vnz,44,62,0|gb3vo0,47,63,1|glwovz,47,63,1|glwow0,44,62,0|gu6wzz,44,62,0|gu6x00,47,63,1|h4mrjz,47,63,1|h4mrk0,44,62,0|hcwznz,44,62,0|hcwzo0,47,63,1|hncu7z,47,63,1|hncu80,44,62,0|hvn2bz,44,62,0|hvn2c0,47,63,1|i6fvjz,47,63,1|i6fvk0,44,62,0|ied4zz,44,62,0|ied500,47,63,1|ip5y7z,47,63,1|ip5y80,44,62,0|ix37nz,44,62,0|ix37o0,47,63,1|j7w0vz,47,63,1|j7w0w0,44,62,0|jeqebz,44,62,0|jeqec0,47,63,1|jqz27z,47,63,1|jqz280,44,62,0|jxggzz,44,62,0|jxgh00,47,63,1|k9p4vz,47,63,1|k9p4w0,44,62,0|kg6jnz,44,62,0|kg6jo0,47,63,1|ksf7jz,47,63,1|ksf7k0,44,62,0|kz9kzz,44,62,0|kz9l00,47,63,1|lbi8vz,47,63,1|lbi8w0,44,62,0|lhznnz,44,62,0|lhzno0,47,63,1|lu8bjz,47,63,1|lu8bk0,44,62,0|m0pqbz,44,62,0|m0pqc0,47,63,1|mcye7z,47,63,1|mcye80,44,62,0|mjfszz,44,62,0|mjft00,47,63,1|mvogvz,47,63,1|mvogw0,44,62,0|n25vnz,44,62,0|n25vo0,47,63,1|neejjz,47,63,1|neejk0,44,62,0|nkvybz,44,62,0|nkvyc0,47,63,1|nx4m7z,47,63,1|nx4m80,44,62,0|o3yznz,44,62,0|o3yzo0,47,63,1|og7njz,47,63,1|og7nk0,44,62,0|omp2bz,44,62,0|omp2c0,47,63,1|oyxq7z,47,63,1|oyxq80,44,62,0|p5f4zz,44,62,0|p5f500,47,63,1|phnsvz,47,63,1|phnsw0,44,62,0|po57nz,44,62,0|po57o0,47,63,1|q0dvjz,47,63,1|q0dvk0,44,62,0|q6vabz,44,62,0|q6vac0,47,63,1|qj3y7z,47,63,1|qj3y80,44,62,0|qpybnz,44,62,0|qpybo0,47,63,1|r26zjz,47,63,1|r26zk0,44,62,0|r8oebz,44,62,0|r8oec0,47,63,1|rkx27z,47,63,1|rkx280,44,62,0|rregzz,44,62,0|rreh00,47,63,1|s3n4vz,47,63,1|s3n4w0,44,62,0|sa4jnz,44,62,0|sa4jo0,47,63,1|smd7jz,47,63,1|smd7k0,44,62,0|ssumbz,44,62,0|ssumc0,47,63,1|t53a7z,47,63,1|t53a80,44,62,0|tbkozz,44,62,0|tbkp00,47,63,1|tntcvz,47,63,1|tntcw0,44,62,0|tunqbz,44,62,0|tunqc0,47,63,1|u6we7z,47,63,1|u6we80,44,62,0|uddszz,44,62,0|uddt00,47,63,1|upmgvz,47,63,1|upmgw0,44,62,0|uw3vnz,44,62,0|uw3vo0,47,63,1|v8cjjz,47,63,1|v8cjk0,44,62,0|vetybz,44,62,0|vetyc0,47,63,1|vr2m7z,47,63,1|vr2m80,44,62,0|vxk0zz,44,62,0|vxk100,47,63,1|w9sovz,47,63,1|w9sow0,44,62,0|wgn2bz,44,62,0|wgn2c0,47,63,1|wsvq7z,47,63,1|wsvq80,44,62,0|wzd4zz,44,62,0|wzd500,47,63,1|xblsvz,47,63,1|xblsw0,44,62,0|xi37nz,44,62,0|xi37o0,47,63,1|xubvjz,47,63,1|xubvk0,44,62,0|y0tabz,44,62,0|y0tac0,47,63,1|yd1y7z,47,63,1|yd1y80,44,62,0|yjjczz,44,62,0|yjjd00,47,63,1|yvs0vz,47,63,1|yvs0w0,44,62,0|z29fnz,44,62,0|z29fo0,47,63,1|zei3jz,47,63,1|zei3k0,44,62,0|zlcgzz,44,62,0|zlch00,47,63,1|zxl4vz,47,63,1|zxl4w0,44,62,0|1042jnz,44,62,0|1042jo0,47,63,1|10gb7jz,47,63,1|10gb7k0,44,62,0|10msmbz,44,62,0|10msmc0,47,63,1|10z1a7z,47,63,1|10z1a80,44,62,0|115iozz,44,62,0|115ip00,47,63,1|11hrcvz,47,63,1|11hrcw0,44,62,0|11o8rnz,44,62,0|11o8ro0,47,63,1|120hfjz,47,63,1|120hfk0,44,62,0|126yubz,44,62,0|126yuc0,47,63,1|12j7i7z,47,63,1|12j7i80,44,62,0|12q1vnz,44,62,0|12q1vo0,47,63,1|132ajjz,47,63,1|132ajk0,44,62,0|138rybz,44,62,0|138ryc0,47,63,1|13l0m7z,47,63,1|13l0m80,44,62,0|13ri0zz,44,62,0|13ri100,47,63,1|143qovz,47,63,1|143qow0,44,62,0|14a83nz,44,62,0|14a83o0,47,63,1|14mgrjz,47,63,1|14mgrk0,44,62,0|14sy6bz,44,62,0|14sy6c0,47,63,1|1556u7z,47,63,1|1556u80,44,62,0|15c17nz,44,62,0|15c17o0,47,63,1|15o9vjz,47,63,1|15o9vk0,44,62,0|15urabz,44,62,0|15urac0,47,63,1|166zy7z,47,63,1|166zy80,44,62,0|16dhczz,44,62,0|16dhd00,47,63,1|16pq0vz,47,63,1|16pq0w0,44,62,0|16w7fnz,44,62,0|16w7fo0,47,63,1|178g3jz,47,63,1|178g3k0,44,62,0|17exibz,44,62,0|17exic0,47,63,1|17r667z,47,63,1|17r6680,44,62,0|17xnkzz,44,62,0|17xnl00,47,63,1|189w8vz,47,63,1|189w8w0,44,62,0|18gqmbz,44,62,0|18gqmc0,47,63,1|18sza7z,47,63,1|18sza80,44,62,0|18zgozz,44,62,0|18zgp00,47,63,1|19bpcvz,47,63,1|19bpcw0,44,62,0|19i6rnz,44,62,0|19i6ro0,47,63,1|19uffjz,47,63,1|19uffk0,44,62,0|1a0wubz,44,62,0|1a0wuc0,47,63,1|1ad5i7z,47,63,1|1ad5i80,44,62,0|1ajmwzz,44,62,0|1ajmx00,47,63,1|1avvkvz,47,63,1|1avvkw0,44,62,0|1b2pybz,44,62,0|1b2pyc0,47,63,1|1beym7z,47,63,1|1beym80,44,62,0|1blg0zz,44,62,0|1blg100,47,63,1|1bxoovz,47,63,1|1bxoow0,44,62,0|1c463nz,44,62,0|1c463o0,47,63,1|1cgerjz,47,63,1|1cgerk0,44,62,0|1cmw6bz,44,62,0|1cmw6c0,47,63,1|1cz4u7z,47,63,1|1cz4u80,44,62,0|1d5m8zz,44,62,0|1d5m900,47,63,1|1dhuwvz,47,63,1|1dhuww0,44,62,0|1docbnz,44,62,0|1docbo0,47,63,1|1e0kzjz,47,63,1|1e0kzk0,44,62,0|1e7fczz,44,62,0|1e7fd00,47,63,1|1ejo0vz,47,63,1|1ejo0w0,44,62,0|1eq5fnz,44,62,0|1eq5fo0,47,63,1|1f2e3jz,47,63,1|1f2e3k0,44,62,0|1f8vibz,44,62,0|1f8vic0,47,63,1|1fl467z,47,63,1|1fl4680,44,62,0|1frlkzz,44,62,0|1frll00,47,63,1|1g3u8vz,47,63,1|1g3u8w0,44,62,0|1gabnnz,44,62,0|1gabno0,47,63,1|1gmkbjz,47,63,1|1gmkbk0,44,62,0|1gt1qbz,44,62,0|1gt1qc0,47,63,1|1h5ae7z,47,63,1|1h5ae80,44,62,0|1hc4rnz,44,62,0|1hc4ro0,47,63,1|1hodfjz,47,63,1|1hodfk0,44,62,0|1huuubz,44,62,0|1huuuc0,47,63,1|1i73i7z,47,63,1|1i73i80,44,62,0|1idkwzz,44,62,0|1idkx00,47,63,1|1iptkvz,47,63,1|1iptkw0,44,62,0|1iwaznz,44,62,0|1iwazo0,47,63,1|1j8jnjz,47,63,1|1j8jnk0,44,62,0|1jf12bz,44,62,0|1jf12c0,47,63,1|1jr9q7z,47,63,1|1jr9q80,44,62,0|1jy43nz,44,62,0|1jy43o0,47,63,1|1kacrjz,47,63,1|1kacrk0,44,62,0|1kgu6bz,44,62,0|1kgu6c0,47,63,1|1kt2u7z,47,63,1|1kt2u80,44,62,0|1kzk8zz,44,62,0|1kzk900,47,63,1|1lbswvz,47,63,1|1lbsww0,44,62,0|1liabnz,44,62,0|1liabo0,47,63,1|1luizjz,47,63,1|1luizk0,44,62,0|1m10ebz,44,62,0|1m10ec0,47,63,1|1md927z,47,63,1|1md9280,44,62,0|1mjqgzz,44,62,0|1mjqh00,47,63,1|1mvz4vz,47,63,1|1mvz4w0,44,62,0|1n2tibz,44,62,0|1n2tic0,47,63,1|1nf267z,47,63,1|1nf2680,44,62,0|1nljkzz,44,62,0|1nljl00,47,63,1|1nxs8vz,47,63,1|1nxs8w0,44,62,0|1o49nnz,44,62,0|1o49no0,47,63,1|1ogibjz,47,63,1|1ogibk0,44,62,0|1omzqbz,44,62,0|1omzqc0,47,63,1|1oz8e7z,47,63,1|1oz8e80,44,62,0|1p5pszz,44,62,0|1p5pt00,47,63,1|1phygvz,47,63,1|1phygw0,44,62,0|1posubz,44,62,0|1posuc0,47,63,1|1q11i7z,47,63,1|1q11i80,44,62,0|1q7iwzz,44,62,0|1q7ix00,47,63,1|1qjrkvz,47,63,1|1qjrkw0,44,62,0|1qq8znz,44,62,0|1qq8zo0,47,63,1|1r2hnjz,47,63,1|1r2hnk0,44,62,0|1r8z2bz,44,62,0|1r8z2c0,47,63,1|1rl7q7z,47,63,1|1rl7q80,44,62,0|1rrp4zz,44,62,0|1rrp500,47,63,1|1s3xsvz,47,63,1|1s3xsw0,44,62,0|1saf7nz,44,62,0|1saf7o0,47,63,1|1smnvjz,47,63,1|1smnvk0,44,62,0|1sti8zz,44,62,0|1sti900,47,63,1|1t5qwvz,47,63,1|1t5qww0,44,62,0|1tc8bnz,44,62,0|1tc8bo0,47,63,1|1togzjz,47,63,1|1togzk0,44,62,0|1tuyebz,44,62,0|1tuyec0,47,63,1|1u7727z,47,63,1|1u77280,44,62,0|1udogzz,44,62,0|1udoh00,47,63,1|1upx4vz,47,63,1|1upx4w0,44,62,0|1uwejnz,44,62,0|1uwejo0,47,63,1|1v8n7jz,47,63,1|1v8n7k0,44,62,0|1vf4mbz,44,62,0|1vf4mc0,47,63,1|1vrda7z,47,63,1|1vrda80,44,62,0|NaN,44,62,0\",\"America/Cambridge_Bay|,59,1,0|-q3gdc1,59,1,0|-q3gdc0,44,62,0|-ek1z01,44,62,0|-ek1z00,57,63,1|-cq2tg1,57,63,1|-cq2tg0,58,63,1|-cnoxs1,58,63,1|-cnoxs0,44,62,0|-2g1tw1,44,62,0|-2g1tw0,60,59,1|-26btw1,60,59,1|-26btw0,44,62,0|5dwbnz,44,62,0|5dwbo0,47,63,1|5n9a7z,47,63,1|5n9a80,44,62,0|5wmebz,44,62,0|5wmec0,47,63,1|65zcvz,47,63,1|65zcw0,44,62,0|6fcgzz,44,62,0|6fch00,47,63,1|6p2e7z,47,63,1|6p2e80,44,62,0|6y2jnz,44,62,0|6y2jo0,47,63,1|77sgvz,47,63,1|77sgw0,44,62,0|7h5kzz,44,62,0|7h5l00,47,63,1|7qijjz,47,63,1|7qijk0,44,62,0|7zvnnz,44,62,0|7zvno0,47,63,1|898m7z,47,63,1|898m80,44,62,0|8ilqbz,44,62,0|8ilqc0,47,63,1|8ryovz,47,63,1|8ryow0,44,62,0|908wzz,44,62,0|908x00,47,63,1|9aorjz,47,63,1|9aork0,44,62,0|9iyznz,44,62,0|9iyzo0,47,63,1|9trsvz,47,63,1|9trsw0,44,62,0|a1p2bz,44,62,0|a1p2c0,47,63,1|achvjz,47,63,1|achvk0,44,62,0|akf4zz,44,62,0|akf500,47,63,1|av7y7z,47,63,1|av7y80,44,62,0|b3i6bz,44,62,0|b3i6c0,47,63,1|bdy0vz,47,63,1|bdy0w0,44,62,0|bm88zz,44,62,0|bm8900,47,63,1|bwo3jz,47,63,1|bwo3k0,44,62,0|c4ybnz,44,62,0|c4ybo0,47,63,1|cfr4vz,47,63,1|cfr4w0,44,62,0|cnoebz,44,62,0|cnoec0,47,63,1|cyh7jz,47,63,1|cyh7k0,44,62,0|d6egzz,44,62,0|d6eh00,47,63,1|dh7a7z,47,63,1|dh7a80,44,62,0|dphibz,44,62,0|dphic0,47,63,1|dzxcvz,47,63,1|dzxcw0,44,62,0|e87kzz,44,62,0|e87l00,47,63,1|einfjz,47,63,1|einfk0,44,62,0|eqxnnz,44,62,0|eqxno0,47,63,1|f1di7z,47,63,1|f1di80,44,62,0|f9nqbz,44,62,0|f9nqc0,47,63,1|fkgjjz,47,63,1|fkgjk0,45,63,0|fsdq7z,45,63,0|fsdq80,48,59,1|g36jfz,48,59,1|g36jg0,43,59,0|g3jcjz,43,59,0|g3jck0,45,63,0|gb3vnz,45,63,0|gb3vo0,47,63,1|glwovz,47,63,1|glwow0,44,62,0|gu6wzz,44,62,0|gu6x00,47,63,1|h4mrjz,47,63,1|h4mrk0,44,62,0|hcwznz,44,62,0|hcwzo0,47,63,1|hncu7z,47,63,1|hncu80,44,62,0|hvn2bz,44,62,0|hvn2c0,47,63,1|i6fvjz,47,63,1|i6fvk0,44,62,0|ied4zz,44,62,0|ied500,47,63,1|ip5y7z,47,63,1|ip5y80,44,62,0|ix37nz,44,62,0|ix37o0,47,63,1|j7w0vz,47,63,1|j7w0w0,44,62,0|jeqebz,44,62,0|jeqec0,47,63,1|jqz27z,47,63,1|jqz280,44,62,0|jxggzz,44,62,0|jxgh00,47,63,1|k9p4vz,47,63,1|k9p4w0,44,62,0|kg6jnz,44,62,0|kg6jo0,47,63,1|ksf7jz,47,63,1|ksf7k0,44,62,0|kz9kzz,44,62,0|kz9l00,47,63,1|lbi8vz,47,63,1|lbi8w0,44,62,0|lhznnz,44,62,0|lhzno0,47,63,1|lu8bjz,47,63,1|lu8bk0,44,62,0|m0pqbz,44,62,0|m0pqc0,47,63,1|mcye7z,47,63,1|mcye80,44,62,0|mjfszz,44,62,0|mjft00,47,63,1|mvogvz,47,63,1|mvogw0,44,62,0|n25vnz,44,62,0|n25vo0,47,63,1|neejjz,47,63,1|neejk0,44,62,0|nkvybz,44,62,0|nkvyc0,47,63,1|nx4m7z,47,63,1|nx4m80,44,62,0|o3yznz,44,62,0|o3yzo0,47,63,1|og7njz,47,63,1|og7nk0,44,62,0|omp2bz,44,62,0|omp2c0,47,63,1|oyxq7z,47,63,1|oyxq80,44,62,0|p5f4zz,44,62,0|p5f500,47,63,1|phnsvz,47,63,1|phnsw0,44,62,0|po57nz,44,62,0|po57o0,47,63,1|q0dvjz,47,63,1|q0dvk0,44,62,0|q6vabz,44,62,0|q6vac0,47,63,1|qj3y7z,47,63,1|qj3y80,44,62,0|qpybnz,44,62,0|qpybo0,47,63,1|r26zjz,47,63,1|r26zk0,44,62,0|r8oebz,44,62,0|r8oec0,47,63,1|rkx27z,47,63,1|rkx280,44,62,0|rregzz,44,62,0|rreh00,47,63,1|s3n4vz,47,63,1|s3n4w0,44,62,0|sa4jnz,44,62,0|sa4jo0,47,63,1|smd7jz,47,63,1|smd7k0,44,62,0|ssumbz,44,62,0|ssumc0,47,63,1|t53a7z,47,63,1|t53a80,44,62,0|tbkozz,44,62,0|tbkp00,47,63,1|tntcvz,47,63,1|tntcw0,44,62,0|tunqbz,44,62,0|tunqc0,47,63,1|u6we7z,47,63,1|u6we80,44,62,0|uddszz,44,62,0|uddt00,47,63,1|upmgvz,47,63,1|upmgw0,44,62,0|uw3vnz,44,62,0|uw3vo0,47,63,1|v8cjjz,47,63,1|v8cjk0,44,62,0|vetybz,44,62,0|vetyc0,47,63,1|vr2m7z,47,63,1|vr2m80,44,62,0|vxk0zz,44,62,0|vxk100,47,63,1|w9sovz,47,63,1|w9sow0,44,62,0|wgn2bz,44,62,0|wgn2c0,47,63,1|wsvq7z,47,63,1|wsvq80,44,62,0|wzd4zz,44,62,0|wzd500,47,63,1|xblsvz,47,63,1|xblsw0,44,62,0|xi37nz,44,62,0|xi37o0,47,63,1|xubvjz,47,63,1|xubvk0,44,62,0|y0tabz,44,62,0|y0tac0,47,63,1|yd1y7z,47,63,1|yd1y80,44,62,0|yjjczz,44,62,0|yjjd00,47,63,1|yvs0vz,47,63,1|yvs0w0,44,62,0|z29fnz,44,62,0|z29fo0,47,63,1|zei3jz,47,63,1|zei3k0,44,62,0|zlcgzz,44,62,0|zlch00,47,63,1|zxl4vz,47,63,1|zxl4w0,44,62,0|1042jnz,44,62,0|1042jo0,47,63,1|10gb7jz,47,63,1|10gb7k0,44,62,0|10msmbz,44,62,0|10msmc0,47,63,1|10z1a7z,47,63,1|10z1a80,44,62,0|115iozz,44,62,0|115ip00,47,63,1|11hrcvz,47,63,1|11hrcw0,44,62,0|11o8rnz,44,62,0|11o8ro0,47,63,1|120hfjz,47,63,1|120hfk0,44,62,0|126yubz,44,62,0|126yuc0,47,63,1|12j7i7z,47,63,1|12j7i80,44,62,0|12q1vnz,44,62,0|12q1vo0,47,63,1|132ajjz,47,63,1|132ajk0,44,62,0|138rybz,44,62,0|138ryc0,47,63,1|13l0m7z,47,63,1|13l0m80,44,62,0|13ri0zz,44,62,0|13ri100,47,63,1|143qovz,47,63,1|143qow0,44,62,0|14a83nz,44,62,0|14a83o0,47,63,1|14mgrjz,47,63,1|14mgrk0,44,62,0|14sy6bz,44,62,0|14sy6c0,47,63,1|1556u7z,47,63,1|1556u80,44,62,0|15c17nz,44,62,0|15c17o0,47,63,1|15o9vjz,47,63,1|15o9vk0,44,62,0|15urabz,44,62,0|15urac0,47,63,1|166zy7z,47,63,1|166zy80,44,62,0|16dhczz,44,62,0|16dhd00,47,63,1|16pq0vz,47,63,1|16pq0w0,44,62,0|16w7fnz,44,62,0|16w7fo0,47,63,1|178g3jz,47,63,1|178g3k0,44,62,0|17exibz,44,62,0|17exic0,47,63,1|17r667z,47,63,1|17r6680,44,62,0|17xnkzz,44,62,0|17xnl00,47,63,1|189w8vz,47,63,1|189w8w0,44,62,0|18gqmbz,44,62,0|18gqmc0,47,63,1|18sza7z,47,63,1|18sza80,44,62,0|18zgozz,44,62,0|18zgp00,47,63,1|19bpcvz,47,63,1|19bpcw0,44,62,0|19i6rnz,44,62,0|19i6ro0,47,63,1|19uffjz,47,63,1|19uffk0,44,62,0|1a0wubz,44,62,0|1a0wuc0,47,63,1|1ad5i7z,47,63,1|1ad5i80,44,62,0|1ajmwzz,44,62,0|1ajmx00,47,63,1|1avvkvz,47,63,1|1avvkw0,44,62,0|1b2pybz,44,62,0|1b2pyc0,47,63,1|1beym7z,47,63,1|1beym80,44,62,0|1blg0zz,44,62,0|1blg100,47,63,1|1bxoovz,47,63,1|1bxoow0,44,62,0|1c463nz,44,62,0|1c463o0,47,63,1|1cgerjz,47,63,1|1cgerk0,44,62,0|1cmw6bz,44,62,0|1cmw6c0,47,63,1|1cz4u7z,47,63,1|1cz4u80,44,62,0|1d5m8zz,44,62,0|1d5m900,47,63,1|1dhuwvz,47,63,1|1dhuww0,44,62,0|1docbnz,44,62,0|1docbo0,47,63,1|1e0kzjz,47,63,1|1e0kzk0,44,62,0|1e7fczz,44,62,0|1e7fd00,47,63,1|1ejo0vz,47,63,1|1ejo0w0,44,62,0|1eq5fnz,44,62,0|1eq5fo0,47,63,1|1f2e3jz,47,63,1|1f2e3k0,44,62,0|1f8vibz,44,62,0|1f8vic0,47,63,1|1fl467z,47,63,1|1fl4680,44,62,0|1frlkzz,44,62,0|1frll00,47,63,1|1g3u8vz,47,63,1|1g3u8w0,44,62,0|1gabnnz,44,62,0|1gabno0,47,63,1|1gmkbjz,47,63,1|1gmkbk0,44,62,0|1gt1qbz,44,62,0|1gt1qc0,47,63,1|1h5ae7z,47,63,1|1h5ae80,44,62,0|1hc4rnz,44,62,0|1hc4ro0,47,63,1|1hodfjz,47,63,1|1hodfk0,44,62,0|1huuubz,44,62,0|1huuuc0,47,63,1|1i73i7z,47,63,1|1i73i80,44,62,0|1idkwzz,44,62,0|1idkx00,47,63,1|1iptkvz,47,63,1|1iptkw0,44,62,0|1iwaznz,44,62,0|1iwazo0,47,63,1|1j8jnjz,47,63,1|1j8jnk0,44,62,0|1jf12bz,44,62,0|1jf12c0,47,63,1|1jr9q7z,47,63,1|1jr9q80,44,62,0|1jy43nz,44,62,0|1jy43o0,47,63,1|1kacrjz,47,63,1|1kacrk0,44,62,0|1kgu6bz,44,62,0|1kgu6c0,47,63,1|1kt2u7z,47,63,1|1kt2u80,44,62,0|1kzk8zz,44,62,0|1kzk900,47,63,1|1lbswvz,47,63,1|1lbsww0,44,62,0|1liabnz,44,62,0|1liabo0,47,63,1|1luizjz,47,63,1|1luizk0,44,62,0|1m10ebz,44,62,0|1m10ec0,47,63,1|1md927z,47,63,1|1md9280,44,62,0|1mjqgzz,44,62,0|1mjqh00,47,63,1|1mvz4vz,47,63,1|1mvz4w0,44,62,0|1n2tibz,44,62,0|1n2tic0,47,63,1|1nf267z,47,63,1|1nf2680,44,62,0|1nljkzz,44,62,0|1nljl00,47,63,1|1nxs8vz,47,63,1|1nxs8w0,44,62,0|1o49nnz,44,62,0|1o49no0,47,63,1|1ogibjz,47,63,1|1ogibk0,44,62,0|1omzqbz,44,62,0|1omzqc0,47,63,1|1oz8e7z,47,63,1|1oz8e80,44,62,0|1p5pszz,44,62,0|1p5pt00,47,63,1|1phygvz,47,63,1|1phygw0,44,62,0|1posubz,44,62,0|1posuc0,47,63,1|1q11i7z,47,63,1|1q11i80,44,62,0|1q7iwzz,44,62,0|1q7ix00,47,63,1|1qjrkvz,47,63,1|1qjrkw0,44,62,0|1qq8znz,44,62,0|1qq8zo0,47,63,1|1r2hnjz,47,63,1|1r2hnk0,44,62,0|1r8z2bz,44,62,0|1r8z2c0,47,63,1|1rl7q7z,47,63,1|1rl7q80,44,62,0|1rrp4zz,44,62,0|1rrp500,47,63,1|1s3xsvz,47,63,1|1s3xsw0,44,62,0|1saf7nz,44,62,0|1saf7o0,47,63,1|1smnvjz,47,63,1|1smnvk0,44,62,0|1sti8zz,44,62,0|1sti900,47,63,1|1t5qwvz,47,63,1|1t5qww0,44,62,0|1tc8bnz,44,62,0|1tc8bo0,47,63,1|1togzjz,47,63,1|1togzk0,44,62,0|1tuyebz,44,62,0|1tuyec0,47,63,1|1u7727z,47,63,1|1u77280,44,62,0|1udogzz,44,62,0|1udoh00,47,63,1|1upx4vz,47,63,1|1upx4w0,44,62,0|1uwejnz,44,62,0|1uwejo0,47,63,1|1v8n7jz,47,63,1|1v8n7k0,44,62,0|1vf4mbz,44,62,0|1vf4mc0,47,63,1|1vrda7z,47,63,1|1vrda80,44,62,0|NaN,44,62,0\",\"America/Campo_Grande|,0,72,0|-t85hvx,0,72,0|-t85hvw,41,40,0|-jyl7o1,41,40,0|-jyl7o0,38,41,1|-jpayc1,38,41,1|-jpayc0,41,40,0|-jfsa81,41,40,0|-jfsa80,38,41,1|-j6j101,38,41,1|-j6j100,41,40,0|-ahcvk1,41,40,0|-ahcvk0,38,41,1|-aad0w1,38,41,1|-aad0w0,41,40,0|-9yky81,41,40,0|-9yky80,38,41,1|-9scyc1,38,41,1|-9scyc0,41,40,0|-9ft0w1,41,40,0|-9ft0w0,38,41,1|-99j6c1,38,41,1|-99j6c0,41,40,0|-8wz8w1,41,40,0|-8wz8w0,38,41,1|-8scno1,38,41,1|-8scno0,41,40,0|-35xjk1,41,40,0|-35xjk0,38,41,1|-31nx01,38,41,1|-31nx00,41,40,0|-2kdm81,41,40,0|-2kdm80,38,41,1|-2hcfo1,38,41,1|-2hcfo0,41,40,0|-24qnk1,41,40,0|-24qnk0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1nia81,41,40,0|-1nia80,38,41,1|-1hc501,38,41,1|-1hc500,41,40,0|-14qcw1,41,40,0|-14qcw0,38,41,1|-yid01,38,41,1|-yid00,41,40,0|89jf3z,41,40,0|89jf40,38,41,1|8gdmzz,38,41,1|8gdn00,41,40,0|8rwj3z,41,40,0|8rwj40,38,41,1|8xnuzz,38,41,1|8xnv00,41,40,0|9aogfz,41,40,0|9aogg0,38,41,1|9g2tnz,38,41,1|9g2to0,41,40,0|9t1kfz,41,40,0|9t1kg0,38,41,1|9yfxnz,38,41,1|9yfxo0,41,40,0|abrn3z,41,40,0|abrn40,38,41,1|ahvxnz,38,41,1|ahvxo0,41,40,0|auuofz,41,40,0|auuog0,38,41,1|b0yyzz,38,41,1|b0yz00,41,40,0|bdkr3z,41,40,0|bdkr40,38,41,1|bjc2zz,38,41,1|bjc300,41,40,0|bwnsfz,41,40,0|bwnsg0,38,41,1|c1p6zz,38,41,1|c1p700,41,40,0|cf0wfz,41,40,0|cf0wg0,38,41,1|cli5nz,38,41,1|cli5o0,41,40,0|cxqz3z,41,40,0|cxqz40,38,41,1|d488bz,38,41,1|d488c0,41,40,0|dgh1rz,41,40,0|dgh1s0,38,41,1|dmlcbz,38,41,1|dmlcc0,41,40,0|dyu5rz,41,40,0|dyu5s0,38,41,1|e5odnz,38,41,1|e5odo0,41,40,0|ehm33z,41,40,0|ehm340,38,41,1|ep4dnz,38,41,1|ep4do0,41,40,0|f0n9rz,41,40,0|f0n9s0,38,41,1|f7hhnz,38,41,1|f7hho0,41,40,0|fj0drz,41,40,0|fj0ds0,38,41,1|fqkizz,38,41,1|fqkj00,41,40,0|g23f3z,41,40,0|g23f40,38,41,1|g8xmzz,38,41,1|g8xn00,41,40,0|gl6gfz,41,40,0|gl6gg0,38,41,1|grnpnz,38,41,1|grnpo0,41,40,0|h4zf3z,41,40,0|h4zf40,38,41,1|hadsbz,38,41,1|hadsc0,41,40,0|hmzkfz,41,40,0|hmzkg0,38,41,1|ht3uzz,38,41,1|ht3v00,41,40,0|i6j9rz,41,40,0|i6j9s0,38,41,1|ic6wbz,38,41,1|ic6wc0,41,40,0|iofprz,41,40,0|iofps0,38,41,1|iuwyzz,38,41,1|iuwz00,41,40,0|j88ofz,41,40,0|j88og0,38,41,1|je00bz,38,41,1|je00c0,41,40,0|jpvv3z,41,40,0|jpvv40,38,41,1|jwd4bz,38,41,1|jwd4c0,41,40,0|k8ywfz,41,40,0|k8ywg0,38,41,1|kf36zz,38,41,1|kf3700,41,40,0|kroz3z,41,40,0|kroz40,38,41,1|ky68bz,38,41,1|ky68c0,41,40,0|laf1rz,41,40,0|laf1s0,38,41,1|lgwazz,38,41,1|lgwb00,41,40,0|lt54fz,41,40,0|lt54g0,38,41,1|lzzcbz,38,41,1|lzzcc0,41,40,0|mc85rz,41,40,0|mc85s0,38,41,1|micgbz,38,41,1|micgc0,41,40,0|muy8fz,41,40,0|muy8g0,38,41,1|n12izz,38,41,1|n12j00,41,40,0|ndob3z,41,40,0|ndob40,38,41,1|nk5kbz,38,41,1|nk5kc0,41,40,0|nwedrz,41,40,0|nweds0,38,41,1|o2vmzz,38,41,1|o2vn00,41,40,0|of4gfz,41,40,0|of4gg0,38,41,1|ollpnz,38,41,1|ollpo0,41,40,0|oxuj3z,41,40,0|oxuj40,38,41,1|p4bsbz,38,41,1|p4bsc0,41,40,0|phnhrz,41,40,0|phnhs0,38,41,1|pn1uzz,38,41,1|pn1v00,41,40,0|NaN,41,40,0\",\"America/Cancun|,0,73,0|-p1u7c1,0,73,0|-p1u7c0,45,63,0|690gnz,45,63,0|690go0,43,59,0|dphcrz,43,59,0|dphcs0,61,40,1|dzx7bz,61,40,1|dzx7c0,43,59,0|e87ffz,43,59,0|e87fg0,61,40,1|ein9zz,61,40,1|eina00,43,59,0|eqxi3z,43,59,0|eqxi40,61,40,1|ex1snz,61,40,1|ex1so0,48,59,1|f1dffz,48,59,1|f1dfg0,45,63,0|f9nnjz,45,63,0|f9nnk0,48,59,1|fkggrz,48,59,1|fkggs0,45,63,0|fsdq7z,45,63,0|fsdq80,48,59,1|g36jfz,48,59,1|g36jg0,45,63,0|gcwm7z,45,63,0|gcwm80,48,59,1|gkgrfz,48,59,1|gkgrg0,45,63,0|gu6u7z,45,63,0|gu6u80,48,59,1|h4morz,48,59,1|h4mos0,45,63,0|hcwwvz,45,63,0|hcwww0,48,59,1|hncrfz,48,59,1|hncrg0,45,63,0|hvmzjz,45,63,0|hvmzk0,48,59,1|i6fsrz,48,59,1|i6fss0,45,63,0|ied27z,45,63,0|ied280,48,59,1|ip5vfz,48,59,1|ip5vg0,45,63,0|ix34vz,45,63,0|ix34w0,48,59,1|j7vy3z,48,59,1|j7vy40,45,63,0|jft7jz,45,63,0|jft7k0,48,59,1|jqm0rz,48,59,1|jqm0s0,45,63,0|jyw8vz,45,63,0|jyw8w0,48,59,1|k9c3fz,48,59,1|k9c3g0,45,63,0|khmbjz,45,63,0|khmbk0,48,59,1|ks263z,48,59,1|ks2640,45,63,0|l0ce7z,45,63,0|l0ce80,48,59,1|lb57fz,48,59,1|lb57g0,45,63,0|lj2gvz,45,63,0|lj2gw0,48,59,1|ltva3z,48,59,1|ltva40,45,63,0|m1sjjz,45,63,0|m1sjk0,48,59,1|mclcrz,48,59,1|mclcs0,45,63,0|mkvkvz,45,63,0|mkvkw0,48,59,1|mvbffz,48,59,1|mvbfg0,45,63,0|n3lnjz,45,63,0|n3lnk0,48,59,1|ne1i3z,48,59,1|ne1i40,45,63,0|nj327z,45,63,0|nj3280,43,59,0|NaN,43,59,0\",\"America/Caracas|,0,74,0|-15r0wxt,0,74,0|-15r0wxs,40,75,0|-u7lcxx,40,75,0|-u7lcxw,62,76,0|-2lx4u1,62,76,0|-2lx4u0,41,40,0|jsrsrz,41,40,0|jsrss0,62,76,0|o6hkrz,62,76,0|o6hks0,41,40,0|NaN,41,40,0\",\"America/Cayenne|,0,77,0|-uj7yb5,0,77,0|-uj7yb4,41,40,0|-16brk1,41,40,0|-16brk0,38,41,0|NaN,38,41,0\",\"America/Cayman|,0,57,0|-15r0ult,0,57,0|-15r0uls,40,58,0|-w757vd,40,58,0|-w757vc,43,59,0|NaN,43,59,0\",\"America/Chicago|,0,78,0|-18y0m01,0,78,0|-18y0m00,45,63,0|-r0esg1,45,63,0|-r0esg0,48,59,1|-qplz81,48,59,1|-qplz80,45,63,0|-qhops1,45,63,0|-qhops0,48,59,1|-q6vwk1,48,59,1|-q6vwk0,45,63,0|-pv01s1,45,63,0|-pv01s0,48,59,1|-pnsv81,48,59,1|-pnsv80,45,63,0|-pg8kg1,45,63,0|-pg8kg0,48,59,1|-p52sk1,48,59,1|-p52sk0,45,63,0|-ovpog1,45,63,0|-ovpog0,48,59,1|-oo5j81,48,59,1|-oo5j80,45,63,0|-oczls1,45,63,0|-oczls0,48,59,1|-o52hw1,48,59,1|-o52hw0,45,63,0|-nu9j41,45,63,0|-nu9j40,48,59,1|-nmcf81,48,59,1|-nmcf80,45,63,0|-nbjgg1,45,63,0|-nbjgg0,48,59,1|-n3mck1,48,59,1|-n3mck0,45,63,0|-mstds1,45,63,0|-mstds0,48,59,1|-mkw9w1,48,59,1|-mkw9w0,45,63,0|-ma3b41,45,63,0|-ma3b40,48,59,1|-m26781,48,59,1|-m26780,45,63,0|-lr09s1,45,63,0|-lr09s0,48,59,1|-lj35w1,48,59,1|-lj35w0,45,63,0|-l8a741,45,63,0|-l8a740,48,59,1|-l0d381,48,59,1|-l0d380,45,63,0|-kpk4g1,45,63,0|-kpk4g0,48,59,1|-khn0k1,48,59,1|-khn0k0,45,63,0|-k6u1s1,45,63,0|-k6u1s0,48,59,1|-jywxw1,48,59,1|-jywxw0,45,63,0|-jo3z41,45,63,0|-jo3z40,48,59,1|-jg6v81,48,59,1|-jg6v80,45,63,0|-j50xs1,45,63,0|-j50xs0,48,59,1|-ixgsk1,48,59,1|-ixgsk0,45,63,0|-imav41,45,63,0|-imav40,48,59,1|-iedr81,48,59,1|-iedr80,45,63,0|-i3ksg1,45,63,0|-i3ksg0,48,59,1|-hvnok1,48,59,1|-hvnok0,45,63,0|-hnqf41,45,63,0|-hnqf40,43,59,0|-haev81,43,59,0|-haev80,45,63,0|-h24n41,45,63,0|-h24n40,48,59,1|-gu7j81,48,59,1|-gu7j80,45,63,0|-gjekg1,45,63,0|-gjekg0,48,59,1|-gbhgk1,48,59,1|-gbhgk0,45,63,0|-g0bj41,45,63,0|-g0bj40,48,59,1|-fsrdw1,48,59,1|-fsrdw0,45,63,0|-fhlgg1,45,63,0|-fhlgg0,48,59,1|-f9ock1,48,59,1|-f9ock0,45,63,0|-eyvds1,45,63,0|-eyvds0,48,59,1|-eqy9w1,48,59,1|-eqy9w0,45,63,0|-ek21s1,45,63,0|-ek21s0,52,59,1|-cq2tg1,52,59,1|-cq2tg0,53,59,1|-cnp0k1,53,59,1|-cnp0k0,45,63,0|-ccw1s1,45,63,0|-ccw1s0,48,59,1|-c4yxw1,48,59,1|-c4yxw0,45,63,0|-bu5z41,45,63,0|-bu5z40,48,59,1|-bm8v81,48,59,1|-bm8v80,45,63,0|-bbfwg1,45,63,0|-bbfwg0,48,59,1|-b3isk1,48,59,1|-b3isk0,45,63,0|-aspts1,45,63,0|-aspts0,48,59,1|-akspw1,48,59,1|-akspw0,45,63,0|-a9msg1,45,63,0|-a9msg0,48,59,1|-a22n81,48,59,1|-a22n80,45,63,0|-9qwps1,45,63,0|-9qwps0,48,59,1|-9izlw1,48,59,1|-9izlw0,45,63,0|-986n41,45,63,0|-986n40,48,59,1|-909j81,48,59,1|-909j80,45,63,0|-8pgkg1,45,63,0|-8pgkg0,48,59,1|-8hjgk1,48,59,1|-8hjgk0,45,63,0|-86qhs1,45,63,0|-86qhs0,48,59,1|-7ytdw1,48,59,1|-7ytdw0,45,63,0|-7o0f41,45,63,0|-7o0f40,48,59,1|-7eahw1,48,59,1|-7eahw0,45,63,0|-74xds1,45,63,0|-74xds0,48,59,1|-6vkf81,48,59,1|-6vkf80,45,63,0|-6m7b41,45,63,0|-6m7b40,48,59,1|-6cuck1,48,59,1|-6cuck0,45,63,0|-63h8g1,45,63,0|-63h8g0,48,59,1|-5u49w1,48,59,1|-5u49w0,45,63,0|-5kr5s1,45,63,0|-5kr5s0,48,59,1|-5be781,48,59,1|-5be780,45,63,0|-521341,45,63,0|-521340,48,59,1|-4sb5w1,48,59,1|-4sb5w0,45,63,0|-4iy1s1,45,63,0|-4iy1s0,48,59,1|-49l381,48,59,1|-49l380,45,63,0|-407z41,45,63,0|-407z40,48,59,1|-3qv0k1,48,59,1|-3qv0k0,45,63,0|-3hhwg1,45,63,0|-3hhwg0,48,59,1|-384xw1,48,59,1|-384xw0,45,63,0|-2yrts1,45,63,0|-2yrts0,48,59,1|-2pev81,48,59,1|-2pev80,45,63,0|-2g1r41,45,63,0|-2g1r40,48,59,1|-26btw1,48,59,1|-26btw0,45,63,0|-1xbog1,45,63,0|-1xbog0,48,59,1|-1nlr81,48,59,1|-1nlr80,45,63,0|-1e8n41,45,63,0|-1e8n40,48,59,1|-14vok1,48,59,1|-14vok0,45,63,0|-vikg1,45,63,0|-vikg0,48,59,1|-m5lw1,48,59,1|-m5lw0,45,63,0|-cshs1,45,63,0|-cshs0,48,59,1|-3fj81,48,59,1|-3fj80,45,63,0|5xkvz,45,63,0|5xkw0,48,59,1|fajfz,48,59,1|fajg0,45,63,0|onnjz,45,63,0|onnk0,48,59,1|ydkrz,48,59,1|ydks0,45,63,0|17qovz,45,63,0|17qow0,48,59,1|1h3nfz,48,59,1|1h3ng0,45,63,0|1qgrjz,45,63,0|1qgrk0,48,59,1|1ztq3z,48,59,1|1ztq40,45,63,0|23ffjz,45,63,0|23ffk0,48,59,1|2ijsrz,48,59,1|2ijss0,45,63,0|2oo8vz,45,63,0|2oo8w0,48,59,1|319vfz,48,59,1|319vg0,45,63,0|3amzjz,45,63,0|3amzk0,48,59,1|3kcwrz,48,59,1|3kcws0,45,63,0|3td27z,45,63,0|3td280,48,59,1|432zfz,48,59,1|432zg0,45,63,0|4cg3jz,45,63,0|4cg3k0,48,59,1|4lt23z,48,59,1|4lt240,45,63,0|4v667z,45,63,0|4v6680,48,59,1|54j4rz,48,59,1|54j4s0,45,63,0|5dw8vz,45,63,0|5dw8w0,48,59,1|5n97fz,48,59,1|5n97g0,45,63,0|5wmbjz,45,63,0|5wmbk0,48,59,1|65za3z,48,59,1|65za40,45,63,0|6fce7z,45,63,0|6fce80,48,59,1|6p2bfz,48,59,1|6p2bg0,45,63,0|6y2gvz,45,63,0|6y2gw0,48,59,1|77se3z,48,59,1|77se40,45,63,0|7h5i7z,45,63,0|7h5i80,48,59,1|7qigrz,48,59,1|7qigs0,45,63,0|7zvkvz,45,63,0|7zvkw0,48,59,1|898jfz,48,59,1|898jg0,45,63,0|8ilnjz,45,63,0|8ilnk0,48,59,1|8rym3z,48,59,1|8rym40,45,63,0|908u7z,45,63,0|908u80,48,59,1|9aoorz,48,59,1|9aoos0,45,63,0|9iywvz,45,63,0|9iyww0,48,59,1|9trq3z,48,59,1|9trq40,45,63,0|a1ozjz,45,63,0|a1ozk0,48,59,1|achsrz,48,59,1|achss0,45,63,0|akf27z,45,63,0|akf280,48,59,1|av7vfz,48,59,1|av7vg0,45,63,0|b3i3jz,45,63,0|b3i3k0,48,59,1|bdxy3z,48,59,1|bdxy40,45,63,0|bm867z,45,63,0|bm8680,48,59,1|bwo0rz,48,59,1|bwo0s0,45,63,0|c4y8vz,45,63,0|c4y8w0,48,59,1|cfr23z,48,59,1|cfr240,45,63,0|cnobjz,45,63,0|cnobk0,48,59,1|cyh4rz,48,59,1|cyh4s0,45,63,0|d6ee7z,45,63,0|d6ee80,48,59,1|dh77fz,48,59,1|dh77g0,45,63,0|dphfjz,45,63,0|dphfk0,48,59,1|dzxa3z,48,59,1|dzxa40,45,63,0|e87i7z,45,63,0|e87i80,48,59,1|eincrz,48,59,1|eincs0,45,63,0|eqxkvz,45,63,0|eqxkw0,48,59,1|f1dffz,48,59,1|f1dfg0,45,63,0|f9nnjz,45,63,0|f9nnk0,48,59,1|fkggrz,48,59,1|fkggs0,45,63,0|fsdq7z,45,63,0|fsdq80,48,59,1|g36jfz,48,59,1|g36jg0,45,63,0|gb3svz,45,63,0|gb3sw0,48,59,1|glwm3z,48,59,1|glwm40,45,63,0|gu6u7z,45,63,0|gu6u80,48,59,1|h4morz,48,59,1|h4mos0,45,63,0|hcwwvz,45,63,0|hcwww0,48,59,1|hncrfz,48,59,1|hncrg0,45,63,0|hvmzjz,45,63,0|hvmzk0,48,59,1|i6fsrz,48,59,1|i6fss0,45,63,0|ied27z,45,63,0|ied280,48,59,1|ip5vfz,48,59,1|ip5vg0,45,63,0|ix34vz,45,63,0|ix34w0,48,59,1|j7vy3z,48,59,1|j7vy40,45,63,0|jeqbjz,45,63,0|jeqbk0,48,59,1|jqyzfz,48,59,1|jqyzg0,45,63,0|jxge7z,45,63,0|jxge80,48,59,1|k9p23z,48,59,1|k9p240,45,63,0|kg6gvz,45,63,0|kg6gw0,48,59,1|ksf4rz,48,59,1|ksf4s0,45,63,0|kz9i7z,45,63,0|kz9i80,48,59,1|lbi63z,48,59,1|lbi640,45,63,0|lhzkvz,45,63,0|lhzkw0,48,59,1|lu88rz,48,59,1|lu88s0,45,63,0|m0pnjz,45,63,0|m0pnk0,48,59,1|mcybfz,48,59,1|mcybg0,45,63,0|mjfq7z,45,63,0|mjfq80,48,59,1|mvoe3z,48,59,1|mvoe40,45,63,0|n25svz,45,63,0|n25sw0,48,59,1|neegrz,48,59,1|neegs0,45,63,0|nkvvjz,45,63,0|nkvvk0,48,59,1|nx4jfz,48,59,1|nx4jg0,45,63,0|o3ywvz,45,63,0|o3yww0,48,59,1|og7krz,48,59,1|og7ks0,45,63,0|omozjz,45,63,0|omozk0,48,59,1|oyxnfz,48,59,1|oyxng0,45,63,0|p5f27z,45,63,0|p5f280,48,59,1|phnq3z,48,59,1|phnq40,45,63,0|po54vz,45,63,0|po54w0,48,59,1|q0dsrz,48,59,1|q0dss0,45,63,0|q6v7jz,45,63,0|q6v7k0,48,59,1|qj3vfz,48,59,1|qj3vg0,45,63,0|qpy8vz,45,63,0|qpy8w0,48,59,1|r26wrz,48,59,1|r26ws0,45,63,0|r8objz,45,63,0|r8obk0,48,59,1|rkwzfz,48,59,1|rkwzg0,45,63,0|rree7z,45,63,0|rree80,48,59,1|s3n23z,48,59,1|s3n240,45,63,0|sa4gvz,45,63,0|sa4gw0,48,59,1|smd4rz,48,59,1|smd4s0,45,63,0|ssujjz,45,63,0|ssujk0,48,59,1|t537fz,48,59,1|t537g0,45,63,0|tbkm7z,45,63,0|tbkm80,48,59,1|tnta3z,48,59,1|tnta40,45,63,0|tunnjz,45,63,0|tunnk0,48,59,1|u6wbfz,48,59,1|u6wbg0,45,63,0|uddq7z,45,63,0|uddq80,48,59,1|upme3z,48,59,1|upme40,45,63,0|uw3svz,45,63,0|uw3sw0,48,59,1|v8cgrz,48,59,1|v8cgs0,45,63,0|vetvjz,45,63,0|vetvk0,48,59,1|vr2jfz,48,59,1|vr2jg0,45,63,0|vxjy7z,45,63,0|vxjy80,48,59,1|w9sm3z,48,59,1|w9sm40,45,63,0|wgmzjz,45,63,0|wgmzk0,48,59,1|wsvnfz,48,59,1|wsvng0,45,63,0|wzd27z,45,63,0|wzd280,48,59,1|xblq3z,48,59,1|xblq40,45,63,0|xi34vz,45,63,0|xi34w0,48,59,1|xubsrz,48,59,1|xubss0,45,63,0|y0t7jz,45,63,0|y0t7k0,48,59,1|yd1vfz,48,59,1|yd1vg0,45,63,0|yjja7z,45,63,0|yjja80,48,59,1|yvry3z,48,59,1|yvry40,45,63,0|z29cvz,45,63,0|z29cw0,48,59,1|zei0rz,48,59,1|zei0s0,45,63,0|zlce7z,45,63,0|zlce80,48,59,1|zxl23z,48,59,1|zxl240,45,63,0|1042gvz,45,63,0|1042gw0,48,59,1|10gb4rz,48,59,1|10gb4s0,45,63,0|10msjjz,45,63,0|10msjk0,48,59,1|10z17fz,48,59,1|10z17g0,45,63,0|115im7z,45,63,0|115im80,48,59,1|11hra3z,48,59,1|11hra40,45,63,0|11o8ovz,45,63,0|11o8ow0,48,59,1|120hcrz,48,59,1|120hcs0,45,63,0|126yrjz,45,63,0|126yrk0,48,59,1|12j7ffz,48,59,1|12j7fg0,45,63,0|12q1svz,45,63,0|12q1sw0,48,59,1|132agrz,48,59,1|132ags0,45,63,0|138rvjz,45,63,0|138rvk0,48,59,1|13l0jfz,48,59,1|13l0jg0,45,63,0|13rhy7z,45,63,0|13rhy80,48,59,1|143qm3z,48,59,1|143qm40,45,63,0|14a80vz,45,63,0|14a80w0,48,59,1|14mgorz,48,59,1|14mgos0,45,63,0|14sy3jz,45,63,0|14sy3k0,48,59,1|1556rfz,48,59,1|1556rg0,45,63,0|15c14vz,45,63,0|15c14w0,48,59,1|15o9srz,48,59,1|15o9ss0,45,63,0|15ur7jz,45,63,0|15ur7k0,48,59,1|166zvfz,48,59,1|166zvg0,45,63,0|16dha7z,45,63,0|16dha80,48,59,1|16ppy3z,48,59,1|16ppy40,45,63,0|16w7cvz,45,63,0|16w7cw0,48,59,1|178g0rz,48,59,1|178g0s0,45,63,0|17exfjz,45,63,0|17exfk0,48,59,1|17r63fz,48,59,1|17r63g0,45,63,0|17xni7z,45,63,0|17xni80,48,59,1|189w63z,48,59,1|189w640,45,63,0|18gqjjz,45,63,0|18gqjk0,48,59,1|18sz7fz,48,59,1|18sz7g0,45,63,0|18zgm7z,45,63,0|18zgm80,48,59,1|19bpa3z,48,59,1|19bpa40,45,63,0|19i6ovz,45,63,0|19i6ow0,48,59,1|19ufcrz,48,59,1|19ufcs0,45,63,0|1a0wrjz,45,63,0|1a0wrk0,48,59,1|1ad5ffz,48,59,1|1ad5fg0,45,63,0|1ajmu7z,45,63,0|1ajmu80,48,59,1|1avvi3z,48,59,1|1avvi40,45,63,0|1b2pvjz,45,63,0|1b2pvk0,48,59,1|1beyjfz,48,59,1|1beyjg0,45,63,0|1blfy7z,45,63,0|1blfy80,48,59,1|1bxom3z,48,59,1|1bxom40,45,63,0|1c460vz,45,63,0|1c460w0,48,59,1|1cgeorz,48,59,1|1cgeos0,45,63,0|1cmw3jz,45,63,0|1cmw3k0,48,59,1|1cz4rfz,48,59,1|1cz4rg0,45,63,0|1d5m67z,45,63,0|1d5m680,48,59,1|1dhuu3z,48,59,1|1dhuu40,45,63,0|1doc8vz,45,63,0|1doc8w0,48,59,1|1e0kwrz,48,59,1|1e0kws0,45,63,0|1e7fa7z,45,63,0|1e7fa80,48,59,1|1ejny3z,48,59,1|1ejny40,45,63,0|1eq5cvz,45,63,0|1eq5cw0,48,59,1|1f2e0rz,48,59,1|1f2e0s0,45,63,0|1f8vfjz,45,63,0|1f8vfk0,48,59,1|1fl43fz,48,59,1|1fl43g0,45,63,0|1frli7z,45,63,0|1frli80,48,59,1|1g3u63z,48,59,1|1g3u640,45,63,0|1gabkvz,45,63,0|1gabkw0,48,59,1|1gmk8rz,48,59,1|1gmk8s0,45,63,0|1gt1njz,45,63,0|1gt1nk0,48,59,1|1h5abfz,48,59,1|1h5abg0,45,63,0|1hc4ovz,45,63,0|1hc4ow0,48,59,1|1hodcrz,48,59,1|1hodcs0,45,63,0|1huurjz,45,63,0|1huurk0,48,59,1|1i73ffz,48,59,1|1i73fg0,45,63,0|1idku7z,45,63,0|1idku80,48,59,1|1ipti3z,48,59,1|1ipti40,45,63,0|1iwawvz,45,63,0|1iwaww0,48,59,1|1j8jkrz,48,59,1|1j8jks0,45,63,0|1jf0zjz,45,63,0|1jf0zk0,48,59,1|1jr9nfz,48,59,1|1jr9ng0,45,63,0|1jy40vz,45,63,0|1jy40w0,48,59,1|1kacorz,48,59,1|1kacos0,45,63,0|1kgu3jz,45,63,0|1kgu3k0,48,59,1|1kt2rfz,48,59,1|1kt2rg0,45,63,0|1kzk67z,45,63,0|1kzk680,48,59,1|1lbsu3z,48,59,1|1lbsu40,45,63,0|1lia8vz,45,63,0|1lia8w0,48,59,1|1luiwrz,48,59,1|1luiws0,45,63,0|1m10bjz,45,63,0|1m10bk0,48,59,1|1md8zfz,48,59,1|1md8zg0,45,63,0|1mjqe7z,45,63,0|1mjqe80,48,59,1|1mvz23z,48,59,1|1mvz240,45,63,0|1n2tfjz,45,63,0|1n2tfk0,48,59,1|1nf23fz,48,59,1|1nf23g0,45,63,0|1nlji7z,45,63,0|1nlji80,48,59,1|1nxs63z,48,59,1|1nxs640,45,63,0|1o49kvz,45,63,0|1o49kw0,48,59,1|1ogi8rz,48,59,1|1ogi8s0,45,63,0|1omznjz,45,63,0|1omznk0,48,59,1|1oz8bfz,48,59,1|1oz8bg0,45,63,0|1p5pq7z,45,63,0|1p5pq80,48,59,1|1phye3z,48,59,1|1phye40,45,63,0|1posrjz,45,63,0|1posrk0,48,59,1|1q11ffz,48,59,1|1q11fg0,45,63,0|1q7iu7z,45,63,0|1q7iu80,48,59,1|1qjri3z,48,59,1|1qjri40,45,63,0|1qq8wvz,45,63,0|1qq8ww0,48,59,1|1r2hkrz,48,59,1|1r2hks0,45,63,0|1r8yzjz,45,63,0|1r8yzk0,48,59,1|1rl7nfz,48,59,1|1rl7ng0,45,63,0|1rrp27z,45,63,0|1rrp280,48,59,1|1s3xq3z,48,59,1|1s3xq40,45,63,0|1saf4vz,45,63,0|1saf4w0,48,59,1|1smnsrz,48,59,1|1smnss0,45,63,0|1sti67z,45,63,0|1sti680,48,59,1|1t5qu3z,48,59,1|1t5qu40,45,63,0|1tc88vz,45,63,0|1tc88w0,48,59,1|1togwrz,48,59,1|1togws0,45,63,0|1tuybjz,45,63,0|1tuybk0,48,59,1|1u76zfz,48,59,1|1u76zg0,45,63,0|1udoe7z,45,63,0|1udoe80,48,59,1|1upx23z,48,59,1|1upx240,45,63,0|1uwegvz,45,63,0|1uwegw0,48,59,1|1v8n4rz,48,59,1|1v8n4s0,45,63,0|1vf4jjz,45,63,0|1vf4jk0,48,59,1|1vrd7fz,48,59,1|1vrd7g0,45,63,0|NaN,45,63,0\",\"America/Chihuahua|,0,79,0|-p1u4k1,0,79,0|-p1u4k0,44,62,0|-m7mko1,44,62,0|-m7mko0,45,63,0|-kf67c1,45,63,0|-kf67c0,44,62,0|-k6j3c1,44,62,0|-k6j3c0,45,63,0|-jypm01,45,63,0|-jypm00,44,62,0|-jpan81,44,62,0|-jpan80,45,63,0|dphfjz,45,63,0|dphfk0,48,59,1|dzxa3z,48,59,1|dzxa40,45,63,0|e87i7z,45,63,0|e87i80,48,59,1|eincrz,48,59,1|eincs0,45,63,0|eqxnnz,45,63,0|eqxno0,47,63,1|f1di7z,47,63,1|f1di80,44,62,0|f9nqbz,44,62,0|f9nqc0,47,63,1|fkgjjz,47,63,1|fkgjk0,44,62,0|fsdszz,44,62,0|fsdt00,47,63,1|g36m7z,47,63,1|g36m80,44,62,0|gcwozz,44,62,0|gcwp00,47,63,1|gkgu7z,47,63,1|gkgu80,44,62,0|gu6wzz,44,62,0|gu6x00,47,63,1|h4mrjz,47,63,1|h4mrk0,44,62,0|hcwznz,44,62,0|hcwzo0,47,63,1|hncu7z,47,63,1|hncu80,44,62,0|hvn2bz,44,62,0|hvn2c0,47,63,1|i6fvjz,47,63,1|i6fvk0,44,62,0|ied4zz,44,62,0|ied500,47,63,1|ip5y7z,47,63,1|ip5y80,44,62,0|ix37nz,44,62,0|ix37o0,47,63,1|j7w0vz,47,63,1|j7w0w0,44,62,0|jftabz,44,62,0|jftac0,47,63,1|jqm3jz,47,63,1|jqm3k0,44,62,0|jywbnz,44,62,0|jywbo0,47,63,1|k9c67z,47,63,1|k9c680,44,62,0|khmebz,44,62,0|khmec0,47,63,1|ks28vz,47,63,1|ks28w0,44,62,0|l0cgzz,44,62,0|l0ch00,47,63,1|lb5a7z,47,63,1|lb5a80,44,62,0|lj2jnz,44,62,0|lj2jo0,47,63,1|ltvcvz,47,63,1|ltvcw0,44,62,0|m1smbz,44,62,0|m1smc0,47,63,1|mclfjz,47,63,1|mclfk0,44,62,0|mkvnnz,44,62,0|mkvno0,47,63,1|mvbi7z,47,63,1|mvbi80,44,62,0|n3lqbz,44,62,0|n3lqc0,47,63,1|ne1kvz,47,63,1|ne1kw0,44,62,0|nmbszz,44,62,0|nmbt00,47,63,1|nwrnjz,47,63,1|nwrnk0,44,62,0|o51vnz,44,62,0|o51vo0,47,63,1|ofuovz,47,63,1|ofuow0,44,62,0|onrybz,44,62,0|onryc0,47,63,1|oykrjz,47,63,1|oykrk0,44,62,0|p6i0zz,44,62,0|p6i100,47,63,1|phau7z,47,63,1|phau80,44,62,0|ppl2bz,44,62,0|ppl2c0,47,63,1|q00wvz,47,63,1|q00ww0,44,62,0|q8b4zz,44,62,0|q8b500,47,63,1|qiqzjz,47,63,1|qiqzk0,44,62,0|qr17nz,44,62,0|qr17o0,47,63,1|r1u0vz,47,63,1|r1u0w0,44,62,0|r9rabz,44,62,0|r9rac0,47,63,1|rkk3jz,47,63,1|rkk3k0,44,62,0|rshczz,44,62,0|rshd00,47,63,1|s3a67z,47,63,1|s3a680,44,62,0|sbkebz,44,62,0|sbkec0,47,63,1|sm08vz,47,63,1|sm08w0,44,62,0|suagzz,44,62,0|suah00,47,63,1|t4qbjz,47,63,1|t4qbk0,44,62,0|td0jnz,44,62,0|td0jo0,47,63,1|tnge7z,47,63,1|tnge80,44,62,0|tvqmbz,44,62,0|tvqmc0,47,63,1|u6jfjz,47,63,1|u6jfk0,44,62,0|uegozz,44,62,0|uegp00,47,63,1|up9i7z,47,63,1|up9i80,44,62,0|ux6rnz,44,62,0|ux6ro0,47,63,1|v7zkvz,47,63,1|v7zkw0,44,62,0|vg9szz,44,62,0|vg9t00,47,63,1|vqpnjz,47,63,1|vqpnk0,44,62,0|vyzvnz,44,62,0|vyzvo0,47,63,1|w9fq7z,47,63,1|w9fq80,44,62,0|whpybz,44,62,0|whpyc0,47,63,1|wsirjz,47,63,1|wsirk0,44,62,0|x0g0zz,44,62,0|x0g100,47,63,1|xb8u7z,47,63,1|xb8u80,44,62,0|xj63nz,44,62,0|xj63o0,47,63,1|xtywvz,47,63,1|xtyww0,44,62,0|y1w6bz,44,62,0|y1w6c0,47,63,1|ycozjz,47,63,1|ycozk0,44,62,0|ykz7nz,44,62,0|ykz7o0,47,63,1|yvf27z,47,63,1|yvf280,44,62,0|z3pabz,44,62,0|z3pac0,47,63,1|ze54vz,47,63,1|ze54w0,44,62,0|zmfczz,44,62,0|zmfd00,47,63,1|zx867z,47,63,1|zx8680,44,62,0|1055fnz,44,62,0|1055fo0,47,63,1|10fy8vz,47,63,1|10fy8w0,44,62,0|10nvibz,44,62,0|10nvic0,47,63,1|10yobjz,47,63,1|10yobk0,44,62,0|116yjnz,44,62,0|116yjo0,47,63,1|11hee7z,47,63,1|11hee80,44,62,0|11pombz,44,62,0|11pomc0,47,63,1|1204gvz,47,63,1|1204gw0,44,62,0|128eozz,44,62,0|128ep00,47,63,1|12iujjz,47,63,1|12iujk0,44,62,0|12r4rnz,44,62,0|12r4ro0,47,63,1|131xkvz,47,63,1|131xkw0,44,62,0|139uubz,44,62,0|139uuc0,47,63,1|13knnjz,47,63,1|13knnk0,44,62,0|13skwzz,44,62,0|13skx00,47,63,1|143dq7z,47,63,1|143dq80,44,62,0|14bnybz,44,62,0|14bnyc0,47,63,1|14m3svz,47,63,1|14m3sw0,44,62,0|14ue0zz,44,62,0|14ue100,47,63,1|154tvjz,47,63,1|154tvk0,44,62,0|15d43nz,44,62,0|15d43o0,47,63,1|15nwwvz,47,63,1|15nwww0,44,62,0|15vu6bz,44,62,0|15vu6c0,47,63,1|166mzjz,47,63,1|166mzk0,44,62,0|16ek8zz,44,62,0|16ek900,47,63,1|16pd27z,47,63,1|16pd280,44,62,0|16xnabz,44,62,0|16xnac0,47,63,1|17834vz,47,63,1|17834w0,44,62,0|17gdczz,44,62,0|17gdd00,47,63,1|17qt7jz,47,63,1|17qt7k0,44,62,0|17z3fnz,44,62,0|17z3fo0,47,63,1|189ja7z,47,63,1|189ja80,44,62,0|18htibz,44,62,0|18htic0,47,63,1|18smbjz,47,63,1|18smbk0,44,62,0|190jkzz,44,62,0|190jl00,47,63,1|19bce7z,47,63,1|19bce80,44,62,0|19j9nnz,44,62,0|19j9no0,47,63,1|19u2gvz,47,63,1|19u2gw0,44,62,0|1a2cozz,44,62,0|1a2cp00,47,63,1|1acsjjz,47,63,1|1acsjk0,44,62,0|1al2rnz,44,62,0|1al2ro0,47,63,1|1avim7z,47,63,1|1avim80,44,62,0|1b3subz,44,62,0|1b3suc0,47,63,1|1belnjz,47,63,1|1belnk0,44,62,0|1bmiwzz,44,62,0|1bmix00,47,63,1|1bxbq7z,47,63,1|1bxbq80,44,62,0|1c58znz,44,62,0|1c58zo0,47,63,1|1cg1svz,47,63,1|1cg1sw0,44,62,0|1cnz2bz,44,62,0|1cnz2c0,47,63,1|1cyrvjz,47,63,1|1cyrvk0,44,62,0|1d723nz,44,62,0|1d723o0,47,63,1|1dhhy7z,47,63,1|1dhhy80,44,62,0|1dps6bz,44,62,0|1dps6c0,47,63,1|1e080vz,47,63,1|1e080w0,44,62,0|1e8i8zz,44,62,0|1e8i900,47,63,1|1ejb27z,47,63,1|1ejb280,44,62,0|1er8bnz,44,62,0|1er8bo0,47,63,1|1f214vz,47,63,1|1f214w0,44,62,0|1f9yebz,44,62,0|1f9yec0,47,63,1|1fkr7jz,47,63,1|1fkr7k0,44,62,0|1ft1fnz,44,62,0|1ft1fo0,47,63,1|1g3ha7z,47,63,1|1g3ha80,44,62,0|1gbribz,44,62,0|1gbric0,47,63,1|1gm7cvz,47,63,1|1gm7cw0,44,62,0|1guhkzz,44,62,0|1guhl00,47,63,1|1h4xfjz,47,63,1|1h4xfk0,44,62,0|1hd7nnz,44,62,0|1hd7no0,47,63,1|1ho0gvz,47,63,1|1ho0gw0,44,62,0|1hvxqbz,44,62,0|1hvxqc0,47,63,1|1i6qjjz,47,63,1|1i6qjk0,44,62,0|1ienszz,44,62,0|1ient00,47,63,1|1ipgm7z,47,63,1|1ipgm80,44,62,0|1ixqubz,44,62,0|1ixquc0,47,63,1|1j86ovz,47,63,1|1j86ow0,44,62,0|1jggwzz,44,62,0|1jggx00,47,63,1|1jqwrjz,47,63,1|1jqwrk0,44,62,0|1jz6znz,44,62,0|1jz6zo0,47,63,1|1k9zsvz,47,63,1|1k9zsw0,44,62,0|1khx2bz,44,62,0|1khx2c0,47,63,1|1kspvjz,47,63,1|1kspvk0,44,62,0|1l0n4zz,44,62,0|1l0n500,47,63,1|1lbfy7z,47,63,1|1lbfy80,44,62,0|1ljq6bz,44,62,0|1ljq6c0,47,63,1|1lu60vz,47,63,1|1lu60w0,44,62,0|1m2g8zz,44,62,0|1m2g900,47,63,1|1mcw3jz,47,63,1|1mcw3k0,44,62,0|1ml6bnz,44,62,0|1ml6bo0,47,63,1|1mvm67z,47,63,1|1mvm680,44,62,0|1n3webz,44,62,0|1n3wec0,47,63,1|1nep7jz,47,63,1|1nep7k0,44,62,0|1nmmgzz,44,62,0|1nmmh00,47,63,1|1nxfa7z,47,63,1|1nxfa80,44,62,0|1o5cjnz,44,62,0|1o5cjo0,47,63,1|1og5cvz,47,63,1|1og5cw0,44,62,0|1oofkzz,44,62,0|1oofl00,47,63,1|1oyvfjz,47,63,1|1oyvfk0,44,62,0|1p75nnz,44,62,0|1p75no0,47,63,1|1phli7z,47,63,1|1phli80,44,62,0|1ppvqbz,44,62,0|1ppvqc0,47,63,1|1q0ojjz,47,63,1|1q0ojk0,44,62,0|1q8lszz,44,62,0|1q8lt00,47,63,1|1qjem7z,47,63,1|1qjem80,44,62,0|1qrbvnz,44,62,0|1qrbvo0,47,63,1|1r24ovz,47,63,1|1r24ow0,44,62,0|1ra1ybz,44,62,0|1ra1yc0,47,63,1|1rkurjz,47,63,1|1rkurk0,44,62,0|1rt4znz,44,62,0|1rt4zo0,47,63,1|1s3ku7z,47,63,1|1s3ku80,44,62,0|1sbv2bz,44,62,0|1sbv2c0,47,63,1|1smawvz,47,63,1|1smaww0,44,62,0|1sul4zz,44,62,0|1sul500,47,63,1|1t5dy7z,47,63,1|1t5dy80,44,62,0|1tdb7nz,44,62,0|1tdb7o0,47,63,1|1to40vz,47,63,1|1to40w0,44,62,0|1tw1abz,44,62,0|1tw1ac0,47,63,1|1u6u3jz,47,63,1|1u6u3k0,44,62,0|1uf4bnz,44,62,0|1uf4bo0,47,63,1|1upk67z,47,63,1|1upk680,44,62,0|1uxuebz,44,62,0|1uxuec0,47,63,1|1v8a8vz,47,63,1|1v8a8w0,44,62,0|1vgkgzz,44,62,0|1vgkh00,47,63,1|1vr0bjz,47,63,1|1vr0bk0,44,62,0|NaN,44,62,0\",\"America/Costa_Rica|,0,80,0|-15r0tro,0,80,0|-15r0trn,63,80,0|-pjw8fo,63,80,0|-pjw8fn,45,63,0|4rxcnz,45,63,0|4rxco0,48,59,1|4wyr7z,48,59,1|4wyr80,45,63,0|5anfbz,45,63,0|5anfc0,48,59,1|5fotvz,48,59,1|5fotw0,45,63,0|azhhzz,45,63,0|azhi00,48,59,1|b7v9vz,48,59,1|b7v9w0,45,63,0|bi7knz,45,63,0|bi7ko0,48,59,1|bl51vz,48,59,1|bl51w0,45,63,0|NaN,45,63,0\",\"America/Creston|,0,81,0|-18y0j81,0,81,0|-18y0j80,44,62,0|-r0epo1,44,62,0|-r0epo0,47,63,1|-qplwg1,47,63,1|-qplwg0,44,62,0|-qhon01,44,62,0|-qhon00,47,63,1|-q6vts1,47,63,1|-q6vts0,44,62,0|-ek1z01,44,62,0|-ek1z00,57,63,1|-dkikmd,57,63,1|-dkikmc,44,62,0|-dftz6d,44,62,0|-dftz6c,57,63,1|-d6f5yd,57,63,1|-d6f5yc,44,62,0|-1e8kc1,44,62,0|-1e8kc0,47,63,1|-14vls1,47,63,1|-14vls0,44,62,0|NaN,44,62,0\",\"America/Cuiaba|,0,82,0|-t85hm5,0,82,0|-t85hm4,41,40,0|-jyl7o1,41,40,0|-jyl7o0,38,41,1|-jpayc1,38,41,1|-jpayc0,41,40,0|-jfsa81,41,40,0|-jfsa80,38,41,1|-j6j101,38,41,1|-j6j100,41,40,0|-ahcvk1,41,40,0|-ahcvk0,38,41,1|-aad0w1,38,41,1|-aad0w0,41,40,0|-9yky81,41,40,0|-9yky80,38,41,1|-9scyc1,38,41,1|-9scyc0,41,40,0|-9ft0w1,41,40,0|-9ft0w0,38,41,1|-99j6c1,38,41,1|-99j6c0,41,40,0|-8wz8w1,41,40,0|-8wz8w0,38,41,1|-8scno1,38,41,1|-8scno0,41,40,0|-35xjk1,41,40,0|-35xjk0,38,41,1|-31nx01,38,41,1|-31nx00,41,40,0|-2kdm81,41,40,0|-2kdm80,38,41,1|-2hcfo1,38,41,1|-2hcfo0,41,40,0|-24qnk1,41,40,0|-24qnk0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1nia81,41,40,0|-1nia80,38,41,1|-1hc501,38,41,1|-1hc500,41,40,0|-14qcw1,41,40,0|-14qcw0,38,41,1|-yid01,38,41,1|-yid00,41,40,0|89jf3z,41,40,0|89jf40,38,41,1|8gdmzz,38,41,1|8gdn00,41,40,0|8rwj3z,41,40,0|8rwj40,38,41,1|8xnuzz,38,41,1|8xnv00,41,40,0|9aogfz,41,40,0|9aogg0,38,41,1|9g2tnz,38,41,1|9g2to0,41,40,0|9t1kfz,41,40,0|9t1kg0,38,41,1|9yfxnz,38,41,1|9yfxo0,41,40,0|abrn3z,41,40,0|abrn40,38,41,1|ahvxnz,38,41,1|ahvxo0,41,40,0|auuofz,41,40,0|auuog0,38,41,1|b0yyzz,38,41,1|b0yz00,41,40,0|bdkr3z,41,40,0|bdkr40,38,41,1|bjc2zz,38,41,1|bjc300,41,40,0|bwnsfz,41,40,0|bwnsg0,38,41,1|c1p6zz,38,41,1|c1p700,41,40,0|cf0wfz,41,40,0|cf0wg0,38,41,1|cli5nz,38,41,1|cli5o0,41,40,0|cxqz3z,41,40,0|cxqz40,38,41,1|d488bz,38,41,1|d488c0,41,40,0|dgh1rz,41,40,0|dgh1s0,38,41,1|dmlcbz,38,41,1|dmlcc0,41,40,0|dyu5rz,41,40,0|dyu5s0,38,41,1|e5odnz,38,41,1|e5odo0,41,40,0|ehm33z,41,40,0|ehm340,38,41,1|ep4dnz,38,41,1|ep4do0,41,40,0|f0n9rz,41,40,0|f0n9s0,38,41,1|f7hhnz,38,41,1|f7hho0,41,40,0|fj0drz,41,40,0|fj0ds0,38,41,1|fqkizz,38,41,1|fqkj00,41,40,0|g23f3z,41,40,0|g23f40,38,41,1|g8xmzz,38,41,1|g8xn00,41,40,0|gl6gfz,41,40,0|gl6gg0,38,41,1|grnpnz,38,41,1|grnpo0,41,40,0|h4zf3z,41,40,0|h4zf40,38,41,1|hadsbz,38,41,1|hadsc0,41,40,0|i6j9rz,41,40,0|i6j9s0,38,41,1|ic6wbz,38,41,1|ic6wc0,41,40,0|iofprz,41,40,0|iofps0,38,41,1|iuwyzz,38,41,1|iuwz00,41,40,0|j88ofz,41,40,0|j88og0,38,41,1|je00bz,38,41,1|je00c0,41,40,0|jpvv3z,41,40,0|jpvv40,38,41,1|jwd4bz,38,41,1|jwd4c0,41,40,0|k8ywfz,41,40,0|k8ywg0,38,41,1|kf36zz,38,41,1|kf3700,41,40,0|kroz3z,41,40,0|kroz40,38,41,1|ky68bz,38,41,1|ky68c0,41,40,0|laf1rz,41,40,0|laf1s0,38,41,1|lgwazz,38,41,1|lgwb00,41,40,0|lt54fz,41,40,0|lt54g0,38,41,1|lzzcbz,38,41,1|lzzcc0,41,40,0|mc85rz,41,40,0|mc85s0,38,41,1|micgbz,38,41,1|micgc0,41,40,0|muy8fz,41,40,0|muy8g0,38,41,1|n12izz,38,41,1|n12j00,41,40,0|ndob3z,41,40,0|ndob40,38,41,1|nk5kbz,38,41,1|nk5kc0,41,40,0|nwedrz,41,40,0|nweds0,38,41,1|o2vmzz,38,41,1|o2vn00,41,40,0|of4gfz,41,40,0|of4gg0,38,41,1|ollpnz,38,41,1|ollpo0,41,40,0|oxuj3z,41,40,0|oxuj40,38,41,1|p4bsbz,38,41,1|p4bsc0,41,40,0|phnhrz,41,40,0|phnhs0,38,41,1|pn1uzz,38,41,1|pn1v00,41,40,0|NaN,41,40,0\",\"America/Curacao|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/Danmarkshavn|,0,83,0|-rvusjl,0,83,0|-rvusjk,38,41,0|5ct4jz,38,41,0|5ct4k0,39,43,1|5lsw3z,39,43,1|5lsw40,38,41,0|5v5xfz,38,41,0|5v5xg0,39,43,1|64iyrz,39,43,1|64iys0,38,41,0|6dw03z,38,41,0|6dw040,39,43,1|6n91fz,39,43,1|6n91g0,38,41,0|6wm2rz,38,41,0|6wm2s0,39,43,1|75z43z,39,43,1|75z440,38,41,0|7fc5fz,38,41,0|7fc5g0,39,43,1|7p25fz,39,43,1|7p25g0,38,41,0|7yf6rz,38,41,0|7yf6s0,39,43,1|87s83z,39,43,1|87s840,38,41,0|8h59fz,38,41,0|8h59g0,39,43,1|8qiarz,39,43,1|8qias0,38,41,0|8zvc3z,38,41,0|8zvc40,39,43,1|998dfz,39,43,1|998dg0,38,41,0|9ilerz,38,41,0|9iles0,39,43,1|9ryg3z,39,43,1|9ryg40,38,41,0|a1bhfz,38,41,0|a1bhg0,39,43,1|aaoirz,39,43,1|aaois0,38,41,0|ak1k3z,38,41,0|ak1k40,39,43,1|atrk3z,39,43,1|atrk40,38,41,0|b34lfz,38,41,0|b34lg0,39,43,1|bchmrz,39,43,1|bchms0,38,41,0|bluo3z,38,41,0|bluo40,39,43,1|bv7pfz,39,43,1|bv7pg0,38,41,0|c4kqrz,38,41,0|c4kqs0,39,43,1|cdxs3z,39,43,1|cdxs40,38,41,0|cnatfz,38,41,0|cnatg0,39,43,1|cwnurz,39,43,1|cwnus0,38,41,0|d60w3z,38,41,0|d60w40,39,43,1|dfdxfz,39,43,1|dfdxg0,38,41,0|dkhezz,38,41,0|dkhf00,1,1,0|NaN,1,1,0\",\"America/Dawson|,0,84,0|-1079sul,0,84,0|-1079suk,35,35,0|-qzoms1,35,35,0|-qzoms0,64,38,1|-qplqw1,64,38,1|-qplqw0,35,35,0|-qess41,35,35,0|-qess40,64,38,1|-q6kps1,64,38,1|-q6kps0,35,35,0|-ek1tg1,35,35,0|-ek1tg0,65,38,1|-cq2tg1,65,38,1|-cq2tg0,66,38,1|-cnos81,66,38,1|-cnos80,35,35,0|-2g1oc1,35,35,0|-2g1oc0,67,62,1|-26boc1,67,62,1|-26boc0,35,35,0|1ztvnz,35,35,0|1ztvo0,46,38,0|5dwefz,46,38,0|5dweg0,56,62,1|5n9czz,56,62,1|5n9d00,46,38,0|5wmh3z,46,38,0|5wmh40,56,62,1|65zfnz,56,62,1|65zfo0,46,38,0|6fcjrz,46,38,0|6fcjs0,56,62,1|6p2gzz,56,62,1|6p2h00,46,38,0|6y2mfz,46,38,0|6y2mg0,56,62,1|77sjnz,56,62,1|77sjo0,46,38,0|7h5nrz,46,38,0|7h5ns0,56,62,1|7qimbz,56,62,1|7qimc0,46,38,0|7zvqfz,46,38,0|7zvqg0,56,62,1|898ozz,56,62,1|898p00,46,38,0|8ilt3z,46,38,0|8ilt40,56,62,1|8ryrnz,56,62,1|8ryro0,46,38,0|908zrz,46,38,0|908zs0,56,62,1|9aoubz,56,62,1|9aouc0,46,38,0|9iz2fz,46,38,0|9iz2g0,56,62,1|9trvnz,56,62,1|9trvo0,46,38,0|a1p53z,46,38,0|a1p540,56,62,1|achybz,56,62,1|achyc0,46,38,0|akf7rz,46,38,0|akf7s0,56,62,1|av80zz,56,62,1|av8100,46,38,0|b3i93z,46,38,0|b3i940,56,62,1|bdy3nz,56,62,1|bdy3o0,46,38,0|bm8brz,46,38,0|bm8bs0,56,62,1|bwo6bz,56,62,1|bwo6c0,46,38,0|c4yefz,46,38,0|c4yeg0,56,62,1|cfr7nz,56,62,1|cfr7o0,46,38,0|cnoh3z,46,38,0|cnoh40,56,62,1|cyhabz,56,62,1|cyhac0,46,38,0|d6ejrz,46,38,0|d6ejs0,56,62,1|dh7czz,56,62,1|dh7d00,46,38,0|dphl3z,46,38,0|dphl40,56,62,1|dzxfnz,56,62,1|dzxfo0,46,38,0|e87nrz,46,38,0|e87ns0,56,62,1|einibz,56,62,1|einic0,46,38,0|eqxqfz,46,38,0|eqxqg0,56,62,1|f1dkzz,56,62,1|f1dl00,46,38,0|f9nt3z,46,38,0|f9nt40,56,62,1|fkgmbz,56,62,1|fkgmc0,46,38,0|fsdvrz,46,38,0|fsdvs0,56,62,1|g36ozz,56,62,1|g36p00,46,38,0|gb3yfz,46,38,0|gb3yg0,56,62,1|glwrnz,56,62,1|glwro0,46,38,0|gu6zrz,46,38,0|gu6zs0,56,62,1|h4mubz,56,62,1|h4muc0,46,38,0|hcx2fz,46,38,0|hcx2g0,56,62,1|hncwzz,56,62,1|hncx00,46,38,0|hvn53z,46,38,0|hvn540,56,62,1|i6fybz,56,62,1|i6fyc0,46,38,0|ied7rz,46,38,0|ied7s0,56,62,1|ip60zz,56,62,1|ip6100,46,38,0|ix3afz,46,38,0|ix3ag0,56,62,1|j7w3nz,56,62,1|j7w3o0,46,38,0|jeqh3z,46,38,0|jeqh40,56,62,1|jqz4zz,56,62,1|jqz500,46,38,0|jxgjrz,46,38,0|jxgjs0,56,62,1|k9p7nz,56,62,1|k9p7o0,46,38,0|kg6mfz,46,38,0|kg6mg0,56,62,1|ksfabz,56,62,1|ksfac0,46,38,0|kz9nrz,46,38,0|kz9ns0,56,62,1|lbibnz,56,62,1|lbibo0,46,38,0|lhzqfz,46,38,0|lhzqg0,56,62,1|lu8ebz,56,62,1|lu8ec0,46,38,0|m0pt3z,46,38,0|m0pt40,56,62,1|mcygzz,56,62,1|mcyh00,46,38,0|mjfvrz,46,38,0|mjfvs0,56,62,1|mvojnz,56,62,1|mvojo0,46,38,0|n25yfz,46,38,0|n25yg0,56,62,1|neembz,56,62,1|neemc0,46,38,0|nkw13z,46,38,0|nkw140,56,62,1|nx4ozz,56,62,1|nx4p00,46,38,0|o3z2fz,46,38,0|o3z2g0,56,62,1|og7qbz,56,62,1|og7qc0,46,38,0|omp53z,46,38,0|omp540,56,62,1|oyxszz,56,62,1|oyxt00,46,38,0|p5f7rz,46,38,0|p5f7s0,56,62,1|phnvnz,56,62,1|phnvo0,46,38,0|po5afz,46,38,0|po5ag0,56,62,1|q0dybz,56,62,1|q0dyc0,46,38,0|q6vd3z,46,38,0|q6vd40,56,62,1|qj3vfz,56,62,1|qj3vg0,44,62,0|NaN,44,62,0\",\"America/Dawson_Creek|,0,85,0|-18vrweh,0,85,0|-18vrweg,46,38,0|-qzopk1,46,38,0|-qzopk0,56,62,1|-qplto1,56,62,1|-qplto0,46,38,0|-ek1w81,46,38,0|-ek1w80,68,62,1|-cq2tg1,68,62,1|-cq2tg0,69,62,1|-cnov01,69,62,1|-cnov00,46,38,0|-bu5tk1,46,38,0|-bu5tk0,56,62,1|-bm8po1,56,62,1|-bm8po0,46,38,0|-bbfqw1,46,38,0|-bbfqw0,56,62,1|-b3in01,56,62,1|-b3in00,46,38,0|-aspo81,46,38,0|-aspo80,56,62,1|-akskc1,56,62,1|-akskc0,46,38,0|-a9mmw1,46,38,0|-a9mmw0,56,62,1|-a22ho1,56,62,1|-a22ho0,46,38,0|-9qwk81,46,38,0|-9qwk80,56,62,1|-9izgc1,56,62,1|-9izgc0,46,38,0|-986hk1,46,38,0|-986hk0,56,62,1|-909do1,56,62,1|-909do0,46,38,0|-8pgew1,46,38,0|-8pgew0,56,62,1|-8hjb01,56,62,1|-8hjb00,46,38,0|-86qc81,46,38,0|-86qc80,56,62,1|-7yt8c1,56,62,1|-7yt8c0,46,38,0|-7o09k1,46,38,0|-7o09k0,56,62,1|-7g35o1,56,62,1|-7g35o0,46,38,0|-74x881,46,38,0|-74x880,56,62,1|-6x04c1,56,62,1|-6x04c0,46,38,0|-6m75k1,46,38,0|-6m75k0,56,62,1|-6ea1o1,56,62,1|-6ea1o0,46,38,0|-63h2w1,46,38,0|-63h2w0,56,62,1|-5vjz01,56,62,1|-5vjz00,46,38,0|-5kr081,46,38,0|-5kr080,56,62,1|-5ctwc1,56,62,1|-5ctwc0,46,38,0|-520xk1,46,38,0|-520xk0,56,62,1|-4u3to1,56,62,1|-4u3to0,46,38,0|-4ixw81,46,38,0|-4ixw80,56,62,1|-4bdr01,56,62,1|-4bdr00,46,38,0|-407tk1,46,38,0|-407tk0,56,62,1|-3quv01,56,62,1|-3quv00,46,38,0|-3hhqw1,46,38,0|-3hhqw0,56,62,1|-384sc1,56,62,1|-384sc0,46,38,0|-2yro81,46,38,0|-2yro80,56,62,1|-2pepo1,56,62,1|-2pepo0,46,38,0|-2g1lk1,46,38,0|-2g1lk0,56,62,1|-26boc1,56,62,1|-26boc0,46,38,0|-1xbiw1,46,38,0|-1xbiw0,56,62,1|-1nllo1,56,62,1|-1nllo0,46,38,0|-1e8hk1,46,38,0|-1e8hk0,56,62,1|-14vj01,56,62,1|-14vj00,46,38,0|-view1,46,38,0|-view0,56,62,1|-m5gc1,56,62,1|-m5gc0,46,38,0|-csc81,46,38,0|-csc80,56,62,1|-3fdo1,56,62,1|-3fdo0,46,38,0|5xqfz,46,38,0|5xqg0,56,62,1|faozz,56,62,1|fap00,46,38,0|ont3z,46,38,0|ont40,56,62,1|ydqbz,56,62,1|ydqc0,46,38,0|17qufz,46,38,0|17qug0,56,62,1|1e0ozz,56,62,1|1e0p00,44,62,0|NaN,44,62,0\",\"America/Denver|,0,86,0|-18y0j81,0,86,0|-18y0j80,44,62,0|-r0epo1,44,62,0|-r0epo0,47,63,1|-qplwg1,47,63,1|-qplwg0,44,62,0|-qhon01,44,62,0|-qhon00,47,63,1|-q6vts1,47,63,1|-q6vts0,44,62,0|-pyykc1,44,62,0|-pyykc0,47,63,1|-pnssg1,47,63,1|-pnssg0,44,62,0|-pg8ho1,44,62,0|-pg8ho0,47,63,1|-pdcv41,47,63,1|-pdcv40,44,62,0|-ek1z01,44,62,0|-ek1z00,57,63,1|-cq2tg1,57,63,1|-cq2tg0,58,63,1|-cnoxs1,58,63,1|-cnoxs0,44,62,0|-2g1oc1,44,62,0|-2g1oc0,47,63,1|-26br41,47,63,1|-26br40,44,62,0|-1xblo1,44,62,0|-1xblo0,47,63,1|-1nlog1,47,63,1|-1nlog0,44,62,0|-1e8kc1,44,62,0|-1e8kc0,47,63,1|-14vls1,47,63,1|-14vls0,44,62,0|-viho1,44,62,0|-viho0,47,63,1|-m5j41,47,63,1|-m5j40,44,62,0|-csf01,44,62,0|-csf00,47,63,1|-3fgg1,47,63,1|-3fgg0,44,62,0|5xnnz,44,62,0|5xno0,47,63,1|fam7z,47,63,1|fam80,44,62,0|onqbz,44,62,0|onqc0,47,63,1|ydnjz,47,63,1|ydnk0,44,62,0|17qrnz,44,62,0|17qro0,47,63,1|1h3q7z,47,63,1|1h3q80,44,62,0|1qgubz,44,62,0|1qguc0,47,63,1|1ztsvz,47,63,1|1ztsw0,44,62,0|23fibz,44,62,0|23fic0,47,63,1|2ijvjz,47,63,1|2ijvk0,44,62,0|2oobnz,44,62,0|2oobo0,47,63,1|319y7z,47,63,1|319y80,44,62,0|3an2bz,44,62,0|3an2c0,47,63,1|3kczjz,47,63,1|3kczk0,44,62,0|3td4zz,44,62,0|3td500,47,63,1|43327z,47,63,1|433280,44,62,0|4cg6bz,44,62,0|4cg6c0,47,63,1|4lt4vz,47,63,1|4lt4w0,44,62,0|4v68zz,44,62,0|4v6900,47,63,1|54j7jz,47,63,1|54j7k0,44,62,0|5dwbnz,44,62,0|5dwbo0,47,63,1|5n9a7z,47,63,1|5n9a80,44,62,0|5wmebz,44,62,0|5wmec0,47,63,1|65zcvz,47,63,1|65zcw0,44,62,0|6fcgzz,44,62,0|6fch00,47,63,1|6p2e7z,47,63,1|6p2e80,44,62,0|6y2jnz,44,62,0|6y2jo0,47,63,1|77sgvz,47,63,1|77sgw0,44,62,0|7h5kzz,44,62,0|7h5l00,47,63,1|7qijjz,47,63,1|7qijk0,44,62,0|7zvnnz,44,62,0|7zvno0,47,63,1|898m7z,47,63,1|898m80,44,62,0|8ilqbz,44,62,0|8ilqc0,47,63,1|8ryovz,47,63,1|8ryow0,44,62,0|908wzz,44,62,0|908x00,47,63,1|9aorjz,47,63,1|9aork0,44,62,0|9iyznz,44,62,0|9iyzo0,47,63,1|9trsvz,47,63,1|9trsw0,44,62,0|a1p2bz,44,62,0|a1p2c0,47,63,1|achvjz,47,63,1|achvk0,44,62,0|akf4zz,44,62,0|akf500,47,63,1|av7y7z,47,63,1|av7y80,44,62,0|b3i6bz,44,62,0|b3i6c0,47,63,1|bdy0vz,47,63,1|bdy0w0,44,62,0|bm88zz,44,62,0|bm8900,47,63,1|bwo3jz,47,63,1|bwo3k0,44,62,0|c4ybnz,44,62,0|c4ybo0,47,63,1|cfr4vz,47,63,1|cfr4w0,44,62,0|cnoebz,44,62,0|cnoec0,47,63,1|cyh7jz,47,63,1|cyh7k0,44,62,0|d6egzz,44,62,0|d6eh00,47,63,1|dh7a7z,47,63,1|dh7a80,44,62,0|dphibz,44,62,0|dphic0,47,63,1|dzxcvz,47,63,1|dzxcw0,44,62,0|e87kzz,44,62,0|e87l00,47,63,1|einfjz,47,63,1|einfk0,44,62,0|eqxnnz,44,62,0|eqxno0,47,63,1|f1di7z,47,63,1|f1di80,44,62,0|f9nqbz,44,62,0|f9nqc0,47,63,1|fkgjjz,47,63,1|fkgjk0,44,62,0|fsdszz,44,62,0|fsdt00,47,63,1|g36m7z,47,63,1|g36m80,44,62,0|gb3vnz,44,62,0|gb3vo0,47,63,1|glwovz,47,63,1|glwow0,44,62,0|gu6wzz,44,62,0|gu6x00,47,63,1|h4mrjz,47,63,1|h4mrk0,44,62,0|hcwznz,44,62,0|hcwzo0,47,63,1|hncu7z,47,63,1|hncu80,44,62,0|hvn2bz,44,62,0|hvn2c0,47,63,1|i6fvjz,47,63,1|i6fvk0,44,62,0|ied4zz,44,62,0|ied500,47,63,1|ip5y7z,47,63,1|ip5y80,44,62,0|ix37nz,44,62,0|ix37o0,47,63,1|j7w0vz,47,63,1|j7w0w0,44,62,0|jeqebz,44,62,0|jeqec0,47,63,1|jqz27z,47,63,1|jqz280,44,62,0|jxggzz,44,62,0|jxgh00,47,63,1|k9p4vz,47,63,1|k9p4w0,44,62,0|kg6jnz,44,62,0|kg6jo0,47,63,1|ksf7jz,47,63,1|ksf7k0,44,62,0|kz9kzz,44,62,0|kz9l00,47,63,1|lbi8vz,47,63,1|lbi8w0,44,62,0|lhznnz,44,62,0|lhzno0,47,63,1|lu8bjz,47,63,1|lu8bk0,44,62,0|m0pqbz,44,62,0|m0pqc0,47,63,1|mcye7z,47,63,1|mcye80,44,62,0|mjfszz,44,62,0|mjft00,47,63,1|mvogvz,47,63,1|mvogw0,44,62,0|n25vnz,44,62,0|n25vo0,47,63,1|neejjz,47,63,1|neejk0,44,62,0|nkvybz,44,62,0|nkvyc0,47,63,1|nx4m7z,47,63,1|nx4m80,44,62,0|o3yznz,44,62,0|o3yzo0,47,63,1|og7njz,47,63,1|og7nk0,44,62,0|omp2bz,44,62,0|omp2c0,47,63,1|oyxq7z,47,63,1|oyxq80,44,62,0|p5f4zz,44,62,0|p5f500,47,63,1|phnsvz,47,63,1|phnsw0,44,62,0|po57nz,44,62,0|po57o0,47,63,1|q0dvjz,47,63,1|q0dvk0,44,62,0|q6vabz,44,62,0|q6vac0,47,63,1|qj3y7z,47,63,1|qj3y80,44,62,0|qpybnz,44,62,0|qpybo0,47,63,1|r26zjz,47,63,1|r26zk0,44,62,0|r8oebz,44,62,0|r8oec0,47,63,1|rkx27z,47,63,1|rkx280,44,62,0|rregzz,44,62,0|rreh00,47,63,1|s3n4vz,47,63,1|s3n4w0,44,62,0|sa4jnz,44,62,0|sa4jo0,47,63,1|smd7jz,47,63,1|smd7k0,44,62,0|ssumbz,44,62,0|ssumc0,47,63,1|t53a7z,47,63,1|t53a80,44,62,0|tbkozz,44,62,0|tbkp00,47,63,1|tntcvz,47,63,1|tntcw0,44,62,0|tunqbz,44,62,0|tunqc0,47,63,1|u6we7z,47,63,1|u6we80,44,62,0|uddszz,44,62,0|uddt00,47,63,1|upmgvz,47,63,1|upmgw0,44,62,0|uw3vnz,44,62,0|uw3vo0,47,63,1|v8cjjz,47,63,1|v8cjk0,44,62,0|vetybz,44,62,0|vetyc0,47,63,1|vr2m7z,47,63,1|vr2m80,44,62,0|vxk0zz,44,62,0|vxk100,47,63,1|w9sovz,47,63,1|w9sow0,44,62,0|wgn2bz,44,62,0|wgn2c0,47,63,1|wsvq7z,47,63,1|wsvq80,44,62,0|wzd4zz,44,62,0|wzd500,47,63,1|xblsvz,47,63,1|xblsw0,44,62,0|xi37nz,44,62,0|xi37o0,47,63,1|xubvjz,47,63,1|xubvk0,44,62,0|y0tabz,44,62,0|y0tac0,47,63,1|yd1y7z,47,63,1|yd1y80,44,62,0|yjjczz,44,62,0|yjjd00,47,63,1|yvs0vz,47,63,1|yvs0w0,44,62,0|z29fnz,44,62,0|z29fo0,47,63,1|zei3jz,47,63,1|zei3k0,44,62,0|zlcgzz,44,62,0|zlch00,47,63,1|zxl4vz,47,63,1|zxl4w0,44,62,0|1042jnz,44,62,0|1042jo0,47,63,1|10gb7jz,47,63,1|10gb7k0,44,62,0|10msmbz,44,62,0|10msmc0,47,63,1|10z1a7z,47,63,1|10z1a80,44,62,0|115iozz,44,62,0|115ip00,47,63,1|11hrcvz,47,63,1|11hrcw0,44,62,0|11o8rnz,44,62,0|11o8ro0,47,63,1|120hfjz,47,63,1|120hfk0,44,62,0|126yubz,44,62,0|126yuc0,47,63,1|12j7i7z,47,63,1|12j7i80,44,62,0|12q1vnz,44,62,0|12q1vo0,47,63,1|132ajjz,47,63,1|132ajk0,44,62,0|138rybz,44,62,0|138ryc0,47,63,1|13l0m7z,47,63,1|13l0m80,44,62,0|13ri0zz,44,62,0|13ri100,47,63,1|143qovz,47,63,1|143qow0,44,62,0|14a83nz,44,62,0|14a83o0,47,63,1|14mgrjz,47,63,1|14mgrk0,44,62,0|14sy6bz,44,62,0|14sy6c0,47,63,1|1556u7z,47,63,1|1556u80,44,62,0|15c17nz,44,62,0|15c17o0,47,63,1|15o9vjz,47,63,1|15o9vk0,44,62,0|15urabz,44,62,0|15urac0,47,63,1|166zy7z,47,63,1|166zy80,44,62,0|16dhczz,44,62,0|16dhd00,47,63,1|16pq0vz,47,63,1|16pq0w0,44,62,0|16w7fnz,44,62,0|16w7fo0,47,63,1|178g3jz,47,63,1|178g3k0,44,62,0|17exibz,44,62,0|17exic0,47,63,1|17r667z,47,63,1|17r6680,44,62,0|17xnkzz,44,62,0|17xnl00,47,63,1|189w8vz,47,63,1|189w8w0,44,62,0|18gqmbz,44,62,0|18gqmc0,47,63,1|18sza7z,47,63,1|18sza80,44,62,0|18zgozz,44,62,0|18zgp00,47,63,1|19bpcvz,47,63,1|19bpcw0,44,62,0|19i6rnz,44,62,0|19i6ro0,47,63,1|19uffjz,47,63,1|19uffk0,44,62,0|1a0wubz,44,62,0|1a0wuc0,47,63,1|1ad5i7z,47,63,1|1ad5i80,44,62,0|1ajmwzz,44,62,0|1ajmx00,47,63,1|1avvkvz,47,63,1|1avvkw0,44,62,0|1b2pybz,44,62,0|1b2pyc0,47,63,1|1beym7z,47,63,1|1beym80,44,62,0|1blg0zz,44,62,0|1blg100,47,63,1|1bxoovz,47,63,1|1bxoow0,44,62,0|1c463nz,44,62,0|1c463o0,47,63,1|1cgerjz,47,63,1|1cgerk0,44,62,0|1cmw6bz,44,62,0|1cmw6c0,47,63,1|1cz4u7z,47,63,1|1cz4u80,44,62,0|1d5m8zz,44,62,0|1d5m900,47,63,1|1dhuwvz,47,63,1|1dhuww0,44,62,0|1docbnz,44,62,0|1docbo0,47,63,1|1e0kzjz,47,63,1|1e0kzk0,44,62,0|1e7fczz,44,62,0|1e7fd00,47,63,1|1ejo0vz,47,63,1|1ejo0w0,44,62,0|1eq5fnz,44,62,0|1eq5fo0,47,63,1|1f2e3jz,47,63,1|1f2e3k0,44,62,0|1f8vibz,44,62,0|1f8vic0,47,63,1|1fl467z,47,63,1|1fl4680,44,62,0|1frlkzz,44,62,0|1frll00,47,63,1|1g3u8vz,47,63,1|1g3u8w0,44,62,0|1gabnnz,44,62,0|1gabno0,47,63,1|1gmkbjz,47,63,1|1gmkbk0,44,62,0|1gt1qbz,44,62,0|1gt1qc0,47,63,1|1h5ae7z,47,63,1|1h5ae80,44,62,0|1hc4rnz,44,62,0|1hc4ro0,47,63,1|1hodfjz,47,63,1|1hodfk0,44,62,0|1huuubz,44,62,0|1huuuc0,47,63,1|1i73i7z,47,63,1|1i73i80,44,62,0|1idkwzz,44,62,0|1idkx00,47,63,1|1iptkvz,47,63,1|1iptkw0,44,62,0|1iwaznz,44,62,0|1iwazo0,47,63,1|1j8jnjz,47,63,1|1j8jnk0,44,62,0|1jf12bz,44,62,0|1jf12c0,47,63,1|1jr9q7z,47,63,1|1jr9q80,44,62,0|1jy43nz,44,62,0|1jy43o0,47,63,1|1kacrjz,47,63,1|1kacrk0,44,62,0|1kgu6bz,44,62,0|1kgu6c0,47,63,1|1kt2u7z,47,63,1|1kt2u80,44,62,0|1kzk8zz,44,62,0|1kzk900,47,63,1|1lbswvz,47,63,1|1lbsww0,44,62,0|1liabnz,44,62,0|1liabo0,47,63,1|1luizjz,47,63,1|1luizk0,44,62,0|1m10ebz,44,62,0|1m10ec0,47,63,1|1md927z,47,63,1|1md9280,44,62,0|1mjqgzz,44,62,0|1mjqh00,47,63,1|1mvz4vz,47,63,1|1mvz4w0,44,62,0|1n2tibz,44,62,0|1n2tic0,47,63,1|1nf267z,47,63,1|1nf2680,44,62,0|1nljkzz,44,62,0|1nljl00,47,63,1|1nxs8vz,47,63,1|1nxs8w0,44,62,0|1o49nnz,44,62,0|1o49no0,47,63,1|1ogibjz,47,63,1|1ogibk0,44,62,0|1omzqbz,44,62,0|1omzqc0,47,63,1|1oz8e7z,47,63,1|1oz8e80,44,62,0|1p5pszz,44,62,0|1p5pt00,47,63,1|1phygvz,47,63,1|1phygw0,44,62,0|1posubz,44,62,0|1posuc0,47,63,1|1q11i7z,47,63,1|1q11i80,44,62,0|1q7iwzz,44,62,0|1q7ix00,47,63,1|1qjrkvz,47,63,1|1qjrkw0,44,62,0|1qq8znz,44,62,0|1qq8zo0,47,63,1|1r2hnjz,47,63,1|1r2hnk0,44,62,0|1r8z2bz,44,62,0|1r8z2c0,47,63,1|1rl7q7z,47,63,1|1rl7q80,44,62,0|1rrp4zz,44,62,0|1rrp500,47,63,1|1s3xsvz,47,63,1|1s3xsw0,44,62,0|1saf7nz,44,62,0|1saf7o0,47,63,1|1smnvjz,47,63,1|1smnvk0,44,62,0|1sti8zz,44,62,0|1sti900,47,63,1|1t5qwvz,47,63,1|1t5qww0,44,62,0|1tc8bnz,44,62,0|1tc8bo0,47,63,1|1togzjz,47,63,1|1togzk0,44,62,0|1tuyebz,44,62,0|1tuyec0,47,63,1|1u7727z,47,63,1|1u77280,44,62,0|1udogzz,44,62,0|1udoh00,47,63,1|1upx4vz,47,63,1|1upx4w0,44,62,0|1uwejnz,44,62,0|1uwejo0,47,63,1|1v8n7jz,47,63,1|1v8n7k0,44,62,0|1vf4mbz,44,62,0|1vf4mc0,47,63,1|1vrda7z,47,63,1|1vrda80,44,62,0|NaN,44,62,0\",\"America/Detroit|,0,87,0|-xx8dye,0,87,0|-xx8dyd,45,63,0|-sih341,45,63,0|-sih340,43,59,0|-ek24k1,43,59,0|-ek24k0,70,40,1|-cq2tg1,70,40,1|-cq2tg0,71,40,1|-cnp3c1,71,40,1|-cnp3c0,43,59,0|-bbfz81,43,59,0|-bbfz80,61,40,1|-b3ivc1,61,40,1|-b3ivc0,43,59,0|-1bxjed,43,59,0|-1bxjec,61,40,1|-14vrc1,61,40,1|-14vrc0,43,59,0|-vin81,43,59,0|-vin80,61,40,1|-m5oo1,61,40,1|-m5oo0,43,59,0|1qgorz,43,59,0|1qgos0,61,40,1|1ztnbz,61,40,1|1ztnc0,43,59,0|23fcrz,43,59,0|23fcs0,61,40,1|2ijpzz,61,40,1|2ijq00,43,59,0|2rwu3z,43,59,0|2rwu40,61,40,1|319snz,61,40,1|319so0,43,59,0|3amwrz,43,59,0|3amws0,61,40,1|3kctzz,61,40,1|3kcu00,43,59,0|3tczfz,43,59,0|3tczg0,61,40,1|432wnz,61,40,1|432wo0,43,59,0|4cg0rz,43,59,0|4cg0s0,61,40,1|4lszbz,61,40,1|4lszc0,43,59,0|4v63fz,43,59,0|4v63g0,61,40,1|54j1zz,61,40,1|54j200,43,59,0|5dw63z,43,59,0|5dw640,61,40,1|5n94nz,61,40,1|5n94o0,43,59,0|5wm8rz,43,59,0|5wm8s0,61,40,1|65z7bz,61,40,1|65z7c0,43,59,0|6fcbfz,43,59,0|6fcbg0,61,40,1|6p28nz,61,40,1|6p28o0,43,59,0|6y2e3z,43,59,0|6y2e40,61,40,1|77sbbz,61,40,1|77sbc0,43,59,0|7h5ffz,43,59,0|7h5fg0,61,40,1|7qidzz,61,40,1|7qie00,43,59,0|7zvi3z,43,59,0|7zvi40,61,40,1|898gnz,61,40,1|898go0,43,59,0|8ilkrz,43,59,0|8ilks0,61,40,1|8ryjbz,61,40,1|8ryjc0,43,59,0|908rfz,43,59,0|908rg0,61,40,1|9aolzz,61,40,1|9aom00,43,59,0|9iyu3z,43,59,0|9iyu40,61,40,1|9trnbz,61,40,1|9trnc0,43,59,0|a1owrz,43,59,0|a1ows0,61,40,1|achpzz,61,40,1|achq00,43,59,0|akezfz,43,59,0|akezg0,61,40,1|av7snz,61,40,1|av7so0,43,59,0|b3i0rz,43,59,0|b3i0s0,61,40,1|bdxvbz,61,40,1|bdxvc0,43,59,0|bm83fz,43,59,0|bm83g0,61,40,1|bwnxzz,61,40,1|bwny00,43,59,0|c4y63z,43,59,0|c4y640,61,40,1|cfqzbz,61,40,1|cfqzc0,43,59,0|cno8rz,43,59,0|cno8s0,61,40,1|cyh1zz,61,40,1|cyh200,43,59,0|d6ebfz,43,59,0|d6ebg0,61,40,1|dh74nz,61,40,1|dh74o0,43,59,0|dphcrz,43,59,0|dphcs0,61,40,1|dzx7bz,61,40,1|dzx7c0,43,59,0|e87ffz,43,59,0|e87fg0,61,40,1|ein9zz,61,40,1|eina00,43,59,0|eqxi3z,43,59,0|eqxi40,61,40,1|f1dcnz,61,40,1|f1dco0,43,59,0|f9nkrz,43,59,0|f9nks0,61,40,1|fkgdzz,61,40,1|fkge00,43,59,0|fsdnfz,43,59,0|fsdng0,61,40,1|g36gnz,61,40,1|g36go0,43,59,0|gb3q3z,43,59,0|gb3q40,61,40,1|glwjbz,61,40,1|glwjc0,43,59,0|gu6rfz,43,59,0|gu6rg0,61,40,1|h4mlzz,61,40,1|h4mm00,43,59,0|hcwu3z,43,59,0|hcwu40,61,40,1|hnconz,61,40,1|hncoo0,43,59,0|hvmwrz,43,59,0|hvmws0,61,40,1|i6fpzz,61,40,1|i6fq00,43,59,0|ieczfz,43,59,0|ieczg0,61,40,1|ip5snz,61,40,1|ip5so0,43,59,0|ix323z,43,59,0|ix3240,61,40,1|j7vvbz,61,40,1|j7vvc0,43,59,0|jeq8rz,43,59,0|jeq8s0,61,40,1|jqywnz,61,40,1|jqywo0,43,59,0|jxgbfz,43,59,0|jxgbg0,61,40,1|k9ozbz,61,40,1|k9ozc0,43,59,0|kg6e3z,43,59,0|kg6e40,61,40,1|ksf1zz,61,40,1|ksf200,43,59,0|kz9ffz,43,59,0|kz9fg0,61,40,1|lbi3bz,61,40,1|lbi3c0,43,59,0|lhzi3z,43,59,0|lhzi40,61,40,1|lu85zz,61,40,1|lu8600,43,59,0|m0pkrz,43,59,0|m0pks0,61,40,1|mcy8nz,61,40,1|mcy8o0,43,59,0|mjfnfz,43,59,0|mjfng0,61,40,1|mvobbz,61,40,1|mvobc0,43,59,0|n25q3z,43,59,0|n25q40,61,40,1|needzz,61,40,1|neee00,43,59,0|nkvsrz,43,59,0|nkvss0,61,40,1|nx4gnz,61,40,1|nx4go0,43,59,0|o3yu3z,43,59,0|o3yu40,61,40,1|og7hzz,61,40,1|og7i00,43,59,0|omowrz,43,59,0|omows0,61,40,1|oyxknz,61,40,1|oyxko0,43,59,0|p5ezfz,43,59,0|p5ezg0,61,40,1|phnnbz,61,40,1|phnnc0,43,59,0|po523z,43,59,0|po5240,61,40,1|q0dpzz,61,40,1|q0dq00,43,59,0|q6v4rz,43,59,0|q6v4s0,61,40,1|qj3snz,61,40,1|qj3so0,43,59,0|qpy63z,43,59,0|qpy640,61,40,1|r26tzz,61,40,1|r26u00,43,59,0|r8o8rz,43,59,0|r8o8s0,61,40,1|rkwwnz,61,40,1|rkwwo0,43,59,0|rrebfz,43,59,0|rrebg0,61,40,1|s3mzbz,61,40,1|s3mzc0,43,59,0|sa4e3z,43,59,0|sa4e40,61,40,1|smd1zz,61,40,1|smd200,43,59,0|ssugrz,43,59,0|ssugs0,61,40,1|t534nz,61,40,1|t534o0,43,59,0|tbkjfz,43,59,0|tbkjg0,61,40,1|tnt7bz,61,40,1|tnt7c0,43,59,0|tunkrz,43,59,0|tunks0,61,40,1|u6w8nz,61,40,1|u6w8o0,43,59,0|uddnfz,43,59,0|uddng0,61,40,1|upmbbz,61,40,1|upmbc0,43,59,0|uw3q3z,43,59,0|uw3q40,61,40,1|v8cdzz,61,40,1|v8ce00,43,59,0|vetsrz,43,59,0|vetss0,61,40,1|vr2gnz,61,40,1|vr2go0,43,59,0|vxjvfz,43,59,0|vxjvg0,61,40,1|w9sjbz,61,40,1|w9sjc0,43,59,0|wgmwrz,43,59,0|wgmws0,61,40,1|wsvknz,61,40,1|wsvko0,43,59,0|wzczfz,43,59,0|wzczg0,61,40,1|xblnbz,61,40,1|xblnc0,43,59,0|xi323z,43,59,0|xi3240,61,40,1|xubpzz,61,40,1|xubq00,43,59,0|y0t4rz,43,59,0|y0t4s0,61,40,1|yd1snz,61,40,1|yd1so0,43,59,0|yjj7fz,43,59,0|yjj7g0,61,40,1|yvrvbz,61,40,1|yvrvc0,43,59,0|z29a3z,43,59,0|z29a40,61,40,1|zehxzz,61,40,1|zehy00,43,59,0|zlcbfz,43,59,0|zlcbg0,61,40,1|zxkzbz,61,40,1|zxkzc0,43,59,0|1042e3z,43,59,0|1042e40,61,40,1|10gb1zz,61,40,1|10gb200,43,59,0|10msgrz,43,59,0|10msgs0,61,40,1|10z14nz,61,40,1|10z14o0,43,59,0|115ijfz,43,59,0|115ijg0,61,40,1|11hr7bz,61,40,1|11hr7c0,43,59,0|11o8m3z,43,59,0|11o8m40,61,40,1|120h9zz,61,40,1|120ha00,43,59,0|126yorz,43,59,0|126yos0,61,40,1|12j7cnz,61,40,1|12j7co0,43,59,0|12q1q3z,43,59,0|12q1q40,61,40,1|132adzz,61,40,1|132ae00,43,59,0|138rsrz,43,59,0|138rss0,61,40,1|13l0gnz,61,40,1|13l0go0,43,59,0|13rhvfz,43,59,0|13rhvg0,61,40,1|143qjbz,61,40,1|143qjc0,43,59,0|14a7y3z,43,59,0|14a7y40,61,40,1|14mglzz,61,40,1|14mgm00,43,59,0|14sy0rz,43,59,0|14sy0s0,61,40,1|1556onz,61,40,1|1556oo0,43,59,0|15c123z,43,59,0|15c1240,61,40,1|15o9pzz,61,40,1|15o9q00,43,59,0|15ur4rz,43,59,0|15ur4s0,61,40,1|166zsnz,61,40,1|166zso0,43,59,0|16dh7fz,43,59,0|16dh7g0,61,40,1|16ppvbz,61,40,1|16ppvc0,43,59,0|16w7a3z,43,59,0|16w7a40,61,40,1|178fxzz,61,40,1|178fy00,43,59,0|17excrz,43,59,0|17excs0,61,40,1|17r60nz,61,40,1|17r60o0,43,59,0|17xnffz,43,59,0|17xnfg0,61,40,1|189w3bz,61,40,1|189w3c0,43,59,0|18gqgrz,43,59,0|18gqgs0,61,40,1|18sz4nz,61,40,1|18sz4o0,43,59,0|18zgjfz,43,59,0|18zgjg0,61,40,1|19bp7bz,61,40,1|19bp7c0,43,59,0|19i6m3z,43,59,0|19i6m40,61,40,1|19uf9zz,61,40,1|19ufa00,43,59,0|1a0worz,43,59,0|1a0wos0,61,40,1|1ad5cnz,61,40,1|1ad5co0,43,59,0|1ajmrfz,43,59,0|1ajmrg0,61,40,1|1avvfbz,61,40,1|1avvfc0,43,59,0|1b2psrz,43,59,0|1b2pss0,61,40,1|1beygnz,61,40,1|1beygo0,43,59,0|1blfvfz,43,59,0|1blfvg0,61,40,1|1bxojbz,61,40,1|1bxojc0,43,59,0|1c45y3z,43,59,0|1c45y40,61,40,1|1cgelzz,61,40,1|1cgem00,43,59,0|1cmw0rz,43,59,0|1cmw0s0,61,40,1|1cz4onz,61,40,1|1cz4oo0,43,59,0|1d5m3fz,43,59,0|1d5m3g0,61,40,1|1dhurbz,61,40,1|1dhurc0,43,59,0|1doc63z,43,59,0|1doc640,61,40,1|1e0ktzz,61,40,1|1e0ku00,43,59,0|1e7f7fz,43,59,0|1e7f7g0,61,40,1|1ejnvbz,61,40,1|1ejnvc0,43,59,0|1eq5a3z,43,59,0|1eq5a40,61,40,1|1f2dxzz,61,40,1|1f2dy00,43,59,0|1f8vcrz,43,59,0|1f8vcs0,61,40,1|1fl40nz,61,40,1|1fl40o0,43,59,0|1frlffz,43,59,0|1frlfg0,61,40,1|1g3u3bz,61,40,1|1g3u3c0,43,59,0|1gabi3z,43,59,0|1gabi40,61,40,1|1gmk5zz,61,40,1|1gmk600,43,59,0|1gt1krz,43,59,0|1gt1ks0,61,40,1|1h5a8nz,61,40,1|1h5a8o0,43,59,0|1hc4m3z,43,59,0|1hc4m40,61,40,1|1hod9zz,61,40,1|1hoda00,43,59,0|1huuorz,43,59,0|1huuos0,61,40,1|1i73cnz,61,40,1|1i73co0,43,59,0|1idkrfz,43,59,0|1idkrg0,61,40,1|1iptfbz,61,40,1|1iptfc0,43,59,0|1iwau3z,43,59,0|1iwau40,61,40,1|1j8jhzz,61,40,1|1j8ji00,43,59,0|1jf0wrz,43,59,0|1jf0ws0,61,40,1|1jr9knz,61,40,1|1jr9ko0,43,59,0|1jy3y3z,43,59,0|1jy3y40,61,40,1|1kaclzz,61,40,1|1kacm00,43,59,0|1kgu0rz,43,59,0|1kgu0s0,61,40,1|1kt2onz,61,40,1|1kt2oo0,43,59,0|1kzk3fz,43,59,0|1kzk3g0,61,40,1|1lbsrbz,61,40,1|1lbsrc0,43,59,0|1lia63z,43,59,0|1lia640,61,40,1|1luitzz,61,40,1|1luiu00,43,59,0|1m108rz,43,59,0|1m108s0,61,40,1|1md8wnz,61,40,1|1md8wo0,43,59,0|1mjqbfz,43,59,0|1mjqbg0,61,40,1|1mvyzbz,61,40,1|1mvyzc0,43,59,0|1n2tcrz,43,59,0|1n2tcs0,61,40,1|1nf20nz,61,40,1|1nf20o0,43,59,0|1nljffz,43,59,0|1nljfg0,61,40,1|1nxs3bz,61,40,1|1nxs3c0,43,59,0|1o49i3z,43,59,0|1o49i40,61,40,1|1ogi5zz,61,40,1|1ogi600,43,59,0|1omzkrz,43,59,0|1omzks0,61,40,1|1oz88nz,61,40,1|1oz88o0,43,59,0|1p5pnfz,43,59,0|1p5png0,61,40,1|1phybbz,61,40,1|1phybc0,43,59,0|1posorz,43,59,0|1posos0,61,40,1|1q11cnz,61,40,1|1q11co0,43,59,0|1q7irfz,43,59,0|1q7irg0,61,40,1|1qjrfbz,61,40,1|1qjrfc0,43,59,0|1qq8u3z,43,59,0|1qq8u40,61,40,1|1r2hhzz,61,40,1|1r2hi00,43,59,0|1r8ywrz,43,59,0|1r8yws0,61,40,1|1rl7knz,61,40,1|1rl7ko0,43,59,0|1rrozfz,43,59,0|1rrozg0,61,40,1|1s3xnbz,61,40,1|1s3xnc0,43,59,0|1saf23z,43,59,0|1saf240,61,40,1|1smnpzz,61,40,1|1smnq00,43,59,0|1sti3fz,43,59,0|1sti3g0,61,40,1|1t5qrbz,61,40,1|1t5qrc0,43,59,0|1tc863z,43,59,0|1tc8640,61,40,1|1togtzz,61,40,1|1togu00,43,59,0|1tuy8rz,43,59,0|1tuy8s0,61,40,1|1u76wnz,61,40,1|1u76wo0,43,59,0|1udobfz,43,59,0|1udobg0,61,40,1|1upwzbz,61,40,1|1upwzc0,43,59,0|1uwee3z,43,59,0|1uwee40,61,40,1|1v8n1zz,61,40,1|1v8n200,43,59,0|1vf4grz,43,59,0|1vf4gs0,61,40,1|1vrd4nz,61,40,1|1vrd4o0,43,59,0|NaN,43,59,0\",\"America/Dominica|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/Edmonton|,0,88,0|-x1yazl,0,88,0|-x1yazk,44,62,0|-qzosc1,44,62,0|-qzosc0,47,63,1|-qplwg1,47,63,1|-qplwg0,44,62,0|-qgypo1,44,62,0|-qgypo0,47,63,1|-qepb41,47,63,1|-qepb40,44,62,0|-pxipo1,44,62,0|-pxipo0,47,63,1|-pnssg1,47,63,1|-pnssg0,44,62,0|-pesn01,44,62,0|-pesn00,47,63,1|-p6vj41,47,63,1|-p6vj40,44,62,0|-ovplo1,44,62,0|-ovplo0,47,63,1|-oo5gg1,47,63,1|-oo5gg0,44,62,0|-oczj01,44,62,0|-oczj00,47,63,1|-o52f41,47,63,1|-o52f40,44,62,0|-ek1z01,44,62,0|-ek1z00,57,63,1|-cq2tg1,57,63,1|-cq2tg0,58,63,1|-cnoxs1,58,63,1|-cnoxs0,44,62,0|-bu5wc1,44,62,0|-bu5wc0,47,63,1|-bm8sg1,47,63,1|-bm8sg0,44,62,0|17qrnz,44,62,0|17qro0,47,63,1|1h3q7z,47,63,1|1h3q80,44,62,0|1qgubz,44,62,0|1qguc0,47,63,1|1ztsvz,47,63,1|1ztsw0,44,62,0|296wzz,44,62,0|296x00,47,63,1|2ijvjz,47,63,1|2ijvk0,44,62,0|2rwznz,44,62,0|2rwzo0,47,63,1|319y7z,47,63,1|319y80,44,62,0|3an2bz,44,62,0|3an2c0,47,63,1|3kczjz,47,63,1|3kczk0,44,62,0|3td4zz,44,62,0|3td500,47,63,1|43327z,47,63,1|433280,44,62,0|4cg6bz,44,62,0|4cg6c0,47,63,1|4lt4vz,47,63,1|4lt4w0,44,62,0|4v68zz,44,62,0|4v6900,47,63,1|54j7jz,47,63,1|54j7k0,44,62,0|5dwbnz,44,62,0|5dwbo0,47,63,1|5n9a7z,47,63,1|5n9a80,44,62,0|5wmebz,44,62,0|5wmec0,47,63,1|65zcvz,47,63,1|65zcw0,44,62,0|6fcgzz,44,62,0|6fch00,47,63,1|6p2e7z,47,63,1|6p2e80,44,62,0|6y2jnz,44,62,0|6y2jo0,47,63,1|77sgvz,47,63,1|77sgw0,44,62,0|7h5kzz,44,62,0|7h5l00,47,63,1|7qijjz,47,63,1|7qijk0,44,62,0|7zvnnz,44,62,0|7zvno0,47,63,1|898m7z,47,63,1|898m80,44,62,0|8ilqbz,44,62,0|8ilqc0,47,63,1|8ryovz,47,63,1|8ryow0,44,62,0|908wzz,44,62,0|908x00,47,63,1|9aorjz,47,63,1|9aork0,44,62,0|9iyznz,44,62,0|9iyzo0,47,63,1|9trsvz,47,63,1|9trsw0,44,62,0|a1p2bz,44,62,0|a1p2c0,47,63,1|achvjz,47,63,1|achvk0,44,62,0|akf4zz,44,62,0|akf500,47,63,1|av7y7z,47,63,1|av7y80,44,62,0|b3i6bz,44,62,0|b3i6c0,47,63,1|bdy0vz,47,63,1|bdy0w0,44,62,0|bm88zz,44,62,0|bm8900,47,63,1|bwo3jz,47,63,1|bwo3k0,44,62,0|c4ybnz,44,62,0|c4ybo0,47,63,1|cfr4vz,47,63,1|cfr4w0,44,62,0|cnoebz,44,62,0|cnoec0,47,63,1|cyh7jz,47,63,1|cyh7k0,44,62,0|d6egzz,44,62,0|d6eh00,47,63,1|dh7a7z,47,63,1|dh7a80,44,62,0|dphibz,44,62,0|dphic0,47,63,1|dzxcvz,47,63,1|dzxcw0,44,62,0|e87kzz,44,62,0|e87l00,47,63,1|einfjz,47,63,1|einfk0,44,62,0|eqxnnz,44,62,0|eqxno0,47,63,1|f1di7z,47,63,1|f1di80,44,62,0|f9nqbz,44,62,0|f9nqc0,47,63,1|fkgjjz,47,63,1|fkgjk0,44,62,0|fsdszz,44,62,0|fsdt00,47,63,1|g36m7z,47,63,1|g36m80,44,62,0|gb3vnz,44,62,0|gb3vo0,47,63,1|glwovz,47,63,1|glwow0,44,62,0|gu6wzz,44,62,0|gu6x00,47,63,1|h4mrjz,47,63,1|h4mrk0,44,62,0|hcwznz,44,62,0|hcwzo0,47,63,1|hncu7z,47,63,1|hncu80,44,62,0|hvn2bz,44,62,0|hvn2c0,47,63,1|i6fvjz,47,63,1|i6fvk0,44,62,0|ied4zz,44,62,0|ied500,47,63,1|ip5y7z,47,63,1|ip5y80,44,62,0|ix37nz,44,62,0|ix37o0,47,63,1|j7w0vz,47,63,1|j7w0w0,44,62,0|jeqebz,44,62,0|jeqec0,47,63,1|jqz27z,47,63,1|jqz280,44,62,0|jxggzz,44,62,0|jxgh00,47,63,1|k9p4vz,47,63,1|k9p4w0,44,62,0|kg6jnz,44,62,0|kg6jo0,47,63,1|ksf7jz,47,63,1|ksf7k0,44,62,0|kz9kzz,44,62,0|kz9l00,47,63,1|lbi8vz,47,63,1|lbi8w0,44,62,0|lhznnz,44,62,0|lhzno0,47,63,1|lu8bjz,47,63,1|lu8bk0,44,62,0|m0pqbz,44,62,0|m0pqc0,47,63,1|mcye7z,47,63,1|mcye80,44,62,0|mjfszz,44,62,0|mjft00,47,63,1|mvogvz,47,63,1|mvogw0,44,62,0|n25vnz,44,62,0|n25vo0,47,63,1|neejjz,47,63,1|neejk0,44,62,0|nkvybz,44,62,0|nkvyc0,47,63,1|nx4m7z,47,63,1|nx4m80,44,62,0|o3yznz,44,62,0|o3yzo0,47,63,1|og7njz,47,63,1|og7nk0,44,62,0|omp2bz,44,62,0|omp2c0,47,63,1|oyxq7z,47,63,1|oyxq80,44,62,0|p5f4zz,44,62,0|p5f500,47,63,1|phnsvz,47,63,1|phnsw0,44,62,0|po57nz,44,62,0|po57o0,47,63,1|q0dvjz,47,63,1|q0dvk0,44,62,0|q6vabz,44,62,0|q6vac0,47,63,1|qj3y7z,47,63,1|qj3y80,44,62,0|qpybnz,44,62,0|qpybo0,47,63,1|r26zjz,47,63,1|r26zk0,44,62,0|r8oebz,44,62,0|r8oec0,47,63,1|rkx27z,47,63,1|rkx280,44,62,0|rregzz,44,62,0|rreh00,47,63,1|s3n4vz,47,63,1|s3n4w0,44,62,0|sa4jnz,44,62,0|sa4jo0,47,63,1|smd7jz,47,63,1|smd7k0,44,62,0|ssumbz,44,62,0|ssumc0,47,63,1|t53a7z,47,63,1|t53a80,44,62,0|tbkozz,44,62,0|tbkp00,47,63,1|tntcvz,47,63,1|tntcw0,44,62,0|tunqbz,44,62,0|tunqc0,47,63,1|u6we7z,47,63,1|u6we80,44,62,0|uddszz,44,62,0|uddt00,47,63,1|upmgvz,47,63,1|upmgw0,44,62,0|uw3vnz,44,62,0|uw3vo0,47,63,1|v8cjjz,47,63,1|v8cjk0,44,62,0|vetybz,44,62,0|vetyc0,47,63,1|vr2m7z,47,63,1|vr2m80,44,62,0|vxk0zz,44,62,0|vxk100,47,63,1|w9sovz,47,63,1|w9sow0,44,62,0|wgn2bz,44,62,0|wgn2c0,47,63,1|wsvq7z,47,63,1|wsvq80,44,62,0|wzd4zz,44,62,0|wzd500,47,63,1|xblsvz,47,63,1|xblsw0,44,62,0|xi37nz,44,62,0|xi37o0,47,63,1|xubvjz,47,63,1|xubvk0,44,62,0|y0tabz,44,62,0|y0tac0,47,63,1|yd1y7z,47,63,1|yd1y80,44,62,0|yjjczz,44,62,0|yjjd00,47,63,1|yvs0vz,47,63,1|yvs0w0,44,62,0|z29fnz,44,62,0|z29fo0,47,63,1|zei3jz,47,63,1|zei3k0,44,62,0|zlcgzz,44,62,0|zlch00,47,63,1|zxl4vz,47,63,1|zxl4w0,44,62,0|1042jnz,44,62,0|1042jo0,47,63,1|10gb7jz,47,63,1|10gb7k0,44,62,0|10msmbz,44,62,0|10msmc0,47,63,1|10z1a7z,47,63,1|10z1a80,44,62,0|115iozz,44,62,0|115ip00,47,63,1|11hrcvz,47,63,1|11hrcw0,44,62,0|11o8rnz,44,62,0|11o8ro0,47,63,1|120hfjz,47,63,1|120hfk0,44,62,0|126yubz,44,62,0|126yuc0,47,63,1|12j7i7z,47,63,1|12j7i80,44,62,0|12q1vnz,44,62,0|12q1vo0,47,63,1|132ajjz,47,63,1|132ajk0,44,62,0|138rybz,44,62,0|138ryc0,47,63,1|13l0m7z,47,63,1|13l0m80,44,62,0|13ri0zz,44,62,0|13ri100,47,63,1|143qovz,47,63,1|143qow0,44,62,0|14a83nz,44,62,0|14a83o0,47,63,1|14mgrjz,47,63,1|14mgrk0,44,62,0|14sy6bz,44,62,0|14sy6c0,47,63,1|1556u7z,47,63,1|1556u80,44,62,0|15c17nz,44,62,0|15c17o0,47,63,1|15o9vjz,47,63,1|15o9vk0,44,62,0|15urabz,44,62,0|15urac0,47,63,1|166zy7z,47,63,1|166zy80,44,62,0|16dhczz,44,62,0|16dhd00,47,63,1|16pq0vz,47,63,1|16pq0w0,44,62,0|16w7fnz,44,62,0|16w7fo0,47,63,1|178g3jz,47,63,1|178g3k0,44,62,0|17exibz,44,62,0|17exic0,47,63,1|17r667z,47,63,1|17r6680,44,62,0|17xnkzz,44,62,0|17xnl00,47,63,1|189w8vz,47,63,1|189w8w0,44,62,0|18gqmbz,44,62,0|18gqmc0,47,63,1|18sza7z,47,63,1|18sza80,44,62,0|18zgozz,44,62,0|18zgp00,47,63,1|19bpcvz,47,63,1|19bpcw0,44,62,0|19i6rnz,44,62,0|19i6ro0,47,63,1|19uffjz,47,63,1|19uffk0,44,62,0|1a0wubz,44,62,0|1a0wuc0,47,63,1|1ad5i7z,47,63,1|1ad5i80,44,62,0|1ajmwzz,44,62,0|1ajmx00,47,63,1|1avvkvz,47,63,1|1avvkw0,44,62,0|1b2pybz,44,62,0|1b2pyc0,47,63,1|1beym7z,47,63,1|1beym80,44,62,0|1blg0zz,44,62,0|1blg100,47,63,1|1bxoovz,47,63,1|1bxoow0,44,62,0|1c463nz,44,62,0|1c463o0,47,63,1|1cgerjz,47,63,1|1cgerk0,44,62,0|1cmw6bz,44,62,0|1cmw6c0,47,63,1|1cz4u7z,47,63,1|1cz4u80,44,62,0|1d5m8zz,44,62,0|1d5m900,47,63,1|1dhuwvz,47,63,1|1dhuww0,44,62,0|1docbnz,44,62,0|1docbo0,47,63,1|1e0kzjz,47,63,1|1e0kzk0,44,62,0|1e7fczz,44,62,0|1e7fd00,47,63,1|1ejo0vz,47,63,1|1ejo0w0,44,62,0|1eq5fnz,44,62,0|1eq5fo0,47,63,1|1f2e3jz,47,63,1|1f2e3k0,44,62,0|1f8vibz,44,62,0|1f8vic0,47,63,1|1fl467z,47,63,1|1fl4680,44,62,0|1frlkzz,44,62,0|1frll00,47,63,1|1g3u8vz,47,63,1|1g3u8w0,44,62,0|1gabnnz,44,62,0|1gabno0,47,63,1|1gmkbjz,47,63,1|1gmkbk0,44,62,0|1gt1qbz,44,62,0|1gt1qc0,47,63,1|1h5ae7z,47,63,1|1h5ae80,44,62,0|1hc4rnz,44,62,0|1hc4ro0,47,63,1|1hodfjz,47,63,1|1hodfk0,44,62,0|1huuubz,44,62,0|1huuuc0,47,63,1|1i73i7z,47,63,1|1i73i80,44,62,0|1idkwzz,44,62,0|1idkx00,47,63,1|1iptkvz,47,63,1|1iptkw0,44,62,0|1iwaznz,44,62,0|1iwazo0,47,63,1|1j8jnjz,47,63,1|1j8jnk0,44,62,0|1jf12bz,44,62,0|1jf12c0,47,63,1|1jr9q7z,47,63,1|1jr9q80,44,62,0|1jy43nz,44,62,0|1jy43o0,47,63,1|1kacrjz,47,63,1|1kacrk0,44,62,0|1kgu6bz,44,62,0|1kgu6c0,47,63,1|1kt2u7z,47,63,1|1kt2u80,44,62,0|1kzk8zz,44,62,0|1kzk900,47,63,1|1lbswvz,47,63,1|1lbsww0,44,62,0|1liabnz,44,62,0|1liabo0,47,63,1|1luizjz,47,63,1|1luizk0,44,62,0|1m10ebz,44,62,0|1m10ec0,47,63,1|1md927z,47,63,1|1md9280,44,62,0|1mjqgzz,44,62,0|1mjqh00,47,63,1|1mvz4vz,47,63,1|1mvz4w0,44,62,0|1n2tibz,44,62,0|1n2tic0,47,63,1|1nf267z,47,63,1|1nf2680,44,62,0|1nljkzz,44,62,0|1nljl00,47,63,1|1nxs8vz,47,63,1|1nxs8w0,44,62,0|1o49nnz,44,62,0|1o49no0,47,63,1|1ogibjz,47,63,1|1ogibk0,44,62,0|1omzqbz,44,62,0|1omzqc0,47,63,1|1oz8e7z,47,63,1|1oz8e80,44,62,0|1p5pszz,44,62,0|1p5pt00,47,63,1|1phygvz,47,63,1|1phygw0,44,62,0|1posubz,44,62,0|1posuc0,47,63,1|1q11i7z,47,63,1|1q11i80,44,62,0|1q7iwzz,44,62,0|1q7ix00,47,63,1|1qjrkvz,47,63,1|1qjrkw0,44,62,0|1qq8znz,44,62,0|1qq8zo0,47,63,1|1r2hnjz,47,63,1|1r2hnk0,44,62,0|1r8z2bz,44,62,0|1r8z2c0,47,63,1|1rl7q7z,47,63,1|1rl7q80,44,62,0|1rrp4zz,44,62,0|1rrp500,47,63,1|1s3xsvz,47,63,1|1s3xsw0,44,62,0|1saf7nz,44,62,0|1saf7o0,47,63,1|1smnvjz,47,63,1|1smnvk0,44,62,0|1sti8zz,44,62,0|1sti900,47,63,1|1t5qwvz,47,63,1|1t5qww0,44,62,0|1tc8bnz,44,62,0|1tc8bo0,47,63,1|1togzjz,47,63,1|1togzk0,44,62,0|1tuyebz,44,62,0|1tuyec0,47,63,1|1u7727z,47,63,1|1u77280,44,62,0|1udogzz,44,62,0|1udoh00,47,63,1|1upx4vz,47,63,1|1upx4w0,44,62,0|1uwejnz,44,62,0|1uwejo0,47,63,1|1v8n7jz,47,63,1|1v8n7k0,44,62,0|1vf4mbz,44,62,0|1vf4mc0,47,63,1|1vrda7z,47,63,1|1vrda80,44,62,0|NaN,44,62,0\",\"America/Eirunepe|,0,89,0|-t85f29,0,89,0|-t85f28,55,59,0|-jyl4w1,55,59,0|-jyl4w0,41,40,1|-jpavk1,41,40,1|-jpavk0,55,59,0|-jfs7g1,55,59,0|-jfs7g0,41,40,1|-j6iy81,41,40,1|-j6iy80,55,59,0|-ahcss1,55,59,0|-ahcss0,41,40,1|-aacy41,41,40,1|-aacy40,55,59,0|-9ykvg1,55,59,0|-9ykvg0,41,40,1|-9scvk1,41,40,1|-9scvk0,55,59,0|-9fsy41,55,59,0|-9fsy40,41,40,1|-99j3k1,41,40,1|-99j3k0,55,59,0|-8wz641,55,59,0|-8wz640,41,40,1|-8sckw1,41,40,1|-8sckw0,55,59,0|-35xgs1,55,59,0|-35xgs0,41,40,1|-31nu81,41,40,1|-31nu80,55,59,0|-2kdjg1,55,59,0|-2kdjg0,41,40,1|-2hccw1,41,40,1|-2hccw0,55,59,0|-24qks1,55,59,0|-24qks0,41,40,1|-203zk1,41,40,1|-203zk0,55,59,0|-1ni7g1,55,59,0|-1ni7g0,41,40,1|-1hc281,41,40,1|-1hc280,55,59,0|-14qa41,55,59,0|-14qa40,41,40,1|-yia81,41,40,1|-yia80,55,59,0|89jhvz,55,59,0|89jhw0,41,40,1|8gdprz,41,40,1|8gdps0,55,59,0|8rwlvz,55,59,0|8rwlw0,41,40,1|8xnxrz,41,40,1|8xnxs0,55,59,0|9aoj7z,55,59,0|9aoj80,41,40,1|9g2wfz,41,40,1|9g2wg0,55,59,0|cf0z7z,55,59,0|cf0z80,41,40,1|cli8fz,41,40,1|cli8g0,55,59,0|k2yb7z,55,59,0|k2yb80,41,40,0|mw14fz,41,40,0|mw14g0,55,59,0|NaN,55,59,0\",\"America/El_Salvador|,0,90,0|-pkm4td,0,90,0|-pkm4tc,45,63,0|91ojbz,45,63,0|91ojc0,48,59,1|998ojz,48,59,1|998ok0,45,63,0|9kelzz,45,63,0|9kem00,48,59,1|9ryr7z,48,59,1|9ryr80,45,63,0|NaN,45,63,0\",\"America/Fort_Nelson|,0,91,0|-18vrvy2,0,91,0|-18vrvy1,46,38,0|-qzopk1,46,38,0|-qzopk0,56,62,1|-qplto1,56,62,1|-qplto0,46,38,0|-ek1w81,46,38,0|-ek1w80,68,62,1|-cq2tg1,68,62,1|-cq2tg0,69,62,1|-cnov01,69,62,1|-cnov00,46,38,0|-bu5tk1,46,38,0|-bu5tk0,56,62,1|-bm8po1,56,62,1|-bm8po0,46,38,0|-bbfqw1,46,38,0|-bbfqw0,56,62,1|-b3in01,56,62,1|-b3in00,46,38,0|-aspo81,46,38,0|-aspo80,56,62,1|-akskc1,56,62,1|-akskc0,46,38,0|-a9mmw1,46,38,0|-a9mmw0,56,62,1|-a22ho1,56,62,1|-a22ho0,46,38,0|-9qwk81,46,38,0|-9qwk80,56,62,1|-9izgc1,56,62,1|-9izgc0,46,38,0|-986hk1,46,38,0|-986hk0,56,62,1|-909do1,56,62,1|-909do0,46,38,0|-8pgew1,46,38,0|-8pgew0,56,62,1|-8hjb01,56,62,1|-8hjb00,46,38,0|-86qc81,46,38,0|-86qc80,56,62,1|-7yt8c1,56,62,1|-7yt8c0,46,38,0|-7o09k1,46,38,0|-7o09k0,56,62,1|-7g35o1,56,62,1|-7g35o0,46,38,0|-74x881,46,38,0|-74x880,56,62,1|-6x04c1,56,62,1|-6x04c0,46,38,0|-6m75k1,46,38,0|-6m75k0,56,62,1|-6ea1o1,56,62,1|-6ea1o0,46,38,0|-63h2w1,46,38,0|-63h2w0,56,62,1|-5vjz01,56,62,1|-5vjz00,46,38,0|-5kr081,46,38,0|-5kr080,56,62,1|-5ctwc1,56,62,1|-5ctwc0,46,38,0|-520xk1,46,38,0|-520xk0,56,62,1|-4u3to1,56,62,1|-4u3to0,46,38,0|-4ixw81,46,38,0|-4ixw80,56,62,1|-4bdr01,56,62,1|-4bdr00,46,38,0|-407tk1,46,38,0|-407tk0,56,62,1|-3quv01,56,62,1|-3quv00,46,38,0|-3hhqw1,46,38,0|-3hhqw0,56,62,1|-384sc1,56,62,1|-384sc0,46,38,0|-2yro81,46,38,0|-2yro80,56,62,1|-2pepo1,56,62,1|-2pepo0,46,38,0|-2g1lk1,46,38,0|-2g1lk0,56,62,1|-26boc1,56,62,1|-26boc0,46,38,0|-1xbiw1,46,38,0|-1xbiw0,56,62,1|-1nllo1,56,62,1|-1nllo0,46,38,0|-1e8hk1,46,38,0|-1e8hk0,56,62,1|-14vj01,56,62,1|-14vj00,46,38,0|-view1,46,38,0|-view0,56,62,1|-m5gc1,56,62,1|-m5gc0,46,38,0|-csc81,46,38,0|-csc80,56,62,1|-3fdo1,56,62,1|-3fdo0,46,38,0|5xqfz,46,38,0|5xqg0,56,62,1|faozz,56,62,1|fap00,46,38,0|ont3z,46,38,0|ont40,56,62,1|ydqbz,56,62,1|ydqc0,46,38,0|17qufz,46,38,0|17qug0,56,62,1|1h3szz,56,62,1|1h3t00,46,38,0|1qgx3z,46,38,0|1qgx40,56,62,1|1ztvnz,56,62,1|1ztvo0,46,38,0|296zrz,46,38,0|296zs0,56,62,1|2ijybz,56,62,1|2ijyc0,46,38,0|2rx2fz,46,38,0|2rx2g0,56,62,1|31a0zz,56,62,1|31a100,46,38,0|3an53z,46,38,0|3an540,56,62,1|3kd2bz,56,62,1|3kd2c0,46,38,0|3td7rz,46,38,0|3td7s0,56,62,1|4334zz,56,62,1|433500,46,38,0|4cg93z,46,38,0|4cg940,56,62,1|4lt7nz,56,62,1|4lt7o0,46,38,0|4v6brz,46,38,0|4v6bs0,56,62,1|54jabz,56,62,1|54jac0,46,38,0|5dwefz,46,38,0|5dweg0,56,62,1|5n9czz,56,62,1|5n9d00,46,38,0|5wmh3z,46,38,0|5wmh40,56,62,1|65zfnz,56,62,1|65zfo0,46,38,0|6fcjrz,46,38,0|6fcjs0,56,62,1|6p2gzz,56,62,1|6p2h00,46,38,0|6y2mfz,46,38,0|6y2mg0,56,62,1|77sjnz,56,62,1|77sjo0,46,38,0|7h5nrz,46,38,0|7h5ns0,56,62,1|7qimbz,56,62,1|7qimc0,46,38,0|7zvqfz,46,38,0|7zvqg0,56,62,1|898ozz,56,62,1|898p00,46,38,0|8ilt3z,46,38,0|8ilt40,56,62,1|8ryrnz,56,62,1|8ryro0,46,38,0|908zrz,46,38,0|908zs0,56,62,1|9aoubz,56,62,1|9aouc0,46,38,0|9iz2fz,46,38,0|9iz2g0,56,62,1|9trvnz,56,62,1|9trvo0,46,38,0|a1p53z,46,38,0|a1p540,56,62,1|achybz,56,62,1|achyc0,46,38,0|akf7rz,46,38,0|akf7s0,56,62,1|av80zz,56,62,1|av8100,46,38,0|b3i93z,46,38,0|b3i940,56,62,1|bdy3nz,56,62,1|bdy3o0,46,38,0|bm8brz,46,38,0|bm8bs0,56,62,1|bwo6bz,56,62,1|bwo6c0,46,38,0|c4yefz,46,38,0|c4yeg0,56,62,1|cfr7nz,56,62,1|cfr7o0,46,38,0|cnoh3z,46,38,0|cnoh40,56,62,1|cyhabz,56,62,1|cyhac0,46,38,0|d6ejrz,46,38,0|d6ejs0,56,62,1|dh7czz,56,62,1|dh7d00,46,38,0|dphl3z,46,38,0|dphl40,56,62,1|dzxfnz,56,62,1|dzxfo0,46,38,0|e87nrz,46,38,0|e87ns0,56,62,1|einibz,56,62,1|einic0,46,38,0|eqxqfz,46,38,0|eqxqg0,56,62,1|f1dkzz,56,62,1|f1dl00,46,38,0|f9nt3z,46,38,0|f9nt40,56,62,1|fkgmbz,56,62,1|fkgmc0,46,38,0|fsdvrz,46,38,0|fsdvs0,56,62,1|g36ozz,56,62,1|g36p00,46,38,0|gb3yfz,46,38,0|gb3yg0,56,62,1|glwrnz,56,62,1|glwro0,46,38,0|gu6zrz,46,38,0|gu6zs0,56,62,1|h4mubz,56,62,1|h4muc0,46,38,0|hcx2fz,46,38,0|hcx2g0,56,62,1|hncwzz,56,62,1|hncx00,46,38,0|hvn53z,46,38,0|hvn540,56,62,1|i6fybz,56,62,1|i6fyc0,46,38,0|ied7rz,46,38,0|ied7s0,56,62,1|ip60zz,56,62,1|ip6100,46,38,0|ix3afz,46,38,0|ix3ag0,56,62,1|j7w3nz,56,62,1|j7w3o0,46,38,0|jeqh3z,46,38,0|jeqh40,56,62,1|jqz4zz,56,62,1|jqz500,46,38,0|jxgjrz,46,38,0|jxgjs0,56,62,1|k9p7nz,56,62,1|k9p7o0,46,38,0|kg6mfz,46,38,0|kg6mg0,56,62,1|ksfabz,56,62,1|ksfac0,46,38,0|kz9nrz,46,38,0|kz9ns0,56,62,1|lbibnz,56,62,1|lbibo0,46,38,0|lhzqfz,46,38,0|lhzqg0,56,62,1|lu8ebz,56,62,1|lu8ec0,46,38,0|m0pt3z,46,38,0|m0pt40,56,62,1|mcygzz,56,62,1|mcyh00,46,38,0|mjfvrz,46,38,0|mjfvs0,56,62,1|mvojnz,56,62,1|mvojo0,46,38,0|n25yfz,46,38,0|n25yg0,56,62,1|neembz,56,62,1|neemc0,46,38,0|nkw13z,46,38,0|nkw140,44,62,0|NaN,44,62,0\",\"America/Fortaleza|,0,92,0|-t85kvd,0,92,0|-t85kvc,38,41,0|-jylag1,38,41,0|-jylag0,39,43,1|-jpb141,39,43,1|-jpb140,38,41,0|-jfsd01,38,41,0|-jfsd00,39,43,1|-j6j3s1,39,43,1|-j6j3s0,38,41,0|-ahcyc1,38,41,0|-ahcyc0,39,43,1|-aad3o1,39,43,1|-aad3o0,38,41,0|-9yl101,38,41,0|-9yl100,39,43,1|-9sd141,39,43,1|-9sd140,38,41,0|-9ft3o1,38,41,0|-9ft3o0,39,43,1|-99j941,39,43,1|-99j940,38,41,0|-8wzbo1,38,41,0|-8wzbo0,39,43,1|-8scqg1,39,43,1|-8scqg0,38,41,0|-35xmc1,38,41,0|-35xmc0,39,43,1|-31nzs1,39,43,1|-31nzs0,38,41,0|-2kdp01,38,41,0|-2kdp00,39,43,1|-2hcig1,39,43,1|-2hcig0,38,41,0|-24qqc1,38,41,0|-24qqc0,39,43,1|-204541,39,43,1|-204540,38,41,0|-1nid01,38,41,0|-1nid00,39,43,1|-1hc7s1,39,43,1|-1hc7s0,38,41,0|-14qfo1,38,41,0|-14qfo0,39,43,1|-yifs1,39,43,1|-yifs0,38,41,0|89jcbz,38,41,0|89jcc0,39,43,1|8gdk7z,39,43,1|8gdk80,38,41,0|8rwgbz,38,41,0|8rwgc0,39,43,1|8xns7z,39,43,1|8xns80,38,41,0|9aodnz,38,41,0|9aodo0,39,43,1|9g2qvz,39,43,1|9g2qw0,38,41,0|9t1hnz,38,41,0|9t1ho0,39,43,1|9yfuvz,39,43,1|9yfuw0,38,41,0|abrkbz,38,41,0|abrkc0,39,43,1|ahvuvz,39,43,1|ahvuw0,38,41,0|fj0azz,38,41,0|fj0b00,39,43,1|fqkg7z,39,43,1|fqkg80,38,41,0|g23cbz,38,41,0|g23cc0,39,43,1|g2t6vz,39,43,1|g2t6w0,38,41,0|gl6dnz,38,41,0|gl6do0,39,43,1|grnmvz,39,43,1|grnmw0,38,41,0|NaN,38,41,0\",\"America/Glace_Bay|,0,93,0|-z94kwd,0,93,0|-z94kwc,31,40,0|-qzp0o1,31,40,0|-qzp0o0,49,41,1|-qpm4s1,49,41,1|-qpm4s0,31,40,0|-ek27c1,31,40,0|-ek27c0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|-8pgq01,31,40,0|-8pgq00,49,41,1|-8hjm41,49,41,1|-8hjm40,31,40,0|17qjbz,31,40,0|17qjc0,49,41,1|1h3hvz,49,41,1|1h3hw0,31,40,0|1qglzz,31,40,0|1qgm00,49,41,1|1ztkjz,49,41,1|1ztkk0,31,40,0|296onz,31,40,0|296oo0,49,41,1|2ijn7z,49,41,1|2ijn80,31,40,0|2rwrbz,31,40,0|2rwrc0,49,41,1|319pvz,49,41,1|319pw0,31,40,0|3amtzz,31,40,0|3amu00,49,41,1|3kcr7z,49,41,1|3kcr80,31,40,0|3tcwnz,31,40,0|3tcwo0,49,41,1|432tvz,49,41,1|432tw0,31,40,0|4cfxzz,31,40,0|4cfy00,49,41,1|4lswjz,49,41,1|4lswk0,31,40,0|4v60nz,31,40,0|4v60o0,49,41,1|54iz7z,49,41,1|54iz80,31,40,0|5dw3bz,31,40,0|5dw3c0,49,41,1|5n91vz,49,41,1|5n91w0,31,40,0|5wm5zz,31,40,0|5wm600,49,41,1|65z4jz,49,41,1|65z4k0,31,40,0|6fc8nz,31,40,0|6fc8o0,49,41,1|6p25vz,49,41,1|6p25w0,31,40,0|6y2bbz,31,40,0|6y2bc0,49,41,1|77s8jz,49,41,1|77s8k0,31,40,0|7h5cnz,31,40,0|7h5co0,49,41,1|7qib7z,49,41,1|7qib80,31,40,0|7zvfbz,31,40,0|7zvfc0,49,41,1|898dvz,49,41,1|898dw0,31,40,0|8ilhzz,31,40,0|8ili00,49,41,1|8rygjz,49,41,1|8rygk0,31,40,0|908onz,31,40,0|908oo0,49,41,1|9aoj7z,49,41,1|9aoj80,31,40,0|9iyrbz,31,40,0|9iyrc0,49,41,1|9trkjz,49,41,1|9trkk0,31,40,0|a1otzz,31,40,0|a1ou00,49,41,1|achn7z,49,41,1|achn80,31,40,0|akewnz,31,40,0|akewo0,49,41,1|av7pvz,49,41,1|av7pw0,31,40,0|b3hxzz,31,40,0|b3hy00,49,41,1|bdxsjz,49,41,1|bdxsk0,31,40,0|bm80nz,31,40,0|bm80o0,49,41,1|bwnv7z,49,41,1|bwnv80,31,40,0|c4y3bz,31,40,0|c4y3c0,49,41,1|cfqwjz,49,41,1|cfqwk0,31,40,0|cno5zz,31,40,0|cno600,49,41,1|cygz7z,49,41,1|cygz80,31,40,0|d6e8nz,31,40,0|d6e8o0,49,41,1|dh71vz,49,41,1|dh71w0,31,40,0|dph9zz,31,40,0|dpha00,49,41,1|dzx4jz,49,41,1|dzx4k0,31,40,0|e87cnz,31,40,0|e87co0,49,41,1|ein77z,49,41,1|ein780,31,40,0|eqxfbz,31,40,0|eqxfc0,49,41,1|f1d9vz,49,41,1|f1d9w0,31,40,0|f9nhzz,31,40,0|f9ni00,49,41,1|fkgb7z,49,41,1|fkgb80,31,40,0|fsdknz,31,40,0|fsdko0,49,41,1|g36dvz,49,41,1|g36dw0,31,40,0|gb3nbz,31,40,0|gb3nc0,49,41,1|glwgjz,49,41,1|glwgk0,31,40,0|gu6onz,31,40,0|gu6oo0,49,41,1|h4mj7z,49,41,1|h4mj80,31,40,0|hcwrbz,31,40,0|hcwrc0,49,41,1|hnclvz,49,41,1|hnclw0,31,40,0|hvmtzz,31,40,0|hvmu00,49,41,1|i6fn7z,49,41,1|i6fn80,31,40,0|iecwnz,31,40,0|iecwo0,49,41,1|ip5pvz,49,41,1|ip5pw0,31,40,0|ix2zbz,31,40,0|ix2zc0,49,41,1|j7vsjz,49,41,1|j7vsk0,31,40,0|jeq5zz,31,40,0|jeq600,49,41,1|jqytvz,49,41,1|jqytw0,31,40,0|jxg8nz,31,40,0|jxg8o0,49,41,1|k9owjz,49,41,1|k9owk0,31,40,0|kg6bbz,31,40,0|kg6bc0,49,41,1|ksez7z,49,41,1|ksez80,31,40,0|kz9cnz,31,40,0|kz9co0,49,41,1|lbi0jz,49,41,1|lbi0k0,31,40,0|lhzfbz,31,40,0|lhzfc0,49,41,1|lu837z,49,41,1|lu8380,31,40,0|m0phzz,31,40,0|m0pi00,49,41,1|mcy5vz,49,41,1|mcy5w0,31,40,0|mjfknz,31,40,0|mjfko0,49,41,1|mvo8jz,49,41,1|mvo8k0,31,40,0|n25nbz,31,40,0|n25nc0,49,41,1|neeb7z,49,41,1|neeb80,31,40,0|nkvpzz,31,40,0|nkvq00,49,41,1|nx4dvz,49,41,1|nx4dw0,31,40,0|o3yrbz,31,40,0|o3yrc0,49,41,1|og7f7z,49,41,1|og7f80,31,40,0|omotzz,31,40,0|omou00,49,41,1|oyxhvz,49,41,1|oyxhw0,31,40,0|p5ewnz,31,40,0|p5ewo0,49,41,1|phnkjz,49,41,1|phnkk0,31,40,0|po4zbz,31,40,0|po4zc0,49,41,1|q0dn7z,49,41,1|q0dn80,31,40,0|q6v1zz,31,40,0|q6v200,49,41,1|qj3pvz,49,41,1|qj3pw0,31,40,0|qpy3bz,31,40,0|qpy3c0,49,41,1|r26r7z,49,41,1|r26r80,31,40,0|r8o5zz,31,40,0|r8o600,49,41,1|rkwtvz,49,41,1|rkwtw0,31,40,0|rre8nz,31,40,0|rre8o0,49,41,1|s3mwjz,49,41,1|s3mwk0,31,40,0|sa4bbz,31,40,0|sa4bc0,49,41,1|smcz7z,49,41,1|smcz80,31,40,0|ssudzz,31,40,0|ssue00,49,41,1|t531vz,49,41,1|t531w0,31,40,0|tbkgnz,31,40,0|tbkgo0,49,41,1|tnt4jz,49,41,1|tnt4k0,31,40,0|tunhzz,31,40,0|tuni00,49,41,1|u6w5vz,49,41,1|u6w5w0,31,40,0|uddknz,31,40,0|uddko0,49,41,1|upm8jz,49,41,1|upm8k0,31,40,0|uw3nbz,31,40,0|uw3nc0,49,41,1|v8cb7z,49,41,1|v8cb80,31,40,0|vetpzz,31,40,0|vetq00,49,41,1|vr2dvz,49,41,1|vr2dw0,31,40,0|vxjsnz,31,40,0|vxjso0,49,41,1|w9sgjz,49,41,1|w9sgk0,31,40,0|wgmtzz,31,40,0|wgmu00,49,41,1|wsvhvz,49,41,1|wsvhw0,31,40,0|wzcwnz,31,40,0|wzcwo0,49,41,1|xblkjz,49,41,1|xblkk0,31,40,0|xi2zbz,31,40,0|xi2zc0,49,41,1|xubn7z,49,41,1|xubn80,31,40,0|y0t1zz,31,40,0|y0t200,49,41,1|yd1pvz,49,41,1|yd1pw0,31,40,0|yjj4nz,31,40,0|yjj4o0,49,41,1|yvrsjz,49,41,1|yvrsk0,31,40,0|z297bz,31,40,0|z297c0,49,41,1|zehv7z,49,41,1|zehv80,31,40,0|zlc8nz,31,40,0|zlc8o0,49,41,1|zxkwjz,49,41,1|zxkwk0,31,40,0|1042bbz,31,40,0|1042bc0,49,41,1|10gaz7z,49,41,1|10gaz80,31,40,0|10msdzz,31,40,0|10mse00,49,41,1|10z11vz,49,41,1|10z11w0,31,40,0|115ignz,31,40,0|115igo0,49,41,1|11hr4jz,49,41,1|11hr4k0,31,40,0|11o8jbz,31,40,0|11o8jc0,49,41,1|120h77z,49,41,1|120h780,31,40,0|126ylzz,31,40,0|126ym00,49,41,1|12j79vz,49,41,1|12j79w0,31,40,0|12q1nbz,31,40,0|12q1nc0,49,41,1|132ab7z,49,41,1|132ab80,31,40,0|138rpzz,31,40,0|138rq00,49,41,1|13l0dvz,49,41,1|13l0dw0,31,40,0|13rhsnz,31,40,0|13rhso0,49,41,1|143qgjz,49,41,1|143qgk0,31,40,0|14a7vbz,31,40,0|14a7vc0,49,41,1|14mgj7z,49,41,1|14mgj80,31,40,0|14sxxzz,31,40,0|14sxy00,49,41,1|1556lvz,49,41,1|1556lw0,31,40,0|15c0zbz,31,40,0|15c0zc0,49,41,1|15o9n7z,49,41,1|15o9n80,31,40,0|15ur1zz,31,40,0|15ur200,49,41,1|166zpvz,49,41,1|166zpw0,31,40,0|16dh4nz,31,40,0|16dh4o0,49,41,1|16ppsjz,49,41,1|16ppsk0,31,40,0|16w77bz,31,40,0|16w77c0,49,41,1|178fv7z,49,41,1|178fv80,31,40,0|17ex9zz,31,40,0|17exa00,49,41,1|17r5xvz,49,41,1|17r5xw0,31,40,0|17xncnz,31,40,0|17xnco0,49,41,1|189w0jz,49,41,1|189w0k0,31,40,0|18gqdzz,31,40,0|18gqe00,49,41,1|18sz1vz,49,41,1|18sz1w0,31,40,0|18zggnz,31,40,0|18zggo0,49,41,1|19bp4jz,49,41,1|19bp4k0,31,40,0|19i6jbz,31,40,0|19i6jc0,49,41,1|19uf77z,49,41,1|19uf780,31,40,0|1a0wlzz,31,40,0|1a0wm00,49,41,1|1ad59vz,49,41,1|1ad59w0,31,40,0|1ajmonz,31,40,0|1ajmoo0,49,41,1|1avvcjz,49,41,1|1avvck0,31,40,0|1b2ppzz,31,40,0|1b2pq00,49,41,1|1beydvz,49,41,1|1beydw0,31,40,0|1blfsnz,31,40,0|1blfso0,49,41,1|1bxogjz,49,41,1|1bxogk0,31,40,0|1c45vbz,31,40,0|1c45vc0,49,41,1|1cgej7z,49,41,1|1cgej80,31,40,0|1cmvxzz,31,40,0|1cmvy00,49,41,1|1cz4lvz,49,41,1|1cz4lw0,31,40,0|1d5m0nz,31,40,0|1d5m0o0,49,41,1|1dhuojz,49,41,1|1dhuok0,31,40,0|1doc3bz,31,40,0|1doc3c0,49,41,1|1e0kr7z,49,41,1|1e0kr80,31,40,0|1e7f4nz,31,40,0|1e7f4o0,49,41,1|1ejnsjz,49,41,1|1ejnsk0,31,40,0|1eq57bz,31,40,0|1eq57c0,49,41,1|1f2dv7z,49,41,1|1f2dv80,31,40,0|1f8v9zz,31,40,0|1f8va00,49,41,1|1fl3xvz,49,41,1|1fl3xw0,31,40,0|1frlcnz,31,40,0|1frlco0,49,41,1|1g3u0jz,49,41,1|1g3u0k0,31,40,0|1gabfbz,31,40,0|1gabfc0,49,41,1|1gmk37z,49,41,1|1gmk380,31,40,0|1gt1hzz,31,40,0|1gt1i00,49,41,1|1h5a5vz,49,41,1|1h5a5w0,31,40,0|1hc4jbz,31,40,0|1hc4jc0,49,41,1|1hod77z,49,41,1|1hod780,31,40,0|1huulzz,31,40,0|1huum00,49,41,1|1i739vz,49,41,1|1i739w0,31,40,0|1idkonz,31,40,0|1idkoo0,49,41,1|1iptcjz,49,41,1|1iptck0,31,40,0|1iwarbz,31,40,0|1iwarc0,49,41,1|1j8jf7z,49,41,1|1j8jf80,31,40,0|1jf0tzz,31,40,0|1jf0u00,49,41,1|1jr9hvz,49,41,1|1jr9hw0,31,40,0|1jy3vbz,31,40,0|1jy3vc0,49,41,1|1kacj7z,49,41,1|1kacj80,31,40,0|1kgtxzz,31,40,0|1kgty00,49,41,1|1kt2lvz,49,41,1|1kt2lw0,31,40,0|1kzk0nz,31,40,0|1kzk0o0,49,41,1|1lbsojz,49,41,1|1lbsok0,31,40,0|1lia3bz,31,40,0|1lia3c0,49,41,1|1luir7z,49,41,1|1luir80,31,40,0|1m105zz,31,40,0|1m10600,49,41,1|1md8tvz,49,41,1|1md8tw0,31,40,0|1mjq8nz,31,40,0|1mjq8o0,49,41,1|1mvywjz,49,41,1|1mvywk0,31,40,0|1n2t9zz,31,40,0|1n2ta00,49,41,1|1nf1xvz,49,41,1|1nf1xw0,31,40,0|1nljcnz,31,40,0|1nljco0,49,41,1|1nxs0jz,49,41,1|1nxs0k0,31,40,0|1o49fbz,31,40,0|1o49fc0,49,41,1|1ogi37z,49,41,1|1ogi380,31,40,0|1omzhzz,31,40,0|1omzi00,49,41,1|1oz85vz,49,41,1|1oz85w0,31,40,0|1p5pknz,31,40,0|1p5pko0,49,41,1|1phy8jz,49,41,1|1phy8k0,31,40,0|1poslzz,31,40,0|1posm00,49,41,1|1q119vz,49,41,1|1q119w0,31,40,0|1q7ionz,31,40,0|1q7ioo0,49,41,1|1qjrcjz,49,41,1|1qjrck0,31,40,0|1qq8rbz,31,40,0|1qq8rc0,49,41,1|1r2hf7z,49,41,1|1r2hf80,31,40,0|1r8ytzz,31,40,0|1r8yu00,49,41,1|1rl7hvz,49,41,1|1rl7hw0,31,40,0|1rrownz,31,40,0|1rrowo0,49,41,1|1s3xkjz,49,41,1|1s3xkk0,31,40,0|1saezbz,31,40,0|1saezc0,49,41,1|1smnn7z,49,41,1|1smnn80,31,40,0|1sti0nz,31,40,0|1sti0o0,49,41,1|1t5qojz,49,41,1|1t5qok0,31,40,0|1tc83bz,31,40,0|1tc83c0,49,41,1|1togr7z,49,41,1|1togr80,31,40,0|1tuy5zz,31,40,0|1tuy600,49,41,1|1u76tvz,49,41,1|1u76tw0,31,40,0|1udo8nz,31,40,0|1udo8o0,49,41,1|1upwwjz,49,41,1|1upwwk0,31,40,0|1uwebbz,31,40,0|1uwebc0,49,41,1|1v8mz7z,49,41,1|1v8mz80,31,40,0|1vf4dzz,31,40,0|1vf4e00,49,41,1|1vrd1vz,49,41,1|1vrd1w0,31,40,0|NaN,31,40,0\",\"America/Goose_Bay|,0,94,0|-18vs7h9,0,94,0|-18vs7h8,23,95,0|-qzp20l,23,95,0|-qzp20k,72,96,1|-qpm64l,72,96,1|-qpm64k,23,95,0|-i52u8l,23,95,0|-i52u8k,23,65,0|-hk3aa1,23,65,0|-hk3aa0,72,97,1|-hcj521,72,97,1|-hcj520,23,65,0|-h1d7m1,23,65,0|-h1d7m0,72,97,1|-gtt2e1,72,97,1|-gtt2e0,23,65,0|-gin4y1,23,65,0|-gin4y0,72,97,1|-gb2zq1,72,97,1|-gb2zq0,23,65,0|-fzk3m1,23,65,0|-fzk3m0,72,97,1|-fscx21,72,97,1|-fscx20,23,65,0|-fgu0y1,23,65,0|-fgu0y0,72,97,1|-f99vq1,72,97,1|-f99vq0,23,65,0|-ey3ya1,23,65,0|-ey3ya0,72,97,1|-eqjt21,72,97,1|-eqjt20,23,65,0|-efdvm1,23,65,0|-efdvm0,24,97,1|-cq2tg1,24,97,1|-cq2tg0,25,97,1|-cnp7i1,25,97,1|-cnp7i0,23,65,0|-cc6be1,23,65,0|-cc6be0,72,97,1|-c4m661,72,97,1|-c4m660,23,65,0|-btg8q1,23,65,0|-btg8q0,72,97,1|-blw3i1,72,97,1|-blw3i0,23,65,0|-baq621,23,65,0|-baq620,72,97,1|-b360u1,72,97,1|-b360u0,23,65,0|-as03e1,23,65,0|-as03e0,72,97,1|-akfy61,72,97,1|-akfy60,23,65,0|-a8x221,23,65,0|-a8x220,72,97,1|-a1cwu1,72,97,1|-a1cwu0,23,65,0|-9qwwq1,23,65,0|-9qwwq0,72,97,1|-9izsu1,72,97,1|-9izsu0,23,65,0|-986u21,23,65,0|-986u20,72,97,1|-909q61,72,97,1|-909q60,23,65,0|-8pgre1,23,65,0|-8pgre0,72,97,1|-8hjni1,72,97,1|-8hjni0,23,65,0|-86qoq1,23,65,0|-86qoq0,72,97,1|-7ytku1,72,97,1|-7ytku0,23,65,0|-7o0m21,23,65,0|-7o0m20,72,97,1|-7g3i61,72,97,1|-7g3i60,23,65,0|-74xkq1,23,65,0|-74xkq0,72,97,1|-6x0gu1,72,97,1|-6x0gu0,23,65,0|-6m7i21,23,65,0|-6m7i20,72,97,1|-6eae61,72,97,1|-6eae60,23,65,0|-63hfe1,23,65,0|-63hfe0,72,97,1|-5vkbi1,72,97,1|-5vkbi0,23,65,0|-5krcq1,23,65,0|-5krcq0,72,97,1|-5cu8u1,72,97,1|-5cu8u0,23,65,0|-521a21,23,65,0|-521a20,72,97,1|-4sbcu1,72,97,1|-4sbcu0,23,65,0|-4iy8q1,23,65,0|-4iy8q0,72,97,1|-49la61,72,97,1|-49la60,23,65,0|-408621,23,65,0|-408620,72,97,1|-3qv7i1,72,97,1|-3qv7i0,23,65,0|-3hi3e1,23,65,0|-3hi3e0,72,97,1|-3854u1,72,97,1|-3854u0,23,65,0|-2ys0q1,23,65,0|-2ys0q0,72,97,1|-2pf261,72,97,1|-2pf260,23,65,0|-2g1y21,23,65,0|-2g1y20,72,97,1|-26c0u1,72,97,1|-26c0u0,23,65,0|-1zdy21,23,65,0|-1zdy20,31,40,0|-1xbu01,31,40,0|-1xbu00,49,41,1|-1nlws1,49,41,1|-1nlws0,31,40,0|-1e8so1,31,40,0|-1e8so0,49,41,1|-14vu41,49,41,1|-14vu40,31,40,0|-viq01,31,40,0|-viq00,49,41,1|-m5rg1,49,41,1|-m5rg0,31,40,0|-csnc1,31,40,0|-csnc0,49,41,1|-3fos1,49,41,1|-3fos0,31,40,0|5xfbz,31,40,0|5xfc0,49,41,1|fadvz,49,41,1|fadw0,31,40,0|onhzz,31,40,0|oni00,49,41,1|ydf7z,49,41,1|ydf80,31,40,0|17qjbz,31,40,0|17qjc0,49,41,1|1h3hvz,49,41,1|1h3hw0,31,40,0|1qglzz,31,40,0|1qgm00,49,41,1|1ztkjz,49,41,1|1ztkk0,31,40,0|296onz,31,40,0|296oo0,49,41,1|2ijn7z,49,41,1|2ijn80,31,40,0|2rwrbz,31,40,0|2rwrc0,49,41,1|319pvz,49,41,1|319pw0,31,40,0|3amtzz,31,40,0|3amu00,49,41,1|3kcr7z,49,41,1|3kcr80,31,40,0|3tcwnz,31,40,0|3tcwo0,49,41,1|432tvz,49,41,1|432tw0,31,40,0|4cfxzz,31,40,0|4cfy00,49,41,1|4lswjz,49,41,1|4lswk0,31,40,0|4v60nz,31,40,0|4v60o0,49,41,1|54iz7z,49,41,1|54iz80,31,40,0|5dw3bz,31,40,0|5dw3c0,49,41,1|5n91vz,49,41,1|5n91w0,31,40,0|5wm5zz,31,40,0|5wm600,49,41,1|65z4jz,49,41,1|65z4k0,31,40,0|6fc8nz,31,40,0|6fc8o0,49,41,1|6p25vz,49,41,1|6p25w0,31,40,0|6y2bbz,31,40,0|6y2bc0,49,41,1|77s8jz,49,41,1|77s8k0,31,40,0|7h5cnz,31,40,0|7h5co0,49,41,1|7qib7z,49,41,1|7qib80,31,40,0|7zvfbz,31,40,0|7zvfc0,49,41,1|898dvz,49,41,1|898dw0,31,40,0|8ilhzz,31,40,0|8ili00,49,41,1|8rygjz,49,41,1|8rygk0,31,40,0|908j5n,31,40,0|908j5o,49,41,1|9aodpn,49,41,1|9aodpo,31,40,0|9iyltn,31,40,0|9iylto,73,43,1|9trc9n,73,43,1|9trc9o,31,40,0|a1oohn,31,40,0|a1ooho,49,41,1|achhpn,49,41,1|achhpo,31,40,0|aker5n,31,40,0|aker5o,49,41,1|av7kdn,49,41,1|av7kdo,31,40,0|b3hshn,31,40,0|b3hsho,49,41,1|bdxn1n,49,41,1|bdxn1o,31,40,0|bm7v5n,31,40,0|bm7v5o,49,41,1|bwnppn,49,41,1|bwnppo,31,40,0|c4xxtn,31,40,0|c4xxto,49,41,1|cfqr1n,49,41,1|cfqr1o,31,40,0|cno0hn,31,40,0|cno0ho,49,41,1|cygtpn,49,41,1|cygtpo,31,40,0|d6e35n,31,40,0|d6e35o,49,41,1|dh6wdn,49,41,1|dh6wdo,31,40,0|dph4hn,31,40,0|dph4ho,49,41,1|dzwz1n,49,41,1|dzwz1o,31,40,0|e8775n,31,40,0|e8775o,49,41,1|ein1pn,49,41,1|ein1po,31,40,0|eqx9tn,31,40,0|eqx9to,49,41,1|f1d4dn,49,41,1|f1d4do,31,40,0|f9nchn,31,40,0|f9ncho,49,41,1|fkg5pn,49,41,1|fkg5po,31,40,0|fsdf5n,31,40,0|fsdf5o,49,41,1|g368dn,49,41,1|g368do,31,40,0|gb3htn,31,40,0|gb3hto,49,41,1|glwb1n,49,41,1|glwb1o,31,40,0|gu6j5n,31,40,0|gu6j5o,49,41,1|h4mdpn,49,41,1|h4mdpo,31,40,0|hcwltn,31,40,0|hcwlto,49,41,1|hncgdn,49,41,1|hncgdo,31,40,0|hvmohn,31,40,0|hvmoho,49,41,1|i6fhpn,49,41,1|i6fhpo,31,40,0|iecr5n,31,40,0|iecr5o,49,41,1|ip5kdn,49,41,1|ip5kdo,31,40,0|ix2ttn,31,40,0|ix2tto,49,41,1|j7vn1n,49,41,1|j7vn1o,31,40,0|jeq0hn,31,40,0|jeq0ho,49,41,1|jqyodn,49,41,1|jqyodo,31,40,0|jxg35n,31,40,0|jxg35o,49,41,1|k9or1n,49,41,1|k9or1o,31,40,0|kg65tn,31,40,0|kg65to,49,41,1|ksetpn,49,41,1|ksetpo,31,40,0|kz975n,31,40,0|kz975o,49,41,1|lbhv1n,49,41,1|lbhv1o,31,40,0|lhz9tn,31,40,0|lhz9to,49,41,1|lu837z,49,41,1|lu8380,31,40,0|m0phzz,31,40,0|m0pi00,49,41,1|mcy5vz,49,41,1|mcy5w0,31,40,0|mjfknz,31,40,0|mjfko0,49,41,1|mvo8jz,49,41,1|mvo8k0,31,40,0|n25nbz,31,40,0|n25nc0,49,41,1|neeb7z,49,41,1|neeb80,31,40,0|nkvpzz,31,40,0|nkvq00,49,41,1|nx4dvz,49,41,1|nx4dw0,31,40,0|o3yrbz,31,40,0|o3yrc0,49,41,1|og7f7z,49,41,1|og7f80,31,40,0|omotzz,31,40,0|omou00,49,41,1|oyxhvz,49,41,1|oyxhw0,31,40,0|p5ewnz,31,40,0|p5ewo0,49,41,1|phnkjz,49,41,1|phnkk0,31,40,0|po4zbz,31,40,0|po4zc0,49,41,1|q0dn7z,49,41,1|q0dn80,31,40,0|q6v1zz,31,40,0|q6v200,49,41,1|qj3pvz,49,41,1|qj3pw0,31,40,0|qpy3bz,31,40,0|qpy3c0,49,41,1|r26r7z,49,41,1|r26r80,31,40,0|r8o5zz,31,40,0|r8o600,49,41,1|rkwtvz,49,41,1|rkwtw0,31,40,0|rre8nz,31,40,0|rre8o0,49,41,1|s3mwjz,49,41,1|s3mwk0,31,40,0|sa4bbz,31,40,0|sa4bc0,49,41,1|smcz7z,49,41,1|smcz80,31,40,0|ssudzz,31,40,0|ssue00,49,41,1|t531vz,49,41,1|t531w0,31,40,0|tbkgnz,31,40,0|tbkgo0,49,41,1|tnt4jz,49,41,1|tnt4k0,31,40,0|tunhzz,31,40,0|tuni00,49,41,1|u6w5vz,49,41,1|u6w5w0,31,40,0|uddknz,31,40,0|uddko0,49,41,1|upm8jz,49,41,1|upm8k0,31,40,0|uw3nbz,31,40,0|uw3nc0,49,41,1|v8cb7z,49,41,1|v8cb80,31,40,0|vetpzz,31,40,0|vetq00,49,41,1|vr2dvz,49,41,1|vr2dw0,31,40,0|vxjsnz,31,40,0|vxjso0,49,41,1|w9sgjz,49,41,1|w9sgk0,31,40,0|wgmtzz,31,40,0|wgmu00,49,41,1|wsvhvz,49,41,1|wsvhw0,31,40,0|wzcwnz,31,40,0|wzcwo0,49,41,1|xblkjz,49,41,1|xblkk0,31,40,0|xi2zbz,31,40,0|xi2zc0,49,41,1|xubn7z,49,41,1|xubn80,31,40,0|y0t1zz,31,40,0|y0t200,49,41,1|yd1pvz,49,41,1|yd1pw0,31,40,0|yjj4nz,31,40,0|yjj4o0,49,41,1|yvrsjz,49,41,1|yvrsk0,31,40,0|z297bz,31,40,0|z297c0,49,41,1|zehv7z,49,41,1|zehv80,31,40,0|zlc8nz,31,40,0|zlc8o0,49,41,1|zxkwjz,49,41,1|zxkwk0,31,40,0|1042bbz,31,40,0|1042bc0,49,41,1|10gaz7z,49,41,1|10gaz80,31,40,0|10msdzz,31,40,0|10mse00,49,41,1|10z11vz,49,41,1|10z11w0,31,40,0|115ignz,31,40,0|115igo0,49,41,1|11hr4jz,49,41,1|11hr4k0,31,40,0|11o8jbz,31,40,0|11o8jc0,49,41,1|120h77z,49,41,1|120h780,31,40,0|126ylzz,31,40,0|126ym00,49,41,1|12j79vz,49,41,1|12j79w0,31,40,0|12q1nbz,31,40,0|12q1nc0,49,41,1|132ab7z,49,41,1|132ab80,31,40,0|138rpzz,31,40,0|138rq00,49,41,1|13l0dvz,49,41,1|13l0dw0,31,40,0|13rhsnz,31,40,0|13rhso0,49,41,1|143qgjz,49,41,1|143qgk0,31,40,0|14a7vbz,31,40,0|14a7vc0,49,41,1|14mgj7z,49,41,1|14mgj80,31,40,0|14sxxzz,31,40,0|14sxy00,49,41,1|1556lvz,49,41,1|1556lw0,31,40,0|15c0zbz,31,40,0|15c0zc0,49,41,1|15o9n7z,49,41,1|15o9n80,31,40,0|15ur1zz,31,40,0|15ur200,49,41,1|166zpvz,49,41,1|166zpw0,31,40,0|16dh4nz,31,40,0|16dh4o0,49,41,1|16ppsjz,49,41,1|16ppsk0,31,40,0|16w77bz,31,40,0|16w77c0,49,41,1|178fv7z,49,41,1|178fv80,31,40,0|17ex9zz,31,40,0|17exa00,49,41,1|17r5xvz,49,41,1|17r5xw0,31,40,0|17xncnz,31,40,0|17xnco0,49,41,1|189w0jz,49,41,1|189w0k0,31,40,0|18gqdzz,31,40,0|18gqe00,49,41,1|18sz1vz,49,41,1|18sz1w0,31,40,0|18zggnz,31,40,0|18zggo0,49,41,1|19bp4jz,49,41,1|19bp4k0,31,40,0|19i6jbz,31,40,0|19i6jc0,49,41,1|19uf77z,49,41,1|19uf780,31,40,0|1a0wlzz,31,40,0|1a0wm00,49,41,1|1ad59vz,49,41,1|1ad59w0,31,40,0|1ajmonz,31,40,0|1ajmoo0,49,41,1|1avvcjz,49,41,1|1avvck0,31,40,0|1b2ppzz,31,40,0|1b2pq00,49,41,1|1beydvz,49,41,1|1beydw0,31,40,0|1blfsnz,31,40,0|1blfso0,49,41,1|1bxogjz,49,41,1|1bxogk0,31,40,0|1c45vbz,31,40,0|1c45vc0,49,41,1|1cgej7z,49,41,1|1cgej80,31,40,0|1cmvxzz,31,40,0|1cmvy00,49,41,1|1cz4lvz,49,41,1|1cz4lw0,31,40,0|1d5m0nz,31,40,0|1d5m0o0,49,41,1|1dhuojz,49,41,1|1dhuok0,31,40,0|1doc3bz,31,40,0|1doc3c0,49,41,1|1e0kr7z,49,41,1|1e0kr80,31,40,0|1e7f4nz,31,40,0|1e7f4o0,49,41,1|1ejnsjz,49,41,1|1ejnsk0,31,40,0|1eq57bz,31,40,0|1eq57c0,49,41,1|1f2dv7z,49,41,1|1f2dv80,31,40,0|1f8v9zz,31,40,0|1f8va00,49,41,1|1fl3xvz,49,41,1|1fl3xw0,31,40,0|1frlcnz,31,40,0|1frlco0,49,41,1|1g3u0jz,49,41,1|1g3u0k0,31,40,0|1gabfbz,31,40,0|1gabfc0,49,41,1|1gmk37z,49,41,1|1gmk380,31,40,0|1gt1hzz,31,40,0|1gt1i00,49,41,1|1h5a5vz,49,41,1|1h5a5w0,31,40,0|1hc4jbz,31,40,0|1hc4jc0,49,41,1|1hod77z,49,41,1|1hod780,31,40,0|1huulzz,31,40,0|1huum00,49,41,1|1i739vz,49,41,1|1i739w0,31,40,0|1idkonz,31,40,0|1idkoo0,49,41,1|1iptcjz,49,41,1|1iptck0,31,40,0|1iwarbz,31,40,0|1iwarc0,49,41,1|1j8jf7z,49,41,1|1j8jf80,31,40,0|1jf0tzz,31,40,0|1jf0u00,49,41,1|1jr9hvz,49,41,1|1jr9hw0,31,40,0|1jy3vbz,31,40,0|1jy3vc0,49,41,1|1kacj7z,49,41,1|1kacj80,31,40,0|1kgtxzz,31,40,0|1kgty00,49,41,1|1kt2lvz,49,41,1|1kt2lw0,31,40,0|1kzk0nz,31,40,0|1kzk0o0,49,41,1|1lbsojz,49,41,1|1lbsok0,31,40,0|1lia3bz,31,40,0|1lia3c0,49,41,1|1luir7z,49,41,1|1luir80,31,40,0|1m105zz,31,40,0|1m10600,49,41,1|1md8tvz,49,41,1|1md8tw0,31,40,0|1mjq8nz,31,40,0|1mjq8o0,49,41,1|1mvywjz,49,41,1|1mvywk0,31,40,0|1n2t9zz,31,40,0|1n2ta00,49,41,1|1nf1xvz,49,41,1|1nf1xw0,31,40,0|1nljcnz,31,40,0|1nljco0,49,41,1|1nxs0jz,49,41,1|1nxs0k0,31,40,0|1o49fbz,31,40,0|1o49fc0,49,41,1|1ogi37z,49,41,1|1ogi380,31,40,0|1omzhzz,31,40,0|1omzi00,49,41,1|1oz85vz,49,41,1|1oz85w0,31,40,0|1p5pknz,31,40,0|1p5pko0,49,41,1|1phy8jz,49,41,1|1phy8k0,31,40,0|1poslzz,31,40,0|1posm00,49,41,1|1q119vz,49,41,1|1q119w0,31,40,0|1q7ionz,31,40,0|1q7ioo0,49,41,1|1qjrcjz,49,41,1|1qjrck0,31,40,0|1qq8rbz,31,40,0|1qq8rc0,49,41,1|1r2hf7z,49,41,1|1r2hf80,31,40,0|1r8ytzz,31,40,0|1r8yu00,49,41,1|1rl7hvz,49,41,1|1rl7hw0,31,40,0|1rrownz,31,40,0|1rrowo0,49,41,1|1s3xkjz,49,41,1|1s3xkk0,31,40,0|1saezbz,31,40,0|1saezc0,49,41,1|1smnn7z,49,41,1|1smnn80,31,40,0|1sti0nz,31,40,0|1sti0o0,49,41,1|1t5qojz,49,41,1|1t5qok0,31,40,0|1tc83bz,31,40,0|1tc83c0,49,41,1|1togr7z,49,41,1|1togr80,31,40,0|1tuy5zz,31,40,0|1tuy600,49,41,1|1u76tvz,49,41,1|1u76tw0,31,40,0|1udo8nz,31,40,0|1udo8o0,49,41,1|1upwwjz,49,41,1|1upwwk0,31,40,0|1uwebbz,31,40,0|1uwebc0,49,41,1|1v8mz7z,49,41,1|1v8mz80,31,40,0|1vf4dzz,31,40,0|1vf4e00,49,41,1|1vrd1vz,49,41,1|1vrd1w0,31,40,0|NaN,31,40,0\",\"America/Grand_Turk|,0,98,0|-15r0w5t,0,98,0|-15r0w5s,74,99,0|-u85og3,74,99,0|-u85og2,43,59,0|4v63fz,43,59,0|4v63g0,61,40,1|54j1zz,61,40,1|54j200,43,59,0|5dw63z,43,59,0|5dw640,61,40,1|5n94nz,61,40,1|5n94o0,43,59,0|5wm8rz,43,59,0|5wm8s0,61,40,1|65z7bz,61,40,1|65z7c0,43,59,0|6fcbfz,43,59,0|6fcbg0,61,40,1|6p28nz,61,40,1|6p28o0,43,59,0|6y2e3z,43,59,0|6y2e40,61,40,1|77sbbz,61,40,1|77sbc0,43,59,0|7h5ffz,43,59,0|7h5fg0,61,40,1|7qidzz,61,40,1|7qie00,43,59,0|7zvi3z,43,59,0|7zvi40,61,40,1|898gnz,61,40,1|898go0,43,59,0|8ilkrz,43,59,0|8ilks0,61,40,1|8ryjbz,61,40,1|8ryjc0,43,59,0|908rfz,43,59,0|908rg0,61,40,1|9aolzz,61,40,1|9aom00,43,59,0|9iyu3z,43,59,0|9iyu40,61,40,1|9trnbz,61,40,1|9trnc0,43,59,0|a1owrz,43,59,0|a1ows0,61,40,1|achpzz,61,40,1|achq00,43,59,0|akezfz,43,59,0|akezg0,61,40,1|av7snz,61,40,1|av7so0,43,59,0|b3i0rz,43,59,0|b3i0s0,61,40,1|bdxvbz,61,40,1|bdxvc0,43,59,0|bm83fz,43,59,0|bm83g0,61,40,1|bwnxzz,61,40,1|bwny00,43,59,0|c4y63z,43,59,0|c4y640,61,40,1|cfqzbz,61,40,1|cfqzc0,43,59,0|cno8rz,43,59,0|cno8s0,61,40,1|cyh1zz,61,40,1|cyh200,43,59,0|d6ebfz,43,59,0|d6ebg0,61,40,1|dh74nz,61,40,1|dh74o0,43,59,0|dphcrz,43,59,0|dphcs0,61,40,1|dzx7bz,61,40,1|dzx7c0,43,59,0|e87ffz,43,59,0|e87fg0,61,40,1|ein9zz,61,40,1|eina00,43,59,0|eqxi3z,43,59,0|eqxi40,61,40,1|f1dcnz,61,40,1|f1dco0,43,59,0|f9nkrz,43,59,0|f9nks0,61,40,1|fkgdzz,61,40,1|fkge00,43,59,0|fsdnfz,43,59,0|fsdng0,61,40,1|g36gnz,61,40,1|g36go0,43,59,0|gb3q3z,43,59,0|gb3q40,61,40,1|glwjbz,61,40,1|glwjc0,43,59,0|gu6rfz,43,59,0|gu6rg0,61,40,1|h4mlzz,61,40,1|h4mm00,43,59,0|hcwu3z,43,59,0|hcwu40,61,40,1|hnconz,61,40,1|hncoo0,43,59,0|hvmwrz,43,59,0|hvmws0,61,40,1|i6fpzz,61,40,1|i6fq00,43,59,0|ieczfz,43,59,0|ieczg0,61,40,1|ip5snz,61,40,1|ip5so0,43,59,0|ix323z,43,59,0|ix3240,61,40,1|j7vvbz,61,40,1|j7vvc0,43,59,0|jeq8rz,43,59,0|jeq8s0,61,40,1|jqywnz,61,40,1|jqywo0,43,59,0|jxgbfz,43,59,0|jxgbg0,61,40,1|k9ozbz,61,40,1|k9ozc0,43,59,0|kg6e3z,43,59,0|kg6e40,61,40,1|ksf1zz,61,40,1|ksf200,43,59,0|kz9ffz,43,59,0|kz9fg0,61,40,1|lbi3bz,61,40,1|lbi3c0,43,59,0|lhzi3z,43,59,0|lhzi40,61,40,1|lu85zz,61,40,1|lu8600,43,59,0|m0pkrz,43,59,0|m0pks0,61,40,1|mcy8nz,61,40,1|mcy8o0,43,59,0|mjfnfz,43,59,0|mjfng0,61,40,1|mvobbz,61,40,1|mvobc0,43,59,0|n25q3z,43,59,0|n25q40,61,40,1|needzz,61,40,1|neee00,43,59,0|nkvsrz,43,59,0|nkvss0,31,40,0|p5ezfz,31,40,0|p5ezg0,61,40,1|phnnbz,61,40,1|phnnc0,43,59,0|po523z,43,59,0|po5240,61,40,1|q0dpzz,61,40,1|q0dq00,43,59,0|q6v4rz,43,59,0|q6v4s0,61,40,1|qj3snz,61,40,1|qj3so0,43,59,0|qpy63z,43,59,0|qpy640,61,40,1|r26tzz,61,40,1|r26u00,43,59,0|r8o8rz,43,59,0|r8o8s0,61,40,1|rkwwnz,61,40,1|rkwwo0,43,59,0|rrebfz,43,59,0|rrebg0,61,40,1|s3mzbz,61,40,1|s3mzc0,43,59,0|sa4e3z,43,59,0|sa4e40,61,40,1|smd1zz,61,40,1|smd200,43,59,0|ssugrz,43,59,0|ssugs0,61,40,1|t534nz,61,40,1|t534o0,43,59,0|tbkjfz,43,59,0|tbkjg0,61,40,1|tnt7bz,61,40,1|tnt7c0,43,59,0|tunkrz,43,59,0|tunks0,61,40,1|u6w8nz,61,40,1|u6w8o0,43,59,0|uddnfz,43,59,0|uddng0,61,40,1|upmbbz,61,40,1|upmbc0,43,59,0|uw3q3z,43,59,0|uw3q40,61,40,1|v8cdzz,61,40,1|v8ce00,43,59,0|vetsrz,43,59,0|vetss0,61,40,1|vr2gnz,61,40,1|vr2go0,43,59,0|vxjvfz,43,59,0|vxjvg0,61,40,1|w9sjbz,61,40,1|w9sjc0,43,59,0|wgmwrz,43,59,0|wgmws0,61,40,1|wsvknz,61,40,1|wsvko0,43,59,0|wzczfz,43,59,0|wzczg0,61,40,1|xblnbz,61,40,1|xblnc0,43,59,0|xi323z,43,59,0|xi3240,61,40,1|xubpzz,61,40,1|xubq00,43,59,0|y0t4rz,43,59,0|y0t4s0,61,40,1|yd1snz,61,40,1|yd1so0,43,59,0|yjj7fz,43,59,0|yjj7g0,61,40,1|yvrvbz,61,40,1|yvrvc0,43,59,0|z29a3z,43,59,0|z29a40,61,40,1|zehxzz,61,40,1|zehy00,43,59,0|zlcbfz,43,59,0|zlcbg0,61,40,1|zxkzbz,61,40,1|zxkzc0,43,59,0|1042e3z,43,59,0|1042e40,61,40,1|10gb1zz,61,40,1|10gb200,43,59,0|10msgrz,43,59,0|10msgs0,61,40,1|10z14nz,61,40,1|10z14o0,43,59,0|115ijfz,43,59,0|115ijg0,61,40,1|11hr7bz,61,40,1|11hr7c0,43,59,0|11o8m3z,43,59,0|11o8m40,61,40,1|120h9zz,61,40,1|120ha00,43,59,0|126yorz,43,59,0|126yos0,61,40,1|12j7cnz,61,40,1|12j7co0,43,59,0|12q1q3z,43,59,0|12q1q40,61,40,1|132adzz,61,40,1|132ae00,43,59,0|138rsrz,43,59,0|138rss0,61,40,1|13l0gnz,61,40,1|13l0go0,43,59,0|13rhvfz,43,59,0|13rhvg0,61,40,1|143qjbz,61,40,1|143qjc0,43,59,0|14a7y3z,43,59,0|14a7y40,61,40,1|14mglzz,61,40,1|14mgm00,43,59,0|14sy0rz,43,59,0|14sy0s0,61,40,1|1556onz,61,40,1|1556oo0,43,59,0|15c123z,43,59,0|15c1240,61,40,1|15o9pzz,61,40,1|15o9q00,43,59,0|15ur4rz,43,59,0|15ur4s0,61,40,1|166zsnz,61,40,1|166zso0,43,59,0|16dh7fz,43,59,0|16dh7g0,61,40,1|16ppvbz,61,40,1|16ppvc0,43,59,0|16w7a3z,43,59,0|16w7a40,61,40,1|178fxzz,61,40,1|178fy00,43,59,0|17excrz,43,59,0|17excs0,61,40,1|17r60nz,61,40,1|17r60o0,43,59,0|17xnffz,43,59,0|17xnfg0,61,40,1|189w3bz,61,40,1|189w3c0,43,59,0|18gqgrz,43,59,0|18gqgs0,61,40,1|18sz4nz,61,40,1|18sz4o0,43,59,0|18zgjfz,43,59,0|18zgjg0,61,40,1|19bp7bz,61,40,1|19bp7c0,43,59,0|19i6m3z,43,59,0|19i6m40,61,40,1|19uf9zz,61,40,1|19ufa00,43,59,0|1a0worz,43,59,0|1a0wos0,61,40,1|1ad5cnz,61,40,1|1ad5co0,43,59,0|1ajmrfz,43,59,0|1ajmrg0,61,40,1|1avvfbz,61,40,1|1avvfc0,43,59,0|1b2psrz,43,59,0|1b2pss0,61,40,1|1beygnz,61,40,1|1beygo0,43,59,0|1blfvfz,43,59,0|1blfvg0,61,40,1|1bxojbz,61,40,1|1bxojc0,43,59,0|1c45y3z,43,59,0|1c45y40,61,40,1|1cgelzz,61,40,1|1cgem00,43,59,0|1cmw0rz,43,59,0|1cmw0s0,61,40,1|1cz4onz,61,40,1|1cz4oo0,43,59,0|1d5m3fz,43,59,0|1d5m3g0,61,40,1|1dhurbz,61,40,1|1dhurc0,43,59,0|1doc63z,43,59,0|1doc640,61,40,1|1e0ktzz,61,40,1|1e0ku00,43,59,0|1e7f7fz,43,59,0|1e7f7g0,61,40,1|1ejnvbz,61,40,1|1ejnvc0,43,59,0|1eq5a3z,43,59,0|1eq5a40,61,40,1|1f2dxzz,61,40,1|1f2dy00,43,59,0|1f8vcrz,43,59,0|1f8vcs0,61,40,1|1fl40nz,61,40,1|1fl40o0,43,59,0|1frlffz,43,59,0|1frlfg0,61,40,1|1g3u3bz,61,40,1|1g3u3c0,43,59,0|1gabi3z,43,59,0|1gabi40,61,40,1|1gmk5zz,61,40,1|1gmk600,43,59,0|1gt1krz,43,59,0|1gt1ks0,61,40,1|1h5a8nz,61,40,1|1h5a8o0,43,59,0|1hc4m3z,43,59,0|1hc4m40,61,40,1|1hod9zz,61,40,1|1hoda00,43,59,0|1huuorz,43,59,0|1huuos0,61,40,1|1i73cnz,61,40,1|1i73co0,43,59,0|1idkrfz,43,59,0|1idkrg0,61,40,1|1iptfbz,61,40,1|1iptfc0,43,59,0|1iwau3z,43,59,0|1iwau40,61,40,1|1j8jhzz,61,40,1|1j8ji00,43,59,0|1jf0wrz,43,59,0|1jf0ws0,61,40,1|1jr9knz,61,40,1|1jr9ko0,43,59,0|1jy3y3z,43,59,0|1jy3y40,61,40,1|1kaclzz,61,40,1|1kacm00,43,59,0|1kgu0rz,43,59,0|1kgu0s0,61,40,1|1kt2onz,61,40,1|1kt2oo0,43,59,0|1kzk3fz,43,59,0|1kzk3g0,61,40,1|1lbsrbz,61,40,1|1lbsrc0,43,59,0|1lia63z,43,59,0|1lia640,61,40,1|1luitzz,61,40,1|1luiu00,43,59,0|1m108rz,43,59,0|1m108s0,61,40,1|1md8wnz,61,40,1|1md8wo0,43,59,0|1mjqbfz,43,59,0|1mjqbg0,61,40,1|1mvyzbz,61,40,1|1mvyzc0,43,59,0|1n2tcrz,43,59,0|1n2tcs0,61,40,1|1nf20nz,61,40,1|1nf20o0,43,59,0|1nljffz,43,59,0|1nljfg0,61,40,1|1nxs3bz,61,40,1|1nxs3c0,43,59,0|1o49i3z,43,59,0|1o49i40,61,40,1|1ogi5zz,61,40,1|1ogi600,43,59,0|1omzkrz,43,59,0|1omzks0,61,40,1|1oz88nz,61,40,1|1oz88o0,43,59,0|1p5pnfz,43,59,0|1p5png0,61,40,1|1phybbz,61,40,1|1phybc0,43,59,0|1posorz,43,59,0|1posos0,61,40,1|1q11cnz,61,40,1|1q11co0,43,59,0|1q7irfz,43,59,0|1q7irg0,61,40,1|1qjrfbz,61,40,1|1qjrfc0,43,59,0|1qq8u3z,43,59,0|1qq8u40,61,40,1|1r2hhzz,61,40,1|1r2hi00,43,59,0|1r8ywrz,43,59,0|1r8yws0,61,40,1|1rl7knz,61,40,1|1rl7ko0,43,59,0|1rrozfz,43,59,0|1rrozg0,61,40,1|1s3xnbz,61,40,1|1s3xnc0,43,59,0|1saf23z,43,59,0|1saf240,61,40,1|1smnpzz,61,40,1|1smnq00,43,59,0|1sti3fz,43,59,0|1sti3g0,61,40,1|1t5qrbz,61,40,1|1t5qrc0,43,59,0|1tc863z,43,59,0|1tc8640,61,40,1|1togtzz,61,40,1|1togu00,43,59,0|1tuy8rz,43,59,0|1tuy8s0,61,40,1|1u76wnz,61,40,1|1u76wo0,43,59,0|1udobfz,43,59,0|1udobg0,61,40,1|1upwzbz,61,40,1|1upwzc0,43,59,0|1uwee3z,43,59,0|1uwee40,61,40,1|1v8n1zz,61,40,1|1v8n200,43,59,0|1vf4grz,43,59,0|1vf4gs0,61,40,1|1vrd4nz,61,40,1|1vrd4o0,43,59,0|NaN,43,59,0\",\"America/Grenada|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/Guadeloupe|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/Guatemala|,0,100,0|-qqqskl,0,100,0|-qqqskk,45,63,0|219hzz,45,63,0|219i00,48,59,1|25xxvz,48,59,1|25xxw0,45,63,0|6zgbbz,45,63,0|6zgbc0,48,59,1|75tv7z,48,59,1|75tv80,45,63,0|b2q5zz,45,63,0|b2q600,48,59,1|bbd77z,48,59,1|bbd780,45,63,0|iyitzz,45,63,0|iyiu00,48,59,1|j6fxvz,48,59,1|j6fxw0,45,63,0|NaN,45,63,0\",\"America/Guayaquil|,0,101,0|-15r0ujt,0,101,0|-15r0ujs,75,102,0|-kcr84p,75,102,0|-kcr84o,55,59,0|byetvz,55,59,0|byetw0,41,40,1|c1yj3z,41,40,1|c1yj40,55,59,0|NaN,55,59,0\",\"America/Guyana|,0,103,0|-uhmika,0,103,0|-uhmik9,41,40,0|-smca81,41,40,0|-smca80,76,104,0|2wud2z,76,104,0|2wud30,38,41,0|bluwfz,38,41,0|bluwg0,41,40,0|NaN,41,40,0\",\"America/Halifax|,0,105,0|-z94k81,0,105,0|-z94k80,31,40,0|-s1x3k1,31,40,0|-s1x3k0,49,41,1|-rsiac1,49,41,1|-rsiac0,31,40,0|-qzp0o1,31,40,0|-qzp0o0,49,41,1|-qpm4s1,49,41,1|-qpm4s0,31,40,0|-pwt681,31,40,0|-pwt680,49,41,1|-pr1uc1,49,41,1|-pr1uc0,31,40,0|-pe6sw1,31,40,0|-pe6sw0,49,41,1|-p7wyc1,49,41,1|-p7wyc0,31,40,0|-ovpzk1,31,40,0|-ovpzk0,49,41,1|-op5101,49,41,1|-op5100,31,40,0|-ocmy81,31,40,0|-ocmy80,49,41,1|-o6eyc1,49,41,1|-o6eyc0,31,40,0|-ntwvk1,31,40,0|-ntwvk0,49,41,1|-nn0t01,49,41,1|-nn0t00,31,40,0|-nb6sw1,31,40,0|-nb6sw0,49,41,1|-n3kt01,49,41,1|-n3kt00,31,40,0|-mrqsw1,31,40,0|-mrqsw0,49,41,1|-mlkno1,49,41,1|-mlkno0,31,40,0|-m9qnk1,31,40,0|-m9qnk0,49,41,1|-m24no1,49,41,1|-m24no0,31,40,0|-lqank1,31,40,0|-lqank0,49,41,1|-lk6d01,49,41,1|-lk6d00,31,40,0|-l7kkw1,31,40,0|-l7kkw0,49,41,1|-l1pjo1,49,41,1|-l1pjo0,31,40,0|-koui81,31,40,0|-koui80,49,41,1|-kibec1,49,41,1|-kibec0,31,40,0|-k64fk1,31,40,0|-k64fk0,49,41,1|-jyvec1,49,41,1|-jyvec0,31,40,0|-jnrbk1,31,40,0|-jnrbk0,49,41,1|-jg5bo1,49,41,1|-jg5bo0,31,40,0|-j518w1,31,40,0|-j518w0,49,41,1|-ix2ac1,49,41,1|-ix2ac0,31,40,0|-il8a81,31,40,0|-il8a80,49,41,1|-if3zo1,49,41,1|-if3zo0,31,40,0|-i1sa81,31,40,0|-i1sa80,49,41,1|-hvm501,49,41,1|-hvm500,31,40,0|-hj0cw1,31,40,0|-hj0cw0,49,41,1|-hdlzo1,49,41,1|-hdlzo0,31,40,0|-h1rzk1,31,40,0|-h1rzk0,49,41,1|-gu5zo1,49,41,1|-gu5zo0,31,40,0|-gj1ww1,31,40,0|-gj1ww0,49,41,1|-gbfx01,49,41,1|-gbfx00,31,40,0|-fyvzk1,31,40,0|-fyvzk0,49,41,1|-fspuc1,49,41,1|-fspuc0,31,40,0|-fh8sw1,31,40,0|-fh8sw0,49,41,1|-f9mt01,49,41,1|-f9mt00,31,40,0|-eyiq81,31,40,0|-eyiq80,49,41,1|-eqwqc1,49,41,1|-eqwqc0,31,40,0|-ek27c1,31,40,0|-ek27c0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|-ccw7c1,31,40,0|-ccw7c0,49,41,1|-c4z3g1,49,41,1|-c4z3g0,31,40,0|-bu64o1,31,40,0|-bu64o0,49,41,1|-bm90s1,49,41,1|-bm90s0,31,40,0|-bbg201,31,40,0|-bbg200,49,41,1|-b3iy41,49,41,1|-b3iy40,31,40,0|-aspzc1,31,40,0|-aspzc0,49,41,1|-aksvg1,49,41,1|-aksvg0,31,40,0|-9qwvc1,31,40,0|-9qwvc0,49,41,1|-9izrg1,49,41,1|-9izrg0,31,40,0|-986so1,31,40,0|-986so0,49,41,1|-909os1,49,41,1|-909os0,31,40,0|-8pgq01,31,40,0|-8pgq00,49,41,1|-8hjm41,49,41,1|-8hjm40,31,40,0|-86qnc1,31,40,0|-86qnc0,49,41,1|-7ytjg1,49,41,1|-7ytjg0,31,40,0|-74xjc1,31,40,0|-74xjc0,49,41,1|-6x0fg1,49,41,1|-6x0fg0,31,40,0|-6m7go1,31,40,0|-6m7go0,49,41,1|-6eacs1,49,41,1|-6eacs0,31,40,0|-63he01,31,40,0|-63he00,49,41,1|-5vka41,49,41,1|-5vka40,31,40,0|-5krbc1,31,40,0|-5krbc0,49,41,1|-5cu7g1,49,41,1|-5cu7g0,31,40,0|-4084o1,31,40,0|-4084o0,49,41,1|-3qv641,49,41,1|-3qv640,31,40,0|-3hi201,31,40,0|-3hi200,49,41,1|-3853g1,49,41,1|-3853g0,31,40,0|-2yrzc1,31,40,0|-2yrzc0,49,41,1|-2pf0s1,49,41,1|-2pf0s0,31,40,0|-2g1wo1,31,40,0|-2g1wo0,49,41,1|-26bzg1,49,41,1|-26bzg0,31,40,0|-1xbu01,31,40,0|-1xbu00,49,41,1|-1nlws1,49,41,1|-1nlws0,31,40,0|-1e8so1,31,40,0|-1e8so0,49,41,1|-14vu41,49,41,1|-14vu40,31,40,0|-viq01,31,40,0|-viq00,49,41,1|-m5rg1,49,41,1|-m5rg0,31,40,0|-csnc1,31,40,0|-csnc0,49,41,1|-3fos1,49,41,1|-3fos0,31,40,0|5xfbz,31,40,0|5xfc0,49,41,1|fadvz,49,41,1|fadw0,31,40,0|onhzz,31,40,0|oni00,49,41,1|ydf7z,49,41,1|ydf80,31,40,0|17qjbz,31,40,0|17qjc0,49,41,1|1h3hvz,49,41,1|1h3hw0,31,40,0|1qglzz,31,40,0|1qgm00,49,41,1|1ztkjz,49,41,1|1ztkk0,31,40,0|296onz,31,40,0|296oo0,49,41,1|2ijn7z,49,41,1|2ijn80,31,40,0|2rwrbz,31,40,0|2rwrc0,49,41,1|319pvz,49,41,1|319pw0,31,40,0|3amtzz,31,40,0|3amu00,49,41,1|3kcr7z,49,41,1|3kcr80,31,40,0|3tcwnz,31,40,0|3tcwo0,49,41,1|432tvz,49,41,1|432tw0,31,40,0|4cfxzz,31,40,0|4cfy00,49,41,1|4lswjz,49,41,1|4lswk0,31,40,0|4v60nz,31,40,0|4v60o0,49,41,1|54iz7z,49,41,1|54iz80,31,40,0|5dw3bz,31,40,0|5dw3c0,49,41,1|5n91vz,49,41,1|5n91w0,31,40,0|5wm5zz,31,40,0|5wm600,49,41,1|65z4jz,49,41,1|65z4k0,31,40,0|6fc8nz,31,40,0|6fc8o0,49,41,1|6p25vz,49,41,1|6p25w0,31,40,0|6y2bbz,31,40,0|6y2bc0,49,41,1|77s8jz,49,41,1|77s8k0,31,40,0|7h5cnz,31,40,0|7h5co0,49,41,1|7qib7z,49,41,1|7qib80,31,40,0|7zvfbz,31,40,0|7zvfc0,49,41,1|898dvz,49,41,1|898dw0,31,40,0|8ilhzz,31,40,0|8ili00,49,41,1|8rygjz,49,41,1|8rygk0,31,40,0|908onz,31,40,0|908oo0,49,41,1|9aoj7z,49,41,1|9aoj80,31,40,0|9iyrbz,31,40,0|9iyrc0,49,41,1|9trkjz,49,41,1|9trkk0,31,40,0|a1otzz,31,40,0|a1ou00,49,41,1|achn7z,49,41,1|achn80,31,40,0|akewnz,31,40,0|akewo0,49,41,1|av7pvz,49,41,1|av7pw0,31,40,0|b3hxzz,31,40,0|b3hy00,49,41,1|bdxsjz,49,41,1|bdxsk0,31,40,0|bm80nz,31,40,0|bm80o0,49,41,1|bwnv7z,49,41,1|bwnv80,31,40,0|c4y3bz,31,40,0|c4y3c0,49,41,1|cfqwjz,49,41,1|cfqwk0,31,40,0|cno5zz,31,40,0|cno600,49,41,1|cygz7z,49,41,1|cygz80,31,40,0|d6e8nz,31,40,0|d6e8o0,49,41,1|dh71vz,49,41,1|dh71w0,31,40,0|dph9zz,31,40,0|dpha00,49,41,1|dzx4jz,49,41,1|dzx4k0,31,40,0|e87cnz,31,40,0|e87co0,49,41,1|ein77z,49,41,1|ein780,31,40,0|eqxfbz,31,40,0|eqxfc0,49,41,1|f1d9vz,49,41,1|f1d9w0,31,40,0|f9nhzz,31,40,0|f9ni00,49,41,1|fkgb7z,49,41,1|fkgb80,31,40,0|fsdknz,31,40,0|fsdko0,49,41,1|g36dvz,49,41,1|g36dw0,31,40,0|gb3nbz,31,40,0|gb3nc0,49,41,1|glwgjz,49,41,1|glwgk0,31,40,0|gu6onz,31,40,0|gu6oo0,49,41,1|h4mj7z,49,41,1|h4mj80,31,40,0|hcwrbz,31,40,0|hcwrc0,49,41,1|hnclvz,49,41,1|hnclw0,31,40,0|hvmtzz,31,40,0|hvmu00,49,41,1|i6fn7z,49,41,1|i6fn80,31,40,0|iecwnz,31,40,0|iecwo0,49,41,1|ip5pvz,49,41,1|ip5pw0,31,40,0|ix2zbz,31,40,0|ix2zc0,49,41,1|j7vsjz,49,41,1|j7vsk0,31,40,0|jeq5zz,31,40,0|jeq600,49,41,1|jqytvz,49,41,1|jqytw0,31,40,0|jxg8nz,31,40,0|jxg8o0,49,41,1|k9owjz,49,41,1|k9owk0,31,40,0|kg6bbz,31,40,0|kg6bc0,49,41,1|ksez7z,49,41,1|ksez80,31,40,0|kz9cnz,31,40,0|kz9co0,49,41,1|lbi0jz,49,41,1|lbi0k0,31,40,0|lhzfbz,31,40,0|lhzfc0,49,41,1|lu837z,49,41,1|lu8380,31,40,0|m0phzz,31,40,0|m0pi00,49,41,1|mcy5vz,49,41,1|mcy5w0,31,40,0|mjfknz,31,40,0|mjfko0,49,41,1|mvo8jz,49,41,1|mvo8k0,31,40,0|n25nbz,31,40,0|n25nc0,49,41,1|neeb7z,49,41,1|neeb80,31,40,0|nkvpzz,31,40,0|nkvq00,49,41,1|nx4dvz,49,41,1|nx4dw0,31,40,0|o3yrbz,31,40,0|o3yrc0,49,41,1|og7f7z,49,41,1|og7f80,31,40,0|omotzz,31,40,0|omou00,49,41,1|oyxhvz,49,41,1|oyxhw0,31,40,0|p5ewnz,31,40,0|p5ewo0,49,41,1|phnkjz,49,41,1|phnkk0,31,40,0|po4zbz,31,40,0|po4zc0,49,41,1|q0dn7z,49,41,1|q0dn80,31,40,0|q6v1zz,31,40,0|q6v200,49,41,1|qj3pvz,49,41,1|qj3pw0,31,40,0|qpy3bz,31,40,0|qpy3c0,49,41,1|r26r7z,49,41,1|r26r80,31,40,0|r8o5zz,31,40,0|r8o600,49,41,1|rkwtvz,49,41,1|rkwtw0,31,40,0|rre8nz,31,40,0|rre8o0,49,41,1|s3mwjz,49,41,1|s3mwk0,31,40,0|sa4bbz,31,40,0|sa4bc0,49,41,1|smcz7z,49,41,1|smcz80,31,40,0|ssudzz,31,40,0|ssue00,49,41,1|t531vz,49,41,1|t531w0,31,40,0|tbkgnz,31,40,0|tbkgo0,49,41,1|tnt4jz,49,41,1|tnt4k0,31,40,0|tunhzz,31,40,0|tuni00,49,41,1|u6w5vz,49,41,1|u6w5w0,31,40,0|uddknz,31,40,0|uddko0,49,41,1|upm8jz,49,41,1|upm8k0,31,40,0|uw3nbz,31,40,0|uw3nc0,49,41,1|v8cb7z,49,41,1|v8cb80,31,40,0|vetpzz,31,40,0|vetq00,49,41,1|vr2dvz,49,41,1|vr2dw0,31,40,0|vxjsnz,31,40,0|vxjso0,49,41,1|w9sgjz,49,41,1|w9sgk0,31,40,0|wgmtzz,31,40,0|wgmu00,49,41,1|wsvhvz,49,41,1|wsvhw0,31,40,0|wzcwnz,31,40,0|wzcwo0,49,41,1|xblkjz,49,41,1|xblkk0,31,40,0|xi2zbz,31,40,0|xi2zc0,49,41,1|xubn7z,49,41,1|xubn80,31,40,0|y0t1zz,31,40,0|y0t200,49,41,1|yd1pvz,49,41,1|yd1pw0,31,40,0|yjj4nz,31,40,0|yjj4o0,49,41,1|yvrsjz,49,41,1|yvrsk0,31,40,0|z297bz,31,40,0|z297c0,49,41,1|zehv7z,49,41,1|zehv80,31,40,0|zlc8nz,31,40,0|zlc8o0,49,41,1|zxkwjz,49,41,1|zxkwk0,31,40,0|1042bbz,31,40,0|1042bc0,49,41,1|10gaz7z,49,41,1|10gaz80,31,40,0|10msdzz,31,40,0|10mse00,49,41,1|10z11vz,49,41,1|10z11w0,31,40,0|115ignz,31,40,0|115igo0,49,41,1|11hr4jz,49,41,1|11hr4k0,31,40,0|11o8jbz,31,40,0|11o8jc0,49,41,1|120h77z,49,41,1|120h780,31,40,0|126ylzz,31,40,0|126ym00,49,41,1|12j79vz,49,41,1|12j79w0,31,40,0|12q1nbz,31,40,0|12q1nc0,49,41,1|132ab7z,49,41,1|132ab80,31,40,0|138rpzz,31,40,0|138rq00,49,41,1|13l0dvz,49,41,1|13l0dw0,31,40,0|13rhsnz,31,40,0|13rhso0,49,41,1|143qgjz,49,41,1|143qgk0,31,40,0|14a7vbz,31,40,0|14a7vc0,49,41,1|14mgj7z,49,41,1|14mgj80,31,40,0|14sxxzz,31,40,0|14sxy00,49,41,1|1556lvz,49,41,1|1556lw0,31,40,0|15c0zbz,31,40,0|15c0zc0,49,41,1|15o9n7z,49,41,1|15o9n80,31,40,0|15ur1zz,31,40,0|15ur200,49,41,1|166zpvz,49,41,1|166zpw0,31,40,0|16dh4nz,31,40,0|16dh4o0,49,41,1|16ppsjz,49,41,1|16ppsk0,31,40,0|16w77bz,31,40,0|16w77c0,49,41,1|178fv7z,49,41,1|178fv80,31,40,0|17ex9zz,31,40,0|17exa00,49,41,1|17r5xvz,49,41,1|17r5xw0,31,40,0|17xncnz,31,40,0|17xnco0,49,41,1|189w0jz,49,41,1|189w0k0,31,40,0|18gqdzz,31,40,0|18gqe00,49,41,1|18sz1vz,49,41,1|18sz1w0,31,40,0|18zggnz,31,40,0|18zggo0,49,41,1|19bp4jz,49,41,1|19bp4k0,31,40,0|19i6jbz,31,40,0|19i6jc0,49,41,1|19uf77z,49,41,1|19uf780,31,40,0|1a0wlzz,31,40,0|1a0wm00,49,41,1|1ad59vz,49,41,1|1ad59w0,31,40,0|1ajmonz,31,40,0|1ajmoo0,49,41,1|1avvcjz,49,41,1|1avvck0,31,40,0|1b2ppzz,31,40,0|1b2pq00,49,41,1|1beydvz,49,41,1|1beydw0,31,40,0|1blfsnz,31,40,0|1blfso0,49,41,1|1bxogjz,49,41,1|1bxogk0,31,40,0|1c45vbz,31,40,0|1c45vc0,49,41,1|1cgej7z,49,41,1|1cgej80,31,40,0|1cmvxzz,31,40,0|1cmvy00,49,41,1|1cz4lvz,49,41,1|1cz4lw0,31,40,0|1d5m0nz,31,40,0|1d5m0o0,49,41,1|1dhuojz,49,41,1|1dhuok0,31,40,0|1doc3bz,31,40,0|1doc3c0,49,41,1|1e0kr7z,49,41,1|1e0kr80,31,40,0|1e7f4nz,31,40,0|1e7f4o0,49,41,1|1ejnsjz,49,41,1|1ejnsk0,31,40,0|1eq57bz,31,40,0|1eq57c0,49,41,1|1f2dv7z,49,41,1|1f2dv80,31,40,0|1f8v9zz,31,40,0|1f8va00,49,41,1|1fl3xvz,49,41,1|1fl3xw0,31,40,0|1frlcnz,31,40,0|1frlco0,49,41,1|1g3u0jz,49,41,1|1g3u0k0,31,40,0|1gabfbz,31,40,0|1gabfc0,49,41,1|1gmk37z,49,41,1|1gmk380,31,40,0|1gt1hzz,31,40,0|1gt1i00,49,41,1|1h5a5vz,49,41,1|1h5a5w0,31,40,0|1hc4jbz,31,40,0|1hc4jc0,49,41,1|1hod77z,49,41,1|1hod780,31,40,0|1huulzz,31,40,0|1huum00,49,41,1|1i739vz,49,41,1|1i739w0,31,40,0|1idkonz,31,40,0|1idkoo0,49,41,1|1iptcjz,49,41,1|1iptck0,31,40,0|1iwarbz,31,40,0|1iwarc0,49,41,1|1j8jf7z,49,41,1|1j8jf80,31,40,0|1jf0tzz,31,40,0|1jf0u00,49,41,1|1jr9hvz,49,41,1|1jr9hw0,31,40,0|1jy3vbz,31,40,0|1jy3vc0,49,41,1|1kacj7z,49,41,1|1kacj80,31,40,0|1kgtxzz,31,40,0|1kgty00,49,41,1|1kt2lvz,49,41,1|1kt2lw0,31,40,0|1kzk0nz,31,40,0|1kzk0o0,49,41,1|1lbsojz,49,41,1|1lbsok0,31,40,0|1lia3bz,31,40,0|1lia3c0,49,41,1|1luir7z,49,41,1|1luir80,31,40,0|1m105zz,31,40,0|1m10600,49,41,1|1md8tvz,49,41,1|1md8tw0,31,40,0|1mjq8nz,31,40,0|1mjq8o0,49,41,1|1mvywjz,49,41,1|1mvywk0,31,40,0|1n2t9zz,31,40,0|1n2ta00,49,41,1|1nf1xvz,49,41,1|1nf1xw0,31,40,0|1nljcnz,31,40,0|1nljco0,49,41,1|1nxs0jz,49,41,1|1nxs0k0,31,40,0|1o49fbz,31,40,0|1o49fc0,49,41,1|1ogi37z,49,41,1|1ogi380,31,40,0|1omzhzz,31,40,0|1omzi00,49,41,1|1oz85vz,49,41,1|1oz85w0,31,40,0|1p5pknz,31,40,0|1p5pko0,49,41,1|1phy8jz,49,41,1|1phy8k0,31,40,0|1poslzz,31,40,0|1posm00,49,41,1|1q119vz,49,41,1|1q119w0,31,40,0|1q7ionz,31,40,0|1q7ioo0,49,41,1|1qjrcjz,49,41,1|1qjrck0,31,40,0|1qq8rbz,31,40,0|1qq8rc0,49,41,1|1r2hf7z,49,41,1|1r2hf80,31,40,0|1r8ytzz,31,40,0|1r8yu00,49,41,1|1rl7hvz,49,41,1|1rl7hw0,31,40,0|1rrownz,31,40,0|1rrowo0,49,41,1|1s3xkjz,49,41,1|1s3xkk0,31,40,0|1saezbz,31,40,0|1saezc0,49,41,1|1smnn7z,49,41,1|1smnn80,31,40,0|1sti0nz,31,40,0|1sti0o0,49,41,1|1t5qojz,49,41,1|1t5qok0,31,40,0|1tc83bz,31,40,0|1tc83c0,49,41,1|1togr7z,49,41,1|1togr80,31,40,0|1tuy5zz,31,40,0|1tuy600,49,41,1|1u76tvz,49,41,1|1u76tw0,31,40,0|1udo8nz,31,40,0|1udo8o0,49,41,1|1upwwjz,49,41,1|1upwwk0,31,40,0|1uwebbz,31,40,0|1uwebc0,49,41,1|1v8mz7z,49,41,1|1v8mz80,31,40,0|1vf4dzz,31,40,0|1vf4e00,49,41,1|1vrd1vz,49,41,1|1vrd1w0,31,40,0|NaN,31,40,0\",\"America/Havana|,0,106,0|-15r0u2x,0,106,0|-15r0u2w,77,107,0|-n7762p,77,107,0|-n7762o,45,59,0|-louq41,45,59,0|-louq40,48,40,1|-likvk1,48,40,1|-likvk0,45,59,0|-ffsvg1,45,59,0|-ffsvg0,48,40,1|-fb4fk1,48,40,1|-fb4fk0,45,59,0|-ex2ss1,45,59,0|-ex2ss0,48,40,1|-es1e81,48,40,1|-es1e80,45,59,0|-edzrg1,45,59,0|-edzrg0,48,40,1|-e9bbk1,48,40,1|-e9bbk0,45,59,0|-cttjg1,45,59,0|-cttjg0,48,40,1|-cp53k1,48,40,1|-cp53k0,45,59,0|-cb3gs1,45,59,0|-cb3gs0,48,40,1|-c6f0w1,48,40,1|-c6f0w0,45,59,0|-2e5gs1,45,59,0|-2e5gs0,48,40,1|-27xgw1,48,40,1|-27xgw0,45,59,0|-1vj3g1,45,59,0|-1vj3g0,48,40,1|-1p1u81,48,40,1|-1p1u80,45,59,0|-1fdm41,45,59,0|-1fdm40,48,40,1|-17enk1,48,40,1|-17enk0,45,59,0|-w8q41,45,59,0|-w8q40,48,40,1|-ookw1,48,40,1|-ookw0,45,59,0|-csq41,45,59,0|-csq40,48,40,1|-3frk1,48,40,1|-3frk0,45,59,0|5xcjz,45,59,0|5xck0,48,40,1|fab3z,48,40,1|fab40,45,59,0|onf7z,45,59,0|onf80,48,40,1|ydcfz,48,40,1|ydcg0,45,59,0|17qgjz,45,59,0|17qgk0,48,40,1|1g0j3z,48,40,1|1g0j40,45,59,0|1qgj7z,45,59,0|1qgj80,48,40,1|1ysgfz,48,40,1|1ysgg0,45,59,0|296lvz,45,59,0|296lw0,48,40,1|2hkdrz,48,40,1|2hkds0,45,59,0|2rwojz,45,59,0|2rwok0,48,40,1|319n3z,48,40,1|319n40,45,59,0|3amr7z,45,59,0|3amr80,48,40,1|3kcofz,48,40,1|3kcog0,45,59,0|3tctvz,45,59,0|3tctw0,48,40,1|432r3z,48,40,1|432r40,45,59,0|4cstvz,45,59,0|4cstw0,48,40,1|4kpxrz,48,40,1|4kpxs0,45,59,0|4t05vz,45,59,0|4t05w0,48,40,1|53sz3z,48,40,1|53sz40,45,59,0|5bq8jz,45,59,0|5bq8k0,48,40,1|5mj1rz,48,40,1|5mj1s0,45,59,0|5xc0jz,45,59,0|5xc0k0,48,40,1|6594fz,48,40,1|6594g0,45,59,0|6g237z,45,59,0|6g2380,48,40,1|6nz73z,48,40,1|6nz740,45,59,0|6ys5vz,45,59,0|6ys5w0,48,40,1|76p9rz,48,40,1|76p9s0,45,59,0|7hi8jz,45,59,0|7hi8k0,48,40,1|7psb3z,48,40,1|7psb40,45,59,0|808b7z,45,59,0|808b80,48,40,1|88idrz,48,40,1|88ids0,45,59,0|8gfn7z,45,59,0|8gfn80,48,40,1|8r8gfz,48,40,1|8r8gg0,45,59,0|8z5pvz,45,59,0|8z5pw0,48,40,1|99yj3z,48,40,1|99yj40,45,59,0|9i8r7z,45,59,0|9i8r80,48,40,1|9solrz,48,40,1|9sols0,45,59,0|a0ytvz,45,59,0|a0ytw0,48,40,1|abeofz,48,40,1|abeog0,45,59,0|aketvz,45,59,0|aketw0,48,40,1|auhprz,48,40,1|auhps0,45,59,0|b3hv7z,45,59,0|b3hv80,48,40,1|bd7v7z,48,40,1|bd7v80,45,59,0|bm7xvz,45,59,0|bm7xw0,48,40,1|bvxxvz,48,40,1|bvxxw0,45,59,0|c4y0jz,45,59,0|c4y0k0,48,40,1|ceo0jz,48,40,1|ceo0k0,45,59,0|cno37z,45,59,0|cno380,48,40,1|cxe37z,48,40,1|cxe380,45,59,0|d6e5vz,45,59,0|d6e5w0,48,40,1|dg45vz,48,40,1|dg45w0,45,59,0|dph77z,45,59,0|dph780,48,40,1|dyu8jz,48,40,1|dyu8k0,45,59,0|e879vz,45,59,0|e879w0,48,40,1|ehx9vz,48,40,1|ehx9w0,45,59,0|eqkdvz,45,59,0|eqkdw0,48,40,1|f1d9vz,48,40,1|f1d9w0,45,59,0|f9agjz,45,59,0|f9agk0,48,40,1|fkgb7z,48,40,1|fkgb80,45,59,0|fsdhvz,45,59,0|fsdhw0,48,40,1|g36dvz,48,40,1|g36dw0,45,59,0|gb3kjz,45,59,0|gb3kk0,48,40,1|glwgjz,48,40,1|glwgk0,45,59,0|gu6lvz,45,59,0|gu6lw0,48,40,1|h4mj7z,48,40,1|h4mj80,45,59,0|hcwojz,45,59,0|hcwok0,48,40,1|hnclvz,48,40,1|hnclw0,45,59,0|hv9sjz,45,59,0|hv9sk0,48,40,1|j7vsjz,48,40,1|j7vsk0,45,59,0|jeq37z,45,59,0|jeq380,48,40,1|jqlv7z,48,40,1|jqlv80,45,59,0|jxt4jz,45,59,0|jxt4k0,48,40,1|k9bxvz,48,40,1|k9bxw0,45,59,0|kg68jz,45,59,0|kg68k0,48,40,1|ks20jz,48,40,1|ks20k0,45,59,0|kz99vz,45,59,0|kz99w0,48,40,1|lb51vz,48,40,1|lb51w0,45,59,0|licb7z,45,59,0|licb80,48,40,1|lul1vz,48,40,1|lul1w0,45,59,0|m1sb7z,45,59,0|m1sb80,48,40,1|mcy5vz,48,40,1|mcy5w0,45,59,0|mjfhvz,45,59,0|mjfhw0,48,40,1|mvo8jz,48,40,1|mvo8k0,45,59,0|n25kjz,45,59,0|n25kk0,48,40,1|neeb7z,48,40,1|neeb80,45,59,0|nkvn7z,45,59,0|nkvn80,48,40,1|nx4dvz,48,40,1|nx4dw0,45,59,0|o3yojz,45,59,0|o3yok0,48,40,1|og7f7z,48,40,1|og7f80,45,59,0|omor7z,45,59,0|omor80,48,40,1|oyxhvz,48,40,1|oyxhw0,45,59,0|p5etvz,45,59,0|p5etw0,48,40,1|phnkjz,48,40,1|phnkk0,45,59,0|po4wjz,45,59,0|po4wk0,48,40,1|q0dn7z,48,40,1|q0dn80,45,59,0|q6uz7z,45,59,0|q6uz80,48,40,1|qj3pvz,48,40,1|qj3pw0,45,59,0|qpy0jz,45,59,0|qpy0k0,48,40,1|r26r7z,48,40,1|r26r80,45,59,0|r8o37z,45,59,0|r8o380,48,40,1|rkwtvz,48,40,1|rkwtw0,45,59,0|rre5vz,45,59,0|rre5w0,48,40,1|s3mwjz,48,40,1|s3mwk0,45,59,0|sa48jz,45,59,0|sa48k0,48,40,1|smcz7z,48,40,1|smcz80,45,59,0|ssub7z,45,59,0|ssub80,48,40,1|t531vz,48,40,1|t531w0,45,59,0|tbkdvz,45,59,0|tbkdw0,48,40,1|tnt4jz,48,40,1|tnt4k0,45,59,0|tunf7z,45,59,0|tunf80,48,40,1|u6w5vz,48,40,1|u6w5w0,45,59,0|uddhvz,45,59,0|uddhw0,48,40,1|upm8jz,48,40,1|upm8k0,45,59,0|uw3kjz,45,59,0|uw3kk0,48,40,1|v8cb7z,48,40,1|v8cb80,45,59,0|vetn7z,45,59,0|vetn80,48,40,1|vr2dvz,48,40,1|vr2dw0,45,59,0|vxjpvz,45,59,0|vxjpw0,48,40,1|w9sgjz,48,40,1|w9sgk0,45,59,0|wgmr7z,45,59,0|wgmr80,48,40,1|wsvhvz,48,40,1|wsvhw0,45,59,0|wzctvz,45,59,0|wzctw0,48,40,1|xblkjz,48,40,1|xblkk0,45,59,0|xi2wjz,45,59,0|xi2wk0,48,40,1|xubn7z,48,40,1|xubn80,45,59,0|y0sz7z,45,59,0|y0sz80,48,40,1|yd1pvz,48,40,1|yd1pw0,45,59,0|yjj1vz,45,59,0|yjj1w0,48,40,1|yvrsjz,48,40,1|yvrsk0,45,59,0|z294jz,45,59,0|z294k0,48,40,1|zehv7z,48,40,1|zehv80,45,59,0|zlc5vz,45,59,0|zlc5w0,48,40,1|zxkwjz,48,40,1|zxkwk0,45,59,0|10428jz,45,59,0|10428k0,48,40,1|10gaz7z,48,40,1|10gaz80,45,59,0|10msb7z,45,59,0|10msb80,48,40,1|10z11vz,48,40,1|10z11w0,45,59,0|115idvz,45,59,0|115idw0,48,40,1|11hr4jz,48,40,1|11hr4k0,45,59,0|11o8gjz,45,59,0|11o8gk0,48,40,1|120h77z,48,40,1|120h780,45,59,0|126yj7z,45,59,0|126yj80,48,40,1|12j79vz,48,40,1|12j79w0,45,59,0|12q1kjz,45,59,0|12q1kk0,48,40,1|132ab7z,48,40,1|132ab80,45,59,0|138rn7z,45,59,0|138rn80,48,40,1|13l0dvz,48,40,1|13l0dw0,45,59,0|13rhpvz,45,59,0|13rhpw0,48,40,1|143qgjz,48,40,1|143qgk0,45,59,0|14a7sjz,45,59,0|14a7sk0,48,40,1|14mgj7z,48,40,1|14mgj80,45,59,0|14sxv7z,45,59,0|14sxv80,48,40,1|1556lvz,48,40,1|1556lw0,45,59,0|15c0wjz,45,59,0|15c0wk0,48,40,1|15o9n7z,48,40,1|15o9n80,45,59,0|15uqz7z,45,59,0|15uqz80,48,40,1|166zpvz,48,40,1|166zpw0,45,59,0|16dh1vz,45,59,0|16dh1w0,48,40,1|16ppsjz,48,40,1|16ppsk0,45,59,0|16w74jz,45,59,0|16w74k0,48,40,1|178fv7z,48,40,1|178fv80,45,59,0|17ex77z,45,59,0|17ex780,48,40,1|17r5xvz,48,40,1|17r5xw0,45,59,0|17xn9vz,45,59,0|17xn9w0,48,40,1|189w0jz,48,40,1|189w0k0,45,59,0|18gqb7z,45,59,0|18gqb80,48,40,1|18sz1vz,48,40,1|18sz1w0,45,59,0|18zgdvz,45,59,0|18zgdw0,48,40,1|19bp4jz,48,40,1|19bp4k0,45,59,0|19i6gjz,45,59,0|19i6gk0,48,40,1|19uf77z,48,40,1|19uf780,45,59,0|1a0wj7z,45,59,0|1a0wj80,48,40,1|1ad59vz,48,40,1|1ad59w0,45,59,0|1ajmlvz,45,59,0|1ajmlw0,48,40,1|1avvcjz,48,40,1|1avvck0,45,59,0|1b2pn7z,45,59,0|1b2pn80,48,40,1|1beydvz,48,40,1|1beydw0,45,59,0|1blfpvz,45,59,0|1blfpw0,48,40,1|1bxogjz,48,40,1|1bxogk0,45,59,0|1c45sjz,45,59,0|1c45sk0,48,40,1|1cgej7z,48,40,1|1cgej80,45,59,0|1cmvv7z,45,59,0|1cmvv80,48,40,1|1cz4lvz,48,40,1|1cz4lw0,45,59,0|1d5lxvz,45,59,0|1d5lxw0,48,40,1|1dhuojz,48,40,1|1dhuok0,45,59,0|1doc0jz,45,59,0|1doc0k0,48,40,1|1e0kr7z,48,40,1|1e0kr80,45,59,0|1e7f1vz,45,59,0|1e7f1w0,48,40,1|1ejnsjz,48,40,1|1ejnsk0,45,59,0|1eq54jz,45,59,0|1eq54k0,48,40,1|1f2dv7z,48,40,1|1f2dv80,45,59,0|1f8v77z,45,59,0|1f8v780,48,40,1|1fl3xvz,48,40,1|1fl3xw0,45,59,0|1frl9vz,45,59,0|1frl9w0,48,40,1|1g3u0jz,48,40,1|1g3u0k0,45,59,0|1gabcjz,45,59,0|1gabck0,48,40,1|1gmk37z,48,40,1|1gmk380,45,59,0|1gt1f7z,45,59,0|1gt1f80,48,40,1|1h5a5vz,48,40,1|1h5a5w0,45,59,0|1hc4gjz,45,59,0|1hc4gk0,48,40,1|1hod77z,48,40,1|1hod780,45,59,0|1huuj7z,45,59,0|1huuj80,48,40,1|1i739vz,48,40,1|1i739w0,45,59,0|1idklvz,45,59,0|1idklw0,48,40,1|1iptcjz,48,40,1|1iptck0,45,59,0|1iwaojz,45,59,0|1iwaok0,48,40,1|1j8jf7z,48,40,1|1j8jf80,45,59,0|1jf0r7z,45,59,0|1jf0r80,48,40,1|1jr9hvz,48,40,1|1jr9hw0,45,59,0|1jy3sjz,45,59,0|1jy3sk0,48,40,1|1kacj7z,48,40,1|1kacj80,45,59,0|1kgtv7z,45,59,0|1kgtv80,48,40,1|1kt2lvz,48,40,1|1kt2lw0,45,59,0|1kzjxvz,45,59,0|1kzjxw0,48,40,1|1lbsojz,48,40,1|1lbsok0,45,59,0|1lia0jz,45,59,0|1lia0k0,48,40,1|1luir7z,48,40,1|1luir80,45,59,0|1m1037z,45,59,0|1m10380,48,40,1|1md8tvz,48,40,1|1md8tw0,45,59,0|1mjq5vz,45,59,0|1mjq5w0,48,40,1|1mvywjz,48,40,1|1mvywk0,45,59,0|1n2t77z,45,59,0|1n2t780,48,40,1|1nf1xvz,48,40,1|1nf1xw0,45,59,0|1nlj9vz,45,59,0|1nlj9w0,48,40,1|1nxs0jz,48,40,1|1nxs0k0,45,59,0|1o49cjz,45,59,0|1o49ck0,48,40,1|1ogi37z,48,40,1|1ogi380,45,59,0|1omzf7z,45,59,0|1omzf80,48,40,1|1oz85vz,48,40,1|1oz85w0,45,59,0|1p5phvz,45,59,0|1p5phw0,48,40,1|1phy8jz,48,40,1|1phy8k0,45,59,0|1posj7z,45,59,0|1posj80,48,40,1|1q119vz,48,40,1|1q119w0,45,59,0|1q7ilvz,45,59,0|1q7ilw0,48,40,1|1qjrcjz,48,40,1|1qjrck0,45,59,0|1qq8ojz,45,59,0|1qq8ok0,48,40,1|1r2hf7z,48,40,1|1r2hf80,45,59,0|1r8yr7z,45,59,0|1r8yr80,48,40,1|1rl7hvz,48,40,1|1rl7hw0,45,59,0|1rrotvz,45,59,0|1rrotw0,48,40,1|1s3xkjz,48,40,1|1s3xkk0,45,59,0|1saewjz,45,59,0|1saewk0,48,40,1|1smnn7z,48,40,1|1smnn80,45,59,0|1sthxvz,45,59,0|1sthxw0,48,40,1|1t5qojz,48,40,1|1t5qok0,45,59,0|1tc80jz,45,59,0|1tc80k0,48,40,1|1togr7z,48,40,1|1togr80,45,59,0|1tuy37z,45,59,0|1tuy380,48,40,1|1u76tvz,48,40,1|1u76tw0,45,59,0|1udo5vz,45,59,0|1udo5w0,48,40,1|1upwwjz,48,40,1|1upwwk0,45,59,0|1uwe8jz,45,59,0|1uwe8k0,48,40,1|1v8mz7z,48,40,1|1v8mz80,45,59,0|1vf4b7z,45,59,0|1vf4b80,48,40,1|1vrd1vz,48,40,1|1vrd1w0,45,59,0|NaN,45,59,0\",\"America/Hermosillo|,0,108,0|-p1u4k1,0,108,0|-p1u4k0,44,62,0|-m7mko1,44,62,0|-m7mko0,45,63,0|-kf67c1,45,63,0|-kf67c0,44,62,0|-k6j3c1,44,62,0|-k6j3c0,45,63,0|-jypm01,45,63,0|-jypm00,44,62,0|-jpan81,44,62,0|-jpan80,45,63,0|-eg9601,45,63,0|-eg9600,44,62,0|-axv381,44,62,0|-axv380,46,38,0|m7z,46,38,0|m80,44,62,0|dphibz,44,62,0|dphic0,47,63,1|dzxcvz,47,63,1|dzxcw0,44,62,0|e87kzz,44,62,0|e87l00,47,63,1|einfjz,47,63,1|einfk0,44,62,0|eqxnnz,44,62,0|eqxno0,47,63,1|f1di7z,47,63,1|f1di80,44,62,0|NaN,44,62,0\",\"America/Indiana/Indianapolis|,0,109,0|-18y0m01,0,109,0|-18y0m00,45,63,0|-r0esg1,45,63,0|-r0esg0,48,59,1|-qplz81,48,59,1|-qplz80,45,63,0|-qhops1,45,63,0|-qhops0,48,59,1|-q6vwk1,48,59,1|-q6vwk0,45,63,0|-evzog1,45,63,0|-evzog0,48,59,1|-eqy9w1,48,59,1|-eqy9w0,45,63,0|-ek21s1,45,63,0|-ek21s0,52,59,1|-cq2tg1,52,59,1|-cq2tg0,53,59,1|-cnp0k1,53,59,1|-cnp0k0,45,63,0|-ccw1s1,45,63,0|-ccw1s0,48,59,1|-c4yxw1,48,59,1|-c4yxw0,45,63,0|-bu5z41,45,63,0|-bu5z40,48,59,1|-bm8v81,48,59,1|-bm8v80,45,63,0|-bbfwg1,45,63,0|-bbfwg0,48,59,1|-b3isk1,48,59,1|-b3isk0,45,63,0|-aspts1,45,63,0|-aspts0,48,59,1|-akspw1,48,59,1|-akspw0,45,63,0|-a9msg1,45,63,0|-a9msg0,48,59,1|-a22n81,48,59,1|-a22n80,45,63,0|-9qwps1,45,63,0|-9qwps0,48,59,1|-9izlw1,48,59,1|-9izlw0,45,63,0|-986n41,45,63,0|-986n40,48,59,1|-909j81,48,59,1|-909j80,45,63,0|-8pgkg1,45,63,0|-8pgkg0,48,59,1|-8hjgk1,48,59,1|-8hjgk0,45,63,0|-86qhs1,45,63,0|-86qhs0,48,59,1|-7ytdw1,48,59,1|-7ytdw0,45,63,0|-7o0f41,45,63,0|-7o0f40,43,59,0|-6ea781,43,59,0|-6ea780,45,63,0|-63h8g1,45,63,0|-63h8g0,43,59,0|-cskk1,43,59,0|-cskk0,61,40,1|-3fm01,61,40,1|-3fm00,43,59,0|5xi3z,43,59,0|5xi40,61,40,1|fagnz,61,40,1|fago0,43,59,0|ix323z,43,59,0|ix3240,61,40,1|j7vvbz,61,40,1|j7vvc0,43,59,0|jeq8rz,43,59,0|jeq8s0,61,40,1|jqywnz,61,40,1|jqywo0,43,59,0|jxgbfz,43,59,0|jxgbg0,61,40,1|k9ozbz,61,40,1|k9ozc0,43,59,0|kg6e3z,43,59,0|kg6e40,61,40,1|ksf1zz,61,40,1|ksf200,43,59,0|kz9ffz,43,59,0|kz9fg0,61,40,1|lbi3bz,61,40,1|lbi3c0,43,59,0|lhzi3z,43,59,0|lhzi40,61,40,1|lu85zz,61,40,1|lu8600,43,59,0|m0pkrz,43,59,0|m0pks0,61,40,1|mcy8nz,61,40,1|mcy8o0,43,59,0|mjfnfz,43,59,0|mjfng0,61,40,1|mvobbz,61,40,1|mvobc0,43,59,0|n25q3z,43,59,0|n25q40,61,40,1|needzz,61,40,1|neee00,43,59,0|nkvsrz,43,59,0|nkvss0,61,40,1|nx4gnz,61,40,1|nx4go0,43,59,0|o3yu3z,43,59,0|o3yu40,61,40,1|og7hzz,61,40,1|og7i00,43,59,0|omowrz,43,59,0|omows0,61,40,1|oyxknz,61,40,1|oyxko0,43,59,0|p5ezfz,43,59,0|p5ezg0,61,40,1|phnnbz,61,40,1|phnnc0,43,59,0|po523z,43,59,0|po5240,61,40,1|q0dpzz,61,40,1|q0dq00,43,59,0|q6v4rz,43,59,0|q6v4s0,61,40,1|qj3snz,61,40,1|qj3so0,43,59,0|qpy63z,43,59,0|qpy640,61,40,1|r26tzz,61,40,1|r26u00,43,59,0|r8o8rz,43,59,0|r8o8s0,61,40,1|rkwwnz,61,40,1|rkwwo0,43,59,0|rrebfz,43,59,0|rrebg0,61,40,1|s3mzbz,61,40,1|s3mzc0,43,59,0|sa4e3z,43,59,0|sa4e40,61,40,1|smd1zz,61,40,1|smd200,43,59,0|ssugrz,43,59,0|ssugs0,61,40,1|t534nz,61,40,1|t534o0,43,59,0|tbkjfz,43,59,0|tbkjg0,61,40,1|tnt7bz,61,40,1|tnt7c0,43,59,0|tunkrz,43,59,0|tunks0,61,40,1|u6w8nz,61,40,1|u6w8o0,43,59,0|uddnfz,43,59,0|uddng0,61,40,1|upmbbz,61,40,1|upmbc0,43,59,0|uw3q3z,43,59,0|uw3q40,61,40,1|v8cdzz,61,40,1|v8ce00,43,59,0|vetsrz,43,59,0|vetss0,61,40,1|vr2gnz,61,40,1|vr2go0,43,59,0|vxjvfz,43,59,0|vxjvg0,61,40,1|w9sjbz,61,40,1|w9sjc0,43,59,0|wgmwrz,43,59,0|wgmws0,61,40,1|wsvknz,61,40,1|wsvko0,43,59,0|wzczfz,43,59,0|wzczg0,61,40,1|xblnbz,61,40,1|xblnc0,43,59,0|xi323z,43,59,0|xi3240,61,40,1|xubpzz,61,40,1|xubq00,43,59,0|y0t4rz,43,59,0|y0t4s0,61,40,1|yd1snz,61,40,1|yd1so0,43,59,0|yjj7fz,43,59,0|yjj7g0,61,40,1|yvrvbz,61,40,1|yvrvc0,43,59,0|z29a3z,43,59,0|z29a40,61,40,1|zehxzz,61,40,1|zehy00,43,59,0|zlcbfz,43,59,0|zlcbg0,61,40,1|zxkzbz,61,40,1|zxkzc0,43,59,0|1042e3z,43,59,0|1042e40,61,40,1|10gb1zz,61,40,1|10gb200,43,59,0|10msgrz,43,59,0|10msgs0,61,40,1|10z14nz,61,40,1|10z14o0,43,59,0|115ijfz,43,59,0|115ijg0,61,40,1|11hr7bz,61,40,1|11hr7c0,43,59,0|11o8m3z,43,59,0|11o8m40,61,40,1|120h9zz,61,40,1|120ha00,43,59,0|126yorz,43,59,0|126yos0,61,40,1|12j7cnz,61,40,1|12j7co0,43,59,0|12q1q3z,43,59,0|12q1q40,61,40,1|132adzz,61,40,1|132ae00,43,59,0|138rsrz,43,59,0|138rss0,61,40,1|13l0gnz,61,40,1|13l0go0,43,59,0|13rhvfz,43,59,0|13rhvg0,61,40,1|143qjbz,61,40,1|143qjc0,43,59,0|14a7y3z,43,59,0|14a7y40,61,40,1|14mglzz,61,40,1|14mgm00,43,59,0|14sy0rz,43,59,0|14sy0s0,61,40,1|1556onz,61,40,1|1556oo0,43,59,0|15c123z,43,59,0|15c1240,61,40,1|15o9pzz,61,40,1|15o9q00,43,59,0|15ur4rz,43,59,0|15ur4s0,61,40,1|166zsnz,61,40,1|166zso0,43,59,0|16dh7fz,43,59,0|16dh7g0,61,40,1|16ppvbz,61,40,1|16ppvc0,43,59,0|16w7a3z,43,59,0|16w7a40,61,40,1|178fxzz,61,40,1|178fy00,43,59,0|17excrz,43,59,0|17excs0,61,40,1|17r60nz,61,40,1|17r60o0,43,59,0|17xnffz,43,59,0|17xnfg0,61,40,1|189w3bz,61,40,1|189w3c0,43,59,0|18gqgrz,43,59,0|18gqgs0,61,40,1|18sz4nz,61,40,1|18sz4o0,43,59,0|18zgjfz,43,59,0|18zgjg0,61,40,1|19bp7bz,61,40,1|19bp7c0,43,59,0|19i6m3z,43,59,0|19i6m40,61,40,1|19uf9zz,61,40,1|19ufa00,43,59,0|1a0worz,43,59,0|1a0wos0,61,40,1|1ad5cnz,61,40,1|1ad5co0,43,59,0|1ajmrfz,43,59,0|1ajmrg0,61,40,1|1avvfbz,61,40,1|1avvfc0,43,59,0|1b2psrz,43,59,0|1b2pss0,61,40,1|1beygnz,61,40,1|1beygo0,43,59,0|1blfvfz,43,59,0|1blfvg0,61,40,1|1bxojbz,61,40,1|1bxojc0,43,59,0|1c45y3z,43,59,0|1c45y40,61,40,1|1cgelzz,61,40,1|1cgem00,43,59,0|1cmw0rz,43,59,0|1cmw0s0,61,40,1|1cz4onz,61,40,1|1cz4oo0,43,59,0|1d5m3fz,43,59,0|1d5m3g0,61,40,1|1dhurbz,61,40,1|1dhurc0,43,59,0|1doc63z,43,59,0|1doc640,61,40,1|1e0ktzz,61,40,1|1e0ku00,43,59,0|1e7f7fz,43,59,0|1e7f7g0,61,40,1|1ejnvbz,61,40,1|1ejnvc0,43,59,0|1eq5a3z,43,59,0|1eq5a40,61,40,1|1f2dxzz,61,40,1|1f2dy00,43,59,0|1f8vcrz,43,59,0|1f8vcs0,61,40,1|1fl40nz,61,40,1|1fl40o0,43,59,0|1frlffz,43,59,0|1frlfg0,61,40,1|1g3u3bz,61,40,1|1g3u3c0,43,59,0|1gabi3z,43,59,0|1gabi40,61,40,1|1gmk5zz,61,40,1|1gmk600,43,59,0|1gt1krz,43,59,0|1gt1ks0,61,40,1|1h5a8nz,61,40,1|1h5a8o0,43,59,0|1hc4m3z,43,59,0|1hc4m40,61,40,1|1hod9zz,61,40,1|1hoda00,43,59,0|1huuorz,43,59,0|1huuos0,61,40,1|1i73cnz,61,40,1|1i73co0,43,59,0|1idkrfz,43,59,0|1idkrg0,61,40,1|1iptfbz,61,40,1|1iptfc0,43,59,0|1iwau3z,43,59,0|1iwau40,61,40,1|1j8jhzz,61,40,1|1j8ji00,43,59,0|1jf0wrz,43,59,0|1jf0ws0,61,40,1|1jr9knz,61,40,1|1jr9ko0,43,59,0|1jy3y3z,43,59,0|1jy3y40,61,40,1|1kaclzz,61,40,1|1kacm00,43,59,0|1kgu0rz,43,59,0|1kgu0s0,61,40,1|1kt2onz,61,40,1|1kt2oo0,43,59,0|1kzk3fz,43,59,0|1kzk3g0,61,40,1|1lbsrbz,61,40,1|1lbsrc0,43,59,0|1lia63z,43,59,0|1lia640,61,40,1|1luitzz,61,40,1|1luiu00,43,59,0|1m108rz,43,59,0|1m108s0,61,40,1|1md8wnz,61,40,1|1md8wo0,43,59,0|1mjqbfz,43,59,0|1mjqbg0,61,40,1|1mvyzbz,61,40,1|1mvyzc0,43,59,0|1n2tcrz,43,59,0|1n2tcs0,61,40,1|1nf20nz,61,40,1|1nf20o0,43,59,0|1nljffz,43,59,0|1nljfg0,61,40,1|1nxs3bz,61,40,1|1nxs3c0,43,59,0|1o49i3z,43,59,0|1o49i40,61,40,1|1ogi5zz,61,40,1|1ogi600,43,59,0|1omzkrz,43,59,0|1omzks0,61,40,1|1oz88nz,61,40,1|1oz88o0,43,59,0|1p5pnfz,43,59,0|1p5png0,61,40,1|1phybbz,61,40,1|1phybc0,43,59,0|1posorz,43,59,0|1posos0,61,40,1|1q11cnz,61,40,1|1q11co0,43,59,0|1q7irfz,43,59,0|1q7irg0,61,40,1|1qjrfbz,61,40,1|1qjrfc0,43,59,0|1qq8u3z,43,59,0|1qq8u40,61,40,1|1r2hhzz,61,40,1|1r2hi00,43,59,0|1r8ywrz,43,59,0|1r8yws0,61,40,1|1rl7knz,61,40,1|1rl7ko0,43,59,0|1rrozfz,43,59,0|1rrozg0,61,40,1|1s3xnbz,61,40,1|1s3xnc0,43,59,0|1saf23z,43,59,0|1saf240,61,40,1|1smnpzz,61,40,1|1smnq00,43,59,0|1sti3fz,43,59,0|1sti3g0,61,40,1|1t5qrbz,61,40,1|1t5qrc0,43,59,0|1tc863z,43,59,0|1tc8640,61,40,1|1togtzz,61,40,1|1togu00,43,59,0|1tuy8rz,43,59,0|1tuy8s0,61,40,1|1u76wnz,61,40,1|1u76wo0,43,59,0|1udobfz,43,59,0|1udobg0,61,40,1|1upwzbz,61,40,1|1upwzc0,43,59,0|1uwee3z,43,59,0|1uwee40,61,40,1|1v8n1zz,61,40,1|1v8n200,43,59,0|1vf4grz,43,59,0|1vf4gs0,61,40,1|1vrd4nz,61,40,1|1vrd4o0,43,59,0|NaN,43,59,0\",\"America/Indiana/Knox|,0,110,0|-18y0m01,0,110,0|-18y0m00,45,63,0|-r0esg1,45,63,0|-r0esg0,48,59,1|-qplz81,48,59,1|-qplz80,45,63,0|-qhops1,45,63,0|-qhops0,48,59,1|-q6vwk1,48,59,1|-q6vwk0,45,63,0|-ek21s1,45,63,0|-ek21s0,52,59,1|-cq2tg1,52,59,1|-cq2tg0,53,59,1|-cnp0k1,53,59,1|-cnp0k0,45,63,0|-bu5z41,45,63,0|-bu5z40,48,59,1|-bm8v81,48,59,1|-bm8v80,45,63,0|-bbfwg1,45,63,0|-bbfwg0,48,59,1|-b3isk1,48,59,1|-b3isk0,45,63,0|-aspts1,45,63,0|-aspts0,48,59,1|-akspw1,48,59,1|-akspw0,45,63,0|-a9msg1,45,63,0|-a9msg0,48,59,1|-a22n81,48,59,1|-a22n80,45,63,0|-9qwps1,45,63,0|-9qwps0,48,59,1|-9izlw1,48,59,1|-9izlw0,45,63,0|-986n41,45,63,0|-986n40,48,59,1|-909j81,48,59,1|-909j80,45,63,0|-8pgkg1,45,63,0|-8pgkg0,48,59,1|-8hjgk1,48,59,1|-8hjgk0,45,63,0|-86qhs1,45,63,0|-86qhs0,48,59,1|-7ytdw1,48,59,1|-7ytdw0,45,63,0|-7o0f41,45,63,0|-7o0f40,48,59,1|-7eahw1,48,59,1|-7eahw0,45,63,0|-74xds1,45,63,0|-74xds0,48,59,1|-6vkf81,48,59,1|-6vkf80,45,63,0|-6m7b41,45,63,0|-6m7b40,48,59,1|-6ea781,48,59,1|-6ea780,45,63,0|-63h8g1,45,63,0|-63h8g0,48,59,1|-5vk4k1,48,59,1|-5vk4k0,45,63,0|-5kr5s1,45,63,0|-5kr5s0,48,59,1|-5be781,48,59,1|-5be780,45,63,0|-521341,45,63,0|-521340,48,59,1|-4sb5w1,48,59,1|-4sb5w0,45,63,0|-4iy1s1,45,63,0|-4iy1s0,48,59,1|-49l381,48,59,1|-49l380,45,63,0|-407z41,45,63,0|-407z40,43,59,0|-384xw1,43,59,0|-384xw0,45,63,0|-1e8n41,45,63,0|-1e8n40,48,59,1|-14vok1,48,59,1|-14vok0,45,63,0|-vikg1,45,63,0|-vikg0,48,59,1|-m5lw1,48,59,1|-m5lw0,45,63,0|-cshs1,45,63,0|-cshs0,48,59,1|-3fj81,48,59,1|-3fj80,45,63,0|5xkvz,45,63,0|5xkw0,48,59,1|fajfz,48,59,1|fajg0,45,63,0|onnjz,45,63,0|onnk0,48,59,1|ydkrz,48,59,1|ydks0,45,63,0|17qovz,45,63,0|17qow0,48,59,1|1h3nfz,48,59,1|1h3ng0,45,63,0|1qgrjz,45,63,0|1qgrk0,48,59,1|1ztq3z,48,59,1|1ztq40,45,63,0|23ffjz,45,63,0|23ffk0,48,59,1|2ijsrz,48,59,1|2ijss0,45,63,0|2oo8vz,45,63,0|2oo8w0,48,59,1|319vfz,48,59,1|319vg0,45,63,0|3amzjz,45,63,0|3amzk0,48,59,1|3kcwrz,48,59,1|3kcws0,45,63,0|3td27z,45,63,0|3td280,48,59,1|432zfz,48,59,1|432zg0,45,63,0|4cg3jz,45,63,0|4cg3k0,48,59,1|4lt23z,48,59,1|4lt240,45,63,0|4v667z,45,63,0|4v6680,48,59,1|54j4rz,48,59,1|54j4s0,45,63,0|5dw8vz,45,63,0|5dw8w0,48,59,1|5n97fz,48,59,1|5n97g0,45,63,0|5wmbjz,45,63,0|5wmbk0,48,59,1|65za3z,48,59,1|65za40,45,63,0|6fce7z,45,63,0|6fce80,48,59,1|6p2bfz,48,59,1|6p2bg0,45,63,0|6y2gvz,45,63,0|6y2gw0,48,59,1|77se3z,48,59,1|77se40,45,63,0|7h5i7z,45,63,0|7h5i80,48,59,1|7qigrz,48,59,1|7qigs0,45,63,0|7zvkvz,45,63,0|7zvkw0,48,59,1|898jfz,48,59,1|898jg0,45,63,0|8ilnjz,45,63,0|8ilnk0,48,59,1|8rym3z,48,59,1|8rym40,45,63,0|908u7z,45,63,0|908u80,48,59,1|9aoorz,48,59,1|9aoos0,45,63,0|9iywvz,45,63,0|9iyww0,48,59,1|9trq3z,48,59,1|9trq40,45,63,0|a1ozjz,45,63,0|a1ozk0,48,59,1|achsrz,48,59,1|achss0,45,63,0|akf27z,45,63,0|akf280,48,59,1|av7vfz,48,59,1|av7vg0,45,63,0|b3i3jz,45,63,0|b3i3k0,48,59,1|bdxy3z,48,59,1|bdxy40,43,59,0|ix323z,43,59,0|ix3240,48,59,1|j7vy3z,48,59,1|j7vy40,45,63,0|jeqbjz,45,63,0|jeqbk0,48,59,1|jqyzfz,48,59,1|jqyzg0,45,63,0|jxge7z,45,63,0|jxge80,48,59,1|k9p23z,48,59,1|k9p240,45,63,0|kg6gvz,45,63,0|kg6gw0,48,59,1|ksf4rz,48,59,1|ksf4s0,45,63,0|kz9i7z,45,63,0|kz9i80,48,59,1|lbi63z,48,59,1|lbi640,45,63,0|lhzkvz,45,63,0|lhzkw0,48,59,1|lu88rz,48,59,1|lu88s0,45,63,0|m0pnjz,45,63,0|m0pnk0,48,59,1|mcybfz,48,59,1|mcybg0,45,63,0|mjfq7z,45,63,0|mjfq80,48,59,1|mvoe3z,48,59,1|mvoe40,45,63,0|n25svz,45,63,0|n25sw0,48,59,1|neegrz,48,59,1|neegs0,45,63,0|nkvvjz,45,63,0|nkvvk0,48,59,1|nx4jfz,48,59,1|nx4jg0,45,63,0|o3ywvz,45,63,0|o3yww0,48,59,1|og7krz,48,59,1|og7ks0,45,63,0|omozjz,45,63,0|omozk0,48,59,1|oyxnfz,48,59,1|oyxng0,45,63,0|p5f27z,45,63,0|p5f280,48,59,1|phnq3z,48,59,1|phnq40,45,63,0|po54vz,45,63,0|po54w0,48,59,1|q0dsrz,48,59,1|q0dss0,45,63,0|q6v7jz,45,63,0|q6v7k0,48,59,1|qj3vfz,48,59,1|qj3vg0,45,63,0|qpy8vz,45,63,0|qpy8w0,48,59,1|r26wrz,48,59,1|r26ws0,45,63,0|r8objz,45,63,0|r8obk0,48,59,1|rkwzfz,48,59,1|rkwzg0,45,63,0|rree7z,45,63,0|rree80,48,59,1|s3n23z,48,59,1|s3n240,45,63,0|sa4gvz,45,63,0|sa4gw0,48,59,1|smd4rz,48,59,1|smd4s0,45,63,0|ssujjz,45,63,0|ssujk0,48,59,1|t537fz,48,59,1|t537g0,45,63,0|tbkm7z,45,63,0|tbkm80,48,59,1|tnta3z,48,59,1|tnta40,45,63,0|tunnjz,45,63,0|tunnk0,48,59,1|u6wbfz,48,59,1|u6wbg0,45,63,0|uddq7z,45,63,0|uddq80,48,59,1|upme3z,48,59,1|upme40,45,63,0|uw3svz,45,63,0|uw3sw0,48,59,1|v8cgrz,48,59,1|v8cgs0,45,63,0|vetvjz,45,63,0|vetvk0,48,59,1|vr2jfz,48,59,1|vr2jg0,45,63,0|vxjy7z,45,63,0|vxjy80,48,59,1|w9sm3z,48,59,1|w9sm40,45,63,0|wgmzjz,45,63,0|wgmzk0,48,59,1|wsvnfz,48,59,1|wsvng0,45,63,0|wzd27z,45,63,0|wzd280,48,59,1|xblq3z,48,59,1|xblq40,45,63,0|xi34vz,45,63,0|xi34w0,48,59,1|xubsrz,48,59,1|xubss0,45,63,0|y0t7jz,45,63,0|y0t7k0,48,59,1|yd1vfz,48,59,1|yd1vg0,45,63,0|yjja7z,45,63,0|yjja80,48,59,1|yvry3z,48,59,1|yvry40,45,63,0|z29cvz,45,63,0|z29cw0,48,59,1|zei0rz,48,59,1|zei0s0,45,63,0|zlce7z,45,63,0|zlce80,48,59,1|zxl23z,48,59,1|zxl240,45,63,0|1042gvz,45,63,0|1042gw0,48,59,1|10gb4rz,48,59,1|10gb4s0,45,63,0|10msjjz,45,63,0|10msjk0,48,59,1|10z17fz,48,59,1|10z17g0,45,63,0|115im7z,45,63,0|115im80,48,59,1|11hra3z,48,59,1|11hra40,45,63,0|11o8ovz,45,63,0|11o8ow0,48,59,1|120hcrz,48,59,1|120hcs0,45,63,0|126yrjz,45,63,0|126yrk0,48,59,1|12j7ffz,48,59,1|12j7fg0,45,63,0|12q1svz,45,63,0|12q1sw0,48,59,1|132agrz,48,59,1|132ags0,45,63,0|138rvjz,45,63,0|138rvk0,48,59,1|13l0jfz,48,59,1|13l0jg0,45,63,0|13rhy7z,45,63,0|13rhy80,48,59,1|143qm3z,48,59,1|143qm40,45,63,0|14a80vz,45,63,0|14a80w0,48,59,1|14mgorz,48,59,1|14mgos0,45,63,0|14sy3jz,45,63,0|14sy3k0,48,59,1|1556rfz,48,59,1|1556rg0,45,63,0|15c14vz,45,63,0|15c14w0,48,59,1|15o9srz,48,59,1|15o9ss0,45,63,0|15ur7jz,45,63,0|15ur7k0,48,59,1|166zvfz,48,59,1|166zvg0,45,63,0|16dha7z,45,63,0|16dha80,48,59,1|16ppy3z,48,59,1|16ppy40,45,63,0|16w7cvz,45,63,0|16w7cw0,48,59,1|178g0rz,48,59,1|178g0s0,45,63,0|17exfjz,45,63,0|17exfk0,48,59,1|17r63fz,48,59,1|17r63g0,45,63,0|17xni7z,45,63,0|17xni80,48,59,1|189w63z,48,59,1|189w640,45,63,0|18gqjjz,45,63,0|18gqjk0,48,59,1|18sz7fz,48,59,1|18sz7g0,45,63,0|18zgm7z,45,63,0|18zgm80,48,59,1|19bpa3z,48,59,1|19bpa40,45,63,0|19i6ovz,45,63,0|19i6ow0,48,59,1|19ufcrz,48,59,1|19ufcs0,45,63,0|1a0wrjz,45,63,0|1a0wrk0,48,59,1|1ad5ffz,48,59,1|1ad5fg0,45,63,0|1ajmu7z,45,63,0|1ajmu80,48,59,1|1avvi3z,48,59,1|1avvi40,45,63,0|1b2pvjz,45,63,0|1b2pvk0,48,59,1|1beyjfz,48,59,1|1beyjg0,45,63,0|1blfy7z,45,63,0|1blfy80,48,59,1|1bxom3z,48,59,1|1bxom40,45,63,0|1c460vz,45,63,0|1c460w0,48,59,1|1cgeorz,48,59,1|1cgeos0,45,63,0|1cmw3jz,45,63,0|1cmw3k0,48,59,1|1cz4rfz,48,59,1|1cz4rg0,45,63,0|1d5m67z,45,63,0|1d5m680,48,59,1|1dhuu3z,48,59,1|1dhuu40,45,63,0|1doc8vz,45,63,0|1doc8w0,48,59,1|1e0kwrz,48,59,1|1e0kws0,45,63,0|1e7fa7z,45,63,0|1e7fa80,48,59,1|1ejny3z,48,59,1|1ejny40,45,63,0|1eq5cvz,45,63,0|1eq5cw0,48,59,1|1f2e0rz,48,59,1|1f2e0s0,45,63,0|1f8vfjz,45,63,0|1f8vfk0,48,59,1|1fl43fz,48,59,1|1fl43g0,45,63,0|1frli7z,45,63,0|1frli80,48,59,1|1g3u63z,48,59,1|1g3u640,45,63,0|1gabkvz,45,63,0|1gabkw0,48,59,1|1gmk8rz,48,59,1|1gmk8s0,45,63,0|1gt1njz,45,63,0|1gt1nk0,48,59,1|1h5abfz,48,59,1|1h5abg0,45,63,0|1hc4ovz,45,63,0|1hc4ow0,48,59,1|1hodcrz,48,59,1|1hodcs0,45,63,0|1huurjz,45,63,0|1huurk0,48,59,1|1i73ffz,48,59,1|1i73fg0,45,63,0|1idku7z,45,63,0|1idku80,48,59,1|1ipti3z,48,59,1|1ipti40,45,63,0|1iwawvz,45,63,0|1iwaww0,48,59,1|1j8jkrz,48,59,1|1j8jks0,45,63,0|1jf0zjz,45,63,0|1jf0zk0,48,59,1|1jr9nfz,48,59,1|1jr9ng0,45,63,0|1jy40vz,45,63,0|1jy40w0,48,59,1|1kacorz,48,59,1|1kacos0,45,63,0|1kgu3jz,45,63,0|1kgu3k0,48,59,1|1kt2rfz,48,59,1|1kt2rg0,45,63,0|1kzk67z,45,63,0|1kzk680,48,59,1|1lbsu3z,48,59,1|1lbsu40,45,63,0|1lia8vz,45,63,0|1lia8w0,48,59,1|1luiwrz,48,59,1|1luiws0,45,63,0|1m10bjz,45,63,0|1m10bk0,48,59,1|1md8zfz,48,59,1|1md8zg0,45,63,0|1mjqe7z,45,63,0|1mjqe80,48,59,1|1mvz23z,48,59,1|1mvz240,45,63,0|1n2tfjz,45,63,0|1n2tfk0,48,59,1|1nf23fz,48,59,1|1nf23g0,45,63,0|1nlji7z,45,63,0|1nlji80,48,59,1|1nxs63z,48,59,1|1nxs640,45,63,0|1o49kvz,45,63,0|1o49kw0,48,59,1|1ogi8rz,48,59,1|1ogi8s0,45,63,0|1omznjz,45,63,0|1omznk0,48,59,1|1oz8bfz,48,59,1|1oz8bg0,45,63,0|1p5pq7z,45,63,0|1p5pq80,48,59,1|1phye3z,48,59,1|1phye40,45,63,0|1posrjz,45,63,0|1posrk0,48,59,1|1q11ffz,48,59,1|1q11fg0,45,63,0|1q7iu7z,45,63,0|1q7iu80,48,59,1|1qjri3z,48,59,1|1qjri40,45,63,0|1qq8wvz,45,63,0|1qq8ww0,48,59,1|1r2hkrz,48,59,1|1r2hks0,45,63,0|1r8yzjz,45,63,0|1r8yzk0,48,59,1|1rl7nfz,48,59,1|1rl7ng0,45,63,0|1rrp27z,45,63,0|1rrp280,48,59,1|1s3xq3z,48,59,1|1s3xq40,45,63,0|1saf4vz,45,63,0|1saf4w0,48,59,1|1smnsrz,48,59,1|1smnss0,45,63,0|1sti67z,45,63,0|1sti680,48,59,1|1t5qu3z,48,59,1|1t5qu40,45,63,0|1tc88vz,45,63,0|1tc88w0,48,59,1|1togwrz,48,59,1|1togws0,45,63,0|1tuybjz,45,63,0|1tuybk0,48,59,1|1u76zfz,48,59,1|1u76zg0,45,63,0|1udoe7z,45,63,0|1udoe80,48,59,1|1upx23z,48,59,1|1upx240,45,63,0|1uwegvz,45,63,0|1uwegw0,48,59,1|1v8n4rz,48,59,1|1v8n4s0,45,63,0|1vf4jjz,45,63,0|1vf4jk0,48,59,1|1vrd7fz,48,59,1|1vrd7g0,45,63,0|NaN,45,63,0\",\"America/Indiana/Marengo|,0,111,0|-18y0m01,0,111,0|-18y0m00,45,63,0|-r0esg1,45,63,0|-r0esg0,48,59,1|-qplz81,48,59,1|-qplz80,45,63,0|-qhops1,45,63,0|-qhops0,48,59,1|-q6vwk1,48,59,1|-q6vwk0,45,63,0|-ek21s1,45,63,0|-ek21s0,52,59,1|-cq2tg1,52,59,1|-cq2tg0,53,59,1|-cnp0k1,53,59,1|-cnp0k0,45,63,0|-9qwps1,45,63,0|-9qwps0,48,59,1|-9izlw1,48,59,1|-9izlw0,45,63,0|-86qhs1,45,63,0|-86qhs0,48,59,1|-7ytdw1,48,59,1|-7ytdw0,45,63,0|-7o0f41,45,63,0|-7o0f40,48,59,1|-7g3b81,48,59,1|-7g3b80,45,63,0|-74xds1,45,63,0|-74xds0,48,59,1|-6x09w1,48,59,1|-6x09w0,45,63,0|-6m7b41,45,63,0|-6m7b40,48,59,1|-6ea781,48,59,1|-6ea780,45,63,0|-63h8g1,45,63,0|-63h8g0,48,59,1|-5vk4k1,48,59,1|-5vk4k0,45,63,0|-5kr5s1,45,63,0|-5kr5s0,48,59,1|-5cu1w1,48,59,1|-5cu1w0,45,63,0|-521341,45,63,0|-521340,48,59,1|-4u3z81,48,59,1|-4u3z80,45,63,0|-4iy1s1,45,63,0|-4iy1s0,43,59,0|-cskk1,43,59,0|-cskk0,61,40,1|-3fm01,61,40,1|-3fm00,43,59,0|5xi3z,43,59,0|5xi40,61,40,1|fagnz,61,40,1|fago0,43,59,0|onkrz,43,59,0|onks0,61,40,1|ydhzz,61,40,1|ydi00,43,59,0|17qm3z,43,59,0|17qm40,61,40,1|1h3knz,61,40,1|1h3ko0,43,59,0|1qgorz,43,59,0|1qgos0,61,40,1|1ztnbz,61,40,1|1ztnc0,43,59,0|23fcrz,43,59,0|23fcs0,48,59,1|2ijsrz,48,59,1|2ijss0,43,59,0|2oo63z,43,59,0|2oo640,61,40,1|319snz,61,40,1|319so0,43,59,0|ix323z,43,59,0|ix3240,61,40,1|j7vvbz,61,40,1|j7vvc0,43,59,0|jeq8rz,43,59,0|jeq8s0,61,40,1|jqywnz,61,40,1|jqywo0,43,59,0|jxgbfz,43,59,0|jxgbg0,61,40,1|k9ozbz,61,40,1|k9ozc0,43,59,0|kg6e3z,43,59,0|kg6e40,61,40,1|ksf1zz,61,40,1|ksf200,43,59,0|kz9ffz,43,59,0|kz9fg0,61,40,1|lbi3bz,61,40,1|lbi3c0,43,59,0|lhzi3z,43,59,0|lhzi40,61,40,1|lu85zz,61,40,1|lu8600,43,59,0|m0pkrz,43,59,0|m0pks0,61,40,1|mcy8nz,61,40,1|mcy8o0,43,59,0|mjfnfz,43,59,0|mjfng0,61,40,1|mvobbz,61,40,1|mvobc0,43,59,0|n25q3z,43,59,0|n25q40,61,40,1|needzz,61,40,1|neee00,43,59,0|nkvsrz,43,59,0|nkvss0,61,40,1|nx4gnz,61,40,1|nx4go0,43,59,0|o3yu3z,43,59,0|o3yu40,61,40,1|og7hzz,61,40,1|og7i00,43,59,0|omowrz,43,59,0|omows0,61,40,1|oyxknz,61,40,1|oyxko0,43,59,0|p5ezfz,43,59,0|p5ezg0,61,40,1|phnnbz,61,40,1|phnnc0,43,59,0|po523z,43,59,0|po5240,61,40,1|q0dpzz,61,40,1|q0dq00,43,59,0|q6v4rz,43,59,0|q6v4s0,61,40,1|qj3snz,61,40,1|qj3so0,43,59,0|qpy63z,43,59,0|qpy640,61,40,1|r26tzz,61,40,1|r26u00,43,59,0|r8o8rz,43,59,0|r8o8s0,61,40,1|rkwwnz,61,40,1|rkwwo0,43,59,0|rrebfz,43,59,0|rrebg0,61,40,1|s3mzbz,61,40,1|s3mzc0,43,59,0|sa4e3z,43,59,0|sa4e40,61,40,1|smd1zz,61,40,1|smd200,43,59,0|ssugrz,43,59,0|ssugs0,61,40,1|t534nz,61,40,1|t534o0,43,59,0|tbkjfz,43,59,0|tbkjg0,61,40,1|tnt7bz,61,40,1|tnt7c0,43,59,0|tunkrz,43,59,0|tunks0,61,40,1|u6w8nz,61,40,1|u6w8o0,43,59,0|uddnfz,43,59,0|uddng0,61,40,1|upmbbz,61,40,1|upmbc0,43,59,0|uw3q3z,43,59,0|uw3q40,61,40,1|v8cdzz,61,40,1|v8ce00,43,59,0|vetsrz,43,59,0|vetss0,61,40,1|vr2gnz,61,40,1|vr2go0,43,59,0|vxjvfz,43,59,0|vxjvg0,61,40,1|w9sjbz,61,40,1|w9sjc0,43,59,0|wgmwrz,43,59,0|wgmws0,61,40,1|wsvknz,61,40,1|wsvko0,43,59,0|wzczfz,43,59,0|wzczg0,61,40,1|xblnbz,61,40,1|xblnc0,43,59,0|xi323z,43,59,0|xi3240,61,40,1|xubpzz,61,40,1|xubq00,43,59,0|y0t4rz,43,59,0|y0t4s0,61,40,1|yd1snz,61,40,1|yd1so0,43,59,0|yjj7fz,43,59,0|yjj7g0,61,40,1|yvrvbz,61,40,1|yvrvc0,43,59,0|z29a3z,43,59,0|z29a40,61,40,1|zehxzz,61,40,1|zehy00,43,59,0|zlcbfz,43,59,0|zlcbg0,61,40,1|zxkzbz,61,40,1|zxkzc0,43,59,0|1042e3z,43,59,0|1042e40,61,40,1|10gb1zz,61,40,1|10gb200,43,59,0|10msgrz,43,59,0|10msgs0,61,40,1|10z14nz,61,40,1|10z14o0,43,59,0|115ijfz,43,59,0|115ijg0,61,40,1|11hr7bz,61,40,1|11hr7c0,43,59,0|11o8m3z,43,59,0|11o8m40,61,40,1|120h9zz,61,40,1|120ha00,43,59,0|126yorz,43,59,0|126yos0,61,40,1|12j7cnz,61,40,1|12j7co0,43,59,0|12q1q3z,43,59,0|12q1q40,61,40,1|132adzz,61,40,1|132ae00,43,59,0|138rsrz,43,59,0|138rss0,61,40,1|13l0gnz,61,40,1|13l0go0,43,59,0|13rhvfz,43,59,0|13rhvg0,61,40,1|143qjbz,61,40,1|143qjc0,43,59,0|14a7y3z,43,59,0|14a7y40,61,40,1|14mglzz,61,40,1|14mgm00,43,59,0|14sy0rz,43,59,0|14sy0s0,61,40,1|1556onz,61,40,1|1556oo0,43,59,0|15c123z,43,59,0|15c1240,61,40,1|15o9pzz,61,40,1|15o9q00,43,59,0|15ur4rz,43,59,0|15ur4s0,61,40,1|166zsnz,61,40,1|166zso0,43,59,0|16dh7fz,43,59,0|16dh7g0,61,40,1|16ppvbz,61,40,1|16ppvc0,43,59,0|16w7a3z,43,59,0|16w7a40,61,40,1|178fxzz,61,40,1|178fy00,43,59,0|17excrz,43,59,0|17excs0,61,40,1|17r60nz,61,40,1|17r60o0,43,59,0|17xnffz,43,59,0|17xnfg0,61,40,1|189w3bz,61,40,1|189w3c0,43,59,0|18gqgrz,43,59,0|18gqgs0,61,40,1|18sz4nz,61,40,1|18sz4o0,43,59,0|18zgjfz,43,59,0|18zgjg0,61,40,1|19bp7bz,61,40,1|19bp7c0,43,59,0|19i6m3z,43,59,0|19i6m40,61,40,1|19uf9zz,61,40,1|19ufa00,43,59,0|1a0worz,43,59,0|1a0wos0,61,40,1|1ad5cnz,61,40,1|1ad5co0,43,59,0|1ajmrfz,43,59,0|1ajmrg0,61,40,1|1avvfbz,61,40,1|1avvfc0,43,59,0|1b2psrz,43,59,0|1b2pss0,61,40,1|1beygnz,61,40,1|1beygo0,43,59,0|1blfvfz,43,59,0|1blfvg0,61,40,1|1bxojbz,61,40,1|1bxojc0,43,59,0|1c45y3z,43,59,0|1c45y40,61,40,1|1cgelzz,61,40,1|1cgem00,43,59,0|1cmw0rz,43,59,0|1cmw0s0,61,40,1|1cz4onz,61,40,1|1cz4oo0,43,59,0|1d5m3fz,43,59,0|1d5m3g0,61,40,1|1dhurbz,61,40,1|1dhurc0,43,59,0|1doc63z,43,59,0|1doc640,61,40,1|1e0ktzz,61,40,1|1e0ku00,43,59,0|1e7f7fz,43,59,0|1e7f7g0,61,40,1|1ejnvbz,61,40,1|1ejnvc0,43,59,0|1eq5a3z,43,59,0|1eq5a40,61,40,1|1f2dxzz,61,40,1|1f2dy00,43,59,0|1f8vcrz,43,59,0|1f8vcs0,61,40,1|1fl40nz,61,40,1|1fl40o0,43,59,0|1frlffz,43,59,0|1frlfg0,61,40,1|1g3u3bz,61,40,1|1g3u3c0,43,59,0|1gabi3z,43,59,0|1gabi40,61,40,1|1gmk5zz,61,40,1|1gmk600,43,59,0|1gt1krz,43,59,0|1gt1ks0,61,40,1|1h5a8nz,61,40,1|1h5a8o0,43,59,0|1hc4m3z,43,59,0|1hc4m40,61,40,1|1hod9zz,61,40,1|1hoda00,43,59,0|1huuorz,43,59,0|1huuos0,61,40,1|1i73cnz,61,40,1|1i73co0,43,59,0|1idkrfz,43,59,0|1idkrg0,61,40,1|1iptfbz,61,40,1|1iptfc0,43,59,0|1iwau3z,43,59,0|1iwau40,61,40,1|1j8jhzz,61,40,1|1j8ji00,43,59,0|1jf0wrz,43,59,0|1jf0ws0,61,40,1|1jr9knz,61,40,1|1jr9ko0,43,59,0|1jy3y3z,43,59,0|1jy3y40,61,40,1|1kaclzz,61,40,1|1kacm00,43,59,0|1kgu0rz,43,59,0|1kgu0s0,61,40,1|1kt2onz,61,40,1|1kt2oo0,43,59,0|1kzk3fz,43,59,0|1kzk3g0,61,40,1|1lbsrbz,61,40,1|1lbsrc0,43,59,0|1lia63z,43,59,0|1lia640,61,40,1|1luitzz,61,40,1|1luiu00,43,59,0|1m108rz,43,59,0|1m108s0,61,40,1|1md8wnz,61,40,1|1md8wo0,43,59,0|1mjqbfz,43,59,0|1mjqbg0,61,40,1|1mvyzbz,61,40,1|1mvyzc0,43,59,0|1n2tcrz,43,59,0|1n2tcs0,61,40,1|1nf20nz,61,40,1|1nf20o0,43,59,0|1nljffz,43,59,0|1nljfg0,61,40,1|1nxs3bz,61,40,1|1nxs3c0,43,59,0|1o49i3z,43,59,0|1o49i40,61,40,1|1ogi5zz,61,40,1|1ogi600,43,59,0|1omzkrz,43,59,0|1omzks0,61,40,1|1oz88nz,61,40,1|1oz88o0,43,59,0|1p5pnfz,43,59,0|1p5png0,61,40,1|1phybbz,61,40,1|1phybc0,43,59,0|1posorz,43,59,0|1posos0,61,40,1|1q11cnz,61,40,1|1q11co0,43,59,0|1q7irfz,43,59,0|1q7irg0,61,40,1|1qjrfbz,61,40,1|1qjrfc0,43,59,0|1qq8u3z,43,59,0|1qq8u40,61,40,1|1r2hhzz,61,40,1|1r2hi00,43,59,0|1r8ywrz,43,59,0|1r8yws0,61,40,1|1rl7knz,61,40,1|1rl7ko0,43,59,0|1rrozfz,43,59,0|1rrozg0,61,40,1|1s3xnbz,61,40,1|1s3xnc0,43,59,0|1saf23z,43,59,0|1saf240,61,40,1|1smnpzz,61,40,1|1smnq00,43,59,0|1sti3fz,43,59,0|1sti3g0,61,40,1|1t5qrbz,61,40,1|1t5qrc0,43,59,0|1tc863z,43,59,0|1tc8640,61,40,1|1togtzz,61,40,1|1togu00,43,59,0|1tuy8rz,43,59,0|1tuy8s0,61,40,1|1u76wnz,61,40,1|1u76wo0,43,59,0|1udobfz,43,59,0|1udobg0,61,40,1|1upwzbz,61,40,1|1upwzc0,43,59,0|1uwee3z,43,59,0|1uwee40,61,40,1|1v8n1zz,61,40,1|1v8n200,43,59,0|1vf4grz,43,59,0|1vf4gs0,61,40,1|1vrd4nz,61,40,1|1vrd4o0,43,59,0|NaN,43,59,0\",\"America/Indiana/Petersburg|,0,112,0|-18y0m01,0,112,0|-18y0m00,45,63,0|-r0esg1,45,63,0|-r0esg0,48,59,1|-qplz81,48,59,1|-qplz80,45,63,0|-qhops1,45,63,0|-qhops0,48,59,1|-q6vwk1,48,59,1|-q6vwk0,45,63,0|-ek21s1,45,63,0|-ek21s0,52,59,1|-cq2tg1,52,59,1|-cq2tg0,53,59,1|-cnp0k1,53,59,1|-cnp0k0,45,63,0|-7nnm01,45,63,0|-7nnm00,48,59,1|-7g3b81,48,59,1|-7g3b80,45,63,0|-74xds1,45,63,0|-74xds0,48,59,1|-6x09w1,48,59,1|-6x09w0,45,63,0|-6m7b41,45,63,0|-6m7b40,48,59,1|-6ea781,48,59,1|-6ea780,45,63,0|-63h8g1,45,63,0|-63h8g0,48,59,1|-5vk4k1,48,59,1|-5vk4k0,45,63,0|-5kr5s1,45,63,0|-5kr5s0,48,59,1|-5cu1w1,48,59,1|-5cu1w0,45,63,0|-521341,45,63,0|-521340,48,59,1|-4u3z81,48,59,1|-4u3z80,45,63,0|-4iy1s1,45,63,0|-4iy1s0,48,59,1|-49l381,48,59,1|-49l380,45,63,0|-407z41,45,63,0|-407z40,48,59,1|-3qv0k1,48,59,1|-3qv0k0,45,63,0|-3hhwg1,45,63,0|-3hhwg0,48,59,1|-384xw1,48,59,1|-384xw0,45,63,0|-2yrts1,45,63,0|-2yrts0,48,59,1|-2pev81,48,59,1|-2pev80,45,63,0|-2g1r41,45,63,0|-2g1r40,43,59,0|-1nlr81,43,59,0|-1nlr80,45,63,0|-1e8n41,45,63,0|-1e8n40,48,59,1|-14vok1,48,59,1|-14vok0,45,63,0|-vikg1,45,63,0|-vikg0,48,59,1|-m5lw1,48,59,1|-m5lw0,45,63,0|-cshs1,45,63,0|-cshs0,48,59,1|-3fj81,48,59,1|-3fj80,45,63,0|5xkvz,45,63,0|5xkw0,48,59,1|fajfz,48,59,1|fajg0,45,63,0|onnjz,45,63,0|onnk0,48,59,1|ydkrz,48,59,1|ydks0,45,63,0|17qovz,45,63,0|17qow0,48,59,1|1h3nfz,48,59,1|1h3ng0,45,63,0|1qgrjz,45,63,0|1qgrk0,48,59,1|1ztq3z,48,59,1|1ztq40,45,63,0|23ffjz,45,63,0|23ffk0,48,59,1|2ijsrz,48,59,1|2ijss0,45,63,0|2oo8vz,45,63,0|2oo8w0,48,59,1|319vfz,48,59,1|319vg0,45,63,0|3amzjz,45,63,0|3amzk0,48,59,1|3kcwrz,48,59,1|3kcws0,45,63,0|3td27z,45,63,0|3td280,48,59,1|432zfz,48,59,1|432zg0,43,59,0|ix323z,43,59,0|ix3240,48,59,1|j7vy3z,48,59,1|j7vy40,45,63,0|jeqbjz,45,63,0|jeqbk0,48,59,1|jqyzfz,48,59,1|jqyzg0,43,59,0|jxgbfz,43,59,0|jxgbg0,61,40,1|k9ozbz,61,40,1|k9ozc0,43,59,0|kg6e3z,43,59,0|kg6e40,61,40,1|ksf1zz,61,40,1|ksf200,43,59,0|kz9ffz,43,59,0|kz9fg0,61,40,1|lbi3bz,61,40,1|lbi3c0,43,59,0|lhzi3z,43,59,0|lhzi40,61,40,1|lu85zz,61,40,1|lu8600,43,59,0|m0pkrz,43,59,0|m0pks0,61,40,1|mcy8nz,61,40,1|mcy8o0,43,59,0|mjfnfz,43,59,0|mjfng0,61,40,1|mvobbz,61,40,1|mvobc0,43,59,0|n25q3z,43,59,0|n25q40,61,40,1|needzz,61,40,1|neee00,43,59,0|nkvsrz,43,59,0|nkvss0,61,40,1|nx4gnz,61,40,1|nx4go0,43,59,0|o3yu3z,43,59,0|o3yu40,61,40,1|og7hzz,61,40,1|og7i00,43,59,0|omowrz,43,59,0|omows0,61,40,1|oyxknz,61,40,1|oyxko0,43,59,0|p5ezfz,43,59,0|p5ezg0,61,40,1|phnnbz,61,40,1|phnnc0,43,59,0|po523z,43,59,0|po5240,61,40,1|q0dpzz,61,40,1|q0dq00,43,59,0|q6v4rz,43,59,0|q6v4s0,61,40,1|qj3snz,61,40,1|qj3so0,43,59,0|qpy63z,43,59,0|qpy640,61,40,1|r26tzz,61,40,1|r26u00,43,59,0|r8o8rz,43,59,0|r8o8s0,61,40,1|rkwwnz,61,40,1|rkwwo0,43,59,0|rrebfz,43,59,0|rrebg0,61,40,1|s3mzbz,61,40,1|s3mzc0,43,59,0|sa4e3z,43,59,0|sa4e40,61,40,1|smd1zz,61,40,1|smd200,43,59,0|ssugrz,43,59,0|ssugs0,61,40,1|t534nz,61,40,1|t534o0,43,59,0|tbkjfz,43,59,0|tbkjg0,61,40,1|tnt7bz,61,40,1|tnt7c0,43,59,0|tunkrz,43,59,0|tunks0,61,40,1|u6w8nz,61,40,1|u6w8o0,43,59,0|uddnfz,43,59,0|uddng0,61,40,1|upmbbz,61,40,1|upmbc0,43,59,0|uw3q3z,43,59,0|uw3q40,61,40,1|v8cdzz,61,40,1|v8ce00,43,59,0|vetsrz,43,59,0|vetss0,61,40,1|vr2gnz,61,40,1|vr2go0,43,59,0|vxjvfz,43,59,0|vxjvg0,61,40,1|w9sjbz,61,40,1|w9sjc0,43,59,0|wgmwrz,43,59,0|wgmws0,61,40,1|wsvknz,61,40,1|wsvko0,43,59,0|wzczfz,43,59,0|wzczg0,61,40,1|xblnbz,61,40,1|xblnc0,43,59,0|xi323z,43,59,0|xi3240,61,40,1|xubpzz,61,40,1|xubq00,43,59,0|y0t4rz,43,59,0|y0t4s0,61,40,1|yd1snz,61,40,1|yd1so0,43,59,0|yjj7fz,43,59,0|yjj7g0,61,40,1|yvrvbz,61,40,1|yvrvc0,43,59,0|z29a3z,43,59,0|z29a40,61,40,1|zehxzz,61,40,1|zehy00,43,59,0|zlcbfz,43,59,0|zlcbg0,61,40,1|zxkzbz,61,40,1|zxkzc0,43,59,0|1042e3z,43,59,0|1042e40,61,40,1|10gb1zz,61,40,1|10gb200,43,59,0|10msgrz,43,59,0|10msgs0,61,40,1|10z14nz,61,40,1|10z14o0,43,59,0|115ijfz,43,59,0|115ijg0,61,40,1|11hr7bz,61,40,1|11hr7c0,43,59,0|11o8m3z,43,59,0|11o8m40,61,40,1|120h9zz,61,40,1|120ha00,43,59,0|126yorz,43,59,0|126yos0,61,40,1|12j7cnz,61,40,1|12j7co0,43,59,0|12q1q3z,43,59,0|12q1q40,61,40,1|132adzz,61,40,1|132ae00,43,59,0|138rsrz,43,59,0|138rss0,61,40,1|13l0gnz,61,40,1|13l0go0,43,59,0|13rhvfz,43,59,0|13rhvg0,61,40,1|143qjbz,61,40,1|143qjc0,43,59,0|14a7y3z,43,59,0|14a7y40,61,40,1|14mglzz,61,40,1|14mgm00,43,59,0|14sy0rz,43,59,0|14sy0s0,61,40,1|1556onz,61,40,1|1556oo0,43,59,0|15c123z,43,59,0|15c1240,61,40,1|15o9pzz,61,40,1|15o9q00,43,59,0|15ur4rz,43,59,0|15ur4s0,61,40,1|166zsnz,61,40,1|166zso0,43,59,0|16dh7fz,43,59,0|16dh7g0,61,40,1|16ppvbz,61,40,1|16ppvc0,43,59,0|16w7a3z,43,59,0|16w7a40,61,40,1|178fxzz,61,40,1|178fy00,43,59,0|17excrz,43,59,0|17excs0,61,40,1|17r60nz,61,40,1|17r60o0,43,59,0|17xnffz,43,59,0|17xnfg0,61,40,1|189w3bz,61,40,1|189w3c0,43,59,0|18gqgrz,43,59,0|18gqgs0,61,40,1|18sz4nz,61,40,1|18sz4o0,43,59,0|18zgjfz,43,59,0|18zgjg0,61,40,1|19bp7bz,61,40,1|19bp7c0,43,59,0|19i6m3z,43,59,0|19i6m40,61,40,1|19uf9zz,61,40,1|19ufa00,43,59,0|1a0worz,43,59,0|1a0wos0,61,40,1|1ad5cnz,61,40,1|1ad5co0,43,59,0|1ajmrfz,43,59,0|1ajmrg0,61,40,1|1avvfbz,61,40,1|1avvfc0,43,59,0|1b2psrz,43,59,0|1b2pss0,61,40,1|1beygnz,61,40,1|1beygo0,43,59,0|1blfvfz,43,59,0|1blfvg0,61,40,1|1bxojbz,61,40,1|1bxojc0,43,59,0|1c45y3z,43,59,0|1c45y40,61,40,1|1cgelzz,61,40,1|1cgem00,43,59,0|1cmw0rz,43,59,0|1cmw0s0,61,40,1|1cz4onz,61,40,1|1cz4oo0,43,59,0|1d5m3fz,43,59,0|1d5m3g0,61,40,1|1dhurbz,61,40,1|1dhurc0,43,59,0|1doc63z,43,59,0|1doc640,61,40,1|1e0ktzz,61,40,1|1e0ku00,43,59,0|1e7f7fz,43,59,0|1e7f7g0,61,40,1|1ejnvbz,61,40,1|1ejnvc0,43,59,0|1eq5a3z,43,59,0|1eq5a40,61,40,1|1f2dxzz,61,40,1|1f2dy00,43,59,0|1f8vcrz,43,59,0|1f8vcs0,61,40,1|1fl40nz,61,40,1|1fl40o0,43,59,0|1frlffz,43,59,0|1frlfg0,61,40,1|1g3u3bz,61,40,1|1g3u3c0,43,59,0|1gabi3z,43,59,0|1gabi40,61,40,1|1gmk5zz,61,40,1|1gmk600,43,59,0|1gt1krz,43,59,0|1gt1ks0,61,40,1|1h5a8nz,61,40,1|1h5a8o0,43,59,0|1hc4m3z,43,59,0|1hc4m40,61,40,1|1hod9zz,61,40,1|1hoda00,43,59,0|1huuorz,43,59,0|1huuos0,61,40,1|1i73cnz,61,40,1|1i73co0,43,59,0|1idkrfz,43,59,0|1idkrg0,61,40,1|1iptfbz,61,40,1|1iptfc0,43,59,0|1iwau3z,43,59,0|1iwau40,61,40,1|1j8jhzz,61,40,1|1j8ji00,43,59,0|1jf0wrz,43,59,0|1jf0ws0,61,40,1|1jr9knz,61,40,1|1jr9ko0,43,59,0|1jy3y3z,43,59,0|1jy3y40,61,40,1|1kaclzz,61,40,1|1kacm00,43,59,0|1kgu0rz,43,59,0|1kgu0s0,61,40,1|1kt2onz,61,40,1|1kt2oo0,43,59,0|1kzk3fz,43,59,0|1kzk3g0,61,40,1|1lbsrbz,61,40,1|1lbsrc0,43,59,0|1lia63z,43,59,0|1lia640,61,40,1|1luitzz,61,40,1|1luiu00,43,59,0|1m108rz,43,59,0|1m108s0,61,40,1|1md8wnz,61,40,1|1md8wo0,43,59,0|1mjqbfz,43,59,0|1mjqbg0,61,40,1|1mvyzbz,61,40,1|1mvyzc0,43,59,0|1n2tcrz,43,59,0|1n2tcs0,61,40,1|1nf20nz,61,40,1|1nf20o0,43,59,0|1nljffz,43,59,0|1nljfg0,61,40,1|1nxs3bz,61,40,1|1nxs3c0,43,59,0|1o49i3z,43,59,0|1o49i40,61,40,1|1ogi5zz,61,40,1|1ogi600,43,59,0|1omzkrz,43,59,0|1omzks0,61,40,1|1oz88nz,61,40,1|1oz88o0,43,59,0|1p5pnfz,43,59,0|1p5png0,61,40,1|1phybbz,61,40,1|1phybc0,43,59,0|1posorz,43,59,0|1posos0,61,40,1|1q11cnz,61,40,1|1q11co0,43,59,0|1q7irfz,43,59,0|1q7irg0,61,40,1|1qjrfbz,61,40,1|1qjrfc0,43,59,0|1qq8u3z,43,59,0|1qq8u40,61,40,1|1r2hhzz,61,40,1|1r2hi00,43,59,0|1r8ywrz,43,59,0|1r8yws0,61,40,1|1rl7knz,61,40,1|1rl7ko0,43,59,0|1rrozfz,43,59,0|1rrozg0,61,40,1|1s3xnbz,61,40,1|1s3xnc0,43,59,0|1saf23z,43,59,0|1saf240,61,40,1|1smnpzz,61,40,1|1smnq00,43,59,0|1sti3fz,43,59,0|1sti3g0,61,40,1|1t5qrbz,61,40,1|1t5qrc0,43,59,0|1tc863z,43,59,0|1tc8640,61,40,1|1togtzz,61,40,1|1togu00,43,59,0|1tuy8rz,43,59,0|1tuy8s0,61,40,1|1u76wnz,61,40,1|1u76wo0,43,59,0|1udobfz,43,59,0|1udobg0,61,40,1|1upwzbz,61,40,1|1upwzc0,43,59,0|1uwee3z,43,59,0|1uwee40,61,40,1|1v8n1zz,61,40,1|1v8n200,43,59,0|1vf4grz,43,59,0|1vf4gs0,61,40,1|1vrd4nz,61,40,1|1vrd4o0,43,59,0|NaN,43,59,0\",\"America/Indiana/Tell_City|,0,113,0|-18y0m01,0,113,0|-18y0m00,45,63,0|-r0esg1,45,63,0|-r0esg0,48,59,1|-qplz81,48,59,1|-qplz80,45,63,0|-qhops1,45,63,0|-qhops0,48,59,1|-q6vwk1,48,59,1|-q6vwk0,45,63,0|-ek21s1,45,63,0|-ek21s0,52,59,1|-cq2tg1,52,59,1|-cq2tg0,53,59,1|-cnp0k1,53,59,1|-cnp0k0,45,63,0|-7nnm01,45,63,0|-7nnm00,48,59,1|-7g3b81,48,59,1|-7g3b80,45,63,0|-74xds1,45,63,0|-74xds0,48,59,1|-6x09w1,48,59,1|-6x09w0,45,63,0|-6m7b41,45,63,0|-6m7b40,48,59,1|-6ea781,48,59,1|-6ea780,45,63,0|-63h8g1,45,63,0|-63h8g0,48,59,1|-5vk4k1,48,59,1|-5vk4k0,45,63,0|-5kr5s1,45,63,0|-5kr5s0,48,59,1|-5cu1w1,48,59,1|-5cu1w0,45,63,0|-521341,45,63,0|-521340,48,59,1|-4u3z81,48,59,1|-4u3z80,45,63,0|-4iy1s1,45,63,0|-4iy1s0,48,59,1|-49l381,48,59,1|-49l380,45,63,0|-407z41,45,63,0|-407z40,48,59,1|-3qv0k1,48,59,1|-3qv0k0,45,63,0|-3hhwg1,45,63,0|-3hhwg0,48,59,1|-384xw1,48,59,1|-384xw0,45,63,0|-2yrts1,45,63,0|-2yrts0,43,59,0|-14vok1,43,59,0|-14vok0,45,63,0|-vikg1,45,63,0|-vikg0,48,59,1|-m5lw1,48,59,1|-m5lw0,45,63,0|-cshs1,45,63,0|-cshs0,61,40,1|-3fm01,61,40,1|-3fm00,43,59,0|5xi3z,43,59,0|5xi40,61,40,1|fagnz,61,40,1|fago0,43,59,0|ix323z,43,59,0|ix3240,48,59,1|j7vy3z,48,59,1|j7vy40,45,63,0|jeqbjz,45,63,0|jeqbk0,48,59,1|jqyzfz,48,59,1|jqyzg0,45,63,0|jxge7z,45,63,0|jxge80,48,59,1|k9p23z,48,59,1|k9p240,45,63,0|kg6gvz,45,63,0|kg6gw0,48,59,1|ksf4rz,48,59,1|ksf4s0,45,63,0|kz9i7z,45,63,0|kz9i80,48,59,1|lbi63z,48,59,1|lbi640,45,63,0|lhzkvz,45,63,0|lhzkw0,48,59,1|lu88rz,48,59,1|lu88s0,45,63,0|m0pnjz,45,63,0|m0pnk0,48,59,1|mcybfz,48,59,1|mcybg0,45,63,0|mjfq7z,45,63,0|mjfq80,48,59,1|mvoe3z,48,59,1|mvoe40,45,63,0|n25svz,45,63,0|n25sw0,48,59,1|neegrz,48,59,1|neegs0,45,63,0|nkvvjz,45,63,0|nkvvk0,48,59,1|nx4jfz,48,59,1|nx4jg0,45,63,0|o3ywvz,45,63,0|o3yww0,48,59,1|og7krz,48,59,1|og7ks0,45,63,0|omozjz,45,63,0|omozk0,48,59,1|oyxnfz,48,59,1|oyxng0,45,63,0|p5f27z,45,63,0|p5f280,48,59,1|phnq3z,48,59,1|phnq40,45,63,0|po54vz,45,63,0|po54w0,48,59,1|q0dsrz,48,59,1|q0dss0,45,63,0|q6v7jz,45,63,0|q6v7k0,48,59,1|qj3vfz,48,59,1|qj3vg0,45,63,0|qpy8vz,45,63,0|qpy8w0,48,59,1|r26wrz,48,59,1|r26ws0,45,63,0|r8objz,45,63,0|r8obk0,48,59,1|rkwzfz,48,59,1|rkwzg0,45,63,0|rree7z,45,63,0|rree80,48,59,1|s3n23z,48,59,1|s3n240,45,63,0|sa4gvz,45,63,0|sa4gw0,48,59,1|smd4rz,48,59,1|smd4s0,45,63,0|ssujjz,45,63,0|ssujk0,48,59,1|t537fz,48,59,1|t537g0,45,63,0|tbkm7z,45,63,0|tbkm80,48,59,1|tnta3z,48,59,1|tnta40,45,63,0|tunnjz,45,63,0|tunnk0,48,59,1|u6wbfz,48,59,1|u6wbg0,45,63,0|uddq7z,45,63,0|uddq80,48,59,1|upme3z,48,59,1|upme40,45,63,0|uw3svz,45,63,0|uw3sw0,48,59,1|v8cgrz,48,59,1|v8cgs0,45,63,0|vetvjz,45,63,0|vetvk0,48,59,1|vr2jfz,48,59,1|vr2jg0,45,63,0|vxjy7z,45,63,0|vxjy80,48,59,1|w9sm3z,48,59,1|w9sm40,45,63,0|wgmzjz,45,63,0|wgmzk0,48,59,1|wsvnfz,48,59,1|wsvng0,45,63,0|wzd27z,45,63,0|wzd280,48,59,1|xblq3z,48,59,1|xblq40,45,63,0|xi34vz,45,63,0|xi34w0,48,59,1|xubsrz,48,59,1|xubss0,45,63,0|y0t7jz,45,63,0|y0t7k0,48,59,1|yd1vfz,48,59,1|yd1vg0,45,63,0|yjja7z,45,63,0|yjja80,48,59,1|yvry3z,48,59,1|yvry40,45,63,0|z29cvz,45,63,0|z29cw0,48,59,1|zei0rz,48,59,1|zei0s0,45,63,0|zlce7z,45,63,0|zlce80,48,59,1|zxl23z,48,59,1|zxl240,45,63,0|1042gvz,45,63,0|1042gw0,48,59,1|10gb4rz,48,59,1|10gb4s0,45,63,0|10msjjz,45,63,0|10msjk0,48,59,1|10z17fz,48,59,1|10z17g0,45,63,0|115im7z,45,63,0|115im80,48,59,1|11hra3z,48,59,1|11hra40,45,63,0|11o8ovz,45,63,0|11o8ow0,48,59,1|120hcrz,48,59,1|120hcs0,45,63,0|126yrjz,45,63,0|126yrk0,48,59,1|12j7ffz,48,59,1|12j7fg0,45,63,0|12q1svz,45,63,0|12q1sw0,48,59,1|132agrz,48,59,1|132ags0,45,63,0|138rvjz,45,63,0|138rvk0,48,59,1|13l0jfz,48,59,1|13l0jg0,45,63,0|13rhy7z,45,63,0|13rhy80,48,59,1|143qm3z,48,59,1|143qm40,45,63,0|14a80vz,45,63,0|14a80w0,48,59,1|14mgorz,48,59,1|14mgos0,45,63,0|14sy3jz,45,63,0|14sy3k0,48,59,1|1556rfz,48,59,1|1556rg0,45,63,0|15c14vz,45,63,0|15c14w0,48,59,1|15o9srz,48,59,1|15o9ss0,45,63,0|15ur7jz,45,63,0|15ur7k0,48,59,1|166zvfz,48,59,1|166zvg0,45,63,0|16dha7z,45,63,0|16dha80,48,59,1|16ppy3z,48,59,1|16ppy40,45,63,0|16w7cvz,45,63,0|16w7cw0,48,59,1|178g0rz,48,59,1|178g0s0,45,63,0|17exfjz,45,63,0|17exfk0,48,59,1|17r63fz,48,59,1|17r63g0,45,63,0|17xni7z,45,63,0|17xni80,48,59,1|189w63z,48,59,1|189w640,45,63,0|18gqjjz,45,63,0|18gqjk0,48,59,1|18sz7fz,48,59,1|18sz7g0,45,63,0|18zgm7z,45,63,0|18zgm80,48,59,1|19bpa3z,48,59,1|19bpa40,45,63,0|19i6ovz,45,63,0|19i6ow0,48,59,1|19ufcrz,48,59,1|19ufcs0,45,63,0|1a0wrjz,45,63,0|1a0wrk0,48,59,1|1ad5ffz,48,59,1|1ad5fg0,45,63,0|1ajmu7z,45,63,0|1ajmu80,48,59,1|1avvi3z,48,59,1|1avvi40,45,63,0|1b2pvjz,45,63,0|1b2pvk0,48,59,1|1beyjfz,48,59,1|1beyjg0,45,63,0|1blfy7z,45,63,0|1blfy80,48,59,1|1bxom3z,48,59,1|1bxom40,45,63,0|1c460vz,45,63,0|1c460w0,48,59,1|1cgeorz,48,59,1|1cgeos0,45,63,0|1cmw3jz,45,63,0|1cmw3k0,48,59,1|1cz4rfz,48,59,1|1cz4rg0,45,63,0|1d5m67z,45,63,0|1d5m680,48,59,1|1dhuu3z,48,59,1|1dhuu40,45,63,0|1doc8vz,45,63,0|1doc8w0,48,59,1|1e0kwrz,48,59,1|1e0kws0,45,63,0|1e7fa7z,45,63,0|1e7fa80,48,59,1|1ejny3z,48,59,1|1ejny40,45,63,0|1eq5cvz,45,63,0|1eq5cw0,48,59,1|1f2e0rz,48,59,1|1f2e0s0,45,63,0|1f8vfjz,45,63,0|1f8vfk0,48,59,1|1fl43fz,48,59,1|1fl43g0,45,63,0|1frli7z,45,63,0|1frli80,48,59,1|1g3u63z,48,59,1|1g3u640,45,63,0|1gabkvz,45,63,0|1gabkw0,48,59,1|1gmk8rz,48,59,1|1gmk8s0,45,63,0|1gt1njz,45,63,0|1gt1nk0,48,59,1|1h5abfz,48,59,1|1h5abg0,45,63,0|1hc4ovz,45,63,0|1hc4ow0,48,59,1|1hodcrz,48,59,1|1hodcs0,45,63,0|1huurjz,45,63,0|1huurk0,48,59,1|1i73ffz,48,59,1|1i73fg0,45,63,0|1idku7z,45,63,0|1idku80,48,59,1|1ipti3z,48,59,1|1ipti40,45,63,0|1iwawvz,45,63,0|1iwaww0,48,59,1|1j8jkrz,48,59,1|1j8jks0,45,63,0|1jf0zjz,45,63,0|1jf0zk0,48,59,1|1jr9nfz,48,59,1|1jr9ng0,45,63,0|1jy40vz,45,63,0|1jy40w0,48,59,1|1kacorz,48,59,1|1kacos0,45,63,0|1kgu3jz,45,63,0|1kgu3k0,48,59,1|1kt2rfz,48,59,1|1kt2rg0,45,63,0|1kzk67z,45,63,0|1kzk680,48,59,1|1lbsu3z,48,59,1|1lbsu40,45,63,0|1lia8vz,45,63,0|1lia8w0,48,59,1|1luiwrz,48,59,1|1luiws0,45,63,0|1m10bjz,45,63,0|1m10bk0,48,59,1|1md8zfz,48,59,1|1md8zg0,45,63,0|1mjqe7z,45,63,0|1mjqe80,48,59,1|1mvz23z,48,59,1|1mvz240,45,63,0|1n2tfjz,45,63,0|1n2tfk0,48,59,1|1nf23fz,48,59,1|1nf23g0,45,63,0|1nlji7z,45,63,0|1nlji80,48,59,1|1nxs63z,48,59,1|1nxs640,45,63,0|1o49kvz,45,63,0|1o49kw0,48,59,1|1ogi8rz,48,59,1|1ogi8s0,45,63,0|1omznjz,45,63,0|1omznk0,48,59,1|1oz8bfz,48,59,1|1oz8bg0,45,63,0|1p5pq7z,45,63,0|1p5pq80,48,59,1|1phye3z,48,59,1|1phye40,45,63,0|1posrjz,45,63,0|1posrk0,48,59,1|1q11ffz,48,59,1|1q11fg0,45,63,0|1q7iu7z,45,63,0|1q7iu80,48,59,1|1qjri3z,48,59,1|1qjri40,45,63,0|1qq8wvz,45,63,0|1qq8ww0,48,59,1|1r2hkrz,48,59,1|1r2hks0,45,63,0|1r8yzjz,45,63,0|1r8yzk0,48,59,1|1rl7nfz,48,59,1|1rl7ng0,45,63,0|1rrp27z,45,63,0|1rrp280,48,59,1|1s3xq3z,48,59,1|1s3xq40,45,63,0|1saf4vz,45,63,0|1saf4w0,48,59,1|1smnsrz,48,59,1|1smnss0,45,63,0|1sti67z,45,63,0|1sti680,48,59,1|1t5qu3z,48,59,1|1t5qu40,45,63,0|1tc88vz,45,63,0|1tc88w0,48,59,1|1togwrz,48,59,1|1togws0,45,63,0|1tuybjz,45,63,0|1tuybk0,48,59,1|1u76zfz,48,59,1|1u76zg0,45,63,0|1udoe7z,45,63,0|1udoe80,48,59,1|1upx23z,48,59,1|1upx240,45,63,0|1uwegvz,45,63,0|1uwegw0,48,59,1|1v8n4rz,48,59,1|1v8n4s0,45,63,0|1vf4jjz,45,63,0|1vf4jk0,48,59,1|1vrd7fz,48,59,1|1vrd7g0,45,63,0|NaN,45,63,0\",\"America/Indiana/Vevay|,0,114,0|-18y0m01,0,114,0|-18y0m00,45,63,0|-r0esg1,45,63,0|-r0esg0,48,59,1|-qplz81,48,59,1|-qplz80,45,63,0|-qhops1,45,63,0|-qhops0,48,59,1|-q6vwk1,48,59,1|-q6vwk0,45,63,0|-ek21s1,45,63,0|-ek21s0,52,59,1|-cq2tg1,52,59,1|-cq2tg0,53,59,1|-cnp0k1,53,59,1|-cnp0k0,45,63,0|-86qhs1,45,63,0|-86qhs0,43,59,0|-cskk1,43,59,0|-cskk0,61,40,1|-3fm01,61,40,1|-3fm00,43,59,0|5xi3z,43,59,0|5xi40,61,40,1|fagnz,61,40,1|fago0,43,59,0|onkrz,43,59,0|onks0,61,40,1|ydhzz,61,40,1|ydi00,43,59,0|17qm3z,43,59,0|17qm40,61,40,1|1h3knz,61,40,1|1h3ko0,43,59,0|ix323z,43,59,0|ix3240,61,40,1|j7vvbz,61,40,1|j7vvc0,43,59,0|jeq8rz,43,59,0|jeq8s0,61,40,1|jqywnz,61,40,1|jqywo0,43,59,0|jxgbfz,43,59,0|jxgbg0,61,40,1|k9ozbz,61,40,1|k9ozc0,43,59,0|kg6e3z,43,59,0|kg6e40,61,40,1|ksf1zz,61,40,1|ksf200,43,59,0|kz9ffz,43,59,0|kz9fg0,61,40,1|lbi3bz,61,40,1|lbi3c0,43,59,0|lhzi3z,43,59,0|lhzi40,61,40,1|lu85zz,61,40,1|lu8600,43,59,0|m0pkrz,43,59,0|m0pks0,61,40,1|mcy8nz,61,40,1|mcy8o0,43,59,0|mjfnfz,43,59,0|mjfng0,61,40,1|mvobbz,61,40,1|mvobc0,43,59,0|n25q3z,43,59,0|n25q40,61,40,1|needzz,61,40,1|neee00,43,59,0|nkvsrz,43,59,0|nkvss0,61,40,1|nx4gnz,61,40,1|nx4go0,43,59,0|o3yu3z,43,59,0|o3yu40,61,40,1|og7hzz,61,40,1|og7i00,43,59,0|omowrz,43,59,0|omows0,61,40,1|oyxknz,61,40,1|oyxko0,43,59,0|p5ezfz,43,59,0|p5ezg0,61,40,1|phnnbz,61,40,1|phnnc0,43,59,0|po523z,43,59,0|po5240,61,40,1|q0dpzz,61,40,1|q0dq00,43,59,0|q6v4rz,43,59,0|q6v4s0,61,40,1|qj3snz,61,40,1|qj3so0,43,59,0|qpy63z,43,59,0|qpy640,61,40,1|r26tzz,61,40,1|r26u00,43,59,0|r8o8rz,43,59,0|r8o8s0,61,40,1|rkwwnz,61,40,1|rkwwo0,43,59,0|rrebfz,43,59,0|rrebg0,61,40,1|s3mzbz,61,40,1|s3mzc0,43,59,0|sa4e3z,43,59,0|sa4e40,61,40,1|smd1zz,61,40,1|smd200,43,59,0|ssugrz,43,59,0|ssugs0,61,40,1|t534nz,61,40,1|t534o0,43,59,0|tbkjfz,43,59,0|tbkjg0,61,40,1|tnt7bz,61,40,1|tnt7c0,43,59,0|tunkrz,43,59,0|tunks0,61,40,1|u6w8nz,61,40,1|u6w8o0,43,59,0|uddnfz,43,59,0|uddng0,61,40,1|upmbbz,61,40,1|upmbc0,43,59,0|uw3q3z,43,59,0|uw3q40,61,40,1|v8cdzz,61,40,1|v8ce00,43,59,0|vetsrz,43,59,0|vetss0,61,40,1|vr2gnz,61,40,1|vr2go0,43,59,0|vxjvfz,43,59,0|vxjvg0,61,40,1|w9sjbz,61,40,1|w9sjc0,43,59,0|wgmwrz,43,59,0|wgmws0,61,40,1|wsvknz,61,40,1|wsvko0,43,59,0|wzczfz,43,59,0|wzczg0,61,40,1|xblnbz,61,40,1|xblnc0,43,59,0|xi323z,43,59,0|xi3240,61,40,1|xubpzz,61,40,1|xubq00,43,59,0|y0t4rz,43,59,0|y0t4s0,61,40,1|yd1snz,61,40,1|yd1so0,43,59,0|yjj7fz,43,59,0|yjj7g0,61,40,1|yvrvbz,61,40,1|yvrvc0,43,59,0|z29a3z,43,59,0|z29a40,61,40,1|zehxzz,61,40,1|zehy00,43,59,0|zlcbfz,43,59,0|zlcbg0,61,40,1|zxkzbz,61,40,1|zxkzc0,43,59,0|1042e3z,43,59,0|1042e40,61,40,1|10gb1zz,61,40,1|10gb200,43,59,0|10msgrz,43,59,0|10msgs0,61,40,1|10z14nz,61,40,1|10z14o0,43,59,0|115ijfz,43,59,0|115ijg0,61,40,1|11hr7bz,61,40,1|11hr7c0,43,59,0|11o8m3z,43,59,0|11o8m40,61,40,1|120h9zz,61,40,1|120ha00,43,59,0|126yorz,43,59,0|126yos0,61,40,1|12j7cnz,61,40,1|12j7co0,43,59,0|12q1q3z,43,59,0|12q1q40,61,40,1|132adzz,61,40,1|132ae00,43,59,0|138rsrz,43,59,0|138rss0,61,40,1|13l0gnz,61,40,1|13l0go0,43,59,0|13rhvfz,43,59,0|13rhvg0,61,40,1|143qjbz,61,40,1|143qjc0,43,59,0|14a7y3z,43,59,0|14a7y40,61,40,1|14mglzz,61,40,1|14mgm00,43,59,0|14sy0rz,43,59,0|14sy0s0,61,40,1|1556onz,61,40,1|1556oo0,43,59,0|15c123z,43,59,0|15c1240,61,40,1|15o9pzz,61,40,1|15o9q00,43,59,0|15ur4rz,43,59,0|15ur4s0,61,40,1|166zsnz,61,40,1|166zso0,43,59,0|16dh7fz,43,59,0|16dh7g0,61,40,1|16ppvbz,61,40,1|16ppvc0,43,59,0|16w7a3z,43,59,0|16w7a40,61,40,1|178fxzz,61,40,1|178fy00,43,59,0|17excrz,43,59,0|17excs0,61,40,1|17r60nz,61,40,1|17r60o0,43,59,0|17xnffz,43,59,0|17xnfg0,61,40,1|189w3bz,61,40,1|189w3c0,43,59,0|18gqgrz,43,59,0|18gqgs0,61,40,1|18sz4nz,61,40,1|18sz4o0,43,59,0|18zgjfz,43,59,0|18zgjg0,61,40,1|19bp7bz,61,40,1|19bp7c0,43,59,0|19i6m3z,43,59,0|19i6m40,61,40,1|19uf9zz,61,40,1|19ufa00,43,59,0|1a0worz,43,59,0|1a0wos0,61,40,1|1ad5cnz,61,40,1|1ad5co0,43,59,0|1ajmrfz,43,59,0|1ajmrg0,61,40,1|1avvfbz,61,40,1|1avvfc0,43,59,0|1b2psrz,43,59,0|1b2pss0,61,40,1|1beygnz,61,40,1|1beygo0,43,59,0|1blfvfz,43,59,0|1blfvg0,61,40,1|1bxojbz,61,40,1|1bxojc0,43,59,0|1c45y3z,43,59,0|1c45y40,61,40,1|1cgelzz,61,40,1|1cgem00,43,59,0|1cmw0rz,43,59,0|1cmw0s0,61,40,1|1cz4onz,61,40,1|1cz4oo0,43,59,0|1d5m3fz,43,59,0|1d5m3g0,61,40,1|1dhurbz,61,40,1|1dhurc0,43,59,0|1doc63z,43,59,0|1doc640,61,40,1|1e0ktzz,61,40,1|1e0ku00,43,59,0|1e7f7fz,43,59,0|1e7f7g0,61,40,1|1ejnvbz,61,40,1|1ejnvc0,43,59,0|1eq5a3z,43,59,0|1eq5a40,61,40,1|1f2dxzz,61,40,1|1f2dy00,43,59,0|1f8vcrz,43,59,0|1f8vcs0,61,40,1|1fl40nz,61,40,1|1fl40o0,43,59,0|1frlffz,43,59,0|1frlfg0,61,40,1|1g3u3bz,61,40,1|1g3u3c0,43,59,0|1gabi3z,43,59,0|1gabi40,61,40,1|1gmk5zz,61,40,1|1gmk600,43,59,0|1gt1krz,43,59,0|1gt1ks0,61,40,1|1h5a8nz,61,40,1|1h5a8o0,43,59,0|1hc4m3z,43,59,0|1hc4m40,61,40,1|1hod9zz,61,40,1|1hoda00,43,59,0|1huuorz,43,59,0|1huuos0,61,40,1|1i73cnz,61,40,1|1i73co0,43,59,0|1idkrfz,43,59,0|1idkrg0,61,40,1|1iptfbz,61,40,1|1iptfc0,43,59,0|1iwau3z,43,59,0|1iwau40,61,40,1|1j8jhzz,61,40,1|1j8ji00,43,59,0|1jf0wrz,43,59,0|1jf0ws0,61,40,1|1jr9knz,61,40,1|1jr9ko0,43,59,0|1jy3y3z,43,59,0|1jy3y40,61,40,1|1kaclzz,61,40,1|1kacm00,43,59,0|1kgu0rz,43,59,0|1kgu0s0,61,40,1|1kt2onz,61,40,1|1kt2oo0,43,59,0|1kzk3fz,43,59,0|1kzk3g0,61,40,1|1lbsrbz,61,40,1|1lbsrc0,43,59,0|1lia63z,43,59,0|1lia640,61,40,1|1luitzz,61,40,1|1luiu00,43,59,0|1m108rz,43,59,0|1m108s0,61,40,1|1md8wnz,61,40,1|1md8wo0,43,59,0|1mjqbfz,43,59,0|1mjqbg0,61,40,1|1mvyzbz,61,40,1|1mvyzc0,43,59,0|1n2tcrz,43,59,0|1n2tcs0,61,40,1|1nf20nz,61,40,1|1nf20o0,43,59,0|1nljffz,43,59,0|1nljfg0,61,40,1|1nxs3bz,61,40,1|1nxs3c0,43,59,0|1o49i3z,43,59,0|1o49i40,61,40,1|1ogi5zz,61,40,1|1ogi600,43,59,0|1omzkrz,43,59,0|1omzks0,61,40,1|1oz88nz,61,40,1|1oz88o0,43,59,0|1p5pnfz,43,59,0|1p5png0,61,40,1|1phybbz,61,40,1|1phybc0,43,59,0|1posorz,43,59,0|1posos0,61,40,1|1q11cnz,61,40,1|1q11co0,43,59,0|1q7irfz,43,59,0|1q7irg0,61,40,1|1qjrfbz,61,40,1|1qjrfc0,43,59,0|1qq8u3z,43,59,0|1qq8u40,61,40,1|1r2hhzz,61,40,1|1r2hi00,43,59,0|1r8ywrz,43,59,0|1r8yws0,61,40,1|1rl7knz,61,40,1|1rl7ko0,43,59,0|1rrozfz,43,59,0|1rrozg0,61,40,1|1s3xnbz,61,40,1|1s3xnc0,43,59,0|1saf23z,43,59,0|1saf240,61,40,1|1smnpzz,61,40,1|1smnq00,43,59,0|1sti3fz,43,59,0|1sti3g0,61,40,1|1t5qrbz,61,40,1|1t5qrc0,43,59,0|1tc863z,43,59,0|1tc8640,61,40,1|1togtzz,61,40,1|1togu00,43,59,0|1tuy8rz,43,59,0|1tuy8s0,61,40,1|1u76wnz,61,40,1|1u76wo0,43,59,0|1udobfz,43,59,0|1udobg0,61,40,1|1upwzbz,61,40,1|1upwzc0,43,59,0|1uwee3z,43,59,0|1uwee40,61,40,1|1v8n1zz,61,40,1|1v8n200,43,59,0|1vf4grz,43,59,0|1vf4gs0,61,40,1|1vrd4nz,61,40,1|1vrd4o0,43,59,0|NaN,43,59,0\",\"America/Indiana/Vincennes|,0,115,0|-18y0m01,0,115,0|-18y0m00,45,63,0|-r0esg1,45,63,0|-r0esg0,48,59,1|-qplz81,48,59,1|-qplz80,45,63,0|-qhops1,45,63,0|-qhops0,48,59,1|-q6vwk1,48,59,1|-q6vwk0,45,63,0|-ek21s1,45,63,0|-ek21s0,52,59,1|-cq2tg1,52,59,1|-cq2tg0,53,59,1|-cnp0k1,53,59,1|-cnp0k0,45,63,0|-ccw1s1,45,63,0|-ccw1s0,48,59,1|-c4yxw1,48,59,1|-c4yxw0,45,63,0|-8pgkg1,45,63,0|-8pgkg0,48,59,1|-8hjgk1,48,59,1|-8hjgk0,45,63,0|-86qhs1,45,63,0|-86qhs0,48,59,1|-7ytdw1,48,59,1|-7ytdw0,45,63,0|-7nnm01,45,63,0|-7nnm00,48,59,1|-7g3b81,48,59,1|-7g3b80,45,63,0|-74xds1,45,63,0|-74xds0,48,59,1|-6x09w1,48,59,1|-6x09w0,45,63,0|-6m7b41,45,63,0|-6m7b40,48,59,1|-6ea781,48,59,1|-6ea780,45,63,0|-63h8g1,45,63,0|-63h8g0,48,59,1|-5vk4k1,48,59,1|-5vk4k0,45,63,0|-5kr5s1,45,63,0|-5kr5s0,48,59,1|-5cu1w1,48,59,1|-5cu1w0,45,63,0|-521341,45,63,0|-521340,48,59,1|-4sb5w1,48,59,1|-4sb5w0,45,63,0|-4iy1s1,45,63,0|-4iy1s0,48,59,1|-4bdwk1,48,59,1|-4bdwk0,45,63,0|-407z41,45,63,0|-407z40,48,59,1|-3qv0k1,48,59,1|-3qv0k0,45,63,0|-3hhwg1,45,63,0|-3hhwg0,48,59,1|-384xw1,48,59,1|-384xw0,45,63,0|-2yrts1,45,63,0|-2yrts0,43,59,0|-cskk1,43,59,0|-cskk0,61,40,1|-3fm01,61,40,1|-3fm00,43,59,0|5xi3z,43,59,0|5xi40,61,40,1|fagnz,61,40,1|fago0,43,59,0|ix323z,43,59,0|ix3240,48,59,1|j7vy3z,48,59,1|j7vy40,45,63,0|jeqbjz,45,63,0|jeqbk0,48,59,1|jqyzfz,48,59,1|jqyzg0,43,59,0|jxgbfz,43,59,0|jxgbg0,61,40,1|k9ozbz,61,40,1|k9ozc0,43,59,0|kg6e3z,43,59,0|kg6e40,61,40,1|ksf1zz,61,40,1|ksf200,43,59,0|kz9ffz,43,59,0|kz9fg0,61,40,1|lbi3bz,61,40,1|lbi3c0,43,59,0|lhzi3z,43,59,0|lhzi40,61,40,1|lu85zz,61,40,1|lu8600,43,59,0|m0pkrz,43,59,0|m0pks0,61,40,1|mcy8nz,61,40,1|mcy8o0,43,59,0|mjfnfz,43,59,0|mjfng0,61,40,1|mvobbz,61,40,1|mvobc0,43,59,0|n25q3z,43,59,0|n25q40,61,40,1|needzz,61,40,1|neee00,43,59,0|nkvsrz,43,59,0|nkvss0,61,40,1|nx4gnz,61,40,1|nx4go0,43,59,0|o3yu3z,43,59,0|o3yu40,61,40,1|og7hzz,61,40,1|og7i00,43,59,0|omowrz,43,59,0|omows0,61,40,1|oyxknz,61,40,1|oyxko0,43,59,0|p5ezfz,43,59,0|p5ezg0,61,40,1|phnnbz,61,40,1|phnnc0,43,59,0|po523z,43,59,0|po5240,61,40,1|q0dpzz,61,40,1|q0dq00,43,59,0|q6v4rz,43,59,0|q6v4s0,61,40,1|qj3snz,61,40,1|qj3so0,43,59,0|qpy63z,43,59,0|qpy640,61,40,1|r26tzz,61,40,1|r26u00,43,59,0|r8o8rz,43,59,0|r8o8s0,61,40,1|rkwwnz,61,40,1|rkwwo0,43,59,0|rrebfz,43,59,0|rrebg0,61,40,1|s3mzbz,61,40,1|s3mzc0,43,59,0|sa4e3z,43,59,0|sa4e40,61,40,1|smd1zz,61,40,1|smd200,43,59,0|ssugrz,43,59,0|ssugs0,61,40,1|t534nz,61,40,1|t534o0,43,59,0|tbkjfz,43,59,0|tbkjg0,61,40,1|tnt7bz,61,40,1|tnt7c0,43,59,0|tunkrz,43,59,0|tunks0,61,40,1|u6w8nz,61,40,1|u6w8o0,43,59,0|uddnfz,43,59,0|uddng0,61,40,1|upmbbz,61,40,1|upmbc0,43,59,0|uw3q3z,43,59,0|uw3q40,61,40,1|v8cdzz,61,40,1|v8ce00,43,59,0|vetsrz,43,59,0|vetss0,61,40,1|vr2gnz,61,40,1|vr2go0,43,59,0|vxjvfz,43,59,0|vxjvg0,61,40,1|w9sjbz,61,40,1|w9sjc0,43,59,0|wgmwrz,43,59,0|wgmws0,61,40,1|wsvknz,61,40,1|wsvko0,43,59,0|wzczfz,43,59,0|wzczg0,61,40,1|xblnbz,61,40,1|xblnc0,43,59,0|xi323z,43,59,0|xi3240,61,40,1|xubpzz,61,40,1|xubq00,43,59,0|y0t4rz,43,59,0|y0t4s0,61,40,1|yd1snz,61,40,1|yd1so0,43,59,0|yjj7fz,43,59,0|yjj7g0,61,40,1|yvrvbz,61,40,1|yvrvc0,43,59,0|z29a3z,43,59,0|z29a40,61,40,1|zehxzz,61,40,1|zehy00,43,59,0|zlcbfz,43,59,0|zlcbg0,61,40,1|zxkzbz,61,40,1|zxkzc0,43,59,0|1042e3z,43,59,0|1042e40,61,40,1|10gb1zz,61,40,1|10gb200,43,59,0|10msgrz,43,59,0|10msgs0,61,40,1|10z14nz,61,40,1|10z14o0,43,59,0|115ijfz,43,59,0|115ijg0,61,40,1|11hr7bz,61,40,1|11hr7c0,43,59,0|11o8m3z,43,59,0|11o8m40,61,40,1|120h9zz,61,40,1|120ha00,43,59,0|126yorz,43,59,0|126yos0,61,40,1|12j7cnz,61,40,1|12j7co0,43,59,0|12q1q3z,43,59,0|12q1q40,61,40,1|132adzz,61,40,1|132ae00,43,59,0|138rsrz,43,59,0|138rss0,61,40,1|13l0gnz,61,40,1|13l0go0,43,59,0|13rhvfz,43,59,0|13rhvg0,61,40,1|143qjbz,61,40,1|143qjc0,43,59,0|14a7y3z,43,59,0|14a7y40,61,40,1|14mglzz,61,40,1|14mgm00,43,59,0|14sy0rz,43,59,0|14sy0s0,61,40,1|1556onz,61,40,1|1556oo0,43,59,0|15c123z,43,59,0|15c1240,61,40,1|15o9pzz,61,40,1|15o9q00,43,59,0|15ur4rz,43,59,0|15ur4s0,61,40,1|166zsnz,61,40,1|166zso0,43,59,0|16dh7fz,43,59,0|16dh7g0,61,40,1|16ppvbz,61,40,1|16ppvc0,43,59,0|16w7a3z,43,59,0|16w7a40,61,40,1|178fxzz,61,40,1|178fy00,43,59,0|17excrz,43,59,0|17excs0,61,40,1|17r60nz,61,40,1|17r60o0,43,59,0|17xnffz,43,59,0|17xnfg0,61,40,1|189w3bz,61,40,1|189w3c0,43,59,0|18gqgrz,43,59,0|18gqgs0,61,40,1|18sz4nz,61,40,1|18sz4o0,43,59,0|18zgjfz,43,59,0|18zgjg0,61,40,1|19bp7bz,61,40,1|19bp7c0,43,59,0|19i6m3z,43,59,0|19i6m40,61,40,1|19uf9zz,61,40,1|19ufa00,43,59,0|1a0worz,43,59,0|1a0wos0,61,40,1|1ad5cnz,61,40,1|1ad5co0,43,59,0|1ajmrfz,43,59,0|1ajmrg0,61,40,1|1avvfbz,61,40,1|1avvfc0,43,59,0|1b2psrz,43,59,0|1b2pss0,61,40,1|1beygnz,61,40,1|1beygo0,43,59,0|1blfvfz,43,59,0|1blfvg0,61,40,1|1bxojbz,61,40,1|1bxojc0,43,59,0|1c45y3z,43,59,0|1c45y40,61,40,1|1cgelzz,61,40,1|1cgem00,43,59,0|1cmw0rz,43,59,0|1cmw0s0,61,40,1|1cz4onz,61,40,1|1cz4oo0,43,59,0|1d5m3fz,43,59,0|1d5m3g0,61,40,1|1dhurbz,61,40,1|1dhurc0,43,59,0|1doc63z,43,59,0|1doc640,61,40,1|1e0ktzz,61,40,1|1e0ku00,43,59,0|1e7f7fz,43,59,0|1e7f7g0,61,40,1|1ejnvbz,61,40,1|1ejnvc0,43,59,0|1eq5a3z,43,59,0|1eq5a40,61,40,1|1f2dxzz,61,40,1|1f2dy00,43,59,0|1f8vcrz,43,59,0|1f8vcs0,61,40,1|1fl40nz,61,40,1|1fl40o0,43,59,0|1frlffz,43,59,0|1frlfg0,61,40,1|1g3u3bz,61,40,1|1g3u3c0,43,59,0|1gabi3z,43,59,0|1gabi40,61,40,1|1gmk5zz,61,40,1|1gmk600,43,59,0|1gt1krz,43,59,0|1gt1ks0,61,40,1|1h5a8nz,61,40,1|1h5a8o0,43,59,0|1hc4m3z,43,59,0|1hc4m40,61,40,1|1hod9zz,61,40,1|1hoda00,43,59,0|1huuorz,43,59,0|1huuos0,61,40,1|1i73cnz,61,40,1|1i73co0,43,59,0|1idkrfz,43,59,0|1idkrg0,61,40,1|1iptfbz,61,40,1|1iptfc0,43,59,0|1iwau3z,43,59,0|1iwau40,61,40,1|1j8jhzz,61,40,1|1j8ji00,43,59,0|1jf0wrz,43,59,0|1jf0ws0,61,40,1|1jr9knz,61,40,1|1jr9ko0,43,59,0|1jy3y3z,43,59,0|1jy3y40,61,40,1|1kaclzz,61,40,1|1kacm00,43,59,0|1kgu0rz,43,59,0|1kgu0s0,61,40,1|1kt2onz,61,40,1|1kt2oo0,43,59,0|1kzk3fz,43,59,0|1kzk3g0,61,40,1|1lbsrbz,61,40,1|1lbsrc0,43,59,0|1lia63z,43,59,0|1lia640,61,40,1|1luitzz,61,40,1|1luiu00,43,59,0|1m108rz,43,59,0|1m108s0,61,40,1|1md8wnz,61,40,1|1md8wo0,43,59,0|1mjqbfz,43,59,0|1mjqbg0,61,40,1|1mvyzbz,61,40,1|1mvyzc0,43,59,0|1n2tcrz,43,59,0|1n2tcs0,61,40,1|1nf20nz,61,40,1|1nf20o0,43,59,0|1nljffz,43,59,0|1nljfg0,61,40,1|1nxs3bz,61,40,1|1nxs3c0,43,59,0|1o49i3z,43,59,0|1o49i40,61,40,1|1ogi5zz,61,40,1|1ogi600,43,59,0|1omzkrz,43,59,0|1omzks0,61,40,1|1oz88nz,61,40,1|1oz88o0,43,59,0|1p5pnfz,43,59,0|1p5png0,61,40,1|1phybbz,61,40,1|1phybc0,43,59,0|1posorz,43,59,0|1posos0,61,40,1|1q11cnz,61,40,1|1q11co0,43,59,0|1q7irfz,43,59,0|1q7irg0,61,40,1|1qjrfbz,61,40,1|1qjrfc0,43,59,0|1qq8u3z,43,59,0|1qq8u40,61,40,1|1r2hhzz,61,40,1|1r2hi00,43,59,0|1r8ywrz,43,59,0|1r8yws0,61,40,1|1rl7knz,61,40,1|1rl7ko0,43,59,0|1rrozfz,43,59,0|1rrozg0,61,40,1|1s3xnbz,61,40,1|1s3xnc0,43,59,0|1saf23z,43,59,0|1saf240,61,40,1|1smnpzz,61,40,1|1smnq00,43,59,0|1sti3fz,43,59,0|1sti3g0,61,40,1|1t5qrbz,61,40,1|1t5qrc0,43,59,0|1tc863z,43,59,0|1tc8640,61,40,1|1togtzz,61,40,1|1togu00,43,59,0|1tuy8rz,43,59,0|1tuy8s0,61,40,1|1u76wnz,61,40,1|1u76wo0,43,59,0|1udobfz,43,59,0|1udobg0,61,40,1|1upwzbz,61,40,1|1upwzc0,43,59,0|1uwee3z,43,59,0|1uwee40,61,40,1|1v8n1zz,61,40,1|1v8n200,43,59,0|1vf4grz,43,59,0|1vf4gs0,61,40,1|1vrd4nz,61,40,1|1vrd4o0,43,59,0|NaN,43,59,0\",\"America/Indiana/Winamac|,0,116,0|-18y0m01,0,116,0|-18y0m00,45,63,0|-r0esg1,45,63,0|-r0esg0,48,59,1|-qplz81,48,59,1|-qplz80,45,63,0|-qhops1,45,63,0|-qhops0,48,59,1|-q6vwk1,48,59,1|-q6vwk0,45,63,0|-ek21s1,45,63,0|-ek21s0,52,59,1|-cq2tg1,52,59,1|-cq2tg0,53,59,1|-cnp0k1,53,59,1|-cnp0k0,45,63,0|-ccw1s1,45,63,0|-ccw1s0,48,59,1|-c4yxw1,48,59,1|-c4yxw0,45,63,0|-bu5z41,45,63,0|-bu5z40,48,59,1|-bm8v81,48,59,1|-bm8v80,45,63,0|-bbfwg1,45,63,0|-bbfwg0,48,59,1|-b3isk1,48,59,1|-b3isk0,45,63,0|-aspts1,45,63,0|-aspts0,48,59,1|-akspw1,48,59,1|-akspw0,45,63,0|-a9msg1,45,63,0|-a9msg0,48,59,1|-a22n81,48,59,1|-a22n80,45,63,0|-9qwps1,45,63,0|-9qwps0,48,59,1|-9izlw1,48,59,1|-9izlw0,45,63,0|-986n41,45,63,0|-986n40,48,59,1|-909j81,48,59,1|-909j80,45,63,0|-8pgkg1,45,63,0|-8pgkg0,48,59,1|-8hjgk1,48,59,1|-8hjgk0,45,63,0|-86qhs1,45,63,0|-86qhs0,48,59,1|-7ytdw1,48,59,1|-7ytdw0,45,63,0|-7o0f41,45,63,0|-7o0f40,48,59,1|-7eahw1,48,59,1|-7eahw0,45,63,0|-74xds1,45,63,0|-74xds0,48,59,1|-6vkf81,48,59,1|-6vkf80,45,63,0|-6m7b41,45,63,0|-6m7b40,48,59,1|-6ea781,48,59,1|-6ea780,45,63,0|-63h8g1,45,63,0|-63h8g0,48,59,1|-5vk4k1,48,59,1|-5vk4k0,45,63,0|-5kr5s1,45,63,0|-5kr5s0,48,59,1|-5cu1w1,48,59,1|-5cu1w0,45,63,0|-521341,45,63,0|-521340,48,59,1|-4u3z81,48,59,1|-4u3z80,45,63,0|-4iy1s1,45,63,0|-4iy1s0,43,59,0|-cskk1,43,59,0|-cskk0,61,40,1|-3fm01,61,40,1|-3fm00,43,59,0|5xi3z,43,59,0|5xi40,61,40,1|fagnz,61,40,1|fago0,43,59,0|ix323z,43,59,0|ix3240,48,59,1|j7vy3z,48,59,1|j7vy40,45,63,0|jeqbjz,45,63,0|jeqbk0,61,40,1|jqywnz,61,40,1|jqywo0,43,59,0|jxgbfz,43,59,0|jxgbg0,61,40,1|k9ozbz,61,40,1|k9ozc0,43,59,0|kg6e3z,43,59,0|kg6e40,61,40,1|ksf1zz,61,40,1|ksf200,43,59,0|kz9ffz,43,59,0|kz9fg0,61,40,1|lbi3bz,61,40,1|lbi3c0,43,59,0|lhzi3z,43,59,0|lhzi40,61,40,1|lu85zz,61,40,1|lu8600,43,59,0|m0pkrz,43,59,0|m0pks0,61,40,1|mcy8nz,61,40,1|mcy8o0,43,59,0|mjfnfz,43,59,0|mjfng0,61,40,1|mvobbz,61,40,1|mvobc0,43,59,0|n25q3z,43,59,0|n25q40,61,40,1|needzz,61,40,1|neee00,43,59,0|nkvsrz,43,59,0|nkvss0,61,40,1|nx4gnz,61,40,1|nx4go0,43,59,0|o3yu3z,43,59,0|o3yu40,61,40,1|og7hzz,61,40,1|og7i00,43,59,0|omowrz,43,59,0|omows0,61,40,1|oyxknz,61,40,1|oyxko0,43,59,0|p5ezfz,43,59,0|p5ezg0,61,40,1|phnnbz,61,40,1|phnnc0,43,59,0|po523z,43,59,0|po5240,61,40,1|q0dpzz,61,40,1|q0dq00,43,59,0|q6v4rz,43,59,0|q6v4s0,61,40,1|qj3snz,61,40,1|qj3so0,43,59,0|qpy63z,43,59,0|qpy640,61,40,1|r26tzz,61,40,1|r26u00,43,59,0|r8o8rz,43,59,0|r8o8s0,61,40,1|rkwwnz,61,40,1|rkwwo0,43,59,0|rrebfz,43,59,0|rrebg0,61,40,1|s3mzbz,61,40,1|s3mzc0,43,59,0|sa4e3z,43,59,0|sa4e40,61,40,1|smd1zz,61,40,1|smd200,43,59,0|ssugrz,43,59,0|ssugs0,61,40,1|t534nz,61,40,1|t534o0,43,59,0|tbkjfz,43,59,0|tbkjg0,61,40,1|tnt7bz,61,40,1|tnt7c0,43,59,0|tunkrz,43,59,0|tunks0,61,40,1|u6w8nz,61,40,1|u6w8o0,43,59,0|uddnfz,43,59,0|uddng0,61,40,1|upmbbz,61,40,1|upmbc0,43,59,0|uw3q3z,43,59,0|uw3q40,61,40,1|v8cdzz,61,40,1|v8ce00,43,59,0|vetsrz,43,59,0|vetss0,61,40,1|vr2gnz,61,40,1|vr2go0,43,59,0|vxjvfz,43,59,0|vxjvg0,61,40,1|w9sjbz,61,40,1|w9sjc0,43,59,0|wgmwrz,43,59,0|wgmws0,61,40,1|wsvknz,61,40,1|wsvko0,43,59,0|wzczfz,43,59,0|wzczg0,61,40,1|xblnbz,61,40,1|xblnc0,43,59,0|xi323z,43,59,0|xi3240,61,40,1|xubpzz,61,40,1|xubq00,43,59,0|y0t4rz,43,59,0|y0t4s0,61,40,1|yd1snz,61,40,1|yd1so0,43,59,0|yjj7fz,43,59,0|yjj7g0,61,40,1|yvrvbz,61,40,1|yvrvc0,43,59,0|z29a3z,43,59,0|z29a40,61,40,1|zehxzz,61,40,1|zehy00,43,59,0|zlcbfz,43,59,0|zlcbg0,61,40,1|zxkzbz,61,40,1|zxkzc0,43,59,0|1042e3z,43,59,0|1042e40,61,40,1|10gb1zz,61,40,1|10gb200,43,59,0|10msgrz,43,59,0|10msgs0,61,40,1|10z14nz,61,40,1|10z14o0,43,59,0|115ijfz,43,59,0|115ijg0,61,40,1|11hr7bz,61,40,1|11hr7c0,43,59,0|11o8m3z,43,59,0|11o8m40,61,40,1|120h9zz,61,40,1|120ha00,43,59,0|126yorz,43,59,0|126yos0,61,40,1|12j7cnz,61,40,1|12j7co0,43,59,0|12q1q3z,43,59,0|12q1q40,61,40,1|132adzz,61,40,1|132ae00,43,59,0|138rsrz,43,59,0|138rss0,61,40,1|13l0gnz,61,40,1|13l0go0,43,59,0|13rhvfz,43,59,0|13rhvg0,61,40,1|143qjbz,61,40,1|143qjc0,43,59,0|14a7y3z,43,59,0|14a7y40,61,40,1|14mglzz,61,40,1|14mgm00,43,59,0|14sy0rz,43,59,0|14sy0s0,61,40,1|1556onz,61,40,1|1556oo0,43,59,0|15c123z,43,59,0|15c1240,61,40,1|15o9pzz,61,40,1|15o9q00,43,59,0|15ur4rz,43,59,0|15ur4s0,61,40,1|166zsnz,61,40,1|166zso0,43,59,0|16dh7fz,43,59,0|16dh7g0,61,40,1|16ppvbz,61,40,1|16ppvc0,43,59,0|16w7a3z,43,59,0|16w7a40,61,40,1|178fxzz,61,40,1|178fy00,43,59,0|17excrz,43,59,0|17excs0,61,40,1|17r60nz,61,40,1|17r60o0,43,59,0|17xnffz,43,59,0|17xnfg0,61,40,1|189w3bz,61,40,1|189w3c0,43,59,0|18gqgrz,43,59,0|18gqgs0,61,40,1|18sz4nz,61,40,1|18sz4o0,43,59,0|18zgjfz,43,59,0|18zgjg0,61,40,1|19bp7bz,61,40,1|19bp7c0,43,59,0|19i6m3z,43,59,0|19i6m40,61,40,1|19uf9zz,61,40,1|19ufa00,43,59,0|1a0worz,43,59,0|1a0wos0,61,40,1|1ad5cnz,61,40,1|1ad5co0,43,59,0|1ajmrfz,43,59,0|1ajmrg0,61,40,1|1avvfbz,61,40,1|1avvfc0,43,59,0|1b2psrz,43,59,0|1b2pss0,61,40,1|1beygnz,61,40,1|1beygo0,43,59,0|1blfvfz,43,59,0|1blfvg0,61,40,1|1bxojbz,61,40,1|1bxojc0,43,59,0|1c45y3z,43,59,0|1c45y40,61,40,1|1cgelzz,61,40,1|1cgem00,43,59,0|1cmw0rz,43,59,0|1cmw0s0,61,40,1|1cz4onz,61,40,1|1cz4oo0,43,59,0|1d5m3fz,43,59,0|1d5m3g0,61,40,1|1dhurbz,61,40,1|1dhurc0,43,59,0|1doc63z,43,59,0|1doc640,61,40,1|1e0ktzz,61,40,1|1e0ku00,43,59,0|1e7f7fz,43,59,0|1e7f7g0,61,40,1|1ejnvbz,61,40,1|1ejnvc0,43,59,0|1eq5a3z,43,59,0|1eq5a40,61,40,1|1f2dxzz,61,40,1|1f2dy00,43,59,0|1f8vcrz,43,59,0|1f8vcs0,61,40,1|1fl40nz,61,40,1|1fl40o0,43,59,0|1frlffz,43,59,0|1frlfg0,61,40,1|1g3u3bz,61,40,1|1g3u3c0,43,59,0|1gabi3z,43,59,0|1gabi40,61,40,1|1gmk5zz,61,40,1|1gmk600,43,59,0|1gt1krz,43,59,0|1gt1ks0,61,40,1|1h5a8nz,61,40,1|1h5a8o0,43,59,0|1hc4m3z,43,59,0|1hc4m40,61,40,1|1hod9zz,61,40,1|1hoda00,43,59,0|1huuorz,43,59,0|1huuos0,61,40,1|1i73cnz,61,40,1|1i73co0,43,59,0|1idkrfz,43,59,0|1idkrg0,61,40,1|1iptfbz,61,40,1|1iptfc0,43,59,0|1iwau3z,43,59,0|1iwau40,61,40,1|1j8jhzz,61,40,1|1j8ji00,43,59,0|1jf0wrz,43,59,0|1jf0ws0,61,40,1|1jr9knz,61,40,1|1jr9ko0,43,59,0|1jy3y3z,43,59,0|1jy3y40,61,40,1|1kaclzz,61,40,1|1kacm00,43,59,0|1kgu0rz,43,59,0|1kgu0s0,61,40,1|1kt2onz,61,40,1|1kt2oo0,43,59,0|1kzk3fz,43,59,0|1kzk3g0,61,40,1|1lbsrbz,61,40,1|1lbsrc0,43,59,0|1lia63z,43,59,0|1lia640,61,40,1|1luitzz,61,40,1|1luiu00,43,59,0|1m108rz,43,59,0|1m108s0,61,40,1|1md8wnz,61,40,1|1md8wo0,43,59,0|1mjqbfz,43,59,0|1mjqbg0,61,40,1|1mvyzbz,61,40,1|1mvyzc0,43,59,0|1n2tcrz,43,59,0|1n2tcs0,61,40,1|1nf20nz,61,40,1|1nf20o0,43,59,0|1nljffz,43,59,0|1nljfg0,61,40,1|1nxs3bz,61,40,1|1nxs3c0,43,59,0|1o49i3z,43,59,0|1o49i40,61,40,1|1ogi5zz,61,40,1|1ogi600,43,59,0|1omzkrz,43,59,0|1omzks0,61,40,1|1oz88nz,61,40,1|1oz88o0,43,59,0|1p5pnfz,43,59,0|1p5png0,61,40,1|1phybbz,61,40,1|1phybc0,43,59,0|1posorz,43,59,0|1posos0,61,40,1|1q11cnz,61,40,1|1q11co0,43,59,0|1q7irfz,43,59,0|1q7irg0,61,40,1|1qjrfbz,61,40,1|1qjrfc0,43,59,0|1qq8u3z,43,59,0|1qq8u40,61,40,1|1r2hhzz,61,40,1|1r2hi00,43,59,0|1r8ywrz,43,59,0|1r8yws0,61,40,1|1rl7knz,61,40,1|1rl7ko0,43,59,0|1rrozfz,43,59,0|1rrozg0,61,40,1|1s3xnbz,61,40,1|1s3xnc0,43,59,0|1saf23z,43,59,0|1saf240,61,40,1|1smnpzz,61,40,1|1smnq00,43,59,0|1sti3fz,43,59,0|1sti3g0,61,40,1|1t5qrbz,61,40,1|1t5qrc0,43,59,0|1tc863z,43,59,0|1tc8640,61,40,1|1togtzz,61,40,1|1togu00,43,59,0|1tuy8rz,43,59,0|1tuy8s0,61,40,1|1u76wnz,61,40,1|1u76wo0,43,59,0|1udobfz,43,59,0|1udobg0,61,40,1|1upwzbz,61,40,1|1upwzc0,43,59,0|1uwee3z,43,59,0|1uwee40,61,40,1|1v8n1zz,61,40,1|1v8n200,43,59,0|1vf4grz,43,59,0|1vf4gs0,61,40,1|1vrd4nz,61,40,1|1vrd4o0,43,59,0|NaN,43,59,0\",\"America/Inuvik|,59,1,0|-8ve5c1,59,1,0|-8ve5c0,46,38,0|-2g1r41,46,38,0|-2g1r40,78,63,1|-26br41,78,63,1|-26br40,46,38,0|4v6brz,46,38,0|4v6bs0,44,62,0|5dwbnz,44,62,0|5dwbo0,47,63,1|5n9a7z,47,63,1|5n9a80,44,62,0|5wmebz,44,62,0|5wmec0,47,63,1|65zcvz,47,63,1|65zcw0,44,62,0|6fcgzz,44,62,0|6fch00,47,63,1|6p2e7z,47,63,1|6p2e80,44,62,0|6y2jnz,44,62,0|6y2jo0,47,63,1|77sgvz,47,63,1|77sgw0,44,62,0|7h5kzz,44,62,0|7h5l00,47,63,1|7qijjz,47,63,1|7qijk0,44,62,0|7zvnnz,44,62,0|7zvno0,47,63,1|898m7z,47,63,1|898m80,44,62,0|8ilqbz,44,62,0|8ilqc0,47,63,1|8ryovz,47,63,1|8ryow0,44,62,0|908wzz,44,62,0|908x00,47,63,1|9aorjz,47,63,1|9aork0,44,62,0|9iyznz,44,62,0|9iyzo0,47,63,1|9trsvz,47,63,1|9trsw0,44,62,0|a1p2bz,44,62,0|a1p2c0,47,63,1|achvjz,47,63,1|achvk0,44,62,0|akf4zz,44,62,0|akf500,47,63,1|av7y7z,47,63,1|av7y80,44,62,0|b3i6bz,44,62,0|b3i6c0,47,63,1|bdy0vz,47,63,1|bdy0w0,44,62,0|bm88zz,44,62,0|bm8900,47,63,1|bwo3jz,47,63,1|bwo3k0,44,62,0|c4ybnz,44,62,0|c4ybo0,47,63,1|cfr4vz,47,63,1|cfr4w0,44,62,0|cnoebz,44,62,0|cnoec0,47,63,1|cyh7jz,47,63,1|cyh7k0,44,62,0|d6egzz,44,62,0|d6eh00,47,63,1|dh7a7z,47,63,1|dh7a80,44,62,0|dphibz,44,62,0|dphic0,47,63,1|dzxcvz,47,63,1|dzxcw0,44,62,0|e87kzz,44,62,0|e87l00,47,63,1|einfjz,47,63,1|einfk0,44,62,0|eqxnnz,44,62,0|eqxno0,47,63,1|f1di7z,47,63,1|f1di80,44,62,0|f9nqbz,44,62,0|f9nqc0,47,63,1|fkgjjz,47,63,1|fkgjk0,44,62,0|fsdszz,44,62,0|fsdt00,47,63,1|g36m7z,47,63,1|g36m80,44,62,0|gb3vnz,44,62,0|gb3vo0,47,63,1|glwovz,47,63,1|glwow0,44,62,0|gu6wzz,44,62,0|gu6x00,47,63,1|h4mrjz,47,63,1|h4mrk0,44,62,0|hcwznz,44,62,0|hcwzo0,47,63,1|hncu7z,47,63,1|hncu80,44,62,0|hvn2bz,44,62,0|hvn2c0,47,63,1|i6fvjz,47,63,1|i6fvk0,44,62,0|ied4zz,44,62,0|ied500,47,63,1|ip5y7z,47,63,1|ip5y80,44,62,0|ix37nz,44,62,0|ix37o0,47,63,1|j7w0vz,47,63,1|j7w0w0,44,62,0|jeqebz,44,62,0|jeqec0,47,63,1|jqz27z,47,63,1|jqz280,44,62,0|jxggzz,44,62,0|jxgh00,47,63,1|k9p4vz,47,63,1|k9p4w0,44,62,0|kg6jnz,44,62,0|kg6jo0,47,63,1|ksf7jz,47,63,1|ksf7k0,44,62,0|kz9kzz,44,62,0|kz9l00,47,63,1|lbi8vz,47,63,1|lbi8w0,44,62,0|lhznnz,44,62,0|lhzno0,47,63,1|lu8bjz,47,63,1|lu8bk0,44,62,0|m0pqbz,44,62,0|m0pqc0,47,63,1|mcye7z,47,63,1|mcye80,44,62,0|mjfszz,44,62,0|mjft00,47,63,1|mvogvz,47,63,1|mvogw0,44,62,0|n25vnz,44,62,0|n25vo0,47,63,1|neejjz,47,63,1|neejk0,44,62,0|nkvybz,44,62,0|nkvyc0,47,63,1|nx4m7z,47,63,1|nx4m80,44,62,0|o3yznz,44,62,0|o3yzo0,47,63,1|og7njz,47,63,1|og7nk0,44,62,0|omp2bz,44,62,0|omp2c0,47,63,1|oyxq7z,47,63,1|oyxq80,44,62,0|p5f4zz,44,62,0|p5f500,47,63,1|phnsvz,47,63,1|phnsw0,44,62,0|po57nz,44,62,0|po57o0,47,63,1|q0dvjz,47,63,1|q0dvk0,44,62,0|q6vabz,44,62,0|q6vac0,47,63,1|qj3y7z,47,63,1|qj3y80,44,62,0|qpybnz,44,62,0|qpybo0,47,63,1|r26zjz,47,63,1|r26zk0,44,62,0|r8oebz,44,62,0|r8oec0,47,63,1|rkx27z,47,63,1|rkx280,44,62,0|rregzz,44,62,0|rreh00,47,63,1|s3n4vz,47,63,1|s3n4w0,44,62,0|sa4jnz,44,62,0|sa4jo0,47,63,1|smd7jz,47,63,1|smd7k0,44,62,0|ssumbz,44,62,0|ssumc0,47,63,1|t53a7z,47,63,1|t53a80,44,62,0|tbkozz,44,62,0|tbkp00,47,63,1|tntcvz,47,63,1|tntcw0,44,62,0|tunqbz,44,62,0|tunqc0,47,63,1|u6we7z,47,63,1|u6we80,44,62,0|uddszz,44,62,0|uddt00,47,63,1|upmgvz,47,63,1|upmgw0,44,62,0|uw3vnz,44,62,0|uw3vo0,47,63,1|v8cjjz,47,63,1|v8cjk0,44,62,0|vetybz,44,62,0|vetyc0,47,63,1|vr2m7z,47,63,1|vr2m80,44,62,0|vxk0zz,44,62,0|vxk100,47,63,1|w9sovz,47,63,1|w9sow0,44,62,0|wgn2bz,44,62,0|wgn2c0,47,63,1|wsvq7z,47,63,1|wsvq80,44,62,0|wzd4zz,44,62,0|wzd500,47,63,1|xblsvz,47,63,1|xblsw0,44,62,0|xi37nz,44,62,0|xi37o0,47,63,1|xubvjz,47,63,1|xubvk0,44,62,0|y0tabz,44,62,0|y0tac0,47,63,1|yd1y7z,47,63,1|yd1y80,44,62,0|yjjczz,44,62,0|yjjd00,47,63,1|yvs0vz,47,63,1|yvs0w0,44,62,0|z29fnz,44,62,0|z29fo0,47,63,1|zei3jz,47,63,1|zei3k0,44,62,0|zlcgzz,44,62,0|zlch00,47,63,1|zxl4vz,47,63,1|zxl4w0,44,62,0|1042jnz,44,62,0|1042jo0,47,63,1|10gb7jz,47,63,1|10gb7k0,44,62,0|10msmbz,44,62,0|10msmc0,47,63,1|10z1a7z,47,63,1|10z1a80,44,62,0|115iozz,44,62,0|115ip00,47,63,1|11hrcvz,47,63,1|11hrcw0,44,62,0|11o8rnz,44,62,0|11o8ro0,47,63,1|120hfjz,47,63,1|120hfk0,44,62,0|126yubz,44,62,0|126yuc0,47,63,1|12j7i7z,47,63,1|12j7i80,44,62,0|12q1vnz,44,62,0|12q1vo0,47,63,1|132ajjz,47,63,1|132ajk0,44,62,0|138rybz,44,62,0|138ryc0,47,63,1|13l0m7z,47,63,1|13l0m80,44,62,0|13ri0zz,44,62,0|13ri100,47,63,1|143qovz,47,63,1|143qow0,44,62,0|14a83nz,44,62,0|14a83o0,47,63,1|14mgrjz,47,63,1|14mgrk0,44,62,0|14sy6bz,44,62,0|14sy6c0,47,63,1|1556u7z,47,63,1|1556u80,44,62,0|15c17nz,44,62,0|15c17o0,47,63,1|15o9vjz,47,63,1|15o9vk0,44,62,0|15urabz,44,62,0|15urac0,47,63,1|166zy7z,47,63,1|166zy80,44,62,0|16dhczz,44,62,0|16dhd00,47,63,1|16pq0vz,47,63,1|16pq0w0,44,62,0|16w7fnz,44,62,0|16w7fo0,47,63,1|178g3jz,47,63,1|178g3k0,44,62,0|17exibz,44,62,0|17exic0,47,63,1|17r667z,47,63,1|17r6680,44,62,0|17xnkzz,44,62,0|17xnl00,47,63,1|189w8vz,47,63,1|189w8w0,44,62,0|18gqmbz,44,62,0|18gqmc0,47,63,1|18sza7z,47,63,1|18sza80,44,62,0|18zgozz,44,62,0|18zgp00,47,63,1|19bpcvz,47,63,1|19bpcw0,44,62,0|19i6rnz,44,62,0|19i6ro0,47,63,1|19uffjz,47,63,1|19uffk0,44,62,0|1a0wubz,44,62,0|1a0wuc0,47,63,1|1ad5i7z,47,63,1|1ad5i80,44,62,0|1ajmwzz,44,62,0|1ajmx00,47,63,1|1avvkvz,47,63,1|1avvkw0,44,62,0|1b2pybz,44,62,0|1b2pyc0,47,63,1|1beym7z,47,63,1|1beym80,44,62,0|1blg0zz,44,62,0|1blg100,47,63,1|1bxoovz,47,63,1|1bxoow0,44,62,0|1c463nz,44,62,0|1c463o0,47,63,1|1cgerjz,47,63,1|1cgerk0,44,62,0|1cmw6bz,44,62,0|1cmw6c0,47,63,1|1cz4u7z,47,63,1|1cz4u80,44,62,0|1d5m8zz,44,62,0|1d5m900,47,63,1|1dhuwvz,47,63,1|1dhuww0,44,62,0|1docbnz,44,62,0|1docbo0,47,63,1|1e0kzjz,47,63,1|1e0kzk0,44,62,0|1e7fczz,44,62,0|1e7fd00,47,63,1|1ejo0vz,47,63,1|1ejo0w0,44,62,0|1eq5fnz,44,62,0|1eq5fo0,47,63,1|1f2e3jz,47,63,1|1f2e3k0,44,62,0|1f8vibz,44,62,0|1f8vic0,47,63,1|1fl467z,47,63,1|1fl4680,44,62,0|1frlkzz,44,62,0|1frll00,47,63,1|1g3u8vz,47,63,1|1g3u8w0,44,62,0|1gabnnz,44,62,0|1gabno0,47,63,1|1gmkbjz,47,63,1|1gmkbk0,44,62,0|1gt1qbz,44,62,0|1gt1qc0,47,63,1|1h5ae7z,47,63,1|1h5ae80,44,62,0|1hc4rnz,44,62,0|1hc4ro0,47,63,1|1hodfjz,47,63,1|1hodfk0,44,62,0|1huuubz,44,62,0|1huuuc0,47,63,1|1i73i7z,47,63,1|1i73i80,44,62,0|1idkwzz,44,62,0|1idkx00,47,63,1|1iptkvz,47,63,1|1iptkw0,44,62,0|1iwaznz,44,62,0|1iwazo0,47,63,1|1j8jnjz,47,63,1|1j8jnk0,44,62,0|1jf12bz,44,62,0|1jf12c0,47,63,1|1jr9q7z,47,63,1|1jr9q80,44,62,0|1jy43nz,44,62,0|1jy43o0,47,63,1|1kacrjz,47,63,1|1kacrk0,44,62,0|1kgu6bz,44,62,0|1kgu6c0,47,63,1|1kt2u7z,47,63,1|1kt2u80,44,62,0|1kzk8zz,44,62,0|1kzk900,47,63,1|1lbswvz,47,63,1|1lbsww0,44,62,0|1liabnz,44,62,0|1liabo0,47,63,1|1luizjz,47,63,1|1luizk0,44,62,0|1m10ebz,44,62,0|1m10ec0,47,63,1|1md927z,47,63,1|1md9280,44,62,0|1mjqgzz,44,62,0|1mjqh00,47,63,1|1mvz4vz,47,63,1|1mvz4w0,44,62,0|1n2tibz,44,62,0|1n2tic0,47,63,1|1nf267z,47,63,1|1nf2680,44,62,0|1nljkzz,44,62,0|1nljl00,47,63,1|1nxs8vz,47,63,1|1nxs8w0,44,62,0|1o49nnz,44,62,0|1o49no0,47,63,1|1ogibjz,47,63,1|1ogibk0,44,62,0|1omzqbz,44,62,0|1omzqc0,47,63,1|1oz8e7z,47,63,1|1oz8e80,44,62,0|1p5pszz,44,62,0|1p5pt00,47,63,1|1phygvz,47,63,1|1phygw0,44,62,0|1posubz,44,62,0|1posuc0,47,63,1|1q11i7z,47,63,1|1q11i80,44,62,0|1q7iwzz,44,62,0|1q7ix00,47,63,1|1qjrkvz,47,63,1|1qjrkw0,44,62,0|1qq8znz,44,62,0|1qq8zo0,47,63,1|1r2hnjz,47,63,1|1r2hnk0,44,62,0|1r8z2bz,44,62,0|1r8z2c0,47,63,1|1rl7q7z,47,63,1|1rl7q80,44,62,0|1rrp4zz,44,62,0|1rrp500,47,63,1|1s3xsvz,47,63,1|1s3xsw0,44,62,0|1saf7nz,44,62,0|1saf7o0,47,63,1|1smnvjz,47,63,1|1smnvk0,44,62,0|1sti8zz,44,62,0|1sti900,47,63,1|1t5qwvz,47,63,1|1t5qww0,44,62,0|1tc8bnz,44,62,0|1tc8bo0,47,63,1|1togzjz,47,63,1|1togzk0,44,62,0|1tuyebz,44,62,0|1tuyec0,47,63,1|1u7727z,47,63,1|1u77280,44,62,0|1udogzz,44,62,0|1udoh00,47,63,1|1upx4vz,47,63,1|1upx4w0,44,62,0|1uwejnz,44,62,0|1uwejo0,47,63,1|1v8n7jz,47,63,1|1v8n7k0,44,62,0|1vf4mbz,44,62,0|1vf4mc0,47,63,1|1vrda7z,47,63,1|1vrda80,44,62,0|NaN,44,62,0\",\"America/Iqaluit|,59,1,0|-eb6ao1,59,1,0|-eb6ao0,70,40,1|-cq2tg1,70,40,1|-cq2tg0,71,40,1|-cnp3c1,71,40,1|-cnp3c0,43,59,0|-2g1zg1,43,59,0|-2g1zg0,79,41,1|-26bzg1,79,41,1|-26bzg0,43,59,0|5dw63z,43,59,0|5dw640,61,40,1|5n94nz,61,40,1|5n94o0,43,59,0|5wm8rz,43,59,0|5wm8s0,61,40,1|65z7bz,61,40,1|65z7c0,43,59,0|6fcbfz,43,59,0|6fcbg0,61,40,1|6p28nz,61,40,1|6p28o0,43,59,0|6y2e3z,43,59,0|6y2e40,61,40,1|77sbbz,61,40,1|77sbc0,43,59,0|7h5ffz,43,59,0|7h5fg0,61,40,1|7qidzz,61,40,1|7qie00,43,59,0|7zvi3z,43,59,0|7zvi40,61,40,1|898gnz,61,40,1|898go0,43,59,0|8ilkrz,43,59,0|8ilks0,61,40,1|8ryjbz,61,40,1|8ryjc0,43,59,0|908rfz,43,59,0|908rg0,61,40,1|9aolzz,61,40,1|9aom00,43,59,0|9iyu3z,43,59,0|9iyu40,61,40,1|9trnbz,61,40,1|9trnc0,43,59,0|a1owrz,43,59,0|a1ows0,61,40,1|achpzz,61,40,1|achq00,43,59,0|akezfz,43,59,0|akezg0,61,40,1|av7snz,61,40,1|av7so0,43,59,0|b3i0rz,43,59,0|b3i0s0,61,40,1|bdxvbz,61,40,1|bdxvc0,43,59,0|bm83fz,43,59,0|bm83g0,61,40,1|bwnxzz,61,40,1|bwny00,43,59,0|c4y63z,43,59,0|c4y640,61,40,1|cfqzbz,61,40,1|cfqzc0,43,59,0|cno8rz,43,59,0|cno8s0,61,40,1|cyh1zz,61,40,1|cyh200,43,59,0|d6ebfz,43,59,0|d6ebg0,61,40,1|dh74nz,61,40,1|dh74o0,43,59,0|dphcrz,43,59,0|dphcs0,61,40,1|dzx7bz,61,40,1|dzx7c0,43,59,0|e87ffz,43,59,0|e87fg0,61,40,1|ein9zz,61,40,1|eina00,43,59,0|eqxi3z,43,59,0|eqxi40,61,40,1|f1dcnz,61,40,1|f1dco0,43,59,0|f9nkrz,43,59,0|f9nks0,61,40,1|fkgdzz,61,40,1|fkge00,45,63,0|fsdq7z,45,63,0|fsdq80,48,59,1|g36jfz,48,59,1|g36jg0,43,59,0|gb3q3z,43,59,0|gb3q40,61,40,1|glwjbz,61,40,1|glwjc0,43,59,0|gu6rfz,43,59,0|gu6rg0,61,40,1|h4mlzz,61,40,1|h4mm00,43,59,0|hcwu3z,43,59,0|hcwu40,61,40,1|hnconz,61,40,1|hncoo0,43,59,0|hvmwrz,43,59,0|hvmws0,61,40,1|i6fpzz,61,40,1|i6fq00,43,59,0|ieczfz,43,59,0|ieczg0,61,40,1|ip5snz,61,40,1|ip5so0,43,59,0|ix323z,43,59,0|ix3240,61,40,1|j7vvbz,61,40,1|j7vvc0,43,59,0|jeq8rz,43,59,0|jeq8s0,61,40,1|jqywnz,61,40,1|jqywo0,43,59,0|jxgbfz,43,59,0|jxgbg0,61,40,1|k9ozbz,61,40,1|k9ozc0,43,59,0|kg6e3z,43,59,0|kg6e40,61,40,1|ksf1zz,61,40,1|ksf200,43,59,0|kz9ffz,43,59,0|kz9fg0,61,40,1|lbi3bz,61,40,1|lbi3c0,43,59,0|lhzi3z,43,59,0|lhzi40,61,40,1|lu85zz,61,40,1|lu8600,43,59,0|m0pkrz,43,59,0|m0pks0,61,40,1|mcy8nz,61,40,1|mcy8o0,43,59,0|mjfnfz,43,59,0|mjfng0,61,40,1|mvobbz,61,40,1|mvobc0,43,59,0|n25q3z,43,59,0|n25q40,61,40,1|needzz,61,40,1|neee00,43,59,0|nkvsrz,43,59,0|nkvss0,61,40,1|nx4gnz,61,40,1|nx4go0,43,59,0|o3yu3z,43,59,0|o3yu40,61,40,1|og7hzz,61,40,1|og7i00,43,59,0|omowrz,43,59,0|omows0,61,40,1|oyxknz,61,40,1|oyxko0,43,59,0|p5ezfz,43,59,0|p5ezg0,61,40,1|phnnbz,61,40,1|phnnc0,43,59,0|po523z,43,59,0|po5240,61,40,1|q0dpzz,61,40,1|q0dq00,43,59,0|q6v4rz,43,59,0|q6v4s0,61,40,1|qj3snz,61,40,1|qj3so0,43,59,0|qpy63z,43,59,0|qpy640,61,40,1|r26tzz,61,40,1|r26u00,43,59,0|r8o8rz,43,59,0|r8o8s0,61,40,1|rkwwnz,61,40,1|rkwwo0,43,59,0|rrebfz,43,59,0|rrebg0,61,40,1|s3mzbz,61,40,1|s3mzc0,43,59,0|sa4e3z,43,59,0|sa4e40,61,40,1|smd1zz,61,40,1|smd200,43,59,0|ssugrz,43,59,0|ssugs0,61,40,1|t534nz,61,40,1|t534o0,43,59,0|tbkjfz,43,59,0|tbkjg0,61,40,1|tnt7bz,61,40,1|tnt7c0,43,59,0|tunkrz,43,59,0|tunks0,61,40,1|u6w8nz,61,40,1|u6w8o0,43,59,0|uddnfz,43,59,0|uddng0,61,40,1|upmbbz,61,40,1|upmbc0,43,59,0|uw3q3z,43,59,0|uw3q40,61,40,1|v8cdzz,61,40,1|v8ce00,43,59,0|vetsrz,43,59,0|vetss0,61,40,1|vr2gnz,61,40,1|vr2go0,43,59,0|vxjvfz,43,59,0|vxjvg0,61,40,1|w9sjbz,61,40,1|w9sjc0,43,59,0|wgmwrz,43,59,0|wgmws0,61,40,1|wsvknz,61,40,1|wsvko0,43,59,0|wzczfz,43,59,0|wzczg0,61,40,1|xblnbz,61,40,1|xblnc0,43,59,0|xi323z,43,59,0|xi3240,61,40,1|xubpzz,61,40,1|xubq00,43,59,0|y0t4rz,43,59,0|y0t4s0,61,40,1|yd1snz,61,40,1|yd1so0,43,59,0|yjj7fz,43,59,0|yjj7g0,61,40,1|yvrvbz,61,40,1|yvrvc0,43,59,0|z29a3z,43,59,0|z29a40,61,40,1|zehxzz,61,40,1|zehy00,43,59,0|zlcbfz,43,59,0|zlcbg0,61,40,1|zxkzbz,61,40,1|zxkzc0,43,59,0|1042e3z,43,59,0|1042e40,61,40,1|10gb1zz,61,40,1|10gb200,43,59,0|10msgrz,43,59,0|10msgs0,61,40,1|10z14nz,61,40,1|10z14o0,43,59,0|115ijfz,43,59,0|115ijg0,61,40,1|11hr7bz,61,40,1|11hr7c0,43,59,0|11o8m3z,43,59,0|11o8m40,61,40,1|120h9zz,61,40,1|120ha00,43,59,0|126yorz,43,59,0|126yos0,61,40,1|12j7cnz,61,40,1|12j7co0,43,59,0|12q1q3z,43,59,0|12q1q40,61,40,1|132adzz,61,40,1|132ae00,43,59,0|138rsrz,43,59,0|138rss0,61,40,1|13l0gnz,61,40,1|13l0go0,43,59,0|13rhvfz,43,59,0|13rhvg0,61,40,1|143qjbz,61,40,1|143qjc0,43,59,0|14a7y3z,43,59,0|14a7y40,61,40,1|14mglzz,61,40,1|14mgm00,43,59,0|14sy0rz,43,59,0|14sy0s0,61,40,1|1556onz,61,40,1|1556oo0,43,59,0|15c123z,43,59,0|15c1240,61,40,1|15o9pzz,61,40,1|15o9q00,43,59,0|15ur4rz,43,59,0|15ur4s0,61,40,1|166zsnz,61,40,1|166zso0,43,59,0|16dh7fz,43,59,0|16dh7g0,61,40,1|16ppvbz,61,40,1|16ppvc0,43,59,0|16w7a3z,43,59,0|16w7a40,61,40,1|178fxzz,61,40,1|178fy00,43,59,0|17excrz,43,59,0|17excs0,61,40,1|17r60nz,61,40,1|17r60o0,43,59,0|17xnffz,43,59,0|17xnfg0,61,40,1|189w3bz,61,40,1|189w3c0,43,59,0|18gqgrz,43,59,0|18gqgs0,61,40,1|18sz4nz,61,40,1|18sz4o0,43,59,0|18zgjfz,43,59,0|18zgjg0,61,40,1|19bp7bz,61,40,1|19bp7c0,43,59,0|19i6m3z,43,59,0|19i6m40,61,40,1|19uf9zz,61,40,1|19ufa00,43,59,0|1a0worz,43,59,0|1a0wos0,61,40,1|1ad5cnz,61,40,1|1ad5co0,43,59,0|1ajmrfz,43,59,0|1ajmrg0,61,40,1|1avvfbz,61,40,1|1avvfc0,43,59,0|1b2psrz,43,59,0|1b2pss0,61,40,1|1beygnz,61,40,1|1beygo0,43,59,0|1blfvfz,43,59,0|1blfvg0,61,40,1|1bxojbz,61,40,1|1bxojc0,43,59,0|1c45y3z,43,59,0|1c45y40,61,40,1|1cgelzz,61,40,1|1cgem00,43,59,0|1cmw0rz,43,59,0|1cmw0s0,61,40,1|1cz4onz,61,40,1|1cz4oo0,43,59,0|1d5m3fz,43,59,0|1d5m3g0,61,40,1|1dhurbz,61,40,1|1dhurc0,43,59,0|1doc63z,43,59,0|1doc640,61,40,1|1e0ktzz,61,40,1|1e0ku00,43,59,0|1e7f7fz,43,59,0|1e7f7g0,61,40,1|1ejnvbz,61,40,1|1ejnvc0,43,59,0|1eq5a3z,43,59,0|1eq5a40,61,40,1|1f2dxzz,61,40,1|1f2dy00,43,59,0|1f8vcrz,43,59,0|1f8vcs0,61,40,1|1fl40nz,61,40,1|1fl40o0,43,59,0|1frlffz,43,59,0|1frlfg0,61,40,1|1g3u3bz,61,40,1|1g3u3c0,43,59,0|1gabi3z,43,59,0|1gabi40,61,40,1|1gmk5zz,61,40,1|1gmk600,43,59,0|1gt1krz,43,59,0|1gt1ks0,61,40,1|1h5a8nz,61,40,1|1h5a8o0,43,59,0|1hc4m3z,43,59,0|1hc4m40,61,40,1|1hod9zz,61,40,1|1hoda00,43,59,0|1huuorz,43,59,0|1huuos0,61,40,1|1i73cnz,61,40,1|1i73co0,43,59,0|1idkrfz,43,59,0|1idkrg0,61,40,1|1iptfbz,61,40,1|1iptfc0,43,59,0|1iwau3z,43,59,0|1iwau40,61,40,1|1j8jhzz,61,40,1|1j8ji00,43,59,0|1jf0wrz,43,59,0|1jf0ws0,61,40,1|1jr9knz,61,40,1|1jr9ko0,43,59,0|1jy3y3z,43,59,0|1jy3y40,61,40,1|1kaclzz,61,40,1|1kacm00,43,59,0|1kgu0rz,43,59,0|1kgu0s0,61,40,1|1kt2onz,61,40,1|1kt2oo0,43,59,0|1kzk3fz,43,59,0|1kzk3g0,61,40,1|1lbsrbz,61,40,1|1lbsrc0,43,59,0|1lia63z,43,59,0|1lia640,61,40,1|1luitzz,61,40,1|1luiu00,43,59,0|1m108rz,43,59,0|1m108s0,61,40,1|1md8wnz,61,40,1|1md8wo0,43,59,0|1mjqbfz,43,59,0|1mjqbg0,61,40,1|1mvyzbz,61,40,1|1mvyzc0,43,59,0|1n2tcrz,43,59,0|1n2tcs0,61,40,1|1nf20nz,61,40,1|1nf20o0,43,59,0|1nljffz,43,59,0|1nljfg0,61,40,1|1nxs3bz,61,40,1|1nxs3c0,43,59,0|1o49i3z,43,59,0|1o49i40,61,40,1|1ogi5zz,61,40,1|1ogi600,43,59,0|1omzkrz,43,59,0|1omzks0,61,40,1|1oz88nz,61,40,1|1oz88o0,43,59,0|1p5pnfz,43,59,0|1p5png0,61,40,1|1phybbz,61,40,1|1phybc0,43,59,0|1posorz,43,59,0|1posos0,61,40,1|1q11cnz,61,40,1|1q11co0,43,59,0|1q7irfz,43,59,0|1q7irg0,61,40,1|1qjrfbz,61,40,1|1qjrfc0,43,59,0|1qq8u3z,43,59,0|1qq8u40,61,40,1|1r2hhzz,61,40,1|1r2hi00,43,59,0|1r8ywrz,43,59,0|1r8yws0,61,40,1|1rl7knz,61,40,1|1rl7ko0,43,59,0|1rrozfz,43,59,0|1rrozg0,61,40,1|1s3xnbz,61,40,1|1s3xnc0,43,59,0|1saf23z,43,59,0|1saf240,61,40,1|1smnpzz,61,40,1|1smnq00,43,59,0|1sti3fz,43,59,0|1sti3g0,61,40,1|1t5qrbz,61,40,1|1t5qrc0,43,59,0|1tc863z,43,59,0|1tc8640,61,40,1|1togtzz,61,40,1|1togu00,43,59,0|1tuy8rz,43,59,0|1tuy8s0,61,40,1|1u76wnz,61,40,1|1u76wo0,43,59,0|1udobfz,43,59,0|1udobg0,61,40,1|1upwzbz,61,40,1|1upwzc0,43,59,0|1uwee3z,43,59,0|1uwee40,61,40,1|1v8n1zz,61,40,1|1v8n200,43,59,0|1vf4grz,43,59,0|1vf4gs0,61,40,1|1vrd4nz,61,40,1|1vrd4o0,43,59,0|NaN,43,59,0\",\"America/Jamaica|,0,99,0|-15r0v43,0,99,0|-15r0v42,74,99,0|-u85og3,74,99,0|-u85og2,43,59,0|23fcrz,43,59,0|23fcs0,61,40,1|2ijpzz,61,40,1|2ijq00,43,59,0|2oo63z,43,59,0|2oo640,61,40,1|319snz,61,40,1|319so0,43,59,0|3amwrz,43,59,0|3amws0,61,40,1|3kctzz,61,40,1|3kcu00,43,59,0|3tczfz,43,59,0|3tczg0,61,40,1|432wnz,61,40,1|432wo0,43,59,0|4cg0rz,43,59,0|4cg0s0,61,40,1|4lszbz,61,40,1|4lszc0,43,59,0|4v63fz,43,59,0|4v63g0,61,40,1|54j1zz,61,40,1|54j200,43,59,0|5dw63z,43,59,0|5dw640,61,40,1|5n94nz,61,40,1|5n94o0,43,59,0|5wm8rz,43,59,0|5wm8s0,61,40,1|65z7bz,61,40,1|65z7c0,43,59,0|6fcbfz,43,59,0|6fcbg0,61,40,1|6p28nz,61,40,1|6p28o0,43,59,0|6y2e3z,43,59,0|6y2e40,61,40,1|77sbbz,61,40,1|77sbc0,43,59,0|NaN,43,59,0\",\"America/Juneau|,0,117,0|-1hc7qk0,0,117,0|-1hc7qjz,0,118,0|-1078wfw,0,118,0|-1078wfv,46,38,0|-ek1w81,46,38,0|-ek1w80,68,62,1|-cq2tg1,68,62,1|-cq2tg0,69,62,1|-cnov01,69,62,1|-cnov00,46,38,0|-csc81,46,38,0|-csc80,56,62,1|-3fdo1,56,62,1|-3fdo0,46,38,0|5xqfz,46,38,0|5xqg0,56,62,1|faozz,56,62,1|fap00,46,38,0|ont3z,46,38,0|ont40,56,62,1|ydqbz,56,62,1|ydqc0,46,38,0|17qufz,46,38,0|17qug0,56,62,1|1h3szz,56,62,1|1h3t00,46,38,0|1qgx3z,46,38,0|1qgx40,56,62,1|1ztvnz,56,62,1|1ztvo0,46,38,0|23fl3z,46,38,0|23fl40,56,62,1|2ijybz,56,62,1|2ijyc0,46,38,0|2ooefz,46,38,0|2ooeg0,56,62,1|31a0zz,56,62,1|31a100,46,38,0|3an53z,46,38,0|3an540,56,62,1|3kd2bz,56,62,1|3kd2c0,46,38,0|3td7rz,46,38,0|3td7s0,56,62,1|4334zz,56,62,1|433500,46,38,0|4cg93z,46,38,0|4cg940,56,62,1|4lt7nz,56,62,1|4lt7o0,46,38,0|4v6brz,46,38,0|4v6bs0,56,62,1|54jabz,56,62,1|54jac0,46,38,0|5dwefz,46,38,0|5dweg0,64,38,1|5n9frz,64,38,1|5n9fs0,46,38,0|5wmh3z,46,38,0|5wmh40,56,62,1|65zfnz,56,62,1|65zfo0,46,38,0|6fcjrz,46,38,0|6fcjs0,56,62,1|6p2gzz,56,62,1|6p2h00,46,38,0|6y2mfz,46,38,0|6y2mg0,56,62,1|77sjnz,56,62,1|77sjo0,35,35,0|79dybz,35,35,0|79dyc0,36,35,0|7h5qjz,36,35,0|7h5qk0,37,38,1|7qip3z,37,38,1|7qip40,36,35,0|7zvt7z,36,35,0|7zvt80,37,38,1|898rrz,37,38,1|898rs0,36,35,0|8ilvvz,36,35,0|8ilvw0,37,38,1|8ryufz,37,38,1|8ryug0,36,35,0|9092jz,36,35,0|9092k0,37,38,1|9aox3z,37,38,1|9aox40,36,35,0|9iz57z,36,35,0|9iz580,37,38,1|9tryfz,37,38,1|9tryg0,36,35,0|a1p7vz,36,35,0|a1p7w0,37,38,1|aci13z,37,38,1|aci140,36,35,0|akfajz,36,35,0|akfak0,37,38,1|av83rz,37,38,1|av83s0,36,35,0|b3ibvz,36,35,0|b3ibw0,37,38,1|bdy6fz,37,38,1|bdy6g0,36,35,0|bm8ejz,36,35,0|bm8ek0,37,38,1|bwo93z,37,38,1|bwo940,36,35,0|c4yh7z,36,35,0|c4yh80,37,38,1|cfrafz,37,38,1|cfrag0,36,35,0|cnojvz,36,35,0|cnojw0,37,38,1|cyhd3z,37,38,1|cyhd40,36,35,0|d6emjz,36,35,0|d6emk0,37,38,1|dh7frz,37,38,1|dh7fs0,36,35,0|dphnvz,36,35,0|dphnw0,37,38,1|dzxifz,37,38,1|dzxig0,36,35,0|e87qjz,36,35,0|e87qk0,37,38,1|einl3z,37,38,1|einl40,36,35,0|eqxt7z,36,35,0|eqxt80,37,38,1|f1dnrz,37,38,1|f1dns0,36,35,0|f9nvvz,36,35,0|f9nvw0,37,38,1|fkgp3z,37,38,1|fkgp40,36,35,0|fsdyjz,36,35,0|fsdyk0,37,38,1|g36rrz,37,38,1|g36rs0,36,35,0|gb417z,36,35,0|gb4180,37,38,1|glwufz,37,38,1|glwug0,36,35,0|gu72jz,36,35,0|gu72k0,37,38,1|h4mx3z,37,38,1|h4mx40,36,35,0|hcx57z,36,35,0|hcx580,37,38,1|hnczrz,37,38,1|hnczs0,36,35,0|hvn7vz,36,35,0|hvn7w0,37,38,1|i6g13z,37,38,1|i6g140,36,35,0|iedajz,36,35,0|iedak0,37,38,1|ip63rz,37,38,1|ip63s0,36,35,0|ix3d7z,36,35,0|ix3d80,37,38,1|j7w6fz,37,38,1|j7w6g0,36,35,0|jeqjvz,36,35,0|jeqjw0,37,38,1|jqz7rz,37,38,1|jqz7s0,36,35,0|jxgmjz,36,35,0|jxgmk0,37,38,1|k9pafz,37,38,1|k9pag0,36,35,0|kg6p7z,36,35,0|kg6p80,37,38,1|ksfd3z,37,38,1|ksfd40,36,35,0|kz9qjz,36,35,0|kz9qk0,37,38,1|lbiefz,37,38,1|lbieg0,36,35,0|lhzt7z,36,35,0|lhzt80,37,38,1|lu8h3z,37,38,1|lu8h40,36,35,0|m0pvvz,36,35,0|m0pvw0,37,38,1|mcyjrz,37,38,1|mcyjs0,36,35,0|mjfyjz,36,35,0|mjfyk0,37,38,1|mvomfz,37,38,1|mvomg0,36,35,0|n2617z,36,35,0|n26180,37,38,1|neep3z,37,38,1|neep40,36,35,0|nkw3vz,36,35,0|nkw3w0,37,38,1|nx4rrz,37,38,1|nx4rs0,36,35,0|o3z57z,36,35,0|o3z580,37,38,1|og7t3z,37,38,1|og7t40,36,35,0|omp7vz,36,35,0|omp7w0,37,38,1|oyxvrz,37,38,1|oyxvs0,36,35,0|p5fajz,36,35,0|p5fak0,37,38,1|phnyfz,37,38,1|phnyg0,36,35,0|po5d7z,36,35,0|po5d80,37,38,1|q0e13z,37,38,1|q0e140,36,35,0|q6vfvz,36,35,0|q6vfw0,37,38,1|qj43rz,37,38,1|qj43s0,36,35,0|qpyh7z,36,35,0|qpyh80,37,38,1|r2753z,37,38,1|r27540,36,35,0|r8ojvz,36,35,0|r8ojw0,37,38,1|rkx7rz,37,38,1|rkx7s0,36,35,0|rremjz,36,35,0|rremk0,37,38,1|s3nafz,37,38,1|s3nag0,36,35,0|sa4p7z,36,35,0|sa4p80,37,38,1|smdd3z,37,38,1|smdd40,36,35,0|ssurvz,36,35,0|ssurw0,37,38,1|t53frz,37,38,1|t53fs0,36,35,0|tbkujz,36,35,0|tbkuk0,37,38,1|tntifz,37,38,1|tntig0,36,35,0|tunvvz,36,35,0|tunvw0,37,38,1|u6wjrz,37,38,1|u6wjs0,36,35,0|uddyjz,36,35,0|uddyk0,37,38,1|upmmfz,37,38,1|upmmg0,36,35,0|uw417z,36,35,0|uw4180,37,38,1|v8cp3z,37,38,1|v8cp40,36,35,0|veu3vz,36,35,0|veu3w0,37,38,1|vr2rrz,37,38,1|vr2rs0,36,35,0|vxk6jz,36,35,0|vxk6k0,37,38,1|w9sufz,37,38,1|w9sug0,36,35,0|wgn7vz,36,35,0|wgn7w0,37,38,1|wsvvrz,37,38,1|wsvvs0,36,35,0|wzdajz,36,35,0|wzdak0,37,38,1|xblyfz,37,38,1|xblyg0,36,35,0|xi3d7z,36,35,0|xi3d80,37,38,1|xuc13z,37,38,1|xuc140,36,35,0|y0tfvz,36,35,0|y0tfw0,37,38,1|yd23rz,37,38,1|yd23s0,36,35,0|yjjijz,36,35,0|yjjik0,37,38,1|yvs6fz,37,38,1|yvs6g0,36,35,0|z29l7z,36,35,0|z29l80,37,38,1|zei93z,37,38,1|zei940,36,35,0|zlcmjz,36,35,0|zlcmk0,37,38,1|zxlafz,37,38,1|zxlag0,36,35,0|1042p7z,36,35,0|1042p80,37,38,1|10gbd3z,37,38,1|10gbd40,36,35,0|10msrvz,36,35,0|10msrw0,37,38,1|10z1frz,37,38,1|10z1fs0,36,35,0|115iujz,36,35,0|115iuk0,37,38,1|11hrifz,37,38,1|11hrig0,36,35,0|11o8x7z,36,35,0|11o8x80,37,38,1|120hl3z,37,38,1|120hl40,36,35,0|126yzvz,36,35,0|126yzw0,37,38,1|12j7nrz,37,38,1|12j7ns0,36,35,0|12q217z,36,35,0|12q2180,37,38,1|132ap3z,37,38,1|132ap40,36,35,0|138s3vz,36,35,0|138s3w0,37,38,1|13l0rrz,37,38,1|13l0rs0,36,35,0|13ri6jz,36,35,0|13ri6k0,37,38,1|143qufz,37,38,1|143qug0,36,35,0|14a897z,36,35,0|14a8980,37,38,1|14mgx3z,37,38,1|14mgx40,36,35,0|14sybvz,36,35,0|14sybw0,37,38,1|1556zrz,37,38,1|1556zs0,36,35,0|15c1d7z,36,35,0|15c1d80,37,38,1|15oa13z,37,38,1|15oa140,36,35,0|15urfvz,36,35,0|15urfw0,37,38,1|16703rz,37,38,1|16703s0,36,35,0|16dhijz,36,35,0|16dhik0,37,38,1|16pq6fz,37,38,1|16pq6g0,36,35,0|16w7l7z,36,35,0|16w7l80,37,38,1|178g93z,37,38,1|178g940,36,35,0|17exnvz,36,35,0|17exnw0,37,38,1|17r6brz,37,38,1|17r6bs0,36,35,0|17xnqjz,36,35,0|17xnqk0,37,38,1|189wefz,37,38,1|189weg0,36,35,0|18gqrvz,36,35,0|18gqrw0,37,38,1|18szfrz,37,38,1|18szfs0,36,35,0|18zgujz,36,35,0|18zguk0,37,38,1|19bpifz,37,38,1|19bpig0,36,35,0|19i6x7z,36,35,0|19i6x80,37,38,1|19ufl3z,37,38,1|19ufl40,36,35,0|1a0wzvz,36,35,0|1a0wzw0,37,38,1|1ad5nrz,37,38,1|1ad5ns0,36,35,0|1ajn2jz,36,35,0|1ajn2k0,37,38,1|1avvqfz,37,38,1|1avvqg0,36,35,0|1b2q3vz,36,35,0|1b2q3w0,37,38,1|1beyrrz,37,38,1|1beyrs0,36,35,0|1blg6jz,36,35,0|1blg6k0,37,38,1|1bxoufz,37,38,1|1bxoug0,36,35,0|1c4697z,36,35,0|1c46980,37,38,1|1cgex3z,37,38,1|1cgex40,36,35,0|1cmwbvz,36,35,0|1cmwbw0,37,38,1|1cz4zrz,37,38,1|1cz4zs0,36,35,0|1d5mejz,36,35,0|1d5mek0,37,38,1|1dhv2fz,37,38,1|1dhv2g0,36,35,0|1doch7z,36,35,0|1doch80,37,38,1|1e0l53z,37,38,1|1e0l540,36,35,0|1e7fijz,36,35,0|1e7fik0,37,38,1|1ejo6fz,37,38,1|1ejo6g0,36,35,0|1eq5l7z,36,35,0|1eq5l80,37,38,1|1f2e93z,37,38,1|1f2e940,36,35,0|1f8vnvz,36,35,0|1f8vnw0,37,38,1|1fl4brz,37,38,1|1fl4bs0,36,35,0|1frlqjz,36,35,0|1frlqk0,37,38,1|1g3uefz,37,38,1|1g3ueg0,36,35,0|1gabt7z,36,35,0|1gabt80,37,38,1|1gmkh3z,37,38,1|1gmkh40,36,35,0|1gt1vvz,36,35,0|1gt1vw0,37,38,1|1h5ajrz,37,38,1|1h5ajs0,36,35,0|1hc4x7z,36,35,0|1hc4x80,37,38,1|1hodl3z,37,38,1|1hodl40,36,35,0|1huuzvz,36,35,0|1huuzw0,37,38,1|1i73nrz,37,38,1|1i73ns0,36,35,0|1idl2jz,36,35,0|1idl2k0,37,38,1|1iptqfz,37,38,1|1iptqg0,36,35,0|1iwb57z,36,35,0|1iwb580,37,38,1|1j8jt3z,37,38,1|1j8jt40,36,35,0|1jf17vz,36,35,0|1jf17w0,37,38,1|1jr9vrz,37,38,1|1jr9vs0,36,35,0|1jy497z,36,35,0|1jy4980,37,38,1|1kacx3z,37,38,1|1kacx40,36,35,0|1kgubvz,36,35,0|1kgubw0,37,38,1|1kt2zrz,37,38,1|1kt2zs0,36,35,0|1kzkejz,36,35,0|1kzkek0,37,38,1|1lbt2fz,37,38,1|1lbt2g0,36,35,0|1liah7z,36,35,0|1liah80,37,38,1|1luj53z,37,38,1|1luj540,36,35,0|1m10jvz,36,35,0|1m10jw0,37,38,1|1md97rz,37,38,1|1md97s0,36,35,0|1mjqmjz,36,35,0|1mjqmk0,37,38,1|1mvzafz,37,38,1|1mvzag0,36,35,0|1n2tnvz,36,35,0|1n2tnw0,37,38,1|1nf2brz,37,38,1|1nf2bs0,36,35,0|1nljqjz,36,35,0|1nljqk0,37,38,1|1nxsefz,37,38,1|1nxseg0,36,35,0|1o49t7z,36,35,0|1o49t80,37,38,1|1ogih3z,37,38,1|1ogih40,36,35,0|1omzvvz,36,35,0|1omzvw0,37,38,1|1oz8jrz,37,38,1|1oz8js0,36,35,0|1p5pyjz,36,35,0|1p5pyk0,37,38,1|1phymfz,37,38,1|1phymg0,36,35,0|1poszvz,36,35,0|1poszw0,37,38,1|1q11nrz,37,38,1|1q11ns0,36,35,0|1q7j2jz,36,35,0|1q7j2k0,37,38,1|1qjrqfz,37,38,1|1qjrqg0,36,35,0|1qq957z,36,35,0|1qq9580,37,38,1|1r2ht3z,37,38,1|1r2ht40,36,35,0|1r8z7vz,36,35,0|1r8z7w0,37,38,1|1rl7vrz,37,38,1|1rl7vs0,36,35,0|1rrpajz,36,35,0|1rrpak0,37,38,1|1s3xyfz,37,38,1|1s3xyg0,36,35,0|1safd7z,36,35,0|1safd80,37,38,1|1smo13z,37,38,1|1smo140,36,35,0|1stiejz,36,35,0|1stiek0,37,38,1|1t5r2fz,37,38,1|1t5r2g0,36,35,0|1tc8h7z,36,35,0|1tc8h80,37,38,1|1toh53z,37,38,1|1toh540,36,35,0|1tuyjvz,36,35,0|1tuyjw0,37,38,1|1u777rz,37,38,1|1u777s0,36,35,0|1udomjz,36,35,0|1udomk0,37,38,1|1upxafz,37,38,1|1upxag0,36,35,0|1uwep7z,36,35,0|1uwep80,37,38,1|1v8nd3z,37,38,1|1v8nd40,36,35,0|1vf4rvz,36,35,0|1vf4rw0,37,38,1|1vrdfrz,37,38,1|1vrdfs0,36,35,0|NaN,36,35,0\",\"America/Kentucky/Louisville|,0,119,0|-18y0m01,0,119,0|-18y0m00,45,63,0|-r0esg1,45,63,0|-r0esg0,48,59,1|-qplz81,48,59,1|-qplz80,45,63,0|-qhops1,45,63,0|-qhops0,48,59,1|-q6vwk1,48,59,1|-q6vwk0,45,63,0|-pefr41,45,63,0|-pefr40,48,59,1|-p841w1,48,59,1|-p841w0,45,63,0|-eyvds1,45,63,0|-eyvds0,48,59,1|-eqy9w1,48,59,1|-eqy9w0,45,63,0|-ek21s1,45,63,0|-ek21s0,52,59,1|-cq2tg1,52,59,1|-cq2tg0,53,59,1|-cnp0k1,53,59,1|-cnp0k0,45,63,0|-ccw7ad,45,63,0|-ccw7ac,48,59,1|-cb3b81,48,59,1|-cb3b80,45,63,0|-a9msg1,45,63,0|-a9msg0,48,59,1|-a22n81,48,59,1|-a22n80,45,63,0|-9qwps1,45,63,0|-9qwps0,48,59,1|-9izlw1,48,59,1|-9izlw0,45,63,0|-986n41,45,63,0|-986n40,48,59,1|-909j81,48,59,1|-909j80,45,63,0|-8pgkg1,45,63,0|-8pgkg0,48,59,1|-8hjgk1,48,59,1|-8hjgk0,45,63,0|-86qhs1,45,63,0|-86qhs0,48,59,1|-7ytdw1,48,59,1|-7ytdw0,45,63,0|-7o0f41,45,63,0|-7o0f40,48,59,1|-7g3b81,48,59,1|-7g3b80,45,63,0|-74xds1,45,63,0|-74xds0,48,59,1|-6vkf81,48,59,1|-6vkf80,45,63,0|-6m7b41,45,63,0|-6m7b40,48,59,1|-6cuck1,48,59,1|-6cuck0,45,63,0|-63h8g1,45,63,0|-63h8g0,48,59,1|-5u49w1,48,59,1|-5u49w0,45,63,0|-5kr5s1,45,63,0|-5kr5s0,48,59,1|-5be781,48,59,1|-5be780,45,63,0|-521341,45,63,0|-521340,48,59,1|-4sb5w1,48,59,1|-4sb5w0,45,63,0|-4iy1s1,45,63,0|-4iy1s0,48,59,1|-4emkk1,48,59,1|-4emkk0,43,59,0|-vin81,43,59,0|-vin80,61,40,1|-m5oo1,61,40,1|-m5oo0,43,59,0|-cskk1,43,59,0|-cskk0,61,40,1|-3fm01,61,40,1|-3fm00,43,59,0|5xi3z,43,59,0|5xi40,61,40,1|fagnz,61,40,1|fago0,43,59,0|onkrz,43,59,0|onks0,61,40,1|ydhzz,61,40,1|ydi00,43,59,0|17qm3z,43,59,0|17qm40,61,40,1|1h3knz,61,40,1|1h3ko0,43,59,0|1qgorz,43,59,0|1qgos0,61,40,1|1ztnbz,61,40,1|1ztnc0,43,59,0|23fcrz,43,59,0|23fcs0,48,59,1|2ijsrz,48,59,1|2ijss0,43,59,0|2oo63z,43,59,0|2oo640,61,40,1|319snz,61,40,1|319so0,43,59,0|3amwrz,43,59,0|3amws0,61,40,1|3kctzz,61,40,1|3kcu00,43,59,0|3tczfz,43,59,0|3tczg0,61,40,1|432wnz,61,40,1|432wo0,43,59,0|4cg0rz,43,59,0|4cg0s0,61,40,1|4lszbz,61,40,1|4lszc0,43,59,0|4v63fz,43,59,0|4v63g0,61,40,1|54j1zz,61,40,1|54j200,43,59,0|5dw63z,43,59,0|5dw640,61,40,1|5n94nz,61,40,1|5n94o0,43,59,0|5wm8rz,43,59,0|5wm8s0,61,40,1|65z7bz,61,40,1|65z7c0,43,59,0|6fcbfz,43,59,0|6fcbg0,61,40,1|6p28nz,61,40,1|6p28o0,43,59,0|6y2e3z,43,59,0|6y2e40,61,40,1|77sbbz,61,40,1|77sbc0,43,59,0|7h5ffz,43,59,0|7h5fg0,61,40,1|7qidzz,61,40,1|7qie00,43,59,0|7zvi3z,43,59,0|7zvi40,61,40,1|898gnz,61,40,1|898go0,43,59,0|8ilkrz,43,59,0|8ilks0,61,40,1|8ryjbz,61,40,1|8ryjc0,43,59,0|908rfz,43,59,0|908rg0,61,40,1|9aolzz,61,40,1|9aom00,43,59,0|9iyu3z,43,59,0|9iyu40,61,40,1|9trnbz,61,40,1|9trnc0,43,59,0|a1owrz,43,59,0|a1ows0,61,40,1|achpzz,61,40,1|achq00,43,59,0|akezfz,43,59,0|akezg0,61,40,1|av7snz,61,40,1|av7so0,43,59,0|b3i0rz,43,59,0|b3i0s0,61,40,1|bdxvbz,61,40,1|bdxvc0,43,59,0|bm83fz,43,59,0|bm83g0,61,40,1|bwnxzz,61,40,1|bwny00,43,59,0|c4y63z,43,59,0|c4y640,61,40,1|cfqzbz,61,40,1|cfqzc0,43,59,0|cno8rz,43,59,0|cno8s0,61,40,1|cyh1zz,61,40,1|cyh200,43,59,0|d6ebfz,43,59,0|d6ebg0,61,40,1|dh74nz,61,40,1|dh74o0,43,59,0|dphcrz,43,59,0|dphcs0,61,40,1|dzx7bz,61,40,1|dzx7c0,43,59,0|e87ffz,43,59,0|e87fg0,61,40,1|ein9zz,61,40,1|eina00,43,59,0|eqxi3z,43,59,0|eqxi40,61,40,1|f1dcnz,61,40,1|f1dco0,43,59,0|f9nkrz,43,59,0|f9nks0,61,40,1|fkgdzz,61,40,1|fkge00,43,59,0|fsdnfz,43,59,0|fsdng0,61,40,1|g36gnz,61,40,1|g36go0,43,59,0|gb3q3z,43,59,0|gb3q40,61,40,1|glwjbz,61,40,1|glwjc0,43,59,0|gu6rfz,43,59,0|gu6rg0,61,40,1|h4mlzz,61,40,1|h4mm00,43,59,0|hcwu3z,43,59,0|hcwu40,61,40,1|hnconz,61,40,1|hncoo0,43,59,0|hvmwrz,43,59,0|hvmws0,61,40,1|i6fpzz,61,40,1|i6fq00,43,59,0|ieczfz,43,59,0|ieczg0,61,40,1|ip5snz,61,40,1|ip5so0,43,59,0|ix323z,43,59,0|ix3240,61,40,1|j7vvbz,61,40,1|j7vvc0,43,59,0|jeq8rz,43,59,0|jeq8s0,61,40,1|jqywnz,61,40,1|jqywo0,43,59,0|jxgbfz,43,59,0|jxgbg0,61,40,1|k9ozbz,61,40,1|k9ozc0,43,59,0|kg6e3z,43,59,0|kg6e40,61,40,1|ksf1zz,61,40,1|ksf200,43,59,0|kz9ffz,43,59,0|kz9fg0,61,40,1|lbi3bz,61,40,1|lbi3c0,43,59,0|lhzi3z,43,59,0|lhzi40,61,40,1|lu85zz,61,40,1|lu8600,43,59,0|m0pkrz,43,59,0|m0pks0,61,40,1|mcy8nz,61,40,1|mcy8o0,43,59,0|mjfnfz,43,59,0|mjfng0,61,40,1|mvobbz,61,40,1|mvobc0,43,59,0|n25q3z,43,59,0|n25q40,61,40,1|needzz,61,40,1|neee00,43,59,0|nkvsrz,43,59,0|nkvss0,61,40,1|nx4gnz,61,40,1|nx4go0,43,59,0|o3yu3z,43,59,0|o3yu40,61,40,1|og7hzz,61,40,1|og7i00,43,59,0|omowrz,43,59,0|omows0,61,40,1|oyxknz,61,40,1|oyxko0,43,59,0|p5ezfz,43,59,0|p5ezg0,61,40,1|phnnbz,61,40,1|phnnc0,43,59,0|po523z,43,59,0|po5240,61,40,1|q0dpzz,61,40,1|q0dq00,43,59,0|q6v4rz,43,59,0|q6v4s0,61,40,1|qj3snz,61,40,1|qj3so0,43,59,0|qpy63z,43,59,0|qpy640,61,40,1|r26tzz,61,40,1|r26u00,43,59,0|r8o8rz,43,59,0|r8o8s0,61,40,1|rkwwnz,61,40,1|rkwwo0,43,59,0|rrebfz,43,59,0|rrebg0,61,40,1|s3mzbz,61,40,1|s3mzc0,43,59,0|sa4e3z,43,59,0|sa4e40,61,40,1|smd1zz,61,40,1|smd200,43,59,0|ssugrz,43,59,0|ssugs0,61,40,1|t534nz,61,40,1|t534o0,43,59,0|tbkjfz,43,59,0|tbkjg0,61,40,1|tnt7bz,61,40,1|tnt7c0,43,59,0|tunkrz,43,59,0|tunks0,61,40,1|u6w8nz,61,40,1|u6w8o0,43,59,0|uddnfz,43,59,0|uddng0,61,40,1|upmbbz,61,40,1|upmbc0,43,59,0|uw3q3z,43,59,0|uw3q40,61,40,1|v8cdzz,61,40,1|v8ce00,43,59,0|vetsrz,43,59,0|vetss0,61,40,1|vr2gnz,61,40,1|vr2go0,43,59,0|vxjvfz,43,59,0|vxjvg0,61,40,1|w9sjbz,61,40,1|w9sjc0,43,59,0|wgmwrz,43,59,0|wgmws0,61,40,1|wsvknz,61,40,1|wsvko0,43,59,0|wzczfz,43,59,0|wzczg0,61,40,1|xblnbz,61,40,1|xblnc0,43,59,0|xi323z,43,59,0|xi3240,61,40,1|xubpzz,61,40,1|xubq00,43,59,0|y0t4rz,43,59,0|y0t4s0,61,40,1|yd1snz,61,40,1|yd1so0,43,59,0|yjj7fz,43,59,0|yjj7g0,61,40,1|yvrvbz,61,40,1|yvrvc0,43,59,0|z29a3z,43,59,0|z29a40,61,40,1|zehxzz,61,40,1|zehy00,43,59,0|zlcbfz,43,59,0|zlcbg0,61,40,1|zxkzbz,61,40,1|zxkzc0,43,59,0|1042e3z,43,59,0|1042e40,61,40,1|10gb1zz,61,40,1|10gb200,43,59,0|10msgrz,43,59,0|10msgs0,61,40,1|10z14nz,61,40,1|10z14o0,43,59,0|115ijfz,43,59,0|115ijg0,61,40,1|11hr7bz,61,40,1|11hr7c0,43,59,0|11o8m3z,43,59,0|11o8m40,61,40,1|120h9zz,61,40,1|120ha00,43,59,0|126yorz,43,59,0|126yos0,61,40,1|12j7cnz,61,40,1|12j7co0,43,59,0|12q1q3z,43,59,0|12q1q40,61,40,1|132adzz,61,40,1|132ae00,43,59,0|138rsrz,43,59,0|138rss0,61,40,1|13l0gnz,61,40,1|13l0go0,43,59,0|13rhvfz,43,59,0|13rhvg0,61,40,1|143qjbz,61,40,1|143qjc0,43,59,0|14a7y3z,43,59,0|14a7y40,61,40,1|14mglzz,61,40,1|14mgm00,43,59,0|14sy0rz,43,59,0|14sy0s0,61,40,1|1556onz,61,40,1|1556oo0,43,59,0|15c123z,43,59,0|15c1240,61,40,1|15o9pzz,61,40,1|15o9q00,43,59,0|15ur4rz,43,59,0|15ur4s0,61,40,1|166zsnz,61,40,1|166zso0,43,59,0|16dh7fz,43,59,0|16dh7g0,61,40,1|16ppvbz,61,40,1|16ppvc0,43,59,0|16w7a3z,43,59,0|16w7a40,61,40,1|178fxzz,61,40,1|178fy00,43,59,0|17excrz,43,59,0|17excs0,61,40,1|17r60nz,61,40,1|17r60o0,43,59,0|17xnffz,43,59,0|17xnfg0,61,40,1|189w3bz,61,40,1|189w3c0,43,59,0|18gqgrz,43,59,0|18gqgs0,61,40,1|18sz4nz,61,40,1|18sz4o0,43,59,0|18zgjfz,43,59,0|18zgjg0,61,40,1|19bp7bz,61,40,1|19bp7c0,43,59,0|19i6m3z,43,59,0|19i6m40,61,40,1|19uf9zz,61,40,1|19ufa00,43,59,0|1a0worz,43,59,0|1a0wos0,61,40,1|1ad5cnz,61,40,1|1ad5co0,43,59,0|1ajmrfz,43,59,0|1ajmrg0,61,40,1|1avvfbz,61,40,1|1avvfc0,43,59,0|1b2psrz,43,59,0|1b2pss0,61,40,1|1beygnz,61,40,1|1beygo0,43,59,0|1blfvfz,43,59,0|1blfvg0,61,40,1|1bxojbz,61,40,1|1bxojc0,43,59,0|1c45y3z,43,59,0|1c45y40,61,40,1|1cgelzz,61,40,1|1cgem00,43,59,0|1cmw0rz,43,59,0|1cmw0s0,61,40,1|1cz4onz,61,40,1|1cz4oo0,43,59,0|1d5m3fz,43,59,0|1d5m3g0,61,40,1|1dhurbz,61,40,1|1dhurc0,43,59,0|1doc63z,43,59,0|1doc640,61,40,1|1e0ktzz,61,40,1|1e0ku00,43,59,0|1e7f7fz,43,59,0|1e7f7g0,61,40,1|1ejnvbz,61,40,1|1ejnvc0,43,59,0|1eq5a3z,43,59,0|1eq5a40,61,40,1|1f2dxzz,61,40,1|1f2dy00,43,59,0|1f8vcrz,43,59,0|1f8vcs0,61,40,1|1fl40nz,61,40,1|1fl40o0,43,59,0|1frlffz,43,59,0|1frlfg0,61,40,1|1g3u3bz,61,40,1|1g3u3c0,43,59,0|1gabi3z,43,59,0|1gabi40,61,40,1|1gmk5zz,61,40,1|1gmk600,43,59,0|1gt1krz,43,59,0|1gt1ks0,61,40,1|1h5a8nz,61,40,1|1h5a8o0,43,59,0|1hc4m3z,43,59,0|1hc4m40,61,40,1|1hod9zz,61,40,1|1hoda00,43,59,0|1huuorz,43,59,0|1huuos0,61,40,1|1i73cnz,61,40,1|1i73co0,43,59,0|1idkrfz,43,59,0|1idkrg0,61,40,1|1iptfbz,61,40,1|1iptfc0,43,59,0|1iwau3z,43,59,0|1iwau40,61,40,1|1j8jhzz,61,40,1|1j8ji00,43,59,0|1jf0wrz,43,59,0|1jf0ws0,61,40,1|1jr9knz,61,40,1|1jr9ko0,43,59,0|1jy3y3z,43,59,0|1jy3y40,61,40,1|1kaclzz,61,40,1|1kacm00,43,59,0|1kgu0rz,43,59,0|1kgu0s0,61,40,1|1kt2onz,61,40,1|1kt2oo0,43,59,0|1kzk3fz,43,59,0|1kzk3g0,61,40,1|1lbsrbz,61,40,1|1lbsrc0,43,59,0|1lia63z,43,59,0|1lia640,61,40,1|1luitzz,61,40,1|1luiu00,43,59,0|1m108rz,43,59,0|1m108s0,61,40,1|1md8wnz,61,40,1|1md8wo0,43,59,0|1mjqbfz,43,59,0|1mjqbg0,61,40,1|1mvyzbz,61,40,1|1mvyzc0,43,59,0|1n2tcrz,43,59,0|1n2tcs0,61,40,1|1nf20nz,61,40,1|1nf20o0,43,59,0|1nljffz,43,59,0|1nljfg0,61,40,1|1nxs3bz,61,40,1|1nxs3c0,43,59,0|1o49i3z,43,59,0|1o49i40,61,40,1|1ogi5zz,61,40,1|1ogi600,43,59,0|1omzkrz,43,59,0|1omzks0,61,40,1|1oz88nz,61,40,1|1oz88o0,43,59,0|1p5pnfz,43,59,0|1p5png0,61,40,1|1phybbz,61,40,1|1phybc0,43,59,0|1posorz,43,59,0|1posos0,61,40,1|1q11cnz,61,40,1|1q11co0,43,59,0|1q7irfz,43,59,0|1q7irg0,61,40,1|1qjrfbz,61,40,1|1qjrfc0,43,59,0|1qq8u3z,43,59,0|1qq8u40,61,40,1|1r2hhzz,61,40,1|1r2hi00,43,59,0|1r8ywrz,43,59,0|1r8yws0,61,40,1|1rl7knz,61,40,1|1rl7ko0,43,59,0|1rrozfz,43,59,0|1rrozg0,61,40,1|1s3xnbz,61,40,1|1s3xnc0,43,59,0|1saf23z,43,59,0|1saf240,61,40,1|1smnpzz,61,40,1|1smnq00,43,59,0|1sti3fz,43,59,0|1sti3g0,61,40,1|1t5qrbz,61,40,1|1t5qrc0,43,59,0|1tc863z,43,59,0|1tc8640,61,40,1|1togtzz,61,40,1|1togu00,43,59,0|1tuy8rz,43,59,0|1tuy8s0,61,40,1|1u76wnz,61,40,1|1u76wo0,43,59,0|1udobfz,43,59,0|1udobg0,61,40,1|1upwzbz,61,40,1|1upwzc0,43,59,0|1uwee3z,43,59,0|1uwee40,61,40,1|1v8n1zz,61,40,1|1v8n200,43,59,0|1vf4grz,43,59,0|1vf4gs0,61,40,1|1vrd4nz,61,40,1|1vrd4o0,43,59,0|NaN,43,59,0\",\"America/Kentucky/Monticello|,0,120,0|-18y0m01,0,120,0|-18y0m00,45,63,0|-r0esg1,45,63,0|-r0esg0,48,59,1|-qplz81,48,59,1|-qplz80,45,63,0|-qhops1,45,63,0|-qhops0,48,59,1|-q6vwk1,48,59,1|-q6vwk0,45,63,0|-ek21s1,45,63,0|-ek21s0,52,59,1|-cq2tg1,52,59,1|-cq2tg0,53,59,1|-cnp0k1,53,59,1|-cnp0k0,45,63,0|-vikg1,45,63,0|-vikg0,48,59,1|-m5lw1,48,59,1|-m5lw0,45,63,0|-cshs1,45,63,0|-cshs0,48,59,1|-3fj81,48,59,1|-3fj80,45,63,0|5xkvz,45,63,0|5xkw0,48,59,1|fajfz,48,59,1|fajg0,45,63,0|onnjz,45,63,0|onnk0,48,59,1|ydkrz,48,59,1|ydks0,45,63,0|17qovz,45,63,0|17qow0,48,59,1|1h3nfz,48,59,1|1h3ng0,45,63,0|1qgrjz,45,63,0|1qgrk0,48,59,1|1ztq3z,48,59,1|1ztq40,45,63,0|23ffjz,45,63,0|23ffk0,48,59,1|2ijsrz,48,59,1|2ijss0,45,63,0|2oo8vz,45,63,0|2oo8w0,48,59,1|319vfz,48,59,1|319vg0,45,63,0|3amzjz,45,63,0|3amzk0,48,59,1|3kcwrz,48,59,1|3kcws0,45,63,0|3td27z,45,63,0|3td280,48,59,1|432zfz,48,59,1|432zg0,45,63,0|4cg3jz,45,63,0|4cg3k0,48,59,1|4lt23z,48,59,1|4lt240,45,63,0|4v667z,45,63,0|4v6680,48,59,1|54j4rz,48,59,1|54j4s0,45,63,0|5dw8vz,45,63,0|5dw8w0,48,59,1|5n97fz,48,59,1|5n97g0,45,63,0|5wmbjz,45,63,0|5wmbk0,48,59,1|65za3z,48,59,1|65za40,45,63,0|6fce7z,45,63,0|6fce80,48,59,1|6p2bfz,48,59,1|6p2bg0,45,63,0|6y2gvz,45,63,0|6y2gw0,48,59,1|77se3z,48,59,1|77se40,45,63,0|7h5i7z,45,63,0|7h5i80,48,59,1|7qigrz,48,59,1|7qigs0,45,63,0|7zvkvz,45,63,0|7zvkw0,48,59,1|898jfz,48,59,1|898jg0,45,63,0|8ilnjz,45,63,0|8ilnk0,48,59,1|8rym3z,48,59,1|8rym40,45,63,0|908u7z,45,63,0|908u80,48,59,1|9aoorz,48,59,1|9aoos0,45,63,0|9iywvz,45,63,0|9iyww0,48,59,1|9trq3z,48,59,1|9trq40,45,63,0|a1ozjz,45,63,0|a1ozk0,48,59,1|achsrz,48,59,1|achss0,45,63,0|akf27z,45,63,0|akf280,48,59,1|av7vfz,48,59,1|av7vg0,45,63,0|b3i3jz,45,63,0|b3i3k0,48,59,1|bdxy3z,48,59,1|bdxy40,45,63,0|bm867z,45,63,0|bm8680,48,59,1|bwo0rz,48,59,1|bwo0s0,45,63,0|c4y8vz,45,63,0|c4y8w0,48,59,1|cfr23z,48,59,1|cfr240,45,63,0|cnobjz,45,63,0|cnobk0,48,59,1|cyh4rz,48,59,1|cyh4s0,45,63,0|d6ee7z,45,63,0|d6ee80,48,59,1|dh77fz,48,59,1|dh77g0,45,63,0|dphfjz,45,63,0|dphfk0,48,59,1|dzxa3z,48,59,1|dzxa40,45,63,0|e87i7z,45,63,0|e87i80,48,59,1|eincrz,48,59,1|eincs0,45,63,0|eqxkvz,45,63,0|eqxkw0,48,59,1|f1dffz,48,59,1|f1dfg0,45,63,0|f9nnjz,45,63,0|f9nnk0,48,59,1|fkggrz,48,59,1|fkggs0,45,63,0|fsdq7z,45,63,0|fsdq80,48,59,1|g36jfz,48,59,1|g36jg0,43,59,0|gb3q3z,43,59,0|gb3q40,61,40,1|glwjbz,61,40,1|glwjc0,43,59,0|gu6rfz,43,59,0|gu6rg0,61,40,1|h4mlzz,61,40,1|h4mm00,43,59,0|hcwu3z,43,59,0|hcwu40,61,40,1|hnconz,61,40,1|hncoo0,43,59,0|hvmwrz,43,59,0|hvmws0,61,40,1|i6fpzz,61,40,1|i6fq00,43,59,0|ieczfz,43,59,0|ieczg0,61,40,1|ip5snz,61,40,1|ip5so0,43,59,0|ix323z,43,59,0|ix3240,61,40,1|j7vvbz,61,40,1|j7vvc0,43,59,0|jeq8rz,43,59,0|jeq8s0,61,40,1|jqywnz,61,40,1|jqywo0,43,59,0|jxgbfz,43,59,0|jxgbg0,61,40,1|k9ozbz,61,40,1|k9ozc0,43,59,0|kg6e3z,43,59,0|kg6e40,61,40,1|ksf1zz,61,40,1|ksf200,43,59,0|kz9ffz,43,59,0|kz9fg0,61,40,1|lbi3bz,61,40,1|lbi3c0,43,59,0|lhzi3z,43,59,0|lhzi40,61,40,1|lu85zz,61,40,1|lu8600,43,59,0|m0pkrz,43,59,0|m0pks0,61,40,1|mcy8nz,61,40,1|mcy8o0,43,59,0|mjfnfz,43,59,0|mjfng0,61,40,1|mvobbz,61,40,1|mvobc0,43,59,0|n25q3z,43,59,0|n25q40,61,40,1|needzz,61,40,1|neee00,43,59,0|nkvsrz,43,59,0|nkvss0,61,40,1|nx4gnz,61,40,1|nx4go0,43,59,0|o3yu3z,43,59,0|o3yu40,61,40,1|og7hzz,61,40,1|og7i00,43,59,0|omowrz,43,59,0|omows0,61,40,1|oyxknz,61,40,1|oyxko0,43,59,0|p5ezfz,43,59,0|p5ezg0,61,40,1|phnnbz,61,40,1|phnnc0,43,59,0|po523z,43,59,0|po5240,61,40,1|q0dpzz,61,40,1|q0dq00,43,59,0|q6v4rz,43,59,0|q6v4s0,61,40,1|qj3snz,61,40,1|qj3so0,43,59,0|qpy63z,43,59,0|qpy640,61,40,1|r26tzz,61,40,1|r26u00,43,59,0|r8o8rz,43,59,0|r8o8s0,61,40,1|rkwwnz,61,40,1|rkwwo0,43,59,0|rrebfz,43,59,0|rrebg0,61,40,1|s3mzbz,61,40,1|s3mzc0,43,59,0|sa4e3z,43,59,0|sa4e40,61,40,1|smd1zz,61,40,1|smd200,43,59,0|ssugrz,43,59,0|ssugs0,61,40,1|t534nz,61,40,1|t534o0,43,59,0|tbkjfz,43,59,0|tbkjg0,61,40,1|tnt7bz,61,40,1|tnt7c0,43,59,0|tunkrz,43,59,0|tunks0,61,40,1|u6w8nz,61,40,1|u6w8o0,43,59,0|uddnfz,43,59,0|uddng0,61,40,1|upmbbz,61,40,1|upmbc0,43,59,0|uw3q3z,43,59,0|uw3q40,61,40,1|v8cdzz,61,40,1|v8ce00,43,59,0|vetsrz,43,59,0|vetss0,61,40,1|vr2gnz,61,40,1|vr2go0,43,59,0|vxjvfz,43,59,0|vxjvg0,61,40,1|w9sjbz,61,40,1|w9sjc0,43,59,0|wgmwrz,43,59,0|wgmws0,61,40,1|wsvknz,61,40,1|wsvko0,43,59,0|wzczfz,43,59,0|wzczg0,61,40,1|xblnbz,61,40,1|xblnc0,43,59,0|xi323z,43,59,0|xi3240,61,40,1|xubpzz,61,40,1|xubq00,43,59,0|y0t4rz,43,59,0|y0t4s0,61,40,1|yd1snz,61,40,1|yd1so0,43,59,0|yjj7fz,43,59,0|yjj7g0,61,40,1|yvrvbz,61,40,1|yvrvc0,43,59,0|z29a3z,43,59,0|z29a40,61,40,1|zehxzz,61,40,1|zehy00,43,59,0|zlcbfz,43,59,0|zlcbg0,61,40,1|zxkzbz,61,40,1|zxkzc0,43,59,0|1042e3z,43,59,0|1042e40,61,40,1|10gb1zz,61,40,1|10gb200,43,59,0|10msgrz,43,59,0|10msgs0,61,40,1|10z14nz,61,40,1|10z14o0,43,59,0|115ijfz,43,59,0|115ijg0,61,40,1|11hr7bz,61,40,1|11hr7c0,43,59,0|11o8m3z,43,59,0|11o8m40,61,40,1|120h9zz,61,40,1|120ha00,43,59,0|126yorz,43,59,0|126yos0,61,40,1|12j7cnz,61,40,1|12j7co0,43,59,0|12q1q3z,43,59,0|12q1q40,61,40,1|132adzz,61,40,1|132ae00,43,59,0|138rsrz,43,59,0|138rss0,61,40,1|13l0gnz,61,40,1|13l0go0,43,59,0|13rhvfz,43,59,0|13rhvg0,61,40,1|143qjbz,61,40,1|143qjc0,43,59,0|14a7y3z,43,59,0|14a7y40,61,40,1|14mglzz,61,40,1|14mgm00,43,59,0|14sy0rz,43,59,0|14sy0s0,61,40,1|1556onz,61,40,1|1556oo0,43,59,0|15c123z,43,59,0|15c1240,61,40,1|15o9pzz,61,40,1|15o9q00,43,59,0|15ur4rz,43,59,0|15ur4s0,61,40,1|166zsnz,61,40,1|166zso0,43,59,0|16dh7fz,43,59,0|16dh7g0,61,40,1|16ppvbz,61,40,1|16ppvc0,43,59,0|16w7a3z,43,59,0|16w7a40,61,40,1|178fxzz,61,40,1|178fy00,43,59,0|17excrz,43,59,0|17excs0,61,40,1|17r60nz,61,40,1|17r60o0,43,59,0|17xnffz,43,59,0|17xnfg0,61,40,1|189w3bz,61,40,1|189w3c0,43,59,0|18gqgrz,43,59,0|18gqgs0,61,40,1|18sz4nz,61,40,1|18sz4o0,43,59,0|18zgjfz,43,59,0|18zgjg0,61,40,1|19bp7bz,61,40,1|19bp7c0,43,59,0|19i6m3z,43,59,0|19i6m40,61,40,1|19uf9zz,61,40,1|19ufa00,43,59,0|1a0worz,43,59,0|1a0wos0,61,40,1|1ad5cnz,61,40,1|1ad5co0,43,59,0|1ajmrfz,43,59,0|1ajmrg0,61,40,1|1avvfbz,61,40,1|1avvfc0,43,59,0|1b2psrz,43,59,0|1b2pss0,61,40,1|1beygnz,61,40,1|1beygo0,43,59,0|1blfvfz,43,59,0|1blfvg0,61,40,1|1bxojbz,61,40,1|1bxojc0,43,59,0|1c45y3z,43,59,0|1c45y40,61,40,1|1cgelzz,61,40,1|1cgem00,43,59,0|1cmw0rz,43,59,0|1cmw0s0,61,40,1|1cz4onz,61,40,1|1cz4oo0,43,59,0|1d5m3fz,43,59,0|1d5m3g0,61,40,1|1dhurbz,61,40,1|1dhurc0,43,59,0|1doc63z,43,59,0|1doc640,61,40,1|1e0ktzz,61,40,1|1e0ku00,43,59,0|1e7f7fz,43,59,0|1e7f7g0,61,40,1|1ejnvbz,61,40,1|1ejnvc0,43,59,0|1eq5a3z,43,59,0|1eq5a40,61,40,1|1f2dxzz,61,40,1|1f2dy00,43,59,0|1f8vcrz,43,59,0|1f8vcs0,61,40,1|1fl40nz,61,40,1|1fl40o0,43,59,0|1frlffz,43,59,0|1frlfg0,61,40,1|1g3u3bz,61,40,1|1g3u3c0,43,59,0|1gabi3z,43,59,0|1gabi40,61,40,1|1gmk5zz,61,40,1|1gmk600,43,59,0|1gt1krz,43,59,0|1gt1ks0,61,40,1|1h5a8nz,61,40,1|1h5a8o0,43,59,0|1hc4m3z,43,59,0|1hc4m40,61,40,1|1hod9zz,61,40,1|1hoda00,43,59,0|1huuorz,43,59,0|1huuos0,61,40,1|1i73cnz,61,40,1|1i73co0,43,59,0|1idkrfz,43,59,0|1idkrg0,61,40,1|1iptfbz,61,40,1|1iptfc0,43,59,0|1iwau3z,43,59,0|1iwau40,61,40,1|1j8jhzz,61,40,1|1j8ji00,43,59,0|1jf0wrz,43,59,0|1jf0ws0,61,40,1|1jr9knz,61,40,1|1jr9ko0,43,59,0|1jy3y3z,43,59,0|1jy3y40,61,40,1|1kaclzz,61,40,1|1kacm00,43,59,0|1kgu0rz,43,59,0|1kgu0s0,61,40,1|1kt2onz,61,40,1|1kt2oo0,43,59,0|1kzk3fz,43,59,0|1kzk3g0,61,40,1|1lbsrbz,61,40,1|1lbsrc0,43,59,0|1lia63z,43,59,0|1lia640,61,40,1|1luitzz,61,40,1|1luiu00,43,59,0|1m108rz,43,59,0|1m108s0,61,40,1|1md8wnz,61,40,1|1md8wo0,43,59,0|1mjqbfz,43,59,0|1mjqbg0,61,40,1|1mvyzbz,61,40,1|1mvyzc0,43,59,0|1n2tcrz,43,59,0|1n2tcs0,61,40,1|1nf20nz,61,40,1|1nf20o0,43,59,0|1nljffz,43,59,0|1nljfg0,61,40,1|1nxs3bz,61,40,1|1nxs3c0,43,59,0|1o49i3z,43,59,0|1o49i40,61,40,1|1ogi5zz,61,40,1|1ogi600,43,59,0|1omzkrz,43,59,0|1omzks0,61,40,1|1oz88nz,61,40,1|1oz88o0,43,59,0|1p5pnfz,43,59,0|1p5png0,61,40,1|1phybbz,61,40,1|1phybc0,43,59,0|1posorz,43,59,0|1posos0,61,40,1|1q11cnz,61,40,1|1q11co0,43,59,0|1q7irfz,43,59,0|1q7irg0,61,40,1|1qjrfbz,61,40,1|1qjrfc0,43,59,0|1qq8u3z,43,59,0|1qq8u40,61,40,1|1r2hhzz,61,40,1|1r2hi00,43,59,0|1r8ywrz,43,59,0|1r8yws0,61,40,1|1rl7knz,61,40,1|1rl7ko0,43,59,0|1rrozfz,43,59,0|1rrozg0,61,40,1|1s3xnbz,61,40,1|1s3xnc0,43,59,0|1saf23z,43,59,0|1saf240,61,40,1|1smnpzz,61,40,1|1smnq00,43,59,0|1sti3fz,43,59,0|1sti3g0,61,40,1|1t5qrbz,61,40,1|1t5qrc0,43,59,0|1tc863z,43,59,0|1tc8640,61,40,1|1togtzz,61,40,1|1togu00,43,59,0|1tuy8rz,43,59,0|1tuy8s0,61,40,1|1u76wnz,61,40,1|1u76wo0,43,59,0|1udobfz,43,59,0|1udobg0,61,40,1|1upwzbz,61,40,1|1upwzc0,43,59,0|1uwee3z,43,59,0|1uwee40,61,40,1|1v8n1zz,61,40,1|1v8n200,43,59,0|1vf4grz,43,59,0|1vf4gs0,61,40,1|1vrd4nz,61,40,1|1vrd4o0,43,59,0|NaN,43,59,0\",\"America/Kralendijk|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/La_Paz|,0,121,0|-15r0wpp,0,121,0|-15r0wpo,40,121,0|-jxzspp,40,121,0|-jxzspo,26,122,1|-jpva5p,26,122,1|-jpva5o,41,40,0|NaN,41,40,0\",\"America/Lima|,0,123,0|-15r0v2d,0,123,0|-15r0v2c,0,124,0|-w25lpp,0,124,0|-w25lpo,55,59,0|-gp8241,55,59,0|-gp8240,41,40,1|-gklgw1,41,40,1|-gklgw0,55,59,0|-gbhm41,55,59,0|-gbhm40,41,40,1|-g24nk1,41,40,1|-g24nk0,55,59,0|-fsrjg1,55,59,0|-fsrjg0,41,40,1|-fjekw1,41,40,1|-fjekw0,55,59,0|8cmlvz,55,59,0|8cmlw0,41,40,1|8h973z,41,40,1|8h9740,55,59,0|8vej7z,55,59,0|8vej80,41,40,1|9014fz,41,40,1|9014g0,55,59,0|afs5vz,55,59,0|afs5w0,41,40,1|aker3z,41,40,1|aker40,55,59,0|cixpvz,55,59,0|cixpw0,41,40,1|cnkb3z,41,40,1|cnkb40,55,59,0|NaN,55,59,0\",\"America/Los_Angeles|,0,125,0|-18y0gg1,0,125,0|-18y0gg0,46,38,0|-r0emw1,46,38,0|-r0emw0,56,62,1|-qplto1,56,62,1|-qplto0,46,38,0|-qhok81,46,38,0|-qhok80,56,62,1|-q6vr01,56,62,1|-q6vr00,46,38,0|-ek1w81,46,38,0|-ek1w80,68,62,1|-cq2tg1,68,62,1|-cq2tg0,69,62,1|-cnov01,69,62,1|-cnov00,46,38,0|-bdliud,46,38,0|-bdliuc,56,62,1|-ayj0c1,56,62,1|-ayj0c0,46,38,0|-a9mpo1,46,38,0|-a9mpo0,56,62,1|-a22ho1,56,62,1|-a22ho0,46,38,0|-9qwn01,46,38,0|-9qwn00,56,62,1|-9izgc1,56,62,1|-9izgc0,46,38,0|-986kc1,46,38,0|-986kc0,56,62,1|-909do1,56,62,1|-909do0,46,38,0|-8pgho1,46,38,0|-8pgho0,56,62,1|-8hjb01,56,62,1|-8hjb00,46,38,0|-86qf01,46,38,0|-86qf00,56,62,1|-7yt8c1,56,62,1|-7yt8c0,46,38,0|-7o0cc1,46,38,0|-7o0cc0,56,62,1|-7g35o1,56,62,1|-7g35o0,46,38,0|-74xb01,46,38,0|-74xb00,56,62,1|-6x04c1,56,62,1|-6x04c0,46,38,0|-6m78c1,46,38,0|-6m78c0,56,62,1|-6ea1o1,56,62,1|-6ea1o0,46,38,0|-63h5o1,46,38,0|-63h5o0,56,62,1|-5vjz01,56,62,1|-5vjz00,46,38,0|-5kr301,46,38,0|-5kr300,56,62,1|-5ctwc1,56,62,1|-5ctwc0,46,38,0|-5210c1,46,38,0|-5210c0,56,62,1|-4u3to1,56,62,1|-4u3to0,46,38,0|-4ixz01,46,38,0|-4ixz00,56,62,1|-4bdr01,56,62,1|-4bdr00,46,38,0|-407wc1,46,38,0|-407wc0,56,62,1|-3quv01,56,62,1|-3quv00,46,38,0|-3hhto1,46,38,0|-3hhto0,56,62,1|-384sc1,56,62,1|-384sc0,46,38,0|-2yrr01,46,38,0|-2yrr00,56,62,1|-2pepo1,56,62,1|-2pepo0,46,38,0|-2g1oc1,46,38,0|-2g1oc0,56,62,1|-26boc1,56,62,1|-26boc0,46,38,0|-1xblo1,46,38,0|-1xblo0,56,62,1|-1nllo1,56,62,1|-1nllo0,46,38,0|-1e8hk1,46,38,0|-1e8hk0,56,62,1|-14vj01,56,62,1|-14vj00,46,38,0|-view1,46,38,0|-view0,56,62,1|-m5gc1,56,62,1|-m5gc0,46,38,0|-csc81,46,38,0|-csc80,56,62,1|-3fdo1,56,62,1|-3fdo0,46,38,0|5xqfz,46,38,0|5xqg0,56,62,1|faozz,56,62,1|fap00,46,38,0|ont3z,46,38,0|ont40,56,62,1|ydqbz,56,62,1|ydqc0,46,38,0|17qufz,46,38,0|17qug0,56,62,1|1h3szz,56,62,1|1h3t00,46,38,0|1qgx3z,46,38,0|1qgx40,56,62,1|1ztvnz,56,62,1|1ztvo0,46,38,0|23fl3z,46,38,0|23fl40,56,62,1|2ijybz,56,62,1|2ijyc0,46,38,0|2ooefz,46,38,0|2ooeg0,56,62,1|31a0zz,56,62,1|31a100,46,38,0|3an53z,46,38,0|3an540,56,62,1|3kd2bz,56,62,1|3kd2c0,46,38,0|3td7rz,46,38,0|3td7s0,56,62,1|4334zz,56,62,1|433500,46,38,0|4cg93z,46,38,0|4cg940,56,62,1|4lt7nz,56,62,1|4lt7o0,46,38,0|4v6brz,46,38,0|4v6bs0,56,62,1|54jabz,56,62,1|54jac0,46,38,0|5dwefz,46,38,0|5dweg0,56,62,1|5n9czz,56,62,1|5n9d00,46,38,0|5wmh3z,46,38,0|5wmh40,56,62,1|65zfnz,56,62,1|65zfo0,46,38,0|6fcjrz,46,38,0|6fcjs0,56,62,1|6p2gzz,56,62,1|6p2h00,46,38,0|6y2mfz,46,38,0|6y2mg0,56,62,1|77sjnz,56,62,1|77sjo0,46,38,0|7h5nrz,46,38,0|7h5ns0,56,62,1|7qimbz,56,62,1|7qimc0,46,38,0|7zvqfz,46,38,0|7zvqg0,56,62,1|898ozz,56,62,1|898p00,46,38,0|8ilt3z,46,38,0|8ilt40,56,62,1|8ryrnz,56,62,1|8ryro0,46,38,0|908zrz,46,38,0|908zs0,56,62,1|9aoubz,56,62,1|9aouc0,46,38,0|9iz2fz,46,38,0|9iz2g0,56,62,1|9trvnz,56,62,1|9trvo0,46,38,0|a1p53z,46,38,0|a1p540,56,62,1|achybz,56,62,1|achyc0,46,38,0|akf7rz,46,38,0|akf7s0,56,62,1|av80zz,56,62,1|av8100,46,38,0|b3i93z,46,38,0|b3i940,56,62,1|bdy3nz,56,62,1|bdy3o0,46,38,0|bm8brz,46,38,0|bm8bs0,56,62,1|bwo6bz,56,62,1|bwo6c0,46,38,0|c4yefz,46,38,0|c4yeg0,56,62,1|cfr7nz,56,62,1|cfr7o0,46,38,0|cnoh3z,46,38,0|cnoh40,56,62,1|cyhabz,56,62,1|cyhac0,46,38,0|d6ejrz,46,38,0|d6ejs0,56,62,1|dh7czz,56,62,1|dh7d00,46,38,0|dphl3z,46,38,0|dphl40,56,62,1|dzxfnz,56,62,1|dzxfo0,46,38,0|e87nrz,46,38,0|e87ns0,56,62,1|einibz,56,62,1|einic0,46,38,0|eqxqfz,46,38,0|eqxqg0,56,62,1|f1dkzz,56,62,1|f1dl00,46,38,0|f9nt3z,46,38,0|f9nt40,56,62,1|fkgmbz,56,62,1|fkgmc0,46,38,0|fsdvrz,46,38,0|fsdvs0,56,62,1|g36ozz,56,62,1|g36p00,46,38,0|gb3yfz,46,38,0|gb3yg0,56,62,1|glwrnz,56,62,1|glwro0,46,38,0|gu6zrz,46,38,0|gu6zs0,56,62,1|h4mubz,56,62,1|h4muc0,46,38,0|hcx2fz,46,38,0|hcx2g0,56,62,1|hncwzz,56,62,1|hncx00,46,38,0|hvn53z,46,38,0|hvn540,56,62,1|i6fybz,56,62,1|i6fyc0,46,38,0|ied7rz,46,38,0|ied7s0,56,62,1|ip60zz,56,62,1|ip6100,46,38,0|ix3afz,46,38,0|ix3ag0,56,62,1|j7w3nz,56,62,1|j7w3o0,46,38,0|jeqh3z,46,38,0|jeqh40,56,62,1|jqz4zz,56,62,1|jqz500,46,38,0|jxgjrz,46,38,0|jxgjs0,56,62,1|k9p7nz,56,62,1|k9p7o0,46,38,0|kg6mfz,46,38,0|kg6mg0,56,62,1|ksfabz,56,62,1|ksfac0,46,38,0|kz9nrz,46,38,0|kz9ns0,56,62,1|lbibnz,56,62,1|lbibo0,46,38,0|lhzqfz,46,38,0|lhzqg0,56,62,1|lu8ebz,56,62,1|lu8ec0,46,38,0|m0pt3z,46,38,0|m0pt40,56,62,1|mcygzz,56,62,1|mcyh00,46,38,0|mjfvrz,46,38,0|mjfvs0,56,62,1|mvojnz,56,62,1|mvojo0,46,38,0|n25yfz,46,38,0|n25yg0,56,62,1|neembz,56,62,1|neemc0,46,38,0|nkw13z,46,38,0|nkw140,56,62,1|nx4ozz,56,62,1|nx4p00,46,38,0|o3z2fz,46,38,0|o3z2g0,56,62,1|og7qbz,56,62,1|og7qc0,46,38,0|omp53z,46,38,0|omp540,56,62,1|oyxszz,56,62,1|oyxt00,46,38,0|p5f7rz,46,38,0|p5f7s0,56,62,1|phnvnz,56,62,1|phnvo0,46,38,0|po5afz,46,38,0|po5ag0,56,62,1|q0dybz,56,62,1|q0dyc0,46,38,0|q6vd3z,46,38,0|q6vd40,56,62,1|qj40zz,56,62,1|qj4100,46,38,0|qpyefz,46,38,0|qpyeg0,56,62,1|r272bz,56,62,1|r272c0,46,38,0|r8oh3z,46,38,0|r8oh40,56,62,1|rkx4zz,56,62,1|rkx500,46,38,0|rrejrz,46,38,0|rrejs0,56,62,1|s3n7nz,56,62,1|s3n7o0,46,38,0|sa4mfz,46,38,0|sa4mg0,56,62,1|smdabz,56,62,1|smdac0,46,38,0|ssup3z,46,38,0|ssup40,56,62,1|t53czz,56,62,1|t53d00,46,38,0|tbkrrz,46,38,0|tbkrs0,56,62,1|tntfnz,56,62,1|tntfo0,46,38,0|tunt3z,46,38,0|tunt40,56,62,1|u6wgzz,56,62,1|u6wh00,46,38,0|uddvrz,46,38,0|uddvs0,56,62,1|upmjnz,56,62,1|upmjo0,46,38,0|uw3yfz,46,38,0|uw3yg0,56,62,1|v8cmbz,56,62,1|v8cmc0,46,38,0|veu13z,46,38,0|veu140,56,62,1|vr2ozz,56,62,1|vr2p00,46,38,0|vxk3rz,46,38,0|vxk3s0,56,62,1|w9srnz,56,62,1|w9sro0,46,38,0|wgn53z,46,38,0|wgn540,56,62,1|wsvszz,56,62,1|wsvt00,46,38,0|wzd7rz,46,38,0|wzd7s0,56,62,1|xblvnz,56,62,1|xblvo0,46,38,0|xi3afz,46,38,0|xi3ag0,56,62,1|xubybz,56,62,1|xubyc0,46,38,0|y0td3z,46,38,0|y0td40,56,62,1|yd20zz,56,62,1|yd2100,46,38,0|yjjfrz,46,38,0|yjjfs0,56,62,1|yvs3nz,56,62,1|yvs3o0,46,38,0|z29ifz,46,38,0|z29ig0,56,62,1|zei6bz,56,62,1|zei6c0,46,38,0|zlcjrz,46,38,0|zlcjs0,56,62,1|zxl7nz,56,62,1|zxl7o0,46,38,0|1042mfz,46,38,0|1042mg0,56,62,1|10gbabz,56,62,1|10gbac0,46,38,0|10msp3z,46,38,0|10msp40,56,62,1|10z1czz,56,62,1|10z1d00,46,38,0|115irrz,46,38,0|115irs0,56,62,1|11hrfnz,56,62,1|11hrfo0,46,38,0|11o8ufz,46,38,0|11o8ug0,56,62,1|120hibz,56,62,1|120hic0,46,38,0|126yx3z,46,38,0|126yx40,56,62,1|12j7kzz,56,62,1|12j7l00,46,38,0|12q1yfz,46,38,0|12q1yg0,56,62,1|132ambz,56,62,1|132amc0,46,38,0|138s13z,46,38,0|138s140,56,62,1|13l0ozz,56,62,1|13l0p00,46,38,0|13ri3rz,46,38,0|13ri3s0,56,62,1|143qrnz,56,62,1|143qro0,46,38,0|14a86fz,46,38,0|14a86g0,56,62,1|14mgubz,56,62,1|14mguc0,46,38,0|14sy93z,46,38,0|14sy940,56,62,1|1556wzz,56,62,1|1556x00,46,38,0|15c1afz,46,38,0|15c1ag0,56,62,1|15o9ybz,56,62,1|15o9yc0,46,38,0|15urd3z,46,38,0|15urd40,56,62,1|16700zz,56,62,1|1670100,46,38,0|16dhfrz,46,38,0|16dhfs0,56,62,1|16pq3nz,56,62,1|16pq3o0,46,38,0|16w7ifz,46,38,0|16w7ig0,56,62,1|178g6bz,56,62,1|178g6c0,46,38,0|17exl3z,46,38,0|17exl40,56,62,1|17r68zz,56,62,1|17r6900,46,38,0|17xnnrz,46,38,0|17xnns0,56,62,1|189wbnz,56,62,1|189wbo0,46,38,0|18gqp3z,46,38,0|18gqp40,56,62,1|18szczz,56,62,1|18szd00,46,38,0|18zgrrz,46,38,0|18zgrs0,56,62,1|19bpfnz,56,62,1|19bpfo0,46,38,0|19i6ufz,46,38,0|19i6ug0,56,62,1|19ufibz,56,62,1|19ufic0,46,38,0|1a0wx3z,46,38,0|1a0wx40,56,62,1|1ad5kzz,56,62,1|1ad5l00,46,38,0|1ajmzrz,46,38,0|1ajmzs0,56,62,1|1avvnnz,56,62,1|1avvno0,46,38,0|1b2q13z,46,38,0|1b2q140,56,62,1|1beyozz,56,62,1|1beyp00,46,38,0|1blg3rz,46,38,0|1blg3s0,56,62,1|1bxornz,56,62,1|1bxoro0,46,38,0|1c466fz,46,38,0|1c466g0,56,62,1|1cgeubz,56,62,1|1cgeuc0,46,38,0|1cmw93z,46,38,0|1cmw940,56,62,1|1cz4wzz,56,62,1|1cz4x00,46,38,0|1d5mbrz,46,38,0|1d5mbs0,56,62,1|1dhuznz,56,62,1|1dhuzo0,46,38,0|1docefz,46,38,0|1doceg0,56,62,1|1e0l2bz,56,62,1|1e0l2c0,46,38,0|1e7ffrz,46,38,0|1e7ffs0,56,62,1|1ejo3nz,56,62,1|1ejo3o0,46,38,0|1eq5ifz,46,38,0|1eq5ig0,56,62,1|1f2e6bz,56,62,1|1f2e6c0,46,38,0|1f8vl3z,46,38,0|1f8vl40,56,62,1|1fl48zz,56,62,1|1fl4900,46,38,0|1frlnrz,46,38,0|1frlns0,56,62,1|1g3ubnz,56,62,1|1g3ubo0,46,38,0|1gabqfz,46,38,0|1gabqg0,56,62,1|1gmkebz,56,62,1|1gmkec0,46,38,0|1gt1t3z,46,38,0|1gt1t40,56,62,1|1h5agzz,56,62,1|1h5ah00,46,38,0|1hc4ufz,46,38,0|1hc4ug0,56,62,1|1hodibz,56,62,1|1hodic0,46,38,0|1huux3z,46,38,0|1huux40,56,62,1|1i73kzz,56,62,1|1i73l00,46,38,0|1idkzrz,46,38,0|1idkzs0,56,62,1|1iptnnz,56,62,1|1iptno0,46,38,0|1iwb2fz,46,38,0|1iwb2g0,56,62,1|1j8jqbz,56,62,1|1j8jqc0,46,38,0|1jf153z,46,38,0|1jf1540,56,62,1|1jr9szz,56,62,1|1jr9t00,46,38,0|1jy46fz,46,38,0|1jy46g0,56,62,1|1kacubz,56,62,1|1kacuc0,46,38,0|1kgu93z,46,38,0|1kgu940,56,62,1|1kt2wzz,56,62,1|1kt2x00,46,38,0|1kzkbrz,46,38,0|1kzkbs0,56,62,1|1lbsznz,56,62,1|1lbszo0,46,38,0|1liaefz,46,38,0|1liaeg0,56,62,1|1luj2bz,56,62,1|1luj2c0,46,38,0|1m10h3z,46,38,0|1m10h40,56,62,1|1md94zz,56,62,1|1md9500,46,38,0|1mjqjrz,46,38,0|1mjqjs0,56,62,1|1mvz7nz,56,62,1|1mvz7o0,46,38,0|1n2tl3z,46,38,0|1n2tl40,56,62,1|1nf28zz,56,62,1|1nf2900,46,38,0|1nljnrz,46,38,0|1nljns0,56,62,1|1nxsbnz,56,62,1|1nxsbo0,46,38,0|1o49qfz,46,38,0|1o49qg0,56,62,1|1ogiebz,56,62,1|1ogiec0,46,38,0|1omzt3z,46,38,0|1omzt40,56,62,1|1oz8gzz,56,62,1|1oz8h00,46,38,0|1p5pvrz,46,38,0|1p5pvs0,56,62,1|1phyjnz,56,62,1|1phyjo0,46,38,0|1posx3z,46,38,0|1posx40,56,62,1|1q11kzz,56,62,1|1q11l00,46,38,0|1q7izrz,46,38,0|1q7izs0,56,62,1|1qjrnnz,56,62,1|1qjrno0,46,38,0|1qq92fz,46,38,0|1qq92g0,56,62,1|1r2hqbz,56,62,1|1r2hqc0,46,38,0|1r8z53z,46,38,0|1r8z540,56,62,1|1rl7szz,56,62,1|1rl7t00,46,38,0|1rrp7rz,46,38,0|1rrp7s0,56,62,1|1s3xvnz,56,62,1|1s3xvo0,46,38,0|1safafz,46,38,0|1safag0,56,62,1|1smnybz,56,62,1|1smnyc0,46,38,0|1stibrz,46,38,0|1stibs0,56,62,1|1t5qznz,56,62,1|1t5qzo0,46,38,0|1tc8efz,46,38,0|1tc8eg0,56,62,1|1toh2bz,56,62,1|1toh2c0,46,38,0|1tuyh3z,46,38,0|1tuyh40,56,62,1|1u774zz,56,62,1|1u77500,46,38,0|1udojrz,46,38,0|1udojs0,56,62,1|1upx7nz,56,62,1|1upx7o0,46,38,0|1uwemfz,46,38,0|1uwemg0,56,62,1|1v8nabz,56,62,1|1v8nac0,46,38,0|1vf4p3z,46,38,0|1vf4p40,56,62,1|1vrdczz,56,62,1|1vrdd00,46,38,0|NaN,46,38,0\",\"America/Lower_Princes|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/Maceio|,0,126,0|-t85ldx,0,126,0|-t85ldw,38,41,0|-jylag1,38,41,0|-jylag0,39,43,1|-jpb141,39,43,1|-jpb140,38,41,0|-jfsd01,38,41,0|-jfsd00,39,43,1|-j6j3s1,39,43,1|-j6j3s0,38,41,0|-ahcyc1,38,41,0|-ahcyc0,39,43,1|-aad3o1,39,43,1|-aad3o0,38,41,0|-9yl101,38,41,0|-9yl100,39,43,1|-9sd141,39,43,1|-9sd140,38,41,0|-9ft3o1,38,41,0|-9ft3o0,39,43,1|-99j941,39,43,1|-99j940,38,41,0|-8wzbo1,38,41,0|-8wzbo0,39,43,1|-8scqg1,39,43,1|-8scqg0,38,41,0|-35xmc1,38,41,0|-35xmc0,39,43,1|-31nzs1,39,43,1|-31nzs0,38,41,0|-2kdp01,38,41,0|-2kdp00,39,43,1|-2hcig1,39,43,1|-2hcig0,38,41,0|-24qqc1,38,41,0|-24qqc0,39,43,1|-204541,39,43,1|-204540,38,41,0|-1nid01,38,41,0|-1nid00,39,43,1|-1hc7s1,39,43,1|-1hc7s0,38,41,0|-14qfo1,38,41,0|-14qfo0,39,43,1|-yifs1,39,43,1|-yifs0,38,41,0|89jcbz,38,41,0|89jcc0,39,43,1|8gdk7z,39,43,1|8gdk80,38,41,0|8rwgbz,38,41,0|8rwgc0,39,43,1|8xns7z,39,43,1|8xns80,38,41,0|9aodnz,38,41,0|9aodo0,39,43,1|9g2qvz,39,43,1|9g2qw0,38,41,0|9t1hnz,38,41,0|9t1ho0,39,43,1|9yfuvz,39,43,1|9yfuw0,38,41,0|abrkbz,38,41,0|abrkc0,39,43,1|ahvuvz,39,43,1|ahvuw0,38,41,0|dggyzz,38,41,0|dggz00,39,43,1|dml9jz,39,43,1|dml9k0,38,41,0|fj0azz,38,41,0|fj0b00,39,43,1|fqkg7z,39,43,1|fqkg80,38,41,0|g23cbz,38,41,0|g23cc0,39,43,1|g2t6vz,39,43,1|g2t6w0,38,41,0|gl6dnz,38,41,0|gl6do0,39,43,1|grnmvz,39,43,1|grnmw0,38,41,0|NaN,38,41,0\",\"America/Managua|,0,127,0|-15r0tct,0,127,0|-15r0tcs,20,128,0|-ijh6op,20,128,0|-ijh6oo,45,63,0|1qkbbz,45,63,0|1qkbc0,43,59,0|2ob1vz,43,59,0|2ob1w0,45,63,0|4t08nz,45,63,0|4t08o0,48,59,1|4y3hvz,48,59,1|4y3hw0,45,63,0|5bqbbz,45,63,0|5bqbc0,48,59,1|5gtkjz,48,59,1|5gtkk0,45,63,0|bhcefz,45,63,0|bhceg0,43,59,0|bv2gjz,43,59,0|bv2gk0,45,63,0|c05vbz,45,63,0|c05vc0,43,59,0|e3bcjz,43,59,0|e3bck0,45,63,0|iepvbz,45,63,0|iepvc0,48,59,1|inpv7z,48,59,1|inpv80,45,63,0|iyizjz,45,63,0|iyizk0,48,59,1|j6g0nz,48,59,1|j6g0o0,45,63,0|NaN,45,63,0\",\"America/Manaus|,0,129,0|-t85gvx,0,129,0|-t85gvw,41,40,0|-jyl7o1,41,40,0|-jyl7o0,38,41,1|-jpayc1,38,41,1|-jpayc0,41,40,0|-jfsa81,41,40,0|-jfsa80,38,41,1|-j6j101,38,41,1|-j6j100,41,40,0|-ahcvk1,41,40,0|-ahcvk0,38,41,1|-aad0w1,38,41,1|-aad0w0,41,40,0|-9yky81,41,40,0|-9yky80,38,41,1|-9scyc1,38,41,1|-9scyc0,41,40,0|-9ft0w1,41,40,0|-9ft0w0,38,41,1|-99j6c1,38,41,1|-99j6c0,41,40,0|-8wz8w1,41,40,0|-8wz8w0,38,41,1|-8scno1,38,41,1|-8scno0,41,40,0|-35xjk1,41,40,0|-35xjk0,38,41,1|-31nx01,38,41,1|-31nx00,41,40,0|-2kdm81,41,40,0|-2kdm80,38,41,1|-2hcfo1,38,41,1|-2hcfo0,41,40,0|-24qnk1,41,40,0|-24qnk0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1nia81,41,40,0|-1nia80,38,41,1|-1hc501,38,41,1|-1hc500,41,40,0|-14qcw1,41,40,0|-14qcw0,38,41,1|-yid01,38,41,1|-yid00,41,40,0|89jf3z,41,40,0|89jf40,38,41,1|8gdmzz,38,41,1|8gdn00,41,40,0|8rwj3z,41,40,0|8rwj40,38,41,1|8xnuzz,38,41,1|8xnv00,41,40,0|9aogfz,41,40,0|9aogg0,38,41,1|9g2tnz,38,41,1|9g2to0,41,40,0|cf0wfz,41,40,0|cf0wg0,38,41,1|cli5nz,38,41,1|cli5o0,41,40,0|NaN,41,40,0\",\"America/Marigot|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/Martinique|,0,130,0|-15r0y0t,0,130,0|-15r0y0s,80,130,0|-umcvct,80,130,0|-umcvcs,31,40,0|5ct1rz,31,40,0|5ct1s0,49,41,1|5lt1nz,49,41,1|5lt1o0,31,40,0|NaN,31,40,0\",\"America/Matamoros|,0,131,0|-p1u7c1,0,131,0|-p1u7c0,45,63,0|9iywvz,45,63,0|9iyww0,48,59,1|9trq3z,48,59,1|9trq40,45,63,0|dphfjz,45,63,0|dphfk0,48,59,1|dzxa3z,48,59,1|dzxa40,45,63,0|e87i7z,45,63,0|e87i80,48,59,1|eincrz,48,59,1|eincs0,45,63,0|eqxkvz,45,63,0|eqxkw0,48,59,1|f1dffz,48,59,1|f1dfg0,45,63,0|f9nnjz,45,63,0|f9nnk0,48,59,1|fkggrz,48,59,1|fkggs0,45,63,0|fsdq7z,45,63,0|fsdq80,48,59,1|g36jfz,48,59,1|g36jg0,45,63,0|gcwm7z,45,63,0|gcwm80,48,59,1|gkgrfz,48,59,1|gkgrg0,45,63,0|gu6u7z,45,63,0|gu6u80,48,59,1|h4morz,48,59,1|h4mos0,45,63,0|hcwwvz,45,63,0|hcwww0,48,59,1|hncrfz,48,59,1|hncrg0,45,63,0|hvmzjz,45,63,0|hvmzk0,48,59,1|i6fsrz,48,59,1|i6fss0,45,63,0|ied27z,45,63,0|ied280,48,59,1|ip5vfz,48,59,1|ip5vg0,45,63,0|ix34vz,45,63,0|ix34w0,48,59,1|j7vy3z,48,59,1|j7vy40,45,63,0|jft7jz,45,63,0|jft7k0,48,59,1|jqm0rz,48,59,1|jqm0s0,45,63,0|jyw8vz,45,63,0|jyw8w0,48,59,1|k9c3fz,48,59,1|k9c3g0,45,63,0|khmbjz,45,63,0|khmbk0,48,59,1|ks263z,48,59,1|ks2640,45,63,0|kz9i7z,45,63,0|kz9i80,48,59,1|lbi63z,48,59,1|lbi640,45,63,0|lhzkvz,45,63,0|lhzkw0,48,59,1|lu88rz,48,59,1|lu88s0,45,63,0|m0pnjz,45,63,0|m0pnk0,48,59,1|mcybfz,48,59,1|mcybg0,45,63,0|mjfq7z,45,63,0|mjfq80,48,59,1|mvoe3z,48,59,1|mvoe40,45,63,0|n25svz,45,63,0|n25sw0,48,59,1|neegrz,48,59,1|neegs0,45,63,0|nkvvjz,45,63,0|nkvvk0,48,59,1|nx4jfz,48,59,1|nx4jg0,45,63,0|o3ywvz,45,63,0|o3yww0,48,59,1|og7krz,48,59,1|og7ks0,45,63,0|omozjz,45,63,0|omozk0,48,59,1|oyxnfz,48,59,1|oyxng0,45,63,0|p5f27z,45,63,0|p5f280,48,59,1|phnq3z,48,59,1|phnq40,45,63,0|po54vz,45,63,0|po54w0,48,59,1|q0dsrz,48,59,1|q0dss0,45,63,0|q6v7jz,45,63,0|q6v7k0,48,59,1|qj3vfz,48,59,1|qj3vg0,45,63,0|qpy8vz,45,63,0|qpy8w0,48,59,1|r26wrz,48,59,1|r26ws0,45,63,0|r8objz,45,63,0|r8obk0,48,59,1|rkwzfz,48,59,1|rkwzg0,45,63,0|rree7z,45,63,0|rree80,48,59,1|s3n23z,48,59,1|s3n240,45,63,0|sa4gvz,45,63,0|sa4gw0,48,59,1|smd4rz,48,59,1|smd4s0,45,63,0|ssujjz,45,63,0|ssujk0,48,59,1|t537fz,48,59,1|t537g0,45,63,0|tbkm7z,45,63,0|tbkm80,48,59,1|tnta3z,48,59,1|tnta40,45,63,0|tunnjz,45,63,0|tunnk0,48,59,1|u6wbfz,48,59,1|u6wbg0,45,63,0|uddq7z,45,63,0|uddq80,48,59,1|upme3z,48,59,1|upme40,45,63,0|uw3svz,45,63,0|uw3sw0,48,59,1|v8cgrz,48,59,1|v8cgs0,45,63,0|vetvjz,45,63,0|vetvk0,48,59,1|vr2jfz,48,59,1|vr2jg0,45,63,0|vxjy7z,45,63,0|vxjy80,48,59,1|w9sm3z,48,59,1|w9sm40,45,63,0|wgmzjz,45,63,0|wgmzk0,48,59,1|wsvnfz,48,59,1|wsvng0,45,63,0|wzd27z,45,63,0|wzd280,48,59,1|xblq3z,48,59,1|xblq40,45,63,0|xi34vz,45,63,0|xi34w0,48,59,1|xubsrz,48,59,1|xubss0,45,63,0|y0t7jz,45,63,0|y0t7k0,48,59,1|yd1vfz,48,59,1|yd1vg0,45,63,0|yjja7z,45,63,0|yjja80,48,59,1|yvry3z,48,59,1|yvry40,45,63,0|z29cvz,45,63,0|z29cw0,48,59,1|zei0rz,48,59,1|zei0s0,45,63,0|zlce7z,45,63,0|zlce80,48,59,1|zxl23z,48,59,1|zxl240,45,63,0|1042gvz,45,63,0|1042gw0,48,59,1|10gb4rz,48,59,1|10gb4s0,45,63,0|10msjjz,45,63,0|10msjk0,48,59,1|10z17fz,48,59,1|10z17g0,45,63,0|115im7z,45,63,0|115im80,48,59,1|11hra3z,48,59,1|11hra40,45,63,0|11o8ovz,45,63,0|11o8ow0,48,59,1|120hcrz,48,59,1|120hcs0,45,63,0|126yrjz,45,63,0|126yrk0,48,59,1|12j7ffz,48,59,1|12j7fg0,45,63,0|12q1svz,45,63,0|12q1sw0,48,59,1|132agrz,48,59,1|132ags0,45,63,0|138rvjz,45,63,0|138rvk0,48,59,1|13l0jfz,48,59,1|13l0jg0,45,63,0|13rhy7z,45,63,0|13rhy80,48,59,1|143qm3z,48,59,1|143qm40,45,63,0|14a80vz,45,63,0|14a80w0,48,59,1|14mgorz,48,59,1|14mgos0,45,63,0|14sy3jz,45,63,0|14sy3k0,48,59,1|1556rfz,48,59,1|1556rg0,45,63,0|15c14vz,45,63,0|15c14w0,48,59,1|15o9srz,48,59,1|15o9ss0,45,63,0|15ur7jz,45,63,0|15ur7k0,48,59,1|166zvfz,48,59,1|166zvg0,45,63,0|16dha7z,45,63,0|16dha80,48,59,1|16ppy3z,48,59,1|16ppy40,45,63,0|16w7cvz,45,63,0|16w7cw0,48,59,1|178g0rz,48,59,1|178g0s0,45,63,0|17exfjz,45,63,0|17exfk0,48,59,1|17r63fz,48,59,1|17r63g0,45,63,0|17xni7z,45,63,0|17xni80,48,59,1|189w63z,48,59,1|189w640,45,63,0|18gqjjz,45,63,0|18gqjk0,48,59,1|18sz7fz,48,59,1|18sz7g0,45,63,0|18zgm7z,45,63,0|18zgm80,48,59,1|19bpa3z,48,59,1|19bpa40,45,63,0|19i6ovz,45,63,0|19i6ow0,48,59,1|19ufcrz,48,59,1|19ufcs0,45,63,0|1a0wrjz,45,63,0|1a0wrk0,48,59,1|1ad5ffz,48,59,1|1ad5fg0,45,63,0|1ajmu7z,45,63,0|1ajmu80,48,59,1|1avvi3z,48,59,1|1avvi40,45,63,0|1b2pvjz,45,63,0|1b2pvk0,48,59,1|1beyjfz,48,59,1|1beyjg0,45,63,0|1blfy7z,45,63,0|1blfy80,48,59,1|1bxom3z,48,59,1|1bxom40,45,63,0|1c460vz,45,63,0|1c460w0,48,59,1|1cgeorz,48,59,1|1cgeos0,45,63,0|1cmw3jz,45,63,0|1cmw3k0,48,59,1|1cz4rfz,48,59,1|1cz4rg0,45,63,0|1d5m67z,45,63,0|1d5m680,48,59,1|1dhuu3z,48,59,1|1dhuu40,45,63,0|1doc8vz,45,63,0|1doc8w0,48,59,1|1e0kwrz,48,59,1|1e0kws0,45,63,0|1e7fa7z,45,63,0|1e7fa80,48,59,1|1ejny3z,48,59,1|1ejny40,45,63,0|1eq5cvz,45,63,0|1eq5cw0,48,59,1|1f2e0rz,48,59,1|1f2e0s0,45,63,0|1f8vfjz,45,63,0|1f8vfk0,48,59,1|1fl43fz,48,59,1|1fl43g0,45,63,0|1frli7z,45,63,0|1frli80,48,59,1|1g3u63z,48,59,1|1g3u640,45,63,0|1gabkvz,45,63,0|1gabkw0,48,59,1|1gmk8rz,48,59,1|1gmk8s0,45,63,0|1gt1njz,45,63,0|1gt1nk0,48,59,1|1h5abfz,48,59,1|1h5abg0,45,63,0|1hc4ovz,45,63,0|1hc4ow0,48,59,1|1hodcrz,48,59,1|1hodcs0,45,63,0|1huurjz,45,63,0|1huurk0,48,59,1|1i73ffz,48,59,1|1i73fg0,45,63,0|1idku7z,45,63,0|1idku80,48,59,1|1ipti3z,48,59,1|1ipti40,45,63,0|1iwawvz,45,63,0|1iwaww0,48,59,1|1j8jkrz,48,59,1|1j8jks0,45,63,0|1jf0zjz,45,63,0|1jf0zk0,48,59,1|1jr9nfz,48,59,1|1jr9ng0,45,63,0|1jy40vz,45,63,0|1jy40w0,48,59,1|1kacorz,48,59,1|1kacos0,45,63,0|1kgu3jz,45,63,0|1kgu3k0,48,59,1|1kt2rfz,48,59,1|1kt2rg0,45,63,0|1kzk67z,45,63,0|1kzk680,48,59,1|1lbsu3z,48,59,1|1lbsu40,45,63,0|1lia8vz,45,63,0|1lia8w0,48,59,1|1luiwrz,48,59,1|1luiws0,45,63,0|1m10bjz,45,63,0|1m10bk0,48,59,1|1md8zfz,48,59,1|1md8zg0,45,63,0|1mjqe7z,45,63,0|1mjqe80,48,59,1|1mvz23z,48,59,1|1mvz240,45,63,0|1n2tfjz,45,63,0|1n2tfk0,48,59,1|1nf23fz,48,59,1|1nf23g0,45,63,0|1nlji7z,45,63,0|1nlji80,48,59,1|1nxs63z,48,59,1|1nxs640,45,63,0|1o49kvz,45,63,0|1o49kw0,48,59,1|1ogi8rz,48,59,1|1ogi8s0,45,63,0|1omznjz,45,63,0|1omznk0,48,59,1|1oz8bfz,48,59,1|1oz8bg0,45,63,0|1p5pq7z,45,63,0|1p5pq80,48,59,1|1phye3z,48,59,1|1phye40,45,63,0|1posrjz,45,63,0|1posrk0,48,59,1|1q11ffz,48,59,1|1q11fg0,45,63,0|1q7iu7z,45,63,0|1q7iu80,48,59,1|1qjri3z,48,59,1|1qjri40,45,63,0|1qq8wvz,45,63,0|1qq8ww0,48,59,1|1r2hkrz,48,59,1|1r2hks0,45,63,0|1r8yzjz,45,63,0|1r8yzk0,48,59,1|1rl7nfz,48,59,1|1rl7ng0,45,63,0|1rrp27z,45,63,0|1rrp280,48,59,1|1s3xq3z,48,59,1|1s3xq40,45,63,0|1saf4vz,45,63,0|1saf4w0,48,59,1|1smnsrz,48,59,1|1smnss0,45,63,0|1sti67z,45,63,0|1sti680,48,59,1|1t5qu3z,48,59,1|1t5qu40,45,63,0|1tc88vz,45,63,0|1tc88w0,48,59,1|1togwrz,48,59,1|1togws0,45,63,0|1tuybjz,45,63,0|1tuybk0,48,59,1|1u76zfz,48,59,1|1u76zg0,45,63,0|1udoe7z,45,63,0|1udoe80,48,59,1|1upx23z,48,59,1|1upx240,45,63,0|1uwegvz,45,63,0|1uwegw0,48,59,1|1v8n4rz,48,59,1|1v8n4s0,45,63,0|1vf4jjz,45,63,0|1vf4jk0,48,59,1|1vrd7fz,48,59,1|1vrd7g0,45,63,0|NaN,45,63,0\",\"America/Mazatlan|,0,132,0|-p1u4k1,0,132,0|-p1u4k0,44,62,0|-m7mko1,44,62,0|-m7mko0,45,63,0|-kf67c1,45,63,0|-kf67c0,44,62,0|-k6j3c1,44,62,0|-k6j3c0,45,63,0|-jypm01,45,63,0|-jypm00,44,62,0|-jpan81,44,62,0|-jpan80,45,63,0|-eg9601,45,63,0|-eg9600,44,62,0|-axv381,44,62,0|-axv380,46,38,0|m7z,46,38,0|m80,44,62,0|dphibz,44,62,0|dphic0,47,63,1|dzxcvz,47,63,1|dzxcw0,44,62,0|e87kzz,44,62,0|e87l00,47,63,1|einfjz,47,63,1|einfk0,44,62,0|eqxnnz,44,62,0|eqxno0,47,63,1|f1di7z,47,63,1|f1di80,44,62,0|f9nqbz,44,62,0|f9nqc0,47,63,1|fkgjjz,47,63,1|fkgjk0,44,62,0|fsdszz,44,62,0|fsdt00,47,63,1|g36m7z,47,63,1|g36m80,44,62,0|gcwozz,44,62,0|gcwp00,47,63,1|gkgu7z,47,63,1|gkgu80,44,62,0|gu6wzz,44,62,0|gu6x00,47,63,1|h4mrjz,47,63,1|h4mrk0,44,62,0|hcwznz,44,62,0|hcwzo0,47,63,1|hncu7z,47,63,1|hncu80,44,62,0|hvn2bz,44,62,0|hvn2c0,47,63,1|i6fvjz,47,63,1|i6fvk0,44,62,0|ied4zz,44,62,0|ied500,47,63,1|ip5y7z,47,63,1|ip5y80,44,62,0|ix37nz,44,62,0|ix37o0,47,63,1|j7w0vz,47,63,1|j7w0w0,44,62,0|jftabz,44,62,0|jftac0,47,63,1|jqm3jz,47,63,1|jqm3k0,44,62,0|jywbnz,44,62,0|jywbo0,47,63,1|k9c67z,47,63,1|k9c680,44,62,0|khmebz,44,62,0|khmec0,47,63,1|ks28vz,47,63,1|ks28w0,44,62,0|l0cgzz,44,62,0|l0ch00,47,63,1|lb5a7z,47,63,1|lb5a80,44,62,0|lj2jnz,44,62,0|lj2jo0,47,63,1|ltvcvz,47,63,1|ltvcw0,44,62,0|m1smbz,44,62,0|m1smc0,47,63,1|mclfjz,47,63,1|mclfk0,44,62,0|mkvnnz,44,62,0|mkvno0,47,63,1|mvbi7z,47,63,1|mvbi80,44,62,0|n3lqbz,44,62,0|n3lqc0,47,63,1|ne1kvz,47,63,1|ne1kw0,44,62,0|nmbszz,44,62,0|nmbt00,47,63,1|nwrnjz,47,63,1|nwrnk0,44,62,0|o51vnz,44,62,0|o51vo0,47,63,1|ofuovz,47,63,1|ofuow0,44,62,0|onrybz,44,62,0|onryc0,47,63,1|oykrjz,47,63,1|oykrk0,44,62,0|p6i0zz,44,62,0|p6i100,47,63,1|phau7z,47,63,1|phau80,44,62,0|ppl2bz,44,62,0|ppl2c0,47,63,1|q00wvz,47,63,1|q00ww0,44,62,0|q8b4zz,44,62,0|q8b500,47,63,1|qiqzjz,47,63,1|qiqzk0,44,62,0|qr17nz,44,62,0|qr17o0,47,63,1|r1u0vz,47,63,1|r1u0w0,44,62,0|r9rabz,44,62,0|r9rac0,47,63,1|rkk3jz,47,63,1|rkk3k0,44,62,0|rshczz,44,62,0|rshd00,47,63,1|s3a67z,47,63,1|s3a680,44,62,0|sbkebz,44,62,0|sbkec0,47,63,1|sm08vz,47,63,1|sm08w0,44,62,0|suagzz,44,62,0|suah00,47,63,1|t4qbjz,47,63,1|t4qbk0,44,62,0|td0jnz,44,62,0|td0jo0,47,63,1|tnge7z,47,63,1|tnge80,44,62,0|tvqmbz,44,62,0|tvqmc0,47,63,1|u6jfjz,47,63,1|u6jfk0,44,62,0|uegozz,44,62,0|uegp00,47,63,1|up9i7z,47,63,1|up9i80,44,62,0|ux6rnz,44,62,0|ux6ro0,47,63,1|v7zkvz,47,63,1|v7zkw0,44,62,0|vg9szz,44,62,0|vg9t00,47,63,1|vqpnjz,47,63,1|vqpnk0,44,62,0|vyzvnz,44,62,0|vyzvo0,47,63,1|w9fq7z,47,63,1|w9fq80,44,62,0|whpybz,44,62,0|whpyc0,47,63,1|wsirjz,47,63,1|wsirk0,44,62,0|x0g0zz,44,62,0|x0g100,47,63,1|xb8u7z,47,63,1|xb8u80,44,62,0|xj63nz,44,62,0|xj63o0,47,63,1|xtywvz,47,63,1|xtyww0,44,62,0|y1w6bz,44,62,0|y1w6c0,47,63,1|ycozjz,47,63,1|ycozk0,44,62,0|ykz7nz,44,62,0|ykz7o0,47,63,1|yvf27z,47,63,1|yvf280,44,62,0|z3pabz,44,62,0|z3pac0,47,63,1|ze54vz,47,63,1|ze54w0,44,62,0|zmfczz,44,62,0|zmfd00,47,63,1|zx867z,47,63,1|zx8680,44,62,0|1055fnz,44,62,0|1055fo0,47,63,1|10fy8vz,47,63,1|10fy8w0,44,62,0|10nvibz,44,62,0|10nvic0,47,63,1|10yobjz,47,63,1|10yobk0,44,62,0|116yjnz,44,62,0|116yjo0,47,63,1|11hee7z,47,63,1|11hee80,44,62,0|11pombz,44,62,0|11pomc0,47,63,1|1204gvz,47,63,1|1204gw0,44,62,0|128eozz,44,62,0|128ep00,47,63,1|12iujjz,47,63,1|12iujk0,44,62,0|12r4rnz,44,62,0|12r4ro0,47,63,1|131xkvz,47,63,1|131xkw0,44,62,0|139uubz,44,62,0|139uuc0,47,63,1|13knnjz,47,63,1|13knnk0,44,62,0|13skwzz,44,62,0|13skx00,47,63,1|143dq7z,47,63,1|143dq80,44,62,0|14bnybz,44,62,0|14bnyc0,47,63,1|14m3svz,47,63,1|14m3sw0,44,62,0|14ue0zz,44,62,0|14ue100,47,63,1|154tvjz,47,63,1|154tvk0,44,62,0|15d43nz,44,62,0|15d43o0,47,63,1|15nwwvz,47,63,1|15nwww0,44,62,0|15vu6bz,44,62,0|15vu6c0,47,63,1|166mzjz,47,63,1|166mzk0,44,62,0|16ek8zz,44,62,0|16ek900,47,63,1|16pd27z,47,63,1|16pd280,44,62,0|16xnabz,44,62,0|16xnac0,47,63,1|17834vz,47,63,1|17834w0,44,62,0|17gdczz,44,62,0|17gdd00,47,63,1|17qt7jz,47,63,1|17qt7k0,44,62,0|17z3fnz,44,62,0|17z3fo0,47,63,1|189ja7z,47,63,1|189ja80,44,62,0|18htibz,44,62,0|18htic0,47,63,1|18smbjz,47,63,1|18smbk0,44,62,0|190jkzz,44,62,0|190jl00,47,63,1|19bce7z,47,63,1|19bce80,44,62,0|19j9nnz,44,62,0|19j9no0,47,63,1|19u2gvz,47,63,1|19u2gw0,44,62,0|1a2cozz,44,62,0|1a2cp00,47,63,1|1acsjjz,47,63,1|1acsjk0,44,62,0|1al2rnz,44,62,0|1al2ro0,47,63,1|1avim7z,47,63,1|1avim80,44,62,0|1b3subz,44,62,0|1b3suc0,47,63,1|1belnjz,47,63,1|1belnk0,44,62,0|1bmiwzz,44,62,0|1bmix00,47,63,1|1bxbq7z,47,63,1|1bxbq80,44,62,0|1c58znz,44,62,0|1c58zo0,47,63,1|1cg1svz,47,63,1|1cg1sw0,44,62,0|1cnz2bz,44,62,0|1cnz2c0,47,63,1|1cyrvjz,47,63,1|1cyrvk0,44,62,0|1d723nz,44,62,0|1d723o0,47,63,1|1dhhy7z,47,63,1|1dhhy80,44,62,0|1dps6bz,44,62,0|1dps6c0,47,63,1|1e080vz,47,63,1|1e080w0,44,62,0|1e8i8zz,44,62,0|1e8i900,47,63,1|1ejb27z,47,63,1|1ejb280,44,62,0|1er8bnz,44,62,0|1er8bo0,47,63,1|1f214vz,47,63,1|1f214w0,44,62,0|1f9yebz,44,62,0|1f9yec0,47,63,1|1fkr7jz,47,63,1|1fkr7k0,44,62,0|1ft1fnz,44,62,0|1ft1fo0,47,63,1|1g3ha7z,47,63,1|1g3ha80,44,62,0|1gbribz,44,62,0|1gbric0,47,63,1|1gm7cvz,47,63,1|1gm7cw0,44,62,0|1guhkzz,44,62,0|1guhl00,47,63,1|1h4xfjz,47,63,1|1h4xfk0,44,62,0|1hd7nnz,44,62,0|1hd7no0,47,63,1|1ho0gvz,47,63,1|1ho0gw0,44,62,0|1hvxqbz,44,62,0|1hvxqc0,47,63,1|1i6qjjz,47,63,1|1i6qjk0,44,62,0|1ienszz,44,62,0|1ient00,47,63,1|1ipgm7z,47,63,1|1ipgm80,44,62,0|1ixqubz,44,62,0|1ixquc0,47,63,1|1j86ovz,47,63,1|1j86ow0,44,62,0|1jggwzz,44,62,0|1jggx00,47,63,1|1jqwrjz,47,63,1|1jqwrk0,44,62,0|1jz6znz,44,62,0|1jz6zo0,47,63,1|1k9zsvz,47,63,1|1k9zsw0,44,62,0|1khx2bz,44,62,0|1khx2c0,47,63,1|1kspvjz,47,63,1|1kspvk0,44,62,0|1l0n4zz,44,62,0|1l0n500,47,63,1|1lbfy7z,47,63,1|1lbfy80,44,62,0|1ljq6bz,44,62,0|1ljq6c0,47,63,1|1lu60vz,47,63,1|1lu60w0,44,62,0|1m2g8zz,44,62,0|1m2g900,47,63,1|1mcw3jz,47,63,1|1mcw3k0,44,62,0|1ml6bnz,44,62,0|1ml6bo0,47,63,1|1mvm67z,47,63,1|1mvm680,44,62,0|1n3webz,44,62,0|1n3wec0,47,63,1|1nep7jz,47,63,1|1nep7k0,44,62,0|1nmmgzz,44,62,0|1nmmh00,47,63,1|1nxfa7z,47,63,1|1nxfa80,44,62,0|1o5cjnz,44,62,0|1o5cjo0,47,63,1|1og5cvz,47,63,1|1og5cw0,44,62,0|1oofkzz,44,62,0|1oofl00,47,63,1|1oyvfjz,47,63,1|1oyvfk0,44,62,0|1p75nnz,44,62,0|1p75no0,47,63,1|1phli7z,47,63,1|1phli80,44,62,0|1ppvqbz,44,62,0|1ppvqc0,47,63,1|1q0ojjz,47,63,1|1q0ojk0,44,62,0|1q8lszz,44,62,0|1q8lt00,47,63,1|1qjem7z,47,63,1|1qjem80,44,62,0|1qrbvnz,44,62,0|1qrbvo0,47,63,1|1r24ovz,47,63,1|1r24ow0,44,62,0|1ra1ybz,44,62,0|1ra1yc0,47,63,1|1rkurjz,47,63,1|1rkurk0,44,62,0|1rt4znz,44,62,0|1rt4zo0,47,63,1|1s3ku7z,47,63,1|1s3ku80,44,62,0|1sbv2bz,44,62,0|1sbv2c0,47,63,1|1smawvz,47,63,1|1smaww0,44,62,0|1sul4zz,44,62,0|1sul500,47,63,1|1t5dy7z,47,63,1|1t5dy80,44,62,0|1tdb7nz,44,62,0|1tdb7o0,47,63,1|1to40vz,47,63,1|1to40w0,44,62,0|1tw1abz,44,62,0|1tw1ac0,47,63,1|1u6u3jz,47,63,1|1u6u3k0,44,62,0|1uf4bnz,44,62,0|1uf4bo0,47,63,1|1upk67z,47,63,1|1upk680,44,62,0|1uxuebz,44,62,0|1uxuec0,47,63,1|1v8a8vz,47,63,1|1v8a8w0,44,62,0|1vgkgzz,44,62,0|1vgkh00,47,63,1|1vr0bjz,47,63,1|1vr0bk0,44,62,0|NaN,44,62,0\",\"America/Menominee|,0,133,0|-17zjvry,0,133,0|-17zjvrx,45,63,0|-r0esg1,45,63,0|-r0esg0,48,59,1|-qplz81,48,59,1|-qplz80,45,63,0|-qhops1,45,63,0|-qhops0,48,59,1|-q6vwk1,48,59,1|-q6vwk0,45,63,0|-ek21s1,45,63,0|-ek21s0,52,59,1|-cq2tg1,52,59,1|-cq2tg0,53,59,1|-cnp0k1,53,59,1|-cnp0k0,45,63,0|-ccw1s1,45,63,0|-ccw1s0,48,59,1|-c4yxw1,48,59,1|-c4yxw0,45,63,0|-1xbog1,45,63,0|-1xbog0,48,59,1|-1nlr81,48,59,1|-1nlr80,45,63,0|-cshs1,45,63,0|-cshs0,43,59,0|1qgorz,43,59,0|1qgos0,48,59,1|1ztq3z,48,59,1|1ztq40,45,63,0|23ffjz,45,63,0|23ffk0,48,59,1|2ijsrz,48,59,1|2ijss0,45,63,0|2oo8vz,45,63,0|2oo8w0,48,59,1|319vfz,48,59,1|319vg0,45,63,0|3amzjz,45,63,0|3amzk0,48,59,1|3kcwrz,48,59,1|3kcws0,45,63,0|3td27z,45,63,0|3td280,48,59,1|432zfz,48,59,1|432zg0,45,63,0|4cg3jz,45,63,0|4cg3k0,48,59,1|4lt23z,48,59,1|4lt240,45,63,0|4v667z,45,63,0|4v6680,48,59,1|54j4rz,48,59,1|54j4s0,45,63,0|5dw8vz,45,63,0|5dw8w0,48,59,1|5n97fz,48,59,1|5n97g0,45,63,0|5wmbjz,45,63,0|5wmbk0,48,59,1|65za3z,48,59,1|65za40,45,63,0|6fce7z,45,63,0|6fce80,48,59,1|6p2bfz,48,59,1|6p2bg0,45,63,0|6y2gvz,45,63,0|6y2gw0,48,59,1|77se3z,48,59,1|77se40,45,63,0|7h5i7z,45,63,0|7h5i80,48,59,1|7qigrz,48,59,1|7qigs0,45,63,0|7zvkvz,45,63,0|7zvkw0,48,59,1|898jfz,48,59,1|898jg0,45,63,0|8ilnjz,45,63,0|8ilnk0,48,59,1|8rym3z,48,59,1|8rym40,45,63,0|908u7z,45,63,0|908u80,48,59,1|9aoorz,48,59,1|9aoos0,45,63,0|9iywvz,45,63,0|9iyww0,48,59,1|9trq3z,48,59,1|9trq40,45,63,0|a1ozjz,45,63,0|a1ozk0,48,59,1|achsrz,48,59,1|achss0,45,63,0|akf27z,45,63,0|akf280,48,59,1|av7vfz,48,59,1|av7vg0,45,63,0|b3i3jz,45,63,0|b3i3k0,48,59,1|bdxy3z,48,59,1|bdxy40,45,63,0|bm867z,45,63,0|bm8680,48,59,1|bwo0rz,48,59,1|bwo0s0,45,63,0|c4y8vz,45,63,0|c4y8w0,48,59,1|cfr23z,48,59,1|cfr240,45,63,0|cnobjz,45,63,0|cnobk0,48,59,1|cyh4rz,48,59,1|cyh4s0,45,63,0|d6ee7z,45,63,0|d6ee80,48,59,1|dh77fz,48,59,1|dh77g0,45,63,0|dphfjz,45,63,0|dphfk0,48,59,1|dzxa3z,48,59,1|dzxa40,45,63,0|e87i7z,45,63,0|e87i80,48,59,1|eincrz,48,59,1|eincs0,45,63,0|eqxkvz,45,63,0|eqxkw0,48,59,1|f1dffz,48,59,1|f1dfg0,45,63,0|f9nnjz,45,63,0|f9nnk0,48,59,1|fkggrz,48,59,1|fkggs0,45,63,0|fsdq7z,45,63,0|fsdq80,48,59,1|g36jfz,48,59,1|g36jg0,45,63,0|gb3svz,45,63,0|gb3sw0,48,59,1|glwm3z,48,59,1|glwm40,45,63,0|gu6u7z,45,63,0|gu6u80,48,59,1|h4morz,48,59,1|h4mos0,45,63,0|hcwwvz,45,63,0|hcwww0,48,59,1|hncrfz,48,59,1|hncrg0,45,63,0|hvmzjz,45,63,0|hvmzk0,48,59,1|i6fsrz,48,59,1|i6fss0,45,63,0|ied27z,45,63,0|ied280,48,59,1|ip5vfz,48,59,1|ip5vg0,45,63,0|ix34vz,45,63,0|ix34w0,48,59,1|j7vy3z,48,59,1|j7vy40,45,63,0|jeqbjz,45,63,0|jeqbk0,48,59,1|jqyzfz,48,59,1|jqyzg0,45,63,0|jxge7z,45,63,0|jxge80,48,59,1|k9p23z,48,59,1|k9p240,45,63,0|kg6gvz,45,63,0|kg6gw0,48,59,1|ksf4rz,48,59,1|ksf4s0,45,63,0|kz9i7z,45,63,0|kz9i80,48,59,1|lbi63z,48,59,1|lbi640,45,63,0|lhzkvz,45,63,0|lhzkw0,48,59,1|lu88rz,48,59,1|lu88s0,45,63,0|m0pnjz,45,63,0|m0pnk0,48,59,1|mcybfz,48,59,1|mcybg0,45,63,0|mjfq7z,45,63,0|mjfq80,48,59,1|mvoe3z,48,59,1|mvoe40,45,63,0|n25svz,45,63,0|n25sw0,48,59,1|neegrz,48,59,1|neegs0,45,63,0|nkvvjz,45,63,0|nkvvk0,48,59,1|nx4jfz,48,59,1|nx4jg0,45,63,0|o3ywvz,45,63,0|o3yww0,48,59,1|og7krz,48,59,1|og7ks0,45,63,0|omozjz,45,63,0|omozk0,48,59,1|oyxnfz,48,59,1|oyxng0,45,63,0|p5f27z,45,63,0|p5f280,48,59,1|phnq3z,48,59,1|phnq40,45,63,0|po54vz,45,63,0|po54w0,48,59,1|q0dsrz,48,59,1|q0dss0,45,63,0|q6v7jz,45,63,0|q6v7k0,48,59,1|qj3vfz,48,59,1|qj3vg0,45,63,0|qpy8vz,45,63,0|qpy8w0,48,59,1|r26wrz,48,59,1|r26ws0,45,63,0|r8objz,45,63,0|r8obk0,48,59,1|rkwzfz,48,59,1|rkwzg0,45,63,0|rree7z,45,63,0|rree80,48,59,1|s3n23z,48,59,1|s3n240,45,63,0|sa4gvz,45,63,0|sa4gw0,48,59,1|smd4rz,48,59,1|smd4s0,45,63,0|ssujjz,45,63,0|ssujk0,48,59,1|t537fz,48,59,1|t537g0,45,63,0|tbkm7z,45,63,0|tbkm80,48,59,1|tnta3z,48,59,1|tnta40,45,63,0|tunnjz,45,63,0|tunnk0,48,59,1|u6wbfz,48,59,1|u6wbg0,45,63,0|uddq7z,45,63,0|uddq80,48,59,1|upme3z,48,59,1|upme40,45,63,0|uw3svz,45,63,0|uw3sw0,48,59,1|v8cgrz,48,59,1|v8cgs0,45,63,0|vetvjz,45,63,0|vetvk0,48,59,1|vr2jfz,48,59,1|vr2jg0,45,63,0|vxjy7z,45,63,0|vxjy80,48,59,1|w9sm3z,48,59,1|w9sm40,45,63,0|wgmzjz,45,63,0|wgmzk0,48,59,1|wsvnfz,48,59,1|wsvng0,45,63,0|wzd27z,45,63,0|wzd280,48,59,1|xblq3z,48,59,1|xblq40,45,63,0|xi34vz,45,63,0|xi34w0,48,59,1|xubsrz,48,59,1|xubss0,45,63,0|y0t7jz,45,63,0|y0t7k0,48,59,1|yd1vfz,48,59,1|yd1vg0,45,63,0|yjja7z,45,63,0|yjja80,48,59,1|yvry3z,48,59,1|yvry40,45,63,0|z29cvz,45,63,0|z29cw0,48,59,1|zei0rz,48,59,1|zei0s0,45,63,0|zlce7z,45,63,0|zlce80,48,59,1|zxl23z,48,59,1|zxl240,45,63,0|1042gvz,45,63,0|1042gw0,48,59,1|10gb4rz,48,59,1|10gb4s0,45,63,0|10msjjz,45,63,0|10msjk0,48,59,1|10z17fz,48,59,1|10z17g0,45,63,0|115im7z,45,63,0|115im80,48,59,1|11hra3z,48,59,1|11hra40,45,63,0|11o8ovz,45,63,0|11o8ow0,48,59,1|120hcrz,48,59,1|120hcs0,45,63,0|126yrjz,45,63,0|126yrk0,48,59,1|12j7ffz,48,59,1|12j7fg0,45,63,0|12q1svz,45,63,0|12q1sw0,48,59,1|132agrz,48,59,1|132ags0,45,63,0|138rvjz,45,63,0|138rvk0,48,59,1|13l0jfz,48,59,1|13l0jg0,45,63,0|13rhy7z,45,63,0|13rhy80,48,59,1|143qm3z,48,59,1|143qm40,45,63,0|14a80vz,45,63,0|14a80w0,48,59,1|14mgorz,48,59,1|14mgos0,45,63,0|14sy3jz,45,63,0|14sy3k0,48,59,1|1556rfz,48,59,1|1556rg0,45,63,0|15c14vz,45,63,0|15c14w0,48,59,1|15o9srz,48,59,1|15o9ss0,45,63,0|15ur7jz,45,63,0|15ur7k0,48,59,1|166zvfz,48,59,1|166zvg0,45,63,0|16dha7z,45,63,0|16dha80,48,59,1|16ppy3z,48,59,1|16ppy40,45,63,0|16w7cvz,45,63,0|16w7cw0,48,59,1|178g0rz,48,59,1|178g0s0,45,63,0|17exfjz,45,63,0|17exfk0,48,59,1|17r63fz,48,59,1|17r63g0,45,63,0|17xni7z,45,63,0|17xni80,48,59,1|189w63z,48,59,1|189w640,45,63,0|18gqjjz,45,63,0|18gqjk0,48,59,1|18sz7fz,48,59,1|18sz7g0,45,63,0|18zgm7z,45,63,0|18zgm80,48,59,1|19bpa3z,48,59,1|19bpa40,45,63,0|19i6ovz,45,63,0|19i6ow0,48,59,1|19ufcrz,48,59,1|19ufcs0,45,63,0|1a0wrjz,45,63,0|1a0wrk0,48,59,1|1ad5ffz,48,59,1|1ad5fg0,45,63,0|1ajmu7z,45,63,0|1ajmu80,48,59,1|1avvi3z,48,59,1|1avvi40,45,63,0|1b2pvjz,45,63,0|1b2pvk0,48,59,1|1beyjfz,48,59,1|1beyjg0,45,63,0|1blfy7z,45,63,0|1blfy80,48,59,1|1bxom3z,48,59,1|1bxom40,45,63,0|1c460vz,45,63,0|1c460w0,48,59,1|1cgeorz,48,59,1|1cgeos0,45,63,0|1cmw3jz,45,63,0|1cmw3k0,48,59,1|1cz4rfz,48,59,1|1cz4rg0,45,63,0|1d5m67z,45,63,0|1d5m680,48,59,1|1dhuu3z,48,59,1|1dhuu40,45,63,0|1doc8vz,45,63,0|1doc8w0,48,59,1|1e0kwrz,48,59,1|1e0kws0,45,63,0|1e7fa7z,45,63,0|1e7fa80,48,59,1|1ejny3z,48,59,1|1ejny40,45,63,0|1eq5cvz,45,63,0|1eq5cw0,48,59,1|1f2e0rz,48,59,1|1f2e0s0,45,63,0|1f8vfjz,45,63,0|1f8vfk0,48,59,1|1fl43fz,48,59,1|1fl43g0,45,63,0|1frli7z,45,63,0|1frli80,48,59,1|1g3u63z,48,59,1|1g3u640,45,63,0|1gabkvz,45,63,0|1gabkw0,48,59,1|1gmk8rz,48,59,1|1gmk8s0,45,63,0|1gt1njz,45,63,0|1gt1nk0,48,59,1|1h5abfz,48,59,1|1h5abg0,45,63,0|1hc4ovz,45,63,0|1hc4ow0,48,59,1|1hodcrz,48,59,1|1hodcs0,45,63,0|1huurjz,45,63,0|1huurk0,48,59,1|1i73ffz,48,59,1|1i73fg0,45,63,0|1idku7z,45,63,0|1idku80,48,59,1|1ipti3z,48,59,1|1ipti40,45,63,0|1iwawvz,45,63,0|1iwaww0,48,59,1|1j8jkrz,48,59,1|1j8jks0,45,63,0|1jf0zjz,45,63,0|1jf0zk0,48,59,1|1jr9nfz,48,59,1|1jr9ng0,45,63,0|1jy40vz,45,63,0|1jy40w0,48,59,1|1kacorz,48,59,1|1kacos0,45,63,0|1kgu3jz,45,63,0|1kgu3k0,48,59,1|1kt2rfz,48,59,1|1kt2rg0,45,63,0|1kzk67z,45,63,0|1kzk680,48,59,1|1lbsu3z,48,59,1|1lbsu40,45,63,0|1lia8vz,45,63,0|1lia8w0,48,59,1|1luiwrz,48,59,1|1luiws0,45,63,0|1m10bjz,45,63,0|1m10bk0,48,59,1|1md8zfz,48,59,1|1md8zg0,45,63,0|1mjqe7z,45,63,0|1mjqe80,48,59,1|1mvz23z,48,59,1|1mvz240,45,63,0|1n2tfjz,45,63,0|1n2tfk0,48,59,1|1nf23fz,48,59,1|1nf23g0,45,63,0|1nlji7z,45,63,0|1nlji80,48,59,1|1nxs63z,48,59,1|1nxs640,45,63,0|1o49kvz,45,63,0|1o49kw0,48,59,1|1ogi8rz,48,59,1|1ogi8s0,45,63,0|1omznjz,45,63,0|1omznk0,48,59,1|1oz8bfz,48,59,1|1oz8bg0,45,63,0|1p5pq7z,45,63,0|1p5pq80,48,59,1|1phye3z,48,59,1|1phye40,45,63,0|1posrjz,45,63,0|1posrk0,48,59,1|1q11ffz,48,59,1|1q11fg0,45,63,0|1q7iu7z,45,63,0|1q7iu80,48,59,1|1qjri3z,48,59,1|1qjri40,45,63,0|1qq8wvz,45,63,0|1qq8ww0,48,59,1|1r2hkrz,48,59,1|1r2hks0,45,63,0|1r8yzjz,45,63,0|1r8yzk0,48,59,1|1rl7nfz,48,59,1|1rl7ng0,45,63,0|1rrp27z,45,63,0|1rrp280,48,59,1|1s3xq3z,48,59,1|1s3xq40,45,63,0|1saf4vz,45,63,0|1saf4w0,48,59,1|1smnsrz,48,59,1|1smnss0,45,63,0|1sti67z,45,63,0|1sti680,48,59,1|1t5qu3z,48,59,1|1t5qu40,45,63,0|1tc88vz,45,63,0|1tc88w0,48,59,1|1togwrz,48,59,1|1togws0,45,63,0|1tuybjz,45,63,0|1tuybk0,48,59,1|1u76zfz,48,59,1|1u76zg0,45,63,0|1udoe7z,45,63,0|1udoe80,48,59,1|1upx23z,48,59,1|1upx240,45,63,0|1uwegvz,45,63,0|1uwegw0,48,59,1|1v8n4rz,48,59,1|1v8n4s0,45,63,0|1vf4jjz,45,63,0|1vf4jk0,48,59,1|1vrd7fz,48,59,1|1vrd7g0,45,63,0|NaN,45,63,0\",\"America/Merida|,0,134,0|-p1u7c1,0,134,0|-p1u7c0,45,63,0|690gnz,45,63,0|690go0,43,59,0|6qpf7z,43,59,0|6qpf80,45,63,0|dphfjz,45,63,0|dphfk0,48,59,1|dzxa3z,48,59,1|dzxa40,45,63,0|e87i7z,45,63,0|e87i80,48,59,1|eincrz,48,59,1|eincs0,45,63,0|eqxkvz,45,63,0|eqxkw0,48,59,1|f1dffz,48,59,1|f1dfg0,45,63,0|f9nnjz,45,63,0|f9nnk0,48,59,1|fkggrz,48,59,1|fkggs0,45,63,0|fsdq7z,45,63,0|fsdq80,48,59,1|g36jfz,48,59,1|g36jg0,45,63,0|gcwm7z,45,63,0|gcwm80,48,59,1|gkgrfz,48,59,1|gkgrg0,45,63,0|gu6u7z,45,63,0|gu6u80,48,59,1|h4morz,48,59,1|h4mos0,45,63,0|hcwwvz,45,63,0|hcwww0,48,59,1|hncrfz,48,59,1|hncrg0,45,63,0|hvmzjz,45,63,0|hvmzk0,48,59,1|i6fsrz,48,59,1|i6fss0,45,63,0|ied27z,45,63,0|ied280,48,59,1|ip5vfz,48,59,1|ip5vg0,45,63,0|ix34vz,45,63,0|ix34w0,48,59,1|j7vy3z,48,59,1|j7vy40,45,63,0|jft7jz,45,63,0|jft7k0,48,59,1|jqm0rz,48,59,1|jqm0s0,45,63,0|jyw8vz,45,63,0|jyw8w0,48,59,1|k9c3fz,48,59,1|k9c3g0,45,63,0|khmbjz,45,63,0|khmbk0,48,59,1|ks263z,48,59,1|ks2640,45,63,0|l0ce7z,45,63,0|l0ce80,48,59,1|lb57fz,48,59,1|lb57g0,45,63,0|lj2gvz,45,63,0|lj2gw0,48,59,1|ltva3z,48,59,1|ltva40,45,63,0|m1sjjz,45,63,0|m1sjk0,48,59,1|mclcrz,48,59,1|mclcs0,45,63,0|mkvkvz,45,63,0|mkvkw0,48,59,1|mvbffz,48,59,1|mvbfg0,45,63,0|n3lnjz,45,63,0|n3lnk0,48,59,1|ne1i3z,48,59,1|ne1i40,45,63,0|nmbq7z,45,63,0|nmbq80,48,59,1|nwrkrz,48,59,1|nwrks0,45,63,0|o51svz,45,63,0|o51sw0,48,59,1|ofum3z,48,59,1|ofum40,45,63,0|onrvjz,45,63,0|onrvk0,48,59,1|oykorz,48,59,1|oykos0,45,63,0|p6hy7z,45,63,0|p6hy80,48,59,1|pharfz,48,59,1|pharg0,45,63,0|ppkzjz,45,63,0|ppkzk0,48,59,1|q00u3z,48,59,1|q00u40,45,63,0|q8b27z,45,63,0|q8b280,48,59,1|qiqwrz,48,59,1|qiqws0,45,63,0|qr14vz,45,63,0|qr14w0,48,59,1|r1ty3z,48,59,1|r1ty40,45,63,0|r9r7jz,45,63,0|r9r7k0,48,59,1|rkk0rz,48,59,1|rkk0s0,45,63,0|rsha7z,45,63,0|rsha80,48,59,1|s3a3fz,48,59,1|s3a3g0,45,63,0|sbkbjz,45,63,0|sbkbk0,48,59,1|sm063z,48,59,1|sm0640,45,63,0|suae7z,45,63,0|suae80,48,59,1|t4q8rz,48,59,1|t4q8s0,45,63,0|td0gvz,45,63,0|td0gw0,48,59,1|tngbfz,48,59,1|tngbg0,45,63,0|tvqjjz,45,63,0|tvqjk0,48,59,1|u6jcrz,48,59,1|u6jcs0,45,63,0|uegm7z,45,63,0|uegm80,48,59,1|up9ffz,48,59,1|up9fg0,45,63,0|ux6ovz,45,63,0|ux6ow0,48,59,1|v7zi3z,48,59,1|v7zi40,45,63,0|vg9q7z,45,63,0|vg9q80,48,59,1|vqpkrz,48,59,1|vqpks0,45,63,0|vyzsvz,45,63,0|vyzsw0,48,59,1|w9fnfz,48,59,1|w9fng0,45,63,0|whpvjz,45,63,0|whpvk0,48,59,1|wsiorz,48,59,1|wsios0,45,63,0|x0fy7z,45,63,0|x0fy80,48,59,1|xb8rfz,48,59,1|xb8rg0,45,63,0|xj60vz,45,63,0|xj60w0,48,59,1|xtyu3z,48,59,1|xtyu40,45,63,0|y1w3jz,45,63,0|y1w3k0,48,59,1|ycowrz,48,59,1|ycows0,45,63,0|ykz4vz,45,63,0|ykz4w0,48,59,1|yvezfz,48,59,1|yvezg0,45,63,0|z3p7jz,45,63,0|z3p7k0,48,59,1|ze523z,48,59,1|ze5240,45,63,0|zmfa7z,45,63,0|zmfa80,48,59,1|zx83fz,48,59,1|zx83g0,45,63,0|1055cvz,45,63,0|1055cw0,48,59,1|10fy63z,48,59,1|10fy640,45,63,0|10nvfjz,45,63,0|10nvfk0,48,59,1|10yo8rz,48,59,1|10yo8s0,45,63,0|116ygvz,45,63,0|116ygw0,48,59,1|11hebfz,48,59,1|11hebg0,45,63,0|11pojjz,45,63,0|11pojk0,48,59,1|1204e3z,48,59,1|1204e40,45,63,0|128em7z,45,63,0|128em80,48,59,1|12iugrz,48,59,1|12iugs0,45,63,0|12r4ovz,45,63,0|12r4ow0,48,59,1|131xi3z,48,59,1|131xi40,45,63,0|139urjz,45,63,0|139urk0,48,59,1|13knkrz,48,59,1|13knks0,45,63,0|13sku7z,45,63,0|13sku80,48,59,1|143dnfz,48,59,1|143dng0,45,63,0|14bnvjz,45,63,0|14bnvk0,48,59,1|14m3q3z,48,59,1|14m3q40,45,63,0|14udy7z,45,63,0|14udy80,48,59,1|154tsrz,48,59,1|154tss0,45,63,0|15d40vz,45,63,0|15d40w0,48,59,1|15nwu3z,48,59,1|15nwu40,45,63,0|15vu3jz,45,63,0|15vu3k0,48,59,1|166mwrz,48,59,1|166mws0,45,63,0|16ek67z,45,63,0|16ek680,48,59,1|16pczfz,48,59,1|16pczg0,45,63,0|16xn7jz,45,63,0|16xn7k0,48,59,1|178323z,48,59,1|1783240,45,63,0|17gda7z,45,63,0|17gda80,48,59,1|17qt4rz,48,59,1|17qt4s0,45,63,0|17z3cvz,45,63,0|17z3cw0,48,59,1|189j7fz,48,59,1|189j7g0,45,63,0|18htfjz,45,63,0|18htfk0,48,59,1|18sm8rz,48,59,1|18sm8s0,45,63,0|190ji7z,45,63,0|190ji80,48,59,1|19bcbfz,48,59,1|19bcbg0,45,63,0|19j9kvz,45,63,0|19j9kw0,48,59,1|19u2e3z,48,59,1|19u2e40,45,63,0|1a2cm7z,45,63,0|1a2cm80,48,59,1|1acsgrz,48,59,1|1acsgs0,45,63,0|1al2ovz,45,63,0|1al2ow0,48,59,1|1avijfz,48,59,1|1avijg0,45,63,0|1b3srjz,45,63,0|1b3srk0,48,59,1|1belkrz,48,59,1|1belks0,45,63,0|1bmiu7z,45,63,0|1bmiu80,48,59,1|1bxbnfz,48,59,1|1bxbng0,45,63,0|1c58wvz,45,63,0|1c58ww0,48,59,1|1cg1q3z,48,59,1|1cg1q40,45,63,0|1cnyzjz,45,63,0|1cnyzk0,48,59,1|1cyrsrz,48,59,1|1cyrss0,45,63,0|1d720vz,45,63,0|1d720w0,48,59,1|1dhhvfz,48,59,1|1dhhvg0,45,63,0|1dps3jz,45,63,0|1dps3k0,48,59,1|1e07y3z,48,59,1|1e07y40,45,63,0|1e8i67z,45,63,0|1e8i680,48,59,1|1ejazfz,48,59,1|1ejazg0,45,63,0|1er88vz,45,63,0|1er88w0,48,59,1|1f2123z,48,59,1|1f21240,45,63,0|1f9ybjz,45,63,0|1f9ybk0,48,59,1|1fkr4rz,48,59,1|1fkr4s0,45,63,0|1ft1cvz,45,63,0|1ft1cw0,48,59,1|1g3h7fz,48,59,1|1g3h7g0,45,63,0|1gbrfjz,45,63,0|1gbrfk0,48,59,1|1gm7a3z,48,59,1|1gm7a40,45,63,0|1guhi7z,45,63,0|1guhi80,48,59,1|1h4xcrz,48,59,1|1h4xcs0,45,63,0|1hd7kvz,45,63,0|1hd7kw0,48,59,1|1ho0e3z,48,59,1|1ho0e40,45,63,0|1hvxnjz,45,63,0|1hvxnk0,48,59,1|1i6qgrz,48,59,1|1i6qgs0,45,63,0|1ienq7z,45,63,0|1ienq80,48,59,1|1ipgjfz,48,59,1|1ipgjg0,45,63,0|1ixqrjz,45,63,0|1ixqrk0,48,59,1|1j86m3z,48,59,1|1j86m40,45,63,0|1jggu7z,45,63,0|1jggu80,48,59,1|1jqworz,48,59,1|1jqwos0,45,63,0|1jz6wvz,45,63,0|1jz6ww0,48,59,1|1k9zq3z,48,59,1|1k9zq40,45,63,0|1khwzjz,45,63,0|1khwzk0,48,59,1|1kspsrz,48,59,1|1kspss0,45,63,0|1l0n27z,45,63,0|1l0n280,48,59,1|1lbfvfz,48,59,1|1lbfvg0,45,63,0|1ljq3jz,45,63,0|1ljq3k0,48,59,1|1lu5y3z,48,59,1|1lu5y40,45,63,0|1m2g67z,45,63,0|1m2g680,48,59,1|1mcw0rz,48,59,1|1mcw0s0,45,63,0|1ml68vz,45,63,0|1ml68w0,48,59,1|1mvm3fz,48,59,1|1mvm3g0,45,63,0|1n3wbjz,45,63,0|1n3wbk0,48,59,1|1nep4rz,48,59,1|1nep4s0,45,63,0|1nmme7z,45,63,0|1nmme80,48,59,1|1nxf7fz,48,59,1|1nxf7g0,45,63,0|1o5cgvz,45,63,0|1o5cgw0,48,59,1|1og5a3z,48,59,1|1og5a40,45,63,0|1oofi7z,45,63,0|1oofi80,48,59,1|1oyvcrz,48,59,1|1oyvcs0,45,63,0|1p75kvz,45,63,0|1p75kw0,48,59,1|1phlffz,48,59,1|1phlfg0,45,63,0|1ppvnjz,45,63,0|1ppvnk0,48,59,1|1q0ogrz,48,59,1|1q0ogs0,45,63,0|1q8lq7z,45,63,0|1q8lq80,48,59,1|1qjejfz,48,59,1|1qjejg0,45,63,0|1qrbsvz,45,63,0|1qrbsw0,48,59,1|1r24m3z,48,59,1|1r24m40,45,63,0|1ra1vjz,45,63,0|1ra1vk0,48,59,1|1rkuorz,48,59,1|1rkuos0,45,63,0|1rt4wvz,45,63,0|1rt4ww0,48,59,1|1s3krfz,48,59,1|1s3krg0,45,63,0|1sbuzjz,45,63,0|1sbuzk0,48,59,1|1smau3z,48,59,1|1smau40,45,63,0|1sul27z,45,63,0|1sul280,48,59,1|1t5dvfz,48,59,1|1t5dvg0,45,63,0|1tdb4vz,45,63,0|1tdb4w0,48,59,1|1to3y3z,48,59,1|1to3y40,45,63,0|1tw17jz,45,63,0|1tw17k0,48,59,1|1u6u0rz,48,59,1|1u6u0s0,45,63,0|1uf48vz,45,63,0|1uf48w0,48,59,1|1upk3fz,48,59,1|1upk3g0,45,63,0|1uxubjz,45,63,0|1uxubk0,48,59,1|1v8a63z,48,59,1|1v8a640,45,63,0|1vgke7z,45,63,0|1vgke80,48,59,1|1vr08rz,48,59,1|1vr08s0,45,63,0|NaN,45,63,0\",\"America/Metlakatla|,0,135,0|-1hc7qk0,0,135,0|-1hc7qjz,0,136,0|-1078wyv,0,136,0|-1078wyu,46,38,0|-ek1w81,46,38,0|-ek1w80,68,62,1|-cq2tg1,68,62,1|-cq2tg0,69,62,1|-cnov01,69,62,1|-cnov00,46,38,0|-csc81,46,38,0|-csc80,56,62,1|-3fdo1,56,62,1|-3fdo0,46,38,0|5xqfz,46,38,0|5xqg0,56,62,1|faozz,56,62,1|fap00,46,38,0|ont3z,46,38,0|ont40,56,62,1|ydqbz,56,62,1|ydqc0,46,38,0|17qufz,46,38,0|17qug0,56,62,1|1h3szz,56,62,1|1h3t00,46,38,0|1qgx3z,46,38,0|1qgx40,56,62,1|1ztvnz,56,62,1|1ztvo0,46,38,0|23fl3z,46,38,0|23fl40,56,62,1|2ijybz,56,62,1|2ijyc0,46,38,0|2ooefz,46,38,0|2ooeg0,56,62,1|31a0zz,56,62,1|31a100,46,38,0|3an53z,46,38,0|3an540,56,62,1|3kd2bz,56,62,1|3kd2c0,46,38,0|3td7rz,46,38,0|3td7s0,56,62,1|4334zz,56,62,1|433500,46,38,0|4cg93z,46,38,0|4cg940,56,62,1|4lt7nz,56,62,1|4lt7o0,46,38,0|4v6brz,46,38,0|4v6bs0,56,62,1|54jabz,56,62,1|54jac0,46,38,0|5dwefz,46,38,0|5dweg0,56,62,1|5n9czz,56,62,1|5n9d00,46,38,0|5wmh3z,46,38,0|5wmh40,56,62,1|65zfnz,56,62,1|65zfo0,46,38,0|6fcjrz,46,38,0|6fcjs0,56,62,1|6p2gzz,56,62,1|6p2h00,46,38,0|6y2mfz,46,38,0|6y2mg0,56,62,1|77sjnz,56,62,1|77sjo0,46,38,0|nx4rrz,46,38,0|nx4rs0,36,35,0|o3z57z,36,35,0|o3z580,37,38,1|og7t3z,37,38,1|og7t40,36,35,0|omp7vz,36,35,0|omp7w0,37,38,1|oyxvrz,37,38,1|oyxvs0,36,35,0|p5fajz,36,35,0|p5fak0,37,38,1|phnyfz,37,38,1|phnyg0,46,38,0|plmjrz,46,38,0|plmjs0,36,35,0|po5d7z,36,35,0|po5d80,37,38,1|q0e13z,37,38,1|q0e140,36,35,0|q6vfvz,36,35,0|q6vfw0,37,38,1|qj43rz,37,38,1|qj43s0,36,35,0|qpyh7z,36,35,0|qpyh80,37,38,1|r2753z,37,38,1|r27540,36,35,0|r8ojvz,36,35,0|r8ojw0,37,38,1|rkx7rz,37,38,1|rkx7s0,36,35,0|rremjz,36,35,0|rremk0,37,38,1|s3nafz,37,38,1|s3nag0,36,35,0|sa4p7z,36,35,0|sa4p80,37,38,1|smdd3z,37,38,1|smdd40,36,35,0|ssurvz,36,35,0|ssurw0,37,38,1|t53frz,37,38,1|t53fs0,36,35,0|tbkujz,36,35,0|tbkuk0,37,38,1|tntifz,37,38,1|tntig0,36,35,0|tunvvz,36,35,0|tunvw0,37,38,1|u6wjrz,37,38,1|u6wjs0,36,35,0|uddyjz,36,35,0|uddyk0,37,38,1|upmmfz,37,38,1|upmmg0,36,35,0|uw417z,36,35,0|uw4180,37,38,1|v8cp3z,37,38,1|v8cp40,36,35,0|veu3vz,36,35,0|veu3w0,37,38,1|vr2rrz,37,38,1|vr2rs0,36,35,0|vxk6jz,36,35,0|vxk6k0,37,38,1|w9sufz,37,38,1|w9sug0,36,35,0|wgn7vz,36,35,0|wgn7w0,37,38,1|wsvvrz,37,38,1|wsvvs0,36,35,0|wzdajz,36,35,0|wzdak0,37,38,1|xblyfz,37,38,1|xblyg0,36,35,0|xi3d7z,36,35,0|xi3d80,37,38,1|xuc13z,37,38,1|xuc140,36,35,0|y0tfvz,36,35,0|y0tfw0,37,38,1|yd23rz,37,38,1|yd23s0,36,35,0|yjjijz,36,35,0|yjjik0,37,38,1|yvs6fz,37,38,1|yvs6g0,36,35,0|z29l7z,36,35,0|z29l80,37,38,1|zei93z,37,38,1|zei940,36,35,0|zlcmjz,36,35,0|zlcmk0,37,38,1|zxlafz,37,38,1|zxlag0,36,35,0|1042p7z,36,35,0|1042p80,37,38,1|10gbd3z,37,38,1|10gbd40,36,35,0|10msrvz,36,35,0|10msrw0,37,38,1|10z1frz,37,38,1|10z1fs0,36,35,0|115iujz,36,35,0|115iuk0,37,38,1|11hrifz,37,38,1|11hrig0,36,35,0|11o8x7z,36,35,0|11o8x80,37,38,1|120hl3z,37,38,1|120hl40,36,35,0|126yzvz,36,35,0|126yzw0,37,38,1|12j7nrz,37,38,1|12j7ns0,36,35,0|12q217z,36,35,0|12q2180,37,38,1|132ap3z,37,38,1|132ap40,36,35,0|138s3vz,36,35,0|138s3w0,37,38,1|13l0rrz,37,38,1|13l0rs0,36,35,0|13ri6jz,36,35,0|13ri6k0,37,38,1|143qufz,37,38,1|143qug0,36,35,0|14a897z,36,35,0|14a8980,37,38,1|14mgx3z,37,38,1|14mgx40,36,35,0|14sybvz,36,35,0|14sybw0,37,38,1|1556zrz,37,38,1|1556zs0,36,35,0|15c1d7z,36,35,0|15c1d80,37,38,1|15oa13z,37,38,1|15oa140,36,35,0|15urfvz,36,35,0|15urfw0,37,38,1|16703rz,37,38,1|16703s0,36,35,0|16dhijz,36,35,0|16dhik0,37,38,1|16pq6fz,37,38,1|16pq6g0,36,35,0|16w7l7z,36,35,0|16w7l80,37,38,1|178g93z,37,38,1|178g940,36,35,0|17exnvz,36,35,0|17exnw0,37,38,1|17r6brz,37,38,1|17r6bs0,36,35,0|17xnqjz,36,35,0|17xnqk0,37,38,1|189wefz,37,38,1|189weg0,36,35,0|18gqrvz,36,35,0|18gqrw0,37,38,1|18szfrz,37,38,1|18szfs0,36,35,0|18zgujz,36,35,0|18zguk0,37,38,1|19bpifz,37,38,1|19bpig0,36,35,0|19i6x7z,36,35,0|19i6x80,37,38,1|19ufl3z,37,38,1|19ufl40,36,35,0|1a0wzvz,36,35,0|1a0wzw0,37,38,1|1ad5nrz,37,38,1|1ad5ns0,36,35,0|1ajn2jz,36,35,0|1ajn2k0,37,38,1|1avvqfz,37,38,1|1avvqg0,36,35,0|1b2q3vz,36,35,0|1b2q3w0,37,38,1|1beyrrz,37,38,1|1beyrs0,36,35,0|1blg6jz,36,35,0|1blg6k0,37,38,1|1bxoufz,37,38,1|1bxoug0,36,35,0|1c4697z,36,35,0|1c46980,37,38,1|1cgex3z,37,38,1|1cgex40,36,35,0|1cmwbvz,36,35,0|1cmwbw0,37,38,1|1cz4zrz,37,38,1|1cz4zs0,36,35,0|1d5mejz,36,35,0|1d5mek0,37,38,1|1dhv2fz,37,38,1|1dhv2g0,36,35,0|1doch7z,36,35,0|1doch80,37,38,1|1e0l53z,37,38,1|1e0l540,36,35,0|1e7fijz,36,35,0|1e7fik0,37,38,1|1ejo6fz,37,38,1|1ejo6g0,36,35,0|1eq5l7z,36,35,0|1eq5l80,37,38,1|1f2e93z,37,38,1|1f2e940,36,35,0|1f8vnvz,36,35,0|1f8vnw0,37,38,1|1fl4brz,37,38,1|1fl4bs0,36,35,0|1frlqjz,36,35,0|1frlqk0,37,38,1|1g3uefz,37,38,1|1g3ueg0,36,35,0|1gabt7z,36,35,0|1gabt80,37,38,1|1gmkh3z,37,38,1|1gmkh40,36,35,0|1gt1vvz,36,35,0|1gt1vw0,37,38,1|1h5ajrz,37,38,1|1h5ajs0,36,35,0|1hc4x7z,36,35,0|1hc4x80,37,38,1|1hodl3z,37,38,1|1hodl40,36,35,0|1huuzvz,36,35,0|1huuzw0,37,38,1|1i73nrz,37,38,1|1i73ns0,36,35,0|1idl2jz,36,35,0|1idl2k0,37,38,1|1iptqfz,37,38,1|1iptqg0,36,35,0|1iwb57z,36,35,0|1iwb580,37,38,1|1j8jt3z,37,38,1|1j8jt40,36,35,0|1jf17vz,36,35,0|1jf17w0,37,38,1|1jr9vrz,37,38,1|1jr9vs0,36,35,0|1jy497z,36,35,0|1jy4980,37,38,1|1kacx3z,37,38,1|1kacx40,36,35,0|1kgubvz,36,35,0|1kgubw0,37,38,1|1kt2zrz,37,38,1|1kt2zs0,36,35,0|1kzkejz,36,35,0|1kzkek0,37,38,1|1lbt2fz,37,38,1|1lbt2g0,36,35,0|1liah7z,36,35,0|1liah80,37,38,1|1luj53z,37,38,1|1luj540,36,35,0|1m10jvz,36,35,0|1m10jw0,37,38,1|1md97rz,37,38,1|1md97s0,36,35,0|1mjqmjz,36,35,0|1mjqmk0,37,38,1|1mvzafz,37,38,1|1mvzag0,36,35,0|1n2tnvz,36,35,0|1n2tnw0,37,38,1|1nf2brz,37,38,1|1nf2bs0,36,35,0|1nljqjz,36,35,0|1nljqk0,37,38,1|1nxsefz,37,38,1|1nxseg0,36,35,0|1o49t7z,36,35,0|1o49t80,37,38,1|1ogih3z,37,38,1|1ogih40,36,35,0|1omzvvz,36,35,0|1omzvw0,37,38,1|1oz8jrz,37,38,1|1oz8js0,36,35,0|1p5pyjz,36,35,0|1p5pyk0,37,38,1|1phymfz,37,38,1|1phymg0,36,35,0|1poszvz,36,35,0|1poszw0,37,38,1|1q11nrz,37,38,1|1q11ns0,36,35,0|1q7j2jz,36,35,0|1q7j2k0,37,38,1|1qjrqfz,37,38,1|1qjrqg0,36,35,0|1qq957z,36,35,0|1qq9580,37,38,1|1r2ht3z,37,38,1|1r2ht40,36,35,0|1r8z7vz,36,35,0|1r8z7w0,37,38,1|1rl7vrz,37,38,1|1rl7vs0,36,35,0|1rrpajz,36,35,0|1rrpak0,37,38,1|1s3xyfz,37,38,1|1s3xyg0,36,35,0|1safd7z,36,35,0|1safd80,37,38,1|1smo13z,37,38,1|1smo140,36,35,0|1stiejz,36,35,0|1stiek0,37,38,1|1t5r2fz,37,38,1|1t5r2g0,36,35,0|1tc8h7z,36,35,0|1tc8h80,37,38,1|1toh53z,37,38,1|1toh540,36,35,0|1tuyjvz,36,35,0|1tuyjw0,37,38,1|1u777rz,37,38,1|1u777s0,36,35,0|1udomjz,36,35,0|1udomk0,37,38,1|1upxafz,37,38,1|1upxag0,36,35,0|1uwep7z,36,35,0|1uwep80,37,38,1|1v8nd3z,37,38,1|1v8nd40,36,35,0|1vf4rvz,36,35,0|1vf4rw0,37,38,1|1vrdfrz,37,38,1|1vrdfs0,36,35,0|NaN,36,35,0\",\"America/Mexico_City|,0,137,0|-p1u4k1,0,137,0|-p1u4k0,44,62,0|-m7mko1,44,62,0|-m7mko0,45,63,0|-kf67c1,45,63,0|-kf67c0,44,62,0|-k6j3c1,44,62,0|-k6j3c0,45,63,0|-jypm01,45,63,0|-jypm00,44,62,0|-jpan81,44,62,0|-jpan80,45,63,0|-g4n8o1,45,63,0|-g4n8o0,48,59,1|-fxg241,48,59,1|-fxg240,45,63,0|-f60y01,45,63,0|-f60y00,48,59,1|-f07rg1,48,59,1|-f07rg0,45,63,0|-dlc7c1,45,63,0|-dlc7c0,52,59,1|-deaks1,52,59,1|-deaks0,45,63,0|-adljc1,45,63,0|-adljc0,48,59,1|-a4yi41,48,59,1|-a4yi40,45,63,0|dphfjz,45,63,0|dphfk0,48,59,1|dzxa3z,48,59,1|dzxa40,45,63,0|e87i7z,45,63,0|e87i80,48,59,1|eincrz,48,59,1|eincs0,45,63,0|eqxkvz,45,63,0|eqxkw0,48,59,1|f1dffz,48,59,1|f1dfg0,45,63,0|f9nnjz,45,63,0|f9nnk0,48,59,1|fkggrz,48,59,1|fkggs0,45,63,0|fsdq7z,45,63,0|fsdq80,48,59,1|g36jfz,48,59,1|g36jg0,45,63,0|gcwm7z,45,63,0|gcwm80,48,59,1|gkgrfz,48,59,1|gkgrg0,45,63,0|gu6u7z,45,63,0|gu6u80,48,59,1|h4morz,48,59,1|h4mos0,45,63,0|hcwwvz,45,63,0|hcwww0,48,59,1|hncrfz,48,59,1|hncrg0,45,63,0|hvmzjz,45,63,0|hvmzk0,48,59,1|i6fsrz,48,59,1|i6fss0,45,63,0|ied27z,45,63,0|ied280,48,59,1|ip5vfz,48,59,1|ip5vg0,45,63,0|ix34vz,45,63,0|ix34w0,48,59,1|j7vy3z,48,59,1|j7vy40,45,63,0|jft7jz,45,63,0|jft7k0,48,59,1|jqm0rz,48,59,1|jqm0s0,45,63,0|jyw8vz,45,63,0|jyw8w0,48,59,1|k9c3fz,48,59,1|k9c3g0,45,63,0|khmbjz,45,63,0|khmbk0,48,59,1|ks263z,48,59,1|ks2640,45,63,0|l0ce7z,45,63,0|l0ce80,48,59,1|lb57fz,48,59,1|lb57g0,45,63,0|lj2gvz,45,63,0|lj2gw0,48,59,1|ltva3z,48,59,1|ltva40,45,63,0|m1sjjz,45,63,0|m1sjk0,48,59,1|mclcrz,48,59,1|mclcs0,45,63,0|mkvkvz,45,63,0|mkvkw0,48,59,1|mvbffz,48,59,1|mvbfg0,45,63,0|n3lnjz,45,63,0|n3lnk0,48,59,1|ne1i3z,48,59,1|ne1i40,45,63,0|nmbq7z,45,63,0|nmbq80,48,59,1|nwrkrz,48,59,1|nwrks0,45,63,0|o51svz,45,63,0|o51sw0,48,59,1|ofum3z,48,59,1|ofum40,45,63,0|onrvjz,45,63,0|onrvk0,48,59,1|oykorz,48,59,1|oykos0,45,63,0|p6hy7z,45,63,0|p6hy80,48,59,1|pharfz,48,59,1|pharg0,45,63,0|ppkzjz,45,63,0|ppkzk0,48,59,1|q00u3z,48,59,1|q00u40,45,63,0|q8b27z,45,63,0|q8b280,48,59,1|qiqwrz,48,59,1|qiqws0,45,63,0|qr14vz,45,63,0|qr14w0,48,59,1|r1ty3z,48,59,1|r1ty40,45,63,0|r9r7jz,45,63,0|r9r7k0,48,59,1|rkk0rz,48,59,1|rkk0s0,45,63,0|rsha7z,45,63,0|rsha80,48,59,1|s3a3fz,48,59,1|s3a3g0,45,63,0|sbkbjz,45,63,0|sbkbk0,48,59,1|sm063z,48,59,1|sm0640,45,63,0|suae7z,45,63,0|suae80,48,59,1|t4q8rz,48,59,1|t4q8s0,45,63,0|td0gvz,45,63,0|td0gw0,48,59,1|tngbfz,48,59,1|tngbg0,45,63,0|tvqjjz,45,63,0|tvqjk0,48,59,1|u6jcrz,48,59,1|u6jcs0,45,63,0|uegm7z,45,63,0|uegm80,48,59,1|up9ffz,48,59,1|up9fg0,45,63,0|ux6ovz,45,63,0|ux6ow0,48,59,1|v7zi3z,48,59,1|v7zi40,45,63,0|vg9q7z,45,63,0|vg9q80,48,59,1|vqpkrz,48,59,1|vqpks0,45,63,0|vyzsvz,45,63,0|vyzsw0,48,59,1|w9fnfz,48,59,1|w9fng0,45,63,0|whpvjz,45,63,0|whpvk0,48,59,1|wsiorz,48,59,1|wsios0,45,63,0|x0fy7z,45,63,0|x0fy80,48,59,1|xb8rfz,48,59,1|xb8rg0,45,63,0|xj60vz,45,63,0|xj60w0,48,59,1|xtyu3z,48,59,1|xtyu40,45,63,0|y1w3jz,45,63,0|y1w3k0,48,59,1|ycowrz,48,59,1|ycows0,45,63,0|ykz4vz,45,63,0|ykz4w0,48,59,1|yvezfz,48,59,1|yvezg0,45,63,0|z3p7jz,45,63,0|z3p7k0,48,59,1|ze523z,48,59,1|ze5240,45,63,0|zmfa7z,45,63,0|zmfa80,48,59,1|zx83fz,48,59,1|zx83g0,45,63,0|1055cvz,45,63,0|1055cw0,48,59,1|10fy63z,48,59,1|10fy640,45,63,0|10nvfjz,45,63,0|10nvfk0,48,59,1|10yo8rz,48,59,1|10yo8s0,45,63,0|116ygvz,45,63,0|116ygw0,48,59,1|11hebfz,48,59,1|11hebg0,45,63,0|11pojjz,45,63,0|11pojk0,48,59,1|1204e3z,48,59,1|1204e40,45,63,0|128em7z,45,63,0|128em80,48,59,1|12iugrz,48,59,1|12iugs0,45,63,0|12r4ovz,45,63,0|12r4ow0,48,59,1|131xi3z,48,59,1|131xi40,45,63,0|139urjz,45,63,0|139urk0,48,59,1|13knkrz,48,59,1|13knks0,45,63,0|13sku7z,45,63,0|13sku80,48,59,1|143dnfz,48,59,1|143dng0,45,63,0|14bnvjz,45,63,0|14bnvk0,48,59,1|14m3q3z,48,59,1|14m3q40,45,63,0|14udy7z,45,63,0|14udy80,48,59,1|154tsrz,48,59,1|154tss0,45,63,0|15d40vz,45,63,0|15d40w0,48,59,1|15nwu3z,48,59,1|15nwu40,45,63,0|15vu3jz,45,63,0|15vu3k0,48,59,1|166mwrz,48,59,1|166mws0,45,63,0|16ek67z,45,63,0|16ek680,48,59,1|16pczfz,48,59,1|16pczg0,45,63,0|16xn7jz,45,63,0|16xn7k0,48,59,1|178323z,48,59,1|1783240,45,63,0|17gda7z,45,63,0|17gda80,48,59,1|17qt4rz,48,59,1|17qt4s0,45,63,0|17z3cvz,45,63,0|17z3cw0,48,59,1|189j7fz,48,59,1|189j7g0,45,63,0|18htfjz,45,63,0|18htfk0,48,59,1|18sm8rz,48,59,1|18sm8s0,45,63,0|190ji7z,45,63,0|190ji80,48,59,1|19bcbfz,48,59,1|19bcbg0,45,63,0|19j9kvz,45,63,0|19j9kw0,48,59,1|19u2e3z,48,59,1|19u2e40,45,63,0|1a2cm7z,45,63,0|1a2cm80,48,59,1|1acsgrz,48,59,1|1acsgs0,45,63,0|1al2ovz,45,63,0|1al2ow0,48,59,1|1avijfz,48,59,1|1avijg0,45,63,0|1b3srjz,45,63,0|1b3srk0,48,59,1|1belkrz,48,59,1|1belks0,45,63,0|1bmiu7z,45,63,0|1bmiu80,48,59,1|1bxbnfz,48,59,1|1bxbng0,45,63,0|1c58wvz,45,63,0|1c58ww0,48,59,1|1cg1q3z,48,59,1|1cg1q40,45,63,0|1cnyzjz,45,63,0|1cnyzk0,48,59,1|1cyrsrz,48,59,1|1cyrss0,45,63,0|1d720vz,45,63,0|1d720w0,48,59,1|1dhhvfz,48,59,1|1dhhvg0,45,63,0|1dps3jz,45,63,0|1dps3k0,48,59,1|1e07y3z,48,59,1|1e07y40,45,63,0|1e8i67z,45,63,0|1e8i680,48,59,1|1ejazfz,48,59,1|1ejazg0,45,63,0|1er88vz,45,63,0|1er88w0,48,59,1|1f2123z,48,59,1|1f21240,45,63,0|1f9ybjz,45,63,0|1f9ybk0,48,59,1|1fkr4rz,48,59,1|1fkr4s0,45,63,0|1ft1cvz,45,63,0|1ft1cw0,48,59,1|1g3h7fz,48,59,1|1g3h7g0,45,63,0|1gbrfjz,45,63,0|1gbrfk0,48,59,1|1gm7a3z,48,59,1|1gm7a40,45,63,0|1guhi7z,45,63,0|1guhi80,48,59,1|1h4xcrz,48,59,1|1h4xcs0,45,63,0|1hd7kvz,45,63,0|1hd7kw0,48,59,1|1ho0e3z,48,59,1|1ho0e40,45,63,0|1hvxnjz,45,63,0|1hvxnk0,48,59,1|1i6qgrz,48,59,1|1i6qgs0,45,63,0|1ienq7z,45,63,0|1ienq80,48,59,1|1ipgjfz,48,59,1|1ipgjg0,45,63,0|1ixqrjz,45,63,0|1ixqrk0,48,59,1|1j86m3z,48,59,1|1j86m40,45,63,0|1jggu7z,45,63,0|1jggu80,48,59,1|1jqworz,48,59,1|1jqwos0,45,63,0|1jz6wvz,45,63,0|1jz6ww0,48,59,1|1k9zq3z,48,59,1|1k9zq40,45,63,0|1khwzjz,45,63,0|1khwzk0,48,59,1|1kspsrz,48,59,1|1kspss0,45,63,0|1l0n27z,45,63,0|1l0n280,48,59,1|1lbfvfz,48,59,1|1lbfvg0,45,63,0|1ljq3jz,45,63,0|1ljq3k0,48,59,1|1lu5y3z,48,59,1|1lu5y40,45,63,0|1m2g67z,45,63,0|1m2g680,48,59,1|1mcw0rz,48,59,1|1mcw0s0,45,63,0|1ml68vz,45,63,0|1ml68w0,48,59,1|1mvm3fz,48,59,1|1mvm3g0,45,63,0|1n3wbjz,45,63,0|1n3wbk0,48,59,1|1nep4rz,48,59,1|1nep4s0,45,63,0|1nmme7z,45,63,0|1nmme80,48,59,1|1nxf7fz,48,59,1|1nxf7g0,45,63,0|1o5cgvz,45,63,0|1o5cgw0,48,59,1|1og5a3z,48,59,1|1og5a40,45,63,0|1oofi7z,45,63,0|1oofi80,48,59,1|1oyvcrz,48,59,1|1oyvcs0,45,63,0|1p75kvz,45,63,0|1p75kw0,48,59,1|1phlffz,48,59,1|1phlfg0,45,63,0|1ppvnjz,45,63,0|1ppvnk0,48,59,1|1q0ogrz,48,59,1|1q0ogs0,45,63,0|1q8lq7z,45,63,0|1q8lq80,48,59,1|1qjejfz,48,59,1|1qjejg0,45,63,0|1qrbsvz,45,63,0|1qrbsw0,48,59,1|1r24m3z,48,59,1|1r24m40,45,63,0|1ra1vjz,45,63,0|1ra1vk0,48,59,1|1rkuorz,48,59,1|1rkuos0,45,63,0|1rt4wvz,45,63,0|1rt4ww0,48,59,1|1s3krfz,48,59,1|1s3krg0,45,63,0|1sbuzjz,45,63,0|1sbuzk0,48,59,1|1smau3z,48,59,1|1smau40,45,63,0|1sul27z,45,63,0|1sul280,48,59,1|1t5dvfz,48,59,1|1t5dvg0,45,63,0|1tdb4vz,45,63,0|1tdb4w0,48,59,1|1to3y3z,48,59,1|1to3y40,45,63,0|1tw17jz,45,63,0|1tw17k0,48,59,1|1u6u0rz,48,59,1|1u6u0s0,45,63,0|1uf48vz,45,63,0|1uf48w0,48,59,1|1upk3fz,48,59,1|1upk3g0,45,63,0|1uxubjz,45,63,0|1uxubk0,48,59,1|1v8a63z,48,59,1|1v8a640,45,63,0|1vgke7z,45,63,0|1vgke80,48,59,1|1vr08rz,48,59,1|1vr08s0,45,63,0|NaN,45,63,0\",\"America/Miquelon|,0,138,0|-ulmyxl,0,138,0|-ulmyxk,31,40,0|5e3cfz,31,40,0|5e3cg0,38,41,0|908lvz,38,41,0|908lw0,39,43,1|9aogfz,39,43,1|9aogg0,38,41,0|9iyojz,38,41,0|9iyok0,39,43,1|9trhrz,39,43,1|9trhs0,38,41,0|a1or7z,38,41,0|a1or80,39,43,1|achkfz,39,43,1|achkg0,38,41,0|aketvz,38,41,0|aketw0,39,43,1|av7n3z,39,43,1|av7n40,38,41,0|b3hv7z,38,41,0|b3hv80,39,43,1|bdxprz,39,43,1|bdxps0,38,41,0|bm7xvz,38,41,0|bm7xw0,39,43,1|bwnsfz,39,43,1|bwnsg0,38,41,0|c4y0jz,38,41,0|c4y0k0,39,43,1|cfqtrz,39,43,1|cfqts0,38,41,0|cno37z,38,41,0|cno380,39,43,1|cygwfz,39,43,1|cygwg0,38,41,0|d6e5vz,38,41,0|d6e5w0,39,43,1|dh6z3z,39,43,1|dh6z40,38,41,0|dph77z,38,41,0|dph780,39,43,1|dzx1rz,39,43,1|dzx1s0,38,41,0|e879vz,38,41,0|e879w0,39,43,1|ein4fz,39,43,1|ein4g0,38,41,0|eqxcjz,38,41,0|eqxck0,39,43,1|f1d73z,39,43,1|f1d740,38,41,0|f9nf7z,38,41,0|f9nf80,39,43,1|fkg8fz,39,43,1|fkg8g0,38,41,0|fsdhvz,38,41,0|fsdhw0,39,43,1|g36b3z,39,43,1|g36b40,38,41,0|gb3kjz,38,41,0|gb3kk0,39,43,1|glwdrz,39,43,1|glwds0,38,41,0|gu6lvz,38,41,0|gu6lw0,39,43,1|h4mgfz,39,43,1|h4mgg0,38,41,0|hcwojz,38,41,0|hcwok0,39,43,1|hncj3z,39,43,1|hncj40,38,41,0|hvmr7z,38,41,0|hvmr80,39,43,1|i6fkfz,39,43,1|i6fkg0,38,41,0|iectvz,38,41,0|iectw0,39,43,1|ip5n3z,39,43,1|ip5n40,38,41,0|ix2wjz,38,41,0|ix2wk0,39,43,1|j7vprz,39,43,1|j7vps0,38,41,0|jeq37z,38,41,0|jeq380,39,43,1|jqyr3z,39,43,1|jqyr40,38,41,0|jxg5vz,38,41,0|jxg5w0,39,43,1|k9otrz,39,43,1|k9ots0,38,41,0|kg68jz,38,41,0|kg68k0,39,43,1|ksewfz,39,43,1|ksewg0,38,41,0|kz99vz,38,41,0|kz99w0,39,43,1|lbhxrz,39,43,1|lbhxs0,38,41,0|lhzcjz,38,41,0|lhzck0,39,43,1|lu80fz,39,43,1|lu80g0,38,41,0|m0pf7z,38,41,0|m0pf80,39,43,1|mcy33z,39,43,1|mcy340,38,41,0|mjfhvz,38,41,0|mjfhw0,39,43,1|mvo5rz,39,43,1|mvo5s0,38,41,0|n25kjz,38,41,0|n25kk0,39,43,1|nee8fz,39,43,1|nee8g0,38,41,0|nkvn7z,38,41,0|nkvn80,39,43,1|nx4b3z,39,43,1|nx4b40,38,41,0|o3yojz,38,41,0|o3yok0,39,43,1|og7cfz,39,43,1|og7cg0,38,41,0|omor7z,38,41,0|omor80,39,43,1|oyxf3z,39,43,1|oyxf40,38,41,0|p5etvz,38,41,0|p5etw0,39,43,1|phnhrz,39,43,1|phnhs0,38,41,0|po4wjz,38,41,0|po4wk0,39,43,1|q0dkfz,39,43,1|q0dkg0,38,41,0|q6uz7z,38,41,0|q6uz80,39,43,1|qj3n3z,39,43,1|qj3n40,38,41,0|qpy0jz,38,41,0|qpy0k0,39,43,1|r26ofz,39,43,1|r26og0,38,41,0|r8o37z,38,41,0|r8o380,39,43,1|rkwr3z,39,43,1|rkwr40,38,41,0|rre5vz,38,41,0|rre5w0,39,43,1|s3mtrz,39,43,1|s3mts0,38,41,0|sa48jz,38,41,0|sa48k0,39,43,1|smcwfz,39,43,1|smcwg0,38,41,0|ssub7z,38,41,0|ssub80,39,43,1|t52z3z,39,43,1|t52z40,38,41,0|tbkdvz,38,41,0|tbkdw0,39,43,1|tnt1rz,39,43,1|tnt1s0,38,41,0|tunf7z,38,41,0|tunf80,39,43,1|u6w33z,39,43,1|u6w340,38,41,0|uddhvz,38,41,0|uddhw0,39,43,1|upm5rz,39,43,1|upm5s0,38,41,0|uw3kjz,38,41,0|uw3kk0,39,43,1|v8c8fz,39,43,1|v8c8g0,38,41,0|vetn7z,38,41,0|vetn80,39,43,1|vr2b3z,39,43,1|vr2b40,38,41,0|vxjpvz,38,41,0|vxjpw0,39,43,1|w9sdrz,39,43,1|w9sds0,38,41,0|wgmr7z,38,41,0|wgmr80,39,43,1|wsvf3z,39,43,1|wsvf40,38,41,0|wzctvz,38,41,0|wzctw0,39,43,1|xblhrz,39,43,1|xblhs0,38,41,0|xi2wjz,38,41,0|xi2wk0,39,43,1|xubkfz,39,43,1|xubkg0,38,41,0|y0sz7z,38,41,0|y0sz80,39,43,1|yd1n3z,39,43,1|yd1n40,38,41,0|yjj1vz,38,41,0|yjj1w0,39,43,1|yvrprz,39,43,1|yvrps0,38,41,0|z294jz,38,41,0|z294k0,39,43,1|zehsfz,39,43,1|zehsg0,38,41,0|zlc5vz,38,41,0|zlc5w0,39,43,1|zxktrz,39,43,1|zxkts0,38,41,0|10428jz,38,41,0|10428k0,39,43,1|10gawfz,39,43,1|10gawg0,38,41,0|10msb7z,38,41,0|10msb80,39,43,1|10z0z3z,39,43,1|10z0z40,38,41,0|115idvz,38,41,0|115idw0,39,43,1|11hr1rz,39,43,1|11hr1s0,38,41,0|11o8gjz,38,41,0|11o8gk0,39,43,1|120h4fz,39,43,1|120h4g0,38,41,0|126yj7z,38,41,0|126yj80,39,43,1|12j773z,39,43,1|12j7740,38,41,0|12q1kjz,38,41,0|12q1kk0,39,43,1|132a8fz,39,43,1|132a8g0,38,41,0|138rn7z,38,41,0|138rn80,39,43,1|13l0b3z,39,43,1|13l0b40,38,41,0|13rhpvz,38,41,0|13rhpw0,39,43,1|143qdrz,39,43,1|143qds0,38,41,0|14a7sjz,38,41,0|14a7sk0,39,43,1|14mggfz,39,43,1|14mggg0,38,41,0|14sxv7z,38,41,0|14sxv80,39,43,1|1556j3z,39,43,1|1556j40,38,41,0|15c0wjz,38,41,0|15c0wk0,39,43,1|15o9kfz,39,43,1|15o9kg0,38,41,0|15uqz7z,38,41,0|15uqz80,39,43,1|166zn3z,39,43,1|166zn40,38,41,0|16dh1vz,38,41,0|16dh1w0,39,43,1|16ppprz,39,43,1|16ppps0,38,41,0|16w74jz,38,41,0|16w74k0,39,43,1|178fsfz,39,43,1|178fsg0,38,41,0|17ex77z,38,41,0|17ex780,39,43,1|17r5v3z,39,43,1|17r5v40,38,41,0|17xn9vz,38,41,0|17xn9w0,39,43,1|189vxrz,39,43,1|189vxs0,38,41,0|18gqb7z,38,41,0|18gqb80,39,43,1|18syz3z,39,43,1|18syz40,38,41,0|18zgdvz,38,41,0|18zgdw0,39,43,1|19bp1rz,39,43,1|19bp1s0,38,41,0|19i6gjz,38,41,0|19i6gk0,39,43,1|19uf4fz,39,43,1|19uf4g0,38,41,0|1a0wj7z,38,41,0|1a0wj80,39,43,1|1ad573z,39,43,1|1ad5740,38,41,0|1ajmlvz,38,41,0|1ajmlw0,39,43,1|1avv9rz,39,43,1|1avv9s0,38,41,0|1b2pn7z,38,41,0|1b2pn80,39,43,1|1beyb3z,39,43,1|1beyb40,38,41,0|1blfpvz,38,41,0|1blfpw0,39,43,1|1bxodrz,39,43,1|1bxods0,38,41,0|1c45sjz,38,41,0|1c45sk0,39,43,1|1cgegfz,39,43,1|1cgegg0,38,41,0|1cmvv7z,38,41,0|1cmvv80,39,43,1|1cz4j3z,39,43,1|1cz4j40,38,41,0|1d5lxvz,38,41,0|1d5lxw0,39,43,1|1dhulrz,39,43,1|1dhuls0,38,41,0|1doc0jz,38,41,0|1doc0k0,39,43,1|1e0kofz,39,43,1|1e0kog0,38,41,0|1e7f1vz,38,41,0|1e7f1w0,39,43,1|1ejnprz,39,43,1|1ejnps0,38,41,0|1eq54jz,38,41,0|1eq54k0,39,43,1|1f2dsfz,39,43,1|1f2dsg0,38,41,0|1f8v77z,38,41,0|1f8v780,39,43,1|1fl3v3z,39,43,1|1fl3v40,38,41,0|1frl9vz,38,41,0|1frl9w0,39,43,1|1g3txrz,39,43,1|1g3txs0,38,41,0|1gabcjz,38,41,0|1gabck0,39,43,1|1gmk0fz,39,43,1|1gmk0g0,38,41,0|1gt1f7z,38,41,0|1gt1f80,39,43,1|1h5a33z,39,43,1|1h5a340,38,41,0|1hc4gjz,38,41,0|1hc4gk0,39,43,1|1hod4fz,39,43,1|1hod4g0,38,41,0|1huuj7z,38,41,0|1huuj80,39,43,1|1i7373z,39,43,1|1i73740,38,41,0|1idklvz,38,41,0|1idklw0,39,43,1|1ipt9rz,39,43,1|1ipt9s0,38,41,0|1iwaojz,38,41,0|1iwaok0,39,43,1|1j8jcfz,39,43,1|1j8jcg0,38,41,0|1jf0r7z,38,41,0|1jf0r80,39,43,1|1jr9f3z,39,43,1|1jr9f40,38,41,0|1jy3sjz,38,41,0|1jy3sk0,39,43,1|1kacgfz,39,43,1|1kacgg0,38,41,0|1kgtv7z,38,41,0|1kgtv80,39,43,1|1kt2j3z,39,43,1|1kt2j40,38,41,0|1kzjxvz,38,41,0|1kzjxw0,39,43,1|1lbslrz,39,43,1|1lbsls0,38,41,0|1lia0jz,38,41,0|1lia0k0,39,43,1|1luiofz,39,43,1|1luiog0,38,41,0|1m1037z,38,41,0|1m10380,39,43,1|1md8r3z,39,43,1|1md8r40,38,41,0|1mjq5vz,38,41,0|1mjq5w0,39,43,1|1mvytrz,39,43,1|1mvyts0,38,41,0|1n2t77z,38,41,0|1n2t780,39,43,1|1nf1v3z,39,43,1|1nf1v40,38,41,0|1nlj9vz,38,41,0|1nlj9w0,39,43,1|1nxrxrz,39,43,1|1nxrxs0,38,41,0|1o49cjz,38,41,0|1o49ck0,39,43,1|1ogi0fz,39,43,1|1ogi0g0,38,41,0|1omzf7z,38,41,0|1omzf80,39,43,1|1oz833z,39,43,1|1oz8340,38,41,0|1p5phvz,38,41,0|1p5phw0,39,43,1|1phy5rz,39,43,1|1phy5s0,38,41,0|1posj7z,38,41,0|1posj80,39,43,1|1q1173z,39,43,1|1q11740,38,41,0|1q7ilvz,38,41,0|1q7ilw0,39,43,1|1qjr9rz,39,43,1|1qjr9s0,38,41,0|1qq8ojz,38,41,0|1qq8ok0,39,43,1|1r2hcfz,39,43,1|1r2hcg0,38,41,0|1r8yr7z,38,41,0|1r8yr80,39,43,1|1rl7f3z,39,43,1|1rl7f40,38,41,0|1rrotvz,38,41,0|1rrotw0,39,43,1|1s3xhrz,39,43,1|1s3xhs0,38,41,0|1saewjz,38,41,0|1saewk0,39,43,1|1smnkfz,39,43,1|1smnkg0,38,41,0|1sthxvz,38,41,0|1sthxw0,39,43,1|1t5qlrz,39,43,1|1t5qls0,38,41,0|1tc80jz,38,41,0|1tc80k0,39,43,1|1togofz,39,43,1|1togog0,38,41,0|1tuy37z,38,41,0|1tuy380,39,43,1|1u76r3z,39,43,1|1u76r40,38,41,0|1udo5vz,38,41,0|1udo5w0,39,43,1|1upwtrz,39,43,1|1upwts0,38,41,0|1uwe8jz,38,41,0|1uwe8k0,39,43,1|1v8mwfz,39,43,1|1v8mwg0,38,41,0|1vf4b7z,38,41,0|1vf4b80,39,43,1|1vrcz3z,39,43,1|1vrcz40,38,41,0|NaN,38,41,0\",\"America/Moncton|,0,139,0|-18wys05,0,139,0|-18wys04,43,59,0|-z94i41,43,59,0|-z94i40,31,40,0|-qzp0o1,31,40,0|-qzp0o0,49,41,1|-qpm4s1,49,41,1|-qpm4s0,31,40,0|-j2ve41,31,40,0|-j2ve40,49,41,1|-iy6y81,49,41,1|-iy6y80,31,40,0|-ik5bg1,31,40,0|-ik5bg0,49,41,1|-ifgvk1,49,41,1|-ifgvk0,31,40,0|-i1f8s1,31,40,0|-i1f8s0,49,41,1|-hwqsw1,49,41,1|-hwqsw0,31,40,0|-hip641,31,40,0|-hip640,49,41,1|-he0q81,49,41,1|-he0q80,31,40,0|-gzz3g1,31,40,0|-gzz3g0,49,41,1|-gvank1,49,41,1|-gvank0,31,40,0|-gh90s1,31,40,0|-gh90s0,49,41,1|-gckkw1,49,41,1|-gckkw0,31,40,0|-fyxrg1,31,40,0|-fyxrg0,49,41,1|-fstgw1,49,41,1|-fstgw0,31,40,0|-fgiss1,31,40,0|-fgiss0,49,41,1|-fa3e81,49,41,1|-fa3e80,31,40,0|-eying1,31,40,0|-eying0,49,41,1|-er0cw1,49,41,1|-er0cw0,31,40,0|-ek27c1,31,40,0|-ek27c0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|-ccw7c1,31,40,0|-ccw7c0,49,41,1|-c4z3g1,49,41,1|-c4z3g0,31,40,0|-bu64o1,31,40,0|-bu64o0,49,41,1|-bm90s1,49,41,1|-bm90s0,31,40,0|-bbg201,31,40,0|-bbg200,49,41,1|-b3iy41,49,41,1|-b3iy40,31,40,0|-aspzc1,31,40,0|-aspzc0,49,41,1|-aksvg1,49,41,1|-aksvg0,31,40,0|-a9my01,31,40,0|-a9my00,49,41,1|-a22ss1,49,41,1|-a22ss0,31,40,0|-9qwvc1,31,40,0|-9qwvc0,49,41,1|-9izrg1,49,41,1|-9izrg0,31,40,0|-986so1,31,40,0|-986so0,49,41,1|-909os1,49,41,1|-909os0,31,40,0|-8pgq01,31,40,0|-8pgq00,49,41,1|-8hjm41,49,41,1|-8hjm40,31,40,0|-86qnc1,31,40,0|-86qnc0,49,41,1|-7ytjg1,49,41,1|-7ytjg0,31,40,0|-7o0ko1,31,40,0|-7o0ko0,49,41,1|-7g3gs1,49,41,1|-7g3gs0,31,40,0|-74xjc1,31,40,0|-74xjc0,49,41,1|-6x0fg1,49,41,1|-6x0fg0,31,40,0|-6m7go1,31,40,0|-6m7go0,49,41,1|-6cui41,49,41,1|-6cui40,31,40,0|-63he01,31,40,0|-63he00,49,41,1|-5u4fg1,49,41,1|-5u4fg0,31,40,0|-5krbc1,31,40,0|-5krbc0,49,41,1|-5becs1,49,41,1|-5becs0,31,40,0|-5218o1,31,40,0|-5218o0,49,41,1|-4sbbg1,49,41,1|-4sbbg0,31,40,0|-4iy7c1,31,40,0|-4iy7c0,49,41,1|-49l8s1,49,41,1|-49l8s0,31,40,0|-4084o1,31,40,0|-4084o0,49,41,1|-3qv641,49,41,1|-3qv640,31,40,0|-3hi201,31,40,0|-3hi200,49,41,1|-3853g1,49,41,1|-3853g0,31,40,0|-2yrzc1,31,40,0|-2yrzc0,49,41,1|-2pf0s1,49,41,1|-2pf0s0,31,40,0|-2g1wo1,31,40,0|-2g1wo0,49,41,1|-26bzg1,49,41,1|-26bzg0,31,40,0|-1xbu01,31,40,0|-1xbu00,49,41,1|-1nlws1,49,41,1|-1nlws0,31,40,0|-1e8so1,31,40,0|-1e8so0,49,41,1|-14vu41,49,41,1|-14vu40,31,40,0|-viq01,31,40,0|-viq00,49,41,1|-m5rg1,49,41,1|-m5rg0,31,40,0|-csnc1,31,40,0|-csnc0,49,41,1|-3fos1,49,41,1|-3fos0,31,40,0|5xfbz,31,40,0|5xfc0,49,41,1|fadvz,49,41,1|fadw0,31,40,0|onhzz,31,40,0|oni00,49,41,1|ydf7z,49,41,1|ydf80,31,40,0|17qjbz,31,40,0|17qjc0,49,41,1|1h3hvz,49,41,1|1h3hw0,31,40,0|296onz,31,40,0|296oo0,49,41,1|2ijn7z,49,41,1|2ijn80,31,40,0|2rwrbz,31,40,0|2rwrc0,49,41,1|319pvz,49,41,1|319pw0,31,40,0|3amtzz,31,40,0|3amu00,49,41,1|3kcr7z,49,41,1|3kcr80,31,40,0|3tcwnz,31,40,0|3tcwo0,49,41,1|432tvz,49,41,1|432tw0,31,40,0|4cfxzz,31,40,0|4cfy00,49,41,1|4lswjz,49,41,1|4lswk0,31,40,0|4v60nz,31,40,0|4v60o0,49,41,1|54iz7z,49,41,1|54iz80,31,40,0|5dw3bz,31,40,0|5dw3c0,49,41,1|5n91vz,49,41,1|5n91w0,31,40,0|5wm5zz,31,40,0|5wm600,49,41,1|65z4jz,49,41,1|65z4k0,31,40,0|6fc8nz,31,40,0|6fc8o0,49,41,1|6p25vz,49,41,1|6p25w0,31,40,0|6y2bbz,31,40,0|6y2bc0,49,41,1|77s8jz,49,41,1|77s8k0,31,40,0|7h5cnz,31,40,0|7h5co0,49,41,1|7qib7z,49,41,1|7qib80,31,40,0|7zvfbz,31,40,0|7zvfc0,49,41,1|898dvz,49,41,1|898dw0,31,40,0|8ilhzz,31,40,0|8ili00,49,41,1|8rygjz,49,41,1|8rygk0,31,40,0|908onz,31,40,0|908oo0,49,41,1|9aoj7z,49,41,1|9aoj80,31,40,0|9iyrbz,31,40,0|9iyrc0,49,41,1|9trkjz,49,41,1|9trkk0,31,40,0|a1otzz,31,40,0|a1ou00,49,41,1|achn7z,49,41,1|achn80,31,40,0|akewnz,31,40,0|akewo0,49,41,1|av7pvz,49,41,1|av7pw0,31,40,0|b3hxzz,31,40,0|b3hy00,49,41,1|bdxsjz,49,41,1|bdxsk0,31,40,0|bm80nz,31,40,0|bm80o0,49,41,1|bwnv7z,49,41,1|bwnv80,31,40,0|c4xxtn,31,40,0|c4xxto,49,41,1|cfqr1n,49,41,1|cfqr1o,31,40,0|cno0hn,31,40,0|cno0ho,49,41,1|cygtpn,49,41,1|cygtpo,31,40,0|d6e35n,31,40,0|d6e35o,49,41,1|dh6wdn,49,41,1|dh6wdo,31,40,0|dph4hn,31,40,0|dph4ho,49,41,1|dzwz1n,49,41,1|dzwz1o,31,40,0|e8775n,31,40,0|e8775o,49,41,1|ein1pn,49,41,1|ein1po,31,40,0|eqx9tn,31,40,0|eqx9to,49,41,1|f1d4dn,49,41,1|f1d4do,31,40,0|f9nchn,31,40,0|f9ncho,49,41,1|fkg5pn,49,41,1|fkg5po,31,40,0|fsdf5n,31,40,0|fsdf5o,49,41,1|g368dn,49,41,1|g368do,31,40,0|gb3htn,31,40,0|gb3hto,49,41,1|glwb1n,49,41,1|glwb1o,31,40,0|gu6j5n,31,40,0|gu6j5o,49,41,1|h4mdpn,49,41,1|h4mdpo,31,40,0|hcwltn,31,40,0|hcwlto,49,41,1|hncgdn,49,41,1|hncgdo,31,40,0|hvmohn,31,40,0|hvmoho,49,41,1|i6fhpn,49,41,1|i6fhpo,31,40,0|iecr5n,31,40,0|iecr5o,49,41,1|ip5kdn,49,41,1|ip5kdo,31,40,0|ix2ttn,31,40,0|ix2tto,49,41,1|j7vn1n,49,41,1|j7vn1o,31,40,0|jeq5zz,31,40,0|jeq600,49,41,1|jqytvz,49,41,1|jqytw0,31,40,0|jxg8nz,31,40,0|jxg8o0,49,41,1|k9owjz,49,41,1|k9owk0,31,40,0|kg6bbz,31,40,0|kg6bc0,49,41,1|ksez7z,49,41,1|ksez80,31,40,0|kz9cnz,31,40,0|kz9co0,49,41,1|lbi0jz,49,41,1|lbi0k0,31,40,0|lhzfbz,31,40,0|lhzfc0,49,41,1|lu837z,49,41,1|lu8380,31,40,0|m0phzz,31,40,0|m0pi00,49,41,1|mcy5vz,49,41,1|mcy5w0,31,40,0|mjfknz,31,40,0|mjfko0,49,41,1|mvo8jz,49,41,1|mvo8k0,31,40,0|n25nbz,31,40,0|n25nc0,49,41,1|neeb7z,49,41,1|neeb80,31,40,0|nkvpzz,31,40,0|nkvq00,49,41,1|nx4dvz,49,41,1|nx4dw0,31,40,0|o3yrbz,31,40,0|o3yrc0,49,41,1|og7f7z,49,41,1|og7f80,31,40,0|omotzz,31,40,0|omou00,49,41,1|oyxhvz,49,41,1|oyxhw0,31,40,0|p5ewnz,31,40,0|p5ewo0,49,41,1|phnkjz,49,41,1|phnkk0,31,40,0|po4zbz,31,40,0|po4zc0,49,41,1|q0dn7z,49,41,1|q0dn80,31,40,0|q6v1zz,31,40,0|q6v200,49,41,1|qj3pvz,49,41,1|qj3pw0,31,40,0|qpy3bz,31,40,0|qpy3c0,49,41,1|r26r7z,49,41,1|r26r80,31,40,0|r8o5zz,31,40,0|r8o600,49,41,1|rkwtvz,49,41,1|rkwtw0,31,40,0|rre8nz,31,40,0|rre8o0,49,41,1|s3mwjz,49,41,1|s3mwk0,31,40,0|sa4bbz,31,40,0|sa4bc0,49,41,1|smcz7z,49,41,1|smcz80,31,40,0|ssudzz,31,40,0|ssue00,49,41,1|t531vz,49,41,1|t531w0,31,40,0|tbkgnz,31,40,0|tbkgo0,49,41,1|tnt4jz,49,41,1|tnt4k0,31,40,0|tunhzz,31,40,0|tuni00,49,41,1|u6w5vz,49,41,1|u6w5w0,31,40,0|uddknz,31,40,0|uddko0,49,41,1|upm8jz,49,41,1|upm8k0,31,40,0|uw3nbz,31,40,0|uw3nc0,49,41,1|v8cb7z,49,41,1|v8cb80,31,40,0|vetpzz,31,40,0|vetq00,49,41,1|vr2dvz,49,41,1|vr2dw0,31,40,0|vxjsnz,31,40,0|vxjso0,49,41,1|w9sgjz,49,41,1|w9sgk0,31,40,0|wgmtzz,31,40,0|wgmu00,49,41,1|wsvhvz,49,41,1|wsvhw0,31,40,0|wzcwnz,31,40,0|wzcwo0,49,41,1|xblkjz,49,41,1|xblkk0,31,40,0|xi2zbz,31,40,0|xi2zc0,49,41,1|xubn7z,49,41,1|xubn80,31,40,0|y0t1zz,31,40,0|y0t200,49,41,1|yd1pvz,49,41,1|yd1pw0,31,40,0|yjj4nz,31,40,0|yjj4o0,49,41,1|yvrsjz,49,41,1|yvrsk0,31,40,0|z297bz,31,40,0|z297c0,49,41,1|zehv7z,49,41,1|zehv80,31,40,0|zlc8nz,31,40,0|zlc8o0,49,41,1|zxkwjz,49,41,1|zxkwk0,31,40,0|1042bbz,31,40,0|1042bc0,49,41,1|10gaz7z,49,41,1|10gaz80,31,40,0|10msdzz,31,40,0|10mse00,49,41,1|10z11vz,49,41,1|10z11w0,31,40,0|115ignz,31,40,0|115igo0,49,41,1|11hr4jz,49,41,1|11hr4k0,31,40,0|11o8jbz,31,40,0|11o8jc0,49,41,1|120h77z,49,41,1|120h780,31,40,0|126ylzz,31,40,0|126ym00,49,41,1|12j79vz,49,41,1|12j79w0,31,40,0|12q1nbz,31,40,0|12q1nc0,49,41,1|132ab7z,49,41,1|132ab80,31,40,0|138rpzz,31,40,0|138rq00,49,41,1|13l0dvz,49,41,1|13l0dw0,31,40,0|13rhsnz,31,40,0|13rhso0,49,41,1|143qgjz,49,41,1|143qgk0,31,40,0|14a7vbz,31,40,0|14a7vc0,49,41,1|14mgj7z,49,41,1|14mgj80,31,40,0|14sxxzz,31,40,0|14sxy00,49,41,1|1556lvz,49,41,1|1556lw0,31,40,0|15c0zbz,31,40,0|15c0zc0,49,41,1|15o9n7z,49,41,1|15o9n80,31,40,0|15ur1zz,31,40,0|15ur200,49,41,1|166zpvz,49,41,1|166zpw0,31,40,0|16dh4nz,31,40,0|16dh4o0,49,41,1|16ppsjz,49,41,1|16ppsk0,31,40,0|16w77bz,31,40,0|16w77c0,49,41,1|178fv7z,49,41,1|178fv80,31,40,0|17ex9zz,31,40,0|17exa00,49,41,1|17r5xvz,49,41,1|17r5xw0,31,40,0|17xncnz,31,40,0|17xnco0,49,41,1|189w0jz,49,41,1|189w0k0,31,40,0|18gqdzz,31,40,0|18gqe00,49,41,1|18sz1vz,49,41,1|18sz1w0,31,40,0|18zggnz,31,40,0|18zggo0,49,41,1|19bp4jz,49,41,1|19bp4k0,31,40,0|19i6jbz,31,40,0|19i6jc0,49,41,1|19uf77z,49,41,1|19uf780,31,40,0|1a0wlzz,31,40,0|1a0wm00,49,41,1|1ad59vz,49,41,1|1ad59w0,31,40,0|1ajmonz,31,40,0|1ajmoo0,49,41,1|1avvcjz,49,41,1|1avvck0,31,40,0|1b2ppzz,31,40,0|1b2pq00,49,41,1|1beydvz,49,41,1|1beydw0,31,40,0|1blfsnz,31,40,0|1blfso0,49,41,1|1bxogjz,49,41,1|1bxogk0,31,40,0|1c45vbz,31,40,0|1c45vc0,49,41,1|1cgej7z,49,41,1|1cgej80,31,40,0|1cmvxzz,31,40,0|1cmvy00,49,41,1|1cz4lvz,49,41,1|1cz4lw0,31,40,0|1d5m0nz,31,40,0|1d5m0o0,49,41,1|1dhuojz,49,41,1|1dhuok0,31,40,0|1doc3bz,31,40,0|1doc3c0,49,41,1|1e0kr7z,49,41,1|1e0kr80,31,40,0|1e7f4nz,31,40,0|1e7f4o0,49,41,1|1ejnsjz,49,41,1|1ejnsk0,31,40,0|1eq57bz,31,40,0|1eq57c0,49,41,1|1f2dv7z,49,41,1|1f2dv80,31,40,0|1f8v9zz,31,40,0|1f8va00,49,41,1|1fl3xvz,49,41,1|1fl3xw0,31,40,0|1frlcnz,31,40,0|1frlco0,49,41,1|1g3u0jz,49,41,1|1g3u0k0,31,40,0|1gabfbz,31,40,0|1gabfc0,49,41,1|1gmk37z,49,41,1|1gmk380,31,40,0|1gt1hzz,31,40,0|1gt1i00,49,41,1|1h5a5vz,49,41,1|1h5a5w0,31,40,0|1hc4jbz,31,40,0|1hc4jc0,49,41,1|1hod77z,49,41,1|1hod780,31,40,0|1huulzz,31,40,0|1huum00,49,41,1|1i739vz,49,41,1|1i739w0,31,40,0|1idkonz,31,40,0|1idkoo0,49,41,1|1iptcjz,49,41,1|1iptck0,31,40,0|1iwarbz,31,40,0|1iwarc0,49,41,1|1j8jf7z,49,41,1|1j8jf80,31,40,0|1jf0tzz,31,40,0|1jf0u00,49,41,1|1jr9hvz,49,41,1|1jr9hw0,31,40,0|1jy3vbz,31,40,0|1jy3vc0,49,41,1|1kacj7z,49,41,1|1kacj80,31,40,0|1kgtxzz,31,40,0|1kgty00,49,41,1|1kt2lvz,49,41,1|1kt2lw0,31,40,0|1kzk0nz,31,40,0|1kzk0o0,49,41,1|1lbsojz,49,41,1|1lbsok0,31,40,0|1lia3bz,31,40,0|1lia3c0,49,41,1|1luir7z,49,41,1|1luir80,31,40,0|1m105zz,31,40,0|1m10600,49,41,1|1md8tvz,49,41,1|1md8tw0,31,40,0|1mjq8nz,31,40,0|1mjq8o0,49,41,1|1mvywjz,49,41,1|1mvywk0,31,40,0|1n2t9zz,31,40,0|1n2ta00,49,41,1|1nf1xvz,49,41,1|1nf1xw0,31,40,0|1nljcnz,31,40,0|1nljco0,49,41,1|1nxs0jz,49,41,1|1nxs0k0,31,40,0|1o49fbz,31,40,0|1o49fc0,49,41,1|1ogi37z,49,41,1|1ogi380,31,40,0|1omzhzz,31,40,0|1omzi00,49,41,1|1oz85vz,49,41,1|1oz85w0,31,40,0|1p5pknz,31,40,0|1p5pko0,49,41,1|1phy8jz,49,41,1|1phy8k0,31,40,0|1poslzz,31,40,0|1posm00,49,41,1|1q119vz,49,41,1|1q119w0,31,40,0|1q7ionz,31,40,0|1q7ioo0,49,41,1|1qjrcjz,49,41,1|1qjrck0,31,40,0|1qq8rbz,31,40,0|1qq8rc0,49,41,1|1r2hf7z,49,41,1|1r2hf80,31,40,0|1r8ytzz,31,40,0|1r8yu00,49,41,1|1rl7hvz,49,41,1|1rl7hw0,31,40,0|1rrownz,31,40,0|1rrowo0,49,41,1|1s3xkjz,49,41,1|1s3xkk0,31,40,0|1saezbz,31,40,0|1saezc0,49,41,1|1smnn7z,49,41,1|1smnn80,31,40,0|1sti0nz,31,40,0|1sti0o0,49,41,1|1t5qojz,49,41,1|1t5qok0,31,40,0|1tc83bz,31,40,0|1tc83c0,49,41,1|1togr7z,49,41,1|1togr80,31,40,0|1tuy5zz,31,40,0|1tuy600,49,41,1|1u76tvz,49,41,1|1u76tw0,31,40,0|1udo8nz,31,40,0|1udo8o0,49,41,1|1upwwjz,49,41,1|1upwwk0,31,40,0|1uwebbz,31,40,0|1uwebc0,49,41,1|1v8mz7z,49,41,1|1v8mz80,31,40,0|1vf4dzz,31,40,0|1vf4e00,49,41,1|1vrd1vz,49,41,1|1vrd1w0,31,40,0|NaN,31,40,0\",\"America/Monterrey|,0,140,0|-p1u7c1,0,140,0|-p1u7c0,45,63,0|9iywvz,45,63,0|9iyww0,48,59,1|9trq3z,48,59,1|9trq40,45,63,0|dphfjz,45,63,0|dphfk0,48,59,1|dzxa3z,48,59,1|dzxa40,45,63,0|e87i7z,45,63,0|e87i80,48,59,1|eincrz,48,59,1|eincs0,45,63,0|eqxkvz,45,63,0|eqxkw0,48,59,1|f1dffz,48,59,1|f1dfg0,45,63,0|f9nnjz,45,63,0|f9nnk0,48,59,1|fkggrz,48,59,1|fkggs0,45,63,0|fsdq7z,45,63,0|fsdq80,48,59,1|g36jfz,48,59,1|g36jg0,45,63,0|gcwm7z,45,63,0|gcwm80,48,59,1|gkgrfz,48,59,1|gkgrg0,45,63,0|gu6u7z,45,63,0|gu6u80,48,59,1|h4morz,48,59,1|h4mos0,45,63,0|hcwwvz,45,63,0|hcwww0,48,59,1|hncrfz,48,59,1|hncrg0,45,63,0|hvmzjz,45,63,0|hvmzk0,48,59,1|i6fsrz,48,59,1|i6fss0,45,63,0|ied27z,45,63,0|ied280,48,59,1|ip5vfz,48,59,1|ip5vg0,45,63,0|ix34vz,45,63,0|ix34w0,48,59,1|j7vy3z,48,59,1|j7vy40,45,63,0|jft7jz,45,63,0|jft7k0,48,59,1|jqm0rz,48,59,1|jqm0s0,45,63,0|jyw8vz,45,63,0|jyw8w0,48,59,1|k9c3fz,48,59,1|k9c3g0,45,63,0|khmbjz,45,63,0|khmbk0,48,59,1|ks263z,48,59,1|ks2640,45,63,0|l0ce7z,45,63,0|l0ce80,48,59,1|lb57fz,48,59,1|lb57g0,45,63,0|lj2gvz,45,63,0|lj2gw0,48,59,1|ltva3z,48,59,1|ltva40,45,63,0|m1sjjz,45,63,0|m1sjk0,48,59,1|mclcrz,48,59,1|mclcs0,45,63,0|mkvkvz,45,63,0|mkvkw0,48,59,1|mvbffz,48,59,1|mvbfg0,45,63,0|n3lnjz,45,63,0|n3lnk0,48,59,1|ne1i3z,48,59,1|ne1i40,45,63,0|nmbq7z,45,63,0|nmbq80,48,59,1|nwrkrz,48,59,1|nwrks0,45,63,0|o51svz,45,63,0|o51sw0,48,59,1|ofum3z,48,59,1|ofum40,45,63,0|onrvjz,45,63,0|onrvk0,48,59,1|oykorz,48,59,1|oykos0,45,63,0|p6hy7z,45,63,0|p6hy80,48,59,1|pharfz,48,59,1|pharg0,45,63,0|ppkzjz,45,63,0|ppkzk0,48,59,1|q00u3z,48,59,1|q00u40,45,63,0|q8b27z,45,63,0|q8b280,48,59,1|qiqwrz,48,59,1|qiqws0,45,63,0|qr14vz,45,63,0|qr14w0,48,59,1|r1ty3z,48,59,1|r1ty40,45,63,0|r9r7jz,45,63,0|r9r7k0,48,59,1|rkk0rz,48,59,1|rkk0s0,45,63,0|rsha7z,45,63,0|rsha80,48,59,1|s3a3fz,48,59,1|s3a3g0,45,63,0|sbkbjz,45,63,0|sbkbk0,48,59,1|sm063z,48,59,1|sm0640,45,63,0|suae7z,45,63,0|suae80,48,59,1|t4q8rz,48,59,1|t4q8s0,45,63,0|td0gvz,45,63,0|td0gw0,48,59,1|tngbfz,48,59,1|tngbg0,45,63,0|tvqjjz,45,63,0|tvqjk0,48,59,1|u6jcrz,48,59,1|u6jcs0,45,63,0|uegm7z,45,63,0|uegm80,48,59,1|up9ffz,48,59,1|up9fg0,45,63,0|ux6ovz,45,63,0|ux6ow0,48,59,1|v7zi3z,48,59,1|v7zi40,45,63,0|vg9q7z,45,63,0|vg9q80,48,59,1|vqpkrz,48,59,1|vqpks0,45,63,0|vyzsvz,45,63,0|vyzsw0,48,59,1|w9fnfz,48,59,1|w9fng0,45,63,0|whpvjz,45,63,0|whpvk0,48,59,1|wsiorz,48,59,1|wsios0,45,63,0|x0fy7z,45,63,0|x0fy80,48,59,1|xb8rfz,48,59,1|xb8rg0,45,63,0|xj60vz,45,63,0|xj60w0,48,59,1|xtyu3z,48,59,1|xtyu40,45,63,0|y1w3jz,45,63,0|y1w3k0,48,59,1|ycowrz,48,59,1|ycows0,45,63,0|ykz4vz,45,63,0|ykz4w0,48,59,1|yvezfz,48,59,1|yvezg0,45,63,0|z3p7jz,45,63,0|z3p7k0,48,59,1|ze523z,48,59,1|ze5240,45,63,0|zmfa7z,45,63,0|zmfa80,48,59,1|zx83fz,48,59,1|zx83g0,45,63,0|1055cvz,45,63,0|1055cw0,48,59,1|10fy63z,48,59,1|10fy640,45,63,0|10nvfjz,45,63,0|10nvfk0,48,59,1|10yo8rz,48,59,1|10yo8s0,45,63,0|116ygvz,45,63,0|116ygw0,48,59,1|11hebfz,48,59,1|11hebg0,45,63,0|11pojjz,45,63,0|11pojk0,48,59,1|1204e3z,48,59,1|1204e40,45,63,0|128em7z,45,63,0|128em80,48,59,1|12iugrz,48,59,1|12iugs0,45,63,0|12r4ovz,45,63,0|12r4ow0,48,59,1|131xi3z,48,59,1|131xi40,45,63,0|139urjz,45,63,0|139urk0,48,59,1|13knkrz,48,59,1|13knks0,45,63,0|13sku7z,45,63,0|13sku80,48,59,1|143dnfz,48,59,1|143dng0,45,63,0|14bnvjz,45,63,0|14bnvk0,48,59,1|14m3q3z,48,59,1|14m3q40,45,63,0|14udy7z,45,63,0|14udy80,48,59,1|154tsrz,48,59,1|154tss0,45,63,0|15d40vz,45,63,0|15d40w0,48,59,1|15nwu3z,48,59,1|15nwu40,45,63,0|15vu3jz,45,63,0|15vu3k0,48,59,1|166mwrz,48,59,1|166mws0,45,63,0|16ek67z,45,63,0|16ek680,48,59,1|16pczfz,48,59,1|16pczg0,45,63,0|16xn7jz,45,63,0|16xn7k0,48,59,1|178323z,48,59,1|1783240,45,63,0|17gda7z,45,63,0|17gda80,48,59,1|17qt4rz,48,59,1|17qt4s0,45,63,0|17z3cvz,45,63,0|17z3cw0,48,59,1|189j7fz,48,59,1|189j7g0,45,63,0|18htfjz,45,63,0|18htfk0,48,59,1|18sm8rz,48,59,1|18sm8s0,45,63,0|190ji7z,45,63,0|190ji80,48,59,1|19bcbfz,48,59,1|19bcbg0,45,63,0|19j9kvz,45,63,0|19j9kw0,48,59,1|19u2e3z,48,59,1|19u2e40,45,63,0|1a2cm7z,45,63,0|1a2cm80,48,59,1|1acsgrz,48,59,1|1acsgs0,45,63,0|1al2ovz,45,63,0|1al2ow0,48,59,1|1avijfz,48,59,1|1avijg0,45,63,0|1b3srjz,45,63,0|1b3srk0,48,59,1|1belkrz,48,59,1|1belks0,45,63,0|1bmiu7z,45,63,0|1bmiu80,48,59,1|1bxbnfz,48,59,1|1bxbng0,45,63,0|1c58wvz,45,63,0|1c58ww0,48,59,1|1cg1q3z,48,59,1|1cg1q40,45,63,0|1cnyzjz,45,63,0|1cnyzk0,48,59,1|1cyrsrz,48,59,1|1cyrss0,45,63,0|1d720vz,45,63,0|1d720w0,48,59,1|1dhhvfz,48,59,1|1dhhvg0,45,63,0|1dps3jz,45,63,0|1dps3k0,48,59,1|1e07y3z,48,59,1|1e07y40,45,63,0|1e8i67z,45,63,0|1e8i680,48,59,1|1ejazfz,48,59,1|1ejazg0,45,63,0|1er88vz,45,63,0|1er88w0,48,59,1|1f2123z,48,59,1|1f21240,45,63,0|1f9ybjz,45,63,0|1f9ybk0,48,59,1|1fkr4rz,48,59,1|1fkr4s0,45,63,0|1ft1cvz,45,63,0|1ft1cw0,48,59,1|1g3h7fz,48,59,1|1g3h7g0,45,63,0|1gbrfjz,45,63,0|1gbrfk0,48,59,1|1gm7a3z,48,59,1|1gm7a40,45,63,0|1guhi7z,45,63,0|1guhi80,48,59,1|1h4xcrz,48,59,1|1h4xcs0,45,63,0|1hd7kvz,45,63,0|1hd7kw0,48,59,1|1ho0e3z,48,59,1|1ho0e40,45,63,0|1hvxnjz,45,63,0|1hvxnk0,48,59,1|1i6qgrz,48,59,1|1i6qgs0,45,63,0|1ienq7z,45,63,0|1ienq80,48,59,1|1ipgjfz,48,59,1|1ipgjg0,45,63,0|1ixqrjz,45,63,0|1ixqrk0,48,59,1|1j86m3z,48,59,1|1j86m40,45,63,0|1jggu7z,45,63,0|1jggu80,48,59,1|1jqworz,48,59,1|1jqwos0,45,63,0|1jz6wvz,45,63,0|1jz6ww0,48,59,1|1k9zq3z,48,59,1|1k9zq40,45,63,0|1khwzjz,45,63,0|1khwzk0,48,59,1|1kspsrz,48,59,1|1kspss0,45,63,0|1l0n27z,45,63,0|1l0n280,48,59,1|1lbfvfz,48,59,1|1lbfvg0,45,63,0|1ljq3jz,45,63,0|1ljq3k0,48,59,1|1lu5y3z,48,59,1|1lu5y40,45,63,0|1m2g67z,45,63,0|1m2g680,48,59,1|1mcw0rz,48,59,1|1mcw0s0,45,63,0|1ml68vz,45,63,0|1ml68w0,48,59,1|1mvm3fz,48,59,1|1mvm3g0,45,63,0|1n3wbjz,45,63,0|1n3wbk0,48,59,1|1nep4rz,48,59,1|1nep4s0,45,63,0|1nmme7z,45,63,0|1nmme80,48,59,1|1nxf7fz,48,59,1|1nxf7g0,45,63,0|1o5cgvz,45,63,0|1o5cgw0,48,59,1|1og5a3z,48,59,1|1og5a40,45,63,0|1oofi7z,45,63,0|1oofi80,48,59,1|1oyvcrz,48,59,1|1oyvcs0,45,63,0|1p75kvz,45,63,0|1p75kw0,48,59,1|1phlffz,48,59,1|1phlfg0,45,63,0|1ppvnjz,45,63,0|1ppvnk0,48,59,1|1q0ogrz,48,59,1|1q0ogs0,45,63,0|1q8lq7z,45,63,0|1q8lq80,48,59,1|1qjejfz,48,59,1|1qjejg0,45,63,0|1qrbsvz,45,63,0|1qrbsw0,48,59,1|1r24m3z,48,59,1|1r24m40,45,63,0|1ra1vjz,45,63,0|1ra1vk0,48,59,1|1rkuorz,48,59,1|1rkuos0,45,63,0|1rt4wvz,45,63,0|1rt4ww0,48,59,1|1s3krfz,48,59,1|1s3krg0,45,63,0|1sbuzjz,45,63,0|1sbuzk0,48,59,1|1smau3z,48,59,1|1smau40,45,63,0|1sul27z,45,63,0|1sul280,48,59,1|1t5dvfz,48,59,1|1t5dvg0,45,63,0|1tdb4vz,45,63,0|1tdb4w0,48,59,1|1to3y3z,48,59,1|1to3y40,45,63,0|1tw17jz,45,63,0|1tw17k0,48,59,1|1u6u0rz,48,59,1|1u6u0s0,45,63,0|1uf48vz,45,63,0|1uf48w0,48,59,1|1upk3fz,48,59,1|1upk3g0,45,63,0|1uxubjz,45,63,0|1uxubk0,48,59,1|1v8a63z,48,59,1|1v8a640,45,63,0|1vgke7z,45,63,0|1vgke80,48,59,1|1vr08rz,48,59,1|1vr08s0,45,63,0|NaN,45,63,0\",\"America/Montevideo|,0,141,0|-w4mlla,0,141,0|-w4mll9,20,141,0|-px809a,20,141,0|-px8099,41,40,0|-o50vk1,41,40,0|-o50vk0,38,41,1|-nvm2c1,38,41,1|-nvm2c0,50,65,0|-nm74y1,50,65,0|-nm74y0,38,41,1|-ncu501,38,41,1|-ncu500,50,65,0|-n3f7m1,50,65,0|-n3f7m0,38,41,1|-mu27o1,38,41,1|-mu27o0,50,65,0|-ivo8y1,50,65,0|-ivo8y0,38,41,1|-inr3o1,38,41,1|-inr3o0,50,65,0|-icy6a1,50,65,0|-icy6a0,38,41,1|-i51101,38,41,1|-i51100,50,65,0|-hu83m1,50,65,0|-hu83m0,38,41,1|-hmayc1,38,41,1|-hmayc0,50,65,0|-hbi0y1,50,65,0|-hbi0y0,38,41,1|-h3kvo1,38,41,1|-h3kvo0,50,65,0|-gsezm1,50,65,0|-gsezm0,38,41,1|-gkut01,38,41,1|-gkut00,50,65,0|-g9owy1,50,65,0|-g9owy0,38,41,1|-g24qc1,38,41,1|-g24qc0,50,65,0|-fseoy1,50,65,0|-fseoy0,38,41,1|-fj1p01,38,41,1|-fj1p00,50,65,0|-f88rm1,50,65,0|-f88rm0,38,41,1|-f0bmc1,38,41,1|-f0bmc0,50,65,0|-etxya1,50,65,0|-etxya0,38,41,1|-e482c1,38,41,1|-e482c0,81,97,1|-dzlfq1,81,97,1|-dzlfq0,38,41,0|-5jbp01,38,41,0|-5jbp00,81,97,1|-5abnq1,81,97,1|-5abnq0,38,41,0|-572yc1,38,41,0|-572yc0,39,43,1|-54kag1,39,43,1|-54kag0,38,41,0|-2h5101,38,41,0|-2h5100,39,43,1|-285141,39,43,1|-285140,38,41,0|-u1901,38,41,0|-u1900,81,97,1|-kd521,81,97,1|-kd520,38,41,0|5vcbz,38,41,0|5vcc0,39,43,1|8fuvz,39,43,1|8fuw0,38,41,0|17dcbz,38,41,0|17dcc0,39,43,1|1botjz,39,43,1|1botk0,38,41,0|23s0bz,38,41,0|23s0c0,82,142,1|26nlhz,82,142,1|26nli0,81,97,1|2fnqxz,81,97,1|2fnqy0,38,41,0|2lf6zz,38,41,0|2lf700,39,43,1|2qgljz,39,43,1|2qglk0,38,41,0|3mvcbz,38,41,0|3mvcc0,39,43,1|3qtuvz,39,43,1|3qtuw0,38,41,0|44vhnz,38,41,0|44vho0,39,43,1|49jxjz,39,43,1|49jxk0,38,41,0|4obhnz,38,41,0|4obho0,39,43,1|4sa07z,39,43,1|4sa080,38,41,0|4v5sbz,38,41,0|4v5sc0,39,43,1|5bq07z,39,43,1|5bq080,38,41,0|9d8yzz,38,41,0|9d8z00,39,43,1|9h5mvz,39,43,1|9h5mw0,38,41,0|9vx6zz,38,41,0|9vx700,39,43,1|a08o7z,39,43,1|a08o80,38,41,0|achhnz,38,41,0|achho0,39,43,1|ails7z,39,43,1|ails80,38,41,0|auulnz,38,41,0|auulo0,39,43,1|b1otjz,39,43,1|b1otk0,38,41,0|bdxmzz,38,41,0|bdxn00,39,43,1|bkew7z,39,43,1|bkew80,38,41,0|bwaqzz,38,41,0|bwar00,39,43,1|c34yvz,39,43,1|c34yw0,38,41,0|i49pnz,38,41,0|i49po0,39,43,1|idzsfz,39,43,1|idzsg0,38,41,0|io2tvz,38,41,0|io2tw0,39,43,1|ivzxrz,39,43,1|ivzxs0,38,41,0|j6fxvz,38,41,0|j6fxw0,39,43,1|jeq0fz,39,43,1|jeq0g0,38,41,0|jpiz7z,38,41,0|jpiz80,39,43,1|jxg33z,39,43,1|jxg340,38,41,0|k891vz,38,41,0|k891w0,39,43,1|kg65rz,39,43,1|kg65s0,38,41,0|kqz4jz,38,41,0|kqz4k0,39,43,1|kz973z,39,43,1|kz9740,38,41,0|l9p77z,38,41,0|l9p780,39,43,1|lhz9rz,39,43,1|lhz9s0,38,41,0|lsf9vz,38,41,0|lsf9w0,39,43,1|m0pcfz,39,43,1|m0pcg0,38,41,0|mbib7z,38,41,0|mbib80,39,43,1|mjff3z,39,43,1|mjff40,38,41,0|mu8dvz,38,41,0|mu8dw0,39,43,1|n25hrz,39,43,1|n25hs0,38,41,0|ncygjz,38,41,0|ncygk0,39,43,1|nkvkfz,39,43,1|nkvkg0,38,41,0|NaN,38,41,0\",\"America/Montserrat|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/Nassau|,0,143,0|-1353dat,0,143,0|-1353das,43,59,0|-qzoxw1,43,59,0|-qzoxw0,61,40,1|-qpm201,61,40,1|-qpm200,43,59,0|-qhn4u1,43,59,0|-qhn4u0,61,40,1|-q6w4w1,61,40,1|-q6w4w0,43,59,0|-px5wk1,43,59,0|-px5wk0,61,40,1|-pplww1,61,40,1|-pplww0,43,59,0|-pdpwk1,43,59,0|-pdpwk0,61,40,1|-p7e7c1,61,40,1|-p7e7c0,43,59,0|-ouztw1,43,59,0|-ouztw0,61,40,1|-ooiko1,61,40,1|-ooiko0,43,59,0|-oc9r81,43,59,0|-oc9r80,61,40,1|-o5si01,61,40,1|-o5si00,43,59,0|-ntwn81,43,59,0|-ntwn80,61,40,1|-nmpgo1,61,40,1|-nmpgo0,43,59,0|-nb6kk1,43,59,0|-nb6kk0,61,40,1|-n3ze01,61,40,1|-n3ze00,43,59,0|-msghw1,43,59,0|-msghw0,61,40,1|-ml9bc1,61,40,1|-ml9bc0,43,59,0|-m9qf81,43,59,0|-m9qf80,61,40,1|-m26a01,61,40,1|-m26a00,43,59,0|-lr0ck1,43,59,0|-lr0ck0,61,40,1|-lj38o1,61,40,1|-lj38o0,43,59,0|-l8a9w1,43,59,0|-l8a9w0,61,40,1|-l0d601,61,40,1|-l0d600,43,59,0|-kpk781,43,59,0|-kpk780,61,40,1|-khn3c1,61,40,1|-khn3c0,43,59,0|-k6u4k1,43,59,0|-k6u4k0,61,40,1|-jyx0o1,61,40,1|-jyx0o0,43,59,0|-jnr381,43,59,0|-jnr380,61,40,1|-jg6y01,61,40,1|-jg6y00,43,59,0|-j510k1,43,59,0|-j510k0,61,40,1|-ix3wo1,61,40,1|-ix3wo0,43,59,0|-imaxw1,43,59,0|-imaxw0,61,40,1|-iedu01,61,40,1|-iedu00,43,59,0|-i3kv81,43,59,0|-i3kv80,61,40,1|-hvnrc1,61,40,1|-hvnrc0,43,59,0|-hkusk1,43,59,0|-hkusk0,61,40,1|-hcxoo1,61,40,1|-hcxoo0,43,59,0|-h24pw1,43,59,0|-h24pw0,61,40,1|-gu7m01,61,40,1|-gu7m00,43,59,0|-gjen81,43,59,0|-gjen80,61,40,1|-gbhjc1,61,40,1|-gbhjc0,43,59,0|-g0blw1,43,59,0|-g0blw0,61,40,1|-fsrgo1,61,40,1|-fsrgo0,43,59,0|-fhlj81,43,59,0|-fhlj80,61,40,1|-ek24k1,61,40,1|-ek24k0,70,40,1|-cq2tg1,70,40,1|-cq2tg0,71,40,1|-cnp3c1,71,40,1|-cnp3c0,43,59,0|-ccw4k1,43,59,0|-ccw4k0,61,40,1|-c4z0o1,61,40,1|-c4z0o0,43,59,0|-bu67g1,43,59,0|-bu67g0,61,40,1|-bm93k1,61,40,1|-bm93k0,43,59,0|-bbg4s1,43,59,0|-bbg4s0,61,40,1|-b3j0w1,61,40,1|-b3j0w0,43,59,0|-asq241,43,59,0|-asq240,61,40,1|-ahka81,61,40,1|-ahka80,43,59,0|-a9mv81,43,59,0|-a9mv80,61,40,1|-9yu201,61,40,1|-9yu200,43,59,0|-9qwsk1,43,59,0|-9qwsk0,61,40,1|-9izoo1,61,40,1|-9izoo0,43,59,0|-986pw1,43,59,0|-986pw0,61,40,1|-909m01,61,40,1|-909m00,43,59,0|-8pgn81,43,59,0|-8pgn80,61,40,1|-8hjjc1,61,40,1|-8hjjc0,43,59,0|-86qkk1,43,59,0|-86qkk0,61,40,1|-7ytgo1,61,40,1|-7ytgo0,43,59,0|-7o0hw1,43,59,0|-7o0hw0,61,40,1|-7g3e01,61,40,1|-7g3e00,43,59,0|-74xgk1,43,59,0|-74xgk0,61,40,1|-6x0co1,61,40,1|-6x0co0,43,59,0|-6m7dw1,43,59,0|-6m7dw0,61,40,1|-6cufc1,61,40,1|-6cufc0,43,59,0|-63hb81,43,59,0|-63hb80,61,40,1|-5u4co1,61,40,1|-5u4co0,43,59,0|-5kr8k1,43,59,0|-5kr8k0,61,40,1|-5bea01,61,40,1|-5bea00,43,59,0|-5215w1,43,59,0|-5215w0,61,40,1|-4sb8o1,61,40,1|-4sb8o0,43,59,0|-4iy4k1,43,59,0|-4iy4k0,61,40,1|-49l601,61,40,1|-49l600,43,59,0|-4081w1,43,59,0|-4081w0,61,40,1|-3qv3c1,61,40,1|-3qv3c0,43,59,0|-3hhz81,43,59,0|-3hhz80,61,40,1|-3850o1,61,40,1|-3850o0,43,59,0|-2yrwk1,43,59,0|-2yrwk0,61,40,1|-2pey01,61,40,1|-2pey00,43,59,0|-2g1tw1,43,59,0|-2g1tw0,61,40,1|-26bwo1,61,40,1|-26bwo0,43,59,0|-1xbr81,43,59,0|-1xbr80,61,40,1|-1nlu01,61,40,1|-1nlu00,43,59,0|-1e8pw1,43,59,0|-1e8pw0,61,40,1|-14vrc1,61,40,1|-14vrc0,43,59,0|-vin81,43,59,0|-vin80,61,40,1|-m5oo1,61,40,1|-m5oo0,43,59,0|-cskk1,43,59,0|-cskk0,61,40,1|-3fm01,61,40,1|-3fm00,43,59,0|5xi3z,43,59,0|5xi40,61,40,1|fagnz,61,40,1|fago0,43,59,0|onkrz,43,59,0|onks0,61,40,1|ydhzz,61,40,1|ydi00,43,59,0|17qm3z,43,59,0|17qm40,61,40,1|1h3knz,61,40,1|1h3ko0,43,59,0|1qgorz,43,59,0|1qgos0,61,40,1|1ztnbz,61,40,1|1ztnc0,43,59,0|296rfz,43,59,0|296rg0,61,40,1|2ijpzz,61,40,1|2ijq00,43,59,0|2rwu3z,43,59,0|2rwu40,61,40,1|319snz,61,40,1|319so0,43,59,0|3amwrz,43,59,0|3amws0,61,40,1|3kctzz,61,40,1|3kcu00,43,59,0|3tczfz,43,59,0|3tczg0,61,40,1|432wnz,61,40,1|432wo0,43,59,0|4cg0rz,43,59,0|4cg0s0,61,40,1|4lszbz,61,40,1|4lszc0,43,59,0|4v63fz,43,59,0|4v63g0,61,40,1|54j1zz,61,40,1|54j200,43,59,0|5dw63z,43,59,0|5dw640,61,40,1|5n94nz,61,40,1|5n94o0,43,59,0|5wm8rz,43,59,0|5wm8s0,61,40,1|65z7bz,61,40,1|65z7c0,43,59,0|6fcbfz,43,59,0|6fcbg0,61,40,1|6p28nz,61,40,1|6p28o0,43,59,0|6y2e3z,43,59,0|6y2e40,61,40,1|77sbbz,61,40,1|77sbc0,43,59,0|7h5ffz,43,59,0|7h5fg0,61,40,1|7qidzz,61,40,1|7qie00,43,59,0|7zvi3z,43,59,0|7zvi40,61,40,1|898gnz,61,40,1|898go0,43,59,0|8ilkrz,43,59,0|8ilks0,61,40,1|8ryjbz,61,40,1|8ryjc0,43,59,0|908rfz,43,59,0|908rg0,61,40,1|9aolzz,61,40,1|9aom00,43,59,0|9iyu3z,43,59,0|9iyu40,61,40,1|9trnbz,61,40,1|9trnc0,43,59,0|a1owrz,43,59,0|a1ows0,61,40,1|achpzz,61,40,1|achq00,43,59,0|akezfz,43,59,0|akezg0,61,40,1|av7snz,61,40,1|av7so0,43,59,0|b3i0rz,43,59,0|b3i0s0,61,40,1|bdxvbz,61,40,1|bdxvc0,43,59,0|bm83fz,43,59,0|bm83g0,61,40,1|bwnxzz,61,40,1|bwny00,43,59,0|c4y63z,43,59,0|c4y640,61,40,1|cfqzbz,61,40,1|cfqzc0,43,59,0|cno8rz,43,59,0|cno8s0,61,40,1|cyh1zz,61,40,1|cyh200,43,59,0|d6ebfz,43,59,0|d6ebg0,61,40,1|dh74nz,61,40,1|dh74o0,43,59,0|dphcrz,43,59,0|dphcs0,61,40,1|dzx7bz,61,40,1|dzx7c0,43,59,0|e87ffz,43,59,0|e87fg0,61,40,1|ein9zz,61,40,1|eina00,43,59,0|eqxi3z,43,59,0|eqxi40,61,40,1|f1dcnz,61,40,1|f1dco0,43,59,0|f9nkrz,43,59,0|f9nks0,61,40,1|fkgdzz,61,40,1|fkge00,43,59,0|fsdnfz,43,59,0|fsdng0,61,40,1|g36gnz,61,40,1|g36go0,43,59,0|gb3q3z,43,59,0|gb3q40,61,40,1|glwjbz,61,40,1|glwjc0,43,59,0|gu6rfz,43,59,0|gu6rg0,61,40,1|h4mlzz,61,40,1|h4mm00,43,59,0|hcwu3z,43,59,0|hcwu40,61,40,1|hnconz,61,40,1|hncoo0,43,59,0|hvmwrz,43,59,0|hvmws0,61,40,1|i6fpzz,61,40,1|i6fq00,43,59,0|ieczfz,43,59,0|ieczg0,61,40,1|ip5snz,61,40,1|ip5so0,43,59,0|ix323z,43,59,0|ix3240,61,40,1|j7vvbz,61,40,1|j7vvc0,43,59,0|jeq8rz,43,59,0|jeq8s0,61,40,1|jqywnz,61,40,1|jqywo0,43,59,0|jxgbfz,43,59,0|jxgbg0,61,40,1|k9ozbz,61,40,1|k9ozc0,43,59,0|kg6e3z,43,59,0|kg6e40,61,40,1|ksf1zz,61,40,1|ksf200,43,59,0|kz9ffz,43,59,0|kz9fg0,61,40,1|lbi3bz,61,40,1|lbi3c0,43,59,0|lhzi3z,43,59,0|lhzi40,61,40,1|lu85zz,61,40,1|lu8600,43,59,0|m0pkrz,43,59,0|m0pks0,61,40,1|mcy8nz,61,40,1|mcy8o0,43,59,0|mjfnfz,43,59,0|mjfng0,61,40,1|mvobbz,61,40,1|mvobc0,43,59,0|n25q3z,43,59,0|n25q40,61,40,1|needzz,61,40,1|neee00,43,59,0|nkvsrz,43,59,0|nkvss0,61,40,1|nx4gnz,61,40,1|nx4go0,43,59,0|o3yu3z,43,59,0|o3yu40,61,40,1|og7hzz,61,40,1|og7i00,43,59,0|omowrz,43,59,0|omows0,61,40,1|oyxknz,61,40,1|oyxko0,43,59,0|p5ezfz,43,59,0|p5ezg0,61,40,1|phnnbz,61,40,1|phnnc0,43,59,0|po523z,43,59,0|po5240,61,40,1|q0dpzz,61,40,1|q0dq00,43,59,0|q6v4rz,43,59,0|q6v4s0,61,40,1|qj3snz,61,40,1|qj3so0,43,59,0|qpy63z,43,59,0|qpy640,61,40,1|r26tzz,61,40,1|r26u00,43,59,0|r8o8rz,43,59,0|r8o8s0,61,40,1|rkwwnz,61,40,1|rkwwo0,43,59,0|rrebfz,43,59,0|rrebg0,61,40,1|s3mzbz,61,40,1|s3mzc0,43,59,0|sa4e3z,43,59,0|sa4e40,61,40,1|smd1zz,61,40,1|smd200,43,59,0|ssugrz,43,59,0|ssugs0,61,40,1|t534nz,61,40,1|t534o0,43,59,0|tbkjfz,43,59,0|tbkjg0,61,40,1|tnt7bz,61,40,1|tnt7c0,43,59,0|tunkrz,43,59,0|tunks0,61,40,1|u6w8nz,61,40,1|u6w8o0,43,59,0|uddnfz,43,59,0|uddng0,61,40,1|upmbbz,61,40,1|upmbc0,43,59,0|uw3q3z,43,59,0|uw3q40,61,40,1|v8cdzz,61,40,1|v8ce00,43,59,0|vetsrz,43,59,0|vetss0,61,40,1|vr2gnz,61,40,1|vr2go0,43,59,0|vxjvfz,43,59,0|vxjvg0,61,40,1|w9sjbz,61,40,1|w9sjc0,43,59,0|wgmwrz,43,59,0|wgmws0,61,40,1|wsvknz,61,40,1|wsvko0,43,59,0|wzczfz,43,59,0|wzczg0,61,40,1|xblnbz,61,40,1|xblnc0,43,59,0|xi323z,43,59,0|xi3240,61,40,1|xubpzz,61,40,1|xubq00,43,59,0|y0t4rz,43,59,0|y0t4s0,61,40,1|yd1snz,61,40,1|yd1so0,43,59,0|yjj7fz,43,59,0|yjj7g0,61,40,1|yvrvbz,61,40,1|yvrvc0,43,59,0|z29a3z,43,59,0|z29a40,61,40,1|zehxzz,61,40,1|zehy00,43,59,0|zlcbfz,43,59,0|zlcbg0,61,40,1|zxkzbz,61,40,1|zxkzc0,43,59,0|1042e3z,43,59,0|1042e40,61,40,1|10gb1zz,61,40,1|10gb200,43,59,0|10msgrz,43,59,0|10msgs0,61,40,1|10z14nz,61,40,1|10z14o0,43,59,0|115ijfz,43,59,0|115ijg0,61,40,1|11hr7bz,61,40,1|11hr7c0,43,59,0|11o8m3z,43,59,0|11o8m40,61,40,1|120h9zz,61,40,1|120ha00,43,59,0|126yorz,43,59,0|126yos0,61,40,1|12j7cnz,61,40,1|12j7co0,43,59,0|12q1q3z,43,59,0|12q1q40,61,40,1|132adzz,61,40,1|132ae00,43,59,0|138rsrz,43,59,0|138rss0,61,40,1|13l0gnz,61,40,1|13l0go0,43,59,0|13rhvfz,43,59,0|13rhvg0,61,40,1|143qjbz,61,40,1|143qjc0,43,59,0|14a7y3z,43,59,0|14a7y40,61,40,1|14mglzz,61,40,1|14mgm00,43,59,0|14sy0rz,43,59,0|14sy0s0,61,40,1|1556onz,61,40,1|1556oo0,43,59,0|15c123z,43,59,0|15c1240,61,40,1|15o9pzz,61,40,1|15o9q00,43,59,0|15ur4rz,43,59,0|15ur4s0,61,40,1|166zsnz,61,40,1|166zso0,43,59,0|16dh7fz,43,59,0|16dh7g0,61,40,1|16ppvbz,61,40,1|16ppvc0,43,59,0|16w7a3z,43,59,0|16w7a40,61,40,1|178fxzz,61,40,1|178fy00,43,59,0|17excrz,43,59,0|17excs0,61,40,1|17r60nz,61,40,1|17r60o0,43,59,0|17xnffz,43,59,0|17xnfg0,61,40,1|189w3bz,61,40,1|189w3c0,43,59,0|18gqgrz,43,59,0|18gqgs0,61,40,1|18sz4nz,61,40,1|18sz4o0,43,59,0|18zgjfz,43,59,0|18zgjg0,61,40,1|19bp7bz,61,40,1|19bp7c0,43,59,0|19i6m3z,43,59,0|19i6m40,61,40,1|19uf9zz,61,40,1|19ufa00,43,59,0|1a0worz,43,59,0|1a0wos0,61,40,1|1ad5cnz,61,40,1|1ad5co0,43,59,0|1ajmrfz,43,59,0|1ajmrg0,61,40,1|1avvfbz,61,40,1|1avvfc0,43,59,0|1b2psrz,43,59,0|1b2pss0,61,40,1|1beygnz,61,40,1|1beygo0,43,59,0|1blfvfz,43,59,0|1blfvg0,61,40,1|1bxojbz,61,40,1|1bxojc0,43,59,0|1c45y3z,43,59,0|1c45y40,61,40,1|1cgelzz,61,40,1|1cgem00,43,59,0|1cmw0rz,43,59,0|1cmw0s0,61,40,1|1cz4onz,61,40,1|1cz4oo0,43,59,0|1d5m3fz,43,59,0|1d5m3g0,61,40,1|1dhurbz,61,40,1|1dhurc0,43,59,0|1doc63z,43,59,0|1doc640,61,40,1|1e0ktzz,61,40,1|1e0ku00,43,59,0|1e7f7fz,43,59,0|1e7f7g0,61,40,1|1ejnvbz,61,40,1|1ejnvc0,43,59,0|1eq5a3z,43,59,0|1eq5a40,61,40,1|1f2dxzz,61,40,1|1f2dy00,43,59,0|1f8vcrz,43,59,0|1f8vcs0,61,40,1|1fl40nz,61,40,1|1fl40o0,43,59,0|1frlffz,43,59,0|1frlfg0,61,40,1|1g3u3bz,61,40,1|1g3u3c0,43,59,0|1gabi3z,43,59,0|1gabi40,61,40,1|1gmk5zz,61,40,1|1gmk600,43,59,0|1gt1krz,43,59,0|1gt1ks0,61,40,1|1h5a8nz,61,40,1|1h5a8o0,43,59,0|1hc4m3z,43,59,0|1hc4m40,61,40,1|1hod9zz,61,40,1|1hoda00,43,59,0|1huuorz,43,59,0|1huuos0,61,40,1|1i73cnz,61,40,1|1i73co0,43,59,0|1idkrfz,43,59,0|1idkrg0,61,40,1|1iptfbz,61,40,1|1iptfc0,43,59,0|1iwau3z,43,59,0|1iwau40,61,40,1|1j8jhzz,61,40,1|1j8ji00,43,59,0|1jf0wrz,43,59,0|1jf0ws0,61,40,1|1jr9knz,61,40,1|1jr9ko0,43,59,0|1jy3y3z,43,59,0|1jy3y40,61,40,1|1kaclzz,61,40,1|1kacm00,43,59,0|1kgu0rz,43,59,0|1kgu0s0,61,40,1|1kt2onz,61,40,1|1kt2oo0,43,59,0|1kzk3fz,43,59,0|1kzk3g0,61,40,1|1lbsrbz,61,40,1|1lbsrc0,43,59,0|1lia63z,43,59,0|1lia640,61,40,1|1luitzz,61,40,1|1luiu00,43,59,0|1m108rz,43,59,0|1m108s0,61,40,1|1md8wnz,61,40,1|1md8wo0,43,59,0|1mjqbfz,43,59,0|1mjqbg0,61,40,1|1mvyzbz,61,40,1|1mvyzc0,43,59,0|1n2tcrz,43,59,0|1n2tcs0,61,40,1|1nf20nz,61,40,1|1nf20o0,43,59,0|1nljffz,43,59,0|1nljfg0,61,40,1|1nxs3bz,61,40,1|1nxs3c0,43,59,0|1o49i3z,43,59,0|1o49i40,61,40,1|1ogi5zz,61,40,1|1ogi600,43,59,0|1omzkrz,43,59,0|1omzks0,61,40,1|1oz88nz,61,40,1|1oz88o0,43,59,0|1p5pnfz,43,59,0|1p5png0,61,40,1|1phybbz,61,40,1|1phybc0,43,59,0|1posorz,43,59,0|1posos0,61,40,1|1q11cnz,61,40,1|1q11co0,43,59,0|1q7irfz,43,59,0|1q7irg0,61,40,1|1qjrfbz,61,40,1|1qjrfc0,43,59,0|1qq8u3z,43,59,0|1qq8u40,61,40,1|1r2hhzz,61,40,1|1r2hi00,43,59,0|1r8ywrz,43,59,0|1r8yws0,61,40,1|1rl7knz,61,40,1|1rl7ko0,43,59,0|1rrozfz,43,59,0|1rrozg0,61,40,1|1s3xnbz,61,40,1|1s3xnc0,43,59,0|1saf23z,43,59,0|1saf240,61,40,1|1smnpzz,61,40,1|1smnq00,43,59,0|1sti3fz,43,59,0|1sti3g0,61,40,1|1t5qrbz,61,40,1|1t5qrc0,43,59,0|1tc863z,43,59,0|1tc8640,61,40,1|1togtzz,61,40,1|1togu00,43,59,0|1tuy8rz,43,59,0|1tuy8s0,61,40,1|1u76wnz,61,40,1|1u76wo0,43,59,0|1udobfz,43,59,0|1udobg0,61,40,1|1upwzbz,61,40,1|1upwzc0,43,59,0|1uwee3z,43,59,0|1uwee40,61,40,1|1v8n1zz,61,40,1|1v8n200,43,59,0|1vf4grz,43,59,0|1vf4gs0,61,40,1|1vrd4nz,61,40,1|1vrd4o0,43,59,0|NaN,43,59,0\",\"America/New_York|,0,144,0|-18y0os1,0,144,0|-18y0os0,43,59,0|-r0ev81,43,59,0|-r0ev80,61,40,1|-qpm201,61,40,1|-qpm200,43,59,0|-qhosk1,43,59,0|-qhosk0,61,40,1|-q6vzc1,61,40,1|-q6vzc0,43,59,0|-pyypw1,43,59,0|-pyypw0,61,40,1|-pnsy01,61,40,1|-pnsy00,43,59,0|-pessk1,43,59,0|-pessk0,61,40,1|-p6voo1,61,40,1|-p6voo0,43,59,0|-ovpr81,43,59,0|-ovpr80,61,40,1|-oo5m01,61,40,1|-oo5m00,43,59,0|-oczok1,43,59,0|-oczok0,61,40,1|-o52ko1,61,40,1|-o52ko0,43,59,0|-nu9lw1,43,59,0|-nu9lw0,61,40,1|-nmci01,61,40,1|-nmci00,43,59,0|-nbjj81,43,59,0|-nbjj80,61,40,1|-n3mfc1,61,40,1|-n3mfc0,43,59,0|-mstgk1,43,59,0|-mstgk0,61,40,1|-mkwco1,61,40,1|-mkwco0,43,59,0|-ma3dw1,43,59,0|-ma3dw0,61,40,1|-m26a01,61,40,1|-m26a00,43,59,0|-lr0ck1,43,59,0|-lr0ck0,61,40,1|-lj38o1,61,40,1|-lj38o0,43,59,0|-l8a9w1,43,59,0|-l8a9w0,61,40,1|-l0d601,61,40,1|-l0d600,43,59,0|-kpk781,43,59,0|-kpk780,61,40,1|-khn3c1,61,40,1|-khn3c0,43,59,0|-k6u4k1,43,59,0|-k6u4k0,61,40,1|-jyx0o1,61,40,1|-jyx0o0,43,59,0|-jo41w1,43,59,0|-jo41w0,61,40,1|-jg6y01,61,40,1|-jg6y00,43,59,0|-j510k1,43,59,0|-j510k0,61,40,1|-ixgvc1,61,40,1|-ixgvc0,43,59,0|-imaxw1,43,59,0|-imaxw0,61,40,1|-iedu01,61,40,1|-iedu00,43,59,0|-i3kv81,43,59,0|-i3kv80,61,40,1|-hvnrc1,61,40,1|-hvnrc0,43,59,0|-hkusk1,43,59,0|-hkusk0,61,40,1|-hcxoo1,61,40,1|-hcxoo0,43,59,0|-h24pw1,43,59,0|-h24pw0,61,40,1|-gu7m01,61,40,1|-gu7m00,43,59,0|-gjen81,43,59,0|-gjen80,61,40,1|-gbhjc1,61,40,1|-gbhjc0,43,59,0|-g0blw1,43,59,0|-g0blw0,61,40,1|-fsrgo1,61,40,1|-fsrgo0,43,59,0|-fhlj81,43,59,0|-fhlj80,61,40,1|-f9ofc1,61,40,1|-f9ofc0,43,59,0|-eyvgk1,43,59,0|-eyvgk0,61,40,1|-eqyco1,61,40,1|-eqyco0,43,59,0|-ek24k1,43,59,0|-ek24k0,70,40,1|-cq2tg1,70,40,1|-cq2tg0,71,40,1|-cnp3c1,71,40,1|-cnp3c0,43,59,0|-ccw4k1,43,59,0|-ccw4k0,61,40,1|-c4z0o1,61,40,1|-c4z0o0,43,59,0|-bu61w1,43,59,0|-bu61w0,61,40,1|-bm8y01,61,40,1|-bm8y00,43,59,0|-bbfz81,43,59,0|-bbfz80,61,40,1|-b3ivc1,61,40,1|-b3ivc0,43,59,0|-aspwk1,43,59,0|-aspwk0,61,40,1|-aksso1,61,40,1|-aksso0,43,59,0|-a9mv81,43,59,0|-a9mv80,61,40,1|-a22q01,61,40,1|-a22q00,43,59,0|-9qwsk1,43,59,0|-9qwsk0,61,40,1|-9izoo1,61,40,1|-9izoo0,43,59,0|-986pw1,43,59,0|-986pw0,61,40,1|-909m01,61,40,1|-909m00,43,59,0|-8pgn81,43,59,0|-8pgn80,61,40,1|-8hjjc1,61,40,1|-8hjjc0,43,59,0|-86qkk1,43,59,0|-86qkk0,61,40,1|-7ytgo1,61,40,1|-7ytgo0,43,59,0|-7o0hw1,43,59,0|-7o0hw0,61,40,1|-7eako1,61,40,1|-7eako0,43,59,0|-74xgk1,43,59,0|-74xgk0,61,40,1|-6vki01,61,40,1|-6vki00,43,59,0|-6m7dw1,43,59,0|-6m7dw0,61,40,1|-6cufc1,61,40,1|-6cufc0,43,59,0|-63hb81,43,59,0|-63hb80,61,40,1|-5u4co1,61,40,1|-5u4co0,43,59,0|-5kr8k1,43,59,0|-5kr8k0,61,40,1|-5bea01,61,40,1|-5bea00,43,59,0|-5215w1,43,59,0|-5215w0,61,40,1|-4sb8o1,61,40,1|-4sb8o0,43,59,0|-4iy4k1,43,59,0|-4iy4k0,61,40,1|-49l601,61,40,1|-49l600,43,59,0|-4081w1,43,59,0|-4081w0,61,40,1|-3qv3c1,61,40,1|-3qv3c0,43,59,0|-3hhz81,43,59,0|-3hhz80,61,40,1|-3850o1,61,40,1|-3850o0,43,59,0|-2yrwk1,43,59,0|-2yrwk0,61,40,1|-2pey01,61,40,1|-2pey00,43,59,0|-2g1tw1,43,59,0|-2g1tw0,61,40,1|-26bwo1,61,40,1|-26bwo0,43,59,0|-1xbr81,43,59,0|-1xbr80,61,40,1|-1nlu01,61,40,1|-1nlu00,43,59,0|-1e8pw1,43,59,0|-1e8pw0,61,40,1|-14vrc1,61,40,1|-14vrc0,43,59,0|-vin81,43,59,0|-vin80,61,40,1|-m5oo1,61,40,1|-m5oo0,43,59,0|-cskk1,43,59,0|-cskk0,61,40,1|-3fm01,61,40,1|-3fm00,43,59,0|5xi3z,43,59,0|5xi40,61,40,1|fagnz,61,40,1|fago0,43,59,0|onkrz,43,59,0|onks0,61,40,1|ydhzz,61,40,1|ydi00,43,59,0|17qm3z,43,59,0|17qm40,61,40,1|1h3knz,61,40,1|1h3ko0,43,59,0|1qgorz,43,59,0|1qgos0,61,40,1|1ztnbz,61,40,1|1ztnc0,43,59,0|23fcrz,43,59,0|23fcs0,61,40,1|2ijpzz,61,40,1|2ijq00,43,59,0|2oo63z,43,59,0|2oo640,61,40,1|319snz,61,40,1|319so0,43,59,0|3amwrz,43,59,0|3amws0,61,40,1|3kctzz,61,40,1|3kcu00,43,59,0|3tczfz,43,59,0|3tczg0,61,40,1|432wnz,61,40,1|432wo0,43,59,0|4cg0rz,43,59,0|4cg0s0,61,40,1|4lszbz,61,40,1|4lszc0,43,59,0|4v63fz,43,59,0|4v63g0,61,40,1|54j1zz,61,40,1|54j200,43,59,0|5dw63z,43,59,0|5dw640,61,40,1|5n94nz,61,40,1|5n94o0,43,59,0|5wm8rz,43,59,0|5wm8s0,61,40,1|65z7bz,61,40,1|65z7c0,43,59,0|6fcbfz,43,59,0|6fcbg0,61,40,1|6p28nz,61,40,1|6p28o0,43,59,0|6y2e3z,43,59,0|6y2e40,61,40,1|77sbbz,61,40,1|77sbc0,43,59,0|7h5ffz,43,59,0|7h5fg0,61,40,1|7qidzz,61,40,1|7qie00,43,59,0|7zvi3z,43,59,0|7zvi40,61,40,1|898gnz,61,40,1|898go0,43,59,0|8ilkrz,43,59,0|8ilks0,61,40,1|8ryjbz,61,40,1|8ryjc0,43,59,0|908rfz,43,59,0|908rg0,61,40,1|9aolzz,61,40,1|9aom00,43,59,0|9iyu3z,43,59,0|9iyu40,61,40,1|9trnbz,61,40,1|9trnc0,43,59,0|a1owrz,43,59,0|a1ows0,61,40,1|achpzz,61,40,1|achq00,43,59,0|akezfz,43,59,0|akezg0,61,40,1|av7snz,61,40,1|av7so0,43,59,0|b3i0rz,43,59,0|b3i0s0,61,40,1|bdxvbz,61,40,1|bdxvc0,43,59,0|bm83fz,43,59,0|bm83g0,61,40,1|bwnxzz,61,40,1|bwny00,43,59,0|c4y63z,43,59,0|c4y640,61,40,1|cfqzbz,61,40,1|cfqzc0,43,59,0|cno8rz,43,59,0|cno8s0,61,40,1|cyh1zz,61,40,1|cyh200,43,59,0|d6ebfz,43,59,0|d6ebg0,61,40,1|dh74nz,61,40,1|dh74o0,43,59,0|dphcrz,43,59,0|dphcs0,61,40,1|dzx7bz,61,40,1|dzx7c0,43,59,0|e87ffz,43,59,0|e87fg0,61,40,1|ein9zz,61,40,1|eina00,43,59,0|eqxi3z,43,59,0|eqxi40,61,40,1|f1dcnz,61,40,1|f1dco0,43,59,0|f9nkrz,43,59,0|f9nks0,61,40,1|fkgdzz,61,40,1|fkge00,43,59,0|fsdnfz,43,59,0|fsdng0,61,40,1|g36gnz,61,40,1|g36go0,43,59,0|gb3q3z,43,59,0|gb3q40,61,40,1|glwjbz,61,40,1|glwjc0,43,59,0|gu6rfz,43,59,0|gu6rg0,61,40,1|h4mlzz,61,40,1|h4mm00,43,59,0|hcwu3z,43,59,0|hcwu40,61,40,1|hnconz,61,40,1|hncoo0,43,59,0|hvmwrz,43,59,0|hvmws0,61,40,1|i6fpzz,61,40,1|i6fq00,43,59,0|ieczfz,43,59,0|ieczg0,61,40,1|ip5snz,61,40,1|ip5so0,43,59,0|ix323z,43,59,0|ix3240,61,40,1|j7vvbz,61,40,1|j7vvc0,43,59,0|jeq8rz,43,59,0|jeq8s0,61,40,1|jqywnz,61,40,1|jqywo0,43,59,0|jxgbfz,43,59,0|jxgbg0,61,40,1|k9ozbz,61,40,1|k9ozc0,43,59,0|kg6e3z,43,59,0|kg6e40,61,40,1|ksf1zz,61,40,1|ksf200,43,59,0|kz9ffz,43,59,0|kz9fg0,61,40,1|lbi3bz,61,40,1|lbi3c0,43,59,0|lhzi3z,43,59,0|lhzi40,61,40,1|lu85zz,61,40,1|lu8600,43,59,0|m0pkrz,43,59,0|m0pks0,61,40,1|mcy8nz,61,40,1|mcy8o0,43,59,0|mjfnfz,43,59,0|mjfng0,61,40,1|mvobbz,61,40,1|mvobc0,43,59,0|n25q3z,43,59,0|n25q40,61,40,1|needzz,61,40,1|neee00,43,59,0|nkvsrz,43,59,0|nkvss0,61,40,1|nx4gnz,61,40,1|nx4go0,43,59,0|o3yu3z,43,59,0|o3yu40,61,40,1|og7hzz,61,40,1|og7i00,43,59,0|omowrz,43,59,0|omows0,61,40,1|oyxknz,61,40,1|oyxko0,43,59,0|p5ezfz,43,59,0|p5ezg0,61,40,1|phnnbz,61,40,1|phnnc0,43,59,0|po523z,43,59,0|po5240,61,40,1|q0dpzz,61,40,1|q0dq00,43,59,0|q6v4rz,43,59,0|q6v4s0,61,40,1|qj3snz,61,40,1|qj3so0,43,59,0|qpy63z,43,59,0|qpy640,61,40,1|r26tzz,61,40,1|r26u00,43,59,0|r8o8rz,43,59,0|r8o8s0,61,40,1|rkwwnz,61,40,1|rkwwo0,43,59,0|rrebfz,43,59,0|rrebg0,61,40,1|s3mzbz,61,40,1|s3mzc0,43,59,0|sa4e3z,43,59,0|sa4e40,61,40,1|smd1zz,61,40,1|smd200,43,59,0|ssugrz,43,59,0|ssugs0,61,40,1|t534nz,61,40,1|t534o0,43,59,0|tbkjfz,43,59,0|tbkjg0,61,40,1|tnt7bz,61,40,1|tnt7c0,43,59,0|tunkrz,43,59,0|tunks0,61,40,1|u6w8nz,61,40,1|u6w8o0,43,59,0|uddnfz,43,59,0|uddng0,61,40,1|upmbbz,61,40,1|upmbc0,43,59,0|uw3q3z,43,59,0|uw3q40,61,40,1|v8cdzz,61,40,1|v8ce00,43,59,0|vetsrz,43,59,0|vetss0,61,40,1|vr2gnz,61,40,1|vr2go0,43,59,0|vxjvfz,43,59,0|vxjvg0,61,40,1|w9sjbz,61,40,1|w9sjc0,43,59,0|wgmwrz,43,59,0|wgmws0,61,40,1|wsvknz,61,40,1|wsvko0,43,59,0|wzczfz,43,59,0|wzczg0,61,40,1|xblnbz,61,40,1|xblnc0,43,59,0|xi323z,43,59,0|xi3240,61,40,1|xubpzz,61,40,1|xubq00,43,59,0|y0t4rz,43,59,0|y0t4s0,61,40,1|yd1snz,61,40,1|yd1so0,43,59,0|yjj7fz,43,59,0|yjj7g0,61,40,1|yvrvbz,61,40,1|yvrvc0,43,59,0|z29a3z,43,59,0|z29a40,61,40,1|zehxzz,61,40,1|zehy00,43,59,0|zlcbfz,43,59,0|zlcbg0,61,40,1|zxkzbz,61,40,1|zxkzc0,43,59,0|1042e3z,43,59,0|1042e40,61,40,1|10gb1zz,61,40,1|10gb200,43,59,0|10msgrz,43,59,0|10msgs0,61,40,1|10z14nz,61,40,1|10z14o0,43,59,0|115ijfz,43,59,0|115ijg0,61,40,1|11hr7bz,61,40,1|11hr7c0,43,59,0|11o8m3z,43,59,0|11o8m40,61,40,1|120h9zz,61,40,1|120ha00,43,59,0|126yorz,43,59,0|126yos0,61,40,1|12j7cnz,61,40,1|12j7co0,43,59,0|12q1q3z,43,59,0|12q1q40,61,40,1|132adzz,61,40,1|132ae00,43,59,0|138rsrz,43,59,0|138rss0,61,40,1|13l0gnz,61,40,1|13l0go0,43,59,0|13rhvfz,43,59,0|13rhvg0,61,40,1|143qjbz,61,40,1|143qjc0,43,59,0|14a7y3z,43,59,0|14a7y40,61,40,1|14mglzz,61,40,1|14mgm00,43,59,0|14sy0rz,43,59,0|14sy0s0,61,40,1|1556onz,61,40,1|1556oo0,43,59,0|15c123z,43,59,0|15c1240,61,40,1|15o9pzz,61,40,1|15o9q00,43,59,0|15ur4rz,43,59,0|15ur4s0,61,40,1|166zsnz,61,40,1|166zso0,43,59,0|16dh7fz,43,59,0|16dh7g0,61,40,1|16ppvbz,61,40,1|16ppvc0,43,59,0|16w7a3z,43,59,0|16w7a40,61,40,1|178fxzz,61,40,1|178fy00,43,59,0|17excrz,43,59,0|17excs0,61,40,1|17r60nz,61,40,1|17r60o0,43,59,0|17xnffz,43,59,0|17xnfg0,61,40,1|189w3bz,61,40,1|189w3c0,43,59,0|18gqgrz,43,59,0|18gqgs0,61,40,1|18sz4nz,61,40,1|18sz4o0,43,59,0|18zgjfz,43,59,0|18zgjg0,61,40,1|19bp7bz,61,40,1|19bp7c0,43,59,0|19i6m3z,43,59,0|19i6m40,61,40,1|19uf9zz,61,40,1|19ufa00,43,59,0|1a0worz,43,59,0|1a0wos0,61,40,1|1ad5cnz,61,40,1|1ad5co0,43,59,0|1ajmrfz,43,59,0|1ajmrg0,61,40,1|1avvfbz,61,40,1|1avvfc0,43,59,0|1b2psrz,43,59,0|1b2pss0,61,40,1|1beygnz,61,40,1|1beygo0,43,59,0|1blfvfz,43,59,0|1blfvg0,61,40,1|1bxojbz,61,40,1|1bxojc0,43,59,0|1c45y3z,43,59,0|1c45y40,61,40,1|1cgelzz,61,40,1|1cgem00,43,59,0|1cmw0rz,43,59,0|1cmw0s0,61,40,1|1cz4onz,61,40,1|1cz4oo0,43,59,0|1d5m3fz,43,59,0|1d5m3g0,61,40,1|1dhurbz,61,40,1|1dhurc0,43,59,0|1doc63z,43,59,0|1doc640,61,40,1|1e0ktzz,61,40,1|1e0ku00,43,59,0|1e7f7fz,43,59,0|1e7f7g0,61,40,1|1ejnvbz,61,40,1|1ejnvc0,43,59,0|1eq5a3z,43,59,0|1eq5a40,61,40,1|1f2dxzz,61,40,1|1f2dy00,43,59,0|1f8vcrz,43,59,0|1f8vcs0,61,40,1|1fl40nz,61,40,1|1fl40o0,43,59,0|1frlffz,43,59,0|1frlfg0,61,40,1|1g3u3bz,61,40,1|1g3u3c0,43,59,0|1gabi3z,43,59,0|1gabi40,61,40,1|1gmk5zz,61,40,1|1gmk600,43,59,0|1gt1krz,43,59,0|1gt1ks0,61,40,1|1h5a8nz,61,40,1|1h5a8o0,43,59,0|1hc4m3z,43,59,0|1hc4m40,61,40,1|1hod9zz,61,40,1|1hoda00,43,59,0|1huuorz,43,59,0|1huuos0,61,40,1|1i73cnz,61,40,1|1i73co0,43,59,0|1idkrfz,43,59,0|1idkrg0,61,40,1|1iptfbz,61,40,1|1iptfc0,43,59,0|1iwau3z,43,59,0|1iwau40,61,40,1|1j8jhzz,61,40,1|1j8ji00,43,59,0|1jf0wrz,43,59,0|1jf0ws0,61,40,1|1jr9knz,61,40,1|1jr9ko0,43,59,0|1jy3y3z,43,59,0|1jy3y40,61,40,1|1kaclzz,61,40,1|1kacm00,43,59,0|1kgu0rz,43,59,0|1kgu0s0,61,40,1|1kt2onz,61,40,1|1kt2oo0,43,59,0|1kzk3fz,43,59,0|1kzk3g0,61,40,1|1lbsrbz,61,40,1|1lbsrc0,43,59,0|1lia63z,43,59,0|1lia640,61,40,1|1luitzz,61,40,1|1luiu00,43,59,0|1m108rz,43,59,0|1m108s0,61,40,1|1md8wnz,61,40,1|1md8wo0,43,59,0|1mjqbfz,43,59,0|1mjqbg0,61,40,1|1mvyzbz,61,40,1|1mvyzc0,43,59,0|1n2tcrz,43,59,0|1n2tcs0,61,40,1|1nf20nz,61,40,1|1nf20o0,43,59,0|1nljffz,43,59,0|1nljfg0,61,40,1|1nxs3bz,61,40,1|1nxs3c0,43,59,0|1o49i3z,43,59,0|1o49i40,61,40,1|1ogi5zz,61,40,1|1ogi600,43,59,0|1omzkrz,43,59,0|1omzks0,61,40,1|1oz88nz,61,40,1|1oz88o0,43,59,0|1p5pnfz,43,59,0|1p5png0,61,40,1|1phybbz,61,40,1|1phybc0,43,59,0|1posorz,43,59,0|1posos0,61,40,1|1q11cnz,61,40,1|1q11co0,43,59,0|1q7irfz,43,59,0|1q7irg0,61,40,1|1qjrfbz,61,40,1|1qjrfc0,43,59,0|1qq8u3z,43,59,0|1qq8u40,61,40,1|1r2hhzz,61,40,1|1r2hi00,43,59,0|1r8ywrz,43,59,0|1r8yws0,61,40,1|1rl7knz,61,40,1|1rl7ko0,43,59,0|1rrozfz,43,59,0|1rrozg0,61,40,1|1s3xnbz,61,40,1|1s3xnc0,43,59,0|1saf23z,43,59,0|1saf240,61,40,1|1smnpzz,61,40,1|1smnq00,43,59,0|1sti3fz,43,59,0|1sti3g0,61,40,1|1t5qrbz,61,40,1|1t5qrc0,43,59,0|1tc863z,43,59,0|1tc8640,61,40,1|1togtzz,61,40,1|1togu00,43,59,0|1tuy8rz,43,59,0|1tuy8s0,61,40,1|1u76wnz,61,40,1|1u76wo0,43,59,0|1udobfz,43,59,0|1udobg0,61,40,1|1upwzbz,61,40,1|1upwzc0,43,59,0|1uwee3z,43,59,0|1uwee40,61,40,1|1v8n1zz,61,40,1|1v8n200,43,59,0|1vf4grz,43,59,0|1vf4gs0,61,40,1|1vrd4nz,61,40,1|1vrd4o0,43,59,0|NaN,43,59,0\",\"America/Nipigon|,0,145,0|-1353bnl,0,145,0|-1353bnk,43,59,0|-qzoxw1,43,59,0|-qzoxw0,61,40,1|-qpm201,61,40,1|-qpm200,43,59,0|-f9oi41,43,59,0|-f9oi40,61,40,1|-ek24k1,61,40,1|-ek24k0,70,40,1|-cq2tg1,70,40,1|-cq2tg0,71,40,1|-cnp3c1,71,40,1|-cnp3c0,43,59,0|296rfz,43,59,0|296rg0,61,40,1|2ijpzz,61,40,1|2ijq00,43,59,0|2rwu3z,43,59,0|2rwu40,61,40,1|319snz,61,40,1|319so0,43,59,0|3amwrz,43,59,0|3amws0,61,40,1|3kctzz,61,40,1|3kcu00,43,59,0|3tczfz,43,59,0|3tczg0,61,40,1|432wnz,61,40,1|432wo0,43,59,0|4cg0rz,43,59,0|4cg0s0,61,40,1|4lszbz,61,40,1|4lszc0,43,59,0|4v63fz,43,59,0|4v63g0,61,40,1|54j1zz,61,40,1|54j200,43,59,0|5dw63z,43,59,0|5dw640,61,40,1|5n94nz,61,40,1|5n94o0,43,59,0|5wm8rz,43,59,0|5wm8s0,61,40,1|65z7bz,61,40,1|65z7c0,43,59,0|6fcbfz,43,59,0|6fcbg0,61,40,1|6p28nz,61,40,1|6p28o0,43,59,0|6y2e3z,43,59,0|6y2e40,61,40,1|77sbbz,61,40,1|77sbc0,43,59,0|7h5ffz,43,59,0|7h5fg0,61,40,1|7qidzz,61,40,1|7qie00,43,59,0|7zvi3z,43,59,0|7zvi40,61,40,1|898gnz,61,40,1|898go0,43,59,0|8ilkrz,43,59,0|8ilks0,61,40,1|8ryjbz,61,40,1|8ryjc0,43,59,0|908rfz,43,59,0|908rg0,61,40,1|9aolzz,61,40,1|9aom00,43,59,0|9iyu3z,43,59,0|9iyu40,61,40,1|9trnbz,61,40,1|9trnc0,43,59,0|a1owrz,43,59,0|a1ows0,61,40,1|achpzz,61,40,1|achq00,43,59,0|akezfz,43,59,0|akezg0,61,40,1|av7snz,61,40,1|av7so0,43,59,0|b3i0rz,43,59,0|b3i0s0,61,40,1|bdxvbz,61,40,1|bdxvc0,43,59,0|bm83fz,43,59,0|bm83g0,61,40,1|bwnxzz,61,40,1|bwny00,43,59,0|c4y63z,43,59,0|c4y640,61,40,1|cfqzbz,61,40,1|cfqzc0,43,59,0|cno8rz,43,59,0|cno8s0,61,40,1|cyh1zz,61,40,1|cyh200,43,59,0|d6ebfz,43,59,0|d6ebg0,61,40,1|dh74nz,61,40,1|dh74o0,43,59,0|dphcrz,43,59,0|dphcs0,61,40,1|dzx7bz,61,40,1|dzx7c0,43,59,0|e87ffz,43,59,0|e87fg0,61,40,1|ein9zz,61,40,1|eina00,43,59,0|eqxi3z,43,59,0|eqxi40,61,40,1|f1dcnz,61,40,1|f1dco0,43,59,0|f9nkrz,43,59,0|f9nks0,61,40,1|fkgdzz,61,40,1|fkge00,43,59,0|fsdnfz,43,59,0|fsdng0,61,40,1|g36gnz,61,40,1|g36go0,43,59,0|gb3q3z,43,59,0|gb3q40,61,40,1|glwjbz,61,40,1|glwjc0,43,59,0|gu6rfz,43,59,0|gu6rg0,61,40,1|h4mlzz,61,40,1|h4mm00,43,59,0|hcwu3z,43,59,0|hcwu40,61,40,1|hnconz,61,40,1|hncoo0,43,59,0|hvmwrz,43,59,0|hvmws0,61,40,1|i6fpzz,61,40,1|i6fq00,43,59,0|ieczfz,43,59,0|ieczg0,61,40,1|ip5snz,61,40,1|ip5so0,43,59,0|ix323z,43,59,0|ix3240,61,40,1|j7vvbz,61,40,1|j7vvc0,43,59,0|jeq8rz,43,59,0|jeq8s0,61,40,1|jqywnz,61,40,1|jqywo0,43,59,0|jxgbfz,43,59,0|jxgbg0,61,40,1|k9ozbz,61,40,1|k9ozc0,43,59,0|kg6e3z,43,59,0|kg6e40,61,40,1|ksf1zz,61,40,1|ksf200,43,59,0|kz9ffz,43,59,0|kz9fg0,61,40,1|lbi3bz,61,40,1|lbi3c0,43,59,0|lhzi3z,43,59,0|lhzi40,61,40,1|lu85zz,61,40,1|lu8600,43,59,0|m0pkrz,43,59,0|m0pks0,61,40,1|mcy8nz,61,40,1|mcy8o0,43,59,0|mjfnfz,43,59,0|mjfng0,61,40,1|mvobbz,61,40,1|mvobc0,43,59,0|n25q3z,43,59,0|n25q40,61,40,1|needzz,61,40,1|neee00,43,59,0|nkvsrz,43,59,0|nkvss0,61,40,1|nx4gnz,61,40,1|nx4go0,43,59,0|o3yu3z,43,59,0|o3yu40,61,40,1|og7hzz,61,40,1|og7i00,43,59,0|omowrz,43,59,0|omows0,61,40,1|oyxknz,61,40,1|oyxko0,43,59,0|p5ezfz,43,59,0|p5ezg0,61,40,1|phnnbz,61,40,1|phnnc0,43,59,0|po523z,43,59,0|po5240,61,40,1|q0dpzz,61,40,1|q0dq00,43,59,0|q6v4rz,43,59,0|q6v4s0,61,40,1|qj3snz,61,40,1|qj3so0,43,59,0|qpy63z,43,59,0|qpy640,61,40,1|r26tzz,61,40,1|r26u00,43,59,0|r8o8rz,43,59,0|r8o8s0,61,40,1|rkwwnz,61,40,1|rkwwo0,43,59,0|rrebfz,43,59,0|rrebg0,61,40,1|s3mzbz,61,40,1|s3mzc0,43,59,0|sa4e3z,43,59,0|sa4e40,61,40,1|smd1zz,61,40,1|smd200,43,59,0|ssugrz,43,59,0|ssugs0,61,40,1|t534nz,61,40,1|t534o0,43,59,0|tbkjfz,43,59,0|tbkjg0,61,40,1|tnt7bz,61,40,1|tnt7c0,43,59,0|tunkrz,43,59,0|tunks0,61,40,1|u6w8nz,61,40,1|u6w8o0,43,59,0|uddnfz,43,59,0|uddng0,61,40,1|upmbbz,61,40,1|upmbc0,43,59,0|uw3q3z,43,59,0|uw3q40,61,40,1|v8cdzz,61,40,1|v8ce00,43,59,0|vetsrz,43,59,0|vetss0,61,40,1|vr2gnz,61,40,1|vr2go0,43,59,0|vxjvfz,43,59,0|vxjvg0,61,40,1|w9sjbz,61,40,1|w9sjc0,43,59,0|wgmwrz,43,59,0|wgmws0,61,40,1|wsvknz,61,40,1|wsvko0,43,59,0|wzczfz,43,59,0|wzczg0,61,40,1|xblnbz,61,40,1|xblnc0,43,59,0|xi323z,43,59,0|xi3240,61,40,1|xubpzz,61,40,1|xubq00,43,59,0|y0t4rz,43,59,0|y0t4s0,61,40,1|yd1snz,61,40,1|yd1so0,43,59,0|yjj7fz,43,59,0|yjj7g0,61,40,1|yvrvbz,61,40,1|yvrvc0,43,59,0|z29a3z,43,59,0|z29a40,61,40,1|zehxzz,61,40,1|zehy00,43,59,0|zlcbfz,43,59,0|zlcbg0,61,40,1|zxkzbz,61,40,1|zxkzc0,43,59,0|1042e3z,43,59,0|1042e40,61,40,1|10gb1zz,61,40,1|10gb200,43,59,0|10msgrz,43,59,0|10msgs0,61,40,1|10z14nz,61,40,1|10z14o0,43,59,0|115ijfz,43,59,0|115ijg0,61,40,1|11hr7bz,61,40,1|11hr7c0,43,59,0|11o8m3z,43,59,0|11o8m40,61,40,1|120h9zz,61,40,1|120ha00,43,59,0|126yorz,43,59,0|126yos0,61,40,1|12j7cnz,61,40,1|12j7co0,43,59,0|12q1q3z,43,59,0|12q1q40,61,40,1|132adzz,61,40,1|132ae00,43,59,0|138rsrz,43,59,0|138rss0,61,40,1|13l0gnz,61,40,1|13l0go0,43,59,0|13rhvfz,43,59,0|13rhvg0,61,40,1|143qjbz,61,40,1|143qjc0,43,59,0|14a7y3z,43,59,0|14a7y40,61,40,1|14mglzz,61,40,1|14mgm00,43,59,0|14sy0rz,43,59,0|14sy0s0,61,40,1|1556onz,61,40,1|1556oo0,43,59,0|15c123z,43,59,0|15c1240,61,40,1|15o9pzz,61,40,1|15o9q00,43,59,0|15ur4rz,43,59,0|15ur4s0,61,40,1|166zsnz,61,40,1|166zso0,43,59,0|16dh7fz,43,59,0|16dh7g0,61,40,1|16ppvbz,61,40,1|16ppvc0,43,59,0|16w7a3z,43,59,0|16w7a40,61,40,1|178fxzz,61,40,1|178fy00,43,59,0|17excrz,43,59,0|17excs0,61,40,1|17r60nz,61,40,1|17r60o0,43,59,0|17xnffz,43,59,0|17xnfg0,61,40,1|189w3bz,61,40,1|189w3c0,43,59,0|18gqgrz,43,59,0|18gqgs0,61,40,1|18sz4nz,61,40,1|18sz4o0,43,59,0|18zgjfz,43,59,0|18zgjg0,61,40,1|19bp7bz,61,40,1|19bp7c0,43,59,0|19i6m3z,43,59,0|19i6m40,61,40,1|19uf9zz,61,40,1|19ufa00,43,59,0|1a0worz,43,59,0|1a0wos0,61,40,1|1ad5cnz,61,40,1|1ad5co0,43,59,0|1ajmrfz,43,59,0|1ajmrg0,61,40,1|1avvfbz,61,40,1|1avvfc0,43,59,0|1b2psrz,43,59,0|1b2pss0,61,40,1|1beygnz,61,40,1|1beygo0,43,59,0|1blfvfz,43,59,0|1blfvg0,61,40,1|1bxojbz,61,40,1|1bxojc0,43,59,0|1c45y3z,43,59,0|1c45y40,61,40,1|1cgelzz,61,40,1|1cgem00,43,59,0|1cmw0rz,43,59,0|1cmw0s0,61,40,1|1cz4onz,61,40,1|1cz4oo0,43,59,0|1d5m3fz,43,59,0|1d5m3g0,61,40,1|1dhurbz,61,40,1|1dhurc0,43,59,0|1doc63z,43,59,0|1doc640,61,40,1|1e0ktzz,61,40,1|1e0ku00,43,59,0|1e7f7fz,43,59,0|1e7f7g0,61,40,1|1ejnvbz,61,40,1|1ejnvc0,43,59,0|1eq5a3z,43,59,0|1eq5a40,61,40,1|1f2dxzz,61,40,1|1f2dy00,43,59,0|1f8vcrz,43,59,0|1f8vcs0,61,40,1|1fl40nz,61,40,1|1fl40o0,43,59,0|1frlffz,43,59,0|1frlfg0,61,40,1|1g3u3bz,61,40,1|1g3u3c0,43,59,0|1gabi3z,43,59,0|1gabi40,61,40,1|1gmk5zz,61,40,1|1gmk600,43,59,0|1gt1krz,43,59,0|1gt1ks0,61,40,1|1h5a8nz,61,40,1|1h5a8o0,43,59,0|1hc4m3z,43,59,0|1hc4m40,61,40,1|1hod9zz,61,40,1|1hoda00,43,59,0|1huuorz,43,59,0|1huuos0,61,40,1|1i73cnz,61,40,1|1i73co0,43,59,0|1idkrfz,43,59,0|1idkrg0,61,40,1|1iptfbz,61,40,1|1iptfc0,43,59,0|1iwau3z,43,59,0|1iwau40,61,40,1|1j8jhzz,61,40,1|1j8ji00,43,59,0|1jf0wrz,43,59,0|1jf0ws0,61,40,1|1jr9knz,61,40,1|1jr9ko0,43,59,0|1jy3y3z,43,59,0|1jy3y40,61,40,1|1kaclzz,61,40,1|1kacm00,43,59,0|1kgu0rz,43,59,0|1kgu0s0,61,40,1|1kt2onz,61,40,1|1kt2oo0,43,59,0|1kzk3fz,43,59,0|1kzk3g0,61,40,1|1lbsrbz,61,40,1|1lbsrc0,43,59,0|1lia63z,43,59,0|1lia640,61,40,1|1luitzz,61,40,1|1luiu00,43,59,0|1m108rz,43,59,0|1m108s0,61,40,1|1md8wnz,61,40,1|1md8wo0,43,59,0|1mjqbfz,43,59,0|1mjqbg0,61,40,1|1mvyzbz,61,40,1|1mvyzc0,43,59,0|1n2tcrz,43,59,0|1n2tcs0,61,40,1|1nf20nz,61,40,1|1nf20o0,43,59,0|1nljffz,43,59,0|1nljfg0,61,40,1|1nxs3bz,61,40,1|1nxs3c0,43,59,0|1o49i3z,43,59,0|1o49i40,61,40,1|1ogi5zz,61,40,1|1ogi600,43,59,0|1omzkrz,43,59,0|1omzks0,61,40,1|1oz88nz,61,40,1|1oz88o0,43,59,0|1p5pnfz,43,59,0|1p5png0,61,40,1|1phybbz,61,40,1|1phybc0,43,59,0|1posorz,43,59,0|1posos0,61,40,1|1q11cnz,61,40,1|1q11co0,43,59,0|1q7irfz,43,59,0|1q7irg0,61,40,1|1qjrfbz,61,40,1|1qjrfc0,43,59,0|1qq8u3z,43,59,0|1qq8u40,61,40,1|1r2hhzz,61,40,1|1r2hi00,43,59,0|1r8ywrz,43,59,0|1r8yws0,61,40,1|1rl7knz,61,40,1|1rl7ko0,43,59,0|1rrozfz,43,59,0|1rrozg0,61,40,1|1s3xnbz,61,40,1|1s3xnc0,43,59,0|1saf23z,43,59,0|1saf240,61,40,1|1smnpzz,61,40,1|1smnq00,43,59,0|1sti3fz,43,59,0|1sti3g0,61,40,1|1t5qrbz,61,40,1|1t5qrc0,43,59,0|1tc863z,43,59,0|1tc8640,61,40,1|1togtzz,61,40,1|1togu00,43,59,0|1tuy8rz,43,59,0|1tuy8s0,61,40,1|1u76wnz,61,40,1|1u76wo0,43,59,0|1udobfz,43,59,0|1udobg0,61,40,1|1upwzbz,61,40,1|1upwzc0,43,59,0|1uwee3z,43,59,0|1uwee40,61,40,1|1v8n1zz,61,40,1|1v8n200,43,59,0|1vf4grz,43,59,0|1vf4gs0,61,40,1|1vrd4nz,61,40,1|1vrd4o0,43,59,0|NaN,43,59,0\",\"America/Nome|,0,146,0|-1hc7qk0,0,146,0|-1hc7qjz,0,147,0|-1078qpb,0,147,0|-1078qpa,23,33,0|-ek1nw1,23,33,0|-ek1nw0,24,34,1|-cq2tg1,24,34,1|-cq2tg0,25,34,1|-cnomo1,25,34,1|-cnomo0,23,33,0|-1fq441,23,33,0|-1fq440,26,33,0|-cs3w1,26,33,0|-cs3w0,27,34,1|-3f5c1,27,34,1|-3f5c0,26,33,0|5xyrz,26,33,0|5xys0,27,34,1|faxbz,27,34,1|faxc0,26,33,0|oo1fz,26,33,0|oo1g0,27,34,1|ydynz,27,34,1|ydyo0,26,33,0|17r2rz,26,33,0|17r2s0,27,34,1|1h41bz,27,34,1|1h41c0,26,33,0|1qh5fz,26,33,0|1qh5g0,27,34,1|1zu3zz,27,34,1|1zu400,26,33,0|23ftfz,26,33,0|23ftg0,27,34,1|2ik6nz,27,34,1|2ik6o0,26,33,0|2oomrz,26,33,0|2ooms0,27,34,1|31a9bz,27,34,1|31a9c0,26,33,0|3andfz,26,33,0|3andg0,27,34,1|3kdanz,27,34,1|3kdao0,26,33,0|3tdg3z,26,33,0|3tdg40,27,34,1|433dbz,27,34,1|433dc0,26,33,0|4cghfz,26,33,0|4cghg0,27,34,1|4ltfzz,27,34,1|4ltg00,26,33,0|4v6k3z,26,33,0|4v6k40,27,34,1|54jinz,27,34,1|54jio0,26,33,0|5dwmrz,26,33,0|5dwms0,27,34,1|5n9lbz,27,34,1|5n9lc0,26,33,0|5wmpfz,26,33,0|5wmpg0,27,34,1|65znzz,27,34,1|65zo00,26,33,0|6fcs3z,26,33,0|6fcs40,27,34,1|6p2pbz,27,34,1|6p2pc0,26,33,0|6y2urz,26,33,0|6y2us0,27,34,1|77srzz,27,34,1|77ss00,35,35,0|79dybz,35,35,0|79dyc0,36,35,0|7h5qjz,36,35,0|7h5qk0,37,38,1|7qip3z,37,38,1|7qip40,36,35,0|7zvt7z,36,35,0|7zvt80,37,38,1|898rrz,37,38,1|898rs0,36,35,0|8ilvvz,36,35,0|8ilvw0,37,38,1|8ryufz,37,38,1|8ryug0,36,35,0|9092jz,36,35,0|9092k0,37,38,1|9aox3z,37,38,1|9aox40,36,35,0|9iz57z,36,35,0|9iz580,37,38,1|9tryfz,37,38,1|9tryg0,36,35,0|a1p7vz,36,35,0|a1p7w0,37,38,1|aci13z,37,38,1|aci140,36,35,0|akfajz,36,35,0|akfak0,37,38,1|av83rz,37,38,1|av83s0,36,35,0|b3ibvz,36,35,0|b3ibw0,37,38,1|bdy6fz,37,38,1|bdy6g0,36,35,0|bm8ejz,36,35,0|bm8ek0,37,38,1|bwo93z,37,38,1|bwo940,36,35,0|c4yh7z,36,35,0|c4yh80,37,38,1|cfrafz,37,38,1|cfrag0,36,35,0|cnojvz,36,35,0|cnojw0,37,38,1|cyhd3z,37,38,1|cyhd40,36,35,0|d6emjz,36,35,0|d6emk0,37,38,1|dh7frz,37,38,1|dh7fs0,36,35,0|dphnvz,36,35,0|dphnw0,37,38,1|dzxifz,37,38,1|dzxig0,36,35,0|e87qjz,36,35,0|e87qk0,37,38,1|einl3z,37,38,1|einl40,36,35,0|eqxt7z,36,35,0|eqxt80,37,38,1|f1dnrz,37,38,1|f1dns0,36,35,0|f9nvvz,36,35,0|f9nvw0,37,38,1|fkgp3z,37,38,1|fkgp40,36,35,0|fsdyjz,36,35,0|fsdyk0,37,38,1|g36rrz,37,38,1|g36rs0,36,35,0|gb417z,36,35,0|gb4180,37,38,1|glwufz,37,38,1|glwug0,36,35,0|gu72jz,36,35,0|gu72k0,37,38,1|h4mx3z,37,38,1|h4mx40,36,35,0|hcx57z,36,35,0|hcx580,37,38,1|hnczrz,37,38,1|hnczs0,36,35,0|hvn7vz,36,35,0|hvn7w0,37,38,1|i6g13z,37,38,1|i6g140,36,35,0|iedajz,36,35,0|iedak0,37,38,1|ip63rz,37,38,1|ip63s0,36,35,0|ix3d7z,36,35,0|ix3d80,37,38,1|j7w6fz,37,38,1|j7w6g0,36,35,0|jeqjvz,36,35,0|jeqjw0,37,38,1|jqz7rz,37,38,1|jqz7s0,36,35,0|jxgmjz,36,35,0|jxgmk0,37,38,1|k9pafz,37,38,1|k9pag0,36,35,0|kg6p7z,36,35,0|kg6p80,37,38,1|ksfd3z,37,38,1|ksfd40,36,35,0|kz9qjz,36,35,0|kz9qk0,37,38,1|lbiefz,37,38,1|lbieg0,36,35,0|lhzt7z,36,35,0|lhzt80,37,38,1|lu8h3z,37,38,1|lu8h40,36,35,0|m0pvvz,36,35,0|m0pvw0,37,38,1|mcyjrz,37,38,1|mcyjs0,36,35,0|mjfyjz,36,35,0|mjfyk0,37,38,1|mvomfz,37,38,1|mvomg0,36,35,0|n2617z,36,35,0|n26180,37,38,1|neep3z,37,38,1|neep40,36,35,0|nkw3vz,36,35,0|nkw3w0,37,38,1|nx4rrz,37,38,1|nx4rs0,36,35,0|o3z57z,36,35,0|o3z580,37,38,1|og7t3z,37,38,1|og7t40,36,35,0|omp7vz,36,35,0|omp7w0,37,38,1|oyxvrz,37,38,1|oyxvs0,36,35,0|p5fajz,36,35,0|p5fak0,37,38,1|phnyfz,37,38,1|phnyg0,36,35,0|po5d7z,36,35,0|po5d80,37,38,1|q0e13z,37,38,1|q0e140,36,35,0|q6vfvz,36,35,0|q6vfw0,37,38,1|qj43rz,37,38,1|qj43s0,36,35,0|qpyh7z,36,35,0|qpyh80,37,38,1|r2753z,37,38,1|r27540,36,35,0|r8ojvz,36,35,0|r8ojw0,37,38,1|rkx7rz,37,38,1|rkx7s0,36,35,0|rremjz,36,35,0|rremk0,37,38,1|s3nafz,37,38,1|s3nag0,36,35,0|sa4p7z,36,35,0|sa4p80,37,38,1|smdd3z,37,38,1|smdd40,36,35,0|ssurvz,36,35,0|ssurw0,37,38,1|t53frz,37,38,1|t53fs0,36,35,0|tbkujz,36,35,0|tbkuk0,37,38,1|tntifz,37,38,1|tntig0,36,35,0|tunvvz,36,35,0|tunvw0,37,38,1|u6wjrz,37,38,1|u6wjs0,36,35,0|uddyjz,36,35,0|uddyk0,37,38,1|upmmfz,37,38,1|upmmg0,36,35,0|uw417z,36,35,0|uw4180,37,38,1|v8cp3z,37,38,1|v8cp40,36,35,0|veu3vz,36,35,0|veu3w0,37,38,1|vr2rrz,37,38,1|vr2rs0,36,35,0|vxk6jz,36,35,0|vxk6k0,37,38,1|w9sufz,37,38,1|w9sug0,36,35,0|wgn7vz,36,35,0|wgn7w0,37,38,1|wsvvrz,37,38,1|wsvvs0,36,35,0|wzdajz,36,35,0|wzdak0,37,38,1|xblyfz,37,38,1|xblyg0,36,35,0|xi3d7z,36,35,0|xi3d80,37,38,1|xuc13z,37,38,1|xuc140,36,35,0|y0tfvz,36,35,0|y0tfw0,37,38,1|yd23rz,37,38,1|yd23s0,36,35,0|yjjijz,36,35,0|yjjik0,37,38,1|yvs6fz,37,38,1|yvs6g0,36,35,0|z29l7z,36,35,0|z29l80,37,38,1|zei93z,37,38,1|zei940,36,35,0|zlcmjz,36,35,0|zlcmk0,37,38,1|zxlafz,37,38,1|zxlag0,36,35,0|1042p7z,36,35,0|1042p80,37,38,1|10gbd3z,37,38,1|10gbd40,36,35,0|10msrvz,36,35,0|10msrw0,37,38,1|10z1frz,37,38,1|10z1fs0,36,35,0|115iujz,36,35,0|115iuk0,37,38,1|11hrifz,37,38,1|11hrig0,36,35,0|11o8x7z,36,35,0|11o8x80,37,38,1|120hl3z,37,38,1|120hl40,36,35,0|126yzvz,36,35,0|126yzw0,37,38,1|12j7nrz,37,38,1|12j7ns0,36,35,0|12q217z,36,35,0|12q2180,37,38,1|132ap3z,37,38,1|132ap40,36,35,0|138s3vz,36,35,0|138s3w0,37,38,1|13l0rrz,37,38,1|13l0rs0,36,35,0|13ri6jz,36,35,0|13ri6k0,37,38,1|143qufz,37,38,1|143qug0,36,35,0|14a897z,36,35,0|14a8980,37,38,1|14mgx3z,37,38,1|14mgx40,36,35,0|14sybvz,36,35,0|14sybw0,37,38,1|1556zrz,37,38,1|1556zs0,36,35,0|15c1d7z,36,35,0|15c1d80,37,38,1|15oa13z,37,38,1|15oa140,36,35,0|15urfvz,36,35,0|15urfw0,37,38,1|16703rz,37,38,1|16703s0,36,35,0|16dhijz,36,35,0|16dhik0,37,38,1|16pq6fz,37,38,1|16pq6g0,36,35,0|16w7l7z,36,35,0|16w7l80,37,38,1|178g93z,37,38,1|178g940,36,35,0|17exnvz,36,35,0|17exnw0,37,38,1|17r6brz,37,38,1|17r6bs0,36,35,0|17xnqjz,36,35,0|17xnqk0,37,38,1|189wefz,37,38,1|189weg0,36,35,0|18gqrvz,36,35,0|18gqrw0,37,38,1|18szfrz,37,38,1|18szfs0,36,35,0|18zgujz,36,35,0|18zguk0,37,38,1|19bpifz,37,38,1|19bpig0,36,35,0|19i6x7z,36,35,0|19i6x80,37,38,1|19ufl3z,37,38,1|19ufl40,36,35,0|1a0wzvz,36,35,0|1a0wzw0,37,38,1|1ad5nrz,37,38,1|1ad5ns0,36,35,0|1ajn2jz,36,35,0|1ajn2k0,37,38,1|1avvqfz,37,38,1|1avvqg0,36,35,0|1b2q3vz,36,35,0|1b2q3w0,37,38,1|1beyrrz,37,38,1|1beyrs0,36,35,0|1blg6jz,36,35,0|1blg6k0,37,38,1|1bxoufz,37,38,1|1bxoug0,36,35,0|1c4697z,36,35,0|1c46980,37,38,1|1cgex3z,37,38,1|1cgex40,36,35,0|1cmwbvz,36,35,0|1cmwbw0,37,38,1|1cz4zrz,37,38,1|1cz4zs0,36,35,0|1d5mejz,36,35,0|1d5mek0,37,38,1|1dhv2fz,37,38,1|1dhv2g0,36,35,0|1doch7z,36,35,0|1doch80,37,38,1|1e0l53z,37,38,1|1e0l540,36,35,0|1e7fijz,36,35,0|1e7fik0,37,38,1|1ejo6fz,37,38,1|1ejo6g0,36,35,0|1eq5l7z,36,35,0|1eq5l80,37,38,1|1f2e93z,37,38,1|1f2e940,36,35,0|1f8vnvz,36,35,0|1f8vnw0,37,38,1|1fl4brz,37,38,1|1fl4bs0,36,35,0|1frlqjz,36,35,0|1frlqk0,37,38,1|1g3uefz,37,38,1|1g3ueg0,36,35,0|1gabt7z,36,35,0|1gabt80,37,38,1|1gmkh3z,37,38,1|1gmkh40,36,35,0|1gt1vvz,36,35,0|1gt1vw0,37,38,1|1h5ajrz,37,38,1|1h5ajs0,36,35,0|1hc4x7z,36,35,0|1hc4x80,37,38,1|1hodl3z,37,38,1|1hodl40,36,35,0|1huuzvz,36,35,0|1huuzw0,37,38,1|1i73nrz,37,38,1|1i73ns0,36,35,0|1idl2jz,36,35,0|1idl2k0,37,38,1|1iptqfz,37,38,1|1iptqg0,36,35,0|1iwb57z,36,35,0|1iwb580,37,38,1|1j8jt3z,37,38,1|1j8jt40,36,35,0|1jf17vz,36,35,0|1jf17w0,37,38,1|1jr9vrz,37,38,1|1jr9vs0,36,35,0|1jy497z,36,35,0|1jy4980,37,38,1|1kacx3z,37,38,1|1kacx40,36,35,0|1kgubvz,36,35,0|1kgubw0,37,38,1|1kt2zrz,37,38,1|1kt2zs0,36,35,0|1kzkejz,36,35,0|1kzkek0,37,38,1|1lbt2fz,37,38,1|1lbt2g0,36,35,0|1liah7z,36,35,0|1liah80,37,38,1|1luj53z,37,38,1|1luj540,36,35,0|1m10jvz,36,35,0|1m10jw0,37,38,1|1md97rz,37,38,1|1md97s0,36,35,0|1mjqmjz,36,35,0|1mjqmk0,37,38,1|1mvzafz,37,38,1|1mvzag0,36,35,0|1n2tnvz,36,35,0|1n2tnw0,37,38,1|1nf2brz,37,38,1|1nf2bs0,36,35,0|1nljqjz,36,35,0|1nljqk0,37,38,1|1nxsefz,37,38,1|1nxseg0,36,35,0|1o49t7z,36,35,0|1o49t80,37,38,1|1ogih3z,37,38,1|1ogih40,36,35,0|1omzvvz,36,35,0|1omzvw0,37,38,1|1oz8jrz,37,38,1|1oz8js0,36,35,0|1p5pyjz,36,35,0|1p5pyk0,37,38,1|1phymfz,37,38,1|1phymg0,36,35,0|1poszvz,36,35,0|1poszw0,37,38,1|1q11nrz,37,38,1|1q11ns0,36,35,0|1q7j2jz,36,35,0|1q7j2k0,37,38,1|1qjrqfz,37,38,1|1qjrqg0,36,35,0|1qq957z,36,35,0|1qq9580,37,38,1|1r2ht3z,37,38,1|1r2ht40,36,35,0|1r8z7vz,36,35,0|1r8z7w0,37,38,1|1rl7vrz,37,38,1|1rl7vs0,36,35,0|1rrpajz,36,35,0|1rrpak0,37,38,1|1s3xyfz,37,38,1|1s3xyg0,36,35,0|1safd7z,36,35,0|1safd80,37,38,1|1smo13z,37,38,1|1smo140,36,35,0|1stiejz,36,35,0|1stiek0,37,38,1|1t5r2fz,37,38,1|1t5r2g0,36,35,0|1tc8h7z,36,35,0|1tc8h80,37,38,1|1toh53z,37,38,1|1toh540,36,35,0|1tuyjvz,36,35,0|1tuyjw0,37,38,1|1u777rz,37,38,1|1u777s0,36,35,0|1udomjz,36,35,0|1udomk0,37,38,1|1upxafz,37,38,1|1upxag0,36,35,0|1uwep7z,36,35,0|1uwep80,37,38,1|1v8nd3z,37,38,1|1v8nd40,36,35,0|1vf4rvz,36,35,0|1vf4rw0,37,38,1|1vrdfrz,37,38,1|1vrdfs0,36,35,0|NaN,36,35,0\",\"America/Noronha|,0,148,0|-t85lzx,0,148,0|-t85lzw,39,43,0|-jyld81,39,43,0|-jyld80,12,13,1|-jpb3w1,12,13,1|-jpb3w0,39,43,0|-jfsfs1,39,43,0|-jfsfs0,12,13,1|-j6j6k1,12,13,1|-j6j6k0,39,43,0|-ahd141,39,43,0|-ahd140,12,13,1|-aad6g1,12,13,1|-aad6g0,39,43,0|-9yl3s1,39,43,0|-9yl3s0,12,13,1|-9sd3w1,12,13,1|-9sd3w0,39,43,0|-9ft6g1,39,43,0|-9ft6g0,12,13,1|-99jbw1,12,13,1|-99jbw0,39,43,0|-8wzeg1,39,43,0|-8wzeg0,12,13,1|-8sct81,12,13,1|-8sct80,39,43,0|-35xp41,39,43,0|-35xp40,12,13,1|-31o2k1,12,13,1|-31o2k0,39,43,0|-2kdrs1,39,43,0|-2kdrs0,12,13,1|-2hcl81,12,13,1|-2hcl80,39,43,0|-24qt41,39,43,0|-24qt40,12,13,1|-2047w1,12,13,1|-2047w0,39,43,0|-1nifs1,39,43,0|-1nifs0,12,13,1|-1hcak1,12,13,1|-1hcak0,39,43,0|-14qig1,39,43,0|-14qig0,12,13,1|-yiik1,12,13,1|-yiik0,39,43,0|89j9jz,39,43,0|89j9k0,12,13,1|8gdhfz,12,13,1|8gdhg0,39,43,0|8rwdjz,39,43,0|8rwdk0,12,13,1|8xnpfz,12,13,1|8xnpg0,39,43,0|9aoavz,39,43,0|9aoaw0,12,13,1|9g2o3z,12,13,1|9g2o40,39,43,0|9t1evz,39,43,0|9t1ew0,12,13,1|9yfs3z,12,13,1|9yfs40,39,43,0|abrhjz,39,43,0|abrhk0,12,13,1|ahvs3z,12,13,1|ahvs40,39,43,0|fj087z,39,43,0|fj0880,12,13,1|fqkdfz,12,13,1|fqkdg0,39,43,0|g239jz,39,43,0|g239k0,12,13,1|g2g5fz,12,13,1|g2g5g0,39,43,0|gl6avz,39,43,0|gl6aw0,12,13,1|grnk3z,12,13,1|grnk40,39,43,0|NaN,39,43,0\",\"America/North_Dakota/Beulah|,0,149,0|-18y0j81,0,149,0|-18y0j80,44,62,0|-r0epo1,44,62,0|-r0epo0,47,63,1|-qplwg1,47,63,1|-qplwg0,44,62,0|-qhon01,44,62,0|-qhon00,47,63,1|-q6vts1,47,63,1|-q6vts0,44,62,0|-ek1z01,44,62,0|-ek1z00,57,63,1|-cq2tg1,57,63,1|-cq2tg0,58,63,1|-cnoxs1,58,63,1|-cnoxs0,44,62,0|-1e8kc1,44,62,0|-1e8kc0,47,63,1|-14vls1,47,63,1|-14vls0,44,62,0|-viho1,44,62,0|-viho0,47,63,1|-m5j41,47,63,1|-m5j40,44,62,0|-csf01,44,62,0|-csf00,47,63,1|-3fgg1,47,63,1|-3fgg0,44,62,0|5xnnz,44,62,0|5xno0,47,63,1|fam7z,47,63,1|fam80,44,62,0|onqbz,44,62,0|onqc0,47,63,1|ydnjz,47,63,1|ydnk0,44,62,0|17qrnz,44,62,0|17qro0,47,63,1|1h3q7z,47,63,1|1h3q80,44,62,0|1qgubz,44,62,0|1qguc0,47,63,1|1ztsvz,47,63,1|1ztsw0,44,62,0|23fibz,44,62,0|23fic0,47,63,1|2ijvjz,47,63,1|2ijvk0,44,62,0|2oobnz,44,62,0|2oobo0,47,63,1|319y7z,47,63,1|319y80,44,62,0|3an2bz,44,62,0|3an2c0,47,63,1|3kczjz,47,63,1|3kczk0,44,62,0|3td4zz,44,62,0|3td500,47,63,1|43327z,47,63,1|433280,44,62,0|4cg6bz,44,62,0|4cg6c0,47,63,1|4lt4vz,47,63,1|4lt4w0,44,62,0|4v68zz,44,62,0|4v6900,47,63,1|54j7jz,47,63,1|54j7k0,44,62,0|5dwbnz,44,62,0|5dwbo0,47,63,1|5n9a7z,47,63,1|5n9a80,44,62,0|5wmebz,44,62,0|5wmec0,47,63,1|65zcvz,47,63,1|65zcw0,44,62,0|6fcgzz,44,62,0|6fch00,47,63,1|6p2e7z,47,63,1|6p2e80,44,62,0|6y2jnz,44,62,0|6y2jo0,47,63,1|77sgvz,47,63,1|77sgw0,44,62,0|7h5kzz,44,62,0|7h5l00,47,63,1|7qijjz,47,63,1|7qijk0,44,62,0|7zvnnz,44,62,0|7zvno0,47,63,1|898m7z,47,63,1|898m80,44,62,0|8ilqbz,44,62,0|8ilqc0,47,63,1|8ryovz,47,63,1|8ryow0,44,62,0|908wzz,44,62,0|908x00,47,63,1|9aorjz,47,63,1|9aork0,44,62,0|9iyznz,44,62,0|9iyzo0,47,63,1|9trsvz,47,63,1|9trsw0,44,62,0|a1p2bz,44,62,0|a1p2c0,47,63,1|achvjz,47,63,1|achvk0,44,62,0|akf4zz,44,62,0|akf500,47,63,1|av7y7z,47,63,1|av7y80,44,62,0|b3i6bz,44,62,0|b3i6c0,47,63,1|bdy0vz,47,63,1|bdy0w0,44,62,0|bm88zz,44,62,0|bm8900,47,63,1|bwo3jz,47,63,1|bwo3k0,44,62,0|c4ybnz,44,62,0|c4ybo0,47,63,1|cfr4vz,47,63,1|cfr4w0,44,62,0|cnoebz,44,62,0|cnoec0,47,63,1|cyh7jz,47,63,1|cyh7k0,44,62,0|d6egzz,44,62,0|d6eh00,47,63,1|dh7a7z,47,63,1|dh7a80,44,62,0|dphibz,44,62,0|dphic0,47,63,1|dzxcvz,47,63,1|dzxcw0,44,62,0|e87kzz,44,62,0|e87l00,47,63,1|einfjz,47,63,1|einfk0,44,62,0|eqxnnz,44,62,0|eqxno0,47,63,1|f1di7z,47,63,1|f1di80,44,62,0|f9nqbz,44,62,0|f9nqc0,47,63,1|fkgjjz,47,63,1|fkgjk0,44,62,0|fsdszz,44,62,0|fsdt00,47,63,1|g36m7z,47,63,1|g36m80,44,62,0|gb3vnz,44,62,0|gb3vo0,47,63,1|glwovz,47,63,1|glwow0,44,62,0|gu6wzz,44,62,0|gu6x00,47,63,1|h4mrjz,47,63,1|h4mrk0,44,62,0|hcwznz,44,62,0|hcwzo0,47,63,1|hncu7z,47,63,1|hncu80,44,62,0|hvn2bz,44,62,0|hvn2c0,47,63,1|i6fvjz,47,63,1|i6fvk0,44,62,0|ied4zz,44,62,0|ied500,47,63,1|ip5y7z,47,63,1|ip5y80,44,62,0|ix37nz,44,62,0|ix37o0,47,63,1|j7w0vz,47,63,1|j7w0w0,44,62,0|jeqebz,44,62,0|jeqec0,47,63,1|jqz27z,47,63,1|jqz280,44,62,0|jxggzz,44,62,0|jxgh00,47,63,1|k9p4vz,47,63,1|k9p4w0,44,62,0|kg6jnz,44,62,0|kg6jo0,47,63,1|ksf7jz,47,63,1|ksf7k0,44,62,0|kz9kzz,44,62,0|kz9l00,47,63,1|lbi8vz,47,63,1|lbi8w0,45,63,0|lhzkvz,45,63,0|lhzkw0,48,59,1|lu88rz,48,59,1|lu88s0,45,63,0|m0pnjz,45,63,0|m0pnk0,48,59,1|mcybfz,48,59,1|mcybg0,45,63,0|mjfq7z,45,63,0|mjfq80,48,59,1|mvoe3z,48,59,1|mvoe40,45,63,0|n25svz,45,63,0|n25sw0,48,59,1|neegrz,48,59,1|neegs0,45,63,0|nkvvjz,45,63,0|nkvvk0,48,59,1|nx4jfz,48,59,1|nx4jg0,45,63,0|o3ywvz,45,63,0|o3yww0,48,59,1|og7krz,48,59,1|og7ks0,45,63,0|omozjz,45,63,0|omozk0,48,59,1|oyxnfz,48,59,1|oyxng0,45,63,0|p5f27z,45,63,0|p5f280,48,59,1|phnq3z,48,59,1|phnq40,45,63,0|po54vz,45,63,0|po54w0,48,59,1|q0dsrz,48,59,1|q0dss0,45,63,0|q6v7jz,45,63,0|q6v7k0,48,59,1|qj3vfz,48,59,1|qj3vg0,45,63,0|qpy8vz,45,63,0|qpy8w0,48,59,1|r26wrz,48,59,1|r26ws0,45,63,0|r8objz,45,63,0|r8obk0,48,59,1|rkwzfz,48,59,1|rkwzg0,45,63,0|rree7z,45,63,0|rree80,48,59,1|s3n23z,48,59,1|s3n240,45,63,0|sa4gvz,45,63,0|sa4gw0,48,59,1|smd4rz,48,59,1|smd4s0,45,63,0|ssujjz,45,63,0|ssujk0,48,59,1|t537fz,48,59,1|t537g0,45,63,0|tbkm7z,45,63,0|tbkm80,48,59,1|tnta3z,48,59,1|tnta40,45,63,0|tunnjz,45,63,0|tunnk0,48,59,1|u6wbfz,48,59,1|u6wbg0,45,63,0|uddq7z,45,63,0|uddq80,48,59,1|upme3z,48,59,1|upme40,45,63,0|uw3svz,45,63,0|uw3sw0,48,59,1|v8cgrz,48,59,1|v8cgs0,45,63,0|vetvjz,45,63,0|vetvk0,48,59,1|vr2jfz,48,59,1|vr2jg0,45,63,0|vxjy7z,45,63,0|vxjy80,48,59,1|w9sm3z,48,59,1|w9sm40,45,63,0|wgmzjz,45,63,0|wgmzk0,48,59,1|wsvnfz,48,59,1|wsvng0,45,63,0|wzd27z,45,63,0|wzd280,48,59,1|xblq3z,48,59,1|xblq40,45,63,0|xi34vz,45,63,0|xi34w0,48,59,1|xubsrz,48,59,1|xubss0,45,63,0|y0t7jz,45,63,0|y0t7k0,48,59,1|yd1vfz,48,59,1|yd1vg0,45,63,0|yjja7z,45,63,0|yjja80,48,59,1|yvry3z,48,59,1|yvry40,45,63,0|z29cvz,45,63,0|z29cw0,48,59,1|zei0rz,48,59,1|zei0s0,45,63,0|zlce7z,45,63,0|zlce80,48,59,1|zxl23z,48,59,1|zxl240,45,63,0|1042gvz,45,63,0|1042gw0,48,59,1|10gb4rz,48,59,1|10gb4s0,45,63,0|10msjjz,45,63,0|10msjk0,48,59,1|10z17fz,48,59,1|10z17g0,45,63,0|115im7z,45,63,0|115im80,48,59,1|11hra3z,48,59,1|11hra40,45,63,0|11o8ovz,45,63,0|11o8ow0,48,59,1|120hcrz,48,59,1|120hcs0,45,63,0|126yrjz,45,63,0|126yrk0,48,59,1|12j7ffz,48,59,1|12j7fg0,45,63,0|12q1svz,45,63,0|12q1sw0,48,59,1|132agrz,48,59,1|132ags0,45,63,0|138rvjz,45,63,0|138rvk0,48,59,1|13l0jfz,48,59,1|13l0jg0,45,63,0|13rhy7z,45,63,0|13rhy80,48,59,1|143qm3z,48,59,1|143qm40,45,63,0|14a80vz,45,63,0|14a80w0,48,59,1|14mgorz,48,59,1|14mgos0,45,63,0|14sy3jz,45,63,0|14sy3k0,48,59,1|1556rfz,48,59,1|1556rg0,45,63,0|15c14vz,45,63,0|15c14w0,48,59,1|15o9srz,48,59,1|15o9ss0,45,63,0|15ur7jz,45,63,0|15ur7k0,48,59,1|166zvfz,48,59,1|166zvg0,45,63,0|16dha7z,45,63,0|16dha80,48,59,1|16ppy3z,48,59,1|16ppy40,45,63,0|16w7cvz,45,63,0|16w7cw0,48,59,1|178g0rz,48,59,1|178g0s0,45,63,0|17exfjz,45,63,0|17exfk0,48,59,1|17r63fz,48,59,1|17r63g0,45,63,0|17xni7z,45,63,0|17xni80,48,59,1|189w63z,48,59,1|189w640,45,63,0|18gqjjz,45,63,0|18gqjk0,48,59,1|18sz7fz,48,59,1|18sz7g0,45,63,0|18zgm7z,45,63,0|18zgm80,48,59,1|19bpa3z,48,59,1|19bpa40,45,63,0|19i6ovz,45,63,0|19i6ow0,48,59,1|19ufcrz,48,59,1|19ufcs0,45,63,0|1a0wrjz,45,63,0|1a0wrk0,48,59,1|1ad5ffz,48,59,1|1ad5fg0,45,63,0|1ajmu7z,45,63,0|1ajmu80,48,59,1|1avvi3z,48,59,1|1avvi40,45,63,0|1b2pvjz,45,63,0|1b2pvk0,48,59,1|1beyjfz,48,59,1|1beyjg0,45,63,0|1blfy7z,45,63,0|1blfy80,48,59,1|1bxom3z,48,59,1|1bxom40,45,63,0|1c460vz,45,63,0|1c460w0,48,59,1|1cgeorz,48,59,1|1cgeos0,45,63,0|1cmw3jz,45,63,0|1cmw3k0,48,59,1|1cz4rfz,48,59,1|1cz4rg0,45,63,0|1d5m67z,45,63,0|1d5m680,48,59,1|1dhuu3z,48,59,1|1dhuu40,45,63,0|1doc8vz,45,63,0|1doc8w0,48,59,1|1e0kwrz,48,59,1|1e0kws0,45,63,0|1e7fa7z,45,63,0|1e7fa80,48,59,1|1ejny3z,48,59,1|1ejny40,45,63,0|1eq5cvz,45,63,0|1eq5cw0,48,59,1|1f2e0rz,48,59,1|1f2e0s0,45,63,0|1f8vfjz,45,63,0|1f8vfk0,48,59,1|1fl43fz,48,59,1|1fl43g0,45,63,0|1frli7z,45,63,0|1frli80,48,59,1|1g3u63z,48,59,1|1g3u640,45,63,0|1gabkvz,45,63,0|1gabkw0,48,59,1|1gmk8rz,48,59,1|1gmk8s0,45,63,0|1gt1njz,45,63,0|1gt1nk0,48,59,1|1h5abfz,48,59,1|1h5abg0,45,63,0|1hc4ovz,45,63,0|1hc4ow0,48,59,1|1hodcrz,48,59,1|1hodcs0,45,63,0|1huurjz,45,63,0|1huurk0,48,59,1|1i73ffz,48,59,1|1i73fg0,45,63,0|1idku7z,45,63,0|1idku80,48,59,1|1ipti3z,48,59,1|1ipti40,45,63,0|1iwawvz,45,63,0|1iwaww0,48,59,1|1j8jkrz,48,59,1|1j8jks0,45,63,0|1jf0zjz,45,63,0|1jf0zk0,48,59,1|1jr9nfz,48,59,1|1jr9ng0,45,63,0|1jy40vz,45,63,0|1jy40w0,48,59,1|1kacorz,48,59,1|1kacos0,45,63,0|1kgu3jz,45,63,0|1kgu3k0,48,59,1|1kt2rfz,48,59,1|1kt2rg0,45,63,0|1kzk67z,45,63,0|1kzk680,48,59,1|1lbsu3z,48,59,1|1lbsu40,45,63,0|1lia8vz,45,63,0|1lia8w0,48,59,1|1luiwrz,48,59,1|1luiws0,45,63,0|1m10bjz,45,63,0|1m10bk0,48,59,1|1md8zfz,48,59,1|1md8zg0,45,63,0|1mjqe7z,45,63,0|1mjqe80,48,59,1|1mvz23z,48,59,1|1mvz240,45,63,0|1n2tfjz,45,63,0|1n2tfk0,48,59,1|1nf23fz,48,59,1|1nf23g0,45,63,0|1nlji7z,45,63,0|1nlji80,48,59,1|1nxs63z,48,59,1|1nxs640,45,63,0|1o49kvz,45,63,0|1o49kw0,48,59,1|1ogi8rz,48,59,1|1ogi8s0,45,63,0|1omznjz,45,63,0|1omznk0,48,59,1|1oz8bfz,48,59,1|1oz8bg0,45,63,0|1p5pq7z,45,63,0|1p5pq80,48,59,1|1phye3z,48,59,1|1phye40,45,63,0|1posrjz,45,63,0|1posrk0,48,59,1|1q11ffz,48,59,1|1q11fg0,45,63,0|1q7iu7z,45,63,0|1q7iu80,48,59,1|1qjri3z,48,59,1|1qjri40,45,63,0|1qq8wvz,45,63,0|1qq8ww0,48,59,1|1r2hkrz,48,59,1|1r2hks0,45,63,0|1r8yzjz,45,63,0|1r8yzk0,48,59,1|1rl7nfz,48,59,1|1rl7ng0,45,63,0|1rrp27z,45,63,0|1rrp280,48,59,1|1s3xq3z,48,59,1|1s3xq40,45,63,0|1saf4vz,45,63,0|1saf4w0,48,59,1|1smnsrz,48,59,1|1smnss0,45,63,0|1sti67z,45,63,0|1sti680,48,59,1|1t5qu3z,48,59,1|1t5qu40,45,63,0|1tc88vz,45,63,0|1tc88w0,48,59,1|1togwrz,48,59,1|1togws0,45,63,0|1tuybjz,45,63,0|1tuybk0,48,59,1|1u76zfz,48,59,1|1u76zg0,45,63,0|1udoe7z,45,63,0|1udoe80,48,59,1|1upx23z,48,59,1|1upx240,45,63,0|1uwegvz,45,63,0|1uwegw0,48,59,1|1v8n4rz,48,59,1|1v8n4s0,45,63,0|1vf4jjz,45,63,0|1vf4jk0,48,59,1|1vrd7fz,48,59,1|1vrd7g0,45,63,0|NaN,45,63,0\",\"America/North_Dakota/Center|,0,150,0|-18y0j81,0,150,0|-18y0j80,44,62,0|-r0epo1,44,62,0|-r0epo0,47,63,1|-qplwg1,47,63,1|-qplwg0,44,62,0|-qhon01,44,62,0|-qhon00,47,63,1|-q6vts1,47,63,1|-q6vts0,44,62,0|-ek1z01,44,62,0|-ek1z00,57,63,1|-cq2tg1,57,63,1|-cq2tg0,58,63,1|-cnoxs1,58,63,1|-cnoxs0,44,62,0|-1e8kc1,44,62,0|-1e8kc0,47,63,1|-14vls1,47,63,1|-14vls0,44,62,0|-viho1,44,62,0|-viho0,47,63,1|-m5j41,47,63,1|-m5j40,44,62,0|-csf01,44,62,0|-csf00,47,63,1|-3fgg1,47,63,1|-3fgg0,44,62,0|5xnnz,44,62,0|5xno0,47,63,1|fam7z,47,63,1|fam80,44,62,0|onqbz,44,62,0|onqc0,47,63,1|ydnjz,47,63,1|ydnk0,44,62,0|17qrnz,44,62,0|17qro0,47,63,1|1h3q7z,47,63,1|1h3q80,44,62,0|1qgubz,44,62,0|1qguc0,47,63,1|1ztsvz,47,63,1|1ztsw0,44,62,0|23fibz,44,62,0|23fic0,47,63,1|2ijvjz,47,63,1|2ijvk0,44,62,0|2oobnz,44,62,0|2oobo0,47,63,1|319y7z,47,63,1|319y80,44,62,0|3an2bz,44,62,0|3an2c0,47,63,1|3kczjz,47,63,1|3kczk0,44,62,0|3td4zz,44,62,0|3td500,47,63,1|43327z,47,63,1|433280,44,62,0|4cg6bz,44,62,0|4cg6c0,47,63,1|4lt4vz,47,63,1|4lt4w0,44,62,0|4v68zz,44,62,0|4v6900,47,63,1|54j7jz,47,63,1|54j7k0,44,62,0|5dwbnz,44,62,0|5dwbo0,47,63,1|5n9a7z,47,63,1|5n9a80,44,62,0|5wmebz,44,62,0|5wmec0,47,63,1|65zcvz,47,63,1|65zcw0,44,62,0|6fcgzz,44,62,0|6fch00,47,63,1|6p2e7z,47,63,1|6p2e80,44,62,0|6y2jnz,44,62,0|6y2jo0,47,63,1|77sgvz,47,63,1|77sgw0,44,62,0|7h5kzz,44,62,0|7h5l00,47,63,1|7qijjz,47,63,1|7qijk0,44,62,0|7zvnnz,44,62,0|7zvno0,47,63,1|898m7z,47,63,1|898m80,44,62,0|8ilqbz,44,62,0|8ilqc0,47,63,1|8ryovz,47,63,1|8ryow0,44,62,0|908wzz,44,62,0|908x00,47,63,1|9aorjz,47,63,1|9aork0,44,62,0|9iyznz,44,62,0|9iyzo0,47,63,1|9trsvz,47,63,1|9trsw0,44,62,0|a1p2bz,44,62,0|a1p2c0,47,63,1|achvjz,47,63,1|achvk0,44,62,0|akf4zz,44,62,0|akf500,47,63,1|av7y7z,47,63,1|av7y80,44,62,0|b3i6bz,44,62,0|b3i6c0,47,63,1|bdy0vz,47,63,1|bdy0w0,44,62,0|bm88zz,44,62,0|bm8900,47,63,1|bwo3jz,47,63,1|bwo3k0,45,63,0|c4y8vz,45,63,0|c4y8w0,48,59,1|cfr23z,48,59,1|cfr240,45,63,0|cnobjz,45,63,0|cnobk0,48,59,1|cyh4rz,48,59,1|cyh4s0,45,63,0|d6ee7z,45,63,0|d6ee80,48,59,1|dh77fz,48,59,1|dh77g0,45,63,0|dphfjz,45,63,0|dphfk0,48,59,1|dzxa3z,48,59,1|dzxa40,45,63,0|e87i7z,45,63,0|e87i80,48,59,1|eincrz,48,59,1|eincs0,45,63,0|eqxkvz,45,63,0|eqxkw0,48,59,1|f1dffz,48,59,1|f1dfg0,45,63,0|f9nnjz,45,63,0|f9nnk0,48,59,1|fkggrz,48,59,1|fkggs0,45,63,0|fsdq7z,45,63,0|fsdq80,48,59,1|g36jfz,48,59,1|g36jg0,45,63,0|gb3svz,45,63,0|gb3sw0,48,59,1|glwm3z,48,59,1|glwm40,45,63,0|gu6u7z,45,63,0|gu6u80,48,59,1|h4morz,48,59,1|h4mos0,45,63,0|hcwwvz,45,63,0|hcwww0,48,59,1|hncrfz,48,59,1|hncrg0,45,63,0|hvmzjz,45,63,0|hvmzk0,48,59,1|i6fsrz,48,59,1|i6fss0,45,63,0|ied27z,45,63,0|ied280,48,59,1|ip5vfz,48,59,1|ip5vg0,45,63,0|ix34vz,45,63,0|ix34w0,48,59,1|j7vy3z,48,59,1|j7vy40,45,63,0|jeqbjz,45,63,0|jeqbk0,48,59,1|jqyzfz,48,59,1|jqyzg0,45,63,0|jxge7z,45,63,0|jxge80,48,59,1|k9p23z,48,59,1|k9p240,45,63,0|kg6gvz,45,63,0|kg6gw0,48,59,1|ksf4rz,48,59,1|ksf4s0,45,63,0|kz9i7z,45,63,0|kz9i80,48,59,1|lbi63z,48,59,1|lbi640,45,63,0|lhzkvz,45,63,0|lhzkw0,48,59,1|lu88rz,48,59,1|lu88s0,45,63,0|m0pnjz,45,63,0|m0pnk0,48,59,1|mcybfz,48,59,1|mcybg0,45,63,0|mjfq7z,45,63,0|mjfq80,48,59,1|mvoe3z,48,59,1|mvoe40,45,63,0|n25svz,45,63,0|n25sw0,48,59,1|neegrz,48,59,1|neegs0,45,63,0|nkvvjz,45,63,0|nkvvk0,48,59,1|nx4jfz,48,59,1|nx4jg0,45,63,0|o3ywvz,45,63,0|o3yww0,48,59,1|og7krz,48,59,1|og7ks0,45,63,0|omozjz,45,63,0|omozk0,48,59,1|oyxnfz,48,59,1|oyxng0,45,63,0|p5f27z,45,63,0|p5f280,48,59,1|phnq3z,48,59,1|phnq40,45,63,0|po54vz,45,63,0|po54w0,48,59,1|q0dsrz,48,59,1|q0dss0,45,63,0|q6v7jz,45,63,0|q6v7k0,48,59,1|qj3vfz,48,59,1|qj3vg0,45,63,0|qpy8vz,45,63,0|qpy8w0,48,59,1|r26wrz,48,59,1|r26ws0,45,63,0|r8objz,45,63,0|r8obk0,48,59,1|rkwzfz,48,59,1|rkwzg0,45,63,0|rree7z,45,63,0|rree80,48,59,1|s3n23z,48,59,1|s3n240,45,63,0|sa4gvz,45,63,0|sa4gw0,48,59,1|smd4rz,48,59,1|smd4s0,45,63,0|ssujjz,45,63,0|ssujk0,48,59,1|t537fz,48,59,1|t537g0,45,63,0|tbkm7z,45,63,0|tbkm80,48,59,1|tnta3z,48,59,1|tnta40,45,63,0|tunnjz,45,63,0|tunnk0,48,59,1|u6wbfz,48,59,1|u6wbg0,45,63,0|uddq7z,45,63,0|uddq80,48,59,1|upme3z,48,59,1|upme40,45,63,0|uw3svz,45,63,0|uw3sw0,48,59,1|v8cgrz,48,59,1|v8cgs0,45,63,0|vetvjz,45,63,0|vetvk0,48,59,1|vr2jfz,48,59,1|vr2jg0,45,63,0|vxjy7z,45,63,0|vxjy80,48,59,1|w9sm3z,48,59,1|w9sm40,45,63,0|wgmzjz,45,63,0|wgmzk0,48,59,1|wsvnfz,48,59,1|wsvng0,45,63,0|wzd27z,45,63,0|wzd280,48,59,1|xblq3z,48,59,1|xblq40,45,63,0|xi34vz,45,63,0|xi34w0,48,59,1|xubsrz,48,59,1|xubss0,45,63,0|y0t7jz,45,63,0|y0t7k0,48,59,1|yd1vfz,48,59,1|yd1vg0,45,63,0|yjja7z,45,63,0|yjja80,48,59,1|yvry3z,48,59,1|yvry40,45,63,0|z29cvz,45,63,0|z29cw0,48,59,1|zei0rz,48,59,1|zei0s0,45,63,0|zlce7z,45,63,0|zlce80,48,59,1|zxl23z,48,59,1|zxl240,45,63,0|1042gvz,45,63,0|1042gw0,48,59,1|10gb4rz,48,59,1|10gb4s0,45,63,0|10msjjz,45,63,0|10msjk0,48,59,1|10z17fz,48,59,1|10z17g0,45,63,0|115im7z,45,63,0|115im80,48,59,1|11hra3z,48,59,1|11hra40,45,63,0|11o8ovz,45,63,0|11o8ow0,48,59,1|120hcrz,48,59,1|120hcs0,45,63,0|126yrjz,45,63,0|126yrk0,48,59,1|12j7ffz,48,59,1|12j7fg0,45,63,0|12q1svz,45,63,0|12q1sw0,48,59,1|132agrz,48,59,1|132ags0,45,63,0|138rvjz,45,63,0|138rvk0,48,59,1|13l0jfz,48,59,1|13l0jg0,45,63,0|13rhy7z,45,63,0|13rhy80,48,59,1|143qm3z,48,59,1|143qm40,45,63,0|14a80vz,45,63,0|14a80w0,48,59,1|14mgorz,48,59,1|14mgos0,45,63,0|14sy3jz,45,63,0|14sy3k0,48,59,1|1556rfz,48,59,1|1556rg0,45,63,0|15c14vz,45,63,0|15c14w0,48,59,1|15o9srz,48,59,1|15o9ss0,45,63,0|15ur7jz,45,63,0|15ur7k0,48,59,1|166zvfz,48,59,1|166zvg0,45,63,0|16dha7z,45,63,0|16dha80,48,59,1|16ppy3z,48,59,1|16ppy40,45,63,0|16w7cvz,45,63,0|16w7cw0,48,59,1|178g0rz,48,59,1|178g0s0,45,63,0|17exfjz,45,63,0|17exfk0,48,59,1|17r63fz,48,59,1|17r63g0,45,63,0|17xni7z,45,63,0|17xni80,48,59,1|189w63z,48,59,1|189w640,45,63,0|18gqjjz,45,63,0|18gqjk0,48,59,1|18sz7fz,48,59,1|18sz7g0,45,63,0|18zgm7z,45,63,0|18zgm80,48,59,1|19bpa3z,48,59,1|19bpa40,45,63,0|19i6ovz,45,63,0|19i6ow0,48,59,1|19ufcrz,48,59,1|19ufcs0,45,63,0|1a0wrjz,45,63,0|1a0wrk0,48,59,1|1ad5ffz,48,59,1|1ad5fg0,45,63,0|1ajmu7z,45,63,0|1ajmu80,48,59,1|1avvi3z,48,59,1|1avvi40,45,63,0|1b2pvjz,45,63,0|1b2pvk0,48,59,1|1beyjfz,48,59,1|1beyjg0,45,63,0|1blfy7z,45,63,0|1blfy80,48,59,1|1bxom3z,48,59,1|1bxom40,45,63,0|1c460vz,45,63,0|1c460w0,48,59,1|1cgeorz,48,59,1|1cgeos0,45,63,0|1cmw3jz,45,63,0|1cmw3k0,48,59,1|1cz4rfz,48,59,1|1cz4rg0,45,63,0|1d5m67z,45,63,0|1d5m680,48,59,1|1dhuu3z,48,59,1|1dhuu40,45,63,0|1doc8vz,45,63,0|1doc8w0,48,59,1|1e0kwrz,48,59,1|1e0kws0,45,63,0|1e7fa7z,45,63,0|1e7fa80,48,59,1|1ejny3z,48,59,1|1ejny40,45,63,0|1eq5cvz,45,63,0|1eq5cw0,48,59,1|1f2e0rz,48,59,1|1f2e0s0,45,63,0|1f8vfjz,45,63,0|1f8vfk0,48,59,1|1fl43fz,48,59,1|1fl43g0,45,63,0|1frli7z,45,63,0|1frli80,48,59,1|1g3u63z,48,59,1|1g3u640,45,63,0|1gabkvz,45,63,0|1gabkw0,48,59,1|1gmk8rz,48,59,1|1gmk8s0,45,63,0|1gt1njz,45,63,0|1gt1nk0,48,59,1|1h5abfz,48,59,1|1h5abg0,45,63,0|1hc4ovz,45,63,0|1hc4ow0,48,59,1|1hodcrz,48,59,1|1hodcs0,45,63,0|1huurjz,45,63,0|1huurk0,48,59,1|1i73ffz,48,59,1|1i73fg0,45,63,0|1idku7z,45,63,0|1idku80,48,59,1|1ipti3z,48,59,1|1ipti40,45,63,0|1iwawvz,45,63,0|1iwaww0,48,59,1|1j8jkrz,48,59,1|1j8jks0,45,63,0|1jf0zjz,45,63,0|1jf0zk0,48,59,1|1jr9nfz,48,59,1|1jr9ng0,45,63,0|1jy40vz,45,63,0|1jy40w0,48,59,1|1kacorz,48,59,1|1kacos0,45,63,0|1kgu3jz,45,63,0|1kgu3k0,48,59,1|1kt2rfz,48,59,1|1kt2rg0,45,63,0|1kzk67z,45,63,0|1kzk680,48,59,1|1lbsu3z,48,59,1|1lbsu40,45,63,0|1lia8vz,45,63,0|1lia8w0,48,59,1|1luiwrz,48,59,1|1luiws0,45,63,0|1m10bjz,45,63,0|1m10bk0,48,59,1|1md8zfz,48,59,1|1md8zg0,45,63,0|1mjqe7z,45,63,0|1mjqe80,48,59,1|1mvz23z,48,59,1|1mvz240,45,63,0|1n2tfjz,45,63,0|1n2tfk0,48,59,1|1nf23fz,48,59,1|1nf23g0,45,63,0|1nlji7z,45,63,0|1nlji80,48,59,1|1nxs63z,48,59,1|1nxs640,45,63,0|1o49kvz,45,63,0|1o49kw0,48,59,1|1ogi8rz,48,59,1|1ogi8s0,45,63,0|1omznjz,45,63,0|1omznk0,48,59,1|1oz8bfz,48,59,1|1oz8bg0,45,63,0|1p5pq7z,45,63,0|1p5pq80,48,59,1|1phye3z,48,59,1|1phye40,45,63,0|1posrjz,45,63,0|1posrk0,48,59,1|1q11ffz,48,59,1|1q11fg0,45,63,0|1q7iu7z,45,63,0|1q7iu80,48,59,1|1qjri3z,48,59,1|1qjri40,45,63,0|1qq8wvz,45,63,0|1qq8ww0,48,59,1|1r2hkrz,48,59,1|1r2hks0,45,63,0|1r8yzjz,45,63,0|1r8yzk0,48,59,1|1rl7nfz,48,59,1|1rl7ng0,45,63,0|1rrp27z,45,63,0|1rrp280,48,59,1|1s3xq3z,48,59,1|1s3xq40,45,63,0|1saf4vz,45,63,0|1saf4w0,48,59,1|1smnsrz,48,59,1|1smnss0,45,63,0|1sti67z,45,63,0|1sti680,48,59,1|1t5qu3z,48,59,1|1t5qu40,45,63,0|1tc88vz,45,63,0|1tc88w0,48,59,1|1togwrz,48,59,1|1togws0,45,63,0|1tuybjz,45,63,0|1tuybk0,48,59,1|1u76zfz,48,59,1|1u76zg0,45,63,0|1udoe7z,45,63,0|1udoe80,48,59,1|1upx23z,48,59,1|1upx240,45,63,0|1uwegvz,45,63,0|1uwegw0,48,59,1|1v8n4rz,48,59,1|1v8n4s0,45,63,0|1vf4jjz,45,63,0|1vf4jk0,48,59,1|1vrd7fz,48,59,1|1vrd7g0,45,63,0|NaN,45,63,0\",\"America/North_Dakota/New_Salem|,0,151,0|-18y0j81,0,151,0|-18y0j80,44,62,0|-r0epo1,44,62,0|-r0epo0,47,63,1|-qplwg1,47,63,1|-qplwg0,44,62,0|-qhon01,44,62,0|-qhon00,47,63,1|-q6vts1,47,63,1|-q6vts0,44,62,0|-ek1z01,44,62,0|-ek1z00,57,63,1|-cq2tg1,57,63,1|-cq2tg0,58,63,1|-cnoxs1,58,63,1|-cnoxs0,44,62,0|-1e8kc1,44,62,0|-1e8kc0,47,63,1|-14vls1,47,63,1|-14vls0,44,62,0|-viho1,44,62,0|-viho0,47,63,1|-m5j41,47,63,1|-m5j40,44,62,0|-csf01,44,62,0|-csf00,47,63,1|-3fgg1,47,63,1|-3fgg0,44,62,0|5xnnz,44,62,0|5xno0,47,63,1|fam7z,47,63,1|fam80,44,62,0|onqbz,44,62,0|onqc0,47,63,1|ydnjz,47,63,1|ydnk0,44,62,0|17qrnz,44,62,0|17qro0,47,63,1|1h3q7z,47,63,1|1h3q80,44,62,0|1qgubz,44,62,0|1qguc0,47,63,1|1ztsvz,47,63,1|1ztsw0,44,62,0|23fibz,44,62,0|23fic0,47,63,1|2ijvjz,47,63,1|2ijvk0,44,62,0|2oobnz,44,62,0|2oobo0,47,63,1|319y7z,47,63,1|319y80,44,62,0|3an2bz,44,62,0|3an2c0,47,63,1|3kczjz,47,63,1|3kczk0,44,62,0|3td4zz,44,62,0|3td500,47,63,1|43327z,47,63,1|433280,44,62,0|4cg6bz,44,62,0|4cg6c0,47,63,1|4lt4vz,47,63,1|4lt4w0,44,62,0|4v68zz,44,62,0|4v6900,47,63,1|54j7jz,47,63,1|54j7k0,44,62,0|5dwbnz,44,62,0|5dwbo0,47,63,1|5n9a7z,47,63,1|5n9a80,44,62,0|5wmebz,44,62,0|5wmec0,47,63,1|65zcvz,47,63,1|65zcw0,44,62,0|6fcgzz,44,62,0|6fch00,47,63,1|6p2e7z,47,63,1|6p2e80,44,62,0|6y2jnz,44,62,0|6y2jo0,47,63,1|77sgvz,47,63,1|77sgw0,44,62,0|7h5kzz,44,62,0|7h5l00,47,63,1|7qijjz,47,63,1|7qijk0,44,62,0|7zvnnz,44,62,0|7zvno0,47,63,1|898m7z,47,63,1|898m80,44,62,0|8ilqbz,44,62,0|8ilqc0,47,63,1|8ryovz,47,63,1|8ryow0,44,62,0|908wzz,44,62,0|908x00,47,63,1|9aorjz,47,63,1|9aork0,44,62,0|9iyznz,44,62,0|9iyzo0,47,63,1|9trsvz,47,63,1|9trsw0,44,62,0|a1p2bz,44,62,0|a1p2c0,47,63,1|achvjz,47,63,1|achvk0,44,62,0|akf4zz,44,62,0|akf500,47,63,1|av7y7z,47,63,1|av7y80,44,62,0|b3i6bz,44,62,0|b3i6c0,47,63,1|bdy0vz,47,63,1|bdy0w0,44,62,0|bm88zz,44,62,0|bm8900,47,63,1|bwo3jz,47,63,1|bwo3k0,44,62,0|c4ybnz,44,62,0|c4ybo0,47,63,1|cfr4vz,47,63,1|cfr4w0,44,62,0|cnoebz,44,62,0|cnoec0,47,63,1|cyh7jz,47,63,1|cyh7k0,44,62,0|d6egzz,44,62,0|d6eh00,47,63,1|dh7a7z,47,63,1|dh7a80,44,62,0|dphibz,44,62,0|dphic0,47,63,1|dzxcvz,47,63,1|dzxcw0,44,62,0|e87kzz,44,62,0|e87l00,47,63,1|einfjz,47,63,1|einfk0,44,62,0|eqxnnz,44,62,0|eqxno0,47,63,1|f1di7z,47,63,1|f1di80,44,62,0|f9nqbz,44,62,0|f9nqc0,47,63,1|fkgjjz,47,63,1|fkgjk0,44,62,0|fsdszz,44,62,0|fsdt00,47,63,1|g36m7z,47,63,1|g36m80,44,62,0|gb3vnz,44,62,0|gb3vo0,47,63,1|glwovz,47,63,1|glwow0,44,62,0|gu6wzz,44,62,0|gu6x00,47,63,1|h4mrjz,47,63,1|h4mrk0,44,62,0|hcwznz,44,62,0|hcwzo0,47,63,1|hncu7z,47,63,1|hncu80,45,63,0|hvmzjz,45,63,0|hvmzk0,48,59,1|i6fsrz,48,59,1|i6fss0,45,63,0|ied27z,45,63,0|ied280,48,59,1|ip5vfz,48,59,1|ip5vg0,45,63,0|ix34vz,45,63,0|ix34w0,48,59,1|j7vy3z,48,59,1|j7vy40,45,63,0|jeqbjz,45,63,0|jeqbk0,48,59,1|jqyzfz,48,59,1|jqyzg0,45,63,0|jxge7z,45,63,0|jxge80,48,59,1|k9p23z,48,59,1|k9p240,45,63,0|kg6gvz,45,63,0|kg6gw0,48,59,1|ksf4rz,48,59,1|ksf4s0,45,63,0|kz9i7z,45,63,0|kz9i80,48,59,1|lbi63z,48,59,1|lbi640,45,63,0|lhzkvz,45,63,0|lhzkw0,48,59,1|lu88rz,48,59,1|lu88s0,45,63,0|m0pnjz,45,63,0|m0pnk0,48,59,1|mcybfz,48,59,1|mcybg0,45,63,0|mjfq7z,45,63,0|mjfq80,48,59,1|mvoe3z,48,59,1|mvoe40,45,63,0|n25svz,45,63,0|n25sw0,48,59,1|neegrz,48,59,1|neegs0,45,63,0|nkvvjz,45,63,0|nkvvk0,48,59,1|nx4jfz,48,59,1|nx4jg0,45,63,0|o3ywvz,45,63,0|o3yww0,48,59,1|og7krz,48,59,1|og7ks0,45,63,0|omozjz,45,63,0|omozk0,48,59,1|oyxnfz,48,59,1|oyxng0,45,63,0|p5f27z,45,63,0|p5f280,48,59,1|phnq3z,48,59,1|phnq40,45,63,0|po54vz,45,63,0|po54w0,48,59,1|q0dsrz,48,59,1|q0dss0,45,63,0|q6v7jz,45,63,0|q6v7k0,48,59,1|qj3vfz,48,59,1|qj3vg0,45,63,0|qpy8vz,45,63,0|qpy8w0,48,59,1|r26wrz,48,59,1|r26ws0,45,63,0|r8objz,45,63,0|r8obk0,48,59,1|rkwzfz,48,59,1|rkwzg0,45,63,0|rree7z,45,63,0|rree80,48,59,1|s3n23z,48,59,1|s3n240,45,63,0|sa4gvz,45,63,0|sa4gw0,48,59,1|smd4rz,48,59,1|smd4s0,45,63,0|ssujjz,45,63,0|ssujk0,48,59,1|t537fz,48,59,1|t537g0,45,63,0|tbkm7z,45,63,0|tbkm80,48,59,1|tnta3z,48,59,1|tnta40,45,63,0|tunnjz,45,63,0|tunnk0,48,59,1|u6wbfz,48,59,1|u6wbg0,45,63,0|uddq7z,45,63,0|uddq80,48,59,1|upme3z,48,59,1|upme40,45,63,0|uw3svz,45,63,0|uw3sw0,48,59,1|v8cgrz,48,59,1|v8cgs0,45,63,0|vetvjz,45,63,0|vetvk0,48,59,1|vr2jfz,48,59,1|vr2jg0,45,63,0|vxjy7z,45,63,0|vxjy80,48,59,1|w9sm3z,48,59,1|w9sm40,45,63,0|wgmzjz,45,63,0|wgmzk0,48,59,1|wsvnfz,48,59,1|wsvng0,45,63,0|wzd27z,45,63,0|wzd280,48,59,1|xblq3z,48,59,1|xblq40,45,63,0|xi34vz,45,63,0|xi34w0,48,59,1|xubsrz,48,59,1|xubss0,45,63,0|y0t7jz,45,63,0|y0t7k0,48,59,1|yd1vfz,48,59,1|yd1vg0,45,63,0|yjja7z,45,63,0|yjja80,48,59,1|yvry3z,48,59,1|yvry40,45,63,0|z29cvz,45,63,0|z29cw0,48,59,1|zei0rz,48,59,1|zei0s0,45,63,0|zlce7z,45,63,0|zlce80,48,59,1|zxl23z,48,59,1|zxl240,45,63,0|1042gvz,45,63,0|1042gw0,48,59,1|10gb4rz,48,59,1|10gb4s0,45,63,0|10msjjz,45,63,0|10msjk0,48,59,1|10z17fz,48,59,1|10z17g0,45,63,0|115im7z,45,63,0|115im80,48,59,1|11hra3z,48,59,1|11hra40,45,63,0|11o8ovz,45,63,0|11o8ow0,48,59,1|120hcrz,48,59,1|120hcs0,45,63,0|126yrjz,45,63,0|126yrk0,48,59,1|12j7ffz,48,59,1|12j7fg0,45,63,0|12q1svz,45,63,0|12q1sw0,48,59,1|132agrz,48,59,1|132ags0,45,63,0|138rvjz,45,63,0|138rvk0,48,59,1|13l0jfz,48,59,1|13l0jg0,45,63,0|13rhy7z,45,63,0|13rhy80,48,59,1|143qm3z,48,59,1|143qm40,45,63,0|14a80vz,45,63,0|14a80w0,48,59,1|14mgorz,48,59,1|14mgos0,45,63,0|14sy3jz,45,63,0|14sy3k0,48,59,1|1556rfz,48,59,1|1556rg0,45,63,0|15c14vz,45,63,0|15c14w0,48,59,1|15o9srz,48,59,1|15o9ss0,45,63,0|15ur7jz,45,63,0|15ur7k0,48,59,1|166zvfz,48,59,1|166zvg0,45,63,0|16dha7z,45,63,0|16dha80,48,59,1|16ppy3z,48,59,1|16ppy40,45,63,0|16w7cvz,45,63,0|16w7cw0,48,59,1|178g0rz,48,59,1|178g0s0,45,63,0|17exfjz,45,63,0|17exfk0,48,59,1|17r63fz,48,59,1|17r63g0,45,63,0|17xni7z,45,63,0|17xni80,48,59,1|189w63z,48,59,1|189w640,45,63,0|18gqjjz,45,63,0|18gqjk0,48,59,1|18sz7fz,48,59,1|18sz7g0,45,63,0|18zgm7z,45,63,0|18zgm80,48,59,1|19bpa3z,48,59,1|19bpa40,45,63,0|19i6ovz,45,63,0|19i6ow0,48,59,1|19ufcrz,48,59,1|19ufcs0,45,63,0|1a0wrjz,45,63,0|1a0wrk0,48,59,1|1ad5ffz,48,59,1|1ad5fg0,45,63,0|1ajmu7z,45,63,0|1ajmu80,48,59,1|1avvi3z,48,59,1|1avvi40,45,63,0|1b2pvjz,45,63,0|1b2pvk0,48,59,1|1beyjfz,48,59,1|1beyjg0,45,63,0|1blfy7z,45,63,0|1blfy80,48,59,1|1bxom3z,48,59,1|1bxom40,45,63,0|1c460vz,45,63,0|1c460w0,48,59,1|1cgeorz,48,59,1|1cgeos0,45,63,0|1cmw3jz,45,63,0|1cmw3k0,48,59,1|1cz4rfz,48,59,1|1cz4rg0,45,63,0|1d5m67z,45,63,0|1d5m680,48,59,1|1dhuu3z,48,59,1|1dhuu40,45,63,0|1doc8vz,45,63,0|1doc8w0,48,59,1|1e0kwrz,48,59,1|1e0kws0,45,63,0|1e7fa7z,45,63,0|1e7fa80,48,59,1|1ejny3z,48,59,1|1ejny40,45,63,0|1eq5cvz,45,63,0|1eq5cw0,48,59,1|1f2e0rz,48,59,1|1f2e0s0,45,63,0|1f8vfjz,45,63,0|1f8vfk0,48,59,1|1fl43fz,48,59,1|1fl43g0,45,63,0|1frli7z,45,63,0|1frli80,48,59,1|1g3u63z,48,59,1|1g3u640,45,63,0|1gabkvz,45,63,0|1gabkw0,48,59,1|1gmk8rz,48,59,1|1gmk8s0,45,63,0|1gt1njz,45,63,0|1gt1nk0,48,59,1|1h5abfz,48,59,1|1h5abg0,45,63,0|1hc4ovz,45,63,0|1hc4ow0,48,59,1|1hodcrz,48,59,1|1hodcs0,45,63,0|1huurjz,45,63,0|1huurk0,48,59,1|1i73ffz,48,59,1|1i73fg0,45,63,0|1idku7z,45,63,0|1idku80,48,59,1|1ipti3z,48,59,1|1ipti40,45,63,0|1iwawvz,45,63,0|1iwaww0,48,59,1|1j8jkrz,48,59,1|1j8jks0,45,63,0|1jf0zjz,45,63,0|1jf0zk0,48,59,1|1jr9nfz,48,59,1|1jr9ng0,45,63,0|1jy40vz,45,63,0|1jy40w0,48,59,1|1kacorz,48,59,1|1kacos0,45,63,0|1kgu3jz,45,63,0|1kgu3k0,48,59,1|1kt2rfz,48,59,1|1kt2rg0,45,63,0|1kzk67z,45,63,0|1kzk680,48,59,1|1lbsu3z,48,59,1|1lbsu40,45,63,0|1lia8vz,45,63,0|1lia8w0,48,59,1|1luiwrz,48,59,1|1luiws0,45,63,0|1m10bjz,45,63,0|1m10bk0,48,59,1|1md8zfz,48,59,1|1md8zg0,45,63,0|1mjqe7z,45,63,0|1mjqe80,48,59,1|1mvz23z,48,59,1|1mvz240,45,63,0|1n2tfjz,45,63,0|1n2tfk0,48,59,1|1nf23fz,48,59,1|1nf23g0,45,63,0|1nlji7z,45,63,0|1nlji80,48,59,1|1nxs63z,48,59,1|1nxs640,45,63,0|1o49kvz,45,63,0|1o49kw0,48,59,1|1ogi8rz,48,59,1|1ogi8s0,45,63,0|1omznjz,45,63,0|1omznk0,48,59,1|1oz8bfz,48,59,1|1oz8bg0,45,63,0|1p5pq7z,45,63,0|1p5pq80,48,59,1|1phye3z,48,59,1|1phye40,45,63,0|1posrjz,45,63,0|1posrk0,48,59,1|1q11ffz,48,59,1|1q11fg0,45,63,0|1q7iu7z,45,63,0|1q7iu80,48,59,1|1qjri3z,48,59,1|1qjri40,45,63,0|1qq8wvz,45,63,0|1qq8ww0,48,59,1|1r2hkrz,48,59,1|1r2hks0,45,63,0|1r8yzjz,45,63,0|1r8yzk0,48,59,1|1rl7nfz,48,59,1|1rl7ng0,45,63,0|1rrp27z,45,63,0|1rrp280,48,59,1|1s3xq3z,48,59,1|1s3xq40,45,63,0|1saf4vz,45,63,0|1saf4w0,48,59,1|1smnsrz,48,59,1|1smnss0,45,63,0|1sti67z,45,63,0|1sti680,48,59,1|1t5qu3z,48,59,1|1t5qu40,45,63,0|1tc88vz,45,63,0|1tc88w0,48,59,1|1togwrz,48,59,1|1togws0,45,63,0|1tuybjz,45,63,0|1tuybk0,48,59,1|1u76zfz,48,59,1|1u76zg0,45,63,0|1udoe7z,45,63,0|1udoe80,48,59,1|1upx23z,48,59,1|1upx240,45,63,0|1uwegvz,45,63,0|1uwegw0,48,59,1|1v8n4rz,48,59,1|1v8n4s0,45,63,0|1vf4jjz,45,63,0|1vf4jk0,48,59,1|1vrd7fz,48,59,1|1vrd7g0,45,63,0|NaN,45,63,0\",\"America/Nuuk|,0,152,0|-rvumf5,0,152,0|-rvumf4,38,41,0|5ct4jz,38,41,0|5ct4k0,39,43,1|5lsw3z,39,43,1|5lsw40,38,41,0|5v5xfz,38,41,0|5v5xg0,39,43,1|64iyrz,39,43,1|64iys0,38,41,0|6dw03z,38,41,0|6dw040,39,43,1|6n91fz,39,43,1|6n91g0,38,41,0|6wm2rz,38,41,0|6wm2s0,39,43,1|75z43z,39,43,1|75z440,38,41,0|7fc5fz,38,41,0|7fc5g0,39,43,1|7p25fz,39,43,1|7p25g0,38,41,0|7yf6rz,38,41,0|7yf6s0,39,43,1|87s83z,39,43,1|87s840,38,41,0|8h59fz,38,41,0|8h59g0,39,43,1|8qiarz,39,43,1|8qias0,38,41,0|8zvc3z,38,41,0|8zvc40,39,43,1|998dfz,39,43,1|998dg0,38,41,0|9ilerz,38,41,0|9iles0,39,43,1|9ryg3z,39,43,1|9ryg40,38,41,0|a1bhfz,38,41,0|a1bhg0,39,43,1|aaoirz,39,43,1|aaois0,38,41,0|ak1k3z,38,41,0|ak1k40,39,43,1|atrk3z,39,43,1|atrk40,38,41,0|b34lfz,38,41,0|b34lg0,39,43,1|bchmrz,39,43,1|bchms0,38,41,0|bluo3z,38,41,0|bluo40,39,43,1|bv7pfz,39,43,1|bv7pg0,38,41,0|c4kqrz,38,41,0|c4kqs0,39,43,1|cdxs3z,39,43,1|cdxs40,38,41,0|cnatfz,38,41,0|cnatg0,39,43,1|cwnurz,39,43,1|cwnus0,38,41,0|d60w3z,38,41,0|d60w40,39,43,1|dfdxfz,39,43,1|dfdxg0,38,41,0|dp3xfz,38,41,0|dp3xg0,39,43,1|dzwtfz,39,43,1|dzwtg0,38,41,0|e7u03z,38,41,0|e7u040,39,43,1|eimw3z,39,43,1|eimw40,38,41,0|eqk2rz,38,41,0|eqk2s0,39,43,1|f1cyrz,39,43,1|f1cys0,38,41,0|f9a5fz,38,41,0|f9a5g0,39,43,1|fkg03z,39,43,1|fkg040,38,41,0|fs083z,38,41,0|fs0840,39,43,1|g362rz,39,43,1|g362s0,38,41,0|gaqarz,38,41,0|gaqas0,39,43,1|glw5fz,39,43,1|glw5g0,38,41,0|gttc3z,38,41,0|gttc40,39,43,1|h4m83z,39,43,1|h4m840,38,41,0|hcjerz,38,41,0|hcjes0,39,43,1|hncarz,39,43,1|hncas0,38,41,0|hv9hfz,38,41,0|hv9hg0,39,43,1|i6fc3z,39,43,1|i6fc40,38,41,0|idzk3z,38,41,0|idzk40,39,43,1|ip5erz,39,43,1|ip5es0,38,41,0|iwpmrz,38,41,0|iwpms0,39,43,1|j7vhfz,39,43,1|j7vhg0,38,41,0|jffpfz,38,41,0|jffpg0,39,43,1|jqlk3z,39,43,1|jqlk40,38,41,0|jyiqrz,38,41,0|jyiqs0,39,43,1|k9bmrz,39,43,1|k9bms0,38,41,0|kh8tfz,38,41,0|kh8tg0,39,43,1|ks1pfz,39,43,1|ks1pg0,38,41,0|kzyw3z,38,41,0|kzyw40,39,43,1|lb4qrz,39,43,1|lb4qs0,38,41,0|lioyrz,38,41,0|lioys0,39,43,1|ltutfz,39,43,1|ltutg0,38,41,0|m1f1fz,38,41,0|m1f1g0,39,43,1|mckw3z,39,43,1|mckw40,38,41,0|mki2rz,38,41,0|mki2s0,39,43,1|mvayrz,39,43,1|mvays0,38,41,0|n385fz,38,41,0|n385g0,39,43,1|ne11fz,39,43,1|ne11g0,38,41,0|nly83z,38,41,0|nly840,39,43,1|nwr43z,39,43,1|nwr440,38,41,0|o4oarz,38,41,0|o4oas0,39,43,1|ofu5fz,39,43,1|ofu5g0,38,41,0|onedfz,38,41,0|onedg0,39,43,1|oyk83z,39,43,1|oyk840,38,41,0|p64g3z,38,41,0|p64g40,39,43,1|phaarz,39,43,1|phaas0,38,41,0|pp7hfz,38,41,0|pp7hg0,39,43,1|q00dfz,39,43,1|q00dg0,38,41,0|q7xk3z,38,41,0|q7xk40,39,43,1|qiqg3z,39,43,1|qiqg40,38,41,0|qqnmrz,38,41,0|qqnms0,39,43,1|r1thfz,39,43,1|r1thg0,38,41,0|r9dpfz,38,41,0|r9dpg0,39,43,1|rkjk3z,39,43,1|rkjk40,38,41,0|rs3s3z,38,41,0|rs3s40,39,43,1|s39mrz,39,43,1|s39ms0,38,41,0|sb6tfz,38,41,0|sb6tg0,39,43,1|slzpfz,39,43,1|slzpg0,38,41,0|stww3z,38,41,0|stww40,39,43,1|t4ps3z,39,43,1|t4ps40,38,41,0|tcmyrz,38,41,0|tcmys0,39,43,1|tnfurz,39,43,1|tnfus0,38,41,0|tvd1fz,38,41,0|tvd1g0,39,43,1|u6iw3z,39,43,1|u6iw40,38,41,0|ue343z,38,41,0|ue3440,39,43,1|up8yrz,39,43,1|up8ys0,38,41,0|uwt6rz,38,41,0|uwt6s0,39,43,1|v7z1fz,39,43,1|v7z1g0,38,41,0|vfw83z,38,41,0|vfw840,39,43,1|vqp43z,39,43,1|vqp440,38,41,0|vymarz,38,41,0|vymas0,39,43,1|w9f6rz,39,43,1|w9f6s0,38,41,0|whcdfz,38,41,0|whcdg0,39,43,1|wsi83z,39,43,1|wsi840,38,41,0|x02g3z,38,41,0|x02g40,39,43,1|xb8arz,39,43,1|xb8as0,38,41,0|xisirz,38,41,0|xisis0,39,43,1|xtydfz,39,43,1|xtydg0,38,41,0|y1ilfz,38,41,0|y1ilg0,39,43,1|ycog3z,39,43,1|ycog40,38,41,0|yklmrz,38,41,0|yklms0,39,43,1|yveirz,39,43,1|yveis0,38,41,0|z3bpfz,38,41,0|z3bpg0,39,43,1|ze4lfz,39,43,1|ze4lg0,38,41,0|zm1s3z,38,41,0|zm1s40,39,43,1|zx7mrz,39,43,1|zx7ms0,38,41,0|104rurz,38,41,0|104rus0,39,43,1|10fxpfz,39,43,1|10fxpg0,38,41,0|10nhxfz,38,41,0|10nhxg0,39,43,1|10yns3z,39,43,1|10yns40,38,41,0|116kyrz,38,41,0|116kys0,39,43,1|11hdurz,39,43,1|11hdus0,38,41,0|11pb1fz,38,41,0|11pb1g0,39,43,1|1203xfz,39,43,1|1203xg0,38,41,0|128143z,38,41,0|1281440,39,43,1|12iu03z,39,43,1|12iu040,38,41,0|12qr6rz,38,41,0|12qr6s0,39,43,1|131x1fz,39,43,1|131x1g0,38,41,0|139h9fz,38,41,0|139h9g0,39,43,1|13kn43z,39,43,1|13kn440,38,41,0|13s7c3z,38,41,0|13s7c40,39,43,1|143d6rz,39,43,1|143d6s0,38,41,0|14badfz,38,41,0|14badg0,39,43,1|14m39fz,39,43,1|14m39g0,38,41,0|14u0g3z,38,41,0|14u0g40,39,43,1|154tc3z,39,43,1|154tc40,38,41,0|15cqirz,38,41,0|15cqis0,39,43,1|15nwdfz,39,43,1|15nwdg0,38,41,0|15vglfz,38,41,0|15vglg0,39,43,1|166mg3z,39,43,1|166mg40,38,41,0|16e6o3z,38,41,0|16e6o40,39,43,1|16pcirz,39,43,1|16pcis0,38,41,0|16x9pfz,38,41,0|16x9pg0,39,43,1|1782lfz,39,43,1|1782lg0,38,41,0|17fzs3z,38,41,0|17fzs40,39,43,1|17qso3z,39,43,1|17qso40,38,41,0|17ypurz,38,41,0|17ypus0,39,43,1|189iqrz,39,43,1|189iqs0,38,41,0|18hfxfz,38,41,0|18hfxg0,39,43,1|18sls3z,39,43,1|18sls40,38,41,0|190603z,38,41,0|1906040,39,43,1|19bburz,39,43,1|19bbus0,38,41,0|19iw2rz,38,41,0|19iw2s0,39,43,1|19u1xfz,39,43,1|19u1xg0,38,41,0|1a1z43z,38,41,0|1a1z440,39,43,1|1acs03z,39,43,1|1acs040,38,41,0|1akp6rz,38,41,0|1akp6s0,39,43,1|1avi2rz,39,43,1|1avi2s0,38,41,0|1b3f9fz,38,41,0|1b3f9g0,39,43,1|1bel43z,39,43,1|1bel440,38,41,0|1bm5c3z,38,41,0|1bm5c40,39,43,1|1bxb6rz,39,43,1|1bxb6s0,38,41,0|1c4verz,38,41,0|1c4ves0,39,43,1|1cg19fz,39,43,1|1cg19g0,38,41,0|1cnlhfz,38,41,0|1cnlhg0,39,43,1|1cyrc3z,39,43,1|1cyrc40,38,41,0|1d6oirz,38,41,0|1d6ois0,39,43,1|1dhherz,39,43,1|1dhhes0,38,41,0|1dpelfz,38,41,0|1dpelg0,39,43,1|1e07hfz,39,43,1|1e07hg0,38,41,0|1e84o3z,38,41,0|1e84o40,39,43,1|1ejairz,39,43,1|1ejais0,38,41,0|1equqrz,38,41,0|1equqs0,39,43,1|1f20lfz,39,43,1|1f20lg0,38,41,0|1f9ktfz,38,41,0|1f9ktg0,39,43,1|1fkqo3z,39,43,1|1fkqo40,38,41,0|1fsnurz,38,41,0|1fsnus0,39,43,1|1g3gqrz,39,43,1|1g3gqs0,38,41,0|1gbdxfz,38,41,0|1gbdxg0,39,43,1|1gm6tfz,39,43,1|1gm6tg0,38,41,0|1gu403z,38,41,0|1gu4040,39,43,1|1h4ww3z,39,43,1|1h4ww40,38,41,0|1hcu2rz,38,41,0|1hcu2s0,39,43,1|1hnzxfz,39,43,1|1hnzxg0,38,41,0|1hvk5fz,38,41,0|1hvk5g0,39,43,1|1i6q03z,39,43,1|1i6q040,38,41,0|1iea83z,38,41,0|1iea840,39,43,1|1ipg2rz,39,43,1|1ipg2s0,38,41,0|1ixd9fz,38,41,0|1ixd9g0,39,43,1|1j865fz,39,43,1|1j865g0,38,41,0|1jg3c3z,38,41,0|1jg3c40,39,43,1|1jqw83z,39,43,1|1jqw840,38,41,0|1jyterz,38,41,0|1jytes0,39,43,1|1k9z9fz,39,43,1|1k9z9g0,38,41,0|1khjhfz,38,41,0|1khjhg0,39,43,1|1kspc3z,39,43,1|1kspc40,38,41,0|1l09k3z,38,41,0|1l09k40,39,43,1|1lbferz,39,43,1|1lbfes0,38,41,0|1ljclfz,38,41,0|1ljclg0,39,43,1|1lu5hfz,39,43,1|1lu5hg0,38,41,0|1m22o3z,38,41,0|1m22o40,39,43,1|1mcvk3z,39,43,1|1mcvk40,38,41,0|1mksqrz,38,41,0|1mksqs0,39,43,1|1mvlmrz,39,43,1|1mvlms0,38,41,0|1n3itfz,38,41,0|1n3itg0,39,43,1|1neoo3z,39,43,1|1neoo40,38,41,0|1nm8w3z,38,41,0|1nm8w40,39,43,1|1nxeqrz,39,43,1|1nxeqs0,38,41,0|1o4yyrz,38,41,0|1o4yys0,39,43,1|1og4tfz,39,43,1|1og4tg0,38,41,0|1oo203z,38,41,0|1oo2040,39,43,1|1oyuw3z,39,43,1|1oyuw40,38,41,0|1p6s2rz,38,41,0|1p6s2s0,39,43,1|1phkyrz,39,43,1|1phkys0,38,41,0|1ppi5fz,38,41,0|1ppi5g0,39,43,1|1q0o03z,39,43,1|1q0o040,38,41,0|1q8883z,38,41,0|1q88840,39,43,1|1qje2rz,39,43,1|1qje2s0,38,41,0|1qqyarz,38,41,0|1qqyas0,39,43,1|1r245fz,39,43,1|1r245g0,38,41,0|1r9odfz,38,41,0|1r9odg0,39,43,1|1rku83z,39,43,1|1rku840,38,41,0|1rsrerz,38,41,0|1rsres0,39,43,1|1s3karz,39,43,1|1s3kas0,38,41,0|1sbhhfz,38,41,0|1sbhhg0,39,43,1|1smadfz,39,43,1|1smadg0,38,41,0|1su7k3z,38,41,0|1su7k40,39,43,1|1t5derz,39,43,1|1t5des0,38,41,0|1tcxmrz,38,41,0|1tcxms0,39,43,1|1to3hfz,39,43,1|1to3hg0,38,41,0|1tvnpfz,38,41,0|1tvnpg0,39,43,1|1u6tk3z,39,43,1|1u6tk40,38,41,0|1ueqqrz,38,41,0|1ueqqs0,39,43,1|1upjmrz,39,43,1|1upjms0,38,41,0|1uxgtfz,38,41,0|1uxgtg0,39,43,1|1v89pfz,39,43,1|1v89pg0,38,41,0|1vg6w3z,38,41,0|1vg6w40,39,43,1|1vqzs3z,39,43,1|1vqzs40,38,41,0|NaN,38,41,0\",\"America/Ojinaga|,0,153,0|-p1u4k1,0,153,0|-p1u4k0,44,62,0|-m7mko1,44,62,0|-m7mko0,45,63,0|-kf67c1,45,63,0|-kf67c0,44,62,0|-k6j3c1,44,62,0|-k6j3c0,45,63,0|-jypm01,45,63,0|-jypm00,44,62,0|-jpan81,44,62,0|-jpan80,45,63,0|dphfjz,45,63,0|dphfk0,48,59,1|dzxa3z,48,59,1|dzxa40,45,63,0|e87i7z,45,63,0|e87i80,48,59,1|eincrz,48,59,1|eincs0,45,63,0|eqxnnz,45,63,0|eqxno0,47,63,1|f1di7z,47,63,1|f1di80,44,62,0|f9nqbz,44,62,0|f9nqc0,47,63,1|fkgjjz,47,63,1|fkgjk0,44,62,0|fsdszz,44,62,0|fsdt00,47,63,1|g36m7z,47,63,1|g36m80,44,62,0|gcwozz,44,62,0|gcwp00,47,63,1|gkgu7z,47,63,1|gkgu80,44,62,0|gu6wzz,44,62,0|gu6x00,47,63,1|h4mrjz,47,63,1|h4mrk0,44,62,0|hcwznz,44,62,0|hcwzo0,47,63,1|hncu7z,47,63,1|hncu80,44,62,0|hvn2bz,44,62,0|hvn2c0,47,63,1|i6fvjz,47,63,1|i6fvk0,44,62,0|ied4zz,44,62,0|ied500,47,63,1|ip5y7z,47,63,1|ip5y80,44,62,0|ix37nz,44,62,0|ix37o0,47,63,1|j7w0vz,47,63,1|j7w0w0,44,62,0|jftabz,44,62,0|jftac0,47,63,1|jqm3jz,47,63,1|jqm3k0,44,62,0|jywbnz,44,62,0|jywbo0,47,63,1|k9c67z,47,63,1|k9c680,44,62,0|khmebz,44,62,0|khmec0,47,63,1|ks28vz,47,63,1|ks28w0,44,62,0|kz9kzz,44,62,0|kz9l00,47,63,1|lbi8vz,47,63,1|lbi8w0,44,62,0|lhznnz,44,62,0|lhzno0,47,63,1|lu8bjz,47,63,1|lu8bk0,44,62,0|m0pqbz,44,62,0|m0pqc0,47,63,1|mcye7z,47,63,1|mcye80,44,62,0|mjfszz,44,62,0|mjft00,47,63,1|mvogvz,47,63,1|mvogw0,44,62,0|n25vnz,44,62,0|n25vo0,47,63,1|neejjz,47,63,1|neejk0,44,62,0|nkvybz,44,62,0|nkvyc0,47,63,1|nx4m7z,47,63,1|nx4m80,44,62,0|o3yznz,44,62,0|o3yzo0,47,63,1|og7njz,47,63,1|og7nk0,44,62,0|omp2bz,44,62,0|omp2c0,47,63,1|oyxq7z,47,63,1|oyxq80,44,62,0|p5f4zz,44,62,0|p5f500,47,63,1|phnsvz,47,63,1|phnsw0,44,62,0|po57nz,44,62,0|po57o0,47,63,1|q0dvjz,47,63,1|q0dvk0,44,62,0|q6vabz,44,62,0|q6vac0,47,63,1|qj3y7z,47,63,1|qj3y80,44,62,0|qpybnz,44,62,0|qpybo0,47,63,1|r26zjz,47,63,1|r26zk0,44,62,0|r8oebz,44,62,0|r8oec0,47,63,1|rkx27z,47,63,1|rkx280,44,62,0|rregzz,44,62,0|rreh00,47,63,1|s3n4vz,47,63,1|s3n4w0,44,62,0|sa4jnz,44,62,0|sa4jo0,47,63,1|smd7jz,47,63,1|smd7k0,44,62,0|ssumbz,44,62,0|ssumc0,47,63,1|t53a7z,47,63,1|t53a80,44,62,0|tbkozz,44,62,0|tbkp00,47,63,1|tntcvz,47,63,1|tntcw0,44,62,0|tunqbz,44,62,0|tunqc0,47,63,1|u6we7z,47,63,1|u6we80,44,62,0|uddszz,44,62,0|uddt00,47,63,1|upmgvz,47,63,1|upmgw0,44,62,0|uw3vnz,44,62,0|uw3vo0,47,63,1|v8cjjz,47,63,1|v8cjk0,44,62,0|vetybz,44,62,0|vetyc0,47,63,1|vr2m7z,47,63,1|vr2m80,44,62,0|vxk0zz,44,62,0|vxk100,47,63,1|w9sovz,47,63,1|w9sow0,44,62,0|wgn2bz,44,62,0|wgn2c0,47,63,1|wsvq7z,47,63,1|wsvq80,44,62,0|wzd4zz,44,62,0|wzd500,47,63,1|xblsvz,47,63,1|xblsw0,44,62,0|xi37nz,44,62,0|xi37o0,47,63,1|xubvjz,47,63,1|xubvk0,44,62,0|y0tabz,44,62,0|y0tac0,47,63,1|yd1y7z,47,63,1|yd1y80,44,62,0|yjjczz,44,62,0|yjjd00,47,63,1|yvs0vz,47,63,1|yvs0w0,44,62,0|z29fnz,44,62,0|z29fo0,47,63,1|zei3jz,47,63,1|zei3k0,44,62,0|zlcgzz,44,62,0|zlch00,47,63,1|zxl4vz,47,63,1|zxl4w0,44,62,0|1042jnz,44,62,0|1042jo0,47,63,1|10gb7jz,47,63,1|10gb7k0,44,62,0|10msmbz,44,62,0|10msmc0,47,63,1|10z1a7z,47,63,1|10z1a80,44,62,0|115iozz,44,62,0|115ip00,47,63,1|11hrcvz,47,63,1|11hrcw0,44,62,0|11o8rnz,44,62,0|11o8ro0,47,63,1|120hfjz,47,63,1|120hfk0,44,62,0|126yubz,44,62,0|126yuc0,47,63,1|12j7i7z,47,63,1|12j7i80,44,62,0|12q1vnz,44,62,0|12q1vo0,47,63,1|132ajjz,47,63,1|132ajk0,44,62,0|138rybz,44,62,0|138ryc0,47,63,1|13l0m7z,47,63,1|13l0m80,44,62,0|13ri0zz,44,62,0|13ri100,47,63,1|143qovz,47,63,1|143qow0,44,62,0|14a83nz,44,62,0|14a83o0,47,63,1|14mgrjz,47,63,1|14mgrk0,44,62,0|14sy6bz,44,62,0|14sy6c0,47,63,1|1556u7z,47,63,1|1556u80,44,62,0|15c17nz,44,62,0|15c17o0,47,63,1|15o9vjz,47,63,1|15o9vk0,44,62,0|15urabz,44,62,0|15urac0,47,63,1|166zy7z,47,63,1|166zy80,44,62,0|16dhczz,44,62,0|16dhd00,47,63,1|16pq0vz,47,63,1|16pq0w0,44,62,0|16w7fnz,44,62,0|16w7fo0,47,63,1|178g3jz,47,63,1|178g3k0,44,62,0|17exibz,44,62,0|17exic0,47,63,1|17r667z,47,63,1|17r6680,44,62,0|17xnkzz,44,62,0|17xnl00,47,63,1|189w8vz,47,63,1|189w8w0,44,62,0|18gqmbz,44,62,0|18gqmc0,47,63,1|18sza7z,47,63,1|18sza80,44,62,0|18zgozz,44,62,0|18zgp00,47,63,1|19bpcvz,47,63,1|19bpcw0,44,62,0|19i6rnz,44,62,0|19i6ro0,47,63,1|19uffjz,47,63,1|19uffk0,44,62,0|1a0wubz,44,62,0|1a0wuc0,47,63,1|1ad5i7z,47,63,1|1ad5i80,44,62,0|1ajmwzz,44,62,0|1ajmx00,47,63,1|1avvkvz,47,63,1|1avvkw0,44,62,0|1b2pybz,44,62,0|1b2pyc0,47,63,1|1beym7z,47,63,1|1beym80,44,62,0|1blg0zz,44,62,0|1blg100,47,63,1|1bxoovz,47,63,1|1bxoow0,44,62,0|1c463nz,44,62,0|1c463o0,47,63,1|1cgerjz,47,63,1|1cgerk0,44,62,0|1cmw6bz,44,62,0|1cmw6c0,47,63,1|1cz4u7z,47,63,1|1cz4u80,44,62,0|1d5m8zz,44,62,0|1d5m900,47,63,1|1dhuwvz,47,63,1|1dhuww0,44,62,0|1docbnz,44,62,0|1docbo0,47,63,1|1e0kzjz,47,63,1|1e0kzk0,44,62,0|1e7fczz,44,62,0|1e7fd00,47,63,1|1ejo0vz,47,63,1|1ejo0w0,44,62,0|1eq5fnz,44,62,0|1eq5fo0,47,63,1|1f2e3jz,47,63,1|1f2e3k0,44,62,0|1f8vibz,44,62,0|1f8vic0,47,63,1|1fl467z,47,63,1|1fl4680,44,62,0|1frlkzz,44,62,0|1frll00,47,63,1|1g3u8vz,47,63,1|1g3u8w0,44,62,0|1gabnnz,44,62,0|1gabno0,47,63,1|1gmkbjz,47,63,1|1gmkbk0,44,62,0|1gt1qbz,44,62,0|1gt1qc0,47,63,1|1h5ae7z,47,63,1|1h5ae80,44,62,0|1hc4rnz,44,62,0|1hc4ro0,47,63,1|1hodfjz,47,63,1|1hodfk0,44,62,0|1huuubz,44,62,0|1huuuc0,47,63,1|1i73i7z,47,63,1|1i73i80,44,62,0|1idkwzz,44,62,0|1idkx00,47,63,1|1iptkvz,47,63,1|1iptkw0,44,62,0|1iwaznz,44,62,0|1iwazo0,47,63,1|1j8jnjz,47,63,1|1j8jnk0,44,62,0|1jf12bz,44,62,0|1jf12c0,47,63,1|1jr9q7z,47,63,1|1jr9q80,44,62,0|1jy43nz,44,62,0|1jy43o0,47,63,1|1kacrjz,47,63,1|1kacrk0,44,62,0|1kgu6bz,44,62,0|1kgu6c0,47,63,1|1kt2u7z,47,63,1|1kt2u80,44,62,0|1kzk8zz,44,62,0|1kzk900,47,63,1|1lbswvz,47,63,1|1lbsww0,44,62,0|1liabnz,44,62,0|1liabo0,47,63,1|1luizjz,47,63,1|1luizk0,44,62,0|1m10ebz,44,62,0|1m10ec0,47,63,1|1md927z,47,63,1|1md9280,44,62,0|1mjqgzz,44,62,0|1mjqh00,47,63,1|1mvz4vz,47,63,1|1mvz4w0,44,62,0|1n2tibz,44,62,0|1n2tic0,47,63,1|1nf267z,47,63,1|1nf2680,44,62,0|1nljkzz,44,62,0|1nljl00,47,63,1|1nxs8vz,47,63,1|1nxs8w0,44,62,0|1o49nnz,44,62,0|1o49no0,47,63,1|1ogibjz,47,63,1|1ogibk0,44,62,0|1omzqbz,44,62,0|1omzqc0,47,63,1|1oz8e7z,47,63,1|1oz8e80,44,62,0|1p5pszz,44,62,0|1p5pt00,47,63,1|1phygvz,47,63,1|1phygw0,44,62,0|1posubz,44,62,0|1posuc0,47,63,1|1q11i7z,47,63,1|1q11i80,44,62,0|1q7iwzz,44,62,0|1q7ix00,47,63,1|1qjrkvz,47,63,1|1qjrkw0,44,62,0|1qq8znz,44,62,0|1qq8zo0,47,63,1|1r2hnjz,47,63,1|1r2hnk0,44,62,0|1r8z2bz,44,62,0|1r8z2c0,47,63,1|1rl7q7z,47,63,1|1rl7q80,44,62,0|1rrp4zz,44,62,0|1rrp500,47,63,1|1s3xsvz,47,63,1|1s3xsw0,44,62,0|1saf7nz,44,62,0|1saf7o0,47,63,1|1smnvjz,47,63,1|1smnvk0,44,62,0|1sti8zz,44,62,0|1sti900,47,63,1|1t5qwvz,47,63,1|1t5qww0,44,62,0|1tc8bnz,44,62,0|1tc8bo0,47,63,1|1togzjz,47,63,1|1togzk0,44,62,0|1tuyebz,44,62,0|1tuyec0,47,63,1|1u7727z,47,63,1|1u77280,44,62,0|1udogzz,44,62,0|1udoh00,47,63,1|1upx4vz,47,63,1|1upx4w0,44,62,0|1uwejnz,44,62,0|1uwejo0,47,63,1|1v8n7jz,47,63,1|1v8n7k0,44,62,0|1vf4mbz,44,62,0|1vf4mc0,47,63,1|1vrda7z,47,63,1|1vrda80,44,62,0|NaN,44,62,0\",\"America/Panama|,0,57,0|-15r0ult,0,57,0|-15r0uls,40,58,0|-w757vd,40,58,0|-w757vc,43,59,0|NaN,43,59,0\",\"America/Pangnirtung|,59,1,0|-pkmlc1,59,1,0|-pkmlc0,31,40,0|-ek27c1,31,40,0|-ek27c0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|-2g2281,31,40,0|-2g2280,73,43,1|-26c281,73,43,1|-26c280,31,40,0|5dw3bz,31,40,0|5dw3c0,49,41,1|5n91vz,49,41,1|5n91w0,31,40,0|5wm5zz,31,40,0|5wm600,49,41,1|65z4jz,49,41,1|65z4k0,31,40,0|6fc8nz,31,40,0|6fc8o0,49,41,1|6p25vz,49,41,1|6p25w0,31,40,0|6y2bbz,31,40,0|6y2bc0,49,41,1|77s8jz,49,41,1|77s8k0,31,40,0|7h5cnz,31,40,0|7h5co0,49,41,1|7qib7z,49,41,1|7qib80,31,40,0|7zvfbz,31,40,0|7zvfc0,49,41,1|898dvz,49,41,1|898dw0,31,40,0|8ilhzz,31,40,0|8ili00,49,41,1|8rygjz,49,41,1|8rygk0,31,40,0|908onz,31,40,0|908oo0,49,41,1|9aoj7z,49,41,1|9aoj80,31,40,0|9iyrbz,31,40,0|9iyrc0,49,41,1|9trkjz,49,41,1|9trkk0,31,40,0|a1otzz,31,40,0|a1ou00,49,41,1|achn7z,49,41,1|achn80,31,40,0|akewnz,31,40,0|akewo0,49,41,1|av7pvz,49,41,1|av7pw0,31,40,0|b3hxzz,31,40,0|b3hy00,49,41,1|bdxsjz,49,41,1|bdxsk0,31,40,0|bm80nz,31,40,0|bm80o0,49,41,1|bwnv7z,49,41,1|bwnv80,31,40,0|c4y3bz,31,40,0|c4y3c0,49,41,1|cfqwjz,49,41,1|cfqwk0,31,40,0|cno5zz,31,40,0|cno600,49,41,1|cygz7z,49,41,1|cygz80,31,40,0|d6e8nz,31,40,0|d6e8o0,61,40,1|dh74nz,61,40,1|dh74o0,43,59,0|dphcrz,43,59,0|dphcs0,61,40,1|dzx7bz,61,40,1|dzx7c0,43,59,0|e87ffz,43,59,0|e87fg0,61,40,1|ein9zz,61,40,1|eina00,43,59,0|eqxi3z,43,59,0|eqxi40,61,40,1|f1dcnz,61,40,1|f1dco0,43,59,0|f9nkrz,43,59,0|f9nks0,61,40,1|fkgdzz,61,40,1|fkge00,45,63,0|fsdq7z,45,63,0|fsdq80,48,59,1|g36jfz,48,59,1|g36jg0,43,59,0|gb3q3z,43,59,0|gb3q40,61,40,1|glwjbz,61,40,1|glwjc0,43,59,0|gu6rfz,43,59,0|gu6rg0,61,40,1|h4mlzz,61,40,1|h4mm00,43,59,0|hcwu3z,43,59,0|hcwu40,61,40,1|hnconz,61,40,1|hncoo0,43,59,0|hvmwrz,43,59,0|hvmws0,61,40,1|i6fpzz,61,40,1|i6fq00,43,59,0|ieczfz,43,59,0|ieczg0,61,40,1|ip5snz,61,40,1|ip5so0,43,59,0|ix323z,43,59,0|ix3240,61,40,1|j7vvbz,61,40,1|j7vvc0,43,59,0|jeq8rz,43,59,0|jeq8s0,61,40,1|jqywnz,61,40,1|jqywo0,43,59,0|jxgbfz,43,59,0|jxgbg0,61,40,1|k9ozbz,61,40,1|k9ozc0,43,59,0|kg6e3z,43,59,0|kg6e40,61,40,1|ksf1zz,61,40,1|ksf200,43,59,0|kz9ffz,43,59,0|kz9fg0,61,40,1|lbi3bz,61,40,1|lbi3c0,43,59,0|lhzi3z,43,59,0|lhzi40,61,40,1|lu85zz,61,40,1|lu8600,43,59,0|m0pkrz,43,59,0|m0pks0,61,40,1|mcy8nz,61,40,1|mcy8o0,43,59,0|mjfnfz,43,59,0|mjfng0,61,40,1|mvobbz,61,40,1|mvobc0,43,59,0|n25q3z,43,59,0|n25q40,61,40,1|needzz,61,40,1|neee00,43,59,0|nkvsrz,43,59,0|nkvss0,61,40,1|nx4gnz,61,40,1|nx4go0,43,59,0|o3yu3z,43,59,0|o3yu40,61,40,1|og7hzz,61,40,1|og7i00,43,59,0|omowrz,43,59,0|omows0,61,40,1|oyxknz,61,40,1|oyxko0,43,59,0|p5ezfz,43,59,0|p5ezg0,61,40,1|phnnbz,61,40,1|phnnc0,43,59,0|po523z,43,59,0|po5240,61,40,1|q0dpzz,61,40,1|q0dq00,43,59,0|q6v4rz,43,59,0|q6v4s0,61,40,1|qj3snz,61,40,1|qj3so0,43,59,0|qpy63z,43,59,0|qpy640,61,40,1|r26tzz,61,40,1|r26u00,43,59,0|r8o8rz,43,59,0|r8o8s0,61,40,1|rkwwnz,61,40,1|rkwwo0,43,59,0|rrebfz,43,59,0|rrebg0,61,40,1|s3mzbz,61,40,1|s3mzc0,43,59,0|sa4e3z,43,59,0|sa4e40,61,40,1|smd1zz,61,40,1|smd200,43,59,0|ssugrz,43,59,0|ssugs0,61,40,1|t534nz,61,40,1|t534o0,43,59,0|tbkjfz,43,59,0|tbkjg0,61,40,1|tnt7bz,61,40,1|tnt7c0,43,59,0|tunkrz,43,59,0|tunks0,61,40,1|u6w8nz,61,40,1|u6w8o0,43,59,0|uddnfz,43,59,0|uddng0,61,40,1|upmbbz,61,40,1|upmbc0,43,59,0|uw3q3z,43,59,0|uw3q40,61,40,1|v8cdzz,61,40,1|v8ce00,43,59,0|vetsrz,43,59,0|vetss0,61,40,1|vr2gnz,61,40,1|vr2go0,43,59,0|vxjvfz,43,59,0|vxjvg0,61,40,1|w9sjbz,61,40,1|w9sjc0,43,59,0|wgmwrz,43,59,0|wgmws0,61,40,1|wsvknz,61,40,1|wsvko0,43,59,0|wzczfz,43,59,0|wzczg0,61,40,1|xblnbz,61,40,1|xblnc0,43,59,0|xi323z,43,59,0|xi3240,61,40,1|xubpzz,61,40,1|xubq00,43,59,0|y0t4rz,43,59,0|y0t4s0,61,40,1|yd1snz,61,40,1|yd1so0,43,59,0|yjj7fz,43,59,0|yjj7g0,61,40,1|yvrvbz,61,40,1|yvrvc0,43,59,0|z29a3z,43,59,0|z29a40,61,40,1|zehxzz,61,40,1|zehy00,43,59,0|zlcbfz,43,59,0|zlcbg0,61,40,1|zxkzbz,61,40,1|zxkzc0,43,59,0|1042e3z,43,59,0|1042e40,61,40,1|10gb1zz,61,40,1|10gb200,43,59,0|10msgrz,43,59,0|10msgs0,61,40,1|10z14nz,61,40,1|10z14o0,43,59,0|115ijfz,43,59,0|115ijg0,61,40,1|11hr7bz,61,40,1|11hr7c0,43,59,0|11o8m3z,43,59,0|11o8m40,61,40,1|120h9zz,61,40,1|120ha00,43,59,0|126yorz,43,59,0|126yos0,61,40,1|12j7cnz,61,40,1|12j7co0,43,59,0|12q1q3z,43,59,0|12q1q40,61,40,1|132adzz,61,40,1|132ae00,43,59,0|138rsrz,43,59,0|138rss0,61,40,1|13l0gnz,61,40,1|13l0go0,43,59,0|13rhvfz,43,59,0|13rhvg0,61,40,1|143qjbz,61,40,1|143qjc0,43,59,0|14a7y3z,43,59,0|14a7y40,61,40,1|14mglzz,61,40,1|14mgm00,43,59,0|14sy0rz,43,59,0|14sy0s0,61,40,1|1556onz,61,40,1|1556oo0,43,59,0|15c123z,43,59,0|15c1240,61,40,1|15o9pzz,61,40,1|15o9q00,43,59,0|15ur4rz,43,59,0|15ur4s0,61,40,1|166zsnz,61,40,1|166zso0,43,59,0|16dh7fz,43,59,0|16dh7g0,61,40,1|16ppvbz,61,40,1|16ppvc0,43,59,0|16w7a3z,43,59,0|16w7a40,61,40,1|178fxzz,61,40,1|178fy00,43,59,0|17excrz,43,59,0|17excs0,61,40,1|17r60nz,61,40,1|17r60o0,43,59,0|17xnffz,43,59,0|17xnfg0,61,40,1|189w3bz,61,40,1|189w3c0,43,59,0|18gqgrz,43,59,0|18gqgs0,61,40,1|18sz4nz,61,40,1|18sz4o0,43,59,0|18zgjfz,43,59,0|18zgjg0,61,40,1|19bp7bz,61,40,1|19bp7c0,43,59,0|19i6m3z,43,59,0|19i6m40,61,40,1|19uf9zz,61,40,1|19ufa00,43,59,0|1a0worz,43,59,0|1a0wos0,61,40,1|1ad5cnz,61,40,1|1ad5co0,43,59,0|1ajmrfz,43,59,0|1ajmrg0,61,40,1|1avvfbz,61,40,1|1avvfc0,43,59,0|1b2psrz,43,59,0|1b2pss0,61,40,1|1beygnz,61,40,1|1beygo0,43,59,0|1blfvfz,43,59,0|1blfvg0,61,40,1|1bxojbz,61,40,1|1bxojc0,43,59,0|1c45y3z,43,59,0|1c45y40,61,40,1|1cgelzz,61,40,1|1cgem00,43,59,0|1cmw0rz,43,59,0|1cmw0s0,61,40,1|1cz4onz,61,40,1|1cz4oo0,43,59,0|1d5m3fz,43,59,0|1d5m3g0,61,40,1|1dhurbz,61,40,1|1dhurc0,43,59,0|1doc63z,43,59,0|1doc640,61,40,1|1e0ktzz,61,40,1|1e0ku00,43,59,0|1e7f7fz,43,59,0|1e7f7g0,61,40,1|1ejnvbz,61,40,1|1ejnvc0,43,59,0|1eq5a3z,43,59,0|1eq5a40,61,40,1|1f2dxzz,61,40,1|1f2dy00,43,59,0|1f8vcrz,43,59,0|1f8vcs0,61,40,1|1fl40nz,61,40,1|1fl40o0,43,59,0|1frlffz,43,59,0|1frlfg0,61,40,1|1g3u3bz,61,40,1|1g3u3c0,43,59,0|1gabi3z,43,59,0|1gabi40,61,40,1|1gmk5zz,61,40,1|1gmk600,43,59,0|1gt1krz,43,59,0|1gt1ks0,61,40,1|1h5a8nz,61,40,1|1h5a8o0,43,59,0|1hc4m3z,43,59,0|1hc4m40,61,40,1|1hod9zz,61,40,1|1hoda00,43,59,0|1huuorz,43,59,0|1huuos0,61,40,1|1i73cnz,61,40,1|1i73co0,43,59,0|1idkrfz,43,59,0|1idkrg0,61,40,1|1iptfbz,61,40,1|1iptfc0,43,59,0|1iwau3z,43,59,0|1iwau40,61,40,1|1j8jhzz,61,40,1|1j8ji00,43,59,0|1jf0wrz,43,59,0|1jf0ws0,61,40,1|1jr9knz,61,40,1|1jr9ko0,43,59,0|1jy3y3z,43,59,0|1jy3y40,61,40,1|1kaclzz,61,40,1|1kacm00,43,59,0|1kgu0rz,43,59,0|1kgu0s0,61,40,1|1kt2onz,61,40,1|1kt2oo0,43,59,0|1kzk3fz,43,59,0|1kzk3g0,61,40,1|1lbsrbz,61,40,1|1lbsrc0,43,59,0|1lia63z,43,59,0|1lia640,61,40,1|1luitzz,61,40,1|1luiu00,43,59,0|1m108rz,43,59,0|1m108s0,61,40,1|1md8wnz,61,40,1|1md8wo0,43,59,0|1mjqbfz,43,59,0|1mjqbg0,61,40,1|1mvyzbz,61,40,1|1mvyzc0,43,59,0|1n2tcrz,43,59,0|1n2tcs0,61,40,1|1nf20nz,61,40,1|1nf20o0,43,59,0|1nljffz,43,59,0|1nljfg0,61,40,1|1nxs3bz,61,40,1|1nxs3c0,43,59,0|1o49i3z,43,59,0|1o49i40,61,40,1|1ogi5zz,61,40,1|1ogi600,43,59,0|1omzkrz,43,59,0|1omzks0,61,40,1|1oz88nz,61,40,1|1oz88o0,43,59,0|1p5pnfz,43,59,0|1p5png0,61,40,1|1phybbz,61,40,1|1phybc0,43,59,0|1posorz,43,59,0|1posos0,61,40,1|1q11cnz,61,40,1|1q11co0,43,59,0|1q7irfz,43,59,0|1q7irg0,61,40,1|1qjrfbz,61,40,1|1qjrfc0,43,59,0|1qq8u3z,43,59,0|1qq8u40,61,40,1|1r2hhzz,61,40,1|1r2hi00,43,59,0|1r8ywrz,43,59,0|1r8yws0,61,40,1|1rl7knz,61,40,1|1rl7ko0,43,59,0|1rrozfz,43,59,0|1rrozg0,61,40,1|1s3xnbz,61,40,1|1s3xnc0,43,59,0|1saf23z,43,59,0|1saf240,61,40,1|1smnpzz,61,40,1|1smnq00,43,59,0|1sti3fz,43,59,0|1sti3g0,61,40,1|1t5qrbz,61,40,1|1t5qrc0,43,59,0|1tc863z,43,59,0|1tc8640,61,40,1|1togtzz,61,40,1|1togu00,43,59,0|1tuy8rz,43,59,0|1tuy8s0,61,40,1|1u76wnz,61,40,1|1u76wo0,43,59,0|1udobfz,43,59,0|1udobg0,61,40,1|1upwzbz,61,40,1|1upwzc0,43,59,0|1uwee3z,43,59,0|1uwee40,61,40,1|1v8n1zz,61,40,1|1v8n200,43,59,0|1vf4grz,43,59,0|1vf4gs0,61,40,1|1vrd4nz,61,40,1|1vrd4o0,43,59,0|NaN,43,59,0\",\"America/Paramaribo|,0,154,0|-usj4g9,0,154,0|-usj4g8,5,155,0|-i9lsfx,5,155,0|-i9lsfw,5,156,0|-cnnf4d,5,156,0|-cnnf4c,50,65,0|7p471z,50,65,0|7p4720,38,41,0|NaN,38,41,0\",\"America/Phoenix|,0,81,0|-18y0j81,0,81,0|-18y0j80,44,62,0|-r0epo1,44,62,0|-r0epo0,47,63,1|-qplwg1,47,63,1|-qplwg0,44,62,0|-qhon01,44,62,0|-qhon00,47,63,1|-q6vts1,47,63,1|-q6vts0,44,62,0|-ek1z01,44,62,0|-ek1z00,57,63,1|-dkikmd,57,63,1|-dkikmc,44,62,0|-dftz6d,44,62,0|-dftz6c,57,63,1|-d6f5yd,57,63,1|-d6f5yc,44,62,0|-1e8kc1,44,62,0|-1e8kc0,47,63,1|-14vls1,47,63,1|-14vls0,44,62,0|NaN,44,62,0\",\"America/Port-au-Prince|,0,157,0|-15r0vxt,0,157,0|-15r0vxs,83,158,0|-rmk9ad,83,158,0|-rmk9ac,43,59,0|6ys5vz,43,59,0|6ys5w0,61,40,1|77s5rz,61,40,1|77s5s0,43,59,0|7h59vz,43,59,0|7h59w0,61,40,1|7qi8fz,61,40,1|7qi8g0,43,59,0|7zvcjz,43,59,0|7zvck0,61,40,1|898b3z,61,40,1|898b40,43,59,0|8ilf7z,43,59,0|8ilf80,61,40,1|8rydrz,61,40,1|8ryds0,43,59,0|91bhvz,43,59,0|91bhw0,61,40,1|9aogfz,61,40,1|9aogg0,43,59,0|9iyrbz,43,59,0|9iyrc0,61,40,1|9trnbz,61,40,1|9trnc0,43,59,0|a1otzz,43,59,0|a1ou00,61,40,1|achpzz,61,40,1|achq00,43,59,0|akewnz,43,59,0|akewo0,61,40,1|av7snz,61,40,1|av7so0,43,59,0|b3hxzz,43,59,0|b3hy00,61,40,1|bdxvbz,61,40,1|bdxvc0,43,59,0|bm80nz,43,59,0|bm80o0,61,40,1|bwnxzz,61,40,1|bwny00,43,59,0|c4y3bz,43,59,0|c4y3c0,61,40,1|cfqzbz,61,40,1|cfqzc0,43,59,0|cno5zz,43,59,0|cno600,61,40,1|cyh1zz,61,40,1|cyh200,43,59,0|d6e8nz,43,59,0|d6e8o0,61,40,1|dh74nz,61,40,1|dh74o0,43,59,0|dph9zz,43,59,0|dpha00,61,40,1|dzx7bz,61,40,1|dzx7c0,43,59,0|e87cnz,43,59,0|e87co0,61,40,1|ein9zz,61,40,1|eina00,43,59,0|iectvz,43,59,0|iectw0,61,40,1|ip5n3z,61,40,1|ip5n40,43,59,0|ix2wjz,43,59,0|ix2wk0,61,40,1|j7vprz,61,40,1|j7vps0,43,59,0|m0pkrz,43,59,0|m0pks0,61,40,1|mcy8nz,61,40,1|mcy8o0,43,59,0|mjfnfz,43,59,0|mjfng0,61,40,1|mvobbz,61,40,1|mvobc0,43,59,0|n25q3z,43,59,0|n25q40,61,40,1|needzz,61,40,1|neee00,43,59,0|nkvsrz,43,59,0|nkvss0,61,40,1|nx4gnz,61,40,1|nx4go0,43,59,0|omowrz,43,59,0|omows0,61,40,1|oyxknz,61,40,1|oyxko0,43,59,0|p5ezfz,43,59,0|p5ezg0,61,40,1|phnnbz,61,40,1|phnnc0,43,59,0|po523z,43,59,0|po5240,61,40,1|q0dpzz,61,40,1|q0dq00,43,59,0|q6v4rz,43,59,0|q6v4s0,61,40,1|qj3snz,61,40,1|qj3so0,43,59,0|qpy63z,43,59,0|qpy640,61,40,1|r26tzz,61,40,1|r26u00,43,59,0|r8o8rz,43,59,0|r8o8s0,61,40,1|rkwwnz,61,40,1|rkwwo0,43,59,0|rrebfz,43,59,0|rrebg0,61,40,1|s3mzbz,61,40,1|s3mzc0,43,59,0|sa4e3z,43,59,0|sa4e40,61,40,1|smd1zz,61,40,1|smd200,43,59,0|ssugrz,43,59,0|ssugs0,61,40,1|t534nz,61,40,1|t534o0,43,59,0|tbkjfz,43,59,0|tbkjg0,61,40,1|tnt7bz,61,40,1|tnt7c0,43,59,0|tunkrz,43,59,0|tunks0,61,40,1|u6w8nz,61,40,1|u6w8o0,43,59,0|uddnfz,43,59,0|uddng0,61,40,1|upmbbz,61,40,1|upmbc0,43,59,0|uw3q3z,43,59,0|uw3q40,61,40,1|v8cdzz,61,40,1|v8ce00,43,59,0|vetsrz,43,59,0|vetss0,61,40,1|vr2gnz,61,40,1|vr2go0,43,59,0|vxjvfz,43,59,0|vxjvg0,61,40,1|w9sjbz,61,40,1|w9sjc0,43,59,0|wgmwrz,43,59,0|wgmws0,61,40,1|wsvknz,61,40,1|wsvko0,43,59,0|wzczfz,43,59,0|wzczg0,61,40,1|xblnbz,61,40,1|xblnc0,43,59,0|xi323z,43,59,0|xi3240,61,40,1|xubpzz,61,40,1|xubq00,43,59,0|y0t4rz,43,59,0|y0t4s0,61,40,1|yd1snz,61,40,1|yd1so0,43,59,0|yjj7fz,43,59,0|yjj7g0,61,40,1|yvrvbz,61,40,1|yvrvc0,43,59,0|z29a3z,43,59,0|z29a40,61,40,1|zehxzz,61,40,1|zehy00,43,59,0|zlcbfz,43,59,0|zlcbg0,61,40,1|zxkzbz,61,40,1|zxkzc0,43,59,0|1042e3z,43,59,0|1042e40,61,40,1|10gb1zz,61,40,1|10gb200,43,59,0|10msgrz,43,59,0|10msgs0,61,40,1|10z14nz,61,40,1|10z14o0,43,59,0|115ijfz,43,59,0|115ijg0,61,40,1|11hr7bz,61,40,1|11hr7c0,43,59,0|11o8m3z,43,59,0|11o8m40,61,40,1|120h9zz,61,40,1|120ha00,43,59,0|126yorz,43,59,0|126yos0,61,40,1|12j7cnz,61,40,1|12j7co0,43,59,0|12q1q3z,43,59,0|12q1q40,61,40,1|132adzz,61,40,1|132ae00,43,59,0|138rsrz,43,59,0|138rss0,61,40,1|13l0gnz,61,40,1|13l0go0,43,59,0|13rhvfz,43,59,0|13rhvg0,61,40,1|143qjbz,61,40,1|143qjc0,43,59,0|14a7y3z,43,59,0|14a7y40,61,40,1|14mglzz,61,40,1|14mgm00,43,59,0|14sy0rz,43,59,0|14sy0s0,61,40,1|1556onz,61,40,1|1556oo0,43,59,0|15c123z,43,59,0|15c1240,61,40,1|15o9pzz,61,40,1|15o9q00,43,59,0|15ur4rz,43,59,0|15ur4s0,61,40,1|166zsnz,61,40,1|166zso0,43,59,0|16dh7fz,43,59,0|16dh7g0,61,40,1|16ppvbz,61,40,1|16ppvc0,43,59,0|16w7a3z,43,59,0|16w7a40,61,40,1|178fxzz,61,40,1|178fy00,43,59,0|17excrz,43,59,0|17excs0,61,40,1|17r60nz,61,40,1|17r60o0,43,59,0|17xnffz,43,59,0|17xnfg0,61,40,1|189w3bz,61,40,1|189w3c0,43,59,0|18gqgrz,43,59,0|18gqgs0,61,40,1|18sz4nz,61,40,1|18sz4o0,43,59,0|18zgjfz,43,59,0|18zgjg0,61,40,1|19bp7bz,61,40,1|19bp7c0,43,59,0|19i6m3z,43,59,0|19i6m40,61,40,1|19uf9zz,61,40,1|19ufa00,43,59,0|1a0worz,43,59,0|1a0wos0,61,40,1|1ad5cnz,61,40,1|1ad5co0,43,59,0|1ajmrfz,43,59,0|1ajmrg0,61,40,1|1avvfbz,61,40,1|1avvfc0,43,59,0|1b2psrz,43,59,0|1b2pss0,61,40,1|1beygnz,61,40,1|1beygo0,43,59,0|1blfvfz,43,59,0|1blfvg0,61,40,1|1bxojbz,61,40,1|1bxojc0,43,59,0|1c45y3z,43,59,0|1c45y40,61,40,1|1cgelzz,61,40,1|1cgem00,43,59,0|1cmw0rz,43,59,0|1cmw0s0,61,40,1|1cz4onz,61,40,1|1cz4oo0,43,59,0|1d5m3fz,43,59,0|1d5m3g0,61,40,1|1dhurbz,61,40,1|1dhurc0,43,59,0|1doc63z,43,59,0|1doc640,61,40,1|1e0ktzz,61,40,1|1e0ku00,43,59,0|1e7f7fz,43,59,0|1e7f7g0,61,40,1|1ejnvbz,61,40,1|1ejnvc0,43,59,0|1eq5a3z,43,59,0|1eq5a40,61,40,1|1f2dxzz,61,40,1|1f2dy00,43,59,0|1f8vcrz,43,59,0|1f8vcs0,61,40,1|1fl40nz,61,40,1|1fl40o0,43,59,0|1frlffz,43,59,0|1frlfg0,61,40,1|1g3u3bz,61,40,1|1g3u3c0,43,59,0|1gabi3z,43,59,0|1gabi40,61,40,1|1gmk5zz,61,40,1|1gmk600,43,59,0|1gt1krz,43,59,0|1gt1ks0,61,40,1|1h5a8nz,61,40,1|1h5a8o0,43,59,0|1hc4m3z,43,59,0|1hc4m40,61,40,1|1hod9zz,61,40,1|1hoda00,43,59,0|1huuorz,43,59,0|1huuos0,61,40,1|1i73cnz,61,40,1|1i73co0,43,59,0|1idkrfz,43,59,0|1idkrg0,61,40,1|1iptfbz,61,40,1|1iptfc0,43,59,0|1iwau3z,43,59,0|1iwau40,61,40,1|1j8jhzz,61,40,1|1j8ji00,43,59,0|1jf0wrz,43,59,0|1jf0ws0,61,40,1|1jr9knz,61,40,1|1jr9ko0,43,59,0|1jy3y3z,43,59,0|1jy3y40,61,40,1|1kaclzz,61,40,1|1kacm00,43,59,0|1kgu0rz,43,59,0|1kgu0s0,61,40,1|1kt2onz,61,40,1|1kt2oo0,43,59,0|1kzk3fz,43,59,0|1kzk3g0,61,40,1|1lbsrbz,61,40,1|1lbsrc0,43,59,0|1lia63z,43,59,0|1lia640,61,40,1|1luitzz,61,40,1|1luiu00,43,59,0|1m108rz,43,59,0|1m108s0,61,40,1|1md8wnz,61,40,1|1md8wo0,43,59,0|1mjqbfz,43,59,0|1mjqbg0,61,40,1|1mvyzbz,61,40,1|1mvyzc0,43,59,0|1n2tcrz,43,59,0|1n2tcs0,61,40,1|1nf20nz,61,40,1|1nf20o0,43,59,0|1nljffz,43,59,0|1nljfg0,61,40,1|1nxs3bz,61,40,1|1nxs3c0,43,59,0|1o49i3z,43,59,0|1o49i40,61,40,1|1ogi5zz,61,40,1|1ogi600,43,59,0|1omzkrz,43,59,0|1omzks0,61,40,1|1oz88nz,61,40,1|1oz88o0,43,59,0|1p5pnfz,43,59,0|1p5png0,61,40,1|1phybbz,61,40,1|1phybc0,43,59,0|1posorz,43,59,0|1posos0,61,40,1|1q11cnz,61,40,1|1q11co0,43,59,0|1q7irfz,43,59,0|1q7irg0,61,40,1|1qjrfbz,61,40,1|1qjrfc0,43,59,0|1qq8u3z,43,59,0|1qq8u40,61,40,1|1r2hhzz,61,40,1|1r2hi00,43,59,0|1r8ywrz,43,59,0|1r8yws0,61,40,1|1rl7knz,61,40,1|1rl7ko0,43,59,0|1rrozfz,43,59,0|1rrozg0,61,40,1|1s3xnbz,61,40,1|1s3xnc0,43,59,0|1saf23z,43,59,0|1saf240,61,40,1|1smnpzz,61,40,1|1smnq00,43,59,0|1sti3fz,43,59,0|1sti3g0,61,40,1|1t5qrbz,61,40,1|1t5qrc0,43,59,0|1tc863z,43,59,0|1tc8640,61,40,1|1togtzz,61,40,1|1togu00,43,59,0|1tuy8rz,43,59,0|1tuy8s0,61,40,1|1u76wnz,61,40,1|1u76wo0,43,59,0|1udobfz,43,59,0|1udobg0,61,40,1|1upwzbz,61,40,1|1upwzc0,43,59,0|1uwee3z,43,59,0|1uwee40,61,40,1|1v8n1zz,61,40,1|1v8n200,43,59,0|1vf4grz,43,59,0|1vf4gs0,61,40,1|1vrd4nz,61,40,1|1vrd4o0,43,59,0|NaN,43,59,0\",\"America/Port_of_Spain|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/Porto_Velho|,0,159,0|-t85g61,0,159,0|-t85g60,41,40,0|-jyl7o1,41,40,0|-jyl7o0,38,41,1|-jpayc1,38,41,1|-jpayc0,41,40,0|-jfsa81,41,40,0|-jfsa80,38,41,1|-j6j101,38,41,1|-j6j100,41,40,0|-ahcvk1,41,40,0|-ahcvk0,38,41,1|-aad0w1,38,41,1|-aad0w0,41,40,0|-9yky81,41,40,0|-9yky80,38,41,1|-9scyc1,38,41,1|-9scyc0,41,40,0|-9ft0w1,41,40,0|-9ft0w0,38,41,1|-99j6c1,38,41,1|-99j6c0,41,40,0|-8wz8w1,41,40,0|-8wz8w0,38,41,1|-8scno1,38,41,1|-8scno0,41,40,0|-35xjk1,41,40,0|-35xjk0,38,41,1|-31nx01,38,41,1|-31nx00,41,40,0|-2kdm81,41,40,0|-2kdm80,38,41,1|-2hcfo1,38,41,1|-2hcfo0,41,40,0|-24qnk1,41,40,0|-24qnk0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1nia81,41,40,0|-1nia80,38,41,1|-1hc501,38,41,1|-1hc500,41,40,0|-14qcw1,41,40,0|-14qcw0,38,41,1|-yid01,38,41,1|-yid00,41,40,0|89jf3z,41,40,0|89jf40,38,41,1|8gdmzz,38,41,1|8gdn00,41,40,0|8rwj3z,41,40,0|8rwj40,38,41,1|8xnuzz,38,41,1|8xnv00,41,40,0|9aogfz,41,40,0|9aogg0,38,41,1|9g2tnz,38,41,1|9g2to0,41,40,0|NaN,41,40,0\",\"America/Puerto_Rico|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/Punta_Arenas|,0,160,0|-15r0w79,0,160,0|-15r0w78,84,161,0|-vauawr,84,161,0|-vauawq,55,59,0|-rx8i41,55,59,0|-rx8i40,84,161,0|-qs16wr,84,161,0|-qs16wq,41,40,0|-qcwsw1,41,40,0|-qcwsw0,84,161,0|-m3etkr,84,161,0|-m3etkq,41,40,1|-lsgfk1,41,40,1|-lsgfk0,55,59,0|-lkl0s1,55,59,0|-lkl0s0,41,40,1|-l9oi81,41,40,1|-l9oi80,55,59,0|-l1t3g1,55,59,0|-l1t3g0,41,40,1|-kqwkw1,41,40,1|-kqwkw0,55,59,0|-kj1641,55,59,0|-kj1640,41,40,1|-k84nk1,41,40,1|-k84nk0,55,59,0|-k098s1,55,59,0|-k098s0,41,40,1|-jpavk1,41,40,1|-jpavk0,55,59,0|-jhfgs1,55,59,0|-jhfgs0,41,40,0|-eeay81,41,40,0|-eeay80,55,59,0|-eb5ws1,55,59,0|-eb5ws0,41,40,0|-bvifk1,41,40,0|-bvifk0,55,59,0|-bsvzk1,55,59,0|-bsvzk0,41,40,0|-lsvk1,41,40,0|-lsvk0,38,41,1|-e8qc1,38,41,1|-e8qc0,41,40,0|-1zww1,41,40,0|-1zww0,38,41,1|4hcbz,38,41,1|4hcc0,41,40,0|ekdrz,41,40,0|ekds0,38,41,1|mhhnz,38,41,1|mhho0,41,40,0|xagfz,41,40,0|xagg0,38,41,1|157kbz,38,41,1|157kc0,41,40,0|1gdhrz,41,40,0|1gdhs0,38,41,1|1nxmzz,38,41,1|1nxn00,41,40,0|1ydn3z,41,40,0|1ydn40,38,41,1|26npnz,38,41,1|26npo0,41,40,0|2htn3z,41,40,0|2htn40,38,41,1|2pdsbz,38,41,1|2pdsc0,41,40,0|30jprz,41,40,0|30jps0,38,41,1|38gtnz,38,41,1|38gto0,41,40,0|3j9sfz,41,40,0|3j9sg0,38,41,1|3r6wbz,38,41,1|3r6wc0,41,40,0|41zv3z,41,40,0|41zv40,38,41,1|49wyzz,38,41,1|49wz00,41,40,0|4l2wfz,41,40,0|4l2wg0,38,41,1|4sn1nz,38,41,1|4sn1o0,41,40,0|53sz3z,41,40,0|53sz40,38,41,1|5bd4bz,38,41,1|5bd4c0,41,40,0|5mj1rz,41,40,0|5mj1s0,38,41,1|5ug5nz,38,41,1|5ug5o0,41,40,0|6594fz,41,40,0|6594g0,38,41,1|6d68bz,38,41,1|6d68c0,41,40,0|6nz73z,41,40,0|6nz740,38,41,1|6vwazz,38,41,1|6vwb00,41,40,0|76p9rz,41,40,0|76p9s0,38,41,1|7emdnz,38,41,1|7emdo0,41,40,0|7psb3z,41,40,0|7psb40,38,41,1|7xcgbz,38,41,1|7xcgc0,41,40,0|88idrz,41,40,0|88ids0,38,41,1|8g2izz,38,41,1|8g2j00,41,40,0|8r8gfz,41,40,0|8r8gg0,38,41,1|90lezz,38,41,1|90lf00,41,40,0|99yj3z,41,40,0|99yj40,38,41,1|9hvmzz,38,41,1|9hvn00,41,40,0|9solrz,41,40,0|9sols0,38,41,1|a0lpnz,38,41,1|a0lpo0,41,40,0|abrn3z,41,40,0|abrn40,38,41,1|ajbsbz,38,41,1|ajbsc0,41,40,0|at1v3z,41,40,0|at1v40,38,41,1|b21uzz,38,41,1|b21v00,41,40,0|bd7sfz,41,40,0|bd7sg0,38,41,1|bl4wbz,38,41,1|bl4wc0,41,40,0|bvxv3z,41,40,0|bvxv40,38,41,1|c3uyzz,38,41,1|c3uz00,41,40,0|cenxrz,41,40,0|cenxs0,38,41,1|cml1nz,38,41,1|cml1o0,41,40,0|cxe0fz,41,40,0|cxe0g0,38,41,1|d5b4bz,38,41,1|d5b4c0,41,40,0|dgh1rz,41,40,0|dgh1s0,38,41,1|do16zz,38,41,1|do1700,41,40,0|dz74fz,41,40,0|dz74g0,38,41,1|e7u5nz,38,41,1|e7u5o0,41,40,0|ehx73z,41,40,0|ehx740,38,41,1|epuazz,38,41,1|epub00,41,40,0|ezxcfz,41,40,0|ezxcg0,38,41,1|f9n9nz,38,41,1|f9n9o0,41,40,0|fjdcfz,41,40,0|fjdcg0,38,41,1|fragbz,38,41,1|fragc0,41,40,0|g2gdrz,41,40,0|g2gds0,38,41,1|ga0izz,38,41,1|ga0j00,41,40,0|gl6gfz,41,40,0|gl6gg0,38,41,1|gsqlnz,38,41,1|gsqlo0,41,40,0|h3wj3z,41,40,0|h3wj40,38,41,1|hbgobz,38,41,1|hbgoc0,41,40,0|hmmlrz,41,40,0|hmmls0,38,41,1|hujpnz,38,41,1|hujpo0,41,40,0|i5cofz,41,40,0|i5cog0,38,41,1|id9sbz,38,41,1|id9sc0,41,40,0|io2r3z,41,40,0|io2r40,38,41,1|ivzuzz,38,41,1|ivzv00,41,40,0|j75sfz,41,40,0|j75sg0,38,41,1|jepxnz,38,41,1|jepxo0,41,40,0|jpvv3z,41,40,0|jpvv40,38,41,1|jyiwbz,38,41,1|jyiwc0,41,40,0|k8lxrz,41,40,0|k8lxs0,38,41,1|kgj1nz,38,41,1|kgj1o0,41,40,0|krc0fz,41,40,0|krc0g0,38,41,1|l0c0bz,38,41,1|l0c0c0,41,40,0|la233z,41,40,0|la2340,38,41,1|lkuwbz,38,41,1|lkuwc0,41,40,0|lq9f3z,41,40,0|lq9f40,38,41,1|m380bz,38,41,1|m380c0,41,40,0|m9pf3z,41,40,0|m9pf40,38,41,1|mly2zz,38,41,1|mly300,41,40,0|mssgfz,41,40,0|mssgg0,38,41,1|n4o5nz,38,41,1|n4o5o0,41,40,0|nbij3z,41,40,0|nbij40,38,41,1|o776zz,38,41,1|o77700,41,40,0|obvsfz,41,40,0|obvsg0,38,41,1|ohn4bz,38,41,1|ohn4c0,38,41,0|NaN,38,41,0\",\"America/Rainy_River|,0,162,0|-1353ahl,0,162,0|-1353ahk,45,63,0|-qzov41,45,63,0|-qzov40,48,59,1|-qplz81,48,59,1|-qplz80,45,63,0|-f9ofc1,45,63,0|-f9ofc0,48,59,1|-ek21s1,48,59,1|-ek21s0,52,59,1|-cq2tg1,52,59,1|-cq2tg0,53,59,1|-cnp0k1,53,59,1|-cnp0k0,45,63,0|296u7z,45,63,0|296u80,48,59,1|2ijsrz,48,59,1|2ijss0,45,63,0|2rwwvz,45,63,0|2rwww0,48,59,1|319vfz,48,59,1|319vg0,45,63,0|3amzjz,45,63,0|3amzk0,48,59,1|3kcwrz,48,59,1|3kcws0,45,63,0|3td27z,45,63,0|3td280,48,59,1|432zfz,48,59,1|432zg0,45,63,0|4cg3jz,45,63,0|4cg3k0,48,59,1|4lt23z,48,59,1|4lt240,45,63,0|4v667z,45,63,0|4v6680,48,59,1|54j4rz,48,59,1|54j4s0,45,63,0|5dw8vz,45,63,0|5dw8w0,48,59,1|5n97fz,48,59,1|5n97g0,45,63,0|5wmbjz,45,63,0|5wmbk0,48,59,1|65za3z,48,59,1|65za40,45,63,0|6fce7z,45,63,0|6fce80,48,59,1|6p2bfz,48,59,1|6p2bg0,45,63,0|6y2gvz,45,63,0|6y2gw0,48,59,1|77se3z,48,59,1|77se40,45,63,0|7h5i7z,45,63,0|7h5i80,48,59,1|7qigrz,48,59,1|7qigs0,45,63,0|7zvkvz,45,63,0|7zvkw0,48,59,1|898jfz,48,59,1|898jg0,45,63,0|8ilnjz,45,63,0|8ilnk0,48,59,1|8rym3z,48,59,1|8rym40,45,63,0|908u7z,45,63,0|908u80,48,59,1|9aoorz,48,59,1|9aoos0,45,63,0|9iywvz,45,63,0|9iyww0,48,59,1|9trq3z,48,59,1|9trq40,45,63,0|a1ozjz,45,63,0|a1ozk0,48,59,1|achsrz,48,59,1|achss0,45,63,0|akf27z,45,63,0|akf280,48,59,1|av7vfz,48,59,1|av7vg0,45,63,0|b3i3jz,45,63,0|b3i3k0,48,59,1|bdxy3z,48,59,1|bdxy40,45,63,0|bm867z,45,63,0|bm8680,48,59,1|bwo0rz,48,59,1|bwo0s0,45,63,0|c4y8vz,45,63,0|c4y8w0,48,59,1|cfr23z,48,59,1|cfr240,45,63,0|cnobjz,45,63,0|cnobk0,48,59,1|cyh4rz,48,59,1|cyh4s0,45,63,0|d6ee7z,45,63,0|d6ee80,48,59,1|dh77fz,48,59,1|dh77g0,45,63,0|dphfjz,45,63,0|dphfk0,48,59,1|dzxa3z,48,59,1|dzxa40,45,63,0|e87i7z,45,63,0|e87i80,48,59,1|eincrz,48,59,1|eincs0,45,63,0|eqxkvz,45,63,0|eqxkw0,48,59,1|f1dffz,48,59,1|f1dfg0,45,63,0|f9nnjz,45,63,0|f9nnk0,48,59,1|fkggrz,48,59,1|fkggs0,45,63,0|fsdq7z,45,63,0|fsdq80,48,59,1|g36jfz,48,59,1|g36jg0,45,63,0|gb3svz,45,63,0|gb3sw0,48,59,1|glwm3z,48,59,1|glwm40,45,63,0|gu6u7z,45,63,0|gu6u80,48,59,1|h4morz,48,59,1|h4mos0,45,63,0|hcwwvz,45,63,0|hcwww0,48,59,1|hncrfz,48,59,1|hncrg0,45,63,0|hvmzjz,45,63,0|hvmzk0,48,59,1|i6fsrz,48,59,1|i6fss0,45,63,0|ied27z,45,63,0|ied280,48,59,1|ip5vfz,48,59,1|ip5vg0,45,63,0|ix34vz,45,63,0|ix34w0,48,59,1|j7vy3z,48,59,1|j7vy40,45,63,0|jeqbjz,45,63,0|jeqbk0,48,59,1|jqyzfz,48,59,1|jqyzg0,45,63,0|jxge7z,45,63,0|jxge80,48,59,1|k9p23z,48,59,1|k9p240,45,63,0|kg6gvz,45,63,0|kg6gw0,48,59,1|ksf4rz,48,59,1|ksf4s0,45,63,0|kz9i7z,45,63,0|kz9i80,48,59,1|lbi63z,48,59,1|lbi640,45,63,0|lhzkvz,45,63,0|lhzkw0,48,59,1|lu88rz,48,59,1|lu88s0,45,63,0|m0pnjz,45,63,0|m0pnk0,48,59,1|mcybfz,48,59,1|mcybg0,45,63,0|mjfq7z,45,63,0|mjfq80,48,59,1|mvoe3z,48,59,1|mvoe40,45,63,0|n25svz,45,63,0|n25sw0,48,59,1|neegrz,48,59,1|neegs0,45,63,0|nkvvjz,45,63,0|nkvvk0,48,59,1|nx4jfz,48,59,1|nx4jg0,45,63,0|o3ywvz,45,63,0|o3yww0,48,59,1|og7krz,48,59,1|og7ks0,45,63,0|omozjz,45,63,0|omozk0,48,59,1|oyxnfz,48,59,1|oyxng0,45,63,0|p5f27z,45,63,0|p5f280,48,59,1|phnq3z,48,59,1|phnq40,45,63,0|po54vz,45,63,0|po54w0,48,59,1|q0dsrz,48,59,1|q0dss0,45,63,0|q6v7jz,45,63,0|q6v7k0,48,59,1|qj3vfz,48,59,1|qj3vg0,45,63,0|qpy8vz,45,63,0|qpy8w0,48,59,1|r26wrz,48,59,1|r26ws0,45,63,0|r8objz,45,63,0|r8obk0,48,59,1|rkwzfz,48,59,1|rkwzg0,45,63,0|rree7z,45,63,0|rree80,48,59,1|s3n23z,48,59,1|s3n240,45,63,0|sa4gvz,45,63,0|sa4gw0,48,59,1|smd4rz,48,59,1|smd4s0,45,63,0|ssujjz,45,63,0|ssujk0,48,59,1|t537fz,48,59,1|t537g0,45,63,0|tbkm7z,45,63,0|tbkm80,48,59,1|tnta3z,48,59,1|tnta40,45,63,0|tunnjz,45,63,0|tunnk0,48,59,1|u6wbfz,48,59,1|u6wbg0,45,63,0|uddq7z,45,63,0|uddq80,48,59,1|upme3z,48,59,1|upme40,45,63,0|uw3svz,45,63,0|uw3sw0,48,59,1|v8cgrz,48,59,1|v8cgs0,45,63,0|vetvjz,45,63,0|vetvk0,48,59,1|vr2jfz,48,59,1|vr2jg0,45,63,0|vxjy7z,45,63,0|vxjy80,48,59,1|w9sm3z,48,59,1|w9sm40,45,63,0|wgmzjz,45,63,0|wgmzk0,48,59,1|wsvnfz,48,59,1|wsvng0,45,63,0|wzd27z,45,63,0|wzd280,48,59,1|xblq3z,48,59,1|xblq40,45,63,0|xi34vz,45,63,0|xi34w0,48,59,1|xubsrz,48,59,1|xubss0,45,63,0|y0t7jz,45,63,0|y0t7k0,48,59,1|yd1vfz,48,59,1|yd1vg0,45,63,0|yjja7z,45,63,0|yjja80,48,59,1|yvry3z,48,59,1|yvry40,45,63,0|z29cvz,45,63,0|z29cw0,48,59,1|zei0rz,48,59,1|zei0s0,45,63,0|zlce7z,45,63,0|zlce80,48,59,1|zxl23z,48,59,1|zxl240,45,63,0|1042gvz,45,63,0|1042gw0,48,59,1|10gb4rz,48,59,1|10gb4s0,45,63,0|10msjjz,45,63,0|10msjk0,48,59,1|10z17fz,48,59,1|10z17g0,45,63,0|115im7z,45,63,0|115im80,48,59,1|11hra3z,48,59,1|11hra40,45,63,0|11o8ovz,45,63,0|11o8ow0,48,59,1|120hcrz,48,59,1|120hcs0,45,63,0|126yrjz,45,63,0|126yrk0,48,59,1|12j7ffz,48,59,1|12j7fg0,45,63,0|12q1svz,45,63,0|12q1sw0,48,59,1|132agrz,48,59,1|132ags0,45,63,0|138rvjz,45,63,0|138rvk0,48,59,1|13l0jfz,48,59,1|13l0jg0,45,63,0|13rhy7z,45,63,0|13rhy80,48,59,1|143qm3z,48,59,1|143qm40,45,63,0|14a80vz,45,63,0|14a80w0,48,59,1|14mgorz,48,59,1|14mgos0,45,63,0|14sy3jz,45,63,0|14sy3k0,48,59,1|1556rfz,48,59,1|1556rg0,45,63,0|15c14vz,45,63,0|15c14w0,48,59,1|15o9srz,48,59,1|15o9ss0,45,63,0|15ur7jz,45,63,0|15ur7k0,48,59,1|166zvfz,48,59,1|166zvg0,45,63,0|16dha7z,45,63,0|16dha80,48,59,1|16ppy3z,48,59,1|16ppy40,45,63,0|16w7cvz,45,63,0|16w7cw0,48,59,1|178g0rz,48,59,1|178g0s0,45,63,0|17exfjz,45,63,0|17exfk0,48,59,1|17r63fz,48,59,1|17r63g0,45,63,0|17xni7z,45,63,0|17xni80,48,59,1|189w63z,48,59,1|189w640,45,63,0|18gqjjz,45,63,0|18gqjk0,48,59,1|18sz7fz,48,59,1|18sz7g0,45,63,0|18zgm7z,45,63,0|18zgm80,48,59,1|19bpa3z,48,59,1|19bpa40,45,63,0|19i6ovz,45,63,0|19i6ow0,48,59,1|19ufcrz,48,59,1|19ufcs0,45,63,0|1a0wrjz,45,63,0|1a0wrk0,48,59,1|1ad5ffz,48,59,1|1ad5fg0,45,63,0|1ajmu7z,45,63,0|1ajmu80,48,59,1|1avvi3z,48,59,1|1avvi40,45,63,0|1b2pvjz,45,63,0|1b2pvk0,48,59,1|1beyjfz,48,59,1|1beyjg0,45,63,0|1blfy7z,45,63,0|1blfy80,48,59,1|1bxom3z,48,59,1|1bxom40,45,63,0|1c460vz,45,63,0|1c460w0,48,59,1|1cgeorz,48,59,1|1cgeos0,45,63,0|1cmw3jz,45,63,0|1cmw3k0,48,59,1|1cz4rfz,48,59,1|1cz4rg0,45,63,0|1d5m67z,45,63,0|1d5m680,48,59,1|1dhuu3z,48,59,1|1dhuu40,45,63,0|1doc8vz,45,63,0|1doc8w0,48,59,1|1e0kwrz,48,59,1|1e0kws0,45,63,0|1e7fa7z,45,63,0|1e7fa80,48,59,1|1ejny3z,48,59,1|1ejny40,45,63,0|1eq5cvz,45,63,0|1eq5cw0,48,59,1|1f2e0rz,48,59,1|1f2e0s0,45,63,0|1f8vfjz,45,63,0|1f8vfk0,48,59,1|1fl43fz,48,59,1|1fl43g0,45,63,0|1frli7z,45,63,0|1frli80,48,59,1|1g3u63z,48,59,1|1g3u640,45,63,0|1gabkvz,45,63,0|1gabkw0,48,59,1|1gmk8rz,48,59,1|1gmk8s0,45,63,0|1gt1njz,45,63,0|1gt1nk0,48,59,1|1h5abfz,48,59,1|1h5abg0,45,63,0|1hc4ovz,45,63,0|1hc4ow0,48,59,1|1hodcrz,48,59,1|1hodcs0,45,63,0|1huurjz,45,63,0|1huurk0,48,59,1|1i73ffz,48,59,1|1i73fg0,45,63,0|1idku7z,45,63,0|1idku80,48,59,1|1ipti3z,48,59,1|1ipti40,45,63,0|1iwawvz,45,63,0|1iwaww0,48,59,1|1j8jkrz,48,59,1|1j8jks0,45,63,0|1jf0zjz,45,63,0|1jf0zk0,48,59,1|1jr9nfz,48,59,1|1jr9ng0,45,63,0|1jy40vz,45,63,0|1jy40w0,48,59,1|1kacorz,48,59,1|1kacos0,45,63,0|1kgu3jz,45,63,0|1kgu3k0,48,59,1|1kt2rfz,48,59,1|1kt2rg0,45,63,0|1kzk67z,45,63,0|1kzk680,48,59,1|1lbsu3z,48,59,1|1lbsu40,45,63,0|1lia8vz,45,63,0|1lia8w0,48,59,1|1luiwrz,48,59,1|1luiws0,45,63,0|1m10bjz,45,63,0|1m10bk0,48,59,1|1md8zfz,48,59,1|1md8zg0,45,63,0|1mjqe7z,45,63,0|1mjqe80,48,59,1|1mvz23z,48,59,1|1mvz240,45,63,0|1n2tfjz,45,63,0|1n2tfk0,48,59,1|1nf23fz,48,59,1|1nf23g0,45,63,0|1nlji7z,45,63,0|1nlji80,48,59,1|1nxs63z,48,59,1|1nxs640,45,63,0|1o49kvz,45,63,0|1o49kw0,48,59,1|1ogi8rz,48,59,1|1ogi8s0,45,63,0|1omznjz,45,63,0|1omznk0,48,59,1|1oz8bfz,48,59,1|1oz8bg0,45,63,0|1p5pq7z,45,63,0|1p5pq80,48,59,1|1phye3z,48,59,1|1phye40,45,63,0|1posrjz,45,63,0|1posrk0,48,59,1|1q11ffz,48,59,1|1q11fg0,45,63,0|1q7iu7z,45,63,0|1q7iu80,48,59,1|1qjri3z,48,59,1|1qjri40,45,63,0|1qq8wvz,45,63,0|1qq8ww0,48,59,1|1r2hkrz,48,59,1|1r2hks0,45,63,0|1r8yzjz,45,63,0|1r8yzk0,48,59,1|1rl7nfz,48,59,1|1rl7ng0,45,63,0|1rrp27z,45,63,0|1rrp280,48,59,1|1s3xq3z,48,59,1|1s3xq40,45,63,0|1saf4vz,45,63,0|1saf4w0,48,59,1|1smnsrz,48,59,1|1smnss0,45,63,0|1sti67z,45,63,0|1sti680,48,59,1|1t5qu3z,48,59,1|1t5qu40,45,63,0|1tc88vz,45,63,0|1tc88w0,48,59,1|1togwrz,48,59,1|1togws0,45,63,0|1tuybjz,45,63,0|1tuybk0,48,59,1|1u76zfz,48,59,1|1u76zg0,45,63,0|1udoe7z,45,63,0|1udoe80,48,59,1|1upx23z,48,59,1|1upx240,45,63,0|1uwegvz,45,63,0|1uwegw0,48,59,1|1v8n4rz,48,59,1|1v8n4s0,45,63,0|1vf4jjz,45,63,0|1vf4jk0,48,59,1|1vrd7fz,48,59,1|1vrd7g0,45,63,0|NaN,45,63,0\",\"America/Rankin_Inlet|,59,1,0|-6s8lc1,59,1,0|-6s8lc0,45,63,0|-2g1wo1,45,63,0|-2g1wo0,85,40,1|-26bwo1,85,40,1|-26bwo0,45,63,0|5dw8vz,45,63,0|5dw8w0,48,59,1|5n97fz,48,59,1|5n97g0,45,63,0|5wmbjz,45,63,0|5wmbk0,48,59,1|65za3z,48,59,1|65za40,45,63,0|6fce7z,45,63,0|6fce80,48,59,1|6p2bfz,48,59,1|6p2bg0,45,63,0|6y2gvz,45,63,0|6y2gw0,48,59,1|77se3z,48,59,1|77se40,45,63,0|7h5i7z,45,63,0|7h5i80,48,59,1|7qigrz,48,59,1|7qigs0,45,63,0|7zvkvz,45,63,0|7zvkw0,48,59,1|898jfz,48,59,1|898jg0,45,63,0|8ilnjz,45,63,0|8ilnk0,48,59,1|8rym3z,48,59,1|8rym40,45,63,0|908u7z,45,63,0|908u80,48,59,1|9aoorz,48,59,1|9aoos0,45,63,0|9iywvz,45,63,0|9iyww0,48,59,1|9trq3z,48,59,1|9trq40,45,63,0|a1ozjz,45,63,0|a1ozk0,48,59,1|achsrz,48,59,1|achss0,45,63,0|akf27z,45,63,0|akf280,48,59,1|av7vfz,48,59,1|av7vg0,45,63,0|b3i3jz,45,63,0|b3i3k0,48,59,1|bdxy3z,48,59,1|bdxy40,45,63,0|bm867z,45,63,0|bm8680,48,59,1|bwo0rz,48,59,1|bwo0s0,45,63,0|c4y8vz,45,63,0|c4y8w0,48,59,1|cfr23z,48,59,1|cfr240,45,63,0|cnobjz,45,63,0|cnobk0,48,59,1|cyh4rz,48,59,1|cyh4s0,45,63,0|d6ee7z,45,63,0|d6ee80,48,59,1|dh77fz,48,59,1|dh77g0,45,63,0|dphfjz,45,63,0|dphfk0,48,59,1|dzxa3z,48,59,1|dzxa40,45,63,0|e87i7z,45,63,0|e87i80,48,59,1|eincrz,48,59,1|eincs0,45,63,0|eqxkvz,45,63,0|eqxkw0,48,59,1|f1dffz,48,59,1|f1dfg0,45,63,0|f9nnjz,45,63,0|f9nnk0,48,59,1|fkggrz,48,59,1|fkggs0,45,63,0|fsdq7z,45,63,0|fsdq80,48,59,1|g36jfz,48,59,1|g36jg0,43,59,0|gb3svz,43,59,0|gb3sw0,48,59,1|glwm3z,48,59,1|glwm40,45,63,0|gu6u7z,45,63,0|gu6u80,48,59,1|h4morz,48,59,1|h4mos0,45,63,0|hcwwvz,45,63,0|hcwww0,48,59,1|hncrfz,48,59,1|hncrg0,45,63,0|hvmzjz,45,63,0|hvmzk0,48,59,1|i6fsrz,48,59,1|i6fss0,45,63,0|ied27z,45,63,0|ied280,48,59,1|ip5vfz,48,59,1|ip5vg0,45,63,0|ix34vz,45,63,0|ix34w0,48,59,1|j7vy3z,48,59,1|j7vy40,45,63,0|jeqbjz,45,63,0|jeqbk0,48,59,1|jqyzfz,48,59,1|jqyzg0,45,63,0|jxge7z,45,63,0|jxge80,48,59,1|k9p23z,48,59,1|k9p240,45,63,0|kg6gvz,45,63,0|kg6gw0,48,59,1|ksf4rz,48,59,1|ksf4s0,45,63,0|kz9i7z,45,63,0|kz9i80,48,59,1|lbi63z,48,59,1|lbi640,45,63,0|lhzkvz,45,63,0|lhzkw0,48,59,1|lu88rz,48,59,1|lu88s0,45,63,0|m0pnjz,45,63,0|m0pnk0,48,59,1|mcybfz,48,59,1|mcybg0,45,63,0|mjfq7z,45,63,0|mjfq80,48,59,1|mvoe3z,48,59,1|mvoe40,45,63,0|n25svz,45,63,0|n25sw0,48,59,1|neegrz,48,59,1|neegs0,45,63,0|nkvvjz,45,63,0|nkvvk0,48,59,1|nx4jfz,48,59,1|nx4jg0,45,63,0|o3ywvz,45,63,0|o3yww0,48,59,1|og7krz,48,59,1|og7ks0,45,63,0|omozjz,45,63,0|omozk0,48,59,1|oyxnfz,48,59,1|oyxng0,45,63,0|p5f27z,45,63,0|p5f280,48,59,1|phnq3z,48,59,1|phnq40,45,63,0|po54vz,45,63,0|po54w0,48,59,1|q0dsrz,48,59,1|q0dss0,45,63,0|q6v7jz,45,63,0|q6v7k0,48,59,1|qj3vfz,48,59,1|qj3vg0,45,63,0|qpy8vz,45,63,0|qpy8w0,48,59,1|r26wrz,48,59,1|r26ws0,45,63,0|r8objz,45,63,0|r8obk0,48,59,1|rkwzfz,48,59,1|rkwzg0,45,63,0|rree7z,45,63,0|rree80,48,59,1|s3n23z,48,59,1|s3n240,45,63,0|sa4gvz,45,63,0|sa4gw0,48,59,1|smd4rz,48,59,1|smd4s0,45,63,0|ssujjz,45,63,0|ssujk0,48,59,1|t537fz,48,59,1|t537g0,45,63,0|tbkm7z,45,63,0|tbkm80,48,59,1|tnta3z,48,59,1|tnta40,45,63,0|tunnjz,45,63,0|tunnk0,48,59,1|u6wbfz,48,59,1|u6wbg0,45,63,0|uddq7z,45,63,0|uddq80,48,59,1|upme3z,48,59,1|upme40,45,63,0|uw3svz,45,63,0|uw3sw0,48,59,1|v8cgrz,48,59,1|v8cgs0,45,63,0|vetvjz,45,63,0|vetvk0,48,59,1|vr2jfz,48,59,1|vr2jg0,45,63,0|vxjy7z,45,63,0|vxjy80,48,59,1|w9sm3z,48,59,1|w9sm40,45,63,0|wgmzjz,45,63,0|wgmzk0,48,59,1|wsvnfz,48,59,1|wsvng0,45,63,0|wzd27z,45,63,0|wzd280,48,59,1|xblq3z,48,59,1|xblq40,45,63,0|xi34vz,45,63,0|xi34w0,48,59,1|xubsrz,48,59,1|xubss0,45,63,0|y0t7jz,45,63,0|y0t7k0,48,59,1|yd1vfz,48,59,1|yd1vg0,45,63,0|yjja7z,45,63,0|yjja80,48,59,1|yvry3z,48,59,1|yvry40,45,63,0|z29cvz,45,63,0|z29cw0,48,59,1|zei0rz,48,59,1|zei0s0,45,63,0|zlce7z,45,63,0|zlce80,48,59,1|zxl23z,48,59,1|zxl240,45,63,0|1042gvz,45,63,0|1042gw0,48,59,1|10gb4rz,48,59,1|10gb4s0,45,63,0|10msjjz,45,63,0|10msjk0,48,59,1|10z17fz,48,59,1|10z17g0,45,63,0|115im7z,45,63,0|115im80,48,59,1|11hra3z,48,59,1|11hra40,45,63,0|11o8ovz,45,63,0|11o8ow0,48,59,1|120hcrz,48,59,1|120hcs0,45,63,0|126yrjz,45,63,0|126yrk0,48,59,1|12j7ffz,48,59,1|12j7fg0,45,63,0|12q1svz,45,63,0|12q1sw0,48,59,1|132agrz,48,59,1|132ags0,45,63,0|138rvjz,45,63,0|138rvk0,48,59,1|13l0jfz,48,59,1|13l0jg0,45,63,0|13rhy7z,45,63,0|13rhy80,48,59,1|143qm3z,48,59,1|143qm40,45,63,0|14a80vz,45,63,0|14a80w0,48,59,1|14mgorz,48,59,1|14mgos0,45,63,0|14sy3jz,45,63,0|14sy3k0,48,59,1|1556rfz,48,59,1|1556rg0,45,63,0|15c14vz,45,63,0|15c14w0,48,59,1|15o9srz,48,59,1|15o9ss0,45,63,0|15ur7jz,45,63,0|15ur7k0,48,59,1|166zvfz,48,59,1|166zvg0,45,63,0|16dha7z,45,63,0|16dha80,48,59,1|16ppy3z,48,59,1|16ppy40,45,63,0|16w7cvz,45,63,0|16w7cw0,48,59,1|178g0rz,48,59,1|178g0s0,45,63,0|17exfjz,45,63,0|17exfk0,48,59,1|17r63fz,48,59,1|17r63g0,45,63,0|17xni7z,45,63,0|17xni80,48,59,1|189w63z,48,59,1|189w640,45,63,0|18gqjjz,45,63,0|18gqjk0,48,59,1|18sz7fz,48,59,1|18sz7g0,45,63,0|18zgm7z,45,63,0|18zgm80,48,59,1|19bpa3z,48,59,1|19bpa40,45,63,0|19i6ovz,45,63,0|19i6ow0,48,59,1|19ufcrz,48,59,1|19ufcs0,45,63,0|1a0wrjz,45,63,0|1a0wrk0,48,59,1|1ad5ffz,48,59,1|1ad5fg0,45,63,0|1ajmu7z,45,63,0|1ajmu80,48,59,1|1avvi3z,48,59,1|1avvi40,45,63,0|1b2pvjz,45,63,0|1b2pvk0,48,59,1|1beyjfz,48,59,1|1beyjg0,45,63,0|1blfy7z,45,63,0|1blfy80,48,59,1|1bxom3z,48,59,1|1bxom40,45,63,0|1c460vz,45,63,0|1c460w0,48,59,1|1cgeorz,48,59,1|1cgeos0,45,63,0|1cmw3jz,45,63,0|1cmw3k0,48,59,1|1cz4rfz,48,59,1|1cz4rg0,45,63,0|1d5m67z,45,63,0|1d5m680,48,59,1|1dhuu3z,48,59,1|1dhuu40,45,63,0|1doc8vz,45,63,0|1doc8w0,48,59,1|1e0kwrz,48,59,1|1e0kws0,45,63,0|1e7fa7z,45,63,0|1e7fa80,48,59,1|1ejny3z,48,59,1|1ejny40,45,63,0|1eq5cvz,45,63,0|1eq5cw0,48,59,1|1f2e0rz,48,59,1|1f2e0s0,45,63,0|1f8vfjz,45,63,0|1f8vfk0,48,59,1|1fl43fz,48,59,1|1fl43g0,45,63,0|1frli7z,45,63,0|1frli80,48,59,1|1g3u63z,48,59,1|1g3u640,45,63,0|1gabkvz,45,63,0|1gabkw0,48,59,1|1gmk8rz,48,59,1|1gmk8s0,45,63,0|1gt1njz,45,63,0|1gt1nk0,48,59,1|1h5abfz,48,59,1|1h5abg0,45,63,0|1hc4ovz,45,63,0|1hc4ow0,48,59,1|1hodcrz,48,59,1|1hodcs0,45,63,0|1huurjz,45,63,0|1huurk0,48,59,1|1i73ffz,48,59,1|1i73fg0,45,63,0|1idku7z,45,63,0|1idku80,48,59,1|1ipti3z,48,59,1|1ipti40,45,63,0|1iwawvz,45,63,0|1iwaww0,48,59,1|1j8jkrz,48,59,1|1j8jks0,45,63,0|1jf0zjz,45,63,0|1jf0zk0,48,59,1|1jr9nfz,48,59,1|1jr9ng0,45,63,0|1jy40vz,45,63,0|1jy40w0,48,59,1|1kacorz,48,59,1|1kacos0,45,63,0|1kgu3jz,45,63,0|1kgu3k0,48,59,1|1kt2rfz,48,59,1|1kt2rg0,45,63,0|1kzk67z,45,63,0|1kzk680,48,59,1|1lbsu3z,48,59,1|1lbsu40,45,63,0|1lia8vz,45,63,0|1lia8w0,48,59,1|1luiwrz,48,59,1|1luiws0,45,63,0|1m10bjz,45,63,0|1m10bk0,48,59,1|1md8zfz,48,59,1|1md8zg0,45,63,0|1mjqe7z,45,63,0|1mjqe80,48,59,1|1mvz23z,48,59,1|1mvz240,45,63,0|1n2tfjz,45,63,0|1n2tfk0,48,59,1|1nf23fz,48,59,1|1nf23g0,45,63,0|1nlji7z,45,63,0|1nlji80,48,59,1|1nxs63z,48,59,1|1nxs640,45,63,0|1o49kvz,45,63,0|1o49kw0,48,59,1|1ogi8rz,48,59,1|1ogi8s0,45,63,0|1omznjz,45,63,0|1omznk0,48,59,1|1oz8bfz,48,59,1|1oz8bg0,45,63,0|1p5pq7z,45,63,0|1p5pq80,48,59,1|1phye3z,48,59,1|1phye40,45,63,0|1posrjz,45,63,0|1posrk0,48,59,1|1q11ffz,48,59,1|1q11fg0,45,63,0|1q7iu7z,45,63,0|1q7iu80,48,59,1|1qjri3z,48,59,1|1qjri40,45,63,0|1qq8wvz,45,63,0|1qq8ww0,48,59,1|1r2hkrz,48,59,1|1r2hks0,45,63,0|1r8yzjz,45,63,0|1r8yzk0,48,59,1|1rl7nfz,48,59,1|1rl7ng0,45,63,0|1rrp27z,45,63,0|1rrp280,48,59,1|1s3xq3z,48,59,1|1s3xq40,45,63,0|1saf4vz,45,63,0|1saf4w0,48,59,1|1smnsrz,48,59,1|1smnss0,45,63,0|1sti67z,45,63,0|1sti680,48,59,1|1t5qu3z,48,59,1|1t5qu40,45,63,0|1tc88vz,45,63,0|1tc88w0,48,59,1|1togwrz,48,59,1|1togws0,45,63,0|1tuybjz,45,63,0|1tuybk0,48,59,1|1u76zfz,48,59,1|1u76zg0,45,63,0|1udoe7z,45,63,0|1udoe80,48,59,1|1upx23z,48,59,1|1upx240,45,63,0|1uwegvz,45,63,0|1uwegw0,48,59,1|1v8n4rz,48,59,1|1v8n4s0,45,63,0|1vf4jjz,45,63,0|1vf4jk0,48,59,1|1vrd7fz,48,59,1|1vrd7g0,45,63,0|NaN,45,63,0\",\"America/Recife|,0,163,0|-t85ljd,0,163,0|-t85ljc,38,41,0|-jylag1,38,41,0|-jylag0,39,43,1|-jpb141,39,43,1|-jpb140,38,41,0|-jfsd01,38,41,0|-jfsd00,39,43,1|-j6j3s1,39,43,1|-j6j3s0,38,41,0|-ahcyc1,38,41,0|-ahcyc0,39,43,1|-aad3o1,39,43,1|-aad3o0,38,41,0|-9yl101,38,41,0|-9yl100,39,43,1|-9sd141,39,43,1|-9sd140,38,41,0|-9ft3o1,38,41,0|-9ft3o0,39,43,1|-99j941,39,43,1|-99j940,38,41,0|-8wzbo1,38,41,0|-8wzbo0,39,43,1|-8scqg1,39,43,1|-8scqg0,38,41,0|-35xmc1,38,41,0|-35xmc0,39,43,1|-31nzs1,39,43,1|-31nzs0,38,41,0|-2kdp01,38,41,0|-2kdp00,39,43,1|-2hcig1,39,43,1|-2hcig0,38,41,0|-24qqc1,38,41,0|-24qqc0,39,43,1|-204541,39,43,1|-204540,38,41,0|-1nid01,38,41,0|-1nid00,39,43,1|-1hc7s1,39,43,1|-1hc7s0,38,41,0|-14qfo1,38,41,0|-14qfo0,39,43,1|-yifs1,39,43,1|-yifs0,38,41,0|89jcbz,38,41,0|89jcc0,39,43,1|8gdk7z,39,43,1|8gdk80,38,41,0|8rwgbz,38,41,0|8rwgc0,39,43,1|8xns7z,39,43,1|8xns80,38,41,0|9aodnz,38,41,0|9aodo0,39,43,1|9g2qvz,39,43,1|9g2qw0,38,41,0|9t1hnz,38,41,0|9t1ho0,39,43,1|9yfuvz,39,43,1|9yfuw0,38,41,0|abrkbz,38,41,0|abrkc0,39,43,1|ahvuvz,39,43,1|ahvuw0,38,41,0|fj0azz,38,41,0|fj0b00,39,43,1|fqkg7z,39,43,1|fqkg80,38,41,0|g23cbz,38,41,0|g23cc0,39,43,1|g2g87z,39,43,1|g2g880,38,41,0|gl6dnz,38,41,0|gl6do0,39,43,1|grnmvz,39,43,1|grnmw0,38,41,0|NaN,38,41,0\",\"America/Regina|,0,164,0|-xkq9yd,0,164,0|-xkq9yc,44,62,0|-qzosc1,44,62,0|-qzosc0,47,63,1|-qplwg1,47,63,1|-qplwg0,44,62,0|-kp78k1,44,62,0|-kp78k0,47,63,1|-kha4o1,47,63,1|-kha4o0,44,62,0|-k6h5w1,44,62,0|-k6h5w0,47,63,1|-jyk201,47,63,1|-jyk200,44,62,0|-jnr381,44,62,0|-jnr380,47,63,1|-jftzc1,47,63,1|-jftzc0,44,62,0|-j4o1w1,44,62,0|-j4o1w0,47,63,1|-ix3wo1,47,63,1|-ix3wo0,44,62,0|-ilxz81,44,62,0|-ilxz80,47,63,1|-ie0vc1,47,63,1|-ie0vc0,44,62,0|-h2un81,44,62,0|-h2un80,47,63,1|-gthoo1,47,63,1|-gthoo0,44,62,0|-gk4kk1,44,62,0|-gk4kk0,47,63,1|-gb4ko1,47,63,1|-gb4ko0,44,62,0|-g1ehw1,44,62,0|-g1ehw0,47,63,1|-fs1jc1,47,63,1|-fs1jc0,44,62,0|-fibgk1,44,62,0|-fibgk0,47,63,1|-f8yi01,47,63,1|-f8yi00,44,62,0|-ezldw1,44,62,0|-ezldw0,47,63,1|-eq8fc1,47,63,1|-eq8fc0,44,62,0|-ek1z01,44,62,0|-ek1z00,57,63,1|-cq2tg1,57,63,1|-cq2tg0,58,63,1|-cnoxs1,58,63,1|-cnoxs0,44,62,0|-cdlwc1,44,62,0|-cdlwc0,47,63,1|-c48xs1,47,63,1|-c48xs0,44,62,0|-bu5wc1,44,62,0|-bu5wc0,47,63,1|-bm8sg1,47,63,1|-bm8sg0,44,62,0|-bbfto1,44,62,0|-bbfto0,47,63,1|-b3ips1,47,63,1|-b3ips0,44,62,0|-aspr01,44,62,0|-aspr00,47,63,1|-aksn41,47,63,1|-aksn40,44,62,0|-a9mpo1,44,62,0|-a9mpo0,47,63,1|-a22kg1,47,63,1|-a22kg0,44,62,0|-9qwn01,44,62,0|-9qwn00,47,63,1|-9izj41,47,63,1|-9izj40,44,62,0|-986kc1,44,62,0|-986kc0,47,63,1|-909gg1,47,63,1|-909gg0,44,62,0|-8pgho1,44,62,0|-8pgho0,47,63,1|-8hjds1,47,63,1|-8hjds0,44,62,0|-86qf01,44,62,0|-86qf00,47,63,1|-7ytb41,47,63,1|-7ytb40,44,62,0|-7o0cc1,44,62,0|-7o0cc0,47,63,1|-7g38g1,47,63,1|-7g38g0,44,62,0|-74xb01,44,62,0|-74xb00,47,63,1|-6x0741,47,63,1|-6x0740,44,62,0|-6m78c1,44,62,0|-6m78c0,47,63,1|-6ea4g1,47,63,1|-6ea4g0,44,62,0|-5kr301,44,62,0|-5kr300,47,63,1|-5be4g1,47,63,1|-5be4g0,44,62,0|-5210c1,44,62,0|-5210c0,45,63,0|NaN,45,63,0\",\"America/Resolute|,59,1,0|-bnp9c1,59,1,0|-bnp9c0,45,63,0|-2g1wo1,45,63,0|-2g1wo0,85,40,1|-26bwo1,85,40,1|-26bwo0,45,63,0|5dw8vz,45,63,0|5dw8w0,48,59,1|5n97fz,48,59,1|5n97g0,45,63,0|5wmbjz,45,63,0|5wmbk0,48,59,1|65za3z,48,59,1|65za40,45,63,0|6fce7z,45,63,0|6fce80,48,59,1|6p2bfz,48,59,1|6p2bg0,45,63,0|6y2gvz,45,63,0|6y2gw0,48,59,1|77se3z,48,59,1|77se40,45,63,0|7h5i7z,45,63,0|7h5i80,48,59,1|7qigrz,48,59,1|7qigs0,45,63,0|7zvkvz,45,63,0|7zvkw0,48,59,1|898jfz,48,59,1|898jg0,45,63,0|8ilnjz,45,63,0|8ilnk0,48,59,1|8rym3z,48,59,1|8rym40,45,63,0|908u7z,45,63,0|908u80,48,59,1|9aoorz,48,59,1|9aoos0,45,63,0|9iywvz,45,63,0|9iyww0,48,59,1|9trq3z,48,59,1|9trq40,45,63,0|a1ozjz,45,63,0|a1ozk0,48,59,1|achsrz,48,59,1|achss0,45,63,0|akf27z,45,63,0|akf280,48,59,1|av7vfz,48,59,1|av7vg0,45,63,0|b3i3jz,45,63,0|b3i3k0,48,59,1|bdxy3z,48,59,1|bdxy40,45,63,0|bm867z,45,63,0|bm8680,48,59,1|bwo0rz,48,59,1|bwo0s0,45,63,0|c4y8vz,45,63,0|c4y8w0,48,59,1|cfr23z,48,59,1|cfr240,45,63,0|cnobjz,45,63,0|cnobk0,48,59,1|cyh4rz,48,59,1|cyh4s0,45,63,0|d6ee7z,45,63,0|d6ee80,48,59,1|dh77fz,48,59,1|dh77g0,45,63,0|dphfjz,45,63,0|dphfk0,48,59,1|dzxa3z,48,59,1|dzxa40,45,63,0|e87i7z,45,63,0|e87i80,48,59,1|eincrz,48,59,1|eincs0,45,63,0|eqxkvz,45,63,0|eqxkw0,48,59,1|f1dffz,48,59,1|f1dfg0,45,63,0|f9nnjz,45,63,0|f9nnk0,48,59,1|fkggrz,48,59,1|fkggs0,45,63,0|fsdq7z,45,63,0|fsdq80,48,59,1|g36jfz,48,59,1|g36jg0,43,59,0|gb3svz,43,59,0|gb3sw0,48,59,1|glwm3z,48,59,1|glwm40,45,63,0|gu6u7z,45,63,0|gu6u80,48,59,1|h4morz,48,59,1|h4mos0,45,63,0|hcwwvz,45,63,0|hcwww0,48,59,1|hncrfz,48,59,1|hncrg0,45,63,0|hvmzjz,45,63,0|hvmzk0,48,59,1|i6fsrz,48,59,1|i6fss0,45,63,0|ied27z,45,63,0|ied280,48,59,1|ip5vfz,48,59,1|ip5vg0,45,63,0|ix34vz,45,63,0|ix34w0,48,59,1|j7vy3z,48,59,1|j7vy40,43,59,0|jeqbjz,43,59,0|jeqbk0,48,59,1|jqyzfz,48,59,1|jqyzg0,45,63,0|jxge7z,45,63,0|jxge80,48,59,1|k9p23z,48,59,1|k9p240,45,63,0|kg6gvz,45,63,0|kg6gw0,48,59,1|ksf4rz,48,59,1|ksf4s0,45,63,0|kz9i7z,45,63,0|kz9i80,48,59,1|lbi63z,48,59,1|lbi640,45,63,0|lhzkvz,45,63,0|lhzkw0,48,59,1|lu88rz,48,59,1|lu88s0,45,63,0|m0pnjz,45,63,0|m0pnk0,48,59,1|mcybfz,48,59,1|mcybg0,45,63,0|mjfq7z,45,63,0|mjfq80,48,59,1|mvoe3z,48,59,1|mvoe40,45,63,0|n25svz,45,63,0|n25sw0,48,59,1|neegrz,48,59,1|neegs0,45,63,0|nkvvjz,45,63,0|nkvvk0,48,59,1|nx4jfz,48,59,1|nx4jg0,45,63,0|o3ywvz,45,63,0|o3yww0,48,59,1|og7krz,48,59,1|og7ks0,45,63,0|omozjz,45,63,0|omozk0,48,59,1|oyxnfz,48,59,1|oyxng0,45,63,0|p5f27z,45,63,0|p5f280,48,59,1|phnq3z,48,59,1|phnq40,45,63,0|po54vz,45,63,0|po54w0,48,59,1|q0dsrz,48,59,1|q0dss0,45,63,0|q6v7jz,45,63,0|q6v7k0,48,59,1|qj3vfz,48,59,1|qj3vg0,45,63,0|qpy8vz,45,63,0|qpy8w0,48,59,1|r26wrz,48,59,1|r26ws0,45,63,0|r8objz,45,63,0|r8obk0,48,59,1|rkwzfz,48,59,1|rkwzg0,45,63,0|rree7z,45,63,0|rree80,48,59,1|s3n23z,48,59,1|s3n240,45,63,0|sa4gvz,45,63,0|sa4gw0,48,59,1|smd4rz,48,59,1|smd4s0,45,63,0|ssujjz,45,63,0|ssujk0,48,59,1|t537fz,48,59,1|t537g0,45,63,0|tbkm7z,45,63,0|tbkm80,48,59,1|tnta3z,48,59,1|tnta40,45,63,0|tunnjz,45,63,0|tunnk0,48,59,1|u6wbfz,48,59,1|u6wbg0,45,63,0|uddq7z,45,63,0|uddq80,48,59,1|upme3z,48,59,1|upme40,45,63,0|uw3svz,45,63,0|uw3sw0,48,59,1|v8cgrz,48,59,1|v8cgs0,45,63,0|vetvjz,45,63,0|vetvk0,48,59,1|vr2jfz,48,59,1|vr2jg0,45,63,0|vxjy7z,45,63,0|vxjy80,48,59,1|w9sm3z,48,59,1|w9sm40,45,63,0|wgmzjz,45,63,0|wgmzk0,48,59,1|wsvnfz,48,59,1|wsvng0,45,63,0|wzd27z,45,63,0|wzd280,48,59,1|xblq3z,48,59,1|xblq40,45,63,0|xi34vz,45,63,0|xi34w0,48,59,1|xubsrz,48,59,1|xubss0,45,63,0|y0t7jz,45,63,0|y0t7k0,48,59,1|yd1vfz,48,59,1|yd1vg0,45,63,0|yjja7z,45,63,0|yjja80,48,59,1|yvry3z,48,59,1|yvry40,45,63,0|z29cvz,45,63,0|z29cw0,48,59,1|zei0rz,48,59,1|zei0s0,45,63,0|zlce7z,45,63,0|zlce80,48,59,1|zxl23z,48,59,1|zxl240,45,63,0|1042gvz,45,63,0|1042gw0,48,59,1|10gb4rz,48,59,1|10gb4s0,45,63,0|10msjjz,45,63,0|10msjk0,48,59,1|10z17fz,48,59,1|10z17g0,45,63,0|115im7z,45,63,0|115im80,48,59,1|11hra3z,48,59,1|11hra40,45,63,0|11o8ovz,45,63,0|11o8ow0,48,59,1|120hcrz,48,59,1|120hcs0,45,63,0|126yrjz,45,63,0|126yrk0,48,59,1|12j7ffz,48,59,1|12j7fg0,45,63,0|12q1svz,45,63,0|12q1sw0,48,59,1|132agrz,48,59,1|132ags0,45,63,0|138rvjz,45,63,0|138rvk0,48,59,1|13l0jfz,48,59,1|13l0jg0,45,63,0|13rhy7z,45,63,0|13rhy80,48,59,1|143qm3z,48,59,1|143qm40,45,63,0|14a80vz,45,63,0|14a80w0,48,59,1|14mgorz,48,59,1|14mgos0,45,63,0|14sy3jz,45,63,0|14sy3k0,48,59,1|1556rfz,48,59,1|1556rg0,45,63,0|15c14vz,45,63,0|15c14w0,48,59,1|15o9srz,48,59,1|15o9ss0,45,63,0|15ur7jz,45,63,0|15ur7k0,48,59,1|166zvfz,48,59,1|166zvg0,45,63,0|16dha7z,45,63,0|16dha80,48,59,1|16ppy3z,48,59,1|16ppy40,45,63,0|16w7cvz,45,63,0|16w7cw0,48,59,1|178g0rz,48,59,1|178g0s0,45,63,0|17exfjz,45,63,0|17exfk0,48,59,1|17r63fz,48,59,1|17r63g0,45,63,0|17xni7z,45,63,0|17xni80,48,59,1|189w63z,48,59,1|189w640,45,63,0|18gqjjz,45,63,0|18gqjk0,48,59,1|18sz7fz,48,59,1|18sz7g0,45,63,0|18zgm7z,45,63,0|18zgm80,48,59,1|19bpa3z,48,59,1|19bpa40,45,63,0|19i6ovz,45,63,0|19i6ow0,48,59,1|19ufcrz,48,59,1|19ufcs0,45,63,0|1a0wrjz,45,63,0|1a0wrk0,48,59,1|1ad5ffz,48,59,1|1ad5fg0,45,63,0|1ajmu7z,45,63,0|1ajmu80,48,59,1|1avvi3z,48,59,1|1avvi40,45,63,0|1b2pvjz,45,63,0|1b2pvk0,48,59,1|1beyjfz,48,59,1|1beyjg0,45,63,0|1blfy7z,45,63,0|1blfy80,48,59,1|1bxom3z,48,59,1|1bxom40,45,63,0|1c460vz,45,63,0|1c460w0,48,59,1|1cgeorz,48,59,1|1cgeos0,45,63,0|1cmw3jz,45,63,0|1cmw3k0,48,59,1|1cz4rfz,48,59,1|1cz4rg0,45,63,0|1d5m67z,45,63,0|1d5m680,48,59,1|1dhuu3z,48,59,1|1dhuu40,45,63,0|1doc8vz,45,63,0|1doc8w0,48,59,1|1e0kwrz,48,59,1|1e0kws0,45,63,0|1e7fa7z,45,63,0|1e7fa80,48,59,1|1ejny3z,48,59,1|1ejny40,45,63,0|1eq5cvz,45,63,0|1eq5cw0,48,59,1|1f2e0rz,48,59,1|1f2e0s0,45,63,0|1f8vfjz,45,63,0|1f8vfk0,48,59,1|1fl43fz,48,59,1|1fl43g0,45,63,0|1frli7z,45,63,0|1frli80,48,59,1|1g3u63z,48,59,1|1g3u640,45,63,0|1gabkvz,45,63,0|1gabkw0,48,59,1|1gmk8rz,48,59,1|1gmk8s0,45,63,0|1gt1njz,45,63,0|1gt1nk0,48,59,1|1h5abfz,48,59,1|1h5abg0,45,63,0|1hc4ovz,45,63,0|1hc4ow0,48,59,1|1hodcrz,48,59,1|1hodcs0,45,63,0|1huurjz,45,63,0|1huurk0,48,59,1|1i73ffz,48,59,1|1i73fg0,45,63,0|1idku7z,45,63,0|1idku80,48,59,1|1ipti3z,48,59,1|1ipti40,45,63,0|1iwawvz,45,63,0|1iwaww0,48,59,1|1j8jkrz,48,59,1|1j8jks0,45,63,0|1jf0zjz,45,63,0|1jf0zk0,48,59,1|1jr9nfz,48,59,1|1jr9ng0,45,63,0|1jy40vz,45,63,0|1jy40w0,48,59,1|1kacorz,48,59,1|1kacos0,45,63,0|1kgu3jz,45,63,0|1kgu3k0,48,59,1|1kt2rfz,48,59,1|1kt2rg0,45,63,0|1kzk67z,45,63,0|1kzk680,48,59,1|1lbsu3z,48,59,1|1lbsu40,45,63,0|1lia8vz,45,63,0|1lia8w0,48,59,1|1luiwrz,48,59,1|1luiws0,45,63,0|1m10bjz,45,63,0|1m10bk0,48,59,1|1md8zfz,48,59,1|1md8zg0,45,63,0|1mjqe7z,45,63,0|1mjqe80,48,59,1|1mvz23z,48,59,1|1mvz240,45,63,0|1n2tfjz,45,63,0|1n2tfk0,48,59,1|1nf23fz,48,59,1|1nf23g0,45,63,0|1nlji7z,45,63,0|1nlji80,48,59,1|1nxs63z,48,59,1|1nxs640,45,63,0|1o49kvz,45,63,0|1o49kw0,48,59,1|1ogi8rz,48,59,1|1ogi8s0,45,63,0|1omznjz,45,63,0|1omznk0,48,59,1|1oz8bfz,48,59,1|1oz8bg0,45,63,0|1p5pq7z,45,63,0|1p5pq80,48,59,1|1phye3z,48,59,1|1phye40,45,63,0|1posrjz,45,63,0|1posrk0,48,59,1|1q11ffz,48,59,1|1q11fg0,45,63,0|1q7iu7z,45,63,0|1q7iu80,48,59,1|1qjri3z,48,59,1|1qjri40,45,63,0|1qq8wvz,45,63,0|1qq8ww0,48,59,1|1r2hkrz,48,59,1|1r2hks0,45,63,0|1r8yzjz,45,63,0|1r8yzk0,48,59,1|1rl7nfz,48,59,1|1rl7ng0,45,63,0|1rrp27z,45,63,0|1rrp280,48,59,1|1s3xq3z,48,59,1|1s3xq40,45,63,0|1saf4vz,45,63,0|1saf4w0,48,59,1|1smnsrz,48,59,1|1smnss0,45,63,0|1sti67z,45,63,0|1sti680,48,59,1|1t5qu3z,48,59,1|1t5qu40,45,63,0|1tc88vz,45,63,0|1tc88w0,48,59,1|1togwrz,48,59,1|1togws0,45,63,0|1tuybjz,45,63,0|1tuybk0,48,59,1|1u76zfz,48,59,1|1u76zg0,45,63,0|1udoe7z,45,63,0|1udoe80,48,59,1|1upx23z,48,59,1|1upx240,45,63,0|1uwegvz,45,63,0|1uwegw0,48,59,1|1v8n4rz,48,59,1|1v8n4s0,45,63,0|1vf4jjz,45,63,0|1vf4jk0,48,59,1|1vrd7fz,48,59,1|1vrd7g0,45,63,0|NaN,45,63,0\",\"America/Rio_Branco|,0,165,0|-t85fg1,0,165,0|-t85fg0,55,59,0|-jyl4w1,55,59,0|-jyl4w0,41,40,1|-jpavk1,41,40,1|-jpavk0,55,59,0|-jfs7g1,55,59,0|-jfs7g0,41,40,1|-j6iy81,41,40,1|-j6iy80,55,59,0|-ahcss1,55,59,0|-ahcss0,41,40,1|-aacy41,41,40,1|-aacy40,55,59,0|-9ykvg1,55,59,0|-9ykvg0,41,40,1|-9scvk1,41,40,1|-9scvk0,55,59,0|-9fsy41,55,59,0|-9fsy40,41,40,1|-99j3k1,41,40,1|-99j3k0,55,59,0|-8wz641,55,59,0|-8wz640,41,40,1|-8sckw1,41,40,1|-8sckw0,55,59,0|-35xgs1,55,59,0|-35xgs0,41,40,1|-31nu81,41,40,1|-31nu80,55,59,0|-2kdjg1,55,59,0|-2kdjg0,41,40,1|-2hccw1,41,40,1|-2hccw0,55,59,0|-24qks1,55,59,0|-24qks0,41,40,1|-203zk1,41,40,1|-203zk0,55,59,0|-1ni7g1,55,59,0|-1ni7g0,41,40,1|-1hc281,41,40,1|-1hc280,55,59,0|-14qa41,55,59,0|-14qa40,41,40,1|-yia81,41,40,1|-yia80,55,59,0|89jhvz,55,59,0|89jhw0,41,40,1|8gdprz,41,40,1|8gdps0,55,59,0|8rwlvz,55,59,0|8rwlw0,41,40,1|8xnxrz,41,40,1|8xnxs0,55,59,0|9aoj7z,55,59,0|9aoj80,41,40,1|9g2wfz,41,40,1|9g2wg0,55,59,0|k2yb7z,55,59,0|k2yb80,41,40,0|mw14fz,41,40,0|mw14g0,55,59,0|NaN,55,59,0\",\"America/Santarem|,0,166,0|-t85hvd,0,166,0|-t85hvc,41,40,0|-jyl7o1,41,40,0|-jyl7o0,38,41,1|-jpayc1,38,41,1|-jpayc0,41,40,0|-jfsa81,41,40,0|-jfsa80,38,41,1|-j6j101,38,41,1|-j6j100,41,40,0|-ahcvk1,41,40,0|-ahcvk0,38,41,1|-aad0w1,38,41,1|-aad0w0,41,40,0|-9yky81,41,40,0|-9yky80,38,41,1|-9scyc1,38,41,1|-9scyc0,41,40,0|-9ft0w1,41,40,0|-9ft0w0,38,41,1|-99j6c1,38,41,1|-99j6c0,41,40,0|-8wz8w1,41,40,0|-8wz8w0,38,41,1|-8scno1,38,41,1|-8scno0,41,40,0|-35xjk1,41,40,0|-35xjk0,38,41,1|-31nx01,38,41,1|-31nx00,41,40,0|-2kdm81,41,40,0|-2kdm80,38,41,1|-2hcfo1,38,41,1|-2hcfo0,41,40,0|-24qnk1,41,40,0|-24qnk0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1nia81,41,40,0|-1nia80,38,41,1|-1hc501,38,41,1|-1hc500,41,40,0|-14qcw1,41,40,0|-14qcw0,38,41,1|-yid01,38,41,1|-yid00,41,40,0|89jf3z,41,40,0|89jf40,38,41,1|8gdmzz,38,41,1|8gdn00,41,40,0|8rwj3z,41,40,0|8rwj40,38,41,1|8xnuzz,38,41,1|8xnv00,41,40,0|9aogfz,41,40,0|9aogg0,38,41,1|9g2tnz,38,41,1|9g2to0,41,40,0|k2y8fz,41,40,0|k2y8g0,38,41,0|NaN,38,41,0\",\"America/Santiago|,0,161,0|-15r0w8r,0,161,0|-15r0w8q,84,161,0|-vauawr,84,161,0|-vauawq,55,59,0|-rx8i41,55,59,0|-rx8i40,84,161,0|-qs16wr,84,161,0|-qs16wq,41,40,0|-qcwsw1,41,40,0|-qcwsw0,84,161,0|-m3etkr,84,161,0|-m3etkq,41,40,1|-lsgfk1,41,40,1|-lsgfk0,55,59,0|-lkl0s1,55,59,0|-lkl0s0,41,40,1|-l9oi81,41,40,1|-l9oi80,55,59,0|-l1t3g1,55,59,0|-l1t3g0,41,40,1|-kqwkw1,41,40,1|-kqwkw0,55,59,0|-kj1641,55,59,0|-kj1640,41,40,1|-k84nk1,41,40,1|-k84nk0,55,59,0|-k098s1,55,59,0|-k098s0,41,40,1|-jpavk1,41,40,1|-jpavk0,55,59,0|-jhfgs1,55,59,0|-jhfgs0,41,40,0|-eeay81,41,40,0|-eeay80,55,59,0|-eb5ws1,55,59,0|-eb5ws0,41,40,0|-c8vww1,41,40,0|-c8vww0,38,41,1|-c6f3o1,38,41,1|-c6f3o0,41,40,0|-bvifk1,41,40,0|-bvifk0,55,59,0|-bsvzk1,55,59,0|-bsvzk0,41,40,0|-lsvk1,41,40,0|-lsvk0,38,41,1|-e8qc1,38,41,1|-e8qc0,41,40,0|-1zww1,41,40,0|-1zww0,38,41,1|4hcbz,38,41,1|4hcc0,41,40,0|ekdrz,41,40,0|ekds0,38,41,1|mhhnz,38,41,1|mhho0,41,40,0|xagfz,41,40,0|xagg0,38,41,1|157kbz,38,41,1|157kc0,41,40,0|1gdhrz,41,40,0|1gdhs0,38,41,1|1nxmzz,38,41,1|1nxn00,41,40,0|1ydn3z,41,40,0|1ydn40,38,41,1|26npnz,38,41,1|26npo0,41,40,0|2htn3z,41,40,0|2htn40,38,41,1|2pdsbz,38,41,1|2pdsc0,41,40,0|30jprz,41,40,0|30jps0,38,41,1|38gtnz,38,41,1|38gto0,41,40,0|3j9sfz,41,40,0|3j9sg0,38,41,1|3r6wbz,38,41,1|3r6wc0,41,40,0|41zv3z,41,40,0|41zv40,38,41,1|49wyzz,38,41,1|49wz00,41,40,0|4l2wfz,41,40,0|4l2wg0,38,41,1|4sn1nz,38,41,1|4sn1o0,41,40,0|53sz3z,41,40,0|53sz40,38,41,1|5bd4bz,38,41,1|5bd4c0,41,40,0|5mj1rz,41,40,0|5mj1s0,38,41,1|5ug5nz,38,41,1|5ug5o0,41,40,0|6594fz,41,40,0|6594g0,38,41,1|6d68bz,38,41,1|6d68c0,41,40,0|6nz73z,41,40,0|6nz740,38,41,1|6vwazz,38,41,1|6vwb00,41,40,0|76p9rz,41,40,0|76p9s0,38,41,1|7emdnz,38,41,1|7emdo0,41,40,0|7psb3z,41,40,0|7psb40,38,41,1|7xcgbz,38,41,1|7xcgc0,41,40,0|88idrz,41,40,0|88ids0,38,41,1|8g2izz,38,41,1|8g2j00,41,40,0|8r8gfz,41,40,0|8r8gg0,38,41,1|90lezz,38,41,1|90lf00,41,40,0|99yj3z,41,40,0|99yj40,38,41,1|9hvmzz,38,41,1|9hvn00,41,40,0|9solrz,41,40,0|9sols0,38,41,1|a0lpnz,38,41,1|a0lpo0,41,40,0|abrn3z,41,40,0|abrn40,38,41,1|ajbsbz,38,41,1|ajbsc0,41,40,0|at1v3z,41,40,0|at1v40,38,41,1|b21uzz,38,41,1|b21v00,41,40,0|bd7sfz,41,40,0|bd7sg0,38,41,1|bl4wbz,38,41,1|bl4wc0,41,40,0|bvxv3z,41,40,0|bvxv40,38,41,1|c3uyzz,38,41,1|c3uz00,41,40,0|cenxrz,41,40,0|cenxs0,38,41,1|cml1nz,38,41,1|cml1o0,41,40,0|cxe0fz,41,40,0|cxe0g0,38,41,1|d5b4bz,38,41,1|d5b4c0,41,40,0|dgh1rz,41,40,0|dgh1s0,38,41,1|do16zz,38,41,1|do1700,41,40,0|dz74fz,41,40,0|dz74g0,38,41,1|e7u5nz,38,41,1|e7u5o0,41,40,0|ehx73z,41,40,0|ehx740,38,41,1|epuazz,38,41,1|epub00,41,40,0|ezxcfz,41,40,0|ezxcg0,38,41,1|f9n9nz,38,41,1|f9n9o0,41,40,0|fjdcfz,41,40,0|fjdcg0,38,41,1|fragbz,38,41,1|fragc0,41,40,0|g2gdrz,41,40,0|g2gds0,38,41,1|ga0izz,38,41,1|ga0j00,41,40,0|gl6gfz,41,40,0|gl6gg0,38,41,1|gsqlnz,38,41,1|gsqlo0,41,40,0|h3wj3z,41,40,0|h3wj40,38,41,1|hbgobz,38,41,1|hbgoc0,41,40,0|hmmlrz,41,40,0|hmmls0,38,41,1|hujpnz,38,41,1|hujpo0,41,40,0|i5cofz,41,40,0|i5cog0,38,41,1|id9sbz,38,41,1|id9sc0,41,40,0|io2r3z,41,40,0|io2r40,38,41,1|ivzuzz,38,41,1|ivzv00,41,40,0|j75sfz,41,40,0|j75sg0,38,41,1|jepxnz,38,41,1|jepxo0,41,40,0|jpvv3z,41,40,0|jpvv40,38,41,1|jyiwbz,38,41,1|jyiwc0,41,40,0|k8lxrz,41,40,0|k8lxs0,38,41,1|kgj1nz,38,41,1|kgj1o0,41,40,0|krc0fz,41,40,0|krc0g0,38,41,1|l0c0bz,38,41,1|l0c0c0,41,40,0|la233z,41,40,0|la2340,38,41,1|lkuwbz,38,41,1|lkuwc0,41,40,0|lq9f3z,41,40,0|lq9f40,38,41,1|m380bz,38,41,1|m380c0,41,40,0|m9pf3z,41,40,0|m9pf40,38,41,1|mly2zz,38,41,1|mly300,41,40,0|mssgfz,41,40,0|mssgg0,38,41,1|n4o5nz,38,41,1|n4o5o0,41,40,0|nbij3z,41,40,0|nbij40,38,41,1|o776zz,38,41,1|o77700,41,40,0|obvsfz,41,40,0|obvsg0,38,41,1|opx9nz,38,41,1|opx9o0,41,40,0|oulv3z,41,40,0|oulv40,38,41,1|p8ncbz,38,41,1|p8ncc0,41,40,0|pdbxrz,41,40,0|pdbxs0,38,41,1|ppklnz,38,41,1|ppklo0,41,40,0|pxhv3z,41,40,0|pxhv40,38,41,1|q8aobz,38,41,1|q8aoc0,41,40,0|qg7xrz,41,40,0|qg7xs0,38,41,1|qr0qzz,38,41,1|qr0r00,41,40,0|qyy0fz,41,40,0|qyy0g0,38,41,1|r9qtnz,38,41,1|r9qto0,41,40,0|rho33z,41,40,0|rho340,38,41,1|rsgwbz,38,41,1|rsgwc0,41,40,0|s0e5rz,41,40,0|s0e5s0,38,41,1|sbjxnz,38,41,1|sbjxo0,41,40,0|sjh73z,41,40,0|sjh740,38,41,1|sua0bz,38,41,1|sua0c0,41,40,0|t279rz,41,40,0|t279s0,38,41,1|td02zz,38,41,1|td0300,41,40,0|tkxcfz,41,40,0|tkxcg0,38,41,1|tvq5nz,38,41,1|tvq5o0,41,40,0|u3nf3z,41,40,0|u3nf40,38,41,1|ueg8bz,38,41,1|ueg8c0,41,40,0|umdhrz,41,40,0|umdhs0,38,41,1|uxj9nz,38,41,1|uxj9o0,41,40,0|v53kfz,41,40,0|v53kg0,38,41,1|vg9cbz,38,41,1|vg9cc0,41,40,0|vo6lrz,41,40,0|vo6ls0,38,41,1|vyzezz,38,41,1|vyzf00,41,40,0|w6wofz,41,40,0|w6wog0,38,41,1|whphnz,38,41,1|whpho0,41,40,0|wpmr3z,41,40,0|wpmr40,38,41,1|x0fkbz,38,41,1|x0fkc0,41,40,0|x8ctrz,41,40,0|x8cts0,38,41,1|xj5mzz,38,41,1|xj5n00,41,40,0|xr2wfz,41,40,0|xr2wg0,38,41,1|y28obz,38,41,1|y28oc0,41,40,0|y9sz3z,41,40,0|y9sz40,38,41,1|ykyqzz,38,41,1|ykyr00,41,40,0|ysw0fz,41,40,0|ysw0g0,38,41,1|z3otnz,38,41,1|z3oto0,41,40,0|zbm33z,41,40,0|zbm340,38,41,1|zmewbz,38,41,1|zmewc0,41,40,0|zuc5rz,41,40,0|zuc5s0,38,41,1|1054yzz,38,41,1|1054z00,41,40,0|10d28fz,41,40,0|10d28g0,38,41,1|10o80bz,38,41,1|10o80c0,41,40,0|10vsb3z,41,40,0|10vsb40,38,41,1|116y2zz,38,41,1|116y300,41,40,0|11evcfz,41,40,0|11evcg0,38,41,1|11po5nz,38,41,1|11po5o0,41,40,0|11xlf3z,41,40,0|11xlf40,38,41,1|128e8bz,38,41,1|128e8c0,41,40,0|12gbhrz,41,40,0|12gbhs0,38,41,1|12r4azz,38,41,1|12r4b00,41,40,0|12z1kfz,41,40,0|12z1kg0,38,41,1|139udnz,38,41,1|139udo0,41,40,0|13hrn3z,41,40,0|13hrn40,38,41,1|13sxezz,38,41,1|13sxf00,41,40,0|140hprz,41,40,0|140hps0,38,41,1|14bnhnz,38,41,1|14bnho0,41,40,0|14jkr3z,41,40,0|14jkr40,38,41,1|14udkbz,38,41,1|14udkc0,41,40,0|152atrz,41,40,0|152ats0,38,41,1|15d3mzz,38,41,1|15d3n00,41,40,0|15l0wfz,41,40,0|15l0wg0,38,41,1|15vtpnz,38,41,1|15vtpo0,41,40,0|163qz3z,41,40,0|163qz40,38,41,1|16ejsbz,38,41,1|16ejsc0,41,40,0|16mh1rz,41,40,0|16mh1s0,38,41,1|16xmtnz,38,41,1|16xmto0,41,40,0|175k33z,41,40,0|175k340,38,41,1|17gcwbz,38,41,1|17gcwc0,41,40,0|17oa5rz,41,40,0|17oa5s0,38,41,1|17z2yzz,38,41,1|17z2z00,41,40,0|18708fz,41,40,0|18708g0,38,41,1|18ht1nz,38,41,1|18ht1o0,41,40,0|18pqb3z,41,40,0|18pqb40,38,41,1|190j4bz,38,41,1|190j4c0,41,40,0|198gdrz,41,40,0|198gds0,38,41,1|19jm5nz,38,41,1|19jm5o0,41,40,0|19r6gfz,41,40,0|19r6gg0,38,41,1|1a2c8bz,38,41,1|1a2c8c0,41,40,0|1aa9hrz,41,40,0|1aa9hs0,38,41,1|1al2azz,38,41,1|1al2b00,41,40,0|1aszkfz,41,40,0|1aszkg0,38,41,1|1b3sdnz,38,41,1|1b3sdo0,41,40,0|1bbpn3z,41,40,0|1bbpn40,38,41,1|1bmigbz,38,41,1|1bmigc0,41,40,0|1bufprz,41,40,0|1bufps0,38,41,1|1c58izz,38,41,1|1c58j00,41,40,0|1cd5sfz,41,40,0|1cd5sg0,38,41,1|1cobkbz,38,41,1|1cobkc0,41,40,0|1cvvv3z,41,40,0|1cvvv40,38,41,1|1d71mzz,38,41,1|1d71n00,41,40,0|1deywfz,41,40,0|1deywg0,38,41,1|1dprpnz,38,41,1|1dprpo0,41,40,0|1dxoz3z,41,40,0|1dxoz40,38,41,1|1e8hsbz,38,41,1|1e8hsc0,41,40,0|1egf1rz,41,40,0|1egf1s0,38,41,1|1er7uzz,38,41,1|1er7v00,41,40,0|1ez54fz,41,40,0|1ez54g0,38,41,1|1faawbz,38,41,1|1faawc0,41,40,0|1fhv73z,41,40,0|1fhv740,38,41,1|1ft0yzz,38,41,1|1ft0z00,41,40,0|1g0y8fz,41,40,0|1g0y8g0,38,41,1|1gbr1nz,38,41,1|1gbr1o0,41,40,0|1gjob3z,41,40,0|1gjob40,38,41,1|1guh4bz,38,41,1|1guh4c0,41,40,0|1h2edrz,41,40,0|1h2eds0,38,41,1|1hd76zz,38,41,1|1hd7700,41,40,0|1hl4gfz,41,40,0|1hl4gg0,38,41,1|1hvx9nz,38,41,1|1hvx9o0,41,40,0|1i3uj3z,41,40,0|1i3uj40,38,41,1|1if0azz,38,41,1|1if0b00,41,40,0|1imklrz,41,40,0|1imkls0,38,41,1|1ixqdnz,38,41,1|1ixqdo0,41,40,0|1j5nn3z,41,40,0|1j5nn40,38,41,1|1jgggbz,38,41,1|1jgggc0,41,40,0|1jodprz,41,40,0|1jodps0,38,41,1|1jz6izz,38,41,1|1jz6j00,41,40,0|1k73sfz,41,40,0|1k73sg0,38,41,1|1khwlnz,38,41,1|1khwlo0,41,40,0|1kptv3z,41,40,0|1kptv40,38,41,1|1l0mobz,38,41,1|1l0moc0,41,40,0|1l8jxrz,41,40,0|1l8jxs0,38,41,1|1ljppnz,38,41,1|1ljppo0,41,40,0|1lrmz3z,41,40,0|1lrmz40,38,41,1|1m2fsbz,38,41,1|1m2fsc0,41,40,0|1mad1rz,41,40,0|1mad1s0,38,41,1|1ml5uzz,38,41,1|1ml5v00,41,40,0|1mt34fz,41,40,0|1mt34g0,38,41,1|1n3vxnz,38,41,1|1n3vxo0,41,40,0|1nbt73z,41,40,0|1nbt740,38,41,1|1nmm0bz,38,41,1|1nmm0c0,41,40,0|1nuj9rz,41,40,0|1nuj9s0,38,41,1|1o5p1nz,38,41,1|1o5p1o0,41,40,0|1od9cfz,41,40,0|1od9cg0,38,41,1|1oof4bz,38,41,1|1oof4c0,41,40,0|1owcdrz,41,40,0|1owcds0,38,41,1|1p756zz,38,41,1|1p75700,41,40,0|1pf2gfz,41,40,0|1pf2gg0,38,41,1|1ppv9nz,38,41,1|1ppv9o0,41,40,0|1pxsj3z,41,40,0|1pxsj40,38,41,1|1q8lcbz,38,41,1|1q8lcc0,41,40,0|1qgilrz,41,40,0|1qgils0,38,41,1|1qrbezz,38,41,1|1qrbf00,41,40,0|1qz8ofz,41,40,0|1qz8og0,38,41,1|1raegbz,38,41,1|1raegc0,41,40,0|1rhyr3z,41,40,0|1rhyr40,38,41,1|1rt4izz,38,41,1|1rt4j00,41,40,0|1s11sfz,41,40,0|1s11sg0,38,41,1|1sbulnz,38,41,1|1sbulo0,41,40,0|1sjrv3z,41,40,0|1sjrv40,38,41,1|1sukobz,38,41,1|1sukoc0,41,40,0|1t2hxrz,41,40,0|1t2hxs0,38,41,1|1tdaqzz,38,41,1|1tdar00,41,40,0|1tl80fz,41,40,0|1tl80g0,38,41,1|1twdsbz,38,41,1|1twdsc0,41,40,0|1u3y33z,41,40,0|1u3y340,38,41,1|1uf3uzz,38,41,1|1uf3v00,41,40,0|1un14fz,41,40,0|1un14g0,38,41,1|1uxtxnz,38,41,1|1uxtxo0,41,40,0|1v5r73z,41,40,0|1v5r740,38,41,1|1vgk0bz,38,41,1|1vgk0c0,41,40,0|1voh9rz,41,40,0|1voh9s0,38,41,1|NaN,38,41,1\",\"America/Santo_Domingo|,0,167,0|-15r0we1,0,167,0|-15r0we0,86,168,0|-j6hz1d,86,168,0|-j6hz1c,43,59,0|-1nlws1,43,59,0|-1nlws0,61,40,1|-1hdww1,61,40,1|-1hdww0,43,59,0|-3fos1,43,59,0|-3fos0,62,76,1|2mshz,62,76,1|2msi0,43,59,0|fadvz,43,59,0|fadw0,62,76,1|jrghz,62,76,1|jrgi0,43,59,0|ydf7z,43,59,0|ydf80,62,76,1|12l8hz,62,76,1|12l8i0,43,59,0|1h3hvz,43,59,0|1h3hw0,62,76,1|1lf0hz,62,76,1|1lf0i0,43,59,0|1ztkjz,43,59,0|1ztkk0,62,76,1|246xtz,62,76,1|246xu0,43,59,0|2ijn7z,43,59,0|2ijn80,31,40,0|g36gnz,31,40,0|g36go0,43,59,0|g4z9zz,43,59,0|g4za00,31,40,0|NaN,31,40,0\",\"America/Sao_Paulo|,0,169,0|-t85jd9,0,169,0|-t85jd8,38,41,0|-jylag1,38,41,0|-jylag0,39,43,1|-jpb141,39,43,1|-jpb140,38,41,0|-jfsd01,38,41,0|-jfsd00,39,43,1|-j6j3s1,39,43,1|-j6j3s0,38,41,0|-ahcyc1,38,41,0|-ahcyc0,39,43,1|-aad3o1,39,43,1|-aad3o0,38,41,0|-9yl101,38,41,0|-9yl100,39,43,1|-9sd141,39,43,1|-9sd140,38,41,0|-9ft3o1,38,41,0|-9ft3o0,39,43,1|-99j941,39,43,1|-99j940,38,41,0|-8wzbo1,38,41,0|-8wzbo0,39,43,1|-8scqg1,39,43,1|-8scqg0,38,41,0|-38cno1,38,41,0|-38cno0,39,43,1|-31nzs1,39,43,1|-31nzs0,38,41,0|-2kdp01,38,41,0|-2kdp00,39,43,1|-2hcig1,39,43,1|-2hcig0,38,41,0|-24qqc1,38,41,0|-24qqc0,39,43,1|-204541,39,43,1|-204540,38,41,0|-1nid01,38,41,0|-1nid00,39,43,1|-1hc7s1,39,43,1|-1hc7s0,38,41,0|-14qfo1,38,41,0|-14qfo0,39,43,1|-yifs1,39,43,1|-yifs0,38,41,0|89jcbz,38,41,0|89jcc0,39,43,1|8gdk7z,39,43,1|8gdk80,38,41,0|8rwgbz,38,41,0|8rwgc0,39,43,1|8xns7z,39,43,1|8xns80,38,41,0|9aodnz,38,41,0|9aodo0,39,43,1|9g2qvz,39,43,1|9g2qw0,38,41,0|9t1hnz,38,41,0|9t1ho0,39,43,1|9yfuvz,39,43,1|9yfuw0,38,41,0|abrkbz,38,41,0|abrkc0,39,43,1|ahvuvz,39,43,1|ahvuw0,38,41,0|auulnz,38,41,0|auulo0,39,43,1|b0yw7z,39,43,1|b0yw80,38,41,0|bdkobz,38,41,0|bdkoc0,39,43,1|bjc07z,39,43,1|bjc080,38,41,0|bwnpnz,38,41,0|bwnpo0,39,43,1|c1p47z,39,43,1|c1p480,38,41,0|cf0tnz,38,41,0|cf0to0,39,43,1|cli2vz,39,43,1|cli2w0,38,41,0|cxqwbz,38,41,0|cxqwc0,39,43,1|d485jz,39,43,1|d485k0,38,41,0|dggyzz,38,41,0|dggz00,39,43,1|dml9jz,39,43,1|dml9k0,38,41,0|dyu2zz,38,41,0|dyu300,39,43,1|e5oavz,39,43,1|e5oaw0,38,41,0|ehm0bz,38,41,0|ehm0c0,39,43,1|ep4avz,39,43,1|ep4aw0,38,41,0|f0n6zz,38,41,0|f0n700,39,43,1|f7hevz,39,43,1|f7hew0,38,41,0|fj0azz,38,41,0|fj0b00,39,43,1|fqkg7z,39,43,1|fqkg80,38,41,0|g23cbz,38,41,0|g23cc0,39,43,1|g8xk7z,39,43,1|g8xk80,38,41,0|gl6dnz,38,41,0|gl6do0,39,43,1|grnmvz,39,43,1|grnmw0,38,41,0|h4zcbz,38,41,0|h4zcc0,39,43,1|hadpjz,39,43,1|hadpk0,38,41,0|hmzhnz,38,41,0|hmzho0,39,43,1|ht3s7z,39,43,1|ht3s80,38,41,0|i6j6zz,38,41,0|i6j700,39,43,1|ic6tjz,39,43,1|ic6tk0,38,41,0|iofmzz,38,41,0|iofn00,39,43,1|iuww7z,39,43,1|iuww80,38,41,0|j88lnz,38,41,0|j88lo0,39,43,1|jdzxjz,39,43,1|jdzxk0,38,41,0|jpvsbz,38,41,0|jpvsc0,39,43,1|jwd1jz,39,43,1|jwd1k0,38,41,0|k8ytnz,38,41,0|k8yto0,39,43,1|kf347z,39,43,1|kf3480,38,41,0|krowbz,38,41,0|krowc0,39,43,1|ky65jz,39,43,1|ky65k0,38,41,0|laeyzz,38,41,0|laez00,39,43,1|lgw87z,39,43,1|lgw880,38,41,0|lt51nz,38,41,0|lt51o0,39,43,1|lzz9jz,39,43,1|lzz9k0,38,41,0|mc82zz,38,41,0|mc8300,39,43,1|micdjz,39,43,1|micdk0,38,41,0|muy5nz,38,41,0|muy5o0,39,43,1|n12g7z,39,43,1|n12g80,38,41,0|ndo8bz,38,41,0|ndo8c0,39,43,1|nk5hjz,39,43,1|nk5hk0,38,41,0|nweazz,38,41,0|nweb00,39,43,1|o2vk7z,39,43,1|o2vk80,38,41,0|of4dnz,38,41,0|of4do0,39,43,1|ollmvz,39,43,1|ollmw0,38,41,0|oxugbz,38,41,0|oxugc0,39,43,1|p4bpjz,39,43,1|p4bpk0,38,41,0|phnezz,38,41,0|phnf00,39,43,1|pn1s7z,39,43,1|pn1s80,38,41,0|NaN,38,41,0\",\"America/Scoresbysund|,0,170,0|-rvurxl,0,170,0|-rvurxk,39,43,0|5ct1rz,39,43,0|5ct1s0,12,13,1|5lt4fz,12,13,1|5lt4g0,39,43,0|5v607z,39,43,0|5v6080,16,1,1|64iyrz,16,1,1|64iys0,12,13,0|6dw03z,12,13,0|6dw040,16,1,1|6n91fz,16,1,1|6n91g0,12,13,0|6wm2rz,12,13,0|6wm2s0,16,1,1|75z43z,16,1,1|75z440,12,13,0|7fc5fz,12,13,0|7fc5g0,16,1,1|7p25fz,16,1,1|7p25g0,12,13,0|7yf6rz,12,13,0|7yf6s0,16,1,1|87s83z,16,1,1|87s840,12,13,0|8h59fz,12,13,0|8h59g0,16,1,1|8qiarz,16,1,1|8qias0,12,13,0|8zvc3z,12,13,0|8zvc40,16,1,1|998dfz,16,1,1|998dg0,12,13,0|9ilerz,12,13,0|9iles0,16,1,1|9ryg3z,16,1,1|9ryg40,12,13,0|a1bhfz,12,13,0|a1bhg0,16,1,1|aaoirz,16,1,1|aaois0,12,13,0|ak1k3z,12,13,0|ak1k40,16,1,1|atrk3z,16,1,1|atrk40,12,13,0|b34lfz,12,13,0|b34lg0,16,1,1|bchmrz,16,1,1|bchms0,12,13,0|bluo3z,12,13,0|bluo40,16,1,1|bv7pfz,16,1,1|bv7pg0,12,13,0|c4kqrz,12,13,0|c4kqs0,16,1,1|cdxs3z,16,1,1|cdxs40,12,13,0|cnatfz,12,13,0|cnatg0,16,1,1|cwnurz,16,1,1|cwnus0,12,13,0|d60w3z,12,13,0|d60w40,16,1,1|dfdxfz,16,1,1|dfdxg0,12,13,0|dp3xfz,12,13,0|dp3xg0,16,1,1|dzwtfz,16,1,1|dzwtg0,12,13,0|e7u03z,12,13,0|e7u040,16,1,1|eimw3z,16,1,1|eimw40,12,13,0|eqk2rz,12,13,0|eqk2s0,16,1,1|f1cyrz,16,1,1|f1cys0,12,13,0|f9a5fz,12,13,0|f9a5g0,16,1,1|fkg03z,16,1,1|fkg040,12,13,0|fs083z,12,13,0|fs0840,16,1,1|g362rz,16,1,1|g362s0,12,13,0|gaqarz,12,13,0|gaqas0,16,1,1|glw5fz,16,1,1|glw5g0,12,13,0|gttc3z,12,13,0|gttc40,16,1,1|h4m83z,16,1,1|h4m840,12,13,0|hcjerz,12,13,0|hcjes0,16,1,1|hncarz,16,1,1|hncas0,12,13,0|hv9hfz,12,13,0|hv9hg0,16,1,1|i6fc3z,16,1,1|i6fc40,12,13,0|idzk3z,12,13,0|idzk40,16,1,1|ip5erz,16,1,1|ip5es0,12,13,0|iwpmrz,12,13,0|iwpms0,16,1,1|j7vhfz,16,1,1|j7vhg0,12,13,0|jffpfz,12,13,0|jffpg0,16,1,1|jqlk3z,16,1,1|jqlk40,12,13,0|jyiqrz,12,13,0|jyiqs0,16,1,1|k9bmrz,16,1,1|k9bms0,12,13,0|kh8tfz,12,13,0|kh8tg0,16,1,1|ks1pfz,16,1,1|ks1pg0,12,13,0|kzyw3z,12,13,0|kzyw40,16,1,1|lb4qrz,16,1,1|lb4qs0,12,13,0|lioyrz,12,13,0|lioys0,16,1,1|ltutfz,16,1,1|ltutg0,12,13,0|m1f1fz,12,13,0|m1f1g0,16,1,1|mckw3z,16,1,1|mckw40,12,13,0|mki2rz,12,13,0|mki2s0,16,1,1|mvayrz,16,1,1|mvays0,12,13,0|n385fz,12,13,0|n385g0,16,1,1|ne11fz,16,1,1|ne11g0,12,13,0|nly83z,12,13,0|nly840,16,1,1|nwr43z,16,1,1|nwr440,12,13,0|o4oarz,12,13,0|o4oas0,16,1,1|ofu5fz,16,1,1|ofu5g0,12,13,0|onedfz,12,13,0|onedg0,16,1,1|oyk83z,16,1,1|oyk840,12,13,0|p64g3z,12,13,0|p64g40,16,1,1|phaarz,16,1,1|phaas0,12,13,0|pp7hfz,12,13,0|pp7hg0,16,1,1|q00dfz,16,1,1|q00dg0,12,13,0|q7xk3z,12,13,0|q7xk40,16,1,1|qiqg3z,16,1,1|qiqg40,12,13,0|qqnmrz,12,13,0|qqnms0,16,1,1|r1thfz,16,1,1|r1thg0,12,13,0|r9dpfz,12,13,0|r9dpg0,16,1,1|rkjk3z,16,1,1|rkjk40,12,13,0|rs3s3z,12,13,0|rs3s40,16,1,1|s39mrz,16,1,1|s39ms0,12,13,0|sb6tfz,12,13,0|sb6tg0,16,1,1|slzpfz,16,1,1|slzpg0,12,13,0|stww3z,12,13,0|stww40,16,1,1|t4ps3z,16,1,1|t4ps40,12,13,0|tcmyrz,12,13,0|tcmys0,16,1,1|tnfurz,16,1,1|tnfus0,12,13,0|tvd1fz,12,13,0|tvd1g0,16,1,1|u6iw3z,16,1,1|u6iw40,12,13,0|ue343z,12,13,0|ue3440,16,1,1|up8yrz,16,1,1|up8ys0,12,13,0|uwt6rz,12,13,0|uwt6s0,16,1,1|v7z1fz,16,1,1|v7z1g0,12,13,0|vfw83z,12,13,0|vfw840,16,1,1|vqp43z,16,1,1|vqp440,12,13,0|vymarz,12,13,0|vymas0,16,1,1|w9f6rz,16,1,1|w9f6s0,12,13,0|whcdfz,12,13,0|whcdg0,16,1,1|wsi83z,16,1,1|wsi840,12,13,0|x02g3z,12,13,0|x02g40,16,1,1|xb8arz,16,1,1|xb8as0,12,13,0|xisirz,12,13,0|xisis0,16,1,1|xtydfz,16,1,1|xtydg0,12,13,0|y1ilfz,12,13,0|y1ilg0,16,1,1|ycog3z,16,1,1|ycog40,12,13,0|yklmrz,12,13,0|yklms0,16,1,1|yveirz,16,1,1|yveis0,12,13,0|z3bpfz,12,13,0|z3bpg0,16,1,1|ze4lfz,16,1,1|ze4lg0,12,13,0|zm1s3z,12,13,0|zm1s40,16,1,1|zx7mrz,16,1,1|zx7ms0,12,13,0|104rurz,12,13,0|104rus0,16,1,1|10fxpfz,16,1,1|10fxpg0,12,13,0|10nhxfz,12,13,0|10nhxg0,16,1,1|10yns3z,16,1,1|10yns40,12,13,0|116kyrz,12,13,0|116kys0,16,1,1|11hdurz,16,1,1|11hdus0,12,13,0|11pb1fz,12,13,0|11pb1g0,16,1,1|1203xfz,16,1,1|1203xg0,12,13,0|128143z,12,13,0|1281440,16,1,1|12iu03z,16,1,1|12iu040,12,13,0|12qr6rz,12,13,0|12qr6s0,16,1,1|131x1fz,16,1,1|131x1g0,12,13,0|139h9fz,12,13,0|139h9g0,16,1,1|13kn43z,16,1,1|13kn440,12,13,0|13s7c3z,12,13,0|13s7c40,16,1,1|143d6rz,16,1,1|143d6s0,12,13,0|14badfz,12,13,0|14badg0,16,1,1|14m39fz,16,1,1|14m39g0,12,13,0|14u0g3z,12,13,0|14u0g40,16,1,1|154tc3z,16,1,1|154tc40,12,13,0|15cqirz,12,13,0|15cqis0,16,1,1|15nwdfz,16,1,1|15nwdg0,12,13,0|15vglfz,12,13,0|15vglg0,16,1,1|166mg3z,16,1,1|166mg40,12,13,0|16e6o3z,12,13,0|16e6o40,16,1,1|16pcirz,16,1,1|16pcis0,12,13,0|16x9pfz,12,13,0|16x9pg0,16,1,1|1782lfz,16,1,1|1782lg0,12,13,0|17fzs3z,12,13,0|17fzs40,16,1,1|17qso3z,16,1,1|17qso40,12,13,0|17ypurz,12,13,0|17ypus0,16,1,1|189iqrz,16,1,1|189iqs0,12,13,0|18hfxfz,12,13,0|18hfxg0,16,1,1|18sls3z,16,1,1|18sls40,12,13,0|190603z,12,13,0|1906040,16,1,1|19bburz,16,1,1|19bbus0,12,13,0|19iw2rz,12,13,0|19iw2s0,16,1,1|19u1xfz,16,1,1|19u1xg0,12,13,0|1a1z43z,12,13,0|1a1z440,16,1,1|1acs03z,16,1,1|1acs040,12,13,0|1akp6rz,12,13,0|1akp6s0,16,1,1|1avi2rz,16,1,1|1avi2s0,12,13,0|1b3f9fz,12,13,0|1b3f9g0,16,1,1|1bel43z,16,1,1|1bel440,12,13,0|1bm5c3z,12,13,0|1bm5c40,16,1,1|1bxb6rz,16,1,1|1bxb6s0,12,13,0|1c4verz,12,13,0|1c4ves0,16,1,1|1cg19fz,16,1,1|1cg19g0,12,13,0|1cnlhfz,12,13,0|1cnlhg0,16,1,1|1cyrc3z,16,1,1|1cyrc40,12,13,0|1d6oirz,12,13,0|1d6ois0,16,1,1|1dhherz,16,1,1|1dhhes0,12,13,0|1dpelfz,12,13,0|1dpelg0,16,1,1|1e07hfz,16,1,1|1e07hg0,12,13,0|1e84o3z,12,13,0|1e84o40,16,1,1|1ejairz,16,1,1|1ejais0,12,13,0|1equqrz,12,13,0|1equqs0,16,1,1|1f20lfz,16,1,1|1f20lg0,12,13,0|1f9ktfz,12,13,0|1f9ktg0,16,1,1|1fkqo3z,16,1,1|1fkqo40,12,13,0|1fsnurz,12,13,0|1fsnus0,16,1,1|1g3gqrz,16,1,1|1g3gqs0,12,13,0|1gbdxfz,12,13,0|1gbdxg0,16,1,1|1gm6tfz,16,1,1|1gm6tg0,12,13,0|1gu403z,12,13,0|1gu4040,16,1,1|1h4ww3z,16,1,1|1h4ww40,12,13,0|1hcu2rz,12,13,0|1hcu2s0,16,1,1|1hnzxfz,16,1,1|1hnzxg0,12,13,0|1hvk5fz,12,13,0|1hvk5g0,16,1,1|1i6q03z,16,1,1|1i6q040,12,13,0|1iea83z,12,13,0|1iea840,16,1,1|1ipg2rz,16,1,1|1ipg2s0,12,13,0|1ixd9fz,12,13,0|1ixd9g0,16,1,1|1j865fz,16,1,1|1j865g0,12,13,0|1jg3c3z,12,13,0|1jg3c40,16,1,1|1jqw83z,16,1,1|1jqw840,12,13,0|1jyterz,12,13,0|1jytes0,16,1,1|1k9z9fz,16,1,1|1k9z9g0,12,13,0|1khjhfz,12,13,0|1khjhg0,16,1,1|1kspc3z,16,1,1|1kspc40,12,13,0|1l09k3z,12,13,0|1l09k40,16,1,1|1lbferz,16,1,1|1lbfes0,12,13,0|1ljclfz,12,13,0|1ljclg0,16,1,1|1lu5hfz,16,1,1|1lu5hg0,12,13,0|1m22o3z,12,13,0|1m22o40,16,1,1|1mcvk3z,16,1,1|1mcvk40,12,13,0|1mksqrz,12,13,0|1mksqs0,16,1,1|1mvlmrz,16,1,1|1mvlms0,12,13,0|1n3itfz,12,13,0|1n3itg0,16,1,1|1neoo3z,16,1,1|1neoo40,12,13,0|1nm8w3z,12,13,0|1nm8w40,16,1,1|1nxeqrz,16,1,1|1nxeqs0,12,13,0|1o4yyrz,12,13,0|1o4yys0,16,1,1|1og4tfz,16,1,1|1og4tg0,12,13,0|1oo203z,12,13,0|1oo2040,16,1,1|1oyuw3z,16,1,1|1oyuw40,12,13,0|1p6s2rz,12,13,0|1p6s2s0,16,1,1|1phkyrz,16,1,1|1phkys0,12,13,0|1ppi5fz,12,13,0|1ppi5g0,16,1,1|1q0o03z,16,1,1|1q0o040,12,13,0|1q8883z,12,13,0|1q88840,16,1,1|1qje2rz,16,1,1|1qje2s0,12,13,0|1qqyarz,12,13,0|1qqyas0,16,1,1|1r245fz,16,1,1|1r245g0,12,13,0|1r9odfz,12,13,0|1r9odg0,16,1,1|1rku83z,16,1,1|1rku840,12,13,0|1rsrerz,12,13,0|1rsres0,16,1,1|1s3karz,16,1,1|1s3kas0,12,13,0|1sbhhfz,12,13,0|1sbhhg0,16,1,1|1smadfz,16,1,1|1smadg0,12,13,0|1su7k3z,12,13,0|1su7k40,16,1,1|1t5derz,16,1,1|1t5des0,12,13,0|1tcxmrz,12,13,0|1tcxms0,16,1,1|1to3hfz,16,1,1|1to3hg0,12,13,0|1tvnpfz,12,13,0|1tvnpg0,16,1,1|1u6tk3z,16,1,1|1u6tk40,12,13,0|1ueqqrz,12,13,0|1ueqqs0,16,1,1|1upjmrz,16,1,1|1upjms0,12,13,0|1uxgtfz,12,13,0|1uxgtg0,16,1,1|1v89pfz,16,1,1|1v89pg0,12,13,0|1vg6w3z,12,13,0|1vg6w40,16,1,1|1vqzs3z,16,1,1|1vqzs40,12,13,0|NaN,12,13,0\",\"America/Sitka|,0,171,0|-1hc7qk0,0,171,0|-1hc7qjz,0,172,0|-1078wa0,0,172,0|-1078w9z,46,38,0|-ek1w81,46,38,0|-ek1w80,68,62,1|-cq2tg1,68,62,1|-cq2tg0,69,62,1|-cnov01,69,62,1|-cnov00,46,38,0|-csc81,46,38,0|-csc80,56,62,1|-3fdo1,56,62,1|-3fdo0,46,38,0|5xqfz,46,38,0|5xqg0,56,62,1|faozz,56,62,1|fap00,46,38,0|ont3z,46,38,0|ont40,56,62,1|ydqbz,56,62,1|ydqc0,46,38,0|17qufz,46,38,0|17qug0,56,62,1|1h3szz,56,62,1|1h3t00,46,38,0|1qgx3z,46,38,0|1qgx40,56,62,1|1ztvnz,56,62,1|1ztvo0,46,38,0|23fl3z,46,38,0|23fl40,56,62,1|2ijybz,56,62,1|2ijyc0,46,38,0|2ooefz,46,38,0|2ooeg0,56,62,1|31a0zz,56,62,1|31a100,46,38,0|3an53z,46,38,0|3an540,56,62,1|3kd2bz,56,62,1|3kd2c0,46,38,0|3td7rz,46,38,0|3td7s0,56,62,1|4334zz,56,62,1|433500,46,38,0|4cg93z,46,38,0|4cg940,56,62,1|4lt7nz,56,62,1|4lt7o0,46,38,0|4v6brz,46,38,0|4v6bs0,56,62,1|54jabz,56,62,1|54jac0,46,38,0|5dwefz,46,38,0|5dweg0,56,62,1|5n9czz,56,62,1|5n9d00,46,38,0|5wmh3z,46,38,0|5wmh40,56,62,1|65zfnz,56,62,1|65zfo0,46,38,0|6fcjrz,46,38,0|6fcjs0,56,62,1|6p2gzz,56,62,1|6p2h00,46,38,0|6y2mfz,46,38,0|6y2mg0,56,62,1|77sjnz,56,62,1|77sjo0,35,35,0|79dybz,35,35,0|79dyc0,36,35,0|7h5qjz,36,35,0|7h5qk0,37,38,1|7qip3z,37,38,1|7qip40,36,35,0|7zvt7z,36,35,0|7zvt80,37,38,1|898rrz,37,38,1|898rs0,36,35,0|8ilvvz,36,35,0|8ilvw0,37,38,1|8ryufz,37,38,1|8ryug0,36,35,0|9092jz,36,35,0|9092k0,37,38,1|9aox3z,37,38,1|9aox40,36,35,0|9iz57z,36,35,0|9iz580,37,38,1|9tryfz,37,38,1|9tryg0,36,35,0|a1p7vz,36,35,0|a1p7w0,37,38,1|aci13z,37,38,1|aci140,36,35,0|akfajz,36,35,0|akfak0,37,38,1|av83rz,37,38,1|av83s0,36,35,0|b3ibvz,36,35,0|b3ibw0,37,38,1|bdy6fz,37,38,1|bdy6g0,36,35,0|bm8ejz,36,35,0|bm8ek0,37,38,1|bwo93z,37,38,1|bwo940,36,35,0|c4yh7z,36,35,0|c4yh80,37,38,1|cfrafz,37,38,1|cfrag0,36,35,0|cnojvz,36,35,0|cnojw0,37,38,1|cyhd3z,37,38,1|cyhd40,36,35,0|d6emjz,36,35,0|d6emk0,37,38,1|dh7frz,37,38,1|dh7fs0,36,35,0|dphnvz,36,35,0|dphnw0,37,38,1|dzxifz,37,38,1|dzxig0,36,35,0|e87qjz,36,35,0|e87qk0,37,38,1|einl3z,37,38,1|einl40,36,35,0|eqxt7z,36,35,0|eqxt80,37,38,1|f1dnrz,37,38,1|f1dns0,36,35,0|f9nvvz,36,35,0|f9nvw0,37,38,1|fkgp3z,37,38,1|fkgp40,36,35,0|fsdyjz,36,35,0|fsdyk0,37,38,1|g36rrz,37,38,1|g36rs0,36,35,0|gb417z,36,35,0|gb4180,37,38,1|glwufz,37,38,1|glwug0,36,35,0|gu72jz,36,35,0|gu72k0,37,38,1|h4mx3z,37,38,1|h4mx40,36,35,0|hcx57z,36,35,0|hcx580,37,38,1|hnczrz,37,38,1|hnczs0,36,35,0|hvn7vz,36,35,0|hvn7w0,37,38,1|i6g13z,37,38,1|i6g140,36,35,0|iedajz,36,35,0|iedak0,37,38,1|ip63rz,37,38,1|ip63s0,36,35,0|ix3d7z,36,35,0|ix3d80,37,38,1|j7w6fz,37,38,1|j7w6g0,36,35,0|jeqjvz,36,35,0|jeqjw0,37,38,1|jqz7rz,37,38,1|jqz7s0,36,35,0|jxgmjz,36,35,0|jxgmk0,37,38,1|k9pafz,37,38,1|k9pag0,36,35,0|kg6p7z,36,35,0|kg6p80,37,38,1|ksfd3z,37,38,1|ksfd40,36,35,0|kz9qjz,36,35,0|kz9qk0,37,38,1|lbiefz,37,38,1|lbieg0,36,35,0|lhzt7z,36,35,0|lhzt80,37,38,1|lu8h3z,37,38,1|lu8h40,36,35,0|m0pvvz,36,35,0|m0pvw0,37,38,1|mcyjrz,37,38,1|mcyjs0,36,35,0|mjfyjz,36,35,0|mjfyk0,37,38,1|mvomfz,37,38,1|mvomg0,36,35,0|n2617z,36,35,0|n26180,37,38,1|neep3z,37,38,1|neep40,36,35,0|nkw3vz,36,35,0|nkw3w0,37,38,1|nx4rrz,37,38,1|nx4rs0,36,35,0|o3z57z,36,35,0|o3z580,37,38,1|og7t3z,37,38,1|og7t40,36,35,0|omp7vz,36,35,0|omp7w0,37,38,1|oyxvrz,37,38,1|oyxvs0,36,35,0|p5fajz,36,35,0|p5fak0,37,38,1|phnyfz,37,38,1|phnyg0,36,35,0|po5d7z,36,35,0|po5d80,37,38,1|q0e13z,37,38,1|q0e140,36,35,0|q6vfvz,36,35,0|q6vfw0,37,38,1|qj43rz,37,38,1|qj43s0,36,35,0|qpyh7z,36,35,0|qpyh80,37,38,1|r2753z,37,38,1|r27540,36,35,0|r8ojvz,36,35,0|r8ojw0,37,38,1|rkx7rz,37,38,1|rkx7s0,36,35,0|rremjz,36,35,0|rremk0,37,38,1|s3nafz,37,38,1|s3nag0,36,35,0|sa4p7z,36,35,0|sa4p80,37,38,1|smdd3z,37,38,1|smdd40,36,35,0|ssurvz,36,35,0|ssurw0,37,38,1|t53frz,37,38,1|t53fs0,36,35,0|tbkujz,36,35,0|tbkuk0,37,38,1|tntifz,37,38,1|tntig0,36,35,0|tunvvz,36,35,0|tunvw0,37,38,1|u6wjrz,37,38,1|u6wjs0,36,35,0|uddyjz,36,35,0|uddyk0,37,38,1|upmmfz,37,38,1|upmmg0,36,35,0|uw417z,36,35,0|uw4180,37,38,1|v8cp3z,37,38,1|v8cp40,36,35,0|veu3vz,36,35,0|veu3w0,37,38,1|vr2rrz,37,38,1|vr2rs0,36,35,0|vxk6jz,36,35,0|vxk6k0,37,38,1|w9sufz,37,38,1|w9sug0,36,35,0|wgn7vz,36,35,0|wgn7w0,37,38,1|wsvvrz,37,38,1|wsvvs0,36,35,0|wzdajz,36,35,0|wzdak0,37,38,1|xblyfz,37,38,1|xblyg0,36,35,0|xi3d7z,36,35,0|xi3d80,37,38,1|xuc13z,37,38,1|xuc140,36,35,0|y0tfvz,36,35,0|y0tfw0,37,38,1|yd23rz,37,38,1|yd23s0,36,35,0|yjjijz,36,35,0|yjjik0,37,38,1|yvs6fz,37,38,1|yvs6g0,36,35,0|z29l7z,36,35,0|z29l80,37,38,1|zei93z,37,38,1|zei940,36,35,0|zlcmjz,36,35,0|zlcmk0,37,38,1|zxlafz,37,38,1|zxlag0,36,35,0|1042p7z,36,35,0|1042p80,37,38,1|10gbd3z,37,38,1|10gbd40,36,35,0|10msrvz,36,35,0|10msrw0,37,38,1|10z1frz,37,38,1|10z1fs0,36,35,0|115iujz,36,35,0|115iuk0,37,38,1|11hrifz,37,38,1|11hrig0,36,35,0|11o8x7z,36,35,0|11o8x80,37,38,1|120hl3z,37,38,1|120hl40,36,35,0|126yzvz,36,35,0|126yzw0,37,38,1|12j7nrz,37,38,1|12j7ns0,36,35,0|12q217z,36,35,0|12q2180,37,38,1|132ap3z,37,38,1|132ap40,36,35,0|138s3vz,36,35,0|138s3w0,37,38,1|13l0rrz,37,38,1|13l0rs0,36,35,0|13ri6jz,36,35,0|13ri6k0,37,38,1|143qufz,37,38,1|143qug0,36,35,0|14a897z,36,35,0|14a8980,37,38,1|14mgx3z,37,38,1|14mgx40,36,35,0|14sybvz,36,35,0|14sybw0,37,38,1|1556zrz,37,38,1|1556zs0,36,35,0|15c1d7z,36,35,0|15c1d80,37,38,1|15oa13z,37,38,1|15oa140,36,35,0|15urfvz,36,35,0|15urfw0,37,38,1|16703rz,37,38,1|16703s0,36,35,0|16dhijz,36,35,0|16dhik0,37,38,1|16pq6fz,37,38,1|16pq6g0,36,35,0|16w7l7z,36,35,0|16w7l80,37,38,1|178g93z,37,38,1|178g940,36,35,0|17exnvz,36,35,0|17exnw0,37,38,1|17r6brz,37,38,1|17r6bs0,36,35,0|17xnqjz,36,35,0|17xnqk0,37,38,1|189wefz,37,38,1|189weg0,36,35,0|18gqrvz,36,35,0|18gqrw0,37,38,1|18szfrz,37,38,1|18szfs0,36,35,0|18zgujz,36,35,0|18zguk0,37,38,1|19bpifz,37,38,1|19bpig0,36,35,0|19i6x7z,36,35,0|19i6x80,37,38,1|19ufl3z,37,38,1|19ufl40,36,35,0|1a0wzvz,36,35,0|1a0wzw0,37,38,1|1ad5nrz,37,38,1|1ad5ns0,36,35,0|1ajn2jz,36,35,0|1ajn2k0,37,38,1|1avvqfz,37,38,1|1avvqg0,36,35,0|1b2q3vz,36,35,0|1b2q3w0,37,38,1|1beyrrz,37,38,1|1beyrs0,36,35,0|1blg6jz,36,35,0|1blg6k0,37,38,1|1bxoufz,37,38,1|1bxoug0,36,35,0|1c4697z,36,35,0|1c46980,37,38,1|1cgex3z,37,38,1|1cgex40,36,35,0|1cmwbvz,36,35,0|1cmwbw0,37,38,1|1cz4zrz,37,38,1|1cz4zs0,36,35,0|1d5mejz,36,35,0|1d5mek0,37,38,1|1dhv2fz,37,38,1|1dhv2g0,36,35,0|1doch7z,36,35,0|1doch80,37,38,1|1e0l53z,37,38,1|1e0l540,36,35,0|1e7fijz,36,35,0|1e7fik0,37,38,1|1ejo6fz,37,38,1|1ejo6g0,36,35,0|1eq5l7z,36,35,0|1eq5l80,37,38,1|1f2e93z,37,38,1|1f2e940,36,35,0|1f8vnvz,36,35,0|1f8vnw0,37,38,1|1fl4brz,37,38,1|1fl4bs0,36,35,0|1frlqjz,36,35,0|1frlqk0,37,38,1|1g3uefz,37,38,1|1g3ueg0,36,35,0|1gabt7z,36,35,0|1gabt80,37,38,1|1gmkh3z,37,38,1|1gmkh40,36,35,0|1gt1vvz,36,35,0|1gt1vw0,37,38,1|1h5ajrz,37,38,1|1h5ajs0,36,35,0|1hc4x7z,36,35,0|1hc4x80,37,38,1|1hodl3z,37,38,1|1hodl40,36,35,0|1huuzvz,36,35,0|1huuzw0,37,38,1|1i73nrz,37,38,1|1i73ns0,36,35,0|1idl2jz,36,35,0|1idl2k0,37,38,1|1iptqfz,37,38,1|1iptqg0,36,35,0|1iwb57z,36,35,0|1iwb580,37,38,1|1j8jt3z,37,38,1|1j8jt40,36,35,0|1jf17vz,36,35,0|1jf17w0,37,38,1|1jr9vrz,37,38,1|1jr9vs0,36,35,0|1jy497z,36,35,0|1jy4980,37,38,1|1kacx3z,37,38,1|1kacx40,36,35,0|1kgubvz,36,35,0|1kgubw0,37,38,1|1kt2zrz,37,38,1|1kt2zs0,36,35,0|1kzkejz,36,35,0|1kzkek0,37,38,1|1lbt2fz,37,38,1|1lbt2g0,36,35,0|1liah7z,36,35,0|1liah80,37,38,1|1luj53z,37,38,1|1luj540,36,35,0|1m10jvz,36,35,0|1m10jw0,37,38,1|1md97rz,37,38,1|1md97s0,36,35,0|1mjqmjz,36,35,0|1mjqmk0,37,38,1|1mvzafz,37,38,1|1mvzag0,36,35,0|1n2tnvz,36,35,0|1n2tnw0,37,38,1|1nf2brz,37,38,1|1nf2bs0,36,35,0|1nljqjz,36,35,0|1nljqk0,37,38,1|1nxsefz,37,38,1|1nxseg0,36,35,0|1o49t7z,36,35,0|1o49t80,37,38,1|1ogih3z,37,38,1|1ogih40,36,35,0|1omzvvz,36,35,0|1omzvw0,37,38,1|1oz8jrz,37,38,1|1oz8js0,36,35,0|1p5pyjz,36,35,0|1p5pyk0,37,38,1|1phymfz,37,38,1|1phymg0,36,35,0|1poszvz,36,35,0|1poszw0,37,38,1|1q11nrz,37,38,1|1q11ns0,36,35,0|1q7j2jz,36,35,0|1q7j2k0,37,38,1|1qjrqfz,37,38,1|1qjrqg0,36,35,0|1qq957z,36,35,0|1qq9580,37,38,1|1r2ht3z,37,38,1|1r2ht40,36,35,0|1r8z7vz,36,35,0|1r8z7w0,37,38,1|1rl7vrz,37,38,1|1rl7vs0,36,35,0|1rrpajz,36,35,0|1rrpak0,37,38,1|1s3xyfz,37,38,1|1s3xyg0,36,35,0|1safd7z,36,35,0|1safd80,37,38,1|1smo13z,37,38,1|1smo140,36,35,0|1stiejz,36,35,0|1stiek0,37,38,1|1t5r2fz,37,38,1|1t5r2g0,36,35,0|1tc8h7z,36,35,0|1tc8h80,37,38,1|1toh53z,37,38,1|1toh540,36,35,0|1tuyjvz,36,35,0|1tuyjw0,37,38,1|1u777rz,37,38,1|1u777s0,36,35,0|1udomjz,36,35,0|1udomk0,37,38,1|1upxafz,37,38,1|1upxag0,36,35,0|1uwep7z,36,35,0|1uwep80,37,38,1|1v8nd3z,37,38,1|1v8nd40,36,35,0|1vf4rvz,36,35,0|1vf4rw0,37,38,1|1vrdfrz,37,38,1|1vrdfs0,36,35,0|NaN,36,35,0\",\"America/St_Barthelemy|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/St_Johns|,0,95,0|-18vs8wl,0,95,0|-18vs8wk,23,95,0|-ris3cl,23,95,0|-ris3ck,72,96,1|-rag64l,72,96,1|-rag64k,23,95,0|-qzp20l,23,95,0|-qzp20k,72,96,1|-qpm64l,72,96,1|-qpm64k,23,95,0|-qfsmcl,23,95,0|-qfsmck,72,96,1|-qapd4l,72,96,1|-qapd4k,23,95,0|-px4ecl,23,95,0|-px4eck,72,96,1|-pnrfsl,72,96,1|-pnrfsk,23,95,0|-peebol,23,95,0|-peebok,72,96,1|-p51d4l,72,96,1|-p51d4k,23,95,0|-ovbacl,23,95,0|-ovback,72,96,1|-ombagl,72,96,1|-ombagk,23,95,0|-ocl7ol,23,95,0|-ocl7ok,72,96,1|-o3l7sl,72,96,1|-o3l7sk,23,95,0|-ntv50l,23,95,0|-ntv50k,72,96,1|-nkv54l,72,96,1|-nkv54k,23,95,0|-nb52cl,23,95,0|-nb52ck,72,96,1|-n252gl,72,96,1|-n252gk,23,95,0|-msezol,23,95,0|-msezok,72,96,1|-mj214l,72,96,1|-mj214k,23,95,0|-m9ox0l,23,95,0|-m9ox0k,72,96,1|-m0bygl,72,96,1|-m0bygk,23,95,0|-lqlvol,23,95,0|-lqlvok,72,96,1|-lhlvsl,72,96,1|-lhlvsk,23,95,0|-l7vt0l,23,95,0|-l7vt0k,72,96,1|-kyvt4l,72,96,1|-kyvt4k,23,95,0|-kp5qcl,23,95,0|-kp5qck,72,96,1|-kg5qgl,72,96,1|-kg5qgk,23,95,0|-k6fnol,23,95,0|-k6fnok,72,96,1|-jxfnsl,72,96,1|-jxfnsk,23,95,0|-jnpl0l,23,95,0|-jnpl0k,72,96,1|-jecmgl,72,96,1|-jecmgk,23,95,0|-j4mjol,23,95,0|-j4mjok,72,96,1|-ivmjsl,72,96,1|-ivmjsk,23,95,0|-ilwh0l,23,95,0|-ilwh0k,72,96,1|-icwh4l,72,96,1|-icwh4k,23,95,0|-i52u8l,23,95,0|-i52u8k,23,65,0|-i36ee1,23,65,0|-i36ee0,72,97,1|-hu6ei1,72,97,1|-hu6ei0,23,65,0|-hk3aa1,23,65,0|-hk3aa0,72,97,1|-hcj521,72,97,1|-hcj520,23,65,0|-h1d7m1,23,65,0|-h1d7m0,72,97,1|-gtt2e1,72,97,1|-gtt2e0,23,65,0|-gin4y1,23,65,0|-gin4y0,72,97,1|-gb2zq1,72,97,1|-gb2zq0,23,65,0|-fzk3m1,23,65,0|-fzk3m0,72,97,1|-fscx21,72,97,1|-fscx20,23,65,0|-fgu0y1,23,65,0|-fgu0y0,72,97,1|-f99vq1,72,97,1|-f99vq0,23,65,0|-ey3ya1,23,65,0|-ey3ya0,72,97,1|-eqjt21,72,97,1|-eqjt20,23,65,0|-efdvm1,23,65,0|-efdvm0,24,97,1|-cq2tg1,24,97,1|-cq2tg0,25,97,1|-cnp7i1,25,97,1|-cnp7i0,23,65,0|-cc6be1,23,65,0|-cc6be0,72,97,1|-c4m661,72,97,1|-c4m660,23,65,0|-btg8q1,23,65,0|-btg8q0,72,97,1|-blw3i1,72,97,1|-blw3i0,23,65,0|-baq621,23,65,0|-baq620,72,97,1|-b360u1,72,97,1|-b360u0,23,65,0|-as03e1,23,65,0|-as03e0,72,97,1|-akfy61,72,97,1|-akfy60,23,65,0|-a8x221,23,65,0|-a8x220,72,97,1|-a1cwu1,72,97,1|-a1cwu0,23,65,0|-9qwwq1,23,65,0|-9qwwq0,72,97,1|-9izsu1,72,97,1|-9izsu0,23,65,0|-986u21,23,65,0|-986u20,72,97,1|-909q61,72,97,1|-909q60,23,65,0|-8pgre1,23,65,0|-8pgre0,72,97,1|-8hjni1,72,97,1|-8hjni0,23,65,0|-86qoq1,23,65,0|-86qoq0,72,97,1|-7ytku1,72,97,1|-7ytku0,23,65,0|-7o0m21,23,65,0|-7o0m20,72,97,1|-7g3i61,72,97,1|-7g3i60,23,65,0|-74xkq1,23,65,0|-74xkq0,72,97,1|-6x0gu1,72,97,1|-6x0gu0,23,65,0|-6m7i21,23,65,0|-6m7i20,72,97,1|-6eae61,72,97,1|-6eae60,23,65,0|-63hfe1,23,65,0|-63hfe0,72,97,1|-5vkbi1,72,97,1|-5vkbi0,23,65,0|-5krcq1,23,65,0|-5krcq0,72,97,1|-5cu8u1,72,97,1|-5cu8u0,23,65,0|-521a21,23,65,0|-521a20,72,97,1|-4sbcu1,72,97,1|-4sbcu0,23,65,0|-4iy8q1,23,65,0|-4iy8q0,72,97,1|-49la61,72,97,1|-49la60,23,65,0|-408621,23,65,0|-408620,72,97,1|-3qv7i1,72,97,1|-3qv7i0,23,65,0|-3hi3e1,23,65,0|-3hi3e0,72,97,1|-3854u1,72,97,1|-3854u0,23,65,0|-2ys0q1,23,65,0|-2ys0q0,72,97,1|-2pf261,72,97,1|-2pf260,23,65,0|-2g1y21,23,65,0|-2g1y20,72,97,1|-26c0u1,72,97,1|-26c0u0,23,65,0|-1xbve1,23,65,0|-1xbve0,72,97,1|-1nly61,72,97,1|-1nly60,23,65,0|-1e8u21,23,65,0|-1e8u20,72,97,1|-14vvi1,72,97,1|-14vvi0,23,65,0|-vire1,23,65,0|-vire0,72,97,1|-m5su1,72,97,1|-m5su0,23,65,0|-csoq1,23,65,0|-csoq0,72,97,1|-3fq61,72,97,1|-3fq60,23,65,0|5xdxz,23,65,0|5xdy0,72,97,1|fachz,72,97,1|faci0,23,65,0|onglz,23,65,0|ongm0,72,97,1|yddtz,72,97,1|yddu0,23,65,0|17qhxz,23,65,0|17qhy0,72,97,1|1h3ghz,72,97,1|1h3gi0,23,65,0|1qgklz,23,65,0|1qgkm0,72,97,1|1ztj5z,72,97,1|1ztj60,23,65,0|296n9z,23,65,0|296na0,72,97,1|2ijltz,72,97,1|2ijlu0,23,65,0|2rwpxz,23,65,0|2rwpy0,72,97,1|319ohz,72,97,1|319oi0,23,65,0|3amslz,23,65,0|3amsm0,72,97,1|3kcptz,72,97,1|3kcpu0,23,65,0|3tcv9z,23,65,0|3tcva0,72,97,1|432shz,72,97,1|432si0,23,65,0|4cfwlz,23,65,0|4cfwm0,72,97,1|4lsv5z,72,97,1|4lsv60,23,65,0|4v5z9z,23,65,0|4v5za0,72,97,1|54ixtz,72,97,1|54ixu0,23,65,0|5dw1xz,23,65,0|5dw1y0,72,97,1|5n90hz,72,97,1|5n90i0,23,65,0|5wm4lz,23,65,0|5wm4m0,72,97,1|65z35z,72,97,1|65z360,23,65,0|6fc79z,23,65,0|6fc7a0,72,97,1|6p24hz,72,97,1|6p24i0,23,65,0|6y29xz,23,65,0|6y29y0,72,97,1|77s75z,72,97,1|77s760,23,65,0|7h5b9z,23,65,0|7h5ba0,72,97,1|7qi9tz,72,97,1|7qi9u0,23,65,0|7zvdxz,23,65,0|7zvdy0,72,97,1|898chz,72,97,1|898ci0,23,65,0|8ilglz,23,65,0|8ilgm0,72,97,1|8ryf5z,72,97,1|8ryf60,23,65,0|908hrn,23,65,0|908hro,72,97,1|9aocbn,72,97,1|9aocbo,23,65,0|9iykfn,23,65,0|9iykfo,87,142,1|9travn,87,142,1|9travo,23,65,0|a1on3n,23,65,0|a1on3o,72,97,1|achgbn,72,97,1|achgbo,23,65,0|akeprn,23,65,0|akepro,72,97,1|av7izn,72,97,1|av7izo,23,65,0|b3hr3n,23,65,0|b3hr3o,72,97,1|bdxlnn,72,97,1|bdxlno,23,65,0|bm7trn,23,65,0|bm7tro,72,97,1|bwnobn,72,97,1|bwnobo,23,65,0|c4xwfn,23,65,0|c4xwfo,72,97,1|cfqpnn,72,97,1|cfqpno,23,65,0|cnnz3n,23,65,0|cnnz3o,72,97,1|cygsbn,72,97,1|cygsbo,23,65,0|d6e1rn,23,65,0|d6e1ro,72,97,1|dh6uzn,72,97,1|dh6uzo,23,65,0|dph33n,23,65,0|dph33o,72,97,1|dzwxnn,72,97,1|dzwxno,23,65,0|e875rn,23,65,0|e875ro,72,97,1|ein0bn,72,97,1|ein0bo,23,65,0|eqx8fn,23,65,0|eqx8fo,72,97,1|f1d2zn,72,97,1|f1d2zo,23,65,0|f9nb3n,23,65,0|f9nb3o,72,97,1|fkg4bn,72,97,1|fkg4bo,23,65,0|fsddrn,23,65,0|fsddro,72,97,1|g366zn,72,97,1|g366zo,23,65,0|gb3gfn,23,65,0|gb3gfo,72,97,1|glw9nn,72,97,1|glw9no,23,65,0|gu6hrn,23,65,0|gu6hro,72,97,1|h4mcbn,72,97,1|h4mcbo,23,65,0|hcwkfn,23,65,0|hcwkfo,72,97,1|hncezn,72,97,1|hncezo,23,65,0|hvmn3n,23,65,0|hvmn3o,72,97,1|i6fgbn,72,97,1|i6fgbo,23,65,0|iecprn,23,65,0|iecpro,72,97,1|ip5izn,72,97,1|ip5izo,23,65,0|ix2sfn,23,65,0|ix2sfo,72,97,1|j7vlnn,72,97,1|j7vlno,23,65,0|jepz3n,23,65,0|jepz3o,72,97,1|jqymzn,72,97,1|jqymzo,23,65,0|jxg1rn,23,65,0|jxg1ro,72,97,1|k9opnn,72,97,1|k9opno,23,65,0|kg64fn,23,65,0|kg64fo,72,97,1|ksesbn,72,97,1|ksesbo,23,65,0|kz95rn,23,65,0|kz95ro,72,97,1|lbhtnn,72,97,1|lbhtno,23,65,0|lhz8fn,23,65,0|lhz8fo,72,97,1|lu81tz,72,97,1|lu81u0,23,65,0|m0pglz,23,65,0|m0pgm0,72,97,1|mcy4hz,72,97,1|mcy4i0,23,65,0|mjfj9z,23,65,0|mjfja0,72,97,1|mvo75z,72,97,1|mvo760,23,65,0|n25lxz,23,65,0|n25ly0,72,97,1|nee9tz,72,97,1|nee9u0,23,65,0|nkvolz,23,65,0|nkvom0,72,97,1|nx4chz,72,97,1|nx4ci0,23,65,0|o3ypxz,23,65,0|o3ypy0,72,97,1|og7dtz,72,97,1|og7du0,23,65,0|omoslz,23,65,0|omosm0,72,97,1|oyxghz,72,97,1|oyxgi0,23,65,0|p5ev9z,23,65,0|p5eva0,72,97,1|phnj5z,72,97,1|phnj60,23,65,0|po4xxz,23,65,0|po4xy0,72,97,1|q0dltz,72,97,1|q0dlu0,23,65,0|q6v0lz,23,65,0|q6v0m0,72,97,1|qj3ohz,72,97,1|qj3oi0,23,65,0|qpy1xz,23,65,0|qpy1y0,72,97,1|r26ptz,72,97,1|r26pu0,23,65,0|r8o4lz,23,65,0|r8o4m0,72,97,1|rkwshz,72,97,1|rkwsi0,23,65,0|rre79z,23,65,0|rre7a0,72,97,1|s3mv5z,72,97,1|s3mv60,23,65,0|sa49xz,23,65,0|sa49y0,72,97,1|smcxtz,72,97,1|smcxu0,23,65,0|ssuclz,23,65,0|ssucm0,72,97,1|t530hz,72,97,1|t530i0,23,65,0|tbkf9z,23,65,0|tbkfa0,72,97,1|tnt35z,72,97,1|tnt360,23,65,0|tunglz,23,65,0|tungm0,72,97,1|u6w4hz,72,97,1|u6w4i0,23,65,0|uddj9z,23,65,0|uddja0,72,97,1|upm75z,72,97,1|upm760,23,65,0|uw3lxz,23,65,0|uw3ly0,72,97,1|v8c9tz,72,97,1|v8c9u0,23,65,0|vetolz,23,65,0|vetom0,72,97,1|vr2chz,72,97,1|vr2ci0,23,65,0|vxjr9z,23,65,0|vxjra0,72,97,1|w9sf5z,72,97,1|w9sf60,23,65,0|wgmslz,23,65,0|wgmsm0,72,97,1|wsvghz,72,97,1|wsvgi0,23,65,0|wzcv9z,23,65,0|wzcva0,72,97,1|xblj5z,72,97,1|xblj60,23,65,0|xi2xxz,23,65,0|xi2xy0,72,97,1|xubltz,72,97,1|xublu0,23,65,0|y0t0lz,23,65,0|y0t0m0,72,97,1|yd1ohz,72,97,1|yd1oi0,23,65,0|yjj39z,23,65,0|yjj3a0,72,97,1|yvrr5z,72,97,1|yvrr60,23,65,0|z295xz,23,65,0|z295y0,72,97,1|zehttz,72,97,1|zehtu0,23,65,0|zlc79z,23,65,0|zlc7a0,72,97,1|zxkv5z,72,97,1|zxkv60,23,65,0|10429xz,23,65,0|10429y0,72,97,1|10gaxtz,72,97,1|10gaxu0,23,65,0|10msclz,23,65,0|10mscm0,72,97,1|10z10hz,72,97,1|10z10i0,23,65,0|115if9z,23,65,0|115ifa0,72,97,1|11hr35z,72,97,1|11hr360,23,65,0|11o8hxz,23,65,0|11o8hy0,72,97,1|120h5tz,72,97,1|120h5u0,23,65,0|126yklz,23,65,0|126ykm0,72,97,1|12j78hz,72,97,1|12j78i0,23,65,0|12q1lxz,23,65,0|12q1ly0,72,97,1|132a9tz,72,97,1|132a9u0,23,65,0|138rolz,23,65,0|138rom0,72,97,1|13l0chz,72,97,1|13l0ci0,23,65,0|13rhr9z,23,65,0|13rhra0,72,97,1|143qf5z,72,97,1|143qf60,23,65,0|14a7txz,23,65,0|14a7ty0,72,97,1|14mghtz,72,97,1|14mghu0,23,65,0|14sxwlz,23,65,0|14sxwm0,72,97,1|1556khz,72,97,1|1556ki0,23,65,0|15c0xxz,23,65,0|15c0xy0,72,97,1|15o9ltz,72,97,1|15o9lu0,23,65,0|15ur0lz,23,65,0|15ur0m0,72,97,1|166zohz,72,97,1|166zoi0,23,65,0|16dh39z,23,65,0|16dh3a0,72,97,1|16ppr5z,72,97,1|16ppr60,23,65,0|16w75xz,23,65,0|16w75y0,72,97,1|178fttz,72,97,1|178ftu0,23,65,0|17ex8lz,23,65,0|17ex8m0,72,97,1|17r5whz,72,97,1|17r5wi0,23,65,0|17xnb9z,23,65,0|17xnba0,72,97,1|189vz5z,72,97,1|189vz60,23,65,0|18gqclz,23,65,0|18gqcm0,72,97,1|18sz0hz,72,97,1|18sz0i0,23,65,0|18zgf9z,23,65,0|18zgfa0,72,97,1|19bp35z,72,97,1|19bp360,23,65,0|19i6hxz,23,65,0|19i6hy0,72,97,1|19uf5tz,72,97,1|19uf5u0,23,65,0|1a0wklz,23,65,0|1a0wkm0,72,97,1|1ad58hz,72,97,1|1ad58i0,23,65,0|1ajmn9z,23,65,0|1ajmna0,72,97,1|1avvb5z,72,97,1|1avvb60,23,65,0|1b2polz,23,65,0|1b2pom0,72,97,1|1beychz,72,97,1|1beyci0,23,65,0|1blfr9z,23,65,0|1blfra0,72,97,1|1bxof5z,72,97,1|1bxof60,23,65,0|1c45txz,23,65,0|1c45ty0,72,97,1|1cgehtz,72,97,1|1cgehu0,23,65,0|1cmvwlz,23,65,0|1cmvwm0,72,97,1|1cz4khz,72,97,1|1cz4ki0,23,65,0|1d5lz9z,23,65,0|1d5lza0,72,97,1|1dhun5z,72,97,1|1dhun60,23,65,0|1doc1xz,23,65,0|1doc1y0,72,97,1|1e0kptz,72,97,1|1e0kpu0,23,65,0|1e7f39z,23,65,0|1e7f3a0,72,97,1|1ejnr5z,72,97,1|1ejnr60,23,65,0|1eq55xz,23,65,0|1eq55y0,72,97,1|1f2dttz,72,97,1|1f2dtu0,23,65,0|1f8v8lz,23,65,0|1f8v8m0,72,97,1|1fl3whz,72,97,1|1fl3wi0,23,65,0|1frlb9z,23,65,0|1frlba0,72,97,1|1g3tz5z,72,97,1|1g3tz60,23,65,0|1gabdxz,23,65,0|1gabdy0,72,97,1|1gmk1tz,72,97,1|1gmk1u0,23,65,0|1gt1glz,23,65,0|1gt1gm0,72,97,1|1h5a4hz,72,97,1|1h5a4i0,23,65,0|1hc4hxz,23,65,0|1hc4hy0,72,97,1|1hod5tz,72,97,1|1hod5u0,23,65,0|1huuklz,23,65,0|1huukm0,72,97,1|1i738hz,72,97,1|1i738i0,23,65,0|1idkn9z,23,65,0|1idkna0,72,97,1|1iptb5z,72,97,1|1iptb60,23,65,0|1iwapxz,23,65,0|1iwapy0,72,97,1|1j8jdtz,72,97,1|1j8jdu0,23,65,0|1jf0slz,23,65,0|1jf0sm0,72,97,1|1jr9ghz,72,97,1|1jr9gi0,23,65,0|1jy3txz,23,65,0|1jy3ty0,72,97,1|1kachtz,72,97,1|1kachu0,23,65,0|1kgtwlz,23,65,0|1kgtwm0,72,97,1|1kt2khz,72,97,1|1kt2ki0,23,65,0|1kzjz9z,23,65,0|1kzjza0,72,97,1|1lbsn5z,72,97,1|1lbsn60,23,65,0|1lia1xz,23,65,0|1lia1y0,72,97,1|1luiptz,72,97,1|1luipu0,23,65,0|1m104lz,23,65,0|1m104m0,72,97,1|1md8shz,72,97,1|1md8si0,23,65,0|1mjq79z,23,65,0|1mjq7a0,72,97,1|1mvyv5z,72,97,1|1mvyv60,23,65,0|1n2t8lz,23,65,0|1n2t8m0,72,97,1|1nf1whz,72,97,1|1nf1wi0,23,65,0|1nljb9z,23,65,0|1nljba0,72,97,1|1nxrz5z,72,97,1|1nxrz60,23,65,0|1o49dxz,23,65,0|1o49dy0,72,97,1|1ogi1tz,72,97,1|1ogi1u0,23,65,0|1omzglz,23,65,0|1omzgm0,72,97,1|1oz84hz,72,97,1|1oz84i0,23,65,0|1p5pj9z,23,65,0|1p5pja0,72,97,1|1phy75z,72,97,1|1phy760,23,65,0|1posklz,23,65,0|1poskm0,72,97,1|1q118hz,72,97,1|1q118i0,23,65,0|1q7in9z,23,65,0|1q7ina0,72,97,1|1qjrb5z,72,97,1|1qjrb60,23,65,0|1qq8pxz,23,65,0|1qq8py0,72,97,1|1r2hdtz,72,97,1|1r2hdu0,23,65,0|1r8yslz,23,65,0|1r8ysm0,72,97,1|1rl7ghz,72,97,1|1rl7gi0,23,65,0|1rrov9z,23,65,0|1rrova0,72,97,1|1s3xj5z,72,97,1|1s3xj60,23,65,0|1saexxz,23,65,0|1saexy0,72,97,1|1smnltz,72,97,1|1smnlu0,23,65,0|1sthz9z,23,65,0|1sthza0,72,97,1|1t5qn5z,72,97,1|1t5qn60,23,65,0|1tc81xz,23,65,0|1tc81y0,72,97,1|1togptz,72,97,1|1togpu0,23,65,0|1tuy4lz,23,65,0|1tuy4m0,72,97,1|1u76shz,72,97,1|1u76si0,23,65,0|1udo79z,23,65,0|1udo7a0,72,97,1|1upwv5z,72,97,1|1upwv60,23,65,0|1uwe9xz,23,65,0|1uwe9y0,72,97,1|1v8mxtz,72,97,1|1v8mxu0,23,65,0|1vf4clz,23,65,0|1vf4cm0,72,97,1|1vrd0hz,72,97,1|1vrd0i0,23,65,0|NaN,23,65,0\",\"America/St_Kitts|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/St_Lucia|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/St_Thomas|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/St_Vincent|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/Swift_Current|,0,173,0|-xkq9d5,0,173,0|-xkq9d4,44,62,0|-qzosc1,44,62,0|-qzosc0,47,63,1|-qplwg1,47,63,1|-qplwg0,44,62,0|-ek1z01,44,62,0|-ek1z00,57,63,1|-cq2tg1,57,63,1|-cq2tg0,58,63,1|-cnoxs1,58,63,1|-cnoxs0,44,62,0|-ccvz01,44,62,0|-ccvz00,47,63,1|-c48xs1,47,63,1|-c48xs0,44,62,0|-bu5wc1,44,62,0|-bu5wc0,47,63,1|-bm8sg1,47,63,1|-bm8sg0,44,62,0|-bbfto1,44,62,0|-bbfto0,47,63,1|-b3ips1,47,63,1|-b3ips0,44,62,0|-aspr01,44,62,0|-aspr00,47,63,1|-aksn41,47,63,1|-aksn40,44,62,0|-6m78c1,44,62,0|-6m78c0,47,63,1|-6cu9s1,47,63,1|-6cu9s0,44,62,0|-5kr301,44,62,0|-5kr300,47,63,1|-5be4g1,47,63,1|-5be4g0,44,62,0|-5210c1,44,62,0|-5210c0,47,63,1|-4u3wg1,47,63,1|-4u3wg0,44,62,0|-4ixz01,44,62,0|-4ixz00,47,63,1|-4bdts1,47,63,1|-4bdts0,44,62,0|17qrnz,44,62,0|17qro0,45,63,0|NaN,45,63,0\",\"America/Tegucigalpa|,0,174,0|-pfzh6l,0,174,0|-pfzh6k,45,63,0|91ojbz,45,63,0|91ojc0,48,59,1|998ojz,48,59,1|998ok0,45,63,0|9kelzz,45,63,0|9kem00,48,59,1|9ryr7z,48,59,1|9ryr80,45,63,0|iyvsnz,45,63,0|iyvso0,48,59,1|j3m37z,48,59,1|j3m380,45,63,0|NaN,45,63,0\",\"America/Thule|,0,175,0|-rvuj9h,0,175,0|-rvuj9g,31,40,0|b34zbz,31,40,0|b34zc0,49,41,1|bchxvz,49,41,1|bchxw0,31,40,0|blv1zz,31,40,0|blv200,49,41,1|bv80jz,49,41,1|bv80k0,31,40,0|c4y3bz,31,40,0|c4y3c0,49,41,1|cfqwjz,49,41,1|cfqwk0,31,40,0|cno5zz,31,40,0|cno600,49,41,1|cygz7z,49,41,1|cygz80,31,40,0|d6e8nz,31,40,0|d6e8o0,49,41,1|dh71vz,49,41,1|dh71w0,31,40,0|dph9zz,31,40,0|dpha00,49,41,1|dzx4jz,49,41,1|dzx4k0,31,40,0|e87cnz,31,40,0|e87co0,49,41,1|ein77z,49,41,1|ein780,31,40,0|eqxfbz,31,40,0|eqxfc0,49,41,1|f1d9vz,49,41,1|f1d9w0,31,40,0|f9nhzz,31,40,0|f9ni00,49,41,1|fkgb7z,49,41,1|fkgb80,31,40,0|fsdknz,31,40,0|fsdko0,49,41,1|g36dvz,49,41,1|g36dw0,31,40,0|gb3nbz,31,40,0|gb3nc0,49,41,1|glwgjz,49,41,1|glwgk0,31,40,0|gu6onz,31,40,0|gu6oo0,49,41,1|h4mj7z,49,41,1|h4mj80,31,40,0|hcwrbz,31,40,0|hcwrc0,49,41,1|hnclvz,49,41,1|hnclw0,31,40,0|hvmtzz,31,40,0|hvmu00,49,41,1|i6fn7z,49,41,1|i6fn80,31,40,0|iecwnz,31,40,0|iecwo0,49,41,1|ip5pvz,49,41,1|ip5pw0,31,40,0|ix2zbz,31,40,0|ix2zc0,49,41,1|j7vsjz,49,41,1|j7vsk0,31,40,0|jeq5zz,31,40,0|jeq600,49,41,1|jqytvz,49,41,1|jqytw0,31,40,0|jxg8nz,31,40,0|jxg8o0,49,41,1|k9owjz,49,41,1|k9owk0,31,40,0|kg6bbz,31,40,0|kg6bc0,49,41,1|ksez7z,49,41,1|ksez80,31,40,0|kz9cnz,31,40,0|kz9co0,49,41,1|lbi0jz,49,41,1|lbi0k0,31,40,0|lhzfbz,31,40,0|lhzfc0,49,41,1|lu837z,49,41,1|lu8380,31,40,0|m0phzz,31,40,0|m0pi00,49,41,1|mcy5vz,49,41,1|mcy5w0,31,40,0|mjfknz,31,40,0|mjfko0,49,41,1|mvo8jz,49,41,1|mvo8k0,31,40,0|n25nbz,31,40,0|n25nc0,49,41,1|neeb7z,49,41,1|neeb80,31,40,0|nkvpzz,31,40,0|nkvq00,49,41,1|nx4dvz,49,41,1|nx4dw0,31,40,0|o3yrbz,31,40,0|o3yrc0,49,41,1|og7f7z,49,41,1|og7f80,31,40,0|omotzz,31,40,0|omou00,49,41,1|oyxhvz,49,41,1|oyxhw0,31,40,0|p5ewnz,31,40,0|p5ewo0,49,41,1|phnkjz,49,41,1|phnkk0,31,40,0|po4zbz,31,40,0|po4zc0,49,41,1|q0dn7z,49,41,1|q0dn80,31,40,0|q6v1zz,31,40,0|q6v200,49,41,1|qj3pvz,49,41,1|qj3pw0,31,40,0|qpy3bz,31,40,0|qpy3c0,49,41,1|r26r7z,49,41,1|r26r80,31,40,0|r8o5zz,31,40,0|r8o600,49,41,1|rkwtvz,49,41,1|rkwtw0,31,40,0|rre8nz,31,40,0|rre8o0,49,41,1|s3mwjz,49,41,1|s3mwk0,31,40,0|sa4bbz,31,40,0|sa4bc0,49,41,1|smcz7z,49,41,1|smcz80,31,40,0|ssudzz,31,40,0|ssue00,49,41,1|t531vz,49,41,1|t531w0,31,40,0|tbkgnz,31,40,0|tbkgo0,49,41,1|tnt4jz,49,41,1|tnt4k0,31,40,0|tunhzz,31,40,0|tuni00,49,41,1|u6w5vz,49,41,1|u6w5w0,31,40,0|uddknz,31,40,0|uddko0,49,41,1|upm8jz,49,41,1|upm8k0,31,40,0|uw3nbz,31,40,0|uw3nc0,49,41,1|v8cb7z,49,41,1|v8cb80,31,40,0|vetpzz,31,40,0|vetq00,49,41,1|vr2dvz,49,41,1|vr2dw0,31,40,0|vxjsnz,31,40,0|vxjso0,49,41,1|w9sgjz,49,41,1|w9sgk0,31,40,0|wgmtzz,31,40,0|wgmu00,49,41,1|wsvhvz,49,41,1|wsvhw0,31,40,0|wzcwnz,31,40,0|wzcwo0,49,41,1|xblkjz,49,41,1|xblkk0,31,40,0|xi2zbz,31,40,0|xi2zc0,49,41,1|xubn7z,49,41,1|xubn80,31,40,0|y0t1zz,31,40,0|y0t200,49,41,1|yd1pvz,49,41,1|yd1pw0,31,40,0|yjj4nz,31,40,0|yjj4o0,49,41,1|yvrsjz,49,41,1|yvrsk0,31,40,0|z297bz,31,40,0|z297c0,49,41,1|zehv7z,49,41,1|zehv80,31,40,0|zlc8nz,31,40,0|zlc8o0,49,41,1|zxkwjz,49,41,1|zxkwk0,31,40,0|1042bbz,31,40,0|1042bc0,49,41,1|10gaz7z,49,41,1|10gaz80,31,40,0|10msdzz,31,40,0|10mse00,49,41,1|10z11vz,49,41,1|10z11w0,31,40,0|115ignz,31,40,0|115igo0,49,41,1|11hr4jz,49,41,1|11hr4k0,31,40,0|11o8jbz,31,40,0|11o8jc0,49,41,1|120h77z,49,41,1|120h780,31,40,0|126ylzz,31,40,0|126ym00,49,41,1|12j79vz,49,41,1|12j79w0,31,40,0|12q1nbz,31,40,0|12q1nc0,49,41,1|132ab7z,49,41,1|132ab80,31,40,0|138rpzz,31,40,0|138rq00,49,41,1|13l0dvz,49,41,1|13l0dw0,31,40,0|13rhsnz,31,40,0|13rhso0,49,41,1|143qgjz,49,41,1|143qgk0,31,40,0|14a7vbz,31,40,0|14a7vc0,49,41,1|14mgj7z,49,41,1|14mgj80,31,40,0|14sxxzz,31,40,0|14sxy00,49,41,1|1556lvz,49,41,1|1556lw0,31,40,0|15c0zbz,31,40,0|15c0zc0,49,41,1|15o9n7z,49,41,1|15o9n80,31,40,0|15ur1zz,31,40,0|15ur200,49,41,1|166zpvz,49,41,1|166zpw0,31,40,0|16dh4nz,31,40,0|16dh4o0,49,41,1|16ppsjz,49,41,1|16ppsk0,31,40,0|16w77bz,31,40,0|16w77c0,49,41,1|178fv7z,49,41,1|178fv80,31,40,0|17ex9zz,31,40,0|17exa00,49,41,1|17r5xvz,49,41,1|17r5xw0,31,40,0|17xncnz,31,40,0|17xnco0,49,41,1|189w0jz,49,41,1|189w0k0,31,40,0|18gqdzz,31,40,0|18gqe00,49,41,1|18sz1vz,49,41,1|18sz1w0,31,40,0|18zggnz,31,40,0|18zggo0,49,41,1|19bp4jz,49,41,1|19bp4k0,31,40,0|19i6jbz,31,40,0|19i6jc0,49,41,1|19uf77z,49,41,1|19uf780,31,40,0|1a0wlzz,31,40,0|1a0wm00,49,41,1|1ad59vz,49,41,1|1ad59w0,31,40,0|1ajmonz,31,40,0|1ajmoo0,49,41,1|1avvcjz,49,41,1|1avvck0,31,40,0|1b2ppzz,31,40,0|1b2pq00,49,41,1|1beydvz,49,41,1|1beydw0,31,40,0|1blfsnz,31,40,0|1blfso0,49,41,1|1bxogjz,49,41,1|1bxogk0,31,40,0|1c45vbz,31,40,0|1c45vc0,49,41,1|1cgej7z,49,41,1|1cgej80,31,40,0|1cmvxzz,31,40,0|1cmvy00,49,41,1|1cz4lvz,49,41,1|1cz4lw0,31,40,0|1d5m0nz,31,40,0|1d5m0o0,49,41,1|1dhuojz,49,41,1|1dhuok0,31,40,0|1doc3bz,31,40,0|1doc3c0,49,41,1|1e0kr7z,49,41,1|1e0kr80,31,40,0|1e7f4nz,31,40,0|1e7f4o0,49,41,1|1ejnsjz,49,41,1|1ejnsk0,31,40,0|1eq57bz,31,40,0|1eq57c0,49,41,1|1f2dv7z,49,41,1|1f2dv80,31,40,0|1f8v9zz,31,40,0|1f8va00,49,41,1|1fl3xvz,49,41,1|1fl3xw0,31,40,0|1frlcnz,31,40,0|1frlco0,49,41,1|1g3u0jz,49,41,1|1g3u0k0,31,40,0|1gabfbz,31,40,0|1gabfc0,49,41,1|1gmk37z,49,41,1|1gmk380,31,40,0|1gt1hzz,31,40,0|1gt1i00,49,41,1|1h5a5vz,49,41,1|1h5a5w0,31,40,0|1hc4jbz,31,40,0|1hc4jc0,49,41,1|1hod77z,49,41,1|1hod780,31,40,0|1huulzz,31,40,0|1huum00,49,41,1|1i739vz,49,41,1|1i739w0,31,40,0|1idkonz,31,40,0|1idkoo0,49,41,1|1iptcjz,49,41,1|1iptck0,31,40,0|1iwarbz,31,40,0|1iwarc0,49,41,1|1j8jf7z,49,41,1|1j8jf80,31,40,0|1jf0tzz,31,40,0|1jf0u00,49,41,1|1jr9hvz,49,41,1|1jr9hw0,31,40,0|1jy3vbz,31,40,0|1jy3vc0,49,41,1|1kacj7z,49,41,1|1kacj80,31,40,0|1kgtxzz,31,40,0|1kgty00,49,41,1|1kt2lvz,49,41,1|1kt2lw0,31,40,0|1kzk0nz,31,40,0|1kzk0o0,49,41,1|1lbsojz,49,41,1|1lbsok0,31,40,0|1lia3bz,31,40,0|1lia3c0,49,41,1|1luir7z,49,41,1|1luir80,31,40,0|1m105zz,31,40,0|1m10600,49,41,1|1md8tvz,49,41,1|1md8tw0,31,40,0|1mjq8nz,31,40,0|1mjq8o0,49,41,1|1mvywjz,49,41,1|1mvywk0,31,40,0|1n2t9zz,31,40,0|1n2ta00,49,41,1|1nf1xvz,49,41,1|1nf1xw0,31,40,0|1nljcnz,31,40,0|1nljco0,49,41,1|1nxs0jz,49,41,1|1nxs0k0,31,40,0|1o49fbz,31,40,0|1o49fc0,49,41,1|1ogi37z,49,41,1|1ogi380,31,40,0|1omzhzz,31,40,0|1omzi00,49,41,1|1oz85vz,49,41,1|1oz85w0,31,40,0|1p5pknz,31,40,0|1p5pko0,49,41,1|1phy8jz,49,41,1|1phy8k0,31,40,0|1poslzz,31,40,0|1posm00,49,41,1|1q119vz,49,41,1|1q119w0,31,40,0|1q7ionz,31,40,0|1q7ioo0,49,41,1|1qjrcjz,49,41,1|1qjrck0,31,40,0|1qq8rbz,31,40,0|1qq8rc0,49,41,1|1r2hf7z,49,41,1|1r2hf80,31,40,0|1r8ytzz,31,40,0|1r8yu00,49,41,1|1rl7hvz,49,41,1|1rl7hw0,31,40,0|1rrownz,31,40,0|1rrowo0,49,41,1|1s3xkjz,49,41,1|1s3xkk0,31,40,0|1saezbz,31,40,0|1saezc0,49,41,1|1smnn7z,49,41,1|1smnn80,31,40,0|1sti0nz,31,40,0|1sti0o0,49,41,1|1t5qojz,49,41,1|1t5qok0,31,40,0|1tc83bz,31,40,0|1tc83c0,49,41,1|1togr7z,49,41,1|1togr80,31,40,0|1tuy5zz,31,40,0|1tuy600,49,41,1|1u76tvz,49,41,1|1u76tw0,31,40,0|1udo8nz,31,40,0|1udo8o0,49,41,1|1upwwjz,49,41,1|1upwwk0,31,40,0|1uwebbz,31,40,0|1uwebc0,49,41,1|1v8mz7z,49,41,1|1v8mz80,31,40,0|1vf4dzz,31,40,0|1vf4e00,49,41,1|1vrd1vz,49,41,1|1vrd1w0,31,40,0|NaN,31,40,0\",\"America/Thunder_Bay|,0,176,0|-1353bh1,0,176,0|-1353bh0,45,63,0|-vbavc1,45,63,0|-vbavc0,43,59,0|-ek24k1,43,59,0|-ek24k0,70,40,1|-cq2tg1,70,40,1|-cq2tg0,71,40,1|-cnp3c1,71,40,1|-cnp3c0,43,59,0|5xi3z,43,59,0|5xi40,61,40,1|fagnz,61,40,1|fago0,43,59,0|onkrz,43,59,0|onks0,61,40,1|ydhzz,61,40,1|ydi00,43,59,0|17qm3z,43,59,0|17qm40,61,40,1|1h3knz,61,40,1|1h3ko0,43,59,0|296rfz,43,59,0|296rg0,61,40,1|2ijpzz,61,40,1|2ijq00,43,59,0|2rwu3z,43,59,0|2rwu40,61,40,1|319snz,61,40,1|319so0,43,59,0|3amwrz,43,59,0|3amws0,61,40,1|3kctzz,61,40,1|3kcu00,43,59,0|3tczfz,43,59,0|3tczg0,61,40,1|432wnz,61,40,1|432wo0,43,59,0|4cg0rz,43,59,0|4cg0s0,61,40,1|4lszbz,61,40,1|4lszc0,43,59,0|4v63fz,43,59,0|4v63g0,61,40,1|54j1zz,61,40,1|54j200,43,59,0|5dw63z,43,59,0|5dw640,61,40,1|5n94nz,61,40,1|5n94o0,43,59,0|5wm8rz,43,59,0|5wm8s0,61,40,1|65z7bz,61,40,1|65z7c0,43,59,0|6fcbfz,43,59,0|6fcbg0,61,40,1|6p28nz,61,40,1|6p28o0,43,59,0|6y2e3z,43,59,0|6y2e40,61,40,1|77sbbz,61,40,1|77sbc0,43,59,0|7h5ffz,43,59,0|7h5fg0,61,40,1|7qidzz,61,40,1|7qie00,43,59,0|7zvi3z,43,59,0|7zvi40,61,40,1|898gnz,61,40,1|898go0,43,59,0|8ilkrz,43,59,0|8ilks0,61,40,1|8ryjbz,61,40,1|8ryjc0,43,59,0|908rfz,43,59,0|908rg0,61,40,1|9aolzz,61,40,1|9aom00,43,59,0|9iyu3z,43,59,0|9iyu40,61,40,1|9trnbz,61,40,1|9trnc0,43,59,0|a1owrz,43,59,0|a1ows0,61,40,1|achpzz,61,40,1|achq00,43,59,0|akezfz,43,59,0|akezg0,61,40,1|av7snz,61,40,1|av7so0,43,59,0|b3i0rz,43,59,0|b3i0s0,61,40,1|bdxvbz,61,40,1|bdxvc0,43,59,0|bm83fz,43,59,0|bm83g0,61,40,1|bwnxzz,61,40,1|bwny00,43,59,0|c4y63z,43,59,0|c4y640,61,40,1|cfqzbz,61,40,1|cfqzc0,43,59,0|cno8rz,43,59,0|cno8s0,61,40,1|cyh1zz,61,40,1|cyh200,43,59,0|d6ebfz,43,59,0|d6ebg0,61,40,1|dh74nz,61,40,1|dh74o0,43,59,0|dphcrz,43,59,0|dphcs0,61,40,1|dzx7bz,61,40,1|dzx7c0,43,59,0|e87ffz,43,59,0|e87fg0,61,40,1|ein9zz,61,40,1|eina00,43,59,0|eqxi3z,43,59,0|eqxi40,61,40,1|f1dcnz,61,40,1|f1dco0,43,59,0|f9nkrz,43,59,0|f9nks0,61,40,1|fkgdzz,61,40,1|fkge00,43,59,0|fsdnfz,43,59,0|fsdng0,61,40,1|g36gnz,61,40,1|g36go0,43,59,0|gb3q3z,43,59,0|gb3q40,61,40,1|glwjbz,61,40,1|glwjc0,43,59,0|gu6rfz,43,59,0|gu6rg0,61,40,1|h4mlzz,61,40,1|h4mm00,43,59,0|hcwu3z,43,59,0|hcwu40,61,40,1|hnconz,61,40,1|hncoo0,43,59,0|hvmwrz,43,59,0|hvmws0,61,40,1|i6fpzz,61,40,1|i6fq00,43,59,0|ieczfz,43,59,0|ieczg0,61,40,1|ip5snz,61,40,1|ip5so0,43,59,0|ix323z,43,59,0|ix3240,61,40,1|j7vvbz,61,40,1|j7vvc0,43,59,0|jeq8rz,43,59,0|jeq8s0,61,40,1|jqywnz,61,40,1|jqywo0,43,59,0|jxgbfz,43,59,0|jxgbg0,61,40,1|k9ozbz,61,40,1|k9ozc0,43,59,0|kg6e3z,43,59,0|kg6e40,61,40,1|ksf1zz,61,40,1|ksf200,43,59,0|kz9ffz,43,59,0|kz9fg0,61,40,1|lbi3bz,61,40,1|lbi3c0,43,59,0|lhzi3z,43,59,0|lhzi40,61,40,1|lu85zz,61,40,1|lu8600,43,59,0|m0pkrz,43,59,0|m0pks0,61,40,1|mcy8nz,61,40,1|mcy8o0,43,59,0|mjfnfz,43,59,0|mjfng0,61,40,1|mvobbz,61,40,1|mvobc0,43,59,0|n25q3z,43,59,0|n25q40,61,40,1|needzz,61,40,1|neee00,43,59,0|nkvsrz,43,59,0|nkvss0,61,40,1|nx4gnz,61,40,1|nx4go0,43,59,0|o3yu3z,43,59,0|o3yu40,61,40,1|og7hzz,61,40,1|og7i00,43,59,0|omowrz,43,59,0|omows0,61,40,1|oyxknz,61,40,1|oyxko0,43,59,0|p5ezfz,43,59,0|p5ezg0,61,40,1|phnnbz,61,40,1|phnnc0,43,59,0|po523z,43,59,0|po5240,61,40,1|q0dpzz,61,40,1|q0dq00,43,59,0|q6v4rz,43,59,0|q6v4s0,61,40,1|qj3snz,61,40,1|qj3so0,43,59,0|qpy63z,43,59,0|qpy640,61,40,1|r26tzz,61,40,1|r26u00,43,59,0|r8o8rz,43,59,0|r8o8s0,61,40,1|rkwwnz,61,40,1|rkwwo0,43,59,0|rrebfz,43,59,0|rrebg0,61,40,1|s3mzbz,61,40,1|s3mzc0,43,59,0|sa4e3z,43,59,0|sa4e40,61,40,1|smd1zz,61,40,1|smd200,43,59,0|ssugrz,43,59,0|ssugs0,61,40,1|t534nz,61,40,1|t534o0,43,59,0|tbkjfz,43,59,0|tbkjg0,61,40,1|tnt7bz,61,40,1|tnt7c0,43,59,0|tunkrz,43,59,0|tunks0,61,40,1|u6w8nz,61,40,1|u6w8o0,43,59,0|uddnfz,43,59,0|uddng0,61,40,1|upmbbz,61,40,1|upmbc0,43,59,0|uw3q3z,43,59,0|uw3q40,61,40,1|v8cdzz,61,40,1|v8ce00,43,59,0|vetsrz,43,59,0|vetss0,61,40,1|vr2gnz,61,40,1|vr2go0,43,59,0|vxjvfz,43,59,0|vxjvg0,61,40,1|w9sjbz,61,40,1|w9sjc0,43,59,0|wgmwrz,43,59,0|wgmws0,61,40,1|wsvknz,61,40,1|wsvko0,43,59,0|wzczfz,43,59,0|wzczg0,61,40,1|xblnbz,61,40,1|xblnc0,43,59,0|xi323z,43,59,0|xi3240,61,40,1|xubpzz,61,40,1|xubq00,43,59,0|y0t4rz,43,59,0|y0t4s0,61,40,1|yd1snz,61,40,1|yd1so0,43,59,0|yjj7fz,43,59,0|yjj7g0,61,40,1|yvrvbz,61,40,1|yvrvc0,43,59,0|z29a3z,43,59,0|z29a40,61,40,1|zehxzz,61,40,1|zehy00,43,59,0|zlcbfz,43,59,0|zlcbg0,61,40,1|zxkzbz,61,40,1|zxkzc0,43,59,0|1042e3z,43,59,0|1042e40,61,40,1|10gb1zz,61,40,1|10gb200,43,59,0|10msgrz,43,59,0|10msgs0,61,40,1|10z14nz,61,40,1|10z14o0,43,59,0|115ijfz,43,59,0|115ijg0,61,40,1|11hr7bz,61,40,1|11hr7c0,43,59,0|11o8m3z,43,59,0|11o8m40,61,40,1|120h9zz,61,40,1|120ha00,43,59,0|126yorz,43,59,0|126yos0,61,40,1|12j7cnz,61,40,1|12j7co0,43,59,0|12q1q3z,43,59,0|12q1q40,61,40,1|132adzz,61,40,1|132ae00,43,59,0|138rsrz,43,59,0|138rss0,61,40,1|13l0gnz,61,40,1|13l0go0,43,59,0|13rhvfz,43,59,0|13rhvg0,61,40,1|143qjbz,61,40,1|143qjc0,43,59,0|14a7y3z,43,59,0|14a7y40,61,40,1|14mglzz,61,40,1|14mgm00,43,59,0|14sy0rz,43,59,0|14sy0s0,61,40,1|1556onz,61,40,1|1556oo0,43,59,0|15c123z,43,59,0|15c1240,61,40,1|15o9pzz,61,40,1|15o9q00,43,59,0|15ur4rz,43,59,0|15ur4s0,61,40,1|166zsnz,61,40,1|166zso0,43,59,0|16dh7fz,43,59,0|16dh7g0,61,40,1|16ppvbz,61,40,1|16ppvc0,43,59,0|16w7a3z,43,59,0|16w7a40,61,40,1|178fxzz,61,40,1|178fy00,43,59,0|17excrz,43,59,0|17excs0,61,40,1|17r60nz,61,40,1|17r60o0,43,59,0|17xnffz,43,59,0|17xnfg0,61,40,1|189w3bz,61,40,1|189w3c0,43,59,0|18gqgrz,43,59,0|18gqgs0,61,40,1|18sz4nz,61,40,1|18sz4o0,43,59,0|18zgjfz,43,59,0|18zgjg0,61,40,1|19bp7bz,61,40,1|19bp7c0,43,59,0|19i6m3z,43,59,0|19i6m40,61,40,1|19uf9zz,61,40,1|19ufa00,43,59,0|1a0worz,43,59,0|1a0wos0,61,40,1|1ad5cnz,61,40,1|1ad5co0,43,59,0|1ajmrfz,43,59,0|1ajmrg0,61,40,1|1avvfbz,61,40,1|1avvfc0,43,59,0|1b2psrz,43,59,0|1b2pss0,61,40,1|1beygnz,61,40,1|1beygo0,43,59,0|1blfvfz,43,59,0|1blfvg0,61,40,1|1bxojbz,61,40,1|1bxojc0,43,59,0|1c45y3z,43,59,0|1c45y40,61,40,1|1cgelzz,61,40,1|1cgem00,43,59,0|1cmw0rz,43,59,0|1cmw0s0,61,40,1|1cz4onz,61,40,1|1cz4oo0,43,59,0|1d5m3fz,43,59,0|1d5m3g0,61,40,1|1dhurbz,61,40,1|1dhurc0,43,59,0|1doc63z,43,59,0|1doc640,61,40,1|1e0ktzz,61,40,1|1e0ku00,43,59,0|1e7f7fz,43,59,0|1e7f7g0,61,40,1|1ejnvbz,61,40,1|1ejnvc0,43,59,0|1eq5a3z,43,59,0|1eq5a40,61,40,1|1f2dxzz,61,40,1|1f2dy00,43,59,0|1f8vcrz,43,59,0|1f8vcs0,61,40,1|1fl40nz,61,40,1|1fl40o0,43,59,0|1frlffz,43,59,0|1frlfg0,61,40,1|1g3u3bz,61,40,1|1g3u3c0,43,59,0|1gabi3z,43,59,0|1gabi40,61,40,1|1gmk5zz,61,40,1|1gmk600,43,59,0|1gt1krz,43,59,0|1gt1ks0,61,40,1|1h5a8nz,61,40,1|1h5a8o0,43,59,0|1hc4m3z,43,59,0|1hc4m40,61,40,1|1hod9zz,61,40,1|1hoda00,43,59,0|1huuorz,43,59,0|1huuos0,61,40,1|1i73cnz,61,40,1|1i73co0,43,59,0|1idkrfz,43,59,0|1idkrg0,61,40,1|1iptfbz,61,40,1|1iptfc0,43,59,0|1iwau3z,43,59,0|1iwau40,61,40,1|1j8jhzz,61,40,1|1j8ji00,43,59,0|1jf0wrz,43,59,0|1jf0ws0,61,40,1|1jr9knz,61,40,1|1jr9ko0,43,59,0|1jy3y3z,43,59,0|1jy3y40,61,40,1|1kaclzz,61,40,1|1kacm00,43,59,0|1kgu0rz,43,59,0|1kgu0s0,61,40,1|1kt2onz,61,40,1|1kt2oo0,43,59,0|1kzk3fz,43,59,0|1kzk3g0,61,40,1|1lbsrbz,61,40,1|1lbsrc0,43,59,0|1lia63z,43,59,0|1lia640,61,40,1|1luitzz,61,40,1|1luiu00,43,59,0|1m108rz,43,59,0|1m108s0,61,40,1|1md8wnz,61,40,1|1md8wo0,43,59,0|1mjqbfz,43,59,0|1mjqbg0,61,40,1|1mvyzbz,61,40,1|1mvyzc0,43,59,0|1n2tcrz,43,59,0|1n2tcs0,61,40,1|1nf20nz,61,40,1|1nf20o0,43,59,0|1nljffz,43,59,0|1nljfg0,61,40,1|1nxs3bz,61,40,1|1nxs3c0,43,59,0|1o49i3z,43,59,0|1o49i40,61,40,1|1ogi5zz,61,40,1|1ogi600,43,59,0|1omzkrz,43,59,0|1omzks0,61,40,1|1oz88nz,61,40,1|1oz88o0,43,59,0|1p5pnfz,43,59,0|1p5png0,61,40,1|1phybbz,61,40,1|1phybc0,43,59,0|1posorz,43,59,0|1posos0,61,40,1|1q11cnz,61,40,1|1q11co0,43,59,0|1q7irfz,43,59,0|1q7irg0,61,40,1|1qjrfbz,61,40,1|1qjrfc0,43,59,0|1qq8u3z,43,59,0|1qq8u40,61,40,1|1r2hhzz,61,40,1|1r2hi00,43,59,0|1r8ywrz,43,59,0|1r8yws0,61,40,1|1rl7knz,61,40,1|1rl7ko0,43,59,0|1rrozfz,43,59,0|1rrozg0,61,40,1|1s3xnbz,61,40,1|1s3xnc0,43,59,0|1saf23z,43,59,0|1saf240,61,40,1|1smnpzz,61,40,1|1smnq00,43,59,0|1sti3fz,43,59,0|1sti3g0,61,40,1|1t5qrbz,61,40,1|1t5qrc0,43,59,0|1tc863z,43,59,0|1tc8640,61,40,1|1togtzz,61,40,1|1togu00,43,59,0|1tuy8rz,43,59,0|1tuy8s0,61,40,1|1u76wnz,61,40,1|1u76wo0,43,59,0|1udobfz,43,59,0|1udobg0,61,40,1|1upwzbz,61,40,1|1upwzc0,43,59,0|1uwee3z,43,59,0|1uwee40,61,40,1|1v8n1zz,61,40,1|1v8n200,43,59,0|1vf4grz,43,59,0|1vf4gs0,61,40,1|1vrd4nz,61,40,1|1vrd4o0,43,59,0|NaN,43,59,0\",\"America/Tijuana|,0,177,0|-p1u1s1,0,177,0|-p1u1s0,44,62,0|-o0a9w1,44,62,0|-o0a9w0,46,38,0|-m7mhw1,46,38,0|-m7mhw0,44,62,0|-kf64k1,44,62,0|-kf64k0,46,38,0|-k84cg1,46,38,0|-k84cg0,56,62,1|-jyrdw1,56,62,1|-jyrdw0,46,38,0|-eg90g1,46,38,0|-eg90g0,68,62,1|-cq2tg1,68,62,1|-cq2tg0,69,62,1|-clhdw1,69,62,1|-clhdw0,46,38,0|-bcgxs1,46,38,0|-bcgxs0,56,62,1|-axv381,56,62,1|-axv380,46,38,0|-86qf01,46,38,0|-86qf00,56,62,1|-7yt8c1,56,62,1|-7yt8c0,46,38,0|-7o0cc1,46,38,0|-7o0cc0,56,62,1|-7g35o1,56,62,1|-7g35o0,46,38,0|-74xb01,46,38,0|-74xb00,56,62,1|-6x04c1,56,62,1|-6x04c0,46,38,0|-6m78c1,46,38,0|-6m78c0,56,62,1|-6ea1o1,56,62,1|-6ea1o0,46,38,0|-63h5o1,46,38,0|-63h5o0,56,62,1|-5vjz01,56,62,1|-5vjz00,46,38,0|-5kr301,46,38,0|-5kr300,56,62,1|-5ctwc1,56,62,1|-5ctwc0,46,38,0|-5210c1,46,38,0|-5210c0,56,62,1|-4u3to1,56,62,1|-4u3to0,46,38,0|3an53z,46,38,0|3an540,56,62,1|3kd2bz,56,62,1|3kd2c0,46,38,0|3td7rz,46,38,0|3td7s0,56,62,1|4334zz,56,62,1|433500,46,38,0|4cg93z,46,38,0|4cg940,56,62,1|4lt7nz,56,62,1|4lt7o0,46,38,0|4v6brz,46,38,0|4v6bs0,56,62,1|54jabz,56,62,1|54jac0,46,38,0|5dwefz,46,38,0|5dweg0,56,62,1|5n9czz,56,62,1|5n9d00,46,38,0|5wmh3z,46,38,0|5wmh40,56,62,1|65zfnz,56,62,1|65zfo0,46,38,0|6fcjrz,46,38,0|6fcjs0,56,62,1|6p2gzz,56,62,1|6p2h00,46,38,0|6y2mfz,46,38,0|6y2mg0,56,62,1|77sjnz,56,62,1|77sjo0,46,38,0|7h5nrz,46,38,0|7h5ns0,56,62,1|7qimbz,56,62,1|7qimc0,46,38,0|7zvqfz,46,38,0|7zvqg0,56,62,1|898ozz,56,62,1|898p00,46,38,0|8ilt3z,46,38,0|8ilt40,56,62,1|8ryrnz,56,62,1|8ryro0,46,38,0|908zrz,46,38,0|908zs0,56,62,1|9aoubz,56,62,1|9aouc0,46,38,0|9iz2fz,46,38,0|9iz2g0,56,62,1|9trvnz,56,62,1|9trvo0,46,38,0|a1p53z,46,38,0|a1p540,56,62,1|achybz,56,62,1|achyc0,46,38,0|akf7rz,46,38,0|akf7s0,56,62,1|av80zz,56,62,1|av8100,46,38,0|b3i93z,46,38,0|b3i940,56,62,1|bdy3nz,56,62,1|bdy3o0,46,38,0|bm8brz,46,38,0|bm8bs0,56,62,1|bwo6bz,56,62,1|bwo6c0,46,38,0|c4yefz,46,38,0|c4yeg0,56,62,1|cfr7nz,56,62,1|cfr7o0,46,38,0|cnoh3z,46,38,0|cnoh40,56,62,1|cyhabz,56,62,1|cyhac0,46,38,0|d6ejrz,46,38,0|d6ejs0,56,62,1|dh7czz,56,62,1|dh7d00,46,38,0|dphl3z,46,38,0|dphl40,56,62,1|dzxfnz,56,62,1|dzxfo0,46,38,0|e87nrz,46,38,0|e87ns0,56,62,1|einibz,56,62,1|einic0,46,38,0|eqxqfz,46,38,0|eqxqg0,56,62,1|f1dkzz,56,62,1|f1dl00,46,38,0|f9nt3z,46,38,0|f9nt40,56,62,1|fkgmbz,56,62,1|fkgmc0,46,38,0|fsdvrz,46,38,0|fsdvs0,56,62,1|g36ozz,56,62,1|g36p00,46,38,0|gb3yfz,46,38,0|gb3yg0,56,62,1|glwrnz,56,62,1|glwro0,46,38,0|gu6zrz,46,38,0|gu6zs0,56,62,1|h4mubz,56,62,1|h4muc0,46,38,0|hcx2fz,46,38,0|hcx2g0,56,62,1|hncwzz,56,62,1|hncx00,46,38,0|hvn53z,46,38,0|hvn540,56,62,1|i6fybz,56,62,1|i6fyc0,46,38,0|ied7rz,46,38,0|ied7s0,56,62,1|ip60zz,56,62,1|ip6100,46,38,0|ix3afz,46,38,0|ix3ag0,56,62,1|j7w3nz,56,62,1|j7w3o0,46,38,0|jftd3z,46,38,0|jftd40,56,62,1|jqm6bz,56,62,1|jqm6c0,46,38,0|jywefz,46,38,0|jyweg0,56,62,1|k9c8zz,56,62,1|k9c900,46,38,0|khmh3z,46,38,0|khmh40,56,62,1|ks2bnz,56,62,1|ks2bo0,46,38,0|kz9nrz,46,38,0|kz9ns0,56,62,1|lbibnz,56,62,1|lbibo0,46,38,0|lhzqfz,46,38,0|lhzqg0,56,62,1|lu8ebz,56,62,1|lu8ec0,46,38,0|m0pt3z,46,38,0|m0pt40,56,62,1|mcygzz,56,62,1|mcyh00,46,38,0|mjfvrz,46,38,0|mjfvs0,56,62,1|mvojnz,56,62,1|mvojo0,46,38,0|n25yfz,46,38,0|n25yg0,56,62,1|neembz,56,62,1|neemc0,46,38,0|nkw13z,46,38,0|nkw140,56,62,1|nx4ozz,56,62,1|nx4p00,46,38,0|o3z2fz,46,38,0|o3z2g0,56,62,1|og7qbz,56,62,1|og7qc0,46,38,0|omp53z,46,38,0|omp540,56,62,1|oyxszz,56,62,1|oyxt00,46,38,0|p5f7rz,46,38,0|p5f7s0,56,62,1|phnvnz,56,62,1|phnvo0,46,38,0|po5afz,46,38,0|po5ag0,56,62,1|q0dybz,56,62,1|q0dyc0,46,38,0|q6vd3z,46,38,0|q6vd40,56,62,1|qj40zz,56,62,1|qj4100,46,38,0|qpyefz,46,38,0|qpyeg0,56,62,1|r272bz,56,62,1|r272c0,46,38,0|r8oh3z,46,38,0|r8oh40,56,62,1|rkx4zz,56,62,1|rkx500,46,38,0|rrejrz,46,38,0|rrejs0,56,62,1|s3n7nz,56,62,1|s3n7o0,46,38,0|sa4mfz,46,38,0|sa4mg0,56,62,1|smdabz,56,62,1|smdac0,46,38,0|ssup3z,46,38,0|ssup40,56,62,1|t53czz,56,62,1|t53d00,46,38,0|tbkrrz,46,38,0|tbkrs0,56,62,1|tntfnz,56,62,1|tntfo0,46,38,0|tunt3z,46,38,0|tunt40,56,62,1|u6wgzz,56,62,1|u6wh00,46,38,0|uddvrz,46,38,0|uddvs0,56,62,1|upmjnz,56,62,1|upmjo0,46,38,0|uw3yfz,46,38,0|uw3yg0,56,62,1|v8cmbz,56,62,1|v8cmc0,46,38,0|veu13z,46,38,0|veu140,56,62,1|vr2ozz,56,62,1|vr2p00,46,38,0|vxk3rz,46,38,0|vxk3s0,56,62,1|w9srnz,56,62,1|w9sro0,46,38,0|wgn53z,46,38,0|wgn540,56,62,1|wsvszz,56,62,1|wsvt00,46,38,0|wzd7rz,46,38,0|wzd7s0,56,62,1|xblvnz,56,62,1|xblvo0,46,38,0|xi3afz,46,38,0|xi3ag0,56,62,1|xubybz,56,62,1|xubyc0,46,38,0|y0td3z,46,38,0|y0td40,56,62,1|yd20zz,56,62,1|yd2100,46,38,0|yjjfrz,46,38,0|yjjfs0,56,62,1|yvs3nz,56,62,1|yvs3o0,46,38,0|z29ifz,46,38,0|z29ig0,56,62,1|zei6bz,56,62,1|zei6c0,46,38,0|zlcjrz,46,38,0|zlcjs0,56,62,1|zxl7nz,56,62,1|zxl7o0,46,38,0|1042mfz,46,38,0|1042mg0,56,62,1|10gbabz,56,62,1|10gbac0,46,38,0|10msp3z,46,38,0|10msp40,56,62,1|10z1czz,56,62,1|10z1d00,46,38,0|115irrz,46,38,0|115irs0,56,62,1|11hrfnz,56,62,1|11hrfo0,46,38,0|11o8ufz,46,38,0|11o8ug0,56,62,1|120hibz,56,62,1|120hic0,46,38,0|126yx3z,46,38,0|126yx40,56,62,1|12j7kzz,56,62,1|12j7l00,46,38,0|12q1yfz,46,38,0|12q1yg0,56,62,1|132ambz,56,62,1|132amc0,46,38,0|138s13z,46,38,0|138s140,56,62,1|13l0ozz,56,62,1|13l0p00,46,38,0|13ri3rz,46,38,0|13ri3s0,56,62,1|143qrnz,56,62,1|143qro0,46,38,0|14a86fz,46,38,0|14a86g0,56,62,1|14mgubz,56,62,1|14mguc0,46,38,0|14sy93z,46,38,0|14sy940,56,62,1|1556wzz,56,62,1|1556x00,46,38,0|15c1afz,46,38,0|15c1ag0,56,62,1|15o9ybz,56,62,1|15o9yc0,46,38,0|15urd3z,46,38,0|15urd40,56,62,1|16700zz,56,62,1|1670100,46,38,0|16dhfrz,46,38,0|16dhfs0,56,62,1|16pq3nz,56,62,1|16pq3o0,46,38,0|16w7ifz,46,38,0|16w7ig0,56,62,1|178g6bz,56,62,1|178g6c0,46,38,0|17exl3z,46,38,0|17exl40,56,62,1|17r68zz,56,62,1|17r6900,46,38,0|17xnnrz,46,38,0|17xnns0,56,62,1|189wbnz,56,62,1|189wbo0,46,38,0|18gqp3z,46,38,0|18gqp40,56,62,1|18szczz,56,62,1|18szd00,46,38,0|18zgrrz,46,38,0|18zgrs0,56,62,1|19bpfnz,56,62,1|19bpfo0,46,38,0|19i6ufz,46,38,0|19i6ug0,56,62,1|19ufibz,56,62,1|19ufic0,46,38,0|1a0wx3z,46,38,0|1a0wx40,56,62,1|1ad5kzz,56,62,1|1ad5l00,46,38,0|1ajmzrz,46,38,0|1ajmzs0,56,62,1|1avvnnz,56,62,1|1avvno0,46,38,0|1b2q13z,46,38,0|1b2q140,56,62,1|1beyozz,56,62,1|1beyp00,46,38,0|1blg3rz,46,38,0|1blg3s0,56,62,1|1bxornz,56,62,1|1bxoro0,46,38,0|1c466fz,46,38,0|1c466g0,56,62,1|1cgeubz,56,62,1|1cgeuc0,46,38,0|1cmw93z,46,38,0|1cmw940,56,62,1|1cz4wzz,56,62,1|1cz4x00,46,38,0|1d5mbrz,46,38,0|1d5mbs0,56,62,1|1dhuznz,56,62,1|1dhuzo0,46,38,0|1docefz,46,38,0|1doceg0,56,62,1|1e0l2bz,56,62,1|1e0l2c0,46,38,0|1e7ffrz,46,38,0|1e7ffs0,56,62,1|1ejo3nz,56,62,1|1ejo3o0,46,38,0|1eq5ifz,46,38,0|1eq5ig0,56,62,1|1f2e6bz,56,62,1|1f2e6c0,46,38,0|1f8vl3z,46,38,0|1f8vl40,56,62,1|1fl48zz,56,62,1|1fl4900,46,38,0|1frlnrz,46,38,0|1frlns0,56,62,1|1g3ubnz,56,62,1|1g3ubo0,46,38,0|1gabqfz,46,38,0|1gabqg0,56,62,1|1gmkebz,56,62,1|1gmkec0,46,38,0|1gt1t3z,46,38,0|1gt1t40,56,62,1|1h5agzz,56,62,1|1h5ah00,46,38,0|1hc4ufz,46,38,0|1hc4ug0,56,62,1|1hodibz,56,62,1|1hodic0,46,38,0|1huux3z,46,38,0|1huux40,56,62,1|1i73kzz,56,62,1|1i73l00,46,38,0|1idkzrz,46,38,0|1idkzs0,56,62,1|1iptnnz,56,62,1|1iptno0,46,38,0|1iwb2fz,46,38,0|1iwb2g0,56,62,1|1j8jqbz,56,62,1|1j8jqc0,46,38,0|1jf153z,46,38,0|1jf1540,56,62,1|1jr9szz,56,62,1|1jr9t00,46,38,0|1jy46fz,46,38,0|1jy46g0,56,62,1|1kacubz,56,62,1|1kacuc0,46,38,0|1kgu93z,46,38,0|1kgu940,56,62,1|1kt2wzz,56,62,1|1kt2x00,46,38,0|1kzkbrz,46,38,0|1kzkbs0,56,62,1|1lbsznz,56,62,1|1lbszo0,46,38,0|1liaefz,46,38,0|1liaeg0,56,62,1|1luj2bz,56,62,1|1luj2c0,46,38,0|1m10h3z,46,38,0|1m10h40,56,62,1|1md94zz,56,62,1|1md9500,46,38,0|1mjqjrz,46,38,0|1mjqjs0,56,62,1|1mvz7nz,56,62,1|1mvz7o0,46,38,0|1n2tl3z,46,38,0|1n2tl40,56,62,1|1nf28zz,56,62,1|1nf2900,46,38,0|1nljnrz,46,38,0|1nljns0,56,62,1|1nxsbnz,56,62,1|1nxsbo0,46,38,0|1o49qfz,46,38,0|1o49qg0,56,62,1|1ogiebz,56,62,1|1ogiec0,46,38,0|1omzt3z,46,38,0|1omzt40,56,62,1|1oz8gzz,56,62,1|1oz8h00,46,38,0|1p5pvrz,46,38,0|1p5pvs0,56,62,1|1phyjnz,56,62,1|1phyjo0,46,38,0|1posx3z,46,38,0|1posx40,56,62,1|1q11kzz,56,62,1|1q11l00,46,38,0|1q7izrz,46,38,0|1q7izs0,56,62,1|1qjrnnz,56,62,1|1qjrno0,46,38,0|1qq92fz,46,38,0|1qq92g0,56,62,1|1r2hqbz,56,62,1|1r2hqc0,46,38,0|1r8z53z,46,38,0|1r8z540,56,62,1|1rl7szz,56,62,1|1rl7t00,46,38,0|1rrp7rz,46,38,0|1rrp7s0,56,62,1|1s3xvnz,56,62,1|1s3xvo0,46,38,0|1safafz,46,38,0|1safag0,56,62,1|1smnybz,56,62,1|1smnyc0,46,38,0|1stibrz,46,38,0|1stibs0,56,62,1|1t5qznz,56,62,1|1t5qzo0,46,38,0|1tc8efz,46,38,0|1tc8eg0,56,62,1|1toh2bz,56,62,1|1toh2c0,46,38,0|1tuyh3z,46,38,0|1tuyh40,56,62,1|1u774zz,56,62,1|1u77500,46,38,0|1udojrz,46,38,0|1udojs0,56,62,1|1upx7nz,56,62,1|1upx7o0,46,38,0|1uwemfz,46,38,0|1uwemg0,56,62,1|1v8nabz,56,62,1|1v8nac0,46,38,0|1vf4p3z,46,38,0|1vf4p40,56,62,1|1vrdczz,56,62,1|1vrdd00,46,38,0|NaN,46,38,0\",\"America/Toronto|,0,143,0|-1353dat,0,143,0|-1353das,43,59,0|-qzoxw1,43,59,0|-qzoxw0,61,40,1|-qpm201,61,40,1|-qpm200,43,59,0|-qhn4u1,43,59,0|-qhn4u0,61,40,1|-q6w4w1,61,40,1|-q6w4w0,43,59,0|-px5wk1,43,59,0|-px5wk0,61,40,1|-pplww1,61,40,1|-pplww0,43,59,0|-pdpwk1,43,59,0|-pdpwk0,61,40,1|-p7e7c1,61,40,1|-p7e7c0,43,59,0|-ouztw1,43,59,0|-ouztw0,61,40,1|-ooiko1,61,40,1|-ooiko0,43,59,0|-oc9r81,43,59,0|-oc9r80,61,40,1|-o5si01,61,40,1|-o5si00,43,59,0|-ntwn81,43,59,0|-ntwn80,61,40,1|-nmpgo1,61,40,1|-nmpgo0,43,59,0|-nb6kk1,43,59,0|-nb6kk0,61,40,1|-n3ze01,61,40,1|-n3ze00,43,59,0|-msghw1,43,59,0|-msghw0,61,40,1|-ml9bc1,61,40,1|-ml9bc0,43,59,0|-m9qf81,43,59,0|-m9qf80,61,40,1|-m26a01,61,40,1|-m26a00,43,59,0|-lr0ck1,43,59,0|-lr0ck0,61,40,1|-lj38o1,61,40,1|-lj38o0,43,59,0|-l8a9w1,43,59,0|-l8a9w0,61,40,1|-l0d601,61,40,1|-l0d600,43,59,0|-kpk781,43,59,0|-kpk780,61,40,1|-khn3c1,61,40,1|-khn3c0,43,59,0|-k6u4k1,43,59,0|-k6u4k0,61,40,1|-jyx0o1,61,40,1|-jyx0o0,43,59,0|-jnr381,43,59,0|-jnr380,61,40,1|-jg6y01,61,40,1|-jg6y00,43,59,0|-j510k1,43,59,0|-j510k0,61,40,1|-ix3wo1,61,40,1|-ix3wo0,43,59,0|-imaxw1,43,59,0|-imaxw0,61,40,1|-iedu01,61,40,1|-iedu00,43,59,0|-i3kv81,43,59,0|-i3kv80,61,40,1|-hvnrc1,61,40,1|-hvnrc0,43,59,0|-hkusk1,43,59,0|-hkusk0,61,40,1|-hcxoo1,61,40,1|-hcxoo0,43,59,0|-h24pw1,43,59,0|-h24pw0,61,40,1|-gu7m01,61,40,1|-gu7m00,43,59,0|-gjen81,43,59,0|-gjen80,61,40,1|-gbhjc1,61,40,1|-gbhjc0,43,59,0|-g0blw1,43,59,0|-g0blw0,61,40,1|-fsrgo1,61,40,1|-fsrgo0,43,59,0|-fhlj81,43,59,0|-fhlj80,61,40,1|-ek24k1,61,40,1|-ek24k0,70,40,1|-cq2tg1,70,40,1|-cq2tg0,71,40,1|-cnp3c1,71,40,1|-cnp3c0,43,59,0|-ccw4k1,43,59,0|-ccw4k0,61,40,1|-c4z0o1,61,40,1|-c4z0o0,43,59,0|-bu67g1,43,59,0|-bu67g0,61,40,1|-bm93k1,61,40,1|-bm93k0,43,59,0|-bbg4s1,43,59,0|-bbg4s0,61,40,1|-b3j0w1,61,40,1|-b3j0w0,43,59,0|-asq241,43,59,0|-asq240,61,40,1|-ahka81,61,40,1|-ahka80,43,59,0|-a9mv81,43,59,0|-a9mv80,61,40,1|-9yu201,61,40,1|-9yu200,43,59,0|-9qwsk1,43,59,0|-9qwsk0,61,40,1|-9izoo1,61,40,1|-9izoo0,43,59,0|-986pw1,43,59,0|-986pw0,61,40,1|-909m01,61,40,1|-909m00,43,59,0|-8pgn81,43,59,0|-8pgn80,61,40,1|-8hjjc1,61,40,1|-8hjjc0,43,59,0|-86qkk1,43,59,0|-86qkk0,61,40,1|-7ytgo1,61,40,1|-7ytgo0,43,59,0|-7o0hw1,43,59,0|-7o0hw0,61,40,1|-7g3e01,61,40,1|-7g3e00,43,59,0|-74xgk1,43,59,0|-74xgk0,61,40,1|-6x0co1,61,40,1|-6x0co0,43,59,0|-6m7dw1,43,59,0|-6m7dw0,61,40,1|-6cufc1,61,40,1|-6cufc0,43,59,0|-63hb81,43,59,0|-63hb80,61,40,1|-5u4co1,61,40,1|-5u4co0,43,59,0|-5kr8k1,43,59,0|-5kr8k0,61,40,1|-5bea01,61,40,1|-5bea00,43,59,0|-5215w1,43,59,0|-5215w0,61,40,1|-4sb8o1,61,40,1|-4sb8o0,43,59,0|-4iy4k1,43,59,0|-4iy4k0,61,40,1|-49l601,61,40,1|-49l600,43,59,0|-4081w1,43,59,0|-4081w0,61,40,1|-3qv3c1,61,40,1|-3qv3c0,43,59,0|-3hhz81,43,59,0|-3hhz80,61,40,1|-3850o1,61,40,1|-3850o0,43,59,0|-2yrwk1,43,59,0|-2yrwk0,61,40,1|-2pey01,61,40,1|-2pey00,43,59,0|-2g1tw1,43,59,0|-2g1tw0,61,40,1|-26bwo1,61,40,1|-26bwo0,43,59,0|-1xbr81,43,59,0|-1xbr80,61,40,1|-1nlu01,61,40,1|-1nlu00,43,59,0|-1e8pw1,43,59,0|-1e8pw0,61,40,1|-14vrc1,61,40,1|-14vrc0,43,59,0|-vin81,43,59,0|-vin80,61,40,1|-m5oo1,61,40,1|-m5oo0,43,59,0|-cskk1,43,59,0|-cskk0,61,40,1|-3fm01,61,40,1|-3fm00,43,59,0|5xi3z,43,59,0|5xi40,61,40,1|fagnz,61,40,1|fago0,43,59,0|onkrz,43,59,0|onks0,61,40,1|ydhzz,61,40,1|ydi00,43,59,0|17qm3z,43,59,0|17qm40,61,40,1|1h3knz,61,40,1|1h3ko0,43,59,0|1qgorz,43,59,0|1qgos0,61,40,1|1ztnbz,61,40,1|1ztnc0,43,59,0|296rfz,43,59,0|296rg0,61,40,1|2ijpzz,61,40,1|2ijq00,43,59,0|2rwu3z,43,59,0|2rwu40,61,40,1|319snz,61,40,1|319so0,43,59,0|3amwrz,43,59,0|3amws0,61,40,1|3kctzz,61,40,1|3kcu00,43,59,0|3tczfz,43,59,0|3tczg0,61,40,1|432wnz,61,40,1|432wo0,43,59,0|4cg0rz,43,59,0|4cg0s0,61,40,1|4lszbz,61,40,1|4lszc0,43,59,0|4v63fz,43,59,0|4v63g0,61,40,1|54j1zz,61,40,1|54j200,43,59,0|5dw63z,43,59,0|5dw640,61,40,1|5n94nz,61,40,1|5n94o0,43,59,0|5wm8rz,43,59,0|5wm8s0,61,40,1|65z7bz,61,40,1|65z7c0,43,59,0|6fcbfz,43,59,0|6fcbg0,61,40,1|6p28nz,61,40,1|6p28o0,43,59,0|6y2e3z,43,59,0|6y2e40,61,40,1|77sbbz,61,40,1|77sbc0,43,59,0|7h5ffz,43,59,0|7h5fg0,61,40,1|7qidzz,61,40,1|7qie00,43,59,0|7zvi3z,43,59,0|7zvi40,61,40,1|898gnz,61,40,1|898go0,43,59,0|8ilkrz,43,59,0|8ilks0,61,40,1|8ryjbz,61,40,1|8ryjc0,43,59,0|908rfz,43,59,0|908rg0,61,40,1|9aolzz,61,40,1|9aom00,43,59,0|9iyu3z,43,59,0|9iyu40,61,40,1|9trnbz,61,40,1|9trnc0,43,59,0|a1owrz,43,59,0|a1ows0,61,40,1|achpzz,61,40,1|achq00,43,59,0|akezfz,43,59,0|akezg0,61,40,1|av7snz,61,40,1|av7so0,43,59,0|b3i0rz,43,59,0|b3i0s0,61,40,1|bdxvbz,61,40,1|bdxvc0,43,59,0|bm83fz,43,59,0|bm83g0,61,40,1|bwnxzz,61,40,1|bwny00,43,59,0|c4y63z,43,59,0|c4y640,61,40,1|cfqzbz,61,40,1|cfqzc0,43,59,0|cno8rz,43,59,0|cno8s0,61,40,1|cyh1zz,61,40,1|cyh200,43,59,0|d6ebfz,43,59,0|d6ebg0,61,40,1|dh74nz,61,40,1|dh74o0,43,59,0|dphcrz,43,59,0|dphcs0,61,40,1|dzx7bz,61,40,1|dzx7c0,43,59,0|e87ffz,43,59,0|e87fg0,61,40,1|ein9zz,61,40,1|eina00,43,59,0|eqxi3z,43,59,0|eqxi40,61,40,1|f1dcnz,61,40,1|f1dco0,43,59,0|f9nkrz,43,59,0|f9nks0,61,40,1|fkgdzz,61,40,1|fkge00,43,59,0|fsdnfz,43,59,0|fsdng0,61,40,1|g36gnz,61,40,1|g36go0,43,59,0|gb3q3z,43,59,0|gb3q40,61,40,1|glwjbz,61,40,1|glwjc0,43,59,0|gu6rfz,43,59,0|gu6rg0,61,40,1|h4mlzz,61,40,1|h4mm00,43,59,0|hcwu3z,43,59,0|hcwu40,61,40,1|hnconz,61,40,1|hncoo0,43,59,0|hvmwrz,43,59,0|hvmws0,61,40,1|i6fpzz,61,40,1|i6fq00,43,59,0|ieczfz,43,59,0|ieczg0,61,40,1|ip5snz,61,40,1|ip5so0,43,59,0|ix323z,43,59,0|ix3240,61,40,1|j7vvbz,61,40,1|j7vvc0,43,59,0|jeq8rz,43,59,0|jeq8s0,61,40,1|jqywnz,61,40,1|jqywo0,43,59,0|jxgbfz,43,59,0|jxgbg0,61,40,1|k9ozbz,61,40,1|k9ozc0,43,59,0|kg6e3z,43,59,0|kg6e40,61,40,1|ksf1zz,61,40,1|ksf200,43,59,0|kz9ffz,43,59,0|kz9fg0,61,40,1|lbi3bz,61,40,1|lbi3c0,43,59,0|lhzi3z,43,59,0|lhzi40,61,40,1|lu85zz,61,40,1|lu8600,43,59,0|m0pkrz,43,59,0|m0pks0,61,40,1|mcy8nz,61,40,1|mcy8o0,43,59,0|mjfnfz,43,59,0|mjfng0,61,40,1|mvobbz,61,40,1|mvobc0,43,59,0|n25q3z,43,59,0|n25q40,61,40,1|needzz,61,40,1|neee00,43,59,0|nkvsrz,43,59,0|nkvss0,61,40,1|nx4gnz,61,40,1|nx4go0,43,59,0|o3yu3z,43,59,0|o3yu40,61,40,1|og7hzz,61,40,1|og7i00,43,59,0|omowrz,43,59,0|omows0,61,40,1|oyxknz,61,40,1|oyxko0,43,59,0|p5ezfz,43,59,0|p5ezg0,61,40,1|phnnbz,61,40,1|phnnc0,43,59,0|po523z,43,59,0|po5240,61,40,1|q0dpzz,61,40,1|q0dq00,43,59,0|q6v4rz,43,59,0|q6v4s0,61,40,1|qj3snz,61,40,1|qj3so0,43,59,0|qpy63z,43,59,0|qpy640,61,40,1|r26tzz,61,40,1|r26u00,43,59,0|r8o8rz,43,59,0|r8o8s0,61,40,1|rkwwnz,61,40,1|rkwwo0,43,59,0|rrebfz,43,59,0|rrebg0,61,40,1|s3mzbz,61,40,1|s3mzc0,43,59,0|sa4e3z,43,59,0|sa4e40,61,40,1|smd1zz,61,40,1|smd200,43,59,0|ssugrz,43,59,0|ssugs0,61,40,1|t534nz,61,40,1|t534o0,43,59,0|tbkjfz,43,59,0|tbkjg0,61,40,1|tnt7bz,61,40,1|tnt7c0,43,59,0|tunkrz,43,59,0|tunks0,61,40,1|u6w8nz,61,40,1|u6w8o0,43,59,0|uddnfz,43,59,0|uddng0,61,40,1|upmbbz,61,40,1|upmbc0,43,59,0|uw3q3z,43,59,0|uw3q40,61,40,1|v8cdzz,61,40,1|v8ce00,43,59,0|vetsrz,43,59,0|vetss0,61,40,1|vr2gnz,61,40,1|vr2go0,43,59,0|vxjvfz,43,59,0|vxjvg0,61,40,1|w9sjbz,61,40,1|w9sjc0,43,59,0|wgmwrz,43,59,0|wgmws0,61,40,1|wsvknz,61,40,1|wsvko0,43,59,0|wzczfz,43,59,0|wzczg0,61,40,1|xblnbz,61,40,1|xblnc0,43,59,0|xi323z,43,59,0|xi3240,61,40,1|xubpzz,61,40,1|xubq00,43,59,0|y0t4rz,43,59,0|y0t4s0,61,40,1|yd1snz,61,40,1|yd1so0,43,59,0|yjj7fz,43,59,0|yjj7g0,61,40,1|yvrvbz,61,40,1|yvrvc0,43,59,0|z29a3z,43,59,0|z29a40,61,40,1|zehxzz,61,40,1|zehy00,43,59,0|zlcbfz,43,59,0|zlcbg0,61,40,1|zxkzbz,61,40,1|zxkzc0,43,59,0|1042e3z,43,59,0|1042e40,61,40,1|10gb1zz,61,40,1|10gb200,43,59,0|10msgrz,43,59,0|10msgs0,61,40,1|10z14nz,61,40,1|10z14o0,43,59,0|115ijfz,43,59,0|115ijg0,61,40,1|11hr7bz,61,40,1|11hr7c0,43,59,0|11o8m3z,43,59,0|11o8m40,61,40,1|120h9zz,61,40,1|120ha00,43,59,0|126yorz,43,59,0|126yos0,61,40,1|12j7cnz,61,40,1|12j7co0,43,59,0|12q1q3z,43,59,0|12q1q40,61,40,1|132adzz,61,40,1|132ae00,43,59,0|138rsrz,43,59,0|138rss0,61,40,1|13l0gnz,61,40,1|13l0go0,43,59,0|13rhvfz,43,59,0|13rhvg0,61,40,1|143qjbz,61,40,1|143qjc0,43,59,0|14a7y3z,43,59,0|14a7y40,61,40,1|14mglzz,61,40,1|14mgm00,43,59,0|14sy0rz,43,59,0|14sy0s0,61,40,1|1556onz,61,40,1|1556oo0,43,59,0|15c123z,43,59,0|15c1240,61,40,1|15o9pzz,61,40,1|15o9q00,43,59,0|15ur4rz,43,59,0|15ur4s0,61,40,1|166zsnz,61,40,1|166zso0,43,59,0|16dh7fz,43,59,0|16dh7g0,61,40,1|16ppvbz,61,40,1|16ppvc0,43,59,0|16w7a3z,43,59,0|16w7a40,61,40,1|178fxzz,61,40,1|178fy00,43,59,0|17excrz,43,59,0|17excs0,61,40,1|17r60nz,61,40,1|17r60o0,43,59,0|17xnffz,43,59,0|17xnfg0,61,40,1|189w3bz,61,40,1|189w3c0,43,59,0|18gqgrz,43,59,0|18gqgs0,61,40,1|18sz4nz,61,40,1|18sz4o0,43,59,0|18zgjfz,43,59,0|18zgjg0,61,40,1|19bp7bz,61,40,1|19bp7c0,43,59,0|19i6m3z,43,59,0|19i6m40,61,40,1|19uf9zz,61,40,1|19ufa00,43,59,0|1a0worz,43,59,0|1a0wos0,61,40,1|1ad5cnz,61,40,1|1ad5co0,43,59,0|1ajmrfz,43,59,0|1ajmrg0,61,40,1|1avvfbz,61,40,1|1avvfc0,43,59,0|1b2psrz,43,59,0|1b2pss0,61,40,1|1beygnz,61,40,1|1beygo0,43,59,0|1blfvfz,43,59,0|1blfvg0,61,40,1|1bxojbz,61,40,1|1bxojc0,43,59,0|1c45y3z,43,59,0|1c45y40,61,40,1|1cgelzz,61,40,1|1cgem00,43,59,0|1cmw0rz,43,59,0|1cmw0s0,61,40,1|1cz4onz,61,40,1|1cz4oo0,43,59,0|1d5m3fz,43,59,0|1d5m3g0,61,40,1|1dhurbz,61,40,1|1dhurc0,43,59,0|1doc63z,43,59,0|1doc640,61,40,1|1e0ktzz,61,40,1|1e0ku00,43,59,0|1e7f7fz,43,59,0|1e7f7g0,61,40,1|1ejnvbz,61,40,1|1ejnvc0,43,59,0|1eq5a3z,43,59,0|1eq5a40,61,40,1|1f2dxzz,61,40,1|1f2dy00,43,59,0|1f8vcrz,43,59,0|1f8vcs0,61,40,1|1fl40nz,61,40,1|1fl40o0,43,59,0|1frlffz,43,59,0|1frlfg0,61,40,1|1g3u3bz,61,40,1|1g3u3c0,43,59,0|1gabi3z,43,59,0|1gabi40,61,40,1|1gmk5zz,61,40,1|1gmk600,43,59,0|1gt1krz,43,59,0|1gt1ks0,61,40,1|1h5a8nz,61,40,1|1h5a8o0,43,59,0|1hc4m3z,43,59,0|1hc4m40,61,40,1|1hod9zz,61,40,1|1hoda00,43,59,0|1huuorz,43,59,0|1huuos0,61,40,1|1i73cnz,61,40,1|1i73co0,43,59,0|1idkrfz,43,59,0|1idkrg0,61,40,1|1iptfbz,61,40,1|1iptfc0,43,59,0|1iwau3z,43,59,0|1iwau40,61,40,1|1j8jhzz,61,40,1|1j8ji00,43,59,0|1jf0wrz,43,59,0|1jf0ws0,61,40,1|1jr9knz,61,40,1|1jr9ko0,43,59,0|1jy3y3z,43,59,0|1jy3y40,61,40,1|1kaclzz,61,40,1|1kacm00,43,59,0|1kgu0rz,43,59,0|1kgu0s0,61,40,1|1kt2onz,61,40,1|1kt2oo0,43,59,0|1kzk3fz,43,59,0|1kzk3g0,61,40,1|1lbsrbz,61,40,1|1lbsrc0,43,59,0|1lia63z,43,59,0|1lia640,61,40,1|1luitzz,61,40,1|1luiu00,43,59,0|1m108rz,43,59,0|1m108s0,61,40,1|1md8wnz,61,40,1|1md8wo0,43,59,0|1mjqbfz,43,59,0|1mjqbg0,61,40,1|1mvyzbz,61,40,1|1mvyzc0,43,59,0|1n2tcrz,43,59,0|1n2tcs0,61,40,1|1nf20nz,61,40,1|1nf20o0,43,59,0|1nljffz,43,59,0|1nljfg0,61,40,1|1nxs3bz,61,40,1|1nxs3c0,43,59,0|1o49i3z,43,59,0|1o49i40,61,40,1|1ogi5zz,61,40,1|1ogi600,43,59,0|1omzkrz,43,59,0|1omzks0,61,40,1|1oz88nz,61,40,1|1oz88o0,43,59,0|1p5pnfz,43,59,0|1p5png0,61,40,1|1phybbz,61,40,1|1phybc0,43,59,0|1posorz,43,59,0|1posos0,61,40,1|1q11cnz,61,40,1|1q11co0,43,59,0|1q7irfz,43,59,0|1q7irg0,61,40,1|1qjrfbz,61,40,1|1qjrfc0,43,59,0|1qq8u3z,43,59,0|1qq8u40,61,40,1|1r2hhzz,61,40,1|1r2hi00,43,59,0|1r8ywrz,43,59,0|1r8yws0,61,40,1|1rl7knz,61,40,1|1rl7ko0,43,59,0|1rrozfz,43,59,0|1rrozg0,61,40,1|1s3xnbz,61,40,1|1s3xnc0,43,59,0|1saf23z,43,59,0|1saf240,61,40,1|1smnpzz,61,40,1|1smnq00,43,59,0|1sti3fz,43,59,0|1sti3g0,61,40,1|1t5qrbz,61,40,1|1t5qrc0,43,59,0|1tc863z,43,59,0|1tc8640,61,40,1|1togtzz,61,40,1|1togu00,43,59,0|1tuy8rz,43,59,0|1tuy8s0,61,40,1|1u76wnz,61,40,1|1u76wo0,43,59,0|1udobfz,43,59,0|1udobg0,61,40,1|1upwzbz,61,40,1|1upwzc0,43,59,0|1uwee3z,43,59,0|1uwee40,61,40,1|1v8n1zz,61,40,1|1v8n200,43,59,0|1vf4grz,43,59,0|1vf4gs0,61,40,1|1vrd4nz,61,40,1|1vrd4o0,43,59,0|NaN,43,59,0\",\"America/Tortola|,0,39,0|-10xhp3c,0,39,0|-10xhp3b,31,40,0|-efsnk1,31,40,0|-efsnk0,32,41,1|-cq2tg1,32,41,1|-cq2tg0,33,41,1|-cnp641,33,41,1|-cnp640,31,40,0|NaN,31,40,0\",\"America/Vancouver|,0,178,0|-18vrvv9,0,178,0|-18vrvv8,46,38,0|-qzopk1,46,38,0|-qzopk0,56,62,1|-qplto1,56,62,1|-qplto0,46,38,0|-ek1w81,46,38,0|-ek1w80,68,62,1|-cq2tg1,68,62,1|-cq2tg0,69,62,1|-cnov01,69,62,1|-cnov00,46,38,0|-ccvw81,46,38,0|-ccvw80,56,62,1|-c4ysc1,56,62,1|-c4ysc0,46,38,0|-bu5tk1,46,38,0|-bu5tk0,56,62,1|-bm8po1,56,62,1|-bm8po0,46,38,0|-bbfqw1,46,38,0|-bbfqw0,56,62,1|-b3in01,56,62,1|-b3in00,46,38,0|-aspo81,46,38,0|-aspo80,56,62,1|-akskc1,56,62,1|-akskc0,46,38,0|-a9mmw1,46,38,0|-a9mmw0,56,62,1|-a22ho1,56,62,1|-a22ho0,46,38,0|-9qwk81,46,38,0|-9qwk80,56,62,1|-9izgc1,56,62,1|-9izgc0,46,38,0|-986hk1,46,38,0|-986hk0,56,62,1|-909do1,56,62,1|-909do0,46,38,0|-8pgew1,46,38,0|-8pgew0,56,62,1|-8hjb01,56,62,1|-8hjb00,46,38,0|-86qc81,46,38,0|-86qc80,56,62,1|-7yt8c1,56,62,1|-7yt8c0,46,38,0|-7o09k1,46,38,0|-7o09k0,56,62,1|-7g35o1,56,62,1|-7g35o0,46,38,0|-74x881,46,38,0|-74x880,56,62,1|-6x04c1,56,62,1|-6x04c0,46,38,0|-6m75k1,46,38,0|-6m75k0,56,62,1|-6ea1o1,56,62,1|-6ea1o0,46,38,0|-63h2w1,46,38,0|-63h2w0,56,62,1|-5vjz01,56,62,1|-5vjz00,46,38,0|-5kr081,46,38,0|-5kr080,56,62,1|-5ctwc1,56,62,1|-5ctwc0,46,38,0|-520xk1,46,38,0|-520xk0,56,62,1|-4u3to1,56,62,1|-4u3to0,46,38,0|-4ixw81,46,38,0|-4ixw80,56,62,1|-4bdr01,56,62,1|-4bdr00,46,38,0|-407tk1,46,38,0|-407tk0,56,62,1|-3quv01,56,62,1|-3quv00,46,38,0|-3hhqw1,46,38,0|-3hhqw0,56,62,1|-384sc1,56,62,1|-384sc0,46,38,0|-2yro81,46,38,0|-2yro80,56,62,1|-2pepo1,56,62,1|-2pepo0,46,38,0|-2g1lk1,46,38,0|-2g1lk0,56,62,1|-26boc1,56,62,1|-26boc0,46,38,0|-1xbiw1,46,38,0|-1xbiw0,56,62,1|-1nllo1,56,62,1|-1nllo0,46,38,0|-1e8hk1,46,38,0|-1e8hk0,56,62,1|-14vj01,56,62,1|-14vj00,46,38,0|-view1,46,38,0|-view0,56,62,1|-m5gc1,56,62,1|-m5gc0,46,38,0|-csc81,46,38,0|-csc80,56,62,1|-3fdo1,56,62,1|-3fdo0,46,38,0|5xqfz,46,38,0|5xqg0,56,62,1|faozz,56,62,1|fap00,46,38,0|ont3z,46,38,0|ont40,56,62,1|ydqbz,56,62,1|ydqc0,46,38,0|17qufz,46,38,0|17qug0,56,62,1|1h3szz,56,62,1|1h3t00,46,38,0|1qgx3z,46,38,0|1qgx40,56,62,1|1ztvnz,56,62,1|1ztvo0,46,38,0|296zrz,46,38,0|296zs0,56,62,1|2ijybz,56,62,1|2ijyc0,46,38,0|2rx2fz,46,38,0|2rx2g0,56,62,1|31a0zz,56,62,1|31a100,46,38,0|3an53z,46,38,0|3an540,56,62,1|3kd2bz,56,62,1|3kd2c0,46,38,0|3td7rz,46,38,0|3td7s0,56,62,1|4334zz,56,62,1|433500,46,38,0|4cg93z,46,38,0|4cg940,56,62,1|4lt7nz,56,62,1|4lt7o0,46,38,0|4v6brz,46,38,0|4v6bs0,56,62,1|54jabz,56,62,1|54jac0,46,38,0|5dwefz,46,38,0|5dweg0,56,62,1|5n9czz,56,62,1|5n9d00,46,38,0|5wmh3z,46,38,0|5wmh40,56,62,1|65zfnz,56,62,1|65zfo0,46,38,0|6fcjrz,46,38,0|6fcjs0,56,62,1|6p2gzz,56,62,1|6p2h00,46,38,0|6y2mfz,46,38,0|6y2mg0,56,62,1|77sjnz,56,62,1|77sjo0,46,38,0|7h5nrz,46,38,0|7h5ns0,56,62,1|7qimbz,56,62,1|7qimc0,46,38,0|7zvqfz,46,38,0|7zvqg0,56,62,1|898ozz,56,62,1|898p00,46,38,0|8ilt3z,46,38,0|8ilt40,56,62,1|8ryrnz,56,62,1|8ryro0,46,38,0|908zrz,46,38,0|908zs0,56,62,1|9aoubz,56,62,1|9aouc0,46,38,0|9iz2fz,46,38,0|9iz2g0,56,62,1|9trvnz,56,62,1|9trvo0,46,38,0|a1p53z,46,38,0|a1p540,56,62,1|achybz,56,62,1|achyc0,46,38,0|akf7rz,46,38,0|akf7s0,56,62,1|av80zz,56,62,1|av8100,46,38,0|b3i93z,46,38,0|b3i940,56,62,1|bdy3nz,56,62,1|bdy3o0,46,38,0|bm8brz,46,38,0|bm8bs0,56,62,1|bwo6bz,56,62,1|bwo6c0,46,38,0|c4yefz,46,38,0|c4yeg0,56,62,1|cfr7nz,56,62,1|cfr7o0,46,38,0|cnoh3z,46,38,0|cnoh40,56,62,1|cyhabz,56,62,1|cyhac0,46,38,0|d6ejrz,46,38,0|d6ejs0,56,62,1|dh7czz,56,62,1|dh7d00,46,38,0|dphl3z,46,38,0|dphl40,56,62,1|dzxfnz,56,62,1|dzxfo0,46,38,0|e87nrz,46,38,0|e87ns0,56,62,1|einibz,56,62,1|einic0,46,38,0|eqxqfz,46,38,0|eqxqg0,56,62,1|f1dkzz,56,62,1|f1dl00,46,38,0|f9nt3z,46,38,0|f9nt40,56,62,1|fkgmbz,56,62,1|fkgmc0,46,38,0|fsdvrz,46,38,0|fsdvs0,56,62,1|g36ozz,56,62,1|g36p00,46,38,0|gb3yfz,46,38,0|gb3yg0,56,62,1|glwrnz,56,62,1|glwro0,46,38,0|gu6zrz,46,38,0|gu6zs0,56,62,1|h4mubz,56,62,1|h4muc0,46,38,0|hcx2fz,46,38,0|hcx2g0,56,62,1|hncwzz,56,62,1|hncx00,46,38,0|hvn53z,46,38,0|hvn540,56,62,1|i6fybz,56,62,1|i6fyc0,46,38,0|ied7rz,46,38,0|ied7s0,56,62,1|ip60zz,56,62,1|ip6100,46,38,0|ix3afz,46,38,0|ix3ag0,56,62,1|j7w3nz,56,62,1|j7w3o0,46,38,0|jeqh3z,46,38,0|jeqh40,56,62,1|jqz4zz,56,62,1|jqz500,46,38,0|jxgjrz,46,38,0|jxgjs0,56,62,1|k9p7nz,56,62,1|k9p7o0,46,38,0|kg6mfz,46,38,0|kg6mg0,56,62,1|ksfabz,56,62,1|ksfac0,46,38,0|kz9nrz,46,38,0|kz9ns0,56,62,1|lbibnz,56,62,1|lbibo0,46,38,0|lhzqfz,46,38,0|lhzqg0,56,62,1|lu8ebz,56,62,1|lu8ec0,46,38,0|m0pt3z,46,38,0|m0pt40,56,62,1|mcygzz,56,62,1|mcyh00,46,38,0|mjfvrz,46,38,0|mjfvs0,56,62,1|mvojnz,56,62,1|mvojo0,46,38,0|n25yfz,46,38,0|n25yg0,56,62,1|neembz,56,62,1|neemc0,46,38,0|nkw13z,46,38,0|nkw140,56,62,1|nx4ozz,56,62,1|nx4p00,46,38,0|o3z2fz,46,38,0|o3z2g0,56,62,1|og7qbz,56,62,1|og7qc0,46,38,0|omp53z,46,38,0|omp540,56,62,1|oyxszz,56,62,1|oyxt00,46,38,0|p5f7rz,46,38,0|p5f7s0,56,62,1|phnvnz,56,62,1|phnvo0,46,38,0|po5afz,46,38,0|po5ag0,56,62,1|q0dybz,56,62,1|q0dyc0,46,38,0|q6vd3z,46,38,0|q6vd40,56,62,1|qj40zz,56,62,1|qj4100,46,38,0|qpyefz,46,38,0|qpyeg0,56,62,1|r272bz,56,62,1|r272c0,46,38,0|r8oh3z,46,38,0|r8oh40,56,62,1|rkx4zz,56,62,1|rkx500,46,38,0|rrejrz,46,38,0|rrejs0,56,62,1|s3n7nz,56,62,1|s3n7o0,46,38,0|sa4mfz,46,38,0|sa4mg0,56,62,1|smdabz,56,62,1|smdac0,46,38,0|ssup3z,46,38,0|ssup40,56,62,1|t53czz,56,62,1|t53d00,46,38,0|tbkrrz,46,38,0|tbkrs0,56,62,1|tntfnz,56,62,1|tntfo0,46,38,0|tunt3z,46,38,0|tunt40,56,62,1|u6wgzz,56,62,1|u6wh00,46,38,0|uddvrz,46,38,0|uddvs0,56,62,1|upmjnz,56,62,1|upmjo0,46,38,0|uw3yfz,46,38,0|uw3yg0,56,62,1|v8cmbz,56,62,1|v8cmc0,46,38,0|veu13z,46,38,0|veu140,56,62,1|vr2ozz,56,62,1|vr2p00,46,38,0|vxk3rz,46,38,0|vxk3s0,56,62,1|w9srnz,56,62,1|w9sro0,46,38,0|wgn53z,46,38,0|wgn540,56,62,1|wsvszz,56,62,1|wsvt00,46,38,0|wzd7rz,46,38,0|wzd7s0,56,62,1|xblvnz,56,62,1|xblvo0,46,38,0|xi3afz,46,38,0|xi3ag0,56,62,1|xubybz,56,62,1|xubyc0,46,38,0|y0td3z,46,38,0|y0td40,56,62,1|yd20zz,56,62,1|yd2100,46,38,0|yjjfrz,46,38,0|yjjfs0,56,62,1|yvs3nz,56,62,1|yvs3o0,46,38,0|z29ifz,46,38,0|z29ig0,56,62,1|zei6bz,56,62,1|zei6c0,46,38,0|zlcjrz,46,38,0|zlcjs0,56,62,1|zxl7nz,56,62,1|zxl7o0,46,38,0|1042mfz,46,38,0|1042mg0,56,62,1|10gbabz,56,62,1|10gbac0,46,38,0|10msp3z,46,38,0|10msp40,56,62,1|10z1czz,56,62,1|10z1d00,46,38,0|115irrz,46,38,0|115irs0,56,62,1|11hrfnz,56,62,1|11hrfo0,46,38,0|11o8ufz,46,38,0|11o8ug0,56,62,1|120hibz,56,62,1|120hic0,46,38,0|126yx3z,46,38,0|126yx40,56,62,1|12j7kzz,56,62,1|12j7l00,46,38,0|12q1yfz,46,38,0|12q1yg0,56,62,1|132ambz,56,62,1|132amc0,46,38,0|138s13z,46,38,0|138s140,56,62,1|13l0ozz,56,62,1|13l0p00,46,38,0|13ri3rz,46,38,0|13ri3s0,56,62,1|143qrnz,56,62,1|143qro0,46,38,0|14a86fz,46,38,0|14a86g0,56,62,1|14mgubz,56,62,1|14mguc0,46,38,0|14sy93z,46,38,0|14sy940,56,62,1|1556wzz,56,62,1|1556x00,46,38,0|15c1afz,46,38,0|15c1ag0,56,62,1|15o9ybz,56,62,1|15o9yc0,46,38,0|15urd3z,46,38,0|15urd40,56,62,1|16700zz,56,62,1|1670100,46,38,0|16dhfrz,46,38,0|16dhfs0,56,62,1|16pq3nz,56,62,1|16pq3o0,46,38,0|16w7ifz,46,38,0|16w7ig0,56,62,1|178g6bz,56,62,1|178g6c0,46,38,0|17exl3z,46,38,0|17exl40,56,62,1|17r68zz,56,62,1|17r6900,46,38,0|17xnnrz,46,38,0|17xnns0,56,62,1|189wbnz,56,62,1|189wbo0,46,38,0|18gqp3z,46,38,0|18gqp40,56,62,1|18szczz,56,62,1|18szd00,46,38,0|18zgrrz,46,38,0|18zgrs0,56,62,1|19bpfnz,56,62,1|19bpfo0,46,38,0|19i6ufz,46,38,0|19i6ug0,56,62,1|19ufibz,56,62,1|19ufic0,46,38,0|1a0wx3z,46,38,0|1a0wx40,56,62,1|1ad5kzz,56,62,1|1ad5l00,46,38,0|1ajmzrz,46,38,0|1ajmzs0,56,62,1|1avvnnz,56,62,1|1avvno0,46,38,0|1b2q13z,46,38,0|1b2q140,56,62,1|1beyozz,56,62,1|1beyp00,46,38,0|1blg3rz,46,38,0|1blg3s0,56,62,1|1bxornz,56,62,1|1bxoro0,46,38,0|1c466fz,46,38,0|1c466g0,56,62,1|1cgeubz,56,62,1|1cgeuc0,46,38,0|1cmw93z,46,38,0|1cmw940,56,62,1|1cz4wzz,56,62,1|1cz4x00,46,38,0|1d5mbrz,46,38,0|1d5mbs0,56,62,1|1dhuznz,56,62,1|1dhuzo0,46,38,0|1docefz,46,38,0|1doceg0,56,62,1|1e0l2bz,56,62,1|1e0l2c0,46,38,0|1e7ffrz,46,38,0|1e7ffs0,56,62,1|1ejo3nz,56,62,1|1ejo3o0,46,38,0|1eq5ifz,46,38,0|1eq5ig0,56,62,1|1f2e6bz,56,62,1|1f2e6c0,46,38,0|1f8vl3z,46,38,0|1f8vl40,56,62,1|1fl48zz,56,62,1|1fl4900,46,38,0|1frlnrz,46,38,0|1frlns0,56,62,1|1g3ubnz,56,62,1|1g3ubo0,46,38,0|1gabqfz,46,38,0|1gabqg0,56,62,1|1gmkebz,56,62,1|1gmkec0,46,38,0|1gt1t3z,46,38,0|1gt1t40,56,62,1|1h5agzz,56,62,1|1h5ah00,46,38,0|1hc4ufz,46,38,0|1hc4ug0,56,62,1|1hodibz,56,62,1|1hodic0,46,38,0|1huux3z,46,38,0|1huux40,56,62,1|1i73kzz,56,62,1|1i73l00,46,38,0|1idkzrz,46,38,0|1idkzs0,56,62,1|1iptnnz,56,62,1|1iptno0,46,38,0|1iwb2fz,46,38,0|1iwb2g0,56,62,1|1j8jqbz,56,62,1|1j8jqc0,46,38,0|1jf153z,46,38,0|1jf1540,56,62,1|1jr9szz,56,62,1|1jr9t00,46,38,0|1jy46fz,46,38,0|1jy46g0,56,62,1|1kacubz,56,62,1|1kacuc0,46,38,0|1kgu93z,46,38,0|1kgu940,56,62,1|1kt2wzz,56,62,1|1kt2x00,46,38,0|1kzkbrz,46,38,0|1kzkbs0,56,62,1|1lbsznz,56,62,1|1lbszo0,46,38,0|1liaefz,46,38,0|1liaeg0,56,62,1|1luj2bz,56,62,1|1luj2c0,46,38,0|1m10h3z,46,38,0|1m10h40,56,62,1|1md94zz,56,62,1|1md9500,46,38,0|1mjqjrz,46,38,0|1mjqjs0,56,62,1|1mvz7nz,56,62,1|1mvz7o0,46,38,0|1n2tl3z,46,38,0|1n2tl40,56,62,1|1nf28zz,56,62,1|1nf2900,46,38,0|1nljnrz,46,38,0|1nljns0,56,62,1|1nxsbnz,56,62,1|1nxsbo0,46,38,0|1o49qfz,46,38,0|1o49qg0,56,62,1|1ogiebz,56,62,1|1ogiec0,46,38,0|1omzt3z,46,38,0|1omzt40,56,62,1|1oz8gzz,56,62,1|1oz8h00,46,38,0|1p5pvrz,46,38,0|1p5pvs0,56,62,1|1phyjnz,56,62,1|1phyjo0,46,38,0|1posx3z,46,38,0|1posx40,56,62,1|1q11kzz,56,62,1|1q11l00,46,38,0|1q7izrz,46,38,0|1q7izs0,56,62,1|1qjrnnz,56,62,1|1qjrno0,46,38,0|1qq92fz,46,38,0|1qq92g0,56,62,1|1r2hqbz,56,62,1|1r2hqc0,46,38,0|1r8z53z,46,38,0|1r8z540,56,62,1|1rl7szz,56,62,1|1rl7t00,46,38,0|1rrp7rz,46,38,0|1rrp7s0,56,62,1|1s3xvnz,56,62,1|1s3xvo0,46,38,0|1safafz,46,38,0|1safag0,56,62,1|1smnybz,56,62,1|1smnyc0,46,38,0|1stibrz,46,38,0|1stibs0,56,62,1|1t5qznz,56,62,1|1t5qzo0,46,38,0|1tc8efz,46,38,0|1tc8eg0,56,62,1|1toh2bz,56,62,1|1toh2c0,46,38,0|1tuyh3z,46,38,0|1tuyh40,56,62,1|1u774zz,56,62,1|1u77500,46,38,0|1udojrz,46,38,0|1udojs0,56,62,1|1upx7nz,56,62,1|1upx7o0,46,38,0|1uwemfz,46,38,0|1uwemg0,56,62,1|1v8nabz,56,62,1|1v8nac0,46,38,0|1vf4p3z,46,38,0|1vf4p40,56,62,1|1vrdczz,56,62,1|1vrdd00,46,38,0|NaN,46,38,0\",\"America/Whitehorse|,0,179,0|-1079tnp,0,179,0|-1079tno,35,35,0|-qzoms1,35,35,0|-qzoms0,64,38,1|-qplqw1,64,38,1|-qplqw0,35,35,0|-qess41,35,35,0|-qess40,64,38,1|-q6kps1,64,38,1|-q6kps0,35,35,0|-ek1tg1,35,35,0|-ek1tg0,65,38,1|-cq2tg1,65,38,1|-cq2tg0,66,38,1|-cnos81,66,38,1|-cnos80,35,35,0|-2g1oc1,35,35,0|-2g1oc0,67,62,1|-26boc1,67,62,1|-26boc0,35,35,0|-1cspo1,35,35,0|-1cspo0,46,38,0|5dwefz,46,38,0|5dweg0,56,62,1|5n9czz,56,62,1|5n9d00,46,38,0|5wmh3z,46,38,0|5wmh40,56,62,1|65zfnz,56,62,1|65zfo0,46,38,0|6fcjrz,46,38,0|6fcjs0,56,62,1|6p2gzz,56,62,1|6p2h00,46,38,0|6y2mfz,46,38,0|6y2mg0,56,62,1|77sjnz,56,62,1|77sjo0,46,38,0|7h5nrz,46,38,0|7h5ns0,56,62,1|7qimbz,56,62,1|7qimc0,46,38,0|7zvqfz,46,38,0|7zvqg0,56,62,1|898ozz,56,62,1|898p00,46,38,0|8ilt3z,46,38,0|8ilt40,56,62,1|8ryrnz,56,62,1|8ryro0,46,38,0|908zrz,46,38,0|908zs0,56,62,1|9aoubz,56,62,1|9aouc0,46,38,0|9iz2fz,46,38,0|9iz2g0,56,62,1|9trvnz,56,62,1|9trvo0,46,38,0|a1p53z,46,38,0|a1p540,56,62,1|achybz,56,62,1|achyc0,46,38,0|akf7rz,46,38,0|akf7s0,56,62,1|av80zz,56,62,1|av8100,46,38,0|b3i93z,46,38,0|b3i940,56,62,1|bdy3nz,56,62,1|bdy3o0,46,38,0|bm8brz,46,38,0|bm8bs0,56,62,1|bwo6bz,56,62,1|bwo6c0,46,38,0|c4yefz,46,38,0|c4yeg0,56,62,1|cfr7nz,56,62,1|cfr7o0,46,38,0|cnoh3z,46,38,0|cnoh40,56,62,1|cyhabz,56,62,1|cyhac0,46,38,0|d6ejrz,46,38,0|d6ejs0,56,62,1|dh7czz,56,62,1|dh7d00,46,38,0|dphl3z,46,38,0|dphl40,56,62,1|dzxfnz,56,62,1|dzxfo0,46,38,0|e87nrz,46,38,0|e87ns0,56,62,1|einibz,56,62,1|einic0,46,38,0|eqxqfz,46,38,0|eqxqg0,56,62,1|f1dkzz,56,62,1|f1dl00,46,38,0|f9nt3z,46,38,0|f9nt40,56,62,1|fkgmbz,56,62,1|fkgmc0,46,38,0|fsdvrz,46,38,0|fsdvs0,56,62,1|g36ozz,56,62,1|g36p00,46,38,0|gb3yfz,46,38,0|gb3yg0,56,62,1|glwrnz,56,62,1|glwro0,46,38,0|gu6zrz,46,38,0|gu6zs0,56,62,1|h4mubz,56,62,1|h4muc0,46,38,0|hcx2fz,46,38,0|hcx2g0,56,62,1|hncwzz,56,62,1|hncx00,46,38,0|hvn53z,46,38,0|hvn540,56,62,1|i6fybz,56,62,1|i6fyc0,46,38,0|ied7rz,46,38,0|ied7s0,56,62,1|ip60zz,56,62,1|ip6100,46,38,0|ix3afz,46,38,0|ix3ag0,56,62,1|j7w3nz,56,62,1|j7w3o0,46,38,0|jeqh3z,46,38,0|jeqh40,56,62,1|jqz4zz,56,62,1|jqz500,46,38,0|jxgjrz,46,38,0|jxgjs0,56,62,1|k9p7nz,56,62,1|k9p7o0,46,38,0|kg6mfz,46,38,0|kg6mg0,56,62,1|ksfabz,56,62,1|ksfac0,46,38,0|kz9nrz,46,38,0|kz9ns0,56,62,1|lbibnz,56,62,1|lbibo0,46,38,0|lhzqfz,46,38,0|lhzqg0,56,62,1|lu8ebz,56,62,1|lu8ec0,46,38,0|m0pt3z,46,38,0|m0pt40,56,62,1|mcygzz,56,62,1|mcyh00,46,38,0|mjfvrz,46,38,0|mjfvs0,56,62,1|mvojnz,56,62,1|mvojo0,46,38,0|n25yfz,46,38,0|n25yg0,56,62,1|neembz,56,62,1|neemc0,46,38,0|nkw13z,46,38,0|nkw140,56,62,1|nx4ozz,56,62,1|nx4p00,46,38,0|o3z2fz,46,38,0|o3z2g0,56,62,1|og7qbz,56,62,1|og7qc0,46,38,0|omp53z,46,38,0|omp540,56,62,1|oyxszz,56,62,1|oyxt00,46,38,0|p5f7rz,46,38,0|p5f7s0,56,62,1|phnvnz,56,62,1|phnvo0,46,38,0|po5afz,46,38,0|po5ag0,56,62,1|q0dybz,56,62,1|q0dyc0,46,38,0|q6vd3z,46,38,0|q6vd40,56,62,1|qj3vfz,56,62,1|qj3vg0,44,62,0|NaN,44,62,0\",\"America/Winnipeg|,0,180,0|-171bfcd,0,180,0|-171bfcc,45,63,0|-s0s7c1,45,63,0|-s0s7c0,48,59,1|-rt8241,48,59,1|-rt8240,45,63,0|-qzov41,45,63,0|-qzov40,48,59,1|-qplz81,48,59,1|-qplz80,45,63,0|-h11r41,45,63,0|-h11r40,48,59,1|-gu7j81,48,59,1|-gu7j80,45,63,0|-ek21s1,45,63,0|-ek21s0,52,59,1|-cq2tg1,52,59,1|-cq2tg0,53,59,1|-cnp0k1,53,59,1|-cnp0k0,45,63,0|-cc64g1,45,63,0|-cc64g0,48,59,1|-c490k1,48,59,1|-c490k0,45,63,0|-bu5z41,45,63,0|-bu5z40,48,59,1|-bm8v81,48,59,1|-bm8v80,45,63,0|-bbfwg1,45,63,0|-bbfwg0,48,59,1|-b3isk1,48,59,1|-b3isk0,45,63,0|-aspts1,45,63,0|-aspts0,48,59,1|-akspw1,48,59,1|-akspw0,45,63,0|-a9kxs1,45,63,0|-a9kxs0,48,59,1|-a1rj81,48,59,1|-a1rj80,45,63,0|-9qwps1,45,63,0|-9qwps0,48,59,1|-9izlw1,48,59,1|-9izlw0,45,63,0|-986n41,45,63,0|-986n40,48,59,1|-909j81,48,59,1|-909j80,45,63,0|-8pgkg1,45,63,0|-8pgkg0,48,59,1|-8hjgk1,48,59,1|-8hjgk0,45,63,0|-86qhs1,45,63,0|-86qhs0,48,59,1|-7ytdw1,48,59,1|-7ytdw0,45,63,0|-7o0f41,45,63,0|-7o0f40,48,59,1|-7g3b81,48,59,1|-7g3b80,45,63,0|-74xds1,45,63,0|-74xds0,48,59,1|-6x09w1,48,59,1|-6x09w0,45,63,0|-6m7b41,45,63,0|-6m7b40,48,59,1|-6ea781,48,59,1|-6ea780,45,63,0|-63h8g1,45,63,0|-63h8g0,48,59,1|-5vk4k1,48,59,1|-5vk4k0,45,63,0|-5kr5s1,45,63,0|-5kr5s0,48,59,1|-5be781,48,59,1|-5be780,45,63,0|-521341,45,63,0|-521340,48,59,1|-4u3z81,48,59,1|-4u3z80,45,63,0|-3hhwg1,45,63,0|-3hhwg0,48,59,1|-39xr81,48,59,1|-39xr80,45,63,0|-1xbog1,45,63,0|-1xbog0,48,59,1|-1nlog1,48,59,1|-1nlog0,45,63,0|-1e8n41,45,63,0|-1e8n40,48,59,1|-14vls1,48,59,1|-14vls0,45,63,0|-vikg1,45,63,0|-vikg0,48,59,1|-m5j41,48,59,1|-m5j40,45,63,0|-cshs1,45,63,0|-cshs0,48,59,1|-3fgg1,48,59,1|-3fgg0,45,63,0|5xkvz,45,63,0|5xkw0,48,59,1|fam7z,48,59,1|fam80,45,63,0|onnjz,45,63,0|onnk0,48,59,1|ydnjz,48,59,1|ydnk0,45,63,0|17qovz,45,63,0|17qow0,48,59,1|1h3q7z,48,59,1|1h3q80,45,63,0|1qgrjz,45,63,0|1qgrk0,48,59,1|1ztsvz,48,59,1|1ztsw0,45,63,0|296u7z,45,63,0|296u80,48,59,1|2ijvjz,48,59,1|2ijvk0,45,63,0|2rwwvz,45,63,0|2rwww0,48,59,1|319y7z,48,59,1|319y80,45,63,0|3amzjz,45,63,0|3amzk0,48,59,1|3kczjz,48,59,1|3kczk0,45,63,0|3td27z,45,63,0|3td280,48,59,1|43327z,48,59,1|433280,45,63,0|4cg3jz,45,63,0|4cg3k0,48,59,1|4lt4vz,48,59,1|4lt4w0,45,63,0|4v667z,45,63,0|4v6680,48,59,1|54j7jz,48,59,1|54j7k0,45,63,0|5dw8vz,45,63,0|5dw8w0,48,59,1|5n9a7z,48,59,1|5n9a80,45,63,0|5wmbjz,45,63,0|5wmbk0,48,59,1|65zcvz,48,59,1|65zcw0,45,63,0|6fce7z,45,63,0|6fce80,48,59,1|6p2e7z,48,59,1|6p2e80,45,63,0|6y2gvz,45,63,0|6y2gw0,48,59,1|77sgvz,48,59,1|77sgw0,45,63,0|7h5i7z,45,63,0|7h5i80,48,59,1|7qijjz,48,59,1|7qijk0,45,63,0|7zvkvz,45,63,0|7zvkw0,48,59,1|898m7z,48,59,1|898m80,45,63,0|8ilnjz,45,63,0|8ilnk0,48,59,1|8ryovz,48,59,1|8ryow0,45,63,0|908u7z,45,63,0|908u80,48,59,1|9aorjz,48,59,1|9aork0,45,63,0|9iywvz,45,63,0|9iyww0,48,59,1|9trsvz,48,59,1|9trsw0,45,63,0|a1ozjz,45,63,0|a1ozk0,48,59,1|achvjz,48,59,1|achvk0,45,63,0|akf27z,45,63,0|akf280,48,59,1|av7y7z,48,59,1|av7y80,45,63,0|b3i3jz,45,63,0|b3i3k0,48,59,1|bdy0vz,48,59,1|bdy0w0,45,63,0|bm867z,45,63,0|bm8680,48,59,1|bwo3jz,48,59,1|bwo3k0,45,63,0|c4y8vz,45,63,0|c4y8w0,48,59,1|cfr4vz,48,59,1|cfr4w0,45,63,0|cnobjz,45,63,0|cnobk0,48,59,1|cyh7jz,48,59,1|cyh7k0,45,63,0|d6ee7z,45,63,0|d6ee80,48,59,1|dh7a7z,48,59,1|dh7a80,45,63,0|dphfjz,45,63,0|dphfk0,48,59,1|dzxcvz,48,59,1|dzxcw0,45,63,0|e87i7z,45,63,0|e87i80,48,59,1|einfjz,48,59,1|einfk0,45,63,0|eqxkvz,45,63,0|eqxkw0,48,59,1|f1di7z,48,59,1|f1di80,45,63,0|f9nnjz,45,63,0|f9nnk0,48,59,1|fkgjjz,48,59,1|fkgjk0,45,63,0|fsdq7z,45,63,0|fsdq80,48,59,1|g36m7z,48,59,1|g36m80,45,63,0|gb3svz,45,63,0|gb3sw0,48,59,1|glwovz,48,59,1|glwow0,45,63,0|gu6u7z,45,63,0|gu6u80,48,59,1|h4mrjz,48,59,1|h4mrk0,45,63,0|hcwwvz,45,63,0|hcwww0,48,59,1|hncu7z,48,59,1|hncu80,45,63,0|hvmzjz,45,63,0|hvmzk0,48,59,1|i6fvjz,48,59,1|i6fvk0,45,63,0|ied27z,45,63,0|ied280,48,59,1|ip5y7z,48,59,1|ip5y80,45,63,0|ix34vz,45,63,0|ix34w0,48,59,1|j7vy3z,48,59,1|j7vy40,45,63,0|jeqbjz,45,63,0|jeqbk0,48,59,1|jqyzfz,48,59,1|jqyzg0,45,63,0|jxge7z,45,63,0|jxge80,48,59,1|k9p23z,48,59,1|k9p240,45,63,0|kg6gvz,45,63,0|kg6gw0,48,59,1|ksf4rz,48,59,1|ksf4s0,45,63,0|kz9i7z,45,63,0|kz9i80,48,59,1|lbi63z,48,59,1|lbi640,45,63,0|lhzkvz,45,63,0|lhzkw0,48,59,1|lu88rz,48,59,1|lu88s0,45,63,0|m0pnjz,45,63,0|m0pnk0,48,59,1|mcybfz,48,59,1|mcybg0,45,63,0|mjfq7z,45,63,0|mjfq80,48,59,1|mvoe3z,48,59,1|mvoe40,45,63,0|n25svz,45,63,0|n25sw0,48,59,1|neegrz,48,59,1|neegs0,45,63,0|nkvvjz,45,63,0|nkvvk0,48,59,1|nx4jfz,48,59,1|nx4jg0,45,63,0|o3ywvz,45,63,0|o3yww0,48,59,1|og7krz,48,59,1|og7ks0,45,63,0|omozjz,45,63,0|omozk0,48,59,1|oyxnfz,48,59,1|oyxng0,45,63,0|p5f27z,45,63,0|p5f280,48,59,1|phnq3z,48,59,1|phnq40,45,63,0|po54vz,45,63,0|po54w0,48,59,1|q0dsrz,48,59,1|q0dss0,45,63,0|q6v7jz,45,63,0|q6v7k0,48,59,1|qj3vfz,48,59,1|qj3vg0,45,63,0|qpy8vz,45,63,0|qpy8w0,48,59,1|r26wrz,48,59,1|r26ws0,45,63,0|r8objz,45,63,0|r8obk0,48,59,1|rkwzfz,48,59,1|rkwzg0,45,63,0|rree7z,45,63,0|rree80,48,59,1|s3n23z,48,59,1|s3n240,45,63,0|sa4gvz,45,63,0|sa4gw0,48,59,1|smd4rz,48,59,1|smd4s0,45,63,0|ssujjz,45,63,0|ssujk0,48,59,1|t537fz,48,59,1|t537g0,45,63,0|tbkm7z,45,63,0|tbkm80,48,59,1|tnta3z,48,59,1|tnta40,45,63,0|tunnjz,45,63,0|tunnk0,48,59,1|u6wbfz,48,59,1|u6wbg0,45,63,0|uddq7z,45,63,0|uddq80,48,59,1|upme3z,48,59,1|upme40,45,63,0|uw3svz,45,63,0|uw3sw0,48,59,1|v8cgrz,48,59,1|v8cgs0,45,63,0|vetvjz,45,63,0|vetvk0,48,59,1|vr2jfz,48,59,1|vr2jg0,45,63,0|vxjy7z,45,63,0|vxjy80,48,59,1|w9sm3z,48,59,1|w9sm40,45,63,0|wgmzjz,45,63,0|wgmzk0,48,59,1|wsvnfz,48,59,1|wsvng0,45,63,0|wzd27z,45,63,0|wzd280,48,59,1|xblq3z,48,59,1|xblq40,45,63,0|xi34vz,45,63,0|xi34w0,48,59,1|xubsrz,48,59,1|xubss0,45,63,0|y0t7jz,45,63,0|y0t7k0,48,59,1|yd1vfz,48,59,1|yd1vg0,45,63,0|yjja7z,45,63,0|yjja80,48,59,1|yvry3z,48,59,1|yvry40,45,63,0|z29cvz,45,63,0|z29cw0,48,59,1|zei0rz,48,59,1|zei0s0,45,63,0|zlce7z,45,63,0|zlce80,48,59,1|zxl23z,48,59,1|zxl240,45,63,0|1042gvz,45,63,0|1042gw0,48,59,1|10gb4rz,48,59,1|10gb4s0,45,63,0|10msjjz,45,63,0|10msjk0,48,59,1|10z17fz,48,59,1|10z17g0,45,63,0|115im7z,45,63,0|115im80,48,59,1|11hra3z,48,59,1|11hra40,45,63,0|11o8ovz,45,63,0|11o8ow0,48,59,1|120hcrz,48,59,1|120hcs0,45,63,0|126yrjz,45,63,0|126yrk0,48,59,1|12j7ffz,48,59,1|12j7fg0,45,63,0|12q1svz,45,63,0|12q1sw0,48,59,1|132agrz,48,59,1|132ags0,45,63,0|138rvjz,45,63,0|138rvk0,48,59,1|13l0jfz,48,59,1|13l0jg0,45,63,0|13rhy7z,45,63,0|13rhy80,48,59,1|143qm3z,48,59,1|143qm40,45,63,0|14a80vz,45,63,0|14a80w0,48,59,1|14mgorz,48,59,1|14mgos0,45,63,0|14sy3jz,45,63,0|14sy3k0,48,59,1|1556rfz,48,59,1|1556rg0,45,63,0|15c14vz,45,63,0|15c14w0,48,59,1|15o9srz,48,59,1|15o9ss0,45,63,0|15ur7jz,45,63,0|15ur7k0,48,59,1|166zvfz,48,59,1|166zvg0,45,63,0|16dha7z,45,63,0|16dha80,48,59,1|16ppy3z,48,59,1|16ppy40,45,63,0|16w7cvz,45,63,0|16w7cw0,48,59,1|178g0rz,48,59,1|178g0s0,45,63,0|17exfjz,45,63,0|17exfk0,48,59,1|17r63fz,48,59,1|17r63g0,45,63,0|17xni7z,45,63,0|17xni80,48,59,1|189w63z,48,59,1|189w640,45,63,0|18gqjjz,45,63,0|18gqjk0,48,59,1|18sz7fz,48,59,1|18sz7g0,45,63,0|18zgm7z,45,63,0|18zgm80,48,59,1|19bpa3z,48,59,1|19bpa40,45,63,0|19i6ovz,45,63,0|19i6ow0,48,59,1|19ufcrz,48,59,1|19ufcs0,45,63,0|1a0wrjz,45,63,0|1a0wrk0,48,59,1|1ad5ffz,48,59,1|1ad5fg0,45,63,0|1ajmu7z,45,63,0|1ajmu80,48,59,1|1avvi3z,48,59,1|1avvi40,45,63,0|1b2pvjz,45,63,0|1b2pvk0,48,59,1|1beyjfz,48,59,1|1beyjg0,45,63,0|1blfy7z,45,63,0|1blfy80,48,59,1|1bxom3z,48,59,1|1bxom40,45,63,0|1c460vz,45,63,0|1c460w0,48,59,1|1cgeorz,48,59,1|1cgeos0,45,63,0|1cmw3jz,45,63,0|1cmw3k0,48,59,1|1cz4rfz,48,59,1|1cz4rg0,45,63,0|1d5m67z,45,63,0|1d5m680,48,59,1|1dhuu3z,48,59,1|1dhuu40,45,63,0|1doc8vz,45,63,0|1doc8w0,48,59,1|1e0kwrz,48,59,1|1e0kws0,45,63,0|1e7fa7z,45,63,0|1e7fa80,48,59,1|1ejny3z,48,59,1|1ejny40,45,63,0|1eq5cvz,45,63,0|1eq5cw0,48,59,1|1f2e0rz,48,59,1|1f2e0s0,45,63,0|1f8vfjz,45,63,0|1f8vfk0,48,59,1|1fl43fz,48,59,1|1fl43g0,45,63,0|1frli7z,45,63,0|1frli80,48,59,1|1g3u63z,48,59,1|1g3u640,45,63,0|1gabkvz,45,63,0|1gabkw0,48,59,1|1gmk8rz,48,59,1|1gmk8s0,45,63,0|1gt1njz,45,63,0|1gt1nk0,48,59,1|1h5abfz,48,59,1|1h5abg0,45,63,0|1hc4ovz,45,63,0|1hc4ow0,48,59,1|1hodcrz,48,59,1|1hodcs0,45,63,0|1huurjz,45,63,0|1huurk0,48,59,1|1i73ffz,48,59,1|1i73fg0,45,63,0|1idku7z,45,63,0|1idku80,48,59,1|1ipti3z,48,59,1|1ipti40,45,63,0|1iwawvz,45,63,0|1iwaww0,48,59,1|1j8jkrz,48,59,1|1j8jks0,45,63,0|1jf0zjz,45,63,0|1jf0zk0,48,59,1|1jr9nfz,48,59,1|1jr9ng0,45,63,0|1jy40vz,45,63,0|1jy40w0,48,59,1|1kacorz,48,59,1|1kacos0,45,63,0|1kgu3jz,45,63,0|1kgu3k0,48,59,1|1kt2rfz,48,59,1|1kt2rg0,45,63,0|1kzk67z,45,63,0|1kzk680,48,59,1|1lbsu3z,48,59,1|1lbsu40,45,63,0|1lia8vz,45,63,0|1lia8w0,48,59,1|1luiwrz,48,59,1|1luiws0,45,63,0|1m10bjz,45,63,0|1m10bk0,48,59,1|1md8zfz,48,59,1|1md8zg0,45,63,0|1mjqe7z,45,63,0|1mjqe80,48,59,1|1mvz23z,48,59,1|1mvz240,45,63,0|1n2tfjz,45,63,0|1n2tfk0,48,59,1|1nf23fz,48,59,1|1nf23g0,45,63,0|1nlji7z,45,63,0|1nlji80,48,59,1|1nxs63z,48,59,1|1nxs640,45,63,0|1o49kvz,45,63,0|1o49kw0,48,59,1|1ogi8rz,48,59,1|1ogi8s0,45,63,0|1omznjz,45,63,0|1omznk0,48,59,1|1oz8bfz,48,59,1|1oz8bg0,45,63,0|1p5pq7z,45,63,0|1p5pq80,48,59,1|1phye3z,48,59,1|1phye40,45,63,0|1posrjz,45,63,0|1posrk0,48,59,1|1q11ffz,48,59,1|1q11fg0,45,63,0|1q7iu7z,45,63,0|1q7iu80,48,59,1|1qjri3z,48,59,1|1qjri40,45,63,0|1qq8wvz,45,63,0|1qq8ww0,48,59,1|1r2hkrz,48,59,1|1r2hks0,45,63,0|1r8yzjz,45,63,0|1r8yzk0,48,59,1|1rl7nfz,48,59,1|1rl7ng0,45,63,0|1rrp27z,45,63,0|1rrp280,48,59,1|1s3xq3z,48,59,1|1s3xq40,45,63,0|1saf4vz,45,63,0|1saf4w0,48,59,1|1smnsrz,48,59,1|1smnss0,45,63,0|1sti67z,45,63,0|1sti680,48,59,1|1t5qu3z,48,59,1|1t5qu40,45,63,0|1tc88vz,45,63,0|1tc88w0,48,59,1|1togwrz,48,59,1|1togws0,45,63,0|1tuybjz,45,63,0|1tuybk0,48,59,1|1u76zfz,48,59,1|1u76zg0,45,63,0|1udoe7z,45,63,0|1udoe80,48,59,1|1upx23z,48,59,1|1upx240,45,63,0|1uwegvz,45,63,0|1uwegw0,48,59,1|1v8n4rz,48,59,1|1v8n4s0,45,63,0|1vf4jjz,45,63,0|1vf4jk0,48,59,1|1vrd7fz,48,59,1|1vrd7g0,45,63,0|NaN,45,63,0\",\"America/Yakutat|,0,181,0|-1hc7qk0,0,181,0|-1hc7qjz,0,182,0|-1078vgi,0,182,0|-1078vgh,35,35,0|-ek1tg1,35,35,0|-ek1tg0,65,38,1|-cq2tg1,65,38,1|-cq2tg0,66,38,1|-cnos81,66,38,1|-cnos80,35,35,0|-cs9g1,35,35,0|-cs9g0,64,38,1|-3faw1,64,38,1|-3faw0,35,35,0|5xt7z,35,35,0|5xt80,64,38,1|farrz,64,38,1|fars0,35,35,0|onvvz,35,35,0|onvw0,64,38,1|ydt3z,64,38,1|ydt40,35,35,0|17qx7z,35,35,0|17qx80,64,38,1|1h3vrz,64,38,1|1h3vs0,35,35,0|1qgzvz,35,35,0|1qgzw0,64,38,1|1ztyfz,64,38,1|1ztyg0,35,35,0|23fnvz,35,35,0|23fnw0,64,38,1|2ik13z,64,38,1|2ik140,35,35,0|2ooh7z,35,35,0|2ooh80,64,38,1|31a3rz,64,38,1|31a3s0,35,35,0|3an7vz,35,35,0|3an7w0,64,38,1|3kd53z,64,38,1|3kd540,35,35,0|3tdajz,35,35,0|3tdak0,64,38,1|4337rz,64,38,1|4337s0,35,35,0|4cgbvz,35,35,0|4cgbw0,64,38,1|4ltafz,64,38,1|4ltag0,35,35,0|4v6ejz,35,35,0|4v6ek0,64,38,1|54jd3z,64,38,1|54jd40,35,35,0|5dwh7z,35,35,0|5dwh80,64,38,1|5n9frz,64,38,1|5n9fs0,35,35,0|5wmjvz,35,35,0|5wmjw0,64,38,1|65zifz,64,38,1|65zig0,35,35,0|6fcmjz,35,35,0|6fcmk0,64,38,1|6p2jrz,64,38,1|6p2js0,35,35,0|6y2p7z,35,35,0|6y2p80,64,38,1|77smfz,64,38,1|77smg0,35,35,0|79dybz,35,35,0|79dyc0,36,35,0|7h5qjz,36,35,0|7h5qk0,37,38,1|7qip3z,37,38,1|7qip40,36,35,0|7zvt7z,36,35,0|7zvt80,37,38,1|898rrz,37,38,1|898rs0,36,35,0|8ilvvz,36,35,0|8ilvw0,37,38,1|8ryufz,37,38,1|8ryug0,36,35,0|9092jz,36,35,0|9092k0,37,38,1|9aox3z,37,38,1|9aox40,36,35,0|9iz57z,36,35,0|9iz580,37,38,1|9tryfz,37,38,1|9tryg0,36,35,0|a1p7vz,36,35,0|a1p7w0,37,38,1|aci13z,37,38,1|aci140,36,35,0|akfajz,36,35,0|akfak0,37,38,1|av83rz,37,38,1|av83s0,36,35,0|b3ibvz,36,35,0|b3ibw0,37,38,1|bdy6fz,37,38,1|bdy6g0,36,35,0|bm8ejz,36,35,0|bm8ek0,37,38,1|bwo93z,37,38,1|bwo940,36,35,0|c4yh7z,36,35,0|c4yh80,37,38,1|cfrafz,37,38,1|cfrag0,36,35,0|cnojvz,36,35,0|cnojw0,37,38,1|cyhd3z,37,38,1|cyhd40,36,35,0|d6emjz,36,35,0|d6emk0,37,38,1|dh7frz,37,38,1|dh7fs0,36,35,0|dphnvz,36,35,0|dphnw0,37,38,1|dzxifz,37,38,1|dzxig0,36,35,0|e87qjz,36,35,0|e87qk0,37,38,1|einl3z,37,38,1|einl40,36,35,0|eqxt7z,36,35,0|eqxt80,37,38,1|f1dnrz,37,38,1|f1dns0,36,35,0|f9nvvz,36,35,0|f9nvw0,37,38,1|fkgp3z,37,38,1|fkgp40,36,35,0|fsdyjz,36,35,0|fsdyk0,37,38,1|g36rrz,37,38,1|g36rs0,36,35,0|gb417z,36,35,0|gb4180,37,38,1|glwufz,37,38,1|glwug0,36,35,0|gu72jz,36,35,0|gu72k0,37,38,1|h4mx3z,37,38,1|h4mx40,36,35,0|hcx57z,36,35,0|hcx580,37,38,1|hnczrz,37,38,1|hnczs0,36,35,0|hvn7vz,36,35,0|hvn7w0,37,38,1|i6g13z,37,38,1|i6g140,36,35,0|iedajz,36,35,0|iedak0,37,38,1|ip63rz,37,38,1|ip63s0,36,35,0|ix3d7z,36,35,0|ix3d80,37,38,1|j7w6fz,37,38,1|j7w6g0,36,35,0|jeqjvz,36,35,0|jeqjw0,37,38,1|jqz7rz,37,38,1|jqz7s0,36,35,0|jxgmjz,36,35,0|jxgmk0,37,38,1|k9pafz,37,38,1|k9pag0,36,35,0|kg6p7z,36,35,0|kg6p80,37,38,1|ksfd3z,37,38,1|ksfd40,36,35,0|kz9qjz,36,35,0|kz9qk0,37,38,1|lbiefz,37,38,1|lbieg0,36,35,0|lhzt7z,36,35,0|lhzt80,37,38,1|lu8h3z,37,38,1|lu8h40,36,35,0|m0pvvz,36,35,0|m0pvw0,37,38,1|mcyjrz,37,38,1|mcyjs0,36,35,0|mjfyjz,36,35,0|mjfyk0,37,38,1|mvomfz,37,38,1|mvomg0,36,35,0|n2617z,36,35,0|n26180,37,38,1|neep3z,37,38,1|neep40,36,35,0|nkw3vz,36,35,0|nkw3w0,37,38,1|nx4rrz,37,38,1|nx4rs0,36,35,0|o3z57z,36,35,0|o3z580,37,38,1|og7t3z,37,38,1|og7t40,36,35,0|omp7vz,36,35,0|omp7w0,37,38,1|oyxvrz,37,38,1|oyxvs0,36,35,0|p5fajz,36,35,0|p5fak0,37,38,1|phnyfz,37,38,1|phnyg0,36,35,0|po5d7z,36,35,0|po5d80,37,38,1|q0e13z,37,38,1|q0e140,36,35,0|q6vfvz,36,35,0|q6vfw0,37,38,1|qj43rz,37,38,1|qj43s0,36,35,0|qpyh7z,36,35,0|qpyh80,37,38,1|r2753z,37,38,1|r27540,36,35,0|r8ojvz,36,35,0|r8ojw0,37,38,1|rkx7rz,37,38,1|rkx7s0,36,35,0|rremjz,36,35,0|rremk0,37,38,1|s3nafz,37,38,1|s3nag0,36,35,0|sa4p7z,36,35,0|sa4p80,37,38,1|smdd3z,37,38,1|smdd40,36,35,0|ssurvz,36,35,0|ssurw0,37,38,1|t53frz,37,38,1|t53fs0,36,35,0|tbkujz,36,35,0|tbkuk0,37,38,1|tntifz,37,38,1|tntig0,36,35,0|tunvvz,36,35,0|tunvw0,37,38,1|u6wjrz,37,38,1|u6wjs0,36,35,0|uddyjz,36,35,0|uddyk0,37,38,1|upmmfz,37,38,1|upmmg0,36,35,0|uw417z,36,35,0|uw4180,37,38,1|v8cp3z,37,38,1|v8cp40,36,35,0|veu3vz,36,35,0|veu3w0,37,38,1|vr2rrz,37,38,1|vr2rs0,36,35,0|vxk6jz,36,35,0|vxk6k0,37,38,1|w9sufz,37,38,1|w9sug0,36,35,0|wgn7vz,36,35,0|wgn7w0,37,38,1|wsvvrz,37,38,1|wsvvs0,36,35,0|wzdajz,36,35,0|wzdak0,37,38,1|xblyfz,37,38,1|xblyg0,36,35,0|xi3d7z,36,35,0|xi3d80,37,38,1|xuc13z,37,38,1|xuc140,36,35,0|y0tfvz,36,35,0|y0tfw0,37,38,1|yd23rz,37,38,1|yd23s0,36,35,0|yjjijz,36,35,0|yjjik0,37,38,1|yvs6fz,37,38,1|yvs6g0,36,35,0|z29l7z,36,35,0|z29l80,37,38,1|zei93z,37,38,1|zei940,36,35,0|zlcmjz,36,35,0|zlcmk0,37,38,1|zxlafz,37,38,1|zxlag0,36,35,0|1042p7z,36,35,0|1042p80,37,38,1|10gbd3z,37,38,1|10gbd40,36,35,0|10msrvz,36,35,0|10msrw0,37,38,1|10z1frz,37,38,1|10z1fs0,36,35,0|115iujz,36,35,0|115iuk0,37,38,1|11hrifz,37,38,1|11hrig0,36,35,0|11o8x7z,36,35,0|11o8x80,37,38,1|120hl3z,37,38,1|120hl40,36,35,0|126yzvz,36,35,0|126yzw0,37,38,1|12j7nrz,37,38,1|12j7ns0,36,35,0|12q217z,36,35,0|12q2180,37,38,1|132ap3z,37,38,1|132ap40,36,35,0|138s3vz,36,35,0|138s3w0,37,38,1|13l0rrz,37,38,1|13l0rs0,36,35,0|13ri6jz,36,35,0|13ri6k0,37,38,1|143qufz,37,38,1|143qug0,36,35,0|14a897z,36,35,0|14a8980,37,38,1|14mgx3z,37,38,1|14mgx40,36,35,0|14sybvz,36,35,0|14sybw0,37,38,1|1556zrz,37,38,1|1556zs0,36,35,0|15c1d7z,36,35,0|15c1d80,37,38,1|15oa13z,37,38,1|15oa140,36,35,0|15urfvz,36,35,0|15urfw0,37,38,1|16703rz,37,38,1|16703s0,36,35,0|16dhijz,36,35,0|16dhik0,37,38,1|16pq6fz,37,38,1|16pq6g0,36,35,0|16w7l7z,36,35,0|16w7l80,37,38,1|178g93z,37,38,1|178g940,36,35,0|17exnvz,36,35,0|17exnw0,37,38,1|17r6brz,37,38,1|17r6bs0,36,35,0|17xnqjz,36,35,0|17xnqk0,37,38,1|189wefz,37,38,1|189weg0,36,35,0|18gqrvz,36,35,0|18gqrw0,37,38,1|18szfrz,37,38,1|18szfs0,36,35,0|18zgujz,36,35,0|18zguk0,37,38,1|19bpifz,37,38,1|19bpig0,36,35,0|19i6x7z,36,35,0|19i6x80,37,38,1|19ufl3z,37,38,1|19ufl40,36,35,0|1a0wzvz,36,35,0|1a0wzw0,37,38,1|1ad5nrz,37,38,1|1ad5ns0,36,35,0|1ajn2jz,36,35,0|1ajn2k0,37,38,1|1avvqfz,37,38,1|1avvqg0,36,35,0|1b2q3vz,36,35,0|1b2q3w0,37,38,1|1beyrrz,37,38,1|1beyrs0,36,35,0|1blg6jz,36,35,0|1blg6k0,37,38,1|1bxoufz,37,38,1|1bxoug0,36,35,0|1c4697z,36,35,0|1c46980,37,38,1|1cgex3z,37,38,1|1cgex40,36,35,0|1cmwbvz,36,35,0|1cmwbw0,37,38,1|1cz4zrz,37,38,1|1cz4zs0,36,35,0|1d5mejz,36,35,0|1d5mek0,37,38,1|1dhv2fz,37,38,1|1dhv2g0,36,35,0|1doch7z,36,35,0|1doch80,37,38,1|1e0l53z,37,38,1|1e0l540,36,35,0|1e7fijz,36,35,0|1e7fik0,37,38,1|1ejo6fz,37,38,1|1ejo6g0,36,35,0|1eq5l7z,36,35,0|1eq5l80,37,38,1|1f2e93z,37,38,1|1f2e940,36,35,0|1f8vnvz,36,35,0|1f8vnw0,37,38,1|1fl4brz,37,38,1|1fl4bs0,36,35,0|1frlqjz,36,35,0|1frlqk0,37,38,1|1g3uefz,37,38,1|1g3ueg0,36,35,0|1gabt7z,36,35,0|1gabt80,37,38,1|1gmkh3z,37,38,1|1gmkh40,36,35,0|1gt1vvz,36,35,0|1gt1vw0,37,38,1|1h5ajrz,37,38,1|1h5ajs0,36,35,0|1hc4x7z,36,35,0|1hc4x80,37,38,1|1hodl3z,37,38,1|1hodl40,36,35,0|1huuzvz,36,35,0|1huuzw0,37,38,1|1i73nrz,37,38,1|1i73ns0,36,35,0|1idl2jz,36,35,0|1idl2k0,37,38,1|1iptqfz,37,38,1|1iptqg0,36,35,0|1iwb57z,36,35,0|1iwb580,37,38,1|1j8jt3z,37,38,1|1j8jt40,36,35,0|1jf17vz,36,35,0|1jf17w0,37,38,1|1jr9vrz,37,38,1|1jr9vs0,36,35,0|1jy497z,36,35,0|1jy4980,37,38,1|1kacx3z,37,38,1|1kacx40,36,35,0|1kgubvz,36,35,0|1kgubw0,37,38,1|1kt2zrz,37,38,1|1kt2zs0,36,35,0|1kzkejz,36,35,0|1kzkek0,37,38,1|1lbt2fz,37,38,1|1lbt2g0,36,35,0|1liah7z,36,35,0|1liah80,37,38,1|1luj53z,37,38,1|1luj540,36,35,0|1m10jvz,36,35,0|1m10jw0,37,38,1|1md97rz,37,38,1|1md97s0,36,35,0|1mjqmjz,36,35,0|1mjqmk0,37,38,1|1mvzafz,37,38,1|1mvzag0,36,35,0|1n2tnvz,36,35,0|1n2tnw0,37,38,1|1nf2brz,37,38,1|1nf2bs0,36,35,0|1nljqjz,36,35,0|1nljqk0,37,38,1|1nxsefz,37,38,1|1nxseg0,36,35,0|1o49t7z,36,35,0|1o49t80,37,38,1|1ogih3z,37,38,1|1ogih40,36,35,0|1omzvvz,36,35,0|1omzvw0,37,38,1|1oz8jrz,37,38,1|1oz8js0,36,35,0|1p5pyjz,36,35,0|1p5pyk0,37,38,1|1phymfz,37,38,1|1phymg0,36,35,0|1poszvz,36,35,0|1poszw0,37,38,1|1q11nrz,37,38,1|1q11ns0,36,35,0|1q7j2jz,36,35,0|1q7j2k0,37,38,1|1qjrqfz,37,38,1|1qjrqg0,36,35,0|1qq957z,36,35,0|1qq9580,37,38,1|1r2ht3z,37,38,1|1r2ht40,36,35,0|1r8z7vz,36,35,0|1r8z7w0,37,38,1|1rl7vrz,37,38,1|1rl7vs0,36,35,0|1rrpajz,36,35,0|1rrpak0,37,38,1|1s3xyfz,37,38,1|1s3xyg0,36,35,0|1safd7z,36,35,0|1safd80,37,38,1|1smo13z,37,38,1|1smo140,36,35,0|1stiejz,36,35,0|1stiek0,37,38,1|1t5r2fz,37,38,1|1t5r2g0,36,35,0|1tc8h7z,36,35,0|1tc8h80,37,38,1|1toh53z,37,38,1|1toh540,36,35,0|1tuyjvz,36,35,0|1tuyjw0,37,38,1|1u777rz,37,38,1|1u777s0,36,35,0|1udomjz,36,35,0|1udomk0,37,38,1|1upxafz,37,38,1|1upxag0,36,35,0|1uwep7z,36,35,0|1uwep80,37,38,1|1v8nd3z,37,38,1|1v8nd40,36,35,0|1vf4rvz,36,35,0|1vf4rw0,37,38,1|1vrdfrz,37,38,1|1vrdfs0,36,35,0|NaN,36,35,0\",\"America/Yellowknife|,59,1,0|-i9m2o1,59,1,0|-i9m2o0,44,62,0|-ek1z01,44,62,0|-ek1z00,57,63,1|-cq2tg1,57,63,1|-cq2tg0,58,63,1|-cnoxs1,58,63,1|-cnoxs0,44,62,0|-2g1tw1,44,62,0|-2g1tw0,60,59,1|-26btw1,60,59,1|-26btw0,44,62,0|5dwbnz,44,62,0|5dwbo0,47,63,1|5n9a7z,47,63,1|5n9a80,44,62,0|5wmebz,44,62,0|5wmec0,47,63,1|65zcvz,47,63,1|65zcw0,44,62,0|6fcgzz,44,62,0|6fch00,47,63,1|6p2e7z,47,63,1|6p2e80,44,62,0|6y2jnz,44,62,0|6y2jo0,47,63,1|77sgvz,47,63,1|77sgw0,44,62,0|7h5kzz,44,62,0|7h5l00,47,63,1|7qijjz,47,63,1|7qijk0,44,62,0|7zvnnz,44,62,0|7zvno0,47,63,1|898m7z,47,63,1|898m80,44,62,0|8ilqbz,44,62,0|8ilqc0,47,63,1|8ryovz,47,63,1|8ryow0,44,62,0|908wzz,44,62,0|908x00,47,63,1|9aorjz,47,63,1|9aork0,44,62,0|9iyznz,44,62,0|9iyzo0,47,63,1|9trsvz,47,63,1|9trsw0,44,62,0|a1p2bz,44,62,0|a1p2c0,47,63,1|achvjz,47,63,1|achvk0,44,62,0|akf4zz,44,62,0|akf500,47,63,1|av7y7z,47,63,1|av7y80,44,62,0|b3i6bz,44,62,0|b3i6c0,47,63,1|bdy0vz,47,63,1|bdy0w0,44,62,0|bm88zz,44,62,0|bm8900,47,63,1|bwo3jz,47,63,1|bwo3k0,44,62,0|c4ybnz,44,62,0|c4ybo0,47,63,1|cfr4vz,47,63,1|cfr4w0,44,62,0|cnoebz,44,62,0|cnoec0,47,63,1|cyh7jz,47,63,1|cyh7k0,44,62,0|d6egzz,44,62,0|d6eh00,47,63,1|dh7a7z,47,63,1|dh7a80,44,62,0|dphibz,44,62,0|dphic0,47,63,1|dzxcvz,47,63,1|dzxcw0,44,62,0|e87kzz,44,62,0|e87l00,47,63,1|einfjz,47,63,1|einfk0,44,62,0|eqxnnz,44,62,0|eqxno0,47,63,1|f1di7z,47,63,1|f1di80,44,62,0|f9nqbz,44,62,0|f9nqc0,47,63,1|fkgjjz,47,63,1|fkgjk0,44,62,0|fsdszz,44,62,0|fsdt00,47,63,1|g36m7z,47,63,1|g36m80,44,62,0|gb3vnz,44,62,0|gb3vo0,47,63,1|glwovz,47,63,1|glwow0,44,62,0|gu6wzz,44,62,0|gu6x00,47,63,1|h4mrjz,47,63,1|h4mrk0,44,62,0|hcwznz,44,62,0|hcwzo0,47,63,1|hncu7z,47,63,1|hncu80,44,62,0|hvn2bz,44,62,0|hvn2c0,47,63,1|i6fvjz,47,63,1|i6fvk0,44,62,0|ied4zz,44,62,0|ied500,47,63,1|ip5y7z,47,63,1|ip5y80,44,62,0|ix37nz,44,62,0|ix37o0,47,63,1|j7w0vz,47,63,1|j7w0w0,44,62,0|jeqebz,44,62,0|jeqec0,47,63,1|jqz27z,47,63,1|jqz280,44,62,0|jxggzz,44,62,0|jxgh00,47,63,1|k9p4vz,47,63,1|k9p4w0,44,62,0|kg6jnz,44,62,0|kg6jo0,47,63,1|ksf7jz,47,63,1|ksf7k0,44,62,0|kz9kzz,44,62,0|kz9l00,47,63,1|lbi8vz,47,63,1|lbi8w0,44,62,0|lhznnz,44,62,0|lhzno0,47,63,1|lu8bjz,47,63,1|lu8bk0,44,62,0|m0pqbz,44,62,0|m0pqc0,47,63,1|mcye7z,47,63,1|mcye80,44,62,0|mjfszz,44,62,0|mjft00,47,63,1|mvogvz,47,63,1|mvogw0,44,62,0|n25vnz,44,62,0|n25vo0,47,63,1|neejjz,47,63,1|neejk0,44,62,0|nkvybz,44,62,0|nkvyc0,47,63,1|nx4m7z,47,63,1|nx4m80,44,62,0|o3yznz,44,62,0|o3yzo0,47,63,1|og7njz,47,63,1|og7nk0,44,62,0|omp2bz,44,62,0|omp2c0,47,63,1|oyxq7z,47,63,1|oyxq80,44,62,0|p5f4zz,44,62,0|p5f500,47,63,1|phnsvz,47,63,1|phnsw0,44,62,0|po57nz,44,62,0|po57o0,47,63,1|q0dvjz,47,63,1|q0dvk0,44,62,0|q6vabz,44,62,0|q6vac0,47,63,1|qj3y7z,47,63,1|qj3y80,44,62,0|qpybnz,44,62,0|qpybo0,47,63,1|r26zjz,47,63,1|r26zk0,44,62,0|r8oebz,44,62,0|r8oec0,47,63,1|rkx27z,47,63,1|rkx280,44,62,0|rregzz,44,62,0|rreh00,47,63,1|s3n4vz,47,63,1|s3n4w0,44,62,0|sa4jnz,44,62,0|sa4jo0,47,63,1|smd7jz,47,63,1|smd7k0,44,62,0|ssumbz,44,62,0|ssumc0,47,63,1|t53a7z,47,63,1|t53a80,44,62,0|tbkozz,44,62,0|tbkp00,47,63,1|tntcvz,47,63,1|tntcw0,44,62,0|tunqbz,44,62,0|tunqc0,47,63,1|u6we7z,47,63,1|u6we80,44,62,0|uddszz,44,62,0|uddt00,47,63,1|upmgvz,47,63,1|upmgw0,44,62,0|uw3vnz,44,62,0|uw3vo0,47,63,1|v8cjjz,47,63,1|v8cjk0,44,62,0|vetybz,44,62,0|vetyc0,47,63,1|vr2m7z,47,63,1|vr2m80,44,62,0|vxk0zz,44,62,0|vxk100,47,63,1|w9sovz,47,63,1|w9sow0,44,62,0|wgn2bz,44,62,0|wgn2c0,47,63,1|wsvq7z,47,63,1|wsvq80,44,62,0|wzd4zz,44,62,0|wzd500,47,63,1|xblsvz,47,63,1|xblsw0,44,62,0|xi37nz,44,62,0|xi37o0,47,63,1|xubvjz,47,63,1|xubvk0,44,62,0|y0tabz,44,62,0|y0tac0,47,63,1|yd1y7z,47,63,1|yd1y80,44,62,0|yjjczz,44,62,0|yjjd00,47,63,1|yvs0vz,47,63,1|yvs0w0,44,62,0|z29fnz,44,62,0|z29fo0,47,63,1|zei3jz,47,63,1|zei3k0,44,62,0|zlcgzz,44,62,0|zlch00,47,63,1|zxl4vz,47,63,1|zxl4w0,44,62,0|1042jnz,44,62,0|1042jo0,47,63,1|10gb7jz,47,63,1|10gb7k0,44,62,0|10msmbz,44,62,0|10msmc0,47,63,1|10z1a7z,47,63,1|10z1a80,44,62,0|115iozz,44,62,0|115ip00,47,63,1|11hrcvz,47,63,1|11hrcw0,44,62,0|11o8rnz,44,62,0|11o8ro0,47,63,1|120hfjz,47,63,1|120hfk0,44,62,0|126yubz,44,62,0|126yuc0,47,63,1|12j7i7z,47,63,1|12j7i80,44,62,0|12q1vnz,44,62,0|12q1vo0,47,63,1|132ajjz,47,63,1|132ajk0,44,62,0|138rybz,44,62,0|138ryc0,47,63,1|13l0m7z,47,63,1|13l0m80,44,62,0|13ri0zz,44,62,0|13ri100,47,63,1|143qovz,47,63,1|143qow0,44,62,0|14a83nz,44,62,0|14a83o0,47,63,1|14mgrjz,47,63,1|14mgrk0,44,62,0|14sy6bz,44,62,0|14sy6c0,47,63,1|1556u7z,47,63,1|1556u80,44,62,0|15c17nz,44,62,0|15c17o0,47,63,1|15o9vjz,47,63,1|15o9vk0,44,62,0|15urabz,44,62,0|15urac0,47,63,1|166zy7z,47,63,1|166zy80,44,62,0|16dhczz,44,62,0|16dhd00,47,63,1|16pq0vz,47,63,1|16pq0w0,44,62,0|16w7fnz,44,62,0|16w7fo0,47,63,1|178g3jz,47,63,1|178g3k0,44,62,0|17exibz,44,62,0|17exic0,47,63,1|17r667z,47,63,1|17r6680,44,62,0|17xnkzz,44,62,0|17xnl00,47,63,1|189w8vz,47,63,1|189w8w0,44,62,0|18gqmbz,44,62,0|18gqmc0,47,63,1|18sza7z,47,63,1|18sza80,44,62,0|18zgozz,44,62,0|18zgp00,47,63,1|19bpcvz,47,63,1|19bpcw0,44,62,0|19i6rnz,44,62,0|19i6ro0,47,63,1|19uffjz,47,63,1|19uffk0,44,62,0|1a0wubz,44,62,0|1a0wuc0,47,63,1|1ad5i7z,47,63,1|1ad5i80,44,62,0|1ajmwzz,44,62,0|1ajmx00,47,63,1|1avvkvz,47,63,1|1avvkw0,44,62,0|1b2pybz,44,62,0|1b2pyc0,47,63,1|1beym7z,47,63,1|1beym80,44,62,0|1blg0zz,44,62,0|1blg100,47,63,1|1bxoovz,47,63,1|1bxoow0,44,62,0|1c463nz,44,62,0|1c463o0,47,63,1|1cgerjz,47,63,1|1cgerk0,44,62,0|1cmw6bz,44,62,0|1cmw6c0,47,63,1|1cz4u7z,47,63,1|1cz4u80,44,62,0|1d5m8zz,44,62,0|1d5m900,47,63,1|1dhuwvz,47,63,1|1dhuww0,44,62,0|1docbnz,44,62,0|1docbo0,47,63,1|1e0kzjz,47,63,1|1e0kzk0,44,62,0|1e7fczz,44,62,0|1e7fd00,47,63,1|1ejo0vz,47,63,1|1ejo0w0,44,62,0|1eq5fnz,44,62,0|1eq5fo0,47,63,1|1f2e3jz,47,63,1|1f2e3k0,44,62,0|1f8vibz,44,62,0|1f8vic0,47,63,1|1fl467z,47,63,1|1fl4680,44,62,0|1frlkzz,44,62,0|1frll00,47,63,1|1g3u8vz,47,63,1|1g3u8w0,44,62,0|1gabnnz,44,62,0|1gabno0,47,63,1|1gmkbjz,47,63,1|1gmkbk0,44,62,0|1gt1qbz,44,62,0|1gt1qc0,47,63,1|1h5ae7z,47,63,1|1h5ae80,44,62,0|1hc4rnz,44,62,0|1hc4ro0,47,63,1|1hodfjz,47,63,1|1hodfk0,44,62,0|1huuubz,44,62,0|1huuuc0,47,63,1|1i73i7z,47,63,1|1i73i80,44,62,0|1idkwzz,44,62,0|1idkx00,47,63,1|1iptkvz,47,63,1|1iptkw0,44,62,0|1iwaznz,44,62,0|1iwazo0,47,63,1|1j8jnjz,47,63,1|1j8jnk0,44,62,0|1jf12bz,44,62,0|1jf12c0,47,63,1|1jr9q7z,47,63,1|1jr9q80,44,62,0|1jy43nz,44,62,0|1jy43o0,47,63,1|1kacrjz,47,63,1|1kacrk0,44,62,0|1kgu6bz,44,62,0|1kgu6c0,47,63,1|1kt2u7z,47,63,1|1kt2u80,44,62,0|1kzk8zz,44,62,0|1kzk900,47,63,1|1lbswvz,47,63,1|1lbsww0,44,62,0|1liabnz,44,62,0|1liabo0,47,63,1|1luizjz,47,63,1|1luizk0,44,62,0|1m10ebz,44,62,0|1m10ec0,47,63,1|1md927z,47,63,1|1md9280,44,62,0|1mjqgzz,44,62,0|1mjqh00,47,63,1|1mvz4vz,47,63,1|1mvz4w0,44,62,0|1n2tibz,44,62,0|1n2tic0,47,63,1|1nf267z,47,63,1|1nf2680,44,62,0|1nljkzz,44,62,0|1nljl00,47,63,1|1nxs8vz,47,63,1|1nxs8w0,44,62,0|1o49nnz,44,62,0|1o49no0,47,63,1|1ogibjz,47,63,1|1ogibk0,44,62,0|1omzqbz,44,62,0|1omzqc0,47,63,1|1oz8e7z,47,63,1|1oz8e80,44,62,0|1p5pszz,44,62,0|1p5pt00,47,63,1|1phygvz,47,63,1|1phygw0,44,62,0|1posubz,44,62,0|1posuc0,47,63,1|1q11i7z,47,63,1|1q11i80,44,62,0|1q7iwzz,44,62,0|1q7ix00,47,63,1|1qjrkvz,47,63,1|1qjrkw0,44,62,0|1qq8znz,44,62,0|1qq8zo0,47,63,1|1r2hnjz,47,63,1|1r2hnk0,44,62,0|1r8z2bz,44,62,0|1r8z2c0,47,63,1|1rl7q7z,47,63,1|1rl7q80,44,62,0|1rrp4zz,44,62,0|1rrp500,47,63,1|1s3xsvz,47,63,1|1s3xsw0,44,62,0|1saf7nz,44,62,0|1saf7o0,47,63,1|1smnvjz,47,63,1|1smnvk0,44,62,0|1sti8zz,44,62,0|1sti900,47,63,1|1t5qwvz,47,63,1|1t5qww0,44,62,0|1tc8bnz,44,62,0|1tc8bo0,47,63,1|1togzjz,47,63,1|1togzk0,44,62,0|1tuyebz,44,62,0|1tuyec0,47,63,1|1u7727z,47,63,1|1u77280,44,62,0|1udogzz,44,62,0|1udoh00,47,63,1|1upx4vz,47,63,1|1upx4w0,44,62,0|1uwejnz,44,62,0|1uwejo0,47,63,1|1v8n7jz,47,63,1|1v8n7k0,44,62,0|1vf4mbz,44,62,0|1vf4mc0,47,63,1|1vrda7z,47,63,1|1vrda80,44,62,0|NaN,44,62,0\",\"Antarctica/Casey|,59,1,0|-irxc1,59,1,0|-irxc0,88,183,0|kro7bz,88,183,0|kro7c0,89,184,0|kyrizz,89,184,0|kyrj00,88,183,0|ltqknz,88,183,0|ltqko0,89,184,0|lzr5vz,89,184,0|lzr5w0,88,183,0|ofen3z,88,183,0|ofen40,89,184,0|p5dwjz,89,184,0|p5dwk0,88,183,0|pg70vz,88,183,0|pg70w0,89,184,0|pogv3z,89,184,0|pogv40,88,183,0|pytbfz,88,183,0|pytbg0,89,184,0|q6tz3z,89,184,0|q6tz40,88,183,0|qhmv5n,88,183,0|qhmv5o,89,184,0|NaN,89,184,0\",\"Antarctica/Davis|,59,1,0|-6rmdc1,59,1,0|-6rmdc0,90,185,0|-2p2zg1,90,185,0|-2p2zg0,59,1,0|-h6io1,59,1,0|-h6io0,90,185,0|kroa3z,90,185,0|kroa40,91,186,0|kz30vz,91,186,0|kz30w0,90,185,0|ltqnfz,90,185,0|ltqng0,91,186,0|lzre7z,91,186,0|lzre80,90,185,0|NaN,90,185,0\",\"Antarctica/DumontDUrville|,0,187,0|-1ayytx5,0,187,0|-1ayytx4,92,188,0|-1354j8x,92,188,0|-1354j8w,93,189,0|NaN,93,189,0\",\"Antarctica/Macquarie|,59,1,0|-10mb9c1,59,1,0|-10mb9c0,94,189,0|-rsj4w1,94,189,0|-rsj4w0,95,184,1|-rjj281,95,184,1|-rjj280,94,189,0|-qhmeg1,94,189,0|-qhmeg0,59,1,0|-bd1xc1,59,1,0|-bd1xc0,94,189,0|-16cow1,94,189,0|-16cow0,95,184,1|-wznk1,95,184,1|-wznk0,94,189,0|-m6rk1,94,189,0|-m6rk0,95,184,1|-fcgw1,95,184,1|-fcgw0,94,189,0|-3gow1,94,189,0|-3gow0,95,184,1|3dlrz,95,184,1|3dls0,94,189,0|f9drz,94,189,0|f9ds0,95,184,1|mgn3z,95,184,1|mgn40,94,189,0|ycf3z,94,189,0|ycf40,95,184,1|14gsfz,95,184,1|14gsg0,94,189,0|1h2hrz,94,189,0|1h2hs0,95,184,1|1njtrz,95,184,1|1njts0,94,189,0|1zskfz,94,189,0|1zskg0,95,184,1|269wfz,95,184,1|269wg0,94,189,0|2iin3z,94,189,0|2iin40,95,184,1|2ozz3z,95,184,1|2ozz40,94,189,0|318prz,94,189,0|318ps0,95,184,1|3830fz,95,184,1|3830g0,94,189,0|3kbr3z,94,189,0|3kbr40,95,184,1|3qt33z,95,184,1|3qt340,94,189,0|431trz,94,189,0|431ts0,95,184,1|49j5rz,95,184,1|49j5s0,94,189,0|4lrwfz,94,189,0|4lrwg0,95,184,1|4s98fz,95,184,1|4s98g0,94,189,0|54hz3z,94,189,0|54hz40,95,184,1|5azb3z,95,184,1|5azb40,94,189,0|5n81rz,94,189,0|5n81s0,95,184,1|5tpdrz,95,184,1|5tpds0,94,189,0|65y4fz,94,189,0|65y4g0,95,184,1|6dvb3z,95,184,1|6dvb40,94,189,0|6p15rz,94,189,0|6p15s0,95,184,1|6wldrz,95,184,1|6wlds0,94,189,0|77r8fz,94,189,0|77r8g0,95,184,1|7e8kfz,95,184,1|7e8kg0,94,189,0|7qhb3z,94,189,0|7qhb40,95,184,1|7wyn3z,95,184,1|7wyn40,94,189,0|897drz,94,189,0|897ds0,95,184,1|8foprz,95,184,1|8fops0,94,189,0|8rkhrz,94,189,0|8rkhs0,95,184,1|8z4prz,95,184,1|8z4ps0,94,189,0|9anj3z,94,189,0|9anj40,95,184,1|9i7r3z,95,184,1|9i7r40,94,189,0|9tqkfz,94,189,0|9tqkg0,95,184,1|a0xtrz,95,184,1|a0xts0,94,189,0|acgn3z,94,189,0|acgn40,95,184,1|ajnwfz,95,184,1|ajnwg0,94,189,0|av6prz,94,189,0|av6ps0,95,184,1|b33wfz,95,184,1|b33wg0,94,189,0|bctwfz,94,189,0|bctwg0,95,184,1|bltz3z,95,184,1|bltz40,94,189,0|bvjz3z,94,189,0|bvjz40,95,184,1|c4k1rz,95,184,1|c4k1s0,94,189,0|cea1rz,94,189,0|cea1s0,95,184,1|cna4fz,95,184,1|cna4g0,94,189,0|cx04fz,94,189,0|cx04g0,95,184,1|d6073z,95,184,1|d60740,94,189,0|dfq73z,94,189,0|dfq740,95,184,1|dp38fz,95,184,1|dp38g0,94,189,0|dyt8fz,94,189,0|dyt8g0,95,184,1|e7tb3z,95,184,1|e7tb40,94,189,0|ehjb3z,94,189,0|ehjb40,95,184,1|eqjdrz,95,184,1|eqjds0,94,189,0|f09drz,94,189,0|f09ds0,95,184,1|f99gfz,95,184,1|f99gg0,94,189,0|fizgfz,94,189,0|fizgg0,95,184,1|frzj3z,95,184,1|frzj40,94,189,0|fzwprz,94,189,0|fzwps0,95,184,1|gaplrz,95,184,1|gapls0,94,189,0|gkskfz,94,189,0|gkskg0,95,184,1|gtsn3z,95,184,1|gtsn40,94,189,0|h3in3z,94,189,0|h3in40,95,184,1|hciprz,95,184,1|hcips0,94,189,0|hm8prz,94,189,0|hm8ps0,95,184,1|hv8sfz,95,184,1|hv8sg0,94,189,0|i4ysfz,94,189,0|i4ysg0,95,184,1|idyv3z,95,184,1|idyv40,94,189,0|inov3z,94,189,0|inov40,95,184,1|ix1wfz,95,184,1|ix1wg0,94,189,0|j6exrz,94,189,0|j6exs0,95,184,1|jff0fz,95,184,1|jff0g0,94,189,0|jphz3z,94,189,0|jphz40,95,184,1|jyv0fz,95,184,1|jyv0g0,94,189,0|k881rz,94,189,0|k881s0,95,184,1|khl33z,95,184,1|khl340,94,189,0|kqy4fz,94,189,0|kqy4g0,95,184,1|lj18fz,95,184,1|lj18g0,94,189,0|lse9rz,94,189,0|lse9s0,95,184,1|m1rb3z,95,184,1|m1rb40,94,189,0|mbhb3z,94,189,0|mbhb40,95,184,1|mkucfz,95,184,1|mkucg0,94,189,0|mu7drz,94,189,0|mu7ds0,95,184,1|n3kf3z,95,184,1|n3kf40,94,189,0|ncxgfz,94,189,0|ncxgg0,95,184,1|nmahrz,95,184,1|nmahs0,94,189,0|nvnj3z,94,189,0|nvnj40,95,184,1|o50kfz,95,184,1|o50kg0,94,189,0|oedlrz,94,189,0|oedls0,95,184,1|onqn3z,95,184,1|onqn40,94,189,0|ox3ofz,94,189,0|ox3og0,95,184,1|p6gprz,95,184,1|p6gps0,94,189,0|pg6prz,94,189,0|pg6ps0,95,184,1|ppjr3z,95,184,1|ppjr40,94,189,0|pywsfz,94,189,0|pywsg0,95,184,1|q89trz,95,184,1|q89ts0,94,189,0|qhmv3z,94,189,0|qhmv40,95,184,1|qqzwfz,95,184,1|qqzwg0,94,189,0|r0cxrz,94,189,0|r0cxs0,95,184,1|r9pz3z,95,184,1|r9pz40,94,189,0|rj30fz,94,189,0|rj30g0,95,184,1|rsg1rz,95,184,1|rsg1s0,94,189,0|s1t33z,94,189,0|s1t340,95,184,1|sbj33z,95,184,1|sbj340,94,189,0|skw4fz,94,189,0|skw4g0,95,184,1|su95rz,95,184,1|su95s0,94,189,0|t3m73z,94,189,0|t3m740,95,184,1|tcz8fz,95,184,1|tcz8g0,94,189,0|tmc9rz,94,189,0|tmc9s0,95,184,1|tvpb3z,95,184,1|tvpb40,94,189,0|u52cfz,94,189,0|u52cg0,95,184,1|uefdrz,95,184,1|uefds0,94,189,0|unsf3z,94,189,0|unsf40,95,184,1|ux5gfz,95,184,1|ux5gg0,94,189,0|v6vgfz,94,189,0|v6vgg0,95,184,1|vg8hrz,95,184,1|vg8hs0,94,189,0|vplj3z,94,189,0|vplj40,95,184,1|vyykfz,95,184,1|vyykg0,94,189,0|w8blrz,94,189,0|w8bls0,95,184,1|whon3z,95,184,1|whon40,94,189,0|wr1ofz,94,189,0|wr1og0,95,184,1|x0eprz,95,184,1|x0eps0,94,189,0|x9rr3z,94,189,0|x9rr40,95,184,1|xj4sfz,95,184,1|xj4sg0,94,189,0|xshtrz,94,189,0|xshts0,95,184,1|y1uv3z,95,184,1|y1uv40,94,189,0|ybkv3z,94,189,0|ybkv40,95,184,1|ykxwfz,95,184,1|ykxwg0,94,189,0|yuaxrz,94,189,0|yuaxs0,95,184,1|z3nz3z,95,184,1|z3nz40,94,189,0|zd10fz,94,189,0|zd10g0,95,184,1|zme1rz,95,184,1|zme1s0,94,189,0|zvr33z,94,189,0|zvr340,95,184,1|10544fz,95,184,1|10544g0,94,189,0|10eh5rz,94,189,0|10eh5s0,95,184,1|10nu73z,95,184,1|10nu740,94,189,0|10xk73z,94,189,0|10xk740,95,184,1|116x8fz,95,184,1|116x8g0,94,189,0|11ga9rz,94,189,0|11ga9s0,95,184,1|11pnb3z,95,184,1|11pnb40,94,189,0|11z0cfz,94,189,0|11z0cg0,95,184,1|128ddrz,95,184,1|128dds0,94,189,0|12hqf3z,94,189,0|12hqf40,95,184,1|12r3gfz,95,184,1|12r3gg0,94,189,0|130ghrz,94,189,0|130ghs0,95,184,1|139tj3z,95,184,1|139tj40,94,189,0|13j6kfz,94,189,0|13j6kg0,95,184,1|13sjlrz,95,184,1|13sjls0,94,189,0|1429lrz,94,189,0|1429ls0,95,184,1|14bmn3z,95,184,1|14bmn40,94,189,0|14kzofz,94,189,0|14kzog0,95,184,1|14ucprz,95,184,1|14ucps0,94,189,0|153pr3z,94,189,0|153pr40,95,184,1|15d2sfz,95,184,1|15d2sg0,94,189,0|15mftrz,94,189,0|15mfts0,95,184,1|15vsv3z,95,184,1|15vsv40,94,189,0|1655wfz,94,189,0|1655wg0,95,184,1|16eixrz,95,184,1|16eixs0,94,189,0|16nvz3z,94,189,0|16nvz40,95,184,1|16xlz3z,95,184,1|16xlz40,94,189,0|176z0fz,94,189,0|176z0g0,95,184,1|17gc1rz,95,184,1|17gc1s0,94,189,0|17pp33z,94,189,0|17pp340,95,184,1|17z24fz,95,184,1|17z24g0,94,189,0|188f5rz,94,189,0|188f5s0,95,184,1|18hs73z,95,184,1|18hs740,94,189,0|18r58fz,94,189,0|18r58g0,95,184,1|190i9rz,95,184,1|190i9s0,94,189,0|199vb3z,94,189,0|199vb40,95,184,1|19j8cfz,95,184,1|19j8cg0,94,189,0|19sycfz,94,189,0|19sycg0,95,184,1|1a2bdrz,95,184,1|1a2bds0,94,189,0|1abof3z,94,189,0|1abof40,95,184,1|1al1gfz,95,184,1|1al1gg0,94,189,0|1auehrz,94,189,0|1auehs0,95,184,1|1b3rj3z,95,184,1|1b3rj40,94,189,0|1bd4kfz,94,189,0|1bd4kg0,95,184,1|1bmhlrz,95,184,1|1bmhls0,94,189,0|1bvun3z,94,189,0|1bvun40,95,184,1|1c57ofz,95,184,1|1c57og0,94,189,0|1cekprz,94,189,0|1cekps0,95,184,1|1cnxr3z,95,184,1|1cnxr40,94,189,0|1cxnr3z,94,189,0|1cxnr40,95,184,1|1d70sfz,95,184,1|1d70sg0,94,189,0|1dgdtrz,94,189,0|1dgdts0,95,184,1|1dpqv3z,95,184,1|1dpqv40,94,189,0|1dz3wfz,94,189,0|1dz3wg0,95,184,1|1e8gxrz,95,184,1|1e8gxs0,94,189,0|1ehtz3z,94,189,0|1ehtz40,95,184,1|1er70fz,95,184,1|1er70g0,94,189,0|1f0k1rz,94,189,0|1f0k1s0,95,184,1|1f9x33z,95,184,1|1f9x340,94,189,0|1fjn33z,94,189,0|1fjn340,95,184,1|1ft04fz,95,184,1|1ft04g0,94,189,0|1g2d5rz,94,189,0|1g2d5s0,95,184,1|1gbq73z,95,184,1|1gbq740,94,189,0|1gl38fz,94,189,0|1gl38g0,95,184,1|1gug9rz,95,184,1|1gug9s0,94,189,0|1h3tb3z,94,189,0|1h3tb40,95,184,1|1hd6cfz,95,184,1|1hd6cg0,94,189,0|1hmjdrz,94,189,0|1hmjds0,95,184,1|1hvwf3z,95,184,1|1hvwf40,94,189,0|1i59gfz,94,189,0|1i59gg0,95,184,1|1iemhrz,95,184,1|1iemhs0,94,189,0|1iochrz,94,189,0|1iochs0,95,184,1|1ixpj3z,95,184,1|1ixpj40,94,189,0|1j72kfz,94,189,0|1j72kg0,95,184,1|1jgflrz,95,184,1|1jgfls0,94,189,0|1jpsn3z,94,189,0|1jpsn40,95,184,1|1jz5ofz,95,184,1|1jz5og0,94,189,0|1k8iprz,94,189,0|1k8ips0,95,184,1|1khvr3z,95,184,1|1khvr40,94,189,0|1kr8sfz,94,189,0|1kr8sg0,95,184,1|1l0ltrz,95,184,1|1l0lts0,94,189,0|1l9yv3z,94,189,0|1l9yv40,95,184,1|1ljov3z,95,184,1|1ljov40,94,189,0|1lt1wfz,94,189,0|1lt1wg0,95,184,1|1m2exrz,95,184,1|1m2exs0,94,189,0|1mbrz3z,94,189,0|1mbrz40,95,184,1|1ml50fz,95,184,1|1ml50g0,94,189,0|1mui1rz,94,189,0|1mui1s0,95,184,1|1n3v33z,95,184,1|1n3v340,94,189,0|1nd84fz,94,189,0|1nd84g0,95,184,1|1nml5rz,95,184,1|1nml5s0,94,189,0|1nvy73z,94,189,0|1nvy740,95,184,1|1o5b8fz,95,184,1|1o5b8g0,94,189,0|1of18fz,94,189,0|1of18g0,95,184,1|1ooe9rz,95,184,1|1ooe9s0,94,189,0|1oxrb3z,94,189,0|1oxrb40,95,184,1|1p74cfz,95,184,1|1p74cg0,94,189,0|1pghdrz,94,189,0|1pghds0,95,184,1|1ppuf3z,95,184,1|1ppuf40,94,189,0|1pz7gfz,94,189,0|1pz7gg0,95,184,1|1q8khrz,95,184,1|1q8khs0,94,189,0|1qhxj3z,94,189,0|1qhxj40,95,184,1|1qrakfz,95,184,1|1qrakg0,94,189,0|1r0nlrz,94,189,0|1r0nls0,95,184,1|1ra0n3z,95,184,1|1ra0n40,94,189,0|1rjqn3z,94,189,0|1rjqn40,95,184,1|1rt3ofz,95,184,1|1rt3og0,94,189,0|1s2gprz,94,189,0|1s2gps0,95,184,1|1sbtr3z,95,184,1|1sbtr40,94,189,0|1sl6sfz,94,189,0|1sl6sg0,95,184,1|1sujtrz,95,184,1|1sujts0,94,189,0|1t3wv3z,94,189,0|1t3wv40,95,184,1|1td9wfz,95,184,1|1td9wg0,94,189,0|1tmmxrz,94,189,0|1tmmxs0,95,184,1|1tvzz3z,95,184,1|1tvzz40,94,189,0|1u5pz3z,94,189,0|1u5pz40,95,184,1|1uf30fz,95,184,1|1uf30g0,94,189,0|1uog1rz,94,189,0|1uog1s0,95,184,1|1uxt33z,95,184,1|1uxt340,94,189,0|1v764fz,94,189,0|1v764g0,95,184,1|1vgj5rz,95,184,1|1vgj5s0,94,189,0|1vpw73z,94,189,0|1vpw740,95,184,1|NaN,95,184,1\",\"Antarctica/Mawson|,59,1,0|-8aelc1,59,1,0|-8aelc0,96,190,0|krocvz,96,190,0|krocw0,91,186,0|NaN,91,186,0\",\"Antarctica/McMurdo|,0,191,0|-1gsoz15,0,191,0|-1gsoz14,97,192,0|-m01p21,97,192,0|-m01p20,98,193,1|-ltxei1,98,193,1|-ltxei0,97,192,0|-lieie1,97,192,0|-lieie0,98,194,1|-lahd41,98,194,1|-lahd40,97,192,0|-kzofq1,97,192,0|-kzofq0,98,194,1|-krrag1,98,194,1|-krrag0,97,192,0|-kgyd21,97,192,0|-kgyd20,98,194,1|-k917s1,98,194,1|-k917s0,97,192,0|-jy8ae1,97,192,0|-jy8ae0,98,194,1|-jpy6g1,98,194,1|-jpy6g0,97,192,0|-jfi7q1,97,192,0|-jfi7q0,98,194,1|-j783s1,98,194,1|-j783s0,97,192,0|-iws521,97,192,0|-iws520,98,194,1|-imc941,98,194,1|-imc940,97,192,0|-ief121,97,192,0|-ief120,98,194,1|-i3m6g1,98,194,1|-i3m6g0,97,192,0|-hvoye1,97,192,0|-hvoye0,98,194,1|-hkw3s1,98,194,1|-hkw3s0,97,192,0|-hcyvq1,97,192,0|-hcyvq0,98,194,1|-h26141,98,194,1|-h26140,97,192,0|-gu8t21,97,192,0|-gu8t20,98,194,1|-gjfyg1,98,194,1|-gjfyg0,97,192,0|-gbiqe1,97,192,0|-gbiqe0,98,194,1|-g0cx41,98,194,1|-g0cx40,97,192,0|-fssnq1,97,192,0|-fssnq0,98,194,1|-fhmug1,98,194,1|-fhmug0,97,192,0|-f9pme1,97,192,0|-f9pme0,98,194,1|-ciy9c1,98,194,1|-ciy9c0,98,194,0|2ivg7z,98,194,0|2ivg80,99,195,1|2omuvz,99,195,1|2omuw0,98,194,0|318k7z,98,194,0|318k80,99,195,1|382uvz,99,195,1|382uw0,98,194,0|3kbljz,98,194,0|3kblk0,99,195,1|3qsxjz,99,195,1|3qsxk0,98,194,0|431o7z,98,194,0|431o80,99,195,1|49j07z,99,195,1|49j080,98,194,0|4lrqvz,98,194,0|4lrqw0,99,195,1|4s92vz,99,195,1|4s92w0,98,194,0|54htjz,98,194,0|54htk0,99,195,1|5az5jz,99,195,1|5az5k0,98,194,0|5n7w7z,98,194,0|5n7w80,99,195,1|5tp87z,99,195,1|5tp880,98,194,0|65xyvz,98,194,0|65xyw0,99,195,1|6cs9jz,99,195,1|6cs9k0,98,194,0|6p107z,98,194,0|6p1080,99,195,1|6vic7z,99,195,1|6vic80,98,194,0|77r2vz,98,194,0|77r2w0,99,195,1|7e8evz,99,195,1|7e8ew0,98,194,0|7qh5jz,98,194,0|7qh5k0,99,195,1|7wyhjz,99,195,1|7wyhk0,98,194,0|89787z,98,194,0|897880,99,195,1|8fok7z,99,195,1|8fok80,98,194,0|8rxavz,98,194,0|8rxaw0,99,195,1|8yemvz,99,195,1|8yemw0,98,194,0|9andjz,98,194,0|9andk0,99,195,1|9hho7z,99,195,1|9hho80,98,194,0|9tqevz,98,194,0|9tqew0,99,195,1|a07qvz,99,195,1|a07qw0,98,194,0|abdljz,98,194,0|abdlk0,99,195,1|ajnqvz,99,195,1|ajnqw0,98,194,0|au3o7z,98,194,0|au3o80,99,195,1|b2dtjz,99,195,1|b2dtk0,98,194,0|bctqvz,98,194,0|bctqw0,99,195,1|bl3w7z,99,195,1|bl3w80,98,194,0|bvjtjz,98,194,0|bvjtk0,99,195,1|c46xjz,99,195,1|c46xk0,98,194,0|ce9w7z,98,194,0|ce9w80,99,195,1|cmx07z,99,195,1|cmx080,98,194,0|cwzyvz,98,194,0|cwzyw0,99,195,1|d5n2vz,99,195,1|d5n2w0,98,194,0|dfq1jz,98,194,0|dfq1k0,99,195,1|dod5jz,99,195,1|dod5k0,98,194,0|dyt2vz,98,194,0|dyt2w0,99,195,1|e7387z,99,195,1|e73880,98,194,0|ehj5jz,98,194,0|ehj5k0,99,195,1|eptavz,99,195,1|eptaw0,98,194,0|f0987z,98,194,0|f09880,99,195,1|f8wc7z,99,195,1|f8wc80,98,194,0|fizavz,98,194,0|fizaw0,99,195,1|frmevz,99,195,1|frmew0,98,194,0|g1pdjz,98,194,0|g1pdk0,99,195,1|gachjz,99,195,1|gachk0,98,194,0|gksevz,98,194,0|gksew0,99,195,1|gt2k7z,99,195,1|gt2k80,98,194,0|h3ihjz,98,194,0|h3ihk0,99,195,1|hbsmvz,99,195,1|hbsmw0,98,194,0|hm8k7z,98,194,0|hm8k80,99,195,1|huvo7z,99,195,1|huvo80,98,194,0|i4ymvz,98,194,0|i4ymw0,99,195,1|idlqvz,99,195,1|idlqw0,98,194,0|inopjz,98,194,0|inopk0,99,195,1|iwbtjz,99,195,1|iwbtk0,98,194,0|j6es7z,98,194,0|j6es80,99,195,1|jf1w7z,99,195,1|jf1w80,98,194,0|jp4uvz,98,194,0|jp4uw0,99,195,1|jyuuvz,99,195,1|jyuuw0,98,194,0|k7uxjz,98,194,0|k7uxk0,99,195,1|khkxjz,99,195,1|khkxk0,98,194,0|kql07z,98,194,0|kql080,99,195,1|l0b07z,99,195,1|l0b080,98,194,0|l9b2vz,98,194,0|l9b2w0,99,195,1|lj12vz,99,195,1|lj12w0,98,194,0|ls15jz,98,194,0|ls15k0,99,195,1|m1r5jz,99,195,1|m1r5k0,98,194,0|mb46vz,98,194,0|mb46w0,99,195,1|mku6vz,99,195,1|mku6w0,98,194,0|mtu9jz,98,194,0|mtu9k0,99,195,1|n3k9jz,99,195,1|n3k9k0,98,194,0|nckc7z,98,194,0|nckc80,99,195,1|nmac7z,99,195,1|nmac80,98,194,0|nvaevz,98,194,0|nvaew0,99,195,1|o50evz,99,195,1|o50ew0,98,194,0|oe0hjz,98,194,0|oe0hk0,99,195,1|onqhjz,99,195,1|onqhk0,98,194,0|owqk7z,98,194,0|owqk80,99,195,1|p6gk7z,99,195,1|p6gk80,98,194,0|pftljz,98,194,0|pftlk0,99,195,1|ppjljz,99,195,1|ppjlk0,98,194,0|pyjo7z,98,194,0|pyjo80,99,195,1|q89o7z,99,195,1|q89o80,98,194,0|qh9qvz,98,194,0|qh9qw0,99,195,1|qqzqvz,99,195,1|qqzqw0,98,194,0|qzztjz,98,194,0|qzztk0,99,195,1|r9ptjz,99,195,1|r9ptk0,98,194,0|ripw7z,98,194,0|ripw80,99,195,1|rsfw7z,99,195,1|rsfw80,98,194,0|s1fyvz,98,194,0|s1fyw0,99,195,1|sbixjz,99,195,1|sbixk0,98,194,0|skj07z,98,194,0|skj080,99,195,1|su907z,99,195,1|su9080,98,194,0|t392vz,98,194,0|t392w0,99,195,1|tcz2vz,99,195,1|tcz2w0,98,194,0|tlz5jz,98,194,0|tlz5k0,99,195,1|tvp5jz,99,195,1|tvp5k0,98,194,0|u4p87z,98,194,0|u4p880,99,195,1|uef87z,99,195,1|uef880,98,194,0|unfavz,98,194,0|unfaw0,99,195,1|ux5avz,99,195,1|ux5aw0,98,194,0|v6ic7z,98,194,0|v6ic80,99,195,1|vg8c7z,99,195,1|vg8c80,98,194,0|vp8evz,98,194,0|vp8ew0,99,195,1|vyyevz,99,195,1|vyyew0,98,194,0|w7yhjz,98,194,0|w7yhk0,99,195,1|whohjz,99,195,1|whohk0,98,194,0|wqok7z,98,194,0|wqok80,99,195,1|x0ek7z,99,195,1|x0ek80,98,194,0|x9emvz,98,194,0|x9emw0,99,195,1|xj4mvz,99,195,1|xj4mw0,98,194,0|xs4pjz,98,194,0|xs4pk0,99,195,1|y1upjz,99,195,1|y1upk0,98,194,0|yb7qvz,98,194,0|yb7qw0,99,195,1|ykxqvz,99,195,1|ykxqw0,98,194,0|ytxtjz,98,194,0|ytxtk0,99,195,1|z3ntjz,99,195,1|z3ntk0,98,194,0|zcnw7z,98,194,0|zcnw80,99,195,1|zmdw7z,99,195,1|zmdw80,98,194,0|zvdyvz,98,194,0|zvdyw0,99,195,1|1053yvz,99,195,1|1053yw0,98,194,0|10e41jz,98,194,0|10e41k0,99,195,1|10nu1jz,99,195,1|10nu1k0,98,194,0|10x72vz,98,194,0|10x72w0,99,195,1|116x2vz,99,195,1|116x2w0,98,194,0|11fx5jz,98,194,0|11fx5k0,99,195,1|11pn5jz,99,195,1|11pn5k0,98,194,0|11yn87z,98,194,0|11yn880,99,195,1|128d87z,99,195,1|128d880,98,194,0|12hdavz,98,194,0|12hdaw0,99,195,1|12r3avz,99,195,1|12r3aw0,98,194,0|1303djz,98,194,0|1303dk0,99,195,1|139tdjz,99,195,1|139tdk0,98,194,0|13itg7z,98,194,0|13itg80,99,195,1|13sjg7z,99,195,1|13sjg80,98,194,0|141whjz,98,194,0|141whk0,99,195,1|14bmhjz,99,195,1|14bmhk0,98,194,0|14kmk7z,98,194,0|14kmk80,99,195,1|14uck7z,99,195,1|14uck80,98,194,0|153cmvz,98,194,0|153cmw0,99,195,1|15d2mvz,99,195,1|15d2mw0,98,194,0|15m2pjz,98,194,0|15m2pk0,99,195,1|15vspjz,99,195,1|15vspk0,98,194,0|164ss7z,98,194,0|164ss80,99,195,1|16eis7z,99,195,1|16eis80,98,194,0|16niuvz,98,194,0|16niuw0,99,195,1|16xltjz,99,195,1|16xltk0,98,194,0|176lw7z,98,194,0|176lw80,99,195,1|17gbw7z,99,195,1|17gbw80,98,194,0|17pbyvz,98,194,0|17pbyw0,99,195,1|17z1yvz,99,195,1|17z1yw0,98,194,0|18821jz,98,194,0|18821k0,99,195,1|18hs1jz,99,195,1|18hs1k0,98,194,0|18qs47z,98,194,0|18qs480,99,195,1|190i47z,99,195,1|190i480,98,194,0|199i6vz,98,194,0|199i6w0,99,195,1|19j86vz,99,195,1|19j86w0,98,194,0|19sl87z,98,194,0|19sl880,99,195,1|1a2b87z,99,195,1|1a2b880,98,194,0|1abbavz,98,194,0|1abbaw0,99,195,1|1al1avz,99,195,1|1al1aw0,98,194,0|1au1djz,98,194,0|1au1dk0,99,195,1|1b3rdjz,99,195,1|1b3rdk0,98,194,0|1bcrg7z,98,194,0|1bcrg80,99,195,1|1bmhg7z,99,195,1|1bmhg80,98,194,0|1bvhivz,98,194,0|1bvhiw0,99,195,1|1c57ivz,99,195,1|1c57iw0,98,194,0|1ce7ljz,98,194,0|1ce7lk0,99,195,1|1cnxljz,99,195,1|1cnxlk0,98,194,0|1cxamvz,98,194,0|1cxamw0,99,195,1|1d70mvz,99,195,1|1d70mw0,98,194,0|1dg0pjz,98,194,0|1dg0pk0,99,195,1|1dpqpjz,99,195,1|1dpqpk0,98,194,0|1dyqs7z,98,194,0|1dyqs80,99,195,1|1e8gs7z,99,195,1|1e8gs80,98,194,0|1ehguvz,98,194,0|1ehguw0,99,195,1|1er6uvz,99,195,1|1er6uw0,98,194,0|1f06xjz,98,194,0|1f06xk0,99,195,1|1f9wxjz,99,195,1|1f9wxk0,98,194,0|1fj9yvz,98,194,0|1fj9yw0,99,195,1|1fszyvz,99,195,1|1fszyw0,98,194,0|1g201jz,98,194,0|1g201k0,99,195,1|1gbq1jz,99,195,1|1gbq1k0,98,194,0|1gkq47z,98,194,0|1gkq480,99,195,1|1gug47z,99,195,1|1gug480,98,194,0|1h3g6vz,98,194,0|1h3g6w0,99,195,1|1hd66vz,99,195,1|1hd66w0,98,194,0|1hm69jz,98,194,0|1hm69k0,99,195,1|1hvw9jz,99,195,1|1hvw9k0,98,194,0|1i4wc7z,98,194,0|1i4wc80,99,195,1|1iemc7z,99,195,1|1iemc80,98,194,0|1inzdjz,98,194,0|1inzdk0,99,195,1|1ixpdjz,99,195,1|1ixpdk0,98,194,0|1j6pg7z,98,194,0|1j6pg80,99,195,1|1jgfg7z,99,195,1|1jgfg80,98,194,0|1jpfivz,98,194,0|1jpfiw0,99,195,1|1jz5ivz,99,195,1|1jz5iw0,98,194,0|1k85ljz,98,194,0|1k85lk0,99,195,1|1khvljz,99,195,1|1khvlk0,98,194,0|1kqvo7z,98,194,0|1kqvo80,99,195,1|1l0lo7z,99,195,1|1l0lo80,98,194,0|1l9lqvz,98,194,0|1l9lqw0,99,195,1|1ljopjz,99,195,1|1ljopk0,98,194,0|1lsos7z,98,194,0|1lsos80,99,195,1|1m2es7z,99,195,1|1m2es80,98,194,0|1mbeuvz,98,194,0|1mbeuw0,99,195,1|1ml4uvz,99,195,1|1ml4uw0,98,194,0|1mu4xjz,98,194,0|1mu4xk0,99,195,1|1n3uxjz,99,195,1|1n3uxk0,98,194,0|1ncv07z,98,194,0|1ncv080,99,195,1|1nml07z,99,195,1|1nml080,98,194,0|1nvl2vz,98,194,0|1nvl2w0,99,195,1|1o5b2vz,99,195,1|1o5b2w0,98,194,0|1oeo47z,98,194,0|1oeo480,99,195,1|1ooe47z,99,195,1|1ooe480,98,194,0|1oxe6vz,98,194,0|1oxe6w0,99,195,1|1p746vz,99,195,1|1p746w0,98,194,0|1pg49jz,98,194,0|1pg49k0,99,195,1|1ppu9jz,99,195,1|1ppu9k0,98,194,0|1pyuc7z,98,194,0|1pyuc80,99,195,1|1q8kc7z,99,195,1|1q8kc80,98,194,0|1qhkevz,98,194,0|1qhkew0,99,195,1|1qraevz,99,195,1|1qraew0,98,194,0|1r0ahjz,98,194,0|1r0ahk0,99,195,1|1ra0hjz,99,195,1|1ra0hk0,98,194,0|1rjdivz,98,194,0|1rjdiw0,99,195,1|1rt3ivz,99,195,1|1rt3iw0,98,194,0|1s23ljz,98,194,0|1s23lk0,99,195,1|1sbtljz,99,195,1|1sbtlk0,98,194,0|1skto7z,98,194,0|1skto80,99,195,1|1sujo7z,99,195,1|1sujo80,98,194,0|1t3jqvz,98,194,0|1t3jqw0,99,195,1|1td9qvz,99,195,1|1td9qw0,98,194,0|1tm9tjz,98,194,0|1tm9tk0,99,195,1|1tvztjz,99,195,1|1tvztk0,98,194,0|1u5cuvz,98,194,0|1u5cuw0,99,195,1|1uf2uvz,99,195,1|1uf2uw0,98,194,0|1uo2xjz,98,194,0|1uo2xk0,99,195,1|1uxsxjz,99,195,1|1uxsxk0,98,194,0|1v6t07z,98,194,0|1v6t080,99,195,1|1vgj07z,99,195,1|1vgj080,98,194,0|1vpj2vz,98,194,0|1vpj2w0,99,195,1|NaN,99,195,1\",\"Antarctica/Palmer|,59,1,0|-2lxhc1,59,1,0|-2lxhc0,38,41,1|-2ivzo1,38,41,1|-2ivzo0,41,40,0|-275ow1,41,40,0|-275ow0,38,41,1|-2042c1,38,41,1|-2042c0,41,40,0|-1odrk1,41,40,0|-1odrk0,38,41,1|-1fovo1,38,41,1|-1fovo0,41,40,0|-16brk1,41,40,0|-16brk0,38,41,1|-wluc1,38,41,1|-wluc0,41,40,0|-n8q81,41,40,0|-n8q80,38,41,1|-dvro1,38,41,1|-dvro0,41,40,0|-4ink1,41,40,0|-4ink0,38,41,0|24aizz,38,41,0|24aj00,39,43,1|29bxjz,39,43,1|29bxk0,38,41,0|6fn4bz,38,41,0|6fn4c0,41,40,0|6nz73z,41,40,0|6nz740,38,41,1|6vwazz,38,41,1|6vwb00,41,40,0|76p9rz,41,40,0|76p9s0,38,41,1|7emdnz,38,41,1|7emdo0,41,40,0|7psb3z,41,40,0|7psb40,38,41,1|7xcgbz,38,41,1|7xcgc0,41,40,0|88idrz,41,40,0|88ids0,38,41,1|8g2izz,38,41,1|8g2j00,41,40,0|8r8gfz,41,40,0|8r8gg0,38,41,1|90lezz,38,41,1|90lf00,41,40,0|99yj3z,41,40,0|99yj40,38,41,1|9hvmzz,38,41,1|9hvn00,41,40,0|9solrz,41,40,0|9sols0,38,41,1|a0lpnz,38,41,1|a0lpo0,41,40,0|abrn3z,41,40,0|abrn40,38,41,1|ajbsbz,38,41,1|ajbsc0,41,40,0|at1v3z,41,40,0|at1v40,38,41,1|b21uzz,38,41,1|b21v00,41,40,0|bd7sfz,41,40,0|bd7sg0,38,41,1|bl4wbz,38,41,1|bl4wc0,41,40,0|bvxv3z,41,40,0|bvxv40,38,41,1|c3uyzz,38,41,1|c3uz00,41,40,0|cenxrz,41,40,0|cenxs0,38,41,1|cml1nz,38,41,1|cml1o0,41,40,0|cxe0fz,41,40,0|cxe0g0,38,41,1|d5b4bz,38,41,1|d5b4c0,41,40,0|dgh1rz,41,40,0|dgh1s0,38,41,1|do16zz,38,41,1|do1700,41,40,0|dz74fz,41,40,0|dz74g0,38,41,1|e7u5nz,38,41,1|e7u5o0,41,40,0|ehx73z,41,40,0|ehx740,38,41,1|epuazz,38,41,1|epub00,41,40,0|ezxcfz,41,40,0|ezxcg0,38,41,1|f9n9nz,38,41,1|f9n9o0,41,40,0|fjdcfz,41,40,0|fjdcg0,38,41,1|fragbz,38,41,1|fragc0,41,40,0|g2gdrz,41,40,0|g2gds0,38,41,1|ga0izz,38,41,1|ga0j00,41,40,0|gl6gfz,41,40,0|gl6gg0,38,41,1|gsqlnz,38,41,1|gsqlo0,41,40,0|h3wj3z,41,40,0|h3wj40,38,41,1|hbgobz,38,41,1|hbgoc0,41,40,0|hmmlrz,41,40,0|hmmls0,38,41,1|hujpnz,38,41,1|hujpo0,41,40,0|i5cofz,41,40,0|i5cog0,38,41,1|id9sbz,38,41,1|id9sc0,41,40,0|io2r3z,41,40,0|io2r40,38,41,1|ivzuzz,38,41,1|ivzv00,41,40,0|j75sfz,41,40,0|j75sg0,38,41,1|jepxnz,38,41,1|jepxo0,41,40,0|jpvv3z,41,40,0|jpvv40,38,41,1|jyiwbz,38,41,1|jyiwc0,41,40,0|k8lxrz,41,40,0|k8lxs0,38,41,1|kgj1nz,38,41,1|kgj1o0,41,40,0|krc0fz,41,40,0|krc0g0,38,41,1|l0c0bz,38,41,1|l0c0c0,41,40,0|la233z,41,40,0|la2340,38,41,1|lkuwbz,38,41,1|lkuwc0,41,40,0|lq9f3z,41,40,0|lq9f40,38,41,1|m380bz,38,41,1|m380c0,41,40,0|m9pf3z,41,40,0|m9pf40,38,41,1|mly2zz,38,41,1|mly300,41,40,0|mssgfz,41,40,0|mssgg0,38,41,1|n4o5nz,38,41,1|n4o5o0,41,40,0|nbij3z,41,40,0|nbij40,38,41,1|o776zz,38,41,1|o77700,41,40,0|obvsfz,41,40,0|obvsg0,38,41,1|ohn4bz,38,41,1|ohn4c0,38,41,0|NaN,38,41,0\",\"Antarctica/Rothera|,59,1,0|3lxrzz,59,1,0|3lxs00,38,41,0|NaN,38,41,0\",\"Antarctica/Syowa|,0,196,0|-bwgbbh,0,196,0|-bwgbbg,100,4,0|NaN,100,4,0\",\"Antarctica/Troll|,59,1,0|ibrunz,59,1,0|ibruo0,16,1,0|idzk3z,16,1,0|idzk40,101,9,1|ip5erz,101,9,1|ip5es0,16,1,0|iwpmrz,16,1,0|iwpms0,101,9,1|j7vhfz,101,9,1|j7vhg0,16,1,0|jffpfz,16,1,0|jffpg0,101,9,1|jqlk3z,101,9,1|jqlk40,16,1,0|jyiqrz,16,1,0|jyiqs0,101,9,1|k9bmrz,101,9,1|k9bms0,16,1,0|kh8tfz,16,1,0|kh8tg0,101,9,1|ks1pfz,101,9,1|ks1pg0,16,1,0|kzyw3z,16,1,0|kzyw40,101,9,1|lb4qrz,101,9,1|lb4qs0,16,1,0|lioyrz,16,1,0|lioys0,101,9,1|ltutfz,101,9,1|ltutg0,16,1,0|m1f1fz,16,1,0|m1f1g0,101,9,1|mckw3z,101,9,1|mckw40,16,1,0|mki2rz,16,1,0|mki2s0,101,9,1|mvayrz,101,9,1|mvays0,16,1,0|n385fz,16,1,0|n385g0,101,9,1|ne11fz,101,9,1|ne11g0,16,1,0|nly83z,16,1,0|nly840,101,9,1|nwr43z,101,9,1|nwr440,16,1,0|o4oarz,16,1,0|o4oas0,101,9,1|ofu5fz,101,9,1|ofu5g0,16,1,0|onedfz,16,1,0|onedg0,101,9,1|oyk83z,101,9,1|oyk840,16,1,0|p64g3z,16,1,0|p64g40,101,9,1|phaarz,101,9,1|phaas0,16,1,0|pp7hfz,16,1,0|pp7hg0,101,9,1|q00dfz,101,9,1|q00dg0,16,1,0|q7xk3z,16,1,0|q7xk40,101,9,1|qiqg3z,101,9,1|qiqg40,16,1,0|qqnmrz,16,1,0|qqnms0,101,9,1|r1thfz,101,9,1|r1thg0,16,1,0|r9dpfz,16,1,0|r9dpg0,101,9,1|rkjk3z,101,9,1|rkjk40,16,1,0|rs3s3z,16,1,0|rs3s40,101,9,1|s39mrz,101,9,1|s39ms0,16,1,0|sb6tfz,16,1,0|sb6tg0,101,9,1|slzpfz,101,9,1|slzpg0,16,1,0|stww3z,16,1,0|stww40,101,9,1|t4ps3z,101,9,1|t4ps40,16,1,0|tcmyrz,16,1,0|tcmys0,101,9,1|tnfurz,101,9,1|tnfus0,16,1,0|tvd1fz,16,1,0|tvd1g0,101,9,1|u6iw3z,101,9,1|u6iw40,16,1,0|ue343z,16,1,0|ue3440,101,9,1|up8yrz,101,9,1|up8ys0,16,1,0|uwt6rz,16,1,0|uwt6s0,101,9,1|v7z1fz,101,9,1|v7z1g0,16,1,0|vfw83z,16,1,0|vfw840,101,9,1|vqp43z,101,9,1|vqp440,16,1,0|vymarz,16,1,0|vymas0,101,9,1|w9f6rz,101,9,1|w9f6s0,16,1,0|whcdfz,16,1,0|whcdg0,101,9,1|wsi83z,101,9,1|wsi840,16,1,0|x02g3z,16,1,0|x02g40,101,9,1|xb8arz,101,9,1|xb8as0,16,1,0|xisirz,16,1,0|xisis0,101,9,1|xtydfz,101,9,1|xtydg0,16,1,0|y1ilfz,16,1,0|y1ilg0,101,9,1|ycog3z,101,9,1|ycog40,16,1,0|yklmrz,16,1,0|yklms0,101,9,1|yveirz,101,9,1|yveis0,16,1,0|z3bpfz,16,1,0|z3bpg0,101,9,1|ze4lfz,101,9,1|ze4lg0,16,1,0|zm1s3z,16,1,0|zm1s40,101,9,1|zx7mrz,101,9,1|zx7ms0,16,1,0|104rurz,16,1,0|104rus0,101,9,1|10fxpfz,101,9,1|10fxpg0,16,1,0|10nhxfz,16,1,0|10nhxg0,101,9,1|10yns3z,101,9,1|10yns40,16,1,0|116kyrz,16,1,0|116kys0,101,9,1|11hdurz,101,9,1|11hdus0,16,1,0|11pb1fz,16,1,0|11pb1g0,101,9,1|1203xfz,101,9,1|1203xg0,16,1,0|128143z,16,1,0|1281440,101,9,1|12iu03z,101,9,1|12iu040,16,1,0|12qr6rz,16,1,0|12qr6s0,101,9,1|131x1fz,101,9,1|131x1g0,16,1,0|139h9fz,16,1,0|139h9g0,101,9,1|13kn43z,101,9,1|13kn440,16,1,0|13s7c3z,16,1,0|13s7c40,101,9,1|143d6rz,101,9,1|143d6s0,16,1,0|14badfz,16,1,0|14badg0,101,9,1|14m39fz,101,9,1|14m39g0,16,1,0|14u0g3z,16,1,0|14u0g40,101,9,1|154tc3z,101,9,1|154tc40,16,1,0|15cqirz,16,1,0|15cqis0,101,9,1|15nwdfz,101,9,1|15nwdg0,16,1,0|15vglfz,16,1,0|15vglg0,101,9,1|166mg3z,101,9,1|166mg40,16,1,0|16e6o3z,16,1,0|16e6o40,101,9,1|16pcirz,101,9,1|16pcis0,16,1,0|16x9pfz,16,1,0|16x9pg0,101,9,1|1782lfz,101,9,1|1782lg0,16,1,0|17fzs3z,16,1,0|17fzs40,101,9,1|17qso3z,101,9,1|17qso40,16,1,0|17ypurz,16,1,0|17ypus0,101,9,1|189iqrz,101,9,1|189iqs0,16,1,0|18hfxfz,16,1,0|18hfxg0,101,9,1|18sls3z,101,9,1|18sls40,16,1,0|190603z,16,1,0|1906040,101,9,1|19bburz,101,9,1|19bbus0,16,1,0|19iw2rz,16,1,0|19iw2s0,101,9,1|19u1xfz,101,9,1|19u1xg0,16,1,0|1a1z43z,16,1,0|1a1z440,101,9,1|1acs03z,101,9,1|1acs040,16,1,0|1akp6rz,16,1,0|1akp6s0,101,9,1|1avi2rz,101,9,1|1avi2s0,16,1,0|1b3f9fz,16,1,0|1b3f9g0,101,9,1|1bel43z,101,9,1|1bel440,16,1,0|1bm5c3z,16,1,0|1bm5c40,101,9,1|1bxb6rz,101,9,1|1bxb6s0,16,1,0|1c4verz,16,1,0|1c4ves0,101,9,1|1cg19fz,101,9,1|1cg19g0,16,1,0|1cnlhfz,16,1,0|1cnlhg0,101,9,1|1cyrc3z,101,9,1|1cyrc40,16,1,0|1d6oirz,16,1,0|1d6ois0,101,9,1|1dhherz,101,9,1|1dhhes0,16,1,0|1dpelfz,16,1,0|1dpelg0,101,9,1|1e07hfz,101,9,1|1e07hg0,16,1,0|1e84o3z,16,1,0|1e84o40,101,9,1|1ejairz,101,9,1|1ejais0,16,1,0|1equqrz,16,1,0|1equqs0,101,9,1|1f20lfz,101,9,1|1f20lg0,16,1,0|1f9ktfz,16,1,0|1f9ktg0,101,9,1|1fkqo3z,101,9,1|1fkqo40,16,1,0|1fsnurz,16,1,0|1fsnus0,101,9,1|1g3gqrz,101,9,1|1g3gqs0,16,1,0|1gbdxfz,16,1,0|1gbdxg0,101,9,1|1gm6tfz,101,9,1|1gm6tg0,16,1,0|1gu403z,16,1,0|1gu4040,101,9,1|1h4ww3z,101,9,1|1h4ww40,16,1,0|1hcu2rz,16,1,0|1hcu2s0,101,9,1|1hnzxfz,101,9,1|1hnzxg0,16,1,0|1hvk5fz,16,1,0|1hvk5g0,101,9,1|1i6q03z,101,9,1|1i6q040,16,1,0|1iea83z,16,1,0|1iea840,101,9,1|1ipg2rz,101,9,1|1ipg2s0,16,1,0|1ixd9fz,16,1,0|1ixd9g0,101,9,1|1j865fz,101,9,1|1j865g0,16,1,0|1jg3c3z,16,1,0|1jg3c40,101,9,1|1jqw83z,101,9,1|1jqw840,16,1,0|1jyterz,16,1,0|1jytes0,101,9,1|1k9z9fz,101,9,1|1k9z9g0,16,1,0|1khjhfz,16,1,0|1khjhg0,101,9,1|1kspc3z,101,9,1|1kspc40,16,1,0|1l09k3z,16,1,0|1l09k40,101,9,1|1lbferz,101,9,1|1lbfes0,16,1,0|1ljclfz,16,1,0|1ljclg0,101,9,1|1lu5hfz,101,9,1|1lu5hg0,16,1,0|1m22o3z,16,1,0|1m22o40,101,9,1|1mcvk3z,101,9,1|1mcvk40,16,1,0|1mksqrz,16,1,0|1mksqs0,101,9,1|1mvlmrz,101,9,1|1mvlms0,16,1,0|1n3itfz,16,1,0|1n3itg0,101,9,1|1neoo3z,101,9,1|1neoo40,16,1,0|1nm8w3z,16,1,0|1nm8w40,101,9,1|1nxeqrz,101,9,1|1nxeqs0,16,1,0|1o4yyrz,16,1,0|1o4yys0,101,9,1|1og4tfz,101,9,1|1og4tg0,16,1,0|1oo203z,16,1,0|1oo2040,101,9,1|1oyuw3z,101,9,1|1oyuw40,16,1,0|1p6s2rz,16,1,0|1p6s2s0,101,9,1|1phkyrz,101,9,1|1phkys0,16,1,0|1ppi5fz,16,1,0|1ppi5g0,101,9,1|1q0o03z,101,9,1|1q0o040,16,1,0|1q8883z,16,1,0|1q88840,101,9,1|1qje2rz,101,9,1|1qje2s0,16,1,0|1qqyarz,16,1,0|1qqyas0,101,9,1|1r245fz,101,9,1|1r245g0,16,1,0|1r9odfz,16,1,0|1r9odg0,101,9,1|1rku83z,101,9,1|1rku840,16,1,0|1rsrerz,16,1,0|1rsres0,101,9,1|1s3karz,101,9,1|1s3kas0,16,1,0|1sbhhfz,16,1,0|1sbhhg0,101,9,1|1smadfz,101,9,1|1smadg0,16,1,0|1su7k3z,16,1,0|1su7k40,101,9,1|1t5derz,101,9,1|1t5des0,16,1,0|1tcxmrz,16,1,0|1tcxms0,101,9,1|1to3hfz,101,9,1|1to3hg0,16,1,0|1tvnpfz,16,1,0|1tvnpg0,101,9,1|1u6tk3z,101,9,1|1u6tk40,16,1,0|1ueqqrz,16,1,0|1ueqqs0,101,9,1|1upjmrz,101,9,1|1upjms0,16,1,0|1uxgtfz,16,1,0|1uxgtg0,101,9,1|1v89pfz,101,9,1|1v89pg0,16,1,0|1vg6w3z,16,1,0|1vg6w40,101,9,1|1vqzs3z,101,9,1|1vqzs40,16,1,0|NaN,16,1,0\",\"Antarctica/Vostok|,59,1,0|-6aaao1,59,1,0|-6aaao0,96,190,0|NaN,96,190,0\",\"Arctic/Longyearbyen|,0,197,0|-1353tzp,0,197,0|-1353tzo,8,8,0|-rzayo1,8,8,0|-rzayo0,9,9,1|-rskiw1,9,9,1|-rskiw0,8,8,0|-fc7s81,8,8,0|-fc7s80,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6dp81,9,9,1|-d6dp80,8,8,0|-cx0nw1,8,8,0|-cx0nw0,9,9,1|-cnnmk1,9,9,1|-cnnmk0,8,8,0|-5mxh81,8,8,0|-5mxh80,9,9,1|-5d7h81,9,9,1|-5d7h80,8,8,0|-53ufw1,8,8,0|-53ufw0,9,9,1|-4uhek1,9,9,1|-4uhek0,8,8,0|-4l4d81,8,8,0|-4l4d80,9,9,1|-4brbw1,9,9,1|-4brbw0,8,8,0|-42eak1,8,8,0|-42eak0,9,9,1|-3t1981,9,9,1|-3t1980,8,8,0|-3jo7w1,8,8,0|-3jo7w0,9,9,1|-3ab6k1,9,9,1|-3ab6k0,8,8,0|-30y581,8,8,0|-30y580,9,9,1|-2r8581,9,9,1|-2r8580,8,8,0|-2g2ak1,8,8,0|-2g2ak0,9,9,1|-28i2k1,9,9,1|-28i2k0,8,8,0|5cstfz,8,8,0|5cstg0,9,9,1|5lsw3z,9,9,1|5lsw40,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Asia/Aden|,0,196,0|-bwgbbh,0,196,0|-bwgbbg,100,4,0|NaN,100,4,0\",\"Asia/Almaty|,0,198,0|-nu1a91,0,198,0|-nu1a90,91,186,0|-kmr9w1,91,186,0|-kmr9w0,96,190,0|5vaxzz,96,190,0|5vay00,90,185,1|64pr7z,90,185,1|64pr80,96,190,0|6e2vbz,96,190,0|6e2vc0,90,185,1|6nhojz,90,185,1|6nhok0,96,190,0|6wusnz,96,190,0|6wuso0,90,185,1|769lvz,90,185,1|769lw0,96,190,0|7foknz,96,190,0|7foko0,90,185,1|7p1rjz,90,185,1|7p1rk0,96,190,0|7yesvz,96,190,0|7yesw0,90,185,1|87ru7z,90,185,1|87ru80,96,190,0|8h4vjz,96,190,0|8h4vk0,90,185,1|8qhwvz,90,185,1|8qhww0,96,190,0|8zuy7z,96,190,0|8zuy80,90,185,1|997zjz,90,185,1|997zk0,96,190,0|9il0vz,96,190,0|9il0w0,90,185,1|9ry27z,90,185,1|9ry280,96,190,0|a1b3jz,96,190,0|a1b3k0,90,185,1|aao4vz,90,185,1|aao4w0,96,190,0|ak167z,96,190,0|ak1680,90,185,1|atr67z,90,185,1|atr680,96,190,0|b347jz,96,190,0|b347k0,96,190,1|bchbnz,96,190,1|bchbo0,91,186,0|bi8qbz,91,186,0|bi8qc0,96,190,0|blua7z,96,190,0|blua80,90,185,1|bv7bjz,90,185,1|bv7bk0,96,190,0|c4kcvz,96,190,0|c4kcw0,90,185,1|cdxe7z,90,185,1|cdxe80,96,190,0|cnafjz,96,190,0|cnafk0,90,185,1|cwngvz,90,185,1|cwngw0,96,190,0|d60i7z,96,190,0|d60i80,90,185,1|dfdjjz,90,185,1|dfdjk0,96,190,0|dp3jjz,96,190,0|dp3jk0,90,185,1|dzwfjz,90,185,1|dzwfk0,96,190,0|e7tm7z,96,190,0|e7tm80,90,185,1|eimi7z,90,185,1|eimi80,96,190,0|eqjovz,96,190,0|eqjow0,90,185,1|f1ckvz,90,185,1|f1ckw0,96,190,0|f99rjz,96,190,0|f99rk0,90,185,1|fkfm7z,90,185,1|fkfm80,96,190,0|frzu7z,96,190,0|frzu80,90,185,1|g35ovz,90,185,1|g35ow0,96,190,0|gapwvz,96,190,0|gapww0,90,185,1|glvrjz,90,185,1|glvrk0,96,190,0|gtsy7z,96,190,0|gtsy80,90,185,1|h4lu7z,90,185,1|h4lu80,96,190,0|hcj0vz,96,190,0|hcj0w0,90,185,1|hnbwvz,90,185,1|hnbww0,96,190,0|hv93jz,96,190,0|hv93k0,90,185,1|i6ey7z,90,185,1|i6ey80,96,190,0|NaN,96,190,0\",\"Asia/Amman|,0,199,0|-kcrtbl,0,199,0|-kcrtbk,14,9,0|1sed3z,14,9,0|1sed40,15,4,1|1yeybz,15,4,1|1yeyc0,14,9,0|29bmfz,14,9,0|29bmg0,15,4,1|2h6vnz,15,4,1|2h6vo0,14,9,0|2s3jrz,14,9,0|2s3js0,15,4,1|2zyszz,15,4,1|2zyt00,14,9,0|3axbrz,14,9,0|3axbs0,15,4,1|3kdznz,15,4,1|3kdzo0,14,9,0|3tp93z,14,9,0|3tp940,15,4,1|41kibz,15,4,1|41kic0,14,9,0|4cfbrz,14,9,0|4cfbs0,15,4,1|4kakzz,15,4,1|4kal00,14,9,0|7ygt3z,14,9,0|7ygt40,15,4,1|87vmbz,15,4,1|87vmc0,14,9,0|8heafz,14,9,0|8heag0,15,4,1|8qr8zz,15,4,1|8qr900,14,9,0|904d3z,14,9,0|904d40,15,4,1|99hbnz,15,4,1|99hbo0,14,9,0|9iufrz,14,9,0|9iufs0,15,4,1|9skczz,15,4,1|9skd00,14,9,0|a3ivrz,14,9,0|a3ivs0,15,4,1|abafnz,15,4,1|abafo0,14,9,0|alqfrz,14,9,0|alqfs0,15,4,1|au0ibz,15,4,1|au0ic0,14,9,0|b3zufz,14,9,0|b3zug0,15,4,1|bcdmbz,15,4,1|bcdmc0,14,9,0|bmgnrz,14,9,0|bmgns0,15,4,1|bvgnnz,15,4,1|bvgno0,14,9,0|c4trrz,14,9,0|c4trs0,15,4,1|ce6qbz,15,4,1|ce6qc0,14,9,0|cnjufz,14,9,0|cnjug0,15,4,1|cw6vnz,15,4,1|cw6vo0,14,9,0|d6mvrz,14,9,0|d6mvs0,15,4,1|dex13z,15,4,1|dex140,14,9,0|dpcyfz,14,9,0|dpcyg0,15,4,1|dy02fz,15,4,1|dy02g0,14,9,0|e8313z,14,9,0|e83140,15,4,1|egq53z,15,4,1|egq540,14,9,0|eqt3rz,14,9,0|eqt3s0,15,4,1|ezg7rz,15,4,1|ezg7s0,14,9,0|fe5ufz,14,9,0|fe5ug0,15,4,1|fij93z,15,4,1|fij940,14,9,0|fs7efz,14,9,0|fs7eg0,15,4,1|g1mafz,15,4,1|g1mag0,14,9,0|gaxh3z,14,9,0|gaxh40,15,4,1|gkcd3z,15,4,1|gkcd40,14,9,0|gtpefz,14,9,0|gtpeg0,15,4,1|h32frz,15,4,1|h32fs0,14,9,0|hcfh3z,14,9,0|hcfh40,15,4,1|hn8d3z,15,4,1|hn8d40,14,9,0|hv5jrz,14,9,0|hv5js0,15,4,1|i5lh3z,15,4,1|i5lh40,14,9,0|ie8l3z,14,9,0|ie8l40,15,4,1|inlmfz,15,4,1|inlmg0,14,9,0|iwynrz,14,9,0|iwyns0,15,4,1|j7rjrz,15,4,1|j7rjs0,14,9,0|jfoqfz,14,9,0|jfoqg0,15,4,1|jqhmfz,15,4,1|jqhmg0,14,9,0|jyet3z,14,9,0|jyet40,15,4,1|k9knrz,15,4,1|k9kns0,14,9,0|kh4vrz,14,9,0|kh4vs0,15,4,1|ksaqfz,15,4,1|ksaqg0,14,9,0|kzuyfz,14,9,0|kzuyg0,15,4,1|lb0t3z,15,4,1|lb0t40,14,9,0|lixzrz,14,9,0|lixzs0,15,4,1|ltqvrz,15,4,1|ltqvs0,14,9,0|m1o2fz,14,9,0|m1o2g0,15,4,1|my2nnz,15,4,1|my2no0,14,9,0|n347rz,14,9,0|n347s0,15,4,1|nea2fz,15,4,1|nea2g0,14,9,0|nluafz,14,9,0|nluag0,15,4,1|nx053z,15,4,1|nx0540,14,9,0|o4xbrz,14,9,0|o4xbs0,15,4,1|ofq7rz,15,4,1|ofq7s0,14,9,0|onnefz,14,9,0|onneg0,15,4,1|oygafz,15,4,1|oygag0,14,9,0|p6dh3z,14,9,0|p6dh40,15,4,1|ph6d3z,15,4,1|ph6d40,14,9,0|pp3jrz,14,9,0|pp3js0,15,4,1|pzwfrz,15,4,1|pzwfs0,14,9,0|q7tmfz,14,9,0|q7tmg0,15,4,1|qizh3z,15,4,1|qizh40,14,9,0|qqjp3z,14,9,0|qqjp40,15,4,1|r1pjrz,15,4,1|r1pjs0,14,9,0|r7tx3z,14,9,0|r7tx40,15,4,1|rkfmfz,15,4,1|rkfmg0,14,9,0|rqjzrz,14,9,0|rqjzs0,15,4,1|s35p3z,15,4,1|s35p40,14,9,0|s9n13z,14,9,0|s9n140,15,4,1|slvrrz,15,4,1|slvrs0,14,9,0|ssd3rz,14,9,0|ssd3s0,15,4,1|t4yt3z,15,4,1|t4yt40,14,9,0|tb36fz,14,9,0|tb36g0,15,4,1|tnovrz,15,4,1|tnovs0,14,9,0|ttt93z,14,9,0|ttt940,15,4,1|u6eyfz,15,4,1|u6eyg0,14,9,0|ucjbrz,14,9,0|ucjbs0,15,4,1|up513z,15,4,1|up5140,14,9,0|uv9efz,14,9,0|uv9eg0,15,4,1|v7v3rz,15,4,1|v7v3s0,14,9,0|vecfrz,14,9,0|vecfs0,15,4,1|vql6fz,15,4,1|vql6g0,14,9,0|vx2ifz,14,9,0|vx2ig0,15,4,1|w9o7rz,15,4,1|w9o7s0,14,9,0|wfsl3z,14,9,0|wfsl40,15,4,1|wseafz,15,4,1|wseag0,14,9,0|wyinrz,14,9,0|wyins0,15,4,1|xb4d3z,15,4,1|xb4d40,14,9,0|xh8qfz,14,9,0|xh8qg0,15,4,1|xtufrz,15,4,1|xtufs0,14,9,0|xzyt3z,14,9,0|xzyt40,15,4,1|yckifz,15,4,1|yckig0,14,9,0|yj1ufz,14,9,0|yj1ug0,15,4,1|yvnjrz,15,4,1|yvnjs0,14,9,0|z1rx3z,14,9,0|z1rx40,15,4,1|zedmfz,15,4,1|zedmg0,14,9,0|zkhzrz,14,9,0|zkhzs0,15,4,1|zx3p3z,15,4,1|zx3p40,14,9,0|10382fz,14,9,0|10382g0,15,4,1|10ftrrz,15,4,1|10ftrs0,14,9,0|10ly53z,14,9,0|10ly540,15,4,1|10yjufz,15,4,1|10yjug0,14,9,0|11516fz,14,9,0|11516g0,15,4,1|11h9x3z,15,4,1|11h9x40,14,9,0|11nr93z,14,9,0|11nr940,15,4,1|120cyfz,15,4,1|120cyg0,14,9,0|126hbrz,14,9,0|126hbs0,15,4,1|12j313z,15,4,1|12j3140,14,9,0|12p7efz,14,9,0|12p7eg0,15,4,1|131t3rz,15,4,1|131t3s0,14,9,0|137xh3z,14,9,0|137xh40,15,4,1|13kj6fz,15,4,1|13kj6g0,14,9,0|13qnjrz,14,9,0|13qnjs0,15,4,1|143993z,15,4,1|1439940,14,9,0|149ql3z,14,9,0|149ql40,15,4,1|14lzbrz,15,4,1|14lzbs0,14,9,0|14sgnrz,14,9,0|14sgns0,15,4,1|1552d3z,15,4,1|1552d40,14,9,0|15b6qfz,14,9,0|15b6qg0,15,4,1|15nsfrz,15,4,1|15nsfs0,14,9,0|15twt3z,14,9,0|15twt40,15,4,1|166iifz,15,4,1|166iig0,14,9,0|16cmvrz,14,9,0|16cmvs0,15,4,1|16p8l3z,15,4,1|16p8l40,14,9,0|16vpx3z,14,9,0|16vpx40,15,4,1|177ynrz,15,4,1|177yns0,14,9,0|17efzrz,14,9,0|17efzs0,15,4,1|17r1p3z,15,4,1|17r1p40,14,9,0|17x62fz,14,9,0|17x62g0,15,4,1|189rrrz,15,4,1|189rrs0,14,9,0|18fw53z,14,9,0|18fw540,15,4,1|18shufz,15,4,1|18shug0,14,9,0|18ym7rz,14,9,0|18ym7s0,15,4,1|19b7x3z,15,4,1|19b7x40,14,9,0|19hcafz,14,9,0|19hcag0,15,4,1|19txzrz,15,4,1|19txzs0,14,9,0|1a0fbrz,14,9,0|1a0fbs0,15,4,1|1aco2fz,15,4,1|1aco2g0,14,9,0|1aj5efz,14,9,0|1aj5eg0,15,4,1|1avr3rz,15,4,1|1avr3s0,14,9,0|1b1vh3z,14,9,0|1b1vh40,15,4,1|1beh6fz,15,4,1|1beh6g0,14,9,0|1bkljrz,14,9,0|1bkljs0,15,4,1|1bx793z,15,4,1|1bx7940,14,9,0|1c3bmfz,14,9,0|1c3bmg0,15,4,1|1cfxbrz,15,4,1|1cfxbs0,14,9,0|1cm1p3z,14,9,0|1cm1p40,15,4,1|1cynefz,15,4,1|1cyneg0,14,9,0|1d54qfz,14,9,0|1d54qg0,15,4,1|1dhqfrz,15,4,1|1dhqfs0,14,9,0|1dnut3z,14,9,0|1dnut40,15,4,1|1e0gifz,15,4,1|1e0gig0,14,9,0|1e6kvrz,14,9,0|1e6kvs0,15,4,1|1ej6l3z,15,4,1|1ej6l40,14,9,0|1epayfz,14,9,0|1epayg0,15,4,1|1f1wnrz,15,4,1|1f1wns0,14,9,0|1f8113z,14,9,0|1f81140,15,4,1|1fkmqfz,15,4,1|1fkmqg0,14,9,0|1fr42fz,14,9,0|1fr42g0,15,4,1|1g3ct3z,15,4,1|1g3ct40,14,9,0|1g9u53z,14,9,0|1g9u540,15,4,1|1gmfufz,15,4,1|1gmfug0,14,9,0|1gsk7rz,14,9,0|1gsk7s0,15,4,1|1h55x3z,15,4,1|1h55x40,14,9,0|1hbaafz,14,9,0|1hbaag0,15,4,1|1hnvzrz,15,4,1|1hnvzs0,14,9,0|1hu0d3z,14,9,0|1hu0d40,15,4,1|1i6m2fz,15,4,1|1i6m2g0,14,9,0|1icqfrz,14,9,0|1icqfs0,15,4,1|1ipc53z,15,4,1|1ipc540,14,9,0|1ivth3z,14,9,0|1ivth40,15,4,1|1j827rz,15,4,1|1j827s0,14,9,0|1jejjrz,14,9,0|1jejjs0,15,4,1|1jr593z,15,4,1|1jr5940,14,9,0|1jx9mfz,14,9,0|1jx9mg0,15,4,1|1k9vbrz,15,4,1|1k9vbs0,14,9,0|1kfzp3z,14,9,0|1kfzp40,15,4,1|1kslefz,15,4,1|1ksleg0,14,9,0|1kyprrz,14,9,0|1kyprs0,15,4,1|1lbbh3z,15,4,1|1lbbh40,14,9,0|1lhst3z,14,9,0|1lhst40,15,4,1|1lu1jrz,15,4,1|1lu1js0,14,9,0|1m0ivrz,14,9,0|1m0ivs0,15,4,1|1md4l3z,15,4,1|1md4l40,14,9,0|1mj8yfz,14,9,0|1mj8yg0,15,4,1|1mvunrz,15,4,1|1mvuns0,14,9,0|1n1z13z,14,9,0|1n1z140,15,4,1|1nekqfz,15,4,1|1nekqg0,14,9,0|1nkp3rz,14,9,0|1nkp3s0,15,4,1|1nxat3z,15,4,1|1nxat40,14,9,0|1o3f6fz,14,9,0|1o3f6g0,15,4,1|1og0vrz,15,4,1|1og0vs0,14,9,0|1omi7rz,14,9,0|1omi7s0,15,4,1|1oyqyfz,15,4,1|1oyqyg0,14,9,0|1p58afz,14,9,0|1p58ag0,15,4,1|1phtzrz,15,4,1|1phtzs0,14,9,0|1pnyd3z,14,9,0|1pnyd40,15,4,1|1q0k2fz,15,4,1|1q0k2g0,14,9,0|1q6ofrz,14,9,0|1q6ofs0,15,4,1|1qja53z,15,4,1|1qja540,14,9,0|1qpeifz,14,9,0|1qpeig0,15,4,1|1r207rz,15,4,1|1r207s0,14,9,0|1r84l3z,14,9,0|1r84l40,15,4,1|1rkqafz,15,4,1|1rkqag0,14,9,0|1rr7mfz,14,9,0|1rr7mg0,15,4,1|1s3tbrz,15,4,1|1s3tbs0,14,9,0|1s9xp3z,14,9,0|1s9xp40,15,4,1|1smjefz,15,4,1|1smjeg0,14,9,0|1ssnrrz,14,9,0|1ssnrs0,15,4,1|1t59h3z,15,4,1|1t59h40,14,9,0|1tbdufz,14,9,0|1tbdug0,15,4,1|1tnzjrz,15,4,1|1tnzjs0,14,9,0|1tu3x3z,14,9,0|1tu3x40,15,4,1|1u6pmfz,15,4,1|1u6pmg0,14,9,0|1ud6yfz,14,9,0|1ud6yg0,15,4,1|1upfp3z,15,4,1|1upfp40,14,9,0|1uvx13z,14,9,0|1uvx140,15,4,1|1v8iqfz,15,4,1|1v8iqg0,14,9,0|1ven3rz,14,9,0|1ven3s0,15,4,1|1vr8t3z,15,4,1|1vr8t40,14,9,0|NaN,14,9,0\",\"Asia/Anadyr|,0,200,0|-nu1sv9,0,200,0|-nu1sv8,102,194,0|-kmrtc1,102,194,0|-kmrtc0,103,195,0|5vaejz,103,195,0|5vaek0,104,201,1|64p7rz,104,201,1|64p7s0,103,195,0|6e2bvz,103,195,0|6e2bw0,103,195,1|6nh7vz,103,195,1|6nh7w0,102,194,0|6wubzz,102,194,0|6wuc00,103,195,1|76957z,103,195,1|769580,102,194,0|7fo3zz,102,194,0|7fo400,103,195,1|7p1avz,103,195,1|7p1aw0,102,194,0|7yec7z,102,194,0|7yec80,103,195,1|87rdjz,103,195,1|87rdk0,102,194,0|8h4evz,102,194,0|8h4ew0,103,195,1|8qhg7z,103,195,1|8qhg80,102,194,0|8zuhjz,102,194,0|8zuhk0,103,195,1|997ivz,103,195,1|997iw0,102,194,0|9ikk7z,102,194,0|9ikk80,103,195,1|9rxljz,103,195,1|9rxlk0,102,194,0|a1amvz,102,194,0|a1amw0,103,195,1|aano7z,103,195,1|aano80,102,194,0|ak0pjz,102,194,0|ak0pk0,103,195,1|atqpjz,103,195,1|atqpk0,102,194,0|b33qvz,102,194,0|b33qw0,102,194,1|bcguzz,102,194,1|bcgv00,89,184,0|bi89nz,89,184,0|bi89o0,102,194,0|blttjz,102,194,0|blttk0,103,195,1|bv6uvz,103,195,1|bv6uw0,102,194,0|c4jw7z,102,194,0|c4jw80,103,195,1|cdwxjz,103,195,1|cdwxk0,102,194,0|cn9yvz,102,194,0|cn9yw0,103,195,1|cwn07z,103,195,1|cwn080,102,194,0|d601jz,102,194,0|d601k0,103,195,1|dfd2vz,103,195,1|dfd2w0,102,194,0|dp32vz,102,194,0|dp32w0,103,195,1|dzvyvz,103,195,1|dzvyw0,102,194,0|e7t5jz,102,194,0|e7t5k0,103,195,1|eim1jz,103,195,1|eim1k0,102,194,0|eqj87z,102,194,0|eqj880,103,195,1|f1c47z,103,195,1|f1c480,102,194,0|f99avz,102,194,0|f99aw0,103,195,1|fkf5jz,103,195,1|fkf5k0,102,194,0|frzdjz,102,194,0|frzdk0,103,195,1|g3587z,103,195,1|g35880,102,194,0|gapg7z,102,194,0|gapg80,103,195,1|glvavz,103,195,1|glvaw0,102,194,0|gtshjz,102,194,0|gtshk0,103,195,1|h4ldjz,103,195,1|h4ldk0,102,194,0|hcik7z,102,194,0|hcik80,103,195,1|hnbg7z,103,195,1|hnbg80,102,194,0|hv8mvz,102,194,0|hv8mw0,103,195,1|i6ehjz,103,195,1|i6ehk0,102,194,0|idypjz,102,194,0|idypk0,103,195,1|ip4k7z,103,195,1|ip4k80,102,194,0|iwos7z,102,194,0|iwos80,103,195,1|j7umvz,103,195,1|j7umw0,102,194,0|jfeuvz,102,194,0|jfeuw0,103,195,1|jqkpjz,103,195,1|jqkpk0,102,194,0|jyhw7z,102,194,0|jyhw80,103,195,1|k9as7z,103,195,1|k9as80,102,194,0|kh7yvz,102,194,0|kh7yw0,103,195,1|ks0uvz,103,195,1|ks0uw0,102,194,0|kzy1jz,102,194,0|kzy1k0,102,194,1|lb3yzz,102,194,1|lb3z00,89,184,0|lio6zz,89,184,0|lio700,102,194,0|NaN,102,194,0\",\"Asia/Aqtau|,0,202,0|-nu15b5,0,202,0|-nu15b4,105,203,0|-kmr741,105,203,0|-kmr740,91,186,0|64pwrz,91,186,0|64pws0,96,190,0|6e2vbz,96,190,0|6e2vc0,96,190,1|6nhrbz,96,190,1|6nhrc0,91,186,0|6wuvfz,91,186,0|6wuvg0,96,190,1|769onz,96,190,1|769oo0,91,186,0|7fonfz,91,186,0|7fong0,96,190,1|7p1ubz,96,190,1|7p1uc0,91,186,0|7yevnz,91,186,0|7yevo0,96,190,1|87rwzz,96,190,1|87rx00,91,186,0|8h4ybz,91,186,0|8h4yc0,96,190,1|8qhznz,96,190,1|8qhzo0,91,186,0|8zv0zz,91,186,0|8zv100,96,190,1|9982bz,96,190,1|9982c0,91,186,0|9il3nz,91,186,0|9il3o0,96,190,1|9ry4zz,96,190,1|9ry500,91,186,0|a1b6bz,91,186,0|a1b6c0,96,190,1|aao7nz,96,190,1|aao7o0,91,186,0|ak18zz,91,186,0|ak1900,96,190,1|atr8zz,96,190,1|atr900,91,186,0|b34abz,91,186,0|b34ac0,91,186,1|bchefz,91,186,1|bcheg0,105,203,0|bi8t3z,105,203,0|bi8t40,91,186,0|bluczz,91,186,0|blud00,96,190,1|bv7ebz,96,190,1|bv7ec0,91,186,0|c4kfnz,91,186,0|c4kfo0,96,190,1|cdxgzz,96,190,1|cdxh00,91,186,0|cnaibz,91,186,0|cnaic0,96,190,1|cwnjnz,96,190,1|cwnjo0,105,203,0|d60nrz,105,203,0|d60ns0,91,186,1|dfdp3z,91,186,1|dfdp40,105,203,0|dp3p3z,105,203,0|dp3p40,91,186,1|dzwl3z,91,186,1|dzwl40,105,203,0|e7trrz,105,203,0|e7trs0,91,186,1|eimnrz,91,186,1|eimns0,105,203,0|eqjufz,105,203,0|eqjug0,91,186,1|f1cqfz,91,186,1|f1cqg0,105,203,0|f99x3z,105,203,0|f99x40,91,186,1|fkfrrz,91,186,1|fkfrs0,105,203,0|frzzrz,105,203,0|frzzs0,91,186,1|g35ufz,91,186,1|g35ug0,105,203,0|gaq2fz,105,203,0|gaq2g0,91,186,1|glvx3z,91,186,1|glvx40,105,203,0|gtt3rz,105,203,0|gtt3s0,91,186,1|h4lzrz,91,186,1|h4lzs0,105,203,0|hcj6fz,105,203,0|hcj6g0,91,186,1|hnc2fz,91,186,1|hnc2g0,105,203,0|hv993z,105,203,0|hv9940,91,186,1|i6f3rz,91,186,1|i6f3s0,91,186,0|NaN,91,186,0\",\"Asia/Aqtobe|,0,204,0|-nu16l5,0,204,0|-nu16l4,105,203,0|-kmr741,105,203,0|-kmr740,91,186,0|5vb0rz,91,186,0|5vb0s0,96,190,1|64ptzz,96,190,1|64pu00,96,190,0|6e2vbz,96,190,0|6e2vc0,96,190,1|6nhrbz,96,190,1|6nhrc0,91,186,0|6wuvfz,91,186,0|6wuvg0,96,190,1|769onz,96,190,1|769oo0,91,186,0|7fonfz,91,186,0|7fong0,96,190,1|7p1ubz,96,190,1|7p1uc0,91,186,0|7yevnz,91,186,0|7yevo0,96,190,1|87rwzz,96,190,1|87rx00,91,186,0|8h4ybz,91,186,0|8h4yc0,96,190,1|8qhznz,96,190,1|8qhzo0,91,186,0|8zv0zz,91,186,0|8zv100,96,190,1|9982bz,96,190,1|9982c0,91,186,0|9il3nz,91,186,0|9il3o0,96,190,1|9ry4zz,96,190,1|9ry500,91,186,0|a1b6bz,91,186,0|a1b6c0,96,190,1|aao7nz,96,190,1|aao7o0,91,186,0|ak18zz,91,186,0|ak1900,96,190,1|atr8zz,96,190,1|atr900,91,186,0|b34abz,91,186,0|b34ac0,91,186,1|bchefz,91,186,1|bcheg0,105,203,0|bi8t3z,105,203,0|bi8t40,91,186,0|bluczz,91,186,0|blud00,96,190,1|bv7ebz,96,190,1|bv7ec0,91,186,0|c4kfnz,91,186,0|c4kfo0,96,190,1|cdxgzz,96,190,1|cdxh00,91,186,0|cnaibz,91,186,0|cnaic0,96,190,1|cwnjnz,96,190,1|cwnjo0,91,186,0|d60kzz,91,186,0|d60l00,96,190,1|dfdmbz,96,190,1|dfdmc0,91,186,0|dp3mbz,91,186,0|dp3mc0,96,190,1|dzwibz,96,190,1|dzwic0,91,186,0|e7tozz,91,186,0|e7tp00,96,190,1|eimkzz,96,190,1|eiml00,91,186,0|eqjrnz,91,186,0|eqjro0,96,190,1|f1cnnz,96,190,1|f1cno0,91,186,0|f99ubz,91,186,0|f99uc0,96,190,1|fkfozz,96,190,1|fkfp00,91,186,0|frzwzz,91,186,0|frzx00,96,190,1|g35rnz,96,190,1|g35ro0,91,186,0|gapznz,91,186,0|gapzo0,96,190,1|glvubz,96,190,1|glvuc0,91,186,0|gtt0zz,91,186,0|gtt100,96,190,1|h4lwzz,96,190,1|h4lx00,91,186,0|hcj3nz,91,186,0|hcj3o0,96,190,1|hnbznz,96,190,1|hnbzo0,91,186,0|hv96bz,91,186,0|hv96c0,96,190,1|i6f0zz,96,190,1|i6f100,91,186,0|NaN,91,186,0\",\"Asia/Ashgabat|,0,205,0|-nu16t9,0,205,0|-nu16t8,105,203,0|-kmr741,105,203,0|-kmr740,91,186,0|5vb0rz,91,186,0|5vb0s0,96,190,1|64ptzz,96,190,1|64pu00,91,186,0|6e2y3z,91,186,0|6e2y40,96,190,1|6nhrbz,96,190,1|6nhrc0,91,186,0|6wuvfz,91,186,0|6wuvg0,96,190,1|769onz,96,190,1|769oo0,91,186,0|7fonfz,91,186,0|7fong0,96,190,1|7p1ubz,96,190,1|7p1uc0,91,186,0|7yevnz,91,186,0|7yevo0,96,190,1|87rwzz,96,190,1|87rx00,91,186,0|8h4ybz,91,186,0|8h4yc0,96,190,1|8qhznz,96,190,1|8qhzo0,91,186,0|8zv0zz,91,186,0|8zv100,96,190,1|9982bz,96,190,1|9982c0,91,186,0|9il3nz,91,186,0|9il3o0,96,190,1|9ry4zz,96,190,1|9ry500,91,186,0|a1b6bz,91,186,0|a1b6c0,96,190,1|aao7nz,96,190,1|aao7o0,91,186,0|ak18zz,91,186,0|ak1900,96,190,1|atr8zz,96,190,1|atr900,91,186,0|b34abz,91,186,0|b34ac0,91,186,1|bchefz,91,186,1|bcheg0,105,203,0|bi8t3z,105,203,0|bi8t40,91,186,0|NaN,91,186,0\",\"Asia/Atyrau|,0,206,0|-nu15m9,0,206,0|-nu15m8,100,4,0|-kmr4c1,100,4,0|-kmr4c0,91,186,0|64pwrz,91,186,0|64pws0,96,190,0|6e2vbz,96,190,0|6e2vc0,96,190,1|6nhrbz,96,190,1|6nhrc0,91,186,0|6wuvfz,91,186,0|6wuvg0,96,190,1|769onz,96,190,1|769oo0,91,186,0|7fonfz,91,186,0|7fong0,96,190,1|7p1ubz,96,190,1|7p1uc0,91,186,0|7yevnz,91,186,0|7yevo0,96,190,1|87rwzz,96,190,1|87rx00,91,186,0|8h4ybz,91,186,0|8h4yc0,96,190,1|8qhznz,96,190,1|8qhzo0,91,186,0|8zv0zz,91,186,0|8zv100,96,190,1|9982bz,96,190,1|9982c0,91,186,0|9il3nz,91,186,0|9il3o0,96,190,1|9ry4zz,96,190,1|9ry500,91,186,0|a1b6bz,91,186,0|a1b6c0,96,190,1|aao7nz,96,190,1|aao7o0,91,186,0|ak18zz,91,186,0|ak1900,96,190,1|atr8zz,96,190,1|atr900,91,186,0|b34abz,91,186,0|b34ac0,91,186,1|bchefz,91,186,1|bcheg0,105,203,0|bi8t3z,105,203,0|bi8t40,91,186,0|bluczz,91,186,0|blud00,96,190,1|bv7ebz,96,190,1|bv7ec0,91,186,0|c4kfnz,91,186,0|c4kfo0,96,190,1|cdxgzz,96,190,1|cdxh00,91,186,0|cnaibz,91,186,0|cnaic0,96,190,1|cwnjnz,96,190,1|cwnjo0,91,186,0|d60kzz,91,186,0|d60l00,96,190,1|dfdmbz,96,190,1|dfdmc0,91,186,0|dp3mbz,91,186,0|dp3mc0,96,190,1|dzwibz,96,190,1|dzwic0,91,186,0|e7tozz,91,186,0|e7tp00,96,190,1|eimkzz,96,190,1|eiml00,91,186,0|eqjrnz,91,186,0|eqjro0,96,190,1|f1cnnz,96,190,1|f1cno0,91,186,0|f99ubz,91,186,0|f99uc0,91,186,1|fkfrrz,91,186,1|fkfrs0,105,203,0|frzzrz,105,203,0|frzzs0,91,186,1|g35ufz,91,186,1|g35ug0,105,203,0|gaq2fz,105,203,0|gaq2g0,91,186,1|glvx3z,91,186,1|glvx40,105,203,0|gtt3rz,105,203,0|gtt3s0,91,186,1|h4lzrz,91,186,1|h4lzs0,105,203,0|hcj6fz,105,203,0|hcj6g0,91,186,1|hnc2fz,91,186,1|hnc2g0,105,203,0|hv993z,105,203,0|hv9940,91,186,1|i6f3rz,91,186,1|i6f3s0,91,186,0|NaN,91,186,0\",\"Asia/Baghdad|,0,207,0|-15r1hk5,0,207,0|-15r1hk4,54,208,0|-r50g81,54,208,0|-r50g80,100,4,0|6fmnnz,100,4,0|6fmno0,105,203,1|6nhwvz,105,203,1|6nhww0,100,4,0|6wt6bz,100,4,0|6wt6c0,105,203,1|769u7z,105,203,1|769u80,100,4,0|7foszz,100,4,0|7fot00,105,203,1|7p3m7z,105,203,1|7p3m80,100,4,0|7ygqbz,100,4,0|7ygqc0,105,203,1|87rzrz,105,203,1|87rzs0,100,4,0|8h513z,100,4,0|8h5140,105,203,1|8qi2fz,105,203,1|8qi2g0,100,4,0|8zv3rz,100,4,0|8zv3s0,105,203,1|99853z,105,203,1|998540,100,4,0|9il6fz,100,4,0|9il6g0,105,203,1|9ry7rz,105,203,1|9ry7s0,100,4,0|a1b93z,100,4,0|a1b940,105,203,1|aaoafz,105,203,1|aaoag0,100,4,0|ak1brz,100,4,0|ak1bs0,105,203,1|atrbrz,105,203,1|atrbs0,100,4,0|b36dbz,100,4,0|b36dc0,105,203,1|bcl9bz,105,203,1|bcl9c0,100,4,0|bm05bz,100,4,0|bm05c0,105,203,1|bvf1bz,105,203,1|bvf1c0,100,4,0|c4s2nz,100,4,0|c4s2o0,105,203,1|ce6ynz,105,203,1|ce6yo0,100,4,0|cnjzzz,100,4,0|cnk000,105,203,1|cwyvzz,105,203,1|cwyw00,100,4,0|d6bxbz,100,4,0|d6bxc0,105,203,1|dfqtbz,105,203,1|dfqtc0,100,4,0|dp5pbz,100,4,0|dp5pc0,105,203,1|dyklbz,105,203,1|dyklc0,100,4,0|e7xmnz,100,4,0|e7xmo0,105,203,1|ehcinz,105,203,1|ehcio0,100,4,0|eqpjzz,100,4,0|eqpk00,105,203,1|f04fzz,105,203,1|f04g00,100,4,0|f9hhbz,100,4,0|f9hhc0,105,203,1|fiwdbz,105,203,1|fiwdc0,100,4,0|fsb9bz,100,4,0|fsb9c0,105,203,1|g1q5bz,105,203,1|g1q5c0,100,4,0|gb36nz,100,4,0|gb36o0,105,203,1|gki2nz,105,203,1|gki2o0,100,4,0|gtv3zz,100,4,0|gtv400,105,203,1|h39zzz,105,203,1|h3a000,100,4,0|hcn1bz,100,4,0|hcn1c0,105,203,1|hm1xbz,105,203,1|hm1xc0,100,4,0|hvgtbz,100,4,0|hvgtc0,105,203,1|i4vpbz,105,203,1|i4vpc0,100,4,0|ie8qnz,100,4,0|ie8qo0,105,203,1|innmnz,105,203,1|innmo0,100,4,0|ix0nzz,100,4,0|ix0o00,105,203,1|j6fjzz,105,203,1|j6fk00,100,4,0|jfslbz,100,4,0|jfslc0,105,203,1|jp7hbz,105,203,1|jp7hc0,100,4,0|NaN,100,4,0\",\"Asia/Bahrain|,0,209,0|-q3gmvl,0,209,0|-q3gmvk,105,203,0|19d0vz,105,203,0|19d0w0,100,4,0|NaN,100,4,0\",\"Asia/Baku|,0,210,0|-nu158d,0,210,0|-nu158c,100,4,0|-6p7kc1,100,4,0|-6p7kc0,105,203,0|5vb3jz,105,203,0|5vb3k0,91,186,1|64pwrz,91,186,1|64pws0,105,203,0|6e30vz,105,203,0|6e30w0,91,186,1|6nhu3z,91,186,1|6nhu40,105,203,0|6wuy7z,105,203,0|6wuy80,91,186,1|769rfz,91,186,1|769rg0,105,203,0|7foq7z,105,203,0|7foq80,91,186,1|7p1x3z,91,186,1|7p1x40,105,203,0|7yeyfz,105,203,0|7yeyg0,91,186,1|87rzrz,91,186,1|87rzs0,105,203,0|8h513z,105,203,0|8h5140,91,186,1|8qi2fz,91,186,1|8qi2g0,105,203,0|8zv3rz,105,203,0|8zv3s0,91,186,1|99853z,91,186,1|998540,105,203,0|9il6fz,105,203,0|9il6g0,91,186,1|9ry7rz,91,186,1|9ry7s0,105,203,0|a1b93z,105,203,0|a1b940,91,186,1|aaoafz,91,186,1|aaoag0,105,203,0|ak1brz,105,203,0|ak1bs0,91,186,1|atrbrz,91,186,1|atrbs0,105,203,0|b34d3z,105,203,0|b34d40,105,203,1|bchh7z,105,203,1|bchh80,100,4,0|bluijz,100,4,0|bluik0,105,203,1|bv7jvz,105,203,1|bv7jw0,105,203,0|dp3xfz,105,203,0|dp3xg0,91,186,1|dzwtfz,91,186,1|dzwtg0,105,203,0|e7txbz,105,203,0|e7txc0,91,186,1|eimtbz,91,186,1|eimtc0,105,203,0|eqjzzz,105,203,0|eqk000,91,186,1|f1cvzz,91,186,1|f1cw00,105,203,0|f9a2nz,105,203,0|f9a2o0,91,186,1|fkfxbz,91,186,1|fkfxc0,105,203,0|fs05bz,105,203,0|fs05c0,91,186,1|g35zzz,91,186,1|g36000,105,203,0|gaq7zz,105,203,0|gaq800,91,186,1|glw2nz,91,186,1|glw2o0,105,203,0|gtt9bz,105,203,0|gtt9c0,91,186,1|h4m5bz,91,186,1|h4m5c0,105,203,0|hcjbzz,105,203,0|hcjc00,91,186,1|hnc7zz,91,186,1|hnc800,105,203,0|hv9enz,105,203,0|hv9eo0,91,186,1|i6f9bz,91,186,1|i6f9c0,105,203,0|idzhbz,105,203,0|idzhc0,91,186,1|ip5bzz,91,186,1|ip5c00,105,203,0|iwpjzz,105,203,0|iwpk00,91,186,1|j7venz,91,186,1|j7veo0,105,203,0|jffmnz,105,203,0|jffmo0,91,186,1|jqlhbz,91,186,1|jqlhc0,105,203,0|jyinzz,105,203,0|jyio00,91,186,1|k9bjzz,91,186,1|k9bk00,105,203,0|kh8qnz,105,203,0|kh8qo0,91,186,1|ks1mnz,91,186,1|ks1mo0,105,203,0|kzytbz,105,203,0|kzytc0,91,186,1|lb4nzz,91,186,1|lb4o00,105,203,0|liovzz,105,203,0|liow00,91,186,1|ltuqnz,91,186,1|ltuqo0,105,203,0|m1eynz,105,203,0|m1eyo0,91,186,1|mcktbz,91,186,1|mcktc0,105,203,0|mkhzzz,105,203,0|mki000,91,186,1|mvavzz,91,186,1|mvaw00,105,203,0|n382nz,105,203,0|n382o0,91,186,1|ne0ynz,91,186,1|ne0yo0,105,203,0|nly5bz,105,203,0|nly5c0,91,186,1|nwr1bz,91,186,1|nwr1c0,105,203,0|NaN,105,203,0\",\"Asia/Bangkok|,0,211,0|-1ayyla5,0,211,0|-1ayyla4,54,211,0|-pysda5,54,211,0|-pysda4,90,185,0|NaN,90,185,0\",\"Asia/Barnaul|,0,212,0|-q4ljid,0,212,0|-q4ljic,96,190,0|-kmrco1,96,190,0|-kmrco0,90,185,0|5vav7z,90,185,0|5vav80,88,183,1|64pofz,88,183,1|64pog0,90,185,0|6e2sjz,90,185,0|6e2sk0,88,183,1|6nhlrz,88,183,1|6nhls0,90,185,0|6wupvz,90,185,0|6wupw0,88,183,1|769j3z,88,183,1|769j40,90,185,0|7fohvz,90,185,0|7fohw0,88,183,1|7p1orz,88,183,1|7p1os0,90,185,0|7yeq3z,90,185,0|7yeq40,88,183,1|87rrfz,88,183,1|87rrg0,90,185,0|8h4srz,90,185,0|8h4ss0,88,183,1|8qhu3z,88,183,1|8qhu40,90,185,0|8zuvfz,90,185,0|8zuvg0,88,183,1|997wrz,88,183,1|997ws0,90,185,0|9iky3z,90,185,0|9iky40,88,183,1|9rxzfz,88,183,1|9rxzg0,90,185,0|a1b0rz,90,185,0|a1b0s0,88,183,1|aao23z,88,183,1|aao240,90,185,0|ak13fz,90,185,0|ak13g0,88,183,1|atr3fz,88,183,1|atr3g0,90,185,0|b344rz,90,185,0|b344s0,90,185,1|bch8vz,90,185,1|bch8w0,96,190,0|bi8njz,96,190,0|bi8nk0,90,185,0|blu7fz,90,185,0|blu7g0,88,183,1|bv78rz,88,183,1|bv78s0,90,185,0|c4ka3z,90,185,0|c4ka40,88,183,1|cdxbfz,88,183,1|cdxbg0,90,185,0|cnacrz,90,185,0|cnacs0,88,183,1|cwne3z,88,183,1|cwne40,90,185,0|d60ffz,90,185,0|d60fg0,88,183,1|d98v3z,88,183,1|d98v40,90,185,1|dfdjjz,90,185,1|dfdjk0,96,190,0|dp3jjz,96,190,0|dp3jk0,90,185,1|dzwfjz,90,185,1|dzwfk0,96,190,0|e7tm7z,96,190,0|e7tm80,90,185,1|eimi7z,90,185,1|eimi80,96,190,0|eqjovz,96,190,0|eqjow0,90,185,1|f1ckvz,90,185,1|f1ckw0,96,190,0|f99rjz,96,190,0|f99rk0,90,185,1|fkfm7z,90,185,1|fkfm80,96,190,0|frzu7z,96,190,0|frzu80,90,185,1|g35ovz,90,185,1|g35ow0,96,190,0|gapwvz,96,190,0|gapww0,90,185,1|glvrjz,90,185,1|glvrk0,96,190,0|gtsy7z,96,190,0|gtsy80,90,185,1|h4lu7z,90,185,1|h4lu80,96,190,0|hcj0vz,96,190,0|hcj0w0,90,185,1|hnbwvz,90,185,1|hnbww0,96,190,0|hv93jz,96,190,0|hv93k0,90,185,1|i6ey7z,90,185,1|i6ey80,96,190,0|idz67z,96,190,0|idz680,90,185,1|ip50vz,90,185,1|ip50w0,96,190,0|iwp8vz,96,190,0|iwp8w0,90,185,1|j7v3jz,90,185,1|j7v3k0,96,190,0|jffbjz,96,190,0|jffbk0,90,185,1|jql67z,90,185,1|jql680,96,190,0|jyicvz,96,190,0|jyicw0,90,185,1|k9b8vz,90,185,1|k9b8w0,96,190,0|kh8fjz,96,190,0|kh8fk0,90,185,1|ks1bjz,90,185,1|ks1bk0,96,190,0|kzyi7z,96,190,0|kzyi80,90,185,1|lb4cvz,90,185,1|lb4cw0,96,190,0|liokvz,96,190,0|liokw0,90,185,0|ne0krz,90,185,0|ne0ks0,96,190,0|o4nwvz,96,190,0|o4nww0,90,185,0|NaN,90,185,0\",\"Asia/Beirut|,0,213,0|-1ayy98p,0,213,0|-1ayy98o,14,9,0|-pyzew1,14,9,0|-pyzew0,15,4,1|-po4r01,15,4,1|-po4r00,14,9,0|-pfwdk1,14,9,0|-pfwdk0,15,4,1|-p6hkc1,15,4,1|-p6hkc0,14,9,0|-oxj9k1,14,9,0|-oxj9k0,15,4,1|-ongdo1,15,4,1|-ongdo0,14,9,0|-oddc81,14,9,0|-oddc80,15,4,1|-o5t701,15,4,1|-o5t700,14,9,0|-6m2iw1,14,9,0|-6m2iw0,15,4,1|-6e79o1,15,4,1|-6e79o0,14,9,0|-63alk1,14,9,0|-63alk0,15,4,1|-5vfcc1,15,4,1|-5vfcc0,14,9,0|-5kio81,14,9,0|-5kio80,15,4,1|-5cnf01,15,4,1|-5cnf00,14,9,0|-51ow81,14,9,0|-51ow80,15,4,1|-4ttn01,15,4,1|-4ttn00,14,9,0|-4iwyw1,14,9,0|-4iwyw0,15,4,1|-4b1po1,15,4,1|-4b1po0,14,9,0|1ag2fz,14,9,0|1ag2g0,15,4,1|1fn0zz,15,4,1|1fn100,14,9,0|1qjp3z,14,9,0|1qjp40,15,4,1|1yeybz,15,4,1|1yeyc0,14,9,0|29bmfz,14,9,0|29bmg0,15,4,1|2h6vnz,15,4,1|2h6vo0,14,9,0|2s3jrz,14,9,0|2s3js0,15,4,1|2zyszz,15,4,1|2zyt00,14,9,0|3axbrz,14,9,0|3axbs0,15,4,1|3iskzz,15,4,1|3isl00,14,9,0|3tp93z,14,9,0|3tp940,15,4,1|41kibz,15,4,1|41kic0,14,9,0|4cfbrz,14,9,0|4cfbs0,15,4,1|4kakzz,15,4,1|4kal00,14,9,0|7h8frz,14,9,0|7h8fs0,15,4,1|7pvgzz,15,4,1|7pvh00,14,9,0|800d3z,14,9,0|800d40,15,4,1|88nebz,15,4,1|88nec0,14,9,0|8isafz,14,9,0|8isag0,15,4,1|8rfbnz,15,4,1|8rfbo0,14,9,0|91k7rz,14,9,0|91k7s0,15,4,1|9a78zz,15,4,1|9a7900,14,9,0|9lzefz,14,9,0|9lzeg0,15,4,1|9t10zz,15,4,1|9t1100,14,9,0|a3ml3z,14,9,0|a3ml40,15,4,1|absybz,15,4,1|absyc0,14,9,0|alxufz,14,9,0|alxug0,15,4,1|aukvnz,15,4,1|aukvo0,14,9,0|b4prrz,14,9,0|b4prs0,15,4,1|bdcszz,15,4,1|bdct00,14,9,0|bnjjrz,14,9,0|bnjjs0,15,4,1|bvkczz,15,4,1|bvkd00,14,9,0|c4kifz,14,9,0|c4kig0,15,4,1|cdxgzz,15,4,1|cdxh00,14,9,0|cnal3z,14,9,0|cnal40,15,4,1|cwnjnz,15,4,1|cwnjo0,14,9,0|d60nrz,14,9,0|d60ns0,15,4,1|dfdmbz,15,4,1|dfdmc0,14,9,0|dp3p3z,14,9,0|dp3p40,15,4,1|dygnnz,15,4,1|dygno0,14,9,0|e7trrz,14,9,0|e7trs0,15,4,1|eh6qbz,15,4,1|eh6qc0,14,9,0|eqjufz,14,9,0|eqjug0,15,4,1|ezwszz,15,4,1|ezwt00,14,9,0|f99x3z,14,9,0|f99x40,15,4,1|fkfozz,15,4,1|fkfp00,14,9,0|frzzrz,14,9,0|frzzs0,15,4,1|g35rnz,15,4,1|g35ro0,14,9,0|gaq2fz,14,9,0|gaq2g0,15,4,1|glvubz,15,4,1|glvuc0,14,9,0|gtt3rz,14,9,0|gtt3s0,15,4,1|h4lwzz,15,4,1|h4lx00,14,9,0|hcj6fz,14,9,0|hcj6g0,15,4,1|hnbznz,15,4,1|hnbzo0,14,9,0|hv993z,14,9,0|hv9940,15,4,1|i6f0zz,15,4,1|i6f100,14,9,0|idzbrz,14,9,0|idzbs0,15,4,1|ip53nz,15,4,1|ip53o0,14,9,0|iwpefz,14,9,0|iwpeg0,15,4,1|j7v6bz,15,4,1|j7v6c0,14,9,0|jffh3z,14,9,0|jffh40,15,4,1|jql8zz,15,4,1|jql900,14,9,0|jyiifz,14,9,0|jyiig0,15,4,1|k9bbnz,15,4,1|k9bbo0,14,9,0|kh8l3z,14,9,0|kh8l40,15,4,1|ks1ebz,15,4,1|ks1ec0,14,9,0|kzynrz,14,9,0|kzyns0,15,4,1|lb4fnz,15,4,1|lb4fo0,14,9,0|lioqfz,14,9,0|lioqg0,15,4,1|ltuibz,15,4,1|ltuic0,14,9,0|m1et3z,14,9,0|m1et40,15,4,1|mckkzz,15,4,1|mckl00,14,9,0|mkhufz,14,9,0|mkhug0,15,4,1|mvannz,15,4,1|mvano0,14,9,0|n37x3z,14,9,0|n37x40,15,4,1|ne0qbz,15,4,1|ne0qc0,14,9,0|nlxzrz,14,9,0|nlxzs0,15,4,1|nwqszz,15,4,1|nwqt00,14,9,0|o4o2fz,14,9,0|o4o2g0,15,4,1|oftubz,15,4,1|oftuc0,14,9,0|one53z,14,9,0|one540,15,4,1|oyjwzz,15,4,1|oyjx00,14,9,0|p647rz,14,9,0|p647s0,15,4,1|ph9znz,15,4,1|ph9zo0,14,9,0|pp793z,14,9,0|pp7940,15,4,1|q002bz,15,4,1|q002c0,14,9,0|q7xbrz,14,9,0|q7xbs0,15,4,1|qiq4zz,15,4,1|qiq500,14,9,0|qqnefz,14,9,0|qqneg0,15,4,1|r1t6bz,15,4,1|r1t6c0,14,9,0|r9dh3z,14,9,0|r9dh40,15,4,1|rkj8zz,15,4,1|rkj900,14,9,0|rs3jrz,14,9,0|rs3js0,15,4,1|s39bnz,15,4,1|s39bo0,14,9,0|sb6l3z,14,9,0|sb6l40,15,4,1|slzebz,15,4,1|slzec0,14,9,0|stwnrz,14,9,0|stwns0,15,4,1|t4pgzz,15,4,1|t4ph00,14,9,0|tcmqfz,14,9,0|tcmqg0,15,4,1|tnfjnz,15,4,1|tnfjo0,14,9,0|tvct3z,14,9,0|tvct40,15,4,1|u6ikzz,15,4,1|u6il00,14,9,0|ue2vrz,14,9,0|ue2vs0,15,4,1|up8nnz,15,4,1|up8no0,14,9,0|uwsyfz,14,9,0|uwsyg0,15,4,1|v7yqbz,15,4,1|v7yqc0,14,9,0|vfvzrz,14,9,0|vfvzs0,15,4,1|vqoszz,15,4,1|vqot00,14,9,0|vym2fz,14,9,0|vym2g0,15,4,1|w9evnz,15,4,1|w9evo0,14,9,0|whc53z,14,9,0|whc540,15,4,1|wshwzz,15,4,1|wshx00,14,9,0|x027rz,14,9,0|x027s0,15,4,1|xb7znz,15,4,1|xb7zo0,14,9,0|xisafz,14,9,0|xisag0,15,4,1|xty2bz,15,4,1|xty2c0,14,9,0|y1id3z,14,9,0|y1id40,15,4,1|yco4zz,15,4,1|yco500,14,9,0|yklefz,14,9,0|ykleg0,15,4,1|yve7nz,15,4,1|yve7o0,14,9,0|z3bh3z,14,9,0|z3bh40,15,4,1|ze4abz,15,4,1|ze4ac0,14,9,0|zm1jrz,14,9,0|zm1js0,15,4,1|zx7bnz,15,4,1|zx7bo0,14,9,0|104rmfz,14,9,0|104rmg0,15,4,1|10fxebz,15,4,1|10fxec0,14,9,0|10nhp3z,14,9,0|10nhp40,15,4,1|10yngzz,15,4,1|10ynh00,14,9,0|116kqfz,14,9,0|116kqg0,15,4,1|11hdjnz,15,4,1|11hdjo0,14,9,0|11pat3z,14,9,0|11pat40,15,4,1|1203mbz,15,4,1|1203mc0,14,9,0|1280vrz,14,9,0|1280vs0,15,4,1|12itozz,15,4,1|12itp00,14,9,0|12qqyfz,14,9,0|12qqyg0,15,4,1|131wqbz,15,4,1|131wqc0,14,9,0|139h13z,14,9,0|139h140,15,4,1|13kmszz,15,4,1|13kmt00,14,9,0|13s73rz,14,9,0|13s73s0,15,4,1|143cvnz,15,4,1|143cvo0,14,9,0|14ba53z,14,9,0|14ba540,15,4,1|14m2ybz,15,4,1|14m2yc0,14,9,0|14u07rz,14,9,0|14u07s0,15,4,1|154t0zz,15,4,1|154t100,14,9,0|15cqafz,14,9,0|15cqag0,15,4,1|15nw2bz,15,4,1|15nw2c0,14,9,0|15vgd3z,14,9,0|15vgd40,15,4,1|166m4zz,15,4,1|166m500,14,9,0|16e6frz,14,9,0|16e6fs0,15,4,1|16pc7nz,15,4,1|16pc7o0,14,9,0|16x9h3z,14,9,0|16x9h40,15,4,1|1782abz,15,4,1|1782ac0,14,9,0|17fzjrz,14,9,0|17fzjs0,15,4,1|17qsczz,15,4,1|17qsd00,14,9,0|17ypmfz,14,9,0|17ypmg0,15,4,1|189ifnz,15,4,1|189ifo0,14,9,0|18hfp3z,14,9,0|18hfp40,15,4,1|18slgzz,15,4,1|18slh00,14,9,0|1905rrz,14,9,0|1905rs0,15,4,1|19bbjnz,15,4,1|19bbjo0,14,9,0|19ivufz,14,9,0|19ivug0,15,4,1|19u1mbz,15,4,1|19u1mc0,14,9,0|1a1yvrz,14,9,0|1a1yvs0,15,4,1|1acrozz,15,4,1|1acrp00,14,9,0|1akoyfz,14,9,0|1akoyg0,15,4,1|1avhrnz,15,4,1|1avhro0,14,9,0|1b3f13z,14,9,0|1b3f140,15,4,1|1bekszz,15,4,1|1bekt00,14,9,0|1bm53rz,14,9,0|1bm53s0,15,4,1|1bxavnz,15,4,1|1bxavo0,14,9,0|1c4v6fz,14,9,0|1c4v6g0,15,4,1|1cg0ybz,15,4,1|1cg0yc0,14,9,0|1cnl93z,14,9,0|1cnl940,15,4,1|1cyr0zz,15,4,1|1cyr100,14,9,0|1d6oafz,14,9,0|1d6oag0,15,4,1|1dhh3nz,15,4,1|1dhh3o0,14,9,0|1dped3z,14,9,0|1dped40,15,4,1|1e076bz,15,4,1|1e076c0,14,9,0|1e84frz,14,9,0|1e84fs0,15,4,1|1eja7nz,15,4,1|1eja7o0,14,9,0|1equifz,14,9,0|1equig0,15,4,1|1f20abz,15,4,1|1f20ac0,14,9,0|1f9kl3z,14,9,0|1f9kl40,15,4,1|1fkqczz,15,4,1|1fkqd00,14,9,0|1fsnmfz,14,9,0|1fsnmg0,15,4,1|1g3gfnz,15,4,1|1g3gfo0,14,9,0|1gbdp3z,14,9,0|1gbdp40,15,4,1|1gm6ibz,15,4,1|1gm6ic0,14,9,0|1gu3rrz,14,9,0|1gu3rs0,15,4,1|1h4wkzz,15,4,1|1h4wl00,14,9,0|1hctufz,14,9,0|1hctug0,15,4,1|1hnzmbz,15,4,1|1hnzmc0,14,9,0|1hvjx3z,14,9,0|1hvjx40,15,4,1|1i6pozz,15,4,1|1i6pp00,14,9,0|1ie9zrz,14,9,0|1ie9zs0,15,4,1|1ipfrnz,15,4,1|1ipfro0,14,9,0|1ixd13z,14,9,0|1ixd140,15,4,1|1j85ubz,15,4,1|1j85uc0,14,9,0|1jg33rz,14,9,0|1jg33s0,15,4,1|1jqvwzz,15,4,1|1jqvx00,14,9,0|1jyt6fz,14,9,0|1jyt6g0,15,4,1|1k9yybz,15,4,1|1k9yyc0,14,9,0|1khj93z,14,9,0|1khj940,15,4,1|1ksp0zz,15,4,1|1ksp100,14,9,0|1l09brz,14,9,0|1l09bs0,15,4,1|1lbf3nz,15,4,1|1lbf3o0,14,9,0|1ljcd3z,14,9,0|1ljcd40,15,4,1|1lu56bz,15,4,1|1lu56c0,14,9,0|1m22frz,14,9,0|1m22fs0,15,4,1|1mcv8zz,15,4,1|1mcv900,14,9,0|1mksifz,14,9,0|1mksig0,15,4,1|1mvlbnz,15,4,1|1mvlbo0,14,9,0|1n3il3z,14,9,0|1n3il40,15,4,1|1neoczz,15,4,1|1neod00,14,9,0|1nm8nrz,14,9,0|1nm8ns0,15,4,1|1nxefnz,15,4,1|1nxefo0,14,9,0|1o4yqfz,14,9,0|1o4yqg0,15,4,1|1og4ibz,15,4,1|1og4ic0,14,9,0|1oo1rrz,14,9,0|1oo1rs0,15,4,1|1oyukzz,15,4,1|1oyul00,14,9,0|1p6rufz,14,9,0|1p6rug0,15,4,1|1phknnz,15,4,1|1phkno0,14,9,0|1pphx3z,14,9,0|1pphx40,15,4,1|1q0nozz,15,4,1|1q0np00,14,9,0|1q87zrz,14,9,0|1q87zs0,15,4,1|1qjdrnz,15,4,1|1qjdro0,14,9,0|1qqy2fz,14,9,0|1qqy2g0,15,4,1|1r23ubz,15,4,1|1r23uc0,14,9,0|1r9o53z,14,9,0|1r9o540,15,4,1|1rktwzz,15,4,1|1rktx00,14,9,0|1rsr6fz,14,9,0|1rsr6g0,15,4,1|1s3jznz,15,4,1|1s3jzo0,14,9,0|1sbh93z,14,9,0|1sbh940,15,4,1|1sma2bz,15,4,1|1sma2c0,14,9,0|1su7brz,14,9,0|1su7bs0,15,4,1|1t5d3nz,15,4,1|1t5d3o0,14,9,0|1tcxefz,14,9,0|1tcxeg0,15,4,1|1to36bz,15,4,1|1to36c0,14,9,0|1tvnh3z,14,9,0|1tvnh40,15,4,1|1u6t8zz,15,4,1|1u6t900,14,9,0|1ueqifz,14,9,0|1ueqig0,15,4,1|1upjbnz,15,4,1|1upjbo0,14,9,0|1uxgl3z,14,9,0|1uxgl40,15,4,1|1v89ebz,15,4,1|1v89ec0,14,9,0|1vg6nrz,14,9,0|1vg6ns0,15,4,1|1vqzgzz,15,4,1|1vqzh00,14,9,0|NaN,14,9,0\",\"Asia/Bishkek|,0,214,0|-nu19td,0,214,0|-nu19tc,91,186,0|-kmr9w1,91,186,0|-kmr9w0,96,190,0|5vaxzz,96,190,0|5vay00,90,185,1|64pr7z,90,185,1|64pr80,96,190,0|6e2vbz,96,190,0|6e2vc0,90,185,1|6nhojz,90,185,1|6nhok0,96,190,0|6wusnz,96,190,0|6wuso0,90,185,1|769lvz,90,185,1|769lw0,96,190,0|7foknz,96,190,0|7foko0,90,185,1|7p1rjz,90,185,1|7p1rk0,96,190,0|7yesvz,96,190,0|7yesw0,90,185,1|87ru7z,90,185,1|87ru80,96,190,0|8h4vjz,96,190,0|8h4vk0,90,185,1|8qhwvz,90,185,1|8qhww0,96,190,0|8zuy7z,96,190,0|8zuy80,90,185,1|997zjz,90,185,1|997zk0,96,190,0|9il0vz,96,190,0|9il0w0,90,185,1|9ry27z,90,185,1|9ry280,96,190,0|a1b3jz,96,190,0|a1b3k0,90,185,1|aao4vz,90,185,1|aao4w0,96,190,0|ak167z,96,190,0|ak1680,90,185,1|atr67z,90,185,1|atr680,96,190,0|b347jz,96,190,0|b347k0,96,190,1|bazjjz,96,190,1|bazjk0,91,186,0|bmk4rz,91,186,0|bmk4s0,96,190,1|bv75zz,96,190,1|bv7600,91,186,0|c5a7fz,91,186,0|c5a7g0,96,190,1|cdx8nz,96,190,1|cdx8o0,91,186,0|co0a3z,91,186,0|co0a40,96,190,1|cwnbbz,96,190,1|cwnbc0,91,186,0|d6qcrz,91,186,0|d6qcs0,96,190,1|dfddzz,96,190,1|dfde00,91,186,0|dpgffz,91,186,0|dpgfg0,96,190,1|dygfbz,96,190,1|dygfc0,91,186,0|e7tqdz,91,186,0|e7tqe0,96,190,1|eimjlz,96,190,1|eimjm0,91,186,0|eqjt1z,91,186,0|eqjt20,96,190,1|f1cm9z,96,190,1|f1cma0,91,186,0|f99vpz,91,186,0|f99vq0,96,190,1|fkfnlz,96,190,1|fkfnm0,91,186,0|frzydz,91,186,0|frzye0,96,190,1|g35q9z,96,190,1|g35qa0,91,186,0|gaq11z,91,186,0|gaq120,96,190,1|glvsxz,96,190,1|glvsy0,91,186,0|gtt2dz,91,186,0|gtt2e0,96,190,1|h4lvlz,96,190,1|h4lvm0,91,186,0|hcj51z,91,186,0|hcj520,96,190,1|hnby9z,96,190,1|hnbya0,91,186,0|hv97pz,91,186,0|hv97q0,96,190,1|i6ezlz,96,190,1|i6ezm0,91,186,0|idzadz,91,186,0|idzae0,96,190,1|il2knz,96,190,1|il2ko0,96,190,0|NaN,96,190,0\",\"Asia/Brunei|,0,215,0|-mvofy5,0,215,0|-mvofy4,106,216,0|-jb6i61,106,216,0|-jb6i60,88,183,0|NaN,88,183,0\",\"Asia/Chita|,0,217,0|-q4cfoh,0,217,0|-q4cfog,88,183,0|-kmri81,88,183,0|-kmri80,107,218,0|5vapnz,107,218,0|5vapo0,93,189,1|64pivz,93,189,1|64piw0,107,218,0|6e2mzz,107,218,0|6e2n00,93,189,1|6nhg7z,93,189,1|6nhg80,107,218,0|6wukbz,107,218,0|6wukc0,93,189,1|769djz,93,189,1|769dk0,107,218,0|7focbz,107,218,0|7focc0,93,189,1|7p1j7z,93,189,1|7p1j80,107,218,0|7yekjz,107,218,0|7yekk0,93,189,1|87rlvz,93,189,1|87rlw0,107,218,0|8h4n7z,107,218,0|8h4n80,93,189,1|8qhojz,93,189,1|8qhok0,107,218,0|8zupvz,107,218,0|8zupw0,93,189,1|997r7z,93,189,1|997r80,107,218,0|9iksjz,107,218,0|9iksk0,93,189,1|9rxtvz,93,189,1|9rxtw0,107,218,0|a1av7z,107,218,0|a1av80,93,189,1|aanwjz,93,189,1|aanwk0,107,218,0|ak0xvz,107,218,0|ak0xw0,93,189,1|atqxvz,93,189,1|atqxw0,107,218,0|b33z7z,107,218,0|b33z80,107,218,1|bch3bz,107,218,1|bch3c0,88,183,0|bi8hzz,88,183,0|bi8i00,107,218,0|blu1vz,107,218,0|blu1w0,93,189,1|bv737z,93,189,1|bv7380,107,218,0|c4k4jz,107,218,0|c4k4k0,93,189,1|cdx5vz,93,189,1|cdx5w0,107,218,0|cna77z,107,218,0|cna780,93,189,1|cwn8jz,93,189,1|cwn8k0,107,218,0|d609vz,107,218,0|d609w0,93,189,1|dfdb7z,93,189,1|dfdb80,107,218,0|dp3b7z,107,218,0|dp3b80,93,189,1|dzw77z,93,189,1|dzw780,107,218,0|e7tdvz,107,218,0|e7tdw0,93,189,1|eim9vz,93,189,1|eim9w0,107,218,0|eqjgjz,107,218,0|eqjgk0,93,189,1|f1ccjz,93,189,1|f1cck0,107,218,0|f99j7z,107,218,0|f99j80,93,189,1|fkfdvz,93,189,1|fkfdw0,107,218,0|frzlvz,107,218,0|frzlw0,93,189,1|g35gjz,93,189,1|g35gk0,107,218,0|gapojz,107,218,0|gapok0,93,189,1|glvj7z,93,189,1|glvj80,107,218,0|gtspvz,107,218,0|gtspw0,93,189,1|h4llvz,93,189,1|h4llw0,107,218,0|hcisjz,107,218,0|hcisk0,93,189,1|hnbojz,93,189,1|hnbok0,107,218,0|hv8v7z,107,218,0|hv8v80,93,189,1|i6epvz,93,189,1|i6epw0,107,218,0|idyxvz,107,218,0|idyxw0,93,189,1|ip4sjz,93,189,1|ip4sk0,107,218,0|iwp0jz,107,218,0|iwp0k0,93,189,1|j7uv7z,93,189,1|j7uv80,107,218,0|jff37z,107,218,0|jff380,93,189,1|jqkxvz,93,189,1|jqkxw0,107,218,0|jyi4jz,107,218,0|jyi4k0,93,189,1|k9b0jz,93,189,1|k9b0k0,107,218,0|kh877z,107,218,0|kh8780,93,189,1|ks137z,93,189,1|ks1380,107,218,0|kzy9vz,107,218,0|kzy9w0,93,189,1|lb44jz,93,189,1|lb44k0,107,218,0|liocjz,107,218,0|liock0,93,189,0|ne0cfz,93,189,0|ne0cg0,88,183,0|o4nrbz,88,183,0|o4nrc0,107,218,0|NaN,107,218,0\",\"Asia/Choibalsan|,0,219,0|-xmct7d,0,219,0|-xmct7c,90,185,0|46akjz,90,185,0|46akk0,88,183,0|6wun3z,88,183,0|6wun40,93,189,1|769djz,93,189,1|769dk0,107,218,0|7focbz,107,218,0|7focc0,93,189,1|7p1avz,93,189,1|7p1aw0,107,218,0|7yeezz,107,218,0|7yef00,93,189,1|87rdjz,93,189,1|87rdk0,107,218,0|8h4hnz,107,218,0|8h4ho0,93,189,1|8qhg7z,93,189,1|8qhg80,107,218,0|8zukbz,107,218,0|8zukc0,93,189,1|997ivz,93,189,1|997iw0,107,218,0|9ikmzz,107,218,0|9ikn00,93,189,1|9rxljz,93,189,1|9rxlk0,107,218,0|a1apnz,107,218,0|a1apo0,93,189,1|aano7z,93,189,1|aano80,107,218,0|ak0sbz,107,218,0|ak0sc0,93,189,1|atqpjz,93,189,1|atqpk0,107,218,0|b33tnz,107,218,0|b33to0,93,189,1|bcgs7z,93,189,1|bcgs80,107,218,0|bltwbz,107,218,0|bltwc0,93,189,1|bv6uvz,93,189,1|bv6uw0,107,218,0|c4jyzz,107,218,0|c4jz00,93,189,1|cdwxjz,93,189,1|cdwxk0,107,218,0|cna1nz,107,218,0|cna1o0,93,189,1|cwn07z,93,189,1|cwn080,107,218,0|d604bz,107,218,0|d604c0,93,189,1|dfd2vz,93,189,1|dfd2w0,107,218,0|dp35nz,107,218,0|dp35o0,93,189,1|dyg47z,93,189,1|dyg480,107,218,0|e7t8bz,107,218,0|e7t8c0,93,189,1|eh66vz,93,189,1|eh66w0,107,218,0|eqjazz,107,218,0|eqjb00,93,189,1|ezw9jz,93,189,1|ezw9k0,107,218,0|gcgn7z,107,218,0|gcgn80,93,189,1|gkdr3z,93,189,1|gkdr40,107,218,0|gtqv7z,107,218,0|gtqv80,93,189,1|h33trz,93,189,1|h33ts0,107,218,0|hcgxvz,107,218,0|hcgxw0,93,189,1|hltwfz,93,189,1|hltwg0,107,218,0|hv70jz,107,218,0|hv70k0,93,189,1|i4jz3z,93,189,1|i4jz40,107,218,0|idx37z,107,218,0|idx380,93,189,1|ina1rz,93,189,1|ina1s0,107,218,0|iwn5vz,107,218,0|iwn5w0,93,189,1|j6d33z,93,189,1|j6d340,107,218,0|jyjtnz,107,218,0|jyjto0,88,183,0|nlvtzz,88,183,0|nlvu00,107,218,1|nv8mzz,107,218,1|nv8n00,88,183,0|o4lwnz,88,183,0|o4lwo0,107,218,1|odypnz,107,218,1|odypo0,88,183,0|NaN,88,183,0\",\"Asia/Colombo|,0,220,0|-1ayyhgd,0,220,0|-1ayyhgc,20,221,0|-xehasl,20,221,0|-xehask,108,222,0|-elvwm1,108,222,0|-elvwm0,96,190,1|-e9lco1,96,190,1|-e9lco0,109,223,1|-cmw9u1,109,223,1|-cmw9u0,108,222,0|drxa1z,108,222,0|drxa20,109,223,0|dzufbz,109,223,0|dzufc0,96,190,0|ixq61z,96,190,0|ixq620,108,222,0|NaN,108,222,0\",\"Asia/Damascus|,0,224,0|-q3gk21,0,224,0|-q3gk20,14,9,0|-pxwdc1,14,9,0|-pxwdc0,15,4,1|-pp9c41,15,4,1|-pp9c40,14,9,0|-pf6ao1,14,9,0|-pf6ao0,15,4,1|-p6j9g1,15,4,1|-p6j9g0,14,9,0|-owg801,14,9,0|-owg800,15,4,1|-ont6s1,15,4,1|-ont6s0,14,9,0|-odq5c1,14,9,0|-odq5c0,15,4,1|-o4q5g1,15,4,1|-o4q5g0,14,9,0|-408lc1,14,9,0|-408lc0,15,4,1|-3s9ms1,15,4,1|-3s9ms0,14,9,0|-3hcyo1,14,9,0|-3hcyo0,15,4,1|-39jk41,15,4,1|-39jk40,14,9,0|-2yj6o1,14,9,0|-2yj6o0,15,4,1|-2qnxg1,15,4,1|-2qnxg0,14,9,0|-2fr9c1,14,9,0|-2fr9c0,15,4,1|-27xus1,15,4,1|-27xus0,14,9,0|-1xcao1,14,9,0|-1xcao0,15,4,1|-1p42s1,15,4,1|-1p42s0,14,9,0|-1e7eo1,14,9,0|-1e7eo0,15,4,1|-16c5g1,15,4,1|-16c5g0,14,9,0|-vdmo1,14,9,0|-vdmo0,15,4,1|-nidg1,15,4,1|-nidg0,14,9,0|-clpc1,14,9,0|-clpc0,15,4,1|-4qg41,15,4,1|-4qg40,14,9,0|667zz,14,9,0|66800,15,4,1|e1h7z,15,4,1|e1h80,14,9,0|oy5bz,14,9,0|oy5c0,15,4,1|wtejz,15,4,1|wtek0,14,9,0|17rxbz,14,9,0|17rxc0,15,4,1|1fn6jz,15,4,1|1fn6k0,14,9,0|1qjunz,14,9,0|1qjuo0,15,4,1|1yf3vz,15,4,1|1yf3w0,14,9,0|29brzz,14,9,0|29bs00,15,4,1|2h717z,15,4,1|2h7180,14,9,0|2s3pbz,14,9,0|2s3pc0,15,4,1|2zyyjz,15,4,1|2zyyk0,14,9,0|3axhbz,14,9,0|3axhc0,15,4,1|3isqjz,15,4,1|3isqk0,14,9,0|3tpenz,14,9,0|3tpeo0,15,4,1|4013vz,15,4,1|4013w0,14,9,0|4chbzz,14,9,0|4chc00,15,4,1|4it17z,15,4,1|4it180,14,9,0|6xa2nz,14,9,0|6xa2o0,15,4,1|76a2jz,15,4,1|76a2k0,14,9,0|7g3unz,14,9,0|7g3uo0,15,4,1|7p3ujz,15,4,1|7p3uk0,14,9,0|8ezenz,14,9,0|8ezeo0,15,4,1|8r2ijz,15,4,1|8r2ik0,14,9,0|8yfenz,14,9,0|8yfeo0,15,4,1|9az6jz,15,4,1|9az6k0,14,9,0|9hz3zz,14,9,0|9hz400,15,4,1|9tsyjz,15,4,1|9tsyk0,14,9,0|a1knzz,14,9,0|a1ko00,15,4,1|ab1bvz,15,4,1|ab1bw0,14,9,0|akefzz,14,9,0|akeg00,15,4,1|atrejz,15,4,1|atrek0,14,9,0|b367rz,14,9,0|b367s0,15,4,1|bcl0zz,15,4,1|bcl100,14,9,0|bmcyfz,14,9,0|bmcyg0,15,4,1|bveszz,15,4,1|bvet00,14,9,0|c4gt3z,14,9,0|c4gt40,15,4,1|cdvmbz,15,4,1|cdvmc0,14,9,0|cnjufz,14,9,0|cnjug0,15,4,1|cwynnz,15,4,1|cwyno0,14,9,0|d6brrz,14,9,0|d6brs0,15,4,1|dfqkzz,15,4,1|dfql00,14,9,0|dp5jrz,14,9,0|dp5js0,15,4,1|dykczz,15,4,1|dykd00,14,9,0|e7vmfz,14,9,0|e7vmg0,15,4,1|ehcabz,15,4,1|ehcac0,14,9,0|eqlp3z,14,9,0|eqlp40,15,4,1|f047nz,15,4,1|f047o0,14,9,0|f9hbrz,14,9,0|f9hbs0,15,4,1|fiw4zz,15,4,1|fiw500,14,9,0|fsb3rz,14,9,0|fsb3s0,15,4,1|g1pwzz,15,4,1|g1px00,14,9,0|gb313z,14,9,0|gb3140,15,4,1|gkhubz,15,4,1|gkhuc0,14,9,0|gtuyfz,14,9,0|gtuyg0,15,4,1|h39rnz,15,4,1|h39ro0,14,9,0|hcmvrz,14,9,0|hcmvs0,15,4,1|hm1ozz,15,4,1|hm1p00,14,9,0|hvgnrz,14,9,0|hvgns0,15,4,1|i4vgzz,15,4,1|i4vh00,14,9,0|ie8l3z,14,9,0|ie8l40,15,4,1|innebz,15,4,1|innec0,14,9,0|ix0ifz,14,9,0|ix0ig0,15,4,1|j5ynnz,15,4,1|j5yno0,14,9,0|jfoqfz,14,9,0|jfoqg0,15,4,1|jquibz,15,4,1|jquic0,14,9,0|jyrrrz,14,9,0|jyrrs0,15,4,1|k9mfnz,15,4,1|k9mfo0,14,9,0|kh4vrz,14,9,0|kh4vs0,15,4,1|ksannz,15,4,1|ksano0,14,9,0|l07x3z,14,9,0|l07x40,15,4,1|lb0qbz,15,4,1|lb0qc0,14,9,0|lixzrz,14,9,0|lixzs0,15,4,1|ltqszz,15,4,1|ltqt00,14,9,0|m1o2fz,14,9,0|m1o2g0,15,4,1|mcgvnz,15,4,1|mcgvo0,14,9,0|mke53z,14,9,0|mke540,15,4,1|mv6ybz,15,4,1|mv6yc0,14,9,0|n347rz,14,9,0|n347s0,15,4,1|ne9znz,15,4,1|ne9zo0,14,9,0|nluafz,14,9,0|nluag0,15,4,1|nx02bz,15,4,1|nx02c0,14,9,0|o4kd3z,14,9,0|o4kd40,15,4,1|ofq4zz,15,4,1|ofq500,14,9,0|onnefz,14,9,0|onneg0,15,4,1|oyg7nz,15,4,1|oyg7o0,14,9,0|p6dh3z,14,9,0|p6dh40,15,4,1|ph6abz,15,4,1|ph6ac0,14,9,0|pp3jrz,14,9,0|pp3js0,15,4,1|pzwczz,15,4,1|pzwd00,14,9,0|q7tmfz,14,9,0|q7tmg0,15,4,1|qizebz,15,4,1|qizec0,14,9,0|qqjp3z,14,9,0|qqjp40,15,4,1|r1pgzz,15,4,1|r1ph00,14,9,0|r99rrz,14,9,0|r99rs0,15,4,1|rkfjnz,15,4,1|rkfjo0,14,9,0|rsct3z,14,9,0|rsct40,15,4,1|s35mbz,15,4,1|s35mc0,14,9,0|sb2vrz,14,9,0|sb2vs0,15,4,1|slvozz,15,4,1|slvp00,14,9,0|stsyfz,14,9,0|stsyg0,15,4,1|t4yqbz,15,4,1|t4yqc0,14,9,0|tcj13z,14,9,0|tcj140,15,4,1|tnoszz,15,4,1|tnot00,14,9,0|tv93rz,14,9,0|tv93s0,15,4,1|u6evnz,15,4,1|u6evo0,14,9,0|uec53z,14,9,0|uec540,15,4,1|up4ybz,15,4,1|up4yc0,14,9,0|ux27rz,14,9,0|ux27s0,15,4,1|v7v0zz,15,4,1|v7v100,14,9,0|vfsafz,14,9,0|vfsag0,15,4,1|vql3nz,15,4,1|vql3o0,14,9,0|vyid3z,14,9,0|vyid40,15,4,1|w9o4zz,15,4,1|w9o500,14,9,0|wh8frz,14,9,0|wh8fs0,15,4,1|wse7nz,15,4,1|wse7o0,14,9,0|wzyifz,14,9,0|wzyig0,15,4,1|xb4abz,15,4,1|xb4ac0,14,9,0|xj1jrz,14,9,0|xj1js0,15,4,1|xtuczz,15,4,1|xtud00,14,9,0|y1rmfz,14,9,0|y1rmg0,15,4,1|yckfnz,15,4,1|yckfo0,14,9,0|ykhp3z,14,9,0|ykhp40,15,4,1|yvngzz,15,4,1|yvnh00,14,9,0|z37rrz,14,9,0|z37rs0,15,4,1|zedjnz,15,4,1|zedjo0,14,9,0|zlxufz,14,9,0|zlxug0,15,4,1|zx3mbz,15,4,1|zx3mc0,14,9,0|104nx3z,14,9,0|104nx40,15,4,1|10ftozz,15,4,1|10ftp00,14,9,0|10nqyfz,14,9,0|10nqyg0,15,4,1|10yjrnz,15,4,1|10yjro0,14,9,0|116h13z,14,9,0|116h140,15,4,1|11h9ubz,15,4,1|11h9uc0,14,9,0|11p73rz,14,9,0|11p73s0,15,4,1|120cvnz,15,4,1|120cvo0,14,9,0|127x6fz,14,9,0|127x6g0,15,4,1|12j2ybz,15,4,1|12j2yc0,14,9,0|12qn93z,14,9,0|12qn940,15,4,1|131t0zz,15,4,1|131t100,14,9,0|139qafz,14,9,0|139qag0,15,4,1|13kj3nz,15,4,1|13kj3o0,14,9,0|13sgd3z,14,9,0|13sgd40,15,4,1|14396bz,15,4,1|14396c0,14,9,0|14b6frz,14,9,0|14b6fs0,15,4,1|14lz8zz,15,4,1|14lz900,14,9,0|14twifz,14,9,0|14twig0,15,4,1|1552abz,15,4,1|1552ac0,14,9,0|15cml3z,14,9,0|15cml40,15,4,1|15nsczz,15,4,1|15nsd00,14,9,0|15vcnrz,14,9,0|15vcns0,15,4,1|166ifnz,15,4,1|166ifo0,14,9,0|16efp3z,14,9,0|16efp40,15,4,1|16p8ibz,15,4,1|16p8ic0,14,9,0|16x5rrz,14,9,0|16x5rs0,15,4,1|177ykzz,15,4,1|177yl00,14,9,0|17fvufz,14,9,0|17fvug0,15,4,1|17r1mbz,15,4,1|17r1mc0,14,9,0|17ylx3z,14,9,0|17ylx40,15,4,1|189rozz,15,4,1|189rp00,14,9,0|18hbzrz,14,9,0|18hbzs0,15,4,1|18shrnz,15,4,1|18shro0,14,9,0|190f13z,14,9,0|190f140,15,4,1|19b7ubz,15,4,1|19b7uc0,14,9,0|19j53rz,14,9,0|19j53s0,15,4,1|19txwzz,15,4,1|19txx00,14,9,0|1a1v6fz,14,9,0|1a1v6g0,15,4,1|1acnznz,15,4,1|1acnzo0,14,9,0|1akl93z,14,9,0|1akl940,15,4,1|1avr0zz,15,4,1|1avr100,14,9,0|1b3bbrz,14,9,0|1b3bbs0,15,4,1|1beh3nz,15,4,1|1beh3o0,14,9,0|1bm1efz,14,9,0|1bm1eg0,15,4,1|1bx76bz,15,4,1|1bx76c0,14,9,0|1c54frz,14,9,0|1c54fs0,15,4,1|1cfx8zz,15,4,1|1cfx900,14,9,0|1cnuifz,14,9,0|1cnuig0,15,4,1|1cynbnz,15,4,1|1cynbo0,14,9,0|1d6kl3z,14,9,0|1d6kl40,15,4,1|1dhqczz,15,4,1|1dhqd00,14,9,0|1dpanrz,14,9,0|1dpans0,15,4,1|1e0gfnz,15,4,1|1e0gfo0,14,9,0|1e80qfz,14,9,0|1e80qg0,15,4,1|1ej6ibz,15,4,1|1ej6ic0,14,9,0|1eqqt3z,14,9,0|1eqqt40,15,4,1|1f1wkzz,15,4,1|1f1wl00,14,9,0|1f9tufz,14,9,0|1f9tug0,15,4,1|1fkmnnz,15,4,1|1fkmno0,14,9,0|1fsjx3z,14,9,0|1fsjx40,15,4,1|1g3cqbz,15,4,1|1g3cqc0,14,9,0|1gb9zrz,14,9,0|1gb9zs0,15,4,1|1gmfrnz,15,4,1|1gmfro0,14,9,0|1gu02fz,14,9,0|1gu02g0,15,4,1|1h55ubz,15,4,1|1h55uc0,14,9,0|1hcq53z,14,9,0|1hcq540,15,4,1|1hnvwzz,15,4,1|1hnvx00,14,9,0|1hvt6fz,14,9,0|1hvt6g0,15,4,1|1i6lznz,15,4,1|1i6lzo0,14,9,0|1iej93z,14,9,0|1iej940,15,4,1|1ipc2bz,15,4,1|1ipc2c0,14,9,0|1ix9brz,14,9,0|1ix9bs0,15,4,1|1j824zz,15,4,1|1j82500,14,9,0|1jfzefz,14,9,0|1jfzeg0,15,4,1|1jr56bz,15,4,1|1jr56c0,14,9,0|1jyph3z,14,9,0|1jyph40,15,4,1|1k9v8zz,15,4,1|1k9v900,14,9,0|1khfjrz,14,9,0|1khfjs0,15,4,1|1kslbnz,15,4,1|1kslbo0,14,9,0|1l0il3z,14,9,0|1l0il40,15,4,1|1lbbebz,15,4,1|1lbbec0,14,9,0|1lj8nrz,14,9,0|1lj8ns0,15,4,1|1lu1gzz,15,4,1|1lu1h00,14,9,0|1m1yqfz,14,9,0|1m1yqg0,15,4,1|1md4ibz,15,4,1|1md4ic0,14,9,0|1mkot3z,14,9,0|1mkot40,15,4,1|1mvukzz,15,4,1|1mvul00,14,9,0|1n3evrz,14,9,0|1n3evs0,15,4,1|1neknnz,15,4,1|1nekno0,14,9,0|1nmhx3z,14,9,0|1nmhx40,15,4,1|1nxaqbz,15,4,1|1nxaqc0,14,9,0|1o57zrz,14,9,0|1o57zs0,15,4,1|1og0szz,15,4,1|1og0t00,14,9,0|1ony2fz,14,9,0|1ony2g0,15,4,1|1oyqvnz,15,4,1|1oyqvo0,14,9,0|1p6o53z,14,9,0|1p6o540,15,4,1|1phtwzz,15,4,1|1phtx00,14,9,0|1ppe7rz,14,9,0|1ppe7s0,15,4,1|1q0jznz,15,4,1|1q0jzo0,14,9,0|1q84afz,14,9,0|1q84ag0,15,4,1|1qja2bz,15,4,1|1qja2c0,14,9,0|1qr7brz,14,9,0|1qr7bs0,15,4,1|1r204zz,15,4,1|1r20500,14,9,0|1r9xefz,14,9,0|1r9xeg0,15,4,1|1rkq7nz,15,4,1|1rkq7o0,14,9,0|1rsnh3z,14,9,0|1rsnh40,15,4,1|1s3t8zz,15,4,1|1s3t900,14,9,0|1sbdjrz,14,9,0|1sbdjs0,15,4,1|1smjbnz,15,4,1|1smjbo0,14,9,0|1su3mfz,14,9,0|1su3mg0,15,4,1|1t59ebz,15,4,1|1t59ec0,14,9,0|1tctp3z,14,9,0|1tctp40,15,4,1|1tnzgzz,15,4,1|1tnzh00,14,9,0|1tvwqfz,14,9,0|1tvwqg0,15,4,1|1u6pjnz,15,4,1|1u6pjo0,14,9,0|1uemt3z,14,9,0|1uemt40,15,4,1|1upfmbz,15,4,1|1upfmc0,14,9,0|1uxcvrz,14,9,0|1uxcvs0,15,4,1|1v8innz,15,4,1|1v8ino0,14,9,0|1vg2yfz,14,9,0|1vg2yg0,15,4,1|1vr8qbz,15,4,1|1vr8qc0,14,9,0|NaN,14,9,0\",\"Asia/Dhaka|,0,225,0|-15r1q2t,0,225,0|-15r1q2s,77,226,0|-eqtpox,77,226,0|-eqtpow,109,223,0|-ef78q1,109,223,0|-ef78q0,108,222,0|-e9lba1,108,222,0|-e9lba0,109,223,0|-9j0ne1,109,223,0|-9j0ne0,96,190,0|klhwjz,96,190,0|klhwk0,90,185,1|kvj0jz,90,185,1|kvj0k0,96,190,0|NaN,96,190,0\",\"Asia/Dili|,0,227,0|-u9s4l9,0,227,0|-u9s4l8,88,183,0|-ejfac1,88,183,0|-ejfac0,107,218,0|3b0hnz,107,218,0|3b0ho0,88,183,0|g0zlrz,88,183,0|g0zls0,107,218,0|NaN,107,218,0\",\"Asia/Dubai|,0,228,0|-q3gnkp,0,228,0|-q3gnko,105,203,0|NaN,105,203,0\",\"Asia/Dushanbe|,0,229,0|-nu18qp,0,229,0|-nu18qo,91,186,0|-kmr9w1,91,186,0|-kmr9w0,96,190,0|5vaxzz,96,190,0|5vay00,90,185,1|64pr7z,90,185,1|64pr80,96,190,0|6e2vbz,96,190,0|6e2vc0,90,185,1|6nhojz,90,185,1|6nhok0,96,190,0|6wusnz,96,190,0|6wuso0,90,185,1|769lvz,90,185,1|769lw0,96,190,0|7foknz,96,190,0|7foko0,90,185,1|7p1rjz,90,185,1|7p1rk0,96,190,0|7yesvz,96,190,0|7yesw0,90,185,1|87ru7z,90,185,1|87ru80,96,190,0|8h4vjz,96,190,0|8h4vk0,90,185,1|8qhwvz,90,185,1|8qhww0,96,190,0|8zuy7z,96,190,0|8zuy80,90,185,1|997zjz,90,185,1|997zk0,96,190,0|9il0vz,96,190,0|9il0w0,90,185,1|9ry27z,90,185,1|9ry280,96,190,0|a1b3jz,96,190,0|a1b3k0,90,185,1|aao4vz,90,185,1|aao4w0,96,190,0|ak167z,96,190,0|ak1680,90,185,1|atr67z,90,185,1|atr680,96,190,0|b347jz,96,190,0|b347k0,96,190,1|bbgabz,96,190,1|bbgac0,91,186,0|NaN,91,186,0\",\"Asia/Famagusta|,0,230,0|-p4bqad,0,230,0|-p4bqac,14,9,0|2r67rz,14,9,0|2r67s0,15,4,1|30j6bz,15,4,1|30j6c0,14,9,0|3bn93z,14,9,0|3bn940,15,4,1|3jb3nz,15,4,1|3jb3o0,14,9,0|3s9efz,14,9,0|3s9eg0,15,4,1|419ebz,15,4,1|419ec0,14,9,0|4azh3z,14,9,0|4azh40,15,4,1|4keabz,15,4,1|4keac0,14,9,0|4tpjrz,14,9,0|4tpjs0,15,4,1|532ibz,15,4,1|532ic0,14,9,0|5csl3z,14,9,0|5csl40,15,4,1|5lskzz,15,4,1|5lsl00,14,9,0|5v5p3z,14,9,0|5v5p40,15,4,1|64innz,15,4,1|64ino0,14,9,0|6dvrrz,14,9,0|6dvrs0,15,4,1|6n8qbz,15,4,1|6n8qc0,14,9,0|6wlufz,14,9,0|6wlug0,15,4,1|75yszz,15,4,1|75yt00,14,9,0|7fbx3z,14,9,0|7fbx40,15,4,1|7p1ubz,15,4,1|7p1uc0,14,9,0|7yeyfz,14,9,0|7yeyg0,15,4,1|87rwzz,15,4,1|87rx00,14,9,0|8h513z,14,9,0|8h5140,15,4,1|8qhznz,15,4,1|8qhzo0,14,9,0|8zv3rz,14,9,0|8zv3s0,15,4,1|9982bz,15,4,1|9982c0,14,9,0|9il6fz,14,9,0|9il6g0,15,4,1|9ry4zz,15,4,1|9ry500,14,9,0|a1b93z,14,9,0|a1b940,15,4,1|aao7nz,15,4,1|aao7o0,14,9,0|ak1brz,14,9,0|ak1bs0,15,4,1|atr8zz,15,4,1|atr900,14,9,0|b34d3z,14,9,0|b34d40,15,4,1|bchbnz,15,4,1|bchbo0,14,9,0|blufrz,14,9,0|blufs0,15,4,1|bv7ebz,15,4,1|bv7ec0,14,9,0|c4kifz,14,9,0|c4kig0,15,4,1|cdxgzz,15,4,1|cdxh00,14,9,0|cnal3z,14,9,0|cnal40,15,4,1|cwnjnz,15,4,1|cwnjo0,14,9,0|d60nrz,14,9,0|d60ns0,15,4,1|dfdmbz,15,4,1|dfdmc0,14,9,0|dp3p3z,14,9,0|dp3p40,15,4,1|dygnnz,15,4,1|dygno0,14,9,0|e7trrz,14,9,0|e7trs0,15,4,1|eh6qbz,15,4,1|eh6qc0,14,9,0|eqjufz,14,9,0|eqjug0,15,4,1|f1cyrz,15,4,1|f1cys0,14,9,0|f9a5fz,14,9,0|f9a5g0,15,4,1|fkg03z,15,4,1|fkg040,14,9,0|fs083z,14,9,0|fs0840,15,4,1|g362rz,15,4,1|g362s0,14,9,0|gaqarz,14,9,0|gaqas0,15,4,1|glw5fz,15,4,1|glw5g0,14,9,0|gttc3z,14,9,0|gttc40,15,4,1|h4m83z,15,4,1|h4m840,14,9,0|hcjerz,14,9,0|hcjes0,15,4,1|hncarz,15,4,1|hncas0,14,9,0|hv9hfz,14,9,0|hv9hg0,15,4,1|i6fc3z,15,4,1|i6fc40,14,9,0|idzk3z,14,9,0|idzk40,15,4,1|ip5erz,15,4,1|ip5es0,14,9,0|iwpmrz,14,9,0|iwpms0,15,4,1|j7vhfz,15,4,1|j7vhg0,14,9,0|jffpfz,14,9,0|jffpg0,15,4,1|jqlk3z,15,4,1|jqlk40,14,9,0|jyiqrz,14,9,0|jyiqs0,15,4,1|k9bmrz,15,4,1|k9bms0,14,9,0|kh8tfz,14,9,0|kh8tg0,15,4,1|ks1pfz,15,4,1|ks1pg0,14,9,0|kzyw3z,14,9,0|kzyw40,15,4,1|lb4qrz,15,4,1|lb4qs0,14,9,0|lioyrz,14,9,0|lioys0,15,4,1|ltutfz,15,4,1|ltutg0,14,9,0|m1f1fz,14,9,0|m1f1g0,15,4,1|mckw3z,15,4,1|mckw40,14,9,0|mki2rz,14,9,0|mki2s0,15,4,1|mvayrz,15,4,1|mvays0,14,9,0|n385fz,14,9,0|n385g0,15,4,1|ne11fz,15,4,1|ne11g0,14,9,0|nly83z,14,9,0|nly840,15,4,1|nwr43z,15,4,1|nwr440,14,9,0|o4oarz,14,9,0|o4oas0,15,4,1|od5jnz,15,4,1|od5jo0,100,4,0|oyk83z,100,4,0|oyk840,14,9,0|p64g3z,14,9,0|p64g40,15,4,1|phaarz,15,4,1|phaas0,14,9,0|pp7hfz,14,9,0|pp7hg0,15,4,1|q00dfz,15,4,1|q00dg0,14,9,0|q7xk3z,14,9,0|q7xk40,15,4,1|qiqg3z,15,4,1|qiqg40,14,9,0|qqnmrz,14,9,0|qqnms0,15,4,1|r1thfz,15,4,1|r1thg0,14,9,0|r9dpfz,14,9,0|r9dpg0,15,4,1|rkjk3z,15,4,1|rkjk40,14,9,0|rs3s3z,14,9,0|rs3s40,15,4,1|s39mrz,15,4,1|s39ms0,14,9,0|sb6tfz,14,9,0|sb6tg0,15,4,1|slzpfz,15,4,1|slzpg0,14,9,0|stww3z,14,9,0|stww40,15,4,1|t4ps3z,15,4,1|t4ps40,14,9,0|tcmyrz,14,9,0|tcmys0,15,4,1|tnfurz,15,4,1|tnfus0,14,9,0|tvd1fz,14,9,0|tvd1g0,15,4,1|u6iw3z,15,4,1|u6iw40,14,9,0|ue343z,14,9,0|ue3440,15,4,1|up8yrz,15,4,1|up8ys0,14,9,0|uwt6rz,14,9,0|uwt6s0,15,4,1|v7z1fz,15,4,1|v7z1g0,14,9,0|vfw83z,14,9,0|vfw840,15,4,1|vqp43z,15,4,1|vqp440,14,9,0|vymarz,14,9,0|vymas0,15,4,1|w9f6rz,15,4,1|w9f6s0,14,9,0|whcdfz,14,9,0|whcdg0,15,4,1|wsi83z,15,4,1|wsi840,14,9,0|x02g3z,14,9,0|x02g40,15,4,1|xb8arz,15,4,1|xb8as0,14,9,0|xisirz,14,9,0|xisis0,15,4,1|xtydfz,15,4,1|xtydg0,14,9,0|y1ilfz,14,9,0|y1ilg0,15,4,1|ycog3z,15,4,1|ycog40,14,9,0|yklmrz,14,9,0|yklms0,15,4,1|yveirz,15,4,1|yveis0,14,9,0|z3bpfz,14,9,0|z3bpg0,15,4,1|ze4lfz,15,4,1|ze4lg0,14,9,0|zm1s3z,14,9,0|zm1s40,15,4,1|zx7mrz,15,4,1|zx7ms0,14,9,0|104rurz,14,9,0|104rus0,15,4,1|10fxpfz,15,4,1|10fxpg0,14,9,0|10nhxfz,14,9,0|10nhxg0,15,4,1|10yns3z,15,4,1|10yns40,14,9,0|116kyrz,14,9,0|116kys0,15,4,1|11hdurz,15,4,1|11hdus0,14,9,0|11pb1fz,14,9,0|11pb1g0,15,4,1|1203xfz,15,4,1|1203xg0,14,9,0|128143z,14,9,0|1281440,15,4,1|12iu03z,15,4,1|12iu040,14,9,0|12qr6rz,14,9,0|12qr6s0,15,4,1|131x1fz,15,4,1|131x1g0,14,9,0|139h9fz,14,9,0|139h9g0,15,4,1|13kn43z,15,4,1|13kn440,14,9,0|13s7c3z,14,9,0|13s7c40,15,4,1|143d6rz,15,4,1|143d6s0,14,9,0|14badfz,14,9,0|14badg0,15,4,1|14m39fz,15,4,1|14m39g0,14,9,0|14u0g3z,14,9,0|14u0g40,15,4,1|154tc3z,15,4,1|154tc40,14,9,0|15cqirz,14,9,0|15cqis0,15,4,1|15nwdfz,15,4,1|15nwdg0,14,9,0|15vglfz,14,9,0|15vglg0,15,4,1|166mg3z,15,4,1|166mg40,14,9,0|16e6o3z,14,9,0|16e6o40,15,4,1|16pcirz,15,4,1|16pcis0,14,9,0|16x9pfz,14,9,0|16x9pg0,15,4,1|1782lfz,15,4,1|1782lg0,14,9,0|17fzs3z,14,9,0|17fzs40,15,4,1|17qso3z,15,4,1|17qso40,14,9,0|17ypurz,14,9,0|17ypus0,15,4,1|189iqrz,15,4,1|189iqs0,14,9,0|18hfxfz,14,9,0|18hfxg0,15,4,1|18sls3z,15,4,1|18sls40,14,9,0|190603z,14,9,0|1906040,15,4,1|19bburz,15,4,1|19bbus0,14,9,0|19iw2rz,14,9,0|19iw2s0,15,4,1|19u1xfz,15,4,1|19u1xg0,14,9,0|1a1z43z,14,9,0|1a1z440,15,4,1|1acs03z,15,4,1|1acs040,14,9,0|1akp6rz,14,9,0|1akp6s0,15,4,1|1avi2rz,15,4,1|1avi2s0,14,9,0|1b3f9fz,14,9,0|1b3f9g0,15,4,1|1bel43z,15,4,1|1bel440,14,9,0|1bm5c3z,14,9,0|1bm5c40,15,4,1|1bxb6rz,15,4,1|1bxb6s0,14,9,0|1c4verz,14,9,0|1c4ves0,15,4,1|1cg19fz,15,4,1|1cg19g0,14,9,0|1cnlhfz,14,9,0|1cnlhg0,15,4,1|1cyrc3z,15,4,1|1cyrc40,14,9,0|1d6oirz,14,9,0|1d6ois0,15,4,1|1dhherz,15,4,1|1dhhes0,14,9,0|1dpelfz,14,9,0|1dpelg0,15,4,1|1e07hfz,15,4,1|1e07hg0,14,9,0|1e84o3z,14,9,0|1e84o40,15,4,1|1ejairz,15,4,1|1ejais0,14,9,0|1equqrz,14,9,0|1equqs0,15,4,1|1f20lfz,15,4,1|1f20lg0,14,9,0|1f9ktfz,14,9,0|1f9ktg0,15,4,1|1fkqo3z,15,4,1|1fkqo40,14,9,0|1fsnurz,14,9,0|1fsnus0,15,4,1|1g3gqrz,15,4,1|1g3gqs0,14,9,0|1gbdxfz,14,9,0|1gbdxg0,15,4,1|1gm6tfz,15,4,1|1gm6tg0,14,9,0|1gu403z,14,9,0|1gu4040,15,4,1|1h4ww3z,15,4,1|1h4ww40,14,9,0|1hcu2rz,14,9,0|1hcu2s0,15,4,1|1hnzxfz,15,4,1|1hnzxg0,14,9,0|1hvk5fz,14,9,0|1hvk5g0,15,4,1|1i6q03z,15,4,1|1i6q040,14,9,0|1iea83z,14,9,0|1iea840,15,4,1|1ipg2rz,15,4,1|1ipg2s0,14,9,0|1ixd9fz,14,9,0|1ixd9g0,15,4,1|1j865fz,15,4,1|1j865g0,14,9,0|1jg3c3z,14,9,0|1jg3c40,15,4,1|1jqw83z,15,4,1|1jqw840,14,9,0|1jyterz,14,9,0|1jytes0,15,4,1|1k9z9fz,15,4,1|1k9z9g0,14,9,0|1khjhfz,14,9,0|1khjhg0,15,4,1|1kspc3z,15,4,1|1kspc40,14,9,0|1l09k3z,14,9,0|1l09k40,15,4,1|1lbferz,15,4,1|1lbfes0,14,9,0|1ljclfz,14,9,0|1ljclg0,15,4,1|1lu5hfz,15,4,1|1lu5hg0,14,9,0|1m22o3z,14,9,0|1m22o40,15,4,1|1mcvk3z,15,4,1|1mcvk40,14,9,0|1mksqrz,14,9,0|1mksqs0,15,4,1|1mvlmrz,15,4,1|1mvlms0,14,9,0|1n3itfz,14,9,0|1n3itg0,15,4,1|1neoo3z,15,4,1|1neoo40,14,9,0|1nm8w3z,14,9,0|1nm8w40,15,4,1|1nxeqrz,15,4,1|1nxeqs0,14,9,0|1o4yyrz,14,9,0|1o4yys0,15,4,1|1og4tfz,15,4,1|1og4tg0,14,9,0|1oo203z,14,9,0|1oo2040,15,4,1|1oyuw3z,15,4,1|1oyuw40,14,9,0|1p6s2rz,14,9,0|1p6s2s0,15,4,1|1phkyrz,15,4,1|1phkys0,14,9,0|1ppi5fz,14,9,0|1ppi5g0,15,4,1|1q0o03z,15,4,1|1q0o040,14,9,0|1q8883z,14,9,0|1q88840,15,4,1|1qje2rz,15,4,1|1qje2s0,14,9,0|1qqyarz,14,9,0|1qqyas0,15,4,1|1r245fz,15,4,1|1r245g0,14,9,0|1r9odfz,14,9,0|1r9odg0,15,4,1|1rku83z,15,4,1|1rku840,14,9,0|1rsrerz,14,9,0|1rsres0,15,4,1|1s3karz,15,4,1|1s3kas0,14,9,0|1sbhhfz,14,9,0|1sbhhg0,15,4,1|1smadfz,15,4,1|1smadg0,14,9,0|1su7k3z,14,9,0|1su7k40,15,4,1|1t5derz,15,4,1|1t5des0,14,9,0|1tcxmrz,14,9,0|1tcxms0,15,4,1|1to3hfz,15,4,1|1to3hg0,14,9,0|1tvnpfz,14,9,0|1tvnpg0,15,4,1|1u6tk3z,15,4,1|1u6tk40,14,9,0|1ueqqrz,14,9,0|1ueqqs0,15,4,1|1upjmrz,15,4,1|1upjms0,14,9,0|1uxgtfz,14,9,0|1uxgtg0,15,4,1|1v89pfz,15,4,1|1v89pg0,14,9,0|1vg6w3z,14,9,0|1vg6w40,15,4,1|1vqzs3z,15,4,1|1vqzs40,14,9,0|NaN,14,9,0\",\"Asia/Gaza|,0,231,0|-1054x1t,0,231,0|-1054x1s,14,9,0|-ffv401,14,9,0|-ffv400,15,4,1|-f9l6o1,15,4,1|-f9l6o0,14,9,0|-f765c1,14,9,0|-f765c0,15,4,1|-e6fxc1,15,4,1|-e6fxc0,14,9,0|-dyoao1,14,9,0|-dyoao0,15,4,1|-dno001,15,4,1|-dno000,14,9,0|-dfuio1,14,9,0|-dfuio0,15,4,1|-d4u801,15,4,1|-d4u800,14,9,0|-cwatc1,14,9,0|-cwatc0,15,4,1|-cm2ao1,15,4,1|-cm2ao0,14,9,0|-cdiw01,14,9,0|-cdiw00,15,4,1|-c3adc1,15,4,1|-c3adc0,14,9,0|-6lluw1,14,9,0|-6lluw0,15,4,1|-6e79o1,15,4,1|-6e79o0,14,9,0|-63alk1,14,9,0|-63alk0,15,4,1|-5vfcc1,15,4,1|-5vfcc0,14,9,0|-5kilg1,14,9,0|-5kilg0,15,4,1|-5cp1c1,15,4,1|-5cp1c0,14,9,0|-51otg1,14,9,0|-51otg0,15,4,1|-4tv9c1,15,4,1|-4tv9c0,14,9,0|-4iww41,14,9,0|-4iww40,15,4,1|-4b3c01,15,4,1|-4b3c00,14,9,0|-404ys1,14,9,0|-404ys0,15,4,1|-3sbeo1,15,4,1|-3sbeo0,14,9,0|-3hd1g1,14,9,0|-3hd1g0,15,4,1|-39jhc1,15,4,1|-39jhc0,14,9,0|-2yj9g1,14,9,0|-2yj9g0,15,4,1|-2qppc1,15,4,1|-2qppc0,14,9,0|-2frc41,14,9,0|-2frc40,15,4,1|-27xs01,15,4,1|-27xs00,14,9,0|-1wzes1,14,9,0|-1wzes0,15,4,1|-1p4001,15,4,1|-1p4000,14,9,0|-1e7hg1,14,9,0|-1e7hg0,15,4,1|-1ceto1,15,4,1|-1ceto0,110,9,0|2crp3z,110,9,0|2crp40,111,4,1|2ht3nz,111,4,1|2ht3o0,110,9,0|2rj6fz,110,9,0|2rj6g0,111,4,1|2ydebz,111,4,1|2ydec0,110,9,0|5iwyfz,110,9,0|5iwyg0,111,4,1|5l2qfz,111,4,1|5l2qg0,110,9,0|7hhp3z,110,9,0|7hhp40,111,4,1|7n93rz,111,4,1|7n93s0,110,9,0|7z4vrz,110,9,0|7z4vs0,111,4,1|86c2bz,111,4,1|86c2c0,110,9,0|8jnrrz,110,9,0|8jnrs0,111,4,1|8pf3nz,111,4,1|8pf3o0,110,9,0|90ql3z,110,9,0|90ql40,111,4,1|98i4zz,111,4,1|98i500,110,9,0|9jb3rz,110,9,0|9jb3s0,111,4,1|9qv8zz,111,4,1|9qv900,110,9,0|a342fz,110,9,0|a342g0,111,4,1|a9lbnz,111,4,1|a9lbo0,110,9,0|ak1brz,110,9,0|ak1bs0,111,4,1|aryfnz,111,4,1|aryfo0,110,9,0|b2refz,110,9,0|b2reg0,111,4,1|bb1gzz,111,4,1|bb1h00,110,9,0|blufrz,110,9,0|blufs0,111,4,1|bu4ibz,111,4,1|bu4ic0,110,9,0|c4trrz,110,9,0|c4trs0,111,4,1|ccukzz,111,4,1|ccul00,110,9,0|cnjufz,110,9,0|cnjug0,111,4,1|cv7ozz,111,4,1|cv7p00,110,9,0|d69x3z,110,9,0|d69x40,111,4,1|deaqbz,111,4,1|deaqc0,110,9,0|dkh13z,110,9,0|dkh140,14,9,0|dpcyfz,14,9,0|dpcyg0,15,4,1|dy02fz,15,4,1|dy02g0,14,9,0|e8313z,14,9,0|e83140,15,4,1|egq53z,15,4,1|egq540,14,9,0|eqt3rz,14,9,0|eqt3s0,15,4,1|ezg7rz,15,4,1|ezg7s0,14,9,0|fa93rz,14,9,0|fa93s0,15,4,1|fjm2bz,15,4,1|fjm2c0,14,9,0|ftc53z,14,9,0|ftc540,15,4,1|g2p3nz,15,4,1|g2p3o0,14,9,0|gc27rz,14,9,0|gc27s0,15,4,1|glf6bz,15,4,1|glf6c0,14,9,0|gusafz,14,9,0|gusag0,15,4,1|h458zz,15,4,1|h45900,14,9,0|hdid3z,14,9,0|hdid40,15,4,1|hmvbnz,15,4,1|hmvbo0,14,9,0|hw8frz,14,9,0|hw8fs0,15,4,1|i4vjrz,15,4,1|i4vjs0,14,9,0|ieyifz,14,9,0|ieyig0,15,4,1|int3vz,15,4,1|int3w0,14,9,0|ix0ifz,14,9,0|ix0ig0,15,4,1|j5ynnz,15,4,1|j5yno0,14,9,0|jfsfrz,14,9,0|jfsfs0,15,4,1|joa2jz,15,4,1|joa2k0,14,9,0|jyet3z,14,9,0|jyet40,15,4,1|k6bwzz,15,4,1|k6bx00,14,9,0|kh4vrz,14,9,0|kh4vs0,15,4,1|kpf13z,15,4,1|kpf140,14,9,0|kzwt5n,14,9,0|kzwt5o,15,4,1|l6yfnz,15,4,1|l6yfo0,14,9,0|lixztn,14,9,0|lixzto,15,4,1|lp7ubz,15,4,1|lp7uc0,14,9,0|m1o2fz,14,9,0|m1o2g0,15,4,1|mao53z,15,4,1|mao540,14,9,0|mke53z,14,9,0|mke540,15,4,1|mtr3nz,15,4,1|mtr3o0,14,9,0|n347rz,14,9,0|n347s0,15,4,1|ndx0zz,15,4,1|ndx100,14,9,0|nlw53z,14,9,0|nlw540,15,4,1|nwn6fz,15,4,1|nwn6g0,14,9,0|o4majz,14,9,0|o4mak0,15,4,1|ofs2fz,15,4,1|ofs2g0,14,9,0|oncd7z,14,9,0|oncd80,15,4,1|oyi53z,15,4,1|oyi540,14,9,0|p62fvz,14,9,0|p62fw0,15,4,1|ph87rz,15,4,1|ph87s0,14,9,0|pp3jrz,14,9,0|pp3js0,15,4,1|pzy7nz,15,4,1|pzy7o0,14,9,0|q7vh3z,14,9,0|q7vh40,15,4,1|qiod3z,15,4,1|qiod40,14,9,0|qqljrz,14,9,0|qqljs0,15,4,1|r1pjrz,15,4,1|r1pjs0,14,9,0|r9bmfz,14,9,0|r9bmg0,15,4,1|rkfmfz,15,4,1|rkfmg0,14,9,0|rs1p3z,14,9,0|rs1p40,15,4,1|s35p3z,15,4,1|s35p40,14,9,0|sb4qfz,14,9,0|sb4qg0,15,4,1|slvrrz,15,4,1|slvrs0,14,9,0|stut3z,14,9,0|stut40,15,4,1|t4yt3z,15,4,1|t4yt40,14,9,0|tckvrz,14,9,0|tckvs0,15,4,1|tnovrz,15,4,1|tnovs0,14,9,0|tvayfz,14,9,0|tvayg0,15,4,1|u6eyfz,15,4,1|u6eyg0,14,9,0|ue113z,14,9,0|ue1140,15,4,1|up513z,15,4,1|up5140,14,9,0|uwr3rz,14,9,0|uwr3s0,15,4,1|v7v3rz,15,4,1|v7v3s0,14,9,0|vfu53z,14,9,0|vfu540,15,4,1|vql6fz,15,4,1|vql6g0,14,9,0|vyk7rz,14,9,0|vyk7s0,15,4,1|w9o7rz,15,4,1|w9o7s0,14,9,0|whaafz,14,9,0|whaag0,15,4,1|wseafz,15,4,1|wseag0,14,9,0|x00d3z,14,9,0|x00d40,15,4,1|xb4d3z,15,4,1|xb4d40,14,9,0|xiqfrz,14,9,0|xiqfs0,15,4,1|xtufrz,15,4,1|xtufs0,14,9,0|y1gifz,14,9,0|y1gig0,15,4,1|yckifz,15,4,1|yckig0,14,9,0|ykjjrz,14,9,0|ykjjs0,15,4,1|yvnjrz,15,4,1|yvnjs0,14,9,0|z39mfz,14,9,0|z39mg0,15,4,1|zedmfz,15,4,1|zedmg0,14,9,0|zlzp3z,14,9,0|zlzp40,15,4,1|zx3p3z,15,4,1|zx3p40,14,9,0|104prrz,14,9,0|104prs0,15,4,1|10ftrrz,15,4,1|10ftrs0,14,9,0|10nfufz,14,9,0|10nfug0,15,4,1|10yjufz,15,4,1|10yjug0,14,9,0|116ivrz,14,9,0|116ivs0,15,4,1|11h9x3z,15,4,1|11h9x40,14,9,0|11p8yfz,14,9,0|11p8yg0,15,4,1|120cyfz,15,4,1|120cyg0,14,9,0|127z13z,14,9,0|127z140,15,4,1|12j313z,15,4,1|12j3140,14,9,0|12qp3rz,14,9,0|12qp3s0,15,4,1|131t3rz,15,4,1|131t3s0,14,9,0|139f6fz,14,9,0|139f6g0,15,4,1|13kj6fz,15,4,1|13kj6g0,14,9,0|13s593z,14,9,0|13s5940,15,4,1|143993z,15,4,1|1439940,14,9,0|14b8afz,14,9,0|14b8ag0,15,4,1|14lzbrz,15,4,1|14lzbs0,14,9,0|14tyd3z,14,9,0|14tyd40,15,4,1|1552d3z,15,4,1|1552d40,14,9,0|15cofrz,14,9,0|15cofs0,15,4,1|15nsfrz,15,4,1|15nsfs0,14,9,0|15veifz,14,9,0|15veig0,15,4,1|166iifz,15,4,1|166iig0,14,9,0|16e4l3z,14,9,0|16e4l40,15,4,1|16p8l3z,15,4,1|16p8l40,14,9,0|16x7mfz,14,9,0|16x7mg0,15,4,1|177ynrz,15,4,1|177yns0,14,9,0|17fxp3z,14,9,0|17fxp40,15,4,1|17r1p3z,15,4,1|17r1p40,14,9,0|17ynrrz,14,9,0|17ynrs0,15,4,1|189rrrz,15,4,1|189rrs0,14,9,0|18hdufz,14,9,0|18hdug0,15,4,1|18shufz,15,4,1|18shug0,14,9,0|1903x3z,14,9,0|1903x40,15,4,1|19b7x3z,15,4,1|19b7x40,14,9,0|19itzrz,14,9,0|19itzs0,15,4,1|19txzrz,15,4,1|19txzs0,14,9,0|1a1x13z,14,9,0|1a1x140,15,4,1|1aco2fz,15,4,1|1aco2g0,14,9,0|1akn3rz,14,9,0|1akn3s0,15,4,1|1avr3rz,15,4,1|1avr3s0,14,9,0|1b3d6fz,14,9,0|1b3d6g0,15,4,1|1beh6fz,15,4,1|1beh6g0,14,9,0|1bm393z,14,9,0|1bm3940,15,4,1|1bx793z,15,4,1|1bx7940,14,9,0|1c4tbrz,14,9,0|1c4tbs0,15,4,1|1cfxbrz,15,4,1|1cfxbs0,14,9,0|1cnjefz,14,9,0|1cnjeg0,15,4,1|1cynefz,15,4,1|1cyneg0,14,9,0|1d6mfrz,14,9,0|1d6mfs0,15,4,1|1dhqfrz,15,4,1|1dhqfs0,14,9,0|1dpcifz,14,9,0|1dpcig0,15,4,1|1e0gifz,15,4,1|1e0gig0,14,9,0|1e82l3z,14,9,0|1e82l40,15,4,1|1ej6l3z,15,4,1|1ej6l40,14,9,0|1eqsnrz,14,9,0|1eqsns0,15,4,1|1f1wnrz,15,4,1|1f1wns0,14,9,0|1f9iqfz,14,9,0|1f9iqg0,15,4,1|1fkmqfz,15,4,1|1fkmqg0,14,9,0|1fslrrz,14,9,0|1fslrs0,15,4,1|1g3ct3z,15,4,1|1g3ct40,14,9,0|1gbbufz,14,9,0|1gbbug0,15,4,1|1gmfufz,15,4,1|1gmfug0,14,9,0|1gu1x3z,14,9,0|1gu1x40,15,4,1|1h55x3z,15,4,1|1h55x40,14,9,0|1hcrzrz,14,9,0|1hcrzs0,15,4,1|1hnvzrz,15,4,1|1hnvzs0,14,9,0|1hvi2fz,14,9,0|1hvi2g0,15,4,1|1i6m2fz,15,4,1|1i6m2g0,14,9,0|1ie853z,14,9,0|1ie8540,15,4,1|1ipc53z,15,4,1|1ipc540,14,9,0|1ixb6fz,14,9,0|1ixb6g0,15,4,1|1j827rz,15,4,1|1j827s0,14,9,0|1jg193z,14,9,0|1jg1940,15,4,1|1jr593z,15,4,1|1jr5940,14,9,0|1jyrbrz,14,9,0|1jyrbs0,15,4,1|1k9vbrz,15,4,1|1k9vbs0,14,9,0|1khhefz,14,9,0|1khheg0,15,4,1|1kslefz,15,4,1|1ksleg0,14,9,0|1l07h3z,14,9,0|1l07h40,15,4,1|1lbbh3z,15,4,1|1lbbh40,14,9,0|1ljaifz,14,9,0|1ljaig0,15,4,1|1lu1jrz,15,4,1|1lu1js0,14,9,0|1m20l3z,14,9,0|1m20l40,15,4,1|1md4l3z,15,4,1|1md4l40,14,9,0|1mkqnrz,14,9,0|1mkqns0,15,4,1|1mvunrz,15,4,1|1mvuns0,14,9,0|1n3gqfz,14,9,0|1n3gqg0,15,4,1|1nekqfz,15,4,1|1nekqg0,14,9,0|1nm6t3z,14,9,0|1nm6t40,15,4,1|1nxat3z,15,4,1|1nxat40,14,9,0|1o4wvrz,14,9,0|1o4wvs0,15,4,1|1og0vrz,15,4,1|1og0vs0,14,9,0|1onzx3z,14,9,0|1onzx40,15,4,1|1oyqyfz,15,4,1|1oyqyg0,14,9,0|1p6pzrz,14,9,0|1p6pzs0,15,4,1|1phtzrz,15,4,1|1phtzs0,14,9,0|1ppg2fz,14,9,0|1ppg2g0,15,4,1|1q0k2fz,15,4,1|1q0k2g0,14,9,0|1q8653z,14,9,0|1q86540,15,4,1|1qja53z,15,4,1|1qja540,14,9,0|1qqw7rz,14,9,0|1qqw7s0,15,4,1|1r207rz,15,4,1|1r207s0,14,9,0|1r9mafz,14,9,0|1r9mag0,15,4,1|1rkqafz,15,4,1|1rkqag0,14,9,0|1rspbrz,14,9,0|1rspbs0,15,4,1|1s3tbrz,15,4,1|1s3tbs0,14,9,0|1sbfefz,14,9,0|1sbfeg0,15,4,1|1smjefz,15,4,1|1smjeg0,14,9,0|1su5h3z,14,9,0|1su5h40,15,4,1|1t59h3z,15,4,1|1t59h40,14,9,0|1tcvjrz,14,9,0|1tcvjs0,15,4,1|1tnzjrz,15,4,1|1tnzjs0,14,9,0|1tvlmfz,14,9,0|1tvlmg0,15,4,1|1u6pmfz,15,4,1|1u6pmg0,14,9,0|1ueonrz,14,9,0|1ueons0,15,4,1|1upfp3z,15,4,1|1upfp40,14,9,0|1uxeqfz,14,9,0|1uxeqg0,15,4,1|1v8iqfz,15,4,1|1v8iqg0,14,9,0|1vg4t3z,14,9,0|1vg4t40,15,4,1|1vr8t3z,15,4,1|1vr8t40,14,9,0|NaN,14,9,0\",\"Asia/Hebron|,0,232,0|-1054x60,0,232,0|-1054x5z,14,9,0|-ffv401,14,9,0|-ffv400,15,4,1|-f9l6o1,15,4,1|-f9l6o0,14,9,0|-f765c1,14,9,0|-f765c0,15,4,1|-e6fxc1,15,4,1|-e6fxc0,14,9,0|-dyoao1,14,9,0|-dyoao0,15,4,1|-dno001,15,4,1|-dno000,14,9,0|-dfuio1,14,9,0|-dfuio0,15,4,1|-d4u801,15,4,1|-d4u800,14,9,0|-cwatc1,14,9,0|-cwatc0,15,4,1|-cm2ao1,15,4,1|-cm2ao0,14,9,0|-cdiw01,14,9,0|-cdiw00,15,4,1|-c3adc1,15,4,1|-c3adc0,14,9,0|-6lluw1,14,9,0|-6lluw0,15,4,1|-6e79o1,15,4,1|-6e79o0,14,9,0|-63alk1,14,9,0|-63alk0,15,4,1|-5vfcc1,15,4,1|-5vfcc0,14,9,0|-5kilg1,14,9,0|-5kilg0,15,4,1|-5cp1c1,15,4,1|-5cp1c0,14,9,0|-51otg1,14,9,0|-51otg0,15,4,1|-4tv9c1,15,4,1|-4tv9c0,14,9,0|-4iww41,14,9,0|-4iww40,15,4,1|-4b3c01,15,4,1|-4b3c00,14,9,0|-404ys1,14,9,0|-404ys0,15,4,1|-3sbeo1,15,4,1|-3sbeo0,14,9,0|-3hd1g1,14,9,0|-3hd1g0,15,4,1|-39jhc1,15,4,1|-39jhc0,14,9,0|-2yj9g1,14,9,0|-2yj9g0,15,4,1|-2qppc1,15,4,1|-2qppc0,14,9,0|-2frc41,14,9,0|-2frc40,15,4,1|-27xs01,15,4,1|-27xs00,14,9,0|-1wzes1,14,9,0|-1wzes0,15,4,1|-1p4001,15,4,1|-1p4000,14,9,0|-1e7hg1,14,9,0|-1e7hg0,15,4,1|-1ceto1,15,4,1|-1ceto0,110,9,0|2crp3z,110,9,0|2crp40,111,4,1|2ht3nz,111,4,1|2ht3o0,110,9,0|2rj6fz,110,9,0|2rj6g0,111,4,1|2ydebz,111,4,1|2ydec0,110,9,0|5iwyfz,110,9,0|5iwyg0,111,4,1|5l2qfz,111,4,1|5l2qg0,110,9,0|7hhp3z,110,9,0|7hhp40,111,4,1|7n93rz,111,4,1|7n93s0,110,9,0|7z4vrz,110,9,0|7z4vs0,111,4,1|86c2bz,111,4,1|86c2c0,110,9,0|8jnrrz,110,9,0|8jnrs0,111,4,1|8pf3nz,111,4,1|8pf3o0,110,9,0|90ql3z,110,9,0|90ql40,111,4,1|98i4zz,111,4,1|98i500,110,9,0|9jb3rz,110,9,0|9jb3s0,111,4,1|9qv8zz,111,4,1|9qv900,110,9,0|a342fz,110,9,0|a342g0,111,4,1|a9lbnz,111,4,1|a9lbo0,110,9,0|ak1brz,110,9,0|ak1bs0,111,4,1|aryfnz,111,4,1|aryfo0,110,9,0|b2refz,110,9,0|b2reg0,111,4,1|bb1gzz,111,4,1|bb1h00,110,9,0|blufrz,110,9,0|blufs0,111,4,1|bu4ibz,111,4,1|bu4ic0,110,9,0|c4trrz,110,9,0|c4trs0,111,4,1|ccukzz,111,4,1|ccul00,110,9,0|cnjufz,110,9,0|cnjug0,111,4,1|cv7ozz,111,4,1|cv7p00,110,9,0|d69x3z,110,9,0|d69x40,111,4,1|deaqbz,111,4,1|deaqc0,110,9,0|dkh13z,110,9,0|dkh140,14,9,0|dpcyfz,14,9,0|dpcyg0,15,4,1|dy02fz,15,4,1|dy02g0,14,9,0|e8313z,14,9,0|e83140,15,4,1|egq53z,15,4,1|egq540,14,9,0|eqt3rz,14,9,0|eqt3s0,15,4,1|ezg7rz,15,4,1|ezg7s0,14,9,0|fa93rz,14,9,0|fa93s0,15,4,1|fjm2bz,15,4,1|fjm2c0,14,9,0|ftc53z,14,9,0|ftc540,15,4,1|g2p3nz,15,4,1|g2p3o0,14,9,0|gc27rz,14,9,0|gc27s0,15,4,1|glf6bz,15,4,1|glf6c0,14,9,0|gusafz,14,9,0|gusag0,15,4,1|h458zz,15,4,1|h45900,14,9,0|hdid3z,14,9,0|hdid40,15,4,1|hmvbnz,15,4,1|hmvbo0,14,9,0|hw8frz,14,9,0|hw8fs0,15,4,1|i4vjrz,15,4,1|i4vjs0,14,9,0|ieyifz,14,9,0|ieyig0,15,4,1|int3vz,15,4,1|int3w0,14,9,0|ix0ifz,14,9,0|ix0ig0,15,4,1|j5ynnz,15,4,1|j5yno0,14,9,0|jfsfrz,14,9,0|jfsfs0,15,4,1|joa2jz,15,4,1|joa2k0,14,9,0|jyet3z,14,9,0|jyet40,15,4,1|k6hgzz,15,4,1|k6hh00,14,9,0|kh4vrz,14,9,0|kh4vs0,15,4,1|kpf13z,15,4,1|kpf140,14,9,0|kzuyfz,14,9,0|kzuyg0,15,4,1|l6yfnz,15,4,1|l6yfo0,14,9,0|lixztn,14,9,0|lixzto,15,4,1|lp7ubz,15,4,1|lp7uc0,14,9,0|lqpmfz,14,9,0|lqpmg0,15,4,1|lsaybz,15,4,1|lsayc0,14,9,0|m1o2fz,14,9,0|m1o2g0,15,4,1|mao53z,15,4,1|mao540,14,9,0|mke53z,14,9,0|mke540,15,4,1|mtr3nz,15,4,1|mtr3o0,14,9,0|n347rz,14,9,0|n347s0,15,4,1|ndx0zz,15,4,1|ndx100,14,9,0|nlw53z,14,9,0|nlw540,15,4,1|nwn6fz,15,4,1|nwn6g0,14,9,0|o4majz,14,9,0|o4mak0,15,4,1|ofs2fz,15,4,1|ofs2g0,14,9,0|oncd7z,14,9,0|oncd80,15,4,1|oyi53z,15,4,1|oyi540,14,9,0|p62fvz,14,9,0|p62fw0,15,4,1|ph87rz,15,4,1|ph87s0,14,9,0|pp3jrz,14,9,0|pp3js0,15,4,1|pzy7nz,15,4,1|pzy7o0,14,9,0|q7vh3z,14,9,0|q7vh40,15,4,1|qiod3z,15,4,1|qiod40,14,9,0|qqljrz,14,9,0|qqljs0,15,4,1|r1pjrz,15,4,1|r1pjs0,14,9,0|r9bmfz,14,9,0|r9bmg0,15,4,1|rkfmfz,15,4,1|rkfmg0,14,9,0|rs1p3z,14,9,0|rs1p40,15,4,1|s35p3z,15,4,1|s35p40,14,9,0|sb4qfz,14,9,0|sb4qg0,15,4,1|slvrrz,15,4,1|slvrs0,14,9,0|stut3z,14,9,0|stut40,15,4,1|t4yt3z,15,4,1|t4yt40,14,9,0|tckvrz,14,9,0|tckvs0,15,4,1|tnovrz,15,4,1|tnovs0,14,9,0|tvayfz,14,9,0|tvayg0,15,4,1|u6eyfz,15,4,1|u6eyg0,14,9,0|ue113z,14,9,0|ue1140,15,4,1|up513z,15,4,1|up5140,14,9,0|uwr3rz,14,9,0|uwr3s0,15,4,1|v7v3rz,15,4,1|v7v3s0,14,9,0|vfu53z,14,9,0|vfu540,15,4,1|vql6fz,15,4,1|vql6g0,14,9,0|vyk7rz,14,9,0|vyk7s0,15,4,1|w9o7rz,15,4,1|w9o7s0,14,9,0|whaafz,14,9,0|whaag0,15,4,1|wseafz,15,4,1|wseag0,14,9,0|x00d3z,14,9,0|x00d40,15,4,1|xb4d3z,15,4,1|xb4d40,14,9,0|xiqfrz,14,9,0|xiqfs0,15,4,1|xtufrz,15,4,1|xtufs0,14,9,0|y1gifz,14,9,0|y1gig0,15,4,1|yckifz,15,4,1|yckig0,14,9,0|ykjjrz,14,9,0|ykjjs0,15,4,1|yvnjrz,15,4,1|yvnjs0,14,9,0|z39mfz,14,9,0|z39mg0,15,4,1|zedmfz,15,4,1|zedmg0,14,9,0|zlzp3z,14,9,0|zlzp40,15,4,1|zx3p3z,15,4,1|zx3p40,14,9,0|104prrz,14,9,0|104prs0,15,4,1|10ftrrz,15,4,1|10ftrs0,14,9,0|10nfufz,14,9,0|10nfug0,15,4,1|10yjufz,15,4,1|10yjug0,14,9,0|116ivrz,14,9,0|116ivs0,15,4,1|11h9x3z,15,4,1|11h9x40,14,9,0|11p8yfz,14,9,0|11p8yg0,15,4,1|120cyfz,15,4,1|120cyg0,14,9,0|127z13z,14,9,0|127z140,15,4,1|12j313z,15,4,1|12j3140,14,9,0|12qp3rz,14,9,0|12qp3s0,15,4,1|131t3rz,15,4,1|131t3s0,14,9,0|139f6fz,14,9,0|139f6g0,15,4,1|13kj6fz,15,4,1|13kj6g0,14,9,0|13s593z,14,9,0|13s5940,15,4,1|143993z,15,4,1|1439940,14,9,0|14b8afz,14,9,0|14b8ag0,15,4,1|14lzbrz,15,4,1|14lzbs0,14,9,0|14tyd3z,14,9,0|14tyd40,15,4,1|1552d3z,15,4,1|1552d40,14,9,0|15cofrz,14,9,0|15cofs0,15,4,1|15nsfrz,15,4,1|15nsfs0,14,9,0|15veifz,14,9,0|15veig0,15,4,1|166iifz,15,4,1|166iig0,14,9,0|16e4l3z,14,9,0|16e4l40,15,4,1|16p8l3z,15,4,1|16p8l40,14,9,0|16x7mfz,14,9,0|16x7mg0,15,4,1|177ynrz,15,4,1|177yns0,14,9,0|17fxp3z,14,9,0|17fxp40,15,4,1|17r1p3z,15,4,1|17r1p40,14,9,0|17ynrrz,14,9,0|17ynrs0,15,4,1|189rrrz,15,4,1|189rrs0,14,9,0|18hdufz,14,9,0|18hdug0,15,4,1|18shufz,15,4,1|18shug0,14,9,0|1903x3z,14,9,0|1903x40,15,4,1|19b7x3z,15,4,1|19b7x40,14,9,0|19itzrz,14,9,0|19itzs0,15,4,1|19txzrz,15,4,1|19txzs0,14,9,0|1a1x13z,14,9,0|1a1x140,15,4,1|1aco2fz,15,4,1|1aco2g0,14,9,0|1akn3rz,14,9,0|1akn3s0,15,4,1|1avr3rz,15,4,1|1avr3s0,14,9,0|1b3d6fz,14,9,0|1b3d6g0,15,4,1|1beh6fz,15,4,1|1beh6g0,14,9,0|1bm393z,14,9,0|1bm3940,15,4,1|1bx793z,15,4,1|1bx7940,14,9,0|1c4tbrz,14,9,0|1c4tbs0,15,4,1|1cfxbrz,15,4,1|1cfxbs0,14,9,0|1cnjefz,14,9,0|1cnjeg0,15,4,1|1cynefz,15,4,1|1cyneg0,14,9,0|1d6mfrz,14,9,0|1d6mfs0,15,4,1|1dhqfrz,15,4,1|1dhqfs0,14,9,0|1dpcifz,14,9,0|1dpcig0,15,4,1|1e0gifz,15,4,1|1e0gig0,14,9,0|1e82l3z,14,9,0|1e82l40,15,4,1|1ej6l3z,15,4,1|1ej6l40,14,9,0|1eqsnrz,14,9,0|1eqsns0,15,4,1|1f1wnrz,15,4,1|1f1wns0,14,9,0|1f9iqfz,14,9,0|1f9iqg0,15,4,1|1fkmqfz,15,4,1|1fkmqg0,14,9,0|1fslrrz,14,9,0|1fslrs0,15,4,1|1g3ct3z,15,4,1|1g3ct40,14,9,0|1gbbufz,14,9,0|1gbbug0,15,4,1|1gmfufz,15,4,1|1gmfug0,14,9,0|1gu1x3z,14,9,0|1gu1x40,15,4,1|1h55x3z,15,4,1|1h55x40,14,9,0|1hcrzrz,14,9,0|1hcrzs0,15,4,1|1hnvzrz,15,4,1|1hnvzs0,14,9,0|1hvi2fz,14,9,0|1hvi2g0,15,4,1|1i6m2fz,15,4,1|1i6m2g0,14,9,0|1ie853z,14,9,0|1ie8540,15,4,1|1ipc53z,15,4,1|1ipc540,14,9,0|1ixb6fz,14,9,0|1ixb6g0,15,4,1|1j827rz,15,4,1|1j827s0,14,9,0|1jg193z,14,9,0|1jg1940,15,4,1|1jr593z,15,4,1|1jr5940,14,9,0|1jyrbrz,14,9,0|1jyrbs0,15,4,1|1k9vbrz,15,4,1|1k9vbs0,14,9,0|1khhefz,14,9,0|1khheg0,15,4,1|1kslefz,15,4,1|1ksleg0,14,9,0|1l07h3z,14,9,0|1l07h40,15,4,1|1lbbh3z,15,4,1|1lbbh40,14,9,0|1ljaifz,14,9,0|1ljaig0,15,4,1|1lu1jrz,15,4,1|1lu1js0,14,9,0|1m20l3z,14,9,0|1m20l40,15,4,1|1md4l3z,15,4,1|1md4l40,14,9,0|1mkqnrz,14,9,0|1mkqns0,15,4,1|1mvunrz,15,4,1|1mvuns0,14,9,0|1n3gqfz,14,9,0|1n3gqg0,15,4,1|1nekqfz,15,4,1|1nekqg0,14,9,0|1nm6t3z,14,9,0|1nm6t40,15,4,1|1nxat3z,15,4,1|1nxat40,14,9,0|1o4wvrz,14,9,0|1o4wvs0,15,4,1|1og0vrz,15,4,1|1og0vs0,14,9,0|1onzx3z,14,9,0|1onzx40,15,4,1|1oyqyfz,15,4,1|1oyqyg0,14,9,0|1p6pzrz,14,9,0|1p6pzs0,15,4,1|1phtzrz,15,4,1|1phtzs0,14,9,0|1ppg2fz,14,9,0|1ppg2g0,15,4,1|1q0k2fz,15,4,1|1q0k2g0,14,9,0|1q8653z,14,9,0|1q86540,15,4,1|1qja53z,15,4,1|1qja540,14,9,0|1qqw7rz,14,9,0|1qqw7s0,15,4,1|1r207rz,15,4,1|1r207s0,14,9,0|1r9mafz,14,9,0|1r9mag0,15,4,1|1rkqafz,15,4,1|1rkqag0,14,9,0|1rspbrz,14,9,0|1rspbs0,15,4,1|1s3tbrz,15,4,1|1s3tbs0,14,9,0|1sbfefz,14,9,0|1sbfeg0,15,4,1|1smjefz,15,4,1|1smjeg0,14,9,0|1su5h3z,14,9,0|1su5h40,15,4,1|1t59h3z,15,4,1|1t59h40,14,9,0|1tcvjrz,14,9,0|1tcvjs0,15,4,1|1tnzjrz,15,4,1|1tnzjs0,14,9,0|1tvlmfz,14,9,0|1tvlmg0,15,4,1|1u6pmfz,15,4,1|1u6pmg0,14,9,0|1ueonrz,14,9,0|1ueons0,15,4,1|1upfp3z,15,4,1|1upfp40,14,9,0|1uxeqfz,14,9,0|1uxeqg0,15,4,1|1v8iqfz,15,4,1|1v8iqg0,14,9,0|1vg4t3z,14,9,0|1vg4t40,15,4,1|1vr8t3z,15,4,1|1vr8t40,14,9,0|NaN,14,9,0\",\"Asia/Ho_Chi_Minh|,0,233,0|-x56935,0,233,0|-x56934,112,234,0|-umdqev,112,234,0|-umdqeu,90,185,0|-e3bkw1,90,185,0|-e3bkw0,88,183,0|-cxyro1,88,183,0|-cxyro0,107,218,0|-cp63o1,107,218,0|-cp63o0,90,185,0|-bvja41,90,185,0|-bvja40,88,183,0|-7kjq81,88,183,0|-7kjq80,90,185,0|-57xfk1,90,185,0|-57xfk0,88,183,0|2uaprz,88,183,0|2uaps0,90,185,0|NaN,90,185,0\",\"Asia/Hong_Kong|,0,235,0|-y0i0s1,0,235,0|-y0i0s0,113,183,0|-ewdn81,113,183,0|-ewdn80,114,218,1|-eqtn81,114,218,1|-eqtn80,115,236,1|-emgia1,115,236,1|-emgia0,116,218,0|-cl7cs1,116,218,0|-cl7cs0,113,183,0|-cda8w1,113,183,0|-cda8w0,114,218,1|-c1r5u1,114,218,1|-c1r5u0,113,183,0|-buwv61,113,183,0|-buwv60,114,218,1|-bj1361,114,218,1|-bj1360,113,183,0|-bb3wi1,113,183,0|-bb3wi0,114,218,1|-b1qv61,114,218,1|-b1qv60,113,183,0|-attoi1,113,183,0|-attoi0,114,218,1|-aj0si1,114,218,1|-aj0si0,113,183,0|-ab3lu1,113,183,0|-ab3lu0,114,218,1|-a0apu1,114,218,1|-a0apu0,113,183,0|-9sdj61,113,183,0|-9sdj60,114,218,1|-9hkn61,114,218,1|-9hkn60,113,183,0|-99ahu1,113,183,0|-99ahu0,114,218,1|-8yhlu1,114,218,1|-8yhlu0,113,183,0|-8qkf61,113,183,0|-8qkf60,114,218,1|-8frly1,114,218,1|-8frly0,113,183,0|-88k9u1,113,183,0|-88k9u0,114,218,1|-7x1ja1,114,218,1|-7x1ja0,113,183,0|-7pu761,113,183,0|-7pu760,114,218,1|-7dyhy1,114,218,1|-7dyhy0,113,183,0|-7744i1,113,183,0|-7744i0,114,218,1|-6v8fa1,114,218,1|-6v8fa0,113,183,0|-6o1361,113,183,0|-6o1360,114,218,1|-6cicm1,114,218,1|-6cicm0,113,183,0|-65b0i1,113,183,0|-65b0i0,114,218,1|-5ts9y1,114,218,1|-5ts9y0,113,183,0|-5mkxu1,113,183,0|-5mkxu0,114,218,1|-5b27a1,114,218,1|-5b27a0,113,183,0|-53uv61,113,183,0|-53uv60,114,218,1|-4rz5y1,114,218,1|-4rz5y0,113,183,0|-4l4si1,113,183,0|-4l4si0,114,218,1|-4993a1,114,218,1|-4993a0,113,183,0|-42epu1,113,183,0|-42epu0,114,218,1|-3qj0m1,114,218,1|-3qj0m0,113,183,0|-3jboi1,113,183,0|-3jboi0,114,218,1|-37sxy1,114,218,1|-37sxy0,113,183,0|-30llu1,113,183,0|-30llu0,114,218,1|-2p2va1,114,218,1|-2p2va0,113,183,0|-2gfoi1,113,183,0|-2gfoi0,114,218,1|-272py1,114,218,1|-272py0,113,183,0|-1xplu1,113,183,0|-1xplu0,114,218,1|-1ocna1,114,218,1|-1ocna0,113,183,0|-1ezj61,113,183,0|-1ezj60,114,218,1|-159ly1,114,218,1|-159ly0,113,183,0|-vwhu1,113,183,0|-vwhu0,114,218,1|-mjja1,114,218,1|-mjja0,113,183,0|-d6f61,113,183,0|-d6f60,114,218,1|-3tgm1,114,218,1|-3tgm0,113,183,0|5jnhz,113,183,0|5jni0,114,218,1|ewm1z,114,218,1|ewm20,113,183,0|o9q5z,113,183,0|o9q60,114,218,1|xmopz,114,218,1|xmoq0,113,183,0|16zstz,113,183,0|16zsu0,114,218,1|1gpq1z,114,218,1|1gpq20,113,183,0|1q2u5z,113,183,0|1q2u60,114,218,1|1zfspz,114,218,1|1zfsq0,113,183,0|231i5z,113,183,0|231i60,114,218,1|2i5vdz,114,218,1|2i5ve0,113,183,0|2rizhz,113,183,0|2rizi0,114,218,1|30vy1z,114,218,1|30vy20,113,183,0|3a925z,113,183,0|3a9260,114,218,1|3jm0pz,114,218,1|3jm0q0,113,183,0|4vv4tz,113,183,0|4vv4u0,114,218,1|5457dz,114,218,1|5457e0,113,183,0|NaN,113,183,0\",\"Asia/Hovd|,0,237,0|-xmcoz1,0,237,0|-xmcoz0,96,190,0|46anbz,96,190,0|46anc0,90,185,0|6wupvz,90,185,0|6wupw0,88,183,1|769j3z,88,183,1|769j40,90,185,0|7fohvz,90,185,0|7fohw0,88,183,1|7p1gfz,88,183,1|7p1gg0,90,185,0|7yekjz,90,185,0|7yekk0,88,183,1|87rj3z,88,183,1|87rj40,90,185,0|8h4n7z,90,185,0|8h4n80,88,183,1|8qhlrz,88,183,1|8qhls0,90,185,0|8zupvz,90,185,0|8zupw0,88,183,1|997ofz,88,183,1|997og0,90,185,0|9iksjz,90,185,0|9iksk0,88,183,1|9rxr3z,88,183,1|9rxr40,90,185,0|a1av7z,90,185,0|a1av80,88,183,1|aantrz,88,183,1|aants0,90,185,0|ak0xvz,90,185,0|ak0xw0,88,183,1|atqv3z,88,183,1|atqv40,90,185,0|b33z7z,90,185,0|b33z80,88,183,1|bcgxrz,88,183,1|bcgxs0,90,185,0|blu1vz,90,185,0|blu1w0,88,183,1|bv70fz,88,183,1|bv70g0,90,185,0|c4k4jz,90,185,0|c4k4k0,88,183,1|cdx33z,88,183,1|cdx340,90,185,0|cna77z,90,185,0|cna780,88,183,1|cwn5rz,88,183,1|cwn5s0,90,185,0|d609vz,90,185,0|d609w0,88,183,1|dfd8fz,88,183,1|dfd8g0,90,185,0|dp3b7z,90,185,0|dp3b80,88,183,1|dyg9rz,88,183,1|dyg9s0,90,185,0|e7tdvz,90,185,0|e7tdw0,88,183,1|eh6cfz,88,183,1|eh6cg0,90,185,0|eqjgjz,90,185,0|eqjgk0,88,183,1|ezwf3z,88,183,1|ezwf40,90,185,0|gcgsrz,90,185,0|gcgss0,88,183,1|gkdwnz,88,183,1|gkdwo0,90,185,0|gtr0rz,90,185,0|gtr0s0,88,183,1|h33zbz,88,183,1|h33zc0,90,185,0|hch3fz,90,185,0|hch3g0,88,183,1|hlu1zz,88,183,1|hlu200,90,185,0|hv763z,90,185,0|hv7640,88,183,1|i4k4nz,88,183,1|i4k4o0,90,185,0|idx8rz,90,185,0|idx8s0,88,183,1|ina7bz,88,183,1|ina7c0,90,185,0|iwnbfz,90,185,0|iwnbg0,88,183,1|j6d8nz,88,183,1|j6d8o0,90,185,0|nlvwrz,90,185,0|nlvws0,88,183,1|nv8prz,88,183,1|nv8ps0,90,185,0|o4lzfz,90,185,0|o4lzg0,88,183,1|odysfz,88,183,1|odysg0,90,185,0|NaN,90,185,0\",\"Asia/Irkutsk|,0,238,0|-1ayylz6,0,238,0|-1ayylz5,117,238,0|-q28gn6,117,238,0|-q28gn5,90,185,0|-kmrfg1,90,185,0|-kmrfg0,88,183,0|5vasfz,88,183,0|5vasg0,107,218,1|64plnz,107,218,1|64plo0,88,183,0|6e2prz,88,183,0|6e2ps0,107,218,1|6nhizz,107,218,1|6nhj00,88,183,0|6wun3z,88,183,0|6wun40,107,218,1|769gbz,107,218,1|769gc0,88,183,0|7fof3z,88,183,0|7fof40,107,218,1|7p1lzz,107,218,1|7p1m00,88,183,0|7yenbz,88,183,0|7yenc0,107,218,1|87ronz,107,218,1|87roo0,88,183,0|8h4pzz,88,183,0|8h4q00,107,218,1|8qhrbz,107,218,1|8qhrc0,88,183,0|8zusnz,88,183,0|8zuso0,107,218,1|997tzz,107,218,1|997u00,88,183,0|9ikvbz,88,183,0|9ikvc0,107,218,1|9rxwnz,107,218,1|9rxwo0,88,183,0|a1axzz,88,183,0|a1ay00,107,218,1|aanzbz,107,218,1|aanzc0,88,183,0|ak10nz,88,183,0|ak10o0,107,218,1|atr0nz,107,218,1|atr0o0,88,183,0|b341zz,88,183,0|b34200,88,183,1|bch63z,88,183,1|bch640,90,185,0|bi8krz,90,185,0|bi8ks0,88,183,0|blu4nz,88,183,0|blu4o0,107,218,1|bv75zz,107,218,1|bv7600,88,183,0|c4k7bz,88,183,0|c4k7c0,107,218,1|cdx8nz,107,218,1|cdx8o0,88,183,0|cna9zz,88,183,0|cnaa00,107,218,1|cwnbbz,107,218,1|cwnbc0,88,183,0|d60cnz,88,183,0|d60co0,107,218,1|dfddzz,107,218,1|dfde00,88,183,0|dp3dzz,88,183,0|dp3e00,107,218,1|dzw9zz,107,218,1|dzwa00,88,183,0|e7tgnz,88,183,0|e7tgo0,107,218,1|eimcnz,107,218,1|eimco0,88,183,0|eqjjbz,88,183,0|eqjjc0,107,218,1|f1cfbz,107,218,1|f1cfc0,88,183,0|f99lzz,88,183,0|f99m00,107,218,1|fkfgnz,107,218,1|fkfgo0,88,183,0|frzonz,88,183,0|frzoo0,107,218,1|g35jbz,107,218,1|g35jc0,88,183,0|gaprbz,88,183,0|gaprc0,107,218,1|glvlzz,107,218,1|glvm00,88,183,0|gtssnz,88,183,0|gtsso0,107,218,1|h4lonz,107,218,1|h4loo0,88,183,0|hcivbz,88,183,0|hcivc0,107,218,1|hnbrbz,107,218,1|hnbrc0,88,183,0|hv8xzz,88,183,0|hv8y00,107,218,1|i6esnz,107,218,1|i6eso0,88,183,0|idz0nz,88,183,0|idz0o0,107,218,1|ip4vbz,107,218,1|ip4vc0,88,183,0|iwp3bz,88,183,0|iwp3c0,107,218,1|j7uxzz,107,218,1|j7uy00,88,183,0|jff5zz,88,183,0|jff600,107,218,1|jql0nz,107,218,1|jql0o0,88,183,0|jyi7bz,88,183,0|jyi7c0,107,218,1|k9b3bz,107,218,1|k9b3c0,88,183,0|kh89zz,88,183,0|kh8a00,107,218,1|ks15zz,107,218,1|ks1600,88,183,0|kzycnz,88,183,0|kzyco0,107,218,1|lb47bz,107,218,1|lb47c0,88,183,0|liofbz,88,183,0|liofc0,107,218,0|ne0f7z,107,218,0|ne0f80,88,183,0|NaN,88,183,0\",\"Asia/Jakarta|,0,239,0|-1hftyg1,0,239,0|-1hftyg0,54,239,0|-o0bdpd,54,239,0|-o0bdpc,118,240,0|-jebgdd,118,240,0|-jebgdc,106,216,0|-ehxgu1,106,216,0|-ehxgu0,107,218,0|-co37o1,107,218,0|-co37o0,106,216,0|-bb5zi1,106,216,0|-bb5zi0,88,183,0|-a9m681,88,183,0|-a9m680,106,216,0|-34ru61,106,216,0|-34ru60,119,185,0|NaN,119,185,0\",\"Asia/Jayapura|,0,241,0|-jebm21,0,241,0|-jebm20,107,218,0|-d7zvo1,107,218,0|-d7zvo0,120,242,0|-34rzq1,120,242,0|-34rzq0,121,218,0|NaN,121,218,0\",\"Asia/Jerusalem|,0,243,0|-1ayy96v,0,243,0|-1ayy96u,122,244,0|-r50eih,122,244,0|-r50eig,110,9,0|-ffv401,110,9,0|-ffv400,111,4,1|-f9l6o1,111,4,1|-f9l6o0,110,9,0|-f765c1,110,9,0|-f765c0,111,4,1|-e6fxc1,111,4,1|-e6fxc0,110,9,0|-dyoao1,110,9,0|-dyoao0,111,4,1|-dno001,111,4,1|-dno000,110,9,0|-dfuio1,110,9,0|-dfuio0,111,4,1|-d4u801,111,4,1|-d4u800,110,9,0|-cwatc1,110,9,0|-cwatc0,111,4,1|-cm2ao1,111,4,1|-cm2ao0,110,9,0|-cdiw01,110,9,0|-cdiw00,111,4,1|-c3adc1,111,4,1|-c3adc0,110,9,0|-ba0o01,110,9,0|-ba0o00,123,203,1|-b4tmo1,123,203,1|-b4tmo0,111,4,1|-b1oo01,111,4,1|-b1oo00,110,9,0|-asdhc1,110,9,0|-asdhc0,111,4,1|-aiwqo1,111,4,1|-aiwqo0,110,9,0|-aadc01,110,9,0|-aadc00,111,4,1|-a2juo1,111,4,1|-a2juo0,110,9,0|-9sd6o1,110,9,0|-9sd6o0,111,4,1|-9gudc1,111,4,1|-9gudc0,110,9,0|-98k801,110,9,0|-98k800,111,4,1|-8z76o1,111,4,1|-8z76o0,110,9,0|-8q7401,110,9,0|-8q7400,111,4,1|-8i9xc1,111,4,1|-8i9xc0,110,9,0|-848dc1,110,9,0|-848dc0,111,4,1|-7zjuo1,111,4,1|-7zjuo0,110,9,0|-7liao1,110,9,0|-7liao0,111,4,1|-7gts01,111,4,1|-7gts00,110,9,0|-7356o1,110,9,0|-7356o0,111,4,1|-6x0tc1,111,4,1|-6x0tc0,110,9,0|-6m7xc1,110,9,0|-6m7xc0,111,4,1|-6enpc1,111,4,1|-6enpc0,110,9,0|2crp3z,110,9,0|2crp40,111,4,1|2ht3nz,111,4,1|2ht3o0,110,9,0|2rj6fz,110,9,0|2rj6g0,111,4,1|2ydebz,111,4,1|2ydec0,110,9,0|5iwyfz,110,9,0|5iwyg0,111,4,1|5l2qfz,111,4,1|5l2qg0,110,9,0|7hhp3z,110,9,0|7hhp40,111,4,1|7n93rz,111,4,1|7n93s0,110,9,0|7z4vrz,110,9,0|7z4vs0,111,4,1|86c2bz,111,4,1|86c2c0,110,9,0|8jnrrz,110,9,0|8jnrs0,111,4,1|8pf3nz,111,4,1|8pf3o0,110,9,0|90ql3z,110,9,0|90ql40,111,4,1|98i4zz,111,4,1|98i500,110,9,0|9jb3rz,110,9,0|9jb3s0,111,4,1|9qv8zz,111,4,1|9qv900,110,9,0|a342fz,110,9,0|a342g0,111,4,1|a9lbnz,111,4,1|a9lbo0,110,9,0|ak1brz,110,9,0|ak1bs0,111,4,1|aryfnz,111,4,1|aryfo0,110,9,0|b2refz,110,9,0|b2reg0,111,4,1|bb1gzz,111,4,1|bb1h00,110,9,0|blufrz,110,9,0|blufs0,111,4,1|bu4ibz,111,4,1|bu4ic0,110,9,0|c4trrz,110,9,0|c4trs0,111,4,1|ccukzz,111,4,1|ccul00,110,9,0|cnjufz,110,9,0|cnjug0,111,4,1|cv7ozz,111,4,1|cv7p00,110,9,0|d69x3z,110,9,0|d69x40,111,4,1|deaqbz,111,4,1|deaqc0,110,9,0|doa2fz,110,9,0|doa2g0,111,4,1|dxskzz,111,4,1|dxsl00,110,9,0|e7d3rz,110,9,0|e7d3s0,111,4,1|eggszz,111,4,1|eggt00,110,9,0|eq36fz,110,9,0|eq36g0,111,4,1|eytwzz,111,4,1|eytx00,110,9,0|f9jbzz,110,9,0|f9jc00,111,4,1|fhgfvz,111,4,1|fhgfw0,110,9,0|fszbzz,110,9,0|fszc00,111,4,1|g1z93z,111,4,1|g1z940,110,9,0|gbhx7z,110,9,0|gbhx80,111,4,1|gk4yfz,111,4,1|gk4yg0,110,9,0|gtph7z,110,9,0|gtph80,111,4,1|h3kyfz,111,4,1|h3kyg0,110,9,0|hcfjvz,110,9,0|hcfjw0,111,4,1|hm5h3z,111,4,1|hm5h40,110,9,0|hvrujz,110,9,0|hvruk0,111,4,1|i4evrz,111,4,1|i4evs0,110,9,0|ie8qnz,110,9,0|ie8qo0,111,4,1|io2d7z,111,4,1|io2d80,110,9,0|iwytbz,110,9,0|iwytc0,111,4,1|j6fh7z,111,4,1|j6fh80,110,9,0|jfovzz,110,9,0|jfow00,111,4,1|jofmjz,111,4,1|jofmk0,110,9,0|jyeynz,110,9,0|jyeyo0,111,4,1|k88l7z,111,4,1|k88l80,110,9,0|kh51bz,110,9,0|kh51c0,111,4,1|kqlp7z,111,4,1|kqlp80,110,9,0|kzv3zz,110,9,0|kzv400,111,4,1|l8lujz,111,4,1|l8luk0,110,9,0|liy5bz,110,9,0|liy5c0,111,4,1|lset7z,111,4,1|lset80,110,9,0|m1o7zz,110,9,0|m1o800,111,4,1|marx7z,111,4,1|marx80,110,9,0|mkeanz,110,9,0|mkeao0,111,4,1|mvat7z,111,4,1|mvat80,110,9,0|n34dbz,110,9,0|n34dc0,111,4,1|ne0vvz,111,4,1|ne0vw0,110,9,0|nlufzz,110,9,0|nlug00,111,4,1|nwqyjz,111,4,1|nwqyk0,110,9,0|o4kinz,110,9,0|o4kio0,111,4,1|oftzvz,111,4,1|oftzw0,110,9,0|onalbz,110,9,0|onalc0,111,4,1|oyk2jz,111,4,1|oyk2k0,110,9,0|p60nzz,110,9,0|p60o00,111,4,1|pha57z,111,4,1|pha580,110,9,0|pp3pbz,110,9,0|pp3pc0,111,4,1|q007vz,111,4,1|q007w0,110,9,0|q7trzz,110,9,0|q7ts00,111,4,1|qiqajz,111,4,1|qiqak0,110,9,0|qqjunz,110,9,0|qqjuo0,111,4,1|r1tbvz,111,4,1|r1tbw0,110,9,0|r99xbz,110,9,0|r99xc0,111,4,1|rkjejz,111,4,1|rkjek0,110,9,0|rrzzzz,110,9,0|rs0000,111,4,1|s39h7z,111,4,1|s39h80,110,9,0|sb31bz,110,9,0|sb31c0,111,4,1|slzjvz,111,4,1|slzjw0,110,9,0|stt3zz,110,9,0|stt400,111,4,1|t4pmjz,111,4,1|t4pmk0,110,9,0|tcj6nz,110,9,0|tcj6o0,111,4,1|tnfp7z,111,4,1|tnfp80,110,9,0|tv99bz,110,9,0|tv99c0,111,4,1|u6iqjz,111,4,1|u6iqk0,110,9,0|udzbzz,110,9,0|udzc00,111,4,1|up8t7z,111,4,1|up8t80,110,9,0|uwpenz,110,9,0|uwpeo0,111,4,1|v7yvvz,111,4,1|v7yvw0,110,9,0|vfsfzz,110,9,0|vfsg00,111,4,1|vqoyjz,111,4,1|vqoyk0,110,9,0|vyiinz,110,9,0|vyiio0,111,4,1|w9f17z,111,4,1|w9f180,110,9,0|wh8lbz,110,9,0|wh8lc0,111,4,1|wsi2jz,111,4,1|wsi2k0,110,9,0|wzynzz,110,9,0|wzyo00,111,4,1|xb857z,111,4,1|xb8580,110,9,0|xioqnz,110,9,0|xioqo0,111,4,1|xty7vz,111,4,1|xty7w0,110,9,0|y1etbz,110,9,0|y1etc0,111,4,1|ycoajz,111,4,1|ycoak0,110,9,0|ykhunz,110,9,0|ykhuo0,111,4,1|yved7z,111,4,1|yved80,110,9,0|z37xbz,110,9,0|z37xc0,111,4,1|ze4fvz,111,4,1|ze4fw0,110,9,0|zlxzzz,110,9,0|zly000,111,4,1|zx7h7z,111,4,1|zx7h80,110,9,0|104o2nz,110,9,0|104o2o0,111,4,1|10fxjvz,111,4,1|10fxjw0,110,9,0|10ne5bz,110,9,0|10ne5c0,111,4,1|10ynmjz,111,4,1|10ynmk0,110,9,0|116h6nz,110,9,0|116h6o0,111,4,1|11hdp7z,111,4,1|11hdp80,110,9,0|11p79bz,110,9,0|11p79c0,111,4,1|1203rvz,111,4,1|1203rw0,110,9,0|127xbzz,110,9,0|127xc00,111,4,1|12itujz,111,4,1|12ituk0,110,9,0|12qnenz,110,9,0|12qneo0,111,4,1|131wvvz,111,4,1|131wvw0,110,9,0|139dhbz,110,9,0|139dhc0,111,4,1|13kmyjz,111,4,1|13kmyk0,110,9,0|13s3jzz,110,9,0|13s3k00,111,4,1|143d17z,111,4,1|143d180,110,9,0|14b6lbz,110,9,0|14b6lc0,111,4,1|14m33vz,111,4,1|14m33w0,110,9,0|14twnzz,110,9,0|14two00,111,4,1|154t6jz,111,4,1|154t6k0,110,9,0|15cmqnz,110,9,0|15cmqo0,111,4,1|15nw7vz,111,4,1|15nw7w0,110,9,0|15vctbz,110,9,0|15vctc0,111,4,1|166majz,111,4,1|166mak0,110,9,0|16e2vzz,110,9,0|16e2w00,111,4,1|16pcd7z,111,4,1|16pcd80,110,9,0|16x5xbz,110,9,0|16x5xc0,111,4,1|1782fvz,111,4,1|1782fw0,110,9,0|17fvzzz,110,9,0|17fw000,111,4,1|17qsijz,111,4,1|17qsik0,110,9,0|17ym2nz,110,9,0|17ym2o0,111,4,1|189il7z,111,4,1|189il80,110,9,0|18hc5bz,110,9,0|18hc5c0,111,4,1|18slmjz,111,4,1|18slmk0,110,9,0|19027zz,110,9,0|1902800,111,4,1|19bbp7z,111,4,1|19bbp80,110,9,0|19isanz,110,9,0|19isao0,111,4,1|19u1rvz,111,4,1|19u1rw0,110,9,0|1a1vbzz,110,9,0|1a1vc00,111,4,1|1acrujz,111,4,1|1acruk0,110,9,0|1aklenz,110,9,0|1akleo0,111,4,1|1avhx7z,111,4,1|1avhx80,110,9,0|1b3bhbz,110,9,0|1b3bhc0,111,4,1|1bekyjz,111,4,1|1bekyk0,110,9,0|1bm1jzz,110,9,0|1bm1k00,111,4,1|1bxb17z,111,4,1|1bxb180,110,9,0|1c4rmnz,110,9,0|1c4rmo0,111,4,1|1cg13vz,111,4,1|1cg13w0,110,9,0|1cnhpbz,110,9,0|1cnhpc0,111,4,1|1cyr6jz,111,4,1|1cyr6k0,110,9,0|1d6kqnz,110,9,0|1d6kqo0,111,4,1|1dhh97z,111,4,1|1dhh980,110,9,0|1dpatbz,110,9,0|1dpatc0,111,4,1|1e07bvz,111,4,1|1e07bw0,110,9,0|1e80vzz,110,9,0|1e80w00,111,4,1|1ejad7z,111,4,1|1ejad80,110,9,0|1eqqynz,110,9,0|1eqqyo0,111,4,1|1f20fvz,111,4,1|1f20fw0,110,9,0|1f9h1bz,110,9,0|1f9h1c0,111,4,1|1fkqijz,111,4,1|1fkqik0,110,9,0|1fsk2nz,110,9,0|1fsk2o0,111,4,1|1g3gl7z,111,4,1|1g3gl80,110,9,0|1gba5bz,110,9,0|1gba5c0,111,4,1|1gm6nvz,111,4,1|1gm6nw0,110,9,0|1gu07zz,110,9,0|1gu0800,111,4,1|1h4wqjz,111,4,1|1h4wqk0,110,9,0|1hcqanz,110,9,0|1hcqao0,111,4,1|1hnzrvz,111,4,1|1hnzrw0,110,9,0|1hvgdbz,110,9,0|1hvgdc0,111,4,1|1i6pujz,111,4,1|1i6puk0,110,9,0|1ie6fzz,110,9,0|1ie6g00,111,4,1|1ipfx7z,111,4,1|1ipfx80,110,9,0|1ix9hbz,110,9,0|1ix9hc0,111,4,1|1j85zvz,111,4,1|1j85zw0,110,9,0|1jfzjzz,110,9,0|1jfzk00,111,4,1|1jqw2jz,111,4,1|1jqw2k0,110,9,0|1jypmnz,110,9,0|1jypmo0,111,4,1|1k9z3vz,111,4,1|1k9z3w0,110,9,0|1khfpbz,110,9,0|1khfpc0,111,4,1|1ksp6jz,111,4,1|1ksp6k0,110,9,0|1l05rzz,110,9,0|1l05s00,111,4,1|1lbf97z,111,4,1|1lbf980,110,9,0|1lj8tbz,110,9,0|1lj8tc0,111,4,1|1lu5bvz,111,4,1|1lu5bw0,110,9,0|1m1yvzz,110,9,0|1m1yw00,111,4,1|1mcvejz,111,4,1|1mcvek0,110,9,0|1mkoynz,110,9,0|1mkoyo0,111,4,1|1mvlh7z,111,4,1|1mvlh80,110,9,0|1n3f1bz,110,9,0|1n3f1c0,111,4,1|1neoijz,111,4,1|1neoik0,110,9,0|1nm53zz,110,9,0|1nm5400,111,4,1|1nxel7z,111,4,1|1nxel80,110,9,0|1o4v6nz,110,9,0|1o4v6o0,111,4,1|1og4nvz,111,4,1|1og4nw0,110,9,0|1ony7zz,110,9,0|1ony800,111,4,1|1oyuqjz,111,4,1|1oyuqk0,110,9,0|1p6oanz,110,9,0|1p6oao0,111,4,1|1phkt7z,111,4,1|1phkt80,110,9,0|1ppedbz,110,9,0|1ppedc0,111,4,1|1q0nujz,111,4,1|1q0nuk0,110,9,0|1q84fzz,110,9,0|1q84g00,111,4,1|1qjdx7z,111,4,1|1qjdx80,110,9,0|1qquinz,110,9,0|1qquio0,111,4,1|1r23zvz,111,4,1|1r23zw0,110,9,0|1r9klbz,110,9,0|1r9klc0,111,4,1|1rku2jz,111,4,1|1rku2k0,110,9,0|1rsnmnz,110,9,0|1rsnmo0,111,4,1|1s3k57z,111,4,1|1s3k580,110,9,0|1sbdpbz,110,9,0|1sbdpc0,111,4,1|1sma7vz,111,4,1|1sma7w0,110,9,0|1su3rzz,110,9,0|1su3s00,111,4,1|1t5d97z,111,4,1|1t5d980,110,9,0|1tctunz,110,9,0|1tctuo0,111,4,1|1to3bvz,111,4,1|1to3bw0,110,9,0|1tvjxbz,110,9,0|1tvjxc0,111,4,1|1u6tejz,111,4,1|1u6tek0,110,9,0|1uemynz,110,9,0|1uemyo0,111,4,1|1upjh7z,111,4,1|1upjh80,110,9,0|1uxd1bz,110,9,0|1uxd1c0,111,4,1|1v89jvz,111,4,1|1v89jw0,110,9,0|1vg33zz,110,9,0|1vg3400,111,4,1|1vqzmjz,111,4,1|1vqzmk0,110,9,0|NaN,110,9,0\",\"Asia/Kabul|,0,245,0|-15r1m5d,0,245,0|-15r1m5c,105,203,0|-d1pkg1,105,203,0|-d1pkg0,124,246,0|NaN,124,246,0\",\"Asia/Kamchatka|,0,247,0|-olrupp,0,247,0|-olrupo,89,184,0|-kmrqk1,89,184,0|-kmrqk0,102,194,0|5vahbz,102,194,0|5vahc0,103,195,1|64pajz,103,195,1|64pak0,102,194,0|6e2enz,102,194,0|6e2eo0,103,195,1|6nh7vz,103,195,1|6nh7w0,102,194,0|6wubzz,102,194,0|6wuc00,103,195,1|76957z,103,195,1|769580,102,194,0|7fo3zz,102,194,0|7fo400,103,195,1|7p1avz,103,195,1|7p1aw0,102,194,0|7yec7z,102,194,0|7yec80,103,195,1|87rdjz,103,195,1|87rdk0,102,194,0|8h4evz,102,194,0|8h4ew0,103,195,1|8qhg7z,103,195,1|8qhg80,102,194,0|8zuhjz,102,194,0|8zuhk0,103,195,1|997ivz,103,195,1|997iw0,102,194,0|9ikk7z,102,194,0|9ikk80,103,195,1|9rxljz,103,195,1|9rxlk0,102,194,0|a1amvz,102,194,0|a1amw0,103,195,1|aano7z,103,195,1|aano80,102,194,0|ak0pjz,102,194,0|ak0pk0,103,195,1|atqpjz,103,195,1|atqpk0,102,194,0|b33qvz,102,194,0|b33qw0,102,194,1|bcguzz,102,194,1|bcgv00,89,184,0|bi89nz,89,184,0|bi89o0,102,194,0|blttjz,102,194,0|blttk0,103,195,1|bv6uvz,103,195,1|bv6uw0,102,194,0|c4jw7z,102,194,0|c4jw80,103,195,1|cdwxjz,103,195,1|cdwxk0,102,194,0|cn9yvz,102,194,0|cn9yw0,103,195,1|cwn07z,103,195,1|cwn080,102,194,0|d601jz,102,194,0|d601k0,103,195,1|dfd2vz,103,195,1|dfd2w0,102,194,0|dp32vz,102,194,0|dp32w0,103,195,1|dzvyvz,103,195,1|dzvyw0,102,194,0|e7t5jz,102,194,0|e7t5k0,103,195,1|eim1jz,103,195,1|eim1k0,102,194,0|eqj87z,102,194,0|eqj880,103,195,1|f1c47z,103,195,1|f1c480,102,194,0|f99avz,102,194,0|f99aw0,103,195,1|fkf5jz,103,195,1|fkf5k0,102,194,0|frzdjz,102,194,0|frzdk0,103,195,1|g3587z,103,195,1|g35880,102,194,0|gapg7z,102,194,0|gapg80,103,195,1|glvavz,103,195,1|glvaw0,102,194,0|gtshjz,102,194,0|gtshk0,103,195,1|h4ldjz,103,195,1|h4ldk0,102,194,0|hcik7z,102,194,0|hcik80,103,195,1|hnbg7z,103,195,1|hnbg80,102,194,0|hv8mvz,102,194,0|hv8mw0,103,195,1|i6ehjz,103,195,1|i6ehk0,102,194,0|idypjz,102,194,0|idypk0,103,195,1|ip4k7z,103,195,1|ip4k80,102,194,0|iwos7z,102,194,0|iwos80,103,195,1|j7umvz,103,195,1|j7umw0,102,194,0|jfeuvz,102,194,0|jfeuw0,103,195,1|jqkpjz,103,195,1|jqkpk0,102,194,0|jyhw7z,102,194,0|jyhw80,103,195,1|k9as7z,103,195,1|k9as80,102,194,0|kh7yvz,102,194,0|kh7yw0,103,195,1|ks0uvz,103,195,1|ks0uw0,102,194,0|kzy1jz,102,194,0|kzy1k0,102,194,1|lb3yzz,102,194,1|lb3z00,89,184,0|lio6zz,89,184,0|lio700,102,194,0|NaN,102,194,0\",\"Asia/Karachi|,0,248,0|-wvpb31,0,248,0|-wvpb30,108,222,0|-e9lba1,108,222,0|-e9lba0,109,223,1|-cmya21,109,223,1|-cmya20,108,222,0|-9j0km1,108,222,0|-9j0km0,91,186,0|n33fz,91,186,0|n33g0,125,186,0|gu5u3z,125,186,0|gu5u40,126,190,1|h3isnz,126,190,1|h3iso0,125,186,0|k1qy3z,125,186,0|k1qy40,126,190,1|k9m7bz,126,190,1|k9m7c0,125,186,0|ki3u3z,125,186,0|ki3u40,126,190,1|kse4nz,126,190,1|kse4o0,125,186,0|NaN,125,186,0\",\"Asia/Kathmandu|,0,249,0|-q3gt4t,0,249,0|-q3gt4s,108,222,0|8clspz,108,222,0|8clsq0,127,250,0|NaN,127,250,0\",\"Asia/Khandyga|,0,251,0|-q4cjrq,0,251,0|-q4cjrp,88,183,0|-kmri81,88,183,0|-kmri80,107,218,0|5vapnz,107,218,0|5vapo0,93,189,1|64pivz,93,189,1|64piw0,107,218,0|6e2mzz,107,218,0|6e2n00,93,189,1|6nhg7z,93,189,1|6nhg80,107,218,0|6wukbz,107,218,0|6wukc0,93,189,1|769djz,93,189,1|769dk0,107,218,0|7focbz,107,218,0|7focc0,93,189,1|7p1j7z,93,189,1|7p1j80,107,218,0|7yekjz,107,218,0|7yekk0,93,189,1|87rlvz,93,189,1|87rlw0,107,218,0|8h4n7z,107,218,0|8h4n80,93,189,1|8qhojz,93,189,1|8qhok0,107,218,0|8zupvz,107,218,0|8zupw0,93,189,1|997r7z,93,189,1|997r80,107,218,0|9iksjz,107,218,0|9iksk0,93,189,1|9rxtvz,93,189,1|9rxtw0,107,218,0|a1av7z,107,218,0|a1av80,93,189,1|aanwjz,93,189,1|aanwk0,107,218,0|ak0xvz,107,218,0|ak0xw0,93,189,1|atqxvz,93,189,1|atqxw0,107,218,0|b33z7z,107,218,0|b33z80,107,218,1|bch3bz,107,218,1|bch3c0,88,183,0|bi8hzz,88,183,0|bi8i00,107,218,0|blu1vz,107,218,0|blu1w0,93,189,1|bv737z,93,189,1|bv7380,107,218,0|c4k4jz,107,218,0|c4k4k0,93,189,1|cdx5vz,93,189,1|cdx5w0,107,218,0|cna77z,107,218,0|cna780,93,189,1|cwn8jz,93,189,1|cwn8k0,107,218,0|d609vz,107,218,0|d609w0,93,189,1|dfdb7z,93,189,1|dfdb80,107,218,0|dp3b7z,107,218,0|dp3b80,93,189,1|dzw77z,93,189,1|dzw780,107,218,0|e7tdvz,107,218,0|e7tdw0,93,189,1|eim9vz,93,189,1|eim9w0,107,218,0|eqjgjz,107,218,0|eqjgk0,93,189,1|f1ccjz,93,189,1|f1cck0,107,218,0|f99j7z,107,218,0|f99j80,93,189,1|fkfdvz,93,189,1|fkfdw0,107,218,0|frzlvz,107,218,0|frzlw0,93,189,1|g35gjz,93,189,1|g35gk0,107,218,0|gapojz,107,218,0|gapok0,93,189,1|glvj7z,93,189,1|glvj80,107,218,0|gtspvz,107,218,0|gtspw0,93,189,1|h4llvz,93,189,1|h4llw0,107,218,0|hcisjz,107,218,0|hcisk0,93,189,1|hnbojz,93,189,1|hnbok0,107,218,0|hqrlnz,107,218,0|hqrlo0,93,189,0|hv8sfz,93,189,0|hv8sg0,89,184,1|i6en3z,89,184,1|i6en40,93,189,0|idyv3z,93,189,0|idyv40,89,184,1|ip4prz,89,184,1|ip4ps0,93,189,0|iwoxrz,93,189,0|iwoxs0,89,184,1|j7usfz,89,184,1|j7usg0,93,189,0|jff0fz,93,189,0|jff0g0,89,184,1|jqkv3z,89,184,1|jqkv40,93,189,0|jyi1rz,93,189,0|jyi1s0,89,184,1|k9axrz,89,184,1|k9axs0,93,189,0|kh84fz,93,189,0|kh84g0,89,184,1|ks10fz,89,184,1|ks10g0,93,189,0|kzy73z,93,189,0|kzy740,89,184,1|lb41rz,89,184,1|lb41s0,93,189,0|lio9rz,93,189,0|lio9s0,89,184,0|lreurz,89,184,0|lreus0,93,189,0|ne0cfz,93,189,0|ne0cg0,107,218,0|NaN,107,218,0\",\"Asia/Kolkata|,0,252,0|-1oaa315,0,252,0|-1oaa314,77,226,0|-1g6thox,77,226,0|-1g6thow,20,253,0|-xehavb,20,253,0|-xehava,110,222,0|-eqtom1,110,222,0|-eqtom0,109,223,1|-ef78q1,109,223,1|-ef78q0,110,222,0|-e9lba1,110,222,0|-e9lba0,109,223,1|-cmya21,109,223,1|-cmya20,110,222,0|NaN,110,222,0\",\"Asia/Krasnoyarsk|,0,254,0|-q37l73,0,254,0|-q37l72,96,190,0|-kmrco1,96,190,0|-kmrco0,90,185,0|5vav7z,90,185,0|5vav80,88,183,1|64pofz,88,183,1|64pog0,90,185,0|6e2sjz,90,185,0|6e2sk0,88,183,1|6nhlrz,88,183,1|6nhls0,90,185,0|6wupvz,90,185,0|6wupw0,88,183,1|769j3z,88,183,1|769j40,90,185,0|7fohvz,90,185,0|7fohw0,88,183,1|7p1orz,88,183,1|7p1os0,90,185,0|7yeq3z,90,185,0|7yeq40,88,183,1|87rrfz,88,183,1|87rrg0,90,185,0|8h4srz,90,185,0|8h4ss0,88,183,1|8qhu3z,88,183,1|8qhu40,90,185,0|8zuvfz,90,185,0|8zuvg0,88,183,1|997wrz,88,183,1|997ws0,90,185,0|9iky3z,90,185,0|9iky40,88,183,1|9rxzfz,88,183,1|9rxzg0,90,185,0|a1b0rz,90,185,0|a1b0s0,88,183,1|aao23z,88,183,1|aao240,90,185,0|ak13fz,90,185,0|ak13g0,88,183,1|atr3fz,88,183,1|atr3g0,90,185,0|b344rz,90,185,0|b344s0,90,185,1|bch8vz,90,185,1|bch8w0,96,190,0|bi8njz,96,190,0|bi8nk0,90,185,0|blu7fz,90,185,0|blu7g0,88,183,1|bv78rz,88,183,1|bv78s0,90,185,0|c4ka3z,90,185,0|c4ka40,88,183,1|cdxbfz,88,183,1|cdxbg0,90,185,0|cnacrz,90,185,0|cnacs0,88,183,1|cwne3z,88,183,1|cwne40,90,185,0|d60ffz,90,185,0|d60fg0,88,183,1|dfdgrz,88,183,1|dfdgs0,90,185,0|dp3grz,90,185,0|dp3gs0,88,183,1|dzwcrz,88,183,1|dzwcs0,90,185,0|e7tjfz,90,185,0|e7tjg0,88,183,1|eimffz,88,183,1|eimfg0,90,185,0|eqjm3z,90,185,0|eqjm40,88,183,1|f1ci3z,88,183,1|f1ci40,90,185,0|f99orz,90,185,0|f99os0,88,183,1|fkfjfz,88,183,1|fkfjg0,90,185,0|frzrfz,90,185,0|frzrg0,88,183,1|g35m3z,88,183,1|g35m40,90,185,0|gapu3z,90,185,0|gapu40,88,183,1|glvorz,88,183,1|glvos0,90,185,0|gtsvfz,90,185,0|gtsvg0,88,183,1|h4lrfz,88,183,1|h4lrg0,90,185,0|hciy3z,90,185,0|hciy40,88,183,1|hnbu3z,88,183,1|hnbu40,90,185,0|hv90rz,90,185,0|hv90s0,88,183,1|i6evfz,88,183,1|i6evg0,90,185,0|idz3fz,90,185,0|idz3g0,88,183,1|ip4y3z,88,183,1|ip4y40,90,185,0|iwp63z,90,185,0|iwp640,88,183,1|j7v0rz,88,183,1|j7v0s0,90,185,0|jff8rz,90,185,0|jff8s0,88,183,1|jql3fz,88,183,1|jql3g0,90,185,0|jyia3z,90,185,0|jyia40,88,183,1|k9b63z,88,183,1|k9b640,90,185,0|kh8crz,90,185,0|kh8cs0,88,183,1|ks18rz,88,183,1|ks18s0,90,185,0|kzyffz,90,185,0|kzyfg0,88,183,1|lb4a3z,88,183,1|lb4a40,90,185,0|lioi3z,90,185,0|lioi40,88,183,0|ne0hzz,88,183,0|ne0i00,90,185,0|NaN,90,185,0\",\"Asia/Kuala_Lumpur|,0,255,0|-100ew5z,0,255,0|-100ew5y,84,256,0|-xphpwe,84,256,0|-xphpwd,90,185,0|-jb6gs1,90,185,0|-jb6gs0,118,240,1|-hquppd,118,240,1|-hquppc,118,240,0|-esddpd,118,240,0|-esddpc,106,216,0|-ejqa61,106,216,0|-ejqa60,107,218,0|-conl01,107,218,0|-conl00,106,216,0|69g35z,106,216,0|69g360,88,183,0|NaN,88,183,0\",\"Asia/Kuching|,0,257,0|-mvof3l,0,257,0|-mvof3k,106,216,0|-jb6i61,106,216,0|-jb6i60,88,183,0|-hwgm81,88,183,0|-hwgm80,128,258,1|-hrs4hd,128,258,1|-hrs4hc,88,183,0|-hdmu81,88,183,0|-hdmu80,128,258,1|-h8ychd,128,258,1|-h8ychc,88,183,0|-guuww1,88,183,0|-guuww0,128,258,1|-gq6f5d,128,258,1|-gq6f5c,88,183,0|-gc2zk1,88,183,0|-gc2zk0,128,258,1|-g7ehtd,128,258,1|-g7ehtc,88,183,0|-ftb281,88,183,0|-ftb280,128,258,1|-fomkhd,128,258,1|-fomkhc,88,183,0|-faha81,88,183,0|-faha80,128,258,1|-f5sshd,128,258,1|-f5sshc,88,183,0|-erpcw1,88,183,0|-erpcw0,128,258,1|-en0v5d,128,258,1|-en0v5c,88,183,0|-ejqbk1,88,183,0|-ejqbk0,107,218,0|-conl01,107,218,0|-conl00,88,183,0|NaN,88,183,0\",\"Asia/Kuwait|,0,196,0|-bwgbbh,0,196,0|-bwgbbg,100,4,0|NaN,100,4,0\",\"Asia/Macau|,0,259,0|-y0i2cz,0,259,0|-y0i2cy,45,183,0|-emm3o1,45,183,0|-emm3o0,107,218,0|-efxfs1,107,218,0|-efxfs0,93,189,1|-e5lak1,93,189,1|-e5lak0,107,218,0|-dx5ig1,107,218,0|-dx5ig0,93,189,1|-dpa981,93,189,1|-dpa980,107,218,0|-cnoec1,107,218,0|-cnoec0,45,183,0|-ccrt01,45,183,0|-ccrt00,48,218,1|-c4wh01,48,218,1|-c4wh00,45,183,0|-buk901,45,183,0|-buk900,48,218,1|-bizl01,48,218,1|-bizl00,45,183,0|-bb2ec1,45,183,0|-bb2ec0,48,218,1|-b1pd01,48,218,1|-b1pd00,45,183,0|-atu101,45,183,0|-atu100,48,218,1|-aj1501,48,218,1|-aj1500,45,183,0|-ab3yc1,45,183,0|-ab3yc0,48,218,1|-a0b2c1,48,218,1|-a0b2c0,45,183,0|-9sdvo1,45,183,0|-9sdvo0,48,218,1|-9hj501,48,218,1|-9hj500,45,183,0|-99auc1,45,183,0|-99auc0,48,218,1|-8yhyc1,48,218,1|-8yhyc0,45,183,0|-8qkro1,45,183,0|-8qkro0,48,218,1|-8frvo1,48,218,1|-8frvo0,45,183,0|-88kmc1,45,183,0|-88kmc0,48,218,1|-7x1t01,48,218,1|-7x1t00,45,183,0|-7pujo1,45,183,0|-7pujo0,48,218,1|-7dyro1,48,218,1|-7dyro0,45,183,0|-774h01,45,183,0|-774h00,48,218,1|-6v8fa1,48,218,1|-6v8fa0,45,183,0|-6o1361,45,183,0|-6o1360,48,218,1|-6cicm1,48,218,1|-6cicm0,45,183,0|-65b0i1,45,183,0|-65b0i0,48,218,1|-5ts9y1,48,218,1|-5ts9y0,45,183,0|-5mkxu1,45,183,0|-5mkxu0,48,218,1|-5b27a1,48,218,1|-5b27a0,45,183,0|-53uv61,45,183,0|-53uv60,48,218,1|-4rz5y1,48,218,1|-4rz5y0,45,183,0|-4l4si1,45,183,0|-4l4si0,48,218,1|-4993a1,48,218,1|-4993a0,45,183,0|-42epu1,45,183,0|-42epu0,48,218,1|-3qj0m1,48,218,1|-3qj0m0,45,183,0|-3jboi1,45,183,0|-3jboi0,48,218,1|-37sxy1,48,218,1|-37sxy0,45,183,0|-30llu1,45,183,0|-30llu0,48,218,1|-2p2va1,48,218,1|-2p2va0,45,183,0|-2gfoi1,45,183,0|-2gfoi0,48,218,1|-272sq1,48,218,1|-272sq0,45,183,0|-1xplu1,45,183,0|-1xplu0,48,218,1|-1ocq21,48,218,1|-1ocq20,45,183,0|-1ezj61,45,183,0|-1ezj60,48,218,1|-159ly1,48,218,1|-159ly0,45,183,0|-vwhu1,45,183,0|-vwhu0,48,218,1|-mjja1,48,218,1|-mjja0,45,183,0|-d6f61,45,183,0|-d6f60,48,218,1|-3tgm1,48,218,1|-3tgm0,45,183,0|5jnhz,45,183,0|5jni0,48,218,1|ewm1z,48,218,1|ewm20,45,183,0|o9q5z,45,183,0|o9q60,48,218,1|xmopz,48,218,1|xmoq0,45,183,0|16zstz,45,183,0|16zsu0,48,218,1|1gpq1z,48,218,1|1gpq20,45,183,0|1q2u5z,45,183,0|1q2u60,48,218,1|1zfspz,48,218,1|1zfsq0,45,183,0|231i5z,45,183,0|231i60,48,218,1|2i5vdz,48,218,1|2i5ve0,45,183,0|2rizhz,45,183,0|2rizi0,48,218,1|30vy1z,48,218,1|30vy20,45,183,0|3a925z,45,183,0|3a9260,48,218,1|3jm0pz,48,218,1|3jm0q0,45,183,0|4vv4tz,45,183,0|4vv4u0,48,218,1|5457dz,48,218,1|5457e0,45,183,0|NaN,45,183,0\",\"Asia/Magadan|,0,260,0|-nu1nxd,0,260,0|-nu1nxc,93,189,0|-kmrns1,93,189,0|-kmrns0,89,184,0|5vak3z,89,184,0|5vak40,102,194,1|64pdbz,102,194,1|64pdc0,89,184,0|6e2hfz,89,184,0|6e2hg0,102,194,1|6nhanz,102,194,1|6nhao0,89,184,0|6wuerz,89,184,0|6wues0,102,194,1|7697zz,102,194,1|769800,89,184,0|7fo6rz,89,184,0|7fo6s0,102,194,1|7p1dnz,102,194,1|7p1do0,89,184,0|7yeezz,89,184,0|7yef00,102,194,1|87rgbz,102,194,1|87rgc0,89,184,0|8h4hnz,89,184,0|8h4ho0,102,194,1|8qhizz,102,194,1|8qhj00,89,184,0|8zukbz,89,184,0|8zukc0,102,194,1|997lnz,102,194,1|997lo0,89,184,0|9ikmzz,89,184,0|9ikn00,102,194,1|9rxobz,102,194,1|9rxoc0,89,184,0|a1apnz,89,184,0|a1apo0,102,194,1|aanqzz,102,194,1|aanr00,89,184,0|ak0sbz,89,184,0|ak0sc0,102,194,1|atqsbz,102,194,1|atqsc0,89,184,0|b33tnz,89,184,0|b33to0,89,184,1|bcgxrz,89,184,1|bcgxs0,93,189,0|bi8cfz,93,189,0|bi8cg0,89,184,0|bltwbz,89,184,0|bltwc0,102,194,1|bv6xnz,102,194,1|bv6xo0,89,184,0|c4jyzz,89,184,0|c4jz00,102,194,1|cdx0bz,102,194,1|cdx0c0,89,184,0|cna1nz,89,184,0|cna1o0,102,194,1|cwn2zz,102,194,1|cwn300,89,184,0|d604bz,89,184,0|d604c0,102,194,1|dfd5nz,102,194,1|dfd5o0,89,184,0|dp35nz,89,184,0|dp35o0,102,194,1|dzw1nz,102,194,1|dzw1o0,89,184,0|e7t8bz,89,184,0|e7t8c0,102,194,1|eim4bz,102,194,1|eim4c0,89,184,0|eqjazz,89,184,0|eqjb00,102,194,1|f1c6zz,102,194,1|f1c700,89,184,0|f99dnz,89,184,0|f99do0,102,194,1|fkf8bz,102,194,1|fkf8c0,89,184,0|frzgbz,89,184,0|frzgc0,102,194,1|g35azz,102,194,1|g35b00,89,184,0|gapizz,89,184,0|gapj00,102,194,1|glvdnz,102,194,1|glvdo0,89,184,0|gtskbz,89,184,0|gtskc0,102,194,1|h4lgbz,102,194,1|h4lgc0,89,184,0|hcimzz,89,184,0|hcin00,102,194,1|hnbizz,102,194,1|hnbj00,89,184,0|hv8pnz,89,184,0|hv8po0,102,194,1|i6ekbz,102,194,1|i6ekc0,89,184,0|idysbz,89,184,0|idysc0,102,194,1|ip4mzz,102,194,1|ip4n00,89,184,0|iwouzz,89,184,0|iwov00,102,194,1|j7upnz,102,194,1|j7upo0,89,184,0|jfexnz,89,184,0|jfexo0,102,194,1|jqksbz,102,194,1|jqksc0,89,184,0|jyhyzz,89,184,0|jyhz00,102,194,1|k9auzz,102,194,1|k9av00,89,184,0|kh81nz,89,184,0|kh81o0,102,194,1|ks0xnz,102,194,1|ks0xo0,89,184,0|kzy4bz,89,184,0|kzy4c0,102,194,1|lb3yzz,102,194,1|lb3z00,89,184,0|lio6zz,89,184,0|lio700,102,194,0|ne06vz,102,194,0|ne06w0,93,189,0|o63gfz,93,189,0|o63gg0,89,184,0|NaN,89,184,0\",\"Asia/Makassar|,0,261,0|-q3gzg1,0,261,0|-q3gzg0,20,261,0|-jebi41,20,261,0|-jebi40,88,183,0|-ek3a81,88,183,0|-ek3a80,107,218,0|-co37o1,107,218,0|-co37o0,129,183,0|NaN,129,183,0\",\"Asia/Manila|,0,262,0|-1t8ix2p,0,262,0|-1t8ix2o,0,263,0|-10va3qp,0,263,0|-10va3qo,46,183,0|-hb5y81,46,183,0|-hb5y80,56,218,1|-h6fno1,56,218,1|-h6fno0,46,183,0|-efxa81,46,183,0|-efxa80,116,218,0|-d4ux01,116,218,0|-d4ux00,46,183,0|-87fsw1,46,183,0|-87fsw0,56,218,1|-83bqc1,56,218,1|-83bqc0,46,183,0|4aen3z,46,183,0|4aen40,56,218,1|4jtgbz,56,218,1|4jtgc0,46,183,0|NaN,46,183,0\",\"Asia/Muscat|,0,228,0|-q3gnkp,0,228,0|-q3gnko,105,203,0|NaN,105,203,0\",\"Asia/Nicosia|,0,264,0|-p4bq6h,0,264,0|-p4bq6g,14,9,0|2r67rz,14,9,0|2r67s0,15,4,1|30j6bz,15,4,1|30j6c0,14,9,0|3bn93z,14,9,0|3bn940,15,4,1|3jb3nz,15,4,1|3jb3o0,14,9,0|3s9efz,14,9,0|3s9eg0,15,4,1|419ebz,15,4,1|419ec0,14,9,0|4azh3z,14,9,0|4azh40,15,4,1|4keabz,15,4,1|4keac0,14,9,0|4tpjrz,14,9,0|4tpjs0,15,4,1|532ibz,15,4,1|532ic0,14,9,0|5csl3z,14,9,0|5csl40,15,4,1|5lskzz,15,4,1|5lsl00,14,9,0|5v5p3z,14,9,0|5v5p40,15,4,1|64innz,15,4,1|64ino0,14,9,0|6dvrrz,14,9,0|6dvrs0,15,4,1|6n8qbz,15,4,1|6n8qc0,14,9,0|6wlufz,14,9,0|6wlug0,15,4,1|75yszz,15,4,1|75yt00,14,9,0|7fbx3z,14,9,0|7fbx40,15,4,1|7p1ubz,15,4,1|7p1uc0,14,9,0|7yeyfz,14,9,0|7yeyg0,15,4,1|87rwzz,15,4,1|87rx00,14,9,0|8h513z,14,9,0|8h5140,15,4,1|8qhznz,15,4,1|8qhzo0,14,9,0|8zv3rz,14,9,0|8zv3s0,15,4,1|9982bz,15,4,1|9982c0,14,9,0|9il6fz,14,9,0|9il6g0,15,4,1|9ry4zz,15,4,1|9ry500,14,9,0|a1b93z,14,9,0|a1b940,15,4,1|aao7nz,15,4,1|aao7o0,14,9,0|ak1brz,14,9,0|ak1bs0,15,4,1|atr8zz,15,4,1|atr900,14,9,0|b34d3z,14,9,0|b34d40,15,4,1|bchbnz,15,4,1|bchbo0,14,9,0|blufrz,14,9,0|blufs0,15,4,1|bv7ebz,15,4,1|bv7ec0,14,9,0|c4kifz,14,9,0|c4kig0,15,4,1|cdxgzz,15,4,1|cdxh00,14,9,0|cnal3z,14,9,0|cnal40,15,4,1|cwnjnz,15,4,1|cwnjo0,14,9,0|d60nrz,14,9,0|d60ns0,15,4,1|dfdmbz,15,4,1|dfdmc0,14,9,0|dp3p3z,14,9,0|dp3p40,15,4,1|dygnnz,15,4,1|dygno0,14,9,0|e7trrz,14,9,0|e7trs0,15,4,1|eh6qbz,15,4,1|eh6qc0,14,9,0|eqjufz,14,9,0|eqjug0,15,4,1|f1cyrz,15,4,1|f1cys0,14,9,0|f9a5fz,14,9,0|f9a5g0,15,4,1|fkg03z,15,4,1|fkg040,14,9,0|fs083z,14,9,0|fs0840,15,4,1|g362rz,15,4,1|g362s0,14,9,0|gaqarz,14,9,0|gaqas0,15,4,1|glw5fz,15,4,1|glw5g0,14,9,0|gttc3z,14,9,0|gttc40,15,4,1|h4m83z,15,4,1|h4m840,14,9,0|hcjerz,14,9,0|hcjes0,15,4,1|hncarz,15,4,1|hncas0,14,9,0|hv9hfz,14,9,0|hv9hg0,15,4,1|i6fc3z,15,4,1|i6fc40,14,9,0|idzk3z,14,9,0|idzk40,15,4,1|ip5erz,15,4,1|ip5es0,14,9,0|iwpmrz,14,9,0|iwpms0,15,4,1|j7vhfz,15,4,1|j7vhg0,14,9,0|jffpfz,14,9,0|jffpg0,15,4,1|jqlk3z,15,4,1|jqlk40,14,9,0|jyiqrz,14,9,0|jyiqs0,15,4,1|k9bmrz,15,4,1|k9bms0,14,9,0|kh8tfz,14,9,0|kh8tg0,15,4,1|ks1pfz,15,4,1|ks1pg0,14,9,0|kzyw3z,14,9,0|kzyw40,15,4,1|lb4qrz,15,4,1|lb4qs0,14,9,0|lioyrz,14,9,0|lioys0,15,4,1|ltutfz,15,4,1|ltutg0,14,9,0|m1f1fz,14,9,0|m1f1g0,15,4,1|mckw3z,15,4,1|mckw40,14,9,0|mki2rz,14,9,0|mki2s0,15,4,1|mvayrz,15,4,1|mvays0,14,9,0|n385fz,14,9,0|n385g0,15,4,1|ne11fz,15,4,1|ne11g0,14,9,0|nly83z,14,9,0|nly840,15,4,1|nwr43z,15,4,1|nwr440,14,9,0|o4oarz,14,9,0|o4oas0,15,4,1|ofu5fz,15,4,1|ofu5g0,14,9,0|onedfz,14,9,0|onedg0,15,4,1|oyk83z,15,4,1|oyk840,14,9,0|p64g3z,14,9,0|p64g40,15,4,1|phaarz,15,4,1|phaas0,14,9,0|pp7hfz,14,9,0|pp7hg0,15,4,1|q00dfz,15,4,1|q00dg0,14,9,0|q7xk3z,14,9,0|q7xk40,15,4,1|qiqg3z,15,4,1|qiqg40,14,9,0|qqnmrz,14,9,0|qqnms0,15,4,1|r1thfz,15,4,1|r1thg0,14,9,0|r9dpfz,14,9,0|r9dpg0,15,4,1|rkjk3z,15,4,1|rkjk40,14,9,0|rs3s3z,14,9,0|rs3s40,15,4,1|s39mrz,15,4,1|s39ms0,14,9,0|sb6tfz,14,9,0|sb6tg0,15,4,1|slzpfz,15,4,1|slzpg0,14,9,0|stww3z,14,9,0|stww40,15,4,1|t4ps3z,15,4,1|t4ps40,14,9,0|tcmyrz,14,9,0|tcmys0,15,4,1|tnfurz,15,4,1|tnfus0,14,9,0|tvd1fz,14,9,0|tvd1g0,15,4,1|u6iw3z,15,4,1|u6iw40,14,9,0|ue343z,14,9,0|ue3440,15,4,1|up8yrz,15,4,1|up8ys0,14,9,0|uwt6rz,14,9,0|uwt6s0,15,4,1|v7z1fz,15,4,1|v7z1g0,14,9,0|vfw83z,14,9,0|vfw840,15,4,1|vqp43z,15,4,1|vqp440,14,9,0|vymarz,14,9,0|vymas0,15,4,1|w9f6rz,15,4,1|w9f6s0,14,9,0|whcdfz,14,9,0|whcdg0,15,4,1|wsi83z,15,4,1|wsi840,14,9,0|x02g3z,14,9,0|x02g40,15,4,1|xb8arz,15,4,1|xb8as0,14,9,0|xisirz,14,9,0|xisis0,15,4,1|xtydfz,15,4,1|xtydg0,14,9,0|y1ilfz,14,9,0|y1ilg0,15,4,1|ycog3z,15,4,1|ycog40,14,9,0|yklmrz,14,9,0|yklms0,15,4,1|yveirz,15,4,1|yveis0,14,9,0|z3bpfz,14,9,0|z3bpg0,15,4,1|ze4lfz,15,4,1|ze4lg0,14,9,0|zm1s3z,14,9,0|zm1s40,15,4,1|zx7mrz,15,4,1|zx7ms0,14,9,0|104rurz,14,9,0|104rus0,15,4,1|10fxpfz,15,4,1|10fxpg0,14,9,0|10nhxfz,14,9,0|10nhxg0,15,4,1|10yns3z,15,4,1|10yns40,14,9,0|116kyrz,14,9,0|116kys0,15,4,1|11hdurz,15,4,1|11hdus0,14,9,0|11pb1fz,14,9,0|11pb1g0,15,4,1|1203xfz,15,4,1|1203xg0,14,9,0|128143z,14,9,0|1281440,15,4,1|12iu03z,15,4,1|12iu040,14,9,0|12qr6rz,14,9,0|12qr6s0,15,4,1|131x1fz,15,4,1|131x1g0,14,9,0|139h9fz,14,9,0|139h9g0,15,4,1|13kn43z,15,4,1|13kn440,14,9,0|13s7c3z,14,9,0|13s7c40,15,4,1|143d6rz,15,4,1|143d6s0,14,9,0|14badfz,14,9,0|14badg0,15,4,1|14m39fz,15,4,1|14m39g0,14,9,0|14u0g3z,14,9,0|14u0g40,15,4,1|154tc3z,15,4,1|154tc40,14,9,0|15cqirz,14,9,0|15cqis0,15,4,1|15nwdfz,15,4,1|15nwdg0,14,9,0|15vglfz,14,9,0|15vglg0,15,4,1|166mg3z,15,4,1|166mg40,14,9,0|16e6o3z,14,9,0|16e6o40,15,4,1|16pcirz,15,4,1|16pcis0,14,9,0|16x9pfz,14,9,0|16x9pg0,15,4,1|1782lfz,15,4,1|1782lg0,14,9,0|17fzs3z,14,9,0|17fzs40,15,4,1|17qso3z,15,4,1|17qso40,14,9,0|17ypurz,14,9,0|17ypus0,15,4,1|189iqrz,15,4,1|189iqs0,14,9,0|18hfxfz,14,9,0|18hfxg0,15,4,1|18sls3z,15,4,1|18sls40,14,9,0|190603z,14,9,0|1906040,15,4,1|19bburz,15,4,1|19bbus0,14,9,0|19iw2rz,14,9,0|19iw2s0,15,4,1|19u1xfz,15,4,1|19u1xg0,14,9,0|1a1z43z,14,9,0|1a1z440,15,4,1|1acs03z,15,4,1|1acs040,14,9,0|1akp6rz,14,9,0|1akp6s0,15,4,1|1avi2rz,15,4,1|1avi2s0,14,9,0|1b3f9fz,14,9,0|1b3f9g0,15,4,1|1bel43z,15,4,1|1bel440,14,9,0|1bm5c3z,14,9,0|1bm5c40,15,4,1|1bxb6rz,15,4,1|1bxb6s0,14,9,0|1c4verz,14,9,0|1c4ves0,15,4,1|1cg19fz,15,4,1|1cg19g0,14,9,0|1cnlhfz,14,9,0|1cnlhg0,15,4,1|1cyrc3z,15,4,1|1cyrc40,14,9,0|1d6oirz,14,9,0|1d6ois0,15,4,1|1dhherz,15,4,1|1dhhes0,14,9,0|1dpelfz,14,9,0|1dpelg0,15,4,1|1e07hfz,15,4,1|1e07hg0,14,9,0|1e84o3z,14,9,0|1e84o40,15,4,1|1ejairz,15,4,1|1ejais0,14,9,0|1equqrz,14,9,0|1equqs0,15,4,1|1f20lfz,15,4,1|1f20lg0,14,9,0|1f9ktfz,14,9,0|1f9ktg0,15,4,1|1fkqo3z,15,4,1|1fkqo40,14,9,0|1fsnurz,14,9,0|1fsnus0,15,4,1|1g3gqrz,15,4,1|1g3gqs0,14,9,0|1gbdxfz,14,9,0|1gbdxg0,15,4,1|1gm6tfz,15,4,1|1gm6tg0,14,9,0|1gu403z,14,9,0|1gu4040,15,4,1|1h4ww3z,15,4,1|1h4ww40,14,9,0|1hcu2rz,14,9,0|1hcu2s0,15,4,1|1hnzxfz,15,4,1|1hnzxg0,14,9,0|1hvk5fz,14,9,0|1hvk5g0,15,4,1|1i6q03z,15,4,1|1i6q040,14,9,0|1iea83z,14,9,0|1iea840,15,4,1|1ipg2rz,15,4,1|1ipg2s0,14,9,0|1ixd9fz,14,9,0|1ixd9g0,15,4,1|1j865fz,15,4,1|1j865g0,14,9,0|1jg3c3z,14,9,0|1jg3c40,15,4,1|1jqw83z,15,4,1|1jqw840,14,9,0|1jyterz,14,9,0|1jytes0,15,4,1|1k9z9fz,15,4,1|1k9z9g0,14,9,0|1khjhfz,14,9,0|1khjhg0,15,4,1|1kspc3z,15,4,1|1kspc40,14,9,0|1l09k3z,14,9,0|1l09k40,15,4,1|1lbferz,15,4,1|1lbfes0,14,9,0|1ljclfz,14,9,0|1ljclg0,15,4,1|1lu5hfz,15,4,1|1lu5hg0,14,9,0|1m22o3z,14,9,0|1m22o40,15,4,1|1mcvk3z,15,4,1|1mcvk40,14,9,0|1mksqrz,14,9,0|1mksqs0,15,4,1|1mvlmrz,15,4,1|1mvlms0,14,9,0|1n3itfz,14,9,0|1n3itg0,15,4,1|1neoo3z,15,4,1|1neoo40,14,9,0|1nm8w3z,14,9,0|1nm8w40,15,4,1|1nxeqrz,15,4,1|1nxeqs0,14,9,0|1o4yyrz,14,9,0|1o4yys0,15,4,1|1og4tfz,15,4,1|1og4tg0,14,9,0|1oo203z,14,9,0|1oo2040,15,4,1|1oyuw3z,15,4,1|1oyuw40,14,9,0|1p6s2rz,14,9,0|1p6s2s0,15,4,1|1phkyrz,15,4,1|1phkys0,14,9,0|1ppi5fz,14,9,0|1ppi5g0,15,4,1|1q0o03z,15,4,1|1q0o040,14,9,0|1q8883z,14,9,0|1q88840,15,4,1|1qje2rz,15,4,1|1qje2s0,14,9,0|1qqyarz,14,9,0|1qqyas0,15,4,1|1r245fz,15,4,1|1r245g0,14,9,0|1r9odfz,14,9,0|1r9odg0,15,4,1|1rku83z,15,4,1|1rku840,14,9,0|1rsrerz,14,9,0|1rsres0,15,4,1|1s3karz,15,4,1|1s3kas0,14,9,0|1sbhhfz,14,9,0|1sbhhg0,15,4,1|1smadfz,15,4,1|1smadg0,14,9,0|1su7k3z,14,9,0|1su7k40,15,4,1|1t5derz,15,4,1|1t5des0,14,9,0|1tcxmrz,14,9,0|1tcxms0,15,4,1|1to3hfz,15,4,1|1to3hg0,14,9,0|1tvnpfz,14,9,0|1tvnpg0,15,4,1|1u6tk3z,15,4,1|1u6tk40,14,9,0|1ueqqrz,14,9,0|1ueqqs0,15,4,1|1upjmrz,15,4,1|1upjms0,14,9,0|1uxgtfz,14,9,0|1uxgtg0,15,4,1|1v89pfz,15,4,1|1v89pg0,14,9,0|1vg6w3z,14,9,0|1vg6w40,15,4,1|1vqzs3z,15,4,1|1vqzs40,14,9,0|NaN,14,9,0\",\"Asia/Novokuznetsk|,0,265,0|-nu36td,0,265,0|-nu36tc,96,190,0|-kmrco1,96,190,0|-kmrco0,90,185,0|5vav7z,90,185,0|5vav80,88,183,1|64pofz,88,183,1|64pog0,90,185,0|6e2sjz,90,185,0|6e2sk0,88,183,1|6nhlrz,88,183,1|6nhls0,90,185,0|6wupvz,90,185,0|6wupw0,88,183,1|769j3z,88,183,1|769j40,90,185,0|7fohvz,90,185,0|7fohw0,88,183,1|7p1orz,88,183,1|7p1os0,90,185,0|7yeq3z,90,185,0|7yeq40,88,183,1|87rrfz,88,183,1|87rrg0,90,185,0|8h4srz,90,185,0|8h4ss0,88,183,1|8qhu3z,88,183,1|8qhu40,90,185,0|8zuvfz,90,185,0|8zuvg0,88,183,1|997wrz,88,183,1|997ws0,90,185,0|9iky3z,90,185,0|9iky40,88,183,1|9rxzfz,88,183,1|9rxzg0,90,185,0|a1b0rz,90,185,0|a1b0s0,88,183,1|aao23z,88,183,1|aao240,90,185,0|ak13fz,90,185,0|ak13g0,88,183,1|atr3fz,88,183,1|atr3g0,90,185,0|b344rz,90,185,0|b344s0,90,185,1|bch8vz,90,185,1|bch8w0,96,190,0|bi8njz,96,190,0|bi8nk0,90,185,0|blu7fz,90,185,0|blu7g0,88,183,1|bv78rz,88,183,1|bv78s0,90,185,0|c4ka3z,90,185,0|c4ka40,88,183,1|cdxbfz,88,183,1|cdxbg0,90,185,0|cnacrz,90,185,0|cnacs0,88,183,1|cwne3z,88,183,1|cwne40,90,185,0|d60ffz,90,185,0|d60fg0,88,183,1|dfdgrz,88,183,1|dfdgs0,90,185,0|dp3grz,90,185,0|dp3gs0,88,183,1|dzwcrz,88,183,1|dzwcs0,90,185,0|e7tjfz,90,185,0|e7tjg0,88,183,1|eimffz,88,183,1|eimfg0,90,185,0|eqjm3z,90,185,0|eqjm40,88,183,1|f1ci3z,88,183,1|f1ci40,90,185,0|f99orz,90,185,0|f99os0,88,183,1|fkfjfz,88,183,1|fkfjg0,90,185,0|frzrfz,90,185,0|frzrg0,88,183,1|g35m3z,88,183,1|g35m40,90,185,0|gapu3z,90,185,0|gapu40,88,183,1|glvorz,88,183,1|glvos0,90,185,0|gtsvfz,90,185,0|gtsvg0,88,183,1|h4lrfz,88,183,1|h4lrg0,90,185,0|hciy3z,90,185,0|hciy40,88,183,1|hnbu3z,88,183,1|hnbu40,90,185,0|hv90rz,90,185,0|hv90s0,88,183,1|i6evfz,88,183,1|i6evg0,90,185,0|idz3fz,90,185,0|idz3g0,88,183,1|ip4y3z,88,183,1|ip4y40,90,185,0|iwp63z,90,185,0|iwp640,88,183,1|j7v0rz,88,183,1|j7v0s0,90,185,0|jff8rz,90,185,0|jff8s0,88,183,1|jql3fz,88,183,1|jql3g0,90,185,0|jyia3z,90,185,0|jyia40,88,183,1|k9b63z,88,183,1|k9b640,90,185,0|kh8crz,90,185,0|kh8cs0,88,183,1|ks18rz,88,183,1|ks18s0,90,185,0|kzyffz,90,185,0|kzyfg0,90,185,1|lb4cvz,90,185,1|lb4cw0,96,190,0|liokvz,96,190,0|liokw0,90,185,0|NaN,90,185,0\",\"Asia/Novosibirsk|,0,266,0|-q4do0t,0,266,0|-q4do0s,96,190,0|-kmrco1,96,190,0|-kmrco0,90,185,0|5vav7z,90,185,0|5vav80,88,183,1|64pofz,88,183,1|64pog0,90,185,0|6e2sjz,90,185,0|6e2sk0,88,183,1|6nhlrz,88,183,1|6nhls0,90,185,0|6wupvz,90,185,0|6wupw0,88,183,1|769j3z,88,183,1|769j40,90,185,0|7fohvz,90,185,0|7fohw0,88,183,1|7p1orz,88,183,1|7p1os0,90,185,0|7yeq3z,90,185,0|7yeq40,88,183,1|87rrfz,88,183,1|87rrg0,90,185,0|8h4srz,90,185,0|8h4ss0,88,183,1|8qhu3z,88,183,1|8qhu40,90,185,0|8zuvfz,90,185,0|8zuvg0,88,183,1|997wrz,88,183,1|997ws0,90,185,0|9iky3z,90,185,0|9iky40,88,183,1|9rxzfz,88,183,1|9rxzg0,90,185,0|a1b0rz,90,185,0|a1b0s0,88,183,1|aao23z,88,183,1|aao240,90,185,0|ak13fz,90,185,0|ak13g0,88,183,1|atr3fz,88,183,1|atr3g0,90,185,0|b344rz,90,185,0|b344s0,90,185,1|bch8vz,90,185,1|bch8w0,96,190,0|bi8njz,96,190,0|bi8nk0,90,185,0|blu7fz,90,185,0|blu7g0,88,183,1|bv78rz,88,183,1|bv78s0,90,185,0|c4ka3z,90,185,0|c4ka40,88,183,1|c7fr3z,88,183,1|c7fr40,90,185,1|cdxe7z,90,185,1|cdxe80,96,190,0|cnafjz,96,190,0|cnafk0,90,185,1|cwngvz,90,185,1|cwngw0,96,190,0|d60i7z,96,190,0|d60i80,90,185,1|dfdjjz,90,185,1|dfdjk0,96,190,0|dp3jjz,96,190,0|dp3jk0,90,185,1|dzwfjz,90,185,1|dzwfk0,96,190,0|e7tm7z,96,190,0|e7tm80,90,185,1|eimi7z,90,185,1|eimi80,96,190,0|eqjovz,96,190,0|eqjow0,90,185,1|f1ckvz,90,185,1|f1ckw0,96,190,0|f99rjz,96,190,0|f99rk0,90,185,1|fkfm7z,90,185,1|fkfm80,96,190,0|frzu7z,96,190,0|frzu80,90,185,1|g35ovz,90,185,1|g35ow0,96,190,0|gapwvz,96,190,0|gapww0,90,185,1|glvrjz,90,185,1|glvrk0,96,190,0|gtsy7z,96,190,0|gtsy80,90,185,1|h4lu7z,90,185,1|h4lu80,96,190,0|hcj0vz,96,190,0|hcj0w0,90,185,1|hnbwvz,90,185,1|hnbww0,96,190,0|hv93jz,96,190,0|hv93k0,90,185,1|i6ey7z,90,185,1|i6ey80,96,190,0|idz67z,96,190,0|idz680,90,185,1|ip50vz,90,185,1|ip50w0,96,190,0|iwp8vz,96,190,0|iwp8w0,90,185,1|j7v3jz,90,185,1|j7v3k0,96,190,0|jffbjz,96,190,0|jffbk0,90,185,1|jql67z,90,185,1|jql680,96,190,0|jyicvz,96,190,0|jyicw0,90,185,1|k9b8vz,90,185,1|k9b8w0,96,190,0|kh8fjz,96,190,0|kh8fk0,90,185,1|ks1bjz,90,185,1|ks1bk0,96,190,0|kzyi7z,96,190,0|kzyi80,90,185,1|lb4cvz,90,185,1|lb4cw0,96,190,0|liokvz,96,190,0|liokw0,90,185,0|ne0krz,90,185,0|ne0ks0,96,190,0|oasa7z,96,190,0|oasa80,90,185,0|NaN,90,185,0\",\"Asia/Omsk|,0,267,0|-q5xmx7,0,267,0|-q5xmx6,91,186,0|-kmr9w1,91,186,0|-kmr9w0,96,190,0|5vaxzz,96,190,0|5vay00,90,185,1|64pr7z,90,185,1|64pr80,96,190,0|6e2vbz,96,190,0|6e2vc0,90,185,1|6nhojz,90,185,1|6nhok0,96,190,0|6wusnz,96,190,0|6wuso0,90,185,1|769lvz,90,185,1|769lw0,96,190,0|7foknz,96,190,0|7foko0,90,185,1|7p1rjz,90,185,1|7p1rk0,96,190,0|7yesvz,96,190,0|7yesw0,90,185,1|87ru7z,90,185,1|87ru80,96,190,0|8h4vjz,96,190,0|8h4vk0,90,185,1|8qhwvz,90,185,1|8qhww0,96,190,0|8zuy7z,96,190,0|8zuy80,90,185,1|997zjz,90,185,1|997zk0,96,190,0|9il0vz,96,190,0|9il0w0,90,185,1|9ry27z,90,185,1|9ry280,96,190,0|a1b3jz,96,190,0|a1b3k0,90,185,1|aao4vz,90,185,1|aao4w0,96,190,0|ak167z,96,190,0|ak1680,90,185,1|atr67z,90,185,1|atr680,96,190,0|b347jz,96,190,0|b347k0,96,190,1|bchbnz,96,190,1|bchbo0,91,186,0|bi8qbz,91,186,0|bi8qc0,96,190,0|blua7z,96,190,0|blua80,90,185,1|bv7bjz,90,185,1|bv7bk0,96,190,0|c4kcvz,96,190,0|c4kcw0,90,185,1|cdxe7z,90,185,1|cdxe80,96,190,0|cnafjz,96,190,0|cnafk0,90,185,1|cwngvz,90,185,1|cwngw0,96,190,0|d60i7z,96,190,0|d60i80,90,185,1|dfdjjz,90,185,1|dfdjk0,96,190,0|dp3jjz,96,190,0|dp3jk0,90,185,1|dzwfjz,90,185,1|dzwfk0,96,190,0|e7tm7z,96,190,0|e7tm80,90,185,1|eimi7z,90,185,1|eimi80,96,190,0|eqjovz,96,190,0|eqjow0,90,185,1|f1ckvz,90,185,1|f1ckw0,96,190,0|f99rjz,96,190,0|f99rk0,90,185,1|fkfm7z,90,185,1|fkfm80,96,190,0|frzu7z,96,190,0|frzu80,90,185,1|g35ovz,90,185,1|g35ow0,96,190,0|gapwvz,96,190,0|gapww0,90,185,1|glvrjz,90,185,1|glvrk0,96,190,0|gtsy7z,96,190,0|gtsy80,90,185,1|h4lu7z,90,185,1|h4lu80,96,190,0|hcj0vz,96,190,0|hcj0w0,90,185,1|hnbwvz,90,185,1|hnbww0,96,190,0|hv93jz,96,190,0|hv93k0,90,185,1|i6ey7z,90,185,1|i6ey80,96,190,0|idz67z,96,190,0|idz680,90,185,1|ip50vz,90,185,1|ip50w0,96,190,0|iwp8vz,96,190,0|iwp8w0,90,185,1|j7v3jz,90,185,1|j7v3k0,96,190,0|jffbjz,96,190,0|jffbk0,90,185,1|jql67z,90,185,1|jql680,96,190,0|jyicvz,96,190,0|jyicw0,90,185,1|k9b8vz,90,185,1|k9b8w0,96,190,0|kh8fjz,96,190,0|kh8fk0,90,185,1|ks1bjz,90,185,1|ks1bk0,96,190,0|kzyi7z,96,190,0|kzyi80,90,185,1|lb4cvz,90,185,1|lb4cw0,96,190,0|liokvz,96,190,0|liokw0,90,185,0|ne0krz,90,185,0|ne0ks0,96,190,0|NaN,96,190,0\",\"Asia/Oral|,0,268,0|-nu15id,0,268,0|-nu15ic,100,4,0|-kmr4c1,100,4,0|-kmr4c0,91,186,0|5vb0rz,91,186,0|5vb0s0,96,190,1|64ptzz,96,190,1|64pu00,96,190,0|6e2vbz,96,190,0|6e2vc0,96,190,1|6nhrbz,96,190,1|6nhrc0,91,186,0|6wuvfz,91,186,0|6wuvg0,96,190,1|769onz,96,190,1|769oo0,91,186,0|7fonfz,91,186,0|7fong0,96,190,1|7p1ubz,96,190,1|7p1uc0,91,186,0|7yevnz,91,186,0|7yevo0,96,190,1|87rwzz,96,190,1|87rx00,91,186,0|8h4ybz,91,186,0|8h4yc0,96,190,1|8qhznz,96,190,1|8qhzo0,91,186,0|8zv0zz,91,186,0|8zv100,96,190,1|9982bz,96,190,1|9982c0,91,186,0|9il3nz,91,186,0|9il3o0,96,190,1|9ry4zz,96,190,1|9ry500,91,186,0|a1b6bz,91,186,0|a1b6c0,91,186,1|aaoafz,91,186,1|aaoag0,105,203,0|ak1brz,105,203,0|ak1bs0,91,186,1|atrbrz,91,186,1|atrbs0,105,203,0|b34d3z,105,203,0|b34d40,91,186,1|bchefz,91,186,1|bcheg0,105,203,0|bi8t3z,105,203,0|bi8t40,91,186,0|bluczz,91,186,0|blud00,91,186,1|bv7h3z,91,186,1|bv7h40,105,203,0|c4kifz,105,203,0|c4kig0,91,186,1|cdxjrz,91,186,1|cdxjs0,105,203,0|cnal3z,105,203,0|cnal40,91,186,1|cwnmfz,91,186,1|cwnmg0,105,203,0|d60nrz,105,203,0|d60ns0,91,186,1|dfdp3z,91,186,1|dfdp40,105,203,0|dp3p3z,105,203,0|dp3p40,91,186,1|dzwl3z,91,186,1|dzwl40,105,203,0|e7trrz,105,203,0|e7trs0,91,186,1|eimnrz,91,186,1|eimns0,105,203,0|eqjufz,105,203,0|eqjug0,91,186,1|f1cqfz,91,186,1|f1cqg0,105,203,0|f99x3z,105,203,0|f99x40,91,186,1|fkfrrz,91,186,1|fkfrs0,105,203,0|frzzrz,105,203,0|frzzs0,91,186,1|g35ufz,91,186,1|g35ug0,105,203,0|gaq2fz,105,203,0|gaq2g0,91,186,1|glvx3z,91,186,1|glvx40,105,203,0|gtt3rz,105,203,0|gtt3s0,91,186,1|h4lzrz,91,186,1|h4lzs0,105,203,0|hcj6fz,105,203,0|hcj6g0,91,186,1|hnc2fz,91,186,1|hnc2g0,105,203,0|hv993z,105,203,0|hv9940,91,186,1|i6f3rz,91,186,1|i6f3s0,91,186,0|NaN,91,186,0\",\"Asia/Phnom_Penh|,0,211,0|-1ayyla5,0,211,0|-1ayyla4,54,211,0|-pysda5,54,211,0|-pysda4,90,185,0|NaN,90,185,0\",\"Asia/Pontianak|,0,269,0|-w6piwx,0,269,0|-w6piww,5,269,0|-jebg8x,5,269,0|-jebg8w,106,216,0|-eknm61,106,216,0|-eknm60,107,218,0|-co37o1,107,218,0|-co37o0,106,216,0|-bb5zi1,106,216,0|-bb5zi0,88,183,0|-a9m681,88,183,0|-a9m680,106,216,0|-34ru61,106,216,0|-34ru60,129,183,0|9e5gfz,129,183,0|9e5gg0,119,185,0|NaN,119,185,0\",\"Asia/Pyongyang|,0,270,0|-w895yd,0,270,0|-w895yc,130,236,0|-u9s4y1,130,236,0|-u9s4y0,116,218,0|-cpmro1,116,218,0|-cpmro0,130,218,0|nt2uzz,130,218,0|nt2v00,130,236,0|p87lnz,130,236,0|p87lo0,130,218,0|NaN,130,218,0\",\"Asia/Qatar|,0,209,0|-q3gmvl,0,209,0|-q3gmvk,105,203,0|19d0vz,105,203,0|19d0w0,100,4,0|NaN,100,4,0\",\"Asia/Qostanay|,0,271,0|-nu17s5,0,271,0|-nu17s4,105,203,0|-kmr741,105,203,0|-kmr740,91,186,0|5vb0rz,91,186,0|5vb0s0,96,190,1|64ptzz,96,190,1|64pu00,96,190,0|6e2vbz,96,190,0|6e2vc0,96,190,1|6nhrbz,96,190,1|6nhrc0,91,186,0|6wuvfz,91,186,0|6wuvg0,96,190,1|769onz,96,190,1|769oo0,91,186,0|7fonfz,91,186,0|7fong0,96,190,1|7p1ubz,96,190,1|7p1uc0,91,186,0|7yevnz,91,186,0|7yevo0,96,190,1|87rwzz,96,190,1|87rx00,91,186,0|8h4ybz,91,186,0|8h4yc0,96,190,1|8qhznz,96,190,1|8qhzo0,91,186,0|8zv0zz,91,186,0|8zv100,96,190,1|9982bz,96,190,1|9982c0,91,186,0|9il3nz,91,186,0|9il3o0,96,190,1|9ry4zz,96,190,1|9ry500,91,186,0|a1b6bz,91,186,0|a1b6c0,96,190,1|aao7nz,96,190,1|aao7o0,91,186,0|ak18zz,91,186,0|ak1900,96,190,1|atr8zz,96,190,1|atr900,91,186,0|b34abz,91,186,0|b34ac0,91,186,1|bchefz,91,186,1|bcheg0,105,203,0|bi8t3z,105,203,0|bi8t40,91,186,0|bluczz,91,186,0|blud00,96,190,1|bv7ebz,96,190,1|bv7ec0,91,186,0|c4kfnz,91,186,0|c4kfo0,96,190,1|cdxgzz,96,190,1|cdxh00,91,186,0|cnaibz,91,186,0|cnaic0,96,190,1|cwnjnz,96,190,1|cwnjo0,91,186,0|d60kzz,91,186,0|d60l00,96,190,1|dfdmbz,96,190,1|dfdmc0,91,186,0|dp3mbz,91,186,0|dp3mc0,96,190,1|dzwibz,96,190,1|dzwic0,91,186,0|e7tozz,91,186,0|e7tp00,96,190,1|eimkzz,96,190,1|eiml00,91,186,0|eqjrnz,91,186,0|eqjro0,96,190,1|f1cnnz,96,190,1|f1cno0,91,186,0|f99ubz,91,186,0|f99uc0,96,190,1|fkfozz,96,190,1|fkfp00,91,186,0|frzwzz,91,186,0|frzx00,96,190,1|g35rnz,96,190,1|g35ro0,91,186,0|gapznz,91,186,0|gapzo0,96,190,1|glvubz,96,190,1|glvuc0,91,186,0|gtt0zz,91,186,0|gtt100,96,190,1|h4lwzz,96,190,1|h4lx00,91,186,0|hcj3nz,91,186,0|hcj3o0,96,190,1|hnbznz,96,190,1|hnbzo0,91,186,0|hv96bz,91,186,0|hv96c0,96,190,1|i6f0zz,96,190,1|i6f100,96,190,0|NaN,96,190,0\",\"Asia/Qyzylorda|,0,272,0|-nu184h,0,272,0|-nu184g,105,203,0|-kmr741,105,203,0|-kmr740,91,186,0|5vb0rz,91,186,0|5vb0s0,96,190,1|64ptzz,96,190,1|64pu00,96,190,0|6e2vbz,96,190,0|6e2vc0,96,190,1|6nhrbz,96,190,1|6nhrc0,91,186,0|6wuvfz,91,186,0|6wuvg0,96,190,1|769onz,96,190,1|769oo0,91,186,0|7fonfz,91,186,0|7fong0,96,190,1|7p1ubz,96,190,1|7p1uc0,91,186,0|7yevnz,91,186,0|7yevo0,96,190,1|87rwzz,96,190,1|87rx00,91,186,0|8h4ybz,91,186,0|8h4yc0,96,190,1|8qhznz,96,190,1|8qhzo0,91,186,0|8zv0zz,91,186,0|8zv100,96,190,1|9982bz,96,190,1|9982c0,91,186,0|9il3nz,91,186,0|9il3o0,96,190,1|9ry4zz,96,190,1|9ry500,91,186,0|a1b6bz,91,186,0|a1b6c0,96,190,1|aao7nz,96,190,1|aao7o0,91,186,0|ak18zz,91,186,0|ak1900,96,190,1|atr8zz,96,190,1|atr900,91,186,0|b34abz,91,186,0|b34ac0,91,186,1|bchefz,91,186,1|bcheg0,91,186,0|bi8qbz,91,186,0|bi8qc0,96,190,0|blua7z,96,190,0|blua80,96,190,1|bv7ebz,96,190,1|bv7ec0,91,186,0|c4kfnz,91,186,0|c4kfo0,96,190,1|cdxgzz,96,190,1|cdxh00,91,186,0|cnaibz,91,186,0|cnaic0,96,190,1|cwnjnz,96,190,1|cwnjo0,91,186,0|d60kzz,91,186,0|d60l00,96,190,1|dfdmbz,96,190,1|dfdmc0,91,186,0|dp3mbz,91,186,0|dp3mc0,96,190,1|dzwibz,96,190,1|dzwic0,91,186,0|e7tozz,91,186,0|e7tp00,96,190,1|eimkzz,96,190,1|eiml00,91,186,0|eqjrnz,91,186,0|eqjro0,96,190,1|f1cnnz,96,190,1|f1cno0,91,186,0|f99ubz,91,186,0|f99uc0,96,190,1|fkfozz,96,190,1|fkfp00,91,186,0|frzwzz,91,186,0|frzx00,96,190,1|g35rnz,96,190,1|g35ro0,91,186,0|gapznz,91,186,0|gapzo0,96,190,1|glvubz,96,190,1|glvuc0,91,186,0|gtt0zz,91,186,0|gtt100,96,190,1|h4lwzz,96,190,1|h4lx00,91,186,0|hcj3nz,91,186,0|hcj3o0,96,190,1|hnbznz,96,190,1|hnbzo0,91,186,0|hv96bz,91,186,0|hv96c0,96,190,1|i6f0zz,96,190,1|i6f100,96,190,0|pk1rbz,96,190,0|pk1rc0,91,186,0|NaN,91,186,0\",\"Asia/Riyadh|,0,196,0|-bwgbbh,0,196,0|-bwgbbg,100,4,0|NaN,100,4,0\",\"Asia/Sakhalin|,0,273,0|-xl87rd,0,273,0|-xl87rc,107,218,0|-cpkx01,107,218,0|-cpkx00,89,184,0|5vak3z,89,184,0|5vak40,102,194,1|64pdbz,102,194,1|64pdc0,89,184,0|6e2hfz,89,184,0|6e2hg0,102,194,1|6nhanz,102,194,1|6nhao0,89,184,0|6wuerz,89,184,0|6wues0,102,194,1|7697zz,102,194,1|769800,89,184,0|7fo6rz,89,184,0|7fo6s0,102,194,1|7p1dnz,102,194,1|7p1do0,89,184,0|7yeezz,89,184,0|7yef00,102,194,1|87rgbz,102,194,1|87rgc0,89,184,0|8h4hnz,89,184,0|8h4ho0,102,194,1|8qhizz,102,194,1|8qhj00,89,184,0|8zukbz,89,184,0|8zukc0,102,194,1|997lnz,102,194,1|997lo0,89,184,0|9ikmzz,89,184,0|9ikn00,102,194,1|9rxobz,102,194,1|9rxoc0,89,184,0|a1apnz,89,184,0|a1apo0,102,194,1|aanqzz,102,194,1|aanr00,89,184,0|ak0sbz,89,184,0|ak0sc0,102,194,1|atqsbz,102,194,1|atqsc0,89,184,0|b33tnz,89,184,0|b33to0,89,184,1|bcgxrz,89,184,1|bcgxs0,93,189,0|bi8cfz,93,189,0|bi8cg0,89,184,0|bltwbz,89,184,0|bltwc0,102,194,1|bv6xnz,102,194,1|bv6xo0,89,184,0|c4jyzz,89,184,0|c4jz00,102,194,1|cdx0bz,102,194,1|cdx0c0,89,184,0|cna1nz,89,184,0|cna1o0,102,194,1|cwn2zz,102,194,1|cwn300,89,184,0|d604bz,89,184,0|d604c0,102,194,1|dfd5nz,102,194,1|dfd5o0,89,184,0|dp35nz,89,184,0|dp35o0,102,194,1|dzw1nz,102,194,1|dzw1o0,89,184,0|e7t8bz,89,184,0|e7t8c0,89,184,1|eim73z,89,184,1|eim740,93,189,0|eqjdrz,93,189,0|eqjds0,89,184,1|f1c9rz,89,184,1|f1c9s0,93,189,0|f99gfz,93,189,0|f99gg0,89,184,1|fkfb3z,89,184,1|fkfb40,93,189,0|frzj3z,93,189,0|frzj40,89,184,1|g35drz,89,184,1|g35ds0,93,189,0|gaplrz,93,189,0|gapls0,89,184,1|glvgfz,89,184,1|glvgg0,93,189,0|gtsn3z,93,189,0|gtsn40,89,184,1|h4lj3z,89,184,1|h4lj40,93,189,0|hciprz,93,189,0|hcips0,89,184,1|hnblrz,89,184,1|hnbls0,93,189,0|hv8sfz,93,189,0|hv8sg0,89,184,1|i6en3z,89,184,1|i6en40,93,189,0|idyv3z,93,189,0|idyv40,89,184,1|ip4prz,89,184,1|ip4ps0,93,189,0|iwoxrz,93,189,0|iwoxs0,89,184,1|j7usfz,89,184,1|j7usg0,93,189,0|jff0fz,93,189,0|jff0g0,89,184,1|jqkv3z,89,184,1|jqkv40,93,189,0|jyi1rz,93,189,0|jyi1s0,89,184,1|k9axrz,89,184,1|k9axs0,93,189,0|kh84fz,93,189,0|kh84g0,89,184,1|ks10fz,89,184,1|ks10g0,93,189,0|kzy73z,93,189,0|kzy740,89,184,1|lb41rz,89,184,1|lb41s0,93,189,0|lio9rz,93,189,0|lio9s0,89,184,0|ne09nz,89,184,0|ne09o0,93,189,0|o4nlrz,93,189,0|o4nls0,89,184,0|NaN,89,184,0\",\"Asia/Samarkand|,0,274,0|-nu18ei,0,274,0|-nu18eh,105,203,0|-kmr741,105,203,0|-kmr740,91,186,0|5vb0rz,91,186,0|5vb0s0,96,190,1|64ptzz,96,190,1|64pu00,96,190,0|6e2vbz,96,190,0|6e2vc0,96,190,1|6nhrbz,96,190,1|6nhrc0,91,186,0|6wuvfz,91,186,0|6wuvg0,96,190,1|769onz,96,190,1|769oo0,91,186,0|7fonfz,91,186,0|7fong0,96,190,1|7p1ubz,96,190,1|7p1uc0,91,186,0|7yevnz,91,186,0|7yevo0,96,190,1|87rwzz,96,190,1|87rx00,91,186,0|8h4ybz,91,186,0|8h4yc0,96,190,1|8qhznz,96,190,1|8qhzo0,91,186,0|8zv0zz,91,186,0|8zv100,96,190,1|9982bz,96,190,1|9982c0,91,186,0|9il3nz,91,186,0|9il3o0,96,190,1|9ry4zz,96,190,1|9ry500,91,186,0|a1b6bz,91,186,0|a1b6c0,96,190,1|aao7nz,96,190,1|aao7o0,91,186,0|ak18zz,91,186,0|ak1900,96,190,1|atr8zz,96,190,1|atr900,91,186,0|b34abz,91,186,0|b34ac0,96,190,1|bchbnz,96,190,1|bchbo0,91,186,0|NaN,91,186,0\",\"Asia/Seoul|,0,275,0|-w8966h,0,275,0|-w8966g,130,236,0|-u9s4y1,130,236,0|-u9s4y0,116,218,0|-couzo1,116,218,0|-couzo0,130,218,0|-b9kp01,130,218,0|-b9kp00,131,189,1|-b486g1,131,189,1|-b486g0,130,218,0|-atu101,130,218,0|-atu100,131,189,1|-aljyg1,131,189,1|-aljyg0,130,218,0|-ab5t01,130,218,0|-ab5t00,131,189,1|-a2tvs1,131,189,1|-a2tvs0,130,218,0|-9ql2c1,130,218,0|-9ql2c0,131,189,1|-9k3t41,131,189,1|-9k3t40,130,218,0|-88kmc1,130,218,0|-88kmc0,130,236,0|-7nhbm1,130,236,0|-7nhbm0,131,242,1|-7gy7q1,131,242,1|-7gy7q0,130,236,0|-73vrm1,130,236,0|-73vrm0,131,242,1|-6x1jq1,131,242,1|-6x1jq0,130,236,0|-6lvma1,130,236,0|-6lvma0,131,242,1|-6eofq1,131,242,1|-6eofq0,130,236,0|-635jm1,130,236,0|-635jm0,131,242,1|-5vyd21,131,242,1|-5vyd20,130,236,0|-5kfgy1,130,236,0|-5kfgy0,131,242,1|-5d8ae1,131,242,1|-5d8ae0,130,236,0|-51pea1,130,236,0|-51pea0,131,242,1|-4ui7q1,131,242,1|-4ui7q0,130,236,0|-4dqfm1,130,236,0|-4dqfm0,130,218,0|920hvz,130,218,0|920hw0,131,189,1|99xojz,131,189,1|99xok0,130,218,0|9kqkjz,130,218,0|9kqkk0,131,189,1|9snr7z,131,189,1|9snr80,130,218,0|NaN,130,218,0\",\"Asia/Shanghai|,0,276,0|-100eztk,0,276,0|-100eztj,45,183,0|-qh00w1,45,183,0|-qh00w0,48,218,1|-q87fo1,48,218,1|-q87fo0,45,183,0|-ffvq81,45,183,0|-ffvq80,48,218,1|-f8zno1,48,218,1|-f8zno0,45,183,0|-f148w1,45,183,0|-f148w0,48,218,1|-ep6p01,48,218,1|-ep6p00,45,183,0|-ekjy81,45,183,0|-ekjy80,48,218,1|-cp63o1,48,218,1|-cp63o0,45,183,0|-cc1sw1,45,183,0|-cc1sw0,48,218,1|-c4wh01,48,218,1|-c4wh00,45,183,0|-butfk1,45,183,0|-butfk0,48,218,1|-bkj501,48,218,1|-bkj500,45,183,0|-bb60w1,45,183,0|-bb60w0,48,218,1|-b3aro1,48,218,1|-b3aro0,45,183,0|-ase3k1,45,183,0|-ase3k0,48,218,1|-ar06c1,48,218,1|-ar06c0,45,183,0|8ixjbz,45,183,0|8ixjc0,48,218,1|8prr7z,48,218,1|8prr80,45,183,0|90kpzz,45,183,0|90kq00,48,218,1|98htvz,48,218,1|98htw0,45,183,0|9jnrbz,45,183,0|9jnrc0,48,218,1|9r7wjz,48,218,1|9r7wk0,45,183,0|a2dtzz,45,183,0|a2du00,48,218,1|aaaxvz,48,218,1|aaaxw0,45,183,0|al3wnz,45,183,0|al3wo0,48,218,1|at10jz,48,218,1|at10k0,45,183,0|b3tzbz,45,183,0|b3tzc0,48,218,1|bbr37z,48,218,1|bbr380,45,183,0|NaN,45,183,0\",\"Asia/Singapore|,0,256,0|-100ewke,0,256,0|-100ewkd,84,256,0|-xphpwe,84,256,0|-xphpwd,90,185,0|-jb6gs1,90,185,0|-jb6gs0,118,240,1|-hquppd,118,240,1|-hquppc,118,240,0|-esddpd,118,240,0|-esddpc,106,216,0|-ejqa61,106,216,0|-ejqa60,107,218,0|-conl01,107,218,0|-conl00,106,216,0|69g35z,106,216,0|69g360,88,183,0|NaN,88,183,0\",\"Asia/Srednekolymsk|,0,277,0|-nu1ogt,0,277,0|-nu1ogs,93,189,0|-kmrns1,93,189,0|-kmrns0,89,184,0|5vak3z,89,184,0|5vak40,102,194,1|64pdbz,102,194,1|64pdc0,89,184,0|6e2hfz,89,184,0|6e2hg0,102,194,1|6nhanz,102,194,1|6nhao0,89,184,0|6wuerz,89,184,0|6wues0,102,194,1|7697zz,102,194,1|769800,89,184,0|7fo6rz,89,184,0|7fo6s0,102,194,1|7p1dnz,102,194,1|7p1do0,89,184,0|7yeezz,89,184,0|7yef00,102,194,1|87rgbz,102,194,1|87rgc0,89,184,0|8h4hnz,89,184,0|8h4ho0,102,194,1|8qhizz,102,194,1|8qhj00,89,184,0|8zukbz,89,184,0|8zukc0,102,194,1|997lnz,102,194,1|997lo0,89,184,0|9ikmzz,89,184,0|9ikn00,102,194,1|9rxobz,102,194,1|9rxoc0,89,184,0|a1apnz,89,184,0|a1apo0,102,194,1|aanqzz,102,194,1|aanr00,89,184,0|ak0sbz,89,184,0|ak0sc0,102,194,1|atqsbz,102,194,1|atqsc0,89,184,0|b33tnz,89,184,0|b33to0,89,184,1|bcgxrz,89,184,1|bcgxs0,93,189,0|bi8cfz,93,189,0|bi8cg0,89,184,0|bltwbz,89,184,0|bltwc0,102,194,1|bv6xnz,102,194,1|bv6xo0,89,184,0|c4jyzz,89,184,0|c4jz00,102,194,1|cdx0bz,102,194,1|cdx0c0,89,184,0|cna1nz,89,184,0|cna1o0,102,194,1|cwn2zz,102,194,1|cwn300,89,184,0|d604bz,89,184,0|d604c0,102,194,1|dfd5nz,102,194,1|dfd5o0,89,184,0|dp35nz,89,184,0|dp35o0,102,194,1|dzw1nz,102,194,1|dzw1o0,89,184,0|e7t8bz,89,184,0|e7t8c0,102,194,1|eim4bz,102,194,1|eim4c0,89,184,0|eqjazz,89,184,0|eqjb00,102,194,1|f1c6zz,102,194,1|f1c700,89,184,0|f99dnz,89,184,0|f99do0,102,194,1|fkf8bz,102,194,1|fkf8c0,89,184,0|frzgbz,89,184,0|frzgc0,102,194,1|g35azz,102,194,1|g35b00,89,184,0|gapizz,89,184,0|gapj00,102,194,1|glvdnz,102,194,1|glvdo0,89,184,0|gtskbz,89,184,0|gtskc0,102,194,1|h4lgbz,102,194,1|h4lgc0,89,184,0|hcimzz,89,184,0|hcin00,102,194,1|hnbizz,102,194,1|hnbj00,89,184,0|hv8pnz,89,184,0|hv8po0,102,194,1|i6ekbz,102,194,1|i6ekc0,89,184,0|idysbz,89,184,0|idysc0,102,194,1|ip4mzz,102,194,1|ip4n00,89,184,0|iwouzz,89,184,0|iwov00,102,194,1|j7upnz,102,194,1|j7upo0,89,184,0|jfexnz,89,184,0|jfexo0,102,194,1|jqksbz,102,194,1|jqksc0,89,184,0|jyhyzz,89,184,0|jyhz00,102,194,1|k9auzz,102,194,1|k9av00,89,184,0|kh81nz,89,184,0|kh81o0,102,194,1|ks0xnz,102,194,1|ks0xo0,89,184,0|kzy4bz,89,184,0|kzy4c0,102,194,1|lb3yzz,102,194,1|lb3z00,89,184,0|lio6zz,89,184,0|lio700,102,194,0|ne06vz,102,194,0|ne06w0,89,184,0|NaN,89,184,0\",\"Asia/Taipei|,0,278,0|-12mch61,0,278,0|-12mch60,45,183,0|-gtzfk1,45,183,0|-gtzfk0,116,218,0|-co6u81,116,218,0|-co6u80,45,183,0|-cc1sw1,45,183,0|-cc1sw0,48,218,1|-c4wh01,48,218,1|-c4wh00,45,183,0|-butfk1,45,183,0|-butfk0,48,218,1|-bkj501,48,218,1|-bkj500,45,183,0|-bb60w1,45,183,0|-bb60w0,48,218,1|-b3aro1,48,218,1|-b3aro0,45,183,0|-ase3k1,45,183,0|-ase3k0,48,218,1|-akiuc1,48,218,1|-akiuc0,45,183,0|-a9m681,45,183,0|-a9m680,48,218,1|-a1qx01,48,218,1|-a1qx00,45,183,0|-9qu8w1,45,183,0|-9qu8w0,48,218,1|-9iyzo1,48,218,1|-9iyzo0,45,183,0|-9b5fk1,45,183,0|-9b5fk0,48,218,1|-8yjt01,48,218,1|-8yjt00,45,183,0|-8qs3k1,45,183,0|-8qs3k0,48,218,1|-8frvo1,48,218,1|-8frvo0,45,183,0|-880681,45,183,0|-880680,48,218,1|-7wzyc1,48,218,1|-7wzyc0,45,183,0|-7p88w1,45,183,0|-7p88w0,48,218,1|-7ftfo1,48,218,1|-7ftfo0,45,183,0|-76egw1,45,183,0|-76egw0,48,218,1|-6wzno1,48,218,1|-6wzno0,45,183,0|-6nmjk1,45,183,0|-6nmjk0,48,218,1|-6e7qc1,48,218,1|-6e7qc0,45,183,0|-64um81,45,183,0|-64um80,48,218,1|-5vft01,48,218,1|-5vft00,45,183,0|-5m2ow1,45,183,0|-5m2ow0,48,218,1|-5cnvo1,48,218,1|-5cnvo0,45,183,0|-503y81,45,183,0|-503y80,48,218,1|-4tu3o1,48,218,1|-4tu3o0,45,183,0|-4hc0w1,45,183,0|-4hc0w0,48,218,1|-4b26c1,48,218,1|-4b26c0,45,183,0|27rlrz,45,183,0|27rls0,48,218,1|2h6ezz,48,218,1|2h6f00,45,183,0|2qjj3z,45,183,0|2qjj40,48,218,1|2zycbz,48,218,1|2zycc0,45,183,0|4ydlrz,45,183,0|4ydls0,48,218,1|533wbz,48,218,1|533wc0,45,183,0|NaN,45,183,0\",\"Asia/Tashkent|,0,279,0|-nu18u0,0,279,0|-nu18tz,91,186,0|-kmr9w1,91,186,0|-kmr9w0,96,190,0|5vaxzz,96,190,0|5vay00,90,185,1|64pr7z,90,185,1|64pr80,96,190,0|6e2vbz,96,190,0|6e2vc0,90,185,1|6nhojz,90,185,1|6nhok0,96,190,0|6wusnz,96,190,0|6wuso0,90,185,1|769lvz,90,185,1|769lw0,96,190,0|7foknz,96,190,0|7foko0,90,185,1|7p1rjz,90,185,1|7p1rk0,96,190,0|7yesvz,96,190,0|7yesw0,90,185,1|87ru7z,90,185,1|87ru80,96,190,0|8h4vjz,96,190,0|8h4vk0,90,185,1|8qhwvz,90,185,1|8qhww0,96,190,0|8zuy7z,96,190,0|8zuy80,90,185,1|997zjz,90,185,1|997zk0,96,190,0|9il0vz,96,190,0|9il0w0,90,185,1|9ry27z,90,185,1|9ry280,96,190,0|a1b3jz,96,190,0|a1b3k0,90,185,1|aao4vz,90,185,1|aao4w0,96,190,0|ak167z,96,190,0|ak1680,90,185,1|atr67z,90,185,1|atr680,96,190,0|b347jz,96,190,0|b347k0,96,190,1|bchbnz,96,190,1|bchbo0,91,186,0|NaN,91,186,0\",\"Asia/Tbilisi|,0,280,0|-1ayyayo,0,280,0|-1ayyayn,132,280,0|-nu14ao,132,280,0|-nu14an,100,4,0|-6p7kc1,100,4,0|-6p7kc0,105,203,0|5vb3jz,105,203,0|5vb3k0,91,186,1|64pwrz,91,186,1|64pws0,105,203,0|6e30vz,105,203,0|6e30w0,91,186,1|6nhu3z,91,186,1|6nhu40,105,203,0|6wuy7z,105,203,0|6wuy80,91,186,1|769rfz,91,186,1|769rg0,105,203,0|7foq7z,105,203,0|7foq80,91,186,1|7p1x3z,91,186,1|7p1x40,105,203,0|7yeyfz,105,203,0|7yeyg0,91,186,1|87rzrz,91,186,1|87rzs0,105,203,0|8h513z,105,203,0|8h5140,91,186,1|8qi2fz,91,186,1|8qi2g0,105,203,0|8zv3rz,105,203,0|8zv3s0,91,186,1|99853z,91,186,1|998540,105,203,0|9il6fz,105,203,0|9il6g0,91,186,1|9ry7rz,91,186,1|9ry7s0,105,203,0|a1b93z,105,203,0|a1b940,91,186,1|aaoafz,91,186,1|aaoag0,105,203,0|ak1brz,105,203,0|ak1bs0,91,186,1|atrbrz,91,186,1|atrbs0,105,203,0|b34d3z,105,203,0|b34d40,105,203,1|bchh7z,105,203,1|bchh80,100,4,0|bluczz,100,4,0|blud00,105,203,1|bv7bjz,105,203,1|bv7bk0,100,4,0|c4kfnz,100,4,0|c4kfo0,105,203,1|cdxe7z,105,203,1|cdxe80,100,4,0|cnaibz,100,4,0|cnaic0,105,203,1|cwngvz,105,203,1|cwngw0,105,203,0|d60i7z,105,203,0|d60i80,91,186,1|dfdgrz,91,186,1|dfdgs0,105,203,0|dp3jjz,105,203,0|dp3jk0,91,186,1|eimffz,91,186,1|eimfg0,105,203,0|eqjovz,105,203,0|eqjow0,91,186,1|f1ci3z,91,186,1|f1ci40,105,203,0|f99rjz,105,203,0|f99rk0,91,186,1|fkfjfz,91,186,1|fkfjg0,105,203,0|frzu7z,105,203,0|frzu80,91,186,1|g35m3z,91,186,1|g35m40,105,203,0|gapwvz,105,203,0|gapww0,91,186,1|glvorz,91,186,1|glvos0,105,203,0|gtsy7z,105,203,0|gtsy80,91,186,1|h4lrfz,91,186,1|h4lrg0,105,203,0|hcj0vz,105,203,0|hcj0w0,91,186,1|hnbu3z,91,186,1|hnbu40,105,203,0|hv93jz,105,203,0|hv93k0,91,186,1|hzxjfz,91,186,1|hzxjg0,105,203,1|i6f6jz,105,203,1|i6f6k0,100,4,0|idzejz,100,4,0|idzek0,105,203,0|NaN,105,203,0\",\"Asia/Tehran|,0,281,0|-s6m6ux,0,281,0|-s6m6uw,133,281,0|-cixlix,133,281,0|-cixliw,134,282,0|435vlz,134,282,0|435vm0,105,203,0|4ad3jz,105,203,0|4ad3k0,91,186,1|4ldbfz,91,186,1|4ldbg0,105,203,0|4p2q7z,105,203,0|4p2q80,134,282,0|4t529z,134,282,0|4t52a0,124,246,1|52i0tz,124,246,1|52i0u0,134,282,0|5byu9z,134,282,0|5byua0,124,246,1|5lj7hz,124,246,1|5lj7i0,134,282,0|b4tcxz,134,282,0|b4tcy0,124,246,1|bc48tz,124,246,1|bc48u0,134,282,0|blhcxz,134,282,0|blhcy0,124,246,1|buy0tz,124,246,1|buy0u0,134,282,0|c49a9z,134,282,0|c49aa0,124,246,1|cdpy5z,124,246,1|cdpy60,134,282,0|cn17lz,134,282,0|cn17m0,124,246,1|cwhvhz,124,246,1|cwhvi0,134,282,0|d5t4xz,134,282,0|d5t4y0,124,246,1|df9stz,124,246,1|df9su0,134,282,0|dol29z,134,282,0|dol2a0,124,246,1|dy1q5z,124,246,1|dy1q60,134,282,0|e7eu9z,134,282,0|e7eua0,124,246,1|egvi5z,124,246,1|egvi60,134,282,0|eq6rlz,134,282,0|eq6rm0,124,246,1|eznfhz,124,246,1|eznfi0,134,282,0|f8yoxz,134,282,0|f8yoy0,124,246,1|fifctz,124,246,1|fifcu0,134,282,0|frqm9z,134,282,0|frqma0,124,246,1|g17a5z,124,246,1|g17a60,134,282,0|gake9z,134,282,0|gakea0,124,246,1|gk125z,124,246,1|gk1260,134,282,0|gtcblz,134,282,0|gtcbm0,124,246,1|h2szhz,124,246,1|h2szi0,134,282,0|hc48xz,134,282,0|hc48y0,124,246,1|hlkwtz,124,246,1|hlkwu0,134,282,0|huw69z,134,282,0|huw6a0,124,246,1|i4cu5z,124,246,1|i4cu60,134,282,0|idpy9z,134,282,0|idpya0,124,246,1|in6m5z,124,246,1|in6m60,134,282,0|jy1q9z,134,282,0|jy1qa0,124,246,1|k7ie5z,124,246,1|k7ie60,134,282,0|kgvi9z,134,282,0|kgvia0,124,246,1|kqc65z,124,246,1|kqc660,134,282,0|kznflz,134,282,0|kznfm0,124,246,1|l943hz,124,246,1|l943i0,134,282,0|lifcxz,134,282,0|lifcy0,124,246,1|lrw0tz,124,246,1|lrw0u0,134,282,0|m17a9z,134,282,0|m17aa0,124,246,1|many5z,124,246,1|many60,134,282,0|mk129z,134,282,0|mk12a0,124,246,1|mthq5z,124,246,1|mthq60,134,282,0|n2szlz,134,282,0|n2szm0,124,246,1|nc9nhz,124,246,1|nc9ni0,134,282,0|nlkwxz,134,282,0|nlkwy0,124,246,1|nv1ktz,124,246,1|nv1ku0,134,282,0|o4cu9z,134,282,0|o4cua0,124,246,1|odti5z,124,246,1|odti60,134,282,0|on6m9z,134,282,0|on6ma0,124,246,1|owna5z,124,246,1|owna60,134,282,0|p5yjlz,134,282,0|p5yjm0,124,246,1|pff7hz,124,246,1|pff7i0,134,282,0|poqgxz,134,282,0|poqgy0,124,246,1|py74tz,124,246,1|py74u0,134,282,0|q7ie9z,134,282,0|q7iea0,124,246,1|qgz25z,124,246,1|qgz260,134,282,0|qqc69z,134,282,0|qqc6a0,124,246,1|qzsu5z,124,246,1|qzsu60,134,282,0|r943lz,134,282,0|r943m0,124,246,1|rikrhz,124,246,1|rikri0,134,282,0|rrw0xz,134,282,0|rrw0y0,124,246,1|s1cotz,124,246,1|s1cou0,134,282,0|sany9z,134,282,0|sanya0,124,246,1|sk4m5z,124,246,1|sk4m60,134,282,0|sthq9z,134,282,0|sthqa0,124,246,1|t2ye5z,124,246,1|t2ye60,134,282,0|tc9nlz,134,282,0|tc9nm0,124,246,1|tlqbhz,124,246,1|tlqbi0,134,282,0|tv1kxz,134,282,0|tv1ky0,124,246,1|u4i8tz,124,246,1|u4i8u0,134,282,0|udti9z,134,282,0|udtia0,124,246,1|una65z,124,246,1|una660,134,282,0|uwlflz,134,282,0|uwlfm0,124,246,1|v623hz,124,246,1|v623i0,134,282,0|vff7lz,134,282,0|vff7m0,124,246,1|vovvhz,124,246,1|vovvi0,134,282,0|vy74xz,134,282,0|vy74y0,124,246,1|w7nstz,124,246,1|w7nsu0,134,282,0|wgz29z,134,282,0|wgz2a0,124,246,1|wqfq5z,124,246,1|wqfq60,134,282,0|wzqzlz,134,282,0|wzqzm0,124,246,1|x97nhz,124,246,1|x97ni0,134,282,0|xikrlz,134,282,0|xikrm0,124,246,1|xs1fhz,124,246,1|xs1fi0,134,282,0|y1coxz,134,282,0|y1coy0,124,246,1|yatctz,124,246,1|yatcu0,134,282,0|yk4m9z,134,282,0|yk4ma0,124,246,1|ytla5z,124,246,1|ytla60,134,282,0|z2wjlz,134,282,0|z2wjm0,124,246,1|zcd7hz,124,246,1|zcd7i0,134,282,0|zlqblz,134,282,0|zlqbm0,124,246,1|zv6zhz,124,246,1|zv6zi0,134,282,0|104i8xz,134,282,0|104i8y0,124,246,1|10dywtz,124,246,1|10dywu0,134,282,0|10na69z,134,282,0|10na6a0,124,246,1|10wqu5z,124,246,1|10wqu60,134,282,0|11623lz,134,282,0|11623m0,124,246,1|11firhz,124,246,1|11firi0,134,282,0|11ovvlz,134,282,0|11ovvm0,124,246,1|11ycjhz,124,246,1|11ycji0,134,282,0|127nsxz,134,282,0|127nsy0,124,246,1|12h4gtz,124,246,1|12h4gu0,134,282,0|12qfq9z,134,282,0|12qfqa0,124,246,1|12zwe5z,124,246,1|12zwe60,134,282,0|1397nlz,134,282,0|1397nm0,124,246,1|13iobhz,124,246,1|13iobi0,134,282,0|13s1flz,134,282,0|13s1fm0,124,246,1|141i3hz,124,246,1|141i3i0,134,282,0|14atcxz,134,282,0|14atcy0,124,246,1|14ka0tz,124,246,1|14ka0u0,134,282,0|14tla9z,134,282,0|14tlaa0,124,246,1|1531y5z,124,246,1|1531y60,134,282,0|15cd7lz,134,282,0|15cd7m0,124,246,1|15ltvhz,124,246,1|15ltvi0,134,282,0|15v6zlz,134,282,0|15v6zm0,124,246,1|164nnhz,124,246,1|164nni0,134,282,0|16dywxz,134,282,0|16dywy0,124,246,1|16nfktz,124,246,1|16nfku0,134,282,0|16wqu9z,134,282,0|16wqua0,124,246,1|1767i5z,124,246,1|1767i60,134,282,0|17firlz,134,282,0|17firm0,124,246,1|17ozfhz,124,246,1|17ozfi0,134,282,0|17ycjlz,134,282,0|17ycjm0,124,246,1|187t7hz,124,246,1|187t7i0,134,282,0|18h4gxz,134,282,0|18h4gy0,124,246,1|18ql4tz,124,246,1|18ql4u0,134,282,0|18zwe9z,134,282,0|18zwea0,124,246,1|199d25z,124,246,1|199d260,134,282,0|19ioblz,134,282,0|19iobm0,124,246,1|19s4zhz,124,246,1|19s4zi0,134,282,0|1a1i3lz,134,282,0|1a1i3m0,124,246,1|1aayrhz,124,246,1|1aayri0,134,282,0|1aka0xz,134,282,0|1aka0y0,124,246,1|1atqotz,124,246,1|1atqou0,134,282,0|1b31y9z,134,282,0|1b31ya0,124,246,1|1bcim5z,124,246,1|1bcim60,134,282,0|1bltvlz,134,282,0|1bltvm0,124,246,1|1bvajhz,124,246,1|1bvaji0,134,282,0|1c4lsxz,134,282,0|1c4lsy0,124,246,1|1ce2gtz,124,246,1|1ce2gu0,134,282,0|1cnfkxz,134,282,0|1cnfky0,124,246,1|1cww8tz,124,246,1|1cww8u0,134,282,0|1d67i9z,134,282,0|1d67ia0,124,246,1|1dfo65z,124,246,1|1dfo660,134,282,0|1dozflz,134,282,0|1dozfm0,124,246,1|1dyg3hz,124,246,1|1dyg3i0,134,282,0|1e7rcxz,134,282,0|1e7rcy0,124,246,1|1eh80tz,124,246,1|1eh80u0,134,282,0|1eql4xz,134,282,0|1eql4y0,124,246,1|1f01stz,124,246,1|1f01su0,134,282,0|1f9d29z,134,282,0|1f9d2a0,124,246,1|1fitq5z,124,246,1|1fitq60,134,282,0|1fs4zlz,134,282,0|1fs4zm0,124,246,1|1g1lnhz,124,246,1|1g1lni0,134,282,0|1gawwxz,134,282,0|1gawwy0,124,246,1|1gkdktz,124,246,1|1gkdku0,134,282,0|1gtqoxz,134,282,0|1gtqoy0,124,246,1|1h37ctz,124,246,1|1h37cu0,134,282,0|1hcim9z,134,282,0|1hcima0,124,246,1|1hlza5z,124,246,1|1hlza60,134,282,0|1hvajlz,134,282,0|1hvajm0,124,246,1|1i4r7hz,124,246,1|1i4r7i0,134,282,0|1ie2gxz,134,282,0|1ie2gy0,124,246,1|1inj4tz,124,246,1|1inj4u0,134,282,0|1iww8xz,134,282,0|1iww8y0,124,246,1|1j6cwtz,124,246,1|1j6cwu0,134,282,0|1jfo69z,134,282,0|1jfo6a0,124,246,1|1jp4u5z,124,246,1|1jp4u60,134,282,0|1jyg3lz,134,282,0|1jyg3m0,124,246,1|1k7wrhz,124,246,1|1k7wri0,134,282,0|1kh80xz,134,282,0|1kh80y0,124,246,1|1kqootz,124,246,1|1kqoou0,134,282,0|1l01sxz,134,282,0|1l01sy0,124,246,1|1l9igtz,124,246,1|1l9igu0,134,282,0|1litq9z,134,282,0|1litqa0,124,246,1|1lsae5z,124,246,1|1lsae60,134,282,0|1m1lnlz,134,282,0|1m1lnm0,124,246,1|1mb2bhz,124,246,1|1mb2bi0,134,282,0|1mkdkxz,134,282,0|1mkdky0,124,246,1|1mtu8tz,124,246,1|1mtu8u0,134,282,0|1n37cxz,134,282,0|1n37cy0,124,246,1|1nco0tz,124,246,1|1nco0u0,134,282,0|1nlza9z,134,282,0|1nlzaa0,124,246,1|1nvfy5z,124,246,1|1nvfy60,134,282,0|1o4r7lz,134,282,0|1o4r7m0,124,246,1|1oe7vhz,124,246,1|1oe7vi0,134,282,0|1onj4xz,134,282,0|1onj4y0,124,246,1|1owzstz,124,246,1|1owzsu0,134,282,0|1p6cwxz,134,282,0|1p6cwy0,124,246,1|1pftktz,124,246,1|1pftku0,134,282,0|1pp4u9z,134,282,0|1pp4ua0,124,246,1|1pyli5z,124,246,1|1pyli60,134,282,0|1q7wrlz,134,282,0|1q7wrm0,124,246,1|1qhdfhz,124,246,1|1qhdfi0,134,282,0|1qqooxz,134,282,0|1qqooy0,124,246,1|1r05ctz,124,246,1|1r05cu0,134,282,0|1r9gm9z,134,282,0|1r9gma0,124,246,1|1rixa5z,124,246,1|1rixa60,134,282,0|1rsae9z,134,282,0|1rsaea0,124,246,1|1s1r25z,124,246,1|1s1r260,134,282,0|1sb2blz,134,282,0|1sb2bm0,124,246,1|1skizhz,124,246,1|1skizi0,134,282,0|1stu8xz,134,282,0|1stu8y0,124,246,1|1t3awtz,124,246,1|1t3awu0,134,282,0|1tcm69z,134,282,0|1tcm6a0,124,246,1|1tm2u5z,124,246,1|1tm2u60,134,282,0|1tvfy9z,134,282,0|1tvfya0,124,246,1|1u4wm5z,124,246,1|1u4wm60,134,282,0|1ue7vlz,134,282,0|1ue7vm0,124,246,1|1unojhz,124,246,1|1unoji0,134,282,0|1uwzsxz,134,282,0|1uwzsy0,124,246,1|1v6ggtz,124,246,1|1v6ggu0,134,282,0|1vfrq9z,134,282,0|1vfrqa0,124,246,1|1vp8e5z,124,246,1|1vp8e60,134,282,0|NaN,134,282,0\",\"Asia/Thimphu|,0,283,0|-bojclp,0,283,0|-bojclo,108,222,0|99fa1z,108,222,0|99fa20,96,190,0|NaN,96,190,0\",\"Asia/Tokyo|,0,284,0|-16snno1,0,284,0|-16snno0,116,218,0|-bb4901,116,218,0|-bb4900,135,189,1|-b49yc1,135,189,1|-b49yc0,116,218,0|-atu101,116,218,0|-atu100,135,189,1|-aljvo1,135,189,1|-aljvo0,116,218,0|-a9b501,116,218,0|-a9b500,135,189,1|-a2tt01,135,189,1|-a2tt00,116,218,0|-9ql2c1,116,218,0|-9ql2c0,135,189,1|-9k3qc1,135,189,1|-9k3qc0,116,218,0|NaN,116,218,0\",\"Asia/Tomsk|,0,285,0|-q3zbqg,0,285,0|-q3zbqf,96,190,0|-kmrco1,96,190,0|-kmrco0,90,185,0|5vav7z,90,185,0|5vav80,88,183,1|64pofz,88,183,1|64pog0,90,185,0|6e2sjz,90,185,0|6e2sk0,88,183,1|6nhlrz,88,183,1|6nhls0,90,185,0|6wupvz,90,185,0|6wupw0,88,183,1|769j3z,88,183,1|769j40,90,185,0|7fohvz,90,185,0|7fohw0,88,183,1|7p1orz,88,183,1|7p1os0,90,185,0|7yeq3z,90,185,0|7yeq40,88,183,1|87rrfz,88,183,1|87rrg0,90,185,0|8h4srz,90,185,0|8h4ss0,88,183,1|8qhu3z,88,183,1|8qhu40,90,185,0|8zuvfz,90,185,0|8zuvg0,88,183,1|997wrz,88,183,1|997ws0,90,185,0|9iky3z,90,185,0|9iky40,88,183,1|9rxzfz,88,183,1|9rxzg0,90,185,0|a1b0rz,90,185,0|a1b0s0,88,183,1|aao23z,88,183,1|aao240,90,185,0|ak13fz,90,185,0|ak13g0,88,183,1|atr3fz,88,183,1|atr3g0,90,185,0|b344rz,90,185,0|b344s0,90,185,1|bch8vz,90,185,1|bch8w0,96,190,0|bi8njz,96,190,0|bi8nk0,90,185,0|blu7fz,90,185,0|blu7g0,88,183,1|bv78rz,88,183,1|bv78s0,90,185,0|c4ka3z,90,185,0|c4ka40,88,183,1|cdxbfz,88,183,1|cdxbg0,90,185,0|cnacrz,90,185,0|cnacs0,88,183,1|cwne3z,88,183,1|cwne40,90,185,0|d60ffz,90,185,0|d60fg0,88,183,1|dfdgrz,88,183,1|dfdgs0,90,185,0|dp3grz,90,185,0|dp3gs0,88,183,1|dzwcrz,88,183,1|dzwcs0,90,185,0|e7tjfz,90,185,0|e7tjg0,88,183,1|eimffz,88,183,1|eimfg0,90,185,0|eqjm3z,90,185,0|eqjm40,88,183,1|f1ci3z,88,183,1|f1ci40,90,185,0|f99orz,90,185,0|f99os0,88,183,1|fkfjfz,88,183,1|fkfjg0,90,185,0|frzrfz,90,185,0|frzrg0,88,183,1|g35m3z,88,183,1|g35m40,90,185,0|gapu3z,90,185,0|gapu40,88,183,1|glvorz,88,183,1|glvos0,90,185,0|gtsvfz,90,185,0|gtsvg0,88,183,1|gvea3z,88,183,1|gvea40,90,185,1|h4lu7z,90,185,1|h4lu80,96,190,0|hcj0vz,96,190,0|hcj0w0,90,185,1|hnbwvz,90,185,1|hnbww0,96,190,0|hv93jz,96,190,0|hv93k0,90,185,1|i6ey7z,90,185,1|i6ey80,96,190,0|idz67z,96,190,0|idz680,90,185,1|ip50vz,90,185,1|ip50w0,96,190,0|iwp8vz,96,190,0|iwp8w0,90,185,1|j7v3jz,90,185,1|j7v3k0,96,190,0|jffbjz,96,190,0|jffbk0,90,185,1|jql67z,90,185,1|jql680,96,190,0|jyicvz,96,190,0|jyicw0,90,185,1|k9b8vz,90,185,1|k9b8w0,96,190,0|kh8fjz,96,190,0|kh8fk0,90,185,1|ks1bjz,90,185,1|ks1bk0,96,190,0|kzyi7z,96,190,0|kzyi80,90,185,1|lb4cvz,90,185,1|lb4cw0,96,190,0|liokvz,96,190,0|liokw0,90,185,0|ne0krz,90,185,0|ne0ks0,96,190,0|o7wkvz,96,190,0|o7wkw0,90,185,0|NaN,90,185,0\",\"Asia/Ulaanbaatar|,0,286,0|-xmcrsl,0,286,0|-xmcrsk,90,185,0|46akjz,90,185,0|46akk0,88,183,0|6wun3z,88,183,0|6wun40,107,218,1|769gbz,107,218,1|769gc0,88,183,0|7fof3z,88,183,0|7fof40,107,218,1|7p1dnz,107,218,1|7p1do0,88,183,0|7yehrz,88,183,0|7yehs0,107,218,1|87rgbz,107,218,1|87rgc0,88,183,0|8h4kfz,88,183,0|8h4kg0,107,218,1|8qhizz,107,218,1|8qhj00,88,183,0|8zun3z,88,183,0|8zun40,107,218,1|997lnz,107,218,1|997lo0,88,183,0|9ikprz,88,183,0|9ikps0,107,218,1|9rxobz,107,218,1|9rxoc0,88,183,0|a1asfz,88,183,0|a1asg0,107,218,1|aanqzz,107,218,1|aanr00,88,183,0|ak0v3z,88,183,0|ak0v40,107,218,1|atqsbz,107,218,1|atqsc0,88,183,0|b33wfz,88,183,0|b33wg0,107,218,1|bcguzz,107,218,1|bcgv00,88,183,0|bltz3z,88,183,0|bltz40,107,218,1|bv6xnz,107,218,1|bv6xo0,88,183,0|c4k1rz,88,183,0|c4k1s0,107,218,1|cdx0bz,107,218,1|cdx0c0,88,183,0|cna4fz,88,183,0|cna4g0,107,218,1|cwn2zz,107,218,1|cwn300,88,183,0|d6073z,88,183,0|d60740,107,218,1|dfd5nz,107,218,1|dfd5o0,88,183,0|dp38fz,88,183,0|dp38g0,107,218,1|dyg6zz,107,218,1|dyg700,88,183,0|e7tb3z,88,183,0|e7tb40,107,218,1|eh69nz,107,218,1|eh69o0,88,183,0|eqjdrz,88,183,0|eqjds0,107,218,1|ezwcbz,107,218,1|ezwcc0,88,183,0|gcgpzz,88,183,0|gcgq00,107,218,1|gkdtvz,107,218,1|gkdtw0,88,183,0|gtqxzz,88,183,0|gtqy00,107,218,1|h33wjz,107,218,1|h33wk0,88,183,0|hch0nz,88,183,0|hch0o0,107,218,1|hltz7z,107,218,1|hltz80,88,183,0|hv73bz,88,183,0|hv73c0,107,218,1|i4k1vz,107,218,1|i4k1w0,88,183,0|idx5zz,88,183,0|idx600,107,218,1|ina4jz,107,218,1|ina4k0,88,183,0|iwn8nz,88,183,0|iwn8o0,107,218,1|j6d5vz,107,218,1|j6d5w0,88,183,0|nlvtzz,88,183,0|nlvu00,107,218,1|nv8mzz,107,218,1|nv8n00,88,183,0|o4lwnz,88,183,0|o4lwo0,107,218,1|odypnz,107,218,1|odypo0,88,183,0|NaN,88,183,0\",\"Asia/Urumqi|,0,287,0|-lx5pjx,0,287,0|-lx5pjw,96,190,0|NaN,96,190,0\",\"Asia/Ust-Nera|,0,288,0|-q4cl6v,0,288,0|-q4cl6u,88,183,0|-kmri81,88,183,0|-kmri80,107,218,0|5vapnz,107,218,0|5vapo0,102,194,1|64pdbz,102,194,1|64pdc0,89,184,0|6e2hfz,89,184,0|6e2hg0,102,194,1|6nhanz,102,194,1|6nhao0,89,184,0|6wuerz,89,184,0|6wues0,102,194,1|7697zz,102,194,1|769800,89,184,0|7fo6rz,89,184,0|7fo6s0,102,194,1|7p1dnz,102,194,1|7p1do0,89,184,0|7yeezz,89,184,0|7yef00,102,194,1|87rgbz,102,194,1|87rgc0,89,184,0|8h4hnz,89,184,0|8h4ho0,102,194,1|8qhizz,102,194,1|8qhj00,89,184,0|8zukbz,89,184,0|8zukc0,102,194,1|997lnz,102,194,1|997lo0,89,184,0|9ikmzz,89,184,0|9ikn00,102,194,1|9rxobz,102,194,1|9rxoc0,89,184,0|a1apnz,89,184,0|a1apo0,102,194,1|aanqzz,102,194,1|aanr00,89,184,0|ak0sbz,89,184,0|ak0sc0,102,194,1|atqsbz,102,194,1|atqsc0,89,184,0|b33tnz,89,184,0|b33to0,89,184,1|bcgxrz,89,184,1|bcgxs0,93,189,0|bi8cfz,93,189,0|bi8cg0,89,184,0|bltwbz,89,184,0|bltwc0,102,194,1|bv6xnz,102,194,1|bv6xo0,89,184,0|c4jyzz,89,184,0|c4jz00,102,194,1|cdx0bz,102,194,1|cdx0c0,89,184,0|cna1nz,89,184,0|cna1o0,102,194,1|cwn2zz,102,194,1|cwn300,89,184,0|d604bz,89,184,0|d604c0,102,194,1|dfd5nz,102,194,1|dfd5o0,89,184,0|dp35nz,89,184,0|dp35o0,102,194,1|dzw1nz,102,194,1|dzw1o0,89,184,0|e7t8bz,89,184,0|e7t8c0,102,194,1|eim4bz,102,194,1|eim4c0,89,184,0|eqjazz,89,184,0|eqjb00,102,194,1|f1c6zz,102,194,1|f1c700,89,184,0|f99dnz,89,184,0|f99do0,102,194,1|fkf8bz,102,194,1|fkf8c0,89,184,0|frzgbz,89,184,0|frzgc0,102,194,1|g35azz,102,194,1|g35b00,89,184,0|gapizz,89,184,0|gapj00,102,194,1|glvdnz,102,194,1|glvdo0,89,184,0|gtskbz,89,184,0|gtskc0,102,194,1|h4lgbz,102,194,1|h4lgc0,89,184,0|hcimzz,89,184,0|hcin00,102,194,1|hnbizz,102,194,1|hnbj00,89,184,0|hv8pnz,89,184,0|hv8po0,102,194,1|i6ekbz,102,194,1|i6ekc0,89,184,0|idysbz,89,184,0|idysc0,102,194,1|ip4mzz,102,194,1|ip4n00,89,184,0|iwouzz,89,184,0|iwov00,102,194,1|j7upnz,102,194,1|j7upo0,89,184,0|jfexnz,89,184,0|jfexo0,102,194,1|jqksbz,102,194,1|jqksc0,89,184,0|jyhyzz,89,184,0|jyhz00,102,194,1|k9auzz,102,194,1|k9av00,89,184,0|kh81nz,89,184,0|kh81o0,102,194,1|ks0xnz,102,194,1|ks0xo0,89,184,0|kzy4bz,89,184,0|kzy4c0,102,194,1|lb3yzz,102,194,1|lb3z00,89,184,0|lio6zz,89,184,0|lio700,102,194,0|lrerzz,102,194,0|lres00,89,184,0|ne09nz,89,184,0|ne09o0,93,189,0|NaN,93,189,0\",\"Asia/Vientiane|,0,211,0|-1ayyla5,0,211,0|-1ayyla4,54,211,0|-pysda5,54,211,0|-pysda4,90,185,0|NaN,90,185,0\",\"Asia/Vladivostok|,0,289,0|-oligf8,0,289,0|-oligf7,107,218,0|-kmrl01,107,218,0|-kmrl00,93,189,0|5vamvz,93,189,0|5vamw0,89,184,1|64pg3z,89,184,1|64pg40,93,189,0|6e2k7z,93,189,0|6e2k80,89,184,1|6nhdfz,89,184,1|6nhdg0,93,189,0|6wuhjz,93,189,0|6wuhk0,89,184,1|769arz,89,184,1|769as0,93,189,0|7fo9jz,93,189,0|7fo9k0,89,184,1|7p1gfz,89,184,1|7p1gg0,93,189,0|7yehrz,93,189,0|7yehs0,89,184,1|87rj3z,89,184,1|87rj40,93,189,0|8h4kfz,93,189,0|8h4kg0,89,184,1|8qhlrz,89,184,1|8qhls0,93,189,0|8zun3z,93,189,0|8zun40,89,184,1|997ofz,89,184,1|997og0,93,189,0|9ikprz,93,189,0|9ikps0,89,184,1|9rxr3z,89,184,1|9rxr40,93,189,0|a1asfz,93,189,0|a1asg0,89,184,1|aantrz,89,184,1|aants0,93,189,0|ak0v3z,93,189,0|ak0v40,89,184,1|atqv3z,89,184,1|atqv40,93,189,0|b33wfz,93,189,0|b33wg0,93,189,1|bch0jz,93,189,1|bch0k0,107,218,0|bi8f7z,107,218,0|bi8f80,93,189,0|bltz3z,93,189,0|bltz40,89,184,1|bv70fz,89,184,1|bv70g0,93,189,0|c4k1rz,93,189,0|c4k1s0,89,184,1|cdx33z,89,184,1|cdx340,93,189,0|cna4fz,93,189,0|cna4g0,89,184,1|cwn5rz,89,184,1|cwn5s0,93,189,0|d6073z,93,189,0|d60740,89,184,1|dfd8fz,89,184,1|dfd8g0,93,189,0|dp38fz,93,189,0|dp38g0,89,184,1|dzw4fz,89,184,1|dzw4g0,93,189,0|e7tb3z,93,189,0|e7tb40,89,184,1|eim73z,89,184,1|eim740,93,189,0|eqjdrz,93,189,0|eqjds0,89,184,1|f1c9rz,89,184,1|f1c9s0,93,189,0|f99gfz,93,189,0|f99gg0,89,184,1|fkfb3z,89,184,1|fkfb40,93,189,0|frzj3z,93,189,0|frzj40,89,184,1|g35drz,89,184,1|g35ds0,93,189,0|gaplrz,93,189,0|gapls0,89,184,1|glvgfz,89,184,1|glvgg0,93,189,0|gtsn3z,93,189,0|gtsn40,89,184,1|h4lj3z,89,184,1|h4lj40,93,189,0|hciprz,93,189,0|hcips0,89,184,1|hnblrz,89,184,1|hnbls0,93,189,0|hv8sfz,93,189,0|hv8sg0,89,184,1|i6en3z,89,184,1|i6en40,93,189,0|idyv3z,93,189,0|idyv40,89,184,1|ip4prz,89,184,1|ip4ps0,93,189,0|iwoxrz,93,189,0|iwoxs0,89,184,1|j7usfz,89,184,1|j7usg0,93,189,0|jff0fz,93,189,0|jff0g0,89,184,1|jqkv3z,89,184,1|jqkv40,93,189,0|jyi1rz,93,189,0|jyi1s0,89,184,1|k9axrz,89,184,1|k9axs0,93,189,0|kh84fz,93,189,0|kh84g0,89,184,1|ks10fz,89,184,1|ks10g0,93,189,0|kzy73z,93,189,0|kzy740,89,184,1|lb41rz,89,184,1|lb41s0,93,189,0|lio9rz,93,189,0|lio9s0,89,184,0|ne09nz,89,184,0|ne09o0,93,189,0|NaN,93,189,0\",\"Asia/Yakutsk|,0,290,0|-q4cioz,0,290,0|-q4cioy,88,183,0|-kmri81,88,183,0|-kmri80,107,218,0|5vapnz,107,218,0|5vapo0,93,189,1|64pivz,93,189,1|64piw0,107,218,0|6e2mzz,107,218,0|6e2n00,93,189,1|6nhg7z,93,189,1|6nhg80,107,218,0|6wukbz,107,218,0|6wukc0,93,189,1|769djz,93,189,1|769dk0,107,218,0|7focbz,107,218,0|7focc0,93,189,1|7p1j7z,93,189,1|7p1j80,107,218,0|7yekjz,107,218,0|7yekk0,93,189,1|87rlvz,93,189,1|87rlw0,107,218,0|8h4n7z,107,218,0|8h4n80,93,189,1|8qhojz,93,189,1|8qhok0,107,218,0|8zupvz,107,218,0|8zupw0,93,189,1|997r7z,93,189,1|997r80,107,218,0|9iksjz,107,218,0|9iksk0,93,189,1|9rxtvz,93,189,1|9rxtw0,107,218,0|a1av7z,107,218,0|a1av80,93,189,1|aanwjz,93,189,1|aanwk0,107,218,0|ak0xvz,107,218,0|ak0xw0,93,189,1|atqxvz,93,189,1|atqxw0,107,218,0|b33z7z,107,218,0|b33z80,107,218,1|bch3bz,107,218,1|bch3c0,88,183,0|bi8hzz,88,183,0|bi8i00,107,218,0|blu1vz,107,218,0|blu1w0,93,189,1|bv737z,93,189,1|bv7380,107,218,0|c4k4jz,107,218,0|c4k4k0,93,189,1|cdx5vz,93,189,1|cdx5w0,107,218,0|cna77z,107,218,0|cna780,93,189,1|cwn8jz,93,189,1|cwn8k0,107,218,0|d609vz,107,218,0|d609w0,93,189,1|dfdb7z,93,189,1|dfdb80,107,218,0|dp3b7z,107,218,0|dp3b80,93,189,1|dzw77z,93,189,1|dzw780,107,218,0|e7tdvz,107,218,0|e7tdw0,93,189,1|eim9vz,93,189,1|eim9w0,107,218,0|eqjgjz,107,218,0|eqjgk0,93,189,1|f1ccjz,93,189,1|f1cck0,107,218,0|f99j7z,107,218,0|f99j80,93,189,1|fkfdvz,93,189,1|fkfdw0,107,218,0|frzlvz,107,218,0|frzlw0,93,189,1|g35gjz,93,189,1|g35gk0,107,218,0|gapojz,107,218,0|gapok0,93,189,1|glvj7z,93,189,1|glvj80,107,218,0|gtspvz,107,218,0|gtspw0,93,189,1|h4llvz,93,189,1|h4llw0,107,218,0|hcisjz,107,218,0|hcisk0,93,189,1|hnbojz,93,189,1|hnbok0,107,218,0|hv8v7z,107,218,0|hv8v80,93,189,1|i6epvz,93,189,1|i6epw0,107,218,0|idyxvz,107,218,0|idyxw0,93,189,1|ip4sjz,93,189,1|ip4sk0,107,218,0|iwp0jz,107,218,0|iwp0k0,93,189,1|j7uv7z,93,189,1|j7uv80,107,218,0|jff37z,107,218,0|jff380,93,189,1|jqkxvz,93,189,1|jqkxw0,107,218,0|jyi4jz,107,218,0|jyi4k0,93,189,1|k9b0jz,93,189,1|k9b0k0,107,218,0|kh877z,107,218,0|kh8780,93,189,1|ks137z,93,189,1|ks1380,107,218,0|kzy9vz,107,218,0|kzy9w0,93,189,1|lb44jz,93,189,1|lb44k0,107,218,0|liocjz,107,218,0|liock0,93,189,0|ne0cfz,93,189,0|ne0cg0,107,218,0|NaN,107,218,0\",\"Asia/Yangon|,0,291,0|-1ayykhc,0,291,0|-1ayykhb,136,291,0|-q3gv5c,136,291,0|-q3gv5b,109,223,0|-efx621,109,223,0|-efx620,107,218,0|-cvg101,107,218,0|-cvg100,109,223,0|NaN,109,223,0\",\"Asia/Yekaterinburg|,0,292,0|-rx5hwa,0,292,0|-rx5hw9,5,293,0|-qc75z6,5,293,0|-qc75z5,105,203,0|-kmr741,105,203,0|-kmr740,91,186,0|5vb0rz,91,186,0|5vb0s0,96,190,1|64ptzz,96,190,1|64pu00,91,186,0|6e2y3z,91,186,0|6e2y40,96,190,1|6nhrbz,96,190,1|6nhrc0,91,186,0|6wuvfz,91,186,0|6wuvg0,96,190,1|769onz,96,190,1|769oo0,91,186,0|7fonfz,91,186,0|7fong0,96,190,1|7p1ubz,96,190,1|7p1uc0,91,186,0|7yevnz,91,186,0|7yevo0,96,190,1|87rwzz,96,190,1|87rx00,91,186,0|8h4ybz,91,186,0|8h4yc0,96,190,1|8qhznz,96,190,1|8qhzo0,91,186,0|8zv0zz,91,186,0|8zv100,96,190,1|9982bz,96,190,1|9982c0,91,186,0|9il3nz,91,186,0|9il3o0,96,190,1|9ry4zz,96,190,1|9ry500,91,186,0|a1b6bz,91,186,0|a1b6c0,96,190,1|aao7nz,96,190,1|aao7o0,91,186,0|ak18zz,91,186,0|ak1900,96,190,1|atr8zz,96,190,1|atr900,91,186,0|b34abz,91,186,0|b34ac0,91,186,1|bchefz,91,186,1|bcheg0,105,203,0|bi8t3z,105,203,0|bi8t40,91,186,0|bluczz,91,186,0|blud00,96,190,1|bv7ebz,96,190,1|bv7ec0,91,186,0|c4kfnz,91,186,0|c4kfo0,96,190,1|cdxgzz,96,190,1|cdxh00,91,186,0|cnaibz,91,186,0|cnaic0,96,190,1|cwnjnz,96,190,1|cwnjo0,91,186,0|d60kzz,91,186,0|d60l00,96,190,1|dfdmbz,96,190,1|dfdmc0,91,186,0|dp3mbz,91,186,0|dp3mc0,96,190,1|dzwibz,96,190,1|dzwic0,91,186,0|e7tozz,91,186,0|e7tp00,96,190,1|eimkzz,96,190,1|eiml00,91,186,0|eqjrnz,91,186,0|eqjro0,96,190,1|f1cnnz,96,190,1|f1cno0,91,186,0|f99ubz,91,186,0|f99uc0,96,190,1|fkfozz,96,190,1|fkfp00,91,186,0|frzwzz,91,186,0|frzx00,96,190,1|g35rnz,96,190,1|g35ro0,91,186,0|gapznz,91,186,0|gapzo0,96,190,1|glvubz,96,190,1|glvuc0,91,186,0|gtt0zz,91,186,0|gtt100,96,190,1|h4lwzz,96,190,1|h4lx00,91,186,0|hcj3nz,91,186,0|hcj3o0,96,190,1|hnbznz,96,190,1|hnbzo0,91,186,0|hv96bz,91,186,0|hv96c0,96,190,1|i6f0zz,96,190,1|i6f100,91,186,0|idz8zz,91,186,0|idz900,96,190,1|ip53nz,96,190,1|ip53o0,91,186,0|iwpbnz,91,186,0|iwpbo0,96,190,1|j7v6bz,96,190,1|j7v6c0,91,186,0|jffebz,91,186,0|jffec0,96,190,1|jql8zz,96,190,1|jql900,91,186,0|jyifnz,91,186,0|jyifo0,96,190,1|k9bbnz,96,190,1|k9bbo0,91,186,0|kh8ibz,91,186,0|kh8ic0,96,190,1|ks1ebz,96,190,1|ks1ec0,91,186,0|kzykzz,91,186,0|kzyl00,96,190,1|lb4fnz,96,190,1|lb4fo0,91,186,0|lionnz,91,186,0|liono0,96,190,0|ne0njz,96,190,0|ne0nk0,91,186,0|NaN,91,186,0\",\"Asia/Yerevan|,0,294,0|-nu148p,0,294,0|-nu148o,100,4,0|-6p7kc1,100,4,0|-6p7kc0,105,203,0|5vb3jz,105,203,0|5vb3k0,91,186,1|64pwrz,91,186,1|64pws0,105,203,0|6e30vz,105,203,0|6e30w0,91,186,1|6nhu3z,91,186,1|6nhu40,105,203,0|6wuy7z,105,203,0|6wuy80,91,186,1|769rfz,91,186,1|769rg0,105,203,0|7foq7z,105,203,0|7foq80,91,186,1|7p1x3z,91,186,1|7p1x40,105,203,0|7yeyfz,105,203,0|7yeyg0,91,186,1|87rzrz,91,186,1|87rzs0,105,203,0|8h513z,105,203,0|8h5140,91,186,1|8qi2fz,91,186,1|8qi2g0,105,203,0|8zv3rz,105,203,0|8zv3s0,91,186,1|99853z,91,186,1|998540,105,203,0|9il6fz,105,203,0|9il6g0,91,186,1|9ry7rz,91,186,1|9ry7s0,105,203,0|a1b93z,105,203,0|a1b940,91,186,1|aaoafz,91,186,1|aaoag0,105,203,0|ak1brz,105,203,0|ak1bs0,91,186,1|atrbrz,91,186,1|atrbs0,105,203,0|b34d3z,105,203,0|b34d40,105,203,1|bchh7z,105,203,1|bchh80,100,4,0|bluijz,100,4,0|bluik0,105,203,1|bv7jvz,105,203,1|bv7jw0,100,4,0|c4kl7z,100,4,0|c4kl80,105,203,1|cdxmjz,105,203,1|cdxmk0,100,4,0|cnanvz,100,4,0|cnanw0,105,203,1|cwnp7z,105,203,1|cwnp80,100,4,0|d60qjz,100,4,0|d60qk0,105,203,1|dfdrvz,105,203,1|dfdrw0,105,203,0|e7trrz,105,203,0|e7trs0,91,186,1|eimnrz,91,186,1|eimns0,105,203,0|eqjufz,105,203,0|eqjug0,91,186,1|f1cqfz,91,186,1|f1cqg0,105,203,0|f99x3z,105,203,0|f99x40,91,186,1|fkfrrz,91,186,1|fkfrs0,105,203,0|frzzrz,105,203,0|frzzs0,91,186,1|g35ufz,91,186,1|g35ug0,105,203,0|gaq2fz,105,203,0|gaq2g0,91,186,1|glvx3z,91,186,1|glvx40,105,203,0|gtt3rz,105,203,0|gtt3s0,91,186,1|h4lzrz,91,186,1|h4lzs0,105,203,0|hcj6fz,105,203,0|hcj6g0,91,186,1|hnc2fz,91,186,1|hnc2g0,105,203,0|hv993z,105,203,0|hv9940,91,186,1|i6f3rz,91,186,1|i6f3s0,105,203,0|idzbrz,105,203,0|idzbs0,91,186,1|ip56fz,91,186,1|ip56g0,105,203,0|iwpefz,105,203,0|iwpeg0,91,186,1|j7v93z,91,186,1|j7v940,105,203,0|jffh3z,105,203,0|jffh40,91,186,1|jqlbrz,91,186,1|jqlbs0,105,203,0|jyiifz,105,203,0|jyiig0,91,186,1|k9befz,91,186,1|k9beg0,105,203,0|kh8l3z,105,203,0|kh8l40,91,186,1|ks1h3z,91,186,1|ks1h40,105,203,0|kzynrz,105,203,0|kzyns0,91,186,1|lb4ifz,91,186,1|lb4ig0,105,203,0|lioqfz,105,203,0|lioqg0,91,186,1|ltul3z,91,186,1|ltul40,105,203,0|NaN,105,203,0\",\"Atlantic/Azores|,0,295,0|-18vsdwx,0,295,0|-18vsdww,77,296,0|-u9rbs1,77,296,0|-u9rbs0,39,43,0|-rxwvw1,39,43,0|-rxwvw0,12,13,1|-rqwyg1,12,13,1|-rqwyg0,39,43,0|-rkqt81,39,43,0|-rkqt80,12,13,1|-r90l81,12,13,1|-r90l80,39,43,0|-r1x181,39,43,0|-r1x180,12,13,1|-qq8nw1,12,13,1|-qq8nw0,39,43,0|-qj6yk1,39,43,0|-qj6yk0,12,13,1|-q7gqk1,12,13,1|-q7gqk0,39,43,0|-q0d6k1,39,43,0|-q0d6k0,12,13,1|-pomyk1,12,13,1|-pomyk0,39,43,0|-phl981,39,43,0|-phl980,12,13,1|-p5v181,12,13,1|-p5v180,39,43,0|-nusl81,39,43,0|-nusl80,12,13,1|-nlhek1,12,13,1|-nlhek0,39,43,0|-mt6vw1,39,43,0|-mt6vw0,12,13,1|-mkjrw1,12,13,1|-mkjrw0,39,43,0|-matrw1,39,43,0|-matrw0,12,13,1|-m1tp81,12,13,1|-m1tp80,39,43,0|-lrqqk1,39,43,0|-lrqqk0,12,13,1|-liqnw1,12,13,1|-liqnw0,39,43,0|-l8np81,39,43,0|-l8np80,12,13,1|-l00l81,12,13,1|-l00l80,39,43,0|-k77jw1,39,43,0|-k77jw0,12,13,1|-jykfw1,12,13,1|-jykfw0,39,43,0|-jp7ek1,39,43,0|-jp7ek0,12,13,1|-jfud81,12,13,1|-jfud80,39,43,0|-ineak1,39,43,0|-ineak0,12,13,1|-ie1981,12,13,1|-ie1980,39,43,0|-i516k1,39,43,0|-i516k0,12,13,1|-hvb6k1,12,13,1|-hvb6k0,39,43,0|-hl87w1,39,43,0|-hl87w0,12,13,1|-hcl3w1,12,13,1|-hcl3w0,39,43,0|-h382k1,39,43,0|-h382k0,12,13,1|-gtv181,12,13,1|-gtv180,39,43,0|-gkuyk1,39,43,0|-gkuyk0,12,13,1|-gb4yk1,12,13,1|-gb4yk0,39,43,0|-g11zw1,39,43,0|-g11zw0,12,13,1|-fpw581,12,13,1|-fpw580,39,43,0|-fkunw1,39,43,0|-fkunw0,12,13,1|-f9buk1,12,13,1|-f9buk0,39,43,0|-ezyt81,39,43,0|-ezyt80,12,13,1|-eqjx81,12,13,1|-eqjx80,39,43,0|-eibmk1,39,43,0|-eibmk0,12,13,1|-eg5xc1,12,13,1|-eg5xc0,16,1,1|-eaeio1,16,1,1|-eaeio0,12,13,1|-e6st81,12,13,1|-e6st80,39,43,0|-dzljw1,39,43,0|-dzljw0,12,13,1|-dxstc1,12,13,1|-dxstc0,16,1,1|-dqyio1,16,1,1|-dqyio0,12,13,1|-dnprw1,12,13,1|-dnprw0,39,43,0|-dgvh81,39,43,0|-dgvh80,12,13,1|-deps01,12,13,1|-deps00,16,1,1|-d88g01,16,1,1|-d88g00,12,13,1|-d4zp81,12,13,1|-d4zp80,39,43,0|-cy5ek1,39,43,0|-cy5ek0,12,13,1|-cvzpc1,12,13,1|-cvzpc0,16,1,1|-cpidc1,16,1,1|-cpidc0,12,13,1|-cm9mk1,12,13,1|-cm9mk0,39,43,0|-cdzh81,39,43,0|-cdzh80,12,13,1|-c4mfw1,12,13,1|-c4mfw0,39,43,0|-bv9681,39,43,0|-bv9680,12,13,1|-blw4w1,12,13,1|-blw4w0,39,43,0|-bcj3k1,39,43,0|-bcj3k0,12,13,1|-b36281,12,13,1|-b36280,39,43,0|-att0w1,39,43,0|-att0w0,12,13,1|-akfzk1,12,13,1|-akfzk0,39,43,0|-ab2y81,39,43,0|-ab2y80,12,13,1|-a1pww1,12,13,1|-a1pww0,39,43,0|-9scvk1,39,43,0|-9scvk0,12,13,1|-9imvk1,12,13,1|-9imvk0,39,43,0|-999u81,39,43,0|-999u80,12,13,1|-8zwsw1,12,13,1|-8zwsw0,39,43,0|-8qjrk1,39,43,0|-8qjrk0,12,13,1|-8h6q81,12,13,1|-8h6q80,39,43,0|-87tow1,39,43,0|-87tow0,12,13,1|-7ygnk1,12,13,1|-7ygnk0,39,43,0|-7p3m81,39,43,0|-7p3m80,12,13,1|-7fqkw1,12,13,1|-7fqkw0,39,43,0|-76djk1,39,43,0|-76djk0,12,13,1|-6wnjk1,12,13,1|-6wnjk0,39,43,0|-6nai81,39,43,0|-6nai80,12,13,1|-6dxgw1,12,13,1|-6dxgw0,39,43,0|-64kfk1,39,43,0|-64kfk0,12,13,1|-5v7e81,12,13,1|-5v7e80,39,43,0|-5lucw1,39,43,0|-5lucw0,12,13,1|-5chbk1,12,13,1|-5chbk0,39,43,0|-534a81,39,43,0|-534a80,12,13,1|-4tr8w1,12,13,1|-4tr8w0,39,43,0|-4ke7k1,39,43,0|-4ke7k0,12,13,1|-4b1681,12,13,1|-4b1680,39,43,0|-41o4w1,39,43,0|-41o4w0,12,13,1|-3ry4w1,12,13,1|-3ry4w0,39,43,0|-3il3k1,39,43,0|-3il3k0,12,13,1|-398281,12,13,1|-398280,39,43,0|-2zv0w1,39,43,0|-2zv0w0,12,13,1|-2qhzk1,12,13,1|-2qhzk0,39,43,0|-2h4y81,39,43,0|-2h4y80,12,13,1|-27rww1,12,13,1|-27rww0,39,43,0|-1yevk1,39,43,0|-1yevk0,12,13,0|3rwo3z,12,13,0|3rwo40,16,1,1|419pfz,16,1,1|419pg0,12,13,0|4azpfz,12,13,0|4azpg0,16,1,1|4kcqrz,16,1,1|4kcqs0,12,13,0|4tps3z,12,13,0|4tps40,16,1,1|532w7z,16,1,1|532w80,12,13,0|5cfurz,12,13,0|5cfus0,16,1,1|5lsyvz,16,1,1|5lsyw0,12,13,0|5v607z,12,13,0|5v6080,16,1,1|64j1jz,16,1,1|64j1k0,12,13,0|6dw2vz,12,13,0|6dw2w0,16,1,1|6n947z,16,1,1|6n9480,12,13,0|6wm8bz,12,13,0|6wm8c0,16,1,1|75z6vz,16,1,1|75z6w0,12,13,0|7fc87z,12,13,0|7fc880,16,1,1|7p287z,16,1,1|7p2880,12,13,0|7yf9jz,12,13,0|7yf9k0,16,1,1|87savz,16,1,1|87saw0,12,13,0|8h5c7z,12,13,0|8h5c80,16,1,1|8qidjz,16,1,1|8qidk0,12,13,0|8zvevz,12,13,0|8zvew0,16,1,1|998g7z,16,1,1|998g80,12,13,0|9ilhjz,12,13,0|9ilhk0,16,1,1|9ryivz,16,1,1|9ryiw0,12,13,0|a1bk7z,12,13,0|a1bk80,16,1,1|aaoljz,16,1,1|aaolk0,12,13,0|ak1mvz,12,13,0|ak1mw0,16,1,1|atrmvz,16,1,1|atrmw0,12,13,0|b34o7z,12,13,0|b34o80,16,1,1|bchpjz,16,1,1|bchpk0,12,13,0|bluqvz,12,13,0|bluqw0,16,1,1|bv7s7z,16,1,1|bv7s80,6,1,0|c4kqrz,6,1,0|c4kqs0,16,1,1|cdxs3z,16,1,1|cdxs40,12,13,0|cnatfz,12,13,0|cnatg0,16,1,1|cwnurz,16,1,1|cwnus0,12,13,0|d60w3z,12,13,0|d60w40,16,1,1|dfdxfz,16,1,1|dfdxg0,12,13,0|dp3xfz,12,13,0|dp3xg0,16,1,1|dzwtfz,16,1,1|dzwtg0,12,13,0|e7u03z,12,13,0|e7u040,16,1,1|eimw3z,16,1,1|eimw40,12,13,0|eqk2rz,12,13,0|eqk2s0,16,1,1|f1cyrz,16,1,1|f1cys0,12,13,0|f9a5fz,12,13,0|f9a5g0,16,1,1|fkg03z,16,1,1|fkg040,12,13,0|fs083z,12,13,0|fs0840,16,1,1|g362rz,16,1,1|g362s0,12,13,0|gaqarz,12,13,0|gaqas0,16,1,1|glw5fz,16,1,1|glw5g0,12,13,0|gttc3z,12,13,0|gttc40,16,1,1|h4m83z,16,1,1|h4m840,12,13,0|hcjerz,12,13,0|hcjes0,16,1,1|hncarz,16,1,1|hncas0,12,13,0|hv9hfz,12,13,0|hv9hg0,16,1,1|i6fc3z,16,1,1|i6fc40,12,13,0|idzk3z,12,13,0|idzk40,16,1,1|ip5erz,16,1,1|ip5es0,12,13,0|iwpmrz,12,13,0|iwpms0,16,1,1|j7vhfz,16,1,1|j7vhg0,12,13,0|jffpfz,12,13,0|jffpg0,16,1,1|jqlk3z,16,1,1|jqlk40,12,13,0|jyiqrz,12,13,0|jyiqs0,16,1,1|k9bmrz,16,1,1|k9bms0,12,13,0|kh8tfz,12,13,0|kh8tg0,16,1,1|ks1pfz,16,1,1|ks1pg0,12,13,0|kzyw3z,12,13,0|kzyw40,16,1,1|lb4qrz,16,1,1|lb4qs0,12,13,0|lioyrz,12,13,0|lioys0,16,1,1|ltutfz,16,1,1|ltutg0,12,13,0|m1f1fz,12,13,0|m1f1g0,16,1,1|mckw3z,16,1,1|mckw40,12,13,0|mki2rz,12,13,0|mki2s0,16,1,1|mvayrz,16,1,1|mvays0,12,13,0|n385fz,12,13,0|n385g0,16,1,1|ne11fz,16,1,1|ne11g0,12,13,0|nly83z,12,13,0|nly840,16,1,1|nwr43z,16,1,1|nwr440,12,13,0|o4oarz,12,13,0|o4oas0,16,1,1|ofu5fz,16,1,1|ofu5g0,12,13,0|onedfz,12,13,0|onedg0,16,1,1|oyk83z,16,1,1|oyk840,12,13,0|p64g3z,12,13,0|p64g40,16,1,1|phaarz,16,1,1|phaas0,12,13,0|pp7hfz,12,13,0|pp7hg0,16,1,1|q00dfz,16,1,1|q00dg0,12,13,0|q7xk3z,12,13,0|q7xk40,16,1,1|qiqg3z,16,1,1|qiqg40,12,13,0|qqnmrz,12,13,0|qqnms0,16,1,1|r1thfz,16,1,1|r1thg0,12,13,0|r9dpfz,12,13,0|r9dpg0,16,1,1|rkjk3z,16,1,1|rkjk40,12,13,0|rs3s3z,12,13,0|rs3s40,16,1,1|s39mrz,16,1,1|s39ms0,12,13,0|sb6tfz,12,13,0|sb6tg0,16,1,1|slzpfz,16,1,1|slzpg0,12,13,0|stww3z,12,13,0|stww40,16,1,1|t4ps3z,16,1,1|t4ps40,12,13,0|tcmyrz,12,13,0|tcmys0,16,1,1|tnfurz,16,1,1|tnfus0,12,13,0|tvd1fz,12,13,0|tvd1g0,16,1,1|u6iw3z,16,1,1|u6iw40,12,13,0|ue343z,12,13,0|ue3440,16,1,1|up8yrz,16,1,1|up8ys0,12,13,0|uwt6rz,12,13,0|uwt6s0,16,1,1|v7z1fz,16,1,1|v7z1g0,12,13,0|vfw83z,12,13,0|vfw840,16,1,1|vqp43z,16,1,1|vqp440,12,13,0|vymarz,12,13,0|vymas0,16,1,1|w9f6rz,16,1,1|w9f6s0,12,13,0|whcdfz,12,13,0|whcdg0,16,1,1|wsi83z,16,1,1|wsi840,12,13,0|x02g3z,12,13,0|x02g40,16,1,1|xb8arz,16,1,1|xb8as0,12,13,0|xisirz,12,13,0|xisis0,16,1,1|xtydfz,16,1,1|xtydg0,12,13,0|y1ilfz,12,13,0|y1ilg0,16,1,1|ycog3z,16,1,1|ycog40,12,13,0|yklmrz,12,13,0|yklms0,16,1,1|yveirz,16,1,1|yveis0,12,13,0|z3bpfz,12,13,0|z3bpg0,16,1,1|ze4lfz,16,1,1|ze4lg0,12,13,0|zm1s3z,12,13,0|zm1s40,16,1,1|zx7mrz,16,1,1|zx7ms0,12,13,0|104rurz,12,13,0|104rus0,16,1,1|10fxpfz,16,1,1|10fxpg0,12,13,0|10nhxfz,12,13,0|10nhxg0,16,1,1|10yns3z,16,1,1|10yns40,12,13,0|116kyrz,12,13,0|116kys0,16,1,1|11hdurz,16,1,1|11hdus0,12,13,0|11pb1fz,12,13,0|11pb1g0,16,1,1|1203xfz,16,1,1|1203xg0,12,13,0|128143z,12,13,0|1281440,16,1,1|12iu03z,16,1,1|12iu040,12,13,0|12qr6rz,12,13,0|12qr6s0,16,1,1|131x1fz,16,1,1|131x1g0,12,13,0|139h9fz,12,13,0|139h9g0,16,1,1|13kn43z,16,1,1|13kn440,12,13,0|13s7c3z,12,13,0|13s7c40,16,1,1|143d6rz,16,1,1|143d6s0,12,13,0|14badfz,12,13,0|14badg0,16,1,1|14m39fz,16,1,1|14m39g0,12,13,0|14u0g3z,12,13,0|14u0g40,16,1,1|154tc3z,16,1,1|154tc40,12,13,0|15cqirz,12,13,0|15cqis0,16,1,1|15nwdfz,16,1,1|15nwdg0,12,13,0|15vglfz,12,13,0|15vglg0,16,1,1|166mg3z,16,1,1|166mg40,12,13,0|16e6o3z,12,13,0|16e6o40,16,1,1|16pcirz,16,1,1|16pcis0,12,13,0|16x9pfz,12,13,0|16x9pg0,16,1,1|1782lfz,16,1,1|1782lg0,12,13,0|17fzs3z,12,13,0|17fzs40,16,1,1|17qso3z,16,1,1|17qso40,12,13,0|17ypurz,12,13,0|17ypus0,16,1,1|189iqrz,16,1,1|189iqs0,12,13,0|18hfxfz,12,13,0|18hfxg0,16,1,1|18sls3z,16,1,1|18sls40,12,13,0|190603z,12,13,0|1906040,16,1,1|19bburz,16,1,1|19bbus0,12,13,0|19iw2rz,12,13,0|19iw2s0,16,1,1|19u1xfz,16,1,1|19u1xg0,12,13,0|1a1z43z,12,13,0|1a1z440,16,1,1|1acs03z,16,1,1|1acs040,12,13,0|1akp6rz,12,13,0|1akp6s0,16,1,1|1avi2rz,16,1,1|1avi2s0,12,13,0|1b3f9fz,12,13,0|1b3f9g0,16,1,1|1bel43z,16,1,1|1bel440,12,13,0|1bm5c3z,12,13,0|1bm5c40,16,1,1|1bxb6rz,16,1,1|1bxb6s0,12,13,0|1c4verz,12,13,0|1c4ves0,16,1,1|1cg19fz,16,1,1|1cg19g0,12,13,0|1cnlhfz,12,13,0|1cnlhg0,16,1,1|1cyrc3z,16,1,1|1cyrc40,12,13,0|1d6oirz,12,13,0|1d6ois0,16,1,1|1dhherz,16,1,1|1dhhes0,12,13,0|1dpelfz,12,13,0|1dpelg0,16,1,1|1e07hfz,16,1,1|1e07hg0,12,13,0|1e84o3z,12,13,0|1e84o40,16,1,1|1ejairz,16,1,1|1ejais0,12,13,0|1equqrz,12,13,0|1equqs0,16,1,1|1f20lfz,16,1,1|1f20lg0,12,13,0|1f9ktfz,12,13,0|1f9ktg0,16,1,1|1fkqo3z,16,1,1|1fkqo40,12,13,0|1fsnurz,12,13,0|1fsnus0,16,1,1|1g3gqrz,16,1,1|1g3gqs0,12,13,0|1gbdxfz,12,13,0|1gbdxg0,16,1,1|1gm6tfz,16,1,1|1gm6tg0,12,13,0|1gu403z,12,13,0|1gu4040,16,1,1|1h4ww3z,16,1,1|1h4ww40,12,13,0|1hcu2rz,12,13,0|1hcu2s0,16,1,1|1hnzxfz,16,1,1|1hnzxg0,12,13,0|1hvk5fz,12,13,0|1hvk5g0,16,1,1|1i6q03z,16,1,1|1i6q040,12,13,0|1iea83z,12,13,0|1iea840,16,1,1|1ipg2rz,16,1,1|1ipg2s0,12,13,0|1ixd9fz,12,13,0|1ixd9g0,16,1,1|1j865fz,16,1,1|1j865g0,12,13,0|1jg3c3z,12,13,0|1jg3c40,16,1,1|1jqw83z,16,1,1|1jqw840,12,13,0|1jyterz,12,13,0|1jytes0,16,1,1|1k9z9fz,16,1,1|1k9z9g0,12,13,0|1khjhfz,12,13,0|1khjhg0,16,1,1|1kspc3z,16,1,1|1kspc40,12,13,0|1l09k3z,12,13,0|1l09k40,16,1,1|1lbferz,16,1,1|1lbfes0,12,13,0|1ljclfz,12,13,0|1ljclg0,16,1,1|1lu5hfz,16,1,1|1lu5hg0,12,13,0|1m22o3z,12,13,0|1m22o40,16,1,1|1mcvk3z,16,1,1|1mcvk40,12,13,0|1mksqrz,12,13,0|1mksqs0,16,1,1|1mvlmrz,16,1,1|1mvlms0,12,13,0|1n3itfz,12,13,0|1n3itg0,16,1,1|1neoo3z,16,1,1|1neoo40,12,13,0|1nm8w3z,12,13,0|1nm8w40,16,1,1|1nxeqrz,16,1,1|1nxeqs0,12,13,0|1o4yyrz,12,13,0|1o4yys0,16,1,1|1og4tfz,16,1,1|1og4tg0,12,13,0|1oo203z,12,13,0|1oo2040,16,1,1|1oyuw3z,16,1,1|1oyuw40,12,13,0|1p6s2rz,12,13,0|1p6s2s0,16,1,1|1phkyrz,16,1,1|1phkys0,12,13,0|1ppi5fz,12,13,0|1ppi5g0,16,1,1|1q0o03z,16,1,1|1q0o040,12,13,0|1q8883z,12,13,0|1q88840,16,1,1|1qje2rz,16,1,1|1qje2s0,12,13,0|1qqyarz,12,13,0|1qqyas0,16,1,1|1r245fz,16,1,1|1r245g0,12,13,0|1r9odfz,12,13,0|1r9odg0,16,1,1|1rku83z,16,1,1|1rku840,12,13,0|1rsrerz,12,13,0|1rsres0,16,1,1|1s3karz,16,1,1|1s3kas0,12,13,0|1sbhhfz,12,13,0|1sbhhg0,16,1,1|1smadfz,16,1,1|1smadg0,12,13,0|1su7k3z,12,13,0|1su7k40,16,1,1|1t5derz,16,1,1|1t5des0,12,13,0|1tcxmrz,12,13,0|1tcxms0,16,1,1|1to3hfz,16,1,1|1to3hg0,12,13,0|1tvnpfz,12,13,0|1tvnpg0,16,1,1|1u6tk3z,16,1,1|1u6tk40,12,13,0|1ueqqrz,12,13,0|1ueqqs0,16,1,1|1upjmrz,16,1,1|1upjms0,12,13,0|1uxgtfz,12,13,0|1uxgtg0,16,1,1|1v89pfz,16,1,1|1v89pg0,12,13,0|1vg6w3z,12,13,0|1vg6w40,16,1,1|1vqzs3z,16,1,1|1vqzs40,12,13,0|NaN,12,13,0\",\"Atlantic/Bermuda|,0,297,0|-15r0xbv,0,297,0|-15r0xbu,54,297,0|-rivvzv,54,297,0|-rivvzu,26,298,1|-r9qc3v,26,298,1|-r9qc3u,54,297,0|-qzp5bv,54,297,0|-qzp5bu,26,298,1|-qrq6rv,26,298,1|-qrq6ru,54,297,0|-kvj2fv,54,297,0|-kvj2fu,31,40,0|-eljwo1,31,40,0|-eljwo0,49,41,1|-e75gs1,49,41,1|-e75gs0,31,40,0|-dz87c1,31,40,0|-dz87c0,49,41,1|-dnpgs1,49,41,1|-dnpgs0,31,40,0|-dgv3c1,31,40,0|-dgv3c0,49,41,1|-d4mfg1,49,41,1|-d4mfg0,31,40,0|-cy50o1,31,40,0|-cy50o0,49,41,1|-clwcs1,49,41,1|-clwcs0,31,40,0|-bt38o1,31,40,0|-bt38o0,49,41,1|-bmyy41,49,41,1|-bmyy40,31,40,0|-ba07c1,31,40,0|-ba07c0,49,41,1|-b4lu41,49,41,1|-b4lu40,31,40,0|-ara4o1,31,40,0|-ara4o0,49,41,1|-alvrg1,49,41,1|-alvrg0,31,40,0|-a873c1,31,40,0|-a873c0,49,41,1|-a35os1,49,41,1|-a35os0,31,40,0|-9ph0o1,31,40,0|-9ph0o0,49,41,1|-9kfm41,49,41,1|-9kfm40,31,40,0|-96qy01,31,40,0|-96qy00,49,41,1|-91cks1,49,41,1|-91cks0,31,40,0|-73hoo1,31,40,0|-73hoo0,49,41,1|-6vkks1,49,41,1|-6vkks0,31,40,0|296onz,31,40,0|296oo0,49,41,1|2ijn7z,49,41,1|2ijn80,31,40,0|2rwrbz,31,40,0|2rwrc0,49,41,1|319pvz,49,41,1|319pw0,31,40,0|3amtzz,31,40,0|3amu00,49,41,1|3kcr7z,49,41,1|3kcr80,31,40,0|3tcwnz,31,40,0|3tcwo0,49,41,1|432tvz,49,41,1|432tw0,31,40,0|4cfxzz,31,40,0|4cfy00,49,41,1|4lswjz,49,41,1|4lswk0,31,40,0|4v60nz,31,40,0|4v60o0,49,41,1|54iz7z,49,41,1|54iz80,31,40,0|5dw3bz,31,40,0|5dw3c0,49,41,1|5n91vz,49,41,1|5n91w0,31,40,0|5wm5zz,31,40,0|5wm600,49,41,1|65z4jz,49,41,1|65z4k0,31,40,0|6fc8nz,31,40,0|6fc8o0,49,41,1|6p25vz,49,41,1|6p25w0,31,40,0|6y2bbz,31,40,0|6y2bc0,49,41,1|77s8jz,49,41,1|77s8k0,31,40,0|7h5cnz,31,40,0|7h5co0,49,41,1|7qib7z,49,41,1|7qib80,31,40,0|7zvfbz,31,40,0|7zvfc0,49,41,1|898dvz,49,41,1|898dw0,31,40,0|8ilhzz,31,40,0|8ili00,49,41,1|8rygjz,49,41,1|8rygk0,31,40,0|908onz,31,40,0|908oo0,49,41,1|9aoj7z,49,41,1|9aoj80,31,40,0|9iyrbz,31,40,0|9iyrc0,49,41,1|9trkjz,49,41,1|9trkk0,31,40,0|a1otzz,31,40,0|a1ou00,49,41,1|achn7z,49,41,1|achn80,31,40,0|akewnz,31,40,0|akewo0,49,41,1|av7pvz,49,41,1|av7pw0,31,40,0|b3hxzz,31,40,0|b3hy00,49,41,1|bdxsjz,49,41,1|bdxsk0,31,40,0|bm80nz,31,40,0|bm80o0,49,41,1|bwnv7z,49,41,1|bwnv80,31,40,0|c4y3bz,31,40,0|c4y3c0,49,41,1|cfqwjz,49,41,1|cfqwk0,31,40,0|cno5zz,31,40,0|cno600,49,41,1|cygz7z,49,41,1|cygz80,31,40,0|d6e8nz,31,40,0|d6e8o0,49,41,1|dh71vz,49,41,1|dh71w0,31,40,0|dph9zz,31,40,0|dpha00,49,41,1|dzx4jz,49,41,1|dzx4k0,31,40,0|e87cnz,31,40,0|e87co0,49,41,1|ein77z,49,41,1|ein780,31,40,0|eqxfbz,31,40,0|eqxfc0,49,41,1|f1d9vz,49,41,1|f1d9w0,31,40,0|f9nhzz,31,40,0|f9ni00,49,41,1|fkgb7z,49,41,1|fkgb80,31,40,0|fsdknz,31,40,0|fsdko0,49,41,1|g36dvz,49,41,1|g36dw0,31,40,0|gb3nbz,31,40,0|gb3nc0,49,41,1|glwgjz,49,41,1|glwgk0,31,40,0|gu6onz,31,40,0|gu6oo0,49,41,1|h4mj7z,49,41,1|h4mj80,31,40,0|hcwrbz,31,40,0|hcwrc0,49,41,1|hnclvz,49,41,1|hnclw0,31,40,0|hvmtzz,31,40,0|hvmu00,49,41,1|i6fn7z,49,41,1|i6fn80,31,40,0|iecwnz,31,40,0|iecwo0,49,41,1|ip5pvz,49,41,1|ip5pw0,31,40,0|ix2zbz,31,40,0|ix2zc0,49,41,1|j7vsjz,49,41,1|j7vsk0,31,40,0|jeq5zz,31,40,0|jeq600,49,41,1|jqytvz,49,41,1|jqytw0,31,40,0|jxg8nz,31,40,0|jxg8o0,49,41,1|k9owjz,49,41,1|k9owk0,31,40,0|kg6bbz,31,40,0|kg6bc0,49,41,1|ksez7z,49,41,1|ksez80,31,40,0|kz9cnz,31,40,0|kz9co0,49,41,1|lbi0jz,49,41,1|lbi0k0,31,40,0|lhzfbz,31,40,0|lhzfc0,49,41,1|lu837z,49,41,1|lu8380,31,40,0|m0phzz,31,40,0|m0pi00,49,41,1|mcy5vz,49,41,1|mcy5w0,31,40,0|mjfknz,31,40,0|mjfko0,49,41,1|mvo8jz,49,41,1|mvo8k0,31,40,0|n25nbz,31,40,0|n25nc0,49,41,1|neeb7z,49,41,1|neeb80,31,40,0|nkvpzz,31,40,0|nkvq00,49,41,1|nx4dvz,49,41,1|nx4dw0,31,40,0|o3yrbz,31,40,0|o3yrc0,49,41,1|og7f7z,49,41,1|og7f80,31,40,0|omotzz,31,40,0|omou00,49,41,1|oyxhvz,49,41,1|oyxhw0,31,40,0|p5ewnz,31,40,0|p5ewo0,49,41,1|phnkjz,49,41,1|phnkk0,31,40,0|po4zbz,31,40,0|po4zc0,49,41,1|q0dn7z,49,41,1|q0dn80,31,40,0|q6v1zz,31,40,0|q6v200,49,41,1|qj3pvz,49,41,1|qj3pw0,31,40,0|qpy3bz,31,40,0|qpy3c0,49,41,1|r26r7z,49,41,1|r26r80,31,40,0|r8o5zz,31,40,0|r8o600,49,41,1|rkwtvz,49,41,1|rkwtw0,31,40,0|rre8nz,31,40,0|rre8o0,49,41,1|s3mwjz,49,41,1|s3mwk0,31,40,0|sa4bbz,31,40,0|sa4bc0,49,41,1|smcz7z,49,41,1|smcz80,31,40,0|ssudzz,31,40,0|ssue00,49,41,1|t531vz,49,41,1|t531w0,31,40,0|tbkgnz,31,40,0|tbkgo0,49,41,1|tnt4jz,49,41,1|tnt4k0,31,40,0|tunhzz,31,40,0|tuni00,49,41,1|u6w5vz,49,41,1|u6w5w0,31,40,0|uddknz,31,40,0|uddko0,49,41,1|upm8jz,49,41,1|upm8k0,31,40,0|uw3nbz,31,40,0|uw3nc0,49,41,1|v8cb7z,49,41,1|v8cb80,31,40,0|vetpzz,31,40,0|vetq00,49,41,1|vr2dvz,49,41,1|vr2dw0,31,40,0|vxjsnz,31,40,0|vxjso0,49,41,1|w9sgjz,49,41,1|w9sgk0,31,40,0|wgmtzz,31,40,0|wgmu00,49,41,1|wsvhvz,49,41,1|wsvhw0,31,40,0|wzcwnz,31,40,0|wzcwo0,49,41,1|xblkjz,49,41,1|xblkk0,31,40,0|xi2zbz,31,40,0|xi2zc0,49,41,1|xubn7z,49,41,1|xubn80,31,40,0|y0t1zz,31,40,0|y0t200,49,41,1|yd1pvz,49,41,1|yd1pw0,31,40,0|yjj4nz,31,40,0|yjj4o0,49,41,1|yvrsjz,49,41,1|yvrsk0,31,40,0|z297bz,31,40,0|z297c0,49,41,1|zehv7z,49,41,1|zehv80,31,40,0|zlc8nz,31,40,0|zlc8o0,49,41,1|zxkwjz,49,41,1|zxkwk0,31,40,0|1042bbz,31,40,0|1042bc0,49,41,1|10gaz7z,49,41,1|10gaz80,31,40,0|10msdzz,31,40,0|10mse00,49,41,1|10z11vz,49,41,1|10z11w0,31,40,0|115ignz,31,40,0|115igo0,49,41,1|11hr4jz,49,41,1|11hr4k0,31,40,0|11o8jbz,31,40,0|11o8jc0,49,41,1|120h77z,49,41,1|120h780,31,40,0|126ylzz,31,40,0|126ym00,49,41,1|12j79vz,49,41,1|12j79w0,31,40,0|12q1nbz,31,40,0|12q1nc0,49,41,1|132ab7z,49,41,1|132ab80,31,40,0|138rpzz,31,40,0|138rq00,49,41,1|13l0dvz,49,41,1|13l0dw0,31,40,0|13rhsnz,31,40,0|13rhso0,49,41,1|143qgjz,49,41,1|143qgk0,31,40,0|14a7vbz,31,40,0|14a7vc0,49,41,1|14mgj7z,49,41,1|14mgj80,31,40,0|14sxxzz,31,40,0|14sxy00,49,41,1|1556lvz,49,41,1|1556lw0,31,40,0|15c0zbz,31,40,0|15c0zc0,49,41,1|15o9n7z,49,41,1|15o9n80,31,40,0|15ur1zz,31,40,0|15ur200,49,41,1|166zpvz,49,41,1|166zpw0,31,40,0|16dh4nz,31,40,0|16dh4o0,49,41,1|16ppsjz,49,41,1|16ppsk0,31,40,0|16w77bz,31,40,0|16w77c0,49,41,1|178fv7z,49,41,1|178fv80,31,40,0|17ex9zz,31,40,0|17exa00,49,41,1|17r5xvz,49,41,1|17r5xw0,31,40,0|17xncnz,31,40,0|17xnco0,49,41,1|189w0jz,49,41,1|189w0k0,31,40,0|18gqdzz,31,40,0|18gqe00,49,41,1|18sz1vz,49,41,1|18sz1w0,31,40,0|18zggnz,31,40,0|18zggo0,49,41,1|19bp4jz,49,41,1|19bp4k0,31,40,0|19i6jbz,31,40,0|19i6jc0,49,41,1|19uf77z,49,41,1|19uf780,31,40,0|1a0wlzz,31,40,0|1a0wm00,49,41,1|1ad59vz,49,41,1|1ad59w0,31,40,0|1ajmonz,31,40,0|1ajmoo0,49,41,1|1avvcjz,49,41,1|1avvck0,31,40,0|1b2ppzz,31,40,0|1b2pq00,49,41,1|1beydvz,49,41,1|1beydw0,31,40,0|1blfsnz,31,40,0|1blfso0,49,41,1|1bxogjz,49,41,1|1bxogk0,31,40,0|1c45vbz,31,40,0|1c45vc0,49,41,1|1cgej7z,49,41,1|1cgej80,31,40,0|1cmvxzz,31,40,0|1cmvy00,49,41,1|1cz4lvz,49,41,1|1cz4lw0,31,40,0|1d5m0nz,31,40,0|1d5m0o0,49,41,1|1dhuojz,49,41,1|1dhuok0,31,40,0|1doc3bz,31,40,0|1doc3c0,49,41,1|1e0kr7z,49,41,1|1e0kr80,31,40,0|1e7f4nz,31,40,0|1e7f4o0,49,41,1|1ejnsjz,49,41,1|1ejnsk0,31,40,0|1eq57bz,31,40,0|1eq57c0,49,41,1|1f2dv7z,49,41,1|1f2dv80,31,40,0|1f8v9zz,31,40,0|1f8va00,49,41,1|1fl3xvz,49,41,1|1fl3xw0,31,40,0|1frlcnz,31,40,0|1frlco0,49,41,1|1g3u0jz,49,41,1|1g3u0k0,31,40,0|1gabfbz,31,40,0|1gabfc0,49,41,1|1gmk37z,49,41,1|1gmk380,31,40,0|1gt1hzz,31,40,0|1gt1i00,49,41,1|1h5a5vz,49,41,1|1h5a5w0,31,40,0|1hc4jbz,31,40,0|1hc4jc0,49,41,1|1hod77z,49,41,1|1hod780,31,40,0|1huulzz,31,40,0|1huum00,49,41,1|1i739vz,49,41,1|1i739w0,31,40,0|1idkonz,31,40,0|1idkoo0,49,41,1|1iptcjz,49,41,1|1iptck0,31,40,0|1iwarbz,31,40,0|1iwarc0,49,41,1|1j8jf7z,49,41,1|1j8jf80,31,40,0|1jf0tzz,31,40,0|1jf0u00,49,41,1|1jr9hvz,49,41,1|1jr9hw0,31,40,0|1jy3vbz,31,40,0|1jy3vc0,49,41,1|1kacj7z,49,41,1|1kacj80,31,40,0|1kgtxzz,31,40,0|1kgty00,49,41,1|1kt2lvz,49,41,1|1kt2lw0,31,40,0|1kzk0nz,31,40,0|1kzk0o0,49,41,1|1lbsojz,49,41,1|1lbsok0,31,40,0|1lia3bz,31,40,0|1lia3c0,49,41,1|1luir7z,49,41,1|1luir80,31,40,0|1m105zz,31,40,0|1m10600,49,41,1|1md8tvz,49,41,1|1md8tw0,31,40,0|1mjq8nz,31,40,0|1mjq8o0,49,41,1|1mvywjz,49,41,1|1mvywk0,31,40,0|1n2t9zz,31,40,0|1n2ta00,49,41,1|1nf1xvz,49,41,1|1nf1xw0,31,40,0|1nljcnz,31,40,0|1nljco0,49,41,1|1nxs0jz,49,41,1|1nxs0k0,31,40,0|1o49fbz,31,40,0|1o49fc0,49,41,1|1ogi37z,49,41,1|1ogi380,31,40,0|1omzhzz,31,40,0|1omzi00,49,41,1|1oz85vz,49,41,1|1oz85w0,31,40,0|1p5pknz,31,40,0|1p5pko0,49,41,1|1phy8jz,49,41,1|1phy8k0,31,40,0|1poslzz,31,40,0|1posm00,49,41,1|1q119vz,49,41,1|1q119w0,31,40,0|1q7ionz,31,40,0|1q7ioo0,49,41,1|1qjrcjz,49,41,1|1qjrck0,31,40,0|1qq8rbz,31,40,0|1qq8rc0,49,41,1|1r2hf7z,49,41,1|1r2hf80,31,40,0|1r8ytzz,31,40,0|1r8yu00,49,41,1|1rl7hvz,49,41,1|1rl7hw0,31,40,0|1rrownz,31,40,0|1rrowo0,49,41,1|1s3xkjz,49,41,1|1s3xkk0,31,40,0|1saezbz,31,40,0|1saezc0,49,41,1|1smnn7z,49,41,1|1smnn80,31,40,0|1sti0nz,31,40,0|1sti0o0,49,41,1|1t5qojz,49,41,1|1t5qok0,31,40,0|1tc83bz,31,40,0|1tc83c0,49,41,1|1togr7z,49,41,1|1togr80,31,40,0|1tuy5zz,31,40,0|1tuy600,49,41,1|1u76tvz,49,41,1|1u76tw0,31,40,0|1udo8nz,31,40,0|1udo8o0,49,41,1|1upwwjz,49,41,1|1upwwk0,31,40,0|1uwebbz,31,40,0|1uwebc0,49,41,1|1v8mz7z,49,41,1|1v8mz80,31,40,0|1vf4dzz,31,40,0|1vf4e00,49,41,1|1vrd1vz,49,41,1|1vrd1w0,31,40,0|NaN,31,40,0\",\"Atlantic/Canary|,0,299,0|-oytbtd,0,299,0|-oytbtc,12,13,0|-c4xh41,12,13,0|-c4xh40,6,1,0|5csqnz,6,1,0|5csqo0,7,8,1|5lsw3z,7,8,1|5lsw40,6,1,0|5v5xfz,6,1,0|5v5xg0,7,8,1|64iyrz,7,8,1|64iys0,6,1,0|6dw03z,6,1,0|6dw040,7,8,1|6n91fz,7,8,1|6n91g0,6,1,0|6wm2rz,6,1,0|6wm2s0,7,8,1|75z43z,7,8,1|75z440,6,1,0|7fc5fz,6,1,0|7fc5g0,7,8,1|7p25fz,7,8,1|7p25g0,6,1,0|7yf6rz,6,1,0|7yf6s0,7,8,1|87s83z,7,8,1|87s840,6,1,0|8h59fz,6,1,0|8h59g0,7,8,1|8qiarz,7,8,1|8qias0,6,1,0|8zvc3z,6,1,0|8zvc40,7,8,1|998dfz,7,8,1|998dg0,6,1,0|9ilerz,6,1,0|9iles0,7,8,1|9ryg3z,7,8,1|9ryg40,6,1,0|a1bhfz,6,1,0|a1bhg0,7,8,1|aaoirz,7,8,1|aaois0,6,1,0|ak1k3z,6,1,0|ak1k40,7,8,1|atrk3z,7,8,1|atrk40,6,1,0|b34lfz,6,1,0|b34lg0,7,8,1|bchmrz,7,8,1|bchms0,6,1,0|bluo3z,6,1,0|bluo40,7,8,1|bv7pfz,7,8,1|bv7pg0,6,1,0|c4kqrz,6,1,0|c4kqs0,7,8,1|cdxs3z,7,8,1|cdxs40,6,1,0|cnatfz,6,1,0|cnatg0,7,8,1|cwnurz,7,8,1|cwnus0,6,1,0|d60w3z,6,1,0|d60w40,7,8,1|dfdxfz,7,8,1|dfdxg0,6,1,0|dp3xfz,6,1,0|dp3xg0,7,8,1|dzwtfz,7,8,1|dzwtg0,6,1,0|e7u03z,6,1,0|e7u040,7,8,1|eimw3z,7,8,1|eimw40,6,1,0|eqk2rz,6,1,0|eqk2s0,7,8,1|f1cyrz,7,8,1|f1cys0,6,1,0|f9a5fz,6,1,0|f9a5g0,7,8,1|fkg03z,7,8,1|fkg040,6,1,0|fs083z,6,1,0|fs0840,7,8,1|g362rz,7,8,1|g362s0,6,1,0|gaqarz,6,1,0|gaqas0,7,8,1|glw5fz,7,8,1|glw5g0,6,1,0|gttc3z,6,1,0|gttc40,7,8,1|h4m83z,7,8,1|h4m840,6,1,0|hcjerz,6,1,0|hcjes0,7,8,1|hncarz,7,8,1|hncas0,6,1,0|hv9hfz,6,1,0|hv9hg0,7,8,1|i6fc3z,7,8,1|i6fc40,6,1,0|idzk3z,6,1,0|idzk40,7,8,1|ip5erz,7,8,1|ip5es0,6,1,0|iwpmrz,6,1,0|iwpms0,7,8,1|j7vhfz,7,8,1|j7vhg0,6,1,0|jffpfz,6,1,0|jffpg0,7,8,1|jqlk3z,7,8,1|jqlk40,6,1,0|jyiqrz,6,1,0|jyiqs0,7,8,1|k9bmrz,7,8,1|k9bms0,6,1,0|kh8tfz,6,1,0|kh8tg0,7,8,1|ks1pfz,7,8,1|ks1pg0,6,1,0|kzyw3z,6,1,0|kzyw40,7,8,1|lb4qrz,7,8,1|lb4qs0,6,1,0|lioyrz,6,1,0|lioys0,7,8,1|ltutfz,7,8,1|ltutg0,6,1,0|m1f1fz,6,1,0|m1f1g0,7,8,1|mckw3z,7,8,1|mckw40,6,1,0|mki2rz,6,1,0|mki2s0,7,8,1|mvayrz,7,8,1|mvays0,6,1,0|n385fz,6,1,0|n385g0,7,8,1|ne11fz,7,8,1|ne11g0,6,1,0|nly83z,6,1,0|nly840,7,8,1|nwr43z,7,8,1|nwr440,6,1,0|o4oarz,6,1,0|o4oas0,7,8,1|ofu5fz,7,8,1|ofu5g0,6,1,0|onedfz,6,1,0|onedg0,7,8,1|oyk83z,7,8,1|oyk840,6,1,0|p64g3z,6,1,0|p64g40,7,8,1|phaarz,7,8,1|phaas0,6,1,0|pp7hfz,6,1,0|pp7hg0,7,8,1|q00dfz,7,8,1|q00dg0,6,1,0|q7xk3z,6,1,0|q7xk40,7,8,1|qiqg3z,7,8,1|qiqg40,6,1,0|qqnmrz,6,1,0|qqnms0,7,8,1|r1thfz,7,8,1|r1thg0,6,1,0|r9dpfz,6,1,0|r9dpg0,7,8,1|rkjk3z,7,8,1|rkjk40,6,1,0|rs3s3z,6,1,0|rs3s40,7,8,1|s39mrz,7,8,1|s39ms0,6,1,0|sb6tfz,6,1,0|sb6tg0,7,8,1|slzpfz,7,8,1|slzpg0,6,1,0|stww3z,6,1,0|stww40,7,8,1|t4ps3z,7,8,1|t4ps40,6,1,0|tcmyrz,6,1,0|tcmys0,7,8,1|tnfurz,7,8,1|tnfus0,6,1,0|tvd1fz,6,1,0|tvd1g0,7,8,1|u6iw3z,7,8,1|u6iw40,6,1,0|ue343z,6,1,0|ue3440,7,8,1|up8yrz,7,8,1|up8ys0,6,1,0|uwt6rz,6,1,0|uwt6s0,7,8,1|v7z1fz,7,8,1|v7z1g0,6,1,0|vfw83z,6,1,0|vfw840,7,8,1|vqp43z,7,8,1|vqp440,6,1,0|vymarz,6,1,0|vymas0,7,8,1|w9f6rz,7,8,1|w9f6s0,6,1,0|whcdfz,6,1,0|whcdg0,7,8,1|wsi83z,7,8,1|wsi840,6,1,0|x02g3z,6,1,0|x02g40,7,8,1|xb8arz,7,8,1|xb8as0,6,1,0|xisirz,6,1,0|xisis0,7,8,1|xtydfz,7,8,1|xtydg0,6,1,0|y1ilfz,6,1,0|y1ilg0,7,8,1|ycog3z,7,8,1|ycog40,6,1,0|yklmrz,6,1,0|yklms0,7,8,1|yveirz,7,8,1|yveis0,6,1,0|z3bpfz,6,1,0|z3bpg0,7,8,1|ze4lfz,7,8,1|ze4lg0,6,1,0|zm1s3z,6,1,0|zm1s40,7,8,1|zx7mrz,7,8,1|zx7ms0,6,1,0|104rurz,6,1,0|104rus0,7,8,1|10fxpfz,7,8,1|10fxpg0,6,1,0|10nhxfz,6,1,0|10nhxg0,7,8,1|10yns3z,7,8,1|10yns40,6,1,0|116kyrz,6,1,0|116kys0,7,8,1|11hdurz,7,8,1|11hdus0,6,1,0|11pb1fz,6,1,0|11pb1g0,7,8,1|1203xfz,7,8,1|1203xg0,6,1,0|128143z,6,1,0|1281440,7,8,1|12iu03z,7,8,1|12iu040,6,1,0|12qr6rz,6,1,0|12qr6s0,7,8,1|131x1fz,7,8,1|131x1g0,6,1,0|139h9fz,6,1,0|139h9g0,7,8,1|13kn43z,7,8,1|13kn440,6,1,0|13s7c3z,6,1,0|13s7c40,7,8,1|143d6rz,7,8,1|143d6s0,6,1,0|14badfz,6,1,0|14badg0,7,8,1|14m39fz,7,8,1|14m39g0,6,1,0|14u0g3z,6,1,0|14u0g40,7,8,1|154tc3z,7,8,1|154tc40,6,1,0|15cqirz,6,1,0|15cqis0,7,8,1|15nwdfz,7,8,1|15nwdg0,6,1,0|15vglfz,6,1,0|15vglg0,7,8,1|166mg3z,7,8,1|166mg40,6,1,0|16e6o3z,6,1,0|16e6o40,7,8,1|16pcirz,7,8,1|16pcis0,6,1,0|16x9pfz,6,1,0|16x9pg0,7,8,1|1782lfz,7,8,1|1782lg0,6,1,0|17fzs3z,6,1,0|17fzs40,7,8,1|17qso3z,7,8,1|17qso40,6,1,0|17ypurz,6,1,0|17ypus0,7,8,1|189iqrz,7,8,1|189iqs0,6,1,0|18hfxfz,6,1,0|18hfxg0,7,8,1|18sls3z,7,8,1|18sls40,6,1,0|190603z,6,1,0|1906040,7,8,1|19bburz,7,8,1|19bbus0,6,1,0|19iw2rz,6,1,0|19iw2s0,7,8,1|19u1xfz,7,8,1|19u1xg0,6,1,0|1a1z43z,6,1,0|1a1z440,7,8,1|1acs03z,7,8,1|1acs040,6,1,0|1akp6rz,6,1,0|1akp6s0,7,8,1|1avi2rz,7,8,1|1avi2s0,6,1,0|1b3f9fz,6,1,0|1b3f9g0,7,8,1|1bel43z,7,8,1|1bel440,6,1,0|1bm5c3z,6,1,0|1bm5c40,7,8,1|1bxb6rz,7,8,1|1bxb6s0,6,1,0|1c4verz,6,1,0|1c4ves0,7,8,1|1cg19fz,7,8,1|1cg19g0,6,1,0|1cnlhfz,6,1,0|1cnlhg0,7,8,1|1cyrc3z,7,8,1|1cyrc40,6,1,0|1d6oirz,6,1,0|1d6ois0,7,8,1|1dhherz,7,8,1|1dhhes0,6,1,0|1dpelfz,6,1,0|1dpelg0,7,8,1|1e07hfz,7,8,1|1e07hg0,6,1,0|1e84o3z,6,1,0|1e84o40,7,8,1|1ejairz,7,8,1|1ejais0,6,1,0|1equqrz,6,1,0|1equqs0,7,8,1|1f20lfz,7,8,1|1f20lg0,6,1,0|1f9ktfz,6,1,0|1f9ktg0,7,8,1|1fkqo3z,7,8,1|1fkqo40,6,1,0|1fsnurz,6,1,0|1fsnus0,7,8,1|1g3gqrz,7,8,1|1g3gqs0,6,1,0|1gbdxfz,6,1,0|1gbdxg0,7,8,1|1gm6tfz,7,8,1|1gm6tg0,6,1,0|1gu403z,6,1,0|1gu4040,7,8,1|1h4ww3z,7,8,1|1h4ww40,6,1,0|1hcu2rz,6,1,0|1hcu2s0,7,8,1|1hnzxfz,7,8,1|1hnzxg0,6,1,0|1hvk5fz,6,1,0|1hvk5g0,7,8,1|1i6q03z,7,8,1|1i6q040,6,1,0|1iea83z,6,1,0|1iea840,7,8,1|1ipg2rz,7,8,1|1ipg2s0,6,1,0|1ixd9fz,6,1,0|1ixd9g0,7,8,1|1j865fz,7,8,1|1j865g0,6,1,0|1jg3c3z,6,1,0|1jg3c40,7,8,1|1jqw83z,7,8,1|1jqw840,6,1,0|1jyterz,6,1,0|1jytes0,7,8,1|1k9z9fz,7,8,1|1k9z9g0,6,1,0|1khjhfz,6,1,0|1khjhg0,7,8,1|1kspc3z,7,8,1|1kspc40,6,1,0|1l09k3z,6,1,0|1l09k40,7,8,1|1lbferz,7,8,1|1lbfes0,6,1,0|1ljclfz,6,1,0|1ljclg0,7,8,1|1lu5hfz,7,8,1|1lu5hg0,6,1,0|1m22o3z,6,1,0|1m22o40,7,8,1|1mcvk3z,7,8,1|1mcvk40,6,1,0|1mksqrz,6,1,0|1mksqs0,7,8,1|1mvlmrz,7,8,1|1mvlms0,6,1,0|1n3itfz,6,1,0|1n3itg0,7,8,1|1neoo3z,7,8,1|1neoo40,6,1,0|1nm8w3z,6,1,0|1nm8w40,7,8,1|1nxeqrz,7,8,1|1nxeqs0,6,1,0|1o4yyrz,6,1,0|1o4yys0,7,8,1|1og4tfz,7,8,1|1og4tg0,6,1,0|1oo203z,6,1,0|1oo2040,7,8,1|1oyuw3z,7,8,1|1oyuw40,6,1,0|1p6s2rz,6,1,0|1p6s2s0,7,8,1|1phkyrz,7,8,1|1phkys0,6,1,0|1ppi5fz,6,1,0|1ppi5g0,7,8,1|1q0o03z,7,8,1|1q0o040,6,1,0|1q8883z,6,1,0|1q88840,7,8,1|1qje2rz,7,8,1|1qje2s0,6,1,0|1qqyarz,6,1,0|1qqyas0,7,8,1|1r245fz,7,8,1|1r245g0,6,1,0|1r9odfz,6,1,0|1r9odg0,7,8,1|1rku83z,7,8,1|1rku840,6,1,0|1rsrerz,6,1,0|1rsres0,7,8,1|1s3karz,7,8,1|1s3kas0,6,1,0|1sbhhfz,6,1,0|1sbhhg0,7,8,1|1smadfz,7,8,1|1smadg0,6,1,0|1su7k3z,6,1,0|1su7k40,7,8,1|1t5derz,7,8,1|1t5des0,6,1,0|1tcxmrz,6,1,0|1tcxms0,7,8,1|1to3hfz,7,8,1|1to3hg0,6,1,0|1tvnpfz,6,1,0|1tvnpg0,7,8,1|1u6tk3z,7,8,1|1u6tk40,6,1,0|1ueqqrz,6,1,0|1ueqqs0,7,8,1|1upjmrz,7,8,1|1upjms0,6,1,0|1uxgtfz,6,1,0|1uxgtg0,7,8,1|1v89pfz,7,8,1|1v89pg0,6,1,0|1vg6w3z,6,1,0|1vg6w40,7,8,1|1vqzs3z,7,8,1|1vqzs40,6,1,0|NaN,6,1,0\",\"Atlantic/Cape_Verde|,0,300,0|-u9rbs1,0,300,0|-u9rbs0,39,43,0|-e9kqg1,39,43,0|-e9kqg0,12,13,1|-cmxp81,12,13,1|-cmxp80,39,43,0|32t73z,39,43,0|32t740,12,13,0|NaN,12,13,0\",\"Atlantic/Faroe|,0,301,0|-wcehex,0,301,0|-wcehew,6,1,0|5v5xfz,6,1,0|5v5xg0,7,8,1|64iyrz,7,8,1|64iys0,6,1,0|6dw03z,6,1,0|6dw040,7,8,1|6n91fz,7,8,1|6n91g0,6,1,0|6wm2rz,6,1,0|6wm2s0,7,8,1|75z43z,7,8,1|75z440,6,1,0|7fc5fz,6,1,0|7fc5g0,7,8,1|7p25fz,7,8,1|7p25g0,6,1,0|7yf6rz,6,1,0|7yf6s0,7,8,1|87s83z,7,8,1|87s840,6,1,0|8h59fz,6,1,0|8h59g0,7,8,1|8qiarz,7,8,1|8qias0,6,1,0|8zvc3z,6,1,0|8zvc40,7,8,1|998dfz,7,8,1|998dg0,6,1,0|9ilerz,6,1,0|9iles0,7,8,1|9ryg3z,7,8,1|9ryg40,6,1,0|a1bhfz,6,1,0|a1bhg0,7,8,1|aaoirz,7,8,1|aaois0,6,1,0|ak1k3z,6,1,0|ak1k40,7,8,1|atrk3z,7,8,1|atrk40,6,1,0|b34lfz,6,1,0|b34lg0,7,8,1|bchmrz,7,8,1|bchms0,6,1,0|bluo3z,6,1,0|bluo40,7,8,1|bv7pfz,7,8,1|bv7pg0,6,1,0|c4kqrz,6,1,0|c4kqs0,7,8,1|cdxs3z,7,8,1|cdxs40,6,1,0|cnatfz,6,1,0|cnatg0,7,8,1|cwnurz,7,8,1|cwnus0,6,1,0|d60w3z,6,1,0|d60w40,7,8,1|dfdxfz,7,8,1|dfdxg0,6,1,0|dp3xfz,6,1,0|dp3xg0,7,8,1|dzwtfz,7,8,1|dzwtg0,6,1,0|e7u03z,6,1,0|e7u040,7,8,1|eimw3z,7,8,1|eimw40,6,1,0|eqk2rz,6,1,0|eqk2s0,7,8,1|f1cyrz,7,8,1|f1cys0,6,1,0|f9a5fz,6,1,0|f9a5g0,7,8,1|fkg03z,7,8,1|fkg040,6,1,0|fs083z,6,1,0|fs0840,7,8,1|g362rz,7,8,1|g362s0,6,1,0|gaqarz,6,1,0|gaqas0,7,8,1|glw5fz,7,8,1|glw5g0,6,1,0|gttc3z,6,1,0|gttc40,7,8,1|h4m83z,7,8,1|h4m840,6,1,0|hcjerz,6,1,0|hcjes0,7,8,1|hncarz,7,8,1|hncas0,6,1,0|hv9hfz,6,1,0|hv9hg0,7,8,1|i6fc3z,7,8,1|i6fc40,6,1,0|idzk3z,6,1,0|idzk40,7,8,1|ip5erz,7,8,1|ip5es0,6,1,0|iwpmrz,6,1,0|iwpms0,7,8,1|j7vhfz,7,8,1|j7vhg0,6,1,0|jffpfz,6,1,0|jffpg0,7,8,1|jqlk3z,7,8,1|jqlk40,6,1,0|jyiqrz,6,1,0|jyiqs0,7,8,1|k9bmrz,7,8,1|k9bms0,6,1,0|kh8tfz,6,1,0|kh8tg0,7,8,1|ks1pfz,7,8,1|ks1pg0,6,1,0|kzyw3z,6,1,0|kzyw40,7,8,1|lb4qrz,7,8,1|lb4qs0,6,1,0|lioyrz,6,1,0|lioys0,7,8,1|ltutfz,7,8,1|ltutg0,6,1,0|m1f1fz,6,1,0|m1f1g0,7,8,1|mckw3z,7,8,1|mckw40,6,1,0|mki2rz,6,1,0|mki2s0,7,8,1|mvayrz,7,8,1|mvays0,6,1,0|n385fz,6,1,0|n385g0,7,8,1|ne11fz,7,8,1|ne11g0,6,1,0|nly83z,6,1,0|nly840,7,8,1|nwr43z,7,8,1|nwr440,6,1,0|o4oarz,6,1,0|o4oas0,7,8,1|ofu5fz,7,8,1|ofu5g0,6,1,0|onedfz,6,1,0|onedg0,7,8,1|oyk83z,7,8,1|oyk840,6,1,0|p64g3z,6,1,0|p64g40,7,8,1|phaarz,7,8,1|phaas0,6,1,0|pp7hfz,6,1,0|pp7hg0,7,8,1|q00dfz,7,8,1|q00dg0,6,1,0|q7xk3z,6,1,0|q7xk40,7,8,1|qiqg3z,7,8,1|qiqg40,6,1,0|qqnmrz,6,1,0|qqnms0,7,8,1|r1thfz,7,8,1|r1thg0,6,1,0|r9dpfz,6,1,0|r9dpg0,7,8,1|rkjk3z,7,8,1|rkjk40,6,1,0|rs3s3z,6,1,0|rs3s40,7,8,1|s39mrz,7,8,1|s39ms0,6,1,0|sb6tfz,6,1,0|sb6tg0,7,8,1|slzpfz,7,8,1|slzpg0,6,1,0|stww3z,6,1,0|stww40,7,8,1|t4ps3z,7,8,1|t4ps40,6,1,0|tcmyrz,6,1,0|tcmys0,7,8,1|tnfurz,7,8,1|tnfus0,6,1,0|tvd1fz,6,1,0|tvd1g0,7,8,1|u6iw3z,7,8,1|u6iw40,6,1,0|ue343z,6,1,0|ue3440,7,8,1|up8yrz,7,8,1|up8ys0,6,1,0|uwt6rz,6,1,0|uwt6s0,7,8,1|v7z1fz,7,8,1|v7z1g0,6,1,0|vfw83z,6,1,0|vfw840,7,8,1|vqp43z,7,8,1|vqp440,6,1,0|vymarz,6,1,0|vymas0,7,8,1|w9f6rz,7,8,1|w9f6s0,6,1,0|whcdfz,6,1,0|whcdg0,7,8,1|wsi83z,7,8,1|wsi840,6,1,0|x02g3z,6,1,0|x02g40,7,8,1|xb8arz,7,8,1|xb8as0,6,1,0|xisirz,6,1,0|xisis0,7,8,1|xtydfz,7,8,1|xtydg0,6,1,0|y1ilfz,6,1,0|y1ilg0,7,8,1|ycog3z,7,8,1|ycog40,6,1,0|yklmrz,6,1,0|yklms0,7,8,1|yveirz,7,8,1|yveis0,6,1,0|z3bpfz,6,1,0|z3bpg0,7,8,1|ze4lfz,7,8,1|ze4lg0,6,1,0|zm1s3z,6,1,0|zm1s40,7,8,1|zx7mrz,7,8,1|zx7ms0,6,1,0|104rurz,6,1,0|104rus0,7,8,1|10fxpfz,7,8,1|10fxpg0,6,1,0|10nhxfz,6,1,0|10nhxg0,7,8,1|10yns3z,7,8,1|10yns40,6,1,0|116kyrz,6,1,0|116kys0,7,8,1|11hdurz,7,8,1|11hdus0,6,1,0|11pb1fz,6,1,0|11pb1g0,7,8,1|1203xfz,7,8,1|1203xg0,6,1,0|128143z,6,1,0|1281440,7,8,1|12iu03z,7,8,1|12iu040,6,1,0|12qr6rz,6,1,0|12qr6s0,7,8,1|131x1fz,7,8,1|131x1g0,6,1,0|139h9fz,6,1,0|139h9g0,7,8,1|13kn43z,7,8,1|13kn440,6,1,0|13s7c3z,6,1,0|13s7c40,7,8,1|143d6rz,7,8,1|143d6s0,6,1,0|14badfz,6,1,0|14badg0,7,8,1|14m39fz,7,8,1|14m39g0,6,1,0|14u0g3z,6,1,0|14u0g40,7,8,1|154tc3z,7,8,1|154tc40,6,1,0|15cqirz,6,1,0|15cqis0,7,8,1|15nwdfz,7,8,1|15nwdg0,6,1,0|15vglfz,6,1,0|15vglg0,7,8,1|166mg3z,7,8,1|166mg40,6,1,0|16e6o3z,6,1,0|16e6o40,7,8,1|16pcirz,7,8,1|16pcis0,6,1,0|16x9pfz,6,1,0|16x9pg0,7,8,1|1782lfz,7,8,1|1782lg0,6,1,0|17fzs3z,6,1,0|17fzs40,7,8,1|17qso3z,7,8,1|17qso40,6,1,0|17ypurz,6,1,0|17ypus0,7,8,1|189iqrz,7,8,1|189iqs0,6,1,0|18hfxfz,6,1,0|18hfxg0,7,8,1|18sls3z,7,8,1|18sls40,6,1,0|190603z,6,1,0|1906040,7,8,1|19bburz,7,8,1|19bbus0,6,1,0|19iw2rz,6,1,0|19iw2s0,7,8,1|19u1xfz,7,8,1|19u1xg0,6,1,0|1a1z43z,6,1,0|1a1z440,7,8,1|1acs03z,7,8,1|1acs040,6,1,0|1akp6rz,6,1,0|1akp6s0,7,8,1|1avi2rz,7,8,1|1avi2s0,6,1,0|1b3f9fz,6,1,0|1b3f9g0,7,8,1|1bel43z,7,8,1|1bel440,6,1,0|1bm5c3z,6,1,0|1bm5c40,7,8,1|1bxb6rz,7,8,1|1bxb6s0,6,1,0|1c4verz,6,1,0|1c4ves0,7,8,1|1cg19fz,7,8,1|1cg19g0,6,1,0|1cnlhfz,6,1,0|1cnlhg0,7,8,1|1cyrc3z,7,8,1|1cyrc40,6,1,0|1d6oirz,6,1,0|1d6ois0,7,8,1|1dhherz,7,8,1|1dhhes0,6,1,0|1dpelfz,6,1,0|1dpelg0,7,8,1|1e07hfz,7,8,1|1e07hg0,6,1,0|1e84o3z,6,1,0|1e84o40,7,8,1|1ejairz,7,8,1|1ejais0,6,1,0|1equqrz,6,1,0|1equqs0,7,8,1|1f20lfz,7,8,1|1f20lg0,6,1,0|1f9ktfz,6,1,0|1f9ktg0,7,8,1|1fkqo3z,7,8,1|1fkqo40,6,1,0|1fsnurz,6,1,0|1fsnus0,7,8,1|1g3gqrz,7,8,1|1g3gqs0,6,1,0|1gbdxfz,6,1,0|1gbdxg0,7,8,1|1gm6tfz,7,8,1|1gm6tg0,6,1,0|1gu403z,6,1,0|1gu4040,7,8,1|1h4ww3z,7,8,1|1h4ww40,6,1,0|1hcu2rz,6,1,0|1hcu2s0,7,8,1|1hnzxfz,7,8,1|1hnzxg0,6,1,0|1hvk5fz,6,1,0|1hvk5g0,7,8,1|1i6q03z,7,8,1|1i6q040,6,1,0|1iea83z,6,1,0|1iea840,7,8,1|1ipg2rz,7,8,1|1ipg2s0,6,1,0|1ixd9fz,6,1,0|1ixd9g0,7,8,1|1j865fz,7,8,1|1j865g0,6,1,0|1jg3c3z,6,1,0|1jg3c40,7,8,1|1jqw83z,7,8,1|1jqw840,6,1,0|1jyterz,6,1,0|1jytes0,7,8,1|1k9z9fz,7,8,1|1k9z9g0,6,1,0|1khjhfz,6,1,0|1khjhg0,7,8,1|1kspc3z,7,8,1|1kspc40,6,1,0|1l09k3z,6,1,0|1l09k40,7,8,1|1lbferz,7,8,1|1lbfes0,6,1,0|1ljclfz,6,1,0|1ljclg0,7,8,1|1lu5hfz,7,8,1|1lu5hg0,6,1,0|1m22o3z,6,1,0|1m22o40,7,8,1|1mcvk3z,7,8,1|1mcvk40,6,1,0|1mksqrz,6,1,0|1mksqs0,7,8,1|1mvlmrz,7,8,1|1mvlms0,6,1,0|1n3itfz,6,1,0|1n3itg0,7,8,1|1neoo3z,7,8,1|1neoo40,6,1,0|1nm8w3z,6,1,0|1nm8w40,7,8,1|1nxeqrz,7,8,1|1nxeqs0,6,1,0|1o4yyrz,6,1,0|1o4yys0,7,8,1|1og4tfz,7,8,1|1og4tg0,6,1,0|1oo203z,6,1,0|1oo2040,7,8,1|1oyuw3z,7,8,1|1oyuw40,6,1,0|1p6s2rz,6,1,0|1p6s2s0,7,8,1|1phkyrz,7,8,1|1phkys0,6,1,0|1ppi5fz,6,1,0|1ppi5g0,7,8,1|1q0o03z,7,8,1|1q0o040,6,1,0|1q8883z,6,1,0|1q88840,7,8,1|1qje2rz,7,8,1|1qje2s0,6,1,0|1qqyarz,6,1,0|1qqyas0,7,8,1|1r245fz,7,8,1|1r245g0,6,1,0|1r9odfz,6,1,0|1r9odg0,7,8,1|1rku83z,7,8,1|1rku840,6,1,0|1rsrerz,6,1,0|1rsres0,7,8,1|1s3karz,7,8,1|1s3kas0,6,1,0|1sbhhfz,6,1,0|1sbhhg0,7,8,1|1smadfz,7,8,1|1smadg0,6,1,0|1su7k3z,6,1,0|1su7k40,7,8,1|1t5derz,7,8,1|1t5des0,6,1,0|1tcxmrz,6,1,0|1tcxms0,7,8,1|1to3hfz,7,8,1|1to3hg0,6,1,0|1tvnpfz,6,1,0|1tvnpg0,7,8,1|1u6tk3z,7,8,1|1u6tk40,6,1,0|1ueqqrz,6,1,0|1ueqqs0,7,8,1|1upjmrz,7,8,1|1upjms0,6,1,0|1uxgtfz,6,1,0|1uxgtg0,7,8,1|1v89pfz,7,8,1|1v89pg0,6,1,0|1vg6w3z,6,1,0|1vg6w40,7,8,1|1vqzs3z,7,8,1|1vqzs40,6,1,0|NaN,6,1,0\",\"Atlantic/Madeira|,0,302,0|-18vsfjd,0,302,0|-18vsfjc,137,302,0|-u9rek1,137,302,0|-u9rek0,12,13,0|-rxwyo1,12,13,0|-rxwyo0,16,1,1|-rqx181,16,1,1|-rqx180,12,13,0|-rkqw01,12,13,0|-rkqw00,16,1,1|-r90o01,16,1,1|-r90o00,12,13,0|-r1x401,12,13,0|-r1x400,16,1,1|-qq8qo1,16,1,1|-qq8qo0,12,13,0|-qj71c1,12,13,0|-qj71c0,16,1,1|-q7gtc1,16,1,1|-q7gtc0,12,13,0|-q0d9c1,12,13,0|-q0d9c0,16,1,1|-pon1c1,16,1,1|-pon1c0,12,13,0|-phlc01,12,13,0|-phlc00,16,1,1|-p5v401,16,1,1|-p5v400,12,13,0|-nuso01,12,13,0|-nuso00,16,1,1|-nlhhc1,16,1,1|-nlhhc0,12,13,0|-mt6yo1,12,13,0|-mt6yo0,16,1,1|-mkjuo1,16,1,1|-mkjuo0,12,13,0|-matuo1,12,13,0|-matuo0,16,1,1|-m1ts01,16,1,1|-m1ts00,12,13,0|-lrqtc1,12,13,0|-lrqtc0,16,1,1|-liqqo1,16,1,1|-liqqo0,12,13,0|-l8ns01,12,13,0|-l8ns00,16,1,1|-l00o01,16,1,1|-l00o00,12,13,0|-k77mo1,12,13,0|-k77mo0,16,1,1|-jykio1,16,1,1|-jykio0,12,13,0|-jp7hc1,12,13,0|-jp7hc0,16,1,1|-jfug01,16,1,1|-jfug00,12,13,0|-inedc1,12,13,0|-inedc0,16,1,1|-ie1c01,16,1,1|-ie1c00,12,13,0|-i519c1,12,13,0|-i519c0,16,1,1|-hvb9c1,16,1,1|-hvb9c0,12,13,0|-hl8ao1,12,13,0|-hl8ao0,16,1,1|-hcl6o1,16,1,1|-hcl6o0,12,13,0|-h385c1,12,13,0|-h385c0,16,1,1|-gtv401,16,1,1|-gtv400,12,13,0|-gkv1c1,12,13,0|-gkv1c0,16,1,1|-gb51c1,16,1,1|-gb51c0,12,13,0|-g122o1,12,13,0|-g122o0,16,1,1|-fpw801,16,1,1|-fpw800,12,13,0|-fkuqo1,12,13,0|-fkuqo0,16,1,1|-f9bxc1,16,1,1|-f9bxc0,12,13,0|-ezyw01,12,13,0|-ezyw00,16,1,1|-eqk001,16,1,1|-eqk000,12,13,0|-eibpc1,12,13,0|-eibpc0,16,1,1|-eg6041,16,1,1|-eg6040,17,8,1|-eaelg1,17,8,1|-eaelg0,16,1,1|-e6sw01,16,1,1|-e6sw00,12,13,0|-dzlmo1,12,13,0|-dzlmo0,16,1,1|-dxsw41,16,1,1|-dxsw40,17,8,1|-dqylg1,17,8,1|-dqylg0,16,1,1|-dnpuo1,16,1,1|-dnpuo0,12,13,0|-dgvk01,12,13,0|-dgvk00,16,1,1|-depus1,16,1,1|-depus0,17,8,1|-d88is1,17,8,1|-d88is0,16,1,1|-d4zs01,16,1,1|-d4zs00,12,13,0|-cy5hc1,12,13,0|-cy5hc0,16,1,1|-cvzs41,16,1,1|-cvzs40,17,8,1|-cpig41,17,8,1|-cpig40,16,1,1|-cm9pc1,16,1,1|-cm9pc0,12,13,0|-cdzk01,12,13,0|-cdzk00,16,1,1|-c4mio1,16,1,1|-c4mio0,12,13,0|-bv9901,12,13,0|-bv9900,16,1,1|-blw7o1,16,1,1|-blw7o0,12,13,0|-bcj6c1,12,13,0|-bcj6c0,16,1,1|-b36501,16,1,1|-b36500,12,13,0|-att3o1,12,13,0|-att3o0,16,1,1|-akg2c1,16,1,1|-akg2c0,12,13,0|-ab3101,12,13,0|-ab3100,16,1,1|-a1pzo1,16,1,1|-a1pzo0,12,13,0|-9scyc1,12,13,0|-9scyc0,16,1,1|-9imyc1,16,1,1|-9imyc0,12,13,0|-999x01,12,13,0|-999x00,16,1,1|-8zwvo1,16,1,1|-8zwvo0,12,13,0|-8qjuc1,12,13,0|-8qjuc0,16,1,1|-8h6t01,16,1,1|-8h6t00,12,13,0|-87tro1,12,13,0|-87tro0,16,1,1|-7ygqc1,16,1,1|-7ygqc0,12,13,0|-7p3p01,12,13,0|-7p3p00,16,1,1|-7fqno1,16,1,1|-7fqno0,12,13,0|-76dmc1,12,13,0|-76dmc0,16,1,1|-6wnmc1,16,1,1|-6wnmc0,12,13,0|-6nal01,12,13,0|-6nal00,16,1,1|-6dxjo1,16,1,1|-6dxjo0,12,13,0|-64kic1,12,13,0|-64kic0,16,1,1|-5v7h01,16,1,1|-5v7h00,12,13,0|-5lufo1,12,13,0|-5lufo0,16,1,1|-5chec1,16,1,1|-5chec0,12,13,0|-534d01,12,13,0|-534d00,16,1,1|-4trbo1,16,1,1|-4trbo0,12,13,0|-4keac1,12,13,0|-4keac0,16,1,1|-4b1901,16,1,1|-4b1900,12,13,0|-41o7o1,12,13,0|-41o7o0,16,1,1|-3ry7o1,16,1,1|-3ry7o0,12,13,0|-3il6c1,12,13,0|-3il6c0,16,1,1|-398501,16,1,1|-398500,12,13,0|-2zv3o1,12,13,0|-2zv3o0,16,1,1|-2qi2c1,16,1,1|-2qi2c0,12,13,0|-2h5101,12,13,0|-2h5100,16,1,1|-27rzo1,16,1,1|-27rzo0,12,13,0|-1yeyc1,12,13,0|-1yeyc0,6,1,0|3rwlbz,6,1,0|3rwlc0,7,8,1|419mnz,7,8,1|419mo0,6,1,0|4azmnz,6,1,0|4azmo0,7,8,1|4kcnzz,7,8,1|4kco00,6,1,0|4tppbz,6,1,0|4tppc0,7,8,1|532tfz,7,8,1|532tg0,6,1,0|5cfrzz,6,1,0|5cfs00,7,8,1|5lsw3z,7,8,1|5lsw40,6,1,0|5v5xfz,6,1,0|5v5xg0,7,8,1|64iyrz,7,8,1|64iys0,6,1,0|6dw03z,6,1,0|6dw040,7,8,1|6n91fz,7,8,1|6n91g0,6,1,0|6wm5jz,6,1,0|6wm5k0,7,8,1|75z43z,7,8,1|75z440,6,1,0|7fc5fz,6,1,0|7fc5g0,7,8,1|7p25fz,7,8,1|7p25g0,6,1,0|7yf6rz,6,1,0|7yf6s0,7,8,1|87s83z,7,8,1|87s840,6,1,0|8h59fz,6,1,0|8h59g0,7,8,1|8qiarz,7,8,1|8qias0,6,1,0|8zvc3z,6,1,0|8zvc40,7,8,1|998dfz,7,8,1|998dg0,6,1,0|9ilerz,6,1,0|9iles0,7,8,1|9ryg3z,7,8,1|9ryg40,6,1,0|a1bhfz,6,1,0|a1bhg0,7,8,1|aaoirz,7,8,1|aaois0,6,1,0|ak1k3z,6,1,0|ak1k40,7,8,1|atrk3z,7,8,1|atrk40,6,1,0|b34lfz,6,1,0|b34lg0,7,8,1|bchmrz,7,8,1|bchms0,6,1,0|bluo3z,6,1,0|bluo40,7,8,1|bv7pfz,7,8,1|bv7pg0,6,1,0|c4kqrz,6,1,0|c4kqs0,7,8,1|cdxs3z,7,8,1|cdxs40,6,1,0|cnatfz,6,1,0|cnatg0,7,8,1|cwnurz,7,8,1|cwnus0,6,1,0|d60w3z,6,1,0|d60w40,7,8,1|dfdxfz,7,8,1|dfdxg0,6,1,0|dp3xfz,6,1,0|dp3xg0,7,8,1|dzwtfz,7,8,1|dzwtg0,6,1,0|e7u03z,6,1,0|e7u040,7,8,1|eimw3z,7,8,1|eimw40,6,1,0|eqk2rz,6,1,0|eqk2s0,7,8,1|f1cyrz,7,8,1|f1cys0,6,1,0|f9a5fz,6,1,0|f9a5g0,7,8,1|fkg03z,7,8,1|fkg040,6,1,0|fs083z,6,1,0|fs0840,7,8,1|g362rz,7,8,1|g362s0,6,1,0|gaqarz,6,1,0|gaqas0,7,8,1|glw5fz,7,8,1|glw5g0,6,1,0|gttc3z,6,1,0|gttc40,7,8,1|h4m83z,7,8,1|h4m840,6,1,0|hcjerz,6,1,0|hcjes0,7,8,1|hncarz,7,8,1|hncas0,6,1,0|hv9hfz,6,1,0|hv9hg0,7,8,1|i6fc3z,7,8,1|i6fc40,6,1,0|idzk3z,6,1,0|idzk40,7,8,1|ip5erz,7,8,1|ip5es0,6,1,0|iwpmrz,6,1,0|iwpms0,7,8,1|j7vhfz,7,8,1|j7vhg0,6,1,0|jffpfz,6,1,0|jffpg0,7,8,1|jqlk3z,7,8,1|jqlk40,6,1,0|jyiqrz,6,1,0|jyiqs0,7,8,1|k9bmrz,7,8,1|k9bms0,6,1,0|kh8tfz,6,1,0|kh8tg0,7,8,1|ks1pfz,7,8,1|ks1pg0,6,1,0|kzyw3z,6,1,0|kzyw40,7,8,1|lb4qrz,7,8,1|lb4qs0,6,1,0|lioyrz,6,1,0|lioys0,7,8,1|ltutfz,7,8,1|ltutg0,6,1,0|m1f1fz,6,1,0|m1f1g0,7,8,1|mckw3z,7,8,1|mckw40,6,1,0|mki2rz,6,1,0|mki2s0,7,8,1|mvayrz,7,8,1|mvays0,6,1,0|n385fz,6,1,0|n385g0,7,8,1|ne11fz,7,8,1|ne11g0,6,1,0|nly83z,6,1,0|nly840,7,8,1|nwr43z,7,8,1|nwr440,6,1,0|o4oarz,6,1,0|o4oas0,7,8,1|ofu5fz,7,8,1|ofu5g0,6,1,0|onedfz,6,1,0|onedg0,7,8,1|oyk83z,7,8,1|oyk840,6,1,0|p64g3z,6,1,0|p64g40,7,8,1|phaarz,7,8,1|phaas0,6,1,0|pp7hfz,6,1,0|pp7hg0,7,8,1|q00dfz,7,8,1|q00dg0,6,1,0|q7xk3z,6,1,0|q7xk40,7,8,1|qiqg3z,7,8,1|qiqg40,6,1,0|qqnmrz,6,1,0|qqnms0,7,8,1|r1thfz,7,8,1|r1thg0,6,1,0|r9dpfz,6,1,0|r9dpg0,7,8,1|rkjk3z,7,8,1|rkjk40,6,1,0|rs3s3z,6,1,0|rs3s40,7,8,1|s39mrz,7,8,1|s39ms0,6,1,0|sb6tfz,6,1,0|sb6tg0,7,8,1|slzpfz,7,8,1|slzpg0,6,1,0|stww3z,6,1,0|stww40,7,8,1|t4ps3z,7,8,1|t4ps40,6,1,0|tcmyrz,6,1,0|tcmys0,7,8,1|tnfurz,7,8,1|tnfus0,6,1,0|tvd1fz,6,1,0|tvd1g0,7,8,1|u6iw3z,7,8,1|u6iw40,6,1,0|ue343z,6,1,0|ue3440,7,8,1|up8yrz,7,8,1|up8ys0,6,1,0|uwt6rz,6,1,0|uwt6s0,7,8,1|v7z1fz,7,8,1|v7z1g0,6,1,0|vfw83z,6,1,0|vfw840,7,8,1|vqp43z,7,8,1|vqp440,6,1,0|vymarz,6,1,0|vymas0,7,8,1|w9f6rz,7,8,1|w9f6s0,6,1,0|whcdfz,6,1,0|whcdg0,7,8,1|wsi83z,7,8,1|wsi840,6,1,0|x02g3z,6,1,0|x02g40,7,8,1|xb8arz,7,8,1|xb8as0,6,1,0|xisirz,6,1,0|xisis0,7,8,1|xtydfz,7,8,1|xtydg0,6,1,0|y1ilfz,6,1,0|y1ilg0,7,8,1|ycog3z,7,8,1|ycog40,6,1,0|yklmrz,6,1,0|yklms0,7,8,1|yveirz,7,8,1|yveis0,6,1,0|z3bpfz,6,1,0|z3bpg0,7,8,1|ze4lfz,7,8,1|ze4lg0,6,1,0|zm1s3z,6,1,0|zm1s40,7,8,1|zx7mrz,7,8,1|zx7ms0,6,1,0|104rurz,6,1,0|104rus0,7,8,1|10fxpfz,7,8,1|10fxpg0,6,1,0|10nhxfz,6,1,0|10nhxg0,7,8,1|10yns3z,7,8,1|10yns40,6,1,0|116kyrz,6,1,0|116kys0,7,8,1|11hdurz,7,8,1|11hdus0,6,1,0|11pb1fz,6,1,0|11pb1g0,7,8,1|1203xfz,7,8,1|1203xg0,6,1,0|128143z,6,1,0|1281440,7,8,1|12iu03z,7,8,1|12iu040,6,1,0|12qr6rz,6,1,0|12qr6s0,7,8,1|131x1fz,7,8,1|131x1g0,6,1,0|139h9fz,6,1,0|139h9g0,7,8,1|13kn43z,7,8,1|13kn440,6,1,0|13s7c3z,6,1,0|13s7c40,7,8,1|143d6rz,7,8,1|143d6s0,6,1,0|14badfz,6,1,0|14badg0,7,8,1|14m39fz,7,8,1|14m39g0,6,1,0|14u0g3z,6,1,0|14u0g40,7,8,1|154tc3z,7,8,1|154tc40,6,1,0|15cqirz,6,1,0|15cqis0,7,8,1|15nwdfz,7,8,1|15nwdg0,6,1,0|15vglfz,6,1,0|15vglg0,7,8,1|166mg3z,7,8,1|166mg40,6,1,0|16e6o3z,6,1,0|16e6o40,7,8,1|16pcirz,7,8,1|16pcis0,6,1,0|16x9pfz,6,1,0|16x9pg0,7,8,1|1782lfz,7,8,1|1782lg0,6,1,0|17fzs3z,6,1,0|17fzs40,7,8,1|17qso3z,7,8,1|17qso40,6,1,0|17ypurz,6,1,0|17ypus0,7,8,1|189iqrz,7,8,1|189iqs0,6,1,0|18hfxfz,6,1,0|18hfxg0,7,8,1|18sls3z,7,8,1|18sls40,6,1,0|190603z,6,1,0|1906040,7,8,1|19bburz,7,8,1|19bbus0,6,1,0|19iw2rz,6,1,0|19iw2s0,7,8,1|19u1xfz,7,8,1|19u1xg0,6,1,0|1a1z43z,6,1,0|1a1z440,7,8,1|1acs03z,7,8,1|1acs040,6,1,0|1akp6rz,6,1,0|1akp6s0,7,8,1|1avi2rz,7,8,1|1avi2s0,6,1,0|1b3f9fz,6,1,0|1b3f9g0,7,8,1|1bel43z,7,8,1|1bel440,6,1,0|1bm5c3z,6,1,0|1bm5c40,7,8,1|1bxb6rz,7,8,1|1bxb6s0,6,1,0|1c4verz,6,1,0|1c4ves0,7,8,1|1cg19fz,7,8,1|1cg19g0,6,1,0|1cnlhfz,6,1,0|1cnlhg0,7,8,1|1cyrc3z,7,8,1|1cyrc40,6,1,0|1d6oirz,6,1,0|1d6ois0,7,8,1|1dhherz,7,8,1|1dhhes0,6,1,0|1dpelfz,6,1,0|1dpelg0,7,8,1|1e07hfz,7,8,1|1e07hg0,6,1,0|1e84o3z,6,1,0|1e84o40,7,8,1|1ejairz,7,8,1|1ejais0,6,1,0|1equqrz,6,1,0|1equqs0,7,8,1|1f20lfz,7,8,1|1f20lg0,6,1,0|1f9ktfz,6,1,0|1f9ktg0,7,8,1|1fkqo3z,7,8,1|1fkqo40,6,1,0|1fsnurz,6,1,0|1fsnus0,7,8,1|1g3gqrz,7,8,1|1g3gqs0,6,1,0|1gbdxfz,6,1,0|1gbdxg0,7,8,1|1gm6tfz,7,8,1|1gm6tg0,6,1,0|1gu403z,6,1,0|1gu4040,7,8,1|1h4ww3z,7,8,1|1h4ww40,6,1,0|1hcu2rz,6,1,0|1hcu2s0,7,8,1|1hnzxfz,7,8,1|1hnzxg0,6,1,0|1hvk5fz,6,1,0|1hvk5g0,7,8,1|1i6q03z,7,8,1|1i6q040,6,1,0|1iea83z,6,1,0|1iea840,7,8,1|1ipg2rz,7,8,1|1ipg2s0,6,1,0|1ixd9fz,6,1,0|1ixd9g0,7,8,1|1j865fz,7,8,1|1j865g0,6,1,0|1jg3c3z,6,1,0|1jg3c40,7,8,1|1jqw83z,7,8,1|1jqw840,6,1,0|1jyterz,6,1,0|1jytes0,7,8,1|1k9z9fz,7,8,1|1k9z9g0,6,1,0|1khjhfz,6,1,0|1khjhg0,7,8,1|1kspc3z,7,8,1|1kspc40,6,1,0|1l09k3z,6,1,0|1l09k40,7,8,1|1lbferz,7,8,1|1lbfes0,6,1,0|1ljclfz,6,1,0|1ljclg0,7,8,1|1lu5hfz,7,8,1|1lu5hg0,6,1,0|1m22o3z,6,1,0|1m22o40,7,8,1|1mcvk3z,7,8,1|1mcvk40,6,1,0|1mksqrz,6,1,0|1mksqs0,7,8,1|1mvlmrz,7,8,1|1mvlms0,6,1,0|1n3itfz,6,1,0|1n3itg0,7,8,1|1neoo3z,7,8,1|1neoo40,6,1,0|1nm8w3z,6,1,0|1nm8w40,7,8,1|1nxeqrz,7,8,1|1nxeqs0,6,1,0|1o4yyrz,6,1,0|1o4yys0,7,8,1|1og4tfz,7,8,1|1og4tg0,6,1,0|1oo203z,6,1,0|1oo2040,7,8,1|1oyuw3z,7,8,1|1oyuw40,6,1,0|1p6s2rz,6,1,0|1p6s2s0,7,8,1|1phkyrz,7,8,1|1phkys0,6,1,0|1ppi5fz,6,1,0|1ppi5g0,7,8,1|1q0o03z,7,8,1|1q0o040,6,1,0|1q8883z,6,1,0|1q88840,7,8,1|1qje2rz,7,8,1|1qje2s0,6,1,0|1qqyarz,6,1,0|1qqyas0,7,8,1|1r245fz,7,8,1|1r245g0,6,1,0|1r9odfz,6,1,0|1r9odg0,7,8,1|1rku83z,7,8,1|1rku840,6,1,0|1rsrerz,6,1,0|1rsres0,7,8,1|1s3karz,7,8,1|1s3kas0,6,1,0|1sbhhfz,6,1,0|1sbhhg0,7,8,1|1smadfz,7,8,1|1smadg0,6,1,0|1su7k3z,6,1,0|1su7k40,7,8,1|1t5derz,7,8,1|1t5des0,6,1,0|1tcxmrz,6,1,0|1tcxms0,7,8,1|1to3hfz,7,8,1|1to3hg0,6,1,0|1tvnpfz,6,1,0|1tvnpg0,7,8,1|1u6tk3z,7,8,1|1u6tk40,6,1,0|1ueqqrz,6,1,0|1ueqqs0,7,8,1|1upjmrz,7,8,1|1upjms0,6,1,0|1uxgtfz,6,1,0|1uxgtg0,7,8,1|1v89pfz,7,8,1|1v89pg0,6,1,0|1vg6w3z,6,1,0|1vg6w40,7,8,1|1vqzs3z,7,8,1|1vqzs40,6,1,0|NaN,6,1,0\",\"Atlantic/Reykjavik|,0,303,0|-wcwx9d,0,303,0|-wcwx9c,12,13,0|-rl7k01,12,13,0|-rl7k00,16,1,1|-r8ph81,16,1,1|-r8ph80,12,13,0|-r2fmo1,12,13,0|-r2fmo0,16,1,1|-qolek1,16,1,1|-qolek0,12,13,0|-qjnpc1,12,13,0|-qjnpc0,16,1,1|-q5th81,16,1,1|-q5th80,12,13,0|-pgm5c1,12,13,0|-pgm5c0,16,1,1|-pbq581,16,1,1|-pbq580,12,13,0|-g0c5c1,12,13,0|-g0c5c0,16,1,1|-fqyyg1,16,1,1|-fqyyg0,12,13,0|-fkuic1,12,13,0|-fkuic0,16,1,1|-f7vx41,16,1,1|-f7vx40,12,13,0|-f1rjs1,12,13,0|-f1rjs0,16,1,1|-ep5ug1,16,1,1|-ep5ug0,12,13,0|-eioig1,12,13,0|-eioig0,16,1,1|-e6sqg1,16,1,1|-e6sqg0,12,13,0|-dzyfs1,12,13,0|-dzyfs0,16,1,1|-do2ns1,16,1,1|-do2ns0,12,13,0|-dh8d41,12,13,0|-dh8d40,16,1,1|-d5cl41,16,1,1|-d5cl40,12,13,0|-cyiag1,12,13,0|-cyiag0,16,1,1|-cm9js1,16,1,1|-cm9js0,12,13,0|-cfs7s1,12,13,0|-cfs7s0,16,1,1|-c3jh41,16,1,1|-c3jh40,12,13,0|-bv9bs1,12,13,0|-bv9bs0,16,1,1|-bkteg1,16,1,1|-bkteg0,12,13,0|-bcj941,12,13,0|-bcj940,16,1,1|-b23bs1,16,1,1|-b23bs0,12,13,0|-att6g1,12,13,0|-att6g0,16,1,1|-aj0ag1,16,1,1|-aj0ag0,12,13,0|-ab33s1,12,13,0|-ab33s0,16,1,1|-a0n6g1,16,1,1|-a0n6g0,12,13,0|-9sd141,12,13,0|-9sd140,16,1,1|-9hk541,16,1,1|-9hk540,12,13,0|-999zs1,12,13,0|-999zs0,16,1,1|-8yu2g1,16,1,1|-8yu2g0,12,13,0|-8qjx41,12,13,0|-8qjx40,16,1,1|-8g3zs1,16,1,1|-8g3zs0,12,13,0|-87tug1,12,13,0|-87tug0,16,1,1|-7xdx41,16,1,1|-7xdx40,12,13,0|-7p3rs1,12,13,0|-7p3rs0,16,1,1|-7enug1,16,1,1|-7enug0,12,13,0|-76dp41,12,13,0|-76dp40,16,1,1|-6vkt41,16,1,1|-6vkt40,12,13,0|-6nans1,12,13,0|-6nans0,16,1,1|-6cuqg1,16,1,1|-6cuqg0,12,13,0|-64kl41,12,13,0|-64kl40,16,1,1|-5u4ns1,16,1,1|-5u4ns0,12,13,0|-5luig1,12,13,0|-5luig0,16,1,1|-5bel41,16,1,1|-5bel40,12,13,0|-534fs1,12,13,0|-534fs0,16,1,1|-4soig1,16,1,1|-4soig0,12,13,0|-4ked41,12,13,0|-4ked40,16,1,1|-49yfs1,16,1,1|-49yfs0,12,13,0|-41oag1,12,13,0|-41oag0,16,1,1|-3qveg1,16,1,1|-3qveg0,12,13,0|-3il941,12,13,0|-3il940,16,1,1|-385bs1,16,1,1|-385bs0,12,13,0|-2zv6g1,12,13,0|-2zv6g0,16,1,1|-2pf941,16,1,1|-2pf940,12,13,0|-2h53s1,12,13,0|-2h53s0,16,1,1|-26p6g1,16,1,1|-26p6g0,12,13,0|-1yf141,12,13,0|-1yf140,16,1,1|-1nz3s1,16,1,1|-1nz3s0,12,13,0|-1foyg1,12,13,0|-1foyg0,16,1,1|-14w2g1,16,1,1|-14w2g0,12,13,0|-wlx41,12,13,0|-wlx40,1,1,0|NaN,1,1,0\",\"Atlantic/South_Georgia|,0,304,0|-15r12kh,0,304,0|-15r12kg,39,43,0|NaN,39,43,0\",\"Atlantic/St_Helena|,0,0,0|-u9rgl5,0,0,0|-u9rgl4,1,1,0|NaN,1,1,0\",\"Atlantic/Stanley|,0,305,0|-15r0ymd,0,305,0|-15r0ymc,84,305,0|-u63pad,84,305,0|-u63pac,41,40,0|-gu7rk1,41,40,0|-gu7rk0,38,41,1|-gl7ro1,38,41,1|-gl7ro0,41,40,0|-gbhow1,41,40,0|-gbhow0,38,41,1|-g2hp01,38,41,1|-g2hp00,41,40,0|-fsenk1,41,40,0|-fsenk0,38,41,1|-fjeno1,38,41,1|-fjeno0,41,40,0|-f9okw1,41,40,0|-f9okw0,38,41,1|-f0ol01,38,41,1|-f0ol00,41,40,0|-eqyi81,41,40,0|-eqyi80,38,41,1|-ehyic1,38,41,1|-ehyic0,41,40,0|-e88fk1,41,40,0|-e88fk0,38,41,1|-e3aqc1,38,41,1|-e3aqc0,41,40,0|6yf4fz,41,40,0|6yf4g0,38,41,0|75z9nz,38,41,0|75z9o0,39,43,1|7h51jz,39,43,1|7h51k0,38,41,0|7ocdnz,38,41,0|7ocdo0,39,43,1|7zv47z,39,43,1|7zv480,38,41,0|872gbz,38,41,0|872gc0,38,41,1|8i8azz,38,41,1|8i8b00,41,40,0|8pslrz,41,40,0|8psls0,38,41,1|90ydnz,38,41,1|90ydo0,41,40,0|98iofz,41,40,0|98iog0,38,41,1|9jogbz,38,41,1|9jogc0,41,40,0|9r8r3z,41,40,0|9r8r40,38,41,1|a2eizz,38,41,1|a2ej00,41,40,0|a9ytrz,41,40,0|a9yts0,38,41,1|alhkbz,38,41,1|alhkc0,41,40,0|asowfz,41,40,0|asowg0,38,41,1|b47mzz,38,41,1|b47n00,41,40,0|bbrxrz,41,40,0|bbrxs0,38,41,1|bmxpnz,38,41,1|bmxpo0,41,40,0|bui0fz,41,40,0|bui0g0,38,41,1|c5nsbz,38,41,1|c5nsc0,41,40,0|cd833z,41,40,0|cd8340,38,41,1|coduzz,38,41,1|codv00,41,40,0|cvy5rz,41,40,0|cvy5s0,38,41,1|d73xnz,38,41,1|d73xo0,41,40,0|deo8fz,41,40,0|deo8g0,38,41,1|dq6yzz,38,41,1|dq6z00,41,40,0|dxr9rz,41,40,0|dxr9s0,38,41,1|e8x1nz,38,41,1|e8x1o0,41,40,0|eghcfz,41,40,0|eghcg0,38,41,1|ern4bz,38,41,1|ern4c0,41,40,0|ez7f3z,41,40,0|ez7f40,38,41,1|fad6zz,38,41,1|fad700,41,40,0|fhxhrz,41,40,0|fhxhs0,38,41,1|ft39nz,38,41,1|ft39o0,41,40,0|g0nkfz,41,40,0|g0nkg0,38,41,1|gbthvz,38,41,1|gbthw0,41,40,0|gj0tzz,41,40,0|gj0u00,38,41,1|guwj7z,38,41,1|guwj80,41,40,0|h1qwnz,41,40,0|h1qwo0,38,41,1|hdmlvz,38,41,1|hdmlw0,41,40,0|hktxzz,41,40,0|hkty00,38,41,1|hwcojz,38,41,1|hwcok0,41,40,0|i3k0nz,41,40,0|i3k0o0,38,41,1|if2r7z,38,41,1|if2r80,41,40,0|ima3bz,41,40,0|ima3c0,38,41,1|ixstvz,38,41,1|ixstw0,41,40,0|j505zz,41,40,0|j50600,38,41,1|jgiwjz,38,41,1|jgiwk0,41,40,0|jnq8nz,41,40,0|jnq8o0,38,41,1|jzlxvz,38,41,1|jzlxw0,41,40,0|k6t9zz,41,40,0|k6ta00,38,41,1|kic0jz,38,41,1|kic0k0,41,40,0|kpjcnz,41,40,0|kpjco0,38,41,1|l1237z,38,41,1|l12380,41,40,0|l89fbz,41,40,0|l89fc0,38,41,0|NaN,38,41,0\",\"Australia/Adelaide|,0,306,0|-133j2zx,0,306,0|-133j2zw,138,218,0|-10vsp01,138,218,0|-10vsp00,138,242,0|-rnsq61,138,242,0|-rnsq60,139,307,1|-rjj0u1,139,307,1|-rjj0u0,138,242,0|-em3gu1,138,242,0|-em3gu0,139,307,1|-ehmcu1,139,307,1|-ehmcu0,138,242,0|-e89bi1,138,242,0|-e89bi0,139,307,1|-dywa61,139,307,1|-dywa60,138,242,0|-dp6a61,138,242,0|-dp6a60,139,307,1|-dg67i1,139,307,1|-dg67i0,138,242,0|ycghz,138,242,0|ycgi0,139,307,1|14gttz,139,307,1|14gtu0,138,242,0|1h2j5z,138,242,0|1h2j60,139,307,1|1njv5z,139,307,1|1njv60,138,242,0|1zsltz,138,242,0|1zslu0,139,307,1|269xtz,139,307,1|269xu0,138,242,0|2iiohz,138,242,0|2iioi0,139,307,1|2p00hz,139,307,1|2p00i0,138,242,0|318r5z,138,242,0|318r60,139,307,1|3831tz,139,307,1|3831u0,138,242,0|3kbshz,138,242,0|3kbsi0,139,307,1|3qt4hz,139,307,1|3qt4i0,138,242,0|431v5z,138,242,0|431v60,139,307,1|49j75z,139,307,1|49j760,138,242,0|4lrxtz,138,242,0|4lrxu0,139,307,1|4s99tz,139,307,1|4s99u0,138,242,0|54i0hz,138,242,0|54i0i0,139,307,1|5azchz,139,307,1|5azci0,138,242,0|5n835z,138,242,0|5n8360,139,307,1|5tpf5z,139,307,1|5tpf60,138,242,0|65y5tz,138,242,0|65y5u0,139,307,1|6csghz,139,307,1|6csgi0,138,242,0|6p175z,138,242,0|6p1760,139,307,1|6vij5z,139,307,1|6vij60,138,242,0|77r9tz,138,242,0|77r9u0,139,307,1|7e8ltz,139,307,1|7e8lu0,138,242,0|7qhchz,138,242,0|7qhci0,139,307,1|7wyohz,139,307,1|7wyoi0,138,242,0|897f5z,138,242,0|897f60,139,307,1|8geohz,139,307,1|8geoi0,138,242,0|8rkj5z,138,242,0|8rkj60,139,307,1|8z4r5z,139,307,1|8z4r60,138,242,0|9ankhz,138,242,0|9anki0,139,307,1|9i7shz,139,307,1|9i7si0,138,242,0|9tqltz,138,242,0|9tqlu0,139,307,1|a0xv5z,139,307,1|a0xv60,138,242,0|acgohz,138,242,0|acgoi0,139,307,1|ajnxtz,139,307,1|ajnxu0,138,242,0|av6r5z,138,242,0|av6r60,139,307,1|b1o35z,139,307,1|b1o360,138,242,0|bdwttz,138,242,0|bdwtu0,139,307,1|blh1tz,139,307,1|blh1u0,138,242,0|bwmwhz,138,242,0|bwmwi0,139,307,1|c3h75z,139,307,1|c3h760,138,242,0|cfpxtz,138,242,0|cfpxu0,139,307,1|cmx75z,139,307,1|cmx760,138,242,0|cyg0hz,138,242,0|cyg0i0,139,307,1|d608hz,139,307,1|d608i0,138,242,0|dh635z,138,242,0|dh6360,139,307,1|dp39tz,139,307,1|dp39u0,138,242,0|dzw5tz,138,242,0|dzw5u0,139,307,1|e7tchz,139,307,1|e7tci0,138,242,0|eim8hz,138,242,0|eim8i0,139,307,1|eqjf5z,139,307,1|eqjf60,138,242,0|f1cb5z,138,242,0|f1cb60,139,307,1|f99htz,139,307,1|f99hu0,138,242,0|fkfchz,138,242,0|fkfci0,139,307,1|frzkhz,139,307,1|frzki0,138,242,0|g35f5z,138,242,0|g35f60,139,307,1|gapn5z,139,307,1|gapn60,138,242,0|glvhtz,138,242,0|glvhu0,139,307,1|gtsohz,139,307,1|gtsoi0,138,242,0|h4lkhz,138,242,0|h4lki0,139,307,1|hcir5z,139,307,1|hcir60,138,242,0|hnbn5z,138,242,0|hnbn60,139,307,1|hv8ttz,139,307,1|hv8tu0,138,242,0|i6eohz,138,242,0|i6eoi0,139,307,1|idywhz,139,307,1|idywi0,138,242,0|ip4r5z,138,242,0|ip4r60,139,307,1|ix1xtz,139,307,1|ix1xu0,138,242,0|j7uttz,138,242,0|j7utu0,139,307,1|jff1tz,139,307,1|jff1u0,138,242,0|jqkwhz,138,242,0|jqkwi0,139,307,1|jyv1tz,139,307,1|jyv1u0,138,242,0|k8835z,138,242,0|k88360,139,307,1|khl4hz,139,307,1|khl4i0,138,242,0|kqy5tz,138,242,0|kqy5u0,139,307,1|l0b75z,139,307,1|l0b760,138,242,0|l9o8hz,138,242,0|l9o8i0,139,307,1|lj19tz,139,307,1|lj19u0,138,242,0|lseb5z,138,242,0|lseb60,139,307,1|m1rchz,139,307,1|m1rci0,138,242,0|mbhchz,138,242,0|mbhci0,139,307,1|mkudtz,139,307,1|mkudu0,138,242,0|mu7f5z,138,242,0|mu7f60,139,307,1|n3kghz,139,307,1|n3kgi0,138,242,0|ncxhtz,138,242,0|ncxhu0,139,307,1|nmaj5z,139,307,1|nmaj60,138,242,0|nvnkhz,138,242,0|nvnki0,139,307,1|o50ltz,139,307,1|o50lu0,138,242,0|oedn5z,138,242,0|oedn60,139,307,1|onqohz,139,307,1|onqoi0,138,242,0|ox3ptz,138,242,0|ox3pu0,139,307,1|p6gr5z,139,307,1|p6gr60,138,242,0|pg6r5z,138,242,0|pg6r60,139,307,1|ppjshz,139,307,1|ppjsi0,138,242,0|pywttz,138,242,0|pywtu0,139,307,1|q89v5z,139,307,1|q89v60,138,242,0|qhmwhz,138,242,0|qhmwi0,139,307,1|qqzxtz,139,307,1|qqzxu0,138,242,0|r0cz5z,138,242,0|r0cz60,139,307,1|r9q0hz,139,307,1|r9q0i0,138,242,0|rj31tz,138,242,0|rj31u0,139,307,1|rsg35z,139,307,1|rsg360,138,242,0|s1t4hz,138,242,0|s1t4i0,139,307,1|sbj4hz,139,307,1|sbj4i0,138,242,0|skw5tz,138,242,0|skw5u0,139,307,1|su975z,139,307,1|su9760,138,242,0|t3m8hz,138,242,0|t3m8i0,139,307,1|tcz9tz,139,307,1|tcz9u0,138,242,0|tmcb5z,138,242,0|tmcb60,139,307,1|tvpchz,139,307,1|tvpci0,138,242,0|u52dtz,138,242,0|u52du0,139,307,1|ueff5z,139,307,1|ueff60,138,242,0|unsghz,138,242,0|unsgi0,139,307,1|ux5htz,139,307,1|ux5hu0,138,242,0|v6vhtz,138,242,0|v6vhu0,139,307,1|vg8j5z,139,307,1|vg8j60,138,242,0|vplkhz,138,242,0|vplki0,139,307,1|vyyltz,139,307,1|vyylu0,138,242,0|w8bn5z,138,242,0|w8bn60,139,307,1|whoohz,139,307,1|whooi0,138,242,0|wr1ptz,138,242,0|wr1pu0,139,307,1|x0er5z,139,307,1|x0er60,138,242,0|x9rshz,138,242,0|x9rsi0,139,307,1|xj4ttz,139,307,1|xj4tu0,138,242,0|xshv5z,138,242,0|xshv60,139,307,1|y1uwhz,139,307,1|y1uwi0,138,242,0|ybkwhz,138,242,0|ybkwi0,139,307,1|ykxxtz,139,307,1|ykxxu0,138,242,0|yuaz5z,138,242,0|yuaz60,139,307,1|z3o0hz,139,307,1|z3o0i0,138,242,0|zd11tz,138,242,0|zd11u0,139,307,1|zme35z,139,307,1|zme360,138,242,0|zvr4hz,138,242,0|zvr4i0,139,307,1|10545tz,139,307,1|10545u0,138,242,0|10eh75z,138,242,0|10eh760,139,307,1|10nu8hz,139,307,1|10nu8i0,138,242,0|10xk8hz,138,242,0|10xk8i0,139,307,1|116x9tz,139,307,1|116x9u0,138,242,0|11gab5z,138,242,0|11gab60,139,307,1|11pnchz,139,307,1|11pnci0,138,242,0|11z0dtz,138,242,0|11z0du0,139,307,1|128df5z,139,307,1|128df60,138,242,0|12hqghz,138,242,0|12hqgi0,139,307,1|12r3htz,139,307,1|12r3hu0,138,242,0|130gj5z,138,242,0|130gj60,139,307,1|139tkhz,139,307,1|139tki0,138,242,0|13j6ltz,138,242,0|13j6lu0,139,307,1|13sjn5z,139,307,1|13sjn60,138,242,0|1429n5z,138,242,0|1429n60,139,307,1|14bmohz,139,307,1|14bmoi0,138,242,0|14kzptz,138,242,0|14kzpu0,139,307,1|14ucr5z,139,307,1|14ucr60,138,242,0|153pshz,138,242,0|153psi0,139,307,1|15d2ttz,139,307,1|15d2tu0,138,242,0|15mfv5z,138,242,0|15mfv60,139,307,1|15vswhz,139,307,1|15vswi0,138,242,0|1655xtz,138,242,0|1655xu0,139,307,1|16eiz5z,139,307,1|16eiz60,138,242,0|16nw0hz,138,242,0|16nw0i0,139,307,1|16xm0hz,139,307,1|16xm0i0,138,242,0|176z1tz,138,242,0|176z1u0,139,307,1|17gc35z,139,307,1|17gc360,138,242,0|17pp4hz,138,242,0|17pp4i0,139,307,1|17z25tz,139,307,1|17z25u0,138,242,0|188f75z,138,242,0|188f760,139,307,1|18hs8hz,139,307,1|18hs8i0,138,242,0|18r59tz,138,242,0|18r59u0,139,307,1|190ib5z,139,307,1|190ib60,138,242,0|199vchz,138,242,0|199vci0,139,307,1|19j8dtz,139,307,1|19j8du0,138,242,0|19sydtz,138,242,0|19sydu0,139,307,1|1a2bf5z,139,307,1|1a2bf60,138,242,0|1aboghz,138,242,0|1abogi0,139,307,1|1al1htz,139,307,1|1al1hu0,138,242,0|1auej5z,138,242,0|1auej60,139,307,1|1b3rkhz,139,307,1|1b3rki0,138,242,0|1bd4ltz,138,242,0|1bd4lu0,139,307,1|1bmhn5z,139,307,1|1bmhn60,138,242,0|1bvuohz,138,242,0|1bvuoi0,139,307,1|1c57ptz,139,307,1|1c57pu0,138,242,0|1cekr5z,138,242,0|1cekr60,139,307,1|1cnxshz,139,307,1|1cnxsi0,138,242,0|1cxnshz,138,242,0|1cxnsi0,139,307,1|1d70ttz,139,307,1|1d70tu0,138,242,0|1dgdv5z,138,242,0|1dgdv60,139,307,1|1dpqwhz,139,307,1|1dpqwi0,138,242,0|1dz3xtz,138,242,0|1dz3xu0,139,307,1|1e8gz5z,139,307,1|1e8gz60,138,242,0|1ehu0hz,138,242,0|1ehu0i0,139,307,1|1er71tz,139,307,1|1er71u0,138,242,0|1f0k35z,138,242,0|1f0k360,139,307,1|1f9x4hz,139,307,1|1f9x4i0,138,242,0|1fjn4hz,138,242,0|1fjn4i0,139,307,1|1ft05tz,139,307,1|1ft05u0,138,242,0|1g2d75z,138,242,0|1g2d760,139,307,1|1gbq8hz,139,307,1|1gbq8i0,138,242,0|1gl39tz,138,242,0|1gl39u0,139,307,1|1gugb5z,139,307,1|1gugb60,138,242,0|1h3tchz,138,242,0|1h3tci0,139,307,1|1hd6dtz,139,307,1|1hd6du0,138,242,0|1hmjf5z,138,242,0|1hmjf60,139,307,1|1hvwghz,139,307,1|1hvwgi0,138,242,0|1i59htz,138,242,0|1i59hu0,139,307,1|1iemj5z,139,307,1|1iemj60,138,242,0|1iocj5z,138,242,0|1iocj60,139,307,1|1ixpkhz,139,307,1|1ixpki0,138,242,0|1j72ltz,138,242,0|1j72lu0,139,307,1|1jgfn5z,139,307,1|1jgfn60,138,242,0|1jpsohz,138,242,0|1jpsoi0,139,307,1|1jz5ptz,139,307,1|1jz5pu0,138,242,0|1k8ir5z,138,242,0|1k8ir60,139,307,1|1khvshz,139,307,1|1khvsi0,138,242,0|1kr8ttz,138,242,0|1kr8tu0,139,307,1|1l0lv5z,139,307,1|1l0lv60,138,242,0|1l9ywhz,138,242,0|1l9ywi0,139,307,1|1ljowhz,139,307,1|1ljowi0,138,242,0|1lt1xtz,138,242,0|1lt1xu0,139,307,1|1m2ez5z,139,307,1|1m2ez60,138,242,0|1mbs0hz,138,242,0|1mbs0i0,139,307,1|1ml51tz,139,307,1|1ml51u0,138,242,0|1mui35z,138,242,0|1mui360,139,307,1|1n3v4hz,139,307,1|1n3v4i0,138,242,0|1nd85tz,138,242,0|1nd85u0,139,307,1|1nml75z,139,307,1|1nml760,138,242,0|1nvy8hz,138,242,0|1nvy8i0,139,307,1|1o5b9tz,139,307,1|1o5b9u0,138,242,0|1of19tz,138,242,0|1of19u0,139,307,1|1ooeb5z,139,307,1|1ooeb60,138,242,0|1oxrchz,138,242,0|1oxrci0,139,307,1|1p74dtz,139,307,1|1p74du0,138,242,0|1pghf5z,138,242,0|1pghf60,139,307,1|1ppughz,139,307,1|1ppugi0,138,242,0|1pz7htz,138,242,0|1pz7hu0,139,307,1|1q8kj5z,139,307,1|1q8kj60,138,242,0|1qhxkhz,138,242,0|1qhxki0,139,307,1|1qraltz,139,307,1|1qralu0,138,242,0|1r0nn5z,138,242,0|1r0nn60,139,307,1|1ra0ohz,139,307,1|1ra0oi0,138,242,0|1rjqohz,138,242,0|1rjqoi0,139,307,1|1rt3ptz,139,307,1|1rt3pu0,138,242,0|1s2gr5z,138,242,0|1s2gr60,139,307,1|1sbtshz,139,307,1|1sbtsi0,138,242,0|1sl6ttz,138,242,0|1sl6tu0,139,307,1|1sujv5z,139,307,1|1sujv60,138,242,0|1t3wwhz,138,242,0|1t3wwi0,139,307,1|1td9xtz,139,307,1|1td9xu0,138,242,0|1tmmz5z,138,242,0|1tmmz60,139,307,1|1tw00hz,139,307,1|1tw00i0,138,242,0|1u5q0hz,138,242,0|1u5q0i0,139,307,1|1uf31tz,139,307,1|1uf31u0,138,242,0|1uog35z,138,242,0|1uog360,139,307,1|1uxt4hz,139,307,1|1uxt4i0,138,242,0|1v765tz,138,242,0|1v765u0,139,307,1|1vgj75z,139,307,1|1vgj760,138,242,0|1vpw8hz,138,242,0|1vpw8i0,139,307,1|NaN,139,307,1\",\"Australia/Brisbane|,0,308,0|-1354kc9,0,308,0|-1354kc8,94,189,0|-rnsrk1,94,189,0|-rnsrk0,95,184,1|-rjj281,95,184,1|-rjj280,94,189,0|-em3i81,94,189,0|-em3i80,95,184,1|-ehme81,95,184,1|-ehme80,94,189,0|-e89cw1,94,189,0|-e89cw0,95,184,1|-dywbk1,95,184,1|-dywbk0,94,189,0|-dp6bk1,94,189,0|-dp6bk0,95,184,1|-dg68w1,95,184,1|-dg68w0,94,189,0|ycf3z,94,189,0|ycf40,95,184,1|14gsfz,95,184,1|14gsg0,94,189,0|acgn3z,94,189,0|acgn40,95,184,1|aixz3z,95,184,1|aixz40,94,189,0|av6prz,94,189,0|av6ps0,95,184,1|b1o1rz,95,184,1|b1o1s0,94,189,0|bdwsfz,94,189,0|bdwsg0,95,184,1|bke4fz,95,184,1|bke4g0,94,189,0|NaN,94,189,0\",\"Australia/Broken_Hill|,0,309,0|-133j3j1,0,309,0|-133j3j0,94,189,0|-12a9fs1,94,189,0|-12a9fs0,138,218,0|-10vsp01,138,218,0|-10vsp00,138,242,0|-rnsq61,138,242,0|-rnsq60,139,307,1|-rjj0u1,139,307,1|-rjj0u0,138,242,0|-em3gu1,138,242,0|-em3gu0,139,307,1|-ehmcu1,139,307,1|-ehmcu0,138,242,0|-e89bi1,138,242,0|-e89bi0,139,307,1|-dywa61,139,307,1|-dywa60,138,242,0|-dp6a61,138,242,0|-dp6a60,139,307,1|-dg67i1,139,307,1|-dg67i0,138,242,0|ycghz,138,242,0|ycgi0,139,307,1|14gttz,139,307,1|14gtu0,138,242,0|1h2j5z,138,242,0|1h2j60,139,307,1|1njv5z,139,307,1|1njv60,138,242,0|1zsltz,138,242,0|1zslu0,139,307,1|269xtz,139,307,1|269xu0,138,242,0|2iiohz,138,242,0|2iioi0,139,307,1|2p00hz,139,307,1|2p00i0,138,242,0|318r5z,138,242,0|318r60,139,307,1|3831tz,139,307,1|3831u0,138,242,0|3kbshz,138,242,0|3kbsi0,139,307,1|3qt4hz,139,307,1|3qt4i0,138,242,0|431v5z,138,242,0|431v60,139,307,1|49j75z,139,307,1|49j760,138,242,0|4lrxtz,138,242,0|4lrxu0,139,307,1|4s99tz,139,307,1|4s99u0,138,242,0|54i0hz,138,242,0|54i0i0,139,307,1|5azchz,139,307,1|5azci0,138,242,0|5n835z,138,242,0|5n8360,139,307,1|5tpf5z,139,307,1|5tpf60,138,242,0|65y5tz,138,242,0|65y5u0,139,307,1|6e8b5z,139,307,1|6e8b60,138,242,0|6p175z,138,242,0|6p1760,139,307,1|6vij5z,139,307,1|6vij60,138,242,0|77r9tz,138,242,0|77r9u0,139,307,1|7e8ltz,139,307,1|7e8lu0,138,242,0|7qhchz,138,242,0|7qhci0,139,307,1|7wyohz,139,307,1|7wyoi0,138,242,0|897f5z,138,242,0|897f60,139,307,1|8geohz,139,307,1|8geoi0,138,242,0|8rkj5z,138,242,0|8rkj60,139,307,1|8z4r5z,139,307,1|8z4r60,138,242,0|9ankhz,138,242,0|9anki0,139,307,1|9i7shz,139,307,1|9i7si0,138,242,0|9tqltz,138,242,0|9tqlu0,139,307,1|a0xv5z,139,307,1|a0xv60,138,242,0|acgohz,138,242,0|acgoi0,139,307,1|aiy0hz,139,307,1|aiy0i0,138,242,0|av6r5z,138,242,0|av6r60,139,307,1|b1o35z,139,307,1|b1o360,138,242,0|bdwttz,138,242,0|bdwtu0,139,307,1|bke5tz,139,307,1|bke5u0,138,242,0|bwmwhz,138,242,0|bwmwi0,139,307,1|c3h75z,139,307,1|c3h760,138,242,0|cfpxtz,138,242,0|cfpxu0,139,307,1|cm79tz,139,307,1|cm79u0,138,242,0|cyg0hz,138,242,0|cyg0i0,139,307,1|d4xchz,139,307,1|d4xci0,138,242,0|dh635z,138,242,0|dh6360,139,307,1|dp39tz,139,307,1|dp39u0,138,242,0|dzw5tz,138,242,0|dzw5u0,139,307,1|e7tchz,139,307,1|e7tci0,138,242,0|eim8hz,138,242,0|eim8i0,139,307,1|eqjf5z,139,307,1|eqjf60,138,242,0|f1cb5z,138,242,0|f1cb60,139,307,1|f99htz,139,307,1|f99hu0,138,242,0|fkfchz,138,242,0|fkfci0,139,307,1|frzkhz,139,307,1|frzki0,138,242,0|g35f5z,138,242,0|g35f60,139,307,1|gapn5z,139,307,1|gapn60,138,242,0|glvhtz,138,242,0|glvhu0,139,307,1|gtsohz,139,307,1|gtsoi0,138,242,0|h4lkhz,138,242,0|h4lki0,139,307,1|hcir5z,139,307,1|hcir60,138,242,0|hnbn5z,138,242,0|hnbn60,139,307,1|hv8ttz,139,307,1|hv8tu0,138,242,0|i6eohz,138,242,0|i6eoi0,139,307,1|idywhz,139,307,1|idywi0,138,242,0|ip4r5z,138,242,0|ip4r60,139,307,1|ix1xtz,139,307,1|ix1xu0,138,242,0|j7uttz,138,242,0|j7utu0,139,307,1|jff1tz,139,307,1|jff1u0,138,242,0|jqkwhz,138,242,0|jqkwi0,139,307,1|jyv1tz,139,307,1|jyv1u0,138,242,0|k8835z,138,242,0|k88360,139,307,1|khl4hz,139,307,1|khl4i0,138,242,0|kqy5tz,138,242,0|kqy5u0,139,307,1|l0b75z,139,307,1|l0b760,138,242,0|l9o8hz,138,242,0|l9o8i0,139,307,1|lj19tz,139,307,1|lj19u0,138,242,0|lseb5z,138,242,0|lseb60,139,307,1|m1rchz,139,307,1|m1rci0,138,242,0|mbhchz,138,242,0|mbhci0,139,307,1|mkudtz,139,307,1|mkudu0,138,242,0|mu7f5z,138,242,0|mu7f60,139,307,1|n3kghz,139,307,1|n3kgi0,138,242,0|ncxhtz,138,242,0|ncxhu0,139,307,1|nmaj5z,139,307,1|nmaj60,138,242,0|nvnkhz,138,242,0|nvnki0,139,307,1|o50ltz,139,307,1|o50lu0,138,242,0|oedn5z,138,242,0|oedn60,139,307,1|onqohz,139,307,1|onqoi0,138,242,0|ox3ptz,138,242,0|ox3pu0,139,307,1|p6gr5z,139,307,1|p6gr60,138,242,0|pg6r5z,138,242,0|pg6r60,139,307,1|ppjshz,139,307,1|ppjsi0,138,242,0|pywttz,138,242,0|pywtu0,139,307,1|q89v5z,139,307,1|q89v60,138,242,0|qhmwhz,138,242,0|qhmwi0,139,307,1|qqzxtz,139,307,1|qqzxu0,138,242,0|r0cz5z,138,242,0|r0cz60,139,307,1|r9q0hz,139,307,1|r9q0i0,138,242,0|rj31tz,138,242,0|rj31u0,139,307,1|rsg35z,139,307,1|rsg360,138,242,0|s1t4hz,138,242,0|s1t4i0,139,307,1|sbj4hz,139,307,1|sbj4i0,138,242,0|skw5tz,138,242,0|skw5u0,139,307,1|su975z,139,307,1|su9760,138,242,0|t3m8hz,138,242,0|t3m8i0,139,307,1|tcz9tz,139,307,1|tcz9u0,138,242,0|tmcb5z,138,242,0|tmcb60,139,307,1|tvpchz,139,307,1|tvpci0,138,242,0|u52dtz,138,242,0|u52du0,139,307,1|ueff5z,139,307,1|ueff60,138,242,0|unsghz,138,242,0|unsgi0,139,307,1|ux5htz,139,307,1|ux5hu0,138,242,0|v6vhtz,138,242,0|v6vhu0,139,307,1|vg8j5z,139,307,1|vg8j60,138,242,0|vplkhz,138,242,0|vplki0,139,307,1|vyyltz,139,307,1|vyylu0,138,242,0|w8bn5z,138,242,0|w8bn60,139,307,1|whoohz,139,307,1|whooi0,138,242,0|wr1ptz,138,242,0|wr1pu0,139,307,1|x0er5z,139,307,1|x0er60,138,242,0|x9rshz,138,242,0|x9rsi0,139,307,1|xj4ttz,139,307,1|xj4tu0,138,242,0|xshv5z,138,242,0|xshv60,139,307,1|y1uwhz,139,307,1|y1uwi0,138,242,0|ybkwhz,138,242,0|ybkwi0,139,307,1|ykxxtz,139,307,1|ykxxu0,138,242,0|yuaz5z,138,242,0|yuaz60,139,307,1|z3o0hz,139,307,1|z3o0i0,138,242,0|zd11tz,138,242,0|zd11u0,139,307,1|zme35z,139,307,1|zme360,138,242,0|zvr4hz,138,242,0|zvr4i0,139,307,1|10545tz,139,307,1|10545u0,138,242,0|10eh75z,138,242,0|10eh760,139,307,1|10nu8hz,139,307,1|10nu8i0,138,242,0|10xk8hz,138,242,0|10xk8i0,139,307,1|116x9tz,139,307,1|116x9u0,138,242,0|11gab5z,138,242,0|11gab60,139,307,1|11pnchz,139,307,1|11pnci0,138,242,0|11z0dtz,138,242,0|11z0du0,139,307,1|128df5z,139,307,1|128df60,138,242,0|12hqghz,138,242,0|12hqgi0,139,307,1|12r3htz,139,307,1|12r3hu0,138,242,0|130gj5z,138,242,0|130gj60,139,307,1|139tkhz,139,307,1|139tki0,138,242,0|13j6ltz,138,242,0|13j6lu0,139,307,1|13sjn5z,139,307,1|13sjn60,138,242,0|1429n5z,138,242,0|1429n60,139,307,1|14bmohz,139,307,1|14bmoi0,138,242,0|14kzptz,138,242,0|14kzpu0,139,307,1|14ucr5z,139,307,1|14ucr60,138,242,0|153pshz,138,242,0|153psi0,139,307,1|15d2ttz,139,307,1|15d2tu0,138,242,0|15mfv5z,138,242,0|15mfv60,139,307,1|15vswhz,139,307,1|15vswi0,138,242,0|1655xtz,138,242,0|1655xu0,139,307,1|16eiz5z,139,307,1|16eiz60,138,242,0|16nw0hz,138,242,0|16nw0i0,139,307,1|16xm0hz,139,307,1|16xm0i0,138,242,0|176z1tz,138,242,0|176z1u0,139,307,1|17gc35z,139,307,1|17gc360,138,242,0|17pp4hz,138,242,0|17pp4i0,139,307,1|17z25tz,139,307,1|17z25u0,138,242,0|188f75z,138,242,0|188f760,139,307,1|18hs8hz,139,307,1|18hs8i0,138,242,0|18r59tz,138,242,0|18r59u0,139,307,1|190ib5z,139,307,1|190ib60,138,242,0|199vchz,138,242,0|199vci0,139,307,1|19j8dtz,139,307,1|19j8du0,138,242,0|19sydtz,138,242,0|19sydu0,139,307,1|1a2bf5z,139,307,1|1a2bf60,138,242,0|1aboghz,138,242,0|1abogi0,139,307,1|1al1htz,139,307,1|1al1hu0,138,242,0|1auej5z,138,242,0|1auej60,139,307,1|1b3rkhz,139,307,1|1b3rki0,138,242,0|1bd4ltz,138,242,0|1bd4lu0,139,307,1|1bmhn5z,139,307,1|1bmhn60,138,242,0|1bvuohz,138,242,0|1bvuoi0,139,307,1|1c57ptz,139,307,1|1c57pu0,138,242,0|1cekr5z,138,242,0|1cekr60,139,307,1|1cnxshz,139,307,1|1cnxsi0,138,242,0|1cxnshz,138,242,0|1cxnsi0,139,307,1|1d70ttz,139,307,1|1d70tu0,138,242,0|1dgdv5z,138,242,0|1dgdv60,139,307,1|1dpqwhz,139,307,1|1dpqwi0,138,242,0|1dz3xtz,138,242,0|1dz3xu0,139,307,1|1e8gz5z,139,307,1|1e8gz60,138,242,0|1ehu0hz,138,242,0|1ehu0i0,139,307,1|1er71tz,139,307,1|1er71u0,138,242,0|1f0k35z,138,242,0|1f0k360,139,307,1|1f9x4hz,139,307,1|1f9x4i0,138,242,0|1fjn4hz,138,242,0|1fjn4i0,139,307,1|1ft05tz,139,307,1|1ft05u0,138,242,0|1g2d75z,138,242,0|1g2d760,139,307,1|1gbq8hz,139,307,1|1gbq8i0,138,242,0|1gl39tz,138,242,0|1gl39u0,139,307,1|1gugb5z,139,307,1|1gugb60,138,242,0|1h3tchz,138,242,0|1h3tci0,139,307,1|1hd6dtz,139,307,1|1hd6du0,138,242,0|1hmjf5z,138,242,0|1hmjf60,139,307,1|1hvwghz,139,307,1|1hvwgi0,138,242,0|1i59htz,138,242,0|1i59hu0,139,307,1|1iemj5z,139,307,1|1iemj60,138,242,0|1iocj5z,138,242,0|1iocj60,139,307,1|1ixpkhz,139,307,1|1ixpki0,138,242,0|1j72ltz,138,242,0|1j72lu0,139,307,1|1jgfn5z,139,307,1|1jgfn60,138,242,0|1jpsohz,138,242,0|1jpsoi0,139,307,1|1jz5ptz,139,307,1|1jz5pu0,138,242,0|1k8ir5z,138,242,0|1k8ir60,139,307,1|1khvshz,139,307,1|1khvsi0,138,242,0|1kr8ttz,138,242,0|1kr8tu0,139,307,1|1l0lv5z,139,307,1|1l0lv60,138,242,0|1l9ywhz,138,242,0|1l9ywi0,139,307,1|1ljowhz,139,307,1|1ljowi0,138,242,0|1lt1xtz,138,242,0|1lt1xu0,139,307,1|1m2ez5z,139,307,1|1m2ez60,138,242,0|1mbs0hz,138,242,0|1mbs0i0,139,307,1|1ml51tz,139,307,1|1ml51u0,138,242,0|1mui35z,138,242,0|1mui360,139,307,1|1n3v4hz,139,307,1|1n3v4i0,138,242,0|1nd85tz,138,242,0|1nd85u0,139,307,1|1nml75z,139,307,1|1nml760,138,242,0|1nvy8hz,138,242,0|1nvy8i0,139,307,1|1o5b9tz,139,307,1|1o5b9u0,138,242,0|1of19tz,138,242,0|1of19u0,139,307,1|1ooeb5z,139,307,1|1ooeb60,138,242,0|1oxrchz,138,242,0|1oxrci0,139,307,1|1p74dtz,139,307,1|1p74du0,138,242,0|1pghf5z,138,242,0|1pghf60,139,307,1|1ppughz,139,307,1|1ppugi0,138,242,0|1pz7htz,138,242,0|1pz7hu0,139,307,1|1q8kj5z,139,307,1|1q8kj60,138,242,0|1qhxkhz,138,242,0|1qhxki0,139,307,1|1qraltz,139,307,1|1qralu0,138,242,0|1r0nn5z,138,242,0|1r0nn60,139,307,1|1ra0ohz,139,307,1|1ra0oi0,138,242,0|1rjqohz,138,242,0|1rjqoi0,139,307,1|1rt3ptz,139,307,1|1rt3pu0,138,242,0|1s2gr5z,138,242,0|1s2gr60,139,307,1|1sbtshz,139,307,1|1sbtsi0,138,242,0|1sl6ttz,138,242,0|1sl6tu0,139,307,1|1sujv5z,139,307,1|1sujv60,138,242,0|1t3wwhz,138,242,0|1t3wwi0,139,307,1|1td9xtz,139,307,1|1td9xu0,138,242,0|1tmmz5z,138,242,0|1tmmz60,139,307,1|1tw00hz,139,307,1|1tw00i0,138,242,0|1u5q0hz,138,242,0|1u5q0i0,139,307,1|1uf31tz,139,307,1|1uf31u0,138,242,0|1uog35z,138,242,0|1uog360,139,307,1|1uxt4hz,139,307,1|1uxt4i0,138,242,0|1v765tz,138,242,0|1v765u0,139,307,1|1vgj75z,139,307,1|1vgj760,138,242,0|1vpw8hz,138,242,0|1vpw8i0,139,307,1|NaN,139,307,1\",\"Australia/Currie|,0,310,0|-12smja5,0,310,0|-12smja4,94,189,0|-rsj4w1,94,189,0|-rsj4w0,95,184,1|-rjj281,95,184,1|-rjj280,94,189,0|-r8d7k1,94,189,0|-r8d7k0,95,184,1|-r1vvk1,95,184,1|-r1vvk0,94,189,0|-qpn4w1,94,189,0|-qpn4w0,95,184,1|-qj5sw1,95,184,1|-qj5sw0,94,189,0|-em3i81,94,189,0|-em3i80,95,184,1|-ehme81,95,184,1|-ehme80,94,189,0|-e89cw1,94,189,0|-e89cw0,95,184,1|-dywbk1,95,184,1|-dywbk0,94,189,0|-dp6bk1,94,189,0|-dp6bk0,95,184,1|-dg68w1,95,184,1|-dg68w0,94,189,0|-16cow1,94,189,0|-16cow0,95,184,1|-wznk1,95,184,1|-wznk0,94,189,0|-m6rk1,94,189,0|-m6rk0,95,184,1|-fcgw1,95,184,1|-fcgw0,94,189,0|-3gow1,94,189,0|-3gow0,95,184,1|3dlrz,95,184,1|3dls0,94,189,0|f9drz,94,189,0|f9ds0,95,184,1|mgn3z,95,184,1|mgn40,94,189,0|ycf3z,94,189,0|ycf40,95,184,1|14gsfz,95,184,1|14gsg0,94,189,0|1h2hrz,94,189,0|1h2hs0,95,184,1|1njtrz,95,184,1|1njts0,94,189,0|1zskfz,94,189,0|1zskg0,95,184,1|269wfz,95,184,1|269wg0,94,189,0|2iin3z,94,189,0|2iin40,95,184,1|2ozz3z,95,184,1|2ozz40,94,189,0|318prz,94,189,0|318ps0,95,184,1|3830fz,95,184,1|3830g0,94,189,0|3kbr3z,94,189,0|3kbr40,95,184,1|3qt33z,95,184,1|3qt340,94,189,0|431trz,94,189,0|431ts0,95,184,1|49j5rz,95,184,1|49j5s0,94,189,0|4lrwfz,94,189,0|4lrwg0,95,184,1|4s98fz,95,184,1|4s98g0,94,189,0|54hz3z,94,189,0|54hz40,95,184,1|5azb3z,95,184,1|5azb40,94,189,0|5n81rz,94,189,0|5n81s0,95,184,1|5tpdrz,95,184,1|5tpds0,94,189,0|65y4fz,94,189,0|65y4g0,95,184,1|6dvb3z,95,184,1|6dvb40,94,189,0|6p15rz,94,189,0|6p15s0,95,184,1|6wldrz,95,184,1|6wlds0,94,189,0|77r8fz,94,189,0|77r8g0,95,184,1|7e8kfz,95,184,1|7e8kg0,94,189,0|7qhb3z,94,189,0|7qhb40,95,184,1|7wyn3z,95,184,1|7wyn40,94,189,0|897drz,94,189,0|897ds0,95,184,1|8foprz,95,184,1|8fops0,94,189,0|8rkhrz,94,189,0|8rkhs0,95,184,1|8z4prz,95,184,1|8z4ps0,94,189,0|9anj3z,94,189,0|9anj40,95,184,1|9i7r3z,95,184,1|9i7r40,94,189,0|9tqkfz,94,189,0|9tqkg0,95,184,1|a0xtrz,95,184,1|a0xts0,94,189,0|acgn3z,94,189,0|acgn40,95,184,1|ajnwfz,95,184,1|ajnwg0,94,189,0|av6prz,94,189,0|av6ps0,95,184,1|b33wfz,95,184,1|b33wg0,94,189,0|bctwfz,94,189,0|bctwg0,95,184,1|bltz3z,95,184,1|bltz40,94,189,0|bvjz3z,94,189,0|bvjz40,95,184,1|c4k1rz,95,184,1|c4k1s0,94,189,0|cea1rz,94,189,0|cea1s0,95,184,1|cna4fz,95,184,1|cna4g0,94,189,0|cx04fz,94,189,0|cx04g0,95,184,1|d6073z,95,184,1|d60740,94,189,0|dfq73z,94,189,0|dfq740,95,184,1|dp38fz,95,184,1|dp38g0,94,189,0|dyt8fz,94,189,0|dyt8g0,95,184,1|e7tb3z,95,184,1|e7tb40,94,189,0|ehjb3z,94,189,0|ehjb40,95,184,1|eqjdrz,95,184,1|eqjds0,94,189,0|f09drz,94,189,0|f09ds0,95,184,1|f99gfz,95,184,1|f99gg0,94,189,0|fizgfz,94,189,0|fizgg0,95,184,1|frzj3z,95,184,1|frzj40,94,189,0|fzwprz,94,189,0|fzwps0,95,184,1|gaplrz,95,184,1|gapls0,94,189,0|gkskfz,94,189,0|gkskg0,95,184,1|gtsn3z,95,184,1|gtsn40,94,189,0|h3in3z,94,189,0|h3in40,95,184,1|hciprz,95,184,1|hcips0,94,189,0|hm8prz,94,189,0|hm8ps0,95,184,1|hv8sfz,95,184,1|hv8sg0,94,189,0|i4ysfz,94,189,0|i4ysg0,95,184,1|idyv3z,95,184,1|idyv40,94,189,0|inov3z,94,189,0|inov40,95,184,1|ix1wfz,95,184,1|ix1wg0,94,189,0|j6exrz,94,189,0|j6exs0,95,184,1|jff0fz,95,184,1|jff0g0,94,189,0|jphz3z,94,189,0|jphz40,95,184,1|jyv0fz,95,184,1|jyv0g0,94,189,0|k881rz,94,189,0|k881s0,95,184,1|khl33z,95,184,1|khl340,94,189,0|kqy4fz,94,189,0|kqy4g0,95,184,1|l0b5rz,95,184,1|l0b5s0,94,189,0|l9o73z,94,189,0|l9o740,95,184,1|lj18fz,95,184,1|lj18g0,94,189,0|lse9rz,94,189,0|lse9s0,95,184,1|m1rb3z,95,184,1|m1rb40,94,189,0|mbhb3z,94,189,0|mbhb40,95,184,1|mkucfz,95,184,1|mkucg0,94,189,0|mu7drz,94,189,0|mu7ds0,95,184,1|n3kf3z,95,184,1|n3kf40,94,189,0|ncxgfz,94,189,0|ncxgg0,95,184,1|nmahrz,95,184,1|nmahs0,94,189,0|nvnj3z,94,189,0|nvnj40,95,184,1|o50kfz,95,184,1|o50kg0,94,189,0|oedlrz,94,189,0|oedls0,95,184,1|onqn3z,95,184,1|onqn40,94,189,0|ox3ofz,94,189,0|ox3og0,95,184,1|p6gprz,95,184,1|p6gps0,94,189,0|pg6prz,94,189,0|pg6ps0,95,184,1|ppjr3z,95,184,1|ppjr40,94,189,0|pywsfz,94,189,0|pywsg0,95,184,1|q89trz,95,184,1|q89ts0,94,189,0|qhmv3z,94,189,0|qhmv40,95,184,1|qqzwfz,95,184,1|qqzwg0,94,189,0|r0cxrz,94,189,0|r0cxs0,95,184,1|r9pz3z,95,184,1|r9pz40,94,189,0|rj30fz,94,189,0|rj30g0,95,184,1|rsg1rz,95,184,1|rsg1s0,94,189,0|s1t33z,94,189,0|s1t340,95,184,1|sbj33z,95,184,1|sbj340,94,189,0|skw4fz,94,189,0|skw4g0,95,184,1|su95rz,95,184,1|su95s0,94,189,0|t3m73z,94,189,0|t3m740,95,184,1|tcz8fz,95,184,1|tcz8g0,94,189,0|tmc9rz,94,189,0|tmc9s0,95,184,1|tvpb3z,95,184,1|tvpb40,94,189,0|u52cfz,94,189,0|u52cg0,95,184,1|uefdrz,95,184,1|uefds0,94,189,0|unsf3z,94,189,0|unsf40,95,184,1|ux5gfz,95,184,1|ux5gg0,94,189,0|v6vgfz,94,189,0|v6vgg0,95,184,1|vg8hrz,95,184,1|vg8hs0,94,189,0|vplj3z,94,189,0|vplj40,95,184,1|vyykfz,95,184,1|vyykg0,94,189,0|w8blrz,94,189,0|w8bls0,95,184,1|whon3z,95,184,1|whon40,94,189,0|wr1ofz,94,189,0|wr1og0,95,184,1|x0eprz,95,184,1|x0eps0,94,189,0|x9rr3z,94,189,0|x9rr40,95,184,1|xj4sfz,95,184,1|xj4sg0,94,189,0|xshtrz,94,189,0|xshts0,95,184,1|y1uv3z,95,184,1|y1uv40,94,189,0|ybkv3z,94,189,0|ybkv40,95,184,1|ykxwfz,95,184,1|ykxwg0,94,189,0|yuaxrz,94,189,0|yuaxs0,95,184,1|z3nz3z,95,184,1|z3nz40,94,189,0|zd10fz,94,189,0|zd10g0,95,184,1|zme1rz,95,184,1|zme1s0,94,189,0|zvr33z,94,189,0|zvr340,95,184,1|10544fz,95,184,1|10544g0,94,189,0|10eh5rz,94,189,0|10eh5s0,95,184,1|10nu73z,95,184,1|10nu740,94,189,0|10xk73z,94,189,0|10xk740,95,184,1|116x8fz,95,184,1|116x8g0,94,189,0|11ga9rz,94,189,0|11ga9s0,95,184,1|11pnb3z,95,184,1|11pnb40,94,189,0|11z0cfz,94,189,0|11z0cg0,95,184,1|128ddrz,95,184,1|128dds0,94,189,0|12hqf3z,94,189,0|12hqf40,95,184,1|12r3gfz,95,184,1|12r3gg0,94,189,0|130ghrz,94,189,0|130ghs0,95,184,1|139tj3z,95,184,1|139tj40,94,189,0|13j6kfz,94,189,0|13j6kg0,95,184,1|13sjlrz,95,184,1|13sjls0,94,189,0|1429lrz,94,189,0|1429ls0,95,184,1|14bmn3z,95,184,1|14bmn40,94,189,0|14kzofz,94,189,0|14kzog0,95,184,1|14ucprz,95,184,1|14ucps0,94,189,0|153pr3z,94,189,0|153pr40,95,184,1|15d2sfz,95,184,1|15d2sg0,94,189,0|15mftrz,94,189,0|15mfts0,95,184,1|15vsv3z,95,184,1|15vsv40,94,189,0|1655wfz,94,189,0|1655wg0,95,184,1|16eixrz,95,184,1|16eixs0,94,189,0|16nvz3z,94,189,0|16nvz40,95,184,1|16xlz3z,95,184,1|16xlz40,94,189,0|176z0fz,94,189,0|176z0g0,95,184,1|17gc1rz,95,184,1|17gc1s0,94,189,0|17pp33z,94,189,0|17pp340,95,184,1|17z24fz,95,184,1|17z24g0,94,189,0|188f5rz,94,189,0|188f5s0,95,184,1|18hs73z,95,184,1|18hs740,94,189,0|18r58fz,94,189,0|18r58g0,95,184,1|190i9rz,95,184,1|190i9s0,94,189,0|199vb3z,94,189,0|199vb40,95,184,1|19j8cfz,95,184,1|19j8cg0,94,189,0|19sycfz,94,189,0|19sycg0,95,184,1|1a2bdrz,95,184,1|1a2bds0,94,189,0|1abof3z,94,189,0|1abof40,95,184,1|1al1gfz,95,184,1|1al1gg0,94,189,0|1auehrz,94,189,0|1auehs0,95,184,1|1b3rj3z,95,184,1|1b3rj40,94,189,0|1bd4kfz,94,189,0|1bd4kg0,95,184,1|1bmhlrz,95,184,1|1bmhls0,94,189,0|1bvun3z,94,189,0|1bvun40,95,184,1|1c57ofz,95,184,1|1c57og0,94,189,0|1cekprz,94,189,0|1cekps0,95,184,1|1cnxr3z,95,184,1|1cnxr40,94,189,0|1cxnr3z,94,189,0|1cxnr40,95,184,1|1d70sfz,95,184,1|1d70sg0,94,189,0|1dgdtrz,94,189,0|1dgdts0,95,184,1|1dpqv3z,95,184,1|1dpqv40,94,189,0|1dz3wfz,94,189,0|1dz3wg0,95,184,1|1e8gxrz,95,184,1|1e8gxs0,94,189,0|1ehtz3z,94,189,0|1ehtz40,95,184,1|1er70fz,95,184,1|1er70g0,94,189,0|1f0k1rz,94,189,0|1f0k1s0,95,184,1|1f9x33z,95,184,1|1f9x340,94,189,0|1fjn33z,94,189,0|1fjn340,95,184,1|1ft04fz,95,184,1|1ft04g0,94,189,0|1g2d5rz,94,189,0|1g2d5s0,95,184,1|1gbq73z,95,184,1|1gbq740,94,189,0|1gl38fz,94,189,0|1gl38g0,95,184,1|1gug9rz,95,184,1|1gug9s0,94,189,0|1h3tb3z,94,189,0|1h3tb40,95,184,1|1hd6cfz,95,184,1|1hd6cg0,94,189,0|1hmjdrz,94,189,0|1hmjds0,95,184,1|1hvwf3z,95,184,1|1hvwf40,94,189,0|1i59gfz,94,189,0|1i59gg0,95,184,1|1iemhrz,95,184,1|1iemhs0,94,189,0|1iochrz,94,189,0|1iochs0,95,184,1|1ixpj3z,95,184,1|1ixpj40,94,189,0|1j72kfz,94,189,0|1j72kg0,95,184,1|1jgflrz,95,184,1|1jgfls0,94,189,0|1jpsn3z,94,189,0|1jpsn40,95,184,1|1jz5ofz,95,184,1|1jz5og0,94,189,0|1k8iprz,94,189,0|1k8ips0,95,184,1|1khvr3z,95,184,1|1khvr40,94,189,0|1kr8sfz,94,189,0|1kr8sg0,95,184,1|1l0ltrz,95,184,1|1l0lts0,94,189,0|1l9yv3z,94,189,0|1l9yv40,95,184,1|1ljov3z,95,184,1|1ljov40,94,189,0|1lt1wfz,94,189,0|1lt1wg0,95,184,1|1m2exrz,95,184,1|1m2exs0,94,189,0|1mbrz3z,94,189,0|1mbrz40,95,184,1|1ml50fz,95,184,1|1ml50g0,94,189,0|1mui1rz,94,189,0|1mui1s0,95,184,1|1n3v33z,95,184,1|1n3v340,94,189,0|1nd84fz,94,189,0|1nd84g0,95,184,1|1nml5rz,95,184,1|1nml5s0,94,189,0|1nvy73z,94,189,0|1nvy740,95,184,1|1o5b8fz,95,184,1|1o5b8g0,94,189,0|1of18fz,94,189,0|1of18g0,95,184,1|1ooe9rz,95,184,1|1ooe9s0,94,189,0|1oxrb3z,94,189,0|1oxrb40,95,184,1|1p74cfz,95,184,1|1p74cg0,94,189,0|1pghdrz,94,189,0|1pghds0,95,184,1|1ppuf3z,95,184,1|1ppuf40,94,189,0|1pz7gfz,94,189,0|1pz7gg0,95,184,1|1q8khrz,95,184,1|1q8khs0,94,189,0|1qhxj3z,94,189,0|1qhxj40,95,184,1|1qrakfz,95,184,1|1qrakg0,94,189,0|1r0nlrz,94,189,0|1r0nls0,95,184,1|1ra0n3z,95,184,1|1ra0n40,94,189,0|1rjqn3z,94,189,0|1rjqn40,95,184,1|1rt3ofz,95,184,1|1rt3og0,94,189,0|1s2gprz,94,189,0|1s2gps0,95,184,1|1sbtr3z,95,184,1|1sbtr40,94,189,0|1sl6sfz,94,189,0|1sl6sg0,95,184,1|1sujtrz,95,184,1|1sujts0,94,189,0|1t3wv3z,94,189,0|1t3wv40,95,184,1|1td9wfz,95,184,1|1td9wg0,94,189,0|1tmmxrz,94,189,0|1tmmxs0,95,184,1|1tvzz3z,95,184,1|1tvzz40,94,189,0|1u5pz3z,94,189,0|1u5pz40,95,184,1|1uf30fz,95,184,1|1uf30g0,94,189,0|1uog1rz,94,189,0|1uog1s0,95,184,1|1uxt33z,95,184,1|1uxt340,94,189,0|1v764fz,94,189,0|1v764g0,95,184,1|1vgj5rz,95,184,1|1vgj5s0,94,189,0|1vpw73z,94,189,0|1vpw740,95,184,1|NaN,95,184,1\",\"Australia/Darwin|,0,311,0|-133j1k9,0,311,0|-133j1k8,138,218,0|-10vsp01,138,218,0|-10vsp00,138,242,0|-rnsq61,138,242,0|-rnsq60,139,307,1|-rjj0u1,139,307,1|-rjj0u0,138,242,0|-em3gu1,138,242,0|-em3gu0,139,307,1|-ehmcu1,139,307,1|-ehmcu0,138,242,0|-e89bi1,138,242,0|-e89bi0,139,307,1|-dywa61,139,307,1|-dywa60,138,242,0|-dp6a61,138,242,0|-dp6a60,139,307,1|-dg67i1,139,307,1|-dg67i0,138,242,0|NaN,138,242,0\",\"Australia/Eucla|,0,312,0|-12nxx75,0,312,0|-12nxx74,140,313,0|-rnso31,140,313,0|-rnso30,141,314,1|-rjiyr1,141,314,1|-rjiyr0,140,313,0|-em3er1,140,313,0|-em3er0,141,314,1|-ehmar1,141,314,1|-ehmar0,140,313,0|-e899f1,140,313,0|-e899f0,141,314,1|-dyw831,141,314,1|-dyw830,140,313,0|2iiqkz,140,313,0|2iiql0,141,314,1|2p02kz,141,314,1|2p02l0,140,313,0|77rbwz,140,313,0|77rbx0,141,314,1|7e8nwz,141,314,1|7e8nx0,140,313,0|bezrwz,140,313,0|bezrx0,141,314,1|bke7wz,141,314,1|bke7x0,140,313,0|j9np8z,140,313,0|j9np90,141,314,1|jff3wz,141,314,1|jff3x0,140,313,0|jqkykz,140,313,0|jqkyl0,141,314,1|jyi58z,141,314,1|jyi590,140,313,0|k9b18z,140,313,0|k9b190,141,314,1|kh87wz,141,314,1|kh87x0,140,313,0|NaN,140,313,0\",\"Australia/Hobart|,0,310,0|-12smja5,0,310,0|-12smja4,94,189,0|-rsj4w1,94,189,0|-rsj4w0,95,184,1|-rjj281,95,184,1|-rjj280,94,189,0|-r8d7k1,94,189,0|-r8d7k0,95,184,1|-r1vvk1,95,184,1|-r1vvk0,94,189,0|-qpn4w1,94,189,0|-qpn4w0,95,184,1|-qj5sw1,95,184,1|-qj5sw0,94,189,0|-em3i81,94,189,0|-em3i80,95,184,1|-ehme81,95,184,1|-ehme80,94,189,0|-e89cw1,94,189,0|-e89cw0,95,184,1|-dywbk1,95,184,1|-dywbk0,94,189,0|-dp6bk1,94,189,0|-dp6bk0,95,184,1|-dg68w1,95,184,1|-dg68w0,94,189,0|-16cow1,94,189,0|-16cow0,95,184,1|-wznk1,95,184,1|-wznk0,94,189,0|-m6rk1,94,189,0|-m6rk0,95,184,1|-fcgw1,95,184,1|-fcgw0,94,189,0|-3gow1,94,189,0|-3gow0,95,184,1|3dlrz,95,184,1|3dls0,94,189,0|f9drz,94,189,0|f9ds0,95,184,1|mgn3z,95,184,1|mgn40,94,189,0|ycf3z,94,189,0|ycf40,95,184,1|14gsfz,95,184,1|14gsg0,94,189,0|1h2hrz,94,189,0|1h2hs0,95,184,1|1njtrz,95,184,1|1njts0,94,189,0|1zskfz,94,189,0|1zskg0,95,184,1|269wfz,95,184,1|269wg0,94,189,0|2iin3z,94,189,0|2iin40,95,184,1|2ozz3z,95,184,1|2ozz40,94,189,0|318prz,94,189,0|318ps0,95,184,1|3830fz,95,184,1|3830g0,94,189,0|3kbr3z,94,189,0|3kbr40,95,184,1|3qt33z,95,184,1|3qt340,94,189,0|431trz,94,189,0|431ts0,95,184,1|49j5rz,95,184,1|49j5s0,94,189,0|4lrwfz,94,189,0|4lrwg0,95,184,1|4s98fz,95,184,1|4s98g0,94,189,0|54hz3z,94,189,0|54hz40,95,184,1|5azb3z,95,184,1|5azb40,94,189,0|5n81rz,94,189,0|5n81s0,95,184,1|5tpdrz,95,184,1|5tpds0,94,189,0|65y4fz,94,189,0|65y4g0,95,184,1|6dvb3z,95,184,1|6dvb40,94,189,0|6p15rz,94,189,0|6p15s0,95,184,1|6wldrz,95,184,1|6wlds0,94,189,0|77r8fz,94,189,0|77r8g0,95,184,1|7e8kfz,95,184,1|7e8kg0,94,189,0|7qhb3z,94,189,0|7qhb40,95,184,1|7wyn3z,95,184,1|7wyn40,94,189,0|897drz,94,189,0|897ds0,95,184,1|8foprz,95,184,1|8fops0,94,189,0|8rkhrz,94,189,0|8rkhs0,95,184,1|8z4prz,95,184,1|8z4ps0,94,189,0|9anj3z,94,189,0|9anj40,95,184,1|9i7r3z,95,184,1|9i7r40,94,189,0|9tqkfz,94,189,0|9tqkg0,95,184,1|a0xtrz,95,184,1|a0xts0,94,189,0|acgn3z,94,189,0|acgn40,95,184,1|ajnwfz,95,184,1|ajnwg0,94,189,0|av6prz,94,189,0|av6ps0,95,184,1|b33wfz,95,184,1|b33wg0,94,189,0|bctwfz,94,189,0|bctwg0,95,184,1|bltz3z,95,184,1|bltz40,94,189,0|bvjz3z,94,189,0|bvjz40,95,184,1|c4k1rz,95,184,1|c4k1s0,94,189,0|cea1rz,94,189,0|cea1s0,95,184,1|cna4fz,95,184,1|cna4g0,94,189,0|cx04fz,94,189,0|cx04g0,95,184,1|d6073z,95,184,1|d60740,94,189,0|dfq73z,94,189,0|dfq740,95,184,1|dp38fz,95,184,1|dp38g0,94,189,0|dyt8fz,94,189,0|dyt8g0,95,184,1|e7tb3z,95,184,1|e7tb40,94,189,0|ehjb3z,94,189,0|ehjb40,95,184,1|eqjdrz,95,184,1|eqjds0,94,189,0|f09drz,94,189,0|f09ds0,95,184,1|f99gfz,95,184,1|f99gg0,94,189,0|fizgfz,94,189,0|fizgg0,95,184,1|frzj3z,95,184,1|frzj40,94,189,0|fzwprz,94,189,0|fzwps0,95,184,1|gaplrz,95,184,1|gapls0,94,189,0|gkskfz,94,189,0|gkskg0,95,184,1|gtsn3z,95,184,1|gtsn40,94,189,0|h3in3z,94,189,0|h3in40,95,184,1|hciprz,95,184,1|hcips0,94,189,0|hm8prz,94,189,0|hm8ps0,95,184,1|hv8sfz,95,184,1|hv8sg0,94,189,0|i4ysfz,94,189,0|i4ysg0,95,184,1|idyv3z,95,184,1|idyv40,94,189,0|inov3z,94,189,0|inov40,95,184,1|ix1wfz,95,184,1|ix1wg0,94,189,0|j6exrz,94,189,0|j6exs0,95,184,1|jff0fz,95,184,1|jff0g0,94,189,0|jphz3z,94,189,0|jphz40,95,184,1|jyv0fz,95,184,1|jyv0g0,94,189,0|k881rz,94,189,0|k881s0,95,184,1|khl33z,95,184,1|khl340,94,189,0|kqy4fz,94,189,0|kqy4g0,95,184,1|l0b5rz,95,184,1|l0b5s0,94,189,0|l9o73z,94,189,0|l9o740,95,184,1|lj18fz,95,184,1|lj18g0,94,189,0|lse9rz,94,189,0|lse9s0,95,184,1|m1rb3z,95,184,1|m1rb40,94,189,0|mbhb3z,94,189,0|mbhb40,95,184,1|mkucfz,95,184,1|mkucg0,94,189,0|mu7drz,94,189,0|mu7ds0,95,184,1|n3kf3z,95,184,1|n3kf40,94,189,0|ncxgfz,94,189,0|ncxgg0,95,184,1|nmahrz,95,184,1|nmahs0,94,189,0|nvnj3z,94,189,0|nvnj40,95,184,1|o50kfz,95,184,1|o50kg0,94,189,0|oedlrz,94,189,0|oedls0,95,184,1|onqn3z,95,184,1|onqn40,94,189,0|ox3ofz,94,189,0|ox3og0,95,184,1|p6gprz,95,184,1|p6gps0,94,189,0|pg6prz,94,189,0|pg6ps0,95,184,1|ppjr3z,95,184,1|ppjr40,94,189,0|pywsfz,94,189,0|pywsg0,95,184,1|q89trz,95,184,1|q89ts0,94,189,0|qhmv3z,94,189,0|qhmv40,95,184,1|qqzwfz,95,184,1|qqzwg0,94,189,0|r0cxrz,94,189,0|r0cxs0,95,184,1|r9pz3z,95,184,1|r9pz40,94,189,0|rj30fz,94,189,0|rj30g0,95,184,1|rsg1rz,95,184,1|rsg1s0,94,189,0|s1t33z,94,189,0|s1t340,95,184,1|sbj33z,95,184,1|sbj340,94,189,0|skw4fz,94,189,0|skw4g0,95,184,1|su95rz,95,184,1|su95s0,94,189,0|t3m73z,94,189,0|t3m740,95,184,1|tcz8fz,95,184,1|tcz8g0,94,189,0|tmc9rz,94,189,0|tmc9s0,95,184,1|tvpb3z,95,184,1|tvpb40,94,189,0|u52cfz,94,189,0|u52cg0,95,184,1|uefdrz,95,184,1|uefds0,94,189,0|unsf3z,94,189,0|unsf40,95,184,1|ux5gfz,95,184,1|ux5gg0,94,189,0|v6vgfz,94,189,0|v6vgg0,95,184,1|vg8hrz,95,184,1|vg8hs0,94,189,0|vplj3z,94,189,0|vplj40,95,184,1|vyykfz,95,184,1|vyykg0,94,189,0|w8blrz,94,189,0|w8bls0,95,184,1|whon3z,95,184,1|whon40,94,189,0|wr1ofz,94,189,0|wr1og0,95,184,1|x0eprz,95,184,1|x0eps0,94,189,0|x9rr3z,94,189,0|x9rr40,95,184,1|xj4sfz,95,184,1|xj4sg0,94,189,0|xshtrz,94,189,0|xshts0,95,184,1|y1uv3z,95,184,1|y1uv40,94,189,0|ybkv3z,94,189,0|ybkv40,95,184,1|ykxwfz,95,184,1|ykxwg0,94,189,0|yuaxrz,94,189,0|yuaxs0,95,184,1|z3nz3z,95,184,1|z3nz40,94,189,0|zd10fz,94,189,0|zd10g0,95,184,1|zme1rz,95,184,1|zme1s0,94,189,0|zvr33z,94,189,0|zvr340,95,184,1|10544fz,95,184,1|10544g0,94,189,0|10eh5rz,94,189,0|10eh5s0,95,184,1|10nu73z,95,184,1|10nu740,94,189,0|10xk73z,94,189,0|10xk740,95,184,1|116x8fz,95,184,1|116x8g0,94,189,0|11ga9rz,94,189,0|11ga9s0,95,184,1|11pnb3z,95,184,1|11pnb40,94,189,0|11z0cfz,94,189,0|11z0cg0,95,184,1|128ddrz,95,184,1|128dds0,94,189,0|12hqf3z,94,189,0|12hqf40,95,184,1|12r3gfz,95,184,1|12r3gg0,94,189,0|130ghrz,94,189,0|130ghs0,95,184,1|139tj3z,95,184,1|139tj40,94,189,0|13j6kfz,94,189,0|13j6kg0,95,184,1|13sjlrz,95,184,1|13sjls0,94,189,0|1429lrz,94,189,0|1429ls0,95,184,1|14bmn3z,95,184,1|14bmn40,94,189,0|14kzofz,94,189,0|14kzog0,95,184,1|14ucprz,95,184,1|14ucps0,94,189,0|153pr3z,94,189,0|153pr40,95,184,1|15d2sfz,95,184,1|15d2sg0,94,189,0|15mftrz,94,189,0|15mfts0,95,184,1|15vsv3z,95,184,1|15vsv40,94,189,0|1655wfz,94,189,0|1655wg0,95,184,1|16eixrz,95,184,1|16eixs0,94,189,0|16nvz3z,94,189,0|16nvz40,95,184,1|16xlz3z,95,184,1|16xlz40,94,189,0|176z0fz,94,189,0|176z0g0,95,184,1|17gc1rz,95,184,1|17gc1s0,94,189,0|17pp33z,94,189,0|17pp340,95,184,1|17z24fz,95,184,1|17z24g0,94,189,0|188f5rz,94,189,0|188f5s0,95,184,1|18hs73z,95,184,1|18hs740,94,189,0|18r58fz,94,189,0|18r58g0,95,184,1|190i9rz,95,184,1|190i9s0,94,189,0|199vb3z,94,189,0|199vb40,95,184,1|19j8cfz,95,184,1|19j8cg0,94,189,0|19sycfz,94,189,0|19sycg0,95,184,1|1a2bdrz,95,184,1|1a2bds0,94,189,0|1abof3z,94,189,0|1abof40,95,184,1|1al1gfz,95,184,1|1al1gg0,94,189,0|1auehrz,94,189,0|1auehs0,95,184,1|1b3rj3z,95,184,1|1b3rj40,94,189,0|1bd4kfz,94,189,0|1bd4kg0,95,184,1|1bmhlrz,95,184,1|1bmhls0,94,189,0|1bvun3z,94,189,0|1bvun40,95,184,1|1c57ofz,95,184,1|1c57og0,94,189,0|1cekprz,94,189,0|1cekps0,95,184,1|1cnxr3z,95,184,1|1cnxr40,94,189,0|1cxnr3z,94,189,0|1cxnr40,95,184,1|1d70sfz,95,184,1|1d70sg0,94,189,0|1dgdtrz,94,189,0|1dgdts0,95,184,1|1dpqv3z,95,184,1|1dpqv40,94,189,0|1dz3wfz,94,189,0|1dz3wg0,95,184,1|1e8gxrz,95,184,1|1e8gxs0,94,189,0|1ehtz3z,94,189,0|1ehtz40,95,184,1|1er70fz,95,184,1|1er70g0,94,189,0|1f0k1rz,94,189,0|1f0k1s0,95,184,1|1f9x33z,95,184,1|1f9x340,94,189,0|1fjn33z,94,189,0|1fjn340,95,184,1|1ft04fz,95,184,1|1ft04g0,94,189,0|1g2d5rz,94,189,0|1g2d5s0,95,184,1|1gbq73z,95,184,1|1gbq740,94,189,0|1gl38fz,94,189,0|1gl38g0,95,184,1|1gug9rz,95,184,1|1gug9s0,94,189,0|1h3tb3z,94,189,0|1h3tb40,95,184,1|1hd6cfz,95,184,1|1hd6cg0,94,189,0|1hmjdrz,94,189,0|1hmjds0,95,184,1|1hvwf3z,95,184,1|1hvwf40,94,189,0|1i59gfz,94,189,0|1i59gg0,95,184,1|1iemhrz,95,184,1|1iemhs0,94,189,0|1iochrz,94,189,0|1iochs0,95,184,1|1ixpj3z,95,184,1|1ixpj40,94,189,0|1j72kfz,94,189,0|1j72kg0,95,184,1|1jgflrz,95,184,1|1jgfls0,94,189,0|1jpsn3z,94,189,0|1jpsn40,95,184,1|1jz5ofz,95,184,1|1jz5og0,94,189,0|1k8iprz,94,189,0|1k8ips0,95,184,1|1khvr3z,95,184,1|1khvr40,94,189,0|1kr8sfz,94,189,0|1kr8sg0,95,184,1|1l0ltrz,95,184,1|1l0lts0,94,189,0|1l9yv3z,94,189,0|1l9yv40,95,184,1|1ljov3z,95,184,1|1ljov40,94,189,0|1lt1wfz,94,189,0|1lt1wg0,95,184,1|1m2exrz,95,184,1|1m2exs0,94,189,0|1mbrz3z,94,189,0|1mbrz40,95,184,1|1ml50fz,95,184,1|1ml50g0,94,189,0|1mui1rz,94,189,0|1mui1s0,95,184,1|1n3v33z,95,184,1|1n3v340,94,189,0|1nd84fz,94,189,0|1nd84g0,95,184,1|1nml5rz,95,184,1|1nml5s0,94,189,0|1nvy73z,94,189,0|1nvy740,95,184,1|1o5b8fz,95,184,1|1o5b8g0,94,189,0|1of18fz,94,189,0|1of18g0,95,184,1|1ooe9rz,95,184,1|1ooe9s0,94,189,0|1oxrb3z,94,189,0|1oxrb40,95,184,1|1p74cfz,95,184,1|1p74cg0,94,189,0|1pghdrz,94,189,0|1pghds0,95,184,1|1ppuf3z,95,184,1|1ppuf40,94,189,0|1pz7gfz,94,189,0|1pz7gg0,95,184,1|1q8khrz,95,184,1|1q8khs0,94,189,0|1qhxj3z,94,189,0|1qhxj40,95,184,1|1qrakfz,95,184,1|1qrakg0,94,189,0|1r0nlrz,94,189,0|1r0nls0,95,184,1|1ra0n3z,95,184,1|1ra0n40,94,189,0|1rjqn3z,94,189,0|1rjqn40,95,184,1|1rt3ofz,95,184,1|1rt3og0,94,189,0|1s2gprz,94,189,0|1s2gps0,95,184,1|1sbtr3z,95,184,1|1sbtr40,94,189,0|1sl6sfz,94,189,0|1sl6sg0,95,184,1|1sujtrz,95,184,1|1sujts0,94,189,0|1t3wv3z,94,189,0|1t3wv40,95,184,1|1td9wfz,95,184,1|1td9wg0,94,189,0|1tmmxrz,94,189,0|1tmmxs0,95,184,1|1tvzz3z,95,184,1|1tvzz40,94,189,0|1u5pz3z,94,189,0|1u5pz40,95,184,1|1uf30fz,95,184,1|1uf30g0,94,189,0|1uog1rz,94,189,0|1uog1s0,95,184,1|1uxt33z,95,184,1|1uxt340,94,189,0|1v764fz,94,189,0|1v764g0,95,184,1|1vgj5rz,95,184,1|1vgj5s0,94,189,0|1vpw73z,94,189,0|1vpw740,95,184,1|NaN,95,184,1\",\"Australia/Lindeman|,0,315,0|-1354jl9,0,315,0|-1354jl8,94,189,0|-rnsrk1,94,189,0|-rnsrk0,95,184,1|-rjj281,95,184,1|-rjj280,94,189,0|-em3i81,94,189,0|-em3i80,95,184,1|-ehme81,95,184,1|-ehme80,94,189,0|-e89cw1,94,189,0|-e89cw0,95,184,1|-dywbk1,95,184,1|-dywbk0,94,189,0|-dp6bk1,94,189,0|-dp6bk0,95,184,1|-dg68w1,95,184,1|-dg68w0,94,189,0|ycf3z,94,189,0|ycf40,95,184,1|14gsfz,95,184,1|14gsg0,94,189,0|acgn3z,94,189,0|acgn40,95,184,1|aixz3z,95,184,1|aixz40,94,189,0|av6prz,94,189,0|av6ps0,95,184,1|b1o1rz,95,184,1|b1o1s0,94,189,0|bdwsfz,94,189,0|bdwsg0,95,184,1|bke4fz,95,184,1|bke4g0,94,189,0|bwmv3z,94,189,0|bwmv40,95,184,1|c3h5rz,95,184,1|c3h5s0,94,189,0|cfpwfz,94,189,0|cfpwg0,95,184,1|cm78fz,95,184,1|cm78g0,94,189,0|NaN,94,189,0\",\"Australia/Lord_Howe|,0,316,0|-133j6sl,0,316,0|-133j6sk,94,189,0|5tp87z,94,189,0|5tp880,142,307,0|65y31z,142,307,0|65y320,143,192,1|6csaxz,143,192,1|6csay0,142,307,0|6p14dz,142,307,0|6p14e0,143,192,1|6vidlz,143,192,1|6vidm0,142,307,0|77r71z,142,307,0|77r720,143,192,1|7e8g9z,143,192,1|7e8ga0,142,307,0|7qh9pz,142,307,0|7qh9q0,143,192,1|7wyixz,143,192,1|7wyiy0,142,307,0|897cdz,142,307,0|897ce0,89,184,1|8gekbz,89,184,1|8gekc0,142,307,0|8rkgdz,142,307,0|8rkge0,89,184,1|8z4mzz,89,184,1|8z4n00,142,307,0|9anhpz,142,307,0|9anhq0,89,184,1|9i7obz,89,184,1|9i7oc0,142,307,0|9tqj1z,142,307,0|9tqj20,89,184,1|a0xqzz,89,184,1|a0xr00,142,307,0|acglpz,142,307,0|acglq0,89,184,1|aixwbz,89,184,1|aixwc0,142,307,0|av6odz,142,307,0|av6oe0,89,184,1|b1nyzz,89,184,1|b1nz00,142,307,0|bdwr1z,142,307,0|bdwr20,89,184,1|bke1nz,89,184,1|bke1o0,142,307,0|bwmtpz,142,307,0|bwmtq0,89,184,1|c3h2zz,89,184,1|c3h300,142,307,0|cfpv1z,142,307,0|cfpv20,89,184,1|cm75nz,89,184,1|cm75o0,142,307,0|cyfxpz,142,307,0|cyfxq0,89,184,1|d4x8bz,89,184,1|d4x8c0,142,307,0|dh60dz,142,307,0|dh60e0,89,184,1|dp35nz,89,184,1|dp35o0,142,307,0|dzw31z,142,307,0|dzw320,89,184,1|e7t8bz,89,184,1|e7t8c0,142,307,0|eim5pz,142,307,0|eim5q0,89,184,1|eqjazz,89,184,1|eqjb00,142,307,0|f1c8dz,142,307,0|f1c8e0,89,184,1|f99dnz,89,184,1|f99do0,142,307,0|fkf9pz,142,307,0|fkf9q0,89,184,1|frzgbz,89,184,1|frzgc0,142,307,0|fzwodz,142,307,0|fzwoe0,89,184,1|gapizz,89,184,1|gapj00,142,307,0|glvf1z,142,307,0|glvf20,89,184,1|gtskbz,89,184,1|gtskc0,142,307,0|h4lhpz,142,307,0|h4lhq0,89,184,1|hcimzz,89,184,1|hcin00,142,307,0|hnbkdz,142,307,0|hnbke0,89,184,1|hv8pnz,89,184,1|hv8po0,142,307,0|i6elpz,142,307,0|i6elq0,89,184,1|idysbz,89,184,1|idysc0,142,307,0|ip4odz,142,307,0|ip4oe0,89,184,1|ix1tnz,89,184,1|ix1to0,142,307,0|j7ur1z,142,307,0|j7ur20,89,184,1|jfexnz,89,184,1|jfexo0,142,307,0|jqktpz,142,307,0|jqktq0,89,184,1|jyuxnz,89,184,1|jyuxo0,142,307,0|k880dz,142,307,0|k880e0,89,184,1|khl0bz,89,184,1|khl0c0,142,307,0|kqy31z,142,307,0|kqy320,89,184,1|l0b2zz,89,184,1|l0b300,142,307,0|l9o5pz,142,307,0|l9o5q0,89,184,1|lj15nz,89,184,1|lj15o0,142,307,0|lse8dz,142,307,0|lse8e0,89,184,1|m1r8bz,89,184,1|m1r8c0,142,307,0|mbh9pz,142,307,0|mbh9q0,89,184,1|mku9nz,89,184,1|mku9o0,142,307,0|mu7cdz,142,307,0|mu7ce0,89,184,1|n3kcbz,89,184,1|n3kcc0,142,307,0|ncxf1z,142,307,0|ncxf20,89,184,1|nmaezz,89,184,1|nmaf00,142,307,0|nvnhpz,142,307,0|nvnhq0,89,184,1|o50hnz,89,184,1|o50ho0,142,307,0|oedkdz,142,307,0|oedke0,89,184,1|onqkbz,89,184,1|onqkc0,142,307,0|ox3n1z,142,307,0|ox3n20,89,184,1|p6gmzz,89,184,1|p6gn00,142,307,0|pg6odz,142,307,0|pg6oe0,89,184,1|ppjobz,89,184,1|ppjoc0,142,307,0|pywr1z,142,307,0|pywr20,89,184,1|q89qzz,89,184,1|q89r00,142,307,0|qhmtpz,142,307,0|qhmtq0,89,184,1|qqztnz,89,184,1|qqzto0,142,307,0|r0cwdz,142,307,0|r0cwe0,89,184,1|r9pwbz,89,184,1|r9pwc0,142,307,0|rj2z1z,142,307,0|rj2z20,89,184,1|rsfyzz,89,184,1|rsfz00,142,307,0|s1t1pz,142,307,0|s1t1q0,89,184,1|sbj0bz,89,184,1|sbj0c0,142,307,0|skw31z,142,307,0|skw320,89,184,1|su92zz,89,184,1|su9300,142,307,0|t3m5pz,142,307,0|t3m5q0,89,184,1|tcz5nz,89,184,1|tcz5o0,142,307,0|tmc8dz,142,307,0|tmc8e0,89,184,1|tvp8bz,89,184,1|tvp8c0,142,307,0|u52b1z,142,307,0|u52b20,89,184,1|uefazz,89,184,1|uefb00,142,307,0|unsdpz,142,307,0|unsdq0,89,184,1|ux5dnz,89,184,1|ux5do0,142,307,0|v6vf1z,142,307,0|v6vf20,89,184,1|vg8ezz,89,184,1|vg8f00,142,307,0|vplhpz,142,307,0|vplhq0,89,184,1|vyyhnz,89,184,1|vyyho0,142,307,0|w8bkdz,142,307,0|w8bke0,89,184,1|whokbz,89,184,1|whokc0,142,307,0|wr1n1z,142,307,0|wr1n20,89,184,1|x0emzz,89,184,1|x0en00,142,307,0|x9rppz,142,307,0|x9rpq0,89,184,1|xj4pnz,89,184,1|xj4po0,142,307,0|xshsdz,142,307,0|xshse0,89,184,1|y1usbz,89,184,1|y1usc0,142,307,0|ybktpz,142,307,0|ybktq0,89,184,1|ykxtnz,89,184,1|ykxto0,142,307,0|yuawdz,142,307,0|yuawe0,89,184,1|z3nwbz,89,184,1|z3nwc0,142,307,0|zd0z1z,142,307,0|zd0z20,89,184,1|zmdyzz,89,184,1|zmdz00,142,307,0|zvr1pz,142,307,0|zvr1q0,89,184,1|10541nz,89,184,1|10541o0,142,307,0|10eh4dz,142,307,0|10eh4e0,89,184,1|10nu4bz,89,184,1|10nu4c0,142,307,0|10xk5pz,142,307,0|10xk5q0,89,184,1|116x5nz,89,184,1|116x5o0,142,307,0|11ga8dz,142,307,0|11ga8e0,89,184,1|11pn8bz,89,184,1|11pn8c0,142,307,0|11z0b1z,142,307,0|11z0b20,89,184,1|128dazz,89,184,1|128db00,142,307,0|12hqdpz,142,307,0|12hqdq0,89,184,1|12r3dnz,89,184,1|12r3do0,142,307,0|130ggdz,142,307,0|130gge0,89,184,1|139tgbz,89,184,1|139tgc0,142,307,0|13j6j1z,142,307,0|13j6j20,89,184,1|13sjizz,89,184,1|13sjj00,142,307,0|1429kdz,142,307,0|1429ke0,89,184,1|14bmkbz,89,184,1|14bmkc0,142,307,0|14kzn1z,142,307,0|14kzn20,89,184,1|14ucmzz,89,184,1|14ucn00,142,307,0|153pppz,142,307,0|153ppq0,89,184,1|15d2pnz,89,184,1|15d2po0,142,307,0|15mfsdz,142,307,0|15mfse0,89,184,1|15vssbz,89,184,1|15vssc0,142,307,0|1655v1z,142,307,0|1655v20,89,184,1|16eiuzz,89,184,1|16eiv00,142,307,0|16nvxpz,142,307,0|16nvxq0,89,184,1|16xlwbz,89,184,1|16xlwc0,142,307,0|176yz1z,142,307,0|176yz20,89,184,1|17gbyzz,89,184,1|17gbz00,142,307,0|17pp1pz,142,307,0|17pp1q0,89,184,1|17z21nz,89,184,1|17z21o0,142,307,0|188f4dz,142,307,0|188f4e0,89,184,1|18hs4bz,89,184,1|18hs4c0,142,307,0|18r571z,142,307,0|18r5720,89,184,1|190i6zz,89,184,1|190i700,142,307,0|199v9pz,142,307,0|199v9q0,89,184,1|19j89nz,89,184,1|19j89o0,142,307,0|19syb1z,142,307,0|19syb20,89,184,1|1a2bazz,89,184,1|1a2bb00,142,307,0|1abodpz,142,307,0|1abodq0,89,184,1|1al1dnz,89,184,1|1al1do0,142,307,0|1auegdz,142,307,0|1auege0,89,184,1|1b3rgbz,89,184,1|1b3rgc0,142,307,0|1bd4j1z,142,307,0|1bd4j20,89,184,1|1bmhizz,89,184,1|1bmhj00,142,307,0|1bvulpz,142,307,0|1bvulq0,89,184,1|1c57lnz,89,184,1|1c57lo0,142,307,0|1cekodz,142,307,0|1cekoe0,89,184,1|1cnxobz,89,184,1|1cnxoc0,142,307,0|1cxnppz,142,307,0|1cxnpq0,89,184,1|1d70pnz,89,184,1|1d70po0,142,307,0|1dgdsdz,142,307,0|1dgdse0,89,184,1|1dpqsbz,89,184,1|1dpqsc0,142,307,0|1dz3v1z,142,307,0|1dz3v20,89,184,1|1e8guzz,89,184,1|1e8gv00,142,307,0|1ehtxpz,142,307,0|1ehtxq0,89,184,1|1er6xnz,89,184,1|1er6xo0,142,307,0|1f0k0dz,142,307,0|1f0k0e0,89,184,1|1f9x0bz,89,184,1|1f9x0c0,142,307,0|1fjn1pz,142,307,0|1fjn1q0,89,184,1|1ft01nz,89,184,1|1ft01o0,142,307,0|1g2d4dz,142,307,0|1g2d4e0,89,184,1|1gbq4bz,89,184,1|1gbq4c0,142,307,0|1gl371z,142,307,0|1gl3720,89,184,1|1gug6zz,89,184,1|1gug700,142,307,0|1h3t9pz,142,307,0|1h3t9q0,89,184,1|1hd69nz,89,184,1|1hd69o0,142,307,0|1hmjcdz,142,307,0|1hmjce0,89,184,1|1hvwcbz,89,184,1|1hvwcc0,142,307,0|1i59f1z,142,307,0|1i59f20,89,184,1|1iemezz,89,184,1|1iemf00,142,307,0|1iocgdz,142,307,0|1iocge0,89,184,1|1ixpgbz,89,184,1|1ixpgc0,142,307,0|1j72j1z,142,307,0|1j72j20,89,184,1|1jgfizz,89,184,1|1jgfj00,142,307,0|1jpslpz,142,307,0|1jpslq0,89,184,1|1jz5lnz,89,184,1|1jz5lo0,142,307,0|1k8iodz,142,307,0|1k8ioe0,89,184,1|1khvobz,89,184,1|1khvoc0,142,307,0|1kr8r1z,142,307,0|1kr8r20,89,184,1|1l0lqzz,89,184,1|1l0lr00,142,307,0|1l9ytpz,142,307,0|1l9ytq0,89,184,1|1ljosbz,89,184,1|1ljosc0,142,307,0|1lt1v1z,142,307,0|1lt1v20,89,184,1|1m2euzz,89,184,1|1m2ev00,142,307,0|1mbrxpz,142,307,0|1mbrxq0,89,184,1|1ml4xnz,89,184,1|1ml4xo0,142,307,0|1mui0dz,142,307,0|1mui0e0,89,184,1|1n3v0bz,89,184,1|1n3v0c0,142,307,0|1nd831z,142,307,0|1nd8320,89,184,1|1nml2zz,89,184,1|1nml300,142,307,0|1nvy5pz,142,307,0|1nvy5q0,89,184,1|1o5b5nz,89,184,1|1o5b5o0,142,307,0|1of171z,142,307,0|1of1720,89,184,1|1ooe6zz,89,184,1|1ooe700,142,307,0|1oxr9pz,142,307,0|1oxr9q0,89,184,1|1p749nz,89,184,1|1p749o0,142,307,0|1pghcdz,142,307,0|1pghce0,89,184,1|1ppucbz,89,184,1|1ppucc0,142,307,0|1pz7f1z,142,307,0|1pz7f20,89,184,1|1q8kezz,89,184,1|1q8kf00,142,307,0|1qhxhpz,142,307,0|1qhxhq0,89,184,1|1qrahnz,89,184,1|1qraho0,142,307,0|1r0nkdz,142,307,0|1r0nke0,89,184,1|1ra0kbz,89,184,1|1ra0kc0,142,307,0|1rjqlpz,142,307,0|1rjqlq0,89,184,1|1rt3lnz,89,184,1|1rt3lo0,142,307,0|1s2godz,142,307,0|1s2goe0,89,184,1|1sbtobz,89,184,1|1sbtoc0,142,307,0|1sl6r1z,142,307,0|1sl6r20,89,184,1|1sujqzz,89,184,1|1sujr00,142,307,0|1t3wtpz,142,307,0|1t3wtq0,89,184,1|1td9tnz,89,184,1|1td9to0,142,307,0|1tmmwdz,142,307,0|1tmmwe0,89,184,1|1tvzwbz,89,184,1|1tvzwc0,142,307,0|1u5pxpz,142,307,0|1u5pxq0,89,184,1|1uf2xnz,89,184,1|1uf2xo0,142,307,0|1uog0dz,142,307,0|1uog0e0,89,184,1|1uxt0bz,89,184,1|1uxt0c0,142,307,0|1v7631z,142,307,0|1v76320,89,184,1|1vgj2zz,89,184,1|1vgj300,142,307,0|1vpw5pz,142,307,0|1vpw5q0,89,184,1|NaN,89,184,1\",\"Australia/Melbourne|,0,317,0|-133j46h,0,317,0|-133j46g,94,189,0|-rnsrk1,94,189,0|-rnsrk0,95,184,1|-rjj281,95,184,1|-rjj280,94,189,0|-em3i81,94,189,0|-em3i80,95,184,1|-ehme81,95,184,1|-ehme80,94,189,0|-e89cw1,94,189,0|-e89cw0,95,184,1|-dywbk1,95,184,1|-dywbk0,94,189,0|-dp6bk1,94,189,0|-dp6bk0,95,184,1|-dg68w1,95,184,1|-dg68w0,94,189,0|ycf3z,94,189,0|ycf40,95,184,1|14gsfz,95,184,1|14gsg0,94,189,0|1h2hrz,94,189,0|1h2hs0,95,184,1|1njtrz,95,184,1|1njts0,94,189,0|1zskfz,94,189,0|1zskg0,95,184,1|269wfz,95,184,1|269wg0,94,189,0|2iin3z,94,189,0|2iin40,95,184,1|2ozz3z,95,184,1|2ozz40,94,189,0|318prz,94,189,0|318ps0,95,184,1|3830fz,95,184,1|3830g0,94,189,0|3kbr3z,94,189,0|3kbr40,95,184,1|3qt33z,95,184,1|3qt340,94,189,0|431trz,94,189,0|431ts0,95,184,1|49j5rz,95,184,1|49j5s0,94,189,0|4lrwfz,94,189,0|4lrwg0,95,184,1|4s98fz,95,184,1|4s98g0,94,189,0|54hz3z,94,189,0|54hz40,95,184,1|5azb3z,95,184,1|5azb40,94,189,0|5n81rz,94,189,0|5n81s0,95,184,1|5tpdrz,95,184,1|5tpds0,94,189,0|65y4fz,94,189,0|65y4g0,95,184,1|6csf3z,95,184,1|6csf40,94,189,0|6p15rz,94,189,0|6p15s0,95,184,1|6vihrz,95,184,1|6vihs0,94,189,0|77r8fz,94,189,0|77r8g0,95,184,1|7e8kfz,95,184,1|7e8kg0,94,189,0|7qhb3z,94,189,0|7qhb40,95,184,1|7wyn3z,95,184,1|7wyn40,94,189,0|897drz,94,189,0|897ds0,95,184,1|8gen3z,95,184,1|8gen40,94,189,0|8rkhrz,94,189,0|8rkhs0,95,184,1|8z4prz,95,184,1|8z4ps0,94,189,0|9aakfz,94,189,0|9aakg0,95,184,1|9i7r3z,95,184,1|9i7r40,94,189,0|9tqkfz,94,189,0|9tqkg0,95,184,1|a0xtrz,95,184,1|a0xts0,94,189,0|acgn3z,94,189,0|acgn40,95,184,1|ajnwfz,95,184,1|ajnwg0,94,189,0|av6prz,94,189,0|av6ps0,95,184,1|b1o1rz,95,184,1|b1o1s0,94,189,0|bdwsfz,94,189,0|bdwsg0,95,184,1|bke4fz,95,184,1|bke4g0,94,189,0|bwmv3z,94,189,0|bwmv40,95,184,1|c3h5rz,95,184,1|c3h5s0,94,189,0|cfpwfz,94,189,0|cfpwg0,95,184,1|cm78fz,95,184,1|cm78g0,94,189,0|cyfz3z,94,189,0|cyfz40,95,184,1|d6073z,95,184,1|d60740,94,189,0|dh61rz,94,189,0|dh61s0,95,184,1|dp38fz,95,184,1|dp38g0,94,189,0|dzw4fz,94,189,0|dzw4g0,95,184,1|e7tb3z,95,184,1|e7tb40,94,189,0|eim73z,94,189,0|eim740,95,184,1|eqjdrz,95,184,1|eqjds0,94,189,0|f1c9rz,94,189,0|f1c9s0,95,184,1|f99gfz,95,184,1|f99gg0,94,189,0|fkfb3z,94,189,0|fkfb40,95,184,1|frzj3z,95,184,1|frzj40,94,189,0|fzwprz,94,189,0|fzwps0,95,184,1|gaplrz,95,184,1|gapls0,94,189,0|glvgfz,94,189,0|glvgg0,95,184,1|gtsn3z,95,184,1|gtsn40,94,189,0|h4lj3z,94,189,0|h4lj40,95,184,1|hciprz,95,184,1|hcips0,94,189,0|hnblrz,94,189,0|hnbls0,95,184,1|hv8sfz,95,184,1|hv8sg0,94,189,0|i6en3z,94,189,0|i6en40,95,184,1|idyv3z,95,184,1|idyv40,94,189,0|ip4prz,94,189,0|ip4ps0,95,184,1|ix1wfz,95,184,1|ix1wg0,94,189,0|j7usfz,94,189,0|j7usg0,95,184,1|jff0fz,95,184,1|jff0g0,94,189,0|jqkv3z,94,189,0|jqkv40,95,184,1|jyv0fz,95,184,1|jyv0g0,94,189,0|k881rz,94,189,0|k881s0,95,184,1|khl33z,95,184,1|khl340,94,189,0|kqy4fz,94,189,0|kqy4g0,95,184,1|l0b5rz,95,184,1|l0b5s0,94,189,0|l9o73z,94,189,0|l9o740,95,184,1|lj18fz,95,184,1|lj18g0,94,189,0|lse9rz,94,189,0|lse9s0,95,184,1|m1rb3z,95,184,1|m1rb40,94,189,0|mbhb3z,94,189,0|mbhb40,95,184,1|mkucfz,95,184,1|mkucg0,94,189,0|mu7drz,94,189,0|mu7ds0,95,184,1|n3kf3z,95,184,1|n3kf40,94,189,0|ncxgfz,94,189,0|ncxgg0,95,184,1|nmahrz,95,184,1|nmahs0,94,189,0|nvnj3z,94,189,0|nvnj40,95,184,1|o50kfz,95,184,1|o50kg0,94,189,0|oedlrz,94,189,0|oedls0,95,184,1|onqn3z,95,184,1|onqn40,94,189,0|ox3ofz,94,189,0|ox3og0,95,184,1|p6gprz,95,184,1|p6gps0,94,189,0|pg6prz,94,189,0|pg6ps0,95,184,1|ppjr3z,95,184,1|ppjr40,94,189,0|pywsfz,94,189,0|pywsg0,95,184,1|q89trz,95,184,1|q89ts0,94,189,0|qhmv3z,94,189,0|qhmv40,95,184,1|qqzwfz,95,184,1|qqzwg0,94,189,0|r0cxrz,94,189,0|r0cxs0,95,184,1|r9pz3z,95,184,1|r9pz40,94,189,0|rj30fz,94,189,0|rj30g0,95,184,1|rsg1rz,95,184,1|rsg1s0,94,189,0|s1t33z,94,189,0|s1t340,95,184,1|sbj33z,95,184,1|sbj340,94,189,0|skw4fz,94,189,0|skw4g0,95,184,1|su95rz,95,184,1|su95s0,94,189,0|t3m73z,94,189,0|t3m740,95,184,1|tcz8fz,95,184,1|tcz8g0,94,189,0|tmc9rz,94,189,0|tmc9s0,95,184,1|tvpb3z,95,184,1|tvpb40,94,189,0|u52cfz,94,189,0|u52cg0,95,184,1|uefdrz,95,184,1|uefds0,94,189,0|unsf3z,94,189,0|unsf40,95,184,1|ux5gfz,95,184,1|ux5gg0,94,189,0|v6vgfz,94,189,0|v6vgg0,95,184,1|vg8hrz,95,184,1|vg8hs0,94,189,0|vplj3z,94,189,0|vplj40,95,184,1|vyykfz,95,184,1|vyykg0,94,189,0|w8blrz,94,189,0|w8bls0,95,184,1|whon3z,95,184,1|whon40,94,189,0|wr1ofz,94,189,0|wr1og0,95,184,1|x0eprz,95,184,1|x0eps0,94,189,0|x9rr3z,94,189,0|x9rr40,95,184,1|xj4sfz,95,184,1|xj4sg0,94,189,0|xshtrz,94,189,0|xshts0,95,184,1|y1uv3z,95,184,1|y1uv40,94,189,0|ybkv3z,94,189,0|ybkv40,95,184,1|ykxwfz,95,184,1|ykxwg0,94,189,0|yuaxrz,94,189,0|yuaxs0,95,184,1|z3nz3z,95,184,1|z3nz40,94,189,0|zd10fz,94,189,0|zd10g0,95,184,1|zme1rz,95,184,1|zme1s0,94,189,0|zvr33z,94,189,0|zvr340,95,184,1|10544fz,95,184,1|10544g0,94,189,0|10eh5rz,94,189,0|10eh5s0,95,184,1|10nu73z,95,184,1|10nu740,94,189,0|10xk73z,94,189,0|10xk740,95,184,1|116x8fz,95,184,1|116x8g0,94,189,0|11ga9rz,94,189,0|11ga9s0,95,184,1|11pnb3z,95,184,1|11pnb40,94,189,0|11z0cfz,94,189,0|11z0cg0,95,184,1|128ddrz,95,184,1|128dds0,94,189,0|12hqf3z,94,189,0|12hqf40,95,184,1|12r3gfz,95,184,1|12r3gg0,94,189,0|130ghrz,94,189,0|130ghs0,95,184,1|139tj3z,95,184,1|139tj40,94,189,0|13j6kfz,94,189,0|13j6kg0,95,184,1|13sjlrz,95,184,1|13sjls0,94,189,0|1429lrz,94,189,0|1429ls0,95,184,1|14bmn3z,95,184,1|14bmn40,94,189,0|14kzofz,94,189,0|14kzog0,95,184,1|14ucprz,95,184,1|14ucps0,94,189,0|153pr3z,94,189,0|153pr40,95,184,1|15d2sfz,95,184,1|15d2sg0,94,189,0|15mftrz,94,189,0|15mfts0,95,184,1|15vsv3z,95,184,1|15vsv40,94,189,0|1655wfz,94,189,0|1655wg0,95,184,1|16eixrz,95,184,1|16eixs0,94,189,0|16nvz3z,94,189,0|16nvz40,95,184,1|16xlz3z,95,184,1|16xlz40,94,189,0|176z0fz,94,189,0|176z0g0,95,184,1|17gc1rz,95,184,1|17gc1s0,94,189,0|17pp33z,94,189,0|17pp340,95,184,1|17z24fz,95,184,1|17z24g0,94,189,0|188f5rz,94,189,0|188f5s0,95,184,1|18hs73z,95,184,1|18hs740,94,189,0|18r58fz,94,189,0|18r58g0,95,184,1|190i9rz,95,184,1|190i9s0,94,189,0|199vb3z,94,189,0|199vb40,95,184,1|19j8cfz,95,184,1|19j8cg0,94,189,0|19sycfz,94,189,0|19sycg0,95,184,1|1a2bdrz,95,184,1|1a2bds0,94,189,0|1abof3z,94,189,0|1abof40,95,184,1|1al1gfz,95,184,1|1al1gg0,94,189,0|1auehrz,94,189,0|1auehs0,95,184,1|1b3rj3z,95,184,1|1b3rj40,94,189,0|1bd4kfz,94,189,0|1bd4kg0,95,184,1|1bmhlrz,95,184,1|1bmhls0,94,189,0|1bvun3z,94,189,0|1bvun40,95,184,1|1c57ofz,95,184,1|1c57og0,94,189,0|1cekprz,94,189,0|1cekps0,95,184,1|1cnxr3z,95,184,1|1cnxr40,94,189,0|1cxnr3z,94,189,0|1cxnr40,95,184,1|1d70sfz,95,184,1|1d70sg0,94,189,0|1dgdtrz,94,189,0|1dgdts0,95,184,1|1dpqv3z,95,184,1|1dpqv40,94,189,0|1dz3wfz,94,189,0|1dz3wg0,95,184,1|1e8gxrz,95,184,1|1e8gxs0,94,189,0|1ehtz3z,94,189,0|1ehtz40,95,184,1|1er70fz,95,184,1|1er70g0,94,189,0|1f0k1rz,94,189,0|1f0k1s0,95,184,1|1f9x33z,95,184,1|1f9x340,94,189,0|1fjn33z,94,189,0|1fjn340,95,184,1|1ft04fz,95,184,1|1ft04g0,94,189,0|1g2d5rz,94,189,0|1g2d5s0,95,184,1|1gbq73z,95,184,1|1gbq740,94,189,0|1gl38fz,94,189,0|1gl38g0,95,184,1|1gug9rz,95,184,1|1gug9s0,94,189,0|1h3tb3z,94,189,0|1h3tb40,95,184,1|1hd6cfz,95,184,1|1hd6cg0,94,189,0|1hmjdrz,94,189,0|1hmjds0,95,184,1|1hvwf3z,95,184,1|1hvwf40,94,189,0|1i59gfz,94,189,0|1i59gg0,95,184,1|1iemhrz,95,184,1|1iemhs0,94,189,0|1iochrz,94,189,0|1iochs0,95,184,1|1ixpj3z,95,184,1|1ixpj40,94,189,0|1j72kfz,94,189,0|1j72kg0,95,184,1|1jgflrz,95,184,1|1jgfls0,94,189,0|1jpsn3z,94,189,0|1jpsn40,95,184,1|1jz5ofz,95,184,1|1jz5og0,94,189,0|1k8iprz,94,189,0|1k8ips0,95,184,1|1khvr3z,95,184,1|1khvr40,94,189,0|1kr8sfz,94,189,0|1kr8sg0,95,184,1|1l0ltrz,95,184,1|1l0lts0,94,189,0|1l9yv3z,94,189,0|1l9yv40,95,184,1|1ljov3z,95,184,1|1ljov40,94,189,0|1lt1wfz,94,189,0|1lt1wg0,95,184,1|1m2exrz,95,184,1|1m2exs0,94,189,0|1mbrz3z,94,189,0|1mbrz40,95,184,1|1ml50fz,95,184,1|1ml50g0,94,189,0|1mui1rz,94,189,0|1mui1s0,95,184,1|1n3v33z,95,184,1|1n3v340,94,189,0|1nd84fz,94,189,0|1nd84g0,95,184,1|1nml5rz,95,184,1|1nml5s0,94,189,0|1nvy73z,94,189,0|1nvy740,95,184,1|1o5b8fz,95,184,1|1o5b8g0,94,189,0|1of18fz,94,189,0|1of18g0,95,184,1|1ooe9rz,95,184,1|1ooe9s0,94,189,0|1oxrb3z,94,189,0|1oxrb40,95,184,1|1p74cfz,95,184,1|1p74cg0,94,189,0|1pghdrz,94,189,0|1pghds0,95,184,1|1ppuf3z,95,184,1|1ppuf40,94,189,0|1pz7gfz,94,189,0|1pz7gg0,95,184,1|1q8khrz,95,184,1|1q8khs0,94,189,0|1qhxj3z,94,189,0|1qhxj40,95,184,1|1qrakfz,95,184,1|1qrakg0,94,189,0|1r0nlrz,94,189,0|1r0nls0,95,184,1|1ra0n3z,95,184,1|1ra0n40,94,189,0|1rjqn3z,94,189,0|1rjqn40,95,184,1|1rt3ofz,95,184,1|1rt3og0,94,189,0|1s2gprz,94,189,0|1s2gps0,95,184,1|1sbtr3z,95,184,1|1sbtr40,94,189,0|1sl6sfz,94,189,0|1sl6sg0,95,184,1|1sujtrz,95,184,1|1sujts0,94,189,0|1t3wv3z,94,189,0|1t3wv40,95,184,1|1td9wfz,95,184,1|1td9wg0,94,189,0|1tmmxrz,94,189,0|1tmmxs0,95,184,1|1tvzz3z,95,184,1|1tvzz40,94,189,0|1u5pz3z,94,189,0|1u5pz40,95,184,1|1uf30fz,95,184,1|1uf30g0,94,189,0|1uog1rz,94,189,0|1uog1s0,95,184,1|1uxt33z,95,184,1|1uxt340,94,189,0|1v764fz,94,189,0|1v764g0,95,184,1|1vgj5rz,95,184,1|1vgj5s0,94,189,0|1vpw73z,94,189,0|1vpw740,95,184,1|NaN,95,184,1\",\"Australia/Perth|,0,318,0|-12nxusd,0,318,0|-12nxusc,144,183,0|-rnsm01,144,183,0|-rnsm00,145,218,1|-rjiwo1,145,218,1|-rjiwo0,144,183,0|-em3co1,144,183,0|-em3co0,145,218,1|-ehm8o1,145,218,1|-ehm8o0,144,183,0|-e897c1,144,183,0|-e897c0,145,218,1|-dyw601,145,218,1|-dyw600,144,183,0|2iisnz,144,183,0|2iiso0,145,218,1|2p04nz,145,218,1|2p04o0,144,183,0|77rdzz,144,183,0|77re00,145,218,1|7e8pzz,145,218,1|7e8q00,144,183,0|beztzz,144,183,0|bezu00,145,218,1|bke9zz,145,218,1|bkea00,144,183,0|j9nrbz,144,183,0|j9nrc0,145,218,1|jff5zz,145,218,1|jff600,144,183,0|jql0nz,144,183,0|jql0o0,145,218,1|jyi7bz,145,218,1|jyi7c0,144,183,0|k9b3bz,144,183,0|k9b3c0,145,218,1|kh89zz,145,218,1|kh8a00,144,183,0|NaN,144,183,0\",\"Australia/Sydney|,0,319,0|-133j5c5,0,319,0|-133j5c4,94,189,0|-rnsrk1,94,189,0|-rnsrk0,95,184,1|-rjj281,95,184,1|-rjj280,94,189,0|-em3i81,94,189,0|-em3i80,95,184,1|-ehme81,95,184,1|-ehme80,94,189,0|-e89cw1,94,189,0|-e89cw0,95,184,1|-dywbk1,95,184,1|-dywbk0,94,189,0|-dp6bk1,94,189,0|-dp6bk0,95,184,1|-dg68w1,95,184,1|-dg68w0,94,189,0|ycf3z,94,189,0|ycf40,95,184,1|14gsfz,95,184,1|14gsg0,94,189,0|1h2hrz,94,189,0|1h2hs0,95,184,1|1njtrz,95,184,1|1njts0,94,189,0|1zskfz,94,189,0|1zskg0,95,184,1|269wfz,95,184,1|269wg0,94,189,0|2iin3z,94,189,0|2iin40,95,184,1|2ozz3z,95,184,1|2ozz40,94,189,0|318prz,94,189,0|318ps0,95,184,1|3830fz,95,184,1|3830g0,94,189,0|3kbr3z,94,189,0|3kbr40,95,184,1|3qt33z,95,184,1|3qt340,94,189,0|431trz,94,189,0|431ts0,95,184,1|49j5rz,95,184,1|49j5s0,94,189,0|4lrwfz,94,189,0|4lrwg0,95,184,1|4s98fz,95,184,1|4s98g0,94,189,0|54hz3z,94,189,0|54hz40,95,184,1|5azb3z,95,184,1|5azb40,94,189,0|5n81rz,94,189,0|5n81s0,95,184,1|5tpdrz,95,184,1|5tpds0,94,189,0|65y4fz,94,189,0|65y4g0,95,184,1|6e89rz,95,184,1|6e89s0,94,189,0|6p15rz,94,189,0|6p15s0,95,184,1|6vihrz,95,184,1|6vihs0,94,189,0|77r8fz,94,189,0|77r8g0,95,184,1|7e8kfz,95,184,1|7e8kg0,94,189,0|7qhb3z,94,189,0|7qhb40,95,184,1|7wyn3z,95,184,1|7wyn40,94,189,0|897drz,94,189,0|897ds0,95,184,1|8gen3z,95,184,1|8gen40,94,189,0|8rkhrz,94,189,0|8rkhs0,95,184,1|8z4prz,95,184,1|8z4ps0,94,189,0|9anj3z,94,189,0|9anj40,95,184,1|9i7r3z,95,184,1|9i7r40,94,189,0|9tqkfz,94,189,0|9tqkg0,95,184,1|a0xtrz,95,184,1|a0xts0,94,189,0|acgn3z,94,189,0|acgn40,95,184,1|aixz3z,95,184,1|aixz40,94,189,0|av6prz,94,189,0|av6ps0,95,184,1|b1o1rz,95,184,1|b1o1s0,94,189,0|bdwsfz,94,189,0|bdwsg0,95,184,1|bke4fz,95,184,1|bke4g0,94,189,0|bwmv3z,94,189,0|bwmv40,95,184,1|c3h5rz,95,184,1|c3h5s0,94,189,0|cfpwfz,94,189,0|cfpwg0,95,184,1|cm78fz,95,184,1|cm78g0,94,189,0|cyfz3z,94,189,0|cyfz40,95,184,1|d4xb3z,95,184,1|d4xb40,94,189,0|dh61rz,94,189,0|dh61s0,95,184,1|dp38fz,95,184,1|dp38g0,94,189,0|dzw4fz,94,189,0|dzw4g0,95,184,1|e7tb3z,95,184,1|e7tb40,94,189,0|eim73z,94,189,0|eim740,95,184,1|eqjdrz,95,184,1|eqjds0,94,189,0|f1c9rz,94,189,0|f1c9s0,95,184,1|f99gfz,95,184,1|f99gg0,94,189,0|fkfb3z,94,189,0|fkfb40,95,184,1|frzj3z,95,184,1|frzj40,94,189,0|fzwprz,94,189,0|fzwps0,95,184,1|gaplrz,95,184,1|gapls0,94,189,0|glvgfz,94,189,0|glvgg0,95,184,1|gtsn3z,95,184,1|gtsn40,94,189,0|h4lj3z,94,189,0|h4lj40,95,184,1|hciprz,95,184,1|hcips0,94,189,0|hnblrz,94,189,0|hnbls0,95,184,1|hv8sfz,95,184,1|hv8sg0,94,189,0|i6en3z,94,189,0|i6en40,95,184,1|idyv3z,95,184,1|idyv40,94,189,0|ip4prz,94,189,0|ip4ps0,95,184,1|ix1wfz,95,184,1|ix1wg0,94,189,0|j7usfz,94,189,0|j7usg0,95,184,1|jff0fz,95,184,1|jff0g0,94,189,0|jqkv3z,94,189,0|jqkv40,95,184,1|jyv0fz,95,184,1|jyv0g0,94,189,0|k881rz,94,189,0|k881s0,95,184,1|khl33z,95,184,1|khl340,94,189,0|kqy4fz,94,189,0|kqy4g0,95,184,1|l0b5rz,95,184,1|l0b5s0,94,189,0|l9o73z,94,189,0|l9o740,95,184,1|lj18fz,95,184,1|lj18g0,94,189,0|lse9rz,94,189,0|lse9s0,95,184,1|m1rb3z,95,184,1|m1rb40,94,189,0|mbhb3z,94,189,0|mbhb40,95,184,1|mkucfz,95,184,1|mkucg0,94,189,0|mu7drz,94,189,0|mu7ds0,95,184,1|n3kf3z,95,184,1|n3kf40,94,189,0|ncxgfz,94,189,0|ncxgg0,95,184,1|nmahrz,95,184,1|nmahs0,94,189,0|nvnj3z,94,189,0|nvnj40,95,184,1|o50kfz,95,184,1|o50kg0,94,189,0|oedlrz,94,189,0|oedls0,95,184,1|onqn3z,95,184,1|onqn40,94,189,0|ox3ofz,94,189,0|ox3og0,95,184,1|p6gprz,95,184,1|p6gps0,94,189,0|pg6prz,94,189,0|pg6ps0,95,184,1|ppjr3z,95,184,1|ppjr40,94,189,0|pywsfz,94,189,0|pywsg0,95,184,1|q89trz,95,184,1|q89ts0,94,189,0|qhmv3z,94,189,0|qhmv40,95,184,1|qqzwfz,95,184,1|qqzwg0,94,189,0|r0cxrz,94,189,0|r0cxs0,95,184,1|r9pz3z,95,184,1|r9pz40,94,189,0|rj30fz,94,189,0|rj30g0,95,184,1|rsg1rz,95,184,1|rsg1s0,94,189,0|s1t33z,94,189,0|s1t340,95,184,1|sbj33z,95,184,1|sbj340,94,189,0|skw4fz,94,189,0|skw4g0,95,184,1|su95rz,95,184,1|su95s0,94,189,0|t3m73z,94,189,0|t3m740,95,184,1|tcz8fz,95,184,1|tcz8g0,94,189,0|tmc9rz,94,189,0|tmc9s0,95,184,1|tvpb3z,95,184,1|tvpb40,94,189,0|u52cfz,94,189,0|u52cg0,95,184,1|uefdrz,95,184,1|uefds0,94,189,0|unsf3z,94,189,0|unsf40,95,184,1|ux5gfz,95,184,1|ux5gg0,94,189,0|v6vgfz,94,189,0|v6vgg0,95,184,1|vg8hrz,95,184,1|vg8hs0,94,189,0|vplj3z,94,189,0|vplj40,95,184,1|vyykfz,95,184,1|vyykg0,94,189,0|w8blrz,94,189,0|w8bls0,95,184,1|whon3z,95,184,1|whon40,94,189,0|wr1ofz,94,189,0|wr1og0,95,184,1|x0eprz,95,184,1|x0eps0,94,189,0|x9rr3z,94,189,0|x9rr40,95,184,1|xj4sfz,95,184,1|xj4sg0,94,189,0|xshtrz,94,189,0|xshts0,95,184,1|y1uv3z,95,184,1|y1uv40,94,189,0|ybkv3z,94,189,0|ybkv40,95,184,1|ykxwfz,95,184,1|ykxwg0,94,189,0|yuaxrz,94,189,0|yuaxs0,95,184,1|z3nz3z,95,184,1|z3nz40,94,189,0|zd10fz,94,189,0|zd10g0,95,184,1|zme1rz,95,184,1|zme1s0,94,189,0|zvr33z,94,189,0|zvr340,95,184,1|10544fz,95,184,1|10544g0,94,189,0|10eh5rz,94,189,0|10eh5s0,95,184,1|10nu73z,95,184,1|10nu740,94,189,0|10xk73z,94,189,0|10xk740,95,184,1|116x8fz,95,184,1|116x8g0,94,189,0|11ga9rz,94,189,0|11ga9s0,95,184,1|11pnb3z,95,184,1|11pnb40,94,189,0|11z0cfz,94,189,0|11z0cg0,95,184,1|128ddrz,95,184,1|128dds0,94,189,0|12hqf3z,94,189,0|12hqf40,95,184,1|12r3gfz,95,184,1|12r3gg0,94,189,0|130ghrz,94,189,0|130ghs0,95,184,1|139tj3z,95,184,1|139tj40,94,189,0|13j6kfz,94,189,0|13j6kg0,95,184,1|13sjlrz,95,184,1|13sjls0,94,189,0|1429lrz,94,189,0|1429ls0,95,184,1|14bmn3z,95,184,1|14bmn40,94,189,0|14kzofz,94,189,0|14kzog0,95,184,1|14ucprz,95,184,1|14ucps0,94,189,0|153pr3z,94,189,0|153pr40,95,184,1|15d2sfz,95,184,1|15d2sg0,94,189,0|15mftrz,94,189,0|15mfts0,95,184,1|15vsv3z,95,184,1|15vsv40,94,189,0|1655wfz,94,189,0|1655wg0,95,184,1|16eixrz,95,184,1|16eixs0,94,189,0|16nvz3z,94,189,0|16nvz40,95,184,1|16xlz3z,95,184,1|16xlz40,94,189,0|176z0fz,94,189,0|176z0g0,95,184,1|17gc1rz,95,184,1|17gc1s0,94,189,0|17pp33z,94,189,0|17pp340,95,184,1|17z24fz,95,184,1|17z24g0,94,189,0|188f5rz,94,189,0|188f5s0,95,184,1|18hs73z,95,184,1|18hs740,94,189,0|18r58fz,94,189,0|18r58g0,95,184,1|190i9rz,95,184,1|190i9s0,94,189,0|199vb3z,94,189,0|199vb40,95,184,1|19j8cfz,95,184,1|19j8cg0,94,189,0|19sycfz,94,189,0|19sycg0,95,184,1|1a2bdrz,95,184,1|1a2bds0,94,189,0|1abof3z,94,189,0|1abof40,95,184,1|1al1gfz,95,184,1|1al1gg0,94,189,0|1auehrz,94,189,0|1auehs0,95,184,1|1b3rj3z,95,184,1|1b3rj40,94,189,0|1bd4kfz,94,189,0|1bd4kg0,95,184,1|1bmhlrz,95,184,1|1bmhls0,94,189,0|1bvun3z,94,189,0|1bvun40,95,184,1|1c57ofz,95,184,1|1c57og0,94,189,0|1cekprz,94,189,0|1cekps0,95,184,1|1cnxr3z,95,184,1|1cnxr40,94,189,0|1cxnr3z,94,189,0|1cxnr40,95,184,1|1d70sfz,95,184,1|1d70sg0,94,189,0|1dgdtrz,94,189,0|1dgdts0,95,184,1|1dpqv3z,95,184,1|1dpqv40,94,189,0|1dz3wfz,94,189,0|1dz3wg0,95,184,1|1e8gxrz,95,184,1|1e8gxs0,94,189,0|1ehtz3z,94,189,0|1ehtz40,95,184,1|1er70fz,95,184,1|1er70g0,94,189,0|1f0k1rz,94,189,0|1f0k1s0,95,184,1|1f9x33z,95,184,1|1f9x340,94,189,0|1fjn33z,94,189,0|1fjn340,95,184,1|1ft04fz,95,184,1|1ft04g0,94,189,0|1g2d5rz,94,189,0|1g2d5s0,95,184,1|1gbq73z,95,184,1|1gbq740,94,189,0|1gl38fz,94,189,0|1gl38g0,95,184,1|1gug9rz,95,184,1|1gug9s0,94,189,0|1h3tb3z,94,189,0|1h3tb40,95,184,1|1hd6cfz,95,184,1|1hd6cg0,94,189,0|1hmjdrz,94,189,0|1hmjds0,95,184,1|1hvwf3z,95,184,1|1hvwf40,94,189,0|1i59gfz,94,189,0|1i59gg0,95,184,1|1iemhrz,95,184,1|1iemhs0,94,189,0|1iochrz,94,189,0|1iochs0,95,184,1|1ixpj3z,95,184,1|1ixpj40,94,189,0|1j72kfz,94,189,0|1j72kg0,95,184,1|1jgflrz,95,184,1|1jgfls0,94,189,0|1jpsn3z,94,189,0|1jpsn40,95,184,1|1jz5ofz,95,184,1|1jz5og0,94,189,0|1k8iprz,94,189,0|1k8ips0,95,184,1|1khvr3z,95,184,1|1khvr40,94,189,0|1kr8sfz,94,189,0|1kr8sg0,95,184,1|1l0ltrz,95,184,1|1l0lts0,94,189,0|1l9yv3z,94,189,0|1l9yv40,95,184,1|1ljov3z,95,184,1|1ljov40,94,189,0|1lt1wfz,94,189,0|1lt1wg0,95,184,1|1m2exrz,95,184,1|1m2exs0,94,189,0|1mbrz3z,94,189,0|1mbrz40,95,184,1|1ml50fz,95,184,1|1ml50g0,94,189,0|1mui1rz,94,189,0|1mui1s0,95,184,1|1n3v33z,95,184,1|1n3v340,94,189,0|1nd84fz,94,189,0|1nd84g0,95,184,1|1nml5rz,95,184,1|1nml5s0,94,189,0|1nvy73z,94,189,0|1nvy740,95,184,1|1o5b8fz,95,184,1|1o5b8g0,94,189,0|1of18fz,94,189,0|1of18g0,95,184,1|1ooe9rz,95,184,1|1ooe9s0,94,189,0|1oxrb3z,94,189,0|1oxrb40,95,184,1|1p74cfz,95,184,1|1p74cg0,94,189,0|1pghdrz,94,189,0|1pghds0,95,184,1|1ppuf3z,95,184,1|1ppuf40,94,189,0|1pz7gfz,94,189,0|1pz7gg0,95,184,1|1q8khrz,95,184,1|1q8khs0,94,189,0|1qhxj3z,94,189,0|1qhxj40,95,184,1|1qrakfz,95,184,1|1qrakg0,94,189,0|1r0nlrz,94,189,0|1r0nls0,95,184,1|1ra0n3z,95,184,1|1ra0n40,94,189,0|1rjqn3z,94,189,0|1rjqn40,95,184,1|1rt3ofz,95,184,1|1rt3og0,94,189,0|1s2gprz,94,189,0|1s2gps0,95,184,1|1sbtr3z,95,184,1|1sbtr40,94,189,0|1sl6sfz,94,189,0|1sl6sg0,95,184,1|1sujtrz,95,184,1|1sujts0,94,189,0|1t3wv3z,94,189,0|1t3wv40,95,184,1|1td9wfz,95,184,1|1td9wg0,94,189,0|1tmmxrz,94,189,0|1tmmxs0,95,184,1|1tvzz3z,95,184,1|1tvzz40,94,189,0|1u5pz3z,94,189,0|1u5pz40,95,184,1|1uf30fz,95,184,1|1uf30g0,94,189,0|1uog1rz,94,189,0|1uog1s0,95,184,1|1uxt33z,95,184,1|1uxt340,94,189,0|1v764fz,94,189,0|1v764g0,95,184,1|1vgj5rz,95,184,1|1vgj5s0,94,189,0|1vpw73z,94,189,0|1vpw740,95,184,1|NaN,95,184,1\",\"Etc/GMT+1|,199,13,0\",\"Etc/GMT+10|,208,34,0\",\"Etc/GMT+11|,209,33,0\",\"Etc/GMT+12|,210,396,0\",\"Etc/GMT+2|,200,43,0\",\"Etc/GMT+3|,201,41,0\",\"Etc/GMT+4|,202,40,0\",\"Etc/GMT+5|,203,59,0\",\"Etc/GMT+6|,204,63,0\",\"Etc/GMT+7|,205,62,0\",\"Etc/GMT+8|,206,38,0\",\"Etc/GMT+9|,207,35,0\",\"Etc/GMT-1|,198,8,0\",\"Etc/GMT-10|,189,189,0\",\"Etc/GMT-11|,188,184,0\",\"Etc/GMT-12|,187,194,0\",\"Etc/GMT-13|,186,195,0\",\"Etc/GMT-14|,185,201,0\",\"Etc/GMT-2|,197,9,0\",\"Etc/GMT-3|,196,4,0\",\"Etc/GMT-4|,195,203,0\",\"Etc/GMT-5|,194,186,0\",\"Etc/GMT-6|,193,190,0\",\"Etc/GMT-7|,192,185,0\",\"Etc/GMT-8|,191,183,0\",\"Etc/GMT-9|,190,218,0\",\"Europe/Amsterdam|,0,320,0|-1ygf4wl,0,320,0|-1ygf4wk,42,320,0|-s0dvkl,42,320,0|-s0dvkk,23,321,1|-rsimcl,23,321,1|-rsimck,42,320,0|-ridkol,42,320,0|-ridkok,23,321,1|-rage0l,23,321,1|-rage0k,42,320,0|-r0dfcl,42,320,0|-r0dfck,23,321,1|-qr0e0l,23,321,1|-qr0e0k,42,320,0|-qhae0l,42,320,0|-qhae0k,23,321,1|-q8abcl,23,321,1|-q8abck,42,320,0|-pykbcl,42,320,0|-pykbck,23,321,1|-ppk8ol,23,321,1|-ppk8ok,42,320,0|-pfu8ol,42,320,0|-pfu8ok,23,321,1|-p6u60l,23,321,1|-p6u60k,42,320,0|-oxizcl,42,320,0|-oxizck,23,321,1|-ong0ol,23,321,1|-ong0ok,42,320,0|-obazcl,42,320,0|-obazck,23,321,1|-o4py0l,23,321,1|-o4py0k,42,320,0|-nvpvcl,42,320,0|-nvpvck,23,321,1|-nlzvcl,23,321,1|-nlzvck,42,320,0|-n9hvcl,42,320,0|-n9hvck,23,321,1|-n39sol,23,321,1|-n39sok,42,320,0|-mrsu0l,42,320,0|-mrsu0k,23,321,1|-mkjq0l,23,321,1|-mkjq0k,42,320,0|-m90wol,42,320,0|-m90wok,23,321,1|-m1tncl,23,321,1|-m1tnck,42,320,0|-lq74ol,42,320,0|-lq74ok,23,321,1|-liqm0l,23,321,1|-liqm0k,42,320,0|-l7f7cl,42,320,0|-l7f7ck,23,321,1|-l00jcl,23,321,1|-l00jck,42,320,0|-kona0l,42,320,0|-kona0k,23,321,1|-khagol,23,321,1|-khagok,42,320,0|-k5vcol,42,320,0|-k5vcok,23,321,1|-jyke0l,23,321,1|-jyke0k,42,320,0|-jmom0l,42,320,0|-jmom0k,23,321,1|-jfubcl,23,321,1|-jfubck,42,320,0|-j49ncl,42,320,0|-j49nck,23,321,1|-iwra0l,23,321,1|-iwra0k,42,320,0|-ilhq0l,42,320,0|-ilhq0k,23,321,1|-ie17cl,23,321,1|-ie17ck,42,320,0|-i2psol,42,320,0|-i2psok,23,321,1|-hvb4ol,23,321,1|-hvb4ok,42,320,0|-hjw0ol,42,320,0|-hjw0ok,23,321,1|-hcl20l,23,321,1|-hcl20k,42,320,0|-h0r4ol,42,320,0|-h0r4ok,23,321,1|-gypacl,23,321,1|-gypack,146,322,1|-gtuzdd,146,322,1|-gtuzdc,147,323,0|-gic61d,147,323,0|-gic61c,146,322,1|-gb4wpd,146,322,1|-gb4wpc,147,323,0|-fzk8pd,147,323,0|-fzk8pc,146,322,1|-fs1vdd,146,322,1|-fs1vdc,147,323,0|-fgorld,147,323,0|-fgorlc,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6dp81,9,9,1|-d6dp80,8,8,0|-cx0nw1,8,8,0|-cx0nw0,9,9,1|-cofek1,9,9,1|-cofek0,8,8,0|3s9mrz,8,8,0|3s9ms0,9,9,1|419pfz,9,9,1|419pg0,8,8,0|4azpfz,8,8,0|4azpg0,9,9,1|4kcqrz,9,9,1|4kcqs0,8,8,0|4tps3z,8,8,0|4tps40,9,9,1|532tfz,9,9,1|532tg0,8,8,0|5cstfz,8,8,0|5cstg0,9,9,1|5lsw3z,9,9,1|5lsw40,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Andorra|,0,324,0|-100edm5,0,324,0|-100edm4,6,1,0|-c4xmo1,6,1,0|-c4xmo0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Astrakhan|,0,325,0|-nu2zkd,0,325,0|-nu2zkc,100,4,0|-kmr4c1,100,4,0|-kmr4c0,105,203,0|5vb3jz,105,203,0|5vb3k0,91,186,1|64pwrz,91,186,1|64pws0,105,203,0|6e30vz,105,203,0|6e30w0,91,186,1|6nhu3z,91,186,1|6nhu40,105,203,0|6wuy7z,105,203,0|6wuy80,91,186,1|769rfz,91,186,1|769rg0,105,203,0|7foq7z,105,203,0|7foq80,91,186,1|7p1x3z,91,186,1|7p1x40,105,203,0|7yeyfz,105,203,0|7yeyg0,91,186,1|87rzrz,91,186,1|87rzs0,105,203,0|8h513z,105,203,0|8h5140,91,186,1|8qi2fz,91,186,1|8qi2g0,105,203,0|8zv3rz,105,203,0|8zv3s0,91,186,1|99853z,91,186,1|998540,105,203,0|9il6fz,105,203,0|9il6g0,91,186,1|9ry7rz,91,186,1|9ry7s0,105,203,0|a1b93z,105,203,0|a1b940,105,203,1|aaod7z,105,203,1|aaod80,100,4,0|ak1ejz,100,4,0|ak1ek0,105,203,1|atrejz,105,203,1|atrek0,100,4,0|b34fvz,100,4,0|b34fw0,105,203,0|blufrz,105,203,0|blufs0,105,203,1|bv7jvz,105,203,1|bv7jw0,100,4,0|c4kl7z,100,4,0|c4kl80,105,203,1|cdxmjz,105,203,1|cdxmk0,100,4,0|cnanvz,100,4,0|cnanw0,105,203,1|cwnp7z,105,203,1|cwnp80,100,4,0|d60qjz,100,4,0|d60qk0,105,203,1|dfdrvz,105,203,1|dfdrw0,100,4,0|dp3rvz,100,4,0|dp3rw0,105,203,1|dzwnvz,105,203,1|dzwnw0,100,4,0|e7tujz,100,4,0|e7tuk0,105,203,1|eimqjz,105,203,1|eimqk0,100,4,0|eqjx7z,100,4,0|eqjx80,105,203,1|f1ct7z,105,203,1|f1ct80,100,4,0|f99zvz,100,4,0|f99zw0,105,203,1|fkfujz,105,203,1|fkfuk0,100,4,0|fs02jz,100,4,0|fs02k0,105,203,1|g35x7z,105,203,1|g35x80,100,4,0|gaq57z,100,4,0|gaq580,105,203,1|glvzvz,105,203,1|glvzw0,100,4,0|gtt6jz,100,4,0|gtt6k0,105,203,1|h4m2jz,105,203,1|h4m2k0,100,4,0|hcj97z,100,4,0|hcj980,105,203,1|hnc57z,105,203,1|hnc580,100,4,0|hv9bvz,100,4,0|hv9bw0,105,203,1|i6f6jz,105,203,1|i6f6k0,100,4,0|idzejz,100,4,0|idzek0,105,203,1|ip597z,105,203,1|ip5980,100,4,0|iwph7z,100,4,0|iwph80,105,203,1|j7vbvz,105,203,1|j7vbw0,100,4,0|jffjvz,100,4,0|jffjw0,105,203,1|jqlejz,105,203,1|jqlek0,100,4,0|jyil7z,100,4,0|jyil80,105,203,1|k9bh7z,105,203,1|k9bh80,100,4,0|kh8nvz,100,4,0|kh8nw0,105,203,1|ks1jvz,105,203,1|ks1jw0,100,4,0|kzyqjz,100,4,0|kzyqk0,105,203,1|lb4l7z,105,203,1|lb4l80,100,4,0|liot7z,100,4,0|liot80,105,203,0|ne0t3z,105,203,0|ne0t40,100,4,0|o4o57z,100,4,0|o4o580,105,203,0|NaN,105,203,0\",\"Europe/Athens|,0,326,0|-12rxtq5,0,326,0|-12rxtq4,42,326,0|-rvv0ch,42,326,0|-rvv0cg,14,9,0|-jkbpk1,14,9,0|-jkbpk0,15,4,1|-jhg301,15,4,1|-jhg300,14,9,0|-ezx6w1,14,9,0|-ezx6w0,15,4,1|-eyqoc1,15,4,1|-eyqoc0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dys2s1,8,8,0|-dys2s0,9,9,1|-dp4081,9,9,1|-dp4080,8,8,0|-dfp1g1,8,8,0|-dfp1g0,14,9,0|-94v1k1,14,9,0|-94v1k0,15,4,1|-8yhho1,15,4,1|-8yhho0,14,9,0|2r4d3z,14,9,0|2r4d40,15,4,1|32ul3z,15,4,1|32ul40,14,9,0|39wfzz,14,9,0|39wg00,15,4,1|3j9hbz,15,4,1|3j9hc0,14,9,0|3s9jzz,14,9,0|3s9k00,15,4,1|41bhbz,15,4,1|41bhc0,14,9,0|4azmnz,14,9,0|4azmo0,15,4,1|4jzs3z,15,4,1|4jzs40,14,9,0|4tq8rz,14,9,0|4tq8s0,15,4,1|530t7z,15,4,1|530t80,14,9,0|5cjbrz,14,9,0|5cjbs0,15,4,1|5lskzz,15,4,1|5lsl00,14,9,0|5v5xfz,14,9,0|5v5xg0,15,4,1|64iyrz,15,4,1|64iys0,14,9,0|6dw03z,14,9,0|6dw040,15,4,1|6n91fz,15,4,1|6n91g0,14,9,0|6wm2rz,14,9,0|6wm2s0,15,4,1|75z43z,15,4,1|75z440,14,9,0|7fc5fz,14,9,0|7fc5g0,15,4,1|7p25fz,15,4,1|7p25g0,14,9,0|7yf6rz,14,9,0|7yf6s0,15,4,1|87s83z,15,4,1|87s840,14,9,0|8h59fz,14,9,0|8h59g0,15,4,1|8qiarz,15,4,1|8qias0,14,9,0|8zvc3z,14,9,0|8zvc40,15,4,1|998dfz,15,4,1|998dg0,14,9,0|9ilerz,14,9,0|9iles0,15,4,1|9ryg3z,15,4,1|9ryg40,14,9,0|a1bhfz,14,9,0|a1bhg0,15,4,1|aaoirz,15,4,1|aaois0,14,9,0|ak1k3z,14,9,0|ak1k40,15,4,1|atrk3z,15,4,1|atrk40,14,9,0|b34lfz,14,9,0|b34lg0,15,4,1|bchmrz,15,4,1|bchms0,14,9,0|bluo3z,14,9,0|bluo40,15,4,1|bv7pfz,15,4,1|bv7pg0,14,9,0|c4kqrz,14,9,0|c4kqs0,15,4,1|cdxs3z,15,4,1|cdxs40,14,9,0|cnatfz,14,9,0|cnatg0,15,4,1|cwnurz,15,4,1|cwnus0,14,9,0|d60w3z,14,9,0|d60w40,15,4,1|dfdxfz,15,4,1|dfdxg0,14,9,0|dp3xfz,14,9,0|dp3xg0,15,4,1|dzwtfz,15,4,1|dzwtg0,14,9,0|e7u03z,14,9,0|e7u040,15,4,1|eimw3z,15,4,1|eimw40,14,9,0|eqk2rz,14,9,0|eqk2s0,15,4,1|f1cyrz,15,4,1|f1cys0,14,9,0|f9a5fz,14,9,0|f9a5g0,15,4,1|fkg03z,15,4,1|fkg040,14,9,0|fs083z,14,9,0|fs0840,15,4,1|g362rz,15,4,1|g362s0,14,9,0|gaqarz,14,9,0|gaqas0,15,4,1|glw5fz,15,4,1|glw5g0,14,9,0|gttc3z,14,9,0|gttc40,15,4,1|h4m83z,15,4,1|h4m840,14,9,0|hcjerz,14,9,0|hcjes0,15,4,1|hncarz,15,4,1|hncas0,14,9,0|hv9hfz,14,9,0|hv9hg0,15,4,1|i6fc3z,15,4,1|i6fc40,14,9,0|idzk3z,14,9,0|idzk40,15,4,1|ip5erz,15,4,1|ip5es0,14,9,0|iwpmrz,14,9,0|iwpms0,15,4,1|j7vhfz,15,4,1|j7vhg0,14,9,0|jffpfz,14,9,0|jffpg0,15,4,1|jqlk3z,15,4,1|jqlk40,14,9,0|jyiqrz,14,9,0|jyiqs0,15,4,1|k9bmrz,15,4,1|k9bms0,14,9,0|kh8tfz,14,9,0|kh8tg0,15,4,1|ks1pfz,15,4,1|ks1pg0,14,9,0|kzyw3z,14,9,0|kzyw40,15,4,1|lb4qrz,15,4,1|lb4qs0,14,9,0|lioyrz,14,9,0|lioys0,15,4,1|ltutfz,15,4,1|ltutg0,14,9,0|m1f1fz,14,9,0|m1f1g0,15,4,1|mckw3z,15,4,1|mckw40,14,9,0|mki2rz,14,9,0|mki2s0,15,4,1|mvayrz,15,4,1|mvays0,14,9,0|n385fz,14,9,0|n385g0,15,4,1|ne11fz,15,4,1|ne11g0,14,9,0|nly83z,14,9,0|nly840,15,4,1|nwr43z,15,4,1|nwr440,14,9,0|o4oarz,14,9,0|o4oas0,15,4,1|ofu5fz,15,4,1|ofu5g0,14,9,0|onedfz,14,9,0|onedg0,15,4,1|oyk83z,15,4,1|oyk840,14,9,0|p64g3z,14,9,0|p64g40,15,4,1|phaarz,15,4,1|phaas0,14,9,0|pp7hfz,14,9,0|pp7hg0,15,4,1|q00dfz,15,4,1|q00dg0,14,9,0|q7xk3z,14,9,0|q7xk40,15,4,1|qiqg3z,15,4,1|qiqg40,14,9,0|qqnmrz,14,9,0|qqnms0,15,4,1|r1thfz,15,4,1|r1thg0,14,9,0|r9dpfz,14,9,0|r9dpg0,15,4,1|rkjk3z,15,4,1|rkjk40,14,9,0|rs3s3z,14,9,0|rs3s40,15,4,1|s39mrz,15,4,1|s39ms0,14,9,0|sb6tfz,14,9,0|sb6tg0,15,4,1|slzpfz,15,4,1|slzpg0,14,9,0|stww3z,14,9,0|stww40,15,4,1|t4ps3z,15,4,1|t4ps40,14,9,0|tcmyrz,14,9,0|tcmys0,15,4,1|tnfurz,15,4,1|tnfus0,14,9,0|tvd1fz,14,9,0|tvd1g0,15,4,1|u6iw3z,15,4,1|u6iw40,14,9,0|ue343z,14,9,0|ue3440,15,4,1|up8yrz,15,4,1|up8ys0,14,9,0|uwt6rz,14,9,0|uwt6s0,15,4,1|v7z1fz,15,4,1|v7z1g0,14,9,0|vfw83z,14,9,0|vfw840,15,4,1|vqp43z,15,4,1|vqp440,14,9,0|vymarz,14,9,0|vymas0,15,4,1|w9f6rz,15,4,1|w9f6s0,14,9,0|whcdfz,14,9,0|whcdg0,15,4,1|wsi83z,15,4,1|wsi840,14,9,0|x02g3z,14,9,0|x02g40,15,4,1|xb8arz,15,4,1|xb8as0,14,9,0|xisirz,14,9,0|xisis0,15,4,1|xtydfz,15,4,1|xtydg0,14,9,0|y1ilfz,14,9,0|y1ilg0,15,4,1|ycog3z,15,4,1|ycog40,14,9,0|yklmrz,14,9,0|yklms0,15,4,1|yveirz,15,4,1|yveis0,14,9,0|z3bpfz,14,9,0|z3bpg0,15,4,1|ze4lfz,15,4,1|ze4lg0,14,9,0|zm1s3z,14,9,0|zm1s40,15,4,1|zx7mrz,15,4,1|zx7ms0,14,9,0|104rurz,14,9,0|104rus0,15,4,1|10fxpfz,15,4,1|10fxpg0,14,9,0|10nhxfz,14,9,0|10nhxg0,15,4,1|10yns3z,15,4,1|10yns40,14,9,0|116kyrz,14,9,0|116kys0,15,4,1|11hdurz,15,4,1|11hdus0,14,9,0|11pb1fz,14,9,0|11pb1g0,15,4,1|1203xfz,15,4,1|1203xg0,14,9,0|128143z,14,9,0|1281440,15,4,1|12iu03z,15,4,1|12iu040,14,9,0|12qr6rz,14,9,0|12qr6s0,15,4,1|131x1fz,15,4,1|131x1g0,14,9,0|139h9fz,14,9,0|139h9g0,15,4,1|13kn43z,15,4,1|13kn440,14,9,0|13s7c3z,14,9,0|13s7c40,15,4,1|143d6rz,15,4,1|143d6s0,14,9,0|14badfz,14,9,0|14badg0,15,4,1|14m39fz,15,4,1|14m39g0,14,9,0|14u0g3z,14,9,0|14u0g40,15,4,1|154tc3z,15,4,1|154tc40,14,9,0|15cqirz,14,9,0|15cqis0,15,4,1|15nwdfz,15,4,1|15nwdg0,14,9,0|15vglfz,14,9,0|15vglg0,15,4,1|166mg3z,15,4,1|166mg40,14,9,0|16e6o3z,14,9,0|16e6o40,15,4,1|16pcirz,15,4,1|16pcis0,14,9,0|16x9pfz,14,9,0|16x9pg0,15,4,1|1782lfz,15,4,1|1782lg0,14,9,0|17fzs3z,14,9,0|17fzs40,15,4,1|17qso3z,15,4,1|17qso40,14,9,0|17ypurz,14,9,0|17ypus0,15,4,1|189iqrz,15,4,1|189iqs0,14,9,0|18hfxfz,14,9,0|18hfxg0,15,4,1|18sls3z,15,4,1|18sls40,14,9,0|190603z,14,9,0|1906040,15,4,1|19bburz,15,4,1|19bbus0,14,9,0|19iw2rz,14,9,0|19iw2s0,15,4,1|19u1xfz,15,4,1|19u1xg0,14,9,0|1a1z43z,14,9,0|1a1z440,15,4,1|1acs03z,15,4,1|1acs040,14,9,0|1akp6rz,14,9,0|1akp6s0,15,4,1|1avi2rz,15,4,1|1avi2s0,14,9,0|1b3f9fz,14,9,0|1b3f9g0,15,4,1|1bel43z,15,4,1|1bel440,14,9,0|1bm5c3z,14,9,0|1bm5c40,15,4,1|1bxb6rz,15,4,1|1bxb6s0,14,9,0|1c4verz,14,9,0|1c4ves0,15,4,1|1cg19fz,15,4,1|1cg19g0,14,9,0|1cnlhfz,14,9,0|1cnlhg0,15,4,1|1cyrc3z,15,4,1|1cyrc40,14,9,0|1d6oirz,14,9,0|1d6ois0,15,4,1|1dhherz,15,4,1|1dhhes0,14,9,0|1dpelfz,14,9,0|1dpelg0,15,4,1|1e07hfz,15,4,1|1e07hg0,14,9,0|1e84o3z,14,9,0|1e84o40,15,4,1|1ejairz,15,4,1|1ejais0,14,9,0|1equqrz,14,9,0|1equqs0,15,4,1|1f20lfz,15,4,1|1f20lg0,14,9,0|1f9ktfz,14,9,0|1f9ktg0,15,4,1|1fkqo3z,15,4,1|1fkqo40,14,9,0|1fsnurz,14,9,0|1fsnus0,15,4,1|1g3gqrz,15,4,1|1g3gqs0,14,9,0|1gbdxfz,14,9,0|1gbdxg0,15,4,1|1gm6tfz,15,4,1|1gm6tg0,14,9,0|1gu403z,14,9,0|1gu4040,15,4,1|1h4ww3z,15,4,1|1h4ww40,14,9,0|1hcu2rz,14,9,0|1hcu2s0,15,4,1|1hnzxfz,15,4,1|1hnzxg0,14,9,0|1hvk5fz,14,9,0|1hvk5g0,15,4,1|1i6q03z,15,4,1|1i6q040,14,9,0|1iea83z,14,9,0|1iea840,15,4,1|1ipg2rz,15,4,1|1ipg2s0,14,9,0|1ixd9fz,14,9,0|1ixd9g0,15,4,1|1j865fz,15,4,1|1j865g0,14,9,0|1jg3c3z,14,9,0|1jg3c40,15,4,1|1jqw83z,15,4,1|1jqw840,14,9,0|1jyterz,14,9,0|1jytes0,15,4,1|1k9z9fz,15,4,1|1k9z9g0,14,9,0|1khjhfz,14,9,0|1khjhg0,15,4,1|1kspc3z,15,4,1|1kspc40,14,9,0|1l09k3z,14,9,0|1l09k40,15,4,1|1lbferz,15,4,1|1lbfes0,14,9,0|1ljclfz,14,9,0|1ljclg0,15,4,1|1lu5hfz,15,4,1|1lu5hg0,14,9,0|1m22o3z,14,9,0|1m22o40,15,4,1|1mcvk3z,15,4,1|1mcvk40,14,9,0|1mksqrz,14,9,0|1mksqs0,15,4,1|1mvlmrz,15,4,1|1mvlms0,14,9,0|1n3itfz,14,9,0|1n3itg0,15,4,1|1neoo3z,15,4,1|1neoo40,14,9,0|1nm8w3z,14,9,0|1nm8w40,15,4,1|1nxeqrz,15,4,1|1nxeqs0,14,9,0|1o4yyrz,14,9,0|1o4yys0,15,4,1|1og4tfz,15,4,1|1og4tg0,14,9,0|1oo203z,14,9,0|1oo2040,15,4,1|1oyuw3z,15,4,1|1oyuw40,14,9,0|1p6s2rz,14,9,0|1p6s2s0,15,4,1|1phkyrz,15,4,1|1phkys0,14,9,0|1ppi5fz,14,9,0|1ppi5g0,15,4,1|1q0o03z,15,4,1|1q0o040,14,9,0|1q8883z,14,9,0|1q88840,15,4,1|1qje2rz,15,4,1|1qje2s0,14,9,0|1qqyarz,14,9,0|1qqyas0,15,4,1|1r245fz,15,4,1|1r245g0,14,9,0|1r9odfz,14,9,0|1r9odg0,15,4,1|1rku83z,15,4,1|1rku840,14,9,0|1rsrerz,14,9,0|1rsres0,15,4,1|1s3karz,15,4,1|1s3kas0,14,9,0|1sbhhfz,14,9,0|1sbhhg0,15,4,1|1smadfz,15,4,1|1smadg0,14,9,0|1su7k3z,14,9,0|1su7k40,15,4,1|1t5derz,15,4,1|1t5des0,14,9,0|1tcxmrz,14,9,0|1tcxms0,15,4,1|1to3hfz,15,4,1|1to3hg0,14,9,0|1tvnpfz,14,9,0|1tvnpg0,15,4,1|1u6tk3z,15,4,1|1u6tk40,14,9,0|1ueqqrz,14,9,0|1ueqqs0,15,4,1|1upjmrz,15,4,1|1upjms0,14,9,0|1uxgtfz,14,9,0|1uxgtg0,15,4,1|1v89pfz,15,4,1|1v89pg0,14,9,0|1vg6w3z,14,9,0|1vg6w40,15,4,1|1vqzs3z,15,4,1|1vqzs40,14,9,0|NaN,14,9,0\",\"Europe/Belgrade|,0,327,0|-18vsmgp,0,327,0|-18vsmgo,8,8,0|-ezayw1,8,8,0|-ezayw0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6dp81,9,9,1|-d6dp80,8,8,0|-cv5zw1,8,8,0|-cv5zw0,9,9,1|-cofek1,9,9,1|-cofek0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Berlin|,0,328,0|-1421155,0,328,0|-1421154,8,8,0|-s0e081,8,8,0|-s0e080,9,9,1|-rsilg1,9,9,1|-rsilg0,8,8,0|-ridmk1,8,8,0|-ridmk0,9,9,1|-ragfw1,9,9,1|-ragfw0,8,8,0|-qznjw1,8,8,0|-qznjw0,9,9,1|-qrqd81,9,9,1|-qrqd80,8,8,0|-fizzw1,8,8,0|-fizzw0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6dp81,9,9,1|-d6dp80,8,8,0|-cx0nw1,8,8,0|-cx0nw0,9,9,1|-cucg01,9,9,1|-cucg00,148,4,1|-co0o01,148,4,1|-co0o00,9,9,1|-cl6qk1,9,9,1|-cl6qk0,8,8,0|-cdmik1,8,8,0|-cdmik0,9,9,1|-c4kl81,9,9,1|-c4kl80,8,8,0|-bv9bs1,8,8,0|-bv9bs0,9,9,1|-btgl81,9,9,1|-btgl80,148,4,1|-bqxxc1,148,4,1|-bqxxc0,9,9,1|-blwd81,9,9,1|-blwd80,8,8,0|-bbtek1,8,8,0|-bbtek0,9,9,1|-b36ak1,9,9,1|-b36ak0,8,8,0|-atgak1,8,8,0|-atgak0,9,9,1|-akg7w1,9,9,1|-akg7w0,8,8,0|5cstfz,8,8,0|5cstg0,9,9,1|5lsw3z,9,9,1|5lsw40,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Bratislava|,0,329,0|-1qmkw09,0,329,0|-1qmkw08,5,329,0|-14u7uo9,5,329,0|-14u7uo8,8,8,0|-s0e081,8,8,0|-s0e080,9,9,1|-rsilg1,9,9,1|-rsilg0,8,8,0|-ridmk1,8,8,0|-ridmk0,9,9,1|-ragfw1,9,9,1|-ragfw0,8,8,0|-qznjw1,8,8,0|-qznjw0,9,9,1|-qrqd81,9,9,1|-qrqd80,8,8,0|-fizzw1,8,8,0|-fizzw0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6dp81,9,9,1|-d6dp80,8,8,0|-cx0nw1,8,8,0|-cx0nw0,9,9,1|-cnnmk1,9,9,1|-cnnmk0,8,8,0|-cchrw1,8,8,0|-cchrw0,9,9,1|-c4mfw1,9,9,1|-c4mfw0,8,8,0|-c1qns1,8,8,0|-c1qns0,1,1,1|-bxf3s1,1,1,1|-bxf3s0,8,8,0|-bujh81,8,8,0|-bujh80,9,9,1|-blwd81,9,9,1|-blwd80,8,8,0|-bbtek1,8,8,0|-bbtek0,9,9,1|-b36ak1,9,9,1|-b36ak0,8,8,0|-ati581,8,8,0|-ati580,9,9,1|-akg7w1,9,9,1|-akg7w0,8,8,0|4tps3z,8,8,0|4tps40,9,9,1|532tfz,9,9,1|532tg0,8,8,0|5cstfz,8,8,0|5cstg0,9,9,1|5lsw3z,9,9,1|5lsw40,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Brussels|,0,330,0|-1ayy3h7,0,330,0|-1ayy3h6,54,330,0|-14j9c01,54,330,0|-14j9c00,6,1,0|-ss5uo1,6,1,0|-ss5uo0,8,8,0|-s0dxg1,8,8,0|-s0dxg0,9,9,1|-rsilg1,9,9,1|-rsilg0,8,8,0|-ridmk1,8,8,0|-ridmk0,9,9,1|-ragfw1,9,9,1|-ragfw0,8,8,0|-qznjw1,8,8,0|-qznjw0,9,9,1|-qrqd81,9,9,1|-qrqd80,8,8,0|-qotw41,8,8,0|-qotw40,6,1,0|-qj59g1,6,1,0|-qj59g0,7,8,1|-q7zes1,7,8,1|-q7zes0,6,1,0|-q15441,6,1,0|-q15440,7,8,1|-po6g41,7,8,1|-po6g40,6,1,0|-pgvhg1,6,1,0|-pgvhg0,7,8,1|-p5atg1,7,8,1|-p5atg0,6,1,0|-oxj6s1,6,1,0|-oxj6s0,7,8,1|-ong841,7,8,1|-ong840,6,1,0|-odd9g1,6,1,0|-odd9g0,7,8,1|-o4q5g1,7,8,1|-o4q5g0,6,1,0|-nvq2s1,6,1,0|-nvq2s0,7,8,1|-nm02s1,7,8,1|-nm02s0,6,1,0|-ncn1g1,6,1,0|-ncn1g0,7,8,1|-n3a041,7,8,1|-n3a040,6,1,0|-mt71g1,6,1,0|-mt71g0,7,8,1|-mkjxg1,7,8,1|-mkjxg0,6,1,0|-matxg1,6,1,0|-matxg0,7,8,1|-m1tus1,7,8,1|-m1tus0,6,1,0|-lrqw41,6,1,0|-lrqw40,7,8,1|-liql41,7,8,1|-liql40,6,1,0|-l8nmg1,6,1,0|-l8nmg0,7,8,1|-l00ig1,7,8,1|-l00ig0,6,1,0|-kqaig1,6,1,0|-kqaig0,7,8,1|-khafs1,7,8,1|-khafs0,6,1,0|-k77h41,6,1,0|-k77h40,7,8,1|-jykd41,7,8,1|-jykd40,6,1,0|-jp7bs1,6,1,0|-jp7bs0,7,8,1|-jfuag1,7,8,1|-jfuag0,6,1,0|-j6u7s1,6,1,0|-j6u7s0,7,8,1|-iwr941,7,8,1|-iwr940,6,1,0|-ine7s1,6,1,0|-ine7s0,7,8,1|-ie16g1,7,8,1|-ie16g0,6,1,0|-i513s1,6,1,0|-i513s0,7,8,1|-hvb3s1,7,8,1|-hvb3s0,6,1,0|-hl8541,6,1,0|-hl8540,7,8,1|-hcl141,7,8,1|-hcl140,6,1,0|-h37zs1,6,1,0|-h37zs0,7,8,1|-gtuyg1,7,8,1|-gtuyg0,6,1,0|-gkuvs1,6,1,0|-gkuvs0,7,8,1|-gb4vs1,7,8,1|-gb4vs0,6,1,0|-g11x41,6,1,0|-g11x40,7,8,1|-fpw2g1,7,8,1|-fpw2g0,6,1,0|-fkul41,6,1,0|-fkul40,7,8,1|-fgh6g1,7,8,1|-fgh6g0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d75h81,9,9,1|-d75h80,8,8,0|-cx0nw1,8,8,0|-cx0nw0,9,9,1|-cofek1,9,9,1|-cofek0,8,8,0|-cbtp81,8,8,0|-cbtp80,9,9,1|-c4kl81,9,9,1|-c4kl80,8,8,0|3s9mrz,8,8,0|3s9ms0,9,9,1|419pfz,9,9,1|419pg0,8,8,0|4azpfz,8,8,0|4azpg0,9,9,1|4kcqrz,9,9,1|4kcqs0,8,8,0|4tps3z,8,8,0|4tps40,9,9,1|532tfz,9,9,1|532tg0,8,8,0|5cstfz,8,8,0|5cstg0,9,9,1|5lsw3z,9,9,1|5lsw40,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Bucharest|,0,331,0|-14u7wu1,0,331,0|-14u7wu0,54,331,0|-k29zi1,54,331,0|-k29zi0,14,9,0|-jmqqw1,14,9,0|-jmqqw0,15,4,1|-jfulk1,15,4,1|-jfulk0,14,9,0|-j6hk81,14,9,0|-j6hk80,15,4,1|-ix4iw1,15,4,1|-ix4iw0,14,9,0|-ineiw1,14,9,0|-ineiw0,15,4,1|-ie1hk1,15,4,1|-ie1hk0,14,9,0|-i4og81,14,9,0|-i4og80,15,4,1|-hvbew1,15,4,1|-hvbew0,14,9,0|-hlydk1,14,9,0|-hlydk0,15,4,1|-hclc81,15,4,1|-hclc80,14,9,0|-h38aw1,14,9,0|-h38aw0,15,4,1|-gtv9k1,15,4,1|-gtv9k0,14,9,0|-gki881,14,9,0|-gki880,15,4,1|-gb56w1,15,4,1|-gb56w0,14,9,0|-g1s5k1,14,9,0|-g1s5k0,15,4,1|-fsf481,15,4,1|-fsf480,14,9,0|4wl93z,14,9,0|4wl940,15,4,1|532ibz,15,4,1|532ic0,14,9,0|5csibz,14,9,0|5csic0,15,4,1|5lsnrz,15,4,1|5lsns0,14,9,0|5v5unz,14,9,0|5v5uo0,15,4,1|64ivzz,15,4,1|64iw00,14,9,0|6dvxbz,14,9,0|6dvxc0,15,4,1|6n8ynz,15,4,1|6n8yo0,14,9,0|6wlzzz,14,9,0|6wm000,15,4,1|75z1bz,15,4,1|75z1c0,14,9,0|7fc2nz,14,9,0|7fc2o0,15,4,1|7p22nz,15,4,1|7p22o0,14,9,0|7yf3zz,14,9,0|7yf400,15,4,1|87s5bz,15,4,1|87s5c0,14,9,0|8h56nz,14,9,0|8h56o0,15,4,1|8qi7zz,15,4,1|8qi800,14,9,0|8zv9bz,14,9,0|8zv9c0,15,4,1|998anz,15,4,1|998ao0,14,9,0|9ilbzz,14,9,0|9ilc00,15,4,1|9rydbz,15,4,1|9rydc0,14,9,0|a1benz,14,9,0|a1beo0,15,4,1|aaofzz,15,4,1|aaog00,14,9,0|ak1hbz,14,9,0|ak1hc0,15,4,1|atrhbz,15,4,1|atrhc0,14,9,0|b34d3z,14,9,0|b34d40,15,4,1|bchefz,15,4,1|bcheg0,14,9,0|blufrz,14,9,0|blufs0,15,4,1|bv7h3z,15,4,1|bv7h40,14,9,0|c4kifz,14,9,0|c4kig0,15,4,1|cdxjrz,15,4,1|cdxjs0,14,9,0|cnal3z,14,9,0|cnal40,15,4,1|cwnjnz,15,4,1|cwnjo0,14,9,0|d60nrz,14,9,0|d60ns0,15,4,1|dfdmbz,15,4,1|dfdmc0,14,9,0|dp3p3z,14,9,0|dp3p40,15,4,1|dzwibz,15,4,1|dzwic0,14,9,0|e7u03z,14,9,0|e7u040,15,4,1|eimw3z,15,4,1|eimw40,14,9,0|eqk2rz,14,9,0|eqk2s0,15,4,1|f1cyrz,15,4,1|f1cys0,14,9,0|f9a5fz,14,9,0|f9a5g0,15,4,1|fkg03z,15,4,1|fkg040,14,9,0|fs083z,14,9,0|fs0840,15,4,1|g362rz,15,4,1|g362s0,14,9,0|gaqarz,14,9,0|gaqas0,15,4,1|glw5fz,15,4,1|glw5g0,14,9,0|gttc3z,14,9,0|gttc40,15,4,1|h4m83z,15,4,1|h4m840,14,9,0|hcjerz,14,9,0|hcjes0,15,4,1|hncarz,15,4,1|hncas0,14,9,0|hv9hfz,14,9,0|hv9hg0,15,4,1|i6fc3z,15,4,1|i6fc40,14,9,0|idzk3z,14,9,0|idzk40,15,4,1|ip5erz,15,4,1|ip5es0,14,9,0|iwpmrz,14,9,0|iwpms0,15,4,1|j7vhfz,15,4,1|j7vhg0,14,9,0|jffpfz,14,9,0|jffpg0,15,4,1|jqlk3z,15,4,1|jqlk40,14,9,0|jyiqrz,14,9,0|jyiqs0,15,4,1|k9bmrz,15,4,1|k9bms0,14,9,0|kh8tfz,14,9,0|kh8tg0,15,4,1|ks1pfz,15,4,1|ks1pg0,14,9,0|kzyw3z,14,9,0|kzyw40,15,4,1|lb4qrz,15,4,1|lb4qs0,14,9,0|lioyrz,14,9,0|lioys0,15,4,1|ltutfz,15,4,1|ltutg0,14,9,0|m1f1fz,14,9,0|m1f1g0,15,4,1|mckw3z,15,4,1|mckw40,14,9,0|mki2rz,14,9,0|mki2s0,15,4,1|mvayrz,15,4,1|mvays0,14,9,0|n385fz,14,9,0|n385g0,15,4,1|ne11fz,15,4,1|ne11g0,14,9,0|nly83z,14,9,0|nly840,15,4,1|nwr43z,15,4,1|nwr440,14,9,0|o4oarz,14,9,0|o4oas0,15,4,1|ofu5fz,15,4,1|ofu5g0,14,9,0|onedfz,14,9,0|onedg0,15,4,1|oyk83z,15,4,1|oyk840,14,9,0|p64g3z,14,9,0|p64g40,15,4,1|phaarz,15,4,1|phaas0,14,9,0|pp7hfz,14,9,0|pp7hg0,15,4,1|q00dfz,15,4,1|q00dg0,14,9,0|q7xk3z,14,9,0|q7xk40,15,4,1|qiqg3z,15,4,1|qiqg40,14,9,0|qqnmrz,14,9,0|qqnms0,15,4,1|r1thfz,15,4,1|r1thg0,14,9,0|r9dpfz,14,9,0|r9dpg0,15,4,1|rkjk3z,15,4,1|rkjk40,14,9,0|rs3s3z,14,9,0|rs3s40,15,4,1|s39mrz,15,4,1|s39ms0,14,9,0|sb6tfz,14,9,0|sb6tg0,15,4,1|slzpfz,15,4,1|slzpg0,14,9,0|stww3z,14,9,0|stww40,15,4,1|t4ps3z,15,4,1|t4ps40,14,9,0|tcmyrz,14,9,0|tcmys0,15,4,1|tnfurz,15,4,1|tnfus0,14,9,0|tvd1fz,14,9,0|tvd1g0,15,4,1|u6iw3z,15,4,1|u6iw40,14,9,0|ue343z,14,9,0|ue3440,15,4,1|up8yrz,15,4,1|up8ys0,14,9,0|uwt6rz,14,9,0|uwt6s0,15,4,1|v7z1fz,15,4,1|v7z1g0,14,9,0|vfw83z,14,9,0|vfw840,15,4,1|vqp43z,15,4,1|vqp440,14,9,0|vymarz,14,9,0|vymas0,15,4,1|w9f6rz,15,4,1|w9f6s0,14,9,0|whcdfz,14,9,0|whcdg0,15,4,1|wsi83z,15,4,1|wsi840,14,9,0|x02g3z,14,9,0|x02g40,15,4,1|xb8arz,15,4,1|xb8as0,14,9,0|xisirz,14,9,0|xisis0,15,4,1|xtydfz,15,4,1|xtydg0,14,9,0|y1ilfz,14,9,0|y1ilg0,15,4,1|ycog3z,15,4,1|ycog40,14,9,0|yklmrz,14,9,0|yklms0,15,4,1|yveirz,15,4,1|yveis0,14,9,0|z3bpfz,14,9,0|z3bpg0,15,4,1|ze4lfz,15,4,1|ze4lg0,14,9,0|zm1s3z,14,9,0|zm1s40,15,4,1|zx7mrz,15,4,1|zx7ms0,14,9,0|104rurz,14,9,0|104rus0,15,4,1|10fxpfz,15,4,1|10fxpg0,14,9,0|10nhxfz,14,9,0|10nhxg0,15,4,1|10yns3z,15,4,1|10yns40,14,9,0|116kyrz,14,9,0|116kys0,15,4,1|11hdurz,15,4,1|11hdus0,14,9,0|11pb1fz,14,9,0|11pb1g0,15,4,1|1203xfz,15,4,1|1203xg0,14,9,0|128143z,14,9,0|1281440,15,4,1|12iu03z,15,4,1|12iu040,14,9,0|12qr6rz,14,9,0|12qr6s0,15,4,1|131x1fz,15,4,1|131x1g0,14,9,0|139h9fz,14,9,0|139h9g0,15,4,1|13kn43z,15,4,1|13kn440,14,9,0|13s7c3z,14,9,0|13s7c40,15,4,1|143d6rz,15,4,1|143d6s0,14,9,0|14badfz,14,9,0|14badg0,15,4,1|14m39fz,15,4,1|14m39g0,14,9,0|14u0g3z,14,9,0|14u0g40,15,4,1|154tc3z,15,4,1|154tc40,14,9,0|15cqirz,14,9,0|15cqis0,15,4,1|15nwdfz,15,4,1|15nwdg0,14,9,0|15vglfz,14,9,0|15vglg0,15,4,1|166mg3z,15,4,1|166mg40,14,9,0|16e6o3z,14,9,0|16e6o40,15,4,1|16pcirz,15,4,1|16pcis0,14,9,0|16x9pfz,14,9,0|16x9pg0,15,4,1|1782lfz,15,4,1|1782lg0,14,9,0|17fzs3z,14,9,0|17fzs40,15,4,1|17qso3z,15,4,1|17qso40,14,9,0|17ypurz,14,9,0|17ypus0,15,4,1|189iqrz,15,4,1|189iqs0,14,9,0|18hfxfz,14,9,0|18hfxg0,15,4,1|18sls3z,15,4,1|18sls40,14,9,0|190603z,14,9,0|1906040,15,4,1|19bburz,15,4,1|19bbus0,14,9,0|19iw2rz,14,9,0|19iw2s0,15,4,1|19u1xfz,15,4,1|19u1xg0,14,9,0|1a1z43z,14,9,0|1a1z440,15,4,1|1acs03z,15,4,1|1acs040,14,9,0|1akp6rz,14,9,0|1akp6s0,15,4,1|1avi2rz,15,4,1|1avi2s0,14,9,0|1b3f9fz,14,9,0|1b3f9g0,15,4,1|1bel43z,15,4,1|1bel440,14,9,0|1bm5c3z,14,9,0|1bm5c40,15,4,1|1bxb6rz,15,4,1|1bxb6s0,14,9,0|1c4verz,14,9,0|1c4ves0,15,4,1|1cg19fz,15,4,1|1cg19g0,14,9,0|1cnlhfz,14,9,0|1cnlhg0,15,4,1|1cyrc3z,15,4,1|1cyrc40,14,9,0|1d6oirz,14,9,0|1d6ois0,15,4,1|1dhherz,15,4,1|1dhhes0,14,9,0|1dpelfz,14,9,0|1dpelg0,15,4,1|1e07hfz,15,4,1|1e07hg0,14,9,0|1e84o3z,14,9,0|1e84o40,15,4,1|1ejairz,15,4,1|1ejais0,14,9,0|1equqrz,14,9,0|1equqs0,15,4,1|1f20lfz,15,4,1|1f20lg0,14,9,0|1f9ktfz,14,9,0|1f9ktg0,15,4,1|1fkqo3z,15,4,1|1fkqo40,14,9,0|1fsnurz,14,9,0|1fsnus0,15,4,1|1g3gqrz,15,4,1|1g3gqs0,14,9,0|1gbdxfz,14,9,0|1gbdxg0,15,4,1|1gm6tfz,15,4,1|1gm6tg0,14,9,0|1gu403z,14,9,0|1gu4040,15,4,1|1h4ww3z,15,4,1|1h4ww40,14,9,0|1hcu2rz,14,9,0|1hcu2s0,15,4,1|1hnzxfz,15,4,1|1hnzxg0,14,9,0|1hvk5fz,14,9,0|1hvk5g0,15,4,1|1i6q03z,15,4,1|1i6q040,14,9,0|1iea83z,14,9,0|1iea840,15,4,1|1ipg2rz,15,4,1|1ipg2s0,14,9,0|1ixd9fz,14,9,0|1ixd9g0,15,4,1|1j865fz,15,4,1|1j865g0,14,9,0|1jg3c3z,14,9,0|1jg3c40,15,4,1|1jqw83z,15,4,1|1jqw840,14,9,0|1jyterz,14,9,0|1jytes0,15,4,1|1k9z9fz,15,4,1|1k9z9g0,14,9,0|1khjhfz,14,9,0|1khjhg0,15,4,1|1kspc3z,15,4,1|1kspc40,14,9,0|1l09k3z,14,9,0|1l09k40,15,4,1|1lbferz,15,4,1|1lbfes0,14,9,0|1ljclfz,14,9,0|1ljclg0,15,4,1|1lu5hfz,15,4,1|1lu5hg0,14,9,0|1m22o3z,14,9,0|1m22o40,15,4,1|1mcvk3z,15,4,1|1mcvk40,14,9,0|1mksqrz,14,9,0|1mksqs0,15,4,1|1mvlmrz,15,4,1|1mvlms0,14,9,0|1n3itfz,14,9,0|1n3itg0,15,4,1|1neoo3z,15,4,1|1neoo40,14,9,0|1nm8w3z,14,9,0|1nm8w40,15,4,1|1nxeqrz,15,4,1|1nxeqs0,14,9,0|1o4yyrz,14,9,0|1o4yys0,15,4,1|1og4tfz,15,4,1|1og4tg0,14,9,0|1oo203z,14,9,0|1oo2040,15,4,1|1oyuw3z,15,4,1|1oyuw40,14,9,0|1p6s2rz,14,9,0|1p6s2s0,15,4,1|1phkyrz,15,4,1|1phkys0,14,9,0|1ppi5fz,14,9,0|1ppi5g0,15,4,1|1q0o03z,15,4,1|1q0o040,14,9,0|1q8883z,14,9,0|1q88840,15,4,1|1qje2rz,15,4,1|1qje2s0,14,9,0|1qqyarz,14,9,0|1qqyas0,15,4,1|1r245fz,15,4,1|1r245g0,14,9,0|1r9odfz,14,9,0|1r9odg0,15,4,1|1rku83z,15,4,1|1rku840,14,9,0|1rsrerz,14,9,0|1rsres0,15,4,1|1s3karz,15,4,1|1s3kas0,14,9,0|1sbhhfz,14,9,0|1sbhhg0,15,4,1|1smadfz,15,4,1|1smadg0,14,9,0|1su7k3z,14,9,0|1su7k40,15,4,1|1t5derz,15,4,1|1t5des0,14,9,0|1tcxmrz,14,9,0|1tcxms0,15,4,1|1to3hfz,15,4,1|1to3hg0,14,9,0|1tvnpfz,14,9,0|1tvnpg0,15,4,1|1u6tk3z,15,4,1|1u6tk40,14,9,0|1ueqqrz,14,9,0|1ueqqs0,15,4,1|1upjmrz,15,4,1|1upjms0,14,9,0|1uxgtfz,14,9,0|1uxgtg0,15,4,1|1v89pfz,15,4,1|1v89pg0,14,9,0|1vg6w3z,14,9,0|1vg6w40,15,4,1|1vqzs3z,15,4,1|1vqzs40,14,9,0|NaN,14,9,0\",\"Europe/Budapest|,0,332,0|-15bee79,0,332,0|-15bee78,8,8,0|-s0e081,8,8,0|-s0e080,9,9,1|-rsilg1,9,9,1|-rsilg0,8,8,0|-ridmk1,8,8,0|-ridmk0,9,9,1|-ragfw1,9,9,1|-ragfw0,8,8,0|-qznjw1,8,8,0|-qznjw0,9,9,1|-qrqd81,9,9,1|-qrqd80,8,8,0|-qgvmk1,8,8,0|-qgvmk0,9,9,1|-q90ak1,9,9,1|-q90ak0,8,8,0|-pykd81,8,8,0|-pykd80,9,9,1|-ppx981,9,9,1|-ppx980,8,8,0|-ezvc81,8,8,0|-ezvc80,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6dp81,9,9,1|-d6dp80,8,8,0|-cvhc81,8,8,0|-cvhc80,9,9,1|-cm2dg1,9,9,1|-cm2dg0,8,8,0|-cecfw1,8,8,0|-cecfw0,9,9,1|-c4ko01,9,9,1|-c4ko00,8,8,0|-bv9ek1,8,8,0|-bv9ek0,9,9,1|-blwd81,9,9,1|-blwd80,8,8,0|-bcjbw1,8,8,0|-bcjbw0,9,9,1|-b36ak1,9,9,1|-b36ak0,8,8,0|-atgak1,8,8,0|-atgak0,9,9,1|-akg7w1,9,9,1|-akg7w0,8,8,0|-85bc41,8,8,0|-85bc40,9,9,1|-7yh481,9,9,1|-7yh480,8,8,0|-7ml3w1,8,8,0|-7ml3w0,9,9,1|-7fqt81,9,9,1|-7fqt80,8,8,0|-7353w1,8,8,0|-7353w0,9,9,1|-6x0qk1,9,9,1|-6x0qk0,8,8,0|-6kf181,8,8,0|-6kf180,9,9,1|-6eanw1,9,9,1|-6eanw0,8,8,0|5csnvz,8,8,0|5csnw0,9,9,1|5lsqjz,9,9,1|5lsqk0,8,8,0|5v5rvz,8,8,0|5v5rw0,9,9,1|64it7z,9,9,1|64it80,8,8,0|6dvujz,8,8,0|6dvuk0,9,9,1|6n8vvz,9,9,1|6n8vw0,8,8,0|6wlx7z,8,8,0|6wlx80,9,9,1|75yyjz,9,9,1|75yyk0,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Busingen|,0,333,0|-1os49kx,0,333,0|-1os49kw,54,334,0|-13g441n,54,334,0|-13g441m,8,8,0|-eyh6o1,8,8,0|-eyh6o0,9,9,1|-eqk001,9,9,1|-eqk000,8,8,0|-efr401,8,8,0|-efr400,9,9,1|-e7txc1,9,9,1|-e7txc0,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Chisinau|,0,335,0|-1ayy809,0,335,0|-1ayy808,40,336,0|-r2p1bp,40,336,0|-r2p1bo,54,331,0|-k29zi1,54,331,0|-k29zi0,14,9,0|-jmqqw1,14,9,0|-jmqqw0,15,4,1|-jfulk1,15,4,1|-jfulk0,14,9,0|-j6hk81,14,9,0|-j6hk80,15,4,1|-ix4iw1,15,4,1|-ix4iw0,14,9,0|-ineiw1,14,9,0|-ineiw0,15,4,1|-ie1hk1,15,4,1|-ie1hk0,14,9,0|-i4og81,14,9,0|-i4og80,15,4,1|-hvbew1,15,4,1|-hvbew0,14,9,0|-hlydk1,14,9,0|-hlydk0,15,4,1|-hclc81,15,4,1|-hclc80,14,9,0|-h38aw1,14,9,0|-h38aw0,15,4,1|-gtv9k1,15,4,1|-gtv9k0,14,9,0|-gki881,14,9,0|-gki880,15,4,1|-gb56w1,15,4,1|-gb56w0,14,9,0|-g1s5k1,14,9,0|-g1s5k0,15,4,1|-fsf481,15,4,1|-fsf480,14,9,0|-fc0dk1,14,9,0|-fc0dk0,15,4,1|-euq8c1,15,4,1|-euq8c0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d8e5k1,9,9,1|-d8e5k0,149,4,0|5vb6bz,149,4,0|5vb6c0,150,203,1|64pzjz,150,203,1|64pzk0,149,4,0|6e33nz,149,4,0|6e33o0,150,203,1|6nhwvz,150,203,1|6nhww0,149,4,0|6wv0zz,149,4,0|6wv100,150,203,1|769u7z,150,203,1|769u80,149,4,0|7foszz,149,4,0|7fot00,150,203,1|7p1zvz,150,203,1|7p1zw0,149,4,0|7yf17z,149,4,0|7yf180,150,203,1|87s2jz,150,203,1|87s2k0,149,4,0|8h53vz,149,4,0|8h53w0,150,203,1|8qi57z,150,203,1|8qi580,149,4,0|8zv6jz,149,4,0|8zv6k0,150,203,1|9987vz,150,203,1|9987w0,149,4,0|9il97z,149,4,0|9il980,150,203,1|9ryajz,150,203,1|9ryak0,149,4,0|a1bbvz,149,4,0|a1bbw0,150,203,1|aaod7z,150,203,1|aaod80,149,4,0|ak1ejz,149,4,0|ak1ek0,150,203,1|am73rz,150,203,1|am73s0,15,4,1|atrhbz,15,4,1|atrhc0,14,9,0|b34inz,14,9,0|b34io0,15,4,1|bchjzz,15,4,1|bchk00,14,9,0|blufrz,14,9,0|blufs0,15,4,1|bv7ebz,15,4,1|bv7ec0,14,9,0|c4kifz,14,9,0|c4kig0,15,4,1|cdxgzz,15,4,1|cdxh00,14,9,0|cnal3z,14,9,0|cnal40,15,4,1|cwnjnz,15,4,1|cwnjo0,14,9,0|d60nrz,14,9,0|d60ns0,15,4,1|dfdmbz,15,4,1|dfdmc0,14,9,0|dp3p3z,14,9,0|dp3p40,15,4,1|dzwibz,15,4,1|dzwic0,14,9,0|e7txbz,14,9,0|e7txc0,15,4,1|eimtbz,15,4,1|eimtc0,14,9,0|eqjzzz,14,9,0|eqk000,15,4,1|f1cvzz,15,4,1|f1cw00,14,9,0|f9a2nz,14,9,0|f9a2o0,15,4,1|fkfxbz,15,4,1|fkfxc0,14,9,0|fs05bz,14,9,0|fs05c0,15,4,1|g35zzz,15,4,1|g36000,14,9,0|gaq7zz,14,9,0|gaq800,15,4,1|glw2nz,15,4,1|glw2o0,14,9,0|gtt9bz,14,9,0|gtt9c0,15,4,1|h4m5bz,15,4,1|h4m5c0,14,9,0|hcjbzz,14,9,0|hcjc00,15,4,1|hnc7zz,15,4,1|hnc800,14,9,0|hv9enz,14,9,0|hv9eo0,15,4,1|i6f9bz,15,4,1|i6f9c0,14,9,0|idzhbz,14,9,0|idzhc0,15,4,1|ip5bzz,15,4,1|ip5c00,14,9,0|iwpjzz,14,9,0|iwpk00,15,4,1|j7venz,15,4,1|j7veo0,14,9,0|jffmnz,14,9,0|jffmo0,15,4,1|jqlhbz,15,4,1|jqlhc0,14,9,0|jyinzz,14,9,0|jyio00,15,4,1|k9bjzz,15,4,1|k9bk00,14,9,0|kh8qnz,14,9,0|kh8qo0,15,4,1|ks1mnz,15,4,1|ks1mo0,14,9,0|kzytbz,14,9,0|kzytc0,15,4,1|lb4nzz,15,4,1|lb4o00,14,9,0|liovzz,14,9,0|liow00,15,4,1|ltuqnz,15,4,1|ltuqo0,14,9,0|m1eynz,14,9,0|m1eyo0,15,4,1|mcktbz,15,4,1|mcktc0,14,9,0|mkhzzz,14,9,0|mki000,15,4,1|mvavzz,15,4,1|mvaw00,14,9,0|n382nz,14,9,0|n382o0,15,4,1|ne0ynz,15,4,1|ne0yo0,14,9,0|nly5bz,14,9,0|nly5c0,15,4,1|nwr1bz,15,4,1|nwr1c0,14,9,0|o4o7zz,14,9,0|o4o800,15,4,1|ofu2nz,15,4,1|ofu2o0,14,9,0|oneanz,14,9,0|oneao0,15,4,1|oyk5bz,15,4,1|oyk5c0,14,9,0|p64dbz,14,9,0|p64dc0,15,4,1|pha7zz,15,4,1|pha800,14,9,0|pp7enz,14,9,0|pp7eo0,15,4,1|q00anz,15,4,1|q00ao0,14,9,0|q7xhbz,14,9,0|q7xhc0,15,4,1|qiqdbz,15,4,1|qiqdc0,14,9,0|qqnjzz,14,9,0|qqnk00,15,4,1|r1tenz,15,4,1|r1teo0,14,9,0|r9dmnz,14,9,0|r9dmo0,15,4,1|rkjhbz,15,4,1|rkjhc0,14,9,0|rs3pbz,14,9,0|rs3pc0,15,4,1|s39jzz,15,4,1|s39k00,14,9,0|sb6qnz,14,9,0|sb6qo0,15,4,1|slzmnz,15,4,1|slzmo0,14,9,0|stwtbz,14,9,0|stwtc0,15,4,1|t4ppbz,15,4,1|t4ppc0,14,9,0|tcmvzz,14,9,0|tcmw00,15,4,1|tnfrzz,15,4,1|tnfs00,14,9,0|tvcynz,14,9,0|tvcyo0,15,4,1|u6itbz,15,4,1|u6itc0,14,9,0|ue31bz,14,9,0|ue31c0,15,4,1|up8vzz,15,4,1|up8w00,14,9,0|uwt3zz,14,9,0|uwt400,15,4,1|v7yynz,15,4,1|v7yyo0,14,9,0|vfw5bz,14,9,0|vfw5c0,15,4,1|vqp1bz,15,4,1|vqp1c0,14,9,0|vym7zz,14,9,0|vym800,15,4,1|w9f3zz,15,4,1|w9f400,14,9,0|whcanz,14,9,0|whcao0,15,4,1|wsi5bz,15,4,1|wsi5c0,14,9,0|x02dbz,14,9,0|x02dc0,15,4,1|xb87zz,15,4,1|xb8800,14,9,0|xisfzz,14,9,0|xisg00,15,4,1|xtyanz,15,4,1|xtyao0,14,9,0|y1iinz,14,9,0|y1iio0,15,4,1|ycodbz,15,4,1|ycodc0,14,9,0|ykljzz,14,9,0|yklk00,15,4,1|yvefzz,15,4,1|yveg00,14,9,0|z3bmnz,14,9,0|z3bmo0,15,4,1|ze4inz,15,4,1|ze4io0,14,9,0|zm1pbz,14,9,0|zm1pc0,15,4,1|zx7jzz,15,4,1|zx7k00,14,9,0|104rrzz,14,9,0|104rs00,15,4,1|10fxmnz,15,4,1|10fxmo0,14,9,0|10nhunz,14,9,0|10nhuo0,15,4,1|10ynpbz,15,4,1|10ynpc0,14,9,0|116kvzz,14,9,0|116kw00,15,4,1|11hdrzz,15,4,1|11hds00,14,9,0|11paynz,14,9,0|11payo0,15,4,1|1203unz,15,4,1|1203uo0,14,9,0|12811bz,14,9,0|12811c0,15,4,1|12itxbz,15,4,1|12itxc0,14,9,0|12qr3zz,14,9,0|12qr400,15,4,1|131wynz,15,4,1|131wyo0,14,9,0|139h6nz,14,9,0|139h6o0,15,4,1|13kn1bz,15,4,1|13kn1c0,14,9,0|13s79bz,14,9,0|13s79c0,15,4,1|143d3zz,15,4,1|143d400,14,9,0|14baanz,14,9,0|14baao0,15,4,1|14m36nz,15,4,1|14m36o0,14,9,0|14u0dbz,14,9,0|14u0dc0,15,4,1|154t9bz,15,4,1|154t9c0,14,9,0|15cqfzz,14,9,0|15cqg00,15,4,1|15nwanz,15,4,1|15nwao0,14,9,0|15vginz,14,9,0|15vgio0,15,4,1|166mdbz,15,4,1|166mdc0,14,9,0|16e6lbz,14,9,0|16e6lc0,15,4,1|16pcfzz,15,4,1|16pcg00,14,9,0|16x9mnz,14,9,0|16x9mo0,15,4,1|1782inz,15,4,1|1782io0,14,9,0|17fzpbz,14,9,0|17fzpc0,15,4,1|17qslbz,15,4,1|17qslc0,14,9,0|17yprzz,14,9,0|17yps00,15,4,1|189inzz,15,4,1|189io00,14,9,0|18hfunz,14,9,0|18hfuo0,15,4,1|18slpbz,15,4,1|18slpc0,14,9,0|1905xbz,14,9,0|1905xc0,15,4,1|19bbrzz,15,4,1|19bbs00,14,9,0|19ivzzz,14,9,0|19iw000,15,4,1|19u1unz,15,4,1|19u1uo0,14,9,0|1a1z1bz,14,9,0|1a1z1c0,15,4,1|1acrxbz,15,4,1|1acrxc0,14,9,0|1akp3zz,14,9,0|1akp400,15,4,1|1avhzzz,15,4,1|1avi000,14,9,0|1b3f6nz,14,9,0|1b3f6o0,15,4,1|1bel1bz,15,4,1|1bel1c0,14,9,0|1bm59bz,14,9,0|1bm59c0,15,4,1|1bxb3zz,15,4,1|1bxb400,14,9,0|1c4vbzz,14,9,0|1c4vc00,15,4,1|1cg16nz,15,4,1|1cg16o0,14,9,0|1cnlenz,14,9,0|1cnleo0,15,4,1|1cyr9bz,15,4,1|1cyr9c0,14,9,0|1d6ofzz,14,9,0|1d6og00,15,4,1|1dhhbzz,15,4,1|1dhhc00,14,9,0|1dpeinz,14,9,0|1dpeio0,15,4,1|1e07enz,15,4,1|1e07eo0,14,9,0|1e84lbz,14,9,0|1e84lc0,15,4,1|1ejafzz,15,4,1|1ejag00,14,9,0|1equnzz,14,9,0|1equo00,15,4,1|1f20inz,15,4,1|1f20io0,14,9,0|1f9kqnz,14,9,0|1f9kqo0,15,4,1|1fkqlbz,15,4,1|1fkqlc0,14,9,0|1fsnrzz,14,9,0|1fsns00,15,4,1|1g3gnzz,15,4,1|1g3go00,14,9,0|1gbdunz,14,9,0|1gbduo0,15,4,1|1gm6qnz,15,4,1|1gm6qo0,14,9,0|1gu3xbz,14,9,0|1gu3xc0,15,4,1|1h4wtbz,15,4,1|1h4wtc0,14,9,0|1hctzzz,14,9,0|1hcu000,15,4,1|1hnzunz,15,4,1|1hnzuo0,14,9,0|1hvk2nz,14,9,0|1hvk2o0,15,4,1|1i6pxbz,15,4,1|1i6pxc0,14,9,0|1iea5bz,14,9,0|1iea5c0,15,4,1|1ipfzzz,15,4,1|1ipg000,14,9,0|1ixd6nz,14,9,0|1ixd6o0,15,4,1|1j862nz,15,4,1|1j862o0,14,9,0|1jg39bz,14,9,0|1jg39c0,15,4,1|1jqw5bz,15,4,1|1jqw5c0,14,9,0|1jytbzz,14,9,0|1jytc00,15,4,1|1k9z6nz,15,4,1|1k9z6o0,14,9,0|1khjenz,14,9,0|1khjeo0,15,4,1|1ksp9bz,15,4,1|1ksp9c0,14,9,0|1l09hbz,14,9,0|1l09hc0,15,4,1|1lbfbzz,15,4,1|1lbfc00,14,9,0|1ljcinz,14,9,0|1ljcio0,15,4,1|1lu5enz,15,4,1|1lu5eo0,14,9,0|1m22lbz,14,9,0|1m22lc0,15,4,1|1mcvhbz,15,4,1|1mcvhc0,14,9,0|1mksnzz,14,9,0|1mkso00,15,4,1|1mvljzz,15,4,1|1mvlk00,14,9,0|1n3iqnz,14,9,0|1n3iqo0,15,4,1|1neolbz,15,4,1|1neolc0,14,9,0|1nm8tbz,14,9,0|1nm8tc0,15,4,1|1nxenzz,15,4,1|1nxeo00,14,9,0|1o4yvzz,14,9,0|1o4yw00,15,4,1|1og4qnz,15,4,1|1og4qo0,14,9,0|1oo1xbz,14,9,0|1oo1xc0,15,4,1|1oyutbz,15,4,1|1oyutc0,14,9,0|1p6rzzz,14,9,0|1p6s000,15,4,1|1phkvzz,15,4,1|1phkw00,14,9,0|1ppi2nz,14,9,0|1ppi2o0,15,4,1|1q0nxbz,15,4,1|1q0nxc0,14,9,0|1q885bz,14,9,0|1q885c0,15,4,1|1qjdzzz,15,4,1|1qje000,14,9,0|1qqy7zz,14,9,0|1qqy800,15,4,1|1r242nz,15,4,1|1r242o0,14,9,0|1r9oanz,14,9,0|1r9oao0,15,4,1|1rku5bz,15,4,1|1rku5c0,14,9,0|1rsrbzz,14,9,0|1rsrc00,15,4,1|1s3k7zz,15,4,1|1s3k800,14,9,0|1sbhenz,14,9,0|1sbheo0,15,4,1|1smaanz,15,4,1|1smaao0,14,9,0|1su7hbz,14,9,0|1su7hc0,15,4,1|1t5dbzz,15,4,1|1t5dc00,14,9,0|1tcxjzz,14,9,0|1tcxk00,15,4,1|1to3enz,15,4,1|1to3eo0,14,9,0|1tvnmnz,14,9,0|1tvnmo0,15,4,1|1u6thbz,15,4,1|1u6thc0,14,9,0|1ueqnzz,14,9,0|1ueqo00,15,4,1|1upjjzz,15,4,1|1upjk00,14,9,0|1uxgqnz,14,9,0|1uxgqo0,15,4,1|1v89mnz,15,4,1|1v89mo0,14,9,0|1vg6tbz,14,9,0|1vg6tc0,15,4,1|1vqzpbz,15,4,1|1vqzpc0,14,9,0|NaN,14,9,0\",\"Europe/Copenhagen|,0,337,0|-15r1bnx,0,337,0|-15r1bnw,40,337,0|-13nvrnx,40,337,0|-13nvrnw,8,8,0|-rzo2w1,8,8,0|-rzo2w0,9,9,1|-rsir01,9,9,1|-rsir00,8,8,0|-fgqo41,8,8,0|-fgqo40,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6dp81,9,9,1|-d6dp80,8,8,0|-cx0nw1,8,8,0|-cx0nw0,9,9,1|-cq2nw1,9,9,1|-cq2nw0,8,8,0|-ccr181,8,8,0|-ccr180,9,9,1|-c6f981,9,9,1|-c6f980,8,8,0|-bttjw1,8,8,0|-bttjw0,9,9,1|-bos2k1,9,9,1|-bos2k0,8,8,0|-baqik1,8,8,0|-baqik0,9,9,1|-b61zw1,9,9,1|-b61zw0,8,8,0|5cstfz,8,8,0|5cstg0,9,9,1|5lsw3z,9,9,1|5lsw40,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Dublin|,0,338,0|-1anxqud,0,338,0|-1anxquc,151,339,0|-rzcmls,151,339,0|-rzcmlr,110,340,1|-rsibxs,110,340,1|-rsibxr,1,1,0|-risd41,1,1,0|-risd40,26,8,1|-ragd41,26,8,1|-ragd40,1,1,0|-r0s7s1,1,1,0|-r0s7s0,26,8,1|-qr0d41,26,8,1|-qr0d40,1,1,0|-qhp6g1,1,1,0|-qhp6g0,26,8,1|-q8aag1,26,8,1|-q8aag0,1,1,0|-pyz3s1,1,1,0|-pyz3s0,26,8,1|-po4d41,26,8,1|-po4d40,1,1,0|-pfw2g1,1,1,0|-pfw2g0,26,8,1|-p6h6g1,26,8,1|-p6h6g0,1,1,0|-oxiyg1,1,1,0|-oxiyg0,110,8,1|-onfzs1,110,8,1|-onfzs0,1,1,0|-odd141,1,1,0|-odd140,110,8,1|-o5st41,110,8,1|-o5st40,1,1,0|-nuzx41,1,1,0|-nuzx40,110,8,1|-nmprs1,110,8,1|-nmprs0,1,1,0|-nbwvs1,1,1,0|-nbwvs0,110,8,1|-n39rs1,110,8,1|-n39rs0,1,1,0|-mt6t41,1,1,0|-mt6t40,110,8,1|-mkjp41,110,8,1|-mkjp40,1,1,0|-matp41,1,1,0|-matp40,110,8,1|-m1tmg1,110,8,1|-m1tmg0,1,1,0|-lrdp41,1,1,0|-lrdp40,110,8,1|-liql41,110,8,1|-liql40,1,1,0|-l8nmg1,1,1,0|-l8nmg0,110,8,1|-l00ig1,110,8,1|-l00ig0,1,1,0|-kqaig1,1,1,0|-kqaig0,110,8,1|-khafs1,110,8,1|-khafs0,1,1,0|-k77h41,1,1,0|-k77h40,110,8,1|-jykd41,110,8,1|-jykd40,1,1,0|-joheg1,1,1,0|-joheg0,110,8,1|-jfuag1,110,8,1|-jfuag0,1,1,0|-j64ag1,1,1,0|-j64ag0,110,8,1|-iwr941,110,8,1|-iwr940,1,1,0|-imoag1,1,1,0|-imoag0,110,8,1|-ie16g1,110,8,1|-ie16g0,1,1,0|-i4b6g1,1,1,0|-i4b6g0,110,8,1|-hvb3s1,110,8,1|-hvb3s0,1,1,0|-hl8541,1,1,0|-hl8540,110,8,1|-hcl141,110,8,1|-hcl140,1,1,0|-h2i2g1,1,1,0|-h2i2g0,110,8,1|-gtuyg1,110,8,1|-gtuyg0,1,1,0|-gk4yg1,1,1,0|-gk4yg0,110,8,1|-gb4vs1,110,8,1|-gb4vs0,1,1,0|-g11x41,1,1,0|-g11x40,110,8,1|-fpw2g1,110,8,1|-fpw2g0,1,1,0|-fkul41,1,1,0|-fkul40,110,8,1|-c4md41,110,8,1|-c4md40,1,1,0|-bwc7s1,1,1,0|-bwc7s0,110,8,1|-bkgfs1,110,8,1|-bkgfs0,1,1,0|-bbtbs1,1,1,0|-bbtbs0,110,8,1|-b1qd41,110,8,1|-b1qd40,1,1,0|-att6g1,1,1,0|-att6g0,110,8,1|-aj0ag1,110,8,1|-aj0ag0,1,1,0|-aad6g1,1,1,0|-aad6g0,110,8,1|-a0n6g1,110,8,1|-a0n6g0,1,1,0|-9rn3s1,1,1,0|-9rn3s0,110,8,1|-9hx3s1,110,8,1|-9hx3s0,1,1,0|-98k2g1,1,1,0|-98k2g0,110,8,1|-8yu2g1,110,8,1|-8yu2g0,1,1,0|-8ptzs1,1,1,0|-8ptzs0,110,8,1|-8h6vs1,110,8,1|-8h6vs0,1,1,0|-87gvs1,1,1,0|-87gvs0,110,8,1|-7ygt41,110,8,1|-7ygt40,1,1,0|-7odug1,1,1,0|-7odug0,110,8,1|-7fqqg1,110,8,1|-7fqqg0,1,1,0|-75at41,1,1,0|-75at40,110,8,1|-6wnp41,110,8,1|-6wnp40,1,1,0|-6mxp41,1,1,0|-6mxp40,110,8,1|-6dxmg1,110,8,1|-6dxmg0,1,1,0|-63uns1,1,1,0|-63uns0,110,8,1|-5v7js1,110,8,1|-5v7js0,1,1,0|-5l4l41,1,1,0|-5l4l40,110,8,1|-5chh41,110,8,1|-5chh40,1,1,0|-52rh41,1,1,0|-52rh40,110,8,1|-4treg1,110,8,1|-4treg0,1,1,0|-4krbs1,1,1,0|-4krbs0,110,8,1|-49lh41,110,8,1|-49lh40,1,1,0|-421941,1,1,0|-421940,110,8,1|-3qveg1,110,8,1|-3qveg0,1,1,0|-3iy7s1,1,1,0|-3iy7s0,110,8,1|-385bs1,110,8,1|-385bs0,1,1,0|-30l3s1,1,1,0|-30l3s0,110,8,1|-2pf941,110,8,1|-2pf940,1,1,0|-2hv141,1,1,0|-2hv140,110,8,1|-26p6g1,110,8,1|-26p6g0,1,1,0|-1z4yg1,1,1,0|-1z4yg0,110,8,1|-1nz3s1,110,8,1|-1nz3s0,1,1,0|-1gevs1,1,1,0|-1gevs0,110,8,1|-14w2g1,110,8,1|-14w2g0,1,1,0|-z4ns1,1,1,0|-z4ns0,110,8,1|-m6841,110,8,1|-m6840,110,8,0|yd6vz,110,8,0|yd6w0,1,1,1|15kg7z,1,1,1|15kg80,110,8,0|1h39jz,110,8,0|1h39k0,1,1,1|1oaivz,1,1,1|1oaiw0,110,8,0|1ztc7z,110,8,0|1ztc80,1,1,1|270ljz,1,1,1|270lk0,110,8,0|2ijevz,110,8,0|2ijew0,1,1,1|2pqo7z,1,1,1|2pqo80,110,8,0|319hjz,110,8,0|319hk0,1,1,1|38tpjz,1,1,1|38tpk0,110,8,0|3jzk7z,110,8,0|3jzk80,1,1,1|3rjs7z,1,1,1|3rjs80,110,8,0|42pmvz,110,8,0|42pmw0,1,1,1|4a9uvz,1,1,1|4a9uw0,110,8,0|4lso7z,110,8,0|4lso80,1,1,1|4szxjz,1,1,1|4szxk0,110,8,0|54iqvz,110,8,0|54iqw0,1,1,1|5bq07z,1,1,1|5bq080,110,8,0|5n8tjz,110,8,0|5n8tk0,1,1,1|5v5xfz,1,1,1|5v5xg0,110,8,0|65ytfz,110,8,0|65ytg0,1,1,1|6dw03z,1,1,1|6dw040,110,8,0|6oow3z,110,8,0|6oow40,1,1,1|6wm2rz,1,1,1|6wm2s0,110,8,0|77eyrz,110,8,0|77eys0,1,1,1|7fc5fz,1,1,1|7fc5g0,110,8,0|7qi03z,110,8,0|7qi040,1,1,1|7yf6rz,1,1,1|7yf6s0,110,8,0|8982rz,110,8,0|8982s0,1,1,1|8h59fz,1,1,1|8h59g0,110,8,0|8ry5fz,110,8,0|8ry5g0,1,1,1|8zvc3z,1,1,1|8zvc40,110,8,0|9ao83z,110,8,0|9ao840,1,1,1|9ilerz,1,1,1|9iles0,110,8,0|9tearz,110,8,0|9teas0,1,1,1|a1bhfz,1,1,1|a1bhg0,110,8,0|achc3z,110,8,0|achc40,1,1,1|ak1k3z,1,1,1|ak1k40,110,8,0|av7erz,110,8,0|av7es0,1,1,1|b34lfz,1,1,1|b34lg0,110,8,0|bdxhfz,110,8,0|bdxhg0,1,1,1|bluo3z,1,1,1|bluo40,110,8,0|bwnk3z,110,8,0|bwnk40,1,1,1|c4kqrz,1,1,1|c4kqs0,110,8,0|cfdmrz,110,8,0|cfdms0,1,1,1|cnatfz,1,1,1|cnatg0,110,8,0|cy3pfz,110,8,0|cy3pg0,1,1,1|d60w3z,1,1,1|d60w40,110,8,0|dgts3z,110,8,0|dgts40,1,1,1|dp3xfz,1,1,1|dp3xg0,110,8,0|dzwtfz,110,8,0|dzwtg0,1,1,1|e7u03z,1,1,1|e7u040,110,8,0|eimw3z,110,8,0|eimw40,1,1,1|eqk2rz,1,1,1|eqk2s0,110,8,0|f1cyrz,110,8,0|f1cys0,1,1,1|f9a5fz,1,1,1|f9a5g0,110,8,0|fkg03z,110,8,0|fkg040,1,1,1|fs083z,1,1,1|fs0840,110,8,0|g362rz,110,8,0|g362s0,1,1,1|gaqarz,1,1,1|gaqas0,110,8,0|glw5fz,110,8,0|glw5g0,1,1,1|gttc3z,1,1,1|gttc40,110,8,0|h4m83z,110,8,0|h4m840,1,1,1|hcjerz,1,1,1|hcjes0,110,8,0|hncarz,110,8,0|hncas0,1,1,1|hv9hfz,1,1,1|hv9hg0,110,8,0|i6fc3z,110,8,0|i6fc40,1,1,1|idzk3z,1,1,1|idzk40,110,8,0|ip5erz,110,8,0|ip5es0,1,1,1|iwpmrz,1,1,1|iwpms0,110,8,0|j7vhfz,110,8,0|j7vhg0,1,1,1|jffpfz,1,1,1|jffpg0,110,8,0|jqlk3z,110,8,0|jqlk40,1,1,1|jyiqrz,1,1,1|jyiqs0,110,8,0|k9bmrz,110,8,0|k9bms0,1,1,1|kh8tfz,1,1,1|kh8tg0,110,8,0|ks1pfz,110,8,0|ks1pg0,1,1,1|kzyw3z,1,1,1|kzyw40,110,8,0|lb4qrz,110,8,0|lb4qs0,1,1,1|lioyrz,1,1,1|lioys0,110,8,0|ltutfz,110,8,0|ltutg0,1,1,1|m1f1fz,1,1,1|m1f1g0,110,8,0|mckw3z,110,8,0|mckw40,1,1,1|mki2rz,1,1,1|mki2s0,110,8,0|mvayrz,110,8,0|mvays0,1,1,1|n385fz,1,1,1|n385g0,110,8,0|ne11fz,110,8,0|ne11g0,1,1,1|nly83z,1,1,1|nly840,110,8,0|nwr43z,110,8,0|nwr440,1,1,1|o4oarz,1,1,1|o4oas0,110,8,0|ofu5fz,110,8,0|ofu5g0,1,1,1|onedfz,1,1,1|onedg0,110,8,0|oyk83z,110,8,0|oyk840,1,1,1|p64g3z,1,1,1|p64g40,110,8,0|phaarz,110,8,0|phaas0,1,1,1|pp7hfz,1,1,1|pp7hg0,110,8,0|q00dfz,110,8,0|q00dg0,1,1,1|q7xk3z,1,1,1|q7xk40,110,8,0|qiqg3z,110,8,0|qiqg40,1,1,1|qqnmrz,1,1,1|qqnms0,110,8,0|r1thfz,110,8,0|r1thg0,1,1,1|r9dpfz,1,1,1|r9dpg0,110,8,0|rkjk3z,110,8,0|rkjk40,1,1,1|rs3s3z,1,1,1|rs3s40,110,8,0|s39mrz,110,8,0|s39ms0,1,1,1|sb6tfz,1,1,1|sb6tg0,110,8,0|slzpfz,110,8,0|slzpg0,1,1,1|stww3z,1,1,1|stww40,110,8,0|t4ps3z,110,8,0|t4ps40,1,1,1|tcmyrz,1,1,1|tcmys0,110,8,0|tnfurz,110,8,0|tnfus0,1,1,1|tvd1fz,1,1,1|tvd1g0,110,8,0|u6iw3z,110,8,0|u6iw40,1,1,1|ue343z,1,1,1|ue3440,110,8,0|up8yrz,110,8,0|up8ys0,1,1,1|uwt6rz,1,1,1|uwt6s0,110,8,0|v7z1fz,110,8,0|v7z1g0,1,1,1|vfw83z,1,1,1|vfw840,110,8,0|vqp43z,110,8,0|vqp440,1,1,1|vymarz,1,1,1|vymas0,110,8,0|w9f6rz,110,8,0|w9f6s0,1,1,1|whcdfz,1,1,1|whcdg0,110,8,0|wsi83z,110,8,0|wsi840,1,1,1|x02g3z,1,1,1|x02g40,110,8,0|xb8arz,110,8,0|xb8as0,1,1,1|xisirz,1,1,1|xisis0,110,8,0|xtydfz,110,8,0|xtydg0,1,1,1|y1ilfz,1,1,1|y1ilg0,110,8,0|ycog3z,110,8,0|ycog40,1,1,1|yklmrz,1,1,1|yklms0,110,8,0|yveirz,110,8,0|yveis0,1,1,1|z3bpfz,1,1,1|z3bpg0,110,8,0|ze4lfz,110,8,0|ze4lg0,1,1,1|zm1s3z,1,1,1|zm1s40,110,8,0|zx7mrz,110,8,0|zx7ms0,1,1,1|104rurz,1,1,1|104rus0,110,8,0|10fxpfz,110,8,0|10fxpg0,1,1,1|10nhxfz,1,1,1|10nhxg0,110,8,0|10yns3z,110,8,0|10yns40,1,1,1|116kyrz,1,1,1|116kys0,110,8,0|11hdurz,110,8,0|11hdus0,1,1,1|11pb1fz,1,1,1|11pb1g0,110,8,0|1203xfz,110,8,0|1203xg0,1,1,1|128143z,1,1,1|1281440,110,8,0|12iu03z,110,8,0|12iu040,1,1,1|12qr6rz,1,1,1|12qr6s0,110,8,0|131x1fz,110,8,0|131x1g0,1,1,1|139h9fz,1,1,1|139h9g0,110,8,0|13kn43z,110,8,0|13kn440,1,1,1|13s7c3z,1,1,1|13s7c40,110,8,0|143d6rz,110,8,0|143d6s0,1,1,1|14badfz,1,1,1|14badg0,110,8,0|14m39fz,110,8,0|14m39g0,1,1,1|14u0g3z,1,1,1|14u0g40,110,8,0|154tc3z,110,8,0|154tc40,1,1,1|15cqirz,1,1,1|15cqis0,110,8,0|15nwdfz,110,8,0|15nwdg0,1,1,1|15vglfz,1,1,1|15vglg0,110,8,0|166mg3z,110,8,0|166mg40,1,1,1|16e6o3z,1,1,1|16e6o40,110,8,0|16pcirz,110,8,0|16pcis0,1,1,1|16x9pfz,1,1,1|16x9pg0,110,8,0|1782lfz,110,8,0|1782lg0,1,1,1|17fzs3z,1,1,1|17fzs40,110,8,0|17qso3z,110,8,0|17qso40,1,1,1|17ypurz,1,1,1|17ypus0,110,8,0|189iqrz,110,8,0|189iqs0,1,1,1|18hfxfz,1,1,1|18hfxg0,110,8,0|18sls3z,110,8,0|18sls40,1,1,1|190603z,1,1,1|1906040,110,8,0|19bburz,110,8,0|19bbus0,1,1,1|19iw2rz,1,1,1|19iw2s0,110,8,0|19u1xfz,110,8,0|19u1xg0,1,1,1|1a1z43z,1,1,1|1a1z440,110,8,0|1acs03z,110,8,0|1acs040,1,1,1|1akp6rz,1,1,1|1akp6s0,110,8,0|1avi2rz,110,8,0|1avi2s0,1,1,1|1b3f9fz,1,1,1|1b3f9g0,110,8,0|1bel43z,110,8,0|1bel440,1,1,1|1bm5c3z,1,1,1|1bm5c40,110,8,0|1bxb6rz,110,8,0|1bxb6s0,1,1,1|1c4verz,1,1,1|1c4ves0,110,8,0|1cg19fz,110,8,0|1cg19g0,1,1,1|1cnlhfz,1,1,1|1cnlhg0,110,8,0|1cyrc3z,110,8,0|1cyrc40,1,1,1|1d6oirz,1,1,1|1d6ois0,110,8,0|1dhherz,110,8,0|1dhhes0,1,1,1|1dpelfz,1,1,1|1dpelg0,110,8,0|1e07hfz,110,8,0|1e07hg0,1,1,1|1e84o3z,1,1,1|1e84o40,110,8,0|1ejairz,110,8,0|1ejais0,1,1,1|1equqrz,1,1,1|1equqs0,110,8,0|1f20lfz,110,8,0|1f20lg0,1,1,1|1f9ktfz,1,1,1|1f9ktg0,110,8,0|1fkqo3z,110,8,0|1fkqo40,1,1,1|1fsnurz,1,1,1|1fsnus0,110,8,0|1g3gqrz,110,8,0|1g3gqs0,1,1,1|1gbdxfz,1,1,1|1gbdxg0,110,8,0|1gm6tfz,110,8,0|1gm6tg0,1,1,1|1gu403z,1,1,1|1gu4040,110,8,0|1h4ww3z,110,8,0|1h4ww40,1,1,1|1hcu2rz,1,1,1|1hcu2s0,110,8,0|1hnzxfz,110,8,0|1hnzxg0,1,1,1|1hvk5fz,1,1,1|1hvk5g0,110,8,0|1i6q03z,110,8,0|1i6q040,1,1,1|1iea83z,1,1,1|1iea840,110,8,0|1ipg2rz,110,8,0|1ipg2s0,1,1,1|1ixd9fz,1,1,1|1ixd9g0,110,8,0|1j865fz,110,8,0|1j865g0,1,1,1|1jg3c3z,1,1,1|1jg3c40,110,8,0|1jqw83z,110,8,0|1jqw840,1,1,1|1jyterz,1,1,1|1jytes0,110,8,0|1k9z9fz,110,8,0|1k9z9g0,1,1,1|1khjhfz,1,1,1|1khjhg0,110,8,0|1kspc3z,110,8,0|1kspc40,1,1,1|1l09k3z,1,1,1|1l09k40,110,8,0|1lbferz,110,8,0|1lbfes0,1,1,1|1ljclfz,1,1,1|1ljclg0,110,8,0|1lu5hfz,110,8,0|1lu5hg0,1,1,1|1m22o3z,1,1,1|1m22o40,110,8,0|1mcvk3z,110,8,0|1mcvk40,1,1,1|1mksqrz,1,1,1|1mksqs0,110,8,0|1mvlmrz,110,8,0|1mvlms0,1,1,1|1n3itfz,1,1,1|1n3itg0,110,8,0|1neoo3z,110,8,0|1neoo40,1,1,1|1nm8w3z,1,1,1|1nm8w40,110,8,0|1nxeqrz,110,8,0|1nxeqs0,1,1,1|1o4yyrz,1,1,1|1o4yys0,110,8,0|1og4tfz,110,8,0|1og4tg0,1,1,1|1oo203z,1,1,1|1oo2040,110,8,0|1oyuw3z,110,8,0|1oyuw40,1,1,1|1p6s2rz,1,1,1|1p6s2s0,110,8,0|1phkyrz,110,8,0|1phkys0,1,1,1|1ppi5fz,1,1,1|1ppi5g0,110,8,0|1q0o03z,110,8,0|1q0o040,1,1,1|1q8883z,1,1,1|1q88840,110,8,0|1qje2rz,110,8,0|1qje2s0,1,1,1|1qqyarz,1,1,1|1qqyas0,110,8,0|1r245fz,110,8,0|1r245g0,1,1,1|1r9odfz,1,1,1|1r9odg0,110,8,0|1rku83z,110,8,0|1rku840,1,1,1|1rsrerz,1,1,1|1rsres0,110,8,0|1s3karz,110,8,0|1s3kas0,1,1,1|1sbhhfz,1,1,1|1sbhhg0,110,8,0|1smadfz,110,8,0|1smadg0,1,1,1|1su7k3z,1,1,1|1su7k40,110,8,0|1t5derz,110,8,0|1t5des0,1,1,1|1tcxmrz,1,1,1|1tcxms0,110,8,0|1to3hfz,110,8,0|1to3hg0,1,1,1|1tvnpfz,1,1,1|1tvnpg0,110,8,0|1u6tk3z,110,8,0|1u6tk40,1,1,1|1ueqqrz,1,1,1|1ueqqs0,110,8,0|1upjmrz,110,8,0|1upjms0,1,1,1|1uxgtfz,1,1,1|1uxgtg0,110,8,0|1v89pfz,110,8,0|1v89pg0,1,1,1|1vg6w3z,1,1,1|1vg6w40,110,8,0|1vqzs3z,110,8,0|1vqzs40,1,1,1|NaN,1,1,1\",\"Europe/Gibraltar|,0,341,0|-1anxr0d,0,341,0|-1anxr0c,1,1,0|-rzcns1,1,1,0|-rzcns0,26,8,1|-rsid41,26,8,1|-rsid40,1,1,0|-risd41,1,1,0|-risd40,26,8,1|-ragd41,26,8,1|-ragd40,1,1,0|-r0s7s1,1,1,0|-r0s7s0,26,8,1|-qr0d41,26,8,1|-qr0d40,1,1,0|-qhp6g1,1,1,0|-qhp6g0,26,8,1|-q8aag1,26,8,1|-q8aag0,1,1,0|-pyz3s1,1,1,0|-pyz3s0,26,8,1|-po4d41,26,8,1|-po4d40,1,1,0|-pfw2g1,1,1,0|-pfw2g0,26,8,1|-p6h6g1,26,8,1|-p6h6g0,1,1,0|-oxiyg1,1,1,0|-oxiyg0,26,8,1|-onfzs1,26,8,1|-onfzs0,1,1,0|-odd141,1,1,0|-odd140,26,8,1|-o5st41,26,8,1|-o5st40,1,1,0|-nuzx41,1,1,0|-nuzx40,26,8,1|-nmprs1,26,8,1|-nmprs0,1,1,0|-nbwvs1,1,1,0|-nbwvs0,26,8,1|-n39rs1,26,8,1|-n39rs0,1,1,0|-mt6t41,1,1,0|-mt6t40,26,8,1|-mkjp41,26,8,1|-mkjp40,1,1,0|-matp41,1,1,0|-matp40,26,8,1|-m1tmg1,26,8,1|-m1tmg0,1,1,0|-lrdp41,1,1,0|-lrdp40,26,8,1|-liql41,26,8,1|-liql40,1,1,0|-l8nmg1,1,1,0|-l8nmg0,26,8,1|-l00ig1,26,8,1|-l00ig0,1,1,0|-kqaig1,1,1,0|-kqaig0,26,8,1|-khafs1,26,8,1|-khafs0,1,1,0|-k77h41,1,1,0|-k77h40,26,8,1|-jykd41,26,8,1|-jykd40,1,1,0|-joheg1,1,1,0|-joheg0,26,8,1|-jfuag1,26,8,1|-jfuag0,1,1,0|-j64ag1,1,1,0|-j64ag0,26,8,1|-iwr941,26,8,1|-iwr940,1,1,0|-imoag1,1,1,0|-imoag0,26,8,1|-ie16g1,26,8,1|-ie16g0,1,1,0|-i4b6g1,1,1,0|-i4b6g0,26,8,1|-hvb3s1,26,8,1|-hvb3s0,1,1,0|-hl8541,1,1,0|-hl8540,26,8,1|-hcl141,26,8,1|-hcl140,1,1,0|-h2i2g1,1,1,0|-h2i2g0,26,8,1|-gtuyg1,26,8,1|-gtuyg0,1,1,0|-gk4yg1,1,1,0|-gk4yg0,26,8,1|-gb4vs1,26,8,1|-gb4vs0,1,1,0|-g11x41,1,1,0|-g11x40,26,8,1|-fpw2g1,26,8,1|-fpw2g0,1,1,0|-fkul41,1,1,0|-fkul40,26,8,1|-eyiyk1,26,8,1|-eyiyk0,152,9,1|-ethh81,152,9,1|-ethh80,26,8,1|-eh8qk1,26,8,1|-eh8qk0,152,9,1|-earek1,152,9,1|-earek0,26,8,1|-dyinw1,26,8,1|-dyinw0,152,9,1|-drod81,152,9,1|-drod80,26,8,1|-dfsl81,26,8,1|-dfsl80,152,9,1|-d75h81,152,9,1|-d75h80,26,8,1|-cx0nw1,26,8,1|-cx0nw0,152,9,1|-cro2k1,152,9,1|-cro2k0,26,8,1|-cncfs1,26,8,1|-cncfs0,1,1,0|-cdmfs1,1,1,0|-cdmfs0,26,8,1|-c4md41,26,8,1|-c4md40,1,1,0|-bwc7s1,1,1,0|-bwc7s0,26,8,1|-buwfw1,26,8,1|-buwfw0,152,9,1|-bos2k1,152,9,1|-bos2k0,26,8,1|-bkgfs1,26,8,1|-bkgfs0,1,1,0|-bdm541,1,1,0|-bdm540,26,8,1|-b1qd41,26,8,1|-b1qd40,1,1,0|-att6g1,1,1,0|-att6g0,26,8,1|-aj0ag1,26,8,1|-aj0ag0,1,1,0|-aad6g1,1,1,0|-aad6g0,26,8,1|-a0n6g1,26,8,1|-a0n6g0,1,1,0|-9rn3s1,1,1,0|-9rn3s0,26,8,1|-9hx3s1,26,8,1|-9hx3s0,1,1,0|-98k2g1,1,1,0|-98k2g0,26,8,1|-8yu2g1,26,8,1|-8yu2g0,1,1,0|-8ptzs1,1,1,0|-8ptzs0,26,8,1|-8h6vs1,26,8,1|-8h6vs0,1,1,0|-87gvs1,1,1,0|-87gvs0,26,8,1|-7ygt41,26,8,1|-7ygt40,1,1,0|-7odug1,1,1,0|-7odug0,26,8,1|-7fqqg1,26,8,1|-7fqqg0,1,1,0|-75at41,1,1,0|-75at40,26,8,1|-6wnp41,26,8,1|-6wnp40,1,1,0|-6mxp41,1,1,0|-6mxp40,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Guernsey|,0,342,0|-1rprx9y,0,342,0|-1rprx9x,1,1,0|-rzcns1,1,1,0|-rzcns0,26,8,1|-rsid41,26,8,1|-rsid40,1,1,0|-risd41,1,1,0|-risd40,26,8,1|-ragd41,26,8,1|-ragd40,1,1,0|-r0s7s1,1,1,0|-r0s7s0,26,8,1|-qr0d41,26,8,1|-qr0d40,1,1,0|-qhp6g1,1,1,0|-qhp6g0,26,8,1|-q8aag1,26,8,1|-q8aag0,1,1,0|-pyz3s1,1,1,0|-pyz3s0,26,8,1|-po4d41,26,8,1|-po4d40,1,1,0|-pfw2g1,1,1,0|-pfw2g0,26,8,1|-p6h6g1,26,8,1|-p6h6g0,1,1,0|-oxiyg1,1,1,0|-oxiyg0,26,8,1|-onfzs1,26,8,1|-onfzs0,1,1,0|-odd141,1,1,0|-odd140,26,8,1|-o5st41,26,8,1|-o5st40,1,1,0|-nuzx41,1,1,0|-nuzx40,26,8,1|-nmprs1,26,8,1|-nmprs0,1,1,0|-nbwvs1,1,1,0|-nbwvs0,26,8,1|-n39rs1,26,8,1|-n39rs0,1,1,0|-mt6t41,1,1,0|-mt6t40,26,8,1|-mkjp41,26,8,1|-mkjp40,1,1,0|-matp41,1,1,0|-matp40,26,8,1|-m1tmg1,26,8,1|-m1tmg0,1,1,0|-lrdp41,1,1,0|-lrdp40,26,8,1|-liql41,26,8,1|-liql40,1,1,0|-l8nmg1,1,1,0|-l8nmg0,26,8,1|-l00ig1,26,8,1|-l00ig0,1,1,0|-kqaig1,1,1,0|-kqaig0,26,8,1|-khafs1,26,8,1|-khafs0,1,1,0|-k77h41,1,1,0|-k77h40,26,8,1|-jykd41,26,8,1|-jykd40,1,1,0|-joheg1,1,1,0|-joheg0,26,8,1|-jfuag1,26,8,1|-jfuag0,1,1,0|-j64ag1,1,1,0|-j64ag0,26,8,1|-iwr941,26,8,1|-iwr940,1,1,0|-imoag1,1,1,0|-imoag0,26,8,1|-ie16g1,26,8,1|-ie16g0,1,1,0|-i4b6g1,1,1,0|-i4b6g0,26,8,1|-hvb3s1,26,8,1|-hvb3s0,1,1,0|-hl8541,1,1,0|-hl8540,26,8,1|-hcl141,26,8,1|-hcl140,1,1,0|-h2i2g1,1,1,0|-h2i2g0,26,8,1|-gtuyg1,26,8,1|-gtuyg0,1,1,0|-gk4yg1,1,1,0|-gk4yg0,26,8,1|-gb4vs1,26,8,1|-gb4vs0,1,1,0|-g11x41,1,1,0|-g11x40,26,8,1|-fpw2g1,26,8,1|-fpw2g0,1,1,0|-fkul41,1,1,0|-fkul40,26,8,1|-eyiyk1,26,8,1|-eyiyk0,152,9,1|-ethh81,152,9,1|-ethh80,26,8,1|-eh8qk1,26,8,1|-eh8qk0,152,9,1|-earek1,152,9,1|-earek0,26,8,1|-dyinw1,26,8,1|-dyinw0,152,9,1|-drod81,152,9,1|-drod80,26,8,1|-dfsl81,26,8,1|-dfsl80,152,9,1|-d75h81,152,9,1|-d75h80,26,8,1|-cx0nw1,26,8,1|-cx0nw0,152,9,1|-cro2k1,152,9,1|-cro2k0,26,8,1|-cncfs1,26,8,1|-cncfs0,1,1,0|-cdmfs1,1,1,0|-cdmfs0,26,8,1|-c4md41,26,8,1|-c4md40,1,1,0|-bwc7s1,1,1,0|-bwc7s0,26,8,1|-buwfw1,26,8,1|-buwfw0,152,9,1|-bos2k1,152,9,1|-bos2k0,26,8,1|-bkgfs1,26,8,1|-bkgfs0,1,1,0|-bdm541,1,1,0|-bdm540,26,8,1|-b1qd41,26,8,1|-b1qd40,1,1,0|-att6g1,1,1,0|-att6g0,26,8,1|-aj0ag1,26,8,1|-aj0ag0,1,1,0|-aad6g1,1,1,0|-aad6g0,26,8,1|-a0n6g1,26,8,1|-a0n6g0,1,1,0|-9rn3s1,1,1,0|-9rn3s0,26,8,1|-9hx3s1,26,8,1|-9hx3s0,1,1,0|-98k2g1,1,1,0|-98k2g0,26,8,1|-8yu2g1,26,8,1|-8yu2g0,1,1,0|-8ptzs1,1,1,0|-8ptzs0,26,8,1|-8h6vs1,26,8,1|-8h6vs0,1,1,0|-87gvs1,1,1,0|-87gvs0,26,8,1|-7ygt41,26,8,1|-7ygt40,1,1,0|-7odug1,1,1,0|-7odug0,26,8,1|-7fqqg1,26,8,1|-7fqqg0,1,1,0|-75at41,1,1,0|-75at40,26,8,1|-6wnp41,26,8,1|-6wnp40,1,1,0|-6mxp41,1,1,0|-6mxp40,26,8,1|-6dxmg1,26,8,1|-6dxmg0,1,1,0|-63uns1,1,1,0|-63uns0,26,8,1|-5v7js1,26,8,1|-5v7js0,1,1,0|-5l4l41,1,1,0|-5l4l40,26,8,1|-5chh41,26,8,1|-5chh40,1,1,0|-52rh41,1,1,0|-52rh40,26,8,1|-4treg1,26,8,1|-4treg0,1,1,0|-4krbs1,1,1,0|-4krbs0,26,8,1|-49lh41,26,8,1|-49lh40,1,1,0|-421941,1,1,0|-421940,26,8,1|-3qveg1,26,8,1|-3qveg0,1,1,0|-3iy7s1,1,1,0|-3iy7s0,26,8,1|-385bs1,26,8,1|-385bs0,1,1,0|-30l3s1,1,1,0|-30l3s0,26,8,1|-2pf941,26,8,1|-2pf940,1,1,0|-2hv141,1,1,0|-2hv140,26,8,1|-26p6g1,26,8,1|-26p6g0,1,1,0|-1z4yg1,1,1,0|-1z4yg0,26,8,1|-1nz3s1,26,8,1|-1nz3s0,1,1,0|-1gevs1,1,1,0|-1gevs0,26,8,1|-14w2g1,26,8,1|-14w2g0,1,1,0|-z4ns1,1,1,0|-z4ns0,26,8,1|-m6841,26,8,1|-m6840,26,8,0|yd6vz,26,8,0|yd6w0,1,1,0|15kg7z,1,1,0|15kg80,26,8,1|1h39jz,26,8,1|1h39k0,1,1,0|1oaivz,1,1,0|1oaiw0,26,8,1|1ztc7z,26,8,1|1ztc80,1,1,0|270ljz,1,1,0|270lk0,26,8,1|2ijevz,26,8,1|2ijew0,1,1,0|2pqo7z,1,1,0|2pqo80,26,8,1|319hjz,26,8,1|319hk0,1,1,0|38tpjz,1,1,0|38tpk0,26,8,1|3jzk7z,26,8,1|3jzk80,1,1,0|3rjs7z,1,1,0|3rjs80,26,8,1|42pmvz,26,8,1|42pmw0,1,1,0|4a9uvz,1,1,0|4a9uw0,26,8,1|4lso7z,26,8,1|4lso80,1,1,0|4szxjz,1,1,0|4szxk0,26,8,1|54iqvz,26,8,1|54iqw0,1,1,0|5bq07z,1,1,0|5bq080,26,8,1|5n8tjz,26,8,1|5n8tk0,1,1,0|5v5xfz,1,1,0|5v5xg0,26,8,1|65ytfz,26,8,1|65ytg0,1,1,0|6dw03z,1,1,0|6dw040,26,8,1|6oow3z,26,8,1|6oow40,1,1,0|6wm2rz,1,1,0|6wm2s0,26,8,1|77eyrz,26,8,1|77eys0,1,1,0|7fc5fz,1,1,0|7fc5g0,26,8,1|7qi03z,26,8,1|7qi040,1,1,0|7yf6rz,1,1,0|7yf6s0,26,8,1|8982rz,26,8,1|8982s0,1,1,0|8h59fz,1,1,0|8h59g0,26,8,1|8ry5fz,26,8,1|8ry5g0,1,1,0|8zvc3z,1,1,0|8zvc40,26,8,1|9ao83z,26,8,1|9ao840,1,1,0|9ilerz,1,1,0|9iles0,26,8,1|9tearz,26,8,1|9teas0,1,1,0|a1bhfz,1,1,0|a1bhg0,26,8,1|achc3z,26,8,1|achc40,1,1,0|ak1k3z,1,1,0|ak1k40,26,8,1|av7erz,26,8,1|av7es0,1,1,0|b34lfz,1,1,0|b34lg0,26,8,1|bdxhfz,26,8,1|bdxhg0,1,1,0|bluo3z,1,1,0|bluo40,26,8,1|bwnk3z,26,8,1|bwnk40,1,1,0|c4kqrz,1,1,0|c4kqs0,26,8,1|cfdmrz,26,8,1|cfdms0,1,1,0|cnatfz,1,1,0|cnatg0,26,8,1|cy3pfz,26,8,1|cy3pg0,1,1,0|d60w3z,1,1,0|d60w40,26,8,1|dgts3z,26,8,1|dgts40,1,1,0|dp3xfz,1,1,0|dp3xg0,26,8,1|dzwtfz,26,8,1|dzwtg0,1,1,0|e7u03z,1,1,0|e7u040,26,8,1|eimw3z,26,8,1|eimw40,1,1,0|eqk2rz,1,1,0|eqk2s0,26,8,1|f1cyrz,26,8,1|f1cys0,1,1,0|f9a5fz,1,1,0|f9a5g0,26,8,1|fkg03z,26,8,1|fkg040,1,1,0|fs083z,1,1,0|fs0840,26,8,1|g362rz,26,8,1|g362s0,1,1,0|gaqarz,1,1,0|gaqas0,26,8,1|glw5fz,26,8,1|glw5g0,1,1,0|gttc3z,1,1,0|gttc40,26,8,1|h4m83z,26,8,1|h4m840,1,1,0|hcjerz,1,1,0|hcjes0,26,8,1|hncarz,26,8,1|hncas0,1,1,0|hv9hfz,1,1,0|hv9hg0,26,8,1|i6fc3z,26,8,1|i6fc40,1,1,0|idzk3z,1,1,0|idzk40,26,8,1|ip5erz,26,8,1|ip5es0,1,1,0|iwpmrz,1,1,0|iwpms0,26,8,1|j7vhfz,26,8,1|j7vhg0,1,1,0|jffpfz,1,1,0|jffpg0,26,8,1|jqlk3z,26,8,1|jqlk40,1,1,0|jyiqrz,1,1,0|jyiqs0,26,8,1|k9bmrz,26,8,1|k9bms0,1,1,0|kh8tfz,1,1,0|kh8tg0,26,8,1|ks1pfz,26,8,1|ks1pg0,1,1,0|kzyw3z,1,1,0|kzyw40,26,8,1|lb4qrz,26,8,1|lb4qs0,1,1,0|lioyrz,1,1,0|lioys0,26,8,1|ltutfz,26,8,1|ltutg0,1,1,0|m1f1fz,1,1,0|m1f1g0,26,8,1|mckw3z,26,8,1|mckw40,1,1,0|mki2rz,1,1,0|mki2s0,26,8,1|mvayrz,26,8,1|mvays0,1,1,0|n385fz,1,1,0|n385g0,26,8,1|ne11fz,26,8,1|ne11g0,1,1,0|nly83z,1,1,0|nly840,26,8,1|nwr43z,26,8,1|nwr440,1,1,0|o4oarz,1,1,0|o4oas0,26,8,1|ofu5fz,26,8,1|ofu5g0,1,1,0|onedfz,1,1,0|onedg0,26,8,1|oyk83z,26,8,1|oyk840,1,1,0|p64g3z,1,1,0|p64g40,26,8,1|phaarz,26,8,1|phaas0,1,1,0|pp7hfz,1,1,0|pp7hg0,26,8,1|q00dfz,26,8,1|q00dg0,1,1,0|q7xk3z,1,1,0|q7xk40,26,8,1|qiqg3z,26,8,1|qiqg40,1,1,0|qqnmrz,1,1,0|qqnms0,26,8,1|r1thfz,26,8,1|r1thg0,1,1,0|r9dpfz,1,1,0|r9dpg0,26,8,1|rkjk3z,26,8,1|rkjk40,1,1,0|rs3s3z,1,1,0|rs3s40,26,8,1|s39mrz,26,8,1|s39ms0,1,1,0|sb6tfz,1,1,0|sb6tg0,26,8,1|slzpfz,26,8,1|slzpg0,1,1,0|stww3z,1,1,0|stww40,26,8,1|t4ps3z,26,8,1|t4ps40,1,1,0|tcmyrz,1,1,0|tcmys0,26,8,1|tnfurz,26,8,1|tnfus0,1,1,0|tvd1fz,1,1,0|tvd1g0,26,8,1|u6iw3z,26,8,1|u6iw40,1,1,0|ue343z,1,1,0|ue3440,26,8,1|up8yrz,26,8,1|up8ys0,1,1,0|uwt6rz,1,1,0|uwt6s0,26,8,1|v7z1fz,26,8,1|v7z1g0,1,1,0|vfw83z,1,1,0|vfw840,26,8,1|vqp43z,26,8,1|vqp440,1,1,0|vymarz,1,1,0|vymas0,26,8,1|w9f6rz,26,8,1|w9f6s0,1,1,0|whcdfz,1,1,0|whcdg0,26,8,1|wsi83z,26,8,1|wsi840,1,1,0|x02g3z,1,1,0|x02g40,26,8,1|xb8arz,26,8,1|xb8as0,1,1,0|xisirz,1,1,0|xisis0,26,8,1|xtydfz,26,8,1|xtydg0,1,1,0|y1ilfz,1,1,0|y1ilg0,26,8,1|ycog3z,26,8,1|ycog40,1,1,0|yklmrz,1,1,0|yklms0,26,8,1|yveirz,26,8,1|yveis0,1,1,0|z3bpfz,1,1,0|z3bpg0,26,8,1|ze4lfz,26,8,1|ze4lg0,1,1,0|zm1s3z,1,1,0|zm1s40,26,8,1|zx7mrz,26,8,1|zx7ms0,1,1,0|104rurz,1,1,0|104rus0,26,8,1|10fxpfz,26,8,1|10fxpg0,1,1,0|10nhxfz,1,1,0|10nhxg0,26,8,1|10yns3z,26,8,1|10yns40,1,1,0|116kyrz,1,1,0|116kys0,26,8,1|11hdurz,26,8,1|11hdus0,1,1,0|11pb1fz,1,1,0|11pb1g0,26,8,1|1203xfz,26,8,1|1203xg0,1,1,0|128143z,1,1,0|1281440,26,8,1|12iu03z,26,8,1|12iu040,1,1,0|12qr6rz,1,1,0|12qr6s0,26,8,1|131x1fz,26,8,1|131x1g0,1,1,0|139h9fz,1,1,0|139h9g0,26,8,1|13kn43z,26,8,1|13kn440,1,1,0|13s7c3z,1,1,0|13s7c40,26,8,1|143d6rz,26,8,1|143d6s0,1,1,0|14badfz,1,1,0|14badg0,26,8,1|14m39fz,26,8,1|14m39g0,1,1,0|14u0g3z,1,1,0|14u0g40,26,8,1|154tc3z,26,8,1|154tc40,1,1,0|15cqirz,1,1,0|15cqis0,26,8,1|15nwdfz,26,8,1|15nwdg0,1,1,0|15vglfz,1,1,0|15vglg0,26,8,1|166mg3z,26,8,1|166mg40,1,1,0|16e6o3z,1,1,0|16e6o40,26,8,1|16pcirz,26,8,1|16pcis0,1,1,0|16x9pfz,1,1,0|16x9pg0,26,8,1|1782lfz,26,8,1|1782lg0,1,1,0|17fzs3z,1,1,0|17fzs40,26,8,1|17qso3z,26,8,1|17qso40,1,1,0|17ypurz,1,1,0|17ypus0,26,8,1|189iqrz,26,8,1|189iqs0,1,1,0|18hfxfz,1,1,0|18hfxg0,26,8,1|18sls3z,26,8,1|18sls40,1,1,0|190603z,1,1,0|1906040,26,8,1|19bburz,26,8,1|19bbus0,1,1,0|19iw2rz,1,1,0|19iw2s0,26,8,1|19u1xfz,26,8,1|19u1xg0,1,1,0|1a1z43z,1,1,0|1a1z440,26,8,1|1acs03z,26,8,1|1acs040,1,1,0|1akp6rz,1,1,0|1akp6s0,26,8,1|1avi2rz,26,8,1|1avi2s0,1,1,0|1b3f9fz,1,1,0|1b3f9g0,26,8,1|1bel43z,26,8,1|1bel440,1,1,0|1bm5c3z,1,1,0|1bm5c40,26,8,1|1bxb6rz,26,8,1|1bxb6s0,1,1,0|1c4verz,1,1,0|1c4ves0,26,8,1|1cg19fz,26,8,1|1cg19g0,1,1,0|1cnlhfz,1,1,0|1cnlhg0,26,8,1|1cyrc3z,26,8,1|1cyrc40,1,1,0|1d6oirz,1,1,0|1d6ois0,26,8,1|1dhherz,26,8,1|1dhhes0,1,1,0|1dpelfz,1,1,0|1dpelg0,26,8,1|1e07hfz,26,8,1|1e07hg0,1,1,0|1e84o3z,1,1,0|1e84o40,26,8,1|1ejairz,26,8,1|1ejais0,1,1,0|1equqrz,1,1,0|1equqs0,26,8,1|1f20lfz,26,8,1|1f20lg0,1,1,0|1f9ktfz,1,1,0|1f9ktg0,26,8,1|1fkqo3z,26,8,1|1fkqo40,1,1,0|1fsnurz,1,1,0|1fsnus0,26,8,1|1g3gqrz,26,8,1|1g3gqs0,1,1,0|1gbdxfz,1,1,0|1gbdxg0,26,8,1|1gm6tfz,26,8,1|1gm6tg0,1,1,0|1gu403z,1,1,0|1gu4040,26,8,1|1h4ww3z,26,8,1|1h4ww40,1,1,0|1hcu2rz,1,1,0|1hcu2s0,26,8,1|1hnzxfz,26,8,1|1hnzxg0,1,1,0|1hvk5fz,1,1,0|1hvk5g0,26,8,1|1i6q03z,26,8,1|1i6q040,1,1,0|1iea83z,1,1,0|1iea840,26,8,1|1ipg2rz,26,8,1|1ipg2s0,1,1,0|1ixd9fz,1,1,0|1ixd9g0,26,8,1|1j865fz,26,8,1|1j865g0,1,1,0|1jg3c3z,1,1,0|1jg3c40,26,8,1|1jqw83z,26,8,1|1jqw840,1,1,0|1jyterz,1,1,0|1jytes0,26,8,1|1k9z9fz,26,8,1|1k9z9g0,1,1,0|1khjhfz,1,1,0|1khjhg0,26,8,1|1kspc3z,26,8,1|1kspc40,1,1,0|1l09k3z,1,1,0|1l09k40,26,8,1|1lbferz,26,8,1|1lbfes0,1,1,0|1ljclfz,1,1,0|1ljclg0,26,8,1|1lu5hfz,26,8,1|1lu5hg0,1,1,0|1m22o3z,1,1,0|1m22o40,26,8,1|1mcvk3z,26,8,1|1mcvk40,1,1,0|1mksqrz,1,1,0|1mksqs0,26,8,1|1mvlmrz,26,8,1|1mvlms0,1,1,0|1n3itfz,1,1,0|1n3itg0,26,8,1|1neoo3z,26,8,1|1neoo40,1,1,0|1nm8w3z,1,1,0|1nm8w40,26,8,1|1nxeqrz,26,8,1|1nxeqs0,1,1,0|1o4yyrz,1,1,0|1o4yys0,26,8,1|1og4tfz,26,8,1|1og4tg0,1,1,0|1oo203z,1,1,0|1oo2040,26,8,1|1oyuw3z,26,8,1|1oyuw40,1,1,0|1p6s2rz,1,1,0|1p6s2s0,26,8,1|1phkyrz,26,8,1|1phkys0,1,1,0|1ppi5fz,1,1,0|1ppi5g0,26,8,1|1q0o03z,26,8,1|1q0o040,1,1,0|1q8883z,1,1,0|1q88840,26,8,1|1qje2rz,26,8,1|1qje2s0,1,1,0|1qqyarz,1,1,0|1qqyas0,26,8,1|1r245fz,26,8,1|1r245g0,1,1,0|1r9odfz,1,1,0|1r9odg0,26,8,1|1rku83z,26,8,1|1rku840,1,1,0|1rsrerz,1,1,0|1rsres0,26,8,1|1s3karz,26,8,1|1s3kas0,1,1,0|1sbhhfz,1,1,0|1sbhhg0,26,8,1|1smadfz,26,8,1|1smadg0,1,1,0|1su7k3z,1,1,0|1su7k40,26,8,1|1t5derz,26,8,1|1t5des0,1,1,0|1tcxmrz,1,1,0|1tcxms0,26,8,1|1to3hfz,26,8,1|1to3hg0,1,1,0|1tvnpfz,1,1,0|1tvnpg0,26,8,1|1u6tk3z,26,8,1|1u6tk40,1,1,0|1ueqqrz,1,1,0|1ueqqs0,26,8,1|1upjmrz,26,8,1|1upjms0,1,1,0|1uxgtfz,1,1,0|1uxgtg0,26,8,1|1v89pfz,26,8,1|1v89pg0,1,1,0|1vg6w3z,1,1,0|1vg6w40,26,8,1|1vqzs3z,26,8,1|1vqzs40,1,1,0|NaN,1,1,0\",\"Europe/Helsinki|,0,343,0|-1bss9ye,0,343,0|-1bss9yd,77,343,0|-peghye,77,343,0|-peghyd,14,9,0|-ehco81,14,9,0|-ehco80,15,4,1|-e7vxk1,15,4,1|-e7vxk0,14,9,0|5v5unz,14,9,0|5v5uo0,15,4,1|64ivzz,15,4,1|64iw00,14,9,0|6dvxbz,14,9,0|6dvxc0,15,4,1|6n8ynz,15,4,1|6n8yo0,14,9,0|6wm2rz,14,9,0|6wm2s0,15,4,1|75z43z,15,4,1|75z440,14,9,0|7fc5fz,14,9,0|7fc5g0,15,4,1|7p25fz,15,4,1|7p25g0,14,9,0|7yf6rz,14,9,0|7yf6s0,15,4,1|87s83z,15,4,1|87s840,14,9,0|8h59fz,14,9,0|8h59g0,15,4,1|8qiarz,15,4,1|8qias0,14,9,0|8zvc3z,14,9,0|8zvc40,15,4,1|998dfz,15,4,1|998dg0,14,9,0|9ilerz,14,9,0|9iles0,15,4,1|9ryg3z,15,4,1|9ryg40,14,9,0|a1bhfz,14,9,0|a1bhg0,15,4,1|aaoirz,15,4,1|aaois0,14,9,0|ak1k3z,14,9,0|ak1k40,15,4,1|atrk3z,15,4,1|atrk40,14,9,0|b34lfz,14,9,0|b34lg0,15,4,1|bchmrz,15,4,1|bchms0,14,9,0|bluo3z,14,9,0|bluo40,15,4,1|bv7pfz,15,4,1|bv7pg0,14,9,0|c4kqrz,14,9,0|c4kqs0,15,4,1|cdxs3z,15,4,1|cdxs40,14,9,0|cnatfz,14,9,0|cnatg0,15,4,1|cwnurz,15,4,1|cwnus0,14,9,0|d60w3z,14,9,0|d60w40,15,4,1|dfdxfz,15,4,1|dfdxg0,14,9,0|dp3xfz,14,9,0|dp3xg0,15,4,1|dzwtfz,15,4,1|dzwtg0,14,9,0|e7u03z,14,9,0|e7u040,15,4,1|eimw3z,15,4,1|eimw40,14,9,0|eqk2rz,14,9,0|eqk2s0,15,4,1|f1cyrz,15,4,1|f1cys0,14,9,0|f9a5fz,14,9,0|f9a5g0,15,4,1|fkg03z,15,4,1|fkg040,14,9,0|fs083z,14,9,0|fs0840,15,4,1|g362rz,15,4,1|g362s0,14,9,0|gaqarz,14,9,0|gaqas0,15,4,1|glw5fz,15,4,1|glw5g0,14,9,0|gttc3z,14,9,0|gttc40,15,4,1|h4m83z,15,4,1|h4m840,14,9,0|hcjerz,14,9,0|hcjes0,15,4,1|hncarz,15,4,1|hncas0,14,9,0|hv9hfz,14,9,0|hv9hg0,15,4,1|i6fc3z,15,4,1|i6fc40,14,9,0|idzk3z,14,9,0|idzk40,15,4,1|ip5erz,15,4,1|ip5es0,14,9,0|iwpmrz,14,9,0|iwpms0,15,4,1|j7vhfz,15,4,1|j7vhg0,14,9,0|jffpfz,14,9,0|jffpg0,15,4,1|jqlk3z,15,4,1|jqlk40,14,9,0|jyiqrz,14,9,0|jyiqs0,15,4,1|k9bmrz,15,4,1|k9bms0,14,9,0|kh8tfz,14,9,0|kh8tg0,15,4,1|ks1pfz,15,4,1|ks1pg0,14,9,0|kzyw3z,14,9,0|kzyw40,15,4,1|lb4qrz,15,4,1|lb4qs0,14,9,0|lioyrz,14,9,0|lioys0,15,4,1|ltutfz,15,4,1|ltutg0,14,9,0|m1f1fz,14,9,0|m1f1g0,15,4,1|mckw3z,15,4,1|mckw40,14,9,0|mki2rz,14,9,0|mki2s0,15,4,1|mvayrz,15,4,1|mvays0,14,9,0|n385fz,14,9,0|n385g0,15,4,1|ne11fz,15,4,1|ne11g0,14,9,0|nly83z,14,9,0|nly840,15,4,1|nwr43z,15,4,1|nwr440,14,9,0|o4oarz,14,9,0|o4oas0,15,4,1|ofu5fz,15,4,1|ofu5g0,14,9,0|onedfz,14,9,0|onedg0,15,4,1|oyk83z,15,4,1|oyk840,14,9,0|p64g3z,14,9,0|p64g40,15,4,1|phaarz,15,4,1|phaas0,14,9,0|pp7hfz,14,9,0|pp7hg0,15,4,1|q00dfz,15,4,1|q00dg0,14,9,0|q7xk3z,14,9,0|q7xk40,15,4,1|qiqg3z,15,4,1|qiqg40,14,9,0|qqnmrz,14,9,0|qqnms0,15,4,1|r1thfz,15,4,1|r1thg0,14,9,0|r9dpfz,14,9,0|r9dpg0,15,4,1|rkjk3z,15,4,1|rkjk40,14,9,0|rs3s3z,14,9,0|rs3s40,15,4,1|s39mrz,15,4,1|s39ms0,14,9,0|sb6tfz,14,9,0|sb6tg0,15,4,1|slzpfz,15,4,1|slzpg0,14,9,0|stww3z,14,9,0|stww40,15,4,1|t4ps3z,15,4,1|t4ps40,14,9,0|tcmyrz,14,9,0|tcmys0,15,4,1|tnfurz,15,4,1|tnfus0,14,9,0|tvd1fz,14,9,0|tvd1g0,15,4,1|u6iw3z,15,4,1|u6iw40,14,9,0|ue343z,14,9,0|ue3440,15,4,1|up8yrz,15,4,1|up8ys0,14,9,0|uwt6rz,14,9,0|uwt6s0,15,4,1|v7z1fz,15,4,1|v7z1g0,14,9,0|vfw83z,14,9,0|vfw840,15,4,1|vqp43z,15,4,1|vqp440,14,9,0|vymarz,14,9,0|vymas0,15,4,1|w9f6rz,15,4,1|w9f6s0,14,9,0|whcdfz,14,9,0|whcdg0,15,4,1|wsi83z,15,4,1|wsi840,14,9,0|x02g3z,14,9,0|x02g40,15,4,1|xb8arz,15,4,1|xb8as0,14,9,0|xisirz,14,9,0|xisis0,15,4,1|xtydfz,15,4,1|xtydg0,14,9,0|y1ilfz,14,9,0|y1ilg0,15,4,1|ycog3z,15,4,1|ycog40,14,9,0|yklmrz,14,9,0|yklms0,15,4,1|yveirz,15,4,1|yveis0,14,9,0|z3bpfz,14,9,0|z3bpg0,15,4,1|ze4lfz,15,4,1|ze4lg0,14,9,0|zm1s3z,14,9,0|zm1s40,15,4,1|zx7mrz,15,4,1|zx7ms0,14,9,0|104rurz,14,9,0|104rus0,15,4,1|10fxpfz,15,4,1|10fxpg0,14,9,0|10nhxfz,14,9,0|10nhxg0,15,4,1|10yns3z,15,4,1|10yns40,14,9,0|116kyrz,14,9,0|116kys0,15,4,1|11hdurz,15,4,1|11hdus0,14,9,0|11pb1fz,14,9,0|11pb1g0,15,4,1|1203xfz,15,4,1|1203xg0,14,9,0|128143z,14,9,0|1281440,15,4,1|12iu03z,15,4,1|12iu040,14,9,0|12qr6rz,14,9,0|12qr6s0,15,4,1|131x1fz,15,4,1|131x1g0,14,9,0|139h9fz,14,9,0|139h9g0,15,4,1|13kn43z,15,4,1|13kn440,14,9,0|13s7c3z,14,9,0|13s7c40,15,4,1|143d6rz,15,4,1|143d6s0,14,9,0|14badfz,14,9,0|14badg0,15,4,1|14m39fz,15,4,1|14m39g0,14,9,0|14u0g3z,14,9,0|14u0g40,15,4,1|154tc3z,15,4,1|154tc40,14,9,0|15cqirz,14,9,0|15cqis0,15,4,1|15nwdfz,15,4,1|15nwdg0,14,9,0|15vglfz,14,9,0|15vglg0,15,4,1|166mg3z,15,4,1|166mg40,14,9,0|16e6o3z,14,9,0|16e6o40,15,4,1|16pcirz,15,4,1|16pcis0,14,9,0|16x9pfz,14,9,0|16x9pg0,15,4,1|1782lfz,15,4,1|1782lg0,14,9,0|17fzs3z,14,9,0|17fzs40,15,4,1|17qso3z,15,4,1|17qso40,14,9,0|17ypurz,14,9,0|17ypus0,15,4,1|189iqrz,15,4,1|189iqs0,14,9,0|18hfxfz,14,9,0|18hfxg0,15,4,1|18sls3z,15,4,1|18sls40,14,9,0|190603z,14,9,0|1906040,15,4,1|19bburz,15,4,1|19bbus0,14,9,0|19iw2rz,14,9,0|19iw2s0,15,4,1|19u1xfz,15,4,1|19u1xg0,14,9,0|1a1z43z,14,9,0|1a1z440,15,4,1|1acs03z,15,4,1|1acs040,14,9,0|1akp6rz,14,9,0|1akp6s0,15,4,1|1avi2rz,15,4,1|1avi2s0,14,9,0|1b3f9fz,14,9,0|1b3f9g0,15,4,1|1bel43z,15,4,1|1bel440,14,9,0|1bm5c3z,14,9,0|1bm5c40,15,4,1|1bxb6rz,15,4,1|1bxb6s0,14,9,0|1c4verz,14,9,0|1c4ves0,15,4,1|1cg19fz,15,4,1|1cg19g0,14,9,0|1cnlhfz,14,9,0|1cnlhg0,15,4,1|1cyrc3z,15,4,1|1cyrc40,14,9,0|1d6oirz,14,9,0|1d6ois0,15,4,1|1dhherz,15,4,1|1dhhes0,14,9,0|1dpelfz,14,9,0|1dpelg0,15,4,1|1e07hfz,15,4,1|1e07hg0,14,9,0|1e84o3z,14,9,0|1e84o40,15,4,1|1ejairz,15,4,1|1ejais0,14,9,0|1equqrz,14,9,0|1equqs0,15,4,1|1f20lfz,15,4,1|1f20lg0,14,9,0|1f9ktfz,14,9,0|1f9ktg0,15,4,1|1fkqo3z,15,4,1|1fkqo40,14,9,0|1fsnurz,14,9,0|1fsnus0,15,4,1|1g3gqrz,15,4,1|1g3gqs0,14,9,0|1gbdxfz,14,9,0|1gbdxg0,15,4,1|1gm6tfz,15,4,1|1gm6tg0,14,9,0|1gu403z,14,9,0|1gu4040,15,4,1|1h4ww3z,15,4,1|1h4ww40,14,9,0|1hcu2rz,14,9,0|1hcu2s0,15,4,1|1hnzxfz,15,4,1|1hnzxg0,14,9,0|1hvk5fz,14,9,0|1hvk5g0,15,4,1|1i6q03z,15,4,1|1i6q040,14,9,0|1iea83z,14,9,0|1iea840,15,4,1|1ipg2rz,15,4,1|1ipg2s0,14,9,0|1ixd9fz,14,9,0|1ixd9g0,15,4,1|1j865fz,15,4,1|1j865g0,14,9,0|1jg3c3z,14,9,0|1jg3c40,15,4,1|1jqw83z,15,4,1|1jqw840,14,9,0|1jyterz,14,9,0|1jytes0,15,4,1|1k9z9fz,15,4,1|1k9z9g0,14,9,0|1khjhfz,14,9,0|1khjhg0,15,4,1|1kspc3z,15,4,1|1kspc40,14,9,0|1l09k3z,14,9,0|1l09k40,15,4,1|1lbferz,15,4,1|1lbfes0,14,9,0|1ljclfz,14,9,0|1ljclg0,15,4,1|1lu5hfz,15,4,1|1lu5hg0,14,9,0|1m22o3z,14,9,0|1m22o40,15,4,1|1mcvk3z,15,4,1|1mcvk40,14,9,0|1mksqrz,14,9,0|1mksqs0,15,4,1|1mvlmrz,15,4,1|1mvlms0,14,9,0|1n3itfz,14,9,0|1n3itg0,15,4,1|1neoo3z,15,4,1|1neoo40,14,9,0|1nm8w3z,14,9,0|1nm8w40,15,4,1|1nxeqrz,15,4,1|1nxeqs0,14,9,0|1o4yyrz,14,9,0|1o4yys0,15,4,1|1og4tfz,15,4,1|1og4tg0,14,9,0|1oo203z,14,9,0|1oo2040,15,4,1|1oyuw3z,15,4,1|1oyuw40,14,9,0|1p6s2rz,14,9,0|1p6s2s0,15,4,1|1phkyrz,15,4,1|1phkys0,14,9,0|1ppi5fz,14,9,0|1ppi5g0,15,4,1|1q0o03z,15,4,1|1q0o040,14,9,0|1q8883z,14,9,0|1q88840,15,4,1|1qje2rz,15,4,1|1qje2s0,14,9,0|1qqyarz,14,9,0|1qqyas0,15,4,1|1r245fz,15,4,1|1r245g0,14,9,0|1r9odfz,14,9,0|1r9odg0,15,4,1|1rku83z,15,4,1|1rku840,14,9,0|1rsrerz,14,9,0|1rsres0,15,4,1|1s3karz,15,4,1|1s3kas0,14,9,0|1sbhhfz,14,9,0|1sbhhg0,15,4,1|1smadfz,15,4,1|1smadg0,14,9,0|1su7k3z,14,9,0|1su7k40,15,4,1|1t5derz,15,4,1|1t5des0,14,9,0|1tcxmrz,14,9,0|1tcxms0,15,4,1|1to3hfz,15,4,1|1to3hg0,14,9,0|1tvnpfz,14,9,0|1tvnpg0,15,4,1|1u6tk3z,15,4,1|1u6tk40,14,9,0|1ueqqrz,14,9,0|1ueqqs0,15,4,1|1upjmrz,15,4,1|1upjms0,14,9,0|1uxgtfz,14,9,0|1uxgtg0,15,4,1|1v89pfz,15,4,1|1v89pg0,14,9,0|1vg6w3z,14,9,0|1vg6w40,15,4,1|1vqzs3z,15,4,1|1vqzs40,14,9,0|NaN,14,9,0\",\"Europe/Isle_of_Man|,0,342,0|-1rprx9y,0,342,0|-1rprx9x,1,1,0|-rzcns1,1,1,0|-rzcns0,26,8,1|-rsid41,26,8,1|-rsid40,1,1,0|-risd41,1,1,0|-risd40,26,8,1|-ragd41,26,8,1|-ragd40,1,1,0|-r0s7s1,1,1,0|-r0s7s0,26,8,1|-qr0d41,26,8,1|-qr0d40,1,1,0|-qhp6g1,1,1,0|-qhp6g0,26,8,1|-q8aag1,26,8,1|-q8aag0,1,1,0|-pyz3s1,1,1,0|-pyz3s0,26,8,1|-po4d41,26,8,1|-po4d40,1,1,0|-pfw2g1,1,1,0|-pfw2g0,26,8,1|-p6h6g1,26,8,1|-p6h6g0,1,1,0|-oxiyg1,1,1,0|-oxiyg0,26,8,1|-onfzs1,26,8,1|-onfzs0,1,1,0|-odd141,1,1,0|-odd140,26,8,1|-o5st41,26,8,1|-o5st40,1,1,0|-nuzx41,1,1,0|-nuzx40,26,8,1|-nmprs1,26,8,1|-nmprs0,1,1,0|-nbwvs1,1,1,0|-nbwvs0,26,8,1|-n39rs1,26,8,1|-n39rs0,1,1,0|-mt6t41,1,1,0|-mt6t40,26,8,1|-mkjp41,26,8,1|-mkjp40,1,1,0|-matp41,1,1,0|-matp40,26,8,1|-m1tmg1,26,8,1|-m1tmg0,1,1,0|-lrdp41,1,1,0|-lrdp40,26,8,1|-liql41,26,8,1|-liql40,1,1,0|-l8nmg1,1,1,0|-l8nmg0,26,8,1|-l00ig1,26,8,1|-l00ig0,1,1,0|-kqaig1,1,1,0|-kqaig0,26,8,1|-khafs1,26,8,1|-khafs0,1,1,0|-k77h41,1,1,0|-k77h40,26,8,1|-jykd41,26,8,1|-jykd40,1,1,0|-joheg1,1,1,0|-joheg0,26,8,1|-jfuag1,26,8,1|-jfuag0,1,1,0|-j64ag1,1,1,0|-j64ag0,26,8,1|-iwr941,26,8,1|-iwr940,1,1,0|-imoag1,1,1,0|-imoag0,26,8,1|-ie16g1,26,8,1|-ie16g0,1,1,0|-i4b6g1,1,1,0|-i4b6g0,26,8,1|-hvb3s1,26,8,1|-hvb3s0,1,1,0|-hl8541,1,1,0|-hl8540,26,8,1|-hcl141,26,8,1|-hcl140,1,1,0|-h2i2g1,1,1,0|-h2i2g0,26,8,1|-gtuyg1,26,8,1|-gtuyg0,1,1,0|-gk4yg1,1,1,0|-gk4yg0,26,8,1|-gb4vs1,26,8,1|-gb4vs0,1,1,0|-g11x41,1,1,0|-g11x40,26,8,1|-fpw2g1,26,8,1|-fpw2g0,1,1,0|-fkul41,1,1,0|-fkul40,26,8,1|-eyiyk1,26,8,1|-eyiyk0,152,9,1|-ethh81,152,9,1|-ethh80,26,8,1|-eh8qk1,26,8,1|-eh8qk0,152,9,1|-earek1,152,9,1|-earek0,26,8,1|-dyinw1,26,8,1|-dyinw0,152,9,1|-drod81,152,9,1|-drod80,26,8,1|-dfsl81,26,8,1|-dfsl80,152,9,1|-d75h81,152,9,1|-d75h80,26,8,1|-cx0nw1,26,8,1|-cx0nw0,152,9,1|-cro2k1,152,9,1|-cro2k0,26,8,1|-cncfs1,26,8,1|-cncfs0,1,1,0|-cdmfs1,1,1,0|-cdmfs0,26,8,1|-c4md41,26,8,1|-c4md40,1,1,0|-bwc7s1,1,1,0|-bwc7s0,26,8,1|-buwfw1,26,8,1|-buwfw0,152,9,1|-bos2k1,152,9,1|-bos2k0,26,8,1|-bkgfs1,26,8,1|-bkgfs0,1,1,0|-bdm541,1,1,0|-bdm540,26,8,1|-b1qd41,26,8,1|-b1qd40,1,1,0|-att6g1,1,1,0|-att6g0,26,8,1|-aj0ag1,26,8,1|-aj0ag0,1,1,0|-aad6g1,1,1,0|-aad6g0,26,8,1|-a0n6g1,26,8,1|-a0n6g0,1,1,0|-9rn3s1,1,1,0|-9rn3s0,26,8,1|-9hx3s1,26,8,1|-9hx3s0,1,1,0|-98k2g1,1,1,0|-98k2g0,26,8,1|-8yu2g1,26,8,1|-8yu2g0,1,1,0|-8ptzs1,1,1,0|-8ptzs0,26,8,1|-8h6vs1,26,8,1|-8h6vs0,1,1,0|-87gvs1,1,1,0|-87gvs0,26,8,1|-7ygt41,26,8,1|-7ygt40,1,1,0|-7odug1,1,1,0|-7odug0,26,8,1|-7fqqg1,26,8,1|-7fqqg0,1,1,0|-75at41,1,1,0|-75at40,26,8,1|-6wnp41,26,8,1|-6wnp40,1,1,0|-6mxp41,1,1,0|-6mxp40,26,8,1|-6dxmg1,26,8,1|-6dxmg0,1,1,0|-63uns1,1,1,0|-63uns0,26,8,1|-5v7js1,26,8,1|-5v7js0,1,1,0|-5l4l41,1,1,0|-5l4l40,26,8,1|-5chh41,26,8,1|-5chh40,1,1,0|-52rh41,1,1,0|-52rh40,26,8,1|-4treg1,26,8,1|-4treg0,1,1,0|-4krbs1,1,1,0|-4krbs0,26,8,1|-49lh41,26,8,1|-49lh40,1,1,0|-421941,1,1,0|-421940,26,8,1|-3qveg1,26,8,1|-3qveg0,1,1,0|-3iy7s1,1,1,0|-3iy7s0,26,8,1|-385bs1,26,8,1|-385bs0,1,1,0|-30l3s1,1,1,0|-30l3s0,26,8,1|-2pf941,26,8,1|-2pf940,1,1,0|-2hv141,1,1,0|-2hv140,26,8,1|-26p6g1,26,8,1|-26p6g0,1,1,0|-1z4yg1,1,1,0|-1z4yg0,26,8,1|-1nz3s1,26,8,1|-1nz3s0,1,1,0|-1gevs1,1,1,0|-1gevs0,26,8,1|-14w2g1,26,8,1|-14w2g0,1,1,0|-z4ns1,1,1,0|-z4ns0,26,8,1|-m6841,26,8,1|-m6840,26,8,0|yd6vz,26,8,0|yd6w0,1,1,0|15kg7z,1,1,0|15kg80,26,8,1|1h39jz,26,8,1|1h39k0,1,1,0|1oaivz,1,1,0|1oaiw0,26,8,1|1ztc7z,26,8,1|1ztc80,1,1,0|270ljz,1,1,0|270lk0,26,8,1|2ijevz,26,8,1|2ijew0,1,1,0|2pqo7z,1,1,0|2pqo80,26,8,1|319hjz,26,8,1|319hk0,1,1,0|38tpjz,1,1,0|38tpk0,26,8,1|3jzk7z,26,8,1|3jzk80,1,1,0|3rjs7z,1,1,0|3rjs80,26,8,1|42pmvz,26,8,1|42pmw0,1,1,0|4a9uvz,1,1,0|4a9uw0,26,8,1|4lso7z,26,8,1|4lso80,1,1,0|4szxjz,1,1,0|4szxk0,26,8,1|54iqvz,26,8,1|54iqw0,1,1,0|5bq07z,1,1,0|5bq080,26,8,1|5n8tjz,26,8,1|5n8tk0,1,1,0|5v5xfz,1,1,0|5v5xg0,26,8,1|65ytfz,26,8,1|65ytg0,1,1,0|6dw03z,1,1,0|6dw040,26,8,1|6oow3z,26,8,1|6oow40,1,1,0|6wm2rz,1,1,0|6wm2s0,26,8,1|77eyrz,26,8,1|77eys0,1,1,0|7fc5fz,1,1,0|7fc5g0,26,8,1|7qi03z,26,8,1|7qi040,1,1,0|7yf6rz,1,1,0|7yf6s0,26,8,1|8982rz,26,8,1|8982s0,1,1,0|8h59fz,1,1,0|8h59g0,26,8,1|8ry5fz,26,8,1|8ry5g0,1,1,0|8zvc3z,1,1,0|8zvc40,26,8,1|9ao83z,26,8,1|9ao840,1,1,0|9ilerz,1,1,0|9iles0,26,8,1|9tearz,26,8,1|9teas0,1,1,0|a1bhfz,1,1,0|a1bhg0,26,8,1|achc3z,26,8,1|achc40,1,1,0|ak1k3z,1,1,0|ak1k40,26,8,1|av7erz,26,8,1|av7es0,1,1,0|b34lfz,1,1,0|b34lg0,26,8,1|bdxhfz,26,8,1|bdxhg0,1,1,0|bluo3z,1,1,0|bluo40,26,8,1|bwnk3z,26,8,1|bwnk40,1,1,0|c4kqrz,1,1,0|c4kqs0,26,8,1|cfdmrz,26,8,1|cfdms0,1,1,0|cnatfz,1,1,0|cnatg0,26,8,1|cy3pfz,26,8,1|cy3pg0,1,1,0|d60w3z,1,1,0|d60w40,26,8,1|dgts3z,26,8,1|dgts40,1,1,0|dp3xfz,1,1,0|dp3xg0,26,8,1|dzwtfz,26,8,1|dzwtg0,1,1,0|e7u03z,1,1,0|e7u040,26,8,1|eimw3z,26,8,1|eimw40,1,1,0|eqk2rz,1,1,0|eqk2s0,26,8,1|f1cyrz,26,8,1|f1cys0,1,1,0|f9a5fz,1,1,0|f9a5g0,26,8,1|fkg03z,26,8,1|fkg040,1,1,0|fs083z,1,1,0|fs0840,26,8,1|g362rz,26,8,1|g362s0,1,1,0|gaqarz,1,1,0|gaqas0,26,8,1|glw5fz,26,8,1|glw5g0,1,1,0|gttc3z,1,1,0|gttc40,26,8,1|h4m83z,26,8,1|h4m840,1,1,0|hcjerz,1,1,0|hcjes0,26,8,1|hncarz,26,8,1|hncas0,1,1,0|hv9hfz,1,1,0|hv9hg0,26,8,1|i6fc3z,26,8,1|i6fc40,1,1,0|idzk3z,1,1,0|idzk40,26,8,1|ip5erz,26,8,1|ip5es0,1,1,0|iwpmrz,1,1,0|iwpms0,26,8,1|j7vhfz,26,8,1|j7vhg0,1,1,0|jffpfz,1,1,0|jffpg0,26,8,1|jqlk3z,26,8,1|jqlk40,1,1,0|jyiqrz,1,1,0|jyiqs0,26,8,1|k9bmrz,26,8,1|k9bms0,1,1,0|kh8tfz,1,1,0|kh8tg0,26,8,1|ks1pfz,26,8,1|ks1pg0,1,1,0|kzyw3z,1,1,0|kzyw40,26,8,1|lb4qrz,26,8,1|lb4qs0,1,1,0|lioyrz,1,1,0|lioys0,26,8,1|ltutfz,26,8,1|ltutg0,1,1,0|m1f1fz,1,1,0|m1f1g0,26,8,1|mckw3z,26,8,1|mckw40,1,1,0|mki2rz,1,1,0|mki2s0,26,8,1|mvayrz,26,8,1|mvays0,1,1,0|n385fz,1,1,0|n385g0,26,8,1|ne11fz,26,8,1|ne11g0,1,1,0|nly83z,1,1,0|nly840,26,8,1|nwr43z,26,8,1|nwr440,1,1,0|o4oarz,1,1,0|o4oas0,26,8,1|ofu5fz,26,8,1|ofu5g0,1,1,0|onedfz,1,1,0|onedg0,26,8,1|oyk83z,26,8,1|oyk840,1,1,0|p64g3z,1,1,0|p64g40,26,8,1|phaarz,26,8,1|phaas0,1,1,0|pp7hfz,1,1,0|pp7hg0,26,8,1|q00dfz,26,8,1|q00dg0,1,1,0|q7xk3z,1,1,0|q7xk40,26,8,1|qiqg3z,26,8,1|qiqg40,1,1,0|qqnmrz,1,1,0|qqnms0,26,8,1|r1thfz,26,8,1|r1thg0,1,1,0|r9dpfz,1,1,0|r9dpg0,26,8,1|rkjk3z,26,8,1|rkjk40,1,1,0|rs3s3z,1,1,0|rs3s40,26,8,1|s39mrz,26,8,1|s39ms0,1,1,0|sb6tfz,1,1,0|sb6tg0,26,8,1|slzpfz,26,8,1|slzpg0,1,1,0|stww3z,1,1,0|stww40,26,8,1|t4ps3z,26,8,1|t4ps40,1,1,0|tcmyrz,1,1,0|tcmys0,26,8,1|tnfurz,26,8,1|tnfus0,1,1,0|tvd1fz,1,1,0|tvd1g0,26,8,1|u6iw3z,26,8,1|u6iw40,1,1,0|ue343z,1,1,0|ue3440,26,8,1|up8yrz,26,8,1|up8ys0,1,1,0|uwt6rz,1,1,0|uwt6s0,26,8,1|v7z1fz,26,8,1|v7z1g0,1,1,0|vfw83z,1,1,0|vfw840,26,8,1|vqp43z,26,8,1|vqp440,1,1,0|vymarz,1,1,0|vymas0,26,8,1|w9f6rz,26,8,1|w9f6s0,1,1,0|whcdfz,1,1,0|whcdg0,26,8,1|wsi83z,26,8,1|wsi840,1,1,0|x02g3z,1,1,0|x02g40,26,8,1|xb8arz,26,8,1|xb8as0,1,1,0|xisirz,1,1,0|xisis0,26,8,1|xtydfz,26,8,1|xtydg0,1,1,0|y1ilfz,1,1,0|y1ilg0,26,8,1|ycog3z,26,8,1|ycog40,1,1,0|yklmrz,1,1,0|yklms0,26,8,1|yveirz,26,8,1|yveis0,1,1,0|z3bpfz,1,1,0|z3bpg0,26,8,1|ze4lfz,26,8,1|ze4lg0,1,1,0|zm1s3z,1,1,0|zm1s40,26,8,1|zx7mrz,26,8,1|zx7ms0,1,1,0|104rurz,1,1,0|104rus0,26,8,1|10fxpfz,26,8,1|10fxpg0,1,1,0|10nhxfz,1,1,0|10nhxg0,26,8,1|10yns3z,26,8,1|10yns40,1,1,0|116kyrz,1,1,0|116kys0,26,8,1|11hdurz,26,8,1|11hdus0,1,1,0|11pb1fz,1,1,0|11pb1g0,26,8,1|1203xfz,26,8,1|1203xg0,1,1,0|128143z,1,1,0|1281440,26,8,1|12iu03z,26,8,1|12iu040,1,1,0|12qr6rz,1,1,0|12qr6s0,26,8,1|131x1fz,26,8,1|131x1g0,1,1,0|139h9fz,1,1,0|139h9g0,26,8,1|13kn43z,26,8,1|13kn440,1,1,0|13s7c3z,1,1,0|13s7c40,26,8,1|143d6rz,26,8,1|143d6s0,1,1,0|14badfz,1,1,0|14badg0,26,8,1|14m39fz,26,8,1|14m39g0,1,1,0|14u0g3z,1,1,0|14u0g40,26,8,1|154tc3z,26,8,1|154tc40,1,1,0|15cqirz,1,1,0|15cqis0,26,8,1|15nwdfz,26,8,1|15nwdg0,1,1,0|15vglfz,1,1,0|15vglg0,26,8,1|166mg3z,26,8,1|166mg40,1,1,0|16e6o3z,1,1,0|16e6o40,26,8,1|16pcirz,26,8,1|16pcis0,1,1,0|16x9pfz,1,1,0|16x9pg0,26,8,1|1782lfz,26,8,1|1782lg0,1,1,0|17fzs3z,1,1,0|17fzs40,26,8,1|17qso3z,26,8,1|17qso40,1,1,0|17ypurz,1,1,0|17ypus0,26,8,1|189iqrz,26,8,1|189iqs0,1,1,0|18hfxfz,1,1,0|18hfxg0,26,8,1|18sls3z,26,8,1|18sls40,1,1,0|190603z,1,1,0|1906040,26,8,1|19bburz,26,8,1|19bbus0,1,1,0|19iw2rz,1,1,0|19iw2s0,26,8,1|19u1xfz,26,8,1|19u1xg0,1,1,0|1a1z43z,1,1,0|1a1z440,26,8,1|1acs03z,26,8,1|1acs040,1,1,0|1akp6rz,1,1,0|1akp6s0,26,8,1|1avi2rz,26,8,1|1avi2s0,1,1,0|1b3f9fz,1,1,0|1b3f9g0,26,8,1|1bel43z,26,8,1|1bel440,1,1,0|1bm5c3z,1,1,0|1bm5c40,26,8,1|1bxb6rz,26,8,1|1bxb6s0,1,1,0|1c4verz,1,1,0|1c4ves0,26,8,1|1cg19fz,26,8,1|1cg19g0,1,1,0|1cnlhfz,1,1,0|1cnlhg0,26,8,1|1cyrc3z,26,8,1|1cyrc40,1,1,0|1d6oirz,1,1,0|1d6ois0,26,8,1|1dhherz,26,8,1|1dhhes0,1,1,0|1dpelfz,1,1,0|1dpelg0,26,8,1|1e07hfz,26,8,1|1e07hg0,1,1,0|1e84o3z,1,1,0|1e84o40,26,8,1|1ejairz,26,8,1|1ejais0,1,1,0|1equqrz,1,1,0|1equqs0,26,8,1|1f20lfz,26,8,1|1f20lg0,1,1,0|1f9ktfz,1,1,0|1f9ktg0,26,8,1|1fkqo3z,26,8,1|1fkqo40,1,1,0|1fsnurz,1,1,0|1fsnus0,26,8,1|1g3gqrz,26,8,1|1g3gqs0,1,1,0|1gbdxfz,1,1,0|1gbdxg0,26,8,1|1gm6tfz,26,8,1|1gm6tg0,1,1,0|1gu403z,1,1,0|1gu4040,26,8,1|1h4ww3z,26,8,1|1h4ww40,1,1,0|1hcu2rz,1,1,0|1hcu2s0,26,8,1|1hnzxfz,26,8,1|1hnzxg0,1,1,0|1hvk5fz,1,1,0|1hvk5g0,26,8,1|1i6q03z,26,8,1|1i6q040,1,1,0|1iea83z,1,1,0|1iea840,26,8,1|1ipg2rz,26,8,1|1ipg2s0,1,1,0|1ixd9fz,1,1,0|1ixd9g0,26,8,1|1j865fz,26,8,1|1j865g0,1,1,0|1jg3c3z,1,1,0|1jg3c40,26,8,1|1jqw83z,26,8,1|1jqw840,1,1,0|1jyterz,1,1,0|1jytes0,26,8,1|1k9z9fz,26,8,1|1k9z9g0,1,1,0|1khjhfz,1,1,0|1khjhg0,26,8,1|1kspc3z,26,8,1|1kspc40,1,1,0|1l09k3z,1,1,0|1l09k40,26,8,1|1lbferz,26,8,1|1lbfes0,1,1,0|1ljclfz,1,1,0|1ljclg0,26,8,1|1lu5hfz,26,8,1|1lu5hg0,1,1,0|1m22o3z,1,1,0|1m22o40,26,8,1|1mcvk3z,26,8,1|1mcvk40,1,1,0|1mksqrz,1,1,0|1mksqs0,26,8,1|1mvlmrz,26,8,1|1mvlms0,1,1,0|1n3itfz,1,1,0|1n3itg0,26,8,1|1neoo3z,26,8,1|1neoo40,1,1,0|1nm8w3z,1,1,0|1nm8w40,26,8,1|1nxeqrz,26,8,1|1nxeqs0,1,1,0|1o4yyrz,1,1,0|1o4yys0,26,8,1|1og4tfz,26,8,1|1og4tg0,1,1,0|1oo203z,1,1,0|1oo2040,26,8,1|1oyuw3z,26,8,1|1oyuw40,1,1,0|1p6s2rz,1,1,0|1p6s2s0,26,8,1|1phkyrz,26,8,1|1phkys0,1,1,0|1ppi5fz,1,1,0|1ppi5g0,26,8,1|1q0o03z,26,8,1|1q0o040,1,1,0|1q8883z,1,1,0|1q88840,26,8,1|1qje2rz,26,8,1|1qje2s0,1,1,0|1qqyarz,1,1,0|1qqyas0,26,8,1|1r245fz,26,8,1|1r245g0,1,1,0|1r9odfz,1,1,0|1r9odg0,26,8,1|1rku83z,26,8,1|1rku840,1,1,0|1rsrerz,1,1,0|1rsres0,26,8,1|1s3karz,26,8,1|1s3kas0,1,1,0|1sbhhfz,1,1,0|1sbhhg0,26,8,1|1smadfz,26,8,1|1smadg0,1,1,0|1su7k3z,1,1,0|1su7k40,26,8,1|1t5derz,26,8,1|1t5des0,1,1,0|1tcxmrz,1,1,0|1tcxms0,26,8,1|1to3hfz,26,8,1|1to3hg0,1,1,0|1tvnpfz,1,1,0|1tvnpg0,26,8,1|1u6tk3z,26,8,1|1u6tk40,1,1,0|1ueqqrz,1,1,0|1ueqqs0,26,8,1|1upjmrz,26,8,1|1upjms0,1,1,0|1uxgtfz,1,1,0|1uxgtg0,26,8,1|1v89pfz,26,8,1|1v89pg0,1,1,0|1vg6w3z,1,1,0|1vg6w40,26,8,1|1vqzs3z,26,8,1|1vqzs40,1,1,0|NaN,1,1,0\",\"Europe/Istanbul|,0,344,0|-1ayy815,0,344,0|-1ayy814,117,345,0|-ux9xex,117,345,0|-ux9xew,14,9,0|-s0e081,14,9,0|-s0e080,15,4,1|-rsir01,15,4,1|-rsir00,14,9,0|-pyzew1,14,9,0|-pyzew0,15,4,1|-po4r01,15,4,1|-po4r00,14,9,0|-pfwdk1,14,9,0|-pfwdk0,15,4,1|-p6hkc1,15,4,1|-p6hkc0,14,9,0|-oxj9k1,14,9,0|-oxj9k0,15,4,1|-ongdo1,15,4,1|-ongdo0,14,9,0|-ntgo81,14,9,0|-ntgo80,15,4,1|-nm7n01,15,4,1|-nm7n00,14,9,0|-nbayw1,14,9,0|-nbayw0,15,4,1|-n3fpo1,15,4,1|-n3fpo0,14,9,0|-febpk1,14,9,0|-febpk0,15,4,1|-f9c5o1,15,4,1|-f9c5o0,14,9,0|-f6gdk1,14,9,0|-f6gdk0,15,4,1|-erc0c1,15,4,1|-erc0c0,14,9,0|-ehgdk1,14,9,0|-ehgdk0,15,4,1|-cnaz01,15,4,1|-cnaz00,14,9,0|-cb5uw1,14,9,0|-cb5uw0,15,4,1|-c4w0c1,15,4,1|-c4w0c0,14,9,0|-bujpk1,14,9,0|-bujpk0,15,4,1|-blwoc1,15,4,1|-blwoc0,14,9,0|-bbtmw1,14,9,0|-bbtmw0,15,4,1|-b36lo1,15,4,1|-b36lo0,14,9,0|-atgiw1,14,9,0|-atgiw0,15,4,1|-akgj01,15,4,1|-akgj00,14,9,0|-aadhk1,14,9,0|-aadhk0,15,4,1|-a1dho1,15,4,1|-a1dho0,14,9,0|-9rag81,14,9,0|-9rag80,15,4,1|-9inf01,15,4,1|-9inf00,14,9,0|-3wa5k1,14,9,0|-3wa5k0,15,4,1|-3805o1,15,4,1|-3805o0,14,9,0|-2xtew1,14,9,0|-2xtew0,15,4,1|-2qo301,15,4,1|-2qo300,14,9,0|1s8vvz,14,9,0|1s8vw0,15,4,1|2062jz,15,4,1|2062k0,14,9,0|27qdbz,14,9,0|27qdc0,15,4,1|2iw57z,15,4,1|2iw580,14,9,0|2q1mnz,14,9,0|2q1mo0,15,4,1|31m7vz,15,4,1|31m7w0,14,9,0|38tjzz,14,9,0|38tk00,15,4,1|3kcajz,15,4,1|3kcak0,14,9,0|3s9jzz,14,9,0|3s9k00,15,4,1|42cfvz,15,4,1|42cfw0,14,9,0|4azmnz,14,9,0|4azmo0,15,4,1|4ficzz,15,4,1|4fid00,100,4,0|73397z,100,4,0|733980,105,203,1|76bufz,105,203,1|76bug0,100,4,0|7qp97z,100,4,0|7qp980,14,9,0|7zg2jz,14,9,0|7zg2k0,15,4,1|87q7vz,15,4,1|87q7w0,14,9,0|8h53vz,14,9,0|8h53w0,15,4,1|8qi57z,15,4,1|8qi580,14,9,0|8zv6jz,14,9,0|8zv6k0,15,4,1|9987vz,15,4,1|9987w0,14,9,0|9il97z,14,9,0|9il980,15,4,1|9ryajz,15,4,1|9ryak0,14,9,0|a1bbvz,14,9,0|a1bbw0,15,4,1|aaod7z,15,4,1|aaod80,14,9,0|ak1ejz,14,9,0|ak1ek0,15,4,1|atrejz,15,4,1|atrek0,14,9,0|b34fvz,14,9,0|b34fw0,15,4,1|bchh7z,15,4,1|bchh80,14,9,0|bluijz,14,9,0|bluik0,15,4,1|bv7jvz,15,4,1|bv7jw0,14,9,0|c4kl7z,14,9,0|c4kl80,15,4,1|cdxmjz,15,4,1|cdxmk0,14,9,0|cmxp7z,14,9,0|cmxp80,15,4,1|cwnp7z,15,4,1|cwnp80,14,9,0|d60qjz,14,9,0|d60qk0,15,4,1|dfdrvz,15,4,1|dfdrw0,14,9,0|dp3rvz,14,9,0|dp3rw0,15,4,1|dzwnvz,15,4,1|dzwnw0,14,9,0|e7tujz,14,9,0|e7tuk0,15,4,1|eimqjz,15,4,1|eimqk0,14,9,0|eqjx7z,14,9,0|eqjx80,15,4,1|f1ct7z,15,4,1|f1ct80,14,9,0|f99zvz,14,9,0|f99zw0,15,4,1|fkfujz,15,4,1|fkfuk0,14,9,0|fs02jz,14,9,0|fs02k0,15,4,1|g35x7z,15,4,1|g35x80,14,9,0|gaq57z,14,9,0|gaq580,15,4,1|glvzvz,15,4,1|glvzw0,14,9,0|gtt6jz,14,9,0|gtt6k0,15,4,1|h4m2jz,15,4,1|h4m2k0,14,9,0|hcj97z,14,9,0|hcj980,15,4,1|hnc57z,15,4,1|hnc580,14,9,0|hv9bvz,14,9,0|hv9bw0,15,4,1|i6f6jz,15,4,1|i6f6k0,14,9,0|idzejz,14,9,0|idzek0,15,4,1|ip597z,15,4,1|ip5980,14,9,0|iwph7z,14,9,0|iwph80,15,4,1|j7vbvz,15,4,1|j7vbw0,14,9,0|jffpfz,14,9,0|jffpg0,15,4,1|jqlk3z,15,4,1|jqlk40,14,9,0|jyiqrz,14,9,0|jyiqs0,15,4,1|k9bmrz,15,4,1|k9bms0,14,9,0|kh8tfz,14,9,0|kh8tg0,15,4,1|ks1pfz,15,4,1|ks1pg0,14,9,0|kzyw3z,14,9,0|kzyw40,15,4,1|lb4qrz,15,4,1|lb4qs0,14,9,0|liqtfz,14,9,0|liqtg0,15,4,1|ltutfz,15,4,1|ltutg0,14,9,0|m1f1fz,14,9,0|m1f1g0,15,4,1|mckw3z,15,4,1|mckw40,14,9,0|mki2rz,14,9,0|mki2s0,15,4,1|mvayrz,15,4,1|mvays0,14,9,0|n3a03z,14,9,0|n3a040,15,4,1|ne11fz,15,4,1|ne11g0,14,9,0|nly83z,14,9,0|nly840,15,4,1|nxh1fz,15,4,1|nxh1g0,14,9,0|o4oarz,14,9,0|o4oas0,15,4,1|od3ozz,15,4,1|od3p00,100,4,0|NaN,100,4,0\",\"Europe/Jersey|,0,342,0|-1rprx9y,0,342,0|-1rprx9x,1,1,0|-rzcns1,1,1,0|-rzcns0,26,8,1|-rsid41,26,8,1|-rsid40,1,1,0|-risd41,1,1,0|-risd40,26,8,1|-ragd41,26,8,1|-ragd40,1,1,0|-r0s7s1,1,1,0|-r0s7s0,26,8,1|-qr0d41,26,8,1|-qr0d40,1,1,0|-qhp6g1,1,1,0|-qhp6g0,26,8,1|-q8aag1,26,8,1|-q8aag0,1,1,0|-pyz3s1,1,1,0|-pyz3s0,26,8,1|-po4d41,26,8,1|-po4d40,1,1,0|-pfw2g1,1,1,0|-pfw2g0,26,8,1|-p6h6g1,26,8,1|-p6h6g0,1,1,0|-oxiyg1,1,1,0|-oxiyg0,26,8,1|-onfzs1,26,8,1|-onfzs0,1,1,0|-odd141,1,1,0|-odd140,26,8,1|-o5st41,26,8,1|-o5st40,1,1,0|-nuzx41,1,1,0|-nuzx40,26,8,1|-nmprs1,26,8,1|-nmprs0,1,1,0|-nbwvs1,1,1,0|-nbwvs0,26,8,1|-n39rs1,26,8,1|-n39rs0,1,1,0|-mt6t41,1,1,0|-mt6t40,26,8,1|-mkjp41,26,8,1|-mkjp40,1,1,0|-matp41,1,1,0|-matp40,26,8,1|-m1tmg1,26,8,1|-m1tmg0,1,1,0|-lrdp41,1,1,0|-lrdp40,26,8,1|-liql41,26,8,1|-liql40,1,1,0|-l8nmg1,1,1,0|-l8nmg0,26,8,1|-l00ig1,26,8,1|-l00ig0,1,1,0|-kqaig1,1,1,0|-kqaig0,26,8,1|-khafs1,26,8,1|-khafs0,1,1,0|-k77h41,1,1,0|-k77h40,26,8,1|-jykd41,26,8,1|-jykd40,1,1,0|-joheg1,1,1,0|-joheg0,26,8,1|-jfuag1,26,8,1|-jfuag0,1,1,0|-j64ag1,1,1,0|-j64ag0,26,8,1|-iwr941,26,8,1|-iwr940,1,1,0|-imoag1,1,1,0|-imoag0,26,8,1|-ie16g1,26,8,1|-ie16g0,1,1,0|-i4b6g1,1,1,0|-i4b6g0,26,8,1|-hvb3s1,26,8,1|-hvb3s0,1,1,0|-hl8541,1,1,0|-hl8540,26,8,1|-hcl141,26,8,1|-hcl140,1,1,0|-h2i2g1,1,1,0|-h2i2g0,26,8,1|-gtuyg1,26,8,1|-gtuyg0,1,1,0|-gk4yg1,1,1,0|-gk4yg0,26,8,1|-gb4vs1,26,8,1|-gb4vs0,1,1,0|-g11x41,1,1,0|-g11x40,26,8,1|-fpw2g1,26,8,1|-fpw2g0,1,1,0|-fkul41,1,1,0|-fkul40,26,8,1|-eyiyk1,26,8,1|-eyiyk0,152,9,1|-ethh81,152,9,1|-ethh80,26,8,1|-eh8qk1,26,8,1|-eh8qk0,152,9,1|-earek1,152,9,1|-earek0,26,8,1|-dyinw1,26,8,1|-dyinw0,152,9,1|-drod81,152,9,1|-drod80,26,8,1|-dfsl81,26,8,1|-dfsl80,152,9,1|-d75h81,152,9,1|-d75h80,26,8,1|-cx0nw1,26,8,1|-cx0nw0,152,9,1|-cro2k1,152,9,1|-cro2k0,26,8,1|-cncfs1,26,8,1|-cncfs0,1,1,0|-cdmfs1,1,1,0|-cdmfs0,26,8,1|-c4md41,26,8,1|-c4md40,1,1,0|-bwc7s1,1,1,0|-bwc7s0,26,8,1|-buwfw1,26,8,1|-buwfw0,152,9,1|-bos2k1,152,9,1|-bos2k0,26,8,1|-bkgfs1,26,8,1|-bkgfs0,1,1,0|-bdm541,1,1,0|-bdm540,26,8,1|-b1qd41,26,8,1|-b1qd40,1,1,0|-att6g1,1,1,0|-att6g0,26,8,1|-aj0ag1,26,8,1|-aj0ag0,1,1,0|-aad6g1,1,1,0|-aad6g0,26,8,1|-a0n6g1,26,8,1|-a0n6g0,1,1,0|-9rn3s1,1,1,0|-9rn3s0,26,8,1|-9hx3s1,26,8,1|-9hx3s0,1,1,0|-98k2g1,1,1,0|-98k2g0,26,8,1|-8yu2g1,26,8,1|-8yu2g0,1,1,0|-8ptzs1,1,1,0|-8ptzs0,26,8,1|-8h6vs1,26,8,1|-8h6vs0,1,1,0|-87gvs1,1,1,0|-87gvs0,26,8,1|-7ygt41,26,8,1|-7ygt40,1,1,0|-7odug1,1,1,0|-7odug0,26,8,1|-7fqqg1,26,8,1|-7fqqg0,1,1,0|-75at41,1,1,0|-75at40,26,8,1|-6wnp41,26,8,1|-6wnp40,1,1,0|-6mxp41,1,1,0|-6mxp40,26,8,1|-6dxmg1,26,8,1|-6dxmg0,1,1,0|-63uns1,1,1,0|-63uns0,26,8,1|-5v7js1,26,8,1|-5v7js0,1,1,0|-5l4l41,1,1,0|-5l4l40,26,8,1|-5chh41,26,8,1|-5chh40,1,1,0|-52rh41,1,1,0|-52rh40,26,8,1|-4treg1,26,8,1|-4treg0,1,1,0|-4krbs1,1,1,0|-4krbs0,26,8,1|-49lh41,26,8,1|-49lh40,1,1,0|-421941,1,1,0|-421940,26,8,1|-3qveg1,26,8,1|-3qveg0,1,1,0|-3iy7s1,1,1,0|-3iy7s0,26,8,1|-385bs1,26,8,1|-385bs0,1,1,0|-30l3s1,1,1,0|-30l3s0,26,8,1|-2pf941,26,8,1|-2pf940,1,1,0|-2hv141,1,1,0|-2hv140,26,8,1|-26p6g1,26,8,1|-26p6g0,1,1,0|-1z4yg1,1,1,0|-1z4yg0,26,8,1|-1nz3s1,26,8,1|-1nz3s0,1,1,0|-1gevs1,1,1,0|-1gevs0,26,8,1|-14w2g1,26,8,1|-14w2g0,1,1,0|-z4ns1,1,1,0|-z4ns0,26,8,1|-m6841,26,8,1|-m6840,26,8,0|yd6vz,26,8,0|yd6w0,1,1,0|15kg7z,1,1,0|15kg80,26,8,1|1h39jz,26,8,1|1h39k0,1,1,0|1oaivz,1,1,0|1oaiw0,26,8,1|1ztc7z,26,8,1|1ztc80,1,1,0|270ljz,1,1,0|270lk0,26,8,1|2ijevz,26,8,1|2ijew0,1,1,0|2pqo7z,1,1,0|2pqo80,26,8,1|319hjz,26,8,1|319hk0,1,1,0|38tpjz,1,1,0|38tpk0,26,8,1|3jzk7z,26,8,1|3jzk80,1,1,0|3rjs7z,1,1,0|3rjs80,26,8,1|42pmvz,26,8,1|42pmw0,1,1,0|4a9uvz,1,1,0|4a9uw0,26,8,1|4lso7z,26,8,1|4lso80,1,1,0|4szxjz,1,1,0|4szxk0,26,8,1|54iqvz,26,8,1|54iqw0,1,1,0|5bq07z,1,1,0|5bq080,26,8,1|5n8tjz,26,8,1|5n8tk0,1,1,0|5v5xfz,1,1,0|5v5xg0,26,8,1|65ytfz,26,8,1|65ytg0,1,1,0|6dw03z,1,1,0|6dw040,26,8,1|6oow3z,26,8,1|6oow40,1,1,0|6wm2rz,1,1,0|6wm2s0,26,8,1|77eyrz,26,8,1|77eys0,1,1,0|7fc5fz,1,1,0|7fc5g0,26,8,1|7qi03z,26,8,1|7qi040,1,1,0|7yf6rz,1,1,0|7yf6s0,26,8,1|8982rz,26,8,1|8982s0,1,1,0|8h59fz,1,1,0|8h59g0,26,8,1|8ry5fz,26,8,1|8ry5g0,1,1,0|8zvc3z,1,1,0|8zvc40,26,8,1|9ao83z,26,8,1|9ao840,1,1,0|9ilerz,1,1,0|9iles0,26,8,1|9tearz,26,8,1|9teas0,1,1,0|a1bhfz,1,1,0|a1bhg0,26,8,1|achc3z,26,8,1|achc40,1,1,0|ak1k3z,1,1,0|ak1k40,26,8,1|av7erz,26,8,1|av7es0,1,1,0|b34lfz,1,1,0|b34lg0,26,8,1|bdxhfz,26,8,1|bdxhg0,1,1,0|bluo3z,1,1,0|bluo40,26,8,1|bwnk3z,26,8,1|bwnk40,1,1,0|c4kqrz,1,1,0|c4kqs0,26,8,1|cfdmrz,26,8,1|cfdms0,1,1,0|cnatfz,1,1,0|cnatg0,26,8,1|cy3pfz,26,8,1|cy3pg0,1,1,0|d60w3z,1,1,0|d60w40,26,8,1|dgts3z,26,8,1|dgts40,1,1,0|dp3xfz,1,1,0|dp3xg0,26,8,1|dzwtfz,26,8,1|dzwtg0,1,1,0|e7u03z,1,1,0|e7u040,26,8,1|eimw3z,26,8,1|eimw40,1,1,0|eqk2rz,1,1,0|eqk2s0,26,8,1|f1cyrz,26,8,1|f1cys0,1,1,0|f9a5fz,1,1,0|f9a5g0,26,8,1|fkg03z,26,8,1|fkg040,1,1,0|fs083z,1,1,0|fs0840,26,8,1|g362rz,26,8,1|g362s0,1,1,0|gaqarz,1,1,0|gaqas0,26,8,1|glw5fz,26,8,1|glw5g0,1,1,0|gttc3z,1,1,0|gttc40,26,8,1|h4m83z,26,8,1|h4m840,1,1,0|hcjerz,1,1,0|hcjes0,26,8,1|hncarz,26,8,1|hncas0,1,1,0|hv9hfz,1,1,0|hv9hg0,26,8,1|i6fc3z,26,8,1|i6fc40,1,1,0|idzk3z,1,1,0|idzk40,26,8,1|ip5erz,26,8,1|ip5es0,1,1,0|iwpmrz,1,1,0|iwpms0,26,8,1|j7vhfz,26,8,1|j7vhg0,1,1,0|jffpfz,1,1,0|jffpg0,26,8,1|jqlk3z,26,8,1|jqlk40,1,1,0|jyiqrz,1,1,0|jyiqs0,26,8,1|k9bmrz,26,8,1|k9bms0,1,1,0|kh8tfz,1,1,0|kh8tg0,26,8,1|ks1pfz,26,8,1|ks1pg0,1,1,0|kzyw3z,1,1,0|kzyw40,26,8,1|lb4qrz,26,8,1|lb4qs0,1,1,0|lioyrz,1,1,0|lioys0,26,8,1|ltutfz,26,8,1|ltutg0,1,1,0|m1f1fz,1,1,0|m1f1g0,26,8,1|mckw3z,26,8,1|mckw40,1,1,0|mki2rz,1,1,0|mki2s0,26,8,1|mvayrz,26,8,1|mvays0,1,1,0|n385fz,1,1,0|n385g0,26,8,1|ne11fz,26,8,1|ne11g0,1,1,0|nly83z,1,1,0|nly840,26,8,1|nwr43z,26,8,1|nwr440,1,1,0|o4oarz,1,1,0|o4oas0,26,8,1|ofu5fz,26,8,1|ofu5g0,1,1,0|onedfz,1,1,0|onedg0,26,8,1|oyk83z,26,8,1|oyk840,1,1,0|p64g3z,1,1,0|p64g40,26,8,1|phaarz,26,8,1|phaas0,1,1,0|pp7hfz,1,1,0|pp7hg0,26,8,1|q00dfz,26,8,1|q00dg0,1,1,0|q7xk3z,1,1,0|q7xk40,26,8,1|qiqg3z,26,8,1|qiqg40,1,1,0|qqnmrz,1,1,0|qqnms0,26,8,1|r1thfz,26,8,1|r1thg0,1,1,0|r9dpfz,1,1,0|r9dpg0,26,8,1|rkjk3z,26,8,1|rkjk40,1,1,0|rs3s3z,1,1,0|rs3s40,26,8,1|s39mrz,26,8,1|s39ms0,1,1,0|sb6tfz,1,1,0|sb6tg0,26,8,1|slzpfz,26,8,1|slzpg0,1,1,0|stww3z,1,1,0|stww40,26,8,1|t4ps3z,26,8,1|t4ps40,1,1,0|tcmyrz,1,1,0|tcmys0,26,8,1|tnfurz,26,8,1|tnfus0,1,1,0|tvd1fz,1,1,0|tvd1g0,26,8,1|u6iw3z,26,8,1|u6iw40,1,1,0|ue343z,1,1,0|ue3440,26,8,1|up8yrz,26,8,1|up8ys0,1,1,0|uwt6rz,1,1,0|uwt6s0,26,8,1|v7z1fz,26,8,1|v7z1g0,1,1,0|vfw83z,1,1,0|vfw840,26,8,1|vqp43z,26,8,1|vqp440,1,1,0|vymarz,1,1,0|vymas0,26,8,1|w9f6rz,26,8,1|w9f6s0,1,1,0|whcdfz,1,1,0|whcdg0,26,8,1|wsi83z,26,8,1|wsi840,1,1,0|x02g3z,1,1,0|x02g40,26,8,1|xb8arz,26,8,1|xb8as0,1,1,0|xisirz,1,1,0|xisis0,26,8,1|xtydfz,26,8,1|xtydg0,1,1,0|y1ilfz,1,1,0|y1ilg0,26,8,1|ycog3z,26,8,1|ycog40,1,1,0|yklmrz,1,1,0|yklms0,26,8,1|yveirz,26,8,1|yveis0,1,1,0|z3bpfz,1,1,0|z3bpg0,26,8,1|ze4lfz,26,8,1|ze4lg0,1,1,0|zm1s3z,1,1,0|zm1s40,26,8,1|zx7mrz,26,8,1|zx7ms0,1,1,0|104rurz,1,1,0|104rus0,26,8,1|10fxpfz,26,8,1|10fxpg0,1,1,0|10nhxfz,1,1,0|10nhxg0,26,8,1|10yns3z,26,8,1|10yns40,1,1,0|116kyrz,1,1,0|116kys0,26,8,1|11hdurz,26,8,1|11hdus0,1,1,0|11pb1fz,1,1,0|11pb1g0,26,8,1|1203xfz,26,8,1|1203xg0,1,1,0|128143z,1,1,0|1281440,26,8,1|12iu03z,26,8,1|12iu040,1,1,0|12qr6rz,1,1,0|12qr6s0,26,8,1|131x1fz,26,8,1|131x1g0,1,1,0|139h9fz,1,1,0|139h9g0,26,8,1|13kn43z,26,8,1|13kn440,1,1,0|13s7c3z,1,1,0|13s7c40,26,8,1|143d6rz,26,8,1|143d6s0,1,1,0|14badfz,1,1,0|14badg0,26,8,1|14m39fz,26,8,1|14m39g0,1,1,0|14u0g3z,1,1,0|14u0g40,26,8,1|154tc3z,26,8,1|154tc40,1,1,0|15cqirz,1,1,0|15cqis0,26,8,1|15nwdfz,26,8,1|15nwdg0,1,1,0|15vglfz,1,1,0|15vglg0,26,8,1|166mg3z,26,8,1|166mg40,1,1,0|16e6o3z,1,1,0|16e6o40,26,8,1|16pcirz,26,8,1|16pcis0,1,1,0|16x9pfz,1,1,0|16x9pg0,26,8,1|1782lfz,26,8,1|1782lg0,1,1,0|17fzs3z,1,1,0|17fzs40,26,8,1|17qso3z,26,8,1|17qso40,1,1,0|17ypurz,1,1,0|17ypus0,26,8,1|189iqrz,26,8,1|189iqs0,1,1,0|18hfxfz,1,1,0|18hfxg0,26,8,1|18sls3z,26,8,1|18sls40,1,1,0|190603z,1,1,0|1906040,26,8,1|19bburz,26,8,1|19bbus0,1,1,0|19iw2rz,1,1,0|19iw2s0,26,8,1|19u1xfz,26,8,1|19u1xg0,1,1,0|1a1z43z,1,1,0|1a1z440,26,8,1|1acs03z,26,8,1|1acs040,1,1,0|1akp6rz,1,1,0|1akp6s0,26,8,1|1avi2rz,26,8,1|1avi2s0,1,1,0|1b3f9fz,1,1,0|1b3f9g0,26,8,1|1bel43z,26,8,1|1bel440,1,1,0|1bm5c3z,1,1,0|1bm5c40,26,8,1|1bxb6rz,26,8,1|1bxb6s0,1,1,0|1c4verz,1,1,0|1c4ves0,26,8,1|1cg19fz,26,8,1|1cg19g0,1,1,0|1cnlhfz,1,1,0|1cnlhg0,26,8,1|1cyrc3z,26,8,1|1cyrc40,1,1,0|1d6oirz,1,1,0|1d6ois0,26,8,1|1dhherz,26,8,1|1dhhes0,1,1,0|1dpelfz,1,1,0|1dpelg0,26,8,1|1e07hfz,26,8,1|1e07hg0,1,1,0|1e84o3z,1,1,0|1e84o40,26,8,1|1ejairz,26,8,1|1ejais0,1,1,0|1equqrz,1,1,0|1equqs0,26,8,1|1f20lfz,26,8,1|1f20lg0,1,1,0|1f9ktfz,1,1,0|1f9ktg0,26,8,1|1fkqo3z,26,8,1|1fkqo40,1,1,0|1fsnurz,1,1,0|1fsnus0,26,8,1|1g3gqrz,26,8,1|1g3gqs0,1,1,0|1gbdxfz,1,1,0|1gbdxg0,26,8,1|1gm6tfz,26,8,1|1gm6tg0,1,1,0|1gu403z,1,1,0|1gu4040,26,8,1|1h4ww3z,26,8,1|1h4ww40,1,1,0|1hcu2rz,1,1,0|1hcu2s0,26,8,1|1hnzxfz,26,8,1|1hnzxg0,1,1,0|1hvk5fz,1,1,0|1hvk5g0,26,8,1|1i6q03z,26,8,1|1i6q040,1,1,0|1iea83z,1,1,0|1iea840,26,8,1|1ipg2rz,26,8,1|1ipg2s0,1,1,0|1ixd9fz,1,1,0|1ixd9g0,26,8,1|1j865fz,26,8,1|1j865g0,1,1,0|1jg3c3z,1,1,0|1jg3c40,26,8,1|1jqw83z,26,8,1|1jqw840,1,1,0|1jyterz,1,1,0|1jytes0,26,8,1|1k9z9fz,26,8,1|1k9z9g0,1,1,0|1khjhfz,1,1,0|1khjhg0,26,8,1|1kspc3z,26,8,1|1kspc40,1,1,0|1l09k3z,1,1,0|1l09k40,26,8,1|1lbferz,26,8,1|1lbfes0,1,1,0|1ljclfz,1,1,0|1ljclg0,26,8,1|1lu5hfz,26,8,1|1lu5hg0,1,1,0|1m22o3z,1,1,0|1m22o40,26,8,1|1mcvk3z,26,8,1|1mcvk40,1,1,0|1mksqrz,1,1,0|1mksqs0,26,8,1|1mvlmrz,26,8,1|1mvlms0,1,1,0|1n3itfz,1,1,0|1n3itg0,26,8,1|1neoo3z,26,8,1|1neoo40,1,1,0|1nm8w3z,1,1,0|1nm8w40,26,8,1|1nxeqrz,26,8,1|1nxeqs0,1,1,0|1o4yyrz,1,1,0|1o4yys0,26,8,1|1og4tfz,26,8,1|1og4tg0,1,1,0|1oo203z,1,1,0|1oo2040,26,8,1|1oyuw3z,26,8,1|1oyuw40,1,1,0|1p6s2rz,1,1,0|1p6s2s0,26,8,1|1phkyrz,26,8,1|1phkys0,1,1,0|1ppi5fz,1,1,0|1ppi5g0,26,8,1|1q0o03z,26,8,1|1q0o040,1,1,0|1q8883z,1,1,0|1q88840,26,8,1|1qje2rz,26,8,1|1qje2s0,1,1,0|1qqyarz,1,1,0|1qqyas0,26,8,1|1r245fz,26,8,1|1r245g0,1,1,0|1r9odfz,1,1,0|1r9odg0,26,8,1|1rku83z,26,8,1|1rku840,1,1,0|1rsrerz,1,1,0|1rsres0,26,8,1|1s3karz,26,8,1|1s3kas0,1,1,0|1sbhhfz,1,1,0|1sbhhg0,26,8,1|1smadfz,26,8,1|1smadg0,1,1,0|1su7k3z,1,1,0|1su7k40,26,8,1|1t5derz,26,8,1|1t5des0,1,1,0|1tcxmrz,1,1,0|1tcxms0,26,8,1|1to3hfz,26,8,1|1to3hg0,1,1,0|1tvnpfz,1,1,0|1tvnpg0,26,8,1|1u6tk3z,26,8,1|1u6tk40,1,1,0|1ueqqrz,1,1,0|1ueqqs0,26,8,1|1upjmrz,26,8,1|1upjms0,1,1,0|1uxgtfz,1,1,0|1uxgtg0,26,8,1|1v89pfz,26,8,1|1v89pg0,1,1,0|1vg6w3z,1,1,0|1vg6w40,26,8,1|1vqzs3z,26,8,1|1vqzs40,1,1,0|NaN,1,1,0\",\"Europe/Kaliningrad|,0,327,0|-14212gp,0,327,0|-14212go,8,8,0|-s0e081,8,8,0|-s0e080,9,9,1|-rsilg1,9,9,1|-rsilg0,8,8,0|-ridmk1,8,8,0|-ridmk0,9,9,1|-ragfw1,9,9,1|-ragfw0,8,8,0|-qznjw1,8,8,0|-qznjw0,9,9,1|-qrqd81,9,9,1|-qrqd80,8,8,0|-fizzw1,8,8,0|-fizzw0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6dp81,9,9,1|-d6dp80,8,8,0|-cx0nw1,8,8,0|-cx0nw0,9,9,1|-cwm2w1,9,9,1|-cwm2w0,14,9,0|-cvmw81,14,9,0|-cvmw80,15,4,1|-cm2j01,15,4,1|-cm2j00,14,9,0|-cdzpk1,14,9,0|-cdzpk0,149,4,0|5vb6bz,149,4,0|5vb6c0,150,203,1|64pzjz,150,203,1|64pzk0,149,4,0|6e33nz,149,4,0|6e33o0,150,203,1|6nhwvz,150,203,1|6nhww0,149,4,0|6wv0zz,149,4,0|6wv100,150,203,1|769u7z,150,203,1|769u80,149,4,0|7foszz,149,4,0|7fot00,150,203,1|7p1zvz,150,203,1|7p1zw0,149,4,0|7yf17z,149,4,0|7yf180,150,203,1|87s2jz,150,203,1|87s2k0,149,4,0|8h53vz,149,4,0|8h53w0,150,203,1|8qi57z,150,203,1|8qi580,149,4,0|8zv6jz,149,4,0|8zv6k0,150,203,1|9987vz,150,203,1|9987w0,149,4,0|9il97z,149,4,0|9il980,150,203,1|9ryajz,150,203,1|9ryak0,149,4,0|a1bbvz,149,4,0|a1bbw0,15,4,1|aaofzz,15,4,1|aaog00,14,9,0|ak1hbz,14,9,0|ak1hc0,15,4,1|atrhbz,15,4,1|atrhc0,14,9,0|b34inz,14,9,0|b34io0,15,4,1|bchjzz,15,4,1|bchk00,14,9,0|blulbz,14,9,0|blulc0,15,4,1|bv7mnz,15,4,1|bv7mo0,14,9,0|c4knzz,14,9,0|c4ko00,15,4,1|cdxpbz,15,4,1|cdxpc0,14,9,0|cnaqnz,14,9,0|cnaqo0,15,4,1|cwnrzz,15,4,1|cwns00,14,9,0|d60tbz,14,9,0|d60tc0,15,4,1|dfdunz,15,4,1|dfduo0,14,9,0|dp3unz,14,9,0|dp3uo0,15,4,1|dzwqnz,15,4,1|dzwqo0,14,9,0|e7txbz,14,9,0|e7txc0,15,4,1|eimtbz,15,4,1|eimtc0,14,9,0|eqjzzz,14,9,0|eqk000,15,4,1|f1cvzz,15,4,1|f1cw00,14,9,0|f9a2nz,14,9,0|f9a2o0,15,4,1|fkfxbz,15,4,1|fkfxc0,14,9,0|fs05bz,14,9,0|fs05c0,15,4,1|g35zzz,15,4,1|g36000,14,9,0|gaq7zz,14,9,0|gaq800,15,4,1|glw2nz,15,4,1|glw2o0,14,9,0|gtt9bz,14,9,0|gtt9c0,15,4,1|h4m5bz,15,4,1|h4m5c0,14,9,0|hcjbzz,14,9,0|hcjc00,15,4,1|hnc7zz,15,4,1|hnc800,14,9,0|hv9enz,14,9,0|hv9eo0,15,4,1|i6f9bz,15,4,1|i6f9c0,14,9,0|idzhbz,14,9,0|idzhc0,15,4,1|ip5bzz,15,4,1|ip5c00,14,9,0|iwpjzz,14,9,0|iwpk00,15,4,1|j7venz,15,4,1|j7veo0,14,9,0|jffmnz,14,9,0|jffmo0,15,4,1|jqlhbz,15,4,1|jqlhc0,14,9,0|jyinzz,14,9,0|jyio00,15,4,1|k9bjzz,15,4,1|k9bk00,14,9,0|kh8qnz,14,9,0|kh8qo0,15,4,1|ks1mnz,15,4,1|ks1mo0,14,9,0|kzytbz,14,9,0|kzytc0,15,4,1|lb4nzz,15,4,1|lb4o00,14,9,0|liovzz,14,9,0|liow00,100,4,0|ne0vvz,100,4,0|ne0vw0,14,9,0|NaN,14,9,0\",\"Europe/Kiev|,0,346,0|-1ayy8bh,0,346,0|-1ayy8bg,74,346,0|-nu11nh,74,346,0|-nu11ng,14,9,0|-kmr1k1,14,9,0|-kmr1k0,149,4,0|-erdv01,149,4,0|-erdv00,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dnetg1,8,8,0|-dnetg0,149,4,0|5vb6bz,149,4,0|5vb6c0,150,203,1|64pzjz,150,203,1|64pzk0,149,4,0|6e33nz,149,4,0|6e33o0,150,203,1|6nhwvz,150,203,1|6nhww0,149,4,0|6wv0zz,149,4,0|6wv100,150,203,1|769u7z,150,203,1|769u80,149,4,0|7foszz,149,4,0|7fot00,150,203,1|7p1zvz,150,203,1|7p1zw0,149,4,0|7yf17z,149,4,0|7yf180,150,203,1|87s2jz,150,203,1|87s2k0,149,4,0|8h53vz,149,4,0|8h53w0,150,203,1|8qi57z,150,203,1|8qi580,149,4,0|8zv6jz,149,4,0|8zv6k0,150,203,1|9987vz,150,203,1|9987w0,149,4,0|9il97z,149,4,0|9il980,150,203,1|9ryajz,150,203,1|9ryak0,149,4,0|a1bbvz,149,4,0|a1bbw0,150,203,1|aaod7z,150,203,1|aaod80,149,4,0|ak1ejz,149,4,0|ak1ek0,150,203,1|ap2t3z,150,203,1|ap2t40,15,4,1|bchjzz,15,4,1|bchk00,14,9,0|blufrz,14,9,0|blufs0,15,4,1|bv7ebz,15,4,1|bv7ec0,14,9,0|c4kifz,14,9,0|c4kig0,15,4,1|cdxgzz,15,4,1|cdxh00,14,9,0|cnal3z,14,9,0|cnal40,15,4,1|cwnjnz,15,4,1|cwnjo0,14,9,0|d60w3z,14,9,0|d60w40,15,4,1|dfdxfz,15,4,1|dfdxg0,14,9,0|dp3xfz,14,9,0|dp3xg0,15,4,1|dzwtfz,15,4,1|dzwtg0,14,9,0|e7u03z,14,9,0|e7u040,15,4,1|eimw3z,15,4,1|eimw40,14,9,0|eqk2rz,14,9,0|eqk2s0,15,4,1|f1cyrz,15,4,1|f1cys0,14,9,0|f9a5fz,14,9,0|f9a5g0,15,4,1|fkg03z,15,4,1|fkg040,14,9,0|fs083z,14,9,0|fs0840,15,4,1|g362rz,15,4,1|g362s0,14,9,0|gaqarz,14,9,0|gaqas0,15,4,1|glw5fz,15,4,1|glw5g0,14,9,0|gttc3z,14,9,0|gttc40,15,4,1|h4m83z,15,4,1|h4m840,14,9,0|hcjerz,14,9,0|hcjes0,15,4,1|hncarz,15,4,1|hncas0,14,9,0|hv9hfz,14,9,0|hv9hg0,15,4,1|i6fc3z,15,4,1|i6fc40,14,9,0|idzk3z,14,9,0|idzk40,15,4,1|ip5erz,15,4,1|ip5es0,14,9,0|iwpmrz,14,9,0|iwpms0,15,4,1|j7vhfz,15,4,1|j7vhg0,14,9,0|jffpfz,14,9,0|jffpg0,15,4,1|jqlk3z,15,4,1|jqlk40,14,9,0|jyiqrz,14,9,0|jyiqs0,15,4,1|k9bmrz,15,4,1|k9bms0,14,9,0|kh8tfz,14,9,0|kh8tg0,15,4,1|ks1pfz,15,4,1|ks1pg0,14,9,0|kzyw3z,14,9,0|kzyw40,15,4,1|lb4qrz,15,4,1|lb4qs0,14,9,0|lioyrz,14,9,0|lioys0,15,4,1|ltutfz,15,4,1|ltutg0,14,9,0|m1f1fz,14,9,0|m1f1g0,15,4,1|mckw3z,15,4,1|mckw40,14,9,0|mki2rz,14,9,0|mki2s0,15,4,1|mvayrz,15,4,1|mvays0,14,9,0|n385fz,14,9,0|n385g0,15,4,1|ne11fz,15,4,1|ne11g0,14,9,0|nly83z,14,9,0|nly840,15,4,1|nwr43z,15,4,1|nwr440,14,9,0|o4oarz,14,9,0|o4oas0,15,4,1|ofu5fz,15,4,1|ofu5g0,14,9,0|onedfz,14,9,0|onedg0,15,4,1|oyk83z,15,4,1|oyk840,14,9,0|p64g3z,14,9,0|p64g40,15,4,1|phaarz,15,4,1|phaas0,14,9,0|pp7hfz,14,9,0|pp7hg0,15,4,1|q00dfz,15,4,1|q00dg0,14,9,0|q7xk3z,14,9,0|q7xk40,15,4,1|qiqg3z,15,4,1|qiqg40,14,9,0|qqnmrz,14,9,0|qqnms0,15,4,1|r1thfz,15,4,1|r1thg0,14,9,0|r9dpfz,14,9,0|r9dpg0,15,4,1|rkjk3z,15,4,1|rkjk40,14,9,0|rs3s3z,14,9,0|rs3s40,15,4,1|s39mrz,15,4,1|s39ms0,14,9,0|sb6tfz,14,9,0|sb6tg0,15,4,1|slzpfz,15,4,1|slzpg0,14,9,0|stww3z,14,9,0|stww40,15,4,1|t4ps3z,15,4,1|t4ps40,14,9,0|tcmyrz,14,9,0|tcmys0,15,4,1|tnfurz,15,4,1|tnfus0,14,9,0|tvd1fz,14,9,0|tvd1g0,15,4,1|u6iw3z,15,4,1|u6iw40,14,9,0|ue343z,14,9,0|ue3440,15,4,1|up8yrz,15,4,1|up8ys0,14,9,0|uwt6rz,14,9,0|uwt6s0,15,4,1|v7z1fz,15,4,1|v7z1g0,14,9,0|vfw83z,14,9,0|vfw840,15,4,1|vqp43z,15,4,1|vqp440,14,9,0|vymarz,14,9,0|vymas0,15,4,1|w9f6rz,15,4,1|w9f6s0,14,9,0|whcdfz,14,9,0|whcdg0,15,4,1|wsi83z,15,4,1|wsi840,14,9,0|x02g3z,14,9,0|x02g40,15,4,1|xb8arz,15,4,1|xb8as0,14,9,0|xisirz,14,9,0|xisis0,15,4,1|xtydfz,15,4,1|xtydg0,14,9,0|y1ilfz,14,9,0|y1ilg0,15,4,1|ycog3z,15,4,1|ycog40,14,9,0|yklmrz,14,9,0|yklms0,15,4,1|yveirz,15,4,1|yveis0,14,9,0|z3bpfz,14,9,0|z3bpg0,15,4,1|ze4lfz,15,4,1|ze4lg0,14,9,0|zm1s3z,14,9,0|zm1s40,15,4,1|zx7mrz,15,4,1|zx7ms0,14,9,0|104rurz,14,9,0|104rus0,15,4,1|10fxpfz,15,4,1|10fxpg0,14,9,0|10nhxfz,14,9,0|10nhxg0,15,4,1|10yns3z,15,4,1|10yns40,14,9,0|116kyrz,14,9,0|116kys0,15,4,1|11hdurz,15,4,1|11hdus0,14,9,0|11pb1fz,14,9,0|11pb1g0,15,4,1|1203xfz,15,4,1|1203xg0,14,9,0|128143z,14,9,0|1281440,15,4,1|12iu03z,15,4,1|12iu040,14,9,0|12qr6rz,14,9,0|12qr6s0,15,4,1|131x1fz,15,4,1|131x1g0,14,9,0|139h9fz,14,9,0|139h9g0,15,4,1|13kn43z,15,4,1|13kn440,14,9,0|13s7c3z,14,9,0|13s7c40,15,4,1|143d6rz,15,4,1|143d6s0,14,9,0|14badfz,14,9,0|14badg0,15,4,1|14m39fz,15,4,1|14m39g0,14,9,0|14u0g3z,14,9,0|14u0g40,15,4,1|154tc3z,15,4,1|154tc40,14,9,0|15cqirz,14,9,0|15cqis0,15,4,1|15nwdfz,15,4,1|15nwdg0,14,9,0|15vglfz,14,9,0|15vglg0,15,4,1|166mg3z,15,4,1|166mg40,14,9,0|16e6o3z,14,9,0|16e6o40,15,4,1|16pcirz,15,4,1|16pcis0,14,9,0|16x9pfz,14,9,0|16x9pg0,15,4,1|1782lfz,15,4,1|1782lg0,14,9,0|17fzs3z,14,9,0|17fzs40,15,4,1|17qso3z,15,4,1|17qso40,14,9,0|17ypurz,14,9,0|17ypus0,15,4,1|189iqrz,15,4,1|189iqs0,14,9,0|18hfxfz,14,9,0|18hfxg0,15,4,1|18sls3z,15,4,1|18sls40,14,9,0|190603z,14,9,0|1906040,15,4,1|19bburz,15,4,1|19bbus0,14,9,0|19iw2rz,14,9,0|19iw2s0,15,4,1|19u1xfz,15,4,1|19u1xg0,14,9,0|1a1z43z,14,9,0|1a1z440,15,4,1|1acs03z,15,4,1|1acs040,14,9,0|1akp6rz,14,9,0|1akp6s0,15,4,1|1avi2rz,15,4,1|1avi2s0,14,9,0|1b3f9fz,14,9,0|1b3f9g0,15,4,1|1bel43z,15,4,1|1bel440,14,9,0|1bm5c3z,14,9,0|1bm5c40,15,4,1|1bxb6rz,15,4,1|1bxb6s0,14,9,0|1c4verz,14,9,0|1c4ves0,15,4,1|1cg19fz,15,4,1|1cg19g0,14,9,0|1cnlhfz,14,9,0|1cnlhg0,15,4,1|1cyrc3z,15,4,1|1cyrc40,14,9,0|1d6oirz,14,9,0|1d6ois0,15,4,1|1dhherz,15,4,1|1dhhes0,14,9,0|1dpelfz,14,9,0|1dpelg0,15,4,1|1e07hfz,15,4,1|1e07hg0,14,9,0|1e84o3z,14,9,0|1e84o40,15,4,1|1ejairz,15,4,1|1ejais0,14,9,0|1equqrz,14,9,0|1equqs0,15,4,1|1f20lfz,15,4,1|1f20lg0,14,9,0|1f9ktfz,14,9,0|1f9ktg0,15,4,1|1fkqo3z,15,4,1|1fkqo40,14,9,0|1fsnurz,14,9,0|1fsnus0,15,4,1|1g3gqrz,15,4,1|1g3gqs0,14,9,0|1gbdxfz,14,9,0|1gbdxg0,15,4,1|1gm6tfz,15,4,1|1gm6tg0,14,9,0|1gu403z,14,9,0|1gu4040,15,4,1|1h4ww3z,15,4,1|1h4ww40,14,9,0|1hcu2rz,14,9,0|1hcu2s0,15,4,1|1hnzxfz,15,4,1|1hnzxg0,14,9,0|1hvk5fz,14,9,0|1hvk5g0,15,4,1|1i6q03z,15,4,1|1i6q040,14,9,0|1iea83z,14,9,0|1iea840,15,4,1|1ipg2rz,15,4,1|1ipg2s0,14,9,0|1ixd9fz,14,9,0|1ixd9g0,15,4,1|1j865fz,15,4,1|1j865g0,14,9,0|1jg3c3z,14,9,0|1jg3c40,15,4,1|1jqw83z,15,4,1|1jqw840,14,9,0|1jyterz,14,9,0|1jytes0,15,4,1|1k9z9fz,15,4,1|1k9z9g0,14,9,0|1khjhfz,14,9,0|1khjhg0,15,4,1|1kspc3z,15,4,1|1kspc40,14,9,0|1l09k3z,14,9,0|1l09k40,15,4,1|1lbferz,15,4,1|1lbfes0,14,9,0|1ljclfz,14,9,0|1ljclg0,15,4,1|1lu5hfz,15,4,1|1lu5hg0,14,9,0|1m22o3z,14,9,0|1m22o40,15,4,1|1mcvk3z,15,4,1|1mcvk40,14,9,0|1mksqrz,14,9,0|1mksqs0,15,4,1|1mvlmrz,15,4,1|1mvlms0,14,9,0|1n3itfz,14,9,0|1n3itg0,15,4,1|1neoo3z,15,4,1|1neoo40,14,9,0|1nm8w3z,14,9,0|1nm8w40,15,4,1|1nxeqrz,15,4,1|1nxeqs0,14,9,0|1o4yyrz,14,9,0|1o4yys0,15,4,1|1og4tfz,15,4,1|1og4tg0,14,9,0|1oo203z,14,9,0|1oo2040,15,4,1|1oyuw3z,15,4,1|1oyuw40,14,9,0|1p6s2rz,14,9,0|1p6s2s0,15,4,1|1phkyrz,15,4,1|1phkys0,14,9,0|1ppi5fz,14,9,0|1ppi5g0,15,4,1|1q0o03z,15,4,1|1q0o040,14,9,0|1q8883z,14,9,0|1q88840,15,4,1|1qje2rz,15,4,1|1qje2s0,14,9,0|1qqyarz,14,9,0|1qqyas0,15,4,1|1r245fz,15,4,1|1r245g0,14,9,0|1r9odfz,14,9,0|1r9odg0,15,4,1|1rku83z,15,4,1|1rku840,14,9,0|1rsrerz,14,9,0|1rsres0,15,4,1|1s3karz,15,4,1|1s3kas0,14,9,0|1sbhhfz,14,9,0|1sbhhg0,15,4,1|1smadfz,15,4,1|1smadg0,14,9,0|1su7k3z,14,9,0|1su7k40,15,4,1|1t5derz,15,4,1|1t5des0,14,9,0|1tcxmrz,14,9,0|1tcxms0,15,4,1|1to3hfz,15,4,1|1to3hg0,14,9,0|1tvnpfz,14,9,0|1tvnpg0,15,4,1|1u6tk3z,15,4,1|1u6tk40,14,9,0|1ueqqrz,14,9,0|1ueqqs0,15,4,1|1upjmrz,15,4,1|1upjms0,14,9,0|1uxgtfz,14,9,0|1uxgtg0,15,4,1|1v89pfz,15,4,1|1v89pg0,14,9,0|1vg6w3z,14,9,0|1vg6w40,15,4,1|1vqzs3z,15,4,1|1vqzs40,14,9,0|NaN,14,9,0\",\"Europe/Kirov|,0,347,0|-qcx401,0,347,0|-qcx400,100,4,0|-kmr4c1,100,4,0|-kmr4c0,105,203,0|5vb3jz,105,203,0|5vb3k0,91,186,1|64pwrz,91,186,1|64pws0,105,203,0|6e30vz,105,203,0|6e30w0,91,186,1|6nhu3z,91,186,1|6nhu40,105,203,0|6wuy7z,105,203,0|6wuy80,91,186,1|769rfz,91,186,1|769rg0,105,203,0|7foq7z,105,203,0|7foq80,91,186,1|7p1x3z,91,186,1|7p1x40,105,203,0|7yeyfz,105,203,0|7yeyg0,91,186,1|87rzrz,91,186,1|87rzs0,105,203,0|8h513z,105,203,0|8h5140,91,186,1|8qi2fz,91,186,1|8qi2g0,105,203,0|8zv3rz,105,203,0|8zv3s0,91,186,1|99853z,91,186,1|998540,105,203,0|9il6fz,105,203,0|9il6g0,91,186,1|9ry7rz,91,186,1|9ry7s0,105,203,0|a1b93z,105,203,0|a1b940,105,203,1|aaod7z,105,203,1|aaod80,100,4,0|ak1ejz,100,4,0|ak1ek0,105,203,1|atrejz,105,203,1|atrek0,100,4,0|b34fvz,100,4,0|b34fw0,105,203,0|blufrz,105,203,0|blufs0,105,203,1|bv7jvz,105,203,1|bv7jw0,100,4,0|c4kl7z,100,4,0|c4kl80,105,203,1|cdxmjz,105,203,1|cdxmk0,100,4,0|cnanvz,100,4,0|cnanw0,105,203,1|cwnp7z,105,203,1|cwnp80,100,4,0|d60qjz,100,4,0|d60qk0,105,203,1|dfdrvz,105,203,1|dfdrw0,100,4,0|dp3rvz,100,4,0|dp3rw0,105,203,1|dzwnvz,105,203,1|dzwnw0,100,4,0|e7tujz,100,4,0|e7tuk0,105,203,1|eimqjz,105,203,1|eimqk0,100,4,0|eqjx7z,100,4,0|eqjx80,105,203,1|f1ct7z,105,203,1|f1ct80,100,4,0|f99zvz,100,4,0|f99zw0,105,203,1|fkfujz,105,203,1|fkfuk0,100,4,0|fs02jz,100,4,0|fs02k0,105,203,1|g35x7z,105,203,1|g35x80,100,4,0|gaq57z,100,4,0|gaq580,105,203,1|glvzvz,105,203,1|glvzw0,100,4,0|gtt6jz,100,4,0|gtt6k0,105,203,1|h4m2jz,105,203,1|h4m2k0,100,4,0|hcj97z,100,4,0|hcj980,105,203,1|hnc57z,105,203,1|hnc580,100,4,0|hv9bvz,100,4,0|hv9bw0,105,203,1|i6f6jz,105,203,1|i6f6k0,100,4,0|idzejz,100,4,0|idzek0,105,203,1|ip597z,105,203,1|ip5980,100,4,0|iwph7z,100,4,0|iwph80,105,203,1|j7vbvz,105,203,1|j7vbw0,100,4,0|jffjvz,100,4,0|jffjw0,105,203,1|jqlejz,105,203,1|jqlek0,100,4,0|jyil7z,100,4,0|jyil80,105,203,1|k9bh7z,105,203,1|k9bh80,100,4,0|kh8nvz,100,4,0|kh8nw0,105,203,1|ks1jvz,105,203,1|ks1jw0,100,4,0|kzyqjz,100,4,0|kzyqk0,105,203,1|lb4l7z,105,203,1|lb4l80,100,4,0|liot7z,100,4,0|liot80,105,203,0|ne0t3z,105,203,0|ne0t40,100,4,0|NaN,100,4,0\",\"Europe/Lisbon|,0,27,0|-u9rhc1,0,27,0|-u9rhc0,6,1,0|-rxx1g1,6,1,0|-rxx1g0,7,8,1|-rqx401,7,8,1|-rqx400,6,1,0|-rkqys1,6,1,0|-rkqys0,7,8,1|-r90qs1,7,8,1|-r90qs0,6,1,0|-r1x6s1,6,1,0|-r1x6s0,7,8,1|-qq8tg1,7,8,1|-qq8tg0,6,1,0|-qj7441,6,1,0|-qj7440,7,8,1|-q7gw41,7,8,1|-q7gw40,6,1,0|-q0dc41,6,1,0|-q0dc40,7,8,1|-pon441,7,8,1|-pon440,6,1,0|-phles1,6,1,0|-phles0,7,8,1|-p5v6s1,7,8,1|-p5v6s0,6,1,0|-nusqs1,6,1,0|-nusqs0,7,8,1|-nlhk41,7,8,1|-nlhk40,6,1,0|-mt71g1,6,1,0|-mt71g0,7,8,1|-mkjxg1,7,8,1|-mkjxg0,6,1,0|-matxg1,6,1,0|-matxg0,7,8,1|-m1tus1,7,8,1|-m1tus0,6,1,0|-lrqw41,6,1,0|-lrqw40,7,8,1|-liqtg1,7,8,1|-liqtg0,6,1,0|-l8nus1,6,1,0|-l8nus0,7,8,1|-l00qs1,7,8,1|-l00qs0,6,1,0|-k77pg1,6,1,0|-k77pg0,7,8,1|-jyklg1,7,8,1|-jyklg0,6,1,0|-jp7k41,6,1,0|-jp7k40,7,8,1|-jfuis1,7,8,1|-jfuis0,6,1,0|-ineg41,6,1,0|-ineg40,7,8,1|-ie1es1,7,8,1|-ie1es0,6,1,0|-i51c41,6,1,0|-i51c40,7,8,1|-hvbc41,7,8,1|-hvbc40,6,1,0|-hl8dg1,6,1,0|-hl8dg0,7,8,1|-hcl9g1,7,8,1|-hcl9g0,6,1,0|-h38841,6,1,0|-h38840,7,8,1|-gtv6s1,7,8,1|-gtv6s0,6,1,0|-gkv441,6,1,0|-gkv440,7,8,1|-gb5441,7,8,1|-gb5440,6,1,0|-g125g1,6,1,0|-g125g0,7,8,1|-fpwas1,7,8,1|-fpwas0,6,1,0|-fkutg1,6,1,0|-fkutg0,7,8,1|-f9c041,7,8,1|-f9c040,6,1,0|-ezyys1,6,1,0|-ezyys0,7,8,1|-eqk2s1,7,8,1|-eqk2s0,6,1,0|-eibs41,6,1,0|-eibs40,7,8,1|-eg62w1,7,8,1|-eg62w0,153,9,1|-eaeo81,153,9,1|-eaeo80,7,8,1|-e6sys1,7,8,1|-e6sys0,6,1,0|-dzlpg1,6,1,0|-dzlpg0,7,8,1|-dxsyw1,7,8,1|-dxsyw0,153,9,1|-dqyo81,153,9,1|-dqyo80,7,8,1|-dnpxg1,7,8,1|-dnpxg0,6,1,0|-dgvms1,6,1,0|-dgvms0,7,8,1|-depxk1,7,8,1|-depxk0,153,9,1|-d88lk1,153,9,1|-d88lk0,7,8,1|-d4zus1,7,8,1|-d4zus0,6,1,0|-cy5k41,6,1,0|-cy5k40,7,8,1|-cvzuw1,7,8,1|-cvzuw0,153,9,1|-cpiiw1,153,9,1|-cpiiw0,7,8,1|-cm9s41,7,8,1|-cm9s40,6,1,0|-cdzms1,6,1,0|-cdzms0,7,8,1|-c4mlg1,7,8,1|-c4mlg0,6,1,0|-bv9bs1,6,1,0|-bv9bs0,7,8,1|-blwag1,7,8,1|-blwag0,6,1,0|-bcj941,6,1,0|-bcj940,7,8,1|-b367s1,7,8,1|-b367s0,6,1,0|-att6g1,6,1,0|-att6g0,7,8,1|-akg541,7,8,1|-akg540,6,1,0|-ab33s1,6,1,0|-ab33s0,7,8,1|-a1q2g1,7,8,1|-a1q2g0,6,1,0|-9sd141,6,1,0|-9sd140,7,8,1|-9in141,7,8,1|-9in140,6,1,0|-999zs1,6,1,0|-999zs0,7,8,1|-8zwyg1,7,8,1|-8zwyg0,6,1,0|-8qjx41,6,1,0|-8qjx40,7,8,1|-8h6vs1,7,8,1|-8h6vs0,6,1,0|-87tug1,6,1,0|-87tug0,7,8,1|-7ygt41,7,8,1|-7ygt40,6,1,0|-7p3rs1,6,1,0|-7p3rs0,7,8,1|-7fqqg1,7,8,1|-7fqqg0,6,1,0|-76dp41,6,1,0|-76dp40,7,8,1|-6wnp41,7,8,1|-6wnp40,6,1,0|-6nans1,6,1,0|-6nans0,7,8,1|-6dxmg1,7,8,1|-6dxmg0,6,1,0|-64kl41,6,1,0|-64kl40,7,8,1|-5v7js1,7,8,1|-5v7js0,6,1,0|-5luig1,6,1,0|-5luig0,7,8,1|-5chh41,7,8,1|-5chh40,6,1,0|-534fs1,6,1,0|-534fs0,7,8,1|-4treg1,7,8,1|-4treg0,6,1,0|-4ked41,6,1,0|-4ked40,7,8,1|-4b1bs1,7,8,1|-4b1bs0,6,1,0|-41oag1,6,1,0|-41oag0,7,8,1|-3ryag1,7,8,1|-3ryag0,6,1,0|-3il941,6,1,0|-3il940,7,8,1|-3987s1,7,8,1|-3987s0,6,1,0|-2zv6g1,6,1,0|-2zv6g0,7,8,1|-2qi541,7,8,1|-2qi540,6,1,0|-2h53s1,6,1,0|-2h53s0,7,8,1|-27s2g1,7,8,1|-27s2g0,6,1,0|-1yf141,6,1,0|-1yf140,8,8,0|3ijjzz,8,8,0|3ijk00,6,1,0|3rwlbz,6,1,0|3rwlc0,7,8,1|419mnz,7,8,1|419mo0,6,1,0|4azmnz,6,1,0|4azmo0,7,8,1|4kcnzz,7,8,1|4kco00,6,1,0|4tppbz,6,1,0|4tppc0,7,8,1|532tfz,7,8,1|532tg0,6,1,0|5cfrzz,6,1,0|5cfs00,7,8,1|5lsw3z,7,8,1|5lsw40,6,1,0|5v5xfz,6,1,0|5v5xg0,7,8,1|64iyrz,7,8,1|64iys0,6,1,0|6dw03z,6,1,0|6dw040,7,8,1|6n91fz,7,8,1|6n91g0,6,1,0|6wm5jz,6,1,0|6wm5k0,7,8,1|75z43z,7,8,1|75z440,6,1,0|7fc5fz,6,1,0|7fc5g0,7,8,1|7p25fz,7,8,1|7p25g0,6,1,0|7yf6rz,6,1,0|7yf6s0,7,8,1|87s83z,7,8,1|87s840,6,1,0|8h59fz,6,1,0|8h59g0,7,8,1|8qiarz,7,8,1|8qias0,6,1,0|8zvc3z,6,1,0|8zvc40,7,8,1|998dfz,7,8,1|998dg0,6,1,0|9ilerz,6,1,0|9iles0,7,8,1|9ryg3z,7,8,1|9ryg40,6,1,0|a1bhfz,6,1,0|a1bhg0,7,8,1|aaoirz,7,8,1|aaois0,6,1,0|ak1k3z,6,1,0|ak1k40,7,8,1|atrk3z,7,8,1|atrk40,6,1,0|b34lfz,6,1,0|b34lg0,7,8,1|bchmrz,7,8,1|bchms0,6,1,0|bluo3z,6,1,0|bluo40,7,8,1|bv7pfz,7,8,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,7,8,1|dzwtfz,7,8,1|dzwtg0,6,1,0|e7u03z,6,1,0|e7u040,7,8,1|eimw3z,7,8,1|eimw40,6,1,0|eqk2rz,6,1,0|eqk2s0,7,8,1|f1cyrz,7,8,1|f1cys0,6,1,0|f9a5fz,6,1,0|f9a5g0,7,8,1|fkg03z,7,8,1|fkg040,6,1,0|fs083z,6,1,0|fs0840,7,8,1|g362rz,7,8,1|g362s0,6,1,0|gaqarz,6,1,0|gaqas0,7,8,1|glw5fz,7,8,1|glw5g0,6,1,0|gttc3z,6,1,0|gttc40,7,8,1|h4m83z,7,8,1|h4m840,6,1,0|hcjerz,6,1,0|hcjes0,7,8,1|hncarz,7,8,1|hncas0,6,1,0|hv9hfz,6,1,0|hv9hg0,7,8,1|i6fc3z,7,8,1|i6fc40,6,1,0|idzk3z,6,1,0|idzk40,7,8,1|ip5erz,7,8,1|ip5es0,6,1,0|iwpmrz,6,1,0|iwpms0,7,8,1|j7vhfz,7,8,1|j7vhg0,6,1,0|jffpfz,6,1,0|jffpg0,7,8,1|jqlk3z,7,8,1|jqlk40,6,1,0|jyiqrz,6,1,0|jyiqs0,7,8,1|k9bmrz,7,8,1|k9bms0,6,1,0|kh8tfz,6,1,0|kh8tg0,7,8,1|ks1pfz,7,8,1|ks1pg0,6,1,0|kzyw3z,6,1,0|kzyw40,7,8,1|lb4qrz,7,8,1|lb4qs0,6,1,0|lioyrz,6,1,0|lioys0,7,8,1|ltutfz,7,8,1|ltutg0,6,1,0|m1f1fz,6,1,0|m1f1g0,7,8,1|mckw3z,7,8,1|mckw40,6,1,0|mki2rz,6,1,0|mki2s0,7,8,1|mvayrz,7,8,1|mvays0,6,1,0|n385fz,6,1,0|n385g0,7,8,1|ne11fz,7,8,1|ne11g0,6,1,0|nly83z,6,1,0|nly840,7,8,1|nwr43z,7,8,1|nwr440,6,1,0|o4oarz,6,1,0|o4oas0,7,8,1|ofu5fz,7,8,1|ofu5g0,6,1,0|onedfz,6,1,0|onedg0,7,8,1|oyk83z,7,8,1|oyk840,6,1,0|p64g3z,6,1,0|p64g40,7,8,1|phaarz,7,8,1|phaas0,6,1,0|pp7hfz,6,1,0|pp7hg0,7,8,1|q00dfz,7,8,1|q00dg0,6,1,0|q7xk3z,6,1,0|q7xk40,7,8,1|qiqg3z,7,8,1|qiqg40,6,1,0|qqnmrz,6,1,0|qqnms0,7,8,1|r1thfz,7,8,1|r1thg0,6,1,0|r9dpfz,6,1,0|r9dpg0,7,8,1|rkjk3z,7,8,1|rkjk40,6,1,0|rs3s3z,6,1,0|rs3s40,7,8,1|s39mrz,7,8,1|s39ms0,6,1,0|sb6tfz,6,1,0|sb6tg0,7,8,1|slzpfz,7,8,1|slzpg0,6,1,0|stww3z,6,1,0|stww40,7,8,1|t4ps3z,7,8,1|t4ps40,6,1,0|tcmyrz,6,1,0|tcmys0,7,8,1|tnfurz,7,8,1|tnfus0,6,1,0|tvd1fz,6,1,0|tvd1g0,7,8,1|u6iw3z,7,8,1|u6iw40,6,1,0|ue343z,6,1,0|ue3440,7,8,1|up8yrz,7,8,1|up8ys0,6,1,0|uwt6rz,6,1,0|uwt6s0,7,8,1|v7z1fz,7,8,1|v7z1g0,6,1,0|vfw83z,6,1,0|vfw840,7,8,1|vqp43z,7,8,1|vqp440,6,1,0|vymarz,6,1,0|vymas0,7,8,1|w9f6rz,7,8,1|w9f6s0,6,1,0|whcdfz,6,1,0|whcdg0,7,8,1|wsi83z,7,8,1|wsi840,6,1,0|x02g3z,6,1,0|x02g40,7,8,1|xb8arz,7,8,1|xb8as0,6,1,0|xisirz,6,1,0|xisis0,7,8,1|xtydfz,7,8,1|xtydg0,6,1,0|y1ilfz,6,1,0|y1ilg0,7,8,1|ycog3z,7,8,1|ycog40,6,1,0|yklmrz,6,1,0|yklms0,7,8,1|yveirz,7,8,1|yveis0,6,1,0|z3bpfz,6,1,0|z3bpg0,7,8,1|ze4lfz,7,8,1|ze4lg0,6,1,0|zm1s3z,6,1,0|zm1s40,7,8,1|zx7mrz,7,8,1|zx7ms0,6,1,0|104rurz,6,1,0|104rus0,7,8,1|10fxpfz,7,8,1|10fxpg0,6,1,0|10nhxfz,6,1,0|10nhxg0,7,8,1|10yns3z,7,8,1|10yns40,6,1,0|116kyrz,6,1,0|116kys0,7,8,1|11hdurz,7,8,1|11hdus0,6,1,0|11pb1fz,6,1,0|11pb1g0,7,8,1|1203xfz,7,8,1|1203xg0,6,1,0|128143z,6,1,0|1281440,7,8,1|12iu03z,7,8,1|12iu040,6,1,0|12qr6rz,6,1,0|12qr6s0,7,8,1|131x1fz,7,8,1|131x1g0,6,1,0|139h9fz,6,1,0|139h9g0,7,8,1|13kn43z,7,8,1|13kn440,6,1,0|13s7c3z,6,1,0|13s7c40,7,8,1|143d6rz,7,8,1|143d6s0,6,1,0|14badfz,6,1,0|14badg0,7,8,1|14m39fz,7,8,1|14m39g0,6,1,0|14u0g3z,6,1,0|14u0g40,7,8,1|154tc3z,7,8,1|154tc40,6,1,0|15cqirz,6,1,0|15cqis0,7,8,1|15nwdfz,7,8,1|15nwdg0,6,1,0|15vglfz,6,1,0|15vglg0,7,8,1|166mg3z,7,8,1|166mg40,6,1,0|16e6o3z,6,1,0|16e6o40,7,8,1|16pcirz,7,8,1|16pcis0,6,1,0|16x9pfz,6,1,0|16x9pg0,7,8,1|1782lfz,7,8,1|1782lg0,6,1,0|17fzs3z,6,1,0|17fzs40,7,8,1|17qso3z,7,8,1|17qso40,6,1,0|17ypurz,6,1,0|17ypus0,7,8,1|189iqrz,7,8,1|189iqs0,6,1,0|18hfxfz,6,1,0|18hfxg0,7,8,1|18sls3z,7,8,1|18sls40,6,1,0|190603z,6,1,0|1906040,7,8,1|19bburz,7,8,1|19bbus0,6,1,0|19iw2rz,6,1,0|19iw2s0,7,8,1|19u1xfz,7,8,1|19u1xg0,6,1,0|1a1z43z,6,1,0|1a1z440,7,8,1|1acs03z,7,8,1|1acs040,6,1,0|1akp6rz,6,1,0|1akp6s0,7,8,1|1avi2rz,7,8,1|1avi2s0,6,1,0|1b3f9fz,6,1,0|1b3f9g0,7,8,1|1bel43z,7,8,1|1bel440,6,1,0|1bm5c3z,6,1,0|1bm5c40,7,8,1|1bxb6rz,7,8,1|1bxb6s0,6,1,0|1c4verz,6,1,0|1c4ves0,7,8,1|1cg19fz,7,8,1|1cg19g0,6,1,0|1cnlhfz,6,1,0|1cnlhg0,7,8,1|1cyrc3z,7,8,1|1cyrc40,6,1,0|1d6oirz,6,1,0|1d6ois0,7,8,1|1dhherz,7,8,1|1dhhes0,6,1,0|1dpelfz,6,1,0|1dpelg0,7,8,1|1e07hfz,7,8,1|1e07hg0,6,1,0|1e84o3z,6,1,0|1e84o40,7,8,1|1ejairz,7,8,1|1ejais0,6,1,0|1equqrz,6,1,0|1equqs0,7,8,1|1f20lfz,7,8,1|1f20lg0,6,1,0|1f9ktfz,6,1,0|1f9ktg0,7,8,1|1fkqo3z,7,8,1|1fkqo40,6,1,0|1fsnurz,6,1,0|1fsnus0,7,8,1|1g3gqrz,7,8,1|1g3gqs0,6,1,0|1gbdxfz,6,1,0|1gbdxg0,7,8,1|1gm6tfz,7,8,1|1gm6tg0,6,1,0|1gu403z,6,1,0|1gu4040,7,8,1|1h4ww3z,7,8,1|1h4ww40,6,1,0|1hcu2rz,6,1,0|1hcu2s0,7,8,1|1hnzxfz,7,8,1|1hnzxg0,6,1,0|1hvk5fz,6,1,0|1hvk5g0,7,8,1|1i6q03z,7,8,1|1i6q040,6,1,0|1iea83z,6,1,0|1iea840,7,8,1|1ipg2rz,7,8,1|1ipg2s0,6,1,0|1ixd9fz,6,1,0|1ixd9g0,7,8,1|1j865fz,7,8,1|1j865g0,6,1,0|1jg3c3z,6,1,0|1jg3c40,7,8,1|1jqw83z,7,8,1|1jqw840,6,1,0|1jyterz,6,1,0|1jytes0,7,8,1|1k9z9fz,7,8,1|1k9z9g0,6,1,0|1khjhfz,6,1,0|1khjhg0,7,8,1|1kspc3z,7,8,1|1kspc40,6,1,0|1l09k3z,6,1,0|1l09k40,7,8,1|1lbferz,7,8,1|1lbfes0,6,1,0|1ljclfz,6,1,0|1ljclg0,7,8,1|1lu5hfz,7,8,1|1lu5hg0,6,1,0|1m22o3z,6,1,0|1m22o40,7,8,1|1mcvk3z,7,8,1|1mcvk40,6,1,0|1mksqrz,6,1,0|1mksqs0,7,8,1|1mvlmrz,7,8,1|1mvlms0,6,1,0|1n3itfz,6,1,0|1n3itg0,7,8,1|1neoo3z,7,8,1|1neoo40,6,1,0|1nm8w3z,6,1,0|1nm8w40,7,8,1|1nxeqrz,7,8,1|1nxeqs0,6,1,0|1o4yyrz,6,1,0|1o4yys0,7,8,1|1og4tfz,7,8,1|1og4tg0,6,1,0|1oo203z,6,1,0|1oo2040,7,8,1|1oyuw3z,7,8,1|1oyuw40,6,1,0|1p6s2rz,6,1,0|1p6s2s0,7,8,1|1phkyrz,7,8,1|1phkys0,6,1,0|1ppi5fz,6,1,0|1ppi5g0,7,8,1|1q0o03z,7,8,1|1q0o040,6,1,0|1q8883z,6,1,0|1q88840,7,8,1|1qje2rz,7,8,1|1qje2s0,6,1,0|1qqyarz,6,1,0|1qqyas0,7,8,1|1r245fz,7,8,1|1r245g0,6,1,0|1r9odfz,6,1,0|1r9odg0,7,8,1|1rku83z,7,8,1|1rku840,6,1,0|1rsrerz,6,1,0|1rsres0,7,8,1|1s3karz,7,8,1|1s3kas0,6,1,0|1sbhhfz,6,1,0|1sbhhg0,7,8,1|1smadfz,7,8,1|1smadg0,6,1,0|1su7k3z,6,1,0|1su7k40,7,8,1|1t5derz,7,8,1|1t5des0,6,1,0|1tcxmrz,6,1,0|1tcxms0,7,8,1|1to3hfz,7,8,1|1to3hg0,6,1,0|1tvnpfz,6,1,0|1tvnpg0,7,8,1|1u6tk3z,7,8,1|1u6tk40,6,1,0|1ueqqrz,6,1,0|1ueqqs0,7,8,1|1upjmrz,7,8,1|1upjms0,6,1,0|1uxgtfz,6,1,0|1uxgtg0,7,8,1|1v89pfz,7,8,1|1v89pg0,6,1,0|1vg6w3z,6,1,0|1vg6w40,7,8,1|1vqzs3z,7,8,1|1vqzs40,6,1,0|NaN,6,1,0\",\"Europe/Ljubljana|,0,327,0|-18vsmgp,0,327,0|-18vsmgo,8,8,0|-ezayw1,8,8,0|-ezayw0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6dp81,9,9,1|-d6dp80,8,8,0|-cv5zw1,8,8,0|-cv5zw0,9,9,1|-cofek1,9,9,1|-cofek0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/London|,0,342,0|-1rprx9y,0,342,0|-1rprx9x,1,1,0|-rzcns1,1,1,0|-rzcns0,26,8,1|-rsid41,26,8,1|-rsid40,1,1,0|-risd41,1,1,0|-risd40,26,8,1|-ragd41,26,8,1|-ragd40,1,1,0|-r0s7s1,1,1,0|-r0s7s0,26,8,1|-qr0d41,26,8,1|-qr0d40,1,1,0|-qhp6g1,1,1,0|-qhp6g0,26,8,1|-q8aag1,26,8,1|-q8aag0,1,1,0|-pyz3s1,1,1,0|-pyz3s0,26,8,1|-po4d41,26,8,1|-po4d40,1,1,0|-pfw2g1,1,1,0|-pfw2g0,26,8,1|-p6h6g1,26,8,1|-p6h6g0,1,1,0|-oxiyg1,1,1,0|-oxiyg0,26,8,1|-onfzs1,26,8,1|-onfzs0,1,1,0|-odd141,1,1,0|-odd140,26,8,1|-o5st41,26,8,1|-o5st40,1,1,0|-nuzx41,1,1,0|-nuzx40,26,8,1|-nmprs1,26,8,1|-nmprs0,1,1,0|-nbwvs1,1,1,0|-nbwvs0,26,8,1|-n39rs1,26,8,1|-n39rs0,1,1,0|-mt6t41,1,1,0|-mt6t40,26,8,1|-mkjp41,26,8,1|-mkjp40,1,1,0|-matp41,1,1,0|-matp40,26,8,1|-m1tmg1,26,8,1|-m1tmg0,1,1,0|-lrdp41,1,1,0|-lrdp40,26,8,1|-liql41,26,8,1|-liql40,1,1,0|-l8nmg1,1,1,0|-l8nmg0,26,8,1|-l00ig1,26,8,1|-l00ig0,1,1,0|-kqaig1,1,1,0|-kqaig0,26,8,1|-khafs1,26,8,1|-khafs0,1,1,0|-k77h41,1,1,0|-k77h40,26,8,1|-jykd41,26,8,1|-jykd40,1,1,0|-joheg1,1,1,0|-joheg0,26,8,1|-jfuag1,26,8,1|-jfuag0,1,1,0|-j64ag1,1,1,0|-j64ag0,26,8,1|-iwr941,26,8,1|-iwr940,1,1,0|-imoag1,1,1,0|-imoag0,26,8,1|-ie16g1,26,8,1|-ie16g0,1,1,0|-i4b6g1,1,1,0|-i4b6g0,26,8,1|-hvb3s1,26,8,1|-hvb3s0,1,1,0|-hl8541,1,1,0|-hl8540,26,8,1|-hcl141,26,8,1|-hcl140,1,1,0|-h2i2g1,1,1,0|-h2i2g0,26,8,1|-gtuyg1,26,8,1|-gtuyg0,1,1,0|-gk4yg1,1,1,0|-gk4yg0,26,8,1|-gb4vs1,26,8,1|-gb4vs0,1,1,0|-g11x41,1,1,0|-g11x40,26,8,1|-fpw2g1,26,8,1|-fpw2g0,1,1,0|-fkul41,1,1,0|-fkul40,26,8,1|-eyiyk1,26,8,1|-eyiyk0,152,9,1|-ethh81,152,9,1|-ethh80,26,8,1|-eh8qk1,26,8,1|-eh8qk0,152,9,1|-earek1,152,9,1|-earek0,26,8,1|-dyinw1,26,8,1|-dyinw0,152,9,1|-drod81,152,9,1|-drod80,26,8,1|-dfsl81,26,8,1|-dfsl80,152,9,1|-d75h81,152,9,1|-d75h80,26,8,1|-cx0nw1,26,8,1|-cx0nw0,152,9,1|-cro2k1,152,9,1|-cro2k0,26,8,1|-cncfs1,26,8,1|-cncfs0,1,1,0|-cdmfs1,1,1,0|-cdmfs0,26,8,1|-c4md41,26,8,1|-c4md40,1,1,0|-bwc7s1,1,1,0|-bwc7s0,26,8,1|-buwfw1,26,8,1|-buwfw0,152,9,1|-bos2k1,152,9,1|-bos2k0,26,8,1|-bkgfs1,26,8,1|-bkgfs0,1,1,0|-bdm541,1,1,0|-bdm540,26,8,1|-b1qd41,26,8,1|-b1qd40,1,1,0|-att6g1,1,1,0|-att6g0,26,8,1|-aj0ag1,26,8,1|-aj0ag0,1,1,0|-aad6g1,1,1,0|-aad6g0,26,8,1|-a0n6g1,26,8,1|-a0n6g0,1,1,0|-9rn3s1,1,1,0|-9rn3s0,26,8,1|-9hx3s1,26,8,1|-9hx3s0,1,1,0|-98k2g1,1,1,0|-98k2g0,26,8,1|-8yu2g1,26,8,1|-8yu2g0,1,1,0|-8ptzs1,1,1,0|-8ptzs0,26,8,1|-8h6vs1,26,8,1|-8h6vs0,1,1,0|-87gvs1,1,1,0|-87gvs0,26,8,1|-7ygt41,26,8,1|-7ygt40,1,1,0|-7odug1,1,1,0|-7odug0,26,8,1|-7fqqg1,26,8,1|-7fqqg0,1,1,0|-75at41,1,1,0|-75at40,26,8,1|-6wnp41,26,8,1|-6wnp40,1,1,0|-6mxp41,1,1,0|-6mxp40,26,8,1|-6dxmg1,26,8,1|-6dxmg0,1,1,0|-63uns1,1,1,0|-63uns0,26,8,1|-5v7js1,26,8,1|-5v7js0,1,1,0|-5l4l41,1,1,0|-5l4l40,26,8,1|-5chh41,26,8,1|-5chh40,1,1,0|-52rh41,1,1,0|-52rh40,26,8,1|-4treg1,26,8,1|-4treg0,1,1,0|-4krbs1,1,1,0|-4krbs0,26,8,1|-49lh41,26,8,1|-49lh40,1,1,0|-421941,1,1,0|-421940,26,8,1|-3qveg1,26,8,1|-3qveg0,1,1,0|-3iy7s1,1,1,0|-3iy7s0,26,8,1|-385bs1,26,8,1|-385bs0,1,1,0|-30l3s1,1,1,0|-30l3s0,26,8,1|-2pf941,26,8,1|-2pf940,1,1,0|-2hv141,1,1,0|-2hv140,26,8,1|-26p6g1,26,8,1|-26p6g0,1,1,0|-1z4yg1,1,1,0|-1z4yg0,26,8,1|-1nz3s1,26,8,1|-1nz3s0,1,1,0|-1gevs1,1,1,0|-1gevs0,26,8,1|-14w2g1,26,8,1|-14w2g0,1,1,0|-z4ns1,1,1,0|-z4ns0,26,8,1|-m6841,26,8,1|-m6840,26,8,0|yd6vz,26,8,0|yd6w0,1,1,0|15kg7z,1,1,0|15kg80,26,8,1|1h39jz,26,8,1|1h39k0,1,1,0|1oaivz,1,1,0|1oaiw0,26,8,1|1ztc7z,26,8,1|1ztc80,1,1,0|270ljz,1,1,0|270lk0,26,8,1|2ijevz,26,8,1|2ijew0,1,1,0|2pqo7z,1,1,0|2pqo80,26,8,1|319hjz,26,8,1|319hk0,1,1,0|38tpjz,1,1,0|38tpk0,26,8,1|3jzk7z,26,8,1|3jzk80,1,1,0|3rjs7z,1,1,0|3rjs80,26,8,1|42pmvz,26,8,1|42pmw0,1,1,0|4a9uvz,1,1,0|4a9uw0,26,8,1|4lso7z,26,8,1|4lso80,1,1,0|4szxjz,1,1,0|4szxk0,26,8,1|54iqvz,26,8,1|54iqw0,1,1,0|5bq07z,1,1,0|5bq080,26,8,1|5n8tjz,26,8,1|5n8tk0,1,1,0|5v5xfz,1,1,0|5v5xg0,26,8,1|65ytfz,26,8,1|65ytg0,1,1,0|6dw03z,1,1,0|6dw040,26,8,1|6oow3z,26,8,1|6oow40,1,1,0|6wm2rz,1,1,0|6wm2s0,26,8,1|77eyrz,26,8,1|77eys0,1,1,0|7fc5fz,1,1,0|7fc5g0,26,8,1|7qi03z,26,8,1|7qi040,1,1,0|7yf6rz,1,1,0|7yf6s0,26,8,1|8982rz,26,8,1|8982s0,1,1,0|8h59fz,1,1,0|8h59g0,26,8,1|8ry5fz,26,8,1|8ry5g0,1,1,0|8zvc3z,1,1,0|8zvc40,26,8,1|9ao83z,26,8,1|9ao840,1,1,0|9ilerz,1,1,0|9iles0,26,8,1|9tearz,26,8,1|9teas0,1,1,0|a1bhfz,1,1,0|a1bhg0,26,8,1|achc3z,26,8,1|achc40,1,1,0|ak1k3z,1,1,0|ak1k40,26,8,1|av7erz,26,8,1|av7es0,1,1,0|b34lfz,1,1,0|b34lg0,26,8,1|bdxhfz,26,8,1|bdxhg0,1,1,0|bluo3z,1,1,0|bluo40,26,8,1|bwnk3z,26,8,1|bwnk40,1,1,0|c4kqrz,1,1,0|c4kqs0,26,8,1|cfdmrz,26,8,1|cfdms0,1,1,0|cnatfz,1,1,0|cnatg0,26,8,1|cy3pfz,26,8,1|cy3pg0,1,1,0|d60w3z,1,1,0|d60w40,26,8,1|dgts3z,26,8,1|dgts40,1,1,0|dp3xfz,1,1,0|dp3xg0,26,8,1|dzwtfz,26,8,1|dzwtg0,1,1,0|e7u03z,1,1,0|e7u040,26,8,1|eimw3z,26,8,1|eimw40,1,1,0|eqk2rz,1,1,0|eqk2s0,26,8,1|f1cyrz,26,8,1|f1cys0,1,1,0|f9a5fz,1,1,0|f9a5g0,26,8,1|fkg03z,26,8,1|fkg040,1,1,0|fs083z,1,1,0|fs0840,26,8,1|g362rz,26,8,1|g362s0,1,1,0|gaqarz,1,1,0|gaqas0,26,8,1|glw5fz,26,8,1|glw5g0,1,1,0|gttc3z,1,1,0|gttc40,26,8,1|h4m83z,26,8,1|h4m840,1,1,0|hcjerz,1,1,0|hcjes0,26,8,1|hncarz,26,8,1|hncas0,1,1,0|hv9hfz,1,1,0|hv9hg0,26,8,1|i6fc3z,26,8,1|i6fc40,1,1,0|idzk3z,1,1,0|idzk40,26,8,1|ip5erz,26,8,1|ip5es0,1,1,0|iwpmrz,1,1,0|iwpms0,26,8,1|j7vhfz,26,8,1|j7vhg0,1,1,0|jffpfz,1,1,0|jffpg0,26,8,1|jqlk3z,26,8,1|jqlk40,1,1,0|jyiqrz,1,1,0|jyiqs0,26,8,1|k9bmrz,26,8,1|k9bms0,1,1,0|kh8tfz,1,1,0|kh8tg0,26,8,1|ks1pfz,26,8,1|ks1pg0,1,1,0|kzyw3z,1,1,0|kzyw40,26,8,1|lb4qrz,26,8,1|lb4qs0,1,1,0|lioyrz,1,1,0|lioys0,26,8,1|ltutfz,26,8,1|ltutg0,1,1,0|m1f1fz,1,1,0|m1f1g0,26,8,1|mckw3z,26,8,1|mckw40,1,1,0|mki2rz,1,1,0|mki2s0,26,8,1|mvayrz,26,8,1|mvays0,1,1,0|n385fz,1,1,0|n385g0,26,8,1|ne11fz,26,8,1|ne11g0,1,1,0|nly83z,1,1,0|nly840,26,8,1|nwr43z,26,8,1|nwr440,1,1,0|o4oarz,1,1,0|o4oas0,26,8,1|ofu5fz,26,8,1|ofu5g0,1,1,0|onedfz,1,1,0|onedg0,26,8,1|oyk83z,26,8,1|oyk840,1,1,0|p64g3z,1,1,0|p64g40,26,8,1|phaarz,26,8,1|phaas0,1,1,0|pp7hfz,1,1,0|pp7hg0,26,8,1|q00dfz,26,8,1|q00dg0,1,1,0|q7xk3z,1,1,0|q7xk40,26,8,1|qiqg3z,26,8,1|qiqg40,1,1,0|qqnmrz,1,1,0|qqnms0,26,8,1|r1thfz,26,8,1|r1thg0,1,1,0|r9dpfz,1,1,0|r9dpg0,26,8,1|rkjk3z,26,8,1|rkjk40,1,1,0|rs3s3z,1,1,0|rs3s40,26,8,1|s39mrz,26,8,1|s39ms0,1,1,0|sb6tfz,1,1,0|sb6tg0,26,8,1|slzpfz,26,8,1|slzpg0,1,1,0|stww3z,1,1,0|stww40,26,8,1|t4ps3z,26,8,1|t4ps40,1,1,0|tcmyrz,1,1,0|tcmys0,26,8,1|tnfurz,26,8,1|tnfus0,1,1,0|tvd1fz,1,1,0|tvd1g0,26,8,1|u6iw3z,26,8,1|u6iw40,1,1,0|ue343z,1,1,0|ue3440,26,8,1|up8yrz,26,8,1|up8ys0,1,1,0|uwt6rz,1,1,0|uwt6s0,26,8,1|v7z1fz,26,8,1|v7z1g0,1,1,0|vfw83z,1,1,0|vfw840,26,8,1|vqp43z,26,8,1|vqp440,1,1,0|vymarz,1,1,0|vymas0,26,8,1|w9f6rz,26,8,1|w9f6s0,1,1,0|whcdfz,1,1,0|whcdg0,26,8,1|wsi83z,26,8,1|wsi840,1,1,0|x02g3z,1,1,0|x02g40,26,8,1|xb8arz,26,8,1|xb8as0,1,1,0|xisirz,1,1,0|xisis0,26,8,1|xtydfz,26,8,1|xtydg0,1,1,0|y1ilfz,1,1,0|y1ilg0,26,8,1|ycog3z,26,8,1|ycog40,1,1,0|yklmrz,1,1,0|yklms0,26,8,1|yveirz,26,8,1|yveis0,1,1,0|z3bpfz,1,1,0|z3bpg0,26,8,1|ze4lfz,26,8,1|ze4lg0,1,1,0|zm1s3z,1,1,0|zm1s40,26,8,1|zx7mrz,26,8,1|zx7ms0,1,1,0|104rurz,1,1,0|104rus0,26,8,1|10fxpfz,26,8,1|10fxpg0,1,1,0|10nhxfz,1,1,0|10nhxg0,26,8,1|10yns3z,26,8,1|10yns40,1,1,0|116kyrz,1,1,0|116kys0,26,8,1|11hdurz,26,8,1|11hdus0,1,1,0|11pb1fz,1,1,0|11pb1g0,26,8,1|1203xfz,26,8,1|1203xg0,1,1,0|128143z,1,1,0|1281440,26,8,1|12iu03z,26,8,1|12iu040,1,1,0|12qr6rz,1,1,0|12qr6s0,26,8,1|131x1fz,26,8,1|131x1g0,1,1,0|139h9fz,1,1,0|139h9g0,26,8,1|13kn43z,26,8,1|13kn440,1,1,0|13s7c3z,1,1,0|13s7c40,26,8,1|143d6rz,26,8,1|143d6s0,1,1,0|14badfz,1,1,0|14badg0,26,8,1|14m39fz,26,8,1|14m39g0,1,1,0|14u0g3z,1,1,0|14u0g40,26,8,1|154tc3z,26,8,1|154tc40,1,1,0|15cqirz,1,1,0|15cqis0,26,8,1|15nwdfz,26,8,1|15nwdg0,1,1,0|15vglfz,1,1,0|15vglg0,26,8,1|166mg3z,26,8,1|166mg40,1,1,0|16e6o3z,1,1,0|16e6o40,26,8,1|16pcirz,26,8,1|16pcis0,1,1,0|16x9pfz,1,1,0|16x9pg0,26,8,1|1782lfz,26,8,1|1782lg0,1,1,0|17fzs3z,1,1,0|17fzs40,26,8,1|17qso3z,26,8,1|17qso40,1,1,0|17ypurz,1,1,0|17ypus0,26,8,1|189iqrz,26,8,1|189iqs0,1,1,0|18hfxfz,1,1,0|18hfxg0,26,8,1|18sls3z,26,8,1|18sls40,1,1,0|190603z,1,1,0|1906040,26,8,1|19bburz,26,8,1|19bbus0,1,1,0|19iw2rz,1,1,0|19iw2s0,26,8,1|19u1xfz,26,8,1|19u1xg0,1,1,0|1a1z43z,1,1,0|1a1z440,26,8,1|1acs03z,26,8,1|1acs040,1,1,0|1akp6rz,1,1,0|1akp6s0,26,8,1|1avi2rz,26,8,1|1avi2s0,1,1,0|1b3f9fz,1,1,0|1b3f9g0,26,8,1|1bel43z,26,8,1|1bel440,1,1,0|1bm5c3z,1,1,0|1bm5c40,26,8,1|1bxb6rz,26,8,1|1bxb6s0,1,1,0|1c4verz,1,1,0|1c4ves0,26,8,1|1cg19fz,26,8,1|1cg19g0,1,1,0|1cnlhfz,1,1,0|1cnlhg0,26,8,1|1cyrc3z,26,8,1|1cyrc40,1,1,0|1d6oirz,1,1,0|1d6ois0,26,8,1|1dhherz,26,8,1|1dhhes0,1,1,0|1dpelfz,1,1,0|1dpelg0,26,8,1|1e07hfz,26,8,1|1e07hg0,1,1,0|1e84o3z,1,1,0|1e84o40,26,8,1|1ejairz,26,8,1|1ejais0,1,1,0|1equqrz,1,1,0|1equqs0,26,8,1|1f20lfz,26,8,1|1f20lg0,1,1,0|1f9ktfz,1,1,0|1f9ktg0,26,8,1|1fkqo3z,26,8,1|1fkqo40,1,1,0|1fsnurz,1,1,0|1fsnus0,26,8,1|1g3gqrz,26,8,1|1g3gqs0,1,1,0|1gbdxfz,1,1,0|1gbdxg0,26,8,1|1gm6tfz,26,8,1|1gm6tg0,1,1,0|1gu403z,1,1,0|1gu4040,26,8,1|1h4ww3z,26,8,1|1h4ww40,1,1,0|1hcu2rz,1,1,0|1hcu2s0,26,8,1|1hnzxfz,26,8,1|1hnzxg0,1,1,0|1hvk5fz,1,1,0|1hvk5g0,26,8,1|1i6q03z,26,8,1|1i6q040,1,1,0|1iea83z,1,1,0|1iea840,26,8,1|1ipg2rz,26,8,1|1ipg2s0,1,1,0|1ixd9fz,1,1,0|1ixd9g0,26,8,1|1j865fz,26,8,1|1j865g0,1,1,0|1jg3c3z,1,1,0|1jg3c40,26,8,1|1jqw83z,26,8,1|1jqw840,1,1,0|1jyterz,1,1,0|1jytes0,26,8,1|1k9z9fz,26,8,1|1k9z9g0,1,1,0|1khjhfz,1,1,0|1khjhg0,26,8,1|1kspc3z,26,8,1|1kspc40,1,1,0|1l09k3z,1,1,0|1l09k40,26,8,1|1lbferz,26,8,1|1lbfes0,1,1,0|1ljclfz,1,1,0|1ljclg0,26,8,1|1lu5hfz,26,8,1|1lu5hg0,1,1,0|1m22o3z,1,1,0|1m22o40,26,8,1|1mcvk3z,26,8,1|1mcvk40,1,1,0|1mksqrz,1,1,0|1mksqs0,26,8,1|1mvlmrz,26,8,1|1mvlms0,1,1,0|1n3itfz,1,1,0|1n3itg0,26,8,1|1neoo3z,26,8,1|1neoo40,1,1,0|1nm8w3z,1,1,0|1nm8w40,26,8,1|1nxeqrz,26,8,1|1nxeqs0,1,1,0|1o4yyrz,1,1,0|1o4yys0,26,8,1|1og4tfz,26,8,1|1og4tg0,1,1,0|1oo203z,1,1,0|1oo2040,26,8,1|1oyuw3z,26,8,1|1oyuw40,1,1,0|1p6s2rz,1,1,0|1p6s2s0,26,8,1|1phkyrz,26,8,1|1phkys0,1,1,0|1ppi5fz,1,1,0|1ppi5g0,26,8,1|1q0o03z,26,8,1|1q0o040,1,1,0|1q8883z,1,1,0|1q88840,26,8,1|1qje2rz,26,8,1|1qje2s0,1,1,0|1qqyarz,1,1,0|1qqyas0,26,8,1|1r245fz,26,8,1|1r245g0,1,1,0|1r9odfz,1,1,0|1r9odg0,26,8,1|1rku83z,26,8,1|1rku840,1,1,0|1rsrerz,1,1,0|1rsres0,26,8,1|1s3karz,26,8,1|1s3kas0,1,1,0|1sbhhfz,1,1,0|1sbhhg0,26,8,1|1smadfz,26,8,1|1smadg0,1,1,0|1su7k3z,1,1,0|1su7k40,26,8,1|1t5derz,26,8,1|1t5des0,1,1,0|1tcxmrz,1,1,0|1tcxms0,26,8,1|1to3hfz,26,8,1|1to3hg0,1,1,0|1tvnpfz,1,1,0|1tvnpg0,26,8,1|1u6tk3z,26,8,1|1u6tk40,1,1,0|1ueqqrz,1,1,0|1ueqqs0,26,8,1|1upjmrz,26,8,1|1upjms0,1,1,0|1uxgtfz,1,1,0|1uxgtg0,26,8,1|1v89pfz,26,8,1|1v89pg0,1,1,0|1vg6w3z,1,1,0|1vg6w40,26,8,1|1vqzs3z,26,8,1|1vqzs40,1,1,0|NaN,1,1,0\",\"Europe/Luxembourg|,0,348,0|-y89551,0,348,0|-y89550,8,8,0|-rzo2w1,8,8,0|-rzo2w0,9,9,1|-rsilg1,9,9,1|-rsilg0,8,8,0|-rhps81,8,8,0|-rhps80,9,9,1|-raglg1,9,9,1|-raglg0,8,8,0|-qznjw1,8,8,0|-qznjw0,9,9,1|-qrqd81,9,9,1|-qrqd80,8,8,0|-qo4w41,8,8,0|-qo4w40,6,1,0|-qj59g1,6,1,0|-qj59g0,7,8,1|-q7z6g1,7,8,1|-q7z6g0,6,1,0|-q15441,6,1,0|-q15440,7,8,1|-po6ak1,7,8,1|-po6ak0,6,1,0|-pgvhg1,6,1,0|-pgvhg0,7,8,1|-p5anw1,7,8,1|-p5anw0,6,1,0|-oxj6s1,6,1,0|-oxj6s0,7,8,1|-ong5c1,7,8,1|-ong5c0,6,1,0|-odd9g1,6,1,0|-odd9g0,7,8,1|-o4pzw1,7,8,1|-o4pzw0,6,1,0|-nvq2s1,6,1,0|-nvq2s0,7,8,1|-nm0001,7,8,1|-nm0000,6,1,0|-ncl6s1,6,1,0|-ncl6s0,7,8,1|-n39xc1,7,8,1|-n39xc0,6,1,0|-mt71g1,6,1,0|-mt71g0,7,8,1|-mkjuo1,7,8,1|-mkjuo0,6,1,0|-matxg1,6,1,0|-matxg0,7,8,1|-m1ts01,7,8,1|-m1ts00,6,1,0|-lrqw41,6,1,0|-lrqw40,7,8,1|-liqqo1,7,8,1|-liqqo0,6,1,0|-l8nus1,6,1,0|-l8nus0,7,8,1|-l00ig1,7,8,1|-l00ig0,6,1,0|-kqaig1,6,1,0|-kqaig0,7,8,1|-khafs1,7,8,1|-khafs0,6,1,0|-k77h41,6,1,0|-k77h40,7,8,1|-jykd41,7,8,1|-jykd40,6,1,0|-jp7bs1,6,1,0|-jp7bs0,7,8,1|-jfuag1,7,8,1|-jfuag0,6,1,0|-j6u7s1,6,1,0|-j6u7s0,7,8,1|-iwr941,7,8,1|-iwr940,6,1,0|-ine7s1,6,1,0|-ine7s0,7,8,1|-ie16g1,7,8,1|-ie16g0,6,1,0|-i513s1,6,1,0|-i513s0,7,8,1|-hvb3s1,7,8,1|-hvb3s0,6,1,0|-hl8541,6,1,0|-hl8540,7,8,1|-hcl141,7,8,1|-hcl140,6,1,0|-h37zs1,6,1,0|-h37zs0,7,8,1|-gtuyg1,7,8,1|-gtuyg0,6,1,0|-gkuvs1,6,1,0|-gkuvs0,7,8,1|-gb4vs1,7,8,1|-gb4vs0,6,1,0|-g11x41,6,1,0|-g11x40,7,8,1|-fpw2g1,7,8,1|-fpw2g0,6,1,0|-fkul41,6,1,0|-fkul40,7,8,1|-fgsag1,7,8,1|-fgsag0,7,9,1|-e6dzw1,7,9,1|-e6dzw0,6,8,0|-dytrw1,6,8,0|-dytrw0,7,9,1|-dp3rw1,7,9,1|-dp3rw0,6,8,0|-dfqqk1,6,8,0|-dfqqk0,7,9,1|-d73mk1,7,9,1|-d73mk0,8,8,0|-cx0nw1,8,8,0|-cx0nw0,9,9,1|-cofek1,9,9,1|-cofek0,8,8,0|-cbtp81,8,8,0|-cbtp80,9,9,1|-c4kl81,9,9,1|-c4kl80,8,8,0|3s9mrz,8,8,0|3s9ms0,9,9,1|419pfz,9,9,1|419pg0,8,8,0|4azpfz,8,8,0|4azpg0,9,9,1|4kcqrz,9,9,1|4kcqs0,8,8,0|4tps3z,8,8,0|4tps40,9,9,1|532tfz,9,9,1|532tg0,8,8,0|5cstfz,8,8,0|5cstg0,9,9,1|5lsw3z,9,9,1|5lsw40,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Madrid|,0,349,0|-100edc1,0,349,0|-100edc0,6,1,0|-qzlus1,6,1,0|-qzlus0,7,8,1|-qqnk01,7,8,1|-qqnk00,6,1,0|-qhalg1,6,1,0|-qhalg0,7,8,1|-q7vmo1,7,8,1|-q7vmo0,6,1,0|-nusqs1,6,1,0|-nusqs0,7,8,1|-nm0001,7,8,1|-nm0000,6,1,0|-mt71g1,6,1,0|-mt71g0,7,8,1|-mkjuo1,7,8,1|-mkjuo0,6,1,0|-matxg1,6,1,0|-matxg0,7,8,1|-m1ts01,7,8,1|-m1ts00,6,1,0|-lrqtc1,6,1,0|-lrqtc0,7,8,1|-liqqo1,7,8,1|-liqqo0,6,1,0|-l8nus1,6,1,0|-l8nus0,7,8,1|-l00o01,7,8,1|-l00o00,6,1,0|-gzf6s1,6,1,0|-gzf6s0,7,8,1|-gtv401,7,8,1|-gtv400,6,1,0|-gki5g1,6,1,0|-gki5g0,7,8,1|-gj2dk1,7,8,1|-gj2dk0,153,9,1|-gb3c81,153,9,1|-gb3c80,7,8,1|-fs2001,7,8,1|-fs2000,6,1,0|-fjrxg1,6,1,0|-fjrxg0,8,8,0|-eft481,8,8,0|-eft480,9,9,1|-e9kys1,9,9,1|-e9kys0,8,8,0|-dxsyw1,8,8,0|-dxsyw0,9,9,1|-dp5s41,9,9,1|-dp5s40,8,8,0|-df2w81,8,8,0|-df2w80,9,9,1|-d6fpg1,9,9,1|-d6fpg0,8,8,0|-cwctk1,8,8,0|-cwctk0,9,9,1|-cnpms1,9,9,1|-cnpms0,8,8,0|-cdmqw1,8,8,0|-cdmqw0,9,9,1|-c4zk41,9,9,1|-c4zk40,8,8,0|-asdmw1,8,8,0|-asdmw0,9,9,1|-akgdg1,9,9,1|-akgdg0,8,8,0|28g53z,8,8,0|28g540,9,9,1|2hgajz,9,9,1|2hgak0,8,8,0|2r67rz,8,8,0|2r67s0,9,9,1|306d7z,9,9,1|306d80,8,8,0|396d3z,8,8,0|396d40,9,9,1|3ijh7z,9,9,1|3ijh80,8,8,0|3s9efz,8,8,0|3s9eg0,9,9,1|419jvz,9,9,1|419jw0,8,8,0|4azpfz,8,8,0|4azpg0,9,9,1|4kcqrz,9,9,1|4kcqs0,8,8,0|4tps3z,8,8,0|4tps40,9,9,1|532tfz,9,9,1|532tg0,8,8,0|5cstfz,8,8,0|5cstg0,9,9,1|5lsw3z,9,9,1|5lsw40,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Malta|,0,350,0|-13qyw0t,0,350,0|-13qyw0s,8,8,0|-rymys1,8,8,0|-rymys0,9,9,1|-rsio81,9,9,1|-rsio80,8,8,0|-rj5k41,8,8,0|-rj5k40,9,9,1|-r9qqw1,9,9,1|-r9qqw0,8,8,0|-r1idg1,8,8,0|-r1idg0,9,9,1|-qqnpk1,9,9,1|-qqnpk0,8,8,0|-qj59g1,8,8,0|-qj59g0,9,9,1|-q7zhk1,9,9,1|-q7zhk0,8,8,0|-pzcas1,8,8,0|-pzcas0,9,9,1|-ppzc81,9,9,1|-ppzc80,8,8,0|-ff59g1,8,8,0|-ff59g0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfsl81,8,8,0|-dfsl80,9,9,1|-d75h81,9,9,1|-d75h80,8,8,0|-cx0nw1,8,8,0|-cx0nw0,9,9,1|-cohes1,9,9,1|-cohes0,8,8,0|-cf2d81,8,8,0|-cf2d80,9,9,1|-c4mfw1,9,9,1|-c4mfw0,8,8,0|-bwcg41,8,8,0|-bwcg40,9,9,1|-blwis1,9,9,1|-blwis0,8,8,0|-bec581,8,8,0|-bec580,9,9,1|-b36ak1,9,9,1|-b36ak0,8,8,0|-1vwis1,8,8,0|-1vwis0,9,9,1|-1pf9k1,9,9,1|-1pf9k0,8,8,0|-1cthg1,8,8,0|-1cthg0,9,9,1|-16p441,9,9,1|-16p440,8,8,0|-u3es1,8,8,0|-u3es0,9,9,1|-nz1g1,9,9,1|-nz1g0,8,8,0|-b0dg1,8,8,0|-b0dg0,9,9,1|-4w041,9,9,1|-4w040,8,8,0|7pp7z,8,8,0|7pp80,9,9,1|du2jz,9,9,1|du2k0,8,8,0|q2t7z,8,8,0|q2t80,9,9,1|wk57z,9,9,1|wk580,8,8,0|195ujz,8,8,0|195uk0,9,9,1|1fn6jz,9,9,1|1fn6k0,8,8,0|1oyd7z,8,8,0|1oyd80,9,9,1|1ybejz,9,9,1|1ybek0,8,8,0|28t6jz,8,8,0|28t6k0,9,9,1|2gf97z,9,9,1|2gf980,8,8,0|2rjerz,8,8,0|2rjes0,9,9,1|2zginz,9,9,1|2zgio0,8,8,0|3a9hfz,8,8,0|3a9hg0,9,9,1|3i6lbz,9,9,1|3i6lc0,8,8,0|3szk3z,8,8,0|3szk40,9,9,1|40wnzz,9,9,1|40wo00,8,8,0|4bpmrz,8,8,0|4bpms0,9,9,1|4jmqnz,9,9,1|4jmqo0,8,8,0|4ufpfz,8,8,0|4ufpg0,9,9,1|52ctbz,9,9,1|52ctc0,8,8,0|5chpfz,8,8,0|5chpg0,9,9,1|5lfunz,9,9,1|5lfuo0,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Mariehamn|,0,343,0|-1bss9ye,0,343,0|-1bss9yd,77,343,0|-peghye,77,343,0|-peghyd,14,9,0|-ehco81,14,9,0|-ehco80,15,4,1|-e7vxk1,15,4,1|-e7vxk0,14,9,0|5v5unz,14,9,0|5v5uo0,15,4,1|64ivzz,15,4,1|64iw00,14,9,0|6dvxbz,14,9,0|6dvxc0,15,4,1|6n8ynz,15,4,1|6n8yo0,14,9,0|6wm2rz,14,9,0|6wm2s0,15,4,1|75z43z,15,4,1|75z440,14,9,0|7fc5fz,14,9,0|7fc5g0,15,4,1|7p25fz,15,4,1|7p25g0,14,9,0|7yf6rz,14,9,0|7yf6s0,15,4,1|87s83z,15,4,1|87s840,14,9,0|8h59fz,14,9,0|8h59g0,15,4,1|8qiarz,15,4,1|8qias0,14,9,0|8zvc3z,14,9,0|8zvc40,15,4,1|998dfz,15,4,1|998dg0,14,9,0|9ilerz,14,9,0|9iles0,15,4,1|9ryg3z,15,4,1|9ryg40,14,9,0|a1bhfz,14,9,0|a1bhg0,15,4,1|aaoirz,15,4,1|aaois0,14,9,0|ak1k3z,14,9,0|ak1k40,15,4,1|atrk3z,15,4,1|atrk40,14,9,0|b34lfz,14,9,0|b34lg0,15,4,1|bchmrz,15,4,1|bchms0,14,9,0|bluo3z,14,9,0|bluo40,15,4,1|bv7pfz,15,4,1|bv7pg0,14,9,0|c4kqrz,14,9,0|c4kqs0,15,4,1|cdxs3z,15,4,1|cdxs40,14,9,0|cnatfz,14,9,0|cnatg0,15,4,1|cwnurz,15,4,1|cwnus0,14,9,0|d60w3z,14,9,0|d60w40,15,4,1|dfdxfz,15,4,1|dfdxg0,14,9,0|dp3xfz,14,9,0|dp3xg0,15,4,1|dzwtfz,15,4,1|dzwtg0,14,9,0|e7u03z,14,9,0|e7u040,15,4,1|eimw3z,15,4,1|eimw40,14,9,0|eqk2rz,14,9,0|eqk2s0,15,4,1|f1cyrz,15,4,1|f1cys0,14,9,0|f9a5fz,14,9,0|f9a5g0,15,4,1|fkg03z,15,4,1|fkg040,14,9,0|fs083z,14,9,0|fs0840,15,4,1|g362rz,15,4,1|g362s0,14,9,0|gaqarz,14,9,0|gaqas0,15,4,1|glw5fz,15,4,1|glw5g0,14,9,0|gttc3z,14,9,0|gttc40,15,4,1|h4m83z,15,4,1|h4m840,14,9,0|hcjerz,14,9,0|hcjes0,15,4,1|hncarz,15,4,1|hncas0,14,9,0|hv9hfz,14,9,0|hv9hg0,15,4,1|i6fc3z,15,4,1|i6fc40,14,9,0|idzk3z,14,9,0|idzk40,15,4,1|ip5erz,15,4,1|ip5es0,14,9,0|iwpmrz,14,9,0|iwpms0,15,4,1|j7vhfz,15,4,1|j7vhg0,14,9,0|jffpfz,14,9,0|jffpg0,15,4,1|jqlk3z,15,4,1|jqlk40,14,9,0|jyiqrz,14,9,0|jyiqs0,15,4,1|k9bmrz,15,4,1|k9bms0,14,9,0|kh8tfz,14,9,0|kh8tg0,15,4,1|ks1pfz,15,4,1|ks1pg0,14,9,0|kzyw3z,14,9,0|kzyw40,15,4,1|lb4qrz,15,4,1|lb4qs0,14,9,0|lioyrz,14,9,0|lioys0,15,4,1|ltutfz,15,4,1|ltutg0,14,9,0|m1f1fz,14,9,0|m1f1g0,15,4,1|mckw3z,15,4,1|mckw40,14,9,0|mki2rz,14,9,0|mki2s0,15,4,1|mvayrz,15,4,1|mvays0,14,9,0|n385fz,14,9,0|n385g0,15,4,1|ne11fz,15,4,1|ne11g0,14,9,0|nly83z,14,9,0|nly840,15,4,1|nwr43z,15,4,1|nwr440,14,9,0|o4oarz,14,9,0|o4oas0,15,4,1|ofu5fz,15,4,1|ofu5g0,14,9,0|onedfz,14,9,0|onedg0,15,4,1|oyk83z,15,4,1|oyk840,14,9,0|p64g3z,14,9,0|p64g40,15,4,1|phaarz,15,4,1|phaas0,14,9,0|pp7hfz,14,9,0|pp7hg0,15,4,1|q00dfz,15,4,1|q00dg0,14,9,0|q7xk3z,14,9,0|q7xk40,15,4,1|qiqg3z,15,4,1|qiqg40,14,9,0|qqnmrz,14,9,0|qqnms0,15,4,1|r1thfz,15,4,1|r1thg0,14,9,0|r9dpfz,14,9,0|r9dpg0,15,4,1|rkjk3z,15,4,1|rkjk40,14,9,0|rs3s3z,14,9,0|rs3s40,15,4,1|s39mrz,15,4,1|s39ms0,14,9,0|sb6tfz,14,9,0|sb6tg0,15,4,1|slzpfz,15,4,1|slzpg0,14,9,0|stww3z,14,9,0|stww40,15,4,1|t4ps3z,15,4,1|t4ps40,14,9,0|tcmyrz,14,9,0|tcmys0,15,4,1|tnfurz,15,4,1|tnfus0,14,9,0|tvd1fz,14,9,0|tvd1g0,15,4,1|u6iw3z,15,4,1|u6iw40,14,9,0|ue343z,14,9,0|ue3440,15,4,1|up8yrz,15,4,1|up8ys0,14,9,0|uwt6rz,14,9,0|uwt6s0,15,4,1|v7z1fz,15,4,1|v7z1g0,14,9,0|vfw83z,14,9,0|vfw840,15,4,1|vqp43z,15,4,1|vqp440,14,9,0|vymarz,14,9,0|vymas0,15,4,1|w9f6rz,15,4,1|w9f6s0,14,9,0|whcdfz,14,9,0|whcdg0,15,4,1|wsi83z,15,4,1|wsi840,14,9,0|x02g3z,14,9,0|x02g40,15,4,1|xb8arz,15,4,1|xb8as0,14,9,0|xisirz,14,9,0|xisis0,15,4,1|xtydfz,15,4,1|xtydg0,14,9,0|y1ilfz,14,9,0|y1ilg0,15,4,1|ycog3z,15,4,1|ycog40,14,9,0|yklmrz,14,9,0|yklms0,15,4,1|yveirz,15,4,1|yveis0,14,9,0|z3bpfz,14,9,0|z3bpg0,15,4,1|ze4lfz,15,4,1|ze4lg0,14,9,0|zm1s3z,14,9,0|zm1s40,15,4,1|zx7mrz,15,4,1|zx7ms0,14,9,0|104rurz,14,9,0|104rus0,15,4,1|10fxpfz,15,4,1|10fxpg0,14,9,0|10nhxfz,14,9,0|10nhxg0,15,4,1|10yns3z,15,4,1|10yns40,14,9,0|116kyrz,14,9,0|116kys0,15,4,1|11hdurz,15,4,1|11hdus0,14,9,0|11pb1fz,14,9,0|11pb1g0,15,4,1|1203xfz,15,4,1|1203xg0,14,9,0|128143z,14,9,0|1281440,15,4,1|12iu03z,15,4,1|12iu040,14,9,0|12qr6rz,14,9,0|12qr6s0,15,4,1|131x1fz,15,4,1|131x1g0,14,9,0|139h9fz,14,9,0|139h9g0,15,4,1|13kn43z,15,4,1|13kn440,14,9,0|13s7c3z,14,9,0|13s7c40,15,4,1|143d6rz,15,4,1|143d6s0,14,9,0|14badfz,14,9,0|14badg0,15,4,1|14m39fz,15,4,1|14m39g0,14,9,0|14u0g3z,14,9,0|14u0g40,15,4,1|154tc3z,15,4,1|154tc40,14,9,0|15cqirz,14,9,0|15cqis0,15,4,1|15nwdfz,15,4,1|15nwdg0,14,9,0|15vglfz,14,9,0|15vglg0,15,4,1|166mg3z,15,4,1|166mg40,14,9,0|16e6o3z,14,9,0|16e6o40,15,4,1|16pcirz,15,4,1|16pcis0,14,9,0|16x9pfz,14,9,0|16x9pg0,15,4,1|1782lfz,15,4,1|1782lg0,14,9,0|17fzs3z,14,9,0|17fzs40,15,4,1|17qso3z,15,4,1|17qso40,14,9,0|17ypurz,14,9,0|17ypus0,15,4,1|189iqrz,15,4,1|189iqs0,14,9,0|18hfxfz,14,9,0|18hfxg0,15,4,1|18sls3z,15,4,1|18sls40,14,9,0|190603z,14,9,0|1906040,15,4,1|19bburz,15,4,1|19bbus0,14,9,0|19iw2rz,14,9,0|19iw2s0,15,4,1|19u1xfz,15,4,1|19u1xg0,14,9,0|1a1z43z,14,9,0|1a1z440,15,4,1|1acs03z,15,4,1|1acs040,14,9,0|1akp6rz,14,9,0|1akp6s0,15,4,1|1avi2rz,15,4,1|1avi2s0,14,9,0|1b3f9fz,14,9,0|1b3f9g0,15,4,1|1bel43z,15,4,1|1bel440,14,9,0|1bm5c3z,14,9,0|1bm5c40,15,4,1|1bxb6rz,15,4,1|1bxb6s0,14,9,0|1c4verz,14,9,0|1c4ves0,15,4,1|1cg19fz,15,4,1|1cg19g0,14,9,0|1cnlhfz,14,9,0|1cnlhg0,15,4,1|1cyrc3z,15,4,1|1cyrc40,14,9,0|1d6oirz,14,9,0|1d6ois0,15,4,1|1dhherz,15,4,1|1dhhes0,14,9,0|1dpelfz,14,9,0|1dpelg0,15,4,1|1e07hfz,15,4,1|1e07hg0,14,9,0|1e84o3z,14,9,0|1e84o40,15,4,1|1ejairz,15,4,1|1ejais0,14,9,0|1equqrz,14,9,0|1equqs0,15,4,1|1f20lfz,15,4,1|1f20lg0,14,9,0|1f9ktfz,14,9,0|1f9ktg0,15,4,1|1fkqo3z,15,4,1|1fkqo40,14,9,0|1fsnurz,14,9,0|1fsnus0,15,4,1|1g3gqrz,15,4,1|1g3gqs0,14,9,0|1gbdxfz,14,9,0|1gbdxg0,15,4,1|1gm6tfz,15,4,1|1gm6tg0,14,9,0|1gu403z,14,9,0|1gu4040,15,4,1|1h4ww3z,15,4,1|1h4ww40,14,9,0|1hcu2rz,14,9,0|1hcu2s0,15,4,1|1hnzxfz,15,4,1|1hnzxg0,14,9,0|1hvk5fz,14,9,0|1hvk5g0,15,4,1|1i6q03z,15,4,1|1i6q040,14,9,0|1iea83z,14,9,0|1iea840,15,4,1|1ipg2rz,15,4,1|1ipg2s0,14,9,0|1ixd9fz,14,9,0|1ixd9g0,15,4,1|1j865fz,15,4,1|1j865g0,14,9,0|1jg3c3z,14,9,0|1jg3c40,15,4,1|1jqw83z,15,4,1|1jqw840,14,9,0|1jyterz,14,9,0|1jytes0,15,4,1|1k9z9fz,15,4,1|1k9z9g0,14,9,0|1khjhfz,14,9,0|1khjhg0,15,4,1|1kspc3z,15,4,1|1kspc40,14,9,0|1l09k3z,14,9,0|1l09k40,15,4,1|1lbferz,15,4,1|1lbfes0,14,9,0|1ljclfz,14,9,0|1ljclg0,15,4,1|1lu5hfz,15,4,1|1lu5hg0,14,9,0|1m22o3z,14,9,0|1m22o40,15,4,1|1mcvk3z,15,4,1|1mcvk40,14,9,0|1mksqrz,14,9,0|1mksqs0,15,4,1|1mvlmrz,15,4,1|1mvlms0,14,9,0|1n3itfz,14,9,0|1n3itg0,15,4,1|1neoo3z,15,4,1|1neoo40,14,9,0|1nm8w3z,14,9,0|1nm8w40,15,4,1|1nxeqrz,15,4,1|1nxeqs0,14,9,0|1o4yyrz,14,9,0|1o4yys0,15,4,1|1og4tfz,15,4,1|1og4tg0,14,9,0|1oo203z,14,9,0|1oo2040,15,4,1|1oyuw3z,15,4,1|1oyuw40,14,9,0|1p6s2rz,14,9,0|1p6s2s0,15,4,1|1phkyrz,15,4,1|1phkys0,14,9,0|1ppi5fz,14,9,0|1ppi5g0,15,4,1|1q0o03z,15,4,1|1q0o040,14,9,0|1q8883z,14,9,0|1q88840,15,4,1|1qje2rz,15,4,1|1qje2s0,14,9,0|1qqyarz,14,9,0|1qqyas0,15,4,1|1r245fz,15,4,1|1r245g0,14,9,0|1r9odfz,14,9,0|1r9odg0,15,4,1|1rku83z,15,4,1|1rku840,14,9,0|1rsrerz,14,9,0|1rsres0,15,4,1|1s3karz,15,4,1|1s3kas0,14,9,0|1sbhhfz,14,9,0|1sbhhg0,15,4,1|1smadfz,15,4,1|1smadg0,14,9,0|1su7k3z,14,9,0|1su7k40,15,4,1|1t5derz,15,4,1|1t5des0,14,9,0|1tcxmrz,14,9,0|1tcxms0,15,4,1|1to3hfz,15,4,1|1to3hg0,14,9,0|1tvnpfz,14,9,0|1tvnpg0,15,4,1|1u6tk3z,15,4,1|1u6tk40,14,9,0|1ueqqrz,14,9,0|1ueqqs0,15,4,1|1upjmrz,15,4,1|1upjms0,14,9,0|1uxgtfz,14,9,0|1uxgtg0,15,4,1|1v89pfz,15,4,1|1v89pg0,14,9,0|1vg6w3z,14,9,0|1vg6w40,15,4,1|1vqzs3z,15,4,1|1vqzs40,14,9,0|NaN,14,9,0\",\"Europe/Minsk|,0,351,0|-1ayy7rt,0,351,0|-1ayy7rs,20,352,0|-nu113d,20,352,0|-nu113c,14,9,0|-kmr1k1,14,9,0|-kmr1k0,149,4,0|-evpf01,149,4,0|-evpf00,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-db2g81,9,9,1|-db2g80,149,4,0|5vb6bz,149,4,0|5vb6c0,150,203,1|64pzjz,150,203,1|64pzk0,149,4,0|6e33nz,149,4,0|6e33o0,150,203,1|6nhwvz,150,203,1|6nhww0,149,4,0|6wv0zz,149,4,0|6wv100,150,203,1|769u7z,150,203,1|769u80,149,4,0|7foszz,149,4,0|7fot00,150,203,1|7p1zvz,150,203,1|7p1zw0,149,4,0|7yf17z,149,4,0|7yf180,150,203,1|87s2jz,150,203,1|87s2k0,149,4,0|8h53vz,149,4,0|8h53w0,150,203,1|8qi57z,150,203,1|8qi580,149,4,0|8zv6jz,149,4,0|8zv6k0,150,203,1|9987vz,150,203,1|9987w0,149,4,0|9il97z,149,4,0|9il980,150,203,1|9ryajz,150,203,1|9ryak0,149,4,0|a1bbvz,149,4,0|a1bbw0,150,203,1|aaod7z,150,203,1|aaod80,149,4,0|b34fvz,149,4,0|b34fw0,15,4,1|bchjzz,15,4,1|bchk00,14,9,0|blulbz,14,9,0|blulc0,15,4,1|bv7mnz,15,4,1|bv7mo0,14,9,0|c4knzz,14,9,0|c4ko00,15,4,1|cdxpbz,15,4,1|cdxpc0,14,9,0|cnaqnz,14,9,0|cnaqo0,15,4,1|cwnrzz,15,4,1|cwns00,14,9,0|d60tbz,14,9,0|d60tc0,15,4,1|dfdunz,15,4,1|dfduo0,14,9,0|dp3unz,14,9,0|dp3uo0,15,4,1|dzwqnz,15,4,1|dzwqo0,14,9,0|e7txbz,14,9,0|e7txc0,15,4,1|eimtbz,15,4,1|eimtc0,14,9,0|eqjzzz,14,9,0|eqk000,15,4,1|f1cvzz,15,4,1|f1cw00,14,9,0|f9a2nz,14,9,0|f9a2o0,15,4,1|fkfxbz,15,4,1|fkfxc0,14,9,0|fs05bz,14,9,0|fs05c0,15,4,1|g35zzz,15,4,1|g36000,14,9,0|gaq7zz,14,9,0|gaq800,15,4,1|glw2nz,15,4,1|glw2o0,14,9,0|gtt9bz,14,9,0|gtt9c0,15,4,1|h4m5bz,15,4,1|h4m5c0,14,9,0|hcjbzz,14,9,0|hcjc00,15,4,1|hnc7zz,15,4,1|hnc800,14,9,0|hv9enz,14,9,0|hv9eo0,15,4,1|i6f9bz,15,4,1|i6f9c0,14,9,0|idzhbz,14,9,0|idzhc0,15,4,1|ip5bzz,15,4,1|ip5c00,14,9,0|iwpjzz,14,9,0|iwpk00,15,4,1|j7venz,15,4,1|j7veo0,14,9,0|jffmnz,14,9,0|jffmo0,15,4,1|jqlhbz,15,4,1|jqlhc0,14,9,0|jyinzz,14,9,0|jyio00,15,4,1|k9bjzz,15,4,1|k9bk00,14,9,0|kh8qnz,14,9,0|kh8qo0,15,4,1|ks1mnz,15,4,1|ks1mo0,14,9,0|kzytbz,14,9,0|kzytc0,15,4,1|lb4nzz,15,4,1|lb4o00,14,9,0|liovzz,14,9,0|liow00,100,4,0|NaN,100,4,0\",\"Europe/Monaco|,0,353,0|-14hnyp9,0,353,0|-14hnyp8,5,7,0|-uo2b3m,5,7,0|-uo2b3l,6,1,0|-ry2lg1,6,1,0|-ry2lg0,7,8,1|-rsgqs1,7,8,1|-rsgqs0,6,1,0|-rjiis1,6,1,0|-rjiis0,7,8,1|-r9dpg1,7,8,1|-r9dpg0,6,1,0|-r1idg1,6,1,0|-r1idg0,7,8,1|-qqnms1,7,8,1|-qqnms0,6,1,0|-qj59g1,6,1,0|-qj59g0,7,8,1|-q7xk41,7,8,1|-q7xk40,6,1,0|-q15441,6,1,0|-q15440,7,8,1|-po6g41,7,8,1|-po6g40,6,1,0|-pgvhg1,6,1,0|-pgvhg0,7,8,1|-p5atg1,7,8,1|-p5atg0,6,1,0|-oxj6s1,6,1,0|-oxj6s0,7,8,1|-ong841,7,8,1|-ong840,6,1,0|-obkg41,6,1,0|-obkg40,7,8,1|-o4q5g1,7,8,1|-o4q5g0,6,1,0|-nvq2s1,6,1,0|-nvq2s0,7,8,1|-nm02s1,7,8,1|-nm02s0,6,1,0|-ncn1g1,6,1,0|-ncn1g0,7,8,1|-n3a041,7,8,1|-n3a040,6,1,0|-mt71g1,6,1,0|-mt71g0,7,8,1|-mkjxg1,7,8,1|-mkjxg0,6,1,0|-matxg1,6,1,0|-matxg0,7,8,1|-m1tus1,7,8,1|-m1tus0,6,1,0|-lrqw41,6,1,0|-lrqw40,7,8,1|-liqtg1,7,8,1|-liqtg0,6,1,0|-l8nus1,6,1,0|-l8nus0,7,8,1|-l00qs1,7,8,1|-l00qs0,6,1,0|-kqaqs1,6,1,0|-kqaqs0,7,8,1|-khao41,7,8,1|-khao40,6,1,0|-k77pg1,6,1,0|-k77pg0,7,8,1|-jyklg1,7,8,1|-jyklg0,6,1,0|-jp7k41,6,1,0|-jp7k40,7,8,1|-jfuis1,7,8,1|-jfuis0,6,1,0|-j6ug41,6,1,0|-j6ug40,7,8,1|-iwrhg1,7,8,1|-iwrhg0,6,1,0|-ineg41,6,1,0|-ineg40,7,8,1|-ie1es1,7,8,1|-ie1es0,6,1,0|-i51c41,6,1,0|-i51c40,7,8,1|-hvbc41,7,8,1|-hvbc40,6,1,0|-hl8dg1,6,1,0|-hl8dg0,7,8,1|-hcl9g1,7,8,1|-hcl9g0,6,1,0|-h38841,6,1,0|-h38840,7,8,1|-gtv6s1,7,8,1|-gtv6s0,6,1,0|-gkv441,6,1,0|-gkv440,7,8,1|-gb5441,7,8,1|-gb5440,6,1,0|-g125g1,6,1,0|-g125g0,7,8,1|-fpwas1,7,8,1|-fpwas0,6,1,0|-fkul41,6,1,0|-fkul40,7,8,1|-eyh9g1,7,8,1|-eyh9g0,153,9,1|-eqk5k1,153,9,1|-eqk5k0,7,8,1|-eimw41,7,8,1|-eimw40,153,9,1|-e6dzw1,153,9,1|-e6dzw0,7,8,1|-dytrw1,7,8,1|-dytrw0,153,9,1|-dp3rw1,153,9,1|-dp3rw0,7,8,1|-dfqqk1,7,8,1|-dfqqk0,153,9,1|-d62qs1,153,9,1|-d62qs0,7,8,1|-cx0nw1,7,8,1|-cx0nw0,153,9,1|-cofek1,153,9,1|-cofek0,8,8,0|396inz,8,8,0|396io0,9,9,1|3ijh7z,9,9,1|3ijh80,8,8,0|3s9mrz,8,8,0|3s9ms0,9,9,1|419pfz,9,9,1|419pg0,8,8,0|4azpfz,8,8,0|4azpg0,9,9,1|4kcqrz,9,9,1|4kcqs0,8,8,0|4tps3z,8,8,0|4tps40,9,9,1|532tfz,9,9,1|532tg0,8,8,0|5cstfz,8,8,0|5cstg0,9,9,1|5lsw3z,9,9,1|5lsw40,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Moscow|,0,354,0|-1ayy9mi,0,354,0|-1ayy9mh,20,354,0|-rx5dmi,20,354,0|-rx5dmh,20,355,0|-refds8,20,355,0|-refds7,44,356,1|-r57wg8,44,356,1|-r57wg7,20,355,0|-qx8xw8,20,355,0|-qx8xw7,154,357,1|-qrqps8,154,357,1|-qrqps7,44,356,1|-qeh0k8,44,356,1|-qeh0k7,154,357,1|-qcx401,154,357,1|-qcx400,150,203,1|-qak8g1,150,203,1|-qak8g0,149,4,0|-pibkg1,149,4,0|-pibkg0,150,203,1|-pgkok1,150,203,1|-pgkok0,91,186,1|-p84z81,91,186,1|-p84z80,150,203,1|-p6lcg1,150,203,1|-p6lcg0,149,4,0|-ontcc1,149,4,0|-ontcc0,14,9,0|-kmr1k1,14,9,0|-kmr1k0,149,4,0|5vb6bz,149,4,0|5vb6c0,150,203,1|64pzjz,150,203,1|64pzk0,149,4,0|6e33nz,149,4,0|6e33o0,150,203,1|6nhwvz,150,203,1|6nhww0,149,4,0|6wv0zz,149,4,0|6wv100,150,203,1|769u7z,150,203,1|769u80,149,4,0|7foszz,149,4,0|7fot00,150,203,1|7p1zvz,150,203,1|7p1zw0,149,4,0|7yf17z,149,4,0|7yf180,150,203,1|87s2jz,150,203,1|87s2k0,149,4,0|8h53vz,149,4,0|8h53w0,150,203,1|8qi57z,150,203,1|8qi580,149,4,0|8zv6jz,149,4,0|8zv6k0,150,203,1|9987vz,150,203,1|9987w0,149,4,0|9il97z,149,4,0|9il980,150,203,1|9ryajz,150,203,1|9ryak0,149,4,0|a1bbvz,149,4,0|a1bbw0,150,203,1|aaod7z,150,203,1|aaod80,149,4,0|ak1ejz,149,4,0|ak1ek0,150,203,1|atrejz,150,203,1|atrek0,149,4,0|b34fvz,149,4,0|b34fw0,15,4,1|bchjzz,15,4,1|bchk00,14,9,0|bi8ynz,14,9,0|bi8yo0,149,4,0|bluijz,149,4,0|bluik0,150,203,1|bv7jvz,150,203,1|bv7jw0,149,4,0|c4kl7z,149,4,0|c4kl80,150,203,1|cdxmjz,150,203,1|cdxmk0,149,4,0|cnanvz,149,4,0|cnanw0,150,203,1|cwnp7z,150,203,1|cwnp80,149,4,0|d60qjz,149,4,0|d60qk0,150,203,1|dfdrvz,150,203,1|dfdrw0,149,4,0|dp3rvz,149,4,0|dp3rw0,150,203,1|dzwnvz,150,203,1|dzwnw0,149,4,0|e7tujz,149,4,0|e7tuk0,150,203,1|eimqjz,150,203,1|eimqk0,149,4,0|eqjx7z,149,4,0|eqjx80,150,203,1|f1ct7z,150,203,1|f1ct80,149,4,0|f99zvz,149,4,0|f99zw0,150,203,1|fkfujz,150,203,1|fkfuk0,149,4,0|fs02jz,149,4,0|fs02k0,150,203,1|g35x7z,150,203,1|g35x80,149,4,0|gaq57z,149,4,0|gaq580,150,203,1|glvzvz,150,203,1|glvzw0,149,4,0|gtt6jz,149,4,0|gtt6k0,150,203,1|h4m2jz,150,203,1|h4m2k0,149,4,0|hcj97z,149,4,0|hcj980,150,203,1|hnc57z,150,203,1|hnc580,149,4,0|hv9bvz,149,4,0|hv9bw0,150,203,1|i6f6jz,150,203,1|i6f6k0,149,4,0|idzejz,149,4,0|idzek0,150,203,1|ip597z,150,203,1|ip5980,149,4,0|iwph7z,149,4,0|iwph80,150,203,1|j7vbvz,150,203,1|j7vbw0,149,4,0|jffjvz,149,4,0|jffjw0,150,203,1|jqlejz,150,203,1|jqlek0,149,4,0|jyil7z,149,4,0|jyil80,150,203,1|k9bh7z,150,203,1|k9bh80,149,4,0|kh8nvz,149,4,0|kh8nw0,150,203,1|ks1jvz,150,203,1|ks1jw0,149,4,0|kzyqjz,149,4,0|kzyqk0,150,203,1|lb4l7z,150,203,1|lb4l80,149,4,0|liot7z,149,4,0|liot80,149,203,0|ne0t3z,149,203,0|ne0t40,149,4,0|NaN,149,4,0\",\"Europe/Oslo|,0,197,0|-1353tzp,0,197,0|-1353tzo,8,8,0|-rzayo1,8,8,0|-rzayo0,9,9,1|-rskiw1,9,9,1|-rskiw0,8,8,0|-fc7s81,8,8,0|-fc7s80,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6dp81,9,9,1|-d6dp80,8,8,0|-cx0nw1,8,8,0|-cx0nw0,9,9,1|-cnnmk1,9,9,1|-cnnmk0,8,8,0|-5mxh81,8,8,0|-5mxh80,9,9,1|-5d7h81,9,9,1|-5d7h80,8,8,0|-53ufw1,8,8,0|-53ufw0,9,9,1|-4uhek1,9,9,1|-4uhek0,8,8,0|-4l4d81,8,8,0|-4l4d80,9,9,1|-4brbw1,9,9,1|-4brbw0,8,8,0|-42eak1,8,8,0|-42eak0,9,9,1|-3t1981,9,9,1|-3t1980,8,8,0|-3jo7w1,8,8,0|-3jo7w0,9,9,1|-3ab6k1,9,9,1|-3ab6k0,8,8,0|-30y581,8,8,0|-30y580,9,9,1|-2r8581,9,9,1|-2r8580,8,8,0|-2g2ak1,8,8,0|-2g2ak0,9,9,1|-28i2k1,9,9,1|-28i2k0,8,8,0|5cstfz,8,8,0|5cstg0,9,9,1|5lsw3z,9,9,1|5lsw40,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Paris|,0,7,0|-154gb3m,0,7,0|-154gb3l,5,7,0|-uozn3m,5,7,0|-uozn3l,6,1,0|-ry2lg1,6,1,0|-ry2lg0,7,8,1|-rsgqs1,7,8,1|-rsgqs0,6,1,0|-rjiis1,6,1,0|-rjiis0,7,8,1|-r9dpg1,7,8,1|-r9dpg0,6,1,0|-r1idg1,6,1,0|-r1idg0,7,8,1|-qqnms1,7,8,1|-qqnms0,6,1,0|-qj59g1,6,1,0|-qj59g0,7,8,1|-q7xk41,7,8,1|-q7xk40,6,1,0|-q15441,6,1,0|-q15440,7,8,1|-po6g41,7,8,1|-po6g40,6,1,0|-pgvhg1,6,1,0|-pgvhg0,7,8,1|-p5atg1,7,8,1|-p5atg0,6,1,0|-oxj6s1,6,1,0|-oxj6s0,7,8,1|-ong841,7,8,1|-ong840,6,1,0|-obkg41,6,1,0|-obkg40,7,8,1|-o4q5g1,7,8,1|-o4q5g0,6,1,0|-nvq2s1,6,1,0|-nvq2s0,7,8,1|-nm02s1,7,8,1|-nm02s0,6,1,0|-ncn1g1,6,1,0|-ncn1g0,7,8,1|-n3a041,7,8,1|-n3a040,6,1,0|-mt71g1,6,1,0|-mt71g0,7,8,1|-mkjxg1,7,8,1|-mkjxg0,6,1,0|-matxg1,6,1,0|-matxg0,7,8,1|-m1tus1,7,8,1|-m1tus0,6,1,0|-lrqw41,6,1,0|-lrqw40,7,8,1|-liqtg1,7,8,1|-liqtg0,6,1,0|-l8nus1,6,1,0|-l8nus0,7,8,1|-l00qs1,7,8,1|-l00qs0,6,1,0|-kqaqs1,6,1,0|-kqaqs0,7,8,1|-khao41,7,8,1|-khao40,6,1,0|-k77pg1,6,1,0|-k77pg0,7,8,1|-jyklg1,7,8,1|-jyklg0,6,1,0|-jp7k41,6,1,0|-jp7k40,7,8,1|-jfuis1,7,8,1|-jfuis0,6,1,0|-j6ug41,6,1,0|-j6ug40,7,8,1|-iwrhg1,7,8,1|-iwrhg0,6,1,0|-ineg41,6,1,0|-ineg40,7,8,1|-ie1es1,7,8,1|-ie1es0,6,1,0|-i51c41,6,1,0|-i51c40,7,8,1|-hvbc41,7,8,1|-hvbc40,6,1,0|-hl8dg1,6,1,0|-hl8dg0,7,8,1|-hcl9g1,7,8,1|-hcl9g0,6,1,0|-h38841,6,1,0|-h38840,7,8,1|-gtv6s1,7,8,1|-gtv6s0,6,1,0|-gkv441,6,1,0|-gkv440,7,8,1|-gb5441,7,8,1|-gb5440,6,1,0|-g125g1,6,1,0|-g125g0,7,8,1|-fpwas1,7,8,1|-fpwas0,6,1,0|-fkul41,6,1,0|-fkul40,7,8,1|-ff5c81,7,8,1|-ff5c80,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d8caw1,9,9,1|-d8caw0,153,9,1|-d62qs1,153,9,1|-d62qs0,7,8,1|-cx0nw1,7,8,1|-cx0nw0,153,9,1|-cofek1,153,9,1|-cofek0,8,8,0|396inz,8,8,0|396io0,9,9,1|3ijh7z,9,9,1|3ijh80,8,8,0|3s9mrz,8,8,0|3s9ms0,9,9,1|419pfz,9,9,1|419pg0,8,8,0|4azpfz,8,8,0|4azpg0,9,9,1|4kcqrz,9,9,1|4kcqs0,8,8,0|4tps3z,8,8,0|4tps40,9,9,1|532tfz,9,9,1|532tg0,8,8,0|5cstfz,8,8,0|5cstg0,9,9,1|5lsw3z,9,9,1|5lsw40,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Podgorica|,0,327,0|-18vsmgp,0,327,0|-18vsmgo,8,8,0|-ezayw1,8,8,0|-ezayw0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6dp81,9,9,1|-d6dp80,8,8,0|-cv5zw1,8,8,0|-cv5zw0,9,9,1|-cofek1,9,9,1|-cofek0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Prague|,0,329,0|-1qmkw09,0,329,0|-1qmkw08,5,329,0|-14u7uo9,5,329,0|-14u7uo8,8,8,0|-s0e081,8,8,0|-s0e080,9,9,1|-rsilg1,9,9,1|-rsilg0,8,8,0|-ridmk1,8,8,0|-ridmk0,9,9,1|-ragfw1,9,9,1|-ragfw0,8,8,0|-qznjw1,8,8,0|-qznjw0,9,9,1|-qrqd81,9,9,1|-qrqd80,8,8,0|-fizzw1,8,8,0|-fizzw0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6dp81,9,9,1|-d6dp80,8,8,0|-cx0nw1,8,8,0|-cx0nw0,9,9,1|-cnnmk1,9,9,1|-cnnmk0,8,8,0|-cchrw1,8,8,0|-cchrw0,9,9,1|-c4mfw1,9,9,1|-c4mfw0,8,8,0|-c1qns1,8,8,0|-c1qns0,1,1,1|-bxf3s1,1,1,1|-bxf3s0,8,8,0|-bujh81,8,8,0|-bujh80,9,9,1|-blwd81,9,9,1|-blwd80,8,8,0|-bbtek1,8,8,0|-bbtek0,9,9,1|-b36ak1,9,9,1|-b36ak0,8,8,0|-ati581,8,8,0|-ati580,9,9,1|-akg7w1,9,9,1|-akg7w0,8,8,0|4tps3z,8,8,0|4tps40,9,9,1|532tfz,9,9,1|532tg0,8,8,0|5cstfz,8,8,0|5cstg0,9,9,1|5lsw3z,9,9,1|5lsw40,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Riga|,0,358,0|-1ayy74z,0,358,0|-1ayy74y,136,358,0|-qznlkz,136,358,0|-qznlky,155,359,1|-qrqewz,155,359,1|-qrqewy,136,358,0|-qhllkz,136,358,0|-qhllky,155,359,1|-qez5kz,155,359,1|-qez5ky,136,358,0|-ms0hsz,136,358,0|-ms0hsy,14,9,0|-fciw81,14,9,0|-fciw80,149,4,0|-evjv01,149,4,0|-evjv00,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6dp81,9,9,1|-d6dp80,8,8,0|-d5thg1,8,8,0|-d5thg0,149,4,0|5vb6bz,149,4,0|5vb6c0,150,203,1|64pzjz,150,203,1|64pzk0,149,4,0|6e33nz,149,4,0|6e33o0,150,203,1|6nhwvz,150,203,1|6nhww0,149,4,0|6wv0zz,149,4,0|6wv100,150,203,1|769u7z,150,203,1|769u80,149,4,0|7foszz,149,4,0|7fot00,150,203,1|7p1zvz,150,203,1|7p1zw0,149,4,0|7yf17z,149,4,0|7yf180,150,203,1|87s2jz,150,203,1|87s2k0,149,4,0|8h53vz,149,4,0|8h53w0,150,203,1|8qi57z,150,203,1|8qi580,149,4,0|8zv6jz,149,4,0|8zv6k0,150,203,1|9987vz,150,203,1|9987w0,149,4,0|9il97z,149,4,0|9il980,150,203,1|9ryajz,150,203,1|9ryak0,149,4,0|a1bbvz,149,4,0|a1bbw0,15,4,1|aaofzz,15,4,1|aaog00,14,9,0|ak1hbz,14,9,0|ak1hc0,15,4,1|atrhbz,15,4,1|atrhc0,14,9,0|b34inz,14,9,0|b34io0,15,4,1|bchjzz,15,4,1|bchk00,14,9,0|blulbz,14,9,0|blulc0,15,4,1|bv7mnz,15,4,1|bv7mo0,14,9,0|c4knzz,14,9,0|c4ko00,15,4,1|cdxpbz,15,4,1|cdxpc0,14,9,0|cnaqnz,14,9,0|cnaqo0,15,4,1|cwnrzz,15,4,1|cwns00,14,9,0|d60tbz,14,9,0|d60tc0,15,4,1|dfdunz,15,4,1|dfduo0,14,9,0|dp3unz,14,9,0|dp3uo0,15,4,1|dygvzz,15,4,1|dygw00,14,9,0|e7u03z,14,9,0|e7u040,15,4,1|eimw3z,15,4,1|eimw40,14,9,0|eqk2rz,14,9,0|eqk2s0,15,4,1|f1cyrz,15,4,1|f1cys0,14,9,0|f9a5fz,14,9,0|f9a5g0,15,4,1|fkg03z,15,4,1|fkg040,14,9,0|gaqarz,14,9,0|gaqas0,15,4,1|glw5fz,15,4,1|glw5g0,14,9,0|gttc3z,14,9,0|gttc40,15,4,1|h4m83z,15,4,1|h4m840,14,9,0|hcjerz,14,9,0|hcjes0,15,4,1|hncarz,15,4,1|hncas0,14,9,0|hv9hfz,14,9,0|hv9hg0,15,4,1|i6fc3z,15,4,1|i6fc40,14,9,0|idzk3z,14,9,0|idzk40,15,4,1|ip5erz,15,4,1|ip5es0,14,9,0|iwpmrz,14,9,0|iwpms0,15,4,1|j7vhfz,15,4,1|j7vhg0,14,9,0|jffpfz,14,9,0|jffpg0,15,4,1|jqlk3z,15,4,1|jqlk40,14,9,0|jyiqrz,14,9,0|jyiqs0,15,4,1|k9bmrz,15,4,1|k9bms0,14,9,0|kh8tfz,14,9,0|kh8tg0,15,4,1|ks1pfz,15,4,1|ks1pg0,14,9,0|kzyw3z,14,9,0|kzyw40,15,4,1|lb4qrz,15,4,1|lb4qs0,14,9,0|lioyrz,14,9,0|lioys0,15,4,1|ltutfz,15,4,1|ltutg0,14,9,0|m1f1fz,14,9,0|m1f1g0,15,4,1|mckw3z,15,4,1|mckw40,14,9,0|mki2rz,14,9,0|mki2s0,15,4,1|mvayrz,15,4,1|mvays0,14,9,0|n385fz,14,9,0|n385g0,15,4,1|ne11fz,15,4,1|ne11g0,14,9,0|nly83z,14,9,0|nly840,15,4,1|nwr43z,15,4,1|nwr440,14,9,0|o4oarz,14,9,0|o4oas0,15,4,1|ofu5fz,15,4,1|ofu5g0,14,9,0|onedfz,14,9,0|onedg0,15,4,1|oyk83z,15,4,1|oyk840,14,9,0|p64g3z,14,9,0|p64g40,15,4,1|phaarz,15,4,1|phaas0,14,9,0|pp7hfz,14,9,0|pp7hg0,15,4,1|q00dfz,15,4,1|q00dg0,14,9,0|q7xk3z,14,9,0|q7xk40,15,4,1|qiqg3z,15,4,1|qiqg40,14,9,0|qqnmrz,14,9,0|qqnms0,15,4,1|r1thfz,15,4,1|r1thg0,14,9,0|r9dpfz,14,9,0|r9dpg0,15,4,1|rkjk3z,15,4,1|rkjk40,14,9,0|rs3s3z,14,9,0|rs3s40,15,4,1|s39mrz,15,4,1|s39ms0,14,9,0|sb6tfz,14,9,0|sb6tg0,15,4,1|slzpfz,15,4,1|slzpg0,14,9,0|stww3z,14,9,0|stww40,15,4,1|t4ps3z,15,4,1|t4ps40,14,9,0|tcmyrz,14,9,0|tcmys0,15,4,1|tnfurz,15,4,1|tnfus0,14,9,0|tvd1fz,14,9,0|tvd1g0,15,4,1|u6iw3z,15,4,1|u6iw40,14,9,0|ue343z,14,9,0|ue3440,15,4,1|up8yrz,15,4,1|up8ys0,14,9,0|uwt6rz,14,9,0|uwt6s0,15,4,1|v7z1fz,15,4,1|v7z1g0,14,9,0|vfw83z,14,9,0|vfw840,15,4,1|vqp43z,15,4,1|vqp440,14,9,0|vymarz,14,9,0|vymas0,15,4,1|w9f6rz,15,4,1|w9f6s0,14,9,0|whcdfz,14,9,0|whcdg0,15,4,1|wsi83z,15,4,1|wsi840,14,9,0|x02g3z,14,9,0|x02g40,15,4,1|xb8arz,15,4,1|xb8as0,14,9,0|xisirz,14,9,0|xisis0,15,4,1|xtydfz,15,4,1|xtydg0,14,9,0|y1ilfz,14,9,0|y1ilg0,15,4,1|ycog3z,15,4,1|ycog40,14,9,0|yklmrz,14,9,0|yklms0,15,4,1|yveirz,15,4,1|yveis0,14,9,0|z3bpfz,14,9,0|z3bpg0,15,4,1|ze4lfz,15,4,1|ze4lg0,14,9,0|zm1s3z,14,9,0|zm1s40,15,4,1|zx7mrz,15,4,1|zx7ms0,14,9,0|104rurz,14,9,0|104rus0,15,4,1|10fxpfz,15,4,1|10fxpg0,14,9,0|10nhxfz,14,9,0|10nhxg0,15,4,1|10yns3z,15,4,1|10yns40,14,9,0|116kyrz,14,9,0|116kys0,15,4,1|11hdurz,15,4,1|11hdus0,14,9,0|11pb1fz,14,9,0|11pb1g0,15,4,1|1203xfz,15,4,1|1203xg0,14,9,0|128143z,14,9,0|1281440,15,4,1|12iu03z,15,4,1|12iu040,14,9,0|12qr6rz,14,9,0|12qr6s0,15,4,1|131x1fz,15,4,1|131x1g0,14,9,0|139h9fz,14,9,0|139h9g0,15,4,1|13kn43z,15,4,1|13kn440,14,9,0|13s7c3z,14,9,0|13s7c40,15,4,1|143d6rz,15,4,1|143d6s0,14,9,0|14badfz,14,9,0|14badg0,15,4,1|14m39fz,15,4,1|14m39g0,14,9,0|14u0g3z,14,9,0|14u0g40,15,4,1|154tc3z,15,4,1|154tc40,14,9,0|15cqirz,14,9,0|15cqis0,15,4,1|15nwdfz,15,4,1|15nwdg0,14,9,0|15vglfz,14,9,0|15vglg0,15,4,1|166mg3z,15,4,1|166mg40,14,9,0|16e6o3z,14,9,0|16e6o40,15,4,1|16pcirz,15,4,1|16pcis0,14,9,0|16x9pfz,14,9,0|16x9pg0,15,4,1|1782lfz,15,4,1|1782lg0,14,9,0|17fzs3z,14,9,0|17fzs40,15,4,1|17qso3z,15,4,1|17qso40,14,9,0|17ypurz,14,9,0|17ypus0,15,4,1|189iqrz,15,4,1|189iqs0,14,9,0|18hfxfz,14,9,0|18hfxg0,15,4,1|18sls3z,15,4,1|18sls40,14,9,0|190603z,14,9,0|1906040,15,4,1|19bburz,15,4,1|19bbus0,14,9,0|19iw2rz,14,9,0|19iw2s0,15,4,1|19u1xfz,15,4,1|19u1xg0,14,9,0|1a1z43z,14,9,0|1a1z440,15,4,1|1acs03z,15,4,1|1acs040,14,9,0|1akp6rz,14,9,0|1akp6s0,15,4,1|1avi2rz,15,4,1|1avi2s0,14,9,0|1b3f9fz,14,9,0|1b3f9g0,15,4,1|1bel43z,15,4,1|1bel440,14,9,0|1bm5c3z,14,9,0|1bm5c40,15,4,1|1bxb6rz,15,4,1|1bxb6s0,14,9,0|1c4verz,14,9,0|1c4ves0,15,4,1|1cg19fz,15,4,1|1cg19g0,14,9,0|1cnlhfz,14,9,0|1cnlhg0,15,4,1|1cyrc3z,15,4,1|1cyrc40,14,9,0|1d6oirz,14,9,0|1d6ois0,15,4,1|1dhherz,15,4,1|1dhhes0,14,9,0|1dpelfz,14,9,0|1dpelg0,15,4,1|1e07hfz,15,4,1|1e07hg0,14,9,0|1e84o3z,14,9,0|1e84o40,15,4,1|1ejairz,15,4,1|1ejais0,14,9,0|1equqrz,14,9,0|1equqs0,15,4,1|1f20lfz,15,4,1|1f20lg0,14,9,0|1f9ktfz,14,9,0|1f9ktg0,15,4,1|1fkqo3z,15,4,1|1fkqo40,14,9,0|1fsnurz,14,9,0|1fsnus0,15,4,1|1g3gqrz,15,4,1|1g3gqs0,14,9,0|1gbdxfz,14,9,0|1gbdxg0,15,4,1|1gm6tfz,15,4,1|1gm6tg0,14,9,0|1gu403z,14,9,0|1gu4040,15,4,1|1h4ww3z,15,4,1|1h4ww40,14,9,0|1hcu2rz,14,9,0|1hcu2s0,15,4,1|1hnzxfz,15,4,1|1hnzxg0,14,9,0|1hvk5fz,14,9,0|1hvk5g0,15,4,1|1i6q03z,15,4,1|1i6q040,14,9,0|1iea83z,14,9,0|1iea840,15,4,1|1ipg2rz,15,4,1|1ipg2s0,14,9,0|1ixd9fz,14,9,0|1ixd9g0,15,4,1|1j865fz,15,4,1|1j865g0,14,9,0|1jg3c3z,14,9,0|1jg3c40,15,4,1|1jqw83z,15,4,1|1jqw840,14,9,0|1jyterz,14,9,0|1jytes0,15,4,1|1k9z9fz,15,4,1|1k9z9g0,14,9,0|1khjhfz,14,9,0|1khjhg0,15,4,1|1kspc3z,15,4,1|1kspc40,14,9,0|1l09k3z,14,9,0|1l09k40,15,4,1|1lbferz,15,4,1|1lbfes0,14,9,0|1ljclfz,14,9,0|1ljclg0,15,4,1|1lu5hfz,15,4,1|1lu5hg0,14,9,0|1m22o3z,14,9,0|1m22o40,15,4,1|1mcvk3z,15,4,1|1mcvk40,14,9,0|1mksqrz,14,9,0|1mksqs0,15,4,1|1mvlmrz,15,4,1|1mvlms0,14,9,0|1n3itfz,14,9,0|1n3itg0,15,4,1|1neoo3z,15,4,1|1neoo40,14,9,0|1nm8w3z,14,9,0|1nm8w40,15,4,1|1nxeqrz,15,4,1|1nxeqs0,14,9,0|1o4yyrz,14,9,0|1o4yys0,15,4,1|1og4tfz,15,4,1|1og4tg0,14,9,0|1oo203z,14,9,0|1oo2040,15,4,1|1oyuw3z,15,4,1|1oyuw40,14,9,0|1p6s2rz,14,9,0|1p6s2s0,15,4,1|1phkyrz,15,4,1|1phkys0,14,9,0|1ppi5fz,14,9,0|1ppi5g0,15,4,1|1q0o03z,15,4,1|1q0o040,14,9,0|1q8883z,14,9,0|1q88840,15,4,1|1qje2rz,15,4,1|1qje2s0,14,9,0|1qqyarz,14,9,0|1qqyas0,15,4,1|1r245fz,15,4,1|1r245g0,14,9,0|1r9odfz,14,9,0|1r9odg0,15,4,1|1rku83z,15,4,1|1rku840,14,9,0|1rsrerz,14,9,0|1rsres0,15,4,1|1s3karz,15,4,1|1s3kas0,14,9,0|1sbhhfz,14,9,0|1sbhhg0,15,4,1|1smadfz,15,4,1|1smadg0,14,9,0|1su7k3z,14,9,0|1su7k40,15,4,1|1t5derz,15,4,1|1t5des0,14,9,0|1tcxmrz,14,9,0|1tcxms0,15,4,1|1to3hfz,15,4,1|1to3hg0,14,9,0|1tvnpfz,14,9,0|1tvnpg0,15,4,1|1u6tk3z,15,4,1|1u6tk40,14,9,0|1ueqqrz,14,9,0|1ueqqs0,15,4,1|1upjmrz,15,4,1|1upjms0,14,9,0|1uxgtfz,14,9,0|1uxgtg0,15,4,1|1v89pfz,15,4,1|1v89pg0,14,9,0|1vg6w3z,14,9,0|1vg6w40,15,4,1|1vqzs3z,15,4,1|1vqzs40,14,9,0|NaN,14,9,0\",\"Europe/Rome|,0,360,0|-1hs7rn9,0,360,0|-1hs7rn8,136,360,0|-13r0qs1,136,360,0|-13r0qs0,8,8,0|-rymys1,8,8,0|-rymys0,9,9,1|-rsio81,9,9,1|-rsio80,8,8,0|-rj5k41,8,8,0|-rj5k40,9,9,1|-r9qqw1,9,9,1|-r9qqw0,8,8,0|-r1idg1,8,8,0|-r1idg0,9,9,1|-qqnpk1,9,9,1|-qqnpk0,8,8,0|-qj59g1,8,8,0|-qj59g0,9,9,1|-q7zhk1,9,9,1|-q7zhk0,8,8,0|-pzcas1,8,8,0|-pzcas0,9,9,1|-ppzc81,9,9,1|-ppzc80,8,8,0|-ff59g1,8,8,0|-ff59g0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d75h81,9,9,1|-d75h80,8,8,0|-cx0nw1,8,8,0|-cx0nw0,9,9,1|-cohes1,9,9,1|-cohes0,8,8,0|-cf2d81,8,8,0|-cf2d80,9,9,1|-c4mfw1,9,9,1|-c4mfw0,8,8,0|-bwcg41,8,8,0|-bwcg40,9,9,1|-blwis1,9,9,1|-blwis0,8,8,0|-bec581,8,8,0|-bec580,9,9,1|-b36ak1,9,9,1|-b36ak0,8,8,0|-1vwis1,8,8,0|-1vwis0,9,9,1|-1pf9k1,9,9,1|-1pf9k0,8,8,0|-1cthg1,8,8,0|-1cthg0,9,9,1|-16p441,9,9,1|-16p440,8,8,0|-u3es1,8,8,0|-u3es0,9,9,1|-nz1g1,9,9,1|-nz1g0,8,8,0|-b0dg1,8,8,0|-b0dg0,9,9,1|-4w041,9,9,1|-4w040,8,8,0|7pp7z,8,8,0|7pp80,9,9,1|du2jz,9,9,1|du2k0,8,8,0|q2t7z,8,8,0|q2t80,9,9,1|wk57z,9,9,1|wk580,8,8,0|195ujz,8,8,0|195uk0,9,9,1|1fn6jz,9,9,1|1fn6k0,8,8,0|1s8vvz,8,8,0|1s8vw0,9,9,1|1yd97z,9,9,1|1yd980,8,8,0|2alzvz,8,8,0|2alzw0,9,9,1|2h3bvz,9,9,1|2h3bw0,8,8,0|2tp17z,8,8,0|2tp180,9,9,1|2ztejz,9,9,1|2ztek0,8,8,0|3cf3vz,8,8,0|3cf3w0,9,9,1|3ijh7z,9,9,1|3ijh80,8,8,0|3us7vz,8,8,0|3us7w0,9,9,1|419jvz,9,9,1|419jw0,8,8,0|4dv97z,8,8,0|4dv980,9,9,1|4kcl7z,9,9,1|4kcl80,8,8,0|4wlbvz,8,8,0|4wlbw0,9,9,1|532nvz,9,9,1|532nw0,8,8,0|5cstfz,8,8,0|5cstg0,9,9,1|5lsw3z,9,9,1|5lsw40,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Samara|,0,361,0|-qcx401,0,361,0|-qcx400,100,4,0|-kmr4c1,100,4,0|-kmr4c0,105,203,0|5vb3jz,105,203,0|5vb3k0,91,186,1|64pwrz,91,186,1|64pws0,105,203,0|6e30vz,105,203,0|6e30w0,91,186,1|6nhu3z,91,186,1|6nhu40,105,203,0|6wuy7z,105,203,0|6wuy80,91,186,1|769rfz,91,186,1|769rg0,105,203,0|7foq7z,105,203,0|7foq80,91,186,1|7p1x3z,91,186,1|7p1x40,105,203,0|7yeyfz,105,203,0|7yeyg0,91,186,1|87rzrz,91,186,1|87rzs0,105,203,0|8h513z,105,203,0|8h5140,91,186,1|8qi2fz,91,186,1|8qi2g0,105,203,0|8zv3rz,105,203,0|8zv3s0,91,186,1|99853z,91,186,1|998540,105,203,0|9il6fz,105,203,0|9il6g0,91,186,1|9ry7rz,91,186,1|9ry7s0,105,203,0|a1b93z,105,203,0|a1b940,105,203,1|aaod7z,105,203,1|aaod80,100,4,0|ak1ejz,100,4,0|ak1ek0,105,203,1|atrejz,105,203,1|atrek0,100,4,0|b34fvz,100,4,0|b34fw0,100,4,1|bchjzz,100,4,1|bchk00,100,4,0|bdkfzz,100,4,0|bdkg00,105,203,0|blufrz,105,203,0|blufs0,91,186,1|bv7h3z,91,186,1|bv7h40,105,203,0|c4kifz,105,203,0|c4kig0,91,186,1|cdxjrz,91,186,1|cdxjs0,105,203,0|cnal3z,105,203,0|cnal40,91,186,1|cwnmfz,91,186,1|cwnmg0,105,203,0|d60nrz,105,203,0|d60ns0,91,186,1|dfdp3z,91,186,1|dfdp40,105,203,0|dp3p3z,105,203,0|dp3p40,91,186,1|dzwl3z,91,186,1|dzwl40,105,203,0|e7trrz,105,203,0|e7trs0,91,186,1|eimnrz,91,186,1|eimns0,105,203,0|eqjufz,105,203,0|eqjug0,91,186,1|f1cqfz,91,186,1|f1cqg0,105,203,0|f99x3z,105,203,0|f99x40,91,186,1|fkfrrz,91,186,1|fkfrs0,105,203,0|frzzrz,105,203,0|frzzs0,91,186,1|g35ufz,91,186,1|g35ug0,105,203,0|gaq2fz,105,203,0|gaq2g0,91,186,1|glvx3z,91,186,1|glvx40,105,203,0|gtt3rz,105,203,0|gtt3s0,91,186,1|h4lzrz,91,186,1|h4lzs0,105,203,0|hcj6fz,105,203,0|hcj6g0,91,186,1|hnc2fz,91,186,1|hnc2g0,105,203,0|hv993z,105,203,0|hv9940,91,186,1|i6f3rz,91,186,1|i6f3s0,105,203,0|idzbrz,105,203,0|idzbs0,91,186,1|ip56fz,91,186,1|ip56g0,105,203,0|iwpefz,105,203,0|iwpeg0,91,186,1|j7v93z,91,186,1|j7v940,105,203,0|jffh3z,105,203,0|jffh40,91,186,1|jqlbrz,91,186,1|jqlbs0,105,203,0|jyiifz,105,203,0|jyiig0,91,186,1|k9befz,91,186,1|k9beg0,105,203,0|kh8l3z,105,203,0|kh8l40,91,186,1|ks1h3z,91,186,1|ks1h40,105,203,0|kzynrz,105,203,0|kzyns0,105,203,1|lb4l7z,105,203,1|lb4l80,100,4,0|liot7z,100,4,0|liot80,105,203,0|NaN,105,203,0\",\"Europe/San_Marino|,0,360,0|-1hs7rn9,0,360,0|-1hs7rn8,136,360,0|-13r0qs1,136,360,0|-13r0qs0,8,8,0|-rymys1,8,8,0|-rymys0,9,9,1|-rsio81,9,9,1|-rsio80,8,8,0|-rj5k41,8,8,0|-rj5k40,9,9,1|-r9qqw1,9,9,1|-r9qqw0,8,8,0|-r1idg1,8,8,0|-r1idg0,9,9,1|-qqnpk1,9,9,1|-qqnpk0,8,8,0|-qj59g1,8,8,0|-qj59g0,9,9,1|-q7zhk1,9,9,1|-q7zhk0,8,8,0|-pzcas1,8,8,0|-pzcas0,9,9,1|-ppzc81,9,9,1|-ppzc80,8,8,0|-ff59g1,8,8,0|-ff59g0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d75h81,9,9,1|-d75h80,8,8,0|-cx0nw1,8,8,0|-cx0nw0,9,9,1|-cohes1,9,9,1|-cohes0,8,8,0|-cf2d81,8,8,0|-cf2d80,9,9,1|-c4mfw1,9,9,1|-c4mfw0,8,8,0|-bwcg41,8,8,0|-bwcg40,9,9,1|-blwis1,9,9,1|-blwis0,8,8,0|-bec581,8,8,0|-bec580,9,9,1|-b36ak1,9,9,1|-b36ak0,8,8,0|-1vwis1,8,8,0|-1vwis0,9,9,1|-1pf9k1,9,9,1|-1pf9k0,8,8,0|-1cthg1,8,8,0|-1cthg0,9,9,1|-16p441,9,9,1|-16p440,8,8,0|-u3es1,8,8,0|-u3es0,9,9,1|-nz1g1,9,9,1|-nz1g0,8,8,0|-b0dg1,8,8,0|-b0dg0,9,9,1|-4w041,9,9,1|-4w040,8,8,0|7pp7z,8,8,0|7pp80,9,9,1|du2jz,9,9,1|du2k0,8,8,0|q2t7z,8,8,0|q2t80,9,9,1|wk57z,9,9,1|wk580,8,8,0|195ujz,8,8,0|195uk0,9,9,1|1fn6jz,9,9,1|1fn6k0,8,8,0|1s8vvz,8,8,0|1s8vw0,9,9,1|1yd97z,9,9,1|1yd980,8,8,0|2alzvz,8,8,0|2alzw0,9,9,1|2h3bvz,9,9,1|2h3bw0,8,8,0|2tp17z,8,8,0|2tp180,9,9,1|2ztejz,9,9,1|2ztek0,8,8,0|3cf3vz,8,8,0|3cf3w0,9,9,1|3ijh7z,9,9,1|3ijh80,8,8,0|3us7vz,8,8,0|3us7w0,9,9,1|419jvz,9,9,1|419jw0,8,8,0|4dv97z,8,8,0|4dv980,9,9,1|4kcl7z,9,9,1|4kcl80,8,8,0|4wlbvz,8,8,0|4wlbw0,9,9,1|532nvz,9,9,1|532nw0,8,8,0|5cstfz,8,8,0|5cstg0,9,9,1|5lsw3z,9,9,1|5lsw40,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Sarajevo|,0,327,0|-18vsmgp,0,327,0|-18vsmgo,8,8,0|-ezayw1,8,8,0|-ezayw0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6dp81,9,9,1|-d6dp80,8,8,0|-cv5zw1,8,8,0|-cv5zw0,9,9,1|-cofek1,9,9,1|-cofek0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Saratov|,0,362,0|-qcx401,0,362,0|-qcx400,100,4,0|-kmr4c1,100,4,0|-kmr4c0,105,203,0|5vb3jz,105,203,0|5vb3k0,91,186,1|64pwrz,91,186,1|64pws0,105,203,0|6e30vz,105,203,0|6e30w0,91,186,1|6nhu3z,91,186,1|6nhu40,105,203,0|6wuy7z,105,203,0|6wuy80,91,186,1|769rfz,91,186,1|769rg0,105,203,0|7foq7z,105,203,0|7foq80,91,186,1|7p1x3z,91,186,1|7p1x40,105,203,0|7yeyfz,105,203,0|7yeyg0,91,186,1|87rzrz,91,186,1|87rzs0,105,203,0|8h513z,105,203,0|8h5140,91,186,1|8qi2fz,91,186,1|8qi2g0,105,203,0|8zv3rz,105,203,0|8zv3s0,91,186,1|99853z,91,186,1|998540,105,203,0|9il6fz,105,203,0|9il6g0,105,203,1|9ryajz,105,203,1|9ryak0,100,4,0|a1bbvz,100,4,0|a1bbw0,105,203,1|aaod7z,105,203,1|aaod80,100,4,0|ak1ejz,100,4,0|ak1ek0,105,203,1|atrejz,105,203,1|atrek0,100,4,0|b34fvz,100,4,0|b34fw0,105,203,0|blufrz,105,203,0|blufs0,105,203,1|bv7jvz,105,203,1|bv7jw0,100,4,0|c4kl7z,100,4,0|c4kl80,105,203,1|cdxmjz,105,203,1|cdxmk0,100,4,0|cnanvz,100,4,0|cnanw0,105,203,1|cwnp7z,105,203,1|cwnp80,100,4,0|d60qjz,100,4,0|d60qk0,105,203,1|dfdrvz,105,203,1|dfdrw0,100,4,0|dp3rvz,100,4,0|dp3rw0,105,203,1|dzwnvz,105,203,1|dzwnw0,100,4,0|e7tujz,100,4,0|e7tuk0,105,203,1|eimqjz,105,203,1|eimqk0,100,4,0|eqjx7z,100,4,0|eqjx80,105,203,1|f1ct7z,105,203,1|f1ct80,100,4,0|f99zvz,100,4,0|f99zw0,105,203,1|fkfujz,105,203,1|fkfuk0,100,4,0|fs02jz,100,4,0|fs02k0,105,203,1|g35x7z,105,203,1|g35x80,100,4,0|gaq57z,100,4,0|gaq580,105,203,1|glvzvz,105,203,1|glvzw0,100,4,0|gtt6jz,100,4,0|gtt6k0,105,203,1|h4m2jz,105,203,1|h4m2k0,100,4,0|hcj97z,100,4,0|hcj980,105,203,1|hnc57z,105,203,1|hnc580,100,4,0|hv9bvz,100,4,0|hv9bw0,105,203,1|i6f6jz,105,203,1|i6f6k0,100,4,0|idzejz,100,4,0|idzek0,105,203,1|ip597z,105,203,1|ip5980,100,4,0|iwph7z,100,4,0|iwph80,105,203,1|j7vbvz,105,203,1|j7vbw0,100,4,0|jffjvz,100,4,0|jffjw0,105,203,1|jqlejz,105,203,1|jqlek0,100,4,0|jyil7z,100,4,0|jyil80,105,203,1|k9bh7z,105,203,1|k9bh80,100,4,0|kh8nvz,100,4,0|kh8nw0,105,203,1|ks1jvz,105,203,1|ks1jw0,100,4,0|kzyqjz,100,4,0|kzyqk0,105,203,1|lb4l7z,105,203,1|lb4l80,100,4,0|liot7z,100,4,0|liot80,105,203,0|ne0t3z,105,203,0|ne0t40,100,4,0|ohmt7z,100,4,0|ohmt80,105,203,0|NaN,105,203,0\",\"Europe/Simferopol|,0,363,0|-1ayy8zd,0,363,0|-1ayy8zc,84,364,0|-nu12ap,84,364,0|-nu12ao,14,9,0|-kmr1k1,14,9,0|-kmr1k0,149,4,0|-ep8301,149,4,0|-ep8300,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-df8g81,9,9,1|-df8g80,149,4,0|5vb6bz,149,4,0|5vb6c0,150,203,1|64pzjz,150,203,1|64pzk0,149,4,0|6e33nz,149,4,0|6e33o0,150,203,1|6nhwvz,150,203,1|6nhww0,149,4,0|6wv0zz,149,4,0|6wv100,150,203,1|769u7z,150,203,1|769u80,149,4,0|7foszz,149,4,0|7fot00,150,203,1|7p1zvz,150,203,1|7p1zw0,149,4,0|7yf17z,149,4,0|7yf180,150,203,1|87s2jz,150,203,1|87s2k0,149,4,0|8h53vz,149,4,0|8h53w0,150,203,1|8qi57z,150,203,1|8qi580,149,4,0|8zv6jz,149,4,0|8zv6k0,150,203,1|9987vz,150,203,1|9987w0,149,4,0|9il97z,149,4,0|9il980,150,203,1|9ryajz,150,203,1|9ryak0,149,4,0|a1bbvz,149,4,0|a1bbw0,150,203,1|aaod7z,150,203,1|aaod80,149,4,0|ap2vvz,149,4,0|ap2vw0,14,9,0|blufrz,14,9,0|blufs0,15,4,1|bv7ebz,15,4,1|bv7ec0,14,9,0|c4kifz,14,9,0|c4kig0,15,4,1|cdxgzz,15,4,1|cdxh00,14,9,0|cnal3z,14,9,0|cnal40,15,4,1|cp3bnz,15,4,1|cp3bo0,150,203,1|cwngvz,150,203,1|cwngw0,149,4,0|d60kzz,149,4,0|d60l00,150,203,1|dfdjjz,150,203,1|dfdjk0,149,4,0|dp3mbz,149,4,0|dp3mc0,150,203,1|dzwqnz,150,203,1|dzwqo0,149,4,0|e7u03z,149,4,0|e7u040,15,4,1|eimw3z,15,4,1|eimw40,14,9,0|eqk2rz,14,9,0|eqk2s0,15,4,1|f1cyrz,15,4,1|f1cys0,14,9,0|f9a5fz,14,9,0|f9a5g0,15,4,1|fkg03z,15,4,1|fkg040,14,9,0|fs083z,14,9,0|fs0840,15,4,1|g362rz,15,4,1|g362s0,14,9,0|gaqarz,14,9,0|gaqas0,15,4,1|glw5fz,15,4,1|glw5g0,14,9,0|gttc3z,14,9,0|gttc40,15,4,1|h4m83z,15,4,1|h4m840,14,9,0|hcjerz,14,9,0|hcjes0,15,4,1|hncarz,15,4,1|hncas0,14,9,0|hv9hfz,14,9,0|hv9hg0,15,4,1|i6fc3z,15,4,1|i6fc40,14,9,0|idzk3z,14,9,0|idzk40,15,4,1|ip5erz,15,4,1|ip5es0,14,9,0|iwpmrz,14,9,0|iwpms0,15,4,1|j7vhfz,15,4,1|j7vhg0,14,9,0|jffpfz,14,9,0|jffpg0,15,4,1|jqlk3z,15,4,1|jqlk40,14,9,0|jyiqrz,14,9,0|jyiqs0,15,4,1|k9bmrz,15,4,1|k9bms0,14,9,0|kh8tfz,14,9,0|kh8tg0,15,4,1|ks1pfz,15,4,1|ks1pg0,14,9,0|kzyw3z,14,9,0|kzyw40,15,4,1|lb4qrz,15,4,1|lb4qs0,14,9,0|lioyrz,14,9,0|lioys0,15,4,1|ltutfz,15,4,1|ltutg0,14,9,0|m1f1fz,14,9,0|m1f1g0,15,4,1|mckw3z,15,4,1|mckw40,14,9,0|mki2rz,14,9,0|mki2s0,15,4,1|mvayrz,15,4,1|mvays0,14,9,0|n382nz,14,9,0|n382o0,149,203,0|ne0t3z,149,203,0|ne0t40,149,4,0|NaN,149,4,0\",\"Europe/Skopje|,0,327,0|-18vsmgp,0,327,0|-18vsmgo,8,8,0|-ezayw1,8,8,0|-ezayw0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6dp81,9,9,1|-d6dp80,8,8,0|-cv5zw1,8,8,0|-cv5zw0,9,9,1|-cofek1,9,9,1|-cofek0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Sofia|,0,365,0|-1ayy6zh,0,365,0|-1ayy6zg,117,345,0|-136r6qx,117,345,0|-136r6qw,14,9,0|-e6dzw1,14,9,0|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6dp81,9,9,1|-d6dp80,8,8,0|-cx0l41,8,8,0|-cx0l40,14,9,0|4tpgzz,14,9,0|4tph00,15,4,1|534frz,15,4,1|534fs0,14,9,0|5csibz,14,9,0|5csic0,15,4,1|5luifz,15,4,1|5luig0,14,9,0|5vikzz,14,9,0|5vil00,15,4,1|64it7z,15,4,1|64it80,14,9,0|6e8nnz,14,9,0|6e8no0,15,4,1|6n8ynz,15,4,1|6n8yo0,14,9,0|6wlzzz,14,9,0|6wm000,15,4,1|75z1bz,15,4,1|75z1c0,14,9,0|7fc2nz,14,9,0|7fc2o0,15,4,1|7p22nz,15,4,1|7p22o0,14,9,0|7yf3zz,14,9,0|7yf400,15,4,1|87s5bz,15,4,1|87s5c0,14,9,0|8h56nz,14,9,0|8h56o0,15,4,1|8qi7zz,15,4,1|8qi800,14,9,0|8zv9bz,14,9,0|8zv9c0,15,4,1|998anz,15,4,1|998ao0,14,9,0|9ilbzz,14,9,0|9ilc00,15,4,1|9rydbz,15,4,1|9rydc0,14,9,0|a1benz,14,9,0|a1beo0,15,4,1|aaofzz,15,4,1|aaog00,14,9,0|ak1hbz,14,9,0|ak1hc0,15,4,1|atrhbz,15,4,1|atrhc0,14,9,0|b34d3z,14,9,0|b34d40,15,4,1|bchbnz,15,4,1|bchbo0,14,9,0|blufrz,14,9,0|blufs0,15,4,1|bv7ebz,15,4,1|bv7ec0,14,9,0|c4kifz,14,9,0|c4kig0,15,4,1|cdxgzz,15,4,1|cdxh00,14,9,0|cnal3z,14,9,0|cnal40,15,4,1|cwnjnz,15,4,1|cwnjo0,14,9,0|d60nrz,14,9,0|d60ns0,15,4,1|dfdmbz,15,4,1|dfdmc0,14,9,0|dp3p3z,14,9,0|dp3p40,15,4,1|dzwibz,15,4,1|dzwic0,14,9,0|e7u03z,14,9,0|e7u040,15,4,1|eimw3z,15,4,1|eimw40,14,9,0|eqk2rz,14,9,0|eqk2s0,15,4,1|f1cyrz,15,4,1|f1cys0,14,9,0|f9a5fz,14,9,0|f9a5g0,15,4,1|fkg03z,15,4,1|fkg040,14,9,0|fs083z,14,9,0|fs0840,15,4,1|g362rz,15,4,1|g362s0,14,9,0|gaqarz,14,9,0|gaqas0,15,4,1|glw5fz,15,4,1|glw5g0,14,9,0|gttc3z,14,9,0|gttc40,15,4,1|h4m83z,15,4,1|h4m840,14,9,0|hcjerz,14,9,0|hcjes0,15,4,1|hncarz,15,4,1|hncas0,14,9,0|hv9hfz,14,9,0|hv9hg0,15,4,1|i6fc3z,15,4,1|i6fc40,14,9,0|idzk3z,14,9,0|idzk40,15,4,1|ip5erz,15,4,1|ip5es0,14,9,0|iwpmrz,14,9,0|iwpms0,15,4,1|j7vhfz,15,4,1|j7vhg0,14,9,0|jffpfz,14,9,0|jffpg0,15,4,1|jqlk3z,15,4,1|jqlk40,14,9,0|jyiqrz,14,9,0|jyiqs0,15,4,1|k9bmrz,15,4,1|k9bms0,14,9,0|kh8tfz,14,9,0|kh8tg0,15,4,1|ks1pfz,15,4,1|ks1pg0,14,9,0|kzyw3z,14,9,0|kzyw40,15,4,1|lb4qrz,15,4,1|lb4qs0,14,9,0|lioyrz,14,9,0|lioys0,15,4,1|ltutfz,15,4,1|ltutg0,14,9,0|m1f1fz,14,9,0|m1f1g0,15,4,1|mckw3z,15,4,1|mckw40,14,9,0|mki2rz,14,9,0|mki2s0,15,4,1|mvayrz,15,4,1|mvays0,14,9,0|n385fz,14,9,0|n385g0,15,4,1|ne11fz,15,4,1|ne11g0,14,9,0|nly83z,14,9,0|nly840,15,4,1|nwr43z,15,4,1|nwr440,14,9,0|o4oarz,14,9,0|o4oas0,15,4,1|ofu5fz,15,4,1|ofu5g0,14,9,0|onedfz,14,9,0|onedg0,15,4,1|oyk83z,15,4,1|oyk840,14,9,0|p64g3z,14,9,0|p64g40,15,4,1|phaarz,15,4,1|phaas0,14,9,0|pp7hfz,14,9,0|pp7hg0,15,4,1|q00dfz,15,4,1|q00dg0,14,9,0|q7xk3z,14,9,0|q7xk40,15,4,1|qiqg3z,15,4,1|qiqg40,14,9,0|qqnmrz,14,9,0|qqnms0,15,4,1|r1thfz,15,4,1|r1thg0,14,9,0|r9dpfz,14,9,0|r9dpg0,15,4,1|rkjk3z,15,4,1|rkjk40,14,9,0|rs3s3z,14,9,0|rs3s40,15,4,1|s39mrz,15,4,1|s39ms0,14,9,0|sb6tfz,14,9,0|sb6tg0,15,4,1|slzpfz,15,4,1|slzpg0,14,9,0|stww3z,14,9,0|stww40,15,4,1|t4ps3z,15,4,1|t4ps40,14,9,0|tcmyrz,14,9,0|tcmys0,15,4,1|tnfurz,15,4,1|tnfus0,14,9,0|tvd1fz,14,9,0|tvd1g0,15,4,1|u6iw3z,15,4,1|u6iw40,14,9,0|ue343z,14,9,0|ue3440,15,4,1|up8yrz,15,4,1|up8ys0,14,9,0|uwt6rz,14,9,0|uwt6s0,15,4,1|v7z1fz,15,4,1|v7z1g0,14,9,0|vfw83z,14,9,0|vfw840,15,4,1|vqp43z,15,4,1|vqp440,14,9,0|vymarz,14,9,0|vymas0,15,4,1|w9f6rz,15,4,1|w9f6s0,14,9,0|whcdfz,14,9,0|whcdg0,15,4,1|wsi83z,15,4,1|wsi840,14,9,0|x02g3z,14,9,0|x02g40,15,4,1|xb8arz,15,4,1|xb8as0,14,9,0|xisirz,14,9,0|xisis0,15,4,1|xtydfz,15,4,1|xtydg0,14,9,0|y1ilfz,14,9,0|y1ilg0,15,4,1|ycog3z,15,4,1|ycog40,14,9,0|yklmrz,14,9,0|yklms0,15,4,1|yveirz,15,4,1|yveis0,14,9,0|z3bpfz,14,9,0|z3bpg0,15,4,1|ze4lfz,15,4,1|ze4lg0,14,9,0|zm1s3z,14,9,0|zm1s40,15,4,1|zx7mrz,15,4,1|zx7ms0,14,9,0|104rurz,14,9,0|104rus0,15,4,1|10fxpfz,15,4,1|10fxpg0,14,9,0|10nhxfz,14,9,0|10nhxg0,15,4,1|10yns3z,15,4,1|10yns40,14,9,0|116kyrz,14,9,0|116kys0,15,4,1|11hdurz,15,4,1|11hdus0,14,9,0|11pb1fz,14,9,0|11pb1g0,15,4,1|1203xfz,15,4,1|1203xg0,14,9,0|128143z,14,9,0|1281440,15,4,1|12iu03z,15,4,1|12iu040,14,9,0|12qr6rz,14,9,0|12qr6s0,15,4,1|131x1fz,15,4,1|131x1g0,14,9,0|139h9fz,14,9,0|139h9g0,15,4,1|13kn43z,15,4,1|13kn440,14,9,0|13s7c3z,14,9,0|13s7c40,15,4,1|143d6rz,15,4,1|143d6s0,14,9,0|14badfz,14,9,0|14badg0,15,4,1|14m39fz,15,4,1|14m39g0,14,9,0|14u0g3z,14,9,0|14u0g40,15,4,1|154tc3z,15,4,1|154tc40,14,9,0|15cqirz,14,9,0|15cqis0,15,4,1|15nwdfz,15,4,1|15nwdg0,14,9,0|15vglfz,14,9,0|15vglg0,15,4,1|166mg3z,15,4,1|166mg40,14,9,0|16e6o3z,14,9,0|16e6o40,15,4,1|16pcirz,15,4,1|16pcis0,14,9,0|16x9pfz,14,9,0|16x9pg0,15,4,1|1782lfz,15,4,1|1782lg0,14,9,0|17fzs3z,14,9,0|17fzs40,15,4,1|17qso3z,15,4,1|17qso40,14,9,0|17ypurz,14,9,0|17ypus0,15,4,1|189iqrz,15,4,1|189iqs0,14,9,0|18hfxfz,14,9,0|18hfxg0,15,4,1|18sls3z,15,4,1|18sls40,14,9,0|190603z,14,9,0|1906040,15,4,1|19bburz,15,4,1|19bbus0,14,9,0|19iw2rz,14,9,0|19iw2s0,15,4,1|19u1xfz,15,4,1|19u1xg0,14,9,0|1a1z43z,14,9,0|1a1z440,15,4,1|1acs03z,15,4,1|1acs040,14,9,0|1akp6rz,14,9,0|1akp6s0,15,4,1|1avi2rz,15,4,1|1avi2s0,14,9,0|1b3f9fz,14,9,0|1b3f9g0,15,4,1|1bel43z,15,4,1|1bel440,14,9,0|1bm5c3z,14,9,0|1bm5c40,15,4,1|1bxb6rz,15,4,1|1bxb6s0,14,9,0|1c4verz,14,9,0|1c4ves0,15,4,1|1cg19fz,15,4,1|1cg19g0,14,9,0|1cnlhfz,14,9,0|1cnlhg0,15,4,1|1cyrc3z,15,4,1|1cyrc40,14,9,0|1d6oirz,14,9,0|1d6ois0,15,4,1|1dhherz,15,4,1|1dhhes0,14,9,0|1dpelfz,14,9,0|1dpelg0,15,4,1|1e07hfz,15,4,1|1e07hg0,14,9,0|1e84o3z,14,9,0|1e84o40,15,4,1|1ejairz,15,4,1|1ejais0,14,9,0|1equqrz,14,9,0|1equqs0,15,4,1|1f20lfz,15,4,1|1f20lg0,14,9,0|1f9ktfz,14,9,0|1f9ktg0,15,4,1|1fkqo3z,15,4,1|1fkqo40,14,9,0|1fsnurz,14,9,0|1fsnus0,15,4,1|1g3gqrz,15,4,1|1g3gqs0,14,9,0|1gbdxfz,14,9,0|1gbdxg0,15,4,1|1gm6tfz,15,4,1|1gm6tg0,14,9,0|1gu403z,14,9,0|1gu4040,15,4,1|1h4ww3z,15,4,1|1h4ww40,14,9,0|1hcu2rz,14,9,0|1hcu2s0,15,4,1|1hnzxfz,15,4,1|1hnzxg0,14,9,0|1hvk5fz,14,9,0|1hvk5g0,15,4,1|1i6q03z,15,4,1|1i6q040,14,9,0|1iea83z,14,9,0|1iea840,15,4,1|1ipg2rz,15,4,1|1ipg2s0,14,9,0|1ixd9fz,14,9,0|1ixd9g0,15,4,1|1j865fz,15,4,1|1j865g0,14,9,0|1jg3c3z,14,9,0|1jg3c40,15,4,1|1jqw83z,15,4,1|1jqw840,14,9,0|1jyterz,14,9,0|1jytes0,15,4,1|1k9z9fz,15,4,1|1k9z9g0,14,9,0|1khjhfz,14,9,0|1khjhg0,15,4,1|1kspc3z,15,4,1|1kspc40,14,9,0|1l09k3z,14,9,0|1l09k40,15,4,1|1lbferz,15,4,1|1lbfes0,14,9,0|1ljclfz,14,9,0|1ljclg0,15,4,1|1lu5hfz,15,4,1|1lu5hg0,14,9,0|1m22o3z,14,9,0|1m22o40,15,4,1|1mcvk3z,15,4,1|1mcvk40,14,9,0|1mksqrz,14,9,0|1mksqs0,15,4,1|1mvlmrz,15,4,1|1mvlms0,14,9,0|1n3itfz,14,9,0|1n3itg0,15,4,1|1neoo3z,15,4,1|1neoo40,14,9,0|1nm8w3z,14,9,0|1nm8w40,15,4,1|1nxeqrz,15,4,1|1nxeqs0,14,9,0|1o4yyrz,14,9,0|1o4yys0,15,4,1|1og4tfz,15,4,1|1og4tg0,14,9,0|1oo203z,14,9,0|1oo2040,15,4,1|1oyuw3z,15,4,1|1oyuw40,14,9,0|1p6s2rz,14,9,0|1p6s2s0,15,4,1|1phkyrz,15,4,1|1phkys0,14,9,0|1ppi5fz,14,9,0|1ppi5g0,15,4,1|1q0o03z,15,4,1|1q0o040,14,9,0|1q8883z,14,9,0|1q88840,15,4,1|1qje2rz,15,4,1|1qje2s0,14,9,0|1qqyarz,14,9,0|1qqyas0,15,4,1|1r245fz,15,4,1|1r245g0,14,9,0|1r9odfz,14,9,0|1r9odg0,15,4,1|1rku83z,15,4,1|1rku840,14,9,0|1rsrerz,14,9,0|1rsres0,15,4,1|1s3karz,15,4,1|1s3kas0,14,9,0|1sbhhfz,14,9,0|1sbhhg0,15,4,1|1smadfz,15,4,1|1smadg0,14,9,0|1su7k3z,14,9,0|1su7k40,15,4,1|1t5derz,15,4,1|1t5des0,14,9,0|1tcxmrz,14,9,0|1tcxms0,15,4,1|1to3hfz,15,4,1|1to3hg0,14,9,0|1tvnpfz,14,9,0|1tvnpg0,15,4,1|1u6tk3z,15,4,1|1u6tk40,14,9,0|1ueqqrz,14,9,0|1ueqqs0,15,4,1|1upjmrz,15,4,1|1upjms0,14,9,0|1uxgtfz,14,9,0|1uxgtg0,15,4,1|1v89pfz,15,4,1|1v89pg0,14,9,0|1vg6w3z,14,9,0|1vg6w40,15,4,1|1vqzs3z,15,4,1|1vqzs40,14,9,0|NaN,14,9,0\",\"Europe/Stockholm|,0,366,0|-1bhq3cd,0,366,0|-1bhq3cc,156,367,0|-10j6dgf,156,367,0|-10j6dge,8,8,0|-rzo2w1,8,8,0|-rzo2w0,9,9,1|-rsilg1,9,9,1|-rsilg0,8,8,0|5cstfz,8,8,0|5cstg0,9,9,1|5lsw3z,9,9,1|5lsw40,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Tallinn|,0,368,0|-1ayy791,0,368,0|-1ayy790,133,368,0|-r3exx1,133,368,0|-r3exx0,8,8,0|-qznjw1,8,8,0|-qznjw0,9,9,1|-qrqd81,9,9,1|-qrqd80,8,8,0|-qcx6s1,8,8,0|-qcx6s0,133,368,0|-peghx1,133,368,0|-peghx0,14,9,0|-fch1k1,14,9,0|-fch1k0,149,4,0|-ern4c1,149,4,0|-ern4c0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6wg81,9,9,1|-d6wg80,149,4,0|5vb6bz,149,4,0|5vb6c0,150,203,1|64pzjz,150,203,1|64pzk0,149,4,0|6e33nz,149,4,0|6e33o0,150,203,1|6nhwvz,150,203,1|6nhww0,149,4,0|6wv0zz,149,4,0|6wv100,150,203,1|769u7z,150,203,1|769u80,149,4,0|7foszz,149,4,0|7fot00,150,203,1|7p1zvz,150,203,1|7p1zw0,149,4,0|7yf17z,149,4,0|7yf180,150,203,1|87s2jz,150,203,1|87s2k0,149,4,0|8h53vz,149,4,0|8h53w0,150,203,1|8qi57z,150,203,1|8qi580,149,4,0|8zv6jz,149,4,0|8zv6k0,150,203,1|9987vz,150,203,1|9987w0,149,4,0|9il97z,149,4,0|9il980,150,203,1|9ryajz,150,203,1|9ryak0,149,4,0|a1bbvz,149,4,0|a1bbw0,15,4,1|aaofzz,15,4,1|aaog00,14,9,0|ak1hbz,14,9,0|ak1hc0,15,4,1|atrhbz,15,4,1|atrhc0,14,9,0|b34inz,14,9,0|b34io0,15,4,1|bchjzz,15,4,1|bchk00,14,9,0|blulbz,14,9,0|blulc0,15,4,1|bv7mnz,15,4,1|bv7mo0,14,9,0|c4knzz,14,9,0|c4ko00,15,4,1|cdxpbz,15,4,1|cdxpc0,14,9,0|cnaqnz,14,9,0|cnaqo0,15,4,1|cwnrzz,15,4,1|cwns00,14,9,0|d60tbz,14,9,0|d60tc0,15,4,1|dfdunz,15,4,1|dfduo0,14,9,0|dp3unz,14,9,0|dp3uo0,15,4,1|dzwqnz,15,4,1|dzwqo0,14,9,0|e7txbz,14,9,0|e7txc0,15,4,1|eimtbz,15,4,1|eimtc0,14,9,0|eqjzzz,14,9,0|eqk000,15,4,1|f1cyrz,15,4,1|f1cys0,14,9,0|f9a5fz,14,9,0|f9a5g0,15,4,1|fkg03z,15,4,1|fkg040,14,9,0|gttc3z,14,9,0|gttc40,15,4,1|h4m83z,15,4,1|h4m840,14,9,0|hcjerz,14,9,0|hcjes0,15,4,1|hncarz,15,4,1|hncas0,14,9,0|hv9hfz,14,9,0|hv9hg0,15,4,1|i6fc3z,15,4,1|i6fc40,14,9,0|idzk3z,14,9,0|idzk40,15,4,1|ip5erz,15,4,1|ip5es0,14,9,0|iwpmrz,14,9,0|iwpms0,15,4,1|j7vhfz,15,4,1|j7vhg0,14,9,0|jffpfz,14,9,0|jffpg0,15,4,1|jqlk3z,15,4,1|jqlk40,14,9,0|jyiqrz,14,9,0|jyiqs0,15,4,1|k9bmrz,15,4,1|k9bms0,14,9,0|kh8tfz,14,9,0|kh8tg0,15,4,1|ks1pfz,15,4,1|ks1pg0,14,9,0|kzyw3z,14,9,0|kzyw40,15,4,1|lb4qrz,15,4,1|lb4qs0,14,9,0|lioyrz,14,9,0|lioys0,15,4,1|ltutfz,15,4,1|ltutg0,14,9,0|m1f1fz,14,9,0|m1f1g0,15,4,1|mckw3z,15,4,1|mckw40,14,9,0|mki2rz,14,9,0|mki2s0,15,4,1|mvayrz,15,4,1|mvays0,14,9,0|n385fz,14,9,0|n385g0,15,4,1|ne11fz,15,4,1|ne11g0,14,9,0|nly83z,14,9,0|nly840,15,4,1|nwr43z,15,4,1|nwr440,14,9,0|o4oarz,14,9,0|o4oas0,15,4,1|ofu5fz,15,4,1|ofu5g0,14,9,0|onedfz,14,9,0|onedg0,15,4,1|oyk83z,15,4,1|oyk840,14,9,0|p64g3z,14,9,0|p64g40,15,4,1|phaarz,15,4,1|phaas0,14,9,0|pp7hfz,14,9,0|pp7hg0,15,4,1|q00dfz,15,4,1|q00dg0,14,9,0|q7xk3z,14,9,0|q7xk40,15,4,1|qiqg3z,15,4,1|qiqg40,14,9,0|qqnmrz,14,9,0|qqnms0,15,4,1|r1thfz,15,4,1|r1thg0,14,9,0|r9dpfz,14,9,0|r9dpg0,15,4,1|rkjk3z,15,4,1|rkjk40,14,9,0|rs3s3z,14,9,0|rs3s40,15,4,1|s39mrz,15,4,1|s39ms0,14,9,0|sb6tfz,14,9,0|sb6tg0,15,4,1|slzpfz,15,4,1|slzpg0,14,9,0|stww3z,14,9,0|stww40,15,4,1|t4ps3z,15,4,1|t4ps40,14,9,0|tcmyrz,14,9,0|tcmys0,15,4,1|tnfurz,15,4,1|tnfus0,14,9,0|tvd1fz,14,9,0|tvd1g0,15,4,1|u6iw3z,15,4,1|u6iw40,14,9,0|ue343z,14,9,0|ue3440,15,4,1|up8yrz,15,4,1|up8ys0,14,9,0|uwt6rz,14,9,0|uwt6s0,15,4,1|v7z1fz,15,4,1|v7z1g0,14,9,0|vfw83z,14,9,0|vfw840,15,4,1|vqp43z,15,4,1|vqp440,14,9,0|vymarz,14,9,0|vymas0,15,4,1|w9f6rz,15,4,1|w9f6s0,14,9,0|whcdfz,14,9,0|whcdg0,15,4,1|wsi83z,15,4,1|wsi840,14,9,0|x02g3z,14,9,0|x02g40,15,4,1|xb8arz,15,4,1|xb8as0,14,9,0|xisirz,14,9,0|xisis0,15,4,1|xtydfz,15,4,1|xtydg0,14,9,0|y1ilfz,14,9,0|y1ilg0,15,4,1|ycog3z,15,4,1|ycog40,14,9,0|yklmrz,14,9,0|yklms0,15,4,1|yveirz,15,4,1|yveis0,14,9,0|z3bpfz,14,9,0|z3bpg0,15,4,1|ze4lfz,15,4,1|ze4lg0,14,9,0|zm1s3z,14,9,0|zm1s40,15,4,1|zx7mrz,15,4,1|zx7ms0,14,9,0|104rurz,14,9,0|104rus0,15,4,1|10fxpfz,15,4,1|10fxpg0,14,9,0|10nhxfz,14,9,0|10nhxg0,15,4,1|10yns3z,15,4,1|10yns40,14,9,0|116kyrz,14,9,0|116kys0,15,4,1|11hdurz,15,4,1|11hdus0,14,9,0|11pb1fz,14,9,0|11pb1g0,15,4,1|1203xfz,15,4,1|1203xg0,14,9,0|128143z,14,9,0|1281440,15,4,1|12iu03z,15,4,1|12iu040,14,9,0|12qr6rz,14,9,0|12qr6s0,15,4,1|131x1fz,15,4,1|131x1g0,14,9,0|139h9fz,14,9,0|139h9g0,15,4,1|13kn43z,15,4,1|13kn440,14,9,0|13s7c3z,14,9,0|13s7c40,15,4,1|143d6rz,15,4,1|143d6s0,14,9,0|14badfz,14,9,0|14badg0,15,4,1|14m39fz,15,4,1|14m39g0,14,9,0|14u0g3z,14,9,0|14u0g40,15,4,1|154tc3z,15,4,1|154tc40,14,9,0|15cqirz,14,9,0|15cqis0,15,4,1|15nwdfz,15,4,1|15nwdg0,14,9,0|15vglfz,14,9,0|15vglg0,15,4,1|166mg3z,15,4,1|166mg40,14,9,0|16e6o3z,14,9,0|16e6o40,15,4,1|16pcirz,15,4,1|16pcis0,14,9,0|16x9pfz,14,9,0|16x9pg0,15,4,1|1782lfz,15,4,1|1782lg0,14,9,0|17fzs3z,14,9,0|17fzs40,15,4,1|17qso3z,15,4,1|17qso40,14,9,0|17ypurz,14,9,0|17ypus0,15,4,1|189iqrz,15,4,1|189iqs0,14,9,0|18hfxfz,14,9,0|18hfxg0,15,4,1|18sls3z,15,4,1|18sls40,14,9,0|190603z,14,9,0|1906040,15,4,1|19bburz,15,4,1|19bbus0,14,9,0|19iw2rz,14,9,0|19iw2s0,15,4,1|19u1xfz,15,4,1|19u1xg0,14,9,0|1a1z43z,14,9,0|1a1z440,15,4,1|1acs03z,15,4,1|1acs040,14,9,0|1akp6rz,14,9,0|1akp6s0,15,4,1|1avi2rz,15,4,1|1avi2s0,14,9,0|1b3f9fz,14,9,0|1b3f9g0,15,4,1|1bel43z,15,4,1|1bel440,14,9,0|1bm5c3z,14,9,0|1bm5c40,15,4,1|1bxb6rz,15,4,1|1bxb6s0,14,9,0|1c4verz,14,9,0|1c4ves0,15,4,1|1cg19fz,15,4,1|1cg19g0,14,9,0|1cnlhfz,14,9,0|1cnlhg0,15,4,1|1cyrc3z,15,4,1|1cyrc40,14,9,0|1d6oirz,14,9,0|1d6ois0,15,4,1|1dhherz,15,4,1|1dhhes0,14,9,0|1dpelfz,14,9,0|1dpelg0,15,4,1|1e07hfz,15,4,1|1e07hg0,14,9,0|1e84o3z,14,9,0|1e84o40,15,4,1|1ejairz,15,4,1|1ejais0,14,9,0|1equqrz,14,9,0|1equqs0,15,4,1|1f20lfz,15,4,1|1f20lg0,14,9,0|1f9ktfz,14,9,0|1f9ktg0,15,4,1|1fkqo3z,15,4,1|1fkqo40,14,9,0|1fsnurz,14,9,0|1fsnus0,15,4,1|1g3gqrz,15,4,1|1g3gqs0,14,9,0|1gbdxfz,14,9,0|1gbdxg0,15,4,1|1gm6tfz,15,4,1|1gm6tg0,14,9,0|1gu403z,14,9,0|1gu4040,15,4,1|1h4ww3z,15,4,1|1h4ww40,14,9,0|1hcu2rz,14,9,0|1hcu2s0,15,4,1|1hnzxfz,15,4,1|1hnzxg0,14,9,0|1hvk5fz,14,9,0|1hvk5g0,15,4,1|1i6q03z,15,4,1|1i6q040,14,9,0|1iea83z,14,9,0|1iea840,15,4,1|1ipg2rz,15,4,1|1ipg2s0,14,9,0|1ixd9fz,14,9,0|1ixd9g0,15,4,1|1j865fz,15,4,1|1j865g0,14,9,0|1jg3c3z,14,9,0|1jg3c40,15,4,1|1jqw83z,15,4,1|1jqw840,14,9,0|1jyterz,14,9,0|1jytes0,15,4,1|1k9z9fz,15,4,1|1k9z9g0,14,9,0|1khjhfz,14,9,0|1khjhg0,15,4,1|1kspc3z,15,4,1|1kspc40,14,9,0|1l09k3z,14,9,0|1l09k40,15,4,1|1lbferz,15,4,1|1lbfes0,14,9,0|1ljclfz,14,9,0|1ljclg0,15,4,1|1lu5hfz,15,4,1|1lu5hg0,14,9,0|1m22o3z,14,9,0|1m22o40,15,4,1|1mcvk3z,15,4,1|1mcvk40,14,9,0|1mksqrz,14,9,0|1mksqs0,15,4,1|1mvlmrz,15,4,1|1mvlms0,14,9,0|1n3itfz,14,9,0|1n3itg0,15,4,1|1neoo3z,15,4,1|1neoo40,14,9,0|1nm8w3z,14,9,0|1nm8w40,15,4,1|1nxeqrz,15,4,1|1nxeqs0,14,9,0|1o4yyrz,14,9,0|1o4yys0,15,4,1|1og4tfz,15,4,1|1og4tg0,14,9,0|1oo203z,14,9,0|1oo2040,15,4,1|1oyuw3z,15,4,1|1oyuw40,14,9,0|1p6s2rz,14,9,0|1p6s2s0,15,4,1|1phkyrz,15,4,1|1phkys0,14,9,0|1ppi5fz,14,9,0|1ppi5g0,15,4,1|1q0o03z,15,4,1|1q0o040,14,9,0|1q8883z,14,9,0|1q88840,15,4,1|1qje2rz,15,4,1|1qje2s0,14,9,0|1qqyarz,14,9,0|1qqyas0,15,4,1|1r245fz,15,4,1|1r245g0,14,9,0|1r9odfz,14,9,0|1r9odg0,15,4,1|1rku83z,15,4,1|1rku840,14,9,0|1rsrerz,14,9,0|1rsres0,15,4,1|1s3karz,15,4,1|1s3kas0,14,9,0|1sbhhfz,14,9,0|1sbhhg0,15,4,1|1smadfz,15,4,1|1smadg0,14,9,0|1su7k3z,14,9,0|1su7k40,15,4,1|1t5derz,15,4,1|1t5des0,14,9,0|1tcxmrz,14,9,0|1tcxms0,15,4,1|1to3hfz,15,4,1|1to3hg0,14,9,0|1tvnpfz,14,9,0|1tvnpg0,15,4,1|1u6tk3z,15,4,1|1u6tk40,14,9,0|1ueqqrz,14,9,0|1ueqqs0,15,4,1|1upjmrz,15,4,1|1upjms0,14,9,0|1uxgtfz,14,9,0|1uxgtg0,15,4,1|1v89pfz,15,4,1|1v89pg0,14,9,0|1vg6w3z,14,9,0|1vg6w40,15,4,1|1vqzs3z,15,4,1|1vqzs40,14,9,0|NaN,14,9,0\",\"Europe/Tirane|,0,369,0|-t85vo9,0,369,0|-t85vo8,8,8,0|-ff3es1,8,8,0|-ff3es0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dy7jw1,9,9,1|-dy7jw0,8,8,0|29h97z,8,8,0|29h980,9,9,1|2h8t3z,9,9,1|2h8t40,8,8,0|2s3mjz,8,8,0|2s3mk0,9,9,1|300qfz,9,9,1|300qg0,8,8,0|3az97z,8,8,0|3az980,9,9,1|3iwd3z,9,9,1|3iwd40,8,8,0|3u2ajz,8,8,0|3u2ak0,9,9,1|41mfrz,9,9,1|41mfs0,8,8,0|4cqijz,8,8,0|4cqik0,9,9,1|4kcifz,9,9,1|4kcig0,8,8,0|4vgl7z,8,8,0|4vgl80,9,9,1|532l3z,9,9,1|532l40,8,8,0|5e6nvz,8,8,0|5e6nw0,9,9,1|5m3rrz,9,9,1|5m3rs0,8,8,0|5wlmjz,8,8,0|5wlmk0,9,9,1|64iqfz,9,9,1|64iqg0,8,8,0|6fonvz,8,8,0|6fonw0,9,9,1|6nlrrz,9,9,1|6nlrs0,8,8,0|6xqnvz,8,8,0|6xqnw0,9,9,1|769zrz,9,9,1|769zs0,8,8,0|7foyjz,8,8,0|7foyk0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Ulyanovsk|,0,370,0|-qcx401,0,370,0|-qcx400,100,4,0|-kmr4c1,100,4,0|-kmr4c0,105,203,0|5vb3jz,105,203,0|5vb3k0,91,186,1|64pwrz,91,186,1|64pws0,105,203,0|6e30vz,105,203,0|6e30w0,91,186,1|6nhu3z,91,186,1|6nhu40,105,203,0|6wuy7z,105,203,0|6wuy80,91,186,1|769rfz,91,186,1|769rg0,105,203,0|7foq7z,105,203,0|7foq80,91,186,1|7p1x3z,91,186,1|7p1x40,105,203,0|7yeyfz,105,203,0|7yeyg0,91,186,1|87rzrz,91,186,1|87rzs0,105,203,0|8h513z,105,203,0|8h5140,91,186,1|8qi2fz,91,186,1|8qi2g0,105,203,0|8zv3rz,105,203,0|8zv3s0,91,186,1|99853z,91,186,1|998540,105,203,0|9il6fz,105,203,0|9il6g0,91,186,1|9ry7rz,91,186,1|9ry7s0,105,203,0|a1b93z,105,203,0|a1b940,105,203,1|aaod7z,105,203,1|aaod80,100,4,0|ak1ejz,100,4,0|ak1ek0,105,203,1|atrejz,105,203,1|atrek0,100,4,0|b34fvz,100,4,0|b34fw0,100,4,1|bchjzz,100,4,1|bchk00,101,9,0|bi8ynz,101,9,0|bi8yo0,100,4,0|bluijz,100,4,0|bluik0,105,203,1|bv7jvz,105,203,1|bv7jw0,100,4,0|c4kl7z,100,4,0|c4kl80,105,203,1|cdxmjz,105,203,1|cdxmk0,100,4,0|cnanvz,100,4,0|cnanw0,105,203,1|cwnp7z,105,203,1|cwnp80,100,4,0|d60qjz,100,4,0|d60qk0,105,203,1|dfdrvz,105,203,1|dfdrw0,100,4,0|dp3rvz,100,4,0|dp3rw0,105,203,1|dzwnvz,105,203,1|dzwnw0,100,4,0|e7tujz,100,4,0|e7tuk0,105,203,1|eimqjz,105,203,1|eimqk0,100,4,0|eqjx7z,100,4,0|eqjx80,105,203,1|f1ct7z,105,203,1|f1ct80,100,4,0|f99zvz,100,4,0|f99zw0,105,203,1|fkfujz,105,203,1|fkfuk0,100,4,0|fs02jz,100,4,0|fs02k0,105,203,1|g35x7z,105,203,1|g35x80,100,4,0|gaq57z,100,4,0|gaq580,105,203,1|glvzvz,105,203,1|glvzw0,100,4,0|gtt6jz,100,4,0|gtt6k0,105,203,1|h4m2jz,105,203,1|h4m2k0,100,4,0|hcj97z,100,4,0|hcj980,105,203,1|hnc57z,105,203,1|hnc580,100,4,0|hv9bvz,100,4,0|hv9bw0,105,203,1|i6f6jz,105,203,1|i6f6k0,100,4,0|idzejz,100,4,0|idzek0,105,203,1|ip597z,105,203,1|ip5980,100,4,0|iwph7z,100,4,0|iwph80,105,203,1|j7vbvz,105,203,1|j7vbw0,100,4,0|jffjvz,100,4,0|jffjw0,105,203,1|jqlejz,105,203,1|jqlek0,100,4,0|jyil7z,100,4,0|jyil80,105,203,1|k9bh7z,105,203,1|k9bh80,100,4,0|kh8nvz,100,4,0|kh8nw0,105,203,1|ks1jvz,105,203,1|ks1jw0,100,4,0|kzyqjz,100,4,0|kzyqk0,105,203,1|lb4l7z,105,203,1|lb4l80,100,4,0|liot7z,100,4,0|liot80,105,203,0|ne0t3z,105,203,0|ne0t40,100,4,0|o4o57z,100,4,0|o4o580,105,203,0|NaN,105,203,0\",\"Europe/Uzhgorod|,0,371,0|-15cztgp,0,371,0|-15cztgo,8,8,0|-fizzw1,8,8,0|-fizzw0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d55hk1,9,9,1|-d55hk0,8,8,0|-cshus1,8,8,0|-cshus0,149,4,0|5vb6bz,149,4,0|5vb6c0,150,203,1|64pzjz,150,203,1|64pzk0,149,4,0|6e33nz,149,4,0|6e33o0,150,203,1|6nhwvz,150,203,1|6nhww0,149,4,0|6wv0zz,149,4,0|6wv100,150,203,1|769u7z,150,203,1|769u80,149,4,0|7foszz,149,4,0|7fot00,150,203,1|7p1zvz,150,203,1|7p1zw0,149,4,0|7yf17z,149,4,0|7yf180,150,203,1|87s2jz,150,203,1|87s2k0,149,4,0|8h53vz,149,4,0|8h53w0,150,203,1|8qi57z,150,203,1|8qi580,149,4,0|8zv6jz,149,4,0|8zv6k0,150,203,1|9987vz,150,203,1|9987w0,149,4,0|9il97z,149,4,0|9il980,150,203,1|9ryajz,150,203,1|9ryak0,149,4,0|a1bbvz,149,4,0|a1bbw0,150,203,1|aaod7z,150,203,1|aaod80,149,4,0|ap2vvz,149,4,0|ap2vw0,8,8,0|b34o7z,8,8,0|b34o80,14,9,0|blufrz,14,9,0|blufs0,15,4,1|bv7ebz,15,4,1|bv7ec0,14,9,0|c4kifz,14,9,0|c4kig0,15,4,1|cdxgzz,15,4,1|cdxh00,14,9,0|cnal3z,14,9,0|cnal40,15,4,1|cwnjnz,15,4,1|cwnjo0,14,9,0|d60w3z,14,9,0|d60w40,15,4,1|dfdxfz,15,4,1|dfdxg0,14,9,0|dp3xfz,14,9,0|dp3xg0,15,4,1|dzwtfz,15,4,1|dzwtg0,14,9,0|e7u03z,14,9,0|e7u040,15,4,1|eimw3z,15,4,1|eimw40,14,9,0|eqk2rz,14,9,0|eqk2s0,15,4,1|f1cyrz,15,4,1|f1cys0,14,9,0|f9a5fz,14,9,0|f9a5g0,15,4,1|fkg03z,15,4,1|fkg040,14,9,0|fs083z,14,9,0|fs0840,15,4,1|g362rz,15,4,1|g362s0,14,9,0|gaqarz,14,9,0|gaqas0,15,4,1|glw5fz,15,4,1|glw5g0,14,9,0|gttc3z,14,9,0|gttc40,15,4,1|h4m83z,15,4,1|h4m840,14,9,0|hcjerz,14,9,0|hcjes0,15,4,1|hncarz,15,4,1|hncas0,14,9,0|hv9hfz,14,9,0|hv9hg0,15,4,1|i6fc3z,15,4,1|i6fc40,14,9,0|idzk3z,14,9,0|idzk40,15,4,1|ip5erz,15,4,1|ip5es0,14,9,0|iwpmrz,14,9,0|iwpms0,15,4,1|j7vhfz,15,4,1|j7vhg0,14,9,0|jffpfz,14,9,0|jffpg0,15,4,1|jqlk3z,15,4,1|jqlk40,14,9,0|jyiqrz,14,9,0|jyiqs0,15,4,1|k9bmrz,15,4,1|k9bms0,14,9,0|kh8tfz,14,9,0|kh8tg0,15,4,1|ks1pfz,15,4,1|ks1pg0,14,9,0|kzyw3z,14,9,0|kzyw40,15,4,1|lb4qrz,15,4,1|lb4qs0,14,9,0|lioyrz,14,9,0|lioys0,15,4,1|ltutfz,15,4,1|ltutg0,14,9,0|m1f1fz,14,9,0|m1f1g0,15,4,1|mckw3z,15,4,1|mckw40,14,9,0|mki2rz,14,9,0|mki2s0,15,4,1|mvayrz,15,4,1|mvays0,14,9,0|n385fz,14,9,0|n385g0,15,4,1|ne11fz,15,4,1|ne11g0,14,9,0|nly83z,14,9,0|nly840,15,4,1|nwr43z,15,4,1|nwr440,14,9,0|o4oarz,14,9,0|o4oas0,15,4,1|ofu5fz,15,4,1|ofu5g0,14,9,0|onedfz,14,9,0|onedg0,15,4,1|oyk83z,15,4,1|oyk840,14,9,0|p64g3z,14,9,0|p64g40,15,4,1|phaarz,15,4,1|phaas0,14,9,0|pp7hfz,14,9,0|pp7hg0,15,4,1|q00dfz,15,4,1|q00dg0,14,9,0|q7xk3z,14,9,0|q7xk40,15,4,1|qiqg3z,15,4,1|qiqg40,14,9,0|qqnmrz,14,9,0|qqnms0,15,4,1|r1thfz,15,4,1|r1thg0,14,9,0|r9dpfz,14,9,0|r9dpg0,15,4,1|rkjk3z,15,4,1|rkjk40,14,9,0|rs3s3z,14,9,0|rs3s40,15,4,1|s39mrz,15,4,1|s39ms0,14,9,0|sb6tfz,14,9,0|sb6tg0,15,4,1|slzpfz,15,4,1|slzpg0,14,9,0|stww3z,14,9,0|stww40,15,4,1|t4ps3z,15,4,1|t4ps40,14,9,0|tcmyrz,14,9,0|tcmys0,15,4,1|tnfurz,15,4,1|tnfus0,14,9,0|tvd1fz,14,9,0|tvd1g0,15,4,1|u6iw3z,15,4,1|u6iw40,14,9,0|ue343z,14,9,0|ue3440,15,4,1|up8yrz,15,4,1|up8ys0,14,9,0|uwt6rz,14,9,0|uwt6s0,15,4,1|v7z1fz,15,4,1|v7z1g0,14,9,0|vfw83z,14,9,0|vfw840,15,4,1|vqp43z,15,4,1|vqp440,14,9,0|vymarz,14,9,0|vymas0,15,4,1|w9f6rz,15,4,1|w9f6s0,14,9,0|whcdfz,14,9,0|whcdg0,15,4,1|wsi83z,15,4,1|wsi840,14,9,0|x02g3z,14,9,0|x02g40,15,4,1|xb8arz,15,4,1|xb8as0,14,9,0|xisirz,14,9,0|xisis0,15,4,1|xtydfz,15,4,1|xtydg0,14,9,0|y1ilfz,14,9,0|y1ilg0,15,4,1|ycog3z,15,4,1|ycog40,14,9,0|yklmrz,14,9,0|yklms0,15,4,1|yveirz,15,4,1|yveis0,14,9,0|z3bpfz,14,9,0|z3bpg0,15,4,1|ze4lfz,15,4,1|ze4lg0,14,9,0|zm1s3z,14,9,0|zm1s40,15,4,1|zx7mrz,15,4,1|zx7ms0,14,9,0|104rurz,14,9,0|104rus0,15,4,1|10fxpfz,15,4,1|10fxpg0,14,9,0|10nhxfz,14,9,0|10nhxg0,15,4,1|10yns3z,15,4,1|10yns40,14,9,0|116kyrz,14,9,0|116kys0,15,4,1|11hdurz,15,4,1|11hdus0,14,9,0|11pb1fz,14,9,0|11pb1g0,15,4,1|1203xfz,15,4,1|1203xg0,14,9,0|128143z,14,9,0|1281440,15,4,1|12iu03z,15,4,1|12iu040,14,9,0|12qr6rz,14,9,0|12qr6s0,15,4,1|131x1fz,15,4,1|131x1g0,14,9,0|139h9fz,14,9,0|139h9g0,15,4,1|13kn43z,15,4,1|13kn440,14,9,0|13s7c3z,14,9,0|13s7c40,15,4,1|143d6rz,15,4,1|143d6s0,14,9,0|14badfz,14,9,0|14badg0,15,4,1|14m39fz,15,4,1|14m39g0,14,9,0|14u0g3z,14,9,0|14u0g40,15,4,1|154tc3z,15,4,1|154tc40,14,9,0|15cqirz,14,9,0|15cqis0,15,4,1|15nwdfz,15,4,1|15nwdg0,14,9,0|15vglfz,14,9,0|15vglg0,15,4,1|166mg3z,15,4,1|166mg40,14,9,0|16e6o3z,14,9,0|16e6o40,15,4,1|16pcirz,15,4,1|16pcis0,14,9,0|16x9pfz,14,9,0|16x9pg0,15,4,1|1782lfz,15,4,1|1782lg0,14,9,0|17fzs3z,14,9,0|17fzs40,15,4,1|17qso3z,15,4,1|17qso40,14,9,0|17ypurz,14,9,0|17ypus0,15,4,1|189iqrz,15,4,1|189iqs0,14,9,0|18hfxfz,14,9,0|18hfxg0,15,4,1|18sls3z,15,4,1|18sls40,14,9,0|190603z,14,9,0|1906040,15,4,1|19bburz,15,4,1|19bbus0,14,9,0|19iw2rz,14,9,0|19iw2s0,15,4,1|19u1xfz,15,4,1|19u1xg0,14,9,0|1a1z43z,14,9,0|1a1z440,15,4,1|1acs03z,15,4,1|1acs040,14,9,0|1akp6rz,14,9,0|1akp6s0,15,4,1|1avi2rz,15,4,1|1avi2s0,14,9,0|1b3f9fz,14,9,0|1b3f9g0,15,4,1|1bel43z,15,4,1|1bel440,14,9,0|1bm5c3z,14,9,0|1bm5c40,15,4,1|1bxb6rz,15,4,1|1bxb6s0,14,9,0|1c4verz,14,9,0|1c4ves0,15,4,1|1cg19fz,15,4,1|1cg19g0,14,9,0|1cnlhfz,14,9,0|1cnlhg0,15,4,1|1cyrc3z,15,4,1|1cyrc40,14,9,0|1d6oirz,14,9,0|1d6ois0,15,4,1|1dhherz,15,4,1|1dhhes0,14,9,0|1dpelfz,14,9,0|1dpelg0,15,4,1|1e07hfz,15,4,1|1e07hg0,14,9,0|1e84o3z,14,9,0|1e84o40,15,4,1|1ejairz,15,4,1|1ejais0,14,9,0|1equqrz,14,9,0|1equqs0,15,4,1|1f20lfz,15,4,1|1f20lg0,14,9,0|1f9ktfz,14,9,0|1f9ktg0,15,4,1|1fkqo3z,15,4,1|1fkqo40,14,9,0|1fsnurz,14,9,0|1fsnus0,15,4,1|1g3gqrz,15,4,1|1g3gqs0,14,9,0|1gbdxfz,14,9,0|1gbdxg0,15,4,1|1gm6tfz,15,4,1|1gm6tg0,14,9,0|1gu403z,14,9,0|1gu4040,15,4,1|1h4ww3z,15,4,1|1h4ww40,14,9,0|1hcu2rz,14,9,0|1hcu2s0,15,4,1|1hnzxfz,15,4,1|1hnzxg0,14,9,0|1hvk5fz,14,9,0|1hvk5g0,15,4,1|1i6q03z,15,4,1|1i6q040,14,9,0|1iea83z,14,9,0|1iea840,15,4,1|1ipg2rz,15,4,1|1ipg2s0,14,9,0|1ixd9fz,14,9,0|1ixd9g0,15,4,1|1j865fz,15,4,1|1j865g0,14,9,0|1jg3c3z,14,9,0|1jg3c40,15,4,1|1jqw83z,15,4,1|1jqw840,14,9,0|1jyterz,14,9,0|1jytes0,15,4,1|1k9z9fz,15,4,1|1k9z9g0,14,9,0|1khjhfz,14,9,0|1khjhg0,15,4,1|1kspc3z,15,4,1|1kspc40,14,9,0|1l09k3z,14,9,0|1l09k40,15,4,1|1lbferz,15,4,1|1lbfes0,14,9,0|1ljclfz,14,9,0|1ljclg0,15,4,1|1lu5hfz,15,4,1|1lu5hg0,14,9,0|1m22o3z,14,9,0|1m22o40,15,4,1|1mcvk3z,15,4,1|1mcvk40,14,9,0|1mksqrz,14,9,0|1mksqs0,15,4,1|1mvlmrz,15,4,1|1mvlms0,14,9,0|1n3itfz,14,9,0|1n3itg0,15,4,1|1neoo3z,15,4,1|1neoo40,14,9,0|1nm8w3z,14,9,0|1nm8w40,15,4,1|1nxeqrz,15,4,1|1nxeqs0,14,9,0|1o4yyrz,14,9,0|1o4yys0,15,4,1|1og4tfz,15,4,1|1og4tg0,14,9,0|1oo203z,14,9,0|1oo2040,15,4,1|1oyuw3z,15,4,1|1oyuw40,14,9,0|1p6s2rz,14,9,0|1p6s2s0,15,4,1|1phkyrz,15,4,1|1phkys0,14,9,0|1ppi5fz,14,9,0|1ppi5g0,15,4,1|1q0o03z,15,4,1|1q0o040,14,9,0|1q8883z,14,9,0|1q88840,15,4,1|1qje2rz,15,4,1|1qje2s0,14,9,0|1qqyarz,14,9,0|1qqyas0,15,4,1|1r245fz,15,4,1|1r245g0,14,9,0|1r9odfz,14,9,0|1r9odg0,15,4,1|1rku83z,15,4,1|1rku840,14,9,0|1rsrerz,14,9,0|1rsres0,15,4,1|1s3karz,15,4,1|1s3kas0,14,9,0|1sbhhfz,14,9,0|1sbhhg0,15,4,1|1smadfz,15,4,1|1smadg0,14,9,0|1su7k3z,14,9,0|1su7k40,15,4,1|1t5derz,15,4,1|1t5des0,14,9,0|1tcxmrz,14,9,0|1tcxms0,15,4,1|1to3hfz,15,4,1|1to3hg0,14,9,0|1tvnpfz,14,9,0|1tvnpg0,15,4,1|1u6tk3z,15,4,1|1u6tk40,14,9,0|1ueqqrz,14,9,0|1ueqqs0,15,4,1|1upjmrz,15,4,1|1upjms0,14,9,0|1uxgtfz,14,9,0|1uxgtg0,15,4,1|1v89pfz,15,4,1|1v89pg0,14,9,0|1vg6w3z,14,9,0|1vg6w40,15,4,1|1vqzs3z,15,4,1|1vqzs40,14,9,0|NaN,14,9,0\",\"Europe/Vaduz|,0,333,0|-1os49kx,0,333,0|-1os49kw,54,334,0|-13g441n,54,334,0|-13g441m,8,8,0|-eyh6o1,8,8,0|-eyh6o0,9,9,1|-eqk001,9,9,1|-eqk000,8,8,0|-efr401,8,8,0|-efr400,9,9,1|-e7txc1,9,9,1|-e7txc0,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Vatican|,0,360,0|-1hs7rn9,0,360,0|-1hs7rn8,136,360,0|-13r0qs1,136,360,0|-13r0qs0,8,8,0|-rymys1,8,8,0|-rymys0,9,9,1|-rsio81,9,9,1|-rsio80,8,8,0|-rj5k41,8,8,0|-rj5k40,9,9,1|-r9qqw1,9,9,1|-r9qqw0,8,8,0|-r1idg1,8,8,0|-r1idg0,9,9,1|-qqnpk1,9,9,1|-qqnpk0,8,8,0|-qj59g1,8,8,0|-qj59g0,9,9,1|-q7zhk1,9,9,1|-q7zhk0,8,8,0|-pzcas1,8,8,0|-pzcas0,9,9,1|-ppzc81,9,9,1|-ppzc80,8,8,0|-ff59g1,8,8,0|-ff59g0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d75h81,9,9,1|-d75h80,8,8,0|-cx0nw1,8,8,0|-cx0nw0,9,9,1|-cohes1,9,9,1|-cohes0,8,8,0|-cf2d81,8,8,0|-cf2d80,9,9,1|-c4mfw1,9,9,1|-c4mfw0,8,8,0|-bwcg41,8,8,0|-bwcg40,9,9,1|-blwis1,9,9,1|-blwis0,8,8,0|-bec581,8,8,0|-bec580,9,9,1|-b36ak1,9,9,1|-b36ak0,8,8,0|-1vwis1,8,8,0|-1vwis0,9,9,1|-1pf9k1,9,9,1|-1pf9k0,8,8,0|-1cthg1,8,8,0|-1cthg0,9,9,1|-16p441,9,9,1|-16p440,8,8,0|-u3es1,8,8,0|-u3es0,9,9,1|-nz1g1,9,9,1|-nz1g0,8,8,0|-b0dg1,8,8,0|-b0dg0,9,9,1|-4w041,9,9,1|-4w040,8,8,0|7pp7z,8,8,0|7pp80,9,9,1|du2jz,9,9,1|du2k0,8,8,0|q2t7z,8,8,0|q2t80,9,9,1|wk57z,9,9,1|wk580,8,8,0|195ujz,8,8,0|195uk0,9,9,1|1fn6jz,9,9,1|1fn6k0,8,8,0|1s8vvz,8,8,0|1s8vw0,9,9,1|1yd97z,9,9,1|1yd980,8,8,0|2alzvz,8,8,0|2alzw0,9,9,1|2h3bvz,9,9,1|2h3bw0,8,8,0|2tp17z,8,8,0|2tp180,9,9,1|2ztejz,9,9,1|2ztek0,8,8,0|3cf3vz,8,8,0|3cf3w0,9,9,1|3ijh7z,9,9,1|3ijh80,8,8,0|3us7vz,8,8,0|3us7w0,9,9,1|419jvz,9,9,1|419jw0,8,8,0|4dv97z,8,8,0|4dv980,9,9,1|4kcl7z,9,9,1|4kcl80,8,8,0|4wlbvz,8,8,0|4wlbw0,9,9,1|532nvz,9,9,1|532nw0,8,8,0|5cstfz,8,8,0|5cstg0,9,9,1|5lsw3z,9,9,1|5lsw40,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Vienna|,0,372,0|-14211oy,0,372,0|-14211ox,8,8,0|-s0e081,8,8,0|-s0e080,9,9,1|-rsilg1,9,9,1|-rsilg0,8,8,0|-ridmk1,8,8,0|-ridmk0,9,9,1|-ragfw1,9,9,1|-ragfw0,8,8,0|-qznjw1,8,8,0|-qznjw0,9,9,1|-qrqd81,9,9,1|-qrqd80,8,8,0|-pykd81,8,8,0|-pykd80,9,9,1|-pqa7w1,9,9,1|-pqa7w0,8,8,0|-fizzw1,8,8,0|-fizzw0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6dp81,9,9,1|-d6dp80,8,8,0|-cx0nw1,8,8,0|-cx0nw0,9,9,1|-cwi581,9,9,1|-cwi580,8,8,0|-cdmik1,8,8,0|-cdmik0,9,9,1|-c4kl81,9,9,1|-c4kl80,8,8,0|-bv9ek1,8,8,0|-bv9ek0,9,9,1|-blwd81,9,9,1|-blwd80,8,8,0|-bbtek1,8,8,0|-bbtek0,9,9,1|-b36ak1,9,9,1|-b36ak0,8,8,0|5csnvz,8,8,0|5csnw0,9,9,1|5lsnrz,9,9,1|5lsns0,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Vilnius|,0,373,0|-1ayy7ct,0,373,0|-1ayy7cs,157,374,0|-rns981,157,374,0|-rns980,74,375,0|-q7q73d,74,375,0|-q7q73c,8,8,0|-ptj1g1,8,8,0|-ptj1g0,14,9,0|-poyaw1,14,9,0|-poyaw0,8,8,0|-fcmis1,8,8,0|-fcmis0,149,4,0|-evwto1,149,4,0|-evwto0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d9kqw1,9,9,1|-d9kqw0,149,4,0|5vb6bz,149,4,0|5vb6c0,150,203,1|64pzjz,150,203,1|64pzk0,149,4,0|6e33nz,149,4,0|6e33o0,150,203,1|6nhwvz,150,203,1|6nhww0,149,4,0|6wv0zz,149,4,0|6wv100,150,203,1|769u7z,150,203,1|769u80,149,4,0|7foszz,149,4,0|7fot00,150,203,1|7p1zvz,150,203,1|7p1zw0,149,4,0|7yf17z,149,4,0|7yf180,150,203,1|87s2jz,150,203,1|87s2k0,149,4,0|8h53vz,149,4,0|8h53w0,150,203,1|8qi57z,150,203,1|8qi580,149,4,0|8zv6jz,149,4,0|8zv6k0,150,203,1|9987vz,150,203,1|9987w0,149,4,0|9il97z,149,4,0|9il980,150,203,1|9ryajz,150,203,1|9ryak0,149,4,0|a1bbvz,149,4,0|a1bbw0,15,4,1|aaofzz,15,4,1|aaog00,14,9,0|ak1hbz,14,9,0|ak1hc0,15,4,1|atrhbz,15,4,1|atrhc0,14,9,0|b34inz,14,9,0|b34io0,15,4,1|bchjzz,15,4,1|bchk00,14,9,0|blulbz,14,9,0|blulc0,15,4,1|bv7mnz,15,4,1|bv7mo0,14,9,0|c4knzz,14,9,0|c4ko00,15,4,1|cdxpbz,15,4,1|cdxpc0,14,9,0|cnaqnz,14,9,0|cnaqo0,15,4,1|cwnrzz,15,4,1|cwns00,14,9,0|d60tbz,14,9,0|d60tc0,15,4,1|dfdunz,15,4,1|dfduo0,14,9,0|dp3unz,14,9,0|dp3uo0,15,4,1|dzwqnz,15,4,1|dzwqo0,14,9,0|e7txbz,14,9,0|e7txc0,15,4,1|eimtbz,15,4,1|eimtc0,14,9,0|eqk2rz,14,9,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,14,9,0|hcjerz,14,9,0|hcjes0,15,4,1|hncarz,15,4,1|hncas0,14,9,0|hv9hfz,14,9,0|hv9hg0,15,4,1|i6fc3z,15,4,1|i6fc40,14,9,0|idzk3z,14,9,0|idzk40,15,4,1|ip5erz,15,4,1|ip5es0,14,9,0|iwpmrz,14,9,0|iwpms0,15,4,1|j7vhfz,15,4,1|j7vhg0,14,9,0|jffpfz,14,9,0|jffpg0,15,4,1|jqlk3z,15,4,1|jqlk40,14,9,0|jyiqrz,14,9,0|jyiqs0,15,4,1|k9bmrz,15,4,1|k9bms0,14,9,0|kh8tfz,14,9,0|kh8tg0,15,4,1|ks1pfz,15,4,1|ks1pg0,14,9,0|kzyw3z,14,9,0|kzyw40,15,4,1|lb4qrz,15,4,1|lb4qs0,14,9,0|lioyrz,14,9,0|lioys0,15,4,1|ltutfz,15,4,1|ltutg0,14,9,0|m1f1fz,14,9,0|m1f1g0,15,4,1|mckw3z,15,4,1|mckw40,14,9,0|mki2rz,14,9,0|mki2s0,15,4,1|mvayrz,15,4,1|mvays0,14,9,0|n385fz,14,9,0|n385g0,15,4,1|ne11fz,15,4,1|ne11g0,14,9,0|nly83z,14,9,0|nly840,15,4,1|nwr43z,15,4,1|nwr440,14,9,0|o4oarz,14,9,0|o4oas0,15,4,1|ofu5fz,15,4,1|ofu5g0,14,9,0|onedfz,14,9,0|onedg0,15,4,1|oyk83z,15,4,1|oyk840,14,9,0|p64g3z,14,9,0|p64g40,15,4,1|phaarz,15,4,1|phaas0,14,9,0|pp7hfz,14,9,0|pp7hg0,15,4,1|q00dfz,15,4,1|q00dg0,14,9,0|q7xk3z,14,9,0|q7xk40,15,4,1|qiqg3z,15,4,1|qiqg40,14,9,0|qqnmrz,14,9,0|qqnms0,15,4,1|r1thfz,15,4,1|r1thg0,14,9,0|r9dpfz,14,9,0|r9dpg0,15,4,1|rkjk3z,15,4,1|rkjk40,14,9,0|rs3s3z,14,9,0|rs3s40,15,4,1|s39mrz,15,4,1|s39ms0,14,9,0|sb6tfz,14,9,0|sb6tg0,15,4,1|slzpfz,15,4,1|slzpg0,14,9,0|stww3z,14,9,0|stww40,15,4,1|t4ps3z,15,4,1|t4ps40,14,9,0|tcmyrz,14,9,0|tcmys0,15,4,1|tnfurz,15,4,1|tnfus0,14,9,0|tvd1fz,14,9,0|tvd1g0,15,4,1|u6iw3z,15,4,1|u6iw40,14,9,0|ue343z,14,9,0|ue3440,15,4,1|up8yrz,15,4,1|up8ys0,14,9,0|uwt6rz,14,9,0|uwt6s0,15,4,1|v7z1fz,15,4,1|v7z1g0,14,9,0|vfw83z,14,9,0|vfw840,15,4,1|vqp43z,15,4,1|vqp440,14,9,0|vymarz,14,9,0|vymas0,15,4,1|w9f6rz,15,4,1|w9f6s0,14,9,0|whcdfz,14,9,0|whcdg0,15,4,1|wsi83z,15,4,1|wsi840,14,9,0|x02g3z,14,9,0|x02g40,15,4,1|xb8arz,15,4,1|xb8as0,14,9,0|xisirz,14,9,0|xisis0,15,4,1|xtydfz,15,4,1|xtydg0,14,9,0|y1ilfz,14,9,0|y1ilg0,15,4,1|ycog3z,15,4,1|ycog40,14,9,0|yklmrz,14,9,0|yklms0,15,4,1|yveirz,15,4,1|yveis0,14,9,0|z3bpfz,14,9,0|z3bpg0,15,4,1|ze4lfz,15,4,1|ze4lg0,14,9,0|zm1s3z,14,9,0|zm1s40,15,4,1|zx7mrz,15,4,1|zx7ms0,14,9,0|104rurz,14,9,0|104rus0,15,4,1|10fxpfz,15,4,1|10fxpg0,14,9,0|10nhxfz,14,9,0|10nhxg0,15,4,1|10yns3z,15,4,1|10yns40,14,9,0|116kyrz,14,9,0|116kys0,15,4,1|11hdurz,15,4,1|11hdus0,14,9,0|11pb1fz,14,9,0|11pb1g0,15,4,1|1203xfz,15,4,1|1203xg0,14,9,0|128143z,14,9,0|1281440,15,4,1|12iu03z,15,4,1|12iu040,14,9,0|12qr6rz,14,9,0|12qr6s0,15,4,1|131x1fz,15,4,1|131x1g0,14,9,0|139h9fz,14,9,0|139h9g0,15,4,1|13kn43z,15,4,1|13kn440,14,9,0|13s7c3z,14,9,0|13s7c40,15,4,1|143d6rz,15,4,1|143d6s0,14,9,0|14badfz,14,9,0|14badg0,15,4,1|14m39fz,15,4,1|14m39g0,14,9,0|14u0g3z,14,9,0|14u0g40,15,4,1|154tc3z,15,4,1|154tc40,14,9,0|15cqirz,14,9,0|15cqis0,15,4,1|15nwdfz,15,4,1|15nwdg0,14,9,0|15vglfz,14,9,0|15vglg0,15,4,1|166mg3z,15,4,1|166mg40,14,9,0|16e6o3z,14,9,0|16e6o40,15,4,1|16pcirz,15,4,1|16pcis0,14,9,0|16x9pfz,14,9,0|16x9pg0,15,4,1|1782lfz,15,4,1|1782lg0,14,9,0|17fzs3z,14,9,0|17fzs40,15,4,1|17qso3z,15,4,1|17qso40,14,9,0|17ypurz,14,9,0|17ypus0,15,4,1|189iqrz,15,4,1|189iqs0,14,9,0|18hfxfz,14,9,0|18hfxg0,15,4,1|18sls3z,15,4,1|18sls40,14,9,0|190603z,14,9,0|1906040,15,4,1|19bburz,15,4,1|19bbus0,14,9,0|19iw2rz,14,9,0|19iw2s0,15,4,1|19u1xfz,15,4,1|19u1xg0,14,9,0|1a1z43z,14,9,0|1a1z440,15,4,1|1acs03z,15,4,1|1acs040,14,9,0|1akp6rz,14,9,0|1akp6s0,15,4,1|1avi2rz,15,4,1|1avi2s0,14,9,0|1b3f9fz,14,9,0|1b3f9g0,15,4,1|1bel43z,15,4,1|1bel440,14,9,0|1bm5c3z,14,9,0|1bm5c40,15,4,1|1bxb6rz,15,4,1|1bxb6s0,14,9,0|1c4verz,14,9,0|1c4ves0,15,4,1|1cg19fz,15,4,1|1cg19g0,14,9,0|1cnlhfz,14,9,0|1cnlhg0,15,4,1|1cyrc3z,15,4,1|1cyrc40,14,9,0|1d6oirz,14,9,0|1d6ois0,15,4,1|1dhherz,15,4,1|1dhhes0,14,9,0|1dpelfz,14,9,0|1dpelg0,15,4,1|1e07hfz,15,4,1|1e07hg0,14,9,0|1e84o3z,14,9,0|1e84o40,15,4,1|1ejairz,15,4,1|1ejais0,14,9,0|1equqrz,14,9,0|1equqs0,15,4,1|1f20lfz,15,4,1|1f20lg0,14,9,0|1f9ktfz,14,9,0|1f9ktg0,15,4,1|1fkqo3z,15,4,1|1fkqo40,14,9,0|1fsnurz,14,9,0|1fsnus0,15,4,1|1g3gqrz,15,4,1|1g3gqs0,14,9,0|1gbdxfz,14,9,0|1gbdxg0,15,4,1|1gm6tfz,15,4,1|1gm6tg0,14,9,0|1gu403z,14,9,0|1gu4040,15,4,1|1h4ww3z,15,4,1|1h4ww40,14,9,0|1hcu2rz,14,9,0|1hcu2s0,15,4,1|1hnzxfz,15,4,1|1hnzxg0,14,9,0|1hvk5fz,14,9,0|1hvk5g0,15,4,1|1i6q03z,15,4,1|1i6q040,14,9,0|1iea83z,14,9,0|1iea840,15,4,1|1ipg2rz,15,4,1|1ipg2s0,14,9,0|1ixd9fz,14,9,0|1ixd9g0,15,4,1|1j865fz,15,4,1|1j865g0,14,9,0|1jg3c3z,14,9,0|1jg3c40,15,4,1|1jqw83z,15,4,1|1jqw840,14,9,0|1jyterz,14,9,0|1jytes0,15,4,1|1k9z9fz,15,4,1|1k9z9g0,14,9,0|1khjhfz,14,9,0|1khjhg0,15,4,1|1kspc3z,15,4,1|1kspc40,14,9,0|1l09k3z,14,9,0|1l09k40,15,4,1|1lbferz,15,4,1|1lbfes0,14,9,0|1ljclfz,14,9,0|1ljclg0,15,4,1|1lu5hfz,15,4,1|1lu5hg0,14,9,0|1m22o3z,14,9,0|1m22o40,15,4,1|1mcvk3z,15,4,1|1mcvk40,14,9,0|1mksqrz,14,9,0|1mksqs0,15,4,1|1mvlmrz,15,4,1|1mvlms0,14,9,0|1n3itfz,14,9,0|1n3itg0,15,4,1|1neoo3z,15,4,1|1neoo40,14,9,0|1nm8w3z,14,9,0|1nm8w40,15,4,1|1nxeqrz,15,4,1|1nxeqs0,14,9,0|1o4yyrz,14,9,0|1o4yys0,15,4,1|1og4tfz,15,4,1|1og4tg0,14,9,0|1oo203z,14,9,0|1oo2040,15,4,1|1oyuw3z,15,4,1|1oyuw40,14,9,0|1p6s2rz,14,9,0|1p6s2s0,15,4,1|1phkyrz,15,4,1|1phkys0,14,9,0|1ppi5fz,14,9,0|1ppi5g0,15,4,1|1q0o03z,15,4,1|1q0o040,14,9,0|1q8883z,14,9,0|1q88840,15,4,1|1qje2rz,15,4,1|1qje2s0,14,9,0|1qqyarz,14,9,0|1qqyas0,15,4,1|1r245fz,15,4,1|1r245g0,14,9,0|1r9odfz,14,9,0|1r9odg0,15,4,1|1rku83z,15,4,1|1rku840,14,9,0|1rsrerz,14,9,0|1rsres0,15,4,1|1s3karz,15,4,1|1s3kas0,14,9,0|1sbhhfz,14,9,0|1sbhhg0,15,4,1|1smadfz,15,4,1|1smadg0,14,9,0|1su7k3z,14,9,0|1su7k40,15,4,1|1t5derz,15,4,1|1t5des0,14,9,0|1tcxmrz,14,9,0|1tcxms0,15,4,1|1to3hfz,15,4,1|1to3hg0,14,9,0|1tvnpfz,14,9,0|1tvnpg0,15,4,1|1u6tk3z,15,4,1|1u6tk40,14,9,0|1ueqqrz,14,9,0|1ueqqs0,15,4,1|1upjmrz,15,4,1|1upjms0,14,9,0|1uxgtfz,14,9,0|1uxgtg0,15,4,1|1v89pfz,15,4,1|1v89pg0,14,9,0|1vg6w3z,14,9,0|1vg6w40,15,4,1|1vqzs3z,15,4,1|1vqzs40,14,9,0|NaN,14,9,0\",\"Europe/Volgograd|,0,207,0|-q3cw85,0,207,0|-q3cw84,100,4,0|-kmr4c1,100,4,0|-kmr4c0,105,203,0|5vb3jz,105,203,0|5vb3k0,91,186,1|64pwrz,91,186,1|64pws0,105,203,0|6e30vz,105,203,0|6e30w0,91,186,1|6nhu3z,91,186,1|6nhu40,105,203,0|6wuy7z,105,203,0|6wuy80,91,186,1|769rfz,91,186,1|769rg0,105,203,0|7foq7z,105,203,0|7foq80,91,186,1|7p1x3z,91,186,1|7p1x40,105,203,0|7yeyfz,105,203,0|7yeyg0,91,186,1|87rzrz,91,186,1|87rzs0,105,203,0|8h513z,105,203,0|8h5140,91,186,1|8qi2fz,91,186,1|8qi2g0,105,203,0|8zv3rz,105,203,0|8zv3s0,91,186,1|99853z,91,186,1|998540,105,203,0|9il6fz,105,203,0|9il6g0,105,203,1|9ryajz,105,203,1|9ryak0,100,4,0|a1bbvz,100,4,0|a1bbw0,105,203,1|aaod7z,105,203,1|aaod80,100,4,0|ak1ejz,100,4,0|ak1ek0,105,203,1|atrejz,105,203,1|atrek0,100,4,0|b34fvz,100,4,0|b34fw0,105,203,0|blufrz,105,203,0|blufs0,105,203,1|bv7jvz,105,203,1|bv7jw0,100,4,0|c4kl7z,100,4,0|c4kl80,105,203,1|cdxmjz,105,203,1|cdxmk0,100,4,0|cnanvz,100,4,0|cnanw0,105,203,1|cwnp7z,105,203,1|cwnp80,100,4,0|d60qjz,100,4,0|d60qk0,105,203,1|dfdrvz,105,203,1|dfdrw0,100,4,0|dp3rvz,100,4,0|dp3rw0,105,203,1|dzwnvz,105,203,1|dzwnw0,100,4,0|e7tujz,100,4,0|e7tuk0,105,203,1|eimqjz,105,203,1|eimqk0,100,4,0|eqjx7z,100,4,0|eqjx80,105,203,1|f1ct7z,105,203,1|f1ct80,100,4,0|f99zvz,100,4,0|f99zw0,105,203,1|fkfujz,105,203,1|fkfuk0,100,4,0|fs02jz,100,4,0|fs02k0,105,203,1|g35x7z,105,203,1|g35x80,100,4,0|gaq57z,100,4,0|gaq580,105,203,1|glvzvz,105,203,1|glvzw0,100,4,0|gtt6jz,100,4,0|gtt6k0,105,203,1|h4m2jz,105,203,1|h4m2k0,100,4,0|hcj97z,100,4,0|hcj980,105,203,1|hnc57z,105,203,1|hnc580,100,4,0|hv9bvz,100,4,0|hv9bw0,105,203,1|i6f6jz,105,203,1|i6f6k0,100,4,0|idzejz,100,4,0|idzek0,105,203,1|ip597z,105,203,1|ip5980,100,4,0|iwph7z,100,4,0|iwph80,105,203,1|j7vbvz,105,203,1|j7vbw0,100,4,0|jffjvz,100,4,0|jffjw0,105,203,1|jqlejz,105,203,1|jqlek0,100,4,0|jyil7z,100,4,0|jyil80,105,203,1|k9bh7z,105,203,1|k9bh80,100,4,0|kh8nvz,100,4,0|kh8nw0,105,203,1|ks1jvz,105,203,1|ks1jw0,100,4,0|kzyqjz,100,4,0|kzyqk0,105,203,1|lb4l7z,105,203,1|lb4l80,100,4,0|liot7z,100,4,0|liot80,105,203,0|ne0t3z,105,203,0|ne0t40,100,4,0|pha57z,100,4,0|pha580,105,203,0|qlyvrz,105,203,0|qlyvs0,100,4,0|NaN,100,4,0\",\"Europe/Warsaw|,0,374,0|-1ayy6k1,0,374,0|-1ayy6k0,157,374,0|-se9yk1,157,374,0|-se9yk0,8,8,0|-s0e081,8,8,0|-s0e080,9,9,1|-rsilg1,9,9,1|-rsilg0,8,8,0|-ridmk1,8,8,0|-ridmk0,9,9,1|-ragfw1,9,9,1|-ragfw0,8,8,0|-qznjw1,8,8,0|-qznjw0,9,9,1|-qrqd81,9,9,1|-qrqd80,14,9,0|-qgvpc1,14,9,0|-qgvpc0,15,4,1|-q8yio1,15,4,1|-q8yio0,14,9,0|-ou36w1,14,9,0|-ou36w0,8,8,0|-feqak1,8,8,0|-feqak0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6a2o1,9,9,1|-d6a2o0,8,8,0|-cvmtg1,8,8,0|-cvmtg0,9,9,1|-cm2g81,9,9,1|-cm2g80,8,8,0|-cdmo41,8,8,0|-cdmo40,9,9,1|-c4kl81,9,9,1|-c4kl80,8,8,0|-bttjw1,8,8,0|-bttjw0,9,9,1|-blwd81,9,9,1|-blwd80,8,8,0|-bbtek1,8,8,0|-bbtek0,9,9,1|-b36ak1,9,9,1|-b36ak0,8,8,0|-atgak1,8,8,0|-atgak0,9,9,1|-akg7w1,9,9,1|-akg7w0,8,8,0|-6kf401,8,8,0|-6kf400,9,9,1|-6eaqo1,9,9,1|-6eaqo0,8,8,0|-64xpc1,8,8,0|-64xpc0,9,9,1|-5vko01,9,9,1|-5vko00,8,8,0|-5iyyo1,8,8,0|-5iyyo0,9,9,1|-5chmo1,9,9,1|-5chmo0,8,8,0|-534lc1,8,8,0|-534lc0,9,9,1|-4trk01,9,9,1|-4trk00,8,8,0|-4hitc1,8,8,0|-4hitc0,9,9,1|-4b1hc1,9,9,1|-4b1hc0,8,8,0|-3ysqo1,8,8,0|-3ysqo0,9,9,1|-3sbeo1,9,9,1|-3sbeo0,8,8,0|-3g2o01,8,8,0|-3g2o00,9,9,1|-39lc01,9,9,1|-39lc00,8,8,0|-2wzmo1,8,8,0|-2wzmo0,9,9,1|-2qv9c1,9,9,1|-2qv9c0,8,8,0|3s9jzz,8,8,0|3s9k00,9,9,1|419mnz,9,9,1|419mo0,8,8,0|4azmnz,8,8,0|4azmo0,9,9,1|4kcnzz,9,9,1|4kco00,8,8,0|4tppbz,8,8,0|4tppc0,9,9,1|532qnz,9,9,1|532qo0,8,8,0|5csqnz,8,8,0|5csqo0,9,9,1|5lstbz,9,9,1|5lstc0,8,8,0|5v5unz,8,8,0|5v5uo0,9,9,1|64ivzz,9,9,1|64iw00,8,8,0|6dvxbz,8,8,0|6dvxc0,9,9,1|6n8ynz,9,9,1|6n8yo0,8,8,0|6wlzzz,8,8,0|6wm000,9,9,1|75z1bz,9,9,1|75z1c0,8,8,0|7fc2nz,8,8,0|7fc2o0,9,9,1|7p22nz,9,9,1|7p22o0,8,8,0|7yf3zz,8,8,0|7yf400,9,9,1|87s5bz,9,9,1|87s5c0,8,8,0|8h56nz,8,8,0|8h56o0,9,9,1|8qi7zz,9,9,1|8qi800,8,8,0|8zv9bz,8,8,0|8zv9c0,9,9,1|998anz,9,9,1|998ao0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Zagreb|,0,327,0|-18vsmgp,0,327,0|-18vsmgo,8,8,0|-ezayw1,8,8,0|-ezayw0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-dfqqk1,8,8,0|-dfqqk0,9,9,1|-d6dp81,9,9,1|-d6dp80,8,8,0|-cv5zw1,8,8,0|-cv5zw0,9,9,1|-cofek1,9,9,1|-cofek0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Europe/Zaporozhye|,0,244,0|-1ayy96h,0,244,0|-1ayy96g,158,376,0|-nu12hd,158,376,0|-nu12hc,14,9,0|-kmr1k1,14,9,0|-kmr1k0,149,4,0|-esq0c1,149,4,0|-esq0c0,9,9,1|-e6dzw1,9,9,1|-e6dzw0,8,8,0|-dytrw1,8,8,0|-dytrw0,9,9,1|-dp3rw1,9,9,1|-dp3rw0,8,8,0|-do11g1,8,8,0|-do11g0,149,4,0|5vb6bz,149,4,0|5vb6c0,150,203,1|64pzjz,150,203,1|64pzk0,149,4,0|6e33nz,149,4,0|6e33o0,150,203,1|6nhwvz,150,203,1|6nhww0,149,4,0|6wv0zz,149,4,0|6wv100,150,203,1|769u7z,150,203,1|769u80,149,4,0|7foszz,149,4,0|7fot00,150,203,1|7p1zvz,150,203,1|7p1zw0,149,4,0|7yf17z,149,4,0|7yf180,150,203,1|87s2jz,150,203,1|87s2k0,149,4,0|8h53vz,149,4,0|8h53w0,150,203,1|8qi57z,150,203,1|8qi580,149,4,0|8zv6jz,149,4,0|8zv6k0,150,203,1|9987vz,150,203,1|9987w0,149,4,0|9il97z,149,4,0|9il980,150,203,1|9ryajz,150,203,1|9ryak0,149,4,0|a1bbvz,149,4,0|a1bbw0,150,203,1|aaod7z,150,203,1|aaod80,149,4,0|ak1ejz,149,4,0|ak1ek0,150,203,1|atrejz,150,203,1|atrek0,149,4,0|b34fvz,149,4,0|b34fw0,15,4,1|bchbnz,15,4,1|bchbo0,14,9,0|blufrz,14,9,0|blufs0,15,4,1|bv7ebz,15,4,1|bv7ec0,14,9,0|c4kifz,14,9,0|c4kig0,15,4,1|cdxgzz,15,4,1|cdxh00,14,9,0|cnal3z,14,9,0|cnal40,15,4,1|cwnjnz,15,4,1|cwnjo0,14,9,0|d60w3z,14,9,0|d60w40,15,4,1|dfdxfz,15,4,1|dfdxg0,14,9,0|dp3xfz,14,9,0|dp3xg0,15,4,1|dzwtfz,15,4,1|dzwtg0,14,9,0|e7u03z,14,9,0|e7u040,15,4,1|eimw3z,15,4,1|eimw40,14,9,0|eqk2rz,14,9,0|eqk2s0,15,4,1|f1cyrz,15,4,1|f1cys0,14,9,0|f9a5fz,14,9,0|f9a5g0,15,4,1|fkg03z,15,4,1|fkg040,14,9,0|fs083z,14,9,0|fs0840,15,4,1|g362rz,15,4,1|g362s0,14,9,0|gaqarz,14,9,0|gaqas0,15,4,1|glw5fz,15,4,1|glw5g0,14,9,0|gttc3z,14,9,0|gttc40,15,4,1|h4m83z,15,4,1|h4m840,14,9,0|hcjerz,14,9,0|hcjes0,15,4,1|hncarz,15,4,1|hncas0,14,9,0|hv9hfz,14,9,0|hv9hg0,15,4,1|i6fc3z,15,4,1|i6fc40,14,9,0|idzk3z,14,9,0|idzk40,15,4,1|ip5erz,15,4,1|ip5es0,14,9,0|iwpmrz,14,9,0|iwpms0,15,4,1|j7vhfz,15,4,1|j7vhg0,14,9,0|jffpfz,14,9,0|jffpg0,15,4,1|jqlk3z,15,4,1|jqlk40,14,9,0|jyiqrz,14,9,0|jyiqs0,15,4,1|k9bmrz,15,4,1|k9bms0,14,9,0|kh8tfz,14,9,0|kh8tg0,15,4,1|ks1pfz,15,4,1|ks1pg0,14,9,0|kzyw3z,14,9,0|kzyw40,15,4,1|lb4qrz,15,4,1|lb4qs0,14,9,0|lioyrz,14,9,0|lioys0,15,4,1|ltutfz,15,4,1|ltutg0,14,9,0|m1f1fz,14,9,0|m1f1g0,15,4,1|mckw3z,15,4,1|mckw40,14,9,0|mki2rz,14,9,0|mki2s0,15,4,1|mvayrz,15,4,1|mvays0,14,9,0|n385fz,14,9,0|n385g0,15,4,1|ne11fz,15,4,1|ne11g0,14,9,0|nly83z,14,9,0|nly840,15,4,1|nwr43z,15,4,1|nwr440,14,9,0|o4oarz,14,9,0|o4oas0,15,4,1|ofu5fz,15,4,1|ofu5g0,14,9,0|onedfz,14,9,0|onedg0,15,4,1|oyk83z,15,4,1|oyk840,14,9,0|p64g3z,14,9,0|p64g40,15,4,1|phaarz,15,4,1|phaas0,14,9,0|pp7hfz,14,9,0|pp7hg0,15,4,1|q00dfz,15,4,1|q00dg0,14,9,0|q7xk3z,14,9,0|q7xk40,15,4,1|qiqg3z,15,4,1|qiqg40,14,9,0|qqnmrz,14,9,0|qqnms0,15,4,1|r1thfz,15,4,1|r1thg0,14,9,0|r9dpfz,14,9,0|r9dpg0,15,4,1|rkjk3z,15,4,1|rkjk40,14,9,0|rs3s3z,14,9,0|rs3s40,15,4,1|s39mrz,15,4,1|s39ms0,14,9,0|sb6tfz,14,9,0|sb6tg0,15,4,1|slzpfz,15,4,1|slzpg0,14,9,0|stww3z,14,9,0|stww40,15,4,1|t4ps3z,15,4,1|t4ps40,14,9,0|tcmyrz,14,9,0|tcmys0,15,4,1|tnfurz,15,4,1|tnfus0,14,9,0|tvd1fz,14,9,0|tvd1g0,15,4,1|u6iw3z,15,4,1|u6iw40,14,9,0|ue343z,14,9,0|ue3440,15,4,1|up8yrz,15,4,1|up8ys0,14,9,0|uwt6rz,14,9,0|uwt6s0,15,4,1|v7z1fz,15,4,1|v7z1g0,14,9,0|vfw83z,14,9,0|vfw840,15,4,1|vqp43z,15,4,1|vqp440,14,9,0|vymarz,14,9,0|vymas0,15,4,1|w9f6rz,15,4,1|w9f6s0,14,9,0|whcdfz,14,9,0|whcdg0,15,4,1|wsi83z,15,4,1|wsi840,14,9,0|x02g3z,14,9,0|x02g40,15,4,1|xb8arz,15,4,1|xb8as0,14,9,0|xisirz,14,9,0|xisis0,15,4,1|xtydfz,15,4,1|xtydg0,14,9,0|y1ilfz,14,9,0|y1ilg0,15,4,1|ycog3z,15,4,1|ycog40,14,9,0|yklmrz,14,9,0|yklms0,15,4,1|yveirz,15,4,1|yveis0,14,9,0|z3bpfz,14,9,0|z3bpg0,15,4,1|ze4lfz,15,4,1|ze4lg0,14,9,0|zm1s3z,14,9,0|zm1s40,15,4,1|zx7mrz,15,4,1|zx7ms0,14,9,0|104rurz,14,9,0|104rus0,15,4,1|10fxpfz,15,4,1|10fxpg0,14,9,0|10nhxfz,14,9,0|10nhxg0,15,4,1|10yns3z,15,4,1|10yns40,14,9,0|116kyrz,14,9,0|116kys0,15,4,1|11hdurz,15,4,1|11hdus0,14,9,0|11pb1fz,14,9,0|11pb1g0,15,4,1|1203xfz,15,4,1|1203xg0,14,9,0|128143z,14,9,0|1281440,15,4,1|12iu03z,15,4,1|12iu040,14,9,0|12qr6rz,14,9,0|12qr6s0,15,4,1|131x1fz,15,4,1|131x1g0,14,9,0|139h9fz,14,9,0|139h9g0,15,4,1|13kn43z,15,4,1|13kn440,14,9,0|13s7c3z,14,9,0|13s7c40,15,4,1|143d6rz,15,4,1|143d6s0,14,9,0|14badfz,14,9,0|14badg0,15,4,1|14m39fz,15,4,1|14m39g0,14,9,0|14u0g3z,14,9,0|14u0g40,15,4,1|154tc3z,15,4,1|154tc40,14,9,0|15cqirz,14,9,0|15cqis0,15,4,1|15nwdfz,15,4,1|15nwdg0,14,9,0|15vglfz,14,9,0|15vglg0,15,4,1|166mg3z,15,4,1|166mg40,14,9,0|16e6o3z,14,9,0|16e6o40,15,4,1|16pcirz,15,4,1|16pcis0,14,9,0|16x9pfz,14,9,0|16x9pg0,15,4,1|1782lfz,15,4,1|1782lg0,14,9,0|17fzs3z,14,9,0|17fzs40,15,4,1|17qso3z,15,4,1|17qso40,14,9,0|17ypurz,14,9,0|17ypus0,15,4,1|189iqrz,15,4,1|189iqs0,14,9,0|18hfxfz,14,9,0|18hfxg0,15,4,1|18sls3z,15,4,1|18sls40,14,9,0|190603z,14,9,0|1906040,15,4,1|19bburz,15,4,1|19bbus0,14,9,0|19iw2rz,14,9,0|19iw2s0,15,4,1|19u1xfz,15,4,1|19u1xg0,14,9,0|1a1z43z,14,9,0|1a1z440,15,4,1|1acs03z,15,4,1|1acs040,14,9,0|1akp6rz,14,9,0|1akp6s0,15,4,1|1avi2rz,15,4,1|1avi2s0,14,9,0|1b3f9fz,14,9,0|1b3f9g0,15,4,1|1bel43z,15,4,1|1bel440,14,9,0|1bm5c3z,14,9,0|1bm5c40,15,4,1|1bxb6rz,15,4,1|1bxb6s0,14,9,0|1c4verz,14,9,0|1c4ves0,15,4,1|1cg19fz,15,4,1|1cg19g0,14,9,0|1cnlhfz,14,9,0|1cnlhg0,15,4,1|1cyrc3z,15,4,1|1cyrc40,14,9,0|1d6oirz,14,9,0|1d6ois0,15,4,1|1dhherz,15,4,1|1dhhes0,14,9,0|1dpelfz,14,9,0|1dpelg0,15,4,1|1e07hfz,15,4,1|1e07hg0,14,9,0|1e84o3z,14,9,0|1e84o40,15,4,1|1ejairz,15,4,1|1ejais0,14,9,0|1equqrz,14,9,0|1equqs0,15,4,1|1f20lfz,15,4,1|1f20lg0,14,9,0|1f9ktfz,14,9,0|1f9ktg0,15,4,1|1fkqo3z,15,4,1|1fkqo40,14,9,0|1fsnurz,14,9,0|1fsnus0,15,4,1|1g3gqrz,15,4,1|1g3gqs0,14,9,0|1gbdxfz,14,9,0|1gbdxg0,15,4,1|1gm6tfz,15,4,1|1gm6tg0,14,9,0|1gu403z,14,9,0|1gu4040,15,4,1|1h4ww3z,15,4,1|1h4ww40,14,9,0|1hcu2rz,14,9,0|1hcu2s0,15,4,1|1hnzxfz,15,4,1|1hnzxg0,14,9,0|1hvk5fz,14,9,0|1hvk5g0,15,4,1|1i6q03z,15,4,1|1i6q040,14,9,0|1iea83z,14,9,0|1iea840,15,4,1|1ipg2rz,15,4,1|1ipg2s0,14,9,0|1ixd9fz,14,9,0|1ixd9g0,15,4,1|1j865fz,15,4,1|1j865g0,14,9,0|1jg3c3z,14,9,0|1jg3c40,15,4,1|1jqw83z,15,4,1|1jqw840,14,9,0|1jyterz,14,9,0|1jytes0,15,4,1|1k9z9fz,15,4,1|1k9z9g0,14,9,0|1khjhfz,14,9,0|1khjhg0,15,4,1|1kspc3z,15,4,1|1kspc40,14,9,0|1l09k3z,14,9,0|1l09k40,15,4,1|1lbferz,15,4,1|1lbfes0,14,9,0|1ljclfz,14,9,0|1ljclg0,15,4,1|1lu5hfz,15,4,1|1lu5hg0,14,9,0|1m22o3z,14,9,0|1m22o40,15,4,1|1mcvk3z,15,4,1|1mcvk40,14,9,0|1mksqrz,14,9,0|1mksqs0,15,4,1|1mvlmrz,15,4,1|1mvlms0,14,9,0|1n3itfz,14,9,0|1n3itg0,15,4,1|1neoo3z,15,4,1|1neoo40,14,9,0|1nm8w3z,14,9,0|1nm8w40,15,4,1|1nxeqrz,15,4,1|1nxeqs0,14,9,0|1o4yyrz,14,9,0|1o4yys0,15,4,1|1og4tfz,15,4,1|1og4tg0,14,9,0|1oo203z,14,9,0|1oo2040,15,4,1|1oyuw3z,15,4,1|1oyuw40,14,9,0|1p6s2rz,14,9,0|1p6s2s0,15,4,1|1phkyrz,15,4,1|1phkys0,14,9,0|1ppi5fz,14,9,0|1ppi5g0,15,4,1|1q0o03z,15,4,1|1q0o040,14,9,0|1q8883z,14,9,0|1q88840,15,4,1|1qje2rz,15,4,1|1qje2s0,14,9,0|1qqyarz,14,9,0|1qqyas0,15,4,1|1r245fz,15,4,1|1r245g0,14,9,0|1r9odfz,14,9,0|1r9odg0,15,4,1|1rku83z,15,4,1|1rku840,14,9,0|1rsrerz,14,9,0|1rsres0,15,4,1|1s3karz,15,4,1|1s3kas0,14,9,0|1sbhhfz,14,9,0|1sbhhg0,15,4,1|1smadfz,15,4,1|1smadg0,14,9,0|1su7k3z,14,9,0|1su7k40,15,4,1|1t5derz,15,4,1|1t5des0,14,9,0|1tcxmrz,14,9,0|1tcxms0,15,4,1|1to3hfz,15,4,1|1to3hg0,14,9,0|1tvnpfz,14,9,0|1tvnpg0,15,4,1|1u6tk3z,15,4,1|1u6tk40,14,9,0|1ueqqrz,14,9,0|1ueqqs0,15,4,1|1upjmrz,15,4,1|1upjms0,14,9,0|1uxgtfz,14,9,0|1uxgtg0,15,4,1|1v89pfz,15,4,1|1v89pg0,14,9,0|1vg6w3z,14,9,0|1vg6w40,15,4,1|1vqzs3z,15,4,1|1vqzs40,14,9,0|NaN,14,9,0\",\"Europe/Zurich|,0,333,0|-1os49kx,0,333,0|-1os49kw,54,334,0|-13g441n,54,334,0|-13g441m,8,8,0|-eyh6o1,8,8,0|-eyh6o0,9,9,1|-eqk001,9,9,1|-eqk000,8,8,0|-efr401,8,8,0|-efr400,9,9,1|-e7txc1,9,9,1|-e7txc0,8,8,0|5v5xfz,8,8,0|5v5xg0,9,9,1|64iyrz,9,9,1|64iys0,8,8,0|6dw03z,8,8,0|6dw040,9,9,1|6n91fz,9,9,1|6n91g0,8,8,0|6wm2rz,8,8,0|6wm2s0,9,9,1|75z43z,9,9,1|75z440,8,8,0|7fc5fz,8,8,0|7fc5g0,9,9,1|7p25fz,9,9,1|7p25g0,8,8,0|7yf6rz,8,8,0|7yf6s0,9,9,1|87s83z,9,9,1|87s840,8,8,0|8h59fz,8,8,0|8h59g0,9,9,1|8qiarz,9,9,1|8qias0,8,8,0|8zvc3z,8,8,0|8zvc40,9,9,1|998dfz,9,9,1|998dg0,8,8,0|9ilerz,8,8,0|9iles0,9,9,1|9ryg3z,9,9,1|9ryg40,8,8,0|a1bhfz,8,8,0|a1bhg0,9,9,1|aaoirz,9,9,1|aaois0,8,8,0|ak1k3z,8,8,0|ak1k40,9,9,1|atrk3z,9,9,1|atrk40,8,8,0|b34lfz,8,8,0|b34lg0,9,9,1|bchmrz,9,9,1|bchms0,8,8,0|bluo3z,8,8,0|bluo40,9,9,1|bv7pfz,9,9,1|bv7pg0,8,8,0|c4kqrz,8,8,0|c4kqs0,9,9,1|cdxs3z,9,9,1|cdxs40,8,8,0|cnatfz,8,8,0|cnatg0,9,9,1|cwnurz,9,9,1|cwnus0,8,8,0|d60w3z,8,8,0|d60w40,9,9,1|dfdxfz,9,9,1|dfdxg0,8,8,0|dp3xfz,8,8,0|dp3xg0,9,9,1|dzwtfz,9,9,1|dzwtg0,8,8,0|e7u03z,8,8,0|e7u040,9,9,1|eimw3z,9,9,1|eimw40,8,8,0|eqk2rz,8,8,0|eqk2s0,9,9,1|f1cyrz,9,9,1|f1cys0,8,8,0|f9a5fz,8,8,0|f9a5g0,9,9,1|fkg03z,9,9,1|fkg040,8,8,0|fs083z,8,8,0|fs0840,9,9,1|g362rz,9,9,1|g362s0,8,8,0|gaqarz,8,8,0|gaqas0,9,9,1|glw5fz,9,9,1|glw5g0,8,8,0|gttc3z,8,8,0|gttc40,9,9,1|h4m83z,9,9,1|h4m840,8,8,0|hcjerz,8,8,0|hcjes0,9,9,1|hncarz,9,9,1|hncas0,8,8,0|hv9hfz,8,8,0|hv9hg0,9,9,1|i6fc3z,9,9,1|i6fc40,8,8,0|idzk3z,8,8,0|idzk40,9,9,1|ip5erz,9,9,1|ip5es0,8,8,0|iwpmrz,8,8,0|iwpms0,9,9,1|j7vhfz,9,9,1|j7vhg0,8,8,0|jffpfz,8,8,0|jffpg0,9,9,1|jqlk3z,9,9,1|jqlk40,8,8,0|jyiqrz,8,8,0|jyiqs0,9,9,1|k9bmrz,9,9,1|k9bms0,8,8,0|kh8tfz,8,8,0|kh8tg0,9,9,1|ks1pfz,9,9,1|ks1pg0,8,8,0|kzyw3z,8,8,0|kzyw40,9,9,1|lb4qrz,9,9,1|lb4qs0,8,8,0|lioyrz,8,8,0|lioys0,9,9,1|ltutfz,9,9,1|ltutg0,8,8,0|m1f1fz,8,8,0|m1f1g0,9,9,1|mckw3z,9,9,1|mckw40,8,8,0|mki2rz,8,8,0|mki2s0,9,9,1|mvayrz,9,9,1|mvays0,8,8,0|n385fz,8,8,0|n385g0,9,9,1|ne11fz,9,9,1|ne11g0,8,8,0|nly83z,8,8,0|nly840,9,9,1|nwr43z,9,9,1|nwr440,8,8,0|o4oarz,8,8,0|o4oas0,9,9,1|ofu5fz,9,9,1|ofu5g0,8,8,0|onedfz,8,8,0|onedg0,9,9,1|oyk83z,9,9,1|oyk840,8,8,0|p64g3z,8,8,0|p64g40,9,9,1|phaarz,9,9,1|phaas0,8,8,0|pp7hfz,8,8,0|pp7hg0,9,9,1|q00dfz,9,9,1|q00dg0,8,8,0|q7xk3z,8,8,0|q7xk40,9,9,1|qiqg3z,9,9,1|qiqg40,8,8,0|qqnmrz,8,8,0|qqnms0,9,9,1|r1thfz,9,9,1|r1thg0,8,8,0|r9dpfz,8,8,0|r9dpg0,9,9,1|rkjk3z,9,9,1|rkjk40,8,8,0|rs3s3z,8,8,0|rs3s40,9,9,1|s39mrz,9,9,1|s39ms0,8,8,0|sb6tfz,8,8,0|sb6tg0,9,9,1|slzpfz,9,9,1|slzpg0,8,8,0|stww3z,8,8,0|stww40,9,9,1|t4ps3z,9,9,1|t4ps40,8,8,0|tcmyrz,8,8,0|tcmys0,9,9,1|tnfurz,9,9,1|tnfus0,8,8,0|tvd1fz,8,8,0|tvd1g0,9,9,1|u6iw3z,9,9,1|u6iw40,8,8,0|ue343z,8,8,0|ue3440,9,9,1|up8yrz,9,9,1|up8ys0,8,8,0|uwt6rz,8,8,0|uwt6s0,9,9,1|v7z1fz,9,9,1|v7z1g0,8,8,0|vfw83z,8,8,0|vfw840,9,9,1|vqp43z,9,9,1|vqp440,8,8,0|vymarz,8,8,0|vymas0,9,9,1|w9f6rz,9,9,1|w9f6s0,8,8,0|whcdfz,8,8,0|whcdg0,9,9,1|wsi83z,9,9,1|wsi840,8,8,0|x02g3z,8,8,0|x02g40,9,9,1|xb8arz,9,9,1|xb8as0,8,8,0|xisirz,8,8,0|xisis0,9,9,1|xtydfz,9,9,1|xtydg0,8,8,0|y1ilfz,8,8,0|y1ilg0,9,9,1|ycog3z,9,9,1|ycog40,8,8,0|yklmrz,8,8,0|yklms0,9,9,1|yveirz,9,9,1|yveis0,8,8,0|z3bpfz,8,8,0|z3bpg0,9,9,1|ze4lfz,9,9,1|ze4lg0,8,8,0|zm1s3z,8,8,0|zm1s40,9,9,1|zx7mrz,9,9,1|zx7ms0,8,8,0|104rurz,8,8,0|104rus0,9,9,1|10fxpfz,9,9,1|10fxpg0,8,8,0|10nhxfz,8,8,0|10nhxg0,9,9,1|10yns3z,9,9,1|10yns40,8,8,0|116kyrz,8,8,0|116kys0,9,9,1|11hdurz,9,9,1|11hdus0,8,8,0|11pb1fz,8,8,0|11pb1g0,9,9,1|1203xfz,9,9,1|1203xg0,8,8,0|128143z,8,8,0|1281440,9,9,1|12iu03z,9,9,1|12iu040,8,8,0|12qr6rz,8,8,0|12qr6s0,9,9,1|131x1fz,9,9,1|131x1g0,8,8,0|139h9fz,8,8,0|139h9g0,9,9,1|13kn43z,9,9,1|13kn440,8,8,0|13s7c3z,8,8,0|13s7c40,9,9,1|143d6rz,9,9,1|143d6s0,8,8,0|14badfz,8,8,0|14badg0,9,9,1|14m39fz,9,9,1|14m39g0,8,8,0|14u0g3z,8,8,0|14u0g40,9,9,1|154tc3z,9,9,1|154tc40,8,8,0|15cqirz,8,8,0|15cqis0,9,9,1|15nwdfz,9,9,1|15nwdg0,8,8,0|15vglfz,8,8,0|15vglg0,9,9,1|166mg3z,9,9,1|166mg40,8,8,0|16e6o3z,8,8,0|16e6o40,9,9,1|16pcirz,9,9,1|16pcis0,8,8,0|16x9pfz,8,8,0|16x9pg0,9,9,1|1782lfz,9,9,1|1782lg0,8,8,0|17fzs3z,8,8,0|17fzs40,9,9,1|17qso3z,9,9,1|17qso40,8,8,0|17ypurz,8,8,0|17ypus0,9,9,1|189iqrz,9,9,1|189iqs0,8,8,0|18hfxfz,8,8,0|18hfxg0,9,9,1|18sls3z,9,9,1|18sls40,8,8,0|190603z,8,8,0|1906040,9,9,1|19bburz,9,9,1|19bbus0,8,8,0|19iw2rz,8,8,0|19iw2s0,9,9,1|19u1xfz,9,9,1|19u1xg0,8,8,0|1a1z43z,8,8,0|1a1z440,9,9,1|1acs03z,9,9,1|1acs040,8,8,0|1akp6rz,8,8,0|1akp6s0,9,9,1|1avi2rz,9,9,1|1avi2s0,8,8,0|1b3f9fz,8,8,0|1b3f9g0,9,9,1|1bel43z,9,9,1|1bel440,8,8,0|1bm5c3z,8,8,0|1bm5c40,9,9,1|1bxb6rz,9,9,1|1bxb6s0,8,8,0|1c4verz,8,8,0|1c4ves0,9,9,1|1cg19fz,9,9,1|1cg19g0,8,8,0|1cnlhfz,8,8,0|1cnlhg0,9,9,1|1cyrc3z,9,9,1|1cyrc40,8,8,0|1d6oirz,8,8,0|1d6ois0,9,9,1|1dhherz,9,9,1|1dhhes0,8,8,0|1dpelfz,8,8,0|1dpelg0,9,9,1|1e07hfz,9,9,1|1e07hg0,8,8,0|1e84o3z,8,8,0|1e84o40,9,9,1|1ejairz,9,9,1|1ejais0,8,8,0|1equqrz,8,8,0|1equqs0,9,9,1|1f20lfz,9,9,1|1f20lg0,8,8,0|1f9ktfz,8,8,0|1f9ktg0,9,9,1|1fkqo3z,9,9,1|1fkqo40,8,8,0|1fsnurz,8,8,0|1fsnus0,9,9,1|1g3gqrz,9,9,1|1g3gqs0,8,8,0|1gbdxfz,8,8,0|1gbdxg0,9,9,1|1gm6tfz,9,9,1|1gm6tg0,8,8,0|1gu403z,8,8,0|1gu4040,9,9,1|1h4ww3z,9,9,1|1h4ww40,8,8,0|1hcu2rz,8,8,0|1hcu2s0,9,9,1|1hnzxfz,9,9,1|1hnzxg0,8,8,0|1hvk5fz,8,8,0|1hvk5g0,9,9,1|1i6q03z,9,9,1|1i6q040,8,8,0|1iea83z,8,8,0|1iea840,9,9,1|1ipg2rz,9,9,1|1ipg2s0,8,8,0|1ixd9fz,8,8,0|1ixd9g0,9,9,1|1j865fz,9,9,1|1j865g0,8,8,0|1jg3c3z,8,8,0|1jg3c40,9,9,1|1jqw83z,9,9,1|1jqw840,8,8,0|1jyterz,8,8,0|1jytes0,9,9,1|1k9z9fz,9,9,1|1k9z9g0,8,8,0|1khjhfz,8,8,0|1khjhg0,9,9,1|1kspc3z,9,9,1|1kspc40,8,8,0|1l09k3z,8,8,0|1l09k40,9,9,1|1lbferz,9,9,1|1lbfes0,8,8,0|1ljclfz,8,8,0|1ljclg0,9,9,1|1lu5hfz,9,9,1|1lu5hg0,8,8,0|1m22o3z,8,8,0|1m22o40,9,9,1|1mcvk3z,9,9,1|1mcvk40,8,8,0|1mksqrz,8,8,0|1mksqs0,9,9,1|1mvlmrz,9,9,1|1mvlms0,8,8,0|1n3itfz,8,8,0|1n3itg0,9,9,1|1neoo3z,9,9,1|1neoo40,8,8,0|1nm8w3z,8,8,0|1nm8w40,9,9,1|1nxeqrz,9,9,1|1nxeqs0,8,8,0|1o4yyrz,8,8,0|1o4yys0,9,9,1|1og4tfz,9,9,1|1og4tg0,8,8,0|1oo203z,8,8,0|1oo2040,9,9,1|1oyuw3z,9,9,1|1oyuw40,8,8,0|1p6s2rz,8,8,0|1p6s2s0,9,9,1|1phkyrz,9,9,1|1phkys0,8,8,0|1ppi5fz,8,8,0|1ppi5g0,9,9,1|1q0o03z,9,9,1|1q0o040,8,8,0|1q8883z,8,8,0|1q88840,9,9,1|1qje2rz,9,9,1|1qje2s0,8,8,0|1qqyarz,8,8,0|1qqyas0,9,9,1|1r245fz,9,9,1|1r245g0,8,8,0|1r9odfz,8,8,0|1r9odg0,9,9,1|1rku83z,9,9,1|1rku840,8,8,0|1rsrerz,8,8,0|1rsres0,9,9,1|1s3karz,9,9,1|1s3kas0,8,8,0|1sbhhfz,8,8,0|1sbhhg0,9,9,1|1smadfz,9,9,1|1smadg0,8,8,0|1su7k3z,8,8,0|1su7k40,9,9,1|1t5derz,9,9,1|1t5des0,8,8,0|1tcxmrz,8,8,0|1tcxms0,9,9,1|1to3hfz,9,9,1|1to3hg0,8,8,0|1tvnpfz,8,8,0|1tvnpg0,9,9,1|1u6tk3z,9,9,1|1u6tk40,8,8,0|1ueqqrz,8,8,0|1ueqqs0,9,9,1|1upjmrz,9,9,1|1upjms0,8,8,0|1uxgtfz,8,8,0|1uxgtg0,9,9,1|1v89pfz,9,9,1|1v89pg0,8,8,0|1vg6w3z,8,8,0|1vg6w40,9,9,1|1vqzs3z,9,9,1|1vqzs40,8,8,0|NaN,8,8,0\",\"Indian/Antananarivo|,0,2,0|-w6p5hh,0,2,0|-w6p5hg,2,3,0|-lnsey1,2,3,0|-lnsey0,3,4,0|-kvcdo1,3,4,0|-kvcdo0,2,3,0|-h80ka1,2,3,0|-h80ka0,4,5,0|-eb6ib1,4,5,0|-eb6ib0,3,4,0|NaN,3,4,0\",\"Indian/Chagos|,0,377,0|-wvpc2t,0,377,0|-wvpc2s,91,186,0|dkgsrz,91,186,0|dkgss0,96,190,0|NaN,96,190,0\",\"Indian/Christmas|,0,378,0|-133iwwt,0,378,0|-133iwws,90,185,0|NaN,90,185,0\",\"Indian/Cocos|,0,379,0|-10j6sm5,0,379,0|-10j6sm4,109,223,0|NaN,109,223,0\",\"Indian/Comoro|,0,2,0|-w6p5hh,0,2,0|-w6p5hg,2,3,0|-lnsey1,2,3,0|-lnsey0,3,4,0|-kvcdo1,3,4,0|-kvcdo0,2,3,0|-h80ka1,2,3,0|-h80ka0,4,5,0|-eb6ib1,4,5,0|-eb6ib0,3,4,0|NaN,3,4,0\",\"Indian/Kerguelen|,59,1,0|-afrs01,59,1,0|-afrs00,91,186,0|NaN,91,186,0\",\"Indian/Mahe|,0,380,0|-wvp8xp,0,380,0|-wvp8xo,105,203,0|NaN,105,203,0\",\"Indian/Maldives|,0,381,0|-1ayyga1,0,381,0|-1ayyga0,20,381,0|-57x6y1,20,381,0|-57x6y0,91,186,0|NaN,91,186,0\",\"Indian/Mauritius|,0,382,0|-wvp9bd,0,382,0|-wvp9bc,105,203,0|6nykvz,105,203,0|6nykw0,91,186,1|6wai3z,91,186,1|6wai40,105,203,0|k9befz,105,203,0|k9beg0,91,186,1|kh8ibz,91,186,1|kh8ic0,105,203,0|NaN,105,203,0\",\"Indian/Mayotte|,0,2,0|-w6p5hh,0,2,0|-w6p5hg,2,3,0|-lnsey1,2,3,0|-lnsey0,3,4,0|-kvcdo1,3,4,0|-kvcdo0,2,3,0|-h80ka1,2,3,0|-h80ka0,4,5,0|-eb6ib1,4,5,0|-eb6ib0,3,4,0|NaN,3,4,0\",\"Indian/Reunion|,0,383,0|-uks29t,0,383,0|-uks29s,105,203,0|NaN,105,203,0\",\"Pacific/Apia|,0,384,0|-14fxxj5,0,384,0|-14fxxj4,0,385,0|-usiiv5,0,385,0|-usiiv4,159,386,0|-afqw21,159,386,0|-afqw20,160,33,0|l9cp7z,160,33,0|l9cp80,161,34,1|lj12vz,161,34,1|lj12w0,160,33,0|ls15jz,160,33,0|ls15k0,161,34,1|lx0h3z,161,34,1|lx0h40,104,201,1|m1r5jz,104,201,1|m1r5k0,103,195,0|mb46vz,103,195,0|mb46w0,104,201,1|mku6vz,104,201,1|mku6w0,103,195,0|mtu9jz,103,195,0|mtu9k0,104,201,1|n3k9jz,104,201,1|n3k9k0,103,195,0|nckc7z,103,195,0|nckc80,104,201,1|nmac7z,104,201,1|nmac80,103,195,0|nvaevz,103,195,0|nvaew0,104,201,1|o50evz,104,201,1|o50ew0,103,195,0|oe0hjz,103,195,0|oe0hk0,104,201,1|onqhjz,104,201,1|onqhk0,103,195,0|owqk7z,103,195,0|owqk80,104,201,1|p6gk7z,104,201,1|p6gk80,103,195,0|pftljz,103,195,0|pftlk0,104,201,1|ppjljz,104,201,1|ppjlk0,103,195,0|pyjo7z,103,195,0|pyjo80,104,201,1|q89o7z,104,201,1|q89o80,103,195,0|qh9qvz,103,195,0|qh9qw0,104,201,1|qqzqvz,104,201,1|qqzqw0,103,195,0|NaN,103,195,0\",\"Pacific/Auckland|,0,191,0|-1gsoz15,0,191,0|-1gsoz14,97,192,0|-m01p21,97,192,0|-m01p20,98,193,1|-ltxei1,98,193,1|-ltxei0,97,192,0|-lieie1,97,192,0|-lieie0,98,194,1|-lahd41,98,194,1|-lahd40,97,192,0|-kzofq1,97,192,0|-kzofq0,98,194,1|-krrag1,98,194,1|-krrag0,97,192,0|-kgyd21,97,192,0|-kgyd20,98,194,1|-k917s1,98,194,1|-k917s0,97,192,0|-jy8ae1,97,192,0|-jy8ae0,98,194,1|-jpy6g1,98,194,1|-jpy6g0,97,192,0|-jfi7q1,97,192,0|-jfi7q0,98,194,1|-j783s1,98,194,1|-j783s0,97,192,0|-iws521,97,192,0|-iws520,98,194,1|-imc941,98,194,1|-imc940,97,192,0|-ief121,97,192,0|-ief120,98,194,1|-i3m6g1,98,194,1|-i3m6g0,97,192,0|-hvoye1,97,192,0|-hvoye0,98,194,1|-hkw3s1,98,194,1|-hkw3s0,97,192,0|-hcyvq1,97,192,0|-hcyvq0,98,194,1|-h26141,98,194,1|-h26140,97,192,0|-gu8t21,97,192,0|-gu8t20,98,194,1|-gjfyg1,98,194,1|-gjfyg0,97,192,0|-gbiqe1,97,192,0|-gbiqe0,98,194,1|-g0cx41,98,194,1|-g0cx40,97,192,0|-fssnq1,97,192,0|-fssnq0,98,194,1|-fhmug1,98,194,1|-fhmug0,97,192,0|-f9pme1,97,192,0|-f9pme0,98,194,1|-ciy9c1,98,194,1|-ciy9c0,98,194,0|2ivg7z,98,194,0|2ivg80,99,195,1|2omuvz,99,195,1|2omuw0,98,194,0|318k7z,98,194,0|318k80,99,195,1|382uvz,99,195,1|382uw0,98,194,0|3kbljz,98,194,0|3kblk0,99,195,1|3qsxjz,99,195,1|3qsxk0,98,194,0|431o7z,98,194,0|431o80,99,195,1|49j07z,99,195,1|49j080,98,194,0|4lrqvz,98,194,0|4lrqw0,99,195,1|4s92vz,99,195,1|4s92w0,98,194,0|54htjz,98,194,0|54htk0,99,195,1|5az5jz,99,195,1|5az5k0,98,194,0|5n7w7z,98,194,0|5n7w80,99,195,1|5tp87z,99,195,1|5tp880,98,194,0|65xyvz,98,194,0|65xyw0,99,195,1|6cs9jz,99,195,1|6cs9k0,98,194,0|6p107z,98,194,0|6p1080,99,195,1|6vic7z,99,195,1|6vic80,98,194,0|77r2vz,98,194,0|77r2w0,99,195,1|7e8evz,99,195,1|7e8ew0,98,194,0|7qh5jz,98,194,0|7qh5k0,99,195,1|7wyhjz,99,195,1|7wyhk0,98,194,0|89787z,98,194,0|897880,99,195,1|8fok7z,99,195,1|8fok80,98,194,0|8rxavz,98,194,0|8rxaw0,99,195,1|8yemvz,99,195,1|8yemw0,98,194,0|9andjz,98,194,0|9andk0,99,195,1|9hho7z,99,195,1|9hho80,98,194,0|9tqevz,98,194,0|9tqew0,99,195,1|a07qvz,99,195,1|a07qw0,98,194,0|abdljz,98,194,0|abdlk0,99,195,1|ajnqvz,99,195,1|ajnqw0,98,194,0|au3o7z,98,194,0|au3o80,99,195,1|b2dtjz,99,195,1|b2dtk0,98,194,0|bctqvz,98,194,0|bctqw0,99,195,1|bl3w7z,99,195,1|bl3w80,98,194,0|bvjtjz,98,194,0|bvjtk0,99,195,1|c46xjz,99,195,1|c46xk0,98,194,0|ce9w7z,98,194,0|ce9w80,99,195,1|cmx07z,99,195,1|cmx080,98,194,0|cwzyvz,98,194,0|cwzyw0,99,195,1|d5n2vz,99,195,1|d5n2w0,98,194,0|dfq1jz,98,194,0|dfq1k0,99,195,1|dod5jz,99,195,1|dod5k0,98,194,0|dyt2vz,98,194,0|dyt2w0,99,195,1|e7387z,99,195,1|e73880,98,194,0|ehj5jz,98,194,0|ehj5k0,99,195,1|eptavz,99,195,1|eptaw0,98,194,0|f0987z,98,194,0|f09880,99,195,1|f8wc7z,99,195,1|f8wc80,98,194,0|fizavz,98,194,0|fizaw0,99,195,1|frmevz,99,195,1|frmew0,98,194,0|g1pdjz,98,194,0|g1pdk0,99,195,1|gachjz,99,195,1|gachk0,98,194,0|gksevz,98,194,0|gksew0,99,195,1|gt2k7z,99,195,1|gt2k80,98,194,0|h3ihjz,98,194,0|h3ihk0,99,195,1|hbsmvz,99,195,1|hbsmw0,98,194,0|hm8k7z,98,194,0|hm8k80,99,195,1|huvo7z,99,195,1|huvo80,98,194,0|i4ymvz,98,194,0|i4ymw0,99,195,1|idlqvz,99,195,1|idlqw0,98,194,0|inopjz,98,194,0|inopk0,99,195,1|iwbtjz,99,195,1|iwbtk0,98,194,0|j6es7z,98,194,0|j6es80,99,195,1|jf1w7z,99,195,1|jf1w80,98,194,0|jp4uvz,98,194,0|jp4uw0,99,195,1|jyuuvz,99,195,1|jyuuw0,98,194,0|k7uxjz,98,194,0|k7uxk0,99,195,1|khkxjz,99,195,1|khkxk0,98,194,0|kql07z,98,194,0|kql080,99,195,1|l0b07z,99,195,1|l0b080,98,194,0|l9b2vz,98,194,0|l9b2w0,99,195,1|lj12vz,99,195,1|lj12w0,98,194,0|ls15jz,98,194,0|ls15k0,99,195,1|m1r5jz,99,195,1|m1r5k0,98,194,0|mb46vz,98,194,0|mb46w0,99,195,1|mku6vz,99,195,1|mku6w0,98,194,0|mtu9jz,98,194,0|mtu9k0,99,195,1|n3k9jz,99,195,1|n3k9k0,98,194,0|nckc7z,98,194,0|nckc80,99,195,1|nmac7z,99,195,1|nmac80,98,194,0|nvaevz,98,194,0|nvaew0,99,195,1|o50evz,99,195,1|o50ew0,98,194,0|oe0hjz,98,194,0|oe0hk0,99,195,1|onqhjz,99,195,1|onqhk0,98,194,0|owqk7z,98,194,0|owqk80,99,195,1|p6gk7z,99,195,1|p6gk80,98,194,0|pftljz,98,194,0|pftlk0,99,195,1|ppjljz,99,195,1|ppjlk0,98,194,0|pyjo7z,98,194,0|pyjo80,99,195,1|q89o7z,99,195,1|q89o80,98,194,0|qh9qvz,98,194,0|qh9qw0,99,195,1|qqzqvz,99,195,1|qqzqw0,98,194,0|qzztjz,98,194,0|qzztk0,99,195,1|r9ptjz,99,195,1|r9ptk0,98,194,0|ripw7z,98,194,0|ripw80,99,195,1|rsfw7z,99,195,1|rsfw80,98,194,0|s1fyvz,98,194,0|s1fyw0,99,195,1|sbixjz,99,195,1|sbixk0,98,194,0|skj07z,98,194,0|skj080,99,195,1|su907z,99,195,1|su9080,98,194,0|t392vz,98,194,0|t392w0,99,195,1|tcz2vz,99,195,1|tcz2w0,98,194,0|tlz5jz,98,194,0|tlz5k0,99,195,1|tvp5jz,99,195,1|tvp5k0,98,194,0|u4p87z,98,194,0|u4p880,99,195,1|uef87z,99,195,1|uef880,98,194,0|unfavz,98,194,0|unfaw0,99,195,1|ux5avz,99,195,1|ux5aw0,98,194,0|v6ic7z,98,194,0|v6ic80,99,195,1|vg8c7z,99,195,1|vg8c80,98,194,0|vp8evz,98,194,0|vp8ew0,99,195,1|vyyevz,99,195,1|vyyew0,98,194,0|w7yhjz,98,194,0|w7yhk0,99,195,1|whohjz,99,195,1|whohk0,98,194,0|wqok7z,98,194,0|wqok80,99,195,1|x0ek7z,99,195,1|x0ek80,98,194,0|x9emvz,98,194,0|x9emw0,99,195,1|xj4mvz,99,195,1|xj4mw0,98,194,0|xs4pjz,98,194,0|xs4pk0,99,195,1|y1upjz,99,195,1|y1upk0,98,194,0|yb7qvz,98,194,0|yb7qw0,99,195,1|ykxqvz,99,195,1|ykxqw0,98,194,0|ytxtjz,98,194,0|ytxtk0,99,195,1|z3ntjz,99,195,1|z3ntk0,98,194,0|zcnw7z,98,194,0|zcnw80,99,195,1|zmdw7z,99,195,1|zmdw80,98,194,0|zvdyvz,98,194,0|zvdyw0,99,195,1|1053yvz,99,195,1|1053yw0,98,194,0|10e41jz,98,194,0|10e41k0,99,195,1|10nu1jz,99,195,1|10nu1k0,98,194,0|10x72vz,98,194,0|10x72w0,99,195,1|116x2vz,99,195,1|116x2w0,98,194,0|11fx5jz,98,194,0|11fx5k0,99,195,1|11pn5jz,99,195,1|11pn5k0,98,194,0|11yn87z,98,194,0|11yn880,99,195,1|128d87z,99,195,1|128d880,98,194,0|12hdavz,98,194,0|12hdaw0,99,195,1|12r3avz,99,195,1|12r3aw0,98,194,0|1303djz,98,194,0|1303dk0,99,195,1|139tdjz,99,195,1|139tdk0,98,194,0|13itg7z,98,194,0|13itg80,99,195,1|13sjg7z,99,195,1|13sjg80,98,194,0|141whjz,98,194,0|141whk0,99,195,1|14bmhjz,99,195,1|14bmhk0,98,194,0|14kmk7z,98,194,0|14kmk80,99,195,1|14uck7z,99,195,1|14uck80,98,194,0|153cmvz,98,194,0|153cmw0,99,195,1|15d2mvz,99,195,1|15d2mw0,98,194,0|15m2pjz,98,194,0|15m2pk0,99,195,1|15vspjz,99,195,1|15vspk0,98,194,0|164ss7z,98,194,0|164ss80,99,195,1|16eis7z,99,195,1|16eis80,98,194,0|16niuvz,98,194,0|16niuw0,99,195,1|16xltjz,99,195,1|16xltk0,98,194,0|176lw7z,98,194,0|176lw80,99,195,1|17gbw7z,99,195,1|17gbw80,98,194,0|17pbyvz,98,194,0|17pbyw0,99,195,1|17z1yvz,99,195,1|17z1yw0,98,194,0|18821jz,98,194,0|18821k0,99,195,1|18hs1jz,99,195,1|18hs1k0,98,194,0|18qs47z,98,194,0|18qs480,99,195,1|190i47z,99,195,1|190i480,98,194,0|199i6vz,98,194,0|199i6w0,99,195,1|19j86vz,99,195,1|19j86w0,98,194,0|19sl87z,98,194,0|19sl880,99,195,1|1a2b87z,99,195,1|1a2b880,98,194,0|1abbavz,98,194,0|1abbaw0,99,195,1|1al1avz,99,195,1|1al1aw0,98,194,0|1au1djz,98,194,0|1au1dk0,99,195,1|1b3rdjz,99,195,1|1b3rdk0,98,194,0|1bcrg7z,98,194,0|1bcrg80,99,195,1|1bmhg7z,99,195,1|1bmhg80,98,194,0|1bvhivz,98,194,0|1bvhiw0,99,195,1|1c57ivz,99,195,1|1c57iw0,98,194,0|1ce7ljz,98,194,0|1ce7lk0,99,195,1|1cnxljz,99,195,1|1cnxlk0,98,194,0|1cxamvz,98,194,0|1cxamw0,99,195,1|1d70mvz,99,195,1|1d70mw0,98,194,0|1dg0pjz,98,194,0|1dg0pk0,99,195,1|1dpqpjz,99,195,1|1dpqpk0,98,194,0|1dyqs7z,98,194,0|1dyqs80,99,195,1|1e8gs7z,99,195,1|1e8gs80,98,194,0|1ehguvz,98,194,0|1ehguw0,99,195,1|1er6uvz,99,195,1|1er6uw0,98,194,0|1f06xjz,98,194,0|1f06xk0,99,195,1|1f9wxjz,99,195,1|1f9wxk0,98,194,0|1fj9yvz,98,194,0|1fj9yw0,99,195,1|1fszyvz,99,195,1|1fszyw0,98,194,0|1g201jz,98,194,0|1g201k0,99,195,1|1gbq1jz,99,195,1|1gbq1k0,98,194,0|1gkq47z,98,194,0|1gkq480,99,195,1|1gug47z,99,195,1|1gug480,98,194,0|1h3g6vz,98,194,0|1h3g6w0,99,195,1|1hd66vz,99,195,1|1hd66w0,98,194,0|1hm69jz,98,194,0|1hm69k0,99,195,1|1hvw9jz,99,195,1|1hvw9k0,98,194,0|1i4wc7z,98,194,0|1i4wc80,99,195,1|1iemc7z,99,195,1|1iemc80,98,194,0|1inzdjz,98,194,0|1inzdk0,99,195,1|1ixpdjz,99,195,1|1ixpdk0,98,194,0|1j6pg7z,98,194,0|1j6pg80,99,195,1|1jgfg7z,99,195,1|1jgfg80,98,194,0|1jpfivz,98,194,0|1jpfiw0,99,195,1|1jz5ivz,99,195,1|1jz5iw0,98,194,0|1k85ljz,98,194,0|1k85lk0,99,195,1|1khvljz,99,195,1|1khvlk0,98,194,0|1kqvo7z,98,194,0|1kqvo80,99,195,1|1l0lo7z,99,195,1|1l0lo80,98,194,0|1l9lqvz,98,194,0|1l9lqw0,99,195,1|1ljopjz,99,195,1|1ljopk0,98,194,0|1lsos7z,98,194,0|1lsos80,99,195,1|1m2es7z,99,195,1|1m2es80,98,194,0|1mbeuvz,98,194,0|1mbeuw0,99,195,1|1ml4uvz,99,195,1|1ml4uw0,98,194,0|1mu4xjz,98,194,0|1mu4xk0,99,195,1|1n3uxjz,99,195,1|1n3uxk0,98,194,0|1ncv07z,98,194,0|1ncv080,99,195,1|1nml07z,99,195,1|1nml080,98,194,0|1nvl2vz,98,194,0|1nvl2w0,99,195,1|1o5b2vz,99,195,1|1o5b2w0,98,194,0|1oeo47z,98,194,0|1oeo480,99,195,1|1ooe47z,99,195,1|1ooe480,98,194,0|1oxe6vz,98,194,0|1oxe6w0,99,195,1|1p746vz,99,195,1|1p746w0,98,194,0|1pg49jz,98,194,0|1pg49k0,99,195,1|1ppu9jz,99,195,1|1ppu9k0,98,194,0|1pyuc7z,98,194,0|1pyuc80,99,195,1|1q8kc7z,99,195,1|1q8kc80,98,194,0|1qhkevz,98,194,0|1qhkew0,99,195,1|1qraevz,99,195,1|1qraew0,98,194,0|1r0ahjz,98,194,0|1r0ahk0,99,195,1|1ra0hjz,99,195,1|1ra0hk0,98,194,0|1rjdivz,98,194,0|1rjdiw0,99,195,1|1rt3ivz,99,195,1|1rt3iw0,98,194,0|1s23ljz,98,194,0|1s23lk0,99,195,1|1sbtljz,99,195,1|1sbtlk0,98,194,0|1skto7z,98,194,0|1skto80,99,195,1|1sujo7z,99,195,1|1sujo80,98,194,0|1t3jqvz,98,194,0|1t3jqw0,99,195,1|1td9qvz,99,195,1|1td9qw0,98,194,0|1tm9tjz,98,194,0|1tm9tk0,99,195,1|1tvztjz,99,195,1|1tvztk0,98,194,0|1u5cuvz,98,194,0|1u5cuw0,99,195,1|1uf2uvz,99,195,1|1uf2uw0,98,194,0|1uo2xjz,98,194,0|1uo2xk0,99,195,1|1uxsxjz,99,195,1|1uxsxk0,98,194,0|1v6t07z,98,194,0|1v6t080,99,195,1|1vgj07z,99,195,1|1vgj080,98,194,0|1vpj2vz,98,194,0|1vpj2w0,99,195,1|NaN,99,195,1\",\"Pacific/Bougainville|,0,387,0|-1ayyvh5,0,387,0|-1ayyvh4,92,188,0|-1354j8x,92,188,0|-1354j8w,93,189,0|-ecsh41,93,189,0|-ecsh40,107,218,0|-cpsbo1,107,218,0|-cpsbo0,93,189,0|nh90fz,93,189,0|nh90g0,89,184,0|NaN,89,184,0\",\"Pacific/Chatham|,0,388,0|-1gsp0n1,0,388,0|-1gsp0n0,162,389,0|-ciya11,162,389,0|-ciya10,163,390,0|2ivg7z,163,390,0|2ivg80,164,391,1|2omuvz,164,391,1|2omuw0,163,390,0|318k7z,163,390,0|318k80,164,391,1|382uvz,164,391,1|382uw0,163,390,0|3kbljz,163,390,0|3kblk0,164,391,1|3qsxjz,164,391,1|3qsxk0,163,390,0|431o7z,163,390,0|431o80,164,391,1|49j07z,164,391,1|49j080,163,390,0|4lrqvz,163,390,0|4lrqw0,164,391,1|4s92vz,164,391,1|4s92w0,163,390,0|54htjz,163,390,0|54htk0,164,391,1|5az5jz,164,391,1|5az5k0,163,390,0|5n7w7z,163,390,0|5n7w80,164,391,1|5tp87z,164,391,1|5tp880,163,390,0|65xyvz,163,390,0|65xyw0,164,391,1|6cs9jz,164,391,1|6cs9k0,163,390,0|6p107z,163,390,0|6p1080,164,391,1|6vic7z,164,391,1|6vic80,163,390,0|77r2vz,163,390,0|77r2w0,164,391,1|7e8evz,164,391,1|7e8ew0,163,390,0|7qh5jz,163,390,0|7qh5k0,164,391,1|7wyhjz,164,391,1|7wyhk0,163,390,0|89787z,163,390,0|897880,164,391,1|8fok7z,164,391,1|8fok80,163,390,0|8rxavz,163,390,0|8rxaw0,164,391,1|8yemvz,164,391,1|8yemw0,163,390,0|9andjz,163,390,0|9andk0,164,391,1|9hho7z,164,391,1|9hho80,163,390,0|9tqevz,163,390,0|9tqew0,164,391,1|a07qvz,164,391,1|a07qw0,163,390,0|abdljz,163,390,0|abdlk0,164,391,1|ajnqvz,164,391,1|ajnqw0,163,390,0|au3o7z,163,390,0|au3o80,164,391,1|b2dtjz,164,391,1|b2dtk0,163,390,0|bctqvz,163,390,0|bctqw0,164,391,1|bl3w7z,164,391,1|bl3w80,163,390,0|bvjtjz,163,390,0|bvjtk0,164,391,1|c46xjz,164,391,1|c46xk0,163,390,0|ce9w7z,163,390,0|ce9w80,164,391,1|cmx07z,164,391,1|cmx080,163,390,0|cwzyvz,163,390,0|cwzyw0,164,391,1|d5n2vz,164,391,1|d5n2w0,163,390,0|dfq1jz,163,390,0|dfq1k0,164,391,1|dod5jz,164,391,1|dod5k0,163,390,0|dyt2vz,163,390,0|dyt2w0,164,391,1|e7387z,164,391,1|e73880,163,390,0|ehj5jz,163,390,0|ehj5k0,164,391,1|eptavz,164,391,1|eptaw0,163,390,0|f0987z,163,390,0|f09880,164,391,1|f8wc7z,164,391,1|f8wc80,163,390,0|fizavz,163,390,0|fizaw0,164,391,1|frmevz,164,391,1|frmew0,163,390,0|g1pdjz,163,390,0|g1pdk0,164,391,1|gachjz,164,391,1|gachk0,163,390,0|gksevz,163,390,0|gksew0,164,391,1|gt2k7z,164,391,1|gt2k80,163,390,0|h3ihjz,163,390,0|h3ihk0,164,391,1|hbsmvz,164,391,1|hbsmw0,163,390,0|hm8k7z,163,390,0|hm8k80,164,391,1|huvo7z,164,391,1|huvo80,163,390,0|i4ymvz,163,390,0|i4ymw0,164,391,1|idlqvz,164,391,1|idlqw0,163,390,0|inopjz,163,390,0|inopk0,164,391,1|iwbtjz,164,391,1|iwbtk0,163,390,0|j6es7z,163,390,0|j6es80,164,391,1|jf1w7z,164,391,1|jf1w80,163,390,0|jp4uvz,163,390,0|jp4uw0,164,391,1|jyuuvz,164,391,1|jyuuw0,163,390,0|k7uxjz,163,390,0|k7uxk0,164,391,1|khkxjz,164,391,1|khkxk0,163,390,0|kql07z,163,390,0|kql080,164,391,1|l0b07z,164,391,1|l0b080,163,390,0|l9b2vz,163,390,0|l9b2w0,164,391,1|lj12vz,164,391,1|lj12w0,163,390,0|ls15jz,163,390,0|ls15k0,164,391,1|m1r5jz,164,391,1|m1r5k0,163,390,0|mb46vz,163,390,0|mb46w0,164,391,1|mku6vz,164,391,1|mku6w0,163,390,0|mtu9jz,163,390,0|mtu9k0,164,391,1|n3k9jz,164,391,1|n3k9k0,163,390,0|nckc7z,163,390,0|nckc80,164,391,1|nmac7z,164,391,1|nmac80,163,390,0|nvaevz,163,390,0|nvaew0,164,391,1|o50evz,164,391,1|o50ew0,163,390,0|oe0hjz,163,390,0|oe0hk0,164,391,1|onqhjz,164,391,1|onqhk0,163,390,0|owqk7z,163,390,0|owqk80,164,391,1|p6gk7z,164,391,1|p6gk80,163,390,0|pftljz,163,390,0|pftlk0,164,391,1|ppjljz,164,391,1|ppjlk0,163,390,0|pyjo7z,163,390,0|pyjo80,164,391,1|q89o7z,164,391,1|q89o80,163,390,0|qh9qvz,163,390,0|qh9qw0,164,391,1|qqzqvz,164,391,1|qqzqw0,163,390,0|qzztjz,163,390,0|qzztk0,164,391,1|r9ptjz,164,391,1|r9ptk0,163,390,0|ripw7z,163,390,0|ripw80,164,391,1|rsfw7z,164,391,1|rsfw80,163,390,0|s1fyvz,163,390,0|s1fyw0,164,391,1|sbixjz,164,391,1|sbixk0,163,390,0|skj07z,163,390,0|skj080,164,391,1|su907z,164,391,1|su9080,163,390,0|t392vz,163,390,0|t392w0,164,391,1|tcz2vz,164,391,1|tcz2w0,163,390,0|tlz5jz,163,390,0|tlz5k0,164,391,1|tvp5jz,164,391,1|tvp5k0,163,390,0|u4p87z,163,390,0|u4p880,164,391,1|uef87z,164,391,1|uef880,163,390,0|unfavz,163,390,0|unfaw0,164,391,1|ux5avz,164,391,1|ux5aw0,163,390,0|v6ic7z,163,390,0|v6ic80,164,391,1|vg8c7z,164,391,1|vg8c80,163,390,0|vp8evz,163,390,0|vp8ew0,164,391,1|vyyevz,164,391,1|vyyew0,163,390,0|w7yhjz,163,390,0|w7yhk0,164,391,1|whohjz,164,391,1|whohk0,163,390,0|wqok7z,163,390,0|wqok80,164,391,1|x0ek7z,164,391,1|x0ek80,163,390,0|x9emvz,163,390,0|x9emw0,164,391,1|xj4mvz,164,391,1|xj4mw0,163,390,0|xs4pjz,163,390,0|xs4pk0,164,391,1|y1upjz,164,391,1|y1upk0,163,390,0|yb7qvz,163,390,0|yb7qw0,164,391,1|ykxqvz,164,391,1|ykxqw0,163,390,0|ytxtjz,163,390,0|ytxtk0,164,391,1|z3ntjz,164,391,1|z3ntk0,163,390,0|zcnw7z,163,390,0|zcnw80,164,391,1|zmdw7z,164,391,1|zmdw80,163,390,0|zvdyvz,163,390,0|zvdyw0,164,391,1|1053yvz,164,391,1|1053yw0,163,390,0|10e41jz,163,390,0|10e41k0,164,391,1|10nu1jz,164,391,1|10nu1k0,163,390,0|10x72vz,163,390,0|10x72w0,164,391,1|116x2vz,164,391,1|116x2w0,163,390,0|11fx5jz,163,390,0|11fx5k0,164,391,1|11pn5jz,164,391,1|11pn5k0,163,390,0|11yn87z,163,390,0|11yn880,164,391,1|128d87z,164,391,1|128d880,163,390,0|12hdavz,163,390,0|12hdaw0,164,391,1|12r3avz,164,391,1|12r3aw0,163,390,0|1303djz,163,390,0|1303dk0,164,391,1|139tdjz,164,391,1|139tdk0,163,390,0|13itg7z,163,390,0|13itg80,164,391,1|13sjg7z,164,391,1|13sjg80,163,390,0|141whjz,163,390,0|141whk0,164,391,1|14bmhjz,164,391,1|14bmhk0,163,390,0|14kmk7z,163,390,0|14kmk80,164,391,1|14uck7z,164,391,1|14uck80,163,390,0|153cmvz,163,390,0|153cmw0,164,391,1|15d2mvz,164,391,1|15d2mw0,163,390,0|15m2pjz,163,390,0|15m2pk0,164,391,1|15vspjz,164,391,1|15vspk0,163,390,0|164ss7z,163,390,0|164ss80,164,391,1|16eis7z,164,391,1|16eis80,163,390,0|16niuvz,163,390,0|16niuw0,164,391,1|16xltjz,164,391,1|16xltk0,163,390,0|176lw7z,163,390,0|176lw80,164,391,1|17gbw7z,164,391,1|17gbw80,163,390,0|17pbyvz,163,390,0|17pbyw0,164,391,1|17z1yvz,164,391,1|17z1yw0,163,390,0|18821jz,163,390,0|18821k0,164,391,1|18hs1jz,164,391,1|18hs1k0,163,390,0|18qs47z,163,390,0|18qs480,164,391,1|190i47z,164,391,1|190i480,163,390,0|199i6vz,163,390,0|199i6w0,164,391,1|19j86vz,164,391,1|19j86w0,163,390,0|19sl87z,163,390,0|19sl880,164,391,1|1a2b87z,164,391,1|1a2b880,163,390,0|1abbavz,163,390,0|1abbaw0,164,391,1|1al1avz,164,391,1|1al1aw0,163,390,0|1au1djz,163,390,0|1au1dk0,164,391,1|1b3rdjz,164,391,1|1b3rdk0,163,390,0|1bcrg7z,163,390,0|1bcrg80,164,391,1|1bmhg7z,164,391,1|1bmhg80,163,390,0|1bvhivz,163,390,0|1bvhiw0,164,391,1|1c57ivz,164,391,1|1c57iw0,163,390,0|1ce7ljz,163,390,0|1ce7lk0,164,391,1|1cnxljz,164,391,1|1cnxlk0,163,390,0|1cxamvz,163,390,0|1cxamw0,164,391,1|1d70mvz,164,391,1|1d70mw0,163,390,0|1dg0pjz,163,390,0|1dg0pk0,164,391,1|1dpqpjz,164,391,1|1dpqpk0,163,390,0|1dyqs7z,163,390,0|1dyqs80,164,391,1|1e8gs7z,164,391,1|1e8gs80,163,390,0|1ehguvz,163,390,0|1ehguw0,164,391,1|1er6uvz,164,391,1|1er6uw0,163,390,0|1f06xjz,163,390,0|1f06xk0,164,391,1|1f9wxjz,164,391,1|1f9wxk0,163,390,0|1fj9yvz,163,390,0|1fj9yw0,164,391,1|1fszyvz,164,391,1|1fszyw0,163,390,0|1g201jz,163,390,0|1g201k0,164,391,1|1gbq1jz,164,391,1|1gbq1k0,163,390,0|1gkq47z,163,390,0|1gkq480,164,391,1|1gug47z,164,391,1|1gug480,163,390,0|1h3g6vz,163,390,0|1h3g6w0,164,391,1|1hd66vz,164,391,1|1hd66w0,163,390,0|1hm69jz,163,390,0|1hm69k0,164,391,1|1hvw9jz,164,391,1|1hvw9k0,163,390,0|1i4wc7z,163,390,0|1i4wc80,164,391,1|1iemc7z,164,391,1|1iemc80,163,390,0|1inzdjz,163,390,0|1inzdk0,164,391,1|1ixpdjz,164,391,1|1ixpdk0,163,390,0|1j6pg7z,163,390,0|1j6pg80,164,391,1|1jgfg7z,164,391,1|1jgfg80,163,390,0|1jpfivz,163,390,0|1jpfiw0,164,391,1|1jz5ivz,164,391,1|1jz5iw0,163,390,0|1k85ljz,163,390,0|1k85lk0,164,391,1|1khvljz,164,391,1|1khvlk0,163,390,0|1kqvo7z,163,390,0|1kqvo80,164,391,1|1l0lo7z,164,391,1|1l0lo80,163,390,0|1l9lqvz,163,390,0|1l9lqw0,164,391,1|1ljopjz,164,391,1|1ljopk0,163,390,0|1lsos7z,163,390,0|1lsos80,164,391,1|1m2es7z,164,391,1|1m2es80,163,390,0|1mbeuvz,163,390,0|1mbeuw0,164,391,1|1ml4uvz,164,391,1|1ml4uw0,163,390,0|1mu4xjz,163,390,0|1mu4xk0,164,391,1|1n3uxjz,164,391,1|1n3uxk0,163,390,0|1ncv07z,163,390,0|1ncv080,164,391,1|1nml07z,164,391,1|1nml080,163,390,0|1nvl2vz,163,390,0|1nvl2w0,164,391,1|1o5b2vz,164,391,1|1o5b2w0,163,390,0|1oeo47z,163,390,0|1oeo480,164,391,1|1ooe47z,164,391,1|1ooe480,163,390,0|1oxe6vz,163,390,0|1oxe6w0,164,391,1|1p746vz,164,391,1|1p746w0,163,390,0|1pg49jz,163,390,0|1pg49k0,164,391,1|1ppu9jz,164,391,1|1ppu9k0,163,390,0|1pyuc7z,163,390,0|1pyuc80,164,391,1|1q8kc7z,164,391,1|1q8kc80,163,390,0|1qhkevz,163,390,0|1qhkew0,164,391,1|1qraevz,164,391,1|1qraew0,163,390,0|1r0ahjz,163,390,0|1r0ahk0,164,391,1|1ra0hjz,164,391,1|1ra0hk0,163,390,0|1rjdivz,163,390,0|1rjdiw0,164,391,1|1rt3ivz,164,391,1|1rt3iw0,163,390,0|1s23ljz,163,390,0|1s23lk0,164,391,1|1sbtljz,164,391,1|1sbtlk0,163,390,0|1skto7z,163,390,0|1skto80,164,391,1|1sujo7z,164,391,1|1sujo80,163,390,0|1t3jqvz,163,390,0|1t3jqw0,164,391,1|1td9qvz,164,391,1|1td9qw0,163,390,0|1tm9tjz,163,390,0|1tm9tk0,164,391,1|1tvztjz,164,391,1|1tvztk0,163,390,0|1u5cuvz,163,390,0|1u5cuw0,164,391,1|1uf2uvz,164,391,1|1uf2uw0,163,390,0|1uo2xjz,163,390,0|1uo2xk0,164,391,1|1uxsxjz,164,391,1|1uxsxk0,163,390,0|1v6t07z,163,390,0|1v6t080,164,391,1|1vgj07z,164,391,1|1vgj080,163,390,0|1vpj2vz,163,390,0|1vpj2w0,164,391,1|NaN,164,391,1\",\"Pacific/Chuuk|,0,392,0|-1t8j2rx,0,392,0|-1t8j2rw,0,393,0|-100f5fx,0,393,0|-100f5fw,93,189,0|-su4zs1,93,189,0|-su4zs0,107,218,0|-qknl01,107,218,0|-qknl00,93,189,0|-f08x41,93,189,0|-f08x40,107,218,0|-cqtd01,107,218,0|-cqtd00,93,189,0|NaN,93,189,0\",\"Pacific/Easter|,0,394,0|-15r0p2x,0,394,0|-15r0p2w,165,394,0|-jhfaex,165,394,0|-jhfaew,166,62,0|-lsvk1,166,62,0|-lsvk0,167,63,1|-e8qc1,167,63,1|-e8qc0,166,62,0|-1zww1,166,62,0|-1zww0,167,63,1|4hcbz,167,63,1|4hcc0,166,62,0|ekdrz,166,62,0|ekds0,167,63,1|mhhnz,167,63,1|mhho0,166,62,0|xagfz,166,62,0|xagg0,167,63,1|157kbz,167,63,1|157kc0,166,62,0|1gdhrz,166,62,0|1gdhs0,167,63,1|1nxmzz,167,63,1|1nxn00,166,62,0|1ydn3z,166,62,0|1ydn40,167,63,1|26npnz,167,63,1|26npo0,166,62,0|2htn3z,166,62,0|2htn40,167,63,1|2pdsbz,167,63,1|2pdsc0,166,62,0|30jprz,166,62,0|30jps0,167,63,1|38gtnz,167,63,1|38gto0,166,62,0|3j9sfz,166,62,0|3j9sg0,167,63,1|3r6wbz,167,63,1|3r6wc0,166,62,0|41zv3z,166,62,0|41zv40,167,63,1|49wyzz,167,63,1|49wz00,166,62,0|4l2wfz,166,62,0|4l2wg0,167,63,1|4sn1nz,167,63,1|4sn1o0,166,62,0|53sz3z,166,62,0|53sz40,167,63,1|5bd4bz,167,63,1|5bd4c0,166,62,0|5mj1rz,166,62,0|5mj1s0,167,63,1|5ug5nz,167,63,1|5ug5o0,166,62,0|6594fz,166,62,0|6594g0,167,63,1|6d68bz,167,63,1|6d68c0,167,63,0|6nz73z,167,63,0|6nz740,55,59,1|6vwazz,55,59,1|6vwb00,167,63,0|76p9rz,167,63,0|76p9s0,55,59,1|7emdnz,55,59,1|7emdo0,167,63,0|7psb3z,167,63,0|7psb40,55,59,1|7xcgbz,55,59,1|7xcgc0,167,63,0|88idrz,167,63,0|88ids0,55,59,1|8g2izz,55,59,1|8g2j00,167,63,0|8r8gfz,167,63,0|8r8gg0,55,59,1|90lezz,55,59,1|90lf00,167,63,0|99yj3z,167,63,0|99yj40,55,59,1|9hvmzz,55,59,1|9hvn00,167,63,0|9solrz,167,63,0|9sols0,55,59,1|a0lpnz,55,59,1|a0lpo0,167,63,0|abrn3z,167,63,0|abrn40,55,59,1|ajbsbz,55,59,1|ajbsc0,167,63,0|at1v3z,167,63,0|at1v40,55,59,1|b21uzz,55,59,1|b21v00,167,63,0|bd7sfz,167,63,0|bd7sg0,55,59,1|bl4wbz,55,59,1|bl4wc0,167,63,0|bvxv3z,167,63,0|bvxv40,55,59,1|c3uyzz,55,59,1|c3uz00,167,63,0|cenxrz,167,63,0|cenxs0,55,59,1|cml1nz,55,59,1|cml1o0,167,63,0|cxe0fz,167,63,0|cxe0g0,55,59,1|d5b4bz,55,59,1|d5b4c0,167,63,0|dgh1rz,167,63,0|dgh1s0,55,59,1|do16zz,55,59,1|do1700,167,63,0|dz74fz,167,63,0|dz74g0,55,59,1|e7u5nz,55,59,1|e7u5o0,167,63,0|ehx73z,167,63,0|ehx740,55,59,1|epuazz,55,59,1|epub00,167,63,0|ezxcfz,167,63,0|ezxcg0,55,59,1|f9n9nz,55,59,1|f9n9o0,167,63,0|fjdcfz,167,63,0|fjdcg0,55,59,1|fragbz,55,59,1|fragc0,167,63,0|g2gdrz,167,63,0|g2gds0,55,59,1|ga0izz,55,59,1|ga0j00,167,63,0|gl6gfz,167,63,0|gl6gg0,55,59,1|gsqlnz,55,59,1|gsqlo0,167,63,0|h3wj3z,167,63,0|h3wj40,55,59,1|hbgobz,55,59,1|hbgoc0,167,63,0|hmmlrz,167,63,0|hmmls0,55,59,1|hujpnz,55,59,1|hujpo0,167,63,0|i5cofz,167,63,0|i5cog0,55,59,1|id9sbz,55,59,1|id9sc0,167,63,0|io2r3z,167,63,0|io2r40,55,59,1|ivzuzz,55,59,1|ivzv00,167,63,0|j75sfz,167,63,0|j75sg0,55,59,1|jepxnz,55,59,1|jepxo0,167,63,0|jpvv3z,167,63,0|jpvv40,55,59,1|jyiwbz,55,59,1|jyiwc0,167,63,0|k8lxrz,167,63,0|k8lxs0,55,59,1|kgj1nz,55,59,1|kgj1o0,167,63,0|krc0fz,167,63,0|krc0g0,55,59,1|l0c0bz,55,59,1|l0c0c0,167,63,0|la233z,167,63,0|la2340,55,59,1|lkuwbz,55,59,1|lkuwc0,167,63,0|lq9f3z,167,63,0|lq9f40,55,59,1|m380bz,55,59,1|m380c0,167,63,0|m9pf3z,167,63,0|m9pf40,55,59,1|mly2zz,55,59,1|mly300,167,63,0|mssgfz,167,63,0|mssgg0,55,59,1|n4o5nz,55,59,1|n4o5o0,167,63,0|nbij3z,167,63,0|nbij40,55,59,1|o776zz,55,59,1|o77700,167,63,0|obvsfz,167,63,0|obvsg0,55,59,1|opx9nz,55,59,1|opx9o0,167,63,0|oulv3z,167,63,0|oulv40,55,59,1|p8ncbz,55,59,1|p8ncc0,167,63,0|pdbxrz,167,63,0|pdbxs0,55,59,1|ppklnz,55,59,1|ppklo0,167,63,0|pxhv3z,167,63,0|pxhv40,55,59,1|q8aobz,55,59,1|q8aoc0,167,63,0|qg7xrz,167,63,0|qg7xs0,55,59,1|qr0qzz,55,59,1|qr0r00,167,63,0|qyy0fz,167,63,0|qyy0g0,55,59,1|r9qtnz,55,59,1|r9qto0,167,63,0|rho33z,167,63,0|rho340,55,59,1|rsgwbz,55,59,1|rsgwc0,167,63,0|s0e5rz,167,63,0|s0e5s0,55,59,1|sbjxnz,55,59,1|sbjxo0,167,63,0|sjh73z,167,63,0|sjh740,55,59,1|sua0bz,55,59,1|sua0c0,167,63,0|t279rz,167,63,0|t279s0,55,59,1|td02zz,55,59,1|td0300,167,63,0|tkxcfz,167,63,0|tkxcg0,55,59,1|tvq5nz,55,59,1|tvq5o0,167,63,0|u3nf3z,167,63,0|u3nf40,55,59,1|ueg8bz,55,59,1|ueg8c0,167,63,0|umdhrz,167,63,0|umdhs0,55,59,1|uxj9nz,55,59,1|uxj9o0,167,63,0|v53kfz,167,63,0|v53kg0,55,59,1|vg9cbz,55,59,1|vg9cc0,167,63,0|vo6lrz,167,63,0|vo6ls0,55,59,1|vyzezz,55,59,1|vyzf00,167,63,0|w6wofz,167,63,0|w6wog0,55,59,1|whphnz,55,59,1|whpho0,167,63,0|wpmr3z,167,63,0|wpmr40,55,59,1|x0fkbz,55,59,1|x0fkc0,167,63,0|x8ctrz,167,63,0|x8cts0,55,59,1|xj5mzz,55,59,1|xj5n00,167,63,0|xr2wfz,167,63,0|xr2wg0,55,59,1|y28obz,55,59,1|y28oc0,167,63,0|y9sz3z,167,63,0|y9sz40,55,59,1|ykyqzz,55,59,1|ykyr00,167,63,0|ysw0fz,167,63,0|ysw0g0,55,59,1|z3otnz,55,59,1|z3oto0,167,63,0|zbm33z,167,63,0|zbm340,55,59,1|zmewbz,55,59,1|zmewc0,167,63,0|zuc5rz,167,63,0|zuc5s0,55,59,1|1054yzz,55,59,1|1054z00,167,63,0|10d28fz,167,63,0|10d28g0,55,59,1|10o80bz,55,59,1|10o80c0,167,63,0|10vsb3z,167,63,0|10vsb40,55,59,1|116y2zz,55,59,1|116y300,167,63,0|11evcfz,167,63,0|11evcg0,55,59,1|11po5nz,55,59,1|11po5o0,167,63,0|11xlf3z,167,63,0|11xlf40,55,59,1|128e8bz,55,59,1|128e8c0,167,63,0|12gbhrz,167,63,0|12gbhs0,55,59,1|12r4azz,55,59,1|12r4b00,167,63,0|12z1kfz,167,63,0|12z1kg0,55,59,1|139udnz,55,59,1|139udo0,167,63,0|13hrn3z,167,63,0|13hrn40,55,59,1|13sxezz,55,59,1|13sxf00,167,63,0|140hprz,167,63,0|140hps0,55,59,1|14bnhnz,55,59,1|14bnho0,167,63,0|14jkr3z,167,63,0|14jkr40,55,59,1|14udkbz,55,59,1|14udkc0,167,63,0|152atrz,167,63,0|152ats0,55,59,1|15d3mzz,55,59,1|15d3n00,167,63,0|15l0wfz,167,63,0|15l0wg0,55,59,1|15vtpnz,55,59,1|15vtpo0,167,63,0|163qz3z,167,63,0|163qz40,55,59,1|16ejsbz,55,59,1|16ejsc0,167,63,0|16mh1rz,167,63,0|16mh1s0,55,59,1|16xmtnz,55,59,1|16xmto0,167,63,0|175k33z,167,63,0|175k340,55,59,1|17gcwbz,55,59,1|17gcwc0,167,63,0|17oa5rz,167,63,0|17oa5s0,55,59,1|17z2yzz,55,59,1|17z2z00,167,63,0|18708fz,167,63,0|18708g0,55,59,1|18ht1nz,55,59,1|18ht1o0,167,63,0|18pqb3z,167,63,0|18pqb40,55,59,1|190j4bz,55,59,1|190j4c0,167,63,0|198gdrz,167,63,0|198gds0,55,59,1|19jm5nz,55,59,1|19jm5o0,167,63,0|19r6gfz,167,63,0|19r6gg0,55,59,1|1a2c8bz,55,59,1|1a2c8c0,167,63,0|1aa9hrz,167,63,0|1aa9hs0,55,59,1|1al2azz,55,59,1|1al2b00,167,63,0|1aszkfz,167,63,0|1aszkg0,55,59,1|1b3sdnz,55,59,1|1b3sdo0,167,63,0|1bbpn3z,167,63,0|1bbpn40,55,59,1|1bmigbz,55,59,1|1bmigc0,167,63,0|1bufprz,167,63,0|1bufps0,55,59,1|1c58izz,55,59,1|1c58j00,167,63,0|1cd5sfz,167,63,0|1cd5sg0,55,59,1|1cobkbz,55,59,1|1cobkc0,167,63,0|1cvvv3z,167,63,0|1cvvv40,55,59,1|1d71mzz,55,59,1|1d71n00,167,63,0|1deywfz,167,63,0|1deywg0,55,59,1|1dprpnz,55,59,1|1dprpo0,167,63,0|1dxoz3z,167,63,0|1dxoz40,55,59,1|1e8hsbz,55,59,1|1e8hsc0,167,63,0|1egf1rz,167,63,0|1egf1s0,55,59,1|1er7uzz,55,59,1|1er7v00,167,63,0|1ez54fz,167,63,0|1ez54g0,55,59,1|1faawbz,55,59,1|1faawc0,167,63,0|1fhv73z,167,63,0|1fhv740,55,59,1|1ft0yzz,55,59,1|1ft0z00,167,63,0|1g0y8fz,167,63,0|1g0y8g0,55,59,1|1gbr1nz,55,59,1|1gbr1o0,167,63,0|1gjob3z,167,63,0|1gjob40,55,59,1|1guh4bz,55,59,1|1guh4c0,167,63,0|1h2edrz,167,63,0|1h2eds0,55,59,1|1hd76zz,55,59,1|1hd7700,167,63,0|1hl4gfz,167,63,0|1hl4gg0,55,59,1|1hvx9nz,55,59,1|1hvx9o0,167,63,0|1i3uj3z,167,63,0|1i3uj40,55,59,1|1if0azz,55,59,1|1if0b00,167,63,0|1imklrz,167,63,0|1imkls0,55,59,1|1ixqdnz,55,59,1|1ixqdo0,167,63,0|1j5nn3z,167,63,0|1j5nn40,55,59,1|1jgggbz,55,59,1|1jgggc0,167,63,0|1jodprz,167,63,0|1jodps0,55,59,1|1jz6izz,55,59,1|1jz6j00,167,63,0|1k73sfz,167,63,0|1k73sg0,55,59,1|1khwlnz,55,59,1|1khwlo0,167,63,0|1kptv3z,167,63,0|1kptv40,55,59,1|1l0mobz,55,59,1|1l0moc0,167,63,0|1l8jxrz,167,63,0|1l8jxs0,55,59,1|1ljppnz,55,59,1|1ljppo0,167,63,0|1lrmz3z,167,63,0|1lrmz40,55,59,1|1m2fsbz,55,59,1|1m2fsc0,167,63,0|1mad1rz,167,63,0|1mad1s0,55,59,1|1ml5uzz,55,59,1|1ml5v00,167,63,0|1mt34fz,167,63,0|1mt34g0,55,59,1|1n3vxnz,55,59,1|1n3vxo0,167,63,0|1nbt73z,167,63,0|1nbt740,55,59,1|1nmm0bz,55,59,1|1nmm0c0,167,63,0|1nuj9rz,167,63,0|1nuj9s0,55,59,1|1o5p1nz,55,59,1|1o5p1o0,167,63,0|1od9cfz,167,63,0|1od9cg0,55,59,1|1oof4bz,55,59,1|1oof4c0,167,63,0|1owcdrz,167,63,0|1owcds0,55,59,1|1p756zz,55,59,1|1p75700,167,63,0|1pf2gfz,167,63,0|1pf2gg0,55,59,1|1ppv9nz,55,59,1|1ppv9o0,167,63,0|1pxsj3z,167,63,0|1pxsj40,55,59,1|1q8lcbz,55,59,1|1q8lcc0,167,63,0|1qgilrz,167,63,0|1qgils0,55,59,1|1qrbezz,55,59,1|1qrbf00,167,63,0|1qz8ofz,167,63,0|1qz8og0,55,59,1|1raegbz,55,59,1|1raegc0,167,63,0|1rhyr3z,167,63,0|1rhyr40,55,59,1|1rt4izz,55,59,1|1rt4j00,167,63,0|1s11sfz,167,63,0|1s11sg0,55,59,1|1sbulnz,55,59,1|1sbulo0,167,63,0|1sjrv3z,167,63,0|1sjrv40,55,59,1|1sukobz,55,59,1|1sukoc0,167,63,0|1t2hxrz,167,63,0|1t2hxs0,55,59,1|1tdaqzz,55,59,1|1tdar00,167,63,0|1tl80fz,167,63,0|1tl80g0,55,59,1|1twdsbz,55,59,1|1twdsc0,167,63,0|1u3y33z,167,63,0|1u3y340,55,59,1|1uf3uzz,55,59,1|1uf3v00,167,63,0|1un14fz,167,63,0|1un14g0,55,59,1|1uxtxnz,55,59,1|1uxtxo0,167,63,0|1v5r73z,167,63,0|1v5r740,55,59,1|1vgk0bz,55,59,1|1vgk0c0,167,63,0|1voh9rz,167,63,0|1voh9s0,55,59,1|NaN,55,59,1\",\"Pacific/Efate|,0,395,0|-u964i5,0,395,0|-u964i4,89,184,0|22nynz,89,184,0|22nyo0,102,194,1|27pfzz,102,194,1|27pg00,89,184,0|75y6rz,89,184,0|75y6s0,102,194,1|7fb5bz,102,194,1|7fb5c0,89,184,0|7oo9fz,89,184,0|7oo9g0,102,194,1|7y17zz,102,194,1|7y1800,89,184,0|87rarz,89,184,0|87ras0,102,194,1|8granz,102,194,1|8grao0,89,184,0|8qhdfz,89,184,0|8qhdg0,102,194,1|8zubzz,102,194,1|8zuc00,89,184,0|997g3z,89,184,0|997g40,102,194,1|9ikenz,102,194,1|9ikeo0,89,184,0|9rxirz,89,184,0|9rxis0,102,194,1|a1ahbz,102,194,1|a1ahc0,89,184,0|aanlfz,89,184,0|aanlg0,102,194,1|ak0jzz,102,194,1|ak0k00,89,184,0|atdo3z,89,184,0|atdo40,102,194,1|b2qmnz,102,194,1|b2qmo0,89,184,0|bcgpfz,89,184,0|bcgpg0,102,194,1|bikzzz,102,194,1|bil000,89,184,0|bwmmrz,89,184,0|bwmms0,102,194,1|c1b2nz,102,194,1|c1b2o0,89,184,0|NaN,89,184,0\",\"Pacific/Enderbury|,59,1,0|-gvk801,59,1,0|-gvk800,168,396,0|535inz,168,396,0|535io0,160,33,0|d1o97z,160,33,0|d1o980,103,195,0|NaN,103,195,0\",\"Pacific/Fakaofo|,0,397,0|-100dhmh,0,397,0|-100dhmg,160,33,0|lx0jvz,160,33,0|lx0jw0,103,195,0|NaN,103,195,0\",\"Pacific/Fiji|,0,398,0|-sa2x4x,0,398,0|-sa2x4w,102,194,0|f1p2vz,102,194,0|f1p2w0,103,195,1|f7tg7z,103,195,1|f7tg80,102,194,0|fks47z,102,194,0|fks480,103,195,1|fqjivz,103,195,1|fqjiw0,102,194,0|ktto7z,102,194,0|ktto80,103,195,1|kzy1jz,103,195,1|kzy1k0,102,194,0|laqxjz,102,194,0|laqxk0,103,195,1|lhl87z,103,195,1|lhl880,102,194,0|lth07z,102,194,0|lth080,103,195,1|ly5ivz,103,195,1|ly5iw0,102,194,0|mc72vz,102,194,0|mc72w0,103,195,1|mgvljz,103,195,1|mgvlk0,102,194,0|mva47z,102,194,0|mva480,103,195,1|mzllfz,103,195,1|mzllg0,102,194,0|ned5jz,102,194,0|ned5k0,103,195,1|nibqvz,103,195,1|nibqw0,102,194,0|nx387z,102,194,0|nx3880,103,195,1|o11tjz,103,195,1|o11tk0,102,194,0|og69jz,102,194,0|og69k0,103,195,1|ojrw7z,103,195,1|ojrw80,102,194,0|oywc7z,102,194,0|oywc80,103,195,1|p2hyvz,103,195,1|p2hyw0,102,194,0|phmevz,102,194,0|phmew0,103,195,1|pl81jz,103,195,1|pl81k0,102,194,0|q0pg7z,102,194,0|q0pg80,103,195,1|q3y47z,103,195,1|q3y480,102,194,0|qllavz,102,194,0|qllaw0,103,195,1|qn15jz,103,195,1|qn15k0,102,194,0|rl8mvz,102,194,0|rl8mw0,103,195,1|rohavz,103,195,1|rohaw0,102,194,0|s3ypjz,102,194,0|s3ypk0,103,195,1|s77djz,103,195,1|s77dk0,102,194,0|smos7z,102,194,0|smos80,103,195,1|spxg7z,103,195,1|spxg80,102,194,0|t5euvz,102,194,0|t5euw0,103,195,1|t90hjz,103,195,1|t90hk0,102,194,0|to4xjz,102,194,0|to4xk0,103,195,1|trqk7z,103,195,1|trqk80,102,194,0|u77yvz,102,194,0|u77yw0,103,195,1|uagmvz,103,195,1|uagmw0,102,194,0|upy1jz,102,194,0|upy1k0,103,195,1|ut6pjz,103,195,1|ut6pk0,102,194,0|v8o47z,102,194,0|v8o480,103,195,1|vbws7z,103,195,1|vbws80,102,194,0|vre6vz,102,194,0|vre6w0,103,195,1|vumuvz,103,195,1|vumuw0,102,194,0|wa49jz,102,194,0|wa49k0,103,195,1|wdpw7z,103,195,1|wdpw80,102,194,0|wt7avz,102,194,0|wt7aw0,103,195,1|wwfyvz,103,195,1|wwfyw0,102,194,0|xbxdjz,102,194,0|xbxdk0,103,195,1|xf61jz,103,195,1|xf61k0,102,194,0|xung7z,102,194,0|xung80,103,195,1|xxw47z,103,195,1|xxw480,102,194,0|yddivz,102,194,0|yddiw0,103,195,1|ygm6vz,103,195,1|ygm6w0,102,194,0|yw3ljz,102,194,0|yw3lk0,103,195,1|yzp87z,103,195,1|yzp880,102,194,0|zeto7z,102,194,0|zeto80,103,195,1|zifavz,103,195,1|zifaw0,102,194,0|zxwpjz,102,194,0|zxwpk0,103,195,1|1015djz,103,195,1|1015dk0,102,194,0|10gms7z,102,194,0|10gms80,103,195,1|10jvg7z,103,195,1|10jvg80,102,194,0|10zcuvz,102,194,0|10zcuw0,103,195,1|112livz,103,195,1|112liw0,102,194,0|11i2xjz,102,194,0|11i2xk0,103,195,1|11lbljz,103,195,1|11lblk0,102,194,0|120t07z,102,194,0|120t080,103,195,1|124emvz,103,195,1|124emw0,102,194,0|12jj2vz,102,194,0|12jj2w0,103,195,1|12n4pjz,103,195,1|12n4pk0,102,194,0|132m47z,102,194,0|132m480,103,195,1|135us7z,103,195,1|135us80,102,194,0|13lc6vz,102,194,0|13lc6w0,103,195,1|13okuvz,103,195,1|13okuw0,102,194,0|14429jz,102,194,0|14429k0,103,195,1|147axjz,103,195,1|147axk0,102,194,0|14msc7z,102,194,0|14msc80,103,195,1|14q107z,103,195,1|14q1080,102,194,0|155ievz,102,194,0|155iew0,103,195,1|15941jz,103,195,1|15941k0,102,194,0|15olg7z,102,194,0|15olg80,103,195,1|15ru47z,103,195,1|15ru480,102,194,0|167bivz,102,194,0|167biw0,103,195,1|16ak6vz,103,195,1|16ak6w0,102,194,0|16q1ljz,102,194,0|16q1lk0,103,195,1|16ta9jz,103,195,1|16ta9k0,102,194,0|178ro7z,102,194,0|178ro80,103,195,1|17c0c7z,103,195,1|17c0c80,102,194,0|17rhqvz,102,194,0|17rhqw0,103,195,1|17v3djz,103,195,1|17v3dk0,102,194,0|18a7tjz,102,194,0|18a7tk0,103,195,1|18dtg7z,103,195,1|18dtg80,102,194,0|18tauvz,102,194,0|18tauw0,103,195,1|18wjivz,103,195,1|18wjiw0,102,194,0|19c0xjz,102,194,0|19c0xk0,103,195,1|19f9ljz,103,195,1|19f9lk0,102,194,0|19ur07z,102,194,0|19ur080,103,195,1|19xzo7z,103,195,1|19xzo80,102,194,0|1adh2vz,102,194,0|1adh2w0,103,195,1|1agpqvz,103,195,1|1agpqw0,102,194,0|1aw75jz,102,194,0|1aw75k0,103,195,1|1azss7z,103,195,1|1azss80,102,194,0|1bfa6vz,102,194,0|1bfa6w0,103,195,1|1biiuvz,103,195,1|1biiuw0,102,194,0|1by09jz,102,194,0|1by09k0,103,195,1|1c18xjz,103,195,1|1c18xk0,102,194,0|1cgqc7z,102,194,0|1cgqc80,103,195,1|1cjz07z,103,195,1|1cjz080,102,194,0|1czgevz,102,194,0|1czgew0,103,195,1|1d2p2vz,103,195,1|1d2p2w0,102,194,0|1di6hjz,102,194,0|1di6hk0,103,195,1|1dls47z,103,195,1|1dls480,102,194,0|1e0wk7z,102,194,0|1e0wk80,103,195,1|1e4i6vz,103,195,1|1e4i6w0,102,194,0|1ejzljz,102,194,0|1ejzlk0,103,195,1|1en89jz,103,195,1|1en89k0,102,194,0|1f2po7z,102,194,0|1f2po80,103,195,1|1f5yc7z,103,195,1|1f5yc80,102,194,0|1flfqvz,102,194,0|1flfqw0,103,195,1|1fooevz,103,195,1|1fooew0,102,194,0|1g45tjz,102,194,0|1g45tk0,103,195,1|1g7ehjz,103,195,1|1g7ehk0,102,194,0|1gmvw7z,102,194,0|1gmvw80,103,195,1|1gqhivz,103,195,1|1gqhiw0,102,194,0|1h5lyvz,102,194,0|1h5lyw0,103,195,1|1h97ljz,103,195,1|1h97lk0,102,194,0|1hop07z,102,194,0|1hop080,103,195,1|1hrxo7z,103,195,1|1hrxo80,102,194,0|1i7f2vz,102,194,0|1i7f2w0,103,195,1|1ianqvz,103,195,1|1ianqw0,102,194,0|1iq55jz,102,194,0|1iq55k0,103,195,1|1itdtjz,103,195,1|1itdtk0,102,194,0|1j8v87z,102,194,0|1j8v880,103,195,1|1jc3w7z,103,195,1|1jc3w80,102,194,0|1jrlavz,102,194,0|1jrlaw0,103,195,1|1jv6xjz,103,195,1|1jv6xk0,102,194,0|1kaoc7z,102,194,0|1kaoc80,103,195,1|1kdx07z,103,195,1|1kdx080,102,194,0|1kteevz,102,194,0|1kteew0,103,195,1|1kwn2vz,103,195,1|1kwn2w0,102,194,0|1lc4hjz,102,194,0|1lc4hk0,103,195,1|1lfd5jz,103,195,1|1lfd5k0,102,194,0|1luuk7z,102,194,0|1luuk80,103,195,1|1ly387z,103,195,1|1ly3880,102,194,0|1mdkmvz,102,194,0|1mdkmw0,103,195,1|1mh69jz,103,195,1|1mh69k0,102,194,0|1mwapjz,102,194,0|1mwapk0,103,195,1|1mzwc7z,103,195,1|1mzwc80,102,194,0|1nfdqvz,102,194,0|1nfdqw0,103,195,1|1nimevz,103,195,1|1nimew0,102,194,0|1ny3tjz,102,194,0|1ny3tk0,103,195,1|1o1chjz,103,195,1|1o1chk0,102,194,0|1ogtw7z,102,194,0|1ogtw80,103,195,1|1ok2k7z,103,195,1|1ok2k80,102,194,0|1ozjyvz,102,194,0|1ozjyw0,103,195,1|1p2smvz,103,195,1|1p2smw0,102,194,0|1pia1jz,102,194,0|1pia1k0,103,195,1|1plvo7z,103,195,1|1plvo80,102,194,0|1q1d2vz,102,194,0|1q1d2w0,103,195,1|1q4lqvz,103,195,1|1q4lqw0,102,194,0|1qk35jz,102,194,0|1qk35k0,103,195,1|1qnbtjz,103,195,1|1qnbtk0,102,194,0|1r2t87z,102,194,0|1r2t880,103,195,1|1r61w7z,103,195,1|1r61w80,102,194,0|1rljavz,102,194,0|1rljaw0,103,195,1|1roryvz,103,195,1|1roryw0,102,194,0|1s49djz,102,194,0|1s49dk0,103,195,1|1s7v07z,103,195,1|1s7v080,102,194,0|1smzg7z,102,194,0|1smzg80,103,195,1|1sql2vz,103,195,1|1sql2w0,102,194,0|1t62hjz,102,194,0|1t62hk0,103,195,1|1t9b5jz,103,195,1|1t9b5k0,102,194,0|1tosk7z,102,194,0|1tosk80,103,195,1|1ts187z,103,195,1|1ts1880,102,194,0|1u7imvz,102,194,0|1u7imw0,103,195,1|1uaravz,103,195,1|1uaraw0,102,194,0|1uq8pjz,102,194,0|1uq8pk0,103,195,1|1uthdjz,103,195,1|1uthdk0,102,194,0|1v8ys7z,102,194,0|1v8ys80,103,195,1|1vckevz,103,195,1|1vckew0,102,194,0|1vrouvz,102,194,0|1vrouw0,103,195,1|NaN,103,195,1\",\"Pacific/Funafuti|,0,399,0|-100fait,0,399,0|-100fais,102,194,0|NaN,102,194,0\",\"Pacific/Galapagos|,0,400,0|-kcr62p,0,400,0|-kcr62o,55,59,0|8cmlvz,55,59,0|8cmlw0,167,63,0|byewnz,167,63,0|byewo0,55,59,1|c1ylvz,55,59,1|c1ylw0,167,63,0|NaN,167,63,0\",\"Pacific/Gambier|,0,401,0|-tvndod,0,401,0|-tvndoc,169,35,0|NaN,169,35,0\",\"Pacific/Guadalcanal|,0,402,0|-tvowad,0,402,0|-tvowac,89,184,0|NaN,89,184,0\",\"Pacific/Guam|,0,403,0|-1t8j1h1,0,403,0|-1t8j1h0,0,404,0|-100f451,0,404,0|-100f450,170,189,0|-en8eg1,170,189,0|-en8eg0,107,218,0|-d9n501,107,218,0|-d9n500,170,189,0|-5hlkw1,170,189,0|-5hlkw0,171,184,1|-4nnvo1,171,184,1|-4nnvo0,170,189,0|-17w8w1,170,189,0|-17w8w0,171,184,1|-hih6d,171,184,1|-hih6c,170,189,0|-9y0w1,170,189,0|-9y0w0,171,184,1|-6ch01,171,184,1|-6ch00,170,189,0|5wcfz,170,189,0|5wcg0,171,184,1|cqkbz,171,184,1|cqkc0,170,189,0|omf3z,170,189,0|omf40,171,184,1|vgmzz,171,184,1|vgn00,170,189,0|22bb3z,170,189,0|22bb40,171,184,1|25wuzz,171,184,1|25wv00,170,189,0|3c75rz,170,189,0|3c75s0,171,184,1|3gq1pn,171,184,1|3gq1po,170,189,0|3tbtrz,170,189,0|3tbts0,171,184,1|3zt2zz,171,184,1|3zt300,170,189,0|g5z2vz,170,189,0|g5z2w0,172,189,0|NaN,172,189,0\",\"Pacific/Honolulu|,0,405,0|-12lnw3n,0,405,0|-12lnw3m,29,406,0|-j50la1,29,406,0|-j50la0,30,407,1|-j3x0a1,30,407,1|-j3x0a0,29,406,0|-ek1pa1,29,406,0|-ek1pa0,173,407,1|-cq2tg1,173,407,1|-cq2tg0,174,407,1|-cnoo21,174,407,1|-cnoo20,29,406,0|-brzum1,29,406,0|-brzum0,29,34,0|NaN,29,34,0\",\"Pacific/Kiritimati|,0,408,0|-100dk75,0,408,0|-100dk74,175,409,0|535eyn,175,409,0|535eyo,161,34,0|d1o6fz,161,34,0|d1o6g0,104,201,0|NaN,104,201,0\",\"Pacific/Kosrae|,0,410,0|-1t8j4ul,0,410,0|-1t8j4uk,0,411,0|-100f7il,0,411,0|-100f7ik,89,184,0|-su52k1,89,184,0|-su52k0,107,218,0|-qknl01,107,218,0|-qknl00,89,184,0|-h817w1,89,184,0|-h817w0,93,189,0|-f08x41,93,189,0|-f08x40,107,218,0|-cqtd01,107,218,0|-cqtd00,89,184,0|-4r7w1,89,184,0|-4r7w0,102,194,0|f4tvzz,102,194,0|f4tw00,89,184,0|NaN,89,184,0\",\"Pacific/Kwajalein|,0,412,0|-100f8bl,0,412,0|-100f8bk,89,184,0|-h817w1,89,184,0|-h817w0,93,189,0|-f08x41,93,189,0|-f08x40,107,218,0|-dip2c1,107,218,0|-dip2c0,89,184,0|-4r7w1,89,184,0|-4r7w0,168,396,0|cc3ynz,168,396,0|cc3yo0,102,194,0|NaN,102,194,0\",\"Pacific/Majuro|,0,413,0|-100f91d,0,413,0|-100f91c,89,184,0|-su52k1,89,184,0|-su52k0,107,218,0|-qknl01,107,218,0|-qknl00,89,184,0|-h817w1,89,184,0|-h817w0,93,189,0|-f08x41,93,189,0|-f08x40,107,218,0|-dj2101,107,218,0|-dj2100,89,184,0|-4r7w1,89,184,0|-4r7w0,102,194,0|NaN,102,194,0\",\"Pacific/Marquesas|,0,414,0|-tvncu1,0,414,0|-tvncu0,176,407,0|NaN,176,407,0\",\"Pacific/Midway|,0,415,0|-14fxxq1,0,415,0|-14fxxq0,0,416,0|-usij21,0,416,0|-usij20,177,33,0|NaN,177,33,0\",\"Pacific/Nauru|,0,417,0|-pjxiwt,0,417,0|-pjxiws,143,192,0|-e9rby1,143,192,0|-e9rby0,107,218,0|-couzo1,107,218,0|-couzo0,143,192,0|4r4dlz,143,192,0|4r4dm0,102,194,0|NaN,102,194,0\",\"Pacific/Niue|,0,418,0|-8zbv79,0,418,0|-8zbv78,178,419,0|-2vdcip,178,419,0|-2vdcio,160,33,0|NaN,160,33,0\",\"Pacific/Norfolk|,0,420,0|-100f8ft,0,420,0|-100f8fs,179,421,0|-9x0ps1,179,421,0|-9x0ps0,143,192,0|2iiixz,143,192,0|2iiiy0,180,193,1|2ozuxz,180,193,1|2ozuy0,143,192,0|nvnexz,143,192,0|nvney0,89,184,0|pywpnz,89,184,0|pywpo0,102,194,1|q89qzz,102,194,1|q89r00,89,184,0|qhmsbz,89,184,0|qhmsc0,102,194,1|qqztnz,102,194,1|qqzto0,89,184,0|r0cuzz,89,184,0|r0cv00,102,194,1|r9pwbz,102,194,1|r9pwc0,89,184,0|rj2xnz,89,184,0|rj2xo0,102,194,1|rsfyzz,102,194,1|rsfz00,89,184,0|s1t0bz,89,184,0|s1t0c0,102,194,1|sbj0bz,102,194,1|sbj0c0,89,184,0|skw1nz,89,184,0|skw1o0,102,194,1|su92zz,102,194,1|su9300,89,184,0|t3m4bz,89,184,0|t3m4c0,102,194,1|tcz5nz,102,194,1|tcz5o0,89,184,0|tmc6zz,89,184,0|tmc700,102,194,1|tvp8bz,102,194,1|tvp8c0,89,184,0|u529nz,89,184,0|u529o0,102,194,1|uefazz,102,194,1|uefb00,89,184,0|unscbz,89,184,0|unscc0,102,194,1|ux5dnz,102,194,1|ux5do0,89,184,0|v6vdnz,89,184,0|v6vdo0,102,194,1|vg8ezz,102,194,1|vg8f00,89,184,0|vplgbz,89,184,0|vplgc0,102,194,1|vyyhnz,102,194,1|vyyho0,89,184,0|w8bizz,89,184,0|w8bj00,102,194,1|whokbz,102,194,1|whokc0,89,184,0|wr1lnz,89,184,0|wr1lo0,102,194,1|x0emzz,102,194,1|x0en00,89,184,0|x9robz,89,184,0|x9roc0,102,194,1|xj4pnz,102,194,1|xj4po0,89,184,0|xshqzz,89,184,0|xshr00,102,194,1|y1usbz,102,194,1|y1usc0,89,184,0|ybksbz,89,184,0|ybksc0,102,194,1|ykxtnz,102,194,1|ykxto0,89,184,0|yuauzz,89,184,0|yuav00,102,194,1|z3nwbz,102,194,1|z3nwc0,89,184,0|zd0xnz,89,184,0|zd0xo0,102,194,1|zmdyzz,102,194,1|zmdz00,89,184,0|zvr0bz,89,184,0|zvr0c0,102,194,1|10541nz,102,194,1|10541o0,89,184,0|10eh2zz,89,184,0|10eh300,102,194,1|10nu4bz,102,194,1|10nu4c0,89,184,0|10xk4bz,89,184,0|10xk4c0,102,194,1|116x5nz,102,194,1|116x5o0,89,184,0|11ga6zz,89,184,0|11ga700,102,194,1|11pn8bz,102,194,1|11pn8c0,89,184,0|11z09nz,89,184,0|11z09o0,102,194,1|128dazz,102,194,1|128db00,89,184,0|12hqcbz,89,184,0|12hqcc0,102,194,1|12r3dnz,102,194,1|12r3do0,89,184,0|130gezz,89,184,0|130gf00,102,194,1|139tgbz,102,194,1|139tgc0,89,184,0|13j6hnz,89,184,0|13j6ho0,102,194,1|13sjizz,102,194,1|13sjj00,89,184,0|1429izz,89,184,0|1429j00,102,194,1|14bmkbz,102,194,1|14bmkc0,89,184,0|14kzlnz,89,184,0|14kzlo0,102,194,1|14ucmzz,102,194,1|14ucn00,89,184,0|153pobz,89,184,0|153poc0,102,194,1|15d2pnz,102,194,1|15d2po0,89,184,0|15mfqzz,89,184,0|15mfr00,102,194,1|15vssbz,102,194,1|15vssc0,89,184,0|1655tnz,89,184,0|1655to0,102,194,1|16eiuzz,102,194,1|16eiv00,89,184,0|16nvwbz,89,184,0|16nvwc0,102,194,1|16xlwbz,102,194,1|16xlwc0,89,184,0|176yxnz,89,184,0|176yxo0,102,194,1|17gbyzz,102,194,1|17gbz00,89,184,0|17pp0bz,89,184,0|17pp0c0,102,194,1|17z21nz,102,194,1|17z21o0,89,184,0|188f2zz,89,184,0|188f300,102,194,1|18hs4bz,102,194,1|18hs4c0,89,184,0|18r55nz,89,184,0|18r55o0,102,194,1|190i6zz,102,194,1|190i700,89,184,0|199v8bz,89,184,0|199v8c0,102,194,1|19j89nz,102,194,1|19j89o0,89,184,0|19sy9nz,89,184,0|19sy9o0,102,194,1|1a2bazz,102,194,1|1a2bb00,89,184,0|1abocbz,89,184,0|1abocc0,102,194,1|1al1dnz,102,194,1|1al1do0,89,184,0|1aueezz,89,184,0|1auef00,102,194,1|1b3rgbz,102,194,1|1b3rgc0,89,184,0|1bd4hnz,89,184,0|1bd4ho0,102,194,1|1bmhizz,102,194,1|1bmhj00,89,184,0|1bvukbz,89,184,0|1bvukc0,102,194,1|1c57lnz,102,194,1|1c57lo0,89,184,0|1cekmzz,89,184,0|1cekn00,102,194,1|1cnxobz,102,194,1|1cnxoc0,89,184,0|1cxnobz,89,184,0|1cxnoc0,102,194,1|1d70pnz,102,194,1|1d70po0,89,184,0|1dgdqzz,89,184,0|1dgdr00,102,194,1|1dpqsbz,102,194,1|1dpqsc0,89,184,0|1dz3tnz,89,184,0|1dz3to0,102,194,1|1e8guzz,102,194,1|1e8gv00,89,184,0|1ehtwbz,89,184,0|1ehtwc0,102,194,1|1er6xnz,102,194,1|1er6xo0,89,184,0|1f0jyzz,89,184,0|1f0jz00,102,194,1|1f9x0bz,102,194,1|1f9x0c0,89,184,0|1fjn0bz,89,184,0|1fjn0c0,102,194,1|1ft01nz,102,194,1|1ft01o0,89,184,0|1g2d2zz,89,184,0|1g2d300,102,194,1|1gbq4bz,102,194,1|1gbq4c0,89,184,0|1gl35nz,89,184,0|1gl35o0,102,194,1|1gug6zz,102,194,1|1gug700,89,184,0|1h3t8bz,89,184,0|1h3t8c0,102,194,1|1hd69nz,102,194,1|1hd69o0,89,184,0|1hmjazz,89,184,0|1hmjb00,102,194,1|1hvwcbz,102,194,1|1hvwcc0,89,184,0|1i59dnz,89,184,0|1i59do0,102,194,1|1iemezz,102,194,1|1iemf00,89,184,0|1iocezz,89,184,0|1iocf00,102,194,1|1ixpgbz,102,194,1|1ixpgc0,89,184,0|1j72hnz,89,184,0|1j72ho0,102,194,1|1jgfizz,102,194,1|1jgfj00,89,184,0|1jpskbz,89,184,0|1jpskc0,102,194,1|1jz5lnz,102,194,1|1jz5lo0,89,184,0|1k8imzz,89,184,0|1k8in00,102,194,1|1khvobz,102,194,1|1khvoc0,89,184,0|1kr8pnz,89,184,0|1kr8po0,102,194,1|1l0lqzz,102,194,1|1l0lr00,89,184,0|1l9ysbz,89,184,0|1l9ysc0,102,194,1|1ljosbz,102,194,1|1ljosc0,89,184,0|1lt1tnz,89,184,0|1lt1to0,102,194,1|1m2euzz,102,194,1|1m2ev00,89,184,0|1mbrwbz,89,184,0|1mbrwc0,102,194,1|1ml4xnz,102,194,1|1ml4xo0,89,184,0|1muhyzz,89,184,0|1muhz00,102,194,1|1n3v0bz,102,194,1|1n3v0c0,89,184,0|1nd81nz,89,184,0|1nd81o0,102,194,1|1nml2zz,102,194,1|1nml300,89,184,0|1nvy4bz,89,184,0|1nvy4c0,102,194,1|1o5b5nz,102,194,1|1o5b5o0,89,184,0|1of15nz,89,184,0|1of15o0,102,194,1|1ooe6zz,102,194,1|1ooe700,89,184,0|1oxr8bz,89,184,0|1oxr8c0,102,194,1|1p749nz,102,194,1|1p749o0,89,184,0|1pghazz,89,184,0|1pghb00,102,194,1|1ppucbz,102,194,1|1ppucc0,89,184,0|1pz7dnz,89,184,0|1pz7do0,102,194,1|1q8kezz,102,194,1|1q8kf00,89,184,0|1qhxgbz,89,184,0|1qhxgc0,102,194,1|1qrahnz,102,194,1|1qraho0,89,184,0|1r0nizz,89,184,0|1r0nj00,102,194,1|1ra0kbz,102,194,1|1ra0kc0,89,184,0|1rjqkbz,89,184,0|1rjqkc0,102,194,1|1rt3lnz,102,194,1|1rt3lo0,89,184,0|1s2gmzz,89,184,0|1s2gn00,102,194,1|1sbtobz,102,194,1|1sbtoc0,89,184,0|1sl6pnz,89,184,0|1sl6po0,102,194,1|1sujqzz,102,194,1|1sujr00,89,184,0|1t3wsbz,89,184,0|1t3wsc0,102,194,1|1td9tnz,102,194,1|1td9to0,89,184,0|1tmmuzz,89,184,0|1tmmv00,102,194,1|1tvzwbz,102,194,1|1tvzwc0,89,184,0|1u5pwbz,89,184,0|1u5pwc0,102,194,1|1uf2xnz,102,194,1|1uf2xo0,89,184,0|1uofyzz,89,184,0|1uofz00,102,194,1|1uxt0bz,102,194,1|1uxt0c0,89,184,0|1v761nz,89,184,0|1v761o0,102,194,1|1vgj2zz,102,194,1|1vgj300,89,184,0|1vpw4bz,89,184,0|1vpw4c0,102,194,1|NaN,102,194,1\",\"Pacific/Noumea|,0,422,0|-u9645p,0,422,0|-u9645o,89,184,0|44uerz,89,184,0|44ues0,102,194,1|497qnz,102,194,1|497qo0,89,184,0|4nkhfz,89,184,0|4nkhg0,102,194,1|4rznzz,102,194,1|4rzo00,89,184,0|e1ouzz,89,184,0|e1ov00,102,194,1|e6ddnz,102,194,1|e6ddo0,89,184,0|NaN,89,184,0\",\"Pacific/Pago_Pago|,0,415,0|-14fxxq1,0,415,0|-14fxxq0,0,416,0|-usij21,0,416,0|-usij20,177,33,0|NaN,177,33,0\",\"Pacific/Palau|,0,423,0|-1t8izkl,0,423,0|-1t8izkk,0,424,0|-100f28l,0,424,0|-100f28k,107,218,0|NaN,107,218,0\",\"Pacific/Pitcairn|,0,425,0|-100dp8t,0,425,0|-100dp8s,181,426,0|es2cxz,181,426,0|es2cy0,182,38,0|NaN,182,38,0\",\"Pacific/Pohnpei|,0,427,0|-1t8j3yt,0,427,0|-1t8j3ys,0,428,0|-100f6mt,0,428,0|-100f6ms,89,184,0|-su52k1,89,184,0|-su52k0,107,218,0|-qknl01,107,218,0|-qknl00,89,184,0|-h817w1,89,184,0|-h817w0,93,189,0|-f08x41,93,189,0|-f08x40,107,218,0|-cqtd01,107,218,0|-cqtd00,89,184,0|NaN,89,184,0\",\"Pacific/Port_Moresby|,0,187,0|-1ayytx5,0,187,0|-1ayytx4,92,188,0|-1354j8x,92,188,0|-1354j8w,93,189,0|NaN,93,189,0\",\"Pacific/Rarotonga|,0,429,0|-10jifqx,0,429,0|-10jifqw,0,430,0|-8zbx2x,0,430,0|-8zbx2w,183,406,0|4mj95z,183,406,0|4mj960,176,407,1|4sal1z,176,407,1|4sal20,161,34,0|54jd3z,161,34,0|54jd40,176,407,1|5b0npz,176,407,1|5b0nq0,161,34,0|5n9frz,161,34,0|5n9fs0,176,407,1|5tqqdz,176,407,1|5tqqe0,161,34,0|65zifz,161,34,0|65zig0,176,407,1|6ctrpz,176,407,1|6ctrq0,161,34,0|6p2jrz,161,34,0|6p2js0,176,407,1|6vjudz,176,407,1|6vjue0,161,34,0|77smfz,161,34,0|77smg0,176,407,1|7e9x1z,176,407,1|7e9x20,161,34,0|7qip3z,161,34,0|7qip40,176,407,1|7wzzpz,176,407,1|7wzzq0,161,34,0|898rrz,161,34,0|898rs0,176,407,1|8fq2dz,176,407,1|8fq2e0,161,34,0|8ryufz,161,34,0|8ryug0,176,407,1|8yg51z,176,407,1|8yg520,161,34,0|9aox3z,161,34,0|9aox40,176,407,1|9hj6dz,176,407,1|9hj6e0,161,34,0|9tryfz,161,34,0|9tryg0,176,407,1|a0991z,176,407,1|a09920,161,34,0|aci13z,161,34,0|aci140,176,407,1|aizbpz,176,407,1|aizbq0,161,34,0|av83rz,161,34,0|av83s0,176,407,1|b1pedz,176,407,1|b1pee0,161,34,0|NaN,161,34,0\",\"Pacific/Saipan|,0,403,0|-1t8j1h1,0,403,0|-1t8j1h0,0,404,0|-100f451,0,404,0|-100f450,170,189,0|-en8eg1,170,189,0|-en8eg0,107,218,0|-d9n501,107,218,0|-d9n500,170,189,0|-5hlkw1,170,189,0|-5hlkw0,171,184,1|-4nnvo1,171,184,1|-4nnvo0,170,189,0|-17w8w1,170,189,0|-17w8w0,171,184,1|-hih6d,171,184,1|-hih6c,170,189,0|-9y0w1,170,189,0|-9y0w0,171,184,1|-6ch01,171,184,1|-6ch00,170,189,0|5wcfz,170,189,0|5wcg0,171,184,1|cqkbz,171,184,1|cqkc0,170,189,0|omf3z,170,189,0|omf40,171,184,1|vgmzz,171,184,1|vgn00,170,189,0|22bb3z,170,189,0|22bb40,171,184,1|25wuzz,171,184,1|25wv00,170,189,0|3c75rz,170,189,0|3c75s0,171,184,1|3gq1pn,171,184,1|3gq1po,170,189,0|3tbtrz,170,189,0|3tbts0,171,184,1|3zt2zz,171,184,1|3zt300,170,189,0|g5z2vz,170,189,0|g5z2w0,172,189,0|NaN,172,189,0\",\"Pacific/Tahiti|,0,431,0|-tvnayx,0,431,0|-tvnayw,161,34,0|NaN,161,34,0\",\"Pacific/Tarawa|,0,432,0|-100f9dh,0,432,0|-100f9dg,102,194,0|NaN,102,194,0\",\"Pacific/Tongatapu|,0,433,0|-corjk1,0,433,0|-corjk0,184,434,0|-4p3zld,184,434,0|-4p3zlc,103,195,0|fj6mrz,103,195,0|fj6ms0,104,201,1|frmc3z,104,201,1|frmc40,103,195,0|g3i43z,103,195,0|g3i440,104,201,1|g7tlbz,104,201,1|g7tlc0,103,195,0|gm86rz,103,195,0|gm86s0,104,201,1|gqjnzz,104,201,1|gqjo00,103,195,0|og66rz,103,195,0|og66s0,104,201,1|ojrtfz,104,201,1|ojrtg0,103,195,0|NaN,103,195,0\",\"Pacific/Wake|,0,435,0|-100f86t,0,435,0|-100f86s,102,194,0|NaN,102,194,0\",\"Pacific/Wallis|,0,436,0|-100fbdl,0,436,0|-100fbdk,102,194,0|NaN,102,194,0\"],abbrvs:\"LMT|GMT|+0230|EAT|+0245|PMT|WET|WEST|CET|CEST|+0030|WAT|-01|CAT|EET|EEST|+00|+01|SAST|CAST|MMT|WAST|+0130|NST|NWT|NPT|BST|BDT|AHST|HST|HDT|AST|AWT|APT|AHDT|YST|AKST|AKDT|-03|-02|CMT|-04|AMT|EST|MST|CST|PST|MDT|CDT|ADT|-0330|-0530|CWT|CPT|BMT|-05|PDT|MWT|MPT|-00|MDDT|EDT|-0430|SJMT|YDT|YWT|YPT|YDDT|PWT|PPT|EWT|EPT|NDT|ADDT|KMT|QMT|-0345|HMT|PDDT|EDDT|FFMT|-0230|-0130|PPMT|SMT|CDDT|SDMT|NDDT|+08|+11|+07|+05|PMMT|+10|AEST|AEDT|+06|NZMT|NZST|NZDT|+03|+02|+12|+13|+14|+04|+0730|+09|+0530|+0630|IST|IDT|PLMT|HKT|HKST|HKWT|JST|IMT|+0720|WIB|+0930|WIT|JMT|IDDT|+0430|PKT|PKST|+0545|+0820|WITA|KST|KDT|TBMT|TMT|+0330|JDT|RMT|FMT|ACST|ACDT|+0845|+0945|+1030|+1130|AWST|AWDT|+0120|+0020|CEMT|MSK|MSD|DMT|BDST|WEMT|MDST|LST|SET|WMT|+0220|-1130|-11|-10|+1215|+1245|+1345|EMT|-07|-06|-12|-09|GST|GDT|ChST|HWT|HPT|-1040|-0930|SST|-1120|+1112|+1230|-0830|-08|-1030|+1220|GMT+14|GMT+13|GMT+12|GMT+11|GMT+10|GMT+9|GMT+8|GMT+7|GMT+6|GMT+5|GMT+4|GMT+3|GMT+2|GMT+1|GMT-1|GMT-2|GMT-3|GMT-4|GMT-5|GMT-6|GMT-7|GMT-8|GMT-9|GMT-10|GMT-11|GMT-12\",offsets:\"-qw|0|6tg|6y0|8c0|7n0|kc|fl|2s0|5k0|mn|1e0|-2vw|-2s0|618|5sl|-1ek|-zg|-2g0|56o|460|5us|60w|-1zw|-226|2sc|18w|-1p9|2fw|1vw|360|xya|-wpq|-uk0|-rs0|-p00|12wo|-rrc|-m80|-c8p|-b40|-8c0|-8xc|-5k0|-ato|-bw0|-c6k|-c3c|-cdo|-cqs|-ctg|-c44|-cos|-cac|-c2s|-cnc|-aog|-eq8|-eso|-dw0|-74s|-jho|-jg0|-go0|-b1h|-9q0|-8z8|-gc0|-fa0|-b8g|-dps|-lip|-a44|-g2g|-ce8|-ce4|-ci0|-9ow|-g8c|-jn8|-fkd|-kr6|-adw|-3gg|-ptg|-m9k|-jfw|-fdn|-l0g|-cxs|-gio|-mpz|-74o|-b3o|-b6s|-9rg|-6zg|-6y0|-d68|-e7y|-grg|-es8|-ejc|-arr|-af0|-bs0|-f94|-f9c|-kjs|-fye|-g1i|-fzn|-g5v|-g2f|-fr4|-g7j|-g1d|15rv|-ow5|-fvq|-fpo|-cmc|-9uc|-e9o|-eac|-lwa|-6m4|-fz8|-fzc|-b44|-bb8|-iio|-jpg|-g83|-glg|16au|-od6|-id0|-aeg|-bzw|-iks|-aer|-460|-ep8|-dpe|-gcg|101a|-umq|-604|-iuj|-irc|-is3|-9kw|-jc4|-a7s|-a84|-a7o|-de8|-ddo|-bu0|-d4s|-d3a|-hig|-6go|-jdo|-ck0|-a4o|-cy0|-cyo|-8ms|-42g|15lz|-p21|-jyw|-g5g|-cqk|-gj0|-lo4|-mss|-p0c|-hzo|14sh|-pvj|m80|uk0|jg0|dw0|r94|r8w|rs0|go0|wd4|vy0|yq0|xc0|1040|8ng|1zo|e90|6nk|wv8|12w0|9b4|b40|al4|at8|9m8|884|880|9jk|98c|im4|fic|6ko|dtc|la4|ku0|l0g|p00|l7c|esc|esk|fa0|i20|6q0|gqs|gcw|n98|a8o|cqo|6ac|6ds|6hz|jr4|jqu|l56|nm0|gz0|jb5|js0|kdc|q20|qe0|6iu|6ig|ctc|ci0|tdo|cf0|fss|fz0|p3p|gd4|eva|h72|ity|j8d|kfk|n5c|l0y|rxc|m40|-189c|meo|66g|g5c|fcs|dl6|9ic|k8w|nac|bs4|c4g|qfc|ceh|nig|mhj|sgs|mi0|ctz|8an|9iw|9q0|glo|pvn|fqf|jsk|g7w|qiu|of7|o0y|htb|b89|af5|88o|-4r4|-5aw|-c06|-986|-2uo|-4cs|-194|-34o|-42o|-6rk|-apo|pnw|t60|sc8|q70|ra4|o88|nv4|ob0|r30|rl8|tgk|qug|lgc|s04|wk|3ok|3pc|xc|a4|8wc|4e4|3so|2h4|2o8|t6|4u0|3j8|1kw|1dm|5c8|5bo|2bw|-15o|-169|1lr|-zo|-23|4md|5d4|5ew|5ng|97c|150|-ok|2os|53s|53c|1d8|6yh|707|9s7|ck7|4gy|78y|2b8|99w|8j6|6bc|6ao|4bg|3cc|2se|4l0|3o8|8yo|44o|30x|4os|3w0|4fc|6hc|des|jks|hy4|a9o|dm0|anc|a9s|yv4|-vsw|-vy0|st4|xz0|y10|zf0|1270|-12k4|s3w|-k94|v64|-xc0|-vpk|x4w|x6s|-glc|-ozo|tmc|-13v0|qt0|-t8e|-t60|-qe0|-t4w|-tmo|-10hg|u6k|uzk|vpc|-pu0|z20|-vm0|uws|-vgs|-vhc|v3s|v40|uto|-15rg|owk|-o38|-nm0|-11d8|tas|112w|-tl4|-rp4|w1g|y80|y9c|uus|y1k\"});\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.b054aba2.js",
    "content": "import{u as e}from\"./main-a0d7432d.js\";function n(e){return Intl.getCanonicalLocales(e)}function t(e){if(\"symbol\"==typeof e)throw TypeError(\"Cannot convert a Symbol value to a string\");return String(e)}function r(e){if(void 0===e)return NaN;if(null===e)return 0;if(\"boolean\"==typeof e)return e?1:0;if(\"number\"==typeof e)return e;if(\"symbol\"==typeof e||\"bigint\"==typeof e)throw new TypeError(\"Cannot convert symbol/bigint to number\");return Number(e)}function u(e){if(null==e)throw new TypeError(\"undefined/null cannot be converted to object\");return Object(e)}function i(e,n){return Object.is?Object.is(e,n):e===n?0!==e||1/e==1/n:e!=e&&n!=n}function a(e){return new Array(e)}function o(e,n){return Object.prototype.hasOwnProperty.call(e,n)}function c(e,n){return e-Math.floor(e/n)*n}function l(e){return Math.floor(e/864e5)}function s(e){return Date.UTC(e,0)/864e5}function f(e){return new Date(e).getUTCFullYear()}function D(e){return e%4!=0?365:e%100!=0?366:e%400!=0?365:366}function m(e){return l(e)-s(f(e))}function g(e){return 365===D(f(e))?0:1}function p(e){var n=m(e),t=g(e);if(n>=0&&n<31)return 0;if(n<59+t)return 1;if(n<90+t)return 2;if(n<120+t)return 3;if(n<151+t)return 4;if(n<181+t)return 5;if(n<212+t)return 6;if(n<243+t)return 7;if(n<273+t)return 8;if(n<304+t)return 9;if(n<334+t)return 10;if(n<365+t)return 11;throw new Error(\"Invalid time\")}function d(e){return void 0===e?Object.create(null):u(e)}function y(e,n,t,r){if(void 0!==e){if(e=Number(e),isNaN(e)||e<n||e>t)throw new RangeError(\"\".concat(e,\" is outside of range [\").concat(n,\", \").concat(t,\"]\"));return Math.floor(e)}return r}function F(e,n,t,r,u){return y(e[n],t,r,u)}function v(e,n,r,u,i){if(\"object\"!=typeof e)throw new TypeError(\"Options must be an object\");var a=e[n];if(void 0!==a){if(\"boolean\"!==r&&\"string\"!==r)throw new TypeError(\"invalid type\");if(\"boolean\"===r&&(a=Boolean(a)),\"string\"===r&&(a=t(a)),void 0!==u&&!u.filter((function(e){return e==a})).length)throw new RangeError(\"\".concat(a,\" is not within \").concat(u.join(\", \")));return a}return i}var h=[\"angle-degree\",\"area-acre\",\"area-hectare\",\"concentr-percent\",\"digital-bit\",\"digital-byte\",\"digital-gigabit\",\"digital-gigabyte\",\"digital-kilobit\",\"digital-kilobyte\",\"digital-megabit\",\"digital-megabyte\",\"digital-petabyte\",\"digital-terabit\",\"digital-terabyte\",\"duration-day\",\"duration-hour\",\"duration-millisecond\",\"duration-minute\",\"duration-month\",\"duration-second\",\"duration-week\",\"duration-year\",\"length-centimeter\",\"length-foot\",\"length-inch\",\"length-kilometer\",\"length-meter\",\"length-mile-scandinavian\",\"length-mile\",\"length-millimeter\",\"length-yard\",\"mass-gram\",\"mass-kilogram\",\"mass-ounce\",\"mass-pound\",\"mass-stone\",\"temperature-celsius\",\"temperature-fahrenheit\",\"volume-fluid-ounce\",\"volume-gallon\",\"volume-liter\",\"volume-milliliter\"];function b(e){return e.slice(e.indexOf(\"-\")+1)}var E=h.map(b);function C(e){return E.indexOf(e)>-1}var S=/[^A-Z]/;function w(e){return 3===(e=e.replace(/([a-z])/g,(function(e,n){return n.toUpperCase()}))).length&&!S.test(e)}function A(e){if(C(e=e.replace(/([A-Z])/g,(function(e,n){return n.toLowerCase()}))))return!0;var n=e.split(\"-per-\");if(2!==n.length)return!1;var t=n[0],r=n[1];return!(!C(t)||!C(r))}function B(e){return Math.floor(Math.log(e)*Math.LOG10E)}function x(e,n){if(\"function\"==typeof e.repeat)return e.repeat(n);for(var t=new Array(n),r=0;r<t.length;r++)t[r]=e;return t.join(\"\")}function O(e,n,t,r){e.get(n)||e.set(n,Object.create(null)),e.get(n)[t]=r}function N(e,n){for(var t=[],r=2;r<arguments.length;r++)t[r-2]=arguments[r];var u=e.get(n);if(!u)throw new TypeError(\"\".concat(n,\" InternalSlot has not been initialized\"));return t.reduce((function(e,n){return e[n]=u[n],e}),Object.create(null))}function I(e,n,t){if(void 0===t&&(t=Error),!e)throw new t(n)}function M(e,n,t){var r=(0,t.getInternalSlots)(e),u=r.notation,i=r.dataLocaleData,a=r.numberingSystem;switch(u){case\"standard\":return 0;case\"scientific\":return n;case\"engineering\":return 3*Math.floor(n/3);default:var o=r.compactDisplay,c=r.style,l=r.currencyDisplay,s=void 0;if(\"currency\"===c&&\"name\"!==l){s=(i.numbers.currency[a]||i.numbers.currency[i.numbers.nu[0]]).short}else{var f=i.numbers.decimal[a]||i.numbers.decimal[i.numbers.nu[0]];s=\"long\"===o?f.long:f.short}if(!s)return 0;var D=String(Math.pow(10,n)),m=Object.keys(s);if(D<m[0])return 0;if(D>m[m.length-1])return m[m.length-1].length-1;var g=m.indexOf(D);if(-1===g)return 0;var p=m[g];return\"0\"===s[p].other?0:p.length-s[p].other.match(/0+/)[0].length}}function T(e,n,t){var r,u,i,a,o=t;if(0===e)r=x(\"0\",o),u=0,i=0;else{var c=e.toString(),l=c.indexOf(\"e\"),s=c.split(\"e\"),f=s[0],D=s[1],m=f.replace(\".\",\"\");if(l>=0&&m.length<=o)u=+D,r=m+x(\"0\",o-m.length),i=e;else{var g=(u=B(e))-o+1,p=Math.round(y(e,g));y(p,o-1)>=10&&(u+=1,p=Math.floor(p/10)),r=p.toString(),i=y(p,o-1-u)}}if(u>=o-1?(r+=x(\"0\",u-o+1),a=u+1):u>=0?(r=\"\".concat(r.slice(0,u+1),\".\").concat(r.slice(u+1)),a=u+1):(r=\"0.\".concat(x(\"0\",-u-1)).concat(r),a=1),r.indexOf(\".\")>=0&&t>n){for(var d=t-n;d>0&&\"0\"===r[r.length-1];)r=r.slice(0,-1),d--;\".\"===r[r.length-1]&&(r=r.slice(0,-1))}return{formattedString:r,roundedNumber:i,integerDigitsCount:a};function y(e,n){return n<0?e*Math.pow(10,-n):e/Math.pow(10,n)}}function k(e,n,t){var r,u,i=t,a=Math.round(e*Math.pow(10,i)),o=a/Math.pow(10,i);if(a<1e21)r=a.toString();else{var c=(r=a.toString()).split(\"e\"),l=c[0],s=c[1];r=l.replace(\".\",\"\"),r+=x(\"0\",Math.max(+s-r.length+1,0))}if(0!==i){var f=r.length;if(f<=i)r=x(\"0\",i+1-f)+r,f=i+1;var D=r.slice(0,f-i),m=r.slice(f-i);r=\"\".concat(D,\".\").concat(m),u=D.length}else u=r.length;for(var g=t-n;g>0&&\"0\"===r[r.length-1];)r=r.slice(0,-1),g--;return\".\"===r[r.length-1]&&(r=r.slice(0,-1)),{formattedString:r,roundedNumber:o,integerDigitsCount:u}}function j(e,n){var t,r=n<0||i(n,-0);switch(r&&(n=-n),e.roundingType){case\"significantDigits\":t=T(n,e.minimumSignificantDigits,e.maximumSignificantDigits);break;case\"fractionDigits\":t=k(n,e.minimumFractionDigits,e.maximumFractionDigits);break;default:(t=T(n,1,2)).integerDigitsCount>1&&(t=k(n,0,0))}n=t.roundedNumber;var u=t.formattedString,a=t.integerDigitsCount,o=e.minimumIntegerDigits;a<o&&(u=x(\"0\",o-a)+u);return r&&(n=-n),{roundedNumber:n,formattedString:u}}function L(e,n,t){var r=t.getInternalSlots;if(0===n)return[0,0];n<0&&(n=-n);var u=B(n),i=M(e,u,{getInternalSlots:r});n=i<0?n*Math.pow(10,-i):n/Math.pow(10,i);var a=j(r(e),n);return 0===a.roundedNumber||B(a.roundedNumber)===u-i?[i,u]:[M(e,u+1,{getInternalSlots:r}),u+1]}function U(e,n){var t=n.currencyDigitsData;return o(t,e)?t[e]:2}var P={adlm:[\"𞥐\",\"𞥑\",\"𞥒\",\"𞥓\",\"𞥔\",\"𞥕\",\"𞥖\",\"𞥗\",\"𞥘\",\"𞥙\"],ahom:[\"𑜰\",\"𑜱\",\"𑜲\",\"𑜳\",\"𑜴\",\"𑜵\",\"𑜶\",\"𑜷\",\"𑜸\",\"𑜹\"],arab:[\"٠\",\"١\",\"٢\",\"٣\",\"٤\",\"٥\",\"٦\",\"٧\",\"٨\",\"٩\"],arabext:[\"۰\",\"۱\",\"۲\",\"۳\",\"۴\",\"۵\",\"۶\",\"۷\",\"۸\",\"۹\"],bali:[\"᭐\",\"᭑\",\"᭒\",\"᭓\",\"᭔\",\"᭕\",\"᭖\",\"᭗\",\"᭘\",\"᭙\"],beng:[\"০\",\"১\",\"২\",\"৩\",\"৪\",\"৫\",\"৬\",\"৭\",\"৮\",\"৯\"],bhks:[\"𑱐\",\"𑱑\",\"𑱒\",\"𑱓\",\"𑱔\",\"𑱕\",\"𑱖\",\"𑱗\",\"𑱘\",\"𑱙\"],brah:[\"𑁦\",\"𑁧\",\"𑁨\",\"𑁩\",\"𑁪\",\"𑁫\",\"𑁬\",\"𑁭\",\"𑁮\",\"𑁯\"],cakm:[\"𑄶\",\"𑄷\",\"𑄸\",\"𑄹\",\"𑄺\",\"𑄻\",\"𑄼\",\"𑄽\",\"𑄾\",\"𑄿\"],cham:[\"꩐\",\"꩑\",\"꩒\",\"꩓\",\"꩔\",\"꩕\",\"꩖\",\"꩗\",\"꩘\",\"꩙\"],deva:[\"०\",\"१\",\"२\",\"३\",\"४\",\"५\",\"६\",\"७\",\"८\",\"९\"],diak:[\"𑥐\",\"𑥑\",\"𑥒\",\"𑥓\",\"𑥔\",\"𑥕\",\"𑥖\",\"𑥗\",\"𑥘\",\"𑥙\"],fullwide:[\"０\",\"１\",\"２\",\"３\",\"４\",\"５\",\"６\",\"７\",\"８\",\"９\"],gong:[\"𑶠\",\"𑶡\",\"𑶢\",\"𑶣\",\"𑶤\",\"𑶥\",\"𑶦\",\"𑶧\",\"𑶨\",\"𑶩\"],gonm:[\"𑵐\",\"𑵑\",\"𑵒\",\"𑵓\",\"𑵔\",\"𑵕\",\"𑵖\",\"𑵗\",\"𑵘\",\"𑵙\"],gujr:[\"૦\",\"૧\",\"૨\",\"૩\",\"૪\",\"૫\",\"૬\",\"૭\",\"૮\",\"૯\"],guru:[\"੦\",\"੧\",\"੨\",\"੩\",\"੪\",\"੫\",\"੬\",\"੭\",\"੮\",\"੯\"],hanidec:[\"〇\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\",\"八\",\"九\"],hmng:[\"𖭐\",\"𖭑\",\"𖭒\",\"𖭓\",\"𖭔\",\"𖭕\",\"𖭖\",\"𖭗\",\"𖭘\",\"𖭙\"],hmnp:[\"𞅀\",\"𞅁\",\"𞅂\",\"𞅃\",\"𞅄\",\"𞅅\",\"𞅆\",\"𞅇\",\"𞅈\",\"𞅉\"],java:[\"꧐\",\"꧑\",\"꧒\",\"꧓\",\"꧔\",\"꧕\",\"꧖\",\"꧗\",\"꧘\",\"꧙\"],kali:[\"꤀\",\"꤁\",\"꤂\",\"꤃\",\"꤄\",\"꤅\",\"꤆\",\"꤇\",\"꤈\",\"꤉\"],khmr:[\"០\",\"១\",\"២\",\"៣\",\"៤\",\"៥\",\"៦\",\"៧\",\"៨\",\"៩\"],knda:[\"೦\",\"೧\",\"೨\",\"೩\",\"೪\",\"೫\",\"೬\",\"೭\",\"೮\",\"೯\"],lana:[\"᪀\",\"᪁\",\"᪂\",\"᪃\",\"᪄\",\"᪅\",\"᪆\",\"᪇\",\"᪈\",\"᪉\"],lanatham:[\"᪐\",\"᪑\",\"᪒\",\"᪓\",\"᪔\",\"᪕\",\"᪖\",\"᪗\",\"᪘\",\"᪙\"],laoo:[\"໐\",\"໑\",\"໒\",\"໓\",\"໔\",\"໕\",\"໖\",\"໗\",\"໘\",\"໙\"],lepc:[\"᪐\",\"᪑\",\"᪒\",\"᪓\",\"᪔\",\"᪕\",\"᪖\",\"᪗\",\"᪘\",\"᪙\"],limb:[\"᥆\",\"᥇\",\"᥈\",\"᥉\",\"᥊\",\"᥋\",\"᥌\",\"᥍\",\"᥎\",\"᥏\"],mathbold:[\"𝟎\",\"𝟏\",\"𝟐\",\"𝟑\",\"𝟒\",\"𝟓\",\"𝟔\",\"𝟕\",\"𝟖\",\"𝟗\"],mathdbl:[\"𝟘\",\"𝟙\",\"𝟚\",\"𝟛\",\"𝟜\",\"𝟝\",\"𝟞\",\"𝟟\",\"𝟠\",\"𝟡\"],mathmono:[\"𝟶\",\"𝟷\",\"𝟸\",\"𝟹\",\"𝟺\",\"𝟻\",\"𝟼\",\"𝟽\",\"𝟾\",\"𝟿\"],mathsanb:[\"𝟬\",\"𝟭\",\"𝟮\",\"𝟯\",\"𝟰\",\"𝟱\",\"𝟲\",\"𝟳\",\"𝟴\",\"𝟵\"],mathsans:[\"𝟢\",\"𝟣\",\"𝟤\",\"𝟥\",\"𝟦\",\"𝟧\",\"𝟨\",\"𝟩\",\"𝟪\",\"𝟫\"],mlym:[\"൦\",\"൧\",\"൨\",\"൩\",\"൪\",\"൫\",\"൬\",\"൭\",\"൮\",\"൯\"],modi:[\"𑙐\",\"𑙑\",\"𑙒\",\"𑙓\",\"𑙔\",\"𑙕\",\"𑙖\",\"𑙗\",\"𑙘\",\"𑙙\"],mong:[\"᠐\",\"᠑\",\"᠒\",\"᠓\",\"᠔\",\"᠕\",\"᠖\",\"᠗\",\"᠘\",\"᠙\"],mroo:[\"𖩠\",\"𖩡\",\"𖩢\",\"𖩣\",\"𖩤\",\"𖩥\",\"𖩦\",\"𖩧\",\"𖩨\",\"𖩩\"],mtei:[\"꯰\",\"꯱\",\"꯲\",\"꯳\",\"꯴\",\"꯵\",\"꯶\",\"꯷\",\"꯸\",\"꯹\"],mymr:[\"၀\",\"၁\",\"၂\",\"၃\",\"၄\",\"၅\",\"၆\",\"၇\",\"၈\",\"၉\"],mymrshan:[\"႐\",\"႑\",\"႒\",\"႓\",\"႔\",\"႕\",\"႖\",\"႗\",\"႘\",\"႙\"],mymrtlng:[\"꧰\",\"꧱\",\"꧲\",\"꧳\",\"꧴\",\"꧵\",\"꧶\",\"꧷\",\"꧸\",\"꧹\"],newa:[\"𑑐\",\"𑑑\",\"𑑒\",\"𑑓\",\"𑑔\",\"𑑕\",\"𑑖\",\"𑑗\",\"𑑘\",\"𑑙\"],nkoo:[\"߀\",\"߁\",\"߂\",\"߃\",\"߄\",\"߅\",\"߆\",\"߇\",\"߈\",\"߉\"],olck:[\"᱐\",\"᱑\",\"᱒\",\"᱓\",\"᱔\",\"᱕\",\"᱖\",\"᱗\",\"᱘\",\"᱙\"],orya:[\"୦\",\"୧\",\"୨\",\"୩\",\"୪\",\"୫\",\"୬\",\"୭\",\"୮\",\"୯\"],osma:[\"𐒠\",\"𐒡\",\"𐒢\",\"𐒣\",\"𐒤\",\"𐒥\",\"𐒦\",\"𐒧\",\"𐒨\",\"𐒩\"],rohg:[\"𐴰\",\"𐴱\",\"𐴲\",\"𐴳\",\"𐴴\",\"𐴵\",\"𐴶\",\"𐴷\",\"𐴸\",\"𐴹\"],saur:[\"꣐\",\"꣑\",\"꣒\",\"꣓\",\"꣔\",\"꣕\",\"꣖\",\"꣗\",\"꣘\",\"꣙\"],segment:[\"🯰\",\"🯱\",\"🯲\",\"🯳\",\"🯴\",\"🯵\",\"🯶\",\"🯷\",\"🯸\",\"🯹\"],shrd:[\"𑇐\",\"𑇑\",\"𑇒\",\"𑇓\",\"𑇔\",\"𑇕\",\"𑇖\",\"𑇗\",\"𑇘\",\"𑇙\"],sind:[\"𑋰\",\"𑋱\",\"𑋲\",\"𑋳\",\"𑋴\",\"𑋵\",\"𑋶\",\"𑋷\",\"𑋸\",\"𑋹\"],sinh:[\"෦\",\"෧\",\"෨\",\"෩\",\"෪\",\"෫\",\"෬\",\"෭\",\"෮\",\"෯\"],sora:[\"𑃰\",\"𑃱\",\"𑃲\",\"𑃳\",\"𑃴\",\"𑃵\",\"𑃶\",\"𑃷\",\"𑃸\",\"𑃹\"],sund:[\"᮰\",\"᮱\",\"᮲\",\"᮳\",\"᮴\",\"᮵\",\"᮶\",\"᮷\",\"᮸\",\"᮹\"],takr:[\"𑛀\",\"𑛁\",\"𑛂\",\"𑛃\",\"𑛄\",\"𑛅\",\"𑛆\",\"𑛇\",\"𑛈\",\"𑛉\"],talu:[\"᧐\",\"᧑\",\"᧒\",\"᧓\",\"᧔\",\"᧕\",\"᧖\",\"᧗\",\"᧘\",\"᧙\"],tamldec:[\"௦\",\"௧\",\"௨\",\"௩\",\"௪\",\"௫\",\"௬\",\"௭\",\"௮\",\"௯\"],telu:[\"౦\",\"౧\",\"౨\",\"౩\",\"౪\",\"౫\",\"౬\",\"౭\",\"౮\",\"౯\"],thai:[\"๐\",\"๑\",\"๒\",\"๓\",\"๔\",\"๕\",\"๖\",\"๗\",\"๘\",\"๙\"],tibt:[\"༠\",\"༡\",\"༢\",\"༣\",\"༤\",\"༥\",\"༦\",\"༧\",\"༨\",\"༩\"],tirh:[\"𑓐\",\"𑓑\",\"𑓒\",\"𑓓\",\"𑓔\",\"𑓕\",\"𑓖\",\"𑓗\",\"𑓘\",\"𑓙\"],vaii:[\"ᘠ\",\"ᘡ\",\"ᘢ\",\"ᘣ\",\"ᘤ\",\"ᘥ\",\"ᘦ\",\"ᘧ\",\"ᘨ\",\"ᘩ\"],wara:[\"𑣠\",\"𑣡\",\"𑣢\",\"𑣣\",\"𑣤\",\"𑣥\",\"𑣦\",\"𑣧\",\"𑣨\",\"𑣩\"],wcho:[\"𞋰\",\"𞋱\",\"𞋲\",\"𞋳\",\"𞋴\",\"𞋵\",\"𞋶\",\"𞋷\",\"𞋸\",\"𞋹\"]},R=/[\\$\\+<->\\^`\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20BF\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBC1\\uFDFC\\uFDFD\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDE8\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED7\\uDEE0-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF73\\uDF80-\\uDFD8\\uDFE0-\\uDFEB]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6\\uDF00-\\uDF92\\uDF94-\\uDFCA]/,z=new RegExp(\"^\".concat(R.source)),_=new RegExp(\"\".concat(R.source,\"$\")),G=/[#0](?:[\\.,][#0]+)*/g;function Y(e,n,t,r){var u,i,a=e.sign,o=e.exponent,c=e.magnitude,l=r.notation,s=r.style,f=r.numberingSystem,D=n.numbers.nu[0],m=null;if(\"compact\"===l&&c&&(m=function(e,n,t,r,u,i,a){var o,c,l=e.roundedNumber,s=e.sign,f=e.magnitude,D=String(Math.pow(10,f)),m=t.numbers.nu[0];if(\"currency\"===r&&\"name\"!==i){var g=null===(o=((p=t.numbers.currency)[a]||p[m]).short)||void 0===o?void 0:o[D];if(!g)return null;c=H(n,l,g)}else{var p,d=((p=t.numbers.decimal)[a]||p[m])[u][D];if(!d)return null;c=H(n,l,d)}if(\"0\"===c)return null;return c=$(c,s).replace(/([^\\s;\\-\\+\\d¤]+)/g,\"{c:$1}\").replace(/0+/,\"0\")}(e,t,n,s,r.compactDisplay,r.currencyDisplay,f)),\"currency\"===s&&\"name\"!==r.currencyDisplay){var g=n.currencies[r.currency];if(g)switch(r.currencyDisplay){case\"code\":u=r.currency;break;case\"symbol\":u=g.symbol;break;default:u=g.narrow}else u=r.currency}if(m)i=m;else if(\"decimal\"===s||\"unit\"===s||\"currency\"===s&&\"name\"===r.currencyDisplay)i=$((n.numbers.decimal[f]||n.numbers.decimal[D]).standard,a);else if(\"currency\"===s){i=$((d=n.numbers.currency[f]||n.numbers.currency[D])[r.currencySign],a)}else{i=$(n.numbers.percent[f]||n.numbers.percent[D],a)}var p=G.exec(i)[0];if(i=i.replace(G,\"{0}\").replace(/'(.)'/g,\"$1\"),\"currency\"===s&&\"name\"!==r.currencyDisplay){var d,y=(d=n.numbers.currency[f]||n.numbers.currency[D]).currencySpacing.afterInsertBetween;y&&!_.test(u)&&(i=i.replace(\"¤{0}\",\"¤\".concat(y,\"{0}\")));var F=d.currencySpacing.beforeInsertBetween;F&&!z.test(u)&&(i=i.replace(\"{0}¤\",\"{0}\".concat(F,\"¤\")))}for(var v=i.split(/({c:[^}]+}|\\{0\\}|[¤%\\-\\+])/g),h=[],b=n.numbers.symbols[f]||n.numbers.symbols[D],E=0,C=v;E<C.length;E++){if(V=C[E])switch(V){case\"{0}\":h.push.apply(h,Z(b,e,l,o,f,!m&&r.useGrouping,p));break;case\"-\":h.push({type:\"minusSign\",value:b.minusSign});break;case\"+\":h.push({type:\"plusSign\",value:b.plusSign});break;case\"%\":h.push({type:\"percentSign\",value:b.percentSign});break;case\"¤\":h.push({type:\"currency\",value:u});break;default:/^\\{c:/.test(V)?h.push({type:\"compact\",value:V.substring(3,V.length-1)}):h.push({type:\"literal\",value:V})}}switch(s){case\"currency\":if(\"name\"===r.currencyDisplay){var S=(n.numbers.currency[f]||n.numbers.currency[D]).unitPattern,w=void 0,A=n.currencies[r.currency];w=A?H(t,e.roundedNumber*Math.pow(10,o),A.displayName):r.currency;for(var B=[],x=0,O=S.split(/(\\{[01]\\})/g);x<O.length;x++){switch(V=O[x]){case\"{0}\":B.push.apply(B,h);break;case\"{1}\":B.push({type:\"currency\",value:w});break;default:V&&B.push({type:\"literal\",value:V})}}return B}return h;case\"unit\":var N=r.unit,I=r.unitDisplay,M=n.units.simple[N];S=void 0;if(M)S=H(t,e.roundedNumber*Math.pow(10,o),n.units.simple[N][I]);else{var T=N.split(\"-per-\"),k=T[0],j=T[1];M=n.units.simple[k];var L=H(t,e.roundedNumber*Math.pow(10,o),n.units.simple[k][I]),U=n.units.simple[j].perUnit[I];if(U)S=U.replace(\"{0}\",L);else{var P=n.units.compound.per[I],R=H(t,1,n.units.simple[j][I]);S=S=P.replace(\"{0}\",L).replace(\"{1}\",R.replace(\"{0}\",\"\"))}}B=[];for(var Y=0,W=S.split(/(\\s*\\{0\\}\\s*)/);Y<W.length;Y++){var V=W[Y],q=/^(\\s*)\\{0\\}(\\s*)$/.exec(V);q?(q[1]&&B.push({type:\"literal\",value:q[1]}),B.push.apply(B,h),q[2]&&B.push({type:\"literal\",value:q[2]})):V&&B.push({type:\"unit\",value:V})}return B;default:return h}}function Z(e,n,t,r,u,i,a){var o=[],c=n.formattedString,l=n.roundedNumber;if(isNaN(l))return[{type:\"nan\",value:c}];if(!isFinite(l))return[{type:\"infinity\",value:c}];var s=P[u];s&&(c=c.replace(/\\d/g,(function(e){return s[+e]||e})));var f,D,m=c.indexOf(\".\");if(m>0?(f=c.slice(0,m),D=c.slice(m+1)):f=c,i&&(\"compact\"!==t||l>=1e4)){var g=e.group,p=[],d=a.split(\".\")[0].split(\",\"),y=3,F=3;d.length>1&&(y=d[d.length-1].length),d.length>2&&(F=d[d.length-2].length);var v=f.length-y;if(v>0){for(p.push(f.slice(v,v+y)),v-=F;v>0;v-=F)p.push(f.slice(v,v+F));p.push(f.slice(0,v+F))}else p.push(f);for(;p.length>0;){var h=p.pop();o.push({type:\"integer\",value:h}),p.length>0&&o.push({type:\"group\",value:g})}}else o.push({type:\"integer\",value:f});if(void 0!==D&&o.push({type:\"decimal\",value:e.decimal},{type:\"fraction\",value:D}),(\"scientific\"===t||\"engineering\"===t)&&isFinite(l)){o.push({type:\"exponentSeparator\",value:e.exponential}),r<0&&(o.push({type:\"exponentMinusSign\",value:e.minusSign}),r=-r);var b=k(r,0,0);o.push({type:\"exponentInteger\",value:b.formattedString})}return o}function $(e,n){e.indexOf(\";\")<0&&(e=\"\".concat(e,\";-\").concat(e));var t=e.split(\";\"),r=t[0],u=t[1];switch(n){case 0:return r;case-1:return u;default:return u.indexOf(\"-\")>=0?u.replace(/-/g,\"+\"):\"+\".concat(r)}}function H(e,n,t){return t[e.select(n)]||t.other}function W(e,n,t){var r,u,a,o=t.getInternalSlots,c=o(e),l=c.pl,s=c.dataLocaleData,f=c.numberingSystem,D=s.numbers.symbols[f]||s.numbers.symbols[s.numbers.nu[0]],m=0,g=0;if(isNaN(n))u=D.nan;else if(isFinite(n)){\"percent\"===c.style&&(n*=100),g=(r=L(e,n,{getInternalSlots:o}))[0],m=r[1];var p=j(c,n=g<0?n*Math.pow(10,-g):n/Math.pow(10,g));u=p.formattedString,n=p.roundedNumber}else u=D.infinity;switch(c.signDisplay){case\"never\":a=0;break;case\"auto\":a=i(n,0)||n>0||isNaN(n)?0:-1;break;case\"always\":a=i(n,0)||n>0||isNaN(n)?1:-1;break;default:a=0===n||isNaN(n)?0:n>0?1:-1}return Y({roundedNumber:n,formattedString:u,exponent:g,magnitude:m,sign:a},c.dataLocaleData,l,c)}var V,q=/-u(?:-[0-9a-z]{2,8})+/gi;function J(e,n,t){if(void 0===t&&(t=Error),!e)throw new t(n)}function K(e,n){for(var t=n;;){if(e.has(t))return t;var r=t.lastIndexOf(\"-\");if(!~r)return;r>=2&&\"-\"===t[r-2]&&(r-=2),t=t.slice(0,r)}}function Q(e,n){J(2===n.length,\"key must have 2 elements\");var t=e.length,r=\"-\".concat(n,\"-\"),u=e.indexOf(r);if(-1!==u){for(var i=u+4,a=i,o=i,c=!1;!c;){var l=e.indexOf(\"-\",o);2===(-1===l?t-o:l-o)?c=!0:-1===l?(a=t,c=!0):(a=l,o=l+1)}return e.slice(i,a)}if(r=\"-\".concat(n),-1!==(u=e.indexOf(r))&&u+3===t)return\"\"}function X(e,n,t,r,u,i){var a;a=\"lookup\"===t.localeMatcher?function(e,n,t){for(var r={locale:\"\"},u=0,i=n;u<i.length;u++){var a=i[u],o=a.replace(q,\"\"),c=K(e,o);if(c)return r.locale=c,a!==o&&(r.extension=a.slice(o.length+1,a.length)),r}return r.locale=t(),r}(e,n,i):function(e,n,t){var r,u={},i={},a={},o=new Set;e.forEach((function(e){var n=new Intl.Locale(e).minimize().toString(),t=Intl.getCanonicalLocales(e)[0]||e;u[n]=e,i[e]=e,a[t]=e,o.add(n),o.add(e),o.add(t)}));for(var c=0,l=n;c<l.length;c++){var s=l[c];if(r)break;var f=s.replace(q,\"\");if(e.has(f)){r=f;break}if(o.has(f)){r=f;break}var D=new Intl.Locale(f),m=D.maximize().toString(),g=D.minimize().toString();if(o.has(g)){r=g;break}r=K(o,m)}return r?{locale:i[r]||a[r]||u[r]||r}:{locale:t()}}(e,n,i);for(var o=a.locale,c={locale:\"\",dataLocale:o},l=\"-u\",s=0,f=r;s<f.length;s++){var D=f[s];J(o in u,\"Missing locale data for \".concat(o));var m=u[o];J(\"object\"==typeof m&&null!==m,\"locale data \".concat(D,\" must be an object\"));var g=m[D];J(Array.isArray(g),\"keyLocaleData for \".concat(D,\" must be an array\"));var p=g[0];J(\"string\"==typeof p||null===p,\"value must be string or null but got \".concat(typeof p,\" in key \").concat(D));var d=\"\";if(a.extension){var y=Q(a.extension,D);void 0!==y&&(\"\"!==y?~g.indexOf(y)&&(p=y,d=\"-\".concat(D,\"-\").concat(p)):~y.indexOf(\"true\")&&(p=\"true\",d=\"-\".concat(D)))}if(D in t){var F=t[D];J(\"string\"==typeof F||null==F,\"optionsValue must be String, Undefined or Null\"),~g.indexOf(F)&&F!==p&&(p=F,d=\"\")}c[D]=p,l+=d}if(l.length>2){var v=o.indexOf(\"-x-\");if(-1===v)o+=l;else{var h=o.slice(0,v),b=o.slice(v,o.length);o=h+l+b}o=Intl.getCanonicalLocales(o)[0]}return c.locale=o,c}function ee(e,n){for(var t=[],r=0,u=n;r<u.length;r++){var i=K(e,u[r].replace(q,\"\"));i&&t.push(i)}return t}function ne(e,n,t){void 0===n&&(n=Object.create(null));var r=(0,t.getInternalSlots)(e),u=v(n,\"style\",\"string\",[\"decimal\",\"percent\",\"currency\",\"unit\"],\"decimal\");r.style=u;var i=v(n,\"currency\",\"string\",void 0,void 0);if(void 0!==i&&!w(i))throw RangeError(\"Malformed currency code\");if(\"currency\"===u&&void 0===i)throw TypeError(\"currency cannot be undefined\");var a=v(n,\"currencyDisplay\",\"string\",[\"code\",\"symbol\",\"narrowSymbol\",\"name\"],\"symbol\"),o=v(n,\"currencySign\",\"string\",[\"standard\",\"accounting\"],\"standard\"),c=v(n,\"unit\",\"string\",void 0,void 0);if(void 0!==c&&!A(c))throw RangeError(\"Invalid unit argument for Intl.NumberFormat()\");if(\"unit\"===u&&void 0===c)throw TypeError(\"unit cannot be undefined\");var l=v(n,\"unitDisplay\",\"string\",[\"short\",\"narrow\",\"long\"],\"short\");\"currency\"===u&&(r.currency=i.toUpperCase(),r.currencyDisplay=a,r.currencySign=o),\"unit\"===u&&(r.unit=c,r.unitDisplay=l)}function te(e,n,t,r,u){var i=F(n,\"minimumIntegerDigits\",1,21,1),a=n.minimumFractionDigits,o=n.maximumFractionDigits,c=n.minimumSignificantDigits,l=n.maximumSignificantDigits;if(e.minimumIntegerDigits=i,void 0!==c||void 0!==l)e.roundingType=\"significantDigits\",c=y(c,1,21,1),l=y(l,c,21,21),e.minimumSignificantDigits=c,e.maximumSignificantDigits=l;else if(void 0!==a||void 0!==o){e.roundingType=\"fractionDigits\",a=y(a,0,20,t),o=y(o,a,20,Math.max(a,r)),e.minimumFractionDigits=a,e.maximumFractionDigits=o}else\"compact\"===u?e.roundingType=\"compactRounding\":(e.roundingType=\"fractionDigits\",e.minimumFractionDigits=t,e.maximumFractionDigits=r)}!function(n){function t(){var e=null!==n&&n.apply(this,arguments)||this;return e.type=\"MISSING_LOCALE_DATA\",e}e(t,n)}(Error),function(e){e.startRange=\"startRange\",e.shared=\"shared\",e.endRange=\"endRange\"}(V||(V={}));var re=Object.freeze({__proto__:null,_formatToParts:Y,getInternalSlot:function(e,n,t){return N(e,n,t)[t]},getMultiInternalSlots:N,isLiteralPart:function(e){return\"literal\"===e.type},setInternalSlot:O,setMultiInternalSlots:function(e,n,t){for(var r=0,u=Object.keys(t);r<u.length;r++){var i=u[r];O(e,n,i,t[i])}},getMagnitude:B,defineProperty:function(e,n,t){var r=t.value;Object.defineProperty(e,n,{configurable:!0,enumerable:!1,writable:!0,value:r})},isMissingLocaleDataError:function(e){return\"MISSING_LOCALE_DATA\"===e.type},invariant:I,CanonicalizeLocaleList:n,CanonicalizeTimeZoneName:function(e,n){var t=n.tzData,r=n.uppercaseLinks,u=e.toUpperCase(),i=Object.keys(t).reduce((function(e,n){return e[n.toUpperCase()]=n,e}),{}),a=r[u]||i[u];return\"Etc/UTC\"===a||\"Etc/GMT\"===a?\"UTC\":a},CoerceOptionsToObject:d,GetNumberOption:F,GetOption:v,GetOptionsObject:function(e){if(void 0===e)return Object.create(null);if(\"object\"==typeof e)return e;throw new TypeError(\"Options must be an object\")},SANCTIONED_UNITS:h,removeUnitNamespace:b,SIMPLE_UNITS:E,IsSanctionedSimpleUnitIdentifier:C,IsValidTimeZoneName:function(e,n){var t=n.tzData,r=n.uppercaseLinks,u=e.toUpperCase(),i=new Set,a=new Set;return Object.keys(t).map((function(e){return e.toUpperCase()})).forEach((function(e){return i.add(e)})),Object.keys(r).forEach((function(e){a.add(e.toUpperCase()),i.add(r[e].toUpperCase())})),i.has(u)||a.has(u)},IsWellFormedCurrencyCode:w,IsWellFormedUnitIdentifier:A,ComputeExponent:L,ComputeExponentForMagnitude:M,CurrencyDigits:U,FormatNumericToParts:function(e,n,t){for(var r=W(e,n,t),u=a(0),i=0,o=r;i<o.length;i++){var c=o[i];u.push({type:c.type,value:c.value})}return u},FormatNumericToString:j,InitializeNumberFormat:function(e,t,r,u){var i=u.getInternalSlots,a=u.localeData,o=u.availableLocales,c=u.numberingSystemNames,l=u.getDefaultLocale,s=u.currencyDigitsData,f=n(t),D=d(r),m=Object.create(null),g=v(D,\"localeMatcher\",\"string\",[\"lookup\",\"best fit\"],\"best fit\");m.localeMatcher=g;var p=v(D,\"numberingSystem\",\"string\",void 0,void 0);if(void 0!==p&&c.indexOf(p)<0)throw RangeError(\"Invalid numberingSystems: \".concat(p));m.nu=p;var y=X(o,f,m,[\"nu\"],a,l),F=a[y.dataLocale];I(!!F,\"Missing locale data for \".concat(y.dataLocale));var h=i(e);h.locale=y.locale,h.dataLocale=y.dataLocale,h.numberingSystem=y.nu,h.dataLocaleData=F,ne(e,D,{getInternalSlots:i});var b,E,C=h.style;if(\"currency\"===C){var S=U(h.currency,{currencyDigitsData:s});b=S,E=S}else b=0,E=\"percent\"===C?0:3;var w=v(D,\"notation\",\"string\",[\"standard\",\"scientific\",\"engineering\",\"compact\"],\"standard\");h.notation=w,te(h,D,b,E,w);var A=v(D,\"compactDisplay\",\"string\",[\"short\",\"long\"],\"short\");\"compact\"===w&&(h.compactDisplay=A);var B=v(D,\"useGrouping\",\"boolean\",void 0,!0);h.useGrouping=B;var x=v(D,\"signDisplay\",\"string\",[\"auto\",\"never\",\"always\",\"exceptZero\"],\"auto\");return h.signDisplay=x,e},PartitionNumberPattern:W,SetNumberFormatDigitOptions:te,SetNumberFormatUnitOptions:ne,ToRawFixed:k,ToRawPrecision:T,PartitionPattern:function(e){for(var n=[],t=e.indexOf(\"{\"),r=0,u=0,i=e.length;t<e.length&&t>-1;)I((r=e.indexOf(\"}\",t))>t,\"Invalid pattern \".concat(e)),t>u&&n.push({type:\"literal\",value:e.substring(u,t)}),n.push({type:e.substring(t+1,r),value:void 0}),u=r+1,t=e.indexOf(\"{\",u);return u<i&&n.push({type:\"literal\",value:e.substring(u,i)}),n},SupportedLocales:function(e,n,t){return void 0!==t&&v(t=u(t),\"localeMatcher\",\"string\",[\"lookup\",\"best fit\"],\"best fit\"),ee(e,n)},get RangePatternType(){return V},ToString:t,ToNumber:r,TimeClip:function(e){return isFinite(e)?Math.abs(e)>8640000000000001?NaN:function(e){var n=r(e);if(isNaN(n)||i(n,-0))return 0;if(isFinite(n))return n;var t=Math.floor(Math.abs(n));return n<0&&(t=-t),i(t,-0)?0:t}(e):NaN},ToObject:u,SameValue:i,ArrayCreate:a,HasOwnProperty:o,Type:function(e){return null===e?\"Null\":void 0===e?\"Undefined\":\"function\"==typeof e||\"object\"==typeof e?\"Object\":\"number\"==typeof e?\"Number\":\"boolean\"==typeof e?\"Boolean\":\"string\"==typeof e?\"String\":\"symbol\"==typeof e?\"Symbol\":\"bigint\"==typeof e?\"BigInt\":void 0},Day:l,WeekDay:function(e){return c(l(e)+4,7)},DayFromYear:s,TimeFromYear:function(e){return Date.UTC(e,0)},YearFromTime:f,DaysInYear:D,DayWithinYear:m,InLeapYear:g,MonthFromTime:p,DateFromTime:function(e){var n=m(e),t=p(e),r=g(e);if(0===t)return n+1;if(1===t)return n-30;if(2===t)return n-58-r;if(3===t)return n-89-r;if(4===t)return n-119-r;if(5===t)return n-150-r;if(6===t)return n-180-r;if(7===t)return n-211-r;if(8===t)return n-242-r;if(9===t)return n-272-r;if(10===t)return n-303-r;if(11===t)return n-333-r;throw new Error(\"Invalid time\")},HourFromTime:function(e){return c(Math.floor(e/36e5),24)},MinFromTime:function(e){return c(Math.floor(e/6e4),60)},SecFromTime:function(e){return c(Math.floor(e/1e3),60)},OrdinaryHasInstance:function(e,n,t){if(\"function\"!=typeof e)return!1;if(null==t?void 0:t.boundTargetFunction)return n instanceof(null==t?void 0:t.boundTargetFunction);if(\"object\"!=typeof n)return!1;var r=e.prototype;if(\"object\"!=typeof r)throw new TypeError(\"OrdinaryHasInstance called on an object with an invalid prototype property.\");return Object.prototype.isPrototypeOf.call(r,n)},msFromTime:function(e){return c(e,1e3)}});export{re as l};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.b720c549.js",
    "content": "import{a as s,H as o,e as t,t as e,$ as i,Z as a,a0 as r,a1 as c,a2 as d,a3 as h,a4 as n,s as l,d as p,r as m,n as u}from\"./main-a0d7432d.js\";import{c as v}from\"./c.4a97632a.js\";import\"./c.175b9792.js\";import\"./c.47f687e9.js\";import\"./c.63dc92d5.js\";import\"./c.7ee871d3.js\";import\"./c.c176780d.js\";import\"./c.936d9772.js\";import\"./c.8e28b461.js\";import\"./c.fbd8d2ba.js\";import\"./c.c7df5815.js\";import\"./c.db2e6bb6.js\";import\"./c.c608beec.js\";let g=s([u(\"hacs-custom-repositories-dialog\")],(function(s,o){return{F:class extends o{constructor(...o){super(...o),s(this)}},d:[{kind:\"field\",decorators:[t()],key:\"_error\",value:void 0},{kind:\"field\",decorators:[e()],key:\"_progress\",value:()=>!1},{kind:\"field\",decorators:[e()],key:\"_addRepositoryData\",value:()=>({category:void 0,repository:void 0})},{kind:\"field\",decorators:[e()],key:\"_customRepositories\",value:void 0},{kind:\"method\",key:\"shouldUpdate\",value:function(s){return s.has(\"narrow\")||s.has(\"active\")||s.has(\"_error\")||s.has(\"_addRepositoryData\")||s.has(\"_customRepositories\")||s.has(\"_progress\")}},{kind:\"method\",key:\"render\",value:function(){var s,o;if(!this.active)return i``;const t=[{name:\"repository\",selector:{text:{}}},{name:\"category\",selector:{select:{mode:\"dropdown\",options:this.hacs.info.categories.map((s=>({value:s,label:this.hacs.localize(`common.${s}`)})))}}}];return i`\n      <hacs-dialog\n        .active=${this.active}\n        .hass=${this.hass}\n        .title=${this.hacs.localize(\"dialog_custom_repositories.title\")}\n        scrimClickAction\n        escapeKeyAction\n        maxWidth\n      >\n        <div class=\"content\">\n          <div class=\"list\" ?narrow=${this.narrow}>\n            ${null!==(s=this._error)&&void 0!==s&&s.message?i`<ha-alert alert-type=\"error\" .rtl=${v(this.hass)}>\n                  ${this._error.message}\n                </ha-alert>`:\"\"}\n            ${null===(o=this._customRepositories)||void 0===o?void 0:o.filter((s=>this.hacs.info.categories.includes(s.category))).map((s=>i`<a\n                  href=\"/hacs/repository/${s.id}\"\n                  @click=${()=>this.active=!1}\n                >\n                  <ha-settings-row>\n                    <span slot=\"heading\">${s.name}</span>\n                    <span slot=\"description\">${s.full_name} (${s.category})</span>\n\n                    <mwc-icon-button\n                      @click=${o=>{o.preventDefault(),this._removeRepository(String(s.id))}}\n                    >\n                      <ha-svg-icon class=\"delete\" .path=${a}></ha-svg-icon>\n                    </mwc-icon-button>\n                  </ha-settings-row>\n                </a>`))}\n          </div>\n          <ha-form\n            ?narrow=${this.narrow}\n            .data=${this._addRepositoryData}\n            .schema=${t}\n            .computeLabel=${s=>\"category\"===s.name?this.hacs.localize(\"dialog_custom_repositories.category\"):this.hacs.localize(\"common.repository\")}\n            @value-changed=${this._valueChanged}\n          >\n          </ha-form>\n        </div>\n        <mwc-button\n          slot=\"primaryaction\"\n          raised\n          .disabled=${void 0===this._addRepositoryData.category||void 0===this._addRepositoryData.repository}\n          @click=${this._addRepository}\n        >\n          ${this._progress?i`<ha-circular-progress active size=\"small\"></ha-circular-progress>`:this.hacs.localize(\"common.add\")}\n        </mwc-button>\n      </hacs-dialog>\n    `}},{kind:\"method\",key:\"firstUpdated\",value:function(){var s;r(this.hass,(s=>this._error=s),c.ERROR),this._customRepositories=null===(s=this.hacs.repositories)||void 0===s?void 0:s.filter((s=>s.custom))}},{kind:\"method\",key:\"_valueChanged\",value:function(s){this._addRepositoryData=s.detail.value}},{kind:\"method\",key:\"_addRepository\",value:async function(){if(this._error=void 0,this._progress=!0,!this._addRepositoryData.category)return void(this._error={message:this.hacs.localize(\"dialog_custom_repositories.no_category\")});if(!this._addRepositoryData.repository)return void(this._error={message:this.hacs.localize(\"dialog_custom_repositories.no_repository\")});await d(this.hass,this._addRepositoryData.repository,this._addRepositoryData.category);const s=await h(this.hass);this.dispatchEvent(new CustomEvent(\"update-hacs\",{detail:{repositories:s},bubbles:!0,composed:!0})),this._customRepositories=s.filter((s=>s.custom)),this._progress=!1}},{kind:\"method\",key:\"_removeRepository\",value:async function(s){this._error=void 0,await n(this.hass,s);const o=await h(this.hass);this.dispatchEvent(new CustomEvent(\"update-hacs\",{detail:{repositories:o},bubbles:!0,composed:!0})),this._customRepositories=o.filter((s=>s.custom))}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[l,p,m`\n        .list {\n          position: relative;\n          max-height: calc(100vh - 500px);\n          overflow: auto;\n        }\n        a {\n          all: unset;\n        }\n        ha-form {\n          display: block;\n          padding: 25px 0;\n        }\n        ha-form[narrow] {\n          background-color: var(--card-background-color);\n          bottom: 0;\n          position: absolute;\n          width: calc(100% - 48px);\n        }\n        ha-svg-icon {\n          --mdc-icon-size: 36px;\n        }\n        ha-svg-icon:not(.delete) {\n          margin-right: 4px;\n        }\n        ha-settings-row {\n          cursor: pointer;\n          padding: 0;\n        }\n        .list[narrow] > ha-settings-row:last-of-type {\n          margin-bottom: 162px;\n        }\n        .delete {\n          color: var(--hcv-color-error);\n        }\n\n        @media all and (max-width: 450px), all and (max-height: 500px) {\n          .list {\n            max-height: calc(100vh - 162px);\n          }\n        }\n      `]}}]}}),o);export{g as HacsCustomRepositoriesDialog};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.ba01fa51.js",
    "content": "import{a as i,H as s,e,$ as t,d as a,r as o,ap as r,aq as l,am as n,ar as c,as as h,n as d}from\"./main-a0d7432d.js\";import\"./c.7ee871d3.js\";import\"./c.c608beec.js\";import\"./c.8e28b461.js\";let m=i([d(\"hacs-removed-dialog\")],(function(i,s){return{F:class extends s{constructor(...s){super(...s),i(this)}},d:[{kind:\"field\",decorators:[e({attribute:!1})],key:\"repository\",value:void 0},{kind:\"field\",decorators:[e({type:Boolean})],key:\"_updating\",value:()=>!1},{kind:\"method\",key:\"render\",value:function(){if(!this.active)return t``;const i=this.hacs.removed.find((i=>i.repository===this.repository.full_name));return t`\n      <hacs-dialog\n        .active=${this.active}\n        .hass=${this.hass}\n        .title=${this.hacs.localize(\"entry.messages.removed_repository\",{repository:this.repository.full_name})}\n      >\n        <div class=\"content\">\n          <div><b>${this.hacs.localize(\"dialog_removed.name\")}:</b> ${this.repository.name}</div>\n          ${i.removal_type?t` <div>\n                <b>${this.hacs.localize(\"dialog_removed.type\")}:</b> ${i.removal_type}\n              </div>`:\"\"}\n          ${i.reason?t` <div>\n                <b>${this.hacs.localize(\"dialog_removed.reason\")}:</b> ${i.reason}\n              </div>`:\"\"}\n          ${i.link?t`          <div>\n            </b><hacs-link .url=${i.link}>${this.hacs.localize(\"dialog_removed.link\")}</hacs-link>\n          </div>`:\"\"}\n        </div>\n        <mwc-button slot=\"secondaryaction\" @click=${this._ignoreRepository}>\n          ${this.hacs.localize(\"common.ignore\")}\n        </mwc-button>\n        <mwc-button class=\"uninstall\" slot=\"primaryaction\" @click=${this._uninstallRepository}\n          >${this._updating?t`<ha-circular-progress active size=\"small\"></ha-circular-progress>`:this.hacs.localize(\"common.remove\")}</mwc-button\n        >\n      </hacs-dialog>\n    `}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[a,o`\n        .uninstall {\n          --mdc-theme-primary: var(--hcv-color-error);\n        }\n      `]}},{kind:\"method\",key:\"_lovelaceUrl\",value:function(){var i,s;return`/hacsfiles/${null===(i=this.repository)||void 0===i?void 0:i.full_name.split(\"/\")[1]}/${null===(s=this.repository)||void 0===s?void 0:s.file_name}`}},{kind:\"method\",key:\"_ignoreRepository\",value:async function(){await r(this.hass,this.repository.full_name);const i=await l(this.hass);this.dispatchEvent(new CustomEvent(\"update-hacs\",{detail:{removed:i},bubbles:!0,composed:!0})),this.dispatchEvent(new Event(\"hacs-dialog-closed\",{bubbles:!0,composed:!0}))}},{kind:\"method\",key:\"_uninstallRepository\",value:async function(){if(this._updating=!0,\"plugin\"===this.repository.category&&this.hacs.info&&\"yaml\"!==this.hacs.info.lovelace_mode){(await n(this.hass)).filter((i=>i.url.startsWith(this._lovelaceUrl()))).forEach((i=>{c(this.hass,String(i.id))}))}await h(this.hass,String(this.repository.id)),this._updating=!1,this.active=!1}}]}}),s);export{m as HacsRemovedDialog};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.ba5bc454.js",
    "content": "import{Q as t,T as e,x as i,a as s,h as n,e as o,t as a,$ as r,eg as l,A as d,r as h,n as c,z as m,Z as u,P as p}from\"./main-a0d7432d.js\";import{d as g,i as f,u as v,r as _,b as y}from\"./c.56433b09.js\";import\"./c.936d9772.js\";import{c as b}from\"./c.587d89ba.js\";import{a as k}from\"./c.4a97632a.js\";import{M as w}from\"./c.9d5cd8b6.js\";import{a as $,s as x}from\"./c.bca0f55d.js\";import\"./c.c608beec.js\";import\"./c.47f687e9.js\";import\"./c.fbd8d2ba.js\";import\"./c.c176780d.js\";import\"./c.8e28b461.js\";import\"@lit-labs/virtualizer/layouts/grid\";import\"./c.5ede7966.js\";import\"./c.05e9df28.js\";import\"./c.175b9792.js\";import\"./c.c7df5815.js\";import\"./c.88ebfd3e.js\";import\"./c.58a9b586.js\";import\"./c.db2e6bb6.js\";import\"./c.21c042d4.js\";import\"./c.743a15a1.js\";import\"./c.5ba288d8.js\";import\"./c.6711bf6c.js\";import\"./c.63dc92d5.js\";const j=new WeakMap;let A=0;const I=new Map,C=new WeakSet,z=()=>new Promise((t=>requestAnimationFrame(t))),S=(t,e)=>{const i=t-e;return 0===i?void 0:i},O=(t,e)=>{const i=t/e;return 1===i?void 0:i},D={left:(t,e)=>{const i=S(t,e);return{value:i,transform:i&&`translateX(${i}px)`}},top:(t,e)=>{const i=S(t,e);return{value:i,transform:i&&`translateY(${i}px)`}},width:(t,e)=>{const i=O(t,e);return{value:i,transform:i&&`scaleX(${i})`}},height:(t,e)=>{const i=O(t,e);return{value:i,transform:i&&`scaleY(${i})`}}},F={duration:333,easing:\"ease-in-out\"},U=[\"left\",\"top\",\"width\",\"height\",\"opacity\",\"color\",\"background\"],E=new WeakMap;const N=t(class extends g{constructor(t){if(super(t),this.t=null,this.i=null,this.o=!0,this.shouldLog=!1,t.type===e.CHILD)throw Error(\"The `animate` directive must be used in attribute position.\");this.createFinished()}createFinished(){var t;null===(t=this.resolveFinished)||void 0===t||t.call(this),this.finished=new Promise((t=>{this.h=t}))}async resolveFinished(){var t;null===(t=this.h)||void 0===t||t.call(this),this.h=void 0}render(t){return i}getController(){return j.get(this.l)}isDisabled(){var t;return this.options.disabled||(null===(t=this.getController())||void 0===t?void 0:t.disabled)}update(t,[e]){var i;const s=void 0===this.l;return s&&(this.l=null===(i=t.options)||void 0===i?void 0:i.host,this.l.addController(this),this.element=t.element,E.set(this.element,this)),this.optionsOrCallback=e,(s||\"function\"!=typeof e)&&this.u(e),this.render(e)}u(t){var e,i;t=null!=t?t:{};const s=this.getController();void 0!==s&&((t={...s.defaultOptions,...t}).keyframeOptions={...s.defaultOptions.keyframeOptions,...t.keyframeOptions}),null!==(e=(i=t).properties)&&void 0!==e||(i.properties=U),this.options=t}v(){const t={},e=this.element.getBoundingClientRect(),i=getComputedStyle(this.element);return this.options.properties.forEach((s=>{var n;const o=null!==(n=e[s])&&void 0!==n?n:D[s]?void 0:i[s],a=Number(o);t[s]=isNaN(a)?o+\"\":a})),t}p(){let t,e=!0;return this.options.guard&&(t=this.options.guard(),e=((t,e)=>{if(Array.isArray(t)){if(Array.isArray(e)&&e.length===t.length&&t.every(((t,i)=>t===e[i])))return!1}else if(e===t)return!1;return!0})(t,this.m)),this.o=this.l.hasUpdated&&!this.isDisabled()&&!this.isAnimating()&&e&&this.element.isConnected,this.o&&(this.m=Array.isArray(t)?Array.from(t):t),this.o}hostUpdate(){var t;\"function\"==typeof this.optionsOrCallback&&this.u(this.optionsOrCallback()),this.p()&&(this.g=this.v(),this.t=null!==(t=this.t)&&void 0!==t?t:this.element.parentNode,this.i=this.element.nextSibling)}async hostUpdated(){if(!this.o||!this.element.isConnected||this.options.skipInitial&&!this.isHostRendered)return;let t;this.prepare(),await z;const e=this.A(),i=this._(this.options.keyframeOptions,e),s=this.v();if(void 0!==this.g){const{from:i,to:n}=this.j(this.g,s,e);this.log(\"measured\",[this.g,s,i,n]),t=this.calculateKeyframes(i,n)}else{const i=I.get(this.options.inId);if(i){I.delete(this.options.inId);const{from:n,to:o}=this.j(i,s,e);t=this.calculateKeyframes(n,o),t=this.options.in?[{...this.options.in[0],...t[0]},...this.options.in.slice(1),t[1]]:t,A++,t.forEach((t=>t.zIndex=A))}else this.options.in&&(t=[...this.options.in,{}])}this.animate(t,i)}resetStyles(){var t;void 0!==this.S&&(this.element.setAttribute(\"style\",null!==(t=this.S)&&void 0!==t?t:\"\"),this.S=void 0)}commitStyles(){var t,e;this.S=this.element.getAttribute(\"style\"),null===(t=this.webAnimation)||void 0===t||t.commitStyles(),null===(e=this.webAnimation)||void 0===e||e.cancel()}reconnected(){}async disconnected(){var t;if(!this.o)return;if(void 0!==this.options.id&&I.set(this.options.id,this.g),void 0===this.options.out)return;if(this.prepare(),await z(),null===(t=this.t)||void 0===t?void 0:t.isConnected){const t=this.i&&this.i.parentNode===this.t?this.i:null;if(this.t.insertBefore(this.element,t),this.options.stabilizeOut){const t=this.v();this.log(\"stabilizing out\");const e=this.g.left-t.left,i=this.g.top-t.top;!(\"static\"===getComputedStyle(this.element).position)||0===e&&0===i||(this.element.style.position=\"relative\"),0!==e&&(this.element.style.left=e+\"px\"),0!==i&&(this.element.style.top=i+\"px\")}}const e=this._(this.options.keyframeOptions);await this.animate(this.options.out,e),this.element.remove()}prepare(){this.createFinished()}start(){var t,e;null===(e=(t=this.options).onStart)||void 0===e||e.call(t,this)}didFinish(t){var e,i;t&&(null===(i=(e=this.options).onComplete)||void 0===i||i.call(e,this)),this.g=void 0,this.animatingProperties=void 0,this.frames=void 0,this.resolveFinished()}A(){const t=[];for(let e=this.element.parentNode;e;e=null==e?void 0:e.parentNode){const i=E.get(e);i&&!i.isDisabled()&&i&&t.push(i)}return t}get isHostRendered(){const t=C.has(this.l);return t||this.l.updateComplete.then((()=>{C.add(this.l)})),t}_(t,e=this.A()){const i={...F};return e.forEach((t=>Object.assign(i,t.options.keyframeOptions))),Object.assign(i,t),i}j(t,e,i){t={...t},e={...e};const s=i.map((t=>t.animatingProperties)).filter((t=>void 0!==t));let n=1,o=1;return void 0!==s&&(s.forEach((t=>{t.width&&(n/=t.width),t.height&&(o/=t.height)})),void 0!==t.left&&void 0!==e.left&&(t.left=n*t.left,e.left=n*e.left),void 0!==t.top&&void 0!==e.top&&(t.top=o*t.top,e.top=o*e.top)),{from:t,to:e}}calculateKeyframes(t,e,i=!1){var s;const n={},o={};let a=!1;const r={};for(const i in e){const l=t[i],d=e[i];if(i in D){const t=D[i];if(void 0===l||void 0===d)continue;const e=t(l,d);void 0!==e.transform&&(r[i]=e.value,a=!0,n.transform=`${null!==(s=n.transform)&&void 0!==s?s:\"\"} ${e.transform}`)}else l!==d&&void 0!==l&&void 0!==d&&(a=!0,n[i]=l,o[i]=d)}return n.transformOrigin=o.transformOrigin=i?\"center center\":\"top left\",this.animatingProperties=r,a?[n,o]:void 0}async animate(t,e=this.options.keyframeOptions){this.start(),this.frames=t;let i=!1;if(!this.isAnimating()&&!this.isDisabled()&&(this.options.onFrames&&(this.frames=t=this.options.onFrames(this),this.log(\"modified frames\",t)),void 0!==t)){this.log(\"animate\",[t,e]),i=!0,this.webAnimation=this.element.animate(t,e);const s=this.getController();null==s||s.add(this);try{await this.webAnimation.finished}catch(t){}null==s||s.remove(this)}return this.didFinish(i),i}isAnimating(){var t,e;return\"running\"===(null===(t=this.webAnimation)||void 0===t?void 0:t.playState)||(null===(e=this.webAnimation)||void 0===e?void 0:e.pending)}log(t,e){this.shouldLog&&!this.isDisabled()&&console.log(t,this.options.id,e)}});s([c(\"ha-media-upload-button\")],(function(t,e){return{F:class extends e{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[o({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[o()],key:\"currentItem\",value:void 0},{kind:\"field\",decorators:[a()],key:\"_uploading\",value:()=>0},{kind:\"method\",key:\"render\",value:function(){return this.currentItem&&f(this.currentItem.media_content_id||\"\")?r`\n      <mwc-button\n        .label=${this._uploading>0?this.hass.localize(\"ui.components.media-browser.file_management.uploading\",{count:this._uploading}):this.hass.localize(\"ui.components.media-browser.file_management.add_media\")}\n        .disabled=${this._uploading>0}\n        @click=${this._startUpload}\n      >\n        ${this._uploading>0?r`\n              <ha-circular-progress\n                size=\"tiny\"\n                active\n                alt=\"\"\n                slot=\"icon\"\n              ></ha-circular-progress>\n            `:r` <ha-svg-icon .path=${l} slot=\"icon\"></ha-svg-icon> `}\n      </mwc-button>\n    `:r``}},{kind:\"method\",key:\"_startUpload\",value:async function(){if(this._uploading>0)return;const t=document.createElement(\"input\");t.type=\"file\",t.accept=\"audio/*,video/*,image/*\",t.multiple=!0,t.addEventListener(\"change\",(async()=>{d(this,\"uploading\");const e=t.files;document.body.removeChild(t);const i=this.currentItem.media_content_id;for(let t=0;t<e.length;t++){this._uploading=e.length-t;try{await v(this.hass,i,e[t])}catch(t){$(this,{text:this.hass.localize(\"ui.components.media-browser.file_management.upload_failed\",{reason:t.message||t})});break}}this._uploading=0,d(this,\"media-refresh\")}),{once:!0}),t.style.display=\"none\",document.body.append(t),t.click()}},{kind:\"field\",static:!0,key:\"styles\",value:()=>h`\n    mwc-button {\n      /* We use icon + text to show disabled state */\n      --mdc-button-disabled-ink-color: --mdc-theme-primary;\n    }\n\n    ha-svg-icon[slot=\"icon\"],\n    ha-circular-progress[slot=\"icon\"] {\n      vertical-align: middle;\n    }\n\n    ha-svg-icon[slot=\"icon\"] {\n      margin-inline-start: 0px;\n      margin-inline-end: 8px;\n      direction: var(--direction);\n    }\n  `}]}}),n),s([c(\"dialog-media-manage\")],(function(t,e){return{F:class extends e{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[o({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[a()],key:\"_currentItem\",value:void 0},{kind:\"field\",decorators:[a()],key:\"_params\",value:void 0},{kind:\"field\",decorators:[a()],key:\"_uploading\",value:()=>!1},{kind:\"field\",decorators:[a()],key:\"_deleting\",value:()=>!1},{kind:\"field\",decorators:[a()],key:\"_selected\",value:()=>new Set},{kind:\"field\",key:\"_filesChanged\",value:()=>!1},{kind:\"method\",key:\"showDialog\",value:function(t){this._params=t,this._refreshMedia()}},{kind:\"method\",key:\"closeDialog\",value:function(){this._filesChanged&&this._params.onClose&&this._params.onClose(),this._params=void 0,this._currentItem=void 0,this._uploading=!1,this._deleting=!1,this._filesChanged=!1,d(this,\"dialog-closed\",{dialog:this.localName})}},{kind:\"method\",key:\"render\",value:function(){var t,e,i,s;if(!this._params)return r``;const n=(null===(t=this._currentItem)||void 0===t||null===(e=t.children)||void 0===e?void 0:e.filter((t=>!t.can_expand)))||[];let o=0;return r`\n      <ha-dialog\n        open\n        scrimClickAction\n        escapeKeyAction\n        hideActions\n        flexContent\n        .heading=${this._params.currentItem.title}\n        @closed=${this.closeDialog}\n      >\n        <ha-header-bar slot=\"heading\">\n          ${0===this._selected.size?r`\n                <span slot=\"title\">\n                  ${this.hass.localize(\"ui.components.media-browser.file_management.title\")}\n                </span>\n\n                <ha-media-upload-button\n                  .disabled=${this._deleting}\n                  .hass=${this.hass}\n                  .currentItem=${this._params.currentItem}\n                  @uploading=${this._startUploading}\n                  @media-refresh=${this._doneUploading}\n                  slot=\"actionItems\"\n                ></ha-media-upload-button>\n                ${this._uploading?\"\":r`\n                      <ha-icon-button\n                        .label=${this.hass.localize(\"ui.dialogs.generic.close\")}\n                        .path=${m}\n                        dialogAction=\"close\"\n                        slot=\"actionItems\"\n                        class=\"header_button\"\n                        dir=${k(this.hass)}\n                      ></ha-icon-button>\n                    `}\n              `:r`\n                <mwc-button\n                  class=\"danger\"\n                  slot=\"title\"\n                  .disabled=${this._deleting}\n                  .label=${this.hass.localize(\"ui.components.media-browser.file_management.\"+(this._deleting?\"deleting\":\"delete\"),{count:this._selected.size})}\n                  @click=${this._handleDelete}\n                >\n                  <ha-svg-icon .path=${u} slot=\"icon\"></ha-svg-icon>\n                </mwc-button>\n\n                ${this._deleting?\"\":r`\n                      <mwc-button\n                        slot=\"actionItems\"\n                        .label=${\"Deselect all\"}\n                        @click=${this._handleDeselectAll}\n                      >\n                        <ha-svg-icon\n                          .path=${m}\n                          slot=\"icon\"\n                        ></ha-svg-icon>\n                      </mwc-button>\n                    `}\n              `}\n        </ha-header-bar>\n        ${this._currentItem?n.length?r`\n              <mwc-list multi @selected=${this._handleSelected}>\n                ${b(n,(t=>t.media_content_id),(t=>{const e=r`\n                      <ha-svg-icon\n                        slot=\"graphic\"\n                        .path=${w[\"directory\"===t.media_class&&t.children_media_class||t.media_class].icon}\n                      ></ha-svg-icon>\n                    `;return r`\n                      <ha-check-list-item\n                        ${N({id:t.media_content_id,skipInitial:!0})}\n                        graphic=\"icon\"\n                        .disabled=${this._uploading||this._deleting}\n                        .selected=${this._selected.has(o++)}\n                        .item=${t}\n                      >\n                        ${e} ${t.title}\n                      </ha-check-list-item>\n                    `}))}\n              </mwc-list>\n            `:r`<div class=\"no-items\">\n              <p>\n                ${this.hass.localize(\"ui.components.media-browser.file_management.no_items\")}\n              </p>\n              ${null!==(i=this._currentItem)&&void 0!==i&&null!==(s=i.children)&&void 0!==s&&s.length?r`<span class=\"folders\"\n                    >${this.hass.localize(\"ui.components.media-browser.file_management.folders_not_supported\")}</span\n                  >`:\"\"}\n            </div>`:r`\n              <div class=\"refresh\">\n                <ha-circular-progress active></ha-circular-progress>\n              </div>\n            `}\n      </ha-dialog>\n    `}},{kind:\"method\",key:\"_handleSelected\",value:function(t){this._selected=t.detail.index}},{kind:\"method\",key:\"_startUploading\",value:function(){this._uploading=!0,this._filesChanged=!0}},{kind:\"method\",key:\"_doneUploading\",value:function(){this._uploading=!1,this._refreshMedia()}},{kind:\"method\",key:\"_handleDeselectAll\",value:function(){this._selected.size&&(this._selected=new Set)}},{kind:\"method\",key:\"_handleDelete\",value:async function(){if(!await x(this,{text:this.hass.localize(\"ui.components.media-browser.file_management.confirm_delete\",{count:this._selected.size}),warning:!0}))return;this._filesChanged=!0,this._deleting=!0;const t=[];let e=0;this._currentItem.children.forEach((i=>{i.can_expand||this._selected.has(e++)&&t.push(i)}));try{await Promise.all(t.map((async t=>{await _(this.hass,t.media_content_id),this._currentItem={...this._currentItem,children:this._currentItem.children.filter((e=>e!==t))}})))}finally{this._deleting=!1,this._selected=new Set}}},{kind:\"method\",key:\"_refreshMedia\",value:async function(){this._selected=new Set,this._currentItem=void 0,this._currentItem=await y(this.hass,this._params.currentItem.media_content_id)}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[p,h`\n        ha-dialog {\n          --dialog-z-index: 8;\n          --dialog-content-padding: 0;\n        }\n\n        @media (min-width: 800px) {\n          ha-dialog {\n            --mdc-dialog-max-width: 800px;\n            --dialog-surface-position: fixed;\n            --dialog-surface-top: 40px;\n            --mdc-dialog-max-height: calc(100vh - 72px);\n          }\n        }\n\n        ha-header-bar {\n          --mdc-theme-on-primary: var(--primary-text-color);\n          --mdc-theme-primary: var(--mdc-theme-surface);\n          flex-shrink: 0;\n          border-bottom: 1px solid var(--divider-color, rgba(0, 0, 0, 0.12));\n        }\n\n        ha-media-upload-button,\n        mwc-button {\n          --mdc-theme-primary: var(--mdc-theme-on-primary);\n        }\n\n        mwc-list {\n          direction: ltr;\n        }\n\n        .danger {\n          --mdc-theme-primary: var(--error-color);\n        }\n\n        ha-svg-icon[slot=\"icon\"] {\n          vertical-align: middle;\n        }\n\n        ha-svg-icon[slot=\"icon\"] {\n          margin-inline-start: 0px !important;\n          margin-inline-end: 8px !important;\n          direction: var(--direction);\n        }\n\n        .refresh {\n          display: flex;\n          height: 200px;\n          justify-content: center;\n          align-items: center;\n        }\n\n        .no-items {\n          text-align: center;\n          padding: 16px;\n        }\n        .folders {\n          color: var(--secondary-text-color);\n          font-style: italic;\n        }\n      `]}}]}}),n);\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.bc53dda1.js",
    "content": "var t,e;t=window,e=document,L.drawVersion=\"1.0.4\",L.Draw={},L.drawLocal={draw:{toolbar:{actions:{title:\"Cancel drawing\",text:\"Cancel\"},finish:{title:\"Finish drawing\",text:\"Finish\"},undo:{title:\"Delete last point drawn\",text:\"Delete last point\"},buttons:{polyline:\"Draw a polyline\",polygon:\"Draw a polygon\",rectangle:\"Draw a rectangle\",circle:\"Draw a circle\",marker:\"Draw a marker\",circlemarker:\"Draw a circlemarker\"}},handlers:{circle:{tooltip:{start:\"Click and drag to draw circle.\"},radius:\"Radius\"},circlemarker:{tooltip:{start:\"Click map to place circle marker.\"}},marker:{tooltip:{start:\"Click map to place marker.\"}},polygon:{tooltip:{start:\"Click to start drawing shape.\",cont:\"Click to continue drawing shape.\",end:\"Click first point to close this shape.\"}},polyline:{error:\"<strong>Error:</strong> shape edges cannot cross!\",tooltip:{start:\"Click to start drawing line.\",cont:\"Click to continue drawing line.\",end:\"Click last point to finish line.\"}},rectangle:{tooltip:{start:\"Click and drag to draw rectangle.\"}},simpleshape:{tooltip:{end:\"Release mouse to finish drawing.\"}}}},edit:{toolbar:{actions:{save:{title:\"Save changes\",text:\"Save\"},cancel:{title:\"Cancel editing, discards all changes\",text:\"Cancel\"},clearAll:{title:\"Clear all layers\",text:\"Clear All\"}},buttons:{edit:\"Edit layers\",editDisabled:\"No layers to edit\",remove:\"Delete layers\",removeDisabled:\"No layers to delete\"}},handlers:{edit:{tooltip:{text:\"Drag handles or markers to edit features.\",subtext:\"Click cancel to undo changes.\"}},remove:{tooltip:{text:\"Click on a feature to remove.\"}}}}},L.Draw.Event={},L.Draw.Event.CREATED=\"draw:created\",L.Draw.Event.EDITED=\"draw:edited\",L.Draw.Event.DELETED=\"draw:deleted\",L.Draw.Event.DRAWSTART=\"draw:drawstart\",L.Draw.Event.DRAWSTOP=\"draw:drawstop\",L.Draw.Event.DRAWVERTEX=\"draw:drawvertex\",L.Draw.Event.EDITSTART=\"draw:editstart\",L.Draw.Event.EDITMOVE=\"draw:editmove\",L.Draw.Event.EDITRESIZE=\"draw:editresize\",L.Draw.Event.EDITVERTEX=\"draw:editvertex\",L.Draw.Event.EDITSTOP=\"draw:editstop\",L.Draw.Event.DELETESTART=\"draw:deletestart\",L.Draw.Event.DELETESTOP=\"draw:deletestop\",L.Draw.Event.TOOLBAROPENED=\"draw:toolbaropened\",L.Draw.Event.TOOLBARCLOSED=\"draw:toolbarclosed\",L.Draw.Event.MARKERCONTEXT=\"draw:markercontext\",L.Draw=L.Draw||{},L.Draw.Feature=L.Handler.extend({initialize:function(t,e){this._map=t,this._container=t._container,this._overlayPane=t._panes.overlayPane,this._popupPane=t._panes.popupPane,e&&e.shapeOptions&&(e.shapeOptions=L.Util.extend({},this.options.shapeOptions,e.shapeOptions)),L.setOptions(this,e);var i=L.version.split(\".\");1===parseInt(i[0],10)&&parseInt(i[1],10)>=2?L.Draw.Feature.include(L.Evented.prototype):L.Draw.Feature.include(L.Mixin.Events)},enable:function(){this._enabled||(L.Handler.prototype.enable.call(this),this.fire(\"enabled\",{handler:this.type}),this._map.fire(L.Draw.Event.DRAWSTART,{layerType:this.type}))},disable:function(){this._enabled&&(L.Handler.prototype.disable.call(this),this._map.fire(L.Draw.Event.DRAWSTOP,{layerType:this.type}),this.fire(\"disabled\",{handler:this.type}))},addHooks:function(){var t=this._map;t&&(L.DomUtil.disableTextSelection(),t.getContainer().focus(),this._tooltip=new L.Draw.Tooltip(this._map),L.DomEvent.on(this._container,\"keyup\",this._cancelDrawing,this))},removeHooks:function(){this._map&&(L.DomUtil.enableTextSelection(),this._tooltip.dispose(),this._tooltip=null,L.DomEvent.off(this._container,\"keyup\",this._cancelDrawing,this))},setOptions:function(t){L.setOptions(this,t)},_fireCreatedEvent:function(t){this._map.fire(L.Draw.Event.CREATED,{layer:t,layerType:this.type})},_cancelDrawing:function(t){27===t.keyCode&&(this._map.fire(\"draw:canceled\",{layerType:this.type}),this.disable())}}),L.Draw.Polyline=L.Draw.Feature.extend({statics:{TYPE:\"polyline\"},Poly:L.Polyline,options:{allowIntersection:!0,repeatMode:!1,drawError:{color:\"#b00b00\",timeout:2500},icon:new L.DivIcon({iconSize:new L.Point(8,8),className:\"leaflet-div-icon leaflet-editing-icon\"}),touchIcon:new L.DivIcon({iconSize:new L.Point(20,20),className:\"leaflet-div-icon leaflet-editing-icon leaflet-touch-icon\"}),guidelineDistance:20,maxGuideLineLength:4e3,shapeOptions:{stroke:!0,color:\"#3388ff\",weight:4,opacity:.5,fill:!1,clickable:!0},metric:!0,feet:!0,nautic:!1,showLength:!0,zIndexOffset:2e3,factor:1,maxPoints:0},initialize:function(t,e){L.Browser.touch&&(this.options.icon=this.options.touchIcon),this.options.drawError.message=L.drawLocal.draw.handlers.polyline.error,e&&e.drawError&&(e.drawError=L.Util.extend({},this.options.drawError,e.drawError)),this.type=L.Draw.Polyline.TYPE,L.Draw.Feature.prototype.initialize.call(this,t,e)},addHooks:function(){L.Draw.Feature.prototype.addHooks.call(this),this._map&&(this._markers=[],this._markerGroup=new L.LayerGroup,this._map.addLayer(this._markerGroup),this._poly=new L.Polyline([],this.options.shapeOptions),this._tooltip.updateContent(this._getTooltipText()),this._mouseMarker||(this._mouseMarker=L.marker(this._map.getCenter(),{icon:L.divIcon({className:\"leaflet-mouse-marker\",iconAnchor:[20,20],iconSize:[40,40]}),opacity:0,zIndexOffset:this.options.zIndexOffset})),this._mouseMarker.on(\"mouseout\",this._onMouseOut,this).on(\"mousemove\",this._onMouseMove,this).on(\"mousedown\",this._onMouseDown,this).on(\"mouseup\",this._onMouseUp,this).addTo(this._map),this._map.on(\"mouseup\",this._onMouseUp,this).on(\"mousemove\",this._onMouseMove,this).on(\"zoomlevelschange\",this._onZoomEnd,this).on(\"touchstart\",this._onTouch,this).on(\"zoomend\",this._onZoomEnd,this))},removeHooks:function(){L.Draw.Feature.prototype.removeHooks.call(this),this._clearHideErrorTimeout(),this._cleanUpShape(),this._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers,this._map.removeLayer(this._poly),delete this._poly,this._mouseMarker.off(\"mousedown\",this._onMouseDown,this).off(\"mouseout\",this._onMouseOut,this).off(\"mouseup\",this._onMouseUp,this).off(\"mousemove\",this._onMouseMove,this),this._map.removeLayer(this._mouseMarker),delete this._mouseMarker,this._clearGuides(),this._map.off(\"mouseup\",this._onMouseUp,this).off(\"mousemove\",this._onMouseMove,this).off(\"zoomlevelschange\",this._onZoomEnd,this).off(\"zoomend\",this._onZoomEnd,this).off(\"touchstart\",this._onTouch,this).off(\"click\",this._onTouch,this)},deleteLastVertex:function(){if(!(this._markers.length<=1)){var t=this._markers.pop(),e=this._poly,i=e.getLatLngs(),o=i.splice(-1,1)[0];this._poly.setLatLngs(i),this._markerGroup.removeLayer(t),e.getLatLngs().length<2&&this._map.removeLayer(e),this._vertexChanged(o,!1)}},addVertex:function(t){this._markers.length>=2&&!this.options.allowIntersection&&this._poly.newLatLngIntersects(t)?this._showErrorTooltip():(this._errorShown&&this._hideErrorTooltip(),this._markers.push(this._createMarker(t)),this._poly.addLatLng(t),2===this._poly.getLatLngs().length&&this._map.addLayer(this._poly),this._vertexChanged(t,!0))},completeShape:function(){this._markers.length<=1||!this._shapeIsValid()||(this._fireCreatedEvent(),this.disable(),this.options.repeatMode&&this.enable())},_finishShape:function(){var t=this._poly._defaultShape?this._poly._defaultShape():this._poly.getLatLngs(),e=this._poly.newLatLngIntersects(t[t.length-1]);!this.options.allowIntersection&&e||!this._shapeIsValid()?this._showErrorTooltip():(this._fireCreatedEvent(),this.disable(),this.options.repeatMode&&this.enable())},_shapeIsValid:function(){return!0},_onZoomEnd:function(){null!==this._markers&&this._updateGuide()},_onMouseMove:function(t){var e=this._map.mouseEventToLayerPoint(t.originalEvent),i=this._map.layerPointToLatLng(e);this._currentLatLng=i,this._updateTooltip(i),this._updateGuide(e),this._mouseMarker.setLatLng(i),L.DomEvent.preventDefault(t.originalEvent)},_vertexChanged:function(t,e){this._map.fire(L.Draw.Event.DRAWVERTEX,{layers:this._markerGroup}),this._updateFinishHandler(),this._updateRunningMeasure(t,e),this._clearGuides(),this._updateTooltip()},_onMouseDown:function(t){if(!this._clickHandled&&!this._touchHandled&&!this._disableMarkers){this._onMouseMove(t),this._clickHandled=!0,this._disableNewMarkers();var e=t.originalEvent,i=e.clientX,o=e.clientY;this._startPoint.call(this,i,o)}},_startPoint:function(t,e){this._mouseDownOrigin=L.point(t,e)},_onMouseUp:function(t){var e=t.originalEvent,i=e.clientX,o=e.clientY;this._endPoint.call(this,i,o,t),this._clickHandled=null},_endPoint:function(e,i,o){if(this._mouseDownOrigin){var a=L.point(e,i).distanceTo(this._mouseDownOrigin),n=this._calculateFinishDistance(o.latlng);this.options.maxPoints>1&&this.options.maxPoints==this._markers.length+1?(this.addVertex(o.latlng),this._finishShape()):n<10&&L.Browser.touch?this._finishShape():Math.abs(a)<9*(t.devicePixelRatio||1)&&this.addVertex(o.latlng),this._enableNewMarkers()}this._mouseDownOrigin=null},_onTouch:function(t){var e,i,o=t.originalEvent;!o.touches||!o.touches[0]||this._clickHandled||this._touchHandled||this._disableMarkers||(e=o.touches[0].clientX,i=o.touches[0].clientY,this._disableNewMarkers(),this._touchHandled=!0,this._startPoint.call(this,e,i),this._endPoint.call(this,e,i,t),this._touchHandled=null),this._clickHandled=null},_onMouseOut:function(){this._tooltip&&this._tooltip._onMouseOut.call(this._tooltip)},_calculateFinishDistance:function(t){var e;if(this._markers.length>0){var i;if(this.type===L.Draw.Polyline.TYPE)i=this._markers[this._markers.length-1];else{if(this.type!==L.Draw.Polygon.TYPE)return 1/0;i=this._markers[0]}var o=this._map.latLngToContainerPoint(i.getLatLng()),a=new L.Marker(t,{icon:this.options.icon,zIndexOffset:2*this.options.zIndexOffset}),n=this._map.latLngToContainerPoint(a.getLatLng());e=o.distanceTo(n)}else e=1/0;return e},_updateFinishHandler:function(){var t=this._markers.length;t>1&&this._markers[t-1].on(\"click\",this._finishShape,this),t>2&&this._markers[t-2].off(\"click\",this._finishShape,this)},_createMarker:function(t){var e=new L.Marker(t,{icon:this.options.icon,zIndexOffset:2*this.options.zIndexOffset});return this._markerGroup.addLayer(e),e},_updateGuide:function(t){var e=this._markers?this._markers.length:0;e>0&&(t=t||this._map.latLngToLayerPoint(this._currentLatLng),this._clearGuides(),this._drawGuide(this._map.latLngToLayerPoint(this._markers[e-1].getLatLng()),t))},_updateTooltip:function(t){var e=this._getTooltipText();t&&this._tooltip.updatePosition(t),this._errorShown||this._tooltip.updateContent(e)},_drawGuide:function(t,e){var i,o,a,n=Math.floor(Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))),s=this.options.guidelineDistance,r=this.options.maxGuideLineLength,l=n>r?n-r:s;for(this._guidesContainer||(this._guidesContainer=L.DomUtil.create(\"div\",\"leaflet-draw-guides\",this._overlayPane));l<n;l+=this.options.guidelineDistance)i=l/n,o={x:Math.floor(t.x*(1-i)+i*e.x),y:Math.floor(t.y*(1-i)+i*e.y)},(a=L.DomUtil.create(\"div\",\"leaflet-draw-guide-dash\",this._guidesContainer)).style.backgroundColor=this._errorShown?this.options.drawError.color:this.options.shapeOptions.color,L.DomUtil.setPosition(a,o)},_updateGuideColor:function(t){if(this._guidesContainer)for(var e=0,i=this._guidesContainer.childNodes.length;e<i;e++)this._guidesContainer.childNodes[e].style.backgroundColor=t},_clearGuides:function(){if(this._guidesContainer)for(;this._guidesContainer.firstChild;)this._guidesContainer.removeChild(this._guidesContainer.firstChild)},_getTooltipText:function(){var t,e,i=this.options.showLength;return 0===this._markers.length?t={text:L.drawLocal.draw.handlers.polyline.tooltip.start}:(e=i?this._getMeasurementString():\"\",t=1===this._markers.length?{text:L.drawLocal.draw.handlers.polyline.tooltip.cont,subtext:e}:{text:L.drawLocal.draw.handlers.polyline.tooltip.end,subtext:e}),t},_updateRunningMeasure:function(t,e){var i,o,a=this._markers.length;1===this._markers.length?this._measurementRunningTotal=0:(i=a-(e?2:1),o=L.GeometryUtil.isVersion07x()?t.distanceTo(this._markers[i].getLatLng())*(this.options.factor||1):this._map.distance(t,this._markers[i].getLatLng())*(this.options.factor||1),this._measurementRunningTotal+=o*(e?1:-1))},_getMeasurementString:function(){var t,e=this._currentLatLng,i=this._markers[this._markers.length-1].getLatLng();return t=L.GeometryUtil.isVersion07x()?i&&e&&e.distanceTo?this._measurementRunningTotal+e.distanceTo(i)*(this.options.factor||1):this._measurementRunningTotal||0:i&&e?this._measurementRunningTotal+this._map.distance(e,i)*(this.options.factor||1):this._measurementRunningTotal||0,L.GeometryUtil.readableDistance(t,this.options.metric,this.options.feet,this.options.nautic,this.options.precision)},_showErrorTooltip:function(){this._errorShown=!0,this._tooltip.showAsError().updateContent({text:this.options.drawError.message}),this._updateGuideColor(this.options.drawError.color),this._poly.setStyle({color:this.options.drawError.color}),this._clearHideErrorTimeout(),this._hideErrorTimeout=setTimeout(L.Util.bind(this._hideErrorTooltip,this),this.options.drawError.timeout)},_hideErrorTooltip:function(){this._errorShown=!1,this._clearHideErrorTimeout(),this._tooltip.removeError().updateContent(this._getTooltipText()),this._updateGuideColor(this.options.shapeOptions.color),this._poly.setStyle({color:this.options.shapeOptions.color})},_clearHideErrorTimeout:function(){this._hideErrorTimeout&&(clearTimeout(this._hideErrorTimeout),this._hideErrorTimeout=null)},_disableNewMarkers:function(){this._disableMarkers=!0},_enableNewMarkers:function(){setTimeout(function(){this._disableMarkers=!1}.bind(this),50)},_cleanUpShape:function(){this._markers.length>1&&this._markers[this._markers.length-1].off(\"click\",this._finishShape,this)},_fireCreatedEvent:function(){var t=new this.Poly(this._poly.getLatLngs(),this.options.shapeOptions);L.Draw.Feature.prototype._fireCreatedEvent.call(this,t)}}),L.Draw.Polygon=L.Draw.Polyline.extend({statics:{TYPE:\"polygon\"},Poly:L.Polygon,options:{showArea:!1,showLength:!1,shapeOptions:{stroke:!0,color:\"#3388ff\",weight:4,opacity:.5,fill:!0,fillColor:null,fillOpacity:.2,clickable:!0},metric:!0,feet:!0,nautic:!1,precision:{}},initialize:function(t,e){L.Draw.Polyline.prototype.initialize.call(this,t,e),this.type=L.Draw.Polygon.TYPE},_updateFinishHandler:function(){var t=this._markers.length;1===t&&this._markers[0].on(\"click\",this._finishShape,this),t>2&&(this._markers[t-1].on(\"dblclick\",this._finishShape,this),t>3&&this._markers[t-2].off(\"dblclick\",this._finishShape,this))},_getTooltipText:function(){var t,e;return 0===this._markers.length?t=L.drawLocal.draw.handlers.polygon.tooltip.start:this._markers.length<3?(t=L.drawLocal.draw.handlers.polygon.tooltip.cont,e=this._getMeasurementString()):(t=L.drawLocal.draw.handlers.polygon.tooltip.end,e=this._getMeasurementString()),{text:t,subtext:e}},_getMeasurementString:function(){var t=this._area,e=\"\";return t||this.options.showLength?(this.options.showLength&&(e=L.Draw.Polyline.prototype._getMeasurementString.call(this)),t&&(e+=\"<br>\"+L.GeometryUtil.readableArea(t,this.options.metric,this.options.precision)),e):null},_shapeIsValid:function(){return this._markers.length>=3},_vertexChanged:function(t,e){var i;!this.options.allowIntersection&&this.options.showArea&&(i=this._poly.getLatLngs(),this._area=L.GeometryUtil.geodesicArea(i)),L.Draw.Polyline.prototype._vertexChanged.call(this,t,e)},_cleanUpShape:function(){var t=this._markers.length;t>0&&(this._markers[0].off(\"click\",this._finishShape,this),t>2&&this._markers[t-1].off(\"dblclick\",this._finishShape,this))}}),L.SimpleShape={},L.Draw.SimpleShape=L.Draw.Feature.extend({options:{repeatMode:!1},initialize:function(t,e){this._endLabelText=L.drawLocal.draw.handlers.simpleshape.tooltip.end,L.Draw.Feature.prototype.initialize.call(this,t,e)},addHooks:function(){L.Draw.Feature.prototype.addHooks.call(this),this._map&&(this._mapDraggable=this._map.dragging.enabled(),this._mapDraggable&&this._map.dragging.disable(),this._container.style.cursor=\"crosshair\",this._tooltip.updateContent({text:this._initialLabelText}),this._map.on(\"mousedown\",this._onMouseDown,this).on(\"mousemove\",this._onMouseMove,this).on(\"touchstart\",this._onMouseDown,this).on(\"touchmove\",this._onMouseMove,this),e.addEventListener(\"touchstart\",L.DomEvent.preventDefault,{passive:!1}))},removeHooks:function(){L.Draw.Feature.prototype.removeHooks.call(this),this._map&&(this._mapDraggable&&this._map.dragging.enable(),this._container.style.cursor=\"\",this._map.off(\"mousedown\",this._onMouseDown,this).off(\"mousemove\",this._onMouseMove,this).off(\"touchstart\",this._onMouseDown,this).off(\"touchmove\",this._onMouseMove,this),L.DomEvent.off(e,\"mouseup\",this._onMouseUp,this),L.DomEvent.off(e,\"touchend\",this._onMouseUp,this),e.removeEventListener(\"touchstart\",L.DomEvent.preventDefault),this._shape&&(this._map.removeLayer(this._shape),delete this._shape)),this._isDrawing=!1},_getTooltipText:function(){return{text:this._endLabelText}},_onMouseDown:function(t){this._isDrawing=!0,this._startLatLng=t.latlng,L.DomEvent.on(e,\"mouseup\",this._onMouseUp,this).on(e,\"touchend\",this._onMouseUp,this).preventDefault(t.originalEvent)},_onMouseMove:function(t){var e=t.latlng;this._tooltip.updatePosition(e),this._isDrawing&&(this._tooltip.updateContent(this._getTooltipText()),this._drawShape(e))},_onMouseUp:function(){this._shape&&this._fireCreatedEvent(),this.disable(),this.options.repeatMode&&this.enable()}}),L.Draw.Rectangle=L.Draw.SimpleShape.extend({statics:{TYPE:\"rectangle\"},options:{shapeOptions:{stroke:!0,color:\"#3388ff\",weight:4,opacity:.5,fill:!0,fillColor:null,fillOpacity:.2,clickable:!0},showArea:!0,metric:!0},initialize:function(t,e){this.type=L.Draw.Rectangle.TYPE,this._initialLabelText=L.drawLocal.draw.handlers.rectangle.tooltip.start,L.Draw.SimpleShape.prototype.initialize.call(this,t,e)},disable:function(){this._enabled&&(this._isCurrentlyTwoClickDrawing=!1,L.Draw.SimpleShape.prototype.disable.call(this))},_onMouseUp:function(t){this._shape||this._isCurrentlyTwoClickDrawing?this._isCurrentlyTwoClickDrawing&&!function(t,e){for(;(t=t.parentElement)&&!t.classList.contains(e););return t}(t.target,\"leaflet-pane\")||L.Draw.SimpleShape.prototype._onMouseUp.call(this):this._isCurrentlyTwoClickDrawing=!0},_drawShape:function(t){this._shape?this._shape.setBounds(new L.LatLngBounds(this._startLatLng,t)):(this._shape=new L.Rectangle(new L.LatLngBounds(this._startLatLng,t),this.options.shapeOptions),this._map.addLayer(this._shape))},_fireCreatedEvent:function(){var t=new L.Rectangle(this._shape.getBounds(),this.options.shapeOptions);L.Draw.SimpleShape.prototype._fireCreatedEvent.call(this,t)},_getTooltipText:function(){var t,e,i,o=L.Draw.SimpleShape.prototype._getTooltipText.call(this),a=this._shape,n=this.options.showArea;return a&&(t=this._shape._defaultShape?this._shape._defaultShape():this._shape.getLatLngs(),e=L.GeometryUtil.geodesicArea(t),i=n?L.GeometryUtil.readableArea(e,this.options.metric):\"\"),{text:o.text,subtext:i}}}),L.Draw.Marker=L.Draw.Feature.extend({statics:{TYPE:\"marker\"},options:{icon:new L.Icon.Default,repeatMode:!1,zIndexOffset:2e3},initialize:function(t,e){this.type=L.Draw.Marker.TYPE,this._initialLabelText=L.drawLocal.draw.handlers.marker.tooltip.start,L.Draw.Feature.prototype.initialize.call(this,t,e)},addHooks:function(){L.Draw.Feature.prototype.addHooks.call(this),this._map&&(this._tooltip.updateContent({text:this._initialLabelText}),this._mouseMarker||(this._mouseMarker=L.marker(this._map.getCenter(),{icon:L.divIcon({className:\"leaflet-mouse-marker\",iconAnchor:[20,20],iconSize:[40,40]}),opacity:0,zIndexOffset:this.options.zIndexOffset})),this._mouseMarker.on(\"click\",this._onClick,this).addTo(this._map),this._map.on(\"mousemove\",this._onMouseMove,this),this._map.on(\"click\",this._onTouch,this))},removeHooks:function(){L.Draw.Feature.prototype.removeHooks.call(this),this._map&&(this._map.off(\"click\",this._onClick,this).off(\"click\",this._onTouch,this),this._marker&&(this._marker.off(\"click\",this._onClick,this),this._map.removeLayer(this._marker),delete this._marker),this._mouseMarker.off(\"click\",this._onClick,this),this._map.removeLayer(this._mouseMarker),delete this._mouseMarker,this._map.off(\"mousemove\",this._onMouseMove,this))},_onMouseMove:function(t){var e=t.latlng;this._tooltip.updatePosition(e),this._mouseMarker.setLatLng(e),this._marker?(e=this._mouseMarker.getLatLng(),this._marker.setLatLng(e)):(this._marker=this._createMarker(e),this._marker.on(\"click\",this._onClick,this),this._map.on(\"click\",this._onClick,this).addLayer(this._marker))},_createMarker:function(t){return new L.Marker(t,{icon:this.options.icon,zIndexOffset:this.options.zIndexOffset})},_onClick:function(){this._fireCreatedEvent(),this.disable(),this.options.repeatMode&&this.enable()},_onTouch:function(t){this._onMouseMove(t),this._onClick()},_fireCreatedEvent:function(){var t=new L.Marker.Touch(this._marker.getLatLng(),{icon:this.options.icon});L.Draw.Feature.prototype._fireCreatedEvent.call(this,t)}}),L.Draw.CircleMarker=L.Draw.Marker.extend({statics:{TYPE:\"circlemarker\"},options:{stroke:!0,color:\"#3388ff\",weight:4,opacity:.5,fill:!0,fillColor:null,fillOpacity:.2,clickable:!0,zIndexOffset:2e3},initialize:function(t,e){this.type=L.Draw.CircleMarker.TYPE,this._initialLabelText=L.drawLocal.draw.handlers.circlemarker.tooltip.start,L.Draw.Feature.prototype.initialize.call(this,t,e)},_fireCreatedEvent:function(){var t=new L.CircleMarker(this._marker.getLatLng(),this.options);L.Draw.Feature.prototype._fireCreatedEvent.call(this,t)},_createMarker:function(t){return new L.CircleMarker(t,this.options)}}),L.Draw.Circle=L.Draw.SimpleShape.extend({statics:{TYPE:\"circle\"},options:{shapeOptions:{stroke:!0,color:\"#3388ff\",weight:4,opacity:.5,fill:!0,fillColor:null,fillOpacity:.2,clickable:!0},showRadius:!0,metric:!0,feet:!0,nautic:!1},initialize:function(t,e){this.type=L.Draw.Circle.TYPE,this._initialLabelText=L.drawLocal.draw.handlers.circle.tooltip.start,L.Draw.SimpleShape.prototype.initialize.call(this,t,e)},_drawShape:function(t){if(L.GeometryUtil.isVersion07x())var e=this._startLatLng.distanceTo(t);else e=this._map.distance(this._startLatLng,t);this._shape?this._shape.setRadius(e):(this._shape=new L.Circle(this._startLatLng,e,this.options.shapeOptions),this._map.addLayer(this._shape))},_fireCreatedEvent:function(){var t=new L.Circle(this._startLatLng,this._shape.getRadius(),this.options.shapeOptions);L.Draw.SimpleShape.prototype._fireCreatedEvent.call(this,t)},_onMouseMove:function(t){var e,i=t.latlng,o=this.options.showRadius,a=this.options.metric;if(this._tooltip.updatePosition(i),this._isDrawing){this._drawShape(i),e=this._shape.getRadius().toFixed(1);var n=\"\";o&&(n=L.drawLocal.draw.handlers.circle.radius+\": \"+L.GeometryUtil.readableDistance(e,a,this.options.feet,this.options.nautic)),this._tooltip.updateContent({text:this._endLabelText,subtext:n})}}}),L.Edit=L.Edit||{},L.Edit.Marker=L.Handler.extend({initialize:function(t,e){this._marker=t,L.setOptions(this,e)},addHooks:function(){var t=this._marker;t.dragging.enable(),t.on(\"dragend\",this._onDragEnd,t),this._toggleMarkerHighlight()},removeHooks:function(){var t=this._marker;t.dragging.disable(),t.off(\"dragend\",this._onDragEnd,t),this._toggleMarkerHighlight()},_onDragEnd:function(t){var e=t.target;e.edited=!0,this._map.fire(L.Draw.Event.EDITMOVE,{layer:e})},_toggleMarkerHighlight:function(){var t=this._marker._icon;t&&(t.style.display=\"none\",L.DomUtil.hasClass(t,\"leaflet-edit-marker-selected\")?(L.DomUtil.removeClass(t,\"leaflet-edit-marker-selected\"),this._offsetMarker(t,-4)):(L.DomUtil.addClass(t,\"leaflet-edit-marker-selected\"),this._offsetMarker(t,4)),t.style.display=\"\")},_offsetMarker:function(t,e){var i=parseInt(t.style.marginTop,10)-e,o=parseInt(t.style.marginLeft,10)-e;t.style.marginTop=i+\"px\",t.style.marginLeft=o+\"px\"}}),L.Marker.addInitHook((function(){L.Edit.Marker&&(this.editing=new L.Edit.Marker(this),this.options.editable&&this.editing.enable())})),L.Edit=L.Edit||{},L.Edit.Poly=L.Handler.extend({initialize:function(t){this.latlngs=[t._latlngs],t._holes&&(this.latlngs=this.latlngs.concat(t._holes)),this._poly=t,this._poly.on(\"revert-edited\",this._updateLatLngs,this)},_defaultShape:function(){return L.Polyline._flat?L.Polyline._flat(this._poly._latlngs)?this._poly._latlngs:this._poly._latlngs[0]:this._poly._latlngs},_eachVertexHandler:function(t){for(var e=0;e<this._verticesHandlers.length;e++)t(this._verticesHandlers[e])},addHooks:function(){this._initHandlers(),this._eachVertexHandler((function(t){t.addHooks()}))},removeHooks:function(){this._eachVertexHandler((function(t){t.removeHooks()}))},updateMarkers:function(){this._eachVertexHandler((function(t){t.updateMarkers()}))},_initHandlers:function(){this._verticesHandlers=[];for(var t=0;t<this.latlngs.length;t++)this._verticesHandlers.push(new L.Edit.PolyVerticesEdit(this._poly,this.latlngs[t],this._poly.options.poly))},_updateLatLngs:function(t){this.latlngs=[t.layer._latlngs],t.layer._holes&&(this.latlngs=this.latlngs.concat(t.layer._holes))}}),L.Edit.PolyVerticesEdit=L.Handler.extend({options:{icon:new L.DivIcon({iconSize:new L.Point(8,8),className:\"leaflet-div-icon leaflet-editing-icon\"}),touchIcon:new L.DivIcon({iconSize:new L.Point(20,20),className:\"leaflet-div-icon leaflet-editing-icon leaflet-touch-icon\"}),drawError:{color:\"#b00b00\",timeout:1e3}},initialize:function(t,e,i){L.Browser.touch&&(this.options.icon=this.options.touchIcon),this._poly=t,i&&i.drawError&&(i.drawError=L.Util.extend({},this.options.drawError,i.drawError)),this._latlngs=e,L.setOptions(this,i)},_defaultShape:function(){return L.Polyline._flat?L.Polyline._flat(this._latlngs)?this._latlngs:this._latlngs[0]:this._latlngs},addHooks:function(){var t=this._poly,e=t._path;t instanceof L.Polygon||(t.options.fill=!1,t.options.editing&&(t.options.editing.fill=!1)),e&&t.options.editing&&t.options.editing.className&&(t.options.original.className&&t.options.original.className.split(\" \").forEach((function(t){L.DomUtil.removeClass(e,t)})),t.options.editing.className.split(\" \").forEach((function(t){L.DomUtil.addClass(e,t)}))),t.setStyle(t.options.editing),this._poly._map&&(this._map=this._poly._map,this._markerGroup||this._initMarkers(),this._poly._map.addLayer(this._markerGroup))},removeHooks:function(){var t=this._poly,e=t._path;e&&t.options.editing&&t.options.editing.className&&(t.options.editing.className.split(\" \").forEach((function(t){L.DomUtil.removeClass(e,t)})),t.options.original.className&&t.options.original.className.split(\" \").forEach((function(t){L.DomUtil.addClass(e,t)}))),t.setStyle(t.options.original),t._map&&(t._map.removeLayer(this._markerGroup),delete this._markerGroup,delete this._markers)},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new L.LayerGroup),this._markers=[];var t,e,i,o,a,n,s=this._defaultShape();for(t=0,i=s.length;t<i;t++)(o=this._createMarker(s[t],t)).on(\"click\",this._onMarkerClick,this),o.on(\"contextmenu\",this._onContextMenu,this),this._markers.push(o);for(t=0,e=i-1;t<i;e=t++)(0!==t||L.Polygon&&this._poly instanceof L.Polygon)&&(a=this._markers[e],n=this._markers[t],this._createMiddleMarker(a,n),this._updatePrevNext(a,n))},_createMarker:function(t,e){var i=new L.Marker.Touch(t,{draggable:!0,icon:this.options.icon});return i._origLatLng=t,i._index=e,i.on(\"dragstart\",this._onMarkerDragStart,this).on(\"drag\",this._onMarkerDrag,this).on(\"dragend\",this._fireEdit,this).on(\"touchmove\",this._onTouchMove,this).on(\"touchend\",this._fireEdit,this).on(\"MSPointerMove\",this._onTouchMove,this).on(\"MSPointerUp\",this._fireEdit,this),this._markerGroup.addLayer(i),i},_onMarkerDragStart:function(){this._poly.fire(\"editstart\")},_spliceLatLngs:function(){var t=this._defaultShape(),e=[].splice.apply(t,arguments);return this._poly._convertLatLngs(t,!0),this._poly.redraw(),e},_removeMarker:function(t){var e=t._index;this._markerGroup.removeLayer(t),this._markers.splice(e,1),this._spliceLatLngs(e,1),this._updateIndexes(e,-1),t.off(\"dragstart\",this._onMarkerDragStart,this).off(\"drag\",this._onMarkerDrag,this).off(\"dragend\",this._fireEdit,this).off(\"touchmove\",this._onMarkerDrag,this).off(\"touchend\",this._fireEdit,this).off(\"click\",this._onMarkerClick,this).off(\"MSPointerMove\",this._onTouchMove,this).off(\"MSPointerUp\",this._fireEdit,this)},_fireEdit:function(){this._poly.edited=!0,this._poly.fire(\"edit\"),this._poly._map.fire(L.Draw.Event.EDITVERTEX,{layers:this._markerGroup,poly:this._poly})},_onMarkerDrag:function(t){var e=t.target,i=this._poly,o=L.LatLngUtil.cloneLatLng(e._origLatLng);if(L.extend(e._origLatLng,e._latlng),i.options.poly){var a=i._map._editTooltip;if(!i.options.poly.allowIntersection&&i.intersects()){L.extend(e._origLatLng,o),e.setLatLng(o);var n=i.options.color;i.setStyle({color:this.options.drawError.color}),a&&a.updateContent({text:L.drawLocal.draw.handlers.polyline.error}),setTimeout((function(){i.setStyle({color:n}),a&&a.updateContent({text:L.drawLocal.edit.handlers.edit.tooltip.text,subtext:L.drawLocal.edit.handlers.edit.tooltip.subtext})}),1e3)}}e._middleLeft&&e._middleLeft.setLatLng(this._getMiddleLatLng(e._prev,e)),e._middleRight&&e._middleRight.setLatLng(this._getMiddleLatLng(e,e._next)),this._poly._bounds._southWest=L.latLng(1/0,1/0),this._poly._bounds._northEast=L.latLng(-1/0,-1/0);var s=this._poly.getLatLngs();this._poly._convertLatLngs(s,!0),this._poly.redraw(),this._poly.fire(\"editdrag\")},_onMarkerClick:function(t){var e=L.Polygon&&this._poly instanceof L.Polygon?4:3,i=t.target;this._defaultShape().length<e||(this._removeMarker(i),this._updatePrevNext(i._prev,i._next),i._middleLeft&&this._markerGroup.removeLayer(i._middleLeft),i._middleRight&&this._markerGroup.removeLayer(i._middleRight),i._prev&&i._next?this._createMiddleMarker(i._prev,i._next):i._prev?i._next||(i._prev._middleRight=null):i._next._middleLeft=null,this._fireEdit())},_onContextMenu:function(t){var e=t.target;this._poly,this._poly._map.fire(L.Draw.Event.MARKERCONTEXT,{marker:e,layers:this._markerGroup,poly:this._poly}),L.DomEvent.stopPropagation},_onTouchMove:function(t){var e=this._map.mouseEventToLayerPoint(t.originalEvent.touches[0]),i=this._map.layerPointToLatLng(e),o=t.target;L.extend(o._origLatLng,i),o._middleLeft&&o._middleLeft.setLatLng(this._getMiddleLatLng(o._prev,o)),o._middleRight&&o._middleRight.setLatLng(this._getMiddleLatLng(o,o._next)),this._poly.redraw(),this.updateMarkers()},_updateIndexes:function(t,e){this._markerGroup.eachLayer((function(i){i._index>t&&(i._index+=e)}))},_createMiddleMarker:function(t,e){var i,o,a,n=this._getMiddleLatLng(t,e),s=this._createMarker(n);s.setOpacity(.6),t._middleRight=e._middleLeft=s,o=function(){s.off(\"touchmove\",o,this);var a=e._index;s._index=a,s.off(\"click\",i,this).on(\"click\",this._onMarkerClick,this),n.lat=s.getLatLng().lat,n.lng=s.getLatLng().lng,this._spliceLatLngs(a,0,n),this._markers.splice(a,0,s),s.setOpacity(1),this._updateIndexes(a,1),e._index++,this._updatePrevNext(t,s),this._updatePrevNext(s,e),this._poly.fire(\"editstart\")},a=function(){s.off(\"dragstart\",o,this),s.off(\"dragend\",a,this),s.off(\"touchmove\",o,this),this._createMiddleMarker(t,s),this._createMiddleMarker(s,e)},i=function(){o.call(this),a.call(this),this._fireEdit()},s.on(\"click\",i,this).on(\"dragstart\",o,this).on(\"dragend\",a,this).on(\"touchmove\",o,this),this._markerGroup.addLayer(s)},_updatePrevNext:function(t,e){t&&(t._next=e),e&&(e._prev=t)},_getMiddleLatLng:function(t,e){var i=this._poly._map,o=i.project(t.getLatLng()),a=i.project(e.getLatLng());return i.unproject(o._add(a)._divideBy(2))}}),L.Polyline.addInitHook((function(){this.editing||(L.Edit.Poly&&(this.editing=new L.Edit.Poly(this),this.options.editable&&this.editing.enable()),this.on(\"add\",(function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()})),this.on(\"remove\",(function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()})))})),L.Edit=L.Edit||{},L.Edit.SimpleShape=L.Handler.extend({options:{moveIcon:new L.DivIcon({iconSize:new L.Point(8,8),className:\"leaflet-div-icon leaflet-editing-icon leaflet-edit-move\"}),resizeIcon:new L.DivIcon({iconSize:new L.Point(8,8),className:\"leaflet-div-icon leaflet-editing-icon leaflet-edit-resize\"}),touchMoveIcon:new L.DivIcon({iconSize:new L.Point(20,20),className:\"leaflet-div-icon leaflet-editing-icon leaflet-edit-move leaflet-touch-icon\"}),touchResizeIcon:new L.DivIcon({iconSize:new L.Point(20,20),className:\"leaflet-div-icon leaflet-editing-icon leaflet-edit-resize leaflet-touch-icon\"})},initialize:function(t,e){L.Browser.touch&&(this.options.moveIcon=this.options.touchMoveIcon,this.options.resizeIcon=this.options.touchResizeIcon),this._shape=t,L.Util.setOptions(this,e)},addHooks:function(){var t=this._shape;this._shape._map&&(this._map=this._shape._map,t.setStyle(t.options.editing),t._map&&(this._map=t._map,this._markerGroup||this._initMarkers(),this._map.addLayer(this._markerGroup)))},removeHooks:function(){var t=this._shape;if(t.setStyle(t.options.original),t._map){this._unbindMarker(this._moveMarker);for(var e=0,i=this._resizeMarkers.length;e<i;e++)this._unbindMarker(this._resizeMarkers[e]);this._resizeMarkers=null,this._map.removeLayer(this._markerGroup),delete this._markerGroup}this._map=null},updateMarkers:function(){this._markerGroup.clearLayers(),this._initMarkers()},_initMarkers:function(){this._markerGroup||(this._markerGroup=new L.LayerGroup),this._createMoveMarker(),this._createResizeMarker()},_createMoveMarker:function(){},_createResizeMarker:function(){},_createMarker:function(t,e){var i=new L.Marker.Touch(t,{draggable:!0,icon:e,zIndexOffset:10});return this._bindMarker(i),this._markerGroup.addLayer(i),i},_bindMarker:function(t){t.on(\"dragstart\",this._onMarkerDragStart,this).on(\"drag\",this._onMarkerDrag,this).on(\"dragend\",this._onMarkerDragEnd,this).on(\"touchstart\",this._onTouchStart,this).on(\"touchmove\",this._onTouchMove,this).on(\"MSPointerMove\",this._onTouchMove,this).on(\"touchend\",this._onTouchEnd,this).on(\"MSPointerUp\",this._onTouchEnd,this)},_unbindMarker:function(t){t.off(\"dragstart\",this._onMarkerDragStart,this).off(\"drag\",this._onMarkerDrag,this).off(\"dragend\",this._onMarkerDragEnd,this).off(\"touchstart\",this._onTouchStart,this).off(\"touchmove\",this._onTouchMove,this).off(\"MSPointerMove\",this._onTouchMove,this).off(\"touchend\",this._onTouchEnd,this).off(\"MSPointerUp\",this._onTouchEnd,this)},_onMarkerDragStart:function(t){t.target.setOpacity(0),this._shape.fire(\"editstart\")},_fireEdit:function(){this._shape.edited=!0,this._shape.fire(\"edit\")},_onMarkerDrag:function(t){var e=t.target,i=e.getLatLng();e===this._moveMarker?this._move(i):this._resize(i),this._shape.redraw(),this._shape.fire(\"editdrag\")},_onMarkerDragEnd:function(t){t.target.setOpacity(1),this._fireEdit()},_onTouchStart:function(t){if(L.Edit.SimpleShape.prototype._onMarkerDragStart.call(this,t),\"function\"==typeof this._getCorners){var e=this._getCorners(),i=t.target,o=i._cornerIndex;i.setOpacity(0),this._oppositeCorner=e[(o+2)%4],this._toggleCornerMarkers(0,o)}this._shape.fire(\"editstart\")},_onTouchMove:function(t){var e=this._map.mouseEventToLayerPoint(t.originalEvent.touches[0]),i=this._map.layerPointToLatLng(e);return t.target===this._moveMarker?this._move(i):this._resize(i),this._shape.redraw(),!1},_onTouchEnd:function(t){t.target.setOpacity(1),this.updateMarkers(),this._fireEdit()},_move:function(){},_resize:function(){}}),L.Edit=L.Edit||{},L.Edit.Rectangle=L.Edit.SimpleShape.extend({_createMoveMarker:function(){var t=this._shape.getBounds().getCenter();this._moveMarker=this._createMarker(t,this.options.moveIcon)},_createResizeMarker:function(){var t=this._getCorners();this._resizeMarkers=[];for(var e=0,i=t.length;e<i;e++)this._resizeMarkers.push(this._createMarker(t[e],this.options.resizeIcon)),this._resizeMarkers[e]._cornerIndex=e},_onMarkerDragStart:function(t){L.Edit.SimpleShape.prototype._onMarkerDragStart.call(this,t);var e=this._getCorners(),i=t.target._cornerIndex;this._oppositeCorner=e[(i+2)%4],this._toggleCornerMarkers(0,i)},_onMarkerDragEnd:function(t){var e,i=t.target;i===this._moveMarker&&(e=this._shape.getBounds().getCenter(),i.setLatLng(e)),this._toggleCornerMarkers(1),this._repositionCornerMarkers(),L.Edit.SimpleShape.prototype._onMarkerDragEnd.call(this,t)},_move:function(t){for(var e,i=this._shape._defaultShape?this._shape._defaultShape():this._shape.getLatLngs(),o=this._shape.getBounds().getCenter(),a=[],n=0,s=i.length;n<s;n++)e=[i[n].lat-o.lat,i[n].lng-o.lng],a.push([t.lat+e[0],t.lng+e[1]]);this._shape.setLatLngs(a),this._repositionCornerMarkers(),this._map.fire(L.Draw.Event.EDITMOVE,{layer:this._shape})},_resize:function(t){var e;this._shape.setBounds(L.latLngBounds(t,this._oppositeCorner)),e=this._shape.getBounds(),this._moveMarker.setLatLng(e.getCenter()),this._map.fire(L.Draw.Event.EDITRESIZE,{layer:this._shape})},_getCorners:function(){var t=this._shape.getBounds();return[t.getNorthWest(),t.getNorthEast(),t.getSouthEast(),t.getSouthWest()]},_toggleCornerMarkers:function(t){for(var e=0,i=this._resizeMarkers.length;e<i;e++)this._resizeMarkers[e].setOpacity(t)},_repositionCornerMarkers:function(){for(var t=this._getCorners(),e=0,i=this._resizeMarkers.length;e<i;e++)this._resizeMarkers[e].setLatLng(t[e])}}),L.Rectangle.addInitHook((function(){L.Edit.Rectangle&&(this.editing=new L.Edit.Rectangle(this),this.options.editable&&this.editing.enable())})),L.Edit=L.Edit||{},L.Edit.CircleMarker=L.Edit.SimpleShape.extend({_createMoveMarker:function(){var t=this._shape.getLatLng();this._moveMarker=this._createMarker(t,this.options.moveIcon)},_createResizeMarker:function(){this._resizeMarkers=[]},_move:function(t){if(this._resizeMarkers.length){var e=this._getResizeMarkerPoint(t);this._resizeMarkers[0].setLatLng(e)}this._shape.setLatLng(t),this._map.fire(L.Draw.Event.EDITMOVE,{layer:this._shape})}}),L.CircleMarker.addInitHook((function(){L.Edit.CircleMarker&&(this.editing=new L.Edit.CircleMarker(this),this.options.editable&&this.editing.enable()),this.on(\"add\",(function(){this.editing&&this.editing.enabled()&&this.editing.addHooks()})),this.on(\"remove\",(function(){this.editing&&this.editing.enabled()&&this.editing.removeHooks()}))})),L.Edit=L.Edit||{},L.Edit.Circle=L.Edit.CircleMarker.extend({_createResizeMarker:function(){var t=this._shape.getLatLng(),e=this._getResizeMarkerPoint(t);this._resizeMarkers=[],this._resizeMarkers.push(this._createMarker(e,this.options.resizeIcon))},_getResizeMarkerPoint:function(t){var e=this._shape._radius*Math.cos(Math.PI/4),i=this._map.project(t);return this._map.unproject([i.x+e,i.y-e])},_resize:function(t){var e=this._moveMarker.getLatLng();L.GeometryUtil.isVersion07x()?radius=e.distanceTo(t):radius=this._map.distance(e,t),this._shape.setRadius(radius),this._map.editTooltip&&this._map._editTooltip.updateContent({text:L.drawLocal.edit.handlers.edit.tooltip.subtext+\"<br />\"+L.drawLocal.edit.handlers.edit.tooltip.text,subtext:L.drawLocal.draw.handlers.circle.radius+\": \"+L.GeometryUtil.readableDistance(radius,!0,this.options.feet,this.options.nautic)}),this._shape.setRadius(radius),this._map.fire(L.Draw.Event.EDITRESIZE,{layer:this._shape})}}),L.Circle.addInitHook((function(){L.Edit.Circle&&(this.editing=new L.Edit.Circle(this),this.options.editable&&this.editing.enable())})),L.Map.mergeOptions({touchExtend:!0}),L.Map.TouchExtend=L.Handler.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane},addHooks:function(){L.DomEvent.on(this._container,\"touchstart\",this._onTouchStart,this),L.DomEvent.on(this._container,\"touchend\",this._onTouchEnd,this),L.DomEvent.on(this._container,\"touchmove\",this._onTouchMove,this),this._detectIE()?(L.DomEvent.on(this._container,\"MSPointerDown\",this._onTouchStart,this),L.DomEvent.on(this._container,\"MSPointerUp\",this._onTouchEnd,this),L.DomEvent.on(this._container,\"MSPointerMove\",this._onTouchMove,this),L.DomEvent.on(this._container,\"MSPointerCancel\",this._onTouchCancel,this)):(L.DomEvent.on(this._container,\"touchcancel\",this._onTouchCancel,this),L.DomEvent.on(this._container,\"touchleave\",this._onTouchLeave,this))},removeHooks:function(){L.DomEvent.off(this._container,\"touchstart\",this._onTouchStart,this),L.DomEvent.off(this._container,\"touchend\",this._onTouchEnd,this),L.DomEvent.off(this._container,\"touchmove\",this._onTouchMove,this),this._detectIE()?(L.DomEvent.off(this._container,\"MSPointerDown\",this._onTouchStart,this),L.DomEvent.off(this._container,\"MSPointerUp\",this._onTouchEnd,this),L.DomEvent.off(this._container,\"MSPointerMove\",this._onTouchMove,this),L.DomEvent.off(this._container,\"MSPointerCancel\",this._onTouchCancel,this)):(L.DomEvent.off(this._container,\"touchcancel\",this._onTouchCancel,this),L.DomEvent.off(this._container,\"touchleave\",this._onTouchLeave,this))},_touchEvent:function(t,e){var i={};if(void 0!==t.touches){if(!t.touches.length)return;i=t.touches[0]}else{if(\"touch\"!==t.pointerType)return;if(i=t,!this._filterClick(t))return}var o=this._map.mouseEventToContainerPoint(i),a=this._map.mouseEventToLayerPoint(i),n=this._map.layerPointToLatLng(a);this._map.fire(e,{latlng:n,layerPoint:a,containerPoint:o,pageX:i.pageX,pageY:i.pageY,originalEvent:t})},_filterClick:function(t){var e=t.timeStamp||t.originalEvent.timeStamp,i=L.DomEvent._lastClick&&e-L.DomEvent._lastClick;return i&&i>100&&i<500||t.target._simulatedClick&&!t._simulated?(L.DomEvent.stop(t),!1):(L.DomEvent._lastClick=e,!0)},_onTouchStart:function(t){this._map._loaded&&this._touchEvent(t,\"touchstart\")},_onTouchEnd:function(t){this._map._loaded&&this._touchEvent(t,\"touchend\")},_onTouchCancel:function(t){if(this._map._loaded){var e=\"touchcancel\";this._detectIE()&&(e=\"pointercancel\"),this._touchEvent(t,e)}},_onTouchLeave:function(t){this._map._loaded&&this._touchEvent(t,\"touchleave\")},_onTouchMove:function(t){this._map._loaded&&this._touchEvent(t,\"touchmove\")},_detectIE:function(){var e=t.navigator.userAgent,i=e.indexOf(\"MSIE \");if(i>0)return parseInt(e.substring(i+5,e.indexOf(\".\",i)),10);if(e.indexOf(\"Trident/\")>0){var o=e.indexOf(\"rv:\");return parseInt(e.substring(o+3,e.indexOf(\".\",o)),10)}var a=e.indexOf(\"Edge/\");return a>0&&parseInt(e.substring(a+5,e.indexOf(\".\",a)),10)}}),L.Map.addInitHook(\"addHandler\",\"touchExtend\",L.Map.TouchExtend),L.Marker.Touch=L.Marker.extend({_initInteraction:function(){return this.addInteractiveTarget?L.Marker.prototype._initInteraction.apply(this):this._initInteractionLegacy()},_initInteractionLegacy:function(){if(this.options.clickable){var t=this._icon,e=[\"dblclick\",\"mousedown\",\"mouseover\",\"mouseout\",\"contextmenu\",\"touchstart\",\"touchend\",\"touchmove\"];this._detectIE?e.concat([\"MSPointerDown\",\"MSPointerUp\",\"MSPointerMove\",\"MSPointerCancel\"]):e.concat([\"touchcancel\"]),L.DomUtil.addClass(t,\"leaflet-clickable\"),L.DomEvent.on(t,\"click\",this._onMouseClick,this),L.DomEvent.on(t,\"keypress\",this._onKeyPress,this);for(var i=0;i<e.length;i++)L.DomEvent.on(t,e[i],this._fireMouseEvent,this);L.Handler.MarkerDrag&&(this.dragging=new L.Handler.MarkerDrag(this),this.options.draggable&&this.dragging.enable())}},_detectIE:function(){var e=t.navigator.userAgent,i=e.indexOf(\"MSIE \");if(i>0)return parseInt(e.substring(i+5,e.indexOf(\".\",i)),10);if(e.indexOf(\"Trident/\")>0){var o=e.indexOf(\"rv:\");return parseInt(e.substring(o+3,e.indexOf(\".\",o)),10)}var a=e.indexOf(\"Edge/\");return a>0&&parseInt(e.substring(a+5,e.indexOf(\".\",a)),10)}}),L.LatLngUtil={cloneLatLngs:function(t){for(var e=[],i=0,o=t.length;i<o;i++)Array.isArray(t[i])?e.push(L.LatLngUtil.cloneLatLngs(t[i])):e.push(this.cloneLatLng(t[i]));return e},cloneLatLng:function(t){return L.latLng(t.lat,t.lng)}},function(){var t={km:2,ha:2,m:0,mi:2,ac:2,yd:0,ft:0,nm:2};L.GeometryUtil=L.extend(L.GeometryUtil||{},{geodesicArea:function(t){var e,i,o=t.length,a=0,n=Math.PI/180;if(o>2){for(var s=0;s<o;s++)e=t[s],a+=((i=t[(s+1)%o]).lng-e.lng)*n*(2+Math.sin(e.lat*n)+Math.sin(i.lat*n));a=6378137*a*6378137/2}return Math.abs(a)},formattedNumber:function(t,e){var i=parseFloat(t).toFixed(e),o=L.drawLocal.format&&L.drawLocal.format.numeric,a=o&&o.delimiters,n=a&&a.thousands,s=a&&a.decimal;if(n||s){var r=i.split(\".\");i=n?r[0].replace(/(\\d)(?=(\\d{3})+(?!\\d))/g,\"$1\"+n):r[0],s=s||\".\",r.length>1&&(i=i+s+r[1])}return i},readableArea:function(e,i,o){var a,n;return o=L.Util.extend({},t,o),i?(n=[\"ha\",\"m\"],type=typeof i,\"string\"===type?n=[i]:\"boolean\"!==type&&(n=i),a=e>=1e6&&-1!==n.indexOf(\"km\")?L.GeometryUtil.formattedNumber(1e-6*e,o.km)+\" km²\":e>=1e4&&-1!==n.indexOf(\"ha\")?L.GeometryUtil.formattedNumber(1e-4*e,o.ha)+\" ha\":L.GeometryUtil.formattedNumber(e,o.m)+\" m²\"):a=(e/=.836127)>=3097600?L.GeometryUtil.formattedNumber(e/3097600,o.mi)+\" mi²\":e>=4840?L.GeometryUtil.formattedNumber(e/4840,o.ac)+\" acres\":L.GeometryUtil.formattedNumber(e,o.yd)+\" yd²\",a},readableDistance:function(e,i,o,a,n){var s;switch(n=L.Util.extend({},t,n),i?\"string\"==typeof i?i:\"metric\":o?\"feet\":a?\"nauticalMile\":\"yards\"){case\"metric\":s=e>1e3?L.GeometryUtil.formattedNumber(e/1e3,n.km)+\" km\":L.GeometryUtil.formattedNumber(e,n.m)+\" m\";break;case\"feet\":e*=3.28083,s=L.GeometryUtil.formattedNumber(e,n.ft)+\" ft\";break;case\"nauticalMile\":e*=.53996,s=L.GeometryUtil.formattedNumber(e/1e3,n.nm)+\" nm\";break;default:s=(e*=1.09361)>1760?L.GeometryUtil.formattedNumber(e/1760,n.mi)+\" miles\":L.GeometryUtil.formattedNumber(e,n.yd)+\" yd\"}return s},isVersion07x:function(){var t=L.version.split(\".\");return 0===parseInt(t[0],10)&&7===parseInt(t[1],10)}})}(),L.Util.extend(L.LineUtil,{segmentsIntersect:function(t,e,i,o){return this._checkCounterclockwise(t,i,o)!==this._checkCounterclockwise(e,i,o)&&this._checkCounterclockwise(t,e,i)!==this._checkCounterclockwise(t,e,o)},_checkCounterclockwise:function(t,e,i){return(i.y-t.y)*(e.x-t.x)>(e.y-t.y)*(i.x-t.x)}}),L.Polyline.include({intersects:function(){var t,e,i,o=this._getProjectedPoints(),a=o?o.length:0;if(this._tooFewPointsForIntersection())return!1;for(t=a-1;t>=3;t--)if(e=o[t-1],i=o[t],this._lineSegmentsIntersectsRange(e,i,t-2))return!0;return!1},newLatLngIntersects:function(t,e){return!!this._map&&this.newPointIntersects(this._map.latLngToLayerPoint(t),e)},newPointIntersects:function(t,e){var i=this._getProjectedPoints(),o=i?i.length:0,a=i?i[o-1]:null,n=o-2;return!this._tooFewPointsForIntersection(1)&&this._lineSegmentsIntersectsRange(a,t,n,e?1:0)},_tooFewPointsForIntersection:function(t){var e=this._getProjectedPoints(),i=e?e.length:0;return!e||(i+=t||0)<=3},_lineSegmentsIntersectsRange:function(t,e,i,o){var a,n,s=this._getProjectedPoints();o=o||0;for(var r=i;r>o;r--)if(a=s[r-1],n=s[r],L.LineUtil.segmentsIntersect(t,e,a,n))return!0;return!1},_getProjectedPoints:function(){if(!this._defaultShape)return this._originalPoints;for(var t=[],e=this._defaultShape(),i=0;i<e.length;i++)t.push(this._map.latLngToLayerPoint(e[i]));return t}}),L.Polygon.include({intersects:function(){var t,e,i,o,a=this._getProjectedPoints();return!this._tooFewPointsForIntersection()&&(!!L.Polyline.prototype.intersects.call(this)||(t=a.length,e=a[0],i=a[t-1],o=t-2,this._lineSegmentsIntersectsRange(i,e,o,1)))}}),L.Control.Draw=L.Control.extend({options:{position:\"topleft\",draw:{},edit:!1},initialize:function(t){if(L.version<\"0.7\")throw new Error(\"Leaflet.draw 0.2.3+ requires Leaflet 0.7.0+. Download latest from https://github.com/Leaflet/Leaflet/\");var e;L.Control.prototype.initialize.call(this,t),this._toolbars={},L.DrawToolbar&&this.options.draw&&(e=new L.DrawToolbar(this.options.draw),this._toolbars[L.DrawToolbar.TYPE]=e,this._toolbars[L.DrawToolbar.TYPE].on(\"enable\",this._toolbarEnabled,this)),L.EditToolbar&&this.options.edit&&(e=new L.EditToolbar(this.options.edit),this._toolbars[L.EditToolbar.TYPE]=e,this._toolbars[L.EditToolbar.TYPE].on(\"enable\",this._toolbarEnabled,this)),L.toolbar=this},onAdd:function(t){var e,i=L.DomUtil.create(\"div\",\"leaflet-draw\"),o=!1;for(var a in this._toolbars)this._toolbars.hasOwnProperty(a)&&(e=this._toolbars[a].addToolbar(t))&&(o||(L.DomUtil.hasClass(e,\"leaflet-draw-toolbar-top\")||L.DomUtil.addClass(e.childNodes[0],\"leaflet-draw-toolbar-top\"),o=!0),i.appendChild(e));return i},onRemove:function(){for(var t in this._toolbars)this._toolbars.hasOwnProperty(t)&&this._toolbars[t].removeToolbar()},setDrawingOptions:function(t){for(var e in this._toolbars)this._toolbars[e]instanceof L.DrawToolbar&&this._toolbars[e].setOptions(t)},_toolbarEnabled:function(t){var e=t.target;for(var i in this._toolbars)this._toolbars[i]!==e&&this._toolbars[i].disable()}}),L.Map.mergeOptions({drawControlTooltips:!0,drawControl:!1}),L.Map.addInitHook((function(){this.options.drawControl&&(this.drawControl=new L.Control.Draw,this.addControl(this.drawControl))})),L.Toolbar=L.Class.extend({initialize:function(t){L.setOptions(this,t),this._modes={},this._actionButtons=[],this._activeMode=null;var e=L.version.split(\".\");1===parseInt(e[0],10)&&parseInt(e[1],10)>=2?L.Toolbar.include(L.Evented.prototype):L.Toolbar.include(L.Mixin.Events)},enabled:function(){return null!==this._activeMode},disable:function(){this.enabled()&&this._activeMode.handler.disable()},addToolbar:function(t){var e,i=L.DomUtil.create(\"div\",\"leaflet-draw-section\"),o=0,a=this._toolbarClass||\"\",n=this.getModeHandlers(t);for(this._toolbarContainer=L.DomUtil.create(\"div\",\"leaflet-draw-toolbar leaflet-bar\"),this._map=t,e=0;e<n.length;e++)n[e].enabled&&this._initModeHandler(n[e].handler,this._toolbarContainer,o++,a,n[e].title);if(o)return this._lastButtonIndex=--o,this._actionsContainer=L.DomUtil.create(\"ul\",\"leaflet-draw-actions\"),i.appendChild(this._toolbarContainer),i.appendChild(this._actionsContainer),i},removeToolbar:function(){for(var t in this._modes)this._modes.hasOwnProperty(t)&&(this._disposeButton(this._modes[t].button,this._modes[t].handler.enable,this._modes[t].handler),this._modes[t].handler.disable(),this._modes[t].handler.off(\"enabled\",this._handlerActivated,this).off(\"disabled\",this._handlerDeactivated,this));this._modes={};for(var e=0,i=this._actionButtons.length;e<i;e++)this._disposeButton(this._actionButtons[e].button,this._actionButtons[e].callback,this);this._actionButtons=[],this._actionsContainer=null},_initModeHandler:function(t,e,i,o,a){var n=t.type;this._modes[n]={},this._modes[n].handler=t,this._modes[n].button=this._createButton({type:n,title:a,className:o+\"-\"+n,container:e,callback:this._modes[n].handler.enable,context:this._modes[n].handler}),this._modes[n].buttonIndex=i,this._modes[n].handler.on(\"enabled\",this._handlerActivated,this).on(\"disabled\",this._handlerDeactivated,this)},_detectIOS:function(){return/iPad|iPhone|iPod/.test(navigator.userAgent)&&!t.MSStream},_createButton:function(t){var e=L.DomUtil.create(\"a\",t.className||\"\",t.container),i=L.DomUtil.create(\"span\",\"sr-only\",t.container);e.href=\"#\",e.appendChild(i),t.title&&(e.title=t.title,i.innerHTML=t.title),t.text&&(e.innerHTML=t.text,i.innerHTML=t.text);var o=this._detectIOS()?\"touchstart\":\"click\";return L.DomEvent.on(e,\"click\",L.DomEvent.stopPropagation).on(e,\"mousedown\",L.DomEvent.stopPropagation).on(e,\"dblclick\",L.DomEvent.stopPropagation).on(e,\"touchstart\",L.DomEvent.stopPropagation).on(e,\"click\",L.DomEvent.preventDefault).on(e,o,t.callback,t.context),e},_disposeButton:function(t,e){var i=this._detectIOS()?\"touchstart\":\"click\";L.DomEvent.off(t,\"click\",L.DomEvent.stopPropagation).off(t,\"mousedown\",L.DomEvent.stopPropagation).off(t,\"dblclick\",L.DomEvent.stopPropagation).off(t,\"touchstart\",L.DomEvent.stopPropagation).off(t,\"click\",L.DomEvent.preventDefault).off(t,i,e)},_handlerActivated:function(t){this.disable(),this._activeMode=this._modes[t.handler],L.DomUtil.addClass(this._activeMode.button,\"leaflet-draw-toolbar-button-enabled\"),this._showActionsToolbar(),this.fire(\"enable\")},_handlerDeactivated:function(){this._hideActionsToolbar(),L.DomUtil.removeClass(this._activeMode.button,\"leaflet-draw-toolbar-button-enabled\"),this._activeMode=null,this.fire(\"disable\")},_createActions:function(t){var e,i,o,a,n=this._actionsContainer,s=this.getActions(t),r=s.length;for(i=0,o=this._actionButtons.length;i<o;i++)this._disposeButton(this._actionButtons[i].button,this._actionButtons[i].callback);for(this._actionButtons=[];n.firstChild;)n.removeChild(n.firstChild);for(var l=0;l<r;l++)\"enabled\"in s[l]&&!s[l].enabled||(e=L.DomUtil.create(\"li\",\"\",n),a=this._createButton({title:s[l].title,text:s[l].text,container:e,callback:s[l].callback,context:s[l].context}),this._actionButtons.push({button:a,callback:s[l].callback}))},_showActionsToolbar:function(){var t=this._activeMode.buttonIndex,e=this._lastButtonIndex,i=this._activeMode.button.offsetTop-1;this._createActions(this._activeMode.handler),this._actionsContainer.style.top=i+\"px\",0===t&&(L.DomUtil.addClass(this._toolbarContainer,\"leaflet-draw-toolbar-notop\"),L.DomUtil.addClass(this._actionsContainer,\"leaflet-draw-actions-top\")),t===e&&(L.DomUtil.addClass(this._toolbarContainer,\"leaflet-draw-toolbar-nobottom\"),L.DomUtil.addClass(this._actionsContainer,\"leaflet-draw-actions-bottom\")),this._actionsContainer.style.display=\"block\",this._map.fire(L.Draw.Event.TOOLBAROPENED)},_hideActionsToolbar:function(){this._actionsContainer.style.display=\"none\",L.DomUtil.removeClass(this._toolbarContainer,\"leaflet-draw-toolbar-notop\"),L.DomUtil.removeClass(this._toolbarContainer,\"leaflet-draw-toolbar-nobottom\"),L.DomUtil.removeClass(this._actionsContainer,\"leaflet-draw-actions-top\"),L.DomUtil.removeClass(this._actionsContainer,\"leaflet-draw-actions-bottom\"),this._map.fire(L.Draw.Event.TOOLBARCLOSED)}}),L.Draw=L.Draw||{},L.Draw.Tooltip=L.Class.extend({initialize:function(t){this._map=t,this._popupPane=t._panes.popupPane,this._visible=!1,this._container=t.options.drawControlTooltips?L.DomUtil.create(\"div\",\"leaflet-draw-tooltip\",this._popupPane):null,this._singleLineLabel=!1,this._map.on(\"mouseout\",this._onMouseOut,this)},dispose:function(){this._map.off(\"mouseout\",this._onMouseOut,this),this._container&&(this._popupPane.removeChild(this._container),this._container=null)},updateContent:function(t){return this._container?(t.subtext=t.subtext||\"\",0!==t.subtext.length||this._singleLineLabel?t.subtext.length>0&&this._singleLineLabel&&(L.DomUtil.removeClass(this._container,\"leaflet-draw-tooltip-single\"),this._singleLineLabel=!1):(L.DomUtil.addClass(this._container,\"leaflet-draw-tooltip-single\"),this._singleLineLabel=!0),this._container.innerHTML=(t.subtext.length>0?'<span class=\"leaflet-draw-tooltip-subtext\">'+t.subtext+\"</span><br />\":\"\")+\"<span>\"+t.text+\"</span>\",t.text||t.subtext?(this._visible=!0,this._container.style.visibility=\"inherit\"):(this._visible=!1,this._container.style.visibility=\"hidden\"),this):this},updatePosition:function(t){var e=this._map.latLngToLayerPoint(t),i=this._container;return this._container&&(this._visible&&(i.style.visibility=\"inherit\"),L.DomUtil.setPosition(i,e)),this},showAsError:function(){return this._container&&L.DomUtil.addClass(this._container,\"leaflet-error-draw-tooltip\"),this},removeError:function(){return this._container&&L.DomUtil.removeClass(this._container,\"leaflet-error-draw-tooltip\"),this},_onMouseOut:function(){this._container&&(this._container.style.visibility=\"hidden\")}}),L.DrawToolbar=L.Toolbar.extend({statics:{TYPE:\"draw\"},options:{polyline:{},polygon:{},rectangle:{},circle:{},marker:{},circlemarker:{}},initialize:function(t){for(var e in this.options)this.options.hasOwnProperty(e)&&t[e]&&(t[e]=L.extend({},this.options[e],t[e]));this._toolbarClass=\"leaflet-draw-draw\",L.Toolbar.prototype.initialize.call(this,t)},getModeHandlers:function(t){return[{enabled:this.options.polyline,handler:new L.Draw.Polyline(t,this.options.polyline),title:L.drawLocal.draw.toolbar.buttons.polyline},{enabled:this.options.polygon,handler:new L.Draw.Polygon(t,this.options.polygon),title:L.drawLocal.draw.toolbar.buttons.polygon},{enabled:this.options.rectangle,handler:new L.Draw.Rectangle(t,this.options.rectangle),title:L.drawLocal.draw.toolbar.buttons.rectangle},{enabled:this.options.circle,handler:new L.Draw.Circle(t,this.options.circle),title:L.drawLocal.draw.toolbar.buttons.circle},{enabled:this.options.marker,handler:new L.Draw.Marker(t,this.options.marker),title:L.drawLocal.draw.toolbar.buttons.marker},{enabled:this.options.circlemarker,handler:new L.Draw.CircleMarker(t,this.options.circlemarker),title:L.drawLocal.draw.toolbar.buttons.circlemarker}]},getActions:function(t){return[{enabled:t.completeShape,title:L.drawLocal.draw.toolbar.finish.title,text:L.drawLocal.draw.toolbar.finish.text,callback:t.completeShape,context:t},{enabled:t.deleteLastVertex,title:L.drawLocal.draw.toolbar.undo.title,text:L.drawLocal.draw.toolbar.undo.text,callback:t.deleteLastVertex,context:t},{title:L.drawLocal.draw.toolbar.actions.title,text:L.drawLocal.draw.toolbar.actions.text,callback:this.disable,context:this}]},setOptions:function(t){for(var e in L.setOptions(this,t),this._modes)this._modes.hasOwnProperty(e)&&t.hasOwnProperty(e)&&this._modes[e].handler.setOptions(t[e])}}),L.EditToolbar=L.Toolbar.extend({statics:{TYPE:\"edit\"},options:{edit:{selectedPathOptions:{dashArray:\"10, 10\",fill:!0,fillColor:\"#fe57a1\",fillOpacity:.1,maintainColor:!1}},remove:{},poly:null,featureGroup:null},initialize:function(t){t.edit&&(void 0===t.edit.selectedPathOptions&&(t.edit.selectedPathOptions=this.options.edit.selectedPathOptions),t.edit.selectedPathOptions=L.extend({},this.options.edit.selectedPathOptions,t.edit.selectedPathOptions)),t.remove&&(t.remove=L.extend({},this.options.remove,t.remove)),t.poly&&(t.poly=L.extend({},this.options.poly,t.poly)),this._toolbarClass=\"leaflet-draw-edit\",L.Toolbar.prototype.initialize.call(this,t),this._selectedFeatureCount=0},getModeHandlers:function(t){var e=this.options.featureGroup;return[{enabled:this.options.edit,handler:new L.EditToolbar.Edit(t,{featureGroup:e,selectedPathOptions:this.options.edit.selectedPathOptions,poly:this.options.poly}),title:L.drawLocal.edit.toolbar.buttons.edit},{enabled:this.options.remove,handler:new L.EditToolbar.Delete(t,{featureGroup:e}),title:L.drawLocal.edit.toolbar.buttons.remove}]},getActions:function(t){var e=[{title:L.drawLocal.edit.toolbar.actions.save.title,text:L.drawLocal.edit.toolbar.actions.save.text,callback:this._save,context:this},{title:L.drawLocal.edit.toolbar.actions.cancel.title,text:L.drawLocal.edit.toolbar.actions.cancel.text,callback:this.disable,context:this}];return t.removeAllLayers&&e.push({title:L.drawLocal.edit.toolbar.actions.clearAll.title,text:L.drawLocal.edit.toolbar.actions.clearAll.text,callback:this._clearAllLayers,context:this}),e},addToolbar:function(t){var e=L.Toolbar.prototype.addToolbar.call(this,t);return this._checkDisabled(),this.options.featureGroup.on(\"layeradd layerremove\",this._checkDisabled,this),e},removeToolbar:function(){this.options.featureGroup.off(\"layeradd layerremove\",this._checkDisabled,this),L.Toolbar.prototype.removeToolbar.call(this)},disable:function(){this.enabled()&&(this._activeMode.handler.revertLayers(),L.Toolbar.prototype.disable.call(this))},_save:function(){this._activeMode.handler.save(),this._activeMode&&this._activeMode.handler.disable()},_clearAllLayers:function(){this._activeMode.handler.removeAllLayers(),this._activeMode&&this._activeMode.handler.disable()},_checkDisabled:function(){var t,e=0!==this.options.featureGroup.getLayers().length;this.options.edit&&(t=this._modes[L.EditToolbar.Edit.TYPE].button,e?L.DomUtil.removeClass(t,\"leaflet-disabled\"):L.DomUtil.addClass(t,\"leaflet-disabled\"),t.setAttribute(\"title\",e?L.drawLocal.edit.toolbar.buttons.edit:L.drawLocal.edit.toolbar.buttons.editDisabled)),this.options.remove&&(t=this._modes[L.EditToolbar.Delete.TYPE].button,e?L.DomUtil.removeClass(t,\"leaflet-disabled\"):L.DomUtil.addClass(t,\"leaflet-disabled\"),t.setAttribute(\"title\",e?L.drawLocal.edit.toolbar.buttons.remove:L.drawLocal.edit.toolbar.buttons.removeDisabled))}}),L.EditToolbar.Edit=L.Handler.extend({statics:{TYPE:\"edit\"},initialize:function(t,e){if(L.Handler.prototype.initialize.call(this,t),L.setOptions(this,e),this._featureGroup=e.featureGroup,!(this._featureGroup instanceof L.FeatureGroup))throw new Error(\"options.featureGroup must be a L.FeatureGroup\");this._uneditedLayerProps={},this.type=L.EditToolbar.Edit.TYPE;var i=L.version.split(\".\");1===parseInt(i[0],10)&&parseInt(i[1],10)>=2?L.EditToolbar.Edit.include(L.Evented.prototype):L.EditToolbar.Edit.include(L.Mixin.Events)},enable:function(){!this._enabled&&this._hasAvailableLayers()&&(this.fire(\"enabled\",{handler:this.type}),this._map.fire(L.Draw.Event.EDITSTART,{handler:this.type}),L.Handler.prototype.enable.call(this),this._featureGroup.on(\"layeradd\",this._enableLayerEdit,this).on(\"layerremove\",this._disableLayerEdit,this))},disable:function(){this._enabled&&(this._featureGroup.off(\"layeradd\",this._enableLayerEdit,this).off(\"layerremove\",this._disableLayerEdit,this),L.Handler.prototype.disable.call(this),this._map.fire(L.Draw.Event.EDITSTOP,{handler:this.type}),this.fire(\"disabled\",{handler:this.type}))},addHooks:function(){var t=this._map;t&&(t.getContainer().focus(),this._featureGroup.eachLayer(this._enableLayerEdit,this),this._tooltip=new L.Draw.Tooltip(this._map),this._tooltip.updateContent({text:L.drawLocal.edit.handlers.edit.tooltip.text,subtext:L.drawLocal.edit.handlers.edit.tooltip.subtext}),t._editTooltip=this._tooltip,this._updateTooltip(),this._map.on(\"mousemove\",this._onMouseMove,this).on(\"touchmove\",this._onMouseMove,this).on(\"MSPointerMove\",this._onMouseMove,this).on(L.Draw.Event.EDITVERTEX,this._updateTooltip,this))},removeHooks:function(){this._map&&(this._featureGroup.eachLayer(this._disableLayerEdit,this),this._uneditedLayerProps={},this._tooltip.dispose(),this._tooltip=null,this._map.off(\"mousemove\",this._onMouseMove,this).off(\"touchmove\",this._onMouseMove,this).off(\"MSPointerMove\",this._onMouseMove,this).off(L.Draw.Event.EDITVERTEX,this._updateTooltip,this))},revertLayers:function(){this._featureGroup.eachLayer((function(t){this._revertLayer(t)}),this)},save:function(){var t=new L.LayerGroup;this._featureGroup.eachLayer((function(e){e.edited&&(t.addLayer(e),e.edited=!1)})),this._map.fire(L.Draw.Event.EDITED,{layers:t})},_backupLayer:function(t){var e=L.Util.stamp(t);this._uneditedLayerProps[e]||(t instanceof L.Polyline||t instanceof L.Polygon||t instanceof L.Rectangle?this._uneditedLayerProps[e]={latlngs:L.LatLngUtil.cloneLatLngs(t.getLatLngs())}:t instanceof L.Circle?this._uneditedLayerProps[e]={latlng:L.LatLngUtil.cloneLatLng(t.getLatLng()),radius:t.getRadius()}:(t instanceof L.Marker||t instanceof L.CircleMarker)&&(this._uneditedLayerProps[e]={latlng:L.LatLngUtil.cloneLatLng(t.getLatLng())}))},_getTooltipText:function(){return{text:L.drawLocal.edit.handlers.edit.tooltip.text,subtext:L.drawLocal.edit.handlers.edit.tooltip.subtext}},_updateTooltip:function(){this._tooltip.updateContent(this._getTooltipText())},_revertLayer:function(t){var e=L.Util.stamp(t);t.edited=!1,this._uneditedLayerProps.hasOwnProperty(e)&&(t instanceof L.Polyline||t instanceof L.Polygon||t instanceof L.Rectangle?t.setLatLngs(this._uneditedLayerProps[e].latlngs):t instanceof L.Circle?(t.setLatLng(this._uneditedLayerProps[e].latlng),t.setRadius(this._uneditedLayerProps[e].radius)):(t instanceof L.Marker||t instanceof L.CircleMarker)&&t.setLatLng(this._uneditedLayerProps[e].latlng),t.fire(\"revert-edited\",{layer:t}))},_enableLayerEdit:function(t){var e,i,o=t.layer||t.target||t;this._backupLayer(o),this.options.poly&&(i=L.Util.extend({},this.options.poly),o.options.poly=i),this.options.selectedPathOptions&&((e=L.Util.extend({},this.options.selectedPathOptions)).maintainColor&&(e.color=o.options.color,e.fillColor=o.options.fillColor),o.options.original=L.extend({},o.options),o.options.editing=e),o instanceof L.Marker?(o.editing&&o.editing.enable(),o.dragging.enable(),o.on(\"dragend\",this._onMarkerDragEnd).on(\"touchmove\",this._onTouchMove,this).on(\"MSPointerMove\",this._onTouchMove,this).on(\"touchend\",this._onMarkerDragEnd,this).on(\"MSPointerUp\",this._onMarkerDragEnd,this)):o.editing.enable()},_disableLayerEdit:function(t){var e=t.layer||t.target||t;e.edited=!1,e.editing&&e.editing.disable(),delete e.options.editing,delete e.options.original,this._selectedPathOptions&&(e instanceof L.Marker?this._toggleMarkerHighlight(e):(e.setStyle(e.options.previousOptions),delete e.options.previousOptions)),e instanceof L.Marker?(e.dragging.disable(),e.off(\"dragend\",this._onMarkerDragEnd,this).off(\"touchmove\",this._onTouchMove,this).off(\"MSPointerMove\",this._onTouchMove,this).off(\"touchend\",this._onMarkerDragEnd,this).off(\"MSPointerUp\",this._onMarkerDragEnd,this)):e.editing.disable()},_onMouseMove:function(t){this._tooltip.updatePosition(t.latlng)},_onMarkerDragEnd:function(t){var e=t.target;e.edited=!0,this._map.fire(L.Draw.Event.EDITMOVE,{layer:e})},_onTouchMove:function(t){var e=t.originalEvent.changedTouches[0],i=this._map.mouseEventToLayerPoint(e),o=this._map.layerPointToLatLng(i);t.target.setLatLng(o)},_hasAvailableLayers:function(){return 0!==this._featureGroup.getLayers().length}}),L.EditToolbar.Delete=L.Handler.extend({statics:{TYPE:\"remove\"},initialize:function(t,e){if(L.Handler.prototype.initialize.call(this,t),L.Util.setOptions(this,e),this._deletableLayers=this.options.featureGroup,!(this._deletableLayers instanceof L.FeatureGroup))throw new Error(\"options.featureGroup must be a L.FeatureGroup\");this.type=L.EditToolbar.Delete.TYPE;var i=L.version.split(\".\");1===parseInt(i[0],10)&&parseInt(i[1],10)>=2?L.EditToolbar.Delete.include(L.Evented.prototype):L.EditToolbar.Delete.include(L.Mixin.Events)},enable:function(){!this._enabled&&this._hasAvailableLayers()&&(this.fire(\"enabled\",{handler:this.type}),this._map.fire(L.Draw.Event.DELETESTART,{handler:this.type}),L.Handler.prototype.enable.call(this),this._deletableLayers.on(\"layeradd\",this._enableLayerDelete,this).on(\"layerremove\",this._disableLayerDelete,this))},disable:function(){this._enabled&&(this._deletableLayers.off(\"layeradd\",this._enableLayerDelete,this).off(\"layerremove\",this._disableLayerDelete,this),L.Handler.prototype.disable.call(this),this._map.fire(L.Draw.Event.DELETESTOP,{handler:this.type}),this.fire(\"disabled\",{handler:this.type}))},addHooks:function(){var t=this._map;t&&(t.getContainer().focus(),this._deletableLayers.eachLayer(this._enableLayerDelete,this),this._deletedLayers=new L.LayerGroup,this._tooltip=new L.Draw.Tooltip(this._map),this._tooltip.updateContent({text:L.drawLocal.edit.handlers.remove.tooltip.text}),this._map.on(\"mousemove\",this._onMouseMove,this))},removeHooks:function(){this._map&&(this._deletableLayers.eachLayer(this._disableLayerDelete,this),this._deletedLayers=null,this._tooltip.dispose(),this._tooltip=null,this._map.off(\"mousemove\",this._onMouseMove,this))},revertLayers:function(){this._deletedLayers.eachLayer((function(t){this._deletableLayers.addLayer(t),t.fire(\"revert-deleted\",{layer:t})}),this)},save:function(){this._map.fire(L.Draw.Event.DELETED,{layers:this._deletedLayers})},removeAllLayers:function(){this._deletableLayers.eachLayer((function(t){this._removeLayer({layer:t})}),this),this.save()},_enableLayerDelete:function(t){(t.layer||t.target||t).on(\"click\",this._removeLayer,this)},_disableLayerDelete:function(t){var e=t.layer||t.target||t;e.off(\"click\",this._removeLayer,this),this._deletedLayers.removeLayer(e)},_removeLayer:function(t){var e=t.layer||t.target||t;this._deletableLayers.removeLayer(e),this._deletedLayers.addLayer(e),e.fire(\"deleted\")},_onMouseMove:function(t){this._tooltip.updatePosition(t.latlng)},_hasAvailableLayers:function(){return 0!==this._deletableLayers.getLayers().length}});\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.bca0f55d.js",
    "content": "import{A as o}from\"./main-a0d7432d.js\";const a=()=>import(\"./c.f3416703.js\"),i=(i,l,m)=>new Promise((n=>{const r=l.cancel,s=l.confirm;o(i,\"show-dialog\",{dialogTag:\"dialog-box\",dialogImport:a,dialogParams:{...l,...m,cancel:()=>{n(!(null==m||!m.prompt)&&null),r&&r()},confirm:o=>{n(null==m||!m.prompt||o),s&&s(o)}}})})),l=(o,a)=>i(o,a),m=(o,a)=>i(o,a,{confirmation:!0}),n=(o,a)=>i(o,a,{prompt:!0});export{l as a,n as b,m as s};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.c176780d.js",
    "content": "import{u as e,v as t,G as i,M as c,_ as o,i as r,e as n,t as a,B as d,$ as s,o as p,I as l,y as m,p as h,q as u,r as f,n as b,a as g,h as k,J as x,K as _,g as y,w as v,R as T,j as w,A as E}from\"./main-a0d7432d.js\";import{c as O,o as I}from\"./c.936d9772.js\";import{o as C}from\"./c.8e28b461.js\";var A,R,S={ANCHOR:\"mdc-menu-surface--anchor\",ANIMATING_CLOSED:\"mdc-menu-surface--animating-closed\",ANIMATING_OPEN:\"mdc-menu-surface--animating-open\",FIXED:\"mdc-menu-surface--fixed\",IS_OPEN_BELOW:\"mdc-menu-surface--is-open-below\",OPEN:\"mdc-menu-surface--open\",ROOT:\"mdc-menu-surface\"},F={CLOSED_EVENT:\"MDCMenuSurface:closed\",CLOSING_EVENT:\"MDCMenuSurface:closing\",OPENED_EVENT:\"MDCMenuSurface:opened\",FOCUSABLE_ELEMENTS:[\"button:not(:disabled)\",'[href]:not([aria-disabled=\"true\"])',\"input:not(:disabled)\",\"select:not(:disabled)\",\"textarea:not(:disabled)\",'[tabindex]:not([tabindex=\"-1\"]):not([aria-disabled=\"true\"])'].join(\", \")},B={TRANSITION_OPEN_DURATION:120,TRANSITION_CLOSE_DURATION:75,MARGIN_TO_EDGE:32,ANCHOR_TO_MENU_SURFACE_WIDTH_RATIO:.67,TOUCH_EVENT_WAIT_MS:30};!function(e){e[e.BOTTOM=1]=\"BOTTOM\",e[e.CENTER=2]=\"CENTER\",e[e.RIGHT=4]=\"RIGHT\",e[e.FLIP_RTL=8]=\"FLIP_RTL\"}(A||(A={})),function(e){e[e.TOP_LEFT=0]=\"TOP_LEFT\",e[e.TOP_RIGHT=4]=\"TOP_RIGHT\",e[e.BOTTOM_LEFT=1]=\"BOTTOM_LEFT\",e[e.BOTTOM_RIGHT=5]=\"BOTTOM_RIGHT\",e[e.TOP_START=8]=\"TOP_START\",e[e.TOP_END=12]=\"TOP_END\",e[e.BOTTOM_START=9]=\"BOTTOM_START\",e[e.BOTTOM_END=13]=\"BOTTOM_END\"}(R||(R={}));var M=function(c){function o(e){var i=c.call(this,t(t({},o.defaultAdapter),e))||this;return i.isSurfaceOpen=!1,i.isQuickOpen=!1,i.isHoistedElement=!1,i.isFixedPosition=!1,i.isHorizontallyCenteredOnViewport=!1,i.maxHeight=0,i.openBottomBias=0,i.openAnimationEndTimerId=0,i.closeAnimationEndTimerId=0,i.animationRequestId=0,i.anchorCorner=R.TOP_START,i.originCorner=R.TOP_START,i.anchorMargin={top:0,right:0,bottom:0,left:0},i.position={x:0,y:0},i}return e(o,c),Object.defineProperty(o,\"cssClasses\",{get:function(){return S},enumerable:!1,configurable:!0}),Object.defineProperty(o,\"strings\",{get:function(){return F},enumerable:!1,configurable:!0}),Object.defineProperty(o,\"numbers\",{get:function(){return B},enumerable:!1,configurable:!0}),Object.defineProperty(o,\"Corner\",{get:function(){return R},enumerable:!1,configurable:!0}),Object.defineProperty(o,\"defaultAdapter\",{get:function(){return{addClass:function(){},removeClass:function(){},hasClass:function(){return!1},hasAnchor:function(){return!1},isElementInContainer:function(){return!1},isFocused:function(){return!1},isRtl:function(){return!1},getInnerDimensions:function(){return{height:0,width:0}},getAnchorDimensions:function(){return null},getWindowDimensions:function(){return{height:0,width:0}},getBodyDimensions:function(){return{height:0,width:0}},getWindowScroll:function(){return{x:0,y:0}},setPosition:function(){},setMaxHeight:function(){},setTransformOrigin:function(){},saveFocus:function(){},restoreFocus:function(){},notifyClose:function(){},notifyOpen:function(){},notifyClosing:function(){}}},enumerable:!1,configurable:!0}),o.prototype.init=function(){var e=o.cssClasses,t=e.ROOT,i=e.OPEN;if(!this.adapter.hasClass(t))throw new Error(t+\" class required in root element.\");this.adapter.hasClass(i)&&(this.isSurfaceOpen=!0)},o.prototype.destroy=function(){clearTimeout(this.openAnimationEndTimerId),clearTimeout(this.closeAnimationEndTimerId),cancelAnimationFrame(this.animationRequestId)},o.prototype.setAnchorCorner=function(e){this.anchorCorner=e},o.prototype.flipCornerHorizontally=function(){this.originCorner=this.originCorner^A.RIGHT},o.prototype.setAnchorMargin=function(e){this.anchorMargin.top=e.top||0,this.anchorMargin.right=e.right||0,this.anchorMargin.bottom=e.bottom||0,this.anchorMargin.left=e.left||0},o.prototype.setIsHoisted=function(e){this.isHoistedElement=e},o.prototype.setFixedPosition=function(e){this.isFixedPosition=e},o.prototype.isFixed=function(){return this.isFixedPosition},o.prototype.setAbsolutePosition=function(e,t){this.position.x=this.isFinite(e)?e:0,this.position.y=this.isFinite(t)?t:0},o.prototype.setIsHorizontallyCenteredOnViewport=function(e){this.isHorizontallyCenteredOnViewport=e},o.prototype.setQuickOpen=function(e){this.isQuickOpen=e},o.prototype.setMaxHeight=function(e){this.maxHeight=e},o.prototype.setOpenBottomBias=function(e){this.openBottomBias=e},o.prototype.isOpen=function(){return this.isSurfaceOpen},o.prototype.open=function(){var e=this;this.isSurfaceOpen||(this.adapter.saveFocus(),this.isQuickOpen?(this.isSurfaceOpen=!0,this.adapter.addClass(o.cssClasses.OPEN),this.dimensions=this.adapter.getInnerDimensions(),this.autoposition(),this.adapter.notifyOpen()):(this.adapter.addClass(o.cssClasses.ANIMATING_OPEN),this.animationRequestId=requestAnimationFrame((function(){e.dimensions=e.adapter.getInnerDimensions(),e.autoposition(),e.adapter.addClass(o.cssClasses.OPEN),e.openAnimationEndTimerId=setTimeout((function(){e.openAnimationEndTimerId=0,e.adapter.removeClass(o.cssClasses.ANIMATING_OPEN),e.adapter.notifyOpen()}),B.TRANSITION_OPEN_DURATION)})),this.isSurfaceOpen=!0))},o.prototype.close=function(e){var t=this;if(void 0===e&&(e=!1),this.isSurfaceOpen){if(this.adapter.notifyClosing(),this.isQuickOpen)return this.isSurfaceOpen=!1,e||this.maybeRestoreFocus(),this.adapter.removeClass(o.cssClasses.OPEN),this.adapter.removeClass(o.cssClasses.IS_OPEN_BELOW),void this.adapter.notifyClose();this.adapter.addClass(o.cssClasses.ANIMATING_CLOSED),requestAnimationFrame((function(){t.adapter.removeClass(o.cssClasses.OPEN),t.adapter.removeClass(o.cssClasses.IS_OPEN_BELOW),t.closeAnimationEndTimerId=setTimeout((function(){t.closeAnimationEndTimerId=0,t.adapter.removeClass(o.cssClasses.ANIMATING_CLOSED),t.adapter.notifyClose()}),B.TRANSITION_CLOSE_DURATION)})),this.isSurfaceOpen=!1,e||this.maybeRestoreFocus()}},o.prototype.handleBodyClick=function(e){var t=e.target;this.adapter.isElementInContainer(t)||this.close()},o.prototype.handleKeydown=function(e){var t=e.keyCode;(\"Escape\"===e.key||27===t)&&this.close()},o.prototype.autoposition=function(){var e;this.measurements=this.getAutoLayoutmeasurements();var t=this.getoriginCorner(),i=this.getMenuSurfaceMaxHeight(t),c=this.hasBit(t,A.BOTTOM)?\"bottom\":\"top\",r=this.hasBit(t,A.RIGHT)?\"right\":\"left\",n=this.getHorizontalOriginOffset(t),a=this.getVerticalOriginOffset(t),d=this.measurements,s=d.anchorSize,p=d.surfaceSize,l=((e={})[r]=n,e[c]=a,e);s.width/p.width>B.ANCHOR_TO_MENU_SURFACE_WIDTH_RATIO&&(r=\"center\"),(this.isHoistedElement||this.isFixedPosition)&&this.adjustPositionForHoistedElement(l),this.adapter.setTransformOrigin(r+\" \"+c),this.adapter.setPosition(l),this.adapter.setMaxHeight(i?i+\"px\":\"\"),this.hasBit(t,A.BOTTOM)||this.adapter.addClass(o.cssClasses.IS_OPEN_BELOW)},o.prototype.getAutoLayoutmeasurements=function(){var e=this.adapter.getAnchorDimensions(),t=this.adapter.getBodyDimensions(),i=this.adapter.getWindowDimensions(),c=this.adapter.getWindowScroll();return e||(e={top:this.position.y,right:this.position.x,bottom:this.position.y,left:this.position.x,width:0,height:0}),{anchorSize:e,bodySize:t,surfaceSize:this.dimensions,viewportDistance:{top:e.top,right:i.width-e.right,bottom:i.height-e.bottom,left:e.left},viewportSize:i,windowScroll:c}},o.prototype.getoriginCorner=function(){var e,t,i=this.originCorner,c=this.measurements,r=c.viewportDistance,n=c.anchorSize,a=c.surfaceSize,d=o.numbers.MARGIN_TO_EDGE;this.hasBit(this.anchorCorner,A.BOTTOM)?(e=r.top-d+this.anchorMargin.bottom,t=r.bottom-d-this.anchorMargin.bottom):(e=r.top-d+this.anchorMargin.top,t=r.bottom-d+n.height-this.anchorMargin.top),!(t-a.height>0)&&e>t+this.openBottomBias&&(i=this.setBit(i,A.BOTTOM));var s,p,l=this.adapter.isRtl(),m=this.hasBit(this.anchorCorner,A.FLIP_RTL),h=this.hasBit(this.anchorCorner,A.RIGHT)||this.hasBit(i,A.RIGHT),u=!1;(u=l&&m?!h:h)?(s=r.left+n.width+this.anchorMargin.right,p=r.right-this.anchorMargin.right):(s=r.left+this.anchorMargin.left,p=r.right+n.width-this.anchorMargin.left);var f=s-a.width>0,b=p-a.width>0,g=this.hasBit(i,A.FLIP_RTL)&&this.hasBit(i,A.RIGHT);return b&&g&&l||!f&&g?i=this.unsetBit(i,A.RIGHT):(f&&u&&l||f&&!u&&h||!b&&s>=p)&&(i=this.setBit(i,A.RIGHT)),i},o.prototype.getMenuSurfaceMaxHeight=function(e){if(this.maxHeight>0)return this.maxHeight;var t=this.measurements.viewportDistance,i=0,c=this.hasBit(e,A.BOTTOM),r=this.hasBit(this.anchorCorner,A.BOTTOM),n=o.numbers.MARGIN_TO_EDGE;return c?(i=t.top+this.anchorMargin.top-n,r||(i+=this.measurements.anchorSize.height)):(i=t.bottom-this.anchorMargin.bottom+this.measurements.anchorSize.height-n,r&&(i-=this.measurements.anchorSize.height)),i},o.prototype.getHorizontalOriginOffset=function(e){var t=this.measurements.anchorSize,i=this.hasBit(e,A.RIGHT),c=this.hasBit(this.anchorCorner,A.RIGHT);if(i){var o=c?t.width-this.anchorMargin.left:this.anchorMargin.right;return this.isHoistedElement||this.isFixedPosition?o-(this.measurements.viewportSize.width-this.measurements.bodySize.width):o}return c?t.width-this.anchorMargin.right:this.anchorMargin.left},o.prototype.getVerticalOriginOffset=function(e){var t=this.measurements.anchorSize,i=this.hasBit(e,A.BOTTOM),c=this.hasBit(this.anchorCorner,A.BOTTOM);return i?c?t.height-this.anchorMargin.top:-this.anchorMargin.bottom:c?t.height+this.anchorMargin.bottom:this.anchorMargin.top},o.prototype.adjustPositionForHoistedElement=function(e){var t,c,o=this.measurements,r=o.windowScroll,n=o.viewportDistance,a=o.surfaceSize,d=o.viewportSize,s=Object.keys(e);try{for(var p=i(s),l=p.next();!l.done;l=p.next()){var m=l.value,h=e[m]||0;!this.isHorizontallyCenteredOnViewport||\"left\"!==m&&\"right\"!==m?(h+=n[m],this.isFixedPosition||(\"top\"===m?h+=r.y:\"bottom\"===m?h-=r.y:\"left\"===m?h+=r.x:h-=r.x),e[m]=h):e[m]=(d.width-a.width)/2}}catch(e){t={error:e}}finally{try{l&&!l.done&&(c=p.return)&&c.call(p)}finally{if(t)throw t.error}}},o.prototype.maybeRestoreFocus=function(){var e=this,t=this.adapter.isFocused(),i=document.activeElement&&this.adapter.isElementInContainer(document.activeElement);(t||i)&&setTimeout((function(){e.adapter.restoreFocus()}),B.TOUCH_EVENT_WAIT_MS)},o.prototype.hasBit=function(e,t){return Boolean(e&t)},o.prototype.setBit=function(e,t){return e|t},o.prototype.unsetBit=function(e,t){return e^t},o.prototype.isFinite=function(e){return\"number\"==typeof e&&isFinite(e)},o}(c),z=M;const L={TOP_LEFT:R.TOP_LEFT,TOP_RIGHT:R.TOP_RIGHT,BOTTOM_LEFT:R.BOTTOM_LEFT,BOTTOM_RIGHT:R.BOTTOM_RIGHT,TOP_START:R.TOP_START,TOP_END:R.TOP_END,BOTTOM_START:R.BOTTOM_START,BOTTOM_END:R.BOTTOM_END};class N extends d{constructor(){super(...arguments),this.mdcFoundationClass=z,this.absolute=!1,this.fullwidth=!1,this.fixed=!1,this.x=null,this.y=null,this.quick=!1,this.open=!1,this.stayOpenOnBodyClick=!1,this.bitwiseCorner=R.TOP_START,this.previousMenuCorner=null,this.menuCorner=\"START\",this.corner=\"TOP_START\",this.styleTop=\"\",this.styleLeft=\"\",this.styleRight=\"\",this.styleBottom=\"\",this.styleMaxHeight=\"\",this.styleTransformOrigin=\"\",this.anchor=null,this.previouslyFocused=null,this.previousAnchor=null,this.onBodyClickBound=()=>{}}render(){const e={\"mdc-menu-surface--fixed\":this.fixed,\"mdc-menu-surface--fullwidth\":this.fullwidth},t={top:this.styleTop,left:this.styleLeft,right:this.styleRight,bottom:this.styleBottom,\"max-height\":this.styleMaxHeight,\"transform-origin\":this.styleTransformOrigin};return s`\n      <div\n          class=\"mdc-menu-surface ${p(e)}\"\n          style=\"${l(t)}\"\n          @keydown=${this.onKeydown}\n          @opened=${this.registerBodyClick}\n          @closed=${this.deregisterBodyClick}>\n        <slot></slot>\n      </div>`}createAdapter(){return Object.assign(Object.assign({},m(this.mdcRoot)),{hasAnchor:()=>!!this.anchor,notifyClose:()=>{const e=new CustomEvent(\"closed\",{bubbles:!0,composed:!0});this.open=!1,this.mdcRoot.dispatchEvent(e)},notifyClosing:()=>{const e=new CustomEvent(\"closing\",{bubbles:!0,composed:!0});this.mdcRoot.dispatchEvent(e)},notifyOpen:()=>{const e=new CustomEvent(\"opened\",{bubbles:!0,composed:!0});this.open=!0,this.mdcRoot.dispatchEvent(e)},isElementInContainer:()=>!1,isRtl:()=>!!this.mdcRoot&&\"rtl\"===getComputedStyle(this.mdcRoot).direction,setTransformOrigin:e=>{this.mdcRoot&&(this.styleTransformOrigin=e)},isFocused:()=>h(this),saveFocus:()=>{const e=u(),t=e.length;t||(this.previouslyFocused=null),this.previouslyFocused=e[t-1]},restoreFocus:()=>{this.previouslyFocused&&\"focus\"in this.previouslyFocused&&this.previouslyFocused.focus()},getInnerDimensions:()=>{const e=this.mdcRoot;return e?{width:e.offsetWidth,height:e.offsetHeight}:{width:0,height:0}},getAnchorDimensions:()=>{const e=this.anchor;return e?e.getBoundingClientRect():null},getBodyDimensions:()=>({width:document.body.clientWidth,height:document.body.clientHeight}),getWindowDimensions:()=>({width:window.innerWidth,height:window.innerHeight}),getWindowScroll:()=>({x:window.pageXOffset,y:window.pageYOffset}),setPosition:e=>{this.mdcRoot&&(this.styleLeft=\"left\"in e?`${e.left}px`:\"\",this.styleRight=\"right\"in e?`${e.right}px`:\"\",this.styleTop=\"top\"in e?`${e.top}px`:\"\",this.styleBottom=\"bottom\"in e?`${e.bottom}px`:\"\")},setMaxHeight:async e=>{this.mdcRoot&&(this.styleMaxHeight=e,await this.updateComplete,this.styleMaxHeight=`var(--mdc-menu-max-height, ${e})`)}})}onKeydown(e){this.mdcFoundation&&this.mdcFoundation.handleKeydown(e)}onBodyClick(e){if(this.stayOpenOnBodyClick)return;-1===e.composedPath().indexOf(this)&&this.close()}registerBodyClick(){this.onBodyClickBound=this.onBodyClick.bind(this),document.body.addEventListener(\"click\",this.onBodyClickBound,{passive:!0,capture:!0})}deregisterBodyClick(){document.body.removeEventListener(\"click\",this.onBodyClickBound,{capture:!0})}close(){this.open=!1}show(){this.open=!0}}o([r(\".mdc-menu-surface\")],N.prototype,\"mdcRoot\",void 0),o([r(\"slot\")],N.prototype,\"slotElement\",void 0),o([n({type:Boolean}),C((function(e){this.mdcFoundation&&!this.fixed&&this.mdcFoundation.setIsHoisted(e)}))],N.prototype,\"absolute\",void 0),o([n({type:Boolean})],N.prototype,\"fullwidth\",void 0),o([n({type:Boolean}),C((function(e){this.mdcFoundation&&!this.absolute&&this.mdcFoundation.setFixedPosition(e)}))],N.prototype,\"fixed\",void 0),o([n({type:Number}),C((function(e){this.mdcFoundation&&null!==this.y&&null!==e&&(this.mdcFoundation.setAbsolutePosition(e,this.y),this.mdcFoundation.setAnchorMargin({left:e,top:this.y,right:-e,bottom:this.y}))}))],N.prototype,\"x\",void 0),o([n({type:Number}),C((function(e){this.mdcFoundation&&null!==this.x&&null!==e&&(this.mdcFoundation.setAbsolutePosition(this.x,e),this.mdcFoundation.setAnchorMargin({left:this.x,top:e,right:-this.x,bottom:e}))}))],N.prototype,\"y\",void 0),o([n({type:Boolean}),C((function(e){this.mdcFoundation&&this.mdcFoundation.setQuickOpen(e)}))],N.prototype,\"quick\",void 0),o([n({type:Boolean,reflect:!0}),C((function(e,t){this.mdcFoundation&&(e?this.mdcFoundation.open():void 0!==t&&this.mdcFoundation.close())}))],N.prototype,\"open\",void 0),o([n({type:Boolean})],N.prototype,\"stayOpenOnBodyClick\",void 0),o([a(),C((function(e){this.mdcFoundation&&this.mdcFoundation.setAnchorCorner(e)}))],N.prototype,\"bitwiseCorner\",void 0),o([n({type:String}),C((function(e){if(this.mdcFoundation){const t=\"START\"===e||\"END\"===e,i=null===this.previousMenuCorner,c=!i&&e!==this.previousMenuCorner,o=i&&\"END\"===e;t&&(c||o)&&(this.bitwiseCorner=this.bitwiseCorner^A.RIGHT,this.mdcFoundation.flipCornerHorizontally(),this.previousMenuCorner=e)}}))],N.prototype,\"menuCorner\",void 0),o([n({type:String}),C((function(e){if(this.mdcFoundation&&e){let t=L[e];\"END\"===this.menuCorner&&(t^=A.RIGHT),this.bitwiseCorner=t}}))],N.prototype,\"corner\",void 0),o([a()],N.prototype,\"styleTop\",void 0),o([a()],N.prototype,\"styleLeft\",void 0),o([a()],N.prototype,\"styleRight\",void 0),o([a()],N.prototype,\"styleBottom\",void 0),o([a()],N.prototype,\"styleMaxHeight\",void 0),o([a()],N.prototype,\"styleTransformOrigin\",void 0);const D=f`.mdc-menu-surface{display:none;position:absolute;box-sizing:border-box;max-width:calc(100vw - 32px);max-width:var(--mdc-menu-max-width, calc(100vw - 32px));max-height:calc(100vh - 32px);max-height:var(--mdc-menu-max-height, calc(100vh - 32px));margin:0;padding:0;transform:scale(1);transform-origin:top left;opacity:0;overflow:auto;will-change:transform,opacity;z-index:8;transition:opacity .03s linear,transform .12s cubic-bezier(0, 0, 0.2, 1),height 250ms cubic-bezier(0, 0, 0.2, 1);box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12);background-color:#fff;background-color:var(--mdc-theme-surface, #fff);color:#000;color:var(--mdc-theme-on-surface, #000);border-radius:4px;border-radius:var(--mdc-shape-medium, 4px);transform-origin-left:top left;transform-origin-right:top right}.mdc-menu-surface:focus{outline:none}.mdc-menu-surface--animating-open{display:inline-block;transform:scale(0.8);opacity:0}.mdc-menu-surface--open{display:inline-block;transform:scale(1);opacity:1}.mdc-menu-surface--animating-closed{display:inline-block;opacity:0;transition:opacity .075s linear}[dir=rtl] .mdc-menu-surface,.mdc-menu-surface[dir=rtl]{transform-origin-left:top right;transform-origin-right:top left}.mdc-menu-surface--anchor{position:relative;overflow:visible}.mdc-menu-surface--fixed{position:fixed}.mdc-menu-surface--fullwidth{width:100%}:host(:not([open])){display:none}.mdc-menu-surface{z-index:8;z-index:var(--mdc-menu-z-index, 8);min-width:112px;min-width:var(--mdc-menu-min-width, 112px)}`;let H=class extends N{};H.styles=[D],H=o([b(\"mwc-menu-surface\")],H);var P,$={MENU_SELECTED_LIST_ITEM:\"mdc-menu-item--selected\",MENU_SELECTION_GROUP:\"mdc-menu__selection-group\",ROOT:\"mdc-menu\"},G={ARIA_CHECKED_ATTR:\"aria-checked\",ARIA_DISABLED_ATTR:\"aria-disabled\",CHECKBOX_SELECTOR:'input[type=\"checkbox\"]',LIST_SELECTOR:\".mdc-list,.mdc-deprecated-list\",SELECTED_EVENT:\"MDCMenu:selected\",SKIP_RESTORE_FOCUS:\"data-menu-item-skip-restore-focus\"},U={FOCUS_ROOT_INDEX:-1};!function(e){e[e.NONE=0]=\"NONE\",e[e.LIST_ROOT=1]=\"LIST_ROOT\",e[e.FIRST_ITEM=2]=\"FIRST_ITEM\",e[e.LAST_ITEM=3]=\"LAST_ITEM\"}(P||(P={}));var j=function(i){function c(e){var o=i.call(this,t(t({},c.defaultAdapter),e))||this;return o.closeAnimationEndTimerId=0,o.defaultFocusState=P.LIST_ROOT,o.selectedIndex=-1,o}return e(c,i),Object.defineProperty(c,\"cssClasses\",{get:function(){return $},enumerable:!1,configurable:!0}),Object.defineProperty(c,\"strings\",{get:function(){return G},enumerable:!1,configurable:!0}),Object.defineProperty(c,\"numbers\",{get:function(){return U},enumerable:!1,configurable:!0}),Object.defineProperty(c,\"defaultAdapter\",{get:function(){return{addClassToElementAtIndex:function(){},removeClassFromElementAtIndex:function(){},addAttributeToElementAtIndex:function(){},removeAttributeFromElementAtIndex:function(){},getAttributeFromElementAtIndex:function(){return null},elementContainsClass:function(){return!1},closeSurface:function(){},getElementIndex:function(){return-1},notifySelected:function(){},getMenuItemCount:function(){return 0},focusItemAtIndex:function(){},focusListRoot:function(){},getSelectedSiblingOfItemAtIndex:function(){return-1},isSelectableItemAtIndex:function(){return!1}}},enumerable:!1,configurable:!0}),c.prototype.destroy=function(){this.closeAnimationEndTimerId&&clearTimeout(this.closeAnimationEndTimerId),this.adapter.closeSurface()},c.prototype.handleKeydown=function(e){var t=e.key,i=e.keyCode;(\"Tab\"===t||9===i)&&this.adapter.closeSurface(!0)},c.prototype.handleItemAction=function(e){var t=this,i=this.adapter.getElementIndex(e);if(!(i<0)){this.adapter.notifySelected({index:i});var c=\"true\"===this.adapter.getAttributeFromElementAtIndex(i,G.SKIP_RESTORE_FOCUS);this.adapter.closeSurface(c),this.closeAnimationEndTimerId=setTimeout((function(){var i=t.adapter.getElementIndex(e);i>=0&&t.adapter.isSelectableItemAtIndex(i)&&t.setSelectedIndex(i)}),M.numbers.TRANSITION_CLOSE_DURATION)}},c.prototype.handleMenuSurfaceOpened=function(){switch(this.defaultFocusState){case P.FIRST_ITEM:this.adapter.focusItemAtIndex(0);break;case P.LAST_ITEM:this.adapter.focusItemAtIndex(this.adapter.getMenuItemCount()-1);break;case P.NONE:break;default:this.adapter.focusListRoot()}},c.prototype.setDefaultFocusState=function(e){this.defaultFocusState=e},c.prototype.getSelectedIndex=function(){return this.selectedIndex},c.prototype.setSelectedIndex=function(e){if(this.validatedIndex(e),!this.adapter.isSelectableItemAtIndex(e))throw new Error(\"MDCMenuFoundation: No selection group at specified index.\");var t=this.adapter.getSelectedSiblingOfItemAtIndex(e);t>=0&&(this.adapter.removeAttributeFromElementAtIndex(t,G.ARIA_CHECKED_ATTR),this.adapter.removeClassFromElementAtIndex(t,$.MENU_SELECTED_LIST_ITEM)),this.adapter.addClassToElementAtIndex(e,$.MENU_SELECTED_LIST_ITEM),this.adapter.addAttributeToElementAtIndex(e,G.ARIA_CHECKED_ATTR,\"true\"),this.selectedIndex=e},c.prototype.setEnabled=function(e,t){this.validatedIndex(e),t?(this.adapter.removeClassFromElementAtIndex(e,O.LIST_ITEM_DISABLED_CLASS),this.adapter.addAttributeToElementAtIndex(e,G.ARIA_DISABLED_ATTR,\"false\")):(this.adapter.addClassToElementAtIndex(e,O.LIST_ITEM_DISABLED_CLASS),this.adapter.addAttributeToElementAtIndex(e,G.ARIA_DISABLED_ATTR,\"true\"))},c.prototype.validatedIndex=function(e){var t=this.adapter.getMenuItemCount();if(!(e>=0&&e<t))throw new Error(\"MDCMenuFoundation: No list item at specified index.\")},c}(c);class W extends d{constructor(){super(...arguments),this.mdcFoundationClass=j,this.listElement_=null,this.anchor=null,this.open=!1,this.quick=!1,this.wrapFocus=!1,this.innerRole=\"menu\",this.innerAriaLabel=null,this.corner=\"TOP_START\",this.x=null,this.y=null,this.absolute=!1,this.multi=!1,this.activatable=!1,this.fixed=!1,this.forceGroupSelection=!1,this.fullwidth=!1,this.menuCorner=\"START\",this.stayOpenOnBodyClick=!1,this.defaultFocus=\"LIST_ROOT\",this._listUpdateComplete=null}get listElement(){return this.listElement_||(this.listElement_=this.renderRoot.querySelector(\"mwc-list\")),this.listElement_}get items(){const e=this.listElement;return e?e.items:[]}get index(){const e=this.listElement;return e?e.index:-1}get selected(){const e=this.listElement;return e?e.selected:null}render(){const e=\"menu\"===this.innerRole?\"menuitem\":\"option\";return s`\n      <mwc-menu-surface\n          ?hidden=${!this.open}\n          .anchor=${this.anchor}\n          .open=${this.open}\n          .quick=${this.quick}\n          .corner=${this.corner}\n          .x=${this.x}\n          .y=${this.y}\n          .absolute=${this.absolute}\n          .fixed=${this.fixed}\n          .fullwidth=${this.fullwidth}\n          .menuCorner=${this.menuCorner}\n          ?stayOpenOnBodyClick=${this.stayOpenOnBodyClick}\n          class=\"mdc-menu mdc-menu-surface\"\n          @closed=${this.onClosed}\n          @opened=${this.onOpened}\n          @keydown=${this.onKeydown}>\n        <mwc-list\n          rootTabbable\n          .innerAriaLabel=${this.innerAriaLabel}\n          .innerRole=${this.innerRole}\n          .multi=${this.multi}\n          class=\"mdc-deprecated-list\"\n          .itemRoles=${e}\n          .wrapFocus=${this.wrapFocus}\n          .activatable=${this.activatable}\n          @action=${this.onAction}>\n        <slot></slot>\n      </mwc-list>\n    </mwc-menu-surface>`}createAdapter(){return{addClassToElementAtIndex:(e,t)=>{const i=this.listElement;if(!i)return;const c=i.items[e];c&&(\"mdc-menu-item--selected\"===t?this.forceGroupSelection&&!c.selected&&i.toggle(e,!0):c.classList.add(t))},removeClassFromElementAtIndex:(e,t)=>{const i=this.listElement;if(!i)return;const c=i.items[e];c&&(\"mdc-menu-item--selected\"===t?c.selected&&i.toggle(e,!1):c.classList.remove(t))},addAttributeToElementAtIndex:(e,t,i)=>{const c=this.listElement;if(!c)return;const o=c.items[e];o&&o.setAttribute(t,i)},removeAttributeFromElementAtIndex:(e,t)=>{const i=this.listElement;if(!i)return;const c=i.items[e];c&&c.removeAttribute(t)},getAttributeFromElementAtIndex:(e,t)=>{const i=this.listElement;if(!i)return null;const c=i.items[e];return c?c.getAttribute(t):null},elementContainsClass:(e,t)=>e.classList.contains(t),closeSurface:()=>{this.open=!1},getElementIndex:e=>{const t=this.listElement;return t?t.items.indexOf(e):-1},notifySelected:()=>{},getMenuItemCount:()=>{const e=this.listElement;return e?e.items.length:0},focusItemAtIndex:e=>{const t=this.listElement;if(!t)return;const i=t.items[e];i&&i.focus()},focusListRoot:()=>{this.listElement&&this.listElement.focus()},getSelectedSiblingOfItemAtIndex:e=>{const t=this.listElement;if(!t)return-1;const i=t.items[e];if(!i||!i.group)return-1;for(let c=0;c<t.items.length;c++){if(c===e)continue;const o=t.items[c];if(o.selected&&o.group===i.group)return c}return-1},isSelectableItemAtIndex:e=>{const t=this.listElement;if(!t)return!1;const i=t.items[e];return!!i&&i.hasAttribute(\"group\")}}}onKeydown(e){this.mdcFoundation&&this.mdcFoundation.handleKeydown(e)}onAction(e){const t=this.listElement;if(this.mdcFoundation&&t){const i=e.detail.index,c=t.items[i];c&&this.mdcFoundation.handleItemAction(c)}}onOpened(){this.open=!0,this.mdcFoundation&&this.mdcFoundation.handleMenuSurfaceOpened()}onClosed(){this.open=!1}async getUpdateComplete(){await this._listUpdateComplete;return await super.getUpdateComplete()}async firstUpdated(){super.firstUpdated();const e=this.listElement;e&&(this._listUpdateComplete=e.updateComplete,await this._listUpdateComplete)}select(e){const t=this.listElement;t&&t.select(e)}close(){this.open=!1}show(){this.open=!0}getFocusedItemIndex(){const e=this.listElement;return e?e.getFocusedItemIndex():-1}focusItemAtIndex(e){const t=this.listElement;t&&t.focusItemAtIndex(e)}layout(e=!0){const t=this.listElement;t&&t.layout(e)}}o([r(\".mdc-menu\")],W.prototype,\"mdcRoot\",void 0),o([r(\"slot\")],W.prototype,\"slotElement\",void 0),o([n({type:Object})],W.prototype,\"anchor\",void 0),o([n({type:Boolean,reflect:!0})],W.prototype,\"open\",void 0),o([n({type:Boolean})],W.prototype,\"quick\",void 0),o([n({type:Boolean})],W.prototype,\"wrapFocus\",void 0),o([n({type:String})],W.prototype,\"innerRole\",void 0),o([n({type:String})],W.prototype,\"innerAriaLabel\",void 0),o([n({type:String})],W.prototype,\"corner\",void 0),o([n({type:Number})],W.prototype,\"x\",void 0),o([n({type:Number})],W.prototype,\"y\",void 0),o([n({type:Boolean})],W.prototype,\"absolute\",void 0),o([n({type:Boolean})],W.prototype,\"multi\",void 0),o([n({type:Boolean})],W.prototype,\"activatable\",void 0),o([n({type:Boolean})],W.prototype,\"fixed\",void 0),o([n({type:Boolean})],W.prototype,\"forceGroupSelection\",void 0),o([n({type:Boolean})],W.prototype,\"fullwidth\",void 0),o([n({type:String})],W.prototype,\"menuCorner\",void 0),o([n({type:Boolean})],W.prototype,\"stayOpenOnBodyClick\",void 0),o([n({type:String}),C((function(e){this.mdcFoundation&&this.mdcFoundation.setDefaultFocusState(P[e])}))],W.prototype,\"defaultFocus\",void 0);const q=f`mwc-list ::slotted([mwc-list-item]:not([twoline])),mwc-list ::slotted([noninteractive]:not([twoline])){height:var(--mdc-menu-item-height, 48px)}`;let K=class extends W{};var V,X;K.styles=[q],K=o([b(\"mwc-menu\")],K);const Q=null!==(X=null===(V=window.ShadyDOM)||void 0===V?void 0:V.inUse)&&void 0!==X&&X;class Y extends d{constructor(){super(...arguments),this.disabled=!1,this.containingForm=null,this.formDataListener=e=>{this.disabled||this.setFormData(e.formData)}}findFormElement(){if(!this.shadowRoot||Q)return null;const e=this.getRootNode().querySelectorAll(\"form\");for(const t of Array.from(e))if(t.contains(this))return t;return null}connectedCallback(){var e;super.connectedCallback(),this.containingForm=this.findFormElement(),null===(e=this.containingForm)||void 0===e||e.addEventListener(\"formdata\",this.formDataListener)}disconnectedCallback(){var e;super.disconnectedCallback(),null===(e=this.containingForm)||void 0===e||e.removeEventListener(\"formdata\",this.formDataListener),this.containingForm=null}click(){this.formElement&&!this.disabled&&(this.formElement.focus(),this.formElement.click())}firstUpdated(){super.firstUpdated(),this.shadowRoot&&this.mdcRoot.addEventListener(\"change\",(e=>{this.dispatchEvent(new Event(\"change\",e))}))}}Y.shadowRootOptions={mode:\"open\",delegatesFocus:!0},o([n({type:Boolean})],Y.prototype,\"disabled\",void 0);var J='/**\\n * @license\\n * Copyright Google LLC All Rights Reserved.\\n *\\n * Use of this source code is governed by an MIT-style license that can be\\n * found in the LICENSE file at https://github.com/material-components/material-components-web/blob/master/LICENSE\\n */\\n.mdc-touch-target-wrapper{display:inline}.mdc-deprecated-chip-trailing-action__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%)}.mdc-deprecated-chip-trailing-action{border:none;display:inline-flex;position:relative;align-items:center;justify-content:center;box-sizing:border-box;padding:0;outline:none;cursor:pointer;-webkit-appearance:none;background:none}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__icon{height:18px;width:18px;font-size:18px}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__touch{width:26px}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__icon{fill:currentColor;color:inherit}@-webkit-keyframes mdc-ripple-fg-radius-in{from{-webkit-animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);-webkit-transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1);transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1)}to{-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}}@keyframes mdc-ripple-fg-radius-in{from{-webkit-animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);-webkit-transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1);transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1)}to{-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}}@-webkit-keyframes mdc-ripple-fg-opacity-in{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@keyframes mdc-ripple-fg-opacity-in{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@-webkit-keyframes mdc-ripple-fg-opacity-out{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}@keyframes mdc-ripple-fg-opacity-out{from{-webkit-animation-timing-function:linear;animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}.mdc-deprecated-chip-trailing-action{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::before,.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:\"\"}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded .mdc-deprecated-chip-trailing-action__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded .mdc-deprecated-chip-trailing-action__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded--unbounded .mdc-deprecated-chip-trailing-action__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded--foreground-activation .mdc-deprecated-chip-trailing-action__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded--foreground-deactivation .mdc-deprecated-chip-trailing-action__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::before,.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::after{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded .mdc-deprecated-chip-trailing-action__ripple::before,.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded .mdc-deprecated-chip-trailing-action__ripple::after{top:var(--mdc-ripple-top, calc(50% - 50%));left:var(--mdc-ripple-left, calc(50% - 50%));width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded .mdc-deprecated-chip-trailing-action__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::before,.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple::after{background-color:#000;background-color:var(--mdc-ripple-color, var(--mdc-theme-on-surface, #000))}.mdc-deprecated-chip-trailing-action:hover .mdc-deprecated-chip-trailing-action__ripple::before,.mdc-deprecated-chip-trailing-action.mdc-ripple-surface--hover .mdc-deprecated-chip-trailing-action__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded--background-focused .mdc-deprecated-chip-trailing-action__ripple::before,.mdc-deprecated-chip-trailing-action:not(.mdc-ripple-upgraded):focus .mdc-deprecated-chip-trailing-action__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-deprecated-chip-trailing-action:not(.mdc-ripple-upgraded) .mdc-deprecated-chip-trailing-action__ripple::after{transition:opacity 150ms linear}.mdc-deprecated-chip-trailing-action:not(.mdc-ripple-upgraded):active .mdc-deprecated-chip-trailing-action__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-deprecated-chip-trailing-action.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-deprecated-chip-trailing-action .mdc-deprecated-chip-trailing-action__ripple{position:absolute;box-sizing:content-box;width:100%;height:100%;overflow:hidden}.mdc-chip__icon--leading{color:rgba(0,0,0,.54)}.mdc-deprecated-chip-trailing-action{color:#000}.mdc-chip__icon--trailing{color:rgba(0,0,0,.54)}.mdc-chip__icon--trailing:hover{color:rgba(0,0,0,.62)}.mdc-chip__icon--trailing:focus{color:rgba(0,0,0,.87)}.mdc-chip__icon.mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden){width:20px;height:20px;font-size:20px}.mdc-deprecated-chip-trailing-action__icon{height:18px;width:18px;font-size:18px}.mdc-chip__icon.mdc-chip__icon--trailing{width:18px;height:18px;font-size:18px}.mdc-deprecated-chip-trailing-action{margin-left:4px;margin-right:-4px}[dir=rtl] .mdc-deprecated-chip-trailing-action,.mdc-deprecated-chip-trailing-action[dir=rtl]{margin-left:-4px;margin-right:4px}.mdc-chip__icon--trailing{margin-left:4px;margin-right:-4px}[dir=rtl] .mdc-chip__icon--trailing,.mdc-chip__icon--trailing[dir=rtl]{margin-left:-4px;margin-right:4px}.mdc-elevation-overlay{position:absolute;border-radius:inherit;pointer-events:none;opacity:0;opacity:var(--mdc-elevation-overlay-opacity, 0);transition:opacity 280ms cubic-bezier(0.4, 0, 0.2, 1);background-color:#fff;background-color:var(--mdc-elevation-overlay-color, #fff)}.mdc-chip{border-radius:16px;background-color:#e0e0e0;color:rgba(0, 0, 0, 0.87);-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);height:32px;position:relative;display:inline-flex;align-items:center;box-sizing:border-box;padding:0 12px;border-width:0;outline:none;cursor:pointer;-webkit-appearance:none}.mdc-chip .mdc-chip__ripple{border-radius:16px}.mdc-chip:hover{color:rgba(0, 0, 0, 0.87)}.mdc-chip.mdc-chip--selected .mdc-chip__checkmark,.mdc-chip .mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden){margin-left:-4px;margin-right:4px}[dir=rtl] .mdc-chip.mdc-chip--selected .mdc-chip__checkmark,[dir=rtl] .mdc-chip .mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden),.mdc-chip.mdc-chip--selected .mdc-chip__checkmark[dir=rtl],.mdc-chip .mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden)[dir=rtl]{margin-left:4px;margin-right:-4px}.mdc-chip .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-chip::-moz-focus-inner{padding:0;border:0}.mdc-chip:hover{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-chip .mdc-chip__touch{position:absolute;top:50%;height:48px;left:0;right:0;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.mdc-chip--exit{transition:opacity 75ms cubic-bezier(0.4, 0, 0.2, 1),width 150ms cubic-bezier(0, 0, 0.2, 1),padding 100ms linear,margin 100ms linear;opacity:0}.mdc-chip__overflow{text-overflow:ellipsis;overflow:hidden}.mdc-chip__text{white-space:nowrap}.mdc-chip__icon{border-radius:50%;outline:none;vertical-align:middle}.mdc-chip__checkmark{height:20px}.mdc-chip__checkmark-path{transition:stroke-dashoffset 150ms 50ms cubic-bezier(0.4, 0, 0.6, 1);stroke-width:2px;stroke-dashoffset:29.7833385;stroke-dasharray:29.7833385}.mdc-chip__primary-action:focus{outline:none}.mdc-chip--selected .mdc-chip__checkmark-path{stroke-dashoffset:0}.mdc-chip__icon--leading,.mdc-chip__icon--trailing{position:relative}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected .mdc-chip__icon--leading{color:rgba(98,0,238,.54)}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:hover{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-chip-set--choice .mdc-chip .mdc-chip__checkmark-path{stroke:#6200ee;stroke:var(--mdc-theme-primary, #6200ee)}.mdc-chip-set--choice .mdc-chip--selected{background-color:#fff;background-color:var(--mdc-theme-surface, #fff)}.mdc-chip__checkmark-svg{width:0;height:20px;transition:width 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-chip--selected .mdc-chip__checkmark-svg{width:20px}.mdc-chip-set--filter .mdc-chip__icon--leading{transition:opacity 75ms linear;transition-delay:-50ms;opacity:1}.mdc-chip-set--filter .mdc-chip__icon--leading+.mdc-chip__checkmark{transition:opacity 75ms linear;transition-delay:80ms;opacity:0}.mdc-chip-set--filter .mdc-chip__icon--leading+.mdc-chip__checkmark .mdc-chip__checkmark-svg{transition:width 0ms}.mdc-chip-set--filter .mdc-chip--selected .mdc-chip__icon--leading{opacity:0}.mdc-chip-set--filter .mdc-chip--selected .mdc-chip__icon--leading+.mdc-chip__checkmark{width:0;opacity:1}.mdc-chip-set--filter .mdc-chip__icon--leading-hidden.mdc-chip__icon--leading{width:0;opacity:0}.mdc-chip-set--filter .mdc-chip__icon--leading-hidden.mdc-chip__icon--leading+.mdc-chip__checkmark{width:20px}.mdc-chip{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-chip .mdc-chip__ripple::before,.mdc-chip .mdc-chip__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:\"\"}.mdc-chip .mdc-chip__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-chip .mdc-chip__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-chip.mdc-ripple-upgraded .mdc-chip__ripple::before{-webkit-transform:scale(var(--mdc-ripple-fg-scale, 1));transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-chip.mdc-ripple-upgraded .mdc-chip__ripple::after{top:0;left:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transform-origin:center center;transform-origin:center center}.mdc-chip.mdc-ripple-upgraded--unbounded .mdc-chip__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-chip.mdc-ripple-upgraded--foreground-activation .mdc-chip__ripple::after{-webkit-animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards;animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-chip.mdc-ripple-upgraded--foreground-deactivation .mdc-chip__ripple::after{-webkit-animation:mdc-ripple-fg-opacity-out 150ms;animation:mdc-ripple-fg-opacity-out 150ms;-webkit-transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1));transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-chip .mdc-chip__ripple::before,.mdc-chip .mdc-chip__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-chip.mdc-ripple-upgraded .mdc-chip__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-chip .mdc-chip__ripple::before,.mdc-chip .mdc-chip__ripple::after{background-color:rgba(0, 0, 0, 0.87);background-color:var(--mdc-ripple-color, rgba(0, 0, 0, 0.87))}.mdc-chip:hover .mdc-chip__ripple::before,.mdc-chip.mdc-ripple-surface--hover .mdc-chip__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-chip.mdc-ripple-upgraded--background-focused .mdc-chip__ripple::before,.mdc-chip.mdc-ripple-upgraded:focus-within .mdc-chip__ripple::before,.mdc-chip:not(.mdc-ripple-upgraded):focus .mdc-chip__ripple::before,.mdc-chip:not(.mdc-ripple-upgraded):focus-within .mdc-chip__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-chip:not(.mdc-ripple-upgraded) .mdc-chip__ripple::after{transition:opacity 150ms linear}.mdc-chip:not(.mdc-ripple-upgraded):active .mdc-chip__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-chip.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-chip .mdc-chip__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;overflow:hidden}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected .mdc-chip__ripple::before{opacity:0.08;opacity:var(--mdc-ripple-selected-opacity, 0.08)}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected .mdc-chip__ripple::before,.mdc-chip-set--choice .mdc-chip.mdc-chip--selected .mdc-chip__ripple::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:hover .mdc-chip__ripple::before,.mdc-chip-set--choice .mdc-chip.mdc-chip--selected.mdc-ripple-surface--hover .mdc-chip__ripple::before{opacity:0.12;opacity:var(--mdc-ripple-hover-opacity, 0.12)}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected.mdc-ripple-upgraded--background-focused .mdc-chip__ripple::before,.mdc-chip-set--choice .mdc-chip.mdc-chip--selected.mdc-ripple-upgraded:focus-within .mdc-chip__ripple::before,.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:not(.mdc-ripple-upgraded):focus .mdc-chip__ripple::before,.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:not(.mdc-ripple-upgraded):focus-within .mdc-chip__ripple::before{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-focus-opacity, 0.2)}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:not(.mdc-ripple-upgraded) .mdc-chip__ripple::after{transition:opacity 150ms linear}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected:not(.mdc-ripple-upgraded):active .mdc-chip__ripple::after{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-press-opacity, 0.2)}.mdc-chip-set--choice .mdc-chip.mdc-chip--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.2)}@-webkit-keyframes mdc-chip-entry{from{-webkit-transform:scale(0.8);transform:scale(0.8);opacity:.4}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes mdc-chip-entry{from{-webkit-transform:scale(0.8);transform:scale(0.8);opacity:.4}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}.mdc-chip-set{padding:4px;display:flex;flex-wrap:wrap;box-sizing:border-box}.mdc-chip-set .mdc-chip{margin:4px}.mdc-chip-set .mdc-chip--touch{margin-top:8px;margin-bottom:8px}.mdc-chip-set--input .mdc-chip{-webkit-animation:mdc-chip-entry 100ms cubic-bezier(0, 0, 0.2, 1);animation:mdc-chip-entry 100ms cubic-bezier(0, 0, 0.2, 1)}\\n\\n/*# sourceMappingURL=mdc.chips.min.css.map*/';g([b(\"ha-chip\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[n({type:Boolean})],key:\"hasIcon\",value:()=>!1},{kind:\"field\",decorators:[n({type:Boolean})],key:\"hasTrailingIcon\",value:()=>!1},{kind:\"field\",decorators:[n({type:Boolean})],key:\"noText\",value:()=>!1},{kind:\"method\",key:\"render\",value:function(){return s`\n      <div class=\"mdc-chip ${this.noText?\"no-text\":\"\"}\">\n        ${this.hasIcon?s`<div class=\"mdc-chip__icon mdc-chip__icon--leading\">\n              <slot name=\"icon\"></slot>\n            </div>`:null}\n        <div class=\"mdc-chip__ripple\"></div>\n        <span role=\"gridcell\">\n          <span role=\"button\" tabindex=\"0\" class=\"mdc-chip__primary-action\">\n            <span class=\"mdc-chip__text\"><slot></slot></span>\n          </span>\n        </span>\n        ${this.hasTrailingIcon?s`<div class=\"mdc-chip__icon mdc-chip__icon--trailing\">\n              <slot name=\"trailing-icon\"></slot>\n            </div>`:null}\n      </div>\n    `}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return f`\n      ${x(J)}\n      .mdc-chip {\n        background-color: var(\n          --ha-chip-background-color,\n          rgba(var(--rgb-primary-text-color), 0.15)\n        );\n        color: var(--ha-chip-text-color, var(--primary-text-color));\n      }\n\n      .mdc-chip.no-text {\n        padding: 0 10px;\n      }\n\n      .mdc-chip:hover {\n        color: var(--ha-chip-text-color, var(--primary-text-color));\n      }\n\n      .mdc-chip__icon--leading,\n      .mdc-chip__icon--trailing {\n        --mdc-icon-size: 18px;\n        line-height: 14px;\n        color: var(--ha-chip-icon-color, var(--ha-chip-text-color));\n      }\n      .mdc-chip.mdc-chip--selected .mdc-chip__checkmark,\n      .mdc-chip .mdc-chip__icon--leading:not(.mdc-chip__icon--leading-hidden) {\n        margin-right: -4px;\n        margin-inline-start: -4px;\n        margin-inline-end: 4px;\n        direction: var(--direction);\n      }\n\n      span[role=\"gridcell\"] {\n        line-height: 14px;\n      }\n    `}}]}}),k);class Z extends Y{constructor(){super(...arguments),this.checked=!1,this.indeterminate=!1,this.disabled=!1,this.name=\"\",this.value=\"on\",this.reducedTouchTarget=!1,this.animationClass=\"\",this.shouldRenderRipple=!1,this.focused=!1,this.mdcFoundationClass=void 0,this.mdcFoundation=void 0,this.rippleElement=null,this.rippleHandlers=new T((()=>(this.shouldRenderRipple=!0,this.ripple.then((e=>this.rippleElement=e)),this.ripple)))}createAdapter(){return{}}update(e){const t=e.get(\"indeterminate\"),i=e.get(\"checked\"),c=e.get(\"disabled\");if(void 0!==t||void 0!==i||void 0!==c){const e=this.calculateAnimationStateName(!!i,!!t,!!c),o=this.calculateAnimationStateName(this.checked,this.indeterminate,this.disabled);this.animationClass=`${e}-${o}`}super.update(e)}calculateAnimationStateName(e,t,i){return i?\"disabled\":t?\"indeterminate\":e?\"checked\":\"unchecked\"}renderRipple(){return this.shouldRenderRipple?this.renderRippleTemplate():\"\"}renderRippleTemplate(){return s`<mwc-ripple\n        .disabled=\"${this.disabled}\"\n        unbounded></mwc-ripple>`}render(){const e=this.indeterminate||this.checked,t={\"mdc-checkbox--disabled\":this.disabled,\"mdc-checkbox--selected\":e,\"mdc-checkbox--touch\":!this.reducedTouchTarget,\"mdc-ripple-upgraded--background-focused\":this.focused,\"mdc-checkbox--anim-checked-indeterminate\":\"checked-indeterminate\"==this.animationClass,\"mdc-checkbox--anim-checked-unchecked\":\"checked-unchecked\"==this.animationClass,\"mdc-checkbox--anim-indeterminate-checked\":\"indeterminate-checked\"==this.animationClass,\"mdc-checkbox--anim-indeterminate-unchecked\":\"indeterminate-unchecked\"==this.animationClass,\"mdc-checkbox--anim-unchecked-checked\":\"unchecked-checked\"==this.animationClass,\"mdc-checkbox--anim-unchecked-indeterminate\":\"unchecked-indeterminate\"==this.animationClass},i=this.indeterminate?\"mixed\":void 0;return s`\n      <div class=\"mdc-checkbox mdc-checkbox--upgraded ${p(t)}\">\n        <input type=\"checkbox\"\n              class=\"mdc-checkbox__native-control\"\n              name=\"${w(this.name)}\"\n              aria-checked=\"${w(i)}\"\n              aria-label=\"${w(this.ariaLabel)}\"\n              aria-labelledby=\"${w(this.ariaLabelledBy)}\"\n              aria-describedby=\"${w(this.ariaDescribedBy)}\"\n              data-indeterminate=\"${this.indeterminate?\"true\":\"false\"}\"\n              ?disabled=\"${this.disabled}\"\n              .indeterminate=\"${this.indeterminate}\"\n              .checked=\"${this.checked}\"\n              .value=\"${this.value}\"\n              @change=\"${this.handleChange}\"\n              @focus=\"${this.handleFocus}\"\n              @blur=\"${this.handleBlur}\"\n              @mousedown=\"${this.handleRippleMouseDown}\"\n              @mouseenter=\"${this.handleRippleMouseEnter}\"\n              @mouseleave=\"${this.handleRippleMouseLeave}\"\n              @touchstart=\"${this.handleRippleTouchStart}\"\n              @touchend=\"${this.handleRippleDeactivate}\"\n              @touchcancel=\"${this.handleRippleDeactivate}\">\n        <div class=\"mdc-checkbox__background\"\n          @animationend=\"${this.resetAnimationClass}\">\n          <svg class=\"mdc-checkbox__checkmark\"\n              viewBox=\"0 0 24 24\">\n            <path class=\"mdc-checkbox__checkmark-path\"\n                  fill=\"none\"\n                  d=\"M1.73,12.91 8.1,19.28 22.79,4.59\"></path>\n          </svg>\n          <div class=\"mdc-checkbox__mixedmark\"></div>\n        </div>\n        ${this.renderRipple()}\n      </div>`}setFormData(e){this.name&&this.checked&&e.append(this.name,this.value)}handleFocus(){this.focused=!0,this.handleRippleFocus()}handleBlur(){this.focused=!1,this.handleRippleBlur()}handleRippleMouseDown(e){const t=()=>{window.removeEventListener(\"mouseup\",t),this.handleRippleDeactivate()};window.addEventListener(\"mouseup\",t),this.rippleHandlers.startPress(e)}handleRippleTouchStart(e){this.rippleHandlers.startPress(e)}handleRippleDeactivate(){this.rippleHandlers.endPress()}handleRippleMouseEnter(){this.rippleHandlers.startHover()}handleRippleMouseLeave(){this.rippleHandlers.endHover()}handleRippleFocus(){this.rippleHandlers.startFocus()}handleRippleBlur(){this.rippleHandlers.endFocus()}handleChange(){this.checked=this.formElement.checked,this.indeterminate=this.formElement.indeterminate}resetAnimationClass(){this.animationClass=\"\"}get isRippleActive(){var e;return(null===(e=this.rippleElement)||void 0===e?void 0:e.isActive)||!1}}o([r(\".mdc-checkbox\")],Z.prototype,\"mdcRoot\",void 0),o([r(\"input\")],Z.prototype,\"formElement\",void 0),o([n({type:Boolean,reflect:!0})],Z.prototype,\"checked\",void 0),o([n({type:Boolean})],Z.prototype,\"indeterminate\",void 0),o([n({type:Boolean,reflect:!0})],Z.prototype,\"disabled\",void 0),o([n({type:String,reflect:!0})],Z.prototype,\"name\",void 0),o([n({type:String})],Z.prototype,\"value\",void 0),o([_,n({type:String,attribute:\"aria-label\"})],Z.prototype,\"ariaLabel\",void 0),o([_,n({type:String,attribute:\"aria-labelledby\"})],Z.prototype,\"ariaLabelledBy\",void 0),o([_,n({type:String,attribute:\"aria-describedby\"})],Z.prototype,\"ariaDescribedBy\",void 0),o([n({type:Boolean})],Z.prototype,\"reducedTouchTarget\",void 0),o([a()],Z.prototype,\"animationClass\",void 0),o([a()],Z.prototype,\"shouldRenderRipple\",void 0),o([a()],Z.prototype,\"focused\",void 0),o([y(\"mwc-ripple\")],Z.prototype,\"ripple\",void 0),o([v({passive:!0})],Z.prototype,\"handleRippleTouchStart\",null);const ee=f`.mdc-checkbox{padding:calc((40px - 18px) / 2);padding:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2);margin:calc((40px - 40px) / 2);margin:calc((var(--mdc-checkbox-touch-target-size, 40px) - 40px) / 2)}.mdc-checkbox .mdc-checkbox__ripple::before,.mdc-checkbox .mdc-checkbox__ripple::after{background-color:#000;background-color:var(--mdc-ripple-color, #000)}.mdc-checkbox:hover .mdc-checkbox__ripple::before,.mdc-checkbox.mdc-ripple-surface--hover .mdc-checkbox__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-checkbox.mdc-ripple-upgraded--background-focused .mdc-checkbox__ripple::before,.mdc-checkbox:not(.mdc-ripple-upgraded):focus .mdc-checkbox__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-checkbox:not(.mdc-ripple-upgraded) .mdc-checkbox__ripple::after{transition:opacity 150ms linear}.mdc-checkbox:not(.mdc-ripple-upgraded):active .mdc-checkbox__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-checkbox.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::before,.mdc-checkbox.mdc-checkbox--selected .mdc-checkbox__ripple::after{background-color:#018786;background-color:var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786))}.mdc-checkbox.mdc-checkbox--selected:hover .mdc-checkbox__ripple::before,.mdc-checkbox.mdc-checkbox--selected.mdc-ripple-surface--hover .mdc-checkbox__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded--background-focused .mdc-checkbox__ripple::before,.mdc-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):focus .mdc-checkbox__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded) .mdc-checkbox__ripple::after{transition:opacity 150ms linear}.mdc-checkbox.mdc-checkbox--selected:not(.mdc-ripple-upgraded):active .mdc-checkbox__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-checkbox.mdc-checkbox--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::before,.mdc-checkbox.mdc-ripple-upgraded--background-focused.mdc-checkbox--selected .mdc-checkbox__ripple::after{background-color:#018786;background-color:var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786))}.mdc-checkbox .mdc-checkbox__background{top:calc((40px - 18px) / 2);top:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2);left:calc((40px - 18px) / 2);left:calc((var(--mdc-checkbox-ripple-size, 40px) - 18px) / 2)}.mdc-checkbox .mdc-checkbox__native-control{top:calc((40px - 40px) / 2);top:calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2);right:calc((40px - 40px) / 2);right:calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2);left:calc((40px - 40px) / 2);left:calc((40px - var(--mdc-checkbox-touch-target-size, 40px)) / 2);width:40px;width:var(--mdc-checkbox-touch-target-size, 40px);height:40px;height:var(--mdc-checkbox-touch-target-size, 40px)}.mdc-checkbox .mdc-checkbox__native-control:enabled:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:rgba(0, 0, 0, 0.54);border-color:var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54));background-color:transparent}.mdc-checkbox .mdc-checkbox__native-control:enabled:checked~.mdc-checkbox__background,.mdc-checkbox .mdc-checkbox__native-control:enabled:indeterminate~.mdc-checkbox__background,.mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true]:enabled~.mdc-checkbox__background{border-color:#018786;border-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786));background-color:#018786;background-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786))}@keyframes mdc-checkbox-fade-in-background-8A000000FF01878600000000FF018786{0%{border-color:rgba(0, 0, 0, 0.54);border-color:var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54));background-color:transparent}50%{border-color:#018786;border-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786));background-color:#018786;background-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786))}}@keyframes mdc-checkbox-fade-out-background-8A000000FF01878600000000FF018786{0%,80%{border-color:#018786;border-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786));background-color:#018786;background-color:var(--mdc-checkbox-checked-color, var(--mdc-theme-secondary, #018786))}100%{border-color:rgba(0, 0, 0, 0.54);border-color:var(--mdc-checkbox-unchecked-color, rgba(0, 0, 0, 0.54));background-color:transparent}}.mdc-checkbox.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-checkbox.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{animation-name:mdc-checkbox-fade-in-background-8A000000FF01878600000000FF018786}.mdc-checkbox.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background,.mdc-checkbox.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__native-control:enabled~.mdc-checkbox__background{animation-name:mdc-checkbox-fade-out-background-8A000000FF01878600000000FF018786}.mdc-checkbox .mdc-checkbox__native-control[disabled]:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:rgba(0, 0, 0, 0.38);border-color:var(--mdc-checkbox-disabled-color, rgba(0, 0, 0, 0.38));background-color:transparent}.mdc-checkbox .mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background,.mdc-checkbox .mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-checkbox .mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background{border-color:transparent;background-color:rgba(0, 0, 0, 0.38);background-color:var(--mdc-checkbox-disabled-color, rgba(0, 0, 0, 0.38))}.mdc-checkbox .mdc-checkbox__native-control:enabled~.mdc-checkbox__background .mdc-checkbox__checkmark{color:#fff;color:var(--mdc-checkbox-ink-color, #fff)}.mdc-checkbox .mdc-checkbox__native-control:enabled~.mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:#fff;border-color:var(--mdc-checkbox-ink-color, #fff)}.mdc-checkbox .mdc-checkbox__native-control:disabled~.mdc-checkbox__background .mdc-checkbox__checkmark{color:#fff;color:var(--mdc-checkbox-ink-color, #fff)}.mdc-checkbox .mdc-checkbox__native-control:disabled~.mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:#fff;border-color:var(--mdc-checkbox-ink-color, #fff)}.mdc-touch-target-wrapper{display:inline}@keyframes mdc-checkbox-unchecked-checked-checkmark-path{0%,50%{stroke-dashoffset:29.7833385}50%{animation-timing-function:cubic-bezier(0, 0, 0.2, 1)}100%{stroke-dashoffset:0}}@keyframes mdc-checkbox-unchecked-indeterminate-mixedmark{0%,68.2%{transform:scaleX(0)}68.2%{animation-timing-function:cubic-bezier(0, 0, 0, 1)}100%{transform:scaleX(1)}}@keyframes mdc-checkbox-checked-unchecked-checkmark-path{from{animation-timing-function:cubic-bezier(0.4, 0, 1, 1);opacity:1;stroke-dashoffset:0}to{opacity:0;stroke-dashoffset:-29.7833385}}@keyframes mdc-checkbox-checked-indeterminate-checkmark{from{animation-timing-function:cubic-bezier(0, 0, 0.2, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(45deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-checked-checkmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(45deg);opacity:0}to{transform:rotate(360deg);opacity:1}}@keyframes mdc-checkbox-checked-indeterminate-mixedmark{from{animation-timing-function:mdc-animation-deceleration-curve-timing-function;transform:rotate(-45deg);opacity:0}to{transform:rotate(0deg);opacity:1}}@keyframes mdc-checkbox-indeterminate-checked-mixedmark{from{animation-timing-function:cubic-bezier(0.14, 0, 0, 1);transform:rotate(0deg);opacity:1}to{transform:rotate(315deg);opacity:0}}@keyframes mdc-checkbox-indeterminate-unchecked-mixedmark{0%{animation-timing-function:linear;transform:scaleX(1);opacity:1}32.8%,100%{transform:scaleX(0);opacity:0}}.mdc-checkbox{display:inline-block;position:relative;flex:0 0 18px;box-sizing:content-box;width:18px;height:18px;line-height:0;white-space:nowrap;cursor:pointer;vertical-align:bottom}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-checkbox__native-control[disabled]:not(:checked):not(:indeterminate):not([data-indeterminate=true])~.mdc-checkbox__background{border-color:GrayText;border-color:var(--mdc-checkbox-disabled-color, GrayText);background-color:transparent}.mdc-checkbox__native-control[disabled]:checked~.mdc-checkbox__background,.mdc-checkbox__native-control[disabled]:indeterminate~.mdc-checkbox__background,.mdc-checkbox__native-control[data-indeterminate=true][disabled]~.mdc-checkbox__background{border-color:GrayText;background-color:transparent;background-color:var(--mdc-checkbox-disabled-color, transparent)}.mdc-checkbox__native-control:disabled~.mdc-checkbox__background .mdc-checkbox__checkmark{color:GrayText;color:var(--mdc-checkbox-ink-color, GrayText)}.mdc-checkbox__native-control:disabled~.mdc-checkbox__background .mdc-checkbox__mixedmark{border-color:GrayText;border-color:var(--mdc-checkbox-ink-color, GrayText)}.mdc-checkbox__mixedmark{margin:0 1px}}.mdc-checkbox--disabled{cursor:default;pointer-events:none}.mdc-checkbox__background{display:inline-flex;position:absolute;align-items:center;justify-content:center;box-sizing:border-box;width:18px;height:18px;border:2px solid currentColor;border-radius:2px;background-color:transparent;pointer-events:none;will-change:background-color,border-color;transition:background-color 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),border-color 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox__checkmark{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;opacity:0;transition:opacity 180ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox--upgraded .mdc-checkbox__checkmark{opacity:1}.mdc-checkbox__checkmark-path{transition:stroke-dashoffset 180ms 0ms cubic-bezier(0.4, 0, 0.6, 1);stroke:currentColor;stroke-width:3.12px;stroke-dashoffset:29.7833385;stroke-dasharray:29.7833385}.mdc-checkbox__mixedmark{width:100%;height:0;transform:scaleX(0) rotate(0deg);border-width:1px;border-style:solid;opacity:0;transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__background,.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__background,.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__background,.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__background{animation-duration:180ms;animation-timing-function:linear}.mdc-checkbox--anim-unchecked-checked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-unchecked-checked-checkmark-path 180ms linear 0s;transition:none}.mdc-checkbox--anim-unchecked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-unchecked-indeterminate-mixedmark 90ms linear 0s;transition:none}.mdc-checkbox--anim-checked-unchecked .mdc-checkbox__checkmark-path{animation:mdc-checkbox-checked-unchecked-checkmark-path 90ms linear 0s;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__checkmark{animation:mdc-checkbox-checked-indeterminate-checkmark 90ms linear 0s;transition:none}.mdc-checkbox--anim-checked-indeterminate .mdc-checkbox__mixedmark{animation:mdc-checkbox-checked-indeterminate-mixedmark 90ms linear 0s;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__checkmark{animation:mdc-checkbox-indeterminate-checked-checkmark 500ms linear 0s;transition:none}.mdc-checkbox--anim-indeterminate-checked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-checked-mixedmark 500ms linear 0s;transition:none}.mdc-checkbox--anim-indeterminate-unchecked .mdc-checkbox__mixedmark{animation:mdc-checkbox-indeterminate-unchecked-mixedmark 300ms linear 0s;transition:none}.mdc-checkbox__native-control:checked~.mdc-checkbox__background,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background{transition:border-color 90ms 0ms cubic-bezier(0, 0, 0.2, 1),background-color 90ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-checkbox__native-control:checked~.mdc-checkbox__background .mdc-checkbox__checkmark-path,.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background .mdc-checkbox__checkmark-path,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background .mdc-checkbox__checkmark-path{stroke-dashoffset:0}.mdc-checkbox__native-control{position:absolute;margin:0;padding:0;opacity:0;cursor:inherit}.mdc-checkbox__native-control:disabled{cursor:default;pointer-events:none}.mdc-checkbox--touch{margin:calc((48px - 40px) / 2);margin:calc((var(--mdc-checkbox-state-layer-size, 48px) - var(--mdc-checkbox-state-layer-size, 40px)) / 2)}.mdc-checkbox--touch .mdc-checkbox__native-control{top:calc((40px - 48px) / 2);top:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 48px)) / 2);right:calc((40px - 48px) / 2);right:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 48px)) / 2);left:calc((40px - 48px) / 2);left:calc((var(--mdc-checkbox-state-layer-size, 40px) - var(--mdc-checkbox-state-layer-size, 48px)) / 2);width:48px;width:var(--mdc-checkbox-state-layer-size, 48px);height:48px;height:var(--mdc-checkbox-state-layer-size, 48px)}.mdc-checkbox__native-control:checked~.mdc-checkbox__background .mdc-checkbox__checkmark{transition:opacity 180ms 0ms cubic-bezier(0, 0, 0.2, 1),transform 180ms 0ms cubic-bezier(0, 0, 0.2, 1);opacity:1}.mdc-checkbox__native-control:checked~.mdc-checkbox__background .mdc-checkbox__mixedmark{transform:scaleX(1) rotate(-45deg)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background .mdc-checkbox__checkmark,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background .mdc-checkbox__checkmark{transform:rotate(45deg);opacity:0;transition:opacity 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1),transform 90ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-checkbox__native-control:indeterminate~.mdc-checkbox__background .mdc-checkbox__mixedmark,.mdc-checkbox__native-control[data-indeterminate=true]~.mdc-checkbox__background .mdc-checkbox__mixedmark{transform:scaleX(1) rotate(0deg);opacity:1}.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__background,.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__checkmark,.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__checkmark-path,.mdc-checkbox.mdc-checkbox--upgraded .mdc-checkbox__mixedmark{transition:none}:host{outline:none;display:inline-flex;-webkit-tap-highlight-color:transparent}:host([checked]),:host([indeterminate]){--mdc-ripple-color:var(--mdc-theme-secondary, #018786)}.mdc-checkbox .mdc-checkbox__background::before{content:none}`;g([b(\"ha-checkbox\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",static:!0,key:\"styles\",value:()=>[ee,f`\n      :host {\n        --mdc-theme-secondary: var(--primary-color);\n      }\n    `]}]}}),Z);var te={ROOT:\"mdc-form-field\"},ie={LABEL_SELECTOR:\".mdc-form-field > label\"},ce=function(i){function c(e){var o=i.call(this,t(t({},c.defaultAdapter),e))||this;return o.click=function(){o.handleClick()},o}return e(c,i),Object.defineProperty(c,\"cssClasses\",{get:function(){return te},enumerable:!1,configurable:!0}),Object.defineProperty(c,\"strings\",{get:function(){return ie},enumerable:!1,configurable:!0}),Object.defineProperty(c,\"defaultAdapter\",{get:function(){return{activateInputRipple:function(){},deactivateInputRipple:function(){},deregisterInteractionHandler:function(){},registerInteractionHandler:function(){}}},enumerable:!1,configurable:!0}),c.prototype.init=function(){this.adapter.registerInteractionHandler(\"click\",this.click)},c.prototype.destroy=function(){this.adapter.deregisterInteractionHandler(\"click\",this.click)},c.prototype.handleClick=function(){var e=this;this.adapter.activateInputRipple(),requestAnimationFrame((function(){e.adapter.deactivateInputRipple()}))},c}(c);class oe extends d{constructor(){super(...arguments),this.alignEnd=!1,this.spaceBetween=!1,this.nowrap=!1,this.label=\"\",this.mdcFoundationClass=ce}createAdapter(){return{registerInteractionHandler:(e,t)=>{this.labelEl.addEventListener(e,t)},deregisterInteractionHandler:(e,t)=>{this.labelEl.removeEventListener(e,t)},activateInputRipple:async()=>{const e=this.input;if(e instanceof Y){const t=await e.ripple;t&&t.startPress()}},deactivateInputRipple:async()=>{const e=this.input;if(e instanceof Y){const t=await e.ripple;t&&t.endPress()}}}}get input(){var e,t;return null!==(t=null===(e=this.slottedInputs)||void 0===e?void 0:e[0])&&void 0!==t?t:null}render(){const e={\"mdc-form-field--align-end\":this.alignEnd,\"mdc-form-field--space-between\":this.spaceBetween,\"mdc-form-field--nowrap\":this.nowrap};return s`\n      <div class=\"mdc-form-field ${p(e)}\">\n        <slot></slot>\n        <label class=\"mdc-label\"\n               @click=\"${this._labelClick}\">${this.label}</label>\n      </div>`}click(){this._labelClick()}_labelClick(){const e=this.input;e&&(e.focus(),e.click())}}o([n({type:Boolean})],oe.prototype,\"alignEnd\",void 0),o([n({type:Boolean})],oe.prototype,\"spaceBetween\",void 0),o([n({type:Boolean})],oe.prototype,\"nowrap\",void 0),o([n({type:String}),C((async function(e){var t;null===(t=this.input)||void 0===t||t.setAttribute(\"aria-label\",e)}))],oe.prototype,\"label\",void 0),o([r(\".mdc-form-field\")],oe.prototype,\"mdcRoot\",void 0),o([I(\"\",!0,\"*\")],oe.prototype,\"slottedInputs\",void 0),o([r(\"label\")],oe.prototype,\"labelEl\",void 0);const re=f`.mdc-form-field{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);color:rgba(0, 0, 0, 0.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87));display:inline-flex;align-items:center;vertical-align:middle}.mdc-form-field>label{margin-left:0;margin-right:auto;padding-left:4px;padding-right:0;order:0}[dir=rtl] .mdc-form-field>label,.mdc-form-field>label[dir=rtl]{margin-left:auto;margin-right:0}[dir=rtl] .mdc-form-field>label,.mdc-form-field>label[dir=rtl]{padding-left:0;padding-right:4px}.mdc-form-field--nowrap>label{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.mdc-form-field--align-end>label{margin-left:auto;margin-right:0;padding-left:0;padding-right:4px;order:-1}[dir=rtl] .mdc-form-field--align-end>label,.mdc-form-field--align-end>label[dir=rtl]{margin-left:0;margin-right:auto}[dir=rtl] .mdc-form-field--align-end>label,.mdc-form-field--align-end>label[dir=rtl]{padding-left:4px;padding-right:0}.mdc-form-field--space-between{justify-content:space-between}.mdc-form-field--space-between>label{margin:0}[dir=rtl] .mdc-form-field--space-between>label,.mdc-form-field--space-between>label[dir=rtl]{margin:0}:host{display:inline-flex}.mdc-form-field{width:100%}::slotted(*){-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);color:rgba(0, 0, 0, 0.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87))}::slotted(mwc-switch){margin-right:10px}[dir=rtl] ::slotted(mwc-switch),::slotted(mwc-switch[dir=rtl]){margin-left:10px}`;g([b(\"ha-formfield\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"method\",key:\"_labelClick\",value:function(){const e=this.input;if(e)switch(e.focus(),e.tagName){case\"HA-CHECKBOX\":case\"HA-RADIO\":e.checked=!e.checked,E(e,\"change\");break;default:e.click()}}},{kind:\"field\",static:!0,key:\"styles\",value:()=>[re,f`\n      :host(:not([alignEnd])) ::slotted(ha-switch) {\n        margin-right: 10px;\n        margin-inline-end: 10px;\n        margin-inline-start: inline;\n      }\n      .mdc-form-field > label {\n        direction: var(--direction);\n        margin-inline-start: 0;\n        margin-inline-end: auto;\n        padding-inline-start: 4px;\n        padding-inline-end: 0;\n      }\n    `]}]}}),oe);export{R as C,Y as F,oe as a,ee as b,Z as c,J as d,re as s};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.c4815b5a.js",
    "content": "import{a as e,e as t,i,L as a,N as d,$ as r,r as n,n as o}from\"./main-a0d7432d.js\";import{H as s}from\"./c.05e9df28.js\";e([o(\"ha-clickable-list-item\")],(function(e,o){class s extends o{constructor(...t){super(...t),e(this)}}return{F:s,d:[{kind:\"field\",decorators:[t()],key:\"href\",value:void 0},{kind:\"field\",decorators:[t({type:Boolean})],key:\"disableHref\",value:()=>!1},{kind:\"field\",decorators:[t({type:Boolean,reflect:!0})],key:\"openNewTab\",value:()=>!1},{kind:\"field\",decorators:[i(\"a\")],key:\"_anchor\",value:void 0},{kind:\"method\",key:\"render\",value:function(){const e=a(d(s.prototype),\"render\",this).call(this),t=this.href||\"\";return r`${this.disableHref?r`<a aria-role=\"option\">${e}</a>`:r`<a\n          aria-role=\"option\"\n          target=${this.openNewTab?\"_blank\":\"\"}\n          href=${t}\n          >${e}</a\n        >`}`}},{kind:\"method\",key:\"firstUpdated\",value:function(){a(d(s.prototype),\"firstUpdated\",this).call(this),this.addEventListener(\"keydown\",(e=>{\"Enter\"!==e.key&&\" \"!==e.key||this._anchor.click()}))}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[a(d(s),\"styles\",this),n`\n        a {\n          width: 100%;\n          height: 100%;\n          display: flex;\n          align-items: center;\n          padding-left: var(--mdc-list-side-padding, 20px);\n          padding-right: var(--mdc-list-side-padding, 20px);\n          overflow: hidden;\n        }\n      `]}}]}}),s);\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.c608beec.js",
    "content": "import{u as t,v as e,M as i,_ as o,i as n,e as a,B as d,y as r,W as s,X as c,$ as l,o as m,r as u,a as h,Y as g,L as p,N as f,n as _,z as b}from\"./main-a0d7432d.js\";import{o as v}from\"./c.8e28b461.js\";(()=>{var t,e,i;const o=Symbol(),n=Symbol(),a=Symbol(),d=Symbol(),r=Symbol(),s=Symbol(),c=Symbol(),l=Symbol(),m=Symbol(),u=Symbol(),h=Symbol(),g=Symbol(),p=Symbol();class f{constructor(){this[t]=[],this[e]=[],this[i]=new Set}destructor(){this[m](this[a]);const t=this;t[o]=null,t[a]=null,t[n]=null}get top(){const t=this[o];return t[t.length-1]||null}push(t){t&&t!==this.top&&(this.remove(t),this[s](t),this[o].push(t))}remove(t){const e=this[o].indexOf(t);return-1!==e&&(this[o].splice(e,1),e===this[o].length&&this[s](this.top),!0)}pop(){const t=this.top;return t&&this.remove(t),t}has(t){return-1!==this[o].indexOf(t)}[(t=o,e=a,i=n,s)](t){const e=this[n],i=this[a];if(!t)return this[m](i),e.clear(),void(this[a]=[]);const o=this[u](t);if(o[o.length-1].parentNode!==document.body)throw Error(\"Non-connected element cannot be a blocking element\");this[a]=o;const d=this[h](t);if(!i.length)return void this[l](o,d,e);let r=i.length-1,s=o.length-1;for(;r>0&&s>0&&i[r]===o[s];)r--,s--;i[r]!==o[s]&&this[c](i[r],o[s]),r>0&&this[m](i.slice(0,r)),s>0&&this[l](o.slice(0,s),d,null)}[c](t,e){const i=t[d];this[g](t)&&!t.inert&&(t.inert=!0,i.add(t)),i.has(e)&&(e.inert=!1,i.delete(e)),e[r]=t[r],e[d]=i,t[r]=void 0,t[d]=void 0}[m](t){for(const e of t){e[r].disconnect(),e[r]=void 0;const t=e[d];for(const e of t)e.inert=!1;e[d]=void 0}}[l](t,e,i){for(const o of t){const t=o.parentNode,n=t.children,a=new Set;for(let t=0;t<n.length;t++){const d=n[t];d===o||!this[g](d)||e&&e.has(d)||(i&&d.inert?i.add(d):(d.inert=!0,a.add(d)))}o[d]=a;const s=new MutationObserver(this[p].bind(this));o[r]=s;let c=t;const l=c;l.__shady&&l.host&&(c=l.host),s.observe(c,{childList:!0})}}[p](t){const e=this[a],i=this[n];for(const o of t){const t=o.target.host||o.target,n=t===document.body?e.length:e.indexOf(t),a=e[n-1],r=a[d];for(let t=0;t<o.removedNodes.length;t++){const e=o.removedNodes[t];if(e===a)return console.info(\"Detected removal of the top Blocking Element.\"),void this.pop();r.has(e)&&(e.inert=!1,r.delete(e))}for(let t=0;t<o.addedNodes.length;t++){const e=o.addedNodes[t];this[g](e)&&(i&&e.inert?i.add(e):(e.inert=!0,r.add(e)))}}}[g](t){return!1===/^(style|template|script)$/.test(t.localName)}[u](t){const e=[];let i=t;for(;i&&i!==document.body;)if(i.nodeType===Node.ELEMENT_NODE&&e.push(i),i.assignedSlot){for(;i=i.assignedSlot;)e.push(i);i=e.pop()}else i=i.parentNode||i.host;return e}[h](t){const e=t.shadowRoot;if(!e)return null;const i=new Set;let o,n,a;const d=e.querySelectorAll(\"slot\");if(d.length&&d[0].assignedNodes)for(o=0;o<d.length;o++)for(a=d[o].assignedNodes({flatten:!0}),n=0;n<a.length;n++)a[n].nodeType===Node.ELEMENT_NODE&&i.add(a[n]);return i}}document.$blockingElements=new f})();var y=function(){function t(t,e){for(var i=0;i<e.length;i++){var o=e[i];o.enumerable=o.enumerable||!1,o.configurable=!0,\"value\"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}return function(e,i,o){return i&&t(e.prototype,i),o&&t(e,o),e}}();function x(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}!function(){if(\"undefined\"!=typeof window){var t=Array.prototype.slice,e=Element.prototype.matches||Element.prototype.msMatchesSelector,i=[\"a[href]\",\"area[href]\",\"input:not([disabled])\",\"select:not([disabled])\",\"textarea:not([disabled])\",\"button:not([disabled])\",\"details\",\"summary\",\"iframe\",\"object\",\"embed\",\"[contenteditable]\"].join(\",\"),o=function(){function o(t,e){x(this,o),this._inertManager=e,this._rootElement=t,this._managedNodes=new Set,this._rootElement.hasAttribute(\"aria-hidden\")?this._savedAriaHidden=this._rootElement.getAttribute(\"aria-hidden\"):this._savedAriaHidden=null,this._rootElement.setAttribute(\"aria-hidden\",\"true\"),this._makeSubtreeUnfocusable(this._rootElement),this._observer=new MutationObserver(this._onMutation.bind(this)),this._observer.observe(this._rootElement,{attributes:!0,childList:!0,subtree:!0})}return y(o,[{key:\"destructor\",value:function(){this._observer.disconnect(),this._rootElement&&(null!==this._savedAriaHidden?this._rootElement.setAttribute(\"aria-hidden\",this._savedAriaHidden):this._rootElement.removeAttribute(\"aria-hidden\")),this._managedNodes.forEach((function(t){this._unmanageNode(t.node)}),this),this._observer=null,this._rootElement=null,this._managedNodes=null,this._inertManager=null}},{key:\"_makeSubtreeUnfocusable\",value:function(t){var e=this;r(t,(function(t){return e._visitNode(t)}));var i=document.activeElement;if(!document.body.contains(t)){for(var o=t,n=void 0;o;){if(o.nodeType===Node.DOCUMENT_FRAGMENT_NODE){n=o;break}o=o.parentNode}n&&(i=n.activeElement)}t.contains(i)&&(i.blur(),i===document.activeElement&&document.body.focus())}},{key:\"_visitNode\",value:function(t){if(t.nodeType===Node.ELEMENT_NODE){var o=t;o!==this._rootElement&&o.hasAttribute(\"inert\")&&this._adoptInertRoot(o),(e.call(o,i)||o.hasAttribute(\"tabindex\"))&&this._manageNode(o)}}},{key:\"_manageNode\",value:function(t){var e=this._inertManager.register(t,this);this._managedNodes.add(e)}},{key:\"_unmanageNode\",value:function(t){var e=this._inertManager.deregister(t,this);e&&this._managedNodes.delete(e)}},{key:\"_unmanageSubtree\",value:function(t){var e=this;r(t,(function(t){return e._unmanageNode(t)}))}},{key:\"_adoptInertRoot\",value:function(t){var e=this._inertManager.getInertRoot(t);e||(this._inertManager.setInert(t,!0),e=this._inertManager.getInertRoot(t)),e.managedNodes.forEach((function(t){this._manageNode(t.node)}),this)}},{key:\"_onMutation\",value:function(e,i){e.forEach((function(e){var i=e.target;if(\"childList\"===e.type)t.call(e.addedNodes).forEach((function(t){this._makeSubtreeUnfocusable(t)}),this),t.call(e.removedNodes).forEach((function(t){this._unmanageSubtree(t)}),this);else if(\"attributes\"===e.type)if(\"tabindex\"===e.attributeName)this._manageNode(i);else if(i!==this._rootElement&&\"inert\"===e.attributeName&&i.hasAttribute(\"inert\")){this._adoptInertRoot(i);var o=this._inertManager.getInertRoot(i);this._managedNodes.forEach((function(t){i.contains(t.node)&&o._manageNode(t.node)}))}}),this)}},{key:\"managedNodes\",get:function(){return new Set(this._managedNodes)}},{key:\"hasSavedAriaHidden\",get:function(){return null!==this._savedAriaHidden}},{key:\"savedAriaHidden\",set:function(t){this._savedAriaHidden=t},get:function(){return this._savedAriaHidden}}]),o}(),n=function(){function t(e,i){x(this,t),this._node=e,this._overrodeFocusMethod=!1,this._inertRoots=new Set([i]),this._savedTabIndex=null,this._destroyed=!1,this.ensureUntabbable()}return y(t,[{key:\"destructor\",value:function(){if(this._throwIfDestroyed(),this._node&&this._node.nodeType===Node.ELEMENT_NODE){var t=this._node;null!==this._savedTabIndex?t.setAttribute(\"tabindex\",this._savedTabIndex):t.removeAttribute(\"tabindex\"),this._overrodeFocusMethod&&delete t.focus}this._node=null,this._inertRoots=null,this._destroyed=!0}},{key:\"_throwIfDestroyed\",value:function(){if(this.destroyed)throw new Error(\"Trying to access destroyed InertNode\")}},{key:\"ensureUntabbable\",value:function(){if(this.node.nodeType===Node.ELEMENT_NODE){var t=this.node;if(e.call(t,i)){if(-1===t.tabIndex&&this.hasSavedTabIndex)return;t.hasAttribute(\"tabindex\")&&(this._savedTabIndex=t.tabIndex),t.setAttribute(\"tabindex\",\"-1\"),t.nodeType===Node.ELEMENT_NODE&&(t.focus=function(){},this._overrodeFocusMethod=!0)}else t.hasAttribute(\"tabindex\")&&(this._savedTabIndex=t.tabIndex,t.removeAttribute(\"tabindex\"))}}},{key:\"addInertRoot\",value:function(t){this._throwIfDestroyed(),this._inertRoots.add(t)}},{key:\"removeInertRoot\",value:function(t){this._throwIfDestroyed(),this._inertRoots.delete(t),0===this._inertRoots.size&&this.destructor()}},{key:\"destroyed\",get:function(){return this._destroyed}},{key:\"hasSavedTabIndex\",get:function(){return null!==this._savedTabIndex}},{key:\"node\",get:function(){return this._throwIfDestroyed(),this._node}},{key:\"savedTabIndex\",set:function(t){this._throwIfDestroyed(),this._savedTabIndex=t},get:function(){return this._throwIfDestroyed(),this._savedTabIndex}}]),t}(),a=function(){function i(t){if(x(this,i),!t)throw new Error(\"Missing required argument; InertManager needs to wrap a document.\");this._document=t,this._managedNodes=new Map,this._inertRoots=new Map,this._observer=new MutationObserver(this._watchForInert.bind(this)),s(t.head||t.body||t.documentElement),\"loading\"===t.readyState?t.addEventListener(\"DOMContentLoaded\",this._onDocumentLoaded.bind(this)):this._onDocumentLoaded()}return y(i,[{key:\"setInert\",value:function(t,e){if(e){if(this._inertRoots.has(t))return;var i=new o(t,this);if(t.setAttribute(\"inert\",\"\"),this._inertRoots.set(t,i),!this._document.body.contains(t))for(var n=t.parentNode;n;)11===n.nodeType&&s(n),n=n.parentNode}else{if(!this._inertRoots.has(t))return;this._inertRoots.get(t).destructor(),this._inertRoots.delete(t),t.removeAttribute(\"inert\")}}},{key:\"getInertRoot\",value:function(t){return this._inertRoots.get(t)}},{key:\"register\",value:function(t,e){var i=this._managedNodes.get(t);return void 0!==i?i.addInertRoot(e):i=new n(t,e),this._managedNodes.set(t,i),i}},{key:\"deregister\",value:function(t,e){var i=this._managedNodes.get(t);return i?(i.removeInertRoot(e),i.destroyed&&this._managedNodes.delete(t),i):null}},{key:\"_onDocumentLoaded\",value:function(){t.call(this._document.querySelectorAll(\"[inert]\")).forEach((function(t){this.setInert(t,!0)}),this),this._observer.observe(this._document.body||this._document.documentElement,{attributes:!0,subtree:!0,childList:!0})}},{key:\"_watchForInert\",value:function(i,o){var n=this;i.forEach((function(i){switch(i.type){case\"childList\":t.call(i.addedNodes).forEach((function(i){if(i.nodeType===Node.ELEMENT_NODE){var o=t.call(i.querySelectorAll(\"[inert]\"));e.call(i,\"[inert]\")&&o.unshift(i),o.forEach((function(t){this.setInert(t,!0)}),n)}}),n);break;case\"attributes\":if(\"inert\"!==i.attributeName)return;var o=i.target,a=o.hasAttribute(\"inert\");n.setInert(o,a)}}),this)}}]),i}();if(!HTMLElement.prototype.hasOwnProperty(\"inert\")){var d=new a(document);Object.defineProperty(HTMLElement.prototype,\"inert\",{enumerable:!0,get:function(){return this.hasAttribute(\"inert\")},set:function(t){d.setInert(this,t)}})}}function r(t,e,i){if(t.nodeType==Node.ELEMENT_NODE){var o=t;e&&e(o);var n=o.shadowRoot;if(n)return void r(n,e);if(\"content\"==o.localName){for(var a=o,d=a.getDistributedNodes?a.getDistributedNodes():[],s=0;s<d.length;s++)r(d[s],e);return}if(\"slot\"==o.localName){for(var c=o,l=c.assignedNodes?c.assignedNodes({flatten:!0}):[],m=0;m<l.length;m++)r(l[m],e);return}}for(var u=t.firstChild;null!=u;)r(u,e),u=u.nextSibling}function s(t){if(!t.querySelector(\"style#inert-style, link#inert-style\")){var e=document.createElement(\"style\");e.setAttribute(\"id\",\"inert-style\"),e.textContent=\"\\n[inert] {\\n  pointer-events: none;\\n  cursor: default;\\n}\\n\\n[inert], [inert] * {\\n  -webkit-user-select: none;\\n  -moz-user-select: none;\\n  -ms-user-select: none;\\n  user-select: none;\\n}\\n\",t.appendChild(e)}}}();var E,S={CLOSING:\"mdc-dialog--closing\",OPEN:\"mdc-dialog--open\",OPENING:\"mdc-dialog--opening\",SCROLLABLE:\"mdc-dialog--scrollable\",SCROLL_LOCK:\"mdc-dialog-scroll-lock\",STACKED:\"mdc-dialog--stacked\",FULLSCREEN:\"mdc-dialog--fullscreen\",SCROLL_DIVIDER_HEADER:\"mdc-dialog-scroll-divider-header\",SCROLL_DIVIDER_FOOTER:\"mdc-dialog-scroll-divider-footer\",SURFACE_SCRIM_SHOWN:\"mdc-dialog__surface-scrim--shown\",SURFACE_SCRIM_SHOWING:\"mdc-dialog__surface-scrim--showing\",SURFACE_SCRIM_HIDING:\"mdc-dialog__surface-scrim--hiding\",SCRIM_HIDDEN:\"mdc-dialog__scrim--hidden\"},w={ACTION_ATTRIBUTE:\"data-mdc-dialog-action\",BUTTON_DEFAULT_ATTRIBUTE:\"data-mdc-dialog-button-default\",BUTTON_SELECTOR:\".mdc-dialog__button\",CLOSED_EVENT:\"MDCDialog:closed\",CLOSE_ACTION:\"close\",CLOSING_EVENT:\"MDCDialog:closing\",CONTAINER_SELECTOR:\".mdc-dialog__container\",CONTENT_SELECTOR:\".mdc-dialog__content\",DESTROY_ACTION:\"destroy\",INITIAL_FOCUS_ATTRIBUTE:\"data-mdc-dialog-initial-focus\",OPENED_EVENT:\"MDCDialog:opened\",OPENING_EVENT:\"MDCDialog:opening\",SCRIM_SELECTOR:\".mdc-dialog__scrim\",SUPPRESS_DEFAULT_PRESS_SELECTOR:[\"textarea\",\".mdc-menu .mdc-list-item\",\".mdc-menu .mdc-deprecated-list-item\"].join(\", \"),SURFACE_SELECTOR:\".mdc-dialog__surface\"},C={DIALOG_ANIMATION_CLOSE_TIME_MS:75,DIALOG_ANIMATION_OPEN_TIME_MS:150},A=function(){function t(){this.rafIDs=new Map}return t.prototype.request=function(t,e){var i=this;this.cancel(t);var o=requestAnimationFrame((function(o){i.rafIDs.delete(t),e(o)}));this.rafIDs.set(t,o)},t.prototype.cancel=function(t){var e=this.rafIDs.get(t);e&&(cancelAnimationFrame(e),this.rafIDs.delete(t))},t.prototype.cancelAll=function(){var t=this;this.rafIDs.forEach((function(e,i){t.cancel(i)}))},t.prototype.getQueue=function(){var t=[];return this.rafIDs.forEach((function(e,i){t.push(i)})),t},t}();!function(t){t.POLL_SCROLL_POS=\"poll_scroll_position\",t.POLL_LAYOUT_CHANGE=\"poll_layout_change\"}(E||(E={}));var N=function(i){function o(t){var n=i.call(this,e(e({},o.defaultAdapter),t))||this;return n.dialogOpen=!1,n.isFullscreen=!1,n.animationFrame=0,n.animationTimer=0,n.escapeKeyAction=w.CLOSE_ACTION,n.scrimClickAction=w.CLOSE_ACTION,n.autoStackButtons=!0,n.areButtonsStacked=!1,n.suppressDefaultPressSelector=w.SUPPRESS_DEFAULT_PRESS_SELECTOR,n.animFrame=new A,n.contentScrollHandler=function(){n.handleScrollEvent()},n.windowResizeHandler=function(){n.layout()},n.windowOrientationChangeHandler=function(){n.layout()},n}return t(o,i),Object.defineProperty(o,\"cssClasses\",{get:function(){return S},enumerable:!1,configurable:!0}),Object.defineProperty(o,\"strings\",{get:function(){return w},enumerable:!1,configurable:!0}),Object.defineProperty(o,\"numbers\",{get:function(){return C},enumerable:!1,configurable:!0}),Object.defineProperty(o,\"defaultAdapter\",{get:function(){return{addBodyClass:function(){},addClass:function(){},areButtonsStacked:function(){return!1},clickDefaultButton:function(){},eventTargetMatches:function(){return!1},getActionFromEvent:function(){return\"\"},getInitialFocusEl:function(){return null},hasClass:function(){return!1},isContentScrollable:function(){return!1},notifyClosed:function(){},notifyClosing:function(){},notifyOpened:function(){},notifyOpening:function(){},releaseFocus:function(){},removeBodyClass:function(){},removeClass:function(){},reverseButtons:function(){},trapFocus:function(){},registerContentEventHandler:function(){},deregisterContentEventHandler:function(){},isScrollableContentAtTop:function(){return!1},isScrollableContentAtBottom:function(){return!1},registerWindowEventHandler:function(){},deregisterWindowEventHandler:function(){}}},enumerable:!1,configurable:!0}),o.prototype.init=function(){this.adapter.hasClass(S.STACKED)&&this.setAutoStackButtons(!1),this.isFullscreen=this.adapter.hasClass(S.FULLSCREEN)},o.prototype.destroy=function(){this.animationTimer&&(clearTimeout(this.animationTimer),this.handleAnimationTimerEnd()),this.isFullscreen&&this.adapter.deregisterContentEventHandler(\"scroll\",this.contentScrollHandler),this.animFrame.cancelAll(),this.adapter.deregisterWindowEventHandler(\"resize\",this.windowResizeHandler),this.adapter.deregisterWindowEventHandler(\"orientationchange\",this.windowOrientationChangeHandler)},o.prototype.open=function(t){var e=this;this.dialogOpen=!0,this.adapter.notifyOpening(),this.adapter.addClass(S.OPENING),this.isFullscreen&&this.adapter.registerContentEventHandler(\"scroll\",this.contentScrollHandler),t&&t.isAboveFullscreenDialog&&this.adapter.addClass(S.SCRIM_HIDDEN),this.adapter.registerWindowEventHandler(\"resize\",this.windowResizeHandler),this.adapter.registerWindowEventHandler(\"orientationchange\",this.windowOrientationChangeHandler),this.runNextAnimationFrame((function(){e.adapter.addClass(S.OPEN),e.adapter.addBodyClass(S.SCROLL_LOCK),e.layout(),e.animationTimer=setTimeout((function(){e.handleAnimationTimerEnd(),e.adapter.trapFocus(e.adapter.getInitialFocusEl()),e.adapter.notifyOpened()}),C.DIALOG_ANIMATION_OPEN_TIME_MS)}))},o.prototype.close=function(t){var e=this;void 0===t&&(t=\"\"),this.dialogOpen&&(this.dialogOpen=!1,this.adapter.notifyClosing(t),this.adapter.addClass(S.CLOSING),this.adapter.removeClass(S.OPEN),this.adapter.removeBodyClass(S.SCROLL_LOCK),this.isFullscreen&&this.adapter.deregisterContentEventHandler(\"scroll\",this.contentScrollHandler),this.adapter.deregisterWindowEventHandler(\"resize\",this.windowResizeHandler),this.adapter.deregisterWindowEventHandler(\"orientationchange\",this.windowOrientationChangeHandler),cancelAnimationFrame(this.animationFrame),this.animationFrame=0,clearTimeout(this.animationTimer),this.animationTimer=setTimeout((function(){e.adapter.releaseFocus(),e.handleAnimationTimerEnd(),e.adapter.notifyClosed(t)}),C.DIALOG_ANIMATION_CLOSE_TIME_MS))},o.prototype.showSurfaceScrim=function(){var t=this;this.adapter.addClass(S.SURFACE_SCRIM_SHOWING),this.runNextAnimationFrame((function(){t.adapter.addClass(S.SURFACE_SCRIM_SHOWN)}))},o.prototype.hideSurfaceScrim=function(){this.adapter.removeClass(S.SURFACE_SCRIM_SHOWN),this.adapter.addClass(S.SURFACE_SCRIM_HIDING)},o.prototype.handleSurfaceScrimTransitionEnd=function(){this.adapter.removeClass(S.SURFACE_SCRIM_HIDING),this.adapter.removeClass(S.SURFACE_SCRIM_SHOWING)},o.prototype.isOpen=function(){return this.dialogOpen},o.prototype.getEscapeKeyAction=function(){return this.escapeKeyAction},o.prototype.setEscapeKeyAction=function(t){this.escapeKeyAction=t},o.prototype.getScrimClickAction=function(){return this.scrimClickAction},o.prototype.setScrimClickAction=function(t){this.scrimClickAction=t},o.prototype.getAutoStackButtons=function(){return this.autoStackButtons},o.prototype.setAutoStackButtons=function(t){this.autoStackButtons=t},o.prototype.getSuppressDefaultPressSelector=function(){return this.suppressDefaultPressSelector},o.prototype.setSuppressDefaultPressSelector=function(t){this.suppressDefaultPressSelector=t},o.prototype.layout=function(){var t=this;this.animFrame.request(E.POLL_LAYOUT_CHANGE,(function(){t.layoutInternal()}))},o.prototype.handleClick=function(t){if(this.adapter.eventTargetMatches(t.target,w.SCRIM_SELECTOR)&&\"\"!==this.scrimClickAction)this.close(this.scrimClickAction);else{var e=this.adapter.getActionFromEvent(t);e&&this.close(e)}},o.prototype.handleKeydown=function(t){var e=\"Enter\"===t.key||13===t.keyCode;if(e&&!this.adapter.getActionFromEvent(t)){var i=t.composedPath?t.composedPath()[0]:t.target,o=!this.suppressDefaultPressSelector||!this.adapter.eventTargetMatches(i,this.suppressDefaultPressSelector);e&&o&&this.adapter.clickDefaultButton()}},o.prototype.handleDocumentKeydown=function(t){(\"Escape\"===t.key||27===t.keyCode)&&\"\"!==this.escapeKeyAction&&this.close(this.escapeKeyAction)},o.prototype.handleScrollEvent=function(){var t=this;this.animFrame.request(E.POLL_SCROLL_POS,(function(){t.toggleScrollDividerHeader(),t.toggleScrollDividerFooter()}))},o.prototype.layoutInternal=function(){this.autoStackButtons&&this.detectStackedButtons(),this.toggleScrollableClasses()},o.prototype.handleAnimationTimerEnd=function(){this.animationTimer=0,this.adapter.removeClass(S.OPENING),this.adapter.removeClass(S.CLOSING)},o.prototype.runNextAnimationFrame=function(t){var e=this;cancelAnimationFrame(this.animationFrame),this.animationFrame=requestAnimationFrame((function(){e.animationFrame=0,clearTimeout(e.animationTimer),e.animationTimer=setTimeout(t,0)}))},o.prototype.detectStackedButtons=function(){this.adapter.removeClass(S.STACKED);var t=this.adapter.areButtonsStacked();t&&this.adapter.addClass(S.STACKED),t!==this.areButtonsStacked&&(this.adapter.reverseButtons(),this.areButtonsStacked=t)},o.prototype.toggleScrollableClasses=function(){this.adapter.removeClass(S.SCROLLABLE),this.adapter.isContentScrollable()&&(this.adapter.addClass(S.SCROLLABLE),this.isFullscreen&&(this.toggleScrollDividerHeader(),this.toggleScrollDividerFooter()))},o.prototype.toggleScrollDividerHeader=function(){this.adapter.isScrollableContentAtTop()?this.adapter.hasClass(S.SCROLL_DIVIDER_HEADER)&&this.adapter.removeClass(S.SCROLL_DIVIDER_HEADER):this.adapter.addClass(S.SCROLL_DIVIDER_HEADER)},o.prototype.toggleScrollDividerFooter=function(){this.adapter.isScrollableContentAtBottom()?this.adapter.hasClass(S.SCROLL_DIVIDER_FOOTER)&&this.adapter.removeClass(S.SCROLL_DIVIDER_FOOTER):this.adapter.addClass(S.SCROLL_DIVIDER_FOOTER)},o}(i);function k(t){return void 0===t&&(t=window),!!function(t){void 0===t&&(t=window);var e=!1;try{var i={get passive(){return e=!0,!1}},o=function(){};t.document.addEventListener(\"test\",o,i),t.document.removeEventListener(\"test\",o,i)}catch(t){e=!1}return e}(t)&&{passive:!0}}const T=document.$blockingElements;class I extends d{constructor(){super(...arguments),this.hideActions=!1,this.stacked=!1,this.heading=\"\",this.scrimClickAction=\"close\",this.escapeKeyAction=\"close\",this.open=!1,this.defaultAction=\"close\",this.actionAttribute=\"dialogAction\",this.initialFocusAttribute=\"dialogInitialFocus\",this.initialSupressDefaultPressSelector=\"\",this.mdcFoundationClass=N,this.boundHandleClick=null,this.boundHandleKeydown=null,this.boundHandleDocumentKeydown=null}set suppressDefaultPressSelector(t){this.mdcFoundation?this.mdcFoundation.setSuppressDefaultPressSelector(t):this.initialSupressDefaultPressSelector=t}get suppressDefaultPressSelector(){return this.mdcFoundation?this.mdcFoundation.getSuppressDefaultPressSelector():this.initialSupressDefaultPressSelector}get primaryButton(){let t=this.primarySlot.assignedNodes();t=t.filter((t=>t instanceof HTMLElement));const e=t[0];return e||null}emitNotification(t,e){const i=new CustomEvent(t,{detail:e?{action:e}:{}});this.dispatchEvent(i)}getInitialFocusEl(){const t=`[${this.initialFocusAttribute}]`,e=this.querySelector(t);if(e)return e;const i=this.primarySlot.assignedNodes({flatten:!0}),o=this.searchNodeTreesForAttribute(i,this.initialFocusAttribute);if(o)return o;const n=this.secondarySlot.assignedNodes({flatten:!0}),a=this.searchNodeTreesForAttribute(n,this.initialFocusAttribute);if(a)return a;const d=this.contentSlot.assignedNodes({flatten:!0});return this.searchNodeTreesForAttribute(d,this.initialFocusAttribute)}searchNodeTreesForAttribute(t,e){for(const i of t)if(i instanceof HTMLElement){if(i.hasAttribute(e))return i;{const t=i.querySelector(`[${e}]`);if(t)return t}}return null}createAdapter(){return Object.assign(Object.assign({},r(this.mdcRoot)),{addBodyClass:()=>document.body.style.overflow=\"hidden\",removeBodyClass:()=>document.body.style.overflow=\"\",areButtonsStacked:()=>this.stacked,clickDefaultButton:()=>{const t=this.primaryButton;t&&t.click()},eventTargetMatches:(t,e)=>!!t&&s(t,e),getActionFromEvent:t=>{if(!t.target)return\"\";const e=c(t.target,`[${this.actionAttribute}]`);return e&&e.getAttribute(this.actionAttribute)},getInitialFocusEl:()=>this.getInitialFocusEl(),isContentScrollable:()=>{const t=this.contentElement;return!!t&&t.scrollHeight>t.offsetHeight},notifyClosed:t=>this.emitNotification(\"closed\",t),notifyClosing:t=>{this.closingDueToDisconnect||(this.open=!1),this.emitNotification(\"closing\",t)},notifyOpened:()=>this.emitNotification(\"opened\"),notifyOpening:()=>{this.open=!0,this.emitNotification(\"opening\")},reverseButtons:()=>{},releaseFocus:()=>{T.remove(this)},trapFocus:t=>{this.isConnected&&(T.push(this),t&&t.focus())},registerContentEventHandler:(t,e)=>{this.contentElement.addEventListener(t,e)},deregisterContentEventHandler:(t,e)=>{this.contentElement.removeEventListener(t,e)},isScrollableContentAtTop:()=>{const t=this.contentElement;return!!t&&0===t.scrollTop},isScrollableContentAtBottom:()=>{const t=this.contentElement;return!!t&&Math.ceil(t.scrollHeight-t.scrollTop)===t.clientHeight},registerWindowEventHandler:(t,e)=>{window.addEventListener(t,e,k())},deregisterWindowEventHandler:(t,e)=>{window.removeEventListener(t,e,k())}})}render(){const t={[S.STACKED]:this.stacked};let e=l``;this.heading&&(e=this.renderHeading());const i={\"mdc-dialog__actions\":!this.hideActions};return l`\n    <div class=\"mdc-dialog ${m(t)}\"\n        role=\"alertdialog\"\n        aria-modal=\"true\"\n        aria-labelledby=\"title\"\n        aria-describedby=\"content\">\n      <div class=\"mdc-dialog__container\">\n        <div class=\"mdc-dialog__surface\">\n          ${e}\n          <div id=\"content\" class=\"mdc-dialog__content\">\n            <slot id=\"contentSlot\"></slot>\n          </div>\n          <footer\n              id=\"actions\"\n              class=\"${m(i)}\">\n            <span>\n              <slot name=\"secondaryAction\"></slot>\n            </span>\n            <span>\n             <slot name=\"primaryAction\"></slot>\n            </span>\n          </footer>\n        </div>\n      </div>\n      <div class=\"mdc-dialog__scrim\"></div>\n    </div>`}renderHeading(){return l`\n      <h2 id=\"title\" class=\"mdc-dialog__title\">${this.heading}</h2>`}firstUpdated(){super.firstUpdated(),this.mdcFoundation.setAutoStackButtons(!0),this.initialSupressDefaultPressSelector?this.suppressDefaultPressSelector=this.initialSupressDefaultPressSelector:this.suppressDefaultPressSelector=[this.suppressDefaultPressSelector,\"mwc-textarea\",\"mwc-menu mwc-list-item\",\"mwc-select mwc-list-item\"].join(\", \"),this.boundHandleClick=this.mdcFoundation.handleClick.bind(this.mdcFoundation),this.boundHandleKeydown=this.mdcFoundation.handleKeydown.bind(this.mdcFoundation),this.boundHandleDocumentKeydown=this.mdcFoundation.handleDocumentKeydown.bind(this.mdcFoundation)}connectedCallback(){super.connectedCallback(),this.open&&this.mdcFoundation&&!this.mdcFoundation.isOpen()&&(this.setEventListeners(),this.mdcFoundation.open())}disconnectedCallback(){super.disconnectedCallback(),this.open&&this.mdcFoundation&&(this.removeEventListeners(),this.closingDueToDisconnect=!0,this.mdcFoundation.close(this.currentAction||this.defaultAction),this.closingDueToDisconnect=!1,this.currentAction=void 0,T.remove(this))}forceLayout(){this.mdcFoundation.layout()}focus(){const t=this.getInitialFocusEl();t&&t.focus()}blur(){if(!this.shadowRoot)return;const t=this.shadowRoot.activeElement;if(t)t instanceof HTMLElement&&t.blur();else{const t=this.getRootNode(),e=t instanceof Document?t.activeElement:null;e instanceof HTMLElement&&e.blur()}}setEventListeners(){this.boundHandleClick&&this.mdcRoot.addEventListener(\"click\",this.boundHandleClick),this.boundHandleKeydown&&this.mdcRoot.addEventListener(\"keydown\",this.boundHandleKeydown,k()),this.boundHandleDocumentKeydown&&document.addEventListener(\"keydown\",this.boundHandleDocumentKeydown,k())}removeEventListeners(){this.boundHandleClick&&this.mdcRoot.removeEventListener(\"click\",this.boundHandleClick),this.boundHandleKeydown&&this.mdcRoot.removeEventListener(\"keydown\",this.boundHandleKeydown),this.boundHandleDocumentKeydown&&document.removeEventListener(\"keydown\",this.boundHandleDocumentKeydown)}close(){this.open=!1}show(){this.open=!0}}o([n(\".mdc-dialog\")],I.prototype,\"mdcRoot\",void 0),o([n('slot[name=\"primaryAction\"]')],I.prototype,\"primarySlot\",void 0),o([n('slot[name=\"secondaryAction\"]')],I.prototype,\"secondarySlot\",void 0),o([n(\"#contentSlot\")],I.prototype,\"contentSlot\",void 0),o([n(\".mdc-dialog__content\")],I.prototype,\"contentElement\",void 0),o([n(\".mdc-container\")],I.prototype,\"conatinerElement\",void 0),o([a({type:Boolean})],I.prototype,\"hideActions\",void 0),o([a({type:Boolean}),v((function(){this.forceLayout()}))],I.prototype,\"stacked\",void 0),o([a({type:String})],I.prototype,\"heading\",void 0),o([a({type:String}),v((function(t){this.mdcFoundation.setScrimClickAction(t)}))],I.prototype,\"scrimClickAction\",void 0),o([a({type:String}),v((function(t){this.mdcFoundation.setEscapeKeyAction(t)}))],I.prototype,\"escapeKeyAction\",void 0),o([a({type:Boolean,reflect:!0}),v((function(t){this.mdcFoundation&&this.isConnected&&(t?(this.setEventListeners(),this.mdcFoundation.open()):(this.removeEventListeners(),this.mdcFoundation.close(this.currentAction||this.defaultAction),this.currentAction=void 0))}))],I.prototype,\"open\",void 0),o([a()],I.prototype,\"defaultAction\",void 0),o([a()],I.prototype,\"actionAttribute\",void 0),o([a()],I.prototype,\"initialFocusAttribute\",void 0);const O=u`.mdc-dialog .mdc-dialog__surface{background-color:#fff;background-color:var(--mdc-theme-surface, #fff)}.mdc-dialog .mdc-dialog__scrim{background-color:rgba(0,0,0,.32)}.mdc-dialog .mdc-dialog__surface-scrim{background-color:rgba(0,0,0,.32)}.mdc-dialog .mdc-dialog__title{color:rgba(0,0,0,.87)}.mdc-dialog .mdc-dialog__content{color:rgba(0,0,0,.6)}.mdc-dialog .mdc-dialog__close{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-dialog .mdc-dialog__close .mdc-icon-button__ripple::before,.mdc-dialog .mdc-dialog__close .mdc-icon-button__ripple::after{background-color:#000;background-color:var(--mdc-ripple-color, var(--mdc-theme-on-surface, #000))}.mdc-dialog .mdc-dialog__close:hover .mdc-icon-button__ripple::before,.mdc-dialog .mdc-dialog__close.mdc-ripple-surface--hover .mdc-icon-button__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-dialog .mdc-dialog__close.mdc-ripple-upgraded--background-focused .mdc-icon-button__ripple::before,.mdc-dialog .mdc-dialog__close:not(.mdc-ripple-upgraded):focus .mdc-icon-button__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-dialog .mdc-dialog__close:not(.mdc-ripple-upgraded) .mdc-icon-button__ripple::after{transition:opacity 150ms linear}.mdc-dialog .mdc-dialog__close:not(.mdc-ripple-upgraded):active .mdc-icon-button__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-dialog .mdc-dialog__close.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-dialog.mdc-dialog--scrollable .mdc-dialog__title,.mdc-dialog.mdc-dialog--scrollable .mdc-dialog__actions,.mdc-dialog.mdc-dialog--scrollable.mdc-dialog-scroll-divider-footer .mdc-dialog__actions{border-color:rgba(0,0,0,.12)}.mdc-dialog.mdc-dialog--scrollable .mdc-dialog__title{border-bottom:1px solid rgba(0,0,0,.12);margin-bottom:0}.mdc-dialog.mdc-dialog-scroll-divider-header.mdc-dialog--fullscreen .mdc-dialog__header{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0,0,0,.12)}.mdc-dialog .mdc-dialog__surface{border-radius:4px;border-radius:var(--mdc-shape-medium, 4px)}.mdc-dialog__surface{box-shadow:0px 11px 15px -7px rgba(0, 0, 0, 0.2),0px 24px 38px 3px rgba(0, 0, 0, 0.14),0px 9px 46px 8px rgba(0,0,0,.12)}.mdc-dialog__title{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-headline6-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1.25rem;font-size:var(--mdc-typography-headline6-font-size, 1.25rem);line-height:2rem;line-height:var(--mdc-typography-headline6-line-height, 2rem);font-weight:500;font-weight:var(--mdc-typography-headline6-font-weight, 500);letter-spacing:0.0125em;letter-spacing:var(--mdc-typography-headline6-letter-spacing, 0.0125em);text-decoration:inherit;text-decoration:var(--mdc-typography-headline6-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-headline6-text-transform, inherit)}.mdc-dialog__content{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-body1-font-size, 1rem);line-height:1.5rem;line-height:var(--mdc-typography-body1-line-height, 1.5rem);font-weight:400;font-weight:var(--mdc-typography-body1-font-weight, 400);letter-spacing:0.03125em;letter-spacing:var(--mdc-typography-body1-letter-spacing, 0.03125em);text-decoration:inherit;text-decoration:var(--mdc-typography-body1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body1-text-transform, inherit)}.mdc-elevation-overlay{position:absolute;border-radius:inherit;pointer-events:none;opacity:0;opacity:var(--mdc-elevation-overlay-opacity, 0);transition:opacity 280ms cubic-bezier(0.4, 0, 0.2, 1);background-color:#fff;background-color:var(--mdc-elevation-overlay-color, #fff)}.mdc-dialog,.mdc-dialog__scrim{position:fixed;top:0;left:0;align-items:center;justify-content:center;box-sizing:border-box;width:100%;height:100%}.mdc-dialog{display:none;z-index:7;z-index:var(--mdc-dialog-z-index, 7)}.mdc-dialog .mdc-dialog__content{padding:20px 24px 20px 24px}.mdc-dialog .mdc-dialog__surface{min-width:280px}@media(max-width: 592px){.mdc-dialog .mdc-dialog__surface{max-width:calc(100vw - 32px)}}@media(min-width: 592px){.mdc-dialog .mdc-dialog__surface{max-width:560px}}.mdc-dialog .mdc-dialog__surface{max-height:calc(100% - 32px)}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-width:none}@media(max-width: 960px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-height:560px;width:560px}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{right:-12px}}@media(max-width: 720px)and (max-width: 672px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{width:calc(100vw - 112px)}}@media(max-width: 720px)and (min-width: 672px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{width:560px}}@media(max-width: 720px)and (max-height: 720px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-height:calc(100vh - 160px)}}@media(max-width: 720px)and (min-height: 720px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{max-height:560px}}@media(max-width: 720px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{right:-12px}}@media(max-width: 720px)and (max-height: 400px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{height:100%;max-height:100vh;max-width:100vw;width:100vw;border-radius:0}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{order:-1;left:-12px}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__header{padding:0 16px 9px;justify-content:flex-start}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__title{margin-left:calc(16px - 2 * 12px)}}@media(max-width: 600px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{height:100%;max-height:100vh;max-width:100vw;width:100vw;border-radius:0}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{order:-1;left:-12px}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__header{padding:0 16px 9px;justify-content:flex-start}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__title{margin-left:calc(16px - 2 * 12px)}}@media(min-width: 960px){.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface{width:calc(100vw - 400px)}.mdc-dialog.mdc-dialog--fullscreen .mdc-dialog__surface .mdc-dialog__close{right:-12px}}.mdc-dialog.mdc-dialog__scrim--hidden .mdc-dialog__scrim{opacity:0}.mdc-dialog__scrim{opacity:0;z-index:-1}.mdc-dialog__container{display:flex;flex-direction:row;align-items:center;justify-content:space-around;box-sizing:border-box;height:100%;transform:scale(0.8);opacity:0;pointer-events:none}.mdc-dialog__surface{position:relative;display:flex;flex-direction:column;flex-grow:0;flex-shrink:0;box-sizing:border-box;max-width:100%;max-height:100%;pointer-events:auto;overflow-y:auto}.mdc-dialog__surface .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}[dir=rtl] .mdc-dialog__surface,.mdc-dialog__surface[dir=rtl]{text-align:right}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-dialog__surface{outline:2px solid windowText}}.mdc-dialog__surface::before{position:absolute;box-sizing:border-box;width:100%;height:100%;top:0;left:0;border:2px solid transparent;border-radius:inherit;content:\"\";pointer-events:none}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.mdc-dialog__surface::before{content:none}}.mdc-dialog__title{display:block;margin-top:0;position:relative;flex-shrink:0;box-sizing:border-box;margin:0 0 1px;padding:0 24px 9px}.mdc-dialog__title::before{display:inline-block;width:0;height:40px;content:\"\";vertical-align:0}[dir=rtl] .mdc-dialog__title,.mdc-dialog__title[dir=rtl]{text-align:right}.mdc-dialog--scrollable .mdc-dialog__title{margin-bottom:1px;padding-bottom:15px}.mdc-dialog--fullscreen .mdc-dialog__header{align-items:baseline;border-bottom:1px solid transparent;display:inline-flex;justify-content:space-between;padding:0 24px 9px;z-index:1}.mdc-dialog--fullscreen .mdc-dialog__header .mdc-dialog__close{right:-12px}.mdc-dialog--fullscreen .mdc-dialog__title{margin-bottom:0;padding:0;border-bottom:0}.mdc-dialog--fullscreen.mdc-dialog--scrollable .mdc-dialog__title{border-bottom:0;margin-bottom:0}.mdc-dialog--fullscreen .mdc-dialog__close{top:5px}.mdc-dialog--fullscreen.mdc-dialog--scrollable .mdc-dialog__actions{border-top:1px solid transparent}.mdc-dialog__content{flex-grow:1;box-sizing:border-box;margin:0;overflow:auto;-webkit-overflow-scrolling:touch}.mdc-dialog__content>:first-child{margin-top:0}.mdc-dialog__content>:last-child{margin-bottom:0}.mdc-dialog__title+.mdc-dialog__content,.mdc-dialog__header+.mdc-dialog__content{padding-top:0}.mdc-dialog--scrollable .mdc-dialog__title+.mdc-dialog__content{padding-top:8px;padding-bottom:8px}.mdc-dialog__content .mdc-deprecated-list:first-child:last-child{padding:6px 0 0}.mdc-dialog--scrollable .mdc-dialog__content .mdc-deprecated-list:first-child:last-child{padding:0}.mdc-dialog__actions{display:flex;position:relative;flex-shrink:0;flex-wrap:wrap;align-items:center;justify-content:flex-end;box-sizing:border-box;min-height:52px;margin:0;padding:8px;border-top:1px solid transparent}.mdc-dialog--stacked .mdc-dialog__actions{flex-direction:column;align-items:flex-end}.mdc-dialog__button{margin-left:8px;margin-right:0;max-width:100%;text-align:right}[dir=rtl] .mdc-dialog__button,.mdc-dialog__button[dir=rtl]{margin-left:0;margin-right:8px}.mdc-dialog__button:first-child{margin-left:0;margin-right:0}[dir=rtl] .mdc-dialog__button:first-child,.mdc-dialog__button:first-child[dir=rtl]{margin-left:0;margin-right:0}[dir=rtl] .mdc-dialog__button,.mdc-dialog__button[dir=rtl]{text-align:left}.mdc-dialog--stacked .mdc-dialog__button:not(:first-child){margin-top:12px}.mdc-dialog--open,.mdc-dialog--opening,.mdc-dialog--closing{display:flex}.mdc-dialog--opening .mdc-dialog__scrim{transition:opacity 150ms linear}.mdc-dialog--opening .mdc-dialog__container{transition:opacity 75ms linear,transform 150ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-dialog--closing .mdc-dialog__scrim,.mdc-dialog--closing .mdc-dialog__container{transition:opacity 75ms linear}.mdc-dialog--closing .mdc-dialog__container{transform:none}.mdc-dialog--open .mdc-dialog__scrim{opacity:1}.mdc-dialog--open .mdc-dialog__container{transform:none;opacity:1}.mdc-dialog--open.mdc-dialog__surface-scrim--shown .mdc-dialog__surface-scrim{opacity:1;z-index:1}.mdc-dialog--open.mdc-dialog__surface-scrim--hiding .mdc-dialog__surface-scrim{transition:opacity 75ms linear}.mdc-dialog--open.mdc-dialog__surface-scrim--showing .mdc-dialog__surface-scrim{transition:opacity 150ms linear}.mdc-dialog__surface-scrim{display:none;opacity:0;position:absolute;width:100%;height:100%}.mdc-dialog__surface-scrim--shown .mdc-dialog__surface-scrim,.mdc-dialog__surface-scrim--showing .mdc-dialog__surface-scrim,.mdc-dialog__surface-scrim--hiding .mdc-dialog__surface-scrim{display:block}.mdc-dialog-scroll-lock{overflow:hidden}#actions:not(.mdc-dialog__actions){display:none}.mdc-dialog__surface{box-shadow:var(--mdc-dialog-box-shadow, 0px 11px 15px -7px rgba(0, 0, 0, 0.2), 0px 24px 38px 3px rgba(0, 0, 0, 0.14), 0px 9px 46px 8px rgba(0, 0, 0, 0.12))}@media(min-width: 560px){.mdc-dialog .mdc-dialog__surface{max-width:560px;max-width:var(--mdc-dialog-max-width, 560px)}}.mdc-dialog .mdc-dialog__scrim{background-color:rgba(0, 0, 0, 0.32);background-color:var(--mdc-dialog-scrim-color, rgba(0, 0, 0, 0.32))}.mdc-dialog .mdc-dialog__title{color:rgba(0, 0, 0, 0.87);color:var(--mdc-dialog-heading-ink-color, rgba(0, 0, 0, 0.87))}.mdc-dialog .mdc-dialog__content{color:rgba(0, 0, 0, 0.6);color:var(--mdc-dialog-content-ink-color, rgba(0, 0, 0, 0.6))}.mdc-dialog.mdc-dialog--scrollable .mdc-dialog__title,.mdc-dialog.mdc-dialog--scrollable .mdc-dialog__actions{border-color:rgba(0, 0, 0, 0.12);border-color:var(--mdc-dialog-scroll-divider-color, rgba(0, 0, 0, 0.12))}.mdc-dialog .mdc-dialog__surface{min-width:280px;min-width:var(--mdc-dialog-min-width, 280px)}.mdc-dialog .mdc-dialog__surface{max-height:var(--mdc-dialog-max-height, calc(100% - 32px))}#actions ::slotted(*){margin-left:8px;margin-right:0;max-width:100%;text-align:right}[dir=rtl] #actions ::slotted(*),#actions ::slotted(*[dir=rtl]){margin-left:0;margin-right:8px}[dir=rtl] #actions ::slotted(*),#actions ::slotted(*[dir=rtl]){text-align:left}.mdc-dialog--stacked #actions{flex-direction:column-reverse}.mdc-dialog--stacked #actions *:not(:last-child) ::slotted(*){flex-basis:.000000001px;margin-top:12px}`,D=(t,e)=>l`\n  <span class=\"header_title\">${e}</span>\n  <ha-icon-button\n    .label=${t.localize(\"ui.dialogs.generic.close\")}\n    .path=${b}\n    dialogAction=\"close\"\n    class=\"header_button\"\n  ></ha-icon-button>\n`;h([_(\"ha-dialog\")],(function(t,e){class i extends e{constructor(...e){super(...e),t(this)}}return{F:i,d:[{kind:\"field\",key:g,value:void 0},{kind:\"method\",key:\"scrollToPos\",value:function(t,e){var i;null===(i=this.contentElement)||void 0===i||i.scrollTo(t,e)}},{kind:\"method\",key:\"renderHeading\",value:function(){return l`<slot name=\"heading\"> ${p(f(i.prototype),\"renderHeading\",this).call(this)} </slot>`}},{kind:\"field\",static:!0,key:\"styles\",value:()=>[O,u`\n      .mdc-dialog {\n        --mdc-dialog-scroll-divider-color: var(--divider-color);\n        z-index: var(--dialog-z-index, 7);\n        -webkit-backdrop-filter: var(--dialog-backdrop-filter, none);\n        backdrop-filter: var(--dialog-backdrop-filter, none);\n      }\n      .mdc-dialog__actions {\n        justify-content: var(--justify-action-buttons, flex-end);\n        padding-bottom: max(env(safe-area-inset-bottom), 8px);\n      }\n      .mdc-dialog__actions span:nth-child(1) {\n        flex: var(--secondary-action-button-flex, unset);\n      }\n      .mdc-dialog__actions span:nth-child(2) {\n        flex: var(--primary-action-button-flex, unset);\n      }\n      .mdc-dialog__container {\n        align-items: var(--vertial-align-dialog, center);\n      }\n      .mdc-dialog__title::before {\n        display: block;\n        height: 20px;\n      }\n      .mdc-dialog .mdc-dialog__content {\n        position: var(--dialog-content-position, relative);\n        padding: var(--dialog-content-padding, 20px 24px);\n      }\n      :host([hideactions]) .mdc-dialog .mdc-dialog__content {\n        padding-bottom: max(\n          var(--dialog-content-padding, 20px),\n          env(safe-area-inset-bottom)\n        );\n      }\n      .mdc-dialog .mdc-dialog__surface {\n        position: var(--dialog-surface-position, relative);\n        top: var(--dialog-surface-top);\n        min-height: var(--mdc-dialog-min-height, auto);\n        border-radius: var(\n          --ha-dialog-border-radius,\n          var(--ha-card-border-radius, 4px)\n        );\n      }\n      :host([flexContent]) .mdc-dialog .mdc-dialog__content {\n        display: flex;\n        flex-direction: column;\n      }\n      .header_button {\n        position: absolute;\n        right: 16px;\n        top: 10px;\n        text-decoration: none;\n        color: inherit;\n      }\n      .header_title {\n        margin-right: 40px;\n        margin-inline-end: 40px;\n        margin-inline-start: initial;\n        direction: var(--direction);\n      }\n      .header_button {\n        inset-inline-start: initial;\n        inset-inline-end: 16px;\n        direction: var(--direction);\n      }\n      .dialog-actions {\n        inset-inline-start: initial !important;\n        inset-inline-end: 0px !important;\n        direction: var(--direction);\n      }\n    `]}]}}),I);export{D as c};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.c7df5815.js",
    "content": "import{a as e,h as t,Y as i,e as n,i as o,$ as r,L as l,N as a,r as d,n as s}from\"./main-a0d7432d.js\";import\"./c.c176780d.js\";e([s(\"ha-button-menu\")],(function(e,t){class s extends t{constructor(...t){super(...t),e(this)}}return{F:s,d:[{kind:\"field\",key:i,value:void 0},{kind:\"field\",decorators:[n()],key:\"corner\",value:()=>\"TOP_START\"},{kind:\"field\",decorators:[n()],key:\"menuCorner\",value:()=>\"START\"},{kind:\"field\",decorators:[n({type:Number})],key:\"x\",value:()=>null},{kind:\"field\",decorators:[n({type:Number})],key:\"y\",value:()=>null},{kind:\"field\",decorators:[n({type:Boolean})],key:\"multi\",value:()=>!1},{kind:\"field\",decorators:[n({type:Boolean})],key:\"activatable\",value:()=>!1},{kind:\"field\",decorators:[n({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[n({type:Boolean})],key:\"fixed\",value:()=>!1},{kind:\"field\",decorators:[o(\"mwc-menu\",!0)],key:\"_menu\",value:void 0},{kind:\"get\",key:\"items\",value:function(){var e;return null===(e=this._menu)||void 0===e?void 0:e.items}},{kind:\"get\",key:\"selected\",value:function(){var e;return null===(e=this._menu)||void 0===e?void 0:e.selected}},{kind:\"method\",key:\"focus\",value:function(){var e,t;null!==(e=this._menu)&&void 0!==e&&e.open?this._menu.focusItemAtIndex(0):null===(t=this._triggerButton)||void 0===t||t.focus()}},{kind:\"method\",key:\"render\",value:function(){return r`\n      <div @click=${this._handleClick}>\n        <slot name=\"trigger\" @slotchange=${this._setTriggerAria}></slot>\n      </div>\n      <mwc-menu\n        .corner=${this.corner}\n        .menuCorner=${this.menuCorner}\n        .fixed=${this.fixed}\n        .multi=${this.multi}\n        .activatable=${this.activatable}\n        .y=${this.y}\n        .x=${this.x}\n      >\n        <slot></slot>\n      </mwc-menu>\n    `}},{kind:\"method\",key:\"firstUpdated\",value:function(e){l(a(s.prototype),\"firstUpdated\",this).call(this,e),\"rtl\"===document.dir&&this.updateComplete.then((()=>{this.querySelectorAll(\"mwc-list-item\").forEach((e=>{const t=document.createElement(\"style\");t.innerHTML=\"span.material-icons:first-of-type { margin-left: var(--mdc-list-item-graphic-margin, 32px) !important; margin-right: 0px !important;}\",e.shadowRoot.appendChild(t)}))}))}},{kind:\"method\",key:\"_handleClick\",value:function(){this.disabled||(this._menu.anchor=this,this._menu.show())}},{kind:\"get\",key:\"_triggerButton\",value:function(){return this.querySelector('ha-icon-button[slot=\"trigger\"], mwc-button[slot=\"trigger\"]')}},{kind:\"method\",key:\"_setTriggerAria\",value:function(){this._triggerButton&&(this._triggerButton.ariaHasPopup=\"menu\")}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return d`\n      :host {\n        display: inline-block;\n        position: relative;\n      }\n      ::slotted([disabled]) {\n        color: var(--disabled-text-color);\n      }\n    `}}]}}),t);\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.c98162aa.js",
    "content": "import{a as e,h as t,e as o,$ as r,aM as i,r as a,n as s,o as d,aL as n,d as c}from\"./main-a0d7432d.js\";import\"./c.88ebfd3e.js\";import\"./c.c176780d.js\";import\"./c.936d9772.js\";import\"./c.5ede7966.js\";import\"./c.c7df5815.js\";import\"./c.d2d70fc0.js\";e([s(\"ha-icon-overflow-menu\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[o({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[o({type:Array})],key:\"items\",value:()=>[]},{kind:\"field\",decorators:[o({type:Boolean})],key:\"narrow\",value:()=>!1},{kind:\"method\",key:\"render\",value:function(){return r`\n      ${this.narrow?r` <!-- Collapsed representation for small screens -->\n            <ha-button-menu\n              @click=${this._handleIconOverflowMenuOpened}\n              @closed=${this._handleIconOverflowMenuClosed}\n              class=\"ha-icon-overflow-menu-overflow\"\n              corner=\"BOTTOM_START\"\n              absolute\n            >\n              <ha-icon-button\n                .label=${this.hass.localize(\"ui.common.overflow_menu\")}\n                .path=${i}\n                slot=\"trigger\"\n              ></ha-icon-button>\n\n              ${this.items.map((e=>r`\n                  <mwc-list-item\n                    graphic=\"icon\"\n                    .disabled=${e.disabled}\n                    @click=${e.action}\n                  >\n                    <div slot=\"graphic\">\n                      <ha-svg-icon .path=${e.path}></ha-svg-icon>\n                    </div>\n                    ${e.label}\n                  </mwc-list-item>\n                `))}\n            </ha-button-menu>`:r`\n            <!-- Icon representation for big screens -->\n            ${this.items.map((e=>e.narrowOnly?\"\":r`<div>\n                    ${e.tooltip?r`<paper-tooltip animation-delay=\"0\" position=\"left\">\n                          ${e.tooltip}\n                        </paper-tooltip>`:\"\"}\n                    <ha-icon-button\n                      @click=${e.action}\n                      .label=${e.label}\n                      .path=${e.path}\n                      .disabled=${e.disabled}\n                    ></ha-icon-button>\n                  </div> `))}\n          `}\n    `}},{kind:\"method\",key:\"_handleIconOverflowMenuOpened\",value:function(){const e=this.closest(\".mdc-data-table__row\");e&&(e.style.zIndex=\"1\")}},{kind:\"method\",key:\"_handleIconOverflowMenuClosed\",value:function(){const e=this.closest(\".mdc-data-table__row\");e&&(e.style.zIndex=\"\")}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return a`\n      :host {\n        display: flex;\n        justify-content: flex-end;\n      }\n    `}}]}}),t);const l=e=>t=>({kind:\"method\",placement:\"prototype\",key:t.key,descriptor:{set(e){this[`__${String(t.key)}`]=e},get(){return this[`__${String(t.key)}`]},enumerable:!0,configurable:!0},finisher(o){const r=o.prototype.connectedCallback;o.prototype.connectedCallback=function(){if(r.call(this),this[t.key]){const o=this.renderRoot.querySelector(e);if(!o)return;o.scrollTop=this[t.key]}}}});e([s(\"hacs-repository-card\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[o({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[o({attribute:!1})],key:\"hacs\",value:void 0},{kind:\"field\",decorators:[o({attribute:!1})],key:\"repository\",value:void 0},{kind:\"field\",decorators:[o({type:Boolean})],key:\"narrow\",value:void 0},{kind:\"get\",key:\"_borderClass\",value:function(){const e={};return this.hacs.addedToLovelace(this.hacs,this.repository)&&\"pending-restart\"!==this.repository.status?this.repository.pending_upgrade?e[\"status-update\"]=!0:this.repository.new&&!this.repository.installed&&(e[\"status-new\"]=!0):e[\"status-issue\"]=!0,0!==Object.keys(e).length&&(e[\"status-border\"]=!0),e}},{kind:\"get\",key:\"_headerClass\",value:function(){const e={};return this.hacs.addedToLovelace(this.hacs,this.repository)&&\"pending-restart\"!==this.repository.status?this.repository.pending_upgrade?e[\"update-header\"]=!0:this.repository.new&&!this.repository.installed?e[\"new-header\"]=!0:e[\"default-header\"]=!0:e[\"issue-header\"]=!0,e}},{kind:\"get\",key:\"_headerTitle\",value:function(){return this.hacs.addedToLovelace(this.hacs,this.repository)?\"pending-restart\"===this.repository.status?this.hacs.localize(\"repository_card.pending_restart\"):this.repository.pending_upgrade?this.hacs.localize(\"repository_card.pending_update\"):this.repository.new&&!this.repository.installed?this.hacs.localize(\"repository_card.new_repository\"):\"\":this.hacs.localize(\"repository_card.not_loaded\")}},{kind:\"method\",key:\"render\",value:function(){return r`\n      <a href=\"/hacs/repository/${this.repository.id}\">\n        <ha-card class=${d(this._borderClass)} ?narrow=${this.narrow} outlined>\n          <div class=\"card-content\">\n            <div class=\"group-header\">\n              <div class=\"status-header ${d(this._headerClass)}\">${this._headerTitle}</div>\n\n              <div class=\"title pointer\">\n                <h1>${this.repository.name}</h1>\n                ${\"integration\"!==this.repository.category?r` <ha-chip>\n                      ${this.hacs.localize(`common.${this.repository.category}`)}\n                    </ha-chip>`:\"\"}\n              </div>\n            </div>\n            <div class=\"description\">${this.repository.description}</div>\n          </div>\n          <div class=\"card-actions\">\n            ${this.repository.new&&!this.repository.installed?r`<div>\n                  <mwc-button class=\"status-new\" @click=${this._setNotNew}>\n                    ${this.hacs.localize(\"repository_card.dismiss\")}\n                  </mwc-button>\n                </div>`:this.repository.pending_upgrade&&this.hacs.addedToLovelace(this.hacs,this.repository)?r`<div>\n                  <mwc-button class=\"update-header\" @click=${this._updateRepository} raised>\n                    ${this.hacs.localize(\"common.update\")}\n                  </mwc-button>\n                </div> `:\"\"}\n          </div>\n        </ha-card>\n      </a>\n    `}},{kind:\"method\",key:\"_updateRepository\",value:function(e){e.preventDefault(),this.dispatchEvent(new CustomEvent(\"hacs-dialog\",{detail:{type:\"update\",repository:this.repository.id},bubbles:!0,composed:!0}))}},{kind:\"method\",key:\"_setNotNew\",value:async function(e){e.preventDefault(),await n(this.hass,{repository:String(this.repository.id)})}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[c,a`\n        ha-card {\n          display: flex;\n          flex-direction: column;\n          height: 195px;\n          width: 480px;\n        }\n\n        .title {\n          display: flex;\n          justify-content: space-between;\n        }\n        .card-content {\n          padding: 0 0 3px 0;\n          height: 100%;\n        }\n        .card-actions {\n          border-top: none;\n          bottom: 0;\n          display: flex;\n          flex-direction: row-reverse;\n          justify-content: space-between;\n          align-items: center;\n          padding: 5px;\n        }\n        .group-header {\n          height: auto;\n          align-content: center;\n        }\n        .group-header h1 {\n          margin: 0;\n          padding: 8px 16px;\n          font-size: 22px;\n        }\n        h1 {\n          margin-top: 0;\n          min-height: 24px;\n        }\n        a {\n          all: unset;\n          cursor: pointer;\n        }\n\n        .description {\n          opacity: var(--dark-primary-opacity);\n          font-size: 14px;\n          padding: 8px 16px;\n          max-height: 52px;\n          overflow: hidden;\n        }\n\n        .status-new {\n          border-color: var(--hcv-color-new);\n          --mdc-theme-primary: var(--hcv-color-new);\n        }\n\n        .status-update {\n          border-color: var(--hcv-color-update);\n        }\n\n        .status-issue {\n          border-color: var(--hcv-color-error);\n        }\n\n        .new-header {\n          background-color: var(--hcv-color-new);\n          color: var(--hcv-text-color-on-background);\n        }\n\n        .issue-header {\n          background-color: var(--hcv-color-error);\n          color: var(--hcv-text-color-on-background);\n        }\n\n        .update-header {\n          background-color: var(--hcv-color-update);\n          color: var(--hcv-text-color-on-background);\n        }\n\n        .default-header {\n          padding: 2px 0 !important;\n        }\n\n        mwc-button.update-header {\n          --mdc-theme-primary: var(--hcv-color-update);\n          --mdc-theme-on-primary: var(--hcv-text-color-on-background);\n        }\n\n        .status-border {\n          border-style: solid;\n          border-width: min(var(--ha-card-border-width, 1px), 10px);\n        }\n\n        .status-header {\n          top: 0;\n          padding: 6px 1px;\n          margin: -1px;\n          width: 100%;\n          font-weight: 500;\n          text-align: center;\n          left: 0;\n          border-top-left-radius: var(--ha-card-border-radius, 4px);\n          border-top-right-radius: var(--ha-card-border-radius, 4px);\n        }\n\n        ha-card[narrow] {\n          width: calc(100% - 24px);\n          margin: 11px;\n        }\n\n        ha-chip {\n          padding: 4px;\n          margin-top: 3px;\n        }\n      `]}}]}}),t);export{l as r};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.d2d70fc0.js",
    "content": "import{a as t,h as e,e as r,$ as n,ah as i,ai as a,r as o,n as s}from\"./main-a0d7432d.js\";t([s(\"hacs-link\")],(function(t,e){return{F:class extends e{constructor(...e){super(...e),t(this)}},d:[{kind:\"field\",decorators:[r({type:Boolean})],key:\"newtab\",value:()=>!1},{kind:\"field\",decorators:[r({type:Boolean})],key:\"parent\",value:()=>!1},{kind:\"field\",decorators:[r()],key:\"title\",value:()=>\"\"},{kind:\"field\",decorators:[r()],key:\"url\",value:void 0},{kind:\"method\",key:\"render\",value:function(){return n`<span title=${this.title||this.url} @click=${this._open}><slot></slot></span>`}},{kind:\"method\",key:\"_open\",value:function(){var t;if(this.url.startsWith(\"/\")&&!this.newtab)return void i(this.url,{replace:!0});const e=null===(t=this.url)||void 0===t?void 0:t.startsWith(\"http\");let r=\"\",n=\"_blank\";e&&(r=\"noreferrer=true\"),e||this.newtab||(n=\"_blank\"),e||this.parent||(n=\"_parent\"),a.open(this.url,n,r)}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return o`\n      span {\n        cursor: pointer;\n        color: var(--hcv-text-color-link);\n        text-decoration: var(--hcv-text-decoration-link);\n      }\n    `}}]}}),e);\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.da8de431.js",
    "content": "let t=\"lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o\".split(\",\").map((t=>t?parseInt(t,36):1));for(let e=1;e<t.length;e++)t[e]+=t[e-1];function e(e){for(let i=1;i<t.length;i+=2)if(t[i]>e)return t[i-1]<=e;return!1}function i(t){return t>=127462&&t<=127487}function n(t,e,i=!0,n=!0){return(i?s:r)(t,e,n)}function s(t,n,s){if(n==t.length)return n;n&&o(t.charCodeAt(n))&&l(t.charCodeAt(n-1))&&n--;let r=h(t,n);for(n+=c(r);n<t.length;){let o=h(t,n);if(8205==r||8205==o||s&&e(o))n+=c(o),r=o;else{if(!i(o))break;{let e=0,s=n-2;for(;s>=0&&i(h(t,s));)e++,s-=2;if(e%2==0)break;n+=2}}}return n}function r(t,e,i){for(;e>0;){let n=s(t,e-2,i);if(n<e)return n;e--}return 0}function o(t){return t>=56320&&t<57344}function l(t){return t>=55296&&t<56320}function h(t,e){let i=t.charCodeAt(e);if(!l(i)||e+1==t.length)return i;let n=t.charCodeAt(e+1);return o(n)?n-56320+(i-55296<<10)+65536:i}function a(t){return t<=65535?String.fromCharCode(t):(t-=65536,String.fromCharCode(55296+(t>>10),56320+(1023&t)))}function c(t){return t<65536?1:2}function u(t,e,i=t.length){let s=0;for(let r=0;r<i;)9==t.charCodeAt(r)?(s+=e-s%e,r++):(s++,r=n(t,r));return s}function f(t,e,i,s){for(let s=0,r=0;;){if(r>=e)return s;if(s==t.length)break;r+=9==t.charCodeAt(s)?i-r%i:1,s=n(t,s)}return!0===s?-1:t.length}class d{constructor(){}lineAt(t){if(t<0||t>this.length)throw new RangeError(`Invalid position ${t} in document of length ${this.length}`);return this.lineInner(t,!1,1,0)}line(t){if(t<1||t>this.lines)throw new RangeError(`Invalid line number ${t} in ${this.lines}-line document`);return this.lineInner(t,!0,1,0)}replace(t,e,i){let n=[];return this.decompose(0,t,n,2),i.length&&i.decompose(0,i.length,n,3),this.decompose(e,this.length,n,1),m.from(n,this.length-(e-t)+i.length)}append(t){return this.replace(this.length,this.length,t)}slice(t,e=this.length){let i=[];return this.decompose(t,e,i,0),m.from(i,e-t)}eq(t){if(t==this)return!0;if(t.length!=this.length||t.lines!=this.lines)return!1;let e=this.scanIdentical(t,1),i=this.length-this.scanIdentical(t,-1),n=new w(this),s=new w(t);for(let t=e,r=e;;){if(n.next(t),s.next(t),t=0,n.lineBreak!=s.lineBreak||n.done!=s.done||n.value!=s.value)return!1;if(r+=n.value.length,n.done||r>=i)return!0}}iter(t=1){return new w(this,t)}iterRange(t,e=this.length){return new y(this,t,e)}iterLines(t,e){let i;if(null==t)i=this.iter();else{null==e&&(e=this.lines+1);let n=this.line(t).from;i=this.iterRange(n,Math.max(n,e==this.lines+1?this.length:e<=1?0:this.line(e-1).to))}return new b(i)}toString(){return this.sliceString(0)}toJSON(){let t=[];return this.flatten(t),t}static of(t){if(0==t.length)throw new RangeError(\"A document must have at least one line\");return 1!=t.length||t[0]?t.length<=32?new p(t):m.from(p.split(t,[])):d.empty}}class p extends d{constructor(t,e=function(t){let e=-1;for(let i of t)e+=i.length+1;return e}(t)){super(),this.text=t,this.length=e}get lines(){return this.text.length}get children(){return null}lineInner(t,e,i,n){for(let s=0;;s++){let r=this.text[s],o=n+r.length;if((e?i:o)>=t)return new x(n,o,i,r);n=o+1,i++}}decompose(t,e,i,n){let s=t<=0&&e>=this.length?this:new p(v(this.text,t,e),Math.min(e,this.length)-Math.max(0,t));if(1&n){let t=i.pop(),e=g(s.text,t.text.slice(),0,s.length);if(e.length<=32)i.push(new p(e,t.length+s.length));else{let t=e.length>>1;i.push(new p(e.slice(0,t)),new p(e.slice(t)))}}else i.push(s)}replace(t,e,i){if(!(i instanceof p))return super.replace(t,e,i);let n=g(this.text,g(i.text,v(this.text,0,t)),e),s=this.length+i.length-(e-t);return n.length<=32?new p(n,s):m.from(p.split(n,[]),s)}sliceString(t,e=this.length,i=\"\\n\"){let n=\"\";for(let s=0,r=0;s<=e&&r<this.text.length;r++){let o=this.text[r],l=s+o.length;s>t&&r&&(n+=i),t<l&&e>s&&(n+=o.slice(Math.max(0,t-s),e-s)),s=l+1}return n}flatten(t){for(let e of this.text)t.push(e)}scanIdentical(){return 0}static split(t,e){let i=[],n=-1;for(let s of t)i.push(s),n+=s.length+1,32==i.length&&(e.push(new p(i,n)),i=[],n=-1);return n>-1&&e.push(new p(i,n)),e}}class m extends d{constructor(t,e){super(),this.children=t,this.length=e,this.lines=0;for(let e of t)this.lines+=e.lines}lineInner(t,e,i,n){for(let s=0;;s++){let r=this.children[s],o=n+r.length,l=i+r.lines-1;if((e?l:o)>=t)return r.lineInner(t,e,i,n);n=o+1,i=l+1}}decompose(t,e,i,n){for(let s=0,r=0;r<=e&&s<this.children.length;s++){let o=this.children[s],l=r+o.length;if(t<=l&&e>=r){let s=n&((r<=t?1:0)|(l>=e?2:0));r>=t&&l<=e&&!s?i.push(o):o.decompose(t-r,e-r,i,s)}r=l+1}}replace(t,e,i){if(i.lines<this.lines)for(let n=0,s=0;n<this.children.length;n++){let r=this.children[n],o=s+r.length;if(t>=s&&e<=o){let l=r.replace(t-s,e-s,i),h=this.lines-r.lines+l.lines;if(l.lines<h>>4&&l.lines>h>>6){let s=this.children.slice();return s[n]=l,new m(s,this.length-(e-t)+i.length)}return super.replace(s,o,l)}s=o+1}return super.replace(t,e,i)}sliceString(t,e=this.length,i=\"\\n\"){let n=\"\";for(let s=0,r=0;s<this.children.length&&r<=e;s++){let o=this.children[s],l=r+o.length;r>t&&s&&(n+=i),t<l&&e>r&&(n+=o.sliceString(t-r,e-r,i)),r=l+1}return n}flatten(t){for(let e of this.children)e.flatten(t)}scanIdentical(t,e){if(!(t instanceof m))return 0;let i=0,[n,s,r,o]=e>0?[0,0,this.children.length,t.children.length]:[this.children.length-1,t.children.length-1,-1,-1];for(;;n+=e,s+=e){if(n==r||s==o)return i;let l=this.children[n],h=t.children[s];if(l!=h)return i+l.scanIdentical(h,e);i+=l.length+1}}static from(t,e=t.reduce(((t,e)=>t+e.length+1),-1)){let i=0;for(let e of t)i+=e.lines;if(i<32){let i=[];for(let e of t)e.flatten(i);return new p(i,e)}let n=Math.max(32,i>>5),s=n<<1,r=n>>1,o=[],l=0,h=-1,a=[];function c(t){let e;if(t.lines>s&&t instanceof m)for(let e of t.children)c(e);else t.lines>r&&(l>r||!l)?(u(),o.push(t)):t instanceof p&&l&&(e=a[a.length-1])instanceof p&&t.lines+e.lines<=32?(l+=t.lines,h+=t.length+1,a[a.length-1]=new p(e.text.concat(t.text),e.length+1+t.length)):(l+t.lines>n&&u(),l+=t.lines,h+=t.length+1,a.push(t))}function u(){0!=l&&(o.push(1==a.length?a[0]:m.from(a,h)),h=-1,l=a.length=0)}for(let e of t)c(e);return u(),1==o.length?o[0]:new m(o,e)}}function g(t,e,i=0,n=1e9){for(let s=0,r=0,o=!0;r<t.length&&s<=n;r++){let l=t[r],h=s+l.length;h>=i&&(h>n&&(l=l.slice(0,n-s)),s<i&&(l=l.slice(i-s)),o?(e[e.length-1]+=l,o=!1):e.push(l)),s=h+1}return e}function v(t,e,i){return g(t,[\"\"],e,i)}d.empty=new p([\"\"],0);class w{constructor(t,e=1){this.dir=e,this.done=!1,this.lineBreak=!1,this.value=\"\",this.nodes=[t],this.offsets=[e>0?1:(t instanceof p?t.text.length:t.children.length)<<1]}nextInner(t,e){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,n=this.nodes[i],s=this.offsets[i],r=s>>1,o=n instanceof p?n.text.length:n.children.length;if(r==(e>0?o:0)){if(0==i)return this.done=!0,this.value=\"\",this;e>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((1&s)==(e>0?0:1)){if(this.offsets[i]+=e,0==t)return this.lineBreak=!0,this.value=\"\\n\",this;t--}else if(n instanceof p){let s=n.text[r+(e<0?-1:0)];if(this.offsets[i]+=e,s.length>Math.max(0,t))return this.value=0==t?s:e>0?s.slice(t):s.slice(0,s.length-t),this;t-=s.length}else{let s=n.children[r+(e<0?-1:0)];t>s.length?(t-=s.length,this.offsets[i]+=e):(e<0&&this.offsets[i]--,this.nodes.push(s),this.offsets.push(e>0?1:(s instanceof p?s.text.length:s.children.length)<<1))}}}next(t=0){return t<0&&(this.nextInner(-t,-this.dir),t=this.value.length),this.nextInner(t,this.dir)}}class y{constructor(t,e,i){this.value=\"\",this.done=!1,this.cursor=new w(t,e>i?-1:1),this.pos=e>i?t.length:0,this.from=Math.min(e,i),this.to=Math.max(e,i)}nextInner(t,e){if(e<0?this.pos<=this.from:this.pos>=this.to)return this.value=\"\",this.done=!0,this;t+=Math.max(0,e<0?this.pos-this.to:this.from-this.pos);let i=e<0?this.pos-this.from:this.to-this.pos;t>i&&(t=i),i-=t;let{value:n}=this.cursor.next(t);return this.pos+=(n.length+t)*e,this.value=n.length<=i?n:e<0?n.slice(n.length-i):n.slice(0,i),this.done=!this.value,this}next(t=0){return t<0?t=Math.max(t,this.from-this.pos):t>0&&(t=Math.min(t,this.to-this.pos)),this.nextInner(t,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&\"\"!=this.value}}class b{constructor(t){this.inner=t,this.afterBreak=!0,this.value=\"\",this.done=!1}next(t=0){let{done:e,lineBreak:i,value:n}=this.inner.next(t);return e?(this.done=!0,this.value=\"\"):i?this.afterBreak?this.value=\"\":(this.afterBreak=!0,this.next()):(this.value=n,this.afterBreak=!1),this}get lineBreak(){return!1}}\"undefined\"!=typeof Symbol&&(d.prototype[Symbol.iterator]=function(){return this.iter()},w.prototype[Symbol.iterator]=y.prototype[Symbol.iterator]=b.prototype[Symbol.iterator]=function(){return this});class x{constructor(t,e,i,n){this.from=t,this.to=e,this.number=i,this.text=n}get length(){return this.to-this.from}}const k=/\\r\\n?|\\n/;var S=function(t){return t[t.Simple=0]=\"Simple\",t[t.TrackDel=1]=\"TrackDel\",t[t.TrackBefore=2]=\"TrackBefore\",t[t.TrackAfter=3]=\"TrackAfter\",t}(S||(S={}));class A{constructor(t){this.sections=t}get length(){let t=0;for(let e=0;e<this.sections.length;e+=2)t+=this.sections[e];return t}get newLength(){let t=0;for(let e=0;e<this.sections.length;e+=2){let i=this.sections[e+1];t+=i<0?this.sections[e]:i}return t}get empty(){return 0==this.sections.length||2==this.sections.length&&this.sections[1]<0}iterGaps(t){for(let e=0,i=0,n=0;e<this.sections.length;){let s=this.sections[e++],r=this.sections[e++];r<0?(t(i,n,s),n+=s):n+=r,i+=s}}iterChangedRanges(t,e=!1){O(this,t,e)}get invertedDesc(){let t=[];for(let e=0;e<this.sections.length;){let i=this.sections[e++],n=this.sections[e++];n<0?t.push(i,n):t.push(n,i)}return new A(t)}composeDesc(t){return this.empty?t:t.empty?this:R(this,t)}mapDesc(t,e=!1){return t.empty?this:T(this,t,e)}mapPos(t,e=-1,i=S.Simple){let n=0,s=0;for(let r=0;r<this.sections.length;){let o=this.sections[r++],l=this.sections[r++],h=n+o;if(l<0){if(h>t)return s+(t-n);s+=o}else{if(i!=S.Simple&&h>=t&&(i==S.TrackDel&&n<t&&h>t||i==S.TrackBefore&&n<t||i==S.TrackAfter&&h>t))return null;if(h>t||h==t&&e<0&&!o)return t==n||e<0?s:s+l;s+=l}n=h}if(t>n)throw new RangeError(`Position ${t} is out of range for changeset of length ${n}`);return s}touchesRange(t,e=t){for(let i=0,n=0;i<this.sections.length&&n<=e;){let s=n+this.sections[i++];if(this.sections[i++]>=0&&n<=e&&s>=t)return!(n<t&&s>e)||\"cover\";n=s}return!1}toString(){let t=\"\";for(let e=0;e<this.sections.length;){let i=this.sections[e++],n=this.sections[e++];t+=(t?\" \":\"\")+i+(n>=0?\":\"+n:\"\")}return t}toJSON(){return this.sections}static fromJSON(t){if(!Array.isArray(t)||t.length%2||t.some((t=>\"number\"!=typeof t)))throw new RangeError(\"Invalid JSON representation of ChangeDesc\");return new A(t)}}class C extends A{constructor(t,e){super(t),this.inserted=e}apply(t){if(this.length!=t.length)throw new RangeError(\"Applying change set to a document with the wrong length\");return O(this,((e,i,n,s,r)=>t=t.replace(n,n+(i-e),r)),!1),t}mapDesc(t,e=!1){return T(this,t,e,!0)}invert(t){let e=this.sections.slice(),i=[];for(let n=0,s=0;n<e.length;n+=2){let r=e[n],o=e[n+1];if(o>=0){e[n]=o,e[n+1]=r;let l=n>>1;for(;i.length<l;)i.push(d.empty);i.push(r?t.slice(s,s+r):d.empty)}s+=r}return new C(e,i)}compose(t){return this.empty?t:t.empty?this:R(this,t,!0)}map(t,e=!1){return t.empty?this:T(this,t,e,!0)}iterChanges(t,e=!1){O(this,t,e)}get desc(){return new A(this.sections)}filter(t){let e=[],i=[],n=[],s=new E(this);t:for(let r=0,o=0;;){let l=r==t.length?1e9:t[r++];for(;o<l||o==l&&0==s.len;){if(s.done)break t;let t=Math.min(s.len,l-o);M(n,t,-1);let r=-1==s.ins?-1:0==s.off?s.ins:0;M(e,t,r),r>0&&D(i,e,s.text),s.forward(t),o+=t}let h=t[r++];for(;o<h;){if(s.done)break t;let t=Math.min(s.len,h-o);M(e,t,-1),M(n,t,-1==s.ins?-1:0==s.off?s.ins:0),s.forward(t),o+=t}}return{changes:new C(e,i),filtered:new A(n)}}toJSON(){let t=[];for(let e=0;e<this.sections.length;e+=2){let i=this.sections[e],n=this.sections[e+1];n<0?t.push(i):0==n?t.push([i]):t.push([i].concat(this.inserted[e>>1].toJSON()))}return t}static of(t,e,i){let n=[],s=[],r=0,o=null;function l(t=!1){if(!t&&!n.length)return;r<e&&M(n,e-r,-1);let i=new C(n,s);o=o?o.compose(i.map(o)):i,n=[],s=[],r=0}return function t(h){if(Array.isArray(h))for(let e of h)t(e);else if(h instanceof C){if(h.length!=e)throw new RangeError(`Mismatched change set length (got ${h.length}, expected ${e})`);l(),o=o?o.compose(h.map(o)):h}else{let{from:t,to:o=t,insert:a}=h;if(t>o||t<0||o>e)throw new RangeError(`Invalid change range ${t} to ${o} (in doc of length ${e})`);let c=a?\"string\"==typeof a?d.of(a.split(i||k)):a:d.empty,u=c.length;if(t==o&&0==u)return;t<r&&l(),t>r&&M(n,t-r,-1),M(n,o-t,u),D(s,n,c),r=o}}(t),l(!o),o}static empty(t){return new C(t?[t,-1]:[],[])}static fromJSON(t){if(!Array.isArray(t))throw new RangeError(\"Invalid JSON representation of ChangeSet\");let e=[],i=[];for(let n=0;n<t.length;n++){let s=t[n];if(\"number\"==typeof s)e.push(s,-1);else{if(!Array.isArray(s)||\"number\"!=typeof s[0]||s.some(((t,e)=>e&&\"string\"!=typeof t)))throw new RangeError(\"Invalid JSON representation of ChangeSet\");if(1==s.length)e.push(s[0],0);else{for(;i.length<n;)i.push(d.empty);i[n]=d.of(s.slice(1)),e.push(s[0],i[n].length)}}}return new C(e,i)}}function M(t,e,i,n=!1){if(0==e&&i<=0)return;let s=t.length-2;s>=0&&i<=0&&i==t[s+1]?t[s]+=e:0==e&&0==t[s]?t[s+1]+=i:n?(t[s]+=e,t[s+1]+=i):t.push(e,i)}function D(t,e,i){if(0==i.length)return;let n=e.length-2>>1;if(n<t.length)t[t.length-1]=t[t.length-1].append(i);else{for(;t.length<n;)t.push(d.empty);t.push(i)}}function O(t,e,i){let n=t.inserted;for(let s=0,r=0,o=0;o<t.sections.length;){let l=t.sections[o++],h=t.sections[o++];if(h<0)s+=l,r+=l;else{let a=s,c=r,u=d.empty;for(;a+=l,c+=h,h&&n&&(u=u.append(n[o-2>>1])),!(i||o==t.sections.length||t.sections[o+1]<0);)l=t.sections[o++],h=t.sections[o++];e(s,a,r,c,u),s=a,r=c}}}function T(t,e,i,n=!1){let s=[],r=n?[]:null,o=new E(t),l=new E(e);for(let t=0,e=0;;)if(-1==o.ins)t+=o.len,o.next();else if(-1==l.ins&&e<t){let i=Math.min(l.len,t-e);l.forward(i),M(s,i,-1),e+=i}else if(l.ins>=0&&(o.done||e<t||e==t&&(l.len<o.len||l.len==o.len&&!i))){for(M(s,l.ins,-1);t>e&&!o.done&&t+o.len<e+l.len;)t+=o.len,o.next();e+=l.len,l.next()}else{if(!(o.ins>=0)){if(o.done&&l.done)return r?new C(s,r):new A(s);throw new Error(\"Mismatched change set lengths\")}{let i=0,n=t+o.len;for(;;)if(l.ins>=0&&e>t&&e+l.len<n)i+=l.ins,e+=l.len,l.next();else{if(!(-1==l.ins&&e<n))break;{let t=Math.min(l.len,n-e);i+=t,l.forward(t),e+=t}}M(s,i,o.ins),r&&D(r,s,o.text),t=n,o.next()}}}function R(t,e,i=!1){let n=[],s=i?[]:null,r=new E(t),o=new E(e);for(let t=!1;;){if(r.done&&o.done)return s?new C(n,s):new A(n);if(0==r.ins)M(n,r.len,0,t),r.next();else if(0!=o.len||o.done){if(r.done||o.done)throw new Error(\"Mismatched change set lengths\");{let e=Math.min(r.len2,o.len),i=n.length;if(-1==r.ins){let i=-1==o.ins?-1:o.off?0:o.ins;M(n,e,i,t),s&&i&&D(s,n,o.text)}else-1==o.ins?(M(n,r.off?0:r.len,e,t),s&&D(s,n,r.textBit(e))):(M(n,r.off?0:r.len,o.off?0:o.ins,t),s&&!o.off&&D(s,n,o.text));t=(r.ins>e||o.ins>=0&&o.len>e)&&(t||n.length>i),r.forward2(e),o.forward(e)}}else M(n,0,o.ins,t),s&&D(s,n,o.text),o.next()}}class E{constructor(t){this.set=t,this.i=0,this.next()}next(){let{sections:t}=this.set;this.i<t.length?(this.len=t[this.i++],this.ins=t[this.i++]):(this.len=0,this.ins=-2),this.off=0}get done(){return-2==this.ins}get len2(){return this.ins<0?this.len:this.ins}get text(){let{inserted:t}=this.set,e=this.i-2>>1;return e>=t.length?d.empty:t[e]}textBit(t){let{inserted:e}=this.set,i=this.i-2>>1;return i>=e.length&&!t?d.empty:e[i].slice(this.off,null==t?void 0:this.off+t)}forward(t){t==this.len?this.next():(this.len-=t,this.off+=t)}forward2(t){-1==this.ins?this.forward(t):t==this.ins?this.next():(this.ins-=t,this.off+=t)}}class L{constructor(t,e,i){this.from=t,this.to=e,this.flags=i}get anchor(){return 16&this.flags?this.to:this.from}get head(){return 16&this.flags?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return 4&this.flags?-1:8&this.flags?1:0}get bidiLevel(){let t=3&this.flags;return 3==t?null:t}get goalColumn(){let t=this.flags>>5;return 33554431==t?void 0:t}map(t,e=-1){let i,n;return this.empty?i=n=t.mapPos(this.from,e):(i=t.mapPos(this.from,1),n=t.mapPos(this.to,-1)),i==this.from&&n==this.to?this:new L(i,n,this.flags)}extend(t,e=t){if(t<=this.anchor&&e>=this.anchor)return B.range(t,e);let i=Math.abs(t-this.anchor)>Math.abs(e-this.anchor)?t:e;return B.range(this.anchor,i)}eq(t){return this.anchor==t.anchor&&this.head==t.head}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(t){if(!t||\"number\"!=typeof t.anchor||\"number\"!=typeof t.head)throw new RangeError(\"Invalid JSON representation for SelectionRange\");return B.range(t.anchor,t.head)}}class B{constructor(t,e=0){this.ranges=t,this.mainIndex=e}map(t,e=-1){return t.empty?this:B.create(this.ranges.map((i=>i.map(t,e))),this.mainIndex)}eq(t){if(this.ranges.length!=t.ranges.length||this.mainIndex!=t.mainIndex)return!1;for(let e=0;e<this.ranges.length;e++)if(!this.ranges[e].eq(t.ranges[e]))return!1;return!0}get main(){return this.ranges[this.mainIndex]}asSingle(){return 1==this.ranges.length?this:new B([this.main])}addRange(t,e=!0){return B.create([t].concat(this.ranges),e?0:this.mainIndex+1)}replaceRange(t,e=this.mainIndex){let i=this.ranges.slice();return i[e]=t,B.create(i,this.mainIndex)}toJSON(){return{ranges:this.ranges.map((t=>t.toJSON())),main:this.mainIndex}}static fromJSON(t){if(!t||!Array.isArray(t.ranges)||\"number\"!=typeof t.main||t.main>=t.ranges.length)throw new RangeError(\"Invalid JSON representation for EditorSelection\");return new B(t.ranges.map((t=>L.fromJSON(t))),t.main)}static single(t,e=t){return new B([B.range(t,e)],0)}static create(t,e=0){if(0==t.length)throw new RangeError(\"A selection needs at least one range\");for(let i=0,n=0;n<t.length;n++){let s=t[n];if(s.empty?s.from<=i:s.from<i)return P(t.slice(),e);i=s.to}return new B(t,e)}static cursor(t,e=0,i,n){return new L(t,t,(0==e?0:e<0?4:8)|(null==i?3:Math.min(2,i))|(null!=n?n:33554431)<<5)}static range(t,e,i){let n=(null!=i?i:33554431)<<5;return e<t?new L(e,t,24|n):new L(t,e,n|(e>t?4:0))}}function P(t,e=0){let i=t[e];t.sort(((t,e)=>t.from-e.from)),e=t.indexOf(i);for(let i=1;i<t.length;i++){let n=t[i],s=t[i-1];if(n.empty?n.from<=s.to:n.from<s.to){let r=s.from,o=Math.max(n.to,s.to);i<=e&&e--,t.splice(--i,2,n.anchor>n.head?B.range(o,r):B.range(r,o))}}return new B(t,e)}function N(t,e){for(let i of t.ranges)if(i.to>e)throw new RangeError(\"Selection points outside of document\")}let I=0;class V{constructor(t,e,i,n,s){this.combine=t,this.compareInput=e,this.compare=i,this.isStatic=n,this.extensions=s,this.id=I++,this.default=t([])}static define(t={}){return new V(t.combine||(t=>t),t.compareInput||((t,e)=>t===e),t.compare||(t.combine?(t,e)=>t===e:H),!!t.static,t.enables)}of(t){return new W([],this,0,t)}compute(t,e){if(this.isStatic)throw new Error(\"Can't compute a static facet\");return new W(t,this,1,e)}computeN(t,e){if(this.isStatic)throw new Error(\"Can't compute a static facet\");return new W(t,this,2,e)}from(t,e){return e||(e=t=>t),this.compute([t],(i=>e(i.field(t))))}}function H(t,e){return t==e||t.length==e.length&&t.every(((t,i)=>t===e[i]))}class W{constructor(t,e,i,n){this.dependencies=t,this.facet=e,this.type=i,this.value=n,this.id=I++}dynamicSlot(t){var e;let i=this.value,n=this.facet.compareInput,s=this.id,r=t[s]>>1,o=2==this.type,l=!1,h=!1,a=[];for(let i of this.dependencies)\"doc\"==i?l=!0:\"selection\"==i?h=!0:0==(1&(null!==(e=t[i.id])&&void 0!==e?e:1))&&a.push(t[i.id]);return{create:t=>(t.values[r]=i(t),1),update(t,e){if(l&&e.docChanged||h&&(e.docChanged||e.selection)||a.some((e=>(1&et(t,e))>0))){let e=i(t);if(o?!z(e,t.values[r],n):!n(e,t.values[r]))return t.values[r]=e,1}return 0},reconfigure(t,e){let l=i(t),h=e.config.address[s];if(null!=h){let i=it(e,h);if(o?z(l,i,n):n(l,i))return t.values[r]=i,0}return t.values[r]=l,1}}}}function z(t,e,i){if(t.length!=e.length)return!1;for(let n=0;n<t.length;n++)if(!i(t[n],e[n]))return!1;return!0}function F(t,e,i){let n=i.map((e=>t[e.id])),s=i.map((t=>t.type)),r=n.filter((t=>!(1&t))),o=t[e.id]>>1;function l(t){let i=[];for(let e=0;e<n.length;e++){let r=it(t,n[e]);if(2==s[e])for(let t of r)i.push(t);else i.push(r)}return e.combine(i)}return{create(t){for(let e of n)et(t,e);return t.values[o]=l(t),1},update(t,i){if(!r.some((e=>1&et(t,e))))return 0;let n=l(t);return e.compare(n,t.values[o])?0:(t.values[o]=n,1)},reconfigure(t,s){let r=n.some((e=>1&et(t,e))),h=s.config.facets[e.id],a=s.facet(e);if(h&&!r&&H(i,h))return t.values[o]=a,0;let c=l(t);return e.compare(c,a)?(t.values[o]=a,0):(t.values[o]=c,1)}}}const q=V.define({static:!0});class _{constructor(t,e,i,n,s){this.id=t,this.createF=e,this.updateF=i,this.compareF=n,this.spec=s,this.provides=void 0}static define(t){let e=new _(I++,t.create,t.update,t.compare||((t,e)=>t===e),t);return t.provide&&(e.provides=t.provide(e)),e}create(t){let e=t.facet(q).find((t=>t.field==this));return((null==e?void 0:e.create)||this.createF)(t)}slot(t){let e=t[this.id]>>1;return{create:t=>(t.values[e]=this.create(t),1),update:(t,i)=>{let n=t.values[e],s=this.updateF(n,i);return this.compareF(n,s)?0:(t.values[e]=s,1)},reconfigure:(t,i)=>null!=i.config.address[this.id]?(t.values[e]=i.field(this),0):(t.values[e]=this.create(t),1)}}init(t){return[this,q.of({field:this,create:t})]}get extension(){return this}}const j=4,U=3,$=2,K=1,G=0;function J(t){return e=>new X(e,t)}const Y={lowest:J(j),low:J(U),default:J($),high:J(K),highest:J(G),fallback:J(j),extend:J(K),override:J(G)};class X{constructor(t,e){this.inner=t,this.prec=e}}class Q{of(t){return new Z(this,t)}reconfigure(t){return Q.reconfigure.of({compartment:this,extension:t})}get(t){return t.config.compartments.get(this)}}class Z{constructor(t,e){this.compartment=t,this.inner=e}}class tt{constructor(t,e,i,n,s,r){for(this.base=t,this.compartments=e,this.dynamicSlots=i,this.address=n,this.staticValues=s,this.facets=r,this.statusTemplate=[];this.statusTemplate.length<i.length;)this.statusTemplate.push(0)}staticFacet(t){let e=this.address[t.id];return null==e?t.default:this.staticValues[e>>1]}static resolve(t,e,i){let n=[],s=Object.create(null),r=new Map;for(let i of function(t,e,i){let n=[[],[],[],[],[]],s=new Map;function r(t,o){let l=s.get(t);if(null!=l){if(l>=o)return;let e=n[l].indexOf(t);e>-1&&n[l].splice(e,1),t instanceof Z&&i.delete(t.compartment)}if(s.set(t,o),Array.isArray(t))for(let e of t)r(e,o);else if(t instanceof Z){if(i.has(t.compartment))throw new RangeError(\"Duplicate use of compartment in extensions\");let n=e.get(t.compartment)||t.inner;i.set(t.compartment,n),r(n,o)}else if(t instanceof X)r(t.inner,t.prec);else if(t instanceof _)n[o].push(t),t.provides&&r(t.provides,o);else if(t instanceof W)n[o].push(t),t.facet.extensions&&r(t.facet.extensions,o);else{let e=t.extension;if(!e)throw new Error(`Unrecognized extension value in extension set (${t}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);r(e,o)}}return r(t,$),n.reduce(((t,e)=>t.concat(e)))}(t,e,r))i instanceof _?n.push(i):(s[i.facet.id]||(s[i.facet.id]=[])).push(i);let o=Object.create(null),l=[],h=[];for(let t of n)o[t.id]=h.length<<1,h.push((e=>t.slot(e)));let a=null==i?void 0:i.config.facets;for(let t in s){let e=s[t],n=e[0].facet,r=a&&a[t]||[];if(e.every((t=>0==t.type)))if(o[n.id]=l.length<<1|1,H(r,e))l.push(i.facet(n));else{let t=n.combine(e.map((t=>t.value)));l.push(i&&n.compare(t,i.facet(n))?i.facet(n):t)}else{for(let t of e)0==t.type?(o[t.id]=l.length<<1|1,l.push(t.value)):(o[t.id]=h.length<<1,h.push((e=>t.dynamicSlot(e))));o[n.id]=h.length<<1,h.push((t=>F(t,n,e)))}}let c=h.map((t=>t(o)));return new tt(t,r,c,o,l,s)}}function et(t,e){if(1&e)return 2;let i=e>>1,n=t.status[i];if(4==n)throw new Error(\"Cyclic dependency between fields and/or facets\");if(2&n)return n;t.status[i]=4;let s=t.computeSlot(t,t.config.dynamicSlots[i]);return t.status[i]=2|s}function it(t,e){return 1&e?t.config.staticValues[e>>1]:t.values[e>>1]}const nt=V.define(),st=V.define({combine:t=>t.some((t=>t)),static:!0}),rt=V.define({combine:t=>t.length?t[0]:void 0,static:!0}),ot=V.define(),lt=V.define(),ht=V.define(),at=V.define({combine:t=>!!t.length&&t[0]});class ct{constructor(t,e){this.type=t,this.value=e}static define(){return new ut}}class ut{of(t){return new ct(this,t)}}class ft{constructor(t){this.map=t}of(t){return new dt(this,t)}}class dt{constructor(t,e){this.type=t,this.value=e}map(t){let e=this.type.map(this.value,t);return void 0===e?void 0:e==this.value?this:new dt(this.type,e)}is(t){return this.type==t}static define(t={}){return new ft(t.map||(t=>t))}static mapEffects(t,e){if(!t.length)return t;let i=[];for(let n of t){let t=n.map(e);t&&i.push(t)}return i}}dt.reconfigure=dt.define(),dt.appendConfig=dt.define();class pt{constructor(t,e,i,n,s,r){this.startState=t,this.changes=e,this.selection=i,this.effects=n,this.annotations=s,this.scrollIntoView=r,this._doc=null,this._state=null,i&&N(i,e.newLength),s.some((t=>t.type==pt.time))||(this.annotations=s.concat(pt.time.of(Date.now())))}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(t){for(let e of this.annotations)if(e.type==t)return e.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(t){let e=this.annotation(pt.userEvent);return!(!e||!(e==t||e.length>t.length&&e.slice(0,t.length)==t&&\".\"==e[t.length]))}}function mt(t,e){let i=[];for(let n=0,s=0;;){let r,o;if(n<t.length&&(s==e.length||e[s]>=t[n]))r=t[n++],o=t[n++];else{if(!(s<e.length))return i;r=e[s++],o=e[s++]}!i.length||i[i.length-1]<r?i.push(r,o):i[i.length-1]<o&&(i[i.length-1]=o)}}function gt(t,e,i){var n;let s,r,o;return i?(s=e.changes,r=C.empty(e.changes.length),o=t.changes.compose(e.changes)):(s=e.changes.map(t.changes),r=t.changes.mapDesc(e.changes,!0),o=t.changes.compose(s)),{changes:o,selection:e.selection?e.selection.map(r):null===(n=t.selection)||void 0===n?void 0:n.map(s),effects:dt.mapEffects(t.effects,s).concat(dt.mapEffects(e.effects,r)),annotations:t.annotations.length?t.annotations.concat(e.annotations):e.annotations,scrollIntoView:t.scrollIntoView||e.scrollIntoView}}function vt(t,e,i){let n=e.selection,s=bt(e.annotations);return e.userEvent&&(s=s.concat(pt.userEvent.of(e.userEvent))),{changes:e.changes instanceof C?e.changes:C.of(e.changes||[],i,t.facet(rt)),selection:n&&(n instanceof B?n:B.single(n.anchor,n.head)),effects:bt(e.effects),annotations:s,scrollIntoView:!!e.scrollIntoView}}function wt(t,e,i){let n=vt(t,e.length?e[0]:{},t.doc.length);e.length&&!1===e[0].filter&&(i=!1);for(let s=1;s<e.length;s++){!1===e[s].filter&&(i=!1);let r=!!e[s].sequential;n=gt(n,vt(t,e[s],r?n.changes.newLength:t.doc.length),r)}let s=new pt(t,n.changes,n.selection,n.effects,n.annotations,n.scrollIntoView);return function(t){let e=t.startState,i=e.facet(ht),n=t;for(let s=i.length-1;s>=0;s--){let r=i[s](t);r&&Object.keys(r).length&&(n=gt(t,vt(e,r,t.changes.newLength),!0))}return n==t?t:new pt(e,t.changes,t.selection,n.effects,n.annotations,n.scrollIntoView)}(i?function(t){let e=t.startState,i=!0;for(let n of e.facet(ot)){let e=n(t);if(!1===e){i=!1;break}Array.isArray(e)&&(i=!0===i?e:mt(i,e))}if(!0!==i){let n,s;if(!1===i)s=t.changes.invertedDesc,n=C.empty(e.doc.length);else{let e=t.changes.filter(i);n=e.changes,s=e.filtered.invertedDesc}t=new pt(e,n,t.selection&&t.selection.map(s),dt.mapEffects(t.effects,s),t.annotations,t.scrollIntoView)}let n=e.facet(lt);for(let i=n.length-1;i>=0;i--){let s=n[i](t);t=s instanceof pt?s:Array.isArray(s)&&1==s.length&&s[0]instanceof pt?s[0]:wt(e,bt(s),!1)}return t}(s):s)}pt.time=ct.define(),pt.userEvent=ct.define(),pt.addToHistory=ct.define(),pt.remote=ct.define();const yt=[];function bt(t){return null==t?yt:Array.isArray(t)?t:[t]}var xt=function(t){return t[t.Word=0]=\"Word\",t[t.Space=1]=\"Space\",t[t.Other=2]=\"Other\",t}(xt||(xt={}));const kt=/[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;let St;try{St=new RegExp(\"[\\\\p{Alphabetic}\\\\p{Number}_]\",\"u\")}catch(t){}function At(t){return e=>{if(!/\\S/.test(e))return xt.Space;if(function(t){if(St)return St.test(t);for(let e=0;e<t.length;e++){let i=t[e];if(/\\w/.test(i)||i>\"\"&&(i.toUpperCase()!=i.toLowerCase()||kt.test(i)))return!0}return!1}(e))return xt.Word;for(let i=0;i<t.length;i++)if(e.indexOf(t[i])>-1)return xt.Word;return xt.Other}}class Ct{constructor(t,e,i,n,s,r){this.config=t,this.doc=e,this.selection=i,this.values=n,this.status=t.statusTemplate.slice(),this.computeSlot=s,r&&(r._state=this);for(let t=0;t<this.config.dynamicSlots.length;t++)et(this,t<<1);this.computeSlot=null}field(t,e=!0){let i=this.config.address[t.id];if(null!=i)return et(this,i),it(this,i);if(e)throw new RangeError(\"Field is not present in this state\")}update(...t){return wt(this,t,!0)}applyTransaction(t){let e,i=this.config,{base:n,compartments:s}=i;for(let e of t.effects)e.is(Q.reconfigure)?(i&&(s=new Map,i.compartments.forEach(((t,e)=>s.set(e,t))),i=null),s.set(e.value.compartment,e.value.extension)):e.is(dt.reconfigure)?(i=null,n=e.value):e.is(dt.appendConfig)&&(i=null,n=bt(n).concat(e.value));if(i)e=t.startState.values.slice();else{i=tt.resolve(n,s,this),e=new Ct(i,this.doc,this.selection,i.dynamicSlots.map((()=>null)),((t,e)=>e.reconfigure(t,this)),null).values}new Ct(i,t.newDoc,t.newSelection,e,((e,i)=>i.update(e,t)),t)}replaceSelection(t){return\"string\"==typeof t&&(t=this.toText(t)),this.changeByRange((e=>({changes:{from:e.from,to:e.to,insert:t},range:B.cursor(e.from+t.length)})))}changeByRange(t){let e=this.selection,i=t(e.ranges[0]),n=this.changes(i.changes),s=[i.range],r=bt(i.effects);for(let i=1;i<e.ranges.length;i++){let o=t(e.ranges[i]),l=this.changes(o.changes),h=l.map(n);for(let t=0;t<i;t++)s[t]=s[t].map(h);let a=n.mapDesc(l,!0);s.push(o.range.map(a)),n=n.compose(h),r=dt.mapEffects(r,h).concat(dt.mapEffects(bt(o.effects),a))}return{changes:n,selection:B.create(s,e.mainIndex),effects:r}}changes(t=[]){return t instanceof C?t:C.of(t,this.doc.length,this.facet(Ct.lineSeparator))}toText(t){return d.of(t.split(this.facet(Ct.lineSeparator)||k))}sliceDoc(t=0,e=this.doc.length){return this.doc.sliceString(t,e,this.lineBreak)}facet(t){let e=this.config.address[t.id];return null==e?t.default:(et(this,e),it(this,e))}toJSON(t){let e={doc:this.sliceDoc(),selection:this.selection.toJSON()};if(t)for(let i in t){let n=t[i];n instanceof _&&(e[i]=n.spec.toJSON(this.field(t[i]),this))}return e}static fromJSON(t,e={},i){if(!t||\"string\"!=typeof t.doc)throw new RangeError(\"Invalid JSON representation for EditorState\");let n=[];if(i)for(let e in i){let s=i[e],r=t[e];n.push(s.init((t=>s.spec.fromJSON(r,t))))}return Ct.create({doc:t.doc,selection:B.fromJSON(t.selection),extensions:e.extensions?n.concat([e.extensions]):n})}static create(t={}){let e=tt.resolve(t.extensions||[],new Map),i=t.doc instanceof d?t.doc:d.of((t.doc||\"\").split(e.staticFacet(Ct.lineSeparator)||k)),n=t.selection?t.selection instanceof B?t.selection:B.single(t.selection.anchor,t.selection.head):B.single(0);return N(n,i.length),e.staticFacet(st)||(n=n.asSingle()),new Ct(e,i,n,e.dynamicSlots.map((()=>null)),((t,e)=>e.create(t)),null)}get tabSize(){return this.facet(Ct.tabSize)}get lineBreak(){return this.facet(Ct.lineSeparator)||\"\\n\"}get readOnly(){return this.facet(at)}phrase(t){for(let e of this.facet(Ct.phrases))if(Object.prototype.hasOwnProperty.call(e,t))return e[t];return t}languageDataAt(t,e,i=-1){let n=[];for(let s of this.facet(nt))for(let r of s(this,e,i))Object.prototype.hasOwnProperty.call(r,t)&&n.push(r[t]);return n}charCategorizer(t){return At(this.languageDataAt(\"wordChars\",t).join(\"\"))}wordAt(t){let{text:e,from:i,length:s}=this.doc.lineAt(t),r=this.charCategorizer(t),o=t-i,l=t-i;for(;o>0;){let t=n(e,o,!1);if(r(e.slice(t,o))!=xt.Word)break;o=t}for(;l<s;){let t=n(e,l);if(r(e.slice(l,t))!=xt.Word)break;l=t}return o==l?null:B.range(o+i,l+i)}}function Mt(t,e,i={}){let n={};for(let e of t)for(let t of Object.keys(e)){let s=e[t],r=n[t];if(void 0===r)n[t]=s;else if(r===s||void 0===s);else{if(!Object.hasOwnProperty.call(i,t))throw new Error(\"Config merge conflict for field \"+t);n[t]=i[t](r,s)}}for(let t in e)void 0===n[t]&&(n[t]=e[t]);return n}Ct.allowMultipleSelections=st,Ct.tabSize=V.define({combine:t=>t.length?t[0]:4}),Ct.lineSeparator=rt,Ct.readOnly=at,Ct.phrases=V.define(),Ct.languageData=nt,Ct.changeFilter=ot,Ct.transactionFilter=lt,Ct.transactionExtender=ht,Q.reconfigure=dt.define();const Dt=\"undefined\"==typeof Symbol?\"__ͼ\":Symbol.for(\"ͼ\"),Ot=\"undefined\"==typeof Symbol?\"__styleSet\"+Math.floor(1e8*Math.random()):Symbol(\"styleSet\"),Tt=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof window?window:{};class Rt{constructor(t,e){this.rules=[];let{finish:i}=e||{};function n(t){return/^@/.test(t)?[t]:t.split(/,\\s*/)}function s(t,e,r,o){let l=[],h=/^@(\\w+)\\b/.exec(t[0]),a=h&&\"keyframes\"==h[1];if(h&&null==e)return r.push(t[0]+\";\");for(let i in e){let o=e[i];if(/&/.test(i))s(i.split(/,\\s*/).map((e=>t.map((t=>e.replace(/&/,t))))).reduce(((t,e)=>t.concat(e))),o,r);else if(o&&\"object\"==typeof o){if(!h)throw new RangeError(\"The value of a property (\"+i+\") should be a primitive value.\");s(n(i),o,l,a)}else null!=o&&l.push(i.replace(/_.*/,\"\").replace(/[A-Z]/g,(t=>\"-\"+t.toLowerCase()))+\": \"+o+\";\")}(l.length||a)&&r.push((!i||h||o?t:t.map(i)).join(\", \")+\" {\"+l.join(\" \")+\"}\")}for(let e in t)s(n(e),t[e],this.rules)}getRules(){return this.rules.join(\"\\n\")}static newName(){let t=Tt[Dt]||1;return Tt[Dt]=t+1,\"ͼ\"+t.toString(36)}static mount(t,e){(t[Ot]||new Lt(t)).mount(Array.isArray(e)?e:[e])}}let Et=null;class Lt{constructor(t){if(!t.head&&t.adoptedStyleSheets&&\"undefined\"!=typeof CSSStyleSheet){if(Et)return t.adoptedStyleSheets=[Et.sheet].concat(t.adoptedStyleSheets),t[Ot]=Et;this.sheet=new CSSStyleSheet,t.adoptedStyleSheets=[this.sheet].concat(t.adoptedStyleSheets),Et=this}else{this.styleTag=(t.ownerDocument||t).createElement(\"style\");let e=t.head||t;e.insertBefore(this.styleTag,e.firstChild)}this.modules=[],t[Ot]=this}mount(t){let e=this.sheet,i=0,n=0;for(let s=0;s<t.length;s++){let r=t[s],o=this.modules.indexOf(r);if(o<n&&o>-1&&(this.modules.splice(o,1),n--,o=-1),-1==o){if(this.modules.splice(n++,0,r),e)for(let t=0;t<r.rules.length;t++)e.insertRule(r.rules[t],i++)}else{for(;n<o;)i+=this.modules[n++].rules.length;i+=r.rules.length,n++}}if(!e){let t=\"\";for(let e=0;e<this.modules.length;e++)t+=this.modules[e].getRules()+\"\\n\";this.styleTag.textContent=t}}}class Bt{eq(t){return this==t}range(t,e=t){return new Pt(t,e,this)}}Bt.prototype.startSide=Bt.prototype.endSide=0,Bt.prototype.point=!1,Bt.prototype.mapMode=S.TrackDel;class Pt{constructor(t,e,i){this.from=t,this.to=e,this.value=i}}function Nt(t,e){return t.from-e.from||t.value.startSide-e.value.startSide}class It{constructor(t,e,i,n){this.from=t,this.to=e,this.value=i,this.maxPoint=n}get length(){return this.to[this.to.length-1]}findIndex(t,e,i,n=0){let s=i?this.to:this.from;for(let r=n,o=s.length;;){if(r==o)return r;let n=r+o>>1,l=s[n]-t||(i?this.value[n].endSide:this.value[n].startSide)-e;if(n==r)return l>=0?r:o;l>=0?o=n:r=n+1}}between(t,e,i,n){for(let s=this.findIndex(e,-1e9,!0),r=this.findIndex(i,1e9,!1,s);s<r;s++)if(!1===n(this.from[s]+t,this.to[s]+t,this.value[s]))return!1}map(t,e){let i=[],n=[],s=[],r=-1,o=-1;for(let l=0;l<this.value.length;l++){let h,a,c=this.value[l],u=this.from[l]+t,f=this.to[l]+t;if(u==f){let t=e.mapPos(u,c.startSide,c.mapMode);if(null==t)continue;if(h=a=t,c.startSide!=c.endSide&&(a=e.mapPos(u,c.endSide),a<h))continue}else if(h=e.mapPos(u,c.startSide),a=e.mapPos(f,c.endSide),h>a||h==a&&c.startSide>0&&c.endSide<=0)continue;(a-h||c.endSide-c.startSide)<0||(r<0&&(r=h),c.point&&(o=Math.max(o,a-h)),i.push(c),n.push(h-r),s.push(a-r))}return{mapped:i.length?new It(n,s,i,o):null,pos:r}}}class Vt{constructor(t,e,i=Vt.empty,n){this.chunkPos=t,this.chunk=e,this.nextLayer=i,this.maxPoint=n}get length(){let t=this.chunk.length-1;return t<0?0:Math.max(this.chunkEnd(t),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let t=this.nextLayer.size;for(let e of this.chunk)t+=e.value.length;return t}chunkEnd(t){return this.chunkPos[t]+this.chunk[t].length}update(t){let{add:e=[],sort:i=!1,filterFrom:n=0,filterTo:s=this.length}=t,r=t.filter;if(0==e.length&&!r)return this;if(i&&(e=e.slice().sort(Nt)),this.isEmpty)return e.length?Vt.of(e):this;let o=new zt(this,null,-1).goto(0),l=0,h=[],a=new Ht;for(;o.value||l<e.length;)if(l<e.length&&(o.from-e[l].from||o.startSide-e[l].value.startSide)>=0){let t=e[l++];a.addInner(t.from,t.to,t.value)||h.push(t)}else 1==o.rangeIndex&&o.chunkIndex<this.chunk.length&&(l==e.length||this.chunkEnd(o.chunkIndex)<e[l].from)&&(!r||n>this.chunkEnd(o.chunkIndex)||s<this.chunkPos[o.chunkIndex])&&a.addChunk(this.chunkPos[o.chunkIndex],this.chunk[o.chunkIndex])?o.nextChunk():((!r||n>o.to||s<o.from||r(o.from,o.to,o.value))&&(a.addInner(o.from,o.to,o.value)||h.push(new Pt(o.from,o.to,o.value))),o.next());return a.finishInner(this.nextLayer.isEmpty&&!h.length?Vt.empty:this.nextLayer.update({add:h,filter:r,filterFrom:n,filterTo:s}))}map(t){if(t.empty||this.isEmpty)return this;let e=[],i=[],n=-1;for(let s=0;s<this.chunk.length;s++){let r=this.chunkPos[s],o=this.chunk[s],l=t.touchesRange(r,r+o.length);if(!1===l)n=Math.max(n,o.maxPoint),e.push(o),i.push(t.mapPos(r));else if(!0===l){let{mapped:s,pos:l}=o.map(r,t);s&&(n=Math.max(n,s.maxPoint),e.push(s),i.push(l))}}let s=this.nextLayer.map(t);return 0==e.length?s:new Vt(i,e,s,n)}between(t,e,i){if(!this.isEmpty){for(let n=0;n<this.chunk.length;n++){let s=this.chunkPos[n],r=this.chunk[n];if(e>=s&&t<=s+r.length&&!1===r.between(s,t-s,e-s,i))return}this.nextLayer.between(t,e,i)}}iter(t=0){return Ft.from([this]).goto(t)}get isEmpty(){return this.nextLayer==this}static iter(t,e=0){return Ft.from(t).goto(e)}static compare(t,e,i,n,s=-1){let r=t.filter((t=>t.maxPoint>0||!t.isEmpty&&t.maxPoint>=s)),o=e.filter((t=>t.maxPoint>0||!t.isEmpty&&t.maxPoint>=s)),l=Wt(r,o,i),h=new _t(r,l,s),a=new _t(o,l,s);i.iterGaps(((t,e,i)=>jt(h,t,a,e,i,n))),i.empty&&0==i.length&&jt(h,0,a,0,0,n)}static eq(t,e,i=0,n){null==n&&(n=1e9);let s=t.filter((t=>!t.isEmpty&&e.indexOf(t)<0)),r=e.filter((e=>!e.isEmpty&&t.indexOf(e)<0));if(s.length!=r.length)return!1;if(!s.length)return!0;let o=Wt(s,r),l=new _t(s,o,0).goto(i),h=new _t(r,o,0).goto(i);for(;;){if(l.to!=h.to||!Ut(l.active,h.active)||l.point&&(!h.point||!l.point.eq(h.point)))return!1;if(l.to>n)return!0;l.next(),h.next()}}static spans(t,e,i,n,s=-1){var r;let o=new _t(t,null,s,null===(r=n.filterPoint)||void 0===r?void 0:r.bind(n)).goto(e),l=e,h=o.openStart;for(;;){let t=Math.min(o.to,i);if(o.point?(n.point(l,t,o.point,o.activeForPoint(o.to),h),h=o.openEnd(t)+(o.to>t?1:0)):t>l&&(n.span(l,t,o.active,h),h=o.openEnd(t)),o.to>i)break;l=o.to,o.next()}return h}static of(t,e=!1){let i=new Ht;for(let n of t instanceof Pt?[t]:e?function(t){if(t.length>1)for(let e=t[0],i=1;i<t.length;i++){let n=t[i];if(Nt(e,n)>0)return t.slice().sort(Nt);e=n}return t}(t):t)i.add(n.from,n.to,n.value);return i.finish()}}Vt.empty=new Vt([],[],null,-1),Vt.empty.nextLayer=Vt.empty;class Ht{constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}finishChunk(t){this.chunks.push(new It(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,t&&(this.from=[],this.to=[],this.value=[])}add(t,e,i){this.addInner(t,e,i)||(this.nextLayer||(this.nextLayer=new Ht)).add(t,e,i)}addInner(t,e,i){let n=t-this.lastTo||i.startSide-this.last.endSide;if(n<=0&&(t-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error(\"Ranges must be added sorted by `from` position and `startSide`\");return!(n<0)&&(250==this.from.length&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=t),this.from.push(t-this.chunkStart),this.to.push(e-this.chunkStart),this.last=i,this.lastFrom=t,this.lastTo=e,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,e-t)),!0)}addChunk(t,e){if((t-this.lastTo||e.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,e.maxPoint),this.chunks.push(e),this.chunkPos.push(t);let i=e.value.length-1;return this.last=e.value[i],this.lastFrom=e.from[i]+t,this.lastTo=e.to[i]+t,!0}finish(){return this.finishInner(Vt.empty)}finishInner(t){if(this.from.length&&this.finishChunk(!1),0==this.chunks.length)return t;let e=new Vt(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(t):t,this.setMaxPoint);return this.from=null,e}}function Wt(t,e,i){let n=new Map;for(let e of t)for(let t=0;t<e.chunk.length;t++)e.chunk[t].maxPoint<=0&&n.set(e.chunk[t],e.chunkPos[t]);let s=new Set;for(let t of e)for(let e=0;e<t.chunk.length;e++){let r=n.get(t.chunk[e]);null==r||(i?i.mapPos(r):r)!=t.chunkPos[e]||(null==i?void 0:i.touchesRange(r,r+t.chunk[e].length))||s.add(t.chunk[e])}return s}class zt{constructor(t,e,i,n=0){this.layer=t,this.skip=e,this.minPoint=i,this.rank=n}get startSide(){return this.value?this.value.startSide:0}get endSide(){return this.value?this.value.endSide:0}goto(t,e=-1e9){return this.chunkIndex=this.rangeIndex=0,this.gotoInner(t,e,!1),this}gotoInner(t,e,i){for(;this.chunkIndex<this.layer.chunk.length;){let e=this.layer.chunk[this.chunkIndex];if(!(this.skip&&this.skip.has(e)||this.layer.chunkEnd(this.chunkIndex)<t||e.maxPoint<this.minPoint))break;this.chunkIndex++,i=!1}if(this.chunkIndex<this.layer.chunk.length){let n=this.layer.chunk[this.chunkIndex].findIndex(t-this.layer.chunkPos[this.chunkIndex],e,!0);(!i||this.rangeIndex<n)&&this.setRangeIndex(n)}this.next()}forward(t,e){(this.to-t||this.endSide-e)<0&&this.gotoInner(t,e,!0)}next(){for(;;){if(this.chunkIndex==this.layer.chunk.length){this.from=this.to=1e9,this.value=null;break}{let t=this.layer.chunkPos[this.chunkIndex],e=this.layer.chunk[this.chunkIndex],i=t+e.from[this.rangeIndex];if(this.from=i,this.to=t+e.to[this.rangeIndex],this.value=e.value[this.rangeIndex],this.setRangeIndex(this.rangeIndex+1),this.minPoint<0||this.value.point&&this.to-this.from>=this.minPoint)break}}}setRangeIndex(t){if(t==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex<this.layer.chunk.length&&this.skip.has(this.layer.chunk[this.chunkIndex]);)this.chunkIndex++;this.rangeIndex=0}else this.rangeIndex=t}nextChunk(){this.chunkIndex++,this.rangeIndex=0,this.next()}compare(t){return this.from-t.from||this.startSide-t.startSide||this.rank-t.rank||this.to-t.to||this.endSide-t.endSide}}class Ft{constructor(t){this.heap=t}static from(t,e=null,i=-1){let n=[];for(let s=0;s<t.length;s++)for(let r=t[s];!r.isEmpty;r=r.nextLayer)r.maxPoint>=i&&n.push(new zt(r,e,i,s));return 1==n.length?n[0]:new Ft(n)}get startSide(){return this.value?this.value.startSide:0}goto(t,e=-1e9){for(let i of this.heap)i.goto(t,e);for(let t=this.heap.length>>1;t>=0;t--)qt(this.heap,t);return this.next(),this}forward(t,e){for(let i of this.heap)i.forward(t,e);for(let t=this.heap.length>>1;t>=0;t--)qt(this.heap,t);(this.to-t||this.value.endSide-e)<0&&this.next()}next(){if(0==this.heap.length)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let t=this.heap[0];this.from=t.from,this.to=t.to,this.value=t.value,this.rank=t.rank,t.value&&t.next(),qt(this.heap,0)}}}function qt(t,e){for(let i=t[e];;){let n=1+(e<<1);if(n>=t.length)break;let s=t[n];if(n+1<t.length&&s.compare(t[n+1])>=0&&(s=t[n+1],n++),i.compare(s)<0)break;t[n]=i,t[e]=s,e=n}}class _t{constructor(t,e,i,n=(()=>!0)){this.minPoint=i,this.filterPoint=n,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=Ft.from(t,e,i)}goto(t,e=-1e9){return this.cursor.goto(t,e),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=t,this.endSide=e,this.openStart=-1,this.next(),this}forward(t,e){for(;this.minActive>-1&&(this.activeTo[this.minActive]-t||this.active[this.minActive].endSide-e)<0;)this.removeActive(this.minActive);this.cursor.forward(t,e)}removeActive(t){$t(this.active,t),$t(this.activeTo,t),$t(this.activeRank,t),this.minActive=Gt(this.active,this.activeTo)}addActive(t){let e=0,{value:i,to:n,rank:s}=this.cursor;for(;e<this.activeRank.length&&this.activeRank[e]<=s;)e++;Kt(this.active,e,i),Kt(this.activeTo,e,n),Kt(this.activeRank,e,s),t&&Kt(t,e,this.cursor.from),this.minActive=Gt(this.active,this.activeTo)}next(){let t=this.to,e=this.point;this.point=null;let i=this.openStart<0?[]:null,n=0;for(;;){let s=this.minActive;if(s>-1&&(this.activeTo[s]-this.cursor.from||this.active[s].endSide-this.cursor.startSide)<0){if(this.activeTo[s]>t){this.to=this.activeTo[s],this.endSide=this.active[s].endSide;break}this.removeActive(s),i&&$t(i,s)}else{if(!this.cursor.value){this.to=this.endSide=1e9;break}if(this.cursor.from>t){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}{let s=this.cursor.value;if(s.point)if(e&&this.cursor.to==this.to&&this.cursor.from<this.cursor.to)this.cursor.next();else{if(this.filterPoint(this.cursor.from,this.cursor.to,this.cursor.value,this.cursor.rank)){this.point=s,this.pointFrom=this.cursor.from,this.pointRank=this.cursor.rank,this.to=this.cursor.to,this.endSide=s.endSide,this.cursor.from<t&&(n=1),this.cursor.next(),this.forward(this.to,this.endSide);break}this.cursor.next()}else this.addActive(i),this.cursor.next()}}}if(i){let e=0;for(;e<i.length&&i[e]<t;)e++;this.openStart=e+n}}activeForPoint(t){if(!this.active.length)return this.active;let e=[];for(let i=this.active.length-1;i>=0&&!(this.activeRank[i]<this.pointRank);i--)(this.activeTo[i]>t||this.activeTo[i]==t&&this.active[i].endSide>=this.point.endSide)&&e.push(this.active[i]);return e.reverse()}openEnd(t){let e=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>t;i--)e++;return e}}function jt(t,e,i,n,s,r){t.goto(e),i.goto(n);let o=n+s,l=n,h=n-e;for(;;){let e=t.to+h-i.to||t.endSide-i.endSide,n=e<0?t.to+h:i.to,s=Math.min(n,o);if(t.point||i.point?t.point&&i.point&&(t.point==i.point||t.point.eq(i.point))&&Ut(t.activeForPoint(t.to+h),i.activeForPoint(i.to))||r.comparePoint(l,s,t.point,i.point):s>l&&!Ut(t.active,i.active)&&r.compareRange(l,s,t.active,i.active),n>o)break;l=n,e<=0&&t.next(),e>=0&&i.next()}}function Ut(t,e){if(t.length!=e.length)return!1;for(let i=0;i<t.length;i++)if(t[i]!=e[i]&&!t[i].eq(e[i]))return!1;return!0}function $t(t,e){for(let i=e,n=t.length-1;i<n;i++)t[i]=t[i+1];t.pop()}function Kt(t,e,i){for(let i=t.length-1;i>=e;i--)t[i+1]=t[i];t[e]=i}function Gt(t,e){let i=-1,n=1e9;for(let s=0;s<e.length;s++)(e[s]-n||t[s].endSide-t[i].endSide)<0&&(i=s,n=e[s]);return i}for(var Jt={8:\"Backspace\",9:\"Tab\",10:\"Enter\",12:\"NumLock\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",44:\"PrintScreen\",45:\"Insert\",46:\"Delete\",59:\";\",61:\"=\",91:\"Meta\",92:\"Meta\",106:\"*\",107:\"+\",108:\",\",109:\"-\",110:\".\",111:\"/\",144:\"NumLock\",145:\"ScrollLock\",160:\"Shift\",161:\"Shift\",162:\"Control\",163:\"Control\",164:\"Alt\",165:\"Alt\",173:\"-\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",229:\"q\"},Yt={48:\")\",49:\"!\",50:\"@\",51:\"#\",52:\"$\",53:\"%\",54:\"^\",55:\"&\",56:\"*\",57:\"(\",59:\":\",61:\"+\",173:\"_\",186:\":\",187:\"+\",188:\"<\",189:\"_\",190:\">\",191:\"?\",192:\"~\",219:\"{\",220:\"|\",221:\"}\",222:'\"',229:\"Q\"},Xt=\"undefined\"!=typeof navigator&&/Chrome\\/(\\d+)/.exec(navigator.userAgent),Qt=\"undefined\"!=typeof navigator&&/Apple Computer/.test(navigator.vendor),Zt=\"undefined\"!=typeof navigator&&/Gecko\\/\\d+/.test(navigator.userAgent),te=\"undefined\"!=typeof navigator&&/Mac/.test(navigator.platform),ee=\"undefined\"!=typeof navigator&&/MSIE \\d|Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent),ie=Xt&&(te||+Xt[1]<57)||Zt&&te,ne=0;ne<10;ne++)Jt[48+ne]=Jt[96+ne]=String(ne);for(ne=1;ne<=24;ne++)Jt[ne+111]=\"F\"+ne;for(ne=65;ne<=90;ne++)Jt[ne]=String.fromCharCode(ne+32),Yt[ne]=String.fromCharCode(ne);for(var se in Jt)Yt.hasOwnProperty(se)||(Yt[se]=Jt[se]);function re(t){let e;return e=11==t.nodeType?t.getSelection?t:t.ownerDocument:t,e.getSelection()}function oe(t,e){return!!e&&(t==e||t.contains(1!=e.nodeType?e.parentNode:e))}function le(t,e){if(!e.anchorNode)return!1;try{return oe(t,e.anchorNode)}catch(t){return!1}}function he(t){return 3==t.nodeType?be(t,0,t.nodeValue.length).getClientRects():1==t.nodeType?t.getClientRects():[]}function ae(t,e,i,n){return!!i&&(ue(t,e,i,n,-1)||ue(t,e,i,n,1))}function ce(t){for(var e=0;;e++)if(!(t=t.previousSibling))return e}function ue(t,e,i,n,s){for(;;){if(t==i&&e==n)return!0;if(e==(s<0?0:fe(t))){if(\"DIV\"==t.nodeName)return!1;let i=t.parentNode;if(!i||1!=i.nodeType)return!1;e=ce(t)+(s<0?0:1),t=i}else{if(1!=t.nodeType)return!1;if(1==(t=t.childNodes[e+(s<0?-1:0)]).nodeType&&\"false\"==t.contentEditable)return!1;e=s<0?fe(t):0}}}function fe(t){return 3==t.nodeType?t.nodeValue.length:t.childNodes.length}const de={left:0,right:0,top:0,bottom:0};function pe(t,e){let i=e?t.left:t.right;return{left:i,right:i,top:t.top,bottom:t.bottom}}function me(t){return{left:0,right:t.innerWidth,top:0,bottom:t.innerHeight}}class ge{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(t){return this.anchorNode==t.anchorNode&&this.anchorOffset==t.anchorOffset&&this.focusNode==t.focusNode&&this.focusOffset==t.focusOffset}setRange(t){this.set(t.anchorNode,t.anchorOffset,t.focusNode,t.focusOffset)}set(t,e,i,n){this.anchorNode=t,this.anchorOffset=e,this.focusNode=i,this.focusOffset=n}}let ve,we=null;function ye(t){if(t.setActive)return t.setActive();if(we)return t.focus(we);let e=[];for(let i=t;i&&(e.push(i,i.scrollTop,i.scrollLeft),i!=i.ownerDocument);i=i.parentNode);if(t.focus(null==we?{get preventScroll(){return we={preventScroll:!0},!0}}:void 0),!we){we=!1;for(let t=0;t<e.length;){let i=e[t++],n=e[t++],s=e[t++];i.scrollTop!=n&&(i.scrollTop=n),i.scrollLeft!=s&&(i.scrollLeft=s)}}}function be(t,e,i=e){let n=ve||(ve=document.createRange());return n.setEnd(t,i),n.setStart(t,e),n}function xe(t,e,i){let n={key:e,code:e,keyCode:i,which:i,cancelable:!0},s=new KeyboardEvent(\"keydown\",n);s.synthetic=!0,t.dispatchEvent(s);let r=new KeyboardEvent(\"keyup\",n);return r.synthetic=!0,t.dispatchEvent(r),s.defaultPrevented||r.defaultPrevented}function ke(t){for(;t.attributes.length;)t.removeAttributeNode(t.attributes[0])}class Se{constructor(t,e,i=!0){this.node=t,this.offset=e,this.precise=i}static before(t,e){return new Se(t.parentNode,ce(t),e)}static after(t,e){return new Se(t.parentNode,ce(t)+1,e)}}const Ae=[];class Ce{constructor(){this.parent=null,this.dom=null,this.dirty=2}get editorView(){if(!this.parent)throw new Error(\"Accessing view in orphan content view\");return this.parent.editorView}get overrideDOMText(){return null}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(t){let e=this.posAtStart;for(let i of this.children){if(i==t)return e;e+=i.length+i.breakAfter}throw new RangeError(\"Invalid child in posBefore\")}posAfter(t){return this.posBefore(t)+t.length}coordsAt(t,e){return null}sync(t){if(2&this.dirty){let e,i=this.dom,n=null;for(let s of this.children){if(s.dirty){if(!s.dom&&(e=n?n.nextSibling:i.firstChild)){let t=Ce.get(e);t&&(t.parent||t.constructor!=s.constructor)||s.reuseDOM(e)}s.sync(t),s.dirty=0}if(e=n?n.nextSibling:i.firstChild,t&&!t.written&&t.node==i&&e!=s.dom&&(t.written=!0),s.dom.parentNode==i)for(;e&&e!=s.dom;)e=Me(e);else i.insertBefore(s.dom,e);n=s.dom}for(e=n?n.nextSibling:i.firstChild,e&&t&&t.node==i&&(t.written=!0);e;)e=Me(e)}else if(1&this.dirty)for(let e of this.children)e.dirty&&(e.sync(t),e.dirty=0)}reuseDOM(t){}localPosFromDOM(t,e){let i;if(t==this.dom)i=this.dom.childNodes[e];else{let n=0==fe(t)?0:0==e?-1:1;for(;;){let e=t.parentNode;if(e==this.dom)break;0==n&&e.firstChild!=e.lastChild&&(n=t==e.firstChild?-1:1),t=e}i=n<0?t:t.nextSibling}if(i==this.dom.firstChild)return 0;for(;i&&!Ce.get(i);)i=i.nextSibling;if(!i)return this.length;for(let t=0,e=0;;t++){let n=this.children[t];if(n.dom==i)return e;e+=n.length+n.breakAfter}}domBoundsAround(t,e,i=0){let n=-1,s=-1,r=-1,o=-1;for(let l=0,h=i,a=i;l<this.children.length;l++){let i=this.children[l],c=h+i.length;if(h<t&&c>e)return i.domBoundsAround(t,e,h);if(c>=t&&-1==n&&(n=l,s=h),h>e&&i.dom.parentNode==this.dom){r=l,o=a;break}a=c,h=c+i.breakAfter}return{from:s,to:o<0?i+this.length:o,startDOM:(n?this.children[n-1].dom.nextSibling:null)||this.dom.firstChild,endDOM:r<this.children.length&&r>=0?this.children[r].dom:null}}markDirty(t=!1){this.dirty|=2,this.markParentsDirty(t)}markParentsDirty(t){for(let e=this.parent;e;e=e.parent){if(t&&(e.dirty|=2),1&e.dirty)return;e.dirty|=1,t=!1}}setParent(t){this.parent!=t&&(this.parent=t,this.dirty&&this.markParentsDirty(!0))}setDOM(t){this.dom&&(this.dom.cmView=null),this.dom=t,t.cmView=this}get rootView(){for(let t=this;;){let e=t.parent;if(!e)return t;t=e}}replaceChildren(t,e,i=Ae){this.markDirty();for(let i=t;i<e;i++){let t=this.children[i];t.parent==this&&t.destroy()}this.children.splice(t,e-t,...i);for(let t=0;t<i.length;t++)i[t].setParent(this)}ignoreMutation(t){return!1}ignoreEvent(t){return!1}childCursor(t=this.length){return new De(this.children,t,this.children.length)}childPos(t,e=1){return this.childCursor().findPos(t,e)}toString(){let t=this.constructor.name.replace(\"View\",\"\");return t+(this.children.length?\"(\"+this.children.join()+\")\":this.length?\"[\"+(\"Text\"==t?this.text:this.length)+\"]\":\"\")+(this.breakAfter?\"#\":\"\")}static get(t){return t.cmView}get isEditable(){return!0}merge(t,e,i,n,s,r){return!1}become(t){return!1}getSide(){return 0}destroy(){this.parent=null}}function Me(t){let e=t.nextSibling;return t.parentNode.removeChild(t),e}Ce.prototype.breakAfter=0;class De{constructor(t,e,i){this.children=t,this.pos=e,this.i=i,this.off=0}findPos(t,e=1){for(;;){if(t>this.pos||t==this.pos&&(e>0||0==this.i||this.children[this.i-1].breakAfter))return this.off=t-this.pos,this;let i=this.children[--this.i];this.pos-=i.length+i.breakAfter}}}function Oe(t,e,i,n,s,r,o,l,h){let{children:a}=t,c=a.length?a[e]:null,u=r.length?r[r.length-1]:null,f=u?u.breakAfter:o;if(!(e==n&&c&&!o&&!f&&r.length<2&&c.merge(i,s,r.length?u:null,0==i,l,h))){if(n<a.length){let t=a[n];t&&s<t.length?(e==n&&(t=t.split(s),s=0),!f&&u&&t.merge(0,s,u,!0,0,h)?r[r.length-1]=t:(s&&t.merge(0,s,null,!1,0,h),r.push(t))):(null==t?void 0:t.breakAfter)&&(u?u.breakAfter=1:o=1),n++}for(c&&(c.breakAfter=o,i>0&&(!o&&r.length&&c.merge(i,c.length,r[0],!1,l,0)?c.breakAfter=r.shift().breakAfter:(i<c.length||c.children.length&&0==c.children[c.children.length-1].length)&&c.merge(i,c.length,null,!1,l,0),e++));e<n&&r.length;)if(a[n-1].become(r[r.length-1]))n--,r.pop(),h=r.length?0:l;else{if(!a[e].become(r[0]))break;e++,r.shift(),l=r.length?0:h}!r.length&&e&&n<a.length&&!a[e-1].breakAfter&&a[n].merge(0,0,a[e-1],!1,l,h)&&e--,(e<n||r.length)&&t.replaceChildren(e,n,r)}}function Te(t,e,i,n,s,r){let o=t.childCursor(),{i:l,off:h}=o.findPos(i,1),{i:a,off:c}=o.findPos(e,-1),u=e-i;for(let t of n)u+=t.length;t.length+=u,Oe(t,a,c,l,h,n,0,s,r)}let Re=\"undefined\"!=typeof navigator?navigator:{userAgent:\"\",vendor:\"\",platform:\"\"},Ee=\"undefined\"!=typeof document?document:{documentElement:{style:{}}};const Le=/Edge\\/(\\d+)/.exec(Re.userAgent),Be=/MSIE \\d/.test(Re.userAgent),Pe=/Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(Re.userAgent),Ne=!!(Be||Pe||Le),Ie=!Ne&&/gecko\\/(\\d+)/i.test(Re.userAgent),Ve=!Ne&&/Chrome\\/(\\d+)/.exec(Re.userAgent),He=\"webkitFontSmoothing\"in Ee.documentElement.style,We=!Ne&&/Apple Computer/.test(Re.vendor),ze=We&&(/Mobile\\/\\w+/.test(Re.userAgent)||Re.maxTouchPoints>2);var Fe={mac:ze||/Mac/.test(Re.platform),windows:/Win/.test(Re.platform),linux:/Linux|X11/.test(Re.platform),ie:Ne,ie_version:Be?Ee.documentMode||6:Pe?+Pe[1]:Le?+Le[1]:0,gecko:Ie,gecko_version:Ie?+(/Firefox\\/(\\d+)/.exec(Re.userAgent)||[0,0])[1]:0,chrome:!!Ve,chrome_version:Ve?+Ve[1]:0,ios:ze,android:/Android\\b/.test(Re.userAgent),webkit:He,safari:We,webkit_version:He?+(/\\bAppleWebKit\\/(\\d+)/.exec(navigator.userAgent)||[0,0])[1]:0,tabSize:null!=Ee.documentElement.style.tabSize?\"tab-size\":\"-moz-tab-size\"};class qe extends Ce{constructor(t){super(),this.text=t}get length(){return this.text.length}createDOM(t){this.setDOM(t||document.createTextNode(this.text))}sync(t){this.dom||this.createDOM(),this.dom.nodeValue!=this.text&&(t&&t.node==this.dom&&(t.written=!0),this.dom.nodeValue=this.text)}reuseDOM(t){3==t.nodeType&&this.createDOM(t)}merge(t,e,i){return(!i||i instanceof qe&&!(this.length-(e-t)+i.length>256))&&(this.text=this.text.slice(0,t)+(i?i.text:\"\")+this.text.slice(e),this.markDirty(),!0)}split(t){let e=new qe(this.text.slice(t));return this.text=this.text.slice(0,t),this.markDirty(),e}localPosFromDOM(t,e){return t==this.dom?e:e?this.text.length:0}domAtPos(t){return new Se(this.dom,t)}domBoundsAround(t,e,i){return{from:i,to:i+this.length,startDOM:this.dom,endDOM:this.dom.nextSibling}}coordsAt(t,e){return je(this.dom,t,e)}}class _e extends Ce{constructor(t,e=[],i=0){super(),this.mark=t,this.children=e,this.length=i;for(let t of e)t.setParent(this)}setAttrs(t){if(ke(t),this.mark.class&&(t.className=this.mark.class),this.mark.attrs)for(let e in this.mark.attrs)t.setAttribute(e,this.mark.attrs[e]);return t}reuseDOM(t){t.nodeName==this.mark.tagName.toUpperCase()&&(this.setDOM(t),this.dirty|=6)}sync(t){this.dom?4&this.dirty&&this.setAttrs(this.dom):this.setDOM(this.setAttrs(document.createElement(this.mark.tagName))),super.sync(t)}merge(t,e,i,n,s,r){return(!i||!(!(i instanceof _e&&i.mark.eq(this.mark))||t&&s<=0||e<this.length&&r<=0))&&(Te(this,t,e,i?i.children:[],s-1,r-1),this.markDirty(),!0)}split(t){let e=[],i=0,n=-1,s=0;for(let r of this.children){let o=i+r.length;o>t&&e.push(i<t?r.split(t-i):r),n<0&&i>=t&&(n=s),i=o,s++}let r=this.length-t;return this.length=t,n>-1&&(this.children.length=n,this.markDirty()),new _e(this.mark,e,r)}domAtPos(t){return Ye(this.dom,this.children,t)}coordsAt(t,e){return Qe(this,t,e)}}function je(t,e,i){let n=t.nodeValue.length;e>n&&(e=n);let s=e,r=e,o=0;0==e&&i<0||e==n&&i>=0?Fe.chrome||Fe.gecko||(e?(s--,o=1):(r++,o=-1)):i<0?s--:r++;let l=be(t,s,r).getClientRects();if(!l.length)return de;let h=l[(o?o<0:i>=0)?0:l.length-1];return Fe.safari&&!o&&0==h.width&&(h=Array.prototype.find.call(l,(t=>t.width))||h),o?pe(h,o<0):h||null}class Ue extends Ce{constructor(t,e,i){super(),this.widget=t,this.length=e,this.side=i,this.prevWidget=null}static create(t,e,i){return new(t.customView||Ue)(t,e,i)}split(t){let e=Ue.create(this.widget,this.length-t,this.side);return this.length-=t,e}sync(){this.dom&&this.widget.updateDOM(this.dom)||(this.dom&&this.prevWidget&&this.prevWidget.destroy(this.dom),this.prevWidget=null,this.setDOM(this.widget.toDOM(this.editorView)),this.dom.contentEditable=\"false\")}getSide(){return this.side}merge(t,e,i,n,s,r){return!(i&&(!(i instanceof Ue&&this.widget.compare(i.widget))||t>0&&s<=0||e<this.length&&r<=0))&&(this.length=t+(i?i.length:0)+(this.length-e),!0)}become(t){return t.length==this.length&&t instanceof Ue&&t.side==this.side&&this.widget.constructor==t.widget.constructor&&(this.widget.eq(t.widget)||this.markDirty(!0),this.dom&&!this.prevWidget&&(this.prevWidget=this.widget),this.widget=t.widget,!0)}ignoreMutation(){return!0}ignoreEvent(t){return this.widget.ignoreEvent(t)}get overrideDOMText(){if(0==this.length)return d.empty;let t=this;for(;t.parent;)t=t.parent;let e=t.editorView,i=e&&e.state.doc,n=this.posAtStart;return i?i.slice(n,n+this.length):d.empty}domAtPos(t){return 0==t?Se.before(this.dom):Se.after(this.dom,t==this.length)}domBoundsAround(){return null}coordsAt(t,e){let i=this.dom.getClientRects(),n=null;if(!i.length)return de;for(let e=t>0?i.length-1:0;n=i[e],!(t>0?0==e:e==i.length-1||n.top<n.bottom);e+=t>0?-1:1);return 0==t&&e>0||t==this.length&&e<=0?n:pe(n,0==t)}get isEditable(){return!1}destroy(){super.destroy(),this.dom&&this.widget.destroy(this.dom)}}class $e extends Ue{domAtPos(t){let{topView:e,text:i}=this.widget;return e?Ke(t,0,e,i,((t,e)=>t.domAtPos(e)),(t=>new Se(i,Math.min(t,i.nodeValue.length)))):new Se(i,Math.min(t,i.nodeValue.length))}sync(){this.setDOM(this.widget.toDOM())}localPosFromDOM(t,e){let{topView:i,text:n}=this.widget;return i?Ge(t,e,i,n):Math.min(e,this.length)}ignoreMutation(){return!1}get overrideDOMText(){return null}coordsAt(t,e){let{topView:i,text:n}=this.widget;return i?Ke(t,e,i,n,((t,e,i)=>t.coordsAt(e,i)),((t,e)=>je(n,t,e))):je(n,t,e)}destroy(){var t;super.destroy(),null===(t=this.widget.topView)||void 0===t||t.destroy()}get isEditable(){return!0}}function Ke(t,e,i,n,s,r){if(i instanceof _e){for(let o of i.children){let i=oe(o.dom,n),l=i?n.nodeValue.length:o.length;if(t<l||t==l&&o.getSide()<=0)return i?Ke(t,e,o,n,s,r):s(o,t,e);t-=l}return s(i,i.length,-1)}return i.dom==n?r(t,e):s(i,t,e)}function Ge(t,e,i,n){if(i instanceof _e)for(let s of i.children){let i=0,r=oe(s.dom,n);if(oe(s.dom,t))return i+(r?Ge(t,e,s,n):s.localPosFromDOM(t,e));i+=r?n.nodeValue.length:s.length}else if(i.dom==n)return Math.min(e,n.nodeValue.length);return i.localPosFromDOM(t,e)}class Je extends Ce{constructor(t){super(),this.side=t}get length(){return 0}merge(){return!1}become(t){return t instanceof Je&&t.side==this.side}split(){return new Je(this.side)}sync(){if(!this.dom){let t=document.createElement(\"img\");t.className=\"cm-widgetBuffer\",t.setAttribute(\"aria-hidden\",\"true\"),this.setDOM(t)}}getSide(){return this.side}domAtPos(t){return Se.before(this.dom)}localPosFromDOM(){return 0}domBoundsAround(){return null}coordsAt(t){let e=this.dom.getBoundingClientRect(),i=function(t,e){let i=t.parent,n=i?i.children.indexOf(t):-1;for(;i&&n>=0;)if(e<0?n>0:n<i.children.length){let t=i.children[n+e];if(t instanceof qe){let i=t.coordsAt(e<0?t.length:0,e);if(i)return i}n+=e}else{if(!(i instanceof _e&&i.parent)){let t=i.dom.lastChild;if(t&&\"BR\"==t.nodeName)return t.getClientRects()[0];break}n=i.parent.children.indexOf(i)+(e<0?0:1),i=i.parent}return}(this,this.side>0?-1:1);return i&&i.top<e.bottom&&i.bottom>e.top?{left:e.left,right:e.right,top:i.top,bottom:i.bottom}:e}get overrideDOMText(){return d.empty}}function Ye(t,e,i){let n=0;for(let s=0;n<e.length;n++){let r=e[n],o=s+r.length;if(!(o==s&&r.getSide()<=0)){if(i>s&&i<o&&r.dom.parentNode==t)return r.domAtPos(i-s);if(i<=s)break;s=o}}for(;n>0;n--){let i=e[n-1].dom;if(i.parentNode==t)return Se.after(i)}return new Se(t,0)}function Xe(t,e,i){let n,{children:s}=t;i>0&&e instanceof _e&&s.length&&(n=s[s.length-1])instanceof _e&&n.mark.eq(e.mark)?Xe(n,e.children[0],i-1):(s.push(e),e.setParent(t)),t.length+=e.length}function Qe(t,e,i){for(let n=0,s=0;s<t.children.length;s++){let r,o=t.children[s],l=n+o.length;if((i<=0||l==t.length||o.getSide()>0?l>=e:l>e)&&(e<l||s+1==t.children.length||(r=t.children[s+1]).length||r.getSide()>0)){let t=0;if(l==n){if(o.getSide()<=0)continue;t=i=-o.getSide()}let s=o.coordsAt(Math.max(0,e-n),i);return t&&s?pe(s,i<0):s}n=l}let n=t.dom.lastChild;if(!n)return t.dom.getBoundingClientRect();let s=he(n);return s[s.length-1]||null}function Ze(t,e){for(let i in t)\"class\"==i&&e.class?e.class+=\" \"+t.class:\"style\"==i&&e.style?e.style+=\";\"+t.style:e[i]=t[i];return e}function ti(t,e){if(t==e)return!0;if(!t||!e)return!1;let i=Object.keys(t),n=Object.keys(e);if(i.length!=n.length)return!1;for(let s of i)if(-1==n.indexOf(s)||t[s]!==e[s])return!1;return!0}function ei(t,e,i){if(e)for(let n in e)i&&n in i||t.removeAttribute(n);if(i)for(let n in i)e&&e[n]==i[n]||t.setAttribute(n,i[n])}qe.prototype.children=Ue.prototype.children=Je.prototype.children=Ae;class ii{eq(t){return!1}updateDOM(t){return!1}compare(t){return this==t||this.constructor==t.constructor&&this.eq(t)}get estimatedHeight(){return-1}ignoreEvent(t){return!0}get customView(){return null}destroy(t){}}var ni=function(t){return t[t.Text=0]=\"Text\",t[t.WidgetBefore=1]=\"WidgetBefore\",t[t.WidgetAfter=2]=\"WidgetAfter\",t[t.WidgetRange=3]=\"WidgetRange\",t}(ni||(ni={}));class si extends Bt{constructor(t,e,i,n){super(),this.startSide=t,this.endSide=e,this.widget=i,this.spec=n}get heightRelevant(){return!1}static mark(t){return new ri(t)}static widget(t){let e=t.side||0,i=!!t.block;return e+=i?e>0?3e8:-4e8:e>0?1e8:-1e8,new li(t,e,e,i,t.widget||null,!1)}static replace(t){let e,i,n=!!t.block;if(t.isBlockGap)e=-5e8,i=4e8;else{let{start:s,end:r}=hi(t,n);e=(s?n?-3e8:-1:5e8)-1,i=1+(r?n?2e8:1:-6e8)}return new li(t,e,i,n,t.widget||null,!0)}static line(t){return new oi(t)}static set(t,e=!1){return Vt.of(t,e)}hasHeight(){return!!this.widget&&this.widget.estimatedHeight>-1}}si.none=Vt.empty;class ri extends si{constructor(t){let{start:e,end:i}=hi(t);super(e?-1:5e8,i?1:-6e8,null,t),this.tagName=t.tagName||\"span\",this.class=t.class||\"\",this.attrs=t.attributes||null}eq(t){return this==t||t instanceof ri&&this.tagName==t.tagName&&this.class==t.class&&ti(this.attrs,t.attrs)}range(t,e=t){if(t>=e)throw new RangeError(\"Mark decorations may not be empty\");return super.range(t,e)}}ri.prototype.point=!1;class oi extends si{constructor(t){super(-2e8,-2e8,null,t)}eq(t){return t instanceof oi&&ti(this.spec.attributes,t.spec.attributes)}range(t,e=t){if(e!=t)throw new RangeError(\"Line decoration ranges must be zero-length\");return super.range(t,e)}}oi.prototype.mapMode=S.TrackBefore,oi.prototype.point=!0;class li extends si{constructor(t,e,i,n,s,r){super(e,i,s,t),this.block=n,this.isReplace=r,this.mapMode=n?e<=0?S.TrackBefore:S.TrackAfter:S.TrackDel}get type(){return this.startSide<this.endSide?ni.WidgetRange:this.startSide<=0?ni.WidgetBefore:ni.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&this.widget.estimatedHeight>=5}eq(t){return t instanceof li&&(e=this.widget,i=t.widget,e==i||!!(e&&i&&e.compare(i)))&&this.block==t.block&&this.startSide==t.startSide&&this.endSide==t.endSide;var e,i}range(t,e=t){if(this.isReplace&&(t>e||t==e&&this.startSide>0&&this.endSide<=0))throw new RangeError(\"Invalid range for replacement decoration\");if(!this.isReplace&&e!=t)throw new RangeError(\"Widget decorations can only have zero-length ranges\");return super.range(t,e)}}function hi(t,e=!1){let{inclusiveStart:i,inclusiveEnd:n}=t;return null==i&&(i=t.inclusive),null==n&&(n=t.inclusive),{start:null!=i?i:e,end:null!=n?n:e}}function ai(t,e,i,n=0){let s=i.length-1;s>=0&&i[s]+n>=t?i[s]=Math.max(i[s],e):i.push(t,e)}li.prototype.point=!0;class ci extends Ce{constructor(){super(...arguments),this.children=[],this.length=0,this.prevAttrs=void 0,this.attrs=null,this.breakAfter=0}merge(t,e,i,n,s,r){if(i){if(!(i instanceof ci))return!1;this.dom||i.transferDOM(this)}return n&&this.setDeco(i?i.attrs:null),Te(this,t,e,i?i.children:[],s,r),!0}split(t){let e=new ci;if(e.breakAfter=this.breakAfter,0==this.length)return e;let{i:i,off:n}=this.childPos(t);n&&(e.append(this.children[i].split(n),0),this.children[i].merge(n,this.children[i].length,null,!1,0,0),i++);for(let t=i;t<this.children.length;t++)e.append(this.children[t],0);for(;i>0&&0==this.children[i-1].length;)this.children[--i].destroy();return this.children.length=i,this.markDirty(),this.length=t,e}transferDOM(t){this.dom&&(t.setDOM(this.dom),t.prevAttrs=void 0===this.prevAttrs?this.attrs:this.prevAttrs,this.prevAttrs=void 0,this.dom=null)}setDeco(t){ti(this.attrs,t)||(this.dom&&(this.prevAttrs=this.attrs,this.markDirty()),this.attrs=t)}append(t,e){Xe(this,t,e)}addLineDeco(t){let e=t.spec.attributes,i=t.spec.class;e&&(this.attrs=Ze(e,this.attrs||{})),i&&(this.attrs=Ze({class:i},this.attrs||{}))}domAtPos(t){return Ye(this.dom,this.children,t)}reuseDOM(t){\"DIV\"==t.nodeName&&(this.setDOM(t),this.dirty|=6)}sync(t){var e;this.dom?4&this.dirty&&(ke(this.dom),this.dom.className=\"cm-line\",this.prevAttrs=this.attrs?null:void 0):(this.setDOM(document.createElement(\"div\")),this.dom.className=\"cm-line\",this.prevAttrs=this.attrs?null:void 0),void 0!==this.prevAttrs&&(ei(this.dom,this.prevAttrs,this.attrs),this.dom.classList.add(\"cm-line\"),this.prevAttrs=void 0),super.sync(t);let i=this.dom.lastChild;for(;i&&Ce.get(i)instanceof _e;)i=i.lastChild;if(!(i&&this.length&&(\"BR\"==i.nodeName||0!=(null===(e=Ce.get(i))||void 0===e?void 0:e.isEditable)||Fe.ios&&this.children.some((t=>t instanceof qe))))){let t=document.createElement(\"BR\");t.cmIgnore=!0,this.dom.appendChild(t)}}measureTextSize(){if(0==this.children.length||this.length>20)return null;let t=0;for(let e of this.children){if(!(e instanceof qe))return null;let i=he(e.dom);if(1!=i.length)return null;t+=i[0].width}return{lineHeight:this.dom.getBoundingClientRect().height,charWidth:t/this.length}}coordsAt(t,e){return Qe(this,t,e)}become(t){return!1}get type(){return ni.Text}static find(t,e){for(let i=0,n=0;i<t.children.length;i++){let s=t.children[i],r=n+s.length;if(r>=e){if(s instanceof ci)return s;if(r>e)break}n=r+s.breakAfter}return null}}class ui extends Ce{constructor(t,e,i){super(),this.widget=t,this.length=e,this.type=i,this.breakAfter=0,this.prevWidget=null}merge(t,e,i,n,s,r){return!(i&&(!(i instanceof ui&&this.widget.compare(i.widget))||t>0&&s<=0||e<this.length&&r<=0))&&(this.length=t+(i?i.length:0)+(this.length-e),!0)}domAtPos(t){return 0==t?Se.before(this.dom):Se.after(this.dom,t==this.length)}split(t){let e=this.length-t;this.length=t;let i=new ui(this.widget,e,this.type);return i.breakAfter=this.breakAfter,i}get children(){return Ae}sync(){this.dom&&this.widget.updateDOM(this.dom)||(this.dom&&this.prevWidget&&this.prevWidget.destroy(this.dom),this.prevWidget=null,this.setDOM(this.widget.toDOM(this.editorView)),this.dom.contentEditable=\"false\")}get overrideDOMText(){return this.parent?this.parent.view.state.doc.slice(this.posAtStart,this.posAtEnd):d.empty}domBoundsAround(){return null}become(t){return t instanceof ui&&t.type==this.type&&t.widget.constructor==this.widget.constructor&&(t.widget.eq(this.widget)||this.markDirty(!0),this.dom&&!this.prevWidget&&(this.prevWidget=this.widget),this.widget=t.widget,this.length=t.length,this.breakAfter=t.breakAfter,!0)}ignoreMutation(){return!0}ignoreEvent(t){return this.widget.ignoreEvent(t)}destroy(){super.destroy(),this.dom&&this.widget.destroy(this.dom)}}class fi{constructor(t,e,i,n){this.doc=t,this.pos=e,this.end=i,this.disallowBlockEffectsBelow=n,this.content=[],this.curLine=null,this.breakAtStart=0,this.pendingBuffer=0,this.atCursorPos=!0,this.openStart=-1,this.openEnd=-1,this.text=\"\",this.textOff=0,this.cursor=t.iter(),this.skip=e}posCovered(){if(0==this.content.length)return!this.breakAtStart&&this.doc.lineAt(this.pos).from!=this.pos;let t=this.content[this.content.length-1];return!(t.breakAfter||t instanceof ui&&t.type==ni.WidgetBefore)}getLine(){return this.curLine||(this.content.push(this.curLine=new ci),this.atCursorPos=!0),this.curLine}flushBuffer(t){this.pendingBuffer&&(this.curLine.append(di(new Je(-1),t),t.length),this.pendingBuffer=0)}addBlockWidget(t){this.flushBuffer([]),this.curLine=null,this.content.push(t)}finish(t){t?this.pendingBuffer=0:this.flushBuffer([]),this.posCovered()||this.getLine()}buildText(t,e,i){for(;t>0;){if(this.textOff==this.text.length){let{value:e,lineBreak:i,done:n}=this.cursor.next(this.skip);if(this.skip=0,n)throw new Error(\"Ran out of text content when drawing inline views\");if(i){this.posCovered()||this.getLine(),this.content.length?this.content[this.content.length-1].breakAfter=1:this.breakAtStart=1,this.flushBuffer([]),this.curLine=null,t--;continue}this.text=e,this.textOff=0}let n=Math.min(this.text.length-this.textOff,t,512);this.flushBuffer(e.slice(0,i)),this.getLine().append(di(new qe(this.text.slice(this.textOff,this.textOff+n)),e),i),this.atCursorPos=!0,this.textOff+=n,t-=n,i=0}}span(t,e,i,n){this.buildText(e-t,i,n),this.pos=e,this.openStart<0&&(this.openStart=n)}point(t,e,i,n,s){let r=e-t;if(i instanceof li)if(i.block){let{type:t}=i;t!=ni.WidgetAfter||this.posCovered()||this.getLine(),this.addBlockWidget(new ui(i.widget||new pi(\"div\"),r,t))}else{let o=Ue.create(i.widget||new pi(\"span\"),r,i.startSide),l=this.atCursorPos&&!o.isEditable&&s<=n.length&&(t<e||i.startSide>0),h=!o.isEditable&&(t<e||i.startSide<=0),a=this.getLine();2!=this.pendingBuffer||l||(this.pendingBuffer=0),this.flushBuffer(n),l&&(a.append(di(new Je(1),n),s),s=n.length+Math.max(0,s-n.length)),a.append(di(o,n),s),this.atCursorPos=h,this.pendingBuffer=h?t<e?1:2:0}else this.doc.lineAt(this.pos).from==this.pos&&this.getLine().addLineDeco(i);r&&(this.textOff+r<=this.text.length?this.textOff+=r:(this.skip+=r-(this.text.length-this.textOff),this.text=\"\",this.textOff=0),this.pos=e),this.openStart<0&&(this.openStart=s)}filterPoint(t,e,i,n){if(n<this.disallowBlockEffectsBelow&&i instanceof li){if(i.block)throw new RangeError(\"Block decorations may not be specified via plugins\");if(e>this.doc.lineAt(this.pos).to)throw new RangeError(\"Decorations that replace line breaks may not be specified via plugins\")}return!0}static build(t,e,i,n,s){let r=new fi(t,e,i,s);return r.openEnd=Vt.spans(n,e,i,r),r.openStart<0&&(r.openStart=r.openEnd),r.finish(r.openEnd),r}}function di(t,e){for(let i of e)t=new _e(i,[t],t.length);return t}class pi extends ii{constructor(t){super(),this.tag=t}eq(t){return t.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(t){return t.nodeName.toLowerCase()==this.tag}}const mi=[],gi=V.define(),vi=V.define(),wi=V.define(),yi=V.define(),bi=V.define(),xi=V.define(),ki=dt.define({map:(t,e)=>t.map(e)}),Si=dt.define({map:(t,e)=>t.map(e)});class Ai{constructor(t,e=\"nearest\",i=\"nearest\",n=5,s=5){this.range=t,this.y=e,this.x=i,this.yMargin=n,this.xMargin=s}map(t){return t.empty?this:new Ai(this.range.map(t),this.y,this.x,this.yMargin,this.xMargin)}}const Ci=dt.define({map:(t,e)=>t.map(e)});function Mi(t,e,i){let n=t.facet(yi);n.length?n[0](e):window.onerror?window.onerror(String(e),i,void 0,void 0,e):i?console.error(i+\":\",e):console.error(e)}const Di=V.define({combine:t=>!t.length||t[0]});class Oi{constructor(t,e){this.field=t,this.get=e}}class Ti{from(t){return new Oi(this,t)}static define(){return new Ti}}Ti.decorations=Ti.define(),Ti.atomicRanges=Ti.define(),Ti.scrollMargins=Ti.define();let Ri=0;const Ei=V.define();class Li{constructor(t,e,i){this.id=t,this.create=e,this.fields=i,this.extension=Ei.of(this)}static define(t,e){let{eventHandlers:i,provide:n,decorations:s}=e||{},r=[];if(n)for(let t of Array.isArray(n)?n:[n])r.push(t);return i&&r.push(Bi.from((t=>({plugin:t,handlers:i})))),s&&r.push(Ti.decorations.from(s)),new Li(Ri++,t,r)}static fromClass(t,e){return Li.define((e=>new t(e)),e)}}const Bi=Ti.define();class Pi{constructor(t){this.spec=t,this.mustUpdate=null,this.value=null}takeField(t,e){if(this.spec)for(let{field:i,get:n}of this.spec.fields)i==t&&e.push(n(this.value))}update(t){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(e){if(Mi(t.state,e,\"CodeMirror plugin crashed\"),this.value.destroy)try{this.value.destroy()}catch(t){}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.create(t)}catch(e){Mi(t.state,e,\"CodeMirror plugin crashed\"),this.deactivate()}return this}destroy(t){var e;if(null===(e=this.value)||void 0===e?void 0:e.destroy)try{this.value.destroy()}catch(e){Mi(t.state,e,\"CodeMirror plugin crashed\")}}deactivate(){this.spec=this.value=null}}const Ni=V.define(),Ii=V.define(),Vi=V.define(),Hi=V.define();class Wi{constructor(t,e,i,n){this.fromA=t,this.toA=e,this.fromB=i,this.toB=n}join(t){return new Wi(Math.min(this.fromA,t.fromA),Math.max(this.toA,t.toA),Math.min(this.fromB,t.fromB),Math.max(this.toB,t.toB))}addToSet(t){let e=t.length,i=this;for(;e>0;e--){let n=t[e-1];if(!(n.fromA>i.toA)){if(n.toA<i.fromA)break;i=i.join(n),t.splice(e-1,1)}}return t.splice(e,0,i),t}static extendWithRanges(t,e){if(0==e.length)return t;let i=[];for(let n=0,s=0,r=0,o=0;;n++){let l=n==t.length?null:t[n],h=r-o,a=l?l.fromB:1e9;for(;s<e.length&&e[s]<a;){let t=e[s],n=e[s+1],r=Math.max(o,t),l=Math.min(a,n);if(r<=l&&new Wi(r+h,l+h,r,l).addToSet(i),n>a)break;s+=2}if(!l)return i;new Wi(l.fromA,l.toA,l.fromB,l.toB).addToSet(i),r=l.toA,o=l.toB}}}class zi{constructor(t,e,i=mi){this.view=t,this.state=e,this.transactions=i,this.flags=0,this.startState=t.state,this.changes=C.empty(this.startState.doc.length);for(let t of i)this.changes=this.changes.compose(t.changes);let n=[];this.changes.iterChangedRanges(((t,e,i,s)=>n.push(new Wi(t,e,i,s)))),this.changedRanges=n;let s=t.hasFocus;s!=t.inputState.notifiedFocused&&(t.inputState.notifiedFocused=s,this.flags|=1)}get viewportChanged(){return(4&this.flags)>0}get heightChanged(){return(2&this.flags)>0}get geometryChanged(){return this.docChanged||(10&this.flags)>0}get focusChanged(){return(1&this.flags)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some((t=>t.selection))}get empty(){return 0==this.flags&&0==this.transactions.length}}var Fi=function(t){return t[t.LTR=0]=\"LTR\",t[t.RTL=1]=\"RTL\",t}(Fi||(Fi={}));const qi=Fi.LTR,_i=Fi.RTL;function ji(t){let e=[];for(let i=0;i<t.length;i++)e.push(1<<+t[i]);return e}const Ui=ji(\"88888888888888888888888888888888888666888888787833333333337888888000000000000000000000000008888880000000000000000000000000088888888888888888888888888888888888887866668888088888663380888308888800000000000000000000000800000000000000000000000000000008\"),$i=ji(\"4444448826627288999999999992222222222222222222222222222222222222222222222229999999999999999999994444444444644222822222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222999999949999999229989999223333333333\"),Ki=Object.create(null),Gi=[];for(let t of[\"()\",\"[]\",\"{}\"]){let e=t.charCodeAt(0),i=t.charCodeAt(1);Ki[e]=i,Ki[i]=-e}const Ji=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;class Yi{constructor(t,e,i){this.from=t,this.to=e,this.level=i}get dir(){return this.level%2?_i:qi}side(t,e){return this.dir==e==t?this.to:this.from}static find(t,e,i,n){let s=-1;for(let r=0;r<t.length;r++){let o=t[r];if(o.from<=e&&o.to>=e){if(o.level==i)return r;(s<0||(0!=n?n<0?o.from<e:o.to>e:t[s].level>o.level))&&(s=r)}}if(s<0)throw new RangeError(\"Index out of range\");return s}}const Xi=[];function Qi(t){return[new Yi(0,t,0)]}let Zi=\"\";function tn(t,e,i,s,r){var o;let l=s.head-t.from,h=-1;if(0==l){if(!r||!t.length)return null;e[0].level!=i&&(l=e[0].side(!1,i),h=0)}else if(l==t.length){if(r)return null;let t=e[e.length-1];t.level!=i&&(l=t.side(!0,i),h=e.length-1)}h<0&&(h=Yi.find(e,l,null!==(o=s.bidiLevel)&&void 0!==o?o:-1,s.assoc));let a=e[h];l==a.side(r,i)&&(a=e[h+=r?1:-1],l=a.side(!r,i));let c=r==(a.dir==i),u=n(t.text,l,c);if(Zi=t.text.slice(Math.min(l,u),Math.max(l,u)),u!=a.side(r,i))return B.cursor(u+t.from,c?-1:1,a.level);let f=h==(r?e.length-1:0)?null:e[h+(r?1:-1)];return f||a.level==i?f&&f.level<a.level?B.cursor(f.side(!r,i)+t.from,r?1:-1,f.level):B.cursor(u+t.from,r?-1:1,a.level):B.cursor(r?t.to:t.from,r?-1:1,i)}class en{constructor(t,e){this.points=t,this.text=\"\",this.lineSeparator=e.facet(Ct.lineSeparator)}append(t){this.text+=t}lineBreak(){this.text+=\"￿\"}readRange(t,e){if(!t)return this;let i=t.parentNode;for(let n=t;;){this.findPointBefore(i,n),this.readNode(n);let t=n.nextSibling;if(t==e)break;let s=Ce.get(n),r=Ce.get(t);(s&&r?s.breakAfter:(s?s.breakAfter:nn(n))||nn(t)&&(\"BR\"!=n.nodeName||n.cmIgnore))&&this.lineBreak(),n=t}return this.findPointBefore(i,e),this}readTextNode(t){let e=t.nodeValue;for(let i of this.points)i.node==t&&(i.pos=this.text.length+Math.min(i.offset,e.length));for(let i=0,n=this.lineSeparator?null:/\\r\\n?|\\n/g;;){let s,r=-1,o=1;if(this.lineSeparator?(r=e.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(s=n.exec(e))&&(r=s.index,o=s[0].length),this.append(e.slice(i,r<0?e.length:r)),r<0)break;if(this.lineBreak(),o>1)for(let e of this.points)e.node==t&&e.pos>this.text.length&&(e.pos-=o-1);i=r+o}}readNode(t){if(t.cmIgnore)return;let e=Ce.get(t),i=e&&e.overrideDOMText;if(null!=i){this.findPointInside(t,i.length);for(let t=i.iter();!t.next().done;)t.lineBreak?this.lineBreak():this.append(t.value)}else 3==t.nodeType?this.readTextNode(t):\"BR\"==t.nodeName?t.nextSibling&&this.lineBreak():1==t.nodeType&&this.readRange(t.firstChild,null)}findPointBefore(t,e){for(let i of this.points)i.node==t&&t.childNodes[i.offset]==e&&(i.pos=this.text.length)}findPointInside(t,e){for(let i of this.points)(3==t.nodeType?i.node==t:t.contains(i.node))&&(i.pos=this.text.length+Math.min(e,i.offset))}}function nn(t){return 1==t.nodeType&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\\d|SECTION|PRE)$/.test(t.nodeName)}class sn{constructor(t,e){this.node=t,this.offset=e,this.pos=-1}}class rn extends Ce{constructor(t){super(),this.view=t,this.compositionDeco=si.none,this.decorations=[],this.pluginDecorationLength=0,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.setDOM(t.contentDOM),this.children=[new ci],this.children[0].setParent(this),this.updateDeco(),this.updateInner([new Wi(0,0,0,t.state.doc.length)],0)}get root(){return this.view.root}get editorView(){return this.view}get length(){return this.view.state.doc.length}update(t){let e=t.changedRanges;this.minWidth>0&&e.length&&(e.every((({fromA:t,toA:e})=>e<this.minWidthFrom||t>this.minWidthTo))?(this.minWidthFrom=t.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=t.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.view.inputState.composing<0?this.compositionDeco=si.none:(t.transactions.length||this.dirty)&&(this.compositionDeco=function(t,e){let i=ln(t);if(!i)return si.none;let{from:n,to:s,node:r,text:o}=i,l=e.mapPos(n,1),h=Math.max(l,e.mapPos(s,-1)),{state:a}=t,c=3==r.nodeType?r.nodeValue:new en([],a).readRange(r.firstChild,null).text;if(h-l<c.length)if(a.doc.sliceString(l,Math.min(a.doc.length,l+c.length),\"￿\")==c)h=l+c.length;else{if(a.doc.sliceString(Math.max(0,h-c.length),h,\"￿\")!=c)return si.none;l=h-c.length}else if(a.doc.sliceString(l,h,\"￿\")!=c)return si.none;let u=Ce.get(r);u instanceof $e?u=u.widget.topView:u&&(u.parent=null);return si.set(si.replace({widget:new hn(r,o,u)}).range(l,h))}(this.view,t.changes)),(Fe.ie||Fe.chrome)&&!this.compositionDeco.size&&t&&t.state.doc.lines!=t.startState.doc.lines&&(this.forceSelection=!0);let i=function(t,e,i){let n=new cn;return Vt.compare(t,e,i,n),n.changes}(this.decorations,this.updateDeco(),t.changes);return e=Wi.extendWithRanges(e,i),(0!=this.dirty||0!=e.length)&&(this.updateInner(e,t.startState.doc.length),t.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(t,e){this.view.viewState.mustMeasureContent=!0,this.updateChildren(t,e);let{observer:i}=this.view;i.ignore((()=>{this.dom.style.height=this.view.viewState.contentHeight+\"px\",this.dom.style.minWidth=this.minWidth?this.minWidth+\"px\":\"\";let t=Fe.chrome||Fe.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.sync(t),this.dirty=0,t&&(t.written||i.selectionRange.focusNode!=t.node)&&(this.forceSelection=!0),this.dom.style.height=\"\"}));let n=[];if(this.view.viewport.from||this.view.viewport.to<this.view.state.doc.length)for(let t of this.children)t instanceof ui&&t.widget instanceof on&&n.push(t.dom);i.updateGaps(n)}updateChildren(t,e){let i=this.childCursor(e);for(let e=t.length-1;;e--){let n=e>=0?t[e]:null;if(!n)break;let{fromA:s,toA:r,fromB:o,toB:l}=n,{content:h,breakAtStart:a,openStart:c,openEnd:u}=fi.build(this.view.state.doc,o,l,this.decorations,this.pluginDecorationLength),{i:f,off:d}=i.findPos(r,1),{i:p,off:m}=i.findPos(s,-1);Oe(this,p,m,f,d,h,a,c,u)}}updateSelection(t=!1,e=!1){if(t&&this.view.observer.readSelectionRange(),!e&&!this.mayControlSelection()||Fe.ios&&this.view.inputState.rapidCompositionStart)return;let i=this.forceSelection;this.forceSelection=!1;let n=this.view.state.selection.main,s=this.domAtPos(n.anchor),r=n.empty?s:this.domAtPos(n.head);if(Fe.gecko&&n.empty&&(1==(o=s).node.nodeType&&o.node.firstChild&&(0==o.offset||\"false\"==o.node.childNodes[o.offset-1].contentEditable)&&(o.offset==o.node.childNodes.length||\"false\"==o.node.childNodes[o.offset].contentEditable))){let t=document.createTextNode(\"\");this.view.observer.ignore((()=>s.node.insertBefore(t,s.node.childNodes[s.offset]||null))),s=r=new Se(t,0),i=!0}var o;let l=this.view.observer.selectionRange;!i&&l.focusNode&&ae(s.node,s.offset,l.anchorNode,l.anchorOffset)&&ae(r.node,r.offset,l.focusNode,l.focusOffset)||(this.view.observer.ignore((()=>{Fe.android&&Fe.chrome&&this.dom.contains(l.focusNode)&&function(t,e){for(let i=t;i&&i!=e;i=i.assignedSlot||i.parentNode)if(1==i.nodeType&&\"false\"==i.contentEditable)return!0;return!1}(l.focusNode,this.dom)&&(this.dom.blur(),this.dom.focus({preventScroll:!0}));let t=re(this.root);if(n.empty){if(Fe.gecko){let t=(e=s.node,i=s.offset,1!=e.nodeType?0:(i&&\"false\"==e.childNodes[i-1].contentEditable?1:0)|(i<e.childNodes.length&&\"false\"==e.childNodes[i].contentEditable?2:0));if(t&&3!=t){let e=an(s.node,s.offset,1==t?1:-1);e&&(s=new Se(e,1==t?0:e.nodeValue.length))}}t.collapse(s.node,s.offset),null!=n.bidiLevel&&null!=l.cursorBidiLevel&&(l.cursorBidiLevel=n.bidiLevel)}else if(t.extend)t.collapse(s.node,s.offset),t.extend(r.node,r.offset);else{let e=document.createRange();n.anchor>n.head&&([s,r]=[r,s]),e.setEnd(r.node,r.offset),e.setStart(s.node,s.offset),t.removeAllRanges(),t.addRange(e)}var e,i})),this.view.observer.setSelectionRange(s,r)),this.impreciseAnchor=s.precise?null:new Se(l.anchorNode,l.anchorOffset),this.impreciseHead=r.precise?null:new Se(l.focusNode,l.focusOffset)}enforceCursorAssoc(){if(this.compositionDeco.size)return;let t=this.view.state.selection.main,e=re(this.root);if(!t.empty||!t.assoc||!e.modify)return;let i=ci.find(this,t.head);if(!i)return;let n=i.posAtStart;if(t.head==n||t.head==n+i.length)return;let s=this.coordsAt(t.head,-1),r=this.coordsAt(t.head,1);if(!s||!r||s.bottom>r.top)return;let o=this.domAtPos(t.head+t.assoc);e.collapse(o.node,o.offset),e.modify(\"move\",t.assoc<0?\"forward\":\"backward\",\"lineboundary\")}mayControlSelection(){return this.view.state.facet(Di)?this.root.activeElement==this.dom:le(this.dom,this.view.observer.selectionRange)}nearest(t){for(let e=t;e;){let t=Ce.get(e);if(t&&t.rootView==this)return t;e=e.parentNode}return null}posFromDOM(t,e){let i=this.nearest(t);if(!i)throw new RangeError(\"Trying to find position for a DOM position outside of the document\");return i.localPosFromDOM(t,e)+i.posAtStart}domAtPos(t){let{i:e,off:i}=this.childCursor().findPos(t,-1);for(;e<this.children.length-1;){let t=this.children[e];if(i<t.length||t instanceof ci)break;e++,i=0}return this.children[e].domAtPos(i)}coordsAt(t,e){for(let i=this.length,n=this.children.length-1;;n--){let s=this.children[n],r=i-s.breakAfter-s.length;if(t>r||t==r&&s.type!=ni.WidgetBefore&&s.type!=ni.WidgetAfter&&(!n||2==e||this.children[n-1].breakAfter||this.children[n-1].type==ni.WidgetBefore&&e>-2))return s.coordsAt(t-r,e);i=r}}measureVisibleLineHeights(){let t=[],{from:e,to:i}=this.view.viewState.viewport,n=this.view.contentDOM.clientWidth,s=n>Math.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,r=-1;for(let o=0,l=0;l<this.children.length;l++){let h=this.children[l],a=o+h.length;if(a>i)break;if(o>=e){let e=h.dom.getBoundingClientRect();if(t.push(e.height),s){let t=h.dom.lastChild,i=t?he(t):[];if(i.length){let t=i[i.length-1],s=this.view.textDirection==Fi.LTR?t.right-e.left:e.right-t.left;s>r&&(r=s,this.minWidth=n,this.minWidthFrom=o,this.minWidthTo=a)}}}o=a+h.breakAfter}return t}measureTextSize(){for(let t of this.children)if(t instanceof ci){let e=t.measureTextSize();if(e)return e}let t,e,i=document.createElement(\"div\");return i.className=\"cm-line\",i.textContent=\"abc def ghi jkl mno pqr stu\",this.view.observer.ignore((()=>{this.dom.appendChild(i);let n=he(i.firstChild)[0];t=i.getBoundingClientRect().height,e=n?n.width/27:7,i.remove()})),{lineHeight:t,charWidth:e}}childCursor(t=this.length){let e=this.children.length;return e&&(t-=this.children[--e].length),new De(this.children,t,e)}computeBlockGapDeco(){let t=[],e=this.view.viewState;for(let i=0,n=0;;n++){let s=n==e.viewports.length?null:e.viewports[n],r=s?s.from-1:this.length;if(r>i){let n=e.lineBlockAt(r).bottom-e.lineBlockAt(i).top;t.push(si.replace({widget:new on(n),block:!0,inclusive:!0,isBlockGap:!0}).range(i,r))}if(!s)break;i=s.to+1}return si.set(t)}updateDeco(){let t=this.view.pluginField(Ti.decorations);return this.pluginDecorationLength=t.length,this.decorations=[...t,...this.view.state.facet(Vi),this.compositionDeco,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco]}scrollIntoView(t){let e,{range:i}=t,n=this.coordsAt(i.head,i.empty?i.assoc:i.head>i.anchor?-1:1);if(!n)return;!i.empty&&(e=this.coordsAt(i.anchor,i.anchor>i.head?-1:1))&&(n={left:Math.min(n.left,e.left),top:Math.min(n.top,e.top),right:Math.max(n.right,e.right),bottom:Math.max(n.bottom,e.bottom)});let s=0,r=0,o=0,l=0;for(let t of this.view.pluginField(Ti.scrollMargins))if(t){let{left:e,right:i,top:n,bottom:h}=t;null!=e&&(s=Math.max(s,e)),null!=i&&(r=Math.max(r,i)),null!=n&&(o=Math.max(o,n)),null!=h&&(l=Math.max(l,h))}let h={left:n.left-s,top:n.top-o,right:n.right+r,bottom:n.bottom+l};!function(t,e,i,n,s,r,o,l){let h=t.ownerDocument,a=h.defaultView;for(let c=t;c;)if(1==c.nodeType){let t,u=c==h.body;if(u)t=me(a);else{if(c.scrollHeight<=c.clientHeight&&c.scrollWidth<=c.clientWidth){c=c.parentNode;continue}let e=c.getBoundingClientRect();t={left:e.left,right:e.left+c.clientWidth,top:e.top,bottom:e.top+c.clientHeight}}let f=0,d=0;if(\"nearest\"==s)e.top<t.top?(d=-(t.top-e.top+o),i>0&&e.bottom>t.bottom+d&&(d=e.bottom-t.bottom+d+o)):e.bottom>t.bottom&&(d=e.bottom-t.bottom+o,i<0&&e.top-d<t.top&&(d=-(t.top+d-e.top+o)));else{let n=e.bottom-e.top,r=t.bottom-t.top;d=(\"center\"==s&&n<=r?e.top+n/2-r/2:\"start\"==s||\"center\"==s&&i<0?e.top-o:e.bottom-r+o)-t.top}if(\"nearest\"==n?e.left<t.left?(f=-(t.left-e.left+r),i>0&&e.right>t.right+f&&(f=e.right-t.right+f+r)):e.right>t.right&&(f=e.right-t.right+r,i<0&&e.left<t.left+f&&(f=-(t.left+f-e.left+r))):f=(\"center\"==n?e.left+(e.right-e.left)/2-(t.right-t.left)/2:\"start\"==n==l?e.left-r:e.right-(t.right-t.left)+r)-t.left,f||d)if(u)a.scrollBy(f,d);else{if(d){let t=c.scrollTop;c.scrollTop+=d,d=c.scrollTop-t}if(f){let t=c.scrollLeft;c.scrollLeft+=f,f=c.scrollLeft-t}e={left:e.left-f,top:e.top-d,right:e.right-f,bottom:e.bottom-d}}if(u)break;c=c.assignedSlot||c.parentNode,n=s=\"nearest\"}else{if(11!=c.nodeType)break;c=c.host}}(this.view.scrollDOM,h,i.head<i.anchor?-1:1,t.x,t.y,t.xMargin,t.yMargin,this.view.textDirection==Fi.LTR)}}class on extends ii{constructor(t){super(),this.height=t}toDOM(){let t=document.createElement(\"div\");return this.updateDOM(t),t}eq(t){return t.height==this.height}updateDOM(t){return t.style.height=this.height+\"px\",!0}get estimatedHeight(){return this.height}}function ln(t){let e=t.observer.selectionRange,i=e.focusNode&&an(e.focusNode,e.focusOffset,0);if(!i)return null;let n=t.docView.nearest(i);if(!n)return null;if(n instanceof ci){let t=i;for(;t.parentNode!=n.dom;)t=t.parentNode;let e=t.previousSibling;for(;e&&!Ce.get(e);)e=e.previousSibling;let s=e?Ce.get(e).posAtEnd:n.posAtStart;return{from:s,to:s,node:t,text:i}}{for(;;){let{parent:t}=n;if(!t)return null;if(t instanceof ci)break;n=t}let t=n.posAtStart;return{from:t,to:t+n.length,node:n.dom,text:i}}}class hn extends ii{constructor(t,e,i){super(),this.top=t,this.text=e,this.topView=i}eq(t){return this.top==t.top&&this.text==t.text}toDOM(){return this.top}ignoreEvent(){return!1}get customView(){return $e}}function an(t,e,i){for(;;){if(3==t.nodeType)return t;if(1==t.nodeType&&e>0&&i<=0)e=fe(t=t.childNodes[e-1]);else{if(!(1==t.nodeType&&e<t.childNodes.length&&i>=0))return null;t=t.childNodes[e],e=0}}}class cn{constructor(){this.changes=[]}compareRange(t,e){ai(t,e,this.changes)}comparePoint(t,e){ai(t,e,this.changes)}}function un(t,e){return e.left>t?e.left-t:Math.max(0,t-e.right)}function fn(t,e){return e.top>t?e.top-t:Math.max(0,t-e.bottom)}function dn(t,e){return t.top<e.bottom-1&&t.bottom>e.top+1}function pn(t,e){return e<t.top?{top:e,left:t.left,right:t.right,bottom:t.bottom}:t}function mn(t,e){return e>t.bottom?{top:t.top,left:t.left,right:t.right,bottom:e}:t}function gn(t,e,i){let n,s,r,o,l,h,a,c;for(let u=t.firstChild;u;u=u.nextSibling){let t=he(u);for(let f=0;f<t.length;f++){let d=t[f];s&&dn(s,d)&&(d=pn(mn(d,s.bottom),s.top));let p=un(e,d),m=fn(i,d);if(0==p&&0==m)return 3==u.nodeType?vn(u,e,i):gn(u,e,i);(!n||o>m||o==m&&r>p)&&(n=u,s=d,r=p,o=m),0==p?i>d.bottom&&(!a||a.bottom<d.bottom)?(l=u,a=d):i<d.top&&(!c||c.top>d.top)&&(h=u,c=d):a&&dn(a,d)?a=mn(a,d.bottom):c&&dn(c,d)&&(c=pn(c,d.top))}}if(a&&a.bottom>=i?(n=l,s=a):c&&c.top<=i&&(n=h,s=c),!n)return{node:t,offset:0};let u=Math.max(s.left,Math.min(s.right,e));return 3==n.nodeType?vn(n,u,i):r||\"true\"!=n.contentEditable?{node:t,offset:Array.prototype.indexOf.call(t.childNodes,n)+(e>=(s.left+s.right)/2?1:0)}:gn(n,u,i)}function vn(t,e,i){let n=t.nodeValue.length,s=-1,r=1e9,o=0;for(let l=0;l<n;l++){let n=be(t,l,l+1).getClientRects();for(let h=0;h<n.length;h++){let a=n[h];if(a.top==a.bottom)continue;o||(o=e-a.left);let c=(a.top>i?a.top-i:i-a.bottom)-1;if(a.left-1<=e&&a.right+1>=e&&c<r){let i=e>=(a.left+a.right)/2,n=i;if(Fe.chrome||Fe.gecko){be(t,l).getBoundingClientRect().left==a.right&&(n=!i)}if(c<=0)return{node:t,offset:l+(n?1:0)};s=l+(n?1:0),r=c}}}return{node:t,offset:s>-1?s:o>0?t.nodeValue.length:0}}function wn(t,{x:e,y:i},n,s=-1){var r;let o,l=t.contentDOM.getBoundingClientRect(),h=l.top+t.viewState.paddingTop,{docHeight:a}=t.viewState,c=i-h;if(c<0)return 0;if(c>a)return t.state.doc.length;for(let e=t.defaultLineHeight/2,i=!1;o=t.elementAtHeight(c),o.type!=ni.Text;)for(;c=s>0?o.bottom+e:o.top-e,!(c>=0&&c<=a);){if(i)return n?null:0;i=!0,s=-s}i=h+c;let u=o.from;if(u<t.viewport.from)return 0==t.viewport.from?0:n?null:yn(t,l,o,e,i);if(u>t.viewport.to)return t.viewport.to==t.state.doc.length?t.state.doc.length:n?null:yn(t,l,o,e,i);let f=t.dom.ownerDocument,d=t.root.elementFromPoint?t.root:f,p=d.elementFromPoint(e,i);p&&!t.contentDOM.contains(p)&&(p=null),p||(e=Math.max(l.left+1,Math.min(l.right-1,e)),p=d.elementFromPoint(e,i),p&&!t.contentDOM.contains(p)&&(p=null));let m,g=-1;if(p&&0!=(null===(r=t.docView.nearest(p))||void 0===r?void 0:r.isEditable))if(f.caretPositionFromPoint){let t=f.caretPositionFromPoint(e,i);t&&({offsetNode:m,offset:g}=t)}else if(f.caretRangeFromPoint){let t=f.caretRangeFromPoint(e,i);t&&(({startContainer:m,startOffset:g}=t),Fe.safari&&function(t,e,i){let n;if(3!=t.nodeType||e!=(n=t.nodeValue.length))return!1;for(let e=t.nextSibling;e;e=e.nextSibling)if(1!=e.nodeType||\"BR\"!=e.nodeName)return!1;return be(t,n-1,n).getBoundingClientRect().left>i}(m,g,e)&&(m=void 0))}if(!m||!t.docView.dom.contains(m)){let n=ci.find(t.docView,u);if(!n)return c>o.top+o.height/2?o.to:o.from;({node:m,offset:g}=gn(n.dom,e,i))}return t.docView.posFromDOM(m,g)}function yn(t,e,i,n,s){let r=Math.round((n-e.left)*t.defaultCharacterWidth);if(t.lineWrapping&&i.height>1.5*t.defaultLineHeight){r+=Math.floor((s-i.top)/t.defaultLineHeight)*t.viewState.heightOracle.lineLength}let o=t.state.sliceDoc(i.from,i.to);return i.from+f(o,r,t.state.tabSize)}function bn(t,e,i,n){let s=t.state.doc.lineAt(e.head),r=t.bidiSpans(s);for(let o=e,l=null;;){let e=tn(s,r,t.textDirection,o,i),h=Zi;if(!e){if(s.number==(i?t.state.doc.lines:1))return o;h=\"\\n\",s=t.state.doc.line(s.number+(i?1:-1)),r=t.bidiSpans(s),e=B.cursor(i?s.from:s.to)}if(l){if(!l(h))return o}else{if(!n)return e;l=n(h)}o=e}}function xn(t,e,i){let n=t.pluginField(Ti.atomicRanges);for(;;){let t=!1;for(let s of n)s.between(i.from-1,i.from+1,((n,s,r)=>{i.from>n&&i.from<s&&(i=e.from>i.from?B.cursor(n,1):B.cursor(s,-1),t=!0)}));if(!t)return i}}class kn{constructor(t){this.lastKeyCode=0,this.lastKeyTime=0,this.pendingIOSKey=void 0,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastEscPress=0,this.lastContextMenu=0,this.scrollHandlers=[],this.registeredEvents=[],this.customHandlers=[],this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.rapidCompositionStart=!1,this.mouseSelection=null;for(let e in Dn){let i=Dn[e];t.contentDOM.addEventListener(e,(n=>{Mn(t,n)&&!this.ignoreDuringComposition(n)&&(\"keydown\"==e&&this.keydown(t,n)||(this.mustFlushObserver(n)&&t.observer.forceFlush(),this.runCustomHandlers(e,t,n)?n.preventDefault():i(t,n)))})),this.registeredEvents.push(e)}this.notifiedFocused=t.hasFocus,this.ensureHandlers(t),Fe.safari&&t.contentDOM.addEventListener(\"input\",(()=>null))}setSelectionOrigin(t){this.lastSelectionOrigin=t,this.lastSelectionTime=Date.now()}ensureHandlers(t){let e=this.customHandlers=t.pluginField(Bi);for(let i of e)for(let e in i.handlers)this.registeredEvents.indexOf(e)<0&&\"scroll\"!=e&&(this.registeredEvents.push(e),t.contentDOM.addEventListener(e,(i=>{Mn(t,i)&&this.runCustomHandlers(e,t,i)&&i.preventDefault()})))}runCustomHandlers(t,e,i){for(let n of this.customHandlers){let s=n.handlers[t];if(s)try{if(s.call(n.plugin,i,e)||i.defaultPrevented)return!0}catch(t){Mi(e.state,t)}}return!1}runScrollHandlers(t,e){for(let i of this.customHandlers){let n=i.handlers.scroll;if(n)try{n.call(i.plugin,e,t)}catch(e){Mi(t.state,e)}}}keydown(t,e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),9==e.keyCode&&Date.now()<this.lastEscPress+2e3)return!0;if(Fe.android&&Fe.chrome&&!e.synthetic&&(13==e.keyCode||8==e.keyCode))return t.observer.delayAndroidKey(e.key,e.keyCode),!0;let i;return!(!Fe.ios||!(i=Sn.find((t=>t.keyCode==e.keyCode)))||e.ctrlKey||e.altKey||e.metaKey||e.synthetic)&&(this.pendingIOSKey=i,setTimeout((()=>this.flushIOSKey(t)),250),!0)}flushIOSKey(t){let e=this.pendingIOSKey;return!!e&&(this.pendingIOSKey=void 0,xe(t.contentDOM,e.key,e.keyCode))}ignoreDuringComposition(t){return!!/^key/.test(t.type)&&(this.composing>0||!!(Fe.safari&&Date.now()-this.compositionEndedAt<500)&&(this.compositionEndedAt=0,!0))}mustFlushObserver(t){return\"keydown\"==t.type&&229!=t.keyCode||\"compositionend\"==t.type&&!Fe.ios}startMouseSelection(t){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=t}update(t){this.mouseSelection&&this.mouseSelection.update(t),t.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}const Sn=[{key:\"Backspace\",keyCode:8,inputType:\"deleteContentBackward\"},{key:\"Enter\",keyCode:13,inputType:\"insertParagraph\"},{key:\"Delete\",keyCode:46,inputType:\"deleteContentForward\"}],An=[16,17,18,20,91,92,224,225];class Cn{constructor(t,e,i,n){this.view=t,this.style=i,this.mustSelect=n,this.lastEvent=e;let s=t.contentDOM.ownerDocument;s.addEventListener(\"mousemove\",this.move=this.move.bind(this)),s.addEventListener(\"mouseup\",this.up=this.up.bind(this)),this.extend=e.shiftKey,this.multiple=t.state.facet(Ct.allowMultipleSelections)&&function(t,e){let i=t.state.facet(gi);return i.length?i[0](e):Fe.mac?e.metaKey:e.ctrlKey}(t,e),this.dragMove=function(t,e){let i=t.state.facet(vi);return i.length?i[0](e):Fe.mac?!e.altKey:!e.ctrlKey}(t,e),this.dragging=!(!function(t,e){let{main:i}=t.state.selection;if(i.empty)return!1;let n=re(t.root);if(0==n.rangeCount)return!0;let s=n.getRangeAt(0).getClientRects();for(let t=0;t<s.length;t++){let i=s[t];if(i.left<=e.clientX&&i.right>=e.clientX&&i.top<=e.clientY&&i.bottom>=e.clientY)return!0}return!1}(t,e)||1!=zn(e))&&null,!1===this.dragging&&(e.preventDefault(),this.select(e))}move(t){if(0==t.buttons)return this.destroy();!1===this.dragging&&this.select(this.lastEvent=t)}up(t){null==this.dragging&&this.select(this.lastEvent),this.dragging||t.preventDefault(),this.destroy()}destroy(){let t=this.view.contentDOM.ownerDocument;t.removeEventListener(\"mousemove\",this.move),t.removeEventListener(\"mouseup\",this.up),this.view.inputState.mouseSelection=null}select(t){let e=this.style.get(t,this.extend,this.multiple);!this.mustSelect&&e.eq(this.view.state.selection)&&e.main.assoc==this.view.state.selection.main.assoc||this.view.dispatch({selection:e,userEvent:\"select.pointer\",scrollIntoView:!0}),this.mustSelect=!1}update(t){t.docChanged&&this.dragging&&(this.dragging=this.dragging.map(t.changes)),this.style.update(t)&&setTimeout((()=>this.select(this.lastEvent)),20)}}function Mn(t,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let i,n=e.target;n!=t.contentDOM;n=n.parentNode)if(!n||11==n.nodeType||(i=Ce.get(n))&&i.ignoreEvent(e))return!1;return!0}const Dn=Object.create(null),On=Fe.ie&&Fe.ie_version<15||Fe.ios&&Fe.webkit_version<604;function Tn(t,e){let i,{state:n}=t,s=1,r=n.toText(e),o=r.lines==n.selection.ranges.length;if(null!=qn&&n.selection.ranges.every((t=>t.empty))&&qn==r.toString()){let t=-1;i=n.changeByRange((i=>{let l=n.doc.lineAt(i.from);if(l.from==t)return{range:i};t=l.from;let h=n.toText((o?r.line(s++).text:e)+n.lineBreak);return{changes:{from:l.from,insert:h},range:B.cursor(i.from+h.length)}}))}else i=o?n.changeByRange((t=>{let e=r.line(s++);return{changes:{from:t.from,to:t.to,insert:e.text},range:B.cursor(t.from+e.length)}})):n.replaceSelection(r);t.dispatch(i,{userEvent:\"input.paste\",scrollIntoView:!0})}Dn.keydown=(t,e)=>{t.inputState.setSelectionOrigin(\"select\"),27==e.keyCode?t.inputState.lastEscPress=Date.now():An.indexOf(e.keyCode)<0&&(t.inputState.lastEscPress=0)};let Rn=0;function En(t,e,i,s){if(1==s)return B.cursor(e,i);if(2==s)return function(t,e,i=1){let s=t.charCategorizer(e),r=t.doc.lineAt(e),o=e-r.from;if(0==r.length)return B.cursor(e);0==o?i=1:o==r.length&&(i=-1);let l=o,h=o;i<0?l=n(r.text,o,!1):h=n(r.text,o);let a=s(r.text.slice(l,h));for(;l>0;){let t=n(r.text,l,!1);if(s(r.text.slice(t,l))!=a)break;l=t}for(;h<r.length;){let t=n(r.text,h);if(s(r.text.slice(h,t))!=a)break;h=t}return B.range(l+r.from,h+r.from)}(t.state,e,i);{let i=ci.find(t.docView,e),n=t.state.doc.lineAt(i?i.posAtEnd:e),s=i?i.posAtStart:n.from,r=i?i.posAtEnd:n.to;return r<t.state.doc.length&&r==n.to&&r++,B.range(s,r)}}Dn.touchstart=(t,e)=>{Rn=Date.now(),t.inputState.setSelectionOrigin(\"select.pointer\")},Dn.touchmove=t=>{t.inputState.setSelectionOrigin(\"select.pointer\")},Dn.mousedown=(t,e)=>{if(t.observer.flush(),Rn>Date.now()-2e3&&1==zn(e))return;let i=null;for(let n of t.state.facet(wi))if(i=n(t,e),i)break;if(i||0!=e.button||(i=function(t,e){let i=Nn(t,e),n=zn(e),s=t.state.selection,r=i,o=e;return{update(t){t.docChanged&&(i&&(i.pos=t.changes.mapPos(i.pos)),s=s.map(t.changes),o=null)},get(e,l,h){let a;if(o&&e.clientX==o.clientX&&e.clientY==o.clientY?a=r:(a=r=Nn(t,e),o=e),!a||!i)return s;let c=En(t,a.pos,a.bias,n);if(i.pos!=a.pos&&!l){let e=En(t,i.pos,i.bias,n),s=Math.min(e.from,c.from),r=Math.max(e.to,c.to);c=s<c.from?B.range(s,r):B.range(r,s)}return l?s.replaceRange(s.main.extend(c.from,c.to)):h?s.addRange(c):B.create([c])}}}(t,e)),i){let n=t.root.activeElement!=t.contentDOM;n&&t.observer.ignore((()=>ye(t.contentDOM))),t.inputState.startMouseSelection(new Cn(t,e,i,n))}};let Ln=(t,e)=>t>=e.top&&t<=e.bottom,Bn=(t,e,i)=>Ln(e,i)&&t>=i.left&&t<=i.right;function Pn(t,e,i,n){let s=ci.find(t.docView,e);if(!s)return 1;let r=e-s.posAtStart;if(0==r)return 1;if(r==s.length)return-1;let o=s.coordsAt(r,-1);if(o&&Bn(i,n,o))return-1;let l=s.coordsAt(r,1);return l&&Bn(i,n,l)?1:o&&Ln(n,o)?-1:1}function Nn(t,e){let i=t.posAtCoords({x:e.clientX,y:e.clientY},!1);return{pos:i,bias:Pn(t,i,e.clientX,e.clientY)}}const In=Fe.ie&&Fe.ie_version<=11;let Vn=null,Hn=0,Wn=0;function zn(t){if(!In)return t.detail;let e=Vn,i=Wn;return Vn=t,Wn=Date.now(),Hn=!e||i>Date.now()-400&&Math.abs(e.clientX-t.clientX)<2&&Math.abs(e.clientY-t.clientY)<2?(Hn+1)%3:1}function Fn(t,e,i,n){if(!i)return;let s=t.posAtCoords({x:e.clientX,y:e.clientY},!1);e.preventDefault();let{mouseSelection:r}=t.inputState,o=n&&r&&r.dragging&&r.dragMove?{from:r.dragging.from,to:r.dragging.to}:null,l={from:s,insert:i},h=t.state.changes(o?[o,l]:l);t.focus(),t.dispatch({changes:h,selection:{anchor:h.mapPos(s,-1),head:h.mapPos(s,1)},userEvent:o?\"move.drop\":\"input.drop\"})}Dn.dragstart=(t,e)=>{let{selection:{main:i}}=t.state,{mouseSelection:n}=t.inputState;n&&(n.dragging=i),e.dataTransfer&&(e.dataTransfer.setData(\"Text\",t.state.sliceDoc(i.from,i.to)),e.dataTransfer.effectAllowed=\"copyMove\")},Dn.drop=(t,e)=>{if(!e.dataTransfer)return;if(t.state.readOnly)return e.preventDefault();let i=e.dataTransfer.files;if(i&&i.length){e.preventDefault();let n=Array(i.length),s=0,r=()=>{++s==i.length&&Fn(t,e,n.filter((t=>null!=t)).join(t.state.lineBreak),!1)};for(let t=0;t<i.length;t++){let e=new FileReader;e.onerror=r,e.onload=()=>{/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(e.result)||(n[t]=e.result),r()},e.readAsText(i[t])}}else Fn(t,e,e.dataTransfer.getData(\"Text\"),!0)},Dn.paste=(t,e)=>{if(t.state.readOnly)return e.preventDefault();t.observer.flush();let i=On?null:e.clipboardData;i?(Tn(t,i.getData(\"text/plain\")),e.preventDefault()):function(t){let e=t.dom.parentNode;if(!e)return;let i=e.appendChild(document.createElement(\"textarea\"));i.style.cssText=\"position: fixed; left: -10000px; top: 10px\",i.focus(),setTimeout((()=>{t.focus(),i.remove(),Tn(t,i.value)}),50)}(t)};let qn=null;function _n(t,e){if(t.docView.compositionDeco.size){t.inputState.rapidCompositionStart=e;try{t.update([])}finally{t.inputState.rapidCompositionStart=!1}}}Dn.copy=Dn.cut=(t,e)=>{let{text:i,ranges:n,linewise:s}=function(t){let e=[],i=[],n=!1;for(let n of t.selection.ranges)n.empty||(e.push(t.sliceDoc(n.from,n.to)),i.push(n));if(!e.length){let s=-1;for(let{from:n}of t.selection.ranges){let r=t.doc.lineAt(n);r.number>s&&(e.push(r.text),i.push({from:r.from,to:Math.min(t.doc.length,r.to+1)})),s=r.number}n=!0}return{text:e.join(t.lineBreak),ranges:i,linewise:n}}(t.state);if(!i&&!s)return;qn=s?i:null;let r=On?null:e.clipboardData;r?(e.preventDefault(),r.clearData(),r.setData(\"text/plain\",i)):function(t,e){let i=t.dom.parentNode;if(!i)return;let n=i.appendChild(document.createElement(\"textarea\"));n.style.cssText=\"position: fixed; left: -10000px; top: 10px\",n.value=e,n.focus(),n.selectionEnd=e.length,n.selectionStart=0,setTimeout((()=>{n.remove(),t.focus()}),50)}(t,i),\"cut\"!=e.type||t.state.readOnly||t.dispatch({changes:n,scrollIntoView:!0,userEvent:\"delete.cut\"})},Dn.focus=Dn.blur=t=>{setTimeout((()=>{t.hasFocus!=t.inputState.notifiedFocused&&t.update([])}),10)},Dn.compositionstart=Dn.compositionupdate=t=>{null==t.inputState.compositionFirstChange&&(t.inputState.compositionFirstChange=!0),t.inputState.composing<0&&(t.inputState.composing=0,t.docView.compositionDeco.size&&(t.observer.flush(),_n(t,!0)))},Dn.compositionend=t=>{t.inputState.composing=-1,t.inputState.compositionEndedAt=Date.now(),t.inputState.compositionFirstChange=null,setTimeout((()=>{t.inputState.composing<0&&_n(t,!1)}),50)},Dn.contextmenu=t=>{t.inputState.lastContextMenu=Date.now()},Dn.beforeinput=(t,e)=>{var i;let n;if(Fe.chrome&&Fe.android&&(n=Sn.find((t=>t.inputType==e.inputType)))&&(t.observer.delayAndroidKey(n.key,n.keyCode),\"Backspace\"==n.key||\"Delete\"==n.key)){let e=(null===(i=window.visualViewport)||void 0===i?void 0:i.height)||0;setTimeout((()=>{var i;((null===(i=window.visualViewport)||void 0===i?void 0:i.height)||0)>e+10&&t.hasFocus&&(t.contentDOM.blur(),t.focus())}),100)}};const jn=[\"pre-wrap\",\"normal\",\"pre-line\",\"break-spaces\"];class Un{constructor(){this.doc=d.empty,this.lineWrapping=!1,this.direction=Fi.LTR,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.lineLength=30,this.heightChanged=!1}heightForGap(t,e){let i=this.doc.lineAt(e).number-this.doc.lineAt(t).number+1;return this.lineWrapping&&(i+=Math.ceil((e-t-i*this.lineLength*.5)/this.lineLength)),this.lineHeight*i}heightForLine(t){if(!this.lineWrapping)return this.lineHeight;return(1+Math.max(0,Math.ceil((t-this.lineLength)/(this.lineLength-5))))*this.lineHeight}setDoc(t){return this.doc=t,this}mustRefreshForStyle(t,e){return jn.indexOf(t)>-1!=this.lineWrapping||this.direction!=e}mustRefreshForHeights(t){let e=!1;for(let i=0;i<t.length;i++){let n=t[i];n<0?i++:this.heightSamples[Math.floor(10*n)]||(e=!0,this.heightSamples[Math.floor(10*n)]=!0)}return e}refresh(t,e,i,n,s,r){let o=jn.indexOf(t)>-1,l=Math.round(i)!=Math.round(this.lineHeight)||this.lineWrapping!=o||this.direction!=e;if(this.lineWrapping=o,this.direction=e,this.lineHeight=i,this.charWidth=n,this.lineLength=s,l){this.heightSamples={};for(let t=0;t<r.length;t++){let e=r[t];e<0?t++:this.heightSamples[Math.floor(10*e)]=!0}}return l}}class $n{constructor(t,e){this.from=t,this.heights=e,this.index=0}get more(){return this.index<this.heights.length}}class Kn{constructor(t,e,i,n,s){this.from=t,this.length=e,this.top=i,this.height=n,this.type=s}get to(){return this.from+this.length}get bottom(){return this.top+this.height}join(t){let e=(Array.isArray(this.type)?this.type:[this]).concat(Array.isArray(t.type)?t.type:[t]);return new Kn(this.from,this.length+t.length,this.top,this.height+t.height,e)}moveY(t){return t?new Kn(this.from,this.length,this.top+t,this.height,Array.isArray(this.type)?this.type.map((e=>e.moveY(t))):this.type):this}}var Gn=function(t){return t[t.ByPos=0]=\"ByPos\",t[t.ByHeight=1]=\"ByHeight\",t[t.ByPosNoHeight=2]=\"ByPosNoHeight\",t}(Gn||(Gn={}));class Jn{constructor(t,e,i=2){this.length=t,this.height=e,this.flags=i}get outdated(){return(2&this.flags)>0}set outdated(t){this.flags=(t?2:0)|-3&this.flags}setHeight(t,e){this.height!=e&&(Math.abs(this.height-e)>.001&&(t.heightChanged=!0),this.height=e)}replace(t,e,i){return Jn.of(i)}decomposeLeft(t,e){e.push(this)}decomposeRight(t,e){e.push(this)}applyChanges(t,e,i,n){let s=this;for(let r=n.length-1;r>=0;r--){let{fromA:o,toA:l,fromB:h,toB:a}=n[r],c=s.lineAt(o,Gn.ByPosNoHeight,e,0,0),u=c.to>=l?c:s.lineAt(l,Gn.ByPosNoHeight,e,0,0);for(a+=u.to-l,l=u.to;r>0&&c.from<=n[r-1].toA;)o=n[r-1].fromA,h=n[r-1].fromB,r--,o<c.from&&(c=s.lineAt(o,Gn.ByPosNoHeight,e,0,0));h+=c.from-o,o=c.from;let f=es.build(i,t,h,a);s=s.replace(o,l,f)}return s.updateHeight(i,0)}static empty(){return new Xn(0,0)}static of(t){if(1==t.length)return t[0];let e=0,i=t.length,n=0,s=0;for(;;)if(e==i)if(n>2*s){let s=t[e-1];s.break?t.splice(--e,1,s.left,null,s.right):t.splice(--e,1,s.left,s.right),i+=1+s.break,n-=s.size}else{if(!(s>2*n))break;{let e=t[i];e.break?t.splice(i,1,e.left,null,e.right):t.splice(i,1,e.left,e.right),i+=2+e.break,s-=e.size}}else if(n<s){let i=t[e++];i&&(n+=i.size)}else{let e=t[--i];e&&(s+=e.size)}let r=0;return null==t[e-1]?(r=1,e--):null==t[e]&&(r=1,i++),new Zn(Jn.of(t.slice(0,e)),r,Jn.of(t.slice(i)))}}Jn.prototype.size=1;class Yn extends Jn{constructor(t,e,i){super(t,e),this.type=i}blockAt(t,e,i,n){return new Kn(n,this.length,i,this.height,this.type)}lineAt(t,e,i,n,s){return this.blockAt(0,i,n,s)}forEachLine(t,e,i,n,s,r){r(this.blockAt(0,i,n,s))}updateHeight(t,e=0,i=!1,n){return n&&n.from<=e&&n.more&&this.setHeight(t,n.heights[n.index++]),this.outdated=!1,this}toString(){return`block(${this.length})`}}class Xn extends Yn{constructor(t,e){super(t,e,ni.Text),this.collapsed=0,this.widgetHeight=0}replace(t,e,i){let n=i[0];return 1==i.length&&(n instanceof Xn||n instanceof Qn&&4&n.flags)&&Math.abs(this.length-n.length)<10?(n instanceof Qn?n=new Xn(n.length,this.height):n.height=this.height,this.outdated||(n.outdated=!1),n):Jn.of(i)}updateHeight(t,e=0,i=!1,n){return n&&n.from<=e&&n.more?this.setHeight(t,n.heights[n.index++]):(i||this.outdated)&&this.setHeight(t,Math.max(this.widgetHeight,t.heightForLine(this.length-this.collapsed))),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:\"\"}${this.widgetHeight?\":\"+this.widgetHeight:\"\"})`}}class Qn extends Jn{constructor(t){super(t,0)}lines(t,e){let i=t.lineAt(e).number,n=t.lineAt(e+this.length).number;return{firstLine:i,lastLine:n,lineHeight:this.height/(n-i+1)}}blockAt(t,e,i,n){let{firstLine:s,lastLine:r,lineHeight:o}=this.lines(e,n),l=Math.max(0,Math.min(r-s,Math.floor((t-i)/o))),{from:h,length:a}=e.line(s+l);return new Kn(h,a,i+o*l,o,ni.Text)}lineAt(t,e,i,n,s){if(e==Gn.ByHeight)return this.blockAt(t,i,n,s);if(e==Gn.ByPosNoHeight){let{from:e,to:n}=i.lineAt(t);return new Kn(e,n-e,0,0,ni.Text)}let{firstLine:r,lineHeight:o}=this.lines(i,s),{from:l,length:h,number:a}=i.lineAt(t);return new Kn(l,h,n+o*(a-r),o,ni.Text)}forEachLine(t,e,i,n,s,r){let{firstLine:o,lineHeight:l}=this.lines(i,s);for(let h=Math.max(t,s),a=Math.min(s+this.length,e);h<=a;){let e=i.lineAt(h);h==t&&(n+=l*(e.number-o)),r(new Kn(e.from,e.length,n,l,ni.Text)),n+=l,h=e.to+1}}replace(t,e,i){let n=this.length-e;if(n>0){let t=i[i.length-1];t instanceof Qn?i[i.length-1]=new Qn(t.length+n):i.push(null,new Qn(n-1))}if(t>0){let e=i[0];e instanceof Qn?i[0]=new Qn(t+e.length):i.unshift(new Qn(t-1),null)}return Jn.of(i)}decomposeLeft(t,e){e.push(new Qn(t-1),null)}decomposeRight(t,e){e.push(null,new Qn(this.length-t-1))}updateHeight(t,e=0,i=!1,n){let s=e+this.length;if(n&&n.from<=e+this.length&&n.more){let i=[],r=Math.max(e,n.from),o=-1,l=t.heightChanged;for(n.from>e&&i.push(new Qn(n.from-e-1).updateHeight(t,e));r<=s&&n.more;){let e=t.doc.lineAt(r).length;i.length&&i.push(null);let s=n.heights[n.index++];-1==o?o=s:Math.abs(s-o)>=.001&&(o=-2);let l=new Xn(e,s);l.outdated=!1,i.push(l),r+=e+1}r<=s&&i.push(null,new Qn(s-r).updateHeight(t,r));let h=Jn.of(i);return t.heightChanged=l||o<0||Math.abs(h.height-this.height)>=.001||Math.abs(o-this.lines(t.doc,e).lineHeight)>=.001,h}return(i||this.outdated)&&(this.setHeight(t,t.heightForGap(e,e+this.length)),this.outdated=!1),this}toString(){return`gap(${this.length})`}}class Zn extends Jn{constructor(t,e,i){super(t.length+e+i.length,t.height+i.height,e|(t.outdated||i.outdated?2:0)),this.left=t,this.right=i,this.size=t.size+i.size}get break(){return 1&this.flags}blockAt(t,e,i,n){let s=i+this.left.height;return t<s?this.left.blockAt(t,e,i,n):this.right.blockAt(t,e,s,n+this.left.length+this.break)}lineAt(t,e,i,n,s){let r=n+this.left.height,o=s+this.left.length+this.break,l=e==Gn.ByHeight?t<r:t<o,h=l?this.left.lineAt(t,e,i,n,s):this.right.lineAt(t,e,i,r,o);if(this.break||(l?h.to<o:h.from>o))return h;let a=e==Gn.ByPosNoHeight?Gn.ByPosNoHeight:Gn.ByPos;return l?h.join(this.right.lineAt(o,a,i,r,o)):this.left.lineAt(o,a,i,n,s).join(h)}forEachLine(t,e,i,n,s,r){let o=n+this.left.height,l=s+this.left.length+this.break;if(this.break)t<l&&this.left.forEachLine(t,e,i,n,s,r),e>=l&&this.right.forEachLine(t,e,i,o,l,r);else{let h=this.lineAt(l,Gn.ByPos,i,n,s);t<h.from&&this.left.forEachLine(t,h.from-1,i,n,s,r),h.to>=t&&h.from<=e&&r(h),e>h.to&&this.right.forEachLine(h.to+1,e,i,o,l,r)}}replace(t,e,i){let n=this.left.length+this.break;if(e<n)return this.balanced(this.left.replace(t,e,i),this.right);if(t>this.left.length)return this.balanced(this.left,this.right.replace(t-n,e-n,i));let s=[];t>0&&this.decomposeLeft(t,s);let r=s.length;for(let t of i)s.push(t);if(t>0&&ts(s,r-1),e<this.length){let t=s.length;this.decomposeRight(e,s),ts(s,t)}return Jn.of(s)}decomposeLeft(t,e){let i=this.left.length;if(t<=i)return this.left.decomposeLeft(t,e);e.push(this.left),this.break&&(i++,t>=i&&e.push(null)),t>i&&this.right.decomposeLeft(t-i,e)}decomposeRight(t,e){let i=this.left.length,n=i+this.break;if(t>=n)return this.right.decomposeRight(t-n,e);t<i&&this.left.decomposeRight(t,e),this.break&&t<n&&e.push(null),e.push(this.right)}balanced(t,e){return t.size>2*e.size||e.size>2*t.size?Jn.of(this.break?[t,null,e]:[t,e]):(this.left=t,this.right=e,this.height=t.height+e.height,this.outdated=t.outdated||e.outdated,this.size=t.size+e.size,this.length=t.length+this.break+e.length,this)}updateHeight(t,e=0,i=!1,n){let{left:s,right:r}=this,o=e+s.length+this.break,l=null;return n&&n.from<=e+s.length&&n.more?l=s=s.updateHeight(t,e,i,n):s.updateHeight(t,e,i),n&&n.from<=o+r.length&&n.more?l=r=r.updateHeight(t,o,i,n):r.updateHeight(t,o,i),l?this.balanced(s,r):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?\" \":\"-\")+this.right}}function ts(t,e){let i,n;null==t[e]&&(i=t[e-1])instanceof Qn&&(n=t[e+1])instanceof Qn&&t.splice(e-1,3,new Qn(i.length+1+n.length))}class es{constructor(t,e){this.pos=t,this.oracle=e,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=t}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(t,e){if(this.lineStart>-1){let t=Math.min(e,this.lineEnd),i=this.nodes[this.nodes.length-1];i instanceof Xn?i.length+=t-this.pos:(t>this.pos||!this.isCovered)&&this.nodes.push(new Xn(t-this.pos,-1)),this.writtenTo=t,e>t&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=e}point(t,e,i){if(t<e||i.heightRelevant){let n=i.widget?i.widget.estimatedHeight:0;n<0&&(n=this.oracle.lineHeight);let s=e-t;i.block?this.addBlock(new Yn(s,n,i.type)):(s||n>=5)&&this.addLineDeco(n,s)}else e>t&&this.span(t,e);this.lineEnd>-1&&this.lineEnd<this.pos&&(this.lineEnd=this.oracle.doc.lineAt(this.pos).to)}enterLine(){if(this.lineStart>-1)return;let{from:t,to:e}=this.oracle.doc.lineAt(this.pos);this.lineStart=t,this.lineEnd=e,this.writtenTo<t&&((this.writtenTo<t-1||null==this.nodes[this.nodes.length-1])&&this.nodes.push(this.blankContent(this.writtenTo,t-1)),this.nodes.push(null)),this.pos>t&&this.nodes.push(new Xn(this.pos-t,-1)),this.writtenTo=this.pos}blankContent(t,e){let i=new Qn(e-t);return this.oracle.doc.lineAt(t).to==e&&(i.flags|=4),i}ensureLine(){this.enterLine();let t=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(t instanceof Xn)return t;let e=new Xn(0,-1);return this.nodes.push(e),e}addBlock(t){this.enterLine(),t.type!=ni.WidgetAfter||this.isCovered||this.ensureLine(),this.nodes.push(t),this.writtenTo=this.pos=this.pos+t.length,t.type!=ni.WidgetBefore&&(this.covering=t)}addLineDeco(t,e){let i=this.ensureLine();i.length+=e,i.collapsed+=e,i.widgetHeight=Math.max(i.widgetHeight,t),this.writtenTo=this.pos=this.pos+e}finish(t){let e=0==this.nodes.length?null:this.nodes[this.nodes.length-1];!(this.lineStart>-1)||e instanceof Xn||this.isCovered?(this.writtenTo<this.pos||null==e)&&this.nodes.push(this.blankContent(this.writtenTo,this.pos)):this.nodes.push(new Xn(0,-1));let i=t;for(let t of this.nodes)t instanceof Xn&&t.updateHeight(this.oracle,i),i+=t?t.length:1;return this.nodes}static build(t,e,i,n){let s=new es(i,t);return Vt.spans(e,i,n,s,0),s.finish(i)}}class is{constructor(){this.changes=[]}compareRange(){}comparePoint(t,e,i,n){(t<e||i&&i.heightRelevant||n&&n.heightRelevant)&&ai(t,e,this.changes,5)}}function ns(t,e){let i=t.getBoundingClientRect(),n=Math.max(0,i.left),s=Math.min(innerWidth,i.right),r=Math.max(0,i.top),o=Math.min(innerHeight,i.bottom),l=t.ownerDocument.body;for(let e=t.parentNode;e&&e!=l;)if(1==e.nodeType){let t=e,i=window.getComputedStyle(t);if((t.scrollHeight>t.clientHeight||t.scrollWidth>t.clientWidth)&&\"visible\"!=i.overflow){let e=t.getBoundingClientRect();n=Math.max(n,e.left),s=Math.min(s,e.right),r=Math.max(r,e.top),o=Math.min(o,e.bottom)}e=\"absolute\"==i.position||\"fixed\"==i.position?t.offsetParent:t.parentNode}else{if(11!=e.nodeType)break;e=e.host}return{left:n-i.left,right:Math.max(n,s)-i.left,top:r-(i.top+e),bottom:Math.max(r,o)-(i.top+e)}}function ss(t,e){let i=t.getBoundingClientRect();return{left:0,right:i.right-i.left,top:e,bottom:i.bottom-(i.top+e)}}class rs{constructor(t,e,i){this.from=t,this.to=e,this.size=i}static same(t,e){if(t.length!=e.length)return!1;for(let i=0;i<t.length;i++){let n=t[i],s=e[i];if(n.from!=s.from||n.to!=s.to||n.size!=s.size)return!1}return!0}draw(t){return si.replace({widget:new os(this.size,t)}).range(this.from,this.to)}}class os extends ii{constructor(t,e){super(),this.size=t,this.vertical=e}eq(t){return t.size==this.size&&t.vertical==this.vertical}toDOM(){let t=document.createElement(\"div\");return this.vertical?t.style.height=this.size+\"px\":(t.style.width=this.size+\"px\",t.style.height=\"2px\",t.style.display=\"inline-block\"),t}get estimatedHeight(){return this.vertical?this.size:-1}}class ls{constructor(t){this.state=t,this.pixelViewport={left:0,right:window.innerWidth,top:0,bottom:0},this.inView=!0,this.paddingTop=0,this.paddingBottom=0,this.contentDOMWidth=0,this.contentDOMHeight=0,this.editorHeight=0,this.editorWidth=0,this.heightOracle=new Un,this.scaler=ps,this.scrollTarget=null,this.printing=!1,this.mustMeasureContent=!0,this.visibleRanges=[],this.mustEnforceCursorAssoc=!1,this.heightMap=Jn.empty().applyChanges(t.facet(Vi),d.empty,this.heightOracle.setDoc(t.doc),[new Wi(0,0,0,t.doc.length)]),this.viewport=this.getViewport(0,null),this.updateViewportLines(),this.updateForViewport(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=si.set(this.lineGaps.map((t=>t.draw(!1)))),this.computeVisibleRanges()}updateForViewport(){let t=[this.viewport],{main:e}=this.state.selection;for(let i=0;i<=1;i++){let n=i?e.head:e.anchor;if(!t.some((({from:t,to:e})=>n>=t&&n<=e))){let{from:e,to:i}=this.lineBlockAt(n);t.push(new hs(e,i))}}this.viewports=t.sort(((t,e)=>t.from-e.from)),this.scaler=this.heightMap.height<=7e6?ps:new ms(this.heightOracle.doc,this.heightMap,this.viewports)}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.state.doc,0,0,(t=>{this.viewportLines.push(1==this.scaler.scale?t:gs(t,this.scaler))}))}update(t,e=null){let i=this.state;this.state=t.state;let n=this.state.facet(Vi),s=t.changedRanges,r=Wi.extendWithRanges(s,function(t,e,i){let n=new is;return Vt.compare(t,e,i,n,0),n.changes}(t.startState.facet(Vi),n,t?t.changes:C.empty(this.state.doc.length))),o=this.heightMap.height;this.heightMap=this.heightMap.applyChanges(n,i.doc,this.heightOracle.setDoc(this.state.doc),r),this.heightMap.height!=o&&(t.flags|=2);let l=r.length?this.mapViewport(this.viewport,t.changes):this.viewport;(e&&(e.range.head<l.from||e.range.head>l.to)||!this.viewportIsAppropriate(l))&&(l=this.getViewport(0,e));let h=!t.changes.empty||2&t.flags||l.from!=this.viewport.from||l.to!=this.viewport.to;this.viewport=l,this.updateForViewport(),h&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,t.changes))),t.flags|=this.computeVisibleRanges(),e&&(this.scrollTarget=e),!this.mustEnforceCursorAssoc&&t.selectionSet&&t.view.lineWrapping&&t.state.selection.main.empty&&t.state.selection.main.assoc&&(this.mustEnforceCursorAssoc=!0)}measure(t){let e=t.contentDOM,i=window.getComputedStyle(e),n=this.heightOracle,s=i.whiteSpace,r=\"rtl\"==i.direction?Fi.RTL:Fi.LTR,o=this.heightOracle.mustRefreshForStyle(s,r),l=o||this.mustMeasureContent||this.contentDOMHeight!=e.clientHeight,h=0,a=0;if(this.editorWidth!=t.scrollDOM.clientWidth&&(n.lineWrapping&&(l=!0),this.editorWidth=t.scrollDOM.clientWidth,h|=8),l){this.mustMeasureContent=!1,this.contentDOMHeight=e.clientHeight;let t=parseInt(i.paddingTop)||0,n=parseInt(i.paddingBottom)||0;this.paddingTop==t&&this.paddingBottom==n||(h|=8,this.paddingTop=t,this.paddingBottom=n)}let c=(this.printing?ss:ns)(e,this.paddingTop),u=c.top-this.pixelViewport.top,f=c.bottom-this.pixelViewport.bottom;this.pixelViewport=c;let d=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(d!=this.inView&&(this.inView=d,d&&(l=!0)),!this.inView)return 0;let p=e.clientWidth;if(this.contentDOMWidth==p&&this.editorHeight==t.scrollDOM.clientHeight||(this.contentDOMWidth=p,this.editorHeight=t.scrollDOM.clientHeight,h|=8),l){let e=t.docView.measureVisibleLineHeights();if(n.mustRefreshForHeights(e)&&(o=!0),o||n.lineWrapping&&Math.abs(p-this.contentDOMWidth)>n.charWidth){let{lineHeight:i,charWidth:l}=t.docView.measureTextSize();o=n.refresh(s,r,i,l,p/l,e),o&&(t.docView.minWidth=0,h|=8)}u>0&&f>0?a=Math.max(u,f):u<0&&f<0&&(a=Math.min(u,f)),n.heightChanged=!1,this.heightMap=this.heightMap.updateHeight(n,0,o,new $n(this.viewport.from,e)),n.heightChanged&&(h|=2)}let m=!this.viewportIsAppropriate(this.viewport,a)||this.scrollTarget&&(this.scrollTarget.range.head<this.viewport.from||this.scrollTarget.range.head>this.viewport.to);return m&&(this.viewport=this.getViewport(a,this.scrollTarget)),this.updateForViewport(),(2&h||m)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps)),h|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,t.docView.enforceCursorAssoc()),h}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(t,e){let i=.5-Math.max(-.5,Math.min(.5,t/1e3/2)),n=this.heightMap,s=this.state.doc,{visibleTop:r,visibleBottom:o}=this,l=new hs(n.lineAt(r-1e3*i,Gn.ByHeight,s,0,0).from,n.lineAt(o+1e3*(1-i),Gn.ByHeight,s,0,0).to);if(e){let{head:t}=e.range;if(t<l.from||t>l.to){let i,r=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),o=n.lineAt(t,Gn.ByPos,s,0,0);i=\"center\"==e.y?(o.top+o.bottom)/2-r/2:\"start\"==e.y||\"nearest\"==e.y&&t<l.from?o.top:o.bottom-r,l=new hs(n.lineAt(i-500,Gn.ByHeight,s,0,0).from,n.lineAt(i+r+500,Gn.ByHeight,s,0,0).to)}}return l}mapViewport(t,e){let i=e.mapPos(t.from,-1),n=e.mapPos(t.to,1);return new hs(this.heightMap.lineAt(i,Gn.ByPos,this.state.doc,0,0).from,this.heightMap.lineAt(n,Gn.ByPos,this.state.doc,0,0).to)}viewportIsAppropriate({from:t,to:e},i=0){if(!this.inView)return!0;let{top:n}=this.heightMap.lineAt(t,Gn.ByPos,this.state.doc,0,0),{bottom:s}=this.heightMap.lineAt(e,Gn.ByPos,this.state.doc,0,0),{visibleTop:r,visibleBottom:o}=this;return(0==t||n<=r-Math.max(10,Math.min(-i,250)))&&(e==this.state.doc.length||s>=o+Math.max(10,Math.min(i,250)))&&n>r-2e3&&s<o+2e3}mapLineGaps(t,e){if(!t.length||e.empty)return t;let i=[];for(let n of t)e.touchesRange(n.from,n.to)||i.push(new rs(e.mapPos(n.from),e.mapPos(n.to),n.size));return i}ensureLineGaps(t){let e=[];if(this.heightOracle.direction!=Fi.LTR)return e;for(let i of this.viewportLines){if(i.length<4e3)continue;let n,s,r=as(i.from,i.to,this.state);if(r.total<4e3)continue;if(this.heightOracle.lineWrapping){let t=2e3/this.heightOracle.lineLength*this.heightOracle.lineHeight;n=cs(r,(this.visibleTop-i.top-t)/i.height),s=cs(r,(this.visibleBottom-i.top+t)/i.height)}else{let t=r.total*this.heightOracle.charWidth,e=2e3*this.heightOracle.charWidth;n=cs(r,(this.pixelViewport.left-e)/t),s=cs(r,(this.pixelViewport.right+e)/t)}let o=[];n>i.from&&o.push({from:i.from,to:n}),s<i.to&&o.push({from:s,to:i.to});let l=this.state.selection.main;l.from>=i.from&&l.from<=i.to&&fs(o,l.from-10,l.from+10),!l.empty&&l.to>=i.from&&l.to<=i.to&&fs(o,l.to-10,l.to+10);for(let{from:n,to:s}of o)s-n>1e3&&e.push(ds(t,(t=>t.from>=i.from&&t.to<=i.to&&Math.abs(t.from-n)<1e3&&Math.abs(t.to-s)<1e3))||new rs(n,s,this.gapSize(i,n,s,r)))}return e}gapSize(t,e,i,n){let s=us(n,i)-us(n,e);return this.heightOracle.lineWrapping?t.height*s:n.total*this.heightOracle.charWidth*s}updateLineGaps(t){rs.same(t,this.lineGaps)||(this.lineGaps=t,this.lineGapDeco=si.set(t.map((t=>t.draw(this.heightOracle.lineWrapping)))))}computeVisibleRanges(){let t=this.state.facet(Vi);this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let e=[];Vt.spans(t,this.viewport.from,this.viewport.to,{span(t,i){e.push({from:t,to:i})},point(){}},20);let i=e.length!=this.visibleRanges.length||this.visibleRanges.some(((t,i)=>t.from!=e[i].from||t.to!=e[i].to));return this.visibleRanges=e,i?4:0}lineBlockAt(t){return t>=this.viewport.from&&t<=this.viewport.to&&this.viewportLines.find((e=>e.from<=t&&e.to>=t))||gs(this.heightMap.lineAt(t,Gn.ByPos,this.state.doc,0,0),this.scaler)}lineBlockAtHeight(t){return gs(this.heightMap.lineAt(this.scaler.fromDOM(t),Gn.ByHeight,this.state.doc,0,0),this.scaler)}elementAtHeight(t){return gs(this.heightMap.blockAt(this.scaler.fromDOM(t),this.state.doc,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}}class hs{constructor(t,e){this.from=t,this.to=e}}function as(t,e,i){let n=[],s=t,r=0;return Vt.spans(i.facet(Vi),t,e,{span(){},point(t,e){t>s&&(n.push({from:s,to:t}),r+=t-s),s=e}},20),s<e&&(n.push({from:s,to:e}),r+=e-s),{total:r,ranges:n}}function cs({total:t,ranges:e},i){if(i<=0)return e[0].from;if(i>=1)return e[e.length-1].to;let n=Math.floor(t*i);for(let t=0;;t++){let{from:i,to:s}=e[t],r=s-i;if(n<=r)return i+n;n-=r}}function us(t,e){let i=0;for(let{from:n,to:s}of t.ranges){if(e<=s){i+=e-n;break}i+=s-n}return i/t.total}function fs(t,e,i){for(let n=0;n<t.length;n++){let s=t[n];if(s.from<i&&s.to>e){let r=[];s.from<e&&r.push({from:s.from,to:e}),s.to>i&&r.push({from:i,to:s.to}),t.splice(n,1,...r),n+=r.length-1}}}function ds(t,e){for(let i of t)if(e(i))return i}const ps={toDOM:t=>t,fromDOM:t=>t,scale:1};class ms{constructor(t,e,i){let n=0,s=0,r=0;this.viewports=i.map((({from:i,to:s})=>{let r=e.lineAt(i,Gn.ByPos,t,0,0).top,o=e.lineAt(s,Gn.ByPos,t,0,0).bottom;return n+=o-r,{from:i,to:s,top:r,bottom:o,domTop:0,domBottom:0}})),this.scale=(7e6-n)/(e.height-n);for(let t of this.viewports)t.domTop=r+(t.top-s)*this.scale,r=t.domBottom=t.domTop+(t.bottom-t.top),s=t.bottom}toDOM(t){for(let e=0,i=0,n=0;;e++){let s=e<this.viewports.length?this.viewports[e]:null;if(!s||t<s.top)return n+(t-i)*this.scale;if(t<=s.bottom)return s.domTop+(t-s.top);i=s.bottom,n=s.domBottom}}fromDOM(t){for(let e=0,i=0,n=0;;e++){let s=e<this.viewports.length?this.viewports[e]:null;if(!s||t<s.domTop)return i+(t-n)/this.scale;if(t<=s.domBottom)return s.top+(t-s.domTop);i=s.bottom,n=s.domBottom}}}function gs(t,e){if(1==e.scale)return t;let i=e.toDOM(t.top),n=e.toDOM(t.bottom);return new Kn(t.from,t.length,i,n-i,Array.isArray(t.type)?t.type.map((t=>gs(t,e))):t.type)}const vs=V.define({combine:t=>t.join(\" \")}),ws=V.define({combine:t=>t.indexOf(!0)>-1}),ys=Rt.newName(),bs=Rt.newName(),xs=Rt.newName(),ks={\"&light\":\".\"+bs,\"&dark\":\".\"+xs};function Ss(t,e,i){return new Rt(e,{finish:e=>/&/.test(e)?e.replace(/&\\w*/,(e=>{if(\"&\"==e)return t;if(!i||!i[e])throw new RangeError(`Unsupported selector: ${e}`);return i[e]})):t+\" \"+e})}const As=Ss(\".\"+ys,{\"&.cm-editor\":{position:\"relative !important\",boxSizing:\"border-box\",\"&.cm-focused\":{outline:\"1px dotted #212121\"},display:\"flex !important\",flexDirection:\"column\"},\".cm-scroller\":{display:\"flex !important\",alignItems:\"flex-start !important\",fontFamily:\"monospace\",lineHeight:1.4,height:\"100%\",overflowX:\"auto\",position:\"relative\",zIndex:0},\".cm-content\":{margin:0,flexGrow:2,minHeight:\"100%\",display:\"block\",whiteSpace:\"pre\",wordWrap:\"normal\",boxSizing:\"border-box\",padding:\"4px 0\",outline:\"none\",\"&[contenteditable=true]\":{WebkitUserModify:\"read-write-plaintext-only\"}},\".cm-lineWrapping\":{whiteSpace_fallback:\"pre-wrap\",whiteSpace:\"break-spaces\",wordBreak:\"break-word\",overflowWrap:\"anywhere\"},\"&light .cm-content\":{caretColor:\"black\"},\"&dark .cm-content\":{caretColor:\"white\"},\".cm-line\":{display:\"block\",padding:\"0 2px 0 4px\"},\".cm-selectionLayer\":{zIndex:-1,contain:\"size style\"},\".cm-selectionBackground\":{position:\"absolute\"},\"&light .cm-selectionBackground\":{background:\"#d9d9d9\"},\"&dark .cm-selectionBackground\":{background:\"#222\"},\"&light.cm-focused .cm-selectionBackground\":{background:\"#d7d4f0\"},\"&dark.cm-focused .cm-selectionBackground\":{background:\"#233\"},\".cm-cursorLayer\":{zIndex:100,contain:\"size style\",pointerEvents:\"none\"},\"&.cm-focused .cm-cursorLayer\":{animation:\"steps(1) cm-blink 1.2s infinite\"},\"@keyframes cm-blink\":{\"0%\":{},\"50%\":{visibility:\"hidden\"},\"100%\":{}},\"@keyframes cm-blink2\":{\"0%\":{},\"50%\":{visibility:\"hidden\"},\"100%\":{}},\".cm-cursor, .cm-dropCursor\":{position:\"absolute\",borderLeft:\"1.2px solid black\",marginLeft:\"-0.6px\",pointerEvents:\"none\"},\".cm-cursor\":{display:\"none\"},\"&dark .cm-cursor\":{borderLeftColor:\"#444\"},\"&.cm-focused .cm-cursor\":{display:\"block\"},\"&light .cm-activeLine\":{backgroundColor:\"#f3f9ff\"},\"&dark .cm-activeLine\":{backgroundColor:\"#223039\"},\"&light .cm-specialChar\":{color:\"red\"},\"&dark .cm-specialChar\":{color:\"#f78\"},\".cm-tab\":{display:\"inline-block\",overflow:\"hidden\",verticalAlign:\"bottom\"},\".cm-widgetBuffer\":{verticalAlign:\"text-top\",height:\"1em\",display:\"inline\"},\".cm-placeholder\":{color:\"#888\",display:\"inline-block\",verticalAlign:\"top\"},\".cm-button\":{verticalAlign:\"middle\",color:\"inherit\",fontSize:\"70%\",padding:\".2em 1em\",borderRadius:\"1px\"},\"&light .cm-button\":{backgroundImage:\"linear-gradient(#eff1f5, #d9d9df)\",border:\"1px solid #888\",\"&:active\":{backgroundImage:\"linear-gradient(#b4b4b4, #d0d3d6)\"}},\"&dark .cm-button\":{backgroundImage:\"linear-gradient(#393939, #111)\",border:\"1px solid #888\",\"&:active\":{backgroundImage:\"linear-gradient(#111, #333)\"}},\".cm-textfield\":{verticalAlign:\"middle\",color:\"inherit\",fontSize:\"70%\",border:\"1px solid silver\",padding:\".2em .5em\"},\"&light .cm-textfield\":{backgroundColor:\"white\"},\"&dark .cm-textfield\":{border:\"1px solid #555\",backgroundColor:\"inherit\"}},ks),Cs={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},Ms=Fe.ie&&Fe.ie_version<=11;class Ds{constructor(t,e,i){this.view=t,this.onChange=e,this.onScrollChanged=i,this.active=!1,this.selectionRange=new ge,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.scrollTargets=[],this.intersection=null,this.resize=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.parentCheck=-1,this.dom=t.contentDOM,this.observer=new MutationObserver((e=>{for(let t of e)this.queue.push(t);(Fe.ie&&Fe.ie_version<=11||Fe.ios&&t.composing)&&e.some((t=>\"childList\"==t.type&&t.removedNodes.length||\"characterData\"==t.type&&t.oldValue.length>t.target.nodeValue.length))?this.flushSoon():this.flush()})),Ms&&(this.onCharData=t=>{this.queue.push({target:t.target,type:\"characterData\",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),window.addEventListener(\"resize\",this.onResize=this.onResize.bind(this)),\"function\"==typeof ResizeObserver&&(this.resize=new ResizeObserver((()=>{this.view.docView.lastUpdate<Date.now()-75&&this.onResize()})),this.resize.observe(t.scrollDOM)),window.addEventListener(\"beforeprint\",this.onPrint=this.onPrint.bind(this)),this.start(),window.addEventListener(\"scroll\",this.onScroll=this.onScroll.bind(this)),\"function\"==typeof IntersectionObserver&&(this.intersection=new IntersectionObserver((t=>{this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent(\"Event\")))}),{}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver((t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent(\"Event\"))}),{})),this.listenForScroll(),this.readSelectionRange(),this.dom.ownerDocument.addEventListener(\"selectionchange\",this.onSelectionChange)}onScroll(t){this.intersecting&&this.flush(!1),this.onScrollChanged(t)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout((()=>{this.resizeTimeout=-1,this.view.requestMeasure()}),50))}onPrint(){this.view.viewState.printing=!0,this.view.measure(),setTimeout((()=>{this.view.viewState.printing=!1,this.view.requestMeasure()}),500)}updateGaps(t){if(this.gapIntersection&&(t.length!=this.gaps.length||this.gaps.some(((e,i)=>e!=t[i])))){this.gapIntersection.disconnect();for(let e of t)this.gapIntersection.observe(e);this.gaps=t}}onSelectionChange(t){if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:e}=this,i=this.selectionRange;if(e.state.facet(Di)?e.root.activeElement!=this.dom:!le(e.dom,i))return;let n=i.anchorNode&&e.docView.nearest(i.anchorNode);n&&n.ignoreEvent(t)||((Fe.ie&&Fe.ie_version<=11||Fe.android&&Fe.chrome)&&!e.state.selection.main.empty&&i.focusNode&&ae(i.focusNode,i.focusOffset,i.anchorNode,i.anchorOffset)?this.flushSoon():this.flush(!1))}readSelectionRange(){let{root:t}=this.view,e=re(t),i=Fe.safari&&11==t.nodeType&&function(){let t=document.activeElement;for(;t&&t.shadowRoot;)t=t.shadowRoot.activeElement;return t}()==this.view.contentDOM&&function(t){let e=null;function i(t){t.preventDefault(),t.stopImmediatePropagation(),e=t.getTargetRanges()[0]}if(t.contentDOM.addEventListener(\"beforeinput\",i,!0),document.execCommand(\"indent\"),t.contentDOM.removeEventListener(\"beforeinput\",i,!0),!e)return null;let n=e.startContainer,s=e.startOffset,r=e.endContainer,o=e.endOffset,l=t.docView.domAtPos(t.state.selection.main.anchor);ae(l.node,l.offset,r,o)&&([n,s,r,o]=[r,o,n,s]);return{anchorNode:n,anchorOffset:s,focusNode:r,focusOffset:o}}(this.view)||e;return!this.selectionRange.eq(i)&&(this.selectionRange.setRange(i),this.selectionChanged=!0)}setSelectionRange(t,e){this.selectionRange.set(t.node,t.offset,e.node,e.offset),this.selectionChanged=!1}listenForScroll(){this.parentCheck=-1;let t=0,e=null;for(let i=this.dom;i;)if(1==i.nodeType)!e&&t<this.scrollTargets.length&&this.scrollTargets[t]==i?t++:e||(e=this.scrollTargets.slice(0,t)),e&&e.push(i),i=i.assignedSlot||i.parentNode;else{if(11!=i.nodeType)break;i=i.host}if(t<this.scrollTargets.length&&!e&&(e=this.scrollTargets.slice(0,t)),e){for(let t of this.scrollTargets)t.removeEventListener(\"scroll\",this.onScroll);for(let t of this.scrollTargets=e)t.addEventListener(\"scroll\",this.onScroll)}}ignore(t){if(!this.active)return t();try{return this.stop(),t()}finally{this.start(),this.clear()}}start(){this.active||(this.observer.observe(this.dom,Cs),Ms&&this.dom.addEventListener(\"DOMCharacterDataModified\",this.onCharData),this.active=!0)}stop(){this.active&&(this.active=!1,this.observer.disconnect(),Ms&&this.dom.removeEventListener(\"DOMCharacterDataModified\",this.onCharData))}clear(){this.processRecords(),this.queue.length=0,this.selectionChanged=!1}delayAndroidKey(t,e){this.delayedAndroidKey||requestAnimationFrame((()=>{let t=this.delayedAndroidKey;this.delayedAndroidKey=null;let e=this.view.state;xe(this.view.contentDOM,t.key,t.keyCode)?this.processRecords():this.flush(),this.view.state==e&&this.view.update([])})),this.delayedAndroidKey&&\"Enter\"!=t||(this.delayedAndroidKey={key:t,keyCode:e})}flushSoon(){this.delayedFlush<0&&(this.delayedFlush=window.setTimeout((()=>{this.delayedFlush=-1,this.flush()}),20))}forceFlush(){this.delayedFlush>=0&&(window.clearTimeout(this.delayedFlush),this.delayedFlush=-1,this.flush())}processRecords(){let t=this.queue;for(let e of this.observer.takeRecords())t.push(e);t.length&&(this.queue=[]);let e=-1,i=-1,n=!1;for(let s of t){let t=this.readMutation(s);t&&(t.typeOver&&(n=!0),-1==e?({from:e,to:i}=t):(e=Math.min(t.from,e),i=Math.max(t.to,i)))}return{from:e,to:i,typeOver:n}}flush(t=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return;t&&this.readSelectionRange();let{from:e,to:i,typeOver:n}=this.processRecords(),s=this.selectionChanged&&le(this.dom,this.selectionRange);if(e<0&&!s)return;this.selectionChanged=!1;let r=this.view.state;this.onChange(e,i,n),this.view.state==r&&this.view.update([])}readMutation(t){let e=this.view.docView.nearest(t.target);if(!e||e.ignoreMutation(t))return null;if(e.markDirty(\"attributes\"==t.type),\"attributes\"==t.type&&(e.dirty|=4),\"childList\"==t.type){let i=Os(e,t.previousSibling||t.target.previousSibling,-1),n=Os(e,t.nextSibling||t.target.nextSibling,1);return{from:i?e.posAfter(i):e.posAtStart,to:n?e.posBefore(n):e.posAtEnd,typeOver:!1}}return\"characterData\"==t.type?{from:e.posAtStart,to:e.posAtEnd,typeOver:t.target.nodeValue==t.oldValue}:null}destroy(){var t,e,i;this.stop(),null===(t=this.intersection)||void 0===t||t.disconnect(),null===(e=this.gapIntersection)||void 0===e||e.disconnect(),null===(i=this.resize)||void 0===i||i.disconnect();for(let t of this.scrollTargets)t.removeEventListener(\"scroll\",this.onScroll);window.removeEventListener(\"scroll\",this.onScroll),window.removeEventListener(\"resize\",this.onResize),window.removeEventListener(\"beforeprint\",this.onPrint),this.dom.ownerDocument.removeEventListener(\"selectionchange\",this.onSelectionChange),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout)}}function Os(t,e,i){for(;e;){let n=Ce.get(e);if(n&&n.parent==t)return n;let s=e.parentNode;e=s!=t.dom?s:i>0?e.nextSibling:e.previousSibling}return null}function Ts(t,e,i,n){let s,r,o=t.state.selection.main;if(e>-1){let n=t.docView.domBoundsAround(e,i,0);if(!n||t.state.readOnly)return;let{from:l,to:h}=n,a=t.docView.impreciseHead||t.docView.impreciseAnchor?[]:function(t){let e=[];if(t.root.activeElement!=t.contentDOM)return e;let{anchorNode:i,anchorOffset:n,focusNode:s,focusOffset:r}=t.observer.selectionRange;i&&(e.push(new sn(i,n)),s==i&&r==n||e.push(new sn(s,r)));return e}(t),c=new en(a,t.state);c.readRange(n.startDOM,n.endDOM);let u=o.from,f=null;(8===t.inputState.lastKeyCode&&t.inputState.lastKeyTime>Date.now()-100||Fe.android&&c.text.length<h-l)&&(u=o.to,f=\"end\");let p=function(t,e,i,n){let s=Math.min(t.length,e.length),r=0;for(;r<s&&t.charCodeAt(r)==e.charCodeAt(r);)r++;if(r==s&&t.length==e.length)return null;let o=t.length,l=e.length;for(;o>0&&l>0&&t.charCodeAt(o-1)==e.charCodeAt(l-1);)o--,l--;if(\"end\"==n){i-=o+Math.max(0,r-Math.min(o,l))-r}if(o<r&&t.length<e.length){r-=i<=r&&i>=o?r-i:0,l=r+(l-o),o=r}else if(l<r){r-=i<=r&&i>=l?r-i:0,o=r+(o-l),l=r}return{from:r,toA:o,toB:l}}(t.state.doc.sliceString(l,h,\"￿\"),c.text,u-l,f);p&&(Fe.chrome&&13==t.inputState.lastKeyCode&&p.toB==p.from+2&&\"￿￿\"==c.text.slice(p.from,p.toB)&&p.toB--,s={from:l+p.from,to:l+p.toA,insert:d.of(c.text.slice(p.from,p.toB).split(\"￿\"))}),r=function(t,e){if(0==t.length)return null;let i=t[0].pos,n=2==t.length?t[1].pos:i;return i>-1&&n>-1?B.single(i+e,n+e):null}(a,l)}else if(t.hasFocus||!t.state.facet(Di)){let e=t.observer.selectionRange,{impreciseHead:i,impreciseAnchor:n}=t.docView,s=i&&i.node==e.focusNode&&i.offset==e.focusOffset||!oe(t.contentDOM,e.focusNode)?t.state.selection.main.head:t.docView.posFromDOM(e.focusNode,e.focusOffset),l=n&&n.node==e.anchorNode&&n.offset==e.anchorOffset||!oe(t.contentDOM,e.anchorNode)?t.state.selection.main.anchor:t.docView.posFromDOM(e.anchorNode,e.anchorOffset);s==o.head&&l==o.anchor||(r=B.single(l,s))}if(s||r)if(!s&&n&&!o.empty&&r&&r.main.empty?s={from:o.from,to:o.to,insert:t.state.doc.slice(o.from,o.to)}:s&&s.from>=o.from&&s.to<=o.to&&(s.from!=o.from||s.to!=o.to)&&o.to-o.from-(s.to-s.from)<=4&&(s={from:o.from,to:o.to,insert:t.state.doc.slice(o.from,s.from).append(s.insert).append(t.state.doc.slice(s.to,o.to))}),s){let e=t.state;if(Fe.ios&&t.inputState.flushIOSKey(t))return;if(Fe.android&&(s.from==o.from&&s.to==o.to&&1==s.insert.length&&2==s.insert.lines&&xe(t.contentDOM,\"Enter\",13)||s.from==o.from-1&&s.to==o.to&&0==s.insert.length&&xe(t.contentDOM,\"Backspace\",8)||s.from==o.from&&s.to==o.to+1&&0==s.insert.length&&xe(t.contentDOM,\"Delete\",46)))return;let i,n=s.insert.toString();if(t.state.facet(xi).some((e=>e(t,s.from,s.to,n))))return;if(t.inputState.composing>=0&&t.inputState.composing++,s.from>=o.from&&s.to<=o.to&&s.to-s.from>=(o.to-o.from)/3&&(!r||r.main.empty&&r.main.from==s.from+s.insert.length)&&t.inputState.composing<0){let n=o.from<s.from?e.sliceDoc(o.from,s.from):\"\",r=o.to>s.to?e.sliceDoc(s.to,o.to):\"\";i=e.replaceSelection(t.state.toText(n+s.insert.sliceString(0,void 0,t.state.lineBreak)+r))}else{let n=e.changes(s),l=r&&!e.selection.main.eq(r.main)&&r.main.to<=n.newLength?r.main:void 0;if(e.selection.ranges.length>1&&t.inputState.composing>=0&&s.to<=o.to&&s.to>=o.to-10){let r=t.state.sliceDoc(s.from,s.to),h=ln(t)||t.state.doc.lineAt(o.head),a=o.to-s.to,c=o.to-o.from;i=e.changeByRange((i=>{if(i.from==o.from&&i.to==o.to)return{changes:n,range:l||i.map(n)};let u=i.to-a,f=u-r.length;if(i.to-i.from!=c||t.state.sliceDoc(f,u)!=r||h&&i.to>=h.from&&i.from<=h.to)return{range:i};let d=e.changes({from:f,to:u,insert:s.insert}),p=i.to-o.to;return{changes:d,range:l?B.range(Math.max(0,l.anchor+p),Math.max(0,l.head+p)):i.map(d)}}))}else i={changes:n,selection:l&&e.selection.replaceRange(l)}}let l=\"input.type\";t.composing&&(l+=\".compose\",t.inputState.compositionFirstChange&&(l+=\".start\",t.inputState.compositionFirstChange=!1)),t.dispatch(i,{scrollIntoView:!0,userEvent:l})}else if(r&&!r.main.eq(o)){let e=!1,i=\"select\";t.inputState.lastSelectionTime>Date.now()-50&&(\"select\"==t.inputState.lastSelectionOrigin&&(e=!0),i=t.inputState.lastSelectionOrigin),t.dispatch({selection:r,scrollIntoView:e,userEvent:i})}}class Rs{constructor(t={}){this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement(\"div\"),this.scrollDOM=document.createElement(\"div\"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className=\"cm-scroller\",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement(\"div\"),this.announceDOM.style.cssText=\"position: absolute; top: -10000px\",this.announceDOM.setAttribute(\"aria-live\",\"polite\"),this.dom=document.createElement(\"div\"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),this._dispatch=t.dispatch||(t=>this.update([t])),this.dispatch=this.dispatch.bind(this),this.root=t.root||function(t){for(;t;){if(t&&(9==t.nodeType||11==t.nodeType&&t.host))return t;t=t.assignedSlot||t.parentNode}return null}(t.parent)||document,this.viewState=new ls(t.state||Ct.create()),this.plugins=this.state.facet(Ei).map((t=>new Pi(t)));for(let t of this.plugins)t.update(this);this.observer=new Ds(this,((t,e,i)=>{Ts(this,t,e,i)}),(t=>{this.inputState.runScrollHandlers(this,t),this.observer.intersecting&&this.measure()})),this.inputState=new kn(this),this.docView=new rn(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),t.parent&&t.parent.appendChild(this.dom)}get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return this.inputState.composing>0}get compositionStarted(){return this.inputState.composing>=0}dispatch(...t){this._dispatch(1==t.length&&t[0]instanceof pt?t[0]:this.state.update(...t))}update(t){if(0!=this.updateState)throw new Error(\"Calls to EditorView.update are not allowed while an update is in progress\");let e,i=!1,n=this.state;for(let e of t){if(e.startState!=n)throw new RangeError(\"Trying to update state with a transaction that doesn't start from the previous state.\");n=e.state}if(this.destroyed)return void(this.viewState.state=n);if(n.facet(Ct.phrases)!=this.state.facet(Ct.phrases))return this.setState(n);e=new zi(this,n,t);let s=this.viewState.scrollTarget;try{this.updateState=2;for(let e of t){if(s&&(s=s.map(e.changes)),e.scrollIntoView){let{main:t}=e.state.selection;s=new Ai(t.empty?t:B.cursor(t.head,t.head>t.anchor?-1:1))}for(let t of e.effects)t.is(ki)?s=new Ai(t.value):t.is(Si)?s=new Ai(t.value,\"center\"):t.is(Ci)&&(s=t.value)}this.viewState.update(e,s),this.bidiCache=Ps.update(this.bidiCache,e.changes),e.empty||(this.updatePlugins(e),this.inputState.update(e)),i=this.docView.update(e),this.state.facet(Hi)!=this.styleModules&&this.mountStyles(),this.updateAttrs(),this.showAnnouncements(t),this.docView.updateSelection(i,t.some((t=>t.isUserEvent(\"select.pointer\"))))}finally{this.updateState=0}if(e.startState.facet(vs)!=e.state.facet(vs)&&(this.viewState.mustMeasureContent=!0),(i||s||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),!e.empty)for(let t of this.state.facet(bi))t(e)}setState(t){if(0!=this.updateState)throw new Error(\"Calls to EditorView.setState are not allowed while an update is in progress\");if(this.destroyed)return void(this.viewState.state=t);this.updateState=2;let e=this.hasFocus;try{for(let t of this.plugins)t.destroy(this);this.viewState=new ls(t),this.plugins=t.facet(Ei).map((t=>new Pi(t))),this.pluginMap.clear();for(let t of this.plugins)t.update(this);this.docView=new rn(this),this.inputState.ensureHandlers(this),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}e&&this.focus(),this.requestMeasure()}updatePlugins(t){let e=t.startState.facet(Ei),i=t.state.facet(Ei);if(e!=i){let n=[];for(let s of i){let i=e.indexOf(s);if(i<0)n.push(new Pi(s));else{let e=this.plugins[i];e.mustUpdate=t,n.push(e)}}for(let e of this.plugins)e.mustUpdate!=t&&e.destroy(this);this.plugins=n,this.pluginMap.clear(),this.inputState.ensureHandlers(this)}else for(let e of this.plugins)e.mustUpdate=t;for(let t=0;t<this.plugins.length;t++)this.plugins[t].update(this)}measure(t=!0){if(this.destroyed)return;this.measureScheduled>-1&&cancelAnimationFrame(this.measureScheduled),this.measureScheduled=0,t&&this.observer.flush();let e=null;try{for(let t=0;;t++){this.updateState=1;let i=this.viewport,n=this.viewState.measure(this);if(!n&&!this.measureRequests.length&&null==this.viewState.scrollTarget)break;if(t>5){console.warn(this.measureRequests.length?\"Measure loop restarted more than 5 times\":\"Viewport failed to stabilize\");break}let s=[];4&n||([this.measureRequests,s]=[s,this.measureRequests]);let r=s.map((t=>{try{return t.read(this)}catch(t){return Mi(this.state,t),Bs}})),o=new zi(this,this.state),l=!1,h=!1;o.flags|=n,e?e.flags|=n:e=o,this.updateState=2,o.empty||(this.updatePlugins(o),this.inputState.update(o),this.updateAttrs(),l=this.docView.update(o));for(let t=0;t<s.length;t++)if(r[t]!=Bs)try{let e=s[t];e.write&&e.write(r[t],this)}catch(t){Mi(this.state,t)}if(this.viewState.scrollTarget&&(this.docView.scrollIntoView(this.viewState.scrollTarget),this.viewState.scrollTarget=null,h=!0),l&&this.docView.updateSelection(!0),this.viewport.from==i.from&&this.viewport.to==i.to&&!h&&0==this.measureRequests.length)break}}finally{this.updateState=0,this.measureScheduled=-1}if(e&&!e.empty)for(let t of this.state.facet(bi))t(e)}get themeClasses(){return ys+\" \"+(this.state.facet(ws)?xs:bs)+\" \"+this.state.facet(vs)}updateAttrs(){let t=Ns(this,Ni,{class:\"cm-editor\"+(this.hasFocus?\" cm-focused \":\" \")+this.themeClasses}),e={spellcheck:\"false\",autocorrect:\"off\",autocapitalize:\"off\",translate:\"no\",contenteditable:this.state.facet(Di)?\"true\":\"false\",class:\"cm-content\",style:`${Fe.tabSize}: ${this.state.tabSize}`,role:\"textbox\",\"aria-multiline\":\"true\"};this.state.readOnly&&(e[\"aria-readonly\"]=\"true\"),Ns(this,Ii,e),this.observer.ignore((()=>{ei(this.contentDOM,this.contentAttrs,e),ei(this.dom,this.editorAttrs,t)})),this.editorAttrs=t,this.contentAttrs=e}showAnnouncements(t){let e=!0;for(let i of t)for(let t of i.effects)if(t.is(Rs.announce)){e&&(this.announceDOM.textContent=\"\"),e=!1,this.announceDOM.appendChild(document.createElement(\"div\")).textContent=t.value}}mountStyles(){this.styleModules=this.state.facet(Hi),Rt.mount(this.root,this.styleModules.concat(As).reverse())}readMeasured(){if(2==this.updateState)throw new Error(\"Reading the editor layout isn't allowed during an update\");0==this.updateState&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(t){if(this.measureScheduled<0&&(this.measureScheduled=requestAnimationFrame((()=>this.measure()))),t){if(null!=t.key)for(let e=0;e<this.measureRequests.length;e++)if(this.measureRequests[e].key===t.key)return void(this.measureRequests[e]=t);this.measureRequests.push(t)}}pluginField(t){let e=[];for(let i of this.plugins)i.update(this).takeField(t,e);return e}plugin(t){let e=this.pluginMap.get(t);return(void 0===e||e&&e.spec!=t)&&this.pluginMap.set(t,e=this.plugins.find((e=>e.spec==t))||null),e&&e.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}blockAtHeight(t,e){let i=Ls(e,this);return this.elementAtHeight(t-i).moveY(i)}elementAtHeight(t){return this.readMeasured(),this.viewState.elementAtHeight(t)}visualLineAtHeight(t,e){let i=Ls(e,this);return this.lineBlockAtHeight(t-i).moveY(i)}lineBlockAtHeight(t){return this.readMeasured(),this.viewState.lineBlockAtHeight(t)}viewportLines(t,e){let i=Ls(e,this);for(let e of this.viewportLineBlocks)t(e.moveY(i))}get viewportLineBlocks(){return this.viewState.viewportLines}visualLineAt(t,e=0){return this.lineBlockAt(t).moveY(e+this.viewState.paddingTop)}lineBlockAt(t){return this.viewState.lineBlockAt(t)}get contentHeight(){return this.viewState.contentHeight}moveByChar(t,e,i){return xn(this,t,bn(this,t,e,i))}moveByGroup(t,e){return xn(this,t,bn(this,t,e,(e=>function(t,e,i){let n=t.state.charCategorizer(e),s=n(i);return t=>{let e=n(t);return s==xt.Space&&(s=e),s==e}}(this,t.head,e))))}moveToLineBoundary(t,e,i=!0){return function(t,e,i,n){let s=t.state.doc.lineAt(e.head),r=n&&t.lineWrapping?t.coordsAtPos(e.assoc<0&&e.head>s.from?e.head-1:e.head):null;if(r){let e=t.dom.getBoundingClientRect(),n=t.posAtCoords({x:i==(t.textDirection==Fi.LTR)?e.right-1:e.left+1,y:(r.top+r.bottom)/2});if(null!=n)return B.cursor(n,i?-1:1)}let o=ci.find(t.docView,e.head),l=o?i?o.posAtEnd:o.posAtStart:i?s.to:s.from;return B.cursor(l,i?-1:1)}(this,t,e,i)}moveVertically(t,e,i){return xn(this,t,function(t,e,i,n){let s=e.head,r=i?1:-1;if(s==(i?t.state.doc.length:0))return B.cursor(s,e.assoc);let o,l=e.goalColumn,h=t.contentDOM.getBoundingClientRect(),a=t.coordsAtPos(s),c=t.documentTop;if(a)null==l&&(l=a.left-h.left),o=r<0?a.top:a.bottom;else{let e=t.viewState.lineBlockAt(s-c);null==l&&(l=Math.min(h.right-h.left,t.defaultCharacterWidth*(s-e.from))),o=(r<0?e.top:e.bottom)+c}let u=h.left+l,f=null!=n?n:t.defaultLineHeight>>1;for(let i=0;;i+=10){let n=o+(f+i)*r,a=wn(t,{x:u,y:n},!1,r);if(n<h.top||n>h.bottom||(r<0?a<s:a>s))return B.cursor(a,e.assoc,void 0,l)}}(this,t,e,i))}scrollPosIntoView(t){this.dispatch({effects:ki.of(B.cursor(t))})}domAtPos(t){return this.docView.domAtPos(t)}posAtDOM(t,e=0){return this.docView.posFromDOM(t,e)}posAtCoords(t,e=!0){return this.readMeasured(),wn(this,t,e)}coordsAtPos(t,e=1){this.readMeasured();let i=this.docView.coordsAt(t,e);if(!i||i.left==i.right)return i;let n=this.state.doc.lineAt(t),s=this.bidiSpans(n);return pe(i,s[Yi.find(s,t-n.from,-1,e)].dir==Fi.LTR==e>0)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.heightOracle.direction}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(t){if(t.length>Es)return Qi(t.length);let e=this.textDirection;for(let i of this.bidiCache)if(i.from==t.from&&i.dir==e)return i.order;let i=function(t,e){let i=t.length,n=e==qi?1:2,s=e==qi?2:1;if(!t||1==n&&!Ji.test(t))return Qi(i);for(let e=0,s=n,o=n;e<i;e++){let i=(r=t.charCodeAt(e))<=247?Ui[r]:1424<=r&&r<=1524?2:1536<=r&&r<=1785?$i[r-1536]:1774<=r&&r<=2220?4:8192<=r&&r<=8203||8204==r?256:1;512==i?i=s:8==i&&4==o&&(i=16),Xi[e]=4==i?2:i,7&i&&(o=i),s=i}var r;for(let t=0,e=n,s=n;t<i;t++){let n=Xi[t];if(128==n)t<i-1&&e==Xi[t+1]&&24&e?n=Xi[t]=e:Xi[t]=256;else if(64==n){let n=t+1;for(;n<i&&64==Xi[n];)n++;let r=t&&8==e||n<i&&8==Xi[n]?1==s?1:8:256;for(let e=t;e<n;e++)Xi[e]=r;t=n-1}else 8==n&&1==s&&(Xi[t]=1);e=n,7&n&&(s=n)}for(let e,r,o,l=0,h=0,a=0;l<i;l++)if(r=Ki[e=t.charCodeAt(l)])if(r<0){for(let t=h-3;t>=0;t-=3)if(Gi[t+1]==-r){let e=Gi[t+2],i=2&e?n:4&e?1&e?s:n:0;i&&(Xi[l]=Xi[Gi[t]]=i),h=t;break}}else{if(189==Gi.length)break;Gi[h++]=l,Gi[h++]=e,Gi[h++]=a}else if(2==(o=Xi[l])||1==o){let t=o==n;a=t?0:1;for(let e=h-3;e>=0;e-=3){let i=Gi[e+2];if(2&i)break;if(t)Gi[e+2]|=2;else{if(4&i)break;Gi[e+2]|=4}}}for(let t=0;t<i;t++)if(256==Xi[t]){let e=t+1;for(;e<i&&256==Xi[e];)e++;let s=1==(t?Xi[t-1]:n),r=s==(1==(e<i?Xi[e]:n))?s?1:2:n;for(let i=t;i<e;i++)Xi[i]=r;t=e-1}let o=[];if(1==n)for(let t=0;t<i;){let e=t,n=1!=Xi[t++];for(;t<i&&n==(1!=Xi[t]);)t++;if(n)for(let i=t;i>e;){let t=i,n=2!=Xi[--i];for(;i>e&&n==(2!=Xi[i-1]);)i--;o.push(new Yi(i,t,n?2:1))}else o.push(new Yi(e,t,0))}else for(let t=0;t<i;){let e=t,n=2==Xi[t++];for(;t<i&&n==(2==Xi[t]);)t++;o.push(new Yi(e,t,n?1:2))}return o}(t.text,this.textDirection);return this.bidiCache.push(new Ps(t.from,t.to,e,i)),i}get hasFocus(){var t;return(document.hasFocus()||Fe.safari&&(null===(t=this.inputState)||void 0===t?void 0:t.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore((()=>{ye(this.contentDOM),this.docView.updateSelection()}))}destroy(){for(let t of this.plugins)t.destroy(this);this.plugins=[],this.inputState.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(t,e={}){return Ci.of(new Ai(\"number\"==typeof t?B.cursor(t):t,e.y,e.x,e.yMargin,e.xMargin))}static domEventHandlers(t){return Li.define((()=>({})),{eventHandlers:t})}static theme(t,e){let i=Rt.newName(),n=[vs.of(i),Hi.of(Ss(`.${i}`,t))];return e&&e.dark&&n.push(ws.of(!0)),n}static baseTheme(t){return Y.lowest(Hi.of(Ss(\".\"+ys,t,ks)))}}Rs.scrollTo=ki,Rs.centerOn=Si,Rs.styleModule=Hi,Rs.inputHandler=xi,Rs.exceptionSink=yi,Rs.updateListener=bi,Rs.editable=Di,Rs.mouseSelectionStyle=wi,Rs.dragMovesSelection=vi,Rs.clickAddsSelectionRange=gi,Rs.decorations=Vi,Rs.darkTheme=ws,Rs.contentAttributes=Ii,Rs.editorAttributes=Ni,Rs.lineWrapping=Rs.contentAttributes.of({class:\"cm-lineWrapping\"}),Rs.announce=dt.define();const Es=4096;function Ls(t,e){return(null==t?e.contentDOM.getBoundingClientRect().top:t)+e.viewState.paddingTop}const Bs={};class Ps{constructor(t,e,i,n){this.from=t,this.to=e,this.dir=i,this.order=n}static update(t,e){if(e.empty)return t;let i=[],n=t.length?t[t.length-1].dir:Fi.LTR;for(let s=Math.max(0,t.length-10);s<t.length;s++){let r=t[s];r.dir!=n||e.touchesRange(r.from,r.to)||i.push(new Ps(e.mapPos(r.from,1),e.mapPos(r.to,-1),r.dir,r.order))}return i}}function Ns(t,e,i){for(let n=t.state.facet(e),s=n.length-1;s>=0;s--){let e=n[s],r=\"function\"==typeof e?e(t):e;r&&Ze(r,i)}return i}const Is=Fe.mac?\"mac\":Fe.windows?\"win\":Fe.linux?\"linux\":\"key\";function Vs(t,e,i){return e.altKey&&(t=\"Alt-\"+t),e.ctrlKey&&(t=\"Ctrl-\"+t),e.metaKey&&(t=\"Meta-\"+t),!1!==i&&e.shiftKey&&(t=\"Shift-\"+t),t}const Hs=Rs.domEventHandlers({keydown:(t,e)=>_s(Fs(e.state),t,e,\"editor\")}),Ws=V.define({enables:Hs}),zs=new WeakMap;function Fs(t){let e=t.facet(Ws),i=zs.get(e);return i||zs.set(e,i=function(t,e=Is){let i=Object.create(null),n=Object.create(null),s=(t,e)=>{let i=n[t];if(null==i)n[t]=e;else if(i!=e)throw new Error(\"Key binding \"+t+\" is used both as a regular binding and as a multi-stroke prefix\")},r=(t,n,r,o)=>{let l=i[t]||(i[t]=Object.create(null)),h=n.split(/ (?!$)/).map((t=>function(t,e){const i=t.split(/-(?!$)/);let n,s,r,o,l=i[i.length-1];\"Space\"==l&&(l=\" \");for(let t=0;t<i.length-1;++t){const l=i[t];if(/^(cmd|meta|m)$/i.test(l))o=!0;else if(/^a(lt)?$/i.test(l))n=!0;else if(/^(c|ctrl|control)$/i.test(l))s=!0;else if(/^s(hift)?$/i.test(l))r=!0;else{if(!/^mod$/i.test(l))throw new Error(\"Unrecognized modifier name: \"+l);\"mac\"==e?o=!0:s=!0}}return n&&(l=\"Alt-\"+l),s&&(l=\"Ctrl-\"+l),o&&(l=\"Meta-\"+l),r&&(l=\"Shift-\"+l),l}(t,e)));for(let e=1;e<h.length;e++){let i=h.slice(0,e).join(\" \");s(i,!0),l[i]||(l[i]={preventDefault:!0,commands:[e=>{let n=qs={view:e,prefix:i,scope:t};return setTimeout((()=>{qs==n&&(qs=null)}),4e3),!0}]})}let a=h.join(\" \");s(a,!1);let c=l[a]||(l[a]={preventDefault:!1,commands:[]});c.commands.push(r),o&&(c.preventDefault=!0)};for(let i of t){let t=i[e]||i.key;if(t)for(let e of i.scope?i.scope.split(\" \"):[\"editor\"])r(e,t,i.run,i.preventDefault),i.shift&&r(e,\"Shift-\"+t,i.shift,i.preventDefault)}return i}(e.reduce(((t,e)=>t.concat(e)),[]))),i}let qs=null;function _s(t,e,i,n){let s=function(t){var e=!(ie&&(t.ctrlKey||t.altKey||t.metaKey)||(Qt||ee)&&t.shiftKey&&t.key&&1==t.key.length)&&t.key||(t.shiftKey?Yt:Jt)[t.keyCode]||t.key||\"Unidentified\";return\"Esc\"==e&&(e=\"Escape\"),\"Del\"==e&&(e=\"Delete\"),\"Left\"==e&&(e=\"ArrowLeft\"),\"Up\"==e&&(e=\"ArrowUp\"),\"Right\"==e&&(e=\"ArrowRight\"),\"Down\"==e&&(e=\"ArrowDown\"),e}(e),r=1==s.length&&\" \"!=s,o=\"\",l=!1;qs&&qs.view==i&&qs.scope==n&&(o=qs.prefix+\" \",(l=An.indexOf(e.keyCode)<0)&&(qs=null));let h,a=t=>{if(t){for(let e of t.commands)if(e(i))return!0;t.preventDefault&&(l=!0)}return!1},c=t[n];if(c){if(a(c[o+Vs(s,e,!r)]))return!0;if(r&&(e.shiftKey||e.altKey||e.metaKey)&&(h=Jt[e.keyCode])&&h!=s){if(a(c[o+Vs(h,e,!0)]))return!0}else if(r&&e.shiftKey&&a(c[o+Vs(s,e,!0)]))return!0}return l}const js=!Fe.ios,Us=V.define({combine:t=>Mt(t,{cursorBlinkRate:1200,drawRangeCursor:!0},{cursorBlinkRate:(t,e)=>Math.min(t,e),drawRangeCursor:(t,e)=>t||e})});function $s(t={}){return[Us.of(t),Gs,Ys]}class Ks{constructor(t,e,i,n,s){this.left=t,this.top=e,this.width=i,this.height=n,this.className=s}draw(){let t=document.createElement(\"div\");return t.className=this.className,this.adjust(t),t}adjust(t){t.style.left=this.left+\"px\",t.style.top=this.top+\"px\",this.width>=0&&(t.style.width=this.width+\"px\"),t.style.height=this.height+\"px\"}eq(t){return this.left==t.left&&this.top==t.top&&this.width==t.width&&this.height==t.height&&this.className==t.className}}const Gs=Li.fromClass(class{constructor(t){this.view=t,this.rangePieces=[],this.cursors=[],this.measureReq={read:this.readPos.bind(this),write:this.drawSel.bind(this)},this.selectionLayer=t.scrollDOM.appendChild(document.createElement(\"div\")),this.selectionLayer.className=\"cm-selectionLayer\",this.selectionLayer.setAttribute(\"aria-hidden\",\"true\"),this.cursorLayer=t.scrollDOM.appendChild(document.createElement(\"div\")),this.cursorLayer.className=\"cm-cursorLayer\",this.cursorLayer.setAttribute(\"aria-hidden\",\"true\"),t.requestMeasure(this.measureReq),this.setBlinkRate()}setBlinkRate(){this.cursorLayer.style.animationDuration=this.view.state.facet(Us).cursorBlinkRate+\"ms\"}update(t){let e=t.startState.facet(Us)!=t.state.facet(Us);(e||t.selectionSet||t.geometryChanged||t.viewportChanged)&&this.view.requestMeasure(this.measureReq),t.transactions.some((t=>t.scrollIntoView))&&(this.cursorLayer.style.animationName=\"cm-blink\"==this.cursorLayer.style.animationName?\"cm-blink2\":\"cm-blink\"),e&&this.setBlinkRate()}readPos(){let{state:t}=this.view,e=t.facet(Us),i=t.selection.ranges.map((t=>t.empty?[]:function(t,e){if(e.to<=t.viewport.from||e.from>=t.viewport.to)return[];let i=Math.max(e.from,t.viewport.from),n=Math.min(e.to,t.viewport.to),s=t.textDirection==Fi.LTR,r=t.contentDOM,o=r.getBoundingClientRect(),l=Xs(t),h=window.getComputedStyle(r.firstChild),a=o.left+parseInt(h.paddingLeft)+Math.min(0,parseInt(h.textIndent)),c=o.right-parseInt(h.paddingRight),u=Zs(t,i),f=Zs(t,n),d=u.type==ni.Text?u:null,p=f.type==ni.Text?f:null;t.lineWrapping&&(d&&(d=Qs(t,i,d)),p&&(p=Qs(t,n,p)));if(d&&p&&d.from==p.from)return g(v(e.from,e.to,d));{let i=d?v(e.from,null,d):w(u,!1),n=p?v(null,e.to,p):w(f,!0),s=[];return(d||u).to<(p||f).from-1?s.push(m(a,i.bottom,c,n.top)):i.bottom<n.top&&t.elementAtHeight((i.bottom+n.top)/2).type==ni.Text&&(i.bottom=n.top=(i.bottom+n.top)/2),g(i).concat(s).concat(g(n))}function m(t,e,i,n){return new Ks(t-l.left,e-l.top-.01,i-t,n-e+.01,\"cm-selectionBackground\")}function g({top:t,bottom:e,horizontal:i}){let n=[];for(let s=0;s<i.length;s+=2)n.push(m(i[s],t,i[s+1],e));return n}function v(e,i,n){let r=1e9,o=-1e9,l=[];function h(e,i,h,u,f){let d=t.coordsAtPos(e,e==n.to?-2:2),p=t.coordsAtPos(h,h==n.from?2:-2);r=Math.min(d.top,p.top,r),o=Math.max(d.bottom,p.bottom,o),f==Fi.LTR?l.push(s&&i?a:d.left,s&&u?c:p.right):l.push(!s&&u?a:p.left,!s&&i?c:d.right)}let u=null!=e?e:n.from,f=null!=i?i:n.to;for(let n of t.visibleRanges)if(n.to>u&&n.from<f)for(let s=Math.max(n.from,u),r=Math.min(n.to,f);;){let n=t.state.doc.lineAt(s);for(let o of t.bidiSpans(n)){let t=o.from+n.from,l=o.to+n.from;if(t>=r)break;l>s&&h(Math.max(t,s),null==e&&t<=u,Math.min(l,r),null==i&&l>=f,o.dir)}if(s=n.to+1,s>=r)break}return 0==l.length&&h(u,null==e,f,null==i,t.textDirection),{top:r,bottom:o,horizontal:l}}function w(t,e){let i=o.top+(e?t.top:t.bottom);return{top:i,bottom:i,horizontal:[]}}}(this.view,t))).reduce(((t,e)=>t.concat(e))),n=[];for(let i of t.selection.ranges){let s=i==t.selection.main;if(i.empty?!s||js:e.drawRangeCursor){let t=tr(this.view,i,s);t&&n.push(t)}}return{rangePieces:i,cursors:n}}drawSel({rangePieces:t,cursors:e}){if(t.length!=this.rangePieces.length||t.some(((t,e)=>!t.eq(this.rangePieces[e])))){this.selectionLayer.textContent=\"\";for(let e of t)this.selectionLayer.appendChild(e.draw());this.rangePieces=t}if(e.length!=this.cursors.length||e.some(((t,e)=>!t.eq(this.cursors[e])))){let t=this.cursorLayer.children;if(t.length!==e.length){this.cursorLayer.textContent=\"\";for(const t of e)this.cursorLayer.appendChild(t.draw())}else e.forEach(((e,i)=>e.adjust(t[i])));this.cursors=e}}destroy(){this.selectionLayer.remove(),this.cursorLayer.remove()}}),Js={\".cm-line\":{\"& ::selection\":{backgroundColor:\"transparent !important\"},\"&::selection\":{backgroundColor:\"transparent !important\"}}};js&&(Js[\".cm-line\"].caretColor=\"transparent !important\");const Ys=Y.highest(Rs.theme(Js));function Xs(t){let e=t.scrollDOM.getBoundingClientRect();return{left:(t.textDirection==Fi.LTR?e.left:e.right-t.scrollDOM.clientWidth)-t.scrollDOM.scrollLeft,top:e.top-t.scrollDOM.scrollTop}}function Qs(t,e,i){let n=B.cursor(e);return{from:Math.max(i.from,t.moveToLineBoundary(n,!1,!0).from),to:Math.min(i.to,t.moveToLineBoundary(n,!0,!0).from),type:ni.Text}}function Zs(t,e){let i=t.lineBlockAt(e);if(Array.isArray(i.type))for(let t of i.type)if(t.to>e||t.to==e&&(t.to==i.to||t.type==ni.Text))return t;return i}function tr(t,e,i){let n=t.coordsAtPos(e.head,e.assoc||1);if(!n)return null;let s=Xs(t);return new Ks(n.left-s.left,n.top-s.top,-1,n.bottom-n.top,i?\"cm-cursor cm-cursor-primary\":\"cm-cursor cm-cursor-secondary\")}function er(){return nr}const ir=si.line({class:\"cm-activeLine\"}),nr=Li.fromClass(class{constructor(t){this.decorations=this.getDeco(t)}update(t){(t.docChanged||t.selectionSet)&&(this.decorations=this.getDeco(t.view))}getDeco(t){let e=-1,i=[];for(let n of t.state.selection.ranges){if(!n.empty)return si.none;let s=t.lineBlockAt(n.head);s.from>e&&(i.push(ir.range(s.from)),e=s.from)}return si.set(i)}},{decorations:t=>t.decorations}),sr=1024;let rr=0;class or{constructor(t,e){this.from=t,this.to=e}}class lr{constructor(t={}){this.id=rr++,this.perNode=!!t.perNode,this.deserialize=t.deserialize||(()=>{throw new Error(\"This node type doesn't define a deserialize function\")})}add(t){if(this.perNode)throw new RangeError(\"Can't add per-node props to node types\");return\"function\"!=typeof t&&(t=ar.match(t)),e=>{let i=t(e);return void 0===i?null:[this,i]}}}lr.closedBy=new lr({deserialize:t=>t.split(\" \")}),lr.openedBy=new lr({deserialize:t=>t.split(\" \")}),lr.group=new lr({deserialize:t=>t.split(\" \")}),lr.contextHash=new lr({perNode:!0}),lr.lookAhead=new lr({perNode:!0}),lr.mounted=new lr({perNode:!0});const hr=Object.create(null);class ar{constructor(t,e,i,n=0){this.name=t,this.props=e,this.id=i,this.flags=n}static define(t){let e=t.props&&t.props.length?Object.create(null):hr,i=(t.top?1:0)|(t.skipped?2:0)|(t.error?4:0)|(null==t.name?8:0),n=new ar(t.name||\"\",e,t.id,i);if(t.props)for(let i of t.props)if(Array.isArray(i)||(i=i(n)),i){if(i[0].perNode)throw new RangeError(\"Can't store a per-node prop on a node type\");e[i[0].id]=i[1]}return n}prop(t){return this.props[t.id]}get isTop(){return(1&this.flags)>0}get isSkipped(){return(2&this.flags)>0}get isError(){return(4&this.flags)>0}get isAnonymous(){return(8&this.flags)>0}is(t){if(\"string\"==typeof t){if(this.name==t)return!0;let e=this.prop(lr.group);return!!e&&e.indexOf(t)>-1}return this.id==t}static match(t){let e=Object.create(null);for(let i in t)for(let n of i.split(\" \"))e[n]=t[i];return t=>{for(let i=t.prop(lr.group),n=-1;n<(i?i.length:0);n++){let s=e[n<0?t.name:i[n]];if(s)return s}}}}ar.none=new ar(\"\",Object.create(null),0,8);class cr{constructor(t){this.types=t;for(let e=0;e<t.length;e++)if(t[e].id!=e)throw new RangeError(\"Node type ids should correspond to array positions when creating a node set\")}extend(...t){let e=[];for(let i of this.types){let n=null;for(let e of t){let t=e(i);t&&(n||(n=Object.assign({},i.props)),n[t[0].id]=t[1])}e.push(n?new ar(i.name,n,i.id,i.flags):i)}return new cr(e)}}const ur=new WeakMap,fr=new WeakMap;class dr{constructor(t,e,i,n,s){if(this.type=t,this.children=e,this.positions=i,this.length=n,this.props=null,s&&s.length){this.props=Object.create(null);for(let[t,e]of s)this.props[\"number\"==typeof t?t:t.id]=e}}toString(){let t=this.prop(lr.mounted);if(t&&!t.overlay)return t.tree.toString();let e=\"\";for(let t of this.children){let i=t.toString();i&&(e&&(e+=\",\"),e+=i)}return this.type.name?(/\\W/.test(this.type.name)&&!this.type.isError?JSON.stringify(this.type.name):this.type.name)+(e.length?\"(\"+e+\")\":\"\"):e}cursor(t,e=0){let i=null!=t&&ur.get(this)||this.topNode,n=new Sr(i);return null!=t&&(n.moveTo(t,e),ur.set(this,n._tree)),n}fullCursor(){return new Sr(this.topNode,1)}get topNode(){return new yr(this,0,0,null)}resolve(t,e=0){let i=wr(ur.get(this)||this.topNode,t,e,!1);return ur.set(this,i),i}resolveInner(t,e=0){let i=wr(fr.get(this)||this.topNode,t,e,!0);return fr.set(this,i),i}iterate(t){let{enter:e,leave:i,from:n=0,to:s=this.length}=t;for(let t=this.cursor(),r=()=>t.node;;){let o=!1;if(t.from<=s&&t.to>=n&&(t.type.isAnonymous||!1!==e(t.type,t.from,t.to,r))){if(t.firstChild())continue;t.type.isAnonymous||(o=!0)}for(;o&&i&&i(t.type,t.from,t.to,r),o=t.type.isAnonymous,!t.nextSibling();){if(!t.parent())return;o=!0}}}prop(t){return t.perNode?this.props?this.props[t.id]:void 0:this.type.prop(t)}get propValues(){let t=[];if(this.props)for(let e in this.props)t.push([+e,this.props[e]]);return t}balance(t={}){return this.children.length<=8?this:Dr(ar.none,this.children,this.positions,0,this.children.length,0,this.length,((t,e,i)=>new dr(this.type,t,e,i,this.propValues)),t.makeTree||((t,e,i)=>new dr(ar.none,t,e,i)))}static build(t){return function(t){var e;let{buffer:i,nodeSet:n,maxBufferLength:s=sr,reused:r=[],minRepeatType:o=n.types.length}=t,l=Array.isArray(i)?new pr(i,i.length):i,h=n.types,a=0,c=0;function u(t,e,i,v,w){let{id:y,start:b,end:x,size:k}=l,S=c;for(;k<0;){if(l.next(),-1==k){let e=r[y];return i.push(e),void v.push(b-t)}if(-3==k)return void(a=y);if(-4==k)return void(c=y);throw new RangeError(`Unrecognized record size: ${k}`)}let A,C,M=h[y],D=b-t;if(x-b<=s&&(C=m(l.pos-e,w))){let e=new Uint16Array(C.size-C.skip),i=l.pos-C.size,s=e.length;for(;l.pos>i;)s=g(C.start,e,s);A=new mr(e,x-C.start,n),D=C.start-t}else{let t=l.pos-k;l.next();let e=[],i=[],n=y>=o?y:-1,r=0,h=x;for(;l.pos>t;)n>=0&&l.id==n&&l.size>=0?(l.end<=h-s&&(d(e,i,b,r,l.end,h,n,S),r=e.length,h=l.end),l.next()):u(b,t,e,i,n);if(n>=0&&r>0&&r<e.length&&d(e,i,b,r,b,h,n,S),e.reverse(),i.reverse(),n>-1&&r>0){let t=f(M);A=Dr(M,e,i,0,e.length,0,x-b,t,t)}else A=p(M,e,i,x-b,S-x)}i.push(A),v.push(D)}function f(t){return(e,i,n)=>{let s,r,o=0,l=e.length-1;if(l>=0&&(s=e[l])instanceof dr){if(!l&&s.type==t&&s.length==n)return s;(r=s.prop(lr.lookAhead))&&(o=i[l]+s.length+r)}return p(t,e,i,n,o)}}function d(t,e,i,s,r,o,l,h){let a=[],c=[];for(;t.length>s;)a.push(t.pop()),c.push(e.pop()+i-r);t.push(p(n.types[l],a,c,o-r,h-o)),e.push(r-i)}function p(t,e,i,n,s=0,r){if(a){let t=[lr.contextHash,a];r=r?[t].concat(r):[t]}if(s>25){let t=[lr.lookAhead,s];r=r?[t].concat(r):[t]}return new dr(t,e,i,n,r)}function m(t,e){let i=l.fork(),n=0,r=0,h=0,a=i.end-s,c={size:0,start:0,skip:0};t:for(let s=i.pos-t;i.pos>s;){let t=i.size;if(i.id==e&&t>=0){c.size=n,c.start=r,c.skip=h,h+=4,n+=4,i.next();continue}let l=i.pos-t;if(t<0||l<s||i.start<a)break;let u=i.id>=o?4:0,f=i.start;for(i.next();i.pos>l;){if(i.size<0){if(-3!=i.size)break t;u+=4}else i.id>=o&&(u+=4);i.next()}r=f,n+=t,h+=u}return(e<0||n==t)&&(c.size=n,c.start=r,c.skip=h),c.size>4?c:void 0}function g(t,e,i){let{id:n,start:s,end:r,size:h}=l;if(l.next(),h>=0&&n<o){let o=i;if(h>4){let n=l.pos-(h-4);for(;l.pos>n;)i=g(t,e,i)}e[--i]=o,e[--i]=r-t,e[--i]=s-t,e[--i]=n}else-3==h?a=n:-4==h&&(c=n);return i}let v=[],w=[];for(;l.pos>0;)u(t.start||0,t.bufferStart||0,v,w,-1);let y=null!==(e=t.length)&&void 0!==e?e:v.length?w[0]+v[0].length:0;return new dr(h[t.topID],v.reverse(),w.reverse(),y)}(t)}}dr.empty=new dr(ar.none,[],[],0);class pr{constructor(t,e){this.buffer=t,this.index=e}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new pr(this.buffer,this.index)}}class mr{constructor(t,e,i){this.buffer=t,this.length=e,this.set=i}get type(){return ar.none}toString(){let t=[];for(let e=0;e<this.buffer.length;)t.push(this.childString(e)),e=this.buffer[e+3];return t.join(\",\")}childString(t){let e=this.buffer[t],i=this.buffer[t+3],n=this.set.types[e],s=n.name;if(/\\W/.test(s)&&!n.isError&&(s=JSON.stringify(s)),i==(t+=4))return s;let r=[];for(;t<i;)r.push(this.childString(t)),t=this.buffer[t+3];return s+\"(\"+r.join(\",\")+\")\"}findChild(t,e,i,n,s){let{buffer:r}=this,o=-1;for(let l=t;l!=e&&!(gr(s,n,r[l+1],r[l+2])&&(o=l,i>0));l=r[l+3]);return o}slice(t,e,i,n){let s=this.buffer,r=new Uint16Array(e-t);for(let n=t,o=0;n<e;)r[o++]=s[n++],r[o++]=s[n++]-i,r[o++]=s[n++]-i,r[o++]=s[n++]-t;return new mr(r,n-i,this.set)}}function gr(t,e,i,n){switch(t){case-2:return i<e;case-1:return n>=e&&i<e;case 0:return i<e&&n>e;case 1:return i<=e&&n>e;case 2:return n>e;case 4:return!0}}function vr(t,e){let i=t.childBefore(e);for(;i;){let e=i.lastChild;if(!e||e.to!=i.to)break;e.type.isError&&e.from==e.to?(t=i,i=e.prevSibling):i=e}return t}function wr(t,e,i,n){for(var s;t.from==t.to||(i<1?t.from>=e:t.from>e)||(i>-1?t.to<=e:t.to<e);){let e=!n&&t instanceof yr&&t.index<0?null:t.parent;if(!e)return t;t=e}if(n)for(let n=t,r=n.parent;r;n=r,r=n.parent)n instanceof yr&&n.index<0&&(null===(s=r.enter(e,i,!0))||void 0===s?void 0:s.from)!=n.from&&(t=r);for(;;){let s=t.enter(e,i,n);if(!s)return t;t=s}}class yr{constructor(t,e,i,n){this.node=t,this._from=e,this.index=i,this._parent=n}get type(){return this.node.type}get name(){return this.node.type.name}get from(){return this._from}get to(){return this._from+this.node.length}nextChild(t,e,i,n,s=0){for(let r=this;;){for(let{children:o,positions:l}=r.node,h=e>0?o.length:-1;t!=h;t+=e){let h=o[t],a=l[t]+r._from;if(gr(n,i,a,a+h.length))if(h instanceof mr){if(2&s)continue;let o=h.findChild(0,h.buffer.length,e,i-a,n);if(o>-1)return new kr(new xr(r,h,t,a),null,o)}else if(1&s||!h.type.isAnonymous||Ar(h)){let o;if(!(1&s)&&h.props&&(o=h.prop(lr.mounted))&&!o.overlay)return new yr(o.tree,a,t,r);let l=new yr(h,a,t,r);return 1&s||!l.type.isAnonymous?l:l.nextChild(e<0?h.children.length-1:0,e,i,n)}}if(1&s||!r.type.isAnonymous)return null;if(t=r.index>=0?r.index+e:e<0?-1:r._parent.node.children.length,r=r._parent,!r)return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this.node.children.length-1,-1,0,4)}childAfter(t){return this.nextChild(0,1,t,2)}childBefore(t){return this.nextChild(this.node.children.length-1,-1,t,-2)}enter(t,e,i=!0,n=!0){let s;if(i&&(s=this.node.prop(lr.mounted))&&s.overlay){let i=t-this.from;for(let{from:t,to:n}of s.overlay)if((e>0?t<=i:t<i)&&(e<0?n>=i:n>i))return new yr(s.tree,s.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,t,e,n?0:2)}nextSignificantParent(){let t=this;for(;t.type.isAnonymous&&t._parent;)t=t._parent;return t}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get cursor(){return new Sr(this)}get tree(){return this.node}toTree(){return this.node}resolve(t,e=0){return wr(this,t,e,!1)}resolveInner(t,e=0){return wr(this,t,e,!0)}enterUnfinishedNodesBefore(t){return vr(this,t)}getChild(t,e=null,i=null){let n=br(this,t,e,i);return n.length?n[0]:null}getChildren(t,e=null,i=null){return br(this,t,e,i)}toString(){return this.node.toString()}}function br(t,e,i,n){let s=t.cursor,r=[];if(!s.firstChild())return r;if(null!=i)for(;!s.type.is(i);)if(!s.nextSibling())return r;for(;;){if(null!=n&&s.type.is(n))return r;if(s.type.is(e)&&r.push(s.node),!s.nextSibling())return null==n?r:[]}}class xr{constructor(t,e,i,n){this.parent=t,this.buffer=e,this.index=i,this.start=n}}class kr{constructor(t,e,i){this.context=t,this._parent=e,this.index=i,this.type=t.buffer.set.types[t.buffer.buffer[i]]}get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}child(t,e,i){let{buffer:n}=this.context,s=n.findChild(this.index+4,n.buffer[this.index+3],t,e-this.context.start,i);return s<0?null:new kr(this.context,this,s)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(t){return this.child(1,t,2)}childBefore(t){return this.child(-1,t,-2)}enter(t,e,i,n=!0){if(!n)return null;let{buffer:s}=this.context,r=s.findChild(this.index+4,s.buffer[this.index+3],e>0?1:-1,t-this.context.start,e);return r<0?null:new kr(this.context,this,r)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(t){return this._parent?null:this.context.parent.nextChild(this.context.index+t,t,0,4)}get nextSibling(){let{buffer:t}=this.context,e=t.buffer[this.index+3];return e<(this._parent?t.buffer[this._parent.index+3]:t.buffer.length)?new kr(this.context,this._parent,e):this.externalSibling(1)}get prevSibling(){let{buffer:t}=this.context,e=this._parent?this._parent.index+4:0;return this.index==e?this.externalSibling(-1):new kr(this.context,this._parent,t.findChild(e,this.index,-1,0,4))}get cursor(){return new Sr(this)}get tree(){return null}toTree(){let t=[],e=[],{buffer:i}=this.context,n=this.index+4,s=i.buffer[this.index+3];if(s>n){let r=i.buffer[this.index+1],o=i.buffer[this.index+2];t.push(i.slice(n,s,r,o)),e.push(0)}return new dr(this.type,t,e,this.to-this.from)}resolve(t,e=0){return wr(this,t,e,!1)}resolveInner(t,e=0){return wr(this,t,e,!0)}enterUnfinishedNodesBefore(t){return vr(this,t)}toString(){return this.context.buffer.childString(this.index)}getChild(t,e=null,i=null){let n=br(this,t,e,i);return n.length?n[0]:null}getChildren(t,e=null,i=null){return br(this,t,e,i)}}class Sr{constructor(t,e=0){if(this.mode=e,this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,t instanceof yr)this.yieldNode(t);else{this._tree=t.context.parent,this.buffer=t.context;for(let e=t._parent;e;e=e._parent)this.stack.unshift(e.index);this.bufferNode=t,this.yieldBuf(t.index)}}get name(){return this.type.name}yieldNode(t){return!!t&&(this._tree=t,this.type=t.type,this.from=t.from,this.to=t.to,!0)}yieldBuf(t,e){this.index=t;let{start:i,buffer:n}=this.buffer;return this.type=e||n.set.types[n.buffer[t]],this.from=i+n.buffer[t+1],this.to=i+n.buffer[t+2],!0}yield(t){return!!t&&(t instanceof yr?(this.buffer=null,this.yieldNode(t)):(this.buffer=t.context,this.yieldBuf(t.index,t.type)))}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(t,e,i){if(!this.buffer)return this.yield(this._tree.nextChild(t<0?this._tree.node.children.length-1:0,t,e,i,this.mode));let{buffer:n}=this.buffer,s=n.findChild(this.index+4,n.buffer[this.index+3],t,e-this.buffer.start,i);return!(s<0)&&(this.stack.push(this.index),this.yieldBuf(s))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(t){return this.enterChild(1,t,2)}childBefore(t){return this.enterChild(-1,t,-2)}enter(t,e,i=!0,n=!0){return this.buffer?!!n&&this.enterChild(1,t,e):this.yield(this._tree.enter(t,e,i&&!(1&this.mode),n))}parent(){if(!this.buffer)return this.yieldNode(1&this.mode?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let t=1&this.mode?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(t)}sibling(t){if(!this.buffer)return!!this._tree._parent&&this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+t,t,0,4,this.mode));let{buffer:e}=this.buffer,i=this.stack.length-1;if(t<0){let t=i<0?0:this.stack[i]+4;if(this.index!=t)return this.yieldBuf(e.findChild(t,this.index,-1,0,4))}else{let t=e.buffer[this.index+3];if(t<(i<0?e.buffer.length:e.buffer[this.stack[i]+3]))return this.yieldBuf(t)}return i<0&&this.yield(this.buffer.parent.nextChild(this.buffer.index+t,t,0,4,this.mode))}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(t){let e,i,{buffer:n}=this;if(n){if(t>0){if(this.index<n.buffer.buffer.length)return!1}else for(let t=0;t<this.index;t++)if(n.buffer.buffer[t+3]<this.index)return!1;({index:e,parent:i}=n)}else({index:e,_parent:i}=this._tree);for(;i;({index:e,_parent:i}=i))if(e>-1)for(let n=e+t,s=t<0?-1:i.node.children.length;n!=s;n+=t){let t=i.node.children[n];if(1&this.mode||t instanceof mr||!t.type.isAnonymous||Ar(t))return!1}return!0}move(t,e){if(e&&this.enterChild(t,0,4))return!0;for(;;){if(this.sibling(t))return!0;if(this.atLastNode(t)||!this.parent())return!1}}next(t=!0){return this.move(1,t)}prev(t=!0){return this.move(-1,t)}moveTo(t,e=0){for(;(this.from==this.to||(e<1?this.from>=t:this.from>t)||(e>-1?this.to<=t:this.to<t))&&this.parent(););for(;this.enterChild(1,t,e););return this}get node(){if(!this.buffer)return this._tree;let t=this.bufferNode,e=null,i=0;if(t&&t.context==this.buffer)t:for(let n=this.index,s=this.stack.length;s>=0;){for(let r=t;r;r=r._parent)if(r.index==n){if(n==this.index)return r;e=r,i=s+1;break t}n=this.stack[--s]}for(let t=i;t<this.stack.length;t++)e=new kr(this.buffer,e,this.stack[t]);return this.bufferNode=new kr(this.buffer,e,this.index)}get tree(){return this.buffer?null:this._tree.node}}function Ar(t){return t.children.some((t=>t instanceof mr||!t.type.isAnonymous||Ar(t)))}const Cr=new WeakMap;function Mr(t,e){if(!t.isAnonymous||e instanceof mr||e.type!=t)return 1;let i=Cr.get(e);if(null==i){i=1;for(let n of e.children){if(n.type!=t||!(n instanceof dr)){i=1;break}i+=Mr(t,n)}Cr.set(e,i)}return i}function Dr(t,e,i,n,s,r,o,l,h){let a=0;for(let i=n;i<s;i++)a+=Mr(t,e[i]);let c=Math.ceil(1.5*a/8),u=[],f=[];return function e(i,n,s,o,l){for(let a=s;a<o;){let s=a,d=n[a],p=Mr(t,i[a]);for(a++;a<o;a++){let e=Mr(t,i[a]);if(p+e>=c)break;p+=e}if(a==s+1){if(p>c){let t=i[s];e(t.children,t.positions,0,t.children.length,n[s]+l);continue}u.push(i[s])}else{let e=n[a-1]+i[a-1].length-d;u.push(Dr(t,i,n,s,a,d,e,null,h))}f.push(d+l-r)}}(e,i,n,s,0),(l||h)(u,f,o)}class Or{constructor(t,e,i,n,s=!1,r=!1){this.from=t,this.to=e,this.tree=i,this.offset=n,this.open=(s?1:0)|(r?2:0)}get openStart(){return(1&this.open)>0}get openEnd(){return(2&this.open)>0}static addTree(t,e=[],i=!1){let n=[new Or(0,t.length,t,0,!1,i)];for(let i of e)i.to>t.length&&n.push(i);return n}static applyChanges(t,e,i=128){if(!e.length)return t;let n=[],s=1,r=t.length?t[0]:null;for(let o=0,l=0,h=0;;o++){let a=o<e.length?e[o]:null,c=a?a.fromA:1e9;if(c-l>=i)for(;r&&r.from<c;){let e=r;if(l>=e.from||c<=e.to||h){let t=Math.max(e.from,l)-h,i=Math.min(e.to,c)-h;e=t>=i?null:new Or(t,i,e.tree,e.offset+h,o>0,!!a)}if(e&&n.push(e),r.to>c)break;r=s<t.length?t[s++]:null}if(!a)break;l=a.toA,h=a.toA-a.toB}return n}}class Tr{startParse(t,e,i){return\"string\"==typeof t&&(t=new Rr(t)),i=i?i.length?i.map((t=>new or(t.from,t.to))):[new or(0,0)]:[new or(0,t.length)],this.createParse(t,e||[],i)}parse(t,e,i){let n=this.startParse(t,e,i);for(;;){let t=n.advance();if(t)return t}}}class Rr{constructor(t){this.string=t}get length(){return this.string.length}chunk(t){return this.string.slice(t)}get lineChunks(){return!1}read(t,e){return this.string.slice(t,e)}}var Er;new lr({perNode:!0});const Lr=new lr;class Br{constructor(t,e,i,n=[]){this.data=t,this.topNode=i,Ct.prototype.hasOwnProperty(\"tree\")||Object.defineProperty(Ct.prototype,\"tree\",{get(){return Nr(this)}}),this.parser=e,this.extension=[jr.of(this),Ct.languageData.of(((t,e,i)=>t.facet(Pr(t,e,i))))].concat(n)}isActiveAt(t,e,i=-1){return Pr(t,e,i)==this.data}findRegions(t){let e=t.facet(jr);if((null==e?void 0:e.data)==this.data)return[{from:0,to:t.doc.length}];if(!e||!e.allowsNesting)return[];let i=[],n=(t,e)=>{if(t.prop(Lr)==this.data)return void i.push({from:e,to:e+t.length});let s=t.prop(lr.mounted);if(s){if(s.tree.prop(Lr)==this.data){if(s.overlay)for(let t of s.overlay)i.push({from:t.from+e,to:t.to+e});else i.push({from:e,to:e+t.length});return}if(s.overlay){let t=i.length;if(n(s.tree,s.overlay[0].from+e),i.length>t)return}}for(let i=0;i<t.children.length;i++){let s=t.children[i];s instanceof dr&&n(s,t.positions[i]+e)}};return n(Nr(t),0),i}get allowsNesting(){return!0}}function Pr(t,e,i){let n=t.facet(jr);if(!n)return null;let s=n.data;if(n.allowsNesting)for(let n=Nr(t).topNode;n;n=n.enter(e,i,!0,!1))s=n.type.prop(Lr)||s;return s}function Nr(t){let e=t.field(Br.state,!1);return e?e.tree:dr.empty}Br.setState=dt.define();class Ir{constructor(t,e=t.length){this.doc=t,this.length=e,this.cursorPos=0,this.string=\"\",this.cursor=t.iter()}syncTo(t){return this.string=this.cursor.next(t-this.cursorPos).value,this.cursorPos=t+this.string.length,this.cursorPos-this.string.length}chunk(t){return this.syncTo(t),this.string}get lineChunks(){return!0}read(t,e){let i=this.cursorPos-this.string.length;return t<i||e>=this.cursorPos?this.doc.sliceString(t,e):this.string.slice(t-i,e-i)}}let Vr=null;class Hr{constructor(t,e,i=[],n,s,r,o,l){this.parser=t,this.state=e,this.fragments=i,this.tree=n,this.treeLen=s,this.viewport=r,this.skipped=o,this.scheduleOn=l,this.parse=null,this.tempSkipped=[]}startParse(){return this.parser.startParse(new Ir(this.state.doc),this.fragments)}work(t,e){return null!=e&&e>=this.state.doc.length&&(e=void 0),this.tree!=dr.empty&&this.isDone(null!=e?e:this.state.doc.length)?(this.takeTree(),!0):this.withContext((()=>{var i;if(\"number\"==typeof t){let e=Date.now()+t;t=()=>Date.now()>e}for(this.parse||(this.parse=this.startParse()),null!=e&&(null==this.parse.stoppedAt||this.parse.stoppedAt>e)&&e<this.state.doc.length&&this.parse.stopAt(e);;){let n=this.parse.advance();if(n){if(this.fragments=this.withoutTempSkipped(Or.addTree(n,this.fragments,null!=this.parse.stoppedAt)),this.treeLen=null!==(i=this.parse.stoppedAt)&&void 0!==i?i:this.state.doc.length,this.tree=n,this.parse=null,!(this.treeLen<(null!=e?e:this.state.doc.length)))return!0;this.parse=this.startParse()}if(t())return!1}}))}takeTree(){let t,e;this.parse&&(t=this.parse.parsedPos)>=this.treeLen&&((null==this.parse.stoppedAt||this.parse.stoppedAt>t)&&this.parse.stopAt(t),this.withContext((()=>{for(;!(e=this.parse.advance()););})),this.treeLen=t,this.tree=e,this.fragments=this.withoutTempSkipped(Or.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(t){let e=Vr;Vr=this;try{return t()}finally{Vr=e}}withoutTempSkipped(t){for(let e;e=this.tempSkipped.pop();)t=Wr(t,e.from,e.to);return t}changes(t,e){let{fragments:i,tree:n,treeLen:s,viewport:r,skipped:o}=this;if(this.takeTree(),!t.empty){let e=[];if(t.iterChangedRanges(((t,i,n,s)=>e.push({fromA:t,toA:i,fromB:n,toB:s}))),i=Or.applyChanges(i,e),n=dr.empty,s=0,r={from:t.mapPos(r.from,-1),to:t.mapPos(r.to,1)},this.skipped.length){o=[];for(let e of this.skipped){let i=t.mapPos(e.from,1),n=t.mapPos(e.to,-1);i<n&&o.push({from:i,to:n})}}}return new Hr(this.parser,e,i,n,s,r,o,this.scheduleOn)}updateViewport(t){if(this.viewport.from==t.from&&this.viewport.to==t.to)return!1;this.viewport=t;let e=this.skipped.length;for(let e=0;e<this.skipped.length;e++){let{from:i,to:n}=this.skipped[e];i<t.to&&n>t.from&&(this.fragments=Wr(this.fragments,i,n),this.skipped.splice(e--,1))}return!(this.skipped.length>=e)&&(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(t,e){this.skipped.push({from:t,to:e})}static getSkippingParser(t){return new class extends Tr{createParse(e,i,n){let s=n[0].from,r=n[n.length-1].to;return{parsedPos:s,advance(){let e=Vr;if(e){for(let t of n)e.tempSkipped.push(t);t&&(e.scheduleOn=e.scheduleOn?Promise.all([e.scheduleOn,t]):t)}return this.parsedPos=r,new dr(ar.none,[],[],r-s)},stoppedAt:null,stopAt(){}}}}}isDone(t){t=Math.min(t,this.state.doc.length);let e=this.fragments;return this.treeLen>=t&&e.length&&0==e[0].from&&e[0].to>=t}static get(){return Vr}}function Wr(t,e,i){return Or.applyChanges(t,[{fromA:e,toA:i,fromB:e,toB:i}])}class zr{constructor(t){this.context=t,this.tree=t.tree}apply(t){if(!t.docChanged&&this.tree==this.context.tree)return this;let e=this.context.changes(t.changes,t.state),i=this.context.treeLen==t.startState.doc.length?void 0:Math.max(t.changes.mapPos(this.context.treeLen),e.viewport.to);return e.work(20,i)||e.takeTree(),new zr(e)}static init(t){let e=Math.min(3e3,t.doc.length),i=new Hr(t.facet(jr).parser,t,[],dr.empty,0,{from:0,to:e},[],null);return i.work(20,e)||i.takeTree(),new zr(i)}}Br.state=_.define({create:zr.init,update(t,e){for(let t of e.effects)if(t.is(Br.setState))return t.value;return e.startState.facet(jr)!=e.state.facet(jr)?zr.init(e.state):t.apply(e)}});let Fr=t=>{let e=setTimeout((()=>t()),500);return()=>clearTimeout(e)};\"undefined\"!=typeof requestIdleCallback&&(Fr=t=>{let e=-1,i=setTimeout((()=>{e=requestIdleCallback(t,{timeout:400})}),100);return()=>e<0?clearTimeout(i):cancelIdleCallback(e)});const qr=\"undefined\"!=typeof navigator&&(null===(Er=navigator.scheduling)||void 0===Er?void 0:Er.isInputPending)?()=>navigator.scheduling.isInputPending():null,_r=Li.fromClass(class{constructor(t){this.view=t,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(t){let e=this.view.state.field(Br.state).context;(e.updateViewport(t.view.viewport)||this.view.viewport.to>e.treeLen)&&this.scheduleWork(),t.docChanged&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(e)}scheduleWork(){if(this.working)return;let{state:t}=this.view,e=t.field(Br.state);e.tree==e.context.tree&&e.context.isDone(t.doc.length)||(this.working=Fr(this.work))}work(t){this.working=null;let e=Date.now();if(this.chunkEnd<e&&(this.chunkEnd<0||this.view.hasFocus)&&(this.chunkEnd=e+3e4,this.chunkBudget=3e3),this.chunkBudget<=0)return;let{state:i,viewport:{to:n}}=this.view,s=i.field(Br.state);if(s.tree==s.context.tree&&s.context.isDone(n+1e5))return;let r=Date.now()+Math.min(this.chunkBudget,100,t&&!qr?Math.max(25,t.timeRemaining()-5):1e9),o=s.context.treeLen<n&&i.doc.length>n+1e3,l=s.context.work((()=>qr&&qr()||Date.now()>r),n+(o?0:1e5));this.chunkBudget-=Date.now()-e,(l||this.chunkBudget<=0)&&(s.context.takeTree(),this.view.dispatch({effects:Br.setState.of(new zr(s.context))})),this.chunkBudget>0&&(!l||o)&&this.scheduleWork(),this.checkAsyncSchedule(s.context)}checkAsyncSchedule(t){t.scheduleOn&&(this.workScheduled++,t.scheduleOn.then((()=>this.scheduleWork())).catch((t=>Mi(this.view.state,t))).then((()=>this.workScheduled--)),t.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),jr=V.define({combine:t=>t.length?t[0]:null,enables:[Br.state,_r]}),Ur=V.define(),$r=V.define({combine:t=>{if(!t.length)return\"  \";if(!/^(?: +|\\t+)$/.test(t[0]))throw new Error(\"Invalid indent unit: \"+JSON.stringify(t[0]));return t[0]}});function Kr(t){let e=t.facet($r);return 9==e.charCodeAt(0)?t.tabSize*e.length:e.length}function Gr(t,e){let i=\"\",n=t.tabSize;if(9==t.facet($r).charCodeAt(0))for(;e>=n;)i+=\"\\t\",e-=n;for(let t=0;t<e;t++)i+=\" \";return i}function Jr(t,e){t instanceof Ct&&(t=new Yr(t));for(let i of t.state.facet(Ur)){let n=i(t,e);if(null!=n)return n}let i=Nr(t.state);return i?function(t,e,i){return Zr(e.resolveInner(i).enterUnfinishedNodesBefore(i),i,t)}(t,i,e):null}class Yr{constructor(t,e={}){this.state=t,this.options=e,this.unit=Kr(t)}lineAt(t,e=1){let i=this.state.doc.lineAt(t),{simulateBreak:n,simulateDoubleBreak:s}=this.options;return null!=n&&n>=i.from&&n<=i.to?s&&n==t?{text:\"\",from:t}:(e<0?n<t:n<=t)?{text:i.text.slice(n-i.from),from:n}:{text:i.text.slice(0,n-i.from),from:i.from}:i}textAfterPos(t,e=1){if(this.options.simulateDoubleBreak&&t==this.options.simulateBreak)return\"\";let{text:i,from:n}=this.lineAt(t,e);return i.slice(t-n,Math.min(i.length,t+100-n))}column(t,e=1){let{text:i,from:n}=this.lineAt(t,e),s=this.countColumn(i,t-n),r=this.options.overrideIndentation?this.options.overrideIndentation(n):-1;return r>-1&&(s+=r-this.countColumn(i,i.search(/\\S|$/))),s}countColumn(t,e=t.length){return u(t,this.state.tabSize,e)}lineIndent(t,e=1){let{text:i,from:n}=this.lineAt(t,e),s=this.options.overrideIndentation;if(s){let t=s(n);if(t>-1)return t}return this.countColumn(i,i.search(/\\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}}const Xr=new lr;function Qr(t){let e=t.type.prop(Xr);if(e)return e;let i,n=t.firstChild;if(n&&(i=n.type.prop(lr.closedBy))){let e=t.lastChild,n=e&&i.indexOf(e.name)>-1;return t=>function(t,e,i,n,s){let r=t.textAfter,o=r.match(/^\\s*/)[0].length,l=n&&r.slice(o,o+n.length)==n||s==t.pos+o,h=e?function(t){let e=t.node,i=e.childAfter(e.from),n=e.lastChild;if(!i)return null;let s=t.options.simulateBreak,r=t.state.doc.lineAt(i.from),o=null==s||s<=r.from?r.to:Math.min(r.to,s);for(let t=i.to;;){let s=e.childAfter(t);if(!s||s==n)return null;if(!s.type.isSkipped)return s.from<o?i:null;t=s.to}}(t):null;return h?l?t.column(h.from):t.column(h.to):t.baseIndent+(l?0:t.unit*i)}(t,!0,1,void 0,n&&!function(t){return t.pos==t.options.simulateBreak&&t.options.simulateDoubleBreak}(t)?e.from:void 0)}return null==t.parent?to:null}function Zr(t,e,i){for(;t;t=t.parent){let n=Qr(t);if(n)return n(new eo(i,e,t))}return null}function to(){return 0}class eo extends Yr{constructor(t,e,i){super(t.state,t.options),this.base=t,this.pos=e,this.node=i}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){let t=this.state.doc.lineAt(this.node.from);for(;;){let e=this.node.resolve(t.from);for(;e.parent&&e.parent.from==e.from;)e=e.parent;if(io(e,this.node))break;t=this.state.doc.lineAt(e.from)}return this.lineIndent(t.from)}continue(){let t=this.node.parent;return t?Zr(t,this.pos,this.base):0}}function io(t,e){for(let i=e;i;i=i.parent)if(t==i)return!0;return!1}function no(t,e,i){let n=t.prop(e<0?lr.openedBy:lr.closedBy);if(n)return n;if(1==t.name.length){let n=i.indexOf(t.name);if(n>-1&&n%2==(e<0?1:0))return[i[n+e]]}return null}function so(t,e,i,n={}){let s=n.maxScanDistance||1e4,r=n.brackets||\"()[]{}\",o=Nr(t),l=o.resolveInner(e,i);for(let n=l;n;n=n.parent){let s=no(n.type,i,r);if(s&&n.from<n.to)return ro(t,e,i,n,s,r)}return function(t,e,i,n,s,r,o){let l=i<0?t.sliceDoc(e-1,e):t.sliceDoc(e,e+1),h=o.indexOf(l);if(h<0||h%2==0!=i>0)return null;let a={from:i<0?e-1:e,to:i>0?e+1:e},c=t.doc.iterRange(e,i>0?t.doc.length:0),u=0;for(let t=0;!c.next().done&&t<=r;){let r=c.value;i<0&&(t+=r.length);let l=e+t*i;for(let t=i>0?0:r.length-1,e=i>0?r.length:-1;t!=e;t+=i){let e=o.indexOf(r[t]);if(!(e<0||n.resolve(l+t,1).type!=s))if(e%2==0==i>0)u++;else{if(1==u)return{start:a,end:{from:l+t,to:l+t+1},matched:e>>1==h>>1};u--}}i>0&&(t+=r.length)}return c.done?{start:a,matched:!1}:null}(t,e,i,o,l.type,s,r)}function ro(t,e,i,n,s,r){let o=n.parent,l={from:n.from,to:n.to},h=0,a=null==o?void 0:o.cursor;if(a&&(i<0?a.childBefore(n.from):a.childAfter(n.to)))do{if(i<0?a.to<=n.from:a.from>=n.to){if(0==h&&s.indexOf(a.type.name)>-1&&a.from<a.to)return{start:l,end:{from:a.from,to:a.to},matched:!0};if(no(a.type,i,r))h++;else if(no(a.type,-i,r)&&(h--,0==h))return{start:l,end:a.from==a.to?void 0:{from:a.from,to:a.to},matched:!1}}}while(i<0?a.prevSibling():a.nextSibling());return{start:l,matched:!1}}function oo(t,e){return B.create(t.ranges.map(e),t.mainIndex)}function lo(t,e){return t.update({selection:e,scrollIntoView:!0,userEvent:\"select\"})}function ho({state:t,dispatch:e},i){let n=oo(t.selection,i);return!n.eq(t.selection)&&(e(lo(t,n)),!0)}function ao(t,e){return B.cursor(e?t.to:t.from)}function co(t,e){return ho(t,(i=>i.empty?t.moveByChar(i,e):ao(i,e)))}const uo=t=>co(t,t.textDirection!=Fi.LTR),fo=t=>co(t,t.textDirection==Fi.LTR);function po(t,e){return ho(t,(i=>i.empty?t.moveByGroup(i,e):ao(i,e)))}function mo(t,e,i){if(e.type.prop(i))return!0;let n=e.to-e.from;return n&&(n>2||/[^\\s,.;:]/.test(t.sliceDoc(e.from,e.to)))||e.firstChild}function go(t,e,i){let n,s,r=Nr(t).resolveInner(e.head),o=i?lr.closedBy:lr.openedBy;for(let n=e.head;;){let e=i?r.childAfter(n):r.childBefore(n);if(!e)break;mo(t,e,o)?r=e:n=i?e.to:e.from}return s=r.type.prop(o)&&(n=i?so(t,r.from,1):so(t,r.to,-1))&&n.matched?i?n.end.to:n.end.from:i?r.to:r.from,B.cursor(s,i?-1:1)}function vo(t,e){return ho(t,(i=>{if(!i.empty)return ao(i,e);let n=t.moveVertically(i,e);return n.head!=i.head?n:t.moveToLineBoundary(i,e)}))}const wo=t=>vo(t,!1),yo=t=>vo(t,!0);function bo(t,e){let{state:i}=t,n=oo(i.selection,(i=>i.empty?t.moveVertically(i,e,t.dom.clientHeight):ao(i,e)));if(n.eq(i.selection))return!1;let s=t.coordsAtPos(i.selection.main.head),r=t.scrollDOM.getBoundingClientRect();return t.dispatch(lo(i,n),{effects:s&&s.top>r.top&&s.bottom<r.bottom?Rs.scrollIntoView(n.main.head,{y:\"start\",yMargin:s.top-r.top}):void 0}),!0}const xo=t=>bo(t,!1),ko=t=>bo(t,!0);function So(t,e,i){let n=t.lineBlockAt(e.head),s=t.moveToLineBoundary(e,i);if(s.head==e.head&&s.head!=(i?n.to:n.from)&&(s=t.moveToLineBoundary(e,i,!1)),!i&&s.head==n.from&&n.length){let i=/^\\s*/.exec(t.state.sliceDoc(n.from,Math.min(n.from+100,n.to)))[0].length;i&&e.head!=n.from+i&&(s=B.cursor(n.from+i))}return s}const Ao=t=>ho(t,(e=>So(t,e,!0))),Co=t=>ho(t,(e=>So(t,e,!1)));function Mo(t,e){let i=oo(t.state.selection,(t=>{let i=e(t);return B.range(t.anchor,i.head,i.goalColumn)}));return!i.eq(t.state.selection)&&(t.dispatch(lo(t.state,i)),!0)}function Do(t,e){return Mo(t,(i=>t.moveByChar(i,e)))}const Oo=t=>Do(t,t.textDirection!=Fi.LTR),To=t=>Do(t,t.textDirection==Fi.LTR);function Ro(t,e){return Mo(t,(i=>t.moveByGroup(i,e)))}function Eo(t,e){return Mo(t,(i=>t.moveVertically(i,e)))}const Lo=t=>Eo(t,!1),Bo=t=>Eo(t,!0);function Po(t,e){return Mo(t,(i=>t.moveVertically(i,e,t.dom.clientHeight)))}const No=t=>Po(t,!1),Io=t=>Po(t,!0),Vo=t=>Mo(t,(e=>So(t,e,!0))),Ho=t=>Mo(t,(e=>So(t,e,!1))),Wo=({state:t,dispatch:e})=>(e(lo(t,{anchor:0})),!0),zo=({state:t,dispatch:e})=>(e(lo(t,{anchor:t.doc.length})),!0),Fo=({state:t,dispatch:e})=>(e(lo(t,{anchor:t.selection.main.anchor,head:0})),!0),qo=({state:t,dispatch:e})=>(e(lo(t,{anchor:t.selection.main.anchor,head:t.doc.length})),!0);function _o({state:t,dispatch:e},i){if(t.readOnly)return!1;let n=\"delete.selection\",s=t.changeByRange((t=>{let{from:e,to:s}=t;if(e==s){let t=i(e);t<e?n=\"delete.backward\":t>e&&(n=\"delete.forward\"),e=Math.min(e,t),s=Math.max(s,t)}return e==s?{range:t}:{changes:{from:e,to:s},range:B.cursor(e)}}));return!s.changes.empty&&(e(t.update(s,{scrollIntoView:!0,userEvent:n})),!0)}function jo(t,e,i){if(t instanceof Rs)for(let n of t.pluginField(Ti.atomicRanges))n.between(e,e,((t,n)=>{t<e&&n>e&&(e=i?n:t)}));return e}const Uo=(t,e)=>_o(t,(i=>{let s,r,{state:o}=t,l=o.doc.lineAt(i);if(!e&&i>l.from&&i<l.from+200&&!/[^ \\t]/.test(s=l.text.slice(0,i-l.from))){if(\"\\t\"==s[s.length-1])return i-1;let t=u(s,o.tabSize)%Kr(o)||Kr(o);for(let e=0;e<t&&\" \"==s[s.length-1-e];e++)i--;r=i}else r=n(l.text,i-l.from,e,e)+l.from,r==i&&l.number!=(e?o.doc.lines:1)&&(r+=e?1:-1);return jo(t,r,e)})),$o=t=>Uo(t,!1),Ko=t=>Uo(t,!0),Go=(t,e)=>_o(t,(i=>{let s=i,{state:r}=t,o=r.doc.lineAt(s),l=r.charCategorizer(s);for(let t=null;;){if(s==(e?o.to:o.from)){s==i&&o.number!=(e?r.doc.lines:1)&&(s+=e?1:-1);break}let h=n(o.text,s-o.from,e)+o.from,a=o.text.slice(Math.min(s,h)-o.from,Math.max(s,h)-o.from),c=l(a);if(null!=t&&c!=t)break;\" \"==a&&s==i||(t=c),s=h}return jo(t,s,e)})),Jo=t=>Go(t,!1),Yo=t=>_o(t,(e=>{let i=t.lineBlockAt(e).to;return jo(t,e<i?i:Math.min(t.state.doc.length,e+1),!0)}));function Xo(t){let e=[],i=-1;for(let n of t.selection.ranges){let s=t.doc.lineAt(n.from),r=t.doc.lineAt(n.to);if(n.empty||n.to!=r.from||(r=t.doc.lineAt(n.to-1)),i>=s.number){let t=e[e.length-1];t.to=r.to,t.ranges.push(n)}else e.push({from:s.from,to:r.to,ranges:[n]});i=r.number+1}return e}function Qo(t,e,i){if(t.readOnly)return!1;let n=[],s=[];for(let e of Xo(t)){if(i?e.to==t.doc.length:0==e.from)continue;let r=t.doc.lineAt(i?e.to+1:e.from-1),o=r.length+1;if(i){n.push({from:e.to,to:r.to},{from:e.from,insert:r.text+t.lineBreak});for(let i of e.ranges)s.push(B.range(Math.min(t.doc.length,i.anchor+o),Math.min(t.doc.length,i.head+o)))}else{n.push({from:r.from,to:e.from},{from:e.to,insert:t.lineBreak+r.text});for(let t of e.ranges)s.push(B.range(t.anchor-o,t.head-o))}}return!!n.length&&(e(t.update({changes:n,scrollIntoView:!0,selection:B.create(s,t.selection.mainIndex),userEvent:\"move.line\"})),!0)}function Zo(t,e,i){if(t.readOnly)return!1;let n=[];for(let e of Xo(t))i?n.push({from:e.from,insert:t.doc.slice(e.from,e.to)+t.lineBreak}):n.push({from:e.to,insert:t.lineBreak+t.doc.slice(e.from,e.to)});return e(t.update({changes:n,scrollIntoView:!0,userEvent:\"input.copyline\"})),!0}const tl=el(!1);function el(t){return({state:e,dispatch:i})=>{if(e.readOnly)return!1;let n=e.changeByRange((i=>{let{from:n,to:s}=i,r=e.doc.lineAt(n),o=!t&&n==s&&function(t,e){if(/\\(\\)|\\[\\]|\\{\\}/.test(t.sliceDoc(e-1,e+1)))return{from:e,to:e};let i,n=Nr(t).resolveInner(e),s=n.childBefore(e),r=n.childAfter(e);return s&&r&&s.to<=e&&r.from>=e&&(i=s.type.prop(lr.closedBy))&&i.indexOf(r.name)>-1&&t.doc.lineAt(s.to).from==t.doc.lineAt(r.from).from?{from:s.to,to:r.from}:null}(e,n);t&&(n=s=(s<=r.to?r:e.doc.lineAt(s)).to);let l=new Yr(e,{simulateBreak:n,simulateDoubleBreak:!!o}),h=Jr(l,n);for(null==h&&(h=/^\\s*/.exec(e.doc.lineAt(n).text)[0].length);s<r.to&&/\\s/.test(r.text[s-r.from]);)s++;o?({from:n,to:s}=o):n>r.from&&n<r.from+100&&!/\\S/.test(r.text.slice(0,n))&&(n=r.from);let a=[\"\",Gr(e,h)];return o&&a.push(Gr(e,l.lineIndent(r.from,-1))),{changes:{from:n,to:s,insert:d.of(a)},range:B.cursor(n+1+a[1].length)}}));return i(e.update(n,{scrollIntoView:!0,userEvent:\"input\"})),!0}}function il(t,e){let i=-1;return t.changeByRange((n=>{let s=[];for(let r=n.from;r<=n.to;){let o=t.doc.lineAt(r);o.number>i&&(n.empty||n.to>o.from)&&(e(o,s,n),i=o.number),r=o.to+1}let r=t.changes(s);return{changes:s,range:B.range(r.mapPos(n.anchor,1),r.mapPos(n.head,1))}}))}const nl=({state:t,dispatch:e})=>!t.readOnly&&(e(t.update(il(t,((e,i)=>{i.push({from:e.from,insert:t.facet($r)})})),{userEvent:\"input.indent\"})),!0),sl=({state:t,dispatch:e})=>!t.readOnly&&(e(t.update(il(t,((e,i)=>{let n=/^\\s*/.exec(e.text)[0];if(!n)return;let s=u(n,t.tabSize),r=0,o=Gr(t,Math.max(0,s-Kr(t)));for(;r<n.length&&r<o.length&&n.charCodeAt(r)==o.charCodeAt(r);)r++;i.push({from:e.from+r,to:e.from+n.length,insert:o.slice(r)})})),{userEvent:\"delete.dedent\"})),!0),rl=[{key:\"Alt-ArrowLeft\",mac:\"Ctrl-ArrowLeft\",run:t=>ho(t,(e=>go(t.state,e,t.textDirection!=Fi.LTR))),shift:t=>Mo(t,(e=>go(t.state,e,t.textDirection!=Fi.LTR)))},{key:\"Alt-ArrowRight\",mac:\"Ctrl-ArrowRight\",run:t=>ho(t,(e=>go(t.state,e,t.textDirection==Fi.LTR))),shift:t=>Mo(t,(e=>go(t.state,e,t.textDirection==Fi.LTR)))},{key:\"Alt-ArrowUp\",run:({state:t,dispatch:e})=>Qo(t,e,!1)},{key:\"Shift-Alt-ArrowUp\",run:({state:t,dispatch:e})=>Zo(t,e,!1)},{key:\"Alt-ArrowDown\",run:({state:t,dispatch:e})=>Qo(t,e,!0)},{key:\"Shift-Alt-ArrowDown\",run:({state:t,dispatch:e})=>Zo(t,e,!0)},{key:\"Escape\",run:({state:t,dispatch:e})=>{let i=t.selection,n=null;return i.ranges.length>1?n=B.create([i.main]):i.main.empty||(n=B.create([B.cursor(i.main.head)])),!!n&&(e(lo(t,n)),!0)}},{key:\"Mod-Enter\",run:el(!0)},{key:\"Alt-l\",mac:\"Ctrl-l\",run:({state:t,dispatch:e})=>{let i=Xo(t).map((({from:e,to:i})=>B.range(e,Math.min(i+1,t.doc.length))));return e(t.update({selection:B.create(i),userEvent:\"select\"})),!0}},{key:\"Mod-i\",run:({state:t,dispatch:e})=>{let i=oo(t.selection,(e=>{var i;let n=Nr(t).resolveInner(e.head,1);for(;!(n.from<e.from&&n.to>=e.to||n.to>e.to&&n.from<=e.from)&&(null===(i=n.parent)||void 0===i?void 0:i.parent);)n=n.parent;return B.range(n.to,n.from)}));return e(lo(t,i)),!0},preventDefault:!0},{key:\"Mod-[\",run:sl},{key:\"Mod-]\",run:nl},{key:\"Mod-Alt-\\\\\",run:({state:t,dispatch:e})=>{if(t.readOnly)return!1;let i=Object.create(null),n=new Yr(t,{overrideIndentation:t=>{let e=i[t];return null==e?-1:e}}),s=il(t,((e,s,r)=>{let o=Jr(n,e.from);if(null==o)return;/\\S/.test(e.text)||(o=0);let l=/^\\s*/.exec(e.text)[0],h=Gr(t,o);(l!=h||r.from<e.from+l.length)&&(i[e.from]=o,s.push({from:e.from,to:e.from+l.length,insert:h}))}));return s.changes.empty||e(t.update(s,{userEvent:\"indent\"})),!0}},{key:\"Shift-Mod-k\",run:t=>{if(t.state.readOnly)return!1;let{state:e}=t,i=e.changes(Xo(e).map((({from:t,to:i})=>(t>0?t--:i<e.doc.length&&i++,{from:t,to:i})))),n=oo(e.selection,(e=>t.moveVertically(e,!0))).map(i);return t.dispatch({changes:i,selection:n,scrollIntoView:!0,userEvent:\"delete.line\"}),!0}},{key:\"Shift-Mod-\\\\\",run:({state:t,dispatch:e})=>function(t,e,i){let n=!1,s=oo(t.selection,(e=>{let s=so(t,e.head,-1)||so(t,e.head,1)||e.head>0&&so(t,e.head-1,1)||e.head<t.doc.length&&so(t,e.head+1,-1);if(!s||!s.end)return e;n=!0;let r=s.start.from==e.head?s.end.to:s.end.from;return i?B.range(e.anchor,r):B.cursor(r)}));return!!n&&(e(lo(t,s)),!0)}(t,e,!1)}].concat([{key:\"ArrowLeft\",run:uo,shift:Oo,preventDefault:!0},{key:\"Mod-ArrowLeft\",mac:\"Alt-ArrowLeft\",run:t=>po(t,t.textDirection!=Fi.LTR),shift:t=>Ro(t,t.textDirection!=Fi.LTR)},{mac:\"Cmd-ArrowLeft\",run:Co,shift:Ho},{key:\"ArrowRight\",run:fo,shift:To,preventDefault:!0},{key:\"Mod-ArrowRight\",mac:\"Alt-ArrowRight\",run:t=>po(t,t.textDirection==Fi.LTR),shift:t=>Ro(t,t.textDirection==Fi.LTR)},{mac:\"Cmd-ArrowRight\",run:Ao,shift:Vo},{key:\"ArrowUp\",run:wo,shift:Lo,preventDefault:!0},{mac:\"Cmd-ArrowUp\",run:Wo,shift:Fo},{mac:\"Ctrl-ArrowUp\",run:xo,shift:No},{key:\"ArrowDown\",run:yo,shift:Bo,preventDefault:!0},{mac:\"Cmd-ArrowDown\",run:zo,shift:qo},{mac:\"Ctrl-ArrowDown\",run:ko,shift:Io},{key:\"PageUp\",run:xo,shift:No},{key:\"PageDown\",run:ko,shift:Io},{key:\"Home\",run:Co,shift:Ho},{key:\"Mod-Home\",run:Wo,shift:Fo},{key:\"End\",run:Ao,shift:Vo},{key:\"Mod-End\",run:zo,shift:qo},{key:\"Enter\",run:tl},{key:\"Mod-a\",run:({state:t,dispatch:e})=>(e(t.update({selection:{anchor:0,head:t.doc.length},userEvent:\"select\"})),!0)},{key:\"Backspace\",run:$o,shift:$o},{key:\"Delete\",run:Ko},{key:\"Mod-Backspace\",mac:\"Alt-Backspace\",run:Jo},{key:\"Mod-Delete\",mac:\"Alt-Delete\",run:t=>Go(t,!0)},{mac:\"Mod-Backspace\",run:t=>_o(t,(e=>{let i=t.lineBlockAt(e).from;return jo(t,e>i?i:Math.max(0,e-1),!1)}))},{mac:\"Mod-Delete\",run:Yo}].concat([{key:\"Ctrl-b\",run:uo,shift:Oo,preventDefault:!0},{key:\"Ctrl-f\",run:fo,shift:To},{key:\"Ctrl-p\",run:wo,shift:Lo},{key:\"Ctrl-n\",run:yo,shift:Bo},{key:\"Ctrl-a\",run:t=>ho(t,(e=>B.cursor(t.lineBlockAt(e.head).from,1))),shift:t=>Mo(t,(e=>B.cursor(t.lineBlockAt(e.head).from)))},{key:\"Ctrl-e\",run:t=>ho(t,(e=>B.cursor(t.lineBlockAt(e.head).to,-1))),shift:t=>Mo(t,(e=>B.cursor(t.lineBlockAt(e.head).to)))},{key:\"Ctrl-d\",run:Ko},{key:\"Ctrl-h\",run:$o},{key:\"Ctrl-k\",run:Yo},{key:\"Ctrl-Alt-h\",run:Jo},{key:\"Ctrl-o\",run:({state:t,dispatch:e})=>{if(t.readOnly)return!1;let i=t.changeByRange((t=>({changes:{from:t.from,to:t.to,insert:d.of([\"\",\"\"])},range:B.cursor(t.from)})));return e(t.update(i,{scrollIntoView:!0,userEvent:\"input\"})),!0}},{key:\"Ctrl-t\",run:({state:t,dispatch:e})=>{if(t.readOnly)return!1;let i=t.changeByRange((e=>{if(!e.empty||0==e.from||e.from==t.doc.length)return{range:e};let i=e.from,s=t.doc.lineAt(i),r=i==s.from?i-1:n(s.text,i-s.from,!1)+s.from,o=i==s.to?i+1:n(s.text,i-s.from,!0)+s.from;return{changes:{from:r,to:o,insert:t.doc.slice(i,o).append(t.doc.slice(r,i))},range:B.cursor(o)}}));return!i.changes.empty&&(e(t.update(i,{scrollIntoView:!0,userEvent:\"move.character\"})),!0)}},{key:\"Ctrl-v\",run:ko}].map((t=>({mac:t.key,run:t.run,shift:t.shift})))));let ol=0;class ll{constructor(t,e,i){this.set=t,this.base=e,this.modified=i,this.id=ol++}static define(t){if(null==t?void 0:t.base)throw new Error(\"Can not derive from a modified tag\");let e=new ll([],null,[]);if(e.set.push(e),t)for(let i of t.set)e.set.push(i);return e}static defineModifier(){let t=new al;return e=>e.modified.indexOf(t)>-1?e:al.get(e.base||e,e.modified.concat(t).sort(((t,e)=>t.id-e.id)))}}let hl=0;class al{constructor(){this.instances=[],this.id=hl++}static get(t,e){if(!e.length)return t;let i=e[0].instances.find((i=>{return i.base==t&&(n=e,s=i.modified,n.length==s.length&&n.every(((t,e)=>t==s[e])));var n,s}));if(i)return i;let n=[],s=new ll(n,t,e);for(let t of e)t.instances.push(s);let r=cl(e);for(let e of t.set)for(let t of r)n.push(al.get(e,t));return s}}function cl(t){let e=[t];for(let i=0;i<t.length;i++)for(let n of cl(t.slice(0,i).concat(t.slice(i+1))))e.push(n);return e}function ul(t){let e=Object.create(null);for(let i in t){let n=t[i];Array.isArray(n)||(n=[n]);for(let t of i.split(\" \"))if(t){let i=[],s=2,r=t;for(let e=0;;){if(\"...\"==r&&e>0&&e+3==t.length){s=1;break}let n=/^\"(?:[^\"\\\\]|\\\\.)*?\"|[^\\/!]+/.exec(r);if(!n)throw new RangeError(\"Invalid path: \"+t);if(i.push(\"*\"==n[0]?null:'\"'==n[0][0]?JSON.parse(n[0]):n[0]),e+=n[0].length,e==t.length)break;let o=t[e++];if(e==t.length&&\"!\"==o){s=0;break}if(\"/\"!=o)throw new RangeError(\"Invalid path: \"+t);r=t.slice(e)}let o=i.length-1,l=i[o];if(!l)throw new RangeError(\"Invalid path: \"+t);let h=new gl(n,s,o>0?i.slice(0,o):null);e[l]=h.sort(e[l])}}return fl.add(e)}const fl=new lr,dl=V.define({combine:t=>t.length?vl.combinedMatch(t):null}),pl=V.define({combine:t=>t.length?t[0].match:null});function ml(t){return t.facet(dl)||t.facet(pl)}class gl{constructor(t,e,i,n){this.tags=t,this.mode=e,this.context=i,this.next=n}sort(t){return!t||t.depth<this.depth?(this.next=t,this):(t.next=this.sort(t.next),t)}get depth(){return this.context?this.context.length:0}}class vl{constructor(t,e){let i;function n(t){let e=Rt.newName();return(i||(i=Object.create(null)))[\".\"+e]=t,e}this.map=Object.create(null),this.all=\"string\"==typeof e.all?e.all:e.all?n(e.all):null;for(let e of t){let t=(e.class||n(Object.assign({},e,{tag:null})))+(this.all?\" \"+this.all:\"\"),i=e.tag;if(Array.isArray(i))for(let e of i)this.map[e.id]=t;else this.map[i.id]=t}this.module=i?new Rt(i):null,this.scope=e.scope||null,this.match=this.match.bind(this);let s=[yl];this.module&&s.push(Rs.styleModule.of(this.module)),this.extension=s.concat(null==e.themeType?dl.of(this):dl.computeN([Rs.darkTheme],(t=>t.facet(Rs.darkTheme)==(\"dark\"==e.themeType)?[this]:[]))),this.fallback=s.concat(pl.of(this))}match(t,e){if(this.scope&&e!=this.scope)return null;for(let e of t.set){let i=this.map[e.id];if(void 0!==i)return e!=t&&(this.map[t.id]=i),i}return this.map[t.id]=this.all}static combinedMatch(t){if(1==t.length)return t[0].match;let e=t.some((t=>t.scope))?void 0:Object.create(null);return(i,n)=>{let s=e&&e[i.id];if(void 0!==s)return s;let r=null;for(let e of t){let t=e.match(i,n);t&&(r=r?r+\" \"+t:t)}return e&&(e[i.id]=r),r}}static define(t,e){return new vl(t,e||{})}static get(t,e,i){let n=ml(t);return n&&n(e,i||ar.none)}}class wl{constructor(t){this.markCache=Object.create(null),this.tree=Nr(t.state),this.decorations=this.buildDeco(t,ml(t.state))}update(t){let e=Nr(t.state),i=ml(t.state),n=i!=t.startState.facet(dl);e.length<t.view.viewport.to&&!n&&e.type==this.tree.type?this.decorations=this.decorations.map(t.changes):(e!=this.tree||t.viewportChanged||n)&&(this.tree=e,this.decorations=this.buildDeco(t.view,i))}buildDeco(t,e){if(!e||!this.tree.length)return si.none;let i=new Ht;for(let{from:n,to:s}of t.visibleRanges)kl(this.tree,n,s,e,((t,e,n)=>{i.add(t,e,this.markCache[n]||(this.markCache[n]=si.mark({class:n})))}));return i.finish()}}const yl=Y.high(Li.fromClass(wl,{decorations:t=>t.decorations})),bl=[\"\"];class xl{constructor(t,e,i){this.at=t,this.style=e,this.span=i,this.class=\"\"}startSpan(t,e){e!=this.class&&(this.flush(t),t>this.at&&(this.at=t),this.class=e)}flush(t){t>this.at&&this.class&&this.span(this.at,t,this.class)}highlightRange(t,e,i,n,s,r){let{type:o,from:l,to:h}=t;if(l>=i||h<=e)return;bl[s]=o.name,o.isTop&&(r=o);let a=n,c=o.prop(fl),u=!1;for(;c;){if(!c.context||Sl(c.context,bl,s)){for(let t of c.tags){let e=this.style(t,r);e&&(a&&(a+=\" \"),a+=e,1==c.mode?n+=(n?\" \":\"\")+e:0==c.mode&&(u=!0))}break}c=c.next}if(this.startSpan(t.from,a),u)return;let f=t.tree&&t.tree.prop(lr.mounted);if(f&&f.overlay){let o=t.node.enter(f.overlay[0].from+l,1),c=t.firstChild();for(let u=0,d=l;;u++){let p=u<f.overlay.length?f.overlay[u]:null,m=p?p.from+l:h,g=Math.max(e,d),v=Math.min(i,m);if(g<v&&c)for(;t.from<v&&(this.highlightRange(t,g,v,n,s+1,r),this.startSpan(Math.min(i,t.to),a),!(t.to>=m)&&t.nextSibling()););if(!p||m>i)break;d=p.to+l,d>e&&(this.highlightRange(o.cursor,Math.max(e,p.from+l),Math.min(i,d),n,s,f.tree.type),this.startSpan(d,a))}c&&t.parent()}else if(t.firstChild()){do{if(!(t.to<=e)){if(t.from>=i)break;this.highlightRange(t,e,i,n,s+1,r),this.startSpan(Math.min(i,t.to),a)}}while(t.nextSibling());t.parent()}}}function kl(t,e,i,n,s){let r=new xl(e,n,s);r.highlightRange(t.cursor(),e,i,\"\",0,t.type),r.flush(i)}function Sl(t,e,i){if(t.length>i-1)return!1;for(let n=i-1,s=t.length-1;s>=0;s--,n--){let i=t[s];if(i&&i!=e[n])return!1}return!0}const Al=ll.define,Cl=Al(),Ml=Al(),Dl=Al(Ml),Ol=Al(Ml),Tl=Al(),Rl=Al(Tl),El=Al(Tl),Ll=Al(),Bl=Al(Ll),Pl=Al(),Nl=Al(),Il=Al(),Vl=Al(Il),Hl=Al(),Wl={comment:Cl,lineComment:Al(Cl),blockComment:Al(Cl),docComment:Al(Cl),name:Ml,variableName:Al(Ml),typeName:Dl,tagName:Al(Dl),propertyName:Ol,attributeName:Al(Ol),className:Al(Ml),labelName:Al(Ml),namespace:Al(Ml),macroName:Al(Ml),literal:Tl,string:Rl,docString:Al(Rl),character:Al(Rl),attributeValue:Al(Rl),number:El,integer:Al(El),float:Al(El),bool:Al(Tl),regexp:Al(Tl),escape:Al(Tl),color:Al(Tl),url:Al(Tl),keyword:Pl,self:Al(Pl),null:Al(Pl),atom:Al(Pl),unit:Al(Pl),modifier:Al(Pl),operatorKeyword:Al(Pl),controlKeyword:Al(Pl),definitionKeyword:Al(Pl),moduleKeyword:Al(Pl),operator:Nl,derefOperator:Al(Nl),arithmeticOperator:Al(Nl),logicOperator:Al(Nl),bitwiseOperator:Al(Nl),compareOperator:Al(Nl),updateOperator:Al(Nl),definitionOperator:Al(Nl),typeOperator:Al(Nl),controlOperator:Al(Nl),punctuation:Il,separator:Al(Il),bracket:Vl,angleBracket:Al(Vl),squareBracket:Al(Vl),paren:Al(Vl),brace:Al(Vl),content:Ll,heading:Bl,heading1:Al(Bl),heading2:Al(Bl),heading3:Al(Bl),heading4:Al(Bl),heading5:Al(Bl),heading6:Al(Bl),contentSeparator:Al(Ll),list:Al(Ll),quote:Al(Ll),emphasis:Al(Ll),strong:Al(Ll),link:Al(Ll),monospace:Al(Ll),strikethrough:Al(Ll),inserted:Al(),deleted:Al(),changed:Al(),invalid:Al(),meta:Hl,documentMeta:Al(Hl),annotation:Al(Hl),processingInstruction:Al(Hl),definition:ll.defineModifier(),constant:ll.defineModifier(),function:ll.defineModifier(),standard:ll.defineModifier(),local:ll.defineModifier(),special:ll.defineModifier()};Wl.link,Wl.heading,Wl.emphasis,Wl.strong,Wl.strikethrough,Wl.keyword,Wl.atom,Wl.bool,Wl.url,Wl.contentSeparator,Wl.labelName,Wl.literal,Wl.inserted,Wl.string,Wl.deleted,Wl.regexp,Wl.escape,Wl.string,Wl.variableName,Wl.variableName,Wl.typeName,Wl.namespace,Wl.className,Wl.variableName,Wl.macroName,Wl.propertyName,Wl.comment,Wl.meta,Wl.invalid,Wl.link,Wl.heading,Wl.emphasis,Wl.strong,Wl.keyword,Wl.atom,Wl.bool,Wl.url,Wl.labelName,Wl.inserted,Wl.deleted,Wl.literal,Wl.string,Wl.number,Wl.regexp,Wl.escape,Wl.string,Wl.variableName,Wl.variableName,Wl.variableName,Wl.variableName,Wl.propertyName,Wl.typeName,Wl.namespace,Wl.className,Wl.macroName,Wl.propertyName,Wl.operator,Wl.comment,Wl.meta,Wl.invalid,Wl.punctuation;var zl=[\"and\",\"as\",\"block\",\"endblock\",\"by\",\"cycle\",\"debug\",\"else\",\"elif\",\"extends\",\"filter\",\"endfilter\",\"firstof\",\"for\",\"endfor\",\"if\",\"endif\",\"ifchanged\",\"endifchanged\",\"ifequal\",\"endifequal\",\"ifnotequal\",\"endifnotequal\",\"in\",\"include\",\"load\",\"not\",\"now\",\"or\",\"parsed\",\"regroup\",\"reversed\",\"spaceless\",\"endspaceless\",\"ssi\",\"templatetag\",\"openblock\",\"closeblock\",\"openvariable\",\"closevariable\",\"openbrace\",\"closebrace\",\"opencomment\",\"closecomment\",\"widthratio\",\"url\",\"with\",\"endwith\",\"get_current_language\",\"trans\",\"endtrans\",\"noop\",\"blocktrans\",\"endblocktrans\",\"get_available_languages\",\"get_current_language_bidi\",\"plural\"],Fl=/^[+\\-*&%=<>!?|~^]/,ql=/^[:\\[\\(\\{]/,_l=[\"true\",\"false\"],jl=/^(\\d[+\\-\\*\\/])?\\d+(\\.\\d+)?/;function Ul(t,e){var i=t.peek();if(e.incomment)return t.skipTo(\"#}\")?(t.eatWhile(/\\#|}/),e.incomment=!1):t.skipToEnd(),\"comment\";if(e.intag){if(e.operator){if(e.operator=!1,t.match(_l))return\"atom\";if(t.match(jl))return\"number\"}if(e.sign){if(e.sign=!1,t.match(_l))return\"atom\";if(t.match(jl))return\"number\"}if(e.instring)return i==e.instring&&(e.instring=!1),t.next(),\"string\";if(\"'\"==i||'\"'==i)return e.instring=i,t.next(),\"string\";if(t.match(e.intag+\"}\")||t.eat(\"-\")&&t.match(e.intag+\"}\"))return e.intag=!1,\"tag\";if(t.match(Fl))return e.operator=!0,\"operator\";if(t.match(ql))e.sign=!0;else if(t.eat(\" \")||t.sol()){if(t.match(zl))return\"keyword\";if(t.match(_l))return\"atom\";if(t.match(jl))return\"number\";t.sol()&&t.next()}else t.next();return\"variable\"}if(t.eat(\"{\")){if(t.eat(\"#\"))return e.incomment=!0,t.skipTo(\"#}\")?(t.eatWhile(/\\#|}/),e.incomment=!1):t.skipToEnd(),\"comment\";if(i=t.eat(/\\{|%/))return e.intag=i,\"{\"==i&&(e.intag=\"}\"),t.eat(\"-\"),\"tag\"}t.next()}zl=new RegExp(\"((\"+zl.join(\")|(\")+\"))\\\\b\"),_l=new RegExp(\"((\"+_l.join(\")|(\")+\"))\\\\b\");const $l={startState:function(){return{tokenize:Ul}},token:function(t,e){return e.tokenize(t,e)},languageData:{commentTokens:{block:{open:\"{#\",close:\"#}\"}}}};var Kl=new RegExp(\"\\\\b((\"+[\"true\",\"false\",\"on\",\"off\",\"yes\",\"no\"].join(\")|(\")+\"))$\",\"i\");const Gl={token:function(t,e){var i=t.peek(),n=e.escaped;if(e.escaped=!1,\"#\"==i&&(0==t.pos||/\\s/.test(t.string.charAt(t.pos-1))))return t.skipToEnd(),\"comment\";if(t.match(/^('([^']|\\\\.)*'?|\"([^\"]|\\\\.)*\"?)/))return\"string\";if(e.literal&&t.indentation()>e.keyCol)return t.skipToEnd(),\"string\";if(e.literal&&(e.literal=!1),t.sol()){if(e.keyCol=0,e.pair=!1,e.pairStart=!1,t.match(\"---\"))return\"def\";if(t.match(\"...\"))return\"def\";if(t.match(/^\\s*-\\s+/))return\"meta\"}if(t.match(/^(\\{|\\}|\\[|\\])/))return\"{\"==i?e.inlinePairs++:\"}\"==i?e.inlinePairs--:\"[\"==i?e.inlineList++:e.inlineList--,\"meta\";if(e.inlineList>0&&!n&&\",\"==i)return t.next(),\"meta\";if(e.inlinePairs>0&&!n&&\",\"==i)return e.keyCol=0,e.pair=!1,e.pairStart=!1,t.next(),\"meta\";if(e.pairStart){if(t.match(/^\\s*(\\||\\>)\\s*/))return e.literal=!0,\"meta\";if(t.match(/^\\s*(\\&|\\*)[a-z0-9\\._-]+\\b/i))return\"variable\";if(0==e.inlinePairs&&t.match(/^\\s*-?[0-9\\.\\,]+\\s?$/))return\"number\";if(e.inlinePairs>0&&t.match(/^\\s*-?[0-9\\.\\,]+\\s?(?=(,|}))/))return\"number\";if(t.match(Kl))return\"keyword\"}return!e.pair&&t.match(/^\\s*(?:[,\\[\\]{}&*!|>'\"%@`][^\\s'\":]|[^,\\[\\]{}#&*!|>'\"%@`])[^#]*?(?=\\s*:($|\\s))/)?(e.pair=!0,e.keyCol=t.indentation(),\"atom\"):e.pair&&t.match(/^:\\s*/)?(e.pairStart=!0,\"meta\"):(e.pairStart=!1,e.escaped=\"\\\\\"==i,t.next(),null)},startState:function(){return{pair:!1,pairStart:!1,keyCol:0,inlinePairs:0,inlineList:0,literal:!1,escaped:!1}},languageData:{commentTokens:{line:\"#\"}}};function Jl(t,e,i,n=0,s=0){null==e&&-1==(e=t.search(/[^\\s\\u00a0]/))&&(e=t.length);let r=s;for(let s=n;s<e;s++)9==t.charCodeAt(s)?r+=i-r%i:r++;return r}class Yl{constructor(t,e,i){this.string=t,this.tabSize=e,this.indentUnit=i,this.pos=0,this.start=0,this.lastColumnPos=0,this.lastColumnValue=0}eol(){return this.pos>=this.string.length}sol(){return 0==this.pos}peek(){return this.string.charAt(this.pos)||void 0}next(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)}eat(t){let e,i=this.string.charAt(this.pos);if(e=\"string\"==typeof t?i==t:i&&(t instanceof RegExp?t.test(i):t(i)),e)return++this.pos,i}eatWhile(t){let e=this.pos;for(;this.eat(t););return this.pos>e}eatSpace(){let t=this.pos;for(;/[\\s\\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>t}skipToEnd(){this.pos=this.string.length}skipTo(t){let e=this.string.indexOf(t,this.pos);if(e>-1)return this.pos=e,!0}backUp(t){this.pos-=t}column(){return this.lastColumnPos<this.start&&(this.lastColumnValue=Jl(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue}indentation(){return Jl(this.string,null,this.tabSize)}match(t,e,i){if(\"string\"==typeof t){let n=t=>i?t.toLowerCase():t;return n(this.string.substr(this.pos,t.length))==n(t)?(!1!==e&&(this.pos+=t.length),!0):null}{let i=this.string.slice(this.pos).match(t);return i&&i.index>0?null:(i&&!1!==e&&(this.pos+=i[0].length),i)}}current(){return this.string.slice(this.start,this.pos)}}function Xl(t){if(\"object\"!=typeof t)return t;let e={};for(let i in t){let n=t[i];e[i]=n instanceof Array?n.slice():n}return e}class Ql extends Br{constructor(t){let e=(i=t.languageData,V.define({combine:i?t=>t.concat(i):void 0}));var i;let n,s={token:(r=t).token,blankLine:r.blankLine||(()=>{}),startState:r.startState||(()=>!0),copyState:r.copyState||Xl,indent:r.indent||(()=>null),languageData:r.languageData||{},tokenTable:r.tokenTable||nh};var r;super(e,new class extends Tr{createParse(t,e,i){return new eh(n,t,e,i)}},function(t){let e=ar.define({id:sh.length,name:\"Document\",props:[Lr.add((()=>t))]});return sh.push(e),e}(e),[Ur.of(((t,e)=>this.getIndent(t,e)))]),n=this,this.streamParser=s,this.stateAfter=new lr({perNode:!0}),this.tokenTable=t.tokenTable?new hh(s.tokenTable):ah}static define(t){return new Ql(t)}getIndent(t,e){let i=Nr(t.state),n=i.resolve(e);for(;n&&n.type!=this.topNode;)n=n.parent;if(!n)return null;let s,r,o=Zl(this,i,0,n.from,e);if(o?(r=o.state,s=o.pos+1):(r=this.streamParser.startState(t.unit),s=0),e-s>1e4)return null;for(;s<e;){let i=t.state.doc.lineAt(s),n=Math.min(e,i.to);if(i.length){let e=new Yl(i.text,t.state.tabSize,t.unit);for(;e.pos<n-i.from;)ih(this.streamParser.token,e,r)}else this.streamParser.blankLine(r,t.unit);if(n==e)break;s=i.to+1}let{text:l}=t.lineAt(e);return this.streamParser.indent(r,/^\\s*(.*)/.exec(l)[1],t)}get allowsNesting(){return!1}}function Zl(t,e,i,n,s){let r=i>=n&&i+e.length<=s&&e.prop(t.stateAfter);if(r)return{state:t.streamParser.copyState(r),pos:i+e.length};for(let r=e.children.length-1;r>=0;r--){let o=e.children[r],l=i+e.positions[r],h=o instanceof dr&&l<s&&Zl(t,o,l,n,s);if(h)return h}return null}function th(t,e,i,n,s){if(s&&i<=0&&n>=e.length)return e;s||e.type!=t.topNode||(s=!0);for(let r=e.children.length-1;r>=0;r--){let o,l=e.positions[r],h=e.children[r];if(l<n&&h instanceof dr){if(!(o=th(t,h,i-l,n-l,s)))break;return s?new dr(e.type,e.children.slice(0,r).concat(o),e.positions.slice(0,r+1),l+o.length):o}}return null}class eh{constructor(t,e,i,n){this.lang=t,this.input=e,this.fragments=i,this.ranges=n,this.stoppedAt=null,this.chunks=[],this.chunkPos=[],this.chunk=[],this.chunkReused=void 0,this.rangeIndex=0,this.to=n[n.length-1].to;let s=Hr.get(),r=n[0].from,{state:o,tree:l}=function(t,e,i,n){for(let n of e){let e,s=n.from+(n.openStart?25:0),r=n.to-(n.openEnd?25:0),o=s<=i&&r>i&&Zl(t,n.tree,0-n.offset,i,r);if(o&&(e=th(t,n.tree,i+n.offset,o.pos+n.offset,!1)))return{state:o.state,tree:e}}return{state:t.streamParser.startState(n?Kr(n):4),tree:dr.empty}}(t,i,r,null==s?void 0:s.state);this.state=o,this.parsedPos=this.chunkStart=r+l.length;for(let t=0;t<l.children.length;t++)this.chunks.push(l.children[t]),this.chunkPos.push(l.positions[t]);s&&this.parsedPos<s.viewport.from-1e5&&(this.state=this.lang.streamParser.startState(Kr(s.state)),s.skipUntilInView(this.parsedPos,s.viewport.from),this.parsedPos=s.viewport.from),this.moveRangeIndex()}advance(){let t=Hr.get(),e=null==this.stoppedAt?this.to:Math.min(this.to,this.stoppedAt),i=Math.min(e,this.chunkStart+2048);for(t&&(i=Math.min(i,t.viewport.to));this.parsedPos<i;)this.parseLine(t);return this.chunkStart<this.parsedPos&&this.finishChunk(),this.parsedPos>=e?this.finish():t&&this.parsedPos>=t.viewport.to?(t.skipUntilInView(this.parsedPos,e),this.finish()):null}stopAt(t){this.stoppedAt=t}lineAfter(t){let e=this.input.chunk(t);if(this.input.lineChunks)\"\\n\"==e&&(e=\"\");else{let t=e.indexOf(\"\\n\");t>-1&&(e=e.slice(0,t))}return t+e.length<=this.to?e:e.slice(0,this.to-t)}nextLine(){let t=this.parsedPos,e=this.lineAfter(t),i=t+e.length;for(let t=this.rangeIndex;;){let n=this.ranges[t].to;if(n>=i)break;if(e=e.slice(0,n-(i-e.length)),t++,t==this.ranges.length)break;let s=this.ranges[t].from,r=this.lineAfter(s);e+=r,i=s+r.length}return{line:e,end:i}}skipGapsTo(t,e,i){for(;;){let n=this.ranges[this.rangeIndex].to,s=t+e;if(i>0?n>s:n>=s)break;e+=this.ranges[++this.rangeIndex].from-n}return e}moveRangeIndex(){for(;this.ranges[this.rangeIndex].to<this.parsedPos;)this.rangeIndex++}emitToken(t,e,i,n,s){if(this.ranges.length>1){e+=s=this.skipGapsTo(e,s,1);let t=this.chunk.length;i+=s=this.skipGapsTo(i,s,-1),n+=this.chunk.length-t}return this.chunk.push(t,e,i,n),s}parseLine(t){let{line:e,end:i}=this.nextLine(),n=0,{streamParser:s}=this.lang,r=new Yl(e,t?t.state.tabSize:4,t?Kr(t.state):2);if(r.eol())s.blankLine(this.state,r.indentUnit);else for(;!r.eol();){let t=ih(s.token,r,this.state);if(t&&(n=this.emitToken(this.lang.tokenTable.resolve(t),this.parsedPos+r.start,this.parsedPos+r.pos,4,n)),r.start>1e4)break}this.parsedPos=i,this.moveRangeIndex(),this.parsedPos<this.to&&this.parsedPos++}finishChunk(){let t=dr.build({buffer:this.chunk,start:this.chunkStart,length:this.parsedPos-this.chunkStart,nodeSet:rh,topID:0,maxBufferLength:2048,reused:this.chunkReused});t=new dr(t.type,t.children,t.positions,t.length,[[this.lang.stateAfter,this.lang.streamParser.copyState(this.state)]]),this.chunks.push(t),this.chunkPos.push(this.chunkStart-this.ranges[0].from),this.chunk=[],this.chunkReused=void 0,this.chunkStart=this.parsedPos}finish(){return new dr(this.lang.topNode,this.chunks,this.chunkPos,this.parsedPos-this.ranges[0].from).balance()}}function ih(t,e,i){e.start=e.pos;for(let n=0;n<10;n++){let n=t(e,i);if(e.pos>e.start)return n}throw new Error(\"Stream parser failed to advance stream.\")}const nh=Object.create(null),sh=[ar.none],rh=new cr(sh),oh=[],lh=Object.create(null);for(let[t,e]of[[\"variable\",\"variableName\"],[\"variable-2\",\"variableName.special\"],[\"string-2\",\"string.special\"],[\"def\",\"variableName.definition\"],[\"tag\",\"typeName\"],[\"attribute\",\"propertyName\"],[\"type\",\"typeName\"],[\"builtin\",\"variableName.standard\"],[\"qualifier\",\"modifier\"],[\"error\",\"invalid\"],[\"header\",\"heading\"],[\"property\",\"propertyName\"]])lh[t]=uh(nh,e);class hh{constructor(t){this.extra=t,this.table=Object.assign(Object.create(null),lh)}resolve(t){return t?this.table[t]||(this.table[t]=uh(this.extra,t)):0}}const ah=new hh(nh);function ch(t,e){oh.indexOf(t)>-1||(oh.push(t),console.warn(e))}function uh(t,e){let i=null;for(let n of e.split(\".\")){let e=t[n]||Wl[n];e?\"function\"==typeof e?i?i=e(i):ch(n,`Modifier ${n} used at start of tag`):i?ch(n,`Tag ${n} used as modifier`):i=e:ch(n,`Unknown highlighting tag ${n}`)}if(!i)return 0;let n=e.replace(/ /g,\"_\"),s=ar.define({id:sh.length,name:n,props:[ul({[n]:i})]});return sh.push(s),s.id}class fh extends Bt{compare(t){return this==t||this.constructor==t.constructor&&this.eq(t)}eq(t){return!1}destroy(t){}}fh.prototype.elementClass=\"\",fh.prototype.toDOM=void 0,fh.prototype.mapMode=S.TrackBefore,fh.prototype.startSide=fh.prototype.endSide=-1,fh.prototype.point=!0;const dh=V.define(),ph=V.define(),mh=Rs.baseTheme({\".cm-gutters\":{display:\"flex\",height:\"100%\",boxSizing:\"border-box\",left:0,zIndex:200},\"&light .cm-gutters\":{backgroundColor:\"#f5f5f5\",color:\"#999\",borderRight:\"1px solid #ddd\"},\"&dark .cm-gutters\":{backgroundColor:\"#333338\",color:\"#ccc\"},\".cm-gutter\":{display:\"flex !important\",flexDirection:\"column\",flexShrink:0,boxSizing:\"border-box\",minHeight:\"100%\",overflow:\"hidden\"},\".cm-gutterElement\":{boxSizing:\"border-box\"},\".cm-lineNumbers .cm-gutterElement\":{padding:\"0 3px 0 5px\",minWidth:\"20px\",textAlign:\"right\",whiteSpace:\"nowrap\"},\"&light .cm-activeLineGutter\":{backgroundColor:\"#e2f2ff\"},\"&dark .cm-activeLineGutter\":{backgroundColor:\"#222227\"}}),gh=V.define({combine:t=>t.some((t=>t))});function vh(t){let e=[wh,mh];return t&&!1===t.fixed&&e.push(gh.of(!0)),e}const wh=Li.fromClass(class{constructor(t){this.view=t,this.prevViewport=t.viewport,this.dom=document.createElement(\"div\"),this.dom.className=\"cm-gutters\",this.dom.setAttribute(\"aria-hidden\",\"true\"),this.dom.style.minHeight=this.view.contentHeight+\"px\",this.gutters=t.state.facet(ph).map((e=>new kh(t,e)));for(let t of this.gutters)this.dom.appendChild(t.dom);this.fixed=!t.state.facet(gh),this.fixed&&(this.dom.style.position=\"sticky\"),this.syncGutters(!1),t.scrollDOM.insertBefore(this.dom,t.contentDOM)}update(t){if(this.updateGutters(t)){let e=this.prevViewport,i=t.view.viewport,n=Math.min(e.to,i.to)-Math.max(e.from,i.from);this.syncGutters(n<.8*(i.to-i.from))}t.geometryChanged&&(this.dom.style.minHeight=this.view.contentHeight+\"px\"),this.view.state.facet(gh)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?\"sticky\":\"\"),this.prevViewport=t.view.viewport}syncGutters(t){let e=this.dom.nextSibling;t&&this.dom.remove();let i=Vt.iter(this.view.state.facet(dh),this.view.viewport.from),n=[],s=this.gutters.map((t=>new xh(t,this.view.viewport,-this.view.documentPadding.top)));for(let t of this.view.viewportLineBlocks){let e;if(Array.isArray(t.type)){for(let i of t.type)if(i.type==ni.Text){e=i;break}}else e=t.type==ni.Text?t:void 0;if(e){n.length&&(n=[]),bh(i,n,t.from);for(let t of s)t.line(this.view,e,n)}}for(let t of s)t.finish();t&&this.view.scrollDOM.insertBefore(this.dom,e)}updateGutters(t){let e=t.startState.facet(ph),i=t.state.facet(ph),n=t.docChanged||t.heightChanged||t.viewportChanged||!Vt.eq(t.startState.facet(dh),t.state.facet(dh),t.view.viewport.from,t.view.viewport.to);if(e==i)for(let e of this.gutters)e.update(t)&&(n=!0);else{n=!0;let s=[];for(let n of i){let i=e.indexOf(n);i<0?s.push(new kh(this.view,n)):(this.gutters[i].update(t),s.push(this.gutters[i]))}for(let t of this.gutters)t.dom.remove(),s.indexOf(t)<0&&t.destroy();for(let t of s)this.dom.appendChild(t.dom);this.gutters=s}return n}destroy(){for(let t of this.gutters)t.destroy();this.dom.remove()}},{provide:Ti.scrollMargins.from((t=>0!=t.gutters.length&&t.fixed?t.view.textDirection==Fi.LTR?{left:t.dom.offsetWidth}:{right:t.dom.offsetWidth}:null))});function yh(t){return Array.isArray(t)?t:[t]}function bh(t,e,i){for(;t.value&&t.from<=i;)t.from==i&&e.push(t.value),t.next()}class xh{constructor(t,e,i){this.gutter=t,this.height=i,this.localMarkers=[],this.i=0,this.cursor=Vt.iter(t.markers,e.from)}line(t,e,i){this.localMarkers.length&&(this.localMarkers=[]),bh(this.cursor,this.localMarkers,e.from);let n=i.length?this.localMarkers.concat(i):this.localMarkers,s=this.gutter.config.lineMarker(t,e,n);s&&n.unshift(s);let r=this.gutter;if(0==n.length&&!r.config.renderEmptyElements)return;let o=e.top-this.height;if(this.i==r.elements.length){let i=new Sh(t,e.height,o,n);r.elements.push(i),r.dom.appendChild(i.dom)}else r.elements[this.i].update(t,e.height,o,n);this.height=e.bottom,this.i++}finish(){let t=this.gutter;for(;t.elements.length>this.i;){let e=t.elements.pop();t.dom.removeChild(e.dom),e.destroy()}}}class kh{constructor(t,e){this.view=t,this.config=e,this.elements=[],this.spacer=null,this.dom=document.createElement(\"div\"),this.dom.className=\"cm-gutter\"+(this.config.class?\" \"+this.config.class:\"\");for(let i in e.domEventHandlers)this.dom.addEventListener(i,(n=>{let s=t.lineBlockAtHeight(n.clientY-t.documentTop);e.domEventHandlers[i](t,s,n)&&n.preventDefault()}));this.markers=yh(e.markers(t)),e.initialSpacer&&(this.spacer=new Sh(t,0,0,[e.initialSpacer(t)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+=\"visibility: hidden; pointer-events: none\")}update(t){let e=this.markers;if(this.markers=yh(this.config.markers(t.view)),this.spacer&&this.config.updateSpacer){let e=this.config.updateSpacer(this.spacer.markers[0],t);e!=this.spacer.markers[0]&&this.spacer.update(t.view,0,0,[e])}let i=t.view.viewport;return!Vt.eq(this.markers,e,i.from,i.to)||!!this.config.lineMarkerChange&&this.config.lineMarkerChange(t)}destroy(){for(let t of this.elements)t.destroy()}}class Sh{constructor(t,e,i,n){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement(\"div\"),this.update(t,e,i,n)}update(t,e,i,n){this.height!=e&&(this.dom.style.height=(this.height=e)+\"px\"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+\"px\":\"\"),function(t,e){if(t.length!=e.length)return!1;for(let i=0;i<t.length;i++)if(!t[i].compare(e[i]))return!1;return!0}(this.markers,n)||this.setMarkers(t,n)}setMarkers(t,e){let i=\"cm-gutterElement\",n=this.dom.firstChild;for(let s=0,r=0;;){let o=r,l=s<e.length?e[s++]:null,h=!1;if(l){let t=l.elementClass;t&&(i+=\" \"+t);for(let t=r;t<this.markers.length;t++)if(this.markers[t].compare(l)){o=t,h=!0;break}}else o=this.markers.length;for(;r<o;){let t=this.markers[r++];if(t.toDOM){t.destroy(n);let e=n.nextSibling;n.remove(),n=e}}if(!l)break;l.toDOM&&(h?n=n.nextSibling:this.dom.insertBefore(l.toDOM(t),n)),h&&r++}this.dom.className=i,this.markers=e}destroy(){this.setMarkers(null,[])}}const Ah=V.define(),Ch=V.define({combine:t=>Mt(t,{formatNumber:String,domEventHandlers:{}},{domEventHandlers(t,e){let i=Object.assign({},t);for(let t in e){let n=i[t],s=e[t];i[t]=n?(t,e,i)=>n(t,e,i)||s(t,e,i):s}return i}})});class Mh extends fh{constructor(t){super(),this.number=t}eq(t){return this.number==t.number}toDOM(){return document.createTextNode(this.number)}}function Dh(t,e){return t.state.facet(Ch).formatNumber(e,t.state)}const Oh=ph.compute([Ch],(t=>({class:\"cm-lineNumbers\",renderEmptyElements:!1,markers:t=>t.state.facet(Ah),lineMarker:(t,e,i)=>i.some((t=>t.toDOM))?null:new Mh(Dh(t,t.state.doc.lineAt(e.from).number)),lineMarkerChange:t=>t.startState.facet(Ch)!=t.state.facet(Ch),initialSpacer:t=>new Mh(Dh(t,Rh(t.state.doc.lines))),updateSpacer(t,e){let i=Dh(e.view,Rh(e.view.state.doc.lines));return i==t.number?t:new Mh(i)},domEventHandlers:t.facet(Ch).domEventHandlers})));function Th(t={}){return[Ch.of(t),vh(),Oh]}function Rh(t){let e=9;for(;e<t;)e=10*e+9;return e}const Eh=ct.define(),Lh=ct.define(),Bh=V.define(),Ph=V.define({combine:t=>Mt(t,{minDepth:100,newGroupDelay:500},{minDepth:Math.max,newGroupDelay:Math.min})});const Nh=_.define({create:()=>Xh.empty,update(t,e){let i=e.state.facet(Ph),n=e.annotation(Eh);if(n){let s=e.docChanged?B.single(function(t){let e=0;return t.iterChangedRanges(((t,i)=>e=i)),e}(e.changes)):void 0,r=qh.fromTransaction(e,s),o=n.side,l=0==o?t.undone:t.done;return l=r?_h(l,l.length,i.minDepth,r):$h(l,e.startState.selection),new Xh(0==o?n.rest:l,0==o?l:n.rest)}let s=e.annotation(Lh);if(\"full\"!=s&&\"before\"!=s||(t=t.isolate()),!1===e.annotation(pt.addToHistory))return e.changes.empty?t:t.addMapping(e.changes.desc);let r=qh.fromTransaction(e),o=e.annotation(pt.time),l=e.annotation(pt.userEvent);return r?t=t.addChanges(r,o,l,i.newGroupDelay,i.minDepth):e.selection&&(t=t.addSelection(e.startState.selection,o,l,i.newGroupDelay)),\"full\"!=s&&\"after\"!=s||(t=t.isolate()),t},toJSON:t=>({done:t.done.map((t=>t.toJSON())),undone:t.undone.map((t=>t.toJSON()))}),fromJSON:t=>new Xh(t.done.map(qh.fromJSON),t.undone.map(qh.fromJSON))});function Ih(t={}){return[Nh,Ph.of(t),Rs.domEventHandlers({beforeinput(t,e){let i=\"historyUndo\"==t.inputType?Hh:\"historyRedo\"==t.inputType?Wh:null;return!!i&&(t.preventDefault(),i(e))}})]}function Vh(t,e){return function({state:i,dispatch:n}){if(!e&&i.readOnly)return!1;let s=i.field(Nh,!1);if(!s)return!1;let r=s.pop(t,i,e);return!!r&&(n(r),!0)}}const Hh=Vh(0,!1),Wh=Vh(1,!1),zh=Vh(0,!0),Fh=Vh(1,!0);class qh{constructor(t,e,i,n,s){this.changes=t,this.effects=e,this.mapped=i,this.startSelection=n,this.selectionsAfter=s}setSelAfter(t){return new qh(this.changes,this.effects,this.mapped,this.startSelection,t)}toJSON(){var t,e,i;return{changes:null===(t=this.changes)||void 0===t?void 0:t.toJSON(),mapped:null===(e=this.mapped)||void 0===e?void 0:e.toJSON(),startSelection:null===(i=this.startSelection)||void 0===i?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map((t=>t.toJSON()))}}static fromJSON(t){return new qh(t.changes&&C.fromJSON(t.changes),[],t.mapped&&A.fromJSON(t.mapped),t.startSelection&&B.fromJSON(t.startSelection),t.selectionsAfter.map(B.fromJSON))}static fromTransaction(t,e){let i=Uh;for(let e of t.startState.facet(Bh)){let n=e(t);n.length&&(i=i.concat(n))}return!i.length&&t.changes.empty?null:new qh(t.changes.invert(t.startState.doc),i,void 0,e||t.startState.selection,Uh)}static selection(t){return new qh(void 0,Uh,void 0,void 0,t)}}function _h(t,e,i,n){let s=e+1>i+20?e-i-1:0,r=t.slice(s,e);return r.push(n),r}function jh(t,e){return t.length?e.length?t.concat(e):t:e}const Uh=[];function $h(t,e){if(t.length){let i=t[t.length-1],n=i.selectionsAfter.slice(Math.max(0,i.selectionsAfter.length-200));return n.length&&n[n.length-1].eq(e)?t:(n.push(e),_h(t,t.length-1,1e9,i.setSelAfter(n)))}return[qh.selection([e])]}function Kh(t){let e=t[t.length-1],i=t.slice();return i[t.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),i}function Gh(t,e){if(!t.length)return t;let i=t.length,n=Uh;for(;i;){let s=Jh(t[i-1],e,n);if(s.changes&&!s.changes.empty||s.effects.length){let e=t.slice(0,i);return e[i-1]=s,e}e=s.mapped,i--,n=s.selectionsAfter}return n.length?[qh.selection(n)]:Uh}function Jh(t,e,i){let n=jh(t.selectionsAfter.length?t.selectionsAfter.map((t=>t.map(e))):Uh,i);if(!t.changes)return qh.selection(n);let s=t.changes.map(e),r=e.mapDesc(t.changes,!0),o=t.mapped?t.mapped.composeDesc(r):r;return new qh(s,dt.mapEffects(t.effects,e),o,t.startSelection.map(r),n)}const Yh=/^(input\\.type|delete)($|\\.)/;class Xh{constructor(t,e,i=0,n){this.done=t,this.undone=e,this.prevTime=i,this.prevUserEvent=n}isolate(){return this.prevTime?new Xh(this.done,this.undone):this}addChanges(t,e,i,n,s){let r=this.done,o=r[r.length-1];return r=o&&o.changes&&!o.changes.empty&&t.changes&&(!i||Yh.test(i))&&(!o.selectionsAfter.length&&e-this.prevTime<n&&function(t,e){let i=[],n=!1;return t.iterChangedRanges(((t,e)=>i.push(t,e))),e.iterChangedRanges(((t,e,s,r)=>{for(let t=0;t<i.length;){let e=i[t++],o=i[t++];r>=e&&s<=o&&(n=!0)}})),n}(o.changes,t.changes)||\"input.type.compose\"==i)?_h(r,r.length-1,s,new qh(t.changes.compose(o.changes),jh(t.effects,o.effects),o.mapped,o.startSelection,Uh)):_h(r,r.length,s,t),new Xh(r,Uh,e,i)}addSelection(t,e,i,n){let s=this.done.length?this.done[this.done.length-1].selectionsAfter:Uh;return s.length>0&&e-this.prevTime<n&&i==this.prevUserEvent&&i&&/^select($|\\.)/.test(i)&&(r=s[s.length-1],o=t,r.ranges.length==o.ranges.length&&0===r.ranges.filter(((t,e)=>t.empty!=o.ranges[e].empty)).length)?this:new Xh($h(this.done,t),this.undone,e,i);var r,o}addMapping(t){return new Xh(Gh(this.done,t),Gh(this.undone,t),this.prevTime,this.prevUserEvent)}pop(t,e,i){let n=0==t?this.done:this.undone;if(0==n.length)return null;let s=n[n.length-1];if(i&&s.selectionsAfter.length)return e.update({selection:s.selectionsAfter[s.selectionsAfter.length-1],annotations:Eh.of({side:t,rest:Kh(n)}),userEvent:0==t?\"select.undo\":\"select.redo\",scrollIntoView:!0});if(s.changes){let i=1==n.length?Uh:n.slice(0,n.length-1);return s.mapped&&(i=Gh(i,s.mapped)),e.update({changes:s.changes,selection:s.startSelection,effects:s.effects,annotations:Eh.of({side:t,rest:i}),filter:!1,userEvent:0==t?\"undo\":\"redo\",scrollIntoView:!0})}return null}}Xh.empty=new Xh(Uh,Uh);const Qh=[{key:\"Mod-z\",run:Hh,preventDefault:!0},{key:\"Mod-y\",mac:\"Mod-Shift-z\",run:Wh,preventDefault:!0},{key:\"Mod-u\",run:zh,preventDefault:!0},{key:\"Alt-u\",mac:\"Mod-Shift-u\",run:Fh,preventDefault:!0}];function Zh(t,e){let i=t.posAtCoords({x:e.clientX,y:e.clientY},!1),n=t.state.doc.lineAt(i),s=i-n.from,r=s>2e3?-1:s==n.length?function(t,e){let i=t.coordsAtPos(t.viewport.from);return i?Math.round(Math.abs((i.left-e)/t.defaultCharacterWidth)):-1}(t,e.clientX):u(n.text,t.state.tabSize,i-n.from);return{line:n.number,col:r,off:s}}function ta(t,e){let i=Zh(t,e),n=t.state.selection;return i?{update(t){if(t.docChanged){let e=t.changes.mapPos(t.startState.doc.line(i.line).from),s=t.state.doc.lineAt(e);i={line:s.number,col:i.col,off:Math.min(i.off,s.length)},n=n.map(t.changes)}},get(e,s,r){let o=Zh(t,e);if(!o)return n;let l=function(t,e,i){let n=Math.min(e.line,i.line),s=Math.max(e.line,i.line),r=[];if(e.off>2e3||i.off>2e3||e.col<0||i.col<0){let o=Math.min(e.off,i.off),l=Math.max(e.off,i.off);for(let e=n;e<=s;e++){let i=t.doc.line(e);i.length<=l&&r.push(B.range(i.from+o,i.to+l))}}else{let o=Math.min(e.col,i.col),l=Math.max(e.col,i.col);for(let e=n;e<=s;e++){let i=t.doc.line(e),n=f(i.text,o,t.tabSize,!0);if(n>-1){let e=f(i.text,l,t.tabSize);r.push(B.range(i.from+n,i.from+e))}}}return r}(t.state,i,o);return l.length?r?B.create(l.concat(n.ranges)):B.create(l):n}}:null}function ea(t){let e=(null==t?void 0:t.eventFilter)||(t=>t.altKey&&0==t.button);return Rs.mouseSelectionStyle.of(((t,i)=>e(i)?ta(t,i):null))}const ia=V.define({combine(t){let e,i;for(let n of t)e=e||n.topContainer,i=i||n.bottomContainer;return{topContainer:e,bottomContainer:i}}});function na(t,e){let i=t.plugin(sa),n=i?i.specs.indexOf(e):-1;return n>-1?i.panels[n]:null}const sa=Li.fromClass(class{constructor(t){this.input=t.state.facet(ha),this.specs=this.input.filter((t=>t)),this.panels=this.specs.map((e=>e(t)));let e=t.state.facet(ia);this.top=new ra(t,!0,e.topContainer),this.bottom=new ra(t,!1,e.bottomContainer),this.top.sync(this.panels.filter((t=>t.top))),this.bottom.sync(this.panels.filter((t=>!t.top)));for(let t of this.panels)t.dom.classList.add(\"cm-panel\"),t.mount&&t.mount()}update(t){let e=t.state.facet(ia);this.top.container!=e.topContainer&&(this.top.sync([]),this.top=new ra(t.view,!0,e.topContainer)),this.bottom.container!=e.bottomContainer&&(this.bottom.sync([]),this.bottom=new ra(t.view,!1,e.bottomContainer)),this.top.syncClasses(),this.bottom.syncClasses();let i=t.state.facet(ha);if(i!=this.input){let e=i.filter((t=>t)),n=[],s=[],r=[],o=[];for(let i of e){let e,l=this.specs.indexOf(i);l<0?(e=i(t.view),o.push(e)):(e=this.panels[l],e.update&&e.update(t)),n.push(e),(e.top?s:r).push(e)}this.specs=e,this.panels=n,this.top.sync(s),this.bottom.sync(r);for(let t of o)t.dom.classList.add(\"cm-panel\"),t.mount&&t.mount()}else for(let e of this.panels)e.update&&e.update(t)}destroy(){this.top.sync([]),this.bottom.sync([])}},{provide:Ti.scrollMargins.from((t=>({top:t.top.scrollMargin(),bottom:t.bottom.scrollMargin()})))});class ra{constructor(t,e,i){this.view=t,this.top=e,this.container=i,this.dom=void 0,this.classes=\"\",this.panels=[],this.syncClasses()}sync(t){for(let e of this.panels)e.destroy&&t.indexOf(e)<0&&e.destroy();this.panels=t,this.syncDOM()}syncDOM(){if(0==this.panels.length)return void(this.dom&&(this.dom.remove(),this.dom=void 0));if(!this.dom){this.dom=document.createElement(\"div\"),this.dom.className=this.top?\"cm-panels cm-panels-top\":\"cm-panels cm-panels-bottom\",this.dom.style[this.top?\"top\":\"bottom\"]=\"0\";let t=this.container||this.view.dom;t.insertBefore(this.dom,this.top?t.firstChild:null)}let t=this.dom.firstChild;for(let e of this.panels)if(e.dom.parentNode==this.dom){for(;t!=e.dom;)t=oa(t);t=t.nextSibling}else this.dom.insertBefore(e.dom,t);for(;t;)t=oa(t)}scrollMargin(){return!this.dom||this.container?0:Math.max(0,this.top?this.dom.getBoundingClientRect().bottom-Math.max(0,this.view.scrollDOM.getBoundingClientRect().top):Math.min(innerHeight,this.view.scrollDOM.getBoundingClientRect().bottom)-this.dom.getBoundingClientRect().top)}syncClasses(){if(this.container&&this.classes!=this.view.themeClasses){for(let t of this.classes.split(\" \"))t&&this.container.classList.remove(t);for(let t of(this.classes=this.view.themeClasses).split(\" \"))t&&this.container.classList.add(t)}}}function oa(t){let e=t.nextSibling;return t.remove(),e}const la=Rs.baseTheme({\".cm-panels\":{boxSizing:\"border-box\",position:\"sticky\",left:0,right:0},\"&light .cm-panels\":{backgroundColor:\"#f5f5f5\",color:\"black\"},\"&light .cm-panels-top\":{borderBottom:\"1px solid #ddd\"},\"&light .cm-panels-bottom\":{borderTop:\"1px solid #ddd\"},\"&dark .cm-panels\":{backgroundColor:\"#333338\",color:\"white\"}}),ha=V.define({enables:[sa,la]});function aa(){var t=arguments[0];\"string\"==typeof t&&(t=document.createElement(t));var e=1,i=arguments[1];if(i&&\"object\"==typeof i&&null==i.nodeType&&!Array.isArray(i)){for(var n in i)if(Object.prototype.hasOwnProperty.call(i,n)){var s=i[n];\"string\"==typeof s?t.setAttribute(n,s):null!=s&&(t[n]=s)}e++}for(;e<arguments.length;e++)ca(t,arguments[e]);return t}function ca(t,e){if(\"string\"==typeof e)t.appendChild(document.createTextNode(e));else if(null==e);else if(null!=e.nodeType)t.appendChild(e);else{if(!Array.isArray(e))throw new RangeError(\"Unsupported child node: \"+e);for(var i=0;i<e.length;i++)ca(t,e[i])}}const ua=\"function\"==typeof String.prototype.normalize?t=>t.normalize(\"NFKD\"):t=>t;class fa{constructor(t,e,i=0,n=t.length,s){this.value={from:0,to:0},this.done=!1,this.matches=[],this.buffer=\"\",this.bufferPos=0,this.iter=t.iterRange(i,n),this.bufferStart=i,this.normalize=s?t=>s(ua(t)):ua,this.query=this.normalize(e)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return h(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let t=this.peek();if(t<0)return this.done=!0,this;let e=a(t),i=this.bufferStart+this.bufferPos;this.bufferPos+=c(t);let n=this.normalize(e);for(let t=0,s=i;;t++){let r=n.charCodeAt(t),o=this.match(r,s);if(o)return this.value=o,this;if(t==n.length-1)break;s==i&&t<e.length&&e.charCodeAt(t)==r&&s++}}}match(t,e){let i=null;for(let n=0;n<this.matches.length;n+=2){let s=this.matches[n],r=!1;this.query.charCodeAt(s)==t&&(s==this.query.length-1?i={from:this.matches[n+1],to:e+1}:(this.matches[n]++,r=!0)),r||(this.matches.splice(n,2),n-=2)}return this.query.charCodeAt(0)==t&&(1==this.query.length?i={from:e,to:e+1}:this.matches.push(1,e)),i}}\"undefined\"!=typeof Symbol&&(fa.prototype[Symbol.iterator]=function(){return this});const da={from:-1,to:-1,match:/.*/.exec(\"\")},pa=\"gm\"+(null==/x/.unicode?\"\":\"u\");class ma{constructor(t,e,i,n=0,s=t.length){if(this.to=s,this.curLine=\"\",this.done=!1,this.value=da,/\\\\[sWDnr]|\\n|\\r|\\[\\^/.test(e))return new wa(t,e,i,n,s);this.re=new RegExp(e,pa+((null==i?void 0:i.ignoreCase)?\"i\":\"\")),this.iter=t.iter();let r=t.lineAt(n);this.curLineStart=r.from,this.matchPos=n,this.getLine(this.curLineStart)}getLine(t){this.iter.next(t),this.iter.lineBreak?this.curLine=\"\":(this.curLine=this.iter.value,this.curLineStart+this.curLine.length>this.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine=\"\":this.getLine(0)}next(){for(let t=this.matchPos-this.curLineStart;;){this.re.lastIndex=t;let e=this.matchPos<=this.to&&this.re.exec(this.curLine);if(e){let i=this.curLineStart+e.index,n=i+e[0].length;if(this.matchPos=n+(i==n?1:0),i==this.curLine.length&&this.nextLine(),i<n||i>this.value.to)return this.value={from:i,to:n,match:e},this;t=this.matchPos-this.curLineStart}else{if(!(this.curLineStart+this.curLine.length<this.to))return this.done=!0,this;this.nextLine(),t=0}}}}const ga=new WeakMap;class va{constructor(t,e){this.from=t,this.text=e}get to(){return this.from+this.text.length}static get(t,e,i){let n=ga.get(t);if(!n||n.from>=i||n.to<=e){let n=new va(e,t.sliceString(e,i));return ga.set(t,n),n}if(n.from==e&&n.to==i)return n;let{text:s,from:r}=n;return r>e&&(s=t.sliceString(e,r)+s,r=e),n.to<i&&(s+=t.sliceString(n.to,i)),ga.set(t,new va(r,s)),new va(e,s.slice(e-r,i-r))}}class wa{constructor(t,e,i,n,s){this.text=t,this.to=s,this.done=!1,this.value=da,this.matchPos=n,this.re=new RegExp(e,pa+((null==i?void 0:i.ignoreCase)?\"i\":\"\")),this.flat=va.get(t,n,this.chunkEnd(n+5e3))}chunkEnd(t){return t>=this.to?this.to:this.text.lineAt(t).to}next(){for(;;){let t=this.re.lastIndex=this.matchPos-this.flat.from,e=this.re.exec(this.flat.text);if(e&&!e[0]&&e.index==t&&(this.re.lastIndex=t+1,e=this.re.exec(this.flat.text)),e&&this.flat.to<this.to&&e.index+e[0].length>this.flat.text.length-10&&(e=null),e){let t=this.flat.from+e.index,i=t+e[0].length;return this.value={from:t,to:i,match:e},this.matchPos=i+(t==i?1:0),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=va.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+2*this.flat.text.length))}}}function ya(t){let e=aa(\"input\",{class:\"cm-textfield\",name:\"line\"});function i(){let i=/^([+-])?(\\d+)?(:\\d+)?(%)?$/.exec(e.value);if(!i)return;let{state:n}=t,s=n.doc.lineAt(n.selection.main.head),[,r,o,l,h]=i,a=l?+l.slice(1):0,c=o?+o:s.number;if(o&&h){let t=c/100;r&&(t=t*(\"-\"==r?-1:1)+s.number/n.doc.lines),c=Math.round(n.doc.lines*t)}else o&&r&&(c=c*(\"-\"==r?-1:1)+s.number);let u=n.doc.line(Math.max(1,Math.min(n.doc.lines,c)));t.dispatch({effects:ba.of(!1),selection:B.cursor(u.from+Math.max(0,Math.min(a,u.length))),scrollIntoView:!0}),t.focus()}return{dom:aa(\"form\",{class:\"cm-gotoLine\",onkeydown:e=>{27==e.keyCode?(e.preventDefault(),t.dispatch({effects:ba.of(!1)}),t.focus()):13==e.keyCode&&(e.preventDefault(),i())},onsubmit:t=>{t.preventDefault(),i()}},aa(\"label\",t.state.phrase(\"Go to line\"),\": \",e),\" \",aa(\"button\",{class:\"cm-button\",type:\"submit\"},t.state.phrase(\"go\"))),pos:-10}}\"undefined\"!=typeof Symbol&&(ma.prototype[Symbol.iterator]=wa.prototype[Symbol.iterator]=function(){return this});const ba=dt.define(),xa=_.define({create:()=>!0,update(t,e){for(let i of e.effects)i.is(ba)&&(t=i.value);return t},provide:t=>ha.from(t,(t=>t?ya:null))}),ka=Rs.baseTheme({\".cm-panel.cm-gotoLine\":{padding:\"2px 6px 4px\",\"& label\":{fontSize:\"80%\"}}}),Sa={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!0},Aa=V.define({combine:t=>Mt(t,Sa,{highlightWordAroundCursor:(t,e)=>t||e,minSelectionLength:Math.min,maxMatches:Math.min})});function Ca(t){let e=[Ra,Ta];return t&&e.push(Aa.of(t)),e}const Ma=si.mark({class:\"cm-selectionMatch\"}),Da=si.mark({class:\"cm-selectionMatch cm-selectionMatch-main\"});function Oa(t,e,i,n){return!(0!=i&&t(e.sliceDoc(i-1,i))==xt.Word||n!=e.doc.length&&t(e.sliceDoc(n,n+1))==xt.Word)}const Ta=Li.fromClass(class{constructor(t){this.decorations=this.getDeco(t)}update(t){(t.selectionSet||t.docChanged||t.viewportChanged)&&(this.decorations=this.getDeco(t.view))}getDeco(t){let e=t.state.facet(Aa),{state:i}=t,n=i.selection;if(n.ranges.length>1)return si.none;let s,r=n.main,o=null;if(r.empty){if(!e.highlightWordAroundCursor)return si.none;let t=i.wordAt(r.head);if(!t)return si.none;o=i.charCategorizer(r.head),s=i.sliceDoc(t.from,t.to)}else{let t=r.to-r.from;if(t<e.minSelectionLength||t>200)return si.none;if(e.wholeWords){if(s=i.sliceDoc(r.from,r.to),o=i.charCategorizer(r.head),!Oa(o,i,r.from,r.to)||!function(t,e,i,n){return t(e.sliceDoc(i,i+1))==xt.Word&&t(e.sliceDoc(n-1,n))==xt.Word}(o,i,r.from,r.to))return si.none}else if(s=i.sliceDoc(r.from,r.to).trim(),!s)return si.none}let l=[];for(let n of t.visibleRanges){let t=new fa(i.doc,s,n.from,n.to);for(;!t.next().done;){let{from:n,to:s}=t.value;if((!o||Oa(o,i,n,s))&&(r.empty&&n<=r.from&&s>=r.to?l.push(Da.range(n,s)):(n>=r.to||s<=r.from)&&l.push(Ma.range(n,s)),l.length>e.maxMatches))return si.none}}return si.set(l)}},{decorations:t=>t.decorations}),Ra=Rs.baseTheme({\".cm-selectionMatch\":{backgroundColor:\"#99ff7780\"},\".cm-searchMatch .cm-selectionMatch\":{backgroundColor:\"transparent\"}});const Ea=V.define({combine(t){var e;return{top:t.reduce(((t,e)=>null!=t?t:e.top),void 0)||!1,caseSensitive:t.reduce(((t,e)=>null!=t?t:e.caseSensitive||e.matchCase),void 0)||!1,createPanel:(null===(e=t.find((t=>t.createPanel)))||void 0===e?void 0:e.createPanel)||(t=>new ic(t))}}});class La{constructor(t){this.search=t.search,this.caseSensitive=!!t.caseSensitive,this.regexp=!!t.regexp,this.replace=t.replace||\"\",this.valid=!!this.search&&(!this.regexp||function(t){try{return new RegExp(t,pa),!0}catch(t){return!1}}(this.search)),this.unquoted=this.search.replace(/\\\\([nrt\\\\])/g,((t,e)=>\"n\"==e?\"\\n\":\"r\"==e?\"\\r\":\"t\"==e?\"\\t\":\"\\\\\"))}eq(t){return this.search==t.search&&this.replace==t.replace&&this.caseSensitive==t.caseSensitive&&this.regexp==t.regexp}create(){return this.regexp?new Va(this):new Na(this)}getCursor(t,e=0,i=t.length){return this.regexp?Ia(this,t,e,i):Pa(this,t,e,i)}}class Ba{constructor(t){this.spec=t}}function Pa(t,e,i,n){return new fa(e,t.unquoted,i,n,t.caseSensitive?void 0:t=>t.toLowerCase())}class Na extends Ba{constructor(t){super(t)}nextMatch(t,e,i){let n=Pa(this.spec,t,i,t.length).nextOverlapping();return n.done&&(n=Pa(this.spec,t,0,e).nextOverlapping()),n.done?null:n.value}prevMatchInRange(t,e,i){for(let n=i;;){let i=Math.max(e,n-1e4-this.spec.unquoted.length),s=Pa(this.spec,t,i,n),r=null;for(;!s.nextOverlapping().done;)r=s.value;if(r)return r;if(i==e)return null;n-=1e4}}prevMatch(t,e,i){return this.prevMatchInRange(t,0,e)||this.prevMatchInRange(t,i,t.length)}getReplacement(t){return this.spec.replace}matchAll(t,e){let i=Pa(this.spec,t,0,t.length),n=[];for(;!i.next().done;){if(n.length>=e)return null;n.push(i.value)}return n}highlight(t,e,i,n){let s=Pa(this.spec,t,Math.max(0,e-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,t.length));for(;!s.next().done;)n(s.value.from,s.value.to)}}function Ia(t,e,i,n){return new ma(e,t.search,t.caseSensitive?void 0:{ignoreCase:!0},i,n)}class Va extends Ba{nextMatch(t,e,i){let n=Ia(this.spec,t,i,t.length).next();return n.done&&(n=Ia(this.spec,t,0,e).next()),n.done?null:n.value}prevMatchInRange(t,e,i){for(let n=1;;n++){let s=Math.max(e,i-1e4*n),r=Ia(this.spec,t,s,i),o=null;for(;!r.next().done;)o=r.value;if(o&&(s==e||o.from>s+10))return o;if(s==e)return null}}prevMatch(t,e,i){return this.prevMatchInRange(t,0,e)||this.prevMatchInRange(t,i,t.length)}getReplacement(t){return this.spec.replace.replace(/\\$([$&\\d+])/g,((e,i)=>\"$\"==i?\"$\":\"&\"==i?t.match[0]:\"0\"!=i&&+i<t.match.length?t.match[i]:e))}matchAll(t,e){let i=Ia(this.spec,t,0,t.length),n=[];for(;!i.next().done;){if(n.length>=e)return null;n.push(i.value)}return n}highlight(t,e,i,n){let s=Ia(this.spec,t,Math.max(0,e-250),Math.min(i+250,t.length));for(;!s.next().done;)n(s.value.from,s.value.to)}}const Ha=dt.define(),Wa=dt.define(),za=_.define({create:t=>new Fa(Qa(t).create(),null),update(t,e){for(let i of e.effects)i.is(Ha)?t=new Fa(i.value.create(),t.panel):i.is(Wa)&&(t=new Fa(t.query,i.value?Xa:null));return t},provide:t=>ha.from(t,(t=>t.panel))});class Fa{constructor(t,e){this.query=t,this.panel=e}}const qa=si.mark({class:\"cm-searchMatch\"}),_a=si.mark({class:\"cm-searchMatch cm-searchMatch-selected\"}),ja=Li.fromClass(class{constructor(t){this.view=t,this.decorations=this.highlight(t.state.field(za))}update(t){let e=t.state.field(za);(e!=t.startState.field(za)||t.docChanged||t.selectionSet||t.viewportChanged)&&(this.decorations=this.highlight(e))}highlight({query:t,panel:e}){if(!e||!t.spec.valid)return si.none;let{view:i}=this,n=new Ht;for(let e=0,s=i.visibleRanges,r=s.length;e<r;e++){let{from:o,to:l}=s[e];for(;e<r-1&&l>s[e+1].from-500;)l=s[++e].to;t.highlight(i.state.doc,o,l,((t,e)=>{let s=i.state.selection.ranges.some((i=>i.from==t&&i.to==e));n.add(t,e,s?_a:qa)}))}return n.finish()}},{decorations:t=>t.decorations});function Ua(t){return e=>{let i=e.state.field(za,!1);return i&&i.query.spec.valid?t(e,i):Za(e)}}const $a=Ua(((t,{query:e})=>{let{from:i,to:n}=t.state.selection.main,s=e.nextMatch(t.state.doc,i,n);return!(!s||s.from==i&&s.to==n)&&(t.dispatch({selection:{anchor:s.from,head:s.to},scrollIntoView:!0,effects:rc(t,s),userEvent:\"select.search\"}),!0)})),Ka=Ua(((t,{query:e})=>{let{state:i}=t,{from:n,to:s}=i.selection.main,r=e.prevMatch(i.doc,n,s);return!!r&&(t.dispatch({selection:{anchor:r.from,head:r.to},scrollIntoView:!0,effects:rc(t,r),userEvent:\"select.search\"}),!0)})),Ga=Ua(((t,{query:e})=>{let i=e.matchAll(t.state.doc,1e3);return!(!i||!i.length)&&(t.dispatch({selection:B.create(i.map((t=>B.range(t.from,t.to)))),userEvent:\"select.search.matches\"}),!0)})),Ja=Ua(((t,{query:e})=>{let{state:i}=t,{from:n,to:s}=i.selection.main;if(i.readOnly)return!1;let r=e.nextMatch(i.doc,n,n);if(!r)return!1;let o,l,h=[];if(r.from==n&&r.to==s&&(l=i.toText(e.getReplacement(r)),h.push({from:r.from,to:r.to,insert:l}),r=e.nextMatch(i.doc,r.from,r.to)),r){let t=0==h.length||h[0].from>=r.to?0:r.to-r.from-l.length;o={anchor:r.from-t,head:r.to-t}}return t.dispatch({changes:h,selection:o,scrollIntoView:!!o,effects:r?rc(t,r):void 0,userEvent:\"input.replace\"}),!0})),Ya=Ua(((t,{query:e})=>{if(t.state.readOnly)return!1;let i=e.matchAll(t.state.doc,1e9).map((t=>{let{from:i,to:n}=t;return{from:i,to:n,insert:e.getReplacement(t)}}));return!!i.length&&(t.dispatch({changes:i,userEvent:\"input.replace.all\"}),!0)}));function Xa(t){return t.state.facet(Ea).createPanel(t)}function Qa(t,e){var i;let n=t.selection.main,s=n.empty||n.to>n.from+100?\"\":t.sliceDoc(n.from,n.to),r=null!==(i=null==e?void 0:e.caseSensitive)&&void 0!==i?i:t.facet(Ea).caseSensitive;return e&&!s?e:new La({search:s.replace(/\\n/g,\"\\\\n\"),caseSensitive:r})}const Za=t=>{let e=t.state.field(za,!1);if(e&&e.panel){let i=na(t,Xa);if(!i)return!1;let n=i.dom.querySelector(\"[name=search]\");if(n!=t.root.activeElement){let i=Qa(t.state,e.query.spec);i.valid&&t.dispatch({effects:Ha.of(i)}),n.focus(),n.select()}}else t.dispatch({effects:[Wa.of(!0),e?Ha.of(Qa(t.state,e.query.spec)):dt.appendConfig.of(lc)]});return!0},tc=t=>{let e=t.state.field(za,!1);if(!e||!e.panel)return!1;let i=na(t,Xa);return i&&i.dom.contains(t.root.activeElement)&&t.focus(),t.dispatch({effects:Wa.of(!1)}),!0},ec=[{key:\"Mod-f\",run:Za,scope:\"editor search-panel\"},{key:\"F3\",run:$a,shift:Ka,scope:\"editor search-panel\",preventDefault:!0},{key:\"Mod-g\",run:$a,shift:Ka,scope:\"editor search-panel\",preventDefault:!0},{key:\"Escape\",run:tc,scope:\"editor search-panel\"},{key:\"Mod-Shift-l\",run:({state:t,dispatch:e})=>{let i=t.selection;if(i.ranges.length>1||i.main.empty)return!1;let{from:n,to:s}=i.main,r=[],o=0;for(let e=new fa(t.doc,t.sliceDoc(n,s));!e.next().done;){if(r.length>1e3)return!1;e.value.from==n&&(o=r.length),r.push(B.range(e.value.from,e.value.to))}return e(t.update({selection:B.create(r,o),userEvent:\"select.search.matches\"})),!0}},{key:\"Alt-g\",run:t=>{let e=na(t,ya);if(!e){let i=[ba.of(!0)];null==t.state.field(xa,!1)&&i.push(dt.appendConfig.of([xa,ka])),t.dispatch({effects:i}),e=na(t,ya)}return e&&e.dom.querySelector(\"input\").focus(),!0}},{key:\"Mod-d\",run:({state:t,dispatch:e})=>{let{ranges:i}=t.selection;if(i.some((t=>t.from===t.to)))return(({state:t,dispatch:e})=>{let{selection:i}=t,n=B.create(i.ranges.map((e=>t.wordAt(e.head)||B.cursor(e.head))),i.mainIndex);return!n.eq(i)&&(e(t.update({selection:n})),!0)})({state:t,dispatch:e});let n=t.sliceDoc(i[0].from,i[0].to);if(t.selection.ranges.some((e=>t.sliceDoc(e.from,e.to)!=n)))return!1;let s=function(t,e){let{main:i,ranges:n}=t.selection,s=t.wordAt(i.head),r=s&&s.from==i.from&&s.to==i.to;for(let i=!1,s=new fa(t.doc,e,n[n.length-1].to);;){if(s.next(),!s.done){if(i&&n.some((t=>t.from==s.value.from)))continue;if(r){let e=t.wordAt(s.value.from);if(!e||e.from!=s.value.from||e.to!=s.value.to)continue}return s.value}if(i)return null;s=new fa(t.doc,e,0,Math.max(0,n[n.length-1].from-1)),i=!0}}(t,n);return!!s&&(e(t.update({selection:t.selection.addRange(B.range(s.from,s.to),!1),effects:Rs.scrollIntoView(s.to)})),!0)},preventDefault:!0}];class ic{constructor(t){this.view=t;let e=this.query=t.state.field(za).query.spec;function i(t,e,i){return aa(\"button\",{class:\"cm-button\",name:t,onclick:e,type:\"button\"},i)}this.commit=this.commit.bind(this),this.searchField=aa(\"input\",{value:e.search,placeholder:nc(t,\"Find\"),\"aria-label\":nc(t,\"Find\"),class:\"cm-textfield\",name:\"search\",onchange:this.commit,onkeyup:this.commit}),this.replaceField=aa(\"input\",{value:e.replace,placeholder:nc(t,\"Replace\"),\"aria-label\":nc(t,\"Replace\"),class:\"cm-textfield\",name:\"replace\",onchange:this.commit,onkeyup:this.commit}),this.caseField=aa(\"input\",{type:\"checkbox\",name:\"case\",checked:e.caseSensitive,onchange:this.commit}),this.reField=aa(\"input\",{type:\"checkbox\",name:\"re\",checked:e.regexp,onchange:this.commit}),this.dom=aa(\"div\",{onkeydown:t=>this.keydown(t),class:\"cm-search\"},[this.searchField,i(\"next\",(()=>$a(t)),[nc(t,\"next\")]),i(\"prev\",(()=>Ka(t)),[nc(t,\"previous\")]),i(\"select\",(()=>Ga(t)),[nc(t,\"all\")]),aa(\"label\",null,[this.caseField,nc(t,\"match case\")]),aa(\"label\",null,[this.reField,nc(t,\"regexp\")]),...t.state.readOnly?[]:[aa(\"br\"),this.replaceField,i(\"replace\",(()=>Ja(t)),[nc(t,\"replace\")]),i(\"replaceAll\",(()=>Ya(t)),[nc(t,\"replace all\")]),aa(\"button\",{name:\"close\",onclick:()=>tc(t),\"aria-label\":nc(t,\"close\"),type:\"button\"},[\"×\"])]])}commit(){let t=new La({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,replace:this.replaceField.value});t.eq(this.query)||(this.query=t,this.view.dispatch({effects:Ha.of(t)}))}keydown(t){var e,i,n;e=this.view,i=t,n=\"search-panel\",_s(Fs(e.state),i,e,n)?t.preventDefault():13==t.keyCode&&t.target==this.searchField?(t.preventDefault(),(t.shiftKey?Ka:$a)(this.view)):13==t.keyCode&&t.target==this.replaceField&&(t.preventDefault(),Ja(this.view))}update(t){for(let e of t.transactions)for(let t of e.effects)t.is(Ha)&&!t.value.eq(this.query)&&this.setQuery(t.value)}setQuery(t){this.query=t,this.searchField.value=t.search,this.replaceField.value=t.replace,this.caseField.checked=t.caseSensitive,this.reField.checked=t.regexp}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(Ea).top}}function nc(t,e){return t.state.phrase(e)}const sc=/[\\s\\.,:;?!]/;function rc(t,{from:e,to:i}){let n=t.state.doc.lineAt(e).from,s=t.state.doc.lineAt(i).to,r=Math.max(n,e-30),o=Math.min(s,i+30),l=t.state.sliceDoc(r,o);if(r!=n)for(let t=0;t<30;t++)if(!sc.test(l[t+1])&&sc.test(l[t])){l=l.slice(t);break}if(o!=s)for(let t=l.length-1;t>l.length-30;t--)if(!sc.test(l[t-1])&&sc.test(l[t])){l=l.slice(0,t);break}return Rs.announce.of(`${t.state.phrase(\"current match\")}. ${l} ${t.state.phrase(\"on line\")} ${t.state.doc.lineAt(e).number}`)}const oc=Rs.baseTheme({\".cm-panel.cm-search\":{padding:\"2px 6px 4px\",position:\"relative\",\"& [name=close]\":{position:\"absolute\",top:\"0\",right:\"4px\",backgroundColor:\"inherit\",border:\"none\",font:\"inherit\",padding:0,margin:0},\"& input, & button, & label\":{margin:\".2em .6em .2em 0\"},\"& input[type=checkbox]\":{marginRight:\".2em\"},\"& label\":{fontSize:\"80%\",whiteSpace:\"pre\"}},\"&light .cm-searchMatch\":{backgroundColor:\"#ffff0054\"},\"&dark .cm-searchMatch\":{backgroundColor:\"#00ffff8a\"},\"&light .cm-searchMatch-selected\":{backgroundColor:\"#ff6a0054\"},\"&dark .cm-searchMatch-selected\":{backgroundColor:\"#ff00ff8a\"}}),lc=[za,Y.lowest(ja),oc],hc=\"undefined\"!=typeof navigator&&!/Edge\\/(\\d+)/.exec(navigator.userAgent)&&/Apple Computer/.test(navigator.vendor)&&(/Mobile\\/\\w+/.test(navigator.userAgent)||navigator.maxTouchPoints>2);class ac{constructor(t,e,i){this.facet=e,this.createTooltipView=i,this.input=t.state.facet(e),this.tooltips=this.input.filter((t=>t)),this.tooltipViews=this.tooltips.map(i)}update(t){let e=t.state.facet(this.facet),i=e.filter((t=>t));if(e===this.input){for(let e of this.tooltipViews)e.update&&e.update(t);return!1}let n=[];for(let e=0;e<i.length;e++){let s=i[e],r=-1;if(s){for(let t=0;t<this.tooltips.length;t++){let e=this.tooltips[t];e&&e.create==s.create&&(r=t)}if(r<0)n[e]=this.createTooltipView(s);else{let i=n[e]=this.tooltipViews[r];i.update&&i.update(t)}}}for(let t of this.tooltipViews)n.indexOf(t)<0&&t.dom.remove();return this.input=e,this.tooltips=i,this.tooltipViews=n,!0}}function cc(){return{top:0,left:0,bottom:innerHeight,right:innerWidth}}const uc=V.define({combine:t=>{var e,i,n;return{position:hc?\"absolute\":(null===(e=t.find((t=>t.position)))||void 0===e?void 0:e.position)||\"fixed\",parent:(null===(i=t.find((t=>t.parent)))||void 0===i?void 0:i.parent)||null,tooltipSpace:(null===(n=t.find((t=>t.tooltipSpace)))||void 0===n?void 0:n.tooltipSpace)||cc}}}),fc=Li.fromClass(class{constructor(t){var e;this.view=t,this.inView=!0,this.lastTransaction=0,this.measureTimeout=-1;let i=t.state.facet(uc);this.position=i.position,this.parent=i.parent,this.classes=t.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.manager=new ac(t,mc,(t=>this.createTooltip(t))),this.intersectionObserver=\"function\"==typeof IntersectionObserver?new IntersectionObserver((t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()}),{threshold:[1]}):null,this.observeIntersection(),null===(e=t.dom.ownerDocument.defaultView)||void 0===e||e.addEventListener(\"resize\",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement(\"div\"),this.container.style.position=\"relative\",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let t of this.manager.tooltipViews)this.intersectionObserver.observe(t.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout((()=>{this.measureTimeout=-1,this.maybeMeasure()}),50))}update(t){t.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(t);e&&this.observeIntersection();let i=e||t.geometryChanged,n=t.state.facet(uc);if(n.position!=this.position){this.position=n.position;for(let t of this.manager.tooltipViews)t.dom.style.position=this.position;i=!0}if(n.parent!=this.parent){this.parent&&this.container.remove(),this.parent=n.parent,this.createContainer();for(let t of this.manager.tooltipViews)this.container.appendChild(t.dom);i=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);i&&this.maybeMeasure()}createTooltip(t){let e=t.create(this.view);if(e.dom.classList.add(\"cm-tooltip\"),t.arrow&&!e.dom.querySelector(\".cm-tooltip > .cm-tooltip-arrow\")){let t=document.createElement(\"div\");t.className=\"cm-tooltip-arrow\",e.dom.appendChild(t)}return e.dom.style.position=this.position,e.dom.style.top=\"-10000px\",this.container.appendChild(e.dom),e.mount&&e.mount(this.view),e}destroy(){var t,e;null===(t=this.view.dom.ownerDocument.defaultView)||void 0===t||t.removeEventListener(\"resize\",this.measureSoon);for(let{dom:t}of this.manager.tooltipViews)t.remove();null===(e=this.intersectionObserver)||void 0===e||e.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let t=this.view.dom.getBoundingClientRect();return{editor:t,parent:this.parent?this.container.getBoundingClientRect():t,pos:this.manager.tooltips.map(((t,e)=>{let i=this.manager.tooltipViews[e];return i.getCoords?i.getCoords(t.pos):this.view.coordsAtPos(t.pos)})),size:this.manager.tooltipViews.map((({dom:t})=>t.getBoundingClientRect())),space:this.view.state.facet(uc).tooltipSpace(this.view)}}writeMeasure(t){let{editor:e,space:i}=t,n=[];for(let s=0;s<this.manager.tooltips.length;s++){let r=this.manager.tooltips[s],o=this.manager.tooltipViews[s],{dom:l}=o,h=t.pos[s],a=t.size[s];if(!h||h.bottom<=Math.max(e.top,i.top)||h.top>=Math.min(e.bottom,i.bottom)||h.right<Math.max(e.left,i.left)-.1||h.left>Math.min(e.right,i.right)+.1){l.style.top=\"-10000px\";continue}let c=r.arrow?o.dom.querySelector(\".cm-tooltip-arrow\"):null,u=c?7:0,f=a.right-a.left,d=a.bottom-a.top,p=o.offset||pc,m=this.view.textDirection==Fi.LTR,g=a.width>i.right-i.left?m?i.left:i.right-a.width:m?Math.min(h.left-(c?14:0)+p.x,i.right-f):Math.max(i.left,h.left-f+(c?14:0)-p.x),v=!!r.above;!r.strictSide&&(v?h.top-(a.bottom-a.top)-p.y<i.top:h.bottom+(a.bottom-a.top)+p.y>i.bottom)&&v==i.bottom-h.bottom>h.top-i.top&&(v=!v);let w=v?h.top-d-u-p.y:h.bottom+u+p.y,y=g+f;if(!0!==o.overlap)for(let t of n)t.left<y&&t.right>g&&t.top<w+d&&t.bottom>w&&(w=v?t.top-d-2-u:t.bottom+u+2);\"absolute\"==this.position?(l.style.top=w-t.parent.top+\"px\",l.style.left=g-t.parent.left+\"px\"):(l.style.top=w+\"px\",l.style.left=g+\"px\"),c&&(c.style.left=h.left+(m?p.x:-p.x)-(g+14-7)+\"px\"),!0!==o.overlap&&n.push({left:g,top:w,right:y,bottom:w+d}),l.classList.toggle(\"cm-tooltip-above\",v),l.classList.toggle(\"cm-tooltip-below\",!v),o.positioned&&o.positioned()}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let t of this.manager.tooltipViews)t.dom.style.top=\"-10000px\"}},{eventHandlers:{scroll(){this.maybeMeasure()}}}),dc=Rs.baseTheme({\".cm-tooltip\":{zIndex:100},\"&light .cm-tooltip\":{border:\"1px solid #bbb\",backgroundColor:\"#f5f5f5\"},\"&light .cm-tooltip-section:not(:first-child)\":{borderTop:\"1px solid #bbb\"},\"&dark .cm-tooltip\":{backgroundColor:\"#333338\",color:\"white\"},\".cm-tooltip-arrow\":{height:\"7px\",width:\"14px\",position:\"absolute\",zIndex:-1,overflow:\"hidden\",\"&:before, &:after\":{content:\"''\",position:\"absolute\",width:0,height:0,borderLeft:\"7px solid transparent\",borderRight:\"7px solid transparent\"},\".cm-tooltip-above &\":{bottom:\"-7px\",\"&:before\":{borderTop:\"7px solid #bbb\"},\"&:after\":{borderTop:\"7px solid #f5f5f5\",bottom:\"1px\"}},\".cm-tooltip-below &\":{top:\"-7px\",\"&:before\":{borderBottom:\"7px solid #bbb\"},\"&:after\":{borderBottom:\"7px solid #f5f5f5\",top:\"1px\"}}},\"&dark .cm-tooltip .cm-tooltip-arrow\":{\"&:before\":{borderTopColor:\"#333338\",borderBottomColor:\"#333338\"},\"&:after\":{borderTopColor:\"transparent\",borderBottomColor:\"transparent\"}}}),pc={x:0,y:0},mc=V.define({enables:[fc,dc]});class gc{constructor(t,e,i){this.state=t,this.pos=e,this.explicit=i,this.abortListeners=[]}tokenBefore(t){let e=Nr(this.state).resolveInner(this.pos,-1);for(;e&&t.indexOf(e.name)<0;)e=e.parent;return e?{from:e.from,to:this.pos,text:this.state.sliceDoc(e.from,this.pos),type:e.type}:null}matchBefore(t){let e=this.state.doc.lineAt(this.pos),i=Math.max(e.from,this.pos-250),n=e.text.slice(i-e.from,this.pos-e.from),s=n.search(xc(t,!1));return s<0?null:{from:i+s,to:this.pos,text:n.slice(s)}}get aborted(){return null==this.abortListeners}addEventListener(t,e){\"abort\"==t&&this.abortListeners&&this.abortListeners.push(e)}}function vc(t){let e=Object.keys(t).join(\"\"),i=/\\w/.test(e);return i&&(e=e.replace(/\\w/g,\"\")),`[${i?\"\\\\w\":\"\"}${e.replace(/[^\\w\\s]/g,\"\\\\$&\")}]`}function wc(t){let e=t.map((t=>\"string\"==typeof t?{label:t}:t)),[i,n]=e.every((t=>/^\\w+$/.test(t.label)))?[/\\w*$/,/\\w+$/]:function(t){let e=Object.create(null),i=Object.create(null);for(let{label:n}of t){e[n[0]]=!0;for(let t=1;t<n.length;t++)i[n[t]]=!0}let n=vc(e)+vc(i)+\"*$\";return[new RegExp(\"^\"+n),new RegExp(n)]}(e);return t=>{let s=t.matchBefore(n);return s||t.explicit?{from:s?s.from:t.pos,options:e,span:i}:null}}class yc{constructor(t,e,i){this.completion=t,this.source=e,this.match=i}}function bc(t){return t.selection.main.head}function xc(t,e){var i;let{source:n}=t,s=e&&\"^\"!=n[0],r=\"$\"!=n[n.length-1];return s||r?new RegExp(`${s?\"^\":\"\"}(?:${n})${r?\"$\":\"\"}`,null!==(i=t.flags)&&void 0!==i?i:t.ignoreCase?\"i\":\"\"):t}const kc=ct.define();function Sc(t,e){let i=e.completion.apply||e.completion.label,n=e.source;\"string\"==typeof i?t.dispatch({changes:{from:n.from,to:n.to,insert:i},selection:{anchor:n.from+i.length},userEvent:\"input.complete\",annotations:kc.of(e.completion)}):i(t,e.completion,n.from,n.to)}const Ac=new WeakMap;function Cc(t){if(!Array.isArray(t))return t;let e=Ac.get(t);return e||Ac.set(t,e=wc(t)),e}class Mc{constructor(t){this.pattern=t,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[];for(let e=0;e<t.length;){let i=h(t,e),n=c(i);this.chars.push(i);let s=t.slice(e,e+n),r=s.toUpperCase();this.folded.push(h(r==s?s.toLowerCase():r,0)),e+=n}this.astral=t.length!=this.chars.length}match(t){if(0==this.pattern.length)return[0];if(t.length<this.pattern.length)return null;let{chars:e,folded:i,any:n,precise:s,byWord:r}=this;if(1==e.length){let n=h(t,0);return n==e[0]?[0,0,c(n)]:n==i[0]?[-200,0,c(n)]:null}let o=t.indexOf(this.pattern);if(0==o)return[0,0,this.pattern.length];let l=e.length,u=0;if(o<0){for(let s=0,r=Math.min(t.length,200);s<r&&u<l;){let r=h(t,s);r!=e[u]&&r!=i[u]||(n[u++]=s),s+=c(r)}if(u<l)return null}let f=0,d=0,p=!1,m=0,g=-1,v=-1,w=/[a-z]/.test(t),y=!0;for(let n=0,u=Math.min(t.length,200),b=0;n<u&&d<l;){let u=h(t,n);o<0&&(f<l&&u==e[f]&&(s[f++]=n),m<l&&(u==e[m]||u==i[m]?(0==m&&(g=n),v=n+1,m++):m=0));let x,k=u<255?u>=48&&u<=57||u>=97&&u<=122?2:u>=65&&u<=90?1:0:(x=a(u))!=x.toLowerCase()?1:x!=x.toUpperCase()?2:0;(!n||1==k&&w||0==b&&0!=k)&&(e[d]==u||i[d]==u&&(p=!0)?r[d++]=n:r.length&&(y=!1)),b=k,n+=c(u)}return d==l&&0==r[0]&&y?this.result((p?-200:0)-100,r,t):m==l&&0==g?[-200-t.length,0,v]:o>-1?[-700-t.length,o,o+this.pattern.length]:m==l?[-900-t.length,g,v]:d==l?this.result((p?-200:0)-100-700+(y?0:-1100),r,t):2==e.length?null:this.result((n[0]?-700:0)-200-1100,n,t)}result(t,e,i){let n=[t-i.length],s=1;for(let t of e){let e=t+(this.astral?c(h(i,t)):1);s>1&&n[s-1]==t?n[s-1]=e:(n[s++]=t,n[s++]=e)}return n}}const Dc=V.define({combine:t=>Mt(t,{activateOnTyping:!0,override:null,maxRenderedOptions:100,defaultKeymap:!0,optionClass:()=>\"\",aboveCursor:!1,icons:!0,addToOptions:[]},{defaultKeymap:(t,e)=>t&&e,icons:(t,e)=>t&&e,optionClass:(t,e)=>i=>function(t,e){return t?e?t+\" \"+e:t:e}(t(i),e(i)),addToOptions:(t,e)=>t.concat(e)})});function Oc(t,e,i){if(t<=i)return{from:0,to:t};if(e<=t>>1){let t=Math.floor(e/i);return{from:t*i,to:(t+1)*i}}let n=Math.floor((t-e)/i);return{from:t-(n+1)*i,to:t-n*i}}class Tc{constructor(t,e){this.view=t,this.stateField=e,this.info=null,this.placeInfo={read:()=>this.measureInfo(),write:t=>this.positionInfo(t),key:this};let i=t.state.field(e),{options:n,selected:s}=i.open,r=t.state.facet(Dc);this.optionContent=function(t){let e=t.addToOptions.slice();return t.icons&&e.push({render(t){let e=document.createElement(\"div\");return e.classList.add(\"cm-completionIcon\"),t.type&&e.classList.add(...t.type.split(/\\s+/g).map((t=>\"cm-completionIcon-\"+t))),e.setAttribute(\"aria-hidden\",\"true\"),e},position:20}),e.push({render(t,e,i){let n=document.createElement(\"span\");n.className=\"cm-completionLabel\";let{label:s}=t,r=0;for(let t=1;t<i.length;){let e=i[t++],o=i[t++];e>r&&n.appendChild(document.createTextNode(s.slice(r,e)));let l=n.appendChild(document.createElement(\"span\"));l.appendChild(document.createTextNode(s.slice(e,o))),l.className=\"cm-completionMatchedText\",r=o}return r<s.length&&n.appendChild(document.createTextNode(s.slice(r))),n},position:50},{render(t){if(!t.detail)return null;let e=document.createElement(\"span\");return e.className=\"cm-completionDetail\",e.textContent=t.detail,e},position:80}),e.sort(((t,e)=>t.position-e.position)).map((t=>t.render))}(r),this.optionClass=r.optionClass,this.range=Oc(n.length,s,r.maxRenderedOptions),this.dom=document.createElement(\"div\"),this.dom.className=\"cm-tooltip-autocomplete\",this.dom.addEventListener(\"mousedown\",(e=>{for(let i,s=e.target;s&&s!=this.dom;s=s.parentNode)if(\"LI\"==s.nodeName&&(i=/-(\\d+)$/.exec(s.id))&&+i[1]<n.length)return Sc(t,n[+i[1]]),void e.preventDefault()})),this.list=this.dom.appendChild(this.createListBox(n,i.id,this.range)),this.list.addEventListener(\"scroll\",(()=>{this.info&&this.view.requestMeasure(this.placeInfo)}))}mount(){this.updateSel()}update(t){t.state.field(this.stateField)!=t.startState.field(this.stateField)&&this.updateSel()}positioned(){this.info&&this.view.requestMeasure(this.placeInfo)}updateSel(){let t=this.view.state.field(this.stateField),e=t.open;if((e.selected<this.range.from||e.selected>=this.range.to)&&(this.range=Oc(e.options.length,e.selected,this.view.state.facet(Dc).maxRenderedOptions),this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e.options,t.id,this.range)),this.list.addEventListener(\"scroll\",(()=>{this.info&&this.view.requestMeasure(this.placeInfo)}))),this.updateSelectedOption(e.selected)){this.info&&(this.info.remove(),this.info=null);let{completion:i}=e.options[e.selected],{info:n}=i;if(!n)return;let s=\"string\"==typeof n?document.createTextNode(n):n(i);if(!s)return;\"then\"in s?s.then((e=>{e&&this.view.state.field(this.stateField,!1)==t&&this.addInfoPane(e)})).catch((t=>Mi(this.view.state,t,\"completion info\"))):this.addInfoPane(s)}}addInfoPane(t){let e=this.info=document.createElement(\"div\");e.className=\"cm-tooltip cm-completionInfo\",e.appendChild(t),this.dom.appendChild(e),this.view.requestMeasure(this.placeInfo)}updateSelectedOption(t){let e=null;for(let i=this.list.firstChild,n=this.range.from;i;i=i.nextSibling,n++)n==t?i.hasAttribute(\"aria-selected\")||(i.setAttribute(\"aria-selected\",\"true\"),e=i):i.hasAttribute(\"aria-selected\")&&i.removeAttribute(\"aria-selected\");return e&&function(t,e){let i=t.getBoundingClientRect(),n=e.getBoundingClientRect();n.top<i.top?t.scrollTop-=i.top-n.top:n.bottom>i.bottom&&(t.scrollTop+=n.bottom-i.bottom)}(this.list,e),e}measureInfo(){let t=this.dom.querySelector(\"[aria-selected]\");if(!t||!this.info)return null;let e=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),n=t.getBoundingClientRect();if(n.top>Math.min(innerHeight,e.bottom)-10||n.bottom<Math.max(0,e.top)+10)return null;let s=Math.max(0,Math.min(n.top,innerHeight-i.height))-e.top,r=this.view.textDirection==Fi.RTL,o=e.left,l=innerWidth-e.right;return r&&o<Math.min(i.width,l)?r=!1:!r&&l<Math.min(i.width,o)&&(r=!0),{top:s,left:r}}positionInfo(t){this.info&&(this.info.style.top=(t?t.top:-1e6)+\"px\",t&&(this.info.classList.toggle(\"cm-completionInfo-left\",t.left),this.info.classList.toggle(\"cm-completionInfo-right\",!t.left)))}createListBox(t,e,i){const n=document.createElement(\"ul\");n.id=e,n.setAttribute(\"role\",\"listbox\"),n.setAttribute(\"aria-expanded\",\"true\");for(let s=i.from;s<i.to;s++){let{completion:i,match:r}=t[s];const o=n.appendChild(document.createElement(\"li\"));o.id=e+\"-\"+s,o.setAttribute(\"role\",\"option\");let l=this.optionClass(i);l&&(o.className=l);for(let t of this.optionContent){let e=t(i,this.view.state,r);e&&o.appendChild(e)}}return i.from&&n.classList.add(\"cm-completionListIncompleteTop\"),i.to<t.length&&n.classList.add(\"cm-completionListIncompleteBottom\"),n}}function Rc(t){return 100*(t.boost||0)+(t.apply?10:0)+(t.info?5:0)+(t.type?1:0)}class Ec{constructor(t,e,i,n,s){this.options=t,this.attrs=e,this.tooltip=i,this.timestamp=n,this.selected=s}setSelected(t,e){return t==this.selected||t>=this.options.length?this:new Ec(this.options,Pc(e,t),this.tooltip,this.timestamp,t)}static build(t,e,i,n,s){let r=function(t,e){let i=[],n=0;for(let s of t)if(s.hasResult())if(!1===s.result.filter)for(let t of s.result.options)i.push(new yc(t,s,[1e9-n++]));else{let t,n=new Mc(e.sliceDoc(s.from,s.to));for(let e of s.result.options)(t=n.match(e.label))&&(null!=e.boost&&(t[0]+=e.boost),i.push(new yc(e,s,t)))}let s=[],r=null;for(let t of i.sort(Ic)){if(300==s.length)break;r&&r.label==t.completion.label&&r.detail==t.completion.detail&&r.type==t.completion.type&&r.apply==t.completion.apply?Rc(t.completion)>Rc(r)&&(s[s.length-1]=t):s.push(t),r=t.completion}return s}(t,e);if(!r.length)return null;let o=0;if(n&&n.selected){let t=n.options[n.selected].completion;for(let e=0;e<r.length;e++)if(r[e].completion==t){o=e;break}}return new Ec(r,Pc(i,o),{pos:t.reduce(((t,e)=>e.hasResult()?Math.min(t,e.from):t),1e8),create:(l=jc,t=>new Tc(t,l)),above:s.aboveCursor},n?n.timestamp:Date.now(),o);var l}map(t){return new Ec(this.options,this.attrs,Object.assign(Object.assign({},this.tooltip),{pos:t.mapPos(this.tooltip.pos)}),this.timestamp,this.selected)}}class Lc{constructor(t,e,i){this.active=t,this.id=e,this.open=i}static start(){return new Lc(Nc,\"cm-ac-\"+Math.floor(2e6*Math.random()).toString(36),null)}update(t){let{state:e}=t,i=e.facet(Dc),n=(i.override||e.languageDataAt(\"autocomplete\",bc(e)).map(Cc)).map((e=>(this.active.find((t=>t.source==e))||new Hc(e,this.active.some((t=>0!=t.state))?1:0)).update(t,i)));n.length==this.active.length&&n.every(((t,e)=>t==this.active[e]))&&(n=this.active);let s=t.selection||n.some((e=>e.hasResult()&&t.changes.touchesRange(e.from,e.to)))||!function(t,e){if(t==e)return!0;for(let i=0,n=0;;){for(;i<t.length&&!t[i].hasResult;)i++;for(;n<e.length&&!e[n].hasResult;)n++;let s=i==t.length,r=n==e.length;if(s||r)return s==r;if(t[i++].result!=e[n++].result)return!1}}(n,this.active)?Ec.build(n,e,this.id,this.open,i):this.open&&t.docChanged?this.open.map(t.changes):this.open;!s&&n.every((t=>1!=t.state))&&n.some((t=>t.hasResult()))&&(n=n.map((t=>t.hasResult()?new Hc(t.source,0):t)));for(let e of t.effects)e.is(_c)&&(s=s&&s.setSelected(e.value,this.id));return n==this.active&&s==this.open?this:new Lc(n,this.id,s)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:Bc}}const Bc={\"aria-autocomplete\":\"list\"};function Pc(t,e){return{\"aria-autocomplete\":\"list\",\"aria-haspopup\":\"listbox\",\"aria-activedescendant\":t+\"-\"+e,\"aria-controls\":t}}const Nc=[];function Ic(t,e){let i=e.match[0]-t.match[0];return i||t.completion.label.localeCompare(e.completion.label)}function Vc(t){return t.isUserEvent(\"input.type\")?\"input\":t.isUserEvent(\"delete.backward\")?\"delete\":null}class Hc{constructor(t,e,i=-1){this.source=t,this.state=e,this.explicitPos=i}hasResult(){return!1}update(t,e){let i=Vc(t),n=this;i?n=n.handleUserEvent(t,i,e):t.docChanged?n=n.handleChange(t):t.selection&&0!=n.state&&(n=new Hc(n.source,0));for(let e of t.effects)if(e.is(zc))n=new Hc(n.source,1,e.value?bc(t.state):-1);else if(e.is(Fc))n=new Hc(n.source,0);else if(e.is(qc))for(let t of e.value)t.source==n.source&&(n=t);return n}handleUserEvent(t,e,i){return\"delete\"!=e&&i.activateOnTyping?new Hc(this.source,1):this.map(t.changes)}handleChange(t){return t.changes.touchesRange(bc(t.startState))?new Hc(this.source,0):this.map(t.changes)}map(t){return t.empty||this.explicitPos<0?this:new Hc(this.source,this.state,t.mapPos(this.explicitPos))}}class Wc extends Hc{constructor(t,e,i,n,s,r){super(t,2,e),this.result=i,this.from=n,this.to=s,this.span=r}hasResult(){return!0}handleUserEvent(t,e,i){let n=t.changes.mapPos(this.from),s=t.changes.mapPos(this.to,1),r=bc(t.state);if((this.explicitPos<0?r<=n:r<this.from)||r>s||\"delete\"==e&&bc(t.startState)==this.from)return new Hc(this.source,\"input\"==e&&i.activateOnTyping?1:0);let o=this.explicitPos<0?-1:t.changes.mapPos(this.explicitPos);return this.span&&(n==s||this.span.test(t.state.sliceDoc(n,s)))?new Wc(this.source,o,this.result,n,s,this.span):new Hc(this.source,1,o)}handleChange(t){return t.changes.touchesRange(this.from,this.to)?new Hc(this.source,0):this.map(t.changes)}map(t){return t.empty?this:new Wc(this.source,this.explicitPos<0?-1:t.mapPos(this.explicitPos),this.result,t.mapPos(this.from),t.mapPos(this.to,1),this.span)}}const zc=dt.define(),Fc=dt.define(),qc=dt.define({map:(t,e)=>t.map((t=>t.map(e)))}),_c=dt.define(),jc=_.define({create:()=>Lc.start(),update:(t,e)=>t.update(e),provide:t=>[mc.from(t,(t=>t.tooltip)),Rs.contentAttributes.from(t,(t=>t.attrs))]});function Uc(t,e=\"option\"){return i=>{let n=i.state.field(jc,!1);if(!n||!n.open||Date.now()-n.open.timestamp<75)return!1;let s,r=1;\"page\"==e&&(s=function(t,e){let i=t.plugin(fc);if(!i)return null;let n=i.manager.tooltips.indexOf(e);return n<0?null:i.manager.tooltipViews[n]}(i,n.open.tooltip))&&(r=Math.max(2,Math.floor(s.dom.offsetHeight/s.dom.querySelector(\"li\").offsetHeight)-1));let o=n.open.selected+r*(t?1:-1),{length:l}=n.open.options;return o<0?o=\"page\"==e?0:l-1:o>=l&&(o=\"page\"==e?l-1:0),i.dispatch({effects:_c.of(o)}),!0}}class $c{constructor(t,e){this.active=t,this.context=e,this.time=Date.now(),this.updates=[],this.done=void 0}}const Kc=Li.fromClass(class{constructor(t){this.view=t,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.composing=0;for(let e of t.state.field(jc).active)1==e.state&&this.startQuery(e)}update(t){let e=t.state.field(jc);if(!t.selectionSet&&!t.docChanged&&t.startState.field(jc)==e)return;let i=t.transactions.some((t=>(t.selection||t.docChanged)&&!Vc(t)));for(let e=0;e<this.running.length;e++){let n=this.running[e];if(i||n.updates.length+t.transactions.length>50&&Date.now()-n.time>1e3){for(let t of n.context.abortListeners)try{t()}catch(t){Mi(this.view.state,t)}n.context.abortListeners=null,this.running.splice(e--,1)}else n.updates.push(...t.transactions)}if(this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),this.debounceUpdate=e.active.some((t=>1==t.state&&!this.running.some((e=>e.active.source==t.source))))?setTimeout((()=>this.startUpdate()),50):-1,0!=this.composing)for(let e of t.transactions)\"input\"==Vc(e)?this.composing=2:2==this.composing&&e.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1;let{state:t}=this.view,e=t.field(jc);for(let t of e.active)1!=t.state||this.running.some((e=>e.active.source==t.source))||this.startQuery(t)}startQuery(t){let{state:e}=this.view,i=bc(e),n=new gc(e,i,t.explicitPos==i),s=new $c(t,n);this.running.push(s),Promise.resolve(t.source(n)).then((t=>{s.context.aborted||(s.done=t||null,this.scheduleAccept())}),(t=>{this.view.dispatch({effects:Fc.of(null)}),Mi(this.view.state,t)}))}scheduleAccept(){this.running.every((t=>void 0!==t.done))?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout((()=>this.accept()),50))}accept(){var t;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],i=this.view.state.facet(Dc);for(let n=0;n<this.running.length;n++){let s=this.running[n];if(void 0===s.done)continue;if(this.running.splice(n--,1),s.done){let n=new Wc(s.active.source,s.active.explicitPos,s.done,s.done.from,null!==(t=s.done.to)&&void 0!==t?t:bc(s.updates.length?s.updates[0].startState:this.view.state),s.done.span&&!1!==s.done.filter?xc(s.done.span,!0):null);for(let t of s.updates)n=n.update(t,i);if(n.hasResult()){e.push(n);continue}}let r=this.view.state.field(jc).active.find((t=>t.source==s.active.source));if(r&&1==r.state)if(null==s.done){let t=new Hc(s.active.source,0);for(let e of s.updates)t=t.update(e,i);1!=t.state&&e.push(t)}else this.startQuery(r)}e.length&&this.view.dispatch({effects:qc.of(e)})}},{eventHandlers:{compositionstart(){this.composing=1},compositionend(){3==this.composing&&setTimeout((()=>this.view.dispatch({effects:zc.of(!1)})),20),this.composing=0}}}),Gc=Rs.baseTheme({\".cm-tooltip.cm-tooltip-autocomplete\":{\"& > ul\":{fontFamily:\"monospace\",whiteSpace:\"nowrap\",overflow:\"hidden auto\",maxWidth_fallback:\"700px\",maxWidth:\"min(700px, 95vw)\",minWidth:\"250px\",maxHeight:\"10em\",listStyle:\"none\",margin:0,padding:0,\"& > li\":{overflowX:\"hidden\",textOverflow:\"ellipsis\",cursor:\"pointer\",padding:\"1px 3px\",lineHeight:1.2}}},\"&light .cm-tooltip-autocomplete ul li[aria-selected]\":{background:\"#17c\",color:\"white\"},\"&dark .cm-tooltip-autocomplete ul li[aria-selected]\":{background:\"#347\",color:\"white\"},\".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after\":{content:'\"···\"',opacity:.5,display:\"block\",textAlign:\"center\"},\".cm-tooltip.cm-completionInfo\":{position:\"absolute\",padding:\"3px 9px\",width:\"max-content\",maxWidth:\"300px\"},\".cm-completionInfo.cm-completionInfo-left\":{right:\"100%\"},\".cm-completionInfo.cm-completionInfo-right\":{left:\"100%\"},\"&light .cm-snippetField\":{backgroundColor:\"#00000022\"},\"&dark .cm-snippetField\":{backgroundColor:\"#ffffff22\"},\".cm-snippetFieldPosition\":{verticalAlign:\"text-top\",width:0,height:\"1.15em\",margin:\"0 -0.7px -.7em\",borderLeft:\"1.4px dotted #888\"},\".cm-completionMatchedText\":{textDecoration:\"underline\"},\".cm-completionDetail\":{marginLeft:\"0.5em\",fontStyle:\"italic\"},\".cm-completionIcon\":{fontSize:\"90%\",width:\".8em\",display:\"inline-block\",textAlign:\"center\",paddingRight:\".6em\",opacity:\"0.6\"},\".cm-completionIcon-function, .cm-completionIcon-method\":{\"&:after\":{content:\"'ƒ'\"}},\".cm-completionIcon-class\":{\"&:after\":{content:\"'○'\"}},\".cm-completionIcon-interface\":{\"&:after\":{content:\"'◌'\"}},\".cm-completionIcon-variable\":{\"&:after\":{content:\"'𝑥'\"}},\".cm-completionIcon-constant\":{\"&:after\":{content:\"'𝐶'\"}},\".cm-completionIcon-type\":{\"&:after\":{content:\"'𝑡'\"}},\".cm-completionIcon-enum\":{\"&:after\":{content:\"'∪'\"}},\".cm-completionIcon-property\":{\"&:after\":{content:\"'□'\"}},\".cm-completionIcon-keyword\":{\"&:after\":{content:\"'🔑︎'\"}},\".cm-completionIcon-namespace\":{\"&:after\":{content:\"'▢'\"}},\".cm-completionIcon-text\":{\"&:after\":{content:\"'abc'\",fontSize:\"50%\",verticalAlign:\"middle\"}}});function Jc(t={}){return[jc,Dc.of(t),Kc,Xc,Gc]}const Yc=[{key:\"Ctrl-Space\",run:t=>!!t.state.field(jc,!1)&&(t.dispatch({effects:zc.of(!0)}),!0)},{key:\"Escape\",run:t=>{let e=t.state.field(jc,!1);return!(!e||!e.active.some((t=>0!=t.state)))&&(t.dispatch({effects:Fc.of(null)}),!0)}},{key:\"ArrowDown\",run:Uc(!0)},{key:\"ArrowUp\",run:Uc(!1)},{key:\"PageDown\",run:Uc(!0,\"page\")},{key:\"PageUp\",run:Uc(!1,\"page\")},{key:\"Enter\",run:t=>{let e=t.state.field(jc,!1);return!(t.state.readOnly||!e||!e.open||Date.now()-e.open.timestamp<75)&&(Sc(t,e.open.options[e.open.selected]),!0)}}],Xc=Y.highest(Ws.computeN([Dc],(t=>t.facet(Dc).defaultKeymap?[Yc]:[]))),Qc={jinja2:Ql.define($l),yaml:Ql.define(Gl)},Zc=new Q,tu=new Q,eu=[{key:\"Tab\",run:nl},{key:\"Shift-Tab\",run:sl}],iu=Rs.theme({\"&\":{color:\"var(--primary-text-color)\",backgroundColor:\"var(--code-editor-background-color, var(--mdc-text-field-fill-color, whitesmoke))\",\"& ::selection\":{backgroundColor:\"rgba(var(--rgb-primary-color), 0.3)\"},borderRadius:\"var(--mdc-shape-small, 4px) var(--mdc-shape-small, 4px) 0px 0px\",caretColor:\"var(--secondary-text-color)\",height:\"var(--code-mirror-height, auto)\",maxHeight:\"var(--code-mirror-max-height, unset)\"},\"&.cm-editor.cm-focused\":{outline:\"none\"},\"&.cm-focused .cm-cursor\":{borderLeftColor:\"var(--secondary-text-color)\"},\"&.cm-focused .cm-selectionBackground, .cm-selectionBackground\":{backgroundColor:\"rgba(var(--rgb-primary-color), 0.3)\"},\".cm-activeLine\":{backgroundColor:\"rgba(var(--rgb-secondary-text-color), 0.1)\"},\".cm-scroller\":{outline:\"none\"},\".cm-content\":{caretColor:\"var(--secondary-text-color)\",paddingTop:\"16px\"},\".cm-panels\":{backgroundColor:\"var(--primary-background-color)\",color:\"var(--primary-text-color)\"},\".cm-panels.top\":{borderBottom:\"1px solid var(--divider-color)\"},\".cm-panels.bottom\":{borderTop:\"1px solid var(--divider-color)\"},\".cm-button\":{border:\"1px solid var(--primary-color)\",padding:\"0px 16px\",textTransform:\"uppercase\",margin:\"4px\",background:\"none\",color:\"var(--primary-color)\",fontFamily:\"var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif))\",fontSize:\"var(--mdc-typography-button-font-size, 0.875rem)\",height:\"36px\",fontWeight:\"var(--mdc-typography-button-font-weight, 500)\",borderRadius:\"4px\",letterSpacing:\"var(--mdc-typography-button-letter-spacing, 0.0892857em)\"},\".cm-textfield\":{padding:\"4px 0px 5px\",borderRadius:\"0\",fontSize:\"16px\",color:\"var(--primary-text-color)\",border:\"0\",background:\"none\",fontFamily:\"Roboto\",borderBottom:\"1px solid var(--paper-input-container-color, var(--secondary-text-color))\",margin:\"4px 4px 0\",\"& ::placeholder\":{color:\"var(--paper-input-container-color, var(--secondary-text-color))\"},\"&:focus\":{outline:\"none\",borderBottom:\"2px solid var(--primary-color)\",paddingBottom:\"4px\"}},\".cm-tooltip\":{color:\"var(--primary-text-color)\",backgroundColor:\"var(--code-editor-background-color, var(--card-background-color))\",border:\"1px solid var(--divider-color)\",borderRadius:\"var(--mdc-shape-medium, 4px)\",boxShadow:\"0px 5px 5px -3px rgb(0 0 0 / 20%), 0px 8px 10px 1px rgb(0 0 0 / 14%), 0px 3px 14px 2px rgb(0 0 0 / 12%)\"},\"& .cm-tooltip.cm-tooltip-autocomplete > ul > li\":{padding:\"4px 8px\"},\"& .cm-tooltip-autocomplete ul li[aria-selected]\":{background:\"var(--primary-color)\",color:\"var(--text-primary-color)\"},\".cm-completionIcon\":{display:\"none\"},\".cm-completionDetail\":{fontFamily:\"Roboto\",color:\"var(--secondary-text-color)\"},\"li[aria-selected] .cm-completionDetail\":{color:\"var(--text-primary-color)\"},\"& .cm-completionInfo.cm-completionInfo-right\":{left:\"calc(100% + 4px)\"},\"& .cm-tooltip.cm-completionInfo\":{padding:\"4px 8px\",marginTop:\"-5px\"},\".cm-selectionMatch\":{backgroundColor:\"rgba(var(--rgb-primary-color), 0.1)\"},\".cm-searchMatch\":{backgroundColor:\"rgba(var(--rgb-accent-color), .2)\",outline:\"1px solid rgba(var(--rgb-accent-color), .4)\"},\".cm-searchMatch.selected\":{backgroundColor:\"rgba(var(--rgb-accent-color), .4)\",outline:\"1px solid var(--accent-color)\"},\".cm-gutters\":{backgroundColor:\"var(--code-editor-gutter-color, var(--mdc-text-field-fill-color, whitesmoke))\",color:\"var(--paper-dialog-color, var(--secondary-text-color))\",border:\"none\",borderRight:\"1px solid var(--paper-input-container-color, var(--secondary-text-color))\",paddingRight:\"1px\"},\"&.cm-focused .cm-gutters\":{borderRight:\"2px solid var(--paper-input-container-focus-color, var(--primary-color))\",paddingRight:\"0\"},\".cm-gutterElement.lineNumber\":{color:\"inherit\"}}),nu=vl.define([{tag:Wl.keyword,color:\"var(--codemirror-keyword, #6262FF)\"},{tag:[Wl.name,Wl.deleted,Wl.character,Wl.propertyName,Wl.macroName],color:\"var(--codemirror-property, #905)\"},{tag:[Wl.function(Wl.variableName),Wl.labelName],color:\"var(--codemirror-variable, #07a)\"},{tag:[Wl.color,Wl.constant(Wl.name),Wl.standard(Wl.name)],color:\"var(--codemirror-qualifier, #690)\"},{tag:[Wl.definition(Wl.name),Wl.separator],color:\"var(--codemirror-def, #8DA6CE)\"},{tag:[Wl.typeName,Wl.className,Wl.number,Wl.changed,Wl.annotation,Wl.modifier,Wl.self,Wl.namespace],color:\"var(--codemirror-number, #ca7841)\"},{tag:[Wl.operator,Wl.operatorKeyword,Wl.url,Wl.escape,Wl.regexp,Wl.link,Wl.special(Wl.string)],color:\"var(--codemirror-operator, #cda869)\"},{tag:Wl.comment,color:\"var(--codemirror-comment, #777)\"},{tag:Wl.meta,color:\"var(--codemirror-meta, var(--primary-text-color))\"},{tag:Wl.strong,fontWeight:\"bold\"},{tag:Wl.emphasis,fontStyle:\"italic\"},{tag:Wl.link,color:\"var(--primary-color)\",textDecoration:\"underline\"},{tag:Wl.heading,fontWeight:\"bold\"},{tag:Wl.atom,color:\"var(--codemirror-atom, #F90)\"},{tag:Wl.bool,color:\"var(--codemirror-atom, #F90)\"},{tag:Wl.special(Wl.variableName),color:\"var(--codemirror-variable-2, #690)\"},{tag:Wl.processingInstruction,color:\"var(--secondary-text-color)\"},{tag:Wl.string,color:\"var(--codemirror-string, #07a)\"},{tag:Wl.inserted,color:\"var(--codemirror-string2, #07a)\"},{tag:Wl.invalid,color:\"var(--error-color)\"}]);export{Ct as EditorState,Rs as EditorView,vl as HighlightStyle,Y as Prec,Jc as autocompletion,rl as defaultKeymap,$s as drawSelection,er as highlightActiveLine,Ca as highlightSelectionMatches,nu as highlightStyle,Ih as history,Qh as historyKeymap,Ws as keymap,Zc as langCompartment,Qc as langs,Th as lineNumbers,tu as readonlyCompartment,ea as rectangularSelection,ec as searchKeymap,eu as tabKeyBindings,Wl as tags,iu as theme};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.db2e6bb6.js",
    "content": "import{u as e,v as t,M as i,_ as c,i as l,e as d,t as o,w as n,$ as a,o as s,j as r,x as m,y as p,k as h,r as u}from\"./main-a0d7432d.js\";import{f,l as g}from\"./c.fbd8d2ba.js\";import{C as b,F as _}from\"./c.c176780d.js\";import{n as x,a as v,K as y}from\"./c.936d9772.js\";import{o as w}from\"./c.8e28b461.js\";var I=[\"input\",\"button\",\"textarea\",\"select\"],E=function(e){var t=e.target;if(t){var i=(\"\"+t.tagName).toLowerCase();-1===I.indexOf(i)&&e.preventDefault()}};function C(e,t){for(var i=new Map,c=0;c<e;c++){var l=t(c).trim();if(l){var d=l[0].toLowerCase();i.has(d)||i.set(d,[]),i.get(d).push({text:l.toLowerCase(),index:c})}}return i.forEach((function(e){e.sort((function(e,t){return e.index-t.index}))})),i}function A(e,t){var i,c=e.nextChar,l=e.focusItemAtIndex,d=e.sortedIndexByFirstChar,o=e.focusedItemIndex,n=e.skipFocus,a=e.isItemAtIndexDisabled;return clearTimeout(t.bufferClearTimeout),t.bufferClearTimeout=setTimeout((function(){!function(e){e.typeaheadBuffer=\"\"}(t)}),x.TYPEAHEAD_BUFFER_CLEAR_TIMEOUT_MS),t.typeaheadBuffer=t.typeaheadBuffer+c,i=1===t.typeaheadBuffer.length?function(e,t,i,c){var l=c.typeaheadBuffer[0],d=e.get(l);if(!d)return-1;if(l===c.currentFirstChar&&d[c.sortedIndexCursor].index===t){c.sortedIndexCursor=(c.sortedIndexCursor+1)%d.length;var o=d[c.sortedIndexCursor].index;if(!i(o))return o}c.currentFirstChar=l;var n,a=-1;for(n=0;n<d.length;n++)if(!i(d[n].index)){a=n;break}for(;n<d.length;n++)if(d[n].index>t&&!i(d[n].index)){a=n;break}if(-1!==a)return c.sortedIndexCursor=a,d[c.sortedIndexCursor].index;return-1}(d,o,a,t):function(e,t,i){var c=i.typeaheadBuffer[0],l=e.get(c);if(!l)return-1;var d=l[i.sortedIndexCursor];if(0===d.text.lastIndexOf(i.typeaheadBuffer,0)&&!t(d.index))return d.index;var o=(i.sortedIndexCursor+1)%l.length,n=-1;for(;o!==i.sortedIndexCursor;){var a=l[o],s=0===a.text.lastIndexOf(i.typeaheadBuffer,0),r=!t(a.index);if(s&&r){n=o;break}o=(o+1)%l.length}if(-1!==n)return i.sortedIndexCursor=n,l[i.sortedIndexCursor].index;return-1}(d,a,t),-1===i||n||l(i),i}function k(e){return e.typeaheadBuffer.length>0}var S={ACTIVATED:\"mdc-select--activated\",DISABLED:\"mdc-select--disabled\",FOCUSED:\"mdc-select--focused\",INVALID:\"mdc-select--invalid\",MENU_INVALID:\"mdc-select__menu--invalid\",OUTLINED:\"mdc-select--outlined\",REQUIRED:\"mdc-select--required\",ROOT:\"mdc-select\",WITH_LEADING_ICON:\"mdc-select--with-leading-icon\"},T={ARIA_CONTROLS:\"aria-controls\",ARIA_DESCRIBEDBY:\"aria-describedby\",ARIA_SELECTED_ATTR:\"aria-selected\",CHANGE_EVENT:\"MDCSelect:change\",HIDDEN_INPUT_SELECTOR:'input[type=\"hidden\"]',LABEL_SELECTOR:\".mdc-floating-label\",LEADING_ICON_SELECTOR:\".mdc-select__icon\",LINE_RIPPLE_SELECTOR:\".mdc-line-ripple\",MENU_SELECTOR:\".mdc-select__menu\",OUTLINE_SELECTOR:\".mdc-notched-outline\",SELECTED_TEXT_SELECTOR:\".mdc-select__selected-text\",SELECT_ANCHOR_SELECTOR:\".mdc-select__anchor\",VALUE_ATTR:\"data-value\"},O={LABEL_SCALE:.75,UNSET_INDEX:-1,CLICK_DEBOUNCE_TIMEOUT_MS:330},R=function(i){function c(e,l){void 0===l&&(l={});var d=i.call(this,t(t({},c.defaultAdapter),e))||this;return d.disabled=!1,d.isMenuOpen=!1,d.useDefaultValidation=!0,d.customValidity=!0,d.lastSelectedIndex=O.UNSET_INDEX,d.clickDebounceTimeout=0,d.recentlyClicked=!1,d.leadingIcon=l.leadingIcon,d.helperText=l.helperText,d}return e(c,i),Object.defineProperty(c,\"cssClasses\",{get:function(){return S},enumerable:!1,configurable:!0}),Object.defineProperty(c,\"numbers\",{get:function(){return O},enumerable:!1,configurable:!0}),Object.defineProperty(c,\"strings\",{get:function(){return T},enumerable:!1,configurable:!0}),Object.defineProperty(c,\"defaultAdapter\",{get:function(){return{addClass:function(){},removeClass:function(){},hasClass:function(){return!1},activateBottomLine:function(){},deactivateBottomLine:function(){},getSelectedIndex:function(){return-1},setSelectedIndex:function(){},hasLabel:function(){return!1},floatLabel:function(){},getLabelWidth:function(){return 0},setLabelRequired:function(){},hasOutline:function(){return!1},notchOutline:function(){},closeOutline:function(){},setRippleCenter:function(){},notifyChange:function(){},setSelectedText:function(){},isSelectAnchorFocused:function(){return!1},getSelectAnchorAttr:function(){return\"\"},setSelectAnchorAttr:function(){},removeSelectAnchorAttr:function(){},addMenuClass:function(){},removeMenuClass:function(){},openMenu:function(){},closeMenu:function(){},getAnchorElement:function(){return null},setMenuAnchorElement:function(){},setMenuAnchorCorner:function(){},setMenuWrapFocus:function(){},focusMenuItemAtIndex:function(){},getMenuItemCount:function(){return 0},getMenuItemValues:function(){return[]},getMenuItemTextAtIndex:function(){return\"\"},isTypeaheadInProgress:function(){return!1},typeaheadMatchItem:function(){return-1}}},enumerable:!1,configurable:!0}),c.prototype.getSelectedIndex=function(){return this.adapter.getSelectedIndex()},c.prototype.setSelectedIndex=function(e,t,i){void 0===t&&(t=!1),void 0===i&&(i=!1),e>=this.adapter.getMenuItemCount()||(e===O.UNSET_INDEX?this.adapter.setSelectedText(\"\"):this.adapter.setSelectedText(this.adapter.getMenuItemTextAtIndex(e).trim()),this.adapter.setSelectedIndex(e),t&&this.adapter.closeMenu(),i||this.lastSelectedIndex===e||this.handleChange(),this.lastSelectedIndex=e)},c.prototype.setValue=function(e,t){void 0===t&&(t=!1);var i=this.adapter.getMenuItemValues().indexOf(e);this.setSelectedIndex(i,!1,t)},c.prototype.getValue=function(){var e=this.adapter.getSelectedIndex(),t=this.adapter.getMenuItemValues();return e!==O.UNSET_INDEX?t[e]:\"\"},c.prototype.getDisabled=function(){return this.disabled},c.prototype.setDisabled=function(e){this.disabled=e,this.disabled?(this.adapter.addClass(S.DISABLED),this.adapter.closeMenu()):this.adapter.removeClass(S.DISABLED),this.leadingIcon&&this.leadingIcon.setDisabled(this.disabled),this.disabled?this.adapter.removeSelectAnchorAttr(\"tabindex\"):this.adapter.setSelectAnchorAttr(\"tabindex\",\"0\"),this.adapter.setSelectAnchorAttr(\"aria-disabled\",this.disabled.toString())},c.prototype.openMenu=function(){this.adapter.addClass(S.ACTIVATED),this.adapter.openMenu(),this.isMenuOpen=!0,this.adapter.setSelectAnchorAttr(\"aria-expanded\",\"true\")},c.prototype.setHelperTextContent=function(e){this.helperText&&this.helperText.setContent(e)},c.prototype.layout=function(){if(this.adapter.hasLabel()){var e=this.getValue().length>0,t=this.adapter.hasClass(S.FOCUSED),i=e||t,c=this.adapter.hasClass(S.REQUIRED);this.notchOutline(i),this.adapter.floatLabel(i),this.adapter.setLabelRequired(c)}},c.prototype.layoutOptions=function(){var e=this.adapter.getMenuItemValues().indexOf(this.getValue());this.setSelectedIndex(e,!1,!0)},c.prototype.handleMenuOpened=function(){if(0!==this.adapter.getMenuItemValues().length){var e=this.getSelectedIndex(),t=e>=0?e:0;this.adapter.focusMenuItemAtIndex(t)}},c.prototype.handleMenuClosing=function(){this.adapter.setSelectAnchorAttr(\"aria-expanded\",\"false\")},c.prototype.handleMenuClosed=function(){this.adapter.removeClass(S.ACTIVATED),this.isMenuOpen=!1,this.adapter.isSelectAnchorFocused()||this.blur()},c.prototype.handleChange=function(){this.layout(),this.adapter.notifyChange(this.getValue()),this.adapter.hasClass(S.REQUIRED)&&this.useDefaultValidation&&this.setValid(this.isValid())},c.prototype.handleMenuItemAction=function(e){this.setSelectedIndex(e,!0)},c.prototype.handleFocus=function(){this.adapter.addClass(S.FOCUSED),this.layout(),this.adapter.activateBottomLine()},c.prototype.handleBlur=function(){this.isMenuOpen||this.blur()},c.prototype.handleClick=function(e){this.disabled||this.recentlyClicked||(this.setClickDebounceTimeout(),this.isMenuOpen?this.adapter.closeMenu():(this.adapter.setRippleCenter(e),this.openMenu()))},c.prototype.handleKeydown=function(e){if(!this.isMenuOpen&&this.adapter.hasClass(S.FOCUSED)){var t=v(e)===y.ENTER,i=v(e)===y.SPACEBAR,c=v(e)===y.ARROW_UP,l=v(e)===y.ARROW_DOWN;if(!(e.ctrlKey||e.metaKey)&&(!i&&e.key&&1===e.key.length||i&&this.adapter.isTypeaheadInProgress())){var d=i?\" \":e.key,o=this.adapter.typeaheadMatchItem(d,this.getSelectedIndex());return o>=0&&this.setSelectedIndex(o),void e.preventDefault()}(t||i||c||l)&&(c&&this.getSelectedIndex()>0?this.setSelectedIndex(this.getSelectedIndex()-1):l&&this.getSelectedIndex()<this.adapter.getMenuItemCount()-1&&this.setSelectedIndex(this.getSelectedIndex()+1),this.openMenu(),e.preventDefault())}},c.prototype.notchOutline=function(e){if(this.adapter.hasOutline()){var t=this.adapter.hasClass(S.FOCUSED);if(e){var i=O.LABEL_SCALE,c=this.adapter.getLabelWidth()*i;this.adapter.notchOutline(c)}else t||this.adapter.closeOutline()}},c.prototype.setLeadingIconAriaLabel=function(e){this.leadingIcon&&this.leadingIcon.setAriaLabel(e)},c.prototype.setLeadingIconContent=function(e){this.leadingIcon&&this.leadingIcon.setContent(e)},c.prototype.getUseDefaultValidation=function(){return this.useDefaultValidation},c.prototype.setUseDefaultValidation=function(e){this.useDefaultValidation=e},c.prototype.setValid=function(e){this.useDefaultValidation||(this.customValidity=e),this.adapter.setSelectAnchorAttr(\"aria-invalid\",(!e).toString()),e?(this.adapter.removeClass(S.INVALID),this.adapter.removeMenuClass(S.MENU_INVALID)):(this.adapter.addClass(S.INVALID),this.adapter.addMenuClass(S.MENU_INVALID)),this.syncHelperTextValidity(e)},c.prototype.isValid=function(){return this.useDefaultValidation&&this.adapter.hasClass(S.REQUIRED)&&!this.adapter.hasClass(S.DISABLED)?this.getSelectedIndex()!==O.UNSET_INDEX&&(0!==this.getSelectedIndex()||Boolean(this.getValue())):this.customValidity},c.prototype.setRequired=function(e){e?this.adapter.addClass(S.REQUIRED):this.adapter.removeClass(S.REQUIRED),this.adapter.setSelectAnchorAttr(\"aria-required\",e.toString()),this.adapter.setLabelRequired(e)},c.prototype.getRequired=function(){return\"true\"===this.adapter.getSelectAnchorAttr(\"aria-required\")},c.prototype.init=function(){var e=this.adapter.getAnchorElement();e&&(this.adapter.setMenuAnchorElement(e),this.adapter.setMenuAnchorCorner(b.BOTTOM_START)),this.adapter.setMenuWrapFocus(!1),this.setDisabled(this.adapter.hasClass(S.DISABLED)),this.syncHelperTextValidity(!this.adapter.hasClass(S.INVALID)),this.layout(),this.layoutOptions()},c.prototype.blur=function(){this.adapter.removeClass(S.FOCUSED),this.layout(),this.adapter.deactivateBottomLine(),this.adapter.hasClass(S.REQUIRED)&&this.useDefaultValidation&&this.setValid(this.isValid())},c.prototype.syncHelperTextValidity=function(e){if(this.helperText){this.helperText.setValidity(e);var t=this.helperText.isVisible(),i=this.helperText.getId();t&&i?this.adapter.setSelectAnchorAttr(T.ARIA_DESCRIBEDBY,i):this.adapter.removeSelectAnchorAttr(T.ARIA_DESCRIBEDBY)}},c.prototype.setClickDebounceTimeout=function(){var e=this;clearTimeout(this.clickDebounceTimeout),this.clickDebounceTimeout=setTimeout((function(){e.recentlyClicked=!1}),O.CLICK_DEBOUNCE_TIMEOUT_MS),this.recentlyClicked=!0},c}(i);const D=(e={})=>{const t={};for(const i in e)t[i]=e[i];return Object.assign({badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:!0,valueMissing:!1},t)};class M extends _{constructor(){super(...arguments),this.mdcFoundationClass=R,this.disabled=!1,this.outlined=!1,this.label=\"\",this.outlineOpen=!1,this.outlineWidth=0,this.value=\"\",this.name=\"\",this.selectedText=\"\",this.icon=\"\",this.menuOpen=!1,this.helper=\"\",this.validateOnInitialRender=!1,this.validationMessage=\"\",this.required=!1,this.naturalMenuWidth=!1,this.isUiValid=!0,this.fixedMenuPosition=!1,this.typeaheadState={bufferClearTimeout:0,currentFirstChar:\"\",sortedIndexCursor:0,typeaheadBuffer:\"\"},this.sortedIndexByFirstChar=new Map,this.menuElement_=null,this.listeners=[],this.onBodyClickBound=()=>{},this._menuUpdateComplete=null,this.valueSetDirectly=!1,this.validityTransform=null,this._validity=D()}get items(){return this.menuElement_||(this.menuElement_=this.menuElement),this.menuElement_?this.menuElement_.items:[]}get selected(){const e=this.menuElement;return e?e.selected:null}get index(){const e=this.menuElement;return e?e.index:-1}get shouldRenderHelperText(){return!!this.helper||!!this.validationMessage}get validity(){return this._checkValidity(this.value),this._validity}render(){const e={\"mdc-select--disabled\":this.disabled,\"mdc-select--no-label\":!this.label,\"mdc-select--filled\":!this.outlined,\"mdc-select--outlined\":this.outlined,\"mdc-select--with-leading-icon\":!!this.icon,\"mdc-select--required\":this.required,\"mdc-select--invalid\":!this.isUiValid},t={\"mdc-select__menu--invalid\":!this.isUiValid},i=this.label?\"label\":void 0,c=this.shouldRenderHelperText?\"helper-text\":void 0;return a`\n      <div\n          class=\"mdc-select ${s(e)}\">\n        <input\n            class=\"formElement\"\n            name=\"${this.name}\"\n            .value=\"${this.value}\"\n            hidden\n            ?disabled=\"${this.disabled}\"\n            ?required=${this.required}>\n        <!-- @ts-ignore -->\n        <div class=\"mdc-select__anchor\"\n            aria-autocomplete=\"none\"\n            role=\"combobox\"\n            aria-expanded=${this.menuOpen}\n            aria-invalid=${!this.isUiValid}\n            aria-haspopup=\"listbox\"\n            aria-labelledby=${r(i)}\n            aria-required=${this.required}\n            aria-describedby=${r(c)}\n            @click=${this.onClick}\n            @focus=${this.onFocus}\n            @blur=${this.onBlur}\n            @keydown=${this.onKeydown}>\n          ${this.renderRipple()}\n          ${this.outlined?this.renderOutline():this.renderLabel()}\n          ${this.renderLeadingIcon()}\n          <span class=\"mdc-select__selected-text-container\">\n            <span class=\"mdc-select__selected-text\">${this.selectedText}</span>\n          </span>\n          <span class=\"mdc-select__dropdown-icon\">\n            <svg\n                class=\"mdc-select__dropdown-icon-graphic\"\n                viewBox=\"7 10 10 5\"\n                focusable=\"false\">\n              <polygon\n                  class=\"mdc-select__dropdown-icon-inactive\"\n                  stroke=\"none\"\n                  fill-rule=\"evenodd\"\n                  points=\"7 10 12 15 17 10\">\n              </polygon>\n              <polygon\n                  class=\"mdc-select__dropdown-icon-active\"\n                  stroke=\"none\"\n                  fill-rule=\"evenodd\"\n                  points=\"7 15 12 10 17 15\">\n              </polygon>\n            </svg>\n          </span>\n          ${this.renderLineRipple()}\n        </div>\n        <mwc-menu\n            innerRole=\"listbox\"\n            wrapFocus\n            class=\"mdc-select__menu mdc-menu mdc-menu-surface ${s(t)}\"\n            activatable\n            .fullwidth=${!this.fixedMenuPosition&&!this.naturalMenuWidth}\n            .open=${this.menuOpen}\n            .anchor=${this.anchorElement}\n            .fixed=${this.fixedMenuPosition}\n            @selected=${this.onSelected}\n            @opened=${this.onOpened}\n            @closed=${this.onClosed}\n            @items-updated=${this.onItemsUpdated}\n            @keydown=${this.handleTypeahead}>\n          <slot></slot>\n        </mwc-menu>\n      </div>\n      ${this.renderHelperText()}`}renderRipple(){return this.outlined?m:a`\n      <span class=\"mdc-select__ripple\"></span>\n    `}renderOutline(){return this.outlined?a`\n      <mwc-notched-outline\n          .width=${this.outlineWidth}\n          .open=${this.outlineOpen}\n          class=\"mdc-notched-outline\">\n        ${this.renderLabel()}\n      </mwc-notched-outline>`:m}renderLabel(){return this.label?a`\n      <span\n          .floatingLabelFoundation=${f(this.label)}\n          id=\"label\">${this.label}</span>\n    `:m}renderLeadingIcon(){return this.icon?a`<mwc-icon class=\"mdc-select__icon\"><div>${this.icon}</div></mwc-icon>`:m}renderLineRipple(){return this.outlined?m:a`\n      <span .lineRippleFoundation=${g()}></span>\n    `}renderHelperText(){if(!this.shouldRenderHelperText)return m;const e=this.validationMessage&&!this.isUiValid;return a`\n        <p\n          class=\"mdc-select-helper-text ${s({\"mdc-select-helper-text--validation-msg\":e})}\"\n          id=\"helper-text\">${e?this.validationMessage:this.helper}</p>`}createAdapter(){return Object.assign(Object.assign({},p(this.mdcRoot)),{activateBottomLine:()=>{this.lineRippleElement&&this.lineRippleElement.lineRippleFoundation.activate()},deactivateBottomLine:()=>{this.lineRippleElement&&this.lineRippleElement.lineRippleFoundation.deactivate()},hasLabel:()=>!!this.label,floatLabel:e=>{this.labelElement&&this.labelElement.floatingLabelFoundation.float(e)},getLabelWidth:()=>this.labelElement?this.labelElement.floatingLabelFoundation.getWidth():0,setLabelRequired:e=>{this.labelElement&&this.labelElement.floatingLabelFoundation.setRequired(e)},hasOutline:()=>this.outlined,notchOutline:e=>{this.outlineElement&&!this.outlineOpen&&(this.outlineWidth=e,this.outlineOpen=!0)},closeOutline:()=>{this.outlineElement&&(this.outlineOpen=!1)},setRippleCenter:e=>{if(this.lineRippleElement){this.lineRippleElement.lineRippleFoundation.setRippleCenter(e)}},notifyChange:async e=>{if(!this.valueSetDirectly&&e===this.value)return;this.valueSetDirectly=!1,this.value=e,await this.updateComplete;const t=new Event(\"change\",{bubbles:!0});this.dispatchEvent(t)},setSelectedText:e=>this.selectedText=e,isSelectAnchorFocused:()=>{const e=this.anchorElement;if(!e)return!1;return e.getRootNode().activeElement===e},getSelectAnchorAttr:e=>{const t=this.anchorElement;return t?t.getAttribute(e):null},setSelectAnchorAttr:(e,t)=>{const i=this.anchorElement;i&&i.setAttribute(e,t)},removeSelectAnchorAttr:e=>{const t=this.anchorElement;t&&t.removeAttribute(e)},openMenu:()=>{this.menuOpen=!0},closeMenu:()=>{this.menuOpen=!1},addMenuClass:()=>{},removeMenuClass:()=>{},getAnchorElement:()=>this.anchorElement,setMenuAnchorElement:()=>{},setMenuAnchorCorner:()=>{const e=this.menuElement;e&&(e.corner=\"BOTTOM_START\")},setMenuWrapFocus:e=>{const t=this.menuElement;t&&(t.wrapFocus=e)},focusMenuItemAtIndex:e=>{const t=this.menuElement;if(!t)return;const i=t.items[e];i&&i.focus()},getMenuItemCount:()=>{const e=this.menuElement;return e?e.items.length:0},getMenuItemValues:()=>{const e=this.menuElement;if(!e)return[];return e.items.map((e=>e.value))},getMenuItemTextAtIndex:e=>{const t=this.menuElement;if(!t)return\"\";const i=t.items[e];return i?i.text:\"\"},getSelectedIndex:()=>this.index,setSelectedIndex:()=>{},isTypeaheadInProgress:()=>k(this.typeaheadState),typeaheadMatchItem:(e,t)=>{if(!this.menuElement)return-1;const i={focusItemAtIndex:e=>{this.menuElement.focusItemAtIndex(e)},focusedItemIndex:t||this.menuElement.getFocusedItemIndex(),nextChar:e,sortedIndexByFirstChar:this.sortedIndexByFirstChar,skipFocus:!1,isItemAtIndexDisabled:e=>this.items[e].disabled},c=A(i,this.typeaheadState);return-1!==c&&this.select(c),c}})}checkValidity(){const e=this._checkValidity(this.value);if(!e){const e=new Event(\"invalid\",{bubbles:!1,cancelable:!0});this.dispatchEvent(e)}return e}reportValidity(){const e=this.checkValidity();return this.isUiValid=e,e}_checkValidity(e){const t=this.formElement.validity;let i=D(t);if(this.validityTransform){const t=this.validityTransform(e,i);i=Object.assign(Object.assign({},i),t)}return this._validity=i,this._validity.valid}setCustomValidity(e){this.validationMessage=e,this.formElement.setCustomValidity(e)}async getUpdateComplete(){await this._menuUpdateComplete;return await super.getUpdateComplete()}async firstUpdated(){const e=this.menuElement;if(e&&(this._menuUpdateComplete=e.updateComplete,await this._menuUpdateComplete),super.firstUpdated(),this.mdcFoundation.isValid=()=>!0,this.mdcFoundation.setValid=()=>{},this.mdcFoundation.setDisabled(this.disabled),this.validateOnInitialRender&&this.reportValidity(),!this.selected){!this.items.length&&this.slotElement&&this.slotElement.assignedNodes({flatten:!0}).length&&(await new Promise((e=>requestAnimationFrame(e))),await this.layout());const e=this.items.length&&\"\"===this.items[0].value;if(!this.value&&e)return void this.select(0);this.selectByValue(this.value)}this.sortedIndexByFirstChar=C(this.items.length,(e=>this.items[e].text))}onItemsUpdated(){this.sortedIndexByFirstChar=C(this.items.length,(e=>this.items[e].text))}select(e){const t=this.menuElement;t&&t.select(e)}selectByValue(e){let t=-1;for(let i=0;i<this.items.length;i++){if(this.items[i].value===e){t=i;break}}this.valueSetDirectly=!0,this.select(t),this.mdcFoundation.handleChange()}disconnectedCallback(){super.disconnectedCallback();for(const e of this.listeners)e.target.removeEventListener(e.name,e.cb)}focus(){const e=new CustomEvent(\"focus\"),t=this.anchorElement;t&&(t.dispatchEvent(e),t.focus())}blur(){const e=new CustomEvent(\"blur\"),t=this.anchorElement;t&&(t.dispatchEvent(e),t.blur())}onFocus(){this.mdcFoundation&&this.mdcFoundation.handleFocus()}onBlur(){this.mdcFoundation&&this.mdcFoundation.handleBlur();const e=this.menuElement;e&&!e.open&&this.reportValidity()}onClick(e){if(this.mdcFoundation){this.focus();const t=e.target.getBoundingClientRect();let i=0;i=\"touches\"in e?e.touches[0].clientX:e.clientX;const c=i-t.left;this.mdcFoundation.handleClick(c)}}onKeydown(e){const t=v(e)===y.ARROW_UP,i=v(e)===y.ARROW_DOWN;if(i||t){const c=t&&this.index>0,l=i&&this.index<this.items.length-1;return c?this.select(this.index-1):l&&this.select(this.index+1),e.preventDefault(),void this.mdcFoundation.openMenu()}this.mdcFoundation.handleKeydown(e)}handleTypeahead(e){if(!this.menuElement)return;const t=this.menuElement.getFocusedItemIndex(),i=h(e.target)?e.target:null;!function(e,t){var i=e.event,c=e.isTargetListItem,l=e.focusedItemIndex,d=e.focusItemAtIndex,o=e.sortedIndexByFirstChar,n=e.isItemAtIndexDisabled,a=\"ArrowLeft\"===v(i),s=\"ArrowUp\"===v(i),r=\"ArrowRight\"===v(i),m=\"ArrowDown\"===v(i),p=\"Home\"===v(i),h=\"End\"===v(i),u=\"Enter\"===v(i),f=\"Spacebar\"===v(i);i.ctrlKey||i.metaKey||a||s||r||m||p||h||u||(f||1!==i.key.length?f&&(c&&E(i),c&&k(t)&&A({focusItemAtIndex:d,focusedItemIndex:l,nextChar:\" \",sortedIndexByFirstChar:o,skipFocus:!1,isItemAtIndexDisabled:n},t)):(E(i),A({focusItemAtIndex:d,focusedItemIndex:l,nextChar:i.key.toLowerCase(),sortedIndexByFirstChar:o,skipFocus:!1,isItemAtIndexDisabled:n},t)))}({event:e,focusItemAtIndex:e=>{this.menuElement.focusItemAtIndex(e)},focusedItemIndex:t,isTargetListItem:!!i&&i.hasAttribute(\"mwc-list-item\"),sortedIndexByFirstChar:this.sortedIndexByFirstChar,isItemAtIndexDisabled:e=>this.items[e].disabled},this.typeaheadState)}async onSelected(e){this.mdcFoundation||await this.updateComplete,this.mdcFoundation.handleMenuItemAction(e.detail.index);const t=this.items[e.detail.index];t&&(this.value=t.value)}onOpened(){this.mdcFoundation&&(this.menuOpen=!0,this.mdcFoundation.handleMenuOpened())}onClosed(){this.mdcFoundation&&(this.menuOpen=!1,this.mdcFoundation.handleMenuClosed())}setFormData(e){this.name&&null!==this.selected&&e.append(this.name,this.value)}async layout(e=!0){this.mdcFoundation&&this.mdcFoundation.layout(),await this.updateComplete;const t=this.menuElement;t&&t.layout(e);const i=this.labelElement;if(!i)return void(this.outlineOpen=!1);const c=!!this.label&&!!this.value;if(i.floatingLabelFoundation.float(c),!this.outlined)return;this.outlineOpen=c,await this.updateComplete;const l=i.floatingLabelFoundation.getWidth();this.outlineOpen&&(this.outlineWidth=l)}async layoutOptions(){this.mdcFoundation&&this.mdcFoundation.layoutOptions()}}c([l(\".mdc-select\")],M.prototype,\"mdcRoot\",void 0),c([l(\".formElement\")],M.prototype,\"formElement\",void 0),c([l(\"slot\")],M.prototype,\"slotElement\",void 0),c([l(\"select\")],M.prototype,\"nativeSelectElement\",void 0),c([l(\"input\")],M.prototype,\"nativeInputElement\",void 0),c([l(\".mdc-line-ripple\")],M.prototype,\"lineRippleElement\",void 0),c([l(\".mdc-floating-label\")],M.prototype,\"labelElement\",void 0),c([l(\"mwc-notched-outline\")],M.prototype,\"outlineElement\",void 0),c([l(\".mdc-menu\")],M.prototype,\"menuElement\",void 0),c([l(\".mdc-select__anchor\")],M.prototype,\"anchorElement\",void 0),c([d({type:Boolean,attribute:\"disabled\",reflect:!0}),w((function(e){this.mdcFoundation&&this.mdcFoundation.setDisabled(e)}))],M.prototype,\"disabled\",void 0),c([d({type:Boolean}),w((function(e,t){void 0!==t&&this.outlined!==t&&this.layout(!1)}))],M.prototype,\"outlined\",void 0),c([d({type:String}),w((function(e,t){void 0!==t&&this.label!==t&&this.layout(!1)}))],M.prototype,\"label\",void 0),c([o()],M.prototype,\"outlineOpen\",void 0),c([o()],M.prototype,\"outlineWidth\",void 0),c([d({type:String}),w((function(e){if(this.mdcFoundation){const t=null===this.selected&&!!e,i=this.selected&&this.selected.value!==e;(t||i)&&this.selectByValue(e),this.reportValidity()}}))],M.prototype,\"value\",void 0),c([d()],M.prototype,\"name\",void 0),c([o()],M.prototype,\"selectedText\",void 0),c([d({type:String})],M.prototype,\"icon\",void 0),c([o()],M.prototype,\"menuOpen\",void 0),c([d({type:String})],M.prototype,\"helper\",void 0),c([d({type:Boolean})],M.prototype,\"validateOnInitialRender\",void 0),c([d({type:String})],M.prototype,\"validationMessage\",void 0),c([d({type:Boolean})],M.prototype,\"required\",void 0),c([d({type:Boolean})],M.prototype,\"naturalMenuWidth\",void 0),c([o()],M.prototype,\"isUiValid\",void 0),c([d({type:Boolean})],M.prototype,\"fixedMenuPosition\",void 0),c([n({capture:!0})],M.prototype,\"handleTypeahead\",null);const L=u`.mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);position:absolute;left:0;-webkit-transform-origin:left top;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform;transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1),color 150ms cubic-bezier(0.4, 0, 0.2, 1)}[dir=rtl] .mdc-floating-label,.mdc-floating-label[dir=rtl]{right:0;left:auto;-webkit-transform-origin:right top;transform-origin:right top;text-align:right}.mdc-floating-label--float-above{cursor:auto}.mdc-floating-label--required::after{margin-left:1px;margin-right:0px;content:\"*\"}[dir=rtl] .mdc-floating-label--required::after,.mdc-floating-label--required[dir=rtl]::after{margin-left:0;margin-right:1px}.mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-standard 250ms 1}@keyframes mdc-floating-label-shake-float-above-standard{0%{transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(-106%) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75)}100%{transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75)}}@keyframes mdc-ripple-fg-radius-in{from{animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1)}to{transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}}@keyframes mdc-ripple-fg-opacity-in{from{animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@keyframes mdc-ripple-fg-opacity-out{from{animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}.mdc-line-ripple::before,.mdc-line-ripple::after{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:\"\"}.mdc-line-ripple::before{border-bottom-width:1px;z-index:1}.mdc-line-ripple::after{transform:scaleX(0);border-bottom-width:2px;opacity:0;z-index:2}.mdc-line-ripple::after{transition:transform 180ms cubic-bezier(0.4, 0, 0.2, 1),opacity 180ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-line-ripple--active::after{transform:scaleX(1);opacity:1}.mdc-line-ripple--deactivating::after{opacity:0}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}[dir=rtl] .mdc-notched-outline,.mdc-notched-outline[dir=rtl]{text-align:right}.mdc-notched-outline__leading,.mdc-notched-outline__notch,.mdc-notched-outline__trailing{box-sizing:border-box;height:100%;border-top:1px solid;border-bottom:1px solid;pointer-events:none}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;width:12px}[dir=rtl] .mdc-notched-outline__leading,.mdc-notched-outline__leading[dir=rtl]{border-left:none;border-right:1px solid}.mdc-notched-outline__trailing{border-left:none;border-right:1px solid;flex-grow:1}[dir=rtl] .mdc-notched-outline__trailing,.mdc-notched-outline__trailing[dir=rtl]{border-left:1px solid;border-right:none}.mdc-notched-outline__notch{flex:0 0 auto;width:auto;max-width:calc(100% - 12px * 2)}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:calc(100% / 0.75)}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch,.mdc-notched-outline--notched .mdc-notched-outline__notch[dir=rtl]{padding-left:8px;padding-right:0}.mdc-notched-outline--no-label .mdc-notched-outline__notch{display:none}.mdc-select{display:inline-flex;position:relative}.mdc-select:not(.mdc-select--disabled) .mdc-select__selected-text{color:rgba(0, 0, 0, 0.87)}.mdc-select.mdc-select--disabled .mdc-select__selected-text{color:rgba(0, 0, 0, 0.38)}.mdc-select:not(.mdc-select--disabled) .mdc-floating-label{color:rgba(0, 0, 0, 0.6)}.mdc-select:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:rgba(98, 0, 238, 0.87)}.mdc-select.mdc-select--disabled .mdc-floating-label{color:rgba(0, 0, 0, 0.38)}.mdc-select:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:rgba(0, 0, 0, 0.54)}.mdc-select:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon{fill:#6200ee;fill:var(--mdc-theme-primary, #6200ee)}.mdc-select.mdc-select--disabled .mdc-select__dropdown-icon{fill:rgba(0, 0, 0, 0.38)}.mdc-select:not(.mdc-select--disabled)+.mdc-select-helper-text{color:rgba(0, 0, 0, 0.6)}.mdc-select.mdc-select--disabled+.mdc-select-helper-text{color:rgba(0, 0, 0, 0.38)}.mdc-select:not(.mdc-select--disabled) .mdc-select__icon{color:rgba(0, 0, 0, 0.54)}.mdc-select.mdc-select--disabled .mdc-select__icon{color:rgba(0, 0, 0, 0.38)}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-select.mdc-select--disabled .mdc-select__selected-text{color:GrayText}.mdc-select.mdc-select--disabled .mdc-select__dropdown-icon{fill:red}.mdc-select.mdc-select--disabled .mdc-floating-label{color:GrayText}.mdc-select.mdc-select--disabled .mdc-line-ripple::before{border-bottom-color:GrayText}.mdc-select.mdc-select--disabled .mdc-notched-outline__leading,.mdc-select.mdc-select--disabled .mdc-notched-outline__notch,.mdc-select.mdc-select--disabled .mdc-notched-outline__trailing{border-color:GrayText}.mdc-select.mdc-select--disabled .mdc-select__icon{color:GrayText}.mdc-select.mdc-select--disabled+.mdc-select-helper-text{color:GrayText}}.mdc-select .mdc-floating-label{top:50%;transform:translateY(-50%);pointer-events:none}.mdc-select .mdc-select__anchor{padding-left:16px;padding-right:0}[dir=rtl] .mdc-select .mdc-select__anchor,.mdc-select .mdc-select__anchor[dir=rtl]{padding-left:0;padding-right:16px}.mdc-select.mdc-select--with-leading-icon .mdc-select__anchor{padding-left:0;padding-right:0}[dir=rtl] .mdc-select.mdc-select--with-leading-icon .mdc-select__anchor,.mdc-select.mdc-select--with-leading-icon .mdc-select__anchor[dir=rtl]{padding-left:0;padding-right:0}.mdc-select .mdc-select__icon{width:24px;height:24px;font-size:24px}.mdc-select .mdc-select__dropdown-icon{width:24px;height:24px}.mdc-select .mdc-select__menu .mdc-deprecated-list-item{padding-left:16px;padding-right:16px}[dir=rtl] .mdc-select .mdc-select__menu .mdc-deprecated-list-item,.mdc-select .mdc-select__menu .mdc-deprecated-list-item[dir=rtl]{padding-left:16px;padding-right:16px}.mdc-select .mdc-select__menu .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:12px}[dir=rtl] .mdc-select .mdc-select__menu .mdc-deprecated-list-item__graphic,.mdc-select .mdc-select__menu .mdc-deprecated-list-item__graphic[dir=rtl]{margin-left:12px;margin-right:0}.mdc-select__dropdown-icon{margin-left:12px;margin-right:12px;display:inline-flex;position:relative;align-self:center;align-items:center;justify-content:center;flex-shrink:0;pointer-events:none}.mdc-select__dropdown-icon .mdc-select__dropdown-icon-active,.mdc-select__dropdown-icon .mdc-select__dropdown-icon-inactive{position:absolute;top:0;left:0}.mdc-select__dropdown-icon .mdc-select__dropdown-icon-graphic{width:41.6666666667%;height:20.8333333333%}.mdc-select__dropdown-icon .mdc-select__dropdown-icon-inactive{opacity:1;transition:opacity 75ms linear 75ms}.mdc-select__dropdown-icon .mdc-select__dropdown-icon-active{opacity:0;transition:opacity 75ms linear}[dir=rtl] .mdc-select__dropdown-icon,.mdc-select__dropdown-icon[dir=rtl]{margin-left:12px;margin-right:12px}.mdc-select--activated .mdc-select__dropdown-icon .mdc-select__dropdown-icon-inactive{opacity:0;transition:opacity 49.5ms linear}.mdc-select--activated .mdc-select__dropdown-icon .mdc-select__dropdown-icon-active{opacity:1;transition:opacity 100.5ms linear 49.5ms}.mdc-select__anchor{width:200px;min-width:0;flex:1 1 auto;position:relative;box-sizing:border-box;overflow:hidden;outline:none;cursor:pointer}.mdc-select__anchor .mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-select__selected-text-container{display:flex;appearance:none;pointer-events:none;box-sizing:border-box;width:auto;min-width:0;flex-grow:1;height:28px;border:none;outline:none;padding:0;background-color:transparent;color:inherit}.mdc-select__selected-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;width:100%;text-align:left}[dir=rtl] .mdc-select__selected-text,.mdc-select__selected-text[dir=rtl]{text-align:right}.mdc-select--invalid:not(.mdc-select--disabled) .mdc-floating-label{color:#b00020;color:var(--mdc-theme-error, #b00020)}.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-floating-label{color:#b00020;color:var(--mdc-theme-error, #b00020)}.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--invalid+.mdc-select-helper-text--validation-msg{color:#b00020;color:var(--mdc-theme-error, #b00020)}.mdc-select--invalid:not(.mdc-select--disabled) .mdc-select__dropdown-icon{fill:#b00020;fill:var(--mdc-theme-error, #b00020)}.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-select__dropdown-icon{fill:#b00020;fill:var(--mdc-theme-error, #b00020)}.mdc-select--disabled{cursor:default;pointer-events:none}.mdc-select--with-leading-icon .mdc-select__menu .mdc-deprecated-list-item{padding-left:12px;padding-right:12px}[dir=rtl] .mdc-select--with-leading-icon .mdc-select__menu .mdc-deprecated-list-item,.mdc-select--with-leading-icon .mdc-select__menu .mdc-deprecated-list-item[dir=rtl]{padding-left:12px;padding-right:12px}.mdc-select__menu .mdc-deprecated-list .mdc-select__icon,.mdc-select__menu .mdc-list .mdc-select__icon{margin-left:0;margin-right:0}[dir=rtl] .mdc-select__menu .mdc-deprecated-list .mdc-select__icon,[dir=rtl] .mdc-select__menu .mdc-list .mdc-select__icon,.mdc-select__menu .mdc-deprecated-list .mdc-select__icon[dir=rtl],.mdc-select__menu .mdc-list .mdc-select__icon[dir=rtl]{margin-left:0;margin-right:0}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--activated,.mdc-select__menu .mdc-list .mdc-deprecated-list-item--selected,.mdc-select__menu .mdc-list .mdc-deprecated-list-item--activated{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-deprecated-list-item__graphic,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--activated .mdc-deprecated-list-item__graphic,.mdc-select__menu .mdc-list .mdc-deprecated-list-item--selected .mdc-deprecated-list-item__graphic,.mdc-select__menu .mdc-list .mdc-deprecated-list-item--activated .mdc-deprecated-list-item__graphic{color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-select__menu .mdc-list-item__start{display:inline-flex;align-items:center}.mdc-select__option{padding-left:16px;padding-right:16px}[dir=rtl] .mdc-select__option,.mdc-select__option[dir=rtl]{padding-left:16px;padding-right:16px}.mdc-select__one-line-option.mdc-list-item--with-one-line{height:48px}.mdc-select__two-line-option.mdc-list-item--with-two-lines{height:64px}.mdc-select__two-line-option.mdc-list-item--with-two-lines .mdc-list-item__start{margin-top:20px}.mdc-select__two-line-option.mdc-list-item--with-two-lines .mdc-list-item__primary-text{display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-select__two-line-option.mdc-list-item--with-two-lines .mdc-list-item__primary-text::before{display:inline-block;width:0;height:28px;content:\"\";vertical-align:0}.mdc-select__two-line-option.mdc-list-item--with-two-lines .mdc-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:\"\";vertical-align:-20px}.mdc-select__two-line-option.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end{display:block;margin-top:0;line-height:normal}.mdc-select__two-line-option.mdc-list-item--with-two-lines.mdc-list-item--with-trailing-meta .mdc-list-item__end::before{display:inline-block;width:0;height:36px;content:\"\";vertical-align:0}.mdc-select__option-with-leading-content{padding-left:0;padding-right:12px}.mdc-select__option-with-leading-content.mdc-list-item{padding-left:0;padding-right:auto}[dir=rtl] .mdc-select__option-with-leading-content.mdc-list-item,.mdc-select__option-with-leading-content.mdc-list-item[dir=rtl]{padding-left:auto;padding-right:0}.mdc-select__option-with-leading-content .mdc-list-item__start{margin-left:12px;margin-right:0}[dir=rtl] .mdc-select__option-with-leading-content .mdc-list-item__start,.mdc-select__option-with-leading-content .mdc-list-item__start[dir=rtl]{margin-left:0;margin-right:12px}.mdc-select__option-with-leading-content .mdc-list-item__start{width:36px;height:24px}[dir=rtl] .mdc-select__option-with-leading-content,.mdc-select__option-with-leading-content[dir=rtl]{padding-left:12px;padding-right:0}.mdc-select__option-with-meta.mdc-list-item{padding-left:auto;padding-right:0}[dir=rtl] .mdc-select__option-with-meta.mdc-list-item,.mdc-select__option-with-meta.mdc-list-item[dir=rtl]{padding-left:0;padding-right:auto}.mdc-select__option-with-meta .mdc-list-item__end{margin-left:12px;margin-right:12px}[dir=rtl] .mdc-select__option-with-meta .mdc-list-item__end,.mdc-select__option-with-meta .mdc-list-item__end[dir=rtl]{margin-left:12px;margin-right:12px}.mdc-select--filled .mdc-select__anchor{height:56px;display:flex;align-items:baseline}.mdc-select--filled .mdc-select__anchor::before{display:inline-block;width:0;height:40px;content:\"\";vertical-align:0}.mdc-select--filled.mdc-select--no-label .mdc-select__anchor .mdc-select__selected-text::before{content:\"​\"}.mdc-select--filled.mdc-select--no-label .mdc-select__anchor .mdc-select__selected-text-container{height:100%;display:inline-flex;align-items:center}.mdc-select--filled.mdc-select--no-label .mdc-select__anchor::before{display:none}.mdc-select--filled .mdc-select__anchor{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:0;border-bottom-left-radius:0}.mdc-select--filled:not(.mdc-select--disabled) .mdc-select__anchor{background-color:whitesmoke}.mdc-select--filled.mdc-select--disabled .mdc-select__anchor{background-color:#fafafa}.mdc-select--filled:not(.mdc-select--disabled) .mdc-line-ripple::before{border-bottom-color:rgba(0, 0, 0, 0.42)}.mdc-select--filled:not(.mdc-select--disabled):hover .mdc-line-ripple::before{border-bottom-color:rgba(0, 0, 0, 0.87)}.mdc-select--filled:not(.mdc-select--disabled) .mdc-line-ripple::after{border-bottom-color:#6200ee;border-bottom-color:var(--mdc-theme-primary, #6200ee)}.mdc-select--filled.mdc-select--disabled .mdc-line-ripple::before{border-bottom-color:rgba(0, 0, 0, 0.06)}.mdc-select--filled .mdc-floating-label{max-width:calc(100% - 64px)}.mdc-select--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 64px / 0.75)}.mdc-select--filled .mdc-menu-surface--is-open-below{border-top-left-radius:0px;border-top-right-radius:0px}.mdc-select--filled.mdc-select--focused.mdc-line-ripple::after{transform:scale(1, 2);opacity:1}.mdc-select--filled .mdc-floating-label{left:16px;right:initial}[dir=rtl] .mdc-select--filled .mdc-floating-label,.mdc-select--filled .mdc-floating-label[dir=rtl]{left:initial;right:16px}.mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label{left:48px;right:initial}[dir=rtl] .mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label,.mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label[dir=rtl]{left:initial;right:48px}.mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label{max-width:calc(100% - 96px)}.mdc-select--filled.mdc-select--with-leading-icon .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 96px / 0.75)}.mdc-select--invalid:not(.mdc-select--disabled) .mdc-line-ripple::before{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-select--invalid:not(.mdc-select--disabled):hover .mdc-line-ripple::before{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-select--invalid:not(.mdc-select--disabled) .mdc-line-ripple::after{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-select--outlined{border:none}.mdc-select--outlined .mdc-select__anchor{height:56px}.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--float-above{transform:translateY(-37.25px) scale(1)}.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--float-above{font-size:.75rem}.mdc-select--outlined .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) scale(0.75)}.mdc-select--outlined .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-select-outlined-56px 250ms 1}@keyframes mdc-floating-label-shake-float-above-select-outlined-56px{0%{transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75)}100%{transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}}.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;border-bottom-left-radius:var(--mdc-shape-small, 4px)}[dir=rtl] .mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl]{border-top-left-radius:0;border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:4px;border-bottom-right-radius:var(--mdc-shape-small, 4px);border-bottom-left-radius:0}@supports(top: max(0%)){.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px, var(--mdc-shape-small, 4px))}}@supports(top: max(0%)){.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:calc(100% - max(12px, var(--mdc-shape-small, 4px)) * 2)}}.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:4px;border-bottom-right-radius:var(--mdc-shape-small, 4px);border-bottom-left-radius:0}[dir=rtl] .mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__trailing,.mdc-select--outlined .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl]{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;border-bottom-left-radius:var(--mdc-shape-small, 4px)}@supports(top: max(0%)){.mdc-select--outlined .mdc-select__anchor{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}[dir=rtl] .mdc-select--outlined .mdc-select__anchor,.mdc-select--outlined .mdc-select__anchor[dir=rtl]{padding-left:0}@supports(top: max(0%)){[dir=rtl] .mdc-select--outlined .mdc-select__anchor,.mdc-select--outlined .mdc-select__anchor[dir=rtl]{padding-right:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}@supports(top: max(0%)){.mdc-select--outlined+.mdc-select-helper-text{margin-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}[dir=rtl] .mdc-select--outlined+.mdc-select-helper-text,.mdc-select--outlined+.mdc-select-helper-text[dir=rtl]{margin-left:0}@supports(top: max(0%)){[dir=rtl] .mdc-select--outlined+.mdc-select-helper-text,.mdc-select--outlined+.mdc-select-helper-text[dir=rtl]{margin-right:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}.mdc-select--outlined:not(.mdc-select--disabled) .mdc-select__anchor{background-color:transparent}.mdc-select--outlined.mdc-select--disabled .mdc-select__anchor{background-color:transparent}.mdc-select--outlined:not(.mdc-select--disabled) .mdc-notched-outline__leading,.mdc-select--outlined:not(.mdc-select--disabled) .mdc-notched-outline__notch,.mdc-select--outlined:not(.mdc-select--disabled) .mdc-notched-outline__trailing{border-color:rgba(0, 0, 0, 0.38)}.mdc-select--outlined:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:rgba(0, 0, 0, 0.87)}.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__trailing{border-width:2px}.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee)}.mdc-select--outlined.mdc-select--disabled .mdc-notched-outline__leading,.mdc-select--outlined.mdc-select--disabled .mdc-notched-outline__notch,.mdc-select--outlined.mdc-select--disabled .mdc-notched-outline__trailing{border-color:rgba(0, 0, 0, 0.06)}.mdc-select--outlined .mdc-select__anchor :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-select--outlined .mdc-select__anchor{display:flex;align-items:baseline;overflow:visible}.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-select-outlined 250ms 1}.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--float-above{transform:translateY(-37.25px) scale(1)}.mdc-select--outlined .mdc-select__anchor .mdc-floating-label--float-above{font-size:.75rem}.mdc-select--outlined .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) scale(0.75)}.mdc-select--outlined .mdc-select__anchor.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-select--outlined .mdc-select__anchor .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-select--outlined .mdc-select__anchor .mdc-select__selected-text::before{content:\"​\"}.mdc-select--outlined .mdc-select__anchor .mdc-select__selected-text-container{height:100%;display:inline-flex;align-items:center}.mdc-select--outlined .mdc-select__anchor::before{display:none}.mdc-select--outlined .mdc-select__selected-text-container{display:flex;border:none;z-index:1;background-color:transparent}.mdc-select--outlined .mdc-select__icon{z-index:2}.mdc-select--outlined .mdc-floating-label{line-height:1.15rem;left:4px;right:initial}[dir=rtl] .mdc-select--outlined .mdc-floating-label,.mdc-select--outlined .mdc-floating-label[dir=rtl]{left:initial;right:4px}.mdc-select--outlined.mdc-select--focused .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled) .mdc-notched-outline__leading,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled) .mdc-notched-outline__notch,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled) .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error, #b00020)}.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled):not(.mdc-select--focused) .mdc-select__anchor:hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error, #b00020)}.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__trailing{border-width:2px}.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__leading,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__notch,.mdc-select--outlined.mdc-select--invalid:not(.mdc-select--disabled).mdc-select--focused .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error, #b00020)}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label{left:36px;right:initial}[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label,.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label[dir=rtl]{left:initial;right:36px}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--float-above{transform:translateY(-37.25px) translateX(-32px) scale(1)}[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--float-above,.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--float-above[dir=rtl]{transform:translateY(-37.25px) translateX(32px) scale(1)}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--float-above{font-size:.75rem}.mdc-select--outlined.mdc-select--with-leading-icon.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined.mdc-select--with-leading-icon .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) translateX(-32px) scale(0.75)}[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon.mdc-notched-outline--upgraded .mdc-floating-label--float-above,[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined.mdc-select--with-leading-icon.mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl],.mdc-select--outlined.mdc-select--with-leading-icon .mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl]{transform:translateY(-34.75px) translateX(32px) scale(0.75)}.mdc-select--outlined.mdc-select--with-leading-icon.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-select--outlined.mdc-select--with-leading-icon .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px 250ms 1}@keyframes mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px{0%{transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75)}100%{transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}}[dir=rtl] .mdc-select--outlined.mdc-select--with-leading-icon .mdc-floating-label--shake,.mdc-select--outlined.mdc-select--with-leading-icon[dir=rtl] .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px 250ms 1}@keyframes mdc-floating-label-shake-float-above-select-outlined-leading-icon-56px-rtl{0%{transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75)}100%{transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}}.mdc-select--outlined.mdc-select--with-leading-icon .mdc-select__anchor :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 96px)}.mdc-select--outlined .mdc-menu-surface{margin-bottom:8px}.mdc-select--outlined.mdc-select--no-label .mdc-menu-surface,.mdc-select--outlined .mdc-menu-surface--is-open-below{margin-bottom:0}.mdc-select__anchor{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-select__anchor .mdc-select__ripple::before,.mdc-select__anchor .mdc-select__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:\"\"}.mdc-select__anchor .mdc-select__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-select__anchor .mdc-select__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-select__anchor.mdc-ripple-upgraded .mdc-select__ripple::before{transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-select__anchor.mdc-ripple-upgraded .mdc-select__ripple::after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-select__anchor.mdc-ripple-upgraded--unbounded .mdc-select__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-select__anchor.mdc-ripple-upgraded--foreground-activation .mdc-select__ripple::after{animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-select__anchor.mdc-ripple-upgraded--foreground-deactivation .mdc-select__ripple::after{animation:mdc-ripple-fg-opacity-out 150ms;transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-select__anchor .mdc-select__ripple::before,.mdc-select__anchor .mdc-select__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-select__anchor.mdc-ripple-upgraded .mdc-select__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-select__anchor .mdc-select__ripple::before,.mdc-select__anchor .mdc-select__ripple::after{background-color:rgba(0, 0, 0, 0.87);background-color:var(--mdc-ripple-color, rgba(0, 0, 0, 0.87))}.mdc-select__anchor:hover .mdc-select__ripple::before,.mdc-select__anchor.mdc-ripple-surface--hover .mdc-select__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-select__anchor.mdc-ripple-upgraded--background-focused .mdc-select__ripple::before,.mdc-select__anchor:not(.mdc-ripple-upgraded):focus .mdc-select__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-select__anchor .mdc-select__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-deprecated-list-item__ripple::before,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-deprecated-list-item__ripple::after{background-color:#000;background-color:var(--mdc-ripple-color, var(--mdc-theme-on-surface, #000))}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:hover .mdc-deprecated-list-item__ripple::before,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-surface--hover .mdc-deprecated-list-item__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-upgraded--background-focused .mdc-deprecated-list-item__ripple::before,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):focus .mdc-deprecated-list-item__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded) .mdc-deprecated-list-item__ripple::after{transition:opacity 150ms linear}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):active .mdc-deprecated-list-item__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-list-item__ripple::before,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected .mdc-list-item__ripple::after{background-color:#000;background-color:var(--mdc-ripple-color, var(--mdc-theme-on-surface, #000))}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:hover .mdc-list-item__ripple::before,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-surface--hover .mdc-list-item__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-upgraded--background-focused .mdc-list-item__ripple::before,.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):focus .mdc-list-item__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded) .mdc-list-item__ripple::after{transition:opacity 150ms linear}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected:not(.mdc-ripple-upgraded):active .mdc-list-item__ripple::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-select__menu .mdc-deprecated-list .mdc-deprecated-list-item--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-select-helper-text{margin:0;margin-left:16px;margin-right:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.75rem;font-size:var(--mdc-typography-caption-font-size, 0.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:0.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, 0.0333333333em);text-decoration:inherit;text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform, inherit);display:block;margin-top:0;line-height:normal}[dir=rtl] .mdc-select-helper-text,.mdc-select-helper-text[dir=rtl]{margin-left:16px;margin-right:16px}.mdc-select-helper-text::before{display:inline-block;width:0;height:16px;content:\"\";vertical-align:0}.mdc-select-helper-text--validation-msg{opacity:0;transition:opacity 180ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-select--invalid+.mdc-select-helper-text--validation-msg,.mdc-select-helper-text--validation-msg-persistent{opacity:1}.mdc-select--with-leading-icon .mdc-select__icon{display:inline-block;box-sizing:border-box;border:none;text-decoration:none;cursor:pointer;user-select:none;flex-shrink:0;align-self:center;background-color:transparent;fill:currentColor}.mdc-select--with-leading-icon .mdc-select__icon{margin-left:12px;margin-right:12px}[dir=rtl] .mdc-select--with-leading-icon .mdc-select__icon,.mdc-select--with-leading-icon .mdc-select__icon[dir=rtl]{margin-left:12px;margin-right:12px}.mdc-select__icon:not([tabindex]),.mdc-select__icon[tabindex=\"-1\"]{cursor:default;pointer-events:none}.material-icons{font-family:var(--mdc-icon-font, \"Material Icons\");font-weight:normal;font-style:normal;font-size:var(--mdc-icon-size, 24px);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}:host{display:inline-block;vertical-align:top;outline:none}.mdc-select{width:100%}[hidden]{display:none}.mdc-select__icon{z-index:2}.mdc-select--with-leading-icon{--mdc-list-item-graphic-margin: calc( 48px - var(--mdc-list-item-graphic-size, 24px) - var(--mdc-list-side-padding, 16px) )}.mdc-select .mdc-select__anchor .mdc-select__selected-text{overflow:hidden}.mdc-select .mdc-select__anchor *{display:inline-flex}.mdc-select .mdc-select__anchor .mdc-floating-label{display:inline-block}mwc-notched-outline{--mdc-notched-outline-border-color: var( --mdc-select-outlined-idle-border-color, rgba(0, 0, 0, 0.38) );--mdc-notched-outline-notch-offset: 1px}:host(:not([disabled]):hover) .mdc-select:not(.mdc-select--invalid):not(.mdc-select--focused) mwc-notched-outline{--mdc-notched-outline-border-color: var( --mdc-select-outlined-hover-border-color, rgba(0, 0, 0, 0.87) )}:host(:not([disabled])) .mdc-select:not(.mdc-select--disabled) .mdc-select__selected-text{color:rgba(0, 0, 0, 0.87);color:var(--mdc-select-ink-color, rgba(0, 0, 0, 0.87))}:host(:not([disabled])) .mdc-select:not(.mdc-select--disabled) .mdc-line-ripple::before{border-bottom-color:rgba(0, 0, 0, 0.42);border-bottom-color:var(--mdc-select-idle-line-color, rgba(0, 0, 0, 0.42))}:host(:not([disabled])) .mdc-select:not(.mdc-select--disabled):hover .mdc-line-ripple::before{border-bottom-color:rgba(0, 0, 0, 0.87);border-bottom-color:var(--mdc-select-hover-line-color, rgba(0, 0, 0, 0.87))}:host(:not([disabled])) .mdc-select:not(.mdc-select--outlined):not(.mdc-select--disabled) .mdc-select__anchor{background-color:whitesmoke;background-color:var(--mdc-select-fill-color, whitesmoke)}:host(:not([disabled])) .mdc-select.mdc-select--invalid .mdc-select__dropdown-icon{fill:var(--mdc-select-error-dropdown-icon-color, var(--mdc-select-error-color, var(--mdc-theme-error, #b00020)))}:host(:not([disabled])) .mdc-select.mdc-select--invalid .mdc-floating-label,:host(:not([disabled])) .mdc-select.mdc-select--invalid .mdc-floating-label::after{color:var(--mdc-select-error-color, var(--mdc-theme-error, #b00020))}:host(:not([disabled])) .mdc-select.mdc-select--invalid mwc-notched-outline{--mdc-notched-outline-border-color: var(--mdc-select-error-color, var(--mdc-theme-error, #b00020))}.mdc-select__menu--invalid{--mdc-theme-primary: var(--mdc-select-error-color, var(--mdc-theme-error, #b00020))}:host(:not([disabled])) .mdc-select:not(.mdc-select--invalid):not(.mdc-select--focused) .mdc-floating-label,:host(:not([disabled])) .mdc-select:not(.mdc-select--invalid):not(.mdc-select--focused) .mdc-floating-label::after{color:rgba(0, 0, 0, 0.6);color:var(--mdc-select-label-ink-color, rgba(0, 0, 0, 0.6))}:host(:not([disabled])) .mdc-select:not(.mdc-select--invalid):not(.mdc-select--focused) .mdc-select__dropdown-icon{fill:rgba(0, 0, 0, 0.54);fill:var(--mdc-select-dropdown-icon-color, rgba(0, 0, 0, 0.54))}:host(:not([disabled])) .mdc-select.mdc-select--focused mwc-notched-outline{--mdc-notched-outline-stroke-width: 2px;--mdc-notched-outline-notch-offset: 2px}:host(:not([disabled])) .mdc-select.mdc-select--focused:not(.mdc-select--invalid) mwc-notched-outline{--mdc-notched-outline-border-color: var( --mdc-select-focused-label-color, var(--mdc-theme-primary, rgba(98, 0, 238, 0.87)) )}:host(:not([disabled])) .mdc-select.mdc-select--focused:not(.mdc-select--invalid) .mdc-select__dropdown-icon{fill:rgba(98,0,238,.87);fill:var(--mdc-select-focused-dropdown-icon-color, var(--mdc-theme-primary, rgba(98, 0, 238, 0.87)))}:host(:not([disabled])) .mdc-select.mdc-select--focused:not(.mdc-select--invalid) .mdc-floating-label{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}:host(:not([disabled])) .mdc-select.mdc-select--focused:not(.mdc-select--invalid) .mdc-floating-label::after{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}:host(:not([disabled])) .mdc-select-helper-text:not(.mdc-select-helper-text--validation-msg){color:var(--mdc-select-label-ink-color, rgba(0, 0, 0, 0.6))}:host([disabled]){pointer-events:none}:host([disabled]) .mdc-select:not(.mdc-select--outlined).mdc-select--disabled .mdc-select__anchor{background-color:#fafafa;background-color:var(--mdc-select-disabled-fill-color, #fafafa)}:host([disabled]) .mdc-select.mdc-select--outlined mwc-notched-outline{--mdc-notched-outline-border-color: var( --mdc-select-outlined-disabled-border-color, rgba(0, 0, 0, 0.06) )}:host([disabled]) .mdc-select .mdc-select__dropdown-icon{fill:rgba(0, 0, 0, 0.38);fill:var(--mdc-select-disabled-dropdown-icon-color, rgba(0, 0, 0, 0.38))}:host([disabled]) .mdc-select:not(.mdc-select--invalid):not(.mdc-select--focused) .mdc-floating-label,:host([disabled]) .mdc-select:not(.mdc-select--invalid):not(.mdc-select--focused) .mdc-floating-label::after{color:rgba(0, 0, 0, 0.38);color:var(--mdc-select-disabled-ink-color, rgba(0, 0, 0, 0.38))}:host([disabled]) .mdc-select-helper-text{color:rgba(0, 0, 0, 0.38);color:var(--mdc-select-disabled-ink-color, rgba(0, 0, 0, 0.38))}:host([disabled]) .mdc-select__selected-text{color:rgba(0, 0, 0, 0.38);color:var(--mdc-select-disabled-ink-color, rgba(0, 0, 0, 0.38))}`,F=e=>e.stopPropagation();export{M as S,F as a,L as s};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.dba55e54.js",
    "content": "import{al as e,am as a,aj as s,an as r,ao as u}from\"./main-a0d7432d.js\";async function i(i,o,n){const t=new e(\"updateLovelaceResources\"),l=await a(i),d=`/hacsfiles/${o.full_name.split(\"/\")[1]}`,c=s({repository:o,version:n}),p=l.find((e=>e.url.includes(d)));t.debug({namespace:d,url:c,exsisting:p}),p&&p.url!==c?(t.debug(`Updating exsusting resource for ${d}`),await r(i,{url:c,resource_id:p.id,res_type:p.type})):l.map((e=>e.url)).includes(c)||(t.debug(`Adding ${c} to Lovelace resources`),await u(i,{url:c,res_type:\"module\"}))}export{i as u};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.e23b0d0b.js",
    "content": "Intl.PluralRules&&\"function\"==typeof Intl.PluralRules.__addLocaleData&&Intl.PluralRules.__addLocaleData({data:{categories:{cardinal:[\"one\",\"other\"],ordinal:[\"one\",\"two\",\"few\",\"other\"]},fn:function(e,l){var a=String(e).split(\".\"),t=!a[1],o=Number(a[0])==e,n=o&&a[0].slice(-1),r=o&&a[0].slice(-2);return l?1==n&&11!=r?\"one\":2==n&&12!=r?\"two\":3==n&&13!=r?\"few\":\"other\":1==e&&t?\"one\":\"other\"}},locale:\"en\"});\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.e65e9eeb.js",
    "content": "import{aw as e,ax as t,ay as i,a6 as a,a7 as o,a8 as s,a as n,h as r,e as l,$ as d,o as c,r as h,n as p,m as g,az as u,ah as m,aA as v,c as f,aB as y,aC as b,aD as w,d as k}from\"./main-a0d7432d.js\";import\"./c.936d9772.js\";import{A as x}from\"./c.8f19de42.js\";import{i as $}from\"./c.21c042d4.js\";import{c as _}from\"./c.4a97632a.js\";import\"./c.175b9792.js\";import\"./c.88ebfd3e.js\";import\"./c.c4815b5a.js\";import{b as z}from\"./c.05e9df28.js\";import{s as C}from\"./c.5b87ad2c.js\";import\"./c.8e28b461.js\";import\"./c.9d6aaabf.js\";import\"./c.743a15a1.js\";import\"./c.d2d70fc0.js\";import\"./c.bca0f55d.js\";customElements.define(\"ha-icon-next\",class extends e{connectedCallback(){super.connectedCallback(),setTimeout((()=>{this.path=\"ltr\"===window.getComputedStyle(this).direction?t:i}),100)}}),a({_template:o`\n    <style>\n      :host {\n        display: block;\n        /**\n         * Force app-header-layout to have its own stacking context so that its parent can\n         * control the stacking of it relative to other elements (e.g. app-drawer-layout).\n         * This could be done using \\`isolation: isolate\\`, but that's not well supported\n         * across browsers.\n         */\n        position: relative;\n        z-index: 0;\n      }\n\n      #wrapper ::slotted([slot=header]) {\n        @apply --layout-fixed-top;\n        z-index: 1;\n      }\n\n      #wrapper.initializing ::slotted([slot=header]) {\n        position: relative;\n      }\n\n      :host([has-scrolling-region]) {\n        height: 100%;\n      }\n\n      :host([has-scrolling-region]) #wrapper ::slotted([slot=header]) {\n        position: absolute;\n      }\n\n      :host([has-scrolling-region]) #wrapper.initializing ::slotted([slot=header]) {\n        position: relative;\n      }\n\n      :host([has-scrolling-region]) #wrapper #contentContainer {\n        @apply --layout-fit;\n        overflow-y: auto;\n        -webkit-overflow-scrolling: touch;\n      }\n\n      :host([has-scrolling-region]) #wrapper.initializing #contentContainer {\n        position: relative;\n      }\n\n      :host([fullbleed]) {\n        @apply --layout-vertical;\n        @apply --layout-fit;\n      }\n\n      :host([fullbleed]) #wrapper,\n      :host([fullbleed]) #wrapper #contentContainer {\n        @apply --layout-vertical;\n        @apply --layout-flex;\n      }\n\n      #contentContainer {\n        /* Create a stacking context here so that all children appear below the header. */\n        position: relative;\n        z-index: 0;\n      }\n\n      @media print {\n        :host([has-scrolling-region]) #wrapper #contentContainer {\n          overflow-y: visible;\n        }\n      }\n\n    </style>\n\n    <div id=\"wrapper\" class=\"initializing\">\n      <slot id=\"headerSlot\" name=\"header\"></slot>\n\n      <div id=\"contentContainer\">\n        <slot></slot>\n      </div>\n    </div>\n`,is:\"app-header-layout\",behaviors:[x],properties:{hasScrollingRegion:{type:Boolean,value:!1,reflectToAttribute:!0}},observers:[\"resetLayout(isAttached, hasScrollingRegion)\"],get header(){return s(this.$.headerSlot).getDistributedNodes()[0]},_updateLayoutStates:function(){var e=this.header;if(this.isAttached&&e){this.$.wrapper.classList.remove(\"initializing\"),e.scrollTarget=this.hasScrollingRegion?this.$.contentContainer:this.ownerDocument.documentElement;var t=e.offsetHeight;this.hasScrollingRegion?(e.style.left=\"\",e.style.right=\"\"):requestAnimationFrame(function(){var t=this.getBoundingClientRect(),i=document.documentElement.clientWidth-t.right;e.style.left=t.left+\"px\",e.style.right=i+\"px\"}.bind(this));var i=this.$.contentContainer.style;e.fixed&&!e.condenses&&this.hasScrollingRegion?(i.marginTop=t+\"px\",i.paddingTop=\"\"):(i.paddingTop=t+\"px\",i.marginTop=\"\")}}});class E extends(customElements.get(\"app-header-layout\")){static get template(){return o`\n      <style>\n        :host {\n          display: block;\n          /**\n         * Force app-header-layout to have its own stacking context so that its parent can\n         * control the stacking of it relative to other elements (e.g. app-drawer-layout).\n         * This could be done using \\`isolation: isolate\\`, but that's not well supported\n         * across browsers.\n         */\n          position: relative;\n          z-index: 0;\n        }\n\n        #wrapper ::slotted([slot=\"header\"]) {\n          @apply --layout-fixed-top;\n          z-index: 1;\n        }\n\n        #wrapper.initializing ::slotted([slot=\"header\"]) {\n          position: relative;\n        }\n\n        :host([has-scrolling-region]) {\n          height: 100%;\n        }\n\n        :host([has-scrolling-region]) #wrapper ::slotted([slot=\"header\"]) {\n          position: absolute;\n        }\n\n        :host([has-scrolling-region])\n          #wrapper.initializing\n          ::slotted([slot=\"header\"]) {\n          position: relative;\n        }\n\n        :host([has-scrolling-region]) #wrapper #contentContainer {\n          @apply --layout-fit;\n          overflow-y: auto;\n          -webkit-overflow-scrolling: touch;\n        }\n\n        :host([has-scrolling-region]) #wrapper.initializing #contentContainer {\n          position: relative;\n        }\n\n        #contentContainer {\n          /* Create a stacking context here so that all children appear below the header. */\n          position: relative;\n          z-index: 0;\n          /* Using 'transform' will cause 'position: fixed' elements to behave like\n           'position: absolute' relative to this element. */\n          transform: translate(0);\n          margin-left: env(safe-area-inset-left);\n          margin-right: env(safe-area-inset-right);\n        }\n\n        @media print {\n          :host([has-scrolling-region]) #wrapper #contentContainer {\n            overflow-y: visible;\n          }\n        }\n      </style>\n\n      <div id=\"wrapper\" class=\"initializing\">\n        <slot id=\"headerSlot\" name=\"header\"></slot>\n\n        <div id=\"contentContainer\"><slot></slot></div>\n        <slot id=\"fab\" name=\"fab\"></slot>\n      </div>\n    `}}customElements.define(\"ha-app-layout\",E),n([p(\"ha-config-section\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[l()],key:\"isWide\",value:()=>!1},{kind:\"field\",decorators:[l({type:Boolean})],key:\"vertical\",value:()=>!1},{kind:\"field\",decorators:[l({type:Boolean,attribute:\"full-width\"})],key:\"fullWidth\",value:()=>!1},{kind:\"method\",key:\"render\",value:function(){return d`\n      <div\n        class=\"content ${c({narrow:!this.isWide,\"full-width\":this.fullWidth})}\"\n      >\n        <div class=\"header\"><slot name=\"header\"></slot></div>\n        <div\n          class=\"together layout ${c({narrow:!this.isWide,vertical:this.vertical||!this.isWide,horizontal:!this.vertical&&this.isWide})}\"\n        >\n          <div class=\"intro\"><slot name=\"introduction\"></slot></div>\n          <div class=\"panel flex-auto\"><slot></slot></div>\n        </div>\n      </div>\n    `}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return h`\n      :host {\n        display: block;\n      }\n      .content {\n        padding: 28px 20px 0;\n        max-width: 1040px;\n        margin: 0 auto;\n      }\n\n      .layout {\n        display: flex;\n      }\n\n      .horizontal {\n        flex-direction: row;\n      }\n\n      .vertical {\n        flex-direction: column;\n      }\n\n      .flex-auto {\n        flex: 1 1 auto;\n      }\n\n      .header {\n        font-family: var(--paper-font-headline_-_font-family);\n        -webkit-font-smoothing: var(\n          --paper-font-headline_-_-webkit-font-smoothing\n        );\n        font-size: var(--paper-font-headline_-_font-size);\n        font-weight: var(--paper-font-headline_-_font-weight);\n        letter-spacing: var(--paper-font-headline_-_letter-spacing);\n        line-height: var(--paper-font-headline_-_line-height);\n        opacity: var(--dark-primary-opacity);\n      }\n\n      .together {\n        margin-top: 32px;\n      }\n\n      .intro {\n        font-family: var(--paper-font-subhead_-_font-family);\n        -webkit-font-smoothing: var(\n          --paper-font-subhead_-_-webkit-font-smoothing\n        );\n        font-weight: var(--paper-font-subhead_-_font-weight);\n        line-height: var(--paper-font-subhead_-_line-height);\n        width: 100%;\n        opacity: var(--dark-primary-opacity);\n        font-size: 14px;\n        padding-bottom: 20px;\n      }\n\n      .horizontal .intro {\n        max-width: 400px;\n        margin-right: 40px;\n      }\n\n      .panel {\n        margin-top: -24px;\n      }\n\n      .panel ::slotted(*) {\n        margin-top: 24px;\n        display: block;\n      }\n\n      .narrow.content {\n        max-width: 640px;\n      }\n      .narrow .together {\n        margin-top: 20px;\n      }\n      .narrow .intro {\n        padding-bottom: 20px;\n        margin-right: 0;\n        max-width: 500px;\n      }\n\n      .full-width {\n        padding: 0;\n      }\n\n      .full-width .layout {\n        flex-direction: column;\n      }\n    `}}]}}),r);const j=g(((e,t)=>{var i,a;const o=[],s=[],n=[];var r,l;return e.repositories.forEach((t=>{var i;if(\"pending-restart\"===t.status&&n.push(t),e.addedToLovelace(e,t)||s.push(t),t.installed&&null!==(i=e.removed.map((e=>e.repository)))&&void 0!==i&&i.includes(t.full_name)){const i=e.removed.find((e=>e.repository===t.full_name));o.push({name:e.localize(\"entry.messages.removed_repository\",{repository:i.repository}),info:i.reason,severity:\"warning\",dialog:\"remove\",repository:t})}})),null!==(i=e.info)&&void 0!==i&&i.startup&&[\"setup\",\"waiting\",\"startup\"].includes(e.info.stage)&&o.push({name:e.localize(`entry.messages.${e.info.stage}.title`),info:e.localize(`entry.messages.${e.info.stage}.content`),severity:\"warning\"}),null!==(a=e.info)&&void 0!==a&&a.disabled_reason?[{name:e.localize(\"entry.messages.disabled.title\"),secondary:e.localize(`entry.messages.disabled.${null===(r=e.info)||void 0===r?void 0:r.disabled_reason}.title`),info:e.localize(`entry.messages.disabled.${null===(l=e.info)||void 0===l?void 0:l.disabled_reason}.description`),severity:\"error\"}]:(s.length>0&&o.push({name:e.localize(\"entry.messages.resources.title\"),info:e.localize(\"entry.messages.resources.content\",{number:s.length}),severity:\"error\"}),n.length>0&&o.push({name:e.localize(\"entry.messages.restart.title\"),path:t?\"/_my_redirect/server_controls\":void 0,info:e.localize(\"entry.messages.restart.content\",{number:n.length,pluralWording:1===n.length?e.localize(\"common.integration\"):e.localize(\"common.integration_plural\")}),severity:\"error\"}),o)}));let S=n([p(\"hacs-entry-panel\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[l({attribute:!1})],key:\"hacs\",value:void 0},{kind:\"field\",decorators:[l({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[l({attribute:!1})],key:\"route\",value:void 0},{kind:\"field\",decorators:[l({type:Boolean,reflect:!0})],key:\"narrow\",value:void 0},{kind:\"field\",decorators:[l({type:Boolean})],key:\"isWide\",value:void 0},{kind:\"method\",key:\"render\",value:function(){var e,t;const i=[],a=[],o=j(this.hacs,$(this.hass,\"my\"));return this.hacs.repositories.forEach((e=>{e.pending_upgrade&&i.push(e)})),o.forEach((e=>{a.push({iconPath:u,name:e.name,info:e.info,secondary:e.secondary,path:e.path||\"\",severity:e.severity,dialog:e.dialog,repository:e.repository})})),this.dispatchEvent(new CustomEvent(\"update-hacs\",{detail:{messages:a,updates:i},bubbles:!0,composed:!0})),d`\n      <ha-app-layout>\n        <app-header fixed slot=\"header\">\n          <app-toolbar>\n            <ha-menu-button .hass=${this.hass} .narrow=${this.narrow}></ha-menu-button>\n            <div main-title>${this.narrow?\"HACS\":\"Home Assistant Community Store\"}</div>\n          </app-toolbar>\n        </app-header>\n        <ha-config-section .narrow=${this.narrow} .isWide=${this.isWide} full-width>\n          ${0!==(null===(e=this.hacs.messages)||void 0===e?void 0:e.length)?this.hacs.messages.map((e=>d`\n                    <ha-alert\n                      .alertType=${e.severity}\n                      .title=${e.secondary?`${e.name} - ${e.secondary}`:e.name}\n                      .rtl=${_(this.hass)}\n                    >\n                      ${e.info}\n                      <mwc-button\n                        slot=\"action\"\n                        .label=${e.path?this.hacs.localize(\"common.navigate\"):e.dialog?this.hacs.localize(\"common.show\"):\"\"}\n                        @click=${()=>e.path?m(e.path):this._openDialog(e)}\n                      >\n                      </mwc-button>\n                    </ha-alert>\n                  `)):(this.narrow,\"\")}\n          ${0!==(null===(t=this.hacs.updates)||void 0===t?void 0:t.length)?d` <ha-card outlined>\n                <div class=\"title\">${this.hacs.localize(\"common.updates\")}</div>\n                <mwc-list>\n                  ${v(this.hacs.updates).map((e=>d`\n                      <ha-clickable-list-item\n                        graphic=\"avatar\"\n                        disableHref\n                        twoline\n                        @click=${()=>this._openUpdateDialog(e)}\n                      >\n                        ${\"integration\"===e.category?d`\n                              <img\n                                loading=\"lazy\"\n                                .src=${z({domain:e.domain,darkOptimized:this.hass.themes.darkMode,type:\"icon\"})}\n                                referrerpolicy=\"no-referrer\"\n                                @error=${this._onImageError}\n                                @load=${this._onImageLoad}\n                                slot=\"graphic\"\n                              />\n                            `:d`\n                              <ha-svg-icon\n                                slot=\"graphic\"\n                                path=\"${f}\"\n                                style=\"padding-left: 0; height: 40px; width: 40px;\"\n                              >\n                              </ha-svg-icon>\n                            `}\n                        <span>${e.name}</span>\n                        <span slot=\"secondary\"\n                          >${this.hacs.localize(\"sections.pending_repository_upgrade\",{downloaded:e.installed_version,available:e.available_version})}</span\n                        >\n                      </ha-clickable-list-item>\n                    `))}\n                </mwc-list>\n              </ha-card>`:\"\"}\n\n          <ha-card outlined>\n            <mwc-list>\n              ${this.hacs.sections.map((e=>d`\n                  <ha-clickable-list-item\n                    graphic=\"avatar\"\n                    twoline\n                    .hasMeta=${!this.narrow}\n                    href=${e.path}\n                  >\n                    <div\n                      slot=\"graphic\"\n                      class=${e.iconColor?\"icon-background\":\"\"}\n                      .style=\"background-color: ${e.iconColor||\"undefined\"}\"\n                    >\n                      <ha-svg-icon .path=${e.iconPath}></ha-svg-icon>\n                    </div>\n                    <span>${e.name}</span>\n                    <span slot=\"secondary\">${e.description}</span>\n                    ${this.narrow?\"\":d`<ha-icon-next slot=\"meta\"></ha-icon-next>`}\n                  </ha-clickable-list-item>\n                `))}\n              ${$(this.hass,\"my\")&&$(this.hass,\"hassio\")?d`\n                    <ha-clickable-list-item\n                      graphic=\"avatar\"\n                      disableHref\n                      twoline\n                      @click=${this._openSupervisorDialog}\n                      .hasMeta=${!this.narrow}\n                    >\n                      <div\n                        class=\"icon-background\"\n                        slot=\"graphic\"\n                        style=\"background-color: rgb(64, 132, 205)\"\n                      >\n                        <ha-svg-icon .path=${y}></ha-svg-icon>\n                      </div>\n                      <span>${this.hacs.localize(\"sections.addon.title\")}</span>\n                      <span slot=\"secondary\"\n                        >${this.hacs.localize(\"sections.addon.description\")}</span\n                      >\n                    </ha-clickable-list-item>\n                  `:\"\"}\n              <ha-clickable-list-item\n                graphic=\"avatar\"\n                twoline\n                @click=${this._openAboutDialog}\n                disableHref\n              >\n                <div\n                  class=\"icon-background\"\n                  slot=\"graphic\"\n                  style=\"background-color: rgb(74, 89, 99)\"\n                >\n                  <ha-svg-icon .path=${b}></ha-svg-icon>\n                </div>\n                <span>${this.hacs.localize(\"sections.about.title\")}</span>\n                <span slot=\"secondary\">${this.hacs.localize(\"sections.about.description\")}</span>\n              </ha-clickable-list-item>\n            </mwc-list>\n          </ha-card>\n        </ha-config-section>\n      </ha-app-layout>\n    `}},{kind:\"method\",key:\"_onImageLoad\",value:function(e){e.target.style.visibility=\"initial\"}},{kind:\"method\",key:\"_onImageError\",value:function(e){e.target&&(e.target.outerHTML=`\\n      <div slot=\"item-icon\" class=\"icon-background\">\\n        <ha-svg-icon path=\"${f}\" style=\"padding-left: 0; height: 40px; width: 40px;\"></ha-svg-icon>\\n      </div>`)}},{kind:\"method\",key:\"_openDialog\",value:function(e){e.dialog&&(\"remove\"==e.dialog&&(e.dialog=\"removed\"),this.dispatchEvent(new CustomEvent(\"hacs-dialog\",{detail:{type:e.dialog,repository:e.repository},bubbles:!0,composed:!0})))}},{kind:\"method\",key:\"_openUpdateDialog\",value:function(e){this.dispatchEvent(new CustomEvent(\"hacs-dialog\",{detail:{type:\"update\",repository:e.id},bubbles:!0,composed:!0}))}},{kind:\"method\",key:\"_openAboutDialog\",value:async function(){C(this,this.hacs)}},{kind:\"method\",key:\"_openSupervisorDialog\",value:async function(){this.dispatchEvent(new CustomEvent(\"hacs-dialog\",{detail:{type:\"navigate\",path:\"/_my_redirect/supervisor\"},bubbles:!0,composed:!0}))}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[w,k,h`\n        :host {\n          --mdc-list-vertical-padding: 0;\n        }\n        ha-card:last-child {\n          margin-bottom: env(safe-area-inset-bottom);\n        }\n        :host(:not([narrow])) ha-card:last-child {\n          margin-bottom: max(24px, env(safe-area-inset-bottom));\n        }\n        ha-config-section {\n          margin: auto;\n          margin-top: -32px;\n          max-width: 600px;\n        }\n        ha-card {\n          overflow: hidden;\n        }\n        ha-card a {\n          text-decoration: none;\n          color: var(--primary-text-color);\n        }\n        a.button {\n          display: block;\n          color: var(--primary-color);\n          padding: 16px;\n        }\n        .title {\n          font-size: 16px;\n          padding: 16px;\n          padding-bottom: 0;\n        }\n\n        @media all and (max-width: 600px) {\n          ha-card {\n            border-width: 1px 0;\n            border-radius: 0;\n            box-shadow: unset;\n          }\n          ha-config-section {\n            margin-top: -42px;\n          }\n        }\n\n        ha-svg-icon,\n        ha-icon-next {\n          color: var(--secondary-text-color);\n          height: 24px;\n          width: 24px;\n          display: block;\n        }\n        ha-svg-icon {\n          padding: 8px;\n        }\n        .icon-background {\n          border-radius: 50%;\n        }\n        .icon-background ha-svg-icon {\n          color: #fff;\n        }\n        ha-clickable-list-item {\n          cursor: pointer;\n          font-size: 16px;\n          padding: 0;\n        }\n      `]}}]}}),r);export{S as HacsEntryPanel};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.e7b530de.js",
    "content": "import{c as e,u as t}from\"./c.743a15a1.js\";import{u as a,ef as r}from\"./main-a0d7432d.js\";import{a as n,e as i,f as o}from\"./c.9d5cd8b6.js\";import\"./c.47f687e9.js\";import\"./c.175b9792.js\";import\"./c.c176780d.js\";import\"./c.936d9772.js\";import\"./c.8e28b461.js\";import\"./c.fbd8d2ba.js\";import\"./c.c7df5815.js\";import\"./c.db2e6bb6.js\";import\"./c.88ebfd3e.js\";import\"./c.bca0f55d.js\";import\"./c.05e9df28.js\";import\"./c.21c042d4.js\";import\"./c.5ba288d8.js\";import\"./c.6711bf6c.js\";import\"./c.5ede7966.js\";import\"./c.63dc92d5.js\";function u(e){return Intl.getCanonicalLocales(e)}function l(e){if(\"symbol\"==typeof e)throw TypeError(\"Cannot convert a Symbol value to a string\");return String(e)}function s(e){if(void 0===e)return NaN;if(null===e)return 0;if(\"boolean\"==typeof e)return e?1:0;if(\"number\"==typeof e)return e;if(\"symbol\"==typeof e||\"bigint\"==typeof e)throw new TypeError(\"Cannot convert symbol/bigint to number\");return Number(e)}function c(e){if(null==e)throw new TypeError(\"undefined/null cannot be converted to object\");return Object(e)}function m(e,t){return Object.is?Object.is(e,t):e===t?0!==e||1/e==1/t:e!=e&&t!=t}function f(e){return new Array(e)}function d(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function p(e,t){return e-Math.floor(e/t)*t}function g(e){return Math.floor(e/864e5)}function D(e){return Date.UTC(e,0)/864e5}function v(e){return new Date(e).getUTCFullYear()}function h(e){return e%4!=0?365:e%100!=0?366:e%400!=0?365:366}function y(e){return g(e)-D(v(e))}function F(e){return 365===h(v(e))?0:1}function T(e){var t=y(e),a=F(e);if(t>=0&&t<31)return 0;if(t<59+a)return 1;if(t<90+a)return 2;if(t<120+a)return 3;if(t<151+a)return 4;if(t<181+a)return 5;if(t<212+a)return 6;if(t<243+a)return 7;if(t<273+a)return 8;if(t<304+a)return 9;if(t<334+a)return 10;if(t<365+a)return 11;throw new Error(\"Invalid time\")}function b(e){return void 0===e?Object.create(null):c(e)}function A(e,t,a,r){if(void 0!==e){if(e=Number(e),isNaN(e)||e<t||e>a)throw new RangeError(\"\".concat(e,\" is outside of range [\").concat(t,\", \").concat(a,\"]\"));return Math.floor(e)}return r}function S(e,t,a,r,n){return A(e[t],a,r,n)}function P(e,t,a,r,n){if(\"object\"!=typeof e)throw new TypeError(\"Options must be an object\");var i=e[t];if(void 0!==i){if(\"boolean\"!==a&&\"string\"!==a)throw new TypeError(\"invalid type\");if(\"boolean\"===a&&(i=Boolean(i)),\"string\"===a&&(i=l(i)),void 0!==r&&!r.filter((function(e){return e==i})).length)throw new RangeError(\"\".concat(i,\" is not within \").concat(r.join(\", \")));return i}return n}var E=[\"angle-degree\",\"area-acre\",\"area-hectare\",\"concentr-percent\",\"digital-bit\",\"digital-byte\",\"digital-gigabit\",\"digital-gigabyte\",\"digital-kilobit\",\"digital-kilobyte\",\"digital-megabit\",\"digital-megabyte\",\"digital-petabyte\",\"digital-terabit\",\"digital-terabyte\",\"duration-day\",\"duration-hour\",\"duration-millisecond\",\"duration-minute\",\"duration-month\",\"duration-second\",\"duration-week\",\"duration-year\",\"length-centimeter\",\"length-foot\",\"length-inch\",\"length-kilometer\",\"length-meter\",\"length-mile-scandinavian\",\"length-mile\",\"length-millimeter\",\"length-yard\",\"mass-gram\",\"mass-kilogram\",\"mass-ounce\",\"mass-pound\",\"mass-stone\",\"temperature-celsius\",\"temperature-fahrenheit\",\"volume-fluid-ounce\",\"volume-gallon\",\"volume-liter\",\"volume-milliliter\"];function C(e){return e.slice(e.indexOf(\"-\")+1)}var w=E.map(C);function M(e){return w.indexOf(e)>-1}var k=/[^A-Z]/;function O(e){return 3===(e=e.replace(/([a-z])/g,(function(e,t){return t.toUpperCase()}))).length&&!k.test(e)}function L(e){if(M(e=e.replace(/([A-Z])/g,(function(e,t){return t.toLowerCase()}))))return!0;var t=e.split(\"-per-\");if(2!==t.length)return!1;var a=t[0],r=t[1];return!(!M(a)||!M(r))}function _(e){return Math.floor(Math.log(e)*Math.LOG10E)}function I(e,t){if(\"function\"==typeof e.repeat)return e.repeat(t);for(var a=new Array(t),r=0;r<a.length;r++)a[r]=e;return a.join(\"\")}function N(e,t,a,r){e.get(t)||e.set(t,Object.create(null)),e.get(t)[a]=r}function j(e,t){for(var a=[],r=2;r<arguments.length;r++)a[r-2]=arguments[r];var n=e.get(t);if(!n)throw new TypeError(\"\".concat(t,\" InternalSlot has not been initialized\"));return a.reduce((function(e,t){return e[t]=n[t],e}),Object.create(null))}function B(e,t,a){if(void 0===a&&(a=Error),!e)throw new a(t)}function R(e,t,a){var r=(0,a.getInternalSlots)(e),n=r.notation,i=r.dataLocaleData,o=r.numberingSystem;switch(n){case\"standard\":return 0;case\"scientific\":return t;case\"engineering\":return 3*Math.floor(t/3);default:var u=r.compactDisplay,l=r.style,s=r.currencyDisplay,c=void 0;if(\"currency\"===l&&\"name\"!==s){c=(i.numbers.currency[o]||i.numbers.currency[i.numbers.nu[0]]).short}else{var m=i.numbers.decimal[o]||i.numbers.decimal[i.numbers.nu[0]];c=\"long\"===u?m.long:m.short}if(!c)return 0;var f=String(Math.pow(10,t)),d=Object.keys(c);if(f<d[0])return 0;if(f>d[d.length-1])return d[d.length-1].length-1;var p=d.indexOf(f);if(-1===p)return 0;var g=d[p];return\"0\"===c[g].other?0:g.length-c[g].other.match(/0+/)[0].length}}function G(e,t,a){var r,n,i,o,u=a;if(0===e)r=I(\"0\",u),n=0,i=0;else{var l=e.toString(),s=l.indexOf(\"e\"),c=l.split(\"e\"),m=c[0],f=c[1],d=m.replace(\".\",\"\");if(s>=0&&d.length<=u)n=+f,r=d+I(\"0\",u-d.length),i=e;else{var p=(n=_(e))-u+1,g=Math.round(v(e,p));v(g,u-1)>=10&&(n+=1,g=Math.floor(g/10)),r=g.toString(),i=v(g,u-1-n)}}if(n>=u-1?(r+=I(\"0\",n-u+1),o=n+1):n>=0?(r=\"\".concat(r.slice(0,n+1),\".\").concat(r.slice(n+1)),o=n+1):(r=\"0.\".concat(I(\"0\",-n-1)).concat(r),o=1),r.indexOf(\".\")>=0&&a>t){for(var D=a-t;D>0&&\"0\"===r[r.length-1];)r=r.slice(0,-1),D--;\".\"===r[r.length-1]&&(r=r.slice(0,-1))}return{formattedString:r,roundedNumber:i,integerDigitsCount:o};function v(e,t){return t<0?e*Math.pow(10,-t):e/Math.pow(10,t)}}function x(e,t,a){var r,n,i=a,o=Math.round(e*Math.pow(10,i)),u=o/Math.pow(10,i);if(o<1e21)r=o.toString();else{var l=(r=o.toString()).split(\"e\"),s=l[0],c=l[1];r=s.replace(\".\",\"\"),r+=I(\"0\",Math.max(+c-r.length+1,0))}if(0!==i){var m=r.length;if(m<=i)r=I(\"0\",i+1-m)+r,m=i+1;var f=r.slice(0,m-i),d=r.slice(m-i);r=\"\".concat(f,\".\").concat(d),n=f.length}else n=r.length;for(var p=a-t;p>0&&\"0\"===r[r.length-1];)r=r.slice(0,-1),p--;return\".\"===r[r.length-1]&&(r=r.slice(0,-1)),{formattedString:r,roundedNumber:u,integerDigitsCount:n}}function z(e,t){var a,r=t<0||m(t,-0);switch(r&&(t=-t),e.roundingType){case\"significantDigits\":a=G(t,e.minimumSignificantDigits,e.maximumSignificantDigits);break;case\"fractionDigits\":a=x(t,e.minimumFractionDigits,e.maximumFractionDigits);break;default:(a=G(t,1,2)).integerDigitsCount>1&&(a=x(t,0,0))}t=a.roundedNumber;var n=a.formattedString,i=a.integerDigitsCount,o=e.minimumIntegerDigits;i<o&&(n=I(\"0\",o-i)+n);return r&&(t=-t),{roundedNumber:t,formattedString:n}}function U(e,t,a){var r=a.getInternalSlots;if(0===t)return[0,0];t<0&&(t=-t);var n=_(t),i=R(e,n,{getInternalSlots:r});t=i<0?t*Math.pow(10,-i):t/Math.pow(10,i);var o=z(r(e),t);return 0===o.roundedNumber||_(o.roundedNumber)===n-i?[i,n]:[R(e,n+1,{getInternalSlots:r}),n+1]}function Z(e,t){var a=t.currencyDigitsData;return d(a,e)?a[e]:2}var H,K={adlm:[\"𞥐\",\"𞥑\",\"𞥒\",\"𞥓\",\"𞥔\",\"𞥕\",\"𞥖\",\"𞥗\",\"𞥘\",\"𞥙\"],ahom:[\"𑜰\",\"𑜱\",\"𑜲\",\"𑜳\",\"𑜴\",\"𑜵\",\"𑜶\",\"𑜷\",\"𑜸\",\"𑜹\"],arab:[\"٠\",\"١\",\"٢\",\"٣\",\"٤\",\"٥\",\"٦\",\"٧\",\"٨\",\"٩\"],arabext:[\"۰\",\"۱\",\"۲\",\"۳\",\"۴\",\"۵\",\"۶\",\"۷\",\"۸\",\"۹\"],bali:[\"᭐\",\"᭑\",\"᭒\",\"᭓\",\"᭔\",\"᭕\",\"᭖\",\"᭗\",\"᭘\",\"᭙\"],beng:[\"০\",\"১\",\"২\",\"৩\",\"৪\",\"৫\",\"৬\",\"৭\",\"৮\",\"৯\"],bhks:[\"𑱐\",\"𑱑\",\"𑱒\",\"𑱓\",\"𑱔\",\"𑱕\",\"𑱖\",\"𑱗\",\"𑱘\",\"𑱙\"],brah:[\"𑁦\",\"𑁧\",\"𑁨\",\"𑁩\",\"𑁪\",\"𑁫\",\"𑁬\",\"𑁭\",\"𑁮\",\"𑁯\"],cakm:[\"𑄶\",\"𑄷\",\"𑄸\",\"𑄹\",\"𑄺\",\"𑄻\",\"𑄼\",\"𑄽\",\"𑄾\",\"𑄿\"],cham:[\"꩐\",\"꩑\",\"꩒\",\"꩓\",\"꩔\",\"꩕\",\"꩖\",\"꩗\",\"꩘\",\"꩙\"],deva:[\"०\",\"१\",\"२\",\"३\",\"४\",\"५\",\"६\",\"७\",\"८\",\"९\"],diak:[\"𑥐\",\"𑥑\",\"𑥒\",\"𑥓\",\"𑥔\",\"𑥕\",\"𑥖\",\"𑥗\",\"𑥘\",\"𑥙\"],fullwide:[\"０\",\"１\",\"２\",\"３\",\"４\",\"５\",\"６\",\"７\",\"８\",\"９\"],gong:[\"𑶠\",\"𑶡\",\"𑶢\",\"𑶣\",\"𑶤\",\"𑶥\",\"𑶦\",\"𑶧\",\"𑶨\",\"𑶩\"],gonm:[\"𑵐\",\"𑵑\",\"𑵒\",\"𑵓\",\"𑵔\",\"𑵕\",\"𑵖\",\"𑵗\",\"𑵘\",\"𑵙\"],gujr:[\"૦\",\"૧\",\"૨\",\"૩\",\"૪\",\"૫\",\"૬\",\"૭\",\"૮\",\"૯\"],guru:[\"੦\",\"੧\",\"੨\",\"੩\",\"੪\",\"੫\",\"੬\",\"੭\",\"੮\",\"੯\"],hanidec:[\"〇\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\",\"七\",\"八\",\"九\"],hmng:[\"𖭐\",\"𖭑\",\"𖭒\",\"𖭓\",\"𖭔\",\"𖭕\",\"𖭖\",\"𖭗\",\"𖭘\",\"𖭙\"],hmnp:[\"𞅀\",\"𞅁\",\"𞅂\",\"𞅃\",\"𞅄\",\"𞅅\",\"𞅆\",\"𞅇\",\"𞅈\",\"𞅉\"],java:[\"꧐\",\"꧑\",\"꧒\",\"꧓\",\"꧔\",\"꧕\",\"꧖\",\"꧗\",\"꧘\",\"꧙\"],kali:[\"꤀\",\"꤁\",\"꤂\",\"꤃\",\"꤄\",\"꤅\",\"꤆\",\"꤇\",\"꤈\",\"꤉\"],khmr:[\"០\",\"១\",\"២\",\"៣\",\"៤\",\"៥\",\"៦\",\"៧\",\"៨\",\"៩\"],knda:[\"೦\",\"೧\",\"೨\",\"೩\",\"೪\",\"೫\",\"೬\",\"೭\",\"೮\",\"೯\"],lana:[\"᪀\",\"᪁\",\"᪂\",\"᪃\",\"᪄\",\"᪅\",\"᪆\",\"᪇\",\"᪈\",\"᪉\"],lanatham:[\"᪐\",\"᪑\",\"᪒\",\"᪓\",\"᪔\",\"᪕\",\"᪖\",\"᪗\",\"᪘\",\"᪙\"],laoo:[\"໐\",\"໑\",\"໒\",\"໓\",\"໔\",\"໕\",\"໖\",\"໗\",\"໘\",\"໙\"],lepc:[\"᪐\",\"᪑\",\"᪒\",\"᪓\",\"᪔\",\"᪕\",\"᪖\",\"᪗\",\"᪘\",\"᪙\"],limb:[\"᥆\",\"᥇\",\"᥈\",\"᥉\",\"᥊\",\"᥋\",\"᥌\",\"᥍\",\"᥎\",\"᥏\"],mathbold:[\"𝟎\",\"𝟏\",\"𝟐\",\"𝟑\",\"𝟒\",\"𝟓\",\"𝟔\",\"𝟕\",\"𝟖\",\"𝟗\"],mathdbl:[\"𝟘\",\"𝟙\",\"𝟚\",\"𝟛\",\"𝟜\",\"𝟝\",\"𝟞\",\"𝟟\",\"𝟠\",\"𝟡\"],mathmono:[\"𝟶\",\"𝟷\",\"𝟸\",\"𝟹\",\"𝟺\",\"𝟻\",\"𝟼\",\"𝟽\",\"𝟾\",\"𝟿\"],mathsanb:[\"𝟬\",\"𝟭\",\"𝟮\",\"𝟯\",\"𝟰\",\"𝟱\",\"𝟲\",\"𝟳\",\"𝟴\",\"𝟵\"],mathsans:[\"𝟢\",\"𝟣\",\"𝟤\",\"𝟥\",\"𝟦\",\"𝟧\",\"𝟨\",\"𝟩\",\"𝟪\",\"𝟫\"],mlym:[\"൦\",\"൧\",\"൨\",\"൩\",\"൪\",\"൫\",\"൬\",\"൭\",\"൮\",\"൯\"],modi:[\"𑙐\",\"𑙑\",\"𑙒\",\"𑙓\",\"𑙔\",\"𑙕\",\"𑙖\",\"𑙗\",\"𑙘\",\"𑙙\"],mong:[\"᠐\",\"᠑\",\"᠒\",\"᠓\",\"᠔\",\"᠕\",\"᠖\",\"᠗\",\"᠘\",\"᠙\"],mroo:[\"𖩠\",\"𖩡\",\"𖩢\",\"𖩣\",\"𖩤\",\"𖩥\",\"𖩦\",\"𖩧\",\"𖩨\",\"𖩩\"],mtei:[\"꯰\",\"꯱\",\"꯲\",\"꯳\",\"꯴\",\"꯵\",\"꯶\",\"꯷\",\"꯸\",\"꯹\"],mymr:[\"၀\",\"၁\",\"၂\",\"၃\",\"၄\",\"၅\",\"၆\",\"၇\",\"၈\",\"၉\"],mymrshan:[\"႐\",\"႑\",\"႒\",\"႓\",\"႔\",\"႕\",\"႖\",\"႗\",\"႘\",\"႙\"],mymrtlng:[\"꧰\",\"꧱\",\"꧲\",\"꧳\",\"꧴\",\"꧵\",\"꧶\",\"꧷\",\"꧸\",\"꧹\"],newa:[\"𑑐\",\"𑑑\",\"𑑒\",\"𑑓\",\"𑑔\",\"𑑕\",\"𑑖\",\"𑑗\",\"𑑘\",\"𑑙\"],nkoo:[\"߀\",\"߁\",\"߂\",\"߃\",\"߄\",\"߅\",\"߆\",\"߇\",\"߈\",\"߉\"],olck:[\"᱐\",\"᱑\",\"᱒\",\"᱓\",\"᱔\",\"᱕\",\"᱖\",\"᱗\",\"᱘\",\"᱙\"],orya:[\"୦\",\"୧\",\"୨\",\"୩\",\"୪\",\"୫\",\"୬\",\"୭\",\"୮\",\"୯\"],osma:[\"𐒠\",\"𐒡\",\"𐒢\",\"𐒣\",\"𐒤\",\"𐒥\",\"𐒦\",\"𐒧\",\"𐒨\",\"𐒩\"],rohg:[\"𐴰\",\"𐴱\",\"𐴲\",\"𐴳\",\"𐴴\",\"𐴵\",\"𐴶\",\"𐴷\",\"𐴸\",\"𐴹\"],saur:[\"꣐\",\"꣑\",\"꣒\",\"꣓\",\"꣔\",\"꣕\",\"꣖\",\"꣗\",\"꣘\",\"꣙\"],segment:[\"🯰\",\"🯱\",\"🯲\",\"🯳\",\"🯴\",\"🯵\",\"🯶\",\"🯷\",\"🯸\",\"🯹\"],shrd:[\"𑇐\",\"𑇑\",\"𑇒\",\"𑇓\",\"𑇔\",\"𑇕\",\"𑇖\",\"𑇗\",\"𑇘\",\"𑇙\"],sind:[\"𑋰\",\"𑋱\",\"𑋲\",\"𑋳\",\"𑋴\",\"𑋵\",\"𑋶\",\"𑋷\",\"𑋸\",\"𑋹\"],sinh:[\"෦\",\"෧\",\"෨\",\"෩\",\"෪\",\"෫\",\"෬\",\"෭\",\"෮\",\"෯\"],sora:[\"𑃰\",\"𑃱\",\"𑃲\",\"𑃳\",\"𑃴\",\"𑃵\",\"𑃶\",\"𑃷\",\"𑃸\",\"𑃹\"],sund:[\"᮰\",\"᮱\",\"᮲\",\"᮳\",\"᮴\",\"᮵\",\"᮶\",\"᮷\",\"᮸\",\"᮹\"],takr:[\"𑛀\",\"𑛁\",\"𑛂\",\"𑛃\",\"𑛄\",\"𑛅\",\"𑛆\",\"𑛇\",\"𑛈\",\"𑛉\"],talu:[\"᧐\",\"᧑\",\"᧒\",\"᧓\",\"᧔\",\"᧕\",\"᧖\",\"᧗\",\"᧘\",\"᧙\"],tamldec:[\"௦\",\"௧\",\"௨\",\"௩\",\"௪\",\"௫\",\"௬\",\"௭\",\"௮\",\"௯\"],telu:[\"౦\",\"౧\",\"౨\",\"౩\",\"౪\",\"౫\",\"౬\",\"౭\",\"౮\",\"౯\"],thai:[\"๐\",\"๑\",\"๒\",\"๓\",\"๔\",\"๕\",\"๖\",\"๗\",\"๘\",\"๙\"],tibt:[\"༠\",\"༡\",\"༢\",\"༣\",\"༤\",\"༥\",\"༦\",\"༧\",\"༨\",\"༩\"],tirh:[\"𑓐\",\"𑓑\",\"𑓒\",\"𑓓\",\"𑓔\",\"𑓕\",\"𑓖\",\"𑓗\",\"𑓘\",\"𑓙\"],vaii:[\"ᘠ\",\"ᘡ\",\"ᘢ\",\"ᘣ\",\"ᘤ\",\"ᘥ\",\"ᘦ\",\"ᘧ\",\"ᘨ\",\"ᘩ\"],wara:[\"𑣠\",\"𑣡\",\"𑣢\",\"𑣣\",\"𑣤\",\"𑣥\",\"𑣦\",\"𑣧\",\"𑣨\",\"𑣩\"],wcho:[\"𞋰\",\"𞋱\",\"𞋲\",\"𞋳\",\"𞋴\",\"𞋵\",\"𞋶\",\"𞋷\",\"𞋸\",\"𞋹\"]},Y=/[\\$\\+<->\\^`\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20BF\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBC1\\uFDFC\\uFDFD\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD]|\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDE8\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED7\\uDEE0-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF73\\uDF80-\\uDFD8\\uDFE0-\\uDFEB]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDD78\\uDD7A-\\uDDCB\\uDDCD-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE74\\uDE78-\\uDE7A\\uDE80-\\uDE86\\uDE90-\\uDEA8\\uDEB0-\\uDEB6\\uDEC0-\\uDEC2\\uDED0-\\uDED6\\uDF00-\\uDF92\\uDF94-\\uDFCA]/,W=new RegExp(\"^\".concat(Y.source)),V=new RegExp(\"\".concat(Y.source,\"$\")),J=/[#0](?:[\\.,][#0]+)*/g;function q(e,t,a,r){var n,i,o=e.sign,u=e.exponent,l=e.magnitude,s=r.notation,c=r.style,m=r.numberingSystem,f=t.numbers.nu[0],d=null;if(\"compact\"===s&&l&&(d=function(e,t,a,r,n,i,o){var u,l,s=e.roundedNumber,c=e.sign,m=e.magnitude,f=String(Math.pow(10,m)),d=a.numbers.nu[0];if(\"currency\"===r&&\"name\"!==i){var p=null===(u=((g=a.numbers.currency)[o]||g[d]).short)||void 0===u?void 0:u[f];if(!p)return null;l=X(t,s,p)}else{var g,D=((g=a.numbers.decimal)[o]||g[d])[n][f];if(!D)return null;l=X(t,s,D)}if(\"0\"===l)return null;return l=Q(l,c).replace(/([^\\s;\\-\\+\\d¤]+)/g,\"{c:$1}\").replace(/0+/,\"0\")}(e,a,t,c,r.compactDisplay,r.currencyDisplay,m)),\"currency\"===c&&\"name\"!==r.currencyDisplay){var p=t.currencies[r.currency];if(p)switch(r.currencyDisplay){case\"code\":n=r.currency;break;case\"symbol\":n=p.symbol;break;default:n=p.narrow}else n=r.currency}if(d)i=d;else if(\"decimal\"===c||\"unit\"===c||\"currency\"===c&&\"name\"===r.currencyDisplay)i=Q((t.numbers.decimal[m]||t.numbers.decimal[f]).standard,o);else if(\"currency\"===c){i=Q((D=t.numbers.currency[m]||t.numbers.currency[f])[r.currencySign],o)}else{i=Q(t.numbers.percent[m]||t.numbers.percent[f],o)}var g=J.exec(i)[0];if(i=i.replace(J,\"{0}\").replace(/'(.)'/g,\"$1\"),\"currency\"===c&&\"name\"!==r.currencyDisplay){var D,v=(D=t.numbers.currency[m]||t.numbers.currency[f]).currencySpacing.afterInsertBetween;v&&!V.test(n)&&(i=i.replace(\"¤{0}\",\"¤\".concat(v,\"{0}\")));var h=D.currencySpacing.beforeInsertBetween;h&&!W.test(n)&&(i=i.replace(\"{0}¤\",\"{0}\".concat(h,\"¤\")))}for(var y=i.split(/({c:[^}]+}|\\{0\\}|[¤%\\-\\+])/g),F=[],T=t.numbers.symbols[m]||t.numbers.symbols[f],b=0,A=y;b<A.length;b++){if(U=A[b])switch(U){case\"{0}\":F.push.apply(F,$(T,e,s,u,m,!d&&r.useGrouping,g));break;case\"-\":F.push({type:\"minusSign\",value:T.minusSign});break;case\"+\":F.push({type:\"plusSign\",value:T.plusSign});break;case\"%\":F.push({type:\"percentSign\",value:T.percentSign});break;case\"¤\":F.push({type:\"currency\",value:n});break;default:/^\\{c:/.test(U)?F.push({type:\"compact\",value:U.substring(3,U.length-1)}):F.push({type:\"literal\",value:U})}}switch(c){case\"currency\":if(\"name\"===r.currencyDisplay){var S=(t.numbers.currency[m]||t.numbers.currency[f]).unitPattern,P=void 0,E=t.currencies[r.currency];P=E?X(a,e.roundedNumber*Math.pow(10,u),E.displayName):r.currency;for(var C=[],w=0,M=S.split(/(\\{[01]\\})/g);w<M.length;w++){switch(U=M[w]){case\"{0}\":C.push.apply(C,F);break;case\"{1}\":C.push({type:\"currency\",value:P});break;default:U&&C.push({type:\"literal\",value:U})}}return C}return F;case\"unit\":var k=r.unit,O=r.unitDisplay,L=t.units.simple[k];S=void 0;if(L)S=X(a,e.roundedNumber*Math.pow(10,u),t.units.simple[k][O]);else{var _=k.split(\"-per-\"),I=_[0],N=_[1];L=t.units.simple[I];var j=X(a,e.roundedNumber*Math.pow(10,u),t.units.simple[I][O]),B=t.units.simple[N].perUnit[O];if(B)S=B.replace(\"{0}\",j);else{var R=t.units.compound.per[O],G=X(a,1,t.units.simple[N][O]);S=S=R.replace(\"{0}\",j).replace(\"{1}\",G.replace(\"{0}\",\"\"))}}C=[];for(var x=0,z=S.split(/(\\s*\\{0\\}\\s*)/);x<z.length;x++){var U=z[x],Z=/^(\\s*)\\{0\\}(\\s*)$/.exec(U);Z?(Z[1]&&C.push({type:\"literal\",value:Z[1]}),C.push.apply(C,F),Z[2]&&C.push({type:\"literal\",value:Z[2]})):U&&C.push({type:\"unit\",value:U})}return C;default:return F}}function $(e,t,a,r,n,i,o){var u=[],l=t.formattedString,s=t.roundedNumber;if(isNaN(s))return[{type:\"nan\",value:l}];if(!isFinite(s))return[{type:\"infinity\",value:l}];var c=K[n];c&&(l=l.replace(/\\d/g,(function(e){return c[+e]||e})));var m,f,d=l.indexOf(\".\");if(d>0?(m=l.slice(0,d),f=l.slice(d+1)):m=l,i&&(\"compact\"!==a||s>=1e4)){var p=e.group,g=[],D=o.split(\".\")[0].split(\",\"),v=3,h=3;D.length>1&&(v=D[D.length-1].length),D.length>2&&(h=D[D.length-2].length);var y=m.length-v;if(y>0){for(g.push(m.slice(y,y+v)),y-=h;y>0;y-=h)g.push(m.slice(y,y+h));g.push(m.slice(0,y+h))}else g.push(m);for(;g.length>0;){var F=g.pop();u.push({type:\"integer\",value:F}),g.length>0&&u.push({type:\"group\",value:p})}}else u.push({type:\"integer\",value:m});if(void 0!==f&&u.push({type:\"decimal\",value:e.decimal},{type:\"fraction\",value:f}),(\"scientific\"===a||\"engineering\"===a)&&isFinite(s)){u.push({type:\"exponentSeparator\",value:e.exponential}),r<0&&(u.push({type:\"exponentMinusSign\",value:e.minusSign}),r=-r);var T=x(r,0,0);u.push({type:\"exponentInteger\",value:T.formattedString})}return u}function Q(e,t){e.indexOf(\";\")<0&&(e=\"\".concat(e,\";-\").concat(e));var a=e.split(\";\"),r=a[0],n=a[1];switch(t){case 0:return r;case-1:return n;default:return n.indexOf(\"-\")>=0?n.replace(/-/g,\"+\"):\"+\".concat(r)}}function X(e,t,a){return a[e.select(t)]||a.other}function ee(e,t,a){var r,n,i,o=a.getInternalSlots,u=o(e),l=u.pl,s=u.dataLocaleData,c=u.numberingSystem,f=s.numbers.symbols[c]||s.numbers.symbols[s.numbers.nu[0]],d=0,p=0;if(isNaN(t))n=f.nan;else if(isFinite(t)){\"percent\"===u.style&&(t*=100),p=(r=U(e,t,{getInternalSlots:o}))[0],d=r[1];var g=z(u,t=p<0?t*Math.pow(10,-p):t/Math.pow(10,p));n=g.formattedString,t=g.roundedNumber}else n=f.infinity;switch(u.signDisplay){case\"never\":i=0;break;case\"auto\":i=m(t,0)||t>0||isNaN(t)?0:-1;break;case\"always\":i=m(t,0)||t>0||isNaN(t)?1:-1;break;default:i=0===t||isNaN(t)?0:t>0?1:-1}return q({roundedNumber:t,formattedString:n,exponent:p,magnitude:d,sign:i},u.dataLocaleData,l,u)}function te(e,t,a){void 0===t&&(t=Object.create(null));var r=(0,a.getInternalSlots)(e),n=P(t,\"style\",\"string\",[\"decimal\",\"percent\",\"currency\",\"unit\"],\"decimal\");r.style=n;var i=P(t,\"currency\",\"string\",void 0,void 0);if(void 0!==i&&!O(i))throw RangeError(\"Malformed currency code\");if(\"currency\"===n&&void 0===i)throw TypeError(\"currency cannot be undefined\");var o=P(t,\"currencyDisplay\",\"string\",[\"code\",\"symbol\",\"narrowSymbol\",\"name\"],\"symbol\"),u=P(t,\"currencySign\",\"string\",[\"standard\",\"accounting\"],\"standard\"),l=P(t,\"unit\",\"string\",void 0,void 0);if(void 0!==l&&!L(l))throw RangeError(\"Invalid unit argument for Intl.NumberFormat()\");if(\"unit\"===n&&void 0===l)throw TypeError(\"unit cannot be undefined\");var s=P(t,\"unitDisplay\",\"string\",[\"short\",\"narrow\",\"long\"],\"short\");\"currency\"===n&&(r.currency=i.toUpperCase(),r.currencyDisplay=o,r.currencySign=u),\"unit\"===n&&(r.unit=l,r.unitDisplay=s)}function ae(e,t,a,r,n){var i=S(t,\"minimumIntegerDigits\",1,21,1),o=t.minimumFractionDigits,u=t.maximumFractionDigits,l=t.minimumSignificantDigits,s=t.maximumSignificantDigits;if(e.minimumIntegerDigits=i,void 0!==l||void 0!==s)e.roundingType=\"significantDigits\",l=A(l,1,21,1),s=A(s,l,21,21),e.minimumSignificantDigits=l,e.maximumSignificantDigits=s;else if(void 0!==o||void 0!==u){e.roundingType=\"fractionDigits\",o=A(o,0,20,a),u=A(u,o,20,Math.max(o,r)),e.minimumFractionDigits=o,e.maximumFractionDigits=u}else\"compact\"===n?e.roundingType=\"compactRounding\":(e.roundingType=\"fractionDigits\",e.minimumFractionDigits=a,e.maximumFractionDigits=r)}!function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.type=\"MISSING_LOCALE_DATA\",t}a(t,e)}(Error),function(e){e.startRange=\"startRange\",e.shared=\"shared\",e.endRange=\"endRange\"}(H||(H={}));var re=Object.freeze({__proto__:null,_formatToParts:q,getInternalSlot:function(e,t,a){return j(e,t,a)[a]},getMultiInternalSlots:j,isLiteralPart:function(e){return\"literal\"===e.type},setInternalSlot:N,setMultiInternalSlots:function(e,t,a){for(var r=0,n=Object.keys(a);r<n.length;r++){var i=n[r];N(e,t,i,a[i])}},getMagnitude:_,defineProperty:function(e,t,a){var r=a.value;Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:!0,value:r})},isMissingLocaleDataError:function(e){return\"MISSING_LOCALE_DATA\"===e.type},invariant:B,CanonicalizeLocaleList:u,CanonicalizeTimeZoneName:function(e,t){var a=t.tzData,r=t.uppercaseLinks,n=e.toUpperCase(),i=Object.keys(a).reduce((function(e,t){return e[t.toUpperCase()]=t,e}),{}),o=r[n]||i[n];return\"Etc/UTC\"===o||\"Etc/GMT\"===o?\"UTC\":o},CoerceOptionsToObject:b,GetNumberOption:S,GetOption:P,GetOptionsObject:function(e){if(void 0===e)return Object.create(null);if(\"object\"==typeof e)return e;throw new TypeError(\"Options must be an object\")},SANCTIONED_UNITS:E,removeUnitNamespace:C,SIMPLE_UNITS:w,IsSanctionedSimpleUnitIdentifier:M,IsValidTimeZoneName:function(e,t){var a=t.tzData,r=t.uppercaseLinks,n=e.toUpperCase(),i=new Set,o=new Set;return Object.keys(a).map((function(e){return e.toUpperCase()})).forEach((function(e){return i.add(e)})),Object.keys(r).forEach((function(e){o.add(e.toUpperCase()),i.add(r[e].toUpperCase())})),i.has(n)||o.has(n)},IsWellFormedCurrencyCode:O,IsWellFormedUnitIdentifier:L,ComputeExponent:U,ComputeExponentForMagnitude:R,CurrencyDigits:Z,FormatNumericToParts:function(e,t,a){for(var r=ee(e,t,a),n=f(0),i=0,o=r;i<o.length;i++){var u=o[i];n.push({type:u.type,value:u.value})}return n},FormatNumericToString:z,InitializeNumberFormat:function(e,t,a,r){var i=r.getInternalSlots,o=r.localeData,l=r.availableLocales,s=r.numberingSystemNames,c=r.getDefaultLocale,m=r.currencyDigitsData,f=u(t),d=b(a),p=Object.create(null),g=P(d,\"localeMatcher\",\"string\",[\"lookup\",\"best fit\"],\"best fit\");p.localeMatcher=g;var D=P(d,\"numberingSystem\",\"string\",void 0,void 0);if(void 0!==D&&s.indexOf(D)<0)throw RangeError(\"Invalid numberingSystems: \".concat(D));p.nu=D;var v=n(l,f,p,[\"nu\"],o,c),h=o[v.dataLocale];B(!!h,\"Missing locale data for \".concat(v.dataLocale));var y=i(e);y.locale=v.locale,y.dataLocale=v.dataLocale,y.numberingSystem=v.nu,y.dataLocaleData=h,te(e,d,{getInternalSlots:i});var F,T,A=y.style;if(\"currency\"===A){var S=Z(y.currency,{currencyDigitsData:m});F=S,T=S}else F=0,T=\"percent\"===A?0:3;var E=P(d,\"notation\",\"string\",[\"standard\",\"scientific\",\"engineering\",\"compact\"],\"standard\");y.notation=E,ae(y,d,F,T,E);var C=P(d,\"compactDisplay\",\"string\",[\"short\",\"long\"],\"short\");\"compact\"===E&&(y.compactDisplay=C);var w=P(d,\"useGrouping\",\"boolean\",void 0,!0);y.useGrouping=w;var M=P(d,\"signDisplay\",\"string\",[\"auto\",\"never\",\"always\",\"exceptZero\"],\"auto\");return y.signDisplay=M,e},PartitionNumberPattern:ee,SetNumberFormatDigitOptions:ae,SetNumberFormatUnitOptions:te,ToRawFixed:x,ToRawPrecision:G,PartitionPattern:function(e){for(var t=[],a=e.indexOf(\"{\"),r=0,n=0,i=e.length;a<e.length&&a>-1;)B((r=e.indexOf(\"}\",a))>a,\"Invalid pattern \".concat(e)),a>n&&t.push({type:\"literal\",value:e.substring(n,a)}),t.push({type:e.substring(a+1,r),value:void 0}),n=r+1,a=e.indexOf(\"{\",n);return n<i&&t.push({type:\"literal\",value:e.substring(n,i)}),t},SupportedLocales:function(e,t,a){return void 0!==a&&P(a=c(a),\"localeMatcher\",\"string\",[\"lookup\",\"best fit\"],\"best fit\"),i(e,t)},get RangePatternType(){return H},ToString:l,ToNumber:s,TimeClip:function(e){return isFinite(e)?Math.abs(e)>8640000000000001?NaN:function(e){var t=s(e);if(isNaN(t)||m(t,-0))return 0;if(isFinite(t))return t;var a=Math.floor(Math.abs(t));return t<0&&(a=-a),m(a,-0)?0:a}(e):NaN},ToObject:c,SameValue:m,ArrayCreate:f,HasOwnProperty:d,Type:function(e){return null===e?\"Null\":void 0===e?\"Undefined\":\"function\"==typeof e||\"object\"==typeof e?\"Object\":\"number\"==typeof e?\"Number\":\"boolean\"==typeof e?\"Boolean\":\"string\"==typeof e?\"String\":\"symbol\"==typeof e?\"Symbol\":\"bigint\"==typeof e?\"BigInt\":void 0},Day:g,WeekDay:function(e){return p(g(e)+4,7)},DayFromYear:D,TimeFromYear:function(e){return Date.UTC(e,0)},YearFromTime:v,DaysInYear:h,DayWithinYear:y,InLeapYear:F,MonthFromTime:T,DateFromTime:function(e){var t=y(e),a=T(e),r=F(e);if(0===a)return t+1;if(1===a)return t-30;if(2===a)return t-58-r;if(3===a)return t-89-r;if(4===a)return t-119-r;if(5===a)return t-150-r;if(6===a)return t-180-r;if(7===a)return t-211-r;if(8===a)return t-242-r;if(9===a)return t-272-r;if(10===a)return t-303-r;if(11===a)return t-333-r;throw new Error(\"Invalid time\")},HourFromTime:function(e){return p(Math.floor(e/36e5),24)},MinFromTime:function(e){return p(Math.floor(e/6e4),60)},SecFromTime:function(e){return p(Math.floor(e/1e3),60)},OrdinaryHasInstance:function(e,t,a){if(\"function\"!=typeof e)return!1;if(null==a?void 0:a.boundTargetFunction)return t instanceof(null==a?void 0:a.boundTargetFunction);if(\"object\"!=typeof t)return!1;var r=e.prototype;if(\"object\"!=typeof r)throw new TypeError(\"OrdinaryHasInstance called on an object with an invalid prototype property.\");return Object.prototype.isPrototypeOf.call(r,t)},msFromTime:function(e){return p(e,1e3)}}),ne=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0});var a=new WeakMap;t.default=function(e){var t=a.get(e);return t||(t=Object.create(null),a.set(e,t)),t}}));t(ne);var ie=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.default={\"Africa/Asmera\":\"Africa/Nairobi\",\"Africa/Timbuktu\":\"Africa/Abidjan\",\"America/Argentina/ComodRivadavia\":\"America/Argentina/Catamarca\",\"America/Atka\":\"America/Adak\",\"America/Buenos_Aires\":\"America/Argentina/Buenos_Aires\",\"America/Catamarca\":\"America/Argentina/Catamarca\",\"America/Coral_Harbour\":\"America/Panama\",\"America/Cordoba\":\"America/Argentina/Cordoba\",\"America/Ensenada\":\"America/Tijuana\",\"America/Fort_Wayne\":\"America/Indiana/Indianapolis\",\"America/Godthab\":\"America/Nuuk\",\"America/Indianapolis\":\"America/Indiana/Indianapolis\",\"America/Jujuy\":\"America/Argentina/Jujuy\",\"America/Knox_IN\":\"America/Indiana/Knox\",\"America/Louisville\":\"America/Kentucky/Louisville\",\"America/Mendoza\":\"America/Argentina/Mendoza\",\"America/Montreal\":\"America/Toronto\",\"America/Porto_Acre\":\"America/Rio_Branco\",\"America/Rosario\":\"America/Argentina/Cordoba\",\"America/Santa_Isabel\":\"America/Tijuana\",\"America/Shiprock\":\"America/Denver\",\"America/Virgin\":\"America/Puerto_Rico\",\"Antarctica/South_Pole\":\"Pacific/Auckland\",\"Asia/Ashkhabad\":\"Asia/Ashgabat\",\"Asia/Calcutta\":\"Asia/Kolkata\",\"Asia/Chongqing\":\"Asia/Shanghai\",\"Asia/Chungking\":\"Asia/Shanghai\",\"Asia/Dacca\":\"Asia/Dhaka\",\"Asia/Harbin\":\"Asia/Shanghai\",\"Asia/Kashgar\":\"Asia/Urumqi\",\"Asia/Katmandu\":\"Asia/Kathmandu\",\"Asia/Macao\":\"Asia/Macau\",\"Asia/Rangoon\":\"Asia/Yangon\",\"Asia/Saigon\":\"Asia/Ho_Chi_Minh\",\"Asia/Tel_Aviv\":\"Asia/Jerusalem\",\"Asia/Thimbu\":\"Asia/Thimphu\",\"Asia/Ujung_Pandang\":\"Asia/Makassar\",\"Asia/Ulan_Bator\":\"Asia/Ulaanbaatar\",\"Atlantic/Faeroe\":\"Atlantic/Faroe\",\"Atlantic/Jan_Mayen\":\"Europe/Oslo\",\"Australia/ACT\":\"Australia/Sydney\",\"Australia/Canberra\":\"Australia/Sydney\",\"Australia/Currie\":\"Australia/Hobart\",\"Australia/LHI\":\"Australia/Lord_Howe\",\"Australia/NSW\":\"Australia/Sydney\",\"Australia/North\":\"Australia/Darwin\",\"Australia/Queensland\":\"Australia/Brisbane\",\"Australia/South\":\"Australia/Adelaide\",\"Australia/Tasmania\":\"Australia/Hobart\",\"Australia/Victoria\":\"Australia/Melbourne\",\"Australia/West\":\"Australia/Perth\",\"Australia/Yancowinna\":\"Australia/Broken_Hill\",\"Brazil/Acre\":\"America/Rio_Branco\",\"Brazil/DeNoronha\":\"America/Noronha\",\"Brazil/East\":\"America/Sao_Paulo\",\"Brazil/West\":\"America/Manaus\",\"Canada/Atlantic\":\"America/Halifax\",\"Canada/Central\":\"America/Winnipeg\",\"Canada/Eastern\":\"America/Toronto\",\"Canada/Mountain\":\"America/Edmonton\",\"Canada/Newfoundland\":\"America/St_Johns\",\"Canada/Pacific\":\"America/Vancouver\",\"Canada/Saskatchewan\":\"America/Regina\",\"Canada/Yukon\":\"America/Whitehorse\",\"Chile/Continental\":\"America/Santiago\",\"Chile/EasterIsland\":\"Pacific/Easter\",Cuba:\"America/Havana\",Egypt:\"Africa/Cairo\",Eire:\"Europe/Dublin\",\"Etc/UCT\":\"Etc/UTC\",\"Europe/Belfast\":\"Europe/London\",\"Europe/Tiraspol\":\"Europe/Chisinau\",GB:\"Europe/London\",\"GB-Eire\":\"Europe/London\",\"GMT+0\":\"Etc/GMT\",\"GMT-0\":\"Etc/GMT\",GMT0:\"Etc/GMT\",Greenwich:\"Etc/GMT\",Hongkong:\"Asia/Hong_Kong\",Iceland:\"Atlantic/Reykjavik\",Iran:\"Asia/Tehran\",Israel:\"Asia/Jerusalem\",Jamaica:\"America/Jamaica\",Japan:\"Asia/Tokyo\",Kwajalein:\"Pacific/Kwajalein\",Libya:\"Africa/Tripoli\",\"Mexico/BajaNorte\":\"America/Tijuana\",\"Mexico/BajaSur\":\"America/Mazatlan\",\"Mexico/General\":\"America/Mexico_City\",NZ:\"Pacific/Auckland\",\"NZ-CHAT\":\"Pacific/Chatham\",Navajo:\"America/Denver\",PRC:\"Asia/Shanghai\",\"Pacific/Enderbury\":\"Pacific/Kanton\",\"Pacific/Johnston\":\"Pacific/Honolulu\",\"Pacific/Ponape\":\"Pacific/Pohnpei\",\"Pacific/Samoa\":\"Pacific/Pago_Pago\",\"Pacific/Truk\":\"Pacific/Chuuk\",\"Pacific/Yap\":\"Pacific/Chuuk\",Poland:\"Europe/Warsaw\",Portugal:\"Europe/Lisbon\",ROC:\"Asia/Taipei\",ROK:\"Asia/Seoul\",Singapore:\"Asia/Singapore\",Turkey:\"Europe/Istanbul\",UCT:\"Etc/UTC\",\"US/Alaska\":\"America/Anchorage\",\"US/Aleutian\":\"America/Adak\",\"US/Arizona\":\"America/Phoenix\",\"US/Central\":\"America/Chicago\",\"US/East-Indiana\":\"America/Indiana/Indianapolis\",\"US/Eastern\":\"America/New_York\",\"US/Hawaii\":\"Pacific/Honolulu\",\"US/Indiana-Starke\":\"America/Indiana/Knox\",\"US/Michigan\":\"America/Detroit\",\"US/Mountain\":\"America/Denver\",\"US/Pacific\":\"America/Los_Angeles\",\"US/Samoa\":\"Pacific/Pago_Pago\",UTC:\"Etc/UTC\",Universal:\"Etc/UTC\",\"W-SU\":\"Europe/Moscow\",Zulu:\"Etc/UTC\"}}));t(ie);var oe=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.unpack=t.pack=void 0,t.pack=function(e){var t=Object.keys(e.zones);return t.sort(),{zones:t.map((function(t){return(0,r.__spreadArray)([t],e.zones[t].map((function(e){var t=e[0],a=e.slice(1);return(0,r.__spreadArray)([\"\"===t?\"\":t.toString(36)],a,!0).join(\",\")})),!0).join(\"|\")})),abbrvs:e.abbrvs.join(\"|\"),offsets:e.offsets.map((function(e){return e.toString(36)})).join(\"|\")}},t.unpack=function(e){for(var t=e.abbrvs.split(\"|\"),a=e.offsets.split(\"|\").map((function(e){return parseInt(e,36)})),r={},n=0,i=e.zones;n<i.length;n++){var o=i[n].split(\"|\"),u=o[0],l=o.slice(1);r[u]=l.map((function(e){return e.split(\",\")})).map((function(e){var r=e[0],n=e[1],i=e[2],o=e[3];return[\"\"===r?-1/0:parseInt(r,36),t[+n],a[+i],\"1\"===o]}))}return r}}));t(oe),oe.unpack,oe.pack;var ue=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.shortMorePenalty=t.shortLessPenalty=t.longMorePenalty=t.longLessPenalty=t.differentNumericTypePenalty=t.additionPenalty=t.removalPenalty=t.DATE_TIME_PROPS=void 0,t.DATE_TIME_PROPS=[\"weekday\",\"era\",\"year\",\"month\",\"day\",\"hour\",\"minute\",\"second\",\"timeZoneName\"],t.removalPenalty=120,t.additionPenalty=20,t.differentNumericTypePenalty=15,t.longLessPenalty=8,t.longMorePenalty=6,t.shortLessPenalty=6,t.shortMorePenalty=3}));t(ue),ue.shortMorePenalty,ue.shortLessPenalty,ue.longMorePenalty,ue.longLessPenalty,ue.differentNumericTypePenalty,ue.additionPenalty,ue.removalPenalty,ue.DATE_TIME_PROPS;var le=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.ToLocalTime=void 0,t.ToLocalTime=function(e,t,a,r){var n=r.tzData;(0,re.invariant)(\"Number\"===(0,re.Type)(e),\"invalid time\"),(0,re.invariant)(\"gregory\"===t,\"We only support Gregory calendar right now\");var i=function(e,t,a){var r,n=a[t];if(!n)return[0,!1];for(var i=0,o=0,u=!1;i<=n.length;i++)if(i===n.length||1e3*n[i][0]>e){o=(r=n[i-1])[2],u=r[3];break}return[1e3*o,u]}(e,a,n),o=i[0],u=i[1],l=e+o,s=(0,re.YearFromTime)(l);return{weekday:(0,re.WeekDay)(l),era:s<0?\"BC\":\"AD\",year:s,relatedYear:void 0,yearName:void 0,month:(0,re.MonthFromTime)(l),day:(0,re.DateFromTime)(l),hour:(0,re.HourFromTime)(l),minute:(0,re.MinFromTime)(l),second:(0,re.SecFromTime)(l),millisecond:(0,re.msFromTime)(l),inDST:u,timeZoneOffset:o}}}));t(le),le.ToLocalTime;var se=e((function(e,t){function a(e){return e<10?\"0\".concat(e):String(e)}function r(e,t,r,n){var i=Math.floor(r/6e4),o=Math.abs(i)%60,u=Math.floor(Math.abs(i)/60),l=t.split(\";\"),s=l[0],c=l[1],m=\"\",f=r<0?c:s;return\"long\"===n?m=f.replace(\"HH\",a(u)).replace(\"H\",String(u)).replace(\"mm\",a(o)).replace(\"m\",String(o)):(o||u)&&(o||(f=f.replace(/:?m+/,\"\")),m=f.replace(/H+/,String(u)).replace(/m+/,String(o))),e.replace(\"{0}\",m)}Object.defineProperty(t,\"__esModule\",{value:!0}),t.FormatDateTimePattern=void 0,t.FormatDateTimePattern=function(e,t,a,n){var i=n.getInternalSlots,o=n.localeData,u=n.getDefaultTimeZone,l=n.tzData;a=(0,re.TimeClip)(a);var s=i(e),c=o[s.dataLocale],m=s.locale,f=Object.create(null);f.useGrouping=!1;var d=new Intl.NumberFormat(m,f),p=Object.create(null);p.minimumIntegerDigits=2,p.useGrouping=!1;var g,D=new Intl.NumberFormat(m,p),v=s.fractionalSecondDigits;if(void 0!==v){var h=Object.create(null);h.minimumIntegerDigits=v,h.useGrouping=!1,g=new Intl.NumberFormat(m,h)}for(var y=(0,le.ToLocalTime)(a,s.calendar,s.timeZone,{tzData:l}),F=[],T=0,b=t;T<b.length;T++){var A=b[T],S=A.type;if(\"literal\"===S)F.push({type:\"literal\",value:A.value});else if(\"fractionalSecondDigits\"===S){var P=Math.floor(y.millisecond*Math.pow(10,(v||0)-3));F.push({type:\"fractionalSecond\",value:g.format(P)})}else if(\"dayPeriod\"===S);else if(ue.DATE_TIME_PROPS.indexOf(S)>-1){var E=\"\",C=s[S];P=y[S];\"year\"===S&&P<=0&&(P=1-P),\"month\"===S&&P++;var w=s.hourCycle;if(\"hour\"!==S||\"h11\"!==w&&\"h12\"!==w||0===(P%=12)&&\"h12\"===w&&(P=12),\"hour\"===S&&\"h24\"===w&&0===P&&(P=24),\"numeric\"===C)E=d.format(P);else if(\"2-digit\"===C)(E=D.format(P)).length>2&&(E=E.slice(E.length-2,E.length));else if(\"narrow\"===C||\"short\"===C||\"long\"===C)if(\"era\"===S)E=c[S][C][P];else if(\"timeZoneName\"===S){var M=c.timeZoneName,k=c.gmtFormat,O=c.hourFormat,L=M[s.timeZone||u()];E=L&&L[C]?L[C][+y.inDST]:r(k,O,y.timeZoneOffset,C)}else E=\"month\"===S?c.month[C][P-1]:c[S][C][P];F.push({type:S,value:E})}else if(\"ampm\"===S){E=void 0;E=(P=y.hour)>11?c.pm:c.am,F.push({type:\"dayPeriod\",value:E})}else if(\"relatedYear\"===S){P=y.relatedYear,E=d.format(P);F.push({type:\"relatedYear\",value:E})}else if(\"yearName\"===S){P=y.yearName,E=d.format(P);F.push({type:\"yearName\",value:E})}}return F}}));t(se),se.FormatDateTimePattern;var ce=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.PartitionDateTimePattern=void 0,t.PartitionDateTimePattern=function(e,t,a){if(t=(0,re.TimeClip)(t),isNaN(t))throw new RangeError(\"invalid time\");var r=(0,a.getInternalSlots)(e).pattern;return(0,se.FormatDateTimePattern)(e,(0,re.PartitionPattern)(r),t,a)}}));t(ce),ce.PartitionDateTimePattern;var me=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.FormatDateTime=void 0,t.FormatDateTime=function(e,t,a){for(var r=\"\",n=0,i=(0,ce.PartitionDateTimePattern)(e,t,a);n<i.length;n++){r+=i[n].value}return r}}));t(me),me.FormatDateTime;var fe=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.BasicFormatMatcher=void 0,t.BasicFormatMatcher=function(e,t){var a=-1/0,n=t[0];(0,re.invariant)(Array.isArray(t),\"formats should be a list of things\");for(var i=0,o=t;i<o.length;i++){for(var u=o[i],l=0,s=0,c=ue.DATE_TIME_PROPS;s<c.length;s++){var m=c[s],f=e[m],d=u[m];if(void 0===f&&void 0!==d)l-=ue.additionPenalty;else if(void 0!==f&&void 0===d)l-=ue.removalPenalty;else if(f!==d){var p=void 0,g=(p=\"fractionalSecondDigits\"===m?[1,2,3]:[\"2-digit\",\"numeric\",\"narrow\",\"short\",\"long\"]).indexOf(f),D=p.indexOf(d),v=Math.max(-2,Math.min(D-g,2));2===v?l-=ue.longMorePenalty:1===v?l-=ue.shortMorePenalty:-1===v?l-=ue.shortLessPenalty:-2===v&&(l-=ue.longLessPenalty)}}l>a&&(a=l,n=u)}return(0,r.__assign)({},n)}}));t(fe),fe.BasicFormatMatcher;var de=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.splitRangePattern=t.splitFallbackRangePattern=t.parseDateTimeSkeleton=t.processDateTimePattern=void 0;var a=/(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g,n=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;function i(e,t){var a=e.length;switch(e[0]){case\"G\":return t.era=4===a?\"long\":5===a?\"narrow\":\"short\",\"{era}\";case\"y\":case\"Y\":case\"u\":case\"U\":case\"r\":return t.year=2===a?\"2-digit\":\"numeric\",\"{year}\";case\"q\":case\"Q\":throw new RangeError(\"`w/Q` (quarter) patterns are not supported\");case\"M\":case\"L\":return t.month=[\"numeric\",\"2-digit\",\"short\",\"long\",\"narrow\"][a-1],\"{month}\";case\"w\":case\"W\":throw new RangeError(\"`w/W` (week of year) patterns are not supported\");case\"d\":return t.day=[\"numeric\",\"2-digit\"][a-1],\"{day}\";case\"D\":case\"F\":case\"g\":return t.day=\"numeric\",\"{day}\";case\"E\":return t.weekday=4===a?\"long\":5===a?\"narrow\":\"short\",\"{weekday}\";case\"e\":case\"c\":return t.weekday=[void 0,void 0,\"short\",\"long\",\"narrow\",\"short\"][a-1],\"{weekday}\";case\"a\":case\"b\":case\"B\":return t.hour12=!0,\"{ampm}\";case\"h\":case\"K\":return t.hour=[\"numeric\",\"2-digit\"][a-1],t.hour12=!0,\"{hour}\";case\"H\":case\"k\":return t.hour=[\"numeric\",\"2-digit\"][a-1],\"{hour}\";case\"j\":case\"J\":case\"C\":throw new RangeError(\"`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead\");case\"m\":return t.minute=[\"numeric\",\"2-digit\"][a-1],\"{minute}\";case\"s\":return t.second=[\"numeric\",\"2-digit\"][a-1],\"{second}\";case\"S\":case\"A\":return t.second=\"numeric\",\"{second}\";case\"z\":case\"Z\":case\"O\":case\"v\":case\"V\":case\"X\":case\"x\":return t.timeZoneName=a<4?\"short\":\"long\",\"{timeZoneName}\"}return\"\"}function o(e){switch(e){case\"G\":return\"era\";case\"y\":case\"Y\":case\"u\":case\"U\":case\"r\":return\"year\";case\"M\":case\"L\":return\"month\";case\"d\":case\"D\":case\"F\":case\"g\":return\"day\";case\"a\":case\"b\":case\"B\":return\"ampm\";case\"h\":case\"H\":case\"K\":case\"k\":return\"hour\";case\"m\":return\"minute\";case\"s\":case\"S\":case\"A\":return\"second\";default:throw new RangeError(\"Invalid range pattern token\")}}function u(e,t){var r=[],o=e.replace(/'{2}/g,\"{apostrophe}\").replace(/'(.*?)'/g,(function(e,t){return r.push(t),\"$$\".concat(r.length-1,\"$$\")})).replace(a,(function(e){return i(e,t||{})}));return r.length&&(o=o.replace(/\\$\\$(\\d+)\\$\\$/g,(function(e,t){return r[+t]})).replace(/\\{apostrophe\\}/g,\"'\")),[o.replace(/([\\s\\uFEFF\\xA0])\\{ampm\\}([\\s\\uFEFF\\xA0])/,\"$1\").replace(\"{ampm}\",\"\").replace(n,\"\"),o]}function l(e){return e.split(/(\\{[0|1]\\})/g).filter(Boolean).map((function(e){switch(e){case\"{0}\":return{source:re.RangePatternType.startRange,pattern:e};case\"{1}\":return{source:re.RangePatternType.endRange,pattern:e};default:return{source:re.RangePatternType.shared,pattern:e}}}))}function s(e){for(var t,a=/\\{(.*?)\\}/g,r={},n=0;t=a.exec(e);){if(t[0]in r){n=t.index;break}r[t[0]]=t.index}return n?[{source:re.RangePatternType.startRange,pattern:e.slice(0,n)},{source:re.RangePatternType.endRange,pattern:e.slice(n)}]:[{source:re.RangePatternType.startRange,pattern:e}]}t.processDateTimePattern=u,t.parseDateTimeSkeleton=function(e,t,n,c){void 0===t&&(t=e);var m={pattern:\"\",pattern12:\"\",skeleton:e,rawPattern:t,rangePatterns:{},rangePatterns12:{}};if(n)for(var f in n){var d=o(f),p={patternParts:[]},g=u(n[f],p),D=g[0],v=g[1];m.rangePatterns[d]=(0,r.__assign)((0,r.__assign)({},p),{patternParts:s(D)}),m.rangePatterns12[d]=(0,r.__assign)((0,r.__assign)({},p),{patternParts:s(v)})}if(c){var h=l(c);m.rangePatterns.default={patternParts:h},m.rangePatterns12.default={patternParts:h}}e.replace(a,(function(e){return i(e,m)}));var y=u(t),F=y[0],T=y[1];return m.pattern=F,m.pattern12=T,m},t.splitFallbackRangePattern=l,t.splitRangePattern=s}));t(de),de.splitRangePattern,de.splitFallbackRangePattern,de.parseDateTimeSkeleton,de.processDateTimePattern;var pe=e((function(e,t){function a(e){return\"numeric\"===e||\"2-digit\"===e}function n(e,t){var r=0;e.hour12&&!t.hour12?r-=ue.removalPenalty:!e.hour12&&t.hour12&&(r-=ue.additionPenalty);for(var n=0,i=ue.DATE_TIME_PROPS;n<i.length;n++){var o=i[n],u=e[o],l=t[o];if(void 0===u&&void 0!==l)r-=ue.additionPenalty;else if(void 0!==u&&void 0===l)r-=ue.removalPenalty;else if(u!==l)if(a(u)!==a(l))r-=ue.differentNumericTypePenalty;else{var s=[\"2-digit\",\"numeric\",\"narrow\",\"short\",\"long\"],c=s.indexOf(u),m=s.indexOf(l),f=Math.max(-2,Math.min(m-c,2));2===f?r-=ue.longMorePenalty:1===f?r-=ue.shortMorePenalty:-1===f?r-=ue.shortLessPenalty:-2===f&&(r-=ue.longLessPenalty)}}return r}Object.defineProperty(t,\"__esModule\",{value:!0}),t.BestFitFormatMatcher=t.bestFitFormatMatcherScore=void 0,t.bestFitFormatMatcherScore=n,t.BestFitFormatMatcher=function(e,t){var i=-1/0,o=t[0];(0,re.invariant)(Array.isArray(t),\"formats should be a list of things\");for(var u=0,l=t;u<l.length;u++){var s=l[u],c=n(e,s);c>i&&(i=c,o=s)}var m=(0,r.__assign)({},o),f={rawPattern:o.rawPattern};for(var d in(0,de.processDateTimePattern)(o.rawPattern,f),m){var p=m[d],g=f[d],D=e[d];\"minute\"!==d&&\"second\"!==d&&(D&&(a(g)&&!a(D)||p!==D&&(f[d]=D)))}return f.pattern=m.pattern,f.pattern12=m.pattern12,f.skeleton=m.skeleton,f.rangePatterns=m.rangePatterns,f.rangePatterns12=m.rangePatterns12,f}}));t(pe),pe.BestFitFormatMatcher,pe.bestFitFormatMatcherScore;var ge=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.DateTimeStyleFormat=void 0,t.DateTimeStyleFormat=function(e,t,a){var r,n;if(void 0!==t&&((0,re.invariant)(\"full\"===t||\"long\"===t||\"medium\"===t||\"short\"===t,\"invalid timeStyle\"),n=a.timeFormat[t]),void 0!==e&&((0,re.invariant)(\"full\"===e||\"long\"===e||\"medium\"===e||\"short\"===e,\"invalid dateStyle\"),r=a.dateFormat[e]),void 0!==e&&void 0!==t){var i={};for(var o in r)\"pattern\"!==o&&(i[o]=r[o]);for(var o in n)\"pattern\"!==o&&\"pattern12\"!==o&&(i[o]=n[o]);var u=a.dateTimeFormat[e],l=u.replace(\"{0}\",n.pattern).replace(\"{1}\",r.pattern);if(i.pattern=l,\"pattern12\"in n){var s=u.replace(\"{0}\",n.pattern12).replace(\"{1}\",r.pattern);i.pattern12=s}return i}return void 0!==t?n:((0,re.invariant)(void 0!==e,\"dateStyle should not be undefined\"),r)}}));t(ge),ge.DateTimeStyleFormat;var De=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.ToDateTimeOptions=void 0,t.ToDateTimeOptions=function(e,t,a){e=void 0===e?null:(0,re.ToObject)(e),e=Object.create(e);var r=!0;if(\"date\"===t||\"any\"===t)for(var n=0,i=[\"weekday\",\"year\",\"month\",\"day\"];n<i.length;n++){void 0!==e[i[n]]&&(r=!1)}if(\"time\"===t||\"any\"===t)for(var o=0,u=[\"dayPeriod\",\"hour\",\"minute\",\"second\",\"fractionalSecondDigits\"];o<u.length;o++){void 0!==e[u[o]]&&(r=!1)}if(void 0===e.dateStyle&&void 0===e.timeStyle||(r=!1),\"date\"===t&&e.timeStyle)throw new TypeError(\"Intl.DateTimeFormat date was required but timeStyle was included\");if(\"time\"===t&&e.dateStyle)throw new TypeError(\"Intl.DateTimeFormat time was required but dateStyle was included\");if(r&&(\"date\"===a||\"all\"===a))for(var l=0,s=[\"year\",\"month\",\"day\"];l<s.length;l++){e[s[l]]=\"numeric\"}if(r&&(\"time\"===a||\"all\"===a))for(var c=0,m=[\"hour\",\"minute\",\"second\"];c<m.length;c++){e[m[c]]=\"numeric\"}return e}}));t(De),De.ToDateTimeOptions;var ve=e((function(e,t){function a(e,t,a){return null==e&&(e=t),void 0!==a&&(a?e=\"h11\"===t||\"h23\"===t?\"h11\":\"h12\":((0,re.invariant)(!a,\"hour12 must not be set\"),e=\"h11\"===t||\"h23\"===t?\"h23\":\"h24\")),e}Object.defineProperty(t,\"__esModule\",{value:!0}),t.InitializeDateTimeFormat=void 0;var r=/^[a-z0-9]{3,8}$/i;t.InitializeDateTimeFormat=function(e,t,n,i){var u=i.getInternalSlots,l=i.availableLocales,s=i.localeData,c=i.getDefaultLocale,m=i.getDefaultTimeZone,f=i.relevantExtensionKeys,d=i.tzData,p=i.uppercaseLinks,g=(0,re.CanonicalizeLocaleList)(t),D=(0,De.ToDateTimeOptions)(n,\"any\",\"date\"),v=Object.create(null),h=(0,re.GetOption)(D,\"localeMatcher\",\"string\",[\"lookup\",\"best fit\"],\"best fit\");v.localeMatcher=h;var y=(0,re.GetOption)(D,\"calendar\",\"string\",void 0,void 0);if(void 0!==y&&!r.test(y))throw new RangeError(\"Malformed calendar\");var F=u(e);v.ca=y;var T=(0,re.GetOption)(D,\"numberingSystem\",\"string\",void 0,void 0);if(void 0!==T&&!r.test(T))throw new RangeError(\"Malformed numbering system\");v.nu=T;var b=(0,re.GetOption)(D,\"hour12\",\"boolean\",void 0,void 0),A=(0,re.GetOption)(D,\"hourCycle\",\"string\",[\"h11\",\"h12\",\"h23\",\"h24\"],void 0);void 0!==b&&(A=null),v.hc=A;var S=(0,o.ResolveLocale)(l,g,v,f,s,c);F.locale=S.locale,y=S.ca,F.calendar=y,F.hourCycle=S.hc,F.numberingSystem=S.nu;var P=S.dataLocale;F.dataLocale=P;var E=D.timeZone;if(void 0!==E){if(E=String(E),!(0,re.IsValidTimeZoneName)(E,{tzData:d,uppercaseLinks:p}))throw new RangeError(\"Invalid timeZoneName\");E=(0,re.CanonicalizeTimeZoneName)(E,{tzData:d,uppercaseLinks:p})}else E=m();F.timeZone=E,(v=Object.create(null)).weekday=(0,re.GetOption)(D,\"weekday\",\"string\",[\"narrow\",\"short\",\"long\"],void 0),v.era=(0,re.GetOption)(D,\"era\",\"string\",[\"narrow\",\"short\",\"long\"],void 0),v.year=(0,re.GetOption)(D,\"year\",\"string\",[\"2-digit\",\"numeric\"],void 0),v.month=(0,re.GetOption)(D,\"month\",\"string\",[\"2-digit\",\"numeric\",\"narrow\",\"short\",\"long\"],void 0),v.day=(0,re.GetOption)(D,\"day\",\"string\",[\"2-digit\",\"numeric\"],void 0),v.hour=(0,re.GetOption)(D,\"hour\",\"string\",[\"2-digit\",\"numeric\"],void 0),v.minute=(0,re.GetOption)(D,\"minute\",\"string\",[\"2-digit\",\"numeric\"],void 0),v.second=(0,re.GetOption)(D,\"second\",\"string\",[\"2-digit\",\"numeric\"],void 0),v.timeZoneName=(0,re.GetOption)(D,\"timeZoneName\",\"string\",[\"short\",\"long\"],void 0),v.fractionalSecondDigits=(0,re.GetNumberOption)(D,\"fractionalSecondDigits\",1,3,void 0);var C=s[P];(0,re.invariant)(!!C,\"Missing locale data for \".concat(P));var w=C.formats[y];if(!w)throw new RangeError('Calendar \"'.concat(y,'\" is not supported. Try setting \"calendar\" to 1 of the following: ').concat(Object.keys(C.formats).join(\", \")));var M=(0,re.GetOption)(D,\"formatMatcher\",\"string\",[\"basic\",\"best fit\"],\"best fit\"),k=(0,re.GetOption)(D,\"dateStyle\",\"string\",[\"full\",\"long\",\"medium\",\"short\"],void 0);F.dateStyle=k;var O,L,_,I=(0,re.GetOption)(D,\"timeStyle\",\"string\",[\"full\",\"long\",\"medium\",\"short\"],void 0);if(F.timeStyle=I,void 0===k&&void 0===I)if(\"basic\"===M)O=(0,fe.BasicFormatMatcher)(v,w);else{if(function(e){for(var t=0,a=[\"hour\",\"minute\",\"second\"];t<a.length;t++)if(void 0!==e[a[t]])return!0;return!1}(v)){var N=a(F.hourCycle,C.hourCycle,b);v.hour12=\"h11\"===N||\"h12\"===N}O=(0,pe.BestFitFormatMatcher)(v,w)}else{for(var j=0,B=ue.DATE_TIME_PROPS;j<B.length;j++){if(void 0!==(G=v[R=B[j]]))throw new TypeError(\"Intl.DateTimeFormat can't set option \".concat(R,\" when \").concat(k?\"dateStyle\":\"timeStyle\",\" is used\"))}O=(0,ge.DateTimeStyleFormat)(k,I,C)}for(var R in F.format=O,v){var G;void 0!==(G=O[R])&&(F[R]=G)}if(void 0!==F.hour){N=a(F.hourCycle,C.hourCycle,b);F.hourCycle=N,\"h11\"===N||\"h12\"===N?(L=O.pattern12,_=O.rangePatterns12):(L=O.pattern,_=O.rangePatterns)}else F.hourCycle=void 0,L=O.pattern,_=O.rangePatterns;return F.pattern=L,F.rangePatterns=_,e}}));t(ve),ve.InitializeDateTimeFormat;var he=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.FormatDateTimeToParts=void 0,t.FormatDateTimeToParts=function(e,t,a){for(var r=(0,ce.PartitionDateTimePattern)(e,t,a),n=(0,re.ArrayCreate)(0),i=0,o=r;i<o.length;i++){var u=o[i];n.push({type:u.type,value:u.value})}return n}}));t(he),he.FormatDateTimeToParts;var ye=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.PartitionDateTimeRangePattern=void 0;var a=[\"era\",\"year\",\"month\",\"day\",\"dayPeriod\",\"ampm\",\"hour\",\"minute\",\"second\",\"fractionalSecondDigits\"];t.PartitionDateTimeRangePattern=function(e,t,r,n){if(t=(0,re.TimeClip)(t),isNaN(t))throw new RangeError(\"Invalid start time\");if(r=(0,re.TimeClip)(r),isNaN(r))throw new RangeError(\"Invalid end time\");for(var i,o=n.getInternalSlots,u=n.tzData,l=o(e),s=(0,le.ToLocalTime)(t,l.calendar,l.timeZone,{tzData:u}),c=(0,le.ToLocalTime)(r,l.calendar,l.timeZone,{tzData:u}),m=l.pattern,f=l.rangePatterns,d=!0,p=!1,g=0,D=a;g<D.length;g++){var v=D[g];if(d&&!p){var h=v in f?f[v]:void 0;if(void 0!==i&&void 0===h)p=!0;else if(i=h,\"ampm\"===v){var y=s.hour,F=c.hour;(y>11&&F<11||y<11&&F>11)&&(d=!1)}else if(\"dayPeriod\"===v);else if(\"fractionalSecondDigits\"===v){var T=l.fractionalSecondDigits;void 0===T&&(T=3);y=Math.floor(s.millisecond*Math.pow(10,T-3)),F=Math.floor(c.millisecond*Math.pow(10,T-3));(0,re.SameValue)(y,F)||(d=!1)}else{y=s[v],F=c[v];(0,re.SameValue)(y,F)||(d=!1)}}}if(d){for(var b=(0,se.FormatDateTimePattern)(e,(0,re.PartitionPattern)(m),t,n),A=0,S=b;A<S.length;A++){S[A].source=re.RangePatternType.shared}return b}var P=[];if(void 0===i)for(var E=0,C=(i=f.default).patternParts;E<C.length;E++){var w=C[E];\"{0}\"!==w.pattern&&\"{1}\"!==w.pattern||(w.pattern=m)}for(var M=0,k=i.patternParts;M<k.length;M++){var O=k[M],L=O.source,_=O.pattern,I=void 0;I=L===re.RangePatternType.startRange||L===re.RangePatternType.shared?t:r;for(var N=(0,re.PartitionPattern)(_),j=(0,se.FormatDateTimePattern)(e,N,I,n),B=0,R=j;B<R.length;B++){R[B].source=L}P=P.concat(j)}return P}}));t(ye),ye.PartitionDateTimeRangePattern;var Fe=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.FormatDateTimeRangeToParts=void 0,t.FormatDateTimeRangeToParts=function(e,t,a,r){for(var n=(0,ye.PartitionDateTimeRangePattern)(e,t,a,r),i=new Array(0),o=0,u=n;o<u.length;o++){var l=u[o];i.push({type:l.type,value:l.value,source:l.source})}return i}}));t(Fe),Fe.FormatDateTimeRangeToParts;var Te=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.FormatDateTimeRange=void 0,t.FormatDateTimeRange=function(e,t,a,r){for(var n=\"\",i=0,o=(0,ye.PartitionDateTimeRangePattern)(e,t,a,r);i<o.length;i++){n+=o[i].value}return n}}));t(Te),Te.FormatDateTimeRange;var be=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.DateTimeFormat=void 0;var a=(0,r.__importDefault)(ne),n=(0,r.__importDefault)(ie),i=Object.keys(n.default).reduce((function(e,t){return e[t.toUpperCase()]=n.default[t],e}),{}),o=[\"locale\",\"calendar\",\"numberingSystem\",\"dateStyle\",\"timeStyle\",\"timeZone\",\"hourCycle\",\"weekday\",\"era\",\"year\",\"month\",\"day\",\"hour\",\"minute\",\"second\",\"timeZoneName\"],u={enumerable:!1,configurable:!0,get:function(){if(\"object\"!=typeof this||!(0,re.OrdinaryHasInstance)(t.DateTimeFormat,this))throw TypeError(\"Intl.DateTimeFormat format property accessor called on incompatible receiver\");var e=(0,a.default)(this),r=this,n=e.boundFormat;if(void 0===n){n=function(e){var n;return n=void 0===e?Date.now():Number(e),(0,me.FormatDateTime)(r,n,{getInternalSlots:a.default,localeData:t.DateTimeFormat.localeData,tzData:t.DateTimeFormat.tzData,getDefaultTimeZone:t.DateTimeFormat.getDefaultTimeZone})};try{Object.defineProperty(n,\"name\",{configurable:!0,enumerable:!1,writable:!1,value:\"\"})}catch(e){}e.boundFormat=n}return n}};try{Object.defineProperty(u.get,\"name\",{configurable:!0,enumerable:!1,writable:!1,value:\"get format\"})}catch(e){}t.DateTimeFormat=function(e,r){if(!this||!(0,re.OrdinaryHasInstance)(t.DateTimeFormat,this))return new t.DateTimeFormat(e,r);(0,ve.InitializeDateTimeFormat)(this,e,r,{tzData:t.DateTimeFormat.tzData,uppercaseLinks:i,availableLocales:t.DateTimeFormat.availableLocales,relevantExtensionKeys:t.DateTimeFormat.relevantExtensionKeys,getDefaultLocale:t.DateTimeFormat.getDefaultLocale,getDefaultTimeZone:t.DateTimeFormat.getDefaultTimeZone,getInternalSlots:a.default,localeData:t.DateTimeFormat.localeData});var n=(0,a.default)(this).dataLocale,o=t.DateTimeFormat.localeData[n];(0,re.invariant)(void 0!==o,\"Cannot load locale-dependent data for \".concat(n,\".\"))},(0,re.defineProperty)(t.DateTimeFormat,\"supportedLocalesOf\",{value:function(e,a){return(0,re.SupportedLocales)(t.DateTimeFormat.availableLocales,(0,re.CanonicalizeLocaleList)(e),a)}}),(0,re.defineProperty)(t.DateTimeFormat.prototype,\"resolvedOptions\",{value:function(){if(\"object\"!=typeof this||!(0,re.OrdinaryHasInstance)(t.DateTimeFormat,this))throw TypeError(\"Method Intl.DateTimeFormat.prototype.resolvedOptions called on incompatible receiver\");for(var e=(0,a.default)(this),r={},n=0,i=o;n<i.length;n++){var u=i[n],l=e[u];if(\"hourCycle\"===u){var s=\"h11\"===l||\"h12\"===l||\"h23\"!==l&&\"h24\"!==l&&void 0;void 0!==s&&(r.hour12=s)}ue.DATE_TIME_PROPS.indexOf(u)>-1&&(void 0===e.dateStyle&&void 0===e.timeStyle||(l=void 0)),void 0!==l&&(r[u]=l)}return r}}),(0,re.defineProperty)(t.DateTimeFormat.prototype,\"formatToParts\",{value:function(e){return e=void 0===e?Date.now():(0,re.ToNumber)(e),(0,he.FormatDateTimeToParts)(this,e,{getInternalSlots:a.default,localeData:t.DateTimeFormat.localeData,tzData:t.DateTimeFormat.tzData,getDefaultTimeZone:t.DateTimeFormat.getDefaultTimeZone})}}),(0,re.defineProperty)(t.DateTimeFormat.prototype,\"formatRangeToParts\",{value:function(e,r){if(\"object\"!=typeof this)throw new TypeError;if(void 0===e||void 0===r)throw new TypeError(\"startDate/endDate cannot be undefined\");var n=(0,re.ToNumber)(e),i=(0,re.ToNumber)(r);return(0,Fe.FormatDateTimeRangeToParts)(this,n,i,{getInternalSlots:a.default,localeData:t.DateTimeFormat.localeData,tzData:t.DateTimeFormat.tzData,getDefaultTimeZone:t.DateTimeFormat.getDefaultTimeZone})}}),(0,re.defineProperty)(t.DateTimeFormat.prototype,\"formatRange\",{value:function(e,r){if(\"object\"!=typeof this)throw new TypeError;if(void 0===e||void 0===r)throw new TypeError(\"startDate/endDate cannot be undefined\");var n=(0,re.ToNumber)(e),i=(0,re.ToNumber)(r);return(0,Te.FormatDateTimeRange)(this,n,i,{getInternalSlots:a.default,localeData:t.DateTimeFormat.localeData,tzData:t.DateTimeFormat.tzData,getDefaultTimeZone:t.DateTimeFormat.getDefaultTimeZone})}});t.DateTimeFormat.__setDefaultTimeZone=function(e){if(void 0!==e){if(e=String(e),!(0,re.IsValidTimeZoneName)(e,{tzData:t.DateTimeFormat.tzData,uppercaseLinks:i}))throw new RangeError(\"Invalid timeZoneName\");e=(0,re.CanonicalizeTimeZoneName)(e,{tzData:t.DateTimeFormat.tzData,uppercaseLinks:i})}else e=\"UTC\";t.DateTimeFormat.__defaultTimeZone=e},t.DateTimeFormat.relevantExtensionKeys=[\"nu\",\"ca\",\"hc\"],t.DateTimeFormat.__defaultTimeZone=\"UTC\",t.DateTimeFormat.getDefaultTimeZone=function(){return t.DateTimeFormat.__defaultTimeZone},t.DateTimeFormat.__addLocaleData=function(){for(var e=[],a=0;a<arguments.length;a++)e[a]=arguments[a];for(var n=function(e,a){var n=e.dateFormat,i=e.timeFormat,o=e.dateTimeFormat,u=e.formats,l=e.intervalFormats,s=(0,r.__rest)(e,[\"dateFormat\",\"timeFormat\",\"dateTimeFormat\",\"formats\",\"intervalFormats\"]),c=(0,r.__assign)((0,r.__assign)({},s),{dateFormat:{full:(0,de.parseDateTimeSkeleton)(n.full),long:(0,de.parseDateTimeSkeleton)(n.long),medium:(0,de.parseDateTimeSkeleton)(n.medium),short:(0,de.parseDateTimeSkeleton)(n.short)},timeFormat:{full:(0,de.parseDateTimeSkeleton)(i.full),long:(0,de.parseDateTimeSkeleton)(i.long),medium:(0,de.parseDateTimeSkeleton)(i.medium),short:(0,de.parseDateTimeSkeleton)(i.short)},dateTimeFormat:{full:(0,de.parseDateTimeSkeleton)(o.full).pattern,long:(0,de.parseDateTimeSkeleton)(o.long).pattern,medium:(0,de.parseDateTimeSkeleton)(o.medium).pattern,short:(0,de.parseDateTimeSkeleton)(o.short).pattern},formats:{}}),m=function(e){c.formats[e]=Object.keys(u[e]).map((function(t){return(0,de.parseDateTimeSkeleton)(t,u[e][t],l[t],l.intervalFormatFallback)}))};for(var f in u)m(f);var d=new Intl.Locale(a).minimize().toString();t.DateTimeFormat.localeData[a]=t.DateTimeFormat.localeData[d]=c,t.DateTimeFormat.availableLocales.add(a),t.DateTimeFormat.availableLocales.add(d),t.DateTimeFormat.__defaultLocale||(t.DateTimeFormat.__defaultLocale=d)},i=0,o=e;i<o.length;i++){var u=o[i],l=u.data,s=u.locale;n(l,s)}},Object.defineProperty(t.DateTimeFormat.prototype,\"format\",u),t.DateTimeFormat.__defaultLocale=\"\",t.DateTimeFormat.localeData={},t.DateTimeFormat.availableLocales=new Set,t.DateTimeFormat.getDefaultLocale=function(){return t.DateTimeFormat.__defaultLocale},t.DateTimeFormat.polyfilled=!0,t.DateTimeFormat.tzData={},t.DateTimeFormat.__addTZData=function(e){t.DateTimeFormat.tzData=(0,oe.unpack)(e)};try{\"undefined\"!=typeof Symbol&&Object.defineProperty(t.DateTimeFormat.prototype,Symbol.toStringTag,{value:\"Intl.DateTimeFormat\",writable:!1,enumerable:!1,configurable:!0}),Object.defineProperty(t.DateTimeFormat.prototype.constructor,\"length\",{value:1,writable:!1,enumerable:!1,configurable:!0})}catch(e){}}));t(be),be.DateTimeFormat;var Ae=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),(0,r.__exportStar)(be,t)}));t(Ae);var Se=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.supportedLocales=void 0,t.supportedLocales=[\"af-NA\",\"af\",\"agq\",\"ak\",\"am\",\"ar-AE\",\"ar-BH\",\"ar-DJ\",\"ar-DZ\",\"ar-EG\",\"ar-EH\",\"ar-ER\",\"ar-IL\",\"ar-IQ\",\"ar-JO\",\"ar-KM\",\"ar-KW\",\"ar-LB\",\"ar-LY\",\"ar-MA\",\"ar-MR\",\"ar-OM\",\"ar-PS\",\"ar-QA\",\"ar-SA\",\"ar-SD\",\"ar-SO\",\"ar-SS\",\"ar-SY\",\"ar-TD\",\"ar-TN\",\"ar-YE\",\"ar\",\"as\",\"asa\",\"ast\",\"az-Cyrl\",\"az-Latn\",\"az\",\"bas\",\"be-tarask\",\"be\",\"bem\",\"bez\",\"bg\",\"bm\",\"bn-IN\",\"bn\",\"bo-IN\",\"bo\",\"br\",\"brx\",\"bs-Cyrl\",\"bs-Latn\",\"bs\",\"ca-AD\",\"ca-ES-valencia\",\"ca-FR\",\"ca-IT\",\"ca\",\"ccp-IN\",\"ccp\",\"ce\",\"ceb\",\"cgg\",\"chr\",\"ckb-IR\",\"ckb\",\"cs\",\"cy\",\"da-GL\",\"da\",\"dav\",\"de-AT\",\"de-BE\",\"de-CH\",\"de-IT\",\"de-LI\",\"de-LU\",\"de\",\"dje\",\"doi\",\"dsb\",\"dua\",\"dyo\",\"dz\",\"ebu\",\"ee-TG\",\"ee\",\"el-CY\",\"el\",\"en-001\",\"en-150\",\"en-AE\",\"en-AG\",\"en-AI\",\"en-AS\",\"en-AT\",\"en-AU\",\"en-BB\",\"en-BE\",\"en-BI\",\"en-BM\",\"en-BS\",\"en-BW\",\"en-BZ\",\"en-CA\",\"en-CC\",\"en-CH\",\"en-CK\",\"en-CM\",\"en-CX\",\"en-CY\",\"en-DE\",\"en-DG\",\"en-DK\",\"en-DM\",\"en-ER\",\"en-FI\",\"en-FJ\",\"en-FK\",\"en-FM\",\"en-GB\",\"en-GD\",\"en-GG\",\"en-GH\",\"en-GI\",\"en-GM\",\"en-GU\",\"en-GY\",\"en-HK\",\"en-IE\",\"en-IL\",\"en-IM\",\"en-IN\",\"en-IO\",\"en-JE\",\"en-JM\",\"en-KE\",\"en-KI\",\"en-KN\",\"en-KY\",\"en-LC\",\"en-LR\",\"en-LS\",\"en-MG\",\"en-MH\",\"en-MO\",\"en-MP\",\"en-MS\",\"en-MT\",\"en-MU\",\"en-MW\",\"en-MY\",\"en-NA\",\"en-NF\",\"en-NG\",\"en-NL\",\"en-NR\",\"en-NU\",\"en-NZ\",\"en-PG\",\"en-PH\",\"en-PK\",\"en-PN\",\"en-PR\",\"en-PW\",\"en-RW\",\"en-SB\",\"en-SC\",\"en-SD\",\"en-SE\",\"en-SG\",\"en-SH\",\"en-SI\",\"en-SL\",\"en-SS\",\"en-SX\",\"en-SZ\",\"en-TC\",\"en-TK\",\"en-TO\",\"en-TT\",\"en-TV\",\"en-TZ\",\"en-UG\",\"en-UM\",\"en-VC\",\"en-VG\",\"en-VI\",\"en-VU\",\"en-WS\",\"en-ZA\",\"en-ZM\",\"en-ZW\",\"en\",\"eo\",\"es-419\",\"es-AR\",\"es-BO\",\"es-BR\",\"es-BZ\",\"es-CL\",\"es-CO\",\"es-CR\",\"es-CU\",\"es-DO\",\"es-EA\",\"es-EC\",\"es-GQ\",\"es-GT\",\"es-HN\",\"es-IC\",\"es-MX\",\"es-NI\",\"es-PA\",\"es-PE\",\"es-PH\",\"es-PR\",\"es-PY\",\"es-SV\",\"es-US\",\"es-UY\",\"es-VE\",\"es\",\"et\",\"eu\",\"ewo\",\"fa-AF\",\"fa\",\"ff-Adlm-BF\",\"ff-Adlm-CM\",\"ff-Adlm-GH\",\"ff-Adlm-GM\",\"ff-Adlm-GW\",\"ff-Adlm-LR\",\"ff-Adlm-MR\",\"ff-Adlm-NE\",\"ff-Adlm-NG\",\"ff-Adlm-SL\",\"ff-Adlm-SN\",\"ff-Adlm\",\"ff-Latn-BF\",\"ff-Latn-CM\",\"ff-Latn-GH\",\"ff-Latn-GM\",\"ff-Latn-GN\",\"ff-Latn-GW\",\"ff-Latn-LR\",\"ff-Latn-MR\",\"ff-Latn-NE\",\"ff-Latn-NG\",\"ff-Latn-SL\",\"ff-Latn\",\"ff\",\"fi\",\"fil\",\"fo-DK\",\"fo\",\"fr-BE\",\"fr-BF\",\"fr-BI\",\"fr-BJ\",\"fr-BL\",\"fr-CA\",\"fr-CD\",\"fr-CF\",\"fr-CG\",\"fr-CH\",\"fr-CI\",\"fr-CM\",\"fr-DJ\",\"fr-DZ\",\"fr-GA\",\"fr-GF\",\"fr-GN\",\"fr-GP\",\"fr-GQ\",\"fr-HT\",\"fr-KM\",\"fr-LU\",\"fr-MA\",\"fr-MC\",\"fr-MF\",\"fr-MG\",\"fr-ML\",\"fr-MQ\",\"fr-MR\",\"fr-MU\",\"fr-NC\",\"fr-NE\",\"fr-PF\",\"fr-PM\",\"fr-RE\",\"fr-RW\",\"fr-SC\",\"fr-SN\",\"fr-SY\",\"fr-TD\",\"fr-TG\",\"fr-TN\",\"fr-VU\",\"fr-WF\",\"fr-YT\",\"fr\",\"fur\",\"fy\",\"ga-GB\",\"ga\",\"gd\",\"gl\",\"gsw-FR\",\"gsw-LI\",\"gsw\",\"gu\",\"guz\",\"gv\",\"ha-GH\",\"ha-NE\",\"ha\",\"haw\",\"he\",\"hi\",\"hr-BA\",\"hr\",\"hsb\",\"hu\",\"hy\",\"ia\",\"id\",\"ig\",\"ii\",\"is\",\"it-CH\",\"it-SM\",\"it-VA\",\"it\",\"ja\",\"jgo\",\"jmc\",\"jv\",\"ka\",\"kab\",\"kam\",\"kde\",\"kea\",\"kgp\",\"khq\",\"ki\",\"kk\",\"kkj\",\"kl\",\"kln\",\"km\",\"kn\",\"ko-KP\",\"ko\",\"kok\",\"ks-Arab\",\"ks\",\"ksb\",\"ksf\",\"ksh\",\"ku\",\"kw\",\"ky\",\"lag\",\"lb\",\"lg\",\"lkt\",\"ln-AO\",\"ln-CF\",\"ln-CG\",\"ln\",\"lo\",\"lrc-IQ\",\"lrc\",\"lt\",\"lu\",\"luo\",\"luy\",\"lv\",\"mai\",\"mas-TZ\",\"mas\",\"mer\",\"mfe\",\"mg\",\"mgh\",\"mgo\",\"mi\",\"mk\",\"ml\",\"mn\",\"mni-Beng\",\"mni\",\"mr\",\"ms-BN\",\"ms-ID\",\"ms-SG\",\"ms\",\"mt\",\"mua\",\"my\",\"mzn\",\"naq\",\"nb-SJ\",\"nb\",\"nd\",\"nds-NL\",\"nds\",\"ne-IN\",\"ne\",\"nl-AW\",\"nl-BE\",\"nl-BQ\",\"nl-CW\",\"nl-SR\",\"nl-SX\",\"nl\",\"nmg\",\"nn\",\"nnh\",\"no\",\"nus\",\"nyn\",\"om-KE\",\"om\",\"or\",\"os-RU\",\"os\",\"pa-Arab\",\"pa-Guru\",\"pa\",\"pcm\",\"pl\",\"ps-PK\",\"ps\",\"pt-AO\",\"pt-CH\",\"pt-CV\",\"pt-GQ\",\"pt-GW\",\"pt-LU\",\"pt-MO\",\"pt-MZ\",\"pt-PT\",\"pt-ST\",\"pt-TL\",\"pt\",\"qu-BO\",\"qu-EC\",\"qu\",\"rm\",\"rn\",\"ro-MD\",\"ro\",\"rof\",\"ru-BY\",\"ru-KG\",\"ru-KZ\",\"ru-MD\",\"ru-UA\",\"ru\",\"rw\",\"rwk\",\"sa\",\"sah\",\"saq\",\"sat-Olck\",\"sat\",\"sbp\",\"sc\",\"sd-Arab\",\"sd-Deva\",\"sd\",\"se-FI\",\"se-SE\",\"se\",\"seh\",\"ses\",\"sg\",\"shi-Latn\",\"shi-Tfng\",\"shi\",\"si\",\"sk\",\"sl\",\"smn\",\"sn\",\"so-DJ\",\"so-ET\",\"so-KE\",\"so\",\"sq-MK\",\"sq-XK\",\"sq\",\"sr-Cyrl-BA\",\"sr-Cyrl-ME\",\"sr-Cyrl-XK\",\"sr-Cyrl\",\"sr-Latn-BA\",\"sr-Latn-ME\",\"sr-Latn-XK\",\"sr-Latn\",\"sr\",\"su-Latn\",\"su\",\"sv-AX\",\"sv-FI\",\"sv\",\"sw-CD\",\"sw-KE\",\"sw-UG\",\"sw\",\"ta-LK\",\"ta-MY\",\"ta-SG\",\"ta\",\"te\",\"teo-KE\",\"teo\",\"tg\",\"th\",\"ti-ER\",\"ti\",\"tk\",\"to\",\"tr-CY\",\"tr\",\"tt\",\"twq\",\"tzm\",\"ug\",\"uk\",\"und\",\"ur-IN\",\"ur\",\"uz-Arab\",\"uz-Cyrl\",\"uz-Latn\",\"uz\",\"vai-Latn\",\"vai-Vaii\",\"vai\",\"vi\",\"vun\",\"wae\",\"wo\",\"xh\",\"xog\",\"yav\",\"yi\",\"yo-BJ\",\"yo\",\"yrl-CO\",\"yrl-VE\",\"yrl\",\"yue-Hans\",\"yue-Hant\",\"yue\",\"zgh\",\"zh-Hans-HK\",\"zh-Hans-MO\",\"zh-Hans-SG\",\"zh-Hans\",\"zh-Hant-HK\",\"zh-Hant-MO\",\"zh-Hant\",\"zh\",\"zu\"]}));t(Se),Se.supportedLocales;var Pe=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.shouldPolyfill=void 0,t.shouldPolyfill=function(e){if(void 0===e&&(e=\"en\"),!(\"DateTimeFormat\"in Intl)||!(\"formatToParts\"in Intl.DateTimeFormat.prototype)||!(\"formatRange\"in Intl.DateTimeFormat.prototype)||function(){try{return\"dayPeriod\"!==new Intl.DateTimeFormat(\"en\",{hourCycle:\"h11\",hour:\"numeric\"}).formatToParts(0)[2].type}catch(e){return!1}}()||function(){try{return!!new Intl.DateTimeFormat(\"en\",{dateStyle:\"short\",hour:\"numeric\"}).format(new Date(0))}catch(e){return!1}}()||!function(){try{return!!new Intl.DateTimeFormat(void 0,{dateStyle:\"short\"}).resolvedOptions().dateStyle}catch(e){return!1}}()||!function(e){if(!e)return!0;var t=Array.isArray(e)?e:[e];return Intl.DateTimeFormat.supportedLocalesOf(t).length===t.length}(e))return e?(0,o.match)([e],Se.supportedLocales,\"en\"):void 0}}));t(Pe),Pe.shouldPolyfill;var Ee=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.toLocaleTimeString=t.toLocaleDateString=t.toLocaleString=void 0,t.toLocaleString=function(e,t,a){return new be.DateTimeFormat(t,a).format(e)},t.toLocaleDateString=function(e,t,a){return new be.DateTimeFormat(t,(0,De.ToDateTimeOptions)(a,\"date\",\"date\")).format(e)},t.toLocaleTimeString=function(e,t,a){return new be.DateTimeFormat(t,(0,De.ToDateTimeOptions)(a,\"time\",\"time\")).format(e)}}));t(Ee),Ee.toLocaleTimeString,Ee.toLocaleDateString;var Ce=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),(0,Pe.shouldPolyfill)()&&((0,re.defineProperty)(Intl,\"DateTimeFormat\",{value:Ae.DateTimeFormat}),(0,re.defineProperty)(Date.prototype,\"toLocaleString\",{value:function(e,t){return(0,Ee.toLocaleString)(this,e,t)}}),(0,re.defineProperty)(Date.prototype,\"toLocaleDateString\",{value:function(e,t){return(0,Ee.toLocaleDateString)(this,e,t)}}),(0,re.defineProperty)(Date.prototype,\"toLocaleTimeString\",{value:function(e,t){return(0,Ee.toLocaleTimeString)(this,e,t)}}))})),we=t(Ce);export{Ce as __moduleExports,we as default};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.ee4824b8.js",
    "content": "import{a as e,h as t,e as i,g as a,t as s,$ as o,j as r,R as n,w as l,r as h,n as c,m as d,L as p,N as u,o as v,b as f,aI as b,ai as m,c as k,E as g,aJ as y,aC as w,aK as x,aL as $,d as _,s as R}from\"./main-a0d7432d.js\";import{f as z}from\"./c.1b450c80.js\";import{c as j}from\"./c.4a97632a.js\";import\"./c.175b9792.js\";import\"./c.88ebfd3e.js\";import\"./c.58a9b586.js\";import{r as F}from\"./c.c98162aa.js\";import{i as P}from\"./c.21c042d4.js\";import{s as I}from\"./c.5b87ad2c.js\";import\"./c.0732ee74.js\";import\"./c.fbd8d2ba.js\";import\"./c.c176780d.js\";import\"./c.936d9772.js\";import\"./c.8e28b461.js\";import\"./c.5ede7966.js\";import\"./c.c7df5815.js\";import\"./c.d2d70fc0.js\";import\"./c.9d6aaabf.js\";import\"./c.743a15a1.js\";import\"./c.bca0f55d.js\";e([c(\"ha-tab\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[i({type:Boolean,reflect:!0})],key:\"active\",value:()=>!1},{kind:\"field\",decorators:[i({type:Boolean,reflect:!0})],key:\"narrow\",value:()=>!1},{kind:\"field\",decorators:[i()],key:\"name\",value:void 0},{kind:\"field\",decorators:[a(\"mwc-ripple\")],key:\"_ripple\",value:void 0},{kind:\"field\",decorators:[s()],key:\"_shouldRenderRipple\",value:()=>!1},{kind:\"method\",key:\"render\",value:function(){return o`\n      <div\n        tabindex=\"0\"\n        role=\"tab\"\n        aria-selected=${this.active}\n        aria-label=${r(this.name)}\n        @focus=${this.handleRippleFocus}\n        @blur=${this.handleRippleBlur}\n        @mousedown=${this.handleRippleActivate}\n        @mouseup=${this.handleRippleDeactivate}\n        @mouseenter=${this.handleRippleMouseEnter}\n        @mouseleave=${this.handleRippleMouseLeave}\n        @touchstart=${this.handleRippleActivate}\n        @touchend=${this.handleRippleDeactivate}\n        @touchcancel=${this.handleRippleDeactivate}\n        @keydown=${this._handleKeyDown}\n      >\n        ${this.narrow?o`<slot name=\"icon\"></slot>`:\"\"}\n        <span class=\"name\">${this.name}</span>\n        ${this._shouldRenderRipple?o`<mwc-ripple></mwc-ripple>`:\"\"}\n      </div>\n    `}},{kind:\"field\",key:\"_rippleHandlers\",value(){return new n((()=>(this._shouldRenderRipple=!0,this._ripple)))}},{kind:\"method\",key:\"_handleKeyDown\",value:function(e){13===e.keyCode&&e.target.click()}},{kind:\"method\",decorators:[l({passive:!0})],key:\"handleRippleActivate\",value:function(e){this._rippleHandlers.startPress(e)}},{kind:\"method\",key:\"handleRippleDeactivate\",value:function(){this._rippleHandlers.endPress()}},{kind:\"method\",key:\"handleRippleMouseEnter\",value:function(){this._rippleHandlers.startHover()}},{kind:\"method\",key:\"handleRippleMouseLeave\",value:function(){this._rippleHandlers.endHover()}},{kind:\"method\",key:\"handleRippleFocus\",value:function(){this._rippleHandlers.startFocus()}},{kind:\"method\",key:\"handleRippleBlur\",value:function(){this._rippleHandlers.endFocus()}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return h`\n      div {\n        padding: 0 32px;\n        display: flex;\n        flex-direction: column;\n        text-align: center;\n        box-sizing: border-box;\n        align-items: center;\n        justify-content: center;\n        width: 100%;\n        height: var(--header-height);\n        cursor: pointer;\n        position: relative;\n        outline: none;\n      }\n\n      .name {\n        white-space: nowrap;\n        overflow: hidden;\n        text-overflow: ellipsis;\n        max-width: 100%;\n      }\n\n      :host([active]) {\n        color: var(--primary-color);\n      }\n\n      :host(:not([narrow])[active]) div {\n        border-bottom: 2px solid var(--primary-color);\n      }\n\n      :host([narrow]) {\n        min-width: 0;\n        display: flex;\n        justify-content: center;\n        overflow: hidden;\n      }\n\n      :host([narrow]) div {\n        padding: 0 4px;\n      }\n    `}}]}}),t),e([c(\"hass-tabs-subpage\")],(function(e,t){class a extends t{constructor(...t){super(...t),e(this)}}return{F:a,d:[{kind:\"field\",decorators:[i({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[i({type:Boolean})],key:\"supervisor\",value:()=>!1},{kind:\"field\",decorators:[i({attribute:!1})],key:\"localizeFunc\",value:void 0},{kind:\"field\",decorators:[i({type:String,attribute:\"back-path\"})],key:\"backPath\",value:void 0},{kind:\"field\",decorators:[i()],key:\"backCallback\",value:void 0},{kind:\"field\",decorators:[i({type:Boolean,attribute:\"main-page\"})],key:\"mainPage\",value:()=>!1},{kind:\"field\",decorators:[i({attribute:!1})],key:\"route\",value:void 0},{kind:\"field\",decorators:[i({attribute:!1})],key:\"tabs\",value:void 0},{kind:\"field\",decorators:[i({type:Boolean,reflect:!0})],key:\"narrow\",value:()=>!1},{kind:\"field\",decorators:[i({type:Boolean,reflect:!0,attribute:\"is-wide\"})],key:\"isWide\",value:()=>!1},{kind:\"field\",decorators:[i({type:Boolean,reflect:!0})],key:\"rtl\",value:()=>!1},{kind:\"field\",decorators:[s()],key:\"_activeTab\",value:void 0},{kind:\"field\",decorators:[F(\".content\")],key:\"_savedScrollPos\",value:void 0},{kind:\"field\",key:\"_getTabs\",value(){return d(((e,t,i,a,s,r,n)=>{const l=e.filter((e=>(!e.component||e.core||P(this.hass,e.component))&&(!e.advancedOnly||i)));if(l.length<2){if(1===l.length){const e=l[0];return[e.translationKey?n(e.translationKey):e.name]}return[\"\"]}return l.map((e=>o`\n            <a href=${e.path}>\n              <ha-tab\n                .hass=${this.hass}\n                .active=${e.path===(null==t?void 0:t.path)}\n                .narrow=${this.narrow}\n                .name=${e.translationKey?n(e.translationKey):e.name}\n              >\n                ${e.iconPath?o`<ha-svg-icon\n                      slot=\"icon\"\n                      .path=${e.iconPath}\n                    ></ha-svg-icon>`:\"\"}\n              </ha-tab>\n            </a>\n          `))}))}},{kind:\"method\",key:\"willUpdate\",value:function(e){if(e.has(\"route\")&&(this._activeTab=this.tabs.find((e=>`${this.route.prefix}${this.route.path}`.includes(e.path)))),e.has(\"hass\")){const t=e.get(\"hass\");t&&t.language===this.hass.language||(this.rtl=j(this.hass))}p(u(a.prototype),\"willUpdate\",this).call(this,e)}},{kind:\"method\",key:\"render\",value:function(){var e,t;const i=this._getTabs(this.tabs,this._activeTab,null===(e=this.hass.userData)||void 0===e?void 0:e.showAdvanced,this.hass.config.components,this.hass.language,this.narrow,this.localizeFunc||this.hass.localize),a=i.length>1;return o`\n      <div class=\"toolbar\">\n        ${this.mainPage||!this.backPath&&null!==(t=history.state)&&void 0!==t&&t.root?o`\n              <ha-menu-button\n                .hassio=${this.supervisor}\n                .hass=${this.hass}\n                .narrow=${this.narrow}\n              ></ha-menu-button>\n            `:this.backPath?o`\n              <a href=${this.backPath}>\n                <ha-icon-button-arrow-prev\n                  .hass=${this.hass}\n                ></ha-icon-button-arrow-prev>\n              </a>\n            `:o`\n              <ha-icon-button-arrow-prev\n                .hass=${this.hass}\n                @click=${this._backTapped}\n              ></ha-icon-button-arrow-prev>\n            `}\n        ${this.narrow||!a?o`<div class=\"main-title\">\n              <slot name=\"header\">${a?\"\":i[0]}</slot>\n            </div>`:\"\"}\n        ${a?o`\n              <div id=\"tabbar\" class=${v({\"bottom-bar\":this.narrow})}>\n                ${i}\n              </div>\n            `:\"\"}\n        <div id=\"toolbar-icon\">\n          <slot name=\"toolbar-icon\"></slot>\n        </div>\n      </div>\n      <div\n        class=\"content ${v({tabs:a})}\"\n        @scroll=${this._saveScrollPos}\n      >\n        <slot></slot>\n      </div>\n      <div id=\"fab\" class=${v({tabs:a})}>\n        <slot name=\"fab\"></slot>\n      </div>\n    `}},{kind:\"method\",decorators:[l({passive:!0})],key:\"_saveScrollPos\",value:function(e){this._savedScrollPos=e.target.scrollTop}},{kind:\"method\",key:\"_backTapped\",value:function(){this.backCallback?this.backCallback():history.back()}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return h`\n      :host {\n        display: block;\n        height: 100%;\n        background-color: var(--primary-background-color);\n      }\n\n      :host([narrow]) {\n        width: 100%;\n        position: fixed;\n      }\n\n      ha-menu-button {\n        margin-right: 24px;\n      }\n\n      .toolbar {\n        display: flex;\n        align-items: center;\n        font-size: 20px;\n        height: var(--header-height);\n        background-color: var(--sidebar-background-color);\n        font-weight: 400;\n        border-bottom: 1px solid var(--divider-color);\n        padding: 0 16px;\n        box-sizing: border-box;\n      }\n      .toolbar a {\n        color: var(--sidebar-text-color);\n        text-decoration: none;\n      }\n      .bottom-bar a {\n        width: 25%;\n      }\n\n      #tabbar {\n        display: flex;\n        font-size: 14px;\n        overflow: hidden;\n      }\n\n      #tabbar > a {\n        overflow: hidden;\n        max-width: 45%;\n      }\n\n      #tabbar.bottom-bar {\n        position: absolute;\n        bottom: 0;\n        left: 0;\n        padding: 0 16px;\n        box-sizing: border-box;\n        background-color: var(--sidebar-background-color);\n        border-top: 1px solid var(--divider-color);\n        justify-content: space-around;\n        z-index: 2;\n        font-size: 12px;\n        width: 100%;\n        padding-bottom: env(safe-area-inset-bottom);\n      }\n\n      #tabbar:not(.bottom-bar) {\n        flex: 1;\n        justify-content: center;\n      }\n\n      :host(:not([narrow])) #toolbar-icon {\n        min-width: 40px;\n      }\n\n      ha-menu-button,\n      ha-icon-button-arrow-prev,\n      ::slotted([slot=\"toolbar-icon\"]) {\n        display: flex;\n        flex-shrink: 0;\n        pointer-events: auto;\n        color: var(--sidebar-icon-color);\n      }\n\n      .main-title {\n        flex: 1;\n        max-height: var(--header-height);\n        line-height: 20px;\n        color: var(--sidebar-text-color);\n        margin: var(--main-title-margin, 0 0 0 24px);\n      }\n\n      .content {\n        position: relative;\n        width: calc(\n          100% - env(safe-area-inset-left) - env(safe-area-inset-right)\n        );\n        margin-left: env(safe-area-inset-left);\n        margin-right: env(safe-area-inset-right);\n        height: calc(100% - 1px - var(--header-height));\n        height: calc(\n          100% - 1px - var(--header-height) - env(safe-area-inset-bottom)\n        );\n        overflow: auto;\n        -webkit-overflow-scrolling: touch;\n      }\n\n      :host([narrow]) .content.tabs {\n        height: calc(100% - 2 * var(--header-height));\n        height: calc(\n          100% - 2 * var(--header-height) - env(safe-area-inset-bottom)\n        );\n      }\n\n      #fab {\n        position: fixed;\n        right: calc(16px + env(safe-area-inset-right));\n        bottom: calc(16px + env(safe-area-inset-bottom));\n        z-index: 1;\n      }\n      :host([narrow]) #fab.tabs {\n        bottom: calc(84px + env(safe-area-inset-bottom));\n      }\n      #fab[is-wide] {\n        bottom: 24px;\n        right: 24px;\n      }\n      :host([rtl]) #fab {\n        right: auto;\n        left: calc(16px + env(safe-area-inset-left));\n      }\n      :host([rtl][is-wide]) #fab {\n        bottom: 24px;\n        left: 24px;\n        right: auto;\n      }\n    `}}]}}),t);let E=e([c(\"hacs-store-panel\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[i({attribute:!1})],key:\"filters\",value:()=>({})},{kind:\"field\",decorators:[i({attribute:!1})],key:\"hacs\",value:void 0},{kind:\"field\",decorators:[i()],key:\"_searchInput\",value:()=>\"\"},{kind:\"field\",decorators:[i({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[i({attribute:!1})],key:\"narrow\",value:void 0},{kind:\"field\",decorators:[i({attribute:!1})],key:\"isWide\",value:void 0},{kind:\"field\",decorators:[i({attribute:!1})],key:\"route\",value:void 0},{kind:\"field\",decorators:[i({attribute:!1})],key:\"sections\",value:void 0},{kind:\"field\",decorators:[i()],key:\"section\",value:void 0},{kind:\"field\",key:\"_repositoriesInActiveSection\",value(){return d(((e,t)=>[(null==e?void 0:e.filter((e=>{var i,a,s;return(null===(i=this.hacs.sections)||void 0===i||null===(a=i.find((e=>e.id===t)))||void 0===a||null===(s=a.categories)||void 0===s?void 0:s.includes(e.category))&&e.installed})))||[],(null==e?void 0:e.filter((e=>{var i,a,s;return(null===(i=this.hacs.sections)||void 0===i||null===(a=i.find((e=>e.id===t)))||void 0===a||null===(s=a.categories)||void 0===s?void 0:s.includes(e.category))&&e.new&&!e.installed})))||[]]))}},{kind:\"get\",key:\"allRepositories\",value:function(){const[e,t]=this._repositoriesInActiveSection(this.hacs.repositories,this.section);return t.concat(e)}},{kind:\"field\",key:\"_filterRepositories\",value:()=>d(z)},{kind:\"get\",key:\"visibleRepositories\",value:function(){const e=this.allRepositories.filter((e=>{var t,i;return null===(t=this.filters[this.section])||void 0===t||null===(i=t.find((t=>t.id===e.category)))||void 0===i?void 0:i.checked}));return this._filterRepositories(e,this._searchInput)}},{kind:\"method\",key:\"firstUpdated\",value:async function(){this.addEventListener(\"filter-change\",(e=>this._updateFilters(e)))}},{kind:\"method\",key:\"_updateFilters\",value:function(e){var t;const i=null===(t=this.filters[this.section])||void 0===t?void 0:t.find((t=>t.id===e.detail.id));this.filters[this.section].find((e=>e.id===i.id)).checked=!i.checked,this.requestUpdate()}},{kind:\"method\",key:\"render\",value:function(){var e;if(!this.hacs)return o``;const t=this._repositoriesInActiveSection(this.hacs.repositories,this.section)[1];if(!this.filters[this.section]&&this.hacs.info.categories){var i;const e=null===(i=f(this.hacs.language,this.route))||void 0===i?void 0:i.categories;this.filters[this.section]=[],null==e||e.filter((e=>{var t;return null===(t=this.hacs.info)||void 0===t?void 0:t.categories.includes(e)})).forEach((e=>{this.filters[this.section].push({id:e,value:e,checked:!0})}))}return o`<hass-tabs-subpage\n      back-path=\"/hacs/entry\"\n      .hass=${this.hass}\n      .narrow=${this.narrow}\n      .route=${this.route}\n      .tabs=${this.hacs.sections}\n      hasFab\n    >\n      <ha-icon-overflow-menu\n        slot=\"toolbar-icon\"\n        narrow\n        .hass=${this.hass}\n        .items=${[{path:b,label:this.hacs.localize(\"menu.documentation\"),action:()=>m.open(\"https://hacs.xyz/\",\"_blank\",\"noreferrer=true\")},{path:k,label:\"GitHub\",action:()=>m.open(\"https://github.com/hacs\",\"_blank\",\"noreferrer=true\")},{path:g,label:this.hacs.localize(\"menu.open_issue\"),action:()=>m.open(\"https://hacs.xyz/docs/issues\",\"_blank\",\"noreferrer=true\")},{path:y,label:this.hacs.localize(\"menu.custom_repositories\"),disabled:this.hacs.info.disabled_reason,action:()=>this.dispatchEvent(new CustomEvent(\"hacs-dialog\",{detail:{type:\"custom-repositories\",repositories:this.hacs.repositories},bubbles:!0,composed:!0}))},{path:w,label:this.hacs.localize(\"menu.about\"),action:()=>I(this,this.hacs)}]}\n      >\n      </ha-icon-overflow-menu>\n      ${this.narrow?o`\n            <search-input\n              .hass=${this.hass}\n              class=\"header\"\n              slot=\"header\"\n              .label=${this.hacs.localize(\"search.downloaded\")}\n              .filter=${this._searchInput||\"\"}\n              @value-changed=${this._inputValueChanged}\n            ></search-input>\n          `:o`<div class=\"search\">\n            <search-input\n              .hass=${this.hass}\n              .label=${0===t.length?this.hacs.localize(\"search.downloaded\"):this.hacs.localize(\"search.downloaded_new\")}\n              .filter=${this._searchInput||\"\"}\n              @value-changed=${this._inputValueChanged}\n            ></search-input>\n          </div>`}\n      <div class=\"content ${this.narrow?\"narrow-content\":\"\"}\">\n        ${(null===(e=this.filters[this.section])||void 0===e?void 0:e.length)>1?o`<div class=\"filters\">\n              <hacs-filter\n                .hacs=${this.hacs}\n                .filters=\"${this.filters[this.section]}\"\n              ></hacs-filter>\n            </div>`:\"\"}\n        ${null!=t&&t.length?o`<ha-alert .rtl=${j(this.hass)}>\n              ${this.hacs.localize(\"store.new_repositories_note\")}\n              <mwc-button\n                class=\"max-content\"\n                slot=\"action\"\n                .label=${this.hacs.localize(\"menu.dismiss\")}\n                @click=${this._clearAllNewRepositories}\n              >\n              </mwc-button>\n            </ha-alert> `:\"\"}\n        <div class=\"container ${this.narrow?\"narrow\":\"\"}\">\n          ${void 0===this.hacs.repositories?\"\":0===this.allRepositories.length?this._renderEmpty():0===this.visibleRepositories.length?this._renderNoResultsFound():this._renderRepositories()}\n        </div>\n      </div>\n      <ha-fab\n        slot=\"fab\"\n        .label=${this.hacs.localize(\"store.explore\")}\n        .extended=${!this.narrow}\n        @click=${this._addRepository}\n      >\n        <ha-svg-icon slot=\"icon\" .path=${x}></ha-svg-icon>\n      </ha-fab>\n    </hass-tabs-subpage>`}},{kind:\"method\",key:\"_renderRepositories\",value:function(){return this.visibleRepositories.map((e=>o`<hacs-repository-card\n          .hass=${this.hass}\n          .hacs=${this.hacs}\n          .repository=${e}\n          .narrow=${this.narrow}\n          ?narrow=${this.narrow}\n        ></hacs-repository-card>`))}},{kind:\"method\",key:\"_clearAllNewRepositories\",value:async function(){var e;await $(this.hass,{categories:(null===(e=f(this.hacs.language,this.route))||void 0===e?void 0:e.categories)||[]})}},{kind:\"method\",key:\"_renderNoResultsFound\",value:function(){return o`<ha-alert\n      .rtl=${j(this.hass)}\n      alert-type=\"warning\"\n      .title=\"${this.hacs.localize(\"store.no_repositories\")} 😕\"\n    >\n      ${this.hacs.localize(\"store.no_repositories_found_desc1\",{searchInput:this._searchInput})}\n      <br />\n      ${this.hacs.localize(\"store.no_repositories_found_desc2\")}\n    </ha-alert>`}},{kind:\"method\",key:\"_renderEmpty\",value:function(){return o`<ha-alert\n      .title=\"${this.hacs.localize(\"store.no_repositories\")} 😕\"\n      .rtl=${j(this.hass)}\n    >\n      ${this.hacs.localize(\"store.no_repositories_desc1\")}\n      <br />\n      ${this.hacs.localize(\"store.no_repositories_desc2\")}\n    </ha-alert>`}},{kind:\"method\",key:\"_inputValueChanged\",value:function(e){this._searchInput=e.detail.value,window.localStorage.setItem(\"hacs-search\",this._searchInput)}},{kind:\"method\",key:\"_addRepository\",value:function(){this.dispatchEvent(new CustomEvent(\"hacs-dialog\",{detail:{type:\"add-repository\",repositories:this.hacs.repositories,section:this.section},bubbles:!0,composed:!0}))}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[_,R,h`\n        .filter {\n          border-bottom: 1px solid var(--divider-color);\n        }\n        .content {\n          height: calc(100vh - 128px);\n          overflow: auto;\n        }\n        .narrow-content {\n          height: calc(100vh - 128px);\n        }\n        .container {\n          display: grid;\n          grid-template-columns: repeat(auto-fit, minmax(480px, 1fr));\n          justify-items: center;\n          grid-gap: 8px 8px;\n          padding: 8px 16px 16px;\n          margin-bottom: 64px;\n        }\n        ha-svg-icon {\n          color: var(--hcv-text-color-on-background);\n        }\n        hacs-repository-card {\n          max-width: 500px;\n          display: flex;\n          flex-direction: column;\n          justify-content: space-between;\n        }\n        hacs-repository-card[narrow] {\n          width: 100%;\n        }\n        hacs-repository-card[narrow]:last-of-type {\n          margin-bottom: 64px;\n        }\n        ha-alert {\n          color: var(--hcv-text-color-primary);\n          display: block;\n          margin-top: -4px;\n        }\n        .narrow {\n          width: 100%;\n          display: block;\n          padding: 0px;\n          margin: 0;\n        }\n        search-input {\n          display: block;\n        }\n\n        search-input.header {\n          padding: 0;\n        }\n\n        .bottom-bar {\n          position: fixed !important;\n        }\n        .max-content {\n          width: max-content;\n        }\n      `]}}]}}),t);export{E as HacsStorePanel};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.ef5e31a4.js",
    "content": "import{c as e,u as t}from\"./c.743a15a1.js\";import{ef as a}from\"./main-a0d7432d.js\";import{l}from\"./c.b054aba2.js\";import{l as r}from\"./c.9d5cd8b6.js\";import\"./c.47f687e9.js\";import\"./c.175b9792.js\";import\"./c.c176780d.js\";import\"./c.936d9772.js\";import\"./c.8e28b461.js\";import\"./c.fbd8d2ba.js\";import\"./c.c7df5815.js\";import\"./c.db2e6bb6.js\";import\"./c.88ebfd3e.js\";import\"./c.bca0f55d.js\";import\"./c.05e9df28.js\";import\"./c.21c042d4.js\";import\"./c.5ba288d8.js\";import\"./c.6711bf6c.js\";import\"./c.5ede7966.js\";import\"./c.63dc92d5.js\";var i=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.InitializePluralRules=void 0,t.InitializePluralRules=function(e,t,a,i){var o=i.availableLocales,n=i.relevantExtensionKeys,s=i.localeData,u=i.getDefaultLocale,c=i.getInternalSlots,d=(0,l.CanonicalizeLocaleList)(t),f=Object.create(null),p=(0,l.CoerceOptionsToObject)(a),b=c(e);b.initializedPluralRules=!0;var m=(0,l.GetOption)(p,\"localeMatcher\",\"string\",[\"best fit\",\"lookup\"],\"best fit\");f.localeMatcher=m,b.type=(0,l.GetOption)(p,\"type\",\"string\",[\"cardinal\",\"ordinal\"],\"cardinal\"),(0,l.SetNumberFormatDigitOptions)(b,p,0,3,\"standard\");var v=(0,r.ResolveLocale)(o,d,f,n,s,u);return b.locale=v.locale,e}}));t(i),i.InitializePluralRules;var o=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.GetOperands=void 0,t.GetOperands=function(e){(0,l.invariant)(\"string\"==typeof e,\"GetOperands should have been called with a string\");var t=(0,l.ToNumber)(e);(0,l.invariant)(isFinite(t),\"n should be finite\");var a,r,i,o=e.indexOf(\".\"),n=\"\";-1===o?(a=t,r=0,i=0):(a=e.slice(0,o),n=e.slice(o,e.length),r=(0,l.ToNumber)(n),i=n.length);var s,u,c=Math.abs((0,l.ToNumber)(a));if(0!==r){var d=n.replace(/0+$/,\"\");s=d.length,u=(0,l.ToNumber)(d)}else s=0,u=0;return{Number:t,IntegerDigits:c,NumberOfFractionDigits:i,NumberOfFractionDigitsWithoutTrailing:s,FractionDigits:r,FractionDigitsWithoutTrailing:u}}}));t(o),o.GetOperands;var n=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.ResolvePlural=void 0,t.ResolvePlural=function(e,t,a){var r=a.getInternalSlots,i=a.PluralRuleSelect,n=r(e);if((0,l.invariant)(\"Object\"===(0,l.Type)(n),\"pl has to be an object\"),(0,l.invariant)(\"initializedPluralRules\"in n,\"pluralrules must be initialized\"),(0,l.invariant)(\"Number\"===(0,l.Type)(t),\"n must be a number\"),!isFinite(t))return\"other\";var s=n.locale,u=n.type,c=(0,l.FormatNumericToString)(n,t).formattedString;return i(s,u,t,(0,o.GetOperands)(c))}}));t(n),n.ResolvePlural;var s=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0});var a=new WeakMap;t.default=function(e){var t=a.get(e);return t||(t=Object.create(null),a.set(e,t)),t}}));t(s);var u=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.PluralRules=void 0;var r=(0,a.__importDefault)(s);function o(e,t){if(!(e instanceof c))throw new TypeError(\"Method Intl.PluralRules.prototype.\".concat(t,\" called on incompatible receiver \").concat(String(e)))}function u(e,t,a,l){var r=l.IntegerDigits,i=l.NumberOfFractionDigits,o=l.FractionDigits;return c.localeData[e].fn(i?\"\".concat(r,\".\").concat(o):r,\"ordinal\"===t)}var c=function(){function e(t,a){if(!(this&&this instanceof e?this.constructor:void 0))throw new TypeError(\"Intl.PluralRules must be called with 'new'\");return(0,i.InitializePluralRules)(this,t,a,{availableLocales:e.availableLocales,relevantExtensionKeys:e.relevantExtensionKeys,localeData:e.localeData,getDefaultLocale:e.getDefaultLocale,getInternalSlots:r.default})}return e.prototype.resolvedOptions=function(){o(this,\"resolvedOptions\");var t=Object.create(null),l=(0,r.default)(this);return t.locale=l.locale,t.type=l.type,[\"minimumIntegerDigits\",\"minimumFractionDigits\",\"maximumFractionDigits\",\"minimumSignificantDigits\",\"maximumSignificantDigits\"].forEach((function(e){var a=l[e];void 0!==a&&(t[e]=a)})),t.pluralCategories=(0,a.__spreadArray)([],e.localeData[t.locale].categories[t.type],!0),t},e.prototype.select=function(e){o(this,\"select\");var t=(0,l.ToNumber)(e);return(0,n.ResolvePlural)(this,t,{getInternalSlots:r.default,PluralRuleSelect:u})},e.prototype.toString=function(){return\"[object Intl.PluralRules]\"},e.supportedLocalesOf=function(t,a){return(0,l.SupportedLocales)(e.availableLocales,(0,l.CanonicalizeLocaleList)(t),a)},e.__addLocaleData=function(){for(var t=[],a=0;a<arguments.length;a++)t[a]=arguments[a];for(var l=0,r=t;l<r.length;l++){var i=r[l],o=i.data,n=i.locale;e.localeData[n]=o,e.availableLocales.add(n),e.__defaultLocale||(e.__defaultLocale=n)}},e.getDefaultLocale=function(){return e.__defaultLocale},e.localeData={},e.availableLocales=new Set,e.__defaultLocale=\"\",e.relevantExtensionKeys=[],e.polyfilled=!0,e}();t.PluralRules=c;try{\"undefined\"!=typeof Symbol&&Object.defineProperty(c.prototype,Symbol.toStringTag,{value:\"Intl.PluralRules\",writable:!1,enumerable:!1,configurable:!0});try{Object.defineProperty(c,\"length\",{value:0,writable:!1,enumerable:!1,configurable:!0})}catch(e){}Object.defineProperty(c.prototype.constructor,\"length\",{value:0,writable:!1,enumerable:!1,configurable:!0}),Object.defineProperty(c.supportedLocalesOf,\"length\",{value:1,writable:!1,enumerable:!1,configurable:!0})}catch(e){}}));t(u),u.PluralRules;var c=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.supportedLocales=void 0,t.supportedLocales=[\"af\",\"ak\",\"am\",\"an\",\"ar\",\"ars\",\"as\",\"asa\",\"ast\",\"az\",\"bal\",\"be\",\"bem\",\"bez\",\"bg\",\"bho\",\"bm\",\"bn\",\"bo\",\"br\",\"brx\",\"bs\",\"ca\",\"ce\",\"ceb\",\"cgg\",\"chr\",\"ckb\",\"cs\",\"cy\",\"da\",\"de\",\"doi\",\"dsb\",\"dv\",\"dz\",\"ee\",\"el\",\"en\",\"eo\",\"es\",\"et\",\"eu\",\"fa\",\"ff\",\"fi\",\"fil\",\"fo\",\"fr\",\"fur\",\"fy\",\"ga\",\"gd\",\"gl\",\"gsw\",\"gu\",\"guw\",\"gv\",\"ha\",\"haw\",\"he\",\"hi\",\"hnj\",\"hr\",\"hsb\",\"hu\",\"hy\",\"ia\",\"id\",\"ig\",\"ii\",\"io\",\"is\",\"it\",\"iu\",\"ja\",\"jbo\",\"jgo\",\"jmc\",\"jv\",\"jw\",\"ka\",\"kab\",\"kaj\",\"kcg\",\"kde\",\"kea\",\"kk\",\"kkj\",\"kl\",\"km\",\"kn\",\"ko\",\"ks\",\"ksb\",\"ksh\",\"ku\",\"kw\",\"ky\",\"lag\",\"lb\",\"lg\",\"lij\",\"lkt\",\"ln\",\"lo\",\"lt\",\"lv\",\"mas\",\"mg\",\"mgo\",\"mk\",\"ml\",\"mn\",\"mo\",\"mr\",\"ms\",\"mt\",\"my\",\"nah\",\"naq\",\"nb\",\"nd\",\"ne\",\"nl\",\"nn\",\"nnh\",\"no\",\"nqo\",\"nr\",\"nso\",\"ny\",\"nyn\",\"om\",\"or\",\"os\",\"osa\",\"pa\",\"pap\",\"pcm\",\"pl\",\"prg\",\"ps\",\"pt-PT\",\"pt\",\"rm\",\"ro\",\"rof\",\"ru\",\"rwk\",\"sah\",\"saq\",\"sat\",\"sc\",\"scn\",\"sd\",\"sdh\",\"se\",\"seh\",\"ses\",\"sg\",\"sh\",\"shi\",\"si\",\"sk\",\"sl\",\"sma\",\"smi\",\"smj\",\"smn\",\"sms\",\"sn\",\"so\",\"sq\",\"sr\",\"ss\",\"ssy\",\"st\",\"su\",\"sv\",\"sw\",\"syr\",\"ta\",\"te\",\"teo\",\"th\",\"ti\",\"tig\",\"tk\",\"tl\",\"tn\",\"to\",\"tpi\",\"tr\",\"ts\",\"tzm\",\"ug\",\"uk\",\"und\",\"ur\",\"uz\",\"ve\",\"vi\",\"vo\",\"vun\",\"wa\",\"wae\",\"wo\",\"xh\",\"xog\",\"yi\",\"yo\",\"yue\",\"zh\",\"zu\"]}));t(c),c.supportedLocales;var d=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),t.shouldPolyfill=void 0,t.shouldPolyfill=function(e){if(void 0===e&&(e=\"en\"),!(\"PluralRules\"in Intl)||\"one\"===new Intl.PluralRules(\"en\",{minimumFractionDigits:2}).select(1)||!function(e){if(!e)return!0;var t=Array.isArray(e)?e:[e];return Intl.PluralRules.supportedLocalesOf(t).length===t.length}(e))return e?(0,r.match)([e],c.supportedLocales,\"en\"):void 0}}));t(d),d.shouldPolyfill;var f=e((function(e,t){Object.defineProperty(t,\"__esModule\",{value:!0}),(0,d.shouldPolyfill)()&&Object.defineProperty(Intl,\"PluralRules\",{value:u.PluralRules,writable:!0,enumerable:!1,configurable:!0})})),p=t(f);export{f as __moduleExports,p as default};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.f0a99f33.js",
    "content": "import{_ as e,n as t,a as i,H as a,e as s,b as r,m as o,$ as l,o as c,c as d,s as n,d as h,r as u}from\"./main-a0d7432d.js\";import\"./c.936d9772.js\";import{s as p,S as f,a as m}from\"./c.db2e6bb6.js\";import\"./c.175b9792.js\";import\"./c.c176780d.js\";import\"./c.c4815b5a.js\";import{f as v}from\"./c.1b450c80.js\";import{b as g}from\"./c.05e9df28.js\";import\"./c.0732ee74.js\";import\"./c.7ee871d3.js\";import\"./c.8e28b461.js\";import\"./c.fbd8d2ba.js\";import\"./c.c608beec.js\";let y=class extends f{};y.styles=[p],y=e([t(\"mwc-select\")],y);const _=[\"stars\",\"last_updated\",\"name\"];let k=i([t(\"hacs-add-repository-dialog\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[s({attribute:!1})],key:\"filters\",value:()=>[]},{kind:\"field\",decorators:[s({type:Number})],key:\"_load\",value:()=>30},{kind:\"field\",decorators:[s({type:Number})],key:\"_top\",value:()=>0},{kind:\"field\",decorators:[s()],key:\"_searchInput\",value:()=>\"\"},{kind:\"field\",decorators:[s()],key:\"_sortBy\",value:()=>_[0]},{kind:\"field\",decorators:[s()],key:\"section\",value:void 0},{kind:\"method\",key:\"shouldUpdate\",value:function(e){return e.forEach(((e,t)=>{\"hass\"===t&&(this.sidebarDocked='\"docked\"'===window.localStorage.getItem(\"dockedSidebar\"))})),e.has(\"narrow\")||e.has(\"filters\")||e.has(\"active\")||e.has(\"_searchInput\")||e.has(\"_load\")||e.has(\"_sortBy\")}},{kind:\"field\",key:\"_repositoriesInActiveCategory\",value(){return(e,t)=>null==e?void 0:e.filter((e=>{var i,a;return!e.installed&&(null===(i=this.hacs.sections)||void 0===i||null===(a=i.find((e=>e.id===this.section)).categories)||void 0===a?void 0:a.includes(e.category))&&!e.installed&&(null==t?void 0:t.includes(e.category))}))}},{kind:\"method\",key:\"firstUpdated\",value:async function(){var e;if(this.addEventListener(\"filter-change\",(e=>this._updateFilters(e))),0===(null===(e=this.filters)||void 0===e?void 0:e.length)){var t;const e=null===(t=r(this.hacs.language,this.route))||void 0===t?void 0:t.categories;null==e||e.filter((e=>{var t;return null===(t=this.hacs.info)||void 0===t?void 0:t.categories.includes(e)})).forEach((e=>{this.filters.push({id:e,value:e,checked:!0})})),this.requestUpdate(\"filters\")}}},{kind:\"method\",key:\"_updateFilters\",value:function(e){const t=this.filters.find((t=>t.id===e.detail.id));this.filters.find((e=>e.id===t.id)).checked=!t.checked,this.requestUpdate(\"filters\")}},{kind:\"field\",key:\"_filterRepositories\",value:()=>o(v)},{kind:\"method\",key:\"render\",value:function(){var e;if(!this.active)return l``;this._searchInput=window.localStorage.getItem(\"hacs-search\")||\"\";let t=this._filterRepositories(this._repositoriesInActiveCategory(this.repositories,null===(e=this.hacs.info)||void 0===e?void 0:e.categories),this._searchInput);return 0!==this.filters.length&&(t=t.filter((e=>{var t;return null===(t=this.filters.find((t=>t.id===e.category)))||void 0===t?void 0:t.checked}))),l`\n      <hacs-dialog\n        .active=${this.active}\n        .hass=${this.hass}\n        .title=${this.hacs.localize(\"dialog_add_repo.title\")}\n        hideActions\n        scrimClickAction\n        maxWidth\n      >\n        <div class=\"searchandfilter\" ?narrow=${this.narrow}>\n          <search-input\n            .hass=${this.hass}\n            .label=${this.hacs.localize(\"search.placeholder\")}\n            .filter=${this._searchInput}\n            @value-changed=${this._inputValueChanged}\n            ?narrow=${this.narrow}\n          ></search-input>\n          <mwc-select\n            ?narrow=${this.narrow}\n            .label=${this.hacs.localize(\"dialog_add_repo.sort_by\")}\n            .value=${this._sortBy}\n            @selected=${e=>this._sortBy=e.currentTarget.value}\n            @closed=${m}\n          >\n            ${_.map((e=>l`<mwc-list-item .value=${e}>\n                  ${this.hacs.localize(`dialog_add_repo.sort_by_values.${e}`)||e}\n                </mwc-list-item>`))}\n          </mwc-select>\n        </div>\n        ${this.filters.length>1?l`<div class=\"filters\">\n              <hacs-filter .hacs=${this.hacs} .filters=\"${this.filters}\"></hacs-filter>\n            </div>`:\"\"}\n        <div class=${c({content:!0,narrow:this.narrow})} @scroll=${this._loadMore}>\n          <mwc-list>\n            ${0===t.length?l`<ha-alert>${this.hacs.localize(\"dialog_add_repo.no_match\")}</ha-alert>`:t.sort(((e,t)=>\"name\"===this._sortBy?e.name.toLocaleLowerCase()<t.name.toLocaleLowerCase()?-1:1:e[this._sortBy]>t[this._sortBy]?-1:1)).slice(0,this._load).map((e=>l`<ha-clickable-list-item\n                      graphic=${this.narrow?\"\":\"avatar\"}\n                      twoline\n                      @click=${()=>this.active=!1}\n                      href=\"/hacs/repository/${e.id}\"\n                      .hasMeta=${!this.narrow&&\"integration\"!==e.category}\n                    >\n                      ${this.narrow?\"\":\"integration\"===e.category?l`\n                            <img\n                              loading=\"lazy\"\n                              .src=${g({domain:e.domain,darkOptimized:this.hass.themes.darkMode,type:\"icon\"})}\n                              referrerpolicy=\"no-referrer\"\n                              @error=${this._onImageError}\n                              @load=${this._onImageLoad}\n                              slot=\"graphic\"\n                            />\n                          `:l`\n                            <ha-svg-icon\n                              slot=\"graphic\"\n                              path=\"${d}\"\n                              style=\"padding-left: 0; height: 40px; width: 40px;\"\n                            >\n                            </ha-svg-icon>\n                          `}\n                      <span>${e.name}</span>\n                      <span slot=\"secondary\">${e.description}</span>\n                      <ha-chip slot=\"meta\"\n                        >${this.hacs.localize(`common.${e.category}`)}</ha-chip\n                      >\n                    </ha-clickable-list-item>`))}\n          </mwc-list>\n        </div>\n      </hacs-dialog>\n    `}},{kind:\"method\",key:\"_loadMore\",value:function(e){const t=e.target.scrollTop;t>=this._top?this._load+=1:this._load-=1,this._top=t}},{kind:\"method\",key:\"_inputValueChanged\",value:function(e){this._searchInput=e.detail.value,window.localStorage.setItem(\"hacs-search\",this._searchInput)}},{kind:\"method\",key:\"_onImageLoad\",value:function(e){e.target.style.visibility=\"initial\"}},{kind:\"method\",key:\"_onImageError\",value:function(e){var t;if(null!==(t=e.target)&&void 0!==t&&t.outerHTML)try{e.target.outerHTML=`<ha-svg-icon path=\"${d}\" slot=\"graphic\"></ha-svg-icon>`}catch(e){}}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[n,h,u`\n        .content {\n          width: 100%;\n          overflow: auto;\n          max-height: 70vh;\n        }\n\n        .filter {\n          margin-top: -12px;\n          display: flex;\n          width: 200px;\n          float: right;\n        }\n\n        .list {\n          margin-top: 16px;\n          width: 1024px;\n          max-width: 100%;\n        }\n        search-input {\n          display: block;\n          float: left;\n          width: 75%;\n        }\n        search-input[narrow],\n        mwc-select[narrow] {\n          width: 100%;\n          margin: 4px 0;\n        }\n\n        .filters {\n          width: 100%;\n          display: flex;\n        }\n\n        hacs-filter {\n          width: 100%;\n          margin-left: -32px;\n        }\n\n        .searchandfilter {\n          display: flex;\n          justify-content: space-between;\n          align-items: self-end;\n        }\n\n        .searchandfilter[narrow] {\n          flex-direction: column;\n        }\n      `]}}]}}),a);export{k as HacsAddRepositoryDialog};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.f2cbe48c.js",
    "content": "import{a as e,H as i,e as t,$ as s,n as o}from\"./main-a0d7432d.js\";import\"./c.7ee871d3.js\";import\"./c.c608beec.js\";import\"./c.8e28b461.js\";let c=e([o(\"hacs-progress-dialog\")],(function(e,i){return{F:class extends i{constructor(...i){super(...i),e(this)}},d:[{kind:\"field\",decorators:[t()],key:\"title\",value:void 0},{kind:\"field\",decorators:[t()],key:\"content\",value:void 0},{kind:\"field\",decorators:[t()],key:\"confirmText\",value:void 0},{kind:\"field\",decorators:[t()],key:\"confirm\",value:void 0},{kind:\"field\",decorators:[t({type:Boolean})],key:\"_inProgress\",value:()=>!1},{kind:\"method\",key:\"shouldUpdate\",value:function(e){return e.has(\"active\")||e.has(\"title\")||e.has(\"content\")||e.has(\"confirmText\")||e.has(\"confirm\")||e.has(\"_inProgress\")}},{kind:\"method\",key:\"render\",value:function(){return this.active?s`\n      <hacs-dialog .active=${this.active} .hass=${this.hass} title=${this.title||\"\"}>\n        <div class=\"content\">\n          ${this.content||\"\"}\n        </div>\n        <mwc-button slot=\"secondaryaction\" ?disabled=${this._inProgress} @click=${this._close}>\n          ${this.hacs.localize(\"common.cancel\")}\n        </mwc-button>\n        <mwc-button slot=\"primaryaction\" @click=${this._confirmed}>\n          ${this._inProgress?s`<ha-circular-progress active size=\"small\"></ha-circular-progress>`:this.confirmText||this.hacs.localize(\"common.yes\")}</mwc-button\n          >\n        </mwc-button>\n      </hacs-dialog>\n    `:s``}},{kind:\"method\",key:\"_confirmed\",value:async function(){this._inProgress=!0,await this.confirm(),this._inProgress=!1,this._close()}},{kind:\"method\",key:\"_close\",value:function(){this.active=!1,this.dispatchEvent(new Event(\"hacs-dialog-closed\",{bubbles:!0,composed:!0}))}}]}}),i);export{c as HacsProgressDialog};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.f3416703.js",
    "content": "import{a as i,h as a,e as t,t as o,i as s,$ as e,D as r,j as n,A as l,r as c,n as d}from\"./main-a0d7432d.js\";import\"./c.c608beec.js\";import\"./c.5ba288d8.js\";import\"./c.8e28b461.js\";i([d(\"dialog-box\")],(function(i,a){return{F:class extends a{constructor(...a){super(...a),i(this)}},d:[{kind:\"field\",decorators:[t({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[o()],key:\"_params\",value:void 0},{kind:\"field\",decorators:[s(\"ha-textfield\")],key:\"_textField\",value:void 0},{kind:\"method\",key:\"showDialog\",value:async function(i){this._params=i}},{kind:\"method\",key:\"closeDialog\",value:function(){var i,a;return!(null!==(i=this._params)&&void 0!==i&&i.confirmation||null!==(a=this._params)&&void 0!==a&&a.prompt)&&(!this._params||(this._dismiss(),!0))}},{kind:\"method\",key:\"render\",value:function(){if(!this._params)return e``;const i=this._params.confirmation||this._params.prompt;return e`\n      <ha-dialog\n        open\n        ?scrimClickAction=${i}\n        ?escapeKeyAction=${i}\n        @closed=${this._dialogClosed}\n        defaultAction=\"ignore\"\n        .heading=${e`${this._params.warning?e`<ha-svg-icon\n              .path=${r}\n              style=\"color: var(--warning-color)\"\n            ></ha-svg-icon> `:\"\"}${this._params.title?this._params.title:this._params.confirmation&&this.hass.localize(\"ui.dialogs.generic.default_confirmation_title\")}`}\n      >\n        <div>\n          ${this._params.text?e`\n                <p class=${this._params.prompt?\"no-bottom-padding\":\"\"}>\n                  ${this._params.text}\n                </p>\n              `:\"\"}\n          ${this._params.prompt?e`\n                <ha-textfield\n                  dialogInitialFocus\n                  value=${n(this._params.defaultValue)}\n                  .label=${this._params.inputLabel?this._params.inputLabel:\"\"}\n                  .type=${this._params.inputType?this._params.inputType:\"text\"}\n                ></ha-textfield>\n              `:\"\"}\n        </div>\n        ${i&&e`\n          <mwc-button @click=${this._dismiss} slot=\"secondaryAction\">\n            ${this._params.dismissText?this._params.dismissText:this.hass.localize(\"ui.dialogs.generic.cancel\")}\n          </mwc-button>\n        `}\n        <mwc-button\n          @click=${this._confirm}\n          ?dialogInitialFocus=${!this._params.prompt}\n          slot=\"primaryAction\"\n        >\n          ${this._params.confirmText?this._params.confirmText:this.hass.localize(\"ui.dialogs.generic.ok\")}\n        </mwc-button>\n      </ha-dialog>\n    `}},{kind:\"method\",key:\"_dismiss\",value:function(){var i;null!==(i=this._params)&&void 0!==i&&i.cancel&&this._params.cancel(),this._close()}},{kind:\"method\",key:\"_confirm\",value:function(){var i;this._params.confirm&&this._params.confirm(null===(i=this._textField)||void 0===i?void 0:i.value);this._close()}},{kind:\"method\",key:\"_dialogClosed\",value:function(i){\"ignore\"!==i.detail.action&&this._dismiss()}},{kind:\"method\",key:\"_close\",value:function(){this._params&&(this._params=void 0,l(this,\"dialog-closed\",{dialog:this.localName}))}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return c`\n      :host([inert]) {\n        pointer-events: initial !important;\n        cursor: initial !important;\n      }\n      a {\n        color: var(--primary-color);\n      }\n      p {\n        margin: 0;\n        padding-top: 6px;\n        padding-bottom: 24px;\n        color: var(--primary-text-color);\n      }\n      .no-bottom-padding {\n        padding-bottom: 0;\n      }\n      .secondary {\n        color: var(--secondary-text-color);\n      }\n      ha-dialog {\n        --mdc-dialog-heading-ink-color: var(--primary-text-color);\n        --mdc-dialog-content-ink-color: var(--primary-text-color);\n        --justify-action-buttons: space-between;\n        /* Place above other dialogs */\n        --dialog-z-index: 104;\n      }\n    `}}]}}),a);\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.fbd8d2ba.js",
    "content": "import{u as t,v as e,M as i,_ as d,i as l,e as n,B as a,o,$ as r,r as c,n as s,Q as f,S as m,T as p,G as h,U as x,V as u,x as g,t as b,w as v,j as _,y,a as w,L as E,N as I}from\"./main-a0d7432d.js\";import{F as L}from\"./c.c176780d.js\";import{o as C}from\"./c.8e28b461.js\";var A={NOTCH_ELEMENT_SELECTOR:\".mdc-notched-outline__notch\"},T={NOTCH_ELEMENT_PADDING:8},O={NO_LABEL:\"mdc-notched-outline--no-label\",OUTLINE_NOTCHED:\"mdc-notched-outline--notched\",OUTLINE_UPGRADED:\"mdc-notched-outline--upgraded\"},k=function(i){function d(t){return i.call(this,e(e({},d.defaultAdapter),t))||this}return t(d,i),Object.defineProperty(d,\"strings\",{get:function(){return A},enumerable:!1,configurable:!0}),Object.defineProperty(d,\"cssClasses\",{get:function(){return O},enumerable:!1,configurable:!0}),Object.defineProperty(d,\"numbers\",{get:function(){return T},enumerable:!1,configurable:!0}),Object.defineProperty(d,\"defaultAdapter\",{get:function(){return{addClass:function(){},removeClass:function(){},setNotchWidthProperty:function(){},removeNotchWidthProperty:function(){}}},enumerable:!1,configurable:!0}),d.prototype.notch=function(t){var e=d.cssClasses.OUTLINE_NOTCHED;t>0&&(t+=T.NOTCH_ELEMENT_PADDING),this.adapter.setNotchWidthProperty(t),this.adapter.addClass(e)},d.prototype.closeNotch=function(){var t=d.cssClasses.OUTLINE_NOTCHED;this.adapter.removeClass(t),this.adapter.removeNotchWidthProperty()},d}(i);class R extends a{constructor(){super(...arguments),this.mdcFoundationClass=k,this.width=0,this.open=!1,this.lastOpen=this.open}createAdapter(){return{addClass:t=>this.mdcRoot.classList.add(t),removeClass:t=>this.mdcRoot.classList.remove(t),setNotchWidthProperty:t=>this.notchElement.style.setProperty(\"width\",`${t}px`),removeNotchWidthProperty:()=>this.notchElement.style.removeProperty(\"width\")}}openOrClose(t,e){this.mdcFoundation&&(t&&void 0!==e?this.mdcFoundation.notch(e):this.mdcFoundation.closeNotch())}render(){this.openOrClose(this.open,this.width);const t=o({\"mdc-notched-outline--notched\":this.open});return r`\n      <span class=\"mdc-notched-outline ${t}\">\n        <span class=\"mdc-notched-outline__leading\"></span>\n        <span class=\"mdc-notched-outline__notch\">\n          <slot></slot>\n        </span>\n        <span class=\"mdc-notched-outline__trailing\"></span>\n      </span>`}}d([l(\".mdc-notched-outline\")],R.prototype,\"mdcRoot\",void 0),d([n({type:Number})],R.prototype,\"width\",void 0),d([n({type:Boolean,reflect:!0})],R.prototype,\"open\",void 0),d([l(\".mdc-notched-outline__notch\")],R.prototype,\"notchElement\",void 0);const z=c`.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}[dir=rtl] .mdc-notched-outline,.mdc-notched-outline[dir=rtl]{text-align:right}.mdc-notched-outline__leading,.mdc-notched-outline__notch,.mdc-notched-outline__trailing{box-sizing:border-box;height:100%;border-top:1px solid;border-bottom:1px solid;pointer-events:none}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;width:12px}[dir=rtl] .mdc-notched-outline__leading,.mdc-notched-outline__leading[dir=rtl]{border-left:none;border-right:1px solid}.mdc-notched-outline__trailing{border-left:none;border-right:1px solid;flex-grow:1}[dir=rtl] .mdc-notched-outline__trailing,.mdc-notched-outline__trailing[dir=rtl]{border-left:1px solid;border-right:none}.mdc-notched-outline__notch{flex:0 0 auto;width:auto;max-width:calc(100% - 12px * 2)}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:calc(100% / 0.75)}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch,.mdc-notched-outline--notched .mdc-notched-outline__notch[dir=rtl]{padding-left:8px;padding-right:0}.mdc-notched-outline--no-label .mdc-notched-outline__notch{display:none}:host{display:block;position:absolute;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}[dir=rtl] :host,:host([dir=rtl]){text-align:right}::slotted(.mdc-floating-label){display:inline-block;position:relative;top:17px;bottom:auto;max-width:100%}::slotted(.mdc-floating-label--float-above){text-overflow:clip}.mdc-notched-outline--upgraded ::slotted(.mdc-floating-label--float-above){max-width:calc(100% / 0.75)}.mdc-notched-outline .mdc-notched-outline__leading{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;border-bottom-left-radius:var(--mdc-shape-small, 4px)}[dir=rtl] .mdc-notched-outline .mdc-notched-outline__leading,.mdc-notched-outline .mdc-notched-outline__leading[dir=rtl]{border-top-left-radius:0;border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:4px;border-bottom-right-radius:var(--mdc-shape-small, 4px);border-bottom-left-radius:0}@supports(top: max(0%)){.mdc-notched-outline .mdc-notched-outline__leading{width:max(12px, var(--mdc-shape-small, 4px))}}@supports(top: max(0%)){.mdc-notched-outline .mdc-notched-outline__notch{max-width:calc(100% - max(12px, var(--mdc-shape-small, 4px)) * 2)}}.mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:4px;border-bottom-right-radius:var(--mdc-shape-small, 4px);border-bottom-left-radius:0}[dir=rtl] .mdc-notched-outline .mdc-notched-outline__trailing,.mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl]{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;border-bottom-left-radius:var(--mdc-shape-small, 4px)}.mdc-notched-outline__leading,.mdc-notched-outline__notch,.mdc-notched-outline__trailing{border-color:var(--mdc-notched-outline-border-color, var(--mdc-theme-primary, #6200ee));border-width:1px;border-width:var(--mdc-notched-outline-stroke-width, 1px)}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0;padding-top:var(--mdc-notched-outline-notch-offset, 0)}`;let F=class extends R{};F.styles=[z],F=d([s(\"mwc-notched-outline\")],F);var V={LABEL_FLOAT_ABOVE:\"mdc-floating-label--float-above\",LABEL_REQUIRED:\"mdc-floating-label--required\",LABEL_SHAKE:\"mdc-floating-label--shake\",ROOT:\"mdc-floating-label\"},N=function(i){function d(t){var l=i.call(this,e(e({},d.defaultAdapter),t))||this;return l.shakeAnimationEndHandler=function(){l.handleShakeAnimationEnd()},l}return t(d,i),Object.defineProperty(d,\"cssClasses\",{get:function(){return V},enumerable:!1,configurable:!0}),Object.defineProperty(d,\"defaultAdapter\",{get:function(){return{addClass:function(){},removeClass:function(){},getWidth:function(){return 0},registerInteractionHandler:function(){},deregisterInteractionHandler:function(){}}},enumerable:!1,configurable:!0}),d.prototype.init=function(){this.adapter.registerInteractionHandler(\"animationend\",this.shakeAnimationEndHandler)},d.prototype.destroy=function(){this.adapter.deregisterInteractionHandler(\"animationend\",this.shakeAnimationEndHandler)},d.prototype.getWidth=function(){return this.adapter.getWidth()},d.prototype.shake=function(t){var e=d.cssClasses.LABEL_SHAKE;t?this.adapter.addClass(e):this.adapter.removeClass(e)},d.prototype.float=function(t){var e=d.cssClasses,i=e.LABEL_FLOAT_ABOVE,l=e.LABEL_SHAKE;t?this.adapter.addClass(i):(this.adapter.removeClass(i),this.adapter.removeClass(l))},d.prototype.setRequired=function(t){var e=d.cssClasses.LABEL_REQUIRED;t?this.adapter.addClass(e):this.adapter.removeClass(e)},d.prototype.handleShakeAnimationEnd=function(){var t=d.cssClasses.LABEL_SHAKE;this.adapter.removeClass(t)},d}(i);const H=f(class extends m{constructor(t){switch(super(t),this.foundation=null,this.previousPart=null,t.type){case p.ATTRIBUTE:case p.PROPERTY:break;default:throw new Error(\"FloatingLabel directive only support attribute and property parts\")}}update(t,[e]){if(t!==this.previousPart){this.foundation&&this.foundation.destroy(),this.previousPart=t;const e=t.element;e.classList.add(\"mdc-floating-label\");const i=(t=>({addClass:e=>t.classList.add(e),removeClass:e=>t.classList.remove(e),getWidth:()=>t.scrollWidth,registerInteractionHandler:(e,i)=>{t.addEventListener(e,i)},deregisterInteractionHandler:(e,i)=>{t.removeEventListener(e,i)}}))(e);this.foundation=new N(i),this.foundation.init()}return this.render(e)}render(t){return this.foundation}});var $={LINE_RIPPLE_ACTIVE:\"mdc-line-ripple--active\",LINE_RIPPLE_DEACTIVATING:\"mdc-line-ripple--deactivating\"},P=function(i){function d(t){var l=i.call(this,e(e({},d.defaultAdapter),t))||this;return l.transitionEndHandler=function(t){l.handleTransitionEnd(t)},l}return t(d,i),Object.defineProperty(d,\"cssClasses\",{get:function(){return $},enumerable:!1,configurable:!0}),Object.defineProperty(d,\"defaultAdapter\",{get:function(){return{addClass:function(){},removeClass:function(){},hasClass:function(){return!1},setStyle:function(){},registerEventHandler:function(){},deregisterEventHandler:function(){}}},enumerable:!1,configurable:!0}),d.prototype.init=function(){this.adapter.registerEventHandler(\"transitionend\",this.transitionEndHandler)},d.prototype.destroy=function(){this.adapter.deregisterEventHandler(\"transitionend\",this.transitionEndHandler)},d.prototype.activate=function(){this.adapter.removeClass($.LINE_RIPPLE_DEACTIVATING),this.adapter.addClass($.LINE_RIPPLE_ACTIVE)},d.prototype.setRippleCenter=function(t){this.adapter.setStyle(\"transform-origin\",t+\"px center\")},d.prototype.deactivate=function(){this.adapter.addClass($.LINE_RIPPLE_DEACTIVATING)},d.prototype.handleTransitionEnd=function(t){var e=this.adapter.hasClass($.LINE_RIPPLE_DEACTIVATING);\"opacity\"===t.propertyName&&e&&(this.adapter.removeClass($.LINE_RIPPLE_ACTIVE),this.adapter.removeClass($.LINE_RIPPLE_DEACTIVATING))},d}(i);const S=f(class extends m{constructor(t){switch(super(t),this.previousPart=null,this.foundation=null,t.type){case p.ATTRIBUTE:case p.PROPERTY:return;default:throw new Error(\"LineRipple only support attribute and property parts.\")}}update(t,e){if(this.previousPart!==t){this.foundation&&this.foundation.destroy(),this.previousPart=t;const e=t.element;e.classList.add(\"mdc-line-ripple\");const i=(t=>({addClass:e=>t.classList.add(e),removeClass:e=>t.classList.remove(e),hasClass:e=>t.classList.contains(e),setStyle:(e,i)=>t.style.setProperty(e,i),registerEventHandler:(e,i)=>{t.addEventListener(e,i)},deregisterEventHandler:(e,i)=>{t.removeEventListener(e,i)}}))(e);this.foundation=new P(i),this.foundation.init()}return this.render()}render(){return this.foundation}});var B={ARIA_CONTROLS:\"aria-controls\",ARIA_DESCRIBEDBY:\"aria-describedby\",INPUT_SELECTOR:\".mdc-text-field__input\",LABEL_SELECTOR:\".mdc-floating-label\",LEADING_ICON_SELECTOR:\".mdc-text-field__icon--leading\",LINE_RIPPLE_SELECTOR:\".mdc-line-ripple\",OUTLINE_SELECTOR:\".mdc-notched-outline\",PREFIX_SELECTOR:\".mdc-text-field__affix--prefix\",SUFFIX_SELECTOR:\".mdc-text-field__affix--suffix\",TRAILING_ICON_SELECTOR:\".mdc-text-field__icon--trailing\"},Y={DISABLED:\"mdc-text-field--disabled\",FOCUSED:\"mdc-text-field--focused\",HELPER_LINE:\"mdc-text-field-helper-line\",INVALID:\"mdc-text-field--invalid\",LABEL_FLOATING:\"mdc-text-field--label-floating\",NO_LABEL:\"mdc-text-field--no-label\",OUTLINED:\"mdc-text-field--outlined\",ROOT:\"mdc-text-field\",TEXTAREA:\"mdc-text-field--textarea\",WITH_LEADING_ICON:\"mdc-text-field--with-leading-icon\",WITH_TRAILING_ICON:\"mdc-text-field--with-trailing-icon\",WITH_INTERNAL_COUNTER:\"mdc-text-field--with-internal-counter\"},D={LABEL_SCALE:.75},X=[\"pattern\",\"min\",\"max\",\"required\",\"step\",\"minlength\",\"maxlength\"],U=[\"color\",\"date\",\"datetime-local\",\"month\",\"range\",\"time\",\"week\"],M=[\"mousedown\",\"touchstart\"],j=[\"click\",\"keydown\"],W=function(i){function d(t,l){void 0===l&&(l={});var n=i.call(this,e(e({},d.defaultAdapter),t))||this;return n.isFocused=!1,n.receivedUserInput=!1,n.valid=!0,n.useNativeValidation=!0,n.validateOnValueChange=!0,n.helperText=l.helperText,n.characterCounter=l.characterCounter,n.leadingIcon=l.leadingIcon,n.trailingIcon=l.trailingIcon,n.inputFocusHandler=function(){n.activateFocus()},n.inputBlurHandler=function(){n.deactivateFocus()},n.inputInputHandler=function(){n.handleInput()},n.setPointerXOffset=function(t){n.setTransformOrigin(t)},n.textFieldInteractionHandler=function(){n.handleTextFieldInteraction()},n.validationAttributeChangeHandler=function(t){n.handleValidationAttributeChange(t)},n}return t(d,i),Object.defineProperty(d,\"cssClasses\",{get:function(){return Y},enumerable:!1,configurable:!0}),Object.defineProperty(d,\"strings\",{get:function(){return B},enumerable:!1,configurable:!0}),Object.defineProperty(d,\"numbers\",{get:function(){return D},enumerable:!1,configurable:!0}),Object.defineProperty(d.prototype,\"shouldAlwaysFloat\",{get:function(){var t=this.getNativeInput().type;return U.indexOf(t)>=0},enumerable:!1,configurable:!0}),Object.defineProperty(d.prototype,\"shouldFloat\",{get:function(){return this.shouldAlwaysFloat||this.isFocused||!!this.getValue()||this.isBadInput()},enumerable:!1,configurable:!0}),Object.defineProperty(d.prototype,\"shouldShake\",{get:function(){return!this.isFocused&&!this.isValid()&&!!this.getValue()},enumerable:!1,configurable:!0}),Object.defineProperty(d,\"defaultAdapter\",{get:function(){return{addClass:function(){},removeClass:function(){},hasClass:function(){return!0},setInputAttr:function(){},removeInputAttr:function(){},registerTextFieldInteractionHandler:function(){},deregisterTextFieldInteractionHandler:function(){},registerInputInteractionHandler:function(){},deregisterInputInteractionHandler:function(){},registerValidationAttributeChangeHandler:function(){return new MutationObserver((function(){}))},deregisterValidationAttributeChangeHandler:function(){},getNativeInput:function(){return null},isFocused:function(){return!1},activateLineRipple:function(){},deactivateLineRipple:function(){},setLineRippleTransformOrigin:function(){},shakeLabel:function(){},floatLabel:function(){},setLabelRequired:function(){},hasLabel:function(){return!1},getLabelWidth:function(){return 0},hasOutline:function(){return!1},notchOutline:function(){},closeOutline:function(){}}},enumerable:!1,configurable:!0}),d.prototype.init=function(){var t,e,i,d;this.adapter.hasLabel()&&this.getNativeInput().required&&this.adapter.setLabelRequired(!0),this.adapter.isFocused()?this.inputFocusHandler():this.adapter.hasLabel()&&this.shouldFloat&&(this.notchOutline(!0),this.adapter.floatLabel(!0),this.styleFloating(!0)),this.adapter.registerInputInteractionHandler(\"focus\",this.inputFocusHandler),this.adapter.registerInputInteractionHandler(\"blur\",this.inputBlurHandler),this.adapter.registerInputInteractionHandler(\"input\",this.inputInputHandler);try{for(var l=h(M),n=l.next();!n.done;n=l.next()){var a=n.value;this.adapter.registerInputInteractionHandler(a,this.setPointerXOffset)}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=l.return)&&e.call(l)}finally{if(t)throw t.error}}try{for(var o=h(j),r=o.next();!r.done;r=o.next()){a=r.value;this.adapter.registerTextFieldInteractionHandler(a,this.textFieldInteractionHandler)}}catch(t){i={error:t}}finally{try{r&&!r.done&&(d=o.return)&&d.call(o)}finally{if(i)throw i.error}}this.validationObserver=this.adapter.registerValidationAttributeChangeHandler(this.validationAttributeChangeHandler),this.setcharacterCounter(this.getValue().length)},d.prototype.destroy=function(){var t,e,i,d;this.adapter.deregisterInputInteractionHandler(\"focus\",this.inputFocusHandler),this.adapter.deregisterInputInteractionHandler(\"blur\",this.inputBlurHandler),this.adapter.deregisterInputInteractionHandler(\"input\",this.inputInputHandler);try{for(var l=h(M),n=l.next();!n.done;n=l.next()){var a=n.value;this.adapter.deregisterInputInteractionHandler(a,this.setPointerXOffset)}}catch(e){t={error:e}}finally{try{n&&!n.done&&(e=l.return)&&e.call(l)}finally{if(t)throw t.error}}try{for(var o=h(j),r=o.next();!r.done;r=o.next()){a=r.value;this.adapter.deregisterTextFieldInteractionHandler(a,this.textFieldInteractionHandler)}}catch(t){i={error:t}}finally{try{r&&!r.done&&(d=o.return)&&d.call(o)}finally{if(i)throw i.error}}this.adapter.deregisterValidationAttributeChangeHandler(this.validationObserver)},d.prototype.handleTextFieldInteraction=function(){var t=this.adapter.getNativeInput();t&&t.disabled||(this.receivedUserInput=!0)},d.prototype.handleValidationAttributeChange=function(t){var e=this;t.some((function(t){return X.indexOf(t)>-1&&(e.styleValidity(!0),e.adapter.setLabelRequired(e.getNativeInput().required),!0)})),t.indexOf(\"maxlength\")>-1&&this.setcharacterCounter(this.getValue().length)},d.prototype.notchOutline=function(t){if(this.adapter.hasOutline()&&this.adapter.hasLabel())if(t){var e=this.adapter.getLabelWidth()*D.LABEL_SCALE;this.adapter.notchOutline(e)}else this.adapter.closeOutline()},d.prototype.activateFocus=function(){this.isFocused=!0,this.styleFocused(this.isFocused),this.adapter.activateLineRipple(),this.adapter.hasLabel()&&(this.notchOutline(this.shouldFloat),this.adapter.floatLabel(this.shouldFloat),this.styleFloating(this.shouldFloat),this.adapter.shakeLabel(this.shouldShake)),!this.helperText||!this.helperText.isPersistent()&&this.helperText.isValidation()&&this.valid||this.helperText.showToScreenReader()},d.prototype.setTransformOrigin=function(t){if(!this.isDisabled()&&!this.adapter.hasOutline()){var e=t.touches,i=e?e[0]:t,d=i.target.getBoundingClientRect(),l=i.clientX-d.left;this.adapter.setLineRippleTransformOrigin(l)}},d.prototype.handleInput=function(){this.autoCompleteFocus(),this.setcharacterCounter(this.getValue().length)},d.prototype.autoCompleteFocus=function(){this.receivedUserInput||this.activateFocus()},d.prototype.deactivateFocus=function(){this.isFocused=!1,this.adapter.deactivateLineRipple();var t=this.isValid();this.styleValidity(t),this.styleFocused(this.isFocused),this.adapter.hasLabel()&&(this.notchOutline(this.shouldFloat),this.adapter.floatLabel(this.shouldFloat),this.styleFloating(this.shouldFloat),this.adapter.shakeLabel(this.shouldShake)),this.shouldFloat||(this.receivedUserInput=!1)},d.prototype.getValue=function(){return this.getNativeInput().value},d.prototype.setValue=function(t){if(this.getValue()!==t&&(this.getNativeInput().value=t),this.setcharacterCounter(t.length),this.validateOnValueChange){var e=this.isValid();this.styleValidity(e)}this.adapter.hasLabel()&&(this.notchOutline(this.shouldFloat),this.adapter.floatLabel(this.shouldFloat),this.styleFloating(this.shouldFloat),this.validateOnValueChange&&this.adapter.shakeLabel(this.shouldShake))},d.prototype.isValid=function(){return this.useNativeValidation?this.isNativeInputValid():this.valid},d.prototype.setValid=function(t){this.valid=t,this.styleValidity(t);var e=!t&&!this.isFocused&&!!this.getValue();this.adapter.hasLabel()&&this.adapter.shakeLabel(e)},d.prototype.setValidateOnValueChange=function(t){this.validateOnValueChange=t},d.prototype.getValidateOnValueChange=function(){return this.validateOnValueChange},d.prototype.setUseNativeValidation=function(t){this.useNativeValidation=t},d.prototype.isDisabled=function(){return this.getNativeInput().disabled},d.prototype.setDisabled=function(t){this.getNativeInput().disabled=t,this.styleDisabled(t)},d.prototype.setHelperTextContent=function(t){this.helperText&&this.helperText.setContent(t)},d.prototype.setLeadingIconAriaLabel=function(t){this.leadingIcon&&this.leadingIcon.setAriaLabel(t)},d.prototype.setLeadingIconContent=function(t){this.leadingIcon&&this.leadingIcon.setContent(t)},d.prototype.setTrailingIconAriaLabel=function(t){this.trailingIcon&&this.trailingIcon.setAriaLabel(t)},d.prototype.setTrailingIconContent=function(t){this.trailingIcon&&this.trailingIcon.setContent(t)},d.prototype.setcharacterCounter=function(t){if(this.characterCounter){var e=this.getNativeInput().maxLength;if(-1===e)throw new Error(\"MDCTextFieldFoundation: Expected maxlength html property on text input or textarea.\");this.characterCounter.setCounterValue(t,e)}},d.prototype.isBadInput=function(){return this.getNativeInput().validity.badInput||!1},d.prototype.isNativeInputValid=function(){return this.getNativeInput().validity.valid},d.prototype.styleValidity=function(t){var e=d.cssClasses.INVALID;if(t?this.adapter.removeClass(e):this.adapter.addClass(e),this.helperText){if(this.helperText.setValidity(t),!this.helperText.isValidation())return;var i=this.helperText.isVisible(),l=this.helperText.getId();i&&l?this.adapter.setInputAttr(B.ARIA_DESCRIBEDBY,l):this.adapter.removeInputAttr(B.ARIA_DESCRIBEDBY)}},d.prototype.styleFocused=function(t){var e=d.cssClasses.FOCUSED;t?this.adapter.addClass(e):this.adapter.removeClass(e)},d.prototype.styleDisabled=function(t){var e=d.cssClasses,i=e.DISABLED,l=e.INVALID;t?(this.adapter.addClass(i),this.adapter.removeClass(l)):this.adapter.removeClass(i),this.leadingIcon&&this.leadingIcon.setDisabled(t),this.trailingIcon&&this.trailingIcon.setDisabled(t)},d.prototype.styleFloating=function(t){var e=d.cssClasses.LABEL_FLOATING;t?this.adapter.addClass(e):this.adapter.removeClass(e)},d.prototype.getNativeInput=function(){return(this.adapter?this.adapter.getNativeInput():null)||{disabled:!1,maxLength:-1,required:!1,type:\"input\",validity:{badInput:!1,valid:!0},value:\"\"}},d}(i);const{H:G}=x,q=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,K=(t,e)=>{var i,d;return void 0===e?void 0!==(null===(i=t)||void 0===i?void 0:i._$litType$):(null===(d=t)||void 0===d?void 0:d._$litType$)===e},Q=t=>void 0===t.strings,J=()=>document.createComment(\"\"),Z=(t,e,i)=>{var d;const l=t._$AA.parentNode,n=void 0===e?t._$AB:e._$AA;if(void 0===i){const e=l.insertBefore(J(),n),d=l.insertBefore(J(),n);i=new G(e,d,t,t.options)}else{const e=i._$AB.nextSibling,a=i._$AM,o=a!==t;if(o){let e;null===(d=i._$AQ)||void 0===d||d.call(i,t),i._$AM=t,void 0!==i._$AP&&(e=t._$AU)!==a._$AU&&i._$AP(e)}if(e!==n||o){let t=i._$AA;for(;t!==e;){const e=t.nextSibling;l.insertBefore(t,n),t=e}}}return i},tt=(t,e,i=t)=>(t._$AI(e,i),t),et={},it=(t,e=et)=>t._$AH=e,dt=t=>t._$AH,lt=t=>{var e;null===(e=t._$AP)||void 0===e||e.call(t,!1,!0);let i=t._$AA;const d=t._$AB.nextSibling;for(;i!==d;){const t=i.nextSibling;i.remove(),i=t}},nt=t=>{t._$AR()},at=f(class extends m{constructor(t){if(super(t),t.type!==p.PROPERTY&&t.type!==p.ATTRIBUTE&&t.type!==p.BOOLEAN_ATTRIBUTE)throw Error(\"The `live` directive is not allowed on child or event bindings\");if(!Q(t))throw Error(\"`live` bindings can only contain a single expression\")}render(t){return t}update(t,[e]){if(e===u||e===g)return e;const i=t.element,d=t.name;if(t.type===p.PROPERTY){if(e===i[d])return u}else if(t.type===p.BOOLEAN_ATTRIBUTE){if(!!e===i.hasAttribute(d))return u}else if(t.type===p.ATTRIBUTE&&i.getAttribute(d)===e+\"\")return u;return it(t),e}}),ot=[\"touchstart\",\"touchmove\",\"scroll\",\"mousewheel\"],rt=(t={})=>{const e={};for(const i in t)e[i]=t[i];return Object.assign({badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:!0,valueMissing:!1},e)};class ct extends L{constructor(){super(...arguments),this.mdcFoundationClass=W,this.value=\"\",this.type=\"text\",this.placeholder=\"\",this.label=\"\",this.icon=\"\",this.iconTrailing=\"\",this.disabled=!1,this.required=!1,this.minLength=-1,this.maxLength=-1,this.outlined=!1,this.helper=\"\",this.validateOnInitialRender=!1,this.validationMessage=\"\",this.autoValidate=!1,this.pattern=\"\",this.min=\"\",this.max=\"\",this.step=null,this.size=null,this.helperPersistent=!1,this.charCounter=!1,this.endAligned=!1,this.prefix=\"\",this.suffix=\"\",this.name=\"\",this.readOnly=!1,this.autocapitalize=\"\",this.outlineOpen=!1,this.outlineWidth=0,this.isUiValid=!0,this.focused=!1,this._validity=rt(),this.validityTransform=null}get validity(){return this._checkValidity(this.value),this._validity}get willValidate(){return this.formElement.willValidate}get selectionStart(){return this.formElement.selectionStart}get selectionEnd(){return this.formElement.selectionEnd}focus(){const t=new CustomEvent(\"focus\");this.formElement.dispatchEvent(t),this.formElement.focus()}blur(){const t=new CustomEvent(\"blur\");this.formElement.dispatchEvent(t),this.formElement.blur()}select(){this.formElement.select()}setSelectionRange(t,e,i){this.formElement.setSelectionRange(t,e,i)}update(t){t.has(\"autoValidate\")&&this.mdcFoundation&&this.mdcFoundation.setValidateOnValueChange(this.autoValidate),t.has(\"value\")&&\"string\"!=typeof this.value&&(this.value=`${this.value}`),super.update(t)}setFormData(t){this.name&&t.append(this.name,this.value)}render(){const t=this.charCounter&&-1!==this.maxLength,e=!!this.helper||!!this.validationMessage||t,i={\"mdc-text-field--disabled\":this.disabled,\"mdc-text-field--no-label\":!this.label,\"mdc-text-field--filled\":!this.outlined,\"mdc-text-field--outlined\":this.outlined,\"mdc-text-field--with-leading-icon\":this.icon,\"mdc-text-field--with-trailing-icon\":this.iconTrailing,\"mdc-text-field--end-aligned\":this.endAligned};return r`\n      <label class=\"mdc-text-field ${o(i)}\">\n        ${this.renderRipple()}\n        ${this.outlined?this.renderOutline():this.renderLabel()}\n        ${this.renderLeadingIcon()}\n        ${this.renderPrefix()}\n        ${this.renderInput(e)}\n        ${this.renderSuffix()}\n        ${this.renderTrailingIcon()}\n        ${this.renderLineRipple()}\n      </label>\n      ${this.renderHelperText(e,t)}\n    `}updated(t){t.has(\"value\")&&void 0!==t.get(\"value\")&&(this.mdcFoundation.setValue(this.value),this.autoValidate&&this.reportValidity())}renderRipple(){return this.outlined?\"\":r`\n      <span class=\"mdc-text-field__ripple\"></span>\n    `}renderOutline(){return this.outlined?r`\n      <mwc-notched-outline\n          .width=${this.outlineWidth}\n          .open=${this.outlineOpen}\n          class=\"mdc-notched-outline\">\n        ${this.renderLabel()}\n      </mwc-notched-outline>`:\"\"}renderLabel(){return this.label?r`\n      <span\n          .floatingLabelFoundation=${H(this.label)}\n          id=\"label\">${this.label}</span>\n    `:\"\"}renderLeadingIcon(){return this.icon?this.renderIcon(this.icon):\"\"}renderTrailingIcon(){return this.iconTrailing?this.renderIcon(this.iconTrailing,!0):\"\"}renderIcon(t,e=!1){return r`<i class=\"material-icons mdc-text-field__icon ${o({\"mdc-text-field__icon--leading\":!e,\"mdc-text-field__icon--trailing\":e})}\">${t}</i>`}renderPrefix(){return this.prefix?this.renderAffix(this.prefix):\"\"}renderSuffix(){return this.suffix?this.renderAffix(this.suffix,!0):\"\"}renderAffix(t,e=!1){return r`<span class=\"mdc-text-field__affix ${o({\"mdc-text-field__affix--prefix\":!e,\"mdc-text-field__affix--suffix\":e})}\">\n        ${t}</span>`}renderInput(t){const e=-1===this.minLength?void 0:this.minLength,i=-1===this.maxLength?void 0:this.maxLength,d=this.autocapitalize?this.autocapitalize:void 0,l=this.validationMessage&&!this.isUiValid,n=this.label?\"label\":void 0,a=t?\"helper-text\":void 0,o=this.focused||this.helperPersistent||l?\"helper-text\":void 0;return r`\n      <input\n          aria-labelledby=${_(n)}\n          aria-controls=\"${_(a)}\"\n          aria-describedby=\"${_(o)}\"\n          class=\"mdc-text-field__input\"\n          type=\"${this.type}\"\n          .value=\"${at(this.value)}\"\n          ?disabled=\"${this.disabled}\"\n          placeholder=\"${this.placeholder}\"\n          ?required=\"${this.required}\"\n          ?readonly=\"${this.readOnly}\"\n          minlength=\"${_(e)}\"\n          maxlength=\"${_(i)}\"\n          pattern=\"${_(this.pattern?this.pattern:void 0)}\"\n          min=\"${_(\"\"===this.min?void 0:this.min)}\"\n          max=\"${_(\"\"===this.max?void 0:this.max)}\"\n          step=\"${_(null===this.step?void 0:this.step)}\"\n          size=\"${_(null===this.size?void 0:this.size)}\"\n          name=\"${_(\"\"===this.name?void 0:this.name)}\"\n          inputmode=\"${_(this.inputMode)}\"\n          autocapitalize=\"${_(d)}\"\n          @input=\"${this.handleInputChange}\"\n          @focus=\"${this.onInputFocus}\"\n          @blur=\"${this.onInputBlur}\">`}renderLineRipple(){return this.outlined?\"\":r`\n      <span .lineRippleFoundation=${S()}></span>\n    `}renderHelperText(t,e){const i=this.validationMessage&&!this.isUiValid,d={\"mdc-text-field-helper-text--persistent\":this.helperPersistent,\"mdc-text-field-helper-text--validation-msg\":i},l=this.focused||this.helperPersistent||i?void 0:\"true\",n=i?this.validationMessage:this.helper;return t?r`\n      <div class=\"mdc-text-field-helper-line\">\n        <div id=\"helper-text\"\n             aria-hidden=\"${_(l)}\"\n             class=\"mdc-text-field-helper-text ${o(d)}\"\n             >${n}</div>\n        ${this.renderCharCounter(e)}\n      </div>`:\"\"}renderCharCounter(t){const e=Math.min(this.value.length,this.maxLength);return t?r`\n      <span class=\"mdc-text-field-character-counter\"\n            >${e} / ${this.maxLength}</span>`:\"\"}onInputFocus(){this.focused=!0}onInputBlur(){this.focused=!1,this.reportValidity()}checkValidity(){const t=this._checkValidity(this.value);if(!t){const t=new Event(\"invalid\",{bubbles:!1,cancelable:!0});this.dispatchEvent(t)}return t}reportValidity(){const t=this.checkValidity();return this.mdcFoundation.setValid(t),this.isUiValid=t,t}_checkValidity(t){const e=this.formElement.validity;let i=rt(e);if(this.validityTransform){const e=this.validityTransform(t,i);i=Object.assign(Object.assign({},i),e),this.mdcFoundation.setUseNativeValidation(!1)}else this.mdcFoundation.setUseNativeValidation(!0);return this._validity=i,this._validity.valid}setCustomValidity(t){this.validationMessage=t,this.formElement.setCustomValidity(t)}handleInputChange(){this.value=this.formElement.value}createAdapter(){return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},this.getRootAdapterMethods()),this.getInputAdapterMethods()),this.getLabelAdapterMethods()),this.getLineRippleAdapterMethods()),this.getOutlineAdapterMethods())}getRootAdapterMethods(){return Object.assign({registerTextFieldInteractionHandler:(t,e)=>this.addEventListener(t,e),deregisterTextFieldInteractionHandler:(t,e)=>this.removeEventListener(t,e),registerValidationAttributeChangeHandler:t=>{const e=new MutationObserver((e=>{t((t=>t.map((t=>t.attributeName)).filter((t=>t)))(e))}));return e.observe(this.formElement,{attributes:!0}),e},deregisterValidationAttributeChangeHandler:t=>t.disconnect()},y(this.mdcRoot))}getInputAdapterMethods(){return{getNativeInput:()=>this.formElement,setInputAttr:()=>{},removeInputAttr:()=>{},isFocused:()=>!!this.shadowRoot&&this.shadowRoot.activeElement===this.formElement,registerInputInteractionHandler:(t,e)=>this.formElement.addEventListener(t,e,{passive:t in ot}),deregisterInputInteractionHandler:(t,e)=>this.formElement.removeEventListener(t,e)}}getLabelAdapterMethods(){return{floatLabel:t=>this.labelElement&&this.labelElement.floatingLabelFoundation.float(t),getLabelWidth:()=>this.labelElement?this.labelElement.floatingLabelFoundation.getWidth():0,hasLabel:()=>Boolean(this.labelElement),shakeLabel:t=>this.labelElement&&this.labelElement.floatingLabelFoundation.shake(t),setLabelRequired:t=>{this.labelElement&&this.labelElement.floatingLabelFoundation.setRequired(t)}}}getLineRippleAdapterMethods(){return{activateLineRipple:()=>{this.lineRippleElement&&this.lineRippleElement.lineRippleFoundation.activate()},deactivateLineRipple:()=>{this.lineRippleElement&&this.lineRippleElement.lineRippleFoundation.deactivate()},setLineRippleTransformOrigin:t=>{this.lineRippleElement&&this.lineRippleElement.lineRippleFoundation.setRippleCenter(t)}}}async getUpdateComplete(){var t;const e=await super.getUpdateComplete();return await(null===(t=this.outlineElement)||void 0===t?void 0:t.updateComplete),e}firstUpdated(){var t;super.firstUpdated(),this.mdcFoundation.setValidateOnValueChange(this.autoValidate),this.validateOnInitialRender&&this.reportValidity(),null===(t=this.outlineElement)||void 0===t||t.updateComplete.then((()=>{var t;this.outlineWidth=(null===(t=this.labelElement)||void 0===t?void 0:t.floatingLabelFoundation.getWidth())||0}))}getOutlineAdapterMethods(){return{closeOutline:()=>this.outlineElement&&(this.outlineOpen=!1),hasOutline:()=>Boolean(this.outlineElement),notchOutline:t=>{this.outlineElement&&!this.outlineOpen&&(this.outlineWidth=t,this.outlineOpen=!0)}}}async layout(){await this.updateComplete;const t=this.labelElement;if(!t)return void(this.outlineOpen=!1);const e=!!this.label&&!!this.value;if(t.floatingLabelFoundation.float(e),!this.outlined)return;this.outlineOpen=e,await this.updateComplete;const i=t.floatingLabelFoundation.getWidth();this.outlineOpen&&(this.outlineWidth=i,await this.updateComplete)}}d([l(\".mdc-text-field\")],ct.prototype,\"mdcRoot\",void 0),d([l(\"input\")],ct.prototype,\"formElement\",void 0),d([l(\".mdc-floating-label\")],ct.prototype,\"labelElement\",void 0),d([l(\".mdc-line-ripple\")],ct.prototype,\"lineRippleElement\",void 0),d([l(\"mwc-notched-outline\")],ct.prototype,\"outlineElement\",void 0),d([l(\".mdc-notched-outline__notch\")],ct.prototype,\"notchElement\",void 0),d([n({type:String})],ct.prototype,\"value\",void 0),d([n({type:String})],ct.prototype,\"type\",void 0),d([n({type:String})],ct.prototype,\"placeholder\",void 0),d([n({type:String}),C((function(t,e){void 0!==e&&this.label!==e&&this.layout()}))],ct.prototype,\"label\",void 0),d([n({type:String})],ct.prototype,\"icon\",void 0),d([n({type:String})],ct.prototype,\"iconTrailing\",void 0),d([n({type:Boolean,reflect:!0})],ct.prototype,\"disabled\",void 0),d([n({type:Boolean})],ct.prototype,\"required\",void 0),d([n({type:Number})],ct.prototype,\"minLength\",void 0),d([n({type:Number})],ct.prototype,\"maxLength\",void 0),d([n({type:Boolean,reflect:!0}),C((function(t,e){void 0!==e&&this.outlined!==e&&this.layout()}))],ct.prototype,\"outlined\",void 0),d([n({type:String})],ct.prototype,\"helper\",void 0),d([n({type:Boolean})],ct.prototype,\"validateOnInitialRender\",void 0),d([n({type:String})],ct.prototype,\"validationMessage\",void 0),d([n({type:Boolean})],ct.prototype,\"autoValidate\",void 0),d([n({type:String})],ct.prototype,\"pattern\",void 0),d([n({type:String})],ct.prototype,\"min\",void 0),d([n({type:String})],ct.prototype,\"max\",void 0),d([n({type:String})],ct.prototype,\"step\",void 0),d([n({type:Number})],ct.prototype,\"size\",void 0),d([n({type:Boolean})],ct.prototype,\"helperPersistent\",void 0),d([n({type:Boolean})],ct.prototype,\"charCounter\",void 0),d([n({type:Boolean})],ct.prototype,\"endAligned\",void 0),d([n({type:String})],ct.prototype,\"prefix\",void 0),d([n({type:String})],ct.prototype,\"suffix\",void 0),d([n({type:String})],ct.prototype,\"name\",void 0),d([n({type:String})],ct.prototype,\"inputMode\",void 0),d([n({type:Boolean})],ct.prototype,\"readOnly\",void 0),d([n({type:String})],ct.prototype,\"autocapitalize\",void 0),d([b()],ct.prototype,\"outlineOpen\",void 0),d([b()],ct.prototype,\"outlineWidth\",void 0),d([b()],ct.prototype,\"isUiValid\",void 0),d([b()],ct.prototype,\"focused\",void 0),d([v({passive:!0})],ct.prototype,\"handleInputChange\",null);const st=c`.mdc-floating-label{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);position:absolute;left:0;-webkit-transform-origin:left top;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform;transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1),color 150ms cubic-bezier(0.4, 0, 0.2, 1)}[dir=rtl] .mdc-floating-label,.mdc-floating-label[dir=rtl]{right:0;left:auto;-webkit-transform-origin:right top;transform-origin:right top;text-align:right}.mdc-floating-label--float-above{cursor:auto}.mdc-floating-label--required::after{margin-left:1px;margin-right:0px;content:\"*\"}[dir=rtl] .mdc-floating-label--required::after,.mdc-floating-label--required[dir=rtl]::after{margin-left:0;margin-right:1px}.mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-standard 250ms 1}@keyframes mdc-floating-label-shake-float-above-standard{0%{transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(-106%) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75)}100%{transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75)}}.mdc-line-ripple::before,.mdc-line-ripple::after{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:\"\"}.mdc-line-ripple::before{border-bottom-width:1px;z-index:1}.mdc-line-ripple::after{transform:scaleX(0);border-bottom-width:2px;opacity:0;z-index:2}.mdc-line-ripple::after{transition:transform 180ms cubic-bezier(0.4, 0, 0.2, 1),opacity 180ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-line-ripple--active::after{transform:scaleX(1);opacity:1}.mdc-line-ripple--deactivating::after{opacity:0}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}[dir=rtl] .mdc-notched-outline,.mdc-notched-outline[dir=rtl]{text-align:right}.mdc-notched-outline__leading,.mdc-notched-outline__notch,.mdc-notched-outline__trailing{box-sizing:border-box;height:100%;border-top:1px solid;border-bottom:1px solid;pointer-events:none}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;width:12px}[dir=rtl] .mdc-notched-outline__leading,.mdc-notched-outline__leading[dir=rtl]{border-left:none;border-right:1px solid}.mdc-notched-outline__trailing{border-left:none;border-right:1px solid;flex-grow:1}[dir=rtl] .mdc-notched-outline__trailing,.mdc-notched-outline__trailing[dir=rtl]{border-left:1px solid;border-right:none}.mdc-notched-outline__notch{flex:0 0 auto;width:auto;max-width:calc(100% - 12px * 2)}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:calc(100% / 0.75)}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch,.mdc-notched-outline--notched .mdc-notched-outline__notch[dir=rtl]{padding-left:8px;padding-right:0}.mdc-notched-outline--no-label .mdc-notched-outline__notch{display:none}@keyframes mdc-ripple-fg-radius-in{from{animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1)}to{transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}}@keyframes mdc-ripple-fg-opacity-in{from{animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@keyframes mdc-ripple-fg-opacity-out{from{animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}.mdc-text-field--filled{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity}.mdc-text-field--filled .mdc-text-field__ripple::before,.mdc-text-field--filled .mdc-text-field__ripple::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:\"\"}.mdc-text-field--filled .mdc-text-field__ripple::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-text-field--filled .mdc-text-field__ripple::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple::before{transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple::after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-text-field--filled.mdc-ripple-upgraded--unbounded .mdc-text-field__ripple::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-text-field--filled.mdc-ripple-upgraded--foreground-activation .mdc-text-field__ripple::after{animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-text-field--filled.mdc-ripple-upgraded--foreground-deactivation .mdc-text-field__ripple::after{animation:mdc-ripple-fg-opacity-out 150ms;transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-text-field--filled .mdc-text-field__ripple::before,.mdc-text-field--filled .mdc-text-field__ripple::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-text-field--filled.mdc-ripple-upgraded .mdc-text-field__ripple::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-text-field__ripple{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.mdc-text-field{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:0;border-bottom-left-radius:0;display:inline-flex;align-items:baseline;padding:0 16px;position:relative;box-sizing:border-box;overflow:hidden;will-change:opacity,transform,color}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-floating-label{color:rgba(0, 0, 0, 0.6)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input{color:rgba(0, 0, 0, 0.87)}@media all{.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input::placeholder{color:rgba(0, 0, 0, 0.54)}}@media all{.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__input:-ms-input-placeholder{color:rgba(0, 0, 0, 0.54)}}.mdc-text-field .mdc-text-field__input{caret-color:#6200ee;caret-color:var(--mdc-theme-primary, #6200ee)}.mdc-text-field:not(.mdc-text-field--disabled)+.mdc-text-field-helper-line .mdc-text-field-helper-text{color:rgba(0, 0, 0, 0.6)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field-character-counter,.mdc-text-field:not(.mdc-text-field--disabled)+.mdc-text-field-helper-line .mdc-text-field-character-counter{color:rgba(0, 0, 0, 0.6)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__icon--leading{color:rgba(0, 0, 0, 0.54)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__icon--trailing{color:rgba(0, 0, 0, 0.54)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__affix--prefix{color:rgba(0, 0, 0, 0.6)}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-text-field__affix--suffix{color:rgba(0, 0, 0, 0.6)}.mdc-text-field .mdc-floating-label{top:50%;transform:translateY(-50%);pointer-events:none}.mdc-text-field__input{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);height:28px;transition:opacity 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);width:100%;min-width:0;border:none;border-radius:0;background:none;appearance:none;padding:0}.mdc-text-field__input::-ms-clear{display:none}.mdc-text-field__input::-webkit-calendar-picker-indicator{display:none}.mdc-text-field__input:focus{outline:none}.mdc-text-field__input:invalid{box-shadow:none}@media all{.mdc-text-field__input::placeholder{transition:opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0}}@media all{.mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0}}@media all{.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mdc-text-field--focused .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}}@media all{.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}}.mdc-text-field__affix{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);height:28px;transition:opacity 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1);opacity:0;white-space:nowrap}.mdc-text-field--label-floating .mdc-text-field__affix,.mdc-text-field--no-label .mdc-text-field__affix{opacity:1}@supports(-webkit-hyphens: none){.mdc-text-field--outlined .mdc-text-field__affix{align-items:center;align-self:center;display:inline-flex;height:100%}}.mdc-text-field__affix--prefix{padding-left:0;padding-right:2px}[dir=rtl] .mdc-text-field__affix--prefix,.mdc-text-field__affix--prefix[dir=rtl]{padding-left:2px;padding-right:0}.mdc-text-field--end-aligned .mdc-text-field__affix--prefix{padding-left:0;padding-right:12px}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--prefix,.mdc-text-field--end-aligned .mdc-text-field__affix--prefix[dir=rtl]{padding-left:12px;padding-right:0}.mdc-text-field__affix--suffix{padding-left:12px;padding-right:0}[dir=rtl] .mdc-text-field__affix--suffix,.mdc-text-field__affix--suffix[dir=rtl]{padding-left:0;padding-right:12px}.mdc-text-field--end-aligned .mdc-text-field__affix--suffix{padding-left:2px;padding-right:0}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--suffix,.mdc-text-field--end-aligned .mdc-text-field__affix--suffix[dir=rtl]{padding-left:0;padding-right:2px}.mdc-text-field--filled{height:56px}.mdc-text-field--filled .mdc-text-field__ripple::before,.mdc-text-field--filled .mdc-text-field__ripple::after{background-color:rgba(0, 0, 0, 0.87);background-color:var(--mdc-ripple-color, rgba(0, 0, 0, 0.87))}.mdc-text-field--filled:hover .mdc-text-field__ripple::before,.mdc-text-field--filled.mdc-ripple-surface--hover .mdc-text-field__ripple::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-text-field--filled.mdc-ripple-upgraded--background-focused .mdc-text-field__ripple::before,.mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-text-field--filled::before{display:inline-block;width:0;height:40px;content:\"\";vertical-align:0}.mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:whitesmoke}.mdc-text-field--filled:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:rgba(0, 0, 0, 0.42)}.mdc-text-field--filled:not(.mdc-text-field--disabled):hover .mdc-line-ripple::before{border-bottom-color:rgba(0, 0, 0, 0.87)}.mdc-text-field--filled .mdc-line-ripple::after{border-bottom-color:#6200ee;border-bottom-color:var(--mdc-theme-primary, #6200ee)}.mdc-text-field--filled .mdc-floating-label{left:16px;right:initial}[dir=rtl] .mdc-text-field--filled .mdc-floating-label,.mdc-text-field--filled .mdc-floating-label[dir=rtl]{left:initial;right:16px}.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{height:100%}.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label{display:none}.mdc-text-field--filled.mdc-text-field--no-label::before{display:none}@supports(-webkit-hyphens: none){.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__affix{align-items:center;align-self:center;display:inline-flex;height:100%}}.mdc-text-field--outlined{height:56px;overflow:visible}.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) scale(1)}.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) scale(0.75)}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--outlined .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-text-field-outlined 250ms 1}@keyframes mdc-floating-label-shake-float-above-text-field-outlined{0%{transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75)}100%{transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}}.mdc-text-field--outlined .mdc-text-field__input{height:100%}.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing{border-color:rgba(0, 0, 0, 0.38)}.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:rgba(0, 0, 0, 0.87)}.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--outlined:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:#6200ee;border-color:var(--mdc-theme-primary, #6200ee)}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;border-bottom-left-radius:var(--mdc-shape-small, 4px)}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl]{border-top-left-radius:0;border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:4px;border-bottom-right-radius:var(--mdc-shape-small, 4px);border-bottom-left-radius:0}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px, var(--mdc-shape-small, 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:calc(100% - max(12px, var(--mdc-shape-small, 4px)) * 2)}}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:4px;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:4px;border-bottom-right-radius:var(--mdc-shape-small, 4px);border-bottom-left-radius:0}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl]{border-top-left-radius:4px;border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:4px;border-bottom-left-radius:var(--mdc-shape-small, 4px)}@supports(top: max(0%)){.mdc-text-field--outlined{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined{padding-right:max(16px, var(--mdc-shape-small, 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined+.mdc-text-field-helper-line{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined+.mdc-text-field-helper-line{padding-right:max(16px, var(--mdc-shape-small, 4px))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-left:0}@supports(top: max(0%)){.mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-right:max(16px, var(--mdc-shape-small, 4px))}}[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon,.mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl]{padding-right:0}@supports(top: max(0%)){[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon,.mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl]{padding-left:max(16px, var(--mdc-shape-small, 4px))}}.mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-right:0}@supports(top: max(0%)){.mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon,.mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0}@supports(top: max(0%)){[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon,.mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl]{padding-right:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-text-field--outlined .mdc-text-field__ripple::before,.mdc-text-field--outlined .mdc-text-field__ripple::after{content:none}.mdc-text-field--outlined .mdc-floating-label{left:4px;right:initial}[dir=rtl] .mdc-text-field--outlined .mdc-floating-label,.mdc-text-field--outlined .mdc-floating-label[dir=rtl]{left:initial;right:4px}.mdc-text-field--outlined .mdc-text-field__input{display:flex;border:none !important;background-color:transparent}.mdc-text-field--outlined .mdc-notched-outline{z-index:1}.mdc-text-field--textarea{flex-direction:column;align-items:center;width:auto;height:auto;padding:0;transition:none}.mdc-text-field--textarea .mdc-floating-label{top:19px}.mdc-text-field--textarea .mdc-floating-label:not(.mdc-floating-label--float-above){transform:none}.mdc-text-field--textarea .mdc-text-field__input{flex-grow:1;height:auto;min-height:1.5rem;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;resize:none;padding:0 16px;line-height:1.5rem}.mdc-text-field--textarea.mdc-text-field--filled::before{display:none}.mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-10.25px) scale(0.75)}.mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-textarea-filled 250ms 1}@keyframes mdc-floating-label-shake-float-above-textarea-filled{0%{transform:translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75)}100%{transform:translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75)}}.mdc-text-field--textarea.mdc-text-field--filled .mdc-text-field__input{margin-top:23px;margin-bottom:9px}.mdc-text-field--textarea.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{margin-top:16px;margin-bottom:16px}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-27.25px) scale(1)}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-24.75px) scale(0.75)}.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-textarea-outlined 250ms 1}@keyframes mdc-floating-label-shake-float-above-textarea-outlined{0%{transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75)}100%{transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75)}}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-text-field__input{margin-top:16px;margin-bottom:16px}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label{top:18px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field__input{margin-bottom:2px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter{align-self:flex-end;padding:0 16px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter::after{display:inline-block;width:0;height:16px;content:\"\";vertical-align:-16px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter::before{display:none}.mdc-text-field__resizer{align-self:stretch;display:inline-flex;flex-direction:column;flex-grow:1;max-height:100%;max-width:100%;min-height:56px;min-width:fit-content;min-width:-moz-available;min-width:-webkit-fill-available;overflow:hidden;resize:both}.mdc-text-field--filled .mdc-text-field__resizer{transform:translateY(-1px)}.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field__input,.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field-character-counter{transform:translateY(1px)}.mdc-text-field--outlined .mdc-text-field__resizer{transform:translateX(-1px) translateY(-1px)}[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer,.mdc-text-field--outlined .mdc-text-field__resizer[dir=rtl]{transform:translateX(1px) translateY(-1px)}.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter{transform:translateX(1px) translateY(1px)}[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input,[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input[dir=rtl],.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter[dir=rtl]{transform:translateX(-1px) translateY(1px)}.mdc-text-field--with-leading-icon{padding-left:0;padding-right:16px}[dir=rtl] .mdc-text-field--with-leading-icon,.mdc-text-field--with-leading-icon[dir=rtl]{padding-left:16px;padding-right:0}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 48px);left:48px;right:initial}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label,.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label[dir=rtl]{left:initial;right:48px}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 64px / 0.75)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label{left:36px;right:initial}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label[dir=rtl]{left:initial;right:36px}.mdc-text-field--with-leading-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) translateX(-32px) scale(1)}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above[dir=rtl]{transform:translateY(-37.25px) translateX(32px) scale(1)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) translateX(-32px) scale(0.75)}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl],.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl]{transform:translateY(-34.75px) translateX(32px) scale(0.75)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1}@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon{0%{transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75)}100%{transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake,.mdc-text-field--with-leading-icon.mdc-text-field--outlined[dir=rtl] .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1}@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon-rtl{0%{transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75)}100%{transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}}.mdc-text-field--with-trailing-icon{padding-left:16px;padding-right:0}[dir=rtl] .mdc-text-field--with-trailing-icon,.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0;padding-right:16px}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 64px)}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 64px / 0.75)}.mdc-text-field--with-trailing-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 96px)}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 96px / 0.75)}.mdc-text-field-helper-line{display:flex;justify-content:space-between;box-sizing:border-box}.mdc-text-field+.mdc-text-field-helper-line{padding-right:16px;padding-left:16px}.mdc-form-field>.mdc-text-field+label{align-self:flex-start}.mdc-text-field--focused:not(.mdc-text-field--disabled) .mdc-floating-label{color:rgba(98, 0, 238, 0.87)}.mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--focused .mdc-notched-outline__trailing{border-width:2px}.mdc-text-field--focused+.mdc-text-field-helper-line .mdc-text-field-helper-text:not(.mdc-text-field-helper-text--validation-msg){opacity:1}.mdc-text-field--focused.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-text-field--focused.mdc-text-field--outlined.mdc-text-field--textarea .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0}.mdc-text-field--invalid:not(.mdc-text-field--disabled):hover .mdc-line-ripple::before{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::after{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-floating-label{color:#b00020;color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--invalid+.mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg{color:#b00020;color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid .mdc-text-field__input{caret-color:#b00020;caret-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-text-field__icon--trailing{color:#b00020;color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__leading,.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__notch,.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__notch,.mdc-text-field--invalid:not(.mdc-text-field--disabled):not(.mdc-text-field--focused):hover .mdc-notched-outline .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--invalid:not(.mdc-text-field--disabled).mdc-text-field--focused .mdc-notched-outline__trailing{border-color:#b00020;border-color:var(--mdc-theme-error, #b00020)}.mdc-text-field--invalid+.mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg{opacity:1}.mdc-text-field--disabled{pointer-events:none}.mdc-text-field--disabled .mdc-text-field__input{color:rgba(0, 0, 0, 0.38)}@media all{.mdc-text-field--disabled .mdc-text-field__input::placeholder{color:rgba(0, 0, 0, 0.38)}}@media all{.mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder{color:rgba(0, 0, 0, 0.38)}}.mdc-text-field--disabled .mdc-floating-label{color:rgba(0, 0, 0, 0.38)}.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-helper-text{color:rgba(0, 0, 0, 0.38)}.mdc-text-field--disabled .mdc-text-field-character-counter,.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-character-counter{color:rgba(0, 0, 0, 0.38)}.mdc-text-field--disabled .mdc-text-field__icon--leading{color:rgba(0, 0, 0, 0.3)}.mdc-text-field--disabled .mdc-text-field__icon--trailing{color:rgba(0, 0, 0, 0.3)}.mdc-text-field--disabled .mdc-text-field__affix--prefix{color:rgba(0, 0, 0, 0.38)}.mdc-text-field--disabled .mdc-text-field__affix--suffix{color:rgba(0, 0, 0, 0.38)}.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:rgba(0, 0, 0, 0.06)}.mdc-text-field--disabled .mdc-notched-outline__leading,.mdc-text-field--disabled .mdc-notched-outline__notch,.mdc-text-field--disabled .mdc-notched-outline__trailing{border-color:rgba(0, 0, 0, 0.06)}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field__input::placeholder{color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field__input:-ms-input-placeholder{color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-floating-label{color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-helper-text{color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field-character-counter,.mdc-text-field--disabled+.mdc-text-field-helper-line .mdc-text-field-character-counter{color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field__icon--leading{color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field__icon--trailing{color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field__affix--prefix{color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-text-field__affix--suffix{color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:GrayText}}@media screen and (forced-colors: active),(-ms-high-contrast: active){.mdc-text-field--disabled .mdc-notched-outline__leading,.mdc-text-field--disabled .mdc-notched-outline__notch,.mdc-text-field--disabled .mdc-notched-outline__trailing{border-color:GrayText}}@media screen and (forced-colors: active){.mdc-text-field--disabled .mdc-text-field__input{background-color:Window}.mdc-text-field--disabled .mdc-floating-label{z-index:1}}.mdc-text-field--disabled .mdc-floating-label{cursor:default}.mdc-text-field--disabled.mdc-text-field--filled{background-color:#fafafa}.mdc-text-field--disabled.mdc-text-field--filled .mdc-text-field__ripple{display:none}.mdc-text-field--disabled .mdc-text-field__input{pointer-events:auto}.mdc-text-field--end-aligned .mdc-text-field__input{text-align:right}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__input,.mdc-text-field--end-aligned .mdc-text-field__input[dir=rtl]{text-align:left}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input,[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix{direction:ltr}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix{padding-left:0;padding-right:2px}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix{padding-left:12px;padding-right:0}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--leading,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--leading{order:1}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix{order:2}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input{order:3}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix{order:4}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--trailing,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--trailing{order:5}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__input,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__input{text-align:right}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--prefix{padding-right:12px}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--suffix{padding-left:2px}.mdc-text-field-helper-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.75rem;font-size:var(--mdc-typography-caption-font-size, 0.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:0.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, 0.0333333333em);text-decoration:inherit;text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform, inherit);display:block;margin-top:0;line-height:normal;margin:0;opacity:0;will-change:opacity;transition:opacity 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-text-field-helper-text::before{display:inline-block;width:0;height:16px;content:\"\";vertical-align:0}.mdc-text-field-helper-text--persistent{transition:none;opacity:1;will-change:initial}.mdc-text-field-character-counter{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.75rem;font-size:var(--mdc-typography-caption-font-size, 0.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:0.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, 0.0333333333em);text-decoration:inherit;text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform, inherit);display:block;margin-top:0;line-height:normal;margin-left:auto;margin-right:0;padding-left:16px;padding-right:0;white-space:nowrap}.mdc-text-field-character-counter::before{display:inline-block;width:0;height:16px;content:\"\";vertical-align:0}[dir=rtl] .mdc-text-field-character-counter,.mdc-text-field-character-counter[dir=rtl]{margin-left:0;margin-right:auto}[dir=rtl] .mdc-text-field-character-counter,.mdc-text-field-character-counter[dir=rtl]{padding-left:0;padding-right:16px}.mdc-text-field__icon{align-self:center;cursor:pointer}.mdc-text-field__icon:not([tabindex]),.mdc-text-field__icon[tabindex=\"-1\"]{cursor:default;pointer-events:none}.mdc-text-field__icon svg{display:block}.mdc-text-field__icon--leading{margin-left:16px;margin-right:8px}[dir=rtl] .mdc-text-field__icon--leading,.mdc-text-field__icon--leading[dir=rtl]{margin-left:8px;margin-right:16px}.mdc-text-field__icon--trailing{padding:12px;margin-left:0px;margin-right:0px}[dir=rtl] .mdc-text-field__icon--trailing,.mdc-text-field__icon--trailing[dir=rtl]{margin-left:0px;margin-right:0px}.material-icons{font-family:var(--mdc-icon-font, \"Material Icons\");font-weight:normal;font-style:normal;font-size:var(--mdc-icon-size, 24px);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}:host{display:inline-flex;flex-direction:column;outline:none}.mdc-text-field{width:100%}.mdc-text-field:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:rgba(0, 0, 0, 0.42);border-bottom-color:var(--mdc-text-field-idle-line-color, rgba(0, 0, 0, 0.42))}.mdc-text-field:not(.mdc-text-field--disabled):hover .mdc-line-ripple::before{border-bottom-color:rgba(0, 0, 0, 0.87);border-bottom-color:var(--mdc-text-field-hover-line-color, rgba(0, 0, 0, 0.87))}.mdc-text-field.mdc-text-field--disabled .mdc-line-ripple::before{border-bottom-color:rgba(0, 0, 0, 0.06);border-bottom-color:var(--mdc-text-field-disabled-line-color, rgba(0, 0, 0, 0.06))}.mdc-text-field.mdc-text-field--invalid:not(.mdc-text-field--disabled) .mdc-line-ripple::before{border-bottom-color:#b00020;border-bottom-color:var(--mdc-theme-error, #b00020)}.mdc-text-field__input{direction:inherit}mwc-notched-outline{--mdc-notched-outline-border-color: var( --mdc-text-field-outlined-idle-border-color, rgba(0, 0, 0, 0.38) )}:host(:not([disabled]):hover) :not(.mdc-text-field--invalid):not(.mdc-text-field--focused) mwc-notched-outline{--mdc-notched-outline-border-color: var( --mdc-text-field-outlined-hover-border-color, rgba(0, 0, 0, 0.87) )}:host(:not([disabled])) .mdc-text-field:not(.mdc-text-field--outlined){background-color:var(--mdc-text-field-fill-color, whitesmoke)}:host(:not([disabled])) .mdc-text-field.mdc-text-field--invalid mwc-notched-outline{--mdc-notched-outline-border-color: var( --mdc-text-field-error-color, var(--mdc-theme-error, #b00020) )}:host(:not([disabled])) .mdc-text-field.mdc-text-field--invalid+.mdc-text-field-helper-line .mdc-text-field-character-counter,:host(:not([disabled])) .mdc-text-field.mdc-text-field--invalid .mdc-text-field__icon{color:var(--mdc-text-field-error-color, var(--mdc-theme-error, #b00020))}:host(:not([disabled])) .mdc-text-field:not(.mdc-text-field--invalid):not(.mdc-text-field--focused) .mdc-floating-label,:host(:not([disabled])) .mdc-text-field:not(.mdc-text-field--invalid):not(.mdc-text-field--focused) .mdc-floating-label::after{color:var(--mdc-text-field-label-ink-color, rgba(0, 0, 0, 0.6))}:host(:not([disabled])) .mdc-text-field.mdc-text-field--focused mwc-notched-outline{--mdc-notched-outline-stroke-width: 2px}:host(:not([disabled])) .mdc-text-field.mdc-text-field--focused:not(.mdc-text-field--invalid) mwc-notched-outline{--mdc-notched-outline-border-color: var( --mdc-text-field-focused-label-color, var(--mdc-theme-primary, rgba(98, 0, 238, 0.87)) )}:host(:not([disabled])) .mdc-text-field.mdc-text-field--focused:not(.mdc-text-field--invalid) .mdc-floating-label{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}:host(:not([disabled])) .mdc-text-field .mdc-text-field__input{color:var(--mdc-text-field-ink-color, rgba(0, 0, 0, 0.87))}:host(:not([disabled])) .mdc-text-field .mdc-text-field__input::placeholder{color:var(--mdc-text-field-label-ink-color, rgba(0, 0, 0, 0.6))}:host(:not([disabled])) .mdc-text-field-helper-line .mdc-text-field-helper-text:not(.mdc-text-field-helper-text--validation-msg),:host(:not([disabled])) .mdc-text-field-helper-line:not(.mdc-text-field--invalid) .mdc-text-field-character-counter{color:var(--mdc-text-field-label-ink-color, rgba(0, 0, 0, 0.6))}:host([disabled]) .mdc-text-field:not(.mdc-text-field--outlined){background-color:var(--mdc-text-field-disabled-fill-color, #fafafa)}:host([disabled]) .mdc-text-field.mdc-text-field--outlined mwc-notched-outline{--mdc-notched-outline-border-color: var( --mdc-text-field-outlined-disabled-border-color, rgba(0, 0, 0, 0.06) )}:host([disabled]) .mdc-text-field:not(.mdc-text-field--invalid):not(.mdc-text-field--focused) .mdc-floating-label,:host([disabled]) .mdc-text-field:not(.mdc-text-field--invalid):not(.mdc-text-field--focused) .mdc-floating-label::after{color:var(--mdc-text-field-disabled-ink-color, rgba(0, 0, 0, 0.38))}:host([disabled]) .mdc-text-field .mdc-text-field__input,:host([disabled]) .mdc-text-field .mdc-text-field__input::placeholder{color:var(--mdc-text-field-disabled-ink-color, rgba(0, 0, 0, 0.38))}:host([disabled]) .mdc-text-field-helper-line .mdc-text-field-helper-text,:host([disabled]) .mdc-text-field-helper-line .mdc-text-field-character-counter{color:var(--mdc-text-field-disabled-ink-color, rgba(0, 0, 0, 0.38))}`;w([s(\"ha-textfield\")],(function(t,e){class i extends e{constructor(...e){super(...e),t(this)}}return{F:i,d:[{kind:\"field\",decorators:[n({type:Boolean})],key:\"invalid\",value:void 0},{kind:\"field\",decorators:[n({attribute:\"error-message\"})],key:\"errorMessage\",value:void 0},{kind:\"field\",decorators:[n({type:Boolean})],key:\"icon\",value:void 0},{kind:\"field\",decorators:[n({type:Boolean})],key:\"iconTrailing\",value:void 0},{kind:\"method\",key:\"updated\",value:function(t){E(I(i.prototype),\"updated\",this).call(this,t),(t.has(\"invalid\")&&(this.invalid||void 0!==t.get(\"invalid\"))||t.has(\"errorMessage\"))&&(this.setCustomValidity(this.invalid?this.errorMessage||\"Invalid\":\"\"),this.reportValidity())}},{kind:\"method\",key:\"renderIcon\",value:function(t,e=!1){const i=e?\"trailing\":\"leading\";return r`\n      <span\n        class=\"mdc-text-field__icon mdc-text-field__icon--${i}\"\n        tabindex=${e?1:-1}\n      >\n        <slot name=\"${i}Icon\"></slot>\n      </span>\n    `}},{kind:\"field\",static:!0,key:\"styles\",value:()=>[st,c`\n      .mdc-text-field__input {\n        width: var(--ha-textfield-input-width, 100%);\n      }\n      .mdc-text-field:not(.mdc-text-field--with-leading-icon) {\n        padding: var(--text-field-padding, 0px 16px);\n      }\n      .mdc-text-field__affix--suffix {\n        padding-left: var(--text-field-suffix-padding-left, 12px);\n        padding-right: var(--text-field-suffix-padding-right, 0px);\n        padding-inline-start: var(--text-field-suffix-padding-left, 12px);\n        padding-inline-end: var(--text-field-suffix-padding-right, 0px);\n        direction: var(--direction);\n      }\n      .mdc-text-field--with-leading-icon {\n        padding-inline-start: var(--text-field-suffix-padding-left, 0px);\n        padding-inline-end: var(--text-field-suffix-padding-right, 16px);\n        direction: var(--direction);\n      }\n\n      .mdc-text-field:not(.mdc-text-field--disabled)\n        .mdc-text-field__affix--suffix {\n        color: var(--secondary-text-color);\n      }\n\n      .mdc-text-field__icon {\n        color: var(--secondary-text-color);\n      }\n\n      .mdc-text-field__icon--leading {\n        margin-inline-start: 16px;\n        margin-inline-end: 8px;\n        direction: var(--direction);\n      }\n\n      input {\n        text-align: var(--text-field-text-align);\n      }\n\n      /* Chrome, Safari, Edge, Opera */\n      :host([no-spinner]) input::-webkit-outer-spin-button,\n      :host([no-spinner]) input::-webkit-inner-spin-button {\n        -webkit-appearance: none;\n        margin: 0;\n      }\n\n      /* Firefox */\n      :host([no-spinner]) input[type=\"number\"] {\n        -moz-appearance: textfield;\n      }\n\n      .mdc-text-field__ripple {\n        overflow: hidden;\n      }\n\n      .mdc-text-field {\n        overflow: var(--text-field-overflow);\n      }\n\n      .mdc-floating-label {\n        inset-inline-start: 16px !important;\n        inset-inline-end: initial !important;\n        transform-origin: var(--float-start);\n        direction: var(--direction);\n        transform-origin: var(--float-start);\n      }\n\n      .mdc-text-field--with-leading-icon.mdc-text-field--filled\n        .mdc-floating-label {\n        max-width: calc(100% - 48px);\n        inset-inline-start: 48px !important;\n        inset-inline-end: initial !important;\n        direction: var(--direction);\n      }\n\n      .mdc-text-field__input[type=\"number\"] {\n        direction: var(--direction);\n      }\n    `,\"rtl\"===document.dir?c`\n          .mdc-text-field__affix--suffix,\n          .mdc-text-field--with-leading-icon,\n          .mdc-text-field__icon--leading,\n          .mdc-floating-label,\n          .mdc-text-field--with-leading-icon.mdc-text-field--filled\n            .mdc-floating-label,\n          .mdc-text-field__input[type=\"number\"] {\n            direction: rtl;\n          }\n        `:c``]}]}}),ct);export{ct as T,at as a,dt as b,it as c,tt as d,H as f,S as l,lt as m,nt as p,Q as r,st as s,q as t,Z as u,K as v};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/c.fe747ba2.js",
    "content": "const s=async(s,o)=>s.connection.sendMessagePromise({type:\"hacs/repository/info\",repository_id:o}),o=async(s,o,e)=>s.connection.sendMessagePromise({type:\"hacs/repository/download\",repository:o,version:e}),e=async(s,o,e)=>s.connection.sendMessagePromise({type:\"hacs/repository/version\",repository:o,version:e});export{o as a,s as f,e as r};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/entrypoint.js",
    "content": "\ntry {\n  new Function(\"import('/hacsfiles/frontend/main-a0d7432d.js')\")();\n} catch (err) {\n  var el = document.createElement('script');\n  el.src = '/hacsfiles/frontend/main-a0d7432d.js';\n  el.type = 'module';\n  document.body.appendChild(el);\n}\n  "
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/main-a0d7432d.js",
    "content": "function e(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function t(e){return t=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},t(e)}function o(e,o){for(;!Object.prototype.hasOwnProperty.call(e,o)&&null!==(e=t(e)););return e}function r(){return r=\"undefined\"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,r){var i=o(e,t);if(i){var n=Object.getOwnPropertyDescriptor(i,t);return n.get?n.get.call(arguments.length<3?e:r):n.value}},r.apply(this,arguments)}function i(e){return function(e){if(Array.isArray(e))return e}(e)||function(e){if(\"undefined\"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e[\"@@iterator\"])return Array.from(e)}(e)||function(e,t){if(!e)return;if(\"string\"==typeof e)return n(e,t);var o=Object.prototype.toString.call(e).slice(8,-1);\"Object\"===o&&e.constructor&&(o=e.constructor.name);if(\"Map\"===o||\"Set\"===o)return Array.from(e);if(\"Arguments\"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o))return n(e,t)}(e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var o=0,r=new Array(t);o<t;o++)r[o]=e[o];return r}function a(e){var t=function(e,t){if(\"object\"!=typeof e||null===e)return e;var o=e[Symbol.toPrimitive];if(void 0!==o){var r=o.call(e,t||\"default\");if(\"object\"!=typeof r)return r;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return(\"string\"===t?String:Number)(e)}(e,\"string\");return\"symbol\"==typeof t?t:String(t)}function s(e,t,o,r){var i=l();if(r)for(var n=0;n<r.length;n++)i=r[n](i);var a=t((function(e){i.initializeInstanceElements(e,s.elements)}),o),s=i.decorateClass(function(e){for(var t=[],o=function(e){return\"method\"===e.kind&&e.key===n.key&&e.placement===n.placement},r=0;r<e.length;r++){var i,n=e[r];if(\"method\"===n.kind&&(i=t.find(o)))if(u(n.descriptor)||u(i.descriptor)){if(p(n)||p(i))throw new ReferenceError(\"Duplicated methods (\"+n.key+\") can't be decorated.\");i.descriptor=n.descriptor}else{if(p(n)){if(p(i))throw new ReferenceError(\"Decorators can't be placed on different accessors with for the same property (\"+n.key+\").\");i.decorators=n.decorators}c(n,i)}else t.push(n)}return t}(a.d.map(d)),e);return i.initializeClassElements(a.F,s.elements),i.runClassFinishers(a.F,s.finishers)}function l(){l=function(){return e};var e={elementsDefinitionOrder:[[\"method\"],[\"field\"]],initializeInstanceElements:function(e,t){[\"method\",\"field\"].forEach((function(o){t.forEach((function(t){t.kind===o&&\"own\"===t.placement&&this.defineClassElement(e,t)}),this)}),this)},initializeClassElements:function(e,t){var o=e.prototype;[\"method\",\"field\"].forEach((function(r){t.forEach((function(t){var i=t.placement;if(t.kind===r&&(\"static\"===i||\"prototype\"===i)){var n=\"static\"===i?e:o;this.defineClassElement(n,t)}}),this)}),this)},defineClassElement:function(e,t){var o=t.descriptor;if(\"field\"===t.kind){var r=t.initializer;o={enumerable:o.enumerable,writable:o.writable,configurable:o.configurable,value:void 0===r?void 0:r.call(e)}}Object.defineProperty(e,t.key,o)},decorateClass:function(e,t){var o=[],r=[],i={static:[],prototype:[],own:[]};if(e.forEach((function(e){this.addElementPlacement(e,i)}),this),e.forEach((function(e){if(!p(e))return o.push(e);var t=this.decorateElement(e,i);o.push(t.element),o.push.apply(o,t.extras),r.push.apply(r,t.finishers)}),this),!t)return{elements:o,finishers:r};var n=this.decorateConstructor(o,t);return r.push.apply(r,n.finishers),n.finishers=r,n},addElementPlacement:function(e,t,o){var r=t[e.placement];if(!o&&-1!==r.indexOf(e.key))throw new TypeError(\"Duplicated element (\"+e.key+\")\");r.push(e.key)},decorateElement:function(e,t){for(var o=[],r=[],i=e.decorators,n=i.length-1;n>=0;n--){var a=t[e.placement];a.splice(a.indexOf(e.key),1);var s=this.fromElementDescriptor(e),l=this.toElementFinisherExtras((0,i[n])(s)||s);e=l.element,this.addElementPlacement(e,t),l.finisher&&r.push(l.finisher);var d=l.extras;if(d){for(var c=0;c<d.length;c++)this.addElementPlacement(d[c],t);o.push.apply(o,d)}}return{element:e,finishers:r,extras:o}},decorateConstructor:function(e,t){for(var o=[],r=t.length-1;r>=0;r--){var i=this.fromClassDescriptor(e),n=this.toClassDescriptor((0,t[r])(i)||i);if(void 0!==n.finisher&&o.push(n.finisher),void 0!==n.elements){e=n.elements;for(var a=0;a<e.length-1;a++)for(var s=a+1;s<e.length;s++)if(e[a].key===e[s].key&&e[a].placement===e[s].placement)throw new TypeError(\"Duplicated element (\"+e[a].key+\")\")}}return{elements:e,finishers:o}},fromElementDescriptor:function(e){var t={kind:e.kind,key:e.key,placement:e.placement,descriptor:e.descriptor};return Object.defineProperty(t,Symbol.toStringTag,{value:\"Descriptor\",configurable:!0}),\"field\"===e.kind&&(t.initializer=e.initializer),t},toElementDescriptors:function(e){if(void 0!==e)return i(e).map((function(e){var t=this.toElementDescriptor(e);return this.disallowProperty(e,\"finisher\",\"An element descriptor\"),this.disallowProperty(e,\"extras\",\"An element descriptor\"),t}),this)},toElementDescriptor:function(e){var t=String(e.kind);if(\"method\"!==t&&\"field\"!==t)throw new TypeError('An element descriptor\\'s .kind property must be either \"method\" or \"field\", but a decorator created an element descriptor with .kind \"'+t+'\"');var o=a(e.key),r=String(e.placement);if(\"static\"!==r&&\"prototype\"!==r&&\"own\"!==r)throw new TypeError('An element descriptor\\'s .placement property must be one of \"static\", \"prototype\" or \"own\", but a decorator created an element descriptor with .placement \"'+r+'\"');var i=e.descriptor;this.disallowProperty(e,\"elements\",\"An element descriptor\");var n={kind:t,key:o,placement:r,descriptor:Object.assign({},i)};return\"field\"!==t?this.disallowProperty(e,\"initializer\",\"A method descriptor\"):(this.disallowProperty(i,\"get\",\"The property descriptor of a field descriptor\"),this.disallowProperty(i,\"set\",\"The property descriptor of a field descriptor\"),this.disallowProperty(i,\"value\",\"The property descriptor of a field descriptor\"),n.initializer=e.initializer),n},toElementFinisherExtras:function(e){return{element:this.toElementDescriptor(e),finisher:m(e,\"finisher\"),extras:this.toElementDescriptors(e.extras)}},fromClassDescriptor:function(e){var t={kind:\"class\",elements:e.map(this.fromElementDescriptor,this)};return Object.defineProperty(t,Symbol.toStringTag,{value:\"Descriptor\",configurable:!0}),t},toClassDescriptor:function(e){var t=String(e.kind);if(\"class\"!==t)throw new TypeError('A class descriptor\\'s .kind property must be \"class\", but a decorator created a class descriptor with .kind \"'+t+'\"');this.disallowProperty(e,\"key\",\"A class descriptor\"),this.disallowProperty(e,\"placement\",\"A class descriptor\"),this.disallowProperty(e,\"descriptor\",\"A class descriptor\"),this.disallowProperty(e,\"initializer\",\"A class descriptor\"),this.disallowProperty(e,\"extras\",\"A class descriptor\");var o=m(e,\"finisher\");return{elements:this.toElementDescriptors(e.elements),finisher:o}},runClassFinishers:function(e,t){for(var o=0;o<t.length;o++){var r=(0,t[o])(e);if(void 0!==r){if(\"function\"!=typeof r)throw new TypeError(\"Finishers must return a constructor.\");e=r}}return e},disallowProperty:function(e,t,o){if(void 0!==e[t])throw new TypeError(o+\" can't have a .\"+t+\" property.\")}};return e}function d(e){var t,o=a(e.key);\"method\"===e.kind?t={value:e.value,writable:!0,configurable:!0,enumerable:!1}:\"get\"===e.kind?t={get:e.value,configurable:!0,enumerable:!1}:\"set\"===e.kind?t={set:e.value,configurable:!0,enumerable:!1}:\"field\"===e.kind&&(t={configurable:!0,writable:!0,enumerable:!0});var r={kind:\"field\"===e.kind?\"field\":\"method\",key:o,placement:e.static?\"static\":\"field\"===e.kind?\"own\":\"prototype\",descriptor:t};return e.decorators&&(r.decorators=e.decorators),\"field\"===e.kind&&(r.initializer=e.value),r}function c(e,t){void 0!==e.descriptor.get?t.descriptor.get=e.descriptor.get:t.descriptor.set=e.descriptor.set}function p(e){return e.decorators&&e.decorators.length}function u(e){return void 0!==e&&!(void 0===e.value&&void 0===e.writable)}function m(e,t){var o=e[t];if(void 0!==o&&\"function\"!=typeof o)throw new TypeError(\"Expected '\"+t+\"' to be a function\");return o}const h=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,g=Symbol(),_=new Map;class f{constructor(e,t){if(this._$cssResult$=!0,t!==g)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=e}get styleSheet(){let e=_.get(this.cssText);return h&&void 0===e&&(_.set(this.cssText,e=new CSSStyleSheet),e.replaceSync(this.cssText)),e}toString(){return this.cssText}}const y=e=>new f(\"string\"==typeof e?e:e+\"\",g),b=(e,...t)=>{const o=1===e.length?e[0]:t.reduce(((t,o,r)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if(\"number\"==typeof e)return e;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+e+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(o)+e[r+1]),e[0]);return new f(o,g)},v=h?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t=\"\";for(const o of e.cssRules)t+=o.cssText;return y(t)})(e):e;var C;const A=window.trustedTypes,w=A?A.emptyScript:\"\",H=window.reactiveElementPolyfillSupport,k={toAttribute(e,t){switch(t){case Boolean:e=e?w:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let o=e;switch(t){case Boolean:o=null!==e;break;case Number:o=null===e?null:Number(e);break;case Object:case Array:try{o=JSON.parse(e)}catch(e){o=null}}return o}},L=(e,t)=>t!==e&&(t==t||e==e),S={attribute:!0,type:String,converter:k,reflect:!1,hasChanged:L};class x extends HTMLElement{constructor(){super(),this._$Et=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Ei=null,this.o()}static addInitializer(e){var t;null!==(t=this.l)&&void 0!==t||(this.l=[]),this.l.push(e)}static get observedAttributes(){this.finalize();const e=[];return this.elementProperties.forEach(((t,o)=>{const r=this._$Eh(o,t);void 0!==r&&(this._$Eu.set(r,o),e.push(r))})),e}static createProperty(e,t=S){if(t.state&&(t.attribute=!1),this.finalize(),this.elementProperties.set(e,t),!t.noAccessor&&!this.prototype.hasOwnProperty(e)){const o=\"symbol\"==typeof e?Symbol():\"__\"+e,r=this.getPropertyDescriptor(e,o,t);void 0!==r&&Object.defineProperty(this.prototype,e,r)}}static getPropertyDescriptor(e,t,o){return{get(){return this[t]},set(r){const i=this[e];this[t]=r,this.requestUpdate(e,i,o)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)||S}static finalize(){if(this.hasOwnProperty(\"finalized\"))return!1;this.finalized=!0;const e=Object.getPrototypeOf(this);if(e.finalize(),this.elementProperties=new Map(e.elementProperties),this._$Eu=new Map,this.hasOwnProperty(\"properties\")){const e=this.properties,t=[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)];for(const o of t)this.createProperty(o,e[o])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const o=new Set(e.flat(1/0).reverse());for(const e of o)t.unshift(v(e))}else void 0!==e&&t.push(v(e));return t}static _$Eh(e,t){const o=t.attribute;return!1===o?void 0:\"string\"==typeof o?o:\"string\"==typeof e?e.toLowerCase():void 0}o(){var e;this._$Ep=new Promise((e=>this.enableUpdating=e)),this._$AL=new Map,this._$Em(),this.requestUpdate(),null===(e=this.constructor.l)||void 0===e||e.forEach((e=>e(this)))}addController(e){var t,o;(null!==(t=this._$Eg)&&void 0!==t?t:this._$Eg=[]).push(e),void 0!==this.renderRoot&&this.isConnected&&(null===(o=e.hostConnected)||void 0===o||o.call(e))}removeController(e){var t;null===(t=this._$Eg)||void 0===t||t.splice(this._$Eg.indexOf(e)>>>0,1)}_$Em(){this.constructor.elementProperties.forEach(((e,t)=>{this.hasOwnProperty(t)&&(this._$Et.set(t,this[t]),delete this[t])}))}createRenderRoot(){var e;const t=null!==(e=this.shadowRoot)&&void 0!==e?e:this.attachShadow(this.constructor.shadowRootOptions);return((e,t)=>{h?e.adoptedStyleSheets=t.map((e=>e instanceof CSSStyleSheet?e:e.styleSheet)):t.forEach((t=>{const o=document.createElement(\"style\"),r=window.litNonce;void 0!==r&&o.setAttribute(\"nonce\",r),o.textContent=t.cssText,e.appendChild(o)}))})(t,this.constructor.elementStyles),t}connectedCallback(){var e;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(e=this._$Eg)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostConnected)||void 0===t?void 0:t.call(e)}))}enableUpdating(e){}disconnectedCallback(){var e;null===(e=this._$Eg)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostDisconnected)||void 0===t?void 0:t.call(e)}))}attributeChangedCallback(e,t,o){this._$AK(e,o)}_$ES(e,t,o=S){var r,i;const n=this.constructor._$Eh(e,o);if(void 0!==n&&!0===o.reflect){const a=(null!==(i=null===(r=o.converter)||void 0===r?void 0:r.toAttribute)&&void 0!==i?i:k.toAttribute)(t,o.type);this._$Ei=e,null==a?this.removeAttribute(n):this.setAttribute(n,a),this._$Ei=null}}_$AK(e,t){var o,r,i;const n=this.constructor,a=n._$Eu.get(e);if(void 0!==a&&this._$Ei!==a){const e=n.getPropertyOptions(a),s=e.converter,l=null!==(i=null!==(r=null===(o=s)||void 0===o?void 0:o.fromAttribute)&&void 0!==r?r:\"function\"==typeof s?s:null)&&void 0!==i?i:k.fromAttribute;this._$Ei=a,this[a]=l(t,e.type),this._$Ei=null}}requestUpdate(e,t,o){let r=!0;void 0!==e&&(((o=o||this.constructor.getPropertyOptions(e)).hasChanged||L)(this[e],t)?(this._$AL.has(e)||this._$AL.set(e,t),!0===o.reflect&&this._$Ei!==e&&(void 0===this._$E_&&(this._$E_=new Map),this._$E_.set(e,o))):r=!1),!this.isUpdatePending&&r&&(this._$Ep=this._$EC())}async _$EC(){this.isUpdatePending=!0;try{await this._$Ep}catch(e){Promise.reject(e)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var e;if(!this.isUpdatePending)return;this.hasUpdated,this._$Et&&(this._$Et.forEach(((e,t)=>this[t]=e)),this._$Et=void 0);let t=!1;const o=this._$AL;try{t=this.shouldUpdate(o),t?(this.willUpdate(o),null===(e=this._$Eg)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostUpdate)||void 0===t?void 0:t.call(e)})),this.update(o)):this._$EU()}catch(e){throw t=!1,this._$EU(),e}t&&this._$AE(o)}willUpdate(e){}_$AE(e){var t;null===(t=this._$Eg)||void 0===t||t.forEach((e=>{var t;return null===(t=e.hostUpdated)||void 0===t?void 0:t.call(e)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$Ep}shouldUpdate(e){return!0}update(e){void 0!==this._$E_&&(this._$E_.forEach(((e,t)=>this._$ES(t,this[t],e))),this._$E_=void 0),this._$EU()}updated(e){}firstUpdated(e){}}var V;x.finalized=!0,x.elementProperties=new Map,x.elementStyles=[],x.shadowRootOptions={mode:\"open\"},null==H||H({ReactiveElement:x}),(null!==(C=globalThis.reactiveElementVersions)&&void 0!==C?C:globalThis.reactiveElementVersions=[]).push(\"1.2.1\");const M=globalThis.trustedTypes,E=M?M.createPolicy(\"lit-html\",{createHTML:e=>e}):void 0,P=`lit$${(Math.random()+\"\").slice(9)}$`,T=\"?\"+P,z=`<${T}>`,N=document,I=(e=\"\")=>N.createComment(e),O=e=>null===e||\"object\"!=typeof e&&\"function\"!=typeof e,R=Array.isArray,D=e=>{var t;return R(e)||\"function\"==typeof(null===(t=e)||void 0===t?void 0:t[Symbol.iterator])},j=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,B=/-->/g,$=/>/g,F=/>|[ \t\\n\f\\r](?:([^\\s\"'>=/]+)([ \t\\n\f\\r]*=[ \t\\n\f\\r]*(?:[^ \t\\n\f\\r\"'`<>=]|(\"|')|))|$)/g,U=/'/g,Z=/\"/g,q=/^(?:script|style|textarea)$/i,G=e=>(t,...o)=>({_$litType$:e,strings:t,values:o}),K=G(1),Y=G(2),W=Symbol.for(\"lit-noChange\"),X=Symbol.for(\"lit-nothing\"),J=new WeakMap,Q=(e,t,o)=>{var r,i;const n=null!==(r=null==o?void 0:o.renderBefore)&&void 0!==r?r:t;let a=n._$litPart$;if(void 0===a){const e=null!==(i=null==o?void 0:o.renderBefore)&&void 0!==i?i:null;n._$litPart$=a=new ne(t.insertBefore(I(),e),e,void 0,null!=o?o:{})}return a._$AI(e),a},ee=N.createTreeWalker(N,129,null,!1),te=(e,t)=>{const o=e.length-1,r=[];let i,n=2===t?\"<svg>\":\"\",a=j;for(let t=0;t<o;t++){const o=e[t];let s,l,d=-1,c=0;for(;c<o.length&&(a.lastIndex=c,l=a.exec(o),null!==l);)c=a.lastIndex,a===j?\"!--\"===l[1]?a=B:void 0!==l[1]?a=$:void 0!==l[2]?(q.test(l[2])&&(i=RegExp(\"</\"+l[2],\"g\")),a=F):void 0!==l[3]&&(a=F):a===F?\">\"===l[0]?(a=null!=i?i:j,d=-1):void 0===l[1]?d=-2:(d=a.lastIndex-l[2].length,s=l[1],a=void 0===l[3]?F:'\"'===l[3]?Z:U):a===Z||a===U?a=F:a===B||a===$?a=j:(a=F,i=void 0);const p=a===F&&e[t+1].startsWith(\"/>\")?\" \":\"\";n+=a===j?o+z:d>=0?(r.push(s),o.slice(0,d)+\"$lit$\"+o.slice(d)+P+p):o+P+(-2===d?(r.push(void 0),t):p)}const s=n+(e[o]||\"<?>\")+(2===t?\"</svg>\":\"\");if(!Array.isArray(e)||!e.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return[void 0!==E?E.createHTML(s):s,r]};class oe{constructor({strings:e,_$litType$:t},o){let r;this.parts=[];let i=0,n=0;const a=e.length-1,s=this.parts,[l,d]=te(e,t);if(this.el=oe.createElement(l,o),ee.currentNode=this.el.content,2===t){const e=this.el.content,t=e.firstChild;t.remove(),e.append(...t.childNodes)}for(;null!==(r=ee.nextNode())&&s.length<a;){if(1===r.nodeType){if(r.hasAttributes()){const e=[];for(const t of r.getAttributeNames())if(t.endsWith(\"$lit$\")||t.startsWith(P)){const o=d[n++];if(e.push(t),void 0!==o){const e=r.getAttribute(o.toLowerCase()+\"$lit$\").split(P),t=/([.?@])?(.*)/.exec(o);s.push({type:1,index:i,name:t[2],strings:e,ctor:\".\"===t[1]?se:\"?\"===t[1]?de:\"@\"===t[1]?ce:ae})}else s.push({type:6,index:i})}for(const t of e)r.removeAttribute(t)}if(q.test(r.tagName)){const e=r.textContent.split(P),t=e.length-1;if(t>0){r.textContent=M?M.emptyScript:\"\";for(let o=0;o<t;o++)r.append(e[o],I()),ee.nextNode(),s.push({type:2,index:++i});r.append(e[t],I())}}}else if(8===r.nodeType)if(r.data===T)s.push({type:2,index:i});else{let e=-1;for(;-1!==(e=r.data.indexOf(P,e+1));)s.push({type:7,index:i}),e+=P.length-1}i++}}static createElement(e,t){const o=N.createElement(\"template\");return o.innerHTML=e,o}}function re(e,t,o=e,r){var i,n,a,s;if(t===W)return t;let l=void 0!==r?null===(i=o._$Cl)||void 0===i?void 0:i[r]:o._$Cu;const d=O(t)?void 0:t._$litDirective$;return(null==l?void 0:l.constructor)!==d&&(null===(n=null==l?void 0:l._$AO)||void 0===n||n.call(l,!1),void 0===d?l=void 0:(l=new d(e),l._$AT(e,o,r)),void 0!==r?(null!==(a=(s=o)._$Cl)&&void 0!==a?a:s._$Cl=[])[r]=l:o._$Cu=l),void 0!==l&&(t=re(e,l._$AS(e,t.values),l,r)),t}class ie{constructor(e,t){this.v=[],this._$AN=void 0,this._$AD=e,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}p(e){var t;const{el:{content:o},parts:r}=this._$AD,i=(null!==(t=null==e?void 0:e.creationScope)&&void 0!==t?t:N).importNode(o,!0);ee.currentNode=i;let n=ee.nextNode(),a=0,s=0,l=r[0];for(;void 0!==l;){if(a===l.index){let t;2===l.type?t=new ne(n,n.nextSibling,this,e):1===l.type?t=new l.ctor(n,l.name,l.strings,this,e):6===l.type&&(t=new pe(n,this,e)),this.v.push(t),l=r[++s]}a!==(null==l?void 0:l.index)&&(n=ee.nextNode(),a++)}return i}m(e){let t=0;for(const o of this.v)void 0!==o&&(void 0!==o.strings?(o._$AI(e,o,t),t+=o.strings.length-2):o._$AI(e[t])),t++}}class ne{constructor(e,t,o,r){var i;this.type=2,this._$AH=X,this._$AN=void 0,this._$AA=e,this._$AB=t,this._$AM=o,this.options=r,this._$Cg=null===(i=null==r?void 0:r.isConnected)||void 0===i||i}get _$AU(){var e,t;return null!==(t=null===(e=this._$AM)||void 0===e?void 0:e._$AU)&&void 0!==t?t:this._$Cg}get parentNode(){let e=this._$AA.parentNode;const t=this._$AM;return void 0!==t&&11===e.nodeType&&(e=t.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,t=this){e=re(this,e,t),O(e)?e===X||null==e||\"\"===e?(this._$AH!==X&&this._$AR(),this._$AH=X):e!==this._$AH&&e!==W&&this.$(e):void 0!==e._$litType$?this.T(e):void 0!==e.nodeType?this.S(e):D(e)?this.A(e):this.$(e)}M(e,t=this._$AB){return this._$AA.parentNode.insertBefore(e,t)}S(e){this._$AH!==e&&(this._$AR(),this._$AH=this.M(e))}$(e){this._$AH!==X&&O(this._$AH)?this._$AA.nextSibling.data=e:this.S(N.createTextNode(e)),this._$AH=e}T(e){var t;const{values:o,_$litType$:r}=e,i=\"number\"==typeof r?this._$AC(e):(void 0===r.el&&(r.el=oe.createElement(r.h,this.options)),r);if((null===(t=this._$AH)||void 0===t?void 0:t._$AD)===i)this._$AH.m(o);else{const e=new ie(i,this),t=e.p(this.options);e.m(o),this.S(t),this._$AH=e}}_$AC(e){let t=J.get(e.strings);return void 0===t&&J.set(e.strings,t=new oe(e)),t}A(e){R(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let o,r=0;for(const i of e)r===t.length?t.push(o=new ne(this.M(I()),this.M(I()),this,this.options)):o=t[r],o._$AI(i),r++;r<t.length&&(this._$AR(o&&o._$AB.nextSibling,r),t.length=r)}_$AR(e=this._$AA.nextSibling,t){var o;for(null===(o=this._$AP)||void 0===o||o.call(this,!1,!0,t);e&&e!==this._$AB;){const t=e.nextSibling;e.remove(),e=t}}setConnected(e){var t;void 0===this._$AM&&(this._$Cg=e,null===(t=this._$AP)||void 0===t||t.call(this,e))}}class ae{constructor(e,t,o,r,i){this.type=1,this._$AH=X,this._$AN=void 0,this.element=e,this.name=t,this._$AM=r,this.options=i,o.length>2||\"\"!==o[0]||\"\"!==o[1]?(this._$AH=Array(o.length-1).fill(new String),this.strings=o):this._$AH=X}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(e,t=this,o,r){const i=this.strings;let n=!1;if(void 0===i)e=re(this,e,t,0),n=!O(e)||e!==this._$AH&&e!==W,n&&(this._$AH=e);else{const r=e;let a,s;for(e=i[0],a=0;a<i.length-1;a++)s=re(this,r[o+a],t,a),s===W&&(s=this._$AH[a]),n||(n=!O(s)||s!==this._$AH[a]),s===X?e=X:e!==X&&(e+=(null!=s?s:\"\")+i[a+1]),this._$AH[a]=s}n&&!r&&this.k(e)}k(e){e===X?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,null!=e?e:\"\")}}class se extends ae{constructor(){super(...arguments),this.type=3}k(e){this.element[this.name]=e===X?void 0:e}}const le=M?M.emptyScript:\"\";class de extends ae{constructor(){super(...arguments),this.type=4}k(e){e&&e!==X?this.element.setAttribute(this.name,le):this.element.removeAttribute(this.name)}}class ce extends ae{constructor(e,t,o,r,i){super(e,t,o,r,i),this.type=5}_$AI(e,t=this){var o;if((e=null!==(o=re(this,e,t,0))&&void 0!==o?o:X)===W)return;const r=this._$AH,i=e===X&&r!==X||e.capture!==r.capture||e.once!==r.once||e.passive!==r.passive,n=e!==X&&(r===X||i);i&&this.element.removeEventListener(this.name,this,r),n&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){var t,o;\"function\"==typeof this._$AH?this._$AH.call(null!==(o=null===(t=this.options)||void 0===t?void 0:t.host)&&void 0!==o?o:this.element,e):this._$AH.handleEvent(e)}}class pe{constructor(e,t,o){this.element=e,this.type=6,this._$AN=void 0,this._$AM=t,this.options=o}get _$AU(){return this._$AM._$AU}_$AI(e){re(this,e)}}const ue={P:\"$lit$\",V:P,L:T,I:1,N:te,R:ie,D:D,j:re,H:ne,O:ae,F:de,B:ce,W:se,Z:pe},me=window.litHtmlPolyfillSupport;var he,ge;null==me||me(oe,ne),(null!==(V=globalThis.litHtmlVersions)&&void 0!==V?V:globalThis.litHtmlVersions=[]).push(\"2.1.2\");class _e extends x{constructor(){super(...arguments),this.renderOptions={host:this},this._$Dt=void 0}createRenderRoot(){var e,t;const o=super.createRenderRoot();return null!==(e=(t=this.renderOptions).renderBefore)&&void 0!==e||(t.renderBefore=o.firstChild),o}update(e){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Dt=Q(t,this.renderRoot,this.renderOptions)}connectedCallback(){var e;super.connectedCallback(),null===(e=this._$Dt)||void 0===e||e.setConnected(!0)}disconnectedCallback(){var e;super.disconnectedCallback(),null===(e=this._$Dt)||void 0===e||e.setConnected(!1)}render(){return W}}_e.finalized=!0,_e._$litElement$=!0,null===(he=globalThis.litElementHydrateSupport)||void 0===he||he.call(globalThis,{LitElement:_e});const fe=globalThis.litElementPolyfillSupport;null==fe||fe({LitElement:_e}),(null!==(ge=globalThis.litElementVersions)&&void 0!==ge?ge:globalThis.litElementVersions=[]).push(\"3.1.2\");const ye=e=>t=>\"function\"==typeof t?((e,t)=>(window.customElements.define(e,t),t))(e,t):((e,t)=>{const{kind:o,elements:r}=t;return{kind:o,elements:r,finisher(t){window.customElements.define(e,t)}}})(e,t),be=(e,t)=>\"method\"===t.kind&&t.descriptor&&!(\"value\"in t.descriptor)?{...t,finisher(o){o.createProperty(t.key,e)}}:{kind:\"field\",key:Symbol(),placement:\"own\",descriptor:{},originalKey:t.key,initializer(){\"function\"==typeof t.initializer&&(this[t.key]=t.initializer.call(this))},finisher(o){o.createProperty(t.key,e)}};function ve(e){return(t,o)=>void 0!==o?((e,t,o)=>{t.constructor.createProperty(o,e)})(e,t,o):be(e,t)}function Ce(e){return ve({...e,state:!0})}const Ae=({finisher:e,descriptor:t})=>(o,r)=>{var i;if(void 0===r){const r=null!==(i=o.originalKey)&&void 0!==i?i:o.key,n=null!=t?{kind:\"method\",placement:\"prototype\",key:r,descriptor:t(o.key)}:{...o,key:r};return null!=e&&(n.finisher=function(t){e(t,r)}),n}{const i=o.constructor;void 0!==t&&Object.defineProperty(o,r,t(r)),null==e||e(i,r)}};function we(e){return Ae({finisher:(t,o)=>{Object.assign(t.prototype[o],e)}})}function He(e,t){return Ae({descriptor:o=>{const r={get(){var t,o;return null!==(o=null===(t=this.renderRoot)||void 0===t?void 0:t.querySelector(e))&&void 0!==o?o:null},enumerable:!0,configurable:!0};if(t){const t=\"symbol\"==typeof o?Symbol():\"__\"+o;r.get=function(){var o,r;return void 0===this[t]&&(this[t]=null!==(r=null===(o=this.renderRoot)||void 0===o?void 0:o.querySelector(e))&&void 0!==r?r:null),this[t]}}return r}})}function ke(e){return Ae({descriptor:t=>({async get(){var t;return await this.updateComplete,null===(t=this.renderRoot)||void 0===t?void 0:t.querySelector(e)},enumerable:!0,configurable:!0})})}var Le;const Se=null!=(null===(Le=window.HTMLSlotElement)||void 0===Le?void 0:Le.prototype.assignedElements)?(e,t)=>e.assignedElements(t):(e,t)=>e.assignedNodes(t).filter((e=>e.nodeType===Node.ELEMENT_NODE));function xe(e){const{slot:t,selector:o}=null!=e?e:{};return Ae({descriptor:r=>({get(){var r;const i=\"slot\"+(t?`[name=${t}]`:\":not([name])\"),n=null===(r=this.renderRoot)||void 0===r?void 0:r.querySelector(i),a=null!=n?Se(n,e):[];return o?a.filter((e=>e.matches(o))):a},enumerable:!0,configurable:!0})})}const Ve={\"primary-background-color\":\"#111111\",\"card-background-color\":\"#1c1c1c\",\"secondary-background-color\":\"#202020\",\"primary-text-color\":\"#e1e1e1\",\"secondary-text-color\":\"#9b9b9b\",\"disabled-text-color\":\"#6f6f6f\",\"app-header-text-color\":\"#e1e1e1\",\"app-header-background-color\":\"#101e24\",\"switch-unchecked-button-color\":\"#999999\",\"switch-unchecked-track-color\":\"#9b9b9b\",\"divider-color\":\"rgba(225, 225, 225, .12)\",\"mdc-ripple-color\":\"#AAAAAA\",\"input-idle-line-color\":\"rgba(255, 255, 255, 0.42)\",\"input-hover-line-color\":\"rgba(255, 255, 255, 0.87)\",\"input-disabled-line-color\":\"rgba(255, 255, 255, 0.06)\",\"input-outlined-idle-border-color\":\"rgba(255, 255, 255, 0.38)\",\"input-outlined-hover-border-color\":\"rgba(255, 255, 255, 0.87)\",\"input-outlined-disabled-border-color\":\"rgba(255, 255, 255, 0.06)\",\"input-fill-color\":\"rgba(255, 255, 255, 0.05)\",\"input-disabled-fill-color\":\"rgba(255, 255, 255, 0.02)\",\"input-ink-color\":\"rgba(255, 255, 255, 0.87)\",\"input-label-ink-color\":\"rgba(255, 255, 255, 0.6)\",\"input-disabled-ink-color\":\"rgba(255, 255, 255, 0.37)\",\"input-dropdown-icon-color\":\"rgba(255, 255, 255, 0.54)\",\"codemirror-keyword\":\"#C792EA\",\"codemirror-operator\":\"#89DDFF\",\"codemirror-variable\":\"#f07178\",\"codemirror-variable-2\":\"#EEFFFF\",\"codemirror-variable-3\":\"#DECB6B\",\"codemirror-builtin\":\"#FFCB6B\",\"codemirror-atom\":\"#F78C6C\",\"codemirror-number\":\"#FF5370\",\"codemirror-def\":\"#82AAFF\",\"codemirror-string\":\"#C3E88D\",\"codemirror-string-2\":\"#f07178\",\"codemirror-comment\":\"#545454\",\"codemirror-tag\":\"#FF5370\",\"codemirror-meta\":\"#FFCB6B\",\"codemirror-attribute\":\"#C792EA\",\"codemirror-property\":\"#C792EA\",\"codemirror-qualifier\":\"#DECB6B\",\"codemirror-type\":\"#DECB6B\",\"energy-grid-return-color\":\"#a280db\"},Me={\"state-icon-error-color\":\"var(--error-state-color, var(--error-color))\",\"state-unavailable-color\":\"var(--state-icon-unavailable-color, var(--disabled-text-color))\",\"sidebar-text-color\":\"var(--primary-text-color)\",\"sidebar-background-color\":\"var(--card-background-color)\",\"sidebar-selected-text-color\":\"var(--primary-color)\",\"sidebar-selected-icon-color\":\"var(--primary-color)\",\"sidebar-icon-color\":\"rgba(var(--rgb-primary-text-color), 0.6)\",\"switch-checked-color\":\"var(--primary-color)\",\"switch-checked-button-color\":\"var(--switch-checked-color, var(--primary-background-color))\",\"switch-checked-track-color\":\"var(--switch-checked-color, #000000)\",\"switch-unchecked-button-color\":\"var(--switch-unchecked-color, var(--primary-background-color))\",\"switch-unchecked-track-color\":\"var(--switch-unchecked-color, #000000)\",\"slider-color\":\"var(--primary-color)\",\"slider-secondary-color\":\"var(--light-primary-color)\",\"slider-track-color\":\"var(--scrollbar-thumb-color)\",\"label-badge-background-color\":\"var(--card-background-color)\",\"label-badge-text-color\":\"rgba(var(--rgb-primary-text-color), 0.8)\",\"paper-listbox-background-color\":\"var(--card-background-color)\",\"paper-item-icon-color\":\"var(--state-icon-color)\",\"paper-item-icon-active-color\":\"var(--state-icon-active-color)\",\"table-row-background-color\":\"var(--primary-background-color)\",\"table-row-alternative-background-color\":\"var(--secondary-background-color)\",\"paper-slider-knob-color\":\"var(--slider-color)\",\"paper-slider-knob-start-color\":\"var(--slider-color)\",\"paper-slider-pin-color\":\"var(--slider-color)\",\"paper-slider-pin-start-color\":\"var(--slider-color)\",\"paper-slider-active-color\":\"var(--slider-color)\",\"paper-slider-secondary-color\":\"var(--slider-secondary-color)\",\"paper-slider-container-color\":\"var(--slider-track-color)\",\"data-table-background-color\":\"var(--card-background-color)\",\"markdown-code-background-color\":\"var(--primary-background-color)\",\"mdc-theme-primary\":\"var(--primary-color)\",\"mdc-theme-secondary\":\"var(--accent-color)\",\"mdc-theme-background\":\"var(--primary-background-color)\",\"mdc-theme-surface\":\"var(--card-background-color)\",\"mdc-theme-on-primary\":\"var(--text-primary-color)\",\"mdc-theme-on-secondary\":\"var(--text-primary-color)\",\"mdc-theme-on-surface\":\"var(--primary-text-color)\",\"mdc-theme-text-disabled-on-light\":\"var(--disabled-text-color)\",\"mdc-theme-text-primary-on-background\":\"var(--primary-text-color)\",\"mdc-theme-text-secondary-on-background\":\"var(--secondary-text-color)\",\"mdc-theme-text-hint-on-background\":\"var(--secondary-text-color)\",\"mdc-theme-text-icon-on-background\":\"var(--secondary-text-color)\",\"mdc-theme-error\":\"var(--error-color)\",\"app-header-text-color\":\"var(--text-primary-color)\",\"app-header-background-color\":\"var(--primary-color)\",\"mdc-checkbox-unchecked-color\":\"rgba(var(--rgb-primary-text-color), 0.54)\",\"mdc-checkbox-disabled-color\":\"var(--disabled-text-color)\",\"mdc-radio-unchecked-color\":\"rgba(var(--rgb-primary-text-color), 0.54)\",\"mdc-radio-disabled-color\":\"var(--disabled-text-color)\",\"mdc-tab-text-label-color-default\":\"var(--primary-text-color)\",\"mdc-button-disabled-ink-color\":\"var(--disabled-text-color)\",\"mdc-button-outline-color\":\"var(--divider-color)\",\"mdc-dialog-scroll-divider-color\":\"var(--divider-color)\",\"mdc-text-field-idle-line-color\":\"var(--input-idle-line-color)\",\"mdc-text-field-hover-line-color\":\"var(--input-hover-line-color)\",\"mdc-text-field-disabled-line-color\":\"var(--input-disabled-line-color)\",\"mdc-text-field-outlined-idle-border-color\":\"var(--input-outlined-idle-border-color)\",\"mdc-text-field-outlined-hover-border-color\":\"var(--input-outlined-hover-border-color)\",\"mdc-text-field-outlined-disabled-border-color\":\"var(--input-outlined-disabled-border-color)\",\"mdc-text-field-fill-color\":\"var(--input-fill-color)\",\"mdc-text-field-disabled-fill-color\":\"var(--input-disabled-fill-color)\",\"mdc-text-field-ink-color\":\"var(--input-ink-color)\",\"mdc-text-field-label-ink-color\":\"var(--input-label-ink-color)\",\"mdc-text-field-disabled-ink-color\":\"var(--input-disabled-ink-color)\",\"mdc-select-idle-line-color\":\"var(--input-idle-line-color)\",\"mdc-select-hover-line-color\":\"var(--input-hover-line-color)\",\"mdc-select-outlined-idle-border-color\":\"var(--input-outlined-idle-border-color)\",\"mdc-select-outlined-hover-border-color\":\"var(--input-outlined-hover-border-color)\",\"mdc-select-outlined-disabled-border-color\":\"var(--input-outlined-disabled-border-color)\",\"mdc-select-fill-color\":\"var(--input-fill-color)\",\"mdc-select-disabled-fill-color\":\"var(--input-disabled-fill-color)\",\"mdc-select-ink-color\":\"var(--input-ink-color)\",\"mdc-select-label-ink-color\":\"var(--input-label-ink-color)\",\"mdc-select-disabled-ink-color\":\"var(--input-disabled-ink-color)\",\"mdc-select-dropdown-icon-color\":\"var(--input-dropdown-icon-color)\",\"mdc-select-disabled-dropdown-icon-color\":\"var(--input-disabled-ink-color)\",\"chip-background-color\":\"rgba(var(--rgb-primary-text-color), 0.15)\",\"material-body-text-color\":\"var(--primary-text-color)\",\"material-background-color\":\"var(--card-background-color)\",\"material-secondary-background-color\":\"var(--secondary-background-color)\",\"material-secondary-text-color\":\"var(--secondary-text-color)\"},Ee=b`\n  button.link {\n    background: none;\n    color: inherit;\n    border: none;\n    padding: 0;\n    font: inherit;\n    text-align: left;\n    text-decoration: underline;\n    cursor: pointer;\n    outline: none;\n  }\n`,Pe=b`\n  :host {\n    font-family: var(--paper-font-body1_-_font-family);\n    -webkit-font-smoothing: var(--paper-font-body1_-_-webkit-font-smoothing);\n    font-size: var(--paper-font-body1_-_font-size);\n    font-weight: var(--paper-font-body1_-_font-weight);\n    line-height: var(--paper-font-body1_-_line-height);\n  }\n\n  app-header-layout,\n  ha-app-layout {\n    background-color: var(--primary-background-color);\n  }\n\n  app-header,\n  app-toolbar {\n    background-color: var(--app-header-background-color);\n    font-weight: 400;\n    color: var(--app-header-text-color, white);\n  }\n\n  app-toolbar {\n    height: var(--header-height);\n    border-bottom: var(--app-header-border-bottom);\n    box-sizing: border-box;\n  }\n\n  app-header div[sticky] {\n    height: 48px;\n  }\n\n  app-toolbar [main-title] {\n    margin-left: 20px;\n  }\n\n  h1 {\n    font-family: var(--paper-font-headline_-_font-family);\n    -webkit-font-smoothing: var(--paper-font-headline_-_-webkit-font-smoothing);\n    white-space: var(--paper-font-headline_-_white-space);\n    overflow: var(--paper-font-headline_-_overflow);\n    text-overflow: var(--paper-font-headline_-_text-overflow);\n    font-size: var(--paper-font-headline_-_font-size);\n    font-weight: var(--paper-font-headline_-_font-weight);\n    line-height: var(--paper-font-headline_-_line-height);\n  }\n\n  h2 {\n    font-family: var(--paper-font-title_-_font-family);\n    -webkit-font-smoothing: var(--paper-font-title_-_-webkit-font-smoothing);\n    white-space: var(--paper-font-title_-_white-space);\n    overflow: var(--paper-font-title_-_overflow);\n    text-overflow: var(--paper-font-title_-_text-overflow);\n    font-size: var(--paper-font-title_-_font-size);\n    font-weight: var(--paper-font-title_-_font-weight);\n    line-height: var(--paper-font-title_-_line-height);\n  }\n\n  h3 {\n    font-family: var(--paper-font-subhead_-_font-family);\n    -webkit-font-smoothing: var(--paper-font-subhead_-_-webkit-font-smoothing);\n    white-space: var(--paper-font-subhead_-_white-space);\n    overflow: var(--paper-font-subhead_-_overflow);\n    text-overflow: var(--paper-font-subhead_-_text-overflow);\n    font-size: var(--paper-font-subhead_-_font-size);\n    font-weight: var(--paper-font-subhead_-_font-weight);\n    line-height: var(--paper-font-subhead_-_line-height);\n  }\n\n  a {\n    color: var(--primary-color);\n  }\n\n  .secondary {\n    color: var(--secondary-text-color);\n  }\n\n  .error {\n    color: var(--error-color);\n  }\n\n  .warning {\n    color: var(--error-color);\n  }\n\n  mwc-button.warning {\n    --mdc-theme-primary: var(--error-color);\n  }\n\n  ${Ee}\n\n  .card-actions a {\n    text-decoration: none;\n  }\n\n  .card-actions .warning {\n    --mdc-theme-primary: var(--error-color);\n  }\n\n  .layout.horizontal,\n  .layout.vertical {\n    display: flex;\n  }\n  .layout.inline {\n    display: inline-flex;\n  }\n  .layout.horizontal {\n    flex-direction: row;\n  }\n  .layout.vertical {\n    flex-direction: column;\n  }\n  .layout.wrap {\n    flex-wrap: wrap;\n  }\n  .layout.no-wrap {\n    flex-wrap: nowrap;\n  }\n  .layout.center,\n  .layout.center-center {\n    align-items: center;\n  }\n  .layout.bottom {\n    align-items: flex-end;\n  }\n  .layout.center-justified,\n  .layout.center-center {\n    justify-content: center;\n  }\n  .flex {\n    flex: 1;\n    flex-basis: 0.000000001px;\n  }\n  .flex-auto {\n    flex: 1 1 auto;\n  }\n  .flex-none {\n    flex: none;\n  }\n  .layout.justified {\n    justify-content: space-between;\n  }\n`,Te=b`\n  /* mwc-dialog (ha-dialog) styles */\n  ha-dialog {\n    --mdc-dialog-min-width: 400px;\n    --mdc-dialog-max-width: 600px;\n    --mdc-dialog-heading-ink-color: var(--primary-text-color);\n    --mdc-dialog-content-ink-color: var(--primary-text-color);\n    --justify-action-buttons: space-between;\n  }\n\n  ha-dialog .form {\n    padding-bottom: 24px;\n    color: var(--primary-text-color);\n  }\n\n  a {\n    color: var(--primary-color);\n  }\n\n  /* make dialog fullscreen on small screens */\n  @media all and (max-width: 450px), all and (max-height: 500px) {\n    ha-dialog {\n      --mdc-dialog-min-width: calc(\n        100vw - env(safe-area-inset-right) - env(safe-area-inset-left)\n      );\n      --mdc-dialog-max-width: calc(\n        100vw - env(safe-area-inset-right) - env(safe-area-inset-left)\n      );\n      --mdc-dialog-min-height: 100%;\n      --mdc-dialog-max-height: 100%;\n      --vertial-align-dialog: flex-end;\n      --ha-dialog-border-radius: 0px;\n    }\n  }\n  mwc-button.warning {\n    --mdc-theme-primary: var(--error-color);\n  }\n  .error {\n    color: var(--error-color);\n  }\n`;b`\n  .ha-scrollbar::-webkit-scrollbar {\n    width: 0.4rem;\n    height: 0.4rem;\n  }\n\n  .ha-scrollbar::-webkit-scrollbar-thumb {\n    -webkit-border-radius: 4px;\n    border-radius: 4px;\n    background: var(--scrollbar-thumb-color);\n  }\n\n  .ha-scrollbar {\n    overflow-y: auto;\n    scrollbar-color: var(--scrollbar-thumb-color) transparent;\n    scrollbar-width: thin;\n  }\n`,b`\n  body {\n    background-color: var(--primary-background-color);\n    color: var(--primary-text-color);\n    height: calc(100vh - 32px);\n    width: 100vw;\n  }\n`;const ze=e=>{if(6===(e=e.replace(\"#\",\"\")).length)return e;let t=\"\";for(const o of e)t+=o+o;return t},Ne=e=>{const t=Math.round(Math.min(Math.max(e,0),255)).toString(16);return 1===t.length?`0${t}`:t},Ie=e=>(e=ze(e),[parseInt(e.substring(0,2),16),parseInt(e.substring(2,4),16),parseInt(e.substring(4,6),16)]),Oe=e=>`#${Ne(e[0])}${Ne(e[1])}${Ne(e[2])}`,Re=.137931034,De=.12841855,je=e=>(e/=255)<=.04045?e/12.92:((e+.055)/1.055)**2.4,Be=e=>e>.008856452?e**(1/3):e/De+Re,$e=e=>255*(e<=.00304?12.92*e:1.055*e**(1/2.4)-.055),Fe=e=>e>.206896552?e*e*e:De*(e-Re),Ue=e=>{const[t,o,r]=(e=>{let[t,o,r]=e;return t=je(t),o=je(o),r=je(r),[Be((.4124564*t+.3575761*o+.1804375*r)/.95047),Be((.2126729*t+.7151522*o+.072175*r)/1),Be((.0193339*t+.119192*o+.9503041*r)/1.08883)]})(e),i=116*o-16;return[i<0?0:i,500*(t-o),200*(o-r)]},Ze=e=>{const[t,o,r]=e;let i=(t+16)/116,n=isNaN(o)?i:i+o/500,a=isNaN(r)?i:i-r/200;i=1*Fe(i),n=.95047*Fe(n),a=1.08883*Fe(a);return[$e(3.2404542*n-1.5371385*i-.4985314*a),$e(-.969266*n+1.8760108*i+.041556*a),$e(.0556434*n-.2040259*i+1.0572252*a)]},qe=(e,t=1)=>[e[0]-18*t,e[1],e[2]],Ge=e=>{const t=[0,0,0];for(let o=0;o<e.length;o++){const r=e[o]/255;t[o]=r<=.03928?r/12.92:((r+.055)/1.055)**2.4}return.2126*t[0]+.7152*t[1]+.0722*t[2]},Ke=(e,t)=>{const o=Ge(e),r=Ge(t);return o>r?(o+.05)/(r+.05):(r+.05)/(o+.05)};let Ye={};const We=(e,t,o,r,i)=>{var n,a;const s=o||(i?t.theme:void 0),l=r&&void 0!==(null==r?void 0:r.dark)?null==r?void 0:r.dark:t.darkMode;let d=s,c={};if(s&&l&&(d=`${d}__dark`,c={...Ve}),\"default\"===s){var p;const t=null==r?void 0:r.primaryColor,o=null==r?void 0:r.accentColor;if(l&&t&&(c[\"app-header-background-color\"]=((e,t,o=50)=>{let r=\"\";e=ze(e),t=ze(t);for(let i=0;i<=5;i+=2){const n=parseInt(e.substr(i,2),16),a=parseInt(t.substr(i,2),16);let s=Math.floor(a+o/100*(n-a)).toString(16);for(;s.length<2;)s=\"0\"+s;r+=s}return`#${r}`})(t,\"#121212\",8)),t){d=`${d}__primary_${t}`;const e=Ie(t),o=Ue(e);c[\"primary-color\"]=t;const r=Ze(((e,t=1)=>qe(e,-t))(o));c[\"light-primary-color\"]=Oe(r),c[\"dark-primary-color\"]=(e=>{const t=Ze(e);return Oe(t)})(qe(o)),c[\"text-primary-color\"]=Ke(e,[33,33,33])<6?\"#fff\":\"#212121\",c[\"text-light-primary-color\"]=Ke(r,[33,33,33])<6?\"#fff\":\"#212121\",c[\"state-icon-color\"]=c[\"dark-primary-color\"]}if(o){d=`${d}__accent_${o}`,c[\"accent-color\"]=o;const e=Ie(o);c[\"text-accent-color\"]=Ke(e,[33,33,33])<6?\"#fff\":\"#212121\"}if((null===(p=e._themes)||void 0===p?void 0:p.cacheKey)===d)return}if(s&&\"default\"!==s&&t.themes[s]){const{modes:e,...o}=t.themes[s];c={...c,...o},e&&(c=l?{...c,...e.dark}:{...c,...e.light})}if(!(null!==(n=e._themes)&&void 0!==n&&n.keys||Object.keys(c).length))return;const u=Object.keys(c).length&&d?Ye[d]||Xe(d,c):void 0,m={...null===(a=e._themes)||void 0===a?void 0:a.keys,...null==u?void 0:u.styles};e._themes={cacheKey:d,keys:null==u?void 0:u.keys},e.updateStyles?e.updateStyles(m):window.ShadyCSS&&window.ShadyCSS.styleSubtree(e,m)},Xe=(e,t)=>{if(!t||!Object.keys(t).length)return;const o={...Me,...t},r={},i={};for(const e of Object.keys(o)){const t=`--${e}`,n=String(o[e]);if(r[t]=n,i[t]=\"\",!n.startsWith(\"#\"))continue;const a=`rgb-${e}`;if(void 0===o[a])try{const e=Ie(n).join(\",\"),t=`--${a}`;r[t]=e,i[t]=\"\"}catch(e){continue}}return Ye[e]={styles:r,keys:i},{styles:r,keys:i}},Je=\"ha-main-window\"===window.name?window:\"ha-main-window\"===parent.name?parent:top,Qe=(e,t,o,r)=>{r=r||{},o=null==o?{}:o;const i=new Event(t,{bubbles:void 0===r.bubbles||r.bubbles,cancelable:Boolean(r.cancelable),composed:void 0===r.composed||r.composed});return i.detail=o,e.dispatchEvent(i),i},et=(e,t,o=true)=>{var r;if(!e||e===document.body)return null;if((e=null!==(r=e.assignedSlot)&&void 0!==r?r:e).parentElement)e=e.parentElement;else{const t=e.getRootNode();e=t instanceof ShadowRoot?t.host:null}return(o?Object.prototype.hasOwnProperty.call(e,t):e&&t in e)?e:et(e,t,o)},tt=(e=document)=>{var t,o;return null!==(t=e.activeElement)&&void 0!==t&&null!==(o=t.shadowRoot)&&void 0!==o&&o.activeElement?tt(e.activeElement.shadowRoot):e.activeElement},ot=()=>new Promise((e=>{var t;t=e,requestAnimationFrame((()=>setTimeout(t,0)))})),rt={},it=Symbol.for(\"HA focus target\"),nt=async(e,t,o,r,i,n=!0)=>{var a;if(!(o in rt)){if(!i)return void(__DEV__&&console.warn(\"Asked to show dialog that's not loaded and can't be imported\"));rt[o]={element:i().then((()=>{const t=document.createElement(o);return e.provideHass(t),t}))}}if(null!==(a=Je.history.state)&&void 0!==a&&a.replaced?(rt[o].closedFocusTargets=rt[Je.history.state.dialog].closedFocusTargets,delete rt[Je.history.state.dialog].closedFocusTargets):rt[o].closedFocusTargets=((e,t,o=!0)=>{const r=new Set;for(;e;)r.add(e),e=et(e,t,o);return r})(tt(),it),n){var s,l;Je.history.replaceState({dialog:o,open:!1,oldState:null!==(s=Je.history.state)&&void 0!==s&&s.open&&(null===(l=Je.history.state)||void 0===l?void 0:l.dialog)!==o?Je.history.state:null},\"\");try{Je.history.pushState({dialog:o,dialogParams:r,open:!0},\"\")}catch(e){Je.history.pushState({dialog:o,dialogParams:null,open:!0},\"\")}}const d=await rt[o].element;d.addEventListener(\"dialog-closed\",at),t.appendChild(d),d.showDialog(r)},at=async e=>{const t=rt[e.detail.dialog].closedFocusTargets;if(delete rt[e.detail.dialog].closedFocusTargets,!t)return;let o=tt();o instanceof HTMLElement&&o.blur(),await ot();for(const e of t)if(e instanceof HTMLElement&&(e.focus(),o=tt(),o&&o!==document.body))return;__DEV__&&console.warn(\"Failed to focus any targets after closing dialog: %o\",t)},st=(e,t)=>{const o=(null==t?void 0:t.replace)||!1;var r;o?Je.history.replaceState(null!==(r=Je.history.state)&&void 0!==r&&r.root?{root:!0}:null,\"\",e):Je.history.pushState(null,\"\",e),Qe(Je,\"location-changed\",{replace:o})},lt=!(window.ShadyDOM&&window.ShadyDOM.inUse);let dt,ct;function pt(e){dt=(!e||!e.shimcssproperties)&&(lt||Boolean(!navigator.userAgent.match(/AppleWebKit\\/601|Edge\\/15/)&&window.CSS&&CSS.supports&&CSS.supports(\"box-shadow\",\"0 0 0 var(--foo)\")))}window.ShadyCSS&&void 0!==window.ShadyCSS.cssBuild&&(ct=window.ShadyCSS.cssBuild);const ut=Boolean(window.ShadyCSS&&window.ShadyCSS.disableRuntime);window.ShadyCSS&&void 0!==window.ShadyCSS.nativeCss?dt=window.ShadyCSS.nativeCss:window.ShadyCSS?(pt(window.ShadyCSS),window.ShadyCSS=void 0):pt(window.WebComponents&&window.WebComponents.flags);const mt=dt;class ht{constructor(){this.start=0,this.end=0,this.previous=null,this.parent=null,this.rules=null,this.parsedCssText=\"\",this.cssText=\"\",this.atRule=!1,this.type=0,this.keyframesName=\"\",this.selector=\"\",this.parsedSelector=\"\"}}function gt(e){return _t(function(e){let t=new ht;t.start=0,t.end=e.length;let o=t;for(let r=0,i=e.length;r<i;r++)if(e[r]===bt){o.rules||(o.rules=[]);let e=o,t=e.rules[e.rules.length-1]||null;o=new ht,o.start=r+1,o.parent=e,o.previous=t,e.rules.push(o)}else e[r]===vt&&(o.end=r+1,o=o.parent||t);return t}(e=e.replace(Ct.comments,\"\").replace(Ct.port,\"\")),e)}function _t(e,t){let o=t.substring(e.start,e.end-1);if(e.parsedCssText=e.cssText=o.trim(),e.parent){let r=e.previous?e.previous.end:e.parent.start;o=t.substring(r,e.start-1),o=function(e){return e.replace(/\\\\([0-9a-f]{1,6})\\s/gi,(function(){let e=arguments[1],t=6-e.length;for(;t--;)e=\"0\"+e;return\"\\\\\"+e}))}(o),o=o.replace(Ct.multipleSpaces,\" \"),o=o.substring(o.lastIndexOf(\";\")+1);let i=e.parsedSelector=e.selector=o.trim();e.atRule=0===i.indexOf(Ht),e.atRule?0===i.indexOf(wt)?e.type=yt.MEDIA_RULE:i.match(Ct.keyframesRule)&&(e.type=yt.KEYFRAMES_RULE,e.keyframesName=e.selector.split(Ct.multipleSpaces).pop()):0===i.indexOf(At)?e.type=yt.MIXIN_RULE:e.type=yt.STYLE_RULE}let r=e.rules;if(r)for(let e,o=0,i=r.length;o<i&&(e=r[o]);o++)_t(e,t);return e}function ft(e,t,o=\"\"){let r=\"\";if(e.cssText||e.rules){let o=e.rules;if(o&&!function(e){let t=e[0];return Boolean(t)&&Boolean(t.selector)&&0===t.selector.indexOf(At)}(o))for(let e,i=0,n=o.length;i<n&&(e=o[i]);i++)r=ft(e,t,r);else r=t?e.cssText:function(e){return function(e){return e.replace(Ct.mixinApply,\"\").replace(Ct.varApply,\"\")}(e=function(e){return e.replace(Ct.customProp,\"\").replace(Ct.mixinProp,\"\")}(e))}(e.cssText),r=r.trim(),r&&(r=\"  \"+r+\"\\n\")}return r&&(e.selector&&(o+=e.selector+\" \"+bt+\"\\n\"),o+=r,e.selector&&(o+=vt+\"\\n\\n\")),o}const yt={STYLE_RULE:1,KEYFRAMES_RULE:7,MEDIA_RULE:4,MIXIN_RULE:1e3},bt=\"{\",vt=\"}\",Ct={comments:/\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//gim,port:/@import[^;]*;/gim,customProp:/(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\\n]|$)/gim,mixinProp:/(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\\n]|$)?/gim,mixinApply:/@apply\\s*\\(?[^);]*\\)?\\s*(?:[;\\n]|$)?/gim,varApply:/[^;:]*?:[^;]*?var\\([^;]*\\)(?:[;\\n]|$)?/gim,keyframesRule:/^@[^\\s]*keyframes/,multipleSpaces:/\\s+/g},At=\"--\",wt=\"@media\",Ht=\"@\",kt=/(?:^|[;\\s{]\\s*)(--[\\w-]*?)\\s*:\\s*(?:((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};{])+)|\\{([^}]*)\\}(?:(?=[;\\s}])|$))/gi,Lt=/(?:^|\\W+)@apply\\s*\\(?([^);\\n]*)\\)?/gi,St=/@media\\s(.*)/,xt=new Set;function Vt(e){const t=e.textContent;if(!xt.has(t)){xt.add(t);const e=document.createElement(\"style\");e.setAttribute(\"shady-unscoped\",\"\"),e.textContent=t,document.head.appendChild(e)}}function Mt(e){return e.hasAttribute(\"shady-unscoped\")}function Et(e,t){return e?(\"string\"==typeof e&&(e=gt(e)),t&&Tt(e,t),ft(e,mt)):\"\"}function Pt(e){return!e.__cssRules&&e.textContent&&(e.__cssRules=gt(e.textContent)),e.__cssRules||null}function Tt(e,t,o,r){if(!e)return;let i=!1,n=e.type;if(r&&n===yt.MEDIA_RULE){let t=e.selector.match(St);t&&(window.matchMedia(t[1]).matches||(i=!0))}n===yt.STYLE_RULE?t(e):o&&n===yt.KEYFRAMES_RULE?o(e):n===yt.MIXIN_RULE&&(i=!0);let a=e.rules;if(a&&!i)for(let e,i=0,n=a.length;i<n&&(e=a[i]);i++)Tt(e,t,o,r)}function zt(e,t){let o=e.indexOf(\"var(\");if(-1===o)return t(e,\"\",\"\",\"\");let r=function(e,t){let o=0;for(let r=t,i=e.length;r<i;r++)if(\"(\"===e[r])o++;else if(\")\"===e[r]&&0==--o)return r;return-1}(e,o+3),i=e.substring(o+4,r),n=e.substring(0,o),a=zt(e.substring(r+1),t),s=i.indexOf(\",\");return-1===s?t(n,i.trim(),\"\",a):t(n,i.substring(0,s).trim(),i.substring(s+1).trim(),a)}window.ShadyDOM&&window.ShadyDOM.wrap;function Nt(e){if(void 0!==ct)return ct;if(void 0===e.__cssBuild){const t=e.getAttribute(\"css-build\");if(t)e.__cssBuild=t;else{const t=function(e){const t=\"template\"===e.localName?e.content.firstChild:e.firstChild;if(t instanceof Comment){const e=t.textContent.trim().split(\":\");if(\"css-build\"===e[0])return e[1]}return\"\"}(e);\"\"!==t&&function(e){const t=\"template\"===e.localName?e.content.firstChild:e.firstChild;t.parentNode.removeChild(t)}(e),e.__cssBuild=t}}return e.__cssBuild||\"\"}function It(e){return\"\"!==Nt(e)}function Ot(e,t){for(let o in t)null===o?e.style.removeProperty(o):e.style.setProperty(o,t[o])}function Rt(e,t){const o=window.getComputedStyle(e).getPropertyValue(t);return o?o.trim():\"\"}const Dt=/;\\s*/m,jt=/^\\s*(initial)|(inherit)\\s*$/,Bt=/\\s*!important/;class $t{constructor(){this._map={}}set(e,t){e=e.trim(),this._map[e]={properties:t,dependants:{}}}get(e){return e=e.trim(),this._map[e]||null}}let Ft=null;class Ut{constructor(){this._currentElement=null,this._measureElement=null,this._map=new $t}detectMixin(e){return function(e){const t=Lt.test(e)||kt.test(e);return Lt.lastIndex=0,kt.lastIndex=0,t}(e)}gatherStyles(e){const t=function(e){const t=[],o=e.querySelectorAll(\"style\");for(let e=0;e<o.length;e++){const r=o[e];Mt(r)?lt||(Vt(r),r.parentNode.removeChild(r)):(t.push(r.textContent),r.parentNode.removeChild(r))}return t.join(\"\").trim()}(e.content);if(t){const o=document.createElement(\"style\");return o.textContent=t,e.content.insertBefore(o,e.content.firstChild),o}return null}transformTemplate(e,t){void 0===e._gatheredStyle&&(e._gatheredStyle=this.gatherStyles(e));const o=e._gatheredStyle;return o?this.transformStyle(o,t):null}transformStyle(e,t=\"\"){let o=Pt(e);return this.transformRules(o,t),e.textContent=Et(o),o}transformCustomStyle(e){let t=Pt(e);return Tt(t,(e=>{\":root\"===e.selector&&(e.selector=\"html\"),this.transformRule(e)})),e.textContent=Et(t),t}transformRules(e,t){this._currentElement=t,Tt(e,(e=>{this.transformRule(e)})),this._currentElement=null}transformRule(e){e.cssText=this.transformCssText(e.parsedCssText,e),\":root\"===e.selector&&(e.selector=\":host > *\")}transformCssText(e,t){return e=e.replace(kt,((e,o,r,i)=>this._produceCssProperties(e,o,r,i,t))),this._consumeCssProperties(e,t)}_getInitialValueForProperty(e){return this._measureElement||(this._measureElement=document.createElement(\"meta\"),this._measureElement.setAttribute(\"apply-shim-measure\",\"\"),this._measureElement.style.all=\"initial\",document.head.appendChild(this._measureElement)),window.getComputedStyle(this._measureElement).getPropertyValue(e)}_fallbacksFromPreviousRules(e){let t=e;for(;t.parent;)t=t.parent;const o={};let r=!1;return Tt(t,(t=>{r=r||t===e,r||t.selector===e.selector&&Object.assign(o,this._cssTextToMap(t.parsedCssText))})),o}_consumeCssProperties(e,t){let o=null;for(;o=Lt.exec(e);){let r=o[0],i=o[1],n=o.index,a=n+r.indexOf(\"@apply\"),s=n+r.length,l=e.slice(0,a),d=e.slice(s),c=t?this._fallbacksFromPreviousRules(t):{};Object.assign(c,this._cssTextToMap(l));let p=this._atApplyToCssProperties(i,c);e=`${l}${p}${d}`,Lt.lastIndex=n+p.length}return e}_atApplyToCssProperties(e,t){e=e.replace(Dt,\"\");let o=[],r=this._map.get(e);if(r||(this._map.set(e,{}),r=this._map.get(e)),r){let i,n,a;this._currentElement&&(r.dependants[this._currentElement]=!0);const s=r.properties;for(i in s)a=t&&t[i],n=[i,\": var(\",e,\"_-_\",i],a&&n.push(\",\",a.replace(Bt,\"\")),n.push(\")\"),Bt.test(s[i])&&n.push(\" !important\"),o.push(n.join(\"\"))}return o.join(\"; \")}_replaceInitialOrInherit(e,t){let o=jt.exec(t);return o&&(t=o[1]?this._getInitialValueForProperty(e):\"apply-shim-inherit\"),t}_cssTextToMap(e,t=!1){let o,r,i=e.split(\";\"),n={};for(let e,a,s=0;s<i.length;s++)e=i[s],e&&(a=e.split(\":\"),a.length>1&&(o=a[0].trim(),r=a.slice(1).join(\":\"),t&&(r=this._replaceInitialOrInherit(o,r)),n[o]=r));return n}_invalidateMixinEntry(e){if(Ft)for(let t in e.dependants)t!==this._currentElement&&Ft(t)}_produceCssProperties(e,t,o,r,i){if(o&&zt(o,((e,t)=>{t&&this._map.get(t)&&(r=`@apply ${t};`)})),!r)return e;let n=this._consumeCssProperties(\"\"+r,i),a=e.slice(0,e.indexOf(\"--\")),s=this._cssTextToMap(n,!0),l=s,d=this._map.get(t),c=d&&d.properties;c?l=Object.assign(Object.create(c),s):this._map.set(t,l);let p,u,m=[],h=!1;for(p in l)u=s[p],void 0===u&&(u=\"initial\"),c&&!(p in c)&&(h=!0),m.push(`${t}_-_${p}: ${u}`);return h&&this._invalidateMixinEntry(d),d&&(d.properties=l),o&&(a=`${e};${a}`),`${a}${m.join(\"; \")};`}}Ut.prototype.detectMixin=Ut.prototype.detectMixin,Ut.prototype.transformStyle=Ut.prototype.transformStyle,Ut.prototype.transformCustomStyle=Ut.prototype.transformCustomStyle,Ut.prototype.transformRules=Ut.prototype.transformRules,Ut.prototype.transformRule=Ut.prototype.transformRule,Ut.prototype.transformTemplate=Ut.prototype.transformTemplate,Ut.prototype._separator=\"_-_\",Object.defineProperty(Ut.prototype,\"invalidCallback\",{get:()=>Ft,set(e){Ft=e}});const Zt={},qt=\"_applyShimCurrentVersion\",Gt=\"_applyShimNextVersion\",Kt=\"_applyShimValidatingVersion\",Yt=Promise.resolve();function Wt(e){let t=Zt[e];t&&function(e){e[qt]=e[qt]||0,e[Kt]=e[Kt]||0,e[Gt]=(e[Gt]||0)+1}(t)}function Xt(e){return e[qt]===e[Gt]}let Jt,Qt=null,eo=window.HTMLImports&&window.HTMLImports.whenReady||null;function to(e){requestAnimationFrame((function(){eo?eo(e):(Qt||(Qt=new Promise((e=>{Jt=e})),\"complete\"===document.readyState?Jt():document.addEventListener(\"readystatechange\",(()=>{\"complete\"===document.readyState&&Jt()}))),Qt.then((function(){e&&e()})))}))}const oo=\"__shadyCSSCachedStyle\";let ro=null,io=null;class no{constructor(){this.customStyles=[],this.enqueued=!1,to((()=>{window.ShadyCSS.flushCustomStyles&&window.ShadyCSS.flushCustomStyles()}))}enqueueDocumentValidation(){!this.enqueued&&io&&(this.enqueued=!0,to(io))}addCustomStyle(e){e.__seenByShadyCSS||(e.__seenByShadyCSS=!0,this.customStyles.push(e),this.enqueueDocumentValidation())}getStyleForCustomStyle(e){if(e[oo])return e[oo];let t;return t=e.getStyle?e.getStyle():e,t}processStyles(){const e=this.customStyles;for(let t=0;t<e.length;t++){const o=e[t];if(o[oo])continue;const r=this.getStyleForCustomStyle(o);if(r){const e=r.__appliedElement||r;ro&&ro(e),o[oo]=e}}return e}}no.prototype.addCustomStyle=no.prototype.addCustomStyle,no.prototype.getStyleForCustomStyle=no.prototype.getStyleForCustomStyle,no.prototype.processStyles=no.prototype.processStyles,Object.defineProperties(no.prototype,{transformCallback:{get:()=>ro,set(e){ro=e}},validateCallback:{get:()=>io,set(e){let t=!1;io||(t=!0),io=e,t&&this.enqueueDocumentValidation()}}});const ao=new Ut;class so{constructor(){this.customStyleInterface=null,ao.invalidCallback=Wt}ensure(){this.customStyleInterface||window.ShadyCSS.CustomStyleInterface&&(this.customStyleInterface=window.ShadyCSS.CustomStyleInterface,this.customStyleInterface.transformCallback=e=>{ao.transformCustomStyle(e)},this.customStyleInterface.validateCallback=()=>{requestAnimationFrame((()=>{this.customStyleInterface.enqueued&&this.flushCustomStyles()}))})}prepareTemplate(e,t){if(this.ensure(),It(e))return;Zt[t]=e;let o=ao.transformTemplate(e,t);e._styleAst=o}flushCustomStyles(){if(this.ensure(),!this.customStyleInterface)return;let e=this.customStyleInterface.processStyles();if(this.customStyleInterface.enqueued){for(let t=0;t<e.length;t++){let o=e[t],r=this.customStyleInterface.getStyleForCustomStyle(o);r&&ao.transformCustomStyle(r)}this.customStyleInterface.enqueued=!1}}styleSubtree(e,t){if(this.ensure(),t&&Ot(e,t),e.shadowRoot){this.styleElement(e);let t=e.shadowRoot.children||e.shadowRoot.childNodes;for(let e=0;e<t.length;e++)this.styleSubtree(t[e])}else{let t=e.children||e.childNodes;for(let e=0;e<t.length;e++)this.styleSubtree(t[e])}}styleElement(e){this.ensure();let{is:t}=function(e){let t=e.localName,o=\"\",r=\"\";return t?t.indexOf(\"-\")>-1?o=t:(r=t,o=e.getAttribute&&e.getAttribute(\"is\")||\"\"):(o=e.is,r=e.extends),{is:o,typeExtension:r}}(e),o=Zt[t];if((!o||!It(o))&&o&&!Xt(o)){(function(e){return!Xt(e)&&e[Kt]===e[Gt]})(o)||(this.prepareTemplate(o,t),function(e){e[Kt]=e[Gt],e._validating||(e._validating=!0,Yt.then((function(){e[qt]=e[Gt],e._validating=!1})))}(o));let r=e.shadowRoot;if(r){let e=r.querySelector(\"style\");e&&(e.__cssRules=o._styleAst,e.textContent=Et(o._styleAst))}}}styleDocument(e){this.ensure(),this.styleSubtree(document.body,e)}}if(!window.ShadyCSS||!window.ShadyCSS.ScopingShim){const e=new so;let t=window.ShadyCSS&&window.ShadyCSS.CustomStyleInterface;window.ShadyCSS={prepareTemplate(t,o,r){e.flushCustomStyles(),e.prepareTemplate(t,o)},prepareTemplateStyles(e,t,o){window.ShadyCSS.prepareTemplate(e,t,o)},prepareTemplateDom(e,t){},styleSubtree(t,o){e.flushCustomStyles(),e.styleSubtree(t,o)},styleElement(t){e.flushCustomStyles(),e.styleElement(t)},styleDocument(t){e.flushCustomStyles(),e.styleDocument(t)},getComputedStyleValue:(e,t)=>Rt(e,t),flushCustomStyles(){e.flushCustomStyles()},nativeCss:mt,nativeShadow:lt,cssBuild:ct,disableRuntime:ut},t&&(window.ShadyCSS.CustomStyleInterface=t)}window.ShadyCSS.ApplyShim=ao,window.JSCompiler_renameProperty=function(e,t){return e};let lo,co,po=/(url\\()([^)]*)(\\))/g,uo=/(^\\/[^\\/])|(^#)|(^[\\w-\\d]*:)/;function mo(e,t){if(e&&uo.test(e))return e;if(\"//\"===e)return e;if(void 0===lo){lo=!1;try{const e=new URL(\"b\",\"http://a\");e.pathname=\"c%20d\",lo=\"http://a/c%20d\"===e.href}catch(e){}}if(t||(t=document.baseURI||window.location.href),lo)try{return new URL(e,t).href}catch(t){return e}return co||(co=document.implementation.createHTMLDocument(\"temp\"),co.base=co.createElement(\"base\"),co.head.appendChild(co.base),co.anchor=co.createElement(\"a\"),co.body.appendChild(co.anchor)),co.base.href=t,co.anchor.href=e,co.anchor.href||e}function ho(e,t){return e.replace(po,(function(e,o,r,i){return o+\"'\"+mo(r.replace(/[\"']/g,\"\"),t)+\"'\"+i}))}function go(e){return e.substring(0,e.lastIndexOf(\"/\")+1)}const _o=!window.ShadyDOM||!window.ShadyDOM.inUse;Boolean(!window.ShadyCSS||window.ShadyCSS.nativeCss);const fo=_o&&\"adoptedStyleSheets\"in Document.prototype&&\"replaceSync\"in CSSStyleSheet.prototype&&(()=>{try{const e=new CSSStyleSheet;e.replaceSync(\"\");const t=document.createElement(\"div\");return t.attachShadow({mode:\"open\"}),t.shadowRoot.adoptedStyleSheets=[e],t.shadowRoot.adoptedStyleSheets[0]===e}catch(e){return!1}})();let yo=window.Polymer&&window.Polymer.rootPath||go(document.baseURI||window.location.href),bo=window.Polymer&&window.Polymer.sanitizeDOMValue||void 0,vo=window.Polymer&&window.Polymer.setPassiveTouchGestures||!1,Co=window.Polymer&&window.Polymer.strictTemplatePolicy||!1,Ao=window.Polymer&&window.Polymer.allowTemplateFromDomModule||!1,wo=window.Polymer&&window.Polymer.legacyOptimizations||!1,Ho=window.Polymer&&window.Polymer.legacyWarnings||!1,ko=window.Polymer&&window.Polymer.syncInitialRender||!1,Lo=window.Polymer&&window.Polymer.legacyUndefined||!1,So=window.Polymer&&window.Polymer.orderedComputed||!1,xo=window.Polymer&&window.Polymer.removeNestedTemplates||!1,Vo=window.Polymer&&window.Polymer.fastDomIf||!1,Mo=window.Polymer&&window.Polymer.suppressTemplateNotifications||!1,Eo=window.Polymer&&window.Polymer.legacyNoObservedAttributes||!1,Po=window.Polymer&&window.Polymer.useAdoptedStyleSheetsWithBuiltCSS||!1,To=0;const zo=function(e){let t=e.__mixinApplications;t||(t=new WeakMap,e.__mixinApplications=t);let o=To++;return function(r){let i=r.__mixinSet;if(i&&i[o])return r;let n=t,a=n.get(r);if(!a){a=e(r),n.set(r,a);let t=Object.create(a.__mixinSet||i||null);t[o]=!0,a.__mixinSet=t}return a}};let No={},Io={};function Oo(e,t){No[e]=Io[e.toLowerCase()]=t}function Ro(e){return No[e]||Io[e.toLowerCase()]}class Do extends HTMLElement{static get observedAttributes(){return[\"id\"]}static import(e,t){if(e){let o=Ro(e);return o&&t?o.querySelector(t):o}return null}attributeChangedCallback(e,t,o,r){t!==o&&this.register()}get assetpath(){if(!this.__assetpath){const e=window.HTMLImports&&HTMLImports.importForElement?HTMLImports.importForElement(this)||document:this.ownerDocument,t=mo(this.getAttribute(\"assetpath\")||\"\",e.baseURI);this.__assetpath=go(t)}return this.__assetpath}register(e){if(e=e||this.id){if(Co&&void 0!==Ro(e))throw Oo(e,null),new Error(`strictTemplatePolicy: dom-module ${e} re-registered`);this.id=e,Oo(e,this),(t=this).querySelector(\"style\")&&console.warn(\"dom-module %s has style outside template\",t.id)}var t}}Do.prototype.modules=No,customElements.define(\"dom-module\",Do);function jo(e){return Do.import(e)}function Bo(e){const t=ho((e.body?e.body:e).textContent,e.baseURI),o=document.createElement(\"style\");return o.textContent=t,o}function $o(e){const t=e.trim().split(/\\s+/),o=[];for(let e=0;e<t.length;e++)o.push(...Fo(t[e]));return o}function Fo(e){const t=jo(e);if(!t)return console.warn(\"Could not find style data in module named\",e),[];if(void 0===t._styles){const e=[];e.push(...Zo(t));const o=t.querySelector(\"template\");o&&e.push(...Uo(o,t.assetpath)),t._styles=e}return t._styles}function Uo(e,t){if(!e._styles){const o=[],r=e.content.querySelectorAll(\"style\");for(let e=0;e<r.length;e++){let i=r[e],n=i.getAttribute(\"include\");n&&o.push(...$o(n).filter((function(e,t,o){return o.indexOf(e)===t}))),t&&(i.textContent=ho(i.textContent,t)),o.push(i)}e._styles=o}return e._styles}function Zo(e){const t=[],o=e.querySelectorAll(\"link[rel=import][type~=css]\");for(let e=0;e<o.length;e++){let r=o[e];if(r.import){const e=r.import,o=r.hasAttribute(\"shady-unscoped\");if(o&&!e._unscopedStyle){const t=Bo(e);t.setAttribute(\"shady-unscoped\",\"\"),e._unscopedStyle=t}else e._style||(e._style=Bo(e));t.push(o?e._unscopedStyle:e._style)}}return t}function qo(e){let t=jo(e);if(t&&void 0===t._cssText){let e=function(e){let t=\"\",o=Zo(e);for(let e=0;e<o.length;e++)t+=o[e].textContent;return t}(t),o=t.querySelector(\"template\");o&&(e+=function(e,t){let o=\"\";const r=Uo(e,t);for(let e=0;e<r.length;e++){let t=r[e];t.parentNode&&t.parentNode.removeChild(t),o+=t.textContent}return o}(o,t.assetpath)),t._cssText=e||null}return t||console.warn(\"Could not find style data in module named\",e),t&&t._cssText||\"\"}const Go=window.ShadyDOM&&window.ShadyDOM.noPatch&&window.ShadyDOM.wrap?window.ShadyDOM.wrap:window.ShadyDOM?e=>ShadyDOM.patch(e):e=>e;function Ko(e){return e.indexOf(\".\")>=0}function Yo(e){let t=e.indexOf(\".\");return-1===t?e:e.slice(0,t)}function Wo(e,t){return 0===e.indexOf(t+\".\")}function Xo(e,t){return 0===t.indexOf(e+\".\")}function Jo(e,t,o){return t+o.slice(e.length)}function Qo(e){if(Array.isArray(e)){let t=[];for(let o=0;o<e.length;o++){let r=e[o].toString().split(\".\");for(let e=0;e<r.length;e++)t.push(r[e])}return t.join(\".\")}return e}function er(e){return Array.isArray(e)?Qo(e).split(\".\"):e.toString().split(\".\")}function tr(e,t,o){let r=e,i=er(t);for(let e=0;e<i.length;e++){if(!r)return;r=r[i[e]]}return o&&(o.path=i.join(\".\")),r}function or(e,t,o){let r=e,i=er(t),n=i[i.length-1];if(i.length>1){for(let e=0;e<i.length-1;e++){if(r=r[i[e]],!r)return}r[n]=o}else r[t]=o;return i.join(\".\")}const rr={},ir=/-[a-z]/g,nr=/([A-Z])/g;function ar(e){return rr[e]||(rr[e]=e.indexOf(\"-\")<0?e:e.replace(ir,(e=>e[1].toUpperCase())))}function sr(e){return rr[e]||(rr[e]=e.replace(nr,\"-$1\").toLowerCase())}let lr=0,dr=0,cr=[],pr=0,ur=!1,mr=document.createTextNode(\"\");new window.MutationObserver((function(){ur=!1;const e=cr.length;for(let t=0;t<e;t++){let e=cr[t];if(e)try{e()}catch(e){setTimeout((()=>{throw e}))}}cr.splice(0,e),dr+=e})).observe(mr,{characterData:!0});const hr={after:e=>({run:t=>window.setTimeout(t,e),cancel(e){window.clearTimeout(e)}}),run:(e,t)=>window.setTimeout(e,t),cancel(e){window.clearTimeout(e)}},gr={run:e=>window.requestAnimationFrame(e),cancel(e){window.cancelAnimationFrame(e)}},_r={run:e=>(ur||(ur=!0,mr.textContent=pr++),cr.push(e),lr++),cancel(e){const t=e-dr;if(t>=0){if(!cr[t])throw new Error(\"invalid async handle: \"+e);cr[t]=null}}},fr=_r,yr=zo((e=>class extends e{static createProperties(e){const t=this.prototype;for(let o in e)o in t||t._createPropertyAccessor(o)}static attributeNameForProperty(e){return e.toLowerCase()}static typeForProperty(e){}_createPropertyAccessor(e,t){this._addPropertyToAttributeMap(e),this.hasOwnProperty(JSCompiler_renameProperty(\"__dataHasAccessor\",this))||(this.__dataHasAccessor=Object.assign({},this.__dataHasAccessor)),this.__dataHasAccessor[e]||(this.__dataHasAccessor[e]=!0,this._definePropertyAccessor(e,t))}_addPropertyToAttributeMap(e){this.hasOwnProperty(JSCompiler_renameProperty(\"__dataAttributes\",this))||(this.__dataAttributes=Object.assign({},this.__dataAttributes));let t=this.__dataAttributes[e];return t||(t=this.constructor.attributeNameForProperty(e),this.__dataAttributes[t]=e),t}_definePropertyAccessor(e,t){Object.defineProperty(this,e,{get(){return this.__data[e]},set:t?function(){}:function(t){this._setPendingProperty(e,t,!0)&&this._invalidateProperties()}})}constructor(){super(),this.__dataEnabled=!1,this.__dataReady=!1,this.__dataInvalid=!1,this.__data={},this.__dataPending=null,this.__dataOld=null,this.__dataInstanceProps=null,this.__dataCounter=0,this.__serializing=!1,this._initializeProperties()}ready(){this.__dataReady=!0,this._flushProperties()}_initializeProperties(){for(let e in this.__dataHasAccessor)this.hasOwnProperty(e)&&(this.__dataInstanceProps=this.__dataInstanceProps||{},this.__dataInstanceProps[e]=this[e],delete this[e])}_initializeInstanceProperties(e){Object.assign(this,e)}_setProperty(e,t){this._setPendingProperty(e,t)&&this._invalidateProperties()}_getProperty(e){return this.__data[e]}_setPendingProperty(e,t,o){let r=this.__data[e],i=this._shouldPropertyChange(e,t,r);return i&&(this.__dataPending||(this.__dataPending={},this.__dataOld={}),this.__dataOld&&!(e in this.__dataOld)&&(this.__dataOld[e]=r),this.__data[e]=t,this.__dataPending[e]=t),i}_isPropertyPending(e){return!(!this.__dataPending||!this.__dataPending.hasOwnProperty(e))}_invalidateProperties(){!this.__dataInvalid&&this.__dataReady&&(this.__dataInvalid=!0,fr.run((()=>{this.__dataInvalid&&(this.__dataInvalid=!1,this._flushProperties())})))}_enableProperties(){this.__dataEnabled||(this.__dataEnabled=!0,this.__dataInstanceProps&&(this._initializeInstanceProperties(this.__dataInstanceProps),this.__dataInstanceProps=null),this.ready())}_flushProperties(){this.__dataCounter++;const e=this.__data,t=this.__dataPending,o=this.__dataOld;this._shouldPropertiesChange(e,t,o)&&(this.__dataPending=null,this.__dataOld=null,this._propertiesChanged(e,t,o)),this.__dataCounter--}_shouldPropertiesChange(e,t,o){return Boolean(t)}_propertiesChanged(e,t,o){}_shouldPropertyChange(e,t,o){return o!==t&&(o==o||t==t)}attributeChangedCallback(e,t,o,r){t!==o&&this._attributeToProperty(e,o),super.attributeChangedCallback&&super.attributeChangedCallback(e,t,o,r)}_attributeToProperty(e,t,o){if(!this.__serializing){const r=this.__dataAttributes,i=r&&r[e]||e;this[i]=this._deserializeValue(t,o||this.constructor.typeForProperty(i))}}_propertyToAttribute(e,t,o){this.__serializing=!0,o=arguments.length<3?this[e]:o,this._valueToNodeAttribute(this,o,t||this.constructor.attributeNameForProperty(e)),this.__serializing=!1}_valueToNodeAttribute(e,t,o){const r=this._serializeValue(t);\"class\"!==o&&\"name\"!==o&&\"slot\"!==o||(e=Go(e)),void 0===r?e.removeAttribute(o):e.setAttribute(o,r)}_serializeValue(e){return\"boolean\"==typeof e?e?\"\":void 0:null!=e?e.toString():void 0}_deserializeValue(e,t){switch(t){case Boolean:return null!==e;case Number:return Number(e);default:return e}}})),br={};let vr=HTMLElement.prototype;for(;vr;){let e=Object.getOwnPropertyNames(vr);for(let t=0;t<e.length;t++)br[e[t]]=!0;vr=Object.getPrototypeOf(vr)}const Cr=zo((e=>{const t=yr(e);return class extends t{static createPropertiesForAttributes(){let e=this.observedAttributes;for(let t=0;t<e.length;t++)this.prototype._createPropertyAccessor(ar(e[t]))}static attributeNameForProperty(e){return sr(e)}_initializeProperties(){this.__dataProto&&(this._initializeProtoProperties(this.__dataProto),this.__dataProto=null),super._initializeProperties()}_initializeProtoProperties(e){for(let t in e)this._setProperty(t,e[t])}_ensureAttribute(e,t){const o=this;o.hasAttribute(e)||this._valueToNodeAttribute(o,t,e)}_serializeValue(e){if(\"object\"==typeof e){if(e instanceof Date)return e.toString();if(e)try{return JSON.stringify(e)}catch(e){return\"\"}}return super._serializeValue(e)}_deserializeValue(e,t){let o;switch(t){case Object:try{o=JSON.parse(e)}catch(t){o=e}break;case Array:try{o=JSON.parse(e)}catch(t){o=null,console.warn(`Polymer::Attributes: couldn't decode Array as JSON: ${e}`)}break;case Date:o=isNaN(e)?String(e):Number(e),o=new Date(o);break;default:o=super._deserializeValue(e,t)}return o}_definePropertyAccessor(e,t){!function(e,t){if(!br[t]){let o=e[t];void 0!==o&&(e.__data?e._setPendingProperty(t,o):(e.__dataProto?e.hasOwnProperty(JSCompiler_renameProperty(\"__dataProto\",e))||(e.__dataProto=Object.create(e.__dataProto)):e.__dataProto={},e.__dataProto[t]=o))}}(this,e),super._definePropertyAccessor(e,t)}_hasAccessor(e){return this.__dataHasAccessor&&this.__dataHasAccessor[e]}_isPropertyPending(e){return Boolean(this.__dataPending&&e in this.__dataPending)}}})),Ar={\"dom-if\":!0,\"dom-repeat\":!0};let wr=!1,Hr=!1;function kr(e){(function(){if(!wr){wr=!0;const e=document.createElement(\"textarea\");e.placeholder=\"a\",Hr=e.placeholder===e.textContent}return Hr})()&&\"textarea\"===e.localName&&e.placeholder&&e.placeholder===e.textContent&&(e.textContent=null)}function Lr(e){let t=e.getAttribute(\"is\");if(t&&Ar[t]){let o=e;for(o.removeAttribute(\"is\"),e=o.ownerDocument.createElement(t),o.parentNode.replaceChild(e,o),e.appendChild(o);o.attributes.length;)e.setAttribute(o.attributes[0].name,o.attributes[0].value),o.removeAttribute(o.attributes[0].name)}return e}function Sr(e,t){let o=t.parentInfo&&Sr(e,t.parentInfo);if(!o)return e;for(let e=o.firstChild,r=0;e;e=e.nextSibling)if(t.parentIndex===r++)return e}function xr(e,t,o,r){r.id&&(t[r.id]=o)}function Vr(e,t,o){if(o.events&&o.events.length)for(let r,i=0,n=o.events;i<n.length&&(r=n[i]);i++)e._addMethodEventListenerToNode(t,r.name,r.value,e)}function Mr(e,t,o,r){o.templateInfo&&(t._templateInfo=o.templateInfo,t._parentTemplateInfo=r)}const Er=zo((e=>class extends e{static _parseTemplate(e,t){if(!e._templateInfo){let o=e._templateInfo={};o.nodeInfoList=[],o.nestedTemplate=Boolean(t),o.stripWhiteSpace=t&&t.stripWhiteSpace||e.hasAttribute(\"strip-whitespace\"),this._parseTemplateContent(e,o,{parent:null})}return e._templateInfo}static _parseTemplateContent(e,t,o){return this._parseTemplateNode(e.content,t,o)}static _parseTemplateNode(e,t,o){let r=!1,i=e;return\"template\"!=i.localName||i.hasAttribute(\"preserve-content\")?\"slot\"===i.localName&&(t.hasInsertionPoint=!0):r=this._parseTemplateNestedTemplate(i,t,o)||r,kr(i),i.firstChild&&this._parseTemplateChildNodes(i,t,o),i.hasAttributes&&i.hasAttributes()&&(r=this._parseTemplateNodeAttributes(i,t,o)||r),r||o.noted}static _parseTemplateChildNodes(e,t,o){if(\"script\"!==e.localName&&\"style\"!==e.localName)for(let r,i=e.firstChild,n=0;i;i=r){if(\"template\"==i.localName&&(i=Lr(i)),r=i.nextSibling,i.nodeType===Node.TEXT_NODE){let o=r;for(;o&&o.nodeType===Node.TEXT_NODE;)i.textContent+=o.textContent,r=o.nextSibling,e.removeChild(o),o=r;if(t.stripWhiteSpace&&!i.textContent.trim()){e.removeChild(i);continue}}let a={parentIndex:n,parentInfo:o};this._parseTemplateNode(i,t,a)&&(a.infoIndex=t.nodeInfoList.push(a)-1),i.parentNode&&n++}}static _parseTemplateNestedTemplate(e,t,o){let r=e,i=this._parseTemplate(r,t);return(i.content=r.content.ownerDocument.createDocumentFragment()).appendChild(r.content),o.templateInfo=i,!0}static _parseTemplateNodeAttributes(e,t,o){let r=!1,i=Array.from(e.attributes);for(let n,a=i.length-1;n=i[a];a--)r=this._parseTemplateNodeAttribute(e,t,o,n.name,n.value)||r;return r}static _parseTemplateNodeAttribute(e,t,o,r,i){return\"on-\"===r.slice(0,3)?(e.removeAttribute(r),o.events=o.events||[],o.events.push({name:r.slice(3),value:i}),!0):\"id\"===r&&(o.id=i,!0)}static _contentForTemplate(e){let t=e._templateInfo;return t&&t.content||e.content}_stampTemplate(e,t){e&&!e.content&&window.HTMLTemplateElement&&HTMLTemplateElement.decorate&&HTMLTemplateElement.decorate(e);let o=(t=t||this.constructor._parseTemplate(e)).nodeInfoList,r=t.content||e.content,i=document.importNode(r,!0);i.__noInsertionPoint=!t.hasInsertionPoint;let n=i.nodeList=new Array(o.length);i.$={};for(let e,r=0,a=o.length;r<a&&(e=o[r]);r++){let o=n[r]=Sr(i,e);xr(0,i.$,o,e),Mr(0,o,e,t),Vr(this,o,e)}return i}_addMethodEventListenerToNode(e,t,o,r){let i=function(e,t,o){return e=e._methodHost||e,function(t){e[o]?e[o](t,t.detail):console.warn(\"listener method `\"+o+\"` not defined\")}}(r=r||e,0,o);return this._addEventListenerToNode(e,t,i),i}_addEventListenerToNode(e,t,o){e.addEventListener(t,o)}_removeEventListenerFromNode(e,t,o){e.removeEventListener(t,o)}}));let Pr=0;const Tr=[],zr={COMPUTE:\"__computeEffects\",REFLECT:\"__reflectEffects\",NOTIFY:\"__notifyEffects\",PROPAGATE:\"__propagateEffects\",OBSERVE:\"__observeEffects\",READ_ONLY:\"__readOnly\"},Nr=/[A-Z]/;function Ir(e,t,o){let r=e[t];if(r){if(!e.hasOwnProperty(t)&&(r=e[t]=Object.create(e[t]),o))for(let e in r){let t=r[e],o=r[e]=Array(t.length);for(let e=0;e<t.length;e++)o[e]=t[e]}}else r=e[t]={};return r}function Or(e,t,o,r,i,n){if(t){let a=!1;const s=Pr++;for(let l in o){let d=t[i?Yo(l):l];if(d)for(let t,c=0,p=d.length;c<p&&(t=d[c]);c++)t.info&&t.info.lastRun===s||i&&!Dr(l,t.trigger)||(t.info&&(t.info.lastRun=s),t.fn(e,l,o,r,t.info,i,n),a=!0)}return a}return!1}function Rr(e,t,o,r,i,n,a,s){let l=!1,d=t[a?Yo(r):r];if(d)for(let t,c=0,p=d.length;c<p&&(t=d[c]);c++)t.info&&t.info.lastRun===o||a&&!Dr(r,t.trigger)||(t.info&&(t.info.lastRun=o),t.fn(e,r,i,n,t.info,a,s),l=!0);return l}function Dr(e,t){if(t){let o=t.name;return o==e||!(!t.structured||!Wo(o,e))||!(!t.wildcard||!Xo(o,e))}return!0}function jr(e,t,o,r,i){let n=\"string\"==typeof i.method?e[i.method]:i.method,a=i.property;n?n.call(e,e.__data[a],r[a]):i.dynamicFn||console.warn(\"observer method `\"+i.method+\"` not defined\")}function Br(e,t,o){let r=Yo(t);if(r!==t){return $r(e,sr(r)+\"-changed\",o[t],t),!0}return!1}function $r(e,t,o,r){let i={value:o,queueProperty:!0};r&&(i.path=r),Go(e).dispatchEvent(new CustomEvent(t,{detail:i}))}function Fr(e,t,o,r,i,n){let a=(n?Yo(t):t)!=t?t:null,s=a?tr(e,a):e.__data[t];a&&void 0===s&&(s=o[t]),$r(e,i.eventName,s,a)}function Ur(e,t,o,r,i){let n=e.__data[t];bo&&(n=bo(n,i.attrName,\"attribute\",e)),e._propertyToAttribute(t,i.attrName,n)}function Zr(e,t,o,r){let i=e[zr.COMPUTE];if(i)if(So){Pr++;const n=function(e){let t=e.constructor.__orderedComputedDeps;if(!t){t=new Map;const o=e[zr.COMPUTE];let r,{counts:i,ready:n,total:a}=function(e){const t=e.__computeInfo,o={},r=e[zr.COMPUTE],i=[];let n=0;for(let e in t){const r=t[e];n+=o[e]=r.args.filter((e=>!e.literal)).length+(r.dynamicFn?1:0)}for(let e in r)t[e]||i.push(e);return{counts:o,ready:i,total:n}}(e);for(;r=n.shift();){t.set(r,t.size);const e=o[r];e&&e.forEach((e=>{const t=e.info.methodInfo;--a,0==--i[t]&&n.push(t)}))}if(0!==a){const t=e;console.warn(`Computed graph for ${t.localName} incomplete; circular?`)}e.constructor.__orderedComputedDeps=t}return t}(e),a=[];for(let e in t)Gr(e,i,a,n,r);let s;for(;s=a.shift();)Kr(e,\"\",t,o,s)&&Gr(s.methodInfo,i,a,n,r);Object.assign(o,e.__dataOld),Object.assign(t,e.__dataPending),e.__dataPending=null}else{let n=t;for(;Or(e,i,n,o,r);)Object.assign(o,e.__dataOld),Object.assign(t,e.__dataPending),n=e.__dataPending,e.__dataPending=null}}const qr=(e,t,o)=>{let r=0,i=t.length-1,n=-1;for(;r<=i;){const a=r+i>>1,s=o.get(t[a].methodInfo)-o.get(e.methodInfo);if(s<0)r=a+1;else{if(!(s>0)){n=a;break}i=a-1}}n<0&&(n=i+1),t.splice(n,0,e)},Gr=(e,t,o,r,i)=>{const n=t[i?Yo(e):e];if(n)for(let t=0;t<n.length;t++){const a=n[t];a.info.lastRun===Pr||i&&!Dr(e,a.trigger)||(a.info.lastRun=Pr,qr(a.info,o,r))}};function Kr(e,t,o,r,i){let n=ti(e,t,o,r,i);if(n===Tr)return!1;let a=i.methodInfo;return e.__dataHasAccessor&&e.__dataHasAccessor[a]?e._setPendingProperty(a,n,!0):(e[a]=n,!1)}function Yr(e,t,o,r,i,n,a){o.bindings=o.bindings||[];let s={kind:r,target:i,parts:n,literal:a,isCompound:1!==n.length};if(o.bindings.push(s),function(e){return Boolean(e.target)&&\"attribute\"!=e.kind&&\"text\"!=e.kind&&!e.isCompound&&\"{\"===e.parts[0].mode}(s)){let{event:e,negate:t}=s.parts[0];s.listenerEvent=e||sr(i)+\"-changed\",s.listenerNegate=t}let l=t.nodeInfoList.length;for(let o=0;o<s.parts.length;o++){let r=s.parts[o];r.compoundIndex=o,Wr(e,t,s,r,l)}}function Wr(e,t,o,r,i){if(!r.literal)if(\"attribute\"===o.kind&&\"-\"===o.target[0])console.warn(\"Cannot set attribute \"+o.target+' because \"-\" is not a valid attribute starting character');else{let n=r.dependencies,a={index:i,binding:o,part:r,evaluator:e};for(let o=0;o<n.length;o++){let r=n[o];\"string\"==typeof r&&(r=ai(r),r.wildcard=!0),e._addTemplatePropertyEffect(t,r.rootProperty,{fn:Xr,info:a,trigger:r})}}}function Xr(e,t,o,r,i,n,a){let s=a[i.index],l=i.binding,d=i.part;if(n&&d.source&&t.length>d.source.length&&\"property\"==l.kind&&!l.isCompound&&s.__isPropertyEffectsClient&&s.__dataHasAccessor&&s.__dataHasAccessor[l.target]){let r=o[t];t=Jo(d.source,l.target,t),s._setPendingPropertyOrPath(t,r,!1,!0)&&e._enqueueClient(s)}else{let a=i.evaluator._evaluateBinding(e,d,t,o,r,n);a!==Tr&&function(e,t,o,r,i){i=function(e,t,o,r){if(o.isCompound){let i=e.__dataCompoundStorage[o.target];i[r.compoundIndex]=t,t=i.join(\"\")}\"attribute\"!==o.kind&&(\"textContent\"!==o.target&&(\"value\"!==o.target||\"input\"!==e.localName&&\"textarea\"!==e.localName)||(t=null==t?\"\":t));return t}(t,i,o,r),bo&&(i=bo(i,o.target,o.kind,t));if(\"attribute\"==o.kind)e._valueToNodeAttribute(t,i,o.target);else{let r=o.target;t.__isPropertyEffectsClient&&t.__dataHasAccessor&&t.__dataHasAccessor[r]?t[zr.READ_ONLY]&&t[zr.READ_ONLY][r]||t._setPendingProperty(r,i)&&e._enqueueClient(t):e._setUnmanagedPropertyToNode(t,r,i)}}(e,s,l,d,a)}}function Jr(e,t){if(t.isCompound){let o=e.__dataCompoundStorage||(e.__dataCompoundStorage={}),r=t.parts,i=new Array(r.length);for(let e=0;e<r.length;e++)i[e]=r[e].literal;let n=t.target;o[n]=i,t.literal&&\"property\"==t.kind&&(\"className\"===n&&(e=Go(e)),e[n]=t.literal)}}function Qr(e,t,o){if(o.listenerEvent){let r=o.parts[0];e.addEventListener(o.listenerEvent,(function(e){!function(e,t,o,r,i){let n,a=e.detail,s=a&&a.path;s?(r=Jo(o,r,s),n=a&&a.value):n=e.currentTarget[o],n=i?!n:n,t[zr.READ_ONLY]&&t[zr.READ_ONLY][r]||!t._setPendingPropertyOrPath(r,n,!0,Boolean(s))||a&&a.queueProperty||t._invalidateProperties()}(e,t,o.target,r.source,r.negate)}))}}function ei(e,t,o,r,i,n){n=t.static||n&&(\"object\"!=typeof n||n[t.methodName]);let a={methodName:t.methodName,args:t.args,methodInfo:i,dynamicFn:n};for(let i,n=0;n<t.args.length&&(i=t.args[n]);n++)i.literal||e._addPropertyEffect(i.rootProperty,o,{fn:r,info:a,trigger:i});return n&&e._addPropertyEffect(t.methodName,o,{fn:r,info:a}),a}function ti(e,t,o,r,i){let n=e._methodHost||e,a=n[i.methodName];if(a){let r=e._marshalArgs(i.args,t,o);return r===Tr?Tr:a.apply(n,r)}i.dynamicFn||console.warn(\"method `\"+i.methodName+\"` not defined\")}const oi=[],ri=new RegExp(\"(\\\\[\\\\[|{{)\\\\s*(?:(!)\\\\s*)?((?:[a-zA-Z_$][\\\\w.:$\\\\-*]*)\\\\s*(?:\\\\(\\\\s*(?:(?:(?:((?:[a-zA-Z_$][\\\\w.:$\\\\-*]*)|(?:[-+]?[0-9]*\\\\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|(?:(?:'(?:[^'\\\\\\\\]|\\\\\\\\.)*')|(?:\\\"(?:[^\\\"\\\\\\\\]|\\\\\\\\.)*\\\")))\\\\s*)(?:,\\\\s*(?:((?:[a-zA-Z_$][\\\\w.:$\\\\-*]*)|(?:[-+]?[0-9]*\\\\.?[0-9]+(?:[eE][-+]?[0-9]+)?)|(?:(?:'(?:[^'\\\\\\\\]|\\\\\\\\.)*')|(?:\\\"(?:[^\\\"\\\\\\\\]|\\\\\\\\.)*\\\")))\\\\s*))*)?)\\\\)\\\\s*)?)(?:]]|}})\",\"g\");function ii(e){let t=\"\";for(let o=0;o<e.length;o++){t+=e[o].literal||\"\"}return t}function ni(e){let t=e.match(/([^\\s]+?)\\(([\\s\\S]*)\\)/);if(t){let e={methodName:t[1],static:!0,args:oi};if(t[2].trim()){return function(e,t){return t.args=e.map((function(e){let o=ai(e);return o.literal||(t.static=!1),o}),this),t}(t[2].replace(/\\\\,/g,\"&comma;\").split(\",\"),e)}return e}return null}function ai(e){let t=e.trim().replace(/&comma;/g,\",\").replace(/\\\\(.)/g,\"$1\"),o={name:t,value:\"\",literal:!1},r=t[0];switch(\"-\"===r&&(r=t[1]),r>=\"0\"&&r<=\"9\"&&(r=\"#\"),r){case\"'\":case'\"':o.value=t.slice(1,-1),o.literal=!0;break;case\"#\":o.value=Number(t),o.literal=!0}return o.literal||(o.rootProperty=Yo(t),o.structured=Ko(t),o.structured&&(o.wildcard=\".*\"==t.slice(-2),o.wildcard&&(o.name=t.slice(0,-2)))),o}function si(e,t,o){let r=tr(e,o);return void 0===r&&(r=t[o]),r}function li(e,t,o,r){const i={indexSplices:r};Lo&&!e._overrideLegacyUndefined&&(t.splices=i),e.notifyPath(o+\".splices\",i),e.notifyPath(o+\".length\",t.length),Lo&&!e._overrideLegacyUndefined&&(i.indexSplices=[])}function di(e,t,o,r,i,n){li(e,t,o,[{index:r,addedCount:i,removed:n,object:t,type:\"splice\"}])}const ci=zo((e=>{const t=Er(Cr(e));return class extends t{constructor(){super(),this.__isPropertyEffectsClient=!0,this.__dataClientsReady,this.__dataPendingClients,this.__dataToNotify,this.__dataLinkedPaths,this.__dataHasPaths,this.__dataCompoundStorage,this.__dataHost,this.__dataTemp,this.__dataClientsInitialized,this.__data,this.__dataPending,this.__dataOld,this.__computeEffects,this.__computeInfo,this.__reflectEffects,this.__notifyEffects,this.__propagateEffects,this.__observeEffects,this.__readOnly,this.__templateInfo,this._overrideLegacyUndefined}get PROPERTY_EFFECT_TYPES(){return zr}_initializeProperties(){super._initializeProperties(),this._registerHost(),this.__dataClientsReady=!1,this.__dataPendingClients=null,this.__dataToNotify=null,this.__dataLinkedPaths=null,this.__dataHasPaths=!1,this.__dataCompoundStorage=this.__dataCompoundStorage||null,this.__dataHost=this.__dataHost||null,this.__dataTemp={},this.__dataClientsInitialized=!1}_registerHost(){if(pi.length){let e=pi[pi.length-1];e._enqueueClient(this),this.__dataHost=e}}_initializeProtoProperties(e){this.__data=Object.create(e),this.__dataPending=Object.create(e),this.__dataOld={}}_initializeInstanceProperties(e){let t=this[zr.READ_ONLY];for(let o in e)t&&t[o]||(this.__dataPending=this.__dataPending||{},this.__dataOld=this.__dataOld||{},this.__data[o]=this.__dataPending[o]=e[o])}_addPropertyEffect(e,t,o){this._createPropertyAccessor(e,t==zr.READ_ONLY);let r=Ir(this,t,!0)[e];r||(r=this[t][e]=[]),r.push(o)}_removePropertyEffect(e,t,o){let r=Ir(this,t,!0)[e],i=r.indexOf(o);i>=0&&r.splice(i,1)}_hasPropertyEffect(e,t){let o=this[t];return Boolean(o&&o[e])}_hasReadOnlyEffect(e){return this._hasPropertyEffect(e,zr.READ_ONLY)}_hasNotifyEffect(e){return this._hasPropertyEffect(e,zr.NOTIFY)}_hasReflectEffect(e){return this._hasPropertyEffect(e,zr.REFLECT)}_hasComputedEffect(e){return this._hasPropertyEffect(e,zr.COMPUTE)}_setPendingPropertyOrPath(e,t,o,r){if(r||Yo(Array.isArray(e)?e[0]:e)!==e){if(!r){let o=tr(this,e);if(!(e=or(this,e,t))||!super._shouldPropertyChange(e,t,o))return!1}if(this.__dataHasPaths=!0,this._setPendingProperty(e,t,o))return function(e,t,o){let r=e.__dataLinkedPaths;if(r){let i;for(let n in r){let a=r[n];Xo(n,t)?(i=Jo(n,a,t),e._setPendingPropertyOrPath(i,o,!0,!0)):Xo(a,t)&&(i=Jo(a,n,t),e._setPendingPropertyOrPath(i,o,!0,!0))}}}(this,e,t),!0}else{if(this.__dataHasAccessor&&this.__dataHasAccessor[e])return this._setPendingProperty(e,t,o);this[e]=t}return!1}_setUnmanagedPropertyToNode(e,t,o){o===e[t]&&\"object\"!=typeof o||(\"className\"===t&&(e=Go(e)),e[t]=o)}_setPendingProperty(e,t,o){let r=this.__dataHasPaths&&Ko(e),i=r?this.__dataTemp:this.__data;return!!this._shouldPropertyChange(e,t,i[e])&&(this.__dataPending||(this.__dataPending={},this.__dataOld={}),e in this.__dataOld||(this.__dataOld[e]=this.__data[e]),r?this.__dataTemp[e]=t:this.__data[e]=t,this.__dataPending[e]=t,(r||this[zr.NOTIFY]&&this[zr.NOTIFY][e])&&(this.__dataToNotify=this.__dataToNotify||{},this.__dataToNotify[e]=o),!0)}_setProperty(e,t){this._setPendingProperty(e,t,!0)&&this._invalidateProperties()}_invalidateProperties(){this.__dataReady&&this._flushProperties()}_enqueueClient(e){this.__dataPendingClients=this.__dataPendingClients||[],e!==this&&this.__dataPendingClients.push(e)}_flushClients(){this.__dataClientsReady?this.__enableOrFlushClients():(this.__dataClientsReady=!0,this._readyClients(),this.__dataReady=!0)}__enableOrFlushClients(){let e=this.__dataPendingClients;if(e){this.__dataPendingClients=null;for(let t=0;t<e.length;t++){let o=e[t];o.__dataEnabled?o.__dataPending&&o._flushProperties():o._enableProperties()}}}_readyClients(){this.__enableOrFlushClients()}setProperties(e,t){for(let o in e)!t&&this[zr.READ_ONLY]&&this[zr.READ_ONLY][o]||this._setPendingPropertyOrPath(o,e[o],!0);this._invalidateProperties()}ready(){this._flushProperties(),this.__dataClientsReady||this._flushClients(),this.__dataPending&&this._flushProperties()}_propertiesChanged(e,t,o){let r,i=this.__dataHasPaths;this.__dataHasPaths=!1,Zr(this,t,o,i),r=this.__dataToNotify,this.__dataToNotify=null,this._propagatePropertyChanges(t,o,i),this._flushClients(),Or(this,this[zr.REFLECT],t,o,i),Or(this,this[zr.OBSERVE],t,o,i),r&&function(e,t,o,r,i){let n,a,s=e[zr.NOTIFY],l=Pr++;for(let a in t)t[a]&&(s&&Rr(e,s,l,a,o,r,i)||i&&Br(e,a,o))&&(n=!0);n&&(a=e.__dataHost)&&a._invalidateProperties&&a._invalidateProperties()}(this,r,t,o,i),1==this.__dataCounter&&(this.__dataTemp={})}_propagatePropertyChanges(e,t,o){this[zr.PROPAGATE]&&Or(this,this[zr.PROPAGATE],e,t,o),this.__templateInfo&&this._runEffectsForTemplate(this.__templateInfo,e,t,o)}_runEffectsForTemplate(e,t,o,r){const i=(t,r)=>{Or(this,e.propertyEffects,t,o,r,e.nodeList);for(let i=e.firstChild;i;i=i.nextSibling)this._runEffectsForTemplate(i,t,o,r)};e.runEffects?e.runEffects(i,t,r):i(t,r)}linkPaths(e,t){e=Qo(e),t=Qo(t),this.__dataLinkedPaths=this.__dataLinkedPaths||{},this.__dataLinkedPaths[e]=t}unlinkPaths(e){e=Qo(e),this.__dataLinkedPaths&&delete this.__dataLinkedPaths[e]}notifySplices(e,t){let o={path:\"\"};li(this,tr(this,e,o),o.path,t)}get(e,t){return tr(t||this,e)}set(e,t,o){o?or(o,e,t):this[zr.READ_ONLY]&&this[zr.READ_ONLY][e]||this._setPendingPropertyOrPath(e,t,!0)&&this._invalidateProperties()}push(e,...t){let o={path:\"\"},r=tr(this,e,o),i=r.length,n=r.push(...t);return t.length&&di(this,r,o.path,i,t.length,[]),n}pop(e){let t={path:\"\"},o=tr(this,e,t),r=Boolean(o.length),i=o.pop();return r&&di(this,o,t.path,o.length,0,[i]),i}splice(e,t,o,...r){let i,n={path:\"\"},a=tr(this,e,n);return t<0?t=a.length-Math.floor(-t):t&&(t=Math.floor(t)),i=2===arguments.length?a.splice(t):a.splice(t,o,...r),(r.length||i.length)&&di(this,a,n.path,t,r.length,i),i}shift(e){let t={path:\"\"},o=tr(this,e,t),r=Boolean(o.length),i=o.shift();return r&&di(this,o,t.path,0,0,[i]),i}unshift(e,...t){let o={path:\"\"},r=tr(this,e,o),i=r.unshift(...t);return t.length&&di(this,r,o.path,0,t.length,[]),i}notifyPath(e,t){let o;if(1==arguments.length){let r={path:\"\"};t=tr(this,e,r),o=r.path}else o=Array.isArray(e)?Qo(e):e;this._setPendingPropertyOrPath(o,t,!0,!0)&&this._invalidateProperties()}_createReadOnlyProperty(e,t){var o;this._addPropertyEffect(e,zr.READ_ONLY),t&&(this[\"_set\"+(o=e,o[0].toUpperCase()+o.substring(1))]=function(t){this._setProperty(e,t)})}_createPropertyObserver(e,t,o){let r={property:e,method:t,dynamicFn:Boolean(o)};this._addPropertyEffect(e,zr.OBSERVE,{fn:jr,info:r,trigger:{name:e}}),o&&this._addPropertyEffect(t,zr.OBSERVE,{fn:jr,info:r,trigger:{name:t}})}_createMethodObserver(e,t){let o=ni(e);if(!o)throw new Error(\"Malformed observer expression '\"+e+\"'\");ei(this,o,zr.OBSERVE,ti,null,t)}_createNotifyingProperty(e){this._addPropertyEffect(e,zr.NOTIFY,{fn:Fr,info:{eventName:sr(e)+\"-changed\",property:e}})}_createReflectedProperty(e){let t=this.constructor.attributeNameForProperty(e);\"-\"===t[0]?console.warn(\"Property \"+e+\" cannot be reflected to attribute \"+t+' because \"-\" is not a valid starting attribute name. Use a lowercase first letter for the property instead.'):this._addPropertyEffect(e,zr.REFLECT,{fn:Ur,info:{attrName:t}})}_createComputedProperty(e,t,o){let r=ni(t);if(!r)throw new Error(\"Malformed computed expression '\"+t+\"'\");const i=ei(this,r,zr.COMPUTE,Kr,e,o);Ir(this,\"__computeInfo\")[e]=i}_marshalArgs(e,t,o){const r=this.__data,i=[];for(let n=0,a=e.length;n<a;n++){let{name:a,structured:s,wildcard:l,value:d,literal:c}=e[n];if(!c)if(l){const e=Xo(a,t),i=si(r,o,e?t:a);d={path:e?t:a,value:i,base:e?tr(r,a):i}}else d=s?si(r,o,a):r[a];if(Lo&&!this._overrideLegacyUndefined&&void 0===d&&e.length>1)return Tr;i[n]=d}return i}static addPropertyEffect(e,t,o){this.prototype._addPropertyEffect(e,t,o)}static createPropertyObserver(e,t,o){this.prototype._createPropertyObserver(e,t,o)}static createMethodObserver(e,t){this.prototype._createMethodObserver(e,t)}static createNotifyingProperty(e){this.prototype._createNotifyingProperty(e)}static createReadOnlyProperty(e,t){this.prototype._createReadOnlyProperty(e,t)}static createReflectedProperty(e){this.prototype._createReflectedProperty(e)}static createComputedProperty(e,t,o){this.prototype._createComputedProperty(e,t,o)}static bindTemplate(e){return this.prototype._bindTemplate(e)}_bindTemplate(e,t){let o=this.constructor._parseTemplate(e),r=this.__preBoundTemplateInfo==o;if(!r)for(let e in o.propertyEffects)this._createPropertyAccessor(e);if(t)if(o=Object.create(o),o.wasPreBound=r,this.__templateInfo){const t=e._parentTemplateInfo||this.__templateInfo,r=t.lastChild;o.parent=t,t.lastChild=o,o.previousSibling=r,r?r.nextSibling=o:t.firstChild=o}else this.__templateInfo=o;else this.__preBoundTemplateInfo=o;return o}static _addTemplatePropertyEffect(e,t,o){(e.hostProps=e.hostProps||{})[t]=!0;let r=e.propertyEffects=e.propertyEffects||{};(r[t]=r[t]||[]).push(o)}_stampTemplate(e,t){t=t||this._bindTemplate(e,!0),pi.push(this);let o=super._stampTemplate(e,t);if(pi.pop(),t.nodeList=o.nodeList,!t.wasPreBound){let e=t.childNodes=[];for(let t=o.firstChild;t;t=t.nextSibling)e.push(t)}return o.templateInfo=t,function(e,t){let{nodeList:o,nodeInfoList:r}=t;if(r.length)for(let t=0;t<r.length;t++){let i=r[t],n=o[t],a=i.bindings;if(a)for(let t=0;t<a.length;t++){let o=a[t];Jr(n,o),Qr(n,e,o)}n.__dataHost=e}}(this,t),this.__dataClientsReady&&(this._runEffectsForTemplate(t,this.__data,null,!1),this._flushClients()),o}_removeBoundDom(e){const t=e.templateInfo,{previousSibling:o,nextSibling:r,parent:i}=t;o?o.nextSibling=r:i&&(i.firstChild=r),r?r.previousSibling=o:i&&(i.lastChild=o),t.nextSibling=t.previousSibling=null;let n=t.childNodes;for(let e=0;e<n.length;e++){let t=n[e];Go(Go(t).parentNode).removeChild(t)}}static _parseTemplateNode(e,o,r){let i=t._parseTemplateNode.call(this,e,o,r);if(e.nodeType===Node.TEXT_NODE){let t=this._parseBindings(e.textContent,o);t&&(e.textContent=ii(t)||\" \",Yr(this,o,r,\"text\",\"textContent\",t),i=!0)}return i}static _parseTemplateNodeAttribute(e,o,r,i,n){let a=this._parseBindings(n,o);if(a){let t=i,n=\"property\";Nr.test(i)?n=\"attribute\":\"$\"==i[i.length-1]&&(i=i.slice(0,-1),n=\"attribute\");let s=ii(a);return s&&\"attribute\"==n&&(\"class\"==i&&e.hasAttribute(\"class\")&&(s+=\" \"+e.getAttribute(i)),e.setAttribute(i,s)),\"attribute\"==n&&\"disable-upgrade$\"==t&&e.setAttribute(i,\"\"),\"input\"===e.localName&&\"value\"===t&&e.setAttribute(t,\"\"),e.removeAttribute(t),\"property\"===n&&(i=ar(i)),Yr(this,o,r,n,i,a,s),!0}return t._parseTemplateNodeAttribute.call(this,e,o,r,i,n)}static _parseTemplateNestedTemplate(e,o,r){let i=t._parseTemplateNestedTemplate.call(this,e,o,r);const n=e.parentNode,a=r.templateInfo,s=\"dom-if\"===n.localName,l=\"dom-repeat\"===n.localName;xo&&(s||l)&&(n.removeChild(e),(r=r.parentInfo).templateInfo=a,r.noted=!0,i=!1);let d=a.hostProps;if(Vo&&s)d&&(o.hostProps=Object.assign(o.hostProps||{},d),xo||(r.parentInfo.noted=!0));else{let e=\"{\";for(let t in d){Yr(this,o,r,\"property\",\"_host_\"+t,[{mode:e,source:t,dependencies:[t],hostProp:!0}])}}return i}static _parseBindings(e,t){let o,r=[],i=0;for(;null!==(o=ri.exec(e));){o.index>i&&r.push({literal:e.slice(i,o.index)});let n=o[1][0],a=Boolean(o[2]),s=o[3].trim(),l=!1,d=\"\",c=-1;\"{\"==n&&(c=s.indexOf(\"::\"))>0&&(d=s.substring(c+2),s=s.substring(0,c),l=!0);let p=ni(s),u=[];if(p){let{args:e,methodName:o}=p;for(let t=0;t<e.length;t++){let o=e[t];o.literal||u.push(o)}let r=t.dynamicFns;(r&&r[o]||p.static)&&(u.push(o),p.dynamicFn=!0)}else u.push(s);r.push({source:s,mode:n,negate:a,customEvent:l,signature:p,dependencies:u,event:d}),i=ri.lastIndex}if(i&&i<e.length){let t=e.substring(i);t&&r.push({literal:t})}return r.length?r:null}static _evaluateBinding(e,t,o,r,i,n){let a;return a=t.signature?ti(e,o,r,0,t.signature):o!=t.source?tr(e,t.source):n&&Ko(o)?tr(e,o):e.__data[o],t.negate&&(a=!a),a}}})),pi=[];const ui=zo((e=>{const t=yr(e);function o(e){const t=Object.getPrototypeOf(e);return t.prototype instanceof i?t:null}function r(e){if(!e.hasOwnProperty(JSCompiler_renameProperty(\"__ownProperties\",e))){let t=null;if(e.hasOwnProperty(JSCompiler_renameProperty(\"properties\",e))){const o=e.properties;o&&(t=function(e){const t={};for(let o in e){const r=e[o];t[o]=\"function\"==typeof r?{type:r}:r}return t}(o))}e.__ownProperties=t}return e.__ownProperties}class i extends t{static get observedAttributes(){if(!this.hasOwnProperty(JSCompiler_renameProperty(\"__observedAttributes\",this))){this.prototype;const e=this._properties;this.__observedAttributes=e?Object.keys(e).map((e=>this.prototype._addPropertyToAttributeMap(e))):[]}return this.__observedAttributes}static finalize(){if(!this.hasOwnProperty(JSCompiler_renameProperty(\"__finalized\",this))){const e=o(this);e&&e.finalize(),this.__finalized=!0,this._finalizeClass()}}static _finalizeClass(){const e=r(this);e&&this.createProperties(e)}static get _properties(){if(!this.hasOwnProperty(JSCompiler_renameProperty(\"__properties\",this))){const e=o(this);this.__properties=Object.assign({},e&&e._properties,r(this))}return this.__properties}static typeForProperty(e){const t=this._properties[e];return t&&t.type}_initializeProperties(){this.constructor.finalize(),super._initializeProperties()}connectedCallback(){super.connectedCallback&&super.connectedCallback(),this._enableProperties()}disconnectedCallback(){super.disconnectedCallback&&super.disconnectedCallback()}}return i})),mi=window.ShadyCSS&&window.ShadyCSS.cssBuild,hi=zo((e=>{const t=ui(ci(e));function o(e,t,o,r){o.computed&&(o.readOnly=!0),o.computed&&(e._hasReadOnlyEffect(t)?console.warn(`Cannot redefine computed property '${t}'.`):e._createComputedProperty(t,o.computed,r)),o.readOnly&&!e._hasReadOnlyEffect(t)?e._createReadOnlyProperty(t,!o.computed):!1===o.readOnly&&e._hasReadOnlyEffect(t)&&console.warn(`Cannot make readOnly property '${t}' non-readOnly.`),o.reflectToAttribute&&!e._hasReflectEffect(t)?e._createReflectedProperty(t):!1===o.reflectToAttribute&&e._hasReflectEffect(t)&&console.warn(`Cannot make reflected property '${t}' non-reflected.`),o.notify&&!e._hasNotifyEffect(t)?e._createNotifyingProperty(t):!1===o.notify&&e._hasNotifyEffect(t)&&console.warn(`Cannot make notify property '${t}' non-notify.`),o.observer&&e._createPropertyObserver(t,o.observer,r[o.observer]),e._addPropertyToAttributeMap(t)}function r(e,t,o,r){if(!mi){const i=t.content.querySelectorAll(\"style\"),n=Uo(t),a=function(e){let t=jo(e);return t?Zo(t):[]}(o),s=t.content.firstElementChild;for(let o=0;o<a.length;o++){let i=a[o];i.textContent=e._processStyleText(i.textContent,r),t.content.insertBefore(i,s)}let l=0;for(let t=0;t<n.length;t++){let o=n[t],a=i[l];a!==o?(o=o.cloneNode(!0),a.parentNode.insertBefore(o,a)):l++,o.textContent=e._processStyleText(o.textContent,r)}}if(window.ShadyCSS&&window.ShadyCSS.prepareTemplate(t,o),Po&&mi&&fo){const o=t.content.querySelectorAll(\"style\");if(o){let t=\"\";Array.from(o).forEach((e=>{t+=e.textContent,e.parentNode.removeChild(e)})),e._styleSheet=new CSSStyleSheet,e._styleSheet.replaceSync(t)}}}return class extends t{static get polymerElementVersion(){return\"3.4.1\"}static _finalizeClass(){t._finalizeClass.call(this);const e=((o=this).hasOwnProperty(JSCompiler_renameProperty(\"__ownObservers\",o))||(o.__ownObservers=o.hasOwnProperty(JSCompiler_renameProperty(\"observers\",o))?o.observers:null),o.__ownObservers);var o;e&&this.createObservers(e,this._properties),this._prepareTemplate()}static _prepareTemplate(){let e=this.template;e&&(\"string\"==typeof e?(console.error(\"template getter must return HTMLTemplateElement\"),e=null):wo||(e=e.cloneNode(!0))),this.prototype._template=e}static createProperties(e){for(let t in e)o(this.prototype,t,e[t],e)}static createObservers(e,t){const o=this.prototype;for(let r=0;r<e.length;r++)o._createMethodObserver(e[r],t)}static get template(){if(!this.hasOwnProperty(JSCompiler_renameProperty(\"_template\",this))){const e=this.prototype.hasOwnProperty(JSCompiler_renameProperty(\"_template\",this.prototype))?this.prototype._template:void 0;this._template=void 0!==e?e:this.hasOwnProperty(JSCompiler_renameProperty(\"is\",this))&&function(e){let t=null;if(e&&(!Co||Ao)&&(t=Do.import(e,\"template\"),Co&&!t))throw new Error(`strictTemplatePolicy: expecting dom-module or null template for ${e}`);return t}(this.is)||Object.getPrototypeOf(this.prototype).constructor.template}return this._template}static set template(e){this._template=e}static get importPath(){if(!this.hasOwnProperty(JSCompiler_renameProperty(\"_importPath\",this))){const e=this.importMeta;if(e)this._importPath=go(e.url);else{const e=Do.import(this.is);this._importPath=e&&e.assetpath||Object.getPrototypeOf(this.prototype).constructor.importPath}}return this._importPath}constructor(){super(),this._template,this._importPath,this.rootPath,this.importPath,this.root,this.$}_initializeProperties(){this.constructor.finalize(),this.constructor._finalizeTemplate(this.localName),super._initializeProperties(),this.rootPath=yo,this.importPath=this.constructor.importPath;let e=function(e){if(!e.hasOwnProperty(JSCompiler_renameProperty(\"__propertyDefaults\",e))){e.__propertyDefaults=null;let t=e._properties;for(let o in t){let r=t[o];\"value\"in r&&(e.__propertyDefaults=e.__propertyDefaults||{},e.__propertyDefaults[o]=r)}}return e.__propertyDefaults}(this.constructor);if(e)for(let t in e){let o=e[t];if(this._canApplyPropertyDefault(t)){let e=\"function\"==typeof o.value?o.value.call(this):o.value;this._hasAccessor(t)?this._setPendingProperty(t,e,!0):this[t]=e}}}_canApplyPropertyDefault(e){return!this.hasOwnProperty(e)}static _processStyleText(e,t){return ho(e,t)}static _finalizeTemplate(e){const t=this.prototype._template;if(t&&!t.__polymerFinalized){t.__polymerFinalized=!0;const o=this.importPath;r(this,t,e,o?mo(o):\"\"),this.prototype._bindTemplate(t)}}connectedCallback(){window.ShadyCSS&&this._template&&window.ShadyCSS.styleElement(this),super.connectedCallback()}ready(){this._template&&(this.root=this._stampTemplate(this._template),this.$=this.root.$),super.ready()}_readyClients(){this._template&&(this.root=this._attachDom(this.root)),super._readyClients()}_attachDom(e){const t=Go(this);if(t.attachShadow)return e?(t.shadowRoot||(t.attachShadow({mode:\"open\",shadyUpgradeFragment:e}),t.shadowRoot.appendChild(e),this.constructor._styleSheet&&(t.shadowRoot.adoptedStyleSheets=[this.constructor._styleSheet])),ko&&window.ShadyDOM&&window.ShadyDOM.flushInitial(t.shadowRoot),t.shadowRoot):null;throw new Error(\"ShadowDOM not available. PolymerElement can create dom as children instead of in ShadowDOM by setting `this.root = this;` before `ready`.\")}updateStyles(e){window.ShadyCSS&&window.ShadyCSS.styleSubtree(this,e)}resolveUrl(e,t){return!t&&this.importPath&&(t=mo(this.importPath)),mo(e,t)}static _parseTemplateContent(e,o,r){return o.dynamicFns=o.dynamicFns||this._properties,t._parseTemplateContent.call(this,e,o,r)}static _addTemplatePropertyEffect(e,o,r){return!Ho||o in this._properties||r.info.part.signature&&r.info.part.signature.static||r.info.part.hostProp||e.nestedTemplate||console.warn(`Property '${o}' used in template but not declared in 'properties'; attribute will not be observed.`),t._addTemplatePropertyEffect.call(this,e,o,r)}}}));class gi{constructor(){this._asyncModule=null,this._callback=null,this._timer=null}setConfig(e,t){this._asyncModule=e,this._callback=t,this._timer=this._asyncModule.run((()=>{this._timer=null,_i.delete(this),this._callback()}))}cancel(){this.isActive()&&(this._cancelAsync(),_i.delete(this))}_cancelAsync(){this.isActive()&&(this._asyncModule.cancel(this._timer),this._timer=null)}flush(){this.isActive()&&(this.cancel(),this._callback())}isActive(){return null!=this._timer}static debounce(e,t,o){return e instanceof gi?e._cancelAsync():e=new gi,e.setConfig(t,o),e}}let _i=new Set;const fi=function(e){_i.add(e)},yi=function(){const e=Boolean(_i.size);return _i.forEach((e=>{try{e.flush()}catch(e){setTimeout((()=>{throw e}))}})),e};let bi=\"string\"==typeof document.head.style.touchAction,vi=\"__polymerGestures\",Ci=\"__polymerGesturesHandled\",Ai=\"__polymerGesturesTouchAction\",wi=[\"mousedown\",\"mousemove\",\"mouseup\",\"click\"],Hi=[0,1,4,2],ki=function(){try{return 1===new MouseEvent(\"test\",{buttons:1}).buttons}catch(e){return!1}}();function Li(e){return wi.indexOf(e)>-1}let Si=!1;function xi(e){if(!Li(e)&&\"touchend\"!==e)return bi&&Si&&vo?{passive:!0}:void 0}!function(){try{let e=Object.defineProperty({},\"passive\",{get(){Si=!0}});window.addEventListener(\"test\",null,e),window.removeEventListener(\"test\",null,e)}catch(e){}}();let Vi=navigator.userAgent.match(/iP(?:[oa]d|hone)|Android/);const Mi=[],Ei={button:!0,input:!0,keygen:!0,meter:!0,output:!0,textarea:!0,progress:!0,select:!0},Pi={button:!0,command:!0,fieldset:!0,input:!0,keygen:!0,optgroup:!0,option:!0,select:!0,textarea:!0};function Ti(e){let t=Array.prototype.slice.call(e.labels||[]);if(!t.length){t=[];let o=e.getRootNode();if(e.id){let r=o.querySelectorAll(`label[for = ${e.id}]`);for(let e=0;e<r.length;e++)t.push(r[e])}}return t}let zi=function(e){let t=e.sourceCapabilities;var o;if((!t||t.firesTouchEvents)&&(e[Ci]={skip:!0},\"click\"===e.type)){let t=!1,r=ji(e);for(let e=0;e<r.length;e++){if(r[e].nodeType===Node.ELEMENT_NODE)if(\"label\"===r[e].localName)Mi.push(r[e]);else if(o=r[e],Ei[o.localName]){let o=Ti(r[e]);for(let e=0;e<o.length;e++)t=t||Mi.indexOf(o[e])>-1}if(r[e]===Oi.mouse.target)return}if(t)return;e.preventDefault(),e.stopPropagation()}};function Ni(e){let t=Vi?[\"click\"]:wi;for(let o,r=0;r<t.length;r++)o=t[r],e?(Mi.length=0,document.addEventListener(o,zi,!0)):document.removeEventListener(o,zi,!0)}function Ii(e){let t=e.type;if(!Li(t))return!1;if(\"mousemove\"===t){let t=void 0===e.buttons?1:e.buttons;return e instanceof window.MouseEvent&&!ki&&(t=Hi[e.which]||0),Boolean(1&t)}return 0===(void 0===e.button?0:e.button)}let Oi={mouse:{target:null,mouseIgnoreJob:null},touch:{x:0,y:0,id:-1,scrollDecided:!1}};function Ri(e,t,o){e.movefn=t,e.upfn=o,document.addEventListener(\"mousemove\",t),document.addEventListener(\"mouseup\",o)}function Di(e){document.removeEventListener(\"mousemove\",e.movefn),document.removeEventListener(\"mouseup\",e.upfn),e.movefn=null,e.upfn=null}document.addEventListener(\"touchend\",(function(e){Oi.mouse.mouseIgnoreJob||Ni(!0),Oi.mouse.target=ji(e)[0],Oi.mouse.mouseIgnoreJob=gi.debounce(Oi.mouse.mouseIgnoreJob,hr.after(2500),(function(){Ni(),Oi.mouse.target=null,Oi.mouse.mouseIgnoreJob=null}))}),!!Si&&{passive:!0});const ji=window.ShadyDOM&&window.ShadyDOM.noPatch?window.ShadyDOM.composedPath:e=>e.composedPath&&e.composedPath()||[],Bi={},$i=[];function Fi(e){const t=ji(e);return t.length>0?t[0]:e.target}function Ui(e){let t,o=e.type,r=e.currentTarget.__polymerGestures;if(!r)return;let i=r[o];if(i){if(!e[Ci]&&(e[Ci]={},\"touch\"===o.slice(0,5))){let t=e.changedTouches[0];if(\"touchstart\"===o&&1===e.touches.length&&(Oi.touch.id=t.identifier),Oi.touch.id!==t.identifier)return;bi||\"touchstart\"!==o&&\"touchmove\"!==o||function(e){let t=e.changedTouches[0],o=e.type;if(\"touchstart\"===o)Oi.touch.x=t.clientX,Oi.touch.y=t.clientY,Oi.touch.scrollDecided=!1;else if(\"touchmove\"===o){if(Oi.touch.scrollDecided)return;Oi.touch.scrollDecided=!0;let o=function(e){let t=\"auto\",o=ji(e);for(let e,r=0;r<o.length;r++)if(e=o[r],e[Ai]){t=e[Ai];break}return t}(e),r=!1,i=Math.abs(Oi.touch.x-t.clientX),n=Math.abs(Oi.touch.y-t.clientY);e.cancelable&&(\"none\"===o?r=!0:\"pan-x\"===o?r=n>i:\"pan-y\"===o&&(r=i>n)),r?e.preventDefault():Wi(\"track\")}}(e)}if(t=e[Ci],!t.skip){for(let o,r=0;r<$i.length;r++)o=$i[r],i[o.name]&&!t[o.name]&&o.flow&&o.flow.start.indexOf(e.type)>-1&&o.reset&&o.reset();for(let r,n=0;n<$i.length;n++)r=$i[n],i[r.name]&&!t[r.name]&&(t[r.name]=!0,r[o](e))}}}function Zi(e,t,o){return!!Bi[t]&&(function(e,t,o){let r=Bi[t],i=r.deps,n=r.name,a=e[vi];a||(e[vi]=a={});for(let t,o,r=0;r<i.length;r++)t=i[r],Vi&&Li(t)&&\"click\"!==t||(o=a[t],o||(a[t]=o={_count:0}),0===o._count&&e.addEventListener(t,Ui,xi(t)),o[n]=(o[n]||0)+1,o._count=(o._count||0)+1);e.addEventListener(t,o),r.touchAction&&Ki(e,r.touchAction)}(e,t,o),!0)}function qi(e,t,o){return!!Bi[t]&&(function(e,t,o){let r=Bi[t],i=r.deps,n=r.name,a=e[vi];if(a)for(let t,o,r=0;r<i.length;r++)t=i[r],o=a[t],o&&o[n]&&(o[n]=(o[n]||1)-1,o._count=(o._count||1)-1,0===o._count&&e.removeEventListener(t,Ui,xi(t)));e.removeEventListener(t,o)}(e,t,o),!0)}function Gi(e){$i.push(e);for(let t=0;t<e.emits.length;t++)Bi[e.emits[t]]=e}function Ki(e,t){bi&&e instanceof HTMLElement&&_r.run((()=>{e.style.touchAction=t})),e[Ai]=t}function Yi(e,t,o){let r=new Event(t,{bubbles:!0,cancelable:!0,composed:!0});if(r.detail=o,Go(e).dispatchEvent(r),r.defaultPrevented){let e=o.preventer||o.sourceEvent;e&&e.preventDefault&&e.preventDefault()}}function Wi(e){let t=function(e){for(let t,o=0;o<$i.length;o++){t=$i[o];for(let o,r=0;r<t.emits.length;r++)if(o=t.emits[r],o===e)return t}return null}(e);t.info&&(t.info.prevent=!0)}function Xi(e,t,o,r){t&&Yi(t,e,{x:o.clientX,y:o.clientY,sourceEvent:o,preventer:r,prevent:function(e){return Wi(e)}})}function Ji(e,t,o){if(e.prevent)return!1;if(e.started)return!0;let r=Math.abs(e.x-t),i=Math.abs(e.y-o);return r>=5||i>=5}function Qi(e,t,o){if(!t)return;let r,i=e.moves[e.moves.length-2],n=e.moves[e.moves.length-1],a=n.x-e.x,s=n.y-e.y,l=0;i&&(r=n.x-i.x,l=n.y-i.y),Yi(t,\"track\",{state:e.state,x:o.clientX,y:o.clientY,dx:a,dy:s,ddx:r,ddy:l,sourceEvent:o,hover:function(){return function(e,t){let o=document.elementFromPoint(e,t),r=o;for(;r&&r.shadowRoot&&!window.ShadyDOM;){let i=r;if(r=r.shadowRoot.elementFromPoint(e,t),i===r)break;r&&(o=r)}return o}(o.clientX,o.clientY)}})}function en(e,t,o){let r=Math.abs(t.clientX-e.x),i=Math.abs(t.clientY-e.y),n=Fi(o||t);!n||Pi[n.localName]&&n.hasAttribute(\"disabled\")||(isNaN(r)||isNaN(i)||r<=25&&i<=25||function(e){if(\"click\"===e.type){if(0===e.detail)return!0;let t=Fi(e);if(!t.nodeType||t.nodeType!==Node.ELEMENT_NODE)return!0;let o=t.getBoundingClientRect(),r=e.pageX,i=e.pageY;return!(r>=o.left&&r<=o.right&&i>=o.top&&i<=o.bottom)}return!1}(t))&&(e.prevent||Yi(n,\"tap\",{x:t.clientX,y:t.clientY,sourceEvent:t,preventer:o}))}Gi({name:\"downup\",deps:[\"mousedown\",\"touchstart\",\"touchend\"],flow:{start:[\"mousedown\",\"touchstart\"],end:[\"mouseup\",\"touchend\"]},emits:[\"down\",\"up\"],info:{movefn:null,upfn:null},reset:function(){Di(this.info)},mousedown:function(e){if(!Ii(e))return;let t=Fi(e),o=this;Ri(this.info,(function(e){Ii(e)||(Xi(\"up\",t,e),Di(o.info))}),(function(e){Ii(e)&&Xi(\"up\",t,e),Di(o.info)})),Xi(\"down\",t,e)},touchstart:function(e){Xi(\"down\",Fi(e),e.changedTouches[0],e)},touchend:function(e){Xi(\"up\",Fi(e),e.changedTouches[0],e)}}),Gi({name:\"track\",touchAction:\"none\",deps:[\"mousedown\",\"touchstart\",\"touchmove\",\"touchend\"],flow:{start:[\"mousedown\",\"touchstart\"],end:[\"mouseup\",\"touchend\"]},emits:[\"track\"],info:{x:0,y:0,state:\"start\",started:!1,moves:[],addMove:function(e){this.moves.length>2&&this.moves.shift(),this.moves.push(e)},movefn:null,upfn:null,prevent:!1},reset:function(){this.info.state=\"start\",this.info.started=!1,this.info.moves=[],this.info.x=0,this.info.y=0,this.info.prevent=!1,Di(this.info)},mousedown:function(e){if(!Ii(e))return;let t=Fi(e),o=this,r=function(e){let r=e.clientX,i=e.clientY;Ji(o.info,r,i)&&(o.info.state=o.info.started?\"mouseup\"===e.type?\"end\":\"track\":\"start\",\"start\"===o.info.state&&Wi(\"tap\"),o.info.addMove({x:r,y:i}),Ii(e)||(o.info.state=\"end\",Di(o.info)),t&&Qi(o.info,t,e),o.info.started=!0)};Ri(this.info,r,(function(e){o.info.started&&r(e),Di(o.info)})),this.info.x=e.clientX,this.info.y=e.clientY},touchstart:function(e){let t=e.changedTouches[0];this.info.x=t.clientX,this.info.y=t.clientY},touchmove:function(e){let t=Fi(e),o=e.changedTouches[0],r=o.clientX,i=o.clientY;Ji(this.info,r,i)&&(\"start\"===this.info.state&&Wi(\"tap\"),this.info.addMove({x:r,y:i}),Qi(this.info,t,o),this.info.state=\"track\",this.info.started=!0)},touchend:function(e){let t=Fi(e),o=e.changedTouches[0];this.info.started&&(this.info.state=\"end\",this.info.addMove({x:o.clientX,y:o.clientY}),Qi(this.info,t,o))}}),Gi({name:\"tap\",deps:[\"mousedown\",\"click\",\"touchstart\",\"touchend\"],flow:{start:[\"mousedown\",\"touchstart\"],end:[\"click\",\"touchend\"]},emits:[\"tap\"],info:{x:NaN,y:NaN,prevent:!1},reset:function(){this.info.x=NaN,this.info.y=NaN,this.info.prevent=!1},mousedown:function(e){Ii(e)&&(this.info.x=e.clientX,this.info.y=e.clientY)},click:function(e){Ii(e)&&en(this.info,e)},touchstart:function(e){const t=e.changedTouches[0];this.info.x=t.clientX,this.info.y=t.clientY},touchend:function(e){en(this.info,e.changedTouches[0],e)}});const tn=zo((e=>class extends e{_addEventListenerToNode(e,t,o){Zi(e,t,o)||super._addEventListenerToNode(e,t,o)}_removeEventListenerFromNode(e,t,o){qi(e,t,o)||super._removeEventListenerFromNode(e,t,o)}})),on=/:host\\(:dir\\((ltr|rtl)\\)\\)/g,rn=/([\\s\\w-#\\.\\[\\]\\*]*):dir\\((ltr|rtl)\\)/g,nn=/:dir\\((?:ltr|rtl)\\)/,an=Boolean(window.ShadyDOM&&window.ShadyDOM.inUse),sn=[];let ln=null,dn=\"\";function cn(){dn=document.documentElement.getAttribute(\"dir\")}function pn(e){if(!e.__autoDirOptOut){e.setAttribute(\"dir\",dn)}}function un(){cn(),dn=document.documentElement.getAttribute(\"dir\");for(let e=0;e<sn.length;e++)pn(sn[e])}const mn=zo((e=>{an||ln||(cn(),ln=new MutationObserver(un),ln.observe(document.documentElement,{attributes:!0,attributeFilter:[\"dir\"]}));const t=Cr(e);class o extends t{static _processStyleText(e,o){return e=t._processStyleText.call(this,e,o),!an&&nn.test(e)&&(e=this._replaceDirInCssText(e),this.__activateDir=!0),e}static _replaceDirInCssText(e){let t=e;return t=t.replace(on,':host([dir=\"$1\"])'),t=t.replace(rn,':host([dir=\"$2\"]) $1'),t}constructor(){super(),this.__autoDirOptOut=!1}ready(){super.ready(),this.__autoDirOptOut=this.hasAttribute(\"dir\")}connectedCallback(){t.prototype.connectedCallback&&super.connectedCallback(),this.constructor.__activateDir&&(ln&&ln.takeRecords().length&&un(),sn.push(this),pn(this))}disconnectedCallback(){if(t.prototype.disconnectedCallback&&super.disconnectedCallback(),this.constructor.__activateDir){const e=sn.indexOf(this);e>-1&&sn.splice(e,1)}}}return o.__activateDir=!1,o}));function hn(){document.body.removeAttribute(\"unresolved\")}function gn(e,t,o){return{index:e,removed:t,addedCount:o}}\"interactive\"===document.readyState||\"complete\"===document.readyState?hn():window.addEventListener(\"DOMContentLoaded\",hn);function _n(e,t,o,r,i,n){let a,s=0,l=0,d=Math.min(o-t,n-i);if(0==t&&0==i&&(s=function(e,t,o){for(let r=0;r<o;r++)if(!yn(e[r],t[r]))return r;return o}(e,r,d)),o==e.length&&n==r.length&&(l=function(e,t,o){let r=e.length,i=t.length,n=0;for(;n<o&&yn(e[--r],t[--i]);)n++;return n}(e,r,d-s)),i+=s,n-=l,(o-=l)-(t+=s)==0&&n-i==0)return[];if(t==o){for(a=gn(t,[],0);i<n;)a.removed.push(r[i++]);return[a]}if(i==n)return[gn(t,[],o-t)];let c=function(e){let t=e.length-1,o=e[0].length-1,r=e[t][o],i=[];for(;t>0||o>0;){if(0==t){i.push(2),o--;continue}if(0==o){i.push(3),t--;continue}let n,a=e[t-1][o-1],s=e[t-1][o],l=e[t][o-1];n=s<l?s<a?s:a:l<a?l:a,n==a?(a==r?i.push(0):(i.push(1),r=a),t--,o--):n==s?(i.push(3),t--,r=s):(i.push(2),o--,r=l)}return i.reverse(),i}(function(e,t,o,r,i,n){let a=n-i+1,s=o-t+1,l=new Array(a);for(let e=0;e<a;e++)l[e]=new Array(s),l[e][0]=e;for(let e=0;e<s;e++)l[0][e]=e;for(let o=1;o<a;o++)for(let n=1;n<s;n++)if(yn(e[t+n-1],r[i+o-1]))l[o][n]=l[o-1][n-1];else{let e=l[o-1][n]+1,t=l[o][n-1]+1;l[o][n]=e<t?e:t}return l}(e,t,o,r,i,n));a=void 0;let p=[],u=t,m=i;for(let e=0;e<c.length;e++)switch(c[e]){case 0:a&&(p.push(a),a=void 0),u++,m++;break;case 1:a||(a=gn(u,[],0)),a.addedCount++,u++,a.removed.push(r[m]),m++;break;case 2:a||(a=gn(u,[],0)),a.addedCount++,u++;break;case 3:a||(a=gn(u,[],0)),a.removed.push(r[m]),m++}return a&&p.push(a),p}function fn(e,t){return _n(e,0,e.length,t,0,t.length)}function yn(e,t){return e===t}function bn(e){return\"slot\"===e.localName}let vn=class{static getFlattenedNodes(e){const t=Go(e);return bn(e)?t.assignedNodes({flatten:!0}):Array.from(t.childNodes).map((e=>bn(e)?Go(e).assignedNodes({flatten:!0}):[e])).reduce(((e,t)=>e.concat(t)),[])}constructor(e,t){this._shadyChildrenObserver=null,this._nativeChildrenObserver=null,this._connected=!1,this._target=e,this.callback=t,this._effectiveNodes=[],this._observer=null,this._scheduled=!1,this._boundSchedule=()=>{this._schedule()},this.connect(),this._schedule()}connect(){bn(this._target)?this._listenSlots([this._target]):Go(this._target).children&&(this._listenSlots(Go(this._target).children),window.ShadyDOM?this._shadyChildrenObserver=window.ShadyDOM.observeChildren(this._target,(e=>{this._processMutations(e)})):(this._nativeChildrenObserver=new MutationObserver((e=>{this._processMutations(e)})),this._nativeChildrenObserver.observe(this._target,{childList:!0}))),this._connected=!0}disconnect(){bn(this._target)?this._unlistenSlots([this._target]):Go(this._target).children&&(this._unlistenSlots(Go(this._target).children),window.ShadyDOM&&this._shadyChildrenObserver?(window.ShadyDOM.unobserveChildren(this._shadyChildrenObserver),this._shadyChildrenObserver=null):this._nativeChildrenObserver&&(this._nativeChildrenObserver.disconnect(),this._nativeChildrenObserver=null)),this._connected=!1}_schedule(){this._scheduled||(this._scheduled=!0,_r.run((()=>this.flush())))}_processMutations(e){this._processSlotMutations(e),this.flush()}_processSlotMutations(e){if(e)for(let t=0;t<e.length;t++){let o=e[t];o.addedNodes&&this._listenSlots(o.addedNodes),o.removedNodes&&this._unlistenSlots(o.removedNodes)}}flush(){if(!this._connected)return!1;window.ShadyDOM&&ShadyDOM.flush(),this._nativeChildrenObserver?this._processSlotMutations(this._nativeChildrenObserver.takeRecords()):this._shadyChildrenObserver&&this._processSlotMutations(this._shadyChildrenObserver.takeRecords()),this._scheduled=!1;let e={target:this._target,addedNodes:[],removedNodes:[]},t=this.constructor.getFlattenedNodes(this._target),o=fn(t,this._effectiveNodes);for(let t,r=0;r<o.length&&(t=o[r]);r++)for(let o,r=0;r<t.removed.length&&(o=t.removed[r]);r++)e.removedNodes.push(o);for(let r,i=0;i<o.length&&(r=o[i]);i++)for(let o=r.index;o<r.index+r.addedCount;o++)e.addedNodes.push(t[o]);this._effectiveNodes=t;let r=!1;return(e.addedNodes.length||e.removedNodes.length)&&(r=!0,this.callback.call(this._target,e)),r}_listenSlots(e){for(let t=0;t<e.length;t++){let o=e[t];bn(o)&&o.addEventListener(\"slotchange\",this._boundSchedule)}}_unlistenSlots(e){for(let t=0;t<e.length;t++){let o=e[t];bn(o)&&o.removeEventListener(\"slotchange\",this._boundSchedule)}}};const Cn=function(){let e,t;do{e=window.ShadyDOM&&ShadyDOM.flush(),window.ShadyCSS&&window.ShadyCSS.ScopingShim&&window.ShadyCSS.ScopingShim.flush(),t=yi()}while(e||t)},An=Element.prototype,wn=An.matches||An.matchesSelector||An.mozMatchesSelector||An.msMatchesSelector||An.oMatchesSelector||An.webkitMatchesSelector,Hn=function(e,t){return wn.call(e,t)};class kn{constructor(e){window.ShadyDOM&&window.ShadyDOM.inUse&&window.ShadyDOM.patch(e),this.node=e}observeNodes(e){return new vn(this.node,e)}unobserveNodes(e){e.disconnect()}notifyObserver(){}deepContains(e){if(Go(this.node).contains(e))return!0;let t=e,o=e.ownerDocument;for(;t&&t!==o&&t!==this.node;)t=Go(t).parentNode||Go(t).host;return t===this.node}getOwnerRoot(){return Go(this.node).getRootNode()}getDistributedNodes(){return\"slot\"===this.node.localName?Go(this.node).assignedNodes({flatten:!0}):[]}getDestinationInsertionPoints(){let e=[],t=Go(this.node).assignedSlot;for(;t;)e.push(t),t=Go(t).assignedSlot;return e}importNode(e,t){let o=this.node instanceof Document?this.node:this.node.ownerDocument;return Go(o).importNode(e,t)}getEffectiveChildNodes(){return vn.getFlattenedNodes(this.node)}queryDistributedElements(e){let t=this.getEffectiveChildNodes(),o=[];for(let r,i=0,n=t.length;i<n&&(r=t[i]);i++)r.nodeType===Node.ELEMENT_NODE&&Hn(r,e)&&o.push(r);return o}get activeElement(){let e=this.node;return void 0!==e._activeElement?e._activeElement:e.activeElement}}function Ln(e,t){for(let o=0;o<t.length;o++){let r=t[o];Object.defineProperty(e,r,{get:function(){return this.node[r]},configurable:!0})}}class Sn{constructor(e){this.event=e}get rootTarget(){return this.path[0]}get localTarget(){return this.event.target}get path(){return this.event.composedPath()}}kn.prototype.cloneNode,kn.prototype.appendChild,kn.prototype.insertBefore,kn.prototype.removeChild,kn.prototype.replaceChild,kn.prototype.setAttribute,kn.prototype.removeAttribute,kn.prototype.querySelector,kn.prototype.querySelectorAll,kn.prototype.parentNode,kn.prototype.firstChild,kn.prototype.lastChild,kn.prototype.nextSibling,kn.prototype.previousSibling,kn.prototype.firstElementChild,kn.prototype.lastElementChild,kn.prototype.nextElementSibling,kn.prototype.previousElementSibling,kn.prototype.childNodes,kn.prototype.children,kn.prototype.classList,kn.prototype.textContent,kn.prototype.innerHTML;let xn=kn;if(window.ShadyDOM&&window.ShadyDOM.inUse&&window.ShadyDOM.noPatch&&window.ShadyDOM.Wrapper){class e extends window.ShadyDOM.Wrapper{}Object.getOwnPropertyNames(kn.prototype).forEach((t=>{\"activeElement\"!=t&&(e.prototype[t]=kn.prototype[t])})),Ln(e.prototype,[\"classList\"]),xn=e,Object.defineProperties(Sn.prototype,{localTarget:{get(){const e=this.event.currentTarget,t=e&&Vn(e).getOwnerRoot(),o=this.path;for(let e=0;e<o.length;e++){const r=o[e];if(Vn(r).getOwnerRoot()===t)return r}},configurable:!0},path:{get(){return window.ShadyDOM.composedPath(this.event)},configurable:!0}})}else!function(e,t){for(let o=0;o<t.length;o++){let r=t[o];e[r]=function(){return this.node[r].apply(this.node,arguments)}}}(kn.prototype,[\"cloneNode\",\"appendChild\",\"insertBefore\",\"removeChild\",\"replaceChild\",\"setAttribute\",\"removeAttribute\",\"querySelector\",\"querySelectorAll\"]),Ln(kn.prototype,[\"parentNode\",\"firstChild\",\"lastChild\",\"nextSibling\",\"previousSibling\",\"firstElementChild\",\"lastElementChild\",\"nextElementSibling\",\"previousElementSibling\",\"childNodes\",\"children\",\"classList\"]),function(e,t){for(let o=0;o<t.length;o++){let r=t[o];Object.defineProperty(e,r,{get:function(){return this.node[r]},set:function(e){this.node[r]=e},configurable:!0})}}(kn.prototype,[\"textContent\",\"innerHTML\",\"className\"]);const Vn=function(e){if((e=e||document)instanceof xn)return e;if(e instanceof Sn)return e;let t=e.__domApi;return t||(t=e instanceof Event?new Sn(e):new xn(e),e.__domApi=t),t},Mn=window.ShadyDOM,En=window.ShadyCSS;function Pn(e,t){return Go(e).getRootNode()===t}const Tn=e=>{for(;e;){const t=Object.getOwnPropertyDescriptor(e,\"observedAttributes\");if(t)return t.get;e=Object.getPrototypeOf(e.prototype).constructor}return()=>[]};zo((e=>{const t=hi(e);let o=Tn(t);return class extends t{constructor(){super(),this.__isUpgradeDisabled}static get observedAttributes(){return o.call(this).concat(\"disable-upgrade\")}_initializeProperties(){this.hasAttribute(\"disable-upgrade\")?this.__isUpgradeDisabled=!0:super._initializeProperties()}_enableProperties(){this.__isUpgradeDisabled||super._enableProperties()}_canApplyPropertyDefault(e){return super._canApplyPropertyDefault(e)&&!(this.__isUpgradeDisabled&&this._isPropertyPending(e))}attributeChangedCallback(e,t,o,r){\"disable-upgrade\"==e?this.__isUpgradeDisabled&&null==o&&(super._initializeProperties(),this.__isUpgradeDisabled=!1,Go(this).isConnected&&super.connectedCallback()):super.attributeChangedCallback(e,t,o,r)}connectedCallback(){this.__isUpgradeDisabled||super.connectedCallback()}disconnectedCallback(){this.__isUpgradeDisabled||super.disconnectedCallback()}}}));let zn=window.ShadyCSS;const Nn=zo((e=>{const t=tn(hi(e)),o=mi?t:mn(t),r=Tn(o),i={x:\"pan-x\",y:\"pan-y\",none:\"none\",all:\"auto\"};class n extends o{constructor(){super(),this.isAttached,this.__boundListeners,this._debouncers,this.__isUpgradeDisabled,this.__needsAttributesAtConnected,this._legacyForceObservedAttributes}static get importMeta(){return this.prototype.importMeta}created(){}__attributeReaction(e,t,o){(this.__dataAttributes&&this.__dataAttributes[e]||\"disable-upgrade\"===e)&&this.attributeChangedCallback(e,t,o,null)}setAttribute(e,t){if(Eo&&!this._legacyForceObservedAttributes){const o=this.getAttribute(e);super.setAttribute(e,t),this.__attributeReaction(e,o,String(t))}else super.setAttribute(e,t)}removeAttribute(e){if(Eo&&!this._legacyForceObservedAttributes){const t=this.getAttribute(e);super.removeAttribute(e),this.__attributeReaction(e,t,null)}else super.removeAttribute(e)}static get observedAttributes(){return Eo&&!this.prototype._legacyForceObservedAttributes?(this.hasOwnProperty(JSCompiler_renameProperty(\"__observedAttributes\",this))||(this.__observedAttributes=[],this.prototype),this.__observedAttributes):r.call(this).concat(\"disable-upgrade\")}_enableProperties(){this.__isUpgradeDisabled||super._enableProperties()}_canApplyPropertyDefault(e){return super._canApplyPropertyDefault(e)&&!(this.__isUpgradeDisabled&&this._isPropertyPending(e))}connectedCallback(){this.__needsAttributesAtConnected&&this._takeAttributes(),this.__isUpgradeDisabled||(super.connectedCallback(),this.isAttached=!0,this.attached())}attached(){}disconnectedCallback(){this.__isUpgradeDisabled||(super.disconnectedCallback(),this.isAttached=!1,this.detached())}detached(){}attributeChangedCallback(e,t,o,r){t!==o&&(\"disable-upgrade\"==e?this.__isUpgradeDisabled&&null==o&&(this._initializeProperties(),this.__isUpgradeDisabled=!1,Go(this).isConnected&&this.connectedCallback()):(super.attributeChangedCallback(e,t,o,r),this.attributeChanged(e,t,o)))}attributeChanged(e,t,o){}_initializeProperties(){if(wo&&this.hasAttribute(\"disable-upgrade\"))this.__isUpgradeDisabled=!0;else{let e=Object.getPrototypeOf(this);e.hasOwnProperty(JSCompiler_renameProperty(\"__hasRegisterFinished\",e))||(this._registered(),e.__hasRegisterFinished=!0),super._initializeProperties(),this.root=this,this.created(),Eo&&!this._legacyForceObservedAttributes&&(this.hasAttributes()?this._takeAttributes():this.parentNode||(this.__needsAttributesAtConnected=!0)),this._applyListeners()}}_takeAttributes(){const e=this.attributes;for(let t=0,o=e.length;t<o;t++){const o=e[t];this.__attributeReaction(o.name,null,o.value)}}_registered(){}ready(){this._ensureAttributes(),super.ready()}_ensureAttributes(){}_applyListeners(){}serialize(e){return this._serializeValue(e)}deserialize(e,t){return this._deserializeValue(e,t)}reflectPropertyToAttribute(e,t,o){this._propertyToAttribute(e,t,o)}serializeValueToAttribute(e,t,o){this._valueToNodeAttribute(o||this,e,t)}extend(e,t){if(!e||!t)return e||t;let o=Object.getOwnPropertyNames(t);for(let r,i=0;i<o.length&&(r=o[i]);i++){let o=Object.getOwnPropertyDescriptor(t,r);o&&Object.defineProperty(e,r,o)}return e}mixin(e,t){for(let o in t)e[o]=t[o];return e}chainObject(e,t){return e&&t&&e!==t&&(e.__proto__=t),e}instanceTemplate(e){let t=this.constructor._contentForTemplate(e);return document.importNode(t,!0)}fire(e,t,o){o=o||{},t=null==t?{}:t;let r=new Event(e,{bubbles:void 0===o.bubbles||o.bubbles,cancelable:Boolean(o.cancelable),composed:void 0===o.composed||o.composed});r.detail=t;let i=o.node||this;return Go(i).dispatchEvent(r),r}listen(e,t,o){e=e||this;let r=this.__boundListeners||(this.__boundListeners=new WeakMap),i=r.get(e);i||(i={},r.set(e,i));let n=t+o;i[n]||(i[n]=this._addMethodEventListenerToNode(e,t,o,this))}unlisten(e,t,o){e=e||this;let r=this.__boundListeners&&this.__boundListeners.get(e),i=t+o,n=r&&r[i];n&&(this._removeEventListenerFromNode(e,t,n),r[i]=null)}setScrollDirection(e,t){Ki(t||this,i[e]||\"auto\")}$$(e){return this.root.querySelector(e)}get domHost(){let e=Go(this).getRootNode();return e instanceof DocumentFragment?e.host:e}distributeContent(){const e=Vn(this);window.ShadyDOM&&e.shadowRoot&&ShadyDOM.flush()}getEffectiveChildNodes(){return Vn(this).getEffectiveChildNodes()}queryDistributedElements(e){return Vn(this).queryDistributedElements(e)}getEffectiveChildren(){return this.getEffectiveChildNodes().filter((function(e){return e.nodeType===Node.ELEMENT_NODE}))}getEffectiveTextContent(){let e=this.getEffectiveChildNodes(),t=[];for(let o,r=0;o=e[r];r++)o.nodeType!==Node.COMMENT_NODE&&t.push(o.textContent);return t.join(\"\")}queryEffectiveChildren(e){let t=this.queryDistributedElements(e);return t&&t[0]}queryAllEffectiveChildren(e){return this.queryDistributedElements(e)}getContentChildNodes(e){let t=this.root.querySelector(e||\"slot\");return t?Vn(t).getDistributedNodes():[]}getContentChildren(e){let t=this.getContentChildNodes(e).filter((function(e){return e.nodeType===Node.ELEMENT_NODE}));return t}isLightDescendant(e){const t=this;return t!==e&&Go(t).contains(e)&&Go(t).getRootNode()===Go(e).getRootNode()}isLocalDescendant(e){return this.root===Go(e).getRootNode()}scopeSubtree(e,t=!1){return function(e,t=!1){if(!Mn||!En)return null;if(!Mn.handlesDynamicScoping)return null;const o=En.ScopingShim;if(!o)return null;const r=o.scopeForNode(e),i=Go(e).getRootNode(),n=e=>{if(!Pn(e,i))return;const t=Array.from(Mn.nativeMethods.querySelectorAll.call(e,\"*\"));t.push(e);for(let e=0;e<t.length;e++){const n=t[e];if(!Pn(n,i))continue;const a=o.currentScopeForNode(n);a!==r&&(\"\"!==a&&o.unscopeNode(n,a),o.scopeNode(n,r))}};if(n(e),t){const t=new MutationObserver((e=>{for(let t=0;t<e.length;t++){const o=e[t];for(let e=0;e<o.addedNodes.length;e++){const t=o.addedNodes[e];t.nodeType===Node.ELEMENT_NODE&&n(t)}}}));return t.observe(e,{childList:!0,subtree:!0}),t}return null}(e,t)}getComputedStyleValue(e){return zn.getComputedStyleValue(this,e)}debounce(e,t,o){return this._debouncers=this._debouncers||{},this._debouncers[e]=gi.debounce(this._debouncers[e],o>0?hr.after(o):_r,t.bind(this))}isDebouncerActive(e){this._debouncers=this._debouncers||{};let t=this._debouncers[e];return!(!t||!t.isActive())}flushDebouncer(e){this._debouncers=this._debouncers||{};let t=this._debouncers[e];t&&t.flush()}cancelDebouncer(e){this._debouncers=this._debouncers||{};let t=this._debouncers[e];t&&t.cancel()}async(e,t){return t>0?hr.run(e.bind(this),t):~_r.run(e.bind(this))}cancelAsync(e){e<0?_r.cancel(~e):hr.cancel(e)}create(e,t){let o=document.createElement(e);if(t)if(o.setProperties)o.setProperties(t);else for(let e in t)o[e]=t[e];return o}elementMatches(e,t){return Hn(t||this,e)}toggleAttribute(e,t){let o=this;return 3===arguments.length&&(o=arguments[2]),1==arguments.length&&(t=!o.hasAttribute(e)),t?(Go(o).setAttribute(e,\"\"),!0):(Go(o).removeAttribute(e),!1)}toggleClass(e,t,o){o=o||this,1==arguments.length&&(t=!o.classList.contains(e)),t?o.classList.add(e):o.classList.remove(e)}transform(e,t){(t=t||this).style.webkitTransform=e,t.style.transform=e}translate3d(e,t,o,r){r=r||this,this.transform(\"translate3d(\"+e+\",\"+t+\",\"+o+\")\",r)}arrayDelete(e,t){let o;if(Array.isArray(e)){if(o=e.indexOf(t),o>=0)return e.splice(o,1)}else{if(o=tr(this,e).indexOf(t),o>=0)return this.splice(e,o,1)}return null}_logger(e,t){switch(Array.isArray(t)&&1===t.length&&Array.isArray(t[0])&&(t=t[0]),e){case\"log\":case\"warn\":case\"error\":console[e](...t)}}_log(...e){this._logger(\"log\",e)}_warn(...e){this._logger(\"warn\",e)}_error(...e){this._logger(\"error\",e)}_logf(e,...t){return[\"[%s::%s]\",this.is,e,...t]}}return n.prototype.is=\"\",n})),In={attached:!0,detached:!0,ready:!0,created:!0,beforeRegister:!0,registered:!0,attributeChanged:!0,listeners:!0,hostAttributes:!0},On={attached:!0,detached:!0,ready:!0,created:!0,beforeRegister:!0,registered:!0,attributeChanged:!0,behaviors:!0,_noAccessors:!0},Rn=Object.assign({listeners:!0,hostAttributes:!0,properties:!0,observers:!0},On);function Dn(e,t,o,r){!function(e,t,o){const r=e._noAccessors,i=Object.getOwnPropertyNames(e);for(let n=0;n<i.length;n++){let a=i[n];if(!(a in o))if(r)t[a]=e[a];else{let o=Object.getOwnPropertyDescriptor(e,a);o&&(o.configurable=!0,Object.defineProperty(t,a,o))}}}(t,e,r);for(let e in In)t[e]&&(o[e]=o[e]||[],o[e].push(t[e]))}function jn(e,t,o){t=t||[];for(let r=e.length-1;r>=0;r--){let i=e[r];i?Array.isArray(i)?jn(i,t):t.indexOf(i)<0&&(!o||o.indexOf(i)<0)&&t.unshift(i):console.warn(\"behavior is null, check for missing or 404 import\")}return t}function Bn(e,t){for(const o in t){const r=e[o],i=t[o];e[o]=!(\"value\"in i)&&r&&\"value\"in r?Object.assign({value:r.value},i):i}}const $n=Nn(HTMLElement);function Fn(e,t,o){let r;const i={};class n extends t{static _finalizeClass(){if(this.hasOwnProperty(JSCompiler_renameProperty(\"generatedFrom\",this))){if(r)for(let e,t=0;t<r.length;t++)e=r[t],e.properties&&this.createProperties(e.properties),e.observers&&this.createObservers(e.observers,e.properties);e.properties&&this.createProperties(e.properties),e.observers&&this.createObservers(e.observers,e.properties),this._prepareTemplate()}else t._finalizeClass.call(this)}static get properties(){const t={};if(r)for(let e=0;e<r.length;e++)Bn(t,r[e].properties);return Bn(t,e.properties),t}static get observers(){let t=[];if(r)for(let e,o=0;o<r.length;o++)e=r[o],e.observers&&(t=t.concat(e.observers));return e.observers&&(t=t.concat(e.observers)),t}created(){super.created();const e=i.created;if(e)for(let t=0;t<e.length;t++)e[t].call(this)}_registered(){const e=n.prototype;if(!e.hasOwnProperty(JSCompiler_renameProperty(\"__hasRegisterFinished\",e))){e.__hasRegisterFinished=!0,super._registered(),wo&&a(e);const t=Object.getPrototypeOf(this);let o=i.beforeRegister;if(o)for(let e=0;e<o.length;e++)o[e].call(t);if(o=i.registered,o)for(let e=0;e<o.length;e++)o[e].call(t)}}_applyListeners(){super._applyListeners();const e=i.listeners;if(e)for(let t=0;t<e.length;t++){const o=e[t];if(o)for(let e in o)this._addMethodEventListenerToNode(this,e,o[e])}}_ensureAttributes(){const e=i.hostAttributes;if(e)for(let t=e.length-1;t>=0;t--){const o=e[t];for(let e in o)this._ensureAttribute(e,o[e])}super._ensureAttributes()}ready(){super.ready();let e=i.ready;if(e)for(let t=0;t<e.length;t++)e[t].call(this)}attached(){super.attached();let e=i.attached;if(e)for(let t=0;t<e.length;t++)e[t].call(this)}detached(){super.detached();let e=i.detached;if(e)for(let t=0;t<e.length;t++)e[t].call(this)}attributeChanged(e,t,o){super.attributeChanged();let r=i.attributeChanged;if(r)for(let i=0;i<r.length;i++)r[i].call(this,e,t,o)}}if(o){Array.isArray(o)||(o=[o]);let e=t.prototype.behaviors;r=jn(o,null,e),n.prototype.behaviors=e?e.concat(o):r}const a=t=>{r&&function(e,t,o){for(let r=0;r<t.length;r++)Dn(e,t[r],o,Rn)}(t,r,i),Dn(t,e,i,On)};return wo||a(n.prototype),n.generatedFrom=e,n}const Un=function(e){let t;return t=\"function\"==typeof e?e:Un.Class(e),e._legacyForceObservedAttributes&&(t.prototype._legacyForceObservedAttributes=e._legacyForceObservedAttributes),customElements.define(t.is,t),t};function Zn(e,t,o,r,i){let n;i&&(n=\"object\"==typeof o&&null!==o,n&&(r=e.__dataTemp[t]));let a=r!==o&&(r==r||o==o);return n&&a&&(e.__dataTemp[t]=o),a}Un.Class=function(e,t){e||console.warn(\"Polymer.Class requires `info` argument\");let o=t?t($n):$n;return o=Fn(e,o,e.behaviors),o.is=o.prototype.is=e.is,o};const qn=zo((e=>class extends e{_shouldPropertyChange(e,t,o){return Zn(this,e,t,o,!0)}})),Gn=zo((e=>class extends e{static get properties(){return{mutableData:Boolean}}_shouldPropertyChange(e,t,o){return Zn(this,e,t,o,this.mutableData)}}));qn._mutablePropertyChange=Zn;let Kn=null;function Yn(){return Kn}Yn.prototype=Object.create(HTMLTemplateElement.prototype,{constructor:{value:Yn,writable:!0}});const Wn=ci(Yn),Xn=qn(Wn);const Jn=ci(class{});function Qn(e,t){for(let o=0;o<t.length;o++){let r=t[o];if(Boolean(e)!=Boolean(r.__hideTemplateChildren__))if(r.nodeType===Node.TEXT_NODE)e?(r.__polymerTextContent__=r.textContent,r.textContent=\"\"):r.textContent=r.__polymerTextContent__;else if(\"slot\"===r.localName)if(e)r.__polymerReplaced__=document.createComment(\"hidden-slot\"),Go(Go(r).parentNode).replaceChild(r.__polymerReplaced__,r);else{const e=r.__polymerReplaced__;e&&Go(Go(e).parentNode).replaceChild(r,e)}else r.style&&(e?(r.__polymerDisplay__=r.style.display,r.style.display=\"none\"):r.style.display=r.__polymerDisplay__);r.__hideTemplateChildren__=e,r._showHideChildren&&r._showHideChildren(e)}}class ea extends Jn{constructor(e){super(),this._configureProperties(e),this.root=this._stampTemplate(this.__dataHost);let t=[];this.children=t;for(let e=this.root.firstChild;e;e=e.nextSibling)t.push(e),e.__templatizeInstance=this;this.__templatizeOwner&&this.__templatizeOwner.__hideTemplateChildren__&&this._showHideChildren(!0);let o=this.__templatizeOptions;(e&&o.instanceProps||!o.instanceProps)&&this._enableProperties()}_configureProperties(e){if(this.__templatizeOptions.forwardHostProp)for(let e in this.__hostProps)this._setPendingProperty(e,this.__dataHost[\"_host_\"+e]);for(let t in e)this._setPendingProperty(t,e[t])}forwardHostProp(e,t){this._setPendingPropertyOrPath(e,t,!1,!0)&&this.__dataHost._enqueueClient(this)}_addEventListenerToNode(e,t,o){if(this._methodHost&&this.__templatizeOptions.parentModel)this._methodHost._addEventListenerToNode(e,t,(e=>{e.model=this,o(e)}));else{let r=this.__dataHost.__dataHost;r&&r._addEventListenerToNode(e,t,o)}}_showHideChildren(e){Qn(e,this.children)}_setUnmanagedPropertyToNode(e,t,o){e.__hideTemplateChildren__&&e.nodeType==Node.TEXT_NODE&&\"textContent\"==t?e.__polymerTextContent__=o:super._setUnmanagedPropertyToNode(e,t,o)}get parentModel(){let e=this.__parentModel;if(!e){let t;e=this;do{e=e.__dataHost.__dataHost}while((t=e.__templatizeOptions)&&!t.parentModel);this.__parentModel=e}return e}dispatchEvent(e){return!0}}ea.prototype.__dataHost,ea.prototype.__templatizeOptions,ea.prototype._methodHost,ea.prototype.__templatizeOwner,ea.prototype.__hostProps;const ta=qn(ea);function oa(e){let t=e.__dataHost;return t&&t._methodHost||t}function ra(e,t,o){let r=o.mutableData?ta:ea;sa.mixin&&(r=sa.mixin(r));let i=class extends r{};return i.prototype.__templatizeOptions=o,i.prototype._bindTemplate(e),function(e,t,o,r){let i=o.hostProps||{};for(let t in r.instanceProps){delete i[t];let o=r.notifyInstanceProp;o&&e.prototype._addPropertyEffect(t,e.prototype.PROPERTY_EFFECT_TYPES.NOTIFY,{fn:aa(t,o)})}if(r.forwardHostProp&&t.__dataHost)for(let t in i)o.hasHostProps||(o.hasHostProps=!0),e.prototype._addPropertyEffect(t,e.prototype.PROPERTY_EFFECT_TYPES.NOTIFY,{fn:function(e,t,o){e.__dataHost._setPendingPropertyOrPath(\"_host_\"+t,o[t],!0,!0)}})}(i,e,t,o),i}function ia(e,t,o,r){let i=o.forwardHostProp;if(i&&t.hasHostProps){const n=\"template\"==e.localName;let a=t.templatizeTemplateClass;if(!a){if(n){let e=o.mutableData?Xn:Wn;class r extends e{}a=t.templatizeTemplateClass=r}else{const o=e.constructor;class r extends o{}a=t.templatizeTemplateClass=r}let s=t.hostProps;for(let e in s)a.prototype._addPropertyEffect(\"_host_\"+e,a.prototype.PROPERTY_EFFECT_TYPES.PROPAGATE,{fn:na(e,i)}),a.prototype._createNotifyingProperty(\"_host_\"+e);Ho&&r&&function(e,t,o){const r=o.constructor._properties,{propertyEffects:i}=e,{instanceProps:n}=t;for(let e in i)if(!(r[e]||n&&n[e])){const t=i[e];for(let o=0;o<t.length;o++){const{part:r}=t[o].info;if(!r.signature||!r.signature.static){console.warn(`Property '${e}' used in template but not declared in 'properties'; attribute will not be observed.`);break}}}}(t,o,r)}if(e.__dataProto&&Object.assign(e.__data,e.__dataProto),n)!function(e,t){Kn=e,Object.setPrototypeOf(e,t.prototype),new t,Kn=null}(e,a),e.__dataTemp={},e.__dataPending=null,e.__dataOld=null,e._enableProperties();else{Object.setPrototypeOf(e,a.prototype);const o=t.hostProps;for(let t in o)if(t=\"_host_\"+t,t in e){const o=e[t];delete e[t],e.__data[t]=o}}}}function na(e,t){return function(e,o,r){t.call(e.__templatizeOwner,o.substring(\"_host_\".length),r[o])}}function aa(e,t){return function(e,o,r){t.call(e.__templatizeOwner,e,o,r[o])}}function sa(e,t,o){if(Co&&!oa(e))throw new Error(\"strictTemplatePolicy: template owner not trusted\");if(o=o||{},e.__templatizeOwner)throw new Error(\"A <template> can only be templatized once\");e.__templatizeOwner=t;let r=(t?t.constructor:ea)._parseTemplate(e),i=r.templatizeInstanceClass;i||(i=ra(e,r,o),r.templatizeInstanceClass=i);const n=oa(e);ia(e,r,o,n);let a=class extends i{};return a.prototype._methodHost=n,a.prototype.__dataHost=e,a.prototype.__templatizeOwner=t,a.prototype.__hostProps=r.hostProps,a}let la=!1;function da(){if(wo&&!_o){if(!la){la=!0;const e=document.createElement(\"style\");e.textContent=\"dom-bind,dom-if,dom-repeat{display:none;}\",document.head.appendChild(e)}return!0}return!1}const ca=tn(Gn(ci(HTMLElement)));customElements.define(\"dom-bind\",class extends ca{static get observedAttributes(){return[\"mutable-data\"]}constructor(){if(super(),Co)throw new Error(\"strictTemplatePolicy: dom-bind not allowed\");this.root=null,this.$=null,this.__children=null}attributeChangedCallback(e,t,o,r){this.mutableData=!0}connectedCallback(){da()||(this.style.display=\"none\"),this.render()}disconnectedCallback(){this.__removeChildren()}__insertChildren(){Go(Go(this).parentNode).insertBefore(this.root,this)}__removeChildren(){if(this.__children)for(let e=0;e<this.__children.length;e++)this.root.appendChild(this.__children[e])}render(){let e;if(!this.__children){if(e=e||this.querySelector(\"template\"),!e){let t=new MutationObserver((()=>{if(e=this.querySelector(\"template\"),!e)throw new Error(\"dom-bind requires a <template> child\");t.disconnect(),this.render()}));return void t.observe(this,{childList:!0})}this.root=this._stampTemplate(e),this.$=this.root.$,this.__children=[];for(let e=this.root.firstChild;e;e=e.nextSibling)this.__children[this.__children.length]=e;this._enableProperties()}this.__insertChildren(),this.dispatchEvent(new CustomEvent(\"dom-change\",{bubbles:!0,composed:!0}))}});class pa{constructor(e){this.value=e.toString()}toString(){return this.value}}function ua(e){if(e instanceof HTMLTemplateElement)return e.innerHTML;if(e instanceof pa)return function(e){if(e instanceof pa)return e.value;throw new Error(`non-literal value passed to Polymer's htmlLiteral function: ${e}`)}(e);throw new Error(`non-template value passed to Polymer's html function: ${e}`)}const ma=function(e,...t){const o=document.createElement(\"template\");return o.innerHTML=t.reduce(((t,o,r)=>t+ua(o)+e[r+1]),e[0]),o},ha=hi(HTMLElement),ga=Gn(ha);class _a extends ga{static get is(){return\"dom-repeat\"}static get template(){return null}static get properties(){return{items:{type:Array},as:{type:String,value:\"item\"},indexAs:{type:String,value:\"index\"},itemsIndexAs:{type:String,value:\"itemsIndex\"},sort:{type:Function,observer:\"__sortChanged\"},filter:{type:Function,observer:\"__filterChanged\"},observe:{type:String,observer:\"__observeChanged\"},delay:Number,renderedItemCount:{type:Number,notify:!Mo,readOnly:!0},initialCount:{type:Number},targetFramerate:{type:Number,value:20},_targetFrameTime:{type:Number,computed:\"__computeFrameTime(targetFramerate)\"},notifyDomChange:{type:Boolean},reuseChunkedInstances:{type:Boolean}}}static get observers(){return[\"__itemsChanged(items.*)\"]}constructor(){super(),this.__instances=[],this.__renderDebouncer=null,this.__itemsIdxToInstIdx={},this.__chunkCount=null,this.__renderStartTime=null,this.__itemsArrayChanged=!1,this.__shouldMeasureChunk=!1,this.__shouldContinueChunking=!1,this.__chunkingId=0,this.__sortFn=null,this.__filterFn=null,this.__observePaths=null,this.__ctor=null,this.__isDetached=!0,this.template=null,this._templateInfo}disconnectedCallback(){super.disconnectedCallback(),this.__isDetached=!0;for(let e=0;e<this.__instances.length;e++)this.__detachInstance(e)}connectedCallback(){if(super.connectedCallback(),da()||(this.style.display=\"none\"),this.__isDetached){this.__isDetached=!1;let e=Go(Go(this).parentNode);for(let t=0;t<this.__instances.length;t++)this.__attachInstance(t,e)}}__ensureTemplatized(){if(!this.__ctor){const e=this;let t=this.template=e._templateInfo?e:this.querySelector(\"template\");if(!t){let e=new MutationObserver((()=>{if(!this.querySelector(\"template\"))throw new Error(\"dom-repeat requires a <template> child\");e.disconnect(),this.__render()}));return e.observe(this,{childList:!0}),!1}let o={};o[this.as]=!0,o[this.indexAs]=!0,o[this.itemsIndexAs]=!0,this.__ctor=sa(t,this,{mutableData:this.mutableData,parentModel:!0,instanceProps:o,forwardHostProp:function(e,t){let o=this.__instances;for(let r,i=0;i<o.length&&(r=o[i]);i++)r.forwardHostProp(e,t)},notifyInstanceProp:function(e,t,o){if((r=this.as)===(i=t)||Wo(r,i)||Xo(r,i)){let r=e[this.itemsIndexAs];t==this.as&&(this.items[r]=o);let i=Jo(this.as,`${JSCompiler_renameProperty(\"items\",this)}.${r}`,t);this.notifyPath(i,o)}var r,i}})}return!0}__getMethodHost(){return this.__dataHost._methodHost||this.__dataHost}__functionFromPropertyValue(e){if(\"string\"==typeof e){let t=e,o=this.__getMethodHost();return function(){return o[t].apply(o,arguments)}}return e}__sortChanged(e){this.__sortFn=this.__functionFromPropertyValue(e),this.items&&this.__debounceRender(this.__render)}__filterChanged(e){this.__filterFn=this.__functionFromPropertyValue(e),this.items&&this.__debounceRender(this.__render)}__computeFrameTime(e){return Math.ceil(1e3/e)}__observeChanged(){this.__observePaths=this.observe&&this.observe.replace(\".*\",\".\").split(\" \")}__handleObservedPaths(e){if(this.__sortFn||this.__filterFn)if(e){if(this.__observePaths){let t=this.__observePaths;for(let o=0;o<t.length;o++)0===e.indexOf(t[o])&&this.__debounceRender(this.__render,this.delay)}}else this.__debounceRender(this.__render,this.delay)}__itemsChanged(e){this.items&&!Array.isArray(this.items)&&console.warn(\"dom-repeat expected array for `items`, found\",this.items),this.__handleItemPath(e.path,e.value)||(\"items\"===e.path&&(this.__itemsArrayChanged=!0),this.__debounceRender(this.__render))}__debounceRender(e,t=0){this.__renderDebouncer=gi.debounce(this.__renderDebouncer,t>0?hr.after(t):_r,e.bind(this)),fi(this.__renderDebouncer)}render(){this.__debounceRender(this.__render),Cn()}__render(){if(!this.__ensureTemplatized())return;let e=this.items||[];const t=this.__sortAndFilterItems(e),o=this.__calculateLimit(t.length);this.__updateInstances(e,o,t),this.initialCount&&(this.__shouldMeasureChunk||this.__shouldContinueChunking)&&(cancelAnimationFrame(this.__chunkingId),this.__chunkingId=requestAnimationFrame((()=>this.__continueChunking()))),this._setRenderedItemCount(this.__instances.length),Mo&&!this.notifyDomChange||this.dispatchEvent(new CustomEvent(\"dom-change\",{bubbles:!0,composed:!0}))}__sortAndFilterItems(e){let t=new Array(e.length);for(let o=0;o<e.length;o++)t[o]=o;return this.__filterFn&&(t=t.filter(((t,o,r)=>this.__filterFn(e[t],o,r)))),this.__sortFn&&t.sort(((t,o)=>this.__sortFn(e[t],e[o]))),t}__calculateLimit(e){let t=e;const o=this.__instances.length;if(this.initialCount){let r;!this.__chunkCount||this.__itemsArrayChanged&&!this.reuseChunkedInstances?(t=Math.min(e,this.initialCount),r=Math.max(t-o,0),this.__chunkCount=r||1):(r=Math.min(Math.max(e-o,0),this.__chunkCount),t=Math.min(o+r,e)),this.__shouldMeasureChunk=r===this.__chunkCount,this.__shouldContinueChunking=t<e,this.__renderStartTime=performance.now()}return this.__itemsArrayChanged=!1,t}__continueChunking(){if(this.__shouldMeasureChunk){const e=performance.now()-this.__renderStartTime,t=this._targetFrameTime/e;this.__chunkCount=Math.round(this.__chunkCount*t)||1}this.__shouldContinueChunking&&this.__debounceRender(this.__render)}__updateInstances(e,t,o){const r=this.__itemsIdxToInstIdx={};let i;for(i=0;i<t;i++){let t=this.__instances[i],n=o[i],a=e[n];r[n]=i,t?(t._setPendingProperty(this.as,a),t._setPendingProperty(this.indexAs,i),t._setPendingProperty(this.itemsIndexAs,n),t._flushProperties()):this.__insertInstance(a,i,n)}for(let e=this.__instances.length-1;e>=i;e--)this.__detachAndRemoveInstance(e)}__detachInstance(e){let t=this.__instances[e];const o=Go(t.root);for(let e=0;e<t.children.length;e++){let r=t.children[e];o.appendChild(r)}return t}__attachInstance(e,t){let o=this.__instances[e];t.insertBefore(o.root,this)}__detachAndRemoveInstance(e){this.__detachInstance(e),this.__instances.splice(e,1)}__stampInstance(e,t,o){let r={};return r[this.as]=e,r[this.indexAs]=t,r[this.itemsIndexAs]=o,new this.__ctor(r)}__insertInstance(e,t,o){const r=this.__stampInstance(e,t,o);let i=this.__instances[t+1],n=i?i.children[0]:this;return Go(Go(this).parentNode).insertBefore(r.root,n),this.__instances[t]=r,r}_showHideChildren(e){for(let t=0;t<this.__instances.length;t++)this.__instances[t]._showHideChildren(e)}__handleItemPath(e,t){let o=e.slice(6),r=o.indexOf(\".\"),i=r<0?o:o.substring(0,r);if(i==parseInt(i,10)){let e=r<0?\"\":o.substring(r+1);this.__handleObservedPaths(e);let n=this.__itemsIdxToInstIdx[i],a=this.__instances[n];if(a){let o=this.as+(e?\".\"+e:\"\");a._setPendingPropertyOrPath(o,t,!1,!0),a._flushProperties()}return!0}}itemForElement(e){let t=this.modelForElement(e);return t&&t[this.as]}indexForElement(e){let t=this.modelForElement(e);return t&&t[this.indexAs]}modelForElement(e){return function(e,t){let o;for(;t;)if(o=t.__dataHost?t:t.__templatizeInstance){if(o.__dataHost==e)return o;t=o.__dataHost}else t=Go(t).parentNode;return null}(this.template,e)}}customElements.define(_a.is,_a);class fa extends ha{static get is(){return\"dom-if\"}static get template(){return null}static get properties(){return{if:{type:Boolean,observer:\"__debounceRender\"},restamp:{type:Boolean,observer:\"__debounceRender\"},notifyDomChange:{type:Boolean}}}constructor(){super(),this.__renderDebouncer=null,this._lastIf=!1,this.__hideTemplateChildren__=!1,this.__template,this._templateInfo}__debounceRender(){this.__renderDebouncer=gi.debounce(this.__renderDebouncer,_r,(()=>this.__render())),fi(this.__renderDebouncer)}disconnectedCallback(){super.disconnectedCallback();const e=Go(this).parentNode;e&&(e.nodeType!=Node.DOCUMENT_FRAGMENT_NODE||Go(e).host)||this.__teardownInstance()}connectedCallback(){super.connectedCallback(),da()||(this.style.display=\"none\"),this.if&&this.__debounceRender()}__ensureTemplate(){if(!this.__template){const e=this;let t=e._templateInfo?e:Go(e).querySelector(\"template\");if(!t){let e=new MutationObserver((()=>{if(!Go(this).querySelector(\"template\"))throw new Error(\"dom-if requires a <template> child\");e.disconnect(),this.__render()}));return e.observe(this,{childList:!0}),!1}this.__template=t}return!0}__ensureInstance(){let e=Go(this).parentNode;if(this.__hasInstance()){let t=this.__getInstanceNodes();if(t&&t.length){if(Go(this).previousSibling!==t[t.length-1])for(let o,r=0;r<t.length&&(o=t[r]);r++)Go(e).insertBefore(o,this)}}else{if(!e)return!1;if(!this.__ensureTemplate())return!1;this.__createAndInsertInstance(e)}return!0}render(){Cn()}__render(){if(this.if){if(!this.__ensureInstance())return}else this.restamp&&this.__teardownInstance();this._showHideChildren(),Mo&&!this.notifyDomChange||this.if==this._lastIf||(this.dispatchEvent(new CustomEvent(\"dom-change\",{bubbles:!0,composed:!0})),this._lastIf=this.if)}__hasInstance(){}__getInstanceNodes(){}__createAndInsertInstance(e){}__teardownInstance(){}_showHideChildren(){}}const ya=Vo?class extends fa{constructor(){super(),this.__instance=null,this.__syncInfo=null}__hasInstance(){return Boolean(this.__instance)}__getInstanceNodes(){return this.__instance.templateInfo.childNodes}__createAndInsertInstance(e){const t=this.__dataHost||this;if(Co&&!this.__dataHost)throw new Error(\"strictTemplatePolicy: template owner not trusted\");const o=t._bindTemplate(this.__template,!0);o.runEffects=(e,t,o)=>{let r=this.__syncInfo;if(this.if)r&&(this.__syncInfo=null,this._showHideChildren(),t=Object.assign(r.changedProps,t)),e(t,o);else if(this.__instance)if(r||(r=this.__syncInfo={runEffects:e,changedProps:{}}),o)for(const e in t){const t=Yo(e);r.changedProps[t]=this.__dataHost[t]}else Object.assign(r.changedProps,t)},this.__instance=t._stampTemplate(this.__template,o),Go(e).insertBefore(this.__instance,this)}__syncHostProperties(){const e=this.__syncInfo;e&&(this.__syncInfo=null,e.runEffects(e.changedProps,!1))}__teardownInstance(){const e=this.__dataHost||this;this.__instance&&(e._removeBoundDom(this.__instance),this.__instance=null,this.__syncInfo=null)}_showHideChildren(){const e=this.__hideTemplateChildren__||!this.if;this.__instance&&Boolean(this.__instance.__hidden)!==e&&(this.__instance.__hidden=e,Qn(e,this.__instance.templateInfo.childNodes)),e||this.__syncHostProperties()}}:class extends fa{constructor(){super(),this.__ctor=null,this.__instance=null,this.__invalidProps=null}__hasInstance(){return Boolean(this.__instance)}__getInstanceNodes(){return this.__instance.children}__createAndInsertInstance(e){this.__ctor||(this.__ctor=sa(this.__template,this,{mutableData:!0,forwardHostProp:function(e,t){this.__instance&&(this.if?this.__instance.forwardHostProp(e,t):(this.__invalidProps=this.__invalidProps||Object.create(null),this.__invalidProps[Yo(e)]=!0))}})),this.__instance=new this.__ctor,Go(e).insertBefore(this.__instance.root,this)}__teardownInstance(){if(this.__instance){let e=this.__instance.children;if(e&&e.length){let t=Go(e[0]).parentNode;if(t){t=Go(t);for(let o,r=0;r<e.length&&(o=e[r]);r++)t.removeChild(o)}}this.__invalidProps=null,this.__instance=null}}__syncHostProperties(){let e=this.__invalidProps;if(e){this.__invalidProps=null;for(let t in e)this.__instance._setPendingProperty(t,this.__dataHost[t]);this.__instance._flushProperties()}}_showHideChildren(){const e=this.__hideTemplateChildren__||!this.if;this.__instance&&Boolean(this.__instance.__hidden)!==e&&(this.__instance.__hidden=e,this.__instance._showHideChildren(e)),e||this.__syncHostProperties()}};customElements.define(ya.is,ya);let ba=zo((e=>{let t=hi(e);return class extends t{static get properties(){return{items:{type:Array},multi:{type:Boolean,value:!1},selected:{type:Object,notify:!0},selectedItem:{type:Object,notify:!0},toggle:{type:Boolean,value:!1}}}static get observers(){return[\"__updateSelection(multi, items.*)\"]}constructor(){super(),this.__lastItems=null,this.__lastMulti=null,this.__selectedMap=null}__updateSelection(e,t){let o=t.path;if(o==JSCompiler_renameProperty(\"items\",this)){let o=t.base||[],r=this.__lastItems;if(e!==this.__lastMulti&&this.clearSelection(),r){let e=fn(o,r);this.__applySplices(e)}this.__lastItems=o,this.__lastMulti=e}else if(t.path==`${JSCompiler_renameProperty(\"items\",this)}.splices`)this.__applySplices(t.value.indexSplices);else{let e=o.slice(`${JSCompiler_renameProperty(\"items\",this)}.`.length),t=parseInt(e,10);e.indexOf(\".\")<0&&e==t&&this.__deselectChangedIdx(t)}}__applySplices(e){let t=this.__selectedMap;for(let o=0;o<e.length;o++){let r=e[o];t.forEach(((e,o)=>{e<r.index||(e>=r.index+r.removed.length?t.set(o,e+r.addedCount-r.removed.length):t.set(o,-1))}));for(let e=0;e<r.addedCount;e++){let o=r.index+e;t.has(this.items[o])&&t.set(this.items[o],o)}}this.__updateLinks();let o=0;t.forEach(((e,r)=>{e<0?(this.multi?this.splice(JSCompiler_renameProperty(\"selected\",this),o,1):this.selected=this.selectedItem=null,t.delete(r)):o++}))}__updateLinks(){if(this.__dataLinkedPaths={},this.multi){let e=0;this.__selectedMap.forEach((t=>{t>=0&&this.linkPaths(`${JSCompiler_renameProperty(\"items\",this)}.${t}`,`${JSCompiler_renameProperty(\"selected\",this)}.${e++}`)}))}else this.__selectedMap.forEach((e=>{this.linkPaths(JSCompiler_renameProperty(\"selected\",this),`${JSCompiler_renameProperty(\"items\",this)}.${e}`),this.linkPaths(JSCompiler_renameProperty(\"selectedItem\",this),`${JSCompiler_renameProperty(\"items\",this)}.${e}`)}))}clearSelection(){this.__dataLinkedPaths={},this.__selectedMap=new Map,this.selected=this.multi?[]:null,this.selectedItem=null}isSelected(e){return this.__selectedMap.has(e)}isIndexSelected(e){return this.isSelected(this.items[e])}__deselectChangedIdx(e){let t=this.__selectedIndexForItemIndex(e);if(t>=0){let e=0;this.__selectedMap.forEach(((o,r)=>{t==e++&&this.deselect(r)}))}}__selectedIndexForItemIndex(e){let t=this.__dataLinkedPaths[`${JSCompiler_renameProperty(\"items\",this)}.${e}`];if(t)return parseInt(t.slice(`${JSCompiler_renameProperty(\"selected\",this)}.`.length),10)}deselect(e){let t=this.__selectedMap.get(e);if(t>=0){let o;this.__selectedMap.delete(e),this.multi&&(o=this.__selectedIndexForItemIndex(t)),this.__updateLinks(),this.multi?this.splice(JSCompiler_renameProperty(\"selected\",this),o,1):this.selected=this.selectedItem=null}}deselectIndex(e){this.deselect(this.items[e])}select(e){this.selectIndex(this.items.indexOf(e))}selectIndex(e){let t=this.items[e];this.isSelected(t)?this.toggle&&this.deselectIndex(e):(this.multi||this.__selectedMap.clear(),this.__selectedMap.set(t,e),this.__updateLinks(),this.multi?this.push(JSCompiler_renameProperty(\"selected\",this),t):this.selected=this.selectedItem=t)}}})),va=ba(ha);class Ca extends va{static get is(){return\"array-selector\"}static get template(){return null}}customElements.define(Ca.is,Ca);const Aa=new no;window.ShadyCSS||(window.ShadyCSS={prepareTemplate(e,t,o){},prepareTemplateDom(e,t){},prepareTemplateStyles(e,t,o){},styleSubtree(e,t){Aa.processStyles(),Ot(e,t)},styleElement(e){Aa.processStyles()},styleDocument(e){Aa.processStyles(),Ot(document.body,e)},getComputedStyleValue:(e,t)=>Rt(e,t),flushCustomStyles(){},nativeCss:mt,nativeShadow:lt,cssBuild:ct,disableRuntime:ut}),window.ShadyCSS.CustomStyleInterface=Aa;const wa=window.ShadyCSS.CustomStyleInterface;class Ha extends HTMLElement{constructor(){super(),this._style=null,wa.addCustomStyle(this)}getStyle(){if(this._style)return this._style;const e=this.querySelector(\"style\");if(!e)return null;this._style=e;const t=e.getAttribute(\"include\");return t&&(e.removeAttribute(\"include\"),e.textContent=function(e){let t=e.trim().split(/\\s+/),o=\"\";for(let e=0;e<t.length;e++)o+=qo(t[e]);return o}(t)+e.textContent),this.ownerDocument!==window.document&&window.document.head.appendChild(this),this._style}}window.customElements.define(\"custom-style\",Ha),Nn(HTMLElement).prototype;const ka=ma`\n<custom-style>\n  <style is=\"custom-style\">\n    [hidden] {\n      display: none !important;\n    }\n  </style>\n</custom-style>\n<custom-style>\n  <style is=\"custom-style\">\n    html {\n\n      --layout: {\n        display: -ms-flexbox;\n        display: -webkit-flex;\n        display: flex;\n      };\n\n      --layout-inline: {\n        display: -ms-inline-flexbox;\n        display: -webkit-inline-flex;\n        display: inline-flex;\n      };\n\n      --layout-horizontal: {\n        @apply --layout;\n\n        -ms-flex-direction: row;\n        -webkit-flex-direction: row;\n        flex-direction: row;\n      };\n\n      --layout-horizontal-reverse: {\n        @apply --layout;\n\n        -ms-flex-direction: row-reverse;\n        -webkit-flex-direction: row-reverse;\n        flex-direction: row-reverse;\n      };\n\n      --layout-vertical: {\n        @apply --layout;\n\n        -ms-flex-direction: column;\n        -webkit-flex-direction: column;\n        flex-direction: column;\n      };\n\n      --layout-vertical-reverse: {\n        @apply --layout;\n\n        -ms-flex-direction: column-reverse;\n        -webkit-flex-direction: column-reverse;\n        flex-direction: column-reverse;\n      };\n\n      --layout-wrap: {\n        -ms-flex-wrap: wrap;\n        -webkit-flex-wrap: wrap;\n        flex-wrap: wrap;\n      };\n\n      --layout-wrap-reverse: {\n        -ms-flex-wrap: wrap-reverse;\n        -webkit-flex-wrap: wrap-reverse;\n        flex-wrap: wrap-reverse;\n      };\n\n      --layout-flex-auto: {\n        -ms-flex: 1 1 auto;\n        -webkit-flex: 1 1 auto;\n        flex: 1 1 auto;\n      };\n\n      --layout-flex-none: {\n        -ms-flex: none;\n        -webkit-flex: none;\n        flex: none;\n      };\n\n      --layout-flex: {\n        -ms-flex: 1 1 0.000000001px;\n        -webkit-flex: 1;\n        flex: 1;\n        -webkit-flex-basis: 0.000000001px;\n        flex-basis: 0.000000001px;\n      };\n\n      --layout-flex-2: {\n        -ms-flex: 2;\n        -webkit-flex: 2;\n        flex: 2;\n      };\n\n      --layout-flex-3: {\n        -ms-flex: 3;\n        -webkit-flex: 3;\n        flex: 3;\n      };\n\n      --layout-flex-4: {\n        -ms-flex: 4;\n        -webkit-flex: 4;\n        flex: 4;\n      };\n\n      --layout-flex-5: {\n        -ms-flex: 5;\n        -webkit-flex: 5;\n        flex: 5;\n      };\n\n      --layout-flex-6: {\n        -ms-flex: 6;\n        -webkit-flex: 6;\n        flex: 6;\n      };\n\n      --layout-flex-7: {\n        -ms-flex: 7;\n        -webkit-flex: 7;\n        flex: 7;\n      };\n\n      --layout-flex-8: {\n        -ms-flex: 8;\n        -webkit-flex: 8;\n        flex: 8;\n      };\n\n      --layout-flex-9: {\n        -ms-flex: 9;\n        -webkit-flex: 9;\n        flex: 9;\n      };\n\n      --layout-flex-10: {\n        -ms-flex: 10;\n        -webkit-flex: 10;\n        flex: 10;\n      };\n\n      --layout-flex-11: {\n        -ms-flex: 11;\n        -webkit-flex: 11;\n        flex: 11;\n      };\n\n      --layout-flex-12: {\n        -ms-flex: 12;\n        -webkit-flex: 12;\n        flex: 12;\n      };\n\n      /* alignment in cross axis */\n\n      --layout-start: {\n        -ms-flex-align: start;\n        -webkit-align-items: flex-start;\n        align-items: flex-start;\n      };\n\n      --layout-center: {\n        -ms-flex-align: center;\n        -webkit-align-items: center;\n        align-items: center;\n      };\n\n      --layout-end: {\n        -ms-flex-align: end;\n        -webkit-align-items: flex-end;\n        align-items: flex-end;\n      };\n\n      --layout-baseline: {\n        -ms-flex-align: baseline;\n        -webkit-align-items: baseline;\n        align-items: baseline;\n      };\n\n      /* alignment in main axis */\n\n      --layout-start-justified: {\n        -ms-flex-pack: start;\n        -webkit-justify-content: flex-start;\n        justify-content: flex-start;\n      };\n\n      --layout-center-justified: {\n        -ms-flex-pack: center;\n        -webkit-justify-content: center;\n        justify-content: center;\n      };\n\n      --layout-end-justified: {\n        -ms-flex-pack: end;\n        -webkit-justify-content: flex-end;\n        justify-content: flex-end;\n      };\n\n      --layout-around-justified: {\n        -ms-flex-pack: distribute;\n        -webkit-justify-content: space-around;\n        justify-content: space-around;\n      };\n\n      --layout-justified: {\n        -ms-flex-pack: justify;\n        -webkit-justify-content: space-between;\n        justify-content: space-between;\n      };\n\n      --layout-center-center: {\n        @apply --layout-center;\n        @apply --layout-center-justified;\n      };\n\n      /* self alignment */\n\n      --layout-self-start: {\n        -ms-align-self: flex-start;\n        -webkit-align-self: flex-start;\n        align-self: flex-start;\n      };\n\n      --layout-self-center: {\n        -ms-align-self: center;\n        -webkit-align-self: center;\n        align-self: center;\n      };\n\n      --layout-self-end: {\n        -ms-align-self: flex-end;\n        -webkit-align-self: flex-end;\n        align-self: flex-end;\n      };\n\n      --layout-self-stretch: {\n        -ms-align-self: stretch;\n        -webkit-align-self: stretch;\n        align-self: stretch;\n      };\n\n      --layout-self-baseline: {\n        -ms-align-self: baseline;\n        -webkit-align-self: baseline;\n        align-self: baseline;\n      };\n\n      /* multi-line alignment in main axis */\n\n      --layout-start-aligned: {\n        -ms-flex-line-pack: start;  /* IE10 */\n        -ms-align-content: flex-start;\n        -webkit-align-content: flex-start;\n        align-content: flex-start;\n      };\n\n      --layout-end-aligned: {\n        -ms-flex-line-pack: end;  /* IE10 */\n        -ms-align-content: flex-end;\n        -webkit-align-content: flex-end;\n        align-content: flex-end;\n      };\n\n      --layout-center-aligned: {\n        -ms-flex-line-pack: center;  /* IE10 */\n        -ms-align-content: center;\n        -webkit-align-content: center;\n        align-content: center;\n      };\n\n      --layout-between-aligned: {\n        -ms-flex-line-pack: justify;  /* IE10 */\n        -ms-align-content: space-between;\n        -webkit-align-content: space-between;\n        align-content: space-between;\n      };\n\n      --layout-around-aligned: {\n        -ms-flex-line-pack: distribute;  /* IE10 */\n        -ms-align-content: space-around;\n        -webkit-align-content: space-around;\n        align-content: space-around;\n      };\n\n      /*******************************\n                Other Layout\n      *******************************/\n\n      --layout-block: {\n        display: block;\n      };\n\n      --layout-invisible: {\n        visibility: hidden !important;\n      };\n\n      --layout-relative: {\n        position: relative;\n      };\n\n      --layout-fit: {\n        position: absolute;\n        top: 0;\n        right: 0;\n        bottom: 0;\n        left: 0;\n      };\n\n      --layout-scroll: {\n        -webkit-overflow-scrolling: touch;\n        overflow: auto;\n      };\n\n      --layout-fullbleed: {\n        margin: 0;\n        height: 100vh;\n      };\n\n      /* fixed position */\n\n      --layout-fixed-top: {\n        position: fixed;\n        top: 0;\n        left: 0;\n        right: 0;\n      };\n\n      --layout-fixed-right: {\n        position: fixed;\n        top: 0;\n        right: 0;\n        bottom: 0;\n      };\n\n      --layout-fixed-bottom: {\n        position: fixed;\n        right: 0;\n        bottom: 0;\n        left: 0;\n      };\n\n      --layout-fixed-left: {\n        position: fixed;\n        top: 0;\n        bottom: 0;\n        left: 0;\n      };\n\n    }\n  </style>\n</custom-style>`;ka.setAttribute(\"style\",\"display: none;\"),document.head.appendChild(ka.content);var La=document.createElement(\"style\");La.textContent=\"[hidden] { display: none !important; }\",document.head.appendChild(La);const Sa=ma`\n<custom-style>\n  <style is=\"custom-style\">\n    html {\n\n      /* Material Design color palette for Google products */\n\n      --google-red-100: #f4c7c3;\n      --google-red-300: #e67c73;\n      --google-red-500: #db4437;\n      --google-red-700: #c53929;\n\n      --google-blue-100: #c6dafc;\n      --google-blue-300: #7baaf7;\n      --google-blue-500: #4285f4;\n      --google-blue-700: #3367d6;\n\n      --google-green-100: #b7e1cd;\n      --google-green-300: #57bb8a;\n      --google-green-500: #0f9d58;\n      --google-green-700: #0b8043;\n\n      --google-yellow-100: #fce8b2;\n      --google-yellow-300: #f7cb4d;\n      --google-yellow-500: #f4b400;\n      --google-yellow-700: #f09300;\n\n      --google-grey-100: #f5f5f5;\n      --google-grey-300: #e0e0e0;\n      --google-grey-500: #9e9e9e;\n      --google-grey-700: #616161;\n\n      /* Material Design color palette from online spec document */\n\n      --paper-red-50: #ffebee;\n      --paper-red-100: #ffcdd2;\n      --paper-red-200: #ef9a9a;\n      --paper-red-300: #e57373;\n      --paper-red-400: #ef5350;\n      --paper-red-500: #f44336;\n      --paper-red-600: #e53935;\n      --paper-red-700: #d32f2f;\n      --paper-red-800: #c62828;\n      --paper-red-900: #b71c1c;\n      --paper-red-a100: #ff8a80;\n      --paper-red-a200: #ff5252;\n      --paper-red-a400: #ff1744;\n      --paper-red-a700: #d50000;\n\n      --paper-pink-50: #fce4ec;\n      --paper-pink-100: #f8bbd0;\n      --paper-pink-200: #f48fb1;\n      --paper-pink-300: #f06292;\n      --paper-pink-400: #ec407a;\n      --paper-pink-500: #e91e63;\n      --paper-pink-600: #d81b60;\n      --paper-pink-700: #c2185b;\n      --paper-pink-800: #ad1457;\n      --paper-pink-900: #880e4f;\n      --paper-pink-a100: #ff80ab;\n      --paper-pink-a200: #ff4081;\n      --paper-pink-a400: #f50057;\n      --paper-pink-a700: #c51162;\n\n      --paper-purple-50: #f3e5f5;\n      --paper-purple-100: #e1bee7;\n      --paper-purple-200: #ce93d8;\n      --paper-purple-300: #ba68c8;\n      --paper-purple-400: #ab47bc;\n      --paper-purple-500: #9c27b0;\n      --paper-purple-600: #8e24aa;\n      --paper-purple-700: #7b1fa2;\n      --paper-purple-800: #6a1b9a;\n      --paper-purple-900: #4a148c;\n      --paper-purple-a100: #ea80fc;\n      --paper-purple-a200: #e040fb;\n      --paper-purple-a400: #d500f9;\n      --paper-purple-a700: #aa00ff;\n\n      --paper-deep-purple-50: #ede7f6;\n      --paper-deep-purple-100: #d1c4e9;\n      --paper-deep-purple-200: #b39ddb;\n      --paper-deep-purple-300: #9575cd;\n      --paper-deep-purple-400: #7e57c2;\n      --paper-deep-purple-500: #673ab7;\n      --paper-deep-purple-600: #5e35b1;\n      --paper-deep-purple-700: #512da8;\n      --paper-deep-purple-800: #4527a0;\n      --paper-deep-purple-900: #311b92;\n      --paper-deep-purple-a100: #b388ff;\n      --paper-deep-purple-a200: #7c4dff;\n      --paper-deep-purple-a400: #651fff;\n      --paper-deep-purple-a700: #6200ea;\n\n      --paper-indigo-50: #e8eaf6;\n      --paper-indigo-100: #c5cae9;\n      --paper-indigo-200: #9fa8da;\n      --paper-indigo-300: #7986cb;\n      --paper-indigo-400: #5c6bc0;\n      --paper-indigo-500: #3f51b5;\n      --paper-indigo-600: #3949ab;\n      --paper-indigo-700: #303f9f;\n      --paper-indigo-800: #283593;\n      --paper-indigo-900: #1a237e;\n      --paper-indigo-a100: #8c9eff;\n      --paper-indigo-a200: #536dfe;\n      --paper-indigo-a400: #3d5afe;\n      --paper-indigo-a700: #304ffe;\n\n      --paper-blue-50: #e3f2fd;\n      --paper-blue-100: #bbdefb;\n      --paper-blue-200: #90caf9;\n      --paper-blue-300: #64b5f6;\n      --paper-blue-400: #42a5f5;\n      --paper-blue-500: #2196f3;\n      --paper-blue-600: #1e88e5;\n      --paper-blue-700: #1976d2;\n      --paper-blue-800: #1565c0;\n      --paper-blue-900: #0d47a1;\n      --paper-blue-a100: #82b1ff;\n      --paper-blue-a200: #448aff;\n      --paper-blue-a400: #2979ff;\n      --paper-blue-a700: #2962ff;\n\n      --paper-light-blue-50: #e1f5fe;\n      --paper-light-blue-100: #b3e5fc;\n      --paper-light-blue-200: #81d4fa;\n      --paper-light-blue-300: #4fc3f7;\n      --paper-light-blue-400: #29b6f6;\n      --paper-light-blue-500: #03a9f4;\n      --paper-light-blue-600: #039be5;\n      --paper-light-blue-700: #0288d1;\n      --paper-light-blue-800: #0277bd;\n      --paper-light-blue-900: #01579b;\n      --paper-light-blue-a100: #80d8ff;\n      --paper-light-blue-a200: #40c4ff;\n      --paper-light-blue-a400: #00b0ff;\n      --paper-light-blue-a700: #0091ea;\n\n      --paper-cyan-50: #e0f7fa;\n      --paper-cyan-100: #b2ebf2;\n      --paper-cyan-200: #80deea;\n      --paper-cyan-300: #4dd0e1;\n      --paper-cyan-400: #26c6da;\n      --paper-cyan-500: #00bcd4;\n      --paper-cyan-600: #00acc1;\n      --paper-cyan-700: #0097a7;\n      --paper-cyan-800: #00838f;\n      --paper-cyan-900: #006064;\n      --paper-cyan-a100: #84ffff;\n      --paper-cyan-a200: #18ffff;\n      --paper-cyan-a400: #00e5ff;\n      --paper-cyan-a700: #00b8d4;\n\n      --paper-teal-50: #e0f2f1;\n      --paper-teal-100: #b2dfdb;\n      --paper-teal-200: #80cbc4;\n      --paper-teal-300: #4db6ac;\n      --paper-teal-400: #26a69a;\n      --paper-teal-500: #009688;\n      --paper-teal-600: #00897b;\n      --paper-teal-700: #00796b;\n      --paper-teal-800: #00695c;\n      --paper-teal-900: #004d40;\n      --paper-teal-a100: #a7ffeb;\n      --paper-teal-a200: #64ffda;\n      --paper-teal-a400: #1de9b6;\n      --paper-teal-a700: #00bfa5;\n\n      --paper-green-50: #e8f5e9;\n      --paper-green-100: #c8e6c9;\n      --paper-green-200: #a5d6a7;\n      --paper-green-300: #81c784;\n      --paper-green-400: #66bb6a;\n      --paper-green-500: #4caf50;\n      --paper-green-600: #43a047;\n      --paper-green-700: #388e3c;\n      --paper-green-800: #2e7d32;\n      --paper-green-900: #1b5e20;\n      --paper-green-a100: #b9f6ca;\n      --paper-green-a200: #69f0ae;\n      --paper-green-a400: #00e676;\n      --paper-green-a700: #00c853;\n\n      --paper-light-green-50: #f1f8e9;\n      --paper-light-green-100: #dcedc8;\n      --paper-light-green-200: #c5e1a5;\n      --paper-light-green-300: #aed581;\n      --paper-light-green-400: #9ccc65;\n      --paper-light-green-500: #8bc34a;\n      --paper-light-green-600: #7cb342;\n      --paper-light-green-700: #689f38;\n      --paper-light-green-800: #558b2f;\n      --paper-light-green-900: #33691e;\n      --paper-light-green-a100: #ccff90;\n      --paper-light-green-a200: #b2ff59;\n      --paper-light-green-a400: #76ff03;\n      --paper-light-green-a700: #64dd17;\n\n      --paper-lime-50: #f9fbe7;\n      --paper-lime-100: #f0f4c3;\n      --paper-lime-200: #e6ee9c;\n      --paper-lime-300: #dce775;\n      --paper-lime-400: #d4e157;\n      --paper-lime-500: #cddc39;\n      --paper-lime-600: #c0ca33;\n      --paper-lime-700: #afb42b;\n      --paper-lime-800: #9e9d24;\n      --paper-lime-900: #827717;\n      --paper-lime-a100: #f4ff81;\n      --paper-lime-a200: #eeff41;\n      --paper-lime-a400: #c6ff00;\n      --paper-lime-a700: #aeea00;\n\n      --paper-yellow-50: #fffde7;\n      --paper-yellow-100: #fff9c4;\n      --paper-yellow-200: #fff59d;\n      --paper-yellow-300: #fff176;\n      --paper-yellow-400: #ffee58;\n      --paper-yellow-500: #ffeb3b;\n      --paper-yellow-600: #fdd835;\n      --paper-yellow-700: #fbc02d;\n      --paper-yellow-800: #f9a825;\n      --paper-yellow-900: #f57f17;\n      --paper-yellow-a100: #ffff8d;\n      --paper-yellow-a200: #ffff00;\n      --paper-yellow-a400: #ffea00;\n      --paper-yellow-a700: #ffd600;\n\n      --paper-amber-50: #fff8e1;\n      --paper-amber-100: #ffecb3;\n      --paper-amber-200: #ffe082;\n      --paper-amber-300: #ffd54f;\n      --paper-amber-400: #ffca28;\n      --paper-amber-500: #ffc107;\n      --paper-amber-600: #ffb300;\n      --paper-amber-700: #ffa000;\n      --paper-amber-800: #ff8f00;\n      --paper-amber-900: #ff6f00;\n      --paper-amber-a100: #ffe57f;\n      --paper-amber-a200: #ffd740;\n      --paper-amber-a400: #ffc400;\n      --paper-amber-a700: #ffab00;\n\n      --paper-orange-50: #fff3e0;\n      --paper-orange-100: #ffe0b2;\n      --paper-orange-200: #ffcc80;\n      --paper-orange-300: #ffb74d;\n      --paper-orange-400: #ffa726;\n      --paper-orange-500: #ff9800;\n      --paper-orange-600: #fb8c00;\n      --paper-orange-700: #f57c00;\n      --paper-orange-800: #ef6c00;\n      --paper-orange-900: #e65100;\n      --paper-orange-a100: #ffd180;\n      --paper-orange-a200: #ffab40;\n      --paper-orange-a400: #ff9100;\n      --paper-orange-a700: #ff6500;\n\n      --paper-deep-orange-50: #fbe9e7;\n      --paper-deep-orange-100: #ffccbc;\n      --paper-deep-orange-200: #ffab91;\n      --paper-deep-orange-300: #ff8a65;\n      --paper-deep-orange-400: #ff7043;\n      --paper-deep-orange-500: #ff5722;\n      --paper-deep-orange-600: #f4511e;\n      --paper-deep-orange-700: #e64a19;\n      --paper-deep-orange-800: #d84315;\n      --paper-deep-orange-900: #bf360c;\n      --paper-deep-orange-a100: #ff9e80;\n      --paper-deep-orange-a200: #ff6e40;\n      --paper-deep-orange-a400: #ff3d00;\n      --paper-deep-orange-a700: #dd2c00;\n\n      --paper-brown-50: #efebe9;\n      --paper-brown-100: #d7ccc8;\n      --paper-brown-200: #bcaaa4;\n      --paper-brown-300: #a1887f;\n      --paper-brown-400: #8d6e63;\n      --paper-brown-500: #795548;\n      --paper-brown-600: #6d4c41;\n      --paper-brown-700: #5d4037;\n      --paper-brown-800: #4e342e;\n      --paper-brown-900: #3e2723;\n\n      --paper-grey-50: #fafafa;\n      --paper-grey-100: #f5f5f5;\n      --paper-grey-200: #eeeeee;\n      --paper-grey-300: #e0e0e0;\n      --paper-grey-400: #bdbdbd;\n      --paper-grey-500: #9e9e9e;\n      --paper-grey-600: #757575;\n      --paper-grey-700: #616161;\n      --paper-grey-800: #424242;\n      --paper-grey-900: #212121;\n\n      --paper-blue-grey-50: #eceff1;\n      --paper-blue-grey-100: #cfd8dc;\n      --paper-blue-grey-200: #b0bec5;\n      --paper-blue-grey-300: #90a4ae;\n      --paper-blue-grey-400: #78909c;\n      --paper-blue-grey-500: #607d8b;\n      --paper-blue-grey-600: #546e7a;\n      --paper-blue-grey-700: #455a64;\n      --paper-blue-grey-800: #37474f;\n      --paper-blue-grey-900: #263238;\n\n      /* opacity for dark text on a light background */\n      --dark-divider-opacity: 0.12;\n      --dark-disabled-opacity: 0.38; /* or hint text or icon */\n      --dark-secondary-opacity: 0.54;\n      --dark-primary-opacity: 0.87;\n\n      /* opacity for light text on a dark background */\n      --light-divider-opacity: 0.12;\n      --light-disabled-opacity: 0.3; /* or hint text or icon */\n      --light-secondary-opacity: 0.7;\n      --light-primary-opacity: 1.0;\n\n    }\n\n  </style>\n</custom-style>\n`;Sa.setAttribute(\"style\",\"display: none;\"),document.head.appendChild(Sa.content);const xa=ma`\n<custom-style>\n  <style is=\"custom-style\">\n    html {\n      /*\n       * You can use these generic variables in your elements for easy theming.\n       * For example, if all your elements use \\`--primary-text-color\\` as its main\n       * color, then switching from a light to a dark theme is just a matter of\n       * changing the value of \\`--primary-text-color\\` in your application.\n       */\n      --primary-text-color: var(--light-theme-text-color);\n      --primary-background-color: var(--light-theme-background-color);\n      --secondary-text-color: var(--light-theme-secondary-color);\n      --disabled-text-color: var(--light-theme-disabled-color);\n      --divider-color: var(--light-theme-divider-color);\n      --error-color: var(--paper-deep-orange-a700);\n\n      /*\n       * Primary and accent colors. Also see color.js for more colors.\n       */\n      --primary-color: var(--paper-indigo-500);\n      --light-primary-color: var(--paper-indigo-100);\n      --dark-primary-color: var(--paper-indigo-700);\n\n      --accent-color: var(--paper-pink-a200);\n      --light-accent-color: var(--paper-pink-a100);\n      --dark-accent-color: var(--paper-pink-a400);\n\n\n      /*\n       * Material Design Light background theme\n       */\n      --light-theme-background-color: #ffffff;\n      --light-theme-base-color: #000000;\n      --light-theme-text-color: var(--paper-grey-900);\n      --light-theme-secondary-color: #737373;  /* for secondary text and icons */\n      --light-theme-disabled-color: #9b9b9b;  /* disabled/hint text */\n      --light-theme-divider-color: #dbdbdb;\n\n      /*\n       * Material Design Dark background theme\n       */\n      --dark-theme-background-color: var(--paper-grey-900);\n      --dark-theme-base-color: #ffffff;\n      --dark-theme-text-color: #ffffff;\n      --dark-theme-secondary-color: #bcbcbc;  /* for secondary text and icons */\n      --dark-theme-disabled-color: #646464;  /* disabled/hint text */\n      --dark-theme-divider-color: #3c3c3c;\n\n      /*\n       * Deprecated values because of their confusing names.\n       */\n      --text-primary-color: var(--dark-theme-text-color);\n      --default-primary-color: var(--primary-color);\n    }\n  </style>\n</custom-style>`;xa.setAttribute(\"style\",\"display: none;\"),document.head.appendChild(xa.content);const Va=ma`\n<custom-style>\n  <style is=\"custom-style\">\n    html {\n\n      --shadow-transition: {\n        transition: box-shadow 0.28s cubic-bezier(0.4, 0, 0.2, 1);\n      };\n\n      --shadow-none: {\n        box-shadow: none;\n      };\n\n      /* from http://codepen.io/shyndman/pen/c5394ddf2e8b2a5c9185904b57421cdb */\n\n      --shadow-elevation-2dp: {\n        box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14),\n                    0 1px 5px 0 rgba(0, 0, 0, 0.12),\n                    0 3px 1px -2px rgba(0, 0, 0, 0.2);\n      };\n\n      --shadow-elevation-3dp: {\n        box-shadow: 0 3px 4px 0 rgba(0, 0, 0, 0.14),\n                    0 1px 8px 0 rgba(0, 0, 0, 0.12),\n                    0 3px 3px -2px rgba(0, 0, 0, 0.4);\n      };\n\n      --shadow-elevation-4dp: {\n        box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14),\n                    0 1px 10px 0 rgba(0, 0, 0, 0.12),\n                    0 2px 4px -1px rgba(0, 0, 0, 0.4);\n      };\n\n      --shadow-elevation-6dp: {\n        box-shadow: 0 6px 10px 0 rgba(0, 0, 0, 0.14),\n                    0 1px 18px 0 rgba(0, 0, 0, 0.12),\n                    0 3px 5px -1px rgba(0, 0, 0, 0.4);\n      };\n\n      --shadow-elevation-8dp: {\n        box-shadow: 0 8px 10px 1px rgba(0, 0, 0, 0.14),\n                    0 3px 14px 2px rgba(0, 0, 0, 0.12),\n                    0 5px 5px -3px rgba(0, 0, 0, 0.4);\n      };\n\n      --shadow-elevation-12dp: {\n        box-shadow: 0 12px 16px 1px rgba(0, 0, 0, 0.14),\n                    0 4px 22px 3px rgba(0, 0, 0, 0.12),\n                    0 6px 7px -4px rgba(0, 0, 0, 0.4);\n      };\n\n      --shadow-elevation-16dp: {\n        box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14),\n                    0  6px 30px 5px rgba(0, 0, 0, 0.12),\n                    0  8px 10px -5px rgba(0, 0, 0, 0.4);\n      };\n\n      --shadow-elevation-24dp: {\n        box-shadow: 0 24px 38px 3px rgba(0, 0, 0, 0.14),\n                    0 9px 46px 8px rgba(0, 0, 0, 0.12),\n                    0 11px 15px -7px rgba(0, 0, 0, 0.4);\n      };\n    }\n  </style>\n</custom-style>`;Va.setAttribute(\"style\",\"display: none;\"),document.head.appendChild(Va.content);const Ma=ma`<custom-style>\n  <style is=\"custom-style\">\n    html {\n\n      /* Shared Styles */\n      --paper-font-common-base: {\n        font-family: 'Roboto', 'Noto', sans-serif;\n        -webkit-font-smoothing: antialiased;\n      };\n\n      --paper-font-common-code: {\n        font-family: 'Roboto Mono', 'Consolas', 'Menlo', monospace;\n        -webkit-font-smoothing: antialiased;\n      };\n\n      --paper-font-common-expensive-kerning: {\n        text-rendering: optimizeLegibility;\n      };\n\n      --paper-font-common-nowrap: {\n        white-space: nowrap;\n        overflow: hidden;\n        text-overflow: ellipsis;\n      };\n\n      /* Material Font Styles */\n\n      --paper-font-display4: {\n        @apply --paper-font-common-base;\n        @apply --paper-font-common-nowrap;\n\n        font-size: 112px;\n        font-weight: 300;\n        letter-spacing: -.044em;\n        line-height: 120px;\n      };\n\n      --paper-font-display3: {\n        @apply --paper-font-common-base;\n        @apply --paper-font-common-nowrap;\n\n        font-size: 56px;\n        font-weight: 400;\n        letter-spacing: -.026em;\n        line-height: 60px;\n      };\n\n      --paper-font-display2: {\n        @apply --paper-font-common-base;\n\n        font-size: 45px;\n        font-weight: 400;\n        letter-spacing: -.018em;\n        line-height: 48px;\n      };\n\n      --paper-font-display1: {\n        @apply --paper-font-common-base;\n\n        font-size: 34px;\n        font-weight: 400;\n        letter-spacing: -.01em;\n        line-height: 40px;\n      };\n\n      --paper-font-headline: {\n        @apply --paper-font-common-base;\n\n        font-size: 24px;\n        font-weight: 400;\n        letter-spacing: -.012em;\n        line-height: 32px;\n      };\n\n      --paper-font-title: {\n        @apply --paper-font-common-base;\n        @apply --paper-font-common-nowrap;\n\n        font-size: 20px;\n        font-weight: 500;\n        line-height: 28px;\n      };\n\n      --paper-font-subhead: {\n        @apply --paper-font-common-base;\n\n        font-size: 16px;\n        font-weight: 400;\n        line-height: 24px;\n      };\n\n      --paper-font-body2: {\n        @apply --paper-font-common-base;\n\n        font-size: 14px;\n        font-weight: 500;\n        line-height: 24px;\n      };\n\n      --paper-font-body1: {\n        @apply --paper-font-common-base;\n\n        font-size: 14px;\n        font-weight: 400;\n        line-height: 20px;\n      };\n\n      --paper-font-caption: {\n        @apply --paper-font-common-base;\n        @apply --paper-font-common-nowrap;\n\n        font-size: 12px;\n        font-weight: 400;\n        letter-spacing: 0.011em;\n        line-height: 20px;\n      };\n\n      --paper-font-menu: {\n        @apply --paper-font-common-base;\n        @apply --paper-font-common-nowrap;\n\n        font-size: 13px;\n        font-weight: 500;\n        line-height: 24px;\n      };\n\n      --paper-font-button: {\n        @apply --paper-font-common-base;\n        @apply --paper-font-common-nowrap;\n\n        font-size: 14px;\n        font-weight: 500;\n        letter-spacing: 0.018em;\n        line-height: 24px;\n        text-transform: uppercase;\n      };\n\n      --paper-font-code2: {\n        @apply --paper-font-common-code;\n\n        font-size: 14px;\n        font-weight: 700;\n        line-height: 20px;\n      };\n\n      --paper-font-code1: {\n        @apply --paper-font-common-code;\n\n        font-size: 14px;\n        font-weight: 500;\n        line-height: 20px;\n      };\n\n    }\n\n  </style>\n</custom-style>`;Ma.setAttribute(\"style\",\"display: none;\"),document.head.appendChild(Ma.content);const Ea=document.createElement(\"template\");Ea.setAttribute(\"style\",\"display: none;\"),Ea.innerHTML=`<custom-style>\\n  <style>\\n    /*\\n      Home Assistant default styles.\\n\\n      In Polymer 2.0, default styles should to be set on the html selector.\\n      (Setting all default styles only on body breaks shadyCSS polyfill.)\\n      See: https://github.com/home-assistant/home-assistant-polymer/pull/901\\n    */\\n    html {\\n      font-size: 14px;\\n      height: 100vh;\\n\\n      /* text */\\n      --primary-text-color: #212121;\\n      --secondary-text-color: #727272;\\n      --text-primary-color: #ffffff;\\n      --text-light-primary-color: #212121;\\n      --disabled-text-color: #bdbdbd;\\n\\n      /* main interface colors */\\n      --primary-color: #03a9f4;\\n      --dark-primary-color: #0288d1;\\n      --light-primary-color: #b3e5fC;\\n      --accent-color: #ff9800;\\n      --divider-color: rgba(0, 0, 0, .12);\\n\\n      --scrollbar-thumb-color: rgb(194, 194, 194);\\n\\n      --error-color: #db4437;\\n      --warning-color: #ffa600;\\n      --success-color: #43a047;\\n      --info-color: #039be5;\\n\\n      /* backgrounds */\\n      --card-background-color: #ffffff;\\n      --primary-background-color: #fafafa;\\n      --secondary-background-color: #e5e5e5; /* behind the cards on state */\\n\\n      /* for header */\\n      --header-height: 56px;\\n\\n      /* for label-badge */\\n      --label-badge-red: #DF4C1E;\\n      --label-badge-blue: #039be5;\\n      --label-badge-green: #0DA035;\\n      --label-badge-yellow: #f4b400;\\n      --label-badge-grey: #9e9e9e;\\n\\n      /* states */\\n      --state-icon-color: #44739e;\\n      /* an active state is anything that would require attention */\\n      --state-icon-active-color: #FDD835;\\n      /* an error state is anything that would be considered an error */\\n      /* --state-icon-error-color: #db4437; derived from error-color */\\n\\n      --state-on-color: #66a61e;\\n      --state-off-color: #ff0029;\\n      --state-home-color: #66a61e;\\n      --state-not_home-color: #ff0029;\\n      /* --state-unavailable-color: #a0a0a0; derived from disabled-text-color */\\n      --state-unknown-color: #606060;\\n      --state-idle-color: #7990a3;\\n\\n      /* climate state colors */\\n      --state-climate-auto-color: #008000;\\n      --state-climate-eco-color: #00ff7f;\\n      --state-climate-cool-color: #2b9af9;\\n      --state-climate-heat-color: #ff8100;\\n      --state-climate-manual-color: #44739e;\\n      --state-climate-off-color: #8a8a8a;\\n      --state-climate-fan_only-color: #8a8a8a;\\n      --state-climate-dry-color: #efbd07;\\n      --state-climate-idle-color: #8a8a8a;\\n\\n      /* energy */\\n      --energy-grid-consumption-color: #488fc2;\\n      --energy-grid-return-color: #8353d1;\\n      --energy-solar-color: #ff9800;\\n      --energy-non-fossil-color: #0f9d58;\\n      --energy-battery-out-color: #4db6ac;\\n      --energy-battery-in-color: #f06292;\\n      --energy-gas-color: #8E021B;\\n\\n      /* opacity for dark text on a light background */\\n      --dark-divider-opacity: 0.12;\\n      --dark-disabled-opacity: 0.38; /* or hint text or icon */\\n      --dark-secondary-opacity: 0.54;\\n      --dark-primary-opacity: 0.87;\\n\\n      /* opacity for light text on a dark background */\\n      --light-divider-opacity: 0.12;\\n      --light-disabled-opacity: 0.3; /* or hint text or icon */\\n      --light-secondary-opacity: 0.7;\\n      --light-primary-opacity: 1.0;\\n\\n      /* rgb */\\n      --rgb-primary-color: 3, 169, 244;\\n      --rgb-accent-color: 255, 152, 0;\\n      --rgb-primary-text-color: 33, 33, 33;\\n      --rgb-secondary-text-color: 114, 114, 114;\\n      --rgb-text-primary-color: 255, 255, 255;\\n      --rgb-card-background-color: 255, 255, 255;\\n\\n      /* input components */\\n      --input-idle-line-color: rgba(0, 0, 0, 0.42);\\n      --input-hover-line-color: rgba(0, 0, 0, 0.87);\\n      --input-disabled-line-color: rgba(0, 0, 0, 0.06);\\n      --input-outlined-idle-border-color: rgba(0, 0, 0, 0.38);\\n      --input-outlined-hover-border-color: rgba(0, 0, 0, 0.87);\\n      --input-outlined-disabled-border-color: rgba(0, 0, 0, 0.06);\\n      --input-fill-color: rgb(245, 245, 245);\\n      --input-disabled-fill-color: rgb(250, 250, 250);\\n      --input-ink-color: rgba(0, 0, 0, 0.87);\\n      --input-label-ink-color: rgba(0, 0, 0, 0.6);\\n      --input-disabled-ink-color: rgba(0, 0, 0, 0.37);\\n      --input-dropdown-icon-color: rgba(0, 0, 0, 0.54);\\n\\n      /* Vaadin typography */\\n      --material-h6-font-size: 1.25rem;\\n      --material-small-font-size: 0.875rem;\\n      --material-caption-font-size: 0.75rem;\\n      --material-button-font-size: 0.875rem;\\n\\n      ${Object.entries(Me).map((([e,t])=>`--${e}: ${t};`)).join(\"\")}\\n    }\\n  </style>\\n</custom-style>`,document.head.appendChild(Ea.content);let Pa=s(null,(function(e,o){class i extends o{constructor(...t){super(...t),e(this)}}return{F:i,d:[{kind:\"field\",decorators:[ve({attribute:!1})],key:\"hacs\",value:void 0},{kind:\"field\",decorators:[ve({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[ve({attribute:!1})],key:\"route\",value:void 0},{kind:\"field\",decorators:[ve({type:Boolean})],key:\"active\",value:()=>!1},{kind:\"field\",decorators:[ve({type:Boolean})],key:\"secondary\",value:()=>!1},{kind:\"field\",decorators:[ve({type:Boolean})],key:\"loading\",value:()=>!0},{kind:\"field\",decorators:[ve({type:Boolean})],key:\"narrow\",value:void 0},{kind:\"field\",decorators:[ve({type:Boolean})],key:\"sidebarDocked\",value:void 0},{kind:\"method\",key:\"shouldUpdate\",value:function(e){return e.forEach(((e,t)=>{\"hass\"===t&&(this.sidebarDocked='\"docked\"'===window.localStorage.getItem(\"dockedSidebar\"))})),e.has(\"sidebarDocked\")||e.has(\"narrow\")||e.has(\"active\")||e.has(\"params\")||e.has(\"_error\")||e.has(\"_progress\")||e.has(\"_releaseNotes\")||e.has(\"_updating\")}},{kind:\"method\",key:\"connectedCallback\",value:function(){r(t(i.prototype),\"connectedCallback\",this).call(this),this.sidebarDocked='\"docked\"'===window.localStorage.getItem(\"dockedSidebar\")}}]}}),_e);const Ta={\"add-repository\":()=>import(\"./c.f0a99f33.js\"),\"custom-repositories\":()=>import(\"./c.b720c549.js\"),generic:()=>import(\"./c.6b0f0543.js\"),download:()=>import(\"./c.822f38be.js\"),navigate:()=>import(\"./c.4c31e630.js\"),removed:()=>import(\"./c.ba01fa51.js\"),update:()=>import(\"./c.4053bced.js\"),progress:()=>import(\"./c.f2cbe48c.js\")};s([ye(\"hacs-event-dialog\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[ve({attribute:!1})],key:\"params\",value:void 0},{kind:\"method\",key:\"render\",value:function(){if(!this.active)return K``;const e=this.params.type||\"generic\";Ta[e]();const t=document.createElement(`hacs-${e}-dialog`);if(t.active=!0,t.hass=this.hass,t.hacs=this.hacs,t.narrow=this.narrow,t.secondary=this.secondary,t.route=this.route,this.params)for(const[e,o]of Object.entries(this.params))t[e]=o;return K`${t}`}}]}}),Pa);const za=e=>null==e?void 0:e.sort(((e,t)=>e.name.toLowerCase()>t.name.toLowerCase()?1:-1));let Na;!function(e){e.CONFIG=\"hacs_dispatch_config\",e.ERROR=\"hacs_dispatch_error\",e.RELOAD=\"hacs_dispatch_reload\",e.REPOSITORY=\"hacs_dispatch_repository\",e.STAGE=\"hacs_dispatch_stage\",e.STARTUP=\"hacs_dispatch_startup\",e.STATUS=\"hacs_dispatch_status\"}(Na||(Na={}));const Ia=async e=>e.connection.sendMessagePromise({type:\"hacs/info\"}),Oa=async e=>e.connection.sendMessagePromise({type:\"hacs/repositories/list\"}),Ra=async e=>e.connection.sendMessagePromise({type:\"hacs/critical/list\"}),Da=async e=>e.connection.sendMessagePromise({type:\"hacs/repositories/removed\"}),ja=async(e,t)=>e.connection.sendMessagePromise({type:\"hacs/repository/remove\",repository:t}),Ba=async(e,t)=>e.connection.sendMessagePromise({type:\"hacs/repository/ignore\",repository:t}),$a=async(e,t)=>e.connection.sendMessagePromise({type:\"hacs/repository/release_notes\",repository:t}),Fa=async(e,t,o)=>e.connection.sendMessagePromise({type:\"hacs/repositories/add\",repository:t,category:o}),Ua=async(e,t,o)=>e.connection.sendMessagePromise({type:\"hacs/repository/beta\",repository:t,show_beta:o}),Za=async(e,t)=>e.connection.sendMessagePromise({type:\"hacs/repository/refresh\",repository:t}),qa=async(e,t)=>e.connection.sendMessagePromise({type:\"hacs/repositories/remove\",repository:t}),Ga=async(e,t)=>e.connection.sendMessagePromise({type:\"hacs/repositories/clear_new\",...t}),Ka=async e=>{try{return await e.connection.sendMessagePromise({type:\"lovelace/resources\"})}catch(e){return null}},Ya=e=>e.connection.sendMessagePromise({type:\"lovelace/resources\"}),Wa=(e,t)=>e.callWS({type:\"lovelace/resources/create\",...t}),Xa=(e,t)=>e.callWS({type:\"lovelace/resources/update\",...t}),Ja=(e,t)=>e.callWS({type:\"lovelace/resources/delete\",resource_id:t}),Qa=(e,t,o)=>e.connection.subscribeMessage(t,{type:\"hacs/subscribe\",signal:o});var es=Number.isNaN||function(e){return\"number\"==typeof e&&e!=e};function ts(e,t){if(e.length!==t.length)return!1;for(var o=0;o<e.length;o++)if(r=e[o],i=t[o],!(r===i||es(r)&&es(i)))return!1;var r,i;return!0}function os(e,t){var o;void 0===t&&(t=ts);var r,i=[],n=!1;return function(){for(var a=[],s=0;s<arguments.length;s++)a[s]=arguments[s];return n&&o===this&&t(a,i)||(r=e.apply(this,a),n=!0,o=this,i=a),r}}var rs=\"M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z\",is=\"M6 8C6 5.79 7.79 4 10 4S14 5.79 14 8 12.21 12 10 12 6 10.21 6 8M10 14C5.58 14 2 15.79 2 18V20H13.09C13.04 19.67 13 19.34 13 19C13 17.36 13.66 15.87 14.74 14.78C13.41 14.29 11.78 14 10 14M23 19L20 16V18H16V20H20V22L23 19Z\",ns=\"M11,14C12,14 13.05,14.16 14.2,14.44C13.39,15.31 13,16.33 13,17.5C13,18.39 13.25,19.23 13.78,20H3V18C3,16.81 3.91,15.85 5.74,15.12C7.57,14.38 9.33,14 11,14M11,12C9.92,12 9,11.61 8.18,10.83C7.38,10.05 7,9.11 7,8C7,6.92 7.38,6 8.18,5.18C9,4.38 9.92,4 11,4C12.11,4 13.05,4.38 13.83,5.18C14.61,6 15,6.92 15,8C15,9.11 14.61,10.05 13.83,10.83C13.05,11.61 12.11,12 11,12M18.5,10H20L22,10V12H20V17.5A2.5,2.5 0 0,1 17.5,20A2.5,2.5 0 0,1 15,17.5A2.5,2.5 0 0,1 17.5,15C17.86,15 18.19,15.07 18.5,15.21V10Z\",as=\"M11,4A4,4 0 0,1 15,8A4,4 0 0,1 11,12A4,4 0 0,1 7,8A4,4 0 0,1 11,4M11,6A2,2 0 0,0 9,8A2,2 0 0,0 11,10A2,2 0 0,0 13,8A2,2 0 0,0 11,6M11,13C12.1,13 13.66,13.23 15.11,13.69C14.5,14.07 14,14.6 13.61,15.23C12.79,15.03 11.89,14.9 11,14.9C8.03,14.9 4.9,16.36 4.9,17V18.1H13.04C13.13,18.8 13.38,19.44 13.76,20H3V17C3,14.34 8.33,13 11,13M18.5,10H20L22,10V12H20V17.5A2.5,2.5 0 0,1 17.5,20A2.5,2.5 0 0,1 15,17.5A2.5,2.5 0 0,1 17.5,15C17.86,15 18.19,15.07 18.5,15.21V10Z\",ss=\"M19,18.31V20A2,2 0 0,1 17,22H7A2,2 0 0,1 5,20V16.3C4.54,16.12 3.95,16 3,16A1,1 0 0,1 2,15A1,1 0 0,1 3,14C3.82,14 4.47,14.08 5,14.21V12.3C4.54,12.12 3.95,12 3,12A1,1 0 0,1 2,11A1,1 0 0,1 3,10C3.82,10 4.47,10.08 5,10.21V8.3C4.54,8.12 3.95,8 3,8A1,1 0 0,1 2,7A1,1 0 0,1 3,6C3.82,6 4.47,6.08 5,6.21V4A2,2 0 0,1 7,2H17A2,2 0 0,1 19,4V6.16C20.78,6.47 21.54,7.13 21.71,7.29C22.1,7.68 22.1,8.32 21.71,8.71C21.32,9.1 20.8,9.09 20.29,8.71V8.71C20.29,8.71 19.25,8 17,8C15.74,8 14.91,8.41 13.95,8.9C12.91,9.41 11.74,10 10,10C9.64,10 9.31,10 9,9.96V7.95C9.3,8 9.63,8 10,8C11.26,8 12.09,7.59 13.05,7.11C14.09,6.59 15.27,6 17,6V4H7V20H17V18C18.5,18 18.97,18.29 19,18.31M17,10C15.27,10 14.09,10.59 13.05,11.11C12.09,11.59 11.26,12 10,12C9.63,12 9.3,12 9,11.95V13.96C9.31,14 9.64,14 10,14C11.74,14 12.91,13.41 13.95,12.9C14.91,12.42 15.74,12 17,12C19.25,12 20.29,12.71 20.29,12.71V12.71C20.8,13.1 21.32,13.1 21.71,12.71C22.1,12.32 22.1,11.69 21.71,11.29C21.5,11.08 20.25,10 17,10M17,14C15.27,14 14.09,14.59 13.05,15.11C12.09,15.59 11.26,16 10,16C9.63,16 9.3,16 9,15.95V17.96C9.31,18 9.64,18 10,18C11.74,18 12.91,17.41 13.95,16.9C14.91,16.42 15.74,16 17,16C19.25,16 20.29,16.71 20.29,16.71V16.71C20.8,17.1 21.32,17.1 21.71,16.71C22.1,16.32 22.1,15.69 21.71,15.29C21.5,15.08 20.25,14 17,14Z\",ls=\"M11 9C8.79 9 7 10.79 7 13S8.79 17 11 17 15 15.21 15 13 13.21 9 11 9M11 15C9.9 15 9 14.11 9 13S9.9 11 11 11 13 11.9 13 13 12.11 15 11 15M7 4H14C16.21 4 18 5.79 18 8V9H16V8C16 6.9 15.11 6 14 6H7C5.9 6 5 6.9 5 8V20H16V18H18V22H3V8C3 5.79 4.79 4 7 4M19 10.5C19 10.5 21 12.67 21 14C21 15.1 20.1 16 19 16S17 15.1 17 14C17 12.67 19 10.5 19 10.5\",ds=\"M22.1 21.5L2.4 1.7L1.1 3L3.8 5.7C3.3 6.3 3 7.1 3 8V22H18V19.9L20.8 22.7L22.1 21.5M9.6 11.5L12.4 14.3C12.1 14.7 11.6 15 11 15C9.9 15 9 14.1 9 13C9 12.4 9.3 11.9 9.6 11.5M16 17.9V20H5V8C5 7.7 5.1 7.4 5.2 7.1L8.2 10.1C7.5 10.8 7 11.9 7 13C7 15.2 8.8 17 11 17C12.1 17 13.2 16.5 13.9 15.8L16 17.9M17 13.8C17.1 12.5 19 10.5 19 10.5S21 12.7 21 14C21 15 20.2 15.9 19.2 16L17 13.8M9.2 6L7.2 4H14C16.2 4 18 5.8 18 8V9H16V8C16 6.9 15.1 6 14 6H9.2Z\",cs=\"M12,11A1,1 0 0,0 11,12A1,1 0 0,0 12,13A1,1 0 0,0 13,12A1,1 0 0,0 12,11M12,16.5C9.5,16.5 7.5,14.5 7.5,12C7.5,9.5 9.5,7.5 12,7.5C14.5,7.5 16.5,9.5 16.5,12C16.5,14.5 14.5,16.5 12,16.5M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\",ps=\"M13 14H11V9H13M13 18H11V16H13M1 21H23L12 2L1 21Z\",us=\"M13,13H11V7H13M13,17H11V15H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\",ms=\"M11,15H13V17H11V15M11,7H13V13H11V7M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20Z\",hs=\"M2.2,16.06L3.88,12L2.2,7.94L6.26,6.26L7.94,2.2L12,3.88L16.06,2.2L17.74,6.26L21.8,7.94L20.12,12L21.8,16.06L17.74,17.74L16.06,21.8L12,20.12L7.94,21.8L6.26,17.74L2.2,16.06M13,17V15H11V17H13M13,13V7H11V13H13Z\",gs=\"M12,2L1,21H23M12,6L19.53,19H4.47M11,10V14H13V10M11,16V18H13V16\",_s=\"M20,19H4.09L14.18,4.43L15.82,5.57L11.28,12.13C12.89,12.96 14,14.62 14,16.54C14,16.7 14,16.85 13.97,17H20V19M7.91,17H11.96C12,16.85 12,16.7 12,16.54C12,15.28 11.24,14.22 10.14,13.78L7.91,17Z\",fs=\"M12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2M12,4A8,8 0 0,0 4,12C4,14.09 4.8,16 6.11,17.41L9.88,9.88L17.41,6.11C16,4.8 14.09,4 12,4M12,20A8,8 0 0,0 20,12C20,9.91 19.2,8 17.89,6.59L14.12,14.12L6.59,17.89C8,19.2 9.91,20 12,20M12,12L11.23,11.23L9.7,14.3L12.77,12.77L12,12M12,17.5H13V19H12V17.5M15.88,15.89L16.59,15.18L17.65,16.24L16.94,16.95L15.88,15.89M17.5,12V11H19V12H17.5M12,6.5H11V5H12V6.5M8.12,8.11L7.41,8.82L6.35,7.76L7.06,7.05L8.12,8.11M6.5,12V13H5V12H6.5Z\",ys=\"M21 2H3C1.9 2 1 2.9 1 4V20C1 21.1 1.9 22 3 22H21C22.1 22 23 21.1 23 20V4C23 2.9 22.1 2 21 2M21 7H3V4H21V7Z\",bs=\"M13,20V4H15.03V20H13M10,20V4H12.03V20H10M5,8L9.03,12L5,16V13H2V11H5V8M20,16L16,12L20,8V11H23V13H20V16Z\",vs=\"M11,4H13V16L18.5,10.5L19.92,11.92L12,19.84L4.08,11.92L5.5,10.5L11,16V4Z\",Cs=\"M9,4H15V12H19.84L12,19.84L4.16,12H9V4Z\",As=\"M3,5A2,2 0 0,1 5,3H19A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5C3.89,21 3,20.1 3,19V5M11,6V14.5L7.5,11L6.08,12.42L12,18.34L17.92,12.42L16.5,11L13,14.5V6H11Z\",ws=\"M11,6V14L7.5,10.5L6.08,11.92L12,17.84L17.92,11.92L16.5,10.5L13,14V6H11M12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12A10,10 0 0,1 12,22Z\",Hs=\"M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z\",ks=\"M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z\",Ls=\"M18,16V13H15V22H13V2H15V11H18V8L22,12L18,16M2,12L6,16V13H9V22H11V2H9V11H6V8L2,12Z\",Ss=\"M13,20H11V8L5.5,13.5L4.08,12.08L12,4.16L19.92,12.08L18.5,13.5L13,8V20Z\",xs=\"M21,19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V5A2,2 0 0,1 5,3H19C20.11,3 21,3.9 21,5V19M13,18V9.5L16.5,13L17.92,11.58L12,5.66L6.08,11.58L7.5,13L11,9.5V18H13Z\",Vs=\"M21.5 9.5L20.09 10.92L17 7.83V13.5C17 17.09 14.09 20 10.5 20H4V18H10.5C13 18 15 16 15 13.5V7.83L11.91 10.91L10.5 9.5L16 4L21.5 9.5Z\",Ms=\"M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.67C6,21.4 6.6,22 7.33,22H16.67A1.33,1.33 0 0,0 18,20.67V5.33C18,4.6 17.4,4 16.67,4Z\",Es=\"M16,18H8V6H16M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.67C6,21.4 6.6,22 7.33,22H16.67A1.33,1.33 0 0,0 18,20.67V5.33C18,4.6 17.4,4 16.67,4Z\",Ps=\"M16,17H8V6H16M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.67C6,21.4 6.6,22 7.33,22H16.67A1.33,1.33 0 0,0 18,20.67V5.33C18,4.6 17.4,4 16.67,4Z\",Ts=\"M16,15H8V6H16M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.67C6,21.4 6.6,22 7.33,22H16.67A1.33,1.33 0 0,0 18,20.67V5.33C18,4.6 17.4,4 16.67,4Z\",zs=\"M16,14H8V6H16M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.67C6,21.4 6.6,22 7.33,22H16.67A1.33,1.33 0 0,0 18,20.67V5.33C18,4.6 17.4,4 16.67,4Z\",Ns=\"M16,13H8V6H16M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.67C6,21.4 6.6,22 7.33,22H16.67A1.33,1.33 0 0,0 18,20.67V5.33C18,4.6 17.4,4 16.67,4Z\",Is=\"M16,12H8V6H16M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.67C6,21.4 6.6,22 7.33,22H16.67A1.33,1.33 0 0,0 18,20.67V5.33C18,4.6 17.4,4 16.67,4Z\",Os=\"M16,10H8V6H16M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.67C6,21.4 6.6,22 7.33,22H16.67A1.33,1.33 0 0,0 18,20.67V5.33C18,4.6 17.4,4 16.67,4Z\",Rs=\"M16,9H8V6H16M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.67C6,21.4 6.6,22 7.33,22H16.67A1.33,1.33 0 0,0 18,20.67V5.33C18,4.6 17.4,4 16.67,4Z\",Ds=\"M16,8H8V6H16M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.67C6,21.4 6.6,22 7.33,22H16.67A1.33,1.33 0 0,0 18,20.67V5.33C18,4.6 17.4,4 16.67,4Z\",js=\"M13 14H11V8H13M13 18H11V16H13M16.7 4H15V2H9V4H7.3C6.6 4 6 4.6 6 5.3V20.6C6 21.4 6.6 22 7.3 22H16.6C17.3 22 17.9 21.4 17.9 20.7V5.3C18 4.6 17.4 4 16.7 4Z\",Bs=\"M14 20H6V6H14M14.67 4H13V2H7V4H5.33C4.6 4 4 4.6 4 5.33V20.67C4 21.4 4.6 22 5.33 22H14.67C15.4 22 16 21.4 16 20.67V5.33C16 4.6 15.4 4 14.67 4M21 7H19V13H21V8M21 15H19V17H21V15Z\",$s=\"M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.66C6,21.4 6.6,22 7.33,22H16.66C17.4,22 18,21.4 18,20.67V5.33C18,4.6 17.4,4 16.67,4M11,20V14.5H9L13,7V12.5H15\",Fs=\"M23.05,11H20.05V4L15.05,14H18.05V22M12,18H4L4.05,6H12.05M12.72,4H11.05V2H5.05V4H3.38A1.33,1.33 0 0,0 2.05,5.33V20.67C2.05,21.4 2.65,22 3.38,22H12.72C13.45,22 14.05,21.4 14.05,20.67V5.33A1.33,1.33 0 0,0 12.72,4Z\",Us=\"M23.05,11H20.05V4L15.05,14H18.05V22M12.05,17H4.05V6H12.05M12.72,4H11.05V2H5.05V4H3.38A1.33,1.33 0 0,0 2.05,5.33V20.67C2.05,21.4 2.65,22 3.38,22H12.72C13.45,22 14.05,21.4 14.05,20.67V5.33A1.33,1.33 0 0,0 12.72,4Z\",Zs=\"M12,15H4V6H12M12.67,4H11V2H5V4H3.33A1.33,1.33 0 0,0 2,5.33V20.67C2,21.4 2.6,22 3.33,22H12.67C13.4,22 14,21.4 14,20.67V5.33A1.33,1.33 0 0,0 12.67,4M23,11H20V4L15,14H18V22L23,11Z\",qs=\"M13 4H11V2H5V4H3C2.4 4 2 4.4 2 5V21C2 21.6 2.4 22 3 22H13C13.6 22 14 21.6 14 21V5C14 4.4 13.6 4 13 4M12 14.5H4V6H12V14.5M23 11H20V4L15 14H18V22\",Gs=\"M23,11H20V4L15,14H18V22M12,13H4V6H12M12.67,4H11V2H5V4H3.33A1.33,1.33 0 0,0 2,5.33V20.67C2,21.4 2.6,22 3.33,22H12.67C13.4,22 14,21.4 14,20.67V5.33A1.33,1.33 0 0,0 12.67,4Z\",Ks=\"M12,11H4V6H12M12.67,4H11V2H5V4H3.33A1.33,1.33 0 0,0 2,5.33V20.67C2,21.4 2.6,22 3.33,22H12.67C13.4,22 14,21.4 14,20.67V5.33A1.33,1.33 0 0,0 12.67,4M23,11H20V4L15,14H18V22L23,11Z\",Ys=\"M12,10H4V6H12M12.67,4H11V2H5V4H3.33A1.33,1.33 0 0,0 2,5.33V20.67C2,21.4 2.6,22 3.33,22H12.67C13.4,22 14,21.4 14,20.67V5.33A1.33,1.33 0 0,0 12.67,4M23,11H20V4L15,14H18V22L23,11Z\",Ws=\"M23,11H20V4L15,14H18V22M12,9H4V6H12M12.67,4H11V2H5V4H3.33A1.33,1.33 0 0,0 2,5.33V20.67C2,21.4 2.6,22 3.33,22H12.67C13.4,22 14,21.4 14,20.67V5.33A1.33,1.33 0 0,0 12.67,4Z\",Xs=\"M23,11H20V4L15,14H18V22M12,8H4V6H12M12.67,4H11V2H5V4H3.33A1.33,1.33 0 0,0 2,5.33V20.67C2,21.4 2.6,22 3.33,22H12.67C13.4,22 14,21.4 14,20.67V5.33A1.33,1.33 0 0,0 12.67,4Z\",Js=\"M23.05,11H20.05V4L15.05,14H18.05V22M12,20H4L4.05,6H12.05M12.72,4H11.05V2H5.05V4H3.38A1.33,1.33 0 0,0 2.05,5.33V20.67C2.05,21.4 2.65,22 3.38,22H12.72C13.45,22 14.05,21.4 14.05,20.67V5.33A1.33,1.33 0 0,0 12.72,4Z\",Qs=\"M16,20H8V6H16M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.67C6,21.4 6.6,22 7.33,22H16.67A1.33,1.33 0 0,0 18,20.67V5.33C18,4.6 17.4,4 16.67,4Z\",el=\"M15.07,12.25L14.17,13.17C13.63,13.71 13.25,14.18 13.09,15H11.05C11.16,14.1 11.56,13.28 12.17,12.67L13.41,11.41C13.78,11.05 14,10.55 14,10C14,8.89 13.1,8 12,8A2,2 0 0,0 10,10H8A4,4 0 0,1 12,6A4,4 0 0,1 16,10C16,10.88 15.64,11.68 15.07,12.25M13,19H11V17H13M16.67,4H15V2H9V4H7.33A1.33,1.33 0 0,0 6,5.33V20.66C6,21.4 6.6,22 7.33,22H16.67C17.4,22 18,21.4 18,20.66V5.33C18,4.59 17.4,4 16.67,4Z\",tl=\"M21,19V20H3V19L5,17V11C5,7.9 7.03,5.17 10,4.29C10,4.19 10,4.1 10,4A2,2 0 0,1 12,2A2,2 0 0,1 14,4C14,4.1 14,4.19 14,4.29C16.97,5.17 19,7.9 19,11V17L21,19M14,21A2,2 0 0,1 12,23A2,2 0 0,1 10,21\",ol=\"M21,19V20H3V19L5,17V11C5,7.9 7.03,5.17 10,4.29C10,4.19 10,4.1 10,4A2,2 0 0,1 12,2A2,2 0 0,1 14,4C14,4.1 14,4.19 14,4.29C16.97,5.17 19,7.9 19,11V17L21,19M14,21A2,2 0 0,1 12,23A2,2 0 0,1 10,21M19.75,3.19L18.33,4.61C20.04,6.3 21,8.6 21,11H23C23,8.07 21.84,5.25 19.75,3.19M1,11H3C3,8.6 3.96,6.3 5.67,4.61L4.25,3.19C2.16,5.25 1,8.07 1,11Z\",rl=\"M3,2H21A1,1 0 0,1 22,3V5A1,1 0 0,1 21,6H20V13A1,1 0 0,1 19,14H13V16.17C14.17,16.58 15,17.69 15,19A3,3 0 0,1 12,22A3,3 0 0,1 9,19C9,17.69 9.83,16.58 11,16.17V14H5A1,1 0 0,1 4,13V6H3A1,1 0 0,1 2,5V3A1,1 0 0,1 3,2M12,18A1,1 0 0,0 11,19A1,1 0 0,0 12,20A1,1 0 0,0 13,19A1,1 0 0,0 12,18Z\",il=\"M3 2H21C21.55 2 22 2.45 22 3V5C22 5.55 21.55 6 21 6H20V7C20 7.55 19.55 8 19 8H13V10.17C14.17 10.58 15 11.7 15 13C15 14.66 13.66 16 12 16C10.34 16 9 14.66 9 13C9 11.69 9.84 10.58 11 10.17V8H5C4.45 8 4 7.55 4 7V6H3C2.45 6 2 5.55 2 5V3C2 2.45 2.45 2 3 2M12 12C11.45 12 11 12.45 11 13C11 13.55 11.45 14 12 14C12.55 14 13 13.55 13 13C13 12.45 12.55 12 12 12Z\",nl=\"M14.88,16.29L13,18.17V14.41M13,5.83L14.88,7.71L13,9.58M17.71,7.71L12,2H11V9.58L6.41,5L5,6.41L10.59,12L5,17.58L6.41,19L11,14.41V22H12L17.71,16.29L13.41,12L17.71,7.71Z\",al=\"M19,10L17,12L19,14L21,12M14.88,16.29L13,18.17V14.41M13,5.83L14.88,7.71L13,9.58M17.71,7.71L12,2H11V9.58L6.41,5L5,6.41L10.59,12L5,17.58L6.41,19L11,14.41V22H12L17.71,16.29L13.41,12M7,12L5,10L3,12L5,14L7,12Z\",sl=\"M17,3H7A2,2 0 0,0 5,5V21L12,18L19,21V5C19,3.89 18.1,3 17,3Z\",ll=\"M12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6A6,6 0 0,1 18,12A6,6 0 0,1 12,18M20,15.31L23.31,12L20,8.69V4H15.31L12,0.69L8.69,4H4V8.69L0.69,12L4,15.31V20H8.69L12,23.31L15.31,20H20V15.31Z\",dl=\"M12,8A4,4 0 0,0 8,12A4,4 0 0,0 12,16A4,4 0 0,0 16,12A4,4 0 0,0 12,8M12,18A6,6 0 0,1 6,12A6,6 0 0,1 12,6A6,6 0 0,1 18,12A6,6 0 0,1 12,18M20,8.69V4H15.31L12,0.69L8.69,4H4V8.69L0.69,12L4,15.31V20H8.69L12,23.31L15.31,20H20V15.31L23.31,12L20,8.69Z\",cl=\"M12,8H4A2,2 0 0,0 2,10V14A2,2 0 0,0 4,16H5V20A1,1 0 0,0 6,21H8A1,1 0 0,0 9,20V16H12L17,20V4L12,8M21.5,12C21.5,13.71 20.54,15.26 19,16V8C20.53,8.75 21.5,10.3 21.5,12Z\",pl=\"M19,19H5V8H19M16,1V3H8V1H6V3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3H18V1M17,12H12V17H17V12Z\",ul=\"M15,13H16.5V15.82L18.94,17.23L18.19,18.53L15,16.69V13M19,8H5V19H9.67C9.24,18.09 9,17.07 9,16A7,7 0 0,1 16,9C17.07,9 18.09,9.24 19,9.67V8M5,21C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H6V1H8V3H16V1H18V3H19A2,2 0 0,1 21,5V11.1C22.24,12.36 23,14.09 23,16A7,7 0 0,1 16,23C14.09,23 12.36,22.24 11.1,21H5M16,11.15A4.85,4.85 0 0,0 11.15,16C11.15,18.68 13.32,20.85 16,20.85A4.85,4.85 0 0,0 20.85,16C20.85,13.32 18.68,11.15 16,11.15Z\",ml=\"M3,6H21V18H3V6M12,9A3,3 0 0,1 15,12A3,3 0 0,1 12,15A3,3 0 0,1 9,12A3,3 0 0,1 12,9M7,8A2,2 0 0,1 5,10V14A2,2 0 0,1 7,16H17A2,2 0 0,1 19,14V10A2,2 0 0,1 17,8H7Z\",hl=\"M1,10V12A9,9 0 0,1 10,21H12C12,14.92 7.07,10 1,10M1,14V16A5,5 0 0,1 6,21H8A7,7 0 0,0 1,14M1,18V21H4A3,3 0 0,0 1,18M21,3H3C1.89,3 1,3.89 1,5V8H3V5H21V19H14V21H21A2,2 0 0,0 23,19V5C23,3.89 22.1,3 21,3Z\",gl=\"M21,3H3C1.89,3 1,3.89 1,5V8H3V5H21V19H14V21H21A2,2 0 0,0 23,19V5C23,3.89 22.1,3 21,3M1,10V12A9,9 0 0,1 10,21H12C12,14.92 7.07,10 1,10M19,7H5V8.63C8.96,9.91 12.09,13.04 13.37,17H19M1,14V16A5,5 0 0,1 6,21H8A7,7 0 0,0 1,14M1,18V21H4A3,3 0 0,0 1,18Z\",_l=\"M22 5H4V2H2V22H22V20H4V9C8.09 9 10.13 11 12.29 13.21S17.09 18 22 18V16C17.91 16 15.87 14 13.71 11.79S8.91 7 4 7H22Z\",fl=\"M9,20.42L2.79,14.21L5.62,11.38L9,14.77L18.88,4.88L21.71,7.71L9,20.42Z\",yl=\"M12 2C6.5 2 2 6.5 2 12S6.5 22 12 22 22 17.5 22 12 17.5 2 12 2M10 17L5 12L6.41 10.59L10 14.17L17.59 6.58L19 8L10 17Z\",bl=\"M12 2C6.5 2 2 6.5 2 12S6.5 22 12 22 22 17.5 22 12 17.5 2 12 2M12 20C7.59 20 4 16.41 4 12S7.59 4 12 4 20 7.59 20 12 16.41 20 12 20M16.59 7.58L10 14.17L7.41 11.59L6 13L10 17L18 9L16.59 7.58Z\",vl=\"M15,20A1,1 0 0,0 14,19H13V17H17A2,2 0 0,0 19,15V5A2,2 0 0,0 17,3H7A2,2 0 0,0 5,5V15A2,2 0 0,0 7,17H11V19H10A1,1 0 0,0 9,20H2V22H9A1,1 0 0,0 10,23H14A1,1 0 0,0 15,22H22V20H15M7,15V5H17V15H7M8,10.37L9.24,9.13L10.93,10.83L14.76,7L16,8.5L10.93,13.57L8,10.37Z\",Cl=\"M10,17L5,12L6.41,10.58L10,14.17L17.59,6.58L19,8M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\",Al=\"M20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4C12.76,4 13.5,4.11 14.2,4.31L15.77,2.74C14.61,2.26 13.34,2 12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12M7.91,10.08L6.5,11.5L11,16L21,6L19.59,4.58L11,13.17L7.91,10.08Z\",wl=\"M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z\",Hl=\"M15.41,16.58L10.83,12L15.41,7.41L14,6L8,12L14,18L15.41,16.58Z\",kl=\"M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z\",Ll=\"M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\",Sl=\"M12 5C15.87 5 19 8.13 19 12C19 15.87 15.87 19 12 19C8.13 19 5 15.87 5 12C5 8.13 8.13 5 12 5M12 2C17.5 2 22 6.5 22 12C22 17.5 17.5 22 12 22C6.5 22 2 17.5 2 12C2 6.5 6.5 2 12 2M12 4C7.58 4 4 7.58 4 12C4 16.42 7.58 20 12 20C16.42 20 20 16.42 20 12C20 7.58 16.42 4 12 4Z\",xl=\"M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M16.2,16.2L11,13V7H12.5V12.2L17,14.9L16.2,16.2Z\",Vl=\"M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z\",Ml=\"M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2C6.47,2 2,6.47 2,12C2,17.53 6.47,22 12,22C17.53,22 22,17.53 22,12C22,6.47 17.53,2 12,2M14.59,8L12,10.59L9.41,8L8,9.41L10.59,12L8,14.59L9.41,16L12,13.41L14.59,16L16,14.59L13.41,12L16,9.41L14.59,8Z\",El=\"M15,20A1,1 0 0,0 14,19H13V17H17A2,2 0 0,0 19,15V5A2,2 0 0,0 17,3H7A2,2 0 0,0 5,5V15A2,2 0 0,0 7,17H11V19H10A1,1 0 0,0 9,20H2V22H9A1,1 0 0,0 10,23H14A1,1 0 0,0 15,22H22V20H15M7,15V5H17V15H7M15.54,12.12L13.41,10L15.53,7.87L14.12,6.46L12,8.59L9.88,6.46L8.47,7.87L10.59,10L8.47,12.13L9.88,13.54L12,11.41L14.12,13.54L15.54,12.12Z\",Pl=\"M14,13V17H10V13H7L12,8L17,13M19.35,10.03C18.67,6.59 15.64,4 12,4C9.11,4 6.6,5.64 5.35,8.03C2.34,8.36 0,10.9 0,14A6,6 0 0,0 6,20H19A5,5 0 0,0 24,15C24,12.36 21.95,10.22 19.35,10.03Z\",Tl=\"M12,15.5A3.5,3.5 0 0,1 8.5,12A3.5,3.5 0 0,1 12,8.5A3.5,3.5 0 0,1 15.5,12A3.5,3.5 0 0,1 12,15.5M19.43,12.97C19.47,12.65 19.5,12.33 19.5,12C19.5,11.67 19.47,11.34 19.43,11L21.54,9.37C21.73,9.22 21.78,8.95 21.66,8.73L19.66,5.27C19.54,5.05 19.27,4.96 19.05,5.05L16.56,6.05C16.04,5.66 15.5,5.32 14.87,5.07L14.5,2.42C14.46,2.18 14.25,2 14,2H10C9.75,2 9.54,2.18 9.5,2.42L9.13,5.07C8.5,5.32 7.96,5.66 7.44,6.05L4.95,5.05C4.73,4.96 4.46,5.05 4.34,5.27L2.34,8.73C2.21,8.95 2.27,9.22 2.46,9.37L4.57,11C4.53,11.34 4.5,11.67 4.5,12C4.5,12.33 4.53,12.65 4.57,12.97L2.46,14.63C2.27,14.78 2.21,15.05 2.34,15.27L4.34,18.73C4.46,18.95 4.73,19.03 4.95,18.95L7.44,17.94C7.96,18.34 8.5,18.68 9.13,18.93L9.5,21.58C9.54,21.82 9.75,22 10,22H14C14.25,22 14.46,21.82 14.5,21.58L14.87,18.93C15.5,18.67 16.04,18.34 16.56,17.94L19.05,18.95C19.27,19.03 19.54,18.95 19.66,18.73L21.66,15.27C21.78,15.05 21.73,14.78 21.54,14.63L19.43,12.97Z\",zl=\"M9 22C8.4 22 8 21.6 8 21V18H4C2.9 18 2 17.1 2 16V4C2 2.9 2.9 2 4 2H20C21.1 2 22 2.9 22 4V16C22 17.1 21.1 18 20 18H13.9L10.2 21.7C10 21.9 9.8 22 9.5 22H9M13 11V5H11V11M13 15V13H11V15H13Z\",Nl=\"M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z\",Il=\"M4,4H20A2,2 0 0,1 22,6V18A2,2 0 0,1 20,20H4A2,2 0 0,1 2,18V6A2,2 0 0,1 4,4M4,6V18H11V6H4M20,18V6H18.76C19,6.54 18.95,7.07 18.95,7.13C18.88,7.8 18.41,8.5 18.24,8.75L15.91,11.3L19.23,11.28L19.24,12.5L14.04,12.47L14,11.47C14,11.47 17.05,8.24 17.2,7.95C17.34,7.67 17.91,6 16.5,6C15.27,6.05 15.41,7.3 15.41,7.3L13.87,7.31C13.87,7.31 13.88,6.65 14.25,6H13V18H15.58L15.57,17.14L16.54,17.13C16.54,17.13 17.45,16.97 17.46,16.08C17.5,15.08 16.65,15.08 16.5,15.08C16.37,15.08 15.43,15.13 15.43,15.95H13.91C13.91,15.95 13.95,13.89 16.5,13.89C19.1,13.89 18.96,15.91 18.96,15.91C18.96,15.91 19,17.16 17.85,17.63L18.37,18H20M8.92,16H7.42V10.2L5.62,10.76V9.53L8.76,8.41H8.92V16Z\",Ol=\"M17,19H7V5H17M17,3H7A2,2 0 0,0 5,5V19A2,2 0 0,0 7,21H17A2,2 0 0,0 19,19V5C19,3.89 18.1,3 17,3Z\",Rl=\"M21,16.5C21,16.88 20.79,17.21 20.47,17.38L12.57,21.82C12.41,21.94 12.21,22 12,22C11.79,22 11.59,21.94 11.43,21.82L3.53,17.38C3.21,17.21 3,16.88 3,16.5V7.5C3,7.12 3.21,6.79 3.53,6.62L11.43,2.18C11.59,2.06 11.79,2 12,2C12.21,2 12.41,2.06 12.57,2.18L20.47,6.62C20.79,6.79 21,7.12 21,7.5V16.5M12,4.15L6.04,7.5L12,10.85L17.96,7.5L12,4.15Z\",Dl=\"M12.43 11C12.28 10.84 10 7 7 7S2.32 10.18 2 11V13H11.57C11.72 13.16 14 17 17 17S21.68 13.82 22 13V11H12.43M7 9C8.17 9 9.18 9.85 10 11H4.31C4.78 10.17 5.54 9 7 9M17 15C15.83 15 14.82 14.15 14 13H19.69C19.22 13.83 18.46 15 17 15Z\",jl=\"M23 3H1V1H23V3M2 22H6C6 19 4 17 4 17C10 13 11 4 11 4H2V22M22 4H13C13 4 14 13 20 17C20 17 18 19 18 22H22V4Z\",Bl=\"M23 3H1V1H23V3M2 22H11V4H2V22M22 4H13V22H22V4Z\",$l=\"M19,4H15.5L14.5,3H9.5L8.5,4H5V6H19M6,19A2,2 0 0,0 8,21H16A2,2 0 0,0 18,19V7H6V19Z\",Fl=\"M3 6H21V4H3C1.9 4 1 4.9 1 6V18C1 19.1 1.9 20 3 20H7V18H3V6M13 12H9V13.78C8.39 14.33 8 15.11 8 16C8 16.89 8.39 17.67 9 18.22V20H13V18.22C13.61 17.67 14 16.88 14 16S13.61 14.33 13 13.78V12M11 17.5C10.17 17.5 9.5 16.83 9.5 16S10.17 14.5 11 14.5 12.5 15.17 12.5 16 11.83 17.5 11 17.5M22 8H16C15.5 8 15 8.5 15 9V19C15 19.5 15.5 20 16 20H22C22.5 20 23 19.5 23 19V9C23 8.5 22.5 8 22 8M21 18H17V10H21V18Z\",Ul=\"M16,11H18V13H16V11M12,3H19C20.11,3 21,3.89 21,5V19H22V21H2V19H10V5C10,3.89 10.89,3 12,3M12,5V19H19V5H12Z\",Zl=\"M12,3C10.89,3 10,3.89 10,5H3V19H2V21H22V19H21V5C21,3.89 20.11,3 19,3H12M12,5H19V19H12V5M5,11H7V13H5V11Z\",ql=\"M12,16A2,2 0 0,1 14,18A2,2 0 0,1 12,20A2,2 0 0,1 10,18A2,2 0 0,1 12,16M12,10A2,2 0 0,1 14,12A2,2 0 0,1 12,14A2,2 0 0,1 10,12A2,2 0 0,1 12,10M12,4A2,2 0 0,1 14,6A2,2 0 0,1 12,8A2,2 0 0,1 10,6A2,2 0 0,1 12,4Z\",Gl=\"M5,20H19V18H5M19,9H15V3H9V9H5L12,16L19,9Z\",Kl=\"M8.11,19.45C5.94,18.65 4.22,16.78 3.71,14.35L2.05,6.54C1.81,5.46 2.5,4.4 3.58,4.17L13.35,2.1L13.38,2.09C14.45,1.88 15.5,2.57 15.72,3.63L16.07,5.3L20.42,6.23H20.45C21.5,6.47 22.18,7.53 21.96,8.59L20.3,16.41C19.5,20.18 15.78,22.6 12,21.79C10.42,21.46 9.08,20.61 8.11,19.45V19.45M20,8.18L10.23,6.1L8.57,13.92V13.95C8,16.63 9.73,19.27 12.42,19.84C15.11,20.41 17.77,18.69 18.34,16L20,8.18M16,16.5C15.37,17.57 14.11,18.16 12.83,17.89C11.56,17.62 10.65,16.57 10.5,15.34L16,16.5M8.47,5.17L4,6.13L5.66,13.94L5.67,13.97C5.82,14.68 6.12,15.32 6.53,15.87C6.43,15.1 6.45,14.3 6.62,13.5L7.05,11.5C6.6,11.42 6.21,11.17 6,10.81C6.06,10.2 6.56,9.66 7.25,9.5C7.33,9.5 7.4,9.5 7.5,9.5L8.28,5.69C8.32,5.5 8.38,5.33 8.47,5.17M15.03,12.23C15.35,11.7 16.03,11.42 16.72,11.57C17.41,11.71 17.91,12.24 18,12.86C17.67,13.38 17,13.66 16.3,13.5C15.61,13.37 15.11,12.84 15.03,12.23M10.15,11.19C10.47,10.66 11.14,10.38 11.83,10.53C12.5,10.67 13.03,11.21 13.11,11.82C12.78,12.34 12.11,12.63 11.42,12.5C10.73,12.33 10.23,11.8 10.15,11.19M11.97,4.43L13.93,4.85L13.77,4.05L11.97,4.43Z\",Yl=\"M10 3H14V14H10V3M10 21V17H14V21H10Z\",Wl=\"M12,9A3,3 0 0,0 9,12A3,3 0 0,0 12,15A3,3 0 0,0 15,12A3,3 0 0,0 12,9M12,17A5,5 0 0,1 7,12A5,5 0 0,1 12,7A5,5 0 0,1 17,12A5,5 0 0,1 12,17M12,4.5C7,4.5 2.73,7.61 1,12C2.73,16.39 7,19.5 12,19.5C17,19.5 21.27,16.39 23,12C21.27,7.61 17,4.5 12,4.5Z\",Xl=\"M11.83,9L15,12.16C15,12.11 15,12.05 15,12A3,3 0 0,0 12,9C11.94,9 11.89,9 11.83,9M7.53,9.8L9.08,11.35C9.03,11.56 9,11.77 9,12A3,3 0 0,0 12,15C12.22,15 12.44,14.97 12.65,14.92L14.2,16.47C13.53,16.8 12.79,17 12,17A5,5 0 0,1 7,12C7,11.21 7.2,10.47 7.53,9.8M2,4.27L4.28,6.55L4.73,7C3.08,8.3 1.78,10 1,12C2.73,16.39 7,19.5 12,19.5C13.55,19.5 15.03,19.2 16.38,18.66L16.81,19.08L19.73,22L21,20.73L3.27,3M12,7A5,5 0 0,1 17,12C17,12.64 16.87,13.26 16.64,13.82L19.57,16.75C21.07,15.5 22.27,13.86 23,12C21.27,7.61 17,4.5 12,4.5C10.6,4.5 9.26,4.75 8,5.2L10.17,7.35C10.74,7.13 11.35,7 12,7Z\",Jl=\"M12,11A1,1 0 0,0 11,12A1,1 0 0,0 12,13A1,1 0 0,0 13,12A1,1 0 0,0 12,11M12.5,2C17,2 17.11,5.57 14.75,6.75C13.76,7.24 13.32,8.29 13.13,9.22C13.61,9.42 14.03,9.73 14.35,10.13C18.05,8.13 22.03,8.92 22.03,12.5C22.03,17 18.46,17.1 17.28,14.73C16.78,13.74 15.72,13.3 14.79,13.11C14.59,13.59 14.28,14 13.88,14.34C15.87,18.03 15.08,22 11.5,22C7,22 6.91,18.42 9.27,17.24C10.25,16.75 10.69,15.71 10.89,14.79C10.4,14.59 9.97,14.27 9.65,13.87C5.96,15.85 2,15.07 2,11.5C2,7 5.56,6.89 6.74,9.26C7.24,10.25 8.29,10.68 9.22,10.87C9.41,10.39 9.73,9.97 10.14,9.65C8.15,5.96 8.94,2 12.5,2Z\",Ql=\"M13,9H18.5L13,3.5V9M6,2H14L20,8V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V4C4,2.89 4.89,2 6,2M15,18V16H6V18H15M18,14V12H6V14H18Z\",ed=\"M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M13,13H11V18A2,2 0 0,1 9,20A2,2 0 0,1 7,18A2,2 0 0,1 9,16C9.4,16 9.7,16.1 10,16.3V11H13V13M13,9V3.5L18.5,9H13Z\",td=\"M17.66 11.2C17.43 10.9 17.15 10.64 16.89 10.38C16.22 9.78 15.46 9.35 14.82 8.72C13.33 7.26 13 4.85 13.95 3C13 3.23 12.17 3.75 11.46 4.32C8.87 6.4 7.85 10.07 9.07 13.22C9.11 13.32 9.15 13.42 9.15 13.55C9.15 13.77 9 13.97 8.8 14.05C8.57 14.15 8.33 14.09 8.14 13.93C8.08 13.88 8.04 13.83 8 13.76C6.87 12.33 6.69 10.28 7.45 8.64C5.78 10 4.87 12.3 5 14.47C5.06 14.97 5.12 15.47 5.29 15.97C5.43 16.57 5.7 17.17 6 17.7C7.08 19.43 8.95 20.67 10.96 20.92C13.1 21.19 15.39 20.8 17.03 19.32C18.86 17.66 19.5 15 18.56 12.72L18.43 12.46C18.22 12 17.66 11.2 17.66 11.2M14.5 17.5C14.22 17.74 13.76 18 13.4 18.1C12.28 18.5 11.16 17.94 10.5 17.28C11.69 17 12.4 16.12 12.61 15.23C12.78 14.43 12.46 13.77 12.33 13C12.21 12.26 12.23 11.63 12.5 10.94C12.69 11.32 12.89 11.7 13.13 12C13.9 13 15.11 13.44 15.37 14.8C15.41 14.94 15.43 15.08 15.43 15.23C15.46 16.05 15.1 16.95 14.5 17.5H14.5Z\",od=\"M7,2V13H10V22L17,10H13L17,2H7Z\",rd=\"M3,13A9,9 0 0,0 12,22C12,17 7.97,13 3,13M12,5.5A2.5,2.5 0 0,1 14.5,8A2.5,2.5 0 0,1 12,10.5A2.5,2.5 0 0,1 9.5,8A2.5,2.5 0 0,1 12,5.5M5.6,10.25A2.5,2.5 0 0,0 8.1,12.75C8.63,12.75 9.12,12.58 9.5,12.31C9.5,12.37 9.5,12.43 9.5,12.5A2.5,2.5 0 0,0 12,15A2.5,2.5 0 0,0 14.5,12.5C14.5,12.43 14.5,12.37 14.5,12.31C14.88,12.58 15.37,12.75 15.9,12.75C17.28,12.75 18.4,11.63 18.4,10.25C18.4,9.25 17.81,8.4 16.97,8C17.81,7.6 18.4,6.74 18.4,5.75C18.4,4.37 17.28,3.25 15.9,3.25C15.37,3.25 14.88,3.41 14.5,3.69C14.5,3.63 14.5,3.56 14.5,3.5A2.5,2.5 0 0,0 12,1A2.5,2.5 0 0,0 9.5,3.5C9.5,3.56 9.5,3.63 9.5,3.69C9.12,3.41 8.63,3.25 8.1,3.25A2.5,2.5 0 0,0 5.6,5.75C5.6,6.74 6.19,7.6 7.03,8C6.19,8.4 5.6,9.25 5.6,10.25M12,22A9,9 0 0,0 21,13C16,13 12,17 12,22Z\",id=\"M10,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V8C22,6.89 21.1,6 20,6H12L10,4Z\",nd=\"M3,4C1.89,4 1,4.89 1,6V18A2,2 0 0,0 3,20H11V18.11L21,8.11V8C21,6.89 20.1,6 19,6H11L9,4H3M21.04,11.13C20.9,11.13 20.76,11.19 20.65,11.3L19.65,12.3L21.7,14.35L22.7,13.35C22.92,13.14 22.92,12.79 22.7,12.58L21.42,11.3C21.31,11.19 21.18,11.13 21.04,11.13M19.07,12.88L13,18.94V21H15.06L21.12,14.93L19.07,12.88Z\",ad=\"M17,7H22V17H17V19A1,1 0 0,0 18,20H20V22H17.5C16.95,22 16,21.55 16,21C16,21.55 15.05,22 14.5,22H12V20H14A1,1 0 0,0 15,19V5A1,1 0 0,0 14,4H12V2H14.5C15.05,2 16,2.45 16,3C16,2.45 16.95,2 17.5,2H20V4H18A1,1 0 0,0 17,5V7M2,7H13V9H4V15H13V17H2V7M20,15V9H17V15H20Z\",sd=\"M7,5H21V7H7V5M7,13V11H21V13H7M4,4.5A1.5,1.5 0 0,1 5.5,6A1.5,1.5 0 0,1 4,7.5A1.5,1.5 0 0,1 2.5,6A1.5,1.5 0 0,1 4,4.5M4,10.5A1.5,1.5 0 0,1 5.5,12A1.5,1.5 0 0,1 4,13.5A1.5,1.5 0 0,1 2.5,12A1.5,1.5 0 0,1 4,10.5M7,19V17H21V19H7M4,16.5A1.5,1.5 0 0,1 5.5,18A1.5,1.5 0 0,1 4,19.5A1.5,1.5 0 0,1 2.5,18A1.5,1.5 0 0,1 4,16.5Z\",ld=\"M7,6H17A6,6 0 0,1 23,12A6,6 0 0,1 17,18C15.22,18 13.63,17.23 12.53,16H11.47C10.37,17.23 8.78,18 7,18A6,6 0 0,1 1,12A6,6 0 0,1 7,6M6,9V11H4V13H6V15H8V13H10V11H8V9H6M15.5,12A1.5,1.5 0 0,0 14,13.5A1.5,1.5 0 0,0 15.5,15A1.5,1.5 0 0,0 17,13.5A1.5,1.5 0 0,0 15.5,12M18.5,9A1.5,1.5 0 0,0 17,10.5A1.5,1.5 0 0,0 18.5,12A1.5,1.5 0 0,0 20,10.5A1.5,1.5 0 0,0 18.5,9Z\",dd=\"M19,20H17V11H7V20H5V9L12,5L19,9V20M8,12H16V14H8V12M8,15H16V17H8V15M16,18V20H8V18H16Z\",cd=\"M19,20H17V11H7V20H5V9L12,5L19,9V20M8,12H16V14H8V12Z\",pd=\"M16,9V14L16,20A2,2 0 0,1 14,22H10A2,2 0 0,1 8,20V14L8,9C8,7.14 9.27,5.57 11,5.13V4H9V2H15V4H13V5.13C14.73,5.57 16,7.14 16,9Z\",ud=\"M9 6V11H7V7H5V11H3V9H1V21H3V19H5V21H7V19H9V21H11V19H13V21H15V19H17V21H19V19H21V21H23V9H21V11H19V7H17V11H15V6H13V11H11V6H9M3 13H5V17H3V13M7 13H9V17H7V13M11 13H13V17H11V13M15 13H17V17H15V13M19 13H21V17H19V13Z\",md=\"M15 6V11H13V7H11V11H9V9H7V21H9V19H11V21H12.09C12.03 20.67 12 20.34 12 20C12 18.82 12.35 17.67 13 16.69V13H15V14.81C15.62 14.45 16.3 14.21 17 14.09V13H19V14.09C19.7 14.21 20.38 14.45 21 14.81V13H22V11H21V6H19V11H17V6H15M9 13H11V17H9V13M19 17V19H15V21H19V23L22 20L19 17Z\",hd=\"M7 21V7H5V11H3V9H1V21H3V19H5V21H7M3 17V13H5V17H3M21 9V11H19V7H17V21H19V19H21V21H23V9H21M21 17H19V13H21V17Z\",gd=\"M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,4A8,8 0 0,1 20,12C20,14.4 19,16.5 17.3,18C15.9,16.7 14,16 12,16C10,16 8.2,16.7 6.7,18C5,16.5 4,14.4 4,12A8,8 0 0,1 12,4M14,5.89C13.62,5.9 13.26,6.15 13.1,6.54L11.81,9.77L11.71,10C11,10.13 10.41,10.6 10.14,11.26C9.73,12.29 10.23,13.45 11.26,13.86C12.29,14.27 13.45,13.77 13.86,12.74C14.12,12.08 14,11.32 13.57,10.76L13.67,10.5L14.96,7.29L14.97,7.26C15.17,6.75 14.92,6.17 14.41,5.96C14.28,5.91 14.15,5.89 14,5.89M10,6A1,1 0 0,0 9,7A1,1 0 0,0 10,8A1,1 0 0,0 11,7A1,1 0 0,0 10,6M7,9A1,1 0 0,0 6,10A1,1 0 0,0 7,11A1,1 0 0,0 8,10A1,1 0 0,0 7,9M17,9A1,1 0 0,0 16,10A1,1 0 0,0 17,11A1,1 0 0,0 18,10A1,1 0 0,0 17,9Z\",_d=\"M13 5C15.21 5 17 6.79 17 9C17 10.5 16.2 11.77 15 12.46V11.24C15.61 10.69 16 9.89 16 9C16 7.34 14.66 6 13 6S10 7.34 10 9C10 9.89 10.39 10.69 11 11.24V12.46C9.8 11.77 9 10.5 9 9C9 6.79 10.79 5 13 5M20 20.5C19.97 21.32 19.32 21.97 18.5 22H13C12.62 22 12.26 21.85 12 21.57L8 17.37L8.74 16.6C8.93 16.39 9.2 16.28 9.5 16.28H9.7L12 18V9C12 8.45 12.45 8 13 8S14 8.45 14 9V13.47L15.21 13.6L19.15 15.79C19.68 16.03 20 16.56 20 17.14V20.5M20 2H4C2.9 2 2 2.9 2 4V12C2 13.11 2.9 14 4 14H8V12L4 12L4 4H20L20 12H18V14H20V13.96L20.04 14C21.13 14 22 13.09 22 12V4C22 2.9 21.11 2 20 2Z\",fd=\"M2.6,10.59L8.38,4.8L10.07,6.5C9.83,7.35 10.22,8.28 11,8.73V14.27C10.4,14.61 10,15.26 10,16A2,2 0 0,0 12,18A2,2 0 0,0 14,16C14,15.26 13.6,14.61 13,14.27V9.41L15.07,11.5C15,11.65 15,11.82 15,12A2,2 0 0,0 17,14A2,2 0 0,0 19,12A2,2 0 0,0 17,10C16.82,10 16.65,10 16.5,10.07L13.93,7.5C14.19,6.57 13.71,5.55 12.78,5.16C12.35,5 11.9,4.96 11.5,5.07L9.8,3.38L10.59,2.6C11.37,1.81 12.63,1.81 13.41,2.6L21.4,10.59C22.19,11.37 22.19,12.63 21.4,13.41L13.41,21.4C12.63,22.19 11.37,22.19 10.59,21.4L2.6,13.41C1.81,12.63 1.81,11.37 2.6,10.59Z\",yd=\"M12,2A10,10 0 0,0 2,12C2,16.42 4.87,20.17 8.84,21.5C9.34,21.58 9.5,21.27 9.5,21C9.5,20.77 9.5,20.14 9.5,19.31C6.73,19.91 6.14,17.97 6.14,17.97C5.68,16.81 5.03,16.5 5.03,16.5C4.12,15.88 5.1,15.9 5.1,15.9C6.1,15.97 6.63,16.93 6.63,16.93C7.5,18.45 8.97,18 9.54,17.76C9.63,17.11 9.89,16.67 10.17,16.42C7.95,16.17 5.62,15.31 5.62,11.5C5.62,10.39 6,9.5 6.65,8.79C6.55,8.54 6.2,7.5 6.75,6.15C6.75,6.15 7.59,5.88 9.5,7.17C10.29,6.95 11.15,6.84 12,6.84C12.85,6.84 13.71,6.95 14.5,7.17C16.41,5.88 17.25,6.15 17.25,6.15C17.8,7.5 17.45,8.54 17.35,8.79C18,9.5 18.38,10.39 18.38,11.5C18.38,15.32 16.04,16.16 13.81,16.41C14.17,16.72 14.5,17.33 14.5,18.26C14.5,19.6 14.5,20.68 14.5,21C14.5,21.27 14.66,21.59 15.17,21.5C19.14,20.16 22,16.42 22,12A10,10 0 0,0 12,2Z\",bd=\"M7,2A6,6 0 0,0 1,8A6,6 0 0,0 7,14A6,6 0 0,0 13,8A6,6 0 0,0 7,2M21.5,6A1.5,1.5 0 0,0 20,7.5A1.5,1.5 0 0,0 21.5,9A1.5,1.5 0 0,0 23,7.5A1.5,1.5 0 0,0 21.5,6M17,8A3,3 0 0,0 14,11A3,3 0 0,0 17,14A3,3 0 0,0 20,11A3,3 0 0,0 17,8M17,15A3.5,3.5 0 0,0 13.5,18.5A3.5,3.5 0 0,0 17,22A3.5,3.5 0 0,0 20.5,18.5A3.5,3.5 0 0,0 17,15Z\",vd=\"M15,12C13.89,12 13,12.89 13,14A2,2 0 0,0 15,16A2,2 0 0,0 17,14C17,12.89 16.1,12 15,12M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M14,9C14,7.89 13.1,7 12,7C10.89,7 10,7.89 10,9A2,2 0 0,0 12,11A2,2 0 0,0 14,9M9,12A2,2 0 0,0 7,14A2,2 0 0,0 9,16A2,2 0 0,0 11,14C11,12.89 10.1,12 9,12Z\",Cd=\"M15.07,11.25L14.17,12.17C13.45,12.89 13,13.5 13,15H11V14.5C11,13.39 11.45,12.39 12.17,11.67L13.41,10.41C13.78,10.05 14,9.55 14,9C14,7.89 13.1,7 12,7A2,2 0 0,0 10,9H8A4,4 0 0,1 12,5A4,4 0 0,1 16,9C16,9.88 15.64,10.67 15.07,11.25M13,19H11V17H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z\",Ad=\"M10,20V14H14V20H19V12H22L12,3L2,12H5V20H10Z\",wd=\"M21.8,13H20V21H13V17.67L15.79,14.88L16.5,15C17.66,15 18.6,14.06 18.6,12.9C18.6,11.74 17.66,10.8 16.5,10.8A2.1,2.1 0 0,0 14.4,12.9L14.5,13.61L13,15.13V9.65C13.66,9.29 14.1,8.6 14.1,7.8A2.1,2.1 0 0,0 12,5.7A2.1,2.1 0 0,0 9.9,7.8C9.9,8.6 10.34,9.29 11,9.65V15.13L9.5,13.61L9.6,12.9A2.1,2.1 0 0,0 7.5,10.8A2.1,2.1 0 0,0 5.4,12.9A2.1,2.1 0 0,0 7.5,15L8.21,14.88L11,17.67V21H4V13H2.25C1.83,13 1.42,13 1.42,12.79C1.43,12.57 1.85,12.15 2.28,11.72L11,3C11.33,2.67 11.67,2.33 12,2.33C12.33,2.33 12.67,2.67 13,3L17,7V6H19V9L21.78,11.78C22.18,12.18 22.59,12.59 22.6,12.8C22.6,13 22.2,13 21.8,13M7.5,12A0.9,0.9 0 0,1 8.4,12.9A0.9,0.9 0 0,1 7.5,13.8A0.9,0.9 0 0,1 6.6,12.9A0.9,0.9 0 0,1 7.5,12M16.5,12C17,12 17.4,12.4 17.4,12.9C17.4,13.4 17,13.8 16.5,13.8A0.9,0.9 0 0,1 15.6,12.9A0.9,0.9 0 0,1 16.5,12M12,6.9C12.5,6.9 12.9,7.3 12.9,7.8C12.9,8.3 12.5,8.7 12,8.7C11.5,8.7 11.1,8.3 11.1,7.8C11.1,7.3 11.5,6.9 12,6.9Z\",Hd=\"M12,3L2,12H5V20H19V12H22L12,3M12,8.5C14.34,8.5 16.46,9.43 18,10.94L16.8,12.12C15.58,10.91 13.88,10.17 12,10.17C10.12,10.17 8.42,10.91 7.2,12.12L6,10.94C7.54,9.43 9.66,8.5 12,8.5M12,11.83C13.4,11.83 14.67,12.39 15.6,13.3L14.4,14.47C13.79,13.87 12.94,13.5 12,13.5C11.06,13.5 10.21,13.87 9.6,14.47L8.4,13.3C9.33,12.39 10.6,11.83 12,11.83M12,15.17C12.94,15.17 13.7,15.91 13.7,16.83C13.7,17.75 12.94,18.5 12,18.5C11.06,18.5 10.3,17.75 10.3,16.83C10.3,15.91 11.06,15.17 12,15.17Z\",kd=\"M12 5.69L17 10.19V18H15V12H9V18H7V10.19L12 5.69M12 3L2 12H5V20H11V14H13V20H19V12H22\",Ld=\"M8.5,13.5L11,16.5L14.5,12L19,18H5M21,19V5C21,3.89 20.1,3 19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19Z\",Sd=\"M18,8H6V18H18M20,20H4V6H8.5L12.04,2.5L15.5,6H20M20,4H16L12,0L8,4H4A2,2 0 0,0 2,6V20A2,2 0 0,0 4,22H20A2,2 0 0,0 22,20V6A2,2 0 0,0 20,4Z\",xd=\"M13,9H11V7H13M13,17H11V11H13M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\",Vd=\"M11,9H13V7H11M12,20C7.59,20 4,16.41 4,12C4,7.59 7.59,4 12,4C16.41,4 20,7.59 20,12C20,16.41 16.41,20 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M11,17H13V11H11V17Z\",Md=\"M4,1C2.89,1 2,1.89 2,3V7C2,8.11 2.89,9 4,9H1V11H13V9H10C11.11,9 12,8.11 12,7V3C12,1.89 11.11,1 10,1H4M4,3H10V7H4V3M3,13V18L3,20H10V18H5V13H3M14,13C12.89,13 12,13.89 12,15V19C12,20.11 12.89,21 14,21H11V23H23V21H20C21.11,21 22,20.11 22,19V15C22,13.89 21.11,13 20,13H14M14,15H20V19H14V15Z\",Ed=\"M4,1C2.89,1 2,1.89 2,3V7C2,8.11 2.89,9 4,9H1V11H13V9H10C11.11,9 12,8.11 12,7V3C12,1.89 11.11,1 10,1H4M4,3H10V7H4V3M14,13C12.89,13 12,13.89 12,15V19C12,20.11 12.89,21 14,21H11V23H23V21H20C21.11,21 22,20.11 22,19V15C22,13.89 21.11,13 20,13H14M3.88,13.46L2.46,14.88L4.59,17L2.46,19.12L3.88,20.54L6,18.41L8.12,20.54L9.54,19.12L7.41,17L9.54,14.88L8.12,13.46L6,15.59L3.88,13.46M14,15H20V19H14V15Z\",Pd=\"M3,3H21V21H3V3M7.73,18.04C8.13,18.89 8.92,19.59 10.27,19.59C11.77,19.59 12.8,18.79 12.8,17.04V11.26H11.1V17C11.1,17.86 10.75,18.08 10.2,18.08C9.62,18.08 9.38,17.68 9.11,17.21L7.73,18.04M13.71,17.86C14.21,18.84 15.22,19.59 16.8,19.59C18.4,19.59 19.6,18.76 19.6,17.23C19.6,15.82 18.79,15.19 17.35,14.57L16.93,14.39C16.2,14.08 15.89,13.87 15.89,13.37C15.89,12.96 16.2,12.64 16.7,12.64C17.18,12.64 17.5,12.85 17.79,13.37L19.1,12.5C18.55,11.54 17.77,11.17 16.7,11.17C15.19,11.17 14.22,12.13 14.22,13.4C14.22,14.78 15.03,15.43 16.25,15.95L16.67,16.13C17.45,16.47 17.91,16.68 17.91,17.26C17.91,17.74 17.46,18.09 16.76,18.09C15.93,18.09 15.45,17.66 15.09,17.06L13.71,17.86Z\",Td=\"M12,2A7,7 0 0,0 5,9C5,11.38 6.19,13.47 8,14.74V17A1,1 0 0,0 9,18H15A1,1 0 0,0 16,17V14.74C17.81,13.47 19,11.38 19,9A7,7 0 0,0 12,2M9,21A1,1 0 0,0 10,22H14A1,1 0 0,0 15,21V20H9V21Z\",zd=\"M11 15H6L13 1V9H18L11 23V15Z\",Nd=\"M12,17A2,2 0 0,0 14,15C14,13.89 13.1,13 12,13A2,2 0 0,0 10,15A2,2 0 0,0 12,17M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6A2,2 0 0,1 4,20V10C4,8.89 4.9,8 6,8H7V6A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,3A3,3 0 0,0 9,6V8H15V6A3,3 0 0,0 12,3Z\",Id=\"M10 17C11.1 17 12 16.1 12 15C12 13.9 11.1 13 10 13C8.9 13 8 13.9 8 15S8.9 17 10 17M16 8C17.1 8 18 8.9 18 10V20C18 21.1 17.1 22 16 22H4C2.9 22 2 21.1 2 20V10C2 8.9 2.9 8 4 8H5V6C5 3.2 7.2 1 10 1S15 3.2 15 6V8H16M10 3C8.3 3 7 4.3 7 6V8H13V6C13 4.3 11.7 3 10 3M22 13H20V7H22V13M22 17H20V15H22V17Z\",Od=\"M8.5,2C6,2 4,4 4,6.5V7C2.89,7 2,7.89 2,9V18C2,19.11 2.89,20 4,20H8.72C10.18,21.29 12.06,22 14,22A8,8 0 0,0 22,14A8,8 0 0,0 14,6C13.66,6 13.32,6.03 13,6.08C12.76,3.77 10.82,2 8.5,2M8.5,4A2.5,2.5 0 0,1 11,6.5V7H6V6.5A2.5,2.5 0 0,1 8.5,4M14,8A6,6 0 0,1 20,14A6,6 0 0,1 14,20A6,6 0 0,1 8,14A6,6 0 0,1 14,8M13,10V15L16.64,17.19L17.42,15.9L14.5,14.15V10H13Z\",Rd=\"M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V10A2,2 0 0,1 6,8H15V6A3,3 0 0,0 12,3A3,3 0 0,0 9,6H7A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,17A2,2 0 0,0 14,15A2,2 0 0,0 12,13A2,2 0 0,0 10,15A2,2 0 0,0 12,17Z\",Dd=\"M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z\",jd=\"M17,4H7A5,5 0 0,0 2,9V20H20A2,2 0 0,0 22,18V9A5,5 0 0,0 17,4M10,18H4V9A3,3 0 0,1 7,6A3,3 0 0,1 10,9V18M19,15H17V13H13V11H19V15M9,11H5V9H9V11Z\",Bd=\"M12,2C15.31,2 18,4.66 18,7.95C18,12.41 12,19 12,19C12,19 6,12.41 6,7.95C6,4.66 8.69,2 12,2M12,6A2,2 0 0,0 10,8A2,2 0 0,0 12,10A2,2 0 0,0 14,8A2,2 0 0,0 12,6M20,19C20,21.21 16.42,23 12,23C7.58,23 4,21.21 4,19C4,17.71 5.22,16.56 7.11,15.83L7.75,16.74C6.67,17.19 6,17.81 6,18.5C6,19.88 8.69,21 12,21C15.31,21 18,19.88 18,18.5C18,17.81 17.33,17.19 16.25,16.74L16.89,15.83C18.78,16.56 20,17.71 20,19Z\",$d=\"M7,10L12,15L17,10H7Z\",Fd=\"M7,15L12,10L17,15H7Z\",Ud=\"M7.27,10L9,7H14.42L15.58,5L15.5,4.5A1.5,1.5 0 0,1 17,3A1.5,1.5 0 0,1 18.5,4.5C18.5,5.21 18,5.81 17.33,5.96L16.37,7.63L17.73,10L18.59,8.5L18.5,8A1.5,1.5 0 0,1 20,6.5A1.5,1.5 0 0,1 21.5,8C21.5,8.71 21,9.3 20.35,9.46L18.89,12L20.62,15C21.39,15.07 22,15.71 22,16.5A1.5,1.5 0 0,1 20.5,18A1.5,1.5 0 0,1 19,16.5V16.24L17.73,14L16.37,16.37L17.33,18.04C18,18.19 18.5,18.79 18.5,19.5A1.5,1.5 0 0,1 17,21A1.5,1.5 0 0,1 15.5,19.5L15.58,19L14.42,17H10.58L9.42,19L9.5,19.5A1.5,1.5 0 0,1 8,21A1.5,1.5 0 0,1 6.5,19.5C6.5,18.79 7,18.19 7.67,18.04L8.63,16.37L4.38,9C3.61,8.93 3,8.29 3,7.5A1.5,1.5 0 0,1 4.5,6A1.5,1.5 0 0,1 6,7.5C6,7.59 6,7.68 6,7.76L7.27,10M10.15,9L8.42,12L10.15,15H14.85L16.58,12L14.85,9H10.15Z\",Zd=\"M8 7C6.9 7 6 7.9 6 9V15C6 16.11 6.9 17 8 17H11V15H8V9H11V7H8M14 7C12.9 7 12 7.9 12 9V15C12 16.11 12.9 17 14 17H16C17.11 17 18 16.11 18 15V9C18 7.9 17.11 7 16 7H14M14 9H16V15H14V9\",qd=\"M5,7A2,2 0 0,0 3,9V15A2,2 0 0,0 5,17H8V15H5V9H8V7H5M11,7A2,2 0 0,0 9,9V15A2,2 0 0,0 11,17H13A2,2 0 0,0 15,15V9A2,2 0 0,0 13,7H11M11,9H13V15H11V9M16,10.5V12H19V13.5H17.5A1.5,1.5 0 0,0 16,15V18H20.5V16.5H17.5V15H19A1.5,1.5 0 0,0 20.5,13.5V12A1.5,1.5 0 0,0 19,10.5H16Z\",Gd=\"M10,0.2C9,0.2 8.2,1 8.2,2C8.2,3 9,3.8 10,3.8C11,3.8 11.8,3 11.8,2C11.8,1 11,0.2 10,0.2M15.67,1A7.33,7.33 0 0,0 23,8.33V7A6,6 0 0,1 17,1H15.67M18.33,1C18.33,3.58 20.42,5.67 23,5.67V4.33C21.16,4.33 19.67,2.84 19.67,1H18.33M21,1A2,2 0 0,0 23,3V1H21M7.92,4.03C7.75,4.03 7.58,4.06 7.42,4.11L2,5.8V11H3.8V7.33L5.91,6.67L2,22H3.8L6.67,13.89L9,17V22H10.8V15.59L8.31,11.05L9.04,8.18L10.12,10H15V8.2H11.38L9.38,4.87C9.08,4.37 8.54,4.03 7.92,4.03Z\",Kd=\"M11.4 8.2H15V10H13.2L11.4 8.2M19.67 1H18.33C18.33 3.58 20.42 5.67 23 5.67V4.33C21.16 4.33 19.67 2.84 19.67 1M21 1C21 2.11 21.9 3 23 3V1H21M17 1H15.67C15.67 5.05 18.95 8.33 23 8.33V7C19.69 7 17 4.31 17 1M10 3.8C11 3.8 11.8 3 11.8 2S11 .2 10 .2 8.2 1 8.2 2 9 3.8 10 3.8M2.39 1.73L1.11 3L3.46 5.35L2 5.8V11H3.8V7.33L5.05 6.94L5.68 7.57L2 22H3.8L6.67 13.89L9 17V22H10.8V15.59L8.31 11.05L8.5 10.37L20.84 22.73L22.11 21.46L2.39 1.73M9.38 4.87C9.08 4.37 8.54 4.03 7.92 4.03C7.75 4.03 7.58 4.06 7.42 4.11L7.34 4.14L11.35 8.15L9.38 4.87Z\",Yd=\"M18,4L20,8H17L15,4H13L15,8H12L10,4H8L10,8H7L5,4H4A2,2 0 0,0 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V4H18Z\",Wd=\"M21,3V15.5A3.5,3.5 0 0,1 17.5,19A3.5,3.5 0 0,1 14,15.5A3.5,3.5 0 0,1 17.5,12C18.04,12 18.55,12.12 19,12.34V6.47L9,8.6V17.5A3.5,3.5 0 0,1 5.5,21A3.5,3.5 0 0,1 2,17.5A3.5,3.5 0 0,1 5.5,14C6.04,14 6.55,14.12 7,14.34V6L21,3Z\",Xd=\"M12 3V13.55C11.41 13.21 10.73 13 10 13C7.79 13 6 14.79 6 17S7.79 21 10 21 14 19.21 14 17V7H18V3H12Z\",Jd=\"M4.27 3L3 4.27L12 13.27V13.55C11.41 13.21 10.73 13 10 13C7.79 13 6 14.79 6 17S7.79 21 10 21 14 19.21 14 17V15.27L19.73 21L21 19.73L4.27 3M14 7H18V3H12V8.18L14 10.18Z\",Qd=\"M5.12,5H18.87L17.93,4H5.93L5.12,5M20.54,5.23C20.83,5.57 21,6 21,6.5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V6.5C3,6 3.17,5.57 3.46,5.23L4.84,3.55C5.12,3.21 5.53,3 6,3H18C18.47,3 18.88,3.21 19.15,3.55L20.54,5.23M6,18H12V15H6V18Z\",ec=\"M5.12,5L5.93,4H17.93L18.87,5M12,17.5L6.5,12H10V10H14V12H17.5L12,17.5M20.54,5.23L19.15,3.55C18.88,3.21 18.47,3 18,3H6C5.53,3 5.12,3.21 4.84,3.55L3.46,5.23C3.17,5.57 3,6 3,6.5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V6.5C21,6 20.83,5.57 20.54,5.23Z\",tc=\"M20.54,5.23C20.83,5.57 21,6 21,6.5V19A2,2 0 0,1 19,21H5A2,2 0 0,1 3,19V6.5C3,6 3.17,5.57 3.46,5.23L4.84,3.55C5.12,3.21 5.53,3 6,3H18C18.47,3 18.88,3.21 19.15,3.55L20.54,5.23M5.12,5H18.87L17.93,4H5.93L5.12,5M12,9.5L6.5,15H10V17H14V15H17.5L12,9.5Z\",oc=\"M17.5,12A1.5,1.5 0 0,1 16,10.5A1.5,1.5 0 0,1 17.5,9A1.5,1.5 0 0,1 19,10.5A1.5,1.5 0 0,1 17.5,12M14.5,8A1.5,1.5 0 0,1 13,6.5A1.5,1.5 0 0,1 14.5,5A1.5,1.5 0 0,1 16,6.5A1.5,1.5 0 0,1 14.5,8M9.5,8A1.5,1.5 0 0,1 8,6.5A1.5,1.5 0 0,1 9.5,5A1.5,1.5 0 0,1 11,6.5A1.5,1.5 0 0,1 9.5,8M6.5,12A1.5,1.5 0 0,1 5,10.5A1.5,1.5 0 0,1 6.5,9A1.5,1.5 0 0,1 8,10.5A1.5,1.5 0 0,1 6.5,12M12,3A9,9 0 0,0 3,12A9,9 0 0,0 12,21A1.5,1.5 0 0,0 13.5,19.5C13.5,19.11 13.35,18.76 13.11,18.5C12.88,18.23 12.73,17.88 12.73,17.5A1.5,1.5 0 0,1 14.23,16H16A5,5 0 0,0 21,11C21,6.58 16.97,3 12,3Z\",rc=\"M8,5.14V19.14L19,12.14L8,5.14Z\",ic=\"M19 3H5C3.89 3 3 3.89 3 5V19C3 20.1 3.9 21 5 21H19C20.1 21 21 20.1 21 19V5C21 3.89 20.1 3 19 3M10 16V8L15 12\",nc=\"M15,6H3V8H15V6M15,10H3V12H15V10M3,16H11V14H3V16M17,6V14.18C16.69,14.07 16.35,14 16,14A3,3 0 0,0 13,17A3,3 0 0,0 16,20A3,3 0 0,0 19,17V8H22V6H17Z\",ac=\"M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z\",sc=\"M17,18.25V21.5H7V18.25C7,16.87 9.24,15.75 12,15.75C14.76,15.75 17,16.87 17,18.25M12,5.5A6.5,6.5 0 0,1 18.5,12C18.5,13.25 18.15,14.42 17.54,15.41L16,14.04C16.32,13.43 16.5,12.73 16.5,12C16.5,9.5 14.5,7.5 12,7.5C9.5,7.5 7.5,9.5 7.5,12C7.5,12.73 7.68,13.43 8,14.04L6.46,15.41C5.85,14.42 5.5,13.25 5.5,12A6.5,6.5 0 0,1 12,5.5M12,1.5A10.5,10.5 0 0,1 22.5,12C22.5,14.28 21.77,16.39 20.54,18.11L19.04,16.76C19.96,15.4 20.5,13.76 20.5,12A8.5,8.5 0 0,0 12,3.5A8.5,8.5 0 0,0 3.5,12C3.5,13.76 4.04,15.4 4.96,16.76L3.46,18.11C2.23,16.39 1.5,14.28 1.5,12A10.5,10.5 0 0,1 12,1.5M12,9.5A2.5,2.5 0 0,1 14.5,12A2.5,2.5 0 0,1 12,14.5A2.5,2.5 0 0,1 9.5,12A2.5,2.5 0 0,1 12,9.5Z\",lc=\"M16,7V3H14V7H10V3H8V7H8C7,7 6,8 6,9V14.5L9.5,18V21H14.5V18L18,14.5V9C18,8 17,7 16,7Z\",dc=\"M20.84 22.73L15.31 17.2L14.5 18V21H9.5V18L6 14.5V9C6 8.7 6.1 8.41 6.25 8.14L1.11 3L2.39 1.73L22.11 21.46L20.84 22.73M18 14.5V9C18 8 17 7 16 7V3H14V7H10.2L17.85 14.65L18 14.5M10 3H8V4.8L10 6.8V3Z\",cc=\"M12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\",pc=\"M2,11H9.17C9.58,9.83 10.69,9 12,9C13.31,9 14.42,9.83 14.83,11H22V13H14.83C14.42,14.17 13.31,15 12,15C10.69,15 9.58,14.17 9.17,13H2V11Z\",uc=\"M2 12C2 16.97 6.03 21 11 21C13.39 21 15.68 20.06 17.4 18.4L15.9 16.9C14.63 18.25 12.86 19 11 19C4.76 19 1.64 11.46 6.05 7.05C10.46 2.64 18 5.77 18 12H15L19 16H19.1L23 12H20C20 7.03 15.97 3 11 3C6.03 3 2 7.03 2 12Z\",mc=\"M12,0C8.96,0 6.21,1.23 4.22,3.22L5.63,4.63C7.26,3 9.5,2 12,2C14.5,2 16.74,3 18.36,4.64L19.77,3.23C17.79,1.23 15.04,0 12,0M7.05,6.05L8.46,7.46C9.37,6.56 10.62,6 12,6C13.38,6 14.63,6.56 15.54,7.46L16.95,6.05C15.68,4.78 13.93,4 12,4C10.07,4 8.32,4.78 7.05,6.05M12,15A2,2 0 0,1 10,13A2,2 0 0,1 12,11A2,2 0 0,1 14,13A2,2 0 0,1 12,15M15,9H9A1,1 0 0,0 8,10V22A1,1 0 0,0 9,23H15A1,1 0 0,0 16,22V10A1,1 0 0,0 15,9Z\",hc=\"M12,4C14.1,4 16.1,4.8 17.6,6.3C20.7,9.4 20.7,14.5 17.6,17.6C15.8,19.5 13.3,20.2 10.9,19.9L11.4,17.9C13.1,18.1 14.9,17.5 16.2,16.2C18.5,13.9 18.5,10.1 16.2,7.7C15.1,6.6 13.5,6 12,6V10.6L7,5.6L12,0.6V4M6.3,17.6C3.7,15 3.3,11 5.1,7.9L6.6,9.4C5.5,11.6 5.9,14.4 7.8,16.2C8.3,16.7 8.9,17.1 9.6,17.4L9,19.4C8,19 7.1,18.4 6.3,17.6Z\",gc=\"M12,2A2,2 0 0,1 14,4C14,4.74 13.6,5.39 13,5.73V7H14A7,7 0 0,1 21,14H22A1,1 0 0,1 23,15V18A1,1 0 0,1 22,19H21V20A2,2 0 0,1 19,22H5A2,2 0 0,1 3,20V19H2A1,1 0 0,1 1,18V15A1,1 0 0,1 2,14H3A7,7 0 0,1 10,7H11V5.73C10.4,5.39 10,4.74 10,4A2,2 0 0,1 12,2M7.5,13A2.5,2.5 0 0,0 5,15.5A2.5,2.5 0 0,0 7.5,18A2.5,2.5 0 0,0 10,15.5A2.5,2.5 0 0,0 7.5,13M16.5,13A2.5,2.5 0 0,0 14,15.5A2.5,2.5 0 0,0 16.5,18A2.5,2.5 0 0,0 19,15.5A2.5,2.5 0 0,0 16.5,13Z\",_c=\"M12,2C14.65,2 17.19,3.06 19.07,4.93L17.65,6.35C16.15,4.85 14.12,4 12,4C9.88,4 7.84,4.84 6.35,6.35L4.93,4.93C6.81,3.06 9.35,2 12,2M3.66,6.5L5.11,7.94C4.39,9.17 4,10.57 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12C20,10.57 19.61,9.17 18.88,7.94L20.34,6.5C21.42,8.12 22,10.04 22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12C2,10.04 2.58,8.12 3.66,6.5M12,6A6,6 0 0,1 18,12C18,13.59 17.37,15.12 16.24,16.24L14.83,14.83C14.08,15.58 13.06,16 12,16C10.94,16 9.92,15.58 9.17,14.83L7.76,16.24C6.63,15.12 6,13.59 6,12A6,6 0 0,1 12,6M12,8A1,1 0 0,0 11,9A1,1 0 0,0 12,10A1,1 0 0,0 13,9A1,1 0 0,0 12,8Z\",fc=\"M17.8,20C17.4,21.2 16.3,22 15,22H5C3.3,22 2,20.7 2,19V18H5L14.2,18C14.6,19.2 15.7,20 17,20H17.8M19,2C20.7,2 22,3.3 22,5V6H20V5C20,4.4 19.6,4 19,4C18.4,4 18,4.4 18,5V18H17C16.4,18 16,17.6 16,17V16H5V5C5,3.3 6.3,2 8,2H19M8,6V8H15V6H8M8,10V12H14V10H8Z\",yc=\"M12,12H19C18.47,16.11 15.72,19.78 12,20.92V12H5V6.3L12,3.19M12,1L3,5V11C3,16.55 6.84,21.73 12,23C17.16,21.73 21,16.55 21,11V5L12,1Z\",bc=\"M12,1L3,5V11C3,16.55 6.84,21.74 12,23C17.16,21.74 21,16.55 21,11V5L12,1Z\",vc=\"M12,1L3,5V11C3,16.55 6.84,21.74 12,23C17.16,21.74 21,16.55 21,11V5L12,1M12,5.68C12.5,5.68 12.95,6.11 12.95,6.63V10.11L18,13.26V14.53L12.95,12.95V16.42L14.21,17.37V18.32L12,17.68L9.79,18.32V17.37L11.05,16.42V12.95L6,14.53V13.26L11.05,10.11V6.63C11.05,6.11 11.5,5.68 12,5.68Z\",Cc=\"M11,13H13V16H16V11H18L12,6L6,11H8V16H11V13M12,1L21,5V11C21,16.55 17.16,21.74 12,23C6.84,21.74 3,16.55 3,11V5L12,1Z\",Ac=\"M12,1L3,5V11C3,16.55 6.84,21.74 12,23C17.16,21.74 21,16.55 21,11V5L12,1M12,7C13.4,7 14.8,8.1 14.8,9.5V11C15.4,11 16,11.6 16,12.3V15.8C16,16.4 15.4,17 14.7,17H9.2C8.6,17 8,16.4 8,15.7V12.2C8,11.6 8.6,11 9.2,11V9.5C9.2,8.1 10.6,7 12,7M12,8.2C11.2,8.2 10.5,8.7 10.5,9.5V11H13.5V9.5C13.5,8.7 12.8,8.2 12,8.2Z\",wc=\"M12 1L3 5V11C3 16.55 6.84 21.74 12 23C17.16 21.74 21 16.55 21 11V5L12 1M15.97 14.41C14.13 16.58 10.76 16.5 9 14.34C6.82 11.62 8.36 7.62 11.7 7C12.04 6.95 12.33 7.28 12.21 7.61C11.75 8.84 11.82 10.25 12.53 11.47C13.24 12.69 14.42 13.46 15.71 13.67C16.05 13.72 16.2 14.14 15.97 14.41Z\",Hc=\"M1,4.27L2.28,3L20.5,21.22L19.23,22.5L17,20.25C15.57,21.57 13.87,22.54 12,23C6.84,21.74 3,16.55 3,11V6.27L1,4.27M12,1L21,5V11C21,13.28 20.35,15.5 19.23,17.41L5.65,3.82L12,1Z\",kc=\"M21,11C21,16.55 17.16,21.74 12,23C6.84,21.74 3,16.55 3,11V5L12,1L21,5V11M12,21C15.75,20 19,15.54 19,11.22V6.3L12,3.18L5,6.3V11.22C5,15.54 8.25,20 12,21Z\",Lc=\"M16.5,21C13.5,21 12.31,16.76 11.05,12.28C10.14,9.04 9,5 7.5,5C4.11,5 4,11.93 4,12H2C2,11.63 2.06,3 7.5,3C10.5,3 11.71,7.25 12.97,11.74C13.83,14.8 15,19 16.5,19C19.94,19 20.03,12.07 20.03,12H22.03C22.03,12.37 21.97,21 16.5,21Z\",Sc=\"M12,18A6,6 0 0,0 18,12C18,8.68 15.31,6 12,6C8.68,6 6,8.68 6,12A6,6 0 0,0 12,18M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H19M8,12A4,4 0 0,1 12,8A4,4 0 0,1 16,12A4,4 0 0,1 12,16A4,4 0 0,1 8,12Z\",xc=\"M10 18C13.3 18 16 15.3 16 12C16 8.7 13.3 6 10 6C6.7 6 4 8.7 4 12C4 15.3 6.7 18 10 18M17 3C18.1 3 19 3.9 19 5V19C19 20.1 18.1 21 17 21H3C1.9 21 1 20.1 1 19V5C1 3.9 1.9 3 3 3H17M6 12C6 9.8 7.8 8 10 8S14 9.8 14 12 12.2 16 10 16 6 14.2 6 12M23 7H21V13H23V8M23 15H21V17H23V15Z\",Vc=\"M12 4C16.41 4 20 7.59 20 12S16.41 20 12 20 4 16.41 4 12 7.59 4 12 4M12 2C6.5 2 2 6.5 2 12S6.5 22 12 22 22 17.5 22 12 17.5 2 12 2M12 11C11.45 11 11 11.45 11 12S11.45 13 12 13 13 12.55 13 12 12.55 11 12 11M10.72 9.3C11.11 9.11 11.54 9 12 9S12.89 9.11 13.29 9.3L14 8.57C13.43 8.22 12.74 8 12 8S10.58 8.22 10 8.57L10.72 9.3M15 12C15 12.46 14.89 12.89 14.7 13.29L15.43 14C15.79 13.43 16 12.74 16 12S15.79 10.58 15.43 10L14.7 10.72C14.89 11.11 15 11.54 15 12M9 12C9 11.54 9.11 11.11 9.3 10.72L8.57 10C8.22 10.58 8 11.26 8 12S8.22 13.43 8.57 14L9.3 13.29C9.11 12.89 9 12.46 9 12M13.29 14.7C12.89 14.89 12.46 15 12 15S11.11 14.89 10.72 14.7L10 15.43C10.58 15.79 11.26 16 12 16S13.43 15.79 14 15.43L13.29 14.7M16.89 8.53L16.17 9.25C16.69 10.04 17 11 17 12S16.69 13.96 16.17 14.75L16.89 15.47C17.59 14.5 18 13.3 18 12S17.59 9.5 16.89 8.53M9.25 7.83C10.04 7.31 11 7 12 7S13.96 7.31 14.75 7.83L15.47 7.11C14.5 6.42 13.3 6 12 6S9.5 6.42 8.53 7.11L9.25 7.83M14.75 16.17C13.96 16.69 13 17 12 17S10.04 16.69 9.25 16.17L8.53 16.89C9.5 17.59 10.7 18 12 18S14.5 17.59 15.47 16.89L14.75 16.17M7.83 14.75C7.31 13.96 7 13 7 12S7.31 10.04 7.83 9.25L7.11 8.53C6.42 9.5 6 10.7 6 12S6.42 14.5 7.11 15.47L7.83 14.75Z\",Mc=\"M10 4C14.4 4 18 7.6 18 12S14.4 20 10 20 2 16.4 2 12 5.6 4 10 4M10 2C4.5 2 0 6.5 0 12S4.5 22 10 22 20 17.5 20 12 15.5 2 10 2M10 11C9.4 11 9 11.4 9 12S9.4 13 10 13 11 12.6 11 12 10.6 11 10 11M8.7 9.3C9.1 9.1 9.5 9 10 9S10.9 9.1 11.3 9.3L12 8.6C11.4 8.2 10.7 8 10 8S8.6 8.2 8 8.6L8.7 9.3M13 12C13 12.5 12.9 12.9 12.7 13.3L13.4 14C13.8 13.4 14 12.7 14 12S13.8 10.6 13.4 10L12.7 10.7C12.9 11.1 13 11.5 13 12M7 12C7 11.5 7.1 11.1 7.3 10.7L6.6 10C6.2 10.6 6 11.3 6 12S6.2 13.4 6.6 14L7.3 13.3C7.1 12.9 7 12.5 7 12M11.3 14.7C10.9 14.9 10.5 15 10 15S9.1 14.9 8.7 14.7L8 15.4C8.6 15.8 9.3 16 10 16S11.4 15.8 12 15.4L11.3 14.7M14.9 8.5L14.2 9.2C14.7 10 15 11 15 12S14.7 14 14.2 14.8L14.9 15.5C15.6 14.5 16 13.3 16 12S15.6 9.5 14.9 8.5M7.2 7.8C8 7.3 9 7 10 7S12 7.3 12.8 7.8L13.5 7.1C12.5 6.4 11.3 6 10 6S7.5 6.4 6.5 7.1L7.2 7.8M12.8 16.2C12 16.7 11 17 10 17S8 16.7 7.2 16.2L6.5 16.9C7.5 17.6 8.7 18 10 18S12.5 17.6 13.5 16.9L12.8 16.2M5.8 14.8C5.3 14 5 13 5 12S5.3 10 5.8 9.2L5.1 8.5C4.4 9.5 4 10.7 4 12S4.4 14.5 5.1 15.5L5.8 14.8M24 7H22V13H24V8M24 15H22V17H24V15Z\",Ec=\"M20.79,13.95L18.46,14.57L16.46,13.44V10.56L18.46,9.43L20.79,10.05L21.31,8.12L19.54,7.65L20,5.88L18.07,5.36L17.45,7.69L15.45,8.82L13,7.38V5.12L14.71,3.41L13.29,2L12,3.29L10.71,2L9.29,3.41L11,5.12V7.38L8.5,8.82L6.5,7.69L5.92,5.36L4,5.88L4.47,7.65L2.7,8.12L3.22,10.05L5.55,9.43L7.55,10.56V13.45L5.55,14.58L3.22,13.96L2.7,15.89L4.47,16.36L4,18.12L5.93,18.64L6.55,16.31L8.55,15.18L11,16.62V18.88L9.29,20.59L10.71,22L12,20.71L13.29,22L14.7,20.59L13,18.88V16.62L15.5,15.17L17.5,16.3L18.12,18.63L20,18.12L19.53,16.35L21.3,15.88L20.79,13.95M9.5,10.56L12,9.11L14.5,10.56V13.44L12,14.89L9.5,13.44V10.56Z\",Pc=\"M12.5 7C12.5 5.89 13.39 5 14.5 5H18C19.1 5 20 5.9 20 7V9.16C18.84 9.57 18 10.67 18 11.97V14H12.5V7M6 11.96V14H11.5V7C11.5 5.89 10.61 5 9.5 5H6C4.9 5 4 5.9 4 7V9.15C5.16 9.56 6 10.67 6 11.96M20.66 10.03C19.68 10.19 19 11.12 19 12.12V15H5V12C5 10.9 4.11 10 3 10S1 10.9 1 12V17C1 18.1 1.9 19 3 19V21H5V19H19V21H21V19C22.1 19 23 18.1 23 17V12C23 10.79 21.91 9.82 20.66 10.03Z\",Tc=\"M3,3V21H21V3\",zc=\"M3,3H21V21H3V3M5,5V19H19V5H5Z\",Nc=\"M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z\",Ic=\"M18,18H6V6H18V18Z\",Oc=\"M21,9L17,5V8H10V10H17V13M7,11L3,15L7,19V16H14V14H7V11Z\",Rc=\"M8.16,3L6.75,4.41L9.34,7H4C2.89,7 2,7.89 2,9V19C2,20.11 2.89,21 4,21H20C21.11,21 22,20.11 22,19V9C22,7.89 21.11,7 20,7H14.66L17.25,4.41L15.84,3L12,6.84L8.16,3M4,9H17V19H4V9M19.5,9A1,1 0 0,1 20.5,10A1,1 0 0,1 19.5,11A1,1 0 0,1 18.5,10A1,1 0 0,1 19.5,9M19.5,12A1,1 0 0,1 20.5,13A1,1 0 0,1 19.5,14A1,1 0 0,1 18.5,13A1,1 0 0,1 19.5,12Z\",Dc=\"M8,7A2,2 0 0,1 10,9V14A2,2 0 0,1 8,16A2,2 0 0,1 6,14V9A2,2 0 0,1 8,7M14,14C14,16.97 11.84,19.44 9,19.92V22H7V19.92C4.16,19.44 2,16.97 2,14H4A4,4 0 0,0 8,18A4,4 0 0,0 12,14H14M21.41,9.41L17.17,13.66L18.18,10H14A2,2 0 0,1 12,8V4A2,2 0 0,1 14,2H20A2,2 0 0,1 22,4V8C22,8.55 21.78,9.05 21.41,9.41Z\",jc=\"M15 13V5A3 3 0 0 0 9 5V13A5 5 0 1 0 15 13M12 4A1 1 0 0 1 13 5V8H11V5A1 1 0 0 1 12 4Z\",Bc=\"M16.95,16.95L14.83,14.83C15.55,14.1 16,13.1 16,12C16,11.26 15.79,10.57 15.43,10L17.6,7.81C18.5,9 19,10.43 19,12C19,13.93 18.22,15.68 16.95,16.95M12,5C13.57,5 15,5.5 16.19,6.4L14,8.56C13.43,8.21 12.74,8 12,8A4,4 0 0,0 8,12C8,13.1 8.45,14.1 9.17,14.83L7.05,16.95C5.78,15.68 5,13.93 5,12A7,7 0 0,1 12,5M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z\",$c=\"M12,20A7,7 0 0,1 5,13A7,7 0 0,1 12,6A7,7 0 0,1 19,13A7,7 0 0,1 12,20M19.03,7.39L20.45,5.97C20,5.46 19.55,5 19.04,4.56L17.62,6C16.07,4.74 14.12,4 12,4A9,9 0 0,0 3,13A9,9 0 0,0 12,22C17,22 21,17.97 21,13C21,10.88 20.26,8.93 19.03,7.39M11,14H13V8H11M15,1H9V3H15V1Z\",Fc=\"M18.4 1.6C18 1.2 17.5 1 17 1H7C6.5 1 6 1.2 5.6 1.6C5.2 2 5 2.5 5 3V21C5 21.5 5.2 22 5.6 22.4C6 22.8 6.5 23 7 23H17C17.5 23 18 22.8 18.4 22.4C18.8 22 19 21.5 19 21V3C19 2.5 18.8 2 18.4 1.6M16 7C16 7.6 15.6 8 15 8H9C8.4 8 8 7.6 8 7V5C8 4.4 8.4 4 9 4H15C15.6 4 16 4.4 16 5V7Z\",Uc=\"M5.6 1.6C6 1.2 6.5 1 7 1H17C17.5 1 18 1.2 18.4 1.6C18.8 2 19 2.5 19 3V21C19 21.5 18.8 22 18.4 22.4C18 22.8 17.5 23 17 23H7C6.5 23 6 22.8 5.6 22.4C5.2 22 5 21.5 5 21V3C5 2.5 5.2 2 5.6 1.6M8 3C7.4 3 7 3.4 7 4V20C7 20.6 7.4 21 8 21H16C16.6 21 17 20.6 17 20V4C17 3.4 16.6 3 16 3H8M8 17C8 16.4 8.4 16 9 16H15C15.6 16 16 16.4 16 17V19C16 19.6 15.6 20 15 20H9C8.4 20 8 19.6 8 19V17Z\",Zc=\"M18.17,12L15,8.83L16.41,7.41L21,12L16.41,16.58L15,15.17L18.17,12M5.83,12L9,15.17L7.59,16.59L3,12L7.59,7.42L9,8.83L5.83,12Z\",qc=\"M9,16V10H5L12,3L19,10H15V16H9M5,20V18H19V20H5Z\",Gc=\"M16,19H8V5H16M16.5,3H7.5A1.5,1.5 0 0,0 6,4.5V19.5A1.5,1.5 0 0,0 7.5,21H16.5A1.5,1.5 0 0,0 18,19.5V4.5A1.5,1.5 0 0,0 16.5,3M19,17H21V7H19M22,9V15H24V9M3,17H5V7H3M0,15H2V9H0V15Z\",Kc=\"M17,10.5V7A1,1 0 0,0 16,6H4A1,1 0 0,0 3,7V17A1,1 0 0,0 4,18H16A1,1 0 0,0 17,17V13.5L21,17.5V6.5L17,10.5Z\",Yc=\"M12,20A6,6 0 0,1 6,14C6,10 12,3.25 12,3.25C12,3.25 18,10 18,14A6,6 0 0,1 12,20Z\",Wc=\"M20.84 22.73L16.29 18.18C15.2 19.3 13.69 20 12 20C8.69 20 6 17.31 6 14C6 12.67 6.67 11.03 7.55 9.44L1.11 3L2.39 1.73L22.11 21.46L20.84 22.73M18 14C18 10 12 3.25 12 3.25S10.84 4.55 9.55 6.35L17.95 14.75C18 14.5 18 14.25 18 14Z\",Xc=\"M12,3.25C12,3.25 6,10 6,14C6,17.32 8.69,20 12,20A6,6 0 0,0 18,14C18,10 12,3.25 12,3.25M14.47,9.97L15.53,11.03L9.53,17.03L8.47,15.97M9.75,10A1.25,1.25 0 0,1 11,11.25A1.25,1.25 0 0,1 9.75,12.5A1.25,1.25 0 0,1 8.5,11.25A1.25,1.25 0 0,1 9.75,10M14.25,14.5A1.25,1.25 0 0,1 15.5,15.75A1.25,1.25 0 0,1 14.25,17A1.25,1.25 0 0,1 13,15.75A1.25,1.25 0 0,1 14.25,14.5Z\",Jc=\"M6,19A5,5 0 0,1 1,14A5,5 0 0,1 6,9C7,6.65 9.3,5 12,5C15.43,5 18.24,7.66 18.5,11.03L19,11A4,4 0 0,1 23,15A4,4 0 0,1 19,19H6M19,13H17V12A5,5 0 0,0 12,7C9.5,7 7.45,8.82 7.06,11.19C6.73,11.07 6.37,11 6,11A3,3 0 0,0 3,14A3,3 0 0,0 6,17H19A2,2 0 0,0 21,15A2,2 0 0,0 19,13Z\",Qc=\"M3,15H13A1,1 0 0,1 14,16A1,1 0 0,1 13,17H3A1,1 0 0,1 2,16A1,1 0 0,1 3,15M16,15H21A1,1 0 0,1 22,16A1,1 0 0,1 21,17H16A1,1 0 0,1 15,16A1,1 0 0,1 16,15M1,12A5,5 0 0,1 6,7C7,4.65 9.3,3 12,3C15.43,3 18.24,5.66 18.5,9.03L19,9C21.19,9 22.97,10.76 23,13H21A2,2 0 0,0 19,11H17V10A5,5 0 0,0 12,5C9.5,5 7.45,6.82 7.06,9.19C6.73,9.07 6.37,9 6,9A3,3 0 0,0 3,12C3,12.35 3.06,12.69 3.17,13H1.1L1,12M3,19H5A1,1 0 0,1 6,20A1,1 0 0,1 5,21H3A1,1 0 0,1 2,20A1,1 0 0,1 3,19M8,19H21A1,1 0 0,1 22,20A1,1 0 0,1 21,21H8A1,1 0 0,1 7,20A1,1 0 0,1 8,19Z\",ep=\"M6,14A1,1 0 0,1 7,15A1,1 0 0,1 6,16A5,5 0 0,1 1,11A5,5 0 0,1 6,6C7,3.65 9.3,2 12,2C15.43,2 18.24,4.66 18.5,8.03L19,8A4,4 0 0,1 23,12A4,4 0 0,1 19,16H18A1,1 0 0,1 17,15A1,1 0 0,1 18,14H19A2,2 0 0,0 21,12A2,2 0 0,0 19,10H17V9A5,5 0 0,0 12,4C9.5,4 7.45,5.82 7.06,8.19C6.73,8.07 6.37,8 6,8A3,3 0 0,0 3,11A3,3 0 0,0 6,14M10,18A2,2 0 0,1 12,20A2,2 0 0,1 10,22A2,2 0 0,1 8,20A2,2 0 0,1 10,18M14.5,16A1.5,1.5 0 0,1 16,17.5A1.5,1.5 0 0,1 14.5,19A1.5,1.5 0 0,1 13,17.5A1.5,1.5 0 0,1 14.5,16M10.5,12A1.5,1.5 0 0,1 12,13.5A1.5,1.5 0 0,1 10.5,15A1.5,1.5 0 0,1 9,13.5A1.5,1.5 0 0,1 10.5,12Z\",tp=\"M6,16A5,5 0 0,1 1,11A5,5 0 0,1 6,6C7,3.65 9.3,2 12,2C15.43,2 18.24,4.66 18.5,8.03L19,8A4,4 0 0,1 23,12A4,4 0 0,1 19,16H18A1,1 0 0,1 17,15A1,1 0 0,1 18,14H19A2,2 0 0,0 21,12A2,2 0 0,0 19,10H17V9A5,5 0 0,0 12,4C9.5,4 7.45,5.82 7.06,8.19C6.73,8.07 6.37,8 6,8A3,3 0 0,0 3,11A3,3 0 0,0 6,14H7A1,1 0 0,1 8,15A1,1 0 0,1 7,16H6M12,11H15L13,15H15L11.25,22L12,17H9.5L12,11Z\",op=\"M4.5,13.59C5,13.87 5.14,14.5 4.87,14.96C4.59,15.44 4,15.6 3.5,15.33V15.33C2,14.47 1,12.85 1,11A5,5 0 0,1 6,6C7,3.65 9.3,2 12,2C15.43,2 18.24,4.66 18.5,8.03L19,8A4,4 0 0,1 23,12A4,4 0 0,1 19,16A1,1 0 0,1 18,15A1,1 0 0,1 19,14A2,2 0 0,0 21,12A2,2 0 0,0 19,10H17V9A5,5 0 0,0 12,4C9.5,4 7.45,5.82 7.06,8.19C6.73,8.07 6.37,8 6,8A3,3 0 0,0 3,11C3,12.11 3.6,13.08 4.5,13.6V13.59M9.5,11H12.5L10.5,15H12.5L8.75,22L9.5,17H7L9.5,11M17.5,18.67C17.5,19.96 16.5,21 15.25,21C14,21 13,19.96 13,18.67C13,17.12 15.25,14.5 15.25,14.5C15.25,14.5 17.5,17.12 17.5,18.67Z\",rp=\"M17.75,4.09L15.22,6.03L16.13,9.09L13.5,7.28L10.87,9.09L11.78,6.03L9.25,4.09L12.44,4L13.5,1L14.56,4L17.75,4.09M21.25,11L19.61,12.25L20.2,14.23L18.5,13.06L16.8,14.23L17.39,12.25L15.75,11L17.81,10.95L18.5,9L19.19,10.95L21.25,11M18.97,15.95C19.8,15.87 20.69,17.05 20.16,17.8C19.84,18.25 19.5,18.67 19.08,19.07C15.17,23 8.84,23 4.94,19.07C1.03,15.17 1.03,8.83 4.94,4.93C5.34,4.53 5.76,4.17 6.21,3.85C6.96,3.32 8.14,4.21 8.06,5.04C7.79,7.9 8.75,10.87 10.95,13.06C13.14,15.26 16.1,16.22 18.97,15.95M17.33,17.97C14.5,17.81 11.7,16.64 9.53,14.5C7.36,12.31 6.2,9.5 6.04,6.68C3.23,9.82 3.34,14.64 6.35,17.66C9.37,20.67 14.19,20.78 17.33,17.97Z\",ip=\"M22,10.28C21.74,10.3 21.5,10.31 21.26,10.31C19.32,10.31 17.39,9.57 15.91,8.09C14.25,6.44 13.5,4.19 13.72,2C13.77,1.53 13.22,1 12.71,1C12.57,1 12.44,1.04 12.32,1.12C12,1.36 11.66,1.64 11.36,1.94C9.05,4.24 8.55,7.66 9.84,10.46C8.31,11.11 7.13,12.43 6.69,14.06L6,14A4,4 0 0,0 2,18A4,4 0 0,0 6,22H19A3,3 0 0,0 22,19A3,3 0 0,0 19,16C18.42,16 17.88,16.16 17.42,16.45L17.5,15.5C17.5,15.28 17.5,15.05 17.46,14.83C19.14,14.67 20.77,13.94 22.06,12.64C22.38,12.34 22.64,12 22.88,11.68C23.27,11.13 22.65,10.28 22.04,10.28M19,18A1,1 0 0,1 20,19A1,1 0 0,1 19,20H6A2,2 0 0,1 4,18A2,2 0 0,1 6,16H8.5V15.5C8.5,13.94 9.53,12.64 10.94,12.18C11.1,12.13 11.26,12.09 11.43,12.06C11.61,12.03 11.8,12 12,12C12.23,12 12.45,12.03 12.66,12.07C12.73,12.08 12.8,12.1 12.87,12.13C13,12.16 13.15,12.2 13.28,12.25C13.36,12.28 13.44,12.32 13.5,12.36C13.63,12.41 13.74,12.47 13.84,12.54C13.92,12.59 14,12.64 14.07,12.7C14.17,12.77 14.25,12.84 14.34,12.92C14.41,13 14.5,13.05 14.55,13.12C14.63,13.2 14.69,13.29 14.76,13.37C14.82,13.45 14.89,13.53 14.94,13.62C15,13.71 15.04,13.8 15.09,13.9C15.14,14 15.2,14.08 15.24,14.18C15.41,14.59 15.5,15.03 15.5,15.5V18M16.83,12.86C15.9,11.16 14.08,10 12,10H11.87C11.41,9.19 11.14,8.26 11.14,7.29C11.14,6.31 11.39,5.37 11.86,4.55C12.21,6.41 13.12,8.14 14.5,9.5C15.86,10.88 17.58,11.79 19.45,12.14C18.66,12.6 17.76,12.84 16.83,12.86Z\",np=\"M12.74,5.47C15.1,6.5 16.35,9.03 15.92,11.46C17.19,12.56 18,14.19 18,16V16.17C18.31,16.06 18.65,16 19,16A3,3 0 0,1 22,19A3,3 0 0,1 19,22H6A4,4 0 0,1 2,18A4,4 0 0,1 6,14H6.27C5,12.45 4.6,10.24 5.5,8.26C6.72,5.5 9.97,4.24 12.74,5.47M11.93,7.3C10.16,6.5 8.09,7.31 7.31,9.07C6.85,10.09 6.93,11.22 7.41,12.13C8.5,10.83 10.16,10 12,10C12.7,10 13.38,10.12 14,10.34C13.94,9.06 13.18,7.86 11.93,7.3M13.55,3.64C13,3.4 12.45,3.23 11.88,3.12L14.37,1.82L15.27,4.71C14.76,4.29 14.19,3.93 13.55,3.64M6.09,4.44C5.6,4.79 5.17,5.19 4.8,5.63L4.91,2.82L7.87,3.5C7.25,3.71 6.65,4.03 6.09,4.44M18,9.71C17.91,9.12 17.78,8.55 17.59,8L19.97,9.5L17.92,11.73C18.03,11.08 18.05,10.4 18,9.71M3.04,11.3C3.11,11.9 3.24,12.47 3.43,13L1.06,11.5L3.1,9.28C3,9.93 2.97,10.61 3.04,11.3M19,18H16V16A4,4 0 0,0 12,12A4,4 0 0,0 8,16H6A2,2 0 0,0 4,18A2,2 0 0,0 6,20H19A1,1 0 0,0 20,19A1,1 0 0,0 19,18Z\",ap=\"M9,12C9.53,12.14 9.85,12.69 9.71,13.22L8.41,18.05C8.27,18.59 7.72,18.9 7.19,18.76C6.65,18.62 6.34,18.07 6.5,17.54L7.78,12.71C7.92,12.17 8.47,11.86 9,12M13,12C13.53,12.14 13.85,12.69 13.71,13.22L11.64,20.95C11.5,21.5 10.95,21.8 10.41,21.66C9.88,21.5 9.56,20.97 9.7,20.43L11.78,12.71C11.92,12.17 12.47,11.86 13,12M17,12C17.53,12.14 17.85,12.69 17.71,13.22L16.41,18.05C16.27,18.59 15.72,18.9 15.19,18.76C14.65,18.62 14.34,18.07 14.5,17.54L15.78,12.71C15.92,12.17 16.47,11.86 17,12M17,10V9A5,5 0 0,0 12,4C9.5,4 7.45,5.82 7.06,8.19C6.73,8.07 6.37,8 6,8A3,3 0 0,0 3,11C3,12.11 3.6,13.08 4.5,13.6V13.59C5,13.87 5.14,14.5 4.87,14.96C4.59,15.43 4,15.6 3.5,15.32V15.33C2,14.47 1,12.85 1,11A5,5 0 0,1 6,6C7,3.65 9.3,2 12,2C15.43,2 18.24,4.66 18.5,8.03L19,8A4,4 0 0,1 23,12C23,13.5 22.2,14.77 21,15.46V15.46C20.5,15.73 19.91,15.57 19.63,15.09C19.36,14.61 19.5,14 20,13.72V13.73C20.6,13.39 21,12.74 21,12A2,2 0 0,0 19,10H17Z\",sp=\"M6,14.03A1,1 0 0,1 7,15.03C7,15.58 6.55,16.03 6,16.03C3.24,16.03 1,13.79 1,11.03C1,8.27 3.24,6.03 6,6.03C7,3.68 9.3,2.03 12,2.03C15.43,2.03 18.24,4.69 18.5,8.06L19,8.03A4,4 0 0,1 23,12.03C23,14.23 21.21,16.03 19,16.03H18C17.45,16.03 17,15.58 17,15.03C17,14.47 17.45,14.03 18,14.03H19A2,2 0 0,0 21,12.03A2,2 0 0,0 19,10.03H17V9.03C17,6.27 14.76,4.03 12,4.03C9.5,4.03 7.45,5.84 7.06,8.21C6.73,8.09 6.37,8.03 6,8.03A3,3 0 0,0 3,11.03A3,3 0 0,0 6,14.03M12,14.15C12.18,14.39 12.37,14.66 12.56,14.94C13,15.56 14,17.03 14,18C14,19.11 13.1,20 12,20A2,2 0 0,1 10,18C10,17.03 11,15.56 11.44,14.94C11.63,14.66 11.82,14.4 12,14.15M12,11.03L11.5,11.59C11.5,11.59 10.65,12.55 9.79,13.81C8.93,15.06 8,16.56 8,18A4,4 0 0,0 12,22A4,4 0 0,0 16,18C16,16.56 15.07,15.06 14.21,13.81C13.35,12.55 12.5,11.59 12.5,11.59\",lp=\"M6,14A1,1 0 0,1 7,15A1,1 0 0,1 6,16A5,5 0 0,1 1,11A5,5 0 0,1 6,6C7,3.65 9.3,2 12,2C15.43,2 18.24,4.66 18.5,8.03L19,8A4,4 0 0,1 23,12A4,4 0 0,1 19,16H18A1,1 0 0,1 17,15A1,1 0 0,1 18,14H19A2,2 0 0,0 21,12A2,2 0 0,0 19,10H17V9A5,5 0 0,0 12,4C9.5,4 7.45,5.82 7.06,8.19C6.73,8.07 6.37,8 6,8A3,3 0 0,0 3,11A3,3 0 0,0 6,14M7.88,18.07L10.07,17.5L8.46,15.88C8.07,15.5 8.07,14.86 8.46,14.46C8.85,14.07 9.5,14.07 9.88,14.46L11.5,16.07L12.07,13.88C12.21,13.34 12.76,13.03 13.29,13.17C13.83,13.31 14.14,13.86 14,14.4L13.41,16.59L15.6,16C16.14,15.86 16.69,16.17 16.83,16.71C16.97,17.24 16.66,17.79 16.12,17.93L13.93,18.5L15.54,20.12C15.93,20.5 15.93,21.15 15.54,21.54C15.15,21.93 14.5,21.93 14.12,21.54L12.5,19.93L11.93,22.12C11.79,22.66 11.24,22.97 10.71,22.83C10.17,22.69 9.86,22.14 10,21.6L10.59,19.41L8.4,20C7.86,20.14 7.31,19.83 7.17,19.29C7.03,18.76 7.34,18.21 7.88,18.07Z\",dp=\"M18.5,18.67C18.5,19.96 17.5,21 16.25,21C15,21 14,19.96 14,18.67C14,17.12 16.25,14.5 16.25,14.5C16.25,14.5 18.5,17.12 18.5,18.67M4,17.36C3.86,16.82 4.18,16.25 4.73,16.11L7,15.5L5.33,13.86C4.93,13.46 4.93,12.81 5.33,12.4C5.73,12 6.4,12 6.79,12.4L8.45,14.05L9.04,11.8C9.18,11.24 9.75,10.92 10.29,11.07C10.85,11.21 11.17,11.78 11,12.33L10.42,14.58L12.67,14C13.22,13.83 13.79,14.15 13.93,14.71C14.08,15.25 13.76,15.82 13.2,15.96L10.95,16.55L12.6,18.21C13,18.6 13,19.27 12.6,19.67C12.2,20.07 11.54,20.07 11.15,19.67L9.5,18L8.89,20.27C8.75,20.83 8.18,21.14 7.64,21C7.08,20.86 6.77,20.29 6.91,19.74L7.5,17.5L5.26,18.09C4.71,18.23 4.14,17.92 4,17.36M1,11A5,5 0 0,1 6,6C7,3.65 9.3,2 12,2C15.43,2 18.24,4.66 18.5,8.03L19,8A4,4 0 0,1 23,12A4,4 0 0,1 19,16A1,1 0 0,1 18,15A1,1 0 0,1 19,14A2,2 0 0,0 21,12A2,2 0 0,0 19,10H17V9A5,5 0 0,0 12,4C9.5,4 7.45,5.82 7.06,8.19C6.73,8.07 6.37,8 6,8A3,3 0 0,0 3,11C3,11.85 3.35,12.61 3.91,13.16C4.27,13.55 4.26,14.16 3.88,14.54C3.5,14.93 2.85,14.93 2.47,14.54C1.56,13.63 1,12.38 1,11Z\",cp=\"M12,7A5,5 0 0,1 17,12A5,5 0 0,1 12,17A5,5 0 0,1 7,12A5,5 0 0,1 12,7M12,9A3,3 0 0,0 9,12A3,3 0 0,0 12,15A3,3 0 0,0 15,12A3,3 0 0,0 12,9M12,2L14.39,5.42C13.65,5.15 12.84,5 12,5C11.16,5 10.35,5.15 9.61,5.42L12,2M3.34,7L7.5,6.65C6.9,7.16 6.36,7.78 5.94,8.5C5.5,9.24 5.25,10 5.11,10.79L3.34,7M3.36,17L5.12,13.23C5.26,14 5.53,14.78 5.95,15.5C6.37,16.24 6.91,16.86 7.5,17.37L3.36,17M20.65,7L18.88,10.79C18.74,10 18.47,9.23 18.05,8.5C17.63,7.78 17.1,7.15 16.5,6.64L20.65,7M20.64,17L16.5,17.36C17.09,16.85 17.62,16.22 18.04,15.5C18.46,14.77 18.73,14 18.87,13.21L20.64,17M12,22L9.59,18.56C10.33,18.83 11.14,19 12,19C12.82,19 13.63,18.83 14.37,18.56L12,22Z\",pp=\"M4,10A1,1 0 0,1 3,9A1,1 0 0,1 4,8H12A2,2 0 0,0 14,6A2,2 0 0,0 12,4C11.45,4 10.95,4.22 10.59,4.59C10.2,5 9.56,5 9.17,4.59C8.78,4.2 8.78,3.56 9.17,3.17C9.9,2.45 10.9,2 12,2A4,4 0 0,1 16,6A4,4 0 0,1 12,10H4M19,12A1,1 0 0,0 20,11A1,1 0 0,0 19,10C18.72,10 18.47,10.11 18.29,10.29C17.9,10.68 17.27,10.68 16.88,10.29C16.5,9.9 16.5,9.27 16.88,8.88C17.42,8.34 18.17,8 19,8A3,3 0 0,1 22,11A3,3 0 0,1 19,14H5A1,1 0 0,1 4,13A1,1 0 0,1 5,12H19M18,18H4A1,1 0 0,1 3,17A1,1 0 0,1 4,16H18A3,3 0 0,1 21,19A3,3 0 0,1 18,22C17.17,22 16.42,21.66 15.88,21.12C15.5,20.73 15.5,20.1 15.88,19.71C16.27,19.32 16.9,19.32 17.29,19.71C17.47,19.89 17.72,20 18,20A1,1 0 0,0 19,19A1,1 0 0,0 18,18Z\",up=\"M6,6L6.69,6.06C7.32,3.72 9.46,2 12,2A5.5,5.5 0 0,1 17.5,7.5L17.42,8.45C17.88,8.16 18.42,8 19,8A3,3 0 0,1 22,11A3,3 0 0,1 19,14H6A4,4 0 0,1 2,10A4,4 0 0,1 6,6M6,8A2,2 0 0,0 4,10A2,2 0 0,0 6,12H19A1,1 0 0,0 20,11A1,1 0 0,0 19,10H15.5V7.5A3.5,3.5 0 0,0 12,4A3.5,3.5 0 0,0 8.5,7.5V8H6M18,18H4A1,1 0 0,1 3,17A1,1 0 0,1 4,16H18A3,3 0 0,1 21,19A3,3 0 0,1 18,22C17.17,22 16.42,21.66 15.88,21.12C15.5,20.73 15.5,20.1 15.88,19.71C16.27,19.32 16.9,19.32 17.29,19.71C17.47,19.89 17.72,20 18,20A1,1 0 0,0 19,19A1,1 0 0,0 18,18Z\",mp=\"M16.36,14C16.44,13.34 16.5,12.68 16.5,12C16.5,11.32 16.44,10.66 16.36,10H19.74C19.9,10.64 20,11.31 20,12C20,12.69 19.9,13.36 19.74,14M14.59,19.56C15.19,18.45 15.65,17.25 15.97,16H18.92C17.96,17.65 16.43,18.93 14.59,19.56M14.34,14H9.66C9.56,13.34 9.5,12.68 9.5,12C9.5,11.32 9.56,10.65 9.66,10H14.34C14.43,10.65 14.5,11.32 14.5,12C14.5,12.68 14.43,13.34 14.34,14M12,19.96C11.17,18.76 10.5,17.43 10.09,16H13.91C13.5,17.43 12.83,18.76 12,19.96M8,8H5.08C6.03,6.34 7.57,5.06 9.4,4.44C8.8,5.55 8.35,6.75 8,8M5.08,16H8C8.35,17.25 8.8,18.45 9.4,19.56C7.57,18.93 6.03,17.65 5.08,16M4.26,14C4.1,13.36 4,12.69 4,12C4,11.31 4.1,10.64 4.26,10H7.64C7.56,10.66 7.5,11.32 7.5,12C7.5,12.68 7.56,13.34 7.64,14M12,4.03C12.83,5.23 13.5,6.57 13.91,8H10.09C10.5,6.57 11.17,5.23 12,4.03M18.92,8H15.97C15.65,6.75 15.19,5.55 14.59,4.44C16.43,5.07 17.96,6.34 18.92,8M12,2C6.47,2 2,6.5 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2Z\",hp=\"M3.55,18.54L4.96,19.95L6.76,18.16L5.34,16.74M11,22.45C11.32,22.45 13,22.45 13,22.45V19.5H11M12,5.5A6,6 0 0,0 6,11.5A6,6 0 0,0 12,17.5A6,6 0 0,0 18,11.5C18,8.18 15.31,5.5 12,5.5M20,12.5H23V10.5H20M17.24,18.16L19.04,19.95L20.45,18.54L18.66,16.74M20.45,4.46L19.04,3.05L17.24,4.84L18.66,6.26M13,0.55H11V3.5H13M4,10.5H1V12.5H4M6.76,4.84L4.96,3.05L3.55,4.46L5.34,6.26L6.76,4.84Z\",gp=\"M12,21L15.6,16.2C14.6,15.45 13.35,15 12,15C10.65,15 9.4,15.45 8.4,16.2L12,21M12,3C7.95,3 4.21,4.34 1.2,6.6L3,9C5.5,7.12 8.62,6 12,6C15.38,6 18.5,7.12 21,9L22.8,6.6C19.79,4.34 16.05,3 12,3M12,9C9.3,9 6.81,9.89 4.8,11.4L6.6,13.8C8.1,12.67 9.97,12 12,12C14.03,12 15.9,12.67 17.4,13.8L19.2,11.4C17.19,9.89 14.7,9 12,9Z\",_p=\"M6,11H10V9H14V11H18V4H6V11M18,13H6V20H18V13M6,2H18A2,2 0 0,1 20,4V20A2,2 0 0,1 18,22H6A2,2 0 0,1 4,20V4A2,2 0 0,1 6,2Z\",fp=\"M6,8H10V6H14V8H18V4H6V8M18,10H6V15H18V10M6,20H18V17H6V20M6,2H18A2,2 0 0,1 20,4V20A2,2 0 0,1 18,22H6A2,2 0 0,1 4,20V4A2,2 0 0,1 6,2Z\",yp=\"M3 4H21V8H19V20H17V8H7V20H5V8H3V4M8 9H16V11H8V9M8 12H16V14H8V12M8 15H16V17H8V15M8 18H16V20H8V18Z\",bp=\"M3 4H21V8H19V20H17V8H7V20H5V8H3V4M8 9H16V11H8V9Z\",vp=function(e,t){return vp=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o])},vp(e,t)};function Cp(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Class extends value \"+String(t)+\" is not a constructor or null\");function o(){this.constructor=e}vp(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}var Ap=function(){return Ap=Object.assign||function(e){for(var t,o=1,r=arguments.length;o<r;o++)for(var i in t=arguments[o])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},Ap.apply(this,arguments)};function wp(e,t,o,r){var i,n=arguments.length,a=n<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,o):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(e,t,o,r);else for(var s=e.length-1;s>=0;s--)(i=e[s])&&(a=(n<3?i(a):n>3?i(t,o,a):i(t,o))||a);return n>3&&a&&Object.defineProperty(t,o,a),a}var Hp=Object.create?function(e,t,o,r){void 0===r&&(r=o);var i=Object.getOwnPropertyDescriptor(t,o);i&&!(\"get\"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[o]}}),Object.defineProperty(e,r,i)}:function(e,t,o,r){void 0===r&&(r=o),e[r]=t[o]};function kp(e){var t=\"function\"==typeof Symbol&&Symbol.iterator,o=t&&e[t],r=0;if(o)return o.call(e);if(e&&\"number\"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")}function Lp(e,t){var o=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!o)return e;var r,i,n=o.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(r=n.next()).done;)a.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(o=n.return)&&o.call(n)}finally{if(i)throw i.error}}return a}function Sp(e,t,o){if(o||2===arguments.length)for(var r,i=0,n=t.length;i<n;i++)!r&&i in t||(r||(r=Array.prototype.slice.call(t,0,i)),r[i]=t[i]);return e.concat(r||Array.prototype.slice.call(t))}function xp(e){return this instanceof xp?(this.v=e,this):new xp(e)}var Vp=Object.create?function(e,t){Object.defineProperty(e,\"default\",{enumerable:!0,value:t})}:function(e,t){e.default=t};var Mp,Ep,Pp,Tp=Object.freeze({__proto__:null,__extends:Cp,get __assign(){return Ap},__rest:function(e,t){var o={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(o[r]=e[r]);if(null!=e&&\"function\"==typeof Object.getOwnPropertySymbols){var i=0;for(r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(o[r[i]]=e[r[i]])}return o},__decorate:wp,__param:function(e,t){return function(o,r){t(o,r,e)}},__metadata:function(e,t){if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.metadata)return Reflect.metadata(e,t)},__awaiter:function(e,t,o,r){return new(o||(o=Promise))((function(i,n){function a(e){try{l(r.next(e))}catch(e){n(e)}}function s(e){try{l(r.throw(e))}catch(e){n(e)}}function l(e){var t;e.done?i(e.value):(t=e.value,t instanceof o?t:new o((function(e){e(t)}))).then(a,s)}l((r=r.apply(e,t||[])).next())}))},__generator:function(e,t){var o,r,i,n,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return n={next:s(0),throw:s(1),return:s(2)},\"function\"==typeof Symbol&&(n[Symbol.iterator]=function(){return this}),n;function s(n){return function(s){return function(n){if(o)throw new TypeError(\"Generator is already executing.\");for(;a;)try{if(o=1,r&&(i=2&n[0]?r.return:n[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,n[1])).done)return i;switch(r=0,i&&(n=[2&n[0],i.value]),n[0]){case 0:case 1:i=n;break;case 4:return a.label++,{value:n[1],done:!1};case 5:a.label++,r=n[1],n=[0];continue;case 7:n=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==n[0]&&2!==n[0])){a=0;continue}if(3===n[0]&&(!i||n[1]>i[0]&&n[1]<i[3])){a.label=n[1];break}if(6===n[0]&&a.label<i[1]){a.label=i[1],i=n;break}if(i&&a.label<i[2]){a.label=i[2],a.ops.push(n);break}i[2]&&a.ops.pop(),a.trys.pop();continue}n=t.call(e,a)}catch(e){n=[6,e],r=0}finally{o=i=0}if(5&n[0])throw n[1];return{value:n[0]?n[1]:void 0,done:!0}}([n,s])}}},__createBinding:Hp,__exportStar:function(e,t){for(var o in e)\"default\"===o||Object.prototype.hasOwnProperty.call(t,o)||Hp(t,e,o)},__values:kp,__read:Lp,__spread:function(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(Lp(arguments[t]));return e},__spreadArrays:function(){for(var e=0,t=0,o=arguments.length;t<o;t++)e+=arguments[t].length;var r=Array(e),i=0;for(t=0;t<o;t++)for(var n=arguments[t],a=0,s=n.length;a<s;a++,i++)r[i]=n[a];return r},__spreadArray:Sp,__await:xp,__asyncGenerator:function(e,t,o){if(!Symbol.asyncIterator)throw new TypeError(\"Symbol.asyncIterator is not defined.\");var r,i=o.apply(e,t||[]),n=[];return r={},a(\"next\"),a(\"throw\"),a(\"return\"),r[Symbol.asyncIterator]=function(){return this},r;function a(e){i[e]&&(r[e]=function(t){return new Promise((function(o,r){n.push([e,t,o,r])>1||s(e,t)}))})}function s(e,t){try{!function(e){e.value instanceof xp?Promise.resolve(e.value.v).then(l,d):c(n[0][2],e)}(i[e](t))}catch(e){c(n[0][3],e)}}function l(e){s(\"next\",e)}function d(e){s(\"throw\",e)}function c(e,t){e(t),n.shift(),n.length&&s(n[0][0],n[0][1])}},__asyncDelegator:function(e){var t,o;return t={},r(\"next\"),r(\"throw\",(function(e){throw e})),r(\"return\"),t[Symbol.iterator]=function(){return this},t;function r(r,i){t[r]=e[r]?function(t){return(o=!o)?{value:xp(e[r](t)),done:\"return\"===r}:i?i(t):t}:i}},__asyncValues:function(e){if(!Symbol.asyncIterator)throw new TypeError(\"Symbol.asyncIterator is not defined.\");var t,o=e[Symbol.asyncIterator];return o?o.call(e):(e=kp(e),t={},r(\"next\"),r(\"throw\"),r(\"return\"),t[Symbol.asyncIterator]=function(){return this},t);function r(o){t[o]=e[o]&&function(t){return new Promise((function(r,i){(function(e,t,o,r){Promise.resolve(r).then((function(t){e({value:t,done:o})}),t)})(r,i,(t=e[o](t)).done,t.value)}))}}},__makeTemplateObject:function(e,t){return Object.defineProperty?Object.defineProperty(e,\"raw\",{value:t}):e.raw=t,e},__importStar:function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)\"default\"!==o&&Object.prototype.hasOwnProperty.call(e,o)&&Hp(t,e,o);return Vp(t,e),t},__importDefault:function(e){return e&&e.__esModule?e:{default:e}},__classPrivateFieldGet:function(e,t,o,r){if(\"a\"===o&&!r)throw new TypeError(\"Private accessor was defined without a getter\");if(\"function\"==typeof t?e!==t||!r:!t.has(e))throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");return\"m\"===o?r:\"a\"===o?r.call(e):r?r.value:t.get(e)},__classPrivateFieldSet:function(e,t,o,r,i){if(\"m\"===r)throw new TypeError(\"Private method is not writable\");if(\"a\"===r&&!i)throw new TypeError(\"Private accessor was defined without a setter\");if(\"function\"==typeof t?e!==t||!i:!t.has(e))throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");return\"a\"===r?i.call(e,o):i?i.value=o:t.set(e,o),o},__classPrivateFieldIn:function(e,t){if(null===t||\"object\"!=typeof t&&\"function\"!=typeof t)throw new TypeError(\"Cannot use 'in' operator on non-object\");return\"function\"==typeof e?t===e:e.has(t)}});function zp(e){return e.type===Ep.literal}function Np(e){return e.type===Ep.argument}function Ip(e){return e.type===Ep.number}function Op(e){return e.type===Ep.date}function Rp(e){return e.type===Ep.time}function Dp(e){return e.type===Ep.select}function jp(e){return e.type===Ep.plural}function Bp(e){return e.type===Ep.pound}function $p(e){return e.type===Ep.tag}function Fp(e){return!(!e||\"object\"!=typeof e||e.type!==Pp.number)}function Up(e){return!(!e||\"object\"!=typeof e||e.type!==Pp.dateTime)}!function(e){e[e.EXPECT_ARGUMENT_CLOSING_BRACE=1]=\"EXPECT_ARGUMENT_CLOSING_BRACE\",e[e.EMPTY_ARGUMENT=2]=\"EMPTY_ARGUMENT\",e[e.MALFORMED_ARGUMENT=3]=\"MALFORMED_ARGUMENT\",e[e.EXPECT_ARGUMENT_TYPE=4]=\"EXPECT_ARGUMENT_TYPE\",e[e.INVALID_ARGUMENT_TYPE=5]=\"INVALID_ARGUMENT_TYPE\",e[e.EXPECT_ARGUMENT_STYLE=6]=\"EXPECT_ARGUMENT_STYLE\",e[e.INVALID_NUMBER_SKELETON=7]=\"INVALID_NUMBER_SKELETON\",e[e.INVALID_DATE_TIME_SKELETON=8]=\"INVALID_DATE_TIME_SKELETON\",e[e.EXPECT_NUMBER_SKELETON=9]=\"EXPECT_NUMBER_SKELETON\",e[e.EXPECT_DATE_TIME_SKELETON=10]=\"EXPECT_DATE_TIME_SKELETON\",e[e.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE=11]=\"UNCLOSED_QUOTE_IN_ARGUMENT_STYLE\",e[e.EXPECT_SELECT_ARGUMENT_OPTIONS=12]=\"EXPECT_SELECT_ARGUMENT_OPTIONS\",e[e.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE=13]=\"EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE\",e[e.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE=14]=\"INVALID_PLURAL_ARGUMENT_OFFSET_VALUE\",e[e.EXPECT_SELECT_ARGUMENT_SELECTOR=15]=\"EXPECT_SELECT_ARGUMENT_SELECTOR\",e[e.EXPECT_PLURAL_ARGUMENT_SELECTOR=16]=\"EXPECT_PLURAL_ARGUMENT_SELECTOR\",e[e.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT=17]=\"EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT\",e[e.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT=18]=\"EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT\",e[e.INVALID_PLURAL_ARGUMENT_SELECTOR=19]=\"INVALID_PLURAL_ARGUMENT_SELECTOR\",e[e.DUPLICATE_PLURAL_ARGUMENT_SELECTOR=20]=\"DUPLICATE_PLURAL_ARGUMENT_SELECTOR\",e[e.DUPLICATE_SELECT_ARGUMENT_SELECTOR=21]=\"DUPLICATE_SELECT_ARGUMENT_SELECTOR\",e[e.MISSING_OTHER_CLAUSE=22]=\"MISSING_OTHER_CLAUSE\",e[e.INVALID_TAG=23]=\"INVALID_TAG\",e[e.INVALID_TAG_NAME=25]=\"INVALID_TAG_NAME\",e[e.UNMATCHED_CLOSING_TAG=26]=\"UNMATCHED_CLOSING_TAG\",e[e.UNCLOSED_TAG=27]=\"UNCLOSED_TAG\"}(Mp||(Mp={})),function(e){e[e.literal=0]=\"literal\",e[e.argument=1]=\"argument\",e[e.number=2]=\"number\",e[e.date=3]=\"date\",e[e.time=4]=\"time\",e[e.select=5]=\"select\",e[e.plural=6]=\"plural\",e[e.pound=7]=\"pound\",e[e.tag=8]=\"tag\"}(Ep||(Ep={})),function(e){e[e.number=0]=\"number\",e[e.dateTime=1]=\"dateTime\"}(Pp||(Pp={}));var Zp=/[ \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000]/,qp=/(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;function Gp(e){var t={};return e.replace(qp,(function(e){var o=e.length;switch(e[0]){case\"G\":t.era=4===o?\"long\":5===o?\"narrow\":\"short\";break;case\"y\":t.year=2===o?\"2-digit\":\"numeric\";break;case\"Y\":case\"u\":case\"U\":case\"r\":throw new RangeError(\"`Y/u/U/r` (year) patterns are not supported, use `y` instead\");case\"q\":case\"Q\":throw new RangeError(\"`q/Q` (quarter) patterns are not supported\");case\"M\":case\"L\":t.month=[\"numeric\",\"2-digit\",\"short\",\"long\",\"narrow\"][o-1];break;case\"w\":case\"W\":throw new RangeError(\"`w/W` (week) patterns are not supported\");case\"d\":t.day=[\"numeric\",\"2-digit\"][o-1];break;case\"D\":case\"F\":case\"g\":throw new RangeError(\"`D/F/g` (day) patterns are not supported, use `d` instead\");case\"E\":t.weekday=4===o?\"short\":5===o?\"narrow\":\"short\";break;case\"e\":if(o<4)throw new RangeError(\"`e..eee` (weekday) patterns are not supported\");t.weekday=[\"short\",\"long\",\"narrow\",\"short\"][o-4];break;case\"c\":if(o<4)throw new RangeError(\"`c..ccc` (weekday) patterns are not supported\");t.weekday=[\"short\",\"long\",\"narrow\",\"short\"][o-4];break;case\"a\":t.hour12=!0;break;case\"b\":case\"B\":throw new RangeError(\"`b/B` (period) patterns are not supported, use `a` instead\");case\"h\":t.hourCycle=\"h12\",t.hour=[\"numeric\",\"2-digit\"][o-1];break;case\"H\":t.hourCycle=\"h23\",t.hour=[\"numeric\",\"2-digit\"][o-1];break;case\"K\":t.hourCycle=\"h11\",t.hour=[\"numeric\",\"2-digit\"][o-1];break;case\"k\":t.hourCycle=\"h24\",t.hour=[\"numeric\",\"2-digit\"][o-1];break;case\"j\":case\"J\":case\"C\":throw new RangeError(\"`j/J/C` (hour) patterns are not supported, use `h/H/K/k` instead\");case\"m\":t.minute=[\"numeric\",\"2-digit\"][o-1];break;case\"s\":t.second=[\"numeric\",\"2-digit\"][o-1];break;case\"S\":case\"A\":throw new RangeError(\"`S/A` (second) patterns are not supported, use `s` instead\");case\"z\":t.timeZoneName=o<4?\"short\":\"long\";break;case\"Z\":case\"O\":case\"v\":case\"V\":case\"X\":case\"x\":throw new RangeError(\"`Z/O/v/V/X/x` (timeZone) patterns are not supported, use `z` instead\")}return\"\"})),t}var Kp=/[\\t-\\r \\x85\\u200E\\u200F\\u2028\\u2029]/i;var Yp=/^\\.(?:(0+)(\\*)?|(#+)|(0+)(#+))$/g,Wp=/^(@+)?(\\+|#+)?[rs]?$/g,Xp=/(\\*)(0+)|(#+)(0+)|(0+)/g,Jp=/^(0+)$/;function Qp(e){var t={};return\"r\"===e[e.length-1]?t.roundingPriority=\"morePrecision\":\"s\"===e[e.length-1]&&(t.roundingPriority=\"lessPrecision\"),e.replace(Wp,(function(e,o,r){return\"string\"!=typeof r?(t.minimumSignificantDigits=o.length,t.maximumSignificantDigits=o.length):\"+\"===r?t.minimumSignificantDigits=o.length:\"#\"===o[0]?t.maximumSignificantDigits=o.length:(t.minimumSignificantDigits=o.length,t.maximumSignificantDigits=o.length+(\"string\"==typeof r?r.length:0)),\"\"})),t}function eu(e){switch(e){case\"sign-auto\":return{signDisplay:\"auto\"};case\"sign-accounting\":case\"()\":return{currencySign:\"accounting\"};case\"sign-always\":case\"+!\":return{signDisplay:\"always\"};case\"sign-accounting-always\":case\"()!\":return{signDisplay:\"always\",currencySign:\"accounting\"};case\"sign-except-zero\":case\"+?\":return{signDisplay:\"exceptZero\"};case\"sign-accounting-except-zero\":case\"()?\":return{signDisplay:\"exceptZero\",currencySign:\"accounting\"};case\"sign-never\":case\"+_\":return{signDisplay:\"never\"}}}function tu(e){var t;if(\"E\"===e[0]&&\"E\"===e[1]?(t={notation:\"engineering\"},e=e.slice(2)):\"E\"===e[0]&&(t={notation:\"scientific\"},e=e.slice(1)),t){var o=e.slice(0,2);if(\"+!\"===o?(t.signDisplay=\"always\",e=e.slice(2)):\"+?\"===o&&(t.signDisplay=\"exceptZero\",e=e.slice(2)),!Jp.test(e))throw new Error(\"Malformed concise eng/scientific notation\");t.minimumIntegerDigits=e.length}return t}function ou(e){var t=eu(e);return t||{}}function ru(e){for(var t={},o=0,r=e;o<r.length;o++){var i=r[o];switch(i.stem){case\"percent\":case\"%\":t.style=\"percent\";continue;case\"%x100\":t.style=\"percent\",t.scale=100;continue;case\"currency\":t.style=\"currency\",t.currency=i.options[0];continue;case\"group-off\":case\",_\":t.useGrouping=!1;continue;case\"precision-integer\":case\".\":t.maximumFractionDigits=0;continue;case\"measure-unit\":case\"unit\":t.style=\"unit\",t.unit=i.options[0].replace(/^(.*?)-/,\"\");continue;case\"compact-short\":case\"K\":t.notation=\"compact\",t.compactDisplay=\"short\";continue;case\"compact-long\":case\"KK\":t.notation=\"compact\",t.compactDisplay=\"long\";continue;case\"scientific\":t=Ap(Ap(Ap({},t),{notation:\"scientific\"}),i.options.reduce((function(e,t){return Ap(Ap({},e),ou(t))}),{}));continue;case\"engineering\":t=Ap(Ap(Ap({},t),{notation:\"engineering\"}),i.options.reduce((function(e,t){return Ap(Ap({},e),ou(t))}),{}));continue;case\"notation-simple\":t.notation=\"standard\";continue;case\"unit-width-narrow\":t.currencyDisplay=\"narrowSymbol\",t.unitDisplay=\"narrow\";continue;case\"unit-width-short\":t.currencyDisplay=\"code\",t.unitDisplay=\"short\";continue;case\"unit-width-full-name\":t.currencyDisplay=\"name\",t.unitDisplay=\"long\";continue;case\"unit-width-iso-code\":t.currencyDisplay=\"symbol\";continue;case\"scale\":t.scale=parseFloat(i.options[0]);continue;case\"integer-width\":if(i.options.length>1)throw new RangeError(\"integer-width stems only accept a single optional option\");i.options[0].replace(Xp,(function(e,o,r,i,n,a){if(o)t.minimumIntegerDigits=r.length;else{if(i&&n)throw new Error(\"We currently do not support maximum integer digits\");if(a)throw new Error(\"We currently do not support exact integer digits\")}return\"\"}));continue}if(Jp.test(i.stem))t.minimumIntegerDigits=i.stem.length;else if(Yp.test(i.stem)){if(i.options.length>1)throw new RangeError(\"Fraction-precision stems only accept a single optional option\");i.stem.replace(Yp,(function(e,o,r,i,n,a){return\"*\"===r?t.minimumFractionDigits=o.length:i&&\"#\"===i[0]?t.maximumFractionDigits=i.length:n&&a?(t.minimumFractionDigits=n.length,t.maximumFractionDigits=n.length+a.length):(t.minimumFractionDigits=o.length,t.maximumFractionDigits=o.length),\"\"}));var n=i.options[0];\"w\"===n?t=Ap(Ap({},t),{trailingZeroDisplay:\"stripIfInteger\"}):n&&(t=Ap(Ap({},t),Qp(n)))}else if(Wp.test(i.stem))t=Ap(Ap({},t),Qp(i.stem));else{var a=eu(i.stem);a&&(t=Ap(Ap({},t),a));var s=tu(i.stem);s&&(t=Ap(Ap({},t),s))}}return t}var iu,nu={AX:[\"H\"],BQ:[\"H\"],CP:[\"H\"],CZ:[\"H\"],DK:[\"H\"],FI:[\"H\"],ID:[\"H\"],IS:[\"H\"],ML:[\"H\"],NE:[\"H\"],RU:[\"H\"],SE:[\"H\"],SJ:[\"H\"],SK:[\"H\"],AS:[\"h\",\"H\"],BT:[\"h\",\"H\"],DJ:[\"h\",\"H\"],ER:[\"h\",\"H\"],GH:[\"h\",\"H\"],IN:[\"h\",\"H\"],LS:[\"h\",\"H\"],PG:[\"h\",\"H\"],PW:[\"h\",\"H\"],SO:[\"h\",\"H\"],TO:[\"h\",\"H\"],VU:[\"h\",\"H\"],WS:[\"h\",\"H\"],\"001\":[\"H\",\"h\"],AL:[\"h\",\"H\",\"hB\"],TD:[\"h\",\"H\",\"hB\"],\"ca-ES\":[\"H\",\"h\",\"hB\"],CF:[\"H\",\"h\",\"hB\"],CM:[\"H\",\"h\",\"hB\"],\"fr-CA\":[\"H\",\"h\",\"hB\"],\"gl-ES\":[\"H\",\"h\",\"hB\"],\"it-CH\":[\"H\",\"h\",\"hB\"],\"it-IT\":[\"H\",\"h\",\"hB\"],LU:[\"H\",\"h\",\"hB\"],NP:[\"H\",\"h\",\"hB\"],PF:[\"H\",\"h\",\"hB\"],SC:[\"H\",\"h\",\"hB\"],SM:[\"H\",\"h\",\"hB\"],SN:[\"H\",\"h\",\"hB\"],TF:[\"H\",\"h\",\"hB\"],VA:[\"H\",\"h\",\"hB\"],CY:[\"h\",\"H\",\"hb\",\"hB\"],GR:[\"h\",\"H\",\"hb\",\"hB\"],CO:[\"h\",\"H\",\"hB\",\"hb\"],DO:[\"h\",\"H\",\"hB\",\"hb\"],KP:[\"h\",\"H\",\"hB\",\"hb\"],KR:[\"h\",\"H\",\"hB\",\"hb\"],NA:[\"h\",\"H\",\"hB\",\"hb\"],PA:[\"h\",\"H\",\"hB\",\"hb\"],PR:[\"h\",\"H\",\"hB\",\"hb\"],VE:[\"h\",\"H\",\"hB\",\"hb\"],AC:[\"H\",\"h\",\"hb\",\"hB\"],AI:[\"H\",\"h\",\"hb\",\"hB\"],BW:[\"H\",\"h\",\"hb\",\"hB\"],BZ:[\"H\",\"h\",\"hb\",\"hB\"],CC:[\"H\",\"h\",\"hb\",\"hB\"],CK:[\"H\",\"h\",\"hb\",\"hB\"],CX:[\"H\",\"h\",\"hb\",\"hB\"],DG:[\"H\",\"h\",\"hb\",\"hB\"],FK:[\"H\",\"h\",\"hb\",\"hB\"],GB:[\"H\",\"h\",\"hb\",\"hB\"],GG:[\"H\",\"h\",\"hb\",\"hB\"],GI:[\"H\",\"h\",\"hb\",\"hB\"],IE:[\"H\",\"h\",\"hb\",\"hB\"],IM:[\"H\",\"h\",\"hb\",\"hB\"],IO:[\"H\",\"h\",\"hb\",\"hB\"],JE:[\"H\",\"h\",\"hb\",\"hB\"],LT:[\"H\",\"h\",\"hb\",\"hB\"],MK:[\"H\",\"h\",\"hb\",\"hB\"],MN:[\"H\",\"h\",\"hb\",\"hB\"],MS:[\"H\",\"h\",\"hb\",\"hB\"],NF:[\"H\",\"h\",\"hb\",\"hB\"],NG:[\"H\",\"h\",\"hb\",\"hB\"],NR:[\"H\",\"h\",\"hb\",\"hB\"],NU:[\"H\",\"h\",\"hb\",\"hB\"],PN:[\"H\",\"h\",\"hb\",\"hB\"],SH:[\"H\",\"h\",\"hb\",\"hB\"],SX:[\"H\",\"h\",\"hb\",\"hB\"],TA:[\"H\",\"h\",\"hb\",\"hB\"],ZA:[\"H\",\"h\",\"hb\",\"hB\"],\"af-ZA\":[\"H\",\"h\",\"hB\",\"hb\"],AR:[\"H\",\"h\",\"hB\",\"hb\"],CL:[\"H\",\"h\",\"hB\",\"hb\"],CR:[\"H\",\"h\",\"hB\",\"hb\"],CU:[\"H\",\"h\",\"hB\",\"hb\"],EA:[\"H\",\"h\",\"hB\",\"hb\"],\"es-BO\":[\"H\",\"h\",\"hB\",\"hb\"],\"es-BR\":[\"H\",\"h\",\"hB\",\"hb\"],\"es-EC\":[\"H\",\"h\",\"hB\",\"hb\"],\"es-ES\":[\"H\",\"h\",\"hB\",\"hb\"],\"es-GQ\":[\"H\",\"h\",\"hB\",\"hb\"],\"es-PE\":[\"H\",\"h\",\"hB\",\"hb\"],GT:[\"H\",\"h\",\"hB\",\"hb\"],HN:[\"H\",\"h\",\"hB\",\"hb\"],IC:[\"H\",\"h\",\"hB\",\"hb\"],KG:[\"H\",\"h\",\"hB\",\"hb\"],KM:[\"H\",\"h\",\"hB\",\"hb\"],LK:[\"H\",\"h\",\"hB\",\"hb\"],MA:[\"H\",\"h\",\"hB\",\"hb\"],MX:[\"H\",\"h\",\"hB\",\"hb\"],NI:[\"H\",\"h\",\"hB\",\"hb\"],PY:[\"H\",\"h\",\"hB\",\"hb\"],SV:[\"H\",\"h\",\"hB\",\"hb\"],UY:[\"H\",\"h\",\"hB\",\"hb\"],JP:[\"H\",\"h\",\"K\"],AD:[\"H\",\"hB\"],AM:[\"H\",\"hB\"],AO:[\"H\",\"hB\"],AT:[\"H\",\"hB\"],AW:[\"H\",\"hB\"],BE:[\"H\",\"hB\"],BF:[\"H\",\"hB\"],BJ:[\"H\",\"hB\"],BL:[\"H\",\"hB\"],BR:[\"H\",\"hB\"],CG:[\"H\",\"hB\"],CI:[\"H\",\"hB\"],CV:[\"H\",\"hB\"],DE:[\"H\",\"hB\"],EE:[\"H\",\"hB\"],FR:[\"H\",\"hB\"],GA:[\"H\",\"hB\"],GF:[\"H\",\"hB\"],GN:[\"H\",\"hB\"],GP:[\"H\",\"hB\"],GW:[\"H\",\"hB\"],HR:[\"H\",\"hB\"],IL:[\"H\",\"hB\"],IT:[\"H\",\"hB\"],KZ:[\"H\",\"hB\"],MC:[\"H\",\"hB\"],MD:[\"H\",\"hB\"],MF:[\"H\",\"hB\"],MQ:[\"H\",\"hB\"],MZ:[\"H\",\"hB\"],NC:[\"H\",\"hB\"],NL:[\"H\",\"hB\"],PM:[\"H\",\"hB\"],PT:[\"H\",\"hB\"],RE:[\"H\",\"hB\"],RO:[\"H\",\"hB\"],SI:[\"H\",\"hB\"],SR:[\"H\",\"hB\"],ST:[\"H\",\"hB\"],TG:[\"H\",\"hB\"],TR:[\"H\",\"hB\"],WF:[\"H\",\"hB\"],YT:[\"H\",\"hB\"],BD:[\"h\",\"hB\",\"H\"],PK:[\"h\",\"hB\",\"H\"],AZ:[\"H\",\"hB\",\"h\"],BA:[\"H\",\"hB\",\"h\"],BG:[\"H\",\"hB\",\"h\"],CH:[\"H\",\"hB\",\"h\"],GE:[\"H\",\"hB\",\"h\"],LI:[\"H\",\"hB\",\"h\"],ME:[\"H\",\"hB\",\"h\"],RS:[\"H\",\"hB\",\"h\"],UA:[\"H\",\"hB\",\"h\"],UZ:[\"H\",\"hB\",\"h\"],XK:[\"H\",\"hB\",\"h\"],AG:[\"h\",\"hb\",\"H\",\"hB\"],AU:[\"h\",\"hb\",\"H\",\"hB\"],BB:[\"h\",\"hb\",\"H\",\"hB\"],BM:[\"h\",\"hb\",\"H\",\"hB\"],BS:[\"h\",\"hb\",\"H\",\"hB\"],CA:[\"h\",\"hb\",\"H\",\"hB\"],DM:[\"h\",\"hb\",\"H\",\"hB\"],\"en-001\":[\"h\",\"hb\",\"H\",\"hB\"],FJ:[\"h\",\"hb\",\"H\",\"hB\"],FM:[\"h\",\"hb\",\"H\",\"hB\"],GD:[\"h\",\"hb\",\"H\",\"hB\"],GM:[\"h\",\"hb\",\"H\",\"hB\"],GU:[\"h\",\"hb\",\"H\",\"hB\"],GY:[\"h\",\"hb\",\"H\",\"hB\"],JM:[\"h\",\"hb\",\"H\",\"hB\"],KI:[\"h\",\"hb\",\"H\",\"hB\"],KN:[\"h\",\"hb\",\"H\",\"hB\"],KY:[\"h\",\"hb\",\"H\",\"hB\"],LC:[\"h\",\"hb\",\"H\",\"hB\"],LR:[\"h\",\"hb\",\"H\",\"hB\"],MH:[\"h\",\"hb\",\"H\",\"hB\"],MP:[\"h\",\"hb\",\"H\",\"hB\"],MW:[\"h\",\"hb\",\"H\",\"hB\"],NZ:[\"h\",\"hb\",\"H\",\"hB\"],SB:[\"h\",\"hb\",\"H\",\"hB\"],SG:[\"h\",\"hb\",\"H\",\"hB\"],SL:[\"h\",\"hb\",\"H\",\"hB\"],SS:[\"h\",\"hb\",\"H\",\"hB\"],SZ:[\"h\",\"hb\",\"H\",\"hB\"],TC:[\"h\",\"hb\",\"H\",\"hB\"],TT:[\"h\",\"hb\",\"H\",\"hB\"],UM:[\"h\",\"hb\",\"H\",\"hB\"],US:[\"h\",\"hb\",\"H\",\"hB\"],VC:[\"h\",\"hb\",\"H\",\"hB\"],VG:[\"h\",\"hb\",\"H\",\"hB\"],VI:[\"h\",\"hb\",\"H\",\"hB\"],ZM:[\"h\",\"hb\",\"H\",\"hB\"],BO:[\"H\",\"hB\",\"h\",\"hb\"],EC:[\"H\",\"hB\",\"h\",\"hb\"],ES:[\"H\",\"hB\",\"h\",\"hb\"],GQ:[\"H\",\"hB\",\"h\",\"hb\"],PE:[\"H\",\"hB\",\"h\",\"hb\"],AE:[\"h\",\"hB\",\"hb\",\"H\"],\"ar-001\":[\"h\",\"hB\",\"hb\",\"H\"],BH:[\"h\",\"hB\",\"hb\",\"H\"],DZ:[\"h\",\"hB\",\"hb\",\"H\"],EG:[\"h\",\"hB\",\"hb\",\"H\"],EH:[\"h\",\"hB\",\"hb\",\"H\"],HK:[\"h\",\"hB\",\"hb\",\"H\"],IQ:[\"h\",\"hB\",\"hb\",\"H\"],JO:[\"h\",\"hB\",\"hb\",\"H\"],KW:[\"h\",\"hB\",\"hb\",\"H\"],LB:[\"h\",\"hB\",\"hb\",\"H\"],LY:[\"h\",\"hB\",\"hb\",\"H\"],MO:[\"h\",\"hB\",\"hb\",\"H\"],MR:[\"h\",\"hB\",\"hb\",\"H\"],OM:[\"h\",\"hB\",\"hb\",\"H\"],PH:[\"h\",\"hB\",\"hb\",\"H\"],PS:[\"h\",\"hB\",\"hb\",\"H\"],QA:[\"h\",\"hB\",\"hb\",\"H\"],SA:[\"h\",\"hB\",\"hb\",\"H\"],SD:[\"h\",\"hB\",\"hb\",\"H\"],SY:[\"h\",\"hB\",\"hb\",\"H\"],TN:[\"h\",\"hB\",\"hb\",\"H\"],YE:[\"h\",\"hB\",\"hb\",\"H\"],AF:[\"H\",\"hb\",\"hB\",\"h\"],LA:[\"H\",\"hb\",\"hB\",\"h\"],CN:[\"H\",\"hB\",\"hb\",\"h\"],LV:[\"H\",\"hB\",\"hb\",\"h\"],TL:[\"H\",\"hB\",\"hb\",\"h\"],\"zu-ZA\":[\"H\",\"hB\",\"hb\",\"h\"],CD:[\"hB\",\"H\"],IR:[\"hB\",\"H\"],\"hi-IN\":[\"hB\",\"h\",\"H\"],\"kn-IN\":[\"hB\",\"h\",\"H\"],\"ml-IN\":[\"hB\",\"h\",\"H\"],\"te-IN\":[\"hB\",\"h\",\"H\"],KH:[\"hB\",\"h\",\"H\",\"hb\"],\"ta-IN\":[\"hB\",\"h\",\"hb\",\"H\"],BN:[\"hb\",\"hB\",\"h\",\"H\"],MY:[\"hb\",\"hB\",\"h\",\"H\"],ET:[\"hB\",\"hb\",\"h\",\"H\"],\"gu-IN\":[\"hB\",\"hb\",\"h\",\"H\"],\"mr-IN\":[\"hB\",\"hb\",\"h\",\"H\"],\"pa-IN\":[\"hB\",\"hb\",\"h\",\"H\"],TW:[\"hB\",\"hb\",\"h\",\"H\"],KE:[\"hB\",\"hb\",\"H\",\"h\"],MM:[\"hB\",\"hb\",\"H\",\"h\"],TZ:[\"hB\",\"hb\",\"H\",\"h\"],UG:[\"hB\",\"hb\",\"H\",\"h\"]};function au(e){var t=e.hourCycle;if(void 0===t&&e.hourCycles&&e.hourCycles.length&&(t=e.hourCycles[0]),t)switch(t){case\"h24\":return\"k\";case\"h23\":return\"H\";case\"h12\":return\"h\";case\"h11\":return\"K\";default:throw new Error(\"Invalid hourCycle\")}var o,r=e.language;return\"root\"!==r&&(o=e.maximize().region),(nu[o||\"\"]||nu[r||\"\"]||nu[\"\".concat(r,\"-001\")]||nu[\"001\"])[0]}var su=new RegExp(\"^\".concat(Zp.source,\"*\")),lu=new RegExp(\"\".concat(Zp.source,\"*$\"));function du(e,t){return{start:e,end:t}}var cu=!!String.prototype.startsWith,pu=!!String.fromCodePoint,uu=!!Object.fromEntries,mu=!!String.prototype.codePointAt,hu=!!String.prototype.trimStart,gu=!!String.prototype.trimEnd,_u=!!Number.isSafeInteger?Number.isSafeInteger:function(e){return\"number\"==typeof e&&isFinite(e)&&Math.floor(e)===e&&Math.abs(e)<=9007199254740991},fu=!0;try{fu=\"a\"===(null===(iu=ku(\"([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)\",\"yu\").exec(\"a\"))||void 0===iu?void 0:iu[0])}catch(U){fu=!1}var yu,bu=cu?function(e,t,o){return e.startsWith(t,o)}:function(e,t,o){return e.slice(o,o+t.length)===t},vu=pu?String.fromCodePoint:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];for(var o,r=\"\",i=e.length,n=0;i>n;){if((o=e[n++])>1114111)throw RangeError(o+\" is not a valid code point\");r+=o<65536?String.fromCharCode(o):String.fromCharCode(55296+((o-=65536)>>10),o%1024+56320)}return r},Cu=uu?Object.fromEntries:function(e){for(var t={},o=0,r=e;o<r.length;o++){var i=r[o],n=i[0],a=i[1];t[n]=a}return t},Au=mu?function(e,t){return e.codePointAt(t)}:function(e,t){var o=e.length;if(!(t<0||t>=o)){var r,i=e.charCodeAt(t);return i<55296||i>56319||t+1===o||(r=e.charCodeAt(t+1))<56320||r>57343?i:r-56320+(i-55296<<10)+65536}},wu=hu?function(e){return e.trimStart()}:function(e){return e.replace(su,\"\")},Hu=gu?function(e){return e.trimEnd()}:function(e){return e.replace(lu,\"\")};function ku(e,t){return new RegExp(e,t)}if(fu){var Lu=ku(\"([^\\\\p{White_Space}\\\\p{Pattern_Syntax}]*)\",\"yu\");yu=function(e,t){var o;return Lu.lastIndex=t,null!==(o=Lu.exec(e)[1])&&void 0!==o?o:\"\"}}else yu=function(e,t){for(var o=[];;){var r=Au(e,t);if(void 0===r||Mu(r)||Eu(r))break;o.push(r),t+=r>=65536?2:1}return vu.apply(void 0,o)};var Su=function(){function e(e,t){void 0===t&&(t={}),this.message=e,this.position={offset:0,line:1,column:1},this.ignoreTag=!!t.ignoreTag,this.locale=t.locale,this.requiresOtherClause=!!t.requiresOtherClause,this.shouldParseSkeletons=!!t.shouldParseSkeletons}return e.prototype.parse=function(){if(0!==this.offset())throw Error(\"parser can only be used once\");return this.parseMessage(0,\"\",!1)},e.prototype.parseMessage=function(e,t,o){for(var r=[];!this.isEOF();){var i=this.char();if(123===i){if((n=this.parseArgument(e,o)).err)return n;r.push(n.val)}else{if(125===i&&e>0)break;if(35!==i||\"plural\"!==t&&\"selectordinal\"!==t){if(60===i&&!this.ignoreTag&&47===this.peek()){if(o)break;return this.error(Mp.UNMATCHED_CLOSING_TAG,du(this.clonePosition(),this.clonePosition()))}if(60===i&&!this.ignoreTag&&xu(this.peek()||0)){if((n=this.parseTag(e,t)).err)return n;r.push(n.val)}else{var n;if((n=this.parseLiteral(e,t)).err)return n;r.push(n.val)}}else{var a=this.clonePosition();this.bump(),r.push({type:Ep.pound,location:du(a,this.clonePosition())})}}}return{val:r,err:null}},e.prototype.parseTag=function(e,t){var o=this.clonePosition();this.bump();var r=this.parseTagName();if(this.bumpSpace(),this.bumpIf(\"/>\"))return{val:{type:Ep.literal,value:\"<\".concat(r,\"/>\"),location:du(o,this.clonePosition())},err:null};if(this.bumpIf(\">\")){var i=this.parseMessage(e+1,t,!0);if(i.err)return i;var n=i.val,a=this.clonePosition();if(this.bumpIf(\"</\")){if(this.isEOF()||!xu(this.char()))return this.error(Mp.INVALID_TAG,du(a,this.clonePosition()));var s=this.clonePosition();return r!==this.parseTagName()?this.error(Mp.UNMATCHED_CLOSING_TAG,du(s,this.clonePosition())):(this.bumpSpace(),this.bumpIf(\">\")?{val:{type:Ep.tag,value:r,children:n,location:du(o,this.clonePosition())},err:null}:this.error(Mp.INVALID_TAG,du(a,this.clonePosition())))}return this.error(Mp.UNCLOSED_TAG,du(o,this.clonePosition()))}return this.error(Mp.INVALID_TAG,du(o,this.clonePosition()))},e.prototype.parseTagName=function(){var e=this.offset();for(this.bump();!this.isEOF()&&Vu(this.char());)this.bump();return this.message.slice(e,this.offset())},e.prototype.parseLiteral=function(e,t){for(var o=this.clonePosition(),r=\"\";;){var i=this.tryParseQuote(t);if(i)r+=i;else{var n=this.tryParseUnquoted(e,t);if(n)r+=n;else{var a=this.tryParseLeftAngleBracket();if(!a)break;r+=a}}}var s=du(o,this.clonePosition());return{val:{type:Ep.literal,value:r,location:s},err:null}},e.prototype.tryParseLeftAngleBracket=function(){return this.isEOF()||60!==this.char()||!this.ignoreTag&&(xu(e=this.peek()||0)||47===e)?null:(this.bump(),\"<\");var e},e.prototype.tryParseQuote=function(e){if(this.isEOF()||39!==this.char())return null;switch(this.peek()){case 39:return this.bump(),this.bump(),\"'\";case 123:case 60:case 62:case 125:break;case 35:if(\"plural\"===e||\"selectordinal\"===e)break;return null;default:return null}this.bump();var t=[this.char()];for(this.bump();!this.isEOF();){var o=this.char();if(39===o){if(39!==this.peek()){this.bump();break}t.push(39),this.bump()}else t.push(o);this.bump()}return vu.apply(void 0,t)},e.prototype.tryParseUnquoted=function(e,t){if(this.isEOF())return null;var o=this.char();return 60===o||123===o||35===o&&(\"plural\"===t||\"selectordinal\"===t)||125===o&&e>0?null:(this.bump(),vu(o))},e.prototype.parseArgument=function(e,t){var o=this.clonePosition();if(this.bump(),this.bumpSpace(),this.isEOF())return this.error(Mp.EXPECT_ARGUMENT_CLOSING_BRACE,du(o,this.clonePosition()));if(125===this.char())return this.bump(),this.error(Mp.EMPTY_ARGUMENT,du(o,this.clonePosition()));var r=this.parseIdentifierIfPossible().value;if(!r)return this.error(Mp.MALFORMED_ARGUMENT,du(o,this.clonePosition()));if(this.bumpSpace(),this.isEOF())return this.error(Mp.EXPECT_ARGUMENT_CLOSING_BRACE,du(o,this.clonePosition()));switch(this.char()){case 125:return this.bump(),{val:{type:Ep.argument,value:r,location:du(o,this.clonePosition())},err:null};case 44:return this.bump(),this.bumpSpace(),this.isEOF()?this.error(Mp.EXPECT_ARGUMENT_CLOSING_BRACE,du(o,this.clonePosition())):this.parseArgumentOptions(e,t,r,o);default:return this.error(Mp.MALFORMED_ARGUMENT,du(o,this.clonePosition()))}},e.prototype.parseIdentifierIfPossible=function(){var e=this.clonePosition(),t=this.offset(),o=yu(this.message,t),r=t+o.length;return this.bumpTo(r),{value:o,location:du(e,this.clonePosition())}},e.prototype.parseArgumentOptions=function(e,t,o,r){var i,n=this.clonePosition(),a=this.parseIdentifierIfPossible().value,s=this.clonePosition();switch(a){case\"\":return this.error(Mp.EXPECT_ARGUMENT_TYPE,du(n,s));case\"number\":case\"date\":case\"time\":this.bumpSpace();var l=null;if(this.bumpIf(\",\")){this.bumpSpace();var d=this.clonePosition();if((f=this.parseSimpleArgStyleIfPossible()).err)return f;if(0===(m=Hu(f.val)).length)return this.error(Mp.EXPECT_ARGUMENT_STYLE,du(this.clonePosition(),this.clonePosition()));l={style:m,styleLocation:du(d,this.clonePosition())}}if((y=this.tryParseArgumentClose(r)).err)return y;var c=du(r,this.clonePosition());if(l&&bu(null==l?void 0:l.style,\"::\",0)){var p=wu(l.style.slice(2));if(\"number\"===a)return(f=this.parseNumberSkeletonFromString(p,l.styleLocation)).err?f:{val:{type:Ep.number,value:o,location:c,style:f.val},err:null};if(0===p.length)return this.error(Mp.EXPECT_DATE_TIME_SKELETON,c);var u=p;this.locale&&(u=function(e,t){for(var o=\"\",r=0;r<e.length;r++){var i=e.charAt(r);if(\"j\"===i){for(var n=0;r+1<e.length&&e.charAt(r+1)===i;)n++,r++;var a=1+(1&n),s=n<2?1:3+(n>>1),l=au(t);for(\"H\"!=l&&\"k\"!=l||(s=0);s-- >0;)o+=\"a\";for(;a-- >0;)o=l+o}else o+=\"J\"===i?\"H\":i}return o}(p,this.locale));var m={type:Pp.dateTime,pattern:u,location:l.styleLocation,parsedOptions:this.shouldParseSkeletons?Gp(u):{}};return{val:{type:\"date\"===a?Ep.date:Ep.time,value:o,location:c,style:m},err:null}}return{val:{type:\"number\"===a?Ep.number:\"date\"===a?Ep.date:Ep.time,value:o,location:c,style:null!==(i=null==l?void 0:l.style)&&void 0!==i?i:null},err:null};case\"plural\":case\"selectordinal\":case\"select\":var h=this.clonePosition();if(this.bumpSpace(),!this.bumpIf(\",\"))return this.error(Mp.EXPECT_SELECT_ARGUMENT_OPTIONS,du(h,Ap({},h)));this.bumpSpace();var g=this.parseIdentifierIfPossible(),_=0;if(\"select\"!==a&&\"offset\"===g.value){if(!this.bumpIf(\":\"))return this.error(Mp.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE,du(this.clonePosition(),this.clonePosition()));var f;if(this.bumpSpace(),(f=this.tryParseDecimalInteger(Mp.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE,Mp.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE)).err)return f;this.bumpSpace(),g=this.parseIdentifierIfPossible(),_=f.val}var y,b=this.tryParsePluralOrSelectOptions(e,a,t,g);if(b.err)return b;if((y=this.tryParseArgumentClose(r)).err)return y;var v=du(r,this.clonePosition());return\"select\"===a?{val:{type:Ep.select,value:o,options:Cu(b.val),location:v},err:null}:{val:{type:Ep.plural,value:o,options:Cu(b.val),offset:_,pluralType:\"plural\"===a?\"cardinal\":\"ordinal\",location:v},err:null};default:return this.error(Mp.INVALID_ARGUMENT_TYPE,du(n,s))}},e.prototype.tryParseArgumentClose=function(e){return this.isEOF()||125!==this.char()?this.error(Mp.EXPECT_ARGUMENT_CLOSING_BRACE,du(e,this.clonePosition())):(this.bump(),{val:!0,err:null})},e.prototype.parseSimpleArgStyleIfPossible=function(){for(var e=0,t=this.clonePosition();!this.isEOF();){switch(this.char()){case 39:this.bump();var o=this.clonePosition();if(!this.bumpUntil(\"'\"))return this.error(Mp.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE,du(o,this.clonePosition()));this.bump();break;case 123:e+=1,this.bump();break;case 125:if(!(e>0))return{val:this.message.slice(t.offset,this.offset()),err:null};e-=1;break;default:this.bump()}}return{val:this.message.slice(t.offset,this.offset()),err:null}},e.prototype.parseNumberSkeletonFromString=function(e,t){var o=[];try{o=function(e){if(0===e.length)throw new Error(\"Number skeleton cannot be empty\");for(var t=e.split(Kp).filter((function(e){return e.length>0})),o=[],r=0,i=t;r<i.length;r++){var n=i[r].split(\"/\");if(0===n.length)throw new Error(\"Invalid number skeleton\");for(var a=n[0],s=n.slice(1),l=0,d=s;l<d.length;l++)if(0===d[l].length)throw new Error(\"Invalid number skeleton\");o.push({stem:a,options:s})}return o}(e)}catch(e){return this.error(Mp.INVALID_NUMBER_SKELETON,t)}return{val:{type:Pp.number,tokens:o,location:t,parsedOptions:this.shouldParseSkeletons?ru(o):{}},err:null}},e.prototype.tryParsePluralOrSelectOptions=function(e,t,o,r){for(var i,n=!1,a=[],s=new Set,l=r.value,d=r.location;;){if(0===l.length){var c=this.clonePosition();if(\"select\"===t||!this.bumpIf(\"=\"))break;var p=this.tryParseDecimalInteger(Mp.EXPECT_PLURAL_ARGUMENT_SELECTOR,Mp.INVALID_PLURAL_ARGUMENT_SELECTOR);if(p.err)return p;d=du(c,this.clonePosition()),l=this.message.slice(c.offset,this.offset())}if(s.has(l))return this.error(\"select\"===t?Mp.DUPLICATE_SELECT_ARGUMENT_SELECTOR:Mp.DUPLICATE_PLURAL_ARGUMENT_SELECTOR,d);\"other\"===l&&(n=!0),this.bumpSpace();var u=this.clonePosition();if(!this.bumpIf(\"{\"))return this.error(\"select\"===t?Mp.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT:Mp.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT,du(this.clonePosition(),this.clonePosition()));var m=this.parseMessage(e+1,t,o);if(m.err)return m;var h=this.tryParseArgumentClose(u);if(h.err)return h;a.push([l,{value:m.val,location:du(u,this.clonePosition())}]),s.add(l),this.bumpSpace(),l=(i=this.parseIdentifierIfPossible()).value,d=i.location}return 0===a.length?this.error(\"select\"===t?Mp.EXPECT_SELECT_ARGUMENT_SELECTOR:Mp.EXPECT_PLURAL_ARGUMENT_SELECTOR,du(this.clonePosition(),this.clonePosition())):this.requiresOtherClause&&!n?this.error(Mp.MISSING_OTHER_CLAUSE,du(this.clonePosition(),this.clonePosition())):{val:a,err:null}},e.prototype.tryParseDecimalInteger=function(e,t){var o=1,r=this.clonePosition();this.bumpIf(\"+\")||this.bumpIf(\"-\")&&(o=-1);for(var i=!1,n=0;!this.isEOF();){var a=this.char();if(!(a>=48&&a<=57))break;i=!0,n=10*n+(a-48),this.bump()}var s=du(r,this.clonePosition());return i?_u(n*=o)?{val:n,err:null}:this.error(t,s):this.error(e,s)},e.prototype.offset=function(){return this.position.offset},e.prototype.isEOF=function(){return this.offset()===this.message.length},e.prototype.clonePosition=function(){return{offset:this.position.offset,line:this.position.line,column:this.position.column}},e.prototype.char=function(){var e=this.position.offset;if(e>=this.message.length)throw Error(\"out of bound\");var t=Au(this.message,e);if(void 0===t)throw Error(\"Offset \".concat(e,\" is at invalid UTF-16 code unit boundary\"));return t},e.prototype.error=function(e,t){return{val:null,err:{kind:e,message:this.message,location:t}}},e.prototype.bump=function(){if(!this.isEOF()){var e=this.char();10===e?(this.position.line+=1,this.position.column=1,this.position.offset+=1):(this.position.column+=1,this.position.offset+=e<65536?1:2)}},e.prototype.bumpIf=function(e){if(bu(this.message,e,this.offset())){for(var t=0;t<e.length;t++)this.bump();return!0}return!1},e.prototype.bumpUntil=function(e){var t=this.offset(),o=this.message.indexOf(e,t);return o>=0?(this.bumpTo(o),!0):(this.bumpTo(this.message.length),!1)},e.prototype.bumpTo=function(e){if(this.offset()>e)throw Error(\"targetOffset \".concat(e,\" must be greater than or equal to the current offset \").concat(this.offset()));for(e=Math.min(e,this.message.length);;){var t=this.offset();if(t===e)break;if(t>e)throw Error(\"targetOffset \".concat(e,\" is at invalid UTF-16 code unit boundary\"));if(this.bump(),this.isEOF())break}},e.prototype.bumpSpace=function(){for(;!this.isEOF()&&Mu(this.char());)this.bump()},e.prototype.peek=function(){if(this.isEOF())return null;var e=this.char(),t=this.offset(),o=this.message.charCodeAt(t+(e>=65536?2:1));return null!=o?o:null},e}();function xu(e){return e>=97&&e<=122||e>=65&&e<=90}function Vu(e){return 45===e||46===e||e>=48&&e<=57||95===e||e>=97&&e<=122||e>=65&&e<=90||183==e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=893||e>=895&&e<=8191||e>=8204&&e<=8205||e>=8255&&e<=8256||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function Mu(e){return e>=9&&e<=13||32===e||133===e||e>=8206&&e<=8207||8232===e||8233===e}function Eu(e){return e>=33&&e<=35||36===e||e>=37&&e<=39||40===e||41===e||42===e||43===e||44===e||45===e||e>=46&&e<=47||e>=58&&e<=59||e>=60&&e<=62||e>=63&&e<=64||91===e||92===e||93===e||94===e||96===e||123===e||124===e||125===e||126===e||161===e||e>=162&&e<=165||166===e||167===e||169===e||171===e||172===e||174===e||176===e||177===e||182===e||187===e||191===e||215===e||247===e||e>=8208&&e<=8213||e>=8214&&e<=8215||8216===e||8217===e||8218===e||e>=8219&&e<=8220||8221===e||8222===e||8223===e||e>=8224&&e<=8231||e>=8240&&e<=8248||8249===e||8250===e||e>=8251&&e<=8254||e>=8257&&e<=8259||8260===e||8261===e||8262===e||e>=8263&&e<=8273||8274===e||8275===e||e>=8277&&e<=8286||e>=8592&&e<=8596||e>=8597&&e<=8601||e>=8602&&e<=8603||e>=8604&&e<=8607||8608===e||e>=8609&&e<=8610||8611===e||e>=8612&&e<=8613||8614===e||e>=8615&&e<=8621||8622===e||e>=8623&&e<=8653||e>=8654&&e<=8655||e>=8656&&e<=8657||8658===e||8659===e||8660===e||e>=8661&&e<=8691||e>=8692&&e<=8959||e>=8960&&e<=8967||8968===e||8969===e||8970===e||8971===e||e>=8972&&e<=8991||e>=8992&&e<=8993||e>=8994&&e<=9e3||9001===e||9002===e||e>=9003&&e<=9083||9084===e||e>=9085&&e<=9114||e>=9115&&e<=9139||e>=9140&&e<=9179||e>=9180&&e<=9185||e>=9186&&e<=9254||e>=9255&&e<=9279||e>=9280&&e<=9290||e>=9291&&e<=9311||e>=9472&&e<=9654||9655===e||e>=9656&&e<=9664||9665===e||e>=9666&&e<=9719||e>=9720&&e<=9727||e>=9728&&e<=9838||9839===e||e>=9840&&e<=10087||10088===e||10089===e||10090===e||10091===e||10092===e||10093===e||10094===e||10095===e||10096===e||10097===e||10098===e||10099===e||10100===e||10101===e||e>=10132&&e<=10175||e>=10176&&e<=10180||10181===e||10182===e||e>=10183&&e<=10213||10214===e||10215===e||10216===e||10217===e||10218===e||10219===e||10220===e||10221===e||10222===e||10223===e||e>=10224&&e<=10239||e>=10240&&e<=10495||e>=10496&&e<=10626||10627===e||10628===e||10629===e||10630===e||10631===e||10632===e||10633===e||10634===e||10635===e||10636===e||10637===e||10638===e||10639===e||10640===e||10641===e||10642===e||10643===e||10644===e||10645===e||10646===e||10647===e||10648===e||e>=10649&&e<=10711||10712===e||10713===e||10714===e||10715===e||e>=10716&&e<=10747||10748===e||10749===e||e>=10750&&e<=11007||e>=11008&&e<=11055||e>=11056&&e<=11076||e>=11077&&e<=11078||e>=11079&&e<=11084||e>=11085&&e<=11123||e>=11124&&e<=11125||e>=11126&&e<=11157||11158===e||e>=11159&&e<=11263||e>=11776&&e<=11777||11778===e||11779===e||11780===e||11781===e||e>=11782&&e<=11784||11785===e||11786===e||11787===e||11788===e||11789===e||e>=11790&&e<=11798||11799===e||e>=11800&&e<=11801||11802===e||11803===e||11804===e||11805===e||e>=11806&&e<=11807||11808===e||11809===e||11810===e||11811===e||11812===e||11813===e||11814===e||11815===e||11816===e||11817===e||e>=11818&&e<=11822||11823===e||e>=11824&&e<=11833||e>=11834&&e<=11835||e>=11836&&e<=11839||11840===e||11841===e||11842===e||e>=11843&&e<=11855||e>=11856&&e<=11857||11858===e||e>=11859&&e<=11903||e>=12289&&e<=12291||12296===e||12297===e||12298===e||12299===e||12300===e||12301===e||12302===e||12303===e||12304===e||12305===e||e>=12306&&e<=12307||12308===e||12309===e||12310===e||12311===e||12312===e||12313===e||12314===e||12315===e||12316===e||12317===e||e>=12318&&e<=12319||12320===e||12336===e||64830===e||64831===e||e>=65093&&e<=65094}function Pu(e){e.forEach((function(e){if(delete e.location,Dp(e)||jp(e))for(var t in e.options)delete e.options[t].location,Pu(e.options[t].value);else Ip(e)&&Fp(e.style)||(Op(e)||Rp(e))&&Up(e.style)?delete e.style.location:$p(e)&&Pu(e.children)}))}function Tu(e,t){void 0===t&&(t={}),t=Ap({shouldParseSkeletons:!0,requiresOtherClause:!0},t);var o=new Su(e,t).parse();if(o.err){var r=SyntaxError(Mp[o.err.kind]);throw r.location=o.err.location,r.originalMessage=o.err.message,r}return(null==t?void 0:t.captureLocation)||Pu(o.val),o.val}function zu(e,t){var o=t&&t.cache?t.cache:$u,r=t&&t.serializer?t.serializer:Du;return(t&&t.strategy?t.strategy:Ru)(e,{cache:o,serializer:r})}function Nu(e,t,o,r){var i,n=null==(i=r)||\"number\"==typeof i||\"boolean\"==typeof i?r:o(r),a=t.get(n);return void 0===a&&(a=e.call(this,r),t.set(n,a)),a}function Iu(e,t,o){var r=Array.prototype.slice.call(arguments,3),i=o(r),n=t.get(i);return void 0===n&&(n=e.apply(this,r),t.set(i,n)),n}function Ou(e,t,o,r,i){return o.bind(t,e,r,i)}function Ru(e,t){return Ou(e,this,1===e.length?Nu:Iu,t.cache.create(),t.serializer)}var Du=function(){return JSON.stringify(arguments)};function ju(){this.cache=Object.create(null)}ju.prototype.get=function(e){return this.cache[e]},ju.prototype.set=function(e,t){this.cache[e]=t};var Bu,$u={create:function(){return new ju}},Fu={variadic:function(e,t){return Ou(e,this,Iu,t.cache.create(),t.serializer)},monadic:function(e,t){return Ou(e,this,Nu,t.cache.create(),t.serializer)}};!function(e){e.MISSING_VALUE=\"MISSING_VALUE\",e.INVALID_VALUE=\"INVALID_VALUE\",e.MISSING_INTL_API=\"MISSING_INTL_API\"}(Bu||(Bu={}));var Uu,Zu=function(e){function t(t,o,r){var i=e.call(this,t)||this;return i.code=o,i.originalMessage=r,i}return Cp(t,e),t.prototype.toString=function(){return\"[formatjs Error: \".concat(this.code,\"] \").concat(this.message)},t}(Error),qu=function(e){function t(t,o,r,i){return e.call(this,'Invalid values for \"'.concat(t,'\": \"').concat(o,'\". Options are \"').concat(Object.keys(r).join('\", \"'),'\"'),Bu.INVALID_VALUE,i)||this}return Cp(t,e),t}(Zu),Gu=function(e){function t(t,o,r){return e.call(this,'Value for \"'.concat(t,'\" must be of type ').concat(o),Bu.INVALID_VALUE,r)||this}return Cp(t,e),t}(Zu),Ku=function(e){function t(t,o){return e.call(this,'The intl string context variable \"'.concat(t,'\" was not provided to the string \"').concat(o,'\"'),Bu.MISSING_VALUE,o)||this}return Cp(t,e),t}(Zu);function Yu(e){return\"function\"==typeof e}function Wu(e,t,o,r,i,n,a){if(1===e.length&&zp(e[0]))return[{type:Uu.literal,value:e[0].value}];for(var s=[],l=0,d=e;l<d.length;l++){var c=d[l];if(zp(c))s.push({type:Uu.literal,value:c.value});else if(Bp(c))\"number\"==typeof n&&s.push({type:Uu.literal,value:o.getNumberFormat(t).format(n)});else{var p=c.value;if(!i||!(p in i))throw new Ku(p,a);var u=i[p];if(Np(c))u&&\"string\"!=typeof u&&\"number\"!=typeof u||(u=\"string\"==typeof u||\"number\"==typeof u?String(u):\"\"),s.push({type:\"string\"==typeof u?Uu.literal:Uu.object,value:u});else if(Op(c)){var m=\"string\"==typeof c.style?r.date[c.style]:Up(c.style)?c.style.parsedOptions:void 0;s.push({type:Uu.literal,value:o.getDateTimeFormat(t,m).format(u)})}else if(Rp(c)){m=\"string\"==typeof c.style?r.time[c.style]:Up(c.style)?c.style.parsedOptions:r.time.medium;s.push({type:Uu.literal,value:o.getDateTimeFormat(t,m).format(u)})}else if(Ip(c)){(m=\"string\"==typeof c.style?r.number[c.style]:Fp(c.style)?c.style.parsedOptions:void 0)&&m.scale&&(u*=m.scale||1),s.push({type:Uu.literal,value:o.getNumberFormat(t,m).format(u)})}else{if($p(c)){var h=c.children,g=c.value,_=i[g];if(!Yu(_))throw new Gu(g,\"function\",a);var f=_(Wu(h,t,o,r,i,n).map((function(e){return e.value})));Array.isArray(f)||(f=[f]),s.push.apply(s,f.map((function(e){return{type:\"string\"==typeof e?Uu.literal:Uu.object,value:e}})))}if(Dp(c)){if(!(y=c.options[u]||c.options.other))throw new qu(c.value,u,Object.keys(c.options),a);s.push.apply(s,Wu(y.value,t,o,r,i))}else if(jp(c)){var y;if(!(y=c.options[\"=\".concat(u)])){if(!Intl.PluralRules)throw new Zu('Intl.PluralRules is not available in this environment.\\nTry polyfilling it using \"@formatjs/intl-pluralrules\"\\n',Bu.MISSING_INTL_API,a);var b=o.getPluralRules(t,{type:c.pluralType}).select(u-(c.offset||0));y=c.options[b]||c.options.other}if(!y)throw new qu(c.value,u,Object.keys(c.options),a);s.push.apply(s,Wu(y.value,t,o,r,i,u-(c.offset||0)))}else;}}}return function(e){return e.length<2?e:e.reduce((function(e,t){var o=e[e.length-1];return o&&o.type===Uu.literal&&t.type===Uu.literal?o.value+=t.value:e.push(t),e}),[])}(s)}function Xu(e,t){return t?Object.keys(e).reduce((function(o,r){var i,n;return o[r]=(i=e[r],(n=t[r])?Ap(Ap(Ap({},i||{}),n||{}),Object.keys(i).reduce((function(e,t){return e[t]=Ap(Ap({},i[t]),n[t]||{}),e}),{})):i),o}),Ap({},e)):e}function Ju(e){return{create:function(){return{get:function(t){return e[t]},set:function(t,o){e[t]=o}}}}}!function(e){e[e.literal=0]=\"literal\",e[e.object=1]=\"object\"}(Uu||(Uu={}));var Qu=function(){function e(t,o,r,i){var n,a=this;if(void 0===o&&(o=e.defaultLocale),this.formatterCache={number:{},dateTime:{},pluralRules:{}},this.format=function(e){var t=a.formatToParts(e);if(1===t.length)return t[0].value;var o=t.reduce((function(e,t){return e.length&&t.type===Uu.literal&&\"string\"==typeof e[e.length-1]?e[e.length-1]+=t.value:e.push(t.value),e}),[]);return o.length<=1?o[0]||\"\":o},this.formatToParts=function(e){return Wu(a.ast,a.locales,a.formatters,a.formats,e,void 0,a.message)},this.resolvedOptions=function(){return{locale:a.resolvedLocale.toString()}},this.getAst=function(){return a.ast},this.locales=o,this.resolvedLocale=e.resolveLocale(o),\"string\"==typeof t){if(this.message=t,!e.__parse)throw new TypeError(\"IntlMessageFormat.__parse must be set to process `message` of type `string`\");this.ast=e.__parse(t,{ignoreTag:null==i?void 0:i.ignoreTag,locale:this.resolvedLocale})}else this.ast=t;if(!Array.isArray(this.ast))throw new TypeError(\"A message must be provided as a String or AST.\");this.formats=Xu(e.formats,r),this.formatters=i&&i.formatters||(void 0===(n=this.formatterCache)&&(n={number:{},dateTime:{},pluralRules:{}}),{getNumberFormat:zu((function(){for(var e,t=[],o=0;o<arguments.length;o++)t[o]=arguments[o];return new((e=Intl.NumberFormat).bind.apply(e,Sp([void 0],t,!1)))}),{cache:Ju(n.number),strategy:Fu.variadic}),getDateTimeFormat:zu((function(){for(var e,t=[],o=0;o<arguments.length;o++)t[o]=arguments[o];return new((e=Intl.DateTimeFormat).bind.apply(e,Sp([void 0],t,!1)))}),{cache:Ju(n.dateTime),strategy:Fu.variadic}),getPluralRules:zu((function(){for(var e,t=[],o=0;o<arguments.length;o++)t[o]=arguments[o];return new((e=Intl.PluralRules).bind.apply(e,Sp([void 0],t,!1)))}),{cache:Ju(n.pluralRules),strategy:Fu.variadic})})}return Object.defineProperty(e,\"defaultLocale\",{get:function(){return e.memoizedDefaultLocale||(e.memoizedDefaultLocale=(new Intl.NumberFormat).resolvedOptions().locale),e.memoizedDefaultLocale},enumerable:!1,configurable:!0}),e.memoizedDefaultLocale=null,e.resolveLocale=function(e){var t=Intl.NumberFormat.supportedLocalesOf(e);return t.length>0?new Intl.Locale(t[0]):new Intl.Locale(\"string\"==typeof e?e:e[0])},e.__parse=Tu,e.formats={number:{integer:{maximumFractionDigits:0},currency:{style:\"currency\"},percent:{style:\"percent\"}},date:{short:{month:\"numeric\",day:\"numeric\",year:\"2-digit\"},medium:{month:\"short\",day:\"numeric\",year:\"numeric\"},long:{month:\"long\",day:\"numeric\",year:\"numeric\"},full:{weekday:\"long\",month:\"long\",day:\"numeric\",year:\"numeric\"}},time:{short:{hour:\"numeric\",minute:\"numeric\"},medium:{hour:\"numeric\",minute:\"numeric\",second:\"numeric\"},long:{hour:\"numeric\",minute:\"numeric\",second:\"numeric\",timeZoneName:\"short\"},full:{hour:\"numeric\",minute:\"numeric\",second:\"numeric\",timeZoneName:\"short\"}}},e}(),em=Qu;class tm{constructor(t){e(this,\"prefix\",void 0),this.prefix=t?`[HACS.${t}]`:\"[HACS]\"}info(e){this.log(e)}log(e){console.log(this.prefix,e)}debug(e){console.debug(this.prefix,e)}warn(e){console.warn(this.prefix,e)}error(e){console.error(this.prefix,e)}}const om={bg_BG:{\"common.add\":\"добавете\",\"common.cancel\":\"Отказ\",\"common.ignore\":\"Игнорирайте\",\"common.integration\":\"Интеграция\",\"common.integration_plural\":\"Интеграции\",\"common.lovelace\":\"Lovelace\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.reload\":\"Презареждане\",\"common.remove\":\"Премахване\",\"common.repositories\":\"Хранилища\",\"common.repository\":\"Хранилище\",\"common.show\":\"Покажи\",\"common.theme\":\"Тема\",\"common.update\":\"Актуализация\",\"common.updates\":\"Актуализации\",\"confirm.home_assistant_version_not_correct\":'Изпълнявате версия \"{haversion}\" на Home Assistant, но това хранилище изисква да бъде инсталирана минимална версия \"{minversion}\".',\"dialog.configured.confirm\":\"Отидете на интеграции\",\"dialog.configured.message\":\"Интеграцията {name} е конфигурирана, трябва да изтриете конфигурацията за нея, преди да я премахнете от HACS\",\"dialog.configured.title\":\"Интеграцията е конфигурирана\",\"dialog.reload.confirm\":\"Искате ли да направите това сега?\",\"dialog.reload.description\":\"Трябва да изчистите кеша на браузъра си, когато променяте ресурсите на Lovelace.\",\"dialog_about.frontend_version\":\"Версия на интерфейса\",\"dialog_about.integration_version\":\"Версия на интеграцията\",\"dialog_about.useful_links\":\"Полезни връзки\",\"dialog_add_repo.limit\":\"Само първите 100 хранилища са показани, използвайте търсенето, за да филтрирате това, от което се нуждаете\",\"dialog_add_repo.no_match\":\"Не са намерени хранилища, съответстващи на вашия филтър\",\"dialog_add_repo.sort_by\":\"Сортиране по\",\"dialog_add_repo.title\":\"Добавяне на хранилище\",\"dialog_custom_repositories.category\":\"Категория\",\"dialog_custom_repositories.no_category\":\"Липсваща категория\",\"dialog_custom_repositories.no_repository\":\"Липсващо хранилище\",\"dialog_custom_repositories.title\":\"Потребителски хранилища\",\"dialog_custom_repositories.url_placeholder\":\"Добавете URL адрес на потребителското хранилище\",\"dialog_download.lovelace_instruction\":\"След като изтеглянето завърши, тъй като не използвате Lovelace в режим на съхранение, трябва ръчно да добавите ресурса със следните настройки:\",\"dialog_info.author\":\"Автор\",\"dialog_info.downloads\":\"Изтегляния\",\"dialog_info.loading\":\"Зарежда се информация ...\",\"dialog_info.no_info\":\"Разработчикът не е предоставил повече информация за това хранилище\",\"dialog_info.open_issues\":\"Отворени въпроси\",\"dialog_info.open_repo\":\"Отворете хранилището\",\"dialog_info.stars\":\"Звезди\",\"dialog_info.version_installed\":\"Изтеглена Версия\",\"dialog_removed.link\":\"Външна връзка за повече информация\",\"dialog_removed.name\":\"Име на хранилището\",\"dialog_removed.reason\":\"Причина за премахване\",\"dialog_removed.type\":\"Тип на премахване\",\"dialog_update.available_version\":\"Налична версия\",\"dialog_update.changelog\":\"Дневник на промените\",\"dialog_update.downloaded_version\":\"Изтеглена версия\",\"dialog_update.message\":\"Налична е нова версия на {name}\",\"dialog_update.no_info\":\"Авторът не е предоставил никаква информация за това издание\",\"dialog_update.releasenotes\":\"Бележки по изданието за {release}\",\"dialog_update.title\":\"Чакаща актуализация\",\"entry.information\":\"Информация\",\"entry.intro\":\"Актуализации и важни съобщения ще се показват тук, ако има такива\",\"entry.messages.disabled.content\":\"Проверете вашия лог файл за повече подробности\",\"entry.messages.disabled.removed.description\":\"HACS е премахнат, рестартирайте Home Assistant.\",\"entry.messages.disabled.title\":\"HACS е деактивиран\",\"entry.messages.has_pending_tasks.content\":\"Някои хранилища може да не се показват, докато този процес не приключи\",\"entry.messages.has_pending_tasks.title\":\"Предстоящи задачи на заден план\",\"entry.messages.removed_repository\":\"Премахнато хранилище ''{repository}''\",\"entry.messages.resources.content\":\"Имате {number} елементи на Lovelace, които не са заредени правилно в Lovelace.\",\"entry.messages.resources.title\":\"Не е зареден в Lovelace\",\"entry.messages.restart.content\":\"Имате {number} {pluralWording} който изисква рестартиране на Home Assistant, можете да го направите от раздела „Контроли на сървъра“ в конфигурационната част на потребителския интерфейс на Home Assistant.\",\"entry.messages.restart.title\":\"Изчакващ рестартиране\",\"entry.messages.setup.content\":\"HACS се настройва, през това време някои данни може да липсват или да са неправилни\",\"entry.messages.setup.title\":\"HACS се настройва\",\"entry.messages.startup.content\":\"HACS се стартира, през това време някои данни може да липсват или да са неправилни\",\"entry.messages.startup.title\":\"HACS стартира\",\"entry.messages.waiting.content\":\"HACS изчаква Home Assistant да завърши стартирането, преди да започне със своите стартови задачи\",\"entry.messages.waiting.title\":\"HACS изчаква\",\"entry.messages.wrong_frontend_installed.title\":\"Неочаквана версия на интерфейса\",\"entry.messages.wrong_frontend_loaded.content\":\"Изпълнява се версия {running} на HACS, но се очакваше версия {expected} , препоръчва се да изчистите кеша на браузъра си.\",\"entry.messages.wrong_frontend_loaded.title\":\"Неочаквана версия на интерфейса\",\"entry.pending_updates\":\"Чакащи актуализации\",\"menu.about\":\"Относно HACS\",\"menu.clear\":\"Изчистване на всичко ново\",\"menu.custom_repositories\":\"Потребителски хранилища\",\"menu.dismiss\":\"Отхвърляне на всички нови хранилища\",\"menu.documentation\":\"Документация\",\"menu.open_issue\":\"Задай въпрос\",\"menu.reload\":\"Презареждане на прозореца\",\"options.abort.not_setup\":\"HACS не е настроен.\",\"options.step.user.data.appdaemon\":\"Активирайте откриването и проследяването на AppDaemon приложения\",\"options.step.user.data.country\":\"Филтър с код на държавата.\",\"options.step.user.data.debug\":\"Активиране на отстраняване на грешки.\",\"options.step.user.data.experimental\":\"Активиране на експериментални функции\",\"options.step.user.data.netdaemon\":\"Активирайте откриването и проследяването на NetDaemon приложения\",\"options.step.user.data.not_in_use\":\"Не се използва с YAML\",\"options.step.user.data.release_limit\":\"Брой издания за показване.\",\"options.step.user.data.sidepanel_icon\":\"Икона на страничния панел\",\"options.step.user.data.sidepanel_title\":\"Заглавие на страничния панел\",\"repository_card.dismiss\":\"отхвърляне\",\"repository_card.information\":\"Информация\",\"repository_card.new_repository\":\"Ново хранилище\",\"repository_card.not_loaded\":\"Не е зареден\",\"repository_card.open_issue\":\"Задай въпрос\",\"repository_card.open_source\":\"Отворен код\",\"repository_card.pending_restart\":\"Изчакващ рестартиране\",\"repository_card.pending_update\":\"Чакаща актуализация\",\"repository_card.report\":\"Докладвайте за премахване\",\"repository_card.update_information\":\"Информация за актуализиране\",\"search.placeholder\":\"Потърсете хранилище\",\"sections.about.description\":\"Показване на информация за HACS\",\"sections.about.title\":\"За\",\"sections.addon.description\":\"Няма добавки в HACS, но можете да натиснете тук, за да стигнете до супервайзъра.\",\"sections.addon.title\":\"Добавки\",\"sections.automation.description\":\"Тук ще намерите python_scripts, AppDaemon приложения и NetDaemon приложения\",\"sections.automation.title\":\"Автоматизация\",\"sections.frontend.description\":\"Това е мястото, където можете да намерите теми, потребителски карти и други елементи за Lovelace\",\"sections.frontend.title\":\"Интерфейс\",\"sections.integrations.description\":\"Тук можете да намерите потребителски интеграции (custom_components)\",\"sections.integrations.title\":\"Интеграции\",\"sections.pending_repository_upgrade\":\"Изпълнявате версия {installed} , достъпна е версия {available}\",\"store.no_repositories\":\"Няма хранилища\",\"store.no_repositories_desc1\":\"Изглежда, че все още нямате инсталирани хранилища в този раздел.\",\"store.no_repositories_desc2\":\"Кликнете върху + в долния ъгъл, за да добавите своето първо хранилище!\",\"store.no_repositories_found_desc1\":'В този раздел не са намерени инсталирани хранилища, съответстващи на \"{searchInput}\".',\"store.no_repositories_found_desc2\":\"Опитайте да търсите нещо друго!\"},cs:{\"common.add\":\"přidat\",\"common.cancel\":\"Zrušit\",\"common.close\":\"Zavřít\",\"common.download\":\"Stáhnout\",\"common.ignore\":\"Ignorovat\",\"common.integration\":\"Integrace\",\"common.integration_plural\":\"Integrace\",\"common.lovelace\":\"Lovelace\",\"common.navigate\":\"přejít\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.python_script\":\"Python skript\",\"common.reload\":\"Znovu načíst\",\"common.remove\":\"Odstranit\",\"common.repositories\":\"Repozitáře\",\"common.repository\":\"Repozitář\",\"common.theme\":\"Motiv\",\"common.update\":\"Aktualizovat\",\"common.yes\":\"Ano\",\"confirm.home_assistant_version_not_correct\":'Používáte Home Assistant ve verzi \"{haversion}\", ale tento repozitář vyžaduje instalaci minimálně verzi \"{minversion}\".',\"dialog.configured.confirm\":\"Přejít na integrace\",\"dialog.configured.title\":\"Integrace je nakonfigurována\",\"dialog.reload.confirm\":\"Chcete to udělat hned teď?\",\"dialog.reload.description\":\"Při změně zdrojů Lovelace musíte vymazat mezipaměť prohlížeče.\",\"dialog.remove.message\":\"Opravdu chcete odstranit {name} ?\",\"dialog_about.downloaded_repositories\":\"Stažená úložiště\",\"dialog_about.frontend_version\":\"Verze rozhraní\",\"dialog_about.integration_version\":\"Verze integrace\",\"dialog_about.useful_links\":\"Užitečné odkazy\",\"dialog_add_repo.limit\":\"Zobrazeno je pouze prvních 100 repozitářů, pomocí vyhledávání můžete filtrovat, co potřebujete\",\"dialog_add_repo.no_match\":\"Vašemu filtru neodpovídají žádné repozitáře\",\"dialog_add_repo.sort_by\":\"Řadit dle\",\"dialog_add_repo.title\":\"Přidat repozitář\",\"dialog_custom_repositories.category\":\"Kategorie\",\"dialog_custom_repositories.no_category\":\"Chybí kategorie\",\"dialog_custom_repositories.no_repository\":\"Chybí repozitář\",\"dialog_custom_repositories.title\":\"Vlastní repozitáře\",\"dialog_custom_repositories.url_placeholder\":\"Přidat URL adresu vlastního repozitáře\",\"dialog_download.select_version\":\"Zvolte verzi\",\"dialog_download.show_beta\":\"Zobrazit beta verze\",\"dialog_info.author\":\"Autor\",\"dialog_info.downloads\":\"Staženo\",\"dialog_info.loading\":\"Načítání informací...\",\"dialog_info.no_info\":\"Vývojář neposkytl pro tento repozitář žádné další informace\",\"dialog_info.open_issues\":\"Nahlásit problémy\",\"dialog_info.open_repo\":\"Otevřít repozitář\",\"dialog_info.stars\":\"Hvězdičky\",\"dialog_info.version_installed\":\"Verze stažena\",\"dialog_removed.link\":\"Externí odkaz pro další informace\",\"dialog_removed.name\":\"Název repozitáře\",\"dialog_removed.reason\":\"Důvod odstranění\",\"dialog_removed.type\":\"Typ odstranění\",\"dialog_update.available_version\":\"Dostupná verze\",\"dialog_update.changelog\":\"Seznam změn\",\"dialog_update.downloaded_version\":\"Stažená verze\",\"dialog_update.message\":\"Je k dispozici nová verze {name}\",\"dialog_update.no_info\":\"Autor neposkytl žádné informace pro toto vydání\",\"dialog_update.releasenotes\":\"Poznámky k vydáno pro {release}\",\"dialog_update.title\":\"Aktualizace čeká na vyřízení\",\"entry.information\":\"Informace\",\"entry.intro\":\"Zde budou zobrazeny aktualizace a důležité zprávy\",\"entry.messages.disabled.constrains.description\":\"Vaše prostředí nepodporuje běh HACS, pro více detailů zkontrolujte logy.\",\"entry.messages.disabled.content\":\"Zkontrolujte protokol pro další podrobnosti\",\"entry.messages.disabled.invalid_token.title\":\"Neplatný token\",\"entry.messages.disabled.load_hacs.description\":\"Pro více detailů zkontrolujte logy\",\"entry.messages.disabled.load_hacs.title\":\"HACS nebylo možné načíst\",\"entry.messages.disabled.rate_limit.description\":\"API požadavky GitHub omezeny, toto hlášení by mělo zmizet během hodiny.\",\"entry.messages.disabled.rate_limit.title\":\"Omezení požadavků\",\"entry.messages.disabled.removed.description\":\"HACS odstraněn, restartuj Home Assistant.\",\"entry.messages.disabled.removed.title\":\"Odstraněno\",\"entry.messages.disabled.restore.title\":\"Obnova HACS selhala\",\"entry.messages.disabled.title\":\"HACS je deaktivován\",\"entry.messages.has_pending_tasks.content\":\"Některé repozitáře se nemusí zobrazit, dokud toto není dokončeno.\",\"entry.messages.has_pending_tasks.title\":\"Úkoly na pozadí čekají na vyřízení\",\"entry.messages.removed_repository\":\"Odebráno úložiště ''{repository}''\",\"entry.messages.resources.content\":\"Máte {number} prvků Lovelace, které nejsou v Lovelace správně načteny.\",\"entry.messages.resources.title\":\"Nenačteno v Lovelace\",\"entry.messages.restart.content\":'Máte {number} integrací, které vyžadují restart Home Assistant, můžete to udělat v sekci \"Ovládání serveru\" v nastavení Home Assistant.',\"entry.messages.restart.title\":\"Čeká se na restart\",\"entry.messages.setup.content\":\"HACS se nastavuje, během této doby mohou některé informace chybět nebo být nesprávné\",\"entry.messages.setup.title\":\"HACS se nastavuje\",\"entry.messages.startup.content\":\"HACS se spouští, během této doby mohou některé informace chybět nebo být nesprávné\",\"entry.messages.startup.title\":\"HACS se spouští\",\"entry.messages.waiting.content\":\"HACS čeká na dokončení spuštění Home Assistant, než bude moci spustit své úlohy\",\"entry.messages.waiting.title\":\"HACS čeká\",\"entry.messages.wrong_frontend_loaded.content\":\"Používáte verzi {running} rozhraní HACS, ale je očekávána verze {expected}, měli byste vymazat mezipaměť prohlížeče.\",\"entry.messages.wrong_frontend_loaded.title\":\"Neočekávaná verze rozhraní\",\"entry.pending_updates\":\"Čekající aktualizace\",\"menu.about\":\"O HACS\",\"menu.clear\":\"Vymazat vše nové\",\"menu.custom_repositories\":\"Vlastní repozitáře\",\"menu.dismiss\":\"Odmítnout všechny nové repozitáře\",\"menu.documentation\":\"Dokumentace\",\"menu.open_issue\":\"Nahlásit problém\",\"menu.reload\":\"Znovu načíst okno\",\"options.abort.not_setup\":\"HACS není nastaven.\",\"options.abort.release_limit_value\":\"Limit vydání musí být mezi 1 a 100\",\"options.step.user.data.appdaemon\":\"Povolit zjišťování a sledování aplikací AppDaemon\",\"options.step.user.data.country\":\"Filtrovat pomocí kódu země.\",\"options.step.user.data.debug\":\"Povolit ladění.\",\"options.step.user.data.experimental\":\"Povolit experimentální funkce\",\"options.step.user.data.netdaemon\":\"Povolit zjišťování a sledování aplikací NetDaemon\",\"options.step.user.data.not_in_use\":\"Nepoužívá se s YAML\",\"options.step.user.data.release_limit\":\"Počet vydání, která se mají zobrazit.\",\"options.step.user.data.sidepanel_icon\":\"Ikona postranního panelu\",\"options.step.user.data.sidepanel_title\":\"Název postranního panelu\",\"repository_card.dismiss\":\"zamítnout\",\"repository_card.information\":\"Informace\",\"repository_card.new_repository\":\"Nový repozitář\",\"repository_card.not_loaded\":\"Nenačteno\",\"repository_card.open_issue\":\"Nahlásit problém\",\"repository_card.open_source\":\"Otevřít zdrojový kód\",\"repository_card.pending_restart\":\"Čeká se na restart\",\"repository_card.pending_update\":\"Čeká na aktualizaci\",\"repository_card.redownload\":\"Stáhnout znovu\",\"repository_card.report\":\"Zpráva o odstranění\",\"repository_card.update_information\":\"Informace o aktualizaci\",\"search.placeholder\":\"Hledat repozitář\",\"sections.about.description\":\"Zobrazit informace o HACS\",\"sections.about.title\":\"O HACS\",\"sections.addon.description\":\"V HACS nejsou žádné doplňky, ale kliknutím sem se dostanete k Supervisoru\",\"sections.addon.title\":\"Doplňky\",\"sections.automation.description\":\"Zde najdete skripty v Pythonu, aplikace AppDaemon a aplikace NetDaemon\",\"sections.automation.title\":\"Automatizace\",\"sections.frontend.description\":\"Zde najdete motivy, vlastní karty a další prvky pro Lovelace\",\"sections.frontend.title\":\"Rozhraní\",\"sections.integrations.description\":\"Zde najdete vlastní integrace (custom_components)\",\"sections.integrations.title\":\"Integrace\",\"sections.pending_repository_upgrade\":\"Používáte verzi {installed}, verze {available} je k dispozici\",\"store.no_repositories\":\"Žádné repozitáře\",\"store.no_repositories_desc1\":\"Vypadá to, že v této sekci ještě nemáte nainstalované žádné repozitáře.\",\"store.no_repositories_desc2\":\"Kliknutím na + ve spodním rohu přidáte svůj první!\",\"store.no_repositories_found_desc1\":'V této části nebyly nalezeny žádné nainstalované repozitáře odpovídající \"{searchInput}\".',\"store.no_repositories_found_desc2\":\"Zkuste hledat něco jiného!\"},da:{\"common.add\":\"tilføj\",\"common.cancel\":\"Annuller\",\"common.close\":\"Luk\",\"common.download\":\"Download\",\"common.integration\":\"Integration\",\"common.integration_plural\":\"Integrationer\",\"common.lovelace\":\"Lovelace\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.reload\":\"Genindlæs\",\"common.remove\":\"Fjern\",\"common.repositories\":\"Repositories\",\"common.repository\":\"Repository\",\"common.theme\":\"Tema\",\"common.update\":\"Opdater\",\"confirm.home_assistant_version_not_correct\":\"Du kører Home Assistant version ''{haversion}'', men dette repository kræver som minimum version ''{minversion}''.\",\"dialog.configured.confirm\":\"Gå til integrationer\",\"dialog_about.frontend_version\":\"Frontend-version\",\"dialog_about.integration_version\":\"Integrationsversion\",\"dialog_about.useful_links\":\"Nyttige links\",\"dialog_add_repo.limit\":\"Kun de første 100 repositories vises. Brug søgningen til at filtrere, hvad du har brug for\",\"dialog_add_repo.no_match\":\"Der blev ikke fundet nogen repositories, der matcher dit filter\",\"dialog_add_repo.sort_by\":\"Sorter efter\",\"dialog_add_repo.title\":\"Tilføj repository\",\"dialog_custom_repositories.category\":\"Kategori\",\"dialog_custom_repositories.no_category\":\"Manglende kategori\",\"dialog_custom_repositories.no_repository\":\"Manglende repository\",\"dialog_custom_repositories.title\":\"Brugerdefinerede repositories\",\"dialog_custom_repositories.url_placeholder\":\"Tilføj brugerdefineret repository-webadresse\",\"dialog_info.author\":\"Udvikler\",\"dialog_info.downloads\":\"Downloads\",\"dialog_info.loading\":\"Indlæser oplysninger...\",\"dialog_info.no_info\":\"Udvikleren har ikke givet flere oplysninger om dette repository\",\"dialog_info.open_issues\":\"Åbn issues\",\"dialog_info.open_repo\":\"Åbn repository\",\"dialog_info.stars\":\"Stjerner\",\"dialog_update.available_version\":\"Tilgængelig version\",\"dialog_update.changelog\":\"Udgivelsesnoter\",\"dialog_update.releasenotes\":\"Udgivelsesnoter for {release}\",\"dialog_update.title\":\"Ventende opdatering\",\"entry.information\":\"Oplysninger\",\"entry.intro\":\"Opdateringer og vigtige meddelelser vises her, hvis der er nogen\",\"entry.messages.disabled.content\":\"Tjek din logfil for flere detaljer\",\"entry.messages.disabled.title\":\"HACS er deaktiveret\",\"entry.messages.has_pending_tasks.content\":\"Nogle repositories vises muligvis ikke, før dette er fuldført\",\"entry.messages.has_pending_tasks.title\":\"Baggrundsopgaver venter\",\"entry.messages.resources.content\":\"Du har {number} Lovelace-elementer, der ikke er indlæst korrekt i Lovelace.\",\"entry.messages.resources.title\":\"Ikke indlæst i Lovelace\",\"entry.messages.restart.content\":\"Du har {number} integrationer, der kræver en genstart af Home Assistant. Du kan genstarte fra 'Serveradministration'-sektionen under Indstillinger i Home Assistant-brugerfladen.\",\"entry.messages.restart.title\":\"Afventer genstart\",\"entry.messages.setup.content\":\"HACS starter op. Der kan i dette tidsrum mangle nogle oplysninger, eller de kan være forkerte\",\"entry.messages.setup.title\":\"HACS starter op\",\"entry.messages.startup.content\":\"HACS starter op. Der kan i dette tidsrum mangle nogle oplysninger, eller de kan være ukorekte.\",\"entry.messages.startup.title\":\"HACS starter op\",\"entry.messages.waiting.content\":\"HACS venter på, at Home Assistant er færdig med at starte, inden start af opgaver gennemføres\",\"entry.messages.waiting.title\":\"HACS venter\",\"entry.messages.wrong_frontend_loaded.content\":\"Du kører version {running} af HACS-frontend, men version {expected} var forventet. Du bør rydde din browser-cache.\",\"entry.messages.wrong_frontend_loaded.title\":\"Uventet frontend-version\",\"entry.pending_updates\":\"Ventende opdateringer\",\"menu.about\":\"Om HACS\",\"menu.clear\":\"Ryd alle nye\",\"menu.custom_repositories\":\"Brugerdefinerede repositories\",\"menu.dismiss\":\"Afvis alle nye repositories\",\"menu.documentation\":\"Dokumentation\",\"menu.open_issue\":\"Opret issue\",\"menu.reload\":\"Genindlæs vindue\",\"options.abort.not_setup\":\"HACS er ikke konfigureret.\",\"options.step.user.data.appdaemon\":\"Aktiver opdagelse og sporing af AppDaemon-apps\",\"options.step.user.data.country\":\"Filtrer med landekode.\",\"options.step.user.data.debug\":\"Aktiver debug.\",\"options.step.user.data.experimental\":\"Aktivér eksperimentelle funktioner\",\"options.step.user.data.netdaemon\":\"Aktiver opdagelse og sporing af NetDaemon-apps\",\"options.step.user.data.not_in_use\":\"Ikke i brug med YAML\",\"options.step.user.data.release_limit\":\"Antal udgivelser, der skal vises.\",\"options.step.user.data.sidepanel_icon\":\"Sidepanelikon\",\"options.step.user.data.sidepanel_title\":\"Sidepanelets titel\",\"repository_card.dismiss\":\"Afvis\",\"repository_card.information\":\"Oplysninger\",\"repository_card.new_repository\":\"Nyt repository\",\"repository_card.not_loaded\":\"Ikke indlæst\",\"repository_card.open_issue\":\"Opret issue\",\"repository_card.open_source\":\"Åbn kilde\",\"repository_card.pending_restart\":\"Afventer genstart\",\"repository_card.pending_update\":\"Ventende opdatering\",\"repository_card.report\":\"Rapporter til fjernelse\",\"repository_card.update_information\":\"Opdater oplysninger\",\"search.placeholder\":\"Søg efter repository\",\"sections.about.description\":\"Vis information om HACS\",\"sections.about.title\":\"Om\",\"sections.addon.description\":\"Der er ingen tilføjelsesprogrammer i HACS, men du kan klikke her finde dem i Supervisor\",\"sections.automation.description\":\"Det er her, du finder python_scripts, AppDaemon-apps og NetDaemon-apps\",\"sections.automation.title\":\"Automatisering\",\"sections.frontend.description\":\"Det er her, du finder temaer, brugerdefinerede kort og andre elementer til lovelace\",\"sections.frontend.title\":\"Frontend\",\"sections.integrations.description\":\"Det er her, du finder brugerdefinerede integrationer (custom_components)\",\"sections.integrations.title\":\"Integrationer\",\"sections.pending_repository_upgrade\":\"Du kører version {installed}, version {available} er tilgængelig\",\"store.no_repositories\":\"Ingen repositories\",\"store.no_repositories_desc1\":\"Det ser ud til, at du ikke har nogen repositories installeret i denne sektion endnu.\",\"store.no_repositories_desc2\":\"Klik på + i nederste hjørne for at tilføje dit første!\",\"store.no_repositories_found_desc1\":'Der blev ikke fundet installerede repositories, der matcher \"{searchInput}\" i denne sektion.',\"store.no_repositories_found_desc2\":\"Prøv at søge efter noget andet!\"},de:{\"common.add\":\"hinzufügen\",\"common.appdaemon\":\"AppDaemon\",\"common.cancel\":\"Abbrechen\",\"common.close\":\"Schließen\",\"common.download\":\"Herunterladen\",\"common.ignore\":\"Ignorieren\",\"common.integration\":\"Integration\",\"common.integration_plural\":\"Integrationen\",\"common.lovelace\":\"Lovelace\",\"common.navigate\":\"navigieren\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.python_script\":\"Python-Skript\",\"common.reload\":\"Neu laden\",\"common.remove\":\"Entfernen\",\"common.repositories\":\"Repositories\",\"common.repository\":\"Repository\",\"common.show\":\"Anzeigen\",\"common.theme\":\"Theme\",\"common.update\":\"Aktualisieren\",\"common.updates\":\"Aktualisierungen\",\"common.yes\":\"Ja\",\"confirm.home_assistant_version_not_correct\":\"Du benutzt die Home Assistant-Version ''{haversion}'', für dieses Repository muss jedoch die Mindestversion ''{minversion}'' installiert sein.\",\"dialog.configured.confirm\":\"Gehe zu Integrationen\",\"dialog.configured.message\":\"Die {name}-Integration ist bereits konfiguriert, du musst die Konfiguration dafür löschen, du sie aus HACS entfernst\",\"dialog.configured.title\":\"Integration ist konfiguriert\",\"dialog.reload.confirm\":\"Willst du das jetzt machen?\",\"dialog.reload.description\":\"Du musst deinen Browser-Cache leeren, wenn du Lovelace-Ressourcen änderst.\",\"dialog.remove.message\":\"Möchtest du {name} wirklich entfernen?\",\"dialog.remove.title\":\"Entfernen\",\"dialog_about.downloaded_repositories\":\"Heruntergeladene Repositories\",\"dialog_about.frontend_version\":\"Frontend Version\",\"dialog_about.integration_version\":\"Integrations Version\",\"dialog_about.useful_links\":\"Nützliche Links\",\"dialog_add_repo.limit\":\"Es werden nur die ersten 100 Repositories angezeigt. Verwende die Suche, um zu filtern, was du benötigst\",\"dialog_add_repo.no_match\":\"Es wurden keine Repositories gefunden, die deinen Filter entsprechen\",\"dialog_add_repo.sort_by\":\"Sortiere nach\",\"dialog_add_repo.sort_by_values.last_updated\":\"Zuletzt aktualisiert\",\"dialog_add_repo.sort_by_values.name\":\"Name\",\"dialog_add_repo.sort_by_values.stars\":\"Sterne\",\"dialog_add_repo.title\":\"Repository hinzufügen\",\"dialog_custom_repositories.category\":\"Kategorie\",\"dialog_custom_repositories.no_category\":\"Fehlende Kategorie\",\"dialog_custom_repositories.no_repository\":\"Fehlendes Repository\",\"dialog_custom_repositories.title\":\"Benutzerdefinierte Repositories\",\"dialog_custom_repositories.url_placeholder\":\"Füge eine benutzerdefinierte Repository-URL hinzu\",\"dialog_download.note_downloaded\":\"Nach dem Herunterladen befindet sich dies in {location}\",\"dialog_download.restart\":\"Denke daran, dass du Home Assistant neu starten musst, bevor Änderungen an Integrationen (custom_components) angewendet werden.\",\"dialog_download.select_version\":\"Version auswählen\",\"dialog_download.show_beta\":\"Beta-Versionen anzeigen\",\"dialog_download.type\":\"Typ\",\"dialog_download.url\":\"URL\",\"dialog_info.author\":\"Autor\",\"dialog_info.download\":\"Installiere dieses Repository mit HACS\",\"dialog_info.downloads\":\"Downloads\",\"dialog_info.loading\":\"Informationen laden...\",\"dialog_info.no_info\":\"Der Entwickler hat keine weiteren Informationen für dieses Repository bereitgestellt\",\"dialog_info.open_issues\":\"Probleme melden\",\"dialog_info.open_repo\":\"Repository öffnen\",\"dialog_info.stars\":\"Sterne\",\"dialog_info.version_installed\":\"Version heruntergeladen\",\"dialog_removed.link\":\"Externer Link zu weiteren Informationen\",\"dialog_removed.name\":\"Repository-Name\",\"dialog_removed.reason\":\"Grund für die Entfernung\",\"dialog_removed.type\":\"Art der Entfernung\",\"dialog_update.available_version\":\"Verfügbare Version\",\"dialog_update.changelog\":\"Änderungsprotokoll\",\"dialog_update.downloaded_version\":\"Heruntergeladene Version\",\"dialog_update.message\":\"Eine neue Version von {name} ist verfügbar\",\"dialog_update.no_info\":\"Der Autor hat keine Informationen für dieses Release bereitgestellt\",\"dialog_update.releasenotes\":\"Releasenotes für {release}\",\"dialog_update.title\":\"Update ausstehend\",\"entry.information\":\"Information\",\"entry.intro\":\"Aktualisierungen und wichtige Meldungen werden hier angezeigt, falls vorhanden\",\"entry.messages.disabled.constrains.description\":\"Deine Umgebung ist nicht für die Ausführung von HACS kompatibel. Überprüfe die Protokolldatei für weitere Details.\",\"entry.messages.disabled.constrains.title\":\"Einschränkungen\",\"entry.messages.disabled.content\":\"Überprüfe die Logdatei für weitere Informationen\",\"entry.messages.disabled.invalid_token.description\":\"Rekonfiguriere HACS und starte Home Assistant neu.\",\"entry.messages.disabled.invalid_token.title\":\"Ungültiger Token\",\"entry.messages.disabled.load_hacs.description\":\"Überprüfe die Logdatei für weitere Informationen\",\"entry.messages.disabled.load_hacs.title\":\"HACS konnte nicht geladen werden\",\"entry.messages.disabled.rate_limit.description\":\"GitHub-API-Aufrufe sind ratenbegrenzt, diese Meldung wird in weniger als 1 Stunde verschwinden.\",\"entry.messages.disabled.rate_limit.title\":\"Ratenbegrenzt\",\"entry.messages.disabled.removed.description\":\"HACS wurde entfernt, Home Assistant neu starten\",\"entry.messages.disabled.removed.title\":\"Entfernt\",\"entry.messages.disabled.restore.description\":\"Überprüfe die Logdatei für weitere Informationen\",\"entry.messages.disabled.restore.title\":\"Wiederherstellung von HACS fehlgeschlagen\",\"entry.messages.disabled.title\":\"HACS ist deaktiviert\",\"entry.messages.has_pending_tasks.content\":\"Einige Repositorys werden möglicherweise erst angezeigt, wenn dies abgeschlossen ist\",\"entry.messages.has_pending_tasks.title\":\"Hintergrundaufgaben stehen noch aus\",\"entry.messages.removed_repository\":\"Repository ''{repository}'' entfernt\",\"entry.messages.resources.content\":\"Du hast {number} Lovelace-Elemente, die in Lovelace nicht richtig geladen sind.\",\"entry.messages.resources.title\":\"Nicht in Lovelace geladen\",\"entry.messages.restart.content\":\"Du hast {number} Integrationen, die einen Neustart von Home Assistant erfordern. Dies kannst du im Abschnitt 'Server Controls' im Konfigurationsteil der Home Assistant-Benutzeroberfläche tun.\",\"entry.messages.restart.title\":\"Ausstehender Neustart\",\"entry.messages.setup.content\":\"HACS wird gerade eingerichtet, während dieser Zeit könnten einige Informationen fehlen oder falsch sein\",\"entry.messages.setup.title\":\"HACS wird eingerichtet\",\"entry.messages.startup.content\":\"HACS wird gestartet, während dieser Zeit könnten einige Informationen fehlen oder falsch sein\",\"entry.messages.startup.title\":\"HACS startet\",\"entry.messages.waiting.content\":\"HACS wartet darauf, dass Home Assistant den Start beendet, bevor mit den Startaufgaben gestartet wird\",\"entry.messages.waiting.title\":\"HACS wartet\",\"entry.messages.wrong_frontend_installed.content\":\"Du hast {running} des HACS-Frontends installiert, aber Version {expected} wurde erwartet. Wenn diese Meldung angezeigt wird, dass Home Assistant die neue Version nicht installieren konnte, starte Home Assistant neu.\",\"entry.messages.wrong_frontend_installed.title\":\"Unerwartete Frontend-Version\",\"entry.messages.wrong_frontend_loaded.content\":\"Du führst die Version {running} des HACS-Frontends aus, aber es wurde die Version {expected} erwartet. Du solltest deinen Browser-Cache leeren.\",\"entry.messages.wrong_frontend_loaded.title\":\"Unerwartete Frontend-Version\",\"entry.pending_updates\":\"Ausstehende Updates\",\"menu.about\":\"Über HACS\",\"menu.clear\":\"Alles neue als gesehen markieren\",\"menu.custom_repositories\":\"Benutzerdefinierte Repositories\",\"menu.dismiss\":\"Alle neuen Repositories ausblenden\",\"menu.documentation\":\"Dokumentation\",\"menu.open_issue\":\"Problem melden\",\"menu.reload\":\"Fenster neu laden\",\"options.abort.not_setup\":\"HACS ist nicht eingerichtet.\",\"options.abort.release_limit_value\":\"Das Release-Limit muss zwischen 1 und 100 liegen\",\"options.step.user.data.appdaemon\":\"AppDaemon App-Entdeckung & Nachverfolgung aktivieren\",\"options.step.user.data.country\":\"Nach Ländercode filtern.\",\"options.step.user.data.debug\":\"Debug aktivieren.\",\"options.step.user.data.experimental\":\"Experimentelle Funktionen aktivieren\",\"options.step.user.data.netdaemon\":\"NetDaemon App-Entdeckung & Nachverfolgung aktivieren\",\"options.step.user.data.not_in_use\":\"Nicht in Verwendung mit YAML\",\"options.step.user.data.release_limit\":\"Anzahl anzuzeigender Releases.\",\"options.step.user.data.sidepanel_icon\":\"Sidepanel Symbol\",\"options.step.user.data.sidepanel_title\":\"Sidepanel Titel\",\"repository_card.dismiss\":\"Ausblenden\",\"repository_card.information\":\"Information\",\"repository_card.new_repository\":\"Neues Repository\",\"repository_card.not_loaded\":\"Nicht geladen\",\"repository_card.open_issue\":\"Problem melden\",\"repository_card.open_source\":\"Quelldateien öffnen\",\"repository_card.pending_restart\":\"Ausstehender Neustart\",\"repository_card.pending_update\":\"Ausstehende Aktualisierung\",\"repository_card.redownload\":\"Erneut herunterladen\",\"repository_card.report\":\"Melden zur Entfernung des Repositorys\",\"repository_card.update_information\":\"Aktualisierungsinformationen\",\"search.downloaded\":\"Suche nach heruntergeladenen Repositories\",\"search.downloaded_new\":\"Suche nach heruntergeladenen oder neuen Repositories\",\"search.placeholder\":\"Suche nach Repository\",\"sections.about.description\":\"Informationen zu HACS anzeigen\",\"sections.about.title\":\"Über\",\"sections.addon.description\":\"Es gibt in HACS selbst keine Add-ons, aber du kannst hier klicken, um zum Supervisor zu gelangen\",\"sections.addon.title\":\"Add-ons\",\"sections.automation.description\":\"Hier findest du python_scripts, AppDaemon-Apps und NetDaemon-Apps\",\"sections.automation.title\":\"Automatisierung\",\"sections.frontend.description\":\"Hier findest du Themen, individuelle Karten und andere Elemente für Lovelace\",\"sections.frontend.title\":\"Frontend\",\"sections.integrations.description\":\"Hier findest du benutzerdefinierte Integrationen (custom_components)\",\"sections.integrations.title\":\"Integrationen\",\"sections.pending_repository_upgrade\":\"Du verwendest Version {downloaded}, Version {available} ist verfügbar\",\"store.explore\":\"Durchsuchen und herunterladen von Repositories\",\"store.new_repositories_note\":\"Hier werden einige neue Repositories angezeigt\",\"store.no_repositories\":\"Keine Repositories\",\"store.no_repositories_desc1\":\"Anscheinend sind in diesem Abschnitt noch keine Repositories installiert.\",\"store.no_repositories_desc2\":\"Klicken auf das + in der unteren Ecke, um dein erstes hinzuzufügen!\",\"store.no_repositories_found_desc1\":'In diesem Abschnitt wurden keine installierten Repositorys gefunden, die mit \"{searchInput}\" übereinstimmen.',\"store.no_repositories_found_desc2\":\"Versuche, nach etwas anderem zu suchen!\"},el:{\"common.appdaemon\":\"AppDaemon\",\"common.integration\":\"Ενσωμάτωση\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.repositories\":\"Αποθετήρια\",\"common.theme\":\"Θέμα\",\"options.step.user.data.appdaemon\":\"Ενεργοποίηση εύρεσης & παρακολούθησης για το AppDaemon\",\"options.step.user.data.country\":\"Κριτήριο με βάση τον κωδικό χώρας.\",\"options.step.user.data.debug\":\"Ενεργοποίηση εντοπισμού σφαλμάτων.\",\"options.step.user.data.experimental\":\"Ενεργοποίση πειραματικών λειτουργιών\",\"options.step.user.data.netdaemon\":\"Ενεργοποίηση εύρεσης & παρακολούθησης για το NetDaemon\",\"options.step.user.data.not_in_use\":\"Δεν χρησιμοποιείται με το YAML\",\"options.step.user.data.release_limit\":\"Αριθμός εκδόσεων που να παραθέτονται.\",\"options.step.user.data.sidepanel_icon\":\"Εικονίδιο πλαϊνού πάνελ\",\"options.step.user.data.sidepanel_title\":\"Τίτλος πλαϊνού πάνελ\"},en:{\"common.add\":\"add\",\"common.appdaemon\":\"AppDaemon\",\"common.cancel\":\"Cancel\",\"common.close\":\"Close\",\"common.download\":\"Download\",\"common.ignore\":\"Ignore\",\"common.integration\":\"Integration\",\"common.integration_plural\":\"Integrations\",\"common.lovelace\":\"Lovelace\",\"common.navigate\":\"navigate\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.python_script\":\"Python Script\",\"common.reload\":\"Reload\",\"common.remove\":\"Remove\",\"common.repositories\":\"Repositories\",\"common.repository\":\"Repository\",\"common.show\":\"Show\",\"common.theme\":\"Theme\",\"common.update\":\"Update\",\"common.updates\":\"Updates\",\"common.yes\":\"Yes\",\"confirm.home_assistant_version_not_correct\":\"You are running Home Assistant version ''{haversion}'', but this repository requires minimum version ''{minversion}'' to be installed.\",\"dialog.configured.confirm\":\"Go to integrations\",\"dialog.configured.message\":\"The {name} integration is configured or ignored, you need to delete the configuration for it before removing it from HACS\",\"dialog.configured.title\":\"Integration is configured\",\"dialog.reload.confirm\":\"Do you want to do that now?\",\"dialog.reload.description\":\"You need to reload your browser for the updated resources to be used.\",\"dialog.remove.message\":\"Do you really want to remove {name}?\",\"dialog.remove.title\":\"Remove\",\"dialog_about.downloaded_repositories\":\"Downloaded repositories\",\"dialog_about.frontend_version\":\"Frontend version\",\"dialog_about.integration_version\":\"Integration version\",\"dialog_about.useful_links\":\"Useful links\",\"dialog_add_repo.limit\":\"Only the first 100 repositories are shown, use the search to filter what you need\",\"dialog_add_repo.no_match\":\"No repositories found matching your filter\",\"dialog_add_repo.sort_by\":\"Sort by\",\"dialog_add_repo.sort_by_values.last_updated\":\"Last updated\",\"dialog_add_repo.sort_by_values.name\":\"Name\",\"dialog_add_repo.sort_by_values.stars\":\"Stars\",\"dialog_add_repo.title\":\"Add repository\",\"dialog_custom_repositories.category\":\"Category\",\"dialog_custom_repositories.no_category\":\"Missing category\",\"dialog_custom_repositories.no_repository\":\"Missing repository\",\"dialog_custom_repositories.title\":\"Custom repositories\",\"dialog_custom_repositories.url_placeholder\":\"Add custom repository URL\",\"dialog_download.lovelace_instruction\":\"After the download completes, since you are not using Lovelace in storage mode you need to manually add the resource with these settings:\",\"dialog_download.note_downloaded\":\"When downloaded this will be located in {location}\",\"dialog_download.restart\":\"Remember that you need to restart Home Assistant before changes to integrations (custom_components) are applied.\",\"dialog_download.select_version\":\"Select version\",\"dialog_download.show_beta\":\"Show beta versions\",\"dialog_download.type\":\"Type\",\"dialog_download.url\":\"URL\",\"dialog_info.author\":\"Author\",\"dialog_info.download\":\"Download this repository with HACS\",\"dialog_info.downloads\":\"Downloads\",\"dialog_info.loading\":\"Loading information...\",\"dialog_info.no_info\":\"The developer has not provided any more information for this repository\",\"dialog_info.open_issues\":\"Open issues\",\"dialog_info.open_repo\":\"Open repository\",\"dialog_info.stars\":\"Stars\",\"dialog_info.version_installed\":\"Version downloaded\",\"dialog_removed.link\":\"External link to more information\",\"dialog_removed.name\":\"Repository name\",\"dialog_removed.reason\":\"Removal reason\",\"dialog_removed.type\":\"Removal type\",\"dialog_update.available_version\":\"Available version\",\"dialog_update.changelog\":\"Changelog\",\"dialog_update.downloaded_version\":\"Downloaded version\",\"dialog_update.message\":\"A new version of the {name} is available\",\"dialog_update.no_info\":\"The author has not provided any information for this release\",\"dialog_update.releasenotes\":\"Release notes for {release}\",\"dialog_update.title\":\"Update pending\",\"entry.information\":\"Information\",\"entry.intro\":\"Updates and important messages will show here if there are any\",\"entry.messages.disabled.constrains.description\":\"Your environment is not compatible to run HACS, check your logfile for more details.\",\"entry.messages.disabled.constrains.title\":\"Constraints\",\"entry.messages.disabled.content\":\"Check your log file for more details\",\"entry.messages.disabled.invalid_token.description\":\"Reconfigure HACS and restart Home Assistant.\",\"entry.messages.disabled.invalid_token.title\":\"Invalid token\",\"entry.messages.disabled.load_hacs.description\":\"Check your log file for more details\",\"entry.messages.disabled.load_hacs.title\":\"HACS could not load\",\"entry.messages.disabled.rate_limit.description\":\"GitHub API calls are ratelimited, this will clear in less than 1 hour.\",\"entry.messages.disabled.rate_limit.title\":\"Ratelimited\",\"entry.messages.disabled.removed.description\":\"HACS is removed, restart Home Assistant.\",\"entry.messages.disabled.removed.title\":\"Removed\",\"entry.messages.disabled.restore.description\":\"Check your log file for more details\",\"entry.messages.disabled.restore.title\":\"Restore of HACS failed\",\"entry.messages.disabled.title\":\"HACS is disabled\",\"entry.messages.has_pending_tasks.content\":\"Some repositories might not show until this is completed\",\"entry.messages.has_pending_tasks.title\":\"Background tasks pending\",\"entry.messages.removed_repository\":\"Removed repository ''{repository}''\",\"entry.messages.resources.content\":\"You have {number} Lovelace elements that are not loaded properly in Lovelace.\",\"entry.messages.resources.title\":\"Not loaded in Lovelace\",\"entry.messages.restart.content\":\"You have {number} {pluralWording} for which a restart of Home Assistant is required. You can do that from the 'Server management' section under the configuration part of Home Assistant UI.\",\"entry.messages.restart.title\":\"Pending restart\",\"entry.messages.setup.content\":\"HACS is setting up, during this time some information might be missing or incorrect\",\"entry.messages.setup.title\":\"HACS is setting up\",\"entry.messages.startup.content\":\"HACS is starting up, during this time some information might be missing or incorrect\",\"entry.messages.startup.title\":\"HACS is starting up\",\"entry.messages.waiting.content\":\"HACS is waiting for Home Assistant to finish startup before starting startup tasks\",\"entry.messages.waiting.title\":\"HACS is waiting\",\"entry.messages.wrong_frontend_installed.content\":\"You have {running} of the HACS frontend installed, but version {expected} was expected, if this you see this message Home Assistant was not able to install the new version, try restarting Home Assistant.\",\"entry.messages.wrong_frontend_installed.title\":\"Unexpected frontend version\",\"entry.messages.wrong_frontend_loaded.content\":\"You are running version {running} of the HACS frontend, but version {expected} was expected, you should clear your browser cache.\",\"entry.messages.wrong_frontend_loaded.title\":\"Unexpected frontend version\",\"entry.pending_updates\":\"Pending updates\",\"menu.about\":\"About HACS\",\"menu.clear\":\"Clear all new\",\"menu.custom_repositories\":\"Custom repositories\",\"menu.dismiss\":\"Dismiss new repositories\",\"menu.documentation\":\"Documentation\",\"menu.open_issue\":\"Open issue\",\"menu.reload\":\"Reload window\",\"options.abort.not_setup\":\"HACS is not setup.\",\"options.abort.release_limit_value\":\"The release limit needs to be between 1 and 100\",\"options.step.user.data.appdaemon\":\"Enable AppDaemon apps discovery & tracking\",\"options.step.user.data.country\":\"Filter with country code.\",\"options.step.user.data.debug\":\"Enable debug.\",\"options.step.user.data.experimental\":\"Enable experimental features\",\"options.step.user.data.netdaemon\":\"Enable NetDaemon apps discovery & tracking\",\"options.step.user.data.not_in_use\":\"Not in use with YAML\",\"options.step.user.data.release_limit\":\"Number of releases to show.\",\"options.step.user.data.sidepanel_icon\":\"Side panel icon\",\"options.step.user.data.sidepanel_title\":\"Side panel title\",\"repository_card.dismiss\":\"dismiss\",\"repository_card.information\":\"Information\",\"repository_card.new_repository\":\"New repository\",\"repository_card.not_loaded\":\"Not loaded\",\"repository_card.open_issue\":\"Open issue\",\"repository_card.open_source\":\"Open source\",\"repository_card.pending_restart\":\"Pending restart\",\"repository_card.pending_update\":\"Pending update\",\"repository_card.redownload\":\"Redownload\",\"repository_card.report\":\"Request for removal\",\"repository_card.update_information\":\"Update information\",\"search.downloaded\":\"Search for downloaded repositories\",\"search.downloaded_new\":\"Search for downloaded or new repositories\",\"search.placeholder\":\"Search for repository\",\"sections.about.description\":\"Show information about HACS\",\"sections.about.title\":\"About\",\"sections.addon.description\":\"There are no addons in HACS, but you can click here to get to the supervisor\",\"sections.addon.title\":\"Add-ons\",\"sections.automation.description\":\"This is where you find python_scripts, AppDaemon apps and NetDaemon apps\",\"sections.automation.title\":\"Automation\",\"sections.frontend.description\":\"This is where you find themes, custom cards and other elements for lovelace\",\"sections.frontend.title\":\"Frontend\",\"sections.integrations.description\":\"This is where you find custom integrations (custom_components)\",\"sections.integrations.title\":\"Integrations\",\"sections.pending_repository_upgrade\":\"You are running version {downloaded}, version {available} is available\",\"store.explore\":\"Explore & download repositories\",\"store.new_repositories_note\":\"There are some new repositories showing here\",\"store.no_repositories\":\"No repositories\",\"store.no_repositories_desc1\":\"It seems like you don't have any repositories downloaded in this section yet.\",\"store.no_repositories_desc2\":\"Click on the + in the bottom corner to add your first!\",\"store.no_repositories_found_desc1\":'No downloaded repositories matching \"{searchInput}\" found in this section.',\"store.no_repositories_found_desc2\":\"Try searching for something else!\"},es:{\"common.add\":\"añadir\",\"common.appdaemon\":\"AppDaemon\",\"common.cancel\":\"Cancelar\",\"common.close\":\"Cerrar\",\"common.download\":\"Descargar\",\"common.ignore\":\"Ignorar\",\"common.integration\":\"Integración\",\"common.integration_plural\":\"Integraciones\",\"common.lovelace\":\"Lovelace\",\"common.navigate\":\"navegar\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.python_script\":\"Script de Python\",\"common.reload\":\"Recargar\",\"common.remove\":\"Eliminar\",\"common.repositories\":\"Repositorios\",\"common.repository\":\"Repositorio\",\"common.show\":\"Mostrar\",\"common.theme\":\"Tema\",\"common.update\":\"Actualizar\",\"common.updates\":\"Actualizaciones\",\"common.yes\":\"Sí\",\"confirm.home_assistant_version_not_correct\":\"Está ejecutando la versión ''{haversion}'' de Home Assistant, pero este repositorio requiere la instalación de la versión ''{minversion}'' mínima.\",\"dialog.configured.confirm\":\"Ir a integraciones\",\"dialog.configured.message\":\"La integración {name} está configurada o ignorada, es necesario eliminar la configuración para ella antes de eliminarla de HACS\",\"dialog.configured.title\":\"La integración está configurada\",\"dialog.reload.confirm\":\"¿Quieres hacer eso ahora?\",\"dialog.reload.description\":\"Necesitas limpiar el caché de tu navegador cuando cambies los recursos de Lovelace.\",\"dialog.remove.message\":\"¿Realmente quieres eliminar a {name}?\",\"dialog.remove.title\":\"Eliminar\",\"dialog_about.downloaded_repositories\":\"Repositorios descargados\",\"dialog_about.frontend_version\":\"Versión del front-end\",\"dialog_about.integration_version\":\"Versión de la integración\",\"dialog_about.useful_links\":\"Enlaces útiles\",\"dialog_add_repo.limit\":\"Sólo se muestran los primeros 100 repositorios, utilice la búsqueda para filtrar lo que necesita\",\"dialog_add_repo.no_match\":\"No se han encontrado repositorios que coincidan con el filtro\",\"dialog_add_repo.sort_by\":\"Ordenar por\",\"dialog_add_repo.sort_by_values.last_updated\":\"Última actualización\",\"dialog_add_repo.sort_by_values.name\":\"Nombre\",\"dialog_add_repo.sort_by_values.stars\":\"Estrellas\",\"dialog_add_repo.title\":\"Añadir repositorio\",\"dialog_custom_repositories.category\":\"Categoría\",\"dialog_custom_repositories.no_category\":\"Categoría que falta\",\"dialog_custom_repositories.no_repository\":\"Falta el repositorio\",\"dialog_custom_repositories.title\":\"Repositorios personalizados\",\"dialog_custom_repositories.url_placeholder\":\"Agrega la URL del repositorio personalizado que deseas añadir\",\"dialog_download.lovelace_instruction\":\"Una vez completada la descarga, dado que no está utilizando Lovelace en modo de almacenamiento, debe agregar manualmente el recurso con estas configuraciones:\",\"dialog_download.note_downloaded\":\"Cuando se descargue, estará localizado en {location}\",\"dialog_download.restart\":\"Recuerde que debe reiniciar Home Assistant antes de aplicar los cambios en las integraciones (custom_components).\",\"dialog_download.select_version\":\"Seleccionar versión\",\"dialog_download.show_beta\":\"Mostrar versiones beta\",\"dialog_download.type\":\"Tipo\",\"dialog_download.url\":\"URL\",\"dialog_info.author\":\"Autor\",\"dialog_info.download\":\"Descargar este repositorio con HACS\",\"dialog_info.downloads\":\"Descargas\",\"dialog_info.loading\":\"Cargando información ...\",\"dialog_info.no_info\":\"El desarrollador no ha proporcionado más información para este repositorio\",\"dialog_info.open_issues\":\"Abrir incidencias\",\"dialog_info.open_repo\":\"Abrir repositorio\",\"dialog_info.stars\":\"Estrellas\",\"dialog_info.version_installed\":\"Versión descargada\",\"dialog_removed.link\":\"Enlace externo para más información\",\"dialog_removed.name\":\"Nombre del repositorio\",\"dialog_removed.reason\":\"Motivo de la eliminación\",\"dialog_removed.type\":\"Tipo de eliminación\",\"dialog_update.available_version\":\"Versión disponible\",\"dialog_update.changelog\":\"Registro de cambios\",\"dialog_update.downloaded_version\":\"Versión descargada\",\"dialog_update.message\":\"Hay disponible una nueva versión de {name}\",\"dialog_update.no_info\":\"El desarrollador no ha proporcionado más información para este repositorio\",\"dialog_update.releasenotes\":\"Notas de lanzamiento para {release}\",\"dialog_update.title\":\"Actualización pendiente\",\"entry.information\":\"Información\",\"entry.intro\":\"Las actualizaciones y los mensajes importantes se mostrarán aquí si hay alguno que mostrar\",\"entry.messages.disabled.constrains.description\":\"Su entorno no es compatible para ejecutar HACS, consulte su archivo de registro para obtener más detalles.\",\"entry.messages.disabled.constrains.title\":\"Restricciones\",\"entry.messages.disabled.content\":\"Compruebe el archivo de registro para obtener más detalles\",\"entry.messages.disabled.invalid_token.description\":\"Vuelva a configurar HACS y reinicie Home Assistant.\",\"entry.messages.disabled.invalid_token.title\":\"Token no válido\",\"entry.messages.disabled.load_hacs.description\":\"Consulte su archivo de registro para obtener más detalles\",\"entry.messages.disabled.load_hacs.title\":\"HACS no se pudo cargar\",\"entry.messages.disabled.rate_limit.description\":\"Las llamadas a la API de GitHub están limitadas, esto se restaurará en menos de 1 hora.\",\"entry.messages.disabled.rate_limit.title\":\"Tarifa limitada\",\"entry.messages.disabled.removed.description\":\"HACS está eliminado, reinicie Home Assistant.\",\"entry.messages.disabled.removed.title\":\"Eliminado\",\"entry.messages.disabled.restore.description\":\"Consulte su archivo de registro para obtener más detalles\",\"entry.messages.disabled.restore.title\":\"Falló la restauración de HACS\",\"entry.messages.disabled.title\":\"HACS está deshabilitado\",\"entry.messages.has_pending_tasks.content\":\"Es posible que algunos repositorios no se muestren hasta que esto se complete\",\"entry.messages.has_pending_tasks.title\":\"Tareas en segundo plano pendientes\",\"entry.messages.removed_repository\":\"Se eliminó el repositorio ''{repository}''\",\"entry.messages.resources.content\":\"Tienes {number} elementos de Lovelace que no se cargan correctamente en Lovelace.\",\"entry.messages.resources.title\":\"No está cargada en Lovelace\",\"entry.messages.restart.content\":\"Tienes {number} {pluralWording} que requiere un reinicio de Home Assistant, puedes hacerlo desde la sección 'Controles del servidor' en la parte de configuración de la IU de Home Assistant.\",\"entry.messages.restart.title\":\"Pendiente de reinicio\",\"entry.messages.setup.content\":\"HACS se está configurando, durante este tiempo alguna información puede estar perdida o ser incorrecta\",\"entry.messages.setup.title\":\"HACS se está configurando\",\"entry.messages.startup.content\":\"HACS se está iniciando, durante este tiempo alguna información podría faltar o ser incorrecta\",\"entry.messages.startup.title\":\"HACS se está iniciando\",\"entry.messages.waiting.content\":\"HACS está esperando a que Home Assistant finalice el inicio antes de iniciar las tareas de inicio\",\"entry.messages.waiting.title\":\"HACS está esperando\",\"entry.messages.wrong_frontend_installed.content\":\"Tienes instalada la versión {running} de la interfaz de HACS, pero se esperaba la versión {expected}, si ves este mensaje, Home Assistant no pudo instalar la nueva versión, intenta reiniciar Home Assistant.\",\"entry.messages.wrong_frontend_installed.title\":\"Versión inesperada del frontend\",\"entry.messages.wrong_frontend_loaded.content\":\"Estás ejecutando la versión {running} de la interfaz HACS, pero se esperaba la versión {expected} , deberías de limpiar la memoria caché del navegador.\",\"entry.messages.wrong_frontend_loaded.title\":\"Versión inesperada de la interfaz\",\"entry.pending_updates\":\"Actualizaciones pendientes\",\"menu.about\":\"Acerca de HACS\",\"menu.clear\":\"Borrar todo lo nuevo\",\"menu.custom_repositories\":\"Repositorios personalizados\",\"menu.dismiss\":\"Descartar todos los repositorios nuevos\",\"menu.documentation\":\"Documentación\",\"menu.open_issue\":\"Abrir incidencias\",\"menu.reload\":\"Recargar la ventana\",\"options.abort.not_setup\":\"HACS no está configurado.\",\"options.abort.release_limit_value\":\"El límite de liberación debe estar entre 1 y 100\",\"options.step.user.data.appdaemon\":\"Habilitar el descubrimiento y seguimiento de las aplicaciones de AppDaemon\",\"options.step.user.data.country\":\"Filtrar por el código de país.\",\"options.step.user.data.debug\":\"Habilitar depuración.\",\"options.step.user.data.experimental\":\"Habilitar funciones experimentales\",\"options.step.user.data.netdaemon\":\"Habilitar el descubrimiento y seguimiento de las aplicaciones de NetDaemon\",\"options.step.user.data.not_in_use\":\"No usarse con YAML\",\"options.step.user.data.release_limit\":\"Número de versiones a mostrar.\",\"options.step.user.data.sidepanel_icon\":\"Icono del panel lateral\",\"options.step.user.data.sidepanel_title\":\"Título del panel lateral\",\"repository_card.dismiss\":\"descartar\",\"repository_card.information\":\"Información\",\"repository_card.new_repository\":\"Nuevo repositorio\",\"repository_card.not_loaded\":\"Sin cargar\",\"repository_card.open_issue\":\"Abrir incidencias\",\"repository_card.open_source\":\"Código abierto\",\"repository_card.pending_restart\":\"Pendiente de reinicio\",\"repository_card.pending_update\":\"Actualización pendiente\",\"repository_card.redownload\":\"Volver a descargar\",\"repository_card.report\":\"Informe para la eliminación\",\"repository_card.update_information\":\"Actualizar información\",\"search.downloaded\":\"Buscar repositorios descargados\",\"search.downloaded_new\":\"Buscar repositorios descargados o nuevos\",\"search.placeholder\":\"Buscar repositorio\",\"sections.about.description\":\"Mostrar información sobre HACS\",\"sections.about.title\":\"Acerca de\",\"sections.addon.description\":\"No hay complementos (addons) en HACS, pero puede hacer clic aquí para ir a la pestaña Supervisor\",\"sections.addon.title\":\"Complementos (addons)\",\"sections.automation.description\":\"Aquí es donde se encuentran python_scripts, aplicaciones AppDaemon y aplicaciones NetDaemon\",\"sections.automation.title\":\"Automatización\",\"sections.frontend.description\":\"Aquí es donde encontrarás temas, tarjetas personalizadas y otros elementos para lovelace\",\"sections.frontend.title\":\"Interfaz\",\"sections.integrations.description\":\"Aquí es donde se encuentran las integraciones personalizadas (custom_components)\",\"sections.integrations.title\":\"Integraciones\",\"sections.pending_repository_upgrade\":\"Está ejecutando la versión {installed}, la versión {available} está disponible\",\"store.explore\":\"Explorar y descargar repositorios\",\"store.new_repositories_note\":\"Aquí se muestran algunos repositorios nuevos\",\"store.no_repositories\":\"Sin repositorios\",\"store.no_repositories_desc1\":\"Parece que todavía no tiene ningún repositorio instalado en esta sección.\",\"store.no_repositories_desc2\":\"Haga clic en el + de la esquina inferior derecha para agregar su primer repositorio!\",\"store.no_repositories_found_desc1\":'No se ha encontrado ningún repositorio instalado que coincida con \"{searchInput}\" en esta sección.',\"store.no_repositories_found_desc2\":\"¡Intenta buscar otra cosa!\"},et:{\"common.add\":\"lisa\",\"common.cancel\":\"Loobu\",\"common.close\":\"Sulge\",\"common.download\":\"Lae alla\",\"common.ignore\":\"Eira\",\"common.integration\":\"Sidumine\",\"common.integration_plural\":\"sidumist\",\"common.lovelace\":\"Lovelace\",\"common.navigate\":\"lehitse\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Kasutajaliides\",\"common.python_script\":\"Pythoni skript\",\"common.reload\":\"Taaslae\",\"common.remove\":\"Eemalda\",\"common.repositories\":\"Teegid\",\"common.repository\":\"Hoidla\",\"common.show\":\"Kuva\",\"common.theme\":\"Kuva teema\",\"common.update\":\"Uuenda\",\"common.updates\":\"Uuendused\",\"common.yes\":\"Jah\",\"confirm.home_assistant_version_not_correct\":\"Kasutad Home Assistanti versiooni ''{haversion}'' kuid see hoidla nõuab vähemalt versiooni ''{minversion}'' installimist.\",\"dialog.configured.confirm\":\"Mine sidumiste juurde\",\"dialog.configured.message\":\"Sidumine {name} on seadistatud, pead selle sidumise enne HACS-ist eemaldamist kustutama\",\"dialog.configured.title\":\"Sidumine on seadistatud\",\"dialog.reload.confirm\":\"Kas teen seda kohe?\",\"dialog.reload.description\":\"Uuendatud ressursside kasutamiseks pead tühjendama brauseri vahemälu.\",\"dialog.remove.message\":\"Kas soovid tõesti eemaldada üksuse {name}?\",\"dialog.remove.title\":\"Eemalda\",\"dialog_about.downloaded_repositories\":\"Allalaaditud hoidlad\",\"dialog_about.frontend_version\":\"Kasutajaliidese versioon\",\"dialog_about.integration_version\":\"Sidumise versioon\",\"dialog_about.useful_links\":\"Kasulikud veebiviited\",\"dialog_add_repo.limit\":\"Kuvatakse ainult esimesed 100 hoidlat. Vajaliku filtreerimiseks kasutage otsingut\",\"dialog_add_repo.no_match\":\"Filtrile vastavaid hoidlaid ei leitud\",\"dialog_add_repo.sort_by\":\"Sortimisalus\",\"dialog_add_repo.sort_by_values.last_updated\":\"Viimati uuendatud\",\"dialog_add_repo.sort_by_values.name\":\"Nimi\",\"dialog_add_repo.sort_by_values.stars\":\"Hinnang\",\"dialog_add_repo.title\":\"Lisa hoidla\",\"dialog_custom_repositories.category\":\"Kategooria\",\"dialog_custom_repositories.no_category\":\"Puuduv kategooria\",\"dialog_custom_repositories.no_repository\":\"Puuduv hoidla\",\"dialog_custom_repositories.title\":\"Kohandatud hoidlad\",\"dialog_custom_repositories.url_placeholder\":\"Lisa kohandatud hoidla URL\",\"dialog_download.lovelace_instruction\":\"Kuna ei kasutata Lovelace'i salvestusrežiimis siis pärast allalaadimise lõpetamist pead ressursi käsitsi lisama järgmiste sätetega:\",\"dialog_download.note_downloaded\":\"Allalaadimisel asub see asukohas {location}\",\"dialog_download.restart\":\"Pea meeles, et sidumiste (custom_components) muudatuste rakendamiseks pead Home Assistanti taaskäivitama.\",\"dialog_download.select_version\":\"Vali versioon\",\"dialog_download.show_beta\":\"Kuva beetaversioonid\",\"dialog_download.type\":\"Liik\",\"dialog_download.url\":\"URL\",\"dialog_info.author\":\"Autor\",\"dialog_info.download\":\"Laadi see hoidla alla HACS-iga\",\"dialog_info.downloads\":\"Allalaadimised\",\"dialog_info.loading\":\"Teabe laadimine ...\",\"dialog_info.no_info\":\"Arendaja ei ole selle hoidla kohta rohkem teavet avaldanud\",\"dialog_info.open_issues\":\"Teadaolevad tõrketeatised\",\"dialog_info.open_repo\":\"Ava hoidla\",\"dialog_info.stars\":\"Hinnang\",\"dialog_info.version_installed\":\"Allalaaditud versioon\",\"dialog_removed.link\":\"Väline link lisateabe saamiseks\",\"dialog_removed.name\":\"Hoidla nimi\",\"dialog_removed.reason\":\"Eemaldamise põhjus\",\"dialog_removed.type\":\"Eemaldamise tüüp\",\"dialog_update.available_version\":\"Saadaolev versioon\",\"dialog_update.changelog\":\"Muudatused\",\"dialog_update.downloaded_version\":\"Allalaaditud versioon\",\"dialog_update.message\":\"{name} uus versioon on saadaval\",\"dialog_update.no_info\":\"Arendaja ei ole selle väljalaske kohta rohkem teavet avaldanud\",\"dialog_update.releasenotes\":\"Versiooni {release} teave\",\"dialog_update.title\":\"Uuendus on ootel\",\"entry.information\":\"Teave\",\"entry.intro\":\"Siin kuvatakse saadaval värskendused ja olulised sõnumid kui neid juhtub olema\",\"entry.messages.disabled.constrains.description\":\"Home Assistanti paigaldus ei ühildu HACS-iga. Lisateavet leiad oma logifailist.\",\"entry.messages.disabled.constrains.title\":\"Piirangud\",\"entry.messages.disabled.content\":\"Lisateavet leiad oma logifailist\",\"entry.messages.disabled.invalid_token.description\":\"Konfigureeri HACS uuesti ja taaskäivita Home Assistant.\",\"entry.messages.disabled.invalid_token.title\":\"Kehtetu luba\",\"entry.messages.disabled.load_hacs.description\":\"Lisateavet leiad oma logifailist\",\"entry.messages.disabled.load_hacs.title\":\"HACS-i ei saanud laadida\",\"entry.messages.disabled.rate_limit.description\":\"GitHubi API päringud on piiratud, teade kustub vähem kui 1 tunni pärast.\",\"entry.messages.disabled.rate_limit.title\":\"Päringute piirang\",\"entry.messages.disabled.removed.description\":\"HACS on eemaldatud, taaskäivita Home Assistant.\",\"entry.messages.disabled.removed.title\":\"Eemaldatud\",\"entry.messages.disabled.restore.description\":\"Lisateavet leiad oma logifailist\",\"entry.messages.disabled.restore.title\":\"HACS-i taastamine nurjus\",\"entry.messages.disabled.title\":\"HACS on keelatud\",\"entry.messages.has_pending_tasks.content\":\"Mõnda hoidlat ei kuvata enne kui tegevus on lõpule viidud\",\"entry.messages.has_pending_tasks.title\":\"Taustal on ootel toiminguid\",\"entry.messages.removed_repository\":\"Eemaldati hoidla ''{repository}''\",\"entry.messages.resources.content\":\"Teil on {number} Lovelace'i elementi mis pole Lovelace'is õigesti laaditud.\",\"entry.messages.resources.title\":\"Ei laaditud Lovelace'i\",\"entry.messages.restart.content\":'Paigaldatud on {number} {pluralWording} mis nõuavad Home Assistanti taaskäivitamist. Saad seda teha Home Assistanti kasutajaliidese seadete alamjaotisest \"Serveri juhtimine\".',\"entry.messages.restart.title\":\"Taaskäivitamise ootel\",\"entry.messages.setup.content\":\"HACS on seadistub. Selle aja jooksul võib osa teavet puududa või olla vale\",\"entry.messages.setup.title\":\"HACS seadistub\",\"entry.messages.startup.content\":\"HACS käivitub. Selle aja jooksul võib osa teavet puududa või olla vale\",\"entry.messages.startup.title\":\"HACS käivitub\",\"entry.messages.waiting.content\":\"HACS ootab Home Assistanti käivitumist\",\"entry.messages.waiting.title\":\"HACS on ootel\",\"entry.messages.wrong_frontend_installed.content\":\"Paigaldatud on HACS-i kasutajaliides {running} kuid eeldati versiooni {expected}. Kui näed seda teadet siis Home Assistant ei saanud uut versiooni paigaldada, proovi taaskäivitada Home Assistant.\",\"entry.messages.wrong_frontend_installed.title\":\"Ootamatu kasutajaliidese versioon\",\"entry.messages.wrong_frontend_loaded.content\":\"Paigaldatud on HACS'i kasutajaliides {running} kuid eeldatakse versiooni {expected}. Tühjenda oma veebilehitseja vahemälu.\",\"entry.messages.wrong_frontend_loaded.title\":\"Ootamatu kasutajaliidese versioon\",\"entry.pending_updates\":\"Ootel värskendused\",\"menu.about\":\"HACS-i info\",\"menu.clear\":\"Tühjenda kõik uued\",\"menu.custom_repositories\":\"Kohandatud hoidlad\",\"menu.dismiss\":\"Peida kõik uued hoidlad\",\"menu.documentation\":\"Dokumentatsioon\",\"menu.open_issue\":\"Esita tõrketeade\",\"menu.reload\":\"Lae aken uuesti\",\"options.abort.not_setup\":\"HACS pole seadistatud.\",\"options.abort.release_limit_value\":\"Vahemik peab olema 1 kuni 100\",\"options.step.user.data.appdaemon\":\"Luba AppDaemoni rakenduste otsimine ja jälgimine\",\"options.step.user.data.country\":\"Filtreeri riigi koodi abil.\",\"options.step.user.data.debug\":\"Luba silumine.\",\"options.step.user.data.experimental\":\"Luba katselised funktsioonid\",\"options.step.user.data.netdaemon\":\"Luba NetDaemoni rakenduste otsimine ja jälgimine\",\"options.step.user.data.not_in_use\":\"YAML režiimi ei toetata\",\"options.step.user.data.release_limit\":\"Mitu väljalaset kuvada.\",\"options.step.user.data.sidepanel_icon\":\"Külgpaneeli ikoon\",\"options.step.user.data.sidepanel_title\":\"Külgpaneeli pealkiri\",\"repository_card.dismiss\":\"Peida\",\"repository_card.information\":\"Teave\",\"repository_card.new_repository\":\"Uus hoidla\",\"repository_card.not_loaded\":\"Pole laaditud\",\"repository_card.open_issue\":\"Esita tõrketeade\",\"repository_card.open_source\":\"Avatud lähtekoodiga\",\"repository_card.pending_restart\":\"Taaskäivitamise ootel\",\"repository_card.pending_update\":\"Värskendamise ootel\",\"repository_card.redownload\":\"Lae uuesti alla\",\"repository_card.report\":\"Eemaldamise taotlus\",\"repository_card.update_information\":\"Värskenda teavet\",\"search.downloaded\":\"Allalaaditud hoidlate otsimine\",\"search.downloaded_new\":\"Allalaaditud või uute hoidlate otsimine\",\"search.placeholder\":\"Otsi hoidlat\",\"sections.about.description\":\"Kuva HACS-i teave\",\"sections.about.title\":\"Üldteave\",\"sections.addon.description\":\"HACS-is pole lisandmooduleid. Supervisorisse pääsemiseks klõpsa siin\",\"sections.addon.title\":\"Lisandmoodulid\",\"sections.automation.description\":\"Siit leiad python_scripts, AppDaemoni ja NetDaemoni rakendused\",\"sections.automation.title\":\"Automatiseeringud\",\"sections.frontend.description\":\"Siit leiad kasutajaliidese teemad, kohandatud kaardid ja muud elemendid\",\"sections.frontend.title\":\"Kasutajaliides\",\"sections.integrations.description\":\"Siit leiad kohandatud sidumised (custom_components)\",\"sections.integrations.title\":\"Sidumised\",\"sections.pending_repository_upgrade\":\"Kasutad versiooni {downloaded}, saadaval on versioon {available}\",\"store.explore\":\"Avasta ja laadi alla hoidlaid\",\"store.new_repositories_note\":\"Saadaval on mõned uued hoidlad.\",\"store.no_repositories\":\"Hoidlaid pole\",\"store.no_repositories_desc1\":\"Tundub, et pole veel ühtegi hoidlat mis oleks siia jaotisse paigaldatud.\",\"store.no_repositories_desc2\":\"Esimese hoidla lisamiseks klõpsake alumises nurgas + märki!\",\"store.no_repositories_found_desc1\":'Sellest jaotisest ei leitud allalaaditud hoidlaid, mis vastaksotsingule \"{searchInput}\"',\"store.no_repositories_found_desc2\":\"Proovi otsida midagi muud!\"},fi:{\"common.add\":\"Lisää\",\"common.ignore\":\"Ohita\",\"common.integration_plural\":\"Integraatiot\",\"common.lovelace\":\"Lovelace\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.repository\":\"Repo\",\"common.theme\":\"Teema\",\"common.update\":\"Päivitä\",\"dialog_about.frontend_version\":\"Frontend-versio\",\"dialog_about.useful_links\":\"Hyödyllisiä linkkejä\",\"dialog_add_repo.sort_by\":\"Järjestä\",\"dialog_add_repo.title\":\"Lisää repo\",\"dialog_custom_repositories.category\":\"Kategoria\",\"dialog_custom_repositories.no_category\":\"Puuttuva kategoria\",\"dialog_custom_repositories.no_repository\":\"Puuttuva repo\",\"dialog_info.author\":\"Luoja\",\"dialog_info.downloads\":\"Lataukset\",\"dialog_info.loading\":\"Tietoja ladataan...\",\"dialog_info.open_issues\":\"Avoimet ongelmat\",\"dialog_info.open_repo\":\"Avaa repo\",\"dialog_info.stars\":\"Tähdet\",\"dialog_removed.link\":\"Linkki lisätietoihin\",\"dialog_removed.name\":\"Repon nimi\",\"dialog_removed.reason\":\"Poiston syy\",\"dialog_removed.type\":\"Poiston tyyppi\",\"dialog_update.available_version\":\"Saatavilla oleva versio\",\"dialog_update.changelog\":\"Muutosloki\",\"dialog_update.title\":\"Päivitys odottaa\",\"entry.information\":\"Tiedot\",\"entry.messages.disabled.content\":\"Tarkista lokitiedostosi saadaksesi lisätietoja\",\"entry.messages.disabled.title\":\"HACS on poistettu käytöstä\",\"entry.messages.has_pending_tasks.title\":\"Taustatehtävät vireillä\",\"entry.messages.resources.title\":\"Ei ladattu Lovelaceen\",\"entry.messages.restart.title\":\"Odottaa uudelleenkäynnistystä\",\"entry.messages.startup.title\":\"HACS käynnistyy\",\"entry.messages.wrong_frontend_loaded.title\":\"Odottamaton käyttöliittymäversio\",\"entry.pending_updates\":\"Päivityksiä saatavilla\",\"menu.about\":\"Tietoja HACS:stä\",\"menu.clear\":\"Tyhjennä kaikki uudet\",\"menu.custom_repositories\":\"Mukautetut repot\",\"menu.dismiss\":\"Hylkää kaikki uudet repot\",\"menu.documentation\":\"Dokumentointi\",\"menu.open_issue\":\"Avoin ongelma\",\"menu.reload\":\"Lataa ikkuna uudelleen\",\"options.step.user.data.netdaemon\":\"Ota NetDaemon-sovellusten etsintä ja seuranta käyttöön\",\"options.step.user.data.not_in_use\":\"Ei käytössä YAML:n kanssa\",\"options.step.user.data.sidepanel_icon\":\"Sivupaneelin kuvake\",\"options.step.user.data.sidepanel_title\":\"Sivupaneelin otsikko\",\"repository_card.dismiss\":\"Hylkää\",\"repository_card.information\":\"Tiedot\",\"repository_card.new_repository\":\"Uusi repo\",\"repository_card.not_loaded\":\"Ei ladattu\",\"repository_card.open_issue\":\"Avoin ongelma\",\"repository_card.open_source\":\"Avoin lähdekoodi\",\"repository_card.pending_restart\":\"Odottaa uudelleenkäynnistystä\",\"repository_card.pending_update\":\"Odottaa päivittämistä\",\"repository_card.report\":\"Raportoi poistettavaksi\",\"repository_card.update_information\":\"Päivitä tiedot\",\"search.placeholder\":\"Etsi repoa\",\"sections.about.title\":\"Tietoja\",\"sections.automation.title\":\"Automaatio\",\"sections.frontend.title\":\"Frontend\",\"sections.integrations.description\":\"Täältä löydät mukautetut integraatiot (custom_components)\",\"sections.integrations.title\":\"integraatiot\",\"store.no_repositories\":\"Ei repoja\",\"store.no_repositories_found_desc2\":\"Kokeile etsiä jotain muuta!\"},fr:{\"common.add\":\"ajouter\",\"common.appdaemon\":\"AppDaemon\",\"common.cancel\":\"Annuler\",\"common.close\":\"Fermer\",\"common.download\":\"Télécharger\",\"common.ignore\":\"Ignorer\",\"common.integration\":\"Intégration\",\"common.integration_plural\":\"Intégrations\",\"common.lovelace\":\"Lovelace\",\"common.navigate\":\"naviguer\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.python_script\":\"Script Python\",\"common.reload\":\"Recharger\",\"common.remove\":\"Désinstaller\",\"common.repositories\":\"Dépôts\",\"common.repository\":\"Dépôt\",\"common.show\":\"Afficher\",\"common.theme\":\"Thème\",\"common.update\":\"Mettre à jour\",\"common.updates\":\"Mises à jour\",\"common.yes\":\"Oui\",\"confirm.home_assistant_version_not_correct\":\"Vous exécutez la version ''{haversion}'' de Home Assistant mais ce dépôt nécessite l'installation de la version ''{minversion}'' au minimum.\",\"dialog.configured.confirm\":\"Aller aux intégrations\",\"dialog.configured.message\":\"L'intégration {name} est actuellement configurée ou ignorée ; vous devez d'abord supprimer sa configuration avant de pouvoir la désinstaller depuis HACS\",\"dialog.configured.title\":\"L'intégration est configurée\",\"dialog.reload.confirm\":\"Voulez-vous faire cela maintenant ?\",\"dialog.reload.description\":\"Vous devez vider le cache de votre navigateur lors de la modification des ressources Lovelace.\",\"dialog.remove.message\":\"Voulez-vous vraiment désinstaller {name} ?\",\"dialog.remove.title\":\"Désinstaller\",\"dialog_about.downloaded_repositories\":\"Dépôts téléchargés\",\"dialog_about.frontend_version\":\"Version de l'interface\",\"dialog_about.integration_version\":\"Version de l'intégration\",\"dialog_about.useful_links\":\"Liens utiles\",\"dialog_add_repo.limit\":\"Seuls les 100 premiers dépôts sont affichés, utilisez la recherche pour filtrer ce dont vous avez besoin\",\"dialog_add_repo.no_match\":\"Aucun dépôt trouvé correspondant à votre filtre\",\"dialog_add_repo.sort_by\":\"Trier par\",\"dialog_add_repo.sort_by_values.last_updated\":\"Dernière mise à jour\",\"dialog_add_repo.sort_by_values.name\":\"Nom\",\"dialog_add_repo.sort_by_values.stars\":\"Étoiles\",\"dialog_add_repo.title\":\"Ajouter un dépôt\",\"dialog_custom_repositories.category\":\"Catégorie\",\"dialog_custom_repositories.no_category\":\"Catégorie manquante\",\"dialog_custom_repositories.no_repository\":\"Dépôt manquant\",\"dialog_custom_repositories.title\":\"Dépôts personnalisés\",\"dialog_custom_repositories.url_placeholder\":\"Ajouter une URL de dépôt personnalisée\",\"dialog_download.lovelace_instruction\":\"Étant donné que vous n'utilisez pas Lovelace en mode « storage », une fois le téléchargement terminé, vous devrez ajouter manuellement la ressource grâce aux paramètres suivants :\",\"dialog_download.note_downloaded\":\"Ce dépôt sera téléchargé dans {location}\",\"dialog_download.restart\":\"N'oubliez pas que vous devez redémarrer Home Assistant avant que les modifications apportées aux intégrations (custom_components) soient appliquées.\",\"dialog_download.select_version\":\"Sélectionner la version\",\"dialog_download.show_beta\":\"Afficher les versions bêta\",\"dialog_download.type\":\"Type\",\"dialog_download.url\":\"URL\",\"dialog_info.author\":\"Auteur\",\"dialog_info.download\":\"Télécharger ce dépôt avec HACS\",\"dialog_info.downloads\":\"Téléchargements\",\"dialog_info.loading\":\"Chargement des informations…\",\"dialog_info.no_info\":\"Le développeur n'a pas fourni plus d'informations pour ce dépôt\",\"dialog_info.open_issues\":\"Problèmes connus\",\"dialog_info.open_repo\":\"Accéder au dépôt\",\"dialog_info.stars\":\"Étoiles\",\"dialog_info.version_installed\":\"Version téléchargée\",\"dialog_removed.link\":\"Lien externe vers plus d'informations\",\"dialog_removed.name\":\"Nom du dépôt\",\"dialog_removed.reason\":\"Raison de la suppression\",\"dialog_removed.type\":\"Type de suppression\",\"dialog_update.available_version\":\"Version disponible\",\"dialog_update.changelog\":\"Journal des modifications\",\"dialog_update.downloaded_version\":\"Version téléchargée\",\"dialog_update.message\":\"Une nouvelle version de {name} est disponible\",\"dialog_update.no_info\":\"L'auteur n'a fourni aucune information pour cette version\",\"dialog_update.releasenotes\":\"Notes de version pour {release}\",\"dialog_update.title\":\"Mise à jour en attente\",\"entry.information\":\"Informations\",\"entry.intro\":\"Les mises à jour et les messages importants s'afficheront ici s'il y en a\",\"entry.messages.disabled.constrains.description\":\"Votre environnement n'est pas compatible pour exécuter HACS, vérifiez votre fichier journal pour plus de détails.\",\"entry.messages.disabled.constrains.title\":\"Contraintes\",\"entry.messages.disabled.content\":\"Vérifiez votre fichier journal pour plus de détails\",\"entry.messages.disabled.invalid_token.description\":\"Reconfigurez HACS et redémarrez Home Assistant.\",\"entry.messages.disabled.invalid_token.title\":\"Jeton invalide\",\"entry.messages.disabled.load_hacs.description\":\"Vérifiez votre fichier journal pour plus de détails\",\"entry.messages.disabled.load_hacs.title\":\"HACS n'a pas pu charger\",\"entry.messages.disabled.rate_limit.description\":\"Les appels à l'API GitHub sont limités en nombre, cela s'effacera en moins d'une heure.\",\"entry.messages.disabled.rate_limit.title\":\"Limitation atteinte\",\"entry.messages.disabled.removed.description\":\"HACS est supprimé, redémarrez Home Assistant.\",\"entry.messages.disabled.removed.title\":\"Supprimé\",\"entry.messages.disabled.restore.description\":\"Vérifiez votre fichier journal pour plus de détails\",\"entry.messages.disabled.restore.title\":\"La restauration de HACS a échoué\",\"entry.messages.disabled.title\":\"HACS est désactivé\",\"entry.messages.has_pending_tasks.content\":\"Certains dépôts peuvent ne pas apparaître tant que cette opération n'est pas terminée\",\"entry.messages.has_pending_tasks.title\":\"Tâches d’arrière-plan en attente\",\"entry.messages.removed_repository\":\"Dépôt ''{repository}'' supprimé\",\"entry.messages.resources.content\":\"Vous avez {number} éléments Lovelace qui ne sont pas chargés correctement dans Lovelace.\",\"entry.messages.resources.title\":\"Non chargé dans Lovelace\",\"entry.messages.restart.content\":\"Vous avez {number} {pluralWording} qui nécessitent un redémarrage de Home Assistant. Vous pouvez le faire à partir de la section « Gestion du serveur » dans la partie configuration de l'interface utilisateur de Home Assistant.\",\"entry.messages.restart.title\":\"En attente de redémarrage\",\"entry.messages.setup.content\":\"HACS est en cours de configuration, pendant ce temps, certaines informations peuvent être manquantes ou incorrectes\",\"entry.messages.setup.title\":\"HACS se met en place\",\"entry.messages.startup.content\":\"HACS démarre, pendant ce temps, certaines informations peuvent être manquantes ou incorrectes\",\"entry.messages.startup.title\":\"HACS est en train de démarrer\",\"entry.messages.waiting.content\":\"HACS attend que Home Assistant termine le démarrage avant de démarrer les tâches de démarrage\",\"entry.messages.waiting.title\":\"HACS attend\",\"entry.messages.wrong_frontend_installed.content\":\"La version {running} de l'interface HACS est installée alors que la version {expected} était attendue. Si ce message s'affiche, Home Assistant n'a pas pu installer la nouvelle version ; essayez de redémarrer Home Assistant.\",\"entry.messages.wrong_frontend_installed.title\":\"Version de l'interface inattendue\",\"entry.messages.wrong_frontend_loaded.content\":\"Vous exécutez la version {running} de l'interface HACS alors que la version {expected} était attendue ; essayez de vider le cache de votre navigateur.\",\"entry.messages.wrong_frontend_loaded.title\":\"Version de l'interface inattendue\",\"entry.pending_updates\":\"Mises à jour en attente\",\"menu.about\":\"À propos de HACS\",\"menu.clear\":\"Effacer tous les nouveaux\",\"menu.custom_repositories\":\"Dépôts personnalisés\",\"menu.dismiss\":\"Rejeter tous les nouveaux dépôts\",\"menu.documentation\":\"Documentation\",\"menu.open_issue\":\"Signaler un problème\",\"menu.reload\":\"Recharger la fenêtre\",\"options.abort.not_setup\":\"HACS n'est pas configuré.\",\"options.abort.release_limit_value\":\"La limite de libération doit être comprise entre 1 et 100\",\"options.step.user.data.appdaemon\":\"Activer la découverte et le suivi des applications AppDaemon\",\"options.step.user.data.country\":\"Filtrer par code pays.\",\"options.step.user.data.debug\":\"Activer le débogage.\",\"options.step.user.data.experimental\":\"Activer les fonctionnalités expérimentales\",\"options.step.user.data.netdaemon\":\"Activer la découverte et le suivi des applications NetDaemon\",\"options.step.user.data.not_in_use\":\"Non utilisé en YAML\",\"options.step.user.data.release_limit\":\"Nombre de versions à afficher.\",\"options.step.user.data.sidepanel_icon\":\"Icône de la barre latérale\",\"options.step.user.data.sidepanel_title\":\"Titre de la barre latérale\",\"repository_card.dismiss\":\"rejeter\",\"repository_card.information\":\"Informations\",\"repository_card.new_repository\":\"Nouveau dépôt\",\"repository_card.not_loaded\":\"Non chargé\",\"repository_card.open_issue\":\"Signaler un problème\",\"repository_card.open_source\":\"Afficher le code source\",\"repository_card.pending_restart\":\"Redémarrage en attente\",\"repository_card.pending_update\":\"Mise à jour en attente\",\"repository_card.redownload\":\"Retélécharger\",\"repository_card.report\":\"Faire une demande de suppression\",\"repository_card.update_information\":\"Mettre à jour les informations\",\"search.downloaded\":\"Rechercher des dépôts téléchargés\",\"search.downloaded_new\":\"Rechercher des dépôts téléchargés ou nouveaux\",\"search.placeholder\":\"Rechercher un dépôt\",\"sections.about.description\":\"Afficher des informations sur le système HACS\",\"sections.about.title\":\"À propos\",\"sections.addon.description\":\"Il n'y a pas de modules complémentaires dans HACS, mais vous pouvez cliquer ici pour aller au superviseur\",\"sections.addon.title\":\"Modules complémentaires\",\"sections.automation.description\":\"C'est ici que vous trouverez les scripts Python ainsi que les applications AppDaemon et NetDaemon\",\"sections.automation.title\":\"Automatisation\",\"sections.frontend.description\":\"C'est ici que vous trouverez des thèmes, des cartes personnalisées et d'autres éléments pour Lovelace\",\"sections.frontend.title\":\"Interface\",\"sections.integrations.description\":\"C'est ici que vous trouverez les intégrations personnalisées (custom_components)\",\"sections.integrations.title\":\"Intégrations\",\"sections.pending_repository_upgrade\":\"Vous utilisez la version {downloaded}, la version {available} est disponible\",\"store.explore\":\"Explorer et télécharger des dépôts\",\"store.new_repositories_note\":\"De nouveaux dépôts sont affichés ici\",\"store.no_repositories\":\"Aucun dépôt\",\"store.no_repositories_desc1\":\"Il semble que vous n’avez pas encore téléchargé de dépôt dans cette section.\",\"store.no_repositories_desc2\":\"Cliquez sur le + dans le coin inférieur pour commencer à en ajouter un !\",\"store.no_repositories_found_desc1\":\"Aucun dépôt installé correspondant à « {searchInput} » n'a été trouvé dans cette section.\",\"store.no_repositories_found_desc2\":\"Essayez de chercher autre chose !\"},he:{\"common.add\":\"הוספה\",\"common.cancel\":\"ביטול\",\"common.close\":\"סגור\",\"common.download\":\"הורדה\",\"common.ignore\":\"להתעלם\",\"common.integration\":\"שילוב\",\"common.integration_plural\":\"שילובים\",\"common.lovelace\":\"Lovelace\",\"common.navigate\":\"ניווט\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.python_script\":\"סקריפט פייתון\",\"common.reload\":\"טעינה מחדש\",\"common.remove\":\"הסרה\",\"common.repositories\":\"מאגרים\",\"common.repository\":\"מאגר\",\"common.show\":\"הצג\",\"common.theme\":\"ערכת נושא\",\"common.update\":\"עדכון\",\"common.updates\":\"עדכונים\",\"common.yes\":\"כן\",\"confirm.home_assistant_version_not_correct\":\"גירסת Home Assistant ''{haversion}'' רצה, אבל באסה מאגר זה דורש מינימום גירסת ''{minversion}''.\",\"dialog.configured.confirm\":\"מעבר לשילובים\",\"dialog.configured.message\":\"תצורת השילוב {name} מוגדרת או שהמערכת מתעלמת ממנו, יש למחוק את התצורה עבורו לפני הסרתו מ-HACS\",\"dialog.configured.title\":\"תצורת השילוב מוגדרת\",\"dialog.reload.confirm\":\"לעשות את זה עכשיו?\",\"dialog.reload.description\":\"יש לטעון מחדש את הדפדפן כדי להשתמש במשאבים המעודכנים.\",\"dialog.remove.message\":\"האם בוודאות ברצונך להסיר את {name}?\",\"dialog.remove.title\":\"הסרה\",\"dialog_about.downloaded_repositories\":\"מאגרים שהורדו\",\"dialog_about.frontend_version\":\"גרסת החזותי\",\"dialog_about.integration_version\":\"גרסת שילוב\",\"dialog_about.useful_links\":\"קישורים שימושיים\",\"dialog_add_repo.limit\":\"מוצגים רק 100 המאגרים הראשונים, יש להשתמש בחיפוש כדי לסנן רק את מה שצריך\",\"dialog_add_repo.no_match\":\"לא נמצאו מאגרים התואמים את המסנן שלך\",\"dialog_add_repo.sort_by\":\"מיון לפי\",\"dialog_add_repo.sort_by_values.last_updated\":\"עודכן לאחרונה\",\"dialog_add_repo.sort_by_values.name\":\"שם\",\"dialog_add_repo.sort_by_values.stars\":\"כוכבים\",\"dialog_add_repo.title\":\"הוספת מאגר\",\"dialog_custom_repositories.category\":\"קטגוריה\",\"dialog_custom_repositories.no_category\":\"קטגוריה חסרה\",\"dialog_custom_repositories.no_repository\":\"מאגר חסר\",\"dialog_custom_repositories.title\":\"מאגרים מותאמים אישית\",\"dialog_custom_repositories.url_placeholder\":\"הוספת כתובת מאגר מותאמת אישית\",\"dialog_download.lovelace_instruction\":\"לאחר השלמת ההורדה, מכיוון שאינך משתמש ב-Lovelace במצב אחסון עליך להוסיף את המשאב באופן ידני עם הגדרות אלה:\",\"dialog_download.note_downloaded\":\"בעת ההורדה, פעולה זו תמוקם ב-{location}\",\"dialog_download.restart\":\"תזכורת, יש להפעיל מחדש את ה-Home Assistant לפני החלת שינויים בשילובים (custom_components).\",\"dialog_download.select_version\":\"בחירת גירסה\",\"dialog_download.show_beta\":\"הצגת גרסאות בטא\",\"dialog_download.type\":\"סוג\",\"dialog_download.url\":\"כתובת אתר\",\"dialog_info.author\":\"מחבר\",\"dialog_info.download\":\"הורדת מאגר זה באמצעות HACS\",\"dialog_info.downloads\":\"הורדות\",\"dialog_info.loading\":\"טוען מידע...\",\"dialog_info.no_info\":\"המפתח לא סיפק מידע נוסף עבור מאגר זה\",\"dialog_info.open_issues\":\"סוגיות פתוחים\",\"dialog_info.open_repo\":\"פתיחת מאגר\",\"dialog_info.stars\":\"כוכבים\",\"dialog_info.version_installed\":\"גירסה שהורדה\",\"dialog_removed.link\":\"קישור חיצוני למידע נוסף\",\"dialog_removed.name\":\"שם המאגר\",\"dialog_removed.reason\":\"סיבת ההסרה\",\"dialog_removed.type\":\"סוג הסרה\",\"dialog_update.available_version\":\"גירסה זמינה\",\"dialog_update.changelog\":\"יומן שינויים\",\"dialog_update.downloaded_version\":\"גרסה שהורדה\",\"dialog_update.message\":\"גירסה חדשה של {name} זמינה\",\"dialog_update.no_info\":\"המחבר לא סיפק כל מידע עבור שיחרור זו\",\"dialog_update.releasenotes\":\"הערות שחרור עבור {release}\",\"dialog_update.title\":\"עדכון ממתין\",\"entry.information\":\"מידע\",\"entry.intro\":\"עדכונים והודעות חשובות יופיעו כאן אם יש כאלה\",\"entry.messages.disabled.constrains.description\":\"הסביבה שלך אינה תואמת להפעלת HACS, יש לבדוק את קובץ היומן שלך לקבלת פרטים נוספים.\",\"entry.messages.disabled.constrains.title\":\"אילוצים\",\"entry.messages.disabled.content\":\"יש לבדוק את קובץ היומן שלך לקבלת פרטים נוספים\",\"entry.messages.disabled.invalid_token.description\":\"יש להגדיר מחדש את HACS ולהפעיל מחדש את Home Assistant.\",\"entry.messages.disabled.invalid_token.title\":\"אסימון לא חוקי\",\"entry.messages.disabled.load_hacs.description\":\"יש לבדוק את קובץ היומן שלך לקבלת פרטים נוספים\",\"entry.messages.disabled.load_hacs.title\":\"טעינת HACS לא הצליחה\",\"entry.messages.disabled.rate_limit.description\":\"קריאות ה-API של GitHub מוגבלות, זה אמור להסתדר תוך פחות משעה.\",\"entry.messages.disabled.rate_limit.title\":\"רמה מוגבלת\",\"entry.messages.disabled.removed.description\":\"HACS הוסר, יש להפעיל מחדש את Home Assistant.\",\"entry.messages.disabled.removed.title\":\"הוסר\",\"entry.messages.disabled.restore.description\":\"יש לבדוק את קובץ היומן שלך לקבלת פרטים נוספים\",\"entry.messages.disabled.restore.title\":\"שחזור HACS נכשל\",\"entry.messages.disabled.title\":\"HACS מושבת\",\"entry.messages.has_pending_tasks.content\":\"ייתכן שמאגרים מסוימים לא יופיעו עד להשלמת פעולה זו\",\"entry.messages.has_pending_tasks.title\":\"משימות רקע ממתינות\",\"entry.messages.removed_repository\":\"מאגר שהוסר ''{repository}''\",\"entry.messages.resources.content\":\"יש לך {number} רכיבי Lovelace שאינם נטענים כראוי ב-Lovelace.\",\"entry.messages.resources.title\":\"לא טעון ב-Lovelace\",\"entry.messages.restart.content\":\"יש לך {number} {pluralWording} שעבורם נדרשת הפעלה מחדש של Home Assistant. באפשרותך לעשות זאת מהמקטע 'פקדי שרת' תחת חלק התצורה של ממשק המשתמש של Home Assistant.\",\"entry.messages.restart.title\":\"ממתין להפעלה מחדש\",\"entry.messages.setup.content\":\"HACS מוגדר, במהלך זמן זה מידע עלול להיות חסר או שגוי\",\"entry.messages.setup.title\":\"HACS מוגדר\",\"entry.messages.startup.content\":\"HACS מתחיל לפעול, במהלך זמן זה מידע עלול להיות חסר או שגוי\",\"entry.messages.startup.title\":\"HACS מתחיל לפעול\",\"entry.messages.waiting.content\":\"HACS ממתין ש-Home Assistant יסיים את ההפעלה לפני הפעלת משימות האתחול\",\"entry.messages.waiting.title\":\"HACS ממתין\",\"entry.messages.wrong_frontend_installed.content\":\"יש לך ממשק חזותי של HACS בגרסה {running}, אבל המערכת ציפתה לגרסה {expected}. איזו באסה, אם זו ההודעה שמוצגת לך, Home Assistant לא הצליח להתקין את הגרסה החדשה, יש לנסות להפעיל מחדש את Home Assistant.\",\"entry.messages.wrong_frontend_installed.title\":\"גרסת חזית לא צפויה\",\"entry.messages.wrong_frontend_loaded.content\":\"יש לך ממשק חזותי של HACS בגרסה {running}, אבל המערכת ציפתה לגרסה {expected}, יש לנקות את מטמון הדפדפן.\",\"entry.messages.wrong_frontend_loaded.title\":\"גרסת חזית לא צפויה\",\"entry.pending_updates\":\"עדכונים ממתינים\",\"menu.about\":\"אודות HACS\",\"menu.clear\":\"ניקוי כל החדשים\",\"menu.custom_repositories\":\"מאגרים מותאמים אישית\",\"menu.dismiss\":\"דחיית מאגרים חדשים\",\"menu.documentation\":\"תיעוד\",\"menu.open_issue\":\"פתיחת סוגיה\",\"menu.reload\":\"טעינת חלון מחדש\",\"options.abort.not_setup\":\"HACS אינו מוגדר.\",\"options.abort.release_limit_value\":\"מגבלת השחרור צריכה להיות בין 1 ל-100\",\"options.step.user.data.appdaemon\":\"איפשור גילוי ומעקב אחר יישומי AppDaemon\",\"options.step.user.data.country\":\"סינון לפי קידומת מדינה.\",\"options.step.user.data.debug\":\"איפשור איתור באגים.\",\"options.step.user.data.experimental\":\"אפשור תכונות ניסיוניות\",\"options.step.user.data.netdaemon\":\"איפשור גילוי ומעקב אחר יישומי NetDaemon\",\"options.step.user.data.not_in_use\":\"לא בשימוש עם YAML\",\"options.step.user.data.release_limit\":\"מספר השיחרורים להצגה.\",\"options.step.user.data.sidepanel_icon\":\"סמליל חלונית הצד\",\"options.step.user.data.sidepanel_title\":\"כותרת חלונית הצד\",\"repository_card.dismiss\":\"דחייה\",\"repository_card.information\":\"מידע\",\"repository_card.new_repository\":\"מאגר חדש\",\"repository_card.not_loaded\":\"לא נטען\",\"repository_card.open_issue\":\"פתיחת נושא\",\"repository_card.open_source\":\"פתיחת מקור\",\"repository_card.pending_restart\":\"ממתין להפעלה מחדש\",\"repository_card.pending_update\":\"ממתין לעדכון\",\"repository_card.redownload\":\"הורדה מחדש\",\"repository_card.report\":\"בקשה להסרה\",\"repository_card.update_information\":\"עדכון מידע\",\"search.downloaded\":\"חיפוש מאגרים שהורדת\",\"search.downloaded_new\":\"חיפוש מאגרים שהורדו או חדשים\",\"search.placeholder\":\"חיפוש מאגר\",\"sections.about.description\":\"הצגת מידע אודות HACS\",\"sections.about.title\":\"אודות\",\"sections.addon.description\":\"אין הרחבות ב-HACS, אבל היי אפשר ללחוץ כאן כדי להגיע למפקח\",\"sections.addon.title\":\"הרחבות\",\"sections.automation.description\":\"זה המקום בו ניתן למצוא את python_scripts, יישומי AppDaemon ויישומי NetDaemon\",\"sections.automation.title\":\"אוטומציה\",\"sections.frontend.description\":\"זה המקום בו ניתן למצוא נושאים, כרטיסים מותאמים אישית ואלמנטים אחרים עבור lovelace\",\"sections.frontend.title\":\"חזותי\",\"sections.integrations.description\":\"זה המקום בו ניתן למצוא שילובים מותאמים אישית (custom_components)\",\"sections.integrations.title\":\"שילובים\",\"sections.pending_repository_upgrade\":\"גרסה {downloaded} רצה, גרסה {available} זמינה\",\"store.explore\":\"חקירה והורדת מאגרים\",\"store.new_repositories_note\":\"יש כמה מאגרים חדשים שמוצגים כאן\",\"store.no_repositories\":\"אין מאגרים\",\"store.no_repositories_desc1\":\"נראה שעדיין לא הורדת מאגרים במקטע זה.\",\"store.no_repositories_desc2\":\"יש ללחוץ על + בפינה התחתונה בכדי להוסיף את הראשון שלך!\",\"store.no_repositories_found_desc1\":'לא נמצאו מאגרים שהורדו התואמים ל-\"{searchInput}\" במקטע זה.',\"store.no_repositories_found_desc2\":\"יאללה ננסה לחפש משהו אחר!\"},hu:{\"common.add\":\"hozzáadás\",\"common.appdaemon\":\"AppDaemon\",\"common.cancel\":\"Mégse\",\"common.close\":\"Bezárás\",\"common.download\":\"Letöltés\",\"common.ignore\":\"Mellőzés\",\"common.integration\":\"Integráció\",\"common.integration_plural\":\"Integrációk\",\"common.lovelace\":\"Lovelace\",\"common.navigate\":\"navigálás\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.python_script\":\"Python szkript\",\"common.reload\":\"Újratöltés\",\"common.remove\":\"Eltávolítás\",\"common.repositories\":\"Repók\",\"common.repository\":\"Repó\",\"common.show\":\"Megjelenítés\",\"common.theme\":\"Téma\",\"common.update\":\"Frissítés\",\"common.updates\":\"Frissítések\",\"common.yes\":\"Igen\",\"confirm.home_assistant_version_not_correct\":\"Home Assistant ''{haversion}'' verziója fut, de ehhez a repóhoz legalább ''{minversion}'' verzióra van szükség.\",\"dialog.configured.confirm\":\"Ugrás az integrációkhoz\",\"dialog.configured.message\":\"{name} integráció be van konfigurálva, ezért előbb törölnie kell annak konfigurációját, mielőtt eltávolítaná a HACS-ból\",\"dialog.configured.title\":\"Az integráció be van konfigurálva\",\"dialog.reload.confirm\":\"Meg szeretné most ezt tenni?\",\"dialog.reload.description\":\"Törölnie kell a böngésző gyorsítótárát a Lovelace erőforrások módosításakor.\",\"dialog.remove.message\":\"Biztos benne, hogy el szeretné távolítani: {name}?\",\"dialog.remove.title\":\"Eltávolítás\",\"dialog_about.downloaded_repositories\":\"Letöltött repók\",\"dialog_about.frontend_version\":\"Frontend verzió\",\"dialog_about.integration_version\":\"Integráció verzió\",\"dialog_about.useful_links\":\"Hasznos linkek\",\"dialog_add_repo.limit\":\"Csak az első 100 repó jelenik meg, használja a keresőt a találatok szűkítéséhez\",\"dialog_add_repo.no_match\":\"Nincs a szűrésnek megfelelő repó\",\"dialog_add_repo.sort_by\":\"Rendezés\",\"dialog_add_repo.sort_by_values.last_updated\":\"Utoljára frissítve\",\"dialog_add_repo.sort_by_values.name\":\"Név\",\"dialog_add_repo.sort_by_values.stars\":\"Csillag\",\"dialog_add_repo.title\":\"Repó hozzáadása\",\"dialog_custom_repositories.category\":\"Kategória\",\"dialog_custom_repositories.no_category\":\"Hiányzó kategória\",\"dialog_custom_repositories.no_repository\":\"Hiányzó repó\",\"dialog_custom_repositories.title\":\"Egyedi repók\",\"dialog_custom_repositories.url_placeholder\":\"Egyedi repó URL címének hozzáadása\",\"dialog_download.lovelace_instruction\":\"Miután a letöltés befejeződött, mivel a Lovelace-t nem tárolási módban használja, manuálisan kell hozzáadni az erőforrást ezekkel a beállításokkal:\",\"dialog_download.note_downloaded\":\"Letöltéskor ez a következő helyen lesz: {location}\",\"dialog_download.restart\":\"Ne feledje, hogy az egyedi integrációk (custom_components) módosításainak alkalmazásához újra kell indítani Home Assistantot.\",\"dialog_download.select_version\":\"Verzió kiválasztása\",\"dialog_download.show_beta\":\"Béta verziók megjelenítése\",\"dialog_download.type\":\"Típus\",\"dialog_download.url\":\"URL\",\"dialog_info.author\":\"Szerző\",\"dialog_info.download\":\"Repó letöltése HACS-al\",\"dialog_info.downloads\":\"Letöltések\",\"dialog_info.loading\":\"Információ betöltése...\",\"dialog_info.no_info\":\"A fejlesztő nem adott meg több információt ehhez a repóhoz\",\"dialog_info.open_issues\":\"Jelentett problémák\",\"dialog_info.open_repo\":\"Repó megnyitása\",\"dialog_info.stars\":\"Csillagok\",\"dialog_info.version_installed\":\"Letöltött verzió\",\"dialog_removed.link\":\"Külső link további információkhoz\",\"dialog_removed.name\":\"Repó neve\",\"dialog_removed.reason\":\"Eltávolítás oka\",\"dialog_removed.type\":\"Eltávolítás típusa\",\"dialog_update.available_version\":\"Elérhető verzió\",\"dialog_update.changelog\":\"Változási napló\",\"dialog_update.downloaded_version\":\"Letöltött verzió\",\"dialog_update.message\":\"Új verzió elérhető: {name}\",\"dialog_update.no_info\":\"A szerző semmilyen információt nem adott meg ehhez a kiadáshoz\",\"dialog_update.releasenotes\":\"{release} kiadási megjegyzései\",\"dialog_update.title\":\"Frissítés érhető el\",\"entry.information\":\"Információ\",\"entry.intro\":\"A frissítések és a fontos üzenetek itt jelennek meg, ha vannak\",\"entry.messages.disabled.constrains.description\":\"A futtatási környezet nem kompatibilis a HACS-al, további részletekért nézze meg a naplófájlokat.\",\"entry.messages.disabled.constrains.title\":\"Korlátozások\",\"entry.messages.disabled.content\":\"További részletek a naplófájlban\",\"entry.messages.disabled.invalid_token.description\":\"HACS újrakonfigurálása, és Home Assistant újraindítása.\",\"entry.messages.disabled.invalid_token.title\":\"Érvénytelen token\",\"entry.messages.disabled.load_hacs.description\":\"További részletek a naplófájlban\",\"entry.messages.disabled.load_hacs.title\":\"HACS betöltése nem sikerült\",\"entry.messages.disabled.rate_limit.description\":\"A GitHub API hívásai korlátozva vannak most, de ez kevesebb, mint 1 óra múlva rendben lesz.\",\"entry.messages.disabled.rate_limit.title\":\"Korlátozva\",\"entry.messages.disabled.removed.description\":\"HACS eltávolításra került, most indítsa újra Home Assistant-ot.\",\"entry.messages.disabled.removed.title\":\"Eltávolítva\",\"entry.messages.disabled.restore.description\":\"További részletek a naplófájlban\",\"entry.messages.disabled.restore.title\":\"HACS visszaállítása nem sikerült\",\"entry.messages.disabled.title\":\"HACS le van tiltva\",\"entry.messages.has_pending_tasks.content\":\"Előfordulhat, hogy egyes repók nem jelennek meg, amíg ez be nem fejeződik\",\"entry.messages.has_pending_tasks.title\":\"Függőben lévő háttérfeladatok\",\"entry.messages.removed_repository\":\"''{repository}'' repó eltávolítva\",\"entry.messages.resources.content\":\"{number} olyan Lovelace elem van, amely nincs megfelelően betöltve Lovelace-ben.\",\"entry.messages.resources.title\":\"Nincs betöltve Lovelace-ben\",\"entry.messages.restart.content\":\"{number} {pluralWording} miatt szükséges újraindítani Home Assistant-ot. Ezt a „Szerver vezérlés > Szerver menedzsment” konfigurációs részben teheti meg.\",\"entry.messages.restart.title\":\"Várakozás újraindításra\",\"entry.messages.setup.content\":\"HACS beállítása folyamatban van, ez idő alatt bizonyos információk hiányozhatnak vagy helytelenek lehetnek\",\"entry.messages.setup.title\":\"HACS beállítása folyamatban van\",\"entry.messages.startup.content\":\"HACS éppen indul, ez idő alatt bizonyos információk hiányozhatnak vagy helytelenek lehetnek\",\"entry.messages.startup.title\":\"HACS éppen indul\",\"entry.messages.waiting.content\":\"HACS az indítási feladatok megkezdése előtt arra vár, hogy Home Assistant befejezze saját indulását\",\"entry.messages.waiting.title\":\"HACS várakozik\",\"entry.messages.wrong_frontend_installed.content\":\"A HACS kezelőfelületének {running} verziója fut, miközben {expected} verziónak kellene lennie. Ha ezt az üzenetet látja, Home Assistant nem tudta a friss verziót telepíteni. Kérem próbálja meg újraindítani a rendszert.\",\"entry.messages.wrong_frontend_installed.title\":\"Nem várt frontend verzió\",\"entry.messages.wrong_frontend_loaded.content\":\"A HACS kezelőfelületének {running} verziója fut, miközben {expected} verziónak kellene lennie. Kérem, törölje a böngésző gyorsítótárát!\",\"entry.messages.wrong_frontend_loaded.title\":\"Nem várt frontend verzió\",\"entry.pending_updates\":\"Frissítések érhetők el\",\"menu.about\":\"HACS névjegye\",\"menu.clear\":\"Új jelölések törlése\",\"menu.custom_repositories\":\"Egyedi repók\",\"menu.dismiss\":\"Minden új repó elvetése\",\"menu.documentation\":\"Dokumentáció\",\"menu.open_issue\":\"Probléma jelentése\",\"menu.reload\":\"Ablak újratöltése\",\"options.abort.not_setup\":\"HACS nincs beállítva.\",\"options.abort.release_limit_value\":\"A kiadás értékének 1 és 100 között kell lennie.\",\"options.step.user.data.appdaemon\":\"AppDaemon appok felfedezésének és nyomon követésének engedélyezése\",\"options.step.user.data.country\":\"Szűrés országkóddal.\",\"options.step.user.data.debug\":\"Hibakeresés engedélyezése.\",\"options.step.user.data.experimental\":\"Kísérleti funkciók engedélyezése\",\"options.step.user.data.netdaemon\":\"NetDaemon appok felfedezésének és nyomon követésének engedélyezése\",\"options.step.user.data.not_in_use\":\"YAML-lel nem használható\",\"options.step.user.data.release_limit\":\"Megjelenítendő kiadások száma.\",\"options.step.user.data.sidepanel_icon\":\"Oldalsó panel ikon\",\"options.step.user.data.sidepanel_title\":\"Oldalsó panel cím\",\"repository_card.dismiss\":\"elvetés\",\"repository_card.information\":\"Információ\",\"repository_card.new_repository\":\"Új repó\",\"repository_card.not_loaded\":\"Nincs betöltve\",\"repository_card.open_issue\":\"Probléma jelentése\",\"repository_card.open_source\":\"Forrás megnyitása\",\"repository_card.pending_restart\":\"Várakozás újraindításra\",\"repository_card.pending_update\":\"Frissítés érhető el\",\"repository_card.redownload\":\"Újratelepítés\",\"repository_card.report\":\"Jelentés eltávolításra\",\"repository_card.update_information\":\"Frissítési információ\",\"search.downloaded\":\"Telepített repók keresése\",\"search.downloaded_new\":\"Telepített vagy új repók keresése\",\"search.placeholder\":\"Repó keresése\",\"sections.about.description\":\"Információk megjelenítése HACS-ről\",\"sections.about.title\":\"Névjegy\",\"sections.addon.description\":\"HACS-ban nincsenek kiegészítők, de ide kattintva továbbmehet a supervisor-hoz\",\"sections.addon.title\":\"Kiegészítők\",\"sections.automation.description\":\"Itt Python szkriptek, AppDaemon és NetDaemon appok találhatók\",\"sections.automation.title\":\"Automatizmus\",\"sections.frontend.description\":\"Itt a Lovelace kezelőfelülethez egyedi témák, kártyák és egyéb bővítmények találhatók\",\"sections.frontend.title\":\"Frontend\",\"sections.integrations.description\":\"Itt egyedi integrációk (custom_components) találhatók\",\"sections.integrations.title\":\"Integrációk\",\"sections.pending_repository_upgrade\":\"{downloaded}. verzió fut, de elérhető: {available}.\",\"store.explore\":\"Repók keresése és hozzáadása\",\"store.new_repositories_note\":\"Új repók jelentek meg\",\"store.no_repositories\":\"Nincsenek repók\",\"store.no_repositories_desc1\":\"Úgy tűnik, még nincsenek telepítve repók ebben a szekcióban.\",\"store.no_repositories_desc2\":\"Kattintson az alsó sarokban található + jelre az első hozzáadásához!\",\"store.no_repositories_found_desc1\":'Nem található \"{searchInput}\"-nak megfelelő telepített repó.',\"store.no_repositories_found_desc2\":\"Próbáljon valami mást keresni!\"},it:{\"common.add\":\"aggiungi\",\"common.appdaemon\":\"AppDaemon\",\"common.cancel\":\"Annulla\",\"common.close\":\"Chiudi\",\"common.download\":\"Scarica\",\"common.ignore\":\"Ignora\",\"common.integration\":\"Integrazione\",\"common.integration_plural\":\"Integrazioni\",\"common.lovelace\":\"Lovelace\",\"common.navigate\":\"naviga\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.python_script\":\"Script Python\",\"common.reload\":\"Ricarica\",\"common.remove\":\"Rimuovi\",\"common.repositories\":\"Repository\",\"common.repository\":\"Repository\",\"common.show\":\"Mostra\",\"common.theme\":\"Tema\",\"common.update\":\"Aggiorna\",\"common.updates\":\"Aggiornamenti\",\"common.yes\":\"Sì\",\"confirm.home_assistant_version_not_correct\":\"Stai eseguendo la versione ''{haversion}'' di Home Assistant, ma questo repository richiede la versione minima ''{minversion}'' per essere installato.\",\"dialog.configured.confirm\":\"Vai alle integrazioni\",\"dialog.configured.message\":\"L'integrazione {name} è configurata o ignorata, è necessario eliminare la sua configurazione prima di rimuoverla da HACS\",\"dialog.configured.title\":\"L'integrazione è configurata\",\"dialog.reload.confirm\":\"Vuoi farlo adesso?\",\"dialog.reload.description\":\"È necessario ricaricare il browser per utilizzare le risorse aggiornate.\",\"dialog.remove.message\":\"Vuoi davvero rimuovere {name}?\",\"dialog.remove.title\":\"Rimuovi\",\"dialog_about.downloaded_repositories\":\"Repository scaricati\",\"dialog_about.frontend_version\":\"Versione frontend\",\"dialog_about.integration_version\":\"Versione dell'integrazione\",\"dialog_about.useful_links\":\"Collegamenti utili\",\"dialog_add_repo.limit\":\"Vengono visualizzati solo i primi 100 repository, utilizza la ricerca per filtrare ciò di cui hai bisogno\",\"dialog_add_repo.no_match\":\"Nessun repository trovato corrispondente al tuo filtro\",\"dialog_add_repo.sort_by\":\"Ordina per\",\"dialog_add_repo.sort_by_values.last_updated\":\"Ultimo aggiornamento\",\"dialog_add_repo.sort_by_values.name\":\"Nome\",\"dialog_add_repo.sort_by_values.stars\":\"Stelle\",\"dialog_add_repo.title\":\"Aggiungi repository\",\"dialog_custom_repositories.category\":\"Categoria\",\"dialog_custom_repositories.no_category\":\"Categoria mancante\",\"dialog_custom_repositories.no_repository\":\"Repository mancante\",\"dialog_custom_repositories.title\":\"Repository personalizzati\",\"dialog_custom_repositories.url_placeholder\":\"Aggiungi l'URL del repository personalizzato\",\"dialog_download.lovelace_instruction\":\"Al termine dello scaricamento, poiché non stai utilizzando Lovelace in modalità di archiviazione, devi aggiungere manualmente la risorsa con queste impostazioni:\",\"dialog_download.note_downloaded\":\"Una volta scaricato, si troverà in {location}\",\"dialog_download.restart\":\"Ricorda che devi riavviare Home Assistant prima che vengano applicate le modifiche alle integrazioni (custom_components).\",\"dialog_download.select_version\":\"Seleziona la versione\",\"dialog_download.show_beta\":\"Mostra versioni beta\",\"dialog_download.type\":\"Tipo\",\"dialog_download.url\":\"URL\",\"dialog_info.author\":\"Autore\",\"dialog_info.download\":\"Scarica questo repository con HACS\",\"dialog_info.downloads\":\"Download\",\"dialog_info.loading\":\"Caricamento informazioni...\",\"dialog_info.no_info\":\"Lo sviluppatore non ha fornito ulteriori informazioni per questo repository\",\"dialog_info.open_issues\":\"Problemi irrisolti\",\"dialog_info.open_repo\":\"Apri il repository\",\"dialog_info.stars\":\"Stelle\",\"dialog_info.version_installed\":\"Versione scaricata\",\"dialog_removed.link\":\"Collegamento esterno a ulteriori informazioni\",\"dialog_removed.name\":\"Nome del repository\",\"dialog_removed.reason\":\"Motivo della rimozione\",\"dialog_removed.type\":\"Tipo di rimozione\",\"dialog_update.available_version\":\"Versione disponibile\",\"dialog_update.changelog\":\"Registro delle modifiche\",\"dialog_update.downloaded_version\":\"Versione scaricata\",\"dialog_update.message\":\"È disponibile la nuova versione di {name}\",\"dialog_update.no_info\":\"L'autore non ha fornito alcuna informazione per questa versione\",\"dialog_update.releasenotes\":\"Note di rilascio per {release}\",\"dialog_update.title\":\"Aggiornamento in sospeso\",\"entry.information\":\"Informazioni\",\"entry.intro\":\"Gli aggiornamenti e i messaggi importanti saranno visualizzati qui, se presenti\",\"entry.messages.disabled.constrains.description\":\"Il tuo ambiente non è compatibile per eseguire HACS, controlla il tuo file di registro per maggiori dettagli.\",\"entry.messages.disabled.constrains.title\":\"Vincoli\",\"entry.messages.disabled.content\":\"Controlla il tuo file di registro per maggiori dettagli\",\"entry.messages.disabled.invalid_token.description\":\"Riconfigura HACS e riavvia Home Assistant.\",\"entry.messages.disabled.invalid_token.title\":\"Token non valido\",\"entry.messages.disabled.load_hacs.description\":\"Controlla il tuo file di registro per maggiori dettagli\",\"entry.messages.disabled.load_hacs.title\":\"Impossibile caricare HACS\",\"entry.messages.disabled.rate_limit.description\":\"Le chiamate API di GitHub sono limitate, questo limite verrà cancellato in meno di 1 ora.\",\"entry.messages.disabled.rate_limit.title\":\"Limitazione\",\"entry.messages.disabled.removed.description\":\"HACS è stato rimosso, riavvia Home Assistant.\",\"entry.messages.disabled.removed.title\":\"Rimosso\",\"entry.messages.disabled.restore.description\":\"Controlla il tuo file di registro per maggiori dettagli\",\"entry.messages.disabled.restore.title\":\"Ripristino di HACS non riuscito\",\"entry.messages.disabled.title\":\"HACS è disabilitato\",\"entry.messages.has_pending_tasks.content\":\"Alcuni repository potrebbero non essere visualizzati fino al completamento\",\"entry.messages.has_pending_tasks.title\":\"Attività in background in sospeso\",\"entry.messages.removed_repository\":\"Repository ''{repository}'' rimosso\",\"entry.messages.resources.content\":\"Hai {number} elementi di Lovelace che non sono stati caricati correttamente in Lovelace.\",\"entry.messages.resources.title\":\"Non caricato in Lovelace\",\"entry.messages.restart.content\":'Hai {number} {pluralWording} da installare per cui è necessario riavviare Home Assistant. Puoi farlo dalla sezione \"Gestione del server\" nella \"Configurazione\" dell\\'interfaccia utente di Home Assistant.',\"entry.messages.restart.title\":\"Riavvio in sospeso\",\"entry.messages.setup.content\":\"HACS è in fase di configurazione, durante questo periodo alcune informazioni potrebbero essere mancanti o errate\",\"entry.messages.setup.title\":\"HACS si sta configurando\",\"entry.messages.startup.content\":\"HACS si sta avviando, durante questo periodo alcune informazioni potrebbero essere mancanti o errate\",\"entry.messages.startup.title\":\"HACS si sta avviando\",\"entry.messages.waiting.content\":\"HACS è in attesa che Home Assistant finisca l'avvio prima di iniziare le attività di avvio\",\"entry.messages.waiting.title\":\"HACS è in attesa\",\"entry.messages.wrong_frontend_installed.content\":\"Hai installato la versione {running} del frontend HACS, ma era attesa la versione {expected}, se vedi questo messaggio Home Assistant non è stato in grado di installare la nuova versione, prova a riavviare Home Assistant.\",\"entry.messages.wrong_frontend_installed.title\":\"Versione frontend inattesa\",\"entry.messages.wrong_frontend_loaded.content\":\"Stai eseguendo la versione {running} del frontend HACS, ma era prevista la versione {expected}, è necessario svuotare la cache del browser.\",\"entry.messages.wrong_frontend_loaded.title\":\"Versione frontend inattesa\",\"entry.pending_updates\":\"Aggiornamenti in sospeso\",\"menu.about\":\"Informazioni su HACS\",\"menu.clear\":\"Nascondi novità\",\"menu.custom_repositories\":\"Repository personalizzati\",\"menu.dismiss\":\"Nascondi nuovi repository\",\"menu.documentation\":\"Documentazione\",\"menu.open_issue\":\"Problemi irrisolti\",\"menu.reload\":\"Ricarica la finestra\",\"options.abort.not_setup\":\"HACS non è configurato.\",\"options.abort.release_limit_value\":\"Il limite di rilascio deve essere compreso tra 1 e 100\",\"options.step.user.data.appdaemon\":\"Abilita il rilevamento e il monitoraggio delle applicazioni AppDaemon\",\"options.step.user.data.country\":\"Filtra con prefisso internazionale.\",\"options.step.user.data.debug\":\"Abilita debug.\",\"options.step.user.data.experimental\":\"Abilita funzionalità sperimentali\",\"options.step.user.data.netdaemon\":\"Abilita il rilevamento e il monitoraggio delle applicazioni NetDaemon\",\"options.step.user.data.not_in_use\":\"Non in uso con YAML\",\"options.step.user.data.release_limit\":\"Numero di versioni da mostrare.\",\"options.step.user.data.sidepanel_icon\":\"Icona nel pannello laterale\",\"options.step.user.data.sidepanel_title\":\"Titolo nel pannello laterale\",\"repository_card.dismiss\":\"nascondi\",\"repository_card.information\":\"Informazioni\",\"repository_card.new_repository\":\"Nuovo repository\",\"repository_card.not_loaded\":\"Non caricato\",\"repository_card.open_issue\":\"Problemi irrisolti\",\"repository_card.open_source\":\"Open source\",\"repository_card.pending_restart\":\"In attesa di riavvio\",\"repository_card.pending_update\":\"Aggiornamento in sospeso\",\"repository_card.redownload\":\"Scarica di nuovo\",\"repository_card.report\":\"Richiesta di rimozione\",\"repository_card.update_information\":\"Aggiorna informazioni\",\"search.downloaded\":\"Cerca i repository scaricati\",\"search.downloaded_new\":\"Cerca i repository scaricati o nuovi\",\"search.placeholder\":\"Cerca repository\",\"sections.about.description\":\"Mostra informazioni su HACS\",\"sections.about.title\":\"Informazioni su\",\"sections.addon.description\":\"Non ci sono componenti aggiuntivi in HACS, ma puoi fare clic qui per accedere al Supervisor\",\"sections.addon.title\":\"Componenti aggiuntivi\",\"sections.automation.description\":\"Qui trovi python_scripts, le applicazioni AppDaemon e NetDaemon\",\"sections.automation.title\":\"Automazione\",\"sections.frontend.description\":\"Qui trovi i temi, le schede personalizzate e altri elementi per Lovelace\",\"sections.frontend.title\":\"Frontend\",\"sections.integrations.description\":\"Qui trovi le integrazioni personalizzate (custom_components)\",\"sections.integrations.title\":\"Integrazioni\",\"sections.pending_repository_upgrade\":\"Stai eseguendo la versione {downloaded}, è disponibile la nuova versione {available}\",\"store.explore\":\"Esplora e scarica repository\",\"store.new_repositories_note\":\"Qui sono mostrati alcuni nuovi repository\",\"store.no_repositories\":\"Nessun repository\",\"store.no_repositories_desc1\":\"Sembra che tu non abbia ancora scaricato alcun repository in questa sezione.\",\"store.no_repositories_desc2\":\"Fai clic sul + nell'angolo in basso per aggiungere il tuo primo!\",\"store.no_repositories_found_desc1\":'Nessun repository scaricato corrispondente a \"{searchInput}\" trovato in questa sezione.',\"store.no_repositories_found_desc2\":\"Prova a cercare qualcos'altro!\"},nb:{\"common.add\":\"legg til\",\"common.appdaemon\":\"AppDaemon\",\"common.cancel\":\"Avbryt\",\"common.close\":\"Lukk\",\"common.download\":\"Laste ned\",\"common.ignore\":\"Ignorere\",\"common.integration\":\"Integrasjon\",\"common.integration_plural\":\"Integrasjoner\",\"common.lovelace\":\"Lovelace\",\"common.navigate\":\"navigere\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.python_script\":\"Python-skript\",\"common.reload\":\"Last inn på nytt\",\"common.remove\":\"Fjern\",\"common.repositories\":\"Pakkelagre\",\"common.repository\":\"Pakkelager\",\"common.show\":\"Vise\",\"common.theme\":\"Tema\",\"common.update\":\"Oppdater\",\"common.updates\":\"Oppdateringer\",\"common.yes\":\"Ja\",\"confirm.home_assistant_version_not_correct\":\"Du kjører Home Assistant ''{haversion}'', men dette pakkelageret krever minimum versjon ''{minversion}'' for å bli installert.\",\"dialog.configured.confirm\":\"Gå til integrasjoner\",\"dialog.configured.message\":\"{name} -integrasjonen er konfigurert eller ignorert, du må slette konfigurasjonen for den før du fjerner den fra HACS\",\"dialog.configured.title\":\"Integrasjon er konfigurert\",\"dialog.reload.confirm\":\"Vil du gjøre det nå?\",\"dialog.reload.description\":\"Du må laste inn nettleseren på nytt for at de oppdaterte ressursene skal kunne brukes.\",\"dialog.remove.message\":\"Vil du virkelig fjerne {name} ?\",\"dialog.remove.title\":\"Fjern\",\"dialog_about.downloaded_repositories\":\"Nedlastede pakkelagre\",\"dialog_about.frontend_version\":\"Frontend versjon\",\"dialog_about.integration_version\":\"Integrasjonsversjon\",\"dialog_about.useful_links\":\"Nyttige lenker\",\"dialog_add_repo.limit\":\"Bare de første 100 pakkelagrene vises, bruk søket til å filtrere det du trenger\",\"dialog_add_repo.no_match\":\"Ingen pakkelagre funnet som samsvarer med filteret ditt\",\"dialog_add_repo.sort_by\":\"Sorter etter\",\"dialog_add_repo.sort_by_values.last_updated\":\"Sist oppdatert\",\"dialog_add_repo.sort_by_values.name\":\"Navn\",\"dialog_add_repo.sort_by_values.stars\":\"Stjerner\",\"dialog_add_repo.title\":\"Legg til pakkelager\",\"dialog_custom_repositories.category\":\"Kategori\",\"dialog_custom_repositories.no_category\":\"Mangler kategori\",\"dialog_custom_repositories.no_repository\":\"Mangler pakkelager\",\"dialog_custom_repositories.title\":\"Tilpassede pakkelagre\",\"dialog_custom_repositories.url_placeholder\":\"Legg til tilpasset pakkelager URL\",\"dialog_download.lovelace_instruction\":\"Etter at nedlastingen er fullført, siden du ikke bruker Lovelace i lagringsmodus, må du manuelt legge til ressursen med disse innstillingene:\",\"dialog_download.note_downloaded\":\"Når det er lastet ned, vil dette være plassert i {location}\",\"dialog_download.restart\":\"Husk at du må starte Home Assistant på nytt før endringer i integrasjoner (custom_components) brukes.\",\"dialog_download.select_version\":\"Velg versjon\",\"dialog_download.show_beta\":\"Vis betaversjoner\",\"dialog_download.type\":\"Type\",\"dialog_download.url\":\"URL\",\"dialog_info.author\":\"Utgiver\",\"dialog_info.download\":\"Last ned dette pakkelageret med HACS\",\"dialog_info.downloads\":\"Nedlastinger\",\"dialog_info.loading\":\"Laster inn informasjon ...\",\"dialog_info.no_info\":\"Utvikleren har ikke gitt mer informasjon for dette pakkelageret\",\"dialog_info.open_issues\":\"Åpne problemer\",\"dialog_info.open_repo\":\"Åpne pakkelager nettsted\",\"dialog_info.stars\":\"Stjerner\",\"dialog_info.version_installed\":\"Nedlasted versjon\",\"dialog_removed.link\":\"Ekstern lenke til mer informasjon\",\"dialog_removed.name\":\"Navn på pakkelager\",\"dialog_removed.reason\":\"Årsaken til fjerning\",\"dialog_removed.type\":\"Fjerningstype\",\"dialog_update.available_version\":\"Tilgjengelig versjon\",\"dialog_update.changelog\":\"Endringslogg\",\"dialog_update.downloaded_version\":\"Nedlastet versjon\",\"dialog_update.message\":\"En ny versjon av {name} er tilgjengelig\",\"dialog_update.no_info\":\"Forfatteren har ikke gitt noen informasjon for denne utgivelsen\",\"dialog_update.releasenotes\":\"Utgivelsesmerknader for {release}\",\"dialog_update.title\":\"Oppdatering venter\",\"entry.information\":\"Informasjon\",\"entry.intro\":\"Oppdateringer og viktige meldinger vises her hvis det er noen\",\"entry.messages.disabled.constrains.description\":\"Miljøet ditt er ikke kompatibelt for å kjøre HACS, sjekk loggfilen din for mer informasjon.\",\"entry.messages.disabled.constrains.title\":\"Begrensninger\",\"entry.messages.disabled.content\":\"Sjekk loggfilen din for mer informasjon\",\"entry.messages.disabled.invalid_token.description\":\"Konfigurer HACS på nytt og start Home Assistant på nytt.\",\"entry.messages.disabled.invalid_token.title\":\"Ugyldig token\",\"entry.messages.disabled.load_hacs.description\":\"Sjekk loggfilen din for mer informasjon\",\"entry.messages.disabled.load_hacs.title\":\"HACS kunne ikke lastes inn\",\"entry.messages.disabled.rate_limit.description\":\"GitHub API-anrop er begrenset, dette slettes på mindre enn 1 time.\",\"entry.messages.disabled.rate_limit.title\":\"Ratelimited\",\"entry.messages.disabled.removed.description\":\"HACS er fjernet, start Home Assistant på nytt.\",\"entry.messages.disabled.removed.title\":\"Fjernet\",\"entry.messages.disabled.restore.description\":\"Sjekk loggfilen din for mer informasjon\",\"entry.messages.disabled.restore.title\":\"Gjenoppretting av HACS mislyktes\",\"entry.messages.disabled.title\":\"HACS er deaktivert\",\"entry.messages.has_pending_tasks.content\":\"Noen elementer vises kanskje ikke før dette er fullført\",\"entry.messages.has_pending_tasks.title\":\"Venter på bakgrunnsoppgaver\",\"entry.messages.removed_repository\":\"Fjernet pakkelageret ''{repository}''\",\"entry.messages.resources.content\":\"Du har {number} Lovelace-elementer som ikke er riktig lastet inn i Lovelace.\",\"entry.messages.resources.title\":\"Ikke lastet i Lovelace\",\"entry.messages.restart.content\":\"Du har {number} {pluralWording} som krever en omstart av Home Assistant. Du kan gjøre det fra Server-kontroller under konfigurasjonsdelen av Home Assistant brukergrensesnittet.\",\"entry.messages.restart.title\":\"Venter på omstart\",\"entry.messages.setup.content\":\"HACS starter opp, i løpet av denne tiden kan det hende at noe informasjon mangler eller er feil\",\"entry.messages.setup.title\":\"HACS settes opp\",\"entry.messages.startup.content\":\"HACS starter opp, i løpet av denne tiden kan det hende at noe informasjon mangler eller er feil\",\"entry.messages.startup.title\":\"HACS starter opp\",\"entry.messages.waiting.content\":\"HACS venter på at Home Assistant skal fullføre oppstart før oppstart av oppgaver\",\"entry.messages.waiting.title\":\"HACS venter\",\"entry.messages.wrong_frontend_installed.content\":\"Du har versjon {running} av HACS frontend installert, men versjon {expected} var forventet. Hvis du ser denne meldingen, kunne ikke Home Assistant installere den nye versjonen. Forsøk å starte Home Assistant på nytt.\",\"entry.messages.wrong_frontend_installed.title\":\"Uventet grensesnitt versjon\",\"entry.messages.wrong_frontend_loaded.content\":\"Du kjører versjon {running} av HACS grensesnittet, men versjon {expected} var forventet. Du bør tømme nettleserens hurtiglager.\",\"entry.messages.wrong_frontend_loaded.title\":\"Uventet grensesnitt versjon\",\"entry.pending_updates\":\"Oppdateringer er klare\",\"menu.about\":\"Om HACS\",\"menu.clear\":\"Fjern alt nytt\",\"menu.custom_repositories\":\"Tilpassede pakkelagre\",\"menu.dismiss\":\"Lukk nye repositorier\",\"menu.documentation\":\"Dokumentasjon\",\"menu.open_issue\":\"Meld et problem\",\"menu.reload\":\"Last inn vinduet på nytt\",\"options.abort.not_setup\":\"HACS er ikke satt opp.\",\"options.abort.release_limit_value\":\"Utgivelsesgrensen må være mellom 1 og 100\",\"options.step.user.data.appdaemon\":\"Aktiver oppdagelse og sporing av AppDaemon-apper\",\"options.step.user.data.country\":\"Filtrer med landskode\",\"options.step.user.data.debug\":\"Aktiver feilsøking\",\"options.step.user.data.experimental\":\"Aktiver eksperimentelle funksjoner\",\"options.step.user.data.netdaemon\":\"Aktiver oppdagelse og sporing av NetDaemon-apper\",\"options.step.user.data.not_in_use\":\"Ikke i bruk med YAML\",\"options.step.user.data.release_limit\":\"Antall utgivelser som skal vises\",\"options.step.user.data.sidepanel_icon\":\"Sidepanel ikon\",\"options.step.user.data.sidepanel_title\":\"Sidepanel tittel\",\"repository_card.dismiss\":\"Avvis\",\"repository_card.information\":\"Informasjon\",\"repository_card.new_repository\":\"Nytt pakkelager\",\"repository_card.not_loaded\":\"Ikke lastet inn\",\"repository_card.open_issue\":\"Meld et problem\",\"repository_card.open_source\":\"Åpne kilde\",\"repository_card.pending_restart\":\"Venter på omstart\",\"repository_card.pending_update\":\"Oppdatering venter\",\"repository_card.redownload\":\"Last ned på nytt\",\"repository_card.report\":\"Forespørsel om fjerning\",\"repository_card.update_information\":\"Oppdater informasjon\",\"search.downloaded\":\"Søk etter nedlastede arkiver\",\"search.downloaded_new\":\"Søk etter nedlastede eller nye depoter\",\"search.placeholder\":\"Søk etter pakkelager\",\"sections.about.description\":\"Vis informasjon om HACS\",\"sections.about.title\":\"Om\",\"sections.addon.description\":\"Det er ingen addons i HACS, men du kan klikke her for å komme til veilederen\",\"sections.addon.title\":\"Add-ons\",\"sections.automation.description\":\"Det er her du finner python_scripts, AppDaemon-apper og NetDaemon-apper\",\"sections.automation.title\":\"Automasjon\",\"sections.frontend.description\":\"Det er her du finner temaer, tilpassede kort og andre elementer for lovelace\",\"sections.frontend.title\":\"Grensesnitt\",\"sections.integrations.description\":\"Det er her du finner tilpassede integrasjoner (custom_components)\",\"sections.integrations.title\":\"Integrasjoner\",\"sections.pending_repository_upgrade\":\"Du kjører versjon {downloaded} , versjon {available} er tilgjengelig\",\"store.explore\":\"Utforsk og last ned pakkelagre\",\"store.new_repositories_note\":\"Det er noen nye depoter som vises her\",\"store.no_repositories\":\"Ingen pakkelagre\",\"store.no_repositories_desc1\":\"Det ser ut til at du ikke har lastet ned noen repositories i denne delen ennå.\",\"store.no_repositories_desc2\":\"Klikk på + i nederste hjørne for å legge til din første!\",\"store.no_repositories_found_desc1\":'Ingen nedlastede arkiver som samsvarer med \" {searchInput} \" funnet i denne delen.',\"store.no_repositories_found_desc2\":\"Prøv å søke etter noe annet!\"},nl:{\"common.add\":\"toevoegen\",\"common.appdaemon\":\"AppDaemon\",\"common.cancel\":\"Annuleren\",\"common.close\":\"Sluit\",\"common.download\":\"Download\",\"common.ignore\":\"Negeer\",\"common.integration\":\"Integratie\",\"common.integration_plural\":\"Integraties\",\"common.lovelace\":\"Lovelace\",\"common.navigate\":\"Navigeer\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.python_script\":\"Python Script\",\"common.reload\":\"Herladen\",\"common.remove\":\"Verwijder\",\"common.repositories\":\"Repositories\",\"common.repository\":\"Repository\",\"common.show\":\"Toon\",\"common.theme\":\"Thema\",\"common.update\":\"Update\",\"common.updates\":\"Updates\",\"common.yes\":\"Ja\",\"confirm.home_assistant_version_not_correct\":\"U gebruikt Home Assistant versie ''{haversion}'', echter deze repository vereist dat minimaal versie ''{minversion}'' is geïnstalleerd.\",\"dialog.configured.confirm\":\"Ga naar integraties\",\"dialog.configured.message\":\"De {name} -integratie is geconfigureerd of genegeerd, u moet de configuratie er van verwijderen voordat u deze uit HACS verwijdert\",\"dialog.configured.title\":\"Integratie is geconfigureerd\",\"dialog.reload.confirm\":\"Wilt u dat nu doen?\",\"dialog.reload.description\":\"U moet de cache van uw browser leegmaken wanneer u Lovelace-bronnen wijzigt.\",\"dialog.remove.message\":\"Wilt u {name} echt verwijderen?\",\"dialog.remove.title\":\"Verwijder\",\"dialog_about.downloaded_repositories\":\"Gedownloade repositories\",\"dialog_about.frontend_version\":\"Frontend versie\",\"dialog_about.integration_version\":\"Integratieversie\",\"dialog_about.useful_links\":\"Nuttige links\",\"dialog_add_repo.limit\":\"Alleen de eerste 100 repositories worden getoond, gebruik de zoekopdracht om te filteren wat u nodig heeft\",\"dialog_add_repo.no_match\":\"Er zijn geen repositories gevonden die overeenkomen met uw filter\",\"dialog_add_repo.sort_by\":\"Sorteren op\",\"dialog_add_repo.sort_by_values.last_updated\":\"Laatst bijgewerkt\",\"dialog_add_repo.sort_by_values.name\":\"Naam\",\"dialog_add_repo.sort_by_values.stars\":\"Sterren\",\"dialog_add_repo.title\":\"Repository toevoegen\",\"dialog_custom_repositories.category\":\"Categorie\",\"dialog_custom_repositories.no_category\":\"Ontbrekende categorie\",\"dialog_custom_repositories.no_repository\":\"Ontbrekende repository\",\"dialog_custom_repositories.title\":\"Aangepaste repositories\",\"dialog_custom_repositories.url_placeholder\":\"Voeg een aangepaste repository-URL toevoegen\",\"dialog_download.lovelace_instruction\":\"Nadat de download is voltooid, moet u, aangezien u Lovelace niet in de opslagmodus gebruikt, de bron handmatig toevoegen met deze instellingen:\",\"dialog_download.note_downloaded\":\"Wanneer gedownload zal deze zich bevinden in {location}\",\"dialog_download.restart\":\"Vergeet niet dat u Home Assistant opnieuw moet opstarten voordat wijzigingen in integraties (custom_components) worden toegepast.\",\"dialog_download.select_version\":\"Selecteer versie\",\"dialog_download.show_beta\":\"Bètaversies weergeven\",\"dialog_download.type\":\"Type\",\"dialog_download.url\":\"URL\",\"dialog_info.author\":\"Auteur\",\"dialog_info.download\":\"Download deze repository met HACS\",\"dialog_info.downloads\":\"Downloads\",\"dialog_info.loading\":\"Informatie laden ...\",\"dialog_info.no_info\":\"De ontwikkelaar heeft geen verdere informatie verstrekt voor deze repository\",\"dialog_info.open_issues\":\"Openstaande problemen\",\"dialog_info.open_repo\":\"Open repository\",\"dialog_info.stars\":\"Sterren\",\"dialog_info.version_installed\":\"Versie gedownload\",\"dialog_removed.link\":\"Externe link naar meer informatie\",\"dialog_removed.name\":\"Repository naam\",\"dialog_removed.reason\":\"Reden voor verwijdering\",\"dialog_removed.type\":\"Type verwijdering\",\"dialog_update.available_version\":\"Beschikbare versie\",\"dialog_update.changelog\":\"Changelog\",\"dialog_update.downloaded_version\":\"Gedownloade versie\",\"dialog_update.message\":\"Er is een nieuwe versie van {name} beschikbaar\",\"dialog_update.no_info\":\"De ontwikkelaar heeft geen verdere informatie verstrekt voor deze repository\",\"dialog_update.releasenotes\":\"Releasenotes voor {release}\",\"dialog_update.title\":\"Update in behandeling\",\"entry.information\":\"Informatie\",\"entry.intro\":\"Updates en belangrijke berichten worden hier weergegeven als die er zijn\",\"entry.messages.disabled.constrains.description\":\"Uw omgeving is niet geschikt om HACS te draaien, controleer uw log bestand voor meer details.\",\"entry.messages.disabled.constrains.title\":\"Beperkingen\",\"entry.messages.disabled.content\":\"Controleer uw logbestand voor meer details\",\"entry.messages.disabled.invalid_token.description\":\"Herconfigureer HACS en herstart Home Assistant.\",\"entry.messages.disabled.invalid_token.title\":\"Ongeldige token\",\"entry.messages.disabled.load_hacs.description\":\"Controleer uw logbestand voor meer details\",\"entry.messages.disabled.load_hacs.title\":\"HACS kon niet worden geladen\",\"entry.messages.disabled.rate_limit.description\":\"GitHub API calls zijn gelimiteerd, dit zal over een uur weg zijn.\",\"entry.messages.disabled.rate_limit.title\":\"Ratelimiet\",\"entry.messages.disabled.removed.description\":\"HACS is verwijderd, start Home Assistant opnieuw.\",\"entry.messages.disabled.removed.title\":\"Verwijderd\",\"entry.messages.disabled.restore.description\":\"Controleer uw logbestand voor meer details\",\"entry.messages.disabled.restore.title\":\"Herstel van HACS mislukt\",\"entry.messages.disabled.title\":\"HACS is uitgeschakeld\",\"entry.messages.has_pending_tasks.content\":\"Sommige repositories worden mogelijk pas weergegeven als dit is voltooid\",\"entry.messages.has_pending_tasks.title\":\"Achtergrondtaken in behandeling\",\"entry.messages.removed_repository\":\"Verwijderde repository ''{repository}''\",\"entry.messages.resources.content\":\"U heeft {number} Lovelace-elementen die niet correct zijn geladen in Lovelace.\",\"entry.messages.resources.title\":\"Niet geladen in Lovelace\",\"entry.messages.restart.content\":\"U heeft {number} {pluralWording} waarvoor Home Assistant opnieuw moet worden gestart. U kunt dat doen via het gedeelte 'Serverbeheer' onder het configuratiegedeelte van de Home Assistant UI.\",\"entry.messages.restart.title\":\"In afwachting van herstart\",\"entry.messages.setup.content\":\"HACS is aan het opstarten, gedurende deze tijd kunnen sommige gegevens ontbreken of onjuist zijn\",\"entry.messages.setup.title\":\"HACS is aan het opstarten\",\"entry.messages.startup.content\":\"HACS is aan het opstarten, gedurende deze tijd kan er informatie ontbreken of onjuist zijn\",\"entry.messages.startup.title\":\"HACS is aan het opstarten\",\"entry.messages.waiting.content\":\"HACS wacht tot Home Assistant klaar is met opstarten voordat het begint met opstarttaken\",\"entry.messages.waiting.title\":\"HACS is aan het wachten\",\"entry.messages.wrong_frontend_installed.content\":\"U heeft {running} van de HACS-frontend geïnstalleerd, maar versie {expected} werd verwacht. Als u dit bericht ziet, kon Home Assistant de nieuwe versie niet installeren. Probeer Home Assistant opnieuw op te starten.\",\"entry.messages.wrong_frontend_installed.title\":\"Onverwachte frontend-versie\",\"entry.messages.wrong_frontend_loaded.content\":\"U gebruikt versie {running} van de HACS-frontend, maar versie {expected} werd verwacht, u moet uw browsercache wissen.\",\"entry.messages.wrong_frontend_loaded.title\":\"Onverwachte frontend-versie\",\"entry.pending_updates\":\"In afwachting van updates\",\"menu.about\":\"Over HACS\",\"menu.clear\":\"Wis alle nieuwe\",\"menu.custom_repositories\":\"Aangepaste repositories\",\"menu.dismiss\":\"Verberg nieuwe repositories\",\"menu.documentation\":\"Documentatie\",\"menu.open_issue\":\"Meld probleem\",\"menu.reload\":\"Herlaad venster\",\"options.abort.not_setup\":\"HACS is niet ingesteld.\",\"options.abort.release_limit_value\":\"De releaselimiet moet tussen de 1 en 1000 liggen\",\"options.step.user.data.appdaemon\":\"Zet AppDaemon apps ontdekken & traceren aan\",\"options.step.user.data.country\":\"Filter met land code.\",\"options.step.user.data.debug\":\"Schakel debug in.\",\"options.step.user.data.experimental\":\"Zet experimentele functies aan\",\"options.step.user.data.netdaemon\":\"Zet NetDaemon apps ontdekken & traceren aan\",\"options.step.user.data.not_in_use\":\"Niet in gebruik met YAML\",\"options.step.user.data.release_limit\":\"Aantal releases om te laten zien.\",\"options.step.user.data.sidepanel_icon\":\"Zijpaneel icoon\",\"options.step.user.data.sidepanel_title\":\"Zijpaneel titel\",\"repository_card.dismiss\":\"verberg\",\"repository_card.information\":\"Informatie\",\"repository_card.new_repository\":\"Nieuwe repository\",\"repository_card.not_loaded\":\"Niet geladen\",\"repository_card.open_issue\":\"Meld probleem\",\"repository_card.open_source\":\"Open source\",\"repository_card.pending_restart\":\"In afwachting van herstart\",\"repository_card.pending_update\":\"In afwachting van update\",\"repository_card.redownload\":\"Opnieuw downloaden\",\"repository_card.report\":\"Rapport voor verwijdering\",\"repository_card.update_information\":\"Update informatie\",\"search.downloaded\":\"Zoek naar gedownloade repositories\",\"search.downloaded_new\":\"Zoeken naar gedownloade of nieuwe repositories\",\"search.placeholder\":\"Zoek naar repository\",\"sections.about.description\":\"Toon informatie over HACS\",\"sections.about.title\":\"Over\",\"sections.addon.description\":\"Er zijn geen add-ons in HACS, maar u kunt hier klikken om naar de supervisor te gaan\",\"sections.addon.title\":\"Add-ons\",\"sections.automation.description\":\"Hier vindt u python_scripts, AppDaemon-apps en NetDaemon-apps\",\"sections.automation.title\":\"Automatisering\",\"sections.frontend.description\":\"Dit is waar u thema's, aangepaste kaarten en andere elementen voor lovelace vindt\",\"sections.frontend.title\":\"Frontend\",\"sections.integrations.description\":\"Hier vindt u aangepaste integraties (custom_components)\",\"sections.integrations.title\":\"Integraties\",\"sections.pending_repository_upgrade\":\"U gebruikt versie {downloaded}, versie {available} is beschikbaar\",\"store.explore\":\"Repositories verkennen en downloaden\",\"store.new_repositories_note\":\"Er worden hier nieuwe repositories getoond\",\"store.no_repositories\":\"Geen repositories\",\"store.no_repositories_desc1\":\"Het lijkt erop dat u nog geen repositories heeft geïnstalleerd in deze sectie.\",\"store.no_repositories_desc2\":\"Klik op de + in de benedenhoek om uw eerste toe te voegen!\",\"store.no_repositories_found_desc1\":'Er zijn geen gedownloade repositories die overeenkomen met \"{searchInput}\" in deze sectie.',\"store.no_repositories_found_desc2\":\"Probeer iets anders te zoeken!\"},nn:{\"common.appdaemon\":\"AppDaemon\",\"common.integration\":\"Integrasjon\",\"common.integration_plural\":\"Integrasjonar\",\"common.lovelace\":\"Lovelace\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.repositories\":\"Repositories\",\"common.theme\":\"Tema\",\"confirm.home_assistant_version_not_correct\":\"Du køyrer Home Assistant-versjonen ''{haversion}'', men dette kodedepoet krev minst versjon ''{minversion}'' for å bli installert.\",\"options.step.user.data.appdaemon\":\"Aktiver AppDeamon-appar-oppdaging og sporing\",\"options.step.user.data.country\":\"Filterer med landskode\",\"options.step.user.data.debug\":\"Aktiver debug.\",\"options.step.user.data.experimental\":\"Aktiver ekspreimentelle funksjonar\",\"options.step.user.data.netdaemon\":\"Aktiver NetDeamon-appar-oppdaging og sporing\",\"options.step.user.data.not_in_use\":\"Kan ikkje brukast saman med YAML\",\"options.step.user.data.release_limit\":\"Talet på utgivingar\",\"options.step.user.data.sidepanel_icon\":\"Sidepanelikon\",\"options.step.user.data.sidepanel_title\":\"Sidepaneltittel\",\"sections.about.description\":\"Vis informasjon om HACS\",\"sections.about.title\":\"Om\",\"sections.automation.description\":\"Her finn du python_scripts, AppDaemon-appar og NetDaemon-appar\",\"sections.automation.title\":\"Automasjon\",\"sections.frontend.description\":\"Her finn du tema, eigendefinerte kort og andre element for lovelace\",\"sections.frontend.title\":\"Frontend\",\"sections.integrations.description\":\"Her finn du eigendefinerte ingtegrasjonar (custom_components)\",\"sections.integrations.title\":\"Integrasjonar\",\"sections.pending_repository_upgrade\":\"Du køyrer versjon {installed}, og versjon {available} er tilgjengeleg\"},pl:{\"common.add\":\"dodaj\",\"common.appdaemon\":\"AppDaemon\",\"common.cancel\":\"Anuluj\",\"common.close\":\"Zamknij\",\"common.download\":\"Pobierz\",\"common.ignore\":\"Ignoruj\",\"common.integration\":\"Integracja\",\"common.integration_plural\":\"Integracje\",\"common.lovelace\":\"Lovelace\",\"common.navigate\":\"nawiguj\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.python_script\":\"Skrypt Pythona\",\"common.reload\":\"Wczytaj ponownie\",\"common.remove\":\"Usuń\",\"common.repositories\":\"Repozytoria\",\"common.repository\":\"Repozytorium\",\"common.show\":\"Pokaż\",\"common.theme\":\"Motyw\",\"common.update\":\"Uaktualnij\",\"common.updates\":\"Aktualizacje\",\"common.yes\":\"Tak\",\"confirm.home_assistant_version_not_correct\":\"Używasz Home Assistant'a w wersji ''{haversion}'', a to repozytorium wymaga wersji minimum ''{minversion}''.\",\"dialog.configured.confirm\":\"Przejdź do integracji\",\"dialog.configured.message\":\"Integracja {name} jest skonfigurowana lub ignorowana. Należy usunąć jej konfigurację przed usunięciem jej z HACS.\",\"dialog.configured.title\":\"Integracja jest skonfigurowana\",\"dialog.reload.confirm\":\"Czy chcesz to zrobić teraz?\",\"dialog.reload.description\":\"Musisz wyczyścić pamięć podręczną przeglądarki po zmianie zasobów Lovelace.\",\"dialog.remove.message\":\"Czy na pewno chcesz usunąć {name}?\",\"dialog.remove.title\":\"Usuwanie\",\"dialog_about.downloaded_repositories\":\"Pobrane repozytoria\",\"dialog_about.frontend_version\":\"Wersja interfejsu użytkownika\",\"dialog_about.integration_version\":\"Wersja integracji\",\"dialog_about.useful_links\":\"Przydatne linki\",\"dialog_add_repo.limit\":\"Wyświetlanych jest tylko pierwszych 100 repozytoriów, użyj wyszukiwania, aby przefiltrować potrzebne informacje\",\"dialog_add_repo.no_match\":\"Nie znaleziono repozytoriów pasujących do filtra\",\"dialog_add_repo.sort_by\":\"Sortuj według\",\"dialog_add_repo.sort_by_values.last_updated\":\"Ostatnio zaktualizowane\",\"dialog_add_repo.sort_by_values.name\":\"Nazwa\",\"dialog_add_repo.sort_by_values.stars\":\"Gwiazdki\",\"dialog_add_repo.title\":\"Dodawanie repozytorium\",\"dialog_custom_repositories.category\":\"Kategoria\",\"dialog_custom_repositories.no_category\":\"Brak kategorii\",\"dialog_custom_repositories.no_repository\":\"Brak repozytorium\",\"dialog_custom_repositories.title\":\"Niestandardowe repozytoria\",\"dialog_custom_repositories.url_placeholder\":\"Adres URL niestandardowego repozytorium\",\"dialog_download.lovelace_instruction\":\"Po zakończeniu pobierania, ponieważ nie używasz Lovelace w trybie przechowywania, musisz ręcznie dodać zasób z tymi ustawieniami:\",\"dialog_download.note_downloaded\":\"Po pobraniu będzie on znajdował się w {location}\",\"dialog_download.restart\":\"Pamiętaj, że musisz ponownie uruchomić Home Assistanta by zastosować zmiany w integracjach (custom_components).\",\"dialog_download.select_version\":\"Wybierz wersję\",\"dialog_download.show_beta\":\"Pokaż wersje beta\",\"dialog_download.type\":\"Typ\",\"dialog_download.url\":\"URL\",\"dialog_info.author\":\"Autor\",\"dialog_info.download\":\"Pobierz to repozytorium z HACS\",\"dialog_info.downloads\":\"Ilość pobrań\",\"dialog_info.loading\":\"Pobieranie informacji...\",\"dialog_info.no_info\":\"Deweloper nie dostarczył więcej informacji na temat tego repozytorium\",\"dialog_info.open_issues\":\"Problemy\",\"dialog_info.open_repo\":\"Otwórz repozytorium\",\"dialog_info.stars\":\"Gwiazdki\",\"dialog_info.version_installed\":\"Pobrano wersję\",\"dialog_removed.link\":\"Link zewnętrzny do dodatkowych informacji\",\"dialog_removed.name\":\"Nazwa repozytorium\",\"dialog_removed.reason\":\"Powód usunięcia\",\"dialog_removed.type\":\"Rodzaj usunięcia\",\"dialog_update.available_version\":\"Dostępna wersja\",\"dialog_update.changelog\":\"Lista zmian\",\"dialog_update.downloaded_version\":\"Pobrana wersja\",\"dialog_update.message\":\"Dostępna jest nowa wersja {name}\",\"dialog_update.no_info\":\"Autor nie podał żadnych informacji dotyczących tego wydania\",\"dialog_update.releasenotes\":\"Informacje o {release}\",\"dialog_update.title\":\"Dostępna aktualizacja\",\"entry.information\":\"Informacje\",\"entry.intro\":\"Aktualizacje i ważne komunikaty będą wyświetlane w tym miejscu\",\"entry.messages.disabled.constrains.description\":\"Twoje środowisko nie jest kompatybilne z HACS, sprawdź log, aby uzyskać więcej informacji.\",\"entry.messages.disabled.constrains.title\":\"Ograniczenia\",\"entry.messages.disabled.content\":\"Sprawdź log, aby uzyskać więcej informacji\",\"entry.messages.disabled.invalid_token.description\":\"Skonfiguruj ponownie HACS i uruchom ponownie Home Assistanta.\",\"entry.messages.disabled.invalid_token.title\":\"Nieprawidłowy token\",\"entry.messages.disabled.load_hacs.description\":\"Sprawdź log, aby uzyskać więcej informacji\",\"entry.messages.disabled.load_hacs.title\":\"Nie można załadować HACS\",\"entry.messages.disabled.rate_limit.description\":\"Zapytania do API GitHub są limitowane, to zostanie usunięte w czasie krótszym niż godzina.\",\"entry.messages.disabled.rate_limit.title\":\"Limit\",\"entry.messages.disabled.removed.description\":\"HACS został usunięty, uruchom ponownie Home Assistanta.\",\"entry.messages.disabled.removed.title\":\"Usunięto\",\"entry.messages.disabled.restore.description\":\"Sprawdź log, aby uzyskać więcej informacji\",\"entry.messages.disabled.restore.title\":\"Przywrócenie HACS nie powiodło się\",\"entry.messages.disabled.title\":\"HACS jest wyłączony\",\"entry.messages.has_pending_tasks.content\":\"Dopóki nie zostaną zakończone, niektóre repozytoria mogą nie być wyświetlane\",\"entry.messages.has_pending_tasks.title\":\"Wykonywane są zadania w tle\",\"entry.messages.removed_repository\":\"Usunięto repozytorium ''{repository}''\",\"entry.messages.resources.content\":\"Elementy Lovelace, które nie zostały poprawnie załadowane: {number}\",\"entry.messages.resources.title\":\"Nie załadowano w Lovelace\",\"entry.messages.restart.content\":\"Na ponowne uruchomienie Home Assistanta oczekuje: {number} {pluralWording} Możesz uruchomić ponownie Home Assistanta w sekcji Konfiguracja -> Kontrola serwera.\",\"entry.messages.restart.title\":\"Oczekiwanie na restart\",\"entry.messages.setup.content\":\"HACS jest konfigurowany, w tym czasie może brakować niektórych informacji lub są one nieprawidłowe\",\"entry.messages.setup.title\":\"HACS jest konfigurowany\",\"entry.messages.startup.content\":\"HACS uruchamia się, w tym czasie może brakować pewnych informacji lub mogą one być nieprawidłowe.\",\"entry.messages.startup.title\":\"HACS uruchamia się\",\"entry.messages.waiting.content\":\"HACS czeka na zakończenie uruchamiania Home Assistanta przed rozpoczęciem własnych zadań\",\"entry.messages.waiting.title\":\"HACS czeka\",\"entry.messages.wrong_frontend_installed.content\":\"Masz zainstalowany interfejs HACS w wersji {running}, a wersja {expected} była oczekiwana. Komunikat ten oznacza, że Home Assistant nie mógł zainstalować nowej wersji interfejsu HACS, spróbuj ponownie uruchomić Home Assistanta.\",\"entry.messages.wrong_frontend_installed.title\":\"Nieoczekiwana wersja interfejsu\",\"entry.messages.wrong_frontend_loaded.content\":\"Używasz wersji {running} interfejsu HACS, a wersja {expected} była oczekiwana, powinieneś wyczyścić pamięć podręczną przeglądarki.\",\"entry.messages.wrong_frontend_loaded.title\":\"Nieoczekiwana wersja interfejsu\",\"entry.pending_updates\":\"Oczekujące aktualizacje\",\"menu.about\":\"O HACS\",\"menu.clear\":\"Wyczyść oznaczenia nowych\",\"menu.custom_repositories\":\"Niestandardowe repozytoria\",\"menu.dismiss\":\"Odrzuć nowe repozytoria\",\"menu.documentation\":\"Dokumentacja\",\"menu.open_issue\":\"Powiadom o problemie\",\"menu.reload\":\"Załaduj ponownie okno\",\"options.abort.not_setup\":\"HACS nie jest skonfigurowany\",\"options.abort.release_limit_value\":\"Limit wydań musi wynosić od 1 do 100\",\"options.step.user.data.appdaemon\":\"Włącz wykrywanie i śledzenie aplikacji AppDaemon\",\"options.step.user.data.country\":\"Filtruj według kodu kraju\",\"options.step.user.data.debug\":\"Włącz debugowanie.\",\"options.step.user.data.experimental\":\"Włącz funkcje eksperymentalne\",\"options.step.user.data.netdaemon\":\"Włącz wykrywanie i śledzenie aplikacji NetDaemon\",\"options.step.user.data.not_in_use\":\"Nieużywany z YAML\",\"options.step.user.data.release_limit\":\"Liczba wydań do wyświetlenia\",\"options.step.user.data.sidepanel_icon\":\"Ikona w panelu bocznym\",\"options.step.user.data.sidepanel_title\":\"Tytuł w panelu bocznym\",\"repository_card.dismiss\":\"odrzuć\",\"repository_card.information\":\"Informacje\",\"repository_card.new_repository\":\"Nowe repozytorium\",\"repository_card.not_loaded\":\"Nie załadowano\",\"repository_card.open_issue\":\"Powiadom o problemie\",\"repository_card.open_source\":\"Otwórz kod źródłowy\",\"repository_card.pending_restart\":\"Oczekiwanie na restart\",\"repository_card.pending_update\":\"Oczekująca aktualizacja\",\"repository_card.redownload\":\"Pobierz ponownie\",\"repository_card.report\":\"Zgłoś do usunięcia\",\"repository_card.update_information\":\"Uaktualnij dane\",\"search.downloaded\":\"Wyszukaj pobrane repozytoria\",\"search.downloaded_new\":\"Wyszukaj pobrane lub nowe repozytoria\",\"search.placeholder\":\"Wyszukaj repozytorium\",\"sections.about.description\":\"Informacje o HACS\",\"sections.about.title\":\"O HACS\",\"sections.addon.description\":\"W HACS nie ma dodatków, ale możesz kliknąć tutaj, aby przejść do Supervisora\",\"sections.addon.title\":\"Dodatki\",\"sections.automation.description\":\"Skrypty Pythona, aplikacje AppDaemon i NetDaemon\",\"sections.automation.title\":\"Automatyzacje\",\"sections.frontend.description\":\"Motywy, niestandardowe karty i inne elementy interfejsu użytkownika\",\"sections.frontend.title\":\"Interfejs użytkownika\",\"sections.integrations.description\":\"Niestandardowe integracje (custom_components)\",\"sections.integrations.title\":\"Integracje\",\"sections.pending_repository_upgrade\":\"Używasz wersji {downloaded}, wersja {available} jest dostępna\",\"store.explore\":\"Przeglądaj i pobieraj repozytoria\",\"store.new_repositories_note\":\"Pojawiło się kilka nowych repozytoriów\",\"store.no_repositories\":\"Brak repozytoriów\",\"store.no_repositories_desc1\":\"Wygląda na to, że nie masz jeszcze zainstalowanych żadnych repozytoriów w tej sekcji.\",\"store.no_repositories_desc2\":\"Kliknij + w dolnym rogu, aby dodać pierwsze!\",\"store.no_repositories_found_desc1\":'W tej sekcji nie znaleziono zainstalowanych repozytoriów pasujących do \"{searchInput}\".',\"store.no_repositories_found_desc2\":\"Spróbuj wyszukać czegoś innego!\"},pt_BR:{\"common.add\":\"adicionar\",\"common.appdaemon\":\"AppDaemon\",\"common.cancel\":\"Cancelar\",\"common.close\":\"Fechar\",\"common.download\":\"Baixar\",\"common.ignore\":\"Ignorar\",\"common.integration\":\"Integração\",\"common.integration_plural\":\"Integrações\",\"common.lovelace\":\"Dashboard\",\"common.navigate\":\"navegar\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Dashboard\",\"common.python_script\":\"Script Python\",\"common.reload\":\"Recarregar\",\"common.remove\":\"Remover\",\"common.repositories\":\"Repositórios\",\"common.repository\":\"Repositório\",\"common.show\":\"Mostrar\",\"common.theme\":\"Tema\",\"common.update\":\"Atualizar\",\"common.updates\":\"Atualizações\",\"common.yes\":\"Sim\",\"confirm.home_assistant_version_not_correct\":\"Você está executando a versão Home Assistant ''{haversion}'', mas este repositório requer que a versão mínima ''{minversion}'' esteja instalada.\",\"dialog.configured.confirm\":\"Vá para integrações\",\"dialog.configured.message\":\"A integração {name} está configurada ou ignorada, você precisa excluir a configuração dela antes de removê-la do HACS\",\"dialog.configured.title\":\"A integração está configurada\",\"dialog.reload.confirm\":\"Você quer fazer isso agora?\",\"dialog.reload.description\":\"Você precisa recarregar seu navegador para que os recursos atualizados sejam usados.\",\"dialog.remove.message\":\"Você realmente quer remover o {name}?\",\"dialog.remove.title\":\"Remover\",\"dialog_about.downloaded_repositories\":\"Repositórios baixados\",\"dialog_about.frontend_version\":\"Versão do frontend\",\"dialog_about.integration_version\":\"Versão da integração\",\"dialog_about.useful_links\":\"Links úteis\",\"dialog_add_repo.limit\":\"Apenas os 100 primeiros repositórios são mostrados, use a pesquisa para filtrar o que você precisa\",\"dialog_add_repo.no_match\":\"Nenhum repositório encontrado correspondente ao seu filtro\",\"dialog_add_repo.sort_by\":\"Ordenar por\",\"dialog_add_repo.sort_by_values.last_updated\":\"Ultima atualização\",\"dialog_add_repo.sort_by_values.name\":\"Nome\",\"dialog_add_repo.sort_by_values.stars\":\"Estrelas\",\"dialog_add_repo.title\":\"Novo repositório\",\"dialog_custom_repositories.category\":\"Categoria\",\"dialog_custom_repositories.no_category\":\"Categoria ausente\",\"dialog_custom_repositories.no_repository\":\"Repositório ausente\",\"dialog_custom_repositories.title\":\"Repositórios personalizados\",\"dialog_custom_repositories.url_placeholder\":\"Adicionar URL de repositório personalizado\",\"dialog_download.lovelace_instruction\":\"Após o download ser concluído, já que você não está usando a Dashboard no modo de armazenamento, você precisa adicionar manualmente o recurso com essas configurações:\",\"dialog_download.note_downloaded\":\"Quando baixado, ele estará localizado em {location}\",\"dialog_download.restart\":\"Lembre-se de que você precisa reiniciar o Home Assistant antes que as alterações nas integrações (custom_components) sejam aplicadas.\",\"dialog_download.select_version\":\"Selecione a versão\",\"dialog_download.show_beta\":\"Mostrar versões beta\",\"dialog_download.type\":\"Tipo\",\"dialog_download.url\":\"URL\",\"dialog_info.author\":\"Autor\",\"dialog_info.download\":\"Baixe esse repositório no HACS\",\"dialog_info.downloads\":\"Downloads\",\"dialog_info.loading\":\"Carregando informações...\",\"dialog_info.no_info\":\"O desenvolvedor não forneceu mais informações para este repositório\",\"dialog_info.open_issues\":\"Problemas em aberto\",\"dialog_info.open_repo\":\"Abrir repositório\",\"dialog_info.stars\":\"Estrelas\",\"dialog_info.version_installed\":\"Versão baixada\",\"dialog_removed.link\":\"Link externo para mais informações\",\"dialog_removed.name\":\"Nome do Repositório\",\"dialog_removed.reason\":\"Motivo da remoção\",\"dialog_removed.type\":\"Tipo da Remoção\",\"dialog_update.available_version\":\"Versão disponível\",\"dialog_update.changelog\":\"Registro de mudanças\",\"dialog_update.downloaded_version\":\"Versão para download\",\"dialog_update.message\":\"Uma nova versão do {name} está disponível\",\"dialog_update.no_info\":\"O autor não forneceu nenhuma informação para esta versão\",\"dialog_update.releasenotes\":\"Notas de lançamento para {release}\",\"dialog_update.title\":\"Atualização pendente\",\"entry.information\":\"Informações\",\"entry.intro\":\"Atualizações e mensagens importantes serão mostradas aqui, quando necessário\",\"entry.messages.disabled.constrains.description\":\"Seu ambiente não é compatível para executar o HACS, verifique seu arquivo de log para obter mais detalhes.\",\"entry.messages.disabled.constrains.title\":\"Restrições\",\"entry.messages.disabled.content\":\"Verifique seu arquivo de log para mais detalhes.\",\"entry.messages.disabled.invalid_token.description\":\"Reconfigure o HACS e reinicie o Home Assistant.\",\"entry.messages.disabled.invalid_token.title\":\"Token inválido\",\"entry.messages.disabled.load_hacs.description\":\"Verifique seu arquivo de log para obter mais detalhes\",\"entry.messages.disabled.load_hacs.title\":\"HACS não pôde carregar\",\"entry.messages.disabled.rate_limit.description\":\"As chamadas da API do GitHub são limitadas por taxa, isso será limpo em menos de 1 hora.\",\"entry.messages.disabled.rate_limit.title\":\"Taxa limitada\",\"entry.messages.disabled.removed.description\":\"HACS foi removido, reinicie o Home Assistant.\",\"entry.messages.disabled.removed.title\":\"Removido\",\"entry.messages.disabled.restore.description\":\"Verifique seu arquivo de log para obter mais detalhes\",\"entry.messages.disabled.restore.title\":\"A restauração do HACS falhou\",\"entry.messages.disabled.title\":\"O HACS está desativado\",\"entry.messages.has_pending_tasks.content\":\"Alguns repositórios podem não aparecer até que isso seja concluído\",\"entry.messages.has_pending_tasks.title\":\"Tarefas em segundo plano pendentes\",\"entry.messages.removed_repository\":\"Repositório ''{repository}'' removido\",\"entry.messages.resources.content\":\"Existem {number} elementos da Dashboard que não estão carregados corretamente na Dashboard.\",\"entry.messages.resources.title\":\"Não carregado na Dashboard\",\"entry.messages.restart.content\":\"Existem {number} {pluralWording} integrações que requerem o reinício do Home Assistant. Você pode fazer isso na seção 'Controles do Servidor' na parte de configuração do Home Assistant UI.\",\"entry.messages.restart.title\":\"Reinicialização pendente\",\"entry.messages.setup.content\":\"O HACS está sendo configurado, durante esse período, algumas informações podem estar ausentes ou incorretas\",\"entry.messages.setup.title\":\"HACS está se configurando\",\"entry.messages.startup.content\":\"O HACS está sendo iniciado, durante esse período algumas informações podem estar ausentes ou incorretas\",\"entry.messages.startup.title\":\"O HACS está iniciando\",\"entry.messages.waiting.content\":\"O HACS está esperando que o Home Assistant termine a inicialização antes de iniciar as tarefas de inicialização\",\"entry.messages.waiting.title\":\"HACS está esperando\",\"entry.messages.wrong_frontend_installed.content\":\"Você tem {running} do frontend HACS instalado, mas a versão {expected} era esperada, se você vir esta mensagem o Home Assistant não pôde instalar a nova versão, tente reiniciar o Home Assistant.\",\"entry.messages.wrong_frontend_installed.title\":\"Versão de front-end inesperada\",\"entry.messages.wrong_frontend_loaded.content\":\"Você está executando a versão {running} do frontend HACS, mas a versão {expected} era esperada. Por favor limpe o cache do seu navegador.\",\"entry.messages.wrong_frontend_loaded.title\":\"Versão frontend inesperada\",\"entry.pending_updates\":\"Atualizações pendentes\",\"menu.about\":\"Sobre o HACS\",\"menu.clear\":\"Limpar todos os novos\",\"menu.custom_repositories\":\"Repositórios personalizados\",\"menu.dismiss\":\"Limpar todos os novos repositórios\",\"menu.documentation\":\"Documentação\",\"menu.open_issue\":\"Relatar problema\",\"menu.reload\":\"Recarregar janela\",\"options.abort.not_setup\":\"O HACS não está configurado.\",\"options.abort.release_limit_value\":\"O limite de liberação precisa estar entre 1 e 100\",\"options.step.user.data.appdaemon\":\"Habilitar AppDaemon apps descoberta & rastreamento\",\"options.step.user.data.country\":\"Filtrar pelo código do país.\",\"options.step.user.data.debug\":\"Ative a depuração.\",\"options.step.user.data.experimental\":\"Ativar recursos experimentais\",\"options.step.user.data.netdaemon\":\"Habilitar NetDaemon apps descoberta & rastreamento\",\"options.step.user.data.not_in_use\":\"Não está em uso com o YAML\",\"options.step.user.data.release_limit\":\"Número de lançamentos a serem exibidos.\",\"options.step.user.data.sidepanel_icon\":\"Icone do painel lateral\",\"options.step.user.data.sidepanel_title\":\"Titulo do painel lateral\",\"repository_card.dismiss\":\"Dispensar\",\"repository_card.information\":\"Informações\",\"repository_card.new_repository\":\"Novo repositório\",\"repository_card.not_loaded\":\"Não carregado\",\"repository_card.open_issue\":\"Relatar problema\",\"repository_card.open_source\":\"Código aberto\",\"repository_card.pending_restart\":\"Reinicialização pendente\",\"repository_card.pending_update\":\"Atualização pendente\",\"repository_card.redownload\":\"Baixar novamente\",\"repository_card.report\":\"Denunciar para remoção\",\"repository_card.update_information\":\"Atualizar informações\",\"search.downloaded\":\"Pesquisar repositórios baixados\",\"search.downloaded_new\":\"Pesquisar por repositórios baixados ou novos\",\"search.placeholder\":\"Procurar repositório\",\"sections.about.description\":\"Exibir informações sobre o HACS\",\"sections.about.title\":\"Sobre\",\"sections.addon.description\":\"Não há add-ons no HACS, mas você pode clicar aqui para chegar ao supervisor\",\"sections.addon.title\":\"Add-ons\",\"sections.automation.description\":\"É aqui que você encontra python_scripts, aplicativos AppDaemon e aplicativos NetDaemon\",\"sections.automation.title\":\"Automação\",\"sections.frontend.description\":\"É aqui que você encontra temas, cartões personalizados e outros elementos para a Dashboard\",\"sections.frontend.title\":\"Frontend\",\"sections.integrations.description\":\"É aqui que você encontra integrações personalizadas (custom_components)\",\"sections.integrations.title\":\"Integrações\",\"sections.pending_repository_upgrade\":\"Você está executando a versão {downloaded}, a versão {available} está disponível\",\"store.explore\":\"Explorar e baixar repositórios\",\"store.new_repositories_note\":\"Há alguns novos repositórios sendo exibidos aqui\",\"store.no_repositories\":\"Nenhum repositório\",\"store.no_repositories_desc1\":\"Parece que você ainda não tem nenhum repositório instalado nesta seção.\",\"store.no_repositories_desc2\":\"Clique no + no canto inferior para adicionar o seu primeiro repositório!\",\"store.no_repositories_found_desc1\":'Nenhum repositório instalado foi encontrado que corresponda a \"{searchInput}\" nesta seção.',\"store.no_repositories_found_desc2\":\"Tente procurar por outra coisa!\"},pt:{\"common.add\":\"adicionar\",\"common.cancel\":\"Cancelar\",\"common.close\":\"Fechar\",\"common.download\":\"Descarregar\",\"common.ignore\":\"Ignorar\",\"common.integration\":\"Integração\",\"common.integration_plural\":\"Integrações\",\"common.lovelace\":\"Lovelace\",\"common.navigate\":\"navegue\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.python_script\":\"Script Python\",\"common.reload\":\"Recarregar\",\"common.remove\":\"Remover\",\"common.repositories\":\"Repositórios\",\"common.repository\":\"Repositório\",\"common.theme\":\"Tema\",\"common.update\":\"Atualizar\",\"common.yes\":\"Sim\",\"confirm.home_assistant_version_not_correct\":\"Está a executar a versão ''{haversion}'' do Home Assistant, mas este repositório requer a versão mínima ''{minversion}'' para ser instalado.\",\"dialog.configured.confirm\":\"Ir para integrações\",\"dialog.configured.message\":\"A integração {name} é configurada ou ignorada, é necessário apagar a configuração para a mesma antes de a remover do HACS\",\"dialog.configured.title\":\"A integração está configurada\",\"dialog.reload.confirm\":\"Quer fazer isso agora?\",\"dialog.reload.description\":\"É necessário recarregar o seu navegador para que os recursos actualizados possam ser utilizados.\",\"dialog.remove.message\":\"Quer mesmo remover o {name}?\",\"dialog.remove.title\":\"Remover\",\"dialog_about.downloaded_repositories\":\"Repositórios descarregados\",\"dialog_about.frontend_version\":\"Versão Frontend\",\"dialog_about.integration_version\":\"Versão de integração\",\"dialog_about.useful_links\":\"Links úteis\",\"dialog_add_repo.limit\":\"Apenas os 100 primeiros repositórios serão mostrados, use a pesquisa para filtrar o que precisa\",\"dialog_add_repo.no_match\":\"Não foram encontrados repositórios que correspondam ao filtro\",\"dialog_add_repo.sort_by\":\"Ordenar por\",\"dialog_add_repo.sort_by_values.last_updated\":\"Última actualização\",\"dialog_add_repo.sort_by_values.name\":\"Nome\",\"dialog_add_repo.sort_by_values.stars\":\"Estrelas\",\"dialog_add_repo.title\":\"Adicionar repositório\",\"dialog_custom_repositories.category\":\"Categoria\",\"dialog_custom_repositories.no_category\":\"Categoria em falta\",\"dialog_custom_repositories.no_repository\":\"Repositório em falta\",\"dialog_custom_repositories.title\":\"Repositórios personalizados\",\"dialog_custom_repositories.url_placeholder\":\"Adicionar URL do repositório personalizado\",\"dialog_download.restart\":\"Lembre-se de que precisa de reiniciar o Home Assistant antes de serem aplicadas alterações às integrações (custom_components).\",\"dialog_download.select_version\":\"Seleccione a versão\",\"dialog_download.show_beta\":\"Mostrar versões beta\",\"dialog_download.type\":\"Tipo\",\"dialog_download.url\":\"URL\",\"dialog_info.author\":\"Autor\",\"dialog_info.download\":\"Descarregar este repositório com HACS\",\"dialog_info.downloads\":\"Transferências\",\"dialog_info.loading\":\"A carregar informações...\",\"dialog_info.no_info\":\"O developer não forneceu mais informações sobre este repositório\",\"dialog_info.open_issues\":\"Questões em aberto\",\"dialog_info.open_repo\":\"Abrir Repositório\",\"dialog_info.stars\":\"Estrelas\",\"dialog_info.version_installed\":\"Versão descarregada\",\"dialog_removed.link\":\"Link externo para mais informações\",\"dialog_removed.name\":\"Nome do repositório\",\"dialog_removed.reason\":\"Motivo de remoção\",\"dialog_removed.type\":\"Tipo de remoção\",\"dialog_update.available_version\":\"Versão disponível\",\"dialog_update.changelog\":\"Changelog\",\"dialog_update.downloaded_version\":\"Versão descarregada\",\"dialog_update.message\":\"Está disponível uma nova versão do {name}.\",\"dialog_update.no_info\":\"O autor não forneceu qualquer informação para este comunicado\",\"dialog_update.releasenotes\":\"Notas de lançamento para {release}\",\"dialog_update.title\":\"Atualização pendente\",\"entry.information\":\"Informações\",\"entry.intro\":\"Atualizações e mensagens importantes serão mostradas aqui\",\"entry.messages.disabled.constrains.description\":\"Seu ambiente não é compatível para executar HACS, verifique seu arquivo de registro para obter mais detalhes.\",\"entry.messages.disabled.constrains.title\":\"Restrições\",\"entry.messages.disabled.content\":\"Verifique o seu ficheiro de log para obter mais detalhes\",\"entry.messages.disabled.invalid_token.description\":\"Reconfigurar o HACS e reiniciar o Home Assistant.\",\"entry.messages.disabled.invalid_token.title\":\"Token inválido\",\"entry.messages.disabled.load_hacs.description\":\"Verifique o seu ficheiro de registo para mais detalhes\",\"entry.messages.disabled.load_hacs.title\":\"HACS não podia carregar\",\"entry.messages.disabled.rate_limit.description\":\"As chamadas API do GitHub são limitadas, o que será resolvido em menos de 1 hora.\",\"entry.messages.disabled.rate_limit.title\":\"Ratelimited\",\"entry.messages.disabled.removed.description\":\"HACS é removido, reinicie Home Assistant.\",\"entry.messages.disabled.removed.title\":\"Removido\",\"entry.messages.disabled.restore.description\":\"Verifique o seu ficheiro de registo para mais detalhes\",\"entry.messages.disabled.restore.title\":\"A restauração do HACS falhou\",\"entry.messages.disabled.title\":\"HACS está desativado\",\"entry.messages.has_pending_tasks.content\":\"Alguns repositórios podem não aparecer até que isso seja concluído\",\"entry.messages.has_pending_tasks.title\":\"Tarefas em segundo plano pendentes\",\"entry.messages.removed_repository\":\"Removido o repositório ''{repositório}''.\",\"entry.messages.resources.content\":\"Tem {number} elementos que não são carregados corretamente em Lovelace.\",\"entry.messages.resources.title\":\"Não carregado em Lovelace\",\"entry.messages.restart.content\":\"Tem {number} integrações que exigem uma reinicialização do Home Assistant, pode fazer isso a partir da secção 'Controlo do Servidor' na parte de configuração do Home Assistant.\",\"entry.messages.restart.title\":\"Reinicialização pendente\",\"entry.messages.setup.content\":\"A HACS está a criar, durante este tempo pode faltar ou estar incorrecta alguma informação\",\"entry.messages.setup.title\":\"HACS está a estabelecer-se\",\"entry.messages.startup.content\":\"O HACS está a iniciar. Durante este tempo, algumas informações podem estar ausentes ou incorretas\",\"entry.messages.startup.title\":\"O HACS está a iniciar\",\"entry.messages.waiting.content\":\"HACS está à espera que o Home Assistant termine as tarefas de arranque antes de iniciar as tarefas de arranque\",\"entry.messages.waiting.title\":\"HACS está à espera\",\"entry.messages.wrong_frontend_installed.content\":\"Tem instalado o {running} do frontend HACS, mas a versão {expected} era esperada, se vir que esta mensagem Home Assistant não foi capaz de instalar a nova versão, tente reiniciar o Home Assistant.\",\"entry.messages.wrong_frontend_installed.title\":\"Versão inesperada do frontend\",\"entry.messages.wrong_frontend_loaded.content\":\"Está a executar a versão {running} do frontend HACS, mas a versão {expected} é a mais atualizada, deve limpar a cache do seu browser.\",\"entry.messages.wrong_frontend_loaded.title\":\"Versão do frontend inesperada\",\"entry.pending_updates\":\"Atualizações pendentes\",\"menu.about\":\"Sobre o HACS\",\"menu.clear\":\"Limpar todos os recentes\",\"menu.custom_repositories\":\"Repositórios personalizados\",\"menu.dismiss\":\"Dispensar todos os novos repositórios.\",\"menu.documentation\":\"Documentação\",\"menu.open_issue\":\"Questão em aberto\",\"menu.reload\":\"Recarregar janela\",\"options.abort.not_setup\":\"HACS não está configurado.\",\"options.abort.release_limit_value\":\"O limite de libertação tem de estar entre 1 e 100\",\"options.step.user.data.appdaemon\":\"Ativar a localização e o seguimento de aplicações AppDaemon\",\"options.step.user.data.country\":\"Filtrar com o código do país.\",\"options.step.user.data.debug\":\"Ativar depuração.\",\"options.step.user.data.experimental\":\"Ativar recursos experimentais\",\"options.step.user.data.netdaemon\":\"Ativar a localização e o seguimento de aplicações NetDaemon\",\"options.step.user.data.not_in_use\":\"Não está a ser usado com YAML\",\"options.step.user.data.release_limit\":\"Número de lançamentos a mostrar.\",\"options.step.user.data.sidepanel_icon\":\"Ícone no painel lateral\",\"options.step.user.data.sidepanel_title\":\"Título no painel lateral\",\"repository_card.dismiss\":\"dispensar\",\"repository_card.information\":\"Informações\",\"repository_card.new_repository\":\"Novo repositório\",\"repository_card.not_loaded\":\"Não carregado\",\"repository_card.open_issue\":\"Questão em aberto\",\"repository_card.open_source\":\"Código aberto\",\"repository_card.pending_restart\":\"Reinicialização pendente\",\"repository_card.pending_update\":\"Atualização pendente\",\"repository_card.redownload\":\"Redownload\",\"repository_card.report\":\"Motivo para remover\",\"repository_card.update_information\":\"Atualizar informações\",\"search.downloaded\":\"Pesquisa de repositórios descarregados\",\"search.downloaded_new\":\"Pesquisa de repositórios descarregados ou novos\",\"search.placeholder\":\"Procurar repositório\",\"sections.about.description\":\"Mostrar informações sobre o HACS\",\"sections.about.title\":\"Sobre\",\"sections.addon.description\":\"Não existem suplementos no HACS, mas pode clicar aqui para chegar ao supervisor\",\"sections.addon.title\":\"Complementos\",\"sections.automation.description\":\"Aqui encontra os python_scripts, aplicações AppDaemon e NetDaemon\",\"sections.automation.title\":\"Automação\",\"sections.frontend.description\":\"Aqui encontra os temas, cartões personalizados e outros elementos para o lovelace\",\"sections.frontend.title\":\"Frontend\",\"sections.integrations.description\":\"Aqui encontra as integrações personalizadas (custom_components)\",\"sections.integrations.title\":\"Integrações\",\"sections.pending_repository_upgrade\":\"Está a executar a versão {downloaded} , mas a versão {available} já está disponível.\",\"store.explore\":\"Explorar e descarregar repositórios\",\"store.new_repositories_note\":\"Há aqui alguns novos repositórios em exibição\",\"store.no_repositories\":\"Sem repositórios\",\"store.no_repositories_desc1\":\"Parece que ainda não possui nenhum repositório instalado nesta secção.\",\"store.no_repositories_desc2\":'Clique no \"+\", no canto inferior para adicionar o seu primeiro!',\"store.no_repositories_found_desc1\":'Nenhum repositório transferido que corresponda a \"{searchInput}\" encontrado nesta secção.',\"store.no_repositories_found_desc2\":\"Tente procurar outra coisa!\"},ro:{\"common.appdaemon\":\"AppDaemon\",\"common.close\":\"Închide\",\"common.integration\":\"Integrare\",\"common.navigate\":\"navighează\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Plugin\",\"common.remove\":\"Șterge\",\"common.repositories\":\"Depozite\",\"common.theme\":\"Temă\",\"common.yes\":\"Da\",\"dialog.remove.title\":\"Șterge\",\"dialog_add_repo.sort_by_values.last_updated\":\"Ultima actualizare\",\"dialog_add_repo.sort_by_values.name\":\"Nume\",\"dialog_add_repo.sort_by_values.stars\":\"Stele\",\"dialog_download.select_version\":\"Selectați versiunea\",\"dialog_download.show_beta\":\"Afișează versiunile beta\",\"dialog_download.type\":\"Tip\",\"dialog_download.url\":\"URL\",\"dialog_update.downloaded_version\":\"Versiunea descărcată\",\"options.step.user.data.appdaemon\":\"Activați descoperirea și urmărirea aplicațiilor AppDaemon\",\"options.step.user.data.country\":\"Filtrează cu codul țării.\",\"options.step.user.data.debug\":\"Activează depanarea.\",\"options.step.user.data.experimental\":\"Activați funcțiile experimentale\",\"options.step.user.data.netdaemon\":\"Activați descoperirea și urmărirea aplicațiilor NetDaemon\",\"options.step.user.data.not_in_use\":\"Nu este utilizat cu YAML\",\"options.step.user.data.release_limit\":\"Număr de versiuni afișate.\",\"options.step.user.data.sidepanel_icon\":\"Pictogramă Panou lateral\",\"options.step.user.data.sidepanel_title\":\"Titlu panou lateral\"},ru:{\"common.add\":\"добавить\",\"common.appdaemon\":\"AppDaemon\",\"common.cancel\":\"Отмена\",\"common.close\":\"Закрыть\",\"common.download\":\"Скачать\",\"common.ignore\":\"Игнорировать\",\"common.integration\":\"Интеграция\",\"common.integration_plural\":\"Интеграции\",\"common.lovelace\":\"Lovelace\",\"common.navigate\":\"перейти\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.python_script\":\"Скрипт Python\",\"common.reload\":\"Перезагрузить\",\"common.remove\":\"Удалить\",\"common.repositories\":\"Репозитории\",\"common.repository\":\"Репозиторий\",\"common.theme\":\"Тема\",\"common.update\":\"Обновить\",\"common.updates\":\"Обновления\",\"common.yes\":\"Да\",\"confirm.home_assistant_version_not_correct\":\"Вы используете Home Assistant версии ''{haversion}'', но данный репозиторий требует минимальную установленную версию ''{minversion}''.\",\"dialog.configured.confirm\":\"Перейти к интеграциям\",\"dialog.configured.message\":\"Интеграция {name} настроена или игнорируется, необходимо удалить конфигурацию для нее, прежде чем удалять ее из HACS\",\"dialog.configured.title\":\"Интеграция настроена\",\"dialog.reload.confirm\":\"Вы хотите сделать это сейчас?\",\"dialog.reload.description\":\"Вам необходимо перезагрузить браузер, чтобы использовать обновленные ресурсы.\",\"dialog.remove.message\":\"Вы уверены, что хотите удалить {name}?\",\"dialog.remove.title\":\"Удалить\",\"dialog_about.downloaded_repositories\":\"Загруженные репозитории\",\"dialog_about.frontend_version\":\"Версия интерфейса\",\"dialog_about.integration_version\":\"Версия интеграции\",\"dialog_about.useful_links\":\"Полезные ссылки\",\"dialog_add_repo.limit\":\"Показаны только первые 100 репозиториев, используйте поиск для фильтрации того, что вам нужно\",\"dialog_add_repo.no_match\":\"Не найдено репозиторий, соответствующих фильтру\",\"dialog_add_repo.sort_by\":\"Сортировать по\",\"dialog_add_repo.sort_by_values.last_updated\":\"Последнее обновление\",\"dialog_add_repo.sort_by_values.name\":\"Название\",\"dialog_add_repo.sort_by_values.stars\":\"Звёзды\",\"dialog_add_repo.title\":\"Новый репозиторий\",\"dialog_custom_repositories.category\":\"Категория\",\"dialog_custom_repositories.no_category\":\"Категория не указана\",\"dialog_custom_repositories.no_repository\":\"Репозиторий не указан\",\"dialog_custom_repositories.title\":\"Пользовательские репозитории\",\"dialog_custom_repositories.url_placeholder\":\"Добавить пользовательский URL-адрес репозитория\",\"dialog_download.note_downloaded\":\"После скачивания файлы будут расположены в {location}\",\"dialog_download.restart\":\"Помните, что вам нужно перезапустить Home Assistant, прежде чем будут применены изменения в интеграциях (custom_components).\",\"dialog_download.select_version\":\"Выберите версию\",\"dialog_download.show_beta\":\"Показывать бета-версии\",\"dialog_download.type\":\"Тип\",\"dialog_download.url\":\"URL\",\"dialog_info.author\":\"Автор\",\"dialog_info.download\":\"Загрузите этот репозиторий с помощью HACS\",\"dialog_info.downloads\":\"Загрузки\",\"dialog_info.loading\":\"Загрузка информации...\",\"dialog_info.no_info\":\"Разработчик не предоставил никакой дополнительной информации для этого репозитория\",\"dialog_info.open_issues\":\"Открытые вопросы\",\"dialog_info.open_repo\":\"Открыть репозиторий\",\"dialog_info.stars\":\"Звёзды\",\"dialog_info.version_installed\":\"Версия загружена\",\"dialog_removed.link\":\"Внешняя ссылка для получения дополнительной информации\",\"dialog_removed.name\":\"Имя репозитория\",\"dialog_removed.reason\":\"Причина удаления\",\"dialog_removed.type\":\"Тип удаления\",\"dialog_update.available_version\":\"Доступная версия\",\"dialog_update.changelog\":\"Изменения\",\"dialog_update.downloaded_version\":\"Загруженная версия\",\"dialog_update.message\":\"Доступна новая версия {name}\",\"dialog_update.no_info\":\"Автор не предоставил никакой информации для этого выпуска\",\"dialog_update.releasenotes\":\"Примечания к выпуску для {release}\",\"dialog_update.title\":\"Обновление в ожидании\",\"entry.information\":\"Информация\",\"entry.intro\":\"Обновления и важные сообщения будут отображаться здесь, если таковые имеются\",\"entry.messages.disabled.constrains.description\":\"Ваша среда несовместима с работой HACS, проверьте файл журнала для получения подробной информации.\",\"entry.messages.disabled.constrains.title\":\"Ограничения\",\"entry.messages.disabled.content\":\"Проверьте логи для получения более подробной информации.\",\"entry.messages.disabled.invalid_token.description\":\"Перенастройте HACS и перезапустите Home Assistant.\",\"entry.messages.disabled.invalid_token.title\":\"Недействительный токен\",\"entry.messages.disabled.load_hacs.description\":\"Проверьте файл журнала для получения подробной информации\",\"entry.messages.disabled.load_hacs.title\":\"Не удалось загрузить HACS\",\"entry.messages.disabled.rate_limit.description\":\"Вызовы API GitHub ограничены по периодичности, это будет устранено менее чем за 1 час.\",\"entry.messages.disabled.rate_limit.title\":\"Скорость ограничена\",\"entry.messages.disabled.removed.description\":\"HACS удален, перезапустите Home Assistant.\",\"entry.messages.disabled.removed.title\":\"Удалено\",\"entry.messages.disabled.restore.description\":\"Проверьте файл журнала для получения подробной информации\",\"entry.messages.disabled.restore.title\":\"Не удалось восстановить HACS\",\"entry.messages.disabled.title\":\"HACS отключен\",\"entry.messages.has_pending_tasks.content\":\"Некоторые репозитории могут не отображаться до тех пор, пока это не будет завершено\",\"entry.messages.has_pending_tasks.title\":\"Выполняются фоновые задачи\",\"entry.messages.removed_repository\":\"Репозиторий ''{repository}'' удален\",\"entry.messages.resources.content\":\"У вас есть {number} элементов Lovelace, которые не загружаются должным образом.\",\"entry.messages.resources.title\":\"Не загружено в Lovelace\",\"entry.messages.restart.content\":\"У вас есть {number} интеграций, которые требуют перезагрузки Home Assistant, Вы можете сделать это из раздела 'Сервер' в разделе конфигурации пользовательского интерфейса Home Assistant.\",\"entry.messages.restart.title\":\"В ожидании перезапуска\",\"entry.messages.setup.content\":\"HACS настраивается, в это время некоторая информация может отсутствовать или быть неверной\",\"entry.messages.setup.title\":\"HACS настраивается\",\"entry.messages.startup.content\":\"HACS запускается, в течение этого времени некоторые сведения могут отсутствовать или быть неверными\",\"entry.messages.startup.title\":\"HACS запускается\",\"entry.messages.waiting.content\":\"HACS ожидает завершения запуска Home Assistant, прежде чем приступить к выполнению задач запуска\",\"entry.messages.waiting.title\":\"HACS ожидает\",\"entry.messages.wrong_frontend_installed.content\":\"У вас установлена версия {running} интерфейса HACS, однако ожидаемая версия — {expected}; если вы видите это сообщение, то Home Assistant не смог установить новую версию интерфейса; попробуйте перезапустить Home Assistant\",\"entry.messages.wrong_frontend_installed.title\":\"Неожиданная версия интерфейса\",\"entry.messages.wrong_frontend_loaded.content\":\"Вы используете версию {running} интерфейса HACS, однако ожидаемая версия — {expected}, попробуйте очистить кеш браузера.\",\"entry.messages.wrong_frontend_loaded.title\":\"Неожиданная версия интерфейса\",\"entry.pending_updates\":\"Обновления в ожидании\",\"menu.about\":\"О HACS\",\"menu.clear\":\"Очистить все новые репозитории\",\"menu.custom_repositories\":\"Пользовательские репозитории\",\"menu.dismiss\":\"Убрать все новые\",\"menu.documentation\":\"Документация\",\"menu.open_issue\":\"Сообщить о проблеме\",\"menu.reload\":\"Перезагрузить окно\",\"options.abort.not_setup\":\"HACS не настроен.\",\"options.abort.release_limit_value\":\"Ограничения для релиза должны быть в диапазоне от 1 до 100\",\"options.step.user.data.appdaemon\":\"Включить поиск и отслеживание приложений AppDaemon\",\"options.step.user.data.country\":\"Фильтр по стране.\",\"options.step.user.data.debug\":\"Включить отладку.\",\"options.step.user.data.experimental\":\"Вкл. экспериментальные функции\",\"options.step.user.data.netdaemon\":\"Включить поиск и отслеживание приложений NetDaemon\",\"options.step.user.data.not_in_use\":\"Не используется с YAML\",\"options.step.user.data.release_limit\":\"Число доступных версий.\",\"options.step.user.data.sidepanel_icon\":\"Иконка в боковом меню\",\"options.step.user.data.sidepanel_title\":\"Название в боковом меню\",\"repository_card.dismiss\":\"убрать\",\"repository_card.information\":\"Информация\",\"repository_card.new_repository\":\"Новый репозиторий\",\"repository_card.not_loaded\":\"Не загружено\",\"repository_card.open_issue\":\"Сообщить о проблеме\",\"repository_card.open_source\":\"Открыть источник\",\"repository_card.pending_restart\":\"В ожидании перезапуска\",\"repository_card.pending_update\":\"Ожидается обновление\",\"repository_card.redownload\":\"Скачать повторно\",\"repository_card.report\":\"Сообщить о нарушении\",\"repository_card.update_information\":\"Обновить информацию\",\"search.downloaded\":\"Поиск среди скачанных репозиториев\",\"search.downloaded_new\":\"Поиск среди скачанных или новых репозиториев\",\"search.placeholder\":\"Поиск репозитория\",\"sections.about.description\":\"Показать информацию о HACS\",\"sections.about.title\":\"О проекте\",\"sections.addon.description\":\"В HACS нет дополнений, но вы можете кликнуть здесь, чтобы перейти в панель супервизора\",\"sections.addon.title\":\"Дополнения\",\"sections.automation.description\":\"Здесь вы найдете python_scripts, приложения AppDaemon и NetDaemon.\",\"sections.automation.title\":\"Автоматизация\",\"sections.frontend.description\":\"Здесь вы найдете темы, пользовательские карточки и другие элементы для Lovelace\",\"sections.frontend.title\":\"Пользовательский интерфейс\",\"sections.integrations.description\":\"Здесь вы найдете пользовательские интеграции (custom_components)\",\"sections.integrations.title\":\"Интеграции\",\"sections.pending_repository_upgrade\":\"Вы используете версию {downloaded}, доступна версия {available}\",\"store.explore\":\"Исследуйте и устанавливайте репозитории\",\"store.new_repositories_note\":\"Здесь показаны некоторые новые репозитории\",\"store.no_repositories\":\"Нет репозиториев\",\"store.no_repositories_desc1\":\"Похоже, у вас еще нет репозиториев, установленных в этом разделе.\",\"store.no_repositories_desc2\":\"Нажмите на + в нижнем углу, чтобы добавить первый!\",\"store.no_repositories_found_desc1\":'В этом разделе не найдено установленных репозиторий, соответствующих \"{searchinput}\".',\"store.no_repositories_found_desc2\":\"Попробуйте искать что-нибудь другое!\"},sl:{\"common.appdaemon\":\"AppDaemon\",\"common.integration\":\"Integracija\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.repositories\":\"Repozitoriji\",\"common.theme\":\"Tema\",\"confirm.home_assistant_version_not_correct\":\"Uporabljate Home Assistant verzije ''{haversion}'', vendar to skladišče zahteva nameščeno najmanj različico ''{minversion}''.\",\"options.step.user.data.appdaemon\":\"Omogoči odkrivanje in sledenje aplikacij AppDaemon\",\"options.step.user.data.country\":\"Filtrirajte s kodo države.\",\"options.step.user.data.debug\":\"Omogoči odpravljanje napak.\",\"options.step.user.data.experimental\":\"Omogočite poskusne funkcije\",\"options.step.user.data.netdaemon\":\"Omogoči odkrivanje in sledenje aplikacij NetDaemon\",\"options.step.user.data.not_in_use\":\"Ni v uporabi z YAML\",\"options.step.user.data.release_limit\":\"Število izdaj, ki jih želite prikazati.\",\"options.step.user.data.sidepanel_icon\":\"Ikona stranske plošče\",\"options.step.user.data.sidepanel_title\":\"Naslov stranske plošče\"},sv:{\"common.appdaemon\":\"AppDaemon\",\"common.close\":\"Stäng\",\"common.download\":\"Ladda ner\",\"common.integration\":\"Integration\",\"common.navigate\":\"navigera\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Lovelace\",\"common.python_script\":\"Python skript\",\"common.repositories\":\"Repositories\",\"common.show\":\"Visa\",\"common.theme\":\"Tema\",\"common.updates\":\"Uppdateringar\",\"common.yes\":\"Ja\",\"confirm.home_assistant_version_not_correct\":\"Du kör Home Assistant-versionen ''{haversion}'', men detta repository kräver att lägsta versionen ''{minversion}'' måste installeras.\",\"dialog.configured.title\":\"Integrationen är konfigurerad\",\"dialog.remove.message\":\"Vill du verkligen ta bort {name}?\",\"dialog.remove.title\":\"Ta bort\",\"dialog_add_repo.sort_by_values.last_updated\":\"Senast uppdaterad\",\"dialog_add_repo.sort_by_values.name\":\"Namn\",\"dialog_add_repo.sort_by_values.stars\":\"Stjärnor\",\"dialog_download.note_downloaded\":\"När den har laddats ner kommer den att finnas i {location}\",\"dialog_download.select_version\":\"Välj version\",\"dialog_download.show_beta\":\"Visa betaversioner\",\"dialog_download.type\":\"Typ\",\"dialog_download.url\":\"URL\",\"dialog_info.version_installed\":\"Version nedladdad\",\"dialog_update.downloaded_version\":\"Nedladdad version\",\"dialog_update.message\":\"En ny version av {name} är tillgänglig\",\"options.step.user.data.appdaemon\":\"Upptäck och följ Appdaemon applikationer\",\"options.step.user.data.country\":\"Filtrera på landskod.\",\"options.step.user.data.debug\":\"Aktivera felsökning\",\"options.step.user.data.experimental\":\"Använd experimentella funktioner\",\"options.step.user.data.netdaemon\":\"Upptäck och följ NetDaemon applikationer\",\"options.step.user.data.not_in_use\":\"Används inte med YAML\",\"options.step.user.data.release_limit\":\"Antalet releaser som visas.\",\"options.step.user.data.sidepanel_icon\":\"Ikon för sidpanel\",\"options.step.user.data.sidepanel_title\":\"Rubrik för sidpanel\",\"repository_card.redownload\":\"Ladda ner igen\",\"sections.addon.title\":\"Tillägg\"},vi:{\"common.add\":\"thêm\",\"common.integration\":\"Tích Hợp\",\"common.integration_plural\":\"Tích Hợp\",\"common.lovelace\":\"Lovelace\",\"common.netdaemon\":\"NetDaemon\",\"common.plugin\":\"Bổ Sung\",\"common.repositories\":\"Các kho ứng dụng\",\"common.repository\":\"Kho lưu trữ\",\"common.theme\":\"Chủ đề\",\"common.update\":\"Cập nhật\",\"confirm.home_assistant_version_not_correct\":\"Bạn đang chạy phiên bản Home Assistant ''{haversion}'' nhưng kho ứng dụng này yêu cầu phiên bản thấp nhất ''{minversion}'' để cài đặt.\",\"dialog_about.frontend_version\":\"Phiên bản Frontend\",\"dialog_about.integration_version\":\"Phiên bản tích hợp\",\"dialog_about.useful_links\":\"Liên kết hữu ích\",\"dialog_add_repo.limit\":\"Chỉ 100 kho lưu trữ đầu tiên được hiển thị, sử dụng mục tìm kiếm để lọc những gì bạn cần\",\"dialog_add_repo.no_match\":\"Không tìm thấy kho lưu trữ phù hợp với bộ lọc của bạn\",\"dialog_add_repo.sort_by\":\"Sắp xếp theo\",\"dialog_add_repo.title\":\"Thêm kho lưu trữ\",\"dialog_custom_repositories.category\":\"Danh mục\",\"dialog_custom_repositories.no_category\":\"Thiếu danh mục\",\"dialog_custom_repositories.no_repository\":\"Kho lưu trữ bị thiếu\",\"dialog_custom_repositories.title\":\"Các kho lưu trữ tuỳ chỉnh\",\"dialog_custom_repositories.url_placeholder\":\"Thêm URL của kho lưu trữ tùy chỉnh\",\"dialog_info.author\":\"Tác giả\",\"dialog_info.downloads\":\"Tải xuống\",\"dialog_info.loading\":\"Đang tải thông tin...\",\"dialog_info.no_info\":\"Nhà phát triển đã không cung cấp thêm thông tin nào cho kho lưu trữ này\",\"dialog_info.open_issues\":\"Báo cáo vấn đề\",\"dialog_info.open_repo\":\"Mở Kho ứng dụng\",\"dialog_info.stars\":\"Số sao\",\"dialog_update.available_version\":\"Phiên bản hiện có\",\"dialog_update.changelog\":\"Thay đổi\",\"dialog_update.releasenotes\":\"Thông tin phiên bản {Release}\",\"dialog_update.title\":\"Cập nhật đang chờ\",\"entry.information\":\"Thông tin\",\"entry.intro\":\"Các cập nhật và thông điệp quan trọng sẽ hiển thị ở đây nếu có\",\"entry.messages.disabled.content\":\"Kiểm tra tệp nhật ký của bạn để biết thêm chi tiết\",\"entry.messages.disabled.title\":\"HACS đã bị vô hiệu hoá\",\"entry.messages.has_pending_tasks.content\":\"Một số kho có thể không thấy cho đến khi điều này hoàn tất\",\"entry.messages.has_pending_tasks.title\":\"Tác vụ nền đang chờ\",\"entry.messages.resources.content\":\"Bạn có {number} thành phần Lovelace không được tải chính xác.\",\"entry.messages.resources.title\":\"Không được tải trong Lovelace\",\"entry.messages.restart.content\":\"Bạn có {number} tích hợp yêu cầu khởi động lại Home Assistant, bạn có thể làm điều này từ mục 'Điều khiển máy chủ' bên trong tab Cấu hình trên giao diện Home Assistant.\",\"entry.messages.restart.title\":\"Đang chờ khởi động lại\",\"entry.messages.startup.content\":\"HACS đang khởi động, suốt quá trình này có thể một số thông tin sẽ bị thiếu hoặc không chính xác\",\"entry.messages.startup.title\":\"HACS đang khởi động\",\"entry.messages.wrong_frontend_loaded.content\":\"Bạn đang chạy phiên bản {running} của HACS frontend, nhưng phiên bản được yêu cầu là {expected}, bạn nên xoá bộ đệm của trình duyệt web.\",\"entry.messages.wrong_frontend_loaded.title\":\"Phiên bản frontend không đúng\",\"entry.pending_updates\":\"Đang chờ cập nhật\",\"menu.about\":\"Giới thiệu HACS\",\"menu.clear\":\"Ẩn thông báo mục mới\",\"menu.custom_repositories\":\"Các kho ứng dụng tuỳ chỉnh\",\"menu.dismiss\":\"Bỏ qua tất cả kho chứa mới\",\"menu.documentation\":\"Tài liệu\",\"menu.open_issue\":\"Báo cáo vấn đề\",\"menu.reload\":\"Tải lại cửa sổ\",\"options.step.user.data.appdaemon\":\"Kích hoạt phát hiện & theo dõi các ứng dụng AppDaemon\",\"options.step.user.data.country\":\"Lọc với mã quốc gia.\",\"options.step.user.data.debug\":\"Kích hoạt Trình gỡ lỗi\",\"options.step.user.data.experimental\":\"Kích hoạt các tính năng thử nghiệm\",\"options.step.user.data.netdaemon\":\"Kích hoạt phát hiện & theo dõi các ứng dụng NetDaemon\",\"options.step.user.data.not_in_use\":\"Không sử dụng với YAML\",\"options.step.user.data.release_limit\":\"Số lượng phiên bản hiển thị.\",\"options.step.user.data.sidepanel_icon\":\"Biểu tượng bảng điều khiển cạnh bên\",\"options.step.user.data.sidepanel_title\":\"Tiêu đề bảng điều khiển cạnh bên\",\"repository_card.dismiss\":\"bỏ qua\",\"repository_card.information\":\"Thông tin\",\"repository_card.new_repository\":\"Kho lưu trữ mới\",\"repository_card.not_loaded\":\"Không được tải\",\"repository_card.open_issue\":\"Báo cáo vấn đề\",\"repository_card.open_source\":\"Mã nguồn mở\",\"repository_card.pending_restart\":\"Đang chờ khởi động lại\",\"repository_card.pending_update\":\"Cập nhật đang chờ\",\"repository_card.report\":\"Báo cáo để loại bỏ\",\"repository_card.update_information\":\"Cập nhật thông tin\",\"search.placeholder\":\"Tìm kiếm kho lưu trữ\",\"sections.about.description\":\"Hiển thị thông tin về HACS\",\"sections.about.title\":\"Thông tin\",\"sections.automation.description\":\"Đây là nơi bạn tìm thấy python_scripts, ứng dụng AppDaemon và ứng dụng NetDaemon\",\"sections.automation.title\":\"Tự động hóa\",\"sections.frontend.description\":\"Đây là nơi bạn tìm thấy chủ đề, thẻ tùy chỉnh và các thành phần khác cho lovelace\",\"sections.frontend.title\":\"Frontend\",\"sections.integrations.description\":\"Đây là nơi bạn tìm thấy tích hợp tùy chỉnh (custom_components)\",\"sections.integrations.title\":\"Tích Hợp\",\"sections.pending_repository_upgrade\":\"Bạn đang chạy phiên bản {installed}, phiên bản {available} có sẵn\",\"store.no_repositories\":\"Không có kho lưu trữ\",\"store.no_repositories_desc1\":\"Có vẻ như bạn chưa có bất kỳ kho lưu trữ nào được cài đặt trong phần này.\",\"store.no_repositories_desc2\":\"Nhấp vào biểu tượng + ở góc dưới cùng để thêm mục mới đầu tiên của bạn!\",\"store.no_repositories_found_desc1\":'Không tìm thấy kho lưu trữ được cài đặt phù hợp với \"{searchInput}\" trong mục này.',\"store.no_repositories_found_desc2\":\"Thử tìm kiếm với từ khoá khác!\"},zh_Hans:{\"common.add\":\"添加\",\"common.appdaemon\":\"AppDaemon\",\"common.cancel\":\"取消\",\"common.close\":\"关闭\",\"common.download\":\"下载\",\"common.ignore\":\"忽略\",\"common.integration\":\"集成\",\"common.integration_plural\":\"集成\",\"common.lovelace\":\"Lovelace\",\"common.navigate\":\"前往\",\"common.netdaemon\":\"NetDaemon 应用\",\"common.plugin\":\"Lovelace\",\"common.python_script\":\"Python 脚本\",\"common.reload\":\"重新加载\",\"common.remove\":\"删除\",\"common.repositories\":\"储存库数量\",\"common.repository\":\"存储库\",\"common.theme\":\"主题\",\"common.update\":\"更新\",\"common.yes\":\"是\",\"confirm.home_assistant_version_not_correct\":\"您正在运行 Home Assistant 版本 ''{haversion}''，此存储库要求最低版本为 ''{minversion}''。\",\"dialog.configured.confirm\":\"转到集成\",\"dialog.configured.message\":\"集成 {name} 已完成配置或被忽略，如需将其从 HACS 中删除，需要先删除其配置。\",\"dialog.configured.title\":\"集成正在使用\",\"dialog.reload.confirm\":\"立即进行此操作吗？\",\"dialog.reload.description\":\"需要清除浏览器缓存才能使更新后的资源生效。\",\"dialog.remove.message\":\"您确定要删除 {name} 吗？\",\"dialog.remove.title\":\"删除\",\"dialog_about.downloaded_repositories\":\"已下载存储库\",\"dialog_about.frontend_version\":\"前端版本\",\"dialog_about.integration_version\":\"集成版本\",\"dialog_about.useful_links\":\"有用的链接\",\"dialog_add_repo.limit\":\"仅显示前 100 个存储库，请通过搜索过滤所需内容\",\"dialog_add_repo.no_match\":\"未找到符合条件的存储库\",\"dialog_add_repo.sort_by\":\"排序方式\",\"dialog_add_repo.sort_by_values.last_updated\":\"上次更新\",\"dialog_add_repo.sort_by_values.name\":\"名称\",\"dialog_add_repo.sort_by_values.stars\":\"星标数\",\"dialog_add_repo.title\":\"添加存储库\",\"dialog_custom_repositories.category\":\"类别\",\"dialog_custom_repositories.no_category\":\"没有选择类别\",\"dialog_custom_repositories.no_repository\":\"存储库地址不能为空\",\"dialog_custom_repositories.title\":\"自定义存储库\",\"dialog_custom_repositories.url_placeholder\":\"添加自定义存储库 URL\",\"dialog_download.restart\":\"请注意，只有在重新启动 Home Assistant 后，对集成 (custom_components) 所做的更改才会生效。\",\"dialog_download.select_version\":\"选择版本\",\"dialog_download.show_beta\":\"显示测试版\",\"dialog_download.type\":\"类型\",\"dialog_download.url\":\"URL\",\"dialog_info.author\":\"作者\",\"dialog_info.download\":\"通过 HACS 下载此存储库\",\"dialog_info.downloads\":\"下载量\",\"dialog_info.loading\":\"正在加载详细信息...\",\"dialog_info.no_info\":\"开发者未就此存储库提供更多信息\",\"dialog_info.open_issues\":\"提交 Issue\",\"dialog_info.open_repo\":\"打开存储库\",\"dialog_info.stars\":\"星标数\",\"dialog_info.version_installed\":\"当前版本\",\"dialog_removed.link\":\"外部链接以获取更多信息\",\"dialog_removed.name\":\"存储库名称\",\"dialog_removed.reason\":\"删除原因\",\"dialog_removed.type\":\"删除类型\",\"dialog_update.available_version\":\"可用版本\",\"dialog_update.changelog\":\"更新日志\",\"dialog_update.downloaded_version\":\"已安装版本\",\"dialog_update.message\":\"{name} 有新版本了\",\"dialog_update.no_info\":\"作者未对此版本提供任何说明\",\"dialog_update.releasenotes\":\"{release} 发行说明\",\"dialog_update.title\":\"等待更新\",\"entry.information\":\"详情\",\"entry.intro\":\"如果有更新和重要消息，将在此处显示\",\"entry.messages.disabled.constrains.description\":\"您的环境与运行 HACS 不兼容，请检查日志文件以获取更多信息。\",\"entry.messages.disabled.constrains.title\":\"限制条件\",\"entry.messages.disabled.content\":\"请查看日志文件以了解更多信息\",\"entry.messages.disabled.invalid_token.description\":\"请重新配置 HACS，然后重新启动 Home Assistant。\",\"entry.messages.disabled.invalid_token.title\":\"token 无效\",\"entry.messages.disabled.load_hacs.description\":\"请查看日志文件以了解更多信息\",\"entry.messages.disabled.load_hacs.title\":\"HACS 无法加载\",\"entry.messages.disabled.rate_limit.description\":\"要加载的数据过多，超出了 GitHub API 的速率限制。请等待 1 小时，即可自动恢复。\",\"entry.messages.disabled.rate_limit.title\":\"流量超限\",\"entry.messages.disabled.removed.description\":\"HACS 已删除，请重新启动 Home Assistant。\",\"entry.messages.disabled.removed.title\":\"已删除\",\"entry.messages.disabled.restore.description\":\"请查看日志文件以了解更多信息\",\"entry.messages.disabled.restore.title\":\"恢复 HACS 失败\",\"entry.messages.disabled.title\":\"HACS 已禁用\",\"entry.messages.has_pending_tasks.content\":\"在完成之前，无法完整显示出所有的存储库。\",\"entry.messages.has_pending_tasks.title\":\"后台任务等待处理\",\"entry.messages.removed_repository\":\"已删除存储库 ''{repository}''\",\"entry.messages.resources.content\":\"有 {number} 个 Lovelace 元素未正确加载到 Lovelace 中。\",\"entry.messages.resources.title\":\"未载入 Lovelace\",\"entry.messages.restart.content\":\"有 {number} 个{pluralWording}需要重启 Home Assistant，可以在 Home Assistant 的“配置” - “服务控制”部分执行此操作。\",\"entry.messages.restart.title\":\"等待重启\",\"entry.messages.setup.content\":\"HACS 正在启动，在此期间，部分信息可能缺失或异常\",\"entry.messages.setup.title\":\"HACS 正在安装\",\"entry.messages.startup.content\":\"HACS 正在启动，在此期间，部分信息可能缺失或异常\",\"entry.messages.startup.title\":\"HACS 正在启动\",\"entry.messages.waiting.content\":\"待到 Home Assistant 启动完成后，HACS 的启动任务才会开始\",\"entry.messages.waiting.title\":\"HACS 正在等待\",\"entry.messages.wrong_frontend_installed.content\":\"您正在运行 HACS 前端版本 {running}，但是期望版本是 {expected}。如果看到此消息，说明 Home Assistant 未能安装新版本，请尝试重新启动 Home Assistant。\",\"entry.messages.wrong_frontend_installed.title\":\"非预期的前端版本\",\"entry.messages.wrong_frontend_loaded.content\":\"您正在运行 HACS 前端版本 {running}，但是期望版本是 {expected}，请清除浏览器缓存。\",\"entry.messages.wrong_frontend_loaded.title\":\"非预期的前端版本\",\"entry.pending_updates\":\"等待更新\",\"menu.about\":\"关于 HACS\",\"menu.clear\":\"清除所有 NEW 标记\",\"menu.custom_repositories\":\"自定义存储库\",\"menu.dismiss\":\"忽略新的存储库\",\"menu.documentation\":\"文档\",\"menu.open_issue\":\"提交 Issue\",\"menu.reload\":\"重新加载窗口\",\"options.abort.not_setup\":\"HACS 未设置完毕。\",\"options.abort.release_limit_value\":\"版本限制应在 1 到 100 之间\",\"options.step.user.data.appdaemon\":\"启用 AppDaemon 应用发现和跟踪\",\"options.step.user.data.country\":\"通过国家代码过滤\",\"options.step.user.data.debug\":\"启用调试。\",\"options.step.user.data.experimental\":\"启用实验功能\",\"options.step.user.data.netdaemon\":\"启用 NetDaemon 应用发现和跟踪\",\"options.step.user.data.not_in_use\":\"不使用 YAML\",\"options.step.user.data.release_limit\":\"要显示的版本数\",\"options.step.user.data.sidepanel_icon\":\"侧面板图标\",\"options.step.user.data.sidepanel_title\":\"侧面板标题\",\"repository_card.dismiss\":\"忽略\",\"repository_card.information\":\"详情\",\"repository_card.new_repository\":\"新存储库\",\"repository_card.not_loaded\":\"未加载\",\"repository_card.open_issue\":\"提交 Issue\",\"repository_card.open_source\":\"打开源码\",\"repository_card.pending_restart\":\"等待重启\",\"repository_card.pending_update\":\"等待更新\",\"repository_card.redownload\":\"重新下载\",\"repository_card.report\":\"举报\",\"repository_card.update_information\":\"更新信息\",\"search.downloaded\":\"搜索已下载的存储库\",\"search.downloaded_new\":\"搜索已下载或新的存储库\",\"search.placeholder\":\"搜索存储库\",\"sections.about.description\":\"显示关于 HACS 的信息\",\"sections.about.title\":\"关于\",\"sections.addon.description\":\"HACS 没有加载项，但点击此处可以前往 Supervisor 的相应页面\",\"sections.addon.title\":\"加载项\",\"sections.automation.description\":\"此处可以找到 Python 脚本、AppDaemon 应用程序和 NetDaemon 应用程序\",\"sections.automation.title\":\"自动化\",\"sections.frontend.description\":\"此处可以找到主题、自定义卡片和其他用于 Lovelace 的元素\",\"sections.frontend.title\":\"前端\",\"sections.integrations.description\":\"此处可以找到自定义集成 (custom_components)\",\"sections.integrations.title\":\"集成\",\"sections.pending_repository_upgrade\":\"当前版本 {installed}，可更新至 {available}\",\"store.explore\":\"浏览并下载存储库\",\"store.new_repositories_note\":\"这里显示了一些新的存储库\",\"store.no_repositories\":\"没有储存库\",\"store.no_repositories_desc1\":\"此处尚未下载任何存储库。\",\"store.no_repositories_desc2\":\"点击右下角的 + 来开始添加吧！\",\"store.no_repositories_found_desc1\":\"此处未找到与“{searchInput}”有关的已下载存储库。\",\"store.no_repositories_found_desc2\":\"搜索别的试试吧！\"}},rm=new Set([\"en_GB\"]),im=new tm(\"localize\"),nm={language:[],sting:{}},am={};function sm(e,t,o){var r;let i=(e||localStorage.getItem(\"selectedLanguage\")||\"en\").replace(/['\"]+/g,\"\").replace(\"-\",\"_\");var n;!rm.has(i)&&om[i]||(rm.has(i)||null!==(n=nm.language)&&void 0!==n&&n.includes(i)||(nm.language.push(i),im.warn(`Language '${i.replace(\"_\",\"-\")}' is not added to HACS, using 'en' instead. https://hacs.xyz/docs/developer/translation`)),i=\"en\");const a=(null===(r=om[i])||void 0===r?void 0:r[t])||om.en[t];if(!a)return im.error(`Translation problem with '${t}' for '${i}'`),t;const s=t+a;let l=am[s];if(!l){try{l=new em(a,e)}catch(e){return im.error(`Translation problem with '${t}' for '${i}'`),t}am[s]=l}try{return l.format(o)}catch(e){return im.error(`Translation problem with '${t}' for '${i}'`),t}}const lm=e=>({updates:[],messages:[],subsections:{main:[{categories:[\"integration\"],iconPath:\"M20.5,11H19V7C19,5.89 18.1,5 17,5H13V3.5A2.5,2.5 0 0,0 10.5,1A2.5,2.5 0 0,0 8,3.5V5H4A2,2 0 0,0 2,7V10.8H3.5C5,10.8 6.2,12 6.2,13.5C6.2,15 5,16.2 3.5,16.2H2V20A2,2 0 0,0 4,22H7.8V20.5C7.8,19 9,17.8 10.5,17.8C12,17.8 13.2,19 13.2,20.5V22H17A2,2 0 0,0 19,20V16H20.5A2.5,2.5 0 0,0 23,13.5A2.5,2.5 0 0,0 20.5,11Z\",id:\"integrations\",iconColor:\"rgb(13, 71, 161)\",description:sm(e,\"sections.integrations.description\"),name:sm(e,\"sections.integrations.title\"),path:\"/hacs/integrations\",core:!0},{categories:[\"plugin\",\"theme\"],iconPath:oc,id:\"frontend\",iconColor:\"rgb(177, 52, 92)\",description:sm(e,\"sections.frontend.description\"),name:sm(e,\"sections.frontend.title\"),path:\"/hacs/frontend\",core:!0},{categories:[\"python_script\",\"appdaemon\",\"netdaemon\"],iconPath:gc,id:\"automation\",iconColor:\"rgb(81, 140, 67)\",description:sm(e,\"sections.automation.description\"),name:sm(e,\"sections.automation.title\"),path:\"/hacs/automation\",core:!0}]}}),dm=os(((e,t)=>lm(e).subsections.main.filter((e=>{const o=e.categories;return 0!==(null==o?void 0:o.filter((e=>{var o;return t.dev||(null==t||null===(o=t.categories)||void 0===o?void 0:o.includes(e))})).length)})))),cm=(e,t)=>{const o=t.path.replace(\"/\",\"\");return lm(e).subsections.main.find((e=>e.id===o))},pm=e=>`/hacsfiles/${e.repository.full_name.split(\"/\")[1]}/${e.repository.file_name}${e.skipTag?\"\":`?hacstag=${((e,t)=>String(`${e.id}${(t||e.installed_version||e.selected_tag||e.available_version).replace(/\\D+/g,\"\")}`))(e.repository,e.version)}`}`,um=(e,t)=>{var o,r;if(!t.installed)return!0;if(\"plugin\"!==t.category)return!0;if(\"storage\"!==(null===(o=e.info)||void 0===o?void 0:o.lovelace_mode))return!0;const i=pm({repository:t,skipTag:!0});return(null===(r=e.resources)||void 0===r?void 0:r.some((e=>e.url.includes(i))))||!1};let mm=s(null,(function(e,o){class i extends o{constructor(...t){super(...t),e(this)}}return{F:i,d:[{kind:\"field\",decorators:[ve({attribute:!1})],key:\"hacs\",value:void 0},{kind:\"method\",key:\"connectedCallback\",value:function(){r(t(i.prototype),\"connectedCallback\",this).call(this),void 0===this.hacs&&(this.hacs={language:\"en\",messages:[],updates:[],resources:[],repositories:[],removed:[],sections:[],info:{},addedToLovelace:um,localize:(e,t)=>{var o;return sm((null===(o=this.hacs)||void 0===o?void 0:o.language)||\"en\",e,t)},log:new tm}),this.addEventListener(\"update-hacs\",(e=>this._updateHacs(e.detail)))}},{kind:\"method\",key:\"_updateHacs\",value:function(e){let t=!1;Object.keys(e).forEach((o=>{JSON.stringify(this.hacs[o])!==JSON.stringify(e[o])&&(t=!0)})),t&&(this.hacs={...this.hacs,...e})}},{kind:\"method\",key:\"updated\",value:function(e){r(t(i.prototype),\"updated\",this).call(this,e),this.hacs.language&&this.hacs.info&&(this.hacs.sections=dm(this.hacs.language,this.hacs.info))}}]}}),(hm=_e,class extends hm{constructor(...t){super(...t),e(this,\"hass\",void 0),e(this,\"__provideHass\",[])}provideHass(e){this.__provideHass.push(e),e.hass=this.hass}updated(e){super.updated(e),e.has(\"hass\")&&this.__provideHass.forEach((e=>{e.hass=this.hass}))}}));var hm;const gm=(e,t)=>{const o=matchMedia(e),r=e=>t(e.matches);return o.addListener(r),t(o.matches),()=>o.removeListener(r)},_m=b`:host{font-family:var(--mdc-icon-font, \"Material Icons\");font-weight:normal;font-style:normal;font-size:var(--mdc-icon-size, 24px);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}`;let fm=class extends _e{render(){return K`<span><slot></slot></span>`}};function ym(e,t){if(e.closest)return e.closest(t);for(var o=e;o;){if(bm(o,t))return o;o=o.parentElement}return null}function bm(e,t){return(e.matches||e.webkitMatchesSelector||e.msMatchesSelector).call(e,t)}fm.styles=[_m],fm=wp([ye(\"mwc-icon\")],fm);const vm=e=>e.nodeType===Node.ELEMENT_NODE;function Cm(e){return{addClass:t=>{e.classList.add(t)},removeClass:t=>{e.classList.remove(t)},hasClass:t=>e.classList.contains(t)}}let Am=!1;const wm=()=>{},Hm={get passive(){return Am=!0,!1}};document.addEventListener(\"x\",wm,Hm),document.removeEventListener(\"x\",wm);const km=Am,Lm=(e=window.document)=>{let t=e.activeElement;const o=[];if(!t)return o;for(;t&&(o.push(t),t.shadowRoot);)t=t.shadowRoot.activeElement;return o},Sm=e=>{const t=Lm();if(!t.length)return!1;const o=t[t.length-1],r=new Event(\"check-if-focused\",{bubbles:!0,composed:!0});let i=[];const n=e=>{i=e.composedPath()};return document.body.addEventListener(\"check-if-focused\",n),o.dispatchEvent(r),document.body.removeEventListener(\"check-if-focused\",n),-1!==i.indexOf(e)};class xm extends _e{click(){if(this.mdcRoot)return this.mdcRoot.focus(),void this.mdcRoot.click();super.click()}createFoundation(){void 0!==this.mdcFoundation&&this.mdcFoundation.destroy(),this.mdcFoundationClass&&(this.mdcFoundation=new this.mdcFoundationClass(this.createAdapter()),this.mdcFoundation.init())}firstUpdated(){this.createFoundation()}}var Vm=function(){function e(e){void 0===e&&(e={}),this.adapter=e}return Object.defineProperty(e,\"cssClasses\",{get:function(){return{}},enumerable:!1,configurable:!0}),Object.defineProperty(e,\"strings\",{get:function(){return{}},enumerable:!1,configurable:!0}),Object.defineProperty(e,\"numbers\",{get:function(){return{}},enumerable:!1,configurable:!0}),Object.defineProperty(e,\"defaultAdapter\",{get:function(){return{}},enumerable:!1,configurable:!0}),e.prototype.init=function(){},e.prototype.destroy=function(){},e}(),Mm={BG_FOCUSED:\"mdc-ripple-upgraded--background-focused\",FG_ACTIVATION:\"mdc-ripple-upgraded--foreground-activation\",FG_DEACTIVATION:\"mdc-ripple-upgraded--foreground-deactivation\",ROOT:\"mdc-ripple-upgraded\",UNBOUNDED:\"mdc-ripple-upgraded--unbounded\"},Em={VAR_FG_SCALE:\"--mdc-ripple-fg-scale\",VAR_FG_SIZE:\"--mdc-ripple-fg-size\",VAR_FG_TRANSLATE_END:\"--mdc-ripple-fg-translate-end\",VAR_FG_TRANSLATE_START:\"--mdc-ripple-fg-translate-start\",VAR_LEFT:\"--mdc-ripple-left\",VAR_TOP:\"--mdc-ripple-top\"},Pm={DEACTIVATION_TIMEOUT_MS:225,FG_DEACTIVATION_MS:150,INITIAL_ORIGIN_SCALE:.6,PADDING:10,TAP_DELAY_MS:300};var Tm=[\"touchstart\",\"pointerdown\",\"mousedown\",\"keydown\"],zm=[\"touchend\",\"pointerup\",\"mouseup\",\"contextmenu\"],Nm=[],Im=function(e){function t(o){var r=e.call(this,Ap(Ap({},t.defaultAdapter),o))||this;return r.activationAnimationHasEnded=!1,r.activationTimer=0,r.fgDeactivationRemovalTimer=0,r.fgScale=\"0\",r.frame={width:0,height:0},r.initialSize=0,r.layoutFrame=0,r.maxRadius=0,r.unboundedCoords={left:0,top:0},r.activationState=r.defaultActivationState(),r.activationTimerCallback=function(){r.activationAnimationHasEnded=!0,r.runDeactivationUXLogicIfReady()},r.activateHandler=function(e){r.activateImpl(e)},r.deactivateHandler=function(){r.deactivateImpl()},r.focusHandler=function(){r.handleFocus()},r.blurHandler=function(){r.handleBlur()},r.resizeHandler=function(){r.layout()},r}return Cp(t,e),Object.defineProperty(t,\"cssClasses\",{get:function(){return Mm},enumerable:!1,configurable:!0}),Object.defineProperty(t,\"strings\",{get:function(){return Em},enumerable:!1,configurable:!0}),Object.defineProperty(t,\"numbers\",{get:function(){return Pm},enumerable:!1,configurable:!0}),Object.defineProperty(t,\"defaultAdapter\",{get:function(){return{addClass:function(){},browserSupportsCssVars:function(){return!0},computeBoundingRect:function(){return{top:0,right:0,bottom:0,left:0,width:0,height:0}},containsEventTarget:function(){return!0},deregisterDocumentInteractionHandler:function(){},deregisterInteractionHandler:function(){},deregisterResizeHandler:function(){},getWindowPageOffset:function(){return{x:0,y:0}},isSurfaceActive:function(){return!0},isSurfaceDisabled:function(){return!0},isUnbounded:function(){return!0},registerDocumentInteractionHandler:function(){},registerInteractionHandler:function(){},registerResizeHandler:function(){},removeClass:function(){},updateCssVariable:function(){}}},enumerable:!1,configurable:!0}),t.prototype.init=function(){var e=this,o=this.supportsPressRipple();if(this.registerRootHandlers(o),o){var r=t.cssClasses,i=r.ROOT,n=r.UNBOUNDED;requestAnimationFrame((function(){e.adapter.addClass(i),e.adapter.isUnbounded()&&(e.adapter.addClass(n),e.layoutInternal())}))}},t.prototype.destroy=function(){var e=this;if(this.supportsPressRipple()){this.activationTimer&&(clearTimeout(this.activationTimer),this.activationTimer=0,this.adapter.removeClass(t.cssClasses.FG_ACTIVATION)),this.fgDeactivationRemovalTimer&&(clearTimeout(this.fgDeactivationRemovalTimer),this.fgDeactivationRemovalTimer=0,this.adapter.removeClass(t.cssClasses.FG_DEACTIVATION));var o=t.cssClasses,r=o.ROOT,i=o.UNBOUNDED;requestAnimationFrame((function(){e.adapter.removeClass(r),e.adapter.removeClass(i),e.removeCssVars()}))}this.deregisterRootHandlers(),this.deregisterDeactivationHandlers()},t.prototype.activate=function(e){this.activateImpl(e)},t.prototype.deactivate=function(){this.deactivateImpl()},t.prototype.layout=function(){var e=this;this.layoutFrame&&cancelAnimationFrame(this.layoutFrame),this.layoutFrame=requestAnimationFrame((function(){e.layoutInternal(),e.layoutFrame=0}))},t.prototype.setUnbounded=function(e){var o=t.cssClasses.UNBOUNDED;e?this.adapter.addClass(o):this.adapter.removeClass(o)},t.prototype.handleFocus=function(){var e=this;requestAnimationFrame((function(){return e.adapter.addClass(t.cssClasses.BG_FOCUSED)}))},t.prototype.handleBlur=function(){var e=this;requestAnimationFrame((function(){return e.adapter.removeClass(t.cssClasses.BG_FOCUSED)}))},t.prototype.supportsPressRipple=function(){return this.adapter.browserSupportsCssVars()},t.prototype.defaultActivationState=function(){return{activationEvent:void 0,hasDeactivationUXRun:!1,isActivated:!1,isProgrammatic:!1,wasActivatedByPointer:!1,wasElementMadeActive:!1}},t.prototype.registerRootHandlers=function(e){var t,o;if(e){try{for(var r=kp(Tm),i=r.next();!i.done;i=r.next()){var n=i.value;this.adapter.registerInteractionHandler(n,this.activateHandler)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(o=r.return)&&o.call(r)}finally{if(t)throw t.error}}this.adapter.isUnbounded()&&this.adapter.registerResizeHandler(this.resizeHandler)}this.adapter.registerInteractionHandler(\"focus\",this.focusHandler),this.adapter.registerInteractionHandler(\"blur\",this.blurHandler)},t.prototype.registerDeactivationHandlers=function(e){var t,o;if(\"keydown\"===e.type)this.adapter.registerInteractionHandler(\"keyup\",this.deactivateHandler);else try{for(var r=kp(zm),i=r.next();!i.done;i=r.next()){var n=i.value;this.adapter.registerDocumentInteractionHandler(n,this.deactivateHandler)}}catch(e){t={error:e}}finally{try{i&&!i.done&&(o=r.return)&&o.call(r)}finally{if(t)throw t.error}}},t.prototype.deregisterRootHandlers=function(){var e,t;try{for(var o=kp(Tm),r=o.next();!r.done;r=o.next()){var i=r.value;this.adapter.deregisterInteractionHandler(i,this.activateHandler)}}catch(t){e={error:t}}finally{try{r&&!r.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}this.adapter.deregisterInteractionHandler(\"focus\",this.focusHandler),this.adapter.deregisterInteractionHandler(\"blur\",this.blurHandler),this.adapter.isUnbounded()&&this.adapter.deregisterResizeHandler(this.resizeHandler)},t.prototype.deregisterDeactivationHandlers=function(){var e,t;this.adapter.deregisterInteractionHandler(\"keyup\",this.deactivateHandler);try{for(var o=kp(zm),r=o.next();!r.done;r=o.next()){var i=r.value;this.adapter.deregisterDocumentInteractionHandler(i,this.deactivateHandler)}}catch(t){e={error:t}}finally{try{r&&!r.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}},t.prototype.removeCssVars=function(){var e=this,o=t.strings;Object.keys(o).forEach((function(t){0===t.indexOf(\"VAR_\")&&e.adapter.updateCssVariable(o[t],null)}))},t.prototype.activateImpl=function(e){var t=this;if(!this.adapter.isSurfaceDisabled()){var o=this.activationState;if(!o.isActivated){var r=this.previousActivationEvent;if(!(r&&void 0!==e&&r.type!==e.type))o.isActivated=!0,o.isProgrammatic=void 0===e,o.activationEvent=e,o.wasActivatedByPointer=!o.isProgrammatic&&(void 0!==e&&(\"mousedown\"===e.type||\"touchstart\"===e.type||\"pointerdown\"===e.type)),void 0!==e&&Nm.length>0&&Nm.some((function(e){return t.adapter.containsEventTarget(e)}))?this.resetActivationState():(void 0!==e&&(Nm.push(e.target),this.registerDeactivationHandlers(e)),o.wasElementMadeActive=this.checkElementMadeActive(e),o.wasElementMadeActive&&this.animateActivation(),requestAnimationFrame((function(){Nm=[],o.wasElementMadeActive||void 0===e||\" \"!==e.key&&32!==e.keyCode||(o.wasElementMadeActive=t.checkElementMadeActive(e),o.wasElementMadeActive&&t.animateActivation()),o.wasElementMadeActive||(t.activationState=t.defaultActivationState())})))}}},t.prototype.checkElementMadeActive=function(e){return void 0===e||\"keydown\"!==e.type||this.adapter.isSurfaceActive()},t.prototype.animateActivation=function(){var e=this,o=t.strings,r=o.VAR_FG_TRANSLATE_START,i=o.VAR_FG_TRANSLATE_END,n=t.cssClasses,a=n.FG_DEACTIVATION,s=n.FG_ACTIVATION,l=t.numbers.DEACTIVATION_TIMEOUT_MS;this.layoutInternal();var d=\"\",c=\"\";if(!this.adapter.isUnbounded()){var p=this.getFgTranslationCoordinates(),u=p.startPoint,m=p.endPoint;d=u.x+\"px, \"+u.y+\"px\",c=m.x+\"px, \"+m.y+\"px\"}this.adapter.updateCssVariable(r,d),this.adapter.updateCssVariable(i,c),clearTimeout(this.activationTimer),clearTimeout(this.fgDeactivationRemovalTimer),this.rmBoundedActivationClasses(),this.adapter.removeClass(a),this.adapter.computeBoundingRect(),this.adapter.addClass(s),this.activationTimer=setTimeout((function(){e.activationTimerCallback()}),l)},t.prototype.getFgTranslationCoordinates=function(){var e,t=this.activationState,o=t.activationEvent;return e=t.wasActivatedByPointer?function(e,t,o){if(!e)return{x:0,y:0};var r,i,n=t.x,a=t.y,s=n+o.left,l=a+o.top;if(\"touchstart\"===e.type){var d=e;r=d.changedTouches[0].pageX-s,i=d.changedTouches[0].pageY-l}else{var c=e;r=c.pageX-s,i=c.pageY-l}return{x:r,y:i}}(o,this.adapter.getWindowPageOffset(),this.adapter.computeBoundingRect()):{x:this.frame.width/2,y:this.frame.height/2},{startPoint:e={x:e.x-this.initialSize/2,y:e.y-this.initialSize/2},endPoint:{x:this.frame.width/2-this.initialSize/2,y:this.frame.height/2-this.initialSize/2}}},t.prototype.runDeactivationUXLogicIfReady=function(){var e=this,o=t.cssClasses.FG_DEACTIVATION,r=this.activationState,i=r.hasDeactivationUXRun,n=r.isActivated;(i||!n)&&this.activationAnimationHasEnded&&(this.rmBoundedActivationClasses(),this.adapter.addClass(o),this.fgDeactivationRemovalTimer=setTimeout((function(){e.adapter.removeClass(o)}),Pm.FG_DEACTIVATION_MS))},t.prototype.rmBoundedActivationClasses=function(){var e=t.cssClasses.FG_ACTIVATION;this.adapter.removeClass(e),this.activationAnimationHasEnded=!1,this.adapter.computeBoundingRect()},t.prototype.resetActivationState=function(){var e=this;this.previousActivationEvent=this.activationState.activationEvent,this.activationState=this.defaultActivationState(),setTimeout((function(){return e.previousActivationEvent=void 0}),t.numbers.TAP_DELAY_MS)},t.prototype.deactivateImpl=function(){var e=this,t=this.activationState;if(t.isActivated){var o=Ap({},t);t.isProgrammatic?(requestAnimationFrame((function(){e.animateDeactivation(o)})),this.resetActivationState()):(this.deregisterDeactivationHandlers(),requestAnimationFrame((function(){e.activationState.hasDeactivationUXRun=!0,e.animateDeactivation(o),e.resetActivationState()})))}},t.prototype.animateDeactivation=function(e){var t=e.wasActivatedByPointer,o=e.wasElementMadeActive;(t||o)&&this.runDeactivationUXLogicIfReady()},t.prototype.layoutInternal=function(){var e=this;this.frame=this.adapter.computeBoundingRect();var o=Math.max(this.frame.height,this.frame.width);this.maxRadius=this.adapter.isUnbounded()?o:Math.sqrt(Math.pow(e.frame.width,2)+Math.pow(e.frame.height,2))+t.numbers.PADDING;var r=Math.floor(o*t.numbers.INITIAL_ORIGIN_SCALE);this.adapter.isUnbounded()&&r%2!=0?this.initialSize=r-1:this.initialSize=r,this.fgScale=\"\"+this.maxRadius/this.initialSize,this.updateLayoutCssVars()},t.prototype.updateLayoutCssVars=function(){var e=t.strings,o=e.VAR_FG_SIZE,r=e.VAR_LEFT,i=e.VAR_TOP,n=e.VAR_FG_SCALE;this.adapter.updateCssVariable(o,this.initialSize+\"px\"),this.adapter.updateCssVariable(n,this.fgScale),this.adapter.isUnbounded()&&(this.unboundedCoords={left:Math.round(this.frame.width/2-this.initialSize/2),top:Math.round(this.frame.height/2-this.initialSize/2)},this.adapter.updateCssVariable(r,this.unboundedCoords.left+\"px\"),this.adapter.updateCssVariable(i,this.unboundedCoords.top+\"px\"))},t}(Vm),Om=Im;const Rm={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},Dm=e=>(...t)=>({_$litDirective$:e,values:t});class jm{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,o){this._$Ct=e,this._$AM=t,this._$Ci=o}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}}const Bm=Dm(class extends jm{constructor(e){var t;if(super(e),e.type!==Rm.ATTRIBUTE||\"class\"!==e.name||(null===(t=e.strings)||void 0===t?void 0:t.length)>2)throw Error(\"`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.\")}render(e){return\" \"+Object.keys(e).filter((t=>e[t])).join(\" \")+\" \"}update(e,[t]){var o,r;if(void 0===this.st){this.st=new Set,void 0!==e.strings&&(this.et=new Set(e.strings.join(\" \").split(/\\s/).filter((e=>\"\"!==e))));for(const e in t)t[e]&&!(null===(o=this.et)||void 0===o?void 0:o.has(e))&&this.st.add(e);return this.render(t)}const i=e.element.classList;this.st.forEach((e=>{e in t||(i.remove(e),this.st.delete(e))}));for(const e in t){const o=!!t[e];o===this.st.has(e)||(null===(r=this.et)||void 0===r?void 0:r.has(e))||(o?(i.add(e),this.st.add(e)):(i.remove(e),this.st.delete(e)))}return W}}),$m=Dm(class extends jm{constructor(e){var t;if(super(e),e.type!==Rm.ATTRIBUTE||\"style\"!==e.name||(null===(t=e.strings)||void 0===t?void 0:t.length)>2)throw Error(\"The `styleMap` directive must be used in the `style` attribute and must be the only part in the attribute.\")}render(e){return Object.keys(e).reduce(((t,o)=>{const r=e[o];return null==r?t:t+`${o=o.replace(/(?:^(webkit|moz|ms|o)|)(?=[A-Z])/g,\"-$&\").toLowerCase()}:${r};`}),\"\")}update(e,[t]){const{style:o}=e.element;if(void 0===this.ct){this.ct=new Set;for(const e in t)this.ct.add(e);return this.render(t)}this.ct.forEach((e=>{null==t[e]&&(this.ct.delete(e),e.includes(\"-\")?o.removeProperty(e):o[e]=\"\")}));for(const e in t){const r=t[e];null!=r&&(this.ct.add(e),e.includes(\"-\")?o.setProperty(e,r):o[e]=r)}return W}});class Fm extends xm{constructor(){super(...arguments),this.primary=!1,this.accent=!1,this.unbounded=!1,this.disabled=!1,this.activated=!1,this.selected=!1,this.internalUseStateLayerCustomProperties=!1,this.hovering=!1,this.bgFocused=!1,this.fgActivation=!1,this.fgDeactivation=!1,this.fgScale=\"\",this.fgSize=\"\",this.translateStart=\"\",this.translateEnd=\"\",this.leftPos=\"\",this.topPos=\"\",this.mdcFoundationClass=Om}get isActive(){return bm(this.parentElement||this,\":active\")}createAdapter(){return{browserSupportsCssVars:()=>!0,isUnbounded:()=>this.unbounded,isSurfaceActive:()=>this.isActive,isSurfaceDisabled:()=>this.disabled,addClass:e=>{switch(e){case\"mdc-ripple-upgraded--background-focused\":this.bgFocused=!0;break;case\"mdc-ripple-upgraded--foreground-activation\":this.fgActivation=!0;break;case\"mdc-ripple-upgraded--foreground-deactivation\":this.fgDeactivation=!0}},removeClass:e=>{switch(e){case\"mdc-ripple-upgraded--background-focused\":this.bgFocused=!1;break;case\"mdc-ripple-upgraded--foreground-activation\":this.fgActivation=!1;break;case\"mdc-ripple-upgraded--foreground-deactivation\":this.fgDeactivation=!1}},containsEventTarget:()=>!0,registerInteractionHandler:()=>{},deregisterInteractionHandler:()=>{},registerDocumentInteractionHandler:()=>{},deregisterDocumentInteractionHandler:()=>{},registerResizeHandler:()=>{},deregisterResizeHandler:()=>{},updateCssVariable:(e,t)=>{switch(e){case\"--mdc-ripple-fg-scale\":this.fgScale=t;break;case\"--mdc-ripple-fg-size\":this.fgSize=t;break;case\"--mdc-ripple-fg-translate-end\":this.translateEnd=t;break;case\"--mdc-ripple-fg-translate-start\":this.translateStart=t;break;case\"--mdc-ripple-left\":this.leftPos=t;break;case\"--mdc-ripple-top\":this.topPos=t}},computeBoundingRect:()=>(this.parentElement||this).getBoundingClientRect(),getWindowPageOffset:()=>({x:window.pageXOffset,y:window.pageYOffset})}}startPress(e){this.waitForFoundation((()=>{this.mdcFoundation.activate(e)}))}endPress(){this.waitForFoundation((()=>{this.mdcFoundation.deactivate()}))}startFocus(){this.waitForFoundation((()=>{this.mdcFoundation.handleFocus()}))}endFocus(){this.waitForFoundation((()=>{this.mdcFoundation.handleBlur()}))}startHover(){this.hovering=!0}endHover(){this.hovering=!1}waitForFoundation(e){this.mdcFoundation?e():this.updateComplete.then(e)}update(e){e.has(\"disabled\")&&this.disabled&&this.endHover(),super.update(e)}render(){const e=this.activated&&(this.primary||!this.accent),t=this.selected&&(this.primary||!this.accent),o={\"mdc-ripple-surface--accent\":this.accent,\"mdc-ripple-surface--primary--activated\":e,\"mdc-ripple-surface--accent--activated\":this.accent&&this.activated,\"mdc-ripple-surface--primary--selected\":t,\"mdc-ripple-surface--accent--selected\":this.accent&&this.selected,\"mdc-ripple-surface--disabled\":this.disabled,\"mdc-ripple-surface--hover\":this.hovering,\"mdc-ripple-surface--primary\":this.primary,\"mdc-ripple-surface--selected\":this.selected,\"mdc-ripple-upgraded--background-focused\":this.bgFocused,\"mdc-ripple-upgraded--foreground-activation\":this.fgActivation,\"mdc-ripple-upgraded--foreground-deactivation\":this.fgDeactivation,\"mdc-ripple-upgraded--unbounded\":this.unbounded,\"mdc-ripple-surface--internal-use-state-layer-custom-properties\":this.internalUseStateLayerCustomProperties};return K`\n        <div class=\"mdc-ripple-surface mdc-ripple-upgraded ${Bm(o)}\"\n          style=\"${$m({\"--mdc-ripple-fg-scale\":this.fgScale,\"--mdc-ripple-fg-size\":this.fgSize,\"--mdc-ripple-fg-translate-end\":this.translateEnd,\"--mdc-ripple-fg-translate-start\":this.translateStart,\"--mdc-ripple-left\":this.leftPos,\"--mdc-ripple-top\":this.topPos})}\"></div>`}}wp([He(\".mdc-ripple-surface\")],Fm.prototype,\"mdcRoot\",void 0),wp([ve({type:Boolean})],Fm.prototype,\"primary\",void 0),wp([ve({type:Boolean})],Fm.prototype,\"accent\",void 0),wp([ve({type:Boolean})],Fm.prototype,\"unbounded\",void 0),wp([ve({type:Boolean})],Fm.prototype,\"disabled\",void 0),wp([ve({type:Boolean})],Fm.prototype,\"activated\",void 0),wp([ve({type:Boolean})],Fm.prototype,\"selected\",void 0),wp([ve({type:Boolean})],Fm.prototype,\"internalUseStateLayerCustomProperties\",void 0),wp([Ce()],Fm.prototype,\"hovering\",void 0),wp([Ce()],Fm.prototype,\"bgFocused\",void 0),wp([Ce()],Fm.prototype,\"fgActivation\",void 0),wp([Ce()],Fm.prototype,\"fgDeactivation\",void 0),wp([Ce()],Fm.prototype,\"fgScale\",void 0),wp([Ce()],Fm.prototype,\"fgSize\",void 0),wp([Ce()],Fm.prototype,\"translateStart\",void 0),wp([Ce()],Fm.prototype,\"translateEnd\",void 0),wp([Ce()],Fm.prototype,\"leftPos\",void 0),wp([Ce()],Fm.prototype,\"topPos\",void 0);const Um=b`.mdc-ripple-surface{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity;position:relative;outline:none;overflow:hidden}.mdc-ripple-surface::before,.mdc-ripple-surface::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:\"\"}.mdc-ripple-surface::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-ripple-surface::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-ripple-surface.mdc-ripple-upgraded::before{transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-ripple-surface.mdc-ripple-upgraded::after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-ripple-surface.mdc-ripple-upgraded--unbounded::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-ripple-surface.mdc-ripple-upgraded--foreground-activation::after{animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-ripple-surface.mdc-ripple-upgraded--foreground-deactivation::after{animation:mdc-ripple-fg-opacity-out 150ms;transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-ripple-surface::before,.mdc-ripple-surface::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-ripple-surface.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-ripple-surface[data-mdc-ripple-is-unbounded],.mdc-ripple-upgraded--unbounded{overflow:visible}.mdc-ripple-surface[data-mdc-ripple-is-unbounded]::before,.mdc-ripple-surface[data-mdc-ripple-is-unbounded]::after,.mdc-ripple-upgraded--unbounded::before,.mdc-ripple-upgraded--unbounded::after{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.mdc-ripple-surface[data-mdc-ripple-is-unbounded].mdc-ripple-upgraded::before,.mdc-ripple-surface[data-mdc-ripple-is-unbounded].mdc-ripple-upgraded::after,.mdc-ripple-upgraded--unbounded.mdc-ripple-upgraded::before,.mdc-ripple-upgraded--unbounded.mdc-ripple-upgraded::after{top:var(--mdc-ripple-top, calc(50% - 50%));left:var(--mdc-ripple-left, calc(50% - 50%));width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-ripple-surface[data-mdc-ripple-is-unbounded].mdc-ripple-upgraded::after,.mdc-ripple-upgraded--unbounded.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-ripple-surface::before,.mdc-ripple-surface::after{background-color:#000;background-color:var(--mdc-ripple-color, #000)}.mdc-ripple-surface:hover::before,.mdc-ripple-surface.mdc-ripple-surface--hover::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-ripple-surface.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-ripple-surface:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-ripple-surface.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}@keyframes mdc-ripple-fg-radius-in{from{animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1)}to{transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}}@keyframes mdc-ripple-fg-opacity-in{from{animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@keyframes mdc-ripple-fg-opacity-out{from{animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}:host{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;display:block}:host .mdc-ripple-surface{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;will-change:unset}.mdc-ripple-surface--primary::before,.mdc-ripple-surface--primary::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-ripple-surface--primary:hover::before,.mdc-ripple-surface--primary.mdc-ripple-surface--hover::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-ripple-surface--primary.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--primary:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-ripple-surface--primary:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--primary:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-ripple-surface--primary.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-ripple-surface--primary--activated::before{opacity:0.12;opacity:var(--mdc-ripple-activated-opacity, 0.12)}.mdc-ripple-surface--primary--activated::before,.mdc-ripple-surface--primary--activated::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-ripple-surface--primary--activated:hover::before,.mdc-ripple-surface--primary--activated.mdc-ripple-surface--hover::before{opacity:0.16;opacity:var(--mdc-ripple-hover-opacity, 0.16)}.mdc-ripple-surface--primary--activated.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--primary--activated:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-focus-opacity, 0.24)}.mdc-ripple-surface--primary--activated:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--primary--activated:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-ripple-surface--primary--activated.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-ripple-surface--primary--selected::before{opacity:0.08;opacity:var(--mdc-ripple-selected-opacity, 0.08)}.mdc-ripple-surface--primary--selected::before,.mdc-ripple-surface--primary--selected::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-ripple-surface--primary--selected:hover::before,.mdc-ripple-surface--primary--selected.mdc-ripple-surface--hover::before{opacity:0.12;opacity:var(--mdc-ripple-hover-opacity, 0.12)}.mdc-ripple-surface--primary--selected.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--primary--selected:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-focus-opacity, 0.2)}.mdc-ripple-surface--primary--selected:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--primary--selected:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-press-opacity, 0.2)}.mdc-ripple-surface--primary--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.2)}.mdc-ripple-surface--accent::before,.mdc-ripple-surface--accent::after{background-color:#018786;background-color:var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786))}.mdc-ripple-surface--accent:hover::before,.mdc-ripple-surface--accent.mdc-ripple-surface--hover::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-ripple-surface--accent.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--accent:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-ripple-surface--accent:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--accent:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-ripple-surface--accent.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-ripple-surface--accent--activated::before{opacity:0.12;opacity:var(--mdc-ripple-activated-opacity, 0.12)}.mdc-ripple-surface--accent--activated::before,.mdc-ripple-surface--accent--activated::after{background-color:#018786;background-color:var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786))}.mdc-ripple-surface--accent--activated:hover::before,.mdc-ripple-surface--accent--activated.mdc-ripple-surface--hover::before{opacity:0.16;opacity:var(--mdc-ripple-hover-opacity, 0.16)}.mdc-ripple-surface--accent--activated.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--accent--activated:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-focus-opacity, 0.24)}.mdc-ripple-surface--accent--activated:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--accent--activated:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-ripple-surface--accent--activated.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-ripple-surface--accent--selected::before{opacity:0.08;opacity:var(--mdc-ripple-selected-opacity, 0.08)}.mdc-ripple-surface--accent--selected::before,.mdc-ripple-surface--accent--selected::after{background-color:#018786;background-color:var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786))}.mdc-ripple-surface--accent--selected:hover::before,.mdc-ripple-surface--accent--selected.mdc-ripple-surface--hover::before{opacity:0.12;opacity:var(--mdc-ripple-hover-opacity, 0.12)}.mdc-ripple-surface--accent--selected.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--accent--selected:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-focus-opacity, 0.2)}.mdc-ripple-surface--accent--selected:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--accent--selected:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-press-opacity, 0.2)}.mdc-ripple-surface--accent--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.2)}.mdc-ripple-surface--disabled{opacity:0}.mdc-ripple-surface--internal-use-state-layer-custom-properties::before,.mdc-ripple-surface--internal-use-state-layer-custom-properties::after{background-color:#000;background-color:var(--mdc-ripple-hover-state-layer-color, #000)}.mdc-ripple-surface--internal-use-state-layer-custom-properties:hover::before,.mdc-ripple-surface--internal-use-state-layer-custom-properties.mdc-ripple-surface--hover::before{opacity:0.04;opacity:var(--mdc-ripple-hover-state-layer-opacity, 0.04)}.mdc-ripple-surface--internal-use-state-layer-custom-properties.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--internal-use-state-layer-custom-properties:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-state-layer-opacity, 0.12)}.mdc-ripple-surface--internal-use-state-layer-custom-properties:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--internal-use-state-layer-custom-properties:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-pressed-state-layer-opacity, 0.12)}.mdc-ripple-surface--internal-use-state-layer-custom-properties.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-pressed-state-layer-opacity, 0.12)}`;let Zm=class extends Fm{};function qm(e,t,o){if(void 0!==t)return function(e,t,o){const r=e.constructor;if(!o){const e=`__${t}`;if(!(o=r.getPropertyDescriptor(t,e)))throw new Error(\"@ariaProperty must be used after a @property decorator\")}const i=o;let n=\"\";if(!i.set)throw new Error(`@ariaProperty requires a setter for ${t}`);if(e.dispatchWizEvent)return o;const a={configurable:!0,enumerable:!0,set(e){if(\"\"===n){const e=r.getPropertyOptions(t);n=\"string\"==typeof e.attribute?e.attribute:t}this.hasAttribute(n)&&this.removeAttribute(n),i.set.call(this,e)}};return i.get&&(a.get=function(){return i.get.call(this)}),a}(e,t,o);throw new Error(\"@ariaProperty only supports TypeScript Decorators\")}Zm.styles=[Um],Zm=wp([ye(\"mwc-ripple\")],Zm);class Gm{constructor(e){this.startPress=t=>{e().then((e=>{e&&e.startPress(t)}))},this.endPress=()=>{e().then((e=>{e&&e.endPress()}))},this.startFocus=()=>{e().then((e=>{e&&e.startFocus()}))},this.endFocus=()=>{e().then((e=>{e&&e.endFocus()}))},this.startHover=()=>{e().then((e=>{e&&e.startHover()}))},this.endHover=()=>{e().then((e=>{e&&e.endHover()}))}}}const Km=e=>null!=e?e:X;class Ym extends _e{constructor(){super(...arguments),this.raised=!1,this.unelevated=!1,this.outlined=!1,this.dense=!1,this.disabled=!1,this.trailingIcon=!1,this.fullwidth=!1,this.icon=\"\",this.label=\"\",this.expandContent=!1,this.shouldRenderRipple=!1,this.rippleHandlers=new Gm((()=>(this.shouldRenderRipple=!0,this.ripple)))}renderOverlay(){return K``}renderRipple(){const e=this.raised||this.unelevated;return this.shouldRenderRipple?K`<mwc-ripple class=\"ripple\" .primary=\"${!e}\" .disabled=\"${this.disabled}\"></mwc-ripple>`:\"\"}focus(){const e=this.buttonElement;e&&(this.rippleHandlers.startFocus(),e.focus())}blur(){const e=this.buttonElement;e&&(this.rippleHandlers.endFocus(),e.blur())}getRenderClasses(){return{\"mdc-button--raised\":this.raised,\"mdc-button--unelevated\":this.unelevated,\"mdc-button--outlined\":this.outlined,\"mdc-button--dense\":this.dense}}render(){return K`\n      <button\n          id=\"button\"\n          class=\"mdc-button ${Bm(this.getRenderClasses())}\"\n          ?disabled=\"${this.disabled}\"\n          aria-label=\"${this.label||this.icon}\"\n          aria-haspopup=\"${Km(this.ariaHasPopup)}\"\n          @focus=\"${this.handleRippleFocus}\"\n          @blur=\"${this.handleRippleBlur}\"\n          @mousedown=\"${this.handleRippleActivate}\"\n          @mouseenter=\"${this.handleRippleMouseEnter}\"\n          @mouseleave=\"${this.handleRippleMouseLeave}\"\n          @touchstart=\"${this.handleRippleActivate}\"\n          @touchend=\"${this.handleRippleDeactivate}\"\n          @touchcancel=\"${this.handleRippleDeactivate}\">\n        ${this.renderOverlay()}\n        ${this.renderRipple()}\n        <span class=\"leading-icon\">\n          <slot name=\"icon\">\n            ${this.icon&&!this.trailingIcon?this.renderIcon():\"\"}\n          </slot>\n        </span>\n        <span class=\"mdc-button__label\">${this.label}</span>\n        <span class=\"slot-container ${Bm({flex:this.expandContent})}\">\n          <slot></slot>\n        </span>\n        <span class=\"trailing-icon\">\n          <slot name=\"trailingIcon\">\n            ${this.icon&&this.trailingIcon?this.renderIcon():\"\"}\n          </slot>\n        </span>\n      </button>`}renderIcon(){return K`\n    <mwc-icon class=\"mdc-button__icon\">\n      ${this.icon}\n    </mwc-icon>`}handleRippleActivate(e){const t=()=>{window.removeEventListener(\"mouseup\",t),this.handleRippleDeactivate()};window.addEventListener(\"mouseup\",t),this.rippleHandlers.startPress(e)}handleRippleDeactivate(){this.rippleHandlers.endPress()}handleRippleMouseEnter(){this.rippleHandlers.startHover()}handleRippleMouseLeave(){this.rippleHandlers.endHover()}handleRippleFocus(){this.rippleHandlers.startFocus()}handleRippleBlur(){this.rippleHandlers.endFocus()}}Ym.shadowRootOptions={mode:\"open\",delegatesFocus:!0},wp([qm,ve({type:String,attribute:\"aria-haspopup\"})],Ym.prototype,\"ariaHasPopup\",void 0),wp([ve({type:Boolean,reflect:!0})],Ym.prototype,\"raised\",void 0),wp([ve({type:Boolean,reflect:!0})],Ym.prototype,\"unelevated\",void 0),wp([ve({type:Boolean,reflect:!0})],Ym.prototype,\"outlined\",void 0),wp([ve({type:Boolean})],Ym.prototype,\"dense\",void 0),wp([ve({type:Boolean,reflect:!0})],Ym.prototype,\"disabled\",void 0),wp([ve({type:Boolean,attribute:\"trailingicon\"})],Ym.prototype,\"trailingIcon\",void 0),wp([ve({type:Boolean,reflect:!0})],Ym.prototype,\"fullwidth\",void 0),wp([ve({type:String})],Ym.prototype,\"icon\",void 0),wp([ve({type:String})],Ym.prototype,\"label\",void 0),wp([ve({type:Boolean})],Ym.prototype,\"expandContent\",void 0),wp([He(\"#button\")],Ym.prototype,\"buttonElement\",void 0),wp([ke(\"mwc-ripple\")],Ym.prototype,\"ripple\",void 0),wp([Ce()],Ym.prototype,\"shouldRenderRipple\",void 0),wp([we({passive:!0})],Ym.prototype,\"handleRippleActivate\",null);const Wm=b`.mdc-button{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-button-font-size, 0.875rem);line-height:2.25rem;line-height:var(--mdc-typography-button-line-height, 2.25rem);font-weight:500;font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:0.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing, 0.0892857143em);text-decoration:none;text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform, uppercase)}.mdc-touch-target-wrapper{display:inline}.mdc-elevation-overlay{position:absolute;border-radius:inherit;pointer-events:none;opacity:0;opacity:var(--mdc-elevation-overlay-opacity, 0);transition:opacity 280ms cubic-bezier(0.4, 0, 0.2, 1);background-color:#fff;background-color:var(--mdc-elevation-overlay-color, #fff)}.mdc-button{position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:64px;border:none;outline:none;line-height:inherit;user-select:none;-webkit-appearance:none;overflow:visible;vertical-align:middle;background:transparent}.mdc-button .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-button::-moz-focus-inner{padding:0;border:0}.mdc-button:active{outline:none}.mdc-button:hover{cursor:pointer}.mdc-button:disabled{cursor:default;pointer-events:none}.mdc-button .mdc-button__icon{margin-left:0;margin-right:8px;display:inline-block;position:relative;vertical-align:top}[dir=rtl] .mdc-button .mdc-button__icon,.mdc-button .mdc-button__icon[dir=rtl]{margin-left:8px;margin-right:0}.mdc-button .mdc-button__label{position:relative}.mdc-button .mdc-button__touch{position:absolute;top:50%;height:48px;left:0;right:0;transform:translateY(-50%)}.mdc-button__label+.mdc-button__icon{margin-left:8px;margin-right:0}[dir=rtl] .mdc-button__label+.mdc-button__icon,.mdc-button__label+.mdc-button__icon[dir=rtl]{margin-left:0;margin-right:8px}svg.mdc-button__icon{fill:currentColor}.mdc-button--touch{margin-top:6px;margin-bottom:6px}.mdc-button{padding:0 8px 0 8px}.mdc-button--unelevated{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);padding:0 16px 0 16px}.mdc-button--unelevated.mdc-button--icon-trailing{padding:0 12px 0 16px}.mdc-button--unelevated.mdc-button--icon-leading{padding:0 16px 0 12px}.mdc-button--raised{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);padding:0 16px 0 16px}.mdc-button--raised.mdc-button--icon-trailing{padding:0 12px 0 16px}.mdc-button--raised.mdc-button--icon-leading{padding:0 16px 0 12px}.mdc-button--outlined{border-style:solid;transition:border 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-button--outlined .mdc-button__ripple{border-style:solid;border-color:transparent}.mdc-button{height:36px;border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button:not(:disabled){color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-button:disabled{color:rgba(0, 0, 0, 0.38)}.mdc-button .mdc-button__icon{font-size:1.125rem;width:1.125rem;height:1.125rem}.mdc-button .mdc-button__ripple{border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button--raised,.mdc-button--unelevated{height:36px;border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button--raised:not(:disabled),.mdc-button--unelevated:not(:disabled){background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}.mdc-button--raised:disabled,.mdc-button--unelevated:disabled{background-color:rgba(0, 0, 0, 0.12)}.mdc-button--raised:not(:disabled),.mdc-button--unelevated:not(:disabled){color:#fff;color:var(--mdc-theme-on-primary, #fff)}.mdc-button--raised:disabled,.mdc-button--unelevated:disabled{color:rgba(0, 0, 0, 0.38)}.mdc-button--raised .mdc-button__icon,.mdc-button--unelevated .mdc-button__icon{font-size:1.125rem;width:1.125rem;height:1.125rem}.mdc-button--raised .mdc-button__ripple,.mdc-button--unelevated .mdc-button__ripple{border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button--outlined{height:36px;border-radius:4px;border-radius:var(--mdc-shape-small, 4px);padding:0 15px 0 15px;border-width:1px}.mdc-button--outlined:not(:disabled){color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-button--outlined:disabled{color:rgba(0, 0, 0, 0.38)}.mdc-button--outlined .mdc-button__icon{font-size:1.125rem;width:1.125rem;height:1.125rem}.mdc-button--outlined .mdc-button__ripple{border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button--outlined:not(:disabled){border-color:rgba(0, 0, 0, 0.12)}.mdc-button--outlined:disabled{border-color:rgba(0, 0, 0, 0.12)}.mdc-button--outlined.mdc-button--icon-trailing{padding:0 11px 0 15px}.mdc-button--outlined.mdc-button--icon-leading{padding:0 15px 0 11px}.mdc-button--outlined .mdc-button__ripple{top:calc(-1 * 1px);left:calc(-1 * 1px);border-width:1px}.mdc-button--outlined .mdc-button__touch{left:calc(-1 * 1px);width:calc(100% + 2 * 1px)}.mdc-button--raised{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0,0,0,.12);transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-button--raised:hover,.mdc-button--raised:focus{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0,0,0,.12)}.mdc-button--raised:active{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12)}.mdc-button--raised:disabled{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0,0,0,.12)}:host{display:inline-flex;outline:none;-webkit-tap-highlight-color:transparent;vertical-align:top}:host([fullwidth]){width:100%}:host([raised]),:host([unelevated]){--mdc-ripple-color:#fff;--mdc-ripple-focus-opacity:0.24;--mdc-ripple-hover-opacity:0.08;--mdc-ripple-press-opacity:0.24}.trailing-icon ::slotted(*),.trailing-icon .mdc-button__icon,.leading-icon ::slotted(*),.leading-icon .mdc-button__icon{margin-left:0;margin-right:8px;display:inline-block;position:relative;vertical-align:top;font-size:1.125rem;height:1.125rem;width:1.125rem}[dir=rtl] .trailing-icon ::slotted(*),[dir=rtl] .trailing-icon .mdc-button__icon,[dir=rtl] .leading-icon ::slotted(*),[dir=rtl] .leading-icon .mdc-button__icon,.trailing-icon ::slotted(*[dir=rtl]),.trailing-icon .mdc-button__icon[dir=rtl],.leading-icon ::slotted(*[dir=rtl]),.leading-icon .mdc-button__icon[dir=rtl]{margin-left:8px;margin-right:0}.trailing-icon ::slotted(*),.trailing-icon .mdc-button__icon{margin-left:8px;margin-right:0}[dir=rtl] .trailing-icon ::slotted(*),[dir=rtl] .trailing-icon .mdc-button__icon,.trailing-icon ::slotted(*[dir=rtl]),.trailing-icon .mdc-button__icon[dir=rtl]{margin-left:0;margin-right:8px}.slot-container{display:inline-flex;align-items:center;justify-content:center}.slot-container.flex{flex:auto}.mdc-button{flex:auto;overflow:hidden;padding-left:8px;padding-left:var(--mdc-button-horizontal-padding, 8px);padding-right:8px;padding-right:var(--mdc-button-horizontal-padding, 8px)}.mdc-button--raised{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);box-shadow:var(--mdc-button-raised-box-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12))}.mdc-button--raised:focus{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);box-shadow:var(--mdc-button-raised-box-shadow-focus, var(--mdc-button-raised-box-shadow-hover, 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12)))}.mdc-button--raised:hover{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);box-shadow:var(--mdc-button-raised-box-shadow-hover, 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12))}.mdc-button--raised:active{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);box-shadow:var(--mdc-button-raised-box-shadow-active, 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12))}.mdc-button--raised:disabled{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);box-shadow:var(--mdc-button-raised-box-shadow-disabled, 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12))}.mdc-button--raised,.mdc-button--unelevated{padding-left:16px;padding-left:var(--mdc-button-horizontal-padding, 16px);padding-right:16px;padding-right:var(--mdc-button-horizontal-padding, 16px)}.mdc-button--outlined{border-width:1px;border-width:var(--mdc-button-outline-width, 1px);padding-left:calc(16px - 1px);padding-left:calc(var(--mdc-button-horizontal-padding, 16px) - var(--mdc-button-outline-width, 1px));padding-right:calc(16px - 1px);padding-right:calc(var(--mdc-button-horizontal-padding, 16px) - var(--mdc-button-outline-width, 1px))}.mdc-button--outlined:not(:disabled){border-color:rgba(0, 0, 0, 0.12);border-color:var(--mdc-button-outline-color, rgba(0, 0, 0, 0.12))}.mdc-button--outlined .ripple{top:calc(-1 * 1px);top:calc(-1 * var(--mdc-button-outline-width, 1px));left:calc(-1 * 1px);left:calc(-1 * var(--mdc-button-outline-width, 1px));right:initial;right:initial;border-width:1px;border-width:var(--mdc-button-outline-width, 1px);border-style:solid;border-color:transparent}[dir=rtl] .mdc-button--outlined .ripple,.mdc-button--outlined .ripple[dir=rtl]{left:initial;left:initial;right:calc(-1 * 1px);right:calc(-1 * var(--mdc-button-outline-width, 1px))}.mdc-button--dense{height:28px;margin-top:0;margin-bottom:0}.mdc-button--dense .mdc-button__touch{height:100%}:host([disabled]){pointer-events:none}:host([disabled]) .mdc-button{color:rgba(0, 0, 0, 0.38);color:var(--mdc-button-disabled-ink-color, rgba(0, 0, 0, 0.38))}:host([disabled]) .mdc-button--raised,:host([disabled]) .mdc-button--unelevated{background-color:rgba(0, 0, 0, 0.12);background-color:var(--mdc-button-disabled-fill-color, rgba(0, 0, 0, 0.12))}:host([disabled]) .mdc-button--outlined{border-color:rgba(0, 0, 0, 0.12);border-color:var(--mdc-button-disabled-outline-color, rgba(0, 0, 0, 0.12))}`;let Xm=class extends Ym{};Xm.styles=[Wm],Xm=wp([ye(\"mwc-button\")],Xm);class Jm extends _e{constructor(){super(...arguments),this.disabled=!1,this.icon=\"\",this.shouldRenderRipple=!1,this.rippleHandlers=new Gm((()=>(this.shouldRenderRipple=!0,this.ripple)))}renderRipple(){return this.shouldRenderRipple?K`\n            <mwc-ripple\n                .disabled=\"${this.disabled}\"\n                unbounded>\n            </mwc-ripple>`:\"\"}focus(){const e=this.buttonElement;e&&(this.rippleHandlers.startFocus(),e.focus())}blur(){const e=this.buttonElement;e&&(this.rippleHandlers.endFocus(),e.blur())}render(){return K`<button\n        class=\"mdc-icon-button mdc-icon-button--display-flex\"\n        aria-label=\"${this.ariaLabel||this.icon}\"\n        aria-haspopup=\"${Km(this.ariaHasPopup)}\"\n        ?disabled=\"${this.disabled}\"\n        @focus=\"${this.handleRippleFocus}\"\n        @blur=\"${this.handleRippleBlur}\"\n        @mousedown=\"${this.handleRippleMouseDown}\"\n        @mouseenter=\"${this.handleRippleMouseEnter}\"\n        @mouseleave=\"${this.handleRippleMouseLeave}\"\n        @touchstart=\"${this.handleRippleTouchStart}\"\n        @touchend=\"${this.handleRippleDeactivate}\"\n        @touchcancel=\"${this.handleRippleDeactivate}\"\n    >${this.renderRipple()}\n    <i class=\"material-icons\">${this.icon}</i>\n    <span\n      ><slot></slot\n    ></span>\n  </button>`}handleRippleMouseDown(e){const t=()=>{window.removeEventListener(\"mouseup\",t),this.handleRippleDeactivate()};window.addEventListener(\"mouseup\",t),this.rippleHandlers.startPress(e)}handleRippleTouchStart(e){this.rippleHandlers.startPress(e)}handleRippleDeactivate(){this.rippleHandlers.endPress()}handleRippleMouseEnter(){this.rippleHandlers.startHover()}handleRippleMouseLeave(){this.rippleHandlers.endHover()}handleRippleFocus(){this.rippleHandlers.startFocus()}handleRippleBlur(){this.rippleHandlers.endFocus()}}wp([ve({type:Boolean,reflect:!0})],Jm.prototype,\"disabled\",void 0),wp([ve({type:String})],Jm.prototype,\"icon\",void 0),wp([qm,ve({type:String,attribute:\"aria-label\"})],Jm.prototype,\"ariaLabel\",void 0),wp([qm,ve({type:String,attribute:\"aria-haspopup\"})],Jm.prototype,\"ariaHasPopup\",void 0),wp([He(\"button\")],Jm.prototype,\"buttonElement\",void 0),wp([ke(\"mwc-ripple\")],Jm.prototype,\"ripple\",void 0),wp([Ce()],Jm.prototype,\"shouldRenderRipple\",void 0),wp([we({passive:!0})],Jm.prototype,\"handleRippleMouseDown\",null),wp([we({passive:!0})],Jm.prototype,\"handleRippleTouchStart\",null);const Qm=b`.material-icons{font-family:var(--mdc-icon-font, \"Material Icons\");font-weight:normal;font-style:normal;font-size:var(--mdc-icon-size, 24px);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:\"liga\"}.mdc-icon-button{font-size:24px;width:48px;height:48px;padding:12px}.mdc-icon-button.mdc-icon-button--reduced-size .mdc-icon-button__ripple{width:40px;height:40px;margin-top:4px;margin-bottom:4px;margin-right:4px;margin-left:4px}.mdc-icon-button .mdc-icon-button__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%, -50%)}.mdc-icon-button:disabled{color:rgba(0, 0, 0, 0.38);color:var(--mdc-theme-text-disabled-on-light, rgba(0, 0, 0, 0.38))}.mdc-icon-button svg,.mdc-icon-button img{width:24px;height:24px}.mdc-icon-button{display:inline-block;position:relative;box-sizing:border-box;border:none;outline:none;background-color:transparent;fill:currentColor;color:inherit;text-decoration:none;cursor:pointer;user-select:none;z-index:0;overflow:visible}.mdc-icon-button .mdc-icon-button__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%, -50%)}.mdc-icon-button:disabled{cursor:default;pointer-events:none}.mdc-icon-button--display-flex{align-items:center;display:inline-flex;justify-content:center}.mdc-icon-button__icon{display:inline-block}.mdc-icon-button__icon.mdc-icon-button__icon--on{display:none}.mdc-icon-button--on .mdc-icon-button__icon{display:none}.mdc-icon-button--on .mdc-icon-button__icon.mdc-icon-button__icon--on{display:inline-block}.mdc-icon-button{display:inline-block;position:relative;box-sizing:border-box;border:none;outline:none;background-color:transparent;fill:currentColor;color:inherit;text-decoration:none;cursor:pointer;user-select:none;z-index:0;overflow:visible}.mdc-icon-button .mdc-icon-button__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%, -50%)}.mdc-icon-button:disabled{cursor:default;pointer-events:none}.mdc-icon-button--display-flex{align-items:center;display:inline-flex;justify-content:center}.mdc-icon-button__icon{display:inline-block}.mdc-icon-button__icon.mdc-icon-button__icon--on{display:none}.mdc-icon-button--on .mdc-icon-button__icon{display:none}.mdc-icon-button--on .mdc-icon-button__icon.mdc-icon-button__icon--on{display:inline-block}:host{display:inline-block;outline:none}:host([disabled]){pointer-events:none}.mdc-icon-button i,.mdc-icon-button svg,.mdc-icon-button img,.mdc-icon-button ::slotted(*){display:block}:host{--mdc-ripple-color: currentcolor;-webkit-tap-highlight-color:transparent}:host,.mdc-icon-button{vertical-align:top}.mdc-icon-button{width:var(--mdc-icon-button-size, 48px);height:var(--mdc-icon-button-size, 48px);padding:calc( (var(--mdc-icon-button-size, 48px) - var(--mdc-icon-size, 24px)) / 2 )}.mdc-icon-button i,.mdc-icon-button svg,.mdc-icon-button img,.mdc-icon-button ::slotted(*){display:block;width:var(--mdc-icon-size, 24px);height:var(--mdc-icon-size, 24px)}`;let eh=class extends Jm{};eh.styles=[Qm],eh=wp([ye(\"mwc-icon-button\")],eh);let th=s([ye(\"ha-svg-icon\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[ve()],key:\"path\",value:void 0},{kind:\"field\",decorators:[ve()],key:\"viewBox\",value:void 0},{kind:\"method\",key:\"render\",value:function(){return Y`\n    <svg\n      viewBox=${this.viewBox||\"0 0 24 24\"}\n      preserveAspectRatio=\"xMidYMid meet\"\n      focusable=\"false\"\n      role=\"img\" \n      aria-hidden=\"true\"\n    >\n      <g>\n      ${this.path?Y`<path d=${this.path}></path>`:\"\"}\n      </g>\n    </svg>`}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return b`\n      :host {\n        display: var(--ha-icon-display, inline-flex);\n        align-items: center;\n        justify-content: center;\n        position: relative;\n        vertical-align: middle;\n        fill: currentcolor;\n        width: var(--mdc-icon-size, 24px);\n        height: var(--mdc-icon-size, 24px);\n      }\n      svg {\n        width: 100%;\n        height: 100%;\n        pointer-events: none;\n        display: block;\n      }\n    `}}]}}),_e);s([ye(\"ha-icon-button\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[ve({type:Boolean,reflect:!0})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[ve({type:String})],key:\"path\",value:void 0},{kind:\"field\",decorators:[ve({type:String})],key:\"label\",value:void 0},{kind:\"field\",decorators:[ve({type:String,attribute:\"aria-haspopup\"})],key:\"ariaHasPopup\",value:void 0},{kind:\"field\",decorators:[ve({type:Boolean})],key:\"hideTitle\",value:()=>!1},{kind:\"field\",decorators:[He(\"mwc-icon-button\",!0)],key:\"_button\",value:void 0},{kind:\"method\",key:\"focus\",value:function(){var e;null===(e=this._button)||void 0===e||e.focus()}},{kind:\"field\",static:!0,key:\"shadowRootOptions\",value:()=>({mode:\"open\",delegatesFocus:!0})},{kind:\"method\",key:\"render\",value:function(){return K`\n      <mwc-icon-button\n        aria-label=${Km(this.label)}\n        title=${Km(this.hideTitle?void 0:this.label)}\n        aria-haspopup=${Km(this.ariaHasPopup)}\n        .disabled=${this.disabled}\n      >\n        ${this.path?K`<ha-svg-icon .path=${this.path}></ha-svg-icon>`:K`<slot></slot>`}\n      </mwc-icon-button>\n    `}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return b`\n      :host {\n        display: inline-block;\n        outline: none;\n      }\n      :host([disabled]) {\n        pointer-events: none;\n      }\n      mwc-icon-button {\n        --mdc-theme-on-primary: currentColor;\n        --mdc-theme-text-disabled-on-light: var(--disabled-text-color);\n      }\n    `}}]}}),_e),s([ye(\"ha-icon-button-arrow-prev\")],(function(e,o){class i extends o{constructor(...t){super(...t),e(this)}}return{F:i,d:[{kind:\"field\",decorators:[ve({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[ve({type:Boolean})],key:\"disabled\",value:()=>!1},{kind:\"field\",decorators:[ve()],key:\"label\",value:void 0},{kind:\"field\",decorators:[Ce()],key:\"_icon\",value:()=>Hs},{kind:\"method\",key:\"connectedCallback\",value:function(){r(t(i.prototype),\"connectedCallback\",this).call(this),setTimeout((()=>{this._icon=\"ltr\"===window.getComputedStyle(this).direction?Hs:ks}),100)}},{kind:\"method\",key:\"render\",value:function(){var e;return K`\n      <ha-icon-button\n        .disabled=${this.disabled}\n        .label=${this.label||(null===(e=this.hass)||void 0===e?void 0:e.localize(\"ui.common.back\"))||\"Back\"}\n        .path=${this._icon}\n      ></ha-icon-button>\n    `}}]}}),_e);const oh=e=>{let t=[];function o(o,r){e=r?o:Object.assign(Object.assign({},e),o);let i=t;for(let t=0;t<i.length;t++)i[t](e)}return{get state(){return e},action(t){function r(e){o(e,!1)}return function(){let o=[e];for(let e=0;e<arguments.length;e++)o.push(arguments[e]);let i=t.apply(this,o);if(null!=i)return i instanceof Promise?i.then(r):r(i)}},setState:o,subscribe:e=>(t.push(e),()=>{!function(e){let o=[];for(let r=0;r<t.length;r++)t[r]===e?e=null:o.push(t[r]);t=o}(e)})}},rh=(e,t,o,r)=>{if(e[t])return e[t];let i,n,a=0,s=oh();const l=()=>{if(!o)throw new Error(\"Collection does not support refresh\");return o(e).then((e=>s.setState(e,!0)))},d=()=>l().catch((t=>{if(e.connected)throw t})),c=()=>{n=void 0,i&&i.then((e=>{e()})),e.removeEventListener(\"ready\",l),e.removeEventListener(\"disconnected\",p)},p=()=>{n&&(clearTimeout(n),c())};return e[t]={get state(){return s.state},refresh:l,subscribe(t){a++,1===a&&(()=>{if(void 0!==n)return clearTimeout(n),void(n=void 0);r&&(i=r(e,s)),o&&(e.addEventListener(\"ready\",d),d()),e.addEventListener(\"disconnected\",p)})();const l=s.subscribe(t);return void 0!==s.state&&setTimeout((()=>t(s.state)),0),()=>{l(),a--,a||(n=setTimeout(c,5e3))}}},e[t]},ih=(e,t,o,r,i)=>rh(r,e,t,o).subscribe(i),nh=e=>e.sendMessagePromise({type:\"persistent_notification/get\"}),ah=(e,t)=>e.subscribeEvents((()=>nh(e).then((e=>t.setState(e,!0)))),\"persistent_notifications_updated\");s([ye(\"ha-menu-button\")],(function(e,o){class i extends o{constructor(...t){super(...t),e(this)}}return{F:i,d:[{kind:\"field\",decorators:[ve({type:Boolean})],key:\"hassio\",value:()=>!1},{kind:\"field\",decorators:[ve()],key:\"narrow\",value:void 0},{kind:\"field\",decorators:[ve({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[Ce()],key:\"_hasNotifications\",value:()=>!1},{kind:\"field\",key:\"_alwaysVisible\",value:()=>!1},{kind:\"field\",key:\"_attachNotifOnConnect\",value:()=>!1},{kind:\"field\",key:\"_unsubNotifications\",value:void 0},{kind:\"method\",key:\"connectedCallback\",value:function(){r(t(i.prototype),\"connectedCallback\",this).call(this),this._attachNotifOnConnect&&(this._attachNotifOnConnect=!1,this._subscribeNotifications())}},{kind:\"method\",key:\"disconnectedCallback\",value:function(){r(t(i.prototype),\"disconnectedCallback\",this).call(this),this._unsubNotifications&&(this._attachNotifOnConnect=!0,this._unsubNotifications(),this._unsubNotifications=void 0)}},{kind:\"method\",key:\"render\",value:function(){const e=this._hasNotifications&&(this.narrow||\"always_hidden\"===this.hass.dockedSidebar);return K`\n      <ha-icon-button\n        .label=${this.hass.localize(\"ui.sidebar.sidebar_toggle\")}\n        .path=${\"M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z\"}\n        @click=${this._toggleMenu}\n      ></ha-icon-button>\n      ${e?K`<div class=\"dot\"></div>`:\"\"}\n    `}},{kind:\"method\",key:\"firstUpdated\",value:function(e){r(t(i.prototype),\"firstUpdated\",this).call(this,e),this.hassio&&(this._alwaysVisible=(Number(window.parent.frontendVersion)||0)<20190710)}},{kind:\"method\",key:\"updated\",value:function(e){if(r(t(i.prototype),\"updated\",this).call(this,e),!e.has(\"narrow\")&&!e.has(\"hass\"))return;const o=e.get(\"hass\"),n=e.get(\"narrow\")||o&&\"always_hidden\"===o.dockedSidebar,a=this.narrow||\"always_hidden\"===this.hass.dockedSidebar;n!==a&&(this.style.display=a||this._alwaysVisible?\"initial\":\"none\",a?this._subscribeNotifications():this._unsubNotifications&&(this._unsubNotifications(),this._unsubNotifications=void 0))}},{kind:\"method\",key:\"_subscribeNotifications\",value:function(){var e;this._unsubNotifications=(e=this.hass.connection,ih(\"_ntf\",nh,ah,e,(e=>{this._hasNotifications=e.length>0})))}},{kind:\"method\",key:\"_toggleMenu\",value:function(){Qe(this,\"hass-toggle-menu\")}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return b`\n      :host {\n        position: relative;\n      }\n      .dot {\n        pointer-events: none;\n        position: absolute;\n        background-color: var(--accent-color);\n        width: 12px;\n        height: 12px;\n        top: 9px;\n        right: 7px;\n        border-radius: 50%;\n        border: 2px solid var(--app-header-background-color);\n      }\n    `}}]}}),_e),s([ye(\"hass-error-screen\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[ve({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[ve({type:Boolean})],key:\"toolbar\",value:()=>!0},{kind:\"field\",decorators:[ve({type:Boolean})],key:\"rootnav\",value:()=>!1},{kind:\"field\",decorators:[ve({type:Boolean})],key:\"narrow\",value:()=>!1},{kind:\"field\",decorators:[ve()],key:\"error\",value:void 0},{kind:\"method\",key:\"render\",value:function(){var e,t;return K`\n      ${this.toolbar?K`<div class=\"toolbar\">\n            ${this.rootnav||null!==(e=history.state)&&void 0!==e&&e.root?K`\n                  <ha-menu-button\n                    .hass=${this.hass}\n                    .narrow=${this.narrow}\n                  ></ha-menu-button>\n                `:K`\n                  <ha-icon-button-arrow-prev\n                    .hass=${this.hass}\n                    @click=${this._handleBack}\n                  ></ha-icon-button-arrow-prev>\n                `}\n          </div>`:\"\"}\n      <div class=\"content\">\n        <h3>${this.error}</h3>\n        <slot>\n          <mwc-button @click=${this._handleBack}>\n            ${(null===(t=this.hass)||void 0===t?void 0:t.localize(\"ui.panel.error.go_back\"))||\"go back\"}\n          </mwc-button>\n        </slot>\n      </div>\n    `}},{kind:\"method\",key:\"_handleBack\",value:function(){history.back()}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[b`\n        :host {\n          display: block;\n          height: 100%;\n          background-color: var(--primary-background-color);\n        }\n        .toolbar {\n          display: flex;\n          align-items: center;\n          font-size: 20px;\n          height: var(--header-height);\n          padding: 0 16px;\n          pointer-events: none;\n          background-color: var(--app-header-background-color);\n          font-weight: 400;\n          color: var(--app-header-text-color, white);\n          border-bottom: var(--app-header-border-bottom, none);\n          box-sizing: border-box;\n        }\n        ha-icon-button-arrow-prev {\n          pointer-events: auto;\n        }\n        .content {\n          color: var(--primary-text-color);\n          height: calc(100% - var(--header-height));\n          display: flex;\n          padding: 16px;\n          align-items: center;\n          justify-content: center;\n          flex-direction: column;\n        }\n        a {\n          color: var(--primary-color);\n        }\n      `]}}]}}),_e),Un({_template:ma`\n    <style>\n\n      :host {\n        @apply --layout-horizontal;\n        @apply --layout-center;\n        position: relative;\n        height: 64px;\n        padding: 0 16px;\n        pointer-events: none;\n        font-size: var(--app-toolbar-font-size, 20px);\n      }\n\n      :host ::slotted(*) {\n        pointer-events: auto;\n      }\n\n      :host ::slotted(paper-icon-button) {\n        /* paper-icon-button/issues/33 */\n        font-size: 0;\n      }\n\n      :host ::slotted([main-title]),\n      :host ::slotted([condensed-title]) {\n        pointer-events: none;\n        @apply --layout-flex;\n      }\n\n      :host ::slotted([bottom-item]) {\n        position: absolute;\n        right: 0;\n        bottom: 0;\n        left: 0;\n      }\n\n      :host ::slotted([top-item]) {\n        position: absolute;\n        top: 0;\n        right: 0;\n        left: 0;\n      }\n\n      :host ::slotted([spacer]) {\n        margin-left: 64px;\n      }\n    </style>\n\n    <slot></slot>\n`,is:\"app-toolbar\"});class sh extends _e{constructor(){super(...arguments),this.indeterminate=!1,this.progress=0,this.density=0,this.closed=!1}open(){this.closed=!1}close(){this.closed=!0}render(){const e={\"mdc-circular-progress--closed\":this.closed,\"mdc-circular-progress--indeterminate\":this.indeterminate},t=48+4*this.density,o={width:`${t}px`,height:`${t}px`};return K`\n      <div\n        class=\"mdc-circular-progress ${Bm(e)}\"\n        style=\"${$m(o)}\"\n        role=\"progressbar\"\n        aria-label=\"${Km(this.ariaLabel)}\"\n        aria-valuemin=\"0\"\n        aria-valuemax=\"1\"\n        aria-valuenow=\"${Km(this.indeterminate?void 0:this.progress)}\">\n        ${this.renderDeterminateContainer()}\n        ${this.renderIndeterminateContainer()}\n      </div>`}renderDeterminateContainer(){const e=48+4*this.density,t=e/2,o=this.density>=-3?18+11*this.density/6:12.5+5*(this.density+3)/4,r=6.2831852*o,i=(1-this.progress)*r,n=this.density>=-3?4+this.density*(1/3):3+(this.density+3)*(1/6);return K`\n      <div class=\"mdc-circular-progress__determinate-container\">\n        <svg class=\"mdc-circular-progress__determinate-circle-graphic\"\n             viewBox=\"0 0 ${e} ${e}\">\n          <circle class=\"mdc-circular-progress__determinate-track\"\n                  cx=\"${t}\" cy=\"${t}\" r=\"${o}\"\n                  stroke-width=\"${n}\"></circle>\n          <circle class=\"mdc-circular-progress__determinate-circle\"\n                  cx=\"${t}\" cy=\"${t}\" r=\"${o}\"\n                  stroke-dasharray=\"${6.2831852*o}\"\n                  stroke-dashoffset=\"${i}\"\n                  stroke-width=\"${n}\"></circle>\n        </svg>\n      </div>`}renderIndeterminateContainer(){return K`\n      <div class=\"mdc-circular-progress__indeterminate-container\">\n        <div class=\"mdc-circular-progress__spinner-layer\">\n          ${this.renderIndeterminateSpinnerLayer()}\n        </div>\n      </div>`}renderIndeterminateSpinnerLayer(){const e=48+4*this.density,t=e/2,o=this.density>=-3?18+11*this.density/6:12.5+5*(this.density+3)/4,r=6.2831852*o,i=.5*r,n=this.density>=-3?4+this.density*(1/3):3+(this.density+3)*(1/6);return K`\n        <div class=\"mdc-circular-progress__circle-clipper mdc-circular-progress__circle-left\">\n          <svg class=\"mdc-circular-progress__indeterminate-circle-graphic\"\n               viewBox=\"0 0 ${e} ${e}\">\n            <circle cx=\"${t}\" cy=\"${t}\" r=\"${o}\"\n                    stroke-dasharray=\"${r}\"\n                    stroke-dashoffset=\"${i}\"\n                    stroke-width=\"${n}\"></circle>\n          </svg>\n        </div>\n        <div class=\"mdc-circular-progress__gap-patch\">\n          <svg class=\"mdc-circular-progress__indeterminate-circle-graphic\"\n               viewBox=\"0 0 ${e} ${e}\">\n            <circle cx=\"${t}\" cy=\"${t}\" r=\"${o}\"\n                    stroke-dasharray=\"${r}\"\n                    stroke-dashoffset=\"${i}\"\n                    stroke-width=\"${.8*n}\"></circle>\n          </svg>\n        </div>\n        <div class=\"mdc-circular-progress__circle-clipper mdc-circular-progress__circle-right\">\n          <svg class=\"mdc-circular-progress__indeterminate-circle-graphic\"\n               viewBox=\"0 0 ${e} ${e}\">\n            <circle cx=\"${t}\" cy=\"${t}\" r=\"${o}\"\n                    stroke-dasharray=\"${r}\"\n                    stroke-dashoffset=\"${i}\"\n                    stroke-width=\"${n}\"></circle>\n          </svg>\n        </div>`}update(e){super.update(e),e.has(\"progress\")&&(this.progress>1&&(this.progress=1),this.progress<0&&(this.progress=0))}}wp([ve({type:Boolean,reflect:!0})],sh.prototype,\"indeterminate\",void 0),wp([ve({type:Number,reflect:!0})],sh.prototype,\"progress\",void 0),wp([ve({type:Number,reflect:!0})],sh.prototype,\"density\",void 0),wp([ve({type:Boolean,reflect:!0})],sh.prototype,\"closed\",void 0),wp([qm,ve({type:String,attribute:\"aria-label\"})],sh.prototype,\"ariaLabel\",void 0);const lh=b`.mdc-circular-progress__determinate-circle,.mdc-circular-progress__indeterminate-circle-graphic{stroke:#6200ee;stroke:var(--mdc-theme-primary, #6200ee)}.mdc-circular-progress__determinate-track{stroke:transparent}@keyframes mdc-circular-progress-container-rotate{to{transform:rotate(360deg)}}@keyframes mdc-circular-progress-spinner-layer-rotate{12.5%{transform:rotate(135deg)}25%{transform:rotate(270deg)}37.5%{transform:rotate(405deg)}50%{transform:rotate(540deg)}62.5%{transform:rotate(675deg)}75%{transform:rotate(810deg)}87.5%{transform:rotate(945deg)}100%{transform:rotate(1080deg)}}@keyframes mdc-circular-progress-color-1-fade-in-out{from{opacity:.99}25%{opacity:.99}26%{opacity:0}89%{opacity:0}90%{opacity:.99}to{opacity:.99}}@keyframes mdc-circular-progress-color-2-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:.99}50%{opacity:.99}51%{opacity:0}to{opacity:0}}@keyframes mdc-circular-progress-color-3-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:.99}75%{opacity:.99}76%{opacity:0}to{opacity:0}}@keyframes mdc-circular-progress-color-4-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:.99}90%{opacity:.99}to{opacity:0}}@keyframes mdc-circular-progress-left-spin{from{transform:rotate(265deg)}50%{transform:rotate(130deg)}to{transform:rotate(265deg)}}@keyframes mdc-circular-progress-right-spin{from{transform:rotate(-265deg)}50%{transform:rotate(-130deg)}to{transform:rotate(-265deg)}}.mdc-circular-progress{display:inline-flex;position:relative;direction:ltr;line-height:0;transition:opacity 250ms 0ms cubic-bezier(0.4, 0, 0.6, 1)}.mdc-circular-progress__determinate-container,.mdc-circular-progress__indeterminate-circle-graphic,.mdc-circular-progress__indeterminate-container,.mdc-circular-progress__spinner-layer{position:absolute;width:100%;height:100%}.mdc-circular-progress__determinate-container{transform:rotate(-90deg)}.mdc-circular-progress__indeterminate-container{font-size:0;letter-spacing:0;white-space:nowrap;opacity:0}.mdc-circular-progress__determinate-circle-graphic,.mdc-circular-progress__indeterminate-circle-graphic{fill:transparent}.mdc-circular-progress__determinate-circle{transition:stroke-dashoffset 500ms 0ms cubic-bezier(0, 0, 0.2, 1)}.mdc-circular-progress__gap-patch{position:absolute;top:0;left:47.5%;box-sizing:border-box;width:5%;height:100%;overflow:hidden}.mdc-circular-progress__gap-patch .mdc-circular-progress__indeterminate-circle-graphic{left:-900%;width:2000%;transform:rotate(180deg)}.mdc-circular-progress__circle-clipper{display:inline-flex;position:relative;width:50%;height:100%;overflow:hidden}.mdc-circular-progress__circle-clipper .mdc-circular-progress__indeterminate-circle-graphic{width:200%}.mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{left:-100%}.mdc-circular-progress--indeterminate .mdc-circular-progress__determinate-container{opacity:0}.mdc-circular-progress--indeterminate .mdc-circular-progress__indeterminate-container{opacity:1}.mdc-circular-progress--indeterminate .mdc-circular-progress__indeterminate-container{animation:mdc-circular-progress-container-rotate 1568.2352941176ms linear infinite}.mdc-circular-progress--indeterminate .mdc-circular-progress__spinner-layer{animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__color-1{animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-1-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__color-2{animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-2-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__color-3{animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-3-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__color-4{animation:mdc-circular-progress-spinner-layer-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,mdc-circular-progress-color-4-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-left .mdc-circular-progress__indeterminate-circle-graphic{animation:mdc-circular-progress-left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--indeterminate .mdc-circular-progress__circle-right .mdc-circular-progress__indeterminate-circle-graphic{animation:mdc-circular-progress-right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.mdc-circular-progress--closed{opacity:0}:host{display:inline-flex}.mdc-circular-progress__determinate-track{stroke:transparent;stroke:var(--mdc-circular-progress-track-color, transparent)}`;let dh=class extends sh{};dh.styles=[lh],dh=wp([ye(\"mwc-circular-progress\")],dh),s([ye(\"ha-circular-progress\")],(function(e,o){class i extends o{constructor(...t){super(...t),e(this)}}return{F:i,d:[{kind:\"field\",decorators:[ve({type:Boolean})],key:\"active\",value:()=>!1},{kind:\"field\",decorators:[ve()],key:\"alt\",value:()=>\"Loading\"},{kind:\"field\",decorators:[ve()],key:\"size\",value:()=>\"medium\"},{kind:\"set\",key:\"density\",value:function(e){}},{kind:\"get\",key:\"density\",value:function(){switch(this.size){case\"tiny\":return-8;case\"small\":return-5;case\"medium\":default:return 0;case\"large\":return 5}}},{kind:\"set\",key:\"indeterminate\",value:function(e){}},{kind:\"get\",key:\"indeterminate\",value:function(){return this.active}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[r(t(i),\"styles\",this),b`\n        :host {\n          overflow: hidden;\n        }\n      `]}}]}}),dh),s([ye(\"hass-loading-screen\")],(function(e,t){return{F:class extends t{constructor(...t){super(...t),e(this)}},d:[{kind:\"field\",decorators:[ve({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[ve({type:Boolean,attribute:\"no-toolbar\"})],key:\"noToolbar\",value:()=>!1},{kind:\"field\",decorators:[ve({type:Boolean})],key:\"rootnav\",value:()=>!1},{kind:\"field\",decorators:[ve({type:Boolean})],key:\"narrow\",value:()=>!1},{kind:\"method\",key:\"render\",value:function(){var e;return K`\n      ${this.noToolbar?\"\":K`<div class=\"toolbar\">\n            ${this.rootnav||null!==(e=history.state)&&void 0!==e&&e.root?K`\n                  <ha-menu-button\n                    .hass=${this.hass}\n                    .narrow=${this.narrow}\n                  ></ha-menu-button>\n                `:K`\n                  <ha-icon-button-arrow-prev\n                    .hass=${this.hass}\n                    @click=${this._handleBack}\n                  ></ha-icon-button-arrow-prev>\n                `}\n          </div>`}\n      <div class=\"content\">\n        <ha-circular-progress active></ha-circular-progress>\n      </div>\n    `}},{kind:\"method\",key:\"_handleBack\",value:function(){history.back()}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[Pe,b`\n        :host {\n          display: block;\n          height: 100%;\n          background-color: var(--primary-background-color);\n        }\n        .toolbar {\n          display: flex;\n          align-items: center;\n          font-size: 20px;\n          height: var(--header-height);\n          padding: 0 16px;\n          pointer-events: none;\n          background-color: var(--app-header-background-color);\n          font-weight: 400;\n          color: var(--app-header-text-color, white);\n          border-bottom: var(--app-header-border-bottom, none);\n          box-sizing: border-box;\n        }\n        ha-menu-button,\n        ha-icon-button-arrow-prev {\n          pointer-events: auto;\n        }\n        .content {\n          height: calc(100% - var(--header-height));\n          display: flex;\n          align-items: center;\n          justify-content: center;\n        }\n      `]}}]}}),_e);let ch=s(null,(function(e,o){class i extends o{constructor(...t){super(...t),e(this)}}return{F:i,d:[{kind:\"field\",decorators:[ve()],key:\"route\",value:void 0},{kind:\"field\",key:\"routerOptions\",value:void 0},{kind:\"field\",key:\"_currentPage\",value:()=>\"\"},{kind:\"field\",key:\"_currentLoadProm\",value:void 0},{kind:\"field\",key:\"_cache\",value:()=>({})},{kind:\"field\",key:\"_initialLoadDone\",value:()=>!1},{kind:\"field\",key:\"_computeTail\",value:()=>os((e=>{const t=e.path.indexOf(\"/\",1);return-1===t?{prefix:e.prefix+e.path,path:\"\"}:{prefix:e.prefix+e.path.substr(0,t),path:e.path.substr(t)}}))},{kind:\"method\",key:\"createRenderRoot\",value:function(){return this}},{kind:\"method\",key:\"update\",value:function(e){r(t(i.prototype),\"update\",this).call(this,e);const o=this.routerOptions||{routes:{}};if(o&&o.initialLoad&&!this._initialLoadDone)return;if(!e.has(\"route\"))return void(this.lastChild&&!this._currentLoadProm&&this.updatePageEl(this.lastChild,e));const n=this.route,a=o.defaultPage;n&&\"\"===n.path&&void 0!==a&&st(`${n.prefix}/${a}`,{replace:!0});let s=n?((e,t)=>{if(\"\"===e)return t;const o=e.indexOf(\"/\",1);return-1===o?e.substr(1):e.substr(1,o-1)})(n.path,a||\"\"):\"not_found\",l=o.routes[s];for(;\"string\"==typeof l;)s=l,l=o.routes[s];if(o.beforeRender){const e=o.beforeRender(s);if(void 0!==e){for(s=e,l=o.routes[s];\"string\"==typeof l;)s=l,l=o.routes[s];n&&st(`${n.prefix}/${e}${location.search}`,{replace:!0})}}if(this._currentPage===s)return void(this.lastChild&&this.updatePageEl(this.lastChild,e));if(!l)return this._currentPage=\"\",void(this.lastChild&&this.removeChild(this.lastChild));this._currentPage=s;const d=l.load?l.load():Promise.resolve();let c;if(d.catch((e=>{console.error(\"Error loading page\",s,e),this._currentPage===s&&(this.lastChild&&this.removeChild(this.lastChild),c&&clearTimeout(c),this.appendChild(this.createErrorScreen(`Error while loading page ${s}.`)))})),!o.showLoading)return void this._createPanel(o,s,l);let p=!1;c=window.setTimeout((()=>{p||this._currentPage!==s||(this.lastChild&&this.removeChild(this.lastChild),this.appendChild(this.createLoadingScreen()))}),400),this._currentLoadProm=d.then((()=>{this._currentLoadProm=void 0,this._currentPage===s&&(p=!0,this._createPanel(o,s,l))}),(()=>{this._currentLoadProm=void 0}))}},{kind:\"method\",key:\"firstUpdated\",value:function(e){r(t(i.prototype),\"firstUpdated\",this).call(this,e);const o=this.routerOptions;o&&(o.preloadAll&&Object.values(o.routes).forEach((e=>\"object\"==typeof e&&e.load&&e.load())),o.initialLoad&&(setTimeout((()=>{this._initialLoadDone||this.appendChild(this.createLoadingScreen())}),400),o.initialLoad().then((()=>{this._initialLoadDone=!0,this.requestUpdate(\"route\")}))))}},{kind:\"method\",key:\"createLoadingScreen\",value:function(){return document.createElement(\"hass-loading-screen\")}},{kind:\"method\",key:\"createErrorScreen\",value:function(e){const t=document.createElement(\"hass-error-screen\");return t.error=e,t}},{kind:\"method\",key:\"rebuild\",value:async function(){const e=this.route;void 0!==e&&(this.route=void 0,await this.updateComplete,void 0===this.route&&(this.route=e))}},{kind:\"get\",key:\"pageRendered\",value:function(){return this.updateComplete.then((()=>this._currentLoadProm))}},{kind:\"method\",key:\"createElement\",value:function(e){return document.createElement(e)}},{kind:\"method\",key:\"updatePageEl\",value:function(e,t){}},{kind:\"get\",key:\"routeTail\",value:function(){return this._computeTail(this.route)}},{kind:\"method\",key:\"_createPanel\",value:function(e,t,o){this.lastChild&&this.removeChild(this.lastChild);const r=this._cache[t]||this.createElement(o.tag);this.updatePageEl(r),this.appendChild(r),(e.cacheAll||o.cache)&&(this._cache[t]=r)}}]}}),x);s([ye(\"hacs-router\")],(function(e,o){class i extends o{constructor(...t){super(...t),e(this)}}return{F:i,d:[{kind:\"field\",decorators:[ve({attribute:!1})],key:\"hacs\",value:void 0},{kind:\"field\",decorators:[ve({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[ve({attribute:!1})],key:\"route\",value:void 0},{kind:\"field\",decorators:[ve({type:Boolean})],key:\"narrow\",value:void 0},{kind:\"field\",decorators:[Ce()],key:\"_wideSidebar\",value:()=>!1},{kind:\"field\",decorators:[Ce()],key:\"_wide\",value:()=>!1},{kind:\"field\",key:\"_listeners\",value:()=>[]},{kind:\"method\",key:\"connectedCallback\",value:function(){r(t(i.prototype),\"connectedCallback\",this).call(this),this._listeners.push(gm(\"(min-width: 1040px)\",(e=>{this._wide=e}))),this._listeners.push(gm(\"(min-width: 1296px)\",(e=>{this._wideSidebar=e}))),this.style.setProperty(\"--app-header-background-color\",\"var(--sidebar-background-color)\"),this.style.setProperty(\"--app-header-text-color\",\"var(--sidebar-text-color)\"),this.style.setProperty(\"--app-header-border-bottom\",\"1px solid var(--divider-color)\"),this.style.setProperty(\"--ha-card-border-radius\",\"var(--ha-config-card-border-radius, 8px)\")}},{kind:\"method\",key:\"disconnectedCallback\",value:function(){for(r(t(i.prototype),\"disconnectedCallback\",this).call(this);this._listeners.length;)this._listeners.pop()()}},{kind:\"field\",key:\"routerOptions\",value:()=>({defaultPage:\"entry\",showLoading:!0,routes:{_my_redirect:{tag:\"hacs-my-redirect\",load:()=>import(\"./c.362d16d4.js\")},entry:{tag:\"hacs-entry-panel\",load:()=>import(\"./c.e65e9eeb.js\")},integrations:{tag:\"hacs-store-panel\",load:()=>import(\"./c.ee4824b8.js\")},frontend:{tag:\"hacs-store-panel\",load:()=>import(\"./c.ee4824b8.js\")},automation:{tag:\"hacs-store-panel\",load:()=>import(\"./c.ee4824b8.js\")},repository:{tag:\"hacs-repository-panel\",load:()=>import(\"./c.15331ea4.js\")}}})},{kind:\"method\",key:\"updatePageEl\",value:function(e){const t=this.route.path.replace(\"/\",\"\"),o=\"docked\"===this.hass.dockedSidebar?this._wideSidebar:this._wide;e.hass=this.hass,e.hacs=this.hacs,e.route=this.route,e.narrow=this.narrow,e.isWide=o,e.section=t}}]}}),ch);const ph=b`\n  a {\n    text-decoration: var(--hcv-text-decoration-link);\n    color: var(--hcv-text-color-link);\n  }\n`,uh=b`\n  ha-svg-icon {\n    color: var(--hcv-color-icon);\n  }\n`,mh=b`\n  mwc-button[raised] {\n    border-radius: 4px;\n  }\n  mwc-button[raised] > ha-circular-progress {\n    --mdc-theme-primary: var(--hcv-text-color-primary);\n  }\n`,hh=b`\n  *::-webkit-scrollbar {\n    width: 0.4rem;\n    height: 0.4rem;\n  }\n\n  *::-webkit-scrollbar-track {\n    -webkit-border-radius: 4px;\n    border-radius: 4px;\n    background: var(--scrollbar-thumb-color);\n  }\n\n  *::-webkit-scrollbar-thumb {\n    background-color: var(--accent-color);\n    border-radius: 0.3em;\n  }\n  .scroll {\n    overflow-y: auto;\n    scrollbar-color: var(--scrollbar-thumb-color) transparent;\n    scrollbar-width: thin;\n  }\n`,gh=b`\n  .warning {\n    color: var(--hcv-color-warning);\n  }\n  .pending_update {\n    color: var(--hcv-color-update);\n  }\n  .pending_restart,\n  .error,\n  .uninstall {\n    color: var(--hcv-color-error);\n    --mdc-theme-primary: var(--hcv-color-error);\n  }\n  .header {\n    opacity: var(--dark-primary-opacity);\n    padding: 8px 0 4px 16px;\n  }\n`,_h=[Pe,uh,gh,ph,mh],fh=b`\n  :host {\n    --hcv-color-error: var(--hacs-error-color, var(--error-color));\n    --hcv-color-warning: var(--hacs-warning-color, var(--warning-color));\n    --hcv-color-update: var(--hacs-update-color, var(--info-color));\n    --hcv-color-new: var(--hacs-new-color, var(--success-color));\n    --hcv-color-icon: var(--hacs--default-icon-color, var(--sidebar-icon-color));\n\n    --hcv-color-markdown-background: var(--markdown-code-background-color, #f6f8fa);\n\n    --hcv-text-color-primary: var(--primary-text-color);\n    --hcv-text-color-on-background: var(--text-primary-color);\n    --hcv-text-color-secondary: var(--secondary-text-color);\n    --hcv-text-color-link: var(--link-text-color, var(--accent-color));\n\n    --mdc-dialog-heading-ink-color: var(--hcv-text-color-primary);\n    --mdc-dialog-content-ink-color: var(--hcv-text-color-primary);\n\n    /*hacs-link*/\n    --hcv-text-decoration-link: var(--hacs-link-text-decoration, none);\n  }\n`;s([ye(\"hacs-frontend\")],(function(e,o){class i extends o{constructor(...t){super(...t),e(this)}}return{F:i,d:[{kind:\"field\",decorators:[ve({attribute:!1})],key:\"hass\",value:void 0},{kind:\"field\",decorators:[ve({attribute:!1})],key:\"narrow\",value:void 0},{kind:\"field\",decorators:[ve({attribute:!1})],key:\"route\",value:void 0},{kind:\"field\",decorators:[He(\"#hacs-dialog\")],key:\"_hacsDialog\",value:void 0},{kind:\"field\",decorators:[He(\"#hacs-dialog-secondary\")],key:\"_hacsDialogSecondary\",value:void 0},{kind:\"method\",key:\"firstUpdated\",value:function(e){r(t(i.prototype),\"firstUpdated\",this).call(this,e),this._applyTheme(),this.hacs.language=this.hass.language,this.addEventListener(\"hacs-location-changed\",(e=>this._setRoute(e))),this.addEventListener(\"hacs-dialog\",(e=>this._showDialog(e))),this.addEventListener(\"hacs-dialog-secondary\",(e=>this._showDialogSecondary(e))),Qa(this.hass,(()=>this._updateProperties(\"configuration\")),Na.CONFIG),Qa(this.hass,(()=>this._updateProperties(\"status\")),Na.STATUS),Qa(this.hass,(()=>this._updateProperties(\"status\")),Na.STAGE),Qa(this.hass,(()=>this._updateProperties(\"repositories\")),Na.REPOSITORY),this.hass.connection.subscribeEvents((async()=>this._updateProperties(\"lovelace\")),\"lovelace_updated\"),this._updateProperties(),\"\"===this.route.path&&st(\"/hacs/entry\",{replace:!0}),window.addEventListener(\"haptic\",(e=>{Qe(window.parent,e.type,e.detail,{bubbles:!1})})),document.body.addEventListener(\"click\",(e=>{const t=(e=>{if(e.defaultPrevented||0!==e.button||e.metaKey||e.ctrlKey||e.shiftKey)return;const t=e.composedPath().find((e=>\"A\"===e.tagName));if(!t||t.target||t.hasAttribute(\"download\")||\"external\"===t.getAttribute(\"rel\"))return;let o=t.href;if(!o||-1!==o.indexOf(\"mailto:\"))return;const r=window.location,i=r.origin||r.protocol+\"//\"+r.host;return 0===o.indexOf(i)&&(o=o.substr(i.length),\"#\"!==o)?(e.preventDefault(),o):void 0})(e);t&&st(t)})),Je.addEventListener(\"location-changed\",(e=>Qe(this,e.type,e.detail,{bubbles:!1}))),document.body.addEventListener(\"keydown\",(e=>{e.ctrlKey||e.shiftKey||e.metaKey||e.altKey||[\"c\",\"e\"].includes(e.key)&&Qe(Je,\"hass-quick-bar-trigger\",e,{bubbles:!1})})),Je.matchMedia(\"(prefers-color-scheme: dark)\").addEventListener(\"change\",(e=>this._applyTheme())),((e,t)=>{e.addEventListener(\"show-dialog\",(o=>{const{dialogTag:r,dialogImport:i,dialogParams:n,addHistory:a}=o.detail;nt(e,t,r,n,i,a)}))})(this,this.shadowRoot)}},{kind:\"method\",key:\"updated\",value:function(e){r(t(i.prototype),\"updated\",this).call(this,e);const o=e.get(\"hass\");o&&o.themes!==this.hass.themes&&this._applyTheme()}},{kind:\"method\",key:\"_updateProperties\",value:async function(e=\"all\"){const t={},o={};\"all\"===e?[o.repositories,o.info,o.critical,o.resources,o.removed]=await Promise.all([Oa(this.hass),Ia(this.hass),Ra(this.hass),Ka(this.hass),Da(this.hass)]):\"info\"===e?o.info=await Ia(this.hass):\"repositories\"===e?o.repositories=await Oa(this.hass):\"lovelace\"===e&&(o.resources=await Ka(this.hass)),Object.keys(o).forEach((e=>{void 0!==o[e]&&(t[e]=o[e])})),t&&this._updateHacs(t)}},{kind:\"method\",key:\"render\",value:function(){return this.hass&&this.hacs?K`\n      <hacs-router\n        .hass=${this.hass}\n        .hacs=${this.hacs}\n        .route=${this.route}\n        .narrow=${this.narrow}\n      ></hacs-router>\n      <hacs-event-dialog\n        .hass=${this.hass}\n        .hacs=${this.hacs}\n        .route=${this.route}\n        .narrow=${this.narrow}\n        id=\"hacs-dialog\"\n      ></hacs-event-dialog>\n      <hacs-event-dialog\n        .hass=${this.hass}\n        .hacs=${this.hacs}\n        .route=${this.route}\n        .narrow=${this.narrow}\n        id=\"hacs-dialog-secondary\"\n      ></hacs-event-dialog>\n    `:K``}},{kind:\"get\",static:!0,key:\"styles\",value:function(){return[_h,fh]}},{kind:\"method\",key:\"_showDialog\",value:function(e){const t=e.detail;this._hacsDialog.active=!0,this._hacsDialog.params=t,this.addEventListener(\"hacs-dialog-closed\",(()=>this._hacsDialog.active=!1))}},{kind:\"method\",key:\"_showDialogSecondary\",value:function(e){const t=e.detail;this._hacsDialogSecondary.active=!0,this._hacsDialogSecondary.secondary=!0,this._hacsDialogSecondary.params=t,this.addEventListener(\"hacs-secondary-dialog-closed\",(()=>this._hacsDialogSecondary.active=!1))}},{kind:\"method\",key:\"_setRoute\",value:function(e){var t;null!==(t=e.detail)&&void 0!==t&&t.route&&(this.route=e.detail.route,st(this.route.path,{replace:!0}),this.requestUpdate())}},{kind:\"method\",key:\"_applyTheme\",value:function(){var e;We(this.parentElement,this.hass.themes,(null===(e=this.hass.selectedTheme)||void 0===e?void 0:e.theme)||(this.hass.themes.darkMode&&this.hass.themes.default_dark_theme?this.hass.themes.default_dark_theme:this.hass.themes.default_theme),{...this.hass.selectedTheme,dark:this.hass.themes.darkMode}),this.parentElement.style.backgroundColor=\"var(--primary-background-color)\",this.parentElement.style.color=\"var(--primary-text-color)\"}}]}}),mm);export{K as $,Qe as A,xm as B,Vd as C,gs as D,ms as E,Al as F,kp as G,Pa as H,$m as I,y as J,qm as K,r as L,Vm as M,t as N,Dd as O,Te as P,Dm as Q,Gm as R,jm as S,Rm as T,ue as U,W as V,bm as W,ym as X,it as Y,$l as Z,wp as _,s as a,sa as a$,Qa as a0,Na as a1,Fa as a2,Oa as a3,qa as a4,e as a5,Un as a6,ma as a7,Vn as a8,ar as a9,za as aA,wd as aB,xd as aC,Pe as aD,_o as aE,gi as aF,gr as aG,fi as aH,Ql as aI,fd as aJ,ac as aK,Ga as aL,ql as aM,ws as aN,uc as aO,Pd as aP,ps as aQ,Rl as aR,rs as aS,Cs as aT,Nc as aU,Yl as aV,Gl as aW,Za as aX,f as aY,zo as aZ,vn as a_,ha as aa,Ki as ab,Fd as ac,$d as ad,ot as ae,Xl as af,Wl as ag,st as ah,Je as ai,pm as aj,Ua as ak,tm as al,Ya as am,Xa as an,Wa as ao,Ba as ap,Da as aq,Ja as ar,ja as as,wl as at,$a as au,ks as av,th as aw,kl as ax,Hl as ay,us as az,cm as b,cp as b$,Q as b0,sl as b1,ss as b2,gc as b3,pl as b4,Kc as b5,Bc as b6,Tl as b7,Dc as b8,Il as b9,Bd as bA,od as bB,qd as bC,Zd as bD,Dl as bE,zd as bF,Lc as bG,pd as bH,Xc as bI,ll as bJ,ml as bK,Ud as bL,_s as bM,gd as bN,gp as bO,xl as bP,ip as bQ,rp as bR,Qc as bS,ep as bT,tp as bU,op as bV,np as bW,ap as bX,sp as bY,lp as bZ,dp as b_,Jl as ba,bd as bb,vd as bc,Hd as bd,Sd as be,_d as bf,ul as bg,pc as bh,sd as bi,ad as bj,Td as bk,jd as bl,zl as bm,tl as bn,rd as bo,fs as bp,mc as bq,oc as br,fc as bs,cl as bt,hp as bu,$c as bv,Pl as bw,_c as bx,jc as by,Jc as bz,yd as c,Sl as c$,pp as c0,up as c1,bc as c2,Hc as c3,ol as c4,kc as c5,yc as c6,wc as c7,Cc as c8,vc as c9,td as cA,Vc as cB,Mc as cC,yl as cD,dd as cE,cd as cF,Ul as cG,Zl as cH,El as cI,vl as cJ,Ec as cK,Sc as cL,xc as cM,Ms as cN,$s as cO,Qs as cP,As as cQ,xs as cR,il as cS,rl as cT,jl as cU,Bl as cV,bs as cW,Ls as cX,bp as cY,yp as cZ,Ll as c_,Ac as ca,cc as cb,Cl as cc,_p as cd,fp as ce,Ol as cf,Gc as cg,Qd as ch,tc as ci,Jd as cj,Xd as ck,Ic as cl,rc as cm,kd as cn,Ad as co,dc as cp,lc as cq,Tc as cr,zc as cs,Kd as ct,Gd as cu,Wc as cv,Yc as cw,Nd as cx,Rd as cy,dl as cz,_h as d,mp as d$,hd as d0,ud as d1,md as d2,js as d3,el as d4,Js as d5,Bs as d6,Es as d7,Ps as d8,Ts as d9,Ml as dA,ds as dB,ls as dC,Md as dD,Ed as dE,al as dF,nl as dG,is as dH,hc as dI,x as dJ,fl as dK,hs as dL,ih as dM,cs as dN,ys as dO,ns as dP,Rc as dQ,as as dR,id as dS,ld as dT,Kl as dU,Ld as dV,Yd as dW,Wd as dX,nc as dY,sc as dZ,ed as d_,zs as da,Ns as db,Is as dc,Os as dd,Rs as de,Ds as df,Fs as dg,Us as dh,Zs as di,qs as dj,Gs as dk,Ks as dl,Ys as dm,Ws as dn,Xs as dp,ec as dq,_l as dr,Oc as ds,Fc as dt,Uc as du,gl as dv,hl as dw,Od as dx,Id as dy,bl as dz,ve as e,ic as e0,Cd as e1,Nl as e2,Ss as e3,vs as e4,Oe as e5,Ie as e6,Pc as e7,Fl as e8,Zc as e9,km as ea,Ee as eb,Vs as ec,nd as ed,Hs as ee,Tp as ef,qc as eg,Ae as f,ke as g,_e as h,He as i,Km as j,vm as k,xe as l,os as m,ye as n,Bm as o,Sm as p,Lm as q,b as r,hh as s,Ce as t,Cp as u,Ap as v,we as w,X as x,Cm as y,Vl as z};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/manifest.json",
    "content": "{\n  \"./src/main.ts\": \"main-a0d7432d.js\"\n}"
  },
  {
    "path": "home-assistant/custom_components/hacs/hacs_frontend/version.py",
    "content": "VERSION=\"20220709114425\""
  },
  {
    "path": "home-assistant/custom_components/hacs/iconset.js",
    "content": "const hacsIcons = {\n  hacs: {\n    path: \"m 20.064849,22.306912 c -0.0319,0.369835 -0.280561,0.707789 -0.656773,0.918212 -0.280572,0.153036 -0.605773,0.229553 -0.950094,0.229553 -0.0765,0 -0.146661,-0.0064 -0.216801,-0.01275 -0.605774,-0.05739 -1.135016,-0.344329 -1.402827,-0.7588 l 0.784304,-0.516495 c 0.0893,0.146659 0.344331,0.312448 0.707793,0.34433 0.235931,0.02551 0.471852,-0.01913 0.637643,-0.108401 0.101998,-0.05101 0.172171,-0.127529 0.17854,-0.191295 0.0065,-0.08289 -0.0255,-0.369835 -0.733293,-0.439975 -1.013854,-0.09565 -1.645127,-0.688661 -1.568606,-1.460214 0.0319,-0.382589 0.280561,-0.714165 0.663153,-0.930965 0.331571,-0.172165 0.752423,-0.25506 1.166895,-0.210424 0.599382,0.05739 1.128635,0.344329 1.402816,0.7588 l -0.784304,0.510118 c -0.0893,-0.140282 -0.344331,-0.299694 -0.707782,-0.331576 -0.235932,-0.02551 -0.471863,0.01913 -0.637654,0.10202 -0.0956,0.05739 -0.165791,0.133906 -0.17216,0.191295 -0.0255,0.293317 0.465482,0.420847 0.726913,0.439976 v 0.0064 c 1.020234,0.09565 1.638757,0.66953 1.562237,1.460213 z m -7.466854,-0.988354 c 0,-1.192401 0.962855,-2.155249 2.15525,-2.155249 0.599393,0 1.179645,0.25506 1.594117,0.707789 l -0.695033,0.624895 c -0.235931,-0.25506 -0.561133,-0.401718 -0.899084,-0.401718 -0.675903,0 -1.217906,0.542 -1.217906,1.217906 0,0.66953 0.542003,1.217908 1.217906,1.217908 0.337951,0 0.663153,-0.140283 0.899084,-0.401718 l 0.695033,0.631271 c -0.414472,0.452729 -0.988355,0.707788 -1.594117,0.707788 -1.192395,0 -2.15525,-0.969224 -2.15525,-2.148872 z M 8.6573365,23.461054 10.353474,19.14418 h 0.624893 l 1.568618,4.316874 H 11.52037 L 11.265308,22.734136 H 9.964513 l -0.274192,0.726918 z m 1.6833885,-1.68339 h 0.580263 L 10.646796,21.012487 Z M 8.1089536,19.156932 v 4.297745 H 7.1461095 v -1.645131 h -1.606867 v 1.645131 H 4.5763876 v -4.297745 h 0.9628549 v 1.696143 h 1.606867 V 19.156932 Z M 20.115859,4.2997436 C 20.090359,4.159461 19.969198,4.0574375 19.822548,4.0574375 H 14.141102 10.506516 4.8250686 c -0.14665,0 -0.2678112,0.1020202 -0.2933108,0.2423061 L 3.690064,8.8461703 c -0.00651,0.01913 -0.00651,0.03826 -0.00651,0.057391 v 1.5239797 c 0,0.165789 0.133911,0.299694 0.2996911,0.299694 H 4.5762579 20.0711 20.664112 c 0.165781,0 0.299691,-0.133905 0.299691,-0.299694 V 8.8971848 c 0,-0.01913 0,-0.03826 -0.0065,-0.05739 z M 4.5763876,17.358767 c 0,0.184917 0.1466608,0.331577 0.3315819,0.331577 h 5.5985465 3.634586 0.924594 c 0.184911,0 0.331571,-0.14666 0.331571,-0.331577 v -4.744098 c 0,-0.184918 0.146661,-0.331577 0.331582,-0.331577 h 2.894913 c 0.184921,0 0.331582,0.146659 0.331582,0.331577 v 4.744098 c 0,0.184917 0.146661,0.331577 0.331571,0.331577 h 0.446363 c 0.18491,0 0.331571,-0.14666 0.331571,-0.331577 v -5.636804 c 0,-0.184918 -0.146661,-0.331577 -0.331571,-0.331577 H 4.9079695 c -0.1849211,0 -0.3315819,0.146659 -0.3315819,0.331577 z m 1.6578879,-4.852498 h 5.6495565 c 0.15303,0 0.280561,0.12753 0.280561,0.280564 v 3.513438 c 0,0.153036 -0.127531,0.280566 -0.280561,0.280566 H 6.2342755 c -0.1530412,0 -0.2805719,-0.12753 -0.2805719,-0.280566 v -3.513438 c 0,-0.159411 0.1275307,-0.280564 0.2805719,-0.280564 z M 19.790657,3.3879075 H 4.8569594 c -0.1530412,0 -0.2805718,-0.1275296 -0.2805718,-0.2805642 V 1.3665653 C 4.5763876,1.2135296 4.7039182,1.086 4.8569594,1.086 H 19.790657 c 0.153041,0 0.280572,0.1275296 0.280572,0.2805653 v 1.740778 c 0,0.1530346 -0.127531,0.2805642 -0.280572,0.2805642 z\",\n    keywords: [\"hacs\", \"home assistant community store\"],\n  },\n};\n\nwindow.customIcons = window.customIcons || {};\nwindow.customIconsets = window.customIconsets || {};\n\nwindow.customIcons[\"hacs\"] = {\n  getIcon: async (iconName) => (\n    { path: hacsIcons[iconName]?.path }\n  ),\n  getIconList: async () =>\n    Object.entries(hacsIcons).map(([icon, content]) => ({\n      name: icon,\n      keywords: content.keywords,\n    })\n    )\n};\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/manifest.json",
    "content": "{\n    \"codeowners\": [\n        \"@ludeeus\"\n    ],\n    \"config_flow\": true,\n    \"dependencies\": [\n        \"http\",\n        \"websocket_api\",\n        \"frontend\",\n        \"persistent_notification\",\n        \"lovelace\"\n    ],\n    \"documentation\": \"https://hacs.xyz/docs/configuration/start\",\n    \"domain\": \"hacs\",\n    \"iot_class\": \"cloud_polling\",\n    \"issue_tracker\": \"https://github.com/hacs/integration/issues\",\n    \"name\": \"HACS\",\n    \"requirements\": [\n        \"aiogithubapi>=22.2.4\"\n    ],\n    \"version\": \"1.26.0\"\n}"
  },
  {
    "path": "home-assistant/custom_components/hacs/repositories/__init__.py",
    "content": "\"\"\"Initialize repositories.\"\"\"\nfrom __future__ import annotations\n\nfrom ..enums import HacsCategory\nfrom .appdaemon import HacsAppdaemonRepository\nfrom .base import HacsRepository\nfrom .integration import HacsIntegrationRepository\nfrom .netdaemon import HacsNetdaemonRepository\nfrom .plugin import HacsPluginRepository\nfrom .python_script import HacsPythonScriptRepository\nfrom .theme import HacsThemeRepository\n\nRERPOSITORY_CLASSES: dict[HacsCategory, HacsRepository] = {\n    HacsCategory.THEME: HacsThemeRepository,\n    HacsCategory.INTEGRATION: HacsIntegrationRepository,\n    HacsCategory.PYTHON_SCRIPT: HacsPythonScriptRepository,\n    HacsCategory.APPDAEMON: HacsAppdaemonRepository,\n    HacsCategory.NETDAEMON: HacsNetdaemonRepository,\n    HacsCategory.PLUGIN: HacsPluginRepository,\n}\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/repositories/appdaemon.py",
    "content": "\"\"\"Class for appdaemon apps in HACS.\"\"\"\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nfrom aiogithubapi import AIOGitHubAPIException\n\nfrom ..enums import HacsCategory, HacsDispatchEvent\nfrom ..exceptions import HacsException\nfrom ..utils.decorator import concurrent\nfrom .base import HacsRepository\n\nif TYPE_CHECKING:\n    from ..base import HacsBase\n\n\nclass HacsAppdaemonRepository(HacsRepository):\n    \"\"\"Appdaemon apps in HACS.\"\"\"\n\n    def __init__(self, hacs: HacsBase, full_name: str):\n        \"\"\"Initialize.\"\"\"\n        super().__init__(hacs=hacs)\n        self.data.full_name = full_name\n        self.data.full_name_lower = full_name.lower()\n        self.data.category = HacsCategory.APPDAEMON\n        self.content.path.local = self.localpath\n        self.content.path.remote = \"apps\"\n\n    @property\n    def localpath(self):\n        \"\"\"Return localpath.\"\"\"\n        return f\"{self.hacs.core.config_path}/appdaemon/apps/{self.data.name}\"\n\n    async def validate_repository(self):\n        \"\"\"Validate.\"\"\"\n        await self.common_validate()\n\n        # Custom step 1: Validate content.\n        try:\n            addir = await self.repository_object.get_contents(\"apps\", self.ref)\n        except AIOGitHubAPIException:\n            raise HacsException(\n                f\"{self.string} Repository structure for {self.ref.replace('tags/','')} is not compliant\"\n            ) from None\n\n        if not isinstance(addir, list):\n            self.validate.errors.append(f\"{self.string} Repository structure not compliant\")\n\n        self.content.path.remote = addir[0].path\n        self.content.objects = await self.repository_object.get_contents(\n            self.content.path.remote, self.ref\n        )\n\n        # Handle potential errors\n        if self.validate.errors:\n            for error in self.validate.errors:\n                if not self.hacs.status.startup:\n                    self.logger.error(\"%s %s\", self.string, error)\n        return self.validate.success\n\n    @concurrent(concurrenttasks=10, backoff_time=5)\n    async def update_repository(self, ignore_issues=False, force=False):\n        \"\"\"Update.\"\"\"\n        if not await self.common_update(ignore_issues, force) and not force:\n            return\n\n        # Get appdaemon objects.\n        if self.repository_manifest:\n            if self.repository_manifest.content_in_root:\n                self.content.path.remote = \"\"\n\n        if self.content.path.remote == \"apps\":\n            addir = await self.repository_object.get_contents(self.content.path.remote, self.ref)\n            self.content.path.remote = addir[0].path\n        self.content.objects = await self.repository_object.get_contents(\n            self.content.path.remote, self.ref\n        )\n\n        # Set local path\n        self.content.path.local = self.localpath\n\n        # Signal entities to refresh\n        if self.data.installed:\n            self.hacs.async_dispatch(\n                HacsDispatchEvent.REPOSITORY,\n                {\n                    \"id\": 1337,\n                    \"action\": \"update\",\n                    \"repository\": self.data.full_name,\n                    \"repository_id\": self.data.id,\n                },\n            )\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/repositories/base.py",
    "content": "\"\"\"Repository.\"\"\"\nfrom __future__ import annotations\n\nfrom asyncio import sleep\nfrom datetime import datetime\nimport os\nimport pathlib\nimport shutil\nimport tempfile\nfrom typing import TYPE_CHECKING, Any\nimport zipfile\n\nfrom aiogithubapi import (\n    AIOGitHubAPIException,\n    AIOGitHubAPINotModifiedException,\n    GitHubReleaseModel,\n)\nfrom aiogithubapi.const import BASE_API_URL\nfrom aiogithubapi.objects.repository import AIOGitHubAPIRepository\nimport attr\nfrom homeassistant.helpers import device_registry as dr\n\nfrom ..const import DOMAIN\nfrom ..enums import ConfigurationType, HacsDispatchEvent, RepositoryFile\nfrom ..exceptions import (\n    HacsException,\n    HacsNotModifiedException,\n    HacsRepositoryArchivedException,\n    HacsRepositoryExistException,\n)\nfrom ..utils.backup import Backup, BackupNetDaemon\nfrom ..utils.decode import decode_content\nfrom ..utils.decorator import concurrent\nfrom ..utils.filters import filter_content_return_one_of_type\nfrom ..utils.json import json_loads\nfrom ..utils.logger import LOGGER\nfrom ..utils.path import is_safe\nfrom ..utils.queue_manager import QueueManager\nfrom ..utils.store import async_remove_store\nfrom ..utils.template import render_template\nfrom ..utils.validate import Validate\nfrom ..utils.version import (\n    version_left_higher_or_equal_then_right,\n    version_left_higher_then_right,\n)\nfrom ..utils.workarounds import DOMAIN_OVERRIDES\n\nif TYPE_CHECKING:\n    from ..base import HacsBase\n\n\nTOPIC_FILTER = (\n    \"custom-card\",\n    \"custom-component\",\n    \"custom-components\",\n    \"customcomponents\",\n    \"hacktoberfest\",\n    \"hacs-default\",\n    \"hacs-integration\",\n    \"hacs\",\n    \"hass\",\n    \"hassio\",\n    \"home-assistant\",\n    \"home-automation\",\n    \"homeassistant-components\",\n    \"homeassistant-integration\",\n    \"homeassistant-sensor\",\n    \"homeassistant\",\n    \"homeautomation\",\n    \"integration\",\n    \"lovelace\",\n    \"python\",\n    \"sensor\",\n    \"theme\",\n    \"themes\",\n    \"custom-cards\",\n    \"home-assistant-frontend\",\n    \"home-assistant-hacs\",\n    \"home-assistant-custom\",\n    \"lovelace-ui\",\n)\n\n\nclass FileInformation:\n    \"\"\"FileInformation.\"\"\"\n\n    def __init__(self, url, path, name):\n        self.download_url = url\n        self.path = path\n        self.name = name\n\n\n@attr.s(auto_attribs=True)\nclass RepositoryData:\n    \"\"\"RepositoryData class.\"\"\"\n\n    archived: bool = False\n    authors: list[str] = []\n    category: str = \"\"\n    config_flow: bool = False\n    default_branch: str = None\n    description: str = \"\"\n    domain: str = None\n    downloads: int = 0\n    etag_repository: str = None\n    file_name: str = \"\"\n    first_install: bool = False\n    full_name: str = \"\"\n    hide: bool = False\n    has_issues: bool = True\n    id: int = 0\n    installed_commit: str = None\n    installed_version: str = None\n    installed: bool = False\n    last_commit: str = None\n    last_fetched: datetime = None\n    last_updated: str = 0\n    last_version: str = None\n    manifest_name: str = None\n    new: bool = True\n    open_issues: int = 0\n    published_tags: list[str] = []\n    pushed_at: str = \"\"\n    releases: bool = False\n    selected_tag: str = None\n    show_beta: bool = False\n    stargazers_count: int = 0\n    topics: list[str] = []\n\n    @property\n    def name(self):\n        \"\"\"Return the name.\"\"\"\n        if self.category in [\"integration\", \"netdaemon\"]:\n            return self.domain\n        return self.full_name.split(\"/\")[-1]\n\n    def to_json(self):\n        \"\"\"Export to json.\"\"\"\n        return attr.asdict(self, filter=lambda attr, value: attr.name != \"last_fetched\")\n\n    @staticmethod\n    def create_from_dict(source: dict, action: bool = False) -> RepositoryData:\n        \"\"\"Set attributes from dicts.\"\"\"\n        data = RepositoryData()\n        data.update_data(source, action)\n        return data\n\n    def update_data(self, data: dict, action: bool = False) -> None:\n        \"\"\"Update data of the repository.\"\"\"\n        for key in data:\n            if key not in self.__dict__:\n                continue\n            if key == \"pushed_at\":\n                if data[key] == \"\":\n                    continue\n                if \"Z\" in data[key]:\n                    setattr(\n                        self,\n                        key,\n                        datetime.strptime(data[key], \"%Y-%m-%dT%H:%M:%SZ\"),\n                    )\n                else:\n                    setattr(self, key, datetime.strptime(data[key], \"%Y-%m-%dT%H:%M:%S\"))\n            elif key == \"id\":\n                setattr(self, key, str(data[key]))\n            elif key == \"country\":\n                if isinstance(data[key], str):\n                    setattr(self, key, [data[key]])\n                else:\n                    setattr(self, key, data[key])\n            elif key == \"topics\" and not action:\n                setattr(self, key, [topic for topic in data[key] if topic not in TOPIC_FILTER])\n\n            else:\n                setattr(self, key, data[key])\n\n\n@attr.s(auto_attribs=True)\nclass HacsManifest:\n    \"\"\"HacsManifest class.\"\"\"\n\n    content_in_root: bool = False\n    country: list[str] = []\n    filename: str = None\n    hacs: str = None  # Minimum HACS version\n    hide_default_branch: bool = False\n    homeassistant: str = None  # Minimum Home Assistant version\n    manifest: dict = {}\n    name: str = None\n    persistent_directory: str = None\n    render_readme: bool = False\n    zip_release: bool = False\n\n    def to_dict(self):\n        \"\"\"Export to json.\"\"\"\n        return attr.asdict(self)\n\n    @staticmethod\n    def from_dict(manifest: dict):\n        \"\"\"Set attributes from dicts.\"\"\"\n        if manifest is None:\n            raise HacsException(\"Missing manifest data\")\n\n        manifest_data = HacsManifest()\n        manifest_data.manifest = {\n            k: v\n            for k, v in manifest.items()\n            if k in manifest_data.__dict__ and v != manifest_data.__getattribute__(k)\n        }\n\n        for key, value in manifest_data.manifest.items():\n            if key == \"country\" and isinstance(value, str):\n                setattr(manifest_data, key, [value])\n            elif key in manifest_data.__dict__:\n                setattr(manifest_data, key, value)\n        return manifest_data\n\n\nclass RepositoryReleases:\n    \"\"\"RepositoyReleases.\"\"\"\n\n    last_release = None\n    last_release_object = None\n    published_tags = []\n    objects: list[GitHubReleaseModel] = []\n    releases = False\n    downloads = None\n\n\nclass RepositoryPath:\n    \"\"\"RepositoryPath.\"\"\"\n\n    local: str | None = None\n    remote: str | None = None\n\n\nclass RepositoryContent:\n    \"\"\"RepositoryContent.\"\"\"\n\n    path: RepositoryPath | None = None\n    files = []\n    objects = []\n    single = False\n\n\nclass HacsRepository:\n    \"\"\"HacsRepository.\"\"\"\n\n    def __init__(self, hacs: HacsBase) -> None:\n        \"\"\"Set up HacsRepository.\"\"\"\n        self.hacs = hacs\n        self.additional_info = \"\"\n        self.data = RepositoryData()\n        self.content = RepositoryContent()\n        self.content.path = RepositoryPath()\n        self.repository_object: AIOGitHubAPIRepository | None = None\n        self.updated_info = False\n        self.state = None\n        self.force_branch = False\n        self.integration_manifest = {}\n        self.repository_manifest = HacsManifest.from_dict({})\n        self.validate = Validate()\n        self.releases = RepositoryReleases()\n        self.pending_restart = False\n        self.tree = []\n        self.treefiles = []\n        self.ref = None\n        self.logger = LOGGER\n\n    def __str__(self) -> str:\n        \"\"\"Return a string representation of the repository.\"\"\"\n        return self.string\n\n    @property\n    def string(self) -> str:\n        \"\"\"Return a string representation of the repository.\"\"\"\n        return f\"<{self.data.category.title()} {self.data.full_name}>\"\n\n    @property\n    def display_name(self) -> str:\n        \"\"\"Return display name.\"\"\"\n        if self.repository_manifest.name is not None:\n            return self.repository_manifest.name\n\n        if self.data.category == \"integration\":\n            if self.data.manifest_name is not None:\n                return self.data.manifest_name\n            if \"name\" in self.integration_manifest:\n                return self.integration_manifest[\"name\"]\n\n        return self.data.full_name.split(\"/\")[-1].replace(\"-\", \" \").replace(\"_\", \" \").title()\n\n    @property\n    def ignored_by_country_configuration(self) -> bool:\n        \"\"\"Return True if hidden by country.\"\"\"\n        if self.data.installed:\n            return False\n        configuration = self.hacs.configuration.country.lower()\n        if configuration == \"all\":\n            return False\n\n        manifest = [entry.lower() for entry in self.repository_manifest.country or []]\n        if not manifest:\n            return False\n        return configuration not in manifest\n\n    @property\n    def display_status(self) -> str:\n        \"\"\"Return display_status.\"\"\"\n        if self.data.new:\n            status = \"new\"\n        elif self.pending_restart:\n            status = \"pending-restart\"\n        elif self.pending_update:\n            status = \"pending-upgrade\"\n        elif self.data.installed:\n            status = \"installed\"\n        else:\n            status = \"default\"\n        return status\n\n    @property\n    def display_installed_version(self) -> str:\n        \"\"\"Return display_authors\"\"\"\n        if self.data.installed_version is not None:\n            installed = self.data.installed_version\n        else:\n            if self.data.installed_commit is not None:\n                installed = self.data.installed_commit\n            else:\n                installed = \"\"\n        return str(installed)\n\n    @property\n    def display_available_version(self) -> str:\n        \"\"\"Return display_authors\"\"\"\n        if self.data.last_version is not None:\n            available = self.data.last_version\n        else:\n            if self.data.last_commit is not None:\n                available = self.data.last_commit\n            else:\n                available = \"\"\n        return str(available)\n\n    @property\n    def display_version_or_commit(self) -> str:\n        \"\"\"Does the repositoriy use releases or commits?\"\"\"\n        if self.data.releases:\n            version_or_commit = \"version\"\n        else:\n            version_or_commit = \"commit\"\n        return version_or_commit\n\n    @property\n    def pending_update(self) -> bool:\n        \"\"\"Return True if pending update.\"\"\"\n        if not self.can_download:\n            return False\n        if self.data.installed:\n            if self.data.selected_tag is not None:\n                if self.data.selected_tag == self.data.default_branch:\n                    if self.data.installed_commit != self.data.last_commit:\n                        return True\n                    return False\n            if self.display_version_or_commit == \"version\":\n                if (\n                    result := version_left_higher_then_right(\n                        self.display_available_version,\n                        self.display_installed_version,\n                    )\n                ) is not None:\n                    return result\n            if self.display_installed_version != self.display_available_version:\n                return True\n\n        return False\n\n    @property\n    def can_download(self) -> bool:\n        \"\"\"Return True if we can download.\"\"\"\n        if self.repository_manifest.homeassistant is not None:\n            if self.data.releases:\n                if not version_left_higher_or_equal_then_right(\n                    self.hacs.core.ha_version.string,\n                    self.repository_manifest.homeassistant,\n                ):\n                    return False\n        return True\n\n    @property\n    def localpath(self) -> str | None:\n        \"\"\"Return localpath.\"\"\"\n        return None\n\n    @property\n    def should_try_releases(self) -> bool:\n        \"\"\"Return a boolean indicating whether to download releases or not.\"\"\"\n        if self.repository_manifest.zip_release:\n            if self.repository_manifest.filename.endswith(\".zip\"):\n                if self.ref != self.data.default_branch:\n                    return True\n        if self.ref == self.data.default_branch:\n            return False\n        if self.data.category not in [\"plugin\", \"theme\"]:\n            return False\n        if not self.data.releases:\n            return False\n        return True\n\n    async def validate_repository(self) -> None:\n        \"\"\"Validate.\"\"\"\n\n    @concurrent(concurrenttasks=10, backoff_time=5)\n    async def update_repository(self, ignore_issues=False, force=False) -> None:\n        \"\"\"Update the repository\"\"\"\n\n    async def common_validate(self, ignore_issues: bool = False) -> None:\n        \"\"\"Common validation steps of the repository.\"\"\"\n        self.validate.errors.clear()\n\n        # Make sure the repository exist.\n        self.logger.debug(\"%s Checking repository.\", self.string)\n        await self.common_update_data(ignore_issues=ignore_issues)\n\n        # Get the content of hacs.json\n        if RepositoryFile.HACS_JSON in [x.filename for x in self.tree]:\n            if manifest := await self.async_get_hacs_json():\n                self.repository_manifest = HacsManifest.from_dict(manifest)\n                self.data.update_data(\n                    self.repository_manifest.to_dict(),\n                    action=self.hacs.system.action,\n                )\n\n    async def common_registration(self) -> None:\n        \"\"\"Common registration steps of the repository.\"\"\"\n        # Attach repository\n        if self.repository_object is None:\n            try:\n                self.repository_object, etag = await self.async_get_legacy_repository_object(\n                    etag=None if self.data.installed else self.data.etag_repository,\n                )\n                self.data.update_data(\n                    self.repository_object.attributes,\n                    action=self.hacs.system.action,\n                )\n                self.data.etag_repository = etag\n            except HacsNotModifiedException:\n                self.logger.debug(\"%s Did not update, content was not modified\", self.string)\n                return\n\n        # Set topics\n        self.data.topics = self.data.topics\n\n        # Set description\n        self.data.description = self.data.description\n\n    @concurrent(concurrenttasks=10, backoff_time=5)\n    async def common_update(self, ignore_issues=False, force=False) -> bool:\n        \"\"\"Common information update steps of the repository.\"\"\"\n        self.logger.debug(\"%s Getting repository information\", self.string)\n\n        # Attach repository\n        current_etag = self.data.etag_repository\n        try:\n            await self.common_update_data(ignore_issues=ignore_issues, force=force)\n        except HacsRepositoryExistException:\n            self.data.full_name = self.hacs.common.renamed_repositories[self.data.full_name]\n            await self.common_update_data(ignore_issues=ignore_issues, force=force)\n\n        except HacsException:\n            if not ignore_issues and not force:\n                return False\n\n        if not self.data.installed and (current_etag == self.data.etag_repository) and not force:\n            self.logger.debug(\"%s Did not update, content was not modified\", self.string)\n            return False\n\n        # Update last updated\n        if self.repository_object:\n            self.data.last_updated = self.repository_object.attributes.get(\"pushed_at\", 0)\n\n            # Update last available commit\n            await self.repository_object.set_last_commit()\n            self.data.last_commit = self.repository_object.last_commit\n\n        # Get the content of hacs.json\n        if RepositoryFile.HACS_JSON in [x.filename for x in self.tree]:\n            if manifest := await self.async_get_hacs_json():\n                self.repository_manifest = HacsManifest.from_dict(manifest)\n                self.data.update_data(\n                    self.repository_manifest.to_dict(),\n                    action=self.hacs.system.action,\n                )\n\n        # Update \"info.md\"\n        self.additional_info = await self.async_get_info_file_contents()\n\n        # Set last fetch attribute\n        self.data.last_fetched = datetime.now()\n\n        return True\n\n    async def download_zip_files(self, validate) -> None:\n        \"\"\"Download ZIP archive from repository release.\"\"\"\n        try:\n            contents = None\n            target_ref = self.ref.split(\"/\")[1]\n\n            for release in self.releases.objects:\n                self.logger.debug(\n                    \"%s ref: %s --- tag: %s\", self.string, target_ref, release.tag_name\n                )\n                if release.tag_name == target_ref:\n                    contents = release.assets\n                    break\n\n            if not contents:\n                validate.errors.append(f\"No assets found for release '{self.ref}'\")\n                return\n\n            download_queue = QueueManager(hass=self.hacs.hass)\n\n            for content in contents or []:\n                download_queue.add(self.async_download_zip_file(content, validate))\n\n            await download_queue.execute()\n        except BaseException:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n            validate.errors.append(\"Download was not completed\")\n\n    async def async_download_zip_file(self, content, validate) -> None:\n        \"\"\"Download ZIP archive from repository release.\"\"\"\n        try:\n            filecontent = await self.hacs.async_download_file(content.browser_download_url)\n\n            if filecontent is None:\n                validate.errors.append(f\"[{content.name}] was not downloaded\")\n                return\n\n            temp_dir = await self.hacs.hass.async_add_executor_job(tempfile.mkdtemp)\n            temp_file = f\"{temp_dir}/{self.repository_manifest.filename}\"\n\n            result = await self.hacs.async_save_file(temp_file, filecontent)\n            with zipfile.ZipFile(temp_file, \"r\") as zip_file:\n                zip_file.extractall(self.content.path.local)\n\n            def cleanup_temp_dir():\n                \"\"\"Cleanup temp_dir.\"\"\"\n                if os.path.exists(temp_dir):\n                    self.logger.debug(\"%s Cleaning up %s\", self.string, temp_dir)\n                    shutil.rmtree(temp_dir)\n\n            if result:\n                self.logger.info(\"%s Download of %s completed\", self.string, content.name)\n                await self.hacs.hass.async_add_executor_job(cleanup_temp_dir)\n                return\n\n            validate.errors.append(f\"[{content.name}] was not downloaded\")\n        except BaseException:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n            validate.errors.append(\"Download was not completed\")\n\n    async def download_content(self) -> None:\n        \"\"\"Download the content of a directory.\"\"\"\n        if self.hacs.configuration.experimental:\n            if (\n                not self.repository_manifest.zip_release\n                and not self.data.file_name\n                and self.content.path.remote is not None\n            ):\n                self.logger.info(\"%s Trying experimental download\", self.string)\n                try:\n                    await self.download_repository_zip()\n                    return\n                except HacsException as exception:\n                    self.logger.exception(exception)\n\n        contents = self.gather_files_to_download()\n        if self.repository_manifest.filename:\n            self.logger.debug(\"%s %s\", self.string, self.repository_manifest.filename)\n        if not contents:\n            raise HacsException(\"No content to download\")\n\n        download_queue = QueueManager(hass=self.hacs.hass)\n\n        for content in contents:\n            if self.repository_manifest.content_in_root and self.repository_manifest.filename:\n                if content.name != self.repository_manifest.filename:\n                    continue\n            download_queue.add(self.dowload_repository_content(content))\n\n        await download_queue.execute()\n\n    async def download_repository_zip(self):\n        \"\"\"Download the zip archive of the repository.\"\"\"\n        ref = f\"{self.ref}\".replace(\"tags/\", \"\")\n\n        if not ref:\n            raise HacsException(\"Missing required elements.\")\n\n        url = f\"{BASE_API_URL}/repos/{self.data.full_name}/zipball/{ref}\"\n\n        filecontent = await self.hacs.async_download_file(\n            url,\n            headers={\n                \"Authorization\": f\"token {self.hacs.configuration.token}\",\n                \"User-Agent\": f\"HACS/{self.hacs.version}\",\n            },\n        )\n        if filecontent is None:\n            raise HacsException(f\"[{self}] Failed to download zipball\")\n\n        temp_dir = await self.hacs.hass.async_add_executor_job(tempfile.mkdtemp)\n        temp_file = f\"{temp_dir}/{self.repository_manifest.filename}\"\n        result = await self.hacs.async_save_file(temp_file, filecontent)\n        if not result:\n            raise HacsException(\"Could not save ZIP file\")\n\n        with zipfile.ZipFile(temp_file, \"r\") as zip_file:\n            extractable = []\n            for path in zip_file.filelist:\n                filename = \"/\".join(path.filename.split(\"/\")[1:])\n                if filename.startswith(self.content.path.remote):\n                    path.filename = filename.replace(self.content.path.remote, \"\")\n                    extractable.append(path)\n\n            zip_file.extractall(self.content.path.local, extractable)\n\n        def cleanup_temp_dir():\n            \"\"\"Cleanup temp_dir.\"\"\"\n            if os.path.exists(temp_dir):\n                self.logger.debug(\"%s Cleaning up %s\", self.string, temp_dir)\n                shutil.rmtree(temp_dir)\n\n        await self.hacs.hass.async_add_executor_job(cleanup_temp_dir)\n        self.logger.info(\"%s Content was extracted to %s\", self.string, self.content.path.local)\n\n    async def async_get_hacs_json(self, ref: str = None) -> dict[str, Any] | None:\n        \"\"\"Get the content of the hacs.json file.\"\"\"\n        try:\n            response = await self.hacs.async_github_api_method(\n                method=self.hacs.githubapi.repos.contents.get,\n                raise_exception=False,\n                repository=self.data.full_name,\n                path=RepositoryFile.HACS_JSON,\n                **{\"params\": {\"ref\": ref or self.version_to_download()}},\n            )\n            if response:\n                return json_loads(decode_content(response.data.content))\n        except BaseException:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n            pass\n\n    async def async_get_info_file_contents(self) -> str:\n        \"\"\"Get the content of the info.md file.\"\"\"\n\n        def _info_file_variants() -> tuple[str, ...]:\n            name: str = (\n                \"readme\"\n                if self.repository_manifest.render_readme or self.hacs.configuration.experimental\n                else \"info\"\n            )\n            return (\n                f\"{name.upper()}.md\",\n                f\"{name}.md\",\n                f\"{name}.MD\",\n                f\"{name.upper()}.MD\",\n                name.upper(),\n                name,\n            )\n\n        info_files = [filename for filename in _info_file_variants() if filename in self.treefiles]\n\n        if not info_files:\n            return \"\"\n\n        try:\n            response = await self.hacs.async_github_api_method(\n                method=self.hacs.githubapi.repos.contents.get,\n                raise_exception=False,\n                repository=self.data.full_name,\n                path=info_files[0],\n            )\n            if response:\n                return render_template(\n                    self.hacs,\n                    decode_content(response.data.content)\n                    .replace(\"<svg\", \"<disabled\")\n                    .replace(\"</svg\", \"</disabled\"),\n                    self,\n                )\n        except BaseException as exc:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n            self.logger.error(\"%s %s\", self.string, exc)\n\n        return \"\"\n\n    def remove(self) -> None:\n        \"\"\"Run remove tasks.\"\"\"\n        self.logger.info(\"%s Starting removal\", self.string)\n\n        if self.hacs.repositories.is_registered(repository_id=str(self.data.id)):\n            self.hacs.repositories.unregister(self)\n\n    async def uninstall(self) -> None:\n        \"\"\"Run uninstall tasks.\"\"\"\n        self.logger.info(\"%s Removing\", self.string)\n        if not await self.remove_local_directory():\n            raise HacsException(\"Could not uninstall\")\n        self.data.installed = False\n        if self.data.category == \"integration\":\n            if self.data.config_flow:\n                await self.reload_custom_components()\n            else:\n                self.pending_restart = True\n        elif self.data.category == \"theme\":\n            try:\n                await self.hacs.hass.services.async_call(\"frontend\", \"reload_themes\", {})\n            except BaseException:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n                pass\n\n        await async_remove_store(self.hacs.hass, f\"hacs/{self.data.id}.hacs\")\n\n        self.data.installed_version = None\n        self.data.installed_commit = None\n        self.hacs.async_dispatch(\n            HacsDispatchEvent.REPOSITORY,\n            {\n                \"id\": 1337,\n                \"action\": \"uninstall\",\n                \"repository\": self.data.full_name,\n                \"repository_id\": self.data.id,\n            },\n        )\n\n        await self.async_remove_entity_device()\n\n    async def remove_local_directory(self) -> None:\n        \"\"\"Check the local directory.\"\"\"\n\n        try:\n            if self.data.category == \"python_script\":\n                local_path = f\"{self.content.path.local}/{self.data.name}.py\"\n            elif self.data.category == \"theme\":\n                path = (\n                    f\"{self.hacs.core.config_path}/\"\n                    f\"{self.hacs.configuration.theme_path}/\"\n                    f\"{self.data.name}.yaml\"\n                )\n                if os.path.exists(path):\n                    os.remove(path)\n                local_path = self.content.path.local\n            elif self.data.category == \"integration\":\n                if not self.data.domain:\n                    if domain := DOMAIN_OVERRIDES.get(self.data.full_name):\n                        self.data.domain = domain\n                        self.content.path.local = self.localpath\n                    else:\n                        self.logger.error(\"%s Missing domain\", self.string)\n                        return False\n                local_path = self.content.path.local\n            else:\n                local_path = self.content.path.local\n\n            if os.path.exists(local_path):\n                if not is_safe(self.hacs, local_path):\n                    self.logger.error(\"%s Path %s is blocked from removal\", self.string, local_path)\n                    return False\n                self.logger.debug(\"%s Removing %s\", self.string, local_path)\n\n                if self.data.category in [\"python_script\"]:\n                    os.remove(local_path)\n                else:\n                    shutil.rmtree(local_path)\n\n                while os.path.exists(local_path):\n                    await sleep(1)\n            else:\n                self.logger.debug(\n                    \"%s Presumed local content path %s does not exist\", self.string, local_path\n                )\n\n        except BaseException as exception:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n            self.logger.debug(\"%s Removing %s failed with %s\", self.string, local_path, exception)\n            return False\n        return True\n\n    async def async_pre_registration(self) -> None:\n        \"\"\"Run pre registration steps.\"\"\"\n\n    @concurrent(concurrenttasks=10)\n    async def async_registration(self, ref=None) -> None:\n        \"\"\"Run registration steps.\"\"\"\n        await self.async_pre_registration()\n\n        if ref is not None:\n            self.data.selected_tag = ref\n            self.ref = ref\n            self.force_branch = True\n\n        if not await self.validate_repository():\n            return False\n\n        # Run common registration steps.\n        await self.common_registration()\n\n        # Set correct local path\n        self.content.path.local = self.localpath\n\n        # Run local post registration steps.\n        await self.async_post_registration()\n\n    async def async_post_registration(self) -> None:\n        \"\"\"Run post registration steps.\"\"\"\n        if not self.hacs.system.action:\n            return\n        await self.hacs.validation.async_run_repository_checks(self)\n\n    async def async_pre_install(self) -> None:\n        \"\"\"Run pre install steps.\"\"\"\n\n    async def _async_pre_install(self) -> None:\n        \"\"\"Run pre install steps.\"\"\"\n        self.logger.info(\"%s Running pre installation steps\", self.string)\n        await self.async_pre_install()\n        self.logger.info(\"%s Pre installation steps completed\", self.string)\n\n    async def async_install(self) -> None:\n        \"\"\"Run install steps.\"\"\"\n        await self._async_pre_install()\n        self.hacs.async_dispatch(\n            HacsDispatchEvent.REPOSITORY_DOWNLOAD_PROGRESS,\n            {\"repository\": self.data.full_name, \"progress\": 30},\n        )\n        self.logger.info(\"%s Running installation steps\", self.string)\n        await self.async_install_repository()\n        self.hacs.async_dispatch(\n            HacsDispatchEvent.REPOSITORY_DOWNLOAD_PROGRESS,\n            {\"repository\": self.data.full_name, \"progress\": 90},\n        )\n        self.logger.info(\"%s Installation steps completed\", self.string)\n        await self._async_post_install()\n        self.hacs.async_dispatch(\n            HacsDispatchEvent.REPOSITORY_DOWNLOAD_PROGRESS,\n            {\"repository\": self.data.full_name, \"progress\": False},\n        )\n\n    async def async_post_installation(self) -> None:\n        \"\"\"Run post install steps.\"\"\"\n\n    async def _async_post_install(self) -> None:\n        \"\"\"Run post install steps.\"\"\"\n        self.logger.info(\"%s Running post installation steps\", self.string)\n        await self.async_post_installation()\n        self.data.new = False\n        self.hacs.async_dispatch(\n            HacsDispatchEvent.REPOSITORY,\n            {\n                \"id\": 1337,\n                \"action\": \"install\",\n                \"repository\": self.data.full_name,\n                \"repository_id\": self.data.id,\n            },\n        )\n        self.logger.info(\"%s Post installation steps completed\", self.string)\n\n    async def async_install_repository(self) -> None:\n        \"\"\"Common installation steps of the repository.\"\"\"\n        persistent_directory = None\n        await self.update_repository(force=True)\n        if self.content.path.local is None:\n            raise HacsException(\"repository.content.path.local is None\")\n        self.validate.errors.clear()\n\n        if not self.can_download:\n            raise HacsException(\"The version of Home Assistant is not compatible with this version\")\n\n        version = self.version_to_download()\n        if version == self.data.default_branch:\n            self.ref = version\n        else:\n            self.ref = f\"tags/{version}\"\n\n        self.hacs.async_dispatch(\n            HacsDispatchEvent.REPOSITORY_DOWNLOAD_PROGRESS,\n            {\"repository\": self.data.full_name, \"progress\": 40},\n        )\n\n        if self.data.installed and self.data.category == \"netdaemon\":\n            persistent_directory = BackupNetDaemon(hacs=self.hacs, repository=self)\n            await self.hacs.hass.async_add_executor_job(persistent_directory.create)\n\n        elif self.repository_manifest.persistent_directory:\n            if os.path.exists(\n                f\"{self.content.path.local}/{self.repository_manifest.persistent_directory}\"\n            ):\n                persistent_directory = Backup(\n                    hacs=self.hacs,\n                    local_path=f\"{self.content.path.local}/{self.repository_manifest.persistent_directory}\",\n                    backup_path=tempfile.gettempdir() + \"/hacs_persistent_directory/\",\n                )\n                await self.hacs.hass.async_add_executor_job(persistent_directory.create)\n\n        if self.data.installed and not self.content.single:\n            backup = Backup(hacs=self.hacs, local_path=self.content.path.local)\n            await self.hacs.hass.async_add_executor_job(backup.create)\n\n        self.hacs.log.debug(\"%s Local path is set to %s\", self.string, self.content.path.local)\n        self.hacs.log.debug(\"%s Remote path is set to %s\", self.string, self.content.path.remote)\n\n        self.hacs.async_dispatch(\n            HacsDispatchEvent.REPOSITORY_DOWNLOAD_PROGRESS,\n            {\"repository\": self.data.full_name, \"progress\": 50},\n        )\n\n        if self.repository_manifest.zip_release and version != self.data.default_branch:\n            await self.download_zip_files(self.validate)\n        else:\n            await self.download_content()\n\n        self.hacs.async_dispatch(\n            HacsDispatchEvent.REPOSITORY_DOWNLOAD_PROGRESS,\n            {\"repository\": self.data.full_name, \"progress\": 70},\n        )\n\n        if self.validate.errors:\n            for error in self.validate.errors:\n                self.logger.error(\"%s %s\", self.string, error)\n            if self.data.installed and not self.content.single:\n                await self.hacs.hass.async_add_executor_job(backup.restore)\n                await self.hacs.hass.async_add_executor_job(backup.cleanup)\n            raise HacsException(\"Could not download, see log for details\")\n\n        self.hacs.async_dispatch(\n            HacsDispatchEvent.REPOSITORY_DOWNLOAD_PROGRESS,\n            {\"repository\": self.data.full_name, \"progress\": 80},\n        )\n\n        if self.data.installed and not self.content.single:\n            await self.hacs.hass.async_add_executor_job(backup.cleanup)\n\n        if persistent_directory is not None:\n            await self.hacs.hass.async_add_executor_job(persistent_directory.restore)\n            await self.hacs.hass.async_add_executor_job(persistent_directory.cleanup)\n\n        if self.validate.success:\n            self.data.installed = True\n            self.data.installed_commit = self.data.last_commit\n\n            if version == self.data.default_branch:\n                self.data.installed_version = None\n            else:\n                self.data.installed_version = version\n\n    async def async_get_legacy_repository_object(\n        self,\n        etag: str | None = None,\n    ) -> tuple[AIOGitHubAPIRepository, Any | None]:\n        \"\"\"Return a repository object.\"\"\"\n        try:\n            repository = await self.hacs.github.get_repo(self.data.full_name, etag)\n            return repository, self.hacs.github.client.last_response.etag\n        except AIOGitHubAPINotModifiedException as exception:\n            raise HacsNotModifiedException(exception) from exception\n        except (ValueError, AIOGitHubAPIException, Exception) as exception:\n            raise HacsException(exception) from exception\n\n    def update_filenames(self) -> None:\n        \"\"\"Get the filename to target.\"\"\"\n\n    async def get_tree(self, ref: str):\n        \"\"\"Return the repository tree.\"\"\"\n        if self.repository_object is None:\n            raise HacsException(\"No repository_object\")\n        try:\n            tree = await self.repository_object.get_tree(ref)\n            return tree\n        except (ValueError, AIOGitHubAPIException) as exception:\n            raise HacsException(exception) from exception\n\n    async def get_releases(self, prerelease=False, returnlimit=5) -> list[GitHubReleaseModel]:\n        \"\"\"Return the repository releases.\"\"\"\n        response = await self.hacs.async_github_api_method(\n            method=self.hacs.githubapi.repos.releases.list,\n            repository=self.data.full_name,\n        )\n        releases = []\n        for release in response.data or []:\n            if len(releases) == returnlimit:\n                break\n            if release.draft or (release.prerelease and not prerelease):\n                continue\n            releases.append(release)\n        return releases\n\n    async def common_update_data(self, ignore_issues: bool = False, force: bool = False) -> None:\n        \"\"\"Common update data.\"\"\"\n        releases = []\n        try:\n            repository_object, etag = await self.async_get_legacy_repository_object(\n                etag=None if force or self.data.installed else self.data.etag_repository,\n            )\n            self.repository_object = repository_object\n            if self.data.full_name.lower() != repository_object.full_name.lower():\n                self.hacs.common.renamed_repositories[\n                    self.data.full_name\n                ] = repository_object.full_name\n                raise HacsRepositoryExistException\n            self.data.update_data(\n                repository_object.attributes,\n                action=self.hacs.system.action,\n            )\n            self.data.etag_repository = etag\n        except HacsNotModifiedException:\n            return\n        except HacsRepositoryExistException:\n            raise HacsRepositoryExistException from None\n        except (AIOGitHubAPIException, HacsException) as exception:\n            if not self.hacs.status.startup:\n                self.logger.error(\"%s %s\", self.string, exception)\n            if not ignore_issues:\n                self.validate.errors.append(\"Repository does not exist.\")\n                raise HacsException(exception) from exception\n\n        # Make sure the repository is not archived.\n        if self.data.archived and not ignore_issues:\n            self.validate.errors.append(\"Repository is archived.\")\n            if self.data.full_name not in self.hacs.common.archived_repositories:\n                self.hacs.common.archived_repositories.append(self.data.full_name)\n            raise HacsRepositoryArchivedException(f\"{self} Repository is archived.\")\n\n        # Make sure the repository is not in the blacklist.\n        if self.hacs.repositories.is_removed(self.data.full_name):\n            removed = self.hacs.repositories.removed_repository(self.data.full_name)\n            if removed.removal_type != \"remove\" and not ignore_issues:\n                self.validate.errors.append(\"Repository has been requested to be removed.\")\n                raise HacsException(f\"{self} Repository has been requested to be removed.\")\n\n        # Get releases.\n        try:\n            releases = await self.get_releases(\n                prerelease=self.data.show_beta,\n                returnlimit=self.hacs.configuration.release_limit,\n            )\n            if releases:\n                self.data.releases = True\n                self.releases.objects = releases\n                self.data.published_tags = [x.tag_name for x in self.releases.objects]\n                self.data.last_version = next(iter(self.data.published_tags))\n\n        except HacsException:\n            self.data.releases = False\n\n        if not self.force_branch:\n            self.ref = self.version_to_download()\n        if self.data.releases:\n            for release in self.releases.objects or []:\n                if release.tag_name == self.ref:\n                    if assets := release.assets:\n                        downloads = next(iter(assets)).download_count\n                        self.data.downloads = downloads\n\n        self.hacs.log.debug(\n            \"%s Running checks against %s\", self.string, self.ref.replace(\"tags/\", \"\")\n        )\n\n        try:\n            self.tree = await self.get_tree(self.ref)\n            if not self.tree:\n                raise HacsException(\"No files in tree\")\n            self.treefiles = []\n            for treefile in self.tree:\n                self.treefiles.append(treefile.full_path)\n        except (AIOGitHubAPIException, HacsException) as exception:\n            if not self.hacs.status.startup and not ignore_issues:\n                self.logger.error(\"%s %s\", self.string, exception)\n            if not ignore_issues:\n                raise HacsException(exception) from None\n\n    def gather_files_to_download(self) -> list[FileInformation]:\n        \"\"\"Return a list of file objects to be downloaded.\"\"\"\n        files = []\n        tree = self.tree\n        ref = f\"{self.ref}\".replace(\"tags/\", \"\")\n        releaseobjects = self.releases.objects\n        category = self.data.category\n        remotelocation = self.content.path.remote\n\n        if self.should_try_releases:\n            for release in releaseobjects or []:\n                if ref == release.tag_name:\n                    for asset in release.assets or []:\n                        files.append(\n                            FileInformation(asset.browser_download_url, asset.name, asset.name)\n                        )\n            if files:\n                return files\n\n        if self.content.single:\n            for treefile in tree:\n                if treefile.filename == self.data.file_name:\n                    files.append(\n                        FileInformation(\n                            treefile.download_url, treefile.full_path, treefile.filename\n                        )\n                    )\n            return files\n\n        if category == \"plugin\":\n            for treefile in tree:\n                if treefile.path in [\"\", \"dist\"]:\n                    if remotelocation == \"dist\" and not treefile.filename.startswith(\"dist\"):\n                        continue\n                    if not remotelocation:\n                        if not treefile.filename.endswith(\".js\"):\n                            continue\n                        if treefile.path != \"\":\n                            continue\n                    if not treefile.is_directory:\n                        files.append(\n                            FileInformation(\n                                treefile.download_url, treefile.full_path, treefile.filename\n                            )\n                        )\n            if files:\n                return files\n\n        if self.repository_manifest.content_in_root:\n            if not self.repository_manifest.filename:\n                if category == \"theme\":\n                    tree = filter_content_return_one_of_type(self.tree, \"\", \"yaml\", \"full_path\")\n\n        for path in tree:\n            if path.is_directory:\n                continue\n            if path.full_path.startswith(self.content.path.remote):\n                files.append(FileInformation(path.download_url, path.full_path, path.filename))\n        return files\n\n    @concurrent(concurrenttasks=10)\n    async def dowload_repository_content(self, content: FileInformation) -> None:\n        \"\"\"Download content.\"\"\"\n        try:\n            self.logger.debug(\"%s Downloading %s\", self.string, content.name)\n\n            filecontent = await self.hacs.async_download_file(content.download_url)\n\n            if filecontent is None:\n                self.validate.errors.append(f\"[{content.name}] was not downloaded.\")\n                return\n\n            # Save the content of the file.\n            if self.content.single or content.path is None:\n                local_directory = self.content.path.local\n\n            else:\n                _content_path = content.path\n                if not self.repository_manifest.content_in_root:\n                    _content_path = _content_path.replace(f\"{self.content.path.remote}\", \"\")\n\n                local_directory = f\"{self.content.path.local}/{_content_path}\"\n                local_directory = local_directory.split(\"/\")\n                del local_directory[-1]\n                local_directory = \"/\".join(local_directory)\n\n            # Check local directory\n            pathlib.Path(local_directory).mkdir(parents=True, exist_ok=True)\n\n            local_file_path = (f\"{local_directory}/{content.name}\").replace(\"//\", \"/\")\n\n            result = await self.hacs.async_save_file(local_file_path, filecontent)\n            if result:\n                self.logger.info(\"%s Download of %s completed\", self.string, content.name)\n                return\n            self.validate.errors.append(f\"[{content.name}] was not downloaded.\")\n\n        except BaseException as exception:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n            self.validate.errors.append(f\"Download was not completed [{exception}]\")\n\n    async def async_remove_entity_device(self) -> None:\n        \"\"\"Remove the entity device.\"\"\"\n        if (\n            self.hacs.configuration == ConfigurationType.YAML\n            or not self.hacs.configuration.experimental\n        ):\n            return\n\n        device_registry: dr.DeviceRegistry = dr.async_get(hass=self.hacs.hass)\n        device = device_registry.async_get_device(identifiers={(DOMAIN, str(self.data.id))})\n\n        if device is None:\n            return\n\n        device_registry.async_remove_device(device_id=device.id)\n\n    def version_to_download(self) -> str:\n        \"\"\"Determine which version to download.\"\"\"\n        if self.data.last_version is not None:\n            if self.data.selected_tag is not None:\n                if self.data.selected_tag == self.data.last_version:\n                    self.data.selected_tag = None\n                    return self.data.last_version\n                return self.data.selected_tag\n            return self.data.last_version\n\n        if self.data.selected_tag is not None:\n            if self.data.selected_tag == self.data.default_branch:\n                return self.data.default_branch\n            if self.data.selected_tag in self.data.published_tags:\n                return self.data.selected_tag\n\n        return self.data.default_branch or \"main\"\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/repositories/integration.py",
    "content": "\"\"\"Class for integrations in HACS.\"\"\"\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING, Any\n\nfrom homeassistant.loader import async_get_custom_components\n\nfrom ..enums import HacsCategory, HacsDispatchEvent, HacsGitHubRepo, RepositoryFile\nfrom ..exceptions import AddonRepositoryException, HacsException\nfrom ..utils.decode import decode_content\nfrom ..utils.decorator import concurrent\nfrom ..utils.filters import get_first_directory_in_directory\nfrom ..utils.json import json_loads\nfrom .base import HacsRepository\n\nif TYPE_CHECKING:\n    from ..base import HacsBase\n\n\nclass HacsIntegrationRepository(HacsRepository):\n    \"\"\"Integrations in HACS.\"\"\"\n\n    def __init__(self, hacs: HacsBase, full_name: str):\n        \"\"\"Initialize.\"\"\"\n        super().__init__(hacs=hacs)\n        self.data.full_name = full_name\n        self.data.full_name_lower = full_name.lower()\n        self.data.category = HacsCategory.INTEGRATION\n        self.content.path.remote = \"custom_components\"\n        self.content.path.local = self.localpath\n\n    @property\n    def localpath(self):\n        \"\"\"Return localpath.\"\"\"\n        return f\"{self.hacs.core.config_path}/custom_components/{self.data.domain}\"\n\n    async def async_post_installation(self):\n        \"\"\"Run post installation steps.\"\"\"\n        if self.data.config_flow:\n            if self.data.full_name != HacsGitHubRepo.INTEGRATION:\n                await self.reload_custom_components()\n            if self.data.first_install:\n                self.pending_restart = False\n                return\n        self.pending_restart = True\n\n    async def validate_repository(self):\n        \"\"\"Validate.\"\"\"\n        await self.common_validate()\n\n        # Custom step 1: Validate content.\n        if self.repository_manifest.content_in_root:\n            self.content.path.remote = \"\"\n\n        if self.content.path.remote == \"custom_components\":\n            name = get_first_directory_in_directory(self.tree, \"custom_components\")\n            if name is None:\n                if (\n                    \"repository.json\" in self.treefiles\n                    or \"repository.yaml\" in self.treefiles\n                    or \"repository.yml\" in self.treefiles\n                ):\n                    raise AddonRepositoryException()\n                raise HacsException(\n                    f\"{self.string} Repository structure for {self.ref.replace('tags/','')} is not compliant\"\n                )\n            self.content.path.remote = f\"custom_components/{name}\"\n\n        # Get the content of manifest.json\n        if manifest := await self.async_get_integration_manifest():\n            try:\n                self.integration_manifest = manifest\n                self.data.authors = manifest.get(\"codeowners\", [])\n                self.data.domain = manifest[\"domain\"]\n                self.data.manifest_name = manifest.get(\"name\")\n                self.data.config_flow = manifest.get(\"config_flow\", False)\n\n            except KeyError as exception:\n                self.validate.errors.append(\n                    f\"Missing expected key '{exception}' in { RepositoryFile.MAINIFEST_JSON}\"\n                )\n                self.hacs.log.error(\n                    \"Missing expected key '%s' in '%s'\", exception, RepositoryFile.MAINIFEST_JSON\n                )\n\n        # Set local path\n        self.content.path.local = self.localpath\n\n        # Handle potential errors\n        if self.validate.errors:\n            for error in self.validate.errors:\n                if not self.hacs.status.startup:\n                    self.logger.error(\"%s %s\", self.string, error)\n        return self.validate.success\n\n    @concurrent(concurrenttasks=10, backoff_time=5)\n    async def update_repository(self, ignore_issues=False, force=False):\n        \"\"\"Update.\"\"\"\n        if not await self.common_update(ignore_issues, force) and not force:\n            return\n\n        if self.repository_manifest.content_in_root:\n            self.content.path.remote = \"\"\n\n        if self.content.path.remote == \"custom_components\":\n            name = get_first_directory_in_directory(self.tree, \"custom_components\")\n            self.content.path.remote = f\"custom_components/{name}\"\n\n        # Get the content of manifest.json\n        if manifest := await self.async_get_integration_manifest():\n            try:\n                self.integration_manifest = manifest\n                self.data.authors = manifest.get(\"codeowners\", [])\n                self.data.domain = manifest[\"domain\"]\n                self.data.manifest_name = manifest.get(\"name\")\n                self.data.config_flow = manifest.get(\"config_flow\", False)\n\n            except KeyError as exception:\n                self.validate.errors.append(\n                    f\"Missing expected key '{exception}' in { RepositoryFile.MAINIFEST_JSON}\"\n                )\n                self.hacs.log.error(\n                    \"Missing expected key '%s' in '%s'\", exception, RepositoryFile.MAINIFEST_JSON\n                )\n\n        # Set local path\n        self.content.path.local = self.localpath\n\n        # Signal entities to refresh\n        if self.data.installed:\n            self.hacs.async_dispatch(\n                HacsDispatchEvent.REPOSITORY,\n                {\n                    \"id\": 1337,\n                    \"action\": \"update\",\n                    \"repository\": self.data.full_name,\n                    \"repository_id\": self.data.id,\n                },\n            )\n\n    async def reload_custom_components(self):\n        \"\"\"Reload custom_components (and config flows)in HA.\"\"\"\n        self.logger.info(\"Reloading custom_component cache\")\n        del self.hacs.hass.data[\"custom_components\"]\n        await async_get_custom_components(self.hacs.hass)\n        self.logger.info(\"Custom_component cache reloaded\")\n\n    async def async_get_integration_manifest(self, ref: str = None) -> dict[str, Any] | None:\n        \"\"\"Get the content of the manifest.json file.\"\"\"\n        manifest_path = (\n            \"manifest.json\"\n            if self.repository_manifest.content_in_root\n            else f\"{self.content.path.remote}/{RepositoryFile.MAINIFEST_JSON}\"\n        )\n\n        if not manifest_path in (x.full_path for x in self.tree):\n            raise HacsException(f\"No {RepositoryFile.MAINIFEST_JSON} file found '{manifest_path}'\")\n\n        response = await self.hacs.async_github_api_method(\n            method=self.hacs.githubapi.repos.contents.get,\n            repository=self.data.full_name,\n            path=manifest_path,\n            **{\"params\": {\"ref\": ref or self.version_to_download()}},\n        )\n        if response:\n            return json_loads(decode_content(response.data.content))\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/repositories/netdaemon.py",
    "content": "\"\"\"Class for netdaemon apps in HACS.\"\"\"\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nfrom ..enums import HacsCategory, HacsDispatchEvent\nfrom ..exceptions import HacsException\nfrom ..utils import filters\nfrom ..utils.decorator import concurrent\nfrom .base import HacsRepository\n\nif TYPE_CHECKING:\n    from ..base import HacsBase\n\n\nclass HacsNetdaemonRepository(HacsRepository):\n    \"\"\"Netdaemon apps in HACS.\"\"\"\n\n    def __init__(self, hacs: HacsBase, full_name: str):\n        \"\"\"Initialize.\"\"\"\n        super().__init__(hacs=hacs)\n        self.data.full_name = full_name\n        self.data.full_name_lower = full_name.lower()\n        self.data.category = HacsCategory.NETDAEMON\n        self.content.path.local = self.localpath\n        self.content.path.remote = \"apps\"\n\n    @property\n    def localpath(self):\n        \"\"\"Return localpath.\"\"\"\n        return f\"{self.hacs.core.config_path}/netdaemon/apps/{self.data.name}\"\n\n    async def validate_repository(self):\n        \"\"\"Validate.\"\"\"\n        await self.common_validate()\n\n        # Custom step 1: Validate content.\n        if self.repository_manifest:\n            if self.repository_manifest.content_in_root:\n                self.content.path.remote = \"\"\n\n        if self.content.path.remote == \"apps\":\n            self.data.domain = filters.get_first_directory_in_directory(\n                self.tree, self.content.path.remote\n            )\n            self.content.path.remote = f\"apps/{self.data.name}\"\n\n        compliant = False\n        for treefile in self.treefiles:\n            if treefile.startswith(f\"{self.content.path.remote}\") and treefile.endswith(\".cs\"):\n                compliant = True\n                break\n        if not compliant:\n            raise HacsException(\n                f\"{self.string} Repository structure for {self.ref.replace('tags/','')} is not compliant\"\n            )\n\n        # Handle potential errors\n        if self.validate.errors:\n            for error in self.validate.errors:\n                if not self.hacs.status.startup:\n                    self.logger.error(\"%s %s\", self.string, error)\n        return self.validate.success\n\n    @concurrent(concurrenttasks=10, backoff_time=5)\n    async def update_repository(self, ignore_issues=False, force=False):\n        \"\"\"Update.\"\"\"\n        if not await self.common_update(ignore_issues, force) and not force:\n            return\n\n        # Get appdaemon objects.\n        if self.repository_manifest:\n            if self.repository_manifest.content_in_root:\n                self.content.path.remote = \"\"\n\n        if self.content.path.remote == \"apps\":\n            self.data.domain = filters.get_first_directory_in_directory(\n                self.tree, self.content.path.remote\n            )\n            self.content.path.remote = f\"apps/{self.data.name}\"\n\n        # Set local path\n        self.content.path.local = self.localpath\n\n        # Signal entities to refresh\n        if self.data.installed:\n            self.hacs.async_dispatch(\n                HacsDispatchEvent.REPOSITORY,\n                {\n                    \"id\": 1337,\n                    \"action\": \"update\",\n                    \"repository\": self.data.full_name,\n                    \"repository_id\": self.data.id,\n                },\n            )\n\n    async def async_post_installation(self):\n        \"\"\"Run post installation steps.\"\"\"\n        try:\n            await self.hacs.hass.services.async_call(\n                \"hassio\", \"addon_restart\", {\"addon\": \"c6a2317c_netdaemon\"}\n            )\n        except BaseException:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n            pass\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/repositories/plugin.py",
    "content": "\"\"\"Class for plugins in HACS.\"\"\"\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nfrom ..enums import HacsCategory, HacsDispatchEvent\nfrom ..exceptions import HacsException\nfrom ..utils.decorator import concurrent\nfrom ..utils.json import json_loads\nfrom .base import HacsRepository\n\nif TYPE_CHECKING:\n    from ..base import HacsBase\n\n\nclass HacsPluginRepository(HacsRepository):\n    \"\"\"Plugins in HACS.\"\"\"\n\n    def __init__(self, hacs: HacsBase, full_name: str):\n        \"\"\"Initialize.\"\"\"\n        super().__init__(hacs=hacs)\n        self.data.full_name = full_name\n        self.data.full_name_lower = full_name.lower()\n        self.data.file_name = None\n        self.data.category = HacsCategory.PLUGIN\n        self.content.path.local = self.localpath\n\n    @property\n    def localpath(self):\n        \"\"\"Return localpath.\"\"\"\n        return f\"{self.hacs.core.config_path}/www/community/{self.data.full_name.split('/')[-1]}\"\n\n    async def validate_repository(self):\n        \"\"\"Validate.\"\"\"\n        # Run common validation steps.\n        await self.common_validate()\n\n        # Custom step 1: Validate content.\n        self.update_filenames()\n\n        if self.content.path.remote is None:\n            raise HacsException(\n                f\"{self.string} Repository structure for {self.ref.replace('tags/','')} is not compliant\"\n            )\n\n        if self.content.path.remote == \"release\":\n            self.content.single = True\n\n        # Handle potential errors\n        if self.validate.errors:\n            for error in self.validate.errors:\n                if not self.hacs.status.startup:\n                    self.logger.error(\"%s %s\", self.string, error)\n        return self.validate.success\n\n    @concurrent(concurrenttasks=10, backoff_time=5)\n    async def update_repository(self, ignore_issues=False, force=False):\n        \"\"\"Update.\"\"\"\n        if not await self.common_update(ignore_issues, force) and not force:\n            return\n\n        # Get plugin objects.\n        self.update_filenames()\n\n        if self.content.path.remote is None:\n            self.validate.errors.append(\n                f\"{self.string} Repository structure for {self.ref.replace('tags/','')} is not compliant\"\n            )\n\n        if self.content.path.remote == \"release\":\n            self.content.single = True\n\n        # Signal entities to refresh\n        if self.data.installed:\n            self.hacs.async_dispatch(\n                HacsDispatchEvent.REPOSITORY,\n                {\n                    \"id\": 1337,\n                    \"action\": \"update\",\n                    \"repository\": self.data.full_name,\n                    \"repository_id\": self.data.id,\n                },\n            )\n\n    async def get_package_content(self):\n        \"\"\"Get package content.\"\"\"\n        try:\n            package = await self.repository_object.get_contents(\"package.json\", self.ref)\n            package = json_loads(package.content)\n\n            if package:\n                self.data.authors = package[\"author\"]\n        except BaseException:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n            pass\n\n    def update_filenames(self) -> None:\n        \"\"\"Get the filename to target.\"\"\"\n        # Handler for plug requirement 3\n        if self.repository_manifest.filename:\n            valid_filenames = (self.repository_manifest.filename,)\n        else:\n            valid_filenames = (\n                f\"{self.data.name.replace('lovelace-', '')}.js\",\n                f\"{self.data.name}.js\",\n                f\"{self.data.name}.umd.js\",\n                f\"{self.data.name}-bundle.js\",\n            )\n\n        if not self.repository_manifest.content_in_root:\n            if self.releases.objects:\n                release = self.releases.objects[0]\n                if release.assets:\n                    if assetnames := [\n                        filename\n                        for filename in valid_filenames\n                        for asset in release.assets\n                        if filename == asset.name\n                    ]:\n                        self.data.file_name = assetnames[0]\n                        self.content.path.remote = \"release\"\n                        return\n\n        for location in (\"\",) if self.repository_manifest.content_in_root else (\"dist\", \"\"):\n            for filename in valid_filenames:\n                if f\"{location+'/' if location else ''}{filename}\" in [\n                    x.full_path for x in self.tree\n                ]:\n                    self.data.file_name = filename.split(\"/\")[-1]\n                    self.content.path.remote = location\n                    break\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/repositories/python_script.py",
    "content": "\"\"\"Class for python_scripts in HACS.\"\"\"\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nfrom ..enums import HacsCategory, HacsDispatchEvent\nfrom ..exceptions import HacsException\nfrom ..utils.decorator import concurrent\nfrom .base import HacsRepository\n\nif TYPE_CHECKING:\n    from ..base import HacsBase\n\n\nclass HacsPythonScriptRepository(HacsRepository):\n    \"\"\"python_scripts in HACS.\"\"\"\n\n    category = \"python_script\"\n\n    def __init__(self, hacs: HacsBase, full_name: str):\n        \"\"\"Initialize.\"\"\"\n        super().__init__(hacs=hacs)\n        self.data.full_name = full_name\n        self.data.full_name_lower = full_name.lower()\n        self.data.category = HacsCategory.PYTHON_SCRIPT\n        self.content.path.remote = \"python_scripts\"\n        self.content.path.local = self.localpath\n        self.content.single = True\n\n    @property\n    def localpath(self):\n        \"\"\"Return localpath.\"\"\"\n        return f\"{self.hacs.core.config_path}/python_scripts\"\n\n    async def validate_repository(self):\n        \"\"\"Validate.\"\"\"\n        # Run common validation steps.\n        await self.common_validate()\n\n        # Custom step 1: Validate content.\n        if self.repository_manifest.content_in_root:\n            self.content.path.remote = \"\"\n\n        compliant = False\n        for treefile in self.treefiles:\n            if treefile.startswith(f\"{self.content.path.remote}\") and treefile.endswith(\".py\"):\n                compliant = True\n                break\n        if not compliant:\n            raise HacsException(\n                f\"{self.string} Repository structure for {self.ref.replace('tags/','')} is not compliant\"\n            )\n\n        # Handle potential errors\n        if self.validate.errors:\n            for error in self.validate.errors:\n                if not self.hacs.status.startup:\n                    self.logger.error(\"%s %s\", self.string, error)\n        return self.validate.success\n\n    async def async_post_registration(self):\n        \"\"\"Registration.\"\"\"\n        # Set name\n        self.update_filenames()\n\n        if self.hacs.system.action:\n            await self.hacs.validation.async_run_repository_checks(self)\n\n    @concurrent(concurrenttasks=10, backoff_time=5)\n    async def update_repository(self, ignore_issues=False, force=False):\n        \"\"\"Update.\"\"\"\n        if not await self.common_update(ignore_issues, force) and not force:\n            return\n\n        # Get python_script objects.\n        if self.repository_manifest.content_in_root:\n            self.content.path.remote = \"\"\n\n        compliant = False\n        for treefile in self.treefiles:\n            if treefile.startswith(f\"{self.content.path.remote}\") and treefile.endswith(\".py\"):\n                compliant = True\n                break\n        if not compliant:\n            raise HacsException(\n                f\"{self.string} Repository structure for {self.ref.replace('tags/','')} is not compliant\"\n            )\n\n        # Update name\n        self.update_filenames()\n\n        # Signal entities to refresh\n        if self.data.installed:\n            self.hacs.async_dispatch(\n                HacsDispatchEvent.REPOSITORY,\n                {\n                    \"id\": 1337,\n                    \"action\": \"update\",\n                    \"repository\": self.data.full_name,\n                    \"repository_id\": self.data.id,\n                },\n            )\n\n    def update_filenames(self) -> None:\n        \"\"\"Get the filename to target.\"\"\"\n        for treefile in self.tree:\n            if treefile.full_path.startswith(\n                self.content.path.remote\n            ) and treefile.full_path.endswith(\".py\"):\n                self.data.file_name = treefile.filename\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/repositories/theme.py",
    "content": "\"\"\"Class for themes in HACS.\"\"\"\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nfrom ..enums import HacsCategory, HacsDispatchEvent\nfrom ..exceptions import HacsException\nfrom ..utils.decorator import concurrent\nfrom .base import HacsRepository\n\nif TYPE_CHECKING:\n    from ..base import HacsBase\n\n\nclass HacsThemeRepository(HacsRepository):\n    \"\"\"Themes in HACS.\"\"\"\n\n    def __init__(self, hacs: HacsBase, full_name: str):\n        \"\"\"Initialize.\"\"\"\n        super().__init__(hacs=hacs)\n        self.data.full_name = full_name\n        self.data.full_name_lower = full_name.lower()\n        self.data.category = HacsCategory.THEME\n        self.content.path.remote = \"themes\"\n        self.content.path.local = self.localpath\n        self.content.single = False\n\n    @property\n    def localpath(self):\n        \"\"\"Return localpath.\"\"\"\n        return f\"{self.hacs.core.config_path}/themes/{self.data.file_name.replace('.yaml', '')}\"\n\n    async def async_post_installation(self):\n        \"\"\"Run post installation steps.\"\"\"\n        try:\n            await self.hacs.hass.services.async_call(\"frontend\", \"reload_themes\", {})\n        except BaseException:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n            pass\n\n    async def validate_repository(self):\n        \"\"\"Validate.\"\"\"\n        # Run common validation steps.\n        await self.common_validate()\n\n        # Custom step 1: Validate content.\n        compliant = False\n        for treefile in self.treefiles:\n            if treefile.startswith(\"themes/\") and treefile.endswith(\".yaml\"):\n                compliant = True\n                break\n        if not compliant:\n            raise HacsException(\n                f\"{self.string} Repository structure for {self.ref.replace('tags/','')} is not compliant\"\n            )\n\n        if self.repository_manifest.content_in_root:\n            self.content.path.remote = \"\"\n\n        # Handle potential errors\n        if self.validate.errors:\n            for error in self.validate.errors:\n                if not self.hacs.status.startup:\n                    self.logger.error(\"%s %s\", self.string, error)\n        return self.validate.success\n\n    async def async_post_registration(self):\n        \"\"\"Registration.\"\"\"\n        # Set name\n        self.update_filenames()\n        self.content.path.local = self.localpath\n\n        if self.hacs.system.action:\n            await self.hacs.validation.async_run_repository_checks(self)\n\n    @concurrent(concurrenttasks=10, backoff_time=5)\n    async def update_repository(self, ignore_issues=False, force=False):\n        \"\"\"Update.\"\"\"\n        if not await self.common_update(ignore_issues, force) and not force:\n            return\n\n        # Get theme objects.\n        if self.repository_manifest.content_in_root:\n            self.content.path.remote = \"\"\n\n        # Update name\n        self.update_filenames()\n        self.content.path.local = self.localpath\n\n        # Signal entities to refresh\n        if self.data.installed:\n            self.hacs.async_dispatch(\n                HacsDispatchEvent.REPOSITORY,\n                {\n                    \"id\": 1337,\n                    \"action\": \"update\",\n                    \"repository\": self.data.full_name,\n                    \"repository_id\": self.data.id,\n                },\n            )\n\n    def update_filenames(self) -> None:\n        \"\"\"Get the filename to target.\"\"\"\n        for treefile in self.tree:\n            if treefile.full_path.startswith(\n                self.content.path.remote\n            ) and treefile.full_path.endswith(\".yaml\"):\n                self.data.file_name = treefile.filename\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/sensor.py",
    "content": "\"\"\"Sensor platform for HACS.\"\"\"\nfrom __future__ import annotations\n\nfrom homeassistant.components.sensor import SensorEntity\nfrom homeassistant.core import callback\n\nfrom .const import DOMAIN\nfrom .entity import HacsSystemEntity\nfrom .enums import ConfigurationType\n\n\nasync def async_setup_platform(hass, _config, async_add_entities, _discovery_info=None):\n    \"\"\"Setup sensor platform.\"\"\"\n    async_add_entities([HACSSensor(hacs=hass.data.get(DOMAIN))])\n\n\nasync def async_setup_entry(hass, _config_entry, async_add_devices):\n    \"\"\"Setup sensor platform.\"\"\"\n    async_add_devices([HACSSensor(hacs=hass.data.get(DOMAIN))])\n\n\nclass HACSSensor(HacsSystemEntity, SensorEntity):\n    \"\"\"HACS Sensor class.\"\"\"\n\n    _attr_name = \"hacs\"\n    _attr_native_unit_of_measurement = \"pending update(s)\"\n    _attr_native_value = None\n\n    @callback\n    def _update(self) -> None:\n        \"\"\"Update the sensor.\"\"\"\n\n        repositories = [\n            repository\n            for repository in self.hacs.repositories.list_all\n            if repository.pending_update\n        ]\n        self._attr_native_value = len(repositories)\n        if (\n            self.hacs.configuration.config_type == ConfigurationType.YAML\n            or not self.hacs.configuration.experimental\n        ):\n            self._attr_extra_state_attributes = {\n                \"repositories\": [\n                    {\n                        \"name\": repository.data.full_name,\n                        \"display_name\": repository.display_name,\n                        \"installed_version\": repository.display_installed_version,\n                        \"available_version\": repository.display_available_version,\n                    }\n                    for repository in repositories\n                ]\n            }\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/system_health.py",
    "content": "\"\"\"Provide info to system health.\"\"\"\nfrom aiogithubapi.common.const import BASE_API_URL\nfrom homeassistant.components import system_health\nfrom homeassistant.core import HomeAssistant, callback\n\nfrom .base import HacsBase\nfrom .const import DOMAIN\n\nGITHUB_STATUS = \"https://www.githubstatus.com/\"\n\n\n@callback\ndef async_register(hass: HomeAssistant, register: system_health.SystemHealthRegistration) -> None:\n    \"\"\"Register system health callbacks.\"\"\"\n    register.domain = \"Home Assistant Community Store\"\n    register.async_register_info(system_health_info, \"/hacs\")\n\n\nasync def system_health_info(hass):\n    \"\"\"Get info for the info page.\"\"\"\n    hacs: HacsBase = hass.data[DOMAIN]\n    response = await hacs.githubapi.rate_limit()\n\n    data = {\n        \"GitHub API\": system_health.async_check_can_reach_url(hass, BASE_API_URL, GITHUB_STATUS),\n        \"GitHub Content\": system_health.async_check_can_reach_url(\n            hass, \"https://raw.githubusercontent.com/hacs/integration/main/hacs.json\"\n        ),\n        \"GitHub Web\": system_health.async_check_can_reach_url(\n            hass, \"https://github.com/\", GITHUB_STATUS\n        ),\n        \"GitHub API Calls Remaining\": response.data.resources.core.remaining,\n        \"Installed Version\": hacs.version,\n        \"Stage\": hacs.stage,\n        \"Available Repositories\": len(hacs.repositories.list_all),\n        \"Downloaded Repositories\": len(hacs.repositories.list_downloaded),\n    }\n\n    if hacs.system.disabled:\n        data[\"Disabled\"] = hacs.system.disabled_reason\n\n    return data\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/translations/en.json",
    "content": "{\n    \"config\": {\n        \"abort\": {\n            \"single_instance_allowed\": \"Only a single configuration of HACS is allowed.\",\n            \"min_ha_version\": \"You need at least version {version} of Home Assistant to setup HACS.\",\n            \"github\": \"Could not authenticate with GitHub, try again later.\",\n            \"not_setup\": \"HACS is not setup.\",\n            \"reauth_successful\": \"Reauthentication was successful.\"\n        },\n        \"error\": {\n            \"auth\": \"Personal Access Token is not correct\",\n            \"acc\": \"You need to acknowledge all the statements before continuing\"\n        },\n        \"step\": {\n            \"user\": {\n                \"data\": {\n                    \"acc_logs\": \"I know how to access Home Assistant logs\",\n                    \"acc_addons\": \"I know that there are no add-ons in HACS\",\n                    \"acc_untested\": \"I know that everything inside HACS is custom and untested by Home Assistant\",\n                    \"acc_disable\": \"I know that if I get issues with Home Assistant I should disable all my custom_components\"\n                },\n                \"description\": \"Before you can setup HACS you need to acknowledge the following\"\n            },\n            \"device\": {\n                \"title\": \"Waiting for device activation\"\n            },\n            \"reauth_confirm\": {\n                \"title\": \"Reauthentication needed\",\n                \"description\": \"You need to reauthenticate with GitHub.\"\n            }\n        },\n        \"progress\": {\n            \"wait_for_device\": \"1. Open {url} \\n2.Paste the following key to authorize HACS: \\n```\\n{code}\\n```\\n\"\n        }\n    },\n    \"options\": {\n        \"abort\": {\n            \"not_setup\": \"HACS is not setup.\",\n            \"release_limit_value\": \"The release limit needs to be between 1 and 100\"\n        },\n        \"step\": {\n            \"user\": {\n                \"data\": {\n                    \"not_in_use\": \"Not in use with YAML\",\n                    \"country\": \"Filter with country code.\",\n                    \"experimental\": \"Enable experimental features\",\n                    \"release_limit\": \"Number of releases to show.\",\n                    \"debug\": \"Enable debug.\",\n                    \"appdaemon\": \"Enable AppDaemon apps discovery & tracking\",\n                    \"netdaemon\": \"Enable NetDaemon apps discovery & tracking\",\n                    \"sidepanel_icon\": \"Side panel icon\",\n                    \"sidepanel_title\": \"Side panel title\"\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "home-assistant/custom_components/hacs/update.py",
    "content": "\"\"\"Update entities for HACS.\"\"\"\nfrom __future__ import annotations\n\nfrom typing import Any\n\nfrom homeassistant.components.update import UpdateEntity\nfrom homeassistant.core import callback\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\n\nfrom .base import HacsBase\nfrom .const import DOMAIN\nfrom .entity import HacsRepositoryEntity\nfrom .enums import HacsCategory, HacsDispatchEvent\n\n\nasync def async_setup_entry(hass, _config_entry, async_add_devices):\n    \"\"\"Setup update platform.\"\"\"\n    hacs: HacsBase = hass.data.get(DOMAIN)\n    async_add_devices(\n        HacsRepositoryUpdateEntity(hacs=hacs, repository=repository)\n        for repository in hacs.repositories.list_downloaded\n    )\n\n\nclass HacsRepositoryUpdateEntity(HacsRepositoryEntity, UpdateEntity):\n    \"\"\"Update entities for repositories downloaded with HACS.\"\"\"\n\n    @property\n    def supported_features(self) -> int | None:\n        \"\"\"Return the supported features of the entity.\"\"\"\n        features = 4 | 16\n        if self.repository.can_download:\n            features = features | 1\n        return features\n\n    @property\n    def name(self) -> str | None:\n        \"\"\"Return the name.\"\"\"\n        return f\"{self.repository.display_name} update\"\n\n    @property\n    def latest_version(self) -> str:\n        \"\"\"Return latest version of the entity.\"\"\"\n        return self.repository.display_available_version\n\n    @property\n    def release_url(self) -> str:\n        \"\"\"Return the URL of the release page.\"\"\"\n        if self.repository.display_version_or_commit == \"commit\":\n            return f\"https://github.com/{self.repository.data.full_name}\"\n        return f\"https://github.com/{self.repository.data.full_name}/releases/{self.latest_version}\"\n\n    @property\n    def installed_version(self) -> str:\n        \"\"\"Return downloaded version of the entity.\"\"\"\n        return self.repository.display_installed_version\n\n    @property\n    def release_summary(self) -> str | None:\n        \"\"\"Return the release summary.\"\"\"\n        if not self.repository.can_download:\n            return f\"<ha-alert alert-type='warning'>Requires Home Assistant {self.repository.repository_manifest.homeassistant}</ha-alert>\"\n        if self.repository.pending_restart:\n            return \"<ha-alert alert-type='error'>Restart of Home Assistant required</ha-alert>\"\n        return None\n\n    @property\n    def entity_picture(self) -> str | None:\n        \"\"\"Return the entity picture to use in the frontend.\"\"\"\n        if (\n            self.repository.data.category != HacsCategory.INTEGRATION\n            or self.repository.data.domain is None\n        ):\n            return None\n\n        return f\"https://brands.home-assistant.io/_/{self.repository.data.domain}/icon.png\"\n\n    async def async_install(self, version: str | None, backup: bool, **kwargs: Any) -> None:\n        \"\"\"Install an update.\"\"\"\n        if self.repository.display_version_or_commit == \"version\":\n            self._update_in_progress(progress=10)\n            self.repository.data.selected_tag = self.latest_version\n            await self.repository.update_repository(force=True)\n            self._update_in_progress(progress=20)\n        await self.repository.async_install()\n        self._update_in_progress(progress=False)\n\n    async def async_release_notes(self) -> str | None:\n        \"\"\"Return the release notes.\"\"\"\n        if self.repository.pending_restart or not self.repository.can_download:\n            return None\n\n        release_notes = \"\"\n        if len(self.repository.releases.objects) > 0:\n            release = self.repository.releases.objects[0]\n            release_notes += release.body\n\n        if self.repository.pending_update:\n            if self.repository.data.category == HacsCategory.INTEGRATION:\n                release_notes += (\n                    \"\\n\\n<ha-alert alert-type='warning'>You need to restart\"\n                    \" Home Assistant manually after updating.</ha-alert>\\n\\n\"\n                )\n            if self.repository.data.category == HacsCategory.PLUGIN:\n                release_notes += (\n                    \"\\n\\n<ha-alert alert-type='warning'>You need to manually\"\n                    \" clear the frontend cache after updating.</ha-alert>\\n\\n\"\n                )\n\n        return release_notes.replace(\"\\n#\", \"\\n\\n#\")\n\n    async def async_added_to_hass(self) -> None:\n        \"\"\"Register for status events.\"\"\"\n        await super().async_added_to_hass()\n        self.async_on_remove(\n            async_dispatcher_connect(\n                self.hass,\n                HacsDispatchEvent.REPOSITORY_DOWNLOAD_PROGRESS,\n                self._update_download_progress,\n            )\n        )\n\n    @callback\n    def _update_download_progress(self, data: dict) -> None:\n        \"\"\"Update the download progress.\"\"\"\n        if data[\"repository\"] != self.repository.data.full_name:\n            return\n        self._update_in_progress(progress=data[\"progress\"])\n\n    @callback\n    def _update_in_progress(self, progress: int | bool) -> None:\n        \"\"\"Update the download progress.\"\"\"\n        self._attr_in_progress = progress\n        self.async_write_ha_state()\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/utils/__init__.py",
    "content": "\"\"\"Initialize HACS utils.\"\"\"\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/utils/backup.py",
    "content": "\"\"\"Backup.\"\"\"\nfrom __future__ import annotations\n\nimport os\nimport shutil\nimport tempfile\nfrom time import sleep\nfrom typing import TYPE_CHECKING\n\nfrom .path import is_safe\n\nif TYPE_CHECKING:\n    from ..base import HacsBase\n    from ..repositories.base import HacsRepository\n\n\nDEFAULT_BACKUP_PATH = f\"{tempfile.gettempdir()}/hacs_backup/\"\n\n\nclass Backup:\n    \"\"\"Backup.\"\"\"\n\n    def __init__(\n        self,\n        hacs: HacsBase,\n        local_path: str | None = None,\n        backup_path: str = DEFAULT_BACKUP_PATH,\n        repository: HacsRepository | None = None,\n    ) -> None:\n        \"\"\"initialize.\"\"\"\n        self.hacs = hacs\n        self.repository = repository\n        self.local_path = local_path or repository.content.path.local\n        self.backup_path = backup_path\n        if repository:\n            self.backup_path = (\n                tempfile.gettempdir()\n                + f\"/hacs_persistent_{repository.data.category}/\"\n                + repository.data.name\n            )\n        self.backup_path_full = f\"{self.backup_path}{self.local_path.split('/')[-1]}\"\n\n    def _init_backup_dir(self) -> bool:\n        \"\"\"Init backup dir.\"\"\"\n        if not os.path.exists(self.local_path):\n            return False\n        if not is_safe(self.hacs, self.local_path):\n            return False\n        if os.path.exists(self.backup_path):\n            shutil.rmtree(self.backup_path)\n\n            # Wait for the folder to be removed\n            while os.path.exists(self.backup_path):\n                sleep(0.1)\n        os.makedirs(self.backup_path, exist_ok=True)\n        return True\n\n    def create(self) -> None:\n        \"\"\"Create a backup in /tmp\"\"\"\n        if not self._init_backup_dir():\n            return\n\n        try:\n            if os.path.isfile(self.local_path):\n                shutil.copyfile(self.local_path, self.backup_path_full)\n                os.remove(self.local_path)\n            else:\n                shutil.copytree(self.local_path, self.backup_path_full)\n                shutil.rmtree(self.local_path)\n                while os.path.exists(self.local_path):\n                    sleep(0.1)\n            self.hacs.log.debug(\n                \"Backup for %s, created in %s\",\n                self.local_path,\n                self.backup_path_full,\n            )\n        except BaseException as exception:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n            self.hacs.log.warning(\"Could not create backup: %s\", exception)\n\n    def restore(self) -> None:\n        \"\"\"Restore from backup.\"\"\"\n        if not os.path.exists(self.backup_path_full):\n            return\n\n        if os.path.isfile(self.backup_path_full):\n            if os.path.exists(self.local_path):\n                os.remove(self.local_path)\n            shutil.copyfile(self.backup_path_full, self.local_path)\n        else:\n            if os.path.exists(self.local_path):\n                shutil.rmtree(self.local_path)\n                while os.path.exists(self.local_path):\n                    sleep(0.1)\n            shutil.copytree(self.backup_path_full, self.local_path)\n        self.hacs.log.debug(\"Restored %s, from backup %s\", self.local_path, self.backup_path_full)\n\n    def cleanup(self) -> None:\n        \"\"\"Cleanup backup files.\"\"\"\n        if not os.path.exists(self.backup_path):\n            return\n\n        shutil.rmtree(self.backup_path)\n\n        # Wait for the folder to be removed\n        while os.path.exists(self.backup_path):\n            sleep(0.1)\n        self.hacs.log.debug(\"Backup dir %s cleared\", self.backup_path)\n\n\nclass BackupNetDaemon(Backup):\n    \"\"\"BackupNetDaemon.\"\"\"\n\n    def create(self) -> None:\n        \"\"\"Create a backup in /tmp\"\"\"\n        if not self._init_backup_dir():\n            return\n\n        for filename in os.listdir(self.repository.content.path.local):\n            if not filename.endswith(\".yaml\"):\n                continue\n\n            source_file_name = f\"{self.repository.content.path.local}/{filename}\"\n            target_file_name = f\"{self.backup_path}/{filename}\"\n            shutil.copyfile(source_file_name, target_file_name)\n\n    def restore(self) -> None:\n        \"\"\"Create a backup in /tmp\"\"\"\n        if not os.path.exists(self.backup_path):\n            return\n\n        for filename in os.listdir(self.backup_path):\n            if not filename.endswith(\".yaml\"):\n                continue\n\n            source_file_name = f\"{self.backup_path}/{filename}\"\n            target_file_name = f\"{self.repository.content.path.local}/{filename}\"\n            shutil.copyfile(source_file_name, target_file_name)\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/utils/configuration_schema.py",
    "content": "\"\"\"HACS Configuration Schemas.\"\"\"\n# pylint: disable=dangerous-default-value\nimport voluptuous as vol\n\nfrom ..const import LOCALE\n\n# Configuration:\nTOKEN = \"token\"\nSIDEPANEL_TITLE = \"sidepanel_title\"\nSIDEPANEL_ICON = \"sidepanel_icon\"\nFRONTEND_REPO = \"frontend_repo\"\nFRONTEND_REPO_URL = \"frontend_repo_url\"\nAPPDAEMON = \"appdaemon\"\nNETDAEMON = \"netdaemon\"\n\n# Options:\nCOUNTRY = \"country\"\nDEBUG = \"debug\"\nRELEASE_LIMIT = \"release_limit\"\nEXPERIMENTAL = \"experimental\"\n\n# Config group\nPATH_OR_URL = \"frontend_repo_path_or_url\"\n\n\ndef hacs_base_config_schema(config: dict = {}) -> dict:\n    \"\"\"Return a shcema configuration dict for HACS.\"\"\"\n    if not config:\n        config = {\n            TOKEN: \"xxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n        }\n    return {\n        vol.Required(TOKEN, default=config.get(TOKEN)): str,\n    }\n\n\ndef hacs_config_option_schema(options: dict = {}) -> dict:\n    \"\"\"Return a shcema for HACS configuration options.\"\"\"\n    if not options:\n        options = {\n            APPDAEMON: False,\n            COUNTRY: \"ALL\",\n            DEBUG: False,\n            EXPERIMENTAL: False,\n            NETDAEMON: False,\n            RELEASE_LIMIT: 5,\n            SIDEPANEL_ICON: \"hacs:hacs\",\n            SIDEPANEL_TITLE: \"HACS\",\n            FRONTEND_REPO: \"\",\n            FRONTEND_REPO_URL: \"\",\n        }\n    return {\n        vol.Optional(SIDEPANEL_TITLE, default=options.get(SIDEPANEL_TITLE)): str,\n        vol.Optional(SIDEPANEL_ICON, default=options.get(SIDEPANEL_ICON)): str,\n        vol.Optional(RELEASE_LIMIT, default=options.get(RELEASE_LIMIT)): int,\n        vol.Optional(COUNTRY, default=options.get(COUNTRY)): vol.In(LOCALE),\n        vol.Optional(APPDAEMON, default=options.get(APPDAEMON)): bool,\n        vol.Optional(NETDAEMON, default=options.get(NETDAEMON)): bool,\n        vol.Optional(DEBUG, default=options.get(DEBUG)): bool,\n        vol.Optional(EXPERIMENTAL, default=options.get(EXPERIMENTAL)): bool,\n        vol.Exclusive(FRONTEND_REPO, PATH_OR_URL): str,\n        vol.Exclusive(FRONTEND_REPO_URL, PATH_OR_URL): str,\n    }\n\n\ndef hacs_config_combined() -> dict:\n    \"\"\"Combine the configuration options.\"\"\"\n    base = hacs_base_config_schema()\n    options = hacs_config_option_schema()\n\n    for option in options:\n        base[option] = options[option]\n\n    return base\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/utils/data.py",
    "content": "\"\"\"Data handler for HACS.\"\"\"\nimport asyncio\nfrom datetime import datetime\n\nfrom homeassistant.core import callback\nfrom homeassistant.util import json as json_util\n\nfrom ..base import HacsBase\nfrom ..enums import HacsDispatchEvent, HacsGitHubRepo\nfrom ..repositories.base import TOPIC_FILTER, HacsManifest, HacsRepository\nfrom .logger import LOGGER\nfrom .path import is_safe\nfrom .store import async_load_from_store, async_save_to_store\n\nDEFAULT_BASE_REPOSITORY_DATA = (\n    (\"authors\", []),\n    (\"category\", \"\"),\n    (\"description\", \"\"),\n    (\"domain\", None),\n    (\"downloads\", 0),\n    (\"etag_repository\", None),\n    (\"full_name\", \"\"),\n    (\"last_updated\", 0),\n    (\"hide\", False),\n    (\"new\", False),\n    (\"stargazers_count\", 0),\n    (\"topics\", []),\n)\n\nDEFAULT_EXTENDED_REPOSITORY_DATA = (\n    (\"archived\", False),\n    (\"config_flow\", False),\n    (\"default_branch\", None),\n    (\"description\", \"\"),\n    (\"first_install\", False),\n    (\"installed_commit\", None),\n    (\"installed\", False),\n    (\"last_commit\", None),\n    (\"last_version\", None),\n    (\"manifest_name\", None),\n    (\"open_issues\", 0),\n    (\"published_tags\", []),\n    (\"pushed_at\", \"\"),\n    (\"releases\", False),\n    (\"selected_tag\", None),\n    (\"show_beta\", False),\n    (\"stargazers_count\", 0),\n    (\"topics\", []),\n)\n\n\nclass HacsData:\n    \"\"\"HacsData class.\"\"\"\n\n    def __init__(self, hacs: HacsBase):\n        \"\"\"Initialize.\"\"\"\n        self.logger = LOGGER\n        self.hacs = hacs\n        self.content = {}\n\n    async def async_force_write(self, _=None):\n        \"\"\"Force write.\"\"\"\n        await self.async_write(force=True)\n\n    async def async_write(self, force: bool = False) -> None:\n        \"\"\"Write content to the store files.\"\"\"\n        if not force and self.hacs.system.disabled:\n            return\n\n        self.logger.debug(\"<HacsData async_write> Saving data\")\n\n        # Hacs\n        await async_save_to_store(\n            self.hacs.hass,\n            \"hacs\",\n            {\n                \"archived_repositories\": self.hacs.common.archived_repositories,\n                \"renamed_repositories\": self.hacs.common.renamed_repositories,\n                \"ignored_repositories\": self.hacs.common.ignored_repositories,\n            },\n        )\n        await self._async_store_content_and_repos()\n\n    async def _async_store_content_and_repos(self, _=None):  # bb: ignore\n        \"\"\"Store the main repos file and each repo that is out of date.\"\"\"\n        # Repositories\n        self.content = {}\n        for repository in self.hacs.repositories.list_all:\n            if repository.data.category in self.hacs.common.categories:\n                self.async_store_repository_data(repository)\n\n        await async_save_to_store(self.hacs.hass, \"repositories\", self.content)\n        for event in (HacsDispatchEvent.REPOSITORY, HacsDispatchEvent.CONFIG):\n            self.hacs.async_dispatch(event, {})\n\n    @callback\n    def async_store_repository_data(self, repository: HacsRepository) -> dict:\n        \"\"\"Store the repository data.\"\"\"\n        data = {\"repository_manifest\": repository.repository_manifest.manifest}\n\n        for key, default_value in DEFAULT_BASE_REPOSITORY_DATA:\n            if (value := repository.data.__getattribute__(key)) != default_value:\n                data[key] = value\n\n        if repository.data.installed:\n            for key, default_value in DEFAULT_EXTENDED_REPOSITORY_DATA:\n                if (value := repository.data.__getattribute__(key)) != default_value:\n                    data[key] = value\n            data[\"version_installed\"] = repository.data.installed_version\n\n        if repository.data.last_fetched:\n            data[\"last_fetched\"] = repository.data.last_fetched.timestamp()\n\n        self.content[str(repository.data.id)] = data\n\n    async def restore(self):\n        \"\"\"Restore saved data.\"\"\"\n        self.hacs.status.new = False\n        hacs = await async_load_from_store(self.hacs.hass, \"hacs\") or {}\n        repositories = await async_load_from_store(self.hacs.hass, \"repositories\") or {}\n\n        if not hacs and not repositories:\n            # Assume new install\n            self.hacs.status.new = True\n            self.logger.info(\"<HacsData restore> Loading base repository information\")\n            repositories = await self.hacs.hass.async_add_executor_job(\n                json_util.load_json,\n                f\"{self.hacs.core.config_path}/custom_components/hacs/utils/default.repositories\",\n            )\n\n        self.logger.info(\"<HacsData restore> Restore started\")\n\n        # Hacs\n        self.hacs.common.archived_repositories = []\n        self.hacs.common.ignored_repositories = []\n        self.hacs.common.renamed_repositories = {}\n\n        # Clear out doubble renamed values\n        renamed = hacs.get(\"renamed_repositories\", {})\n        for entry in renamed:\n            value = renamed.get(entry)\n            if value not in renamed:\n                self.hacs.common.renamed_repositories[entry] = value\n\n        # Clear out doubble archived values\n        for entry in hacs.get(\"archived_repositories\", []):\n            if entry not in self.hacs.common.archived_repositories:\n                self.hacs.common.archived_repositories.append(entry)\n\n        # Clear out doubble ignored values\n        for entry in hacs.get(\"ignored_repositories\", []):\n            if entry not in self.hacs.common.ignored_repositories:\n                self.hacs.common.ignored_repositories.append(entry)\n\n        try:\n            await self.register_unknown_repositories(repositories)\n\n            for entry, repo_data in repositories.items():\n                if entry == \"0\":\n                    # Ignore repositories with ID 0\n                    self.logger.debug(\n                        \"<HacsData restore> Found repository with ID %s - %s\", entry, repo_data\n                    )\n                    continue\n                self.async_restore_repository(entry, repo_data)\n\n            self.logger.info(\"<HacsData restore> Restore done\")\n        except BaseException as exception:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n            self.logger.critical(\n                \"<HacsData restore> [%s] Restore Failed!\", exception, exc_info=exception\n            )\n            return False\n        return True\n\n    async def register_unknown_repositories(self, repositories):\n        \"\"\"Registry any unknown repositories.\"\"\"\n        register_tasks = [\n            self.hacs.async_register_repository(\n                repository_full_name=repo_data[\"full_name\"],\n                category=repo_data[\"category\"],\n                check=False,\n                repository_id=entry,\n            )\n            for entry, repo_data in repositories.items()\n            if entry != \"0\" and not self.hacs.repositories.is_registered(repository_id=entry)\n        ]\n        if register_tasks:\n            await asyncio.gather(*register_tasks)\n\n    @callback\n    def async_restore_repository(self, entry, repository_data):\n        \"\"\"Restore repository.\"\"\"\n        full_name = repository_data[\"full_name\"]\n        if not (repository := self.hacs.repositories.get_by_full_name(full_name)):\n            self.logger.error(\"<HacsData restore> Did not find %s (%s)\", full_name, entry)\n            return\n        # Restore repository attributes\n        self.hacs.repositories.set_repository_id(repository, entry)\n        repository.data.authors = repository_data.get(\"authors\", [])\n        repository.data.description = repository_data.get(\"description\", \"\")\n        repository.data.downloads = repository_data.get(\"downloads\", 0)\n        repository.data.last_updated = repository_data.get(\"last_updated\", 0)\n        repository.data.etag_repository = repository_data.get(\"etag_repository\")\n        repository.data.topics = [\n            topic for topic in repository_data.get(\"topics\", []) if topic not in TOPIC_FILTER\n        ]\n        repository.data.domain = repository_data.get(\"domain\")\n        repository.data.stargazers_count = repository_data.get(\n            \"stargazers_count\"\n        ) or repository_data.get(\"stars\", 0)\n        repository.releases.last_release = repository_data.get(\"last_release_tag\")\n        repository.data.releases = repository_data.get(\"releases\", False)\n        repository.data.installed = repository_data.get(\"installed\", False)\n        repository.data.new = repository_data.get(\"new\", False)\n        repository.data.selected_tag = repository_data.get(\"selected_tag\")\n        repository.data.show_beta = repository_data.get(\"show_beta\", False)\n        repository.data.last_version = repository_data.get(\"last_version\")\n        repository.data.last_commit = repository_data.get(\"last_commit\")\n        repository.data.installed_version = repository_data.get(\"version_installed\")\n        repository.data.installed_commit = repository_data.get(\"installed_commit\")\n        repository.data.manifest_name = repository_data.get(\"manifest_name\")\n\n        if last_fetched := repository_data.get(\"last_fetched\"):\n            repository.data.last_fetched = datetime.fromtimestamp(last_fetched)\n\n        repository.repository_manifest = HacsManifest.from_dict(\n            repository_data.get(\"repository_manifest\", {})\n        )\n\n        if repository.localpath is not None and is_safe(self.hacs, repository.localpath):\n            # Set local path\n            repository.content.path.local = repository.localpath\n\n        if repository.data.installed:\n            repository.data.first_install = False\n\n        if full_name == HacsGitHubRepo.INTEGRATION:\n            repository.data.installed_version = self.hacs.version\n            repository.data.installed = True\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/utils/decode.py",
    "content": "\"\"\"Util to decode content from the github API.\"\"\"\nfrom base64 import b64decode\n\n\ndef decode_content(content: str) -> str:\n    \"\"\"Decode content.\"\"\"\n    return b64decode(bytearray(content, \"utf-8\")).decode()\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/utils/decorator.py",
    "content": "\"\"\"HACS Decorators.\"\"\"\nfrom __future__ import annotations\n\nimport asyncio\nfrom functools import wraps\nfrom typing import TYPE_CHECKING, Any, Coroutine\n\nfrom ..const import DEFAULT_CONCURRENT_BACKOFF_TIME, DEFAULT_CONCURRENT_TASKS\n\nif TYPE_CHECKING:\n    from ..base import HacsBase\n\n\ndef concurrent(\n    concurrenttasks: int = DEFAULT_CONCURRENT_TASKS,\n    backoff_time: int = DEFAULT_CONCURRENT_BACKOFF_TIME,\n) -> Coroutine[Any, Any, None]:\n    \"\"\"Return a modified function.\"\"\"\n\n    max_concurrent = asyncio.Semaphore(concurrenttasks)\n\n    def inner_function(function) -> Coroutine[Any, Any, None]:\n        @wraps(function)\n        async def wrapper(*args, **kwargs) -> None:\n            hacs: HacsBase = getattr(args[0], \"hacs\", None)\n\n            async with max_concurrent:\n                result = await function(*args, **kwargs)\n                if (\n                    hacs is None\n                    or hacs.queue is None\n                    or hacs.queue.has_pending_tasks\n                    or \"update\" not in function.__name__\n                ):\n                    await asyncio.sleep(backoff_time)\n\n                return result\n\n        return wrapper\n\n    return inner_function\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/utils/default.repositories",
    "content": "{\"172733314\": {\"repository_manifest\": {\"name\": \"HACS\", \"zip_release\": true, \"hide_default_branch\": true, \"homeassistant\": \"2022.4.0\", \"hacs\": \"0.19.0\", \"filename\": \"hacs.zip\"}, \"authors\": [\"@ludeeus\"], \"category\": \"integration\", \"description\": \"HACS gives you a powerful UI to handle downloads of all your custom needs.\", \"domain\": \"hacs\", \"downloads\": 88456, \"etag_repository\": \"W/\\\"408c23a324e898d19501777549cc27290f7aacddcb33c5966a3e5e61c5f66e9f\\\"\", \"full_name\": \"hacs/integration\", \"last_updated\": \"2022-07-09T10:26:39Z\", \"stargazers_count\": 2730, \"topics\": [\"community\", \"package-manager\"], \"config_flow\": true, \"default_branch\": \"main\", \"installed\": false, \"last_commit\": \"9b9f066\", \"last_version\": \"1.25.5\", \"manifest_name\": \"HACS\", \"open_issues\": 1, \"published_tags\": [\"1.25.5\", \"1.25.4\", \"1.25.3\", \"1.25.2\", \"1.25.1\"], \"pushed_at\": \"2022-07-09T10:26:39\", \"releases\": true, \"version_installed\": null, \"last_fetched\": 1657362986.384574, \"first_install\": true, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null}, \"191831638\": {\"repository_manifest\": {\"name\": \"Meross Integration\", \"hacs\": \"1.6.0\", \"homeassistant\": \"2022.6\"}, \"authors\": [\"@albertogeniola\"], \"category\": \"integration\", \"description\": \"Custom component that leverages the Meross IoT library to integrate with Homeassistant\", \"domain\": \"meross_cloud\", \"etag_repository\": \"W/\\\"8c45cc330c65c57477cfe78374bfb052330a817e11d984bbf6bf700c2e150321\\\"\", \"full_name\": \"albertogeniola/meross-homeassistant\", \"last_updated\": \"2022-07-05T09:14:07Z\", \"stargazers_count\": 427, \"topics\": [\"meross\", \"meross-homeassistant\"], \"last_fetched\": 1657139940.362973, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"232269564\": {\"repository_manifest\": {\"name\": \"Konke\", \"country\": \"CN\"}, \"authors\": [\"@jedmeng\"], \"category\": \"integration\", \"description\": \"\\u63a7\\u5ba2\\u5c0fK \\u63a5\\u5165Home Assistant\\uff0c\\u652f\\u6301\\u6700\\u65b0\\u7248\\u672cHA \\u76ee\\u524d\\u6700\\u65b0\\u7248\\u672c\\uff080.103\\uff09\\uff0c\\u76f8\\u4fe1\\u672a\\u6765\\u7684\\u7248\\u672c\\u4e5f\\u53ef\\u4ee5\\u652f\\u6301\\u3002\", \"domain\": \"konke\", \"etag_repository\": \"W/\\\"a208a685cf3061ab1b06e7a52a9cb951164a408b96f207a071145bd6d12809be\\\"\", \"full_name\": \"5high/konke\", \"last_updated\": \"2022-02-08T07:44:52Z\", \"stargazers_count\": 16, \"last_fetched\": 1656859035.03628, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"234514524\": {\"repository_manifest\": {\"name\": \"Sonos Alarm\"}, \"category\": \"integration\", \"description\": \"HomeAssistant custom component to control your SONOS Alarm\", \"domain\": \"sonos_alarm\", \"etag_repository\": \"W/\\\"17960d474a9c477ffde67251882c456dcd511b21d0ba3432d61c1453e2c80803\\\"\", \"full_name\": \"AaronDavidSchneider/SonosAlarm\", \"last_updated\": \"2021-05-25T16:33:27Z\", \"stargazers_count\": 18, \"last_fetched\": 1656859035.244708, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"169460975\": {\"repository_manifest\": {}, \"authors\": [\"@akasma74\"], \"category\": \"integration\", \"description\": \"It is a fork of \\\"Yet another take on a home assistant custom alarm\\\" that will exist until its author is back to our Earth\", \"domain\": \"bwalarm\", \"etag_repository\": \"W/\\\"10615c3f04fbb78682b25d5599d0895f2a375d6744cd57923d97f8c3aa0e50d3\\\"\", \"full_name\": \"akasma74/Hass-Custom-Alarm\", \"last_updated\": \"2022-04-29T16:36:33Z\", \"stargazers_count\": 79, \"last_fetched\": 1656859035.199773, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"272432260\": {\"repository_manifest\": {\"name\": \"Floureon Thermostat\", \"homeassistant\": \"0.110.0\", \"render_readme\": true}, \"authors\": [\"@algirdasc\"], \"category\": \"integration\", \"description\": \"Floureon (Broadlink based) thermostat integration for Home Assistant\", \"domain\": \"floureon\", \"etag_repository\": \"W/\\\"034dea56e53eb27ea1bf3a414cbfc23692c55609c2b9c94b86a106420833da9a\\\"\", \"full_name\": \"algirdasc/hass-floureon\", \"last_updated\": \"2021-12-26T20:32:45Z\", \"stargazers_count\": 21, \"topics\": [\"broadlink\", \"floureon\", \"thermostat\"], \"last_fetched\": 1656859041.414906, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"215825339\": {\"repository_manifest\": {\"name\": \"Hekr Component\", \"filename\": false, \"country\": false, \"homeassistant\": \"2022.3.0\", \"persistent_directory\": false}, \"authors\": [\"@alryaz\"], \"category\": \"integration\", \"description\": \"Hekr integration using python-hekr\", \"domain\": \"hekr\", \"etag_repository\": \"W/\\\"30db1c338da9d2d2c867df7230353961fc294e0b17d81dddee0c2bbcda9be357\\\"\", \"full_name\": \"alryaz/hass-hekr-component\", \"last_updated\": \"2022-04-07T13:32:52Z\", \"stargazers_count\": 30, \"topics\": [\"consumption\", \"hekr\", \"wisen-application\"], \"last_fetched\": 1657362616.31864, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"257104502\": {\"repository_manifest\": {\"name\": \"FKF Budapest Garbage Collection\", \"country\": [\"HU\"], \"render_readme\": \"true\"}, \"authors\": [\"@amaximus\"], \"category\": \"integration\", \"description\": \"FKF Budapest Garbage Collection custom component for Home Assistant\", \"domain\": \"fkf_garbage_collection\", \"downloads\": 3, \"etag_repository\": \"W/\\\"61e68ac00214f12110ceece479dcf003dbe94ab56adbfaea1a8cd0109f42a663\\\"\", \"full_name\": \"amaximus/fkf-garbage-collection\", \"last_updated\": \"2022-06-03T06:25:28Z\", \"stargazers_count\": 15, \"topics\": [\"budapest\"], \"last_fetched\": 1656859051.678255, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"224374747\": {\"repository_manifest\": {\"name\": \"Phicomm DC1\", \"country\": [\"CN\"]}, \"category\": \"integration\", \"description\": \"\\u6590\\u8bafDC1\\u63d2\\u6392\\u63a5\\u5165Home Assistant\\u63d2\\u4ef6\\uff0c\\u672c\\u63d2\\u4ef6\\u539f\\u4f5c\\u8005NETYJ\\uff0c\\u6b64\\u5904\\u4ec5\\u4e3aHACS\\u5b89\\u88c5\\u65b9\\u4fbf\\u4e4b\\u7528\\u3002\", \"domain\": \"phicomm_dc1\", \"etag_repository\": \"W/\\\"d10ae7962d7893ba052e947b1092c79d2ababc3598f98af42607fd7dba67dad4\\\"\", \"full_name\": \"5high/phicomm-dc1-homeassistant\", \"last_updated\": \"2021-06-04T14:08:17Z\", \"stargazers_count\": 13, \"last_fetched\": 1648398840.944062, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"292720530\": {\"repository_manifest\": {\"name\": \"Pandora Car Alarm System\", \"render_readme\": true, \"homeassistant\": \"2021.12.0\", \"country\": [\"RU\", \"BY\", \"KZ\", \"UA\"]}, \"authors\": [\"@alryaz\", \"@turbo-lab\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for Pandora Car Alarm System\", \"domain\": \"pandora_cas\", \"etag_repository\": \"W/\\\"e7e45c3c8a57fe0bed1e363d9aa7dd7d3a5f07aa814e6bdbe7ccf2106f9e37fa\\\"\", \"full_name\": \"alryaz/hass-pandora-cas\", \"last_updated\": \"2022-01-19T10:25:34Z\", \"stargazers_count\": 15, \"topics\": [\"car-system\", \"pandora-alarm\", \"vehicle-tracking\"], \"last_fetched\": 1653229582.396457, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"258012483\": {\"repository_manifest\": {\"name\": \"Livebox TV UHD\", \"hacs\": \"0.24.0\", \"homeassistant\": \"0.110.0\"}, \"authors\": [\"@AkA57\"], \"category\": \"integration\", \"description\": \"Livebox TV UHD custom component for Home Assistant\", \"domain\": \"liveboxtvuhd\", \"etag_repository\": \"W/\\\"d34bd3af4bc539690712753ca09ec6f418ce14e79a49b9e54e1cb33a0fcfc911\\\"\", \"full_name\": \"AkA57/liveboxtvuhd\", \"last_updated\": \"2022-01-27T21:17:31Z\", \"stargazers_count\": 10, \"topics\": [\"livebox\"], \"last_fetched\": 1653229570.961412, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"233575809\": {\"repository_manifest\": {\"name\": \"Linksys Velop Device Tracker\", \"homeassistant\": \"0.100.0\"}, \"authors\": [\"@adamnaj\"], \"category\": \"integration\", \"description\": \"The linksys_velop platform allows for presence detection by listing devices connected to your Linksys Velop router.\", \"domain\": \"linksys_velop\", \"etag_repository\": \"W/\\\"399827a9940b7627489acd20e1a0581bd3f817f8b4379deb4df62c1615b6b77b\\\"\", \"full_name\": \"AdamNaj/linksys_velop\", \"last_updated\": \"2021-05-08T21:20:15Z\", \"stargazers_count\": 13, \"last_fetched\": 1641307134.406528, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"197920457\": {\"repository_manifest\": {}, \"authors\": [\"@andersonshatch\"], \"category\": \"integration\", \"description\": \"This is a library to allow communicating to a Midea appliance via the Midea cloud.\", \"domain\": \"midea\", \"etag_repository\": \"W/\\\"9bf6ce9ee9021496170d9479225245607d075f8f9e015a6d4c055d3e7eb6393a\\\"\", \"full_name\": \"andersonshatch/midea-ac-py\", \"last_updated\": \"2021-03-07T12:12:17Z\", \"stargazers_count\": 71, \"topics\": [\"midea\"], \"last_fetched\": 1656859052.624781, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"160728801\": {\"repository_manifest\": {}, \"authors\": [\"@asantaga\"], \"category\": \"integration\", \"description\": \"Home Assistant Sensor for the LightwaveRF energy monitor\", \"domain\": \"lightwaverf_energy\", \"etag_repository\": \"W/\\\"2af6276bcf036ddcea41b9436c916c401a964072cc0130da2f5fc2975b21d29c\\\"\", \"full_name\": \"asantaga/lightwaverf_HA_EnergySensor\", \"last_updated\": \"2022-05-12T10:42:13Z\", \"stargazers_count\": 5, \"topics\": [\"electricity\", \"energysensor\", \"lightwaverf\"], \"last_fetched\": 1653229594.283671, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"159080189\": {\"repository_manifest\": {\"name\": \"Drayton Wiser Integration for Home Assistant\", \"homeassistant\": \"2021.12\"}, \"authors\": [\"@asantaga\", \"@msp1974\"], \"category\": \"integration\", \"description\": \"Platform and related climate/sensors to support the Drayton Wiser Home Heating System\", \"domain\": \"wiser\", \"etag_repository\": \"W/\\\"3c9076b184bef8086da159cc502b2bdc6241e91950b445396fd7a6deb2495b7f\\\"\", \"full_name\": \"asantaga/wiserHomeAssistantPlatform\", \"last_updated\": \"2022-06-28T18:08:58Z\", \"stargazers_count\": 117, \"topics\": [\"drayton\", \"heating\", \"wiser\"], \"last_fetched\": 1656859059.940743, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"201497401\": {\"repository_manifest\": {\"name\": \"Xiaomi IR Climate\"}, \"authors\": [\"@anonym-tsk\"], \"category\": \"integration\", \"description\": \"Xiaomi IR Climate Component\", \"domain\": \"xiaomi_remote\", \"etag_repository\": \"W/\\\"9a051af92872ccf49a6ef23b59cf177a19be346e1b23668e00549f0c182dcc94\\\"\", \"full_name\": \"Anonym-tsk/homeassistant-climate-xiaomi-remote\", \"last_updated\": \"2021-06-03T09:52:44Z\", \"stargazers_count\": 28, \"topics\": [\"climate\", \"xiaomi\"], \"last_fetched\": 1656859056.754984, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"190378093\": {\"repository_manifest\": {\"name\": \"Visonic/Bentel/Tyco Alarm System\"}, \"authors\": [\"@And3rsL\"], \"category\": \"integration\", \"description\": \"Visonic/Bentel/Tyco Alarm System integrtation for Home Assistant\", \"domain\": \"visonicalarm\", \"etag_repository\": \"W/\\\"2fc3a93429db19269828ad3ebd8572fa5cbd246e8723e4bf107482def68b796b\\\"\", \"full_name\": \"And3rsL/VisonicAlarm-for-Hassio\", \"last_updated\": \"2022-01-14T08:59:54Z\", \"stargazers_count\": 14, \"topics\": [\"alarm\", \"alarm-control-panel\", \"bentel\", \"tycomonitor\", \"visonic\"], \"last_fetched\": 1646496761.979529, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"186347733\": {\"repository_manifest\": {\"name\": \"Audi connect\", \"homeassistant\": \"0.110.0\"}, \"authors\": [\"@arjenvrh\"], \"category\": \"integration\", \"description\": \"Adds an audi connect integration to home assistant\", \"domain\": \"audiconnect\", \"etag_repository\": \"W/\\\"d630f256dec53e894bc027b48e5314bbaa2db820a27f5b5a64ea41fc3b0616cf\\\"\", \"full_name\": \"arjenvrh/audi_connect_ha\", \"last_updated\": \"2022-07-03T10:24:21Z\", \"stargazers_count\": 114, \"topics\": [\"audi\", \"audi-connect\", \"sensors\"], \"last_fetched\": 1656859058.90636, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"252926906\": {\"repository_manifest\": {\"name\": \"Uponor Smatrix Pulse\", \"render_readme\": true}, \"authors\": [\"@asev\"], \"category\": \"integration\", \"description\": \"Uponor Smatrix Pulse heating/cooling system integration for Home Assistant.\", \"domain\": \"uponor\", \"etag_repository\": \"W/\\\"c8892ede1e61570c2ba9aee0b139b5b11a7bdba52716f6e968bdda895c4de2ff\\\"\", \"full_name\": \"asev/homeassistant-uponor\", \"last_updated\": \"2022-02-09T12:50:09Z\", \"stargazers_count\": 16, \"topics\": [\"heating-control\", \"smatrix\", \"uponor\", \"uponor-smatrix-pulse\"], \"last_fetched\": 1656859062.277127, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"296028613\": {\"repository_manifest\": {\"name\": \"D-Link Presence / device_Tracker\", \"render_readme\": true}, \"authors\": [\"@ayavilevich\"], \"category\": \"integration\", \"description\": \"A D-Link AP/router device tracker for Home Assistant\", \"domain\": \"dlink_presence\", \"etag_repository\": \"W/\\\"e3e5d1c5f1c7863e87bbe7e461c715aa9896e030b7f3dde5aa0dc0258cb16d59\\\"\", \"full_name\": \"ayavilevich/homeassistant-dlink-presence\", \"last_updated\": \"2021-08-09T11:14:30Z\", \"stargazers_count\": 8, \"topics\": [\"d-link\", \"dlink\", \"presence-detection\"], \"last_fetched\": 1653229598.779481, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"237695750\": {\"repository_manifest\": {\"name\": \"OpenNEM (AU) Data\", \"country\": \"AU\"}, \"authors\": [\"@bacco007\"], \"category\": \"integration\", \"description\": \"OpenNEM Sensor for Home Assistant\", \"domain\": \"opennem\", \"etag_repository\": \"W/\\\"05c7767329fb805023825e82ef265123bab939e62a7fe668e7a2c411303b5a0c\\\"\", \"full_name\": \"bacco007/sensor.opennem\", \"last_updated\": \"2022-03-25T07:06:22Z\", \"stargazers_count\": 9, \"topics\": [\"opennem\"], \"last_fetched\": 1656859065.151651, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"250866164\": {\"repository_manifest\": {\"name\": \"Event sensor\", \"homeassistant\": \"2021.12.0\", \"render_readme\": true}, \"authors\": [\"@azogue\"], \"category\": \"integration\", \"description\": \"HomeAssistant custom sensor to track specific events\", \"domain\": \"eventsensor\", \"etag_repository\": \"W/\\\"107f6e73723520157e8267124f7d53ace0441afbd5588af017d98826d00628fb\\\"\", \"full_name\": \"azogue/eventsensor\", \"last_updated\": \"2022-06-06T19:29:29Z\", \"stargazers_count\": 79, \"last_fetched\": 1656859064.247298, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"223739645\": {\"repository_manifest\": {\"name\": \"Climate IP\", \"country\": \"NO\", \"homeassistant\": \"0.110.2\"}, \"authors\": [\"@SebuZet\"], \"category\": \"integration\", \"description\": \"Home Assistant Climate Device for controlling (not only) Samsung AC\", \"domain\": \"climate_ip\", \"etag_repository\": \"W/\\\"e6f0721fbfc48d5a3e962ca3cbc7652a75ba05ea66a29997c34420ef8373860c\\\"\", \"full_name\": \"atxbyea/samsungrac\", \"last_updated\": \"2022-07-08T09:40:25Z\", \"stargazers_count\": 28, \"topics\": [\"airconditioning\", \"hacktoberfest2021\", \"samsung\"], \"last_fetched\": 1657362638.14692, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"256899380\": {\"repository_manifest\": {\"name\": \"Project Three Zero (7-11 Fuel Lock Monitor)\", \"render_readme\": true}, \"authors\": [\"@atymic\"], \"category\": \"integration\", \"description\": \"Project Three Zero Home Assistant Integration\", \"domain\": \"project_zero_three\", \"etag_repository\": \"W/\\\"ea0b6abd62bf036fc3fda1402260d9ea66488e12ddab5963a4feb975f7b3145d\\\"\", \"full_name\": \"atymic/project_three_zero_ha\", \"last_updated\": \"2022-01-27T00:39:52Z\", \"stargazers_count\": 4, \"topics\": [\"fuel\"], \"last_fetched\": 1643571221.907677, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"229519365\": {\"repository_manifest\": {\"name\": \"WaterNSW Real Time Data\", \"country\": \"AU\"}, \"authors\": [\"@bacco007\"], \"category\": \"integration\", \"description\": \"Home Assistant Sensor for WaterNSW Real Time Data\", \"domain\": \"waternsw\", \"etag_repository\": \"W/\\\"0073513960112963985994a0abd872512f206fcd0269b78e85d90e4fe3765e83\\\"\", \"full_name\": \"bacco007/sensor.waternsw\", \"last_updated\": \"2022-06-10T08:04:57Z\", \"stargazers_count\": 4, \"last_fetched\": 1656859066.089479, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"137655647\": {\"repository_manifest\": {}, \"authors\": [\"@bertbert72\"], \"category\": \"integration\", \"description\": \"HomeAssistant component for control of Virgin Media Tivo boxes\", \"domain\": \"virgintivo\", \"etag_repository\": \"W/\\\"4fd64ea7441d03f172bad300f57a8a3b379b8fefde18aa53fff2471e57871bb6\\\"\", \"full_name\": \"bertbert72/HomeAssistant_VirginTivo\", \"last_updated\": \"2022-02-26T15:42:49Z\", \"stargazers_count\": 22, \"last_fetched\": 1656859070.841081, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"254203764\": {\"repository_manifest\": {\"name\": \"Bunq balance sensor\", \"render_readme\": true}, \"authors\": [\"@BSantalucia\"], \"category\": \"integration\", \"description\": \"Home assistant custom component to provide monetary account balance sensors for Bunq\", \"domain\": \"bunq\", \"etag_repository\": \"W/\\\"a022e41ed4b11d1f3ff40a8f34b15bd1ed4a034493b9937ea62e8fb5ae8bb669\\\"\", \"full_name\": \"ben8p/home-assistant-bunq-balance-sensors\", \"last_updated\": \"2022-01-04T14:46:01Z\", \"stargazers_count\": 2, \"topics\": [\"bunq\", \"bunq-api\", \"home-assistant-sensor\"], \"last_fetched\": 1641470148.650331, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"181480967\": {\"repository_manifest\": {}, \"authors\": [\"@basschipper\"], \"category\": \"integration\", \"description\": \"Generic Hygrostat for Home Assistant\", \"domain\": \"generic_hygrostat\", \"etag_repository\": \"W/\\\"52c2885b67bc3cb64de08c05a1af2004b47d7611d6f927009d3151af51cd4d11\\\"\", \"full_name\": \"basschipper/homeassistant-generic-hygrostat\", \"last_updated\": \"2022-01-09T14:17:22Z\", \"stargazers_count\": 53, \"last_fetched\": 1653229603.990009, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"282688934\": {\"repository_manifest\": {\"name\": \"EVA II PRO WiFi Midea Inventor Dehumidifier custom integration\", \"homeassistant\": \"0.96.0\"}, \"authors\": [\"@barban-dev\"], \"category\": \"integration\", \"description\": \"Home Assistant Custom Integration for EVA II PRO WiFi Smart Dehumidifier appliance by Midea/Inventor.\", \"domain\": \"midea_dehumidifier\", \"etag_repository\": \"W/\\\"2d261e9c931681465c382c1e3f349880c0a871dcf58166779f761edc5527b0ee\\\"\", \"full_name\": \"barban-dev/homeassistant-midea-dehumidifier\", \"last_updated\": \"2022-01-31T20:14:41Z\", \"stargazers_count\": 43, \"topics\": [\"dehumidifier\", \"eva-ii-pro-wifi\", \"internet-of-things\", \"inventor\", \"iot\", \"midea\"], \"last_fetched\": 1653229600.851112, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"192086849\": {\"repository_manifest\": {}, \"authors\": [\"bouwew\"], \"category\": \"integration\", \"description\": \"GoodWe SEMS MQTT-componenent for Home Assistant\", \"domain\": \"sems2mqtt\", \"etag_repository\": \"W/\\\"62a0ae0ad13d89b503ab6754696155c162aa653c9e9c8d8b7ec373427acb179f\\\"\", \"full_name\": \"bouwew/sems2mqtt\", \"last_updated\": \"2022-03-03T07:57:14Z\", \"stargazers_count\": 7, \"last_fetched\": 1657362649.546824, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"296946072\": {\"repository_manifest\": {\"homeassistant\": \"0.115.0\", \"name\": \"Kodi Recently Added Media\", \"render_readme\": true}, \"authors\": [\"@boralyl\"], \"category\": \"integration\", \"description\": \"Custom component to feed recently added tv shows and movies to the custom card \\\"Upcoming Media Card\\\" for Home Assistant. \", \"domain\": \"kodi_recently_added\", \"etag_repository\": \"W/\\\"71c76574b7f708961480318b9a5b0ef8e9c9c9a41424b01f6c9aaed4a28d12a1\\\"\", \"full_name\": \"boralyl/kodi-recently-added\", \"last_updated\": \"2021-12-19T23:48:44Z\", \"stargazers_count\": 5, \"topics\": [\"kodi\"], \"last_fetched\": 1656859074.538663, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"236146080\": {\"repository_manifest\": {\"name\": \"Solaredge Modbus\", \"homeassistant\": \"2021.8.0\"}, \"authors\": [\"@binsentsu\"], \"category\": \"integration\", \"description\": \"Home assistant Component for reading data locally from Solaredge inverter through modbus TCP\", \"domain\": \"solaredge_modbus\", \"etag_repository\": \"W/\\\"cde5164db0ba7b2ef6089d6173df35fbd3bc6c35933b52b401a42bcfc0b6ef96\\\"\", \"full_name\": \"binsentsu/home-assistant-solaredge-modbus\", \"last_updated\": \"2022-01-28T20:13:03Z\", \"stargazers_count\": 91, \"topics\": [\"modbus\", \"modbus-tcp\", \"solaredge\", \"solaredge-inverter\"], \"last_fetched\": 1656859073.593332, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"250688607\": {\"repository_manifest\": {\"homeassistant\": \"0.108.0\", \"name\": \"Steam Wishlist\", \"render_readme\": true}, \"authors\": [\"@boralyl\"], \"category\": \"integration\", \"description\": \"A home assistant integration that monitors games on sale on your Steam wishlist.\", \"domain\": \"steam_wishlist\", \"etag_repository\": \"W/\\\"99900338e163e46c85f425b813738b4644f7667177ee7930a145560054d7d842\\\"\", \"full_name\": \"boralyl/steam-wishlist\", \"last_updated\": \"2022-06-12T18:21:41Z\", \"stargazers_count\": 14, \"topics\": [\"steam\"], \"last_fetched\": 1656859075.598447, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"162808336\": {\"repository_manifest\": {\"name\": \"Lightwave RF\"}, \"authors\": [\"@bigbadblunt\"], \"category\": \"integration\", \"description\": \"Lightwave RF custom component for Home Assistant. Requires generation 2 (\\\"Link Plus\\\") hub, but will control both generation 1 (\\\"Connect Series\\\") and generation 2 (\\\"Smart Series\\\") devices.\", \"domain\": \"lightwave2\", \"etag_repository\": \"W/\\\"255f01e78986a03a422889379356e174fcf098bfa9e96046eed204fb6f960a4f\\\"\", \"full_name\": \"bigbadblunt/homeassistant-lightwave2\", \"last_updated\": \"2022-06-18T16:18:46Z\", \"stargazers_count\": 32, \"topics\": [\"lightwave\", \"lightwaverf\"], \"last_fetched\": 1656859072.372289, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"260169906\": {\"repository_manifest\": {\"name\": \"Luxtronik\", \"render_readme\": true}, \"authors\": [\"@bouni\"], \"category\": \"integration\", \"description\": \"Luxtronik integration for Home Assistant\", \"domain\": \"luxtronik\", \"etag_repository\": \"W/\\\"c8aaae6cb90f589f33fd9d2d4fa750e026f1dbd12753fcdbf81d77cf3b748c5a\\\"\", \"full_name\": \"Bouni/luxtronik\", \"last_updated\": \"2022-06-10T05:17:21Z\", \"stargazers_count\": 39, \"topics\": [\"luxtronik\", \"luxtronik2\"], \"last_fetched\": 1656859078.650461, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"190260955\": {\"repository_manifest\": {\"name\": \"MIND Mobility\", \"country\": \"NL\", \"render_readme\": true}, \"authors\": [\"@bramkragten\"], \"category\": \"integration\", \"description\": \"Add support for Mind Mobility vehicles in Home Assistant\", \"domain\": \"mind\", \"etag_repository\": \"W/\\\"d0f7e9187a5b3de7667ad5ebcb8f236fc765be5f884bf98716a93d9856d522cf\\\"\", \"full_name\": \"bramkragten/mind\", \"last_updated\": \"2021-05-07T13:37:44Z\", \"stargazers_count\": 8, \"last_fetched\": 1653229615.26296, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"259865897\": {\"repository_manifest\": {\"name\": \"DRK Blutspende\", \"country\": [\"DE\"], \"render_readme\": true}, \"authors\": [\"Bouni\"], \"category\": \"integration\", \"description\": \"DRK Blutspende component for Home Assistant \", \"domain\": \"drkblutspende\", \"etag_repository\": \"W/\\\"acb23cb2e48a20f9ac686e5411c126b5ce6746a00c7f56cfca9709e2082013a3\\\"\", \"full_name\": \"Bouni/drkblutspende\", \"last_updated\": \"2022-02-23T08:06:00Z\", \"stargazers_count\": 4, \"topics\": [\"blutspende\", \"drk\"], \"last_fetched\": 1646496790.364655, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"189680764\": {\"repository_manifest\": {}, \"category\": \"integration\", \"description\": \"Screenly media player custom component for Home Assistant.\", \"domain\": \"screenly\", \"etag_repository\": \"W/\\\"b028cbcd074a688327e8c9e6d0897dd8840a6238cb51c903ef309879293707ec\\\"\", \"full_name\": \"burnnat/media_player.screenly\", \"last_updated\": \"2019-09-27T05:19:26Z\", \"stargazers_count\": 3, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"201445202\": {\"repository_manifest\": {\"name\": \"ACV garbage collection sensor\", \"render_readme\": true, \"country\": [\"NL\"]}, \"authors\": [\"@Vloris\", \"@Cadsters\", \"@aritmeester\"], \"category\": \"integration\", \"description\": \"\\ud83d\\uddd1\\ufe0f Integration for bin/waste collection  by acv-groep\", \"domain\": \"acv\", \"etag_repository\": \"W/\\\"301b223198d2dc87356def05fdc06bd27e7d932b0a277479e4f80ca4751c78e4\\\"\", \"full_name\": \"Cadsters/acv-hass-component\", \"last_updated\": \"2022-05-30T13:17:35Z\", \"stargazers_count\": 4, \"topics\": [\"acv-groep\", \"python3\", \"trash\", \"waste\"], \"last_fetched\": 1656859089.220004, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"262854926\": {\"repository_manifest\": {\"name\": \"Meteobridge Datalogger Integration\", \"render_readme\": true, \"homeassistant\": \"2021.9.0\"}, \"authors\": [\"@briis\"], \"category\": \"integration\", \"description\": \"The Meteobridge Integration adds support for retrieving current weather data from a Meteobridge datalogger connected to a local Weather Station.\", \"domain\": \"meteobridge\", \"etag_repository\": \"W/\\\"4d05901bb686a5303b0e6eaceb60a2a43af3609e3f97bbb3077aca32446c734d\\\"\", \"full_name\": \"briis/meteobridge\", \"last_updated\": \"2022-01-10T13:36:59Z\", \"stargazers_count\": 5, \"topics\": [\"meteobridge\"], \"last_fetched\": 1641895531.02994, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"284006518\": {\"repository_manifest\": {\"name\": \"Bonaire MyClimate\", \"render_readme\": \"true\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@bremor\"], \"category\": \"integration\", \"description\": \"Reverse engineered implementation of the Bonaire MyClimate app.\", \"domain\": \"bonaire_myclimate\", \"etag_repository\": \"W/\\\"a027c8d5f6ebfcd241de6ad604b127ed3a9fd22cad2c20f33bd26dfb45e5332b\\\"\", \"full_name\": \"bremor/bonaire_myclimate\", \"last_updated\": \"2021-12-17T11:02:09Z\", \"stargazers_count\": 12, \"topics\": [\"bonaire\", \"bonaire-myclimate\", \"climate\", \"myclimate\"], \"last_fetched\": 1656859080.746004, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"229872760\": {\"repository_manifest\": {\"name\": \"Fitness Push\"}, \"category\": \"integration\", \"description\": \"Home Assistant integration to push fitness data to remote services.\", \"domain\": \"fitness_push\", \"etag_repository\": \"W/\\\"62361253781aeddcf0352876ad36c5b120f856841ee5e5582e63304ee9c06ea2\\\"\", \"full_name\": \"burnnat/ha-fitness-push\", \"last_updated\": \"2020-01-24T00:27:12Z\", \"stargazers_count\": 1, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"204200635\": {\"repository_manifest\": {\"name\": \"Garbage Collection\", \"zip_release\": true, \"filename\": \"garbage_collection.zip\", \"homeassistant\": \"2022.5.0\"}, \"authors\": [\"@bruxy70\"], \"category\": \"integration\", \"description\": \"\\ud83d\\uddd1 Custom Home Assistant sensor for scheduling garbage collection (or other regularly re-occurring events - weekly on given days, semi-weekly or monthly)\", \"domain\": \"garbage_collection\", \"downloads\": 8305, \"etag_repository\": \"W/\\\"e37d06aff901898dd29be74558df2b6dd7c4b6a20254190878ccd6a4210b5941\\\"\", \"full_name\": \"bruxy70/Garbage-Collection\", \"last_updated\": \"2022-07-09T07:28:05Z\", \"stargazers_count\": 297, \"topics\": [\"garbage-collection\", \"schedule\", \"waste\", \"waste-management\"], \"last_fetched\": 1657362659.014292, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"262017793\": {\"repository_manifest\": {\"name\": \"Switchbot_press\", \"render_readme\": true}, \"authors\": [\"@cagnulein\"], \"category\": \"integration\", \"description\": \"This is a simple project that manage the Switchbot ( https://amzn.to/3dnliBD ) that has only the \\\"press\\\" ability in Home Assistant.\", \"domain\": \"switchbot_press\", \"etag_repository\": \"W/\\\"b4d9a81bd079dcfbc4e4615549bd61fad56d403a496c7163fb4b514f4b0d23f6\\\"\", \"full_name\": \"cagnulein/switchbot_press\", \"last_updated\": \"2022-05-05T04:19:21Z\", \"stargazers_count\": 12, \"topics\": [\"python3\", \"switchbot\"], \"last_fetched\": 1656859091.013717, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"202990294\": {\"repository_manifest\": {\"name\": \"CZ Public Transport\", \"homeassistant\": \"0.109.0\", \"zip_release\": true, \"filename\": \"cz_pub_tran.zip\", \"country\": \"CZ\"}, \"authors\": [\"@bruxy70\"], \"category\": \"integration\", \"description\": \"\\ud83d\\ude8d Home Assistant custom sensor for finding Czech Public Transportation Connections\", \"domain\": \"cz_pub_tran\", \"downloads\": 261, \"etag_repository\": \"W/\\\"4f29e45e6dc1407631cf5fab09951d565f767e76a1f1727d07cbcaf573845270\\\"\", \"full_name\": \"bruxy70/CZ-Public-Transport\", \"last_updated\": \"2022-06-01T20:40:21Z\", \"stargazers_count\": 10, \"topics\": [\"chaps\", \"crws\", \"departure-times\", \"idos\", \"public-transportation\"], \"last_fetched\": 1656859085.964817, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"261970408\": {\"repository_manifest\": {\"name\": \"Weatherbit Weather Forecast for Home Assistant\", \"render_readme\": true, \"homeassistant\": \"2022.7.0\"}, \"authors\": [\"@briis\"], \"category\": \"integration\", \"description\": \"The weatherbit integration adds support for the weatherbit.io web service as a source for meteorological data for your location.\", \"domain\": \"weatherbit\", \"etag_repository\": \"W/\\\"9df3cb457b964be9c2d733da0c7d83b31ffb053515c8eabfc6e398bd43d69ea5\\\"\", \"full_name\": \"briis/weatherbit\", \"last_updated\": \"2022-07-03T05:58:01Z\", \"stargazers_count\": 32, \"topics\": [\"meteorological-data\", \"weather-forecast\", \"weatherbit\"], \"last_fetched\": 1656859085.723523, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"210269734\": {\"repository_manifest\": {\"name\": \"HDHomeRun\"}, \"category\": \"integration\", \"description\": \"HDHomeRun integration for Home Assistant.\", \"domain\": \"hdhomerun\", \"etag_repository\": \"W/\\\"e41ec5355213a6063702d2222aedf8659813dbddc198e69a1007a19f156782fe\\\"\", \"full_name\": \"burnnat/ha-hdhomerun\", \"last_updated\": \"2021-07-12T21:00:20Z\", \"stargazers_count\": 11, \"last_fetched\": 1657362659.864132, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"207620142\": {\"repository_manifest\": {\"name\": \"DPC sensor\", \"country\": [\"IT\", \"VA\", \"SM\"]}, \"authors\": [\"@caiosweet\"], \"category\": \"integration\", \"description\": \"Italy Meteo-hydro alert and hydrogeological phenomena Civil Protection (Protezione Civile). In this custom component you can find the vigilance Bulletin and the Bulletin of national hydrogeological and hydraulic criticalities. They allow to check whether in your current location there will be criticalities/warnings related to weather-hydrogeological and hydraulic phenomena. Weather forecasts for civil protection purposes differs from the classic \\\"weather forecasts\\\". They highlight potentially harmful situations to people or things. This component was created for personal purposes, in order to be able to monitor the Civil Protection site and check for important updates. I hope it will be useful to you.\", \"domain\": \"dpc\", \"etag_repository\": \"W/\\\"e60b3aeaf0b662af9258ae5c26f03406fb763635b4a43f51bea6c12ed9f128e3\\\"\", \"full_name\": \"caiosweet/Home-Assistant-custom-components-DPC-Alert\", \"last_updated\": \"2022-03-22T20:56:30Z\", \"stargazers_count\": 31, \"topics\": [\"dpc\", \"protezionecivile\"], \"last_fetched\": 1648399850.675114, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"191563578\": {\"repository_manifest\": {}, \"authors\": [\"@Ceerbeerus\"], \"category\": \"integration\", \"description\": \"Gives you information about the latest beer available at Systembolaget in Sweden, also known as \\\"Tillf\\u00e4lligt sortiment\\\".\", \"domain\": \"beerbolaget\", \"etag_repository\": \"W/\\\"7e8e74d7b1cbc7c85ab8d57c96ef4b2f02e24b44db913a9975c3d32041af65a3\\\"\", \"full_name\": \"Ceerbeerus/beerbolaget\", \"last_updated\": \"2020-05-20T15:25:17Z\", \"stargazers_count\": 4, \"last_fetched\": 1653229628.477883, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"179347477\": {\"repository_manifest\": {\"name\": \"Circadian Lighting\"}, \"authors\": [\"@claytonjn\"], \"category\": \"integration\", \"description\": \"Circadian Lighting custom component for Home Assistant\", \"domain\": \"circadian_lighting\", \"etag_repository\": \"W/\\\"e1f938b774dc3734cc9796ef68e5a78a8a65b7be50e6a6bde70ca7a464aa71bd\\\"\", \"full_name\": \"claytonjn/hass-circadian_lighting\", \"last_updated\": \"2022-06-22T17:19:30Z\", \"stargazers_count\": 510, \"topics\": [\"circadian\", \"circadian-rhythms\", \"lighting\", \"sleep\", \"wellness\"], \"last_fetched\": 1657362670.292845, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"140169152\": {\"repository_manifest\": {\"name\": \"Authenticated\", \"zip_release\": true, \"hide_default_branch\": true, \"filename\": \"authenticated.zip\"}, \"authors\": [\"@ludeeus\"], \"category\": \"integration\", \"description\": \"A platform which allows you to get information about sucessfull logins to Home Assistant.\", \"domain\": \"authenticated\", \"downloads\": 3136, \"etag_repository\": \"W/\\\"84d2e6e0ea692b9a08e97f220290d11e6098c9f1696132e317fd092d5a7fac2f\\\"\", \"full_name\": \"custom-components/authenticated\", \"last_updated\": \"2022-05-28T09:01:47Z\", \"stargazers_count\": 83, \"topics\": [\"security\"], \"last_fetched\": 1657118005.833302, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"195594888\": {\"repository_manifest\": {\"name\": \"Sinope GT125\", \"filename\": false, \"render_readme\": true, \"country\": [\"CA\"], \"homeassistant\": \"0.110.0\"}, \"authors\": [\"@claudegel\"], \"category\": \"integration\", \"description\": \"Sinope custom component for Home Assistant to manage Sinop\\u00e9 devices directly via the GT125 gateway\", \"domain\": \"sinope\", \"etag_repository\": \"W/\\\"ef8397be180e711cbb6df6ad60b9ef1b73ef0d415b1c32fc3316660073d66000\\\"\", \"full_name\": \"claudegel/sinope-gt125\", \"last_updated\": \"2022-04-09T02:44:10Z\", \"stargazers_count\": 11, \"topics\": [\"sinope\"], \"last_fetched\": 1653229633.023574, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"127689312\": {\"repository_manifest\": {\"name\": \"Sinope Neviweb\", \"filename\": false, \"render_readme\": true, \"country\": [\"CA\"], \"homeassistant\": \"0.110.0\"}, \"authors\": [\"@claudegel\"], \"category\": \"integration\", \"description\": \"Neviweb Custom Component for Home Assistant to manage devices connected via GT125\", \"domain\": \"neviweb\", \"etag_repository\": \"W/\\\"ec2ce855e9c84e16e45c96e1ebf08b34a1cb0d200c96cf0878dba8075bb19889\\\"\", \"full_name\": \"claudegel/sinope-1\", \"last_updated\": \"2022-04-07T13:06:32Z\", \"stargazers_count\": 19, \"topics\": [\"neviweb\", \"sinope\"], \"last_fetched\": 1653229630.731887, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"139892990\": {\"repository_manifest\": {\"name\": \"BrewDog\", \"render_readme\": true}, \"authors\": [\"@ludeeus\"], \"category\": \"integration\", \"description\": \"\\ud83c\\udf7b Display information about random beers from Brewdog as a sensor in Home Assistant, you can use this in a push notification next time you visit a bar.\", \"domain\": \"brewdog\", \"etag_repository\": \"W/\\\"85b2f4992733e20203324c50f000a4ecff740e59908dadd23c929a57f53118a4\\\"\", \"full_name\": \"custom-components/brewdog\", \"last_updated\": \"2022-03-11T08:08:33Z\", \"stargazers_count\": 3, \"topics\": [\"api\", \"brewdog\", \"punkapi\"], \"last_fetched\": 1648399864.935171, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"139664351\": {\"repository_manifest\": {\"name\": \"Alexa Media Player\", \"zip_release\": true, \"filename\": \"alexa_media.zip\", \"homeassistant\": \"2021.12.0b0\"}, \"authors\": [\"@keatontaylor\", \"@alandtse\"], \"category\": \"integration\", \"description\": \"This is a custom component to allow control of Amazon Alexa devices in Home Assistant using the unofficial Alexa API.\", \"domain\": \"alexa_media\", \"downloads\": 10293, \"etag_repository\": \"W/\\\"6247ef07c70cdfe2db5bf8499139e57cbca11c75ea2629d87e766bc29d7a626f\\\"\", \"full_name\": \"custom-components/alexa_media_player\", \"last_updated\": \"2022-06-26T02:34:06Z\", \"stargazers_count\": 877, \"topics\": [\"alexa\"], \"last_fetched\": 1657362671.545353, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"224560492\": {\"repository_manifest\": {\"name\": \"Sinope Neviweb130\", \"filename\": false, \"render_readme\": true, \"country\": [\"CA\"], \"homeassistant\": \"2021.12.1\"}, \"authors\": [\"@claudegel\"], \"category\": \"integration\", \"description\": \"Neviweb custom component for Home Assistant to manage devices connected via a GT130  and wifi devices from Sinop\\u00e9\", \"domain\": \"neviweb130\", \"etag_repository\": \"W/\\\"66b0ac4f67ead83a4b3683fd597e2b577851a52fba8e3aa573002ab5618b61f3\\\"\", \"full_name\": \"claudegel/sinope-130\", \"last_updated\": \"2022-06-19T00:17:19Z\", \"stargazers_count\": 21, \"topics\": [\"neviweb\", \"sinope\"], \"last_fetched\": 1657362669.382383, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"146510412\": {\"repository_manifest\": {\"name\": \"ICY E-thermostaat\", \"zip_release\": true, \"filename\": \"combined.zip\", \"hide_default_branch\": true, \"homeassistant\": \"0.96.0\"}, \"authors\": [\"@gerard33\"], \"category\": \"integration\", \"description\": \"E-Thermostaat (ICY) component for Home Assistant\", \"domain\": \"e_thermostaat\", \"downloads\": 31, \"etag_repository\": \"W/\\\"df7a9e3a9adbc197cbdc28c3f3a76824d3cf9514e6f2aa1f8782184c46456a79\\\"\", \"full_name\": \"custom-components/climate.e_thermostaat\", \"last_updated\": \"2022-06-26T16:35:51Z\", \"stargazers_count\": 3, \"topics\": [\"e-thermostaat\", \"icy\"], \"last_fetched\": 1656859103.68526, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"173563704\": {\"repository_manifest\": {}, \"category\": \"integration\", \"description\": \"Programmable thermostat that let you have a smart thermostat on budget.\", \"domain\": \"programmable_thermostat\", \"etag_repository\": \"W/\\\"68295414961528b04eae313f56067951b35920bdfd8595affba0876d7d671fc0\\\"\", \"full_name\": \"custom-components/climate.programmable_thermostat\", \"last_updated\": \"2021-06-20T12:34:18Z\", \"stargazers_count\": 91, \"last_fetched\": 1657362675.511986, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"209854868\": {\"repository_manifest\": {\"name\": \"FedEx\", \"country\": \"US\"}, \"category\": \"integration\", \"description\": \"The fedex platform allows one to track deliveries by FedEx\", \"domain\": \"fedex\", \"etag_repository\": \"W/\\\"1fae62c5428d01c51941ee9eb0585fb14f076fedf38dd6ad43aeb721485c3747\\\"\", \"full_name\": \"custom-components/fedex\", \"last_updated\": \"2020-01-18T17:31:45Z\", \"stargazers_count\": 4, \"last_fetched\": 1653229641.0248, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"145180996\": {\"repository_manifest\": {\"name\": \"Feedparser\", \"homeassistant\": \"2021.4.0\", \"render_readme\": true}, \"authors\": [\"@iantrich\"], \"category\": \"integration\", \"description\": \"\\ud83d\\udcf0 RSS Feed Integration\", \"domain\": \"feedparser\", \"etag_repository\": \"W/\\\"518f64c2eec6e1066b4cccbee30341fc8dddb1ac31337d2f5db8b8efdee5678c\\\"\", \"full_name\": \"custom-components/feedparser\", \"last_updated\": \"2022-01-31T14:09:21Z\", \"stargazers_count\": 75, \"last_fetched\": 1653229642.295303, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"201963665\": {\"repository_manifest\": {\"name\": \"Healthchecks.io\", \"zip_release\": true, \"hide_default_branch\": true, \"filename\": \"healthchecksio.zip\"}, \"authors\": [\"@ludeeus\"], \"category\": \"integration\", \"description\": \"Update and display the status of your healthchecks.io  checks.\", \"domain\": \"healthchecksio\", \"downloads\": 564, \"etag_repository\": \"W/\\\"e1d74c9cee215f39c97b364ccdc8269c3221f6b35453564bf35b446fa8c73fd6\\\"\", \"full_name\": \"custom-components/healthchecksio\", \"last_updated\": \"2022-02-20T20:13:10Z\", \"stargazers_count\": 33, \"topics\": [\"api-client\", \"healthchecksio\", \"monitor\"], \"last_fetched\": 1657362677.529197, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"131915802\": {\"repository_manifest\": {}, \"authors\": [\"@tenly2000\", \"@iantrich\"], \"category\": \"integration\", \"description\": \"Component to integrate with OpenStreetMap Reverse Geocode (PLACE)\", \"domain\": \"places\", \"etag_repository\": \"W/\\\"4b5faaa9a5ce14824637c52bc56cbca8051761c7cdec22b0d22bd64af5a62d19\\\"\", \"full_name\": \"custom-components/places\", \"last_updated\": \"2022-07-08T02:47:34Z\", \"stargazers_count\": 58, \"last_fetched\": 1657362680.588277, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"201805130\": {\"repository_manifest\": {\"name\": \"nordpool\", \"render_readme\": true}, \"authors\": [\"@hellowlol\"], \"category\": \"integration\", \"description\": \"nordpool sensor for ha.\", \"domain\": \"nordpool\", \"etag_repository\": \"W/\\\"1dddd837c9fa4f20326598da3a8fb42ab210110ebd86cdf6d948c69db6e649f7\\\"\", \"full_name\": \"custom-components/nordpool\", \"last_updated\": \"2022-06-29T22:17:08Z\", \"stargazers_count\": 127, \"topics\": [\"nordpool\"], \"last_fetched\": 1656859109.788265, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"176018567\": {\"repository_manifest\": {\"name\": \"gPodder\", \"render_readme\": true, \"zip_release\": true, \"hide_default_branch\": true, \"hacs\": \"0.19.0\", \"filename\": \"gpodder.zip\"}, \"authors\": [\"@iantrich\"], \"category\": \"integration\", \"description\": \"\\ud83c\\udfa7 gPodder Integration for Podcast Feed Monitoring\", \"domain\": \"gpodder\", \"downloads\": 261, \"etag_repository\": \"W/\\\"796bb09fce04c7df2dc3504b6834fdb6366335c81a90d25eb629f953cf6b08e7\\\"\", \"full_name\": \"custom-components/gpodder\", \"last_updated\": \"2021-06-05T21:16:30Z\", \"stargazers_count\": 11, \"last_fetched\": 1657362676.485116, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"184404372\": {\"repository_manifest\": {}, \"authors\": [\"@SebRut\"], \"category\": \"integration\", \"description\": null, \"domain\": \"qbo\", \"etag_repository\": \"W/\\\"25326cafd527a5b1a4c182637275b3f8f1ef1175f346aa104401ed963888eb1e\\\"\", \"full_name\": \"custom-components/qbo\", \"last_updated\": \"2019-05-26T13:38:57Z\", \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"209855108\": {\"repository_manifest\": {\"name\": \"linksys_ap\"}, \"category\": \"integration\", \"description\": \"The linksys_ap platform offers presence detection by looking at connected devices to a Linksys based access point.\", \"domain\": \"linksys_ap\", \"etag_repository\": \"W/\\\"97b25b23c86ec22a60c44348f803fe89bcc597e68d81bd188c788720c323c272\\\"\", \"full_name\": \"custom-components/linksys_ap\", \"last_updated\": \"2019-09-20T18:28:36Z\", \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"178101579\": {\"repository_manifest\": {}, \"authors\": [\"@MartyTremblay\"], \"category\": \"integration\", \"description\": \"hassio support for Airthings Wave BLE environmental radon sensor.\", \"domain\": \"airthings_wave\", \"etag_repository\": \"W/\\\"23b33cbb8f43c7e4599e0c0990e30361b0778ffd11b62a3985fd1c72838773fc\\\"\", \"full_name\": \"custom-components/sensor.airthings_wave\", \"last_updated\": \"2022-06-10T17:46:03Z\", \"stargazers_count\": 89, \"topics\": [\"airthings-wave\", \"bluetooth-low-energy\", \"btle\", \"environmental\", \"home-assistant-sensor\", \"radon\"], \"last_fetched\": 1656859113.229128, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"283847957\": {\"repository_manifest\": {\"name\": \"pyscript\", \"zip_release\": true, \"filename\": \"hass-custom-pyscript.zip\"}, \"authors\": [\"@craigbarratt\"], \"category\": \"integration\", \"description\": \"Pyscript adds rich Python scripting to HASS\", \"domain\": \"pyscript\", \"downloads\": 5029, \"etag_repository\": \"W/\\\"3d1153401f09906032df6223b5b290e441e7436b937c149f263dc6b17964c085\\\"\", \"full_name\": \"custom-components/pyscript\", \"last_updated\": \"2022-05-20T18:03:45Z\", \"stargazers_count\": 493, \"topics\": [\"jupyter\"], \"last_fetched\": 1656859110.307836, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"182915754\": {\"repository_manifest\": {\"name\": \"Grocy custom component\", \"render_readme\": true, \"zip_release\": true, \"hide_default_branch\": true, \"homeassistant\": \"2021.12.0\", \"filename\": \"grocy.zip\"}, \"authors\": [\"@SebRut\", \"@isabellaalstrom\"], \"category\": \"integration\", \"description\": \"Custom Grocy integration for Home Assistant\", \"domain\": \"grocy\", \"downloads\": 860, \"etag_repository\": \"W/\\\"bf580dd1475ce8ef20aa5da315e206653dc9d8901f26f83f0824811569115f44\\\"\", \"full_name\": \"custom-components/grocy\", \"last_updated\": \"2022-06-25T17:04:31Z\", \"stargazers_count\": 75, \"topics\": [\"grocy\"], \"last_fetched\": 1656859106.967205, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"173564471\": {\"repository_manifest\": {}, \"category\": \"integration\", \"description\": \"Improved file sensor component that let you read the whole last line content.\", \"domain\": \"file_restore\", \"etag_repository\": \"W/\\\"9716d3ccee28a0d4aed787ba848dba9d08c948455785ff4e73beed79505c0d36\\\"\", \"full_name\": \"custom-components/sensor.file_restore\", \"last_updated\": \"2021-03-20T08:09:50Z\", \"stargazers_count\": 10, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"174809046\": {\"repository_manifest\": {\"name\": \"Avanza Stock\", \"render_readme\": true}, \"authors\": [\"@claha\"], \"category\": \"integration\", \"description\": \"Custom component to get stock data from Avanza for Home Assistant\", \"domain\": \"avanza_stock\", \"etag_repository\": \"W/\\\"9782d34c8aa82bdadc40888875b162bf81034cb08d5b2593f77aca1098b6e36d\\\"\", \"full_name\": \"custom-components/sensor.avanza_stock\", \"last_updated\": \"2022-06-26T18:53:33Z\", \"stargazers_count\": 31, \"topics\": [\"funds\", \"stock\"], \"last_fetched\": 1656859114.032233, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"207110572\": {\"repository_manifest\": {\"name\": \"Avfallsor\", \"country\": [\"NOR\"], \"homeassistant\": \"0.96.0\", \"render_readme\": true}, \"authors\": [\"@hellowlol\"], \"category\": \"integration\", \"description\": \"Simple sensor for avfallsor\", \"domain\": \"avfallsor\", \"etag_repository\": \"W/\\\"495eacc6aaa2681a801440ca84b6a009b563ce9ef253e310a3bfdf695283884f\\\"\", \"full_name\": \"custom-components/sensor.avfallsor\", \"last_updated\": \"2022-02-06T14:29:45Z\", \"stargazers_count\": 6, \"last_fetched\": 1644420412.064174, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"145777833\": {\"repository_manifest\": {}, \"authors\": [\"@iantrich\"], \"category\": \"integration\", \"description\": \"\\ud83d\\udcb5 Personal Capital Integration for Bank Account Monitoring\", \"domain\": \"personalcapital\", \"etag_repository\": \"W/\\\"a14bc3cc7cf0584e0c9cacc9451f2a3891a952dee19a6d3cc2a447995ec87d11\\\"\", \"full_name\": \"custom-components/sensor.personalcapital\", \"last_updated\": \"2021-06-05T21:15:20Z\", \"stargazers_count\": 12, \"last_fetched\": 1641895547.723645, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"151550084\": {\"repository_manifest\": {}, \"authors\": [\"@glpatcern\"], \"category\": \"integration\", \"description\": \"A set of sensors to integrate the OWL Intuition devices network\", \"domain\": \"owlintuition\", \"etag_repository\": \"W/\\\"2be7cc81c7f3eb033b79f7a64b7b56a4c841557d0495dc2c32ea91a75c776bde\\\"\", \"full_name\": \"custom-components/sensor.owlintuition\", \"last_updated\": \"2022-05-07T13:58:07Z\", \"stargazers_count\": 10, \"last_fetched\": 1653229651.67981, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"195438291\": {\"repository_manifest\": {\"name\": \"Nintendo Wishlist\", \"render_readme\": true, \"homeassistant\": \"0.118.5\"}, \"authors\": [\"@boralyl\"], \"category\": \"integration\", \"description\": \"A sensor that monitors a Nintendo Switch wish list for when games are on sale.\", \"domain\": \"nintendo_wishlist\", \"etag_repository\": \"W/\\\"624d887073f78ee79ed78235be2af43701766613f1aeb1abf50e1d97ff225cdd\\\"\", \"full_name\": \"custom-components/sensor.nintendo_wishlist\", \"last_updated\": \"2022-03-04T04:11:54Z\", \"stargazers_count\": 11, \"topics\": [\"nintendo-switch\"], \"last_fetched\": 1656859116.034986, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"154845921\": {\"repository_manifest\": {}, \"authors\": [\"@jchasey\"], \"category\": \"integration\", \"description\": \"SSH Generic Sensor\", \"domain\": \"ssh\", \"etag_repository\": \"W/\\\"d46467a155ff0d14df09d4cef27fdde8fe983cebddde7bd295f355ea6658d373\\\"\", \"full_name\": \"custom-components/sensor.ssh\", \"last_updated\": \"2021-12-04T08:45:38Z\", \"stargazers_count\": 33, \"last_fetched\": 1656859115.950141, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"151580533\": {\"repository_manifest\": {}, \"authors\": [\"@jchasey\"], \"category\": \"integration\", \"description\": \"High level health status of UniFi Security Gateway devices via UniFi Controller\", \"domain\": \"unifigateway\", \"etag_repository\": \"W/\\\"6b8e98f9157114b38445abfae5f511440c5a3e57f0b34026bb2275fb9617ac63\\\"\", \"full_name\": \"custom-components/sensor.unifigateway\", \"last_updated\": \"2021-04-19T12:12:56Z\", \"stargazers_count\": 113, \"last_fetched\": 1656859119.2037, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"199888538\": {\"repository_manifest\": {\"name\": \"Stadtreinigung Hamburg\", \"country\": \"DE\", \"homeassistant\": \"0.109.0\", \"zip_release\": true, \"filename\": \"stadtreinigung_hamburg.zip\"}, \"authors\": [\"@vigonotion\"], \"category\": \"integration\", \"description\": \"Stadtreinigung Hamburg - get garbage collection dates in Hamburg - custom component for Home Assistant\", \"domain\": \"stadtreinigung_hamburg\", \"downloads\": 181, \"etag_repository\": \"W/\\\"2a11c5af1d5a55c0d80edf206526f3d1acf1f9bf05c0ed4284852ade8e920149\\\"\", \"full_name\": \"custom-components/sensor.stadtreinigung_hamburg\", \"last_updated\": \"2022-06-20T04:49:26Z\", \"stargazers_count\": 17, \"last_fetched\": 1657362686.89268, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"140146868\": {\"repository_manifest\": {}, \"authors\": [\"@iantrich\", \"@swetoast\"], \"category\": \"integration\", \"description\": \"\\ud83c\\udf7b Untappd Integration\", \"domain\": \"untappd\", \"etag_repository\": \"W/\\\"3218b78cd7b5be5de60f9ccef722b07cbcb0a68b9fceb634c35943701ebaeeb9\\\"\", \"full_name\": \"custom-components/sensor.untappd\", \"last_updated\": \"2022-01-01T08:31:44Z\", \"stargazers_count\": 34, \"topics\": [\"automations\", \"badges\", \"beer\", \"untappd\", \"untappd-api\"], \"last_fetched\": 1645380002.457484, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"146379582\": {\"repository_manifest\": {\"name\": \"Trakt\", \"homeassistant\": \"0.99.0\", \"render_readme\": true}, \"authors\": [\"@iantrich\", \"@engrbm\"], \"category\": \"integration\", \"description\": \"\\ud83d\\udcfa Trakt Integration for Upcoming Media Card\", \"domain\": \"trakt\", \"etag_repository\": \"W/\\\"a666125c6b263267b93b1fc267f566b2c0f45259e7e49645ada4a4f3b3e49742\\\"\", \"full_name\": \"custom-components/sensor.trakt\", \"last_updated\": \"2022-06-21T14:17:46Z\", \"stargazers_count\": 50, \"last_fetched\": 1656859117.317602, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"209855274\": {\"repository_manifest\": {\"name\": \"SRP Energy Sensor\", \"country\": [\"US\"]}, \"category\": \"integration\", \"description\": \"The srp_energy integration shows information from Srp hourly energy usage report for their customers\", \"domain\": \"srp_energy\", \"etag_repository\": \"W/\\\"a5bc02ffe772dbb7265185d5433d66486a64b9d74cdf4175b261ce82dc66264f\\\"\", \"full_name\": \"custom-components/srp_energy\", \"last_updated\": \"2020-12-16T23:22:01Z\", \"stargazers_count\": 2, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"171854441\": {\"repository_manifest\": {\"name\": \"youtube\", \"zip_release\": true, \"filename\": \"youtube.zip\", \"homeassistant\": \"2021.4.0\"}, \"authors\": [\"@ludeeus\"], \"category\": \"integration\", \"description\": \"A platform which give you info about the newest video on a channel\", \"domain\": \"youtube\", \"downloads\": 412, \"etag_repository\": \"W/\\\"b05a5aee4a40400d3cb74ac0c2d20f75d4846414a6e7c66397c76ac3b6a295ec\\\"\", \"full_name\": \"custom-components/youtube\", \"last_updated\": \"2022-07-05T19:30:44Z\", \"stargazers_count\": 32, \"topics\": [\"youtube\"], \"last_fetched\": 1657362691.996287, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"209855510\": {\"repository_manifest\": {\"name\": \"Sytadin\", \"country\": [\"FR\"]}, \"category\": \"integration\", \"description\": \"The sytadin sensor platform allows you to monitor traffic details from Sytadin\", \"domain\": \"sytadin\", \"etag_repository\": \"W/\\\"e350d94702ce10fe4acc0359969c2d99d719a4fe057775f6993380fd4ddd51ea\\\"\", \"full_name\": \"custom-components/sytadin\", \"last_updated\": \"2021-11-18T01:03:59Z\", \"stargazers_count\": 1, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"209855666\": {\"repository_manifest\": {\"name\": \"UPS\", \"country\": \"US\"}, \"category\": \"integration\", \"description\": \"The ups platform allows one to track deliveries by the UPS\", \"domain\": \"ups\", \"etag_repository\": \"W/\\\"622f024d995fbcff47c26ea78ba4ccfe3001dc3a10724ef250fe9d96117e23d9\\\"\", \"full_name\": \"custom-components/ups\", \"last_updated\": \"2021-05-19T10:28:06Z\", \"stargazers_count\": 4, \"last_fetched\": 1653229659.860422, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"139894340\": {\"repository_manifest\": {\"name\": \"Weatheralerts\", \"render_readme\": true, \"country\": \"US\"}, \"authors\": [\"@ludeeus\", \"@jlverhagen\"], \"category\": \"integration\", \"description\": \"A sensor that gives you weather alerts from alerts.weather.gov.\", \"domain\": \"weatheralerts\", \"etag_repository\": \"W/\\\"b51e8c5f88e34707cea26884d054fe25779022c63f47579d7a816b0d48cb820b\\\"\", \"full_name\": \"custom-components/weatheralerts\", \"last_updated\": \"2022-06-25T01:40:30Z\", \"stargazers_count\": 76, \"topics\": [\"weatheralerts\"], \"last_fetched\": 1657362692.019726, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"139894509\": {\"repository_manifest\": {\"name\": \"wienerlinien\", \"render_readme\": true, \"hacs\": \"0.19.0\"}, \"authors\": [\"@ludeeus\"], \"category\": \"integration\", \"description\": \"A sensor that give you information about next departure from spesified stop.\", \"domain\": \"wienerlinien\", \"etag_repository\": \"W/\\\"d3a4aa524548fe8a959b2f3a2eca3c48586244a992eede5dfb847b16a9d550ba\\\"\", \"full_name\": \"custom-components/wienerlinien\", \"last_updated\": \"2022-05-31T07:44:53Z\", \"stargazers_count\": 20, \"topics\": [\"wiener-linien\"], \"last_fetched\": 1656968130.964778, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"180651910\": {\"repository_manifest\": {}, \"authors\": [\"hellowlol\"], \"category\": \"integration\", \"description\": \"zaptec charger custom component for home assistant\", \"domain\": \"zaptec\", \"etag_repository\": \"W/\\\"20d9b2e576ba406e464f7d8dbe146a770d2e13785b13df5e4e3c23e2c6c6f31f\\\"\", \"full_name\": \"custom-components/zaptec\", \"last_updated\": \"2022-06-23T13:11:01Z\", \"stargazers_count\": 10, \"topics\": [\"api\", \"zaptec\"], \"last_fetched\": 1656859122.033362, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"228604799\": {\"repository_manifest\": {\"name\": \"Arpscan Device Tracker\", \"country\": \"NL\"}, \"authors\": [\"@cyberjunky\"], \"category\": \"integration\", \"description\": \"This component tracks devices using the arp-scan liinux command, it's very fast, and reasonably accurate.\", \"domain\": \"arpscan_tracker\", \"etag_repository\": \"W/\\\"01d748b61405d54215d91b14e27d513fc3f718ad283a16697e7f654ed716589e\\\"\", \"full_name\": \"cyberjunky/home-assistant-arpscan_tracker\", \"last_updated\": \"2021-02-21T17:03:43Z\", \"stargazers_count\": 16, \"last_fetched\": 1653229662.979436, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"228649088\": {\"repository_manifest\": {\"name\": \"P2000 Sensor\", \"country\": \"NL\"}, \"authors\": [\"@cyberjunky\"], \"category\": \"integration\", \"description\": \":fire_engine: This component tracks P2000 emergency events in The Netherlands.\", \"domain\": \"p2000\", \"etag_repository\": \"W/\\\"da1fd2bd04b0846f603ee252bece0e266734d7d51152a1cf8853b8e2d4dfdd09\\\"\", \"full_name\": \"cyberjunky/home-assistant-p2000\", \"last_updated\": \"2022-01-03T08:22:55Z\", \"stargazers_count\": 40, \"topics\": [\"emergency\", \"p2000\"], \"last_fetched\": 1656859125.584615, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"228618998\": {\"repository_manifest\": {\"name\": \"Plugwise\", \"country\": [\"NL\"]}, \"authors\": [\"@cyberjunky\"], \"category\": \"integration\", \"description\": \":electric_plug: This component can read values from and control Plugwise circles and plugs.\", \"domain\": \"plugwise\", \"etag_repository\": \"W/\\\"680d99964c3533ae6aa8de3976e9975049add5e75ceeaf05dd4e84101233e42b\\\"\", \"full_name\": \"cyberjunky/home-assistant-plugwise\", \"last_updated\": \"2020-07-08T06:34:47Z\", \"stargazers_count\": 2, \"topics\": [\"plugwise\", \"power\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"228627470\": {\"repository_manifest\": {\"name\": \"HVCGroep\", \"country\": \"NL\"}, \"authors\": [\"@cyberjunky\"], \"category\": \"integration\", \"description\": \":recycle: :wastebasket: This component fetches garbage pickup dates for parts of The Netherlands using HVC Groep's REST API.\", \"domain\": \"hvcgroep\", \"etag_repository\": \"W/\\\"57479a8d1020b2948b67651fc8fd14d78a088beb715a3cb30532d5282b8b6368\\\"\", \"full_name\": \"cyberjunky/home-assistant-hvcgroep\", \"last_updated\": \"2022-05-03T05:47:55Z\", \"stargazers_count\": 9, \"last_fetched\": 1653229663.911464, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"228662926\": {\"repository_manifest\": {\"name\": \"Toon Climate\", \"country\": [\"NL\"]}, \"authors\": [\"@cyberjunky\"], \"category\": \"integration\", \"description\": \"This component provides a climate device for rooted Toon thermostats.\", \"domain\": \"toon_climate\", \"etag_repository\": \"W/\\\"b897017d137103331ef9bbeebad38f30b8ad6de36488e14d115735031b5c8ebe\\\"\", \"full_name\": \"cyberjunky/home-assistant-toon_climate\", \"last_updated\": \"2022-02-03T10:49:03Z\", \"stargazers_count\": 23, \"last_fetched\": 1646496840.183337, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"228685436\": {\"repository_manifest\": {\"name\": \"Toon Boiler Status\"}, \"authors\": [\"@cyberjunky\"], \"category\": \"integration\", \"description\": \"This component reads and displays the boiler status values from a rooted Toon thermostat.\", \"domain\": \"toon_boilerstatus\", \"etag_repository\": \"W/\\\"1f274a8c8e848168c4ff80f6c8277ae0370f06677f10f90f334d628425747180\\\"\", \"full_name\": \"cyberjunky/home-assistant-toon_boilerstatus\", \"last_updated\": \"2022-02-03T10:47:45Z\", \"stargazers_count\": 8, \"topics\": [\"cv\", \"opentherm\", \"toon\"], \"last_fetched\": 1644420413.322707, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"228678807\": {\"repository_manifest\": {\"name\": \"Toon Smart Meter\", \"country\": [\"NL\"]}, \"authors\": [\"@cyberjunky\"], \"category\": \"integration\", \"description\": \"This component reads and displays sensor values from the meteradapter connected to a rooted Toon thermostat.\", \"domain\": \"toon_smartmeter\", \"etag_repository\": \"W/\\\"2216ab8a3725ee246f4a1e92b4322d3c6b58c64ed898a9d016da24ba9029507b\\\"\", \"full_name\": \"cyberjunky/home-assistant-toon_smartmeter\", \"last_updated\": \"2022-02-01T16:04:08Z\", \"stargazers_count\": 12, \"last_fetched\": 1644420413.465108, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"228690854\": {\"repository_manifest\": {\"name\": \"TTN Gateway Sensor\", \"country\": \"NL\"}, \"authors\": [\"@cyberjunky\"], \"category\": \"integration\", \"description\": \"This components reads statistics from a The Things Network Gateway.\", \"domain\": \"ttn_gateway\", \"etag_repository\": \"W/\\\"1e83dda384aa58268644570a08c298cbc19d5282008c105d483a6028ab793547\\\"\", \"full_name\": \"cyberjunky/home-assistant-ttn_gateway\", \"last_updated\": \"2021-12-18T16:52:03Z\", \"stargazers_count\": 2, \"last_fetched\": 1656859128.161735, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"258796304\": {\"repository_manifest\": {\"name\": \"Hue Service Advanced\", \"country\": [\"FR\"], \"homeassistant\": \"0.109\"}, \"authors\": [\"@cyr-ius\"], \"category\": \"integration\", \"description\": \"Service to set motion's sensors and change scan intervall for remotes and motions\", \"domain\": \"hueserviceadvanced\", \"etag_repository\": \"W/\\\"114ee483a4d914bdf8037ccffc19363dba8f219d898c67ce232f54d8d740af6b\\\"\", \"full_name\": \"Cyr-ius/hass-hue-service-advanced\", \"last_updated\": \"2021-06-06T00:45:33Z\", \"stargazers_count\": 6, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"220661494\": {\"repository_manifest\": {\"name\": \"Orange Livebox routeur\", \"country\": \"FR\", \"homeassistant\": \"0.109\"}, \"authors\": [\"@cyr-ius\"], \"category\": \"integration\", \"description\": \"Livebox Component for Home assistant\", \"domain\": \"livebox\", \"etag_repository\": \"W/\\\"35c775f060563d8278f8938088a893e7cd1d5e4490303161ecb3f94684c33079\\\"\", \"full_name\": \"Cyr-ius/hass-livebox-component\", \"last_updated\": \"2022-06-22T21:40:39Z\", \"stargazers_count\": 25, \"topics\": [\"livebox\", \"orange\"], \"last_fetched\": 1656859131.59214, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"297379398\": {\"repository_manifest\": {\"name\": \"Tractive\"}, \"authors\": [\"@danielhiversen\"], \"category\": \"integration\", \"description\": \"Custom component for Tractive\", \"domain\": \"tractive\", \"etag_repository\": \"W/\\\"2deb199864b1ceec2c14fe501499f62cc85879c9a7b7a1a5a68cf218557adf12\\\"\", \"full_name\": \"Danielhiversen/home_assistant_tractive\", \"last_updated\": \"2021-12-20T09:30:02Z\", \"stargazers_count\": 32, \"topics\": [\"tractive\"], \"last_fetched\": 1656859134.28989, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"293843053\": {\"repository_manifest\": {\"name\": \"Adax heaters\"}, \"authors\": [\"@danielhiversen\"], \"category\": \"integration\", \"description\": \"Integration for Adax heaters\", \"domain\": \"adax\", \"etag_repository\": \"W/\\\"625506ed2c76dde8c709e432a9ee0e5028ddae4ed3a9c7dabf8affdd0070f080\\\"\", \"full_name\": \"Danielhiversen/home_assistant_adax\", \"last_updated\": \"2021-04-28T05:30:29Z\", \"stargazers_count\": 24, \"topics\": [\"adax\", \"adax-heaters\"], \"last_fetched\": 1648399896.967638, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"158194879\": {\"repository_manifest\": {\"name\": \"Entity Controller\", \"homeassistant\": \"0.117.0\"}, \"authors\": [\"@danobot\"], \"category\": \"integration\", \"description\": \"Entity and lighting controller for managing devices via timers, scripts, and sun-based time restrictions.\", \"domain\": \"entity_controller\", \"etag_repository\": \"W/\\\"58f025f69f0797812eb8ac9b576a2d2a33a94b26ff00773c4bbc393532a1b0ac\\\"\", \"full_name\": \"danobot/entity-controller\", \"last_updated\": \"2022-07-01T09:50:01Z\", \"stargazers_count\": 187, \"topics\": [\"finite-state-machine\", \"internet-of-things\", \"iot\", \"lighting-controller\", \"motion-light\", \"motion-sensor\", \"smart-home\"], \"last_fetched\": 1657362703.733326, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"195459345\": {\"repository_manifest\": {\"name\": \"Climate Group\", \"render_readme\": true, \"homeassistant\": \"0.96.0\"}, \"authors\": [\"@daenny\"], \"category\": \"integration\", \"description\": \"Home Assistant Climate Group\", \"domain\": \"climate_group\", \"etag_repository\": \"W/\\\"b45c70f2531b81a23a439a937ce95700c880597630e0a0255bc45001493b1232\\\"\", \"full_name\": \"daenny/climate_group\", \"last_updated\": \"2022-05-17T18:32:34Z\", \"stargazers_count\": 68, \"last_fetched\": 1656859131.560937, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"224001103\": {\"repository_manifest\": {\"name\": \"Cozytouch\", \"country\": \"FR\", \"homeassistant\": \"0.109\"}, \"authors\": [\"@biker91620\", \"@cyr-ius\"], \"category\": \"integration\", \"description\": \"Cozytouch support for Home Assistant\", \"domain\": \"cozytouch\", \"etag_repository\": \"W/\\\"764fdd9471fa0e038d44c2ddf0b5beb30a46776ebf0309c9d2dae22a6ab00655\\\"\", \"full_name\": \"Cyr-ius/hass-cozytouch\", \"last_updated\": \"2022-06-11T11:20:20Z\", \"stargazers_count\": 23, \"topics\": [\"atlantic\", \"cozytouch\"], \"last_fetched\": 1656859128.483222, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"203736221\": {\"repository_manifest\": {\"name\": \"Uponor Uhome integration\", \"render_readme\": true}, \"authors\": [\"@almirdelkic\", \"@dave-code-ruiz\", \"@LordMike\"], \"category\": \"integration\", \"description\": \"Custom Component to connect Home Assistant with Uhome Uponor Smatrix App\", \"domain\": \"uhomeuponor\", \"etag_repository\": \"W/\\\"ad2617ca62b10e52a3d21598d519516151c9648f78c12152d9701691fdd044d5\\\"\", \"full_name\": \"dave-code-ruiz/uhomeuponor\", \"last_updated\": \"2022-06-22T05:56:25Z\", \"stargazers_count\": 10, \"topics\": [\"gateway\", \"rest-api\", \"setpoint\", \"smatrix\", \"smatrixwaveplus\", \"thermostat\", \"uponor\"], \"last_fetched\": 1656859137.688895, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"201457186\": {\"repository_manifest\": {\"name\": \"Mylar Sensor Card\", \"render_readme\": true}, \"authors\": [\"@darksir23\"], \"category\": \"integration\", \"description\": \"HomeAssistant Sensor for Mylar (Compatible with Upcoming Meda Card)\", \"domain\": \"mylar\", \"etag_repository\": \"W/\\\"e5632177f97a47539d4a2480308448f80de0e588d4b42b3e893062c48f552314\\\"\", \"full_name\": \"WillowMist/sensor.mylar\", \"last_updated\": \"2019-11-23T19:10:34Z\", \"stargazers_count\": 2, \"topics\": [\"media-card\", \"mylar\"], \"last_fetched\": 1642943792.299242, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"160218749\": {\"repository_manifest\": {\"name\": \"Home Connect\", \"homeassistant\": \"0.102\", \"render_readme\": true}, \"authors\": [\"@DavidMStraub\"], \"category\": \"integration\", \"description\": \"Custom component for Home Assistant to connect appliances supporting the Home Connect standard\", \"domain\": \"home_connect_beta\", \"etag_repository\": \"W/\\\"515ffd784eecd49b4f92db6a3b730759207c19f33d0f333f76b362fd4183c0bf\\\"\", \"full_name\": \"DavidMStraub/homeassistant-homeconnect\", \"last_updated\": \"2022-02-17T07:29:31Z\", \"stargazers_count\": 121, \"topics\": [\"homeconnect\"], \"last_fetched\": 1656859138.165305, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"266557774\": {\"repository_manifest\": {\"name\": \"proscenic 790T vacuum\", \"homeassistant\": \"2021.7.4\", \"render_readme\": true}, \"authors\": [\"deblockt\"], \"category\": \"integration\", \"description\": \"proscenic 790T intergration for home assistant\", \"domain\": \"proscenic\", \"downloads\": 3, \"etag_repository\": \"W/\\\"bfb3583228295d6ce70fd8a6142f24ffcc28285b129e2ae96d3bd295c7ca1030\\\"\", \"full_name\": \"deblockt/hass-proscenic-790T-vacuum\", \"last_updated\": \"2022-04-19T06:00:21Z\", \"stargazers_count\": 13, \"topics\": [\"790t\", \"proscenic\", \"vacuum\", \"vacuum-cleaner\"], \"last_fetched\": 1653229677.613616, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"283518438\": {\"repository_manifest\": {\"name\": \"RHVoice\", \"render_readme\": true}, \"authors\": [\"@definitio\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for RHVoice - a local text-to-speech engine.\", \"domain\": \"rhvoice\", \"etag_repository\": \"W/\\\"fce7f00155e8bfae34e60c1045951614a0633acf561c61179fc7900b06ba8050\\\"\", \"full_name\": \"definitio/ha-rhvoice\", \"last_updated\": \"2021-12-25T14:29:22Z\", \"stargazers_count\": 26, \"topics\": [\"rhvoice\", \"smarthome\", \"tts\"], \"last_fetched\": 1656859140.914077, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"283243425\": {\"repository_manifest\": {\"name\": \"SoX\", \"render_readme\": true}, \"authors\": [\"@definitio\"], \"category\": \"integration\", \"description\": \"A Home Assistant integration to turn your vacuum into an audio player.\", \"domain\": \"sox\", \"etag_repository\": \"W/\\\"4a83e51742752f64be7db257dd5d2dba704e97749956625192de5280b05645c2\\\"\", \"full_name\": \"definitio/ha-sox\", \"last_updated\": \"2022-05-20T17:54:52Z\", \"stargazers_count\": 12, \"topics\": [\"audio-player\", \"roborock\", \"robot-vacuum\", \"smarthome\", \"vacuum\", \"xiaomi\"], \"last_fetched\": 1653229679.357254, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"255139072\": {\"repository_manifest\": {\"name\": \"Entidade Reguladora dos Servi\\u00e7os Energ\\u00e9ticos\", \"country\": \"PT\", \"homeassistant\": \"2022.4.0\", \"render_readme\": true}, \"authors\": [\"@dgomes\"], \"category\": \"integration\", \"description\": \"Home Assistant Custom Component for ERSE\", \"domain\": \"erse\", \"etag_repository\": \"W/\\\"b3617ea126f1dad0284f97eb9aab78f64d45479aa81ed0a213fcc51c9547f190\\\"\", \"full_name\": \"dgomes/ha_erse\", \"last_updated\": \"2022-05-09T14:30:17Z\", \"stargazers_count\": 24, \"topics\": [\"home-assistant-component\", \"utility-meters\"], \"last_fetched\": 1656859142.218399, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"163322610\": {\"repository_manifest\": {\"name\": \"Panasonic Comfort Cloud HA component\", \"homeassistant\": \"0.110.0\"}, \"authors\": [\"Djbulsink\", \"SeraphimSerapis\"], \"category\": \"integration\", \"description\": \"Panasonic Comfort Cloud HA component\", \"domain\": \"panasonic_ac\", \"etag_repository\": \"W/\\\"39793d793e3870fab4ff8bde43387eddf0b1bae89a2cd81e82640a4253f17f19\\\"\", \"full_name\": \"djbulsink/panasonic_ac\", \"last_updated\": \"2021-07-18T13:30:47Z\", \"stargazers_count\": 26, \"last_fetched\": 1656859144.148926, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"177469955\": {\"repository_manifest\": {\"name\": \"Mitsubishi Kumo Cloud\", \"render_readme\": true, \"homeassistant\": \"0.96.0\"}, \"authors\": [\"@dlarrick\"], \"category\": \"integration\", \"description\": \"Home Assistant module interfacing with Mitsubishi mini-split units\", \"domain\": \"kumo\", \"etag_repository\": \"W/\\\"3ca70a17c0ba83364527fb10856e4af4d3fb1b14e781dca7cc8c892ebd7652b5\\\"\", \"full_name\": \"dlarrick/hass-kumo\", \"last_updated\": \"2022-07-02T17:29:44Z\", \"stargazers_count\": 47, \"topics\": [\"climate\", \"kumo\", \"kumocloud\", \"mini-split\", \"mitsubishi\"], \"last_fetched\": 1656859148.464756, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"291751884\": {\"repository_manifest\": {\"name\": \"SpaceX Next Launch and Starman\", \"country\": \"CA\", \"homeassistant\": \"0.115.0\"}, \"authors\": [\"@djtimca\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for SpaceX Next Launch and Starman data.\", \"domain\": \"spacex\", \"etag_repository\": \"W/\\\"1a414ab6585fbe1fe9140ca1be70b80d6fdf72897598d925c4fc3994e97d5e3b\\\"\", \"full_name\": \"djtimca/HASpaceX\", \"last_updated\": \"2022-06-21T15:11:37Z\", \"stargazers_count\": 27, \"topics\": [\"home-assistant-component\", \"home-assistant-sensor\", \"spacex\", \"spacex-launches\"], \"last_fetched\": 1656859147.171012, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"229014136\": {\"repository_manifest\": {\"name\": \"MyJDownloader\", \"render_readme\": true, \"homeassistant\": \"2022.4.0b0\"}, \"authors\": [\"doudz\"], \"category\": \"integration\", \"description\": \"myjdownloader integration for home assistant\", \"domain\": \"myjdownloader\", \"etag_repository\": \"W/\\\"d6b6fda16e8b1cbd5925cebde1cef387f072e2b2c33e38c85dfef006f67e502c\\\"\", \"full_name\": \"doudz/homeassistant-myjdownloader\", \"last_updated\": \"2022-05-22T11:14:07Z\", \"stargazers_count\": 19, \"last_fetched\": 1656859151.763414, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"188698828\": {\"repository_manifest\": {\"country\": [\"RU\", \"BY\"], \"homeassistant\": \"2022.5\", \"name\": \"Yandex Smart Home\", \"render_readme\": true}, \"category\": \"integration\", \"description\": \"Adds support for Yandex Smart Home (Alice voice assistant) into Home Assistant\", \"domain\": \"yandex_smart_home\", \"etag_repository\": \"W/\\\"a55906d6a52f764e5c77bcf65ccf84a8c149d4f713613fd0a069fc67b95602e9\\\"\", \"full_name\": \"dext0r/yandex_smart_home\", \"last_updated\": \"2022-07-01T20:27:27Z\", \"stargazers_count\": 526, \"topics\": [\"alice\", \"home-assistant-component\", \"voice-assistant\", \"yandex\"], \"last_fetched\": 1656859150.74812, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"200073618\": {\"repository_manifest\": {}, \"authors\": [\"@dlashua\"], \"category\": \"integration\", \"description\": \"Add template binary_sensors from the UI.\", \"domain\": \"templatebinarysensor\", \"etag_repository\": \"W/\\\"bff79847f43ac62020e1807780ff05b9120ff6f5e53a481a673668b229c792a7\\\"\", \"full_name\": \"dlashua/templatebinarysensor\", \"last_updated\": \"2021-11-11T12:35:12Z\", \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"267076188\": {\"repository_manifest\": {\"name\": \"Gigaset Elements\", \"render_readme\": \"true\", \"homeassistant\": \"2022.5.0\"}, \"authors\": [\"@dynasticorpheus\"], \"category\": \"integration\", \"description\": \"Gigaset Smart Home integration for Home Assistant\", \"domain\": \"gigasetelements\", \"etag_repository\": \"W/\\\"c734356b769b1d706a0582868e9c9583b5596af7d3ee29090864184d22dc11d7\\\"\", \"full_name\": \"dynasticorpheus/gigasetelements-ha\", \"last_updated\": \"2022-05-13T19:20:01Z\", \"stargazers_count\": 13, \"topics\": [\"community\", \"gigaset\", \"gigasetelements\", \"python3\", \"smarthome\"], \"last_fetched\": 1653229695.792117, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"250345421\": {\"repository_manifest\": {\"name\": \"Folding@HomeControl\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@eifinger\"], \"category\": \"integration\", \"description\": \"Homeassistant integration for FoldingAtHomeControl\", \"domain\": \"foldingathomecontrol\", \"etag_repository\": \"W/\\\"8fcfa52685111da25a92728007bb84786565ae45d0e04a7ad332c690860edc5e\\\"\", \"full_name\": \"eifinger/hass-foldingathomecontrol\", \"last_updated\": \"2022-01-10T17:17:08Z\", \"stargazers_count\": 14, \"topics\": [\"asyncio\", \"folding-at-home\", \"foldingathome\", \"python3\"], \"last_fetched\": 1641895576.742688, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"206574936\": {\"repository_manifest\": {\"name\": \"SIA\"}, \"authors\": [\"@eavanvalkenburg\"], \"category\": \"integration\", \"description\": \"SIA alarm systems integration into Home Assistant\", \"domain\": \"sia\", \"etag_repository\": \"W/\\\"ff491531cf4d817202289bc3737a1cf39eaa38a38f83a0b8abcad3a7b5ee3ef5\\\"\", \"full_name\": \"eavanvalkenburg/sia\", \"last_updated\": \"2021-10-20T15:19:04Z\", \"stargazers_count\": 48, \"last_fetched\": 1653229696.976627, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"202322117\": {\"repository_manifest\": {\"name\": \"open_route_service\"}, \"authors\": [\"@eifinger\"], \"category\": \"integration\", \"description\": \"Custom Component for Homeassistant Providing Travel Time Information using openrouteservice.org\", \"domain\": \"open_route_service\", \"etag_repository\": \"W/\\\"35da629e5d450ff343441f12b1c8d290a23b26622dce983882f99cce8b3c6bc5\\\"\", \"full_name\": \"eifinger/open_route_service\", \"last_updated\": \"2022-01-06T14:24:36Z\", \"stargazers_count\": 10, \"topics\": [\"open-route-service\", \"python3\"], \"last_fetched\": 1641587703.063702, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"213959778\": {\"repository_manifest\": {\"name\": \"Dahua VTO Integration\"}, \"authors\": [\"@elad-bar\"], \"category\": \"integration\", \"description\": \"Dahua VTO Integration\", \"domain\": \"dahuavto\", \"etag_repository\": \"W/\\\"9fd1e7caa0eced00e8e9c2e4a7567465465b701706fc1f65624c0c526f507aaf\\\"\", \"full_name\": \"elad-bar/ha-dahuavto\", \"last_updated\": \"2020-10-01T10:34:46Z\", \"stargazers_count\": 6, \"last_fetched\": 1657362730.3138, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"169641362\": {\"repository_manifest\": {\"name\": \"BlueIris NVR\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@elad-bar\"], \"category\": \"integration\", \"description\": \"Integration with Blue Iris Video Security Software\", \"domain\": \"blueiris\", \"etag_repository\": \"W/\\\"3e7a26876d1a0400baeb78d82991d3a72cdd0fc411cac7541fdcbfe4f67a9fa2\\\"\", \"full_name\": \"elad-bar/ha-blueiris\", \"last_updated\": \"2022-06-13T13:12:59Z\", \"stargazers_count\": 120, \"last_fetched\": 1656859164.764342, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"220482107\": {\"repository_manifest\": {\"name\": \"HP Printers Integration\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@elad-bar\"], \"category\": \"integration\", \"description\": \"HP Printer Integration\", \"domain\": \"hpprinter\", \"etag_repository\": \"W/\\\"a17bdfc72102fa160a3c08036872048e5d0d623bfb50e8d6844e9bd375e83056\\\"\", \"full_name\": \"elad-bar/ha-hpprinter\", \"last_updated\": \"2022-04-24T06:47:33Z\", \"stargazers_count\": 62, \"topics\": [\"hp\", \"hp-printer\"], \"last_fetched\": 1653229704.086285, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"169467285\": {\"repository_manifest\": {\"name\": \"EdgeOS (Ubiquiti)\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@elad-bar\"], \"category\": \"integration\", \"description\": \"Integration with EdgeOS (Ubiquiti)\", \"domain\": \"edgeos\", \"etag_repository\": \"W/\\\"77e2eae64f922780df89f179594dd0d171f657b3a969647fc69ea2a7daf5b643\\\"\", \"full_name\": \"elad-bar/ha-edgeos\", \"last_updated\": \"2022-06-13T12:06:13Z\", \"stargazers_count\": 94, \"topics\": [\"edgeos\"], \"last_fetched\": 1657362730.663833, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"177169766\": {\"repository_manifest\": {\"name\": \"Wattbox\", \"homeassistant\": \"2022.3.0\"}, \"authors\": [\"@eseglem\"], \"category\": \"integration\", \"description\": \"Home Assistant WattBox Component\", \"domain\": \"wattbox\", \"etag_repository\": \"W/\\\"9c5e404e4f7304b33cb5e13bc1b3d103391b5ab4753a206d7b9712961e332512\\\"\", \"full_name\": \"eseglem/hass-wattbox\", \"last_updated\": \"2022-03-16T04:21:01Z\", \"stargazers_count\": 6, \"topics\": [\"battery\", \"ups\", \"wattbox\"], \"last_fetched\": 1653229706.327842, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"255073429\": {\"repository_manifest\": {\"name\": \"LG Hombot Vacuum Cleaner\", \"homeassistant\": \"0.108.0\"}, \"authors\": [\"@ericpignet\"], \"category\": \"integration\", \"description\": \"LG Hombot/Roboking Component for Home Assistant.\", \"domain\": \"lg_hombot\", \"etag_repository\": \"W/\\\"c38b0b34fdadaf393bbce6afdff4b79cf9f5a7592415af3248495f3824845fe5\\\"\", \"full_name\": \"ericpignet/home-assistant-lg_hombot\", \"last_updated\": \"2021-06-21T01:02:21Z\", \"stargazers_count\": 4, \"topics\": [\"hombot\", \"home-assistant-component\", \"roboking\"], \"last_fetched\": 1644420415.591909, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"213950645\": {\"repository_manifest\": {\"name\": \"ElkoEP Lara\", \"render_readme\": true}, \"category\": \"integration\", \"description\": \"Support for interface with an ElkoEP Lara devices\", \"domain\": \"elkoep_lara\", \"etag_repository\": \"W/\\\"54500ef736fc18bbed9c87e01922208f09e663038315b485e5b48a9a59fa3f40\\\"\", \"full_name\": \"exKAjFASH/media_player.elkoep_lara\", \"last_updated\": \"2022-02-09T10:37:17Z\", \"last_fetched\": 1644420415.763067, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"262140617\": {\"repository_manifest\": {\"name\": \"Read Your Meter\", \"country\": \"IL\", \"homeassistant\": \"0.106.0\"}, \"authors\": [\"@eyalcha\"], \"category\": \"integration\", \"description\": \"Home Assistant sensor to read water meter\", \"domain\": \"read_your_meter\", \"etag_repository\": \"W/\\\"bf6ca4ffbb90f01afb8235437e030bb071365a5d88cda46a03c77a7e519eb975\\\"\", \"full_name\": \"eyalcha/read_your_meter\", \"last_updated\": \"2022-06-10T03:43:54Z\", \"stargazers_count\": 28, \"last_fetched\": 1657362738.706825, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"261291147\": {\"repository_manifest\": {\"name\": \"Thermal\", \"homeassistant\": \"0.106.0\"}, \"authors\": [\"@eyalcha\"], \"category\": \"integration\", \"description\": \"Thermal camera for Home Assistant\", \"domain\": \"thermal\", \"etag_repository\": \"W/\\\"df08b9fc18841f3ccd89f8f9278338d1d800af0b976f35768003c8ef355276a8\\\"\", \"full_name\": \"eyalcha/thermal\", \"last_updated\": \"2021-06-24T00:05:39Z\", \"stargazers_count\": 25, \"topics\": [\"camera\"], \"last_fetched\": 1653229710.49098, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"290436986\": {\"repository_manifest\": {\"name\": \"\\u5f69\\u4e91\\u5929\\u6c14\", \"render_readme\": true, \"homeassistant\": \"0.99.9\", \"country\": [\"CN\"]}, \"authors\": [\"@fineemb\"], \"category\": \"integration\", \"description\": \"\\u7528\\u4e8eHASS\\u7684\\u5f69\\u4e91\\u5929\\u6c14\\u7ec4\\u4ef6\", \"domain\": \"colorfulclouds\", \"etag_repository\": \"W/\\\"97077d26425e77ebb0aeeb7f6f9e6b2b260dc5b199a98b134736af8483c8c8f3\\\"\", \"full_name\": \"fineemb/Colorfulclouds-weather\", \"last_updated\": \"2022-06-06T22:33:46Z\", \"stargazers_count\": 55, \"topics\": [\"weather\"], \"last_fetched\": 1656859174.715669, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"237880993\": {\"repository_manifest\": {\"name\": \"Smartmi smart heater\", \"render_readme\": true, \"homeassistant\": \"0.99.9\", \"country\": [\"CN\"]}, \"authors\": [\"@fineemb\"], \"category\": \"integration\", \"description\": \"\\u667a\\u7c73\\u667a\\u80fd\\u7535\\u6696\\u5668\", \"domain\": \"miheater\", \"etag_repository\": \"W/\\\"998f5463681275738a579d0f61d821b9bdac7d247e1996437392487b3b1a6c4a\\\"\", \"full_name\": \"fineemb/Smartmi-smart-heater\", \"last_updated\": \"2022-01-24T19:11:33Z\", \"stargazers_count\": 17, \"last_fetched\": 1646496883.594532, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"296320952\": {\"repository_manifest\": {\"name\": \"\\u5c0f\\u7c73\\u4e91\\u670d\\u52a1\", \"render_readme\": true, \"homeassistant\": \"0.99.9\", \"country\": [\"CN\"]}, \"authors\": [\"@fineemb\"], \"category\": \"integration\", \"description\": \"HASS\\u7684\\u5c0f\\u7c73\\u4e91\\u670d\\u52a1\\u96c6\\u6210\", \"domain\": \"xiaomi_cloud\", \"etag_repository\": \"W/\\\"4cad1fafd374d3d0ca3a97f869821a187fda45404f95bb805b6b714f513c2e29\\\"\", \"full_name\": \"fineemb/xiaomi-cloud\", \"last_updated\": \"2022-05-16T04:02:11Z\", \"stargazers_count\": 31, \"topics\": [\"cloud\", \"xiaomi\"], \"last_fetched\": 1657362741.650664, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"229060565\": {\"repository_manifest\": {\"name\": \"Xiaomi Mijia Multifunctional MJYSH01YM\", \"render_readme\": true, \"homeassistant\": \"0.99.9\"}, \"authors\": [\"@fineemb\"], \"category\": \"integration\", \"description\": \"\\u5c0f\\u7c73\\u517b\\u751f\\u58f6\", \"domain\": \"health_pot\", \"etag_repository\": \"W/\\\"71de934014c7fc7fa82981c85abbb4e1d5156b1ddf938f7e9fa2db22660f2062\\\"\", \"full_name\": \"fineemb/Xiaomi-Smart-Multipurpose-Kettle\", \"last_updated\": \"2022-03-07T18:33:54Z\", \"stargazers_count\": 4, \"last_fetched\": 1648399934.939828, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"285560672\": {\"repository_manifest\": {\"name\": \"Deutscher Wetterdienst\"}, \"authors\": [\"@FL550\"], \"category\": \"integration\", \"description\": \"Deutscher Wetterdienst integration for Home-Assistant\", \"domain\": \"dwd_weather\", \"etag_repository\": \"W/\\\"2e9b120f01fa0e35fbaccdbb81cd0fc8bf1dad624984654b3fff969ea27946bf\\\"\", \"full_name\": \"FL550/dwd_weather\", \"last_updated\": \"2022-06-18T10:24:54Z\", \"stargazers_count\": 79, \"topics\": [\"deutscher-wetterdienst\", \"dwd\", \"dwd-weather\", \"weather\", \"weather-entity\", \"weather-forecast\"], \"last_fetched\": 1657362744.827269, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"220685552\": {\"repository_manifest\": {\"name\": \"Popular Times\", \"render_readme\": true}, \"authors\": [\"@freakshock88\"], \"category\": \"integration\", \"description\": \"Custom component for Home Assistant which generates a sensor to show popularity for a google maps place.\", \"domain\": \"populartimes\", \"etag_repository\": \"W/\\\"94f43bf2f0f8138effa321253447a2d2997f2f100564cc186680c070779d1cd2\\\"\", \"full_name\": \"freakshock88/hass-populartimes\", \"last_updated\": \"2022-05-13T14:26:43Z\", \"stargazers_count\": 20, \"topics\": [\"google-maps\", \"google-places-api\"], \"last_fetched\": 1656859180.318624, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"226707533\": {\"repository_manifest\": {\"name\": \"ltss\"}, \"authors\": [\"@freol35241\"], \"category\": \"integration\", \"description\": \"Long time state storage (LTSS) custom component for Home Assistant using Timescale DB\", \"domain\": \"ltss\", \"etag_repository\": \"W/\\\"3c01f6fdf33883905d5bea6afe50b56b936d25c963f8f6f1d7c16ad3fa330755\\\"\", \"full_name\": \"freol35241/ltss\", \"last_updated\": \"2022-04-02T19:15:30Z\", \"stargazers_count\": 39, \"topics\": [\"database\", \"ltss\", \"state-storage\", \"storage\", \"timescaledb\"], \"last_fetched\": 1653824698.041124, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"217507414\": {\"repository_manifest\": {\"name\": \"Yeelight ven fan\", \"render_readme\": true, \"homeassistant\": \"0.99.9\"}, \"authors\": [\"@fineemb\"], \"category\": \"integration\", \"description\": \"\\u63a5\\u5165Hass\\u7684\\u51c9\\u9738\\u7ec4\\u4ef6\", \"domain\": \"yeelink\", \"etag_repository\": \"W/\\\"169142bd6f57f510ea02d62f7a36e5ce83e4b5e6bc8156f33881f813ad972b50\\\"\", \"full_name\": \"fineemb/Yeelink-ven-fan\", \"last_updated\": \"2020-01-31T15:57:47Z\", \"stargazers_count\": 5, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"264655935\": {\"repository_manifest\": {\"name\": \"Entities Calendar\"}, \"authors\": [\"@gadgetchnnel\"], \"category\": \"integration\", \"description\": \"A custom component for Home Assistant to allow regular entities to be used as a calendar\", \"domain\": \"entities_calendar\", \"etag_repository\": \"W/\\\"010115d35cabdd7d0e01ae4053b05c754886eac771aa2a2022f20a2019a2ffe7\\\"\", \"full_name\": \"gadgetchnnel/entities_calendar\", \"last_updated\": \"2022-05-28T10:24:17Z\", \"stargazers_count\": 13, \"topics\": [\"calendar\", \"entities-calendar\"], \"last_fetched\": 1657362750.977495, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"183212377\": {\"repository_manifest\": {\"name\": \"Spotcast\", \"homeassistant\": \"2022.3.0\"}, \"authors\": [\"@fondberg\"], \"category\": \"integration\", \"description\": \"Home assistant custom component to start Spotify playback on an idle chromecast device as well as control spotify connect devices\", \"domain\": \"spotcast\", \"etag_repository\": \"W/\\\"833db626cbf26fcf4dd295be716ba1bd4896a5285211e15e78024db678bca57f\\\"\", \"full_name\": \"fondberg/spotcast\", \"last_updated\": \"2022-05-31T22:54:20Z\", \"stargazers_count\": 403, \"last_fetched\": 1657362745.89923, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"263757123\": {\"repository_manifest\": {\"name\": \"NWS Alerts\", \"homeassistant\": \"0.95.4\"}, \"authors\": [\"@finity69x2\"], \"category\": \"integration\", \"description\": \"An updated version of the nws_alerts custom integration for Home Assistant\", \"domain\": \"nws_alerts\", \"etag_repository\": \"W/\\\"c06b091175654561c74836c36eb73e477f6378ad1946c307c458c14d8c30a9f3\\\"\", \"full_name\": \"finity69x2/nws_alerts\", \"last_updated\": \"2022-06-25T21:10:32Z\", \"stargazers_count\": 29, \"topics\": [\"alerts\", \"assistant\", \"home\", \"weather\"], \"last_fetched\": 1656859176.158233, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"261311061\": {\"repository_manifest\": {\"name\": \"Ecowitt Weather Station\", \"render_readme\": true}, \"authors\": [\"@garbled1\"], \"category\": \"integration\", \"description\": \"Ecowitt Weather Station integration for homeassistant\", \"domain\": \"ecowitt\", \"etag_repository\": \"W/\\\"fa4ed9f4bcf65b36d6e847da4463fd734bb80e6bbc5acad2f03dd7c83b49ac73\\\"\", \"full_name\": \"garbled1/homeassistant_ecowitt\", \"last_updated\": \"2022-05-29T06:23:39Z\", \"stargazers_count\": 92, \"topics\": [\"ecowitt\"], \"last_fetched\": 1657362751.377548, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"229755760\": {\"repository_manifest\": {\"name\": \"Balboa Spa Client\", \"render_readme\": true}, \"authors\": [\"@garbled1\"], \"category\": \"integration\", \"description\": \"Balboa spa integration for home-assistant\", \"domain\": \"balboa\", \"etag_repository\": \"W/\\\"86e365385fad6816070f4a872596a7ca16a9464c1a09fb2a63d91cc73610c77f\\\"\", \"full_name\": \"garbled1/balboa_homeassistan\", \"last_updated\": \"2022-04-07T10:47:16Z\", \"stargazers_count\": 20, \"topics\": [\"balboa\"], \"last_fetched\": 1653229722.801264, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"222292912\": {\"repository_manifest\": {\"name\": \"iCloud3 Device Tracker\", \"zip_release\": true, \"render_readme\": true, \"filename\": \"icloud3.zip\"}, \"authors\": [\"@gcobb321\"], \"category\": \"integration\", \"description\": \"iCloud3 - An advanced device_tracker custom_component for iPhones, iPads, etc. It monitors zone & location updates triggered by the HA iOS App and supports Apple 2fa verification.\", \"domain\": \"icloud3\", \"downloads\": 1442, \"etag_repository\": \"W/\\\"130b7045e12c4eb4ebe8658629b28b40ac28ed2444c5f83834f4a0b48d54d8d9\\\"\", \"full_name\": \"gcobb321/icloud3\", \"last_updated\": \"2022-05-05T18:25:55Z\", \"stargazers_count\": 267, \"topics\": [\"device-tracker\", \"ha-ios\", \"icloud\", \"icloud-account\", \"tracking\", \"zone\", \"zones\"], \"last_fetched\": 1657362751.926454, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"201599575\": {\"repository_manifest\": {\"name\": \"Emby Latest Media\"}, \"authors\": [\"@gcorgnet\"], \"category\": \"integration\", \"description\": \"Home Assistant component to feed Upcoming Media Card with the latest releases on an Emby instance.\", \"domain\": \"emby_upcoming_media\", \"etag_repository\": \"W/\\\"5b02870cbee993a4c88a939c57742063dcc7efabf86b3776b5488a5f06bb6cda\\\"\", \"full_name\": \"gcorgnet/sensor.emby_upcoming_media\", \"last_updated\": \"2022-06-23T21:18:24Z\", \"stargazers_count\": 13, \"last_fetched\": 1656859187.437224, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"264490983\": {\"repository_manifest\": {\"name\": \"Slack User\", \"render_readme\": true}, \"authors\": [\"@GeorgeSG\"], \"category\": \"integration\", \"description\": \"Slack User sensor for Home Assistant\", \"domain\": \"slack_user\", \"etag_repository\": \"W/\\\"5614a96b9361528e9f55e8e5a6b9b79347e0410435d2458187f980de1a0f189e\\\"\", \"full_name\": \"GeorgeSG/ha-slack-user\", \"last_updated\": \"2022-06-02T05:21:09Z\", \"stargazers_count\": 15, \"topics\": [\"home-assistant-component\"], \"last_fetched\": 1656859188.472012, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"199306003\": {\"repository_manifest\": {\"name\": \"Buienalarm\", \"render_readme\": true}, \"authors\": [\"@gieljnssns\"], \"category\": \"integration\", \"description\": \"Buienalarm custom_component for Home-Assistant\", \"domain\": \"buienalarm\", \"etag_repository\": \"W/\\\"ad5901b86d8fa52fa1913ef3fc13459f29da87973cf7f5ae8571d8b5eb1ecec3\\\"\", \"full_name\": \"gieljnssns/buienalarm-sensor-homeassistant\", \"last_updated\": \"2021-12-04T09:48:55Z\", \"stargazers_count\": 22, \"last_fetched\": 1653229728.636692, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"199306511\": {\"repository_manifest\": {\"name\": \"Kostal Piko\", \"render_readme\": true}, \"authors\": [\"@gieljnssns\"], \"category\": \"integration\", \"description\": \"A custom component to get the readings of a Kostal Piko inverter\", \"domain\": \"kostal\", \"etag_repository\": \"W/\\\"646bdd2c6d18892d9f36c5a6123a47e4c045fc9ff0b91d2f518966ea7a869b43\\\"\", \"full_name\": \"gieljnssns/kostalpiko-sensor-homeassistant\", \"last_updated\": \"2021-06-16T14:25:39Z\", \"stargazers_count\": 9, \"last_fetched\": 1648399950.157893, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"261873234\": {\"repository_manifest\": {\"name\": \"Sector Alarm\", \"render_readme\": true, \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@gjohansson-ST\"], \"category\": \"integration\", \"description\": \"Integration to Sector Alarm for Home Assistant\", \"domain\": \"sector\", \"downloads\": 13, \"etag_repository\": \"W/\\\"f4cd25e3537dbe234cb3c18e3432244853a0e62c0a1fe675bc2ed127419b8414\\\"\", \"full_name\": \"gjohansson-ST/sector\", \"last_updated\": \"2022-06-15T21:41:32Z\", \"stargazers_count\": 18, \"topics\": [\"alarm\", \"alarm-control\", \"alarm-control-panel\", \"lock\", \"sector\", \"sector-alarm\", \"temperature-sensor\"], \"last_fetched\": 1656859192.30888, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"265716369\": {\"repository_manifest\": {\"name\": \"Minerstat\", \"render_readme\": \"true\"}, \"authors\": [\"@gilsonmandalogo\"], \"category\": \"integration\", \"description\": \"Minerstat mining hashrate.\", \"domain\": \"hacs-minerstat\", \"etag_repository\": \"W/\\\"7db8bb88221d89a6db301bd6109ef6401f5150898293c8c68e460752c9424ab3\\\"\", \"full_name\": \"gilsonmandalogo/hacs-minerstat\", \"last_updated\": \"2022-01-11T22:19:20Z\", \"stargazers_count\": 3, \"topics\": [\"minerstat\", \"mining\"], \"last_fetched\": 1656859191.874783, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"207794683\": {\"repository_manifest\": {\"name\": \"GoogleGeocode-HASS\", \"render_readme\": true}, \"category\": \"integration\", \"description\": \"Google Location for HASS using the Google Geocode API\", \"domain\": \"google_geocode\", \"etag_repository\": \"W/\\\"1c67d2017ee8e5cca1488f9bfd2f369dcdfd757b0a140e7c444ad750ce8bd4bc\\\"\", \"full_name\": \"gregoryduckworth/GoogleGeocode-HASS\", \"last_updated\": \"2022-05-13T16:17:01Z\", \"stargazers_count\": 11, \"last_fetched\": 1653733411.581124, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"292197182\": {\"repository_manifest\": {\"name\": \"Yeelight bluetooth\", \"render_readme\": true, \"homeassistant\": \"0.109.0\"}, \"authors\": [\"@hcoohb\"], \"category\": \"integration\", \"description\": \"Home assistant custom component for Yeelight bluetooth\", \"domain\": \"yeelight_bt\", \"etag_repository\": \"W/\\\"0d2ec7993668c6f1a3b7524e3ea3bdff19d5e751388188b8df0865f9ed9bdb4f\\\"\", \"full_name\": \"hcoohb/hass-yeelightbt\", \"last_updated\": \"2022-05-28T05:46:09Z\", \"stargazers_count\": 30, \"topics\": [\"bluetooth\", \"bluetooth-low-energy\", \"yeelight-lamp\"], \"last_fetched\": 1657362767.558683, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"263075818\": {\"repository_manifest\": {\"name\": \"HA-meural\"}, \"authors\": [\"@guysie\"], \"category\": \"integration\", \"description\": \"Integration for NETGEAR Meural Canvas digital art frame in Home Assistant \", \"domain\": \"meural\", \"etag_repository\": \"W/\\\"713f991cde6707635409ff3fb31021835081db84228a2f406a988e9fc7bf4043\\\"\", \"full_name\": \"GuySie/ha-meural\", \"last_updated\": \"2022-05-06T19:49:16Z\", \"stargazers_count\": 39, \"topics\": [\"meural\", \"netgear\"], \"last_fetched\": 1656859197.759904, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"143340728\": {\"repository_manifest\": {\"name\": \"ATAG One\", \"country\": [\"NL\"]}, \"authors\": [\"@herikw\"], \"category\": \"integration\", \"description\": \"Atag One Custom components for Home-Assistant\", \"domain\": \"atagone\", \"etag_repository\": \"W/\\\"5a2a2a5f30b2c7666c59555d7b1761130f359860a6d71b1c21b3bde3f28649b1\\\"\", \"full_name\": \"herikw/home-assistant-custom-components\", \"last_updated\": \"2022-01-03T11:05:53Z\", \"stargazers_count\": 9, \"topics\": [\"atag\", \"thermostat\"], \"last_fetched\": 1643571232.89527, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"264499592\": {\"repository_manifest\": {\"name\": \"Cryptoinfo\", \"render_readme\": true, \"homeassistant\": \"0.100.0\"}, \"authors\": [\"@heyajohnny\"], \"category\": \"integration\", \"description\": \"Provides Home Assistant sensors for all cryptocurrencies supported by CoinGecko\", \"domain\": \"cryptoinfo\", \"etag_repository\": \"W/\\\"4fd421bcc7d62520b20cfe60f43180f1021f3f0ea2869b73e9658330ece316ab\\\"\", \"full_name\": \"heyajohnny/cryptoinfo\", \"last_updated\": \"2022-06-06T06:45:15Z\", \"stargazers_count\": 35, \"last_fetched\": 1657362771.736753, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"234983286\": {\"repository_manifest\": {\"name\": \"Govee BLE HCI monitor sensor integration\"}, \"authors\": [\"@thrilleratplay\"], \"category\": \"integration\", \"description\": \"Govee Temperature/Humidity BLE Home Assistant Component\", \"domain\": \"govee_ble_hci\", \"etag_repository\": \"W/\\\"8a94d3167051956081336e29b4b7de89bbc7f4d3b89846b32e0151758ba8a793\\\"\", \"full_name\": \"Home-Is-Where-You-Hang-Your-Hack/sensor.goveetemp_bt_hci\", \"last_updated\": \"2022-06-06T11:16:34Z\", \"stargazers_count\": 140, \"topics\": [\"ble\", \"govee\", \"h5051\", \"h5072\", \"h5074\", \"h5075\", \"h5101\", \"h5102\", \"h5177\", \"h5179\", \"home-assistant-component\"], \"last_fetched\": 1656859206.913143, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"243122556\": {\"repository_manifest\": {\"name\": \"tide\", \"country\": [\"NOR\"], \"homeassistant\": \"0.96.0\", \"render_readme\": true}, \"authors\": [\"@hellowlol\"], \"category\": \"integration\", \"description\": \"Tide a sensor for HASS.\", \"domain\": \"tide\", \"etag_repository\": \"W/\\\"e442c19c4f63c021d0c225059894d369a25de8ed69f4a179beadf67bef56baa9\\\"\", \"full_name\": \"Hellowlol/ha-tide\", \"last_updated\": \"2021-06-06T20:30:32Z\", \"stargazers_count\": 4, \"topics\": [\"norway\", \"tide\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"164841067\": {\"repository_manifest\": {}, \"authors\": [\"@isabellaalstrom\"], \"category\": \"integration\", \"description\": \"A custom component for Home Assistant to get messages from krisinformation.se\", \"domain\": \"krisinformation\", \"etag_repository\": \"W/\\\"34a5df5f384a75a08958ced863102a45287ac6763a49fcb2d349d05797d759ce\\\"\", \"full_name\": \"isabellaalstrom/sensor.krisinformation\", \"last_updated\": \"2021-06-29T18:03:29Z\", \"stargazers_count\": 27, \"last_fetched\": 1646496919.542524, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"234118477\": {\"repository_manifest\": {\"name\": \"Afvalinfo\", \"render_readme\": true, \"country\": [\"NL\"], \"homeassistant\": \"0.100.0\"}, \"authors\": [\"@heyajohnny\"], \"category\": \"integration\", \"description\": \"Provides Home Assistant sensors for multiple Dutch waste collectors. The idea is to add more cities and features in the future.\", \"domain\": \"afvalinfo\", \"etag_repository\": \"W/\\\"eb52071b84de15abbc30d1d5d1da702458598a8b2846d2bd2a4e32962d5dc62b\\\"\", \"full_name\": \"heyajohnny/afvalinfo\", \"last_updated\": \"2022-06-07T12:49:45Z\", \"stargazers_count\": 61, \"last_fetched\": 1656859205.200421, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"269316095\": {\"repository_manifest\": {\"name\": \"Overkiz (by Somfy) - Custom component\", \"homeassistant\": \"2022.02.0\", \"render_readme\": \"true\"}, \"authors\": [\"@philklei\", \"@imicknl\", \"@vlebourl\", \"@tetienne\"], \"category\": \"integration\", \"description\": \"Custom component for Home Assistant to interact with smart devices via Somfy TaHoma or other OverKiz based API's.\", \"domain\": \"tahoma\", \"etag_repository\": \"W/\\\"00410e2d2a9b40ccaeae1254645e411a15120d1f0eb509faaf080b704bd88b9f\\\"\", \"full_name\": \"iMicknl/ha-tahoma\", \"last_updated\": \"2022-06-14T16:02:20Z\", \"stargazers_count\": 128, \"topics\": [\"cozytouch\", \"hi-kumo\", \"nexity\", \"overkiz\", \"rexel\", \"somfy\", \"tahoma\"], \"last_fetched\": 1656859213.292918, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"242700009\": {\"repository_manifest\": {\"name\": \"Kostal Plenticore\"}, \"authors\": [\"@ITTV-Tools\"], \"category\": \"integration\", \"description\": \"Home Assistant Component for Kostal Plenticore \", \"domain\": \"kostal_plenticore\", \"etag_repository\": \"W/\\\"f6495b2f1ed88e04332f1fe518b962688816f5d60c2f8cdeaa95878e1613c8b4\\\"\", \"full_name\": \"ITTV-tools/homeassistant-kostalplenticore\", \"last_updated\": \"2021-08-11T21:57:37Z\", \"stargazers_count\": 15, \"topics\": [\"component\", \"kostal\", \"plenticore\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"231989179\": {\"repository_manifest\": {\"name\": \"HASS Bardolph\"}, \"authors\": [\"al-fontes-jr\", \"JAAlperin\"], \"category\": \"integration\", \"description\": \"HASS custom component to load and run Bardolph (simple scripting utility for LIFX light bulbs by Al Fontes, Jr.)\", \"domain\": \"bardolph\", \"etag_repository\": \"W/\\\"b71988d961f841fadc4e35470d19bd5e3455f8f262c0665385c16a38b8e9a88f\\\"\", \"full_name\": \"JAAlperin/hass-bardolph\", \"last_updated\": \"2021-05-08T22:23:44Z\", \"stargazers_count\": 1, \"topics\": [\"bardolph\", \"color-bulb\", \"lifx\", \"lifx-lan-protocol\", \"scripts\", \"services\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"183989659\": {\"repository_manifest\": {\"name\": \"NHL API\"}, \"authors\": [\"@jayblackedout\"], \"category\": \"integration\", \"description\": \"NHL Stats API Integration Into Home Assistant\", \"domain\": \"nhl_api\", \"etag_repository\": \"W/\\\"e318ca51f39c2d05b41bf48b6ba4f1cdb93ddd60f69f9136baac1918f6ae1cf8\\\"\", \"full_name\": \"JayBlackedOut/hass-nhlapi\", \"last_updated\": \"2022-02-26T23:31:59Z\", \"stargazers_count\": 40, \"last_fetched\": 1656859222.581024, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"235943258\": {\"repository_manifest\": {\"name\": \"Hubitat\", \"country\": \"US\"}, \"authors\": [\"@jason0x43\"], \"category\": \"integration\", \"description\": \"A Hubitat integration for Home Assistant\", \"domain\": \"hubitat\", \"etag_repository\": \"W/\\\"4074a1b027f3a87c44a209def7a75eb8a0db6a2c719a32caf769187cede3c041\\\"\", \"full_name\": \"jason0x43/hacs-hubitat\", \"last_updated\": \"2022-06-20T15:44:44Z\", \"stargazers_count\": 108, \"topics\": [\"hubitat\", \"maker-api\"], \"last_fetched\": 1657362787.156585, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"221855213\": {\"repository_manifest\": {\"name\": \"Auto Backup\", \"zip_release\": true, \"hide_default_branch\": true, \"filename\": \"auto_backup.zip\", \"homeassistant\": \"2022.4.0\"}, \"authors\": [\"@jcwillox\"], \"category\": \"integration\", \"description\": \"\\ud83d\\uddc3\\ufe0f Improved Backup Service for Home Assistant that can Automatically Remove Backups and Supports Generational Backup Schemes.\", \"domain\": \"auto_backup\", \"downloads\": 2595, \"etag_repository\": \"W/\\\"2f68750e7b149eaef95ee055cac3524720bfcd99dc8e28fad122a8897fbc7ef7\\\"\", \"full_name\": \"jcwillox/hass-auto-backup\", \"last_updated\": \"2022-07-02T11:16:28Z\", \"stargazers_count\": 145, \"topics\": [\"auto-purge\", \"backups\", \"generational-backups\", \"snapshots\"], \"last_fetched\": 1657362788.41463, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"273333188\": {\"repository_manifest\": {\"name\": \"Daily Sensor\", \"render_readme\": true}, \"authors\": [\"@jeroenterheerdt\"], \"category\": \"integration\", \"description\": \"Sensor for Home Assistant that gets reset at midnight\", \"domain\": \"daily\", \"etag_repository\": \"W/\\\"697c25ee68f768567c39b2c0aa48210a8219530d0dfd509babe3b43d7c2f1f78\\\"\", \"full_name\": \"jeroenterheerdt/HADailySensor\", \"last_updated\": \"2022-06-18T17:28:30Z\", \"stargazers_count\": 22, \"topics\": [\"aggregation\", \"average\", \"max\", \"maximum\", \"mean\", \"median\", \"min\", \"minimum\", \"standard-deviation\", \"statistics\", \"stdev\", \"sum\", \"var\", \"variance\"], \"last_fetched\": 1657362790.207883, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"263179176\": {\"repository_manifest\": {\"name\": \"Smart Irrigation\", \"render_readme\": true}, \"authors\": [\"@jeroenterheerdt\"], \"category\": \"integration\", \"description\": \"Smart Irrigation custom component for Home Assistant\", \"domain\": \"smart_irrigation\", \"etag_repository\": \"W/\\\"c2465c701395d3ff637e8eabd964196fc65a81472561fd249b2c5e8e3a4024e5\\\"\", \"full_name\": \"jeroenterheerdt/HAsmartirrigation\", \"last_updated\": \"2022-06-28T08:16:49Z\", \"stargazers_count\": 173, \"topics\": [\"crop\", \"evaporation\", \"evapotranspiration\", \"flow\", \"grass\", \"irrigation\", \"lawn\", \"openweathermap\", \"rain\", \"snow\", \"sprinkler\", \"sprinklers\", \"water\", \"watering\"], \"last_fetched\": 1657362790.38572, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"190982718\": {\"repository_manifest\": {}, \"authors\": [\"@jihao\"], \"category\": \"integration\", \"description\": \"A hass component to integrate with colorfulclouds (\\u5f69\\u4e91\\u5929\\u6c14)\", \"domain\": \"colorfulclouds\", \"etag_repository\": \"W/\\\"4217eb0424bc6bcc249b0138ca30fed991073b36026b10c5fc4735372ccce1be\\\"\", \"full_name\": \"jihao/colorfulclouds-hass\", \"last_updated\": \"2019-06-20T12:38:40Z\", \"stargazers_count\": 22, \"last_fetched\": 1648399984.216031, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"187201747\": {\"repository_manifest\": {}, \"category\": \"integration\", \"description\": \"rokid webhook component for Home Assistant (\\u82e5\\u742aHA\\u7ec4\\u4ef6)\", \"domain\": \"rokid_webhook\", \"etag_repository\": \"W/\\\"39f5f673fe0b307fd4415507ec9705a278dc22cbd033da1392c66bc117a21417\\\"\", \"full_name\": \"jihao/rokid-webhook-hass\", \"last_updated\": \"2022-02-15T08:44:30Z\", \"stargazers_count\": 12, \"last_fetched\": 1645380011.645075, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"198758494\": {\"repository_manifest\": {}, \"authors\": [\"@ludeeus\", \"adapt by @jihao\"], \"category\": \"integration\", \"description\": \"A hass component to integrate with traccar_cn which adapts Chinese map coordinates (\\u4e2d\\u6587\\u5730\\u56fe traccar.cn)\", \"domain\": \"traccar_cn\", \"etag_repository\": \"W/\\\"d5e5f5bf7148027c813d7258653271337f6f9479791fd22b5a2282dd3893232a\\\"\", \"full_name\": \"jihao/traccar-cn-hass\", \"last_updated\": \"2020-08-28T09:51:37Z\", \"stargazers_count\": 20, \"last_fetched\": 1653229763.778915, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"278596510\": {\"repository_manifest\": {\"name\": \"Leaf Spy\", \"hacs\": \"0.24.0\", \"homeassistant\": \"0.110.0\"}, \"authors\": [\"@jesserockz\"], \"category\": \"integration\", \"description\": \"A Home Assistant integration to receive live data sent from the LeafSpy app\", \"domain\": \"leafspy\", \"etag_repository\": \"W/\\\"ad4a6d11b1bc682f54ac521912255f6edfdccc58bcb9c20658bd257ec15270c0\\\"\", \"full_name\": \"jesserockz/ha-leafspy\", \"last_updated\": \"2022-06-13T21:10:15Z\", \"stargazers_count\": 10, \"topics\": [\"electric-vehicles\", \"ev\", \"leaf\", \"leafspy\", \"nissan\"], \"last_fetched\": 1656859225.685496, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"223541049\": {\"repository_manifest\": {\"name\": \"SamsungTV Tizen\"}, \"authors\": [\"@jaruba\"], \"category\": \"integration\", \"description\": \"\\ud83d\\udcfa HomeAssistant - For Samsung TVs 2016+, Includes SmartThings API and Channel List Support\", \"domain\": \"samsungtv_tizen\", \"etag_repository\": \"W/\\\"5a66d19cb7e5cacdf0d0cb9ea0ba8b486d8860b308bd154cae5fd28be2b58b9a\\\"\", \"full_name\": \"jaruba/ha-samsungtv-tizen\", \"last_updated\": \"2022-02-20T13:21:27Z\", \"stargazers_count\": 230, \"last_fetched\": 1656859220.838417, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"192664631\": {\"repository_manifest\": {\"name\": \"Bosch Indego Mower\", \"country\": \"SE\", \"homeassistant\": \"0.110.0\"}, \"authors\": [\"@jm-73\", \"@eavanvalkenburg\"], \"category\": \"integration\", \"description\": \"Home Assistant Custom Component for Bosch Indego Lawn Mower\", \"domain\": \"indego\", \"etag_repository\": \"W/\\\"363ea9cc1d50257c4a4a774e17c731a4cfcbfb80c9190b4e3dfcb9b196b87f53\\\"\", \"full_name\": \"jm-73/Indego\", \"last_updated\": \"2022-06-06T10:44:58Z\", \"stargazers_count\": 37, \"topics\": [\"bosch-mower\", \"indego\", \"iot\"], \"last_fetched\": 1656859230.308853, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"297106424\": {\"repository_manifest\": {\"name\": \"Ebeco thermostats\"}, \"authors\": [\"@joggs\"], \"category\": \"integration\", \"description\": \"Integration for Ebeco thermostats\", \"domain\": \"ebeco\", \"etag_repository\": \"W/\\\"5015c19c3808aa8eaa6f43f4034581cb2e9d2239cc5df7222ce3959182f96923\\\"\", \"full_name\": \"joggs/home_assistant_ebeco\", \"last_updated\": \"2022-01-29T20:27:04Z\", \"stargazers_count\": 14, \"topics\": [\"ebeco\"], \"last_fetched\": 1644420420.259845, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"239339530\": {\"repository_manifest\": {\"name\": \"RAD Hoekschewaard Afval Kalender\", \"render_readme\": true, \"country\": [\"NL\"], \"homeassistant\": \"0.100.0\"}, \"authors\": [\"@johnwulp\"], \"category\": \"integration\", \"description\": \"Home Assisant sensor component for RAD Hoekschewaard Afval Kalender\", \"domain\": \"rad-afval\", \"etag_repository\": \"W/\\\"b58ca49af1c9bbb270c7bf65f0637ef76c8f2f9998a062a64c9c30d88292bce8\\\"\", \"full_name\": \"Johnwulp/rad-afval\", \"last_updated\": \"2022-02-03T19:08:50Z\", \"stargazers_count\": 3, \"last_fetched\": 1644064234.302889, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"147953507\": {\"repository_manifest\": {}, \"authors\": [\"@jomwells\", \"@hutchinsane\"], \"category\": \"integration\", \"description\": \"Custom Home Assistant (Light) Component for Ambilight LED's on Philips Android TV's\", \"domain\": \"philips_ambilight\", \"etag_repository\": \"W/\\\"21b77e0b3185bc80d71a77955025346377d5b5e491ca4cc70631cde11992f9c0\\\"\", \"full_name\": \"jomwells/ambilights\", \"last_updated\": \"2021-06-23T17:10:55Z\", \"stargazers_count\": 44, \"last_fetched\": 1643571235.086734, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"193746664\": {\"repository_manifest\": {}, \"authors\": [\"@jomwells\"], \"category\": \"integration\", \"description\": \"A switch component which mimics the functionality of Ambilight+Hue for all Yeelight lights/bulbs\", \"domain\": \"philips_ambilight+yeelight\", \"etag_repository\": \"W/\\\"3c3179b60422546acbd46982aaf705f11ee6ca2eb6d632638e41630c480f20be\\\"\", \"full_name\": \"jomwells/ambilight-yeelight\", \"last_updated\": \"2020-05-29T18:20:34Z\", \"stargazers_count\": 19, \"last_fetched\": 1649613809.194003, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"235659413\": {\"repository_manifest\": {\"name\": \"Eloverblik\", \"render_readme\": true}, \"authors\": [\"@JonasPed\"], \"category\": \"integration\", \"description\": \"Home Assistant Custom Component showing data from eloverblik.dk\", \"domain\": \"eloverblik\", \"etag_repository\": \"W/\\\"b7c75a77bd138a43d83dacdbf311c2029b30a0cc4055d1ab6795dc367598e553\\\"\", \"full_name\": \"JonasPed/homeassistant-eloverblik\", \"last_updated\": \"2022-05-29T19:54:29Z\", \"stargazers_count\": 87, \"last_fetched\": 1656859235.97451, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"170309600\": {\"repository_manifest\": {\"name\": \"Atrea\", \"homeassistant\": \"2022.4.0\"}, \"authors\": [\"@JurajNyiri\"], \"category\": \"integration\", \"description\": \"Custom component allowing control of Atrea ventilation units\", \"domain\": \"atrea\", \"etag_repository\": \"W/\\\"06db26852325a281d37efab717f9bae9e82cae38095195e2e1b76501eb7e3ad2\\\"\", \"full_name\": \"JurajNyiri/HomeAssistant-Atrea\", \"last_updated\": \"2022-04-12T22:35:34Z\", \"stargazers_count\": 11, \"last_fetched\": 1653229777.65533, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"175020245\": {\"repository_manifest\": {}, \"authors\": [\"@JurajNyiri\"], \"category\": \"integration\", \"description\": \"Sensor which gathers water outage information from Tavos (Slovakia) website\", \"domain\": \"tavos_water_outage\", \"etag_repository\": \"W/\\\"d8605131ae85f0af2197fafda02b34bbccf6d65165a664efd3cee2ba93ef40ad\\\"\", \"full_name\": \"JurajNyiri/HomeAssistant-Tavos\", \"last_updated\": \"2022-04-11T21:18:48Z\", \"last_fetched\": 1653229778.256979, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"199291345\": {\"repository_manifest\": {}, \"authors\": [\"@JurajNyiri\"], \"category\": \"integration\", \"description\": \"Adds ability to switch alternative speed in qBittorrent through Home Assistant.\", \"domain\": \"qbittorrent_alternative_speed\", \"etag_repository\": \"W/\\\"f364dc4ae4fc75e2fcec2da3c0b58e256a2795a274b19b872a8790541394488f\\\"\", \"full_name\": \"JurajNyiri/HomeAssistant-qBitTorrentAlternativeSpeed\", \"last_updated\": \"2022-07-07T10:39:14Z\", \"stargazers_count\": 7, \"last_fetched\": 1657362805.949234, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"197058358\": {\"repository_manifest\": {}, \"authors\": [\"@jxlarrea\"], \"category\": \"integration\", \"description\": \"Emfit QS Sleep Tracker Component for Home Assistant\", \"domain\": \"emfitqs\", \"etag_repository\": \"W/\\\"1cbcdb481bdf090e33f34891480afa80b466025191ae17bbbfb220a4a9ab928a\\\"\", \"full_name\": \"jxlarrea/ha-emfitqs\", \"last_updated\": \"2022-03-06T21:31:42Z\", \"stargazers_count\": 15, \"topics\": [\"emfit\", \"emfitqs\", \"presence\", \"presence-detection\", \"sleep-tracker\"], \"last_fetched\": 1653229779.274093, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"262803775\": {\"repository_manifest\": {\"name\": \"Carbon Intensity UK\", \"hacs\": \"0.24.0\", \"homeassistant\": \"0.108.0\"}, \"authors\": [\"@jscruz\"], \"category\": \"integration\", \"description\": \"Carbon Intensity UK Sensor for Home Assistant\", \"domain\": \"carbon_intensity_uk\", \"etag_repository\": \"W/\\\"d49a67a0ab94a690f5e94ea13e607994c1582152b15eab0baecef7eca03969cd\\\"\", \"full_name\": \"jscruz/sensor.carbon_intensity_uk\", \"last_updated\": \"2021-03-13T21:05:53Z\", \"stargazers_count\": 2, \"topics\": [\"carbon\", \"custom-integration\", \"energy\", \"sensor-platform\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"300358676\": {\"repository_manifest\": {\"name\": \"Tapo: Cameras Control\", \"homeassistant\": \"2022.4.0\"}, \"authors\": [\"@JurajNyiri\"], \"category\": \"integration\", \"description\": \"Control for Tapo cameras as a Home Assistant component\", \"domain\": \"tapo_control\", \"etag_repository\": \"W/\\\"c3ffc1d744204d92f80141f0241f3f34a3842900443efa83bbe50a3bb4f63043\\\"\", \"full_name\": \"JurajNyiri/HomeAssistant-Tapo-Control\", \"last_updated\": \"2022-07-05T01:07:41Z\", \"stargazers_count\": 324, \"topics\": [\"camera\", \"cameras\", \"hacktoberfest2021\", \"homeassistant-custom-component\", \"ptz\", \"tapo\"], \"last_fetched\": 1657362806.962762, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"159025199\": {\"repository_manifest\": {}, \"authors\": [\"@kalanda\"], \"category\": \"integration\", \"description\": \"AEMET integration for Home Assistant\", \"domain\": \"aemet\", \"etag_repository\": \"W/\\\"fadb38683ce3ecc01589c5d2020eedd21f4968ce4e66cdde20e10b061799407b\\\"\", \"full_name\": \"kalanda/homeassistant-aemet-sensor\", \"last_updated\": \"2022-06-03T06:00:18Z\", \"stargazers_count\": 21, \"topics\": [\"aemet\"], \"last_fetched\": 1656859245.796327, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"233079250\": {\"repository_manifest\": {\"name\": \"darksky_m\", \"render_readme\": \"true\", \"country\": [\"NO\"]}, \"authors\": [\"@kodi1\"], \"category\": \"integration\", \"description\": \"darksky - clouds cover and alerts\", \"domain\": \"darksky_m\", \"etag_repository\": \"W/\\\"979b79eb7e2ca373dbe717ddf44f354e54a1bca149b6e2598b19724d3920f522\\\"\", \"full_name\": \"kodi1/darksky_m\", \"last_updated\": \"2021-03-28T10:12:47Z\", \"topics\": [\"darksky\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"232077394\": {\"repository_manifest\": {\"name\": \"Chargeamps\", \"render_readme\": true}, \"authors\": [\"@kirei\"], \"category\": \"integration\", \"description\": \"Home Assistant Component for Chargeamps\", \"domain\": \"chargeamps\", \"etag_repository\": \"W/\\\"e9a96bf1cc2c341093eedf03c072f4300013854e8cdce15c7780fdbfc3745bf7\\\"\", \"full_name\": \"kirei/hass-chargeamps\", \"last_updated\": \"2022-04-18T12:18:56Z\", \"stargazers_count\": 16, \"topics\": [\"chargeamps\"], \"last_fetched\": 1656859248.201522, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"233089370\": {\"repository_manifest\": {\"name\": \"esp_wd\", \"render_readme\": \"true\", \"country\": [\"NO\"]}, \"authors\": [\"@kodi1\"], \"category\": \"integration\", \"description\": \"easyesp status sensor\", \"domain\": \"esp_wd\", \"etag_repository\": \"W/\\\"95c73fa6fe77000726de3d3cf48a0c7d0b6442c69e5de9ac10a64a03f16d0d16\\\"\", \"full_name\": \"kodi1/esp_wd\", \"last_updated\": \"2022-02-04T08:26:05Z\", \"stargazers_count\": 2, \"topics\": [\"esp-easy\"], \"last_fetched\": 1644064235.560689, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"246939713\": {\"repository_manifest\": {\"name\": \"Wasteplan TRV\", \"country\": [\"NO\"], \"render_readme\": true}, \"authors\": [\"@jonkristian\"], \"category\": \"integration\", \"description\": \"Home Assistant component for Trondheim renholdsverk bin pickups.\", \"domain\": \"wasteplan_trv\", \"etag_repository\": \"W/\\\"223d7397460eb37e5d42e7f43099b4417ee7529f16b69b40c38e838f93e3a1f8\\\"\", \"full_name\": \"jonkristian/wasteplan_trv\", \"last_updated\": \"2021-12-28T10:27:19Z\", \"stargazers_count\": 9, \"topics\": [\"trondheim\", \"trv\", \"waste-management\"], \"last_fetched\": 1643571235.346525, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"233090507\": {\"repository_manifest\": {\"name\": \"meteoalarm\", \"render_readme\": \"true\", \"country\": [\"NO\"]}, \"authors\": [\"@kodi1\"], \"category\": \"integration\", \"description\": \"meteoalarm sensor\", \"domain\": \"meteoalarm_m\", \"etag_repository\": \"W/\\\"f7bd890310bba52d387e4bc8d3051641eac8cef6d5d5a2c5a1d92ea179eb3b13\\\"\", \"full_name\": \"kodi1/meteoalarm\", \"last_updated\": \"2021-12-31T18:00:45Z\", \"stargazers_count\": 5, \"topics\": [\"meteoalarm\"], \"last_fetched\": 1644420421.405046, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"233092112\": {\"repository_manifest\": {\"name\": \"songpal_m\", \"render_readme\": \"true\", \"country\": [\"NO\"]}, \"authors\": [\"@kodi1\"], \"category\": \"integration\", \"description\": \"songpal - volume down workaround\", \"domain\": \"songpal_m\", \"etag_repository\": \"W/\\\"5697baf1ecfa09475d24f7feb213631918e92a5f8c045e53519d98e996a67987\\\"\", \"full_name\": \"kodi1/songpal_m\", \"last_updated\": \"2021-03-28T10:15:20Z\", \"stargazers_count\": 1, \"topics\": [\"songpal\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"233092629\": {\"repository_manifest\": {\"name\": \"tvh_rec\", \"country\": [\"NO\"]}, \"authors\": [\"@kodi1\"], \"category\": \"integration\", \"description\": \"tvheadend recorder sensor - lovelace upcoming media card\", \"domain\": \"tvh_rec\", \"etag_repository\": \"W/\\\"2f0d5e0300690312d983f815bf045cc0a6e1105a403b1cb3b5adcced493195ea\\\"\", \"full_name\": \"kodi1/tvh_rec\", \"last_updated\": \"2022-01-09T10:38:49Z\", \"stargazers_count\": 3, \"topics\": [\"recordings\", \"tvheadend\"], \"last_fetched\": 1641895617.996288, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"286554328\": {\"repository_manifest\": {\"name\": \"Kaco\", \"render_readme\": true}, \"authors\": [\"@KoljaWindeler\"], \"category\": \"integration\", \"description\": \"custom integration for kaco solar inverter\", \"domain\": \"kaco\", \"etag_repository\": \"W/\\\"efdef7eeead6576e896a680cdc9b0285978d76e9da30a006de5b3cdce826841f\\\"\", \"full_name\": \"KoljaWindeler/kaco\", \"last_updated\": \"2022-03-01T16:24:59Z\", \"stargazers_count\": 3, \"topics\": [\"inverter\", \"solar-energy\"], \"last_fetched\": 1656859253.588105, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"246410785\": {\"repository_manifest\": {\"name\": \"ICS\", \"render_readme\": true}, \"authors\": [\"@KoljaWindeler\"], \"category\": \"integration\", \"description\": \"Integration that displays the next event of an ics link (support reoccuring events)\", \"domain\": \"ics\", \"etag_repository\": \"W/\\\"00fd9955e292701577e806e8a68503a25332bd893f0e7b1a528417392ffa3bc2\\\"\", \"full_name\": \"KoljaWindeler/ics\", \"last_updated\": \"2022-02-10T18:31:39Z\", \"stargazers_count\": 44, \"topics\": [\"appointments\", \"filtering\", \"ics\", \"reoccuring-events\"], \"last_fetched\": 1653229786.496208, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"242635439\": {\"repository_manifest\": {\"name\": \"Disk Space\", \"render_readme\": true}, \"authors\": [\"@kuchel77\"], \"category\": \"integration\", \"description\": \"Disk space for a path. For use with Home Assistant\", \"domain\": \"diskspace\", \"etag_repository\": \"W/\\\"10d58fff3a42848a1fe93b91e731b8c13ba48fd1e678a11881e3a24ca2cda335\\\"\", \"full_name\": \"kuchel77/diskspace\", \"last_updated\": \"2021-04-18T05:13:59Z\", \"stargazers_count\": 9, \"topics\": [\"assistant\", \"disk\", \"home\", \"space\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"132661981\": {\"repository_manifest\": {\"name\": \"Elasticsearch component\"}, \"authors\": [\"@legrego\"], \"category\": \"integration\", \"description\": \"Publish Home-Assistant events to Elasticsearch\", \"domain\": \"elastic\", \"etag_repository\": \"W/\\\"c92999bc3272a135ec05bf502cc8b9a9f9f676de8adc4c2119055bc775891349\\\"\", \"full_name\": \"legrego/homeassistant-elasticsearch\", \"last_updated\": \"2022-06-20T19:17:57Z\", \"stargazers_count\": 97, \"topics\": [\"elasticsearch\"], \"last_fetched\": 1656859268.730624, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"230151505\": {\"repository_manifest\": {\"name\": \"Dijnet integration\", \"country\": [\"HU\"], \"render_readme\": true, \"zip_release\": true, \"filename\": \"homeassistant-dijnet.zip\"}, \"authors\": [\"@laszlojakab\"], \"category\": \"integration\", \"description\": \"Dijnet integration for Home Assistant\", \"domain\": \"dijnet\", \"etag_repository\": \"W/\\\"ca97d0c18a6416bf53a4eea84f8bca2b361b494334af1b35e32815ee7f0d2888\\\"\", \"full_name\": \"laszlojakab/homeassistant-dijnet\", \"last_updated\": \"2022-03-03T21:28:43Z\", \"stargazers_count\": 7, \"topics\": [\"dijnet\", \"home-assistant-sensor\"], \"last_fetched\": 1646496966.382164, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"258852884\": {\"repository_manifest\": {\"name\": \"Helios EasyControls Modbus TCP/IP integration\", \"render_readme\": true, \"zip_release\": true, \"filename\": \"homeassistant-easycontrols.zip\"}, \"authors\": [\"@laszlojakab\"], \"category\": \"integration\", \"description\": \"Helios EasyControls Modbus TCP/IP integration for Home Assistant\", \"domain\": \"easycontrols\", \"downloads\": 84, \"etag_repository\": \"W/\\\"c3953ab2b788ac442f5f5009094bd4f3055f279bc51cea00cb3e5e14af8e9451\\\"\", \"full_name\": \"laszlojakab/homeassistant-easycontrols\", \"last_updated\": \"2022-04-17T19:35:29Z\", \"stargazers_count\": 10, \"topics\": [\"easycontrols\", \"eazyctrl\", \"modbus\"], \"last_fetched\": 1653229801.602147, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"279680951\": {\"repository_manifest\": {\"name\": \"Jablotron 100\", \"country\": [\"CS\", \"DA\", \"DE\", \"EN\", \"IT\", \"NB\", \"NL\", \"SK\"], \"homeassistant\": \"2022.5.0\", \"render_readme\": true}, \"authors\": [\"@kukulich\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for JABLOTRON 100+ alarm system\", \"domain\": \"jablotron100\", \"etag_repository\": \"W/\\\"2c6ae5bdd6693bba0fe78a6d2cc2de354e21f540fd6bec91c85f693871b612fd\\\"\", \"full_name\": \"kukulich/home-assistant-jablotron100\", \"last_updated\": \"2022-06-26T09:14:14Z\", \"stargazers_count\": 39, \"topics\": [\"alarm\", \"jablotron\"], \"last_fetched\": 1656859262.606482, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"254253124\": {\"repository_manifest\": {\"name\": \"Noonlight - Alarm Monitoring\", \"render_readme\": true, \"country\": \"US\", \"homeassistant\": \"0.96\"}, \"authors\": [\"@heythisisnate\", \"@snicker\"], \"category\": \"integration\", \"description\": \"HomeAssistant integration for Noonlight\", \"domain\": \"noonlight\", \"etag_repository\": \"W/\\\"1b7b4be82c34585af2d85d39ad3d5515af88128a386bd159cf9aa1b530409f0f\\\"\", \"full_name\": \"konnected-io/noonlight-hass\", \"last_updated\": \"2022-01-13T19:30:55Z\", \"stargazers_count\": 21, \"topics\": [\"alarm\", \"monitoring\", \"noonlight\", \"security\"], \"last_fetched\": 1653229788.07, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"183222061\": {\"repository_manifest\": {\"name\": \"Local Luftdaten Sensor\", \"render_readme\": true}, \"authors\": [\"@lichtteil\"], \"category\": \"integration\", \"description\": \"Custom component for Home Assistant that integrates your (own) local Luftdaten sensor (air quality/particle sensor) without using the cloud.\", \"domain\": \"local_luftdaten\", \"etag_repository\": \"W/\\\"9ad0c1ff1724e93f93b4eec0826e79b27e26a99c53b21aabc22bba65de9f0627\\\"\", \"full_name\": \"lichtteil/local_luftdaten\", \"last_updated\": \"2022-04-05T10:46:14Z\", \"stargazers_count\": 32, \"topics\": [\"air-quality\"], \"last_fetched\": 1657362833.14101, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"204192861\": {\"repository_manifest\": {\"name\": \"Average Sensor\", \"hacs\": \"1.6.0\", \"homeassistant\": \"0.118.0\"}, \"authors\": [\"@Limych\"], \"category\": \"integration\", \"description\": \"Average Sensor for Home Assistant\", \"domain\": \"average\", \"downloads\": 73, \"etag_repository\": \"W/\\\"8e1541ae1f7f7259f3e2b3266fbcab378e840d8fa52ebacfa1e12053e1bdafeb\\\"\", \"full_name\": \"Limych/ha-average\", \"last_updated\": \"2022-06-28T01:09:39Z\", \"stargazers_count\": 188, \"topics\": [\"average\", \"home-assistant-component\", \"home-assistant-sensor\"], \"last_fetched\": 1657362833.176208, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"199313405\": {\"repository_manifest\": {\"name\": \"Beward Integration\", \"hacs\": \"1.6.0\", \"homeassistant\": \"0.118.0\"}, \"authors\": [\"@Limych\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for Beward security Cameras and Doorbells\", \"domain\": \"beward\", \"downloads\": 1, \"etag_repository\": \"W/\\\"60fdc902aa1bb56f3f2cefac34c7ec080086f49cc25753f7d125fcda33b8616d\\\"\", \"full_name\": \"Limych/ha-beward\", \"last_updated\": \"2022-05-07T19:30:26Z\", \"stargazers_count\": 17, \"topics\": [\"beward\", \"camera\", \"doorbell\", \"dvr\", \"security\", \"surveillance\"], \"last_fetched\": 1653229802.718857, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"210194956\": {\"repository_manifest\": {\"name\": \"Car Wash\", \"hacs\": \"1.6.0\", \"homeassistant\": \"0.118.0\"}, \"authors\": [\"@limych\"], \"category\": \"integration\", \"description\": \"Car Wash Binary Sensor for Home Assistant\", \"domain\": \"car_wash\", \"downloads\": 5, \"etag_repository\": \"W/\\\"aa719d3ac1b3dc0da6c7d725eb4379b09602777aa1979b7e279e8a73018df483\\\"\", \"full_name\": \"Limych/ha-car_wash\", \"last_updated\": \"2022-06-28T11:23:01Z\", \"stargazers_count\": 67, \"topics\": [\"binary-sensor\", \"car\", \"car-wash\", \"wash\", \"weather-forecast\"], \"last_fetched\": 1656859272.643767, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"206868881\": {\"repository_manifest\": {\"name\": \"Gismeteo\", \"hacs\": \"1.6.0\", \"homeassistant\": \"2022.6.0\"}, \"authors\": [\"@limych\"], \"category\": \"integration\", \"description\": \"Gismeteo Weather Provider for Home Assistant\", \"domain\": \"gismeteo\", \"downloads\": 33, \"etag_repository\": \"W/\\\"e5cb48a0f842e07d9410e1fecf021abca9f5877ac947e3a66b9f6f99eab3750e\\\"\", \"full_name\": \"Limych/ha-gismeteo\", \"last_updated\": \"2022-06-29T20:22:21Z\", \"stargazers_count\": 84, \"topics\": [\"forecast\", \"gismeteo\", \"gismeteo-weather\", \"sensors\", \"weather-provider\"], \"last_fetched\": 1656859272.787307, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"228063780\": {\"repository_manifest\": {\"name\": \"Indoor Air Quality UK Index\", \"hacs\": \"1.6.0\", \"homeassistant\": \"0.118.0\"}, \"authors\": [\"@Limych\"], \"category\": \"integration\", \"description\": \"Indoor Air Quality Sensor Component for Home Assistant\", \"domain\": \"iaquk\", \"downloads\": 7, \"etag_repository\": \"W/\\\"d596e84e404581d4bdea6754805fa021d383f248d96c40dd8a7bef9fc6518867\\\"\", \"full_name\": \"Limych/ha-iaquk\", \"last_updated\": \"2022-06-28T15:11:58Z\", \"stargazers_count\": 55, \"topics\": [\"air-quality\", \"indoor\"], \"last_fetched\": 1656859272.740204, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"197950768\": {\"repository_manifest\": {}, \"category\": \"integration\", \"description\": \"Our Groceries Integration for Home Assistant\", \"domain\": \"ourgroceries\", \"etag_repository\": \"W/\\\"7e686babc9d953d6515d27a46c7deea05f8638a08ad164555e7999b234128e27\\\"\", \"full_name\": \"ljmerza/ha-our-groceries\", \"last_updated\": \"2022-06-02T17:43:40Z\", \"stargazers_count\": 26, \"last_fetched\": 1656859278.730158, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"219363790\": {\"repository_manifest\": {\"name\": \"TV4 Play\", \"country\": [\"SE\"]}, \"category\": \"integration\", \"description\": \"Play videos from the Swedish channel 4\", \"domain\": \"tv4_play\", \"etag_repository\": \"W/\\\"538aaf137f213b707a583a6df65e6a150385af1e221dc8b4ca352355ab21c880\\\"\", \"full_name\": \"lindell/home-assistant-tv4-play\", \"last_updated\": \"2021-10-15T17:14:08Z\", \"stargazers_count\": 14, \"topics\": [\"tv4\", \"tv4play\"], \"last_fetched\": 1644420423.182922, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"256709811\": {\"repository_manifest\": {\"name\": \"JQ-300/200/100 Indoor Air Quality Meter\", \"hacs\": \"1.6.0\", \"homeassistant\": \"0.118.0\"}, \"authors\": [\"@Limych\"], \"category\": \"integration\", \"description\": \"JQ-300 Indoor Air Quality Meter Home Assistant Integration\", \"domain\": \"jq300\", \"downloads\": 16, \"etag_repository\": \"W/\\\"0671a4a537b732ae10187e4e8f5194f06edfddaae2f8f6140766812ad307ac7b\\\"\", \"full_name\": \"Limych/ha-jq300\", \"last_updated\": \"2022-06-28T15:11:58Z\", \"stargazers_count\": 42, \"topics\": [\"air-quality\", \"air-quality-measurements\", \"air-quality-sensor\", \"home-assistant-component\"], \"last_fetched\": 1656859274.862031, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"200035037\": {\"repository_manifest\": {\"name\": \"Discord Game\", \"homeassistant\": \"2022.03.0b0\"}, \"category\": \"integration\", \"description\": \"Home Assistant custom component to get online and game status of Discord users\", \"domain\": \"discord_game\", \"etag_repository\": \"W/\\\"94d30640991d7f5c8608b39a4a70c60ff8c3b49104b50663414e97a99fd7cfb9\\\"\", \"full_name\": \"LordBoos/discord_game\", \"last_updated\": \"2022-03-05T15:16:40Z\", \"stargazers_count\": 35, \"last_fetched\": 1656859280.28276, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"242335771\": {\"repository_manifest\": {\"name\": \"SVT Play\", \"country\": [\"SE\"]}, \"category\": \"integration\", \"description\": \"Play SVT Play videos and channels via home assistant\", \"domain\": \"svt_play\", \"etag_repository\": \"W/\\\"f8b7e56ed7cb9547ba5fcc47a2f41f012bc12d96c5095040e076c89247ff1fed\\\"\", \"full_name\": \"lindell/home-assistant-svt-play\", \"last_updated\": \"2022-05-14T12:21:32Z\", \"stargazers_count\": 17, \"topics\": [\"svt\", \"svtplay\", \"sweden\", \"tv\", \"video\"], \"last_fetched\": 1653229808.796739, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"183064800\": {\"repository_manifest\": {\"name\": \"Email Sensor\", \"render_readme\": true}, \"authors\": [\"@ljmerza\"], \"category\": \"integration\", \"description\": \"Email Sensor for collecting tracking numbers from over 25 providers.\", \"domain\": \"email\", \"etag_repository\": \"W/\\\"9a715f0ea9516a3d8143a997ca1cfbb6cec18ee40d3c33c2bb0634181877fb9c\\\"\", \"full_name\": \"ljmerza/ha-email-sensor\", \"last_updated\": \"2022-05-12T16:10:58Z\", \"stargazers_count\": 59, \"last_fetched\": 1653229808.94706, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"246657442\": {\"repository_manifest\": {\"name\": \"Current Cost\"}, \"authors\": [\"@lolouk44\"], \"category\": \"integration\", \"description\": \"CurrentCost Meter Reading Custom Component for Home Assistant \", \"domain\": \"currentcost\", \"etag_repository\": \"W/\\\"e5830f90c996ec4ad42f42d57af0919029604a9a760c6bb0b2ce33e64a2ae042\\\"\", \"full_name\": \"lolouk44/CurrentCost_HA_CC\", \"last_updated\": \"2021-12-14T18:54:07Z\", \"stargazers_count\": 10, \"topics\": [\"cc128\", \"current-cost\", \"currentcost\", \"envi\", \"envir\"], \"last_fetched\": 1641217247.077083, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"243841075\": {\"repository_manifest\": {\"name\": \"CS:GO game state\", \"homeassistant\": \"0.100\"}, \"authors\": [\"@lociii\"], \"category\": \"integration\", \"description\": \"CS:GO gamestate reporting to Home Assistant\", \"domain\": \"csgo_gamestate\", \"etag_repository\": \"W/\\\"3694e14e5e3d7fd5633774f825d456969efee136314a59300fd94ab670b3e638\\\"\", \"full_name\": \"lociii/homeassistant-csgo\", \"last_updated\": \"2022-03-02T16:54:48Z\", \"stargazers_count\": 15, \"last_fetched\": 1653229812.781418, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"257912976\": {\"repository_manifest\": {\"name\": \"Mqtt template switch\", \"render_readme\": true}, \"category\": \"integration\", \"description\": \"mqtt template switch for homeassistant\", \"domain\": \"mqtt_template\", \"etag_repository\": \"W/\\\"63ac85ac8fd5d4edece75ad374ea6c3563096591d2de59e371d679a616218eaf\\\"\", \"full_name\": \"lukich48/hass_mqtt_template_switch\", \"last_updated\": \"2021-03-07T13:28:58Z\", \"stargazers_count\": 3, \"last_fetched\": 1653229813.941469, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"262203345\": {\"repository_manifest\": {\"name\": \"Midea Smart Aircon\", \"homeassistant\": \"0.110.2\"}, \"authors\": [\"@mac-zhou\"], \"category\": \"integration\", \"description\": \"Home Assistant Custom Integration for Midea Group(Hualing, Senville, Klimaire, AirCon, Century, Pridiom, Thermocore, Comfee, Toshiba, Carrier, Goodman, Friedrich, Samsung, Kenmore, Trane, Lennox, LG and much more) Air Conditioners via LAN.\", \"domain\": \"midea_ac\", \"etag_repository\": \"W/\\\"09a19bde17950a8fd6074f911b9858088721f68c88a61af380bd37cadc2ee062\\\"\", \"full_name\": \"mac-zhou/midea-ac-py\", \"last_updated\": \"2022-06-25T04:16:22Z\", \"stargazers_count\": 350, \"last_fetched\": 1657362844.615371, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"254347436\": {\"repository_manifest\": {\"name\": \"Waste Collection Schedule\"}, \"authors\": [\"@mampfes\"], \"category\": \"integration\", \"description\": \"Home Assistant integration framework for (garbage collection) schedules\", \"domain\": \"waste_collection_schedule\", \"etag_repository\": \"W/\\\"710cb25fc12a16579863559a84b2c98e00a2f6dd56f5bcb209d5f2fc074be091\\\"\", \"full_name\": \"mampfes/hacs_waste_collection_schedule\", \"last_updated\": \"2022-07-08T14:53:19Z\", \"stargazers_count\": 195, \"topics\": [\"abfall\", \"abfallnavi\", \"abfallplus\", \"berlin\", \"garbage\", \"garbage-collection\", \"hamburg\", \"jumomind\", \"koeln\", \"muell\", \"muellabfuhr\", \"muellsammlung\", \"mymuell\", \"regioit\", \"waste\", \"waste-collection\"], \"last_fetched\": 1657362848.718134, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"195883127\": {\"repository_manifest\": {}, \"authors\": [\"@Martinvdm\", \"@vloris\"], \"category\": \"integration\", \"description\": \"Garbage collection Nissewaard for Home Assistant\", \"domain\": \"nissewaard\", \"etag_repository\": \"W/\\\"180f3b53d867b79be731b38ae9e95547c3f90ab9338f9af25526591e478608bc\\\"\", \"full_name\": \"Martinvdm/garbage-nissewaard-homeassistant\", \"last_updated\": \"2021-04-11T12:18:11Z\", \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"197578489\": {\"repository_manifest\": {}, \"authors\": [\"@mlowijs\", \"@robhofmann\"], \"category\": \"integration\", \"description\": null, \"domain\": \"tesla_cc\", \"etag_repository\": \"W/\\\"c1ea2978f62e2b1223a56230bb3578a5459da1bbfb109d0ccd207412e4f4f4fa\\\"\", \"full_name\": \"mlowijs/HomeAssistant-TeslaCustomComponent\", \"last_updated\": \"2020-06-13T08:59:32Z\", \"stargazers_count\": 7, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"295627573\": {\"repository_manifest\": {\"name\": \"Fortnite Stats\", \"hacs\": \"0.24.0\", \"homeassistant\": \"0.110.0\", \"render_readme\": true}, \"authors\": [\"@michaellunzer\", \"@clyra\"], \"category\": \"integration\", \"description\": \"This is a Home-Assistant custom component that pulls Fortnite stats using the python API library from the site fortnitetracker.com\", \"domain\": \"fortnite\", \"etag_repository\": \"W/\\\"a3fc18b2c93c1997a6e9c8455f7101b7557c957c51d53c97c9aa54c1ce2e2e0b\\\"\", \"full_name\": \"michaellunzer/Home-Assistant-Custom-Component-Fortnite\", \"last_updated\": \"2021-11-03T06:00:38Z\", \"stargazers_count\": 4, \"topics\": [\"fortnite\", \"fortnite-api\", \"fortnite-stats\"], \"last_fetched\": 1641470259.763951, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"291317330\": {\"repository_manifest\": {\"name\": \"Electric Vehicle Charge Control\", \"country\": [\"SK\"], \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@mletenay\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for Electric Vehicle Charge Control devices by Phoenix Contact \", \"domain\": \"phoenix_contact\", \"etag_repository\": \"W/\\\"0f600786293d98d142d764e9b254bd15533385c2e3ec8dda019d76cc17da4abe\\\"\", \"full_name\": \"mletenay/home-assistant-ev-charge-control\", \"last_updated\": \"2021-12-21T23:06:01Z\", \"topics\": [\"charging-stations\", \"electric-vehicles\", \"evse\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"203244705\": {\"repository_manifest\": {\"name\": \"OpenMensa Sensor\"}, \"category\": \"integration\", \"description\": \"A platform sensor which tells you which meals are served in your canteen.\", \"domain\": \"openmensa\", \"etag_repository\": \"W/\\\"8a61940cd695986ad5ae7778c789bc87929382ce7117389c7e530d45a299cf9d\\\"\", \"full_name\": \"Mofeywalker/openmensa-hass-component\", \"last_updated\": \"2021-09-04T08:04:28Z\", \"stargazers_count\": 2, \"last_fetched\": 1653229830.351472, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"289251122\": {\"repository_manifest\": {\"name\": \"GoodWe Inverter (experimental)\", \"country\": \"SK\", \"homeassistant\": \"2022.4.0\"}, \"authors\": [\"@mletenay\"], \"category\": \"integration\", \"description\": \"Experimental version of Home Assistant integration for Goodwe solar inverters\", \"domain\": \"goodwe\", \"etag_repository\": \"W/\\\"bf5b92fea9194613a3115f2db635259a1b907c4e73e3a9f6ec54e991c2e62add\\\"\", \"full_name\": \"mletenay/home-assistant-goodwe-inverter\", \"last_updated\": \"2022-06-06T07:49:55Z\", \"stargazers_count\": 80, \"topics\": [\"goodwe\", \"home-assistant-sensor\", \"pv-systems\"], \"last_fetched\": 1657362859.996603, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"239366330\": {\"repository_manifest\": {\"name\": \"SenseME\", \"homeassistant\": \"2021.3.0\"}, \"authors\": [\"@mikelawrence\"], \"category\": \"integration\", \"description\": \"Haiku with SenseME fan integration for Home Assistant\", \"domain\": \"senseme\", \"etag_repository\": \"W/\\\"57f44294cc8dfe8aa66fa101e67b5f939a833c1b709e6676f55d1e9fab488bc3\\\"\", \"full_name\": \"mikelawrence/senseme-hacs\", \"last_updated\": \"2021-12-28T02:15:41Z\", \"stargazers_count\": 21, \"topics\": [\"bigassfans\", \"fan\", \"haiku\", \"senseme\"], \"last_fetched\": 1656859297.329868, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"272094506\": {\"repository_manifest\": {\"name\": \"Blitzortung.org Lightning Detector\", \"homeassistant\": \"2021.9.0\"}, \"authors\": [\"@mrk-its\"], \"category\": \"integration\", \"description\": \"Custom Component for fetching lightning data from blitzortung.org\", \"domain\": \"blitzortung\", \"etag_repository\": \"W/\\\"b148a947acb232b471e710769913aa1eff150e69539f3911f24e907481c1ae63\\\"\", \"full_name\": \"mrk-its/homeassistant-blitzortung\", \"last_updated\": \"2022-07-08T08:36:17Z\", \"stargazers_count\": 78, \"topics\": [\"blitzortung\", \"lightning-network\"], \"last_fetched\": 1657362862.607298, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"253842395\": {\"repository_manifest\": {\"name\": \"Jaguar Landrover InControl\", \"homeassistant\": \"0.115.0\"}, \"authors\": [\"@msp1974\"], \"category\": \"integration\", \"description\": \"An integration for JLR InControl to Home Assistant\", \"domain\": \"jlrincontrol\", \"etag_repository\": \"W/\\\"bd357c457301d99cd51e184d0127c2d8b1d2ba21b552b782e6022efd84398d9b\\\"\", \"full_name\": \"msp1974/homeassistant-jlrincontrol\", \"last_updated\": \"2022-04-28T14:07:39Z\", \"stargazers_count\": 28, \"topics\": [\"i-pace\", \"jaguar\", \"jlr\", \"landrover\", \"rrs\", \"vehicle\", \"wirelesscar\"], \"last_fetched\": 1656859303.541526, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"255662264\": {\"repository_manifest\": {\"name\": \"Landroid Cloud\", \"render_readme\": true, \"homeassistant\": \"2022.5.0\", \"zip_release\": true, \"filename\": \"landroid_cloud.zip\"}, \"authors\": [\"@MTrab\"], \"category\": \"integration\", \"description\": \"Landroid Cloud component for Home Assistant\", \"domain\": \"landroid_cloud\", \"downloads\": 1978, \"etag_repository\": \"W/\\\"af177b89c94614505a0aa0a16d9916ee57c920468ea387712f0eea69a6f80dd1\\\"\", \"full_name\": \"MTrab/landroid_cloud\", \"last_updated\": \"2022-07-04T10:32:28Z\", \"stargazers_count\": 93, \"topics\": [\"homeassistant-custom-component\", \"kress\", \"landroid\", \"landxcape\", \"mower-robot\", \"worx\"], \"last_fetched\": 1657362866.552018, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"269588712\": {\"repository_manifest\": {\"name\": \"Philips Hue Play HDMI Sync Box\", \"render_readme\": true, \"homeassistant\": \"2022.5.0\"}, \"authors\": [\"@mvdwetering\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for the Philips Hue Play HDMI Sync Box\", \"domain\": \"huesyncbox\", \"downloads\": 2, \"etag_repository\": \"W/\\\"2664e9f4a9693508e25cbf5299537d99465bc2f1aedf3b8fa688afbba335b58c\\\"\", \"full_name\": \"mvdwetering/huesyncbox\", \"last_updated\": \"2022-06-26T20:12:05Z\", \"stargazers_count\": 53, \"topics\": [\"hue-entertainment\", \"huesync\", \"philips-hue\"], \"last_fetched\": 1656859309.792413, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"192604318\": {\"repository_manifest\": {\"name\": \"iPhone Device Tracker\", \"homeassistant\": \"0.94.0\", \"zip_release\": true, \"filename\": \"iphonedetect.zip\"}, \"authors\": [\"@mudape\"], \"category\": \"integration\", \"description\": \"A custom component for Home Assistant to detect iPhones connected to local LAN, even if the phone is in deep sleep.\", \"domain\": \"iphonedetect\", \"downloads\": 8499, \"etag_repository\": \"W/\\\"8a6c9387abdf0036af3351264f18f9d72aa4d8cd6d04406b99d02fba1ec0540a\\\"\", \"full_name\": \"mudape/iphonedetect\", \"last_updated\": \"2022-06-15T17:47:40Z\", \"stargazers_count\": 199, \"topics\": [\"iphonedetect\"], \"last_fetched\": 1656859306.247092, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"278930028\": {\"repository_manifest\": {\"name\": \"Linkplay-based speakers and devices\", \"homeassistant\": \"2022.3.0\"}, \"authors\": [\"@nicjo814\", \"@limych\", \"@nagyrobi\"], \"category\": \"integration\", \"description\": \"LinkPlay based media devices integration for Home Assistant. Supports multiroom, Media Browser, and snapshot and restore functionality for TTS. Compatible with Mini Media Player card.\", \"domain\": \"linkplay\", \"etag_repository\": \"W/\\\"65a4e5bd1ba7cca059f048a961d268d6626a3fb5ecc4b7907e384cdf5f623730\\\"\", \"full_name\": \"nagyrobi/home-assistant-custom-components-linkplay\", \"last_updated\": \"2022-07-05T20:45:22Z\", \"stargazers_count\": 78, \"topics\": [\"arylic\", \"cvte\", \"harman-kardon\", \"linkplay\", \"media-player\", \"speaker\", \"tts\"], \"last_fetched\": 1657362871.726754, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"286186485\": {\"repository_manifest\": {\"name\": \"Scheduler component\", \"render_readme\": true}, \"authors\": [\"@nielsfaber\"], \"category\": \"integration\", \"description\": \"Custom component for HA that enables the creation of scheduler entities\", \"domain\": \"scheduler\", \"downloads\": 60, \"etag_repository\": \"W/\\\"1263da30f43c47436d4243978456901d867e471aa87879de33d57076039f9b4f\\\"\", \"full_name\": \"nielsfaber/scheduler-component\", \"last_updated\": \"2022-06-02T06:36:20Z\", \"stargazers_count\": 281, \"topics\": [\"scheduler\"], \"last_fetched\": 1657362877.958431, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"153870340\": {\"repository_manifest\": {\"name\": \"Harmony Hub Climate Controller\", \"homeassistant\": \"0.96.0\", \"render_readme\": true}, \"category\": \"integration\", \"description\": \"\\u2744 Use a Harmony Hub to control an IR controlled climate device\", \"domain\": \"harmony_ac\", \"etag_repository\": \"W/\\\"ffa4219cf1f80345bbdcdafa90f657792c65937cca158d0ac72a0faeb15d53de\\\"\", \"full_name\": \"nickneos/HA_harmony_climate_component\", \"last_updated\": \"2021-03-12T13:27:19Z\", \"stargazers_count\": 21, \"topics\": [\"air-conditioner\", \"climate\", \"harmony\", \"hvac\"], \"last_fetched\": 1656859315.463484, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"154417419\": {\"repository_manifest\": {}, \"category\": \"integration\", \"description\": \"Home Assistant custom component for the newer (2016+) Philips Android TVs\", \"domain\": \"philips_android_tv\", \"etag_repository\": \"W/\\\"4258ba853ce6ec8fd3ea1b8dd1d4f93fb579d3032bedc9a59836da9ad21dd258\\\"\", \"full_name\": \"nstrelow/ha_philips_android_tv\", \"last_updated\": \"2021-07-22T15:04:24Z\", \"stargazers_count\": 105, \"topics\": [\"philips-tv\", \"tv\"], \"last_fetched\": 1653733524.13011, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"144888844\": {\"repository_manifest\": {}, \"category\": \"integration\", \"description\": null, \"domain\": \"ovapi\", \"etag_repository\": \"W/\\\"99572312bd876d86ee1fd99f7e47d73bd88506b433b2767543aa832e76fee4ae\\\"\", \"full_name\": \"Paul-dH/Home-Assisant-Sensor-OvApi\", \"last_updated\": \"2022-02-13T09:05:36Z\", \"stargazers_count\": 14, \"last_fetched\": 1645380019.030876, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"140907992\": {\"repository_manifest\": {\"name\": \"Goldair WiFi climate devices\", \"render_readme\": true, \"hide_default_branch\": true, \"country\": [\"NZ\", \"AU\"], \"homeassistant\": \"0.96.0\", \"zip_release\": true, \"filename\": \"homeassistant-goldair-climate.zip\"}, \"authors\": [\"@nikrolls\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for Goldair WiFi heaters, dehumidifiers and fans\", \"domain\": \"goldair_climate\", \"etag_repository\": \"W/\\\"78f6bfdd44655d92452b5c7a786522f474e4a2cf96c076c6606108ca1ad11188\\\"\", \"full_name\": \"nicole-ashley/homeassistant-goldair-climate\", \"last_updated\": \"2021-05-24T23:53:41Z\", \"stargazers_count\": 13, \"topics\": [\"dehumidifier\", \"fan\", \"goldair\", \"heater\", \"wifi\"], \"last_fetched\": 1648400065.832316, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"250022973\": {\"repository_manifest\": {\"name\": \"SmartThinQ LGE Sensors\", \"homeassistant\": \"2022.5.0\"}, \"authors\": [\"@ollo69\"], \"category\": \"integration\", \"description\": \"HomeAssistant custom integration for SmartThinQ LG devices configurable with Lovelace User Interface.\", \"domain\": \"smartthinq_sensors\", \"etag_repository\": \"W/\\\"7ac4735eacfcec70809743ef98957ffe6b7c95740eb5d19e918d186031f64208\\\"\", \"full_name\": \"ollo69/ha-smartthinq-sensors\", \"last_updated\": \"2022-07-02T23:19:18Z\", \"stargazers_count\": 482, \"topics\": [\"ac\", \"air-purifier\", \"climate\", \"dehumidifier\", \"dishwasher\", \"dryer\", \"fan\", \"lg\", \"lg-devices\", \"lge\", \"oven\", \"range\", \"refrigerator\", \"sensors\", \"smartthinq\", \"thinq\", \"washer\"], \"last_fetched\": 1657362882.719625, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"255110178\": {\"repository_manifest\": {\"name\": \"Weback cloud integration\", \"render_readme\": true, \"hide_default_branch\": true}, \"authors\": [\"@opravdin\"], \"category\": \"integration\", \"description\": \"Weback integration with Home Assistant\", \"domain\": \"weback\", \"etag_repository\": \"W/\\\"5b131a8f707ce40a247b6ce48d917c9cf6249be9c47c3d5f205d22717ca968e8\\\"\", \"full_name\": \"opravdin/weback-hass\", \"last_updated\": \"2021-08-14T11:04:06Z\", \"stargazers_count\": 33, \"topics\": [\"home-assistant-component\", \"weback\"], \"last_fetched\": 1653229848.980576, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"247070270\": {\"repository_manifest\": {\"name\": \"SamsungTV Smart\", \"homeassistant\": \"2022.5.0\"}, \"authors\": [\"@ollo69\"], \"category\": \"integration\", \"description\": \"\\ud83d\\udcfa Home Assistant SamsungTV Smart Component with simplified SmartThings API Support configurable from User Interface.\", \"domain\": \"samsungtv_smart\", \"etag_repository\": \"W/\\\"5b7fd5aa3e02d298d5fa0831c4375165036d917da118f591ee32890e1f81ebcd\\\"\", \"full_name\": \"ollo69/ha-samsungtv-smart\", \"last_updated\": \"2022-06-26T22:08:03Z\", \"stargazers_count\": 201, \"topics\": [\"samsung\", \"samsung-smart-tv\", \"samsung-tv\", \"smartthings\"], \"last_fetched\": 1657362881.945806, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"237102126\": {\"repository_manifest\": {\"name\": \"Warsaw ZTM Information\", \"country\": [\"PL\"], \"homeassistant\": \"0.100.0\"}, \"authors\": [\"@kabturek\", \"@peetereczek\"], \"category\": \"integration\", \"description\": \"Home Assistant (hass.io) custom component for Warsaw public transport\", \"domain\": \"ztm\", \"etag_repository\": \"W/\\\"f429d3f94fbb87d014fd0bae4be34d29f0cf4d951c5f4b2d962bbe5772b449e3\\\"\", \"full_name\": \"peetereczek/ztm\", \"last_updated\": \"2022-02-02T11:15:20Z\", \"stargazers_count\": 4, \"last_fetched\": 1644064240.794748, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"256733675\": {\"repository_manifest\": {\"name\": \"Cover Time Based RF (script/entity)\", \"homeassistant\": \"2021.4\"}, \"authors\": [\"@davidramosweb\", \"@nagyrobi\", \"@Alfiegerner\"], \"category\": \"integration\", \"description\": \"Time-based cover with customizable scripts or entity to trigger opening, stopping and closing. Position is calculated based on the fraction of time spent by the cover traveling up or down. State can be updated with information based on external sensors.\", \"domain\": \"cover_rf_time_based\", \"etag_repository\": \"W/\\\"c89040b678a3c5f4602ded03d0759c6294fd248c0bb74de8ec7ce0cacc83ca10\\\"\", \"full_name\": \"nagyrobi/home-assistant-custom-components-cover-rf-time-based\", \"last_updated\": \"2022-06-03T15:03:08Z\", \"stargazers_count\": 43, \"topics\": [\"433\", \"433mhz\", \"cover\", \"rf\", \"roller-shutters\", \"script\", \"service\", \"shutter\", \"trigger\"], \"last_fetched\": 1656859312.105088, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"259270792\": {\"repository_manifest\": {}, \"authors\": [\"@peternijssen\"], \"category\": \"integration\", \"description\": \":convenience_store: Integrate Jumbo.com in Home Assistant\", \"domain\": \"jumbo\", \"etag_repository\": \"W/\\\"91ca1fecb2d400602705bfb1817fd0cdebe4723b69830365aaeaa741ee1ce322\\\"\", \"full_name\": \"peternijssen/home-assistant-jumbo\", \"last_updated\": \"2021-03-29T18:10:16Z\", \"stargazers_count\": 7, \"topics\": [\"jumbo\", \"supermarket\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"196057008\": {\"repository_manifest\": {\"name\": \"Attributes extractor\", \"homeassistant\": \"0.103.0\"}, \"authors\": [\"@pilotak\"], \"category\": \"integration\", \"description\": \"Breaks out specified attribute from other entities to a sensor\", \"domain\": \"attributes\", \"etag_repository\": \"W/\\\"63c65127b7569b957eaefd44694525e379c64e74693a1f4f1faf837e46581291\\\"\", \"full_name\": \"pilotak/homeassistant-attributes\", \"last_updated\": \"2021-03-13T13:11:19Z\", \"stargazers_count\": 68, \"topics\": [\"attributes\", \"breakout\"], \"last_fetched\": 1649613891.738973, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"236123258\": {\"repository_manifest\": {\"name\": \"Camect Integration\", \"country\": \"US\", \"homeassistant\": \"0.99.9\", \"render_readme\": true}, \"authors\": [\"@camect\"], \"category\": \"integration\", \"description\": \"A HACS integration for the Camect smart home surveillance system\", \"domain\": \"camect\", \"etag_repository\": \"W/\\\"b53e031cdfd892dde1768da443ff7062e9f3f0c95c17a9c67f1a45acda0a258a\\\"\", \"full_name\": \"pfunkmallone/HACS-camect-integration\", \"last_updated\": \"2022-06-22T04:52:26Z\", \"stargazers_count\": 3, \"topics\": [\"camect\"], \"last_fetched\": 1656859329.616619, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"196055705\": {\"repository_manifest\": {\"name\": \"Clientraw weather parser\", \"homeassistant\": \"2022.2\"}, \"authors\": [\"@pilotak\"], \"category\": \"integration\", \"description\": \"Clientraw weather parser (clientraw.txt) for HomeAssistant\", \"domain\": \"clientraw\", \"etag_repository\": \"W/\\\"960427d605ba7cf7d4bf7e909d31a6215ea95b08bb560d9effed25b7d2ab2ac0\\\"\", \"full_name\": \"pilotak/homeassistant-clientraw\", \"last_updated\": \"2022-03-20T18:42:05Z\", \"stargazers_count\": 10, \"topics\": [\"clientraw\", \"davis\", \"weather\"], \"last_fetched\": 1648400066.882446, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"199549304\": {\"repository_manifest\": {\"name\": \"Google Keep\", \"render_readme\": true, \"zip_release\": true, \"filename\": \"google_keep.zip\"}, \"authors\": [\"@PiotrMachowski\"], \"category\": \"integration\", \"description\": \"This sensor uses gkeepapi library to download a list of notes from https://keep.google.com/.\", \"domain\": \"google_keep\", \"downloads\": 1712, \"etag_repository\": \"W/\\\"463d7991a1f709078e9181781b0bd889341998c72bb5da84a0d142452f522636\\\"\", \"full_name\": \"PiotrMachowski/Home-Assistant-custom-components-Google-Keep\", \"last_updated\": \"2022-01-23T03:39:58Z\", \"stargazers_count\": 48, \"topics\": [\"notes\"], \"last_fetched\": 1656859334.192113, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"193371469\": {\"repository_manifest\": {\"name\": \"Antistorm sensor\", \"country\": [\"PL\"], \"render_readme\": true, \"zip_release\": true, \"filename\": \"antistorm.zip\"}, \"authors\": [\"PiotrMachowski\"], \"category\": \"integration\", \"description\": \"This sensor uses official API to get storm warnings from https://antistorm.eu.\", \"domain\": \"antistorm\", \"etag_repository\": \"W/\\\"2cd2262df258bc63ec50c7f5ece848e4f146e4cdcacc137a0807119b73092571\\\"\", \"full_name\": \"PiotrMachowski/Home-Assistant-custom-components-Antistorm\", \"last_updated\": \"2022-01-23T02:16:53Z\", \"stargazers_count\": 10, \"topics\": [\"weather\"], \"last_fetched\": 1643571243.522058, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"193371652\": {\"repository_manifest\": {\"name\": \"Looko2 sensor\", \"country\": [\"PL\"], \"render_readme\": true, \"zip_release\": true, \"filename\": \"looko2.zip\"}, \"authors\": [\"PiotrMachowski\"], \"category\": \"integration\", \"description\": \"This sensor uses official API to get air quality data from https://looko2.com.\", \"domain\": \"looko2\", \"etag_repository\": \"W/\\\"97e4a5d297b03104d88c016843750ffd124377c4f08b65934c2aec25bd393e9d\\\"\", \"full_name\": \"PiotrMachowski/Home-Assistant-custom-components-Looko2\", \"last_updated\": \"2022-01-23T17:08:49Z\", \"stargazers_count\": 5, \"topics\": [\"air-quality\", \"weather\"], \"last_fetched\": 1643571244.090062, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"207881337\": {\"repository_manifest\": {\"name\": \"Anniversaries\", \"zip_release\": true, \"filename\": \"anniversaries.zip\", \"homeassistant\": \"0.109.0\"}, \"authors\": [\"@pinkywafer\"], \"category\": \"integration\", \"description\": \"Anniversary Countdown Sensor for Home Assistant\", \"domain\": \"anniversaries\", \"downloads\": 3970, \"etag_repository\": \"W/\\\"c1fb46d1a715fa58c5b183b77871947f97855c14be3b300eec5f74ade6e90fd2\\\"\", \"full_name\": \"pinkywafer/Anniversaries\", \"last_updated\": \"2022-06-27T19:50:33Z\", \"stargazers_count\": 112, \"topics\": [\"anniversaries\"], \"last_fetched\": 1657362894.192437, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"193588464\": {\"repository_manifest\": {\"name\": \"Rozk\\u0142adzik sensor\", \"country\": [\"PL\"], \"render_readme\": true, \"zip_release\": true, \"filename\": \"rozkladzik.zip\"}, \"authors\": [\"PiotrMachowski\"], \"category\": \"integration\", \"description\": \"This sensor uses unofficial API to get data from https://www.rozkladzik.pl and provide information about departures for chosen stop.\", \"domain\": \"rozkladzik\", \"etag_repository\": \"W/\\\"a494d81d29798d4018cc22020d1a2d72e46aab03ba109ad9056f63ace0eb6e0a\\\"\", \"full_name\": \"PiotrMachowski/Home-Assistant-custom-components-Rozkladzik\", \"last_updated\": \"2022-01-24T02:34:46Z\", \"stargazers_count\": 7, \"topics\": [\"public-transport\"], \"last_fetched\": 1648400067.208445, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"193588612\": {\"repository_manifest\": {\"name\": \"iMPK sensor\", \"country\": [\"PL\"], \"render_readme\": true, \"zip_release\": true, \"filename\": \"impk.zip\"}, \"authors\": [\"PiotrMachowski\"], \"category\": \"integration\", \"description\": \"This sensor uses unofficial API retrieved by decompilation of iMPK application to provide a list of MPK Wroc\\u0142aw news available in original app.\", \"domain\": \"impk\", \"etag_repository\": \"W/\\\"6f671f7da1df66ed13d3ab2c486ab1e83ee36aa4ed3b1603beaf37e34ded2d10\\\"\", \"full_name\": \"PiotrMachowski/Home-Assistant-custom-components-iMPK\", \"last_updated\": \"2022-01-23T16:43:48Z\", \"stargazers_count\": 13, \"topics\": [\"public-transport\", \"wroclaw\"], \"last_fetched\": 1644420427.223118, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"224073673\": {\"repository_manifest\": {\"name\": \"Calendarific\", \"zip_release\": true, \"filename\": \"calendarific.zip\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@pinkywafer\"], \"category\": \"integration\", \"description\": \"Calendarific holiday sensor for Home Assistant \", \"domain\": \"calendarific\", \"downloads\": 692, \"etag_repository\": \"W/\\\"7f543b8f9b6127a2dd3010f6ec8b781a864831ffeba2ec426e2624a668c3ca4b\\\"\", \"full_name\": \"pinkywafer/Calendarific\", \"last_updated\": \"2022-01-07T16:04:10Z\", \"stargazers_count\": 14, \"topics\": [\"api-client\", \"calendarific\", \"holidays\"], \"last_fetched\": 1656859332.634263, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"193371566\": {\"repository_manifest\": {\"name\": \"Burze.dzis.net sensor\", \"country\": [\"EU\", \"PL\"], \"render_readme\": true, \"zip_release\": true, \"filename\": \"antistorm.zip\"}, \"authors\": [\"PiotrMachowski\"], \"category\": \"integration\", \"description\": \"This sensor uses official API to get weather warnings for Poland and storm warnings for Europe from https://burze.dzis.net.\", \"domain\": \"burze_dzis_net\", \"etag_repository\": \"W/\\\"798d29080250234f0bdcc420155ef1fbbda9ed025ac8f968136b889fac467a0b\\\"\", \"full_name\": \"PiotrMachowski/Home-Assistant-custom-components-Burze.dzis.net\", \"last_updated\": \"2022-01-23T02:37:19Z\", \"stargazers_count\": 27, \"topics\": [\"weather\"], \"last_fetched\": 1648840234.488555, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"193371922\": {\"repository_manifest\": {\"name\": \"Tauron AMIplus\", \"render_readme\": true, \"zip_release\": true, \"filename\": \"tauron_amiplus.zip\", \"country\": \"PL\"}, \"authors\": [\"PiotrMachowski\"], \"category\": \"integration\", \"description\": \"This sensor uses unofficial API to get energy usage and generation data from https://elicznik.tauron-dystrybucja.pl.\", \"domain\": \"tauron_amiplus\", \"downloads\": 608, \"etag_repository\": \"W/\\\"a524480ca676cef97afa94debfcf18dfe674032bb04909c7aa4ecdc9ff3cf541\\\"\", \"full_name\": \"PiotrMachowski/Home-Assistant-custom-components-Tauron-AMIplus\", \"last_updated\": \"2022-05-06T14:52:31Z\", \"stargazers_count\": 56, \"topics\": [\"energy-monitor\"], \"last_fetched\": 1656859336.953369, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"271398374\": {\"repository_manifest\": {\"name\": \"Saver\", \"render_readme\": true, \"zip_release\": true, \"filename\": \"saver.zip\"}, \"authors\": [\"@PiotrMachowski\"], \"category\": \"integration\", \"description\": \"This custom component allows you to save current state of any entity and use its data later to restore it.\", \"domain\": \"saver\", \"downloads\": 866, \"etag_repository\": \"W/\\\"bcafb7ba7fdb44ca6baf194b81efd0c971354bd1bbccae3680f39ae81a250424\\\"\", \"full_name\": \"PiotrMachowski/Home-Assistant-custom-components-Saver\", \"last_updated\": \"2022-01-24T03:25:16Z\", \"stargazers_count\": 35, \"topics\": [\"automation\", \"helper\", \"save\", \"script\", \"variable\"], \"last_fetched\": 1656859335.75266, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"166045890\": {\"repository_manifest\": {}, \"authors\": [\"@pippyn\"], \"category\": \"integration\", \"description\": \"Provides Home Assistant sensors for multiple Dutch and Belgium waste collectors\", \"domain\": \"afvalbeheer\", \"etag_repository\": \"W/\\\"7fc26310b4ddeb821a8d80ba17c4b9d87d1a066611b7bce50557baf60400161f\\\"\", \"full_name\": \"pippyn/Home-Assistant-Sensor-Afvalbeheer\", \"last_updated\": \"2022-07-05T06:49:43Z\", \"stargazers_count\": 149, \"topics\": [\"belgium\", \"dutch\", \"hassio-integration\", \"waste-collectors\"], \"last_fetched\": 1657362899.525134, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"209996125\": {\"repository_manifest\": {\"name\": \"Remote PicoTTS\", \"render_readme\": true, \"homeassistant\": \"0.36\"}, \"category\": \"integration\", \"description\": \"A custom component for Home Assistant which integrates my picoTTS Addon on HASS.io,\", \"domain\": \"picotts_remote\", \"etag_repository\": \"W/\\\"0e89c58cb6103e630a4f2670da96905daeba717d47bef46a26e15236ce7d278f\\\"\", \"full_name\": \"Poeschl/Remote-PicoTTS\", \"last_updated\": \"2021-03-05T16:22:33Z\", \"stargazers_count\": 9, \"topics\": [\"component\", \"picotts-addon\", \"remote-picotts\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"281956859\": {\"repository_manifest\": {\"name\": \"D-Link HNAP\", \"homeassistant\": \"0.109.0\", \"render_readme\": true}, \"authors\": [\"@postlund\"], \"category\": \"integration\", \"description\": \"Experimental integration to Home Assistant supporting D-Link devices\", \"domain\": \"dlink_hnap\", \"etag_repository\": \"W/\\\"f85bc951e2b0832538e3f1e034d4f8ee06b61fecc88a8e104dec222e42dc679b\\\"\", \"full_name\": \"postlund/dlink_hnap\", \"last_updated\": \"2022-02-09T09:06:58Z\", \"stargazers_count\": 27, \"topics\": [\"custom-integration\", \"dlink\"], \"last_fetched\": 1653229867.581391, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"238568340\": {\"repository_manifest\": {\"name\": \"Freebox Player\"}, \"authors\": [\"@Pouzor\"], \"category\": \"integration\", \"description\": \"Custom Component for Home Assistant, enable to remote Freebox Player\", \"domain\": \"freebox_player\", \"etag_repository\": \"W/\\\"66e4b350933d2bc5725a9829ccec53d34fd72bab8d95c40425981650db4f8f06\\\"\", \"full_name\": \"Pouzor/freebox_player\", \"last_updated\": \"2021-05-12T23:52:40Z\", \"stargazers_count\": 12, \"topics\": [\"freebox\"], \"last_fetched\": 1653229869.006332, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"219035415\": {\"repository_manifest\": {\"name\": \"GeoRide integration\", \"render_readme\": true, \"country\": [\"FR\"], \"homeassistant\": \"2022.2.0\"}, \"authors\": [\"ptimatth\"], \"category\": \"integration\", \"description\": \"GeoRide integration for Home Assistant\", \"domain\": \"georide\", \"etag_repository\": \"W/\\\"f0ec990eaae69854767cb4b003fc4bece7504519a4928892507287e8a968e313\\\"\", \"full_name\": \"ptimatth/GeorideHA\", \"last_updated\": \"2022-04-06T15:56:13Z\", \"stargazers_count\": 10, \"last_fetched\": 1656859340.832931, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"289550686\": {\"repository_manifest\": {\"name\": \"Zoom\", \"render_readme\": true, \"homeassistant\": \"2021.5.0b0\", \"zip_release\": true, \"filename\": \"zoom.zip\"}, \"authors\": [\"@raman325\"], \"category\": \"integration\", \"description\": \"Custom Home Assistant component for Zoom. Tracks when you are connected to a Zoom call by default but may allow you to track more.\", \"domain\": \"zoom\", \"downloads\": 585, \"etag_repository\": \"W/\\\"031145fccf596d4396a15aa5b268133a877cebd3d7d860ce874ee314d17b4d79\\\"\", \"full_name\": \"raman325/ha-zoom-automation\", \"last_updated\": \"2022-05-28T06:29:48Z\", \"stargazers_count\": 51, \"topics\": [\"automation\", \"ha\", \"webhook-event\", \"zoom\"], \"last_fetched\": 1656859344.691168, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"197983504\": {\"repository_manifest\": {}, \"authors\": [\"@rdehuyss\"], \"category\": \"integration\", \"description\": \"Support for Denkovi IOT Relay modules in HomeAssistant\", \"domain\": \"denkovi\", \"etag_repository\": \"W/\\\"90d830139f4f549c3b1b20e60a5ef2b25a34277c70b1e0e818881f39dcad838e\\\"\", \"full_name\": \"rdehuyss/homeassistant-custom_components-denkovi\", \"last_updated\": \"2021-07-24T21:00:35Z\", \"stargazers_count\": 5, \"topics\": [\"denkovi\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"260264517\": {\"repository_manifest\": {\"name\": \"ClimaCell Weather Provider\"}, \"authors\": [\"@r-renato\"], \"category\": \"integration\", \"description\": \"Climacell weather provider integration is a custom component for Home Assistant. The climacell platform uses the Climacell API as a source for meteorological data for your location.\", \"domain\": \"climacell\", \"etag_repository\": \"W/\\\"59b1b4c02048fffb5d1840953062c35dee2ab7f978ba55026a80f58983cd4092\\\"\", \"full_name\": \"r-renato/ha-climacell-weather\", \"last_updated\": \"2022-06-01T18:02:35Z\", \"stargazers_count\": 44, \"topics\": [\"climacell\", \"weather\"], \"last_fetched\": 1656859343.972718, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"268118148\": {\"repository_manifest\": {\"name\": \"Gardena Smart System\", \"render_readme\": true, \"homeassistant\": \"0.115.0\"}, \"authors\": [\"@py-smart-gardena\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component integration for Gardena Smart System\", \"domain\": \"gardena_smart_system\", \"etag_repository\": \"W/\\\"2235467c1873f3e9dda5c07827cebe151156916f639d1c100519b3f1eaa169f6\\\"\", \"full_name\": \"py-smart-gardena/hass-gardena-smart-system\", \"last_updated\": \"2022-06-24T19:41:17Z\", \"stargazers_count\": 98, \"topics\": [\"gardena\", \"gardena-api\", \"gardena-smart-system\"], \"last_fetched\": 1656859342.048984, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"225305915\": {\"repository_manifest\": {\"name\": \"BAR garbage collection\"}, \"authors\": [\"@Martinvdm\", \"@vloris\", \"@remco770\"], \"category\": \"integration\", \"description\": \"Garbage collection BAR for Home Assistant\", \"domain\": \"bar_afvalbeheer\", \"etag_repository\": \"W/\\\"d90e45ade1074fa9cec84edbb2634bb498153696566dcf68d03515dda4c501e2\\\"\", \"full_name\": \"remco770/garbage-bar-homeassistant\", \"last_updated\": \"2021-08-24T17:27:18Z\", \"stargazers_count\": 2, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"257634153\": {\"repository_manifest\": {\"name\": \"FXMarketAPI Integration\"}, \"authors\": [\"@rob196\"], \"category\": \"integration\", \"description\": \"This is a custom component to integrate into FXMarketAPI (https://fxmarketapi.com) to get the live mid-rates in Home Assistant.\", \"domain\": \"fxmarketapi\", \"etag_repository\": \"W/\\\"65a77eae76da8e3ec1dcefd7da4667b745b8f2054e31685c6d5c623a865ad05e\\\"\", \"full_name\": \"rob196/home-assistant-fxmarketapi\", \"last_updated\": \"2021-06-01T16:32:25Z\", \"stargazers_count\": 2, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"255380953\": {\"repository_manifest\": {\"name\": \"YouLess LS110\", \"country\": [\"NL\"], \"render_readme\": true}, \"authors\": [\"@rkoebrugge\", \"@reharmsen\", \"@pdwonline\", \"@jongsoftdev\"], \"category\": \"integration\", \"description\": \"Custom Youless LS110 component for Home-Assistant \", \"domain\": \"youless\", \"etag_repository\": \"W/\\\"a4836852f4e92850fd7c1955a7df5e348d8da34c2b94f403f4767abf166da6f3\\\"\", \"full_name\": \"rkoebrugge/hacs-youless-component\", \"last_updated\": \"2020-06-19T08:52:21Z\", \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"140618233\": {\"repository_manifest\": {}, \"authors\": [\"@robhofmann\"], \"category\": \"integration\", \"description\": \"Custom Gree climate component written in Python3 for Home Assistant. Controls AC's supporting the Gree protocol.\", \"domain\": \"gree\", \"etag_repository\": \"W/\\\"57ae2c50469982d13497a3b365ff88324601164fccbcb5b2f1cec4e701846185\\\"\", \"full_name\": \"RobHofmann/HomeAssistant-GreeClimateComponent\", \"last_updated\": \"2022-06-15T15:21:01Z\", \"stargazers_count\": 160, \"last_fetched\": 1656859352.945278, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"241427839\": {\"repository_manifest\": {\"name\": \"Omnik Inverter Solar Sensor (No Cloud)\", \"country\": \"NL\", \"homeassistant\": \"2021.9.0\"}, \"authors\": [\"@robbinjanssen\"], \"category\": \"integration\", \"description\": \"Read the current, daily and total Wh from your Omnik Inverter via local network (no cloud!)\", \"domain\": \"omnik_inverter\", \"etag_repository\": \"W/\\\"84f378a58e9b48f323a646967754b558233d442fd6bb2994a351cc7449ece59d\\\"\", \"full_name\": \"robbinjanssen/home-assistant-omnik-inverter\", \"last_updated\": \"2022-06-10T09:09:42Z\", \"stargazers_count\": 29, \"topics\": [\"home-assistant-sensor\", \"python3\"], \"last_fetched\": 1657362912.198027, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"196605143\": {\"repository_manifest\": {}, \"authors\": [\"@SirGilbot\", \"@robhofmann\"], \"category\": \"integration\", \"description\": \"Custom component for Philips TV's running Android which are built between 2014 and 2016. Written in Python3 for Home Assistant.\", \"domain\": \"philips_2014\", \"etag_repository\": \"W/\\\"9626b4219b9f485e48dd103bd68432340a0c139b1ec743ebb0d7387513fe0cb4\\\"\", \"full_name\": \"RobHofmann/HomeAssistant-PhilipsAndroid2014\", \"last_updated\": \"2021-05-09T12:39:18Z\", \"stargazers_count\": 1, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"213551635\": {\"repository_manifest\": {}, \"authors\": [\"@roberodin\"], \"category\": \"integration\", \"description\": \"\\ud83d\\udcfa HomeAssistant - SamsungTV Custom Component\", \"domain\": \"samsungtv_custom\", \"etag_repository\": \"W/\\\"fc82e83b4cd15c0f37caa3a5cf54de15c76ca74c0e17b5595488ca03f4b9a393\\\"\", \"full_name\": \"roberodin/ha-samsungtv-custom\", \"last_updated\": \"2021-10-15T02:14:29Z\", \"stargazers_count\": 101, \"last_fetched\": 1653229878.880112, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"197116235\": {\"repository_manifest\": {}, \"authors\": [\"@robmarkcole\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for using Deepstack face recognition\", \"domain\": \"deepstack_face\", \"etag_repository\": \"W/\\\"52f5f26c7962b531b65ed8c631787f4d5226d1e1c7924075a6a74909c0859a2d\\\"\", \"full_name\": \"robmarkcole/HASS-Deepstack-face\", \"last_updated\": \"2022-07-05T04:16:46Z\", \"stargazers_count\": 186, \"topics\": [\"computer-vision\", \"deep-learning\"], \"last_fetched\": 1657362916.490986, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"165791238\": {\"repository_manifest\": {}, \"authors\": [\"@robmarkcole\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for using Deepstack object detection\", \"domain\": \"deepstack_object\", \"etag_repository\": \"W/\\\"10fdb7451ea779e636a02094a07dcb8712c4a92f2e1e301af42e322cfbbc13d0\\\"\", \"full_name\": \"robmarkcole/HASS-Deepstack-object\", \"last_updated\": \"2022-07-05T03:30:36Z\", \"stargazers_count\": 363, \"topics\": [\"object-detection\"], \"last_fetched\": 1657362916.895152, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"117426840\": {\"repository_manifest\": {\"name\": \"Volkswagen We Connect\", \"homeassistant\": \"2021.12.0b1\", \"hide_default_branch\": true, \"zip_release\": true, \"filename\": \"volkswagencarnet.zip\"}, \"authors\": [\"@robinostlund\"], \"category\": \"integration\", \"description\": \"Volkswagen Carnet Component for home assistant\", \"domain\": \"volkswagencarnet\", \"downloads\": 2225, \"etag_repository\": \"W/\\\"821048c93940aed57ea32f32d3ebcbe55b2342081ced627d03073393ed698a64\\\"\", \"full_name\": \"robinostlund/homeassistant-volkswagencarnet\", \"last_updated\": \"2022-06-12T13:39:37Z\", \"stargazers_count\": 178, \"topics\": [\"volkswagen-carnet\"], \"last_fetched\": 1656859354.678572, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"135166048\": {\"repository_manifest\": {}, \"authors\": [\"@robmarkcole\"], \"category\": \"integration\", \"description\": \"Home-Assistant image classification using Machinebox.io\", \"domain\": \"classificationbox\", \"etag_repository\": \"W/\\\"6d776a9e89f890553cb931ce2d11c1f4072ea1ab460f676eacb975a51be37857\\\"\", \"full_name\": \"robmarkcole/HASS-Machinebox-Classificationbox\", \"last_updated\": \"2022-03-02T07:15:53Z\", \"stargazers_count\": 18, \"topics\": [\"computer-vision\", \"deep-neural-networks\", \"machinebox\"], \"last_fetched\": 1646497047.496838, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"160022220\": {\"repository_manifest\": {\"name\": \"Amazon Rekognition\"}, \"authors\": [\"@robmarkcole\"], \"category\": \"integration\", \"description\": \"Home Assistant Object detection with Amazon Rekognition\", \"domain\": \"amazon_rekognition\", \"etag_repository\": \"W/\\\"bd3cde3da7641e718e07abb13d9d14d0607e29ce5b2686a87523c13bbf9d1b4a\\\"\", \"full_name\": \"robmarkcole/HASS-amazon-rekognition\", \"last_updated\": \"2022-03-12T00:26:39Z\", \"stargazers_count\": 76, \"topics\": [\"rekognition\"], \"last_fetched\": 1656859355.548215, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"149443194\": {\"repository_manifest\": {\"name\": \"ADT Pulse\", \"render_readme\": true}, \"authors\": [\"@rsnodgrass\"], \"category\": \"integration\", \"description\": \"ADT Pulse sensor for Home Assistant\", \"domain\": \"adtpulse\", \"etag_repository\": \"W/\\\"fa26cd307047c2d8269d7aff20fecee5c6af11b917f20257c801db1d38c000e5\\\"\", \"full_name\": \"rsnodgrass/hass-adtpulse\", \"last_updated\": \"2022-01-02T10:13:07Z\", \"stargazers_count\": 11, \"topics\": [\"adt-pulse\"], \"last_fetched\": 1641217281.58954, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"179931720\": {\"repository_manifest\": {}, \"authors\": [\"@rsnodgrass\"], \"category\": \"integration\", \"description\": \"Home Assistant smart home platform integrations including sensors and custom tools\", \"domain\": \"groupme\", \"etag_repository\": \"W/\\\"72558d49a3f60a848c2b4c4e948161dfc83fd6985e96315bd2ca018939ed927b\\\"\", \"full_name\": \"rsnodgrass/hass-integrations\", \"last_updated\": \"2019-12-17T02:59:22Z\", \"stargazers_count\": 8, \"topics\": [\"water-sensor\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"200989730\": {\"repository_manifest\": {\"name\": \"Flo by Moen Smart Water Monitor\", \"render_readme\": true}, \"authors\": [\"@rsnodgrass\", \"@snicker\", \"@DubhAd\"], \"category\": \"integration\", \"description\": \"Flo Water Control for Home Assistant\", \"domain\": \"flo\", \"etag_repository\": \"W/\\\"26393ca5e93d6871f9126bf9226b2619c8b38d6336d0958afe8e2f2c2679bd5d\\\"\", \"full_name\": \"rsnodgrass/hass-flo-water\", \"last_updated\": \"2021-03-23T21:58:09Z\", \"stargazers_count\": 8, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"200927325\": {\"repository_manifest\": {\"name\": \"Pool Math (Trouble Free Pool)\", \"render_readme\": true}, \"authors\": [\"@rsnodgrass\"], \"category\": \"integration\", \"description\": \"Pool Math for Home Assistant\", \"domain\": \"poolmath\", \"etag_repository\": \"W/\\\"df93f2eebeb8d0edf17419ae2453f6127055fcce41f140df20ca8d4eed06d880\\\"\", \"full_name\": \"rsnodgrass/hass-poolmath\", \"last_updated\": \"2022-07-02T03:54:23Z\", \"stargazers_count\": 18, \"topics\": [\"pool\", \"swimming-pool\"], \"last_fetched\": 1657362924.691628, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"205416078\": {\"repository_manifest\": {\"name\": \"SensorPush\", \"render_readme\": true}, \"authors\": [\"@rsnodgrass\"], \"category\": \"integration\", \"description\": \"SensorPush integration for Home Assistant\", \"domain\": \"sensorpush\", \"etag_repository\": \"W/\\\"37234a150d55221a1890efe22ecaf997268401d7e67c5c8da3001cf92193d727\\\"\", \"full_name\": \"rsnodgrass/hass-sensorpush\", \"last_updated\": \"2022-07-06T23:43:29Z\", \"stargazers_count\": 23, \"topics\": [\"iot\"], \"last_fetched\": 1657362925.240624, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"153006394\": {\"repository_manifest\": {}, \"authors\": [\"@yuval_mejahez\"], \"category\": \"integration\", \"description\": null, \"domain\": \"school_holidays\", \"etag_repository\": \"W/\\\"d13f51c8701347dbbf2f8d9738299ab4ecf08a1ecd8b013132f8597f1a7c70f4\\\"\", \"full_name\": \"rt400/School-Vacation\", \"last_updated\": \"2022-06-21T17:23:05Z\", \"stargazers_count\": 6, \"last_fetched\": 1656859366.910847, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"235385658\": {\"repository_manifest\": {\"name\": \"Xantech Multi-Zone Audio Amps\", \"render_readme\": true}, \"authors\": [\"@rsnodgrass\"], \"category\": \"integration\", \"description\": \"Xantech Multi-Zone Matrix Audio for Home Assistant\", \"domain\": \"xantech\", \"etag_repository\": \"W/\\\"ba1e1e5ad7bd755ee8b0db15d56c6a9b6a8e471f015eb3bcabd93ec50e725772\\\"\", \"full_name\": \"rsnodgrass/hass-xantech\", \"last_updated\": \"2022-06-03T05:47:06Z\", \"stargazers_count\": 7, \"topics\": [\"audiophile\", \"xantech\"], \"last_fetched\": 1657362925.537109, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"235915302\": {\"repository_manifest\": {\"name\": \"Marta / Breeze Card\", \"render_readme\": true}, \"category\": \"integration\", \"description\": \"Custom Home Assistant sensor for the Marta/Breeze Card.\", \"domain\": \"marta\", \"etag_repository\": \"W/\\\"252ba5cc1d8451938241639e4440e98b658fbc643e94f915f9c09070c83cd455\\\"\", \"full_name\": \"ryanmac8/Home-Assistant-Marta\", \"last_updated\": \"2021-05-13T14:56:54Z\", \"stargazers_count\": 1, \"topics\": [\"breeze-card\", \"marta\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"279861920\": {\"repository_manifest\": {\"name\": \"Reverso TTS / tts\", \"render_readme\": true}, \"authors\": [\"@yuval_mejahez\"], \"category\": \"integration\", \"description\": \"ReversoTTS component for HomeAssistant\", \"domain\": \"reversotts\", \"etag_repository\": \"W/\\\"215b0f6ea5db60e010f5fc6c7d3f29ff38f92b72f451254ae52bf6a6a4e1d6ca\\\"\", \"full_name\": \"rt400/ReversoTTS-HA\", \"last_updated\": \"2021-05-23T17:14:46Z\", \"stargazers_count\": 30, \"topics\": [\"reversotts\", \"tts\"], \"last_fetched\": 1656859366.843372, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"222845480\": {\"repository_manifest\": {\"name\": \"Nexia Climate Integration\", \"render_readme\": true}, \"authors\": [\"ryannazaretian\"], \"category\": \"integration\", \"description\": \"Nexia climate integration for Trane and American Standard thermostats\", \"domain\": \"nexia\", \"etag_repository\": \"W/\\\"7df9e62e9d12e82a61e0910bd8db24ed52c34834673c0115783d3b365ab129bb\\\"\", \"full_name\": \"ryannazaretian/hacs-nexia-climate-integration\", \"last_updated\": \"2020-04-17T15:57:11Z\", \"stargazers_count\": 10, \"topics\": [\"american-standard\", \"nexia\", \"nexia-thermostat\", \"trane\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"224743334\": {\"repository_manifest\": {\"name\": \"Hunter Douglas and Luxaflex PowerView Cover\"}, \"authors\": [\"@safepay\"], \"category\": \"integration\", \"description\": \"Control Hunter Douglas / Luxaflex PowerView Window Shades in Home Assistant\", \"domain\": \"hd_powerview\", \"etag_repository\": \"W/\\\"3ff35957be953107455111fc71be11c4ed035346e27b23c39ec70d6a5e2c8e7c\\\"\", \"full_name\": \"safepay/cover.hd_powerview\", \"last_updated\": \"2021-08-19T04:28:48Z\", \"stargazers_count\": 5, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"194971711\": {\"repository_manifest\": {}, \"authors\": [\"@safepay\"], \"category\": \"integration\", \"description\": \"A WillyWeather Australian Bureau of Meteorology (BoM) integration for Home Assistant\", \"domain\": \"willyweather\", \"etag_repository\": \"W/\\\"7e50265666780e423a882bf2db2bcbaabf0c44f6eedb46bf5a8de96d3d042ced\\\"\", \"full_name\": \"safepay/sensor.willyweather\", \"last_updated\": \"2022-02-06T08:29:32Z\", \"stargazers_count\": 7, \"last_fetched\": 1644420429.737629, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"195308808\": {\"repository_manifest\": {}, \"authors\": [\"@safepay\"], \"category\": \"integration\", \"description\": \"A Fronius Sensor for Home Assistant\", \"domain\": \"fronius_inverter\", \"etag_repository\": \"W/\\\"f1f139789c6ec4905096d39bc2f55bb71864bbdf0047b57ab302f5fdfd23b594\\\"\", \"full_name\": \"safepay/sensor.fronius\", \"last_updated\": \"2022-05-17T06:41:25Z\", \"stargazers_count\": 63, \"last_fetched\": 1653229898.712129, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"228579545\": {\"repository_manifest\": {\"name\": \"Orbit BHyve\", \"homeassistant\": \"2021.12.4\", \"render_readme\": true}, \"authors\": [\"@sebr\"], \"category\": \"integration\", \"description\": \"Orbit BHyve custom component for Home Assistant\", \"domain\": \"bhyve\", \"etag_repository\": \"W/\\\"d15ff337ae9653123f68b27c8d2067ee64aeecd46ac77387cdcf62c1fa6fee00\\\"\", \"full_name\": \"sebr/bhyve-home-assistant\", \"last_updated\": \"2022-07-04T22:25:07Z\", \"stargazers_count\": 154, \"topics\": [\"bhyve\", \"home-assistant-component\", \"irrigation\", \"orbit\", \"orbit-bhyve\"], \"last_fetched\": 1657362936.173818, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"248046910\": {\"repository_manifest\": {\"name\": \"SamsungTV Encrypted\", \"homeassistant\": \"2021.8.0\"}, \"authors\": [\"@sermayoral\"], \"category\": \"integration\", \"description\": \"Samsung TV Encrypted Models (H & J Series) custom component for Home Assistant\", \"domain\": \"samsungtv_encrypted\", \"etag_repository\": \"W/\\\"06f08b8124ba3908cd7c66cb51e999e6b1fbf69179d4602d36637c5202e0d610\\\"\", \"full_name\": \"sermayoral/ha-samsungtv-encrypted\", \"last_updated\": \"2021-12-06T23:49:09Z\", \"stargazers_count\": 33, \"topics\": [\"iot\", \"samsungtv\"], \"last_fetched\": 1643571247.934823, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"220678749\": {\"repository_manifest\": {\"name\": \"cfr sensor\", \"country\": [\"IT\"]}, \"authors\": [\"@shogunxam\"], \"category\": \"integration\", \"description\": \"HA Integration for Centro Funzionale Regione Toscana\", \"domain\": \"cfr\", \"etag_repository\": \"W/\\\"16e57ed0455bcd34b0470a33c04dbc39845434640258faf0c3df6860063631b1\\\"\", \"full_name\": \"shogunxam/Home-Assistant-custom-components-cfr-toscana\", \"last_updated\": \"2022-04-08T06:37:57Z\", \"stargazers_count\": 2, \"last_fetched\": 1649613935.651754, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"231840220\": {\"repository_manifest\": {\"name\": \"MoneyDashboard\", \"render_readme\": true, \"country\": [\"GB\"], \"homeassistant\": \"0.99.0\"}, \"category\": \"integration\", \"description\": \"MoneyDashboard Net Balance sensor for HomeAssistant\", \"domain\": \"moneydashboard\", \"etag_repository\": \"W/\\\"a1e751f74e95447677b4ee8a4e38868a01e08829173987e3efaa6c711f497ae9\\\"\", \"full_name\": \"shutupflanders/sensor.moneydashboard\", \"last_updated\": \"2020-02-20T10:04:03Z\", \"stargazers_count\": 1, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"246417951\": {\"repository_manifest\": {\"name\": \"Whatpulse Sensor\", \"render_readme\": true}, \"authors\": [\"@SLG\"], \"category\": \"integration\", \"description\": \"This component retrieves the statistics from Whatpulse\", \"domain\": \"whatpulse\", \"etag_repository\": \"W/\\\"dca837f1834a3b20ee94902485acbcaa793a075994123c3d2dc9a726d3fadc5b\\\"\", \"full_name\": \"SLG/home-assistant-whatpulse\", \"last_updated\": \"2021-06-03T17:59:28Z\", \"stargazers_count\": 1, \"topics\": [\"whatpulse\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"261849832\": {\"repository_manifest\": {\"name\": \"Garo Wallbox\"}, \"authors\": [\"sockless-coding\"], \"category\": \"integration\", \"description\": \"Garo wallbox - Home Assistant Component \", \"domain\": \"garo_wallbox\", \"etag_repository\": \"W/\\\"a8b8b8469183fcce2e6336390b45a5dea48afa857fe6b22ed760f9c649c3180f\\\"\", \"full_name\": \"sockless-coding/garo_wallbox\", \"last_updated\": \"2022-02-08T13:20:26Z\", \"stargazers_count\": 14, \"last_fetched\": 1649613941.665837, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"199332790\": {\"repository_manifest\": {\"name\": \"Variable\", \"render_readme\": true, \"homeassistant\": \"2021.5.1\"}, \"authors\": [\"@snarky-snark\"], \"category\": \"integration\", \"description\": \"A custom Home Assistant component for declaring and setting generic variable entities dynamically.\", \"domain\": \"var\", \"etag_repository\": \"W/\\\"5886f8559205fbda0cc22235b826d30ec7932494621a655ebaeebd71ca2063a1\\\"\", \"full_name\": \"snarky-snark/home-assistant-variables\", \"last_updated\": \"2022-06-29T20:56:11Z\", \"stargazers_count\": 158, \"last_fetched\": 1657362943.100185, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"260410453\": {\"repository_manifest\": {\"name\": \"Panasonic Comfort Cloud\"}, \"authors\": [\"sockless-coding\"], \"category\": \"integration\", \"description\": \"Panasonic Comfort Cloud - Home Assistant Component\", \"domain\": \"panasonic_cc\", \"etag_repository\": \"W/\\\"5b29f14c23172aea75bafaf2ae0a085dd660ca89fa0c28b9a275bddd32fc8101\\\"\", \"full_name\": \"sockless-coding/panasonic_cc\", \"last_updated\": \"2022-06-03T13:43:28Z\", \"stargazers_count\": 35, \"last_fetched\": 1656859385.6907, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"210966517\": {\"repository_manifest\": {\"name\": \"Zwift Sensors\", \"homeassistant\": \"2021.12\"}, \"authors\": [\"snicker\"], \"category\": \"integration\", \"description\": \"Zwift Sensor Integration for HomeAssistant\", \"domain\": \"zwift\", \"etag_repository\": \"W/\\\"3ec0a4bb12a26552729de9f267c3f844edf6558cc2f9ec2defba524c2d2e497c\\\"\", \"full_name\": \"snicker/zwift_hass\", \"last_updated\": \"2022-02-21T21:41:05Z\", \"stargazers_count\": 28, \"last_fetched\": 1656859383.609292, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"209955487\": {\"repository_manifest\": {\"name\": \"BMR\", \"render_readme\": true, \"country\": [\"CZ\"], \"homeassistant\": \"0.110.0\"}, \"authors\": [\"@slesinger\"], \"category\": \"integration\", \"description\": \"Control BMR heating regulation system from Home Assistant\", \"domain\": \"bmr_hc64\", \"etag_repository\": \"W/\\\"838cdc644918386a9d5672f5de788233d4d981f43c0827023201535ef8f332d5\\\"\", \"full_name\": \"slesinger/HomeAssistant-BMR\", \"last_updated\": \"2021-05-25T19:26:44Z\", \"stargazers_count\": 2, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"267433712\": {\"repository_manifest\": {\"name\": \"PRE Distribuce CZ\", \"country\": [\"CZ\"], \"homeassistant\": \"0.110.0\"}, \"authors\": [\"@slesinger\"], \"category\": \"integration\", \"description\": \"Home Assistant integration to display info about energy plan\", \"domain\": \"predistribuce\", \"etag_repository\": \"W/\\\"42d5e36507f8e6eeceb03b45af63d83572772506a907274ceadcb19e1bbef01b\\\"\", \"full_name\": \"slesinger/HomeAssistant-PREdistribuce\", \"last_updated\": \"2021-10-30T09:55:40Z\", \"stargazers_count\": 2, \"topics\": [\"energy\", \"power\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"177978011\": {\"repository_manifest\": {\"name\": \"ShellyForHass (Shelly integration)\", \"hide_default_branch\": true, \"zip_release\": true, \"filename\": \"shelly4hass.zip\", \"homeassistant\": \"0.104.0\"}, \"authors\": [\"@hakana\", \"@StyraHem\"], \"category\": \"integration\", \"description\": \"Shelly smart home platform for Home Assistant\", \"domain\": \"shelly\", \"downloads\": 4890, \"etag_repository\": \"W/\\\"afb114d595f8a99a94e01b458a20ac28ea0094db86a9b2c7172763ce3fe2a6c2\\\"\", \"full_name\": \"StyraHem/ShellyForHASS\", \"last_updated\": \"2022-06-20T21:53:53Z\", \"stargazers_count\": 527, \"last_fetched\": 1657362948.718495, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"292616002\": {\"repository_manifest\": {\"name\": \"Seedboxes.cc\"}, \"authors\": [\"@swartjean\"], \"category\": \"integration\", \"description\": \"Home Assistant - Seedboxes.cc Integration\", \"domain\": \"seedboxes_cc\", \"etag_repository\": \"W/\\\"10c73b84969288f1764356fa0811ce3bbf468c80848ac9c549399ec6d4e61dc6\\\"\", \"full_name\": \"swartjean/ha-seedboxes-cc\", \"last_updated\": \"2021-04-05T10:15:21Z\", \"stargazers_count\": 1, \"topics\": [\"monitoring\", \"seedbox\", \"torrents\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"289579468\": {\"repository_manifest\": {\"name\": \"Eskom Loadshedding Interface\"}, \"authors\": [\"@swartjean\"], \"category\": \"integration\", \"description\": \"Fetches loadshedding data from Eskom\", \"domain\": \"eskom_loadshedding\", \"etag_repository\": \"W/\\\"a9dab3ccbf66c40c21a53b19c2ab6f1acfe9e9dba1fd37e2d20901d591f1e5c5\\\"\", \"full_name\": \"swartjean/ha-eskom-loadshedding\", \"last_updated\": \"2021-12-12T16:13:41Z\", \"stargazers_count\": 31, \"topics\": [\"eskom\", \"loadshedding\", \"south-africa\"], \"last_fetched\": 1656859389.758735, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"181743867\": {\"repository_manifest\": {\"name\": \"Brematic\", \"homeassistant\": \"2021.10.0\", \"render_readme\": true}, \"authors\": [\"@tefinger\"], \"category\": \"integration\", \"description\": \"Custom component for Home Assistant to support Brematic devices\", \"domain\": \"brematic\", \"etag_repository\": \"W/\\\"fdb27f06d894dce8a0fb9635c83faeb5f9a79faf7cb498411a6b680cf2755214\\\"\", \"full_name\": \"tefinger/hass-brematic\", \"last_updated\": \"2022-03-30T09:51:05Z\", \"stargazers_count\": 6, \"topics\": [\"433mhz\", \"brematic\", \"brennenstuhl\", \"gateway\", \"intertechno\"], \"last_fetched\": 1653229922.881958, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"265059207\": {\"repository_manifest\": {\"name\": \"ThermIQ MQTT\", \"hacs\": \"0.24.0\", \"homeassistant\": \"2021.12\", \"render_readme\": true}, \"authors\": [\"@ThermIQ\"], \"category\": \"integration\", \"description\": \"Home Assistant integration of ThermIQ-MQTT, providing control and logging of Thermia heatpumps  \", \"domain\": \"thermiq_mqtt\", \"etag_repository\": \"W/\\\"69f9c5612532966905bfc21f942dbc6cd672203cd3cb3de8a69dbd7390d3c6f8\\\"\", \"full_name\": \"ThermIQ/thermiq_mqtt-ha\", \"last_updated\": \"2022-03-06T11:44:35Z\", \"stargazers_count\": 10, \"topics\": [\"bergvarme\", \"danfoss\", \"dhp\", \"diplomat\", \"g2\", \"g3\", \"ha\", \"heatpump\", \"optimum\", \"thermal-pump\", \"thermia\", \"thermiq\", \"thermiq-mqtt\", \"varmepump\"], \"last_fetched\": 1649613953.818366, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"121891488\": {\"repository_manifest\": {\"name\": \"Lennox iComfort WiFi Thermostat Integration\", \"homeassistant\": \"2021.4.0\"}, \"authors\": [\"@thevoltagesource\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for controlling Lennox iComfort WiFi and AirEase Comfort Sync thermostats.\", \"domain\": \"myicomfort\", \"etag_repository\": \"W/\\\"1f1d4c3e679094c23db4cb4c5a6c13ecbc9dbc5ab19e1d06e4af420a9e741496\\\"\", \"full_name\": \"thevoltagesource/LennoxiComfort\", \"last_updated\": \"2021-12-08T02:01:39Z\", \"stargazers_count\": 21, \"topics\": [\"icomfort\", \"lennox\", \"thermostat\"], \"last_fetched\": 1642094179.852643, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"194140521\": {\"repository_manifest\": {\"name\": \"browser_mod\", \"homeassistant\": \"2022.3.0\"}, \"category\": \"integration\", \"description\": \"\\ud83d\\udd39 A Home Assistant integration to turn your browser into a controllable entity - and also an audio player\", \"domain\": \"browser_mod\", \"etag_repository\": \"W/\\\"80f8502e46e1026664062a6b68e78b5f37576f642a7b16a01ac29e3d1e4ecc22\\\"\", \"full_name\": \"thomasloven/hass-browser_mod\", \"last_updated\": \"2022-07-06T19:44:39Z\", \"stargazers_count\": 676, \"last_fetched\": 1657362963.163425, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"202220932\": {\"repository_manifest\": {}, \"category\": \"integration\", \"description\": \"\\ud83d\\udd39 Change the favicon of your Home Assistant instance\", \"domain\": \"favicon\", \"etag_repository\": \"W/\\\"bce99d72739b76942835715024083939fa0839086845e1b02d003fb512e086a5\\\"\", \"full_name\": \"thomasloven/hass-favicon\", \"last_updated\": \"2021-07-26T15:03:33Z\", \"stargazers_count\": 68, \"last_fetched\": 1656859403.015576, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"200897141\": {\"repository_manifest\": {\"name\": \"lovelace_gen\", \"homeassistant\": \"2021.4.0\"}, \"category\": \"integration\", \"description\": \"\\ud83d\\udd39 Improve the lovelace yaml parser for Home Assistant\", \"domain\": \"lovelace_gen\", \"etag_repository\": \"W/\\\"1ee8e4f5e170c6a4ddb34991001dc04a622267f0f6565e93cc70a0615253aa1d\\\"\", \"full_name\": \"thomasloven/hass-lovelace_gen\", \"last_updated\": \"2022-05-29T19:01:03Z\", \"stargazers_count\": 130, \"last_fetched\": 1656859405.691457, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"164155243\": {\"repository_manifest\": {\"render_readme\": true, \"homeassistant\": \"2021.9.3\"}, \"authors\": [\"@TimSoethout\"], \"category\": \"integration\", \"description\": \"Sensor for Home Assistant pulling data from the GoodWe SEMS API for solar panel production metrics.\", \"domain\": \"sems\", \"etag_repository\": \"W/\\\"83a470c4ce541ed4ffca4d478eee8b400440920fb67d28274714ca31385b15d5\\\"\", \"full_name\": \"TimSoethout/goodwe-sems-home-assistant\", \"last_updated\": \"2022-06-14T16:46:04Z\", \"stargazers_count\": 54, \"topics\": [\"goodwe-sems\", \"pv\", \"sems-portal\"], \"last_fetched\": 1656859409.144873, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"251020820\": {\"repository_manifest\": {\"name\": \"Nespresso Ble coffee machine\"}, \"authors\": [\"@Tikismoke\"], \"category\": \"integration\", \"description\": \"NESPRESSO ble Home Assistant custom componenets and also a 2MQTT script\", \"domain\": \"nespresso\", \"etag_repository\": \"W/\\\"cc07f666e5c9fcd3d507dfe5f9d295b8f4d2736ffff98c79525af4c898c02d7b\\\"\", \"full_name\": \"tikismoke/home-assistant-nespressoble\", \"last_updated\": \"2022-03-04T16:25:53Z\", \"stargazers_count\": 31, \"topics\": [\"nespresso\", \"nespresso-ble\"], \"last_fetched\": 1653229937.494859, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"261496794\": {\"repository_manifest\": {\"name\": \"Plcbus integration\"}, \"authors\": [\"@Tikismoke\"], \"category\": \"integration\", \"description\": \"a plcbus custom somponents for HomeAssistant\", \"domain\": \"plcbus\", \"etag_repository\": \"W/\\\"224e43b119b2ee9069522d8ea2be1d17b162c2c14af29a376f4f1ae6d370f9b4\\\"\", \"full_name\": \"tikismoke/home-assistant-plcbus\", \"last_updated\": \"2021-08-15T16:14:24Z\", \"stargazers_count\": 1, \"topics\": [\"plcbus\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"195620540\": {\"repository_manifest\": {\"name\": \"Growatt solar panels\"}, \"authors\": [\"@timvancann\"], \"category\": \"integration\", \"description\": null, \"domain\": \"growatt\", \"etag_repository\": \"W/\\\"ecf555f99b7cfbde6e87a4bf34224ea6fc441d95beb9c68fbffc76c8473a41cb\\\"\", \"full_name\": \"timvancann/homeassistant-growatt\", \"last_updated\": \"2021-05-11T11:03:42Z\", \"stargazers_count\": 3, \"last_fetched\": 1656859409.146827, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"207794499\": {\"repository_manifest\": {\"name\": \"BER Status Sensor\", \"country\": [\"DE\"]}, \"category\": \"integration\", \"description\": \"A BER Status Sensor\", \"domain\": \"ber_status\", \"etag_repository\": \"W/\\\"c651e78aab194f35b73219bf04a794db49921cead5d461e87b33eba934b9c1f2\\\"\", \"full_name\": \"tmechen/ber_status\", \"last_updated\": \"2020-10-31T13:57:32Z\", \"stargazers_count\": 5, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"200399989\": {\"repository_manifest\": {\"name\": \"Clean up snapshots service\", \"render_readme\": true}, \"category\": \"integration\", \"description\": \"Service to clean up your home assistant snapshots, so you don't manually have to.\", \"domain\": \"clean_up_snapshots_service\", \"etag_repository\": \"W/\\\"2cf78a1eef7fc50131b468393e26ddeca18d9d0d12cc71f0f89e5a8c04cc8b42\\\"\", \"full_name\": \"tmonck/clean_up_snapshots\", \"last_updated\": \"2022-04-17T20:11:53Z\", \"stargazers_count\": 12, \"last_fetched\": 1657362969.972759, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"225248441\": {\"repository_manifest\": {\"name\": \"Mikrotik Router\", \"homeassistant\": \"2022.2.0\", \"zip_release\": true, \"filename\": \"mikrotik_router.zip\"}, \"authors\": [\"@tomaae\"], \"category\": \"integration\", \"description\": \"Mikrotik router integration for Home Assistant\", \"domain\": \"mikrotik_router\", \"downloads\": 4055, \"etag_repository\": \"W/\\\"1f2c8e2d0609c67f5e18608c1a3ace060bbdb39e039187f891dbfbd7ecbbe747\\\"\", \"full_name\": \"tomaae/homeassistant-mikrotik_router\", \"last_updated\": \"2022-06-30T11:48:26Z\", \"stargazers_count\": 142, \"topics\": [\"mikrotik\"], \"last_fetched\": 1656859415.604438, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"257275420\": {\"repository_manifest\": {\"name\": \"OpenMediaVault\", \"homeassistant\": \"2022.2.0\", \"zip_release\": true, \"filename\": \"openmediavault.zip\"}, \"authors\": [\"@tomaae\"], \"category\": \"integration\", \"description\": \"OpenMediaVault integration for Home Assistant\", \"domain\": \"openmediavault\", \"downloads\": 2276, \"etag_repository\": \"W/\\\"5d9767746c5cb3f69293d19d0ea10fc279f963f3aa79b32e7a643b4706f26f3f\\\"\", \"full_name\": \"tomaae/homeassistant-openmediavault\", \"last_updated\": \"2022-06-11T23:27:54Z\", \"stargazers_count\": 40, \"topics\": [\"omv\", \"openmediavault\"], \"last_fetched\": 1656859415.644966, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"277201070\": {\"repository_manifest\": {\"name\": \"AmsHan\", \"homeassistant\": \"2022.2.0\", \"render_readme\": true}, \"authors\": [\"@toreamun\"], \"category\": \"integration\", \"description\": \"Home Assistant integrasjon for str\\u00f8mm\\u00e5lere (AMS/HAN/P1). Integrasjonen st\\u00f8ter b\\u00e5de streaming (serieport/TCP-IP) og MQTT (Tibber Pulse, energyintelligence.se etc)\", \"domain\": \"amshan\", \"downloads\": 10, \"etag_repository\": \"W/\\\"c3b4ee842051d51ded35dce5bbf75fb813a12062db9c8134429737e4fe22adce\\\"\", \"full_name\": \"toreamun/amshan-homeassistant\", \"last_updated\": \"2022-06-05T20:40:00Z\", \"stargazers_count\": 49, \"topics\": [\"aidon\", \"ams\", \"han\", \"kaifa\", \"kamstrup\", \"mbus\", \"meterbus\", \"mqtt\", \"p1\", \"smart-meter\", \"tibberpulse\"], \"last_fetched\": 1657362974.509619, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"299875200\": {\"repository_manifest\": {\"name\": \"Victor Smart-Kill\", \"homeassistant\": \"2022.2.0\", \"render_readme\": true}, \"authors\": [\"@toreamun\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for Victor Smart-Kill WI-FI electronic mouse and rat traps from VictorPest.com.\", \"domain\": \"victorsmartkill\", \"etag_repository\": \"W/\\\"d19d22df8c8b040a20f2ae95bc4d52359c5ec553dd1b019581853f9b8e6b02d6\\\"\", \"full_name\": \"toreamun/victorsmartkill-homeassistant\", \"last_updated\": \"2022-02-20T01:10:46Z\", \"stargazers_count\": 12, \"topics\": [\"mouse\", \"rat\", \"trap\", \"victor\"], \"last_fetched\": 1648400076.380222, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"298816063\": {\"repository_manifest\": {\"name\": \"Trackimo Device Tracker\", \"country\": [\"AU\"], \"homeassistant\": \"2021.7.1\"}, \"authors\": [\"@troykelly\"], \"category\": \"integration\", \"description\": \"Trackimo Integration for HACS Home Assistant\", \"domain\": \"trackimo\", \"etag_repository\": \"W/\\\"bbd77b479cbdb53f5de50b91a429d526c0ad3f4c4963fe70486a61e8d6e6b8de\\\"\", \"full_name\": \"troykelly/hacs-trackimo\", \"last_updated\": \"2021-07-12T05:44:23Z\", \"stargazers_count\": 1, \"topics\": [\"geolocation\", \"trackimo\"], \"last_fetched\": 1648400076.481128, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"220313935\": {\"repository_manifest\": {\"name\": \"hass-AMS\", \"country\": [\"NO\", \"SE\"], \"render_readme\": true}, \"authors\": [\"@turbokongen\"], \"category\": \"integration\", \"description\": \"Custom component reading AMS through MBus adapter into HomeAssistant\", \"domain\": \"ams\", \"etag_repository\": \"W/\\\"b0372861bf9de5994264a879a4e9bf2ee2e8944166a3164d601a3a55a34469cf\\\"\", \"full_name\": \"turbokongen/hass-AMS\", \"last_updated\": \"2022-05-24T16:51:47Z\", \"stargazers_count\": 33, \"topics\": [\"mbus-adapter\", \"meter\", \"sensors\"], \"last_fetched\": 1653733619.69161, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"240459262\": {\"repository_manifest\": {\"name\": \"Abfall API (Jumomind)\", \"country\": [\"DE\"], \"homeassistant\": \"0.104.3\", \"render_readme\": true}, \"authors\": [\"@tuxuser\"], \"category\": \"integration\", \"description\": \"Abfall API (Jumomind) custom component for home assistant - Get an alert when garbage collection is due\", \"domain\": \"abfallapi_jumomind\", \"etag_repository\": \"W/\\\"87cfa966fbfb9c42aa6764be1de69e0008a5943f6abb3c1f97fcf20fa6468210\\\"\", \"full_name\": \"tuxuser/abfallapi_jumomind_ha\", \"last_updated\": \"2021-12-22T09:57:43Z\", \"stargazers_count\": 2, \"topics\": [\"abfall\", \"collection\", \"deutschland\", \"garbage\", \"germany\", \"jumomind\", \"muell\", \"waste\"], \"last_fetched\": 1641058079.790084, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"272337216\": {\"repository_manifest\": {\"name\": \"Pandora Car Alarm System\", \"country\": [\"RU\", \"BY\"], \"render_readme\": true}, \"authors\": [\"@turbulator\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for Pandora Car Alarm System\", \"domain\": \"pandora_cas\", \"etag_repository\": \"W/\\\"b611aa80171170f3303fa90b1f8179aee9398935fdace6440fc99ff6bb59fbb0\\\"\", \"full_name\": \"turbulator/pandora-cas\", \"last_updated\": \"2021-12-28T02:20:34Z\", \"stargazers_count\": 32, \"topics\": [\"pandora\"], \"last_fetched\": 1653229947.837228, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"237628853\": {\"repository_manifest\": {\"name\": \"Abfall API (RegioIT)\", \"country\": [\"DE\"], \"homeassistant\": \"0.104.3\", \"render_readme\": true}, \"authors\": [\"@tuxuser\"], \"category\": \"integration\", \"description\": \"Abfall API (RegioIT) custom component for home assistant - Get an alert when garbage collection is due\", \"domain\": \"abfallapi_regioit\", \"etag_repository\": \"W/\\\"6f2e34627eb7239a51d354c70d3162bf0500be8c682f9ad242c24d7ad1690640\\\"\", \"full_name\": \"tuxuser/abfallapi_regioit_ha\", \"last_updated\": \"2021-12-16T16:20:32Z\", \"stargazers_count\": 10, \"topics\": [\"collection\", \"component\", \"garbage\", \"muell\", \"muellabfuhr\", \"regioit\", \"smart-home\", \"waste\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"167885769\": {\"repository_manifest\": {\"name\": \"Arlo Camera Support\", \"homeassistant\": \"0.110.0\"}, \"authors\": [\"@twrecked\"], \"category\": \"integration\", \"description\": \"Asynchronous Arlo Component for Home Assistant\", \"domain\": \"aarlo\", \"etag_repository\": \"W/\\\"7ad90e48bbbfe045ebb92e0eda1e5deed1baac1e8d28e73cfeb4f1f1db5bfe59\\\"\", \"full_name\": \"twrecked/hass-aarlo\", \"last_updated\": \"2022-06-15T16:03:55Z\", \"stargazers_count\": 249, \"topics\": [\"arlo\", \"netgear\"], \"last_fetched\": 1657362984.611598, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"204700563\": {\"repository_manifest\": {\"name\": \"Momentary Switch Component\"}, \"authors\": [\"@sherrell\"], \"category\": \"integration\", \"description\": \"Momentary Switch Component for Home Assistant\", \"domain\": \"momentary\", \"etag_repository\": \"W/\\\"5e0bf861be2c93e424358ced115133e3bc55b52e4aa1df28cb91ac44fab1c67b\\\"\", \"full_name\": \"twrecked/hass-momentary\", \"last_updated\": \"2022-06-05T05:39:39Z\", \"stargazers_count\": 28, \"last_fetched\": 1656859425.814112, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"245267534\": {\"repository_manifest\": {\"name\": \"Virtual Components\"}, \"authors\": [\"@twrecked\"], \"category\": \"integration\", \"description\": \"Virtual Components for Home Assistant\", \"domain\": \"virtual\", \"etag_repository\": \"W/\\\"7abf698165dc43430b572e6acb9ba90c19a9f2896c4bd4841b11a9cb2c3e9f79\\\"\", \"full_name\": \"twrecked/hass-virtual\", \"last_updated\": \"2022-06-05T05:40:33Z\", \"stargazers_count\": 55, \"last_fetched\": 1656859426.961875, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"76125161\": {\"repository_manifest\": {\"name\": \"iCal Sensor\", \"homeassistant\": \"2022.4.0\"}, \"authors\": [\"@tybritten\"], \"category\": \"integration\", \"description\": \"an iCal Sensor for Home Assistant\", \"domain\": \"ical\", \"etag_repository\": \"W/\\\"75a23c9ec8cf9b8b568b0aedb81e1044e16c37ce789e7dfbc7edaec13d461a84\\\"\", \"full_name\": \"tybritten/ical-sensor-homeassistant\", \"last_updated\": \"2022-05-31T18:25:42Z\", \"stargazers_count\": 52, \"topics\": [\"ical\"], \"last_fetched\": 1656859426.953079, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"272140589\": {\"repository_manifest\": {\"name\": \"Monitor Docker\"}, \"authors\": [\"@ualex73\"], \"category\": \"integration\", \"description\": \"Monitor Docker containers from Home Assistant\", \"domain\": \"monitor_docker\", \"etag_repository\": \"W/\\\"79928ea82ef983a34d30020cfb892dda32c603d93a6b51f015e3d31756d52237\\\"\", \"full_name\": \"ualex73/monitor_docker\", \"last_updated\": \"2022-06-05T21:19:48Z\", \"stargazers_count\": 159, \"topics\": [\"docker\"], \"last_fetched\": 1656859427.04337, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"247566230\": {\"repository_manifest\": {\"name\": \"Next Rocket Launch\", \"country\": [\"FR\"], \"render_readme\": true}, \"authors\": [\"@Verbalinsurection\"], \"category\": \"integration\", \"description\": \"The Next Rocket Launch sensor platform allows you to monitor the next rocket launch from Teamup.\", \"domain\": \"next_rocket_launch\", \"etag_repository\": \"W/\\\"58a33571d336a51bbae5db254759143ee8ba9576cc75430e6e208cb3abf186d5\\\"\", \"full_name\": \"Verbalinsurection/next_rocket_launch\", \"last_updated\": \"2022-03-20T18:50:51Z\", \"stargazers_count\": 9, \"topics\": [\"rocket\"], \"last_fetched\": 1648400077.824373, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"120696364\": {\"repository_manifest\": {\"name\": \"OpenSprinkler integration for Home Assistant\", \"render_readme\": true}, \"authors\": [\"@vinteo\"], \"category\": \"integration\", \"description\": \"OpenSprinkler Integration for Home Assistant\", \"domain\": \"opensprinkler\", \"etag_repository\": \"W/\\\"580b7280745e54ae796e2f0240fb4ec2d37e9cdb9d271dece61f6ae081a3b72b\\\"\", \"full_name\": \"vinteo/hass-opensprinkler\", \"last_updated\": \"2022-06-02T21:10:48Z\", \"stargazers_count\": 131, \"topics\": [\"opensprinkler\"], \"last_fetched\": 1656859432.285522, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"265916869\": {\"repository_manifest\": {\"name\": \"Melnor Raincloud\", \"render_readme\": true, \"homeassistant\": \"2021.4.0\", \"zip_release\": true, \"filename\": \"raincloud.zip\"}, \"authors\": [\"@vanstinator\"], \"category\": \"integration\", \"description\": \"Melnor Raincloud Home Assistant Integration\", \"domain\": \"raincloud\", \"etag_repository\": \"W/\\\"58000ab27cbb2d837de1137176b14c71cd411269a7a3d5e07a5dab900c8e3bc9\\\"\", \"full_name\": \"vanstinator/hass-raincloud\", \"last_updated\": \"2022-01-22T15:56:33Z\", \"stargazers_count\": 6, \"topics\": [\"assistant\", \"home\", \"irrigation\", \"melnor\", \"raincloud\", \"sprinkler\"], \"last_fetched\": 1643571251.745845, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"258012818\": {\"repository_manifest\": {\"name\": \"simpleicons\", \"render_readme\": true, \"homeassistant\": \"2021.11.0\", \"zip_release\": true, \"filename\": \"hass-simpleicons.zip\"}, \"category\": \"integration\", \"description\": \"Use Simple Icons in Home Assistant\", \"domain\": \"simpleicons\", \"downloads\": 2343, \"etag_repository\": \"W/\\\"4a23229090ad9d47a8fa6271e569156af61987d7edd5656cd5091a451f62c073\\\"\", \"full_name\": \"vigonotion/hass-simpleicons\", \"last_updated\": \"2022-05-21T16:14:54Z\", \"stargazers_count\": 71, \"topics\": [\"simple-icons\"], \"last_fetched\": 1657362984.816653, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"234875951\": {\"repository_manifest\": {\"name\": \"Securitas Home\", \"render_readme\": \"true\", \"country\": [\"SE\"], \"homeassistant\": \"0.110.1\"}, \"authors\": [\"@nwiborg\", \"@vlumikero\"], \"category\": \"integration\", \"description\": \"A Home Assistant custom component for Securitas Home Alarm, for alarms bought in Sweden before 2018-12-01\", \"domain\": \"securitas\", \"etag_repository\": \"W/\\\"7ce1181bf8b4beca79ea1b8c42b8ee5dc34cb8bbec839e30907600b74cd442f5\\\"\", \"full_name\": \"vlumikero/home-assistant-securitas\", \"last_updated\": \"2021-07-24T17:58:21Z\", \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"190418598\": {\"repository_manifest\": {}, \"authors\": [\"@walthowd\"], \"category\": \"integration\", \"description\": \"Automower Custom Component for Home Assistant\", \"domain\": \"automower\", \"etag_repository\": \"W/\\\"1e8a5bc14a7edc8d7f70a6e85d9a00544ceb5ac7132fa4fbda24c8380254e68e\\\"\", \"full_name\": \"walthowd/ha-automower\", \"last_updated\": \"2022-06-01T16:55:36Z\", \"stargazers_count\": 39, \"last_fetched\": 1656859433.012974, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"235316264\": {\"repository_manifest\": {\"name\": \"Meteo Swiss\", \"render_readme\": true, \"country\": \"CH\"}, \"authors\": [\"websylv\"], \"category\": \"integration\", \"description\": \":sun_behind_rain_cloud: :switzerland: Meteo Swiss Integration for Home Assisant\", \"domain\": \"meteo-swiss\", \"etag_repository\": \"W/\\\"2fefa4e33d24231da1d84d6475a2837142096e73285b0291b2c9981132001638\\\"\", \"full_name\": \"websylv/homeassistant-meteoswiss\", \"last_updated\": \"2022-04-02T10:20:51Z\", \"stargazers_count\": 47, \"last_fetched\": 1656859433.396876, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"299967654\": {\"repository_manifest\": {\"name\": \"HiFiBerry\", \"render_readme\": \"true\"}, \"authors\": [\"@willholdoway\"], \"category\": \"integration\", \"description\": \"This is a custom component to allow control of HifiberryOS devices in Home Assistant using the audiocontrol2 REST API.\", \"domain\": \"hifiberry\", \"etag_repository\": \"W/\\\"aa8cdbd6abefe46d10e91d3e5ab35763b7c5259e89c6e2993cd6b906f4375046\\\"\", \"full_name\": \"willholdoway/hifiberry\", \"last_updated\": \"2022-04-11T16:59:57Z\", \"stargazers_count\": 25, \"topics\": [\"hifiberry\", \"internet-of-things\", \"iot\", \"media-player\"], \"last_fetched\": 1653229961.209887, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"127251446\": {\"repository_manifest\": {\"name\": \"Afvalwijzer\", \"render_readme\": true, \"country\": [\"NL\"], \"homeassistant\": \"0.115.0\"}, \"authors\": [\"@xirixiz\"], \"category\": \"integration\", \"description\": \"Provides sensors for some Dutch waste collectors\", \"domain\": \"afvalwijzer\", \"etag_repository\": \"W/\\\"5498e0cae72188c4d3872ed5294bd2ebeaad3db8f871ea13d356d3fd09b18118\\\"\", \"full_name\": \"xirixiz/homeassistant-afvalwijzer\", \"last_updated\": \"2022-06-17T09:32:31Z\", \"stargazers_count\": 104, \"topics\": [\"afvalwijzer\", \"trash\"], \"last_fetched\": 1657362985.526509, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"261031401\": {\"repository_manifest\": {\"name\": \"couchpotato\", \"render_readme\": true, \"country\": \"FR\"}, \"authors\": [\"@youdroid\"], \"category\": \"integration\", \"description\": \"\\ud83c\\udfa5 CouchPotato component to feed Upcoming Media Card.\", \"domain\": \"couchpotato\", \"etag_repository\": \"W/\\\"7b09052eb6325f2b6d7bf9ba766e31dde1bd1c4d03dfa12412b4a15807d1a152\\\"\", \"full_name\": \"youdroid/home-assistant-couchpotato\", \"last_updated\": \"2022-04-24T19:49:30Z\", \"stargazers_count\": 5, \"topics\": [\"couchpotato\"], \"last_fetched\": 1653229966.531008, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"262645913\": {\"repository_manifest\": {\"name\": \"gitea\", \"render_readme\": true, \"country\": \"FR\"}, \"authors\": [\"@youdroid\"], \"category\": \"integration\", \"description\": \"\\ud83c\\udf75 Gitea component to follow your repositories\", \"domain\": \"gitea\", \"etag_repository\": \"W/\\\"4784ff409cfaa970b47be553f91c44672807f3edfd20b4e5de55a91a41c7f425\\\"\", \"full_name\": \"youdroid/home-assistant-gitea\", \"last_updated\": \"2022-04-24T20:15:46Z\", \"stargazers_count\": 5, \"topics\": [\"gitea\", \"homeassistant-custom-component\", \"pyhton\"], \"last_fetched\": 1653229967.382201, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"261614146\": {\"repository_manifest\": {\"name\": \"SickChill\", \"render_readme\": true, \"country\": \"FR\"}, \"authors\": [\"@youdroid\"], \"category\": \"integration\", \"description\": \"\\ud83c\\udfa5 SickChill component to feed Upcoming Media Card.\", \"domain\": \"sickchill\", \"etag_repository\": \"W/\\\"577fd63d9480a6cc8b83c569e03d6f535e11cc988edf8c7fcbb3599c4be35ef6\\\"\", \"full_name\": \"youdroid/home-assistant-sickchill\", \"last_updated\": \"2022-04-24T19:37:24Z\", \"stargazers_count\": 3, \"topics\": [\"sickchill\"], \"last_fetched\": 1653229967.59433, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"202987887\": {\"repository_manifest\": {\"name\": \"Node-RED Companion\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@zachowj\"], \"category\": \"integration\", \"description\": \"Companion Component for node-red-contrib-home-assistant-websocket to help integrate Node-RED with Home Assistant Core\", \"domain\": \"nodered\", \"etag_repository\": \"W/\\\"c3ba1d23f36c34664ebec92c77d4ed9f53fcdf8410943cb28042754e5cee050c\\\"\", \"full_name\": \"zachowj/hass-node-red\", \"last_updated\": \"2022-07-09T01:05:02Z\", \"stargazers_count\": 268, \"topics\": [\"node-red\"], \"last_fetched\": 1657362986.075263, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"231083679\": {\"repository_manifest\": {\"name\": \"Dark Teal\"}, \"category\": \"theme\", \"description\": \"\\ud83d\\udc35 Dark Theme based on clear-theme-dark by @naofireblade\", \"domain\": \"\", \"etag_repository\": \"W/\\\"bc347ad24a3036a38ba44610be74c9d43b31171e2560483c905f2a52b8c03aed\\\"\", \"full_name\": \"aFFekopp/dark_teal\", \"last_updated\": \"2022-03-15T09:06:42Z\", \"stargazers_count\": 11, \"topics\": [\"dark-theme\", \"home-assistant-theme\"], \"last_fetched\": 1648398639.037657, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"233715171\": {\"repository_manifest\": {\"name\": \"Darkish Theme\"}, \"category\": \"theme\", \"description\": \"Darkish-Theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"02a74aeaa52ba0b10ca0d36a96a1f352bfb8400db6eb23bfde5a6b4b49289bf3\\\"\", \"full_name\": \"78wesley/Home-Assistant-Darkish-Theme\", \"last_updated\": \"2021-12-14T20:45:38Z\", \"stargazers_count\": 5, \"last_fetched\": 1641470328.639185, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"253311340\": {\"repository_manifest\": {\"name\": \"3Ative Blue Theme\"}, \"category\": \"theme\", \"description\": \"\\ud83d\\ude0e My Theme 'Blue' - with semi-transparent Cards\", \"domain\": \"\", \"etag_repository\": \"W/\\\"d210ac06ae7eb49c8da2a67f225e524a2618d04f961b837fac8d85dc1709c135\\\"\", \"full_name\": \"3ative/3ative-blue-theme\", \"last_updated\": \"2022-02-03T04:37:37Z\", \"stargazers_count\": 2, \"topics\": [\"3ative\", \"blue\", \"theme-ui\"], \"last_fetched\": 1644064199.234961, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"233445397\": {\"repository_manifest\": {\"name\": \"Sundown Theme\"}, \"category\": \"theme\", \"description\": \"Custom theme for home assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"098b03c44b3aa8e79d3d8e3f71ce251cc0250bb1d79625c7bf80fe4343c8111b\\\"\", \"full_name\": \"am80l/sundown\", \"last_updated\": \"2020-07-29T01:28:19Z\", \"stargazers_count\": 3, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"230974064\": {\"repository_manifest\": {\"name\": \"Oxford Blue\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"Oxford blue theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"cd3c6cd46167959710516649a2f389fb2616c89d1722d3297b2ca8422da8452c\\\"\", \"full_name\": \"arsaboo/oxford_blue_theme\", \"last_updated\": \"2020-02-27T00:08:56Z\", \"stargazers_count\": 4, \"last_fetched\": 1649613438.149031, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"162468030\": {\"repository_manifest\": {\"name\": \"Dark theme pack for Home Assistant\", \"render_readme\": true, \"filename\": \"dark_themes.yaml\"}, \"category\": \"theme\", \"description\": \"A collection of dark themes for Home Assistant. \", \"domain\": \"\", \"etag_repository\": \"W/\\\"8e8acb411f840011a1d730cbc4450174662bdaede7cc524acb1b71ec19cdeff7\\\"\", \"full_name\": \"awolkers/home-assistant-themes\", \"last_updated\": \"2020-09-16T14:47:00Z\", \"stargazers_count\": 7, \"topics\": [\"dark-mode\", \"dark-theme\"], \"last_fetched\": 1656859452.958645, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"222422187\": {\"repository_manifest\": {\"name\": \"iOS Dark Mode Theme\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfe0\\ud83e\\udd16 Theme by @basnijholt based on iOS Dark Mode for Lovelace Home Assistant \", \"domain\": \"\", \"etag_repository\": \"W/\\\"fa8a98df8fe6924cf355766a015c72884590266a4f82f95c4129b840205c5262\\\"\", \"full_name\": \"basnijholt/lovelace-ios-dark-mode-theme\", \"last_updated\": \"2022-05-27T18:41:09Z\", \"stargazers_count\": 365, \"topics\": [\"dark-mode\", \"darkmode\", \"ios\"], \"last_fetched\": 1657362567.582507, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"255366214\": {\"repository_manifest\": {\"name\": \"Vintage\", \"render_readme\": true, \"filename\": \"themes/vintage.yaml\"}, \"category\": \"theme\", \"description\": \"\\ud83c\\udf99\\ufe0f Vintage theme original colours & style designed by @surendrananup HACS adapted by @Banditen01\", \"domain\": \"\", \"etag_repository\": \"W/\\\"543a3ffb3d712bbbb04fcadaef283b8c18456c0fd55db41229c67b225434c512\\\"\", \"full_name\": \"Banditen01/vintage_theme\", \"last_updated\": \"2021-05-20T16:21:54Z\", \"stargazers_count\": 4, \"topics\": [\"unofficial\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"234750356\": {\"repository_manifest\": {\"name\": \"iOS Light Mode Theme\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfe0\\ud83e\\udd16 Theme based on iOS Light Mode for Lovelace Home Assistant \", \"domain\": \"\", \"etag_repository\": \"W/\\\"b8dc7e2c79a2fe4264191319302a01928c62b61902c3e9d28d682358239d74ff\\\"\", \"full_name\": \"basnijholt/lovelace-ios-light-mode-theme\", \"last_updated\": \"2020-01-20T19:48:02Z\", \"stargazers_count\": 9, \"topics\": [\"ios\", \"light-mode\", \"lightmode\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"236318024\": {\"repository_manifest\": {\"name\": \"iOS Themes - Dark Mode and Light Mode\", \"hacs\": \"0.21.2\", \"filename\": \"ios-themes.yaml\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"\\u2764\\ufe0f\\ud83d\\udcf1\\ud83c\\udfe0\\ud83e\\udd16 Themes inspired by iOS Dark \\u2b1b\\ufe0f and Light \\u25fb\\ufe0f Mode for Lovelace Home Assistant with different backgrounds by @basnijholt\", \"domain\": \"\", \"etag_repository\": \"W/\\\"49200dfc88a3d42adbd4e35e323ad79534ccdd45edbbeeef599f45cf6bbd5321\\\"\", \"full_name\": \"basnijholt/lovelace-ios-themes\", \"last_updated\": \"2022-05-27T18:41:02Z\", \"stargazers_count\": 312, \"last_fetched\": 1657362568.064042, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"202203063\": {\"repository_manifest\": {}, \"category\": \"theme\", \"description\": \"Synthwave inspired theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"7ae2bac5fd56a233eb9f5b7d6744c759435c7583dbf179fc83509df4703c4251\\\"\", \"full_name\": \"bbbenji/synthwave-hass\", \"last_updated\": \"2022-06-13T03:57:15Z\", \"stargazers_count\": 127, \"topics\": [\"css\", \"home-assistant-theme\", \"javascript\", \"synthwave\"], \"last_fetched\": 1657362568.072555, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"261924981\": {\"repository_manifest\": {\"name\": \"Swart Ninja Dark Theme\"}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 Green, dark mode theme for Home Assistant, Enjoy.\\ud83e\\udd18\\ud83c\\udffb\", \"domain\": \"\", \"etag_repository\": \"W/\\\"b40bfd8057d736441abc4aca1a8bb8f5332e0a22fde8a3571b50d85ec90a2c7c\\\"\", \"full_name\": \"DickSwart/swart_ninja_dark_theme\", \"last_updated\": \"2022-03-04T09:56:36Z\", \"stargazers_count\": 5, \"topics\": [\"dark-theme\"], \"last_fetched\": 1653230136.497163, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"235436539\": {\"repository_manifest\": {\"name\": \"Noctis Grey\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"Dark Grey Theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"702b97b28a6dbff08816ff8d223dae4358d91be0942b80ea907b2b22d7260561\\\"\", \"full_name\": \"chaptergy/noctis-grey\", \"last_updated\": \"2022-03-05T12:41:38Z\", \"stargazers_count\": 9, \"last_fetched\": 1653230135.666998, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"227988032\": {\"repository_manifest\": {\"name\": \"sweet pink\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"Theme for home assistant that makes use of pinks and purples and maybe some teal\", \"domain\": \"\", \"etag_repository\": \"W/\\\"2e29354dcc210881ebcb3e71306f1d95ded88aab639e300aabbba9d1622459c5\\\"\", \"full_name\": \"estiens/sweet_pink_hass_theme\", \"last_updated\": \"2022-05-14T18:31:48Z\", \"stargazers_count\": 3, \"topics\": [\"cyberpunk\", \"lovelace-theme\"], \"last_fetched\": 1653230140.730912, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"309056232\": {\"repository_manifest\": {\"name\": \"GitHub Dark Theme\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"A Home Assistant theme inspired on Github.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"7cc508fca707015c7799744ce405fc77251453a121c446bba563328f72e2902f\\\"\", \"full_name\": \"einschmidt/github_dark_theme\", \"last_updated\": \"2022-03-29T06:36:50Z\", \"stargazers_count\": 3, \"topics\": [\"assistant-theme\"], \"last_fetched\": 1648839789.351853, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"309053262\": {\"repository_manifest\": {\"name\": \"GitHub Light Theme\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"A Home Assistant theme inspired on Github.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"7bf7401cacda55c60c0e677ad6d0ba4b33c2da1c658ecf20a54c332e16d6656c\\\"\", \"full_name\": \"einschmidt/github_light_theme\", \"last_updated\": \"2020-12-16T13:49:52Z\", \"stargazers_count\": 4, \"topics\": [\"assistant-theme\"], \"last_fetched\": 1653230136.594421, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"234581410\": {\"repository_manifest\": {\"name\": \"UX Goodie Theme\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 Theme for Home Assistant inspired by iOS Dark Mode \\ud83c\\udf16\", \"domain\": \"\", \"etag_repository\": \"W/\\\"cb29cfba05e2be2c96772a2e92d868a897c42593849f0ed47d837dad0a600d53\\\"\", \"full_name\": \"fi-sch/ux_goodie_theme\", \"last_updated\": \"2022-03-08T19:49:59Z\", \"stargazers_count\": 10, \"topics\": [\"dark\", \"ios\", \"lovelace-theme\", \"mode\", \"ux\"], \"last_fetched\": 1648398645.488657, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"236277163\": {\"repository_manifest\": {\"name\": \"Reeder Dark Theme\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"Reeder Dark Theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"63f697b7477df59be896ff5288e9d0585223da1b0766b102f1fc3ad7035d073b\\\"\", \"full_name\": \"hekm77/reeder_dark_theme\", \"last_updated\": \"2020-09-18T07:41:54Z\", \"stargazers_count\": 4, \"last_fetched\": 1645379973.99824, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"209891408\": {\"repository_manifest\": {\"name\": \"Amoled Theme\"}, \"category\": \"theme\", \"description\": \"Amoled theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"306232eb19f53a5b9e8508ead08e9efe885d483615688953b2cfd694dab1a7f5\\\"\", \"full_name\": \"home-assistant-community-themes/amoled\", \"last_updated\": \"2022-01-07T08:46:39Z\", \"stargazers_count\": 26, \"last_fetched\": 1644064201.0209, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"235984421\": {\"repository_manifest\": {\"name\": \"Blackened Theme\"}, \"category\": \"theme\", \"description\": \"Blackened theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"ba9b14fb0dbd401b37d39ecfc1712678eb63d6fbd9b4cdb3f5f950557ad2a942\\\"\", \"full_name\": \"home-assistant-community-themes/blackened\", \"last_updated\": \"2022-01-07T08:45:24Z\", \"stargazers_count\": 9, \"last_fetched\": 1645379974.536019, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"225969186\": {\"repository_manifest\": {\"name\": \"Aqua Fiesta Theme\"}, \"category\": \"theme\", \"description\": \"Aqua Fiesta theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"ae0ce88783842e5b68a744500a019146c3df8e12cdd39e5e044081fea62a6ae1\\\"\", \"full_name\": \"home-assistant-community-themes/aqua-fiesta\", \"last_updated\": \"2021-11-29T15:12:10Z\", \"stargazers_count\": 3, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"216173358\": {\"repository_manifest\": {\"name\": \"Christmas Theme\"}, \"category\": \"theme\", \"description\": \"Christmas theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"ec277043909de125a9edb53b2aa275dbae8659c44dd9096cb3b2b84be980e32c\\\"\", \"full_name\": \"home-assistant-community-themes/christmas\", \"last_updated\": \"2021-11-30T07:12:40Z\", \"stargazers_count\": 1, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"215075805\": {\"repository_manifest\": {\"name\": \"Blue Night Theme\"}, \"category\": \"theme\", \"description\": \"Blue Night theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"231895175f78a062c344362106bdbbf0526e61f6b9bfda160e9c7280f90edd94\\\"\", \"full_name\": \"home-assistant-community-themes/blue-night\", \"last_updated\": \"2022-01-07T08:46:23Z\", \"stargazers_count\": 8, \"last_fetched\": 1649613449.512147, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"220641275\": {\"repository_manifest\": {\"name\": \"Dark Orange Theme\"}, \"category\": \"theme\", \"description\": \"Dark Orange theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"8a5015b8ddc08c5f7813704d42f46d934d3fbf042e13608bc7cdaa544274dde2\\\"\", \"full_name\": \"home-assistant-community-themes/dark-orange\", \"last_updated\": \"2022-03-10T07:59:11Z\", \"stargazers_count\": 10, \"last_fetched\": 1648398651.832739, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"214979604\": {\"repository_manifest\": {\"name\": \"Dark Mint Theme\"}, \"category\": \"theme\", \"description\": \"Another Dark theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"6087e5bc4ee0e29d1531ff70033ab9e032a7a13a96706bd67ba00f1c35cd4c02\\\"\", \"full_name\": \"home-assistant-community-themes/dark-mint\", \"last_updated\": \"2021-11-30T07:12:51Z\", \"stargazers_count\": 5, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"215075899\": {\"repository_manifest\": {\"name\": \"Grey Night Theme\"}, \"category\": \"theme\", \"description\": \"Grey Night theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"6841c1f3cafe9020476e1d9c711b88a723fd0d68ce45f458808f93c8af77cac5\\\"\", \"full_name\": \"home-assistant-community-themes/grey-night\", \"last_updated\": \"2021-11-25T07:20:29Z\", \"stargazers_count\": 4, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"217374413\": {\"repository_manifest\": {\"name\": \"Halloween Theme\"}, \"category\": \"theme\", \"description\": \"Halloween theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"8fda60a56805bc35eed2453f586735bf9187cba3b24ffe5994caad46ec3e633e\\\"\", \"full_name\": \"home-assistant-community-themes/halloween\", \"last_updated\": \"2021-11-30T07:13:12Z\", \"stargazers_count\": 2, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"235057110\": {\"repository_manifest\": {\"name\": \"Material Dark Red Theme\"}, \"category\": \"theme\", \"description\": \"Material Dark Red theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"0065ebc93cdf84a3c2e75047b19d566b9618c20de625f84cbacf0c18a153eedb\\\"\", \"full_name\": \"home-assistant-community-themes/material-dark-red\", \"last_updated\": \"2021-11-25T07:20:13Z\", \"stargazers_count\": 4, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"216183299\": {\"repository_manifest\": {\"name\": \"Material Dark Pink Theme\"}, \"category\": \"theme\", \"description\": \"Material Dark Pink theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"41d24bd82b5e25ef2cec8ed92896d0a42849410a2bdb48f0b6c131007b5ed861\\\"\", \"full_name\": \"home-assistant-community-themes/material-dark-pink\", \"last_updated\": \"2021-11-30T07:12:56Z\", \"stargazers_count\": 3, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"214664317\": {\"repository_manifest\": {\"name\": \"Midnight Theme\"}, \"category\": \"theme\", \"description\": \"Midnight theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"f8f7fe3ff8dbacdb897600ae5aa2abbd894a92fe2a91f9d1bb1b9cef88104ed2\\\"\", \"full_name\": \"home-assistant-community-themes/midnight\", \"last_updated\": \"2022-06-02T13:54:44Z\", \"stargazers_count\": 53, \"last_fetched\": 1657362580.90628, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"216178553\": {\"repository_manifest\": {\"name\": \"Material Dark Green Theme\"}, \"category\": \"theme\", \"description\": \"Material Dark Green theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"bad698fb82482d8a92c028765e0761f093093ad22718d67795c0529317bc9e93\\\"\", \"full_name\": \"home-assistant-community-themes/material-dark-green\", \"last_updated\": \"2022-01-07T08:46:43Z\", \"stargazers_count\": 2, \"last_fetched\": 1643571216.769365, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"223938651\": {\"repository_manifest\": {\"name\": \"Midnight Blue Theme\"}, \"category\": \"theme\", \"description\": \"Midnight Blue theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"12ad7be16d27c2c59358f849c51b1941ed7e07434d8f5bccdda39891cb09e067\\\"\", \"full_name\": \"home-assistant-community-themes/midnight-blue\", \"last_updated\": \"2021-11-30T07:12:47Z\", \"stargazers_count\": 6, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"270638476\": {\"repository_manifest\": {\"name\": \"Nord Theme\"}, \"category\": \"theme\", \"description\": \"Nord theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"b58f8823f68cb6ae130491e5e692be54e175bf58b3aeaeba7a8c6e763e9dc890\\\"\", \"full_name\": \"home-assistant-community-themes/nord\", \"last_updated\": \"2022-01-07T08:45:15Z\", \"stargazers_count\": 11, \"last_fetched\": 1649613454.744191, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"216165131\": {\"repository_manifest\": {\"name\": \"Solarized Light Theme\"}, \"category\": \"theme\", \"description\": \"Solarized Light theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"169bbe0af93ad59124d09649e509d2919bbd8e6f55f15139954bbeb311dd0db6\\\"\", \"full_name\": \"home-assistant-community-themes/solarized-light\", \"last_updated\": \"2021-11-29T07:57:21Z\", \"stargazers_count\": 4, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"255270395\": {\"repository_manifest\": {\"name\": \"Stell Blue with Colors Theme\"}, \"category\": \"theme\", \"description\": \"Stell Blue with Colors theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"5077767a0aa28cc4a56403ca6b8d9e955516f26b40e5317d5f6d6f1cfb43bd9e\\\"\", \"full_name\": \"home-assistant-community-themes/stell-blue-with-colors\", \"last_updated\": \"2021-11-29T09:05:41Z\", \"stargazers_count\": 2, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"230672465\": {\"repository_manifest\": {\"name\": \"Ugly Christmas Theme\"}, \"category\": \"theme\", \"description\": \"Christmas theme for Home-Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"73d7508c5ee3f8de942d3365393ae40581ba808bcbfa5f7d1d12ce6b988c130d\\\"\", \"full_name\": \"houtknots/UglyChristmas-Theme\", \"last_updated\": \"2021-12-30T13:46:19Z\", \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"234375294\": {\"repository_manifest\": {\"name\": \"Vaporwave Pink Theme\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"Vaporwave Pink Theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"9bd2f3aa912f6b87f1caf0e83298b7dc25253f3346fe222ac487d394ccca07ef\\\"\", \"full_name\": \"home-assistant-community-themes/vaporwave-pink\", \"last_updated\": \"2022-06-17T14:41:05Z\", \"stargazers_count\": 3, \"topics\": [\"80s\", \"pink\", \"vaporwave\"], \"last_fetched\": 1656859471.272238, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"216181396\": {\"repository_manifest\": {\"name\": \"Teal Theme\"}, \"category\": \"theme\", \"description\": \"Teal theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"8cbdbec442c85ef844f76d9a1ea9a18d28674d564255ce7d3323cd80d844995d\\\"\", \"full_name\": \"home-assistant-community-themes/teal\", \"last_updated\": \"2021-11-29T15:11:48Z\", \"stargazers_count\": 1, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"234491154\": {\"repository_manifest\": {\"name\": \"AMOLED Blue\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 By JuanMTech -- A true black Home Assistant theme for devices with AMOLED displays\", \"domain\": \"\", \"etag_repository\": \"W/\\\"d4ad67925556da906c506ace70fc76e586f12d21b732b24053377dd1079f6ef8\\\"\", \"full_name\": \"JuanMTech/amoled_blue\", \"last_updated\": \"2021-11-25T23:27:40Z\", \"stargazers_count\": 12, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"306914292\": {\"repository_manifest\": {\"name\": \"Transparent Blue\", \"render_readme\": \"true\"}, \"category\": \"theme\", \"description\": \"A transparent blue theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"d61f8a8200cc9d0b5a36a50998999c0a17282975dd0f1acd278cf5f15235e437\\\"\", \"full_name\": \"JOHLC/transparentblue\", \"last_updated\": \"2022-04-07T01:50:40Z\", \"stargazers_count\": 21, \"topics\": [\"homeassistant-addons\", \"transparent-blue-theme\", \"transparentblue\", \"yaml\"], \"last_fetched\": 1649613459.000675, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"234032927\": {\"repository_manifest\": {\"name\": \"Google Light Theme\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 By JuanMTech -- A Home Assistant theme inspired on the Google app light mode.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"34f1a537634b20582c36dbb9d21e94b7a832ea52aad52c29befffbcb6a48d45c\\\"\", \"full_name\": \"JuanMTech/google_light_theme\", \"last_updated\": \"2022-06-19T17:47:17Z\", \"stargazers_count\": 59, \"topics\": [\"assistant-theme\"], \"last_fetched\": 1656859474.39593, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"235862795\": {\"repository_manifest\": {\"name\": \"Green Dark mode\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 By JuanMTech -- A matte black theme with a green accent color\", \"domain\": \"\", \"etag_repository\": \"W/\\\"ec0f4c26d0eb1c7dfc7f3a33d0a70d84aea32ce0fd5bd50dfa7c28546983caba\\\"\", \"full_name\": \"JuanMTech/green_dark_mode\", \"last_updated\": \"2020-07-29T22:52:55Z\", \"stargazers_count\": 8, \"last_fetched\": 1641587843.275071, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"235865145\": {\"repository_manifest\": {\"name\": \"Green Light mode\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 By JuanMTech -- A light mode theme with a green accent color\", \"domain\": \"\", \"etag_repository\": \"W/\\\"0422d4984525067b48f1c765e84c814690080b9489717eb4d566e78bcebd6cf5\\\"\", \"full_name\": \"JuanMTech/green_light_mode\", \"last_updated\": \"2020-07-29T22:54:27Z\", \"stargazers_count\": 2, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"284293899\": {\"repository_manifest\": {\"name\": \"iOS Dark Mode\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 By JuanMTech -- A Home Assistant theme inspired on the iOS dark mode interface.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"6b8a3583adaa379ce447399461dd35b925290b392d1f1b90bee524a23c896eaf\\\"\", \"full_name\": \"JuanMTech/ios_dark_mode_theme\", \"last_updated\": \"2022-02-13T02:28:59Z\", \"stargazers_count\": 22, \"topics\": [\"dark-mode\", \"dark-theme\"], \"last_fetched\": 1653230163.738992, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"284294048\": {\"repository_manifest\": {\"name\": \"iOS Light Mode\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 By JuanMTech -- A Home Assistant theme inspired on the iOS light mode interface.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"ca4e1a1f16af83b76b20bd2f6e206a0c051f89e63f23e0c33b5c24ecac99356c\\\"\", \"full_name\": \"JuanMTech/ios_light_mode_theme\", \"last_updated\": \"2022-02-13T02:13:59Z\", \"stargazers_count\": 17, \"last_fetched\": 1653230163.779312, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"235867730\": {\"repository_manifest\": {\"name\": \"Orange Dark\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 By JuanMTech -- A matte black theme with an orange accent color\", \"domain\": \"\", \"etag_repository\": \"W/\\\"2ceced4f48c67cec92ce1068a8c3e482d5ae1db28899cc2131995ec7f8c594b8\\\"\", \"full_name\": \"JuanMTech/orange_dark\", \"last_updated\": \"2020-07-29T22:55:59Z\", \"stargazers_count\": 5, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"235869023\": {\"repository_manifest\": {\"name\": \"Orange Light\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 By JuanMTech -- A light mode theme with an orange accent color\", \"domain\": \"\", \"etag_repository\": \"W/\\\"654e166cd6ad22ad3037120a92633d0e6f40f1cefc8d82104bfc416b4e2c66cd\\\"\", \"full_name\": \"JuanMTech/orange_light\", \"last_updated\": \"2020-07-29T22:57:13Z\", \"stargazers_count\": 2, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"262748544\": {\"repository_manifest\": {\"name\": \"kibibit Theme\"}, \"category\": \"theme\", \"description\": \"A milky glass theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"a900666d48c5c2d736ce7340f62bc39ef6635b1825721a82381de66f97e13b2c\\\"\", \"full_name\": \"Kibibit/hass-kibibit-theme\", \"last_updated\": \"2022-06-27T03:09:47Z\", \"stargazers_count\": 127, \"last_fetched\": 1656859478.4433, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"282325367\": {\"repository_manifest\": {\"name\": \"Dark Soft UI Theme\", \"homeassistant\": \"0.98.0\", \"country\": \"US\"}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 Home Assistant soft UI dark theme, with help from @JuanMTech, @thomasloven, and @N-l1.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"1a7065376f29f91c67af228bda96ffc7a1f6484c4d133e6da37cda1d2770baf7\\\"\", \"full_name\": \"KTibow/lovelace-dark-soft-ui-theme\", \"last_updated\": \"2022-06-13T22:51:22Z\", \"stargazers_count\": 46, \"topics\": [\"dark-theme\", \"hacktoberfest2020\", \"skin\", \"soft-ui\", \"theme-ui\"], \"last_fetched\": 1656968168.158055, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"292621909\": {\"repository_manifest\": {\"name\": \"Windows 10 themes\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"Home Assistant Windows 10 inspired themes\", \"domain\": \"\", \"etag_repository\": \"W/\\\"7240da4c6a6a2ac022f333d1f07e0b6eeda65036e9538d6438f249ffa60d67ae\\\"\", \"full_name\": \"mikosoft83/hass-windows10-themes\", \"last_updated\": \"2021-06-27T19:55:52Z\", \"stargazers_count\": 7, \"topics\": [\"accent-color\", \"windows\", \"windows-10\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"221287384\": {\"repository_manifest\": {\"name\": \"Clear Theme\", \"homeassistant\": \"0.102.0\"}, \"category\": \"theme\", \"description\": \"Clear Theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"5aebf76221c28f0e2912ef0feca40b6a3316898818e606502232fbd8d70fbfa8\\\"\", \"full_name\": \"naofireblade/clear-theme\", \"last_updated\": \"2020-10-08T10:10:49Z\", \"stargazers_count\": 21, \"last_fetched\": 1656859483.209788, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"282315875\": {\"repository_manifest\": {\"name\": \"Light Soft UI Theme\", \"homeassistant\": \"0.98.0\", \"country\": [\"US\"]}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 Home Assistant soft UI light theme, with help from @JuanMTech, @thomasloven, and @N-L1.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"245b0e7f12fe2f97ed183a31a1afaf025c1f5102ca7f80d80c00c16187d7591d\\\"\", \"full_name\": \"KTibow/lovelace-light-soft-ui-theme\", \"last_updated\": \"2021-12-09T01:53:32Z\", \"stargazers_count\": 58, \"topics\": [\"hacktoberfest2020\", \"light-theme\", \"skin\", \"soft-ui\", \"theme-ui\"], \"last_fetched\": 1649613465.670124, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"249722008\": {\"repository_manifest\": {\"name\": \"Your Name.\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"Home Assistant theme - A dark, electric blue theme that reminds the movie Your Name. \", \"domain\": \"\", \"etag_repository\": \"W/\\\"e5a977383bde62eefa8dc96b068f171bc8fc412c5477a1dc3b5240ca462797a1\\\"\", \"full_name\": \"Nihvel/your_name\", \"last_updated\": \"2022-04-29T23:58:08Z\", \"stargazers_count\": 19, \"last_fetched\": 1656859484.889319, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"277068969\": {\"repository_manifest\": {\"name\": \"Caule Themes Pack 1 - by caule.studio\", \"filename\": \"caule-themes-pack-1.yaml\"}, \"category\": \"theme\", \"description\": \"10 modern colors  |  4 categories of styles (Black Glass, Black, Dark, Light)  |  40 themes in total  |  Animated icons for the weather forecast card  |  And a bonus automatic theme selector for your interface.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"43454afe12ed035dc3f29b565d709836b02e3812917e00a2f0a978f425943523\\\"\", \"full_name\": \"orickcorreia/caule-themes-pack-1\", \"last_updated\": \"2022-06-20T15:29:16Z\", \"stargazers_count\": 193, \"topics\": [\"caule\", \"pack\"], \"last_fetched\": 1657362598.47774, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"221288367\": {\"repository_manifest\": {\"name\": \"Clear Theme Dark\", \"homeassistant\": \"0.108.9\"}, \"category\": \"theme\", \"description\": \"Dark variant of Clear Theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"3f61cf06e770d2593201cfbeb1aef288dd4fe55de2b49c79827034c46bdfbca1\\\"\", \"full_name\": \"naofireblade/clear-theme-dark\", \"last_updated\": \"2020-10-08T10:10:57Z\", \"stargazers_count\": 14, \"last_fetched\": 1656859483.46018, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"223028160\": {\"repository_manifest\": {\"name\": \"Green Slate Theme\"}, \"category\": \"theme\", \"description\": \"Green adaptation of this Home-Assistant theme:  https://github.com/seangreen2/slate_theme\", \"domain\": \"\", \"etag_repository\": \"W/\\\"2ed1825986f40ee57d47a9e22773735d5e181ee2b31de0fcc498e9d3da1f18fe\\\"\", \"full_name\": \"pbeckcom/green_slate_theme\", \"last_updated\": \"2019-11-20T22:22:55Z\", \"stargazers_count\": 1, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"197006509\": {\"repository_manifest\": {}, \"category\": \"theme\", \"description\": \"A Dark Theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"bc2a6ac78fbe05d527d2ff2335a190b13bb432daa42e2976f131b5eb2de0a5b5\\\"\", \"full_name\": \"seangreen2/slate_theme\", \"last_updated\": \"2022-03-08T15:51:41Z\", \"stargazers_count\": 84, \"last_fetched\": 1657362600.86864, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"226567922\": {\"repository_manifest\": {\"name\": \"Red slate theme\", \"render_readme\": \"True\"}, \"category\": \"theme\", \"description\": \"My red\\\"isch\\\" home assistant theme.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"9613b0e9ffd2da9e1f94820627ff9179b17ada9417950c46d6799c6b74229739\\\"\", \"full_name\": \"Poeschl/slate_red\", \"last_updated\": \"2022-01-06T14:43:48Z\", \"stargazers_count\": 1, \"topics\": [\"material-design\", \"red\"], \"last_fetched\": 1641587851.19915, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"287840715\": {\"repository_manifest\": {\"name\": \"OZW Network Visualization Card\", \"content_in_root\": true, \"filename\": \"ozw-network-visualization-card.js\", \"homeassistant\": \"0.115.0\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Lovelace custom card for visualizing the ZWave network with the OpenZWave (beta) integration.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"6d7f1a9e7121a596f63b524f3a97539e88d1168e3caaf44305519d23b020ba47\\\"\", \"full_name\": \"abmantis/ozw-network-visualization-card\", \"last_updated\": \"2022-06-05T22:24:45Z\", \"stargazers_count\": 30, \"topics\": [\"ozw\", \"zwave\", \"zwave2mqtt\"], \"last_fetched\": 1656859492.857897, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"274111031\": {\"repository_manifest\": {\"name\": \"Animated Weather Card\", \"render_readme\": true, \"homeassistant\": \"0.109.0\"}, \"category\": \"theme\", \"description\": \"Animated icons for default Home Assistant weather card\", \"domain\": \"\", \"etag_repository\": \"W/\\\"aac5392730e676aa0e04094c1ac928c7886f03732fe3738e748b3d4e6f3c409c\\\"\", \"full_name\": \"wowgamr/animated-weather-card\", \"last_updated\": \"2022-06-05T21:09:01Z\", \"stargazers_count\": 19, \"topics\": [\"weather-card\"], \"last_fetched\": 1656859491.322838, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"200081161\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"Custom Lovelace card for Budapest Public Transportation custom component\", \"domain\": \"\", \"etag_repository\": \"W/\\\"b1566a1bda4c24a5b942057a6733b24fb88c1ab4370a1415020b0fb5b66f7dcf\\\"\", \"full_name\": \"amaximus/bkk-stop-card\", \"last_updated\": \"2021-12-01T19:32:24Z\", \"stargazers_count\": 6, \"topics\": [\"bkk\", \"budapest\", \"lovelace-custom-card\", \"transportation\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"257102434\": {\"repository_manifest\": {\"name\": \"FKF Budapest Garbage Collection Card\", \"filename\": \"fkf-garbage-collection-card.js\", \"render_readme\": \"true\"}, \"category\": \"plugin\", \"description\": \"FKF Budapest Garbage Collection Card for Home Assistant/Lovelace\", \"domain\": \"\", \"etag_repository\": \"W/\\\"a1f6b46b4bab20b79c49a56c35d5965a455d2d3ac1f2b4e98bf6ae5f68ab8cd6\\\"\", \"full_name\": \"amaximus/fkf-garbage-collection-card\", \"last_updated\": \"2022-01-31T19:30:26Z\", \"stargazers_count\": 8, \"topics\": [\"budapest\", \"lovelace-custom-card\"], \"last_fetched\": 1644064205.03019, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"207018200\": {\"repository_manifest\": {\"name\": \"Garbage Collection Card\", \"filename\": \"garbage-collection-card.js\", \"render_readme\": \"true\"}, \"category\": \"plugin\", \"description\": \"Custom Lovelace card for Garbage Collection custom component\", \"domain\": \"\", \"downloads\": 6090, \"etag_repository\": \"W/\\\"cec31b3fdafa5fed413705e71c9efb5c9252ab28fa8019448a9b9fc1146c8200\\\"\", \"full_name\": \"amaximus/garbage-collection-card\", \"last_updated\": \"2022-06-03T06:27:21Z\", \"stargazers_count\": 80, \"topics\": [\"garbage-collection\", \"lovelace-custom-card\", \"ui-lovelace\"], \"last_fetched\": 1656859497.402038, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"207292725\": {\"repository_manifest\": {\"name\": \"Flexible Horseshoe Card for Lovelace\", \"content_in_root\": true, \"filename\": \"flex-horseshoe-card.js\"}, \"category\": \"plugin\", \"description\": \"Flexible Horseshoe card for Home Assistant Lovelace UI. A card with a flexible layout,  a horseshoe-like donut graph, multiple entities or attributes, graphics and animations!\", \"domain\": \"\", \"etag_repository\": \"W/\\\"459a92dff6bfd1278379dd7ebaccff261c008d48c553837cae821b4a0b2a56c4\\\"\", \"full_name\": \"AmoebeLabs/flex-horseshoe-card\", \"last_updated\": \"2022-05-31T19:16:34Z\", \"stargazers_count\": 127, \"topics\": [\"lovelace-card\", \"lovelace-custom-card\"], \"last_fetched\": 1657362426.119015, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"214365813\": {\"repository_manifest\": {\"name\": \"StarLine Card\", \"homeassistant\": \"0.103.0\"}, \"category\": \"plugin\", \"description\": \"StarLine lovelace card for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"ab990b5637116deb866b5b8ad2beab9ef0e6cf523a4b16c67382238e53272a46\\\"\", \"full_name\": \"Anonym-tsk/lovelace-starline-card\", \"last_updated\": \"2020-08-06T09:16:49Z\", \"stargazers_count\": 22, \"last_fetched\": 1653229978.93899, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"253019926\": {\"repository_manifest\": {\"name\": \"mini humidifier\", \"filename\": \"mini-humidifier-bundle.js\"}, \"category\": \"plugin\", \"description\": \"Minimalistic humidifier card for Home Assistant Lovelace UI\", \"domain\": \"\", \"downloads\": 1092, \"etag_repository\": \"W/\\\"ae515a84579e4f6ac1c08b16d1b5e6c46e6fdb63c883ad228c605cadce831fb0\\\"\", \"full_name\": \"artem-sedykh/mini-humidifier\", \"last_updated\": \"2022-06-14T14:43:58Z\", \"stargazers_count\": 121, \"topics\": [\"automation\", \"custom\", \"humidifier\"], \"last_fetched\": 1656859501.344032, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"268163975\": {\"repository_manifest\": {\"name\": \"mini climate card\", \"filename\": \"mini-climate-card-bundle.js\"}, \"category\": \"plugin\", \"description\": \"Minimalistic climate card for Home Assistant Lovelace UI\", \"domain\": \"\", \"downloads\": 3064, \"etag_repository\": \"W/\\\"2ff1f992e0703ca6b3f99967a373b894ab6989130960df2f51f42b8570c6c448\\\"\", \"full_name\": \"artem-sedykh/mini-climate-card\", \"last_updated\": \"2022-06-14T14:35:23Z\", \"stargazers_count\": 156, \"topics\": [\"automation\", \"climate\", \"climate-entity\", \"custom\", \"hacktoberfest2021\"], \"last_fetched\": 1656859500.876031, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"201292040\": {\"repository_manifest\": {\"name\": \"Zigbee2mqtt Networkmap Card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Home Assistant Custom Card to show Zigbee2mqtt network map\", \"downloads\": 12695, \"etag_repository\": \"W/\\\"7837a416b5b9ae9b7aa755a3b372f3a99a400fa4de678122a9873150df94dcb0\\\"\", \"full_name\": \"azuwis/zigbee2mqtt-networkmap\", \"last_updated\": \"2022-06-21T07:25:51Z\", \"stargazers_count\": 126, \"topics\": [\"zigbee2mqtt\"], \"last_fetched\": 1656859501.228805, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"271886611\": {\"repository_manifest\": {\"name\": \"Plant Picture Card\", \"render_readme\": true, \"filename\": \"PlantPictureCard.js\"}, \"category\": \"plugin\", \"description\": \"Like a picture glance card, but for plant data\", \"domain\": \"\", \"etag_repository\": \"W/\\\"4a569664b4c2873d16a88bc408a485d3c336175f5ac0bad1ce8e834b5c7c0868\\\"\", \"full_name\": \"badguy99/PlantPictureCard\", \"last_updated\": \"2020-09-13T17:45:01Z\", \"stargazers_count\": 9, \"topics\": [\"image\", \"lovelace-card\", \"plants\"], \"last_fetched\": 1653229979.811394, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"202546107\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"Extras for the synthwave inspired theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"26b24c2d96e0155425f319151d3e68b6ca8eb1226d83133dc38e68fac64d26ac\\\"\", \"full_name\": \"bbbenji/synthwave-hass-extras\", \"last_updated\": \"2020-10-30T00:24:02Z\", \"stargazers_count\": 14, \"last_fetched\": 1653229982.286477, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"269474857\": {\"repository_manifest\": {\"name\": \"Tab Redirect Card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Custom lovelace card to use in\\u00a0Home assistant allowing you to redirect a user to certain view based on entity states.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"7b966256dc0fadcf6af47fe36546fa34ff2a3a194da16cbea38f54b879af97f3\\\"\", \"full_name\": \"ben8p/lovelace-tab-redirect-card\", \"last_updated\": \"2022-05-28T16:39:37Z\", \"stargazers_count\": 7, \"topics\": [\"lovelace-custom-card\"], \"last_fetched\": 1653824396.308319, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"303857065\": {\"repository_manifest\": {\"name\": \"Battery Entity Row\", \"filename\": \"battery-entity-row.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Show battery states or attributes with dynamic icon on entity rows in Home Assistant's Lovelace UI\", \"domain\": \"\", \"downloads\": 7833, \"etag_repository\": \"W/\\\"015c06c18d9379f32c3a2277b8d1814b1576ce6bd0383cc4931a7f124ef4734c\\\"\", \"full_name\": \"benct/lovelace-battery-entity-row\", \"last_updated\": \"2021-03-12T15:50:43Z\", \"stargazers_count\": 49, \"topics\": [\"attribute\", \"battery\", \"card\", \"entity\", \"entity-rows\", \"state\"], \"last_fetched\": 1653229983.949564, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"184658908\": {\"repository_manifest\": {\"name\": \"GitHub Entity Row\", \"filename\": \"github-entity-row.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"GitHub repository sensor data on entity rows in Home Assistant's Lovelace UI\", \"domain\": \"\", \"etag_repository\": \"W/\\\"d7cacb12ed39d9ac049a21462e7cb26e246e2b81fc226a07a1de76cae863e64e\\\"\", \"full_name\": \"benct/lovelace-github-entity-row\", \"last_updated\": \"2022-02-15T17:55:32Z\", \"stargazers_count\": 19, \"topics\": [\"card\", \"entity\", \"entity-rows\", \"github\"], \"last_fetched\": 1645379979.143436, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"178921037\": {\"repository_manifest\": {\"name\": \"Multiple Entity Row\", \"filename\": \"multiple-entity-row.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Show multiple entity states and attributes on entity rows in Home Assistant's Lovelace UI\", \"downloads\": 21887, \"etag_repository\": \"W/\\\"e8134a5ac066fea2f63f2f487c7a340f6993de44d451a8eeb937bb721dbcf766\\\"\", \"full_name\": \"benct/lovelace-multiple-entity-row\", \"last_updated\": \"2022-03-08T06:19:57Z\", \"stargazers_count\": 494, \"topics\": [\"attribute\", \"card\", \"entity\", \"entity-attribute\", \"entity-rows\", \"format\", \"multiple\", \"state\"], \"last_fetched\": 1657362431.508012, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"180229356\": {\"repository_manifest\": {\"name\": \"Simple Vacuum Card\", \"filename\": \"xiaomi-vacuum-card.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Simple card for various robot vacuums in Home Assistant's Lovelace UI\", \"downloads\": 8725, \"etag_repository\": \"W/\\\"b744ec4b8821e19d59feeb62e8495c2955f4381b510fbef52954c5dd7dcd74b6\\\"\", \"full_name\": \"benct/lovelace-xiaomi-vacuum-card\", \"last_updated\": \"2022-03-04T00:57:17Z\", \"stargazers_count\": 210, \"topics\": [\"card\", \"roborock\", \"robot-vacuums\", \"vacuum\", \"xiaomi\", \"xiaomi-vacuum\"], \"last_fetched\": 1657362432.282776, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"215327195\": {\"repository_manifest\": {\"name\": \"RGB Light Card\", \"content_in_root\": true, \"filename\": \"card.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udca1 A Lovelace custom card for RGB lights\", \"domain\": \"\", \"downloads\": 10526, \"etag_repository\": \"W/\\\"3143b0b09cda679818c3e6a4eeee8e4bf90675ddc8202d64b1799f7ab7e4fe45\\\"\", \"full_name\": \"bokub/rgb-light-card\", \"last_updated\": \"2022-07-02T09:17:13Z\", \"stargazers_count\": 300, \"topics\": [\"lovelace-custom-card\", \"rgb-lights\"], \"last_fetched\": 1656859507.52142, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"192732887\": {\"repository_manifest\": {\"homeassistant\": \"0.110.0\"}, \"category\": \"plugin\", \"description\": \"Card that allows you to swipe throught multiple cards for Home Assistant Lovelace\", \"domain\": \"\", \"etag_repository\": \"W/\\\"102e168e35c9526da36f761d0c496cd2434ff3e52d201a86aa2b26ff70146015\\\"\", \"full_name\": \"bramkragten/swipe-card\", \"last_updated\": \"2022-05-03T13:36:39Z\", \"stargazers_count\": 103, \"last_fetched\": 1656859508.755172, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"192732636\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"Weather Card with animated icons for Home Assistant Lovelace\", \"domain\": \"\", \"etag_repository\": \"W/\\\"c73d69751dc43bc7fb722654af4f25fd1268c0cabc6a29897d5626f3a7a89be3\\\"\", \"full_name\": \"bramkragten/weather-card\", \"last_updated\": \"2022-06-06T18:31:44Z\", \"stargazers_count\": 320, \"last_fetched\": 1657362437.402336, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"194037195\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"A custom card for displaying information provided by Beerbolaget (https://github.com/Ceerbeerus/beerbolaget).\", \"domain\": \"\", \"etag_repository\": \"W/\\\"253d5767ad6f98a9b1cb1d5d022dcbb4dcaa83b8879c4e330a6717e1293085db\\\"\", \"full_name\": \"Ceerbeerus/beerbolaget-card\", \"last_updated\": \"2020-08-07T06:24:51Z\", \"stargazers_count\": 3, \"last_fetched\": 1653229988.830222, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"235449701\": {\"repository_manifest\": {\"name\": \"Lightalarm Card\", \"filename\": \"lightalarm-card.js\"}, \"category\": \"plugin\", \"description\": \"\\u23f0 Lovelace Card to Control Light Alarm Properties\", \"domain\": \"\", \"etag_repository\": \"W/\\\"8fb2ce4d2d7a7228619e7a512555516e0ded723877e32e5178853cbfd846f5f6\\\"\", \"full_name\": \"chaptergy/lightalarm-card\", \"last_updated\": \"2022-03-26T01:52:04Z\", \"stargazers_count\": 31, \"last_fetched\": 1657362436.553463, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"143850865\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"This card give you a list of your wishlist items.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"2081bc26ffbee01b69fea30575525113bd5395d0e325e11a183f4fc76cd65b7d\\\"\", \"full_name\": \"custom-cards/beer-card\", \"last_updated\": \"2021-01-13T09:25:20Z\", \"stargazers_count\": 2, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"260526528\": {\"repository_manifest\": {\"name\": \"Dark Sky Rich Weather Card\", \"content_in_root\": true, \"filename\": \"lovelace-darksky-card.js\", \"render_readme\": \"true\"}, \"category\": \"plugin\", \"description\": \"Custom Dark Sky Weather plugin for HACS. This creates a rich weather card using the Dark Sky weather plugin.\", \"etag_repository\": \"W/\\\"6d38c2d7d7d9c413b468cce671bacce3ef20c200875841bb92ccb509991e463f\\\"\", \"full_name\": \"clayauld/lovelace-darksky-card\", \"last_updated\": \"2021-10-13T22:52:46Z\", \"stargazers_count\": 14, \"last_fetched\": 1648839840.239747, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"163363577\": {\"repository_manifest\": {\"name\": \"Bar Card\", \"render_readme\": true, \"filename\": \"bar-card.js\"}, \"category\": \"plugin\", \"description\": \"Customizable Animated Bar card for Home Assistant Lovelace\", \"downloads\": 37840, \"etag_repository\": \"W/\\\"15d8f0ccc836085f5240e7934b28646f52f6b89bea747f3a478de73aa77a705c\\\"\", \"full_name\": \"custom-cards/bar-card\", \"last_updated\": \"2022-02-13T07:37:26Z\", \"stargazers_count\": 241, \"last_fetched\": 1657362437.920212, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"187245418\": {\"repository_manifest\": {\"name\": \"bignumber-card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": null, \"domain\": \"\", \"etag_repository\": \"W/\\\"a8bd686a07533c822b20bcc0886633092376c7c6482619df292ca356b4429ed6\\\"\", \"full_name\": \"custom-cards/bignumber-card\", \"last_updated\": \"2022-01-31T15:47:59Z\", \"stargazers_count\": 86, \"last_fetched\": 1656859517.600859, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"146194325\": {\"repository_manifest\": {\"name\": \"button-card\", \"render_readme\": true, \"filename\": \"button-card.js\"}, \"category\": \"plugin\", \"description\": \"\\u2747\\ufe0f Lovelace button-card for home assistant\", \"downloads\": 112855, \"etag_repository\": \"W/\\\"8e2a1ee522ba97c17c91f9b43801fcf6732b6203fcf86fb96c61ea5fb24610d3\\\"\", \"full_name\": \"custom-cards/button-card\", \"last_updated\": \"2022-06-10T00:52:04Z\", \"stargazers_count\": 1148, \"last_fetched\": 1657362437.948938, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"164022050\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"Check Button Card is a button that tracks when it is last pressed, for the Home Assistant Lovelace front-end using MQTT auto discovery.\", \"domain\": \"\", \"downloads\": 2374, \"etag_repository\": \"W/\\\"1c5f9173c6d3d88e958e07599d302839f2ee095b515b6d19a423d24150602f7d\\\"\", \"full_name\": \"custom-cards/check-button-card\", \"last_updated\": \"2021-12-22T18:23:08Z\", \"stargazers_count\": 94, \"last_fetched\": 1656859517.572978, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"142545838\": {\"repository_manifest\": {\"name\": \"Canvas Gauge Card\", \"render_readme\": true, \"filename\": \"canvas-gauge-card.js\"}, \"category\": \"plugin\", \"description\": \"The card makes it possible to use gauges from https://canvas-gauges.com/\", \"domain\": \"\", \"downloads\": 8778, \"etag_repository\": \"W/\\\"afc0928cd3fe6d34b2767f6f6759b12a5bf7a889e81e2ec20e93bf872d6c8691\\\"\", \"full_name\": \"custom-cards/canvas-gauge-card\", \"last_updated\": \"2021-05-09T14:02:19Z\", \"stargazers_count\": 104, \"last_fetched\": 1656859517.83597, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"141952963\": {\"repository_manifest\": {\"name\": \"Circle Sensor Card\", \"homeassistant\": \"2020.12.0\", \"content_in_root\": true, \"filename\": \"circle-sensor-card.js\"}, \"category\": \"plugin\", \"description\": \"A custom component for displaying sensor values as cards or elements\", \"domain\": \"\", \"etag_repository\": \"W/\\\"74e795e74bb8c139f3256665b86a9c6a206e9abe030e907f1f459903e41266e5\\\"\", \"full_name\": \"custom-cards/circle-sensor-card\", \"last_updated\": \"2022-06-02T04:10:16Z\", \"stargazers_count\": 146, \"last_fetched\": 1657362441.756743, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"180000010\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": null, \"domain\": \"\", \"etag_repository\": \"W/\\\"f75ed0407b5abaa828d452e200e9d441a994af006fe70a4bfede62521670739e\\\"\", \"full_name\": \"custom-cards/cover-element\", \"last_updated\": \"2019-06-03T04:34:16Z\", \"stargazers_count\": 15, \"last_fetched\": 1646496580.995819, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"188686483\": {\"repository_manifest\": {\"name\": \"Decluttering Card\", \"render_readme\": true, \"filename\": \"decluttering-card.js\"}, \"category\": \"plugin\", \"description\": \"\\ud83e\\uddf9 Declutter your lovelace configuration with the help of this card\", \"domain\": \"\", \"downloads\": 9610, \"etag_repository\": \"W/\\\"20fc5c6169f2957ba5cf52395e11ed7b307e6f393e581d1d32d45c4246f584d4\\\"\", \"full_name\": \"custom-cards/decluttering-card\", \"last_updated\": \"2021-08-11T01:21:07Z\", \"stargazers_count\": 198, \"last_fetched\": 1656859517.735133, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"143762825\": {\"repository_manifest\": {\"name\": \"Dual gauge card\", \"filename\": \"dual-gauge-card.js\", \"content_in_root\": true}, \"category\": \"plugin\", \"description\": \"Dual gauge custom card for Lovelace in Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"02a14d1ccb089095b5f9ee8f7d544e6887bd2ae6bcbc7fc4bb932c65ce050e47\\\"\", \"full_name\": \"custom-cards/dual-gauge-card\", \"last_updated\": \"2022-05-12T04:36:46Z\", \"stargazers_count\": 114, \"last_fetched\": 1656859517.656931, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"187245461\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"Entity Attributes\", \"domain\": \"\", \"etag_repository\": \"W/\\\"ad467605b07e0f09c0dbe1ad423645b5db475b9c63c763b6329e061bdde6aaf5\\\"\", \"full_name\": \"custom-cards/entity-attributes-card\", \"last_updated\": \"2021-06-05T21:05:54Z\", \"stargazers_count\": 53, \"last_fetched\": 1653229996.449095, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"187245495\": {\"repository_manifest\": {\"name\": \"gauge-card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": null, \"domain\": \"\", \"etag_repository\": \"W/\\\"86d6c4c8dda57126db57571bcd53e35875f68fcc9f983cb6cf8fd3b8b8900965\\\"\", \"full_name\": \"custom-cards/gauge-card\", \"last_updated\": \"2022-05-01T20:12:53Z\", \"stargazers_count\": 27, \"last_fetched\": 1653230000.475846, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"187245511\": {\"repository_manifest\": {\"name\": \"group-card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": null, \"domain\": \"\", \"etag_repository\": \"W/\\\"d54770469e964643dab3f4af93c5385a234bd211ca07904d885f90ae76f2d671\\\"\", \"full_name\": \"custom-cards/group-card\", \"last_updated\": \"2021-06-12T14:19:18Z\", \"stargazers_count\": 22, \"last_fetched\": 1653230000.591584, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"179491130\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"A group element for picture-elements with dynamic toggle capability\", \"domain\": \"\", \"downloads\": 424, \"etag_repository\": \"W/\\\"fbe8d4ea10236c2bf490637999723189271645a7dfd97220091f30bd38712b28\\\"\", \"full_name\": \"custom-cards/group-element\", \"last_updated\": \"2022-04-17T08:36:35Z\", \"stargazers_count\": 49, \"last_fetched\": 1653230000.497519, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"151318225\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"Entity row for lights with sliders for adjusting different values based on features\", \"domain\": \"\", \"etag_repository\": \"W/\\\"c35ee4d93fbe050180f275b46afec288cdbf98f4c65e069927eb76f3747d3630\\\"\", \"full_name\": \"custom-cards/light-entity-row\", \"last_updated\": \"2021-10-20T09:53:08Z\", \"stargazers_count\": 45, \"last_fetched\": 1653230000.910034, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"156292058\": {\"repository_manifest\": {\"name\": \"Flex Table - Highly customizable, Data visualization\", \"content_in_root\": true, \"filename\": \"flex-table-card.js\"}, \"category\": \"plugin\", \"description\": \"Highly Flexible Lovelace Card - arbitrary contents/columns/rows, regex matched, perfect to show appdaemon created content and anything breaking out of the entity_id + attributes concept\", \"etag_repository\": \"W/\\\"0dd23ee81e7ec91fe0a1e84a0c1f797e6ea3bf00b68161125be20471905bba39\\\"\", \"full_name\": \"custom-cards/flex-table-card\", \"last_updated\": \"2022-06-20T14:21:38Z\", \"stargazers_count\": 119, \"topics\": [\"data-table\", \"data-visualization\", \"flexible-table\", \"high-configurability\", \"javascript\", \"single-file\", \"table-visualization\"], \"last_fetched\": 1657362443.546797, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"196132939\": {\"repository_manifest\": {\"homeassistant\": \"0.106.0\", \"name\": \"Nintendo Wishlist Card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Displays a card showing Nintendo Switch games that are on sale from your wish list.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"573ffaeed2e505c0ef114a6857a7ca636395ec02ed088860b5dc16abda705133\\\"\", \"full_name\": \"custom-cards/nintendo-wishlist-card\", \"last_updated\": \"2021-03-04T02:29:13Z\", \"stargazers_count\": 10, \"last_fetched\": 1656859523.916957, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"165156754\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udcb5 Personal Capital Card\", \"domain\": \"\", \"etag_repository\": \"W/\\\"31c9d4d4d0a5ac723c5fb3d0d983c755fd064c9fe54e127ef6541b6187fd22b0\\\"\", \"full_name\": \"custom-cards/pc-card\", \"last_updated\": \"2019-10-21T03:36:31Z\", \"stargazers_count\": 5, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"187247927\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": null, \"domain\": \"\", \"etag_repository\": \"W/\\\"fba7860497e7c045423ccbba53ed5f3db34eacf5214a5293431b03ff0c02d3ce\\\"\", \"full_name\": \"custom-cards/plan-coordinates\", \"last_updated\": \"2021-06-05T21:07:14Z\", \"stargazers_count\": 28, \"last_fetched\": 1653230002.46218, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"159711605\": {\"repository_manifest\": {\"name\": \"Secondaryinfo Entity Row\", \"content_in_root\": true, \"filename\": \"secondaryinfo-entity-row.js\", \"render_readme\": true, \"homeassistant\": \"0.88\"}, \"category\": \"plugin\", \"description\": \"Custom entity row for HomeAssistant, providing additional types of data to be displayed in the secondary info area of the Lovelace Entities card\", \"domain\": \"\", \"etag_repository\": \"W/\\\"e8304f2500370093eabc3a4bc4fc6ac1a0148e151657342a322334a13c0f0f73\\\"\", \"full_name\": \"custom-cards/secondaryinfo-entity-row\", \"last_updated\": \"2021-06-05T21:12:36Z\", \"stargazers_count\": 144, \"last_fetched\": 1653824413.002635, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"146335411\": {\"repository_manifest\": {\"name\": \"RMV Card\", \"content_in_root\": true, \"filename\": \"rmv-card.js\"}, \"category\": \"plugin\", \"description\": \"Custom card for the RMV component.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"1518c9d23155b3c851847eb10a2677dbbffdef923c6115bd08185949bce7f6d0\\\"\", \"full_name\": \"custom-cards/rmv-card\", \"last_updated\": \"2020-07-08T15:41:50Z\", \"stargazers_count\": 11, \"last_fetched\": 1656859524.026861, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"173955605\": {\"repository_manifest\": {\"name\": \"Spotify Lovelace Card\", \"render_readme\": true, \"filename\": \"spotify-card.js\"}, \"category\": \"plugin\", \"description\": \"Spotify playlist card for Home Assistant card\", \"domain\": \"\", \"etag_repository\": \"W/\\\"e7372215e2a52ca0a6d40c269bc445198398af9c91b4e9dc8e5e9ac0d6b24601\\\"\", \"full_name\": \"custom-cards/spotify-card\", \"last_updated\": \"2022-06-24T18:05:03Z\", \"stargazers_count\": 255, \"last_fetched\": 1656859529.128837, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"248954055\": {\"repository_manifest\": {\"name\": \"Stack In Card\", \"render_readme\": true, \"filename\": \"stack-in-card.js\"}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udee0 group multiple cards into one card without the borders\", \"domain\": \"\", \"downloads\": 18166, \"etag_repository\": \"W/\\\"8929e6fd3822c6d445c17a61764dea9338130ba06fce0524729fae931382a8be\\\"\", \"full_name\": \"custom-cards/stack-in-card\", \"last_updated\": \"2022-05-12T22:26:56Z\", \"stargazers_count\": 126, \"last_fetched\": 1656859529.025358, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"185304888\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": null, \"domain\": \"\", \"downloads\": 93, \"etag_repository\": \"W/\\\"940e5f72da0c749063c21232d281699d9bc1af9ee6834e806f1c0bbc67a1f4f1\\\"\", \"full_name\": \"custom-cards/text-action-element\", \"last_updated\": \"2022-05-06T19:58:02Z\", \"stargazers_count\": 3, \"last_fetched\": 1653230007.470743, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"147764937\": {\"repository_manifest\": {\"name\": \"surveillance-card\", \"content_in_root\": true, \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"A custom component for displaying camera feeds in the style of a surveillance system.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"82c81c60a0b405e6f4de276cc21e7c4b7c2cecccdca2898c4914fba2d746db1b\\\"\", \"full_name\": \"custom-cards/surveillance-card\", \"last_updated\": \"2022-01-13T21:20:48Z\", \"stargazers_count\": 165, \"last_fetched\": 1656859529.023013, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"203294272\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"All your unused entities in a list\", \"domain\": \"\", \"etag_repository\": \"W/\\\"a3fccf5afdf192ed4172c5667d573be6bd1231a9bc3d24c18ef5401baf8eaa58\\\"\", \"full_name\": \"custom-cards/unused-card\", \"last_updated\": \"2022-02-12T12:34:41Z\", \"stargazers_count\": 25, \"last_fetched\": 1653230007.975744, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"192835334\": {\"repository_manifest\": {\"name\": \"Lovelace Lock Card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Home Assistant Lovelace card to lock entire cards behind passwords or prompts.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"60d52738ad34a220f6310a349f221f5fec2240cbc5e8906e652525641b314de3\\\"\", \"full_name\": \"CyrisXD/love-lock-card\", \"last_updated\": \"2022-01-17T23:16:50Z\", \"stargazers_count\": 101, \"last_fetched\": 1656859529.027261, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"254206234\": {\"repository_manifest\": {\"name\": \"PVPC Hourly Pricing Card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Home Assistant Lovelace custom card to use with Spain electricity hourly pricing (PVPC) integration\", \"domain\": \"\", \"downloads\": 1725, \"etag_repository\": \"W/\\\"6d9c42ac00c10d6b9554995171056707b91242dc666c8ebd9dd28b797446b37d\\\"\", \"full_name\": \"danimart1991/pvpc-hourly-pricing-card\", \"last_updated\": \"2022-06-15T13:47:27Z\", \"stargazers_count\": 51, \"topics\": [\"esios\", \"graphics\", \"lovelace-card\", \"lovelace-custom-card\", \"pvpc\", \"ree\"], \"last_fetched\": 1656859530.195112, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"296396632\": {\"repository_manifest\": {\"name\": \"Rejseplanen S-Tog Card\", \"country\": [\"DK\"]}, \"category\": \"plugin\", \"description\": \"Lovelace card for listing departures from Rejseplanen sensors, in the style of S-Tog departure boards.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"602d6041a65f49180257a59874b8c4f8603db7e30b36dd6e03cb60b24104fe0d\\\"\", \"full_name\": \"DarkFox/rejseplanen-stog-card\", \"last_updated\": \"2021-08-12T21:33:55Z\", \"stargazers_count\": 1, \"topics\": [\"denmark\", \"lovelace-card\", \"rejseplanen\", \"rejseplanen-sensors\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"195497310\": {\"repository_manifest\": {\"name\": \"Custom Animated Weather Card\", \"content_in_root\": true, \"filename\": \"bom-weather-card.js\", \"country\": [\"IT\", \"FR\", \"DE\", \"NL\", \"PL\", \"HE\", \"RU\", \"DA\", \"UA\", \"EN\"]}, \"category\": \"plugin\", \"description\": \"Custom Animated Weather Card for any weather provider\", \"domain\": \"\", \"etag_repository\": \"W/\\\"953c1d0ab5a31adfe20ef012e1b9b52a5db9632114e8330cad22d1fb1aeb912c\\\"\", \"full_name\": \"DavidFW1960/bom-weather-card\", \"last_updated\": \"2022-06-17T02:12:09Z\", \"stargazers_count\": 116, \"topics\": [\"bom\", \"weather-forecast\"], \"last_fetched\": 1657362454.501427, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"198066338\": {\"repository_manifest\": {\"name\": \"Rejseplanen Card\", \"country\": [\"DK\"]}, \"category\": \"plugin\", \"description\": \"Lovelace card for listing departures from Rejseplanen sensors\", \"domain\": \"\", \"etag_repository\": \"W/\\\"0207f155e5f45200428e9b4cbac8a1f842026d1d51a7618f2d2d0a74f3759d1b\\\"\", \"full_name\": \"DarkFox/rejseplanen-card\", \"last_updated\": \"2021-08-11T08:32:56Z\", \"stargazers_count\": 4, \"topics\": [\"denmark\", \"lovelace-card\", \"rejseplanen\", \"rejseplanen-card\", \"rejseplanen-sensors\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"273007955\": {\"repository_manifest\": {\"name\": \"Power Usage Card with Regular Expressions\", \"content_in_root\": true, \"filename\": \"power-usage-card-regex.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Lovelace pie chart card that displays current energy usage\", \"domain\": \"\", \"etag_repository\": \"W/\\\"194ea82a8e02ed8639d583821b2ec65a0efd7a10032c540098de4f0602cc5f4f\\\"\", \"full_name\": \"DBa2016/power-usage-card-regex\", \"last_updated\": \"2021-06-24T17:07:11Z\", \"stargazers_count\": 7, \"topics\": [\"lovelace-custom-card\", \"power-usage\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"231145540\": {\"repository_manifest\": {\"name\": \"NextBus Card\", \"render_readme\": true, \"filename\": \"nextbus-card.js\"}, \"category\": \"plugin\", \"description\": \"A card giving richer public transit display using NextBus sensors.\", \"domain\": \"\", \"downloads\": 270, \"etag_repository\": \"W/\\\"d7489543badfd31ad6bf9178def497486f5b63dcb031da189dff3ef9faebf984\\\"\", \"full_name\": \"dcramer/lovelace-nextbus-card\", \"last_updated\": \"2022-02-12T21:44:47Z\", \"stargazers_count\": 7, \"topics\": [\"lovelace-custom-card\", \"nextbus\", \"public-transit\"], \"last_fetched\": 1657362454.966525, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"269011342\": {\"repository_manifest\": {\"name\": \"Shutter Card\", \"filename\": \"hass-shutter-card.js\", \"render_readme\": true, \"homeassistant\": \"2021.11.0\"}, \"category\": \"plugin\", \"description\": \"Shutter card for Home Assistant Lovelace UI\", \"domain\": \"\", \"downloads\": 9319, \"etag_repository\": \"W/\\\"65e6034c338fe6e84fec4e7d347ed6bf595f0279f75cdb7842bbaaba4e0ecd8e\\\"\", \"full_name\": \"Deejayfool/hass-shutter-card\", \"last_updated\": \"2022-06-01T18:07:31Z\", \"stargazers_count\": 159, \"last_fetched\": 1657362458.269477, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"274738925\": {\"repository_manifest\": {\"name\": \"Purifier Card\", \"render_readme\": true, \"filename\": \"purifier-card.js\"}, \"category\": \"plugin\", \"description\": \"Air Purifier card for Home Assistant Lovelace UI\", \"domain\": \"\", \"downloads\": 3083, \"etag_repository\": \"W/\\\"d888bba3ff5eb8f6aaa3ae888d2e3c1e2b67b3297300899771cd099a92e4c51d\\\"\", \"full_name\": \"denysdovhan/purifier-card\", \"last_updated\": \"2022-07-01T16:03:32Z\", \"stargazers_count\": 146, \"topics\": [\"air-purifier\", \"purifier\", \"smart-home\"], \"last_fetched\": 1656859535.461943, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"193262086\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"Home assistant remote control\", \"domain\": \"\", \"etag_repository\": \"W/\\\"28c4652b9adbd9cc93b9d88059884cb9bac1e3055e58b77d7d6c066302dadd9f\\\"\", \"full_name\": \"dimagoltsman/content-card-remote-control\", \"last_updated\": \"2022-01-20T20:58:11Z\", \"stargazers_count\": 3, \"last_fetched\": 1653230017.611836, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"197929015\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"Custom Lovelace card that displays ZHA network and device information\", \"domain\": \"\", \"etag_repository\": \"W/\\\"b36a429072446ac7df38ae05b2b5d7e9548f892f94e8938bc2896d8fd7c99f02\\\"\", \"full_name\": \"dmulcahey/zha-network-card\", \"last_updated\": \"2020-11-25T23:16:49Z\", \"stargazers_count\": 68, \"last_fetched\": 1656859540.103619, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"261291295\": {\"repository_manifest\": {\"name\": \"Vacuum Card\", \"render_readme\": true, \"filename\": \"vacuum-card.js\"}, \"category\": \"plugin\", \"description\": \"Vacuum cleaner card for Home Assistant Lovelace UI\", \"downloads\": 13828, \"etag_repository\": \"W/\\\"a505ddf6a3ccc75929f933de917ce4a571b4957547eb6ff0cc42aeeeeeb52557\\\"\", \"full_name\": \"denysdovhan/vacuum-card\", \"last_updated\": \"2022-07-05T18:56:58Z\", \"stargazers_count\": 570, \"topics\": [\"robot-vacuum\", \"vacuum\"], \"last_fetched\": 1657362458.426483, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"263901624\": {\"repository_manifest\": {\"name\": \"Generic Remote Control Card\", \"filename\": \"generic-remote-control-card.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Generic Remote control card for HACS\", \"etag_repository\": \"W/\\\"37deef4175aaebcaabc912958ef02d690366fedc798454b787ec89c0dad0dee1\\\"\", \"full_name\": \"dimagoltsman/generic-remote-control-card\", \"last_updated\": \"2022-07-07T14:57:55Z\", \"stargazers_count\": 69, \"last_fetched\": 1657362459.695895, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"265313034\": {\"repository_manifest\": {\"name\": \"Refreshable picture card\", \"filename\": \"refreshable-picture-card.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"a refreshable picture card for HACS\", \"domain\": \"\", \"etag_repository\": \"W/\\\"dd65e93ed3fcd20a4d6115e23b6a2dc00a28025c29f0bff08e0cdf60f4f2a1ee\\\"\", \"full_name\": \"dimagoltsman/refreshable-picture-card\", \"last_updated\": \"2022-05-18T20:02:28Z\", \"stargazers_count\": 14, \"last_fetched\": 1653230018.440434, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"157674859\": {\"repository_manifest\": {\"name\": \"Air Visual Card\"}, \"category\": \"plugin\", \"description\": \"A Lovelace card showing air quality data from airvisual.com. Requires the AirVisual component.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"6f3266d33ed8b81faf015dc50c7d72c465576b2c57d2b52018f9e04b030985e9\\\"\", \"full_name\": \"dnguyen800/air-visual-card\", \"last_updated\": \"2021-12-03T01:41:18Z\", \"stargazers_count\": 72, \"topics\": [\"air-quality\", \"air-visual\"], \"last_fetched\": 1653733070.868786, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"236664033\": {\"repository_manifest\": {\"name\": \"Swipe Glance Card\", \"render_readme\": true, \"filename\": \"swipe-glance-card.js\"}, \"category\": \"plugin\", \"description\": \":point_up_2: Swipe Glance Card\", \"domain\": \"\", \"downloads\": 1610, \"etag_repository\": \"W/\\\"8dc844df37ce9f8856389daf534e20882d81c20d14cf6a05003c2bea3dd12ac3\\\"\", \"full_name\": \"dooz127/swipe-glance-card\", \"last_updated\": \"2022-02-12T23:50:31Z\", \"stargazers_count\": 10, \"topics\": [\"automation\"], \"last_fetched\": 1653230020.065666, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"260597137\": {\"repository_manifest\": {\"name\": \"Air Purifier Card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"\\u7528\\u4e8eLovelace\\u7684\\u5c0f\\u7c73\\u7a7a\\u6c14\\u51c0\\u5316\\u5668\\u5361\\u7247\", \"domain\": \"\", \"etag_repository\": \"W/\\\"075bcd8ee0ea615f4674939b08ecb1ccf729392feb141ed07884ca121edc4b86\\\"\", \"full_name\": \"fineemb/lovelace-air-filter-card\", \"last_updated\": \"2021-09-13T17:10:23Z\", \"stargazers_count\": 13, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"247134044\": {\"repository_manifest\": {\"name\": \"Multiline Text Input Card\"}, \"category\": \"plugin\", \"description\": \"A simple lovelace multiline text input card\", \"domain\": \"\", \"etag_repository\": \"W/\\\"9d9e34f8868196ecba91cd38706fca5955c3cf9c59229043690dc2015c34ecd0\\\"\", \"full_name\": \"faeibson/lovelace-multiline-text-input-card\", \"last_updated\": \"2020-10-15T00:16:17Z\", \"stargazers_count\": 8, \"topics\": [\"lovelace-card\", \"multiline\", \"text-input\"], \"last_fetched\": 1645379983.130397, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"307058107\": {\"repository_manifest\": {\"name\": \"Car card\", \"render_readme\": true, \"country\": [\"CN\"]}, \"category\": \"plugin\", \"description\": \"\\u8f66\\u8f86\\u4eea\\u8868\\u76d8\", \"domain\": \"\", \"etag_repository\": \"W/\\\"2544289ec2bfb4dd4fe67da3a14fa0738d3694391a67db5c5d4f5a2618b2129e\\\"\", \"full_name\": \"fineemb/lovelace-car-card\", \"last_updated\": \"2020-11-01T23:45:40Z\", \"stargazers_count\": 5, \"topics\": [\"car\", \"lovelace-custom-card\", \"lynkco\"], \"last_fetched\": 1642851273.180509, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"286408741\": {\"repository_manifest\": {\"name\": \"Posten Card\", \"render_readme\": true, \"filename\": \"posten-card.js\", \"country\": [\"NO\"]}, \"category\": \"plugin\", \"description\": \"A Lovelace card to display Norwegian mail delivery days\", \"domain\": \"\", \"etag_repository\": \"W/\\\"0467bc0a8b50ba2714978be3a5fd98815de27d47980f6e086025bc4a9d6fa8bc\\\"\", \"full_name\": \"ezand/lovelace-posten-card\", \"last_updated\": \"2021-08-12T20:35:21Z\", \"stargazers_count\": 13, \"topics\": [\"lovelace-card\", \"mail-delivery\"], \"last_fetched\": 1643571257.298487, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"259784620\": {\"repository_manifest\": {\"name\": \"Gaode Map card\", \"render_readme\": true, \"country\": [\"CN\"]}, \"category\": \"plugin\", \"description\": \"\\u590d\\u523b\\u5b98\\u65b9Lovelace\\u5730\\u56fe\\u5361\\u7247,\\u57fa\\u4e8e\\u9ad8\\u5fb7\\u5730\\u56fe\", \"domain\": \"\", \"etag_repository\": \"W/\\\"fac6124ae667ee9f6003a316d04a4f23f8b178bf97562cc37c2c867ef702e223\\\"\", \"full_name\": \"fineemb/lovelace-cn-map-card\", \"last_updated\": \"2020-10-26T06:35:55Z\", \"stargazers_count\": 35, \"last_fetched\": 1653230024.66537, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"291480917\": {\"repository_manifest\": {\"name\": \"Colorfulclouds Weather Card\", \"render_readme\": true, \"filename\": \"colorfulclouds-weather-card.js\", \"country\": [\"CN\"]}, \"category\": \"plugin\", \"description\": \"\\u8fd9\\u662f\\u4e00\\u4e2a\\u9002\\u7528\\u4e8e\\u5f69\\u4e91\\u5929\\u6c14\\u96c6\\u6210\\u7684Lovelace\\u5361\\u7247\", \"domain\": \"\", \"etag_repository\": \"W/\\\"a29c45056778d6b757082c23d7b17108ebcbe17e11787ce4a0906d7799c90e93\\\"\", \"full_name\": \"fineemb/lovelace-colorfulclouds-weather-card\", \"last_updated\": \"2022-01-06T15:47:26Z\", \"stargazers_count\": 27, \"topics\": [\"lovelace-custom-card\", \"weather\"], \"last_fetched\": 1653230025.462968, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"240906060\": {\"repository_manifest\": {\"name\": \"PHICOMM DC1 card\", \"render_readme\": true, \"country\": [\"CN\"]}, \"category\": \"plugin\", \"description\": \"\\u6590\\u8bafDC1\\u6392\\u63d2\\u7684Lovelace\\u5361\\u7247\", \"domain\": \"\", \"etag_repository\": \"W/\\\"af9016e9700053334c3d2ce9a45e38b4003162a7dc1f5e4d6eb9d8e65c36cac5\\\"\", \"full_name\": \"fineemb/lovelace-dc1-card\", \"last_updated\": \"2020-08-26T08:19:40Z\", \"stargazers_count\": 19, \"last_fetched\": 1653230026.192545, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"214792276\": {\"repository_manifest\": {\"name\": \"Xiaomi Fan Lovelace Card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Xiaomi Smartmi Fan Lovelace card for HASS/Home Assistant.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"4888dc3548679862cb5d3a11f47a2bb30f5b088e491f1d800a4ea65fd2bba9b6\\\"\", \"full_name\": \"fineemb/lovelace-fan-xiaomi\", \"last_updated\": \"2022-06-06T14:18:26Z\", \"stargazers_count\": 41, \"last_fetched\": 1656859547.60158, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"237887092\": {\"repository_manifest\": {\"name\": \"Climate thermostat card\", \"render_readme\": true, \"filename\": \"main.js\"}, \"category\": \"plugin\", \"description\": \"Thermostat Lovelace card\", \"domain\": \"\", \"etag_repository\": \"W/\\\"b7f833a0d2a69be8a28766d574c2079eb13570d5b8b05bfd73e5dcca9bdc214d\\\"\", \"full_name\": \"fineemb/lovelace-thermostat-card\", \"last_updated\": \"2022-06-02T18:36:47Z\", \"stargazers_count\": 76, \"last_fetched\": 1656859547.770393, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"250552447\": {\"repository_manifest\": {\"name\": \"Binary Control Button Row\", \"filename\": \"binary-control-button-row.js\"}, \"category\": \"plugin\", \"description\": \"Provides a customizable button row for binary entities in Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"471d608ab06766c22940e4ed7d26d89f5276ae1197ab04712cdf48003fc90c13\\\"\", \"full_name\": \"finity69x2/binary-control-button-row\", \"last_updated\": \"2021-06-05T12:09:32Z\", \"stargazers_count\": 17, \"last_fetched\": 1648398739.031688, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"191663150\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"Provides a means to show a compact graphical control row for 2 or 3 speed fans in Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"fd731c85b46458336d8862d4e3786c46c929a457fa8edd06cdd787c0cda24a13\\\"\", \"full_name\": \"finity69x2/fan-control-entity-row\", \"last_updated\": \"2022-02-17T06:58:35Z\", \"stargazers_count\": 61, \"last_fetched\": 1656859550.498348, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"287409957\": {\"repository_manifest\": {\"name\": \"Cover Control Button Row\", \"filename\": \"cover-control-button-row.js\"}, \"category\": \"plugin\", \"description\": \"button row for controlling open/close covers in Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"65c1028268517ce660410e76bbd074d46e8dfd22f5d2fbd16e15448c94210f20\\\"\", \"full_name\": \"finity69x2/cover-control-button-row\", \"last_updated\": \"2021-07-29T21:53:08Z\", \"stargazers_count\": 10, \"topics\": [\"cover\", \"plugin\"], \"last_fetched\": 1641587896.016816, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"286860710\": {\"repository_manifest\": {\"name\": \"Cover Position Preset Row\", \"filename\": \"cover-position-preset-row.js\"}, \"category\": \"plugin\", \"description\": \"pluig-in for Home Assistant that provides an easy means set 3 fixed positions for a programmable cover entity.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"fb2da29c926a84d1dad3b478ede8c5e3a4ee63af24c248f1d6b9b59a2c2e0047\\\"\", \"full_name\": \"finity69x2/cover-position-preset-row\", \"last_updated\": \"2021-07-29T21:44:05Z\", \"stargazers_count\": 12, \"topics\": [\"cover\", \"lovelace-custom-card\", \"plugin\"], \"last_fetched\": 1653230029.325376, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"226862969\": {\"repository_manifest\": {\"name\": \"Light Brightness Preset Row\", \"filename\": \"light-brightness-preset-row.js\"}, \"category\": \"plugin\", \"description\": \"Provides a means to program 3 preset brightness settings for dimmable lights in Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"67194170497a2576e886c5b0525a641cd9164cd2c63846b07f53d28004eaffab\\\"\", \"full_name\": \"finity69x2/light-brightness-preset-row\", \"last_updated\": \"2021-12-13T04:02:13Z\", \"stargazers_count\": 23, \"last_fetched\": 1653230035.675678, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"245239101\": {\"repository_manifest\": {\"name\": \"Lovelace Card Preloader\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Allows preloading of Lovelace cards as a work around for changes in Home Assistant 0.107\", \"domain\": \"\", \"etag_repository\": \"W/\\\"c283b069259438fad8ceaf5e294767c7ea06e9962e33018045fd13b3f6b8debd\\\"\", \"full_name\": \"gadgetchnnel/lovelace-card-preloader\", \"last_updated\": \"2021-04-30T16:48:45Z\", \"stargazers_count\": 19, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"182113743\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"A custom Lovelace text input row for use in entities cards\", \"domain\": \"\", \"etag_repository\": \"W/\\\"2c7322056b0893781a1cb2febbc1aa053cc65a73d5ad1b79b644ea1c674bb5f0\\\"\", \"full_name\": \"gadgetchnnel/lovelace-text-input-row\", \"last_updated\": \"2020-08-18T05:04:31Z\", \"stargazers_count\": 26, \"last_fetched\": 1656859556.285687, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"184333163\": {\"repository_manifest\": {\"name\": \"Lovelace Card Templater\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Custom Lovelace card which allows Jinja2 templates to be applied to other cards\", \"domain\": \"\", \"etag_repository\": \"W/\\\"6a66a7e86f0fd5d6558587856d2fcff5bf787388888a6c80865b90eb00a5842c\\\"\", \"full_name\": \"gadgetchnnel/lovelace-card-templater\", \"last_updated\": \"2022-07-07T17:16:08Z\", \"stargazers_count\": 79, \"last_fetched\": 1657362475.709089, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"250865851\": {\"repository_manifest\": {\"name\": \"Folder Card\", \"render_readme\": true, \"filename\": \"folder-card.js\"}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udcc2 Folder Card for Home Assistant's Lovelace UI\", \"domain\": \"\", \"etag_repository\": \"W/\\\"3f5bc73eb779b56f990c397373bc89a141d4c465fff995ebabdfb0a2c07d755c\\\"\", \"full_name\": \"GeorgeSG/lovelace-folder-card\", \"last_updated\": \"2022-03-26T10:03:45Z\", \"stargazers_count\": 6, \"topics\": [\"lovelace-card\", \"lovelace-custom-card\"], \"last_fetched\": 1648839883.971041, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"174016256\": {\"repository_manifest\": {\"name\": \"Lovelace Home Feed Card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"A custom Lovelace card for displaying a combination of persistent notifications, calendar events, and entities in the style of a feed.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"011e3bb040c18b80f5762d472f741ba81020afd8ec96ec7f60a592bf9250306d\\\"\", \"full_name\": \"gadgetchnnel/lovelace-home-feed-card\", \"last_updated\": \"2022-05-13T04:46:33Z\", \"stargazers_count\": 172, \"last_fetched\": 1656859555.989627, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"261262884\": {\"repository_manifest\": {\"name\": \"Time Picker Card\", \"render_readme\": true, \"filename\": \"time-picker-card.js\"}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udd70\\ufe0f Time Picker Card for Home Assistant's Lovelace UI\", \"domain\": \"\", \"downloads\": 7036, \"etag_repository\": \"W/\\\"4f226de84476c80fad72ea20a7a132d740d4b5091484a07e9797d8a383889b18\\\"\", \"full_name\": \"GeorgeSG/lovelace-time-picker-card\", \"last_updated\": \"2022-06-02T05:24:11Z\", \"stargazers_count\": 153, \"topics\": [\"lovelace-card\", \"lovelace-custom-card\"], \"last_fetched\": 1656859557.740065, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"160042309\": {\"repository_manifest\": {\"name\": \"Power wheel card\"}, \"category\": \"plugin\", \"description\": \"An intuitive way to represent the power and energy that your home is consuming or producing. (A custom card for the Lovelace UI of Home Assistant.)\", \"domain\": \"\", \"etag_repository\": \"W/\\\"8e1dfacb03f1ea26883af660f8c3491a46f31761e9ed588aee85f39f6de8cb52\\\"\", \"full_name\": \"gurbyz/power-wheel-card\", \"last_updated\": \"2022-06-06T07:43:11Z\", \"stargazers_count\": 137, \"topics\": [\"energy\", \"solar-panels\"], \"last_fetched\": 1656859559.175054, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"220679143\": {\"repository_manifest\": {\"name\": \"HASL Departure Card\", \"filename\": \"hasl-departure-card.js\", \"homeassistant\": \"0.92\"}, \"category\": \"plugin\", \"description\": \"Lovelace Departure Card for the HASL Platform\", \"domain\": \"\", \"etag_repository\": \"W/\\\"5bd002adf74579a468e652e8002cb2b9e33af619a0d9d1862e76b733ff5bc1a7\\\"\", \"full_name\": \"hasl-sensor/lovelace-hasl-departure-card\", \"last_updated\": \"2022-01-08T23:27:15Z\", \"stargazers_count\": 6, \"topics\": [\"departures\", \"hasl\", \"sl\", \"stockholms-lokaltrafik\"], \"last_fetched\": 1641895781.615156, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"220679530\": {\"repository_manifest\": {\"name\": \"HASL Traffic Status Card\", \"filename\": \"hasl-traffic-status-card.js\", \"homeassistant\": \"0.92\"}, \"category\": \"plugin\", \"description\": \"Lovelace Traffic Status Card for the HASL Platform\", \"domain\": \"\", \"etag_repository\": \"W/\\\"287db3f3718be02514d2e7959c933de3d9fc18910396cf456ae5591824beed85\\\"\", \"full_name\": \"hasl-sensor/lovelace-hasl-traffic-status-card\", \"last_updated\": \"2020-03-04T12:20:16Z\", \"stargazers_count\": 4, \"topics\": [\"hasl\", \"sl\", \"stockholms-lokaltrafik\", \"traffic-status\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"304967918\": {\"repository_manifest\": {\"name\": \"Number Box\", \"filename\": \"numberbox-card.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Replace input_number sliders with plus and minus buttons\", \"domain\": \"\", \"etag_repository\": \"W/\\\"7cba4d592fa81b11670aac3f067d5097021cce1b134f28a11ed8b978029a3af2\\\"\", \"full_name\": \"htmltiger/numberbox-card\", \"last_updated\": \"2022-07-05T18:11:33Z\", \"stargazers_count\": 57, \"topics\": [\"input\", \"lovelace-card\", \"lovelace-cards\", \"lovelace-custom-card\", \"number\", \"numberbox-card\", \"slider\"], \"last_fetched\": 1657362481.84714, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"172177543\": {\"repository_manifest\": {\"name\": \"Config Template Card\", \"render_readme\": true, \"homeassistant\": \"0.110.0\"}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udcdd Templatable Lovelace Configurations\", \"domain\": \"\", \"downloads\": 13077, \"etag_repository\": \"W/\\\"59d054eabd301487aabc118ab8d78ce050fff6f99f8cca67f5f1f7ae36f6448a\\\"\", \"full_name\": \"iantrich/config-template-card\", \"last_updated\": \"2022-05-30T10:01:49Z\", \"stargazers_count\": 256, \"last_fetched\": 1657362484.205184, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"175927964\": {\"repository_manifest\": {\"name\": \"Podcast Card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"\\ud83c\\udfa7 Podcast Player Card\", \"domain\": \"\", \"etag_repository\": \"W/\\\"739ace3027accc781d0077f47d0c969e3e03811aa25d983a9c85998ef77dc859\\\"\", \"full_name\": \"iantrich/podcast-card\", \"last_updated\": \"2021-08-11T16:06:20Z\", \"stargazers_count\": 21, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"215633404\": {\"repository_manifest\": {\"name\": \"Restriction Card\", \"render_readme\": true, \"homeassistant\": \"0.110.0\"}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udd12 Apply restrictions to Lovelace cards\", \"domain\": \"\", \"downloads\": 4293, \"etag_repository\": \"W/\\\"5a12ae438c3f3cd90c6c345c78565da74c50dd08b3a030ec61458e498e4a8954\\\"\", \"full_name\": \"iantrich/restriction-card\", \"last_updated\": \"2022-06-13T04:11:58Z\", \"stargazers_count\": 152, \"topics\": [\"security\"], \"last_fetched\": 1657362485.722019, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"164367214\": {\"repository_manifest\": {\"name\": \"Roku Card\", \"render_readme\": true, \"homeassistant\": \"0.110.0\"}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udcfa Roku Remote Card\", \"domain\": \"\", \"downloads\": 3790, \"etag_repository\": \"W/\\\"b3461e71cb4d1de5066bb3023e5322498e8c1cdecdc17e36a932e30eef0c361b\\\"\", \"full_name\": \"iantrich/roku-card\", \"last_updated\": \"2022-05-30T09:57:43Z\", \"stargazers_count\": 88, \"topics\": [\"roku\"], \"last_fetched\": 1656859565.542807, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"179788256\": {\"repository_manifest\": {\"name\": \"Text Divider Row\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"\\ud83d\\uddc2 Text Divider Row\", \"domain\": \"\", \"downloads\": 4550, \"etag_repository\": \"W/\\\"da9578b7abf6ff22f0b46b1f2d92803c24b97935dde7bbc0a340b5f67ce77148\\\"\", \"full_name\": \"iantrich/text-divider-row\", \"last_updated\": \"2022-05-30T09:56:37Z\", \"stargazers_count\": 60, \"last_fetched\": 1656859565.488835, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"181124811\": {\"repository_manifest\": {\"name\": \"Radial Menu Element\", \"render_readme\": true, \"homeassistant\": \"0.110.0\"}, \"category\": \"plugin\", \"description\": \"\\u2b55 Radial Menu Element\", \"domain\": \"\", \"downloads\": 2118, \"etag_repository\": \"W/\\\"1c948c5ac3feb2d9cce7277e9b8d97d2ad6d02928eb9ab1633d022974e184919\\\"\", \"full_name\": \"iantrich/radial-menu\", \"last_updated\": \"2022-03-13T20:58:45Z\", \"stargazers_count\": 58, \"last_fetched\": 1656859564.012878, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"194824532\": {\"repository_manifest\": {\"name\": \"M\\u00e9t\\u00e9o France Weather Card\", \"country\": \"FR\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Weather Card with animated icons for Home Assistant Lovelace adapted to display all informations from M\\u00e9t\\u00e9o France integration\", \"domain\": \"\", \"etag_repository\": \"W/\\\"1a157c1e505ded7929f031bef0eccb8cb0cb1c2c332a6cabb2b9006cc2ee521c\\\"\", \"full_name\": \"Imbuzi/meteo-france-weather-card\", \"last_updated\": \"2022-06-01T07:43:18Z\", \"stargazers_count\": 22, \"topics\": [\"animated-icons\", \"lovelace-card\", \"meteo-france\", \"weather\"], \"last_fetched\": 1656859568.667663, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"273405252\": {\"repository_manifest\": {\"name\": \"Lightning Detector Card\", \"filename\": \"lightning-detector-card.js\"}, \"category\": \"plugin\", \"description\": \"A Lightning Detection Display Card for Home Assistant Lovelace\", \"domain\": \"\", \"downloads\": 1469, \"etag_repository\": \"W/\\\"1e6f642d2a9dbdd0da0193e3ec93e0ba09db9907bca1b7ba3c489f9c283ec732\\\"\", \"full_name\": \"ironsheep/lovelace-lightning-detector-card\", \"last_updated\": \"2022-02-13T15:16:12Z\", \"stargazers_count\": 16, \"topics\": [\"as3935\", \"lovelace-card\", \"lovelace-custom-card\"], \"last_fetched\": 1653230052.211235, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"231015759\": {\"repository_manifest\": {\"name\": \"Xiaomi Smartmi Fan Card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Xiaomi Smartmi Fan Lovelace card with CSS fan animation\", \"domain\": \"\", \"etag_repository\": \"W/\\\"5f1a7d978abf9f3d2a4d3496e80ee2f48b3121148bbc48689900a9e280f0b07b\\\"\", \"full_name\": \"ikaruswill/lovelace-fan-xiaomi\", \"last_updated\": \"2022-06-30T08:51:38Z\", \"stargazers_count\": 53, \"topics\": [\"xiaomi\", \"xiaomi-fan\"], \"last_fetched\": 1657362487.102522, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"281214271\": {\"repository_manifest\": {\"name\": \"RPi Monitor Card\", \"filename\": \"rpi-monitor-card.js\"}, \"category\": \"plugin\", \"description\": \"A Raspberry Pi status display Card for Home Assistant Lovelace\", \"domain\": \"\", \"downloads\": 14706, \"etag_repository\": \"W/\\\"1d399796907c01ee602a90bed7d1c18051802a33831e63e7aa81dd26e79d6df1\\\"\", \"full_name\": \"ironsheep/lovelace-rpi-monitor-card\", \"last_updated\": \"2022-05-22T12:08:22Z\", \"stargazers_count\": 86, \"topics\": [\"lovelace-card\", \"lovelace-custom-card\", \"raspberry-pi\"], \"last_fetched\": 1657362490.322521, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"164887047\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"A Lovelace custom card for custom component Krisinformation is Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"0de41a7104dc59fcc5940a7c5eface92b319f0eedd907b7927800a115485a484\\\"\", \"full_name\": \"isabellaalstrom/krisinfo-card\", \"last_updated\": \"2020-09-18T17:45:35Z\", \"stargazers_count\": 7, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"195671060\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"A card to track chores and tasks in Grocy.\", \"etag_repository\": \"W/\\\"e560ac5db477b3bb804179aab58f142f478e110400be7ec4a408e21e667a2d28\\\"\", \"full_name\": \"isabellaalstrom/lovelace-grocy-chores-card\", \"last_updated\": \"2022-06-09T09:08:39Z\", \"stargazers_count\": 76, \"last_fetched\": 1656859570.086982, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"237812136\": {\"repository_manifest\": {\"name\": \"Yandex Icons\", \"filename\": \"yandex-icons.js\", \"render_readme\": true, \"country\": [\"RU\"], \"homeassistant\": \"0.110.0\"}, \"category\": \"plugin\", \"description\": \"\\u0418\\u043a\\u043e\\u043d\\u043a\\u0438 \\u042f\\u043d\\u0434\\u0435\\u043a\\u0441 \\u0443\\u0441\\u0442\\u0440\\u043e\\u0439\\u0441\\u0442\\u0432 \\u0434\\u043b\\u044f Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"5a713bb8c7f5c547636a78c5a4a510d180fb5b94a2f886d774c1e6ce6a7274ca\\\"\", \"full_name\": \"iswitch/ha-yandex-icons\", \"last_updated\": \"2022-06-10T22:05:51Z\", \"stargazers_count\": 48, \"topics\": [\"icon-pack\", \"icons\", \"media-player\", \"yandex\"], \"last_fetched\": 1656859571.395871, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"245159052\": {\"repository_manifest\": {\"name\": \"Canary\"}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udc24 Adds many useful extensions to lovelace, such as templating secondary info, stacking within a card and more!\", \"domain\": \"\", \"downloads\": 2833, \"etag_repository\": \"W/\\\"7de391b82282938becd7b213e9980563a2978566ef5d7592478d4cd83f1a5931\\\"\", \"full_name\": \"jcwillox/lovelace-canary\", \"last_updated\": \"2022-05-26T02:31:39Z\", \"stargazers_count\": 33, \"topics\": [\"canary-card\", \"extensions\"], \"last_fetched\": 1656859573.852484, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"244872232\": {\"repository_manifest\": {\"name\": \"Paper Buttons Row\"}, \"category\": \"plugin\", \"description\": \"Adds highly configurable buttons that use actions and per-state styling.\", \"downloads\": 5728, \"etag_repository\": \"W/\\\"9f0c3f03aa15733733ed9f902e0023e138daa9b59c35b594b6b3ea87643527a2\\\"\", \"full_name\": \"jcwillox/lovelace-paper-buttons-row\", \"last_updated\": \"2022-05-28T08:29:47Z\", \"stargazers_count\": 143, \"topics\": [\"actions\", \"buttons\", \"haptic\", \"paper\"], \"last_fetched\": 1657362493.330191, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"283578257\": {\"repository_manifest\": {\"name\": \"power-distribution-card\", \"render_readme\": true, \"filename\": \"power-distribution-card.js\"}, \"category\": \"plugin\", \"description\": \"A Lovelace Card for visualizing power distributions.\", \"domain\": \"\", \"downloads\": 1549, \"etag_repository\": \"W/\\\"5470771811f06fd27fac94a03f1526cc17627718b43976c0d5bbc6e9572d1fdf\\\"\", \"full_name\": \"JonahKr/power-distribution-card\", \"last_updated\": \"2022-05-01T12:37:38Z\", \"stargazers_count\": 109, \"topics\": [\"e3dc\", \"lovelace-card\"], \"last_fetched\": 1653230058.793873, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"238802974\": {\"repository_manifest\": {\"name\": \"Roomba Vacuum Card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"HA Lovelace Card for iRobot Roomba Vacuum Cleaner leveraging the rest980 Docker Image\", \"domain\": \"\", \"etag_repository\": \"W/\\\"fbefbba49a97781a819faad240037116b95ca50b2affbb27ddd484517dcf5b7f\\\"\", \"full_name\": \"jeremywillans/lovelace-roomba-vacuum-card\", \"last_updated\": \"2021-07-28T12:33:28Z\", \"stargazers_count\": 30, \"topics\": [\"irobot\", \"irobot-roomba\", \"lovelace-custom-card\", \"vacuum\"], \"last_fetched\": 1653230057.170573, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"163446489\": {\"repository_manifest\": {\"name\": \"Entur Card\", \"render_readme\": true, \"filename\": \"entur-card.js\"}, \"category\": \"plugin\", \"description\": \"Home Assistant Lovelace card card for the Entur public transport component.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"90c6cb08e1a60bf79a07d98fc7b0c4f46b79b8e5e498e6425c6e1911862dc415\\\"\", \"full_name\": \"jonkristian/entur-card\", \"last_updated\": \"2022-01-27T09:42:11Z\", \"stargazers_count\": 38, \"topics\": [\"entur\", \"transportation\"], \"last_fetched\": 1653230058.320191, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"148520838\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"Minimalistic media card for Home Assistant Lovelace UI\", \"domain\": \"\", \"downloads\": 27757, \"etag_repository\": \"W/\\\"5cc353c5fc2a4410c478dcc22ef1c2abee1def373320ec1c63e6f22c5371b5b7\\\"\", \"full_name\": \"kalkih/mini-media-player\", \"last_updated\": \"2022-06-09T19:11:16Z\", \"stargazers_count\": 1120, \"topics\": [\"automation\", \"custom\", \"media-player\", \"sonos\"], \"last_fetched\": 1657362498.435051, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"172998062\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"Minimalistic weather card for Home Assistant\", \"domain\": \"\", \"downloads\": 7729, \"etag_repository\": \"W/\\\"2b5ab376b5954d8ee2a9512db6f1eda6560d62662caac2eeee6ac0686f1e593f\\\"\", \"full_name\": \"kalkih/simple-weather-card\", \"last_updated\": \"2022-05-27T21:10:15Z\", \"stargazers_count\": 191, \"topics\": [\"weather\"], \"last_fetched\": 1656859580.891677, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"292008305\": {\"repository_manifest\": {\"name\": \"Steam Card\", \"render_readme\": true, \"filename\": \"kb-steam-card.js\"}, \"category\": \"plugin\", \"description\": \"A Home Assistant card for Steam integrations\", \"domain\": \"\", \"etag_repository\": \"W/\\\"b8d98b7476d8f7bb0aa59f577e172e6e35102d59295642f3522ac35be00427ff\\\"\", \"full_name\": \"Kibibit/kb-steam-card\", \"last_updated\": \"2022-06-19T17:39:49Z\", \"stargazers_count\": 21, \"topics\": [\"card\", \"steam\"], \"last_fetched\": 1656859582.920476, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"276636213\": {\"repository_manifest\": {\"name\": \"Vertical Slider Cover Card\", \"render_readme\": true, \"filename\": \"vertical-slider-cover-card.js\"}, \"category\": \"plugin\", \"description\": \"Cover card with homekit style vertical position slider (best with panel-mode but normal-mode works also)\", \"domain\": \"\", \"downloads\": 2387, \"etag_repository\": \"W/\\\"2912b9898079db6fea8d4b4db5a9f2b6a8e7b08090eac36b948bd6827f7c5891\\\"\", \"full_name\": \"konnectedvn/lovelace-vertical-slider-cover-card\", \"last_updated\": \"2022-02-01T04:11:22Z\", \"stargazers_count\": 42, \"topics\": [\"card\"], \"last_fetched\": 1653230065.809879, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"290281267\": {\"repository_manifest\": {\"name\": \"Fullscreen Card\", \"render_readme\": \"true\"}, \"category\": \"plugin\", \"description\": \"Make your Home Assistant browser fullscreen with one tap.\", \"domain\": \"\", \"downloads\": 1510, \"etag_repository\": \"W/\\\"9258de1c11f9311989b4c52904ef19490741c0d6840dd6005e8453e2bede6d32\\\"\", \"full_name\": \"KTibow/fullscreen-card\", \"last_updated\": \"2021-12-30T17:18:35Z\", \"stargazers_count\": 22, \"topics\": [\"card\", \"fullscreen\", \"hacktoberfest2020\"], \"last_fetched\": 1653230065.987846, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"168570875\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"fitbit-card for lovelace\", \"domain\": \"\", \"downloads\": 1853, \"etag_repository\": \"W/\\\"32a4dbea00b7b1b40fdce1addcb8185c2954c101fcda53e2c05a23028627543f\\\"\", \"full_name\": \"ljmerza/fitbit-card\", \"last_updated\": \"2020-07-10T20:55:32Z\", \"stargazers_count\": 23, \"last_fetched\": 1653230066.528433, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"169783299\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"Track your repo issues, starts, forks, and pull requests\", \"domain\": \"\", \"etag_repository\": \"W/\\\"e1a5335ca7eed3790109eb28e787d7d882ba160a9057b06d2fd0d444f42606df\\\"\", \"full_name\": \"ljmerza/github-card\", \"last_updated\": \"2020-01-13T23:55:00Z\", \"stargazers_count\": 10, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"197960232\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"our groceries lovelace card\", \"domain\": \"\", \"etag_repository\": \"W/\\\"a3444f7bc42e39bcd064d8f867c0fc77ce4a331b38764e7b5ea3d26b405fcc8c\\\"\", \"full_name\": \"ljmerza/our-groceries-card\", \"last_updated\": \"2022-06-02T03:51:23Z\", \"stargazers_count\": 24, \"last_fetched\": 1656859586.857279, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"168744428\": {\"repository_manifest\": {\"name\": \"Light Entity Card\", \"render_readme\": true, \"filename\": \"dist/light-entity-card.js\"}, \"category\": \"plugin\", \"description\": \"Control any light or switch entity\", \"domain\": \"\", \"downloads\": 14267, \"etag_repository\": \"W/\\\"4214edd19901221cb08cd8401e2a90ea9a9ccb12e4d003b2143be08796c286c6\\\"\", \"full_name\": \"ljmerza/light-entity-card\", \"last_updated\": \"2022-06-02T03:50:05Z\", \"stargazers_count\": 155, \"last_fetched\": 1656859586.594461, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"175727366\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"Reddit Card for Home Assistant\", \"domain\": \"\", \"downloads\": 626, \"etag_repository\": \"W/\\\"aa970150a96b7a6df006e567a7836df67e49428ee3e20559251f8ff9dae786fe\\\"\", \"full_name\": \"ljmerza/reddit-card\", \"last_updated\": \"2022-06-12T05:25:31Z\", \"stargazers_count\": 9, \"last_fetched\": 1656859587.023884, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"183499944\": {\"repository_manifest\": {\"name\": \"Tracking Number Card\", \"render_readme\": true, \"filename\": \"dist/tracking-number-card.js\"}, \"category\": \"plugin\", \"description\": \"Show Tracking Numbers from the Email Sensor for Home Assistant\", \"domain\": \"\", \"downloads\": 634, \"etag_repository\": \"W/\\\"60c5906a2f93b9514f934fc366db3e53ba485b3ab2b41e5661e11ad8d33dd6d4\\\"\", \"full_name\": \"ljmerza/tracking-number-card\", \"last_updated\": \"2021-01-11T23:15:17Z\", \"stargazers_count\": 17, \"last_fetched\": 1653230069.733793, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"236945951\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"Graph of Buienradars rain forecast \", \"domain\": \"\", \"downloads\": 2746, \"etag_repository\": \"W/\\\"a66c0ec9508e48b3212df39b205d62f0d7b1089fe16b735c4f1eabd6c129d2e3\\\"\", \"full_name\": \"lukevink/lovelace-buien-rain-card\", \"last_updated\": \"2020-05-01T14:26:54Z\", \"stargazers_count\": 39, \"topics\": [\"buienradar\", \"chartjs\", \"forecast\", \"graph\"], \"last_fetched\": 1653824469.851552, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"180464361\": {\"repository_manifest\": {\"name\": \"Travel Time Card\", \"render_readme\": true, \"filename\": \"dist/travel-time-card.js\"}, \"category\": \"plugin\", \"description\": \"show travel times for you travel time sensors\", \"domain\": \"\", \"downloads\": 2679, \"etag_repository\": \"W/\\\"c25d4de959ddf75b5b07e507d63bd35e61cdd9beaed6b6da1ef1d71a1d323ebc\\\"\", \"full_name\": \"ljmerza/travel-time-card\", \"last_updated\": \"2022-03-08T02:38:06Z\", \"stargazers_count\": 20, \"last_fetched\": 1649613566.861979, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"257005990\": {\"repository_manifest\": {\"name\": \"LG WebOS Remote Control\", \"content_in_root\": true, \"filename\": \"lg-remote-control.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Remote Control for LG TV WebOS\", \"etag_repository\": \"W/\\\"cf1e58cad82d57fb6052aa78d061f7416021e9986a3943a661a788d65ea7a374\\\"\", \"full_name\": \"madmicio/LG-WebOS-Remote-Control\", \"last_updated\": \"2022-06-13T04:11:10Z\", \"stargazers_count\": 225, \"last_fetched\": 1657362508.825131, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"257123327\": {\"repository_manifest\": {\"name\": \"LG WebOS channel pad\", \"filename\": \"card-channel-pad.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"channel pad for LG TV Remote control\", \"domain\": \"\", \"etag_repository\": \"W/\\\"f22154e8f6b7cf5334635916847e0e727a8ce68efa3996e20bfc2eeb37172442\\\"\", \"full_name\": \"madmicio/channel-pad\", \"last_updated\": \"2020-05-28T19:17:53Z\", \"stargazers_count\": 12, \"topics\": [\"channel-pad\", \"lg\", \"tv-remote\"], \"last_fetched\": 1656859594.371814, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"187501032\": {\"repository_manifest\": {\"name\": \"FireTV Remote Card\", \"content_in_root\": true}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udcfa FireTV Remote Card\", \"domain\": \"\", \"etag_repository\": \"W/\\\"63d35c28cc5d7e59c1f05a692f31d4e24433b975b96dcc232c8fb479f0cfc7ca\\\"\", \"full_name\": \"marrobHD/firetv-card\", \"last_updated\": \"2022-05-25T19:36:40Z\", \"stargazers_count\": 23, \"topics\": [\"firetv-card\", \"lovelace-card\", \"lovelace-firetv\"], \"last_fetched\": 1656859594.52102, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"188572845\": {\"repository_manifest\": {\"name\": \"Rotel Remote Card\", \"content_in_root\": true}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udd0a Rotel Remote Card\", \"domain\": \"\", \"etag_repository\": \"W/\\\"3d13b38b008a0d97c35e0a943776c6bceff293316b9399d64447e08971badcb8\\\"\", \"full_name\": \"marrobHD/rotel-card\", \"last_updated\": \"2022-05-25T19:39:13Z\", \"stargazers_count\": 5, \"topics\": [\"home-assistant-rotel-card\", \"lovelace-card\"], \"last_fetched\": 1656859599.647775, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"187339794\": {\"repository_manifest\": {\"name\": \"TV Remote Card\", \"content_in_root\": true}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udcfa TV Remote Card\", \"domain\": \"\", \"etag_repository\": \"W/\\\"c08fc381856917136245f781afd99bfd9a9b8b69a3283eca15d3af36b844f5fc\\\"\", \"full_name\": \"marrobHD/tv-card\", \"last_updated\": \"2022-05-25T19:36:26Z\", \"stargazers_count\": 98, \"topics\": [\"homeassistant-tv-card\", \"lovelace-card\", \"tv-card\"], \"last_fetched\": 1657362514.995283, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"275672933\": {\"repository_manifest\": {\"name\": \"Select list Card\", \"render_readme\": true, \"filename\": \"select-list-card.js\"}, \"category\": \"plugin\", \"description\": \"Select List Card displays an input_select entity as a list in lovelace\", \"domain\": \"\", \"downloads\": 5961, \"etag_repository\": \"W/\\\"ac0ee2565474026525a85e02dd97fb12d984345435fa6f99e6d1e5425e835358\\\"\", \"full_name\": \"mattieha/select-list-card\", \"last_updated\": \"2022-03-27T02:17:45Z\", \"stargazers_count\": 49, \"topics\": [\"lovelace-custom-card\"], \"last_fetched\": 1656859600.578711, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"256292682\": {\"repository_manifest\": {\"name\": \"Battery State Card / Entity Row\", \"filename\": \"battery-state-card.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Battery state card for Home Assistant\", \"downloads\": 14199, \"etag_repository\": \"W/\\\"abbc35f40fd286330c3df73f24857bb29ca3a2aed2bc96ea82bf29baf06c9194\\\"\", \"full_name\": \"maxwroc/battery-state-card\", \"last_updated\": \"2022-07-08T15:16:20Z\", \"stargazers_count\": 423, \"topics\": [\"battery\", \"lovelace-custom-card\"], \"last_fetched\": 1657362516.871802, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"302895020\": {\"repository_manifest\": {\"name\": \"Github Flexi Card / Entity Row\", \"filename\": \"github-flexi-card.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Github stats card for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"8e39e91035209af1f48ec2b4a932ec5dffb2736858ee59846f773c8e607ca2d3\\\"\", \"full_name\": \"maxwroc/github-flexi-card\", \"last_updated\": \"2022-02-08T20:54:42Z\", \"stargazers_count\": 21, \"topics\": [\"card\", \"flexi\", \"github\", \"github-flexi-card\"], \"last_fetched\": 1646496658.265754, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"204049047\": {\"repository_manifest\": {\"name\": \"OpenMensa Lovelace Card\", \"content_in_root\": true}, \"category\": \"plugin\", \"description\": \"A Home-Assistant Lovelace card which displays information from the openmensa-sensor.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"2b39f540a53a8a1f5e9e0a4d3a9832079a2fea98c8d3475cf72719639d2f965c\\\"\", \"full_name\": \"Mofeywalker/openmensa-lovelace-card\", \"last_updated\": \"2019-08-23T19:16:54Z\", \"stargazers_count\": 1, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"158654878\": {\"repository_manifest\": {\"name\": \"Simple Thermostat\", \"homeassistant\": \"0.84.0\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"A different take on the thermostat card for Home Assistant \\u2668\\ufe0f\", \"downloads\": 26793, \"etag_repository\": \"W/\\\"6bde70aa4a75741e7a80b1d431118adeef86e9fe4f59c9a4c816858cf20981bd\\\"\", \"full_name\": \"nervetattoo/simple-thermostat\", \"last_updated\": \"2022-06-27T19:38:34Z\", \"stargazers_count\": 541, \"topics\": [\"polymer-3\"], \"last_fetched\": 1657362522.476748, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"286270157\": {\"repository_manifest\": {\"name\": \"Scheduler Card\", \"render_readme\": true, \"filename\": \"scheduler-card.js\"}, \"category\": \"plugin\", \"description\": \"HA Lovelace card for control of scheduler entities\", \"domain\": \"\", \"downloads\": 6334, \"etag_repository\": \"W/\\\"23ae043c7654da8b2c56cec998131428286b03e540585daf8acc8b80dae7557e\\\"\", \"full_name\": \"nielsfaber/scheduler-card\", \"last_updated\": \"2022-06-21T04:26:14Z\", \"stargazers_count\": 422, \"topics\": [\"assistant\", \"automation\", \"card\", \"home\", \"schedule\", \"scheduler\", \"sunrise\", \"sunset\", \"week\", \"weekly\"], \"last_fetched\": 1657362523.618958, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"238414582\": {\"repository_manifest\": {\"name\": \"Custom Card for Warsaw ZTM Information\", \"country\": [\"PL\"], \"homeassistant\": \"0.100.0\"}, \"category\": \"plugin\", \"description\": \"Custom Lovelace card for Warsaw public transport\", \"domain\": \"\", \"etag_repository\": \"W/\\\"12196cc892fbee362e1c3d34eebf2f745208e252986515c88ddf9ec306d9b85c\\\"\", \"full_name\": \"peetereczek/ztm-stop-card\", \"last_updated\": \"2020-12-20T14:51:31Z\", \"stargazers_count\": 3, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"236127727\": {\"repository_manifest\": {\"name\": \"Camect Camera Card\", \"filename\": \"HACS-camect-custom_card.js\"}, \"category\": \"plugin\", \"description\": \"A custom card which exposes Camect video streams via the Home Assistant Lovelace interface.  To use this card, you MUST have already installed the Camect HACS integration.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"9b91001c59538ed89fcdc90272feba976dd1aa3e4b20738379b596ee6572702b\\\"\", \"full_name\": \"pfunkmallone/HACS-camect-custom_card\", \"last_updated\": \"2020-05-15T18:42:57Z\", \"stargazers_count\": 5, \"topics\": [\"camect\"], \"last_fetched\": 1653230086.032187, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"205261230\": {\"repository_manifest\": {\"name\": \"HTML Jinja2 Template card\", \"filename\": \"html-template-card.js\"}, \"category\": \"plugin\", \"description\": \"This card displays provided Jinja2 template as an HTML content of a card. It uses exactly the same engine as Home Assistant in Developer tools.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"04ca7517c4dea1737801fabf43040ec4f38b5a883b20b68083c98182c688196e\\\"\", \"full_name\": \"PiotrMachowski/Home-Assistant-Lovelace-HTML-Jinja2-Template-card\", \"last_updated\": \"2022-05-17T17:19:02Z\", \"stargazers_count\": 32, \"topics\": [\"jinja2\", \"lovelace-card\", \"template\"], \"last_fetched\": 1656859611.988712, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"218178802\": {\"repository_manifest\": {\"name\": \"Local Conditional card\", \"filename\": \"local-conditional-card.js\"}, \"category\": \"plugin\", \"description\": \"This card can show and hide a specific card on current device while not affecting other windows. It does not require any integration to run.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"1e9f511052fc6c0a1b4b154b9f952314f6b37381c342870d97ec44a84ab88c6e\\\"\", \"full_name\": \"PiotrMachowski/Home-Assistant-Lovelace-Local-Conditional-card\", \"last_updated\": \"2022-05-14T06:26:17Z\", \"stargazers_count\": 34, \"topics\": [\"lovelace-card\"], \"last_fetched\": 1653733134.685992, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"199546187\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"This is a companion card for Google Keep sensor. It displays notes downloaded by integration in a friendly way, similar to Google Keep app.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"a4f40f6e81c465c612aec63edfefa60cde86a0d8b7ac50c8b6bbd7858580f5ae\\\"\", \"full_name\": \"PiotrMachowski/lovelace-google-keep-card\", \"last_updated\": \"2022-05-14T06:28:53Z\", \"stargazers_count\": 40, \"topics\": [\"lovelace-card\"], \"last_fetched\": 1653733134.738745, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"193372044\": {\"repository_manifest\": {\"name\": \"Xiaomi Vacuum Map Card\", \"render_readme\": true, \"filename\": \"xiaomi-vacuum-map-card.js\"}, \"category\": \"plugin\", \"description\": \"This card provides a user-friendly way to fully control Xiaomi (Roborock/Viomi/Dreame/Roidmi) and Neato (+ possibly other) vacuums in Home Assistant.\", \"downloads\": 12344, \"etag_repository\": \"W/\\\"235ee7319d52375b4838d326ef43960630c190ee3e81da2095110a6f0770770c\\\"\", \"full_name\": \"PiotrMachowski/lovelace-xiaomi-vacuum-map-card\", \"last_updated\": \"2022-06-30T01:32:35Z\", \"stargazers_count\": 861, \"topics\": [\"lovelace-card\", \"neato\", \"roborock\", \"vacuum\", \"xiaomi\", \"xiaomi-vacuum\"], \"last_fetched\": 1657362529.967636, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"193408399\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"This card displays provided data as an HTML content of a card.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"c2c2670cf6088ee9a77fa16e7915ce2c2e492022806a1d5d444ba94e1ceda87c\\\"\", \"full_name\": \"PiotrMachowski/lovelace-html-card\", \"last_updated\": \"2022-03-05T09:24:42Z\", \"stargazers_count\": 24, \"topics\": [\"lovelace-card\"], \"last_fetched\": 1649613586.615284, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"197759180\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"Quickly search for entities from a Lovelace card.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"4e1400ffb20c968ceb71962c296532bd89ab4e4b6738b24c9de23cbb69b86468\\\"\", \"full_name\": \"postlund/search-card\", \"last_updated\": \"2022-04-22T12:59:24Z\", \"stargazers_count\": 85, \"last_fetched\": 1653230093.939632, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"186765704\": {\"repository_manifest\": {\"homeassistant\": \"0.100.0\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"A fluffy banner card for Home Assistant \\ud83e\\udd70\", \"domain\": \"\", \"downloads\": 19814, \"etag_repository\": \"W/\\\"4da0edf0a40ebd4361b1597e053d3b40912d15306b11da2331d205c71714ac10\\\"\", \"full_name\": \"nervetattoo/banner-card\", \"last_updated\": \"2022-06-25T00:19:56Z\", \"stargazers_count\": 465, \"last_fetched\": 1657362521.39791, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"142051833\": {\"repository_manifest\": {\"name\": \"Vertical Stack In Card\", \"render_readme\": true, \"filename\": \"vertical-stack-in-card.js\"}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udcd0 Home Assistant Card: Similar to vertical/horizontal-stack, but removes card borders\", \"domain\": \"\", \"etag_repository\": \"W/\\\"b8214de78b0cbda766f3cc5866aa77c93f449dd2590849da0bbadf0818abb661\\\"\", \"full_name\": \"ofekashery/vertical-stack-in-card\", \"last_updated\": \"2022-07-02T14:42:31Z\", \"stargazers_count\": 664, \"last_fetched\": 1656859607.169533, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"260940136\": {\"repository_manifest\": {\"name\": \"HA (Lovelace) Card Weather Conditions\", \"filename\": \"ha-card-weather-conditions.js\"}, \"category\": \"plugin\", \"description\": \"Weather condition card (Lovelace) for Home Assistant.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"8639e564d01e123b96f735280d0821d79c04dcb14d4270d5ecf8ac008f2e9c84\\\"\", \"full_name\": \"r-renato/ha-card-weather-conditions\", \"last_updated\": \"2022-06-01T18:00:57Z\", \"stargazers_count\": 113, \"topics\": [\"card\", \"weather-conditions\"], \"last_fetched\": 1657362533.831532, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"215037975\": {\"repository_manifest\": {\"name\": \"HA (Lovelace) Card Waze Travel Time\"}, \"category\": \"plugin\", \"description\": \"Home Assistant Lovelace card for Waze Travel Time Sensor\", \"domain\": \"\", \"etag_repository\": \"W/\\\"4c6be89e844cbdc8905c8a45f23d5d03bec095b616cb11bd9e4f6ce625af7ba6\\\"\", \"full_name\": \"r-renato/ha-card-waze-travel-time\", \"last_updated\": \"2020-05-15T12:43:51Z\", \"stargazers_count\": 30, \"topics\": [\"lovelace-card\"], \"last_fetched\": 1653230099.20781, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"289188530\": {\"repository_manifest\": {\"name\": \"Tesla style solar power card\", \"content_in_root\": true, \"filename\": \"tesla-style-solar-power-card.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Home assistant power card mimicking the one tesla provides for the powerwall app.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"d25657b0e01912f5fe794933b6e0fdac5b550bfd1fe0889dd72534fe06d856c0\\\"\", \"full_name\": \"reptilex/tesla-style-solar-power-card\", \"last_updated\": \"2022-04-24T11:05:23Z\", \"stargazers_count\": 123, \"topics\": [\"battery\", \"card\", \"eletric-car\", \"power\", \"solar-energy\"], \"last_fetched\": 1656859618.733913, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"197715418\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"A Home Assistant Lovelace card to report MiFlora plant sensors based on the HA Plant Card.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"616fc69f3661a62ff3acd7684ba72f085db5ea0acdee95250d5cde5381242566\\\"\", \"full_name\": \"RodBr/miflora-card\", \"last_updated\": \"2022-07-07T21:54:18Z\", \"stargazers_count\": 16, \"last_fetched\": 1657362537.55651, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"216008446\": {\"repository_manifest\": {\"name\": \"Logbook Card\", \"filename\": \"logbook-card.js\"}, \"category\": \"plugin\", \"description\": \"Logbook card for Home Assistant UI Lovelace\", \"domain\": \"\", \"downloads\": 3256, \"etag_repository\": \"W/\\\"2b97e09f710ed586fb7d113e19c44914be7e80481c4cfa8f6271db4bb02f7741\\\"\", \"full_name\": \"royto/logbook-card\", \"last_updated\": \"2022-06-05T12:48:55Z\", \"stargazers_count\": 78, \"last_fetched\": 1657362538.775305, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"279157206\": {\"repository_manifest\": {\"name\": \"Water Heater Card\", \"render_readme\": true, \"homeassistant\": \"0.81.0\", \"filename\": \"water-heater-card.js\"}, \"category\": \"plugin\", \"description\": \"Water Heater card for Home Assistant's Lovelace UI\", \"domain\": \"\", \"etag_repository\": \"W/\\\"a1ce4936654fba54e0a66e8c9d0fccad081b8f29e716367254dfc91120b2202e\\\"\", \"full_name\": \"rsnodgrass/water-heater-card\", \"last_updated\": \"2021-05-10T22:20:50Z\", \"stargazers_count\": 2, \"last_fetched\": 1648398812.464127, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"241706284\": {\"repository_manifest\": {\"name\": \"Button Text Card\", \"render_readme\": true, \"filename\": \"button-text-card.js\"}, \"category\": \"plugin\", \"description\": \"Custom, \\\"neumorphism\\\" Lovelace card\", \"domain\": \"\", \"downloads\": 3101, \"etag_repository\": \"W/\\\"9329499d636da33cdd1d683ef7924cd612aa316509887d05882f0b098af8c5fb\\\"\", \"full_name\": \"Savjee/button-text-card\", \"last_updated\": \"2022-06-21T07:47:51Z\", \"stargazers_count\": 96, \"topics\": [\"lovelace-card\", \"templating\", \"typescript\"], \"last_fetched\": 1657362539.512632, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"237532750\": {\"repository_manifest\": {\"name\": \"Harmony Card\", \"render_readme\": true, \"filename\": \"harmony-card.js\"}, \"category\": \"plugin\", \"description\": \"A Home Assistant Lovelace Care for Harmony Integration\", \"downloads\": 3387, \"etag_repository\": \"W/\\\"9abb524b9a9bc733c7e828b660deff93a8885f0e39a64c6f8c2e1398190bf005\\\"\", \"full_name\": \"sbryfcz/harmony-card\", \"last_updated\": \"2022-04-21T03:16:00Z\", \"stargazers_count\": 81, \"last_fetched\": 1656859624.31192, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"259126760\": {\"repository_manifest\": {\"name\": \"Honeycomb Menu\", \"render_readme\": true, \"filename\": \"honeycomb-menu.js\"}, \"category\": \"plugin\", \"description\": \"Honeycomb menu is a Home Assistant module (not a card) that can be applied to any lovelace card. When activated by the defined action on said card, the module will display a 'rounded' list of honeycomb buttons with an optional XY pad to make interfacing with lovelace more fluent\", \"domain\": \"\", \"downloads\": 1624, \"etag_repository\": \"W/\\\"9f9b65e1abbfe3b1d41349825bf1da6a404a7f449d3a7156860ab4917f982f8f\\\"\", \"full_name\": \"Sian-Lee-SA/honeycomb-menu\", \"last_updated\": \"2021-08-22T01:15:31Z\", \"stargazers_count\": 106, \"topics\": [\"lovelace-module\", \"menu\", \"module\"], \"last_fetched\": 1656859625.680474, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"202874270\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"Sets the background of your Home Assistant to match the entity picture of a media player\", \"domain\": \"\", \"etag_repository\": \"W/\\\"364e6a5f4291ba7d1d37e42ac6232e8ec6e8c57807e0d5b055e4960c6c44543b\\\"\", \"full_name\": \"TheLastProject/lovelace-media-art-background\", \"last_updated\": \"2021-04-14T16:38:05Z\", \"stargazers_count\": 20, \"last_fetched\": 1656859628.769878, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"284283867\": {\"repository_manifest\": {\"name\": \"Gallery Card\", \"filename\": \"gallery-card.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"A custom card for Home Assistant that will display images and/or videos from a folder in the style of a gallery.  \", \"domain\": \"\", \"etag_repository\": \"W/\\\"23c50ed2f5c4ebca2d264869c295a4a0dfc4ee8754a52f944e3eea2f9b5f58e6\\\"\", \"full_name\": \"TarheelGrad1998/gallery-card\", \"last_updated\": \"2022-01-20T20:51:25Z\", \"stargazers_count\": 51, \"topics\": [\"gallery\", \"gallery-card\", \"images\", \"videos\"], \"last_fetched\": 1657362544.588885, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"191580766\": {\"repository_manifest\": {\"name\": \"Light with profiles\", \"content_in_root\": true, \"filename\": \"light-with-profiles.js\", \"homeassistant\": \"0.100.0\"}, \"category\": \"plugin\", \"description\": \"Turn on lights based on light_profiles.csv\", \"domain\": \"\", \"etag_repository\": \"W/\\\"0c984bf03709d9309b86082994258d8f43b4b4a42ac46854025091eccd865eb5\\\"\", \"full_name\": \"tcarlsen/lovelace-light-with-profiles\", \"last_updated\": \"2022-06-12T20:39:16Z\", \"stargazers_count\": 54, \"topics\": [\"light\", \"light-profiles\", \"lovelace-card\", \"profiles\"], \"last_fetched\": 1657362544.79655, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"236317072\": {\"repository_manifest\": {\"name\": \"Pie Chart Card\", \"content_in_root\": true, \"filename\": \"pie-chart-card.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Generalized Lovelace pie chart card\", \"domain\": \"\", \"etag_repository\": \"W/\\\"3e9fc35b01cccf93f5e83230b043bfba328d15db640165ffd882dda7ff8a6b8c\\\"\", \"full_name\": \"sdelliot/pie-chart-card\", \"last_updated\": \"2020-03-07T21:19:19Z\", \"stargazers_count\": 11, \"last_fetched\": 1653230105.42555, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"203036108\": {\"repository_manifest\": {\"name\": \"Valetudo Map Card\", \"content_in_root\": true, \"filename\": \"valetudo-map-card.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Draws the map available from a Xiaomi Vacuum cleaner flashed with Valetudo in a Home Assistant Lovelace card\", \"etag_repository\": \"W/\\\"cbe4739b8e281e50f70e16416a78e1c8c1df2f07b018516deb876309d942d2ee\\\"\", \"full_name\": \"TheLastProject/lovelace-valetudo-map-card\", \"last_updated\": \"2022-07-03T14:28:49Z\", \"stargazers_count\": 142, \"topics\": [\"valetudo\"], \"last_fetched\": 1657362545.30532, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"167744584\": {\"repository_manifest\": {\"name\": \"auto-entities\", \"render_readme\": true, \"homeassistant\": \"2022.3.0\"}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udd39Automatically populate the entities-list of lovelace cards\", \"domain\": \"\", \"etag_repository\": \"W/\\\"cfb3bc998f9f7c9145a66a024eeb7aad31c26a2acc1cbf8e3283961492b7eee3\\\"\", \"full_name\": \"thomasloven/lovelace-auto-entities\", \"last_updated\": \"2022-07-02T20:51:04Z\", \"stargazers_count\": 651, \"last_fetched\": 1657362545.729095, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"281453608\": {\"repository_manifest\": {\"name\": \"badge-card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udd39 Place badges anywhere in the lovelace layout\", \"domain\": \"\", \"etag_repository\": \"W/\\\"2223723712e109d0523b99ee5dc1b247bb77dea7a68d4ceaad9516d77478b5e5\\\"\", \"full_name\": \"thomasloven/lovelace-badge-card\", \"last_updated\": \"2022-05-28T13:41:58Z\", \"stargazers_count\": 40, \"last_fetched\": 1656859631.053186, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"190927524\": {\"repository_manifest\": {\"name\": \"card-mod\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udd39 Add CSS styles to (almost) any lovelace card\", \"domain\": \"\", \"etag_repository\": \"W/\\\"f2e39c18348222abb7e3cf31f6c996f5d6c17dc89faa9c56a44b1857bf7dd996\\\"\", \"full_name\": \"thomasloven/lovelace-card-mod\", \"last_updated\": \"2022-06-30T13:52:24Z\", \"stargazers_count\": 516, \"last_fetched\": 1656859631.811245, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"161403328\": {\"repository_manifest\": {\"name\": \"card-tools\", \"homeassistant\": \"0.100.0\"}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udd39A collection of tools for other lovelace plugins to use\", \"etag_repository\": \"W/\\\"c9e60492856e2a6d60dd7abb0f5ecdc190edac61fb145f60b39cc331f84b649c\\\"\", \"full_name\": \"thomasloven/lovelace-card-tools\", \"last_updated\": \"2022-05-28T13:36:56Z\", \"stargazers_count\": 193, \"last_fetched\": 1656859631.843299, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"150781994\": {\"repository_manifest\": {\"name\": \"fold-entity-row\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udd39 A foldable row for entities card, containing other rows\", \"domain\": \"\", \"etag_repository\": \"W/\\\"2e0ce4c3880842a33880ff3bc85c6fd368f161071a8ef94022e6b186b3b6152a\\\"\", \"full_name\": \"thomasloven/lovelace-fold-entity-row\", \"last_updated\": \"2022-05-29T19:01:22Z\", \"stargazers_count\": 378, \"last_fetched\": 1656859632.010955, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"249942054\": {\"repository_manifest\": {\"name\": \"hui-element\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udd39 Use built-in elements in the wrong place\", \"domain\": \"\", \"etag_repository\": \"W/\\\"96fccb3df746dd5de6eff85d8cf265d3c2f7b1c4e4d71456fa436d7d8fbb37e0\\\"\", \"full_name\": \"thomasloven/lovelace-hui-element\", \"last_updated\": \"2022-05-29T19:02:02Z\", \"stargazers_count\": 65, \"last_fetched\": 1657362550.033282, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"156434866\": {\"repository_manifest\": {\"name\": \"layout-card\", \"render_readme\": true, \"homeassistant\": \"2022.3.0\"}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udd39 Get more control over the placement of lovelace cards.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"90e30316624b04aeeaf5202e231dc1cccbe6b593e5e922f21385932a33ca7d3f\\\"\", \"full_name\": \"thomasloven/lovelace-layout-card\", \"last_updated\": \"2022-05-28T13:26:49Z\", \"stargazers_count\": 570, \"last_fetched\": 1657362550.55133, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"231674882\": {\"repository_manifest\": {\"name\": \"template-entity-row\", \"render_readme\": true, \"homeassistant\": \"0.107.0b1\"}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udd39 Display whatever you want in an entities card row.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"2f36ae5606837d311088837b2729e71baecf7d5cc2abc86319b1ba3b56a6d7fc\\\"\", \"full_name\": \"thomasloven/lovelace-template-entity-row\", \"last_updated\": \"2022-05-29T19:01:39Z\", \"stargazers_count\": 114, \"last_fetched\": 1657362551.405331, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"158756598\": {\"repository_manifest\": {\"name\": \"state-switch\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udd39Dynamically replace lovelace cards depending on occasion\", \"domain\": \"\", \"etag_repository\": \"W/\\\"96eaa3758c73172aa7af1d464ff7e0bdfffef9aac1b084affab931cdb9a480e8\\\"\", \"full_name\": \"thomasloven/lovelace-state-switch\", \"last_updated\": \"2022-05-30T08:04:09Z\", \"stargazers_count\": 225, \"last_fetched\": 1656859636.055769, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"144899700\": {\"repository_manifest\": {\"name\": \"slider-entity-row\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udd39 Add sliders to entity cards\", \"etag_repository\": \"W/\\\"4351526073ee4b655349264a343a9b519f791c5812aa750ca36a839ce25fe9b4\\\"\", \"full_name\": \"thomasloven/lovelace-slider-entity-row\", \"last_updated\": \"2022-06-13T12:23:24Z\", \"stargazers_count\": 639, \"last_fetched\": 1657362551.147647, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"180528950\": {\"repository_manifest\": {\"name\": \"more-info-card\", \"render_readme\": true, \"homeassistant\": \"0.113\"}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udd39 Display the more-info dialog of any entity as a lovelace card\", \"domain\": \"\", \"etag_repository\": \"W/\\\"d4153e7f92ddb43c869a384d5e430b6cd470f680ed0521936931a406d0903de8\\\"\", \"full_name\": \"thomasloven/lovelace-more-info-card\", \"last_updated\": \"2022-05-28T13:40:55Z\", \"stargazers_count\": 69, \"last_fetched\": 1656859634.844744, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"286038496\": {\"repository_manifest\": {\"name\": \"Compass Card\", \"render_readme\": true, \"filename\": \"compass-card.js\"}, \"category\": \"plugin\", \"description\": \"A Lovelace card that shows a directional indicator on a compass for Home Assistant\", \"domain\": \"\", \"downloads\": 2558, \"etag_repository\": \"W/\\\"d6f8d8a6bd714b0046bda105d3501fa424838c162856033e3c2d9eac24beed66\\\"\", \"full_name\": \"tomvanswam/compass-card\", \"last_updated\": \"2022-07-01T10:07:23Z\", \"stargazers_count\": 75, \"topics\": [\"compass\", \"lovelace-card\"], \"last_fetched\": 1656859638.167003, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"264796130\": {\"repository_manifest\": {\"name\": \"Pandora CAS card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Pandora lovelace card for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"f69ceb715f8892c54d64f2541a8d93caf430ddf8669ca6cdc44f1050219fdc44\\\"\", \"full_name\": \"turbulator/pandora-cas-card\", \"last_updated\": \"2020-10-03T15:41:00Z\", \"stargazers_count\": 4, \"topics\": [\"lovelace-custom-card\", \"pandora\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"197245179\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"Lovelace card for hass-aarlo integration.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"c203f697bc693a16e6c2abb951305c79f84433176280b1c21f8c009da24c527c\\\"\", \"full_name\": \"twrecked/lovelace-hass-aarlo\", \"last_updated\": \"2022-06-05T05:42:15Z\", \"stargazers_count\": 47, \"topics\": [\"arlo\", \"camera\", \"lovelace-card\", \"streaming\"], \"last_fetched\": 1656859640.930668, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"223008910\": {\"repository_manifest\": {\"name\": \"Custom Sidebar\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Custom Sidebar for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"cc86e3ed0d2e6d51759a4e77d424dcb7a53160e03fd39d4f0d2cc4efb529c986\\\"\", \"full_name\": \"Villhellm/custom-sidebar\", \"last_updated\": \"2021-03-15T16:47:47Z\", \"stargazers_count\": 94, \"topics\": [\"custom\", \"sidebar\"], \"last_fetched\": 1656859642.235589, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"283542587\": {\"repository_manifest\": {\"name\": \"Lovelace Clock Card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Basic analog clock for Lovelace\", \"domain\": \"\", \"etag_repository\": \"W/\\\"8d473beaf3e4894cf04d271b68b3bad8d8d27b6cc3dcd98f3114aa189c000e55\\\"\", \"full_name\": \"Villhellm/lovelace-clock-card\", \"last_updated\": \"2020-11-24T17:31:42Z\", \"stargazers_count\": 38, \"topics\": [\"analog\", \"clock\"], \"last_fetched\": 1653230123.86655, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"202743061\": {\"repository_manifest\": {\"name\": \"Lovelace Animated Background\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Animated backgrounds for lovelace \", \"domain\": \"\", \"etag_repository\": \"W/\\\"5c51e79b27a046ee3e2294c533563a58366df684431c0063891797da3dfd7b3c\\\"\", \"full_name\": \"Villhellm/lovelace-animated-background\", \"last_updated\": \"2020-11-26T03:49:25Z\", \"stargazers_count\": 138, \"topics\": [\"animated\", \"background\"], \"last_fetched\": 1656859642.93994, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"259904390\": {\"repository_manifest\": {\"name\": \"Jumbo Card\", \"filename\": \"jumbo-card.js\"}, \"category\": \"plugin\", \"description\": \"A custom lovelace card for the custom Jumbo component.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"1ead81ddc1456d55c47b22a30cf46f2795ffddbb4dd95012d2cac0ad4faf8a19\\\"\", \"full_name\": \"Voxxie/lovelace-jumbo-card\", \"last_updated\": \"2020-05-04T10:11:59Z\", \"stargazers_count\": 2, \"topics\": [\"jumbo\", \"lovelace-card\", \"lovelace-custom-card\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"313269367\": {\"repository_manifest\": {\"name\": \"kibibit Better Graph Colors\", \"render_readme\": true, \"filename\": \"kb-better-graph-colors.js\"}, \"category\": \"plugin\", \"description\": \"Replace the history graph colors with a material design color palette.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"0d21c6c0e564f332d5b052bf23733e95e0324b9153fd6c1ddd1a6eb5a0318ee9\\\"\", \"full_name\": \"Kibibit/kb-better-graph-colors\", \"last_updated\": \"2022-06-19T17:37:46Z\", \"stargazers_count\": 9, \"topics\": [\"color-scheme\", \"graphs\", \"palette\"], \"last_fetched\": 1656859581.417357, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"308883876\": {\"repository_manifest\": {\"name\": \"BLE bulb card\", \"content_in_root\": true, \"filename\": \"ble-bulb-card.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Custom card for bluetooth bulb (BLE light) control for Homeassistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"4043b4b32210ed8eba426b5902649c1ff69d318393432d3bc7758e01d3b0d3b9\\\"\", \"full_name\": \"marcomow/ble-bulb-card\", \"last_updated\": \"2021-11-05T19:42:44Z\", \"stargazers_count\": 5, \"topics\": [\"ble\", \"ble-bulb\", \"ble-bulb-card\", \"home-assistant-card\", \"magic-blue-bulbs\", \"magicblue\", \"triones\", \"web-bluetooth\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"313270182\": {\"repository_manifest\": {\"name\": \"kibibit Frosted Cards\", \"render_readme\": true, \"filename\": \"kb-frosted-cards.js\"}, \"category\": \"plugin\", \"description\": \"Make Cards and Popups blur everything behind them.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"ffd1bcf3f48c9bf33f408347e9ae4c4faee764654977f90ac8e15737b465a0a2\\\"\", \"full_name\": \"Kibibit/kb-frosted-cards\", \"last_updated\": \"2020-11-22T22:02:11Z\", \"stargazers_count\": 9, \"topics\": [\"effect\", \"frosted-glass\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"203592862\": {\"repository_manifest\": {\"name\": \"USR-R16 16\\u8def\\u7f51\\u7edc\\u7ee7\\u7535\\u5668\", \"render_readme\": true, \"homeassistant\": \"0.106.0\", \"country\": [\"CN\"]}, \"authors\": [\"@blindlight\"], \"category\": \"integration\", \"description\": \"USR-R16 integration for Home Assistant\", \"domain\": \"usr_r16\", \"etag_repository\": \"W/\\\"bed30384a20f813319af19fb35a9e8bcb39a8bd11042808edf60bf2cbc3c3205\\\"\", \"full_name\": \"blindlight86/HA_USR-R16\", \"last_updated\": \"2022-06-29T13:17:53Z\", \"stargazers_count\": 5, \"topics\": [\"relays\"], \"last_fetched\": 1656859074.467216, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"299476136\": {\"repository_manifest\": {\"name\": \"Securifi RESTful API\", \"render_readme\": true}, \"authors\": [\"@9rpp\"], \"category\": \"integration\", \"description\": \"This is a partial implementation of the Securifi RESTful API for Home Assistant\", \"domain\": \"securifi\", \"etag_repository\": \"W/\\\"01717a207b00c97903226cd51dcf0d68fe4489242df2f8a6e39cbf41b54bb089\\\"\", \"full_name\": \"9rpp/securifi\", \"last_updated\": \"2020-10-29T15:54:45Z\", \"stargazers_count\": 2, \"topics\": [\"automation\", \"iot\", \"securifi\"], \"last_fetched\": 1656859035.188359, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"282427417\": {\"repository_manifest\": {\"name\": \"Public Transport Victoria\", \"render_readme\": \"true\"}, \"authors\": [\"@bremor\"], \"category\": \"integration\", \"description\": \"Custom component for retrieving departure times for Public Transport Victoria.\", \"domain\": \"public_transport_victoria\", \"etag_repository\": \"W/\\\"8611808013d264bbc902750a5abbbedc227049fddb24aa9211fe373bf697eb57\\\"\", \"full_name\": \"bremor/public_transport_victoria\", \"last_updated\": \"2022-06-20T00:23:49Z\", \"stargazers_count\": 14, \"topics\": [\"australia\", \"bus\", \"ptv\", \"public\", \"train\", \"tram\", \"transport\", \"victoria\"], \"last_fetched\": 1656859081.862596, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"307586942\": {\"repository_manifest\": {\"name\": \"Bureau of Meteorology\", \"render_readme\": \"true\", \"homeassistant\": \"2022.7.0b0\"}, \"authors\": [\"@bremor\"], \"category\": \"integration\", \"description\": \"Custom component for retrieving weather information from the Bureau of Meteorology.\", \"domain\": \"bureau_of_meteorology\", \"etag_repository\": \"W/\\\"81cee08838fd60e3f0c3a91a231b2e9c1e5403dbbe969233557eb8001b8acb5d\\\"\", \"full_name\": \"bremor/bureau_of_meteorology\", \"last_updated\": \"2022-07-03T06:09:04Z\", \"stargazers_count\": 88, \"topics\": [\"bom\", \"bureau\", \"forecast\", \"meteorology\", \"observations\", \"weather\", \"weather-information\"], \"last_fetched\": 1656859080.819925, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"307503425\": {\"repository_manifest\": {\"name\": \"INGV Istituto Nazionale di Geofisica e Vulcanologia\", \"country\": [\"IT\"], \"render_readme\": true}, \"authors\": [\"@exxamalte\", \"@caiosweet\"], \"category\": \"integration\", \"description\": \"INGV - National Institute of Geophysics and Volcanology [Istituto Nazionale di Geofisica e Vulcanologia] Terremoti Italia.\", \"domain\": \"ingv_centro_nazionale_terremoti\", \"etag_repository\": \"W/\\\"0507da71a03b54f3cf442a280608d3318cf8560190440ed60010661e6832ea1b\\\"\", \"full_name\": \"caiosweet/Home-Assistant-custom-components-INGV\", \"last_updated\": \"2021-12-31T21:35:46Z\", \"stargazers_count\": 9, \"topics\": [\"assistant\", \"geofisica\", \"home\", \"ingv\", \"terremoti\", \"vulcanologia\"], \"last_fetched\": 1641058225.993408, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"308690707\": {\"repository_manifest\": {\"name\": \"Google WiFi\", \"country\": \"CA\", \"homeassistant\": \"0.115.0\"}, \"authors\": [\"@djtimca\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for Google Wifi systems.\", \"domain\": \"googlewifi\", \"etag_repository\": \"W/\\\"f10e46e35830e6a54d9c144fa717482e6229234db5a1a4452da230fb22c4437d\\\"\", \"full_name\": \"djtimca/hagooglewifi\", \"last_updated\": \"2022-06-02T04:56:17Z\", \"stargazers_count\": 46, \"topics\": [\"google-wifi\"], \"last_fetched\": 1657362713.671643, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"304573324\": {\"repository_manifest\": {\"name\": \"SQL (with JSON detection)\", \"render_readme\": true, \"homeassistant\": \"0.99.9\", \"persistent_directory\": \"userfiles\"}, \"authors\": [\"@dgomes\", \"@crowbarz\"], \"category\": \"integration\", \"description\": \"Updated SQL integration for Home Assistant that supports JSON attributes\", \"domain\": \"sql_json\", \"etag_repository\": \"W/\\\"37bb3f4efa72ca305a5b2519d129dcccf4706ace8dc303fb114db5681897429d\\\"\", \"full_name\": \"crowbarz/ha-sql_json\", \"last_updated\": \"2022-05-04T21:05:41Z\", \"stargazers_count\": 5, \"topics\": [\"json\", \"sql\"], \"last_fetched\": 1653229634.931068, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"223993584\": {\"repository_manifest\": {\"name\": \"Passive BLE monitor integration\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@Magalex2x14\", \"@Ernst79\"], \"category\": \"integration\", \"description\": \"BLE monitor passively monitors BLE sensors (Xiaomi, Qingping, ATC, BlueMaestro, Brifit, Govee, Kegtron, Moat, Inkbird, iNode, Yeelight, RuuviTag, SensorPush, Teltonika, Thermoplus and Thermopro)\", \"domain\": \"ble_monitor\", \"etag_repository\": \"W/\\\"fe43433cafc231b0da495e301a4bcbbec330e67a5149bbae3baa346be1ad464e\\\"\", \"full_name\": \"custom-components/ble_monitor\", \"last_updated\": \"2022-07-08T11:29:09Z\", \"stargazers_count\": 1303, \"topics\": [\"atc\", \"govee\", \"inkbird\", \"kegtron\", \"mibeacon\", \"mijia\", \"mitemp-bt\", \"qingping\", \"scales\", \"thermoplus\", \"thermopro\", \"thermplus\", \"xiaomi\", \"xiaomi-sensors\"], \"last_fetched\": 1657362674.587219, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"178838527\": {\"repository_manifest\": {\"name\": \"Niko Home Control II\", \"render_readme\": true, \"homeassistant\": \"0.114.1\"}, \"authors\": [\"@filipvh\"], \"category\": \"integration\", \"description\": \"Niko Home Control II Home Assistant Integration\", \"domain\": \"nhc2\", \"etag_repository\": \"W/\\\"042de4e67a6acf85961a12b2c9d56be6a45348c9e2634a9459a59ef60eb23486\\\"\", \"full_name\": \"filipvh/hass-nhc2\", \"last_updated\": \"2022-05-16T07:43:50Z\", \"stargazers_count\": 34, \"topics\": [\"coco\", \"domotica\", \"nhc\", \"nhc2\", \"niko\", \"niko-home-control\"], \"last_fetched\": 1656859174.281916, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"266779715\": {\"repository_manifest\": {\"name\": \"Yahoo Finance\", \"render_readme\": true}, \"authors\": [\"@induprakash\"], \"category\": \"integration\", \"description\": \"Home Assistant component which allows you to get stock updates from Yahoo finance.\", \"domain\": \"yahoofinance\", \"etag_repository\": \"W/\\\"981a712717c3e78df42e85d5118289fb52724ec740171a7475f23754a6d55039\\\"\", \"full_name\": \"iprak/yahoofinance\", \"last_updated\": \"2022-06-27T23:00:34Z\", \"stargazers_count\": 46, \"topics\": [\"stock-updates\", \"yahoo-finance\"], \"last_fetched\": 1656859214.444017, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"309018094\": {\"repository_manifest\": {\"name\": \"fordpass\"}, \"authors\": [\"@itchannel\"], \"category\": \"integration\", \"description\": \"Fordpass integration for Home Assistant\", \"domain\": \"fordpass\", \"etag_repository\": \"W/\\\"d821a77fab210220cef3f4c41dd6c525fa6f72c6ee98504dc14a787d518597ea\\\"\", \"full_name\": \"itchannel/fordpass-ha\", \"last_updated\": \"2022-07-05T12:58:58Z\", \"stargazers_count\": 94, \"topics\": [\"assistant\", \"car\", \"fordpass\", \"home\"], \"last_fetched\": 1657362780.945287, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"299123388\": {\"repository_manifest\": {\"name\": \"Magic Areas\", \"homeassistant\": \"2021.7.0\"}, \"authors\": [\"@jseidl\"], \"category\": \"integration\", \"description\": \"Areas with batteries included for Home Assistant\", \"domain\": \"magic_areas\", \"etag_repository\": \"W/\\\"83d231f5de7b53eeb2e6518c20deef1c75661956ce266e72eceee459043fbbae\\\"\", \"full_name\": \"jseidl/hass-magic_areas\", \"last_updated\": \"2022-07-09T07:07:31Z\", \"stargazers_count\": 126, \"topics\": [\"automation\"], \"last_fetched\": 1657362801.817302, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"249381778\": {\"repository_manifest\": {\"name\": \"Local Tuya\", \"homeassistant\": \"0.116.0\"}, \"authors\": [\"@rospogrigio\", \"@postlund\"], \"category\": \"integration\", \"description\": \"local handling for Tuya devices\", \"domain\": \"localtuya\", \"etag_repository\": \"W/\\\"af18a515e9d8d7db8570a4e36d4a4bf11a099d89f98dc782a43e4f78f8aae34a\\\"\", \"full_name\": \"rospogrigio/localtuya\", \"last_updated\": \"2022-07-07T23:27:24Z\", \"stargazers_count\": 1205, \"topics\": [\"localtuya\", \"tuya\", \"tuya-api\"], \"last_fetched\": 1657362919.328247, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"268722568\": {\"repository_manifest\": {\"name\": \"Media player template\", \"homeassistant\": \"0.116\", \"render_readme\": true}, \"authors\": [\"@Sennevds\"], \"category\": \"integration\", \"description\": \"Template media_player for Home Assistant\", \"domain\": \"media_player_template\", \"etag_repository\": \"W/\\\"a4950adfb54e6d407dea0218c5eaa056490a0df8a22d46f338ae4519c795614a\\\"\", \"full_name\": \"Sennevds/media_player.template\", \"last_updated\": \"2022-05-16T04:36:45Z\", \"stargazers_count\": 66, \"topics\": [\"media-player\"], \"last_fetched\": 1656859376.173673, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"303827752\": {\"repository_manifest\": {\"homeassistant\": \"0.117.0\", \"name\": \"TryFi Dog Monitor\", \"render_readme\": true}, \"authors\": [\"@sbabcock23\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for TryFi Dog Collar GPS monitoring.\", \"domain\": \"tryfi\", \"etag_repository\": \"W/\\\"c0b304697f6b1221fefe3eec4898982ed40c265025639236ee28b7ad7fa01246\\\"\", \"full_name\": \"sbabcock23/hass-tryfi\", \"last_updated\": \"2022-06-22T04:16:34Z\", \"stargazers_count\": 29, \"topics\": [\"dog\", \"dog-collar\", \"gps\", \"iot\", \"tryfi\"], \"last_fetched\": 1657362934.451933, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"164489685\": {\"repository_manifest\": {\"name\": \"Nextbike Integration\", \"render_readme\": true}, \"authors\": [\"@syssi\"], \"category\": \"integration\", \"description\": \"Nextbike integration for Home Assistant\", \"domain\": \"nextbike\", \"etag_repository\": \"W/\\\"a0df3b8ecd7d8bcbc7ce3b47d4368c33ff3f1d108e7b2a9969dfb927ad286de2\\\"\", \"full_name\": \"syssi/nextbike\", \"last_updated\": \"2022-02-19T09:57:08Z\", \"stargazers_count\": 7, \"topics\": [\"free-floating\", \"nextbike\"], \"last_fetched\": 1646497082.494768, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"129353521\": {\"repository_manifest\": {\"name\": \"Xiaomi MiIO Raw\", \"render_readme\": true}, \"authors\": [\"@syssi\"], \"category\": \"integration\", \"description\": \"Custom component for Home Assistant to faciliate the reverse engeneering of Xiaomi MiIO devices\", \"domain\": \"xiaomi_miio_raw\", \"etag_repository\": \"W/\\\"69a241d40891ded964afcc5ff745810c61768baddf50ec649f6939e3df105910\\\"\", \"full_name\": \"syssi/xiaomi_raw\", \"last_updated\": \"2022-06-02T05:44:43Z\", \"stargazers_count\": 92, \"topics\": [\"miio\", \"miio-device\", \"miio-protocol\", \"monitoring\"], \"last_fetched\": 1656859395.310935, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"121934877\": {\"repository_manifest\": {\"name\": \"Xiaomi Mi and Aqara Air Conditioning Companion Integration\", \"render_readme\": true}, \"authors\": [\"@syssi\"], \"category\": \"integration\", \"description\": \"Xiaomi Mi and Aqara Air Conditioning Companion integration for Home Assistant\", \"domain\": \"xiaomi_miio_airconditioningcompanion\", \"etag_repository\": \"W/\\\"a9ea30e050761b77e34ecc3bb17a7167f458f8c4bf73b0c79d7adab9def2dcc9\\\"\", \"full_name\": \"syssi/xiaomi_airconditioningcompanion\", \"last_updated\": \"2022-06-02T05:46:20Z\", \"stargazers_count\": 363, \"topics\": [\"acpartner\", \"airconditioning\", \"aqara\", \"infrared\", \"xiaomi\"], \"last_fetched\": 1657362952.665858, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"101482973\": {\"repository_manifest\": {\"name\": \"Xiaomi Mi Air Purifier, Air Humidifier, Air Fresh and Pedestal Fan Integration\", \"render_readme\": true, \"homeassistant\": \"2021.5.1\"}, \"authors\": [\"@syssi\"], \"category\": \"integration\", \"description\": \"Xiaomi Mi Air Purifier and Xiaomi Mi Air Humidifier integration for Home Assistant\", \"domain\": \"xiaomi_miio_airpurifier\", \"etag_repository\": \"W/\\\"6bdcdb23d43fbe21dd087d2c80a80c1aee5f046e2154400c9ec8736461c13aac\\\"\", \"full_name\": \"syssi/xiaomi_airpurifier\", \"last_updated\": \"2022-06-02T05:39:58Z\", \"stargazers_count\": 358, \"topics\": [\"airfresh\", \"airhumidifier\", \"airpurifier\", \"fan\", \"miio\", \"miio-protocol\", \"miot\", \"xiaomi\"], \"last_fetched\": 1657362954.438453, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"307098646\": {\"repository_manifest\": {\"name\": \"Alarmo\", \"render_readme\": true, \"zip_release\": true, \"filename\": \"alarmo.zip\", \"hide_default_branch\": true}, \"authors\": [\"@nielsfaber\"], \"category\": \"integration\", \"description\": \"Easy to use alarm system integration for Home Assistant\", \"domain\": \"alarmo\", \"downloads\": 7175, \"etag_repository\": \"W/\\\"2942c39453e64ce7c54bd3db7c57d5c4813fc61d9f0865c42f1521d6fdf57921\\\"\", \"full_name\": \"nielsfaber/alarmo\", \"last_updated\": \"2022-07-02T04:41:13Z\", \"stargazers_count\": 526, \"topics\": [\"alarm\", \"assistant\", \"home\", \"security\"], \"last_fetched\": 1657362877.843886, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"97201395\": {\"repository_manifest\": {\"name\": \"Xiaomi Mi Smart WiFi Socket Integration\", \"render_readme\": true}, \"authors\": [\"@syssi\"], \"category\": \"integration\", \"description\": \"Xiaomi Mi Smart WiFi Socket integration for Home Assistant\", \"domain\": \"xiaomi_miio_plug\", \"etag_repository\": \"W/\\\"a91850a3eec58aea9d6dffaa3d3aa4de28f48d1d5a497eec8f02364e498add66\\\"\", \"full_name\": \"syssi/xiaomiplug\", \"last_updated\": \"2022-06-02T05:44:26Z\", \"stargazers_count\": 98, \"topics\": [\"miio\", \"miio-device\", \"miio-protocol\", \"switch\", \"xiaomi\"], \"last_fetched\": 1656859395.915807, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"307974458\": {\"repository_manifest\": {\"name\": \"ResRobot\", \"country\": [\"SE\"], \"homeassistant\": \"2021.12.8\"}, \"authors\": [\"@iesus\"], \"category\": \"integration\", \"description\": \"Get departure times for swedish public transportation\", \"domain\": \"resrobot\", \"etag_repository\": \"W/\\\"7dd562bb1017587f0e869f5d0d94d50eb64d8806e6c39e89dc2ae55a8caa6b60\\\"\", \"full_name\": \"TekniskSupport/home-assistant-resrobot\", \"last_updated\": \"2022-01-09T07:41:03Z\", \"stargazers_count\": 10, \"topics\": [\"bus\", \"ferry\", \"iesus\", \"public\", \"sweden\", \"train\", \"tram\", \"transportation\"], \"last_fetched\": 1641895848.62499, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"305147191\": {\"repository_manifest\": {\"name\": \"CEZ Distribuce CZ\", \"country\": \"CZ\", \"homeassistant\": \"0.110.0\"}, \"authors\": [\"@zigul\"], \"category\": \"integration\", \"description\": \"CEZ Distribuce - Home Assistant Sensor\", \"domain\": \"cezdistribuce\", \"etag_repository\": \"W/\\\"765bb939c79714a38f55335c193e3e85fab6b5d13aeefa9f61b45f277179c58f\\\"\", \"full_name\": \"zigul/HomeAssistant-CEZdistribuce\", \"last_updated\": \"2022-03-07T20:21:42Z\", \"stargazers_count\": 13, \"topics\": [\"cez\"], \"last_fetched\": 1656859447.487352, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"287318591\": {\"repository_manifest\": {\"name\": \"Husqvarna Automower\", \"homeassistant\": \"2022.7.0b0\", \"render_readme\": true, \"zip_release\": true, \"filename\": \"husqvarna_automower.zip\"}, \"authors\": [\"@Thomas55555\"], \"category\": \"integration\", \"description\": \"Custom component for Home Assistant to monitor and control your Husqvrana Automower\", \"domain\": \"husqvarna_automower\", \"downloads\": 132, \"etag_repository\": \"W/\\\"68f61fc1ff5f8e4d3538b0b28d7c4383f19a7993ae16943e1a03122f7d2e8a09\\\"\", \"full_name\": \"Thomas55555/husqvarna_automower\", \"last_updated\": \"2022-07-08T19:38:49Z\", \"stargazers_count\": 42, \"topics\": [\"husqvarna-automower\"], \"last_fetched\": 1657362963.045734, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"139634406\": {\"repository_manifest\": {\"name\": \"Dark Thermostat\", \"render_readme\": true, \"filename\": \"thermostat-dark-card.js\"}, \"category\": \"plugin\", \"description\": \"\\ud83c\\udf21 Thermostat card with a round and black feel to it\", \"domain\": \"\", \"downloads\": 13895, \"etag_repository\": \"W/\\\"bbb8b93f4e6b963457f27132696f22376a9f45690283506fe56328411924c378\\\"\", \"full_name\": \"ciotlosm/lovelace-thermostat-dark-card\", \"last_updated\": \"2022-06-02T18:35:14Z\", \"stargazers_count\": 653, \"topics\": [\"thermostat\"], \"last_fetched\": 1656859510.354623, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"315044466\": {\"repository_manifest\": {\"name\": \"Transmission Card\", \"filename\": \"transmission-card.js\", \"render_readme\": \"true\"}, \"category\": \"plugin\", \"description\": \"Custom Transmission card for Home Assistant/Lovelace\", \"domain\": \"\", \"downloads\": 1313, \"etag_repository\": \"W/\\\"4dd0ab2c5632324bf261f2156f8ef17a2e66a51532a3d43397f012b5088412c3\\\"\", \"full_name\": \"amaximus/transmission-card\", \"last_updated\": \"2022-06-03T06:25:54Z\", \"stargazers_count\": 25, \"topics\": [\"lovelace-card\", \"lovelace-custom-card\", \"transmission\"], \"last_fetched\": 1656859498.362987, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"188106531\": {\"repository_manifest\": {\"name\": \"Mail and Packages\", \"homeassistant\": \"0.109.0\", \"zip_release\": true, \"filename\": \"mail_and_packages.zip\"}, \"authors\": [\"@moralmunky\", \"@firstof9\"], \"category\": \"integration\", \"description\": \"Home Assistant integration providing day of package counts and USPS informed delivery images.\", \"domain\": \"mail_and_packages\", \"downloads\": 2642, \"etag_repository\": \"W/\\\"98566ad3627d9f133e670c2b4c81b15be1b1071db217651a05889c7cba6fb2c1\\\"\", \"full_name\": \"moralmunky/Home-Assistant-Mail-And-Packages\", \"last_updated\": \"2022-06-21T17:24:46Z\", \"stargazers_count\": 329, \"topics\": [\"home-assistant-config\", \"lovelace-card\", \"lovelace-custom-card\"], \"last_fetched\": 1656859300.059969, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"222118751\": {\"repository_manifest\": {\"name\": \"Sonoff LAN\", \"render_readme\": true}, \"authors\": [\"@AlexxIT\"], \"category\": \"integration\", \"description\": \"Control Sonoff Devices with eWeLink (original) firmware over LAN and/or Cloud from Home Assistant\", \"domain\": \"sonoff\", \"etag_repository\": \"W/\\\"8ba4ce64a142fea1d552990b445ed4d4aa3a17410ed04c5c2c21fee572f898b2\\\"\", \"full_name\": \"AlexxIT/SonoffLAN\", \"last_updated\": \"2022-07-08T19:45:34Z\", \"stargazers_count\": 1698, \"topics\": [\"ewelink\", \"sonoff\"], \"last_fetched\": 1657362612.277436, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"146660369\": {\"repository_manifest\": {\"name\": \"Bravia TV PSK\", \"zip_release\": true, \"filename\": \"combined.zip\", \"hide_default_branch\": true}, \"authors\": [\"@gerard33\"], \"category\": \"integration\", \"description\": \"Sony Bravia TV (Pre-Shared Key) component for Home Assistant\", \"domain\": \"braviatv_psk\", \"downloads\": 2149, \"etag_repository\": \"W/\\\"4de0ccbb8bd68d29b17bc35266920fd9984724fe75923e32c29e5a4f8132e772\\\"\", \"full_name\": \"custom-components/media_player.braviatv_psk\", \"last_updated\": \"2022-05-24T20:56:29Z\", \"stargazers_count\": 97, \"topics\": [\"bravia\", \"psk\", \"sony\"], \"last_fetched\": 1657362679.692791, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"321140869\": {\"repository_manifest\": {\"name\": \"Auto Reload\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Custom home assitant lovelace for UI auto reload\", \"domain\": \"\", \"etag_repository\": \"W/\\\"418fce7ea7b8641e6afb6250944a7104edb5a2c2e2e39127410edd80491e180b\\\"\", \"full_name\": \"ben8p/lovelace-auto-reload-card\", \"last_updated\": \"2022-05-28T16:39:09Z\", \"stargazers_count\": 23, \"topics\": [\"lovelace-card\"], \"last_fetched\": 1653824396.291075, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"321773656\": {\"repository_manifest\": {\"name\": \"themable-grid\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"\\ud83c\\udc39 Lovelace responsive grid card that can be tweaked in your theme definition.\", \"domain\": \"\", \"downloads\": 284, \"etag_repository\": \"W/\\\"a7d2770081ae6f8e957f7d49d61fff7c56cb217139e7aa256965eae3d3e0eb7e\\\"\", \"full_name\": \"nervetattoo/themable-grid\", \"last_updated\": \"2022-06-27T19:32:17Z\", \"stargazers_count\": 17, \"topics\": [\"lovelace-card\", \"lovelace-custom-card\"], \"last_fetched\": 1656859605.931939, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"320117484\": {\"repository_manifest\": {\"name\": \"Vibrant (Dark) Clear Theme\", \"homeassistant\": \"0.109.0\"}, \"category\": \"theme\", \"description\": \"Vibrant (Dark) Version of Clear Theme\", \"domain\": \"\", \"etag_repository\": \"W/\\\"308ab1f42553cf6fd9cf26cef97a101a529540568d7d7a9df2a0e6e15561c310\\\"\", \"full_name\": \"myleskeeffe/clear-theme-dark-vibrant\", \"last_updated\": \"2021-02-10T10:21:44Z\", \"stargazers_count\": 2, \"topics\": [\"clear\", \"dark\", \"vibrant\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"320381430\": {\"repository_manifest\": {\"name\": \"Analog Clock\", \"render_readme\": true, \"filename\": \"analogclock.js\"}, \"category\": \"plugin\", \"description\": \"An analog clock for Home Assistant Lovelace\", \"domain\": \"\", \"etag_repository\": \"W/\\\"5e359ac0c4bf1582aee8ed1a298491afa9992f649c8017e5f6ccfba1b2de4647\\\"\", \"full_name\": \"tomasrudh/analogclock\", \"last_updated\": \"2022-06-03T19:55:56Z\", \"stargazers_count\": 14, \"topics\": [\"analog\", \"analog-clock\", \"assistant-lovelace\", \"clock\"], \"last_fetched\": 1656859637.99292, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"302145522\": {\"repository_manifest\": {\"name\": \"Rocket Launch Live - Next 5 Launches\", \"country\": [\"CA\"], \"homeassistant\": \"0.115.0\"}, \"authors\": [\"@djtimca\"], \"category\": \"integration\", \"description\": \"Home Assistant custom HACS integration to integrate the next 5 global rocket launches from https://rocketlaunch.live\", \"domain\": \"rocketlaunchlive\", \"etag_repository\": \"W/\\\"774f0545a82a5bb67fe051b8bddf4ce8a1351dee7055391da4390af2c10d19d9\\\"\", \"full_name\": \"djtimca/harocketlaunchlive\", \"last_updated\": \"2022-01-18T15:25:41Z\", \"stargazers_count\": 9, \"topics\": [\"launch\", \"nasa\", \"rocket\", \"spacex\", \"ula\"], \"last_fetched\": 1642520516.950142, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"245694520\": {\"repository_manifest\": {\"name\": \"Helios ventilation\", \"render_readme\": true}, \"authors\": [\"@asev\"], \"category\": \"integration\", \"description\": \"Custom component for Home Assistant to connect Helios ventilation system.\", \"domain\": \"helios\", \"etag_repository\": \"W/\\\"7416f432558530625dd8f41f5f2598f8f5125161146c254cc28fdc36648d4642\\\"\", \"full_name\": \"asev/homeassistant-helios\", \"last_updated\": \"2021-12-03T21:19:51Z\", \"stargazers_count\": 5, \"topics\": [\"helios\", \"ventilation\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"314593331\": {\"repository_manifest\": {\"name\": \"Satellite Tracker (N2YO)\", \"country\": [\"CA\"], \"homeassistant\": \"0.115.0\"}, \"authors\": [\"@djtimca\"], \"category\": \"integration\", \"description\": \"Using the N2YO API, this Home Assistant integration will provide visible satellite passes (general) and to add specific satellites for monitoring.\", \"domain\": \"satellitetracker\", \"etag_repository\": \"W/\\\"551562a14450c9b055d89c6c5b0db4efab434c449c6fff697b72a139038d4fda\\\"\", \"full_name\": \"djtimca/hasatellitetracker\", \"last_updated\": \"2022-01-18T21:34:08Z\", \"stargazers_count\": 7, \"topics\": [\"international-space-station\", \"iss\", \"satellite\", \"satellite-tracker\", \"starlink\", \"tracking-satellites\", \"visible-passes\"], \"last_fetched\": 1648840071.530182, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"317051290\": {\"repository_manifest\": {\"name\": \"Kan Program\", \"country\": [\"IL\"], \"render_readme\": true}, \"authors\": [\"@eyalcha\"], \"category\": \"integration\", \"description\": \"Home assistant custom component to fetch kan program guide\", \"domain\": \"kan_program\", \"etag_repository\": \"W/\\\"20b3a4d3077e80339ffc76d5e85f75a826a33a3697e90e9eed1208031929afb0\\\"\", \"full_name\": \"eyalcha/kan_program\", \"last_updated\": \"2021-06-26T12:35:00Z\", \"stargazers_count\": 2, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"199399946\": {\"repository_manifest\": {\"name\": \"Greenchoice\", \"country\": \"NL\", \"render_readme\": true}, \"authors\": [\"@jessevl\"], \"category\": \"integration\", \"description\": \"This is a Home Assistant custom component that connects to the Greenchoice API\", \"domain\": \"greenchoice\", \"etag_repository\": \"W/\\\"4c8c835dcd337ed11ba599ecc2326ff7a1b2efe295c89ac8bd346afd1459c0ae\\\"\", \"full_name\": \"jessevl/homeassistant-greenchoice\", \"last_updated\": \"2021-04-08T13:40:36Z\", \"stargazers_count\": 25, \"topics\": [\"greenchoice\"], \"last_fetched\": 1653229763.015618, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"319343045\": {\"repository_manifest\": {\"name\": \"UltraSync Beta\", \"hacs\": \"0.24.0\", \"render_readme\": true, \"homeassistant\": \"0.110.0\"}, \"authors\": [\"@caronc\"], \"category\": \"integration\", \"description\": \"Interlogix ZeroWire and Hills ComNav (NX-595E) UltraSync Security Panel for Integration for Home Assistant Comunity Store (HACS)\", \"domain\": \"ultrasync\", \"etag_repository\": \"W/\\\"0d3d17a6e362f2f19f655cbeb43c80acce61d3c29ce13c7de34807bd50bfdc54\\\"\", \"full_name\": \"caronc/ha-ultrasync\", \"last_updated\": \"2022-07-01T13:55:11Z\", \"stargazers_count\": 10, \"topics\": [\"comnav\", \"homeassistant-custom-component\", \"interlogix\", \"nx-595e\", \"security\", \"ultrasync\"], \"last_fetched\": 1656859092.243219, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"316527506\": {\"repository_manifest\": {\"name\": \"Winix Purifier\", \"render_readme\": true}, \"authors\": [\"@iprak\"], \"category\": \"integration\", \"description\": \"Home Assistant component for C545 Winix Air Purifier\", \"domain\": \"winix\", \"etag_repository\": \"W/\\\"2f0fce4e0e53fe3983ef32ac8fc13c7e80691fbddd2398a85fb2b58a5f64f022\\\"\", \"full_name\": \"iprak/winix\", \"last_updated\": \"2022-01-08T10:26:20Z\", \"stargazers_count\": 36, \"topics\": [\"purifier\", \"winix\"], \"last_fetched\": 1657362778.957403, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"316807165\": {\"repository_manifest\": {\"name\": \"Miele integration\"}, \"authors\": [\"@kloknibor\", \"@docbobo\"], \"category\": \"integration\", \"description\": \"Miele integration for Home assistant\", \"domain\": \"miele\", \"etag_repository\": \"W/\\\"2f29f76dfdad6ea7fda042e7bc24b2f9ffdf9c694f6a4003b35e3b16c36df494\\\"\", \"full_name\": \"HomeAssistant-Mods/home-assistant-miele\", \"last_updated\": \"2022-04-19T19:21:06Z\", \"stargazers_count\": 68, \"topics\": [\"miele\"], \"last_fetched\": 1656859207.358926, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"312896602\": {\"repository_manifest\": {\"name\": \"Skoda Connect\", \"homeassistant\": \"2021.12.0\", \"hide_default_branch\": true, \"filename\": \"skodaconnect.zip\"}, \"authors\": [\"@lendy007\"], \"category\": \"integration\", \"description\": \"Skoda Connect - An home assistant plugin to add integration with your car\", \"domain\": \"skodaconnect\", \"etag_repository\": \"W/\\\"9d0639cfa09ad61c1bd762ae5889f57bc5f042425a71ff391af49631ad2be4fa\\\"\", \"full_name\": \"lendy007/homeassistant-skodaconnect\", \"last_updated\": \"2022-07-04T18:03:36Z\", \"stargazers_count\": 107, \"topics\": [\"skoda-connect\"], \"last_fetched\": 1657362833.224691, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"300754203\": {\"repository_manifest\": {\"name\": \"Kanji Clock Card\", \"render_readme\": true, \"filename\": \"kanji-clock-card.js\", \"country\": [\"JP\"]}, \"category\": \"plugin\", \"description\": \"A simple clock widget using Japanese Kanji for date and time\", \"domain\": \"\", \"etag_repository\": \"W/\\\"7ed924d663a09f693c7769511af013cf0049289224d664c484ff0336ce62661c\\\"\", \"full_name\": \"sopelj/lovelace-kanji-clock-card\", \"last_updated\": \"2021-12-26T17:55:49Z\", \"stargazers_count\": 2, \"topics\": [\"lovelace-card\", \"lovelace-custom-card\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"316597224\": {\"repository_manifest\": {\"name\": \"Budova Smart Home\", \"country\": [\"UA\"], \"render_readme\": true, \"homeassistant\": \"2021.8.1\"}, \"authors\": [\"@DarkPark\"], \"category\": \"integration\", \"description\": \"A Home Assistant Budova Smart Home integration\", \"domain\": \"bsh\", \"etag_repository\": \"W/\\\"b06c4df8064aeff9d855d3ebf94c284d55804b82f22e8fa574e288f517214e21\\\"\", \"full_name\": \"dphae/bsh\", \"last_updated\": \"2021-08-05T21:00:50Z\", \"stargazers_count\": 3, \"topics\": [\"budova\", \"smart-home\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"316421110\": {\"repository_manifest\": {\"name\": \"La Marzocco\"}, \"authors\": [\"@rccoleman\"], \"category\": \"integration\", \"description\": \"Interact with your La Marzocco espresso machine\", \"domain\": \"lamarzocco\", \"etag_repository\": \"W/\\\"86a6179024b957d984560e0267a481732399563346abba644fa2ca526ba1c939\\\"\", \"full_name\": \"rccoleman/lamarzocco\", \"last_updated\": \"2022-01-30T00:23:55Z\", \"stargazers_count\": 24, \"topics\": [\"home-assistant-component\", \"la-marzocco\", \"lamarzocco\"], \"last_fetched\": 1653229874.495781, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"228299254\": {\"repository_manifest\": {\"name\": \"LUNOS Heat Recovery Ventilation\", \"render_readme\": true}, \"authors\": [\"@rsnodgrass\"], \"category\": \"integration\", \"description\": \"LUNOS HRV Ventilation Fan Control for Home Assistant\", \"domain\": \"lunos\", \"etag_repository\": \"W/\\\"fa20a416e842cd85733ac9c7b418721a9bf3b890c5ce42d21e2e232f7bfa0d83\\\"\", \"full_name\": \"rsnodgrass/hass-lunos\", \"last_updated\": \"2022-06-27T00:25:50Z\", \"stargazers_count\": 15, \"topics\": [\"hrv\", \"hvac\", \"lunos\", \"smart-home-solutions\", \"ventilation\"], \"last_fetched\": 1657362924.375434, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"313759590\": {\"repository_manifest\": {\"name\": \"Mint Mobile\", \"render_readme\": true}, \"authors\": [\"@ryanmac8\"], \"category\": \"integration\", \"description\": \"Mint Mobile Integration for Data Usage Monitoring\", \"domain\": \"mintmobile\", \"etag_repository\": \"W/\\\"77b3bcd469218af93e6e1081451991988dbea748856ff6902acbbdecbee1fe43\\\"\", \"full_name\": \"ryanmac8/HA-Mint-Mobile\", \"last_updated\": \"2022-01-18T01:00:09Z\", \"stargazers_count\": 4, \"topics\": [\"automation\"], \"last_fetched\": 1657362929.620228, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"318801320\": {\"repository_manifest\": {\"name\": \"RKI Covid numbers\", \"zip_release\": true, \"filename\": \"rki_covid.zip\", \"country\": \"DE\", \"homeassistant\": \"0.110.0\"}, \"authors\": [\"@thebino\"], \"category\": \"integration\", \"description\": \" \\ud83e\\udda0 Custom integration for Home Assistant to monitor covid numbers provided by Robert-Koch Institut\", \"domain\": \"rki_covid\", \"downloads\": 1330, \"etag_repository\": \"W/\\\"a2ae5be645a7a5e708f784c0c400fe9c35d59c9eb2043138291fcf4c90ef9071\\\"\", \"full_name\": \"thebino/rki_covid\", \"last_updated\": \"2022-02-21T21:40:25Z\", \"stargazers_count\": 38, \"topics\": [\"automation\", \"custom\"], \"last_fetched\": 1653229924.734623, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"188323494\": {\"repository_manifest\": {\"name\": \"Ha Floorplan\", \"filename\": \"floorplan.js\"}, \"category\": \"plugin\", \"description\": \"Bring new life to Home Assistant. By mapping entities to a SVG-object, you're able to control devices, show states, calling services - and much more. Add custom styling on top, to visualize whatever you can think of. Your imagination just become the new limit.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"bb0df7da27b210c6a7d6e4eddc8886d967c8da49309fc134e4e8fa9fdd537bb0\\\"\", \"full_name\": \"ExperienceLovelace/ha-floorplan\", \"last_updated\": \"2022-06-10T12:20:18Z\", \"stargazers_count\": 502, \"topics\": [\"floorplan\", \"lovelace-card\", \"lovelace-floorplan\", \"panel\"], \"last_fetched\": 1657362464.331058, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"318359434\": {\"repository_manifest\": {\"name\": \"keymaster\", \"zip_release\": true, \"filename\": \"keymaster.zip\", \"homeassistant\": \"2022.4.0\"}, \"authors\": [\"@FutureTense\", \"@firstof9\", \"@raman325\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for managing Z-Wave enabled locks\", \"domain\": \"keymaster\", \"downloads\": 1819, \"etag_repository\": \"W/\\\"225600ed760b52ed349230967be1465375d0e669dbc2e010af79685d55d88fb0\\\"\", \"full_name\": \"FutureTense/keymaster\", \"last_updated\": \"2022-06-21T15:05:24Z\", \"stargazers_count\": 118, \"topics\": [\"keymaster\", \"locks\", \"zwave\", \"zwave-enabled-locks\"], \"last_fetched\": 1656967939.222082, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"325097827\": {\"repository_manifest\": {\"name\": \"MegaD\", \"country\": \"RU\", \"persistent_directory\": \"userfiles\", \"render_readme\": true}, \"authors\": [\"@andvikt\"], \"category\": \"integration\", \"description\": \"MegaD HomeAssistant integration\", \"domain\": \"mega\", \"etag_repository\": \"W/\\\"0a00027bcacfe08f2172c078b9bf3b6123cefd6a7d817844ae70857afc3f9066\\\"\", \"full_name\": \"andvikt/mega_hacs\", \"last_updated\": \"2022-06-02T04:50:17Z\", \"stargazers_count\": 82, \"topics\": [\"custom-integration\", \"megad\"], \"last_fetched\": 1656859053.835981, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"325635211\": {\"repository_manifest\": {\"name\": \"dobiss\", \"hacs\": \"1.6.0\", \"homeassistant\": \"0.118.0\"}, \"authors\": [\"@kesteraernoudt\"], \"category\": \"integration\", \"description\": \"Custom Home Assistant Integration for the Dobiss NXT platform\", \"domain\": \"dobiss\", \"etag_repository\": \"W/\\\"5cf72dc8b506c35a53452f9218391dbfd870cdf09ad57b9f3b99b3ead7da447f\\\"\", \"full_name\": \"kesteraernoudt/dobiss\", \"last_updated\": \"2022-01-07T18:24:35Z\", \"stargazers_count\": 2, \"last_fetched\": 1641587982.004159, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"311913208\": {\"repository_manifest\": {\"name\": \"Gecko\", \"hacs\": \"0.24.0\", \"homeassistant\": \"0.115.0\"}, \"authors\": [\"@gazoodle\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for spas equipped with Gecko Alliance in.touch2 modules\", \"domain\": \"gecko\", \"etag_repository\": \"W/\\\"808644c9720d8e2519bf2bdfe9c2672084f4e38d727b2370b92b9a93acb9b61a\\\"\", \"full_name\": \"gazoodle/gecko-home-assistant\", \"last_updated\": \"2022-04-25T08:50:44Z\", \"stargazers_count\": 30, \"topics\": [\"gecko\", \"home-assistant-integration\", \"hot-tub\", \"intouch2\", \"jacuzzi\", \"spa\"], \"last_fetched\": 1653229723.175741, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"299556199\": {\"repository_manifest\": {\"name\": \"Mercedes Me API\", \"homeassistant\": \"0.100.0\"}, \"authors\": [\"@xraver\"], \"category\": \"integration\", \"description\": \"Script to use Mercedes Me APIs.\", \"domain\": \"mercedesmeapi\", \"etag_repository\": \"W/\\\"085926daed1ba38e46031471d34685c820d3c9030cafe21a71513b538c31b8cb\\\"\", \"full_name\": \"xraver/mercedes_me_api\", \"last_updated\": \"2021-02-04T08:01:28Z\", \"stargazers_count\": 35, \"topics\": [\"mercedes\", \"mercedes-benz-car\"], \"last_fetched\": 1657362985.49276, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"303793543\": {\"repository_manifest\": {\"name\": \"Skydance\", \"country\": [\"EN\", \"CZ\"], \"render_readme\": true}, \"authors\": [\"@tomasbedrich\"], \"category\": \"integration\", \"description\": \"A Home Assistant integration for communication with Skydance lighting WiFi relay.\", \"domain\": \"skydance\", \"etag_repository\": \"W/\\\"ee17a58ed34f45ac732a8025079ca5884a8c682addff0f0bcd043fce7532ab6e\\\"\", \"full_name\": \"tomasbedrich/home-assistant-skydance\", \"last_updated\": \"2021-11-30T23:47:20Z\", \"stargazers_count\": 10, \"topics\": [\"networking\"], \"last_fetched\": 1648400076.531253, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"315447202\": {\"repository_manifest\": {\"name\": \"ytube_music_player\", \"render_readme\": true}, \"authors\": [\"@KoljaWindeler\"], \"category\": \"integration\", \"description\": \"YouTube music player for homeassistant\", \"domain\": \"ytube_music_player\", \"etag_repository\": \"W/\\\"1792d10a4ca62166d8ecc887a4f695decc73695caf7de53cf73ee8e25dd94588\\\"\", \"full_name\": \"KoljaWindeler/ytube_music_player\", \"last_updated\": \"2022-07-07T15:20:24Z\", \"stargazers_count\": 156, \"topics\": [\"youtube\"], \"last_fetched\": 1657362822.74798, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"157618389\": {\"repository_manifest\": {\"name\": \"fontawesome\", \"render_readme\": true, \"homeassistant\": \"2021.11.0b0\"}, \"category\": \"integration\", \"description\": \"\\ud83d\\udd39 Use icons from fontawesome in home-assistant\", \"domain\": \"fontawesome\", \"etag_repository\": \"W/\\\"ea91d10f7b43c37070331a6dd247e8e48980942588b064995945af5edcce3f50\\\"\", \"full_name\": \"thomasloven/hass-fontawesome\", \"last_updated\": \"2022-05-22T11:55:54Z\", \"stargazers_count\": 179, \"last_fetched\": 1656859403.70314, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"179808576\": {\"repository_manifest\": {\"name\": \"BHA Icon Pack\"}, \"category\": \"plugin\", \"description\": \"Additional icons for Home Assistant to accompany the MDI icons\", \"domain\": \"\", \"etag_repository\": \"W/\\\"8ac70c21d309530ec1b12b62581664e3d6fca30c6fff7697b3b9b457df48c7c7\\\"\", \"full_name\": \"hulkhaugen/hass-bha-icons\", \"last_updated\": \"2022-05-31T05:17:57Z\", \"stargazers_count\": 139, \"topics\": [\"icons\", \"iconset\"], \"last_fetched\": 1656859562.487731, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"237620254\": {\"repository_manifest\": {\"name\": \"todoist-task-list\", \"content_in_root\": true, \"render_readme\": true, \"filename\": \"todoist-task-list.js\"}, \"category\": \"plugin\", \"description\": \"This is a custom lovelace card for displaying a todoist calendar in Home Assistant.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"0b23f2994406c5ecf139ad5126e1268b6f975ddad2750667c33753b8afdc72c4\\\"\", \"full_name\": \"tholgir/TodoIst-Task-List\", \"last_updated\": \"2021-04-25T07:36:09Z\", \"stargazers_count\": 10, \"topics\": [\"lovelace-custom-card\", \"todoist\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"328957716\": {\"repository_manifest\": {\"name\": \"Time Elapsed Card\", \"render_readme\": true, \"filename\": \"elapsed-time-card.js\"}, \"category\": \"plugin\", \"description\": \"Home Assistant Lovelace Custom Card to calculate time elapsed/left\", \"domain\": \"\", \"etag_repository\": \"W/\\\"79c9a432efb2f08f7df374d30adac4cedec1733bf22981d0516545325b475d6c\\\"\", \"full_name\": \"Kirbo/ha-lovelace-elapsed-time-card\", \"last_updated\": \"2021-06-03T08:58:27Z\", \"stargazers_count\": 21, \"topics\": [\"lovelace-custom-card\"], \"last_fetched\": 1648398773.931235, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"328132422\": {\"repository_manifest\": {\"name\": \"Kodi Playlist Card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"This repository is used to contain the code of a kodi playlist card for Home Assistant and publish it via HACS\", \"domain\": \"\", \"etag_repository\": \"W/\\\"4147fa07edebd2a84b04219071922fc4f566ffea828a9a05cfa237896b43728e\\\"\", \"full_name\": \"jtbgroup/kodi-playlist-card\", \"last_updated\": \"2022-05-26T19:04:24Z\", \"stargazers_count\": 2, \"topics\": [\"kodi\"], \"last_fetched\": 1653733103.804067, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"331701152\": {\"repository_manifest\": {\"name\": \"apexcharts-card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udcc8 A Lovelace card to display advanced graphs and charts based on ApexChartsJS for Home Assistant\", \"domain\": \"\", \"downloads\": 13126, \"etag_repository\": \"W/\\\"970b26972c0224a67b0061a01b24561bc10671046fb81a48fd5226335ec7b8f7\\\"\", \"full_name\": \"RomRider/apexcharts-card\", \"last_updated\": \"2022-07-03T15:50:16Z\", \"stargazers_count\": 421, \"topics\": [\"apexcharts\", \"iot\"], \"last_fetched\": 1657362538.607841, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"327779379\": {\"repository_manifest\": {\"name\": \"Optus\"}, \"authors\": [\"@itchannel\"], \"category\": \"integration\", \"description\": \"Optus Mobile Home Assistant Integration\", \"domain\": \"optus\", \"etag_repository\": \"W/\\\"76247ea11beb07b89e9380811fd7f27d91be810b51b5969f11cb5b32288b4e5b\\\"\", \"full_name\": \"itchannel/optus-ha\", \"last_updated\": \"2021-06-13T00:40:48Z\", \"stargazers_count\": 3, \"topics\": [\"assistant\", \"mobile\", \"optus\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"257988102\": {\"repository_manifest\": {\"name\": \"Fully Kiosk Browser\", \"render_readme\": true, \"homeassistant\": \"2022.7.0b0\"}, \"authors\": [\"@cgarwood\"], \"category\": \"integration\", \"description\": \"Fully Kiosk Browser integration for Home Assistant\", \"domain\": \"fullykiosk\", \"etag_repository\": \"W/\\\"8ad932ce7893fd55af0d2f524088f8483604c4c68f05c7fbcd14031f8452c7e1\\\"\", \"full_name\": \"cgarwood/homeassistant-fullykiosk\", \"last_updated\": \"2022-06-30T17:10:23Z\", \"stargazers_count\": 122, \"topics\": [\"fully-kiosk-browser\"], \"last_fetched\": 1657362665.107007, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"328361159\": {\"repository_manifest\": {\"name\": \"ultimaker\", \"render_readme\": true}, \"authors\": [\"@jellespijker\"], \"category\": \"integration\", \"description\": \"Home-Assistant component for Ultimaker printers (UM3, S3, S5)\", \"domain\": \"ultimaker\", \"etag_repository\": \"W/\\\"a5fae255a4fa72434bd96b17903f7c53f71aa9825c4c75d4f6b0e2f2ffae39ac\\\"\", \"full_name\": \"jellespijker/home-assistant-ultimaker\", \"last_updated\": \"2022-06-07T18:51:42Z\", \"stargazers_count\": 10, \"topics\": [\"3d-printing\", \"home-assistant-component\", \"home-assistant-sensor\", \"s3\", \"s5\", \"ultimaker\", \"um3\"], \"last_fetched\": 1656859224.551707, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"326288498\": {\"repository_manifest\": {\"name\": \"worldtidesinfocustom\"}, \"authors\": [\"@jugla\"], \"category\": \"integration\", \"description\": \"world tides info custom component for home assistant\", \"domain\": \"worldtidesinfocustom\", \"etag_repository\": \"W/\\\"61bc733ee78dd8c83f65d5214e80bd412582224f0e0d0b50a439304194ce0ef8\\\"\", \"full_name\": \"jugla/worldtidesinfocustom\", \"last_updated\": \"2022-05-28T18:30:30Z\", \"stargazers_count\": 16, \"topics\": [\"tides\", \"worldtides\"], \"last_fetched\": 1656859241.736035, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"330454534\": {\"repository_manifest\": {\"name\": \"La Marzocco Config Card\", \"render_readme\": true, \"filename\": \"lamarzocco-config-card.js\"}, \"category\": \"plugin\", \"description\": \"Lovelace card to configure network-connected La Marzocco espresso machines\", \"domain\": \"\", \"etag_repository\": \"W/\\\"834c5ba895093871d0278bf5d24283be5d0cbbf2041432f3a1080e985037af26\\\"\", \"full_name\": \"rccoleman/lovelace-lamarzocco-config-card\", \"last_updated\": \"2021-02-14T21:51:13Z\", \"stargazers_count\": 1, \"topics\": [\"automation\", \"espresso\", \"lamarzocco\", \"lovelace-card\", \"lovelace-custom-card\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"306822538\": {\"repository_manifest\": {\"name\": \"NSW Rural Fire Service - Fire Danger\", \"country\": [\"AU\"], \"homeassistant\": \"0.117.0\"}, \"authors\": [\"@exxamalte\"], \"category\": \"integration\", \"description\": \"Home Assistant Custom Component: NSW Rural Fire Service Fire Danger\", \"domain\": \"nsw_rural_fire_service_fire_danger\", \"etag_repository\": \"W/\\\"6015dffad130bb99d7f11ec0edd0674f3cae4514f70910e82a928c3889733357\\\"\", \"full_name\": \"exxamalte/home-assistant-custom-components-nsw-rural-fire-service-fire-danger\", \"last_updated\": \"2021-12-25T12:03:39Z\", \"stargazers_count\": 1, \"topics\": [\"fire-danger\", \"nsw\", \"rural-fire-service\"], \"last_fetched\": 1642520518.567378, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"291484700\": {\"repository_manifest\": {\"name\": \"Xiaomi Gateway 3\", \"render_readme\": true}, \"authors\": [\"@AlexxIT\"], \"category\": \"integration\", \"description\": \"Control Zigbee, BLE and Mesh devices from Home Assistant with Xiaomi Gateway 3 on original firmware\", \"domain\": \"xiaomi_gateway3\", \"etag_repository\": \"W/\\\"ff91485e486506bd87129e3fa6518d613a634a8c049c343d52e70b8749178b66\\\"\", \"full_name\": \"AlexxIT/XiaomiGateway3\", \"last_updated\": \"2022-06-29T12:31:51Z\", \"stargazers_count\": 1474, \"topics\": [\"aqara\", \"ble\", \"mesh\", \"xiaomi\", \"zigbee\"], \"last_fetched\": 1657362613.362135, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"334523683\": {\"repository_manifest\": {\"name\": \"Teufel Raumfeld\", \"zip_release\": true, \"filename\": \"teufel_raumfeld.zip\"}, \"authors\": [\"@B5r1oJ0A9G\"], \"category\": \"integration\", \"description\": \"Integration for Teufel smart speaker (aka Raumfeld Multiroom) into https://www.home-assistant.io/.\", \"domain\": \"teufel_raumfeld\", \"downloads\": 278, \"etag_repository\": \"W/\\\"a3617fc8d7a10a16d8e00ab4dc4f3f6ff5782fe81960b678de6952d4469606fe\\\"\", \"full_name\": \"B5r1oJ0A9G/teufel_raumfeld\", \"last_updated\": \"2022-05-16T12:37:07Z\", \"stargazers_count\": 19, \"topics\": [\"hassfeld\", \"media-player\", \"multiroom\", \"multiroom-audio\", \"raumfeld\", \"smart-speaker\", \"teufel\"], \"last_fetched\": 1656859064.780766, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"276915021\": {\"repository_manifest\": {\"name\": \"Easee EV Charger\", \"homeassistant\": \"2022.5\", \"zip_release\": true, \"filename\": \"easee.zip\"}, \"authors\": [\"@fondberg\", \"@tmjo\", \"@olalid\", \"@astrandb\"], \"category\": \"integration\", \"description\": \"Custom component for Easee EV charger\", \"domain\": \"easee\", \"downloads\": 1255, \"etag_repository\": \"W/\\\"a3e6dd3cd0c39ccdf86906ffb175e4d6e9d558e32bc7336f451a72731d44c2ed\\\"\", \"full_name\": \"fondberg/easee_hass\", \"last_updated\": \"2022-06-21T19:41:47Z\", \"stargazers_count\": 96, \"topics\": [\"easee\", \"ev-charging\"], \"last_fetched\": 1657362745.014237, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"325755578\": {\"repository_manifest\": {\"name\": \"MercedesME 2020\"}, \"authors\": [\"@ReneNulschDE\"], \"category\": \"integration\", \"description\": \"Custom Component to integrate MercedesME devices into Home-Assistant\", \"domain\": \"mbapi2020\", \"etag_repository\": \"W/\\\"514ed7477c598dd99fbb13dc631bb8edcec14c317aa231d887648158af73021c\\\"\", \"full_name\": \"ReneNulschDE/mbapi2020\", \"last_updated\": \"2022-06-27T04:25:22Z\", \"stargazers_count\": 56, \"topics\": [\"car\", \"home-assistant-component\", \"lock\", \"switch\"], \"last_fetched\": 1657362910.790506, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"325962977\": {\"repository_manifest\": {\"name\": \"EMSC Earthquake RSS Feed\", \"hacs\": \"1.6.0\", \"homeassistant\": \"2021.12.2\"}, \"authors\": [\"@msekoranja\"], \"category\": \"integration\", \"description\": \"EMSC Home Assistant Integration\", \"domain\": \"emscrss\", \"etag_repository\": \"W/\\\"2139ba9554a8f94d188fc57635982f5243ea90a6903cc59da31dcb4db3407739\\\"\", \"full_name\": \"msekoranja/emsc-hacs-repository\", \"last_updated\": \"2022-02-09T23:26:15Z\", \"stargazers_count\": 3, \"last_fetched\": 1653733510.697532, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"319744131\": {\"repository_manifest\": {\"name\": \"TapHome\", \"render_readme\": true, \"homeassistant\": \"2021.7.0\", \"content_in_root\": true}, \"authors\": [\"@martindybal\"], \"category\": \"integration\", \"description\": \"TapHome integration into Home Assistant.\", \"domain\": \"taphome\", \"etag_repository\": \"W/\\\"5df9c745eab6656a0ff68a1b22217a07fc4e1037d3582d84c08f9007efc900b9\\\"\", \"full_name\": \"martindybal/taphome-homeassistant\", \"last_updated\": \"2022-06-29T17:54:16Z\", \"stargazers_count\": 6, \"topics\": [\"taphome\"], \"last_fetched\": 1656859287.343302, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"236611771\": {\"repository_manifest\": {\"name\": \"TDAmeritrade\", \"country\": \"US\", \"homeassistant\": \"2022.6.1\"}, \"authors\": [\"@PrairieSnpr\"], \"category\": \"integration\", \"description\": \"TDAmeritrade component for Home Assistant\", \"domain\": \"tdameritrade\", \"etag_repository\": \"W/\\\"e459917b4ca1dcd1932975222105e8eeb9d4fda65b63c945dbe85b31582a9e01\\\"\", \"full_name\": \"prairiesnpr/hass-tdameritrade\", \"last_updated\": \"2022-06-11T15:13:15Z\", \"stargazers_count\": 5, \"topics\": [\"tdameritrade\"], \"last_fetched\": 1656859340.44618, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"321172020\": {\"repository_manifest\": {\"name\": \"Litter-Robot\", \"render_readme\": true}, \"authors\": [\"@natekspencer\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for a Litter-Robot Connect self-cleaning litter box\", \"domain\": \"litterrobot\", \"etag_repository\": \"W/\\\"9cc00dc169650c071db9f4b4dd03ccb36469d6af166ef0594b5e682f6c5e6226\\\"\", \"full_name\": \"natekspencer/hacs-litterrobot\", \"last_updated\": \"2021-09-14T00:21:28Z\", \"stargazers_count\": 8, \"topics\": [\"homeassistant-custom-component\", \"litter-robot\", \"python3\"], \"last_fetched\": 1641217493.557287, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"335750566\": {\"repository_manifest\": {\"name\": \"Brandstofprijzen\", \"render_readme\": true, \"country\": [\"NL\"]}, \"authors\": [\"@metbril\"], \"category\": \"integration\", \"description\": \"Home Assistant component for fuel prices from United Consumers\", \"domain\": \"brandstofprijzen\", \"etag_repository\": \"W/\\\"14186f7013d6ef742621b08e4b734c8d56d2a8e36a17a130c169c35727324656\\\"\", \"full_name\": \"metbril/home-assistant-brandstofprijzen\", \"last_updated\": \"2022-06-22T03:06:28Z\", \"stargazers_count\": 6, \"last_fetched\": 1657362855.893595, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"332651510\": {\"repository_manifest\": {\"homeassistant\": \"2022.6\", \"name\": \"Baby Buddy\", \"render_readme\": true}, \"authors\": [\"@jcgoette\"], \"category\": \"integration\", \"description\": \"This custom integration provides sensors for Baby Buddy API endpoints.\", \"domain\": \"babybuddy\", \"etag_repository\": \"W/\\\"630cb761eef5c4bc3b74e1b525d5a64ef9542977a43c6d34ab4e20d3696d6b8e\\\"\", \"full_name\": \"jcgoette/baby_buddy_homeassistant\", \"last_updated\": \"2022-06-23T12:31:13Z\", \"stargazers_count\": 24, \"topics\": [\"baby\", \"home-assistant-component\", \"home-assistant-sensor\", \"parents\"], \"last_fetched\": 1656859222.868247, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"295523408\": {\"repository_manifest\": {\"name\": \"Salus iT600\", \"render_readme\": true}, \"authors\": [\"@jvitkauskas\"], \"category\": \"integration\", \"description\": \"Home Assistant integration with Salus devices\", \"domain\": \"salus\", \"etag_repository\": \"W/\\\"57989d2ec416b171e1172a4eeb970259454a07203b5def566efd078f8ca3295f\\\"\", \"full_name\": \"jvitkauskas/homeassistant_salus\", \"last_updated\": \"2022-03-04T21:47:22Z\", \"stargazers_count\": 24, \"last_fetched\": 1656859243.57101, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"327695137\": {\"repository_manifest\": {\"homeassistant\": \"2021.1.3\", \"name\": \"Kodi Media Sensors\", \"render_readme\": true}, \"authors\": [\"@boralyl\", \"@Gautier Vanderslyen\"], \"category\": \"integration\", \"description\": \"Custom component to feed multiple sensors in Home Assistan and so custom cards can be to display those sensors. This repository is a fork of https://github.com/boralyl/kodi-recently-added\", \"domain\": \"kodi_media_sensors\", \"etag_repository\": \"W/\\\"0ce9bcb7825c8e69eac9c37af5e2af1f9c27bcf0836793febb30f9b96868fb84\\\"\", \"full_name\": \"jtbgroup/kodi-media-sensors\", \"last_updated\": \"2022-02-23T22:26:09Z\", \"stargazers_count\": 3, \"topics\": [\"home-assistant-component\", \"homeassistant-custom-component\", \"kodi\", \"playlist\", \"playlists\", \"pyth\"], \"last_fetched\": 1648399993.641915, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"334284822\": {\"repository_manifest\": {\"name\": \"AWS Codepipeline\"}, \"authors\": [\"@rj175\"], \"category\": \"integration\", \"description\": \"An integration to monitor and execute AWS Codepipeline projects within Home Assistant.\", \"domain\": \"aws_codepipeline\", \"etag_repository\": \"W/\\\"dd3f1ad21b89814df953d20283c07dc9f11f767559ec92689570207215d03888\\\"\", \"full_name\": \"rj175/home-assistant-aws-codepipeline\", \"last_updated\": \"2021-01-30T22:52:54Z\", \"stargazers_count\": 1, \"topics\": [\"aws\", \"ci\", \"cloud\", \"codepipeline\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"232424544\": {\"repository_manifest\": {\"name\": \"Bosch Smart Home Controller (SHC) integration\", \"homeassistant\": \"2021.1.5\"}, \"authors\": [\"@tschamm\"], \"category\": \"integration\", \"description\": \"Home Assistant component for accessing Bosch Smart Home Controller using boschshcpy python library.\", \"domain\": \"bosch_shc\", \"etag_repository\": \"W/\\\"378cc268bd98c3341420f3e15731ffe9d1d352cc2880f437882b8730a9a06eeb\\\"\", \"full_name\": \"tschamm/boschshc-hass\", \"last_updated\": \"2022-04-16T10:43:33Z\", \"stargazers_count\": 47, \"topics\": [\"bosch-smart-home\", \"boschshcpy\", \"home-assistant-component\", \"smart-home\"], \"last_fetched\": 1656859421.916601, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"328671547\": {\"repository_manifest\": {\"name\": \"wattio\", \"homeassistant\": \"0.96.0\", \"render_readme\": true}, \"authors\": [\"@dmoranf\"], \"category\": \"integration\", \"description\": \"Wattio Smart Home custom integration for Home Assistant\", \"domain\": \"wattio\", \"etag_repository\": \"W/\\\"63d645f3dd5184c7cc13cfc9e5be72af788278c459b0b44695fcd1c91ab122ee\\\"\", \"full_name\": \"dmoranf/home-assistant-wattio\", \"last_updated\": \"2021-06-04T07:27:56Z\", \"stargazers_count\": 4, \"topics\": [\"home-assistant-component\", \"wattio\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"326220257\": {\"repository_manifest\": {\"name\": \"Viomi Robot Vacuum Cleaner SE (V-RVCLM21A)\", \"country\": [\"FR\", \"PL\", \"PT\"], \"zip_release\": true, \"filename\": \"viomi_se.zip\"}, \"category\": \"integration\", \"description\": \"Hacky Home assistant support for Viomi SE (V-RVCLM21A)\", \"domain\": \"viomise\", \"downloads\": 164, \"etag_repository\": \"W/\\\"c83efa18fc84385915df0ac6ab86c25e212aa10017b7d06cc038e5ec62975c6f\\\"\", \"full_name\": \"marotoweb/home-assistant-vacuum-viomise\", \"last_updated\": \"2022-06-29T18:36:07Z\", \"stargazers_count\": 14, \"topics\": [\"robot-vacuum\", \"vacuum\", \"viomi\"], \"last_fetched\": 1656859287.440091, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"325470745\": {\"repository_manifest\": {\"name\": \"Xiaomi MIoT\", \"render_readme\": true}, \"authors\": [\"@ha0y\"], \"category\": \"integration\", \"description\": \"All-in-one & Easy-to-use. Integrate all your Xiaomi Smart Home - with a single integration and NO YAML files - into Home Assistant.\", \"domain\": \"xiaomi_miot_raw\", \"etag_repository\": \"W/\\\"0e7f08bc862d9d866486c53f42faa24e1b5ec43b91195baeddb6a0e210f879e4\\\"\", \"full_name\": \"ha0y/xiaomi_miot_raw\", \"last_updated\": \"2022-06-10T18:37:26Z\", \"stargazers_count\": 1546, \"topics\": [\"home-assistant-addons\", \"miot\", \"miot-protocol\", \"xiaomi\", \"xiaomi-miot\"], \"last_fetched\": 1657362765.416447, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"186605347\": {\"repository_manifest\": {\"name\": \"Bosch thermostat\", \"homeassistant\": \"2022.6.0\", \"render_readme\": true}, \"authors\": [\"@pszafer\"], \"category\": \"integration\", \"description\": \"HA custom component for Bosch thermostats\", \"domain\": \"bosch\", \"etag_repository\": \"W/\\\"fc554c72148a041ef51953f1e1f055dd3a62e06fc92d3f7ebb553908cf66392c\\\"\", \"full_name\": \"bosch-thermostat/home-assistant-bosch-custom-component\", \"last_updated\": \"2022-07-01T20:23:22Z\", \"stargazers_count\": 83, \"topics\": [\"bosch\", \"bosch-thermostat\", \"buderus\", \"nefit\", \"sensors\", \"thermostat\", \"xmpp\"], \"last_fetched\": 1656859076.639108, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"100234318\": {\"repository_manifest\": {\"name\": \"Xiaomi Philips Lights Integration\", \"render_readme\": true}, \"authors\": [\"@syssi\"], \"category\": \"integration\", \"description\": \"Xiaomi Philips Lights integration for Home Assistant\", \"domain\": \"xiaomi_miio_philipslight\", \"etag_repository\": \"W/\\\"7233aedc5bda8e5921304b3e4d72b38c34e142b5358c0128a216e69ddf2cc96e\\\"\", \"full_name\": \"syssi/philipslight\", \"last_updated\": \"2022-03-27T12:21:36Z\", \"stargazers_count\": 60, \"topics\": [\"light\", \"miio\", \"miio-protocol\", \"xiaomi\", \"xiaomi-philips-lights\"], \"last_fetched\": 1653229917.617178, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"332911333\": {\"repository_manifest\": {\"name\": \"Irrigation Unlimited\", \"homeassistant\": \"2022.1.0\"}, \"authors\": [\"@rgc99\"], \"category\": \"integration\", \"description\": \"\\u2652Irrigation controller for Home Assistant\", \"domain\": \"irrigation_unlimited\", \"etag_repository\": \"W/\\\"06ec1f2d4b34b9bd27a46b05c879f7a5188f85e889e70fcb8c034cdafbee61ff\\\"\", \"full_name\": \"rgc99/irrigation_unlimited\", \"last_updated\": \"2022-06-26T03:42:53Z\", \"stargazers_count\": 152, \"topics\": [\"garden-automation\", \"irrigation\", \"irrigation-control-system\", \"irrigation-controller\", \"sprinkler-controller\", \"water\", \"watering-controller\", \"watering-system\"], \"last_fetched\": 1657362910.984118, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"313850121\": {\"repository_manifest\": {\"name\": \"Xiaomi Miio For Yeelink\", \"render_readme\": true}, \"authors\": [\"@al-one\"], \"category\": \"integration\", \"description\": \"Xiaomi Miio Yeelink/Yeelight devices for Home Assistant\", \"domain\": \"miio_yeelink\", \"downloads\": 32, \"etag_repository\": \"W/\\\"670adeeb0eb365332bf959a20f233ce3591350233ccb8e3615105c61093abe65\\\"\", \"full_name\": \"al-one/hass-miio-yeelink\", \"last_updated\": \"2022-05-18T10:19:20Z\", \"stargazers_count\": 105, \"topics\": [\"miio\", \"miot\", \"xiaomi\", \"yeelight\", \"yeelink\"], \"last_fetched\": 1656859040.310961, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"318182014\": {\"repository_manifest\": {\"name\": \"Xiaomi Miot Auto\", \"zip_release\": true, \"filename\": \"xiaomi_miot.zip\", \"render_readme\": true}, \"authors\": [\"@al-one\"], \"category\": \"integration\", \"description\": \"Automatic integrate all Xiaomi devices to HomeAssistant via miot-spec, support Wi-Fi, BLE, ZigBee devices.\", \"domain\": \"xiaomi_miot\", \"downloads\": 5518, \"etag_repository\": \"W/\\\"f43edf05130c8d534cfbfa0a06d4c3a798be196f404ec6c4fec3a93b55e5262b\\\"\", \"full_name\": \"al-one/hass-xiaomi-miot\", \"last_updated\": \"2022-07-07T14:11:03Z\", \"stargazers_count\": 1352, \"topics\": [\"iot\", \"miio\", \"miot\", \"miot-spec\", \"smart-home\", \"xiaoai\", \"xiaomi\", \"xiaomi-miot\"], \"last_fetched\": 1657362610.121072, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"335019855\": {\"repository_manifest\": {\"name\": \"LinakDesk Card\", \"render_readme\": true, \"filename\": \"linak-desk-card.js\"}, \"category\": \"plugin\", \"description\": \"Home Assistant Lovelace Card for controlling desks based on linak bluetooth controller.\", \"domain\": \"\", \"downloads\": 223, \"etag_repository\": \"W/\\\"1e8e84858a714cd284b30f32920fdc721b12e2b1ba6d6bd3988486f768e91955\\\"\", \"full_name\": \"IhorSyerkov/linak-desk-card\", \"last_updated\": \"2022-06-29T03:47:13Z\", \"stargazers_count\": 26, \"topics\": [\"linak-desk-card\"], \"last_fetched\": 1656859567.100325, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"337387822\": {\"repository_manifest\": {\"name\": \"Hella ONYX.CENTER\", \"homeassistant\": \"2021.11.5\", \"render_readme\": true}, \"authors\": [\"@muhlba91\"], \"category\": \"integration\", \"description\": \"Home Assistant integration (HACS) for Hella's ONYX.CENTER appliance\", \"domain\": \"hella_onyx\", \"etag_repository\": \"W/\\\"6229887c7aa4db86e91ce26c0ebf8a1106feaf4f538e968da374f3e79a0bf202\\\"\", \"full_name\": \"muhlba91/onyx-homeassistant-integration\", \"last_updated\": \"2021-11-24T14:52:27Z\", \"stargazers_count\": 2, \"topics\": [\"hella\", \"onyx\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"320324937\": {\"repository_manifest\": {\"name\": \"Veolia\", \"hacs\": \"0.24.0\", \"homeassistant\": \"0.115.0\", \"country\": [\"FR\"]}, \"authors\": [\"@tetienne\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component to retrieve information from Veolia \", \"domain\": \"veolia\", \"etag_repository\": \"W/\\\"d66e0095b5fdc9eb895a5d0a9b29baaef004aba9491474e253ae9e5f138f3b9f\\\"\", \"full_name\": \"tetienne/veolia-custom-component\", \"last_updated\": \"2021-12-22T07:52:40Z\", \"stargazers_count\": 1, \"topics\": [\"home-assistant-component\", \"veolia\"], \"last_fetched\": 1644064245.881927, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"335713085\": {\"repository_manifest\": {\"name\": \"Todoist Card\", \"content_in_root\": true, \"filename\": \"todoist-card.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Todoist card for Home Assistant Lovelace UI.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"6a900c840637893fefdbd5bb67746539a68688d78a6601edcd5530b6cb38d452\\\"\", \"full_name\": \"grinstantin/todoist-card\", \"last_updated\": \"2022-07-01T09:38:33Z\", \"stargazers_count\": 27, \"topics\": [\"todoist\"], \"last_fetched\": 1656859558.917071, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"334076222\": {\"repository_manifest\": {\"name\": \"AstroWeather\", \"render_readme\": true}, \"authors\": [\"@mawinkler\"], \"category\": \"integration\", \"description\": \"Asynchronous Astro Weather Forecast for Home Assistant\", \"domain\": \"astroweather\", \"etag_repository\": \"W/\\\"9c3d68168ed180d6f3a3de79eb2de924e834a8950665eecc57b745707a5d3977\\\"\", \"full_name\": \"mawinkler/astroweather\", \"last_updated\": \"2022-06-18T13:22:23Z\", \"stargazers_count\": 18, \"topics\": [\"7timer\", \"astronomy\", \"forecast\"], \"last_fetched\": 1656859291.48854, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"339464185\": {\"repository_manifest\": {\"name\": \"Weishaupt WEM Portal\"}, \"authors\": [\"@erikkastelec\"], \"category\": \"integration\", \"description\": \"Custom component for retrieving sensor information from Weishaupt WEM Portal\", \"domain\": \"wemportal\", \"etag_repository\": \"W/\\\"ef167401117a37e5f65c1a1319305905cbadcb8ed42bcd1d273fbb2083453da7\\\"\", \"full_name\": \"erikkastelec/hass-WEM-Portal\", \"last_updated\": \"2022-06-13T07:02:22Z\", \"stargazers_count\": 15, \"topics\": [\"weishaupt\", \"wem-portal\"], \"last_fetched\": 1656859168.558051, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"152294445\": {\"repository_manifest\": {\"name\": \"Remote Home-Assistant\", \"render_readme\": true}, \"authors\": [\"@lukas-hetzenecker\"], \"category\": \"integration\", \"description\": \"Links multiple home-assistant instances together\", \"domain\": \"remote_homeassistant\", \"etag_repository\": \"W/\\\"854d5c7b2b9add392a3ea9d4be9cbcfaa9b07f542a5defa60bc3944de1e1357c\\\"\", \"full_name\": \"custom-components/remote_homeassistant\", \"last_updated\": \"2022-07-09T05:30:27Z\", \"stargazers_count\": 482, \"last_fetched\": 1657362682.016013, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"342026799\": {\"repository_manifest\": {\"name\": \"Pollen Information Hungary\", \"country\": [\"HU\"], \"render_readme\": \"true\"}, \"authors\": [\"@amaximus\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for Pollen Information in Hungary\", \"domain\": \"pollen_hu\", \"etag_repository\": \"W/\\\"5f2ce1eb392cc50b0ee01b8ff8e59b0eac2ef7ce71a2ab45704cc1b189198140\\\"\", \"full_name\": \"amaximus/pollen_hu\", \"last_updated\": \"2021-12-19T18:02:47Z\", \"stargazers_count\": 6, \"topics\": [\"homeassistant-custom-component\", \"hungary\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"338782385\": {\"repository_manifest\": {\"name\": \"Compal WiFi\", \"country\": \"CH\", \"zip_release\": true, \"filename\": \"compal_wifi.zip\", \"render_readme\": true}, \"authors\": [\"@frimtec\"], \"category\": \"integration\", \"description\": \"Home Assistant component to switch WiFi on/off for Compal CH7465LG modem.\", \"domain\": \"compal_wifi\", \"downloads\": 1, \"etag_repository\": \"W/\\\"aa451b3c82367d440cd0665a858968fdb4ca083fa6b2c6d8671e61374b05c98a\\\"\", \"full_name\": \"frimtec/hass-compal-wifi\", \"last_updated\": \"2022-05-28T07:43:32Z\", \"stargazers_count\": 1, \"topics\": [\"ch7465lg\", \"compal\", \"compal-wifi-switch\", \"switch\", \"wifi\", \"wlan\"], \"last_fetched\": 1653733397.983639, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"323346718\": {\"repository_manifest\": {\"name\": \"AwoX MESH control\", \"homeassistant\": \"2021.11.0\", \"render_readme\": true}, \"authors\": [\"@fsaris\"], \"category\": \"integration\", \"description\": \"AwoX mesh light integration for Home Assistant\", \"domain\": \"awox\", \"etag_repository\": \"W/\\\"c3b8cd3a4919f20fee78e78fc2d23d69415bd43bf9f41081c3e4b0b2f00b903d\\\"\", \"full_name\": \"fsaris/home-assistant-awox\", \"last_updated\": \"2022-05-26T11:29:46Z\", \"stargazers_count\": 35, \"topics\": [\"awox\", \"bluetooth\", \"eglo\"], \"last_fetched\": 1656859181.25401, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"339124227\": {\"repository_manifest\": {\"name\": \"Zonneplan ONE\", \"homeassistant\": \"2021.12.0\", \"render_readme\": true, \"country\": \"NL\"}, \"authors\": [\"@fsaris\"], \"category\": \"integration\", \"description\": \"Unofficial Zonneplan ONE + connect integration for Home Assistant\", \"domain\": \"zonneplan_one\", \"etag_repository\": \"W/\\\"1a2fb2d669e7c00bb0ee112cb9d4819d095c75504b4a0ab58c9fbc03c9e619d6\\\"\", \"full_name\": \"fsaris/home-assistant-zonneplan-one\", \"last_updated\": \"2022-05-26T04:53:13Z\", \"stargazers_count\": 25, \"topics\": [\"home-assistant-component\", \"zonneplan\", \"zonneplan-connect\", \"zonneplan-one\"], \"last_fetched\": 1656859181.312413, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"309178213\": {\"repository_manifest\": {\"name\": \"controlid\", \"render_readme\": \"true\"}, \"authors\": [\"@jadson179\"], \"category\": \"integration\", \"description\": \"home-assistant service  for  control the controlid \\ud83d\\udeaa\\ud83d\\udd11\", \"domain\": \"controlid\", \"etag_repository\": \"W/\\\"157a972d436f022c90c2f64c612b63af4c51a7ffc8c3a8fb0f0a3ecf2e2f22c3\\\"\", \"full_name\": \"jadson179/controlid\", \"last_updated\": \"2021-06-24T16:29:59Z\", \"topics\": [\"controlid\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"340616586\": {\"repository_manifest\": {\"name\": \"Narodmon Cloud Integration\", \"hacs\": \"1.6.0\", \"homeassistant\": \"0.118.0\"}, \"authors\": [\"@Limych\"], \"category\": \"integration\", \"description\": \"Component to integrate Narodmon cloud into Home Assistant\", \"domain\": \"narodmon\", \"etag_repository\": \"W/\\\"22168a4188b4812f8211cb7e0b8b5426d973e470d820645962eded19558ba6a9\\\"\", \"full_name\": \"Limych/ha-narodmon\", \"last_updated\": \"2022-06-28T08:10:21Z\", \"stargazers_count\": 10, \"topics\": [\"home-assistant-component\", \"narodmon\", \"weather\"], \"last_fetched\": 1656859274.965482, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"340759468\": {\"repository_manifest\": {\"name\": \"NIWA Tides\", \"country\": \"NZ\", \"render_readme\": true}, \"authors\": [\"@muxa\"], \"category\": \"integration\", \"description\": \"Custom integration for Home Assistant to get New Zealand tide information from NIWA Tides API\", \"domain\": \"niwa_tides\", \"etag_repository\": \"W/\\\"9d36aa7e1abb85164595f24c0fc8fa28982149806bbd4097c8e5a73c25132aea\\\"\", \"full_name\": \"muxa/home-assistant-niwa-tides\", \"last_updated\": \"2022-03-12T21:41:22Z\", \"stargazers_count\": 4, \"topics\": [\"tides\"], \"last_fetched\": 1656859309.077192, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"259739166\": {\"repository_manifest\": {\"name\": \"Octopus Agile\", \"render_readme\": true}, \"authors\": [\"@markgdev\"], \"category\": \"integration\", \"description\": \"Octopus Agile custom component for Home Assistant\", \"domain\": \"octopusagile\", \"etag_repository\": \"W/\\\"4db3a057790824e0bf2cf1245aeeb458435988af4700800fcf9794a9cb3fccf8\\\"\", \"full_name\": \"markgdev/home-assistant_OctopusAgile\", \"last_updated\": \"2021-08-29T11:52:01Z\", \"stargazers_count\": 61, \"topics\": [\"energy\", \"octopus\", \"octopus-agile\", \"octopus-energy\"], \"last_fetched\": 1656859286.413408, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"319346850\": {\"repository_manifest\": {\"name\": \"Snowtire Sensor\", \"hacs\": \"1.6.0\", \"homeassistant\": \"0.118.0\"}, \"authors\": [\"@limych\"], \"category\": \"integration\", \"description\": \"Home Assistant sensor to predict if it's time to change car tires from summer to winter and vice versa.\", \"domain\": \"snowtire\", \"downloads\": 4, \"etag_repository\": \"W/\\\"0135602317d4898f2fa5200ce2fdeedada8550167b99a11f8bbf7ea370ee4440\\\"\", \"full_name\": \"Limych/ha-snowtire\", \"last_updated\": \"2022-06-28T13:08:50Z\", \"stargazers_count\": 21, \"topics\": [\"car-winter-tires\", \"home-assistant-component\", \"tires\"], \"last_fetched\": 1656859274.973059, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"236358405\": {\"repository_manifest\": {\"name\": \"Broadlink s2c and s1c sensors\", \"render_readme\": true, \"homeassistant\": \"0.112.0\"}, \"authors\": [\"@nick2525\"], \"category\": \"integration\", \"description\": \"Broadlink s2c and  Broadlink s1c sensors for Home Assistant\", \"domain\": \"broadlink_s1c\", \"etag_repository\": \"W/\\\"552d77089b8241b0f092162c8eae194d6c0659e359f2156ebe989c8ffaeff254\\\"\", \"full_name\": \"nick2525/broadlink_s1c_s2c\", \"last_updated\": \"2021-12-07T18:44:13Z\", \"stargazers_count\": 6, \"topics\": [\"broadlink\", \"hacz\", \"s1c\", \"s2c\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"342944383\": {\"repository_manifest\": {\"name\": \"Neerslag Card\", \"render_readme\": true, \"country\": [\"NL\", \"BE\"], \"filename\": \"neerslag-card.js\"}, \"category\": \"plugin\", \"description\": \"Display Buienalarm and/or Buienradar data in a graph for Home Assistant.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"8d02b972403453300f7c7474f14d91f9bde107102b6cbbc68d50c4af2d18b7ee\\\"\", \"full_name\": \"aex351/home-assistant-neerslag-card\", \"last_updated\": \"2022-07-08T17:22:48Z\", \"stargazers_count\": 21, \"last_fetched\": 1657362421.033821, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"341931266\": {\"repository_manifest\": {\"name\": \"Simple Clock Card\", \"content_in_root\": true, \"render_readme\": true, \"filename\": \"simple-clock-card.js\"}, \"category\": \"plugin\", \"description\": \"Simple clock card for Home assistant lovelace\", \"domain\": \"\", \"etag_repository\": \"W/\\\"edbfdc2e40319dba3bb19f203bcb3dc3825dae5d944837536c24bfb286c06849\\\"\", \"full_name\": \"fufar/simple-clock-card\", \"last_updated\": \"2021-05-21T10:50:38Z\", \"stargazers_count\": 23, \"topics\": [\"clock\", \"lovelace-custom-card\"], \"last_fetched\": 1653230035.71544, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"344636306\": {\"repository_manifest\": {\"name\": \"SAJ Inverter Modbus\", \"homeassistant\": \"2021.9.0\"}, \"authors\": [\"@wimb0\"], \"category\": \"integration\", \"description\": \"Home Assistant Component for reading data locally from SAJ (and Zonneplan) Inverters through modbus TCP.\", \"domain\": \"saj_modbus\", \"etag_repository\": \"W/\\\"b8f3c48985ed1d70e8cd368311a78c735e4899001463dabe54ddb4e3eb89e496\\\"\", \"full_name\": \"wimb0/home-assistant-saj-modbus\", \"last_updated\": \"2022-06-08T10:28:39Z\", \"stargazers_count\": 14, \"topics\": [\"saj-inverters\", \"saj-r5\", \"zonneplan\"], \"last_fetched\": 1656859439.197558, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"234961647\": {\"repository_manifest\": {\"name\": \"Climate Mode Entity Row\", \"filename\": \"climate-mode-entity-row.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Climate mode entity for Lovelace\", \"domain\": \"\", \"etag_repository\": \"W/\\\"4fb8a1422e5fa54366c4f1a63b390298571a342e093ed65ea25274162208a28b\\\"\", \"full_name\": \"piitaya/lovelace-climate-mode-entity-row\", \"last_updated\": \"2022-06-27T07:31:07Z\", \"stargazers_count\": 52, \"topics\": [\"card\", \"thermostat\"], \"last_fetched\": 1657362527.42025, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"293488791\": {\"repository_manifest\": {\"name\": \"Uonet+ Vulcan\", \"country\": \"PL\", \"render_readme\": true}, \"authors\": [\"@Antoni-Czaplicki\"], \"category\": \"integration\", \"description\": \"Vulcan inegration for home assistamt\", \"domain\": \"vulcan\", \"etag_repository\": \"W/\\\"b0e764eb7d104ff0979e046b41b01ef920fa5ed8dd1c14808375d0a818f7330a\\\"\", \"full_name\": \"Antoni-Czaplicki/vulcan-for-hassio\", \"last_updated\": \"2022-05-08T08:21:30Z\", \"stargazers_count\": 20, \"topics\": [\"timetable\", \"vulcan\"], \"last_fetched\": 1653229592.75048, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"341707887\": {\"repository_manifest\": {\"name\": \"Pollen Information Card for Hungary \", \"filename\": \"pollen-hu-card.js\", \"render_readme\": \"true\"}, \"category\": \"plugin\", \"description\": \"Home Assistant custom Lovelace card for pollen information in Hungary\", \"domain\": \"\", \"downloads\": 548, \"etag_repository\": \"W/\\\"57dc0bf34cf1e5054f52dee0d1aa5e171f7ddf34b33dac48765c90e522f9032c\\\"\", \"full_name\": \"amaximus/pollen-hu-card\", \"last_updated\": \"2022-06-03T06:29:32Z\", \"stargazers_count\": 8, \"topics\": [\"hungary\", \"lovelace-custom-card\"], \"last_fetched\": 1656859497.460331, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"342208616\": {\"repository_manifest\": {\"name\": \"Resol Deltasol KM2/DL2/DL3\", \"zip_release\": true, \"filename\": \"deltasol.zip\", \"render_readme\": true}, \"authors\": [\"@dm82m\"], \"category\": \"integration\", \"description\": \"Custom component for retrieving sensor information from Resol Deltasol KM2/DL2/DL3\", \"domain\": \"deltasol\", \"downloads\": 58, \"etag_repository\": \"W/\\\"5c0b25f629d22be3ea052cec4891c07ff0de1d22bad7f2babdc2af4de67d8ae5\\\"\", \"full_name\": \"dm82m/hass-Deltasol-KM2\", \"last_updated\": \"2022-02-23T07:48:52Z\", \"stargazers_count\": 6, \"topics\": [\"deltasol\", \"km2\"], \"last_fetched\": 1653733369.192526, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"330644825\": {\"repository_manifest\": {\"name\": \"Google Home\", \"homeassistant\": \"2022.6.0\", \"render_readme\": true}, \"authors\": [\"@leikoilja\", \"@DurgNomis-drol\", \"@ArnyminerZ\", \"@KapJI\"], \"category\": \"integration\", \"description\": \"Home Assistant Google Home custom component \", \"domain\": \"google_home\", \"etag_repository\": \"W/\\\"96226703dd8297a0cd3a1fa9078019cf4f23594b59f68eece2a7d65acea1d626\\\"\", \"full_name\": \"leikoilja/ha-google-home\", \"last_updated\": \"2022-07-04T14:19:06Z\", \"stargazers_count\": 261, \"topics\": [\"google-assistent\", \"google-home\"], \"last_fetched\": 1657362833.178001, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"211393677\": {\"repository_manifest\": {\"name\": \"Qubino Wire Pilot\", \"render_readme\": true, \"homeassistant\": \"0.96.0\"}, \"authors\": [\"@piitaya\"], \"category\": \"integration\", \"description\": \"Home Assistant Component for Qubino Wire Pilot\", \"domain\": \"qubino_wire_pilot\", \"etag_repository\": \"W/\\\"58ce8d80f3992d87b2cc42a2fe0fefa7b7a4be72a0e40c156da2a7cbdbef8def\\\"\", \"full_name\": \"piitaya/home-assistant-qubino-wire-pilot\", \"last_updated\": \"2022-01-07T13:01:40Z\", \"stargazers_count\": 10, \"topics\": [\"climate\", \"qubino\", \"qubino-wire-pilot\", \"thermostat\"], \"last_fetched\": 1653229857.87305, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"349455097\": {\"repository_manifest\": {\"name\": \"Ubee Router\", \"render_readme\": true}, \"authors\": [\"@mzdrale\", \"@kevinhaendel\"], \"category\": \"integration\", \"description\": \"This platform integrates Ubee Routers into Home Assistant.\", \"domain\": \"ubee\", \"etag_repository\": \"W/\\\"0c21ecec823114a11fb1fb3058dc05b1b4c4f717bdb7cce4eef67b7fe19e1cc1\\\"\", \"full_name\": \"kevinhaendel/ha-ubee\", \"last_updated\": \"2022-05-28T17:44:54Z\", \"stargazers_count\": 1, \"topics\": [\"ubee\"], \"last_fetched\": 1653824759.812442, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"157980832\": {\"repository_manifest\": {\"name\": \"Nob\\u00f8 Hub / Nob\\u00f8 Energy Control\", \"country\": \"NO\", \"render_readme\": true}, \"authors\": [\"@echoromeo\"], \"category\": \"integration\", \"description\": \"Home Assistant implementation of pynobo - to control Nob\\u00f8 / Glen Dimplex heaters\", \"domain\": \"nobo_hub\", \"etag_repository\": \"W/\\\"404be2ee6311376d08dc411fcaf5675283a6c3ef478b1b818668436d313dbda3\\\"\", \"full_name\": \"echoromeo/hanobo\", \"last_updated\": \"2022-03-07T18:12:58Z\", \"stargazers_count\": 22, \"topics\": [\"glen-dimplex\", \"heaters\", \"hvac\", \"nobo\"], \"last_fetched\": 1656859159.604121, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"340085507\": {\"repository_manifest\": {\"name\": \"SPZB0001 Thermostat\", \"render_readme\": true}, \"authors\": [\"@WolfRevo\"], \"category\": \"integration\", \"description\": \"A clone created from the Home Assistant generic_thermostat to use EUROTRONIC Zigbee SPZB0001 Thermostats with external temperature sensors\", \"domain\": \"spzb0001_thermostat\", \"etag_repository\": \"W/\\\"ca8d6540650f4ae1e938249b8d14434f9d451d62e254ccc282f9a868332dadca\\\"\", \"full_name\": \"WolfRevo/climate.spzb0001_thermostat\", \"last_updated\": \"2022-05-25T10:44:49Z\", \"stargazers_count\": 3, \"topics\": [\"thermostat\"], \"last_fetched\": 1653733638.358577, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"242528119\": {\"repository_manifest\": {\"name\": \"RuuviTag Sensor\", \"render_readme\": true}, \"authors\": [\"@smaisidoro\"], \"category\": \"integration\", \"description\": \"Ruuvi tag BLE sensor for Home Assistant.\", \"domain\": \"ruuvi\", \"etag_repository\": \"W/\\\"71b7248c7eb9677ead4544c233bba580398ad1978a09406546b9275605403335\\\"\", \"full_name\": \"ruuvi-friends/ruuvi-hass.io\", \"last_updated\": \"2022-01-25T13:23:39Z\", \"stargazers_count\": 35, \"topics\": [\"ruuvi-ble-devices\", \"ruuvitag\", \"ruuvitag-sensor\"], \"last_fetched\": 1657362927.862255, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"344660161\": {\"repository_manifest\": {\"name\": \"eGauge\", \"hacs\": \"1.6.0\", \"homeassistant\": \"2021.9.0\", \"render_readme\": true}, \"authors\": [\"@neggert\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for eGauge monitor\", \"domain\": \"egauge\", \"etag_repository\": \"W/\\\"7881c0a093e045d02a919a38a57c341505ae6048a3ce7447a949a47723c96362\\\"\", \"full_name\": \"neggert/hass-egauge\", \"last_updated\": \"2022-05-19T06:07:30Z\", \"stargazers_count\": 9, \"last_fetched\": 1653229843.216411, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"266595512\": {\"repository_manifest\": {\"name\": \"Casambi\"}, \"authors\": [\"@hellqvio86\"], \"category\": \"integration\", \"description\": \"Home assistant Integration for Casambi Cloud lights\", \"domain\": \"casambi\", \"etag_repository\": \"W/\\\"83bd70ef569a5d0624daa45097a86778d8c620342019938e029eca5dba9915e2\\\"\", \"full_name\": \"hellqvio86/home_assistant_casambi\", \"last_updated\": \"2022-06-16T11:30:24Z\", \"stargazers_count\": 15, \"topics\": [\"casambi\"], \"last_fetched\": 1657362768.394951, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"347143701\": {\"repository_manifest\": {\"name\": \"Channels DVR Recently Recorded\"}, \"authors\": [\"@rccoleman\"], \"category\": \"integration\", \"description\": \"\\u25b6\\ufe0f Channels DVR component to feed Upcoming Media Card.\", \"domain\": \"channels_dvr_recently_recorded\", \"etag_repository\": \"W/\\\"632cb7ecceb6006f5a9249de7466507ba4ee9b6b01cfcd6548ba11be5aeaa122\\\"\", \"full_name\": \"rccoleman/channels_dvr_recently_recorded\", \"last_updated\": \"2021-12-05T17:10:49Z\", \"stargazers_count\": 11, \"topics\": [\"channels-dvr\", \"homeassista\"], \"last_fetched\": 1643571245.264041, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"340664955\": {\"repository_manifest\": {\"name\": \"Proof Dashcam Integration\", \"country\": [\"IL\"], \"render_readme\": true}, \"authors\": [\"@dimagoltsman\"], \"category\": \"integration\", \"description\": \"HACS integration to proof.co.il dashcam\", \"domain\": \"proof\", \"etag_repository\": \"W/\\\"bf55041246f16b26dafae40aaa1e2cd6b1b261433a9a915447df745be7bc2e9f\\\"\", \"full_name\": \"dimagoltsman/ha-proof-dashcam-integration\", \"last_updated\": \"2021-03-13T18:43:28Z\", \"stargazers_count\": 1, \"topics\": [\"proof\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"309195773\": {\"repository_manifest\": {\"name\": \"vapix\", \"render_readme\": \"true\"}, \"authors\": [\"@jadson179\"], \"category\": \"integration\", \"description\": \"home-assistant service  for  control the vapix \\ud83d\\udeaa\\ud83d\\udd11\", \"domain\": \"vapix\", \"etag_repository\": \"W/\\\"3dd03325b6a91acdc1f6f9ff01c9039e9068355bece345815b0b57bccb37a05a\\\"\", \"full_name\": \"jadson179/vapix\", \"last_updated\": \"2021-06-22T11:49:49Z\", \"topics\": [\"axis\", \"services\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"350509867\": {\"repository_manifest\": {\"name\": \"Uptime Card\", \"render_readme\": true, \"filename\": \"uptime-card.js\"}, \"category\": \"plugin\", \"description\": \"Minimalistic uptime card for Home Assistant Lovelace UI\", \"domain\": \"\", \"downloads\": 2932, \"etag_repository\": \"W/\\\"5ac1b647ba6bd26ab7f2e610f345aabfce13ea5c3c95153d2bfdc057a251f47d\\\"\", \"full_name\": \"dylandoamaral/uptime-card\", \"last_updated\": \"2022-06-12T15:40:07Z\", \"stargazers_count\": 145, \"topics\": [\"card\", \"custom\", \"uptime\", \"uptime-card\"], \"last_fetched\": 1656859541.45606, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"164419416\": {\"repository_manifest\": {\"name\": \"Renault\", \"homeassistant\": \"0.115.0\"}, \"authors\": [\"@epenet\"], \"category\": \"integration\", \"description\": \"\\ud83d\\ude97 Renault ZE sensor for home assistant\", \"domain\": \"renault\", \"etag_repository\": \"W/\\\"57fc26d37f431b5944909a86ca6a0230b0fcfe03a17ca51289151a59c875e6e0\\\"\", \"full_name\": \"hacf-fr/hassRenaultZE\", \"last_updated\": \"2022-02-04T09:35:10Z\", \"stargazers_count\": 50, \"topics\": [\"renault\", \"renault-ze\", \"renault-zoe\"], \"last_fetched\": 1644420417.952351, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"356821955\": {\"repository_manifest\": {\"name\": \"Outline\", \"render_readme\": true, \"homeassistant\": \"2021.6.0b0\"}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 Home Assistant Theme: Outline\", \"domain\": \"\", \"etag_repository\": \"W/\\\"7c7c20de1f6104de739deea267312da065e9cf4d2c31505993a6e1f27a074cfc\\\"\", \"full_name\": \"frenck/home-assistant-theme-outline\", \"last_updated\": \"2022-05-30T08:50:16Z\", \"stargazers_count\": 23, \"topics\": [\"minimalistic\"], \"last_fetched\": 1656859460.121298, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"231829137\": {\"repository_manifest\": {\"name\": \"Noctis\"}, \"category\": \"theme\", \"description\": \"\\ud83d\\udc35 Dark Blue Theme for Home Assistant\", \"etag_repository\": \"W/\\\"eded9500f2eee2e7414004d41066ff3e5d9f28bd257392be4de595579bf53e26\\\"\", \"full_name\": \"aFFekopp/noctis\", \"last_updated\": \"2022-06-17T17:12:20Z\", \"stargazers_count\": 136, \"topics\": [\"dark-theme\", \"home-assistant-theme\"], \"last_fetched\": 1656843649.760645, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"234022648\": {\"repository_manifest\": {\"name\": \"Google Dark Theme\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 By JuanMTech -- A Home Assistant theme inspired on the Google app dark mode.\", \"etag_repository\": \"W/\\\"70db1ca508068a28a82f1a798e032685f9304bd71dc87856443a36baeba97b91\\\"\", \"full_name\": \"JuanMTech/google_dark_theme\", \"last_updated\": \"2022-06-19T17:48:35Z\", \"stargazers_count\": 141, \"last_fetched\": 1656859472.244481, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"326033921\": {\"repository_manifest\": {\"name\": \"Toggle Control Button Row\", \"filename\": \"toggle-control-button-row.js\"}, \"category\": \"plugin\", \"description\": \"A one-button control row for any Home Assistant binary entity\", \"domain\": \"\", \"etag_repository\": \"W/\\\"d32cd1457ddb093795891da28d052dddf9d97deb33671ad9680cfa18a097f3cd\\\"\", \"full_name\": \"finity69x2/toggle-control-button-row\", \"last_updated\": \"2022-06-29T15:21:52Z\", \"stargazers_count\": 11, \"topics\": [\"button\", \"plugin\", \"toggle\"], \"last_fetched\": 1656859551.411322, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"358962656\": {\"repository_manifest\": {\"name\": \"Notify Card\", \"content_in_root\": true, \"filename\": \"notify-card.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Send notifications directly from the dashboard\", \"domain\": \"\", \"etag_repository\": \"W/\\\"ffef0347f76f42652328dea867d4953fa0f549336f47b7d0ba0b2f9c8e96a9b5\\\"\", \"full_name\": \"bernikr/lovelace-notify-card\", \"last_updated\": \"2021-12-17T14:39:09Z\", \"stargazers_count\": 17, \"topics\": [\"card\", \"notification\", \"notifications\", \"notify\", \"service\"], \"last_fetched\": 1653229985.339994, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"351472550\": {\"repository_manifest\": {\"name\": \"Multiline Entity Card\", \"render_readme\": true, \"filename\": \"multiline-entity-card.js\"}, \"category\": \"plugin\", \"description\": \"A custom entity card for Home Assistant that allows text to span multiple lines.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"7973089393b5e20308c3922b7ac05c964e5f089e7ca9d29870bbec97ea4bd383\\\"\", \"full_name\": \"jampez77/Multiline-Entity-Card\", \"last_updated\": \"2022-04-11T09:27:19Z\", \"stargazers_count\": 11, \"topics\": [\"automation\"], \"last_fetched\": 1653230054.437192, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"229140999\": {\"repository_manifest\": {\"name\": \"go-eCharger\", \"render_readme\": true}, \"authors\": [\"@cathiele\"], \"category\": \"integration\", \"description\": \"Home Assistant custom_component for controlling the go-eCharger EV-Charger\", \"domain\": \"goecharger\", \"etag_repository\": \"W/\\\"6711db9fd5c6c16abcc1dab4fbdb55a3f7f2145549fe7d35f40a9c33939111ae\\\"\", \"full_name\": \"cathiele/homeassistant-goecharger\", \"last_updated\": \"2022-04-21T12:01:37Z\", \"stargazers_count\": 58, \"topics\": [\"charger\", \"component\", \"custom\", \"go-echarger\"], \"last_fetched\": 1656859093.251533, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"345753205\": {\"repository_manifest\": {\"name\": \"Fan Percent Button Row\", \"filename\": \"fan-percent-button-row.js\"}, \"category\": \"plugin\", \"description\": \"Frontend plugin to control fans in Home Assistant using percent values for speeds\", \"domain\": \"\", \"etag_repository\": \"W/\\\"023ab5ea178e47f0431ab763c93bad0a6bbcbea4083db597bb2d806d2e887f18\\\"\", \"full_name\": \"finity69x2/fan-percent-button-row\", \"last_updated\": \"2022-05-17T08:26:17Z\", \"stargazers_count\": 16, \"topics\": [\"assistant\", \"fan\", \"home\", \"percent\", \"plugin\", \"speed\"], \"last_fetched\": 1653230035.612044, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"343112953\": {\"repository_manifest\": {\"name\": \"Kodi Search Card\", \"render_readme\": true, \"filename\": \"kodi-search-card.js\"}, \"category\": \"plugin\", \"description\": \"Custom card for home assistant allowing to search in the libraries of kodi\", \"domain\": \"\", \"downloads\": 44, \"etag_repository\": \"W/\\\"dedd96055f2b43688c931294d2771340598ba5e2441fba42cbca4fdf535785e4\\\"\", \"full_name\": \"jtbgroup/kodi-search-card\", \"last_updated\": \"2022-05-29T05:17:55Z\", \"stargazers_count\": 8, \"topics\": [\"kodi\", \"kodi-media-sensors\"], \"last_fetched\": 1653824458.719086, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"350622451\": {\"repository_manifest\": {\"name\": \"\\u017badnego Ale\", \"homeassistant\": \"2022.2.0\", \"zip_release\": true, \"filename\": \"zadnego_ale.zip\", \"country\": \"PL\"}, \"authors\": [\"@bieniu\"], \"category\": \"integration\", \"description\": \"\\u017badnego Ale allergen concentration custom integration\", \"domain\": \"zadnego_ale\", \"downloads\": 213, \"etag_repository\": \"W/\\\"4d329f4a5712a942cdb20484e5b25599f601ffb00c4e268c9bef624112203081\\\"\", \"full_name\": \"bieniu/ha-zadnego-ale\", \"last_updated\": \"2022-05-16T00:48:27Z\", \"stargazers_count\": 14, \"topics\": [\"allergen\", \"allergy\"], \"last_fetched\": 1653229606.246532, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"330645002\": {\"repository_manifest\": {\"name\": \"Danfoss Ally\", \"render_readme\": true, \"homeassistant\": \"2022.1.0\", \"zip_release\": true, \"filename\": \"danfoss_ally.zip\"}, \"authors\": [\"@MTrab\"], \"category\": \"integration\", \"description\": \"Danfoss Ally intragration for Home Assistant\", \"domain\": \"danfoss_ally\", \"downloads\": 193, \"etag_repository\": \"W/\\\"2ddb8fa6bb1951ebf46fad883fc97ff2f0b7fd90c202d124c496bf7644769374\\\"\", \"full_name\": \"MTrab/danfoss_ally\", \"last_updated\": \"2022-05-29T12:37:26Z\", \"stargazers_count\": 11, \"topics\": [\"climate\", \"homeassistant-custom-component\", \"thermostat\"], \"last_fetched\": 1656859304.075322, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"356053801\": {\"repository_manifest\": {\"name\": \"IMA Protect Alarm\"}, \"authors\": [\"@pcourbin\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for IMA Protect Alarm\", \"domain\": \"imaprotect\", \"etag_repository\": \"W/\\\"f8c029b7f5ec646c4f4620552a56b2b9b6146c9bfe051c6bb24dff0a7745c4a3\\\"\", \"full_name\": \"pcourbin/imaprotect\", \"last_updated\": \"2022-01-06T09:15:13Z\", \"topics\": [\"alarm\"], \"last_fetched\": 1641470537.462143, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"354924085\": {\"repository_manifest\": {\"name\": \"Svenska Trygghetslosningar\", \"render_readme\": true, \"country\": [\"SE\"]}, \"authors\": [\"@gjohansson-ST\"], \"category\": \"integration\", \"description\": \"Svenska Trygghetsl\\u00f6sningar - Home Assistant\", \"domain\": \"stl\", \"etag_repository\": \"W/\\\"7d35e1269f9d75bfa751d4953e42ea31584b813c877c8d8eaa49047b20716560\\\"\", \"full_name\": \"gjohansson-ST/stl\", \"last_updated\": \"2021-12-19T15:21:38Z\", \"stargazers_count\": 1, \"topics\": [\"alarm\", \"stl\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"358505160\": {\"repository_manifest\": {\"name\": \"Weenect\", \"hacs\": \"1.6.0\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@eifinger\"], \"category\": \"integration\", \"description\": \"Homeassistant integration for weenect\", \"domain\": \"weenect\", \"etag_repository\": \"W/\\\"14711e4e41464e9b8182a47f23f2aafe6da1c74422fe40aae4a8a9d00f5b1ba8\\\"\", \"full_name\": \"eifinger/hass-weenect\", \"last_updated\": \"2022-01-11T06:30:20Z\", \"stargazers_count\": 2, \"topics\": [\"weenect\"], \"last_fetched\": 1641895915.721014, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"357338258\": {\"repository_manifest\": {\"name\": \"Temperature Feels Like\", \"hacs\": \"1.6.0\", \"homeassistant\": \"0.118.0\"}, \"authors\": [\"@Limych\"], \"category\": \"integration\", \"description\": \"Sensor of Temperature Feels Like for Home Assistant.\", \"domain\": \"temperature_feels_like\", \"downloads\": 17, \"etag_repository\": \"W/\\\"7e29ab025f348165f0998ea3b45df25dac2412b3b5b6ab6115c8d5c79637ac42\\\"\", \"full_name\": \"Limych/ha-temperature-feels-like\", \"last_updated\": \"2022-06-28T09:11:08Z\", \"stargazers_count\": 53, \"topics\": [\"home-assistant-climate\", \"home-assistant-component\", \"home-assistant-sensor\", \"home-assistant-temperature\", \"home-assistant-weather\"], \"last_fetched\": 1657362839.301117, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"299753146\": {\"repository_manifest\": {\"name\": \"Xiaomi Cloud Map Extractor\", \"render_readme\": true, \"zip_release\": true, \"filename\": \"xiaomi_cloud_map_extractor.zip\"}, \"authors\": [\"@PiotrMachowski\"], \"category\": \"integration\", \"description\": \"This custom integration provides a way to present a live view of a map for Xiaomi (Roborock/Viomi/Roidmi/Dreame) vacuums without a need for rooting.\", \"domain\": \"xiaomi_cloud_map_extractor\", \"downloads\": 10599, \"etag_repository\": \"W/\\\"bef7bd961c1510c6f939deb3f571a81cd20c4c55c74dbdc9d170d5cde5ec56b4\\\"\", \"full_name\": \"PiotrMachowski/Home-Assistant-custom-components-Xiaomi-Cloud-Map-Extractor\", \"last_updated\": \"2022-06-20T08:19:31Z\", \"stargazers_count\": 768, \"topics\": [\"cloud\", \"dreame\", \"map\", \"roborock\", \"robot\", \"roidmi\", \"vacuum\", \"vacuum-map\", \"viomi\", \"xiaomi\", \"xiaomi-smart-home\", \"xiaomi-vacuum\"], \"last_fetched\": 1657362899.76318, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"358585486\": {\"repository_manifest\": {\"name\": \"Multiscrape\", \"hacs\": \"1.6.0\", \"homeassistant\": \"2021.9.0\", \"render_readme\": true}, \"authors\": [\"@danieldotnl\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for scraping (html, xml or json) multiple values (from a single HTTP request) with a separate sensor/attribute for each value. Support for (login) form-submit functionality.\", \"domain\": \"multiscrape\", \"etag_repository\": \"W/\\\"7fcb2fb5a7d428d65beabb6fb51ac9bc2cd41f11844ee64675c66a1fcf595def\\\"\", \"full_name\": \"danieldotnl/ha-multiscrape\", \"last_updated\": \"2022-07-05T19:19:30Z\", \"stargazers_count\": 88, \"topics\": [\"rest\", \"scrape\", \"scraper\", \"scraping\"], \"last_fetched\": 1657362703.403341, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"264415552\": {\"repository_manifest\": {\"name\": \"Hive Custom Component\", \"render_readme\": true}, \"authors\": [\"@Rendili\", \"@KJonline\"], \"category\": \"integration\", \"description\": \"A custom version of the home assistant hive component\", \"domain\": \"hive\", \"etag_repository\": \"W/\\\"3ed8b58e3398a8af2ce3bd5c6984e553f0654ac494cbb28c2ab7b96d80ba7c82\\\"\", \"full_name\": \"Pyhass/Hive-Custom-Component\", \"last_updated\": \"2022-07-08T18:13:55Z\", \"stargazers_count\": 26, \"topics\": [\"hive\"], \"last_fetched\": 1657362905.3481, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"352399227\": {\"repository_manifest\": {\"name\": \"KNX User Forum Icon Set\", \"render_readme\": true, \"homeassistant\": \"2021.10\"}, \"category\": \"plugin\", \"description\": \"Icon set from KNX User Forum for Home Assistant. The icon set contains more than 900 icons for home automation.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"fb25fcae85ccad0837b860974e36a964f8cdc4364b9a113d509068e6afbc2f77\\\"\", \"full_name\": \"mampfes/ha-knx-uf-iconset\", \"last_updated\": \"2021-12-15T18:26:29Z\", \"stargazers_count\": 5, \"topics\": [\"icons\", \"iconset\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"308752409\": {\"repository_manifest\": {\"name\": \"Charger Card\", \"render_readme\": true, \"filename\": \"charger-card.js\"}, \"category\": \"plugin\", \"description\": \"A lovelace card for electrical vehicle (EV) home chargers and charging robots.\", \"domain\": \"\", \"downloads\": 1509, \"etag_repository\": \"W/\\\"da3af5b9a5e05323a5e9577de52482665bf77bcfb373edfa7c0b989dae895d04\\\"\", \"full_name\": \"tmjo/charger-card\", \"last_updated\": \"2022-06-17T17:16:29Z\", \"stargazers_count\": 46, \"topics\": [\"charger\", \"charging-robot\", \"easee\", \"elbil\", \"electric-vehicle\", \"evcharger\"], \"last_fetched\": 1657362551.840477, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"356725611\": {\"repository_manifest\": {\"name\": \"Wavin Sentio\", \"render_readme\": true}, \"authors\": [\"@djerik\"], \"category\": \"integration\", \"description\": \"Home Assistant component for monitoring and administration of Wavin Sentio underfloor heating system\", \"domain\": \"wavinsentio\", \"etag_repository\": \"W/\\\"c9df29603391eb9f29312370569f6c60810548827ea0070bed35112f97120919\\\"\", \"full_name\": \"djerik/wavinsentio-ha\", \"last_updated\": \"2022-04-03T12:20:43Z\", \"stargazers_count\": 6, \"topics\": [\"sentio\", \"wavin\"], \"last_fetched\": 1656859144.285726, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"362214884\": {\"repository_manifest\": {\"name\": \"Redfin\", \"homeassistant\": \"2021.6.0\"}, \"authors\": [\"@dreed47\"], \"category\": \"integration\", \"description\": \"Redfin property estimate Sensor for Home Assistant\", \"domain\": \"redfin\", \"etag_repository\": \"W/\\\"46e0148d5fd53a66b4d974ad8d2aece54b37f303c5ccaedbabc01756efbb0f3b\\\"\", \"full_name\": \"dreed47/redfin\", \"last_updated\": \"2021-06-14T19:28:05Z\", \"stargazers_count\": 9, \"topics\": [\"real-estate\", \"redfin\"], \"last_fetched\": 1653229690.658991, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"357930725\": {\"repository_manifest\": {\"name\": \"Shinobi Video NVR\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@elad-bar\"], \"category\": \"integration\", \"description\": \"Shinobi Video custom component for HA\", \"domain\": \"shinobi\", \"etag_repository\": \"W/\\\"ffda910b6d271af621edd780bcfb042de951ddaac5a7335c09b9abfee7f1b924\\\"\", \"full_name\": \"elad-bar/ha-shinobi\", \"last_updated\": \"2022-06-04T14:59:00Z\", \"stargazers_count\": 27, \"topics\": [\"shinobi\"], \"last_fetched\": 1656859167.994167, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"312080478\": {\"repository_manifest\": {\"name\": \"govee\", \"hacs\": \"0.2.2\", \"homeassistant\": \"2021.4.5\"}, \"authors\": [\"@LaggAt\"], \"category\": \"integration\", \"description\": \"A HACS repository for Govee light integration\", \"domain\": \"govee\", \"etag_repository\": \"W/\\\"e8e9a15f8ef387c5b462ea69884f6974a9e9bf9df182d842143f52d621aaaaa9\\\"\", \"full_name\": \"LaggAt/hacs-govee\", \"last_updated\": \"2022-06-09T18:27:12Z\", \"stargazers_count\": 118, \"topics\": [\"devcontainer\", \"govee\", \"light\"], \"last_fetched\": 1657362827.923444, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"279538782\": {\"repository_manifest\": {\"name\": \"Ecodevices RT2\"}, \"authors\": [\"@pcourbin\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for GCE Ecodevices RT2\", \"domain\": \"ecodevices_rt2\", \"etag_repository\": \"W/\\\"636a201ce28fd3000961b2318bd4a0ba24dc141d01dd624e494c8d52d048d075\\\"\", \"full_name\": \"pcourbin/ecodevices_rt2\", \"last_updated\": \"2022-01-06T09:15:40Z\", \"stargazers_count\": 1, \"last_fetched\": 1641470545.551656, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"342427139\": {\"repository_manifest\": {\"name\": \"openHASP\", \"hacs\": \"1.7.1\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@dgomes\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for openHASP\", \"domain\": \"openhasp\", \"etag_repository\": \"W/\\\"0c44a442a936951bc0096b08c493dc543d6f400e53eb86770ad7b0958101adfc\\\"\", \"full_name\": \"HASwitchPlate/openHASP-custom-component\", \"last_updated\": \"2022-05-14T19:28:08Z\", \"stargazers_count\": 26, \"topics\": [\"openhasp\"], \"last_fetched\": 1653229738.09562, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"363468409\": {\"repository_manifest\": {\"name\": \"RedPocket Mobile\", \"render_readme\": true}, \"authors\": [\"@mbillow\"], \"category\": \"integration\", \"description\": \"RedPocket Integration for Data Usage Monitoring\", \"domain\": \"redpocket\", \"etag_repository\": \"W/\\\"f0431903cbd0b5dea7cb2f7a212d0eb26c54164c783316392889f0c69aff5ea9\\\"\", \"full_name\": \"mbillow/ha-redpocket\", \"last_updated\": \"2021-06-06T19:51:29Z\", \"stargazers_count\": 1, \"topics\": [\"home\", \"mvno\", \"redpocket\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"356778495\": {\"repository_manifest\": {\"name\": \"WebRTC Camera\", \"render_readme\": true}, \"authors\": [\"@AlexxIT\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for viewing IP cameras RTSP stream in real time using WebRTC and MSE technology\", \"domain\": \"webrtc\", \"etag_repository\": \"W/\\\"89743b03a1ac769394ede855d1d420a164dd8d6cd3b6a792d330cd0a71bac0fc\\\"\", \"full_name\": \"AlexxIT/WebRTC\", \"last_updated\": \"2022-07-08T10:56:22Z\", \"stargazers_count\": 601, \"topics\": [\"ip-camera\", \"mediasource-extensions\", \"rtsp\", \"webrtc\"], \"last_fetched\": 1657362613.131706, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"356827073\": {\"repository_manifest\": {\"name\": \"OpenRGB\", \"render_readme\": true}, \"authors\": [\"@bahorn\", \"@koying\"], \"category\": \"integration\", \"description\": \"OpenRGB integration for Home Assistant\", \"domain\": \"openrgb\", \"etag_repository\": \"W/\\\"322c0f64b242a2581aa24fb919400fe1e8940ae397d4398307795dd0b4499a2a\\\"\", \"full_name\": \"koying/openrgb_ha\", \"last_updated\": \"2022-06-18T12:53:49Z\", \"stargazers_count\": 45, \"topics\": [\"light\", \"openrgb\"], \"last_fetched\": 1656859262.554331, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"341500126\": {\"repository_manifest\": {\"name\": \"Meross LAN\", \"render_readme\": true, \"country\": [\"IT\", \"UK\", \"US\", \"JP\", \"ES\", \"FR\", \"DE\"], \"homeassistant\": \"2021.4.0\", \"persistent_directory\": \"traces\", \"hacs\": \"1.6.0\"}, \"authors\": [\"@krahabb\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for Meross devices\", \"domain\": \"meross_lan\", \"etag_repository\": \"W/\\\"291e82367502916d03f9eb617bc1ce600c893aa3c2200af4a6521f7597920c61\\\"\", \"full_name\": \"krahabb/meross_lan\", \"last_updated\": \"2022-07-06T08:22:09Z\", \"stargazers_count\": 139, \"topics\": [\"meross\", \"meross-devices\", \"meross-homeassistant\", \"meross-lan\"], \"last_fetched\": 1657362822.825933, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"236572107\": {\"repository_manifest\": {\"name\": \"Yandex.Station\", \"render_readme\": true, \"country\": \"RU\"}, \"authors\": [\"@AlexxIT\"], \"category\": \"integration\", \"description\": \"\\u0423\\u043f\\u0440\\u0430\\u0432\\u043b\\u0435\\u043d\\u0438\\u0435 \\u042f\\u043d\\u0434\\u0435\\u043a\\u0441.\\u0421\\u0442\\u0430\\u043d\\u0446\\u0438\\u0435\\u0439 \\u0438 \\u0434\\u0440\\u0443\\u0433\\u0438\\u043c\\u0438 \\u043a\\u043e\\u043b\\u043e\\u043d\\u043a\\u0430\\u043c\\u0438 \\u0441 \\u0410\\u043b\\u0438\\u0441\\u043e\\u0439 \\u0438\\u0437 Home Assistant\", \"domain\": \"yandex_station\", \"etag_repository\": \"W/\\\"2c2ee080c05e043df723ad68f6eb4ff01b68f4ef450dfc12daac99312479a2a8\\\"\", \"full_name\": \"AlexxIT/YandexStation\", \"last_updated\": \"2022-07-04T11:21:39Z\", \"stargazers_count\": 754, \"topics\": [\"tts\", \"yandex-station\"], \"last_fetched\": 1657362614.01757, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"359524726\": {\"repository_manifest\": {\"name\": \"EthermineInfo\", \"render_readme\": true, \"homeassistant\": \"0.100.0\"}, \"authors\": [\"@thomasprior\"], \"category\": \"integration\", \"description\": \"Provides data from Ethermine.org on a specified miner.\", \"domain\": \"ethermineinfo\", \"etag_repository\": \"W/\\\"03efebd2f4a28d2983f01397f187786580810cead5ec0c2d8c521e0ac2145ee5\\\"\", \"full_name\": \"ThomasPrior/EthermineInfo\", \"last_updated\": \"2022-05-08T13:21:24Z\", \"stargazers_count\": 34, \"topics\": [\"ethermine\", \"ethermine-api\", \"miner\", \"statistics\"], \"last_fetched\": 1656859407.238826, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"365567023\": {\"repository_manifest\": {\"name\": \"Nuvo multi-zone amplifier (serial)\", \"render_readme\": true, \"country\": [\"EN\"], \"homeassistant\": \"2021.10.0\", \"zip_release\": true, \"filename\": \"nuvo_serial.zip\"}, \"authors\": [\"@sprocket-9\"], \"category\": \"integration\", \"description\": \"Custom component to control a Nuvo Grand Concerto/Essentia G multi-zone amplifier via serial connection\", \"domain\": \"nuvo_serial\", \"etag_repository\": \"W/\\\"fc7b8bb77829420e8e165a1a2e58a1473701b49724c2a82d9473f15410e5c18f\\\"\", \"full_name\": \"sprocket-9/hacs-nuvo-serial\", \"last_updated\": \"2021-11-25T18:10:21Z\", \"stargazers_count\": 2, \"topics\": [\"home-assistant-component\", \"home-assistant-integration\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"353966616\": {\"repository_manifest\": {\"name\": \"OpenWeatherMap All\", \"country\": \"GR\", \"homeassistant\": \"core-2021.3.4\", \"render_readme\": true}, \"authors\": [\"@viktak\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component combining multiple OpenWeatherMap API calls\", \"domain\": \"openweathermap_all\", \"etag_repository\": \"W/\\\"d8b00ba765e927c18286ab4aa4a2086574ea8ef462a599caed19b0028e8d20c3\\\"\", \"full_name\": \"viktak/ha-cc-openweathermap_all\", \"last_updated\": \"2022-02-24T04:49:46Z\", \"stargazers_count\": 13, \"topics\": [\"openweathermap\"], \"last_fetched\": 1656859432.037449, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"354887961\": {\"repository_manifest\": {\"name\": \"Abalin Name Day\", \"country\": [\"GR\"], \"homeassistant\": \"core-2021.4.0\", \"render_readme\": true}, \"authors\": [\"@viktak\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for the abalin name day API\", \"domain\": \"abalin_nameday\", \"etag_repository\": \"W/\\\"596b1fb78d314a62b50fd9a670b6b9f809522f6936b886f314721e91e3ec50fd\\\"\", \"full_name\": \"viktak/ha-cc-abalin-nameday\", \"last_updated\": \"2022-02-24T10:30:22Z\", \"stargazers_count\": 5, \"topics\": [\"namedays\"], \"last_fetched\": 1646497130.873351, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"366862031\": {\"repository_manifest\": {\"name\": \"Custom brand icons\"}, \"category\": \"plugin\", \"description\": \"Custom brand icons for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"aecd4888c64299d20c22c628c67ae1c88eaa51b93356260b1608e74ed4633dc0\\\"\", \"full_name\": \"elax46/custom-brand-icons\", \"last_updated\": \"2022-07-08T22:24:58Z\", \"stargazers_count\": 162, \"topics\": [\"custom-icons\", \"icons\", \"icons-pack\", \"iconset\", \"ikea\", \"philips-hue\", \"xiaomi\"], \"last_fetched\": 1657362463.832166, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"361205663\": {\"repository_manifest\": {\"name\": \"Meteoalarm Card\", \"render_readme\": true, \"filename\": \"meteoalarm-card.js\"}, \"category\": \"plugin\", \"description\": \"Meteoalarm, M\\u00e9t\\u00e9o-France and DWD weather warnings card for Home Assistant Lovelace UI \\u26c8\\ufe0f\", \"domain\": \"\", \"downloads\": 385, \"etag_repository\": \"W/\\\"76823e12aeb323a311468b3b45f92193f5b3a999caabfab69d71f8627e26bc3f\\\"\", \"full_name\": \"MrBartusek/MeteoalarmCard\", \"last_updated\": \"2022-07-07T14:40:40Z\", \"stargazers_count\": 39, \"topics\": [\"deutscher-wetterdienst\", \"dwd\", \"lovelace-card\", \"meteo-france\", \"meteoalarm\", \"meteoalarmeu\", \"nina\", \"nws\", \"weather\"], \"last_fetched\": 1657362518.813476, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"350886220\": {\"repository_manifest\": {\"name\": \"Fan Mode Button Row\", \"filename\": \"fan-mode-button-row.js\"}, \"category\": \"plugin\", \"description\": \"Frontend plugin to control fans in Home Assistant using preset modes for speeds\", \"domain\": \"\", \"etag_repository\": \"W/\\\"75999e38caef7079b27f48f351e71f910ee77b731c11ae4a8a50d98fa49d635a\\\"\", \"full_name\": \"finity69x2/fan-mode-button-row\", \"last_updated\": \"2022-03-25T18:34:55Z\", \"stargazers_count\": 7, \"topics\": [\"fan\", \"plugin\", \"preset\"], \"last_fetched\": 1653230035.622561, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"363428919\": {\"repository_manifest\": {\"name\": \"Plex Meets Home Assistant\", \"render_readme\": true, \"filename\": \"plex-meets-homeassistant.js\"}, \"category\": \"plugin\", \"description\": \"Custom card which integrates plex into Home Assistant and makes it possible to launch movies or tv shows on TV with a simple click\", \"domain\": \"\", \"etag_repository\": \"W/\\\"745c371c05ce7dc8747b503a9170a0ccf1a134414443ae57e2fd6e24e403b7ca\\\"\", \"full_name\": \"JurajNyiri/PlexMeetsHomeAssistant\", \"last_updated\": \"2022-03-23T18:42:53Z\", \"stargazers_count\": 59, \"topics\": [\"adb\", \"androidtv\", \"hacktoberfest2021\", \"homeassistant-custom-component\", \"kodi\", \"plex\", \"plexmediaserver\", \"tv\"], \"last_fetched\": 1657362497.122466, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"348464316\": {\"repository_manifest\": {\"name\": \"Magic Switchbot\", \"render_readme\": true}, \"authors\": [\"@ec-blaster\"], \"category\": \"integration\", \"description\": \"Magic Switchbot integration component for Home Assistant\", \"domain\": \"magicswitchbot\", \"etag_repository\": \"W/\\\"09e6fae28b25c53ba8e94da2c74ce67440b825335c072411154ca2c9b3c59483\\\"\", \"full_name\": \"ec-blaster/magicswitchbot-homeassistant\", \"last_updated\": \"2021-05-13T21:18:00Z\", \"stargazers_count\": 13, \"topics\": [\"magicswitchbot\", \"switches\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"282509738\": {\"repository_manifest\": {\"name\": \"OVH DynHost\", \"render_readme\": true}, \"authors\": [\"@GuilleGF\"], \"category\": \"integration\", \"description\": \"OVH DynHost Updater Component for https://www.home-assistant.io/\", \"domain\": \"ovh\", \"etag_repository\": \"W/\\\"3c5fa8eb9691fedd4538c75474d43e29717220ae8b56804fda862c1c95228d96\\\"\", \"full_name\": \"GuilleGF/hassio-ovh\", \"last_updated\": \"2022-06-03T04:28:24Z\", \"stargazers_count\": 15, \"topics\": [\"ddns\", \"ddns-updater\", \"ovh\", \"ovh-dynhost\"], \"last_fetched\": 1656859196.004128, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"305188358\": {\"repository_manifest\": {\"name\": \"Heatmiser Wifi\", \"render_readme\": true}, \"authors\": [\"@midstar\"], \"category\": \"integration\", \"description\": \"Heatmiser Wifi Home Assistant Component\", \"domain\": \"heatmiser_wifi\", \"etag_repository\": \"W/\\\"c44fc0fdf4623900ed3fc19ec6a49a01d9896adec3625ea853cd172416158cd9\\\"\", \"full_name\": \"midstar/heatmiser_wifi_ha\", \"last_updated\": \"2022-05-12T14:24:49Z\", \"stargazers_count\": 3, \"topics\": [\"climate\", \"heatmiser\", \"homeassisant\", \"thermostat\", \"wifi\"], \"last_fetched\": 1653229826.324691, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"364208180\": {\"repository_manifest\": {\"name\": \"Jellyfin\", \"render_readme\": true}, \"authors\": [\"@koying\"], \"category\": \"integration\", \"description\": \"Jellyfin integration for Home Assistant\", \"domain\": \"jellyfin\", \"etag_repository\": \"W/\\\"b324b8661a170d0458931cad17a722dba5e214db7f8796bd66e6106eb32be564\\\"\", \"full_name\": \"koying/jellyfin_ha\", \"last_updated\": \"2022-07-03T09:22:42Z\", \"stargazers_count\": 57, \"topics\": [\"jellyfin\"], \"last_fetched\": 1656859255.878314, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"347985393\": {\"repository_manifest\": {\"name\": \"Emulated color temp light\", \"render_readme\": true}, \"authors\": [\"@Mr-Groch\"], \"category\": \"integration\", \"description\": \"Emulate SUPPORT_COLOR_TEMP for color lights that doesn't support color temp (like some Ikea Tradfri bulbs) - Home Assistant component\", \"domain\": \"emulated_color_temp\", \"etag_repository\": \"W/\\\"37659d9a6a9fe520b9e7535e720d1f5f59879da69dab9b3d68db04774b2fc2bc\\\"\", \"full_name\": \"Mr-Groch/HA-Emulated-Color-Temp-Light\", \"last_updated\": \"2022-06-22T19:17:25Z\", \"stargazers_count\": 4, \"topics\": [\"color-lights\", \"color-temperature\", \"ct\", \"ikea-tradfri-bulbs\", \"light\"], \"last_fetched\": 1656859302.388054, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"311594993\": {\"repository_manifest\": {\"name\": \"Presence Simulation\", \"render_readme\": true}, \"authors\": [\"@slashback100\"], \"category\": \"integration\", \"description\": \"Home Assistant Presence Simulation\", \"domain\": \"presence_simulation\", \"etag_repository\": \"W/\\\"9e1e16f5b8c36b0ddeabb44a9e9cabd8601f9f28ba54557f1d8cee3b16d2d432\\\"\", \"full_name\": \"slashback100/presence_simulation\", \"last_updated\": \"2022-07-08T13:07:05Z\", \"stargazers_count\": 127, \"topics\": [\"historic\", \"presence\", \"presence-simulation\", \"simulation\"], \"last_fetched\": 1657362942.026838, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"356030453\": {\"repository_manifest\": {\"name\": \"remote_syslog\", \"country\": \"US\", \"homeassistant\": \"2021.3.4\", \"render_readme\": true}, \"authors\": [\"@thebytestuff\"], \"category\": \"integration\", \"description\": \"Home Assistant Custom Component - send Syslog message to remote server.\", \"domain\": \"remote_syslog\", \"etag_repository\": \"W/\\\"842e5117c5ea4b1e488fbc2e10f239f27b155a0174b306581d335b527aa3605b\\\"\", \"full_name\": \"TheByteStuff/RemoteSyslog_Service\", \"last_updated\": \"2022-05-26T16:18:39Z\", \"stargazers_count\": 8, \"topics\": [\"syslog\", \"syslog-client\"], \"last_fetched\": 1656859400.357358, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"351828005\": {\"repository_manifest\": {\"name\": \"Dahua VTO\", \"render_readme\": true}, \"authors\": [\"@myhomeiot\"], \"category\": \"integration\", \"description\": \"Control Dahua VTO/VTH devices from Home Assistant\", \"domain\": \"dahua_vto\", \"etag_repository\": \"W/\\\"43fad3987f62d9155b04600056cebb67e6887b5a4bd1e55bdb79cc0bc8de9be0\\\"\", \"full_name\": \"myhomeiot/DahuaVTO\", \"last_updated\": \"2022-01-12T13:21:13Z\", \"stargazers_count\": 67, \"topics\": [\"dahua\"], \"last_fetched\": 1657362871.316877, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"362513331\": {\"repository_manifest\": {\"name\": \"Technicolor\", \"render_readme\": true}, \"authors\": [\"@shaiu\"], \"category\": \"integration\", \"description\": \"This is an integration for HomeAssistant. It's a Device Tracker component for the Technicolor Gateway.\", \"domain\": \"technicolor\", \"etag_repository\": \"W/\\\"cb7a993cdda28c163f750fa16653c42a7c5e65f10606c6383500a8ec451bf28f\\\"\", \"full_name\": \"shaiu/technicolor\", \"last_updated\": \"2022-06-21T17:09:19Z\", \"stargazers_count\": 5, \"last_fetched\": 1656859377.783594, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"366482637\": {\"repository_manifest\": {\"name\": \"Sun Card\", \"render_readme\": true, \"filename\": \"home-assistant-sun-card.js\"}, \"category\": \"plugin\", \"description\": \"Home assistant sun card based on Google weather design\", \"domain\": \"\", \"downloads\": 35401, \"etag_repository\": \"W/\\\"13bf0ef5f985673bdbed6b14caca7887f9cabfaf1a37a96095d166816e025986\\\"\", \"full_name\": \"AitorDB/home-assistant-sun-card\", \"last_updated\": \"2022-06-26T07:18:47Z\", \"stargazers_count\": 304, \"topics\": [\"sun\", \"sun-card\"], \"last_fetched\": 1656859494.522198, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"340596609\": {\"repository_manifest\": {\"name\": \"Panasonic Smart App\"}, \"authors\": [\"@osk2\"], \"category\": \"integration\", \"description\": \"\\ud83d\\udd1b Panasonic Smart App integration for Home Assistant.\", \"domain\": \"panasonic_smart_app\", \"etag_repository\": \"W/\\\"2c4b513b6047457fd5cd989c3e21491cf1856fa486e973d7dc4eac0df176e94b\\\"\", \"full_name\": \"osk2/panasonic_smart_app\", \"last_updated\": \"2022-06-04T14:08:26Z\", \"stargazers_count\": 30, \"topics\": [\"panasonic\"], \"last_fetched\": 1656859320.477543, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"362145464\": {\"repository_manifest\": {\"name\": \"Multizone Controller\", \"render_readme\": true}, \"authors\": [\"@Petro31\"], \"category\": \"integration\", \"description\": \"Integration that creates a multi-zone volume controller for media_players in Home Assistant\", \"domain\": \"multizone_controller\", \"etag_repository\": \"W/\\\"9fb7f2722b2b6aa8c01534cbcd75619574823376517f12be7fe5e5b2cb42d1b1\\\"\", \"full_name\": \"Petro31/ha-integration-multizone-controller\", \"last_updated\": \"2021-06-09T21:34:52Z\", \"stargazers_count\": 11, \"topics\": [\"media-players\", \"multizone-controller\", \"volume-increment\", \"zone-volume\"], \"last_fetched\": 1653229856.309616, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"370997019\": {\"repository_manifest\": {\"name\": \"WebOS Keyboard Card\", \"content_in_root\": true, \"filename\": \"webos-keyboard-card.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Type on your WebOS TV using this lovelace card\", \"domain\": \"\", \"etag_repository\": \"W/\\\"8fa3e87739397ab0cb94b83b0b20d26ee836657b9ff3ca5be84347b06732e3c3\\\"\", \"full_name\": \"bernikr/lovelace-webos-keyboard-card\", \"last_updated\": \"2021-12-17T14:54:58Z\", \"stargazers_count\": 4, \"topics\": [\"card\", \"input-method\", \"keyboard\", \"remote\", \"webos\"], \"last_fetched\": 1656859507.326682, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"361776538\": {\"repository_manifest\": {\"name\": \"Your HA Digital Twin floor3d-card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Your Home Digital Twin: aka floor3d-card. Visualize Home Assistant state and perform actions using objects in a 3D home model based on Three.js.\", \"domain\": \"\", \"downloads\": 1965, \"etag_repository\": \"W/\\\"701cfc9d25322d82bcc349b87b602a9c365b1984afe8a2497818938bb19524ba\\\"\", \"full_name\": \"adizanni/floor3d-card\", \"last_updated\": \"2022-05-14T18:03:02Z\", \"stargazers_count\": 232, \"topics\": [\"3d-models\", \"card\", \"entity-bindings\"], \"last_fetched\": 1657362421.316322, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"373832981\": {\"repository_manifest\": {\"name\": \"Digital Clock\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"A custom digital clock card for Home Assistant\", \"domain\": \"\", \"downloads\": 9618, \"etag_repository\": \"W/\\\"53edc38d173be1a8745bffaa05141b96d6f2a69ea593d75c898df8b13eee513b\\\"\", \"full_name\": \"wassy92x/lovelace-digital-clock\", \"last_updated\": \"2022-05-15T21:00:25Z\", \"stargazers_count\": 22, \"topics\": [\"lovelace-card\"], \"last_fetched\": 1656859649.277843, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"329411371\": {\"repository_manifest\": {\"name\": \"HA Dashboard\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"A custom dashboard for Home Assistant with sidebar\", \"domain\": \"\", \"downloads\": 3837, \"etag_repository\": \"W/\\\"bd324dadeeafa7fae625c867524f187991402459573659a89277651c1985b964\\\"\", \"full_name\": \"wassy92x/lovelace-ha-dashboard\", \"last_updated\": \"2022-05-15T20:59:27Z\", \"stargazers_count\": 13, \"last_fetched\": 1656859649.861349, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"373857882\": {\"repository_manifest\": {\"name\": \"Entities Button Group\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"A custom card for Home Assistant to group multiple buttons\", \"domain\": \"\", \"downloads\": 3460, \"etag_repository\": \"W/\\\"0be3c0ef7dace2352816576809596a5d8d29578decef5624bc5c4b921ba5cb90\\\"\", \"full_name\": \"wassy92x/lovelace-entities-btn-group\", \"last_updated\": \"2022-05-15T20:59:52Z\", \"stargazers_count\": 6, \"topics\": [\"lovelace-card\"], \"last_fetched\": 1656859649.238175, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"366911690\": {\"repository_manifest\": {\"name\": \"Dahua\", \"hacs\": \"1.6.0\", \"homeassistant\": \"2021.7.0\", \"render_readme\": true}, \"authors\": [\"@rroller\"], \"category\": \"integration\", \"description\": \"Dahua Camera and Doorbell Home Assistant Integration\", \"domain\": \"dahua\", \"etag_repository\": \"W/\\\"3f3967367f89ddfea643d6affef1b743332e8f724c2e419928876ea251b7f3c0\\\"\", \"full_name\": \"rroller/dahua\", \"last_updated\": \"2022-06-26T14:53:42Z\", \"stargazers_count\": 147, \"topics\": [\"amcrest\", \"camera\", \"dahua\", \"doorbell\", \"ipcam\", \"lorex\"], \"last_fetched\": 1657362921.710597, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"361961255\": {\"repository_manifest\": {\"name\": \"Metlink Wellington Transport\", \"render_readme\": true, \"country\": \"NZ\", \"homeassistant\": \"2022.3.0\"}, \"authors\": [\"@make-all\"], \"category\": \"integration\", \"description\": \"Metlink Wellington Public Transport integration for Home Assistant\", \"domain\": \"metlink\", \"etag_repository\": \"W/\\\"d95e9c51da9b71569be2e1e57cc937993f80026872f90b27cf77085ed66e12c5\\\"\", \"full_name\": \"make-all/metlink-nz\", \"last_updated\": \"2022-05-28T03:46:56Z\", \"stargazers_count\": 3, \"topics\": [\"metlink\", \"metlink-api\", \"transport\", \"wellington\"], \"last_fetched\": 1656859284.859703, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"371474642\": {\"repository_manifest\": {\"name\": \"consul\", \"render_readme\": \"true\"}, \"authors\": [\"@jadson179\"], \"category\": \"integration\", \"description\": \"home-assistant service for control the consul \\ud83d\\udd34\", \"domain\": \"consul\", \"etag_repository\": \"W/\\\"b317a562e212cff043d79b3eeba8767a633e155befc76e1c6907aa9199829d94\\\"\", \"full_name\": \"jadson179/consul\", \"last_updated\": \"2021-10-09T12:30:45Z\", \"stargazers_count\": 2, \"topics\": [\"consul\"], \"last_fetched\": 1657362784.071772, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"373370853\": {\"repository_manifest\": {\"name\": \"Helium Blockchain\", \"render_readme\": true}, \"authors\": [\"@rsnodgrass\"], \"category\": \"integration\", \"description\": \"Helium blockchain sensors for Home Assistant\", \"domain\": \"helium\", \"etag_repository\": \"W/\\\"51399b399fada3d3d34e18a8dd09da4bf4dfd60ac60d8f33ff129e8857d51e6a\\\"\", \"full_name\": \"rsnodgrass/hass-helium\", \"last_updated\": \"2022-03-21T05:12:01Z\", \"stargazers_count\": 31, \"topics\": [\"helium\", \"helium-blockchain\", \"lorawan\", \"lorawan-network\"], \"last_fetched\": 1657362923.020601, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"269205129\": {\"repository_manifest\": {\"name\": \"VIMAR By-Me Hub\", \"render_readme\": true, \"homeassistant\": \"0.99.9\"}, \"authors\": [\"@h4de5\"], \"category\": \"integration\", \"description\": \"VIMAR by-me integration into home-assistant.io\", \"domain\": \"vimar\", \"downloads\": 1, \"etag_repository\": \"W/\\\"1707bc593c2d51bab3c66f8341c023518d1774542e2687b11d845a78905f9e6a\\\"\", \"full_name\": \"h4de5/home-assistant-vimar\", \"last_updated\": \"2022-06-28T15:10:57Z\", \"stargazers_count\": 30, \"topics\": [\"vimar\", \"vimar-platform\"], \"last_fetched\": 1656859198.454527, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"372058588\": {\"repository_manifest\": {\"name\": \"MET Alerts Hungary\", \"country\": [\"HU\"], \"render_readme\": \"true\"}, \"authors\": [\"@amaximus\"], \"category\": \"integration\", \"description\": \"Meteo alerts for Hungary\", \"domain\": \"met_alerts_hu\", \"etag_repository\": \"W/\\\"e6f8b404f3970822b48e5e945413da622a9c6de1818ceb416eefb5f8b75403c5\\\"\", \"full_name\": \"amaximus/met_alerts_hu\", \"last_updated\": \"2021-12-10T12:23:17Z\", \"stargazers_count\": 8, \"topics\": [\"homeassistant-custom-component\", \"hungary\"], \"last_fetched\": 1646496758.52727, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"354515979\": {\"repository_manifest\": {\"name\": \"Philips Ambilight+Hue Switch\", \"render_readme\": true}, \"authors\": [\"@jomwells\", \"@Mr-Groch\"], \"category\": \"integration\", \"description\": \"ON/OFF Abilight+Hue (Switch) component for Philips Ambilight TV's\", \"domain\": \"philips_ambilight+hue\", \"etag_repository\": \"W/\\\"c604e923b891bb6e70c748b65eaabf025e994b717ca266bb089a6589f229a2ec\\\"\", \"full_name\": \"Mr-Groch/ambihue\", \"last_updated\": \"2022-03-18T19:31:20Z\", \"stargazers_count\": 12, \"topics\": [\"ambilight\", \"philips-hue\"], \"last_fetched\": 1648400046.663151, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"259867685\": {\"repository_manifest\": {\"name\": \"SL Integration (HASL)\", \"country\": \"SE\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@DSorlov\"], \"category\": \"integration\", \"description\": \"Swedish Public Transport Sensor (HASL). Formerly named HomeAssistant SL Sensor\", \"domain\": \"hasl3\", \"etag_repository\": \"W/\\\"cf6830837f0c5733b34c3b772903a45787e273dc91c4a53a7e640ff3bd75250e\\\"\", \"full_name\": \"hasl-sensor/integration\", \"last_updated\": \"2022-03-25T13:20:21Z\", \"stargazers_count\": 22, \"topics\": [\"ha-sensor-sl\", \"hasl\", \"hasl3\", \"haslv3\", \"sl-sensor\", \"stockholms-lokaltrafik\"], \"last_fetched\": 1653733417.889237, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"295123287\": {\"repository_manifest\": {\"name\": \"Jewish Sabbaths Holidays / sensor\", \"render_readme\": true}, \"authors\": [\"@yuval_mejahez\"], \"category\": \"integration\", \"description\": \"Jewish Shabbat Yomtov and Holidays times and event\", \"domain\": \"hebcal\", \"etag_repository\": \"W/\\\"724b080b75dc1aa92fd78807bd8b25efcaeea3d117e18fea9555781f088c6a76\\\"\", \"full_name\": \"rt400/Jewish-Sabbaths-Holidays\", \"last_updated\": \"2022-04-30T18:58:14Z\", \"stargazers_count\": 8, \"topics\": [\"holidays\", \"jewish\", \"shabbat\"], \"last_fetched\": 1653229892.915611, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"134057086\": {\"repository_manifest\": {\"name\": \"Xiaomi Mi Electric Rice Cooker Integration\", \"render_readme\": true}, \"authors\": [\"@syssi\"], \"category\": \"integration\", \"description\": \"Xiaomi Mi Electric Rice Cooker integration for Home Assistant\", \"domain\": \"xiaomi_miio_cooker\", \"etag_repository\": \"W/\\\"2e0d9d967007dc70c711e8a36624457bb4035eef6be3e61e542c23ee0b9cf151\\\"\", \"full_name\": \"syssi/xiaomi_cooker\", \"last_updated\": \"2022-06-02T05:45:43Z\", \"stargazers_count\": 112, \"topics\": [\"miio\", \"miio-protocol\", \"rice-cooker\", \"xiaomi\", \"xiaomi-cooker\"], \"last_fetched\": 1656859394.334676, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"129049262\": {\"repository_manifest\": {\"name\": \"Xiaomi Mi Smart Pedestal Fan Integration\", \"render_readme\": true, \"homeassistant\": \"2021.5.1\"}, \"authors\": [\"@syssi\"], \"category\": \"integration\", \"description\": \"Xiaomi Mi Smart Fan integration for Home Assistant\", \"domain\": \"xiaomi_miio_fan\", \"etag_repository\": \"W/\\\"57e042b0b62f81ecaa99c35525c8e1205e571360179aed0060f6891d07ec5b1c\\\"\", \"full_name\": \"syssi/xiaomi_fan\", \"last_updated\": \"2022-06-30T04:54:06Z\", \"stargazers_count\": 289, \"topics\": [\"fan\", \"miio\", \"miio-protocol\", \"miot\", \"xiaomi\"], \"last_fetched\": 1657362954.808564, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"373845609\": {\"repository_manifest\": {\"name\": \"Powercalc\", \"zip_release\": true, \"filename\": \"powercalc.zip\", \"homeassistant\": \"2021.11.0\"}, \"authors\": [\"@bramstroker\"], \"category\": \"integration\", \"description\": \"Custom component to calculate estimated power consumption of lights and other appliances\", \"domain\": \"powercalc\", \"downloads\": 2008, \"etag_repository\": \"W/\\\"5e191a70ff1d5f776865cca4eaee6d720e022998ce710ed16254e24cb87b1798\\\"\", \"full_name\": \"bramstroker/homeassistant-powercalc\", \"last_updated\": \"2022-07-07T14:50:03Z\", \"stargazers_count\": 298, \"topics\": [\"consumption\", \"energy-monitor\", \"hue-lights\", \"metering\", \"power\"], \"last_fetched\": 1657362654.105566, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"85400693\": {\"repository_manifest\": {\"name\": \"Padavan Tracker\", \"render_readme\": true}, \"authors\": [\"@PaulAnnekov\"], \"category\": \"integration\", \"description\": \"Device tracker component that uses Padavan-based router\", \"domain\": \"padavan_tracker\", \"etag_repository\": \"W/\\\"ae078d46216f2371acd06df18908246480dab716d978c4775824842248a7987c\\\"\", \"full_name\": \"PaulAnnekov/home-assistant-padavan-tracker\", \"last_updated\": \"2022-05-18T17:01:17Z\", \"stargazers_count\": 41, \"topics\": [\"padavan\", \"router\", \"xiaomi\"], \"last_fetched\": 1656859322.837644, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"365332200\": {\"repository_manifest\": {\"name\": \"PiJuice UPS Hat\", \"render_readme\": true, \"country\": [\"EN\", \"FR\"]}, \"authors\": [\"@Racailloux\"], \"category\": \"integration\", \"description\": \"Home Assistant integration to support PiJuice UPS Hat and retrieve values to sensors.\", \"domain\": \"pijuice\", \"etag_repository\": \"W/\\\"618c1b4f3504cef58253bb8f3013fb0d09d4b43168534b40d317adb982a0b1d9\\\"\", \"full_name\": \"Racailloux/home-assistant-pijuice\", \"last_updated\": \"2021-09-12T12:14:15Z\", \"stargazers_count\": 10, \"topics\": [\"battery\", \"hat\", \"integrations\", \"pijuice\", \"raspberry-pi\", \"sensors\", \"ups\", \"voltage\"], \"last_fetched\": 1648400068.301153, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"151280062\": {\"repository_manifest\": {\"name\": \"mini-graph-card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Minimalistic graph card for Home Assistant Lovelace UI\", \"domain\": \"\", \"downloads\": 54359, \"etag_repository\": \"W/\\\"1686ee04ea9e00b233b592df075ecfb09a0766f7e630c09bd47229cd836ac74b\\\"\", \"full_name\": \"kalkih/mini-graph-card\", \"last_updated\": \"2022-06-24T19:17:40Z\", \"stargazers_count\": 1963, \"topics\": [\"automation\", \"custom\", \"graph\"], \"last_fetched\": 1657362497.542685, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"201740996\": {\"repository_manifest\": {\"name\": \"Generate readme\", \"zip_release\": true, \"filename\": \"readme.zip\", \"homeassistant\": \"2021.5.0\", \"hide_default_branch\": true, \"render_readme\": true, \"hacs\": \"0.19.1\"}, \"authors\": [\"@ludeeus\"], \"category\": \"integration\", \"description\": \"Use Jinja and data from Home Assistant to generate your README.md file\", \"domain\": \"readme\", \"downloads\": 28, \"etag_repository\": \"W/\\\"e9aa7f16df7d6e7cece3119e68f843cc0c97b77112db4924958c9603b9ca7cd0\\\"\", \"full_name\": \"custom-components/readme\", \"last_updated\": \"2022-05-28T08:50:23Z\", \"stargazers_count\": 19, \"topics\": [\"automation\", \"jinja\", \"readme\"], \"last_fetched\": 1653847891.395102, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"374763546\": {\"repository_manifest\": {\"name\": \"AIMP Media Player\", \"content_in_root\": true, \"render_readme\": true}, \"authors\": [\"@xilense\"], \"category\": \"integration\", \"description\": \"AIMP custom component for \\ud83c\\udfe0 Home Assistant using web remote\", \"domain\": \"aimp\", \"etag_repository\": \"W/\\\"1a9c5c5423e2aa39ffec21ee341f2214d9a90a7bc77bfe9c60cd5533cccb0a09\\\"\", \"full_name\": \"xilense/aimp_custom_component\", \"last_updated\": \"2021-06-21T18:20:20Z\", \"stargazers_count\": 4, \"topics\": [\"aimp\", \"internet-of-things\", \"iot\", \"iot-automation\", \"mediaplayer\", \"raspberry-pi\", \"remote-control\", \"smarthome\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"323152128\": {\"repository_manifest\": {\"name\": \"Crunch-O-Meter\", \"render_readme\": true, \"zip_release\": true, \"filename\": \"crunch_o_meter.zip\"}, \"authors\": [\"@guylewin\"], \"category\": \"integration\", \"description\": \"Crunch-O-Meter API as sensors in Home Assistant. See how many people are currently at your local gym\", \"domain\": \"crunch_o_meter\", \"etag_repository\": \"W/\\\"02cc653796b8ff504e36be78552319dd9c51adac96f5937bf203895d04237835\\\"\", \"full_name\": \"GuyLewin/home-assistant-crunch-o-meter\", \"last_updated\": \"2021-06-14T13:06:16Z\", \"stargazers_count\": 1, \"topics\": [\"crunch\", \"crunch-o-meter\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"376904517\": {\"repository_manifest\": {\"name\": \"Timer Bar Card\", \"render_readme\": true, \"filename\": \"timer-bar-card.js\"}, \"category\": \"plugin\", \"description\": \"A progress bar display for Home Assistant timers\", \"domain\": \"\", \"downloads\": 3756, \"etag_repository\": \"W/\\\"bc0b60eb484ac2f05f8406747044c81afab7859fdd8f68dc2a76ce660f10eec0\\\"\", \"full_name\": \"rianadon/timer-bar-card\", \"last_updated\": \"2022-06-23T23:32:29Z\", \"stargazers_count\": 106, \"last_fetched\": 1657362536.205768, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"378256174\": {\"repository_manifest\": {\"name\": \"OpenSprinkler Card\", \"render_readme\": true, \"filename\": \"opensprinkler-card.js\"}, \"category\": \"plugin\", \"description\": \"Home Assistant card for collecting OpenSprinkler status\", \"domain\": \"\", \"downloads\": 1266, \"etag_repository\": \"W/\\\"15ada6c5c715aec57c4de6b09b6784aea6ebd46eb7cff4794fa2a08e1ed48ba9\\\"\", \"full_name\": \"rianadon/opensprinkler-card\", \"last_updated\": \"2022-06-03T04:16:07Z\", \"stargazers_count\": 41, \"topics\": [\"opensprinkler\"], \"last_fetched\": 1656859619.734584, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"307678069\": {\"repository_manifest\": {\"name\": \"Variables+History\", \"homeassistant\": \"2022.4.0\"}, \"authors\": [\"@rogro82\", \"@wibias\"], \"category\": \"integration\", \"description\": \"Home Assistant variables component\", \"domain\": \"variable\", \"etag_repository\": \"W/\\\"5f5017571ea3524342dfb466656d542b71d0ea7db80d071b5ec8d7ff66ef04c7\\\"\", \"full_name\": \"Wibias/hass-variables\", \"last_updated\": \"2022-05-25T08:35:44Z\", \"stargazers_count\": 33, \"topics\": [\"counter\", \"keypad\", \"last-motion\", \"timer\", \"variables\"], \"last_fetched\": 1656859437.385941, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"373101151\": {\"repository_manifest\": {\"name\": \"SunSpec\", \"hacs\": \"1.6.0\", \"render_readme\": true, \"homeassistant\": \"2021.9.1\"}, \"authors\": [\"@cjne\"], \"category\": \"integration\", \"description\": \"Home Assistant customcomponent for SunSpec modbus devices\", \"domain\": \"sunspec\", \"etag_repository\": \"W/\\\"d58b53a8b3f6ae213e17b8905036230297a8ad14be9c332c94725a6d2f629141\\\"\", \"full_name\": \"CJNE/ha-sunspec\", \"last_updated\": \"2022-06-28T05:10:50Z\", \"stargazers_count\": 25, \"topics\": [\"sunspec\"], \"last_fetched\": 1656859097.270846, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"256928191\": {\"repository_manifest\": {\"name\": \"GCE Eco-Devices\", \"country\": [\"FR\"], \"render_readme\": true}, \"authors\": [\"@Aohzan\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for GCE Eco-Devices\", \"domain\": \"ecodevices\", \"etag_repository\": \"W/\\\"6390dea572b0d82bed590a4757bc1cf089822d575d681dcfed431acb9bcacab0\\\"\", \"full_name\": \"Aohzan/ecodevices\", \"last_updated\": \"2022-02-15T08:25:43Z\", \"stargazers_count\": 8, \"topics\": [\"eco-devices\", \"gce-electronics\"], \"last_fetched\": 1645379995.751894, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"351604227\": {\"repository_manifest\": {\"name\": \"Brandrisk ute\", \"render_readme\": true, \"country\": [\"se\"]}, \"authors\": [\"@Sha-Darim\"], \"category\": \"integration\", \"description\": \"The custom compontnet  will get fire risks and fire prohibition from the Brandrisk Ute API for the supplied position.\", \"domain\": \"brandriskute\", \"etag_repository\": \"W/\\\"a88ea5dcc9c7365be124bbf02b3807bf9a41469aa44a8c706161709cf62b8ea3\\\"\", \"full_name\": \"Sha-Darim/brandriskute\", \"last_updated\": \"2021-12-28T22:27:43Z\", \"stargazers_count\": 4, \"topics\": [\"fire-risks\", \"risks\", \"sensors\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"387055527\": {\"repository_manifest\": {\"name\": \"Waves\"}, \"category\": \"theme\", \"description\": \"This is a blend of 2 themes found within the Home Assistant community. Inspired mostly by Noctis, I've adjust colours slightly and have also opted to pull some features from Caule Theme packs to build my own 'ultimate' theme. I will continue to update overtime and do my best to credit those whom I have 'referenced' \", \"domain\": \"\", \"etag_repository\": \"W/\\\"8f629fc66d5bcc98e5934673825d669f1420e7fa175c880223e1236c98e6b3ac\\\"\", \"full_name\": \"tgcowell/waves\", \"last_updated\": \"2022-06-14T03:38:57Z\", \"stargazers_count\": 35, \"last_fetched\": 1656859489.80083, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"391372854\": {\"repository_manifest\": {\"name\": \"Alarmo Card\", \"render_readme\": true, \"filename\": \"alarmo-card.js\"}, \"category\": \"plugin\", \"description\": \"Home Assistant card for controlling the Alarmo component\", \"domain\": \"\", \"downloads\": 3945, \"etag_repository\": \"W/\\\"d1d46b7004e9be47b518964a606feba9c4347782700225c13e557684452ba395\\\"\", \"full_name\": \"nielsfaber/alarmo-card\", \"last_updated\": \"2022-06-05T18:35:04Z\", \"stargazers_count\": 46, \"topics\": [\"alarm\", \"alarmo\", \"assistant\", \"card\", \"home\", \"security\"], \"last_fetched\": 1657362523.084531, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"362551242\": {\"repository_manifest\": {\"name\": \"Update Time Card\", \"content_in_root\": true, \"render_readme\": true, \"filename\": \"update-time-card.js\"}, \"category\": \"plugin\", \"description\": \"Simple last-updated card for Home assistant lovelace\", \"domain\": \"\", \"etag_repository\": \"W/\\\"fbabc715d84dd6195a2b5e1e361dd961460c3e0ceb50a8a5df74097594f73353\\\"\", \"full_name\": \"itobey/update-time-card\", \"last_updated\": \"2021-07-13T16:24:04Z\", \"stargazers_count\": 5, \"topics\": [\"clock\", \"dashboard\", \"e-ink\", \"last-updated\", \"lovelace-custom-card\"], \"last_fetched\": 1656859571.76453, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"384434522\": {\"repository_manifest\": {\"name\": \"Hass Hue Icons\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Additional vector icons for home assistant to model Philips  Hue bulbs and fixtures. \", \"domain\": \"\", \"downloads\": 2931, \"etag_repository\": \"W/\\\"ea358d0f59f3ef497d691297383d1ca1788e15202fad1224e4050571f67bae4d\\\"\", \"full_name\": \"arallsopp/hass-hue-icons\", \"last_updated\": \"2022-06-27T09:34:35Z\", \"stargazers_count\": 165, \"topics\": [\"custom-icons\", \"hue\", \"hue-lights\", \"icons\", \"iconset\", \"philips-hue\", \"svg\"], \"last_fetched\": 1657362426.44903, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"352169259\": {\"repository_manifest\": {\"name\": \"Neerslag App\", \"render_readme\": true, \"country\": [\"NL\", \"BE\"]}, \"authors\": [\"@aex351\"], \"category\": \"integration\", \"description\": \"Neerslag app for Home Assistant. All-in-one package (Sensors + Card).\", \"domain\": \"neerslag\", \"etag_repository\": \"W/\\\"39031ea6804d77e4343159951d3fd29de0c692205201fb27dfe524cb6841b00a\\\"\", \"full_name\": \"aex351/home-assistant-neerslag-app\", \"last_updated\": \"2022-06-28T13:53:55Z\", \"stargazers_count\": 24, \"last_fetched\": 1656859035.144365, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"366713850\": {\"repository_manifest\": {\"name\": \"Pirate Weather\", \"render_readme\": true}, \"authors\": [\"@alexander0042\"], \"category\": \"integration\", \"description\": \"Replacement for the default Dark Sky Home Assistant integration using Pirate Weather \", \"domain\": \"pirateweather\", \"etag_repository\": \"W/\\\"0f60b486c748000321a6a7ce72ffa588bcd52a2ac17a3aac49d08318655abc3e\\\"\", \"full_name\": \"alexander0042/pirate-weather-ha\", \"last_updated\": \"2022-05-30T14:39:19Z\", \"stargazers_count\": 108, \"topics\": [\"darksky-api\", \"weather-api\"], \"last_fetched\": 1657362611.381023, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"363203831\": {\"repository_manifest\": {\"name\": \"SureHA\", \"content_in_root\": true, \"render_readme\": true}, \"authors\": [\"@benleb\"], \"category\": \"integration\", \"description\": \"SureHA \\ud83d\\udc3e monitor & control your Sure Petcare devices via Home Assistant\", \"domain\": \"sureha\", \"etag_repository\": \"W/\\\"9c6892f4c3c6c1631aad831d11614059f4d7e611d47b6e0c23f4d856737a41d9\\\"\", \"full_name\": \"benleb/sureha\", \"last_updated\": \"2021-09-20T15:35:49Z\", \"stargazers_count\": 11, \"topics\": [\"surepet\", \"surepetcare\", \"surepy\"], \"last_fetched\": 1653229605.061981, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"378010382\": {\"repository_manifest\": {\"name\": \"\\u041b\\u0438\\u0447\\u043d\\u044b\\u0439 \\u043a\\u0430\\u0431\\u0438\\u043d\\u0435\\u0442 \\u0422\\u041d\\u0421 \\u042d\\u043d\\u0435\\u0440\\u0433\\u043e\", \"render_readme\": true, \"country\": \"ru\", \"homeassistant\": \"2021.4.6\"}, \"authors\": [\"@alryaz\"], \"category\": \"integration\", \"description\": \"TNS Energo Integration\", \"domain\": \"tns_energo\", \"etag_repository\": \"W/\\\"300f5943565baed01726bbac5bc969bfaaad922d706d6a76bbcaf74c7fcde7d9\\\"\", \"full_name\": \"alryaz/hass-tns-energo\", \"last_updated\": \"2022-04-12T21:11:28Z\", \"stargazers_count\": 9, \"topics\": [\"moscow\", \"tns-energo\"], \"last_fetched\": 1653229582.420045, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"376390299\": {\"repository_manifest\": {\"name\": \"knmi\", \"homeassistant\": \"2022.2.0\", \"render_readme\": true}, \"authors\": [\"@golles\"], \"category\": \"integration\", \"description\": \"KNMI weather integration for Home Assistant\", \"domain\": \"knmi\", \"etag_repository\": \"W/\\\"0ba10388af505dac9db8402d78270089e125838a7264577a418c7a093cfd84b3\\\"\", \"full_name\": \"golles/ha-knmi\", \"last_updated\": \"2022-06-12T14:16:56Z\", \"stargazers_count\": 12, \"topics\": [\"home-assistant-component\", \"home-assistant-integration\", \"knmi\", \"weather\", \"weerlive\"], \"last_fetched\": 1656859193.790349, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"384704004\": {\"repository_manifest\": {\"name\": \"Trakt\", \"render_readme\": true}, \"authors\": [\"@dylandoamaral\"], \"category\": \"integration\", \"description\": \"A Trakt integration for Home Assistant compatible with upcoming media card\", \"domain\": \"trakt_tv\", \"etag_repository\": \"W/\\\"eb7ae2f08a0eb50a03aeeea065270b11d435e665d45b20cdb0e6594007eaf03a\\\"\", \"full_name\": \"dylandoamaral/trakt-integration\", \"last_updated\": \"2022-05-15T20:09:29Z\", \"stargazers_count\": 12, \"topics\": [\"custom\", \"movie\", \"show\", \"trakt\", \"upcoming-media-card\"], \"last_fetched\": 1656859157.616588, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"261277563\": {\"repository_manifest\": {\"name\": \"Open Source Routing Machine\"}, \"authors\": [\"@edekeijzer\"], \"category\": \"integration\", \"description\": \"OSRM travel time sensor for Home Assistant\", \"domain\": \"osrm_travel_time\", \"etag_repository\": \"W/\\\"1674b1a2e580fe3e52a794da7500abe0596d03afd0dd145bcde8877e786e47f2\\\"\", \"full_name\": \"edekeijzer/osrm_travel_time\", \"last_updated\": \"2022-03-11T11:58:30Z\", \"stargazers_count\": 6, \"topics\": [\"osrm\", \"python3\", \"self-hosted\"], \"last_fetched\": 1648399921.043573, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"290261325\": {\"repository_manifest\": {\"name\": \"adaptive_lighting\", \"render_readme\": true}, \"authors\": [\"@basnijholt\", \"@RubenKelevra\"], \"category\": \"integration\", \"description\": \"Adaptive Lighting custom component for Home Assistant\", \"domain\": \"adaptive_lighting\", \"etag_repository\": \"W/\\\"8eea4ce958867c86f76cf6a9419d826e15b99ce3513daf3c3eea6254ad719b30\\\"\", \"full_name\": \"basnijholt/adaptive-lighting\", \"last_updated\": \"2022-07-03T10:05:08Z\", \"stargazers_count\": 609, \"topics\": [\"adaptive-lighting\", \"automation\", \"hue\", \"iot\", \"lights\", \"sunrise\", \"sunset\", \"zigbee\"], \"last_fetched\": 1657362643.28371, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"377060365\": {\"repository_manifest\": {\"name\": \"\\u041b\\u0438\\u0447\\u043d\\u044b\\u0439 \\u043a\\u0430\\u0431\\u0438\\u043d\\u0435\\u0442 \\u0418\\u043d\\u0442\\u0435\\u0440 \\u0420\\u0410\\u041e (\\u042d\\u043d\\u0435\\u0440\\u0433\\u043e\\u0441\\u0431\\u044b\\u0442)\", \"render_readme\": true, \"country\": \"ru\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@alryaz\"], \"category\": \"integration\", \"description\": \"\\u0418\\u043d\\u0442\\u0435\\u0433\\u0440\\u0430\\u0446\\u0438\\u044f Home Assistant \\u0441 \\u041b\\u041a \\\"\\u0418\\u043d\\u0442\\u0435\\u0440 \\u0420\\u0410\\u041e\\\"\", \"domain\": \"lkcomu_interrao\", \"etag_repository\": \"W/\\\"7980ffae15865982bd463ba037e3bab27630c03f0b9485c6c4de0d47cd94c067\\\"\", \"full_name\": \"alryaz/hass-lkcomu-interrao\", \"last_updated\": \"2022-05-17T20:58:09Z\", \"stargazers_count\": 24, \"topics\": [\"altaienergosbyt\", \"bashelektrosbyt\", \"energosbyt\", \"esbvolga\", \"mosenergosbyt\", \"sevesk\", \"tambovenergosbyt\", \"tomskenergosbyt\"], \"last_fetched\": 1656859046.670532, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"388918745\": {\"repository_manifest\": {\"name\": \"Creasol DomBus\"}, \"authors\": [\"@CreasolTech\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for Creasol DomBus RS485 modules (inputs, outputs, sensors).\", \"domain\": \"creasoldombus\", \"etag_repository\": \"W/\\\"d1fb7d5dbd83ae905361350a184f214c97096227948f1a15648ce1efcfe8eede\\\"\", \"full_name\": \"CreasolTech/home-assistant-creasol-dombus\", \"last_updated\": \"2021-09-07T08:23:37Z\", \"stargazers_count\": 1, \"topics\": [\"dombus\", \"domotic\", \"rs485\", \"smart-home\", \"smarthome\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"355159299\": {\"repository_manifest\": {\"name\": \"Moscow PGU (\\u0413\\u043e\\u0441\\u0443\\u0441\\u043b\\u0443\\u0433\\u0438 \\u041c\\u043e\\u0441\\u043a\\u0432\\u044b)\", \"render_readme\": true, \"country\": [\"ru\"], \"homeassistant\": \"2021.2.0\"}, \"authors\": [\"@alryaz\"], \"category\": \"integration\", \"description\": \"Moscow PGU services for HomeAssistant\", \"domain\": \"moscow_pgu\", \"etag_repository\": \"W/\\\"042a844e488eb405a4f929e1f040f811e701cf684964789c04b0b0d6e048c098\\\"\", \"full_name\": \"alryaz/hass-moscow-pgu\", \"last_updated\": \"2021-11-10T06:44:41Z\", \"stargazers_count\": 11, \"topics\": [\"gosuslugi\"], \"last_fetched\": 1648398860.48185, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"362058414\": {\"repository_manifest\": {\"name\": \"Libratone Zipp\", \"render_readme\": true}, \"authors\": [\"@chouffy\"], \"category\": \"integration\", \"description\": \"Control a Libratone Zipp speaker within Home Assistant\", \"domain\": \"libratone_zipp\", \"etag_repository\": \"W/\\\"291eaf61836c69229654147e6d05057f40a699b92326ffd497a4a92a22d88fd9\\\"\", \"full_name\": \"Chouffy/home_assistant_libratone_zipp\", \"last_updated\": \"2021-10-16T07:48:11Z\", \"stargazers_count\": 5, \"topics\": [\"home-assistant-integration\", \"libratone\", \"python3\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"377960412\": {\"repository_manifest\": {\"name\": \"Midea A/C via eWeLink\", \"render_readme\": true}, \"authors\": [\"@georgezhao2010\"], \"category\": \"integration\", \"description\": \"Control your Midea air conditioner devices via the eWeLink cloud\", \"domain\": \"climate_ewelink\", \"etag_repository\": \"W/\\\"34a064e1c1981df4a470452bbf0cb2f3968369f05dc8f571bf9a11bc17ac80c6\\\"\", \"full_name\": \"georgezhao2010/climate_ewelink\", \"last_updated\": \"2022-07-08T12:26:12Z\", \"stargazers_count\": 33, \"topics\": [\"air-conditioner\", \"climate\", \"ewelink\", \"midea\"], \"last_fetched\": 1657362755.201741, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"311536795\": {\"repository_manifest\": {\"hacs\": \"1.6.0\", \"name\": \"Frigate\", \"homeassistant\": \"2022.4.5\"}, \"authors\": [\"@blakeblackshear\"], \"category\": \"integration\", \"description\": \"Frigate integration for Home Assistant\", \"domain\": \"frigate\", \"etag_repository\": \"W/\\\"fccfdc0d6def92cae33bc1dbd252d756ae95677093cb1b0227d3a48609b3cc9b\\\"\", \"full_name\": \"blakeblackshear/frigate-hass-integration\", \"last_updated\": \"2022-07-09T04:25:47Z\", \"stargazers_count\": 254, \"topics\": [\"ai\", \"camera\", \"frigate\", \"nvr\", \"object-detection\"], \"last_fetched\": 1657362648.703713, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"255258767\": {\"repository_manifest\": {\"name\": \"GCE IPX800 V4\", \"country\": \"FR\", \"render_readme\": true}, \"authors\": [\"@Aohzan\"], \"category\": \"integration\", \"description\": \"IPX800 V4 integration for Home-Assistant\", \"domain\": \"ipx800v4\", \"etag_repository\": \"W/\\\"3eeeb9cadf4b3fef28b0073bb3b2f8a6ef1349eaf7ceff94ed40f64119bbf030\\\"\", \"full_name\": \"Aohzan/ipx800\", \"last_updated\": \"2022-06-22T21:27:46Z\", \"stargazers_count\": 11, \"topics\": [\"gce-electronics\", \"ipx800\"], \"last_fetched\": 1656859058.005364, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"384910725\": {\"repository_manifest\": {\"name\": \"XMR Pool Statistics\", \"render_readme\": true}, \"authors\": [\"@hwmland\"], \"category\": \"integration\", \"description\": \"XMR Pool Statistics integration for Home Assistant\", \"domain\": \"xmrpool_stat\", \"etag_repository\": \"W/\\\"38e059d78300889d265b8d68e504df5b5022dfe2e2ac98ab10544e7adebbc311\\\"\", \"full_name\": \"hwmland/homeassistant-xmrpool_stat\", \"last_updated\": \"2022-02-23T18:27:48Z\", \"stargazers_count\": 2, \"topics\": [\"cryptocurrency\", \"home-assistant-integration\", \"monero\", \"xmr\"], \"last_fetched\": 1646496917.456487, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"322881712\": {\"repository_manifest\": {\"name\": \"Honor Router 3/X3 tracker\", \"render_readme\": \"true\"}, \"authors\": [\"@juacas\"], \"category\": \"integration\", \"description\": \"Honor X3 router Device tracker for Home Assistant\", \"domain\": \"honor_x3\", \"etag_repository\": \"W/\\\"2b425dfe442cfab135920364ccbb94edabe532e640ff0313aa649b5167a1dc0e\\\"\", \"full_name\": \"juacas/honor_x3\", \"last_updated\": \"2021-08-24T07:44:17Z\", \"stargazers_count\": 6, \"topics\": [\"device-tracker\", \"presence-detection\", \"router\"], \"last_fetched\": 1656859239.42718, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"377012187\": {\"repository_manifest\": {\"name\": \"Weight Gurus\", \"render_readme\": true}, \"authors\": [\"@jcgoette\"], \"category\": \"integration\", \"description\": \"This custom integration provides sensors for Weight Gurus API endpoints.\", \"domain\": \"weight_gurus\", \"etag_repository\": \"W/\\\"4870953d82f4c5d7256124af50bbdb1c5c9f507150a6d1e7d6c105684dbb5a35\\\"\", \"full_name\": \"jcgoette/weight_gurus_homeassistant\", \"last_updated\": \"2021-12-18T04:00:33Z\", \"stargazers_count\": 2, \"topics\": [\"health\", \"home-assistant-component\", \"home-assistant-sensor\", \"weight\"], \"last_fetched\": 1653229759.110146, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"250488711\": {\"repository_manifest\": {\"name\": \"Niu Scooter Integration\", \"render_readme\": true}, \"authors\": [\"@mwestra\"], \"category\": \"integration\", \"description\": \"niu scooter integration for Home assistant.\", \"domain\": \"niu\", \"etag_repository\": \"W/\\\"1ce1ae7c7cd10b52dcdbda3e1e115e7990b2ce2677fab8477d34c24a25b97261\\\"\", \"full_name\": \"marcelwestrahome/home-assistant-niu-component\", \"last_updated\": \"2022-04-01T06:03:06Z\", \"stargazers_count\": 17, \"topics\": [\"niu\", \"scooters\"], \"last_fetched\": 1653229818.877783, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"279184610\": {\"repository_manifest\": {\"name\": \"Amber Electric\", \"country\": \"AU\", \"homeassistant\": \"2021.7.1\"}, \"authors\": [\"@madpilot\"], \"category\": \"integration\", \"description\": \"Home Assistant Component to pull the latest energy prices from Amber Electric\", \"domain\": \"amberelectric\", \"etag_repository\": \"W/\\\"21d4f432318b1a16c167bc1a6b8fb28738365886c472f066d10c7f13e5dfc1e8\\\"\", \"full_name\": \"madpilot/hass-amber-electric\", \"last_updated\": \"2021-10-07T09:01:00Z\", \"stargazers_count\": 24, \"topics\": [\"amber-electric\", \"electricity-market\", \"electricity-prices\"], \"last_fetched\": 1656859284.8933, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"391413239\": {\"repository_manifest\": {\"name\": \"Teletask\", \"homeassistant\": \"0.109.0\"}, \"authors\": [\"@tiemooowh\"], \"category\": \"integration\", \"description\": \"Teletask (DoIP) Integration for Home Assistant Comunity Store (HACS)\", \"domain\": \"teletask\", \"etag_repository\": \"W/\\\"bacbf933b095af6f04141115fde84e40b6da53d230d953cb33e4564294a556df\\\"\", \"full_name\": \"Tiemooowh/homeassistant-teletask\", \"last_updated\": \"2022-06-25T09:47:37Z\", \"stargazers_count\": 2, \"topics\": [\"domotics\", \"homeassistant-custom-component\", \"teletask\"], \"last_fetched\": 1656859407.490074, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"368653916\": {\"repository_manifest\": {\"name\": \"MOOX-Track\", \"render_readme\": true}, \"authors\": [\"@moox-it\"], \"category\": \"integration\", \"description\": \"MOOX-Track Custom Component for HASS (hass-moox-track) is a custom component that connects your MOOX Track devices to Home Assistant as \\\"Device Trackers\\\"\", \"domain\": \"moox_track\", \"etag_repository\": \"W/\\\"6c795dfdc462f634bed1c5aa38a7cfb88f597c6e4bc6795fec0bdb1e34980edb\\\"\", \"full_name\": \"moox-it/hass-moox-track\", \"last_updated\": \"2021-12-13T17:10:20Z\", \"topics\": [\"device\", \"gps\", \"moox\", \"track\", \"tracker\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"378213601\": {\"repository_manifest\": {\"name\": \"Argoclima\", \"homeassistant\": \"2021.12.1\"}, \"authors\": [\"@nyffchanium\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for Argoclima (Argo) climate control devices\", \"domain\": \"argoclima\", \"etag_repository\": \"W/\\\"4a813ad96de11ba71c12a9853e177e28f8fa563aa592810995a1b513a9518f5f\\\"\", \"full_name\": \"nyffchanium/argoclima-integration\", \"last_updated\": \"2022-06-22T17:25:41Z\", \"stargazers_count\": 5, \"topics\": [\"argo\", \"argoclima\", \"climate-control\"], \"last_fetched\": 1656859318.251058, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"336054515\": {\"repository_manifest\": {\"name\": \"Open Charge Point Protocol (OCPP)\", \"homeassistant\": \"2021.12.0\", \"render_readme\": true}, \"authors\": [\"@lbbrhzn\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for electric vehicle chargers that support the Open Charge Point Protocol (OCPP).\", \"domain\": \"ocpp\", \"etag_repository\": \"W/\\\"d0b584b5706da267ebb7eb7becdb2ba7baa9f77aa99fe43925afb1423043775e\\\"\", \"full_name\": \"lbbrhzn/ocpp\", \"last_updated\": \"2022-07-09T06:03:20Z\", \"stargazers_count\": 71, \"topics\": [\"ocpp\"], \"last_fetched\": 1657362829.243666, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"379688863\": {\"repository_manifest\": {\"name\": \"Thermal Vision\", \"country\": \"CA\", \"homeassistant\": \"2021.4\", \"render_readme\": true}, \"authors\": [\"@TheRealWaldo\"], \"category\": \"integration\", \"description\": \"Thermal Vision Sensor and Camera for Home Assistant\", \"domain\": \"thermal_vision\", \"etag_repository\": \"W/\\\"06cec13179677bbfabbb59807fabf64b76a23f604958d9d0cf6d54097fea92f4\\\"\", \"full_name\": \"TheRealWaldo/thermal\", \"last_updated\": \"2022-06-28T20:43:20Z\", \"stargazers_count\": 35, \"topics\": [\"homeassistant-custom-component\"], \"last_fetched\": 1656859401.5671, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"388979130\": {\"repository_manifest\": {\"name\": \"NSW Covid Data\", \"country\": [\"AU\"], \"homeassistant\": \"2021.9.0\", \"zip_release\": true, \"filename\": \"nswcovid.zip\"}, \"authors\": [\"@troykelly\"], \"category\": \"integration\", \"description\": \"A group of sensors for Home Assistant that tracks New South Wales COVID-19 Data\", \"domain\": \"nswcovid\", \"etag_repository\": \"W/\\\"e4f82a00278417c26669528a148fd1bf4d88282c014255fad61cf23a156ed0c5\\\"\", \"full_name\": \"troykelly/homeassistant-au-nsw-covid\", \"last_updated\": \"2021-10-02T04:15:42Z\", \"stargazers_count\": 1, \"topics\": [\"covid-19\", \"nsw-government\", \"nsw-health\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"227452940\": {\"repository_manifest\": {\"name\": \"Wyze\"}, \"authors\": [\"@JoshuaMulliken\"], \"category\": \"integration\", \"description\": \"Home Assistant Integration for Wyze devices.\", \"domain\": \"wyzeapi\", \"etag_repository\": \"W/\\\"7d9ae607ef5f3f5e7b66fef129314755c10bddcd948533b06d91f1665448a876\\\"\", \"full_name\": \"JoshuaMulliken/ha-wyzeapi\", \"last_updated\": \"2022-07-05T22:54:10Z\", \"stargazers_count\": 447, \"topics\": [\"bulb\", \"switch\", \"wyze\", \"wyze-bulbs\", \"wyze-switchs\"], \"last_fetched\": 1657362800.707554, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"379781545\": {\"repository_manifest\": {\"name\": \"Netgear WAX\", \"hacs\": \"1.6.0\", \"homeassistant\": \"2021.4.0\", \"render_readme\": true}, \"authors\": [\"@rroller\"], \"category\": \"integration\", \"description\": \"Netgear Home Assistant Integration\", \"domain\": \"netgear_wax\", \"etag_repository\": \"W/\\\"ef30f045f9b55c1d69e6023a7c41840cc90593ac35cc8c25b8d4c0571cab954e\\\"\", \"full_name\": \"rroller/netgear\", \"last_updated\": \"2022-03-17T18:38:10Z\", \"stargazers_count\": 9, \"topics\": [\"netgear\", \"wax\", \"wax-610\", \"wax-620\", \"wi-fi\"], \"last_fetched\": 1656859361.001876, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"396695907\": {\"repository_manifest\": {\"name\": \"Gree Extension for Home-Assistant built in integration\", \"render_readme\": true}, \"authors\": [\"@mullerdavid\"], \"category\": \"integration\", \"description\": \"Gree Extension for built in integration\", \"domain\": \"gree_ext\", \"etag_repository\": \"W/\\\"38a68fce18d221a935824ceb69c065d56d29288c62ffe397861704f55ade245a\\\"\", \"full_name\": \"mullerdavid/hass_GreeExt\", \"last_updated\": \"2022-04-18T15:47:02Z\", \"stargazers_count\": 1, \"topics\": [\"gree\"], \"last_fetched\": 1653733515.155596, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"325329098\": {\"repository_manifest\": {\"homeassistant\": \"2021.7.0\", \"name\": \"Sleep As Android\", \"render_readme\": true, \"zip_release\": true, \"filename\": \"sleep_as_android.zip\"}, \"authors\": [\"@IATkachenko\"], \"category\": \"integration\", \"description\": \"Sleep As Android integration for Home Assistant\", \"domain\": \"sleep_as_android\", \"downloads\": 937, \"etag_repository\": \"W/\\\"9f10f870c41f86b7fa456e7bfe3776eedfc0413aa2b8801da16847b6c8dadb67\\\"\", \"full_name\": \"IATkachenko/HA-SleepAsAndroid\", \"last_updated\": \"2022-05-25T18:50:58Z\", \"stargazers_count\": 62, \"topics\": [\"mqtt\", \"sleep-analysis\", \"sleep-as-android\", \"sleep-tracker\"], \"last_fetched\": 1656859211.499555, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"290193894\": {\"repository_manifest\": {\"name\": \"Rollease Acmeda Automate Pulse Hub v2\", \"render_readme\": true}, \"authors\": [\"@sillyfrog\"], \"category\": \"integration\", \"description\": \"Rollease Acmeda Automate Pulse Hub v2 integration for Home Assistant\", \"domain\": \"automate\", \"etag_repository\": \"W/\\\"d8352298ca29629ed8c143b7a53be927be0a4c8d3ab998e2f2b6543b978f5525\\\"\", \"full_name\": \"sillyfrog/Automate-Pulse-v2\", \"last_updated\": \"2022-01-23T11:01:40Z\", \"stargazers_count\": 19, \"last_fetched\": 1656859379.637083, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"394082552\": {\"repository_manifest\": {\"name\": \"Frigate Card\", \"render_readme\": true, \"filename\": \"frigate-hass-card.js\", \"homeassistant\": \"2022.3.0\"}, \"category\": \"plugin\", \"description\": \"A Lovelace card for Frigate in Home Assistant\", \"domain\": \"\", \"downloads\": 7794, \"etag_repository\": \"W/\\\"570fe7854446898767545e028cdf1e5645d197727ccaacdc6b13d714da4691a5\\\"\", \"full_name\": \"dermotduffy/frigate-hass-card\", \"last_updated\": \"2022-07-06T04:51:58Z\", \"stargazers_count\": 141, \"topics\": [\"cctv\", \"frigate\", \"nvr\"], \"last_fetched\": 1657362458.735431, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"395991055\": {\"repository_manifest\": {\"name\": \"Anniversary\", \"country\": [\"HU\"], \"render_readme\": \"true\"}, \"authors\": [\"@amaximus\"], \"category\": \"integration\", \"description\": \"Anniversary integration for Home Assistant\", \"domain\": \"anniversary\", \"etag_repository\": \"W/\\\"1515530ba337021ee432264270c06db58d76c85b725e3618327f850f2c014756\\\"\", \"full_name\": \"amaximus/anniversary\", \"last_updated\": \"2022-05-02T18:04:16Z\", \"stargazers_count\": 11, \"last_fetched\": 1653229582.456794, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"362700564\": {\"repository_manifest\": {\"name\": \"Tesla\", \"hacs\": \"1.6.0\", \"homeassistant\": \"2021.9.0\", \"zip_release\": true, \"filename\": \"tesla_custom.zip\"}, \"authors\": [\"@alandtse\"], \"category\": \"integration\", \"description\": \"Tesla custom integration for Home Assistant. This requires a refresh token be generated by third-party apps to login.\", \"domain\": \"tesla_custom\", \"downloads\": 3370, \"etag_repository\": \"W/\\\"5d9e222e6b45984dd90a1f04a485e53ffc699a7f9060212432606248224dc7fd\\\"\", \"full_name\": \"alandtse/tesla\", \"last_updated\": \"2022-06-02T02:43:57Z\", \"stargazers_count\": 155, \"topics\": [\"home-assistant-component\", \"tesla\"], \"last_fetched\": 1657362611.049992, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"383732864\": {\"repository_manifest\": {\"name\": \"Garmin Connect\", \"render_readme\": true}, \"authors\": [\"@cyberjunky\"], \"category\": \"integration\", \"description\": \"The Garmin Connect integration allows you to expose data from Garmin Connect to Home Assistant.\", \"domain\": \"garmin_connect\", \"etag_repository\": \"W/\\\"866d25ac3ab7f72c9f133b81a1a2bf8602dd6639a2554f9fa48943eac72999c4\\\"\", \"full_name\": \"cyberjunky/home-assistant-garmin_connect\", \"last_updated\": \"2022-05-24T19:19:04Z\", \"stargazers_count\": 56, \"topics\": [\"garmin-connect\", \"home-assistant-component\"], \"last_fetched\": 1656859125.959267, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"346474804\": {\"repository_manifest\": {\"name\": \"Toyota Connected Services\", \"homeassistant\": \"2021.12.0\", \"zip_release\": true, \"filename\": \"toyota.zip\"}, \"authors\": [\"@DurgNomis-drol\"], \"category\": \"integration\", \"description\": \"Toyota Connected Services integration for Home Assistant.\", \"domain\": \"toyota\", \"downloads\": 691, \"etag_repository\": \"W/\\\"40dc0aad118ba6410588c2b1bdb564bc950ddae0decbea3f56e0bc3d23bd960d\\\"\", \"full_name\": \"DurgNomis-drol/ha_toyota\", \"last_updated\": \"2022-06-07T13:07:04Z\", \"stargazers_count\": 55, \"topics\": [\"car\", \"toyota\", \"vehicle\"], \"last_fetched\": 1656859156.588001, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"382335433\": {\"repository_manifest\": {\"name\": \"SAJ eSolar\"}, \"authors\": [\"@djansen1987\"], \"category\": \"integration\", \"description\": \"SAJ eSolar Portal Sensors\", \"domain\": \"saj_esolar\", \"etag_repository\": \"W/\\\"8748ae71f0953f7aa8af04b54ca4dba43aa1201d22f0c44c4f4fcb643c441309\\\"\", \"full_name\": \"djansen1987/SAJeSolar\", \"last_updated\": \"2022-01-15T17:09:36Z\", \"stargazers_count\": 6, \"topics\": [\"esolar\", \"intergration\", \"saj\", \"solar\", \"solar-system\"], \"last_fetched\": 1653229680.612727, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"398739214\": {\"repository_manifest\": {\"render_readme\": true, \"homeassistant\": \"2021.8.1\"}, \"category\": \"integration\", \"description\": \"Add a Webhook service to HomeAssistant, originally designed for use with Discord Webhooks\", \"domain\": \"webhook_service\", \"etag_repository\": \"W/\\\"054963c02e08b59521a46327f3853ad28cc1107a7cb731e83babce5670b29b1d\\\"\", \"full_name\": \"HCookie/Webhook-Service-home-assistant\", \"last_updated\": \"2021-08-25T02:24:45Z\", \"stargazers_count\": 5, \"topics\": [\"webhooks\"], \"last_fetched\": 1643571232.765068, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"383608593\": {\"repository_manifest\": {\"name\": \"Toshiba AC\", \"render_readme\": true, \"homeassistant\": \"2022.5.0\"}, \"authors\": [\"@h4de5\"], \"category\": \"integration\", \"description\": \"Toshiba AC integration into home-assistant.io\", \"domain\": \"toshiba_ac\", \"downloads\": 20, \"etag_repository\": \"W/\\\"0205aafa5dbe14b1ec1bb25456de0a7fd0c50ce02d67f1c5ead2f77d43e90005\\\"\", \"full_name\": \"h4de5/home-assistant-toshiba_ac\", \"last_updated\": \"2022-06-19T16:45:00Z\", \"stargazers_count\": 38, \"topics\": [\"climate\", \"toshiba\"], \"last_fetched\": 1656859198.10706, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"382905556\": {\"repository_manifest\": {\"name\": \"Cover Time Based Synced\", \"hacs\": \"1.6.0\", \"homeassistant\": \"0.118.0\"}, \"authors\": [\"@kotborealis\"], \"category\": \"integration\", \"description\": \"Time-based cover. Install it via HACS.\", \"domain\": \"cover_time_based_synced\", \"etag_repository\": \"W/\\\"1c4d3e0cf590393f05dc0290000df1a467a9df246133dd0124cdbd46f65ed376\\\"\", \"full_name\": \"kotborealis/home-assistant-custom-components-cover-time-based-synced\", \"last_updated\": \"2021-08-28T10:42:07Z\", \"stargazers_count\": 7, \"topics\": [\"cover\", \"roller-shutters\", \"service\", \"shutter\", \"trigger\"], \"last_fetched\": 1642851473.941003, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"402799177\": {\"repository_manifest\": {\"name\": \"Blind Card\", \"filename\": \"hass-blind-card.js\", \"render_readme\": true, \"homeassistant\": \"2021.11.0\"}, \"category\": \"plugin\", \"description\": \"Blind card for Home Assistant Lovelace UI\", \"domain\": \"\", \"etag_repository\": \"W/\\\"bd8ec85fd625820c751576da927cddc20d4f05579addebb61a21574d8c860ef9\\\"\", \"full_name\": \"tungmeister/hass-blind-card\", \"last_updated\": \"2022-01-31T18:19:37Z\", \"stargazers_count\": 22, \"last_fetched\": 1656859639.413081, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"395770920\": {\"repository_manifest\": {\"name\": \"OpenEI\", \"homeassistant\": \"2021.8.0\", \"zip_release\": true, \"filename\": \"openei.zip\"}, \"authors\": [\"@firstof9\"], \"category\": \"integration\", \"description\": \"OpenEI integration for Home Assistant\", \"domain\": \"openei\", \"downloads\": 90, \"etag_repository\": \"W/\\\"372be3eb847d99070b53b1f73064613f68cc8a1447862ad24f400471e0ed5fdf\\\"\", \"full_name\": \"firstof9/ha-openei\", \"last_updated\": \"2022-05-27T13:22:07Z\", \"stargazers_count\": 11, \"topics\": [\"api\", \"energy\", \"rates\"], \"last_fetched\": 1656859176.716358, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"402156016\": {\"repository_manifest\": {\"name\": \"Kamstrup 403\", \"homeassistant\": \"2022.2.0\", \"render_readme\": true}, \"authors\": [\"@golles\"], \"category\": \"integration\", \"description\": \"Kamstrup 403 integration for Home Assistant\", \"domain\": \"kamstrup_403\", \"etag_repository\": \"W/\\\"123ec00b6259fc3d314de05944322cca2dc43c105eed8c947d28e9c73af4b7b7\\\"\", \"full_name\": \"golles/ha-kamstrup_403\", \"last_updated\": \"2022-07-02T13:39:46Z\", \"stargazers_count\": 10, \"topics\": [\"home-assistant-component\", \"home-assistant-integration\", \"kamstrup\", \"kamstrup403\"], \"last_fetched\": 1657362759.178723, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"372795369\": {\"repository_manifest\": {\"name\": \"Arris DCX960 (Ziggo, Telenet, Magenta, UPC, Virgin)\", \"country\": [\"NL\", \"BE\", \"CH\", \"GB\", \"AT\"], \"render_readme\": true, \"homeassistant\": \"2021.5.0\"}, \"authors\": [\"@Sholofly\"], \"category\": \"integration\", \"description\": \"Custom component to integrate Arris DCX960 Horizon EOS Settopbox into Home Assistant\", \"domain\": \"arris_dcx960\", \"etag_repository\": \"W/\\\"f4a4c9b97c5515929a48d6d22fdb244af4b6fe6e585b4eda6160ccfd3b49fed1\\\"\", \"full_name\": \"Sholofly/arrisdcx960\", \"last_updated\": \"2022-06-14T04:13:39Z\", \"stargazers_count\": 25, \"topics\": [\"arris\", \"eos\", \"horizon\", \"magenta\", \"settopbox\", \"telenet\", \"telenet-tv\", \"telenet-tv-boxes\", \"upc\", \"virgin\", \"virgin-media\", \"vodafone\", \"ziggo\", \"ziggo-next\"], \"last_fetched\": 1656859379.264475, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"403401396\": {\"repository_manifest\": {\"name\": \"HERE Destination Weather\", \"hacs\": \"1.6.0\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@eifinger\"], \"category\": \"integration\", \"description\": \"Custom Home Assistant Integration for the HERE Destination Weather API\", \"domain\": \"here_weather\", \"etag_repository\": \"W/\\\"1719870e614464e47b8f2c790661109708899eebfc3e0c43d189ff2d52ec9507\\\"\", \"full_name\": \"eifinger/hass-here-weather\", \"last_updated\": \"2022-01-11T07:41:08Z\", \"stargazers_count\": 2, \"topics\": [\"here-maps-api\", \"herepy\", \"homeassistant-custom-component\", \"pyton\"], \"last_fetched\": 1641895983.019757, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"213346369\": {\"repository_manifest\": {\"name\": \"ECHONETLite Platform\", \"render_readme\": true, \"homeassistant\": \"2021.9.2\"}, \"authors\": [\"@scottyphillips\"], \"category\": \"integration\", \"description\": \"A Home Assistant custom component for use with ECHONET enabled Mitsubishi HVAC systems. \", \"domain\": \"echonetlite\", \"etag_repository\": \"W/\\\"254b89c173ab1082f2e7bd01c2e642deff5e8bcc90ab706eab960629dcb8d644\\\"\", \"full_name\": \"scottyphillips/echonetlite_homeassistant\", \"last_updated\": \"2022-07-09T09:19:32Z\", \"stargazers_count\": 61, \"last_fetched\": 1657362935.810124, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"334448958\": {\"repository_manifest\": {\"name\": \"bootstrap-grid-card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Bootstrap grid in Lovelace UI\", \"domain\": \"\", \"downloads\": 4492, \"etag_repository\": \"W/\\\"60aa746b986497a4598d22f35f91b51a767c9dbecdc9d03bd0ccc07d51211487\\\"\", \"full_name\": \"ownbee/bootstrap-grid-card\", \"last_updated\": \"2022-03-19T12:02:28Z\", \"stargazers_count\": 20, \"topics\": [\"bootstrap\", \"bootstrap-grid-card\", \"card\", \"grid\", \"layout\"], \"last_fetched\": 1653230084.740128, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"403381222\": {\"repository_manifest\": {\"name\": \"Noctis-Solarized\"}, \"category\": \"theme\", \"description\": \"Noctis theme made Solarized\", \"domain\": \"\", \"etag_repository\": \"W/\\\"f47981d81251d2ab2bddf1b5ff4caa14ef05d6848055104148d3f983e967a5c6\\\"\", \"full_name\": \"williamahartman/noctis-solarized\", \"last_updated\": \"2021-09-29T22:53:08Z\", \"stargazers_count\": 2, \"topics\": [\"home-assistant-theme\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"403123516\": {\"repository_manifest\": {\"name\": \"Ecowater Softener\", \"render_readme\": true}, \"authors\": [\"@barleybobs\"], \"category\": \"integration\", \"description\": \"A Homeassistant custom component to integrate Ecowater water softeners\", \"domain\": \"ecowater_softener\", \"etag_repository\": \"W/\\\"8554db86aff96723a954f67ccb5e0e08354590f739b130c3f8d2a1bbb9162ed7\\\"\", \"full_name\": \"barleybobs/homeassistant-ecowater-softener\", \"last_updated\": \"2022-07-02T13:40:36Z\", \"stargazers_count\": 7, \"topics\": [\"ecowater\"], \"last_fetched\": 1656859068.154103, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"323155307\": {\"repository_manifest\": {\"name\": \"Duepi Evo\", \"render_readme\": true}, \"authors\": [\"@aceindy\"], \"category\": \"integration\", \"description\": \"Control Duepi_evo based pellet stoves with Home Assistant over wifi using ESPLink\", \"domain\": \"duepi_evo\", \"etag_repository\": \"W/\\\"2291212d6b78899326fea4621784479c489a83517fe01c148a7aa874ceb4c958\\\"\", \"full_name\": \"aceindy/Duepi_EVO\", \"last_updated\": \"2022-03-24T15:10:33Z\", \"stargazers_count\": 8, \"topics\": [\"heating-systems\"], \"last_fetched\": 1648398841.232792, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"392188182\": {\"repository_manifest\": {\"name\": \"\\u041b\\u0438\\u0447\\u043d\\u044b\\u0439 \\u043a\\u0430\\u0431\\u0438\\u043d\\u0435\\u0442 \\u042d\\u043d\\u0435\\u0440\\u0433\\u043e\\u0441\\u0431\\u044b\\u0422 \\u041f\\u043b\\u044e\\u0441\", \"render_readme\": true, \"country\": \"ru\", \"homeassistant\": \"2021.2.0\"}, \"authors\": [\"@alryaz\"], \"category\": \"integration\", \"description\": \"\\u0418\\u043d\\u0442\\u0435\\u0433\\u0440\\u0430\\u0446\\u0438\\u044f \\u042d\\u043d\\u0435\\u0440\\u0433\\u043e\\u0441\\u0431\\u044b\\u0422.\\u041f\\u043b\\u044e\\u0441 \\u0434\\u043b\\u044f Home Assistant\", \"domain\": \"energosbyt_plus\", \"etag_repository\": \"W/\\\"95178c809e2838b288e5b2edb5af7a6414b2d30c4be53ef62709578fe64d1a7f\\\"\", \"full_name\": \"alryaz/hass-energosbyt-plus\", \"last_updated\": \"2021-11-03T19:32:31Z\", \"stargazers_count\": 8, \"topics\": [\"energosbyt\", \"energosbyt-plus\"], \"last_fetched\": 1653229577.244483, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"407627914\": {\"repository_manifest\": {\"name\": \"Google Dark Theme\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"A fork of popular Home Assistant Google dark theme with animated icons\", \"domain\": \"\", \"etag_repository\": \"W/\\\"ed419db2b426cee9d55eb14499bdb3239d4ee769f3762fac2539d83607fb7446\\\"\", \"full_name\": \"pacjo/google_dark_animated\", \"last_updated\": \"2021-11-22T17:05:56Z\", \"stargazers_count\": 4, \"topics\": [\"ha\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"212657669\": {\"repository_manifest\": {\"name\": \"\\u26cf\\ufe0f Minecraft Version\", \"render_readme\": \"true\"}, \"authors\": [\"@xMrVizzy\"], \"category\": \"integration\", \"description\": \"\\ud83c\\udf3f Minecraft Version Checker for Home Assistant.\", \"domain\": \"minecraft_version\", \"etag_repository\": \"W/\\\"958e918392b7446c17d9a31201268a4316716e2bfcac9b4617f2350ae60476dd\\\"\", \"full_name\": \"Kraineff/minecraft-version\", \"last_updated\": \"2020-01-16T12:36:24Z\", \"stargazers_count\": 4, \"last_fetched\": 1653229796.133733, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"403062943\": {\"repository_manifest\": {\"name\": \"battery_consumption\"}, \"authors\": [\"@jugla\"], \"category\": \"integration\", \"description\": \"Home Assistant Component to compute battery consumption\", \"domain\": \"battery_consumption\", \"etag_repository\": \"W/\\\"dac8c65955fae9bf061d54c3aaacd2bf143f4a2d9329170a80e6083c7d012e74\\\"\", \"full_name\": \"jugla/battery_consumption\", \"last_updated\": \"2021-12-11T21:53:46Z\", \"stargazers_count\": 8, \"topics\": [\"battery\", \"consumption\"], \"last_fetched\": 1648399994.935852, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"408429126\": {\"repository_manifest\": {\"name\": \"MQTT DiscoveryStream\", \"render_readme\": true}, \"authors\": [\"@koying\"], \"category\": \"integration\", \"description\": \"Extension of HA mqtt_statestream integration with discovery config publishing\", \"domain\": \"mqtt_discoverystream\", \"etag_repository\": \"W/\\\"f0ffe8f5a6fad126fefdb9f71a0a9aba82019e32ee7969baa3fe26fcc4a012b0\\\"\", \"full_name\": \"koying/mqtt_discoverystream_ha\", \"last_updated\": \"2022-05-05T12:55:12Z\", \"stargazers_count\": 6, \"topics\": [\"mqtt\"], \"last_fetched\": 1653229789.778313, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"401454435\": {\"repository_manifest\": {\"name\": \"battery_sim\", \"country\": [\"GB\"], \"render_readme\": true}, \"authors\": [\"@hif2k1\"], \"category\": \"integration\", \"description\": \"Home assistant home battery simulator - allows you to model how much energy you would save with a home battery\", \"domain\": \"battery_sim\", \"etag_repository\": \"W/\\\"aa199ab10b1ed42152bd032331ca7b55301390a146ed1e9ace1dfe9fe9e59660\\\"\", \"full_name\": \"hif2k1/battery_sim\", \"last_updated\": \"2022-06-14T21:08:00Z\", \"stargazers_count\": 28, \"topics\": [\"energy-storage\", \"environmental\"], \"last_fetched\": 1656859206.006609, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"319608056\": {\"repository_manifest\": {\"homeassistant\": \"2022.4.0b0\", \"name\": \"Bodymiscale\", \"render_readme\": true}, \"authors\": [\"@dckiller51\"], \"category\": \"integration\", \"description\": \"Custom_components Body Metrics for Xiaomi Miscale 1 and 2 (esphome or BLE monitor for Homeassistant)\", \"domain\": \"bodymiscale\", \"etag_repository\": \"W/\\\"97061ab11fbc66b73e6f0b848024983235c1e906d4a65057247788a859a7c782\\\"\", \"full_name\": \"dckiller51/bodymiscale\", \"last_updated\": \"2022-07-08T08:44:11Z\", \"stargazers_count\": 95, \"topics\": [\"ble-monitor\", \"esphome\", \"miscale\", \"mitemp-bt\", \"xiaomi\"], \"last_fetched\": 1657362707.518171, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"401145616\": {\"repository_manifest\": {\"name\": \"myenergi\", \"hacs\": \"1.6.0\", \"render_readme\": true, \"homeassistant\": \"2021.9.1\"}, \"authors\": [\"@cjne\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for MyEnergi devices\", \"domain\": \"myenergi\", \"etag_repository\": \"W/\\\"460e4799ff6b52fc76d12f61da29e0e6ce203e8d98f05d974daaadea3a236674\\\"\", \"full_name\": \"CJNE/ha-myenergi\", \"last_updated\": \"2022-07-07T07:27:25Z\", \"stargazers_count\": 51, \"topics\": [\"ev-charging\", \"green-energy\", \"myenergi\"], \"last_fetched\": 1657362666.112863, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"401856574\": {\"repository_manifest\": {\"name\": \"Windcentrale\", \"homeassistant\": \"2020.12.0\", \"zip_release\": true, \"filename\": \"windcentrale.zip\"}, \"authors\": [\"@jobvk\"], \"category\": \"integration\", \"description\": \"Provides Home Assistant sensors for multiple windturbines from the Windcentrale\", \"domain\": \"windcentrale\", \"etag_repository\": \"W/\\\"ad9427fad034ad0020a4ce807c0ab2708b046c053a24a6b1e0ccc7fa0bea0507\\\"\", \"full_name\": \"jobvk/Home-Assistant-Windcentrale\", \"last_updated\": \"2022-01-05T23:01:13Z\", \"stargazers_count\": 4, \"topics\": [\"dutch\", \"windcentrale\"], \"last_fetched\": 1644064234.278745, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"246549747\": {\"repository_manifest\": {\"name\": \"Atomic Calendar Revive\", \"filename\": \"atomic-calendar-revive.js\", \"country\": [\"GB\"]}, \"category\": \"plugin\", \"description\": \"An advanced calendar card for Home Assistant Lovelace.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"7687733a3a9368aa4211b5b15402e03d53e83cb87b034b4cf40e7186f7797c7d\\\"\", \"full_name\": \"totaldebug/atomic-calendar-revive\", \"last_updated\": \"2022-07-04T21:42:24Z\", \"stargazers_count\": 203, \"topics\": [\"calendar\", \"card\", \"javascript\", \"module\"], \"last_fetched\": 1657362554.098269, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"356033332\": {\"repository_manifest\": {\"name\": \"Crypto Tracker\", \"render_readme\": true}, \"authors\": [\"@PepegaBruh\"], \"category\": \"integration\", \"description\": \"Integration for Home Assistant to implement a crypto tracking system\", \"domain\": \"cryptostate\", \"etag_repository\": \"W/\\\"d41febd859a3055f9876cbcc01ec39fd876142a1e6257ac3cca48f6de01fd7a0\\\"\", \"full_name\": \"BigNocciolino/CryptoTracker\", \"last_updated\": \"2022-05-24T10:41:30Z\", \"stargazers_count\": 23, \"topics\": [\"automation\", \"currency\", \"tracker\"], \"last_fetched\": 1657362643.426169, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"417802358\": {\"repository_manifest\": {\"name\": \"TooGoodToGo\", \"render_readme\": true}, \"authors\": [\"@chouffy\"], \"category\": \"integration\", \"description\": \"TooGoodToGo items stock as sensor in Home Assistant\", \"domain\": \"tgtg\", \"etag_repository\": \"W/\\\"45d151b925aefb68c2e348e920889f1a98bd1439b18ab922e7900abf5dbc8935\\\"\", \"full_name\": \"Chouffy/home_assistant_tgtg\", \"last_updated\": \"2022-06-21T15:23:03Z\", \"stargazers_count\": 15, \"topics\": [\"home-assistant-integration\", \"python3\", \"toogoodtogo\"], \"last_fetched\": 1656859095.399767, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"420504770\": {\"repository_manifest\": {\"name\": \"Water Quality FVM\", \"country\": [\"HU\"], \"render_readme\": \"true\"}, \"authors\": [\"@amaximus\"], \"category\": \"integration\", \"description\": \"Water quality integration for Home Assistant with data provided by Budapest FVM\", \"domain\": \"water_quality_fvm\", \"etag_repository\": \"W/\\\"cb1071a78f1f29048f8ce24d2c6510b5b2f0b128b3982683d9565fb6b715f731\\\"\", \"full_name\": \"amaximus/water_quality_fvm\", \"last_updated\": \"2021-12-23T12:36:22Z\", \"stargazers_count\": 3, \"topics\": [\"budapest\", \"homeassistant-custom-component\", \"hungary\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"326352749\": {\"repository_manifest\": {\"name\": \"MasterLink Gateway\", \"country\": \"US\", \"render_readme\": true}, \"authors\": [\"@giachello\", \"@Lele-72\"], \"category\": \"integration\", \"description\": \"This components integrates Bang & Olufsen Master Link Gateway and Beolink Gateway to Home Assistant, the open-source home automation platform.\", \"domain\": \"mlgw\", \"etag_repository\": \"W/\\\"3aca209b6c64231810cd0a3ee99029bcbb6e23be16024c10a41916534530119c\\\"\", \"full_name\": \"giachello/mlgw\", \"last_updated\": \"2022-05-22T13:11:09Z\", \"stargazers_count\": 17, \"topics\": [\"bang-olufsen\", \"beolink-gateway\", \"masterlink-gateway\", \"mlgw-configuration\"], \"last_fetched\": 1653229727.785963, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"302122266\": {\"repository_manifest\": {\"name\": \"Cover Icon Element\", \"render_readme\": true, \"filename\": \"cover-icon-element.js\"}, \"category\": \"plugin\", \"description\": \"Improved cover icon for home assistant picture element\", \"domain\": \"\", \"etag_repository\": \"W/\\\"b92ba757d750087f6f71b3aeac789089806854a1c17c9555b4f6f724c588ad24\\\"\", \"full_name\": \"queimadus/cover-icon-element\", \"last_updated\": \"2021-11-17T20:04:06Z\", \"stargazers_count\": 4, \"topics\": [\"cover\"], \"last_fetched\": 1643571262.256599, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"423082071\": {\"repository_manifest\": {\"name\": \"Flipdown Timer Card\", \"render_readme\": true, \"filename\": \"flipdown-timer-card.js\"}, \"category\": \"plugin\", \"description\": \"Flipdown Timer Card for Home Assistant Lovelace\", \"domain\": \"\", \"downloads\": 1669, \"etag_repository\": \"W/\\\"e03a03173232c19c4455859c49df77cf154fcfc00522ee4029b04e2eb2dc4c4f\\\"\", \"full_name\": \"pmongloid/flipdown-timer-card\", \"last_updated\": \"2022-06-11T12:53:23Z\", \"stargazers_count\": 32, \"topics\": [\"timer\"], \"last_fetched\": 1656859613.347214, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"420365062\": {\"repository_manifest\": {\"name\": \"Last Changed Element\", \"render_readme\": true, \"filename\": \"last-changed-element.js\"}, \"category\": \"plugin\", \"description\": \"Display when entity was last changed in home assistant picture element\", \"domain\": \"\", \"etag_repository\": \"W/\\\"d44a2de2e9fc4504eaa91b6fbacffb86c3bddb23ac0177865a7b43fef06ecc3a\\\"\", \"full_name\": \"queimadus/last-changed-element\", \"last_updated\": \"2021-10-23T09:37:59Z\", \"stargazers_count\": 6, \"last_fetched\": 1653230094.131601, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"413430860\": {\"repository_manifest\": {\"name\": \"Person\", \"filename\": \"person-entity-card-bundle.js\", \"render_readme\": \"true\"}, \"category\": \"plugin\", \"description\": \"Minimalist plugin which allows users to add person entity in order to show the location with a beutiful and clean interface.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"2950d71983ee8ef81374e4566c2318b7a497e61a7818d3fee0ff0f11a4d0ac3c\\\"\", \"full_name\": \"gerardag/person-entity-card\", \"last_updated\": \"2021-12-23T07:13:45Z\", \"stargazers_count\": 15, \"last_fetched\": 1648398747.653776, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"402612874\": {\"repository_manifest\": {\"name\": \"WeatherAPI\", \"render_readme\": true}, \"authors\": [\"@iprak\"], \"category\": \"integration\", \"description\": \"HomeAssistant custom integration to fetch data from weatherapi\", \"domain\": \"weatherapi\", \"etag_repository\": \"W/\\\"e2b377d5679249e1ada5837dcd271734d37ceb4f9c98cfd26b3fb20f01586ab2\\\"\", \"full_name\": \"iprak/weatherapi\", \"last_updated\": \"2022-02-11T10:21:19Z\", \"stargazers_count\": 4, \"topics\": [\"custom\", \"weather\", \"weatherapi\"], \"last_fetched\": 1648840133.499591, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"411736321\": {\"repository_manifest\": {\"name\": \"DWD Pollenflug\", \"render_readme\": true}, \"authors\": [\"@mampfes\"], \"category\": \"integration\", \"description\": \"Adds pollen forecasts from DWD to Home Assistant.\", \"domain\": \"dwd_pollenflug\", \"etag_repository\": \"W/\\\"acd86c0008f34bf5c8bdfb64cea77153aa6dd812aea3ec51ece85cf5195dc895\\\"\", \"full_name\": \"mampfes/hacs_dwd_pollenflug\", \"last_updated\": \"2022-05-28T07:12:57Z\", \"stargazers_count\": 26, \"topics\": [\"dwd\", \"pollen\", \"pollenflug\"], \"last_fetched\": 1656859285.282343, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"390073284\": {\"repository_manifest\": {\"name\": \"Sonos Cloud\", \"country\": \"US\", \"homeassistant\": \"2022.6.0\", \"render_readme\": true}, \"authors\": [\"@jjlawren\"], \"category\": \"integration\", \"description\": \"Sonos cloud API integration for Home Assistant with improved TTS/alerts handling\", \"domain\": \"sonos_cloud\", \"etag_repository\": \"W/\\\"7685101c908966d81e66dd177dc950cc99f362d7af1e3d0884166dc41fe5ea34\\\"\", \"full_name\": \"jjlawren/sonos_cloud\", \"last_updated\": \"2022-06-16T14:20:47Z\", \"stargazers_count\": 63, \"topics\": [\"sonos\"], \"last_fetched\": 1656859229.820508, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"422834940\": {\"repository_manifest\": {\"name\": \"Kef Connector\", \"render_readme\": true}, \"authors\": [\"@n0ciple\"], \"category\": \"integration\", \"description\": \"A Home Assistant integration for the Kef LS50W2\", \"domain\": \"kef_connector\", \"etag_repository\": \"W/\\\"6417d0912c3be513d255b8a39834df3339df2b804b884aadf8383186df2dd3f7\\\"\", \"full_name\": \"N0ciple/hass-kef-connector\", \"last_updated\": \"2022-03-03T14:43:11Z\", \"stargazers_count\": 1, \"topics\": [\"kef\", \"ls50\", \"ls50w2\", \"media-player\", \"speaker\"], \"last_fetched\": 1646497002.87206, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"398781181\": {\"repository_manifest\": {\"name\": \"Candy Simply-Fi\", \"render_readme\": true}, \"authors\": [\"@ofalvai\"], \"category\": \"integration\", \"description\": \"Unofficial Candy/Haier washing machine integration for Home Assistant \", \"domain\": \"candy\", \"etag_repository\": \"W/\\\"bec7faec7f9764798ea8cd60544a34aebf105b9e539ef0903f45eaf1ff518d26\\\"\", \"full_name\": \"ofalvai/home-assistant-candy\", \"last_updated\": \"2022-07-07T23:45:03Z\", \"stargazers_count\": 40, \"topics\": [\"home-assistant-component\", \"home-assistant-integration\"], \"last_fetched\": 1657362880.807784, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"410667735\": {\"repository_manifest\": {\"name\": \"Reaper DAW\", \"homeassistant\": \"2021.9.0\", \"zip_release\": true, \"filename\": \"reaper.zip\", \"render_readme\": true}, \"authors\": [\"@kubawolanin\"], \"category\": \"integration\", \"description\": \"Reaper DAW custom integration for Home Assistant\", \"domain\": \"reaper\", \"etag_repository\": \"W/\\\"b377a6d3f386effa3d7d733409637f6783223e2bc3726250953da90d75badc0b\\\"\", \"full_name\": \"kubawolanin/ha-reaper\", \"last_updated\": \"2021-11-12T16:36:27Z\", \"stargazers_count\": 8, \"topics\": [\"daw\", \"digital-audio-workstation\", \"reaper\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"418810115\": {\"repository_manifest\": {\"name\": \"pfSense integration for Home Assistant\", \"homeassistant\": \"2022.4.0\", \"render_readme\": true}, \"authors\": [\"@travisghansen\"], \"category\": \"integration\", \"description\": \"pfSense integration with Home Assistant\", \"domain\": \"pfsense\", \"etag_repository\": \"W/\\\"9cfff2cbd976311d81b7097e1fb45bc715f6215909e9d01dc090610fd00af20f\\\"\", \"full_name\": \"travisghansen/hass-pfsense\", \"last_updated\": \"2022-07-07T23:26:05Z\", \"stargazers_count\": 73, \"topics\": [\"hassio-integration\", \"pfsense\"], \"last_fetched\": 1657362976.516665, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"251039581\": {\"repository_manifest\": {\"name\": \"Ginlong Solis PV portal integration\", \"homeassistant\": \"2021.9\"}, \"authors\": [\"@hultenvp\"], \"category\": \"integration\", \"description\": \"HomeAssistant integration for the Ginlong Solis PV Monitoring portal. This integration supports the current Platform v2.0 portal (m.ginlong.com) which supports Solis and Solarman PV inverter brands. Also supports new SolisCloud platform\", \"domain\": \"solis\", \"etag_repository\": \"W/\\\"9c14d156e7f1cb1b1e164b6c5e575452167178f94fa5b1443e3150730b8c1812\\\"\", \"full_name\": \"hultenvp/solis-sensor\", \"last_updated\": \"2022-05-21T11:24:10Z\", \"stargazers_count\": 55, \"topics\": [\"ginlong\", \"solarman\", \"solis\", \"soliscloud\"], \"last_fetched\": 1657362774.635508, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"407205510\": {\"repository_manifest\": {\"name\": \"\\u041f\\u0418\\u041a \\u0414\\u043e\\u043c\\u043e\\u0444\\u043e\\u043d / PIK Intercom\", \"render_readme\": true, \"country\": \"ru\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@alryaz\"], \"category\": \"integration\", \"description\": \"\\u041f\\u0418\\u041a \\u0414\\u043e\\u043c\\u043e\\u0444\\u043e\\u043d \\u0434\\u043b\\u044f Home Assistant\", \"domain\": \"pik_intercom\", \"etag_repository\": \"W/\\\"366553004195560d59e9c2ee703c799880fda7e6f6b89a72e71e437e0c653a30\\\"\", \"full_name\": \"alryaz/hass-pik-intercom\", \"last_updated\": \"2022-01-18T10:54:21Z\", \"stargazers_count\": 17, \"topics\": [\"intercom\", \"pik-group\"], \"last_fetched\": 1653824572.068449, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"408074547\": {\"repository_manifest\": {\"name\": \"Acer Air Monitor\", \"hacs\": \"1.19.1\", \"homeassistant\": \"2021.12.8\"}, \"authors\": [\"@sugoi-wada\"], \"category\": \"integration\", \"description\": \"Acer air monitor for Home Assistant\", \"domain\": \"acer_air_monitor\", \"etag_repository\": \"W/\\\"e97e926afec8cfb5d1cdb89c12ea1ea6bc5c98a9800f2d740a2b939de993c540\\\"\", \"full_name\": \"sugoi-wada/acer-air-monitor-2018\", \"last_updated\": \"2022-01-09T04:10:18Z\", \"last_fetched\": 1641896031.740965, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"302985427\": {\"repository_manifest\": {\"name\": \"Zidoo Media Player\", \"homeassistant\": \"2022.1\"}, \"authors\": [\"@wizmo2\"], \"category\": \"integration\", \"description\": \"Home-assistant custom component and api wrapper for Zidoo Media Players\", \"domain\": \"zidoo\", \"etag_repository\": \"W/\\\"f3affe83a8e90620c43d160939bb07be538af50d129ce0f7d3006890a791e371\\\"\", \"full_name\": \"wizmo2/zidoo-player\", \"last_updated\": \"2022-02-19T19:27:10Z\", \"stargazers_count\": 5, \"topics\": [\"media\", \"media-player\", \"player\", \"video-player\", \"zidoo\"], \"last_fetched\": 1646497148.973434, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"301509152\": {\"repository_manifest\": {\"name\": \"Novus 300 Bus\", \"render_readme\": true}, \"authors\": [\"@BenPru\"], \"category\": \"integration\", \"description\": \"Home Assistant HACS component to readout values from a Paul Novus 300 ventilation system\", \"domain\": \"novus300bus\", \"etag_repository\": \"W/\\\"bc05e497c8ecf1f1f1324d3fd2e2d3997d1d1766e70b7cb716fe97bc670918cc\\\"\", \"full_name\": \"BenPru/novus300_Rs485\", \"last_updated\": \"2021-11-03T20:21:00Z\", \"stargazers_count\": 2, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"356385629\": {\"repository_manifest\": {\"name\": \"Kia Uvo / Hyundai Bluelink\", \"render_readme\": true, \"homeassistant\": \"2021.12\"}, \"authors\": [\"@fuatakgun\"], \"category\": \"integration\", \"description\": \"A Home Assistant HACS integration that supports Kia Connect(Uvo) and Hyundai Bluelink. The integration supports the EU, Canada and the USA.\", \"domain\": \"kia_uvo\", \"etag_repository\": \"W/\\\"b2f0ba7610b4df903941d2bd704b2ffd2229e59846051e0b05500c10fe5dfeb9\\\"\", \"full_name\": \"fuatakgun/kia_uvo\", \"last_updated\": \"2022-07-05T19:42:00Z\", \"stargazers_count\": 150, \"topics\": [\"bluelink\", \"car\", \"hyundai\", \"kia\", \"uvo\"], \"last_fetched\": 1657362749.083889, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"417400028\": {\"repository_manifest\": {\"name\": \"Smart thermostat (PID)\", \"render_readme\": true, \"homeassistant\": \"0.104.2\"}, \"authors\": [\"@ScratMan\"], \"category\": \"integration\", \"description\": \"Smart Thermostat with PID controller for HomeAssistant\", \"domain\": \"smart_thermostat\", \"etag_repository\": \"W/\\\"5f7067b965f4913e11ca6cb9084420c29c161045f4f57e8f31fc868b977b3c4a\\\"\", \"full_name\": \"ScratMan/HASmartThermostat\", \"last_updated\": \"2022-06-03T09:46:17Z\", \"stargazers_count\": 105, \"topics\": [\"air-conditioner\", \"heater\", \"heater-control\", \"heater-controller\", \"heating\", \"heating-control\", \"heating-controller\", \"pid-controller\", \"smart-thermostat\", \"thermostat\"], \"last_fetched\": 1656859373.749864, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"422954081\": {\"repository_manifest\": {\"filename\": \"deebot.zip\", \"homeassistant\": \"2022.7.0b0\", \"name\": \"Deebot 4 Home Assistant\", \"render_readme\": true, \"zip_release\": true}, \"authors\": [\"@DeebotUniverse\", \"@edenhaus\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for deebot vacuums\", \"domain\": [\"binary_sensor\", \"camera\", \"select\", \"sensor\", \"vacuum\"], \"downloads\": 815, \"etag_repository\": \"W/\\\"bc98f1dc692bc0e8929b5239e74436b962ed06c68f1cdd357cf74d84c4db23bf\\\"\", \"full_name\": \"DeebotUniverse/Deebot-4-Home-Assistant\", \"last_updated\": \"2022-07-08T13:03:26Z\", \"stargazers_count\": 66, \"topics\": [\"deebot\", \"ecovacs\", \"vacuum\"], \"last_fetched\": 1657362708.664835, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"386049746\": {\"repository_manifest\": {\"name\": \"Virage Dashboard\", \"render_readme\": \"true\"}, \"authors\": [\"@viragelabs\"], \"category\": \"integration\", \"description\": \"A Home Assistant integration to keep track of Virage Laboratories devices, and set up and properly label rf sensors and door contacts\", \"domain\": \"virage_dashboard\", \"etag_repository\": \"W/\\\"6d1bfdbac3dca1d6f509b9e3ae5e3561ed0b67ecf325fbb38a199b3aa3212e12\\\"\", \"full_name\": \"viragelabs/virage_dashboard\", \"last_updated\": \"2021-12-01T23:33:19Z\", \"topics\": [\"virage\", \"viragelaboratories\", \"viragelabs\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"422931599\": {\"repository_manifest\": {\"name\": \"AI Thermostat for Zigbee2MQTT\", \"render_readme\": true, \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@kartoffeltoby\"], \"category\": \"integration\", \"description\": \"This custom component for Home Assistant will add crucial features to your climate-controlling TRV (Thermostatic Radiator Valves) to save you the work of creating automations to make it smart. It combines a room-temperature sensor, window/door sensors, weather forecasts, or an ambient temperature probe to decide when it should call for heat and automatically calibrate your TRVs to fix the imprecise measurements taken in the radiator's vicinity.\", \"domain\": \"ai_thermostat\", \"etag_repository\": \"W/\\\"4d299d34aec2b1ff16a84b3ad4ff707b9a4bf658559a8da7eb52fb8a5f44929b\\\"\", \"full_name\": \"KartoffelToby/better_thermostat\", \"last_updated\": \"2022-06-18T14:31:13Z\", \"stargazers_count\": 131, \"topics\": [\"climate\", \"moes\", \"sea801\", \"sea802\", \"smarthome\", \"spzb0001\", \"thermostat\", \"ts0601\", \"tuya\", \"zigbee\", \"zigbee2mqtt\"], \"last_fetched\": 1656859247.469466, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"439367892\": {\"repository_manifest\": {\"name\": \"Better Thermostat UI\", \"render_readme\": true, \"filename\": \"better-thermostat-ui-card.js\"}, \"category\": \"plugin\", \"description\": \"a custom card for a better thermostat in home assistant based on ai_thermostat intigration\", \"domain\": \"\", \"downloads\": 4889, \"etag_repository\": \"W/\\\"44dae729b21a022e5bc69ffb4aef295e74c0632e0d93bcaa2bc30157d79c15e1\\\"\", \"full_name\": \"KartoffelToby/better-thermostat-ui-card\", \"last_updated\": \"2022-03-31T00:43:38Z\", \"stargazers_count\": 39, \"topics\": [\"thermostat\"], \"last_fetched\": 1653733107.962478, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"406939721\": {\"repository_manifest\": {\"name\": \"Hik-Connect\", \"country\": [\"EN\"], \"render_readme\": true}, \"authors\": [\"@tomasbedrich\"], \"category\": \"integration\", \"description\": \"A Home Assistant integration to communicate with Hikvision smart doorbells via Hik-Connect cloud.\", \"domain\": \"hikconnect\", \"etag_repository\": \"W/\\\"ed363c8cd40d6e4899704b8e8855f36fffa973650b2ebadf2915231096360e7b\\\"\", \"full_name\": \"tomasbedrich/home-assistant-hikconnect\", \"last_updated\": \"2022-05-24T21:56:58Z\", \"stargazers_count\": 23, \"topics\": [\"hikvision\"], \"last_fetched\": 1656859415.59436, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"433577603\": {\"repository_manifest\": {\"name\": \"Config Editor Card\", \"filename\": \"config-editor-card.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Home Assistant Configuration Files Editor for Lovelace\", \"domain\": \"\", \"etag_repository\": \"W/\\\"2eb27e77be659815548ea19bdaf6170737418526500fab23265c6b67ba3840b0\\\"\", \"full_name\": \"htmltiger/config-editor-card\", \"last_updated\": \"2022-03-13T17:28:16Z\", \"stargazers_count\": 23, \"topics\": [\"homeassistant-addons\", \"homeassistant-config\", \"homeassistant-configuration\", \"yaml\"], \"last_fetched\": 1656859562.307612, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"427867835\": {\"repository_manifest\": {\"name\": \"WeatherFlow Integration\", \"homeassistant\": \"2022.7.0\"}, \"authors\": [\"@briis\"], \"category\": \"integration\", \"description\": \"Home Assistant Integration for WeatherFlow Stations\", \"domain\": \"weatherflow\", \"etag_repository\": \"W/\\\"528d92c3d3d911dd603c676c7ef48a938efbcad1beb022927fbb849969e545ce\\\"\", \"full_name\": \"briis/hass-weatherflow\", \"last_updated\": \"2022-07-02T16:27:38Z\", \"stargazers_count\": 35, \"topics\": [\"python3\", \"weatherflow\"], \"last_fetched\": 1656859083.07443, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"427773030\": {\"repository_manifest\": {\"name\": \"TuneBlade\", \"render_readme\": true}, \"authors\": [\"@spycle\"], \"category\": \"integration\", \"description\": \"Home Assistant custom integration for controlling AirPlay devices connected to a TuneBlade server\", \"domain\": \"tuneblade\", \"etag_repository\": \"W/\\\"acb0d1effd1c1159af72795a161fdf7326e7972db3f72a101508063e4025ce18\\\"\", \"full_name\": \"spycle/tuneblade\", \"last_updated\": \"2021-12-18T13:26:21Z\", \"topics\": [\"tuneblade\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"433577406\": {\"repository_manifest\": {\"name\": \"Config Editor\", \"render_readme\": \"true\"}, \"authors\": [\"@htmltiger\"], \"category\": \"integration\", \"description\": \"Home Assistant Configuration Editor Helper\", \"domain\": \"config_editor\", \"etag_repository\": \"W/\\\"65640d1a6d2cd60e4421c61c30667b8cb21eea5eff1146f01027e21f9ca2e9a7\\\"\", \"full_name\": \"htmltiger/config-editor\", \"last_updated\": \"2022-04-16T22:50:46Z\", \"stargazers_count\": 12, \"topics\": [\"homeassistant-config\"], \"last_fetched\": 1657362773.630866, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"180032210\": {\"repository_manifest\": {\"name\": \"Thermal Comfort\", \"render_readme\": true, \"filename\": \"thermal_comfort.zip\"}, \"authors\": [\"@dolezsa\"], \"category\": \"integration\", \"description\": \"Thermal Comfort sensor for HA (absolute humidity, heat index, dew point, thermal perception)\", \"domain\": \"thermal_comfort\", \"downloads\": 3, \"etag_repository\": \"W/\\\"eb731ef9614a616a59833a8d4d1347c5d700430a2bb6797f9d8c72a79ba2e6ab\\\"\", \"full_name\": \"dolezsa/thermal_comfort\", \"last_updated\": \"2022-06-29T16:41:06Z\", \"stargazers_count\": 181, \"topics\": [\"absolute-humidity\", \"comfort-model\", \"comfort-zone\", \"dew-point\", \"dew-point-perception\", \"heat-index\", \"thermal-comfort\", \"thermal-perception\", \"thermal-stress\"], \"last_fetched\": 1656859150.84211, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"424574671\": {\"repository_manifest\": {\"name\": \"SP110E RGB LED BLE Controller Integration\", \"homeassistant\": \"2021.11.0\", \"render_readme\": true}, \"authors\": [\"@roslovets\"], \"category\": \"integration\", \"description\": \"Control SP110E RGB LED BLE Controller from Home Assistant\", \"domain\": \"sp110e\", \"etag_repository\": \"W/\\\"22ae7ba1038a698166cc3f0b9386a28ad5963bf9d1d4afe51262602e6b5bf4d3\\\"\", \"full_name\": \"roslovets/SP110E-HASS\", \"last_updated\": \"2021-11-27T16:32:27Z\", \"stargazers_count\": 3, \"topics\": [\"ble\", \"rgb\", \"sp110e\"], \"last_fetched\": 1657362919.06346, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"222687548\": {\"repository_manifest\": {\"name\": \"Dwains Dashboard\", \"render_readme\": true, \"homeassistant\": \"2022.3.0\"}, \"authors\": [\"@dwainscheeren\"], \"category\": \"integration\", \"description\": \"An fully auto generating Home Assistant UI dashboard for desktop, tablet and mobile by Dwains for desktop, tablet, mobile\", \"domain\": \"dwains_dashboard\", \"etag_repository\": \"W/\\\"cc8910fbbe8068c86b449970a51f034a8f4b0e3a1c8446ec95789d49b5d71891\\\"\", \"full_name\": \"dwainscheeren/dwains-lovelace-dashboard\", \"last_updated\": \"2022-07-03T10:10:14Z\", \"stargazers_count\": 1102, \"topics\": [\"dashboard\", \"dwains-lovelace-dashboard\", \"home-assistant-dashboard\"], \"last_fetched\": 1657362724.131551, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"405007807\": {\"repository_manifest\": {\"name\": \"FoxESS Cloud\", \"country\": \"NO\"}, \"category\": \"integration\", \"description\": \"Home Assistant & FoxESS integration. Monitor you photovoltaic installation directly from HA \\u2600\\ufe0f \\u26a1\\ufe0f \", \"domain\": \"foxess\", \"etag_repository\": \"W/\\\"1f76e5233efe566016ba68840b0cce4f988e7e3b76a6dc63786c43e5431e8fd8\\\"\", \"full_name\": \"macxq/foxess-ha\", \"last_updated\": \"2022-06-08T06:50:39Z\", \"stargazers_count\": 28, \"topics\": [\"energy-monitor\", \"foxess\", \"photovoltaics\", \"pv\", \"smarthome\"], \"last_fetched\": 1657362844.596183, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"432522624\": {\"repository_manifest\": {\"name\": \"GCE IPX800 V5\", \"country\": \"FR\", \"render_readme\": true}, \"authors\": [\"@Aohzan\"], \"category\": \"integration\", \"description\": \"IPX800 V5 integration for Home-Assistant\", \"domain\": \"ipx800v5\", \"etag_repository\": \"W/\\\"e9827f5e8383d7fc3dcda3859fa69e83a2505a81853a9349b8ddfa5dfea0943b\\\"\", \"full_name\": \"Aohzan/ipx800v5\", \"last_updated\": \"2022-05-27T05:30:56Z\", \"stargazers_count\": 1, \"topics\": [\"gce-electronics\", \"home-assistant-integration\", \"ipx800\"], \"last_fetched\": 1653733190.639255, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"431440766\": {\"repository_manifest\": {\"name\": \"HASS.Agent Notifier\", \"render_readme\": true}, \"authors\": [\"@LAB02-Admin\"], \"category\": \"integration\", \"description\": \"HASS.Agent Notifier integration. Adds notifications to HASS.Agent - a Windows based client for Home Assistant.\", \"domain\": \"hass_agent_notifier\", \"etag_repository\": \"W/\\\"8d6d552189a4e749eb8718b4e5f28cef759037997084697d90cc6528cbd2d2a4\\\"\", \"full_name\": \"LAB02-Research/HASS.Agent-Notifier\", \"last_updated\": \"2022-06-27T15:08:22Z\", \"stargazers_count\": 42, \"topics\": [\"notifications\"], \"last_fetched\": 1657362827.902579, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"398601732\": {\"repository_manifest\": {\"name\": \"FlexpoolInfo\", \"render_readme\": true, \"homeassistant\": \"0.100.0\"}, \"authors\": [\"@thomasprior\"], \"category\": \"integration\", \"description\": \"Provides data from Flexpool.io on a specified miner.\", \"domain\": \"flexpoolinfo\", \"etag_repository\": \"W/\\\"bfc95fb4abcf362e7955aeea425f3a125e6599981f85901bc59cf72eb7fc3489\\\"\", \"full_name\": \"ThomasPrior/FlexpoolInfo\", \"last_updated\": \"2022-04-13T16:31:50Z\", \"stargazers_count\": 6, \"topics\": [\"flexpool\", \"flexpool-api\", \"miner\", \"statistics\"], \"last_fetched\": 1656859407.319646, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"334925385\": {\"repository_manifest\": {\"name\": \"RCT Power\", \"hacs\": \"1.6.0\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@weltenwort\"], \"category\": \"integration\", \"description\": \"A Home Assistant custom component to integrate with RCT Power inverters.\", \"domain\": \"rct_power\", \"etag_repository\": \"W/\\\"8f334134ec8a30d29bd078a3fdfaf66382997ee782aea4478d2429d537a49eab\\\"\", \"full_name\": \"weltenwort/home-assistant-rct-power-integration\", \"last_updated\": \"2022-07-08T17:07:25Z\", \"stargazers_count\": 20, \"topics\": [\"rct-power\"], \"last_fetched\": 1657362984.956067, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"380367845\": {\"repository_manifest\": {\"name\": \"Eufy Security\", \"render_readme\": true}, \"authors\": [\"@fuatakgun\"], \"category\": \"integration\", \"description\": \"Home Assistant integration to manage Eufy Security devices as cameras, home base stations, doorbells, motion and contact sensors.\", \"domain\": \"eufy_security\", \"etag_repository\": \"W/\\\"eb490abc00369f0d98a0e83058af7cd075f25e18f462bb55667cf50125538e67\\\"\", \"full_name\": \"fuatakgun/eufy_security\", \"last_updated\": \"2022-06-21T23:25:18Z\", \"stargazers_count\": 264, \"topics\": [\"camera\", \"eufy\", \"eufycam\", \"eufysecurity\", \"rtsp\", \"security\"], \"last_fetched\": 1657362747.820154, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"432591899\": {\"repository_manifest\": {\"name\": \"MicroBot Push\", \"render_readme\": true}, \"category\": \"integration\", \"description\": \"Home Assistant switch integration to control MicroBot Push\", \"domain\": \"microbot_push\", \"etag_repository\": \"W/\\\"4037c0a154619911b8c54ff3ce848842db85f436186d4f9f6f29c46363524a30\\\"\", \"full_name\": \"spycle/microbot_push\", \"topics\": [\"microbot-push\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"439467929\": {\"repository_manifest\": {\"name\": \"Midea Dehumidifier (LAN)\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@nbogojevic\"], \"category\": \"integration\", \"description\": \"This Home Assistant custom component adding support for controlling Midea air conditioners and dehumidifiers on local network. \", \"domain\": \"midea_dehumidifier_lan\", \"etag_repository\": \"W/\\\"efd3137ccf6ea425caffae2938e51ef9a50a9da6bd9834c246def639d886e855\\\"\", \"full_name\": \"nbogojevic/homeassistant-midea-air-appliances-lan\", \"last_updated\": \"2022-01-22T01:19:02Z\", \"stargazers_count\": 16, \"topics\": [\"air-conditioner\", \"airconditioning\", \"dehumidifier\", \"midea\"], \"last_fetched\": 1642851542.467849, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"250498561\": {\"repository_manifest\": {\"name\": \"SecuritySpy for Home Assistant\", \"render_readme\": true, \"homeassistant\": \"2021.11.0\"}, \"authors\": [\"@briis\"], \"category\": \"integration\", \"description\": \"SecuritySpy Integration for Home Assistant with Camera Streams and Motion Detection\", \"domain\": \"securityspy\", \"etag_repository\": \"W/\\\"ffe9b09f2592a3c138180c4a2122440e9466ff8bf46380c568fa57af974b5ca3\\\"\", \"full_name\": \"briis/securityspy\", \"last_updated\": \"2022-05-29T06:44:23Z\", \"stargazers_count\": 25, \"topics\": [\"home-assistant-component\", \"securityspy\"], \"last_fetched\": 1656859084.934944, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"292390011\": {\"repository_manifest\": {\"name\": \"Peloton\"}, \"authors\": [\"@edwork\"], \"category\": \"integration\", \"description\": \"A platform which allows you to get current and past ride data from Peloton into HomeAssistant\", \"domain\": \"peloton\", \"downloads\": 4, \"etag_repository\": \"W/\\\"01e806e0d12268e2e290f92dd29af2287dc54fe3e80773fe2cb1846c92f7902e\\\"\", \"full_name\": \"edwork/homeassistant-peloton-sensor\", \"last_updated\": \"2022-06-15T23:24:18Z\", \"stargazers_count\": 52, \"topics\": [\"peloton\", \"peloton-api\", \"peloton-client\"], \"last_fetched\": 1656859161.893044, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"425931056\": {\"repository_manifest\": {\"name\": \"HA Kia/Hyundai\", \"render_readme\": true, \"country\": [\"US\", \"CA\"], \"homeassistant\": \"2021.10.0b0\"}, \"authors\": [\"@dahlb\"], \"category\": \"integration\", \"description\": \"A Home Assistant HACS integration that supports Kia Connect(Uvo). The integration supports the USA.\", \"domain\": \"ha_kia_hyundai\", \"etag_repository\": \"W/\\\"f021bf6041b546b78bab01b58e3cf51aee52c01beaf136cabc8e52bf16a10b64\\\"\", \"full_name\": \"dahlb/ha_kia_hyundai\", \"last_updated\": \"2022-05-25T08:31:23Z\", \"stargazers_count\": 11, \"topics\": [\"car\", \"kia\", \"python3\", \"uvo\"], \"last_fetched\": 1656859132.129752, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"137126619\": {\"repository_manifest\": {\"name\": \"Visonic Intruder Alarm - PowerMax and PowerMaster Series\", \"homeassistant\": \"2022.3.3\"}, \"authors\": [\"@davesmeghead\"], \"category\": \"integration\", \"description\": \"Visonic Custom Component for integration with Home Assistant\", \"domain\": \"visonic\", \"etag_repository\": \"W/\\\"6cfc216d2e5509b63db00337a80d223b1315185da1da650532658c19deb8a11a\\\"\", \"full_name\": \"davesmeghead/visonic\", \"last_updated\": \"2022-05-28T22:34:18Z\", \"stargazers_count\": 57, \"topics\": [\"visonic\"], \"last_fetched\": 1656859137.828702, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"344446335\": {\"repository_manifest\": {\"name\": \"Office 365 Integration\", \"zip_release\": true, \"filename\": \"o365.zip\", \"homeassistant\": \"2022.5.0\", \"persistent_directory\": \".O365-token-cache\", \"render_readme\": true}, \"authors\": [\"@RogerSelwyn\"], \"category\": \"integration\", \"description\": \"Office 365 integration for Home Assistant\", \"domain\": \"o365\", \"downloads\": 1179, \"etag_repository\": \"W/\\\"4f8d53c0765962768891b49861ded0cbfd1584de0d64919ee7b662af85fffc7a\\\"\", \"full_name\": \"RogerSelwyn/O365-HomeAssistant\", \"last_updated\": \"2022-06-09T16:54:36Z\", \"stargazers_count\": 45, \"topics\": [\"microsoft\", \"o365\"], \"last_fetched\": 1657362918.553994, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"441738040\": {\"repository_manifest\": {\"name\": \"Soft Theme\", \"render_readme\": true, \"homeassistant\": \"2021.6\", \"country\": \"US\"}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 A new, simple soft theme for Home Assistant.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"79ea73cb22d1f0c537125d294f7f339f267c76901181825f42d70e00d17db7ef\\\"\", \"full_name\": \"KTibow/lovelace-soft-theme\", \"last_updated\": \"2021-12-25T19:04:42Z\", \"stargazers_count\": 18, \"topics\": [\"soft-ui\"], \"last_fetched\": 1656859480.560433, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"441028036\": {\"repository_manifest\": {\"name\": \"Hilo\", \"hacs\": \"1.6.0\", \"country\": \"CA\", \"homeassistant\": \"2022.4.0\"}, \"authors\": [\"@valleedelisle\"], \"category\": \"integration\", \"description\": \"Home Assistant Hilo Integration via HACS\", \"domain\": \"hilo\", \"etag_repository\": \"W/\\\"af3f7a61bf3301defb0a21f14b77d8d190156ea984150563e4b0760a6cdeff3d\\\"\", \"full_name\": \"dvd-dev/hilo\", \"last_updated\": \"2022-06-28T08:32:50Z\", \"stargazers_count\": 45, \"topics\": [\"hilo\", \"home-automation-system\", \"hydro-quebec\", \"signalr-client\"], \"last_fetched\": 1656859157.042852, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"424346523\": {\"repository_manifest\": {\"name\": \"Centrometal Boiler System\", \"render_readme\": true, \"homeassistant\": \"2021.11.3\"}, \"authors\": [\"@9a4gl\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component integration for Centrometal Boiler System\", \"domain\": \"centrometal_boiler\", \"etag_repository\": \"W/\\\"585f24e684a81b9afc21e95387eccc30f47d0458bd79a149367c7d138efc5a17\\\"\", \"full_name\": \"9a4gl/hass-centrometal-boiler\", \"last_updated\": \"2022-01-04T19:20:56Z\", \"stargazers_count\": 1, \"topics\": [\"centrometal\", \"peltec\"], \"last_fetched\": 1641470671.652981, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"437989480\": {\"repository_manifest\": {\"name\": \"Centrometal Boiler Display Card\", \"render_readme\": true, \"homeassistant\": \"2021.11.3\", \"filename\": \"centrometal-boiler-card.js\"}, \"category\": \"plugin\", \"description\": \"Lovelace Centrometal Boiler Card\", \"domain\": \"\", \"etag_repository\": \"W/\\\"620418477b3f1e88c83f779cb5ae636acda726b29e8beb927c414ae44a91c36e\\\"\", \"full_name\": \"9a4gl/lovelace-centrometal-boiler-card\", \"stargazers_count\": 1, \"topics\": [\"centrometal\", \"homeassitant\", \"pellet\", \"peltec\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"413680511\": {\"repository_manifest\": {\"name\": \"Toyota (North America)\", \"homeassistant\": \"2021.12.0\", \"render_readme\": true, \"zip_release\": true, \"filename\": \"ha_toyota_na.zip\"}, \"authors\": [\"@widewing\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for Toyota Motor (North America) connected services\", \"domain\": \"toyota_na\", \"downloads\": 193, \"etag_repository\": \"W/\\\"5494d1befa83ec733448927ea568a9c5b942dbf2843136d81079176417820ece\\\"\", \"full_name\": \"widewing/ha-toyota-na\", \"last_updated\": \"2022-05-01T23:09:25Z\", \"stargazers_count\": 16, \"topics\": [\"car\", \"toyota\", \"vehicle\"], \"last_fetched\": 1653229960.369726, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"441920613\": {\"repository_manifest\": {\"name\": \"Thermia Heat Pump\", \"render_readme\": true}, \"authors\": [\"@klejejs\"], \"category\": \"integration\", \"description\": \"Thermia Heat Pump Integration for Home Assistant\", \"domain\": \"thermia\", \"etag_repository\": \"W/\\\"4489c0d3365e8800166d51b0cfd97e8f278a375e9607127b741a72e2c5ba0e95\\\"\", \"full_name\": \"klejejs/ha-thermia-heat-pump-integration\", \"last_updated\": \"2022-04-10T17:00:18Z\", \"stargazers_count\": 3, \"topics\": [\"heat-pump\", \"thermia\"], \"last_fetched\": 1653229783.890225, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"441942093\": {\"repository_manifest\": {\"name\": \"keyatome\"}, \"authors\": [\"@jugla\", \"@baqs\"], \"category\": \"integration\", \"description\": \"Home Assistant component to handle key atome (linky) -conso live feature-\", \"domain\": \"keyatome\", \"etag_repository\": \"W/\\\"00c44fd04ae4c6e3be2a751be4c72ee713194e4d9d12e96b741101c27319695f\\\"\", \"full_name\": \"jugla/keyatome\", \"last_updated\": \"2022-04-22T11:26:57Z\", \"stargazers_count\": 8, \"topics\": [\"atome\", \"keyatome\", \"linky\"], \"last_fetched\": 1653229775.237628, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"440374794\": {\"repository_manifest\": {\"name\": \"history-explorer-card\", \"filename\": \"history-explorer-card.js\"}, \"category\": \"plugin\", \"description\": \"A card for Home Assistant Lovelace for exploring the history of your entities interactively and in real time.\", \"domain\": \"\", \"downloads\": 4146, \"etag_repository\": \"W/\\\"651490711103ad3a781337d246268ada386e9d874f8f18e5c954b1a127103c67\\\"\", \"full_name\": \"alexarch21/history-explorer-card\", \"last_updated\": \"2022-05-01T22:14:54Z\", \"stargazers_count\": 86, \"topics\": [\"history\"], \"last_fetched\": 1657362421.183776, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"443651710\": {\"repository_manifest\": {\"name\": \"Midnight Teal\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"A dark teal theme for HomeAssistant.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"fb129ed4ffd3f4be380c15808c71b735acd26067dfe74960bb261f26fde16622\\\"\", \"full_name\": \"Neekster/MidnightTeal\", \"last_updated\": \"2022-02-05T21:39:51Z\", \"stargazers_count\": 1, \"topics\": [\"dark-theme\"], \"last_fetched\": 1645379977.498263, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"413812496\": {\"repository_manifest\": {\"name\": \"Plotly Graph Card\", \"render_readme\": true, \"filename\": \"plotly-graph-card.js\"}, \"category\": \"plugin\", \"description\": \"Highly customisable Lovelace card to display interactive graphs. Brings scrolling, zooming, and much more!\", \"domain\": \"\", \"etag_repository\": \"W/\\\"1896463d465ef5df24954d67edf055841b122f1b404710250ecf0f44ff8fa5c5\\\"\", \"full_name\": \"dbuezas/lovelace-plotly-graph-card\", \"last_updated\": \"2022-06-28T22:27:29Z\", \"stargazers_count\": 63, \"topics\": [\"graphs\", \"history\", \"lovelace-custom-card\", \"navigate\", \"plotly\", \"plotlyjs\", \"plots\", \"scroll\", \"zoom\"], \"last_fetched\": 1657362454.929468, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"426814988\": {\"repository_manifest\": {\"name\": \"Schedule State\", \"render_readme\": true}, \"authors\": [\"@aneeshd\"], \"category\": \"integration\", \"description\": \"HA sensor that returns a string based on a defined schedule, enabling further automations\", \"domain\": \"schedule_state\", \"etag_repository\": \"W/\\\"d29c40f156a4af5a5fc501d58bc9449844fbafa1b55498c819916554a3ddca7b\\\"\", \"full_name\": \"aneeshd/schedule_state\", \"last_updated\": \"2022-05-02T20:07:43Z\", \"stargazers_count\": 14, \"topics\": [\"automation\", \"scheduler\", \"timetable\"], \"last_fetched\": 1653229588.52508, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"445609628\": {\"repository_manifest\": {\"name\": \"PID Controller\", \"zip_release\": true, \"homeassistant\": \"2021.9\", \"render_readme\": true, \"persistent_directory\": \"codes\", \"filename\": \"pid_controller.zip\"}, \"authors\": [\"@Soloam\"], \"category\": \"integration\", \"description\": \"PID Controller to Home Assistant\", \"domain\": \"pid_controller\", \"downloads\": 608, \"etag_repository\": \"W/\\\"fbe5228892505f0eb2da4d5d3540ee92c7038deccde6ca7465e4005027a50c36\\\"\", \"full_name\": \"soloam/ha-pid-controller\", \"last_updated\": \"2022-02-20T10:13:26Z\", \"stargazers_count\": 23, \"topics\": [\"pid\", \"thermostat\"], \"last_fetched\": 1656859385.823667, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"443529332\": {\"repository_manifest\": {\"name\": \"Bobcat Miner Sensor for Home Assistant\", \"render_readme\": true}, \"authors\": [\"@ardevd\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for the Bobcat Helium Miner\", \"domain\": \"bobcatminer\", \"etag_repository\": \"W/\\\"6e19fad65f7d056650c02e9a0acc55f149eba48c0ccd44318a5e394fe30b7a6e\\\"\", \"full_name\": \"ardevd/ha-bobcatminer\", \"last_updated\": \"2022-04-24T01:16:10Z\", \"stargazers_count\": 9, \"topics\": [\"bobcatminer\", \"cryptocurrency\", \"helium\", \"mining\"], \"last_fetched\": 1656859058.776756, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"419786466\": {\"repository_manifest\": {\"name\": \"SolarEdge Modbus Multi-Inverter\", \"homeassistant\": \"2022.2.0\"}, \"authors\": [\"@WillCodeForCats\"], \"category\": \"integration\", \"description\": \"A Home Assistant integration for SolarEdge inverters using Modbus/TCP. Supports single inverters, multiple inverters, meters, batteries, and many other improvements.\", \"domain\": \"solaredge_modbus\", \"etag_repository\": \"W/\\\"0c968b39fd5b5a9e5c8704c39f7b81539b84f71991c66d02750ed7b84671cf55\\\"\", \"full_name\": \"WillCodeForCats/solaredge-modbus-multi\", \"last_updated\": \"2022-07-03T14:39:47Z\", \"stargazers_count\": 14, \"topics\": [\"modbus-tcp\", \"solaredge\", \"solaredge-inverter\"], \"last_fetched\": 1656859438.361837, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"432434646\": {\"repository_manifest\": {\"name\": \"Securitas Direct Alarm\", \"homeassistant\": \"2021.9.0\"}, \"authors\": [\"@guerrerotook\"], \"category\": \"integration\", \"description\": \"This repository contains the new securitas direct API that can be integrated in Home Assistant\", \"domain\": \"securitas\", \"etag_repository\": \"W/\\\"06eca70385df198d26672b3076e3399b7f5b7a6709ca1763b28b0e72aa8e8aa8\\\"\", \"full_name\": \"guerrerotook/securitas-direct-new-api\", \"last_updated\": \"2022-06-18T08:55:45Z\", \"stargazers_count\": 17, \"last_fetched\": 1656859195.363208, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"448355900\": {\"repository_manifest\": {\"name\": \"Vastayan Bond\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"Inspired by the color schemes of Xayah & Rakan. Still work-in-progress, feedback is much appreciated!\", \"domain\": \"\", \"etag_repository\": \"W/\\\"549af3ee6486c7fbe02957c17e09d3433086c13f6b8560a7160d964ce2d07571\\\"\", \"full_name\": \"SnakeFist007/ha_vastayan_bond\", \"last_updated\": \"2022-01-28T13:15:16Z\", \"stargazers_count\": 2, \"topics\": [\"bond\", \"rakan\", \"vastayan\", \"xayah\"], \"last_fetched\": 1644064204.694865, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"449416816\": {\"repository_manifest\": {\"name\": \"Sonos Card\", \"render_readme\": true, \"filename\": \"custom-sonos-card.js\"}, \"category\": \"plugin\", \"description\": \"Home Assistant custom lovelace sonos card\", \"domain\": \"\", \"downloads\": 2373, \"etag_repository\": \"W/\\\"3401cede68aae14d91cd3ad802d35b31b51c9089eb307fa6efa0b72e10ced193\\\"\", \"full_name\": \"johanfrick/custom-sonos-card\", \"last_updated\": \"2022-05-31T21:38:20Z\", \"stargazers_count\": 30, \"topics\": [\"lovelace-custom-card\", \"media-player\", \"sonos\"], \"last_fetched\": 1657362495.73916, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"452251255\": {\"repository_manifest\": {\"name\": \"Browser Control Card\", \"content_in_root\": true, \"filename\": \"browser-control-card.js\", \"render_readme\": \"true\"}, \"category\": \"plugin\", \"description\": \"Control your browser from a Home Assistant lovelace card: full screen, disable screen lock, zoom, reload page...\", \"domain\": \"\", \"downloads\": 1021, \"etag_repository\": \"W/\\\"20a9dff7af6183b1a775883b44d3c5a976e228d9628e9c03748bddd76be68b2a\\\"\", \"full_name\": \"mathoudebine/homeassistant-browser-control-card\", \"last_updated\": \"2022-04-15T16:22:59Z\", \"stargazers_count\": 6, \"topics\": [\"browser\", \"browser-control\", \"card\", \"fullscreen\", \"lock\", \"refresh\", \"reload\", \"sleep\", \"wake-on-lan\", \"zoom\"], \"last_fetched\": 1653230075.900104, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"449218690\": {\"repository_manifest\": {}, \"category\": \"plugin\", \"description\": \"Thermal Comfort custom icons for Home Assistant to accompany the MDI icons\", \"domain\": \"\", \"etag_repository\": \"W/\\\"b128f346d8d3c7c8d15f1cae4c5cdf82f799afff8b490547ccff6608bf295142\\\"\", \"full_name\": \"rautesamtr/thermal_comfort_icons\", \"last_updated\": \"2022-01-29T15:14:16Z\", \"stargazers_count\": 12, \"topics\": [\"absolute-humidity\", \"dew-point\", \"dew-point-perception\", \"frost-point\", \"frost-risk\", \"heat-index\", \"icons\", \"iconset\", \"simmer-index\", \"simmer-zone\", \"thermal-perception\"], \"last_fetched\": 1657362533.904398, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"442001863\": {\"repository_manifest\": {\"name\": \"TP-Link Deco\", \"hacs\": \"1.6.0\", \"homeassistant\": \"0.118.0\", \"render_readme\": true}, \"authors\": [\"@amosyuen\"], \"category\": \"integration\", \"description\": \"Home Assistant TP-Link Deco Custom Component\", \"domain\": \"tplink_deco\", \"etag_repository\": \"W/\\\"1e833daa79e8846bbf7e7eef13ae1d94dbfe2e52eff395aa7a9b1a02b1b8acde\\\"\", \"full_name\": \"amosyuen/ha-tplink-deco\", \"last_updated\": \"2022-06-28T11:58:05Z\", \"stargazers_count\": 48, \"topics\": [\"router\", \"tp-link\"], \"last_fetched\": 1656859052.900108, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"380330823\": {\"repository_manifest\": {\"name\": \"Eldes Alarm\", \"render_readme\": true}, \"authors\": [\"@augustas2\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for Eldes Alarm system\", \"domain\": \"eldes_alarm\", \"etag_repository\": \"W/\\\"06ca5921b5acfa5e691ad98ec73b2711b64a7511b3241aae924faf6e1e585166\\\"\", \"full_name\": \"augustas2/eldes\", \"last_updated\": \"2022-04-07T09:28:12Z\", \"stargazers_count\": 7, \"topics\": [\"alarm\", \"alarm-panel\", \"alarm-system\", \"eldes\", \"esim364\", \"esim384\", \"output\", \"pitbull-alarm-pro\", \"switch\"], \"last_fetched\": 1653229598.909687, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"450192057\": {\"repository_manifest\": {\"name\": \"SkyKettle\", \"homeassistant\": \"2021.12.3\", \"render_readme\": true, \"country\": [\"RU\"]}, \"authors\": [\"@clusterm\"], \"category\": \"integration\", \"description\": \"Redmond SkyKettle integration for Home Assistant\", \"domain\": \"skykettle\", \"etag_repository\": \"W/\\\"8c8cb419ae0bab448d941a7de6a590b2582cf076a1bb41c14ad4a30644ce62e2\\\"\", \"full_name\": \"ClusterM/skykettle-ha\", \"last_updated\": \"2022-04-02T14:54:20Z\", \"stargazers_count\": 23, \"topics\": [\"kettle\", \"redmond\", \"skykettle\"], \"last_fetched\": 1656859099.419893, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"447307317\": {\"repository_manifest\": {\"name\": \"Holidays\", \"zip_release\": true, \"filename\": \"holidays.zip\", \"homeassistant\": \"2022.5.0\"}, \"authors\": [\"@bruxy70\"], \"category\": \"integration\", \"description\": \"\\ud83d\\udcc5 Custom Home Assistant integration for public holidays - also used for garbage_collection integration to automatically move scheduled events that fall on a public holiday (by an automation blueprint)\", \"domain\": \"holidays\", \"downloads\": 2240, \"etag_repository\": \"W/\\\"958ee794d0391106af87f5a25d4a92fd262666bb7a23a5ed0d1e4af40093cb40\\\"\", \"full_name\": \"bruxy70/Holidays\", \"last_updated\": \"2022-06-20T05:38:14Z\", \"stargazers_count\": 16, \"topics\": [\"calendar\", \"country-holidays\", \"garbage-collection\", \"holidays\", \"public-holidays\"], \"last_fetched\": 1656859087.110965, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"441294260\": {\"repository_manifest\": {\"name\": \"Auto Areas\", \"render_readme\": true}, \"authors\": [\"@c-st\"], \"category\": \"integration\", \"description\": \"\\ud83e\\udd16 A custom component for Home Assistant which automates your areas.\", \"domain\": \"auto_areas\", \"etag_repository\": \"W/\\\"5ffcfee6ce5de45d3910b487e2b507bfb20a609cab4bc29cd3f9a30be477c9d6\\\"\", \"full_name\": \"c-st/auto_areas\", \"last_updated\": \"2022-06-26T12:20:17Z\", \"stargazers_count\": 14, \"last_fetched\": 1656859088.489807, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"431901513\": {\"repository_manifest\": {\"name\": \"Fluid Level Background Card\", \"render_readme\": true, \"filename\": \"fluid-level-background-card.js\"}, \"category\": \"plugin\", \"description\": \"This card wraps any other cards and renders a fluid background behind them.\", \"domain\": \"\", \"downloads\": 379, \"etag_repository\": \"W/\\\"9784783d69308a6c5a9521a89699354a477de058b3cbdc4963e549485305e4d1\\\"\", \"full_name\": \"swingerman/lovelace-fluid-level-background-card\", \"last_updated\": \"2022-05-24T21:32:36Z\", \"stargazers_count\": 13, \"topics\": [\"lovelace-card\"], \"last_fetched\": 1653733147.93372, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"440617082\": {\"repository_manifest\": {\"name\": \"NYC 311 Public Services Calendar\"}, \"authors\": [\"@elahd\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for NYC trash collection, school, and alternate side parking schedules.\", \"domain\": \"nyc311\", \"etag_repository\": \"W/\\\"856f5dac3add4335186f8715d259c81d97f2eafa6902f3898f828cb990996f42\\\"\", \"full_name\": \"elahd/ha-nyc311\", \"last_updated\": \"2022-06-27T23:57:42Z\", \"stargazers_count\": 3, \"topics\": [\"community\", \"government-data\", \"nyc\", \"nyc-opendata\"], \"last_fetched\": 1656859168.026541, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"267583249\": {\"repository_manifest\": {\"name\": \"Omnik Solar integration\", \"homeassistant\": \"2021.9\"}, \"authors\": [\"@hultenvp\"], \"category\": \"integration\", \"description\": \"Home Assistant Omnik Solar sensor component\", \"domain\": \"omnik\", \"etag_repository\": \"W/\\\"4816b37f6914218d6496dcce3d586308339da9f6b2ac4bc67474404eff8d6bd6\\\"\", \"full_name\": \"hultenvp/home_assistant_omnik_solar\", \"last_updated\": \"2022-01-29T20:42:45Z\", \"stargazers_count\": 4, \"topics\": [\"home-assistant-component\", \"omnik\", \"solar\"], \"last_fetched\": 1644064232.565137, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"447878635\": {\"repository_manifest\": {\"name\": \"Yandex weather\", \"country\": \"RU\", \"zip_release\": true, \"filename\": \"yandex_weather.zip\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@IATkachenko\"], \"category\": \"integration\", \"description\": \"Yandex weather intergration for Home Assistant\", \"domain\": \"yandex_weather\", \"downloads\": 236, \"etag_repository\": \"W/\\\"cf7c57d8e905f4f5c50bdd2407ec4257927e564ecdbc0ce6955b3fed13b0240d\\\"\", \"full_name\": \"IATkachenko/HA-YandexWeather\", \"last_updated\": \"2022-07-02T10:41:32Z\", \"stargazers_count\": 37, \"topics\": [\"weather\", \"yandex-weather\"], \"last_fetched\": 1656859212.162803, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"451209586\": {\"repository_manifest\": {\"name\": \"Flagdays DK\", \"country\": [\"DK\"], \"render_readme\": true}, \"authors\": [\"@J-Lindvig\"], \"category\": \"integration\", \"description\": \"\\ud83c\\udde9\\ud83c\\uddf0 Official flagdays in Denmark with a lot of useful logic and attributes. It is possible to add your own anniversaries \\ud83c\\udf82 or special flags \\ud83c\\udff3\\ufe0f\\u200d\\ud83c\\udf08 \\ud83c\\udff4\\u200d\\u2620\\ufe0f\", \"domain\": \"flagdays_dk\", \"etag_repository\": \"W/\\\"d8dcf02d02a9dd7f27de7f49d5322b4fb367dfe321bcede44474075b71baef07\\\"\", \"full_name\": \"J-Lindvig/Flagdays_DK\", \"last_updated\": \"2022-06-19T09:12:18Z\", \"stargazers_count\": 3, \"topics\": [\"anniversaries\", \"denmark\", \"flagdays\", \"pride\"], \"last_fetched\": 1656859218.343395, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"448980525\": {\"repository_manifest\": {\"name\": \"\\ud83e\\uddf0 ZHA Toolkit - Service for advanced Zigbee Usage\", \"zip_release\": true, \"render_readme\": true, \"persistent_directory\": \"local\", \"homeassistant\": \"2021.1\"}, \"authors\": [\"@mdeweerd\"], \"category\": \"integration\", \"description\": \"\\ud83e\\uddf0 Zigbee Home Assistant Toolkit - service for \\\"rare\\\" Zigbee operations using ZHA on Home Assistant\", \"domain\": \"zha_toolkit\", \"downloads\": 1519, \"etag_repository\": \"W/\\\"60930266f7deb52950466b784b9a67be371ef2678895a86212cacceabf3cca54\\\"\", \"full_name\": \"mdeweerd/zha-toolkit\", \"last_updated\": \"2022-06-11T10:20:05Z\", \"stargazers_count\": 35, \"topics\": [\"home-assistant-component\", \"zha\", \"zigbee\", \"zigpy\"], \"last_fetched\": 1657362856.084534, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"446609758\": {\"repository_manifest\": {\"name\": \"Nicehash Excavator API\", \"render_readme\": true, \"homeassistant\": \"2021.12.1\"}, \"authors\": [\"@MesserschmittX\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for Nicehash Excavator miner API\", \"domain\": \"nicehash_excavator\", \"etag_repository\": \"W/\\\"5c045e82c07d08f6e42333215434d404ee02f074959f4d1ebf3eb148a2e01c68\\\"\", \"full_name\": \"MesserschmittX/ha-nicehash-excavator-monitor\", \"last_updated\": \"2022-05-15T07:11:45Z\", \"stargazers_count\": 3, \"topics\": [\"excavator\", \"mining\", \"nicehash\"], \"last_fetched\": 1656859293.721956, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"319401286\": {\"repository_manifest\": {\"name\": \"Rademacher HomePilot Bridge\", \"zip_release\": true, \"filename\": \"rademacher.zip\", \"country\": \"PT\", \"homeassistant\": \"2021.12.8\", \"render_readme\": true}, \"authors\": [\"@peribeir\"], \"category\": \"integration\", \"description\": \"This custom integration provides access to Rademacher Devices connected to a HomePilot (or Start2Smart) bridge.\", \"domain\": \"rademacher\", \"downloads\": 285, \"etag_repository\": \"W/\\\"8f5eb0cd222b39c95991c2410b6649ad16522689d87fb5b3dcbda4ad229bc06c\\\"\", \"full_name\": \"peribeir/homeassistant-rademacher\", \"last_updated\": \"2022-04-04T20:51:53Z\", \"stargazers_count\": 13, \"topics\": [\"homepilot\", \"iot\", \"rademacher\"], \"last_fetched\": 1656859326.94951, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"269113518\": {\"repository_manifest\": {\"name\": \"xcomfort\"}, \"authors\": [\"@plamish\"], \"category\": \"integration\", \"description\": \"Eaton xComfort SHC integration for Home Assistant\", \"domain\": \"xcomfort\", \"etag_repository\": \"W/\\\"f8833e5f46693addf372dce24c73b5eadb9f1a32975f5949b0785a39cbd04041\\\"\", \"full_name\": \"plamish/xcomfort\", \"last_updated\": \"2022-02-09T22:58:11Z\", \"stargazers_count\": 8, \"topics\": [\"eaton\", \"xcomfort\"], \"last_fetched\": 1648400067.463157, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"323923603\": {\"repository_manifest\": {\"name\": \"Tapo Controller\", \"hacs\": \"1.6.0\", \"render_readme\": true, \"homeassistant\": \"2021.9.0\"}, \"authors\": [\"@petretiandrea\"], \"category\": \"integration\", \"description\": \"A custom integration to control Tapo devices from home assistant.\", \"domain\": \"tapo\", \"etag_repository\": \"W/\\\"6f634fa1bca4b2b53bf23b2b8097dd8d9607bc4911badba6bdf1f4c826126edb\\\"\", \"full_name\": \"petretiandrea/home-assistant-tapo-p100\", \"last_updated\": \"2022-07-08T09:11:16Z\", \"stargazers_count\": 144, \"topics\": [\"energy\", \"l510\", \"l530\", \"l900\", \"monitoring\", \"p100\", \"p105\", \"p110\", \"smart-plug\", \"tapo\", \"tapo-device\", \"tapo-light-bulb\"], \"last_fetched\": 1657362889.363516, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"427902632\": {\"repository_manifest\": {\"name\": \"Solarman Integration\"}, \"authors\": [\"@StephanJoubert\"], \"category\": \"integration\", \"description\": \"Home Assistant component for Solarman collectors used with a variety of inverters.  \", \"domain\": \"solarman\", \"etag_repository\": \"W/\\\"07f6a7fb9ce268c42f0e27a912ce0bf9d9e687316908a29d1d06380fe0d1fcdb\\\"\", \"full_name\": \"StephanJoubert/home_assistant_solarman\", \"last_updated\": \"2022-07-04T16:00:54Z\", \"stargazers_count\": 59, \"topics\": [\"deye\", \"energy\", \"inverter\", \"sofar\", \"sol-ark\", \"solar\", \"solarman\", \"solis\", \"sunsynk\"], \"last_fetched\": 1657362948.178413, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"442181774\": {\"repository_manifest\": {\"name\": \"Daikin Altherma\", \"render_readme\": true}, \"authors\": [\"@tadasdanielius\"], \"category\": \"integration\", \"description\": \"Daikin Altherma custom component for home assistant\", \"domain\": \"daikin_altherma\", \"etag_repository\": \"W/\\\"37cca92fceb8d7c639933d3da91742e9c89a0404af44374cf792ebb8f04600b0\\\"\", \"full_name\": \"tadasdanielius/daikin_altherma\", \"last_updated\": \"2022-05-26T17:25:21Z\", \"stargazers_count\": 18, \"topics\": [\"altherma\", \"brp069a61\", \"brp069a62\", \"daikin\", \"daikin-altherma\", \"homeassistant-custom-component\"], \"last_fetched\": 1656859397.005717, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"448604854\": {\"repository_manifest\": {\"name\": \"Cardiff Waste\", \"homeassistant\": \"2021.12.0\", \"render_readme\": true, \"country\": \"GB\"}, \"authors\": [\"@tombrien\"], \"category\": \"integration\", \"description\": \"A Home Assistant integration to provide sensors for waste collections in Cardiff, UK\", \"domain\": \"cardiffwaste\", \"etag_repository\": \"W/\\\"d8d34c60d143b37d2769c39aa60b79ee6e9e0225807a1f84ec422e036dbcf037\\\"\", \"full_name\": \"TomBrien/cardiffwaste-ha\", \"last_updated\": \"2022-05-26T12:54:38Z\", \"stargazers_count\": 8, \"topics\": [\"cardiff\", \"waste-collection\"], \"last_fetched\": 1656859415.718309, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"389366750\": {\"repository_manifest\": {\"name\": \"Rental Control\", \"hacs\": \"1.13.2\", \"zip_release\": true, \"filename\": \"rental_control.zip\", \"homeassistant\": \"2022.5.0\"}, \"authors\": [\"@tykeal\"], \"category\": \"integration\", \"description\": \"Rental Control system for Home Assistant\", \"domain\": \"rental_control\", \"downloads\": 65, \"etag_repository\": \"W/\\\"029c218df0d902b2020c5883355147e92c560ad351068d5d8f4f786dad2d3d2b\\\"\", \"full_name\": \"tykeal/homeassistant-rental-control\", \"last_updated\": \"2022-05-13T18:07:52Z\", \"stargazers_count\": 8, \"topics\": [\"airbnb\", \"ical\", \"locks\"], \"last_fetched\": 1653733623.901366, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"413798425\": {\"repository_manifest\": {\"name\": \"UI Lovelace Minimalist\", \"render_readme\": true, \"homeassistant\": \"2021.5.0\", \"zip_release\": true, \"filename\": \"ui_lovelace_minimalist.zip\"}, \"authors\": [\"@stokkie90\"], \"category\": \"integration\", \"description\": \"UI-Lovelace-Minimalist is a \\\"theme\\\" for HomeAssistant\", \"domain\": \"ui_lovelace_minimalist\", \"downloads\": 4498, \"etag_repository\": \"W/\\\"1041f719f7ab604a5bab0e5603786a5c94e091c82bd249e8a621d21f677bbd2d\\\"\", \"full_name\": \"UI-Lovelace-Minimalist/UI\", \"last_updated\": \"2022-07-08T11:33:45Z\", \"stargazers_count\": 770, \"last_fetched\": 1657362984.698148, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"444350375\": {\"repository_manifest\": {\"name\": \"Mushroom\", \"filename\": \"mushroom.js\", \"homeassistant\": \"2022.4.0\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Mushroom Cards - Build a beautiful dashboard easily \\ud83c\\udf44\", \"domain\": \"\", \"downloads\": 12446, \"etag_repository\": \"W/\\\"677afd18cab09d540a8610f00f7935ffbb7155c1342a22419d1291036a770d0c\\\"\", \"full_name\": \"piitaya/lovelace-mushroom\", \"last_updated\": \"2022-07-08T18:02:01Z\", \"stargazers_count\": 1145, \"topics\": [\"card\", \"mushroom\"], \"last_fetched\": 1657362527.783924, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"453143227\": {\"repository_manifest\": {\"name\": \"Juwel Helialux Smart Controller\", \"country\": \"GB\", \"render_readme\": true}, \"authors\": [\"@mrsleeps\"], \"category\": \"integration\", \"description\": \"A custom component for Home Assistant to monitor your Juwel HeliaLux light states\", \"domain\": \"juwel_helialux\", \"etag_repository\": \"W/\\\"751502dbd0d0b2443f311b5dc07a99c59ffefef9eb969240bb147938c5f480d8\\\"\", \"full_name\": \"MrSleeps/Juwel-HeliaLux-Home-Assistant-Custom-Component\", \"last_updated\": \"2022-06-12T11:33:49Z\", \"stargazers_count\": 4, \"topics\": [\"aquarium\", \"home-assistant-component\", \"lightning\"], \"last_fetched\": 1656859302.878419, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"453890532\": {\"repository_manifest\": {\"name\": \"Ontario Energy Board\", \"render_readme\": true, \"country\": \"CA\"}, \"authors\": [\"@jrfernandes\"], \"category\": \"integration\", \"description\": \"Home Assistant component that installs a sensor with the current energy rate for Ontario energy companies\", \"domain\": \"ontario_energy_board\", \"etag_repository\": \"W/\\\"bb1746238e3b2398c34314626afaa76a176f455b42a5bde8345e8662bef5412e\\\"\", \"full_name\": \"jrfernandes/ontario_energy_board\", \"last_updated\": \"2022-06-27T18:56:50Z\", \"stargazers_count\": 11, \"topics\": [\"canada\", \"electricity\", \"energy-prices\", \"hydro\", \"ontario\"], \"last_fetched\": 1656859236.836732, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"441369133\": {\"repository_manifest\": {\"name\": \"SmartRent\", \"render_readme\": true, \"zip_release\": true, \"filename\": \"smartrent.zip\"}, \"authors\": [\"@zacherythomas\"], \"category\": \"integration\", \"description\": \"Home Assistant Custom Component for SmartRent Locks \\ud83d\\udd10, Thermostats \\ud83c\\udf21, Sensors \\ud83d\\udca7 and Switches\\ud83d\\udca1\", \"domain\": \"smartrent\", \"downloads\": 42, \"etag_repository\": \"W/\\\"2947fb4f8c2db8ae2312cc7f442c4e80583e5f5d022705675d752db7169a3bcd\\\"\", \"full_name\": \"ZacheryThomas/homeassistant-smartrent\", \"last_updated\": \"2022-06-29T13:51:25Z\", \"stargazers_count\": 21, \"topics\": [\"smarthome\", \"smartrent\"], \"last_fetched\": 1656859445.380035, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"453785158\": {\"repository_manifest\": {\"name\": \"gogs\", \"render_readme\": true, \"country\": \"FR\"}, \"authors\": [\"@youdroid\"], \"category\": \"integration\", \"description\": \"Gogs component to follow your repositories\", \"domain\": \"gogs\", \"etag_repository\": \"W/\\\"05b31b54506f886c3a089cee6719ab0985b318a301c185baa21ece884aff16b8\\\"\", \"full_name\": \"youdroid/home-assistant-gogs\", \"last_updated\": \"2022-04-24T20:35:04Z\", \"stargazers_count\": 1, \"topics\": [\"gogs\", \"home-assistant-component\"], \"last_fetched\": 1653229967.488259, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"454951296\": {\"repository_manifest\": {\"name\": \"Raspberry Pi GPIO\", \"homeassistant\": \"2022.7.0\"}, \"authors\": [\"@thecode\"], \"category\": \"integration\", \"description\": \"Home Assistant Raspberry Pi GPIO Integration\", \"domain\": \"rpi_gpio\", \"etag_repository\": \"W/\\\"c7abe91a9d060f1ffef8faa1013a69bcaf5210ef9cc5527385821f0bf133f623\\\"\", \"full_name\": \"thecode/ha-rpi_gpio\", \"last_updated\": \"2022-07-04T18:31:43Z\", \"stargazers_count\": 66, \"topics\": [\"rpi-gpio\"], \"last_fetched\": 1657362960.610865, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"452272431\": {\"repository_manifest\": {\"name\": \"bemfa\", \"render_readme\": true, \"country\": \"CN\", \"homeassistant\": \"2021.12.10\"}, \"authors\": [\"@larry-wong\"], \"category\": \"integration\", \"description\": \"\\u5c06 Home Assistant \\u5b9e\\u4f53\\u540c\\u6b65\\u81f3\\u5df4\\u6cd5\\u4e91\\uff0c\\u5e76\\u4f7f\\u7528\\u5c0f\\u7231\\u540c\\u5b66/\\u5929\\u732b\\u7cbe\\u7075/\\u5c0f\\u5ea6\\u97f3\\u7bb1\\u63a7\\u5236\\u3002\", \"domain\": \"bemfa\", \"etag_repository\": \"W/\\\"d613d8b62eaf36462ff9b67c79bc0134363cd36734a44229d26188198cd11114\\\"\", \"full_name\": \"larry-wong/bemfa\", \"last_updated\": \"2022-05-15T01:39:02Z\", \"stargazers_count\": 111, \"last_fetched\": 1656859262.401978, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"454942078\": {\"repository_manifest\": {\"name\": \"Tenda AC23 Router Device Tracker\", \"render_readme\": true}, \"authors\": [\"@sakowicz\"], \"category\": \"integration\", \"description\": \"Track your devices via Tenda AC23 router using Home Assistant's device tracker\", \"domain\": \"tenda_tracker\", \"etag_repository\": \"W/\\\"c39e89748861d1c5a4f47c95cf97ef2b7b1c6acee5cea19b1580b3a6e73287be\\\"\", \"full_name\": \"sakowicz/home-assistant-tenda-tracker\", \"topics\": [\"device-tracker\", \"home\", \"tenda\", \"tenda-ac23\", \"tracker\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"455217528\": {\"repository_manifest\": {\"name\": \"systemd notifier\", \"render_readme\": true}, \"authors\": [\"@brianegge\"], \"category\": \"integration\", \"description\": \"systemd service for Home Assistant\", \"domain\": \"sdnotify\", \"etag_repository\": \"W/\\\"b8e0b7cf5ab9361b208db484fb04a2593dd71c52b1057b857491163c80f3e901\\\"\", \"full_name\": \"brianegge/home-assistant-sdnotify\", \"last_updated\": \"2022-04-24T00:10:13Z\", \"stargazers_count\": 7, \"topics\": [\"systemd\"], \"last_fetched\": 1653229617.52229, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"443297453\": {\"repository_manifest\": {\"name\": \"hasslife\", \"country\": \"CN\", \"render_readme\": true}, \"category\": \"integration\", \"description\": \"\\u5929\\u732b\\u7cbe\\u7075\\u3001\\u5c0f\\u7231\\u540c\\u5b66\\u63a7\\u5236HomeAssistant\\u8bbe\\u5907\\u548c\\u5c5e\\u6027\\u4e0a\\u62a5\\u67e5\\u8be2\", \"domain\": \"hasslife\", \"etag_repository\": \"W/\\\"a90d2fdb563496326b6e3d3df707498a93b24ed2608bdccf300f36c1bc5a8add\\\"\", \"full_name\": \"Blear/HassLife\", \"last_updated\": \"2022-04-19T06:48:37Z\", \"stargazers_count\": 37, \"topics\": [\"miiot\", \"tmall\", \"tmall-genie\"], \"last_fetched\": 1657362648.557779, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"398767994\": {\"repository_manifest\": {\"name\": \"Wibeee (and Mirubee) energy monitor\", \"render_readme\": true, \"zip_release\": true, \"filename\": \"hass_wibeee.zip\", \"homeassistant\": \"2021.9.1\"}, \"authors\": [\"@luuuis\"], \"category\": \"integration\", \"description\": \"Home Assistant: Wibeee energy monitor custom component\", \"domain\": \"wibeee\", \"downloads\": 376, \"etag_repository\": \"W/\\\"69e3a57619fdfcf4ce05a9826fb0fbc55a6b12f3fe9a04b94a663d2db35f02e8\\\"\", \"full_name\": \"luuuis/hass_wibeee\", \"last_updated\": \"2022-06-15T10:59:22Z\", \"stargazers_count\": 7, \"topics\": [\"circutor\", \"mirubee\", \"wibeee\"], \"last_fetched\": 1657362844.602772, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"450898706\": {\"repository_manifest\": {\"name\": \"Only Lock Lock Row\", \"filename\": \"only-lock-lock-row.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Only let users lock a lock\", \"domain\": \"\", \"etag_repository\": \"W/\\\"842e9c8739295e811ef0ee56f7a71a076a0db59779b75f65bdfe6333f3fbd911\\\"\", \"full_name\": \"frozenwizard/onlylocklock\", \"last_updated\": \"2022-04-09T20:44:22Z\", \"stargazers_count\": 4, \"topics\": [\"frontend\", \"lock\"], \"last_fetched\": 1653230035.708964, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"458636658\": {\"repository_manifest\": {\"name\": \"iOS Theme - Based on the system-wide light and dark mode UI\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 By JuanMTech -- Theme based on the iOS system-wide light and dark mode interface\", \"domain\": \"\", \"etag_repository\": \"W/\\\"76b8506624cd4530a022583f51da44ae68a27350cd7fe8e61c1facf1113ce289\\\"\", \"full_name\": \"JuanMTech/ios-theme\", \"last_updated\": \"2022-05-03T14:14:53Z\", \"stargazers_count\": 9, \"topics\": [\"darkmode\", \"darktheme\", \"lightmode\", \"lighttheme\"], \"last_fetched\": 1656859475.66522, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"457458731\": {\"repository_manifest\": {\"name\": \"Material 3 Dark & Light Theme 07: DarkOliveGreen\", \"filename\": \"m3-07-darkolivegreen.yaml\", \"render_readme\": \"true\"}, \"category\": \"theme\", \"description\": \"Material Design 3 based theme (dark olive green) for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"8c47501c38aeeb7e246b001bd70edfc99bfb40f0aba0b7af4a980a59cdddbdbb\\\"\", \"full_name\": \"AmoebeLabs/HA-Theme_M3-07-DarkOliveGreen\", \"last_updated\": \"2022-06-15T07:56:39Z\", \"topics\": [\"dark-mode\", \"dark-theme\", \"home-assistant-theme\", \"light-mode\", \"light-theme\", \"material-3\"], \"last_fetched\": 1656859450.556278, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"456201687\": {\"repository_manifest\": {\"name\": \"Mushroom Themes\", \"homeassistant\": \"2021.11\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"Additional themes for Lovelace Mushroom Cards \\ud83c\\udf44\", \"domain\": \"\", \"etag_repository\": \"W/\\\"fb51105ffa7dc110055e24c8ea2128d28c786fea5ee050021353af71ad0bd4a0\\\"\", \"full_name\": \"piitaya/lovelace-mushroom-themes\", \"last_updated\": \"2022-06-12T17:44:55Z\", \"stargazers_count\": 61, \"topics\": [\"mushroom\"], \"last_fetched\": 1657362600.08824, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"458817847\": {\"repository_manifest\": {\"name\": \"Material 3 Dark & Light Theme xx: yyyy\", \"filename\": \"m3-xx-yyyy.yaml\", \"render_readme\": \"true\"}, \"category\": \"theme\", \"description\": \"Material Design 3 / Material YOU theme for Home Assistant\", \"domain\": \"\", \"etag_repository\": \"W/\\\"9e78952d7b6f519645cc7ed69a1b2a61a7bfbdf1d1333c2d39d946738c353466\\\"\", \"full_name\": \"AmoebeLabs/HA-Theme_M3-04-Magenta\", \"topics\": [\"dark-mode\", \"home-assistant-theme\", \"light-mode\", \"material-3\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"458491675\": {\"repository_manifest\": {\"name\": \"Nicehash Excavator Monitor Card\", \"filename\": \"nicehash-excavator-monitor-card.js\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Home Assistant UI Card for Nicehash Excavator Monitor integration\", \"domain\": \"\", \"etag_repository\": \"W/\\\"01f7f45a1708db4f5c7f844ba7a71edd964af811d0121ecad5a11f8861d09766\\\"\", \"full_name\": \"MesserschmittX/lovelace-nicehash-excavator-monitor-card\", \"topics\": [\"excavator\", \"mining\", \"nicehash\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"458664750\": {\"repository_manifest\": {\"name\": \"Google Theme - Based on the Android light and dark interface\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 By JuanMTech -- Theme based on the Google Android light and dark mode interface\", \"domain\": \"\", \"etag_repository\": \"W/\\\"18311d05ac2fb5e2af5926ef077cbb5ef07af73b04ab4679eabae6a4a0240475\\\"\", \"full_name\": \"JuanMTech/google-theme\", \"last_updated\": \"2022-05-03T14:11:39Z\", \"stargazers_count\": 24, \"topics\": [\"darkmode\", \"googletheme\", \"lightmode\"], \"last_fetched\": 1657362586.96513, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"316396217\": {\"repository_manifest\": {\"name\": \"Mjpeg Timelapse\", \"homeassistant\": \"0.118.0\", \"render_readme\": true}, \"authors\": [\"@evilmarty\"], \"category\": \"integration\", \"description\": \"Mjpeg Timelapse integration for Home Assistant\", \"domain\": \"mjpeg_timelapse\", \"etag_repository\": \"W/\\\"0b26ec2a42e201ad721f9c8c17ce6dd9977975a1f9be525b0c719124a2c26d9e\\\"\", \"full_name\": \"evilmarty/mjpeg-timelapse\", \"last_updated\": \"2022-03-17T06:27:27Z\", \"stargazers_count\": 9, \"topics\": [\"camera\"], \"last_fetched\": 1653229706.298956, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"442878365\": {\"repository_manifest\": {\"name\": \"Golden Security Alarm\", \"render_readme\": true}, \"authors\": [\"@hostcc\"], \"category\": \"integration\", \"description\": \"Custom Home Assistant integration for G90 security systems\", \"domain\": \"gs_alarm\", \"etag_repository\": \"W/\\\"0ceccde283dcbfe047752c9fdb70054cc3be36cabcd8c46b6ef48f6b2166c5c4\\\"\", \"full_name\": \"hostcc/hass-gs-alarm\", \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"460392242\": {\"repository_manifest\": {\"name\": \"Svensk Postutdelning\", \"country\": \"SE\", \"homeassistant\": \"2021.12.0\"}, \"authors\": [\"@dsorlov\"], \"category\": \"integration\", \"description\": \"Swedish Post Delivery integration for Home Assistant\", \"domain\": \"swemail\", \"etag_repository\": \"W/\\\"6f4ca71404026ebd6868f81ae2f07e603c481d7d4a4ea3e458f6718d0f9bfa1d\\\"\", \"full_name\": \"DSorlov/swemail\", \"last_updated\": \"2022-02-26T09:59:28Z\", \"stargazers_count\": 13, \"topics\": [\"citymail\", \"postnord\"], \"last_fetched\": 1653229693.069868, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"387116237\": {\"repository_manifest\": {\"name\": \"XMRIG integration\", \"render_readme\": true}, \"authors\": [\"@hwmland\"], \"category\": \"integration\", \"description\": \"XMRIG integration for homeassistant\", \"domain\": \"xmrig\", \"etag_repository\": \"W/\\\"b37a16317da0f8b09e27054669e0f4a1433f51b3a5704db9e6c42b7dc3bb8c5c\\\"\", \"full_name\": \"hwmland/homeassistant-xmrig\", \"last_updated\": \"2022-03-05T08:36:08Z\", \"stargazers_count\": 2, \"topics\": [\"cryptocurrency\", \"monero-mining\", \"xmrig\"], \"last_fetched\": 1646496916.660526, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"419381725\": {\"repository_manifest\": {\"name\": \"Huawei Solar\", \"content_in_root\": true, \"render_readme\": true, \"homeassistant\": \"2022.2.1\"}, \"authors\": [\"@wlcrs\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for Huawei Solar inverters via ModbusTCP\", \"domain\": \"huawei_solar\", \"etag_repository\": \"W/\\\"3a614e758e66a948e8a1346ede239d0d921880c2dee193c4bbb77d5f5b3ef09f\\\"\", \"full_name\": \"wlcrs/huawei_solar\", \"last_updated\": \"2022-06-17T04:49:13Z\", \"stargazers_count\": 68, \"topics\": [\"home-assistant-integration\", \"huawei\", \"huawei-solar\", \"modbus\", \"modbus-tcp\"], \"last_fetched\": 1657362985.190312, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"294037465\": {\"repository_manifest\": {\"name\": \"Dual Smart Thermostat\", \"render_readme\": true, \"hide_default_branch\": true, \"homeassistant\": \"0.118.0\", \"filename\": \"ha-dual-smart-thermostat.zip\"}, \"authors\": [\"@swingerman\"], \"category\": \"integration\", \"description\": \"The `dual_smart_thermostat` is an enhaced verion of generic thermostat implemented in Home Assistant. It uses several sensors and dedicated switches connected to a heater and air conditioning under the hood.\", \"domain\": \"dual_smart_thermostat\", \"etag_repository\": \"W/\\\"30d8d2d09d0123ddc3a0707cd6e24e5f141f211fcd3771a50b6fadf43c289d42\\\"\", \"full_name\": \"swingerman/ha-dual-smart-thermostat\", \"last_updated\": \"2022-05-27T20:25:22Z\", \"stargazers_count\": 30, \"topics\": [\"thermostat\"], \"last_fetched\": 1656859391.354582, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"466196192\": {\"repository_manifest\": {\"name\": \"Header Cards\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Header Cards\", \"domain\": \"\", \"etag_repository\": \"W/\\\"b2881785bca9a239bcf715639e719b6fa4484c1b473672e6e6445d66c5174251\\\"\", \"full_name\": \"gadgetchnnel/lovelace-header-cards\", \"last_updated\": \"2022-04-11T06:36:27Z\", \"stargazers_count\": 17, \"topics\": [\"cards\", \"header\"], \"last_fetched\": 1656859555.917626, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"461936688\": {\"repository_manifest\": {\"name\": \"Whatsapp Theme\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"Home Assistant theme based on Whatsapp\", \"domain\": \"\", \"etag_repository\": \"W/\\\"d0d47b58c6f5a267bc6f59669293bf79b41809f95e26d45fae10b6599229a160\\\"\", \"full_name\": \"robinwittebol/whatsapp-theme\", \"stargazers_count\": 5, \"topics\": [\"darkmode\", \"green\", \"lightmode\", \"whatsapp\", \"whatsapptheme\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"464998514\": {\"repository_manifest\": {\"name\": \"Cyberpunk 2077 Theme\"}, \"category\": \"theme\", \"description\": \"Cyberpunk 2077 GUI inspied Home Assistant theme\", \"domain\": \"\", \"etag_repository\": \"W/\\\"87e492a8e2f35de69f91f673dc4d2657cc9c7d425b36051554b0bd65a081be1f\\\"\", \"full_name\": \"flejz/hass-cyberpunk-2077-theme\", \"last_updated\": \"2022-03-14T13:29:28Z\", \"stargazers_count\": 12, \"topics\": [\"cyberpunk\", \"cyberpunk-2077\"], \"last_fetched\": 1657362574.178613, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"462430932\": {\"repository_manifest\": {\"name\": \"Fire Protection Hungary\", \"country\": [\"HU\"], \"render_readme\": \"true\"}, \"authors\": [\"@amaximus\"], \"category\": \"integration\", \"description\": \"Fire protection integration for Home Assistant with data provided by N\\u00c9BIH\", \"domain\": \"fire_protection_hu\", \"etag_repository\": \"W/\\\"179635695490e9293195c45dfbe41e0ac549a433c26345cedd90f3b233da74e4\\\"\", \"full_name\": \"amaximus/fire_protection_hu\", \"last_updated\": \"2022-02-22T19:44:56Z\", \"stargazers_count\": 1, \"topics\": [\"homeassistant-custom-component\", \"hungary\"], \"last_fetched\": 1648398860.290217, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"259900367\": {\"repository_manifest\": {\"name\": \"AbfallPlus\", \"country\": \"DE\", \"render_readme\": true}, \"authors\": [\"@bouni\"], \"category\": \"integration\", \"description\": \"AbfallPlus component for Home Assistant \", \"domain\": \"abfallplus\", \"etag_repository\": \"W/\\\"e3563651005907e2650649c8730c6a3bd80cfc900684e0f2152433d466fcf2f4\\\"\", \"full_name\": \"Bouni/abfallplus\", \"last_updated\": \"2022-06-27T13:14:57Z\", \"stargazers_count\": 6, \"topics\": [\"abfallplus\"], \"last_fetched\": 1656859076.993003, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"463624702\": {\"repository_manifest\": {\"name\": \"Hatch Rest Mini Sound Machine\", \"render_readme\": true, \"country\": [\"US\"], \"homeassistant\": \"2021.10.0b0\"}, \"authors\": [\"@dahlb\"], \"category\": \"integration\", \"description\": \"Home Assistant Integration for Hatch Rest Mini\", \"domain\": \"ha_hatch\", \"etag_repository\": \"W/\\\"95c56d755eba15e7e7f82940cbf6bd02a0f4d36d440550058fba9d062e4b7f2c\\\"\", \"full_name\": \"dahlb/ha_hatch\", \"last_updated\": \"2022-04-21T15:55:18Z\", \"stargazers_count\": 3, \"topics\": [\"hatch-baby-rest\", \"python3\"], \"last_fetched\": 1656859132.035944, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"455174197\": {\"repository_manifest\": {\"name\": \"Watchman\", \"render_readme\": true}, \"authors\": [\"@dummylabs\"], \"category\": \"integration\", \"description\": \"Home Assistant custom integration to keep track of missing entities and services in your config files\", \"domain\": \"watchman\", \"etag_repository\": \"W/\\\"5fcbb151b0e2fe7ea8d9a220954edd9170b76543dc0877835adcc89d1c50d4a7\\\"\", \"full_name\": \"dummylabs/thewatchman\", \"last_updated\": \"2022-06-12T16:06:16Z\", \"stargazers_count\": 114, \"topics\": [\"automation\"], \"last_fetched\": 1657362722.135545, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"462065554\": {\"repository_manifest\": {\"name\": \"Life Time Fitness\", \"render_readme\": true, \"zip_release\": true, \"filename\": \"lifetime_fitness.zip\"}, \"authors\": [\"@GuyLewin\"], \"category\": \"integration\", \"description\": \"Life Time Fitness integration for Home Assistant\", \"domain\": \"lifetime_fitness\", \"etag_repository\": \"W/\\\"59b9690605bc869d6a097e087db1cfea099feeee0b1144ef36ea38d145458e6b\\\"\", \"full_name\": \"GuyLewin/home-assistant-lifetime-fitness\", \"topics\": [\"lifetime\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"448323715\": {\"repository_manifest\": {\"name\": \"Nest Protect\", \"homeassistant\": \"2022.6\", \"render_readme\": \"true\"}, \"authors\": [\"@imicknl\"], \"category\": \"integration\", \"description\": \"Nest Protect integration for Home Assistant. This will allow you to integrate your smoke, heat, co and occupancy status real-time in HA.\", \"domain\": \"nest_protect\", \"etag_repository\": \"W/\\\"5455c783fe60ec6ac3036b6a3ebe75690204d6814567e631e039065c204f1f9c\\\"\", \"full_name\": \"iMicknl/ha-nest-protect\", \"last_updated\": \"2022-06-15T15:41:45Z\", \"stargazers_count\": 123, \"topics\": [\"google\", \"nest\", \"nest-protect\"], \"last_fetched\": 1657362777.936815, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"456292486\": {\"repository_manifest\": {\"name\": \"Dabbler.dk reader for Echelon/NES smart power meter\", \"render_readme\": true, \"country\": \"DK\"}, \"authors\": [\"@jnxxx\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for reading Echelon/NES smart power meter, by utilizing the Dabbler.dk MEP module \", \"domain\": \"dabblerdk_powermeterreader\", \"etag_repository\": \"W/\\\"769a370b78b6448cddd73ea929ec8aadf733327eddc9c4a919d5bdbc6e97cc2e\\\"\", \"full_name\": \"jnxxx/homeassistant-dabblerdk_powermeterreader\", \"last_updated\": \"2022-05-29T14:33:43Z\", \"stargazers_count\": 7, \"topics\": [\"83331-3i\", \"dabbler-dk\", \"echelon\", \"energy\", \"nes\", \"powermeter\"], \"last_fetched\": 1656859230.628899, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"461906076\": {\"repository_manifest\": {\"name\": \"Raspberry Pi RF\", \"homeassistant\": \"2022.7.0\"}, \"authors\": [\"@markvader\"], \"category\": \"integration\", \"description\": \"Home Assistant Raspberry Pi GPIO RF Integration\", \"domain\": \"rpi_rf\", \"etag_repository\": \"W/\\\"10ac5fafd816ad40a5d7663f36eff7c5f088e86bea02f8ec58f0e2c3cff0b377\\\"\", \"full_name\": \"markvader/ha-rpi_rf\", \"last_updated\": \"2022-07-07T19:54:39Z\", \"stargazers_count\": 17, \"topics\": [\"home-assistant-component\", \"rpi-gpio\", \"rpi-rf\"], \"last_fetched\": 1657362849.763207, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"442225646\": {\"repository_manifest\": {\"name\": \"London TfL\", \"country\": \"GB\", \"homeassistant\": \"2021.12.0\", \"render_readme\": true}, \"authors\": [\"@morosanmihail\"], \"category\": \"integration\", \"description\": \"Simple sensor to retrieve departures from Transport for London stations.\", \"domain\": \"london_tfl\", \"etag_repository\": \"W/\\\"63b8ddc6edb61917355709863dcd11d216354cda76326c7feecf3a92e28b58e2\\\"\", \"full_name\": \"morosanmihail/HA-LondonTfL\", \"last_updated\": \"2022-05-29T15:26:45Z\", \"stargazers_count\": 6, \"topics\": [\"london\", \"tfl\", \"transport\"], \"last_fetched\": 1656859299.924042, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"460167330\": {\"repository_manifest\": {\"name\": \"Pod Point\", \"hacs\": \"1.6.0\", \"homeassistant\": \"2021.8.0\"}, \"authors\": [\"@mattrayner\"], \"category\": \"integration\", \"description\": \"A simple Home Assistant integration that shows basic information from Pod Point and allows the control of charging schedules to disable and enable the pod.\", \"domain\": \"pod_point\", \"etag_repository\": \"W/\\\"485bad0156af68c644094befb87758c4ef6ec8032f92de217519993b197d02fa\\\"\", \"full_name\": \"mattrayner/pod-point-home-assistant-component\", \"last_updated\": \"2022-05-28T08:50:10Z\", \"stargazers_count\": 14, \"topics\": [\"energy-consumption\", \"ev-charging\"], \"last_fetched\": 1656859291.068636, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"459761427\": {\"repository_manifest\": {\"name\": \"PGNIG sensor\", \"country\": \"PL\", \"render_readme\": true}, \"category\": \"integration\", \"description\": \"This sensor is gathering gas usage data from PGNIG ebok page.\", \"domain\": \"pgnig_gas_sensor\", \"etag_repository\": \"W/\\\"b4638789bf15e09640bd79d8877af104fcf672c4a6d1c7d60eb45dbd4ae24abf\\\"\", \"full_name\": \"pawelhulek/pgnig-sensor\", \"last_updated\": \"2022-05-08T15:21:32Z\", \"stargazers_count\": 13, \"topics\": [\"gas-sensor\"], \"last_fetched\": 1653229853.0507, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"459709817\": {\"repository_manifest\": {\"name\": \"Tedee\", \"render_readme\": true, \"hide_default_branch\": true}, \"authors\": [\"@patrickhilker\"], \"category\": \"integration\", \"description\": \"Control your tedee smart lock from Home Assistant\", \"domain\": \"tedee\", \"etag_repository\": \"W/\\\"94a71b2517e5810667cebf68860d1ed6fb80dc772a79a63a95ae1f72ff2a5a64\\\"\", \"full_name\": \"patrickhilker/tedee_hass_integration\", \"last_updated\": \"2022-03-14T16:16:35Z\", \"stargazers_count\": 5, \"topics\": [\"customcomponent\", \"lock\", \"security\", \"smart-lock\", \"smartlock\", \"tedee\"], \"last_fetched\": 1657362883.583321, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"319820836\": {\"repository_manifest\": {\"name\": \"Coway IoCare\", \"render_readme\": true, \"homeassistant\": \"2022.5.0b0\"}, \"authors\": [\"@RobertD502\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for monitoring and controlling Coway Airmega Purifiers\", \"domain\": \"coway\", \"etag_repository\": \"W/\\\"d6a17a2e9495fde0d0fdd64ad619457abefb1e3f2165978d7dceb53a1d7b864c\\\"\", \"full_name\": \"RobertD502/home-assistant-iocare\", \"last_updated\": \"2022-05-04T16:42:45Z\", \"stargazers_count\": 9, \"topics\": [\"coway\", \"coway-iocare\", \"home-assistant-component\", \"iocare\"], \"last_fetched\": 1653229880.322804, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"400108978\": {\"repository_manifest\": {\"name\": \"FitX Gym Usage Sensor for Home Assistant\", \"render_readme\": true, \"country\": \"DE\"}, \"authors\": [\"@Raukze\"], \"category\": \"integration\", \"description\": \"\\ud83c\\udfcb\\ufe0f FitX Gym Usage Sensor for Home Assistant\", \"domain\": \"fitx\", \"downloads\": 2, \"etag_repository\": \"W/\\\"a1165445caa0b86a53fefe727139f927e244d88e3abff8faaa499bdd0db8eba2\\\"\", \"full_name\": \"Raukze/home-assistant-fitx\", \"last_updated\": \"2022-03-04T15:23:20Z\", \"stargazers_count\": 6, \"topics\": [\"fitx\", \"gym\"], \"last_fetched\": 1657362905.873917, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"232813686\": {\"repository_manifest\": {\"name\": \"SkyQ\", \"zip_release\": true, \"homeassistant\": \"2022.5.0\", \"filename\": \"skyq.zip\", \"render_readme\": true}, \"authors\": [\"@rogerselwyn\"], \"category\": \"integration\", \"description\": \"Home Assistant SkyQ Media player component\", \"domain\": \"skyq\", \"downloads\": 1200, \"etag_repository\": \"W/\\\"16f20abe05e34e7b3dc1f0b78783518450d0cbb5008e007fff56fbff001d67f9\\\"\", \"full_name\": \"RogerSelwyn/Home_Assistant_SkyQ_MediaPlayer\", \"last_updated\": \"2022-06-05T09:13:56Z\", \"stargazers_count\": 62, \"topics\": [\"sky\", \"skyq\"], \"last_fetched\": 1657362918.254348, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"460108030\": {\"repository_manifest\": {\"name\": \"go-eCharger integration for Home Assistant using the MQTT API\", \"render_readme\": true, \"homeassistant\": \"2022.7.0\"}, \"authors\": [\"@syssi\"], \"category\": \"integration\", \"description\": \"go-eCharger integration for Home Assistant using the MQTT API\", \"domain\": \"goecharger_mqtt\", \"etag_repository\": \"W/\\\"c573432cc6baa78ef0d6c3f68ffbb482e95b87c270d416aa03f42a37ef5d9196\\\"\", \"full_name\": \"syssi/homeassistant-goecharger-mqtt\", \"last_updated\": \"2022-07-07T19:09:49Z\", \"stargazers_count\": 12, \"topics\": [\"go-echarger\", \"goe-charger\"], \"last_fetched\": 1657362952.094662, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"394704821\": {\"repository_manifest\": {\"name\": \"SolaX Inverter Modbus\", \"render_readme\": true}, \"authors\": [\"@wills106\"], \"category\": \"integration\", \"description\": \"SolaX Power Modbus custom_component for Home Assistant\", \"domain\": \"solax_modbus\", \"etag_repository\": \"W/\\\"6ffd468acaafda87e4eb87bcb478b6d8abc04343f828553c762eda469485017c\\\"\", \"full_name\": \"wills106/homeassistant-solax-modbus\", \"last_updated\": \"2022-07-03T11:07:59Z\", \"stargazers_count\": 27, \"topics\": [\"modbus\", \"modbus-serial\", \"modbus-tcp\", \"rs485\", \"solax\", \"solax-inverter\"], \"last_fetched\": 1656859438.883528, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"124766061\": {\"repository_manifest\": {\"name\": \"Sbanken\", \"render_readme\": true, \"zip_release\": true, \"filename\": \"sbanken.zip\"}, \"authors\": [\"@toringer\"], \"category\": \"integration\", \"description\": \"Sbanken sensor for Home Assistant\", \"domain\": \"sbanken\", \"etag_repository\": \"W/\\\"921873adcd5a4e64298d7db8a57e19bcaad47350f57c5c4cf84a75259b1d7778\\\"\", \"full_name\": \"toringer/home-assistant-sbanken\", \"stargazers_count\": 2, \"topics\": [\"sbanken\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"465062337\": {\"repository_manifest\": {\"name\": \"Electrolux Care Integration (Not Official)\", \"hacs\": \"1.23.0\", \"homeassistant\": \"2022.2.9\"}, \"authors\": [\"@mauro-midolo\"], \"category\": \"integration\", \"description\": \"Get the status from your Electrolux Care devices\", \"domain\": \"electrolux_status\", \"etag_repository\": \"W/\\\"1e09bfe2e4497920f0e59021124fbeeb84f90442484bc01be043bc62f7d6eb80\\\"\", \"full_name\": \"mauro-midolo/homeassistant_electrolux_status\", \"last_updated\": \"2022-07-05T08:56:03Z\", \"stargazers_count\": 25, \"topics\": [\"aeg\", \"electrolux\", \"home-assistant-integration\"], \"last_fetched\": 1657362850.824472, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"470262899\": {\"repository_manifest\": {\"name\": \"Nordic Theme\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"Nordic theme for home assistant.\", \"domain\": \"\", \"etag_repository\": \"W/\\\"df83444286697bddb4df649736d17f8c6ac37d9d0fc3716a92a8aa708237f86d\\\"\", \"full_name\": \"coltondick/nordic-theme-main\", \"last_updated\": \"2022-04-30T13:38:21Z\", \"stargazers_count\": 7, \"last_fetched\": 1656859455.390556, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"479056577\": {\"repository_manifest\": {\"name\": \"Green and Dark Theme: Simple, clean, and green\", \"render_readme\": true, \"homeassistant\": \"2022.3\"}, \"category\": \"theme\", \"description\": \"A dark theme with green accents for Home Assistant based off green_dark_mode by JuanMTech, with mods by dmyoung9\", \"domain\": \"\", \"etag_repository\": \"W/\\\"33d51f14cf98d6336450a61ec4914833cc7a4692897d051e9edf4f08600627f7\\\"\", \"full_name\": \"Matt-PMCT/Green-and-Dark-HA-Theme\", \"topics\": [\"dark-theme\", \"green\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"294609880\": {\"repository_manifest\": {\"name\": \"BOM Radar Card\", \"render_readme\": true, \"filename\": \"bom-radar-card.js\"}, \"category\": \"plugin\", \"description\": \"A rain radar card using the new tiled images from the Australian BOM\", \"domain\": \"\", \"downloads\": 1418, \"etag_repository\": \"W/\\\"b363844c58e821ac0a4576d92073d0164680415b95ddbb218edfcdda0f4017b5\\\"\", \"full_name\": \"Makin-Things/bom-radar-card\", \"last_updated\": \"2022-05-27T08:51:14Z\", \"stargazers_count\": 64, \"topics\": [\"bom\", \"frontend\", \"meteorology\", \"radar\", \"weather\"], \"last_fetched\": 1657362509.996425, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"468093553\": {\"repository_manifest\": {\"name\": \"Radioactivity Hungary\", \"country\": [\"HU\"], \"render_readme\": \"true\"}, \"authors\": [\"@amaximus\"], \"category\": \"integration\", \"description\": \"Radioactivity data for Hungary\", \"domain\": \"radioactivity_hu\", \"etag_repository\": \"W/\\\"92870eaaa43808c997f26ba05a10b7225e7c5b3dde24607a549bc42822ea24aa\\\"\", \"full_name\": \"amaximus/radioactivity_hu\", \"last_updated\": \"2022-05-02T12:51:59Z\", \"stargazers_count\": 1, \"topics\": [\"homeassistant-custom-component\", \"hungary\"], \"last_fetched\": 1653229588.321087, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"467638459\": {\"repository_manifest\": {\"name\": \"Niko Home Control II\", \"render_readme\": true, \"homeassistant\": \"0.114.1\"}, \"authors\": [\"@filipvh\", \"@joleys\"], \"category\": \"integration\", \"description\": \"Home Assistant Custom Integration for Niko Home Control II\", \"domain\": \"nhc2\", \"etag_repository\": \"W/\\\"03ddff8fd9885bc7a1006fd2f90cd66c0e33b1cd1fbda1fd55cdc4970f548297\\\"\", \"full_name\": \"joleys/niko-home-control-II\", \"last_updated\": \"2022-06-12T14:56:11Z\", \"stargazers_count\": 17, \"topics\": [\"automation\", \"domotics\", \"niko\"], \"last_fetched\": 1656859233.923209, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"478745957\": {\"repository_manifest\": {\"name\": \"Ile de france Mobilite\", \"hacs\": \"1.0.0\", \"homeassistant\": \"0.118.0\", \"render_readme\": true, \"country\": [\"FR\"]}, \"authors\": [\"@drosocode\"], \"category\": \"integration\", \"description\": \"Custom component for ile de france mobilit\\u00e9s\", \"domain\": \"idfm\", \"etag_repository\": \"W/\\\"5f2854b6bcf44522a9ef48d1085a41b8dd85802c2f7bba6ad471a945966bffb3\\\"\", \"full_name\": \"droso-hass/idfm\", \"last_updated\": \"2022-04-23T15:16:59Z\", \"stargazers_count\": 3, \"topics\": [\"time\", \"transports\"], \"last_fetched\": 1653229691.70774, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"366332990\": {\"repository_manifest\": {\"name\": \"Electrolux Wellbeing\", \"hacs\": \"1.6.0\", \"homeassistant\": \"2021.5.0\"}, \"authors\": [\"@JohNan\"], \"category\": \"integration\", \"description\": \"Get the status from your Electrolux devices connected to Wellbeing\", \"domain\": \"wellbeing\", \"downloads\": 3, \"etag_repository\": \"W/\\\"cef7e8df4b9d6d2877e49b77715bf53863f043ddaa28fd416cc815e8ff8ad266\\\"\", \"full_name\": \"JohNan/homeassistant-wellbeing\", \"last_updated\": \"2022-05-04T18:46:51Z\", \"stargazers_count\": 28, \"last_fetched\": 1656859232.207796, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"224258177\": {\"repository_manifest\": {\"name\": \"Heatzy\", \"country\": [\"FR\"], \"homeassistant\": \"0.109\", \"render_readme\": true}, \"authors\": [\"@cyr-ius\"], \"category\": \"integration\", \"description\": \"Climate Home Assistant component for Heatzy Pilot\", \"domain\": \"heatzy\", \"etag_repository\": \"W/\\\"869999553f6d0800133503baa7e08354ab4084f730bf6f14e15a4acb019fa85a\\\"\", \"full_name\": \"Cyr-ius/hass-heatzy\", \"stargazers_count\": 13, \"topics\": [\"heatzy\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"346329169\": {\"repository_manifest\": {\"name\": \"MiWiFi\", \"render_readme\": true, \"homeassistant\": \"2022.4.0\"}, \"authors\": [\"@dmamontov\"], \"category\": \"integration\", \"description\": \"MiWiFi for Home Assistant\", \"domain\": \"miwifi\", \"etag_repository\": \"W/\\\"73d6daf8d47798cc029cba52523c91cb8cea5537e3ddfe518a3159ffe69131c0\\\"\", \"full_name\": \"dmamontov/hass-miwifi\", \"last_updated\": \"2022-07-06T10:33:16Z\", \"stargazers_count\": 96, \"topics\": [\"mi\", \"miwifi\", \"redmi\", \"xiaomi\"], \"last_fetched\": 1657362717.032029, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"474183846\": {\"repository_manifest\": {\"name\": \"HA-Mila\", \"render_readme\": true}, \"authors\": [\"@sanghviharshit\"], \"category\": \"integration\", \"description\": \"\\ud83c\\udfe1 \\ud83d\\udca8  Home Assistant custom component for Mila Air Purifier (Unofficial)\", \"domain\": \"mila\", \"etag_repository\": \"W/\\\"9db16c2d08987e989ff07fc8433046efc247ec068716698b8f628b41554aadb4\\\"\", \"full_name\": \"sanghviharshit/ha-mila\", \"last_updated\": \"2022-06-04T21:24:35Z\", \"stargazers_count\": 11, \"topics\": [\"air-purifier\", \"air-quality\", \"air-quality-sensor\", \"mila\"], \"last_fetched\": 1656859373.003696, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"233289477\": {\"repository_manifest\": {\"name\": \"Greenely Sensors\", \"render_readme\": true, \"country\": [\"SE\"]}, \"authors\": [\"@linsvensson\"], \"category\": \"integration\", \"description\": \"Custom component to get usage data and prices from Greenely for Home Assistant\", \"domain\": \"greenely\", \"etag_repository\": \"W/\\\"361fb12996d11ef9f14eebd370e743df55332432a39e0651d0deca891d43d908\\\"\", \"full_name\": \"linsvensson/sensor.greenely\", \"last_updated\": \"2022-07-01T20:39:53Z\", \"stargazers_count\": 30, \"topics\": [\"home-assistant-sensor\"], \"last_fetched\": 1656859275.008817, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"442594482\": {\"repository_manifest\": {\"name\": \"Kontomierz sensor\", \"country\": \"PL\", \"render_readme\": true}, \"category\": \"integration\", \"description\": \"A sensor that integrates all your bank balance gathered in kontomierz app\", \"domain\": \"kontomierz_sensor\", \"etag_repository\": \"W/\\\"636e5ec183f353225523101f4c9418f6c0248933c5611847827b5495690a3dcb\\\"\", \"full_name\": \"pawelhulek/kontomierz-sensor\", \"last_updated\": \"2022-03-10T06:49:41Z\", \"stargazers_count\": 3, \"topics\": [\"finance\", \"financial-analysis\", \"fintech\", \"kontomierz\"], \"last_fetched\": 1656859323.738356, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"463623003\": {\"repository_manifest\": {\"name\": \"Rainforest EMU-2\", \"homeassistant\": \"2021.8.0\", \"render_readme\": \"true\"}, \"authors\": [\"@ryanwinter\"], \"category\": \"integration\", \"description\": \"Intergration for the Rainforest EMU-2 energy monitor\", \"domain\": \"rainforest_emu_2\", \"etag_repository\": \"W/\\\"cf9f125fd5bfad7449751073168d8472a577fad2769446f59a99857aea022721\\\"\", \"full_name\": \"ryanwinter/hass-rainforest-emu-2\", \"last_updated\": \"2022-05-17T04:23:29Z\", \"stargazers_count\": 11, \"topics\": [\"energy\"], \"last_fetched\": 1656859369.98729, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"472497355\": {\"repository_manifest\": {\"name\": \"Energi Data Service\", \"render_readme\": true, \"homeassistant\": \"2022.3.0\", \"zip_release\": true, \"filename\": \"energidataservice.zip\"}, \"authors\": [\"@MTrab\"], \"category\": \"integration\", \"description\": \"Fetches spot prices from Energi Data Service\", \"domain\": \"energidataservice\", \"downloads\": 164, \"etag_repository\": \"W/\\\"c88ee73443da06b4a30e1c4e06246547a424c967e78943b09ae2d733b69079aa\\\"\", \"full_name\": \"MTrab/energidataservice\", \"last_updated\": \"2022-06-30T12:51:37Z\", \"stargazers_count\": 23, \"topics\": [\"energi\", \"spotprice\", \"statistics\"], \"last_fetched\": 1656859305.835466, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"198794376\": {\"repository_manifest\": {\"name\": \"Met.no Nowcast\", \"render_readme\": true, \"zip_release\": true, \"filename\": \"metnowcast.zip\"}, \"authors\": [\"@toringer\"], \"category\": \"integration\", \"description\": \"Met.no Nowcast component for Home Assistant\", \"domain\": \"metnowcast\", \"downloads\": 262, \"etag_repository\": \"W/\\\"a496eb2f55d082580849d0a078bd09c5d59e8e5979dba9c5e7e63cc63c6add3d\\\"\", \"full_name\": \"toringer/home-assistant-metnowcast\", \"last_updated\": \"2022-03-17T20:42:49Z\", \"stargazers_count\": 4, \"topics\": [\"metno\", \"nowcast\", \"nowcasting-precipitation\"], \"last_fetched\": 1653733616.503787, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"336798340\": {\"repository_manifest\": {\"name\": \"TrueNAS\", \"homeassistant\": \"2022.2.0\", \"zip_release\": true, \"filename\": \"truenas.zip\"}, \"authors\": [\"@tomaae\"], \"category\": \"integration\", \"description\": \"TrueNAS integration for Home Assistant \", \"domain\": \"truenas\", \"downloads\": 1152, \"etag_repository\": \"W/\\\"cb5dab26577376a2bf95985c87eab1e95c6195b1ff25baac8b25baead92830e9\\\"\", \"full_name\": \"tomaae/homeassistant-truenas\", \"last_updated\": \"2022-06-22T08:17:47Z\", \"stargazers_count\": 28, \"topics\": [\"homeassistant-custom-component\", \"truenas\"], \"last_fetched\": 1657362972.047015, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"481763130\": {\"repository_manifest\": {\"name\": \"Generic Water Heater\", \"hacs\": \"1.6.0\", \"homeassistant\": \"2021.12\", \"render_readme\": true}, \"authors\": [\"@dgomes\"], \"category\": \"integration\", \"description\": \"Home Assistant Custom Component - Generic Water Heater\", \"domain\": \"generic_water_heater\", \"etag_repository\": \"W/\\\"29cc66e1ebe8b6cb71fcfd0edf8de0a2c5ad1aabeb27727b499131270044640b\\\"\", \"full_name\": \"dgomes/ha_generic_water_heater\", \"last_updated\": \"2022-06-09T21:56:13Z\", \"stargazers_count\": 3, \"topics\": [\"home-assistant-integration\"], \"last_fetched\": 1656859143.902011, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"483269510\": {\"repository_manifest\": {\"name\": \"OilFox Sensor\", \"render_readme\": true}, \"authors\": [\"@chises\"], \"category\": \"integration\", \"description\": \"HomeAssistant Sensor for Oilfox \", \"domain\": \"oilfox\", \"etag_repository\": \"W/\\\"af5dc5e068a7b74f34b9faf8a97f56fce651111e6b9205c1fb260daa5449806b\\\"\", \"full_name\": \"chises/ha-oilfox\", \"last_updated\": \"2022-04-26T14:59:23Z\", \"stargazers_count\": 2, \"topics\": [\"homeassistant-custom-component\", \"oiflox\"], \"last_fetched\": 1657362665.131688, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"485895021\": {\"repository_manifest\": {\"name\": \"Blueair Filters\", \"render_readme\": true, \"country\": [\"US\"], \"homeassistant\": \"2021.10.0b0\"}, \"authors\": [\"@dahlb\"], \"category\": \"integration\", \"description\": \"Home Assistant Integration for Blueair Class Filters\", \"domain\": \"ha_blueair\", \"etag_repository\": \"W/\\\"aa342ef91a46167d2055cdaf295261a292ec53e62a8c4bdb72d02e89da6bee05\\\"\", \"full_name\": \"dahlb/ha_blueair\", \"topics\": [\"blueair\", \"hassio-integration\", \"python3\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"341046872\": {\"repository_manifest\": {\"name\": \"BlueAir Integration\"}, \"authors\": [\"@aijayadams\"], \"category\": \"integration\", \"description\": \"BlueAir sensor integration for HomeAssistant\", \"domain\": \"blueair\", \"etag_repository\": \"W/\\\"f0287a50ef71b93dac70d3b61c958b2f502ca2ccb36d64ffb2eb1a8c33f265e4\\\"\", \"full_name\": \"aijayadams/hass-blueair\", \"stargazers_count\": 16, \"topics\": [\"blueair\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"485971293\": {\"repository_manifest\": {\"name\": \"Super Soco Custom\", \"hacs\": \"1.6.0\", \"homeassistant\": \"2022.3.0\", \"render_readme\": true}, \"authors\": [\"@Drakhart\"], \"category\": \"integration\", \"description\": \"Custom component for integrating your Super Soco motorcycle into Home Assistant. It provides meaningful data like power status, battery percentage, location and a lot more.\", \"domain\": \"super_soco_custom\", \"etag_repository\": \"W/\\\"3a2da244ad139bb995848caad4e9dced2c20c47582752a302912c72968dce9fa\\\"\", \"full_name\": \"drakhart/ha-super-soco-custom\", \"last_updated\": \"2022-06-21T23:10:51Z\", \"stargazers_count\": 8, \"topics\": [\"super-soco\"], \"last_fetched\": 1656859153.336235, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"454859084\": {\"repository_manifest\": {\"name\": \"Home Connect Alt\", \"hacs\": \"1.6.0\", \"homeassistant\": \"2021.12.0b0\"}, \"authors\": [\"@ekutner\"], \"category\": \"integration\", \"description\": \"Alternative (and improved) Home Connect integration for Home Assistant\", \"domain\": \"home_connect_alt\", \"etag_repository\": \"W/\\\"b7ac2a5df953d66205c55452e92e6dc3ee79e70b9a8cb4334fdac0c1da84737e\\\"\", \"full_name\": \"ekutner/home-connect-hass\", \"last_updated\": \"2022-07-01T10:14:11Z\", \"stargazers_count\": 29, \"topics\": [\"home-assistant-component\", \"home-assistant-integration\", \"home-connect\", \"homeconnect\"], \"last_fetched\": 1657362730.323017, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"490422137\": {\"repository_manifest\": {\"name\": \"IPCamLive\", \"homeassistant\": \"2022.5.3\"}, \"authors\": [\"@ddanssaert\"], \"category\": \"integration\", \"description\": \"IPCamLive integration for Home Assistant\", \"domain\": \"ipcamlive\", \"etag_repository\": \"W/\\\"0874376a9e7332e395773befd9feabd5641a6673526d86364a9b1535920c9995\\\"\", \"full_name\": \"ddanssaert/home-assistant-ipcamlive\", \"topics\": [\"ipcamera\", \"ipcamlive\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"373750934\": {\"repository_manifest\": {\"name\": \"Taipower Bimonthly Energy Cost\", \"render_readme\": true, \"homeassistant\": \"2022.4.1\", \"country\": [\"TW\"]}, \"authors\": [\"@cnstudio\", \"@tsunglung\"], \"category\": \"integration\", \"description\": \"Calculate Taipower (Taiwan Power Company) bi-monthly bill amount from kWh sensor on Home Assistant.\", \"domain\": \"taipower_bimonthly_cost\", \"etag_repository\": \"W/\\\"5f930edea90b8b3b89e283184609fe9476fcabe3c5c6d9df20bbfd9410d4a1b9\\\"\", \"full_name\": \"cnstudio/Taipower-Bimonthly-Energy-Cost-homeassistant\", \"last_updated\": \"2022-07-08T09:22:23Z\", \"stargazers_count\": 37, \"topics\": [\"bill\", \"bimonthly\", \"power\", \"taipower\"], \"last_fetched\": 1657362670.662628, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"483187645\": {\"repository_manifest\": {\"name\": \"Microsoft Graph\", \"country\": \"GB\"}, \"authors\": [\"@jlweston\", \"@geoffreylagaisse\"], \"category\": \"integration\", \"description\": \"Microsoft Graph API Presence Integration for Home Assistant\", \"domain\": \"microsoft_graph\", \"etag_repository\": \"W/\\\"cf73cf49d47deb9ecbfc91e117e541b9212de431806e5e8fab5b981b40acf257\\\"\", \"full_name\": \"geoffreylagaisse/Hass-Microsoft-Graph\", \"last_updated\": \"2022-05-14T07:59:58Z\", \"stargazers_count\": 15, \"topics\": [\"custom\", \"graphapi\"], \"last_fetched\": 1657362752.351104, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"471000066\": {\"repository_manifest\": {\"name\": \"Peaqev ev-Charging\", \"homeassistant\": \"2022.4.5\", \"country\": [\"SE\", \"BE\", \"NO\"], \"zip_release\": true, \"filename\": \"peaqev.zip\", \"render_readme\": true}, \"authors\": [\"@elden1337\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component to help ev-chargers stay below peak hourly energy levels.\", \"domain\": \"peaqev\", \"etag_repository\": \"W/\\\"0dec12d3cb73b76b0da41219330341f11a0c5cfd91da50cd7c96ab06fa150c17\\\"\", \"full_name\": \"elden1337/hass-peaq\", \"last_updated\": \"2022-07-09T10:27:36Z\", \"stargazers_count\": 22, \"topics\": [\"chargeamps\", \"easee\", \"ev-charging\", \"peak-shaving\", \"smart-pricing\"], \"last_fetched\": 1657362735.490397, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"461802716\": {\"repository_manifest\": {\"name\": \"Skolmat Integration\", \"country\": [\"SE\"], \"render_readme\": true}, \"authors\": [\"@kaptensanders\"], \"category\": \"integration\", \"description\": \"Skolmat Home Assistant custom component for the food menu in Swedish schools\", \"domain\": \"skolmat\", \"etag_repository\": \"W/\\\"12e9ba01b3af3709e77c5b1255ff5d6371cd97867cc8217be4eac8e9a1a66004\\\"\", \"full_name\": \"Kaptensanders/skolmat\", \"last_updated\": \"2022-05-09T21:01:10Z\", \"stargazers_count\": 2, \"topics\": [\"food\", \"food-menu\", \"school\", \"skola\"], \"last_fetched\": 1656859245.529539, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"437278224\": {\"repository_manifest\": {\"name\": \"Dell Printer\", \"render_readme\": true}, \"authors\": [\"@kongo09\"], \"category\": \"integration\", \"description\": \"Support DELL printers in Home Assistant\", \"domain\": \"dell_printer\", \"etag_repository\": \"W/\\\"1a12f78f919172a32e72ee67e66d7b52cdcb6a196eb86c33163fe7ee2a363de6\\\"\", \"full_name\": \"kongo09/hass-dell-printer\", \"last_updated\": \"2022-06-26T17:26:42Z\", \"stargazers_count\": 3, \"topics\": [\"dell\", \"printer\"], \"last_fetched\": 1656859254.530698, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"375838748\": {\"repository_manifest\": {\"name\": \"Selve NG\"}, \"authors\": [\"@Kannix2005\"], \"category\": \"integration\", \"description\": \"Home Assistant Custom component to manage Selve devices\", \"domain\": \"selve\", \"etag_repository\": \"W/\\\"ec40d874d496822d5e05507f0579479e544d94b29ee7ebbaf3f070b9088c0633\\\"\", \"full_name\": \"Kannix2005/homeassistant-selve\", \"topics\": [\"selve\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"485281791\": {\"repository_manifest\": {\"name\": \"HASS.Agent MediaPlayer\", \"render_readme\": true}, \"authors\": [\"@LAB02-Admin\"], \"category\": \"integration\", \"description\": \"HASS.Agent MediaPlayer integrations. Adds TTS and the ability to control local media to HASS.Agent - a Windows based client for Home Assistant.\", \"domain\": \"hass_agent_mediaplayer\", \"etag_repository\": \"W/\\\"a690de734e393335ce70ffc3f350dfae04b4da6bc6ec80ff174006841c26f291\\\"\", \"full_name\": \"LAB02-Research/HASS.Agent-MediaPlayer\", \"last_updated\": \"2022-06-27T15:08:39Z\", \"stargazers_count\": 5, \"topics\": [\"mediaplayer\"], \"last_fetched\": 1657362827.892656, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"480112024\": {\"repository_manifest\": {\"name\": \"Sj\\u00f6fartsverket ViVa\"}, \"authors\": [\"@patrickribbing\"], \"category\": \"integration\", \"description\": \"Get wind information from the Swedish Sj\\u00f6farsverket's ViVa service.\", \"domain\": \"sjofartsverket_viva\", \"etag_repository\": \"W/\\\"06aac2da110791dfd17697ba432e1a79fd3f9a4527607cc4161f9221e49cef4e\\\"\", \"full_name\": \"patrickribbing/sjofartsverket_viva-component\", \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"479221839\": {\"repository_manifest\": {\"hacs\": \"1.6.0\", \"name\": \"Swatch\", \"homeassistant\": \"2021.12.0b2\"}, \"authors\": [\"@NickM-27\"], \"category\": \"integration\", \"description\": \"HomeAssistant Integration For Swatch: Color detection in images to capture presense of known objects.\", \"domain\": \"swatch\", \"etag_repository\": \"W/\\\"61a8f6d92ebd3eee70aa0424dacf5a87188fdd6a2415a925c47834583437828e\\\"\", \"full_name\": \"NickM-27/swatch-hass-integration\", \"last_updated\": \"2022-05-26T14:05:28Z\", \"stargazers_count\": 6, \"topics\": [\"ai\", \"camera\", \"home-assistant-integration\", \"object-detection\", \"opencv\"], \"last_fetched\": 1657362877.4308, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"480127478\": {\"repository_manifest\": {\"name\": \"ecotrend_ista\", \"country\": \"DE\", \"render_readme\": true, \"homeassistant\": \"2022.4.1\", \"hacs\": \"1.25.1\"}, \"authors\": [\"@Ludy87\"], \"category\": \"integration\", \"description\": \"ecotrend-ista Home Assistant Integration\", \"domain\": \"ecotrend_ista\", \"etag_repository\": \"W/\\\"af2fd5ad8cb6fec5d0bb8c2e920ece313abc3cefe343cbbfd07d4f1060e3e5e4\\\"\", \"full_name\": \"Ludy87/ecotrend-ista\", \"last_updated\": \"2022-06-14T07:42:57Z\", \"stargazers_count\": 5, \"topics\": [\"ecotrend\", \"hassio-integration\", \"hassos\", \"home-assistant-component\", \"ista\"], \"last_fetched\": 1656859281.088429, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"471478227\": {\"repository_manifest\": {\"name\": \"ChargePoint\", \"render_readme\": true}, \"authors\": [\"@mbillow\"], \"category\": \"integration\", \"description\": \"Home Assistant ChargePoint EV Charger Integration\", \"domain\": \"chargepoint\", \"etag_repository\": \"W/\\\"44bcff88207c75ceebd518b86c4244d76a81ac431f88f66b34a4c4f3ae846888\\\"\", \"full_name\": \"mbillow/ha-chargepoint\", \"last_updated\": \"2022-06-18T22:25:57Z\", \"stargazers_count\": 9, \"topics\": [\"chargepoint\", \"hassio-integration\"], \"last_fetched\": 1657362855.079359, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"480281490\": {\"repository_manifest\": {\"name\": \"Lektrico Charging Station\"}, \"authors\": [\"@mtarjoianu\"], \"category\": \"integration\", \"description\": \"Manage your Lektrico EV Charger\", \"domain\": \"lektrico_custom\", \"etag_repository\": \"W/\\\"9f4cca3700dc55b39be1a69ab665a88bdcaed10a48e308e9fce30a8dbf3aebb1\\\"\", \"full_name\": \"mtarjoianu/ha_lektrico\", \"last_updated\": \"2022-06-02T07:26:51Z\", \"stargazers_count\": 2, \"topics\": [\"lektrico\"], \"last_fetched\": 1656859303.84849, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"443905243\": {\"repository_manifest\": {\"name\": \"Xplora\\u00ae Watch\", \"country\": \"DE\", \"render_readme\": true, \"homeassistant\": \"2022.5.2\", \"hacs\": \"1.25.1\"}, \"authors\": [\"@Ludy87\"], \"category\": \"integration\", \"description\": \"Xplora\\u00ae Watch Home Assistant Integration\", \"domain\": \"xplora_watch\", \"etag_repository\": \"W/\\\"904e8d16f27ba5906d525851a05e2410b2ccbc787a09a1c0802c9f1bfe7f7824\\\"\", \"full_name\": \"Ludy87/xplora_watch\", \"last_updated\": \"2022-07-03T09:11:59Z\", \"stargazers_count\": 16, \"topics\": [\"devicetracker\", \"hassio-addons\", \"hassio-integration\", \"hassos\", \"homeassistant-custom-component\", \"notify\", \"watch\", \"xplora\", \"xplora-watch\"], \"last_fetched\": 1657362844.527977, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"476357279\": {\"repository_manifest\": {\"name\": \"Music Assistant\", \"render_readme\": true, \"zip_release\": true, \"filename\": \"mass.zip\", \"hide_default_branch\": true, \"homeassistant\": \"2022.6.0\"}, \"authors\": [\"@marcelveldt\"], \"category\": \"integration\", \"description\": \"Turn your Home Assistant instance into a jukebox, hassle free streaming of your favorite media to Home Assistant media players.\", \"domain\": \"mass\", \"downloads\": 2791, \"etag_repository\": \"W/\\\"bd3ec45b19202d169ce3d4abb91d9ec33b5171dfc0c5c199b7d0ef5a64358c09\\\"\", \"full_name\": \"music-assistant/hass-music-assistant\", \"last_updated\": \"2022-07-09T00:06:39Z\", \"stargazers_count\": 217, \"topics\": [\"music-library\", \"music-player\"], \"last_fetched\": 1657362868.909451, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"459336824\": {\"repository_manifest\": {\"name\": \"hass-lacrosseview\", \"country\": \"US\", \"render_readme\": true}, \"authors\": [\"@regulad\"], \"category\": \"integration\", \"description\": \"La Crosse view for Home Assistant\", \"domain\": \"lacrosseview\", \"etag_repository\": \"W/\\\"b479e936f67deff0588c0db369c7f363b3258b1939fcfa0e1f2d10e42b3d3b04\\\"\", \"full_name\": \"regulad/hass-lacrosseview\", \"last_updated\": \"2022-06-07T07:43:13Z\", \"stargazers_count\": 4, \"topics\": [\"home-assistant-config\", \"lacrosseview\"], \"last_fetched\": 1656859346.953534, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"481715988\": {\"repository_manifest\": {\"name\": \"Kia Connected Services\", \"country\": \"NL\"}, \"authors\": [\"@PimDoos\"], \"category\": \"integration\", \"description\": \"Home Assistant Custom Component: MijnKia Connected Services\", \"domain\": \"kia_connect\", \"etag_repository\": \"W/\\\"787e998e8ae321a6f5df71cc3de019c6931039a75907ba91a85bf90fde958ded\\\"\", \"full_name\": \"PimDoos/kia_connect\", \"last_updated\": \"2022-05-24T15:33:26Z\", \"stargazers_count\": 3, \"topics\": [\"api-wrapper\", \"connected-vehicle\", \"kia\"], \"last_fetched\": 1656859330.767286, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"360213486\": {\"repository_manifest\": {\"name\": \"yi-hack Home Assistant integration\", \"render_readme\": true}, \"authors\": [\"@roleoroleo\"], \"category\": \"integration\", \"description\": \"Home Assistant custom integration for Yi cameras: yi-hack-MStar, yi-hack-Allwinner, yi-hack-Allwinner-v2, yi-hack-v5 and sonoff-hack\", \"domain\": \"yi_hack\", \"etag_repository\": \"W/\\\"bd1c700fbc816f4129e00dd70e477eec7ac3ccf01ae4372b07774c761e5779a8\\\"\", \"full_name\": \"roleoroleo/yi-hack_ha_integration\", \"last_updated\": \"2022-07-03T10:14:53Z\", \"stargazers_count\": 106, \"topics\": [\"camera\", \"custom\", \"firmware\", \"hack\", \"rtsp\", \"yi\"], \"last_fetched\": 1656859357.06049, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"488091347\": {\"repository_manifest\": {\"name\": \"2minersInfo\", \"render_readme\": true, \"homeassistant\": \"0.100.0\"}, \"authors\": [\"@thomasprior\"], \"category\": \"integration\", \"description\": \"Provides data from 2miners.com on a specified miner.\", \"domain\": \"2minersinfo\", \"etag_repository\": \"W/\\\"87acf3e9d241b1554b351e07e082b83183a137946f6816b19f1d812d951d273d\\\"\", \"full_name\": \"ThomasPrior/2minersInfo\", \"last_updated\": \"2022-05-24T18:49:52Z\", \"stargazers_count\": 1, \"topics\": [\"2miners\", \"2miners-api\", \"miner\", \"statistics\"], \"last_fetched\": 1656859406.543849, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"491303842\": {\"repository_manifest\": {\"name\": \"Datetime Card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"A minimalistic card for Home Assistant Lovelace UI which shows how many days it has been between any input_datetime and today.\", \"downloads\": 1008, \"etag_repository\": \"W/\\\"8b1575bf2fd95ccbd10ee68426bc31b8e993b5a17013ec02d815fd45481a8cca\\\"\", \"full_name\": \"a-p-z/datetime-card\", \"last_updated\": \"2022-05-28T19:23:20Z\", \"stargazers_count\": 10, \"topics\": [\"lovelace-custom-card\", \"svelte\"], \"last_fetched\": 1656859492.131467, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"434912125\": {\"repository_manifest\": {\"name\": \"Load Shedding\", \"render_readme\": true, \"country\": \"ZA\", \"homeassistant\": \"2022.4.6\"}, \"authors\": [\"@wernerhp\"], \"category\": \"integration\", \"description\": \"A Home Assistant integration to track your load schedding schedule.\", \"domain\": \"load_shedding\", \"etag_repository\": \"W/\\\"76c29b24e9b3941ed4a25a9c50585e20d500c4bf106f3ee188d3e62abebb5130\\\"\", \"full_name\": \"wernerhp/ha_integration_load_shedding\", \"last_updated\": \"2022-07-07T19:52:15Z\", \"stargazers_count\": 19, \"topics\": [\"eskom\", \"load-shedding\"], \"last_fetched\": 1657362984.807853, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"484708274\": {\"repository_manifest\": {\"name\": \"AsusRouter\", \"homeassistant\": \"2022.4.0\"}, \"authors\": [\"@vaskivskyi\"], \"category\": \"integration\", \"description\": \"Monitor and control your Asus router from Home Assistant\", \"domain\": \"asusrouter\", \"etag_repository\": \"W/\\\"d4a7d9eb3610a501c94318ee24c8304f9b3ba14454d6a4f6d1ccfc0b06b00c82\\\"\", \"full_name\": \"Vaskivskyi/ha-asusrouter\", \"last_updated\": \"2022-07-03T16:56:30Z\", \"stargazers_count\": 30, \"topics\": [\"asus\", \"router\"], \"last_fetched\": 1657362984.667571, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"430818561\": {\"repository_manifest\": {\"name\": \"Tekmar Gateway 482\", \"homeassistant\": \"2022.5.0\"}, \"authors\": [\"@WillCodeForCats\"], \"category\": \"integration\", \"description\": \"Home Assistant integration for the Tekmar Gateway 482\", \"domain\": \"tekmar_482\", \"etag_repository\": \"W/\\\"2e09239b92d690e09728ad6dd73bfb30dba84c2af85c3a967ff5149345bbdac1\\\"\", \"full_name\": \"WillCodeForCats/tekmar-482\", \"last_updated\": \"2022-07-04T15:52:49Z\", \"stargazers_count\": 1, \"topics\": [\"tekmar\"], \"last_fetched\": 1657362984.97091, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"489295753\": {\"repository_manifest\": {\"name\": \"Navbar Position\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Moves the Home Assistant dashboard navigation bar to the bottom of the screen\", \"etag_repository\": \"W/\\\"258b42d1f64be01082149189f1ca261ce254887da23cce0ec24f9f0763d7dbd2\\\"\", \"full_name\": \"javawizard/ha-navbar-position\", \"stargazers_count\": 2, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"457767453\": {\"repository_manifest\": {\"name\": \"Skolmat Card\", \"filename\": \"skolmat-card.js\", \"content_in_root\": true, \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Home Assistant Lovelace card to display the food menu in Swedish schools.\", \"etag_repository\": \"W/\\\"88349df85b85063f04d68b534eeba7f021b42605bd6ce964adbafdcc03e157d7\\\"\", \"full_name\": \"Kaptensanders/skolmat-card\", \"stargazers_count\": 3, \"topics\": [\"home-assistant-component\", \"lovelace-card\", \"lovelace-custom-card\", \"skola\", \"skollunch\", \"skolmat\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"487680971\": {\"repository_manifest\": {\"name\": \"Weather Radar Card\", \"render_readme\": true, \"filename\": \"weather-radar-card.js\"}, \"category\": \"plugin\", \"description\": \"A rain radar card using the tiled images from RainViewer\", \"downloads\": 2851, \"etag_repository\": \"W/\\\"470bbe188aa8e176b352799dd46b61f4fcd1630fe52a8d7c55a9d8840a3329d3\\\"\", \"full_name\": \"Makin-Things/weather-radar-card\", \"last_updated\": \"2022-07-03T02:11:30Z\", \"stargazers_count\": 28, \"topics\": [\"frontend\", \"home-assistant-config\", \"meteorology\", \"radar\", \"rainviewer\", \"weather\"], \"last_fetched\": 1657362511.244161, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"267558148\": {\"repository_manifest\": {\"name\": \"custom-ui\", \"homeassistant\": \"2021.6.0\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Adapted Custom-ui for HA 110+ / HA 2021.6\", \"downloads\": 1915, \"etag_repository\": \"W/\\\"9edd5d0744ec68fd7cf2ec8f02bb464d187b226130fcd7f45d25fe82b52d63c8\\\"\", \"full_name\": \"Mariusthvdb/custom-ui\", \"last_updated\": \"2022-05-23T07:44:43Z\", \"stargazers_count\": 99, \"topics\": [\"customization\", \"icon-color\", \"more-info\", \"templates\"], \"last_fetched\": 1656859594.596624, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"489457357\": {\"repository_manifest\": {\"name\": \"Minimalistic Area Card\", \"render_readme\": true, \"filename\": \"minimalistic-area-card.js\"}, \"category\": \"plugin\", \"description\": \"A minimalistic area card with sensors and buttons.\", \"downloads\": 1874, \"etag_repository\": \"W/\\\"80eba7395deb704c4f6459f5725aa497f2aa46275b6f9f679549587a8940df23\\\"\", \"full_name\": \"junalmeida/homeassistant-minimalistic-area-card\", \"last_updated\": \"2022-06-09T15:06:55Z\", \"stargazers_count\": 16, \"topics\": [\"area-card\"], \"last_fetched\": 1657362496.975132, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"455846088\": {\"repository_manifest\": {\"name\": \"Sankey Chart Card\", \"render_readme\": true, \"filename\": \"ha-sankey-chart.js\"}, \"category\": \"plugin\", \"description\": \"A Home Assistant lovelace card to display a sankey chart. For example for power consumption\", \"downloads\": 500, \"etag_repository\": \"W/\\\"064b6b51fbce945fdcc263e01c04c3f1e75cbde78a666a5c4a9573e0880e7bfb\\\"\", \"full_name\": \"MindFreeze/ha-sankey-chart\", \"last_updated\": \"2022-07-03T13:10:05Z\", \"stargazers_count\": 56, \"topics\": [\"energy-consumption\", \"lovelace-card\"], \"last_fetched\": 1657362517.714985, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"491465538\": {\"repository_manifest\": {\"name\": \"custom-icons\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"Several custom made and legacy icons, and icons collected all over the internet in 1 set, UI selectable.\", \"downloads\": 2041, \"etag_repository\": \"W/\\\"cc8128e7bd9d0d26a866ab008f448da208345a608557ea82d79d4b2ba4fad244\\\"\", \"full_name\": \"Mariusthvdb/custom-icons\", \"last_updated\": \"2022-05-23T07:44:07Z\", \"stargazers_count\": 11, \"topics\": [\"custom\", \"customization\", \"icons\", \"iphone\", \"light\", \"shutter\", \"vacuum\"], \"last_fetched\": 1657362512.224743, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"447474061\": {\"repository_manifest\": {\"name\": \"Irrigation Unlimited Card\", \"render_readme\": true, \"filename\": \"irrigation-unlimited-card.js\"}, \"category\": \"plugin\", \"description\": \"A companion card for the Irrigation Unlimited integration\", \"downloads\": 266, \"etag_repository\": \"W/\\\"04c2589acd779fa6ebcad54b08bbd7f94acb50493a14b5f366c24aa46954b110\\\"\", \"full_name\": \"rgc99/irrigation-unlimited-card\", \"stargazers_count\": 2, \"topics\": [\"irrigation\", \"irrigation-controller\", \"sprinkler-controller\", \"watering\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"484538222\": {\"repository_manifest\": {\"name\": \"Power Flow Card\", \"render_readme\": true, \"homeassistant\": \"2021.8.0\"}, \"category\": \"plugin\", \"description\": \"A power distribution card inspired by the official Energy Distribution card for Home Assistant\", \"downloads\": 716, \"etag_repository\": \"W/\\\"0a6646d6e476c8518fd4a6136fd346791a2b1039b8163eb5ce08e439750810ae\\\"\", \"full_name\": \"ulic75/power-flow-card\", \"last_updated\": \"2022-07-05T23:06:25Z\", \"stargazers_count\": 26, \"topics\": [\"dashboard\"], \"last_fetched\": 1657362556.738811, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"484333657\": {\"repository_manifest\": {\"name\": \"Lovelace Wallpanel Screensaver\", \"render_readme\": true, \"zip_release\": true, \"filename\": \"wallpanel-screensaver.js\"}, \"category\": \"plugin\", \"description\": \"Wall panel mode for your Home Assistant Lovelace dashboard with more focus on screensaver. Configurable extension which features a fullscreen kiosk mode, image and weather-clock screensaver, screen wake lock and the ability to hide side and top bar.\", \"downloads\": 1925, \"etag_repository\": \"W/\\\"52979a04c5cf99a90b10e500aa1aedfbfd262cd69ca67b68c2efc756da2ceb42\\\"\", \"full_name\": \"Shreyas-R/lovelace-wallpanel-screensaver\", \"last_updated\": \"2022-05-24T20:31:26Z\", \"stargazers_count\": 13, \"topics\": [\"configurable\", \"css\", \"fullscreen\", \"hide-side-bar\", \"hide-top-bar\", \"javascript\", \"kiosk\", \"photo-screensaver\", \"screensaver\", \"wallclock\", \"wallpanel\", \"weather\"], \"last_fetched\": 1657362540.503752, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"486045869\": {\"repository_manifest\": {\"name\": \"Metrology - Metro + Fluent + Windows Themes - by mmak.es\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 Give your Home Assistant a modern and clean facelift. \\ud83d\\udfe5\\ud83d\\udfe7\\ud83d\\udfe9\\ud83d\\udfe6\\ud83d\\udfea 24 Variations with 2 Styles + 6 Colors (Magenta Red / Orange / Green / Blue / Purple) + \\ud83c\\udf1e Light and \\ud83c\\udf1a Dark modes included. Based on Metro and Fluent UI Design Systems from Microsoft Windows.\", \"etag_repository\": \"W/\\\"bbbbefa091163e2bb8534f262176d4e9f6dda364ad59acda903900a3abb76496\\\"\", \"full_name\": \"Madelena/Metrology-for-Hass\", \"last_updated\": \"2022-07-07T05:41:59Z\", \"stargazers_count\": 161, \"topics\": [\"home-assistant-config\", \"lovelace-theme\"], \"last_fetched\": 1657362594.373889, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"480992848\": {\"repository_manifest\": {\"name\": \"macOS Theme - Based on the system-wide light and dark mode UI\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"\\ud83c\\udfa8 By JuanMTech -- Theme based on the macOS system-wide light and dark mode interface\", \"etag_repository\": \"W/\\\"55847867320e2a7458638f8fb775de2d38ce44f9a6ac45feba30f908c4ab90db\\\"\", \"full_name\": \"JuanMTech/macOS-Theme\", \"last_updated\": \"2022-05-12T04:26:17Z\", \"stargazers_count\": 16, \"topics\": [\"darktheme\", \"lighttheme\"], \"last_fetched\": 1657362589.694592, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"199718799\": {\"repository_manifest\": {\"name\": \"Escea Fires\"}, \"authors\": [\"@snikch\"], \"category\": \"integration\", \"description\": \"\\ud83c\\udfe1Home Assistant Custom Component for Escea Fires \\ud83d\\udd25\", \"domain\": \"escea\", \"etag_repository\": \"W/\\\"e172e6a6d4f9196ab8061ffa1afb5b3df0d3c6adae9343bddfef7727e0758962\\\"\", \"full_name\": \"snikch/climate.escea\", \"last_updated\": \"2022-05-28T03:05:48Z\", \"stargazers_count\": 8, \"topics\": [\"climate\", \"fireplace\"], \"last_fetched\": 1653733585.668934, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"125756318\": {\"repository_manifest\": {\"name\": \"BKK Stop Information\", \"country\": [\"HU\"], \"render_readme\": \"true\"}, \"authors\": [\"@amaximus\"], \"category\": \"integration\", \"description\": \"HomeAssistant custom component for Budapest public transportation\", \"domain\": \"bkk_stop\", \"etag_repository\": \"W/\\\"d81f447ef342788321f222b5cab65ed3d58af9cdfa9f9930a276a3857f6c79a0\\\"\", \"full_name\": \"amaximus/bkk_stop\", \"last_updated\": \"2022-07-06T17:02:01Z\", \"stargazers_count\": 14, \"topics\": [\"bkk\", \"budapest\", \"transportation\"], \"last_fetched\": 1657362619.69223, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"495607253\": {\"repository_manifest\": {\"name\": \"Nordnet investments API sensors\", \"render_readme\": true, \"country\": [\"DK\", \"NO\", \"SE\", \"FI\"]}, \"authors\": [\"@jippi\"], \"category\": \"integration\", \"description\": \"Home Assistant + Nordnet API = awesome sensors with for your investments & holdings\", \"domain\": \"nordnet\", \"etag_repository\": \"W/\\\"2b6e71db146882594238df9ce1441c3349e7a6880d0bc0d0df09d0658405a994\\\"\", \"full_name\": \"jippi/hass-nordnet\", \"last_updated\": \"2022-05-29T09:42:20Z\", \"stargazers_count\": 4, \"topics\": [\"finance\", \"stock-market\", \"stocks\"], \"last_fetched\": 1656859229.024232, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"456340193\": {\"repository_manifest\": {\"name\": \"Innova 2.0 HVAC\", \"homeassistant\": \"2022.5.0\", \"country\": \"CA\"}, \"authors\": [\"@danielrivard\"], \"category\": \"integration\", \"description\": \"Home Assistant Integration for Innova 2.0 Heat Pump\", \"domain\": \"innova\", \"etag_repository\": \"W/\\\"644337d298e374498dbb6c3bd1710f3aff67cedc1bcc4a118b2ce9ff81ab0575\\\"\", \"full_name\": \"danielrivard/homeassistant-innova\", \"last_updated\": \"2022-06-23T11:04:10Z\", \"stargazers_count\": 7, \"topics\": [\"climate\", \"innova\", \"innovaenergie\"], \"last_fetched\": 1656859134.694151, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"410867791\": {\"repository_manifest\": {\"name\": \"Microsoft Edge TTS\", \"render_readme\": true}, \"category\": \"integration\", \"description\": \"\\ud83d\\udde3\\ufe0f Microsoft Edge TTS for Home Assistant, no need for app_key\", \"domain\": \"edge_tts\", \"etag_repository\": \"W/\\\"c72f9bf355053459c1bf0d4eb432ee043bc1dc87e384f058adf666e147cec0c7\\\"\", \"full_name\": \"hasscc/hass-edge-tts\", \"last_updated\": \"2022-07-05T13:06:24Z\", \"stargazers_count\": 114, \"topics\": [\"tts\"], \"last_fetched\": 1657362767.472674, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"497924778\": {\"repository_manifest\": {\"name\": \"elkbledom\", \"render_readme\": true}, \"authors\": [\"@dave-code-ruiz\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component for LED STRIP NAME ELK BLEDOM\", \"domain\": \"elkbledom\", \"etag_repository\": \"W/\\\"255e3ff1d790d92519ad381dfdd7f504ac3ada7607abba1ef245990d272ed825\\\"\", \"full_name\": \"dave-code-ruiz/elkbledom\", \"last_updated\": \"2022-06-22T06:00:03Z\", \"stargazers_count\": 4, \"topics\": [\"hacs-custom\", \"led-controller\", \"ledstrips\", \"light\"], \"last_fetched\": 1657362703.797944, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"482473793\": {\"repository_manifest\": {\"name\": \"Prix Carburant\", \"country\": \"FR\", \"render_readme\": true, \"homeassistant\": \"2022.5.0\"}, \"authors\": [\"@Aohzan\"], \"category\": \"integration\", \"description\": \"R\\u00e9cup\\u00e9ration des prix des stations en France\", \"domain\": \"prix_carburant\", \"etag_repository\": \"W/\\\"5ec40ba79edbc0fd0f4db595c5eeda06c3ac30ee044d0ced6feb59969f5f127b\\\"\", \"full_name\": \"Aohzan/hass-prixcarburant\", \"last_updated\": \"2022-06-30T06:29:50Z\", \"stargazers_count\": 6, \"topics\": [\"carburant\", \"gas\", \"price\"], \"last_fetched\": 1657362627.941174, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"503045365\": {\"repository_manifest\": {\"name\": \"Senertec Energy System\", \"render_readme\": true, \"homeassistant\": \"2021.11.0\"}, \"authors\": [\"@Kleinrotti\"], \"category\": \"integration\", \"description\": \"Home Assistant custom component integration for Senertec energy units.\", \"domain\": \"senertec\", \"etag_repository\": \"W/\\\"f3475eef51231521cf69ac62d3d40c672fc5d5076c5e80f5391145768677de3d\\\"\", \"full_name\": \"Kleinrotti/hass-senertec\", \"topics\": [\"senertec\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"501368149\": {\"repository_manifest\": {\"name\": \"Fuelprices DK\", \"country\": [\"DK\"], \"render_readme\": true}, \"authors\": [\"@J-Lindvig\"], \"category\": \"integration\", \"description\": \"Scraping of 5 types of fuel :fuelpump: from 8 different fuelcompanies in Denmark :denmark:.\", \"domain\": \"fuelprices_dk\", \"etag_repository\": \"W/\\\"3fb775a63b64e585c18a1fbc62301347409f1f6c65c7c657f61ebf71ed56c79a\\\"\", \"full_name\": \"J-Lindvig/Fuelprices_DK\", \"stargazers_count\": 4, \"topics\": [\"denmark\", \"economy\", \"fuel-prices\", \"scraping\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"499901994\": {\"repository_manifest\": {\"name\": \"Solarfocus eco manager-touch\", \"country\": [\"DE\", \"AT\", \"CH\"], \"homeassistant\": \"2021.12.8\", \"hacs\": \"1.18.0\", \"render_readme\": true}, \"authors\": [\"@lavermanjj\"], \"category\": \"integration\", \"description\": \"\\ud83c\\udfe1 Solarfocus eco manager touch integration for Home Assistant\", \"domain\": \"solarfocus\", \"etag_repository\": \"W/\\\"4e218eb7bfa24389fa0a10b409faff7b0845d510fc3235007ad825ff5067fdf9\\\"\", \"full_name\": \"LavermanJJ/home-assistant-solarfocus\", \"topics\": [\"home-assistant-component\", \"home-assistant-sensor\", \"solarfocus\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"488931467\": {\"repository_manifest\": {\"name\": \"BVG (Berlin Public Transport)\", \"hacs\": \"1.6.0\", \"country\": [\"DE\"], \"homeassistant\": \"0.118.0\"}, \"authors\": [\"@ryanbateman\"], \"category\": \"integration\", \"description\": \"A HomeAssistant / HACS integration of Berlin Public Transport (BVG) \", \"domain\": \"bvg_berlin_public_transport\", \"etag_repository\": \"W/\\\"986bcbbd7c9eece09b6702eccac16b7b6720db6d82920b7e8615dc1db82fb1ff\\\"\", \"full_name\": \"ryanbateman/bvg-sensor\", \"stargazers_count\": 5, \"topics\": [\"berlin\", \"bvg\", \"public-transport\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"282714722\": {\"repository_manifest\": {\"name\": \"Senec solar system sensor\", \"country\": [\"DE\"], \"homeassistant\": \"2021.12.8\", \"hacs\": \"1.18.0\", \"render_readme\": true}, \"authors\": [\"@mchwalisz\"], \"category\": \"integration\", \"description\": \"SENEC Battery integration for Home Assistant\", \"domain\": \"senec\", \"etag_repository\": \"W/\\\"324b6d7dca2feb87b0d4fca2b806c441613ce6287d942a849ecf11d375497e33\\\"\", \"full_name\": \"mchwalisz/home-assistant-senec\", \"stargazers_count\": 18, \"topics\": [\"home-assistant-component\", \"home-assistant-sensor\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"497322735\": {\"repository_manifest\": {\"name\": \"Plex recently added sensor\", \"render_readme\": true}, \"authors\": [\"@maykar\", \"@NemesisRE\"], \"category\": \"integration\", \"description\": \"\\u25b6\\ufe0f Plex component to feed Upcoming Media Card.\", \"domain\": \"plex_recently_added\", \"etag_repository\": \"W/\\\"f5e2b489b1c801a0e228bc839a703de2886716f36b66c9068900026177ee6b9a\\\"\", \"full_name\": \"NemesisRE/sensor.plex_recently_added\", \"last_updated\": \"2022-05-31T15:39:24Z\", \"stargazers_count\": 2, \"last_fetched\": 1657362872.788117, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"472077314\": {\"repository_manifest\": {\"name\": \"World's Air Quality Index\", \"render_readme\": true, \"country\": [\"GB\", \"US\", \"PL\"]}, \"authors\": [\"@pawkakol1\"], \"category\": \"integration\", \"description\": \"HACS World's Air Quality Index integration from waqi.info\", \"domain\": \"worlds_air_quality_index\", \"etag_repository\": \"W/\\\"c27e30e8e5575bd4709a22b84c81a329e1420846291bc3471c7386e4dfc719ed\\\"\", \"full_name\": \"pawkakol1/worlds-air-quality-index\", \"stargazers_count\": 7, \"topics\": [\"ha\", \"pollution\", \"waqi\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"492996183\": {\"repository_manifest\": {\"name\": \"Hue-Like Light Card\", \"render_readme\": true, \"filename\": \"hue-like-light-card.js\"}, \"category\": \"plugin\", \"description\": \"This card provides a Hue-like way to control your lights in Home Assistant.\", \"downloads\": 596, \"etag_repository\": \"W/\\\"2867e79127e1f0ab12e666a1ec797e3ef331444a4dfe4f4cbb98d073fa52ac4e\\\"\", \"full_name\": \"Gh61/lovelace-hue-like-light-card\", \"stargazers_count\": 3, \"topics\": [\"hue\", \"hue-lights-control\", \"light\", \"lovelace-card\", \"rgb-lights\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"498794033\": {\"repository_manifest\": {\"name\": \"Slider Button Card\", \"render_readme\": true, \"filename\": \"slider-button-card.js\"}, \"category\": \"plugin\", \"description\": \"A button card with integrated slider\", \"downloads\": 2411, \"etag_repository\": \"W/\\\"dee0ea9f258bfee13d194db7e512011328c07c24aff8cda98258fdc742f1d17d\\\"\", \"full_name\": \"custom-cards/slider-button-card\", \"last_updated\": \"2022-06-05T19:54:23Z\", \"stargazers_count\": 12, \"topics\": [\"button-card\", \"card\", \"lovelace-custom-card\", \"slider\"], \"last_fetched\": 1657362448.850129, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"496755553\": {\"repository_manifest\": {\"name\": \"Raspberry Pi 1-Wire via sysbus\", \"homeassistant\": \"2022.5.0\"}, \"authors\": [\"@thecode\"], \"category\": \"integration\", \"description\": \"Home Assistant 1-Wire via sysbus\", \"domain\": \"onewire_sysbus\", \"etag_repository\": \"W/\\\"fc124849cde0ab910940493b994ade18cf2039ad71fc7851ca10ec050efec5e1\\\"\", \"full_name\": \"thecode/ha-onewire-sysbus\", \"stargazers_count\": 7, \"topics\": [\"1-wire\", \"raspberry-pi\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"497829589\": {\"repository_manifest\": {\"name\": \"FR24 card\", \"render_readme\": true, \"homeassistant\": \"2022.6.0\"}, \"category\": \"plugin\", \"description\": \"Lovelace card for showing Dump1090 data from FR24 in Home Assistant\", \"etag_repository\": \"W/\\\"0b7bc967b48e4a1d76fea6b0b89b3be70e2f3492b46076d21d6169005302866f\\\"\", \"full_name\": \"fratsloos/fr24_card\", \"last_updated\": \"2022-07-08T06:31:16Z\", \"stargazers_count\": 5, \"topics\": [\"ads-b\", \"flightradar24\", \"lovelace-card\", \"mode-s\"], \"last_fetched\": 1657362473.780887, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"497322497\": {\"repository_manifest\": {\"name\": \"Lovelace Swipe Navigation\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"\\u2194\\ufe0f Swipe through Lovelace views on mobile.\", \"downloads\": 1286, \"etag_repository\": \"W/\\\"5df21e465111842509db51022e659285568c85287da9f3440717c46114aa652d\\\"\", \"full_name\": \"NemesisRE/lovelace-swipe-navigation\", \"last_updated\": \"2022-05-31T15:30:18Z\", \"stargazers_count\": 2, \"topics\": [\"customization\"], \"last_fetched\": 1657362521.169394, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"497319128\": {\"repository_manifest\": {\"name\": \"Kiosk Mode\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"\\ud83d\\ude48 Hides the Home Assistant header and/or sidebar\", \"downloads\": 2982, \"etag_repository\": \"W/\\\"d089d2ae0269875c6424f2ce9161325a09c3430502b3a52e180ed66bfb0647a4\\\"\", \"full_name\": \"NemesisRE/kiosk-mode\", \"last_updated\": \"2022-05-31T15:30:10Z\", \"stargazers_count\": 16, \"topics\": [\"customization\"], \"last_fetched\": 1657362518.806458, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"501725479\": {\"repository_manifest\": {\"name\": \"Home Assistant Swipe Navigation\", \"render_readme\": true, \"filename\": \"swipe-navigation.js\"}, \"category\": \"plugin\", \"description\": \"\\u2194\\ufe0f Swipe through Home Assistant Dashboard views on mobile.\", \"downloads\": 1884, \"etag_repository\": \"W/\\\"9a90581275edc44bc02cf343bd401700f4aed7b132bd0996bb6d277b17570afc\\\"\", \"full_name\": \"zanna-37/hass-swipe-navigation\", \"last_updated\": \"2022-06-20T15:15:00Z\", \"stargazers_count\": 22, \"topics\": [\"navigation\", \"swipe\"], \"last_fetched\": 1657362561.316295, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"356655356\": {\"repository_manifest\": {\"name\": \"wienerlinien\", \"render_readme\": true, \"hacs\": \"0.19.0\", \"homeassistant\": \"2022.3.1\", \"country\": \"AT\"}, \"authors\": [\"@tofuSCHNITZEL\"], \"category\": \"integration\", \"description\": \"A sensor that give you information about departures from a specified Wiener Linien stop.\", \"domain\": \"wienerlinien\", \"etag_repository\": \"W/\\\"31a5ac2e42f802e2185713b295eed6bb07332914795e4114f66551116359b963\\\"\", \"full_name\": \"tofuSCHNITZEL/home-assistant-wienerlinien\", \"stargazers_count\": 3, \"topics\": [\"wiener-linien\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"497322919\": {\"repository_manifest\": {\"name\": \"Upcoming Media Card\", \"render_readme\": true}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udcfa A card to display upcoming episodes and movies from services like: Plex, Kodi, Radarr, Sonarr, and Trakt.\", \"downloads\": 1028, \"etag_repository\": \"W/\\\"ecadb0cccd3312055f7bd8b7181099aae7388b4c06faeb12bf62b2a359620348\\\"\", \"full_name\": \"NemesisRE/upcoming-media-card\", \"last_updated\": \"2022-05-31T15:30:28Z\", \"stargazers_count\": 10, \"topics\": [\"customization\"], \"last_fetched\": 1657362521.302224, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"499270202\": {\"repository_manifest\": {\"name\": \"Hourly Weather Card\", \"render_readme\": true, \"filename\": \"hourly-weather.js\"}, \"category\": \"plugin\", \"description\": \"Hourly weather card for Home Assistant. Visualize upcoming weather conditions as a colored horizontal bar.\", \"downloads\": 1411, \"etag_repository\": \"W/\\\"ea2a4c54af025676b1999026df9ebd65a3eb4bdbd3717a335b37c77388bd2e96\\\"\", \"full_name\": \"decompil3d/lovelace-hourly-weather\", \"last_updated\": \"2022-07-08T16:53:21Z\", \"stargazers_count\": 15, \"topics\": [\"card\", \"hourly\", \"weather\"], \"last_fetched\": 1657362457.317753, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"498774862\": {\"repository_manifest\": {\"name\": \"Material 3 Dark & Light Theme C11: Purple\", \"filename\": \"m3-c11-purple.yaml\", \"render_readme\": true}, \"category\": \"theme\", \"description\": \"Material Design 3 / Material YOU theme for Home Assistant\", \"etag_repository\": \"W/\\\"8ef86abca8dff7420fcb79838c8360430ed3ba83187ecf1764a7c7930950853e\\\"\", \"full_name\": \"AmoebeLabs/HA-Theme_M3-C11-Purple\", \"topics\": [\"dark-mode\", \"dark-theme\", \"home-assistant-theme\", \"light-mode\", \"light-theme\", \"material-3\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"501618674\": {\"repository_manifest\": {\"name\": \"BleBox shutterBox with tilt\", \"hacs\": \"1.6.0\", \"homeassistant\": \"2022.6.0\", \"render_readme\": true}, \"authors\": [\"@andrzejchm\"], \"category\": \"integration\", \"description\": \"HACS integration for BleBox shutterBox that adds tilt support\", \"domain\": \"blebox_shutterbox_tilt\", \"etag_repository\": \"W/\\\"94cd7287cb1e2391435936946243dad12545bbf324060e3e6bb67bd8d58b6c7a\\\"\", \"full_name\": \"andrzejchm/blebox_shutterbox_tilt\", \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"504880554\": {\"repository_manifest\": {\"name\": \"CyclePay for ESD/Hercules Laundry Rooms\"}, \"authors\": [\"@elahd\"], \"category\": \"integration\", \"description\": \"Home Assistant Integration for ESD/Hercules CyclePay Laundry Rooms\", \"domain\": \"cyclepay\", \"etag_repository\": \"W/\\\"207e5c1942ef2403f9d2a2a91d7eeeeef941db36cdeb327ad53614eb2c7442ba\\\"\", \"full_name\": \"elahd/ha-cyclepay\", \"topics\": [\"laundry\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"396083412\": {\"repository_manifest\": {\"name\": \"Midea AC LAN\", \"render_readme\": true}, \"authors\": [\"@georgezhao2010\"], \"category\": \"integration\", \"description\": \"Auto-configure and then control your Midea air-conditioners via local area network.\", \"domain\": \"midea_ac_lan\", \"etag_repository\": \"W/\\\"74cf006e6f21c9eabce0dcc937080e5891ad4b1bf06bf8400ea0cd1963ca3573\\\"\", \"full_name\": \"georgezhao2010/midea_ac_lan\", \"last_updated\": \"2022-07-08T20:00:49Z\", \"stargazers_count\": 43, \"topics\": [\"air-conditioner\", \"lan\", \"local\", \"midea\"], \"last_fetched\": 1657362756.187653, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"504337320\": {\"repository_manifest\": {\"name\": \"Dremel 3D Printer\", \"hacs\": \"1.25.5\", \"homeassistant\": \"2022.6.6\"}, \"authors\": [\"@godely\"], \"category\": \"integration\", \"description\": \"Dremel 3D Printer integration for Home Assistant.\", \"domain\": \"dremel_3d_printer\", \"etag_repository\": \"W/\\\"89ba4be11ef063e2b9fd0a184fcc5401e2de6e896ccc2c307c9e0ac5def3c23e\\\"\", \"full_name\": \"godely/ha-dremel-3d-printer\", \"last_updated\": \"2022-06-28T18:56:38Z\", \"stargazers_count\": 2, \"topics\": [\"3d\", \"3d-printer\", \"3d-printing\", \"bosch\", \"dremel\", \"dremel-idea-builder\", \"dremel-ideabuilder\"], \"last_fetched\": 1657362758.510358, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"506738088\": {\"repository_manifest\": {\"name\": \"Sodexo Card\", \"country\": \"PT\", \"render_readme\": true}, \"authors\": [\"@ruidias-netsoft\"], \"category\": \"integration\", \"description\": \"Sodexo - Custom Component for Home Assistant\", \"domain\": \"sodexo\", \"etag_repository\": \"W/\\\"37019e66a00c636fd6b351d28f8bd3dd2db762194591beed54dfb3667c6efa30\\\"\", \"full_name\": \"netsoft-ruidias/ha-custom-component-sodexo\", \"last_updated\": \"2022-07-04T17:26:46Z\", \"stargazers_count\": 1, \"topics\": [\"meal-card\", \"sodexo\"], \"last_fetched\": 1657362876.56254, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"503856080\": {\"repository_manifest\": {\"name\": \"My Edenred\", \"country\": \"PT\", \"render_readme\": true}, \"authors\": [\"@ruidias-netsoft\"], \"category\": \"integration\", \"description\": \"myEdenred - Custom Component for Home Assistant\", \"domain\": \"myedenred\", \"etag_repository\": \"W/\\\"a3ea3c1557e8488d963aec4d29d71a2ce8bae30d6b93bbc9f6b6a47c293563c0\\\"\", \"full_name\": \"netsoft-ruidias/ha-custom-component-myedenred\", \"stargazers_count\": 1, \"topics\": [\"meal-card\", \"myedenred\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"508800396\": {\"repository_manifest\": {\"name\": \"Coverflex Card\", \"country\": \"PT\", \"render_readme\": true}, \"authors\": [\"@ruidias-netsoft\"], \"category\": \"integration\", \"description\": \"Coverflex - Custom Component for Home Assistant\", \"domain\": \"coverflex\", \"etag_repository\": \"W/\\\"818887cee0388e319135f80a098ead6bbc7328e34fdd36d07f811ff27dfbad83\\\"\", \"full_name\": \"netsoft-ruidias/ha-custom-component-coverflex\", \"topics\": [\"coverflex\", \"meal-card\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"509121113\": {\"repository_manifest\": {\"content_in_root\": true, \"homeassistant\": \"0.70.0\", \"name\": \"seven\", \"render_readme\": true}, \"authors\": [\"@matthiez\"], \"category\": \"integration\", \"description\": \"HACS supporting Home Assistant integration for seven\", \"domain\": \"seven\", \"etag_repository\": \"W/\\\"35b63059a3d4778e0987be398fc3bc33aaaf6c92e124304c42645f2eb4d8c729\\\"\", \"full_name\": \"seven-io/home-assistant\", \"topics\": [\"hassio-integration\", \"home-assistant-integration\", \"sms\", \"tts\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"505598474\": {\"repository_manifest\": {\"name\": \"Pre\\u00e7os dos Combust\\u00edveis - DGEG\", \"country\": \"PT\", \"render_readme\": true}, \"authors\": [\"@ruidias-netsoft\"], \"category\": \"integration\", \"description\": \"Pre\\u00e7os dos Combust\\u00edveis Online - DGEG\", \"domain\": \"precoscombustiveis\", \"etag_repository\": \"W/\\\"5a97d2e5df566ae926ea741c2d4a5c77f098ad111a5bafbd79c06a7fe59672bc\\\"\", \"full_name\": \"netsoft-ruidias/ha-custom-component-precoscombustiveis\", \"last_updated\": \"2022-07-08T13:11:49Z\", \"stargazers_count\": 5, \"topics\": [\"combustiveis\", \"dgeg\", \"fuel-prices\", \"gas\", \"portugal\"], \"last_fetched\": 1657362876.47588, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"248462859\": {\"repository_manifest\": {\"name\": \"Alarmdotcom\"}, \"authors\": [\"@uvjustin\", \"@elahd\"], \"category\": \"integration\", \"description\": \"Custom component to allow Home Assistant to interface with Alarm.com\", \"domain\": \"alarmdotcom\", \"etag_repository\": \"W/\\\"b21b2ce103edd7a54081b8f03037d6ec8ec9d5cf5daa70ee44f35e4a4fd98030\\\"\", \"full_name\": \"pyalarmdotcom/alarmdotcom\", \"stargazers_count\": 86, \"topics\": [\"alarm\"], \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"488086721\": {\"repository_manifest\": {\"name\": \"Platinum Weather Card\", \"render_readme\": true, \"filename\": \"platinum-weather-card.js\"}, \"category\": \"plugin\", \"description\": \"This is the beta version of a HA weather card that is actively being developed.\", \"downloads\": 612, \"etag_repository\": \"W/\\\"d453ca4ba3a7adafe1c257ff6234e266791a4d39d69e2d80f32c1299f8bc5369\\\"\", \"full_name\": \"Makin-Things/platinum-weather-card\", \"last_updated\": \"2022-07-09T02:03:44Z\", \"stargazers_count\": 13, \"topics\": [\"frontend\", \"weather\", \"weather-forecast\"], \"last_fetched\": 1657362510.034003, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"505459170\": {\"repository_manifest\": {\"name\": \"TV Remote Card (with touchpad and haptic feedback)\", \"content_in_root\": true, \"homeassistant\": \"2022.4.0\"}, \"category\": \"plugin\", \"description\": \"\\ud83d\\udcfa TV Remote Card (with touchpad and haptic feedback)\", \"downloads\": 15, \"etag_repository\": \"W/\\\"43fd27233cc1b9255d4b399416afa27f3b0bb16f0e8fd36c20f223b90fb4a6cc\\\"\", \"full_name\": \"usernein/tv-card\", \"last_updated\": \"2022-07-08T23:24:32Z\", \"stargazers_count\": 12, \"topics\": [\"automation\", \"card\", \"remote\", \"tv\"], \"last_fetched\": 1657362557.077867, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}, \"495935449\": {\"repository_manifest\": {}, \"category\": \"integration\", \"description\": \"Python server to interact with Matter\", \"domain\": \"matter_experimental\", \"etag_repository\": \"W/\\\"dd24c43705299cdd67c876cfb929a6a6d964188392c3a9cbee24cc1f7084ad83\\\"\", \"full_name\": \"home-assistant-libs/python-matter-server\", \"last_updated\": \"2022-07-07T18:24:53Z\", \"stargazers_count\": 19, \"topics\": [\"matter\"], \"last_fetched\": 1657353289.006767, \"first_install\": true, \"installed\": false, \"show_beta\": false, \"new\": false, \"installed_commit\": null, \"selected_tag\": null, \"version_installed\": null}}"
  },
  {
    "path": "home-assistant/custom_components/hacs/utils/filters.py",
    "content": "\"\"\"Filter functions.\"\"\"\nfrom __future__ import annotations\n\nfrom typing import Any\n\n\ndef filter_content_return_one_of_type(\n    content: list[str | Any],\n    namestartswith: str,\n    filterfiltype: str,\n    attr: str = \"name\",\n) -> list[str]:\n    \"\"\"Only match 1 of the filter.\"\"\"\n    contents = []\n    filetypefound = False\n    for filename in content:\n        if isinstance(filename, str):\n            if filename.startswith(namestartswith):\n                if filename.endswith(f\".{filterfiltype}\"):\n                    if not filetypefound:\n                        contents.append(filename)\n                        filetypefound = True\n                    continue\n                else:\n                    contents.append(filename)\n        else:\n            if getattr(filename, attr).startswith(namestartswith):\n                if getattr(filename, attr).endswith(f\".{filterfiltype}\"):\n                    if not filetypefound:\n                        contents.append(filename)\n                        filetypefound = True\n                    continue\n                else:\n                    contents.append(filename)\n    return contents\n\n\ndef get_first_directory_in_directory(content: list[str | Any], dirname: str) -> str | None:\n    \"\"\"Return the first directory in dirname or None.\"\"\"\n    directory = None\n    for path in content:\n        if path.full_path.startswith(dirname) and path.full_path != dirname:\n            if path.is_directory:\n                directory = path.filename\n                break\n    return directory\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/utils/json.py",
    "content": "\"\"\"JSON utils.\"\"\"\n\ntry:\n    # Could be removed after 2022.06 is the min version\n    # But in case Home Assistant changes, keep this try/except here...\n    from homeassistant.helpers.json import json_loads\nexcept ImportError:\n    from json import loads as json_loads\n\n__all__ = [\"json_loads\"]\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/utils/logger.py",
    "content": "\"\"\"Custom logger for HACS.\"\"\"\nimport logging\n\nfrom ..const import PACKAGE_NAME\n\nLOGGER: logging.Logger = logging.getLogger(PACKAGE_NAME)\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/utils/path.py",
    "content": "\"\"\"Path utils\"\"\"\nfrom __future__ import annotations\n\nfrom pathlib import Path\nfrom typing import TYPE_CHECKING\n\nif TYPE_CHECKING:\n    from ..base import HacsBase\n\n\ndef is_safe(hacs: HacsBase, path: str | Path) -> bool:\n    \"\"\"Helper to check if path is safe to remove.\"\"\"\n    return Path(path).as_posix() not in (\n        Path(f\"{hacs.core.config_path}/{hacs.configuration.appdaemon_path}\").as_posix(),\n        Path(f\"{hacs.core.config_path}/{hacs.configuration.netdaemon_path}\").as_posix(),\n        Path(f\"{hacs.core.config_path}/{hacs.configuration.plugin_path}\").as_posix(),\n        Path(f\"{hacs.core.config_path}/{hacs.configuration.python_script_path}\").as_posix(),\n        Path(f\"{hacs.core.config_path}/{hacs.configuration.theme_path}\").as_posix(),\n        Path(f\"{hacs.core.config_path}/custom_components/\").as_posix(),\n    )\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/utils/queue_manager.py",
    "content": "\"\"\"The QueueManager class.\"\"\"\nfrom __future__ import annotations\n\nimport asyncio\nimport time\nfrom typing import Coroutine\n\nfrom homeassistant.core import HomeAssistant\n\nfrom ..exceptions import HacsExecutionStillInProgress\nfrom .logger import LOGGER\n\n_LOGGER = LOGGER\n\n\nclass QueueManager:\n    \"\"\"The QueueManager class.\"\"\"\n\n    def __init__(self, hass: HomeAssistant) -> None:\n        self.hass = hass\n        self.queue: list[Coroutine] = []\n        self.running = False\n\n    @property\n    def pending_tasks(self) -> int:\n        \"\"\"Return a count of pending tasks in the queue.\"\"\"\n        return len(self.queue)\n\n    @property\n    def has_pending_tasks(self) -> bool:\n        \"\"\"Return a count of pending tasks in the queue.\"\"\"\n        return self.pending_tasks != 0\n\n    def clear(self) -> None:\n        \"\"\"Clear the queue.\"\"\"\n        self.queue = []\n\n    def add(self, task: Coroutine) -> None:\n        \"\"\"Add a task to the queue.\"\"\"\n        self.queue.append(task)\n\n    async def execute(self, number_of_tasks: int | None = None) -> None:\n        \"\"\"Execute the tasks in the queue.\"\"\"\n        if self.running:\n            _LOGGER.debug(\"<QueueManager> Execution is already running\")\n            raise HacsExecutionStillInProgress\n        if len(self.queue) == 0:\n            _LOGGER.debug(\"<QueueManager> The queue is empty\")\n            return\n\n        self.running = True\n\n        _LOGGER.debug(\"<QueueManager> Checking out tasks to execute\")\n        local_queue = []\n\n        if number_of_tasks:\n            for task in self.queue[:number_of_tasks]:\n                local_queue.append(task)\n        else:\n            for task in self.queue:\n                local_queue.append(task)\n\n        for task in local_queue:\n            self.queue.remove(task)\n\n        _LOGGER.debug(\"<QueueManager> Starting queue execution for %s tasks\", len(local_queue))\n        start = time.time()\n        result = await asyncio.gather(*local_queue, return_exceptions=True)\n        for entry in result:\n            if isinstance(entry, Exception):\n                _LOGGER.error(\"<QueueManager> %s\", entry)\n        end = time.time() - start\n\n        _LOGGER.debug(\n            \"<QueueManager> Queue execution finished for %s tasks finished in %.2f seconds\",\n            len(local_queue),\n            end,\n        )\n        if self.has_pending_tasks:\n            _LOGGER.debug(\"<QueueManager> %s tasks remaining in the queue\", len(self.queue))\n        self.running = False\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/utils/regex.py",
    "content": "\"\"\"Regex utils\"\"\"\nfrom __future__ import annotations\n\nimport re\n\nRE_REPOSITORY = re.compile(\n    r\"(?:(?:.*github.com.)|^)([A-Za-z0-9-]+\\/[\\w.-]+?)(?:(?:\\.git)?|(?:[^\\w.-].*)?)$\"\n)\n\n\ndef extract_repository_from_url(url: str) -> str | None:\n    \"\"\"Extract the owner/repo part form a URL.\"\"\"\n    match = re.match(RE_REPOSITORY, url)\n    if not match:\n        return None\n    return match.group(1).lower()\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/utils/store.py",
    "content": "\"\"\"Storage handers.\"\"\"\nfrom homeassistant.helpers.json import JSONEncoder\nfrom homeassistant.helpers.storage import Store\nfrom homeassistant.util import json as json_util\n\nfrom ..const import VERSION_STORAGE\nfrom ..exceptions import HacsException\nfrom .logger import LOGGER\n\n_LOGGER = LOGGER\n\n\nclass HACSStore(Store):\n    \"\"\"A subclass of Store that allows multiple loads in the executor.\"\"\"\n\n    def load(self):\n        \"\"\"Load the data from disk if version matches.\"\"\"\n        try:\n            data = json_util.load_json(self.path)\n        except BaseException as exception:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n            _LOGGER.critical(\n                \"Could not load '%s', restore it from a backup or delete the file: %s\",\n                self.path,\n                exception,\n            )\n            raise HacsException(exception) from exception\n        if data == {} or data[\"version\"] != self.version:\n            return None\n        return data[\"data\"]\n\n\ndef get_store_key(key):\n    \"\"\"Return the key to use with homeassistant.helpers.storage.Storage.\"\"\"\n    return key if \"/\" in key else f\"hacs.{key}\"\n\n\ndef _get_store_for_key(hass, key, encoder):\n    \"\"\"Create a Store object for the key.\"\"\"\n    return HACSStore(hass, VERSION_STORAGE, get_store_key(key), encoder=encoder, atomic_writes=True)\n\n\ndef get_store_for_key(hass, key):\n    \"\"\"Create a Store object for the key.\"\"\"\n    return _get_store_for_key(hass, key, JSONEncoder)\n\n\nasync def async_load_from_store(hass, key):\n    \"\"\"Load the retained data from store and return de-serialized data.\"\"\"\n    return await get_store_for_key(hass, key).async_load() or {}\n\n\nasync def async_save_to_store(hass, key, data):\n    \"\"\"Generate dynamic data to store and save it to the filesystem.\n\n    The data is only written if the content on the disk has changed\n    by reading the existing content and comparing it.\n\n    If the data has changed this will generate two executor jobs\n\n    If the data has not changed this will generate one executor job\n    \"\"\"\n    current = await async_load_from_store(hass, key)\n    if current is None or current != data:\n        await get_store_for_key(hass, key).async_save(data)\n        return\n    _LOGGER.debug(\n        \"<HACSStore async_save_to_store> Did not store data for '%s'. Content did not change\",\n        get_store_key(key),\n    )\n\n\nasync def async_remove_store(hass, key):\n    \"\"\"Remove a store element that should no longer be used.\"\"\"\n    if \"/\" not in key:\n        return\n    await get_store_for_key(hass, key).async_remove()\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/utils/template.py",
    "content": "\"\"\"Custom template support.\"\"\"\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nfrom jinja2 import Template\n\nif TYPE_CHECKING:\n    from ..base import HacsBase\n    from ..repositories.base import HacsRepository\n\n\ndef render_template(hacs: HacsBase, content: str, context: HacsRepository) -> str:\n    \"\"\"Render templates in content.\"\"\"\n    if hacs.configuration.experimental:\n        # Do not render for experimental\n        return content\n    # Fix None issues\n    if context.releases.last_release_object is not None:\n        prerelease = context.releases.last_release_object.prerelease\n    else:\n        prerelease = False\n\n    # Render the template\n    try:\n        return Template(content).render(\n            installed=context.data.installed,\n            pending_update=context.pending_update,\n            prerelease=prerelease,\n            selected_tag=context.data.selected_tag,\n            version_available=context.releases.last_release,\n            version_installed=context.display_installed_version,\n        )\n    except BaseException as exception:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n        context.logger.debug(exception)\n    return content\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/utils/validate.py",
    "content": "\"\"\"Validation utilities.\"\"\"\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass, field\n\nfrom awesomeversion import AwesomeVersion\nfrom homeassistant.helpers.config_validation import url as url_validator\nimport voluptuous as vol\n\nfrom ..const import LOCALE\n\n\n@dataclass\nclass Validate:\n    \"\"\"Validate.\"\"\"\n\n    errors: list[str] = field(default_factory=list)\n\n    @property\n    def success(self) -> bool:\n        \"\"\"Return bool if the validation was a success.\"\"\"\n        return len(self.errors) == 0\n\n\ndef _country_validator(values) -> list[str]:\n    \"\"\"Custom country validator.\"\"\"\n    countries = []\n    if isinstance(values, str):\n        countries.append(values.upper())\n    elif isinstance(values, list):\n        for value in values:\n            countries.append(value.upper())\n    else:\n        raise vol.Invalid(f\"Value '{values}' is not a string or list.\", path=[\"country\"])\n\n    for country in countries:\n        if country not in LOCALE:\n            raise vol.Invalid(f\"Value '{country}' is not in {LOCALE}.\", path=[\"country\"])\n\n    return countries\n\n\nHACS_MANIFEST_JSON_SCHEMA = vol.Schema(\n    {\n        vol.Optional(\"content_in_root\"): bool,\n        vol.Optional(\"country\"): _country_validator,\n        vol.Optional(\"filename\"): str,\n        vol.Optional(\"hacs\"): vol.Coerce(AwesomeVersion),\n        vol.Optional(\"hide_default_branch\"): bool,\n        vol.Optional(\"homeassistant\"): vol.Coerce(AwesomeVersion),\n        vol.Optional(\"persistent_directory\"): str,\n        vol.Optional(\"render_readme\"): bool,\n        vol.Optional(\"zip_release\"): bool,\n        vol.Required(\"name\"): str,\n    },\n    extra=vol.PREVENT_EXTRA,\n)\n\nINTEGRATION_MANIFEST_JSON_SCHEMA = vol.Schema(\n    {\n        vol.Required(\"codeowners\"): list,\n        vol.Required(\"documentation\"): url_validator,\n        vol.Required(\"domain\"): str,\n        vol.Required(\"issue_tracker\"): url_validator,\n        vol.Required(\"name\"): str,\n        vol.Required(\"version\"): vol.Coerce(AwesomeVersion),\n    },\n    extra=vol.ALLOW_EXTRA,\n)\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/utils/version.py",
    "content": "\"\"\"Version utils.\"\"\"\nfrom __future__ import annotations\n\nfrom functools import lru_cache\n\nfrom awesomeversion import (\n    AwesomeVersion,\n    AwesomeVersionException,\n    AwesomeVersionStrategy,\n)\n\n\n@lru_cache(maxsize=1024)\ndef version_left_higher_then_right(left: str, right: str) -> bool | None:\n    \"\"\"Return a bool if source is newer than target, will also be true if identical.\"\"\"\n    try:\n        left_version = AwesomeVersion(left)\n        right_version = AwesomeVersion(right)\n        if (\n            left_version.strategy != AwesomeVersionStrategy.UNKNOWN\n            and right_version.strategy != AwesomeVersionStrategy.UNKNOWN\n        ):\n            return left_version > right_version\n    except (AwesomeVersionException, AttributeError):\n        pass\n\n    return None\n\n\ndef version_left_higher_or_equal_then_right(left: str, right: str) -> bool:\n    \"\"\"Return a bool if source is newer than target, will also be true if identical.\"\"\"\n    if left == right:\n        return True\n\n    return version_left_higher_then_right(left, right)\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/utils/workarounds.py",
    "content": "\"\"\"Workarounds for issues that should not be fixed.\"\"\"\n\n\nDOMAIN_OVERRIDES = {\n    # https://github.com/hacs/integration/issues/2465\n    \"custom-components/sensor.custom_aftership\": \"custom_aftership\"\n}\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/validate/README.md",
    "content": "# Repository validation\n\nThis is where the validation rules that run against the various repository categories live.\n\n## Structure\n\n- There is one file pr. rule.\n- All rule needs tests to verify every possible outcome for the rule.\n- It's better with multiple files than a big rule.\n- All rules uses `ActionValidationBase` as the base class.\n- Only use `validate` or `async_validate` methods to define validation rules.\n- If a rule should fail, raise `ValidationException` with the failure message.\n\n\n## Example\n\n```python\nfrom .base import (\n    ActionValidationBase,\n    ValidationBase,\n    ValidationException,\n)\n\nclass SuperAwesomeRepository(ActionValidationBase):\n    category = \"integration\"\n\n    async def async_validate(self):\n        if self.repository != \"super-awesome\":\n            raise ValidationException(\"The repository is not super-awesome\")\n```"
  },
  {
    "path": "home-assistant/custom_components/hacs/validate/__init__.py",
    "content": "\"\"\"Initialize validation.\"\"\"\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/validate/archived.py",
    "content": "from __future__ import annotations\n\nfrom ..repositories.base import HacsRepository\nfrom .base import ActionValidationBase, ValidationException\n\n\nasync def async_setup_validator(repository: HacsRepository) -> Validator:\n    \"\"\"Set up this validator.\"\"\"\n    return Validator(repository=repository)\n\n\nclass Validator(ActionValidationBase):\n    \"\"\"Validate the repository.\"\"\"\n\n    more_info = \"https://hacs.xyz/docs/publish/include#check-archived\"\n    allow_fork = False\n\n    async def async_validate(self):\n        \"\"\"Validate the repository.\"\"\"\n        if self.repository.data.archived:\n            raise ValidationException(\"The repository is archived\")\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/validate/base.py",
    "content": "\"\"\"Base class for validation.\"\"\"\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING\n\nfrom ..enums import HacsCategory\nfrom ..exceptions import HacsException\n\nif TYPE_CHECKING:\n    from ..repositories.base import HacsRepository\n\n\nclass ValidationException(HacsException):\n    \"\"\"Raise when there is a validation issue.\"\"\"\n\n\nclass ActionValidationBase:\n    \"\"\"Base class for action validation.\"\"\"\n\n    categories: list[HacsCategory] = []\n    allow_fork: bool = True\n    more_info: str = \"https://hacs.xyz/docs/publish/action\"\n\n    def __init__(self, repository: HacsRepository) -> None:\n        self.hacs = repository.hacs\n        self.repository = repository\n        self.failed = False\n\n    @property\n    def slug(self) -> str:\n        \"\"\"Return the check slug.\"\"\"\n        return self.__class__.__module__.rsplit(\".\", maxsplit=1)[-1]\n\n    async def async_validate(self) -> None:\n        \"\"\"Validate the repository.\"\"\"\n\n    async def execute_validation(self, *_, **__) -> None:\n        \"\"\"Execute the task defined in subclass.\"\"\"\n        self.failed = False\n\n        try:\n            await self.async_validate()\n        except ValidationException as exception:\n            self.failed = True\n            self.hacs.log.error(\n                \"<Validation %s> failed:  %s (More info: %s )\",\n                self.slug,\n                exception,\n                self.more_info,\n            )\n\n        else:\n            self.hacs.log.info(\"<Validation %s> completed\", self.slug)\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/validate/brands.py",
    "content": "from __future__ import annotations\n\nfrom custom_components.hacs.enums import HacsCategory\n\nfrom ..repositories.base import HacsRepository\nfrom .base import ActionValidationBase, ValidationException\n\nURL = \"https://brands.home-assistant.io/domains.json\"\n\n\nasync def async_setup_validator(repository: HacsRepository) -> Validator:\n    \"\"\"Set up this validator.\"\"\"\n    return Validator(repository=repository)\n\n\nclass Validator(ActionValidationBase):\n    \"\"\"Validate the repository.\"\"\"\n\n    more_info = \"https://hacs.xyz/docs/publish/include#check-brands\"\n    categories = [HacsCategory.INTEGRATION]\n\n    async def async_validate(self):\n        \"\"\"Validate the repository.\"\"\"\n\n        response = await self.hacs.session.get(URL)\n        content = await response.json()\n\n        if self.repository.data.domain not in content[\"custom\"]:\n            raise ValidationException(\n                \"The repository has not been added as a custom domain to the brands repo\"\n            )\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/validate/description.py",
    "content": "from __future__ import annotations\n\nfrom ..repositories.base import HacsRepository\nfrom .base import ActionValidationBase, ValidationException\n\n\nasync def async_setup_validator(repository: HacsRepository) -> Validator:\n    \"\"\"Set up this validator.\"\"\"\n    return Validator(repository=repository)\n\n\nclass Validator(ActionValidationBase):\n    \"\"\"Validate the repository.\"\"\"\n\n    more_info = \"https://hacs.xyz/docs/publish/include#check-repository\"\n    allow_fork = False\n\n    async def async_validate(self):\n        \"\"\"Validate the repository.\"\"\"\n        if not self.repository.data.description:\n            raise ValidationException(\"The repository has no description\")\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/validate/hacsjson.py",
    "content": "from __future__ import annotations\n\nfrom voluptuous.error import Invalid\n\nfrom ..enums import RepositoryFile\nfrom ..repositories.base import HacsRepository\nfrom ..utils.validate import HACS_MANIFEST_JSON_SCHEMA\nfrom .base import ActionValidationBase, ValidationException\n\n\nasync def async_setup_validator(repository: HacsRepository) -> Validator:\n    \"\"\"Set up this validator.\"\"\"\n    return Validator(repository=repository)\n\n\nclass Validator(ActionValidationBase):\n    \"\"\"Validate the repository.\"\"\"\n\n    more_info = \"https://hacs.xyz/docs/publish/include#check-hacs-manifest\"\n\n    async def async_validate(self):\n        \"\"\"Validate the repository.\"\"\"\n        if RepositoryFile.HACS_JSON not in [x.filename for x in self.repository.tree]:\n            raise ValidationException(f\"The repository has no '{RepositoryFile.HACS_JSON}' file\")\n\n        content = await self.repository.async_get_hacs_json(self.repository.ref)\n        try:\n            HACS_MANIFEST_JSON_SCHEMA(content)\n        except Invalid as exception:\n            raise ValidationException(exception) from exception\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/validate/images.py",
    "content": "from __future__ import annotations\n\nfrom ..enums import HacsCategory\nfrom ..repositories.base import HacsRepository\nfrom .base import ActionValidationBase, ValidationException\n\nIGNORED = [\"-shield\", \"img.shields.io\", \"buymeacoffee.com\"]\n\n\nasync def async_setup_validator(repository: HacsRepository) -> Validator:\n    \"\"\"Set up this validator.\"\"\"\n    return Validator(repository=repository)\n\n\nclass Validator(ActionValidationBase):\n    \"\"\"Validate the repository.\"\"\"\n\n    categories = [HacsCategory.PLUGIN, HacsCategory.THEME]\n    more_info = \"https://hacs.xyz/docs/publish/include#check-images\"\n\n    async def async_validate(self):\n        \"\"\"Validate the repository.\"\"\"\n        info = await self.repository.async_get_info_file_contents()\n        for line in info.split(\"\\n\"):\n            if \"<img\" in line or \"![\" in line:\n                if [ignore for ignore in IGNORED if ignore in line]:\n                    continue\n                return\n        raise ValidationException(\"The repository does not have issues enabled\")\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/validate/information.py",
    "content": "from __future__ import annotations\n\nfrom ..repositories.base import HacsRepository\nfrom .base import ActionValidationBase, ValidationException\n\n\nasync def async_setup_validator(repository: HacsRepository) -> Validator:\n    \"\"\"Set up this validator.\"\"\"\n    return Validator(repository=repository)\n\n\nclass Validator(ActionValidationBase):\n    \"\"\"Validate the repository.\"\"\"\n\n    more_info = \"https://hacs.xyz/docs/publish/include#check-info\"\n\n    async def async_validate(self):\n        \"\"\"Validate the repository.\"\"\"\n        filenames = [x.filename.lower() for x in self.repository.tree]\n        if \"readme\" in filenames:\n            pass\n        elif \"readme.md\" in filenames:\n            pass\n        elif \"info\" in filenames:\n            pass\n        elif \"info.md\" in filenames:\n            pass\n        else:\n            raise ValidationException(\"The repository has no information file\")\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/validate/integration_manifest.py",
    "content": "from __future__ import annotations\n\nfrom voluptuous.error import Invalid\n\nfrom ..enums import HacsCategory, RepositoryFile\nfrom ..repositories.base import HacsRepository\nfrom ..repositories.integration import HacsIntegrationRepository\nfrom ..utils.validate import INTEGRATION_MANIFEST_JSON_SCHEMA\nfrom .base import ActionValidationBase, ValidationException\n\n\nasync def async_setup_validator(repository: HacsRepository) -> Validator:\n    \"\"\"Set up this validator.\"\"\"\n    return Validator(repository=repository)\n\n\nclass Validator(ActionValidationBase):\n    \"\"\"Validate the repository.\"\"\"\n\n    repository: HacsIntegrationRepository\n    more_info = \"https://hacs.xyz/docs/publish/include#check-manifest\"\n    categories = [HacsCategory.INTEGRATION]\n\n    async def async_validate(self):\n        \"\"\"Validate the repository.\"\"\"\n        if RepositoryFile.MAINIFEST_JSON not in [x.filename for x in self.repository.tree]:\n            raise ValidationException(\n                f\"The repository has no '{RepositoryFile.MAINIFEST_JSON}' file\"\n            )\n\n        content = await self.repository.async_get_integration_manifest(self.repository.ref)\n        try:\n            INTEGRATION_MANIFEST_JSON_SCHEMA(content)\n        except Invalid as exception:\n            raise ValidationException(exception) from exception\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/validate/issues.py",
    "content": "from __future__ import annotations\n\nfrom ..repositories.base import HacsRepository\nfrom .base import ActionValidationBase, ValidationException\n\n\nasync def async_setup_validator(repository: HacsRepository) -> Validator:\n    \"\"\"Set up this validator.\"\"\"\n    return Validator(repository=repository)\n\n\nclass Validator(ActionValidationBase):\n    \"\"\"Validate the repository.\"\"\"\n\n    more_info = \"https://hacs.xyz/docs/publish/include#check-repository\"\n    allow_fork = False\n\n    async def async_validate(self):\n        \"\"\"Validate the repository.\"\"\"\n        if not self.repository.data.has_issues:\n            raise ValidationException(\"The repository does not have issues enabled\")\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/validate/manager.py",
    "content": "\"\"\"Hacs validation manager.\"\"\"\nfrom __future__ import annotations\n\nimport asyncio\nfrom importlib import import_module\nimport os\nfrom pathlib import Path\nfrom typing import TYPE_CHECKING\n\nfrom homeassistant.core import HomeAssistant\n\nfrom ..enums import HacsGitHubRepo\nfrom ..repositories.base import HacsRepository\nfrom .base import ActionValidationBase\n\nif TYPE_CHECKING:\n    from ..base import HacsBase\n\n\nclass ValidationManager:\n    \"\"\"Hacs validation manager.\"\"\"\n\n    def __init__(self, hacs: HacsBase, hass: HomeAssistant) -> None:\n        \"\"\"Initialize the setup manager class.\"\"\"\n        self.hacs = hacs\n        self.hass = hass\n        self._validatiors: dict[str, ActionValidationBase] = {}\n\n    @property\n    def validatiors(self) -> list[ActionValidationBase]:\n        \"\"\"Return all list of all tasks.\"\"\"\n        return list(self._validatiors.values())\n\n    async def async_load(self, repository: HacsRepository) -> None:\n        \"\"\"Load all tasks.\"\"\"\n        self._validatiors = {}\n        validator_files = Path(__file__).parent\n        validator_modules = (\n            module.stem\n            for module in validator_files.glob(\"*.py\")\n            if module.name not in (\"base.py\", \"__init__.py\", \"manager.py\")\n        )\n\n        async def _load_module(module: str):\n            task_module = import_module(f\"{__package__}.{module}\")\n            if task := await task_module.async_setup_validator(repository=repository):\n                self._validatiors[task.slug] = task\n\n        await asyncio.gather(*[_load_module(task) for task in validator_modules])\n\n    async def async_run_repository_checks(self, repository: HacsRepository) -> None:\n        \"\"\"Run all validators for a repository.\"\"\"\n        if not self.hacs.system.action:\n            return\n\n        await self.async_load(repository)\n\n        is_pull_from_fork = (\n            not os.getenv(\"INPUT_REPOSITORY\")\n            and os.getenv(\"GITHUB_REPOSITORY\") != repository.data.full_name\n        )\n\n        validatiors = [\n            validator\n            for validator in self.validatiors or []\n            if (\n                (not validator.categories or repository.data.category in validator.categories)\n                and validator.slug not in os.getenv(\"INPUT_IGNORE\", \"\").split(\" \")\n                and (not is_pull_from_fork or validator.allow_fork)\n            )\n        ]\n\n        await asyncio.gather(*[validator.execute_validation() for validator in validatiors])\n\n        total = len(validatiors)\n        failed = len([x for x in validatiors if x.failed])\n\n        if failed != 0:\n            repository.logger.error(\"%s %s/%s checks failed\", repository.string, failed, total)\n            exit(1)\n        else:\n            repository.logger.info(\"%s All (%s) checks passed\", repository.string, total)\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/validate/topics.py",
    "content": "from __future__ import annotations\n\nfrom ..repositories.base import HacsRepository\nfrom .base import ActionValidationBase, ValidationException\n\n\nasync def async_setup_validator(repository: HacsRepository) -> Validator:\n    \"\"\"Set up this validator.\"\"\"\n    return Validator(repository=repository)\n\n\nclass Validator(ActionValidationBase):\n    \"\"\"Validate the repository.\"\"\"\n\n    more_info = \"https://hacs.xyz/docs/publish/include#check-repository\"\n    allow_fork = False\n\n    async def async_validate(self):\n        \"\"\"Validate the repository.\"\"\"\n        if not self.repository.data.topics:\n            raise ValidationException(\"The repository has no valid topics\")\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/websocket/__init__.py",
    "content": "\"\"\"Register_commands.\"\"\"\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING, Any\n\nfrom homeassistant.components import websocket_api\nfrom homeassistant.core import HomeAssistant, callback\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\nimport voluptuous as vol\n\nfrom ..const import DOMAIN\nfrom .critical import hacs_critical_acknowledge, hacs_critical_list\nfrom .repositories import (\n    hacs_repositories_add,\n    hacs_repositories_clear_new,\n    hacs_repositories_list,\n    hacs_repositories_removed,\n    hacs_repositories_remove,\n)\nfrom .repository import (\n    hacs_repository_download,\n    hacs_repository_ignore,\n    hacs_repository_info,\n    hacs_repository_state,\n    hacs_repository_version,\n    hacs_repository_beta,\n    hacs_repository_refresh,\n    hacs_repository_release_notes,\n    hacs_repository_remove,\n)\n\nif TYPE_CHECKING:\n    from ..base import HacsBase\n\n\n@callback\ndef async_register_websocket_commands(hass: HomeAssistant) -> None:\n    \"\"\"Register_commands.\"\"\"\n    websocket_api.async_register_command(hass, hacs_info)\n    websocket_api.async_register_command(hass, hacs_subscribe)\n\n    websocket_api.async_register_command(hass, hacs_repository_info)\n    websocket_api.async_register_command(hass, hacs_repository_download)\n    websocket_api.async_register_command(hass, hacs_repository_ignore)\n    websocket_api.async_register_command(hass, hacs_repository_state)\n    websocket_api.async_register_command(hass, hacs_repository_version)\n    websocket_api.async_register_command(hass, hacs_repository_beta)\n    websocket_api.async_register_command(hass, hacs_repository_refresh)\n    websocket_api.async_register_command(hass, hacs_repository_release_notes)\n    websocket_api.async_register_command(hass, hacs_repository_remove)\n\n    websocket_api.async_register_command(hass, hacs_critical_acknowledge)\n    websocket_api.async_register_command(hass, hacs_critical_list)\n\n    websocket_api.async_register_command(hass, hacs_repositories_list)\n    websocket_api.async_register_command(hass, hacs_repositories_add)\n    websocket_api.async_register_command(hass, hacs_repositories_clear_new)\n    websocket_api.async_register_command(hass, hacs_repositories_removed)\n    websocket_api.async_register_command(hass, hacs_repositories_remove)\n\n\n@websocket_api.websocket_command(\n    {\n        vol.Required(\"type\"): \"hacs/subscribe\",\n        vol.Required(\"signal\"): str,\n    }\n)\n@websocket_api.require_admin\n@websocket_api.async_response\nasync def hacs_subscribe(\n    hass: HomeAssistant,\n    connection: websocket_api.ActiveConnection,\n    msg: dict,\n) -> None:\n    \"\"\"Handle websocket subscriptions.\"\"\"\n\n    @callback\n    def forward_messages(data: dict | None = None):\n        \"\"\"Forward events to websocket.\"\"\"\n        connection.send_message(websocket_api.event_message(msg[\"id\"], data))\n\n    connection.subscriptions[msg[\"id\"]] = async_dispatcher_connect(\n        hass,\n        msg[\"signal\"],\n        forward_messages,\n    )\n    connection.send_message(websocket_api.result_message(msg[\"id\"]))\n\n\n@websocket_api.websocket_command(\n    {\n        vol.Required(\"type\"): \"hacs/info\",\n    }\n)\n@websocket_api.require_admin\n@websocket_api.async_response\nasync def hacs_info(\n    hass: HomeAssistant,\n    connection: websocket_api.ActiveConnection,\n    msg: dict[str, Any],\n) -> None:\n    \"\"\"Return information about HACS.\"\"\"\n    hacs: HacsBase = hass.data.get(DOMAIN)\n    connection.send_message(\n        websocket_api.result_message(\n            msg[\"id\"],\n            {\n                \"categories\": hacs.common.categories,\n                \"country\": hacs.configuration.country,\n                \"debug\": hacs.configuration.debug,\n                \"dev\": hacs.configuration.dev,\n                \"disabled_reason\": hacs.system.disabled_reason,\n                \"experimental\": hacs.configuration.experimental,\n                \"has_pending_tasks\": hacs.queue.has_pending_tasks,\n                \"lovelace_mode\": hacs.core.lovelace_mode,\n                \"stage\": hacs.stage,\n                \"startup\": hacs.status.startup,\n                \"version\": hacs.version,\n            },\n        )\n    )\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/websocket/critical.py",
    "content": "\"\"\"Register info websocket commands.\"\"\"\nfrom __future__ import annotations\n\nfrom typing import Any\n\nfrom homeassistant.components import websocket_api\nfrom homeassistant.core import HomeAssistant\nimport homeassistant.helpers.config_validation as cv\nimport voluptuous as vol\n\nfrom ..utils.store import async_load_from_store, async_save_to_store\n\n\n@websocket_api.websocket_command(\n    {\n        vol.Required(\"type\"): \"hacs/critical/list\",\n    }\n)\n@websocket_api.require_admin\n@websocket_api.async_response\nasync def hacs_critical_list(\n    hass: HomeAssistant,\n    connection: websocket_api.ActiveConnection,\n    msg: dict[str, Any],\n):\n    \"\"\"List critical repositories.\"\"\"\n    critical = await async_load_from_store(hass, \"critical\")\n    if not critical:\n        critical = []\n    connection.send_message(\n        websocket_api.result_message(\n            msg[\"id\"],\n            (await async_load_from_store(hass, \"critical\") or []),\n        )\n    )\n\n\n@websocket_api.websocket_command(\n    {\n        vol.Required(\"type\"): \"hacs/critical/acknowledge\",\n        vol.Optional(\"repository\"): cv.string,\n    }\n)\n@websocket_api.require_admin\n@websocket_api.async_response\nasync def hacs_critical_acknowledge(\n    hass: HomeAssistant,\n    connection: websocket_api.ActiveConnection,\n    msg: dict[str, Any],\n):\n    \"\"\"Acknowledge critical repository.\"\"\"\n    repository = msg[\"repository\"]\n\n    critical = await async_load_from_store(hass, \"critical\")\n    for repo in critical:\n        if repository == repo[\"repository\"]:\n            repo[\"acknowledged\"] = True\n    await async_save_to_store(hass, \"critical\", critical)\n    connection.send_message(websocket_api.result_message(msg[\"id\"], critical))\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/websocket/repositories.py",
    "content": "\"\"\"Register info websocket commands.\"\"\"\nfrom __future__ import annotations\n\nimport sys\nfrom typing import TYPE_CHECKING, Any\n\nfrom homeassistant.components import websocket_api\nfrom homeassistant.core import HomeAssistant\nimport homeassistant.helpers.config_validation as cv\nimport voluptuous as vol\n\nfrom custom_components.hacs.utils import regex\n\nfrom ..const import DOMAIN\nfrom ..enums import HacsDispatchEvent\n\nif TYPE_CHECKING:\n    from ..base import HacsBase\n\n\n@websocket_api.websocket_command(\n    {\n        vol.Required(\"type\"): \"hacs/repositories/list\",\n        vol.Optional(\"categories\"): [str],\n    }\n)\n@websocket_api.require_admin\n@websocket_api.async_response\nasync def hacs_repositories_list(\n    hass: HomeAssistant,\n    connection: websocket_api.ActiveConnection,\n    msg: dict[str, Any],\n):\n    \"\"\"List repositories.\"\"\"\n    hacs: HacsBase = hass.data.get(DOMAIN)\n    connection.send_message(\n        websocket_api.result_message(\n            msg[\"id\"],\n            [\n                {\n                    \"authors\": repo.data.authors,\n                    \"available_version\": repo.display_available_version,\n                    \"installed_version\": repo.display_installed_version,\n                    \"config_flow\": repo.data.config_flow,\n                    \"can_download\": repo.can_download,\n                    \"category\": repo.data.category,\n                    \"country\": repo.repository_manifest.country,\n                    \"custom\": not hacs.repositories.is_default(str(repo.data.id)),\n                    \"description\": repo.data.description,\n                    \"domain\": repo.data.domain,\n                    \"downloads\": repo.data.downloads,\n                    \"file_name\": repo.data.file_name,\n                    \"full_name\": repo.data.full_name,\n                    \"hide\": repo.data.hide,\n                    \"homeassistant\": repo.repository_manifest.homeassistant,\n                    \"id\": repo.data.id,\n                    \"installed\": repo.data.installed,\n                    \"last_updated\": repo.data.last_updated,\n                    \"local_path\": repo.content.path.local,\n                    \"name\": repo.display_name,\n                    \"new\": repo.data.new,\n                    \"pending_upgrade\": repo.pending_update,\n                    \"stars\": repo.data.stargazers_count,\n                    \"state\": repo.state,\n                    \"status\": repo.display_status,\n                    \"topics\": repo.data.topics,\n                }\n                for repo in hacs.repositories.list_all\n                if repo.data.category in (msg.get(\"categories\") or hacs.common.categories)\n                and not repo.ignored_by_country_configuration\n            ],\n        )\n    )\n\n\n@websocket_api.websocket_command(\n    {\n        vol.Required(\"type\"): \"hacs/repositories/clear_new\",\n        vol.Optional(\"categories\"): cv.ensure_list,\n        vol.Optional(\"repository\"): cv.string,\n    }\n)\n@websocket_api.require_admin\n@websocket_api.async_response\nasync def hacs_repositories_clear_new(\n    hass: HomeAssistant,\n    connection: websocket_api.ActiveConnection,\n    msg: dict[str, Any],\n) -> None:\n    \"\"\"Clear new repositories for spesific categories.\"\"\"\n    hacs: HacsBase = hass.data.get(DOMAIN)\n\n    if repo := msg.get(\"repository\"):\n        repository = hacs.repositories.get_by_id(repo)\n        repository.data.new = False\n\n    else:\n        for repo in hacs.repositories.list_all:\n            if repo.data.new and repo.data.category in msg.get(\"categories\", []):\n                hacs.log.debug(\n                    \"Clearing new flag from '%s'\",\n                    repo.data.full_name,\n                )\n                repo.data.new = False\n    hacs.async_dispatch(HacsDispatchEvent.REPOSITORY, {})\n    await hacs.data.async_write()\n    connection.send_message(websocket_api.result_message(msg[\"id\"]))\n\n\n@websocket_api.websocket_command(\n    {\n        vol.Required(\"type\"): \"hacs/repositories/removed\",\n    }\n)\n@websocket_api.require_admin\n@websocket_api.async_response\nasync def hacs_repositories_removed(\n    hass: HomeAssistant,\n    connection: websocket_api.ActiveConnection,\n    msg: dict[str, Any],\n):\n    \"\"\"Get information about removed repositories.\"\"\"\n    hacs: HacsBase = hass.data.get(DOMAIN)\n    content = []\n    for repo in hacs.repositories.list_removed:\n        if repo.repository not in hacs.common.ignored_repositories:\n            content.append(repo.to_json())\n    connection.send_message(websocket_api.result_message(msg[\"id\"], content))\n\n\n@websocket_api.websocket_command(\n    {\n        vol.Required(\"type\"): \"hacs/repositories/add\",\n        vol.Required(\"repository\"): cv.string,\n        vol.Required(\"category\"): vol.Lower,\n    }\n)\n@websocket_api.require_admin\n@websocket_api.async_response\nasync def hacs_repositories_add(\n    hass: HomeAssistant,\n    connection: websocket_api.ActiveConnection,\n    msg: dict[str, Any],\n):\n    \"\"\"Add custom repositoriy.\"\"\"\n    hacs: HacsBase = hass.data.get(DOMAIN)\n    repository = regex.extract_repository_from_url(msg[\"repository\"])\n    category = msg[\"category\"]\n\n    if repository is None:\n        return\n\n    if repository in hacs.common.skip:\n        hacs.common.skip.remove(repository)\n\n    if renamed := hacs.common.renamed_repositories.get(repository):\n        repository = renamed\n\n    if not hacs.repositories.get_by_full_name(repository):\n        try:\n            await hacs.async_register_repository(\n                repository_full_name=repository,\n                category=category,\n            )\n\n        except BaseException as exception:  # lgtm [py/catch-base-exception] pylint: disable=broad-except\n            hacs.async_dispatch(\n                HacsDispatchEvent.ERROR,\n                {\n                    \"action\": \"add_repository\",\n                    \"exception\": str(sys.exc_info()[0].__name__),\n                    \"message\": str(exception),\n                },\n            )\n\n    else:\n\n        hacs.async_dispatch(\n            HacsDispatchEvent.ERROR,\n            {\n                \"action\": \"add_repository\",\n                \"message\": f\"Repository '{repository}' exists in the store.\",\n            },\n        )\n\n    connection.send_message(websocket_api.result_message(msg[\"id\"], {}))\n\n\n@websocket_api.websocket_command(\n    {\n        vol.Required(\"type\"): \"hacs/repositories/remove\",\n        vol.Required(\"repository\"): cv.string,\n    }\n)\n@websocket_api.require_admin\n@websocket_api.async_response\nasync def hacs_repositories_remove(\n    hass: HomeAssistant,\n    connection: websocket_api.ActiveConnection,\n    msg: dict[str, Any],\n):\n    \"\"\"Remove custom repositoriy.\"\"\"\n    hacs: HacsBase = hass.data.get(DOMAIN)\n    hacs.log.warning(connection.context)\n    hacs.log.warning(msg)\n    repository = hacs.repositories.get_by_id(msg[\"repository\"])\n\n    repository.remove()\n    await hacs.data.async_write()\n\n    connection.send_message(websocket_api.result_message(msg[\"id\"], {}))\n"
  },
  {
    "path": "home-assistant/custom_components/hacs/websocket/repository.py",
    "content": "\"\"\"Register info websocket commands.\"\"\"\nfrom __future__ import annotations\n\nfrom typing import TYPE_CHECKING, Any\n\nfrom homeassistant.components import websocket_api\nfrom homeassistant.core import HomeAssistant\nimport homeassistant.helpers.config_validation as cv\nimport voluptuous as vol\n\nfrom ..const import DOMAIN\nfrom ..enums import HacsDispatchEvent\nfrom ..utils.version import version_left_higher_then_right\n\nif TYPE_CHECKING:\n    from ..base import HacsBase\n\n\n@websocket_api.websocket_command(\n    {\n        vol.Required(\"type\"): \"hacs/repository/info\",\n        vol.Required(\"repository_id\"): str,\n    }\n)\n@websocket_api.require_admin\n@websocket_api.async_response\nasync def hacs_repository_info(\n    hass: HomeAssistant,\n    connection: websocket_api.ActiveConnection,\n    msg: dict[str, Any],\n) -> None:\n    \"\"\"Return information about HACS.\"\"\"\n    hacs: HacsBase = hass.data.get(DOMAIN)\n    repository = hacs.repositories.get_by_id(msg[\"repository_id\"])\n    if repository is None:\n        connection.send_error(msg[\"id\"], \"repository_not_found\", \"Repository not found\")\n        return\n\n    if not repository.updated_info:\n        await repository.update_repository(ignore_issues=True, force=True)\n        repository.updated_info = True\n\n    connection.send_message(\n        websocket_api.result_message(\n            msg[\"id\"],\n            {\n                \"additional_info\": repository.additional_info,\n                \"authors\": repository.data.authors,\n                \"available_version\": repository.display_available_version,\n                \"beta\": repository.data.show_beta,\n                \"can_download\": repository.can_download,\n                \"category\": repository.data.category,\n                \"config_flow\": repository.data.config_flow,\n                \"country\": repository.repository_manifest.country,\n                \"custom\": not hacs.repositories.is_default(str(repository.data.id)),\n                \"default_branch\": repository.data.default_branch,\n                \"description\": repository.data.description,\n                \"domain\": repository.data.domain,\n                \"downloads\": repository.data.downloads,\n                \"file_name\": repository.data.file_name,\n                \"full_name\": repository.data.full_name,\n                \"hide_default_branch\": repository.repository_manifest.hide_default_branch,\n                \"homeassistant\": repository.repository_manifest.homeassistant,\n                \"id\": repository.data.id,\n                \"installed_version\": repository.display_installed_version,\n                \"installed\": repository.data.installed,\n                \"issues\": repository.data.open_issues,\n                \"last_updated\": repository.data.last_updated,\n                \"local_path\": repository.content.path.local,\n                \"name\": repository.display_name,\n                \"new\": repository.data.new,\n                \"pending_upgrade\": repository.pending_update,\n                \"releases\": repository.data.published_tags,\n                \"ref\": repository.ref,\n                \"selected_tag\": repository.data.selected_tag,\n                \"stars\": repository.data.stargazers_count,\n                \"state\": repository.state,\n                \"status\": repository.display_status,\n                \"topics\": repository.data.topics,\n                \"version_or_commit\": repository.display_version_or_commit,\n            },\n        )\n    )\n\n\n@websocket_api.websocket_command(\n    {\n        vol.Required(\"type\"): \"hacs/repository/ignore\",\n        vol.Required(\"repository\"): str,\n    }\n)\n@websocket_api.require_admin\n@websocket_api.async_response\nasync def hacs_repository_ignore(\n    hass: HomeAssistant,\n    connection: websocket_api.ActiveConnection,\n    msg: dict[str, Any],\n):\n    \"\"\"Ignore a repository.\"\"\"\n    hacs: HacsBase = hass.data.get(DOMAIN)\n    repository = hacs.repositories.get_by_id(msg[\"repository\"])\n    hacs.common.ignored_repositories.append(repository.data.full_name)\n\n    await hacs.data.async_write()\n    connection.send_message(websocket_api.result_message(msg[\"id\"]))\n\n\n@websocket_api.websocket_command(\n    {\n        vol.Required(\"type\"): \"hacs/repository/state\",\n        vol.Required(\"repository\"): cv.string,\n        vol.Required(\"state\"): cv.string,\n    }\n)\n@websocket_api.require_admin\n@websocket_api.async_response\nasync def hacs_repository_state(\n    hass: HomeAssistant,\n    connection: websocket_api.ActiveConnection,\n    msg: dict[str, Any],\n):\n    \"\"\"Set the state of a repository\"\"\"\n    hacs: HacsBase = hass.data.get(DOMAIN)\n    repository = hacs.repositories.get_by_id(msg[\"repository\"])\n\n    repository.state = msg[\"state\"]\n\n    await hacs.data.async_write()\n    connection.send_message(websocket_api.result_message(msg[\"id\"], {}))\n\n\n@websocket_api.websocket_command(\n    {\n        vol.Required(\"type\"): \"hacs/repository/version\",\n        vol.Required(\"repository\"): cv.string,\n        vol.Required(\"version\"): cv.string,\n    }\n)\n@websocket_api.require_admin\n@websocket_api.async_response\nasync def hacs_repository_version(\n    hass: HomeAssistant,\n    connection: websocket_api.ActiveConnection,\n    msg: dict[str, Any],\n):\n    \"\"\"Set the version of a repository\"\"\"\n    hacs: HacsBase = hass.data.get(DOMAIN)\n    repository = hacs.repositories.get_by_id(msg[\"repository\"])\n\n    if msg[\"version\"] == repository.data.default_branch:\n        repository.data.selected_tag = None\n    else:\n        repository.data.selected_tag = msg[\"version\"]\n\n    await repository.update_repository(force=True)\n    repository.state = None\n\n    await hacs.data.async_write()\n    connection.send_message(websocket_api.result_message(msg[\"id\"], {}))\n\n\n@websocket_api.websocket_command(\n    {\n        vol.Required(\"type\"): \"hacs/repository/beta\",\n        vol.Required(\"repository\"): cv.string,\n        vol.Required(\"show_beta\"): cv.boolean,\n    }\n)\n@websocket_api.require_admin\n@websocket_api.async_response\nasync def hacs_repository_beta(\n    hass: HomeAssistant,\n    connection: websocket_api.ActiveConnection,\n    msg: dict[str, Any],\n):\n    \"\"\"Show or hide beta versions of a repository\"\"\"\n    hacs: HacsBase = hass.data.get(DOMAIN)\n    repository = hacs.repositories.get_by_id(msg[\"repository\"])\n\n    repository.data.show_beta = msg[\"show_beta\"]\n\n    await repository.update_repository(force=True)\n    repository.state = None\n\n    await hacs.data.async_write()\n    connection.send_message(websocket_api.result_message(msg[\"id\"], {}))\n\n\n@websocket_api.websocket_command(\n    {\n        vol.Required(\"type\"): \"hacs/repository/download\",\n        vol.Required(\"repository\"): cv.string,\n        vol.Optional(\"version\"): cv.string,\n    }\n)\n@websocket_api.require_admin\n@websocket_api.async_response\nasync def hacs_repository_download(\n    hass: HomeAssistant,\n    connection: websocket_api.ActiveConnection,\n    msg: dict[str, Any],\n):\n    \"\"\"Set the version of a repository\"\"\"\n    hacs: HacsBase = hass.data.get(DOMAIN)\n    repository = hacs.repositories.get_by_id(msg[\"repository\"])\n\n    was_installed = repository.data.installed\n    if version := msg.get(\"version\"):\n        repository.data.selected_tag = version\n        await repository.update_repository(force=True)\n\n    await repository.async_install()\n    repository.state = None\n    if not was_installed:\n        hacs.async_dispatch(HacsDispatchEvent.RELOAD, {\"force\": True})\n        await hacs.async_recreate_entities()\n\n    await hacs.data.async_write()\n    connection.send_message(websocket_api.result_message(msg[\"id\"], {}))\n\n\n@websocket_api.websocket_command(\n    {\n        vol.Required(\"type\"): \"hacs/repository/remove\",\n        vol.Required(\"repository\"): cv.string,\n    }\n)\n@websocket_api.require_admin\n@websocket_api.async_response\nasync def hacs_repository_remove(\n    hass: HomeAssistant,\n    connection: websocket_api.ActiveConnection,\n    msg: dict[str, Any],\n):\n    \"\"\"Remove a repository.\"\"\"\n    hacs: HacsBase = hass.data.get(DOMAIN)\n    repository = hacs.repositories.get_by_id(msg[\"repository\"])\n\n    repository.data.new = False\n    await repository.update_repository(ignore_issues=True, force=True)\n    await repository.uninstall()\n\n    await hacs.data.async_write()\n    connection.send_message(websocket_api.result_message(msg[\"id\"], {}))\n\n\n@websocket_api.websocket_command(\n    {\n        vol.Required(\"type\"): \"hacs/repository/refresh\",\n        vol.Required(\"repository\"): cv.string,\n    }\n)\n@websocket_api.require_admin\n@websocket_api.async_response\nasync def hacs_repository_refresh(\n    hass: HomeAssistant,\n    connection: websocket_api.ActiveConnection,\n    msg: dict[str, Any],\n):\n    \"\"\"Refresh a repository.\"\"\"\n    hacs: HacsBase = hass.data.get(DOMAIN)\n    repository = hacs.repositories.get_by_id(msg[\"repository\"])\n\n    await repository.update_repository(ignore_issues=True, force=True)\n    await hacs.data.async_write()\n\n    connection.send_message(websocket_api.result_message(msg[\"id\"], {}))\n\n\n@websocket_api.websocket_command(\n    {\n        vol.Required(\"type\"): \"hacs/repository/release_notes\",\n        vol.Required(\"repository\"): cv.string,\n    }\n)\n@websocket_api.require_admin\n@websocket_api.async_response\nasync def hacs_repository_release_notes(\n    hass: HomeAssistant,\n    connection: websocket_api.ActiveConnection,\n    msg: dict[str, Any],\n):\n    \"\"\"Return release notes.\"\"\"\n    hacs: HacsBase = hass.data.get(DOMAIN)\n    repository = hacs.repositories.get_by_id(msg[\"repository\"])\n\n    connection.send_message(\n        websocket_api.result_message(\n            msg[\"id\"],\n            [\n                {\n                    \"name\": x.name,\n                    \"body\": x.body,\n                    \"tag\": x.tag_name,\n                }\n                for x in repository.releases.objects\n                if not repository.data.installed_version\n                or version_left_higher_then_right(x.tag_name, repository.data.installed_version)\n            ],\n        )\n    )\n"
  },
  {
    "path": "home-assistant/custom_components/harvest/__init__.py",
    "content": "\n__version__ = '1.0.0'"
  },
  {
    "path": "home-assistant/custom_components/harvest/sensor.py",
    "content": "\"\"\"\nFetch how much work time is harvested on getharvest.com\n\"\"\"\n\nimport voluptuous as vol\nimport logging\nimport homeassistant.helpers.config_validation as cv\nimport async_timeout\nimport aiohttp\nimport asyncio\nimport homeassistant.util as util\n\nfrom aiohttp.hdrs import AUTHORIZATION\nfrom datetime import timedelta, datetime\nfrom homeassistant.helpers.aiohttp_client import async_get_clientsession\nfrom homeassistant.const import CONF_TOKEN, CONF_NAME, STATE_OFF, STATE_ON\nfrom homeassistant.helpers.entity import Entity\nfrom homeassistant.helpers.config_validation import PLATFORM_SCHEMA\n\nCONF_ACCOUNT_ID = 'account_id'\nTIMEOUT = 10\nMIN_TIME_BETWEEN_SCANS = timedelta(seconds=15)\nMIN_TIME_BETWEEN_FORCED_SCANS = timedelta(seconds=1)\nENDPOINT=\"https://api.harvestapp.com/v2/time_entries\"\n\nPLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({\n  vol.Required(CONF_ACCOUNT_ID): cv.string,\n  vol.Required(CONF_TOKEN): cv.string,\n  vol.Required(CONF_NAME): cv.string\n})\n\n_LOGGER = logging.getLogger(__name__)\n\ndef setup_platform(hass, config, add_devices, discovery_info=None):\n  account_id = config.get(CONF_ACCOUNT_ID)\n  token = config.get(CONF_TOKEN)\n  name = config.get(CONF_NAME)\n\n  websession = async_get_clientsession(hass)\n\n  add_devices([HarvestSensor(hass, websession, account_id, token, name)])\n\n\nclass HarvestSensor(Entity):\n  \"\"\"Representation of a Sensor.\"\"\"\n\n  def __init__(self, hass, websession, account_id, token, name):\n    \"\"\"Initialize the sensor.\"\"\"\n    self.hass\n    self.websession = websession\n    self.account_id = account_id\n    self.token = token\n    self._name = name\n    self._minutes = 0\n    self._state = None\n\n  @property\n  def name(self):\n    \"\"\"Return the name of the sensor.\"\"\"\n    return self._name\n\n  @property\n  def state(self):\n    \"\"\"Return the state of the sensor.\"\"\"\n    if self._state:\n      return STATE_ON\n    else:\n      return STATE_OFF\n\n  @property\n  def state_attributes(self):\n    return {\n      'minutes': self._minutes\n    }\n\n  def is_active(self, data):\n    for entry in data['time_entries']:\n      if entry['is_running']:\n        return True\n    return False\n\n  def calculate_time(self, data):\n    time_entries = data['time_entries']\n    minutes = [round(entry['hours'] * 60.0) for entry in time_entries]\n    return sum(minutes)\n\n  @util.Throttle(MIN_TIME_BETWEEN_SCANS, MIN_TIME_BETWEEN_FORCED_SCANS)\n  async def async_update(self):\n    headers = {\n      AUTHORIZATION: \"Bearer {}\".format(self.token),\n      \"Harvest-Account-ID\": self.account_id\n    }\n    try:\n      with async_timeout.timeout(TIMEOUT, loop=self.hass.loop):\n        response = await self.websession.get(ENDPOINT, headers=headers, params={ \"from\": datetime.today().strftime(\"%Y-%m-%d\") })\n        data = await response.json(content_type=None)\n        self._state = self.is_active(data)\n        self._minutes = self.calculate_time(data)\n        #_LOGGER.info(\"Data: {}\".format(data))\n    except (asyncio.TimeoutError, aiohttp.ClientError, IndexError) as error:\n      _LOGGER.error(\"Failed getting devices: %s\", error)\n"
  },
  {
    "path": "home-assistant/custom_components/it_will_rain/manifest.json",
    "content": "{\n  \"domain\": \"it_will_rain\",\n  \"name\": \"ItWillRain\",\n  \"documentation\": \"http://macbury.ninja\",\n  \"requirements\": [\n  ],\n  \"dependencies\": [],\n  \"codeowners\": [\n    \"@macbury\"\n  ]\n}"
  },
  {
    "path": "home-assistant/custom_components/it_will_rain/sensor.py",
    "content": "\"\"\"\nCheck if it will rain using darksky component\n\"\"\"\n\nimport voluptuous as vol\nimport logging\nimport homeassistant.helpers.config_validation as cv\nimport async_timeout\nimport aiohttp\nimport asyncio\nimport homeassistant.util as util\n\nfrom aiohttp.hdrs import AUTHORIZATION\nfrom datetime import timedelta, datetime\nfrom homeassistant.helpers.aiohttp_client import async_get_clientsession\nfrom homeassistant.const import CONF_NAME, CONF_ENTITY_ID, STATE_OFF, STATE_ON, STATE_UNKNOWN\nfrom homeassistant.helpers.entity import Entity\nfrom homeassistant.helpers.config_validation import PLATFORM_SCHEMA\n\nMIN_TIME_BETWEEN_SCANS = timedelta(seconds=15)\nMIN_TIME_BETWEEN_FORCED_SCANS = timedelta(seconds=1)\n\nPLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({\n  vol.Required(CONF_ENTITY_ID): cv.string,\n  vol.Required(CONF_NAME): cv.string,\n})\n\n_LOGGER = logging.getLogger(__name__)\n\ndef setup_platform(hass, config, add_devices, discovery_info=None):\n  entity_id = config.get(CONF_ENTITY_ID)\n  name = config.get(CONF_NAME)\n\n  add_devices([ItWillRain(hass, entity_id, name)])\n\n\nclass ItWillRain(Entity):\n  \"\"\"Representation of a Sensor.\"\"\"\n\n  def __init__(self, hass, entity_id, name):\n    \"\"\"Initialize the sensor.\"\"\"\n    self.hass = hass\n    self._entity_id = entity_id\n    self._name = name\n    self._state = STATE_UNKNOWN\n\n  @property\n  def name(self):\n    \"\"\"Return the name of the sensor.\"\"\"\n    return self._name\n\n  @property\n  def state(self):\n    \"\"\"Return the state of the sensor.\"\"\"\n    return self._state\n\n  @util.Throttle(MIN_TIME_BETWEEN_SCANS, MIN_TIME_BETWEEN_FORCED_SCANS)\n  async def async_update(self):\n    state = self.hass.states.get(self._entity_id)\n    if not state:\n      _LOGGER.error('Entity does not exists')\n      self._state = STATE_UNKNOWN\n      return\n\n    forecasts = state.attributes.get('forecast')\n\n    if not forecasts:\n      _LOGGER.error('There is no forecast')\n      self._state = STATE_OFF\n      return\n\n    self._state = STATE_OFF\n\n    for forecast in forecasts[0:9]:\n      if forecast['precipitation']:\n        precipitation = float(forecast['precipitation'])\n        if precipitation and precipitation >= 0.0:\n          self._state = STATE_ON\n      \n"
  },
  {
    "path": "home-assistant/custom_components/kkm/__init__.py",
    "content": "\n\"\"\"Bus card Tracker.\"\"\"\n\n__version__ = '1.0.0'"
  },
  {
    "path": "home-assistant/custom_components/kkm/manifest.json",
    "content": "{\n  \"domain\": \"kkm\",\n  \"name\": \"KKMSensor\",\n  \"documentation\": \"http://macbury.ninja\",\n  \"requirements\": [\n    \"beautifulsoup4==4.6.3\"\n  ],\n  \"dependencies\": [],\n  \"codeowners\": [\n    \"@macbury\"\n  ]\n}"
  },
  {
    "path": "home-assistant/custom_components/kkm/sensor.py",
    "content": "\"\"\"\nFetch how many days you have left on your train card from http://www.mpk.krakow.pl/\n\"\"\"\n\nimport voluptuous as vol\nimport logging\nimport homeassistant.helpers.config_validation as cv\nimport async_timeout\nimport aiohttp\nimport asyncio\nimport homeassistant.util as util\n\nfrom datetime import timedelta, datetime\nimport time\nfrom homeassistant.helpers.aiohttp_client import async_get_clientsession\nfrom homeassistant.const import CONF_NAME, STATE_OFF, STATE_ON\nfrom homeassistant.helpers.entity import Entity\nfrom homeassistant.helpers.config_validation import PLATFORM_SCHEMA\n\nREQUIREMENTS = ['beautifulsoup4==4.6.3']\n\nCONF_IDENTITY = 'identity'\nCONF_CITY_CARD = 'city_card'\nTIMEOUT = 60\nMIN_TIME_BETWEEN_SCANS = timedelta(minutes=60)\nMIN_TIME_BETWEEN_FORCED_SCANS = timedelta(seconds=30)\nENDPOINT=\"http://www.mpk.krakow.pl/pl/sprawdz-waznosc-biletu/index,1.html\"\n\nPLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({\n  vol.Required(CONF_IDENTITY): cv.string,\n  vol.Required(CONF_CITY_CARD): cv.string,\n  vol.Required(CONF_NAME): cv.string\n})\n\n_LOGGER = logging.getLogger(__name__)\n\ndef setup_platform(hass, config, add_devices, discovery_info=None):\n  city_card_id = config.get(CONF_CITY_CARD)\n  identity_id = config.get(CONF_IDENTITY)\n  name = config.get(CONF_NAME)\n\n  add_devices([KKMSensor(hass, city_card_id, identity_id, name)])\n\nclass KKMSensor(Entity):\n  \"\"\"Representation of a Sensor.\"\"\"\n\n  def __init__(self, hass, city_card_id, identity_id, name):\n    \"\"\"Initialize the sensor.\"\"\"\n    self.hass = hass\n    self.websession = async_get_clientsession(hass)\n    self.city_card_id = city_card_id\n    self.identity_id = identity_id\n    self._lines = []\n    self._name = name\n    self._expire_at = None\n    self._state = STATE_OFF\n\n  @property\n  def name(self):\n    \"\"\"Return the name of the sensor.\"\"\"\n    return self._name\n\n  @property\n  def state(self):\n    \"\"\"Return the state of the sensor.\"\"\"\n    return self._state\n\n  def days(self):\n    if self._expire_at:\n      days = (self._expire_at - datetime.today()).days\n      if days < 0:\n        days = 0\n      return days\n    else:\n      return 0\n\n  def extract_date(self, raw_data):\n    try:\n      date = raw_data.select(\".kkm-card div:nth-of-type(8) b\")[0].string\n      d = time.strptime(date, '%Y-%m-%d')\n      self._expire_at = datetime(*d[:6])\n      self._lines = raw_data.select(\".kkm-card div:nth-of-type(10) b\")[0].string.split(',')\n    except IndexError as error:\n      _LOGGER.error(\"Failed to extract date from page: %s\", error)\n\n  @property\n  def state_attributes(self):\n    return {\n      'days': self.days(),\n      'expire_at': self._expire_at,\n      'lines': self._lines\n    }\n\n  @util.Throttle(MIN_TIME_BETWEEN_SCANS, MIN_TIME_BETWEEN_FORCED_SCANS)\n  async def async_update(self):\n    try:\n      from bs4 import BeautifulSoup\n      with async_timeout.timeout(TIMEOUT, loop=self.hass.loop):\n        response = await self.websession.get(ENDPOINT, params={ \"identityNumber\": self.identity_id, \"cityCardNumber\": self.city_card_id })\n        data = await response.text()\n        #_LOGGER.debug(data)\n        raw_data = BeautifulSoup(data, 'html.parser')\n        self.extract_date(raw_data)\n\n        if self.days() == 0:\n          self._state = STATE_OFF\n        else:\n          self._state = STATE_ON\n    except (asyncio.TimeoutError, aiohttp.ClientError) as error:\n      _LOGGER.error(\"Failed getting kkm information: %s\", error)\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/__init__.py",
    "content": "\"\"\"The LocalTuya integration.\"\"\"\nimport asyncio\nimport logging\nimport time\nfrom datetime import timedelta\n\nimport homeassistant.helpers.config_validation as cv\nimport homeassistant.helpers.entity_registry as er\nimport voluptuous as vol\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.const import (\n    CONF_CLIENT_ID,\n    CONF_CLIENT_SECRET,\n    CONF_DEVICE_ID,\n    CONF_DEVICES,\n    CONF_ENTITIES,\n    CONF_HOST,\n    CONF_ID,\n    CONF_PLATFORM,\n    CONF_REGION,\n    CONF_USERNAME,\n    EVENT_HOMEASSISTANT_STOP,\n    SERVICE_RELOAD,\n)\nfrom homeassistant.core import HomeAssistant\nfrom homeassistant.exceptions import HomeAssistantError\nfrom homeassistant.helpers.device_registry import DeviceEntry\nfrom homeassistant.helpers.event import async_track_time_interval\n\nfrom .cloud_api import TuyaCloudApi\nfrom .common import TuyaDevice, async_config_entry_by_device_id\nfrom .config_flow import ENTRIES_VERSION, config_schema\nfrom .const import (\n    ATTR_UPDATED_AT,\n    CONF_NO_CLOUD,\n    CONF_PRODUCT_KEY,\n    CONF_USER_ID,\n    DATA_CLOUD,\n    DATA_DISCOVERY,\n    DOMAIN,\n    TUYA_DEVICES,\n)\nfrom .discovery import TuyaDiscovery\n\n_LOGGER = logging.getLogger(__name__)\n\nUNSUB_LISTENER = \"unsub_listener\"\n\nRECONNECT_INTERVAL = timedelta(seconds=60)\n\nCONFIG_SCHEMA = config_schema()\n\nCONF_DP = \"dp\"\nCONF_VALUE = \"value\"\n\nSERVICE_SET_DP = \"set_dp\"\nSERVICE_SET_DP_SCHEMA = vol.Schema(\n    {\n        vol.Required(CONF_DEVICE_ID): cv.string,\n        vol.Required(CONF_DP): int,\n        vol.Required(CONF_VALUE): object,\n    }\n)\n\n\nasync def async_setup(hass: HomeAssistant, config: dict):\n    \"\"\"Set up the LocalTuya integration component.\"\"\"\n    hass.data.setdefault(DOMAIN, {})\n    hass.data[DOMAIN][TUYA_DEVICES] = {}\n\n    device_cache = {}\n\n    async def _handle_reload(service):\n        \"\"\"Handle reload service call.\"\"\"\n        _LOGGER.info(\"Service %s.reload called: reloading integration\", DOMAIN)\n\n        current_entries = hass.config_entries.async_entries(DOMAIN)\n\n        reload_tasks = [\n            hass.config_entries.async_reload(entry.entry_id)\n            for entry in current_entries\n        ]\n\n        await asyncio.gather(*reload_tasks)\n\n    async def _handle_set_dp(event):\n        \"\"\"Handle set_dp service call.\"\"\"\n        dev_id = event.data[CONF_DEVICE_ID]\n        if dev_id not in hass.data[DOMAIN][TUYA_DEVICES]:\n            raise HomeAssistantError(\"unknown device id\")\n\n        device = hass.data[DOMAIN][TUYA_DEVICES][dev_id]\n        if not device.connected:\n            raise HomeAssistantError(\"not connected to device\")\n\n        await device.set_dp(event.data[CONF_VALUE], event.data[CONF_DP])\n\n    def _device_discovered(device):\n        \"\"\"Update address of device if it has changed.\"\"\"\n        device_ip = device[\"ip\"]\n        device_id = device[\"gwId\"]\n        product_key = device[\"productKey\"]\n\n        # If device is not in cache, check if a config entry exists\n        entry = async_config_entry_by_device_id(hass, device_id)\n        if entry is None:\n            return\n\n        if device_id not in device_cache:\n            if entry and device_id in entry.data[CONF_DEVICES]:\n                # Save address from config entry in cache to trigger\n                # potential update below\n                host_ip = entry.data[CONF_DEVICES][device_id][CONF_HOST]\n                device_cache[device_id] = host_ip\n\n        if device_id not in device_cache:\n            return\n\n        dev_entry = entry.data[CONF_DEVICES][device_id]\n\n        new_data = entry.data.copy()\n        updated = False\n\n        if device_cache[device_id] != device_ip:\n            updated = True\n            new_data[CONF_DEVICES][device_id][CONF_HOST] = device_ip\n            device_cache[device_id] = device_ip\n\n        if dev_entry.get(CONF_PRODUCT_KEY) != product_key:\n            updated = True\n            new_data[CONF_DEVICES][device_id][CONF_PRODUCT_KEY] = product_key\n\n        # Update settings if something changed, otherwise try to connect. Updating\n        # settings triggers a reload of the config entry, which tears down the device\n        # so no need to connect in that case.\n        if updated:\n            _LOGGER.debug(\n                \"Updating keys for device %s: %s %s\", device_id, device_ip, product_key\n            )\n            new_data[ATTR_UPDATED_AT] = str(int(time.time() * 1000))\n            hass.config_entries.async_update_entry(entry, data=new_data)\n            device = hass.data[DOMAIN][TUYA_DEVICES][device_id]\n            if not device.connected:\n                device.async_connect()\n        elif device_id in hass.data[DOMAIN][TUYA_DEVICES]:\n            # _LOGGER.debug(\"Device %s found with IP %s\", device_id, device_ip)\n\n            device = hass.data[DOMAIN][TUYA_DEVICES][device_id]\n            if not device.connected:\n                device.async_connect()\n\n    def _shutdown(event):\n        \"\"\"Clean up resources when shutting down.\"\"\"\n        discovery.close()\n\n    async def _async_reconnect(now):\n        \"\"\"Try connecting to devices not already connected to.\"\"\"\n        for device_id, device in hass.data[DOMAIN][TUYA_DEVICES].items():\n            if not device.connected:\n                device.async_connect()\n\n    async_track_time_interval(hass, _async_reconnect, RECONNECT_INTERVAL)\n\n    hass.helpers.service.async_register_admin_service(\n        DOMAIN,\n        SERVICE_RELOAD,\n        _handle_reload,\n    )\n\n    hass.helpers.service.async_register_admin_service(\n        DOMAIN, SERVICE_SET_DP, _handle_set_dp, schema=SERVICE_SET_DP_SCHEMA\n    )\n\n    discovery = TuyaDiscovery(_device_discovered)\n    try:\n        await discovery.start()\n        hass.data[DOMAIN][DATA_DISCOVERY] = discovery\n        hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, _shutdown)\n    except Exception:  # pylint: disable=broad-except\n        _LOGGER.exception(\"failed to set up discovery\")\n\n    return True\n\n\nasync def async_migrate_entry(hass, config_entry: ConfigEntry):\n    \"\"\"Migrate old entries merging all of them in one.\"\"\"\n    new_version = ENTRIES_VERSION\n    stored_entries = hass.config_entries.async_entries(DOMAIN)\n    if config_entry.version == 1:\n        _LOGGER.debug(\"Migrating config entry from version %s\", config_entry.version)\n\n        if config_entry.entry_id == stored_entries[0].entry_id:\n            _LOGGER.debug(\n                \"Migrating the first config entry (%s)\", config_entry.entry_id\n            )\n            new_data = {}\n            new_data[CONF_REGION] = \"eu\"\n            new_data[CONF_CLIENT_ID] = \"\"\n            new_data[CONF_CLIENT_SECRET] = \"\"\n            new_data[CONF_USER_ID] = \"\"\n            new_data[CONF_USERNAME] = DOMAIN\n            new_data[CONF_NO_CLOUD] = True\n            new_data[CONF_DEVICES] = {\n                config_entry.data[CONF_DEVICE_ID]: config_entry.data.copy()\n            }\n            new_data[ATTR_UPDATED_AT] = str(int(time.time() * 1000))\n            config_entry.version = new_version\n            hass.config_entries.async_update_entry(\n                config_entry, title=DOMAIN, data=new_data\n            )\n        else:\n            _LOGGER.debug(\n                \"Merging the config entry %s into the main one\", config_entry.entry_id\n            )\n            new_data = stored_entries[0].data.copy()\n            new_data[CONF_DEVICES].update(\n                {config_entry.data[CONF_DEVICE_ID]: config_entry.data.copy()}\n            )\n            new_data[ATTR_UPDATED_AT] = str(int(time.time() * 1000))\n            hass.config_entries.async_update_entry(stored_entries[0], data=new_data)\n            await hass.config_entries.async_remove(config_entry.entry_id)\n\n    _LOGGER.info(\n        \"Entry %s successfully migrated to version %s.\",\n        config_entry.entry_id,\n        new_version,\n    )\n\n    return True\n\n\nasync def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):\n    \"\"\"Set up LocalTuya integration from a config entry.\"\"\"\n    if entry.version < ENTRIES_VERSION:\n        _LOGGER.debug(\n            \"Skipping setup for entry %s since its version (%s) is old\",\n            entry.entry_id,\n            entry.version,\n        )\n        return\n\n    region = entry.data[CONF_REGION]\n    client_id = entry.data[CONF_CLIENT_ID]\n    secret = entry.data[CONF_CLIENT_SECRET]\n    user_id = entry.data[CONF_USER_ID]\n    tuya_api = TuyaCloudApi(hass, region, client_id, secret, user_id)\n    no_cloud = True\n    if CONF_NO_CLOUD in entry.data:\n        no_cloud = entry.data.get(CONF_NO_CLOUD)\n    if no_cloud:\n        _LOGGER.info(\"Cloud API account not configured.\")\n        # wait 1 second to make sure possible migration has finished\n        await asyncio.sleep(1)\n    else:\n        res = await tuya_api.async_get_access_token()\n        if res != \"ok\":\n            _LOGGER.error(\"Cloud API connection failed: %s\", res)\n        _LOGGER.info(\"Cloud API connection succeeded.\")\n        res = await tuya_api.async_get_devices_list()\n    hass.data[DOMAIN][DATA_CLOUD] = tuya_api\n\n    async def setup_entities(device_ids):\n        platforms = set()\n        for dev_id in device_ids:\n            entities = entry.data[CONF_DEVICES][dev_id][CONF_ENTITIES]\n            platforms = platforms.union(\n                set(entity[CONF_PLATFORM] for entity in entities)\n            )\n            hass.data[DOMAIN][TUYA_DEVICES][dev_id] = TuyaDevice(hass, entry, dev_id)\n\n        await asyncio.gather(\n            *[\n                hass.config_entries.async_forward_entry_setup(entry, platform)\n                for platform in platforms\n            ]\n        )\n\n        for dev_id in device_ids:\n            hass.data[DOMAIN][TUYA_DEVICES][dev_id].async_connect()\n\n        await async_remove_orphan_entities(hass, entry)\n\n    hass.async_create_task(setup_entities(entry.data[CONF_DEVICES].keys()))\n\n    unsub_listener = entry.add_update_listener(update_listener)\n    hass.data[DOMAIN][entry.entry_id] = {UNSUB_LISTENER: unsub_listener}\n\n    return True\n\n\nasync def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):\n    \"\"\"Unload a config entry.\"\"\"\n    platforms = {}\n\n    for dev_id, dev_entry in entry.data[CONF_DEVICES].items():\n        for entity in dev_entry[CONF_ENTITIES]:\n            platforms[entity[CONF_PLATFORM]] = True\n\n    unload_ok = all(\n        await asyncio.gather(\n            *[\n                hass.config_entries.async_forward_entry_unload(entry, component)\n                for component in platforms\n            ]\n        )\n    )\n\n    hass.data[DOMAIN][entry.entry_id][UNSUB_LISTENER]()\n    for dev_id, device in hass.data[DOMAIN][TUYA_DEVICES].items():\n        if device.connected:\n            await device.close()\n\n    if unload_ok:\n        hass.data[DOMAIN][TUYA_DEVICES] = {}\n\n    return True\n\n\nasync def update_listener(hass, config_entry):\n    \"\"\"Update listener.\"\"\"\n    await hass.config_entries.async_reload(config_entry.entry_id)\n\n\nasync def async_remove_config_entry_device(\n    hass: HomeAssistant, config_entry: ConfigEntry, device_entry: DeviceEntry\n) -> bool:\n    \"\"\"Remove a config entry from a device.\"\"\"\n    dev_id = list(device_entry.identifiers)[0][1].split(\"_\")[-1]\n\n    ent_reg = er.async_get(hass)\n    entities = {\n        ent.unique_id: ent.entity_id\n        for ent in er.async_entries_for_config_entry(ent_reg, config_entry.entry_id)\n        if dev_id in ent.unique_id\n    }\n    for entity_id in entities.values():\n        ent_reg.async_remove(entity_id)\n\n    if dev_id not in config_entry.data[CONF_DEVICES]:\n        _LOGGER.info(\n            \"Device %s not found in config entry: finalizing device removal\", dev_id\n        )\n        return True\n\n    await hass.data[DOMAIN][TUYA_DEVICES][dev_id].close()\n\n    new_data = config_entry.data.copy()\n    new_data[CONF_DEVICES].pop(dev_id)\n    new_data[ATTR_UPDATED_AT] = str(int(time.time() * 1000))\n\n    hass.config_entries.async_update_entry(\n        config_entry,\n        data=new_data,\n    )\n\n    _LOGGER.info(\"Device %s removed.\", dev_id)\n\n    return True\n\n\nasync def async_remove_orphan_entities(hass, entry):\n    \"\"\"Remove entities associated with config entry that has been removed.\"\"\"\n    return\n    ent_reg = er.async_get(hass)\n    entities = {\n        ent.unique_id: ent.entity_id\n        for ent in er.async_entries_for_config_entry(ent_reg, entry.entry_id)\n    }\n    _LOGGER.info(\"ENTITIES ORPHAN %s\", entities)\n    return\n\n    for entity in entry.data[CONF_ENTITIES]:\n        if entity[CONF_ID] in entities:\n            del entities[entity[CONF_ID]]\n\n    for entity_id in entities.values():\n        ent_reg.async_remove(entity_id)\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/binary_sensor.py",
    "content": "\"\"\"Platform to present any Tuya DP as a binary sensor.\"\"\"\nimport logging\nfrom functools import partial\n\nimport voluptuous as vol\nfrom homeassistant.components.binary_sensor import (\n    DEVICE_CLASSES_SCHEMA,\n    DOMAIN,\n    BinarySensorEntity,\n)\nfrom homeassistant.const import CONF_DEVICE_CLASS\n\nfrom .common import LocalTuyaEntity, async_setup_entry\n\n_LOGGER = logging.getLogger(__name__)\n\nCONF_STATE_ON = \"state_on\"\nCONF_STATE_OFF = \"state_off\"\n\n\ndef flow_schema(dps):\n    \"\"\"Return schema used in config flow.\"\"\"\n    return {\n        vol.Required(CONF_STATE_ON, default=\"True\"): str,\n        vol.Required(CONF_STATE_OFF, default=\"False\"): str,\n        vol.Optional(CONF_DEVICE_CLASS): DEVICE_CLASSES_SCHEMA,\n    }\n\n\nclass LocaltuyaBinarySensor(LocalTuyaEntity, BinarySensorEntity):\n    \"\"\"Representation of a Tuya binary sensor.\"\"\"\n\n    def __init__(\n        self,\n        device,\n        config_entry,\n        sensorid,\n        **kwargs,\n    ):\n        \"\"\"Initialize the Tuya binary sensor.\"\"\"\n        super().__init__(device, config_entry, sensorid, _LOGGER, **kwargs)\n        self._is_on = False\n\n    @property\n    def is_on(self):\n        \"\"\"Return sensor state.\"\"\"\n        return self._is_on\n\n    @property\n    def device_class(self):\n        \"\"\"Return the class of this device.\"\"\"\n        return self._config.get(CONF_DEVICE_CLASS)\n\n    def status_updated(self):\n        \"\"\"Device status was updated.\"\"\"\n        state = str(self.dps(self._dp_id)).lower()\n        if state == self._config[CONF_STATE_ON].lower():\n            self._is_on = True\n        elif state == self._config[CONF_STATE_OFF].lower():\n            self._is_on = False\n        else:\n            self.warning(\n                \"State for entity %s did not match state patterns\", self.entity_id\n            )\n\n\nasync_setup_entry = partial(\n    async_setup_entry, DOMAIN, LocaltuyaBinarySensor, flow_schema\n)\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/climate.py",
    "content": "\"\"\"Platform to locally control Tuya-based climate devices.\"\"\"\nimport asyncio\nimport logging\nfrom functools import partial\n\nimport voluptuous as vol\nfrom homeassistant.components.climate import (\n    DEFAULT_MAX_TEMP,\n    DEFAULT_MIN_TEMP,\n    DOMAIN,\n    ClimateEntity,\n)\nfrom homeassistant.components.climate.const import (\n    CURRENT_HVAC_HEAT,\n    CURRENT_HVAC_IDLE,\n    HVAC_MODE_AUTO,\n    HVAC_MODE_HEAT,\n    HVAC_MODE_OFF,\n    PRESET_AWAY,\n    PRESET_ECO,\n    PRESET_HOME,\n    PRESET_NONE,\n    SUPPORT_PRESET_MODE,\n    SUPPORT_TARGET_TEMPERATURE,\n    SUPPORT_TARGET_TEMPERATURE_RANGE,\n)\nfrom homeassistant.const import (\n    ATTR_TEMPERATURE,\n    CONF_TEMPERATURE_UNIT,\n    PRECISION_HALVES,\n    PRECISION_TENTHS,\n    PRECISION_WHOLE,\n    TEMP_CELSIUS,\n    TEMP_FAHRENHEIT,\n)\n\nfrom .common import LocalTuyaEntity, async_setup_entry\nfrom .const import (\n    CONF_CURRENT_TEMPERATURE_DP,\n    CONF_ECO_DP,\n    CONF_ECO_VALUE,\n    CONF_HEURISTIC_ACTION,\n    CONF_HVAC_ACTION_DP,\n    CONF_HVAC_ACTION_SET,\n    CONF_HVAC_MODE_DP,\n    CONF_HVAC_MODE_SET,\n    CONF_MAX_TEMP_DP,\n    CONF_MIN_TEMP_DP,\n    CONF_PRECISION,\n    CONF_PRESET_DP,\n    CONF_PRESET_SET,\n    CONF_TARGET_PRECISION,\n    CONF_TARGET_TEMPERATURE_DP,\n    CONF_TEMPERATURE_STEP,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\nHVAC_MODE_SETS = {\n    \"manual/auto\": {\n        HVAC_MODE_HEAT: \"manual\",\n        HVAC_MODE_AUTO: \"auto\",\n    },\n    \"Manual/Auto\": {\n        HVAC_MODE_HEAT: \"Manual\",\n        HVAC_MODE_AUTO: \"Auto\",\n    },\n    \"Manual/Program\": {\n        HVAC_MODE_HEAT: \"Manual\",\n        HVAC_MODE_AUTO: \"Program\",\n    },\n    \"True/False\": {\n        HVAC_MODE_HEAT: True,\n    },\n}\nHVAC_ACTION_SETS = {\n    \"True/False\": {\n        CURRENT_HVAC_HEAT: True,\n        CURRENT_HVAC_IDLE: False,\n    },\n    \"open/close\": {\n        CURRENT_HVAC_HEAT: \"open\",\n        CURRENT_HVAC_IDLE: \"close\",\n    },\n    \"heating/no_heating\": {\n        CURRENT_HVAC_HEAT: \"heating\",\n        CURRENT_HVAC_IDLE: \"no_heating\",\n    },\n    \"Heat/Warming\": {\n        CURRENT_HVAC_HEAT: \"Heat\",\n        CURRENT_HVAC_IDLE: \"Warming\",\n    },\n}\nPRESET_SETS = {\n    \"Manual/Holiday/Program\": {\n        PRESET_AWAY: \"Holiday\",\n        PRESET_HOME: \"Program\",\n        PRESET_NONE: \"Manual\",\n    },\n}\n\nTEMPERATURE_CELSIUS = \"celsius\"\nTEMPERATURE_FAHRENHEIT = \"fahrenheit\"\nDEFAULT_TEMPERATURE_UNIT = TEMPERATURE_CELSIUS\nDEFAULT_PRECISION = PRECISION_TENTHS\nDEFAULT_TEMPERATURE_STEP = PRECISION_HALVES\n# Empirically tested to work for AVATTO thermostat\nMODE_WAIT = 0.1\n\n\ndef flow_schema(dps):\n    \"\"\"Return schema used in config flow.\"\"\"\n    return {\n        vol.Optional(CONF_TARGET_TEMPERATURE_DP): vol.In(dps),\n        vol.Optional(CONF_CURRENT_TEMPERATURE_DP): vol.In(dps),\n        vol.Optional(CONF_TEMPERATURE_STEP): vol.In(\n            [PRECISION_WHOLE, PRECISION_HALVES, PRECISION_TENTHS]\n        ),\n        vol.Optional(CONF_MAX_TEMP_DP): vol.In(dps),\n        vol.Optional(CONF_MIN_TEMP_DP): vol.In(dps),\n        vol.Optional(CONF_PRECISION): vol.In(\n            [PRECISION_WHOLE, PRECISION_HALVES, PRECISION_TENTHS]\n        ),\n        vol.Optional(CONF_HVAC_MODE_DP): vol.In(dps),\n        vol.Optional(CONF_HVAC_MODE_SET): vol.In(list(HVAC_MODE_SETS.keys())),\n        vol.Optional(CONF_HVAC_ACTION_DP): vol.In(dps),\n        vol.Optional(CONF_HVAC_ACTION_SET): vol.In(list(HVAC_ACTION_SETS.keys())),\n        vol.Optional(CONF_ECO_DP): vol.In(dps),\n        vol.Optional(CONF_ECO_VALUE): str,\n        vol.Optional(CONF_PRESET_DP): vol.In(dps),\n        vol.Optional(CONF_PRESET_SET): vol.In(list(PRESET_SETS.keys())),\n        vol.Optional(CONF_TEMPERATURE_UNIT): vol.In(\n            [TEMPERATURE_CELSIUS, TEMPERATURE_FAHRENHEIT]\n        ),\n        vol.Optional(CONF_TARGET_PRECISION): vol.In(\n            [PRECISION_WHOLE, PRECISION_HALVES, PRECISION_TENTHS]\n        ),\n        vol.Optional(CONF_HEURISTIC_ACTION): bool,\n    }\n\n\nclass LocaltuyaClimate(LocalTuyaEntity, ClimateEntity):\n    \"\"\"Tuya climate device.\"\"\"\n\n    def __init__(\n        self,\n        device,\n        config_entry,\n        switchid,\n        **kwargs,\n    ):\n        \"\"\"Initialize a new LocaltuyaClimate.\"\"\"\n        super().__init__(device, config_entry, switchid, _LOGGER, **kwargs)\n        self._state = None\n        self._target_temperature = None\n        self._current_temperature = None\n        self._hvac_mode = None\n        self._preset_mode = None\n        self._hvac_action = None\n        self._precision = self._config.get(CONF_PRECISION, DEFAULT_PRECISION)\n        self._target_precision = self._config.get(\n            CONF_TARGET_PRECISION, self._precision\n        )\n        self._conf_hvac_mode_dp = self._config.get(CONF_HVAC_MODE_DP)\n        self._conf_hvac_mode_set = HVAC_MODE_SETS.get(\n            self._config.get(CONF_HVAC_MODE_SET), {}\n        )\n        self._conf_preset_dp = self._config.get(CONF_PRESET_DP)\n        self._conf_preset_set = PRESET_SETS.get(self._config.get(CONF_PRESET_SET), {})\n        self._conf_hvac_action_dp = self._config.get(CONF_HVAC_ACTION_DP)\n        self._conf_hvac_action_set = HVAC_ACTION_SETS.get(\n            self._config.get(CONF_HVAC_ACTION_SET), {}\n        )\n        self._conf_eco_dp = self._config.get(CONF_ECO_DP)\n        self._conf_eco_value = self._config.get(CONF_ECO_VALUE, \"ECO\")\n        self._has_presets = self.has_config(CONF_ECO_DP) or self.has_config(\n            CONF_PRESET_DP\n        )\n        _LOGGER.debug(\"Initialized climate [%s]\", self.name)\n\n    @property\n    def supported_features(self):\n        \"\"\"Flag supported features.\"\"\"\n        supported_features = 0\n        if self.has_config(CONF_TARGET_TEMPERATURE_DP):\n            supported_features = supported_features | SUPPORT_TARGET_TEMPERATURE\n        if self.has_config(CONF_MAX_TEMP_DP):\n            supported_features = supported_features | SUPPORT_TARGET_TEMPERATURE_RANGE\n        if self.has_config(CONF_PRESET_DP) or self.has_config(CONF_ECO_DP):\n            supported_features = supported_features | SUPPORT_PRESET_MODE\n        return supported_features\n\n    @property\n    def precision(self):\n        \"\"\"Return the precision of the system.\"\"\"\n        return self._precision\n\n    @property\n    def target_precision(self):\n        \"\"\"Return the precision of the target.\"\"\"\n        return self._target_precision\n\n    @property\n    def temperature_unit(self):\n        \"\"\"Return the unit of measurement used by the platform.\"\"\"\n        if (\n            self._config.get(CONF_TEMPERATURE_UNIT, DEFAULT_TEMPERATURE_UNIT)\n            == TEMPERATURE_FAHRENHEIT\n        ):\n            return TEMP_FAHRENHEIT\n        return TEMP_CELSIUS\n\n    @property\n    def hvac_mode(self):\n        \"\"\"Return current operation ie. heat, cool, idle.\"\"\"\n        return self._hvac_mode\n\n    @property\n    def hvac_modes(self):\n        \"\"\"Return the list of available operation modes.\"\"\"\n        if not self.has_config(CONF_HVAC_MODE_DP):\n            return None\n        return list(self._conf_hvac_mode_set) + [HVAC_MODE_OFF]\n\n    @property\n    def hvac_action(self):\n        \"\"\"Return the current running hvac operation if supported.\n\n        Need to be one of CURRENT_HVAC_*.\n        \"\"\"\n        if self._config.get(CONF_HEURISTIC_ACTION, False):\n            if self._hvac_mode == HVAC_MODE_HEAT:\n                if self._current_temperature < (\n                    self._target_temperature - self._precision\n                ):\n                    self._hvac_action = CURRENT_HVAC_HEAT\n                if self._current_temperature == (\n                    self._target_temperature - self._precision\n                ):\n                    if self._hvac_action == CURRENT_HVAC_HEAT:\n                        self._hvac_action = CURRENT_HVAC_HEAT\n                    if self._hvac_action == CURRENT_HVAC_IDLE:\n                        self._hvac_action = CURRENT_HVAC_IDLE\n                if (\n                    self._current_temperature + self._precision\n                ) > self._target_temperature:\n                    self._hvac_action = CURRENT_HVAC_IDLE\n            return self._hvac_action\n        return self._hvac_action\n\n    @property\n    def preset_mode(self):\n        \"\"\"Return current preset.\"\"\"\n        return self._preset_mode\n\n    @property\n    def preset_modes(self):\n        \"\"\"Return the list of available presets modes.\"\"\"\n        if not self._has_presets:\n            return None\n        presets = list(self._conf_preset_set)\n        if self._conf_eco_dp:\n            presets.append(PRESET_ECO)\n        return presets\n\n    @property\n    def current_temperature(self):\n        \"\"\"Return the current temperature.\"\"\"\n        return self._current_temperature\n\n    @property\n    def target_temperature(self):\n        \"\"\"Return the temperature we try to reach.\"\"\"\n        return self._target_temperature\n\n    @property\n    def target_temperature_step(self):\n        \"\"\"Return the supported step of target temperature.\"\"\"\n        return self._config.get(CONF_TEMPERATURE_STEP, DEFAULT_TEMPERATURE_STEP)\n\n    @property\n    def fan_mode(self):\n        \"\"\"Return the fan setting.\"\"\"\n        return NotImplementedError()\n\n    @property\n    def fan_modes(self):\n        \"\"\"Return the list of available fan modes.\"\"\"\n        return NotImplementedError()\n\n    async def async_set_temperature(self, **kwargs):\n        \"\"\"Set new target temperature.\"\"\"\n        if ATTR_TEMPERATURE in kwargs and self.has_config(CONF_TARGET_TEMPERATURE_DP):\n            temperature = round(kwargs[ATTR_TEMPERATURE] / self._target_precision)\n            await self._device.set_dp(\n                temperature, self._config[CONF_TARGET_TEMPERATURE_DP]\n            )\n\n    def set_fan_mode(self, fan_mode):\n        \"\"\"Set new target fan mode.\"\"\"\n        return NotImplementedError()\n\n    async def async_set_hvac_mode(self, hvac_mode):\n        \"\"\"Set new target operation mode.\"\"\"\n        if hvac_mode == HVAC_MODE_OFF:\n            await self._device.set_dp(False, self._dp_id)\n            return\n        if not self._state and self._conf_hvac_mode_dp != self._dp_id:\n            await self._device.set_dp(True, self._dp_id)\n            # Some thermostats need a small wait before sending another update\n            await asyncio.sleep(MODE_WAIT)\n        await self._device.set_dp(\n            self._conf_hvac_mode_set[hvac_mode], self._conf_hvac_mode_dp\n        )\n\n    async def async_turn_on(self) -> None:\n        \"\"\"Turn the entity on.\"\"\"\n        await self._device.set_dp(True, self._dp_id)\n\n    async def async_turn_off(self) -> None:\n        \"\"\"Turn the entity off.\"\"\"\n        await self._device.set_dp(False, self._dp_id)\n\n    async def async_set_preset_mode(self, preset_mode):\n        \"\"\"Set new target preset mode.\"\"\"\n        if preset_mode == PRESET_ECO:\n            await self._device.set_dp(self._conf_eco_value, self._conf_eco_dp)\n            return\n        await self._device.set_dp(\n            self._conf_preset_set[preset_mode], self._conf_preset_dp\n        )\n\n    @property\n    def min_temp(self):\n        \"\"\"Return the minimum temperature.\"\"\"\n        if self.has_config(CONF_MIN_TEMP_DP):\n            return self.dps_conf(CONF_MIN_TEMP_DP)\n        return DEFAULT_MIN_TEMP\n\n    @property\n    def max_temp(self):\n        \"\"\"Return the maximum temperature.\"\"\"\n        if self.has_config(CONF_MAX_TEMP_DP):\n            return self.dps_conf(CONF_MAX_TEMP_DP)\n        return DEFAULT_MAX_TEMP\n\n    def status_updated(self):\n        \"\"\"Device status was updated.\"\"\"\n        self._state = self.dps(self._dp_id)\n\n        if self.has_config(CONF_TARGET_TEMPERATURE_DP):\n            self._target_temperature = (\n                self.dps_conf(CONF_TARGET_TEMPERATURE_DP) * self._target_precision\n            )\n\n        if self.has_config(CONF_CURRENT_TEMPERATURE_DP):\n            self._current_temperature = (\n                self.dps_conf(CONF_CURRENT_TEMPERATURE_DP) * self._precision\n            )\n\n        if self._has_presets:\n            if (\n                self.has_config(CONF_ECO_DP)\n                and self.dps_conf(CONF_ECO_DP) == self._conf_eco_value\n            ):\n                self._preset_mode = PRESET_ECO\n            else:\n                for preset, value in self._conf_preset_set.items():  # todo remove\n                    if self.dps_conf(CONF_PRESET_DP) == value:\n                        self._preset_mode = preset\n                        break\n                else:\n                    self._preset_mode = PRESET_NONE\n\n        # Update the HVAC status\n        if self.has_config(CONF_HVAC_MODE_DP):\n            if not self._state:\n                self._hvac_mode = HVAC_MODE_OFF\n            else:\n                for mode, value in self._conf_hvac_mode_set.items():\n                    if self.dps_conf(CONF_HVAC_MODE_DP) == value:\n                        self._hvac_mode = mode\n                        break\n                else:\n                    # in case hvac mode and preset share the same dp\n                    self._hvac_mode = HVAC_MODE_AUTO\n\n        # Update the current action\n        for action, value in self._conf_hvac_action_set.items():\n            if self.dps_conf(CONF_HVAC_ACTION_DP) == value:\n                self._hvac_action = action\n\n\nasync_setup_entry = partial(async_setup_entry, DOMAIN, LocaltuyaClimate, flow_schema)\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/cloud_api.py",
    "content": "\"\"\"Class to perform requests to Tuya Cloud APIs.\"\"\"\nimport functools\nimport hashlib\nimport hmac\nimport json\nimport logging\nimport time\n\nimport requests\n\n_LOGGER = logging.getLogger(__name__)\n\n\n# Signature algorithm.\ndef calc_sign(msg, key):\n    \"\"\"Calculate signature for request.\"\"\"\n    sign = (\n        hmac.new(\n            msg=bytes(msg, \"latin-1\"),\n            key=bytes(key, \"latin-1\"),\n            digestmod=hashlib.sha256,\n        )\n        .hexdigest()\n        .upper()\n    )\n    return sign\n\n\nclass TuyaCloudApi:\n    \"\"\"Class to send API calls.\"\"\"\n\n    def __init__(self, hass, region_code, client_id, secret, user_id):\n        \"\"\"Initialize the class.\"\"\"\n        self._hass = hass\n        self._base_url = f\"https://openapi.tuya{region_code}.com\"\n        self._client_id = client_id\n        self._secret = secret\n        self._user_id = user_id\n        self._access_token = \"\"\n        self.device_list = {}\n\n    def generate_payload(self, method, timestamp, url, headers, body=None):\n        \"\"\"Generate signed payload for requests.\"\"\"\n        payload = self._client_id + self._access_token + timestamp\n\n        payload += method + \"\\n\"\n        # Content-SHA256\n        payload += hashlib.sha256(bytes((body or \"\").encode(\"utf-8\"))).hexdigest()\n        payload += (\n            \"\\n\"\n            + \"\".join(\n                [\n                    \"%s:%s\\n\" % (key, headers[key])  # Headers\n                    for key in headers.get(\"Signature-Headers\", \"\").split(\":\")\n                    if key in headers\n                ]\n            )\n            + \"\\n/\"\n            + url.split(\"//\", 1)[-1].split(\"/\", 1)[-1]  # Url\n        )\n        # _LOGGER.debug(\"PAYLOAD: %s\", payload)\n        return payload\n\n    async def async_make_request(self, method, url, body=None, headers={}):\n        \"\"\"Perform requests.\"\"\"\n        timestamp = str(int(time.time() * 1000))\n        payload = self.generate_payload(method, timestamp, url, headers, body)\n        default_par = {\n            \"client_id\": self._client_id,\n            \"access_token\": self._access_token,\n            \"sign\": calc_sign(payload, self._secret),\n            \"t\": timestamp,\n            \"sign_method\": \"HMAC-SHA256\",\n        }\n        full_url = self._base_url + url\n        # _LOGGER.debug(\"\\n\" + method + \": [%s]\", full_url)\n\n        if method == \"GET\":\n            func = functools.partial(\n                requests.get, full_url, headers=dict(default_par, **headers)\n            )\n        elif method == \"POST\":\n            func = functools.partial(\n                requests.post,\n                full_url,\n                headers=dict(default_par, **headers),\n                data=json.dumps(body),\n            )\n            # _LOGGER.debug(\"BODY: [%s]\", body)\n        elif method == \"PUT\":\n            func = functools.partial(\n                requests.put,\n                full_url,\n                headers=dict(default_par, **headers),\n                data=json.dumps(body),\n            )\n\n        resp = await self._hass.async_add_executor_job(func)\n        # r = json.dumps(r.json(), indent=2, ensure_ascii=False) # Beautify the format\n        return resp\n\n    async def async_get_access_token(self):\n        \"\"\"Obtain a valid access token.\"\"\"\n        resp = await self.async_make_request(\"GET\", \"/v1.0/token?grant_type=1\")\n\n        if not resp.ok:\n            return \"Request failed, status \" + str(resp.status)\n\n        r_json = resp.json()\n        if not r_json[\"success\"]:\n            return f\"Error {r_json['code']}: {r_json['msg']}\"\n\n        self._access_token = resp.json()[\"result\"][\"access_token\"]\n        return \"ok\"\n\n    async def async_get_devices_list(self):\n        \"\"\"Obtain the list of devices associated to a user.\"\"\"\n        resp = await self.async_make_request(\n            \"GET\", url=f\"/v1.0/users/{self._user_id}/devices\"\n        )\n\n        if not resp.ok:\n            return \"Request failed, status \" + str(resp.status)\n\n        r_json = resp.json()\n        if not r_json[\"success\"]:\n            # _LOGGER.debug(\n            #     \"Request failed, reply is %s\",\n            #     json.dumps(r_json, indent=2, ensure_ascii=False)\n            # )\n            return f\"Error {r_json['code']}: {r_json['msg']}\"\n\n        self.device_list = {dev[\"id\"]: dev for dev in r_json[\"result\"]}\n        # _LOGGER.debug(\"DEV_LIST: %s\", self.device_list)\n\n        return \"ok\"\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/common.py",
    "content": "\"\"\"Code shared between all platforms.\"\"\"\nimport asyncio\nimport logging\nimport time\nfrom datetime import timedelta\n\nfrom homeassistant.const import (\n    CONF_DEVICE_ID,\n    CONF_DEVICES,\n    CONF_ENTITIES,\n    CONF_FRIENDLY_NAME,\n    CONF_HOST,\n    CONF_ID,\n    CONF_PLATFORM,\n    CONF_SCAN_INTERVAL,\n)\nfrom homeassistant.core import callback\nfrom homeassistant.helpers.dispatcher import (\n    async_dispatcher_connect,\n    async_dispatcher_send,\n)\nfrom homeassistant.helpers.event import async_track_time_interval\nfrom homeassistant.helpers.restore_state import RestoreEntity\n\nfrom . import pytuya\nfrom .const import (\n    ATTR_UPDATED_AT,\n    CONF_LOCAL_KEY,\n    CONF_MODEL,\n    CONF_PROTOCOL_VERSION,\n    DATA_CLOUD,\n    DOMAIN,\n    TUYA_DEVICES,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\n\ndef prepare_setup_entities(hass, config_entry, platform):\n    \"\"\"Prepare ro setup entities for a platform.\"\"\"\n    entities_to_setup = [\n        entity\n        for entity in config_entry.data[CONF_ENTITIES]\n        if entity[CONF_PLATFORM] == platform\n    ]\n    if not entities_to_setup:\n        return None, None\n\n    tuyainterface = []\n\n    return tuyainterface, entities_to_setup\n\n\nasync def async_setup_entry(\n    domain, entity_class, flow_schema, hass, config_entry, async_add_entities\n):\n    \"\"\"Set up a Tuya platform based on a config entry.\n\n    This is a generic method and each platform should lock domain and\n    entity_class with functools.partial.\n    \"\"\"\n    entities = []\n\n    for dev_id in config_entry.data[CONF_DEVICES]:\n        # entities_to_setup = prepare_setup_entities(\n        #     hass, config_entry.data[dev_id], domain\n        # )\n        dev_entry = config_entry.data[CONF_DEVICES][dev_id]\n        entities_to_setup = [\n            entity\n            for entity in dev_entry[CONF_ENTITIES]\n            if entity[CONF_PLATFORM] == domain\n        ]\n\n        if entities_to_setup:\n\n            tuyainterface = hass.data[DOMAIN][TUYA_DEVICES][dev_id]\n\n            dps_config_fields = list(get_dps_for_platform(flow_schema))\n\n            for entity_config in entities_to_setup:\n                # Add DPS used by this platform to the request list\n                for dp_conf in dps_config_fields:\n                    if dp_conf in entity_config:\n                        tuyainterface.dps_to_request[entity_config[dp_conf]] = None\n\n                entities.append(\n                    entity_class(\n                        tuyainterface,\n                        dev_entry,\n                        entity_config[CONF_ID],\n                    )\n                )\n    async_add_entities(entities)\n\n\ndef get_dps_for_platform(flow_schema):\n    \"\"\"Return config keys for all platform keys that depends on a datapoint.\"\"\"\n    for key, value in flow_schema(None).items():\n        if hasattr(value, \"container\") and value.container is None:\n            yield key.schema\n\n\ndef get_entity_config(config_entry, dp_id):\n    \"\"\"Return entity config for a given DPS id.\"\"\"\n    for entity in config_entry[CONF_ENTITIES]:\n        if entity[CONF_ID] == dp_id:\n            return entity\n    raise Exception(f\"missing entity config for id {dp_id}\")\n\n\n@callback\ndef async_config_entry_by_device_id(hass, device_id):\n    \"\"\"Look up config entry by device id.\"\"\"\n    current_entries = hass.config_entries.async_entries(DOMAIN)\n    for entry in current_entries:\n        if device_id in entry.data[CONF_DEVICES]:\n            return entry\n    return None\n\n\nclass TuyaDevice(pytuya.TuyaListener, pytuya.ContextualLogger):\n    \"\"\"Cache wrapper for pytuya.TuyaInterface.\"\"\"\n\n    def __init__(self, hass, config_entry, dev_id):\n        \"\"\"Initialize the cache.\"\"\"\n        super().__init__()\n        self._hass = hass\n        self._config_entry = config_entry\n        self._dev_config_entry = config_entry.data[CONF_DEVICES][dev_id].copy()\n        self._interface = None\n        self._status = {}\n        self.dps_to_request = {}\n        self._is_closing = False\n        self._connect_task = None\n        self._disconnect_task = None\n        self._unsub_interval = None\n        self._local_key = self._dev_config_entry[CONF_LOCAL_KEY]\n        self.set_logger(_LOGGER, self._dev_config_entry[CONF_DEVICE_ID])\n\n        # This has to be done in case the device type is type_0d\n        for entity in self._dev_config_entry[CONF_ENTITIES]:\n            self.dps_to_request[entity[CONF_ID]] = None\n\n    @property\n    def connected(self):\n        \"\"\"Return if connected to device.\"\"\"\n        return self._interface is not None\n\n    def async_connect(self):\n        \"\"\"Connect to device if not already connected.\"\"\"\n        if not self._is_closing and self._connect_task is None and not self._interface:\n            self._connect_task = asyncio.create_task(self._make_connection())\n\n    async def _make_connection(self):\n        \"\"\"Subscribe localtuya entity events.\"\"\"\n        self.debug(\"Connecting to %s\", self._dev_config_entry[CONF_HOST])\n\n        try:\n            self._interface = await pytuya.connect(\n                self._dev_config_entry[CONF_HOST],\n                self._dev_config_entry[CONF_DEVICE_ID],\n                self._local_key,\n                float(self._dev_config_entry[CONF_PROTOCOL_VERSION]),\n                self,\n            )\n            self._interface.add_dps_to_request(self.dps_to_request)\n\n            self.debug(\"Retrieving initial state\")\n            status = await self._interface.status()\n            if status is None:\n                raise Exception(\"Failed to retrieve status\")\n\n            self.status_updated(status)\n\n            def _new_entity_handler(entity_id):\n                self.debug(\n                    \"New entity %s was added to %s\",\n                    entity_id,\n                    self._dev_config_entry[CONF_HOST],\n                )\n                self._dispatch_status()\n\n            signal = f\"localtuya_entity_{self._dev_config_entry[CONF_DEVICE_ID]}\"\n            self._disconnect_task = async_dispatcher_connect(\n                self._hass, signal, _new_entity_handler\n            )\n\n            if (\n                CONF_SCAN_INTERVAL in self._dev_config_entry\n                and self._dev_config_entry[CONF_SCAN_INTERVAL] > 0\n            ):\n                self._unsub_interval = async_track_time_interval(\n                    self._hass,\n                    self._async_refresh,\n                    timedelta(seconds=self._dev_config_entry[CONF_SCAN_INTERVAL]),\n                )\n        except UnicodeDecodeError as e:  # pylint: disable=broad-except\n            self.exception(\n                f\"Connect to {self._dev_config_entry[CONF_HOST]} failed: %s\", type(e)\n            )\n            if self._interface is not None:\n                await self._interface.close()\n                self._interface = None\n\n        except Exception as e:  # pylint: disable=broad-except\n            self.exception(f\"Connect to {self._dev_config_entry[CONF_HOST]} failed\")\n            if \"json.decode\" in str(type(e)):\n                await self.update_local_key()\n\n            if self._interface is not None:\n                await self._interface.close()\n                self._interface = None\n        self._connect_task = None\n\n    async def update_local_key(self):\n        \"\"\"Retrieve updated local_key from Cloud API and update the config_entry.\"\"\"\n        dev_id = self._dev_config_entry[CONF_DEVICE_ID]\n        await self._hass.data[DOMAIN][DATA_CLOUD].async_get_devices_list()\n        cloud_devs = self._hass.data[DOMAIN][DATA_CLOUD].device_list\n        if dev_id in cloud_devs:\n            self._local_key = cloud_devs[dev_id].get(CONF_LOCAL_KEY)\n            new_data = self._config_entry.data.copy()\n            new_data[CONF_DEVICES][dev_id][CONF_LOCAL_KEY] = self._local_key\n            new_data[ATTR_UPDATED_AT] = str(int(time.time() * 1000))\n            self._hass.config_entries.async_update_entry(\n                self._config_entry,\n                data=new_data,\n            )\n            self.info(\"local_key updated for device %s.\", dev_id)\n\n    async def _async_refresh(self, _now):\n        if self._interface is not None:\n            await self._interface.update_dps()\n\n    async def close(self):\n        \"\"\"Close connection and stop re-connect loop.\"\"\"\n        self._is_closing = True\n        if self._connect_task is not None:\n            self._connect_task.cancel()\n            await self._connect_task\n        if self._interface is not None:\n            await self._interface.close()\n        if self._disconnect_task is not None:\n            self._disconnect_task()\n        self.debug(\n            \"Closed connection with device %s.\",\n            self._dev_config_entry[CONF_FRIENDLY_NAME],\n        )\n\n    async def set_dp(self, state, dp_index):\n        \"\"\"Change value of a DP of the Tuya device.\"\"\"\n        if self._interface is not None:\n            try:\n                await self._interface.set_dp(state, dp_index)\n            except Exception:  # pylint: disable=broad-except\n                self.exception(\"Failed to set DP %d to %d\", dp_index, state)\n        else:\n            self.error(\n                \"Not connected to device %s\", self._dev_config_entry[CONF_FRIENDLY_NAME]\n            )\n\n    async def set_dps(self, states):\n        \"\"\"Change value of a DPs of the Tuya device.\"\"\"\n        if self._interface is not None:\n            try:\n                await self._interface.set_dps(states)\n            except Exception:  # pylint: disable=broad-except\n                self.exception(\"Failed to set DPs %r\", states)\n        else:\n            self.error(\n                \"Not connected to device %s\", self._dev_config_entry[CONF_FRIENDLY_NAME]\n            )\n\n    @callback\n    def status_updated(self, status):\n        \"\"\"Device updated status.\"\"\"\n        self._status.update(status)\n        self._dispatch_status()\n\n    def _dispatch_status(self):\n        signal = f\"localtuya_{self._dev_config_entry[CONF_DEVICE_ID]}\"\n        async_dispatcher_send(self._hass, signal, self._status)\n\n    @callback\n    def disconnected(self):\n        \"\"\"Device disconnected.\"\"\"\n        signal = f\"localtuya_{self._dev_config_entry[CONF_DEVICE_ID]}\"\n        async_dispatcher_send(self._hass, signal, None)\n        if self._unsub_interval is not None:\n            self._unsub_interval()\n            self._unsub_interval = None\n        self._interface = None\n        self.debug(\"Disconnected - waiting for discovery broadcast\")\n\n\nclass LocalTuyaEntity(RestoreEntity, pytuya.ContextualLogger):\n    \"\"\"Representation of a Tuya entity.\"\"\"\n\n    def __init__(self, device, config_entry, dp_id, logger, **kwargs):\n        \"\"\"Initialize the Tuya entity.\"\"\"\n        super().__init__()\n        self._device = device\n        self._dev_config_entry = config_entry\n        self._config = get_entity_config(config_entry, dp_id)\n        self._dp_id = dp_id\n        self._status = {}\n        self.set_logger(logger, self._dev_config_entry[CONF_DEVICE_ID])\n\n    async def async_added_to_hass(self):\n        \"\"\"Subscribe localtuya events.\"\"\"\n        await super().async_added_to_hass()\n\n        self.debug(\"Adding %s with configuration: %s\", self.entity_id, self._config)\n\n        state = await self.async_get_last_state()\n        if state:\n            self.status_restored(state)\n\n        def _update_handler(status):\n            \"\"\"Update entity state when status was updated.\"\"\"\n            if status is None:\n                status = {}\n            if self._status != status:\n                self._status = status.copy()\n                if status:\n                    self.status_updated()\n                self.schedule_update_ha_state()\n\n        signal = f\"localtuya_{self._dev_config_entry[CONF_DEVICE_ID]}\"\n\n        self.async_on_remove(\n            async_dispatcher_connect(self.hass, signal, _update_handler)\n        )\n\n        signal = f\"localtuya_entity_{self._dev_config_entry[CONF_DEVICE_ID]}\"\n        async_dispatcher_send(self.hass, signal, self.entity_id)\n\n    @property\n    def device_info(self):\n        \"\"\"Return device information for the device registry.\"\"\"\n        model = self._dev_config_entry.get(CONF_MODEL, \"Tuya generic\")\n        return {\n            \"identifiers\": {\n                # Serial numbers are unique identifiers within a specific domain\n                (DOMAIN, f\"local_{self._dev_config_entry[CONF_DEVICE_ID]}\")\n            },\n            \"name\": self._dev_config_entry[CONF_FRIENDLY_NAME],\n            \"manufacturer\": \"Tuya\",\n            \"model\": f\"{model} ({self._dev_config_entry[CONF_DEVICE_ID]})\",\n            \"sw_version\": self._dev_config_entry[CONF_PROTOCOL_VERSION],\n        }\n\n    @property\n    def name(self):\n        \"\"\"Get name of Tuya entity.\"\"\"\n        return self._config[CONF_FRIENDLY_NAME]\n\n    @property\n    def should_poll(self):\n        \"\"\"Return if platform should poll for updates.\"\"\"\n        return False\n\n    @property\n    def unique_id(self):\n        \"\"\"Return unique device identifier.\"\"\"\n        return f\"local_{self._dev_config_entry[CONF_DEVICE_ID]}_{self._dp_id}\"\n\n    def has_config(self, attr):\n        \"\"\"Return if a config parameter has a valid value.\"\"\"\n        value = self._config.get(attr, \"-1\")\n        return value is not None and value != \"-1\"\n\n    @property\n    def available(self):\n        \"\"\"Return if device is available or not.\"\"\"\n        return str(self._dp_id) in self._status\n\n    def dps(self, dp_index):\n        \"\"\"Return cached value for DPS index.\"\"\"\n        value = self._status.get(str(dp_index))\n        if value is None:\n            self.warning(\n                \"Entity %s is requesting unknown DPS index %s\",\n                self.entity_id,\n                dp_index,\n            )\n\n        return value\n\n    def dps_conf(self, conf_item):\n        \"\"\"Return value of datapoint for user specified config item.\n\n        This method looks up which DP a certain config item uses based on\n        user configuration and returns its value.\n        \"\"\"\n        dp_index = self._config.get(conf_item)\n        if dp_index is None:\n            self.warning(\n                \"Entity %s is requesting unset index for option %s\",\n                self.entity_id,\n                conf_item,\n            )\n        return self.dps(dp_index)\n\n    def status_updated(self):\n        \"\"\"Device status was updated.\n\n        Override in subclasses and update entity specific state.\n        \"\"\"\n\n    def status_restored(self, stored_state):\n        \"\"\"Device status was restored.\n\n        Override in subclasses and update entity specific state.\n        \"\"\"\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/config_flow.py",
    "content": "\"\"\"Config flow for LocalTuya integration integration.\"\"\"\nimport errno\nimport logging\nimport time\nfrom importlib import import_module\n\nimport homeassistant.helpers.config_validation as cv\nimport homeassistant.helpers.entity_registry as er\nimport voluptuous as vol\nfrom homeassistant import config_entries, core, exceptions\nfrom homeassistant.const import (\n    CONF_CLIENT_ID,\n    CONF_CLIENT_SECRET,\n    CONF_DEVICE_ID,\n    CONF_DEVICES,\n    CONF_ENTITIES,\n    CONF_FRIENDLY_NAME,\n    CONF_HOST,\n    CONF_ID,\n    CONF_NAME,\n    CONF_PLATFORM,\n    CONF_REGION,\n    CONF_SCAN_INTERVAL,\n    CONF_USERNAME,\n)\nfrom homeassistant.core import callback\n\nfrom .cloud_api import TuyaCloudApi\nfrom .common import pytuya\nfrom .const import (\n    ATTR_UPDATED_AT,\n    CONF_ACTION,\n    CONF_ADD_DEVICE,\n    CONF_DPS_STRINGS,\n    CONF_EDIT_DEVICE,\n    CONF_LOCAL_KEY,\n    CONF_MODEL,\n    CONF_NO_CLOUD,\n    CONF_PRODUCT_NAME,\n    CONF_PROTOCOL_VERSION,\n    CONF_SETUP_CLOUD,\n    CONF_USER_ID,\n    DATA_CLOUD,\n    DATA_DISCOVERY,\n    DOMAIN,\n    PLATFORMS,\n)\nfrom .discovery import discover\n\n_LOGGER = logging.getLogger(__name__)\n\nENTRIES_VERSION = 2\n\nPLATFORM_TO_ADD = \"platform_to_add\"\nNO_ADDITIONAL_ENTITIES = \"no_additional_entities\"\nSELECTED_DEVICE = \"selected_device\"\n\nCUSTOM_DEVICE = \"...\"\n\nCONF_ACTIONS = {\n    CONF_ADD_DEVICE: \"Add a new device\",\n    CONF_EDIT_DEVICE: \"Edit a device\",\n    CONF_SETUP_CLOUD: \"Reconfigure Cloud API account\",\n}\n\nCONFIGURE_SCHEMA = vol.Schema(\n    {\n        vol.Required(CONF_ACTION, default=CONF_ADD_DEVICE): vol.In(CONF_ACTIONS),\n    }\n)\n\nCLOUD_SETUP_SCHEMA = vol.Schema(\n    {\n        vol.Required(CONF_REGION, default=\"eu\"): vol.In([\"eu\", \"us\", \"cn\", \"in\"]),\n        vol.Optional(CONF_CLIENT_ID): cv.string,\n        vol.Optional(CONF_CLIENT_SECRET): cv.string,\n        vol.Optional(CONF_USER_ID): cv.string,\n        vol.Optional(CONF_USERNAME, default=DOMAIN): cv.string,\n        vol.Required(CONF_NO_CLOUD, default=False): bool,\n    }\n)\n\nCONFIGURE_DEVICE_SCHEMA = vol.Schema(\n    {\n        vol.Required(CONF_FRIENDLY_NAME): str,\n        vol.Required(CONF_LOCAL_KEY): str,\n        vol.Required(CONF_HOST): str,\n        vol.Required(CONF_DEVICE_ID): str,\n        vol.Required(CONF_PROTOCOL_VERSION, default=\"3.3\"): vol.In([\"3.1\", \"3.3\"]),\n        vol.Optional(CONF_SCAN_INTERVAL): int,\n    }\n)\n\nDEVICE_SCHEMA = vol.Schema(\n    {\n        vol.Required(CONF_HOST): cv.string,\n        vol.Required(CONF_DEVICE_ID): cv.string,\n        vol.Required(CONF_LOCAL_KEY): cv.string,\n        vol.Required(CONF_FRIENDLY_NAME): cv.string,\n        vol.Required(CONF_PROTOCOL_VERSION, default=\"3.3\"): vol.In([\"3.1\", \"3.3\"]),\n        vol.Optional(CONF_SCAN_INTERVAL): int,\n    }\n)\n\nPICK_ENTITY_SCHEMA = vol.Schema(\n    {vol.Required(PLATFORM_TO_ADD, default=\"switch\"): vol.In(PLATFORMS)}\n)\n\n\ndef devices_schema(discovered_devices, cloud_devices_list, add_custom_device=True):\n    \"\"\"Create schema for devices step.\"\"\"\n    devices = {}\n    for dev_id, dev_host in discovered_devices.items():\n        dev_name = dev_id\n        if dev_id in cloud_devices_list.keys():\n            dev_name = cloud_devices_list[dev_id][CONF_NAME]\n        devices[dev_id] = f\"{dev_name} ({dev_host})\"\n\n    if add_custom_device:\n        devices.update({CUSTOM_DEVICE: CUSTOM_DEVICE})\n\n    # devices.update(\n    #     {\n    #         ent.data[CONF_DEVICE_ID]: ent.data[CONF_FRIENDLY_NAME]\n    #         for ent in entries\n    #     }\n    # )\n    return vol.Schema({vol.Required(SELECTED_DEVICE): vol.In(devices)})\n\n\ndef options_schema(entities):\n    \"\"\"Create schema for options.\"\"\"\n    entity_names = [\n        f\"{entity[CONF_ID]}: {entity[CONF_FRIENDLY_NAME]}\" for entity in entities\n    ]\n    return vol.Schema(\n        {\n            vol.Required(CONF_FRIENDLY_NAME): str,\n            vol.Required(CONF_HOST): str,\n            vol.Required(CONF_LOCAL_KEY): str,\n            vol.Required(CONF_PROTOCOL_VERSION, default=\"3.3\"): vol.In([\"3.1\", \"3.3\"]),\n            vol.Optional(CONF_SCAN_INTERVAL): int,\n            vol.Required(\n                CONF_ENTITIES, description={\"suggested_value\": entity_names}\n            ): cv.multi_select(entity_names),\n        }\n    )\n\n\ndef schema_defaults(schema, dps_list=None, **defaults):\n    \"\"\"Create a new schema with default values filled in.\"\"\"\n    copy = schema.extend({})\n    for field, field_type in copy.schema.items():\n        if isinstance(field_type, vol.In):\n            value = None\n            for dps in dps_list or []:\n                if dps.startswith(f\"{defaults.get(field)} \"):\n                    value = dps\n                    break\n\n            if value in field_type.container:\n                field.default = vol.default_factory(value)\n                continue\n\n        if field.schema in defaults:\n            field.default = vol.default_factory(defaults[field])\n    return copy\n\n\ndef dps_string_list(dps_data):\n    \"\"\"Return list of friendly DPS values.\"\"\"\n    return [f\"{id} (value: {value})\" for id, value in dps_data.items()]\n\n\ndef gen_dps_strings():\n    \"\"\"Generate list of DPS values.\"\"\"\n    return [f\"{dp} (value: ?)\" for dp in range(1, 256)]\n\n\ndef platform_schema(platform, dps_strings, allow_id=True, yaml=False):\n    \"\"\"Generate input validation schema for a platform.\"\"\"\n    schema = {}\n    if yaml:\n        # In YAML mode we force the specified platform to match flow schema\n        schema[vol.Required(CONF_PLATFORM)] = vol.In([platform])\n    if allow_id:\n        schema[vol.Required(CONF_ID)] = vol.In(dps_strings)\n    schema[vol.Required(CONF_FRIENDLY_NAME)] = str\n    return vol.Schema(schema).extend(flow_schema(platform, dps_strings))\n\n\ndef flow_schema(platform, dps_strings):\n    \"\"\"Return flow schema for a specific platform.\"\"\"\n    integration_module = \".\".join(__name__.split(\".\")[:-1])\n    return import_module(\".\" + platform, integration_module).flow_schema(dps_strings)\n\n\ndef strip_dps_values(user_input, dps_strings):\n    \"\"\"Remove values and keep only index for DPS config items.\"\"\"\n    stripped = {}\n    for field, value in user_input.items():\n        if value in dps_strings:\n            stripped[field] = int(user_input[field].split(\" \")[0])\n        else:\n            stripped[field] = user_input[field]\n    return stripped\n\n\ndef config_schema():\n    \"\"\"Build schema used for setting up component.\"\"\"\n    entity_schemas = [\n        platform_schema(platform, range(1, 256), yaml=True) for platform in PLATFORMS\n    ]\n    return vol.Schema(\n        {\n            DOMAIN: vol.All(\n                cv.ensure_list,\n                [\n                    DEVICE_SCHEMA.extend(\n                        {vol.Required(CONF_ENTITIES): [vol.Any(*entity_schemas)]}\n                    )\n                ],\n            )\n        },\n        extra=vol.ALLOW_EXTRA,\n    )\n\n\nasync def validate_input(hass: core.HomeAssistant, data):\n    \"\"\"Validate the user input allows us to connect.\"\"\"\n    detected_dps = {}\n\n    interface = None\n    try:\n        interface = await pytuya.connect(\n            data[CONF_HOST],\n            data[CONF_DEVICE_ID],\n            data[CONF_LOCAL_KEY],\n            float(data[CONF_PROTOCOL_VERSION]),\n        )\n\n        detected_dps = await interface.detect_available_dps()\n    except (ConnectionRefusedError, ConnectionResetError) as ex:\n        raise CannotConnect from ex\n    except ValueError as ex:\n        raise InvalidAuth from ex\n    finally:\n        if interface:\n            await interface.close()\n\n    # Indicate an error if no datapoints found as the rest of the flow\n    # won't work in this case\n    if not detected_dps:\n        raise EmptyDpsList\n\n    return dps_string_list(detected_dps)\n\n\nasync def attempt_cloud_connection(hass, user_input):\n    \"\"\"Create device.\"\"\"\n    cloud_api = TuyaCloudApi(\n        hass,\n        user_input.get(CONF_REGION),\n        user_input.get(CONF_CLIENT_ID),\n        user_input.get(CONF_CLIENT_SECRET),\n        user_input.get(CONF_USER_ID),\n    )\n\n    res = await cloud_api.async_get_access_token()\n    if res != \"ok\":\n        _LOGGER.error(\"Cloud API connection failed: %s\", res)\n        return cloud_api, {\"reason\": \"authentication_failed\", \"msg\": res}\n\n    res = await cloud_api.async_get_devices_list()\n    if res != \"ok\":\n        _LOGGER.error(\"Cloud API get_devices_list failed: %s\", res)\n        return cloud_api, {\"reason\": \"device_list_failed\", \"msg\": res}\n    _LOGGER.info(\"Cloud API connection succeeded.\")\n\n    return cloud_api, {}\n\n\nclass LocaltuyaConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):\n    \"\"\"Handle a config flow for LocalTuya integration.\"\"\"\n\n    VERSION = ENTRIES_VERSION\n    CONNECTION_CLASS = config_entries.CONN_CLASS_LOCAL_POLL\n\n    @staticmethod\n    @callback\n    def async_get_options_flow(config_entry):\n        \"\"\"Get options flow for this handler.\"\"\"\n        return LocalTuyaOptionsFlowHandler(config_entry)\n\n    def __init__(self):\n        \"\"\"Initialize a new LocaltuyaConfigFlow.\"\"\"\n\n    async def async_step_user(self, user_input=None):\n        \"\"\"Handle the initial step.\"\"\"\n        errors = {}\n        placeholders = {}\n        if user_input is not None:\n            if user_input.get(CONF_NO_CLOUD):\n                for i in [CONF_CLIENT_ID, CONF_CLIENT_SECRET, CONF_USER_ID]:\n                    user_input[i] = \"\"\n                return await self._create_entry(user_input)\n\n            cloud_api, res = await attempt_cloud_connection(self.hass, user_input)\n\n            if not res:\n                return await self._create_entry(user_input)\n            errors[\"base\"] = res[\"reason\"]\n            placeholders = {\"msg\": res[\"msg\"]}\n\n        defaults = {}\n        defaults.update(user_input or {})\n\n        return self.async_show_form(\n            step_id=\"user\",\n            data_schema=schema_defaults(CLOUD_SETUP_SCHEMA, **defaults),\n            errors=errors,\n            description_placeholders=placeholders,\n        )\n\n    async def _create_entry(self, user_input):\n        \"\"\"Register new entry.\"\"\"\n        # if self._async_current_entries():\n        #     return self.async_abort(reason=\"already_configured\")\n\n        await self.async_set_unique_id(user_input.get(CONF_USER_ID))\n        user_input[CONF_DEVICES] = {}\n\n        return self.async_create_entry(\n            title=user_input.get(CONF_USERNAME),\n            data=user_input,\n        )\n\n    async def async_step_import(self, user_input):\n        \"\"\"Handle import from YAML.\"\"\"\n        _LOGGER.error(\n            \"Configuration via YAML file is no longer supported by this integration.\"\n        )\n\n\nclass LocalTuyaOptionsFlowHandler(config_entries.OptionsFlow):\n    \"\"\"Handle options flow for LocalTuya integration.\"\"\"\n\n    def __init__(self, config_entry):\n        \"\"\"Initialize localtuya options flow.\"\"\"\n        self.config_entry = config_entry\n        # self.dps_strings = config_entry.data.get(CONF_DPS_STRINGS, gen_dps_strings())\n        # self.entities = config_entry.data[CONF_ENTITIES]\n        self.selected_device = None\n        self.editing_device = False\n        self.device_data = None\n        self.dps_strings = []\n        self.selected_platform = None\n        self.discovered_devices = {}\n        self.entities = []\n\n    async def async_step_init(self, user_input=None):\n        \"\"\"Manage basic options.\"\"\"\n        # device_id = self.config_entry.data[CONF_DEVICE_ID]\n        if user_input is not None:\n            if user_input.get(CONF_ACTION) == CONF_SETUP_CLOUD:\n                return await self.async_step_cloud_setup()\n            if user_input.get(CONF_ACTION) == CONF_ADD_DEVICE:\n                return await self.async_step_add_device()\n            if user_input.get(CONF_ACTION) == CONF_EDIT_DEVICE:\n                return await self.async_step_edit_device()\n\n        return self.async_show_form(\n            step_id=\"init\",\n            data_schema=CONFIGURE_SCHEMA,\n        )\n\n    async def async_step_cloud_setup(self, user_input=None):\n        \"\"\"Handle the initial step.\"\"\"\n        errors = {}\n        placeholders = {}\n        if user_input is not None:\n            if user_input.get(CONF_NO_CLOUD):\n                new_data = self.config_entry.data.copy()\n                new_data.update(user_input)\n                for i in [CONF_CLIENT_ID, CONF_CLIENT_SECRET, CONF_USER_ID]:\n                    new_data[i] = \"\"\n                self.hass.config_entries.async_update_entry(\n                    self.config_entry,\n                    data=new_data,\n                )\n                return self.async_create_entry(\n                    title=new_data.get(CONF_USERNAME), data={}\n                )\n\n            cloud_api, res = await attempt_cloud_connection(self.hass, user_input)\n\n            if not res:\n                new_data = self.config_entry.data.copy()\n                new_data.update(user_input)\n                cloud_devs = cloud_api.device_list\n                for dev_id, dev in new_data[CONF_DEVICES].items():\n                    if CONF_MODEL not in dev and dev_id in cloud_devs:\n                        model = cloud_devs[dev_id].get(CONF_PRODUCT_NAME)\n                        new_data[CONF_DEVICES][dev_id][CONF_MODEL] = model\n                new_data[ATTR_UPDATED_AT] = str(int(time.time() * 1000))\n\n                self.hass.config_entries.async_update_entry(\n                    self.config_entry,\n                    data=new_data,\n                )\n                return self.async_create_entry(\n                    title=new_data.get(CONF_USERNAME), data={}\n                )\n            errors[\"base\"] = res[\"reason\"]\n            placeholders = {\"msg\": res[\"msg\"]}\n\n        defaults = self.config_entry.data.copy()\n        defaults.update(user_input or {})\n        defaults[CONF_NO_CLOUD] = False\n\n        return self.async_show_form(\n            step_id=\"cloud_setup\",\n            data_schema=schema_defaults(CLOUD_SETUP_SCHEMA, **defaults),\n            errors=errors,\n            description_placeholders=placeholders,\n        )\n\n    async def async_step_add_device(self, user_input=None):\n        \"\"\"Handle adding a new device.\"\"\"\n        # Use cache if available or fallback to manual discovery\n        self.editing_device = False\n        self.selected_device = None\n        errors = {}\n        if user_input is not None:\n            if user_input[SELECTED_DEVICE] != CUSTOM_DEVICE:\n                self.selected_device = user_input[SELECTED_DEVICE]\n\n            return await self.async_step_configure_device()\n\n        self.discovered_devices = {}\n        data = self.hass.data.get(DOMAIN)\n\n        if data and DATA_DISCOVERY in data:\n            self.discovered_devices = data[DATA_DISCOVERY].devices\n        else:\n            try:\n                self.discovered_devices = await discover()\n            except OSError as ex:\n                if ex.errno == errno.EADDRINUSE:\n                    errors[\"base\"] = \"address_in_use\"\n                else:\n                    errors[\"base\"] = \"discovery_failed\"\n            except Exception:  # pylint: disable= broad-except\n                _LOGGER.exception(\"discovery failed\")\n                errors[\"base\"] = \"discovery_failed\"\n\n        devices = {\n            dev_id: dev[\"ip\"]\n            for dev_id, dev in self.discovered_devices.items()\n            if dev[\"gwId\"] not in self.config_entry.data[CONF_DEVICES]\n        }\n\n        return self.async_show_form(\n            step_id=\"add_device\",\n            data_schema=devices_schema(\n                devices, self.hass.data[DOMAIN][DATA_CLOUD].device_list\n            ),\n            errors=errors,\n        )\n\n    async def async_step_edit_device(self, user_input=None):\n        \"\"\"Handle editing a device.\"\"\"\n        self.editing_device = True\n        # Use cache if available or fallback to manual discovery\n        errors = {}\n        if user_input is not None:\n            self.selected_device = user_input[SELECTED_DEVICE]\n            dev_conf = self.config_entry.data[CONF_DEVICES][self.selected_device]\n            self.dps_strings = dev_conf.get(CONF_DPS_STRINGS, gen_dps_strings())\n            self.entities = dev_conf[CONF_ENTITIES]\n\n            return await self.async_step_configure_device()\n\n        devices = {}\n        for dev_id, configured_dev in self.config_entry.data[CONF_DEVICES].items():\n            devices[dev_id] = configured_dev[CONF_HOST]\n\n        return self.async_show_form(\n            step_id=\"edit_device\",\n            data_schema=devices_schema(\n                devices, self.hass.data[DOMAIN][DATA_CLOUD].device_list, False\n            ),\n            errors=errors,\n        )\n\n    async def async_step_configure_device(self, user_input=None):\n        \"\"\"Handle input of basic info.\"\"\"\n        errors = {}\n        dev_id = self.selected_device\n        if user_input is not None:\n            try:\n                self.device_data = user_input.copy()\n                if dev_id is not None:\n                    # self.device_data[CONF_PRODUCT_KEY] = self.devices[\n                    #     self.selected_device\n                    # ][\"productKey\"]\n                    cloud_devs = self.hass.data[DOMAIN][DATA_CLOUD].device_list\n                    if dev_id in cloud_devs:\n                        self.device_data[CONF_MODEL] = cloud_devs[dev_id].get(\n                            CONF_PRODUCT_NAME\n                        )\n                if self.editing_device:\n                    self.device_data.update(\n                        {\n                            CONF_DEVICE_ID: dev_id,\n                            CONF_DPS_STRINGS: self.dps_strings,\n                            CONF_ENTITIES: [],\n                        }\n                    )\n                    if user_input[CONF_ENTITIES]:\n                        entity_ids = [\n                            int(entity.split(\":\")[0])\n                            for entity in user_input[CONF_ENTITIES]\n                        ]\n                        device_config = self.config_entry.data[CONF_DEVICES][dev_id]\n                        self.entities = [\n                            entity\n                            for entity in device_config[CONF_ENTITIES]\n                            if entity[CONF_ID] in entity_ids\n                        ]\n                        return await self.async_step_configure_entity()\n\n                self.dps_strings = await validate_input(self.hass, user_input)\n                return await self.async_step_pick_entity_type()\n            except CannotConnect:\n                errors[\"base\"] = \"cannot_connect\"\n            except InvalidAuth:\n                errors[\"base\"] = \"invalid_auth\"\n            except EmptyDpsList:\n                errors[\"base\"] = \"empty_dps\"\n            except Exception:  # pylint: disable=broad-except\n                _LOGGER.exception(\"Unexpected exception\")\n                errors[\"base\"] = \"unknown\"\n\n        defaults = {}\n        if self.editing_device:\n            # If selected device exists as a config entry, load config from it\n            defaults = self.config_entry.data[CONF_DEVICES][dev_id].copy()\n            schema = schema_defaults(options_schema(self.entities), **defaults)\n            placeholders = {\"for_device\": f\" for device `{dev_id}`\"}\n        else:\n            defaults[CONF_PROTOCOL_VERSION] = \"3.3\"\n            defaults[CONF_HOST] = \"\"\n            defaults[CONF_DEVICE_ID] = \"\"\n            defaults[CONF_LOCAL_KEY] = \"\"\n            defaults[CONF_FRIENDLY_NAME] = \"\"\n            if dev_id is not None:\n                # Insert default values from discovery and cloud if present\n                device = self.discovered_devices[dev_id]\n                defaults[CONF_HOST] = device.get(\"ip\")\n                defaults[CONF_DEVICE_ID] = device.get(\"gwId\")\n                defaults[CONF_PROTOCOL_VERSION] = device.get(\"version\")\n                cloud_devs = self.hass.data[DOMAIN][DATA_CLOUD].device_list\n                if dev_id in cloud_devs:\n                    defaults[CONF_LOCAL_KEY] = cloud_devs[dev_id].get(CONF_LOCAL_KEY)\n                    defaults[CONF_FRIENDLY_NAME] = cloud_devs[dev_id].get(CONF_NAME)\n            schema = schema_defaults(CONFIGURE_DEVICE_SCHEMA, **defaults)\n\n            placeholders = {\"for_device\": \"\"}\n\n        return self.async_show_form(\n            step_id=\"configure_device\",\n            data_schema=schema,\n            errors=errors,\n            description_placeholders=placeholders,\n        )\n\n    async def async_step_pick_entity_type(self, user_input=None):\n        \"\"\"Handle asking if user wants to add another entity.\"\"\"\n        if user_input is not None:\n            if user_input.get(NO_ADDITIONAL_ENTITIES):\n                config = {\n                    **self.device_data,\n                    CONF_DPS_STRINGS: self.dps_strings,\n                    CONF_ENTITIES: self.entities,\n                }\n\n                dev_id = self.device_data.get(CONF_DEVICE_ID)\n                if dev_id in self.config_entry.data[CONF_DEVICES]:\n                    self.hass.config_entries.async_update_entry(\n                        self.config_entry, data=config\n                    )\n                    return self.async_abort(\n                        reason=\"device_success\",\n                        description_placeholders={\n                            \"dev_name\": config.get(CONF_FRIENDLY_NAME),\n                            \"action\": \"updated\",\n                        },\n                    )\n\n                new_data = self.config_entry.data.copy()\n                new_data[ATTR_UPDATED_AT] = str(int(time.time() * 1000))\n                new_data[CONF_DEVICES].update({dev_id: config})\n\n                self.hass.config_entries.async_update_entry(\n                    self.config_entry,\n                    data=new_data,\n                )\n                return self.async_create_entry(title=\"\", data={})\n\n            self.selected_platform = user_input[PLATFORM_TO_ADD]\n            return await self.async_step_configure_entity()\n\n        # Add a checkbox that allows bailing out from config flow if at least one\n        # entity has been added\n        schema = PICK_ENTITY_SCHEMA\n        if self.selected_platform is not None:\n            schema = schema.extend(\n                {vol.Required(NO_ADDITIONAL_ENTITIES, default=True): bool}\n            )\n\n        return self.async_show_form(step_id=\"pick_entity_type\", data_schema=schema)\n\n    def available_dps_strings(self):\n        \"\"\"Return list of DPs use by the device's entities.\"\"\"\n        available_dps = []\n        used_dps = [str(entity[CONF_ID]) for entity in self.entities]\n        for dp_string in self.dps_strings:\n            dp = dp_string.split(\" \")[0]\n            if dp not in used_dps:\n                available_dps.append(dp_string)\n        return available_dps\n\n    async def async_step_entity(self, user_input=None):\n        \"\"\"Manage entity settings.\"\"\"\n        errors = {}\n        if user_input is not None:\n            entity = strip_dps_values(user_input, self.dps_strings)\n            entity[CONF_ID] = self.current_entity[CONF_ID]\n            entity[CONF_PLATFORM] = self.current_entity[CONF_PLATFORM]\n            self.device_data[CONF_ENTITIES].append(entity)\n\n            if len(self.entities) == len(self.device_data[CONF_ENTITIES]):\n                self.hass.config_entries.async_update_entry(\n                    self.config_entry,\n                    title=self.device_data[CONF_FRIENDLY_NAME],\n                    data=self.device_data,\n                )\n                return self.async_create_entry(title=\"\", data={})\n\n        schema = platform_schema(\n            self.current_entity[CONF_PLATFORM], self.dps_strings, allow_id=False\n        )\n        return self.async_show_form(\n            step_id=\"entity\",\n            errors=errors,\n            data_schema=schema_defaults(\n                schema, self.dps_strings, **self.current_entity\n            ),\n            description_placeholders={\n                \"id\": self.current_entity[CONF_ID],\n                \"platform\": self.current_entity[CONF_PLATFORM],\n            },\n        )\n\n    async def async_step_configure_entity(self, user_input=None):\n        \"\"\"Manage entity settings.\"\"\"\n        errors = {}\n        if user_input is not None:\n            if self.editing_device:\n                entity = strip_dps_values(user_input, self.dps_strings)\n                entity[CONF_ID] = self.current_entity[CONF_ID]\n                entity[CONF_PLATFORM] = self.current_entity[CONF_PLATFORM]\n                self.device_data[CONF_ENTITIES].append(entity)\n\n                if len(self.entities) == len(self.device_data[CONF_ENTITIES]):\n                    # finished editing device. Let's store the new config entry....\n                    dev_id = self.device_data[CONF_DEVICE_ID]\n                    new_data = self.config_entry.data.copy()\n                    entry_id = self.config_entry.entry_id\n                    # removing entities from registry (they will be recreated)\n                    ent_reg = await er.async_get_registry(self.hass)\n                    reg_entities = {\n                        ent.unique_id: ent.entity_id\n                        for ent in er.async_entries_for_config_entry(ent_reg, entry_id)\n                        if dev_id in ent.unique_id\n                    }\n                    for entity_id in reg_entities.values():\n                        ent_reg.async_remove(entity_id)\n\n                    new_data[CONF_DEVICES][dev_id] = self.device_data\n                    new_data[ATTR_UPDATED_AT] = str(int(time.time() * 1000))\n                    self.hass.config_entries.async_update_entry(\n                        self.config_entry,\n                        data=new_data,\n                    )\n                    return self.async_create_entry(title=\"\", data={})\n            else:\n                user_input[CONF_PLATFORM] = self.selected_platform\n                self.entities.append(strip_dps_values(user_input, self.dps_strings))\n                # new entity added. Let's check if there are more left...\n                user_input = None\n                if len(self.available_dps_strings()) == 0:\n                    user_input = {NO_ADDITIONAL_ENTITIES: True}\n                return await self.async_step_pick_entity_type(user_input)\n\n        if self.editing_device:\n            schema = platform_schema(\n                self.current_entity[CONF_PLATFORM], self.dps_strings, allow_id=False\n            )\n            schema = schema_defaults(schema, self.dps_strings, **self.current_entity)\n            placeholders = {\n                \"entity\": f\"entity with DP {self.current_entity[CONF_ID]}\",\n                \"platform\": self.current_entity[CONF_PLATFORM],\n            }\n        else:\n            available_dps = self.available_dps_strings()\n            schema = platform_schema(self.selected_platform, available_dps)\n            placeholders = {\n                \"entity\": \"an entity\",\n                \"platform\": self.selected_platform,\n            }\n\n        return self.async_show_form(\n            step_id=\"configure_entity\",\n            data_schema=schema,\n            errors=errors,\n            description_placeholders=placeholders,\n        )\n\n    async def async_step_yaml_import(self, user_input=None):\n        \"\"\"Manage YAML imports.\"\"\"\n        _LOGGER.error(\n            \"Configuration via YAML file is no longer supported by this integration.\"\n        )\n        # if user_input is not None:\n        #     return self.async_create_entry(title=\"\", data={})\n        # return self.async_show_form(step_id=\"yaml_import\")\n\n    @property\n    def current_entity(self):\n        \"\"\"Existing configuration for entity currently being edited.\"\"\"\n        return self.entities[len(self.device_data[CONF_ENTITIES])]\n\n\nclass CannotConnect(exceptions.HomeAssistantError):\n    \"\"\"Error to indicate we cannot connect.\"\"\"\n\n\nclass InvalidAuth(exceptions.HomeAssistantError):\n    \"\"\"Error to indicate there is invalid auth.\"\"\"\n\n\nclass EmptyDpsList(exceptions.HomeAssistantError):\n    \"\"\"Error to indicate no datapoints found.\"\"\"\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/const.py",
    "content": "\"\"\"Constants for localtuya integration.\"\"\"\n\nDOMAIN = \"localtuya\"\n\nDATA_DISCOVERY = \"discovery\"\nDATA_CLOUD = \"cloud_data\"\n\n# Platforms in this list must support config flows\nPLATFORMS = [\n    \"binary_sensor\",\n    \"climate\",\n    \"cover\",\n    \"fan\",\n    \"light\",\n    \"number\",\n    \"select\",\n    \"sensor\",\n    \"switch\",\n    \"vacuum\",\n]\n\nTUYA_DEVICES = \"tuya_devices\"\n\nATTR_CURRENT = \"current\"\nATTR_CURRENT_CONSUMPTION = \"current_consumption\"\nATTR_VOLTAGE = \"voltage\"\nATTR_UPDATED_AT = \"updated_at\"\n\n# config flow\nCONF_LOCAL_KEY = \"local_key\"\nCONF_PROTOCOL_VERSION = \"protocol_version\"\nCONF_DPS_STRINGS = \"dps_strings\"\nCONF_MODEL = \"model\"\nCONF_PRODUCT_KEY = \"product_key\"\nCONF_PRODUCT_NAME = \"product_name\"\nCONF_USER_ID = \"user_id\"\n\nCONF_ACTION = \"action\"\nCONF_ADD_DEVICE = \"add_device\"\nCONF_EDIT_DEVICE = \"edit_device\"\nCONF_SETUP_CLOUD = \"setup_cloud\"\nCONF_NO_CLOUD = \"no_cloud\"\n\n# light\nCONF_BRIGHTNESS_LOWER = \"brightness_lower\"\nCONF_BRIGHTNESS_UPPER = \"brightness_upper\"\nCONF_COLOR = \"color\"\nCONF_COLOR_MODE = \"color_mode\"\nCONF_COLOR_TEMP_MIN_KELVIN = \"color_temp_min_kelvin\"\nCONF_COLOR_TEMP_MAX_KELVIN = \"color_temp_max_kelvin\"\nCONF_COLOR_TEMP_REVERSE = \"color_temp_reverse\"\nCONF_MUSIC_MODE = \"music_mode\"\n\n# switch\nCONF_CURRENT = \"current\"\nCONF_CURRENT_CONSUMPTION = \"current_consumption\"\nCONF_VOLTAGE = \"voltage\"\n\n# cover\nCONF_COMMANDS_SET = \"commands_set\"\nCONF_POSITIONING_MODE = \"positioning_mode\"\nCONF_CURRENT_POSITION_DP = \"current_position_dp\"\nCONF_SET_POSITION_DP = \"set_position_dp\"\nCONF_POSITION_INVERTED = \"position_inverted\"\nCONF_SPAN_TIME = \"span_time\"\n\n# fan\nCONF_FAN_SPEED_CONTROL = \"fan_speed_control\"\nCONF_FAN_OSCILLATING_CONTROL = \"fan_oscillating_control\"\nCONF_FAN_SPEED_MIN = \"fan_speed_min\"\nCONF_FAN_SPEED_MAX = \"fan_speed_max\"\nCONF_FAN_ORDERED_LIST = \"fan_speed_ordered_list\"\nCONF_FAN_DIRECTION = \"fan_direction\"\nCONF_FAN_DIRECTION_FWD = \"fan_direction_forward\"\nCONF_FAN_DIRECTION_REV = \"fan_direction_reverse\"\n\n# sensor\nCONF_SCALING = \"scaling\"\n\n# climate\nCONF_TARGET_TEMPERATURE_DP = \"target_temperature_dp\"\nCONF_CURRENT_TEMPERATURE_DP = \"current_temperature_dp\"\nCONF_TEMPERATURE_STEP = \"temperature_step\"\nCONF_MAX_TEMP_DP = \"max_temperature_dp\"\nCONF_MIN_TEMP_DP = \"min_temperature_dp\"\nCONF_PRECISION = \"precision\"\nCONF_TARGET_PRECISION = \"target_precision\"\nCONF_HVAC_MODE_DP = \"hvac_mode_dp\"\nCONF_HVAC_MODE_SET = \"hvac_mode_set\"\nCONF_PRESET_DP = \"preset_dp\"\nCONF_PRESET_SET = \"preset_set\"\nCONF_HEURISTIC_ACTION = \"heuristic_action\"\nCONF_HVAC_ACTION_DP = \"hvac_action_dp\"\nCONF_HVAC_ACTION_SET = \"hvac_action_set\"\nCONF_ECO_DP = \"eco_dp\"\nCONF_ECO_VALUE = \"eco_value\"\n\n# vacuum\nCONF_POWERGO_DP = \"powergo_dp\"\nCONF_IDLE_STATUS_VALUE = \"idle_status_value\"\nCONF_RETURNING_STATUS_VALUE = \"returning_status_value\"\nCONF_DOCKED_STATUS_VALUE = \"docked_status_value\"\nCONF_BATTERY_DP = \"battery_dp\"\nCONF_MODE_DP = \"mode_dp\"\nCONF_MODES = \"modes\"\nCONF_FAN_SPEED_DP = \"fan_speed_dp\"\nCONF_FAN_SPEEDS = \"fan_speeds\"\nCONF_CLEAN_TIME_DP = \"clean_time_dp\"\nCONF_CLEAN_AREA_DP = \"clean_area_dp\"\nCONF_CLEAN_RECORD_DP = \"clean_record_dp\"\nCONF_LOCATE_DP = \"locate_dp\"\nCONF_FAULT_DP = \"fault_dp\"\nCONF_PAUSED_STATE = \"paused_state\"\nCONF_RETURN_MODE = \"return_mode\"\nCONF_STOP_STATUS = \"stop_status\"\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/cover.py",
    "content": "\"\"\"Platform to locally control Tuya-based cover devices.\"\"\"\nimport asyncio\nimport logging\nimport time\nfrom functools import partial\n\nimport voluptuous as vol\nfrom homeassistant.components.cover import (\n    ATTR_POSITION,\n    DOMAIN,\n    SUPPORT_CLOSE,\n    SUPPORT_OPEN,\n    SUPPORT_SET_POSITION,\n    SUPPORT_STOP,\n    CoverEntity,\n)\n\nfrom .common import LocalTuyaEntity, async_setup_entry\nfrom .const import (\n    CONF_COMMANDS_SET,\n    CONF_CURRENT_POSITION_DP,\n    CONF_POSITION_INVERTED,\n    CONF_POSITIONING_MODE,\n    CONF_SET_POSITION_DP,\n    CONF_SPAN_TIME,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\nCOVER_ONOFF_CMDS = \"on_off_stop\"\nCOVER_OPENCLOSE_CMDS = \"open_close_stop\"\nCOVER_FZZZ_CMDS = \"fz_zz_stop\"\nCOVER_12_CMDS = \"1_2_3\"\nCOVER_MODE_NONE = \"none\"\nCOVER_MODE_POSITION = \"position\"\nCOVER_MODE_TIMED = \"timed\"\nCOVER_TIMEOUT_TOLERANCE = 3.0\n\nDEFAULT_COMMANDS_SET = COVER_ONOFF_CMDS\nDEFAULT_POSITIONING_MODE = COVER_MODE_NONE\nDEFAULT_SPAN_TIME = 25.0\n\n\ndef flow_schema(dps):\n    \"\"\"Return schema used in config flow.\"\"\"\n    return {\n        vol.Optional(CONF_COMMANDS_SET): vol.In(\n            [COVER_ONOFF_CMDS, COVER_OPENCLOSE_CMDS, COVER_FZZZ_CMDS, COVER_12_CMDS]\n        ),\n        vol.Optional(CONF_POSITIONING_MODE, default=DEFAULT_POSITIONING_MODE): vol.In(\n            [COVER_MODE_NONE, COVER_MODE_POSITION, COVER_MODE_TIMED]\n        ),\n        vol.Optional(CONF_CURRENT_POSITION_DP): vol.In(dps),\n        vol.Optional(CONF_SET_POSITION_DP): vol.In(dps),\n        vol.Optional(CONF_POSITION_INVERTED, default=False): bool,\n        vol.Optional(CONF_SPAN_TIME, default=DEFAULT_SPAN_TIME): vol.All(\n            vol.Coerce(float), vol.Range(min=1.0, max=300.0)\n        ),\n    }\n\n\nclass LocaltuyaCover(LocalTuyaEntity, CoverEntity):\n    \"\"\"Tuya cover device.\"\"\"\n\n    def __init__(self, device, config_entry, switchid, **kwargs):\n        \"\"\"Initialize a new LocaltuyaCover.\"\"\"\n        super().__init__(device, config_entry, switchid, _LOGGER, **kwargs)\n        commands_set = DEFAULT_COMMANDS_SET\n        if self.has_config(CONF_COMMANDS_SET):\n            commands_set = self._config[CONF_COMMANDS_SET]\n        self._open_cmd = commands_set.split(\"_\")[0]\n        self._close_cmd = commands_set.split(\"_\")[1]\n        self._stop_cmd = commands_set.split(\"_\")[2]\n        self._timer_start = time.time()\n        self._state = self._stop_cmd\n        self._previous_state = self._state\n        self._current_cover_position = 0\n        _LOGGER.debug(\"Initialized cover [%s]\", self.name)\n\n    @property\n    def supported_features(self):\n        \"\"\"Flag supported features.\"\"\"\n        supported_features = SUPPORT_OPEN | SUPPORT_CLOSE | SUPPORT_STOP\n        if self._config[CONF_POSITIONING_MODE] != COVER_MODE_NONE:\n            supported_features = supported_features | SUPPORT_SET_POSITION\n        return supported_features\n\n    @property\n    def current_cover_position(self):\n        \"\"\"Return current cover position in percent.\"\"\"\n        if self._config[CONF_POSITIONING_MODE] == COVER_MODE_NONE:\n            return None\n        return self._current_cover_position\n\n    @property\n    def is_opening(self):\n        \"\"\"Return if cover is opening.\"\"\"\n        state = self._state\n        return state == self._open_cmd\n\n    @property\n    def is_closing(self):\n        \"\"\"Return if cover is closing.\"\"\"\n        state = self._state\n        return state == self._close_cmd\n\n    @property\n    def is_closed(self):\n        \"\"\"Return if the cover is closed or not.\"\"\"\n        if self._config[CONF_POSITIONING_MODE] == COVER_MODE_NONE:\n            return None\n\n        if self._current_cover_position == 0:\n            return True\n        if self._current_cover_position == 100:\n            return False\n        return None\n\n    async def async_set_cover_position(self, **kwargs):\n        \"\"\"Move the cover to a specific position.\"\"\"\n        self.debug(\"Setting cover position: %r\", kwargs[ATTR_POSITION])\n        if self._config[CONF_POSITIONING_MODE] == COVER_MODE_TIMED:\n            newpos = float(kwargs[ATTR_POSITION])\n\n            currpos = self.current_cover_position\n            posdiff = abs(newpos - currpos)\n            mydelay = posdiff / 100.0 * self._config[CONF_SPAN_TIME]\n            if newpos > currpos:\n                self.debug(\"Opening to %f: delay %f\", newpos, mydelay)\n                await self.async_open_cover()\n            else:\n                self.debug(\"Closing to %f: delay %f\", newpos, mydelay)\n                await self.async_close_cover()\n            self.hass.async_create_task(self.async_stop_after_timeout(mydelay))\n            self.debug(\"Done\")\n\n        elif self._config[CONF_POSITIONING_MODE] == COVER_MODE_POSITION:\n            converted_position = int(kwargs[ATTR_POSITION])\n            if self._config[CONF_POSITION_INVERTED]:\n                converted_position = 100 - converted_position\n\n            if 0 <= converted_position <= 100 and self.has_config(CONF_SET_POSITION_DP):\n                await self._device.set_dp(\n                    converted_position, self._config[CONF_SET_POSITION_DP]\n                )\n\n    async def async_stop_after_timeout(self, delay_sec):\n        \"\"\"Stop the cover if timeout (max movement span) occurred.\"\"\"\n        await asyncio.sleep(delay_sec)\n        await self.async_stop_cover()\n\n    async def async_open_cover(self, **kwargs):\n        \"\"\"Open the cover.\"\"\"\n        self.debug(\"Launching command %s to cover \", self._open_cmd)\n        await self._device.set_dp(self._open_cmd, self._dp_id)\n        if self._config[CONF_POSITIONING_MODE] == COVER_MODE_TIMED:\n            # for timed positioning, stop the cover after a full opening timespan\n            # instead of waiting the internal timeout\n            self.hass.async_create_task(\n                self.async_stop_after_timeout(\n                    self._config[CONF_SPAN_TIME] + COVER_TIMEOUT_TOLERANCE\n                )\n            )\n\n    async def async_close_cover(self, **kwargs):\n        \"\"\"Close cover.\"\"\"\n        self.debug(\"Launching command %s to cover \", self._close_cmd)\n        await self._device.set_dp(self._close_cmd, self._dp_id)\n        if self._config[CONF_POSITIONING_MODE] == COVER_MODE_TIMED:\n            # for timed positioning, stop the cover after a full opening timespan\n            # instead of waiting the internal timeout\n            self.hass.async_create_task(\n                self.async_stop_after_timeout(\n                    self._config[CONF_SPAN_TIME] + COVER_TIMEOUT_TOLERANCE\n                )\n            )\n\n    async def async_stop_cover(self, **kwargs):\n        \"\"\"Stop the cover.\"\"\"\n        self.debug(\"Launching command %s to cover \", self._stop_cmd)\n        await self._device.set_dp(self._stop_cmd, self._dp_id)\n\n    def status_restored(self, stored_state):\n        \"\"\"Restore the last stored cover status.\"\"\"\n        if self._config[CONF_POSITIONING_MODE] == COVER_MODE_TIMED:\n            stored_pos = stored_state.attributes.get(\"current_position\")\n            if stored_pos is not None:\n                self._current_cover_position = stored_pos\n                self.debug(\"Restored cover position %s\", self._current_cover_position)\n\n    def status_updated(self):\n        \"\"\"Device status was updated.\"\"\"\n        self._previous_state = self._state\n        self._state = self.dps(self._dp_id)\n        if self._state.isupper():\n            self._open_cmd = self._open_cmd.upper()\n            self._close_cmd = self._close_cmd.upper()\n            self._stop_cmd = self._stop_cmd.upper()\n\n        if self.has_config(CONF_CURRENT_POSITION_DP):\n            curr_pos = self.dps_conf(CONF_CURRENT_POSITION_DP)\n            if self._config[CONF_POSITION_INVERTED]:\n                self._current_cover_position = 100 - curr_pos\n            else:\n                self._current_cover_position = curr_pos\n        if (\n            self._config[CONF_POSITIONING_MODE] == COVER_MODE_TIMED\n            and self._state != self._previous_state\n        ):\n            if self._previous_state != self._stop_cmd:\n                # the state has changed, and the cover was moving\n                time_diff = time.time() - self._timer_start\n                pos_diff = round(time_diff / self._config[CONF_SPAN_TIME] * 100.0)\n                if self._previous_state == self._close_cmd:\n                    pos_diff = -pos_diff\n                self._current_cover_position = min(\n                    100, max(0, self._current_cover_position + pos_diff)\n                )\n\n                change = \"stopped\" if self._state == self._stop_cmd else \"inverted\"\n                self.debug(\n                    \"Movement %s after %s sec., position difference %s\",\n                    change,\n                    time_diff,\n                    pos_diff,\n                )\n\n            # store the time of the last movement change\n            self._timer_start = time.time()\n\n\nasync_setup_entry = partial(async_setup_entry, DOMAIN, LocaltuyaCover, flow_schema)\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/diagnostics.py",
    "content": "\"\"\"Diagnostics support for LocalTuya.\"\"\"\nfrom __future__ import annotations\n\nimport copy\nimport logging\nfrom typing import Any\n\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.const import CONF_CLIENT_ID, CONF_CLIENT_SECRET, CONF_DEVICES\nfrom homeassistant.core import HomeAssistant\nfrom homeassistant.helpers.device_registry import DeviceEntry\n\nfrom .const import CONF_LOCAL_KEY, CONF_USER_ID, DATA_CLOUD, DOMAIN\n\nCLOUD_DEVICES = \"cloud_devices\"\nDEVICE_CONFIG = \"device_config\"\nDEVICE_CLOUD_INFO = \"device_cloud_info\"\n\n_LOGGER = logging.getLogger(__name__)\n\n\nasync def async_get_config_entry_diagnostics(\n    hass: HomeAssistant, entry: ConfigEntry\n) -> dict[str, Any]:\n    \"\"\"Return diagnostics for a config entry.\"\"\"\n    data = {}\n    data = dict(entry.data)\n    tuya_api = hass.data[DOMAIN][DATA_CLOUD]\n    # censoring private information on integration diagnostic data\n    for field in [CONF_CLIENT_ID, CONF_CLIENT_SECRET, CONF_USER_ID]:\n        data[field] = f\"{data[field][0:3]}...{data[field][-3:]}\"\n    data[CONF_DEVICES] = copy.deepcopy(entry.data[CONF_DEVICES])\n    for dev_id, dev in data[CONF_DEVICES].items():\n        local_key = dev[CONF_LOCAL_KEY]\n        local_key_obfuscated = f\"{local_key[0:3]}...{local_key[-3:]}\"\n        dev[CONF_LOCAL_KEY] = local_key_obfuscated\n    data[CLOUD_DEVICES] = tuya_api.device_list\n    for dev_id, dev in data[CLOUD_DEVICES].items():\n        local_key = data[CLOUD_DEVICES][dev_id][CONF_LOCAL_KEY]\n        local_key_obfuscated = f\"{local_key[0:3]}...{local_key[-3:]}\"\n        data[CLOUD_DEVICES][dev_id][CONF_LOCAL_KEY] = local_key_obfuscated\n    return data\n\n\nasync def async_get_device_diagnostics(\n    hass: HomeAssistant, entry: ConfigEntry, device: DeviceEntry\n) -> dict[str, Any]:\n    \"\"\"Return diagnostics for a device entry.\"\"\"\n    data = {}\n    dev_id = list(device.identifiers)[0][1].split(\"_\")[-1]\n    data[DEVICE_CONFIG] = entry.data[CONF_DEVICES][dev_id].copy()\n    # NOT censoring private information on device diagnostic data\n    # local_key = data[DEVICE_CONFIG][CONF_LOCAL_KEY]\n    # data[DEVICE_CONFIG][CONF_LOCAL_KEY] = f\"{local_key[0:3]}...{local_key[-3:]}\"\n\n    tuya_api = hass.data[DOMAIN][DATA_CLOUD]\n    if dev_id in tuya_api.device_list:\n        data[DEVICE_CLOUD_INFO] = tuya_api.device_list[dev_id]\n        # NOT censoring private information on device diagnostic data\n        # local_key = data[DEVICE_CLOUD_INFO][CONF_LOCAL_KEY]\n        # local_key_obfuscated = \"{local_key[0:3]}...{local_key[-3:]}\"\n        # data[DEVICE_CLOUD_INFO][CONF_LOCAL_KEY] = local_key_obfuscated\n\n    # data[\"log\"] = hass.data[DOMAIN][CONF_DEVICES][dev_id].logger.retrieve_log()\n    return data\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/discovery.py",
    "content": "\"\"\"Discovery module for Tuya devices.\n\nEntirely based on tuya-convert.py from tuya-convert:\n\nhttps://github.com/ct-Open-Source/tuya-convert/blob/master/scripts/tuya-discovery.py\n\"\"\"\nimport asyncio\nimport json\nimport logging\nfrom hashlib import md5\n\nfrom cryptography.hazmat.backends import default_backend\nfrom cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes\n\n_LOGGER = logging.getLogger(__name__)\n\nUDP_KEY = md5(b\"yGAdlopoPVldABfn\").digest()\n\nDEFAULT_TIMEOUT = 6.0\n\n\ndef decrypt_udp(message):\n    \"\"\"Decrypt encrypted UDP broadcasts.\"\"\"\n\n    def _unpad(data):\n        return data[: -ord(data[len(data) - 1 :])]\n\n    cipher = Cipher(algorithms.AES(UDP_KEY), modes.ECB(), default_backend())\n    decryptor = cipher.decryptor()\n    return _unpad(decryptor.update(message) + decryptor.finalize()).decode()\n\n\nclass TuyaDiscovery(asyncio.DatagramProtocol):\n    \"\"\"Datagram handler listening for Tuya broadcast messages.\"\"\"\n\n    def __init__(self, callback=None):\n        \"\"\"Initialize a new BaseDiscovery.\"\"\"\n        self.devices = {}\n        self._listeners = []\n        self._callback = callback\n\n    async def start(self):\n        \"\"\"Start discovery by listening to broadcasts.\"\"\"\n        loop = asyncio.get_running_loop()\n        listener = loop.create_datagram_endpoint(\n            lambda: self, local_addr=(\"0.0.0.0\", 6666)\n        )\n        encrypted_listener = loop.create_datagram_endpoint(\n            lambda: self, local_addr=(\"0.0.0.0\", 6667)\n        )\n\n        self._listeners = await asyncio.gather(listener, encrypted_listener)\n        _LOGGER.debug(\"Listening to broadcasts on UDP port 6666 and 6667\")\n\n    def close(self):\n        \"\"\"Stop discovery.\"\"\"\n        self._callback = None\n        for transport, _ in self._listeners:\n            transport.close()\n\n    def datagram_received(self, data, addr):\n        \"\"\"Handle received broadcast message.\"\"\"\n        data = data[20:-8]\n        try:\n            data = decrypt_udp(data)\n        except Exception:  # pylint: disable=broad-except\n            data = data.decode()\n\n        decoded = json.loads(data)\n        self.device_found(decoded)\n\n    def device_found(self, device):\n        \"\"\"Discover a new device.\"\"\"\n        if device.get(\"gwId\") not in self.devices:\n            self.devices[device.get(\"gwId\")] = device\n            _LOGGER.debug(\"Discovered device: %s\", device)\n\n        if self._callback:\n            self._callback(device)\n\n\nasync def discover():\n    \"\"\"Discover and return devices on local network.\"\"\"\n    discovery = TuyaDiscovery()\n    try:\n        await discovery.start()\n        await asyncio.sleep(DEFAULT_TIMEOUT)\n    finally:\n        discovery.close()\n    return discovery.devices\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/fan.py",
    "content": "\"\"\"Platform to locally control Tuya-based fan devices.\"\"\"\nimport logging\nimport math\nfrom functools import partial\n\nimport homeassistant.helpers.config_validation as cv\nimport voluptuous as vol\nfrom homeassistant.components.fan import (\n    DIRECTION_FORWARD,\n    DIRECTION_REVERSE,\n    DOMAIN,\n    SUPPORT_DIRECTION,\n    SUPPORT_OSCILLATE,\n    SUPPORT_SET_SPEED,\n    FanEntity,\n)\nfrom homeassistant.util.percentage import (\n    int_states_in_range,\n    ordered_list_item_to_percentage,\n    percentage_to_ordered_list_item,\n    percentage_to_ranged_value,\n    ranged_value_to_percentage,\n)\n\nfrom .common import LocalTuyaEntity, async_setup_entry\nfrom .const import (\n    CONF_FAN_DIRECTION,\n    CONF_FAN_DIRECTION_FWD,\n    CONF_FAN_DIRECTION_REV,\n    CONF_FAN_ORDERED_LIST,\n    CONF_FAN_OSCILLATING_CONTROL,\n    CONF_FAN_SPEED_CONTROL,\n    CONF_FAN_SPEED_MAX,\n    CONF_FAN_SPEED_MIN,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\n\ndef flow_schema(dps):\n    \"\"\"Return schema used in config flow.\"\"\"\n    return {\n        vol.Optional(CONF_FAN_SPEED_CONTROL): vol.In(dps),\n        vol.Optional(CONF_FAN_OSCILLATING_CONTROL): vol.In(dps),\n        vol.Optional(CONF_FAN_DIRECTION): vol.In(dps),\n        vol.Optional(CONF_FAN_DIRECTION_FWD, default=\"forward\"): cv.string,\n        vol.Optional(CONF_FAN_DIRECTION_REV, default=\"reverse\"): cv.string,\n        vol.Optional(CONF_FAN_SPEED_MIN, default=1): cv.positive_int,\n        vol.Optional(CONF_FAN_SPEED_MAX, default=9): cv.positive_int,\n        vol.Optional(CONF_FAN_ORDERED_LIST, default=\"disabled\"): cv.string,\n    }\n\n\nclass LocaltuyaFan(LocalTuyaEntity, FanEntity):\n    \"\"\"Representation of a Tuya fan.\"\"\"\n\n    def __init__(\n        self,\n        device,\n        config_entry,\n        fanid,\n        **kwargs,\n    ):\n        \"\"\"Initialize the entity.\"\"\"\n        super().__init__(device, config_entry, fanid, _LOGGER, **kwargs)\n        self._is_on = False\n        self._oscillating = None\n        self._direction = None\n        self._percentage = None\n        self._speed_range = (\n            self._config.get(CONF_FAN_SPEED_MIN),\n            self._config.get(CONF_FAN_SPEED_MAX),\n        )\n        self._ordered_list = self._config.get(CONF_FAN_ORDERED_LIST).split(\",\")\n        self._ordered_list_mode = None\n\n        if isinstance(self._ordered_list, list) and len(self._ordered_list) > 1:\n            self._use_ordered_list = True\n            _LOGGER.debug(\n                \"Fan _use_ordered_list: %s > %s\",\n                self._use_ordered_list,\n                self._ordered_list,\n            )\n        else:\n            self._use_ordered_list = False\n            _LOGGER.debug(\"Fan _use_ordered_list: %s\", self._use_ordered_list)\n\n    @property\n    def oscillating(self):\n        \"\"\"Return current oscillating status.\"\"\"\n        return self._oscillating\n\n    @property\n    def current_direction(self):\n        \"\"\"Return the current direction of the fan.\"\"\"\n        return self._direction\n\n    @property\n    def is_on(self):\n        \"\"\"Check if Tuya fan is on.\"\"\"\n        return self._is_on\n\n    @property\n    def percentage(self):\n        \"\"\"Return the current percentage.\"\"\"\n        return self._percentage\n\n    async def async_turn_on(\n        self,\n        speed: str = None,\n        percentage: int = None,\n        preset_mode: str = None,\n        **kwargs,\n    ) -> None:\n        \"\"\"Turn on the entity.\"\"\"\n        _LOGGER.debug(\"Fan async_turn_on\")\n        await self._device.set_dp(True, self._dp_id)\n        if percentage is not None:\n            await self.async_set_percentage(percentage)\n        else:\n            self.schedule_update_ha_state()\n\n    async def async_turn_off(self, **kwargs) -> None:\n        \"\"\"Turn off the entity.\"\"\"\n        _LOGGER.debug(\"Fan async_turn_off\")\n\n        await self._device.set_dp(False, self._dp_id)\n        self.schedule_update_ha_state()\n\n    async def async_set_percentage(self, percentage):\n        \"\"\"Set the speed of the fan.\"\"\"\n        _LOGGER.debug(\"Fan async_set_percentage: %s\", percentage)\n\n        if percentage is not None:\n            if percentage == 0:\n                return await self.async_turn_off()\n            if not self.is_on:\n                await self.async_turn_on()\n            if self._use_ordered_list:\n                await self._device.set_dp(\n                    str(\n                        percentage_to_ordered_list_item(self._ordered_list, percentage)\n                    ),\n                    self._config.get(CONF_FAN_SPEED_CONTROL),\n                )\n                _LOGGER.debug(\n                    \"Fan async_set_percentage: %s > %s\",\n                    percentage,\n                    percentage_to_ordered_list_item(self._ordered_list, percentage),\n                )\n\n            else:\n                await self._device.set_dp(\n                    str(\n                        math.ceil(\n                            percentage_to_ranged_value(self._speed_range, percentage)\n                        )\n                    ),\n                    self._config.get(CONF_FAN_SPEED_CONTROL),\n                )\n                _LOGGER.debug(\n                    \"Fan async_set_percentage: %s > %s\",\n                    percentage,\n                    percentage_to_ranged_value(self._speed_range, percentage),\n                )\n            self.schedule_update_ha_state()\n\n    async def async_oscillate(self, oscillating: bool) -> None:\n        \"\"\"Set oscillation.\"\"\"\n        _LOGGER.debug(\"Fan async_oscillate: %s\", oscillating)\n        await self._device.set_dp(\n            oscillating, self._config.get(CONF_FAN_OSCILLATING_CONTROL)\n        )\n        self.schedule_update_ha_state()\n\n    async def async_set_direction(self, direction):\n        \"\"\"Set the direction of the fan.\"\"\"\n        _LOGGER.debug(\"Fan async_set_direction: %s\", direction)\n\n        if direction == DIRECTION_FORWARD:\n            value = self._config.get(CONF_FAN_DIRECTION_FWD)\n\n        if direction == DIRECTION_REVERSE:\n            value = self._config.get(CONF_FAN_DIRECTION_REV)\n        await self._device.set_dp(value, self._config.get(CONF_FAN_DIRECTION))\n        self.schedule_update_ha_state()\n\n    @property\n    def supported_features(self) -> int:\n        \"\"\"Flag supported features.\"\"\"\n        features = 0\n\n        if self.has_config(CONF_FAN_OSCILLATING_CONTROL):\n            features |= SUPPORT_OSCILLATE\n\n        if self.has_config(CONF_FAN_SPEED_CONTROL):\n            features |= SUPPORT_SET_SPEED\n\n        if self.has_config(CONF_FAN_DIRECTION):\n            features |= SUPPORT_DIRECTION\n\n        return features\n\n    @property\n    def speed_count(self) -> int:\n        \"\"\"Speed count for the fan.\"\"\"\n        speed_count = int_states_in_range(self._speed_range)\n        _LOGGER.debug(\"Fan speed_count: %s\", speed_count)\n        return speed_count\n\n    def status_updated(self):\n        \"\"\"Get state of Tuya fan.\"\"\"\n        self._is_on = self.dps(self._dp_id)\n\n        current_speed = self.dps_conf(CONF_FAN_SPEED_CONTROL)\n        if self._use_ordered_list:\n            _LOGGER.debug(\n                \"Fan current_speed ordered_list_item_to_percentage: %s from %s\",\n                current_speed,\n                self._ordered_list,\n            )\n            if current_speed is not None:\n                self._percentage = ordered_list_item_to_percentage(\n                    self._ordered_list, current_speed\n                )\n\n        else:\n            _LOGGER.debug(\n                \"Fan current_speed ranged_value_to_percentage: %s from %s\",\n                current_speed,\n                self._speed_range,\n            )\n            if current_speed is not None:\n                self._percentage = ranged_value_to_percentage(\n                    self._speed_range, int(current_speed)\n                )\n\n        _LOGGER.debug(\"Fan current_percentage: %s\", self._percentage)\n\n        if self.has_config(CONF_FAN_OSCILLATING_CONTROL):\n            self._oscillating = self.dps_conf(CONF_FAN_OSCILLATING_CONTROL)\n            _LOGGER.debug(\"Fan current_oscillating : %s\", self._oscillating)\n\n        if self.has_config(CONF_FAN_DIRECTION):\n            value = self.dps_conf(CONF_FAN_DIRECTION)\n            if value is not None:\n                if value == self._config.get(CONF_FAN_DIRECTION_FWD):\n                    self._direction = DIRECTION_FORWARD\n\n                if value == self._config.get(CONF_FAN_DIRECTION_REV):\n                    self._direction = DIRECTION_REVERSE\n            _LOGGER.debug(\"Fan current_direction : %s > %s\", value, self._direction)\n\n\nasync_setup_entry = partial(async_setup_entry, DOMAIN, LocaltuyaFan, flow_schema)\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/light.py",
    "content": "\"\"\"Platform to locally control Tuya-based light devices.\"\"\"\nimport logging\nimport textwrap\nfrom functools import partial\n\nimport homeassistant.util.color as color_util\nimport voluptuous as vol\nfrom homeassistant.components.light import (\n    ATTR_BRIGHTNESS,\n    ATTR_COLOR_TEMP,\n    ATTR_EFFECT,\n    ATTR_HS_COLOR,\n    DOMAIN,\n    SUPPORT_BRIGHTNESS,\n    SUPPORT_COLOR,\n    SUPPORT_COLOR_TEMP,\n    SUPPORT_EFFECT,\n    LightEntity,\n)\nfrom homeassistant.const import CONF_BRIGHTNESS, CONF_COLOR_TEMP, CONF_SCENE\n\nfrom .common import LocalTuyaEntity, async_setup_entry\nfrom .const import (\n    CONF_BRIGHTNESS_LOWER,\n    CONF_BRIGHTNESS_UPPER,\n    CONF_COLOR,\n    CONF_COLOR_MODE,\n    CONF_COLOR_TEMP_MAX_KELVIN,\n    CONF_COLOR_TEMP_MIN_KELVIN,\n    CONF_COLOR_TEMP_REVERSE,\n    CONF_MUSIC_MODE,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\nDEFAULT_MIN_KELVIN = 2700  # MIRED 370\nDEFAULT_MAX_KELVIN = 6500  # MIRED 153\n\nDEFAULT_COLOR_TEMP_REVERSE = False\n\nDEFAULT_LOWER_BRIGHTNESS = 29\nDEFAULT_UPPER_BRIGHTNESS = 1000\n\nMODE_COLOR = \"colour\"\nMODE_MUSIC = \"music\"\nMODE_SCENE = \"scene\"\nMODE_WHITE = \"white\"\n\nSCENE_CUSTOM = \"Custom\"\nSCENE_MUSIC = \"Music\"\n\nSCENE_LIST_RGBW_1000 = {\n    \"Night\": \"000e0d0000000000000000c80000\",\n    \"Read\": \"010e0d0000000000000003e801f4\",\n    \"Meeting\": \"020e0d0000000000000003e803e8\",\n    \"Leasure\": \"030e0d0000000000000001f401f4\",\n    \"Soft\": \"04464602007803e803e800000000464602007803e8000a00000000\",\n    \"Rainbow\": \"05464601000003e803e800000000464601007803e803e80000000046460100f003e803\"\n    + \"e800000000\",\n    \"Shine\": \"06464601000003e803e800000000464601007803e803e80000000046460100f003e803e8\"\n    + \"00000000\",\n    \"Beautiful\": \"07464602000003e803e800000000464602007803e803e80000000046460200f003e8\"\n    + \"03e800000000464602003d03e803e80000000046460200ae03e803e800000000464602011303e80\"\n    + \"3e800000000\",\n}\n\nSCENE_LIST_RGBW_255 = {\n    \"Night\": \"bd76000168ffff\",\n    \"Read\": \"fffcf70168ffff\",\n    \"Meeting\": \"cf38000168ffff\",\n    \"Leasure\": \"3855b40168ffff\",\n    \"Scenario 1\": \"scene_1\",\n    \"Scenario 2\": \"scene_2\",\n    \"Scenario 3\": \"scene_3\",\n    \"Scenario 4\": \"scene_4\",\n}\n\nSCENE_LIST_RGB_1000 = {\n    \"Night\": \"000e0d00002e03e802cc00000000\",\n    \"Read\": \"010e0d000084000003e800000000\",\n    \"Working\": \"020e0d00001403e803e800000000\",\n    \"Leisure\": \"030e0d0000e80383031c00000000\",\n    \"Soft\": \"04464602007803e803e800000000464602007803e8000a00000000\",\n    \"Colorful\": \"05464601000003e803e800000000464601007803e803e80000000046460100f003e80\"\n    + \"3e800000000464601003d03e803e80000000046460100ae03e803e800000000464601011303e803\"\n    + \"e800000000\",\n    \"Dazzling\": \"06464601000003e803e800000000464601007803e803e80000000046460100f003e80\"\n    + \"3e800000000\",\n    \"Music\": \"07464602000003e803e800000000464602007803e803e80000000046460200f003e803e8\"\n    + \"00000000464602003d03e803e80000000046460200ae03e803e800000000464602011303e803e80\"\n    + \"0000000\",\n}\n\n\ndef map_range(value, from_lower, from_upper, to_lower, to_upper):\n    \"\"\"Map a value in one range to another.\"\"\"\n    mapped = (value - from_lower) * (to_upper - to_lower) / (\n        from_upper - from_lower\n    ) + to_lower\n    return round(min(max(mapped, to_lower), to_upper))\n\n\ndef flow_schema(dps):\n    \"\"\"Return schema used in config flow.\"\"\"\n    return {\n        vol.Optional(CONF_BRIGHTNESS): vol.In(dps),\n        vol.Optional(CONF_COLOR_TEMP): vol.In(dps),\n        vol.Optional(CONF_BRIGHTNESS_LOWER, default=DEFAULT_LOWER_BRIGHTNESS): vol.All(\n            vol.Coerce(int), vol.Range(min=0, max=10000)\n        ),\n        vol.Optional(CONF_BRIGHTNESS_UPPER, default=DEFAULT_UPPER_BRIGHTNESS): vol.All(\n            vol.Coerce(int), vol.Range(min=0, max=10000)\n        ),\n        vol.Optional(CONF_COLOR_MODE): vol.In(dps),\n        vol.Optional(CONF_COLOR): vol.In(dps),\n        vol.Optional(CONF_COLOR_TEMP_MIN_KELVIN, default=DEFAULT_MIN_KELVIN): vol.All(\n            vol.Coerce(int), vol.Range(min=1500, max=8000)\n        ),\n        vol.Optional(CONF_COLOR_TEMP_MAX_KELVIN, default=DEFAULT_MAX_KELVIN): vol.All(\n            vol.Coerce(int), vol.Range(min=1500, max=8000)\n        ),\n        vol.Optional(\n            CONF_COLOR_TEMP_REVERSE,\n            default=DEFAULT_COLOR_TEMP_REVERSE,\n            description={\"suggested_value\": DEFAULT_COLOR_TEMP_REVERSE},\n        ): bool,\n        vol.Optional(CONF_SCENE): vol.In(dps),\n        vol.Optional(\n            CONF_MUSIC_MODE, default=False, description={\"suggested_value\": False}\n        ): bool,\n    }\n\n\nclass LocaltuyaLight(LocalTuyaEntity, LightEntity):\n    \"\"\"Representation of a Tuya light.\"\"\"\n\n    def __init__(\n        self,\n        device,\n        config_entry,\n        lightid,\n        **kwargs,\n    ):\n        \"\"\"Initialize the Tuya light.\"\"\"\n        super().__init__(device, config_entry, lightid, _LOGGER, **kwargs)\n        self._state = False\n        self._brightness = None\n        self._color_temp = None\n        self._lower_brightness = self._config.get(\n            CONF_BRIGHTNESS_LOWER, DEFAULT_LOWER_BRIGHTNESS\n        )\n        self._upper_brightness = self._config.get(\n            CONF_BRIGHTNESS_UPPER, DEFAULT_UPPER_BRIGHTNESS\n        )\n        self._upper_color_temp = self._upper_brightness\n        self._max_mired = color_util.color_temperature_kelvin_to_mired(\n            self._config.get(CONF_COLOR_TEMP_MIN_KELVIN, DEFAULT_MIN_KELVIN)\n        )\n        self._min_mired = color_util.color_temperature_kelvin_to_mired(\n            self._config.get(CONF_COLOR_TEMP_MAX_KELVIN, DEFAULT_MAX_KELVIN)\n        )\n        self._color_temp_reverse = self._config.get(\n            CONF_COLOR_TEMP_REVERSE, DEFAULT_COLOR_TEMP_REVERSE\n        )\n        self._hs = None\n        self._effect = None\n        self._effect_list = []\n        self._scenes = None\n        if self.has_config(CONF_SCENE):\n            if self._config.get(CONF_SCENE) < 20:\n                self._scenes = SCENE_LIST_RGBW_255\n            elif self._config.get(CONF_BRIGHTNESS) is None:\n                self._scenes = SCENE_LIST_RGB_1000\n            else:\n                self._scenes = SCENE_LIST_RGBW_1000\n            self._effect_list = list(self._scenes.keys())\n        if self._config.get(CONF_MUSIC_MODE):\n            self._effect_list.append(SCENE_MUSIC)\n\n    @property\n    def is_on(self):\n        \"\"\"Check if Tuya light is on.\"\"\"\n        return self._state\n\n    @property\n    def brightness(self):\n        \"\"\"Return the brightness of the light.\"\"\"\n        if self.is_color_mode or self.is_white_mode:\n            return map_range(\n                self._brightness, self._lower_brightness, self._upper_brightness, 0, 255\n            )\n        return None\n\n    @property\n    def hs_color(self):\n        \"\"\"Return the hs color value.\"\"\"\n        if self.is_color_mode:\n            return self._hs\n        if (\n            self.supported_features & SUPPORT_COLOR\n            and not self.supported_features & SUPPORT_COLOR_TEMP\n        ):\n            return [0, 0]\n        return None\n\n    @property\n    def color_temp(self):\n        \"\"\"Return the color_temp of the light.\"\"\"\n        if self.has_config(CONF_COLOR_TEMP) and self.is_white_mode:\n            color_temp_value = (\n                self._upper_color_temp - self._color_temp\n                if self._color_temp_reverse\n                else self._color_temp\n            )\n            return int(\n                self._max_mired\n                - (\n                    ((self._max_mired - self._min_mired) / self._upper_color_temp)\n                    * color_temp_value\n                )\n            )\n        return None\n\n    @property\n    def min_mireds(self):\n        \"\"\"Return color temperature min mireds.\"\"\"\n        return self._min_mired\n\n    @property\n    def max_mireds(self):\n        \"\"\"Return color temperature max mireds.\"\"\"\n        return self._max_mired\n\n    @property\n    def effect(self):\n        \"\"\"Return the current effect for this light.\"\"\"\n        if self.is_scene_mode or self.is_music_mode:\n            return self._effect\n        return None\n\n    @property\n    def effect_list(self):\n        \"\"\"Return the list of supported effects for this light.\"\"\"\n        return self._effect_list\n\n    @property\n    def supported_features(self):\n        \"\"\"Flag supported features.\"\"\"\n        supports = 0\n        if self.has_config(CONF_BRIGHTNESS):\n            supports |= SUPPORT_BRIGHTNESS\n        if self.has_config(CONF_COLOR_TEMP):\n            supports |= SUPPORT_COLOR_TEMP\n        if self.has_config(CONF_COLOR):\n            supports |= SUPPORT_COLOR | SUPPORT_BRIGHTNESS\n        if self.has_config(CONF_SCENE) or self.has_config(CONF_MUSIC_MODE):\n            supports |= SUPPORT_EFFECT\n        return supports\n\n    @property\n    def is_white_mode(self):\n        \"\"\"Return true if the light is in white mode.\"\"\"\n        color_mode = self.__get_color_mode()\n        return color_mode is None or color_mode == MODE_WHITE\n\n    @property\n    def is_color_mode(self):\n        \"\"\"Return true if the light is in color mode.\"\"\"\n        color_mode = self.__get_color_mode()\n        return color_mode is not None and color_mode == MODE_COLOR\n\n    @property\n    def is_scene_mode(self):\n        \"\"\"Return true if the light is in scene mode.\"\"\"\n        color_mode = self.__get_color_mode()\n        return color_mode is not None and color_mode.startswith(MODE_SCENE)\n\n    @property\n    def is_music_mode(self):\n        \"\"\"Return true if the light is in music mode.\"\"\"\n        color_mode = self.__get_color_mode()\n        return color_mode is not None and color_mode == MODE_MUSIC\n\n    def __is_color_rgb_encoded(self):\n        return len(self.dps_conf(CONF_COLOR)) > 12\n\n    def __find_scene_by_scene_data(self, data):\n        return next(\n            (item for item in self._effect_list if self._scenes.get(item) == data),\n            SCENE_CUSTOM,\n        )\n\n    def __get_color_mode(self):\n        return (\n            self.dps_conf(CONF_COLOR_MODE)\n            if self.has_config(CONF_COLOR_MODE)\n            else MODE_WHITE\n        )\n\n    async def async_turn_on(self, **kwargs):\n        \"\"\"Turn on or control the light.\"\"\"\n        states = {}\n        if not self.is_on:\n            states[self._dp_id] = True\n        features = self.supported_features\n        brightness = None\n        if ATTR_EFFECT in kwargs and (features & SUPPORT_EFFECT):\n            scene = self._scenes.get(kwargs[ATTR_EFFECT])\n            if scene is not None:\n                if scene.startswith(MODE_SCENE):\n                    states[self._config.get(CONF_COLOR_MODE)] = scene\n                else:\n                    states[self._config.get(CONF_COLOR_MODE)] = MODE_SCENE\n                    states[self._config.get(CONF_SCENE)] = scene\n            elif kwargs[ATTR_EFFECT] == SCENE_MUSIC:\n                states[self._config.get(CONF_COLOR_MODE)] = MODE_MUSIC\n\n        if ATTR_BRIGHTNESS in kwargs and (features & SUPPORT_BRIGHTNESS):\n            brightness = map_range(\n                int(kwargs[ATTR_BRIGHTNESS]),\n                0,\n                255,\n                self._lower_brightness,\n                self._upper_brightness,\n            )\n            if self.is_white_mode:\n                states[self._config.get(CONF_BRIGHTNESS)] = brightness\n            else:\n                if self.__is_color_rgb_encoded():\n                    rgb = color_util.color_hsv_to_RGB(\n                        self._hs[0],\n                        self._hs[1],\n                        int(brightness * 100 / self._upper_brightness),\n                    )\n                    color = \"{:02x}{:02x}{:02x}{:04x}{:02x}{:02x}\".format(\n                        round(rgb[0]),\n                        round(rgb[1]),\n                        round(rgb[2]),\n                        round(self._hs[0]),\n                        round(self._hs[1] * 255 / 100),\n                        brightness,\n                    )\n                else:\n                    color = \"{:04x}{:04x}{:04x}\".format(\n                        round(self._hs[0]), round(self._hs[1] * 10.0), brightness\n                    )\n                states[self._config.get(CONF_COLOR)] = color\n                states[self._config.get(CONF_COLOR_MODE)] = MODE_COLOR\n\n        if ATTR_HS_COLOR in kwargs and (features & SUPPORT_COLOR):\n            if brightness is None:\n                brightness = self._brightness\n            hs = kwargs[ATTR_HS_COLOR]\n            if hs[1] == 0 and self.has_config(CONF_BRIGHTNESS):\n                states[self._config.get(CONF_BRIGHTNESS)] = brightness\n                states[self._config.get(CONF_COLOR_MODE)] = MODE_WHITE\n            else:\n                if self.__is_color_rgb_encoded():\n                    rgb = color_util.color_hsv_to_RGB(\n                        hs[0], hs[1], int(brightness * 100 / self._upper_brightness)\n                    )\n                    color = \"{:02x}{:02x}{:02x}{:04x}{:02x}{:02x}\".format(\n                        round(rgb[0]),\n                        round(rgb[1]),\n                        round(rgb[2]),\n                        round(hs[0]),\n                        round(hs[1] * 255 / 100),\n                        brightness,\n                    )\n                else:\n                    color = \"{:04x}{:04x}{:04x}\".format(\n                        round(hs[0]), round(hs[1] * 10.0), brightness\n                    )\n                states[self._config.get(CONF_COLOR)] = color\n                states[self._config.get(CONF_COLOR_MODE)] = MODE_COLOR\n\n        if ATTR_COLOR_TEMP in kwargs and (features & SUPPORT_COLOR_TEMP):\n            if brightness is None:\n                brightness = self._brightness\n            mired = int(kwargs[ATTR_COLOR_TEMP])\n            if self._color_temp_reverse:\n                mired = self._max_mired - (mired - self._min_mired)\n            if mired < self._min_mired:\n                mired = self._min_mired\n            elif mired > self._max_mired:\n                mired = self._max_mired\n            color_temp = int(\n                self._upper_color_temp\n                - (self._upper_color_temp / (self._max_mired - self._min_mired))\n                * (mired - self._min_mired)\n            )\n            states[self._config.get(CONF_COLOR_MODE)] = MODE_WHITE\n            states[self._config.get(CONF_BRIGHTNESS)] = brightness\n            states[self._config.get(CONF_COLOR_TEMP)] = color_temp\n        await self._device.set_dps(states)\n\n    async def async_turn_off(self, **kwargs):\n        \"\"\"Turn Tuya light off.\"\"\"\n        await self._device.set_dp(False, self._dp_id)\n\n    def status_updated(self):\n        \"\"\"Device status was updated.\"\"\"\n        self._state = self.dps(self._dp_id)\n        supported = self.supported_features\n        self._effect = None\n        if supported & SUPPORT_BRIGHTNESS and self.has_config(CONF_BRIGHTNESS):\n            self._brightness = self.dps_conf(CONF_BRIGHTNESS)\n\n        if supported & SUPPORT_COLOR:\n            color = self.dps_conf(CONF_COLOR)\n            if color is not None and not self.is_white_mode:\n                if self.__is_color_rgb_encoded():\n                    hue = int(color[6:10], 16)\n                    sat = int(color[10:12], 16)\n                    value = int(color[12:14], 16)\n                    self._hs = [hue, (sat * 100 / 255)]\n                    self._brightness = value\n                else:\n                    hue, sat, value = [\n                        int(value, 16) for value in textwrap.wrap(color, 4)\n                    ]\n                    self._hs = [hue, sat / 10.0]\n                    self._brightness = value\n\n        if supported & SUPPORT_COLOR_TEMP:\n            self._color_temp = self.dps_conf(CONF_COLOR_TEMP)\n\n        if self.is_scene_mode and supported & SUPPORT_EFFECT:\n            if self.dps_conf(CONF_COLOR_MODE) != MODE_SCENE:\n                self._effect = self.__find_scene_by_scene_data(\n                    self.dps_conf(CONF_COLOR_MODE)\n                )\n            else:\n                self._effect = self.__find_scene_by_scene_data(\n                    self.dps_conf(CONF_SCENE)\n                )\n                if self._effect == SCENE_CUSTOM:\n                    if SCENE_CUSTOM not in self._effect_list:\n                        self._effect_list.append(SCENE_CUSTOM)\n                elif SCENE_CUSTOM in self._effect_list:\n                    self._effect_list.remove(SCENE_CUSTOM)\n\n        if self.is_music_mode and supported & SUPPORT_EFFECT:\n            self._effect = SCENE_MUSIC\n\n\nasync_setup_entry = partial(async_setup_entry, DOMAIN, LocaltuyaLight, flow_schema)\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/manifest.json",
    "content": "{\n  \"domain\": \"localtuya\",\n  \"name\": \"LocalTuya integration\",\n  \"version\": \"4.0.1\",\n  \"documentation\": \"https://github.com/rospogrigio/localtuya/\",\n  \"dependencies\": [],\n  \"codeowners\": [\n    \"@rospogrigio\", \"@postlund\"\n  ],\n  \"issue_tracker\": \"https://github.com/rospogrigio/localtuya/issues\",\n  \"requirements\": [],\n  \"config_flow\": true,\n  \"iot_class\": \"local_push\"\n}\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/number.py",
    "content": "\"\"\"Platform to present any Tuya DP as a number.\"\"\"\nimport logging\nfrom functools import partial\n\nimport voluptuous as vol\nfrom homeassistant.components.number import DOMAIN, NumberEntity\nfrom homeassistant.const import CONF_DEVICE_CLASS, STATE_UNKNOWN\n\nfrom .common import LocalTuyaEntity, async_setup_entry\n\n_LOGGER = logging.getLogger(__name__)\n\nCONF_MIN_VALUE = \"min_value\"\nCONF_MAX_VALUE = \"max_value\"\n\nDEFAULT_MIN = 0\nDEFAULT_MAX = 100000\n\n\ndef flow_schema(dps):\n    \"\"\"Return schema used in config flow.\"\"\"\n    return {\n        vol.Optional(CONF_MIN_VALUE, default=DEFAULT_MIN): vol.All(\n            vol.Coerce(float),\n            vol.Range(min=-1000000.0, max=1000000.0),\n        ),\n        vol.Required(CONF_MAX_VALUE, default=DEFAULT_MAX): vol.All(\n            vol.Coerce(float),\n            vol.Range(min=-1000000.0, max=1000000.0),\n        ),\n    }\n\n\nclass LocaltuyaNumber(LocalTuyaEntity, NumberEntity):\n    \"\"\"Representation of a Tuya Number.\"\"\"\n\n    def __init__(\n        self,\n        device,\n        config_entry,\n        sensorid,\n        **kwargs,\n    ):\n        \"\"\"Initialize the Tuya sensor.\"\"\"\n        super().__init__(device, config_entry, sensorid, _LOGGER, **kwargs)\n        self._state = STATE_UNKNOWN\n\n        self._min_value = DEFAULT_MIN\n        if CONF_MIN_VALUE in self._config:\n            self._min_value = self._config.get(CONF_MIN_VALUE)\n\n        self._max_value = self._config.get(CONF_MAX_VALUE)\n\n    @property\n    def value(self) -> float:\n        \"\"\"Return sensor state.\"\"\"\n        return self._state\n\n    @property\n    def min_value(self) -> float:\n        \"\"\"Return the minimum value.\"\"\"\n        return self._min_value\n\n    @property\n    def max_value(self) -> float:\n        \"\"\"Return the maximum value.\"\"\"\n        return self._max_value\n\n    @property\n    def device_class(self):\n        \"\"\"Return the class of this device.\"\"\"\n        return self._config.get(CONF_DEVICE_CLASS)\n\n    async def async_set_value(self, value: float) -> None:\n        \"\"\"Update the current value.\"\"\"\n        await self._device.set_dp(value, self._dp_id)\n\n    def status_updated(self):\n        \"\"\"Device status was updated.\"\"\"\n        state = self.dps(self._dp_id)\n        self._state = state\n\n\nasync_setup_entry = partial(async_setup_entry, DOMAIN, LocaltuyaNumber, flow_schema)\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/pytuya/__init__.py",
    "content": "# PyTuya Module\n# -*- coding: utf-8 -*-\n\"\"\"\nPython module to interface with Tuya WiFi smart devices.\n\nMostly derived from Shenzhen Xenon ESP8266MOD WiFi smart devices\nE.g. https://wikidevi.com/wiki/Xenon_SM-PW701U\n\nAuthor: clach04\nMaintained by: postlund\n\nFor more information see https://github.com/clach04/python-tuya\n\nClasses\n   TuyaInterface(dev_id, address, local_key=None)\n       dev_id (str): Device ID e.g. 01234567891234567890\n       address (str): Device Network IP Address e.g. 10.0.1.99\n       local_key (str, optional): The encryption key. Defaults to None.\n\nFunctions\n   json = status()          # returns json payload\n   set_version(version)     #  3.1 [default] or 3.3\n   detect_available_dps()   # returns a list of available dps provided by the device\n   update_dps(dps)          # sends update dps command\n   add_dps_to_request(dp_index)  # adds dp_index to the list of dps used by the\n                                  # device (to be queried in the payload)\n   set_dp(on, dp_index)   # Set value of any dps index.\n\n\nCredits\n * TuyaAPI https://github.com/codetheweb/tuyapi by codetheweb and blackrozes\n   For protocol reverse engineering\n * PyTuya https://github.com/clach04/python-tuya by clach04\n   The origin of this python module (now abandoned)\n * LocalTuya https://github.com/rospogrigio/localtuya-homeassistant by rospogrigio\n   Updated pytuya to support devices with Device IDs of 22 characters\n\"\"\"\n\nimport asyncio\nimport base64\nimport binascii\nimport json\nimport logging\nimport struct\nimport time\nimport weakref\nfrom abc import ABC, abstractmethod\nfrom collections import namedtuple\nfrom hashlib import md5\n\nfrom cryptography.hazmat.backends import default_backend\nfrom cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes\n\nversion_tuple = (9, 0, 0)\nversion = version_string = __version__ = \"%d.%d.%d\" % version_tuple\n__author__ = \"postlund\"\n\n_LOGGER = logging.getLogger(__name__)\n\nTuyaMessage = namedtuple(\"TuyaMessage\", \"seqno cmd retcode payload crc\")\n\nSET = \"set\"\nSTATUS = \"status\"\nHEARTBEAT = \"heartbeat\"\nUPDATEDPS = \"updatedps\"  # Request refresh of DPS\n\nPROTOCOL_VERSION_BYTES_31 = b\"3.1\"\nPROTOCOL_VERSION_BYTES_33 = b\"3.3\"\n\nPROTOCOL_33_HEADER = PROTOCOL_VERSION_BYTES_33 + 12 * b\"\\x00\"\n\nMESSAGE_HEADER_FMT = \">4I\"  # 4*uint32: prefix, seqno, cmd, length\nMESSAGE_RECV_HEADER_FMT = \">5I\"  # 4*uint32: prefix, seqno, cmd, length, retcode\nMESSAGE_END_FMT = \">2I\"  # 2*uint32: crc, suffix\n\nPREFIX_VALUE = 0x000055AA\nSUFFIX_VALUE = 0x0000AA55\n\nHEARTBEAT_INTERVAL = 10\n\n# DPS that are known to be safe to use with update_dps (0x12) command\nUPDATE_DPS_WHITELIST = [18, 19, 20]  # Socket (Wi-Fi)\n\n# This is intended to match requests.json payload at\n# https://github.com/codetheweb/tuyapi :\n# type_0a devices require the 0a command as the status request\n# type_0d devices require the 0d command as the status request, and the list of\n# dps used set to null in the request payload (see generate_payload method)\n\n# prefix: # Next byte is command byte (\"hexByte\") some zero padding, then length\n# of remaining payload, i.e. command + suffix (unclear if multiple bytes used for\n# length, zero padding implies could be more than one byte)\nPAYLOAD_DICT = {\n    \"type_0a\": {\n        STATUS: {\"hexByte\": 0x0A, \"command\": {\"gwId\": \"\", \"devId\": \"\"}},\n        SET: {\"hexByte\": 0x07, \"command\": {\"devId\": \"\", \"uid\": \"\", \"t\": \"\"}},\n        HEARTBEAT: {\"hexByte\": 0x09, \"command\": {}},\n        UPDATEDPS: {\"hexByte\": 0x12, \"command\": {\"dpId\": [18, 19, 20]}},\n    },\n    \"type_0d\": {\n        STATUS: {\"hexByte\": 0x0D, \"command\": {\"devId\": \"\", \"uid\": \"\", \"t\": \"\"}},\n        SET: {\"hexByte\": 0x07, \"command\": {\"devId\": \"\", \"uid\": \"\", \"t\": \"\"}},\n        HEARTBEAT: {\"hexByte\": 0x09, \"command\": {}},\n        UPDATEDPS: {\"hexByte\": 0x12, \"command\": {\"dpId\": [18, 19, 20]}},\n    },\n}\n\n\nclass TuyaLoggingAdapter(logging.LoggerAdapter):\n    \"\"\"Adapter that adds device id to all log points.\"\"\"\n\n    def process(self, msg, kwargs):\n        \"\"\"Process log point and return output.\"\"\"\n        dev_id = self.extra[\"device_id\"]\n        return f\"[{dev_id[0:3]}...{dev_id[-3:]}] {msg}\", kwargs\n\n\nclass ContextualLogger:\n    \"\"\"Contextual logger adding device id to log points.\"\"\"\n\n    def __init__(self):\n        \"\"\"Initialize a new ContextualLogger.\"\"\"\n        self._logger = None\n\n    def set_logger(self, logger, device_id):\n        \"\"\"Set base logger to use.\"\"\"\n        self._logger = TuyaLoggingAdapter(logger, {\"device_id\": device_id})\n\n    def debug(self, msg, *args):\n        \"\"\"Debug level log.\"\"\"\n        return self._logger.log(logging.DEBUG, msg, *args)\n\n    def info(self, msg, *args):\n        \"\"\"Info level log.\"\"\"\n        return self._logger.log(logging.INFO, msg, *args)\n\n    def warning(self, msg, *args):\n        \"\"\"Warning method log.\"\"\"\n        return self._logger.log(logging.WARNING, msg, *args)\n\n    def error(self, msg, *args):\n        \"\"\"Error level log.\"\"\"\n        return self._logger.log(logging.ERROR, msg, *args)\n\n    def exception(self, msg, *args):\n        \"\"\"Exception level log.\"\"\"\n        return self._logger.exception(msg, *args)\n\n\ndef pack_message(msg):\n    \"\"\"Pack a TuyaMessage into bytes.\"\"\"\n    # Create full message excluding CRC and suffix\n    buffer = (\n        struct.pack(\n            MESSAGE_HEADER_FMT,\n            PREFIX_VALUE,\n            msg.seqno,\n            msg.cmd,\n            len(msg.payload) + struct.calcsize(MESSAGE_END_FMT),\n        )\n        + msg.payload\n    )\n\n    # Calculate CRC, add it together with suffix\n    buffer += struct.pack(MESSAGE_END_FMT, binascii.crc32(buffer), SUFFIX_VALUE)\n\n    return buffer\n\n\ndef unpack_message(data):\n    \"\"\"Unpack bytes into a TuyaMessage.\"\"\"\n    header_len = struct.calcsize(MESSAGE_RECV_HEADER_FMT)\n    end_len = struct.calcsize(MESSAGE_END_FMT)\n\n    _, seqno, cmd, _, retcode = struct.unpack(\n        MESSAGE_RECV_HEADER_FMT, data[:header_len]\n    )\n    payload = data[header_len:-end_len]\n    crc, _ = struct.unpack(MESSAGE_END_FMT, data[-end_len:])\n    return TuyaMessage(seqno, cmd, retcode, payload, crc)\n\n\nclass AESCipher:\n    \"\"\"Cipher module for Tuya communication.\"\"\"\n\n    def __init__(self, key):\n        \"\"\"Initialize a new AESCipher.\"\"\"\n        self.block_size = 16\n        self.cipher = Cipher(algorithms.AES(key), modes.ECB(), default_backend())\n\n    def encrypt(self, raw, use_base64=True):\n        \"\"\"Encrypt data to be sent to device.\"\"\"\n        encryptor = self.cipher.encryptor()\n        crypted_text = encryptor.update(self._pad(raw)) + encryptor.finalize()\n        return base64.b64encode(crypted_text) if use_base64 else crypted_text\n\n    def decrypt(self, enc, use_base64=True):\n        \"\"\"Decrypt data from device.\"\"\"\n        if use_base64:\n            enc = base64.b64decode(enc)\n\n        decryptor = self.cipher.decryptor()\n        return self._unpad(decryptor.update(enc) + decryptor.finalize()).decode()\n\n    def _pad(self, data):\n        padnum = self.block_size - len(data) % self.block_size\n        return data + padnum * chr(padnum).encode()\n\n    @staticmethod\n    def _unpad(data):\n        return data[: -ord(data[len(data) - 1 :])]\n\n\nclass MessageDispatcher(ContextualLogger):\n    \"\"\"Buffer and dispatcher for Tuya messages.\"\"\"\n\n    # Heartbeats always respond with sequence number 0, so they can't be waited for like\n    # other messages. This is a hack to allow waiting for heartbeats.\n    HEARTBEAT_SEQNO = -100\n\n    def __init__(self, dev_id, listener):\n        \"\"\"Initialize a new MessageBuffer.\"\"\"\n        super().__init__()\n        self.buffer = b\"\"\n        self.listeners = {}\n        self.listener = listener\n        self.set_logger(_LOGGER, dev_id)\n\n    def abort(self):\n        \"\"\"Abort all waiting clients.\"\"\"\n        for key in self.listeners:\n            sem = self.listeners[key]\n            self.listeners[key] = None\n\n            # TODO: Received data and semahore should be stored separately\n            if isinstance(sem, asyncio.Semaphore):\n                sem.release()\n\n    async def wait_for(self, seqno, timeout=5):\n        \"\"\"Wait for response to a sequence number to be received and return it.\"\"\"\n        if seqno in self.listeners:\n            raise Exception(f\"listener exists for {seqno}\")\n\n        self.debug(\"Waiting for sequence number %d\", seqno)\n        self.listeners[seqno] = asyncio.Semaphore(0)\n        try:\n            await asyncio.wait_for(self.listeners[seqno].acquire(), timeout=timeout)\n        except asyncio.TimeoutError:\n            del self.listeners[seqno]\n            raise\n\n        return self.listeners.pop(seqno)\n\n    def add_data(self, data):\n        \"\"\"Add new data to the buffer and try to parse messages.\"\"\"\n        self.buffer += data\n        header_len = struct.calcsize(MESSAGE_RECV_HEADER_FMT)\n\n        while self.buffer:\n            # Check if enough data for measage header\n            if len(self.buffer) < header_len:\n                break\n\n            # Parse header and check if enough data according to length in header\n            _, seqno, cmd, length, retcode = struct.unpack_from(\n                MESSAGE_RECV_HEADER_FMT, self.buffer\n            )\n            if len(self.buffer[header_len - 4 :]) < length:\n                break\n\n            # length includes payload length, retcode, crc and suffix\n            if (retcode & 0xFFFFFF00) != 0:\n                payload_start = header_len - 4\n                payload_length = length - struct.calcsize(MESSAGE_END_FMT)\n            else:\n                payload_start = header_len\n                payload_length = length - 4 - struct.calcsize(MESSAGE_END_FMT)\n            payload = self.buffer[payload_start : payload_start + payload_length]\n\n            crc, _ = struct.unpack_from(\n                MESSAGE_END_FMT,\n                self.buffer[payload_start + payload_length : payload_start + length],\n            )\n\n            self.buffer = self.buffer[header_len - 4 + length :]\n            self._dispatch(TuyaMessage(seqno, cmd, retcode, payload, crc))\n\n    def _dispatch(self, msg):\n        \"\"\"Dispatch a message to someone that is listening.\"\"\"\n        self.debug(\"Dispatching message %s\", msg)\n        if msg.seqno in self.listeners:\n            self.debug(\"Dispatching sequence number %d\", msg.seqno)\n            sem = self.listeners[msg.seqno]\n            self.listeners[msg.seqno] = msg\n            sem.release()\n        elif msg.cmd == 0x09:\n            self.debug(\"Got heartbeat response\")\n            if self.HEARTBEAT_SEQNO in self.listeners:\n                sem = self.listeners[self.HEARTBEAT_SEQNO]\n                self.listeners[self.HEARTBEAT_SEQNO] = msg\n                sem.release()\n        elif msg.cmd == 0x12:\n            self.debug(\"Got normal updatedps response\")\n        elif msg.cmd == 0x08:\n            self.debug(\"Got status update\")\n            self.listener(msg)\n        else:\n            self.debug(\n                \"Got message type %d for unknown listener %d: %s\",\n                msg.cmd,\n                msg.seqno,\n                msg,\n            )\n\n\nclass TuyaListener(ABC):\n    \"\"\"Listener interface for Tuya device changes.\"\"\"\n\n    @abstractmethod\n    def status_updated(self, status):\n        \"\"\"Device updated status.\"\"\"\n\n    @abstractmethod\n    def disconnected(self):\n        \"\"\"Device disconnected.\"\"\"\n\n\nclass EmptyListener(TuyaListener):\n    \"\"\"Listener doing nothing.\"\"\"\n\n    def status_updated(self, status):\n        \"\"\"Device updated status.\"\"\"\n\n    def disconnected(self):\n        \"\"\"Device disconnected.\"\"\"\n\n\nclass TuyaProtocol(asyncio.Protocol, ContextualLogger):\n    \"\"\"Implementation of the Tuya protocol.\"\"\"\n\n    def __init__(self, dev_id, local_key, protocol_version, on_connected, listener):\n        \"\"\"\n        Initialize a new TuyaInterface.\n\n        Args:\n            dev_id (str): The device id.\n            address (str): The network address.\n            local_key (str, optional): The encryption key. Defaults to None.\n\n        Attributes:\n            port (int): The port to connect to.\n        \"\"\"\n        super().__init__()\n        self.loop = asyncio.get_running_loop()\n        self.set_logger(_LOGGER, dev_id)\n        self.id = dev_id\n        self.local_key = local_key.encode(\"latin1\")\n        self.version = protocol_version\n        self.dev_type = \"type_0a\"\n        self.dps_to_request = {}\n        self.cipher = AESCipher(self.local_key)\n        self.seqno = 0\n        self.transport = None\n        self.listener = weakref.ref(listener)\n        self.dispatcher = self._setup_dispatcher()\n        self.on_connected = on_connected\n        self.heartbeater = None\n        self.dps_cache = {}\n\n    def _setup_dispatcher(self):\n        def _status_update(msg):\n            decoded_message = self._decode_payload(msg.payload)\n            if \"dps\" in decoded_message:\n                self.dps_cache.update(decoded_message[\"dps\"])\n\n            listener = self.listener and self.listener()\n            if listener is not None:\n                listener.status_updated(self.dps_cache)\n\n        return MessageDispatcher(self.id, _status_update)\n\n    def connection_made(self, transport):\n        \"\"\"Did connect to the device.\"\"\"\n\n        async def heartbeat_loop():\n            \"\"\"Continuously send heart beat updates.\"\"\"\n            self.debug(\"Started heartbeat loop\")\n            while True:\n                try:\n                    await self.heartbeat()\n                    await asyncio.sleep(HEARTBEAT_INTERVAL)\n                except asyncio.CancelledError:\n                    self.debug(\"Stopped heartbeat loop\")\n                    raise\n                except asyncio.TimeoutError:\n                    self.debug(\"Heartbeat failed due to timeout, disconnecting\")\n                    break\n                except Exception as ex:  # pylint: disable=broad-except\n                    self.exception(\"Heartbeat failed (%s), disconnecting\", ex)\n                    break\n\n            transport = self.transport\n            self.transport = None\n            transport.close()\n\n        self.transport = transport\n        self.on_connected.set_result(True)\n        self.heartbeater = self.loop.create_task(heartbeat_loop())\n\n    def data_received(self, data):\n        \"\"\"Received data from device.\"\"\"\n        self.dispatcher.add_data(data)\n\n    def connection_lost(self, exc):\n        \"\"\"Disconnected from device.\"\"\"\n        self.debug(\"Connection lost: %s\", exc)\n        try:\n            listener = self.listener and self.listener()\n            if listener is not None:\n                listener.disconnected()\n        except Exception:  # pylint: disable=broad-except\n            self.exception(\"Failed to call disconnected callback\")\n\n    async def close(self):\n        \"\"\"Close connection and abort all outstanding listeners.\"\"\"\n        self.debug(\"Closing connection\")\n        if self.heartbeater is not None:\n            self.heartbeater.cancel()\n            try:\n                await self.heartbeater\n            except asyncio.CancelledError:\n                pass\n            self.heartbeater = None\n        if self.dispatcher is not None:\n            self.dispatcher.abort()\n            self.dispatcher = None\n        if self.transport is not None:\n            transport = self.transport\n            self.transport = None\n            transport.close()\n\n    async def exchange(self, command, dps=None):\n        \"\"\"Send and receive a message, returning response from device.\"\"\"\n        self.debug(\n            \"Sending command %s (device type: %s)\",\n            command,\n            self.dev_type,\n        )\n        payload = self._generate_payload(command, dps)\n        dev_type = self.dev_type\n\n        # Wait for special sequence number if heartbeat\n        seqno = (\n            MessageDispatcher.HEARTBEAT_SEQNO\n            if command == HEARTBEAT\n            else (self.seqno - 1)\n        )\n\n        self.transport.write(payload)\n        msg = await self.dispatcher.wait_for(seqno)\n        if msg is None:\n            self.debug(\"Wait was aborted for seqno %d\", seqno)\n            return None\n\n        # TODO: Verify stuff, e.g. CRC sequence number?\n        payload = self._decode_payload(msg.payload)\n\n        # Perform a new exchange (once) if we switched device type\n        if dev_type != self.dev_type:\n            self.debug(\n                \"Re-send %s due to device type change (%s -> %s)\",\n                command,\n                dev_type,\n                self.dev_type,\n            )\n            return await self.exchange(command, dps)\n        return payload\n\n    async def status(self):\n        \"\"\"Return device status.\"\"\"\n        status = await self.exchange(STATUS)\n        if status and \"dps\" in status:\n            self.dps_cache.update(status[\"dps\"])\n        return self.dps_cache\n\n    async def heartbeat(self):\n        \"\"\"Send a heartbeat message.\"\"\"\n        return await self.exchange(HEARTBEAT)\n\n    async def update_dps(self, dps=None):\n        \"\"\"\n        Request device to update index.\n\n        Args:\n            dps([int]): list of dps to update, default=detected&whitelisted\n        \"\"\"\n        if self.version == 3.3:\n            if dps is None:\n                if not self.dps_cache:\n                    await self.detect_available_dps()\n                if self.dps_cache:\n                    dps = [int(dp) for dp in self.dps_cache]\n                    # filter non whitelisted dps\n                    dps = list(set(dps).intersection(set(UPDATE_DPS_WHITELIST)))\n            self.debug(\"updatedps() entry (dps %s, dps_cache %s)\", dps, self.dps_cache)\n            payload = self._generate_payload(UPDATEDPS, dps)\n            self.transport.write(payload)\n        return True\n\n    async def set_dp(self, value, dp_index):\n        \"\"\"\n        Set value (may be any type: bool, int or string) of any dps index.\n\n        Args:\n            dp_index(int):   dps index to set\n            value: new value for the dps index\n        \"\"\"\n        return await self.exchange(SET, {str(dp_index): value})\n\n    async def set_dps(self, dps):\n        \"\"\"Set values for a set of datapoints.\"\"\"\n        return await self.exchange(SET, dps)\n\n    async def detect_available_dps(self):\n        \"\"\"Return which datapoints are supported by the device.\"\"\"\n        # type_0d devices need a sort of bruteforce querying in order to detect the\n        # list of available dps experience shows that the dps available are usually\n        # in the ranges [1-25] and [100-110] need to split the bruteforcing in\n        # different steps due to request payload limitation (max. length = 255)\n        self.dps_cache = {}\n        ranges = [(2, 11), (11, 21), (21, 31), (100, 111)]\n\n        for dps_range in ranges:\n            # dps 1 must always be sent, otherwise it might fail in case no dps is found\n            # in the requested range\n            self.dps_to_request = {\"1\": None}\n            self.add_dps_to_request(range(*dps_range))\n            try:\n                data = await self.status()\n            except Exception as ex:\n                self.exception(\"Failed to get status: %s\", ex)\n                raise\n            if \"dps\" in data:\n                self.dps_cache.update(data[\"dps\"])\n\n            if self.dev_type == \"type_0a\":\n                return self.dps_cache\n        self.debug(\"Detected dps: %s\", self.dps_cache)\n        return self.dps_cache\n\n    def add_dps_to_request(self, dp_indicies):\n        \"\"\"Add a datapoint (DP) to be included in requests.\"\"\"\n        if isinstance(dp_indicies, int):\n            self.dps_to_request[str(dp_indicies)] = None\n        else:\n            self.dps_to_request.update({str(index): None for index in dp_indicies})\n\n    def _decode_payload(self, payload):\n        if not payload:\n            payload = \"{}\"\n        elif payload.startswith(b\"{\"):\n            pass\n        elif payload.startswith(PROTOCOL_VERSION_BYTES_31):\n            payload = payload[len(PROTOCOL_VERSION_BYTES_31) :]  # remove version header\n            # remove (what I'm guessing, but not confirmed is) 16-bytes of MD5\n            # hexdigest of payload\n            payload = self.cipher.decrypt(payload[16:])\n        elif self.version == 3.3:\n            if self.dev_type != \"type_0a\" or payload.startswith(\n                PROTOCOL_VERSION_BYTES_33\n            ):\n                payload = payload[len(PROTOCOL_33_HEADER) :]\n            payload = self.cipher.decrypt(payload, False)\n\n            if \"data unvalid\" in payload:\n                self.dev_type = \"type_0d\"\n                self.debug(\n                    \"switching to dev_type %s\",\n                    self.dev_type,\n                )\n                return None\n        else:\n            raise Exception(f\"Unexpected payload={payload}\")\n\n        if not isinstance(payload, str):\n            payload = payload.decode()\n        self.debug(\"Decrypted payload: %s\", payload)\n        return json.loads(payload)\n\n    def _generate_payload(self, command, data=None):\n        \"\"\"\n        Generate the payload to send.\n\n        Args:\n            command(str): The type of command.\n                This is one of the entries from payload_dict\n            data(dict, optional): The data to be send.\n                This is what will be passed via the 'dps' entry\n        \"\"\"\n        cmd_data = PAYLOAD_DICT[self.dev_type][command]\n        json_data = cmd_data[\"command\"]\n        command_hb = cmd_data[\"hexByte\"]\n\n        if \"gwId\" in json_data:\n            json_data[\"gwId\"] = self.id\n        if \"devId\" in json_data:\n            json_data[\"devId\"] = self.id\n        if \"uid\" in json_data:\n            json_data[\"uid\"] = self.id  # still use id, no separate uid\n        if \"t\" in json_data:\n            json_data[\"t\"] = str(int(time.time()))\n\n        if data is not None:\n            if \"dpId\" in json_data:\n                json_data[\"dpId\"] = data\n            else:\n                json_data[\"dps\"] = data\n        elif command_hb == 0x0D:\n            json_data[\"dps\"] = self.dps_to_request\n\n        payload = json.dumps(json_data).replace(\" \", \"\").encode(\"utf-8\")\n        self.debug(\"Send payload: %s\", payload)\n\n        if self.version == 3.3:\n            payload = self.cipher.encrypt(payload, False)\n            if command_hb not in [0x0A, 0x12]:\n                # add the 3.3 header\n                payload = PROTOCOL_33_HEADER + payload\n        elif command == SET:\n            payload = self.cipher.encrypt(payload)\n            to_hash = (\n                b\"data=\"\n                + payload\n                + b\"||lpv=\"\n                + PROTOCOL_VERSION_BYTES_31\n                + b\"||\"\n                + self.local_key\n            )\n            hasher = md5()\n            hasher.update(to_hash)\n            hexdigest = hasher.hexdigest()\n            payload = (\n                PROTOCOL_VERSION_BYTES_31\n                + hexdigest[8:][:16].encode(\"latin1\")\n                + payload\n            )\n\n        msg = TuyaMessage(self.seqno, command_hb, 0, payload, 0)\n        self.seqno += 1\n        return pack_message(msg)\n\n    def __repr__(self):\n        \"\"\"Return internal string representation of object.\"\"\"\n        return self.id\n\n\nasync def connect(\n    address,\n    device_id,\n    local_key,\n    protocol_version,\n    listener=None,\n    port=6668,\n    timeout=5,\n):\n    \"\"\"Connect to a device.\"\"\"\n    loop = asyncio.get_running_loop()\n    on_connected = loop.create_future()\n    _, protocol = await loop.create_connection(\n        lambda: TuyaProtocol(\n            device_id,\n            local_key,\n            protocol_version,\n            on_connected,\n            listener or EmptyListener(),\n        ),\n        address,\n        port,\n    )\n\n    await asyncio.wait_for(on_connected, timeout=timeout)\n    return protocol\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/select.py",
    "content": "\"\"\"Platform to present any Tuya DP as an enumeration.\"\"\"\nimport logging\nfrom functools import partial\n\nimport voluptuous as vol\nfrom homeassistant.components.select import DOMAIN, SelectEntity\nfrom homeassistant.const import CONF_DEVICE_CLASS, STATE_UNKNOWN\n\nfrom .common import LocalTuyaEntity, async_setup_entry\n\n_LOGGER = logging.getLogger(__name__)\n\nCONF_OPTIONS = \"select_options\"\nCONF_OPTIONS_FRIENDLY = \"select_options_friendly\"\n\n\ndef flow_schema(dps):\n    \"\"\"Return schema used in config flow.\"\"\"\n    return {\n        vol.Required(CONF_OPTIONS): str,\n        vol.Optional(CONF_OPTIONS_FRIENDLY): str,\n    }\n\n\nclass LocaltuyaSelect(LocalTuyaEntity, SelectEntity):\n    \"\"\"Representation of a Tuya Enumeration.\"\"\"\n\n    def __init__(\n        self,\n        device,\n        config_entry,\n        sensorid,\n        **kwargs,\n    ):\n        \"\"\"Initialize the Tuya sensor.\"\"\"\n        super().__init__(device, config_entry, sensorid, _LOGGER, **kwargs)\n        self._state = STATE_UNKNOWN\n        self._state_friendly = \"\"\n        self._valid_options = self._config.get(CONF_OPTIONS).split(\";\")\n\n        # Set Display options\n        self._display_options = []\n        display_options_str = \"\"\n        if CONF_OPTIONS_FRIENDLY in self._config:\n            display_options_str = self._config.get(CONF_OPTIONS_FRIENDLY).strip()\n        _LOGGER.debug(\"Display Options Configured: %s\", display_options_str)\n\n        if display_options_str.find(\";\") >= 0:\n            self._display_options = display_options_str.split(\";\")\n        elif len(display_options_str.strip()) > 0:\n            self._display_options.append(display_options_str)\n        else:\n            # Default display string to raw string\n            _LOGGER.debug(\"No Display options configured - defaulting to raw values\")\n            self._display_options = self._valid_options\n\n        _LOGGER.debug(\n            \"Total Raw Options: %s - Total Display Options: %s\",\n            str(len(self._valid_options)),\n            str(len(self._display_options)),\n        )\n        if len(self._valid_options) > len(self._display_options):\n            # If list of display items smaller than list of valid items,\n            # then default remaining items to be the raw value\n            _LOGGER.debug(\n                \"Valid options is larger than display options - \\\n                           filling up with raw values\"\n            )\n            for i in range(len(self._display_options), len(self._valid_options)):\n                self._display_options.append(self._valid_options[i])\n\n    @property\n    def current_option(self) -> str:\n        \"\"\"Return the current value.\"\"\"\n        return self._state_friendly\n\n    @property\n    def options(self) -> list:\n        \"\"\"Return the list of values.\"\"\"\n        return self._display_options\n\n    @property\n    def device_class(self):\n        \"\"\"Return the class of this device.\"\"\"\n        return self._config.get(CONF_DEVICE_CLASS)\n\n    async def async_select_option(self, option: str) -> None:\n        \"\"\"Update the current value.\"\"\"\n        option_value = self._valid_options[self._display_options.index(option)]\n        _LOGGER.debug(\"Sending Option: \" + option + \" -> \" + option_value)\n        await self._device.set_dp(option_value, self._dp_id)\n\n    def status_updated(self):\n        \"\"\"Device status was updated.\"\"\"\n        state = self.dps(self._dp_id)\n        self._state_friendly = self._display_options[self._valid_options.index(state)]\n        self._state = state\n\n\nasync_setup_entry = partial(async_setup_entry, DOMAIN, LocaltuyaSelect, flow_schema)\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/sensor.py",
    "content": "\"\"\"Platform to present any Tuya DP as a sensor.\"\"\"\nimport logging\nfrom functools import partial\n\nimport voluptuous as vol\nfrom homeassistant.components.sensor import DEVICE_CLASSES, DOMAIN\nfrom homeassistant.const import (\n    CONF_DEVICE_CLASS,\n    CONF_UNIT_OF_MEASUREMENT,\n    STATE_UNKNOWN,\n)\n\nfrom .common import LocalTuyaEntity, async_setup_entry\nfrom .const import CONF_SCALING\n\n_LOGGER = logging.getLogger(__name__)\n\nDEFAULT_PRECISION = 2\n\n\ndef flow_schema(dps):\n    \"\"\"Return schema used in config flow.\"\"\"\n    return {\n        vol.Optional(CONF_UNIT_OF_MEASUREMENT): str,\n        vol.Optional(CONF_DEVICE_CLASS): vol.In(DEVICE_CLASSES),\n        vol.Optional(CONF_SCALING): vol.All(\n            vol.Coerce(float), vol.Range(min=-1000000.0, max=1000000.0)\n        ),\n    }\n\n\nclass LocaltuyaSensor(LocalTuyaEntity):\n    \"\"\"Representation of a Tuya sensor.\"\"\"\n\n    def __init__(\n        self,\n        device,\n        config_entry,\n        sensorid,\n        **kwargs,\n    ):\n        \"\"\"Initialize the Tuya sensor.\"\"\"\n        super().__init__(device, config_entry, sensorid, _LOGGER, **kwargs)\n        self._state = STATE_UNKNOWN\n\n    @property\n    def state(self):\n        \"\"\"Return sensor state.\"\"\"\n        return self._state\n\n    @property\n    def device_class(self):\n        \"\"\"Return the class of this device.\"\"\"\n        return self._config.get(CONF_DEVICE_CLASS)\n\n    @property\n    def unit_of_measurement(self):\n        \"\"\"Return the unit of measurement of this entity, if any.\"\"\"\n        return self._config.get(CONF_UNIT_OF_MEASUREMENT)\n\n    def status_updated(self):\n        \"\"\"Device status was updated.\"\"\"\n        state = self.dps(self._dp_id)\n        scale_factor = self._config.get(CONF_SCALING)\n        if scale_factor is not None and isinstance(state, (int, float)):\n            state = round(state * scale_factor, DEFAULT_PRECISION)\n        self._state = state\n\n\nasync_setup_entry = partial(async_setup_entry, DOMAIN, LocaltuyaSensor, flow_schema)\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/services.yaml",
    "content": "reload:\n  description: Reload localtuya and reconnect to all devices.\n\nset_dp:\n  description: Change the value of a datapoint (DP)\n  fields:\n    device_id:\n      description: Device ID of device to change datapoint value for\n      example: 11100118278aab4de001\n    dp:\n      description: Datapoint index\n      example: 1\n    value:\n      description: New value to set\n      example: False\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/strings.json",
    "content": "{\n    \"config\": {\n        \"abort\": {\n            \"already_configured\": \"Device has already been configured.\",\n            \"unsupported_device_type\": \"Unsupported device type!\"\n        },\n        \"error\": {\n            \"cannot_connect\": \"Cannot connect to device. Verify that address is correct.\",\n            \"invalid_auth\": \"Failed to authenticate with device. Verify that device id and local key are correct.\",\n            \"unknown\": \"An unknown error occurred. See log for details.\",\n            \"switch_already_configured\": \"Switch with this ID has already been configured.\"\n        },\n        \"step\": {\n            \"user\": {\n                \"title\": \"Main Configuration\",\n                \"description\": \"Input the credentials for Tuya Cloud API.\",\n                \"data\": {\n                    \"region\": \"API server region\",\n                    \"client_id\": \"Client ID\",\n                    \"client_secret\": \"Secret\",\n                    \"user_id\": \"User ID\"\n                }\n            },\n            \"power_outlet\": {\n                \"title\": \"Add subswitch\",\n\t\t\"description\": \"You are about to add subswitch number `{number}`. If you want to add another, tick `Add another switch` before continuing.\",\n                \"data\": {\n                    \"id\": \"ID\",\n                    \"name\": \"Name\",\n                    \"friendly_name\": \"Friendly name\",\n                    \"current\": \"Current\",\n                    \"current_consumption\": \"Current Consumption\",\n                    \"voltage\": \"Voltage\",\n                    \"add_another_switch\": \"Add another switch\"\n                }\n            }\n        }\n    },\n    \"options\": {\n        \"step\": {\n            \"init\": {\n                \"title\": \"LocalTuya Configuration\",\n                \"description\": \"Please select the desired actionSSSS.\",\n                \"data\": {\n                    \"add_device\": \"Add a new device\",\n                    \"edit_device\": \"Edit a device\",\n                    \"delete_device\": \"Delete a device\",\n                    \"setup_cloud\": \"Reconfigure Cloud API account\"\n                }\n            },\n            \"entity\": {\n                \"title\": \"Entity Configuration\",\n                \"description\": \"Editing entity with DPS `{id}` and platform `{platform}`.\",\n                \"data\": {\n                    \"id\": \"ID\",\n                    \"friendly_name\": \"Friendly name\",\n                    \"current\": \"Current\",\n                    \"current_consumption\": \"Current Consumption\",\n                    \"voltage\": \"Voltage\",\n                    \"commands_set\": \"Open_Close_Stop Commands Set\",\n                    \"positioning_mode\": \"Positioning mode\",\n                    \"current_position_dp\": \"Current Position (for *position* mode only)\",\n                    \"set_position_dp\": \"Set Position (for *position* mode only)\",\n                    \"position_inverted\": \"Invert 0-100 position (for *position* mode only)\",\n                    \"span_time\": \"Full opening time, in secs. (for *timed* mode only)\",\n                    \"unit_of_measurement\": \"Unit of Measurement\",\n                    \"device_class\": \"Device Class\",\n                    \"scaling\": \"Scaling Factor\",\n                    \"state_on\": \"On Value\",\n                    \"state_off\": \"Off Value\",\n                    \"powergo_dp\": \"Power DP (Usually 25 or 2)\",\n                    \"idle_status_value\": \"Idle Status (comma-separated)\",\n                    \"returning_status_value\": \"Returning Status\",\n                    \"docked_status_value\": \"Docked Status (comma-separated)\",\n                    \"fault_dp\": \"Fault DP (Usually 11)\",\n                    \"battery_dp\": \"Battery status DP (Usually 14)\",\n                    \"mode_dp\": \"Mode DP (Usually 27)\",\n                    \"modes\": \"Modes list\",\n                    \"return_mode\": \"Return home mode\",\n                    \"fan_speed_dp\": \"Fan speeds DP (Usually 30)\",\n                    \"fan_speeds\": \"Fan speeds list (comma-separated)\",\n                    \"clean_time_dp\": \"Clean Time DP (Usually 33)\",\n                    \"clean_area_dp\": \"Clean Area DP (Usually 32)\",\n                    \"clean_record_dp\": \"Clean Record DP (Usually 34)\",\n                    \"locate_dp\": \"Locate DP (Usually 31)\",\n                    \"paused_state\": \"Pause state (pause, paused, etc)\",\n                    \"stop_status\": \"Stop status\",\n                    \"brightness\": \"Brightness (only for white color)\",\n                    \"brightness_lower\": \"Brightness Lower Value\",\n                    \"brightness_upper\": \"Brightness Upper Value\",\n                    \"color_temp\": \"Color Temperature\",\n                    \"color_temp_reverse\": \"Color Temperature Reverse\",\n                    \"color\": \"Color\",\n                    \"color_mode\": \"Color Mode\",\n                    \"color_temp_min_kelvin\": \"Minimum Color Temperature in K\",\n                    \"color_temp_max_kelvin\": \"Maximum Color Temperature in K\",\n                    \"music_mode\": \"Music mode available\",\n                    \"scene\": \"Scene\",\n                    \"fan_speed_control\": \"Fan Speed Control dps\",\n                    \"fan_oscillating_control\": \"Fan Oscillating Control dps\",\n                    \"fan_speed_min\": \"minimum fan speed integer\",\n                    \"fan_speed_max\": \"maximum fan speed integer\",\n                    \"fan_speed_ordered_list\": \"Fan speed modes list (overrides speed min/max)\",\n                    \"fan_direction\":\"fan direction dps\",\n                    \"fan_direction_forward\": \"forward dps string\",\n                    \"fan_direction_reverse\": \"reverse dps string\",\n                    \"current_temperature_dp\": \"Current Temperature\",\n                    \"target_temperature_dp\": \"Target Temperature\",\n                    \"temperature_step\": \"Temperature Step (optional)\",\n                    \"max_temperature_dp\": \"Max Temperature (optional)\",\n                    \"min_temperature_dp\": \"Min Temperature (optional)\",\n                    \"precision\": \"Precision (optional, for DPs values)\",\n                    \"target_precision\": \"Target Precision (optional, for DPs values)\",\n                    \"temperature_unit\": \"Temperature Unit (optional)\",\n                    \"hvac_mode_dp\": \"HVAC Mode DP (optional)\",\n                    \"hvac_mode_set\": \"HVAC Mode Set (optional)\",\n                    \"hvac_action_dp\": \"HVAC Current Action DP (optional)\",\n                    \"hvac_action_set\": \"HVAC Current Action Set (optional)\",\n                    \"preset_dp\": \"Presets DP (optional)\",\n                    \"preset_set\": \"Presets Set (optional)\",\n                    \"eco_dp\": \"Eco DP (optional)\",\n                    \"eco_value\": \"Eco value (optional)\",\n                    \"heuristic_action\": \"Enable heuristic action (optional)\"\n                }\n            },\n            \"yaml_import\": {\n                \"title\": \"Not Supported\",\n                \"description\": \"Options cannot be edited when configured via YAML.\"\n            }\n        }\n    },\n    \"title\": \"LocalTuya\"\n}\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/switch.py",
    "content": "\"\"\"Platform to locally control Tuya-based switch devices.\"\"\"\nimport logging\nfrom functools import partial\n\nimport voluptuous as vol\nfrom homeassistant.components.switch import DOMAIN, SwitchEntity\n\nfrom .common import LocalTuyaEntity, async_setup_entry\nfrom .const import (\n    ATTR_CURRENT,\n    ATTR_CURRENT_CONSUMPTION,\n    ATTR_VOLTAGE,\n    CONF_CURRENT,\n    CONF_CURRENT_CONSUMPTION,\n    CONF_VOLTAGE,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\n\ndef flow_schema(dps):\n    \"\"\"Return schema used in config flow.\"\"\"\n    return {\n        vol.Optional(CONF_CURRENT): vol.In(dps),\n        vol.Optional(CONF_CURRENT_CONSUMPTION): vol.In(dps),\n        vol.Optional(CONF_VOLTAGE): vol.In(dps),\n    }\n\n\nclass LocaltuyaSwitch(LocalTuyaEntity, SwitchEntity):\n    \"\"\"Representation of a Tuya switch.\"\"\"\n\n    def __init__(\n        self,\n        device,\n        config_entry,\n        switchid,\n        **kwargs,\n    ):\n        \"\"\"Initialize the Tuya switch.\"\"\"\n        super().__init__(device, config_entry, switchid, _LOGGER, **kwargs)\n        self._state = None\n        _LOGGER.debug(\"Initialized switch [%s]\", self.name)\n\n    @property\n    def is_on(self):\n        \"\"\"Check if Tuya switch is on.\"\"\"\n        return self._state\n\n    @property\n    def extra_state_attributes(self):\n        \"\"\"Return device state attributes.\"\"\"\n        attrs = {}\n        if self.has_config(CONF_CURRENT):\n            attrs[ATTR_CURRENT] = self.dps(self._config[CONF_CURRENT])\n        if self.has_config(CONF_CURRENT_CONSUMPTION):\n            attrs[ATTR_CURRENT_CONSUMPTION] = (\n                self.dps(self._config[CONF_CURRENT_CONSUMPTION]) / 10\n            )\n        if self.has_config(CONF_VOLTAGE):\n            attrs[ATTR_VOLTAGE] = self.dps(self._config[CONF_VOLTAGE]) / 10\n        return attrs\n\n    async def async_turn_on(self, **kwargs):\n        \"\"\"Turn Tuya switch on.\"\"\"\n        await self._device.set_dp(True, self._dp_id)\n\n    async def async_turn_off(self, **kwargs):\n        \"\"\"Turn Tuya switch off.\"\"\"\n        await self._device.set_dp(False, self._dp_id)\n\n    def status_updated(self):\n        \"\"\"Device status was updated.\"\"\"\n        self._state = self.dps(self._dp_id)\n\n\nasync_setup_entry = partial(async_setup_entry, DOMAIN, LocaltuyaSwitch, flow_schema)\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/translations/en.json",
    "content": "{\n    \"config\": {\n        \"abort\": {\n            \"already_configured\": \"Device has already been configured.\",\n            \"device_updated\": \"Device configuration has been updated!\"\n        },\n        \"error\": {\n            \"authentication_failed\": \"Failed to authenticate.\\n{msg}\",\n            \"cannot_connect\": \"Cannot connect to device. Verify that address is correct and try again.\",\n            \"device_list_failed\": \"Failed to retrieve device list.\\n{msg}\",\n            \"invalid_auth\": \"Failed to authenticate with device. Verify that device id and local key are correct.\",\n            \"unknown\": \"An unknown error occurred. See log for details.\",\n            \"entity_already_configured\": \"Entity with this ID has already been configured.\",\n            \"address_in_use\": \"Address used for discovery is already in use. Make sure no other application is using it (TCP port 6668).\",\n            \"discovery_failed\": \"Something failed when discovering devices. See log for details.\",\n            \"empty_dps\": \"Connection to device succeeded but no datapoints found, please try again. Create a new issue and include debug logs if problem persists.\"\n        },\n        \"step\": {\n            \"user\": {\n                \"title\": \"Cloud API account configuration\",\n                \"description\": \"Input the credentials for Tuya Cloud API.\",\n                \"data\": {\n                    \"region\": \"API server region\",\n                    \"client_id\": \"Client ID\",\n                    \"client_secret\": \"Secret\",\n                    \"user_id\": \"User ID\",\n                    \"user_name\": \"Username\",\n                    \"no_cloud\": \"Do not configure a Cloud API account\"\n                }\n            }\n        }\n    },\n    \"options\": {\n        \"abort\": {\n            \"already_configured\": \"Device has already been configured.\",\n            \"device_success\": \"Device {dev_name} successfully {action}.\"\n        },\n        \"error\": {\n            \"authentication_failed\": \"Failed to authenticate.\\n{msg}\",\n            \"cannot_connect\": \"Cannot connect to device. Verify that address is correct and try again.\",\n            \"device_list_failed\": \"Failed to retrieve device list.\\n{msg}\",\n            \"invalid_auth\": \"Failed to authenticate with device. Verify that device id and local key are correct.\",\n            \"unknown\": \"An unknown error occurred. See log for details.\",\n            \"entity_already_configured\": \"Entity with this ID has already been configured.\",\n            \"address_in_use\": \"Address used for discovery is already in use. Make sure no other application is using it (TCP port 6668).\",\n            \"discovery_failed\": \"Something failed when discovering devices. See log for details.\",\n            \"empty_dps\": \"Connection to device succeeded but no datapoints found, please try again. Create a new issue and include debug logs if problem persists.\"\n        },\n        \"step\": {\n            \"yaml_import\": {\n                \"title\": \"Not Supported\",\n                \"description\": \"Options cannot be edited when configured via YAML.\"\n            },\n            \"init\": {\n                \"title\": \"LocalTuya Configuration\",\n                \"description\": \"Please select the desired action.\",\n                \"data\": {\n                    \"add_device\": \"Add a new device\",\n                    \"edit_device\": \"Edit a device\",\n                    \"setup_cloud\": \"Reconfigure Cloud API account\"\n                }\n            },\n            \"add_device\": {\n                \"title\": \"Add a new device\",\n                \"description\": \"Pick one of the automatically discovered devices or `...` to manually to add a device.\",\n                \"data\": {\n                    \"selected_device\": \"Discovered Devices\"\n                }\n            },\n            \"edit_device\": {\n                \"title\": \"Edit a new device\",\n                \"description\": \"Pick the configured device you wish to edit.\",\n                \"data\": {\n                    \"selected_device\": \"Configured Devices\"\n                }\n            },\n            \"cloud_setup\": {\n                \"title\": \"Cloud API account configuration\",\n                \"description\": \"Input the credentials for Tuya Cloud API.\",\n                \"data\": {\n                    \"region\": \"API server region\",\n                    \"client_id\": \"Client ID\",\n                    \"client_secret\": \"Secret\",\n                    \"user_id\": \"User ID\",\n                    \"user_name\": \"Username\",\n                    \"no_cloud\": \"Do not configure Cloud API account\"\n                }\n            },\n            \"configure_device\": {\n                \"title\": \"Configure Tuya device\",\n                \"description\": \"Fill in the device details{for_device}.\",\n                \"data\": {\n                    \"friendly_name\": \"Name\",\n                    \"host\": \"Host\",\n                    \"device_id\": \"Device ID\",\n                    \"local_key\": \"Local key\",\n                    \"protocol_version\": \"Protocol Version\",\n                    \"scan_interval\": \"Scan interval (seconds, only when not updating automatically)\",\n                    \"entities\": \"Entities (uncheck an entity to remove it)\"\n                }\n            },\n            \"pick_entity_type\": {\n                \"title\": \"Entity type selection\",\n                \"description\": \"Please pick the type of entity you want to add.\",\n                \"data\": {\n                    \"platform_to_add\": \"Platform\",\n                    \"no_additional_entities\": \"Do not add any more entities\"\n                }\n            },\n            \"configure_entity\": {\n                \"title\": \"Configure entity\",\n                \"description\": \"Please fill out the details for {entity} with type `{platform}`. All settings except for `ID` can be changed from the Options page later.\",\n                \"data\": {\n                    \"id\": \"ID\",\n                    \"friendly_name\": \"Friendly name\",\n                    \"current\": \"Current\",\n                    \"current_consumption\": \"Current Consumption\",\n                    \"voltage\": \"Voltage\",\n                    \"commands_set\": \"Open_Close_Stop Commands Set\",\n                    \"positioning_mode\": \"Positioning mode\",\n                    \"current_position_dp\": \"Current Position (for *position* mode only)\",\n                    \"set_position_dp\": \"Set Position (for *position* mode only)\",\n                    \"position_inverted\": \"Invert 0-100 position (for *position* mode only)\",\n                    \"span_time\": \"Full opening time, in secs. (for *timed* mode only)\",\n                    \"unit_of_measurement\": \"Unit of Measurement\",\n                    \"device_class\": \"Device Class\",\n                    \"scaling\": \"Scaling Factor\",\n                    \"state_on\": \"On Value\",\n                    \"state_off\": \"Off Value\",\n                    \"powergo_dp\": \"Power DP (Usually 25 or 2)\",\n                    \"idle_status_value\": \"Idle Status (comma-separated)\",\n                    \"returning_status_value\": \"Returning Status\",\n                    \"docked_status_value\": \"Docked Status (comma-separated)\",\n                    \"fault_dp\": \"Fault DP (Usually 11)\",\n                    \"battery_dp\": \"Battery status DP (Usually 14)\",\n                    \"mode_dp\": \"Mode DP (Usually 27)\",\n                    \"modes\": \"Modes list\",\n                    \"return_mode\": \"Return home mode\",\n                    \"fan_speed_dp\": \"Fan speeds DP (Usually 30)\",\n                    \"fan_speeds\": \"Fan speeds list (comma-separated)\",\n                    \"clean_time_dp\": \"Clean Time DP (Usually 33)\",\n                    \"clean_area_dp\": \"Clean Area DP (Usually 32)\",\n                    \"clean_record_dp\": \"Clean Record DP (Usually 34)\",\n                    \"locate_dp\": \"Locate DP (Usually 31)\",\n                    \"paused_state\": \"Pause state (pause, paused, etc)\",\n                    \"stop_status\": \"Stop status\",\n                    \"brightness\": \"Brightness (only for white color)\",\n                    \"brightness_lower\": \"Brightness Lower Value\",\n                    \"brightness_upper\": \"Brightness Upper Value\",\n                    \"color_temp\": \"Color Temperature\",\n                    \"color_temp_reverse\": \"Color Temperature Reverse\",\n                    \"color\": \"Color\",\n                    \"color_mode\": \"Color Mode\",\n                    \"color_temp_min_kelvin\": \"Minimum Color Temperature in K\",\n                    \"color_temp_max_kelvin\": \"Maximum Color Temperature in K\",\n                    \"music_mode\": \"Music mode available\",\n                    \"scene\": \"Scene\",\n                    \"select_options\": \"Valid entries, separate entries by a ;\",\n                    \"select_options_friendly\": \"User Friendly options, separate entries by a ;\",\n                    \"fan_speed_control\": \"Fan Speed Control dps\",\n                    \"fan_oscillating_control\": \"Fan Oscillating Control dps\",\n                    \"fan_speed_min\": \"minimum fan speed integer\",\n                    \"fan_speed_max\": \"maximum fan speed integer\",\n                    \"fan_speed_ordered_list\": \"Fan speed modes list (overrides speed min/max)\",\n                    \"fan_direction\":\"fan direction dps\",\n                    \"fan_direction_forward\": \"forward dps string\",\n                    \"fan_direction_reverse\": \"reverse dps string\",\n                    \"current_temperature_dp\": \"Current Temperature\",\n                    \"target_temperature_dp\": \"Target Temperature\",\n                    \"temperature_step\": \"Temperature Step (optional)\",\n                    \"max_temperature_dp\": \"Max Temperature (optional)\",\n                    \"min_temperature_dp\": \"Min Temperature (optional)\",\n                    \"precision\": \"Precision (optional, for DPs values)\",\n                    \"target_precision\": \"Target Precision (optional, for DPs values)\",\n                    \"temperature_unit\": \"Temperature Unit (optional)\",\n                    \"hvac_mode_dp\": \"HVAC Mode DP (optional)\",\n                    \"hvac_mode_set\": \"HVAC Mode Set (optional)\",\n                    \"hvac_action_dp\": \"HVAC Current Action DP (optional)\",\n                    \"hvac_action_set\": \"HVAC Current Action Set (optional)\",\n                    \"preset_dp\": \"Presets DP (optional)\",\n                    \"preset_set\": \"Presets Set (optional)\",\n                    \"eco_dp\": \"Eco DP (optional)\",\n                    \"eco_value\": \"Eco value (optional)\",\n                    \"heuristic_action\": \"Enable heuristic action (optional)\"\n                }\n            }\n        }\n    },\n    \"title\": \"LocalTuya\"\n}\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/translations/it.json",
    "content": "{\n    \"config\": {\n        \"abort\": {\n            \"already_configured\": \"Il dispositivo è già stato configurato.\",\n            \"device_updated\": \"La configurazione del dispositivo è stata aggiornata.\"\n        },\n        \"error\": {\n            \"authentication_failed\": \"Autenticazione fallita. Errore:\\n{msg}\",\n            \"cannot_connect\": \"Impossibile connettersi al dispositivo. Verifica che l'indirizzo sia corretto e riprova.\",\n            \"device_list_failed\": \"Impossibile recuperare l'elenco dei dispositivi.\\n{msg}\",\n            \"invalid_auth\": \"Impossibile autenticarsi con il dispositivo. Verificare che device_id e local_key siano corretti.\",\n            \"unknown\": \"Si è verificato un errore sconosciuto. Vedere registro per i dettagli.\",\n            \"entity_already_configured\": \"L'entity con questo ID è già stata configurata.\",\n            \"address_in_use\": \"L'indirizzo utilizzato per il discovery è già in uso. Assicurarsi che nessun'altra applicazione lo stia utilizzando (porta TCP 6668).\",\n            \"discovery_failed\": \"Qualcosa è fallito nella discovery dei dispositivi. Vedi registro per i dettagli.\",\n            \"empty_dps\": \"La connessione al dispositivo è riuscita ma non sono stati trovati i datapoint, riprova. Crea un nuovo Issue e includi i log di debug se il problema persiste.\"\n        },\n        \"step\": {\n            \"user\": {\n                \"title\": \"Configurazione dell'account Cloud API\",\n                \"description\": \"Inserisci le credenziali per l'account Cloud API Tuya.\",\n                \"data\": {\n                    \"region\": \"Regione del server API\",\n                    \"client_id\": \"Client ID\",\n                    \"client_secret\": \"Secret\",\n                    \"user_id\": \"User ID\",\n                    \"user_name\": \"Username\",\n                    \"no_cloud\": \"Non configurare un account Cloud API\"\n                }\n            }\n        }\n    },\n    \"options\": {\n        \"abort\": {\n            \"already_configured\": \"Il dispositivo è già stato configurato.\",\n            \"device_success\": \"Dispositivo {dev_name} {action} con successo.\"\n        },\n        \"error\": {\n            \"authentication_failed\": \"Autenticazione fallita. Errore:\\n{msg}\",\n            \"cannot_connect\": \"Impossibile connettersi al dispositivo. Verifica che l'indirizzo sia corretto e riprova.\",\n            \"device_list_failed\": \"Impossibile recuperare l'elenco dei dispositivi.\\n{msg}\",\n            \"invalid_auth\": \"Impossibile autenticarsi con il dispositivo. Verificare che device_id e local_key siano corretti.\",\n            \"unknown\": \"Si è verificato un errore sconosciuto. Vedere registro per i dettagli.\",\n            \"entity_already_configured\": \"L'entity con questo ID è già stata configurata.\",\n            \"address_in_use\": \"L'indirizzo utilizzato per il discovery è già in uso. Assicurarsi che nessun'altra applicazione lo stia utilizzando (porta TCP 6668).\",\n            \"discovery_failed\": \"Qualcosa è fallito nella discovery dei dispositivi. Vedi registro per i dettagli.\",\n            \"empty_dps\": \"La connessione al dispositivo è riuscita ma non sono stati trovati i datapoint, riprova. Crea un nuovo Issue e includi i log di debug se il problema persiste.\"\n        },\n        \"step\": {\n            \"yaml_import\": {\n                \"title\": \"Non supportato\",\n                \"description\": \"Le impostazioni non possono essere configurate tramite file YAML.\"\n            },\n            \"init\": {\n                \"title\": \"Configurazione LocalTuya\",\n                \"description\": \"Seleziona l'azione desiderata.\",\n                \"data\": {\n                    \"add_device\": \"Aggiungi un nuovo dispositivo\",\n                    \"edit_device\": \"Modifica un dispositivo\",\n                    \"setup_cloud\": \"Riconfigurare l'account Cloud API\"\n                }\n            },\n            \"add_device\": {\n                \"title\": \"Aggiungi un nuovo dispositivo\",\n                \"description\": \"Scegli uno dei dispositivi trovati automaticamente o `...` per aggiungere manualmente un dispositivo.\",\n                \"data\": {\n                    \"selected_device\": \"Dispositivi trovati\"\n                }\n            },\n            \"edit_device\": {\n                \"title\": \"Modifica un dispositivo\",\n                \"description\": \"Scegli il dispositivo configurato che si desidera modificare.\",\n                \"data\": {\n                    \"selected_device\": \"Dispositivi configurati\"\n                }\n            },\n            \"cloud_setup\": {\n                \"title\": \"Configurazione dell'account Cloud API\",\n                \"description\": \"Inserisci le credenziali per l'account Cloud API Tuya.\",\n                \"data\": {\n                    \"region\": \"Regione del server API\",\n                    \"client_id\": \"Client ID\",\n                    \"client_secret\": \"Secret\",\n                    \"user_id\": \"User ID\",\n                    \"user_name\": \"Username\",\n                    \"no_cloud\": \"Non configurare l'account Cloud API\"\n                }\n            },\n            \"configure_device\": {\n                \"title\": \"Configura il dispositivo\",\n                \"description\": \"Compila i dettagli del dispositivo {for_device}.\",\n                \"data\": {\n                    \"friendly_name\": \"Nome\",\n                    \"host\": \"Host\",\n                    \"device_id\": \"ID del dispositivo\",\n                    \"local_key\": \"Chiave locale\",\n                    \"protocol_version\": \"Versione del protocollo\",\n                    \"scan_interval\": \"Intervallo di scansione (secondi, solo quando non si aggiorna automaticamente)\",\n                    \"entities\": \"Entities (deseleziona un'entity per rimuoverla)\"\n                }\n            },\n            \"pick_entity_type\": {\n                \"title\": \"Selezione del tipo di entity\",\n                \"description\": \"Scegli il tipo di entity che desideri aggiungere.\",\n                \"data\": {\n                    \"platform_to_add\": \"piattaforma\",\n                    \"no_additional_entities\": \"Non aggiungere altre entity\"\n                }\n            },\n            \"configure_entity\": {\n                \"title\": \"Configurare entity\",\n                \"description\": \"Compila i dettagli per {entity} con tipo `{platform}`.Tutte le impostazioni ad eccezione di `id` possono essere modificate dalla pagina delle opzioni in seguito.\",\n                \"data\": {\n                    \"id\": \"ID\",\n                    \"friendly_name\": \"Nome amichevole\",\n                    \"current\": \"Corrente\",\n                    \"current_consumption\": \"Potenza\",\n                    \"voltage\": \"Tensione\",\n                    \"commands_set\": \"Set di comandi Aperto_Chiuso_Stop\",\n                    \"positioning_mode\": \"Modalità di posizionamento\",\n                    \"current_position_dp\": \"Posizione attuale (solo per la modalità *posizione*)\",\n                    \"set_position_dp\": \"Imposta posizione (solo per modalità *posizione*)\",\n                    \"position_inverted\": \"Inverti posizione 0-100 (solo per modalità *posizione*)\",\n                    \"span_time\": \"Tempo di apertura totale, in sec. (solo per modalità *a tempo*)\",\n                    \"unit_of_measurement\": \"Unità di misura\",\n                    \"device_class\": \"Classe del dispositivo\",\n                    \"scaling\": \"Fattore di scala\",\n                    \"state_on\": \"Valore di ON\",\n                    \"state_off\": \"Valore di OFF\",\n                    \"powergo_dp\": \"Potenza DP (di solito 25 o 2)\",\n                    \"idle_status_value\": \"Stato di inattività (separato da virgole)\",\n                    \"returning_status_value\": \"Stato di ritorno alla base\",\n                    \"docked_status_value\": \"Stato di tornato alla base (separato da virgole)\",\n                    \"fault_dp\": \"DP di guasto (di solito 11)\",\n                    \"battery_dp\": \"DP di stato batteria (di solito 14)\",\n                    \"mode_dp\": \"DP di modalità (di solito 27)\",\n                    \"modes\": \"Elenco delle modalità\",\n                    \"return_mode\": \"Ritorno in modalità home\",\n                    \"fan_speed_dp\": \"DP di velocità del ventilatore (di solito 30)\",\n                    \"fan_speeds\": \"DP di elenco delle velocità del ventilatore (separato da virgola)\",\n                    \"clean_time_dp\": \"DP di tempo di pulizia (di solito 33)\",\n                    \"clean_area_dp\": \"DP di area pulita (di solito 32)\",\n                    \"clean_record_dp\": \"DP di record delle pulizie (di solito 34)\",\n                    \"locate_dp\": \"DP di individuazione (di solito 31)\",\n                    \"paused_state\": \"Stato di pausa (pausa, pausa, ecc.)\",\n                    \"stop_status\": \"Stato di stop\",\n                    \"brightness\": \"Luminosità (solo per il colore bianco)\",\n                    \"brightness_lower\": \"Limite inferiore per la luminosità\",\n                    \"brightness_upper\": \"Limite superiore per la luminosità\",\n                    \"color_temp\": \"Temperatura di colore\",\n                    \"color_temp_reverse\": \"Temperatura di colore invertita\",\n                    \"color\": \"Colore\",\n                    \"color_mode\": \"Modalità colore\",\n                    \"color_temp_min_kelvin\": \"Minima temperatura di colore in K\",\n                    \"color_temp_max_kelvin\": \"Massima temperatura di colore in k\",\n                    \"music_mode\": \"Modalità musicale disponibile\",\n                    \"scene\": \"Scena\",\n                    \"select_options\": \"Opzioni valide, voci separate da una vigola (;)\",\n                    \"select_options_friendly\": \"Opzioni intuitive, voci separate da una virgola\",\n                    \"fan_speed_control\": \"DP di controllo di velocità del ventilatore\",\n                    \"fan_oscillating_control\": \"DP di controllo dell'oscillazione del ventilatore\",\n                    \"fan_speed_min\": \"Velocità del ventilatore minima\",\n                    \"fan_speed_max\": \"Velocità del ventilatore massima\",\n                    \"fan_speed_ordered_list\": \"Elenco delle modalità di velocità del ventilatore (sovrascrive velocità min/max)\",\n                    \"fan_direction\":\"DP di direzione del ventilatore\",\n                    \"fan_direction_forward\": \"Stringa del DP per avanti\",\n                    \"fan_direction_reverse\": \"Stringa del DP per indietro\",\n                    \"current_temperature_dp\": \"Temperatura attuale\",\n                    \"target_temperature_dp\": \"Temperatura target\",\n                    \"temperature_step\": \"Intervalli di temperatura (facoltativo)\",\n                    \"max_temperature_dp\": \"Temperatura massima (opzionale)\",\n                    \"min_temperature_dp\": \"Temperatura minima (opzionale)\",\n                    \"precision\": \"Precisione (opzionale, per valori DP)\",\n                    \"target_precision\": \"Precisione del target (opzionale, per valori DP)\",\n                    \"temperature_unit\": \"Unità di temperatura (opzionale)\",\n                    \"hvac_mode_dp\": \"Modalità HVAC attuale (opzionale)\",\n                    \"hvac_mode_set\": \"Impostazione modalità HVAC (opzionale)\",\n                    \"hvac_action_dp\": \"Azione HVAC attuale (opzionale)\",\n                    \"hvac_action_set\": \"Impostazione azione HVAC (opzionale)\",\n                    \"preset_dp\": \"Preset DP (opzionale)\",\n                    \"preset_set\": \"Set di preset (opzionale)\",\n                    \"eco_dp\": \"DP per Eco (opzionale)\",\n                    \"eco_value\": \"Valore Eco (opzionale)\",\n                    \"heuristic_action\": \"Abilita azione euristica (opzionale)\"\n                }\n            }\n        }\n    },\n    \"title\": \"LocalTuya\"\n}\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/translations/pt-BR.json",
    "content": "{\n    \"config\": {\n        \"abort\": {\n            \"already_configured\": \"O dispositivo já foi configurado.\",\n            \"device_updated\": \"A configuração do dispositivo foi atualizada!\"\n        },\n        \"error\": {\n            \"authentication_failed\": \"Falha ao autenticar.\\n{msg}\",\n            \"cannot_connect\": \"Não é possível se conectar ao dispositivo. Verifique se o endereço está correto e tente novamente\",\n            \"device_list_failed\": \"Falha ao recuperar a lista de dispositivos.\\n{msg}\",\n            \"invalid_auth\": \"Falha ao autenticar com o dispositivo. Verifique se o ID do dispositivo e a chave local estão corretos.\",\n            \"unknown\": \"Ocorreu um erro desconhecido. Consulte o registro para obter detalhes.\",\n            \"entity_already_configured\": \"A entidade com este ID já foi configurada.\",\n            \"address_in_use\": \"AddresO endereço usado para descoberta já está em uso. Certifique-se de que nenhum outro aplicativo o esteja usando (porta TCP 6668).s used for discovery is already in use. Make sure no other application is using it (TCP port 6668).\",\n            \"discovery_failed\": \"Algo falhou ao descobrir dispositivos. Consulte o registro para obter detalhes.\",\n            \"empty_dps\": \"A conexão com o dispositivo foi bem-sucedida, mas nenhum ponto de dados foi encontrado. Tente novamente. Crie um novo issue e inclua os logs de depuração se o problema persistir.\"\n        },\n        \"step\": {\n            \"user\": {\n                \"title\": \"Configuração da conta da API do Cloud\",\n                \"description\": \"Insira as credenciais para a API Tuya Cloud.\",\n                \"data\": {\n                    \"region\": \"Região do servidor de API\",\n                    \"client_id\": \"ID do cliente\",\n                    \"client_secret\": \"Secret\",\n                    \"user_id\": \"ID de usuário\",\n                    \"user_name\": \"Nome de usuário\",\n                    \"no_cloud\": \"Não configure uma conta de API da Cloud\"\n                }\n            }\n        }\n    },\n    \"options\": {\n        \"abort\": {\n            \"already_configured\": \"O dispositivo já foi configurado.\",\n            \"device_success\": \"Dispositivo {dev_name} {action} com sucesso.\"\n        },\n        \"error\": {\n            \"authentication_failed\": \"Falha ao autenticar.\\n{msg}\",\n            \"cannot_connect\": \"Não é possível se conectar ao dispositivo. Verifique se o endereço está correto e tente novamente\",\n            \"device_list_failed\": \"Falha ao recuperar a lista de dispositivos.\\n{msg}\",\n            \"invalid_auth\": \"Falha ao autenticar com o dispositivo. Verifique se o ID do dispositivo e a chave local estão corretos.\",\n            \"unknown\": \"Ocorreu um erro desconhecido. Consulte o registro para obter detalhes.\",\n            \"entity_already_configured\": \"A entidade com este ID já foi configurada.\",\n            \"address_in_use\": \"O endereço usado para descoberta já está em uso. Certifique-se de que nenhum outro aplicativo o esteja usando (porta TCP 6668).\",\n            \"discovery_failed\": \"Algo falhou ao descobrir dispositivos. Consulte o registro para obter detalhes.\",\n            \"empty_dps\": \"A conexão com o dispositivo foi bem-sucedida, mas nenhum ponto de dados foi encontrado. Tente novamente. Crie um novo issue e inclua os logs de depuração se o problema persistir.\"\n        },\n        \"step\": {\n            \"yaml_import\": {\n                \"title\": \"Não suportado\",\n                \"description\": \"As opções não podem ser editadas quando configuradas via YAML.\"\n            },\n            \"init\": {\n                \"title\": \"Configuração LocalTuya\",\n                \"description\": \"Selecione a ação desejada.\",\n                \"data\": {\n                    \"add_device\": \"Adicionar um novo dispositivo\",\n                    \"edit_device\": \"Editar um dispositivo\",\n                    \"setup_cloud\": \"Reconfigurar a conta da API da Cloud\"\n                }\n            },\n            \"add_device\": {\n                \"title\": \"Adicionar um novo dispositivo\",\n                \"description\": \"Escolha um dos dispositivos descobertos automaticamente ou `...` para adicionar um dispositivo manualmente.\",\n                \"data\": {\n                    \"selected_device\": \"Dispositivos descobertos\"\n                }\n            },\n            \"edit_device\": {\n                \"title\": \"Editar um novo dispositivo\",\n                \"description\": \"Escolha o dispositivo configurado que você deseja editar.\",\n                \"data\": {\n                    \"selected_device\": \"Dispositivos configurados\"\n                }\n            },\n            \"cloud_setup\": {\n                \"title\": \"Configuração da conta da API da Cloud\",\n                \"description\": \"Insira as credenciais para a API Tuya Cloud.\",\n                \"data\": {\n                    \"region\": \"Região do servidor de API\",\n                    \"client_id\": \"ID do Cliente\",\n                    \"client_secret\": \"Secret\",\n                    \"user_id\": \"ID do usuário\",\n                    \"user_name\": \"Nome de usuário\",\n                    \"no_cloud\": \"Não configure a conta da API da Cloud\"\n                }\n            },\n            \"configure_device\": {\n                \"title\": \"Configurar dispositivo Tuya\",\n                \"description\": \"Preencha os detalhes do dispositivo {for_device}.\",\n                \"data\": {\n                    \"friendly_name\": \"Nome\",\n                    \"host\": \"Host\",\n                    \"device_id\": \"ID do dispositivo\",\n                    \"local_key\": \"Local key\",\n                    \"protocol_version\": \"Versão do protocolo\",\n                    \"scan_interval\": \"Intervalo de escaneamento (segundos, somente quando não estiver atualizando automaticamente)\",\n                    \"entities\": \"Entidades (desmarque uma entidade para removê-la)\"\n                }\n            },\n            \"pick_entity_type\": {\n                \"title\": \"Seleção do tipo de entidade\",\n                \"description\": \"Escolha o tipo de entidade que deseja adicionar.\",\n                \"data\": {\n                    \"platform_to_add\": \"Plataforma\",\n                    \"no_additional_entities\": \"Não adicione mais entidades\"\n                }\n            },\n            \"configure_entity\": {\n                \"title\": \"Configurar entidade\",\n                \"description\": \"Por favor, preencha os detalhes de {entity} com o tipo `{platform}`. Todas as configurações, exceto `ID`, podem ser alteradas na página Opções posteriormente.\",\n                \"data\": {\n                    \"id\": \"ID\",\n                    \"friendly_name\": \"Nome fantasia\",\n                    \"current\": \"Atual\",\n                    \"current_consumption\": \"Consumo atual\",\n                    \"voltage\": \"Voltagem\",\n                    \"commands_set\": \"Conjunto de comandos Abrir_Fechar_Parar\",\n                    \"positioning_mode\": \"Modo de posicionamento\",\n                    \"current_position_dp\": \"Posição atual (somente para o modo *posição*)\",\n                    \"set_position_dp\": \"Definir posição (somente para o modo *posição*)\",\n                    \"position_inverted\": \"Inverter 0-100 posição (somente para o modo *posição*)\",\n                    \"span_time\": \"Tempo de abertura completo, em segundos. (somente para o modo *temporizado*)\",\n                    \"unit_of_measurement\": \"Unidade de medida\",\n                    \"device_class\": \"Classe do dispositivo\",\n                    \"scaling\": \"Fator de escala\",\n                    \"state_on\": \"Valor ligado\",\n                    \"state_off\": \"Valor desligado\",\n                    \"powergo_dp\": \"Potência DP (Geralmente 25 ou 2)\",\n                    \"idle_status_value\": \"Status ocioso (separado por vírgula)\",\n                    \"returning_status_value\": \"Status de retorno\",\n                    \"docked_status_value\": \"Status encaixado (separado por vírgula)\",\n                    \"fault_dp\": \"Falha DP (Geralmente 11)\",\n                    \"battery_dp\": \"Status da bateria DP (normalmente 14)\",\n                    \"mode_dp\": \"Modo DP (Geralmente 27)\",\n                    \"modes\": \"Lista de modos\",\n                    \"return_mode\": \"Modo de retorno para casa\",\n                    \"fan_speed_dp\": \"Velocidades do ventilador DP (normalmente 30)\",\n                    \"fan_speeds\": \"Lista de velocidades do ventilador (separadas por vírgulas)\",\n                    \"clean_time_dp\": \"Tempo Limpo DP (Geralmente 33)\",\n                    \"clean_area_dp\": \"Área Limpa DP (Geralmente 32)\",\n                    \"clean_record_dp\": \"Limpar Registro DP (Geralmente 34)\",\n                    \"locate_dp\": \"Localize DP (Geralmente 31)\",\n                    \"paused_state\": \"Estado de pausa (pausa, pausado, etc)\",\n                    \"stop_status\": \"Status de parada\",\n                    \"brightness\": \"Brilho (somente para cor branca)\",\n                    \"brightness_lower\": \"Valor mais baixo de brilho\",\n                    \"brightness_upper\": \"Valor superior de brilho\",\n                    \"color_temp\": \"Temperatura da cor\",\n                    \"color_temp_reverse\": \"Temperatura da cor reversa\",\n                    \"color\": \"Cor\",\n                    \"color_mode\": \"Modo de cor\",\n                    \"color_temp_min_kelvin\": \"Temperatura de cor mínima em K\",\n                    \"color_temp_max_kelvin\": \"Temperatura máxima de cor em K\",\n                    \"music_mode\": \"Modo de música disponível\",\n                    \"scene\": \"Cena\",\n                    \"select_options\": \"Entradas válidas, entradas separadas por um ;\",\n                    \"select_options_friendly\": \"Opções fantasia ​​ao usuário, entradas separadas por um ;\",\n                    \"fan_speed_control\": \"Dps de controle de velocidade do ventilador\",\n                    \"fan_oscillating_control\": \"Dps de controle oscilante do ventilador\",\n                    \"fan_speed_min\": \"Velocidade mínima do ventilador inteiro\",\n                    \"fan_speed_max\": \"Velocidade máxima do ventilador inteiro\",\n                    \"fan_speed_ordered_list\": \"Lista de modos de velocidade do ventilador (substitui a velocidade min/max)\",\n                    \"fan_direction\":\"Direção do ventilador dps\",\n                    \"fan_direction_forward\": \"Seqüência de dps para frente\",\n                    \"fan_direction_reverse\": \"String dps reversa\",\n                    \"current_temperature_dp\": \"Temperatura atual\",\n                    \"target_temperature_dp\": \"Temperatura alvo\",\n                    \"temperature_step\": \"Etapa de temperatura (opcional)\",\n                    \"max_temperature_dp\": \"Temperatura máxima (opcional)\",\n                    \"min_temperature_dp\": \"Temperatura mínima (opcional)\",\n                    \"precision\": \"Precisão (opcional, para valores de DPs)\",\n                    \"target_precision\": \"Precisão do alvo (opcional, para valores de DPs)\",\n                    \"temperature_unit\": \"Unidade de Temperatura (opcional)\",\n                    \"hvac_mode_dp\": \"Modo HVAC DP (opcional)\",\n                    \"hvac_mode_set\": \"Conjunto de modo HVAC (opcional)\",\n                    \"hvac_action_dp\": \"Ação atual de HVAC DP (opcional)\",\n                    \"hvac_action_set\": \"Conjunto de ação atual HVAC (opcional)\",\n                    \"preset_dp\": \"Predefinições DP (opcional)\",\n                    \"preset_set\": \"Conjunto de predefinições (opcional)\",\n                    \"eco_dp\": \"Eco DP (opcional)\",\n                    \"eco_value\": \"Valor eco (opcional)\",\n                    \"heuristic_action\": \"Ativar ação heurística (opcional)\"\n                }\n            }\n        }\n    },\n    \"title\": \"LocalTuya\"\n}\n"
  },
  {
    "path": "home-assistant/custom_components/localtuya/vacuum.py",
    "content": "\"\"\"Platform to locally control Tuya-based vacuum devices.\"\"\"\nimport logging\nfrom functools import partial\n\nimport voluptuous as vol\nfrom homeassistant.components.vacuum import (\n    DOMAIN,\n    STATE_CLEANING,\n    STATE_DOCKED,\n    STATE_ERROR,\n    STATE_IDLE,\n    STATE_PAUSED,\n    STATE_RETURNING,\n    SUPPORT_BATTERY,\n    SUPPORT_FAN_SPEED,\n    SUPPORT_LOCATE,\n    SUPPORT_PAUSE,\n    SUPPORT_RETURN_HOME,\n    SUPPORT_START,\n    SUPPORT_STATE,\n    SUPPORT_STATUS,\n    SUPPORT_STOP,\n    StateVacuumEntity,\n)\n\nfrom .common import LocalTuyaEntity, async_setup_entry\nfrom .const import (\n    CONF_BATTERY_DP,\n    CONF_CLEAN_AREA_DP,\n    CONF_CLEAN_RECORD_DP,\n    CONF_CLEAN_TIME_DP,\n    CONF_DOCKED_STATUS_VALUE,\n    CONF_FAN_SPEED_DP,\n    CONF_FAN_SPEEDS,\n    CONF_FAULT_DP,\n    CONF_IDLE_STATUS_VALUE,\n    CONF_LOCATE_DP,\n    CONF_MODE_DP,\n    CONF_MODES,\n    CONF_PAUSED_STATE,\n    CONF_POWERGO_DP,\n    CONF_RETURN_MODE,\n    CONF_RETURNING_STATUS_VALUE,\n    CONF_STOP_STATUS,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\nCLEAN_TIME = \"clean_time\"\nCLEAN_AREA = \"clean_area\"\nCLEAN_RECORD = \"clean_record\"\nMODES_LIST = \"cleaning_mode_list\"\nMODE = \"cleaning_mode\"\nFAULT = \"fault\"\n\nDEFAULT_IDLE_STATUS = \"standby,sleep\"\nDEFAULT_RETURNING_STATUS = \"docking\"\nDEFAULT_DOCKED_STATUS = \"charging,chargecompleted\"\nDEFAULT_MODES = \"smart,wall_follow,spiral,single\"\nDEFAULT_FAN_SPEEDS = \"low,normal,high\"\nDEFAULT_PAUSED_STATE = \"paused\"\nDEFAULT_RETURN_MODE = \"chargego\"\nDEFAULT_STOP_STATUS = \"standby\"\n\n\ndef flow_schema(dps):\n    \"\"\"Return schema used in config flow.\"\"\"\n    return {\n        vol.Required(CONF_IDLE_STATUS_VALUE, default=DEFAULT_IDLE_STATUS): str,\n        vol.Required(CONF_POWERGO_DP): vol.In(dps),\n        vol.Required(CONF_DOCKED_STATUS_VALUE, default=DEFAULT_DOCKED_STATUS): str,\n        vol.Optional(\n            CONF_RETURNING_STATUS_VALUE, default=DEFAULT_RETURNING_STATUS\n        ): str,\n        vol.Optional(CONF_BATTERY_DP): vol.In(dps),\n        vol.Optional(CONF_MODE_DP): vol.In(dps),\n        vol.Optional(CONF_MODES, default=DEFAULT_MODES): str,\n        vol.Optional(CONF_RETURN_MODE, default=DEFAULT_RETURN_MODE): str,\n        vol.Optional(CONF_FAN_SPEED_DP): vol.In(dps),\n        vol.Optional(CONF_FAN_SPEEDS, default=DEFAULT_FAN_SPEEDS): str,\n        vol.Optional(CONF_CLEAN_TIME_DP): vol.In(dps),\n        vol.Optional(CONF_CLEAN_AREA_DP): vol.In(dps),\n        vol.Optional(CONF_CLEAN_RECORD_DP): vol.In(dps),\n        vol.Optional(CONF_LOCATE_DP): vol.In(dps),\n        vol.Optional(CONF_FAULT_DP): vol.In(dps),\n        vol.Optional(CONF_PAUSED_STATE, default=DEFAULT_PAUSED_STATE): str,\n        vol.Optional(CONF_STOP_STATUS, default=DEFAULT_STOP_STATUS): str,\n    }\n\n\nclass LocaltuyaVacuum(LocalTuyaEntity, StateVacuumEntity):\n    \"\"\"Tuya vacuum device.\"\"\"\n\n    def __init__(self, device, config_entry, switchid, **kwargs):\n        \"\"\"Initialize a new LocaltuyaVacuum.\"\"\"\n        super().__init__(device, config_entry, switchid, _LOGGER, **kwargs)\n        self._state = None\n        self._battery_level = None\n        self._attrs = {}\n\n        self._idle_status_list = []\n        if self.has_config(CONF_IDLE_STATUS_VALUE):\n            self._idle_status_list = self._config[CONF_IDLE_STATUS_VALUE].split(\",\")\n\n        self._modes_list = []\n        if self.has_config(CONF_MODES):\n            self._modes_list = self._config[CONF_MODES].split(\",\")\n            self._attrs[MODES_LIST] = self._modes_list\n\n        self._docked_status_list = []\n        if self.has_config(CONF_DOCKED_STATUS_VALUE):\n            self._docked_status_list = self._config[CONF_DOCKED_STATUS_VALUE].split(\",\")\n\n        self._fan_speed_list = []\n        if self.has_config(CONF_FAN_SPEEDS):\n            self._fan_speed_list = self._config[CONF_FAN_SPEEDS].split(\",\")\n\n        self._fan_speed = \"\"\n        self._cleaning_mode = \"\"\n        _LOGGER.debug(\"Initialized vacuum [%s]\", self.name)\n\n    @property\n    def supported_features(self):\n        \"\"\"Flag supported features.\"\"\"\n        supported_features = (\n            SUPPORT_START\n            | SUPPORT_PAUSE\n            | SUPPORT_STOP\n            | SUPPORT_STATUS\n            | SUPPORT_STATE\n        )\n\n        if self.has_config(CONF_RETURN_MODE):\n            supported_features = supported_features | SUPPORT_RETURN_HOME\n        if self.has_config(CONF_FAN_SPEED_DP):\n            supported_features = supported_features | SUPPORT_FAN_SPEED\n        if self.has_config(CONF_BATTERY_DP):\n            supported_features = supported_features | SUPPORT_BATTERY\n        if self.has_config(CONF_LOCATE_DP):\n            supported_features = supported_features | SUPPORT_LOCATE\n\n        return supported_features\n\n    @property\n    def state(self):\n        \"\"\"Return the vacuum state.\"\"\"\n        return self._state\n\n    @property\n    def battery_level(self):\n        \"\"\"Return the current battery level.\"\"\"\n        return self._battery_level\n\n    @property\n    def extra_state_attributes(self):\n        \"\"\"Return the specific state attributes of this vacuum cleaner.\"\"\"\n        return self._attrs\n\n    @property\n    def fan_speed(self):\n        \"\"\"Return the current fan speed.\"\"\"\n        return self._fan_speed\n\n    @property\n    def fan_speed_list(self) -> list:\n        \"\"\"Return the list of available fan speeds.\"\"\"\n        return self._fan_speed_list\n\n    async def async_start(self, **kwargs):\n        \"\"\"Turn the vacuum on and start cleaning.\"\"\"\n        await self._device.set_dp(True, self._config[CONF_POWERGO_DP])\n\n    async def async_pause(self, **kwargs):\n        \"\"\"Stop the vacuum cleaner, do not return to base.\"\"\"\n        await self._device.set_dp(False, self._config[CONF_POWERGO_DP])\n\n    async def async_return_to_base(self, **kwargs):\n        \"\"\"Set the vacuum cleaner to return to the dock.\"\"\"\n        if self.has_config(CONF_RETURN_MODE):\n            await self._device.set_dp(\n                self._config[CONF_RETURN_MODE], self._config[CONF_MODE_DP]\n            )\n        else:\n            _LOGGER.error(\"Missing command for return home in commands set.\")\n\n    async def async_stop(self, **kwargs):\n        \"\"\"Turn the vacuum off stopping the cleaning.\"\"\"\n        if self.has_config(CONF_STOP_STATUS):\n            await self._device.set_dp(\n                self._config[CONF_STOP_STATUS], self._config[CONF_MODE_DP]\n            )\n        else:\n            _LOGGER.error(\"Missing command for stop in commands set.\")\n\n    async def async_clean_spot(self, **kwargs):\n        \"\"\"Perform a spot clean-up.\"\"\"\n        return None\n\n    async def async_locate(self, **kwargs):\n        \"\"\"Locate the vacuum cleaner.\"\"\"\n        if self.has_config(CONF_LOCATE_DP):\n            await self._device.set_dp(\"\", self._config[CONF_LOCATE_DP])\n\n    async def async_set_fan_speed(self, fan_speed, **kwargs):\n        \"\"\"Set the fan speed.\"\"\"\n        await self._device.set_dp(fan_speed, self._config[CONF_FAN_SPEED_DP])\n\n    async def async_send_command(self, command, params=None, **kwargs):\n        \"\"\"Send a command to a vacuum cleaner.\"\"\"\n        if command == \"set_mode\" and \"mode\" in params:\n            mode = params[\"mode\"]\n            await self._device.set_dp(mode, self._config[CONF_MODE_DP])\n\n    def status_updated(self):\n        \"\"\"Device status was updated.\"\"\"\n        state_value = str(self.dps(self._dp_id))\n\n        if state_value in self._idle_status_list:\n            self._state = STATE_IDLE\n        elif state_value in self._docked_status_list:\n            self._state = STATE_DOCKED\n        elif state_value == self._config[CONF_RETURNING_STATUS_VALUE]:\n            self._state = STATE_RETURNING\n        elif state_value == self._config[CONF_PAUSED_STATE]:\n            self._state = STATE_PAUSED\n        else:\n            self._state = STATE_CLEANING\n\n        if self.has_config(CONF_BATTERY_DP):\n            self._battery_level = self.dps_conf(CONF_BATTERY_DP)\n\n        self._cleaning_mode = \"\"\n        if self.has_config(CONF_MODES):\n            self._cleaning_mode = self.dps_conf(CONF_MODE_DP)\n            self._attrs[MODE] = self._cleaning_mode\n\n        self._fan_speed = \"\"\n        if self.has_config(CONF_FAN_SPEEDS):\n            self._fan_speed = self.dps_conf(CONF_FAN_SPEED_DP)\n\n        if self.has_config(CONF_CLEAN_TIME_DP):\n            self._attrs[CLEAN_TIME] = self.dps_conf(CONF_CLEAN_TIME_DP)\n\n        if self.has_config(CONF_CLEAN_AREA_DP):\n            self._attrs[CLEAN_AREA] = self.dps_conf(CONF_CLEAN_AREA_DP)\n\n        if self.has_config(CONF_CLEAN_RECORD_DP):\n            self._attrs[CLEAN_RECORD] = self.dps_conf(CONF_CLEAN_RECORD_DP)\n\n        if self.has_config(CONF_FAULT_DP):\n            self._attrs[FAULT] = self.dps_conf(CONF_FAULT_DP)\n            if self._attrs[FAULT] != 0:\n                self._state = STATE_ERROR\n\n\nasync_setup_entry = partial(async_setup_entry, DOMAIN, LocaltuyaVacuum, flow_schema)\n"
  },
  {
    "path": "home-assistant/custom_components/lunching/__init__.py",
    "content": "\n\"\"\"Lunching.pl Tracker.\"\"\"\n\n__version__ = '1.0.0'"
  },
  {
    "path": "home-assistant/custom_components/lunching/manifest.json",
    "content": "{\n  \"domain\": \"lunching\",\n  \"name\": \"LunchingSensor\",\n  \"documentation\": \"http://macbury.ninja\",\n  \"requirements\": [\n  ],\n  \"dependencies\": [],\n  \"codeowners\": [\n    \"@macbury\"\n  ]\n}"
  },
  {
    "path": "home-assistant/custom_components/lunching/sensor.py",
    "content": "\"\"\"\nFetch information from lunching.pl about ordered food\n\"\"\"\n\nimport voluptuous as vol\nimport logging\nimport homeassistant.helpers.config_validation as cv\nimport async_timeout\nimport aiohttp\nimport asyncio\nimport homeassistant.util as util\nimport re\n\nfrom aiohttp.hdrs import AUTHORIZATION\nfrom datetime import timedelta, datetime\nfrom homeassistant.helpers.aiohttp_client import async_get_clientsession\nfrom homeassistant.const import CONF_PASSWORD, CONF_NAME, CONF_USERNAME, STATE_OFF, STATE_ON\nfrom homeassistant.helpers.entity import Entity\nfrom homeassistant.helpers.config_validation import PLATFORM_SCHEMA\n\nTIMEOUT = 10\nMIN_TIME_BETWEEN_SCANS = timedelta(seconds=60)\nMIN_TIME_BETWEEN_FORCED_SCANS = timedelta(seconds=1)\nENDPOINT=\"https://api.lunching.pl/api/account/order-list\"\n\nPLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({\n  vol.Required(CONF_NAME): cv.string,\n  vol.Required(CONF_USERNAME): cv.string,\n  vol.Required(CONF_PASSWORD): cv.string\n})\n\n_LOGGER = logging.getLogger(__name__)\n\ndef setup_platform(hass, config, add_devices, discovery_info=None):\n  username = config.get(CONF_USERNAME)\n  password = config.get(CONF_PASSWORD)\n  name = config.get(CONF_NAME)\n\n  websession = async_get_clientsession(hass)\n\n  add_devices([LunchingSensor(hass, websession, name, username, password)])\n\n\nclass LunchingSensor(Entity):\n  \"\"\"Representation of a Sensor.\"\"\"\n\n  def __init__(self, hass, websession, name, username, password):\n    \"\"\"Initialize the sensor.\"\"\"\n    self.hass = hass\n    self.websession = websession\n    self._name = name\n    self.username = username\n    self.password = password\n    self._meal = None\n    self._deliver_from = None\n    self._deliver_to = None\n    self._time_left = None\n\n  @property\n  def name(self):\n    \"\"\"Return the name of the sensor.\"\"\"\n    return self._name\n\n  @property\n  def state(self):\n    \"\"\"Return the state of the sensor.\"\"\"\n    if self._meal:\n      return STATE_ON\n    else:\n      return STATE_OFF\n\n  @property\n  def state_attributes(self):\n    return {\n      'meal': self._meal,\n      'deliver_to': self._deliver_to,\n      'deliver_from': self._deliver_from,\n      'time_left': self._time_left\n    }\n\n  def extract_deilver_date(self, text):\n    match = re.search('dziś (\\d{1,2}):(\\d{1,2}) - (\\d{1,2}):(\\d{1,2})', text)\n    today = datetime.now()\n    if match:\n      self._deliver_from = today.replace(hour=int(match.group(1)), minute=int(match.group(2)), second=0, microsecond=0)\n      self._deliver_to = today.replace(hour=int(match.group(3)), minute=int(match.group(4)), second=0, microsecond=0)\n      self._time_left = round((self._deliver_to - today).total_seconds())\n\n  @util.Throttle(MIN_TIME_BETWEEN_SCANS, MIN_TIME_BETWEEN_FORCED_SCANS)\n  async def async_update(self):\n    try:\n      auth = aiohttp.BasicAuth(self.username, self.password)\n      with async_timeout.timeout(TIMEOUT, loop=self.hass.loop):\n        response = await self.websession.get(ENDPOINT, auth=auth)\n        data = await response.json(content_type=None)\n        if len(data) > 0:\n          _LOGGER.debug(\"Updating sensor: {}\".format(data))\n          entry = data[0]\n          self._meal = entry['meal']\n          self.extract_deilver_date(entry['deliveryDate'])\n        else:\n          _LOGGER.debug(\"No data to update: {}\".format(data))\n          self._deliver_from = None\n          self._deliver_to = None\n          self._time_left = None\n          self._meal = None\n    except (asyncio.TimeoutError, aiohttp.ClientError, IndexError) as error:\n      _LOGGER.error(\"Failed getting devices: %s\", error)\n"
  },
  {
    "path": "home-assistant/custom_components/mmpk/__init__.py",
    "content": "\n\"\"\"Public transit sensor for MPK Kraków\"\"\"\n\n__version__ = '1.0.0'"
  },
  {
    "path": "home-assistant/custom_components/mmpk/manifest.json",
    "content": "{\n  \"domain\": \"mmpk\",\n  \"name\": \"mpkk\",\n  \"documentation\": \"https://macbury.github.io/SmartHouse/\",\n  \"requirements\": [\n  ],\n  \"dependencies\": [],\n  \"codeowners\": [\n    \"@macbury\"\n  ]\n}"
  },
  {
    "path": "home-assistant/custom_components/mmpk/sensor.py",
    "content": "\"\"\"\nFetch information from busix instance\n\"\"\"\n\nimport voluptuous as vol\nimport logging\nimport homeassistant.helpers.config_validation as cv\nimport async_timeout\nimport aiohttp\nimport asyncio\nimport json\nimport homeassistant.util as util\n\nfrom dateutil.parser import parse\nfrom aiohttp.hdrs import AUTHORIZATION\nfrom datetime import timedelta, datetime, timezone\n\nfrom homeassistant.helpers.aiohttp_client import async_get_clientsession\nfrom homeassistant.const import CONF_NAME, STATE_UNKNOWN\nfrom homeassistant.helpers.entity import Entity\nfrom homeassistant.helpers.config_validation import PLATFORM_SCHEMA\n\nTIMEOUT = 10\nMIN_TIME_BETWEEN_SCANS = timedelta(seconds=10)\nMIN_TIME_BETWEEN_FORCED_SCANS = timedelta(seconds=5)\nCONF_STOP_ID='stop_id'\nCONF_DIRECTION='direction'\n\nPLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({\n  vol.Required(CONF_STOP_ID): cv.string,\n  vol.Required(CONF_DIRECTION): cv.string,\n  vol.Required(CONF_NAME): cv.string\n})\n\n_LOGGER = logging.getLogger(__name__)\n\ndef addSecs(tm, secs):\n  fulldate = tm + timedelta(seconds=secs)\n  return fulldate\n\ndef setup_platform(hass, config, add_devices, discovery_info=None):\n  stop_id = config.get(CONF_STOP_ID)\n  direction = config.get(CONF_DIRECTION)\n  name = config.get(CONF_NAME)\n\n  _LOGGER.info(\"Initializing sensor for: {}\".format(stop_id))\n  add_devices([PublicTransportSensor(hass, name, stop_id, direction)])\n\nclass PublicTransportSensor(Entity):\n  \"\"\"Representation of a Sensor.\"\"\"\n\n  def __init__(self, hass, name, stop_id, direction):\n    \"\"\"Initialize the sensor.\"\"\"\n    self.hass = hass\n    self.websession = async_get_clientsession(hass)\n    self._name = name\n    self.stop_id = stop_id\n    self.direction = direction\n    self.data = {\n      'stopName': '...',\n      'actual': []\n    }\n\n  @property\n  def name(self):\n    \"\"\"Return the name of the sensor.\"\"\"\n    return self._name\n\n  @property\n  def state(self):\n    \"\"\"Return the state of the sensor.\"\"\"\n    return self.next_departure\n\n  @property\n  def state_attributes(self):\n    return {\n      \"direction\": self.direction,\n      \"stop_name\": self.stop_name,\n      \"departures\": self.departures,\n    }\n\n  @property\n  def stop_name(self):\n    return self.data['stopName']\n\n  @property\n  def next_departure(self):\n    if len(self.departures) > 0:\n      return self.departures[0]['relativeTime']\n    else:\n      return STATE_UNKNOWN\n\n  @property\n  def departures(self):\n    deps = []\n\n    for departure in self.data['actual']:\n      direction = departure['direction']\n      _LOGGER.debug(\"Found route: {}\".format(direction))\n      if direction == self.direction:\n        route_id = departure['patternText']\n        time = addSecs(datetime.now(), departure['actualRelativeTime'])\n        _LOGGER.debug(\"Adding route: {}\".format(route_id))\n\n        deps.append({\n          'line': route_id,\n          'direction': direction,\n          'relativeTime': departure['actualRelativeTime'],\n          'time': {\n            'date': time.isoformat()\n          }\n        })\n\n    return deps\n\n  def query_url(self):\n    return 'http://www.ttss.krakow.pl/internetservice/services/passageInfo/stopPassages/stop?mode=departure&language=pl&stop={}'.format(self.stop_id)\n\n  @util.Throttle(MIN_TIME_BETWEEN_SCANS, MIN_TIME_BETWEEN_FORCED_SCANS)\n  async def async_update(self):\n    _LOGGER.info(\"Updating\".format(self.query_url()))\n    try:\n      with async_timeout.timeout(TIMEOUT, loop=self.hass.loop):\n        response = await self.websession.get(self.query_url())\n        self.data = await response.json()\n        _LOGGER.debug(\"Updating sensor: {}\".format(self.data))\n        _LOGGER.debug(\"next departure: {}\".format(self.next_departure))\n    except (asyncio.TimeoutError, aiohttp.ClientError, IndexError) as error:\n      _LOGGER.error(\"Failed getting devices: %s\", error)\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/__init__.py",
    "content": "\"\"\"\r\nComponent to integrate with node-red.\r\n\r\nFor more details about this component, please refer to\r\nhttps://github.com/zachowj/hass-node-red\r\n\"\"\"\r\nimport asyncio\r\nimport logging\r\nfrom typing import Any, Dict, Optional\r\n\r\nfrom homeassistant.config_entries import ConfigEntry\r\nfrom homeassistant.const import (\r\n    CONF_DEVICE_CLASS,\r\n    CONF_ICON,\r\n    CONF_ID,\r\n    CONF_TYPE,\r\n    CONF_UNIT_OF_MEASUREMENT,\r\n)\r\nfrom homeassistant.core import HomeAssistant, callback\r\nfrom homeassistant.helpers.dispatcher import (\r\n    async_dispatcher_connect,\r\n    async_dispatcher_send,\r\n)\r\nfrom homeassistant.helpers.entity import Entity\r\nfrom homeassistant.helpers.entity_registry import async_get\r\n\r\nfrom .const import (\r\n    CONF_ATTRIBUTES,\r\n    CONF_COMPONENT,\r\n    CONF_CONFIG,\r\n    CONF_DEVICE_INFO,\r\n    CONF_NAME,\r\n    CONF_NODE_ID,\r\n    CONF_REMOVE,\r\n    CONF_SERVER_ID,\r\n    CONF_VERSION,\r\n    DOMAIN,\r\n    DOMAIN_DATA,\r\n    NODERED_DISCOVERY_UPDATED,\r\n    NODERED_ENTITY,\r\n    STARTUP_MESSAGE,\r\n    VERSION,\r\n)\r\nfrom .discovery import (\r\n    ALREADY_DISCOVERED,\r\n    CHANGE_ENTITY_TYPE,\r\n    CONFIG_ENTRY_IS_SETUP,\r\n    NODERED_DISCOVERY,\r\n    start_discovery,\r\n    stop_discovery,\r\n)\r\nfrom .websocket import register_websocket_handlers\r\n\r\n_LOGGER = logging.getLogger(__name__)\r\n\r\n\r\nasync def async_setup(hass, config):\r\n    \"\"\"Set up this integration using YAML is not supported.\"\"\"\r\n    return True\r\n\r\n\r\nasync def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):\r\n    \"\"\"Set up this integration using UI.\"\"\"\r\n\r\n    if hass.data.get(DOMAIN_DATA) is None:\r\n        hass.data.setdefault(DOMAIN_DATA, {})\r\n        _LOGGER.info(STARTUP_MESSAGE)\r\n\r\n    register_websocket_handlers(hass)\r\n    await start_discovery(hass, hass.data[DOMAIN_DATA], entry)\r\n    hass.bus.async_fire(DOMAIN, {CONF_TYPE: \"loaded\", CONF_VERSION: VERSION})\r\n\r\n    entry.async_on_unload(entry.add_update_listener(async_reload_entry))\r\n\r\n    return True\r\n\r\n\r\nasync def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):\r\n    \"\"\"Handle removal of an entry.\"\"\"\r\n    unloaded = all(\r\n        await asyncio.gather(\r\n            *[\r\n                hass.config_entries.async_forward_entry_unload(entry, platform)\r\n                for platform in hass.data[DOMAIN_DATA][CONFIG_ENTRY_IS_SETUP]\r\n            ]\r\n        )\r\n    )\r\n\r\n    if unloaded:\r\n        stop_discovery(hass)\r\n        hass.data.pop(DOMAIN_DATA)\r\n        hass.bus.async_fire(DOMAIN, {CONF_TYPE: \"unloaded\"})\r\n\r\n    return unloaded\r\n\r\n\r\nclass NodeRedEntity(Entity):\r\n    \"\"\"nodered Sensor class.\"\"\"\r\n\r\n    _component = None\r\n    remove_signal_discovery_update = None\r\n    remove_signal_entity_update = None\r\n    _bidirectional = False\r\n\r\n    def __init__(self, hass, config):\r\n        \"\"\"Initialize the entity.\"\"\"\r\n        self.hass = hass\r\n        self._device_info = config.get(CONF_DEVICE_INFO)\r\n        self._server_id = config[CONF_SERVER_ID]\r\n        self._node_id = config[CONF_NODE_ID]\r\n        self._attr_unique_id = f\"{DOMAIN}-{self._server_id}-{self._node_id}\"\r\n        self._attr_should_poll = False\r\n\r\n        self.update_discovery_config(config)\r\n        self.update_entity_state_attributes(config)\r\n\r\n    @property\r\n    def device_info(self) -> Optional[Dict[str, Any]]:\r\n        \"\"\"Return device specific attributes.\"\"\"\r\n        info = None\r\n        if self._device_info is not None and \"id\" in self._device_info:\r\n            # Use the id property to create the device identifier then delete it\r\n            info = {\"identifiers\": {(DOMAIN, self._device_info[\"id\"])}}\r\n            del self._device_info[\"id\"]\r\n            info.update(self._device_info)\r\n\r\n        return info\r\n\r\n    @callback\r\n    def handle_entity_update(self, msg):\r\n        \"\"\"Update entity state.\"\"\"\r\n        _LOGGER.debug(f\"Entity Update: {msg}\")\r\n        self.update_entity_state_attributes(msg)\r\n        self.async_write_ha_state()\r\n\r\n    def update_entity_state_attributes(self, msg):\r\n        \"\"\"Update entity state attributes.\"\"\"\r\n        self._attr_extra_state_attributes = msg.get(CONF_ATTRIBUTES, {})\r\n\r\n    @callback\r\n    def handle_lost_connection(self):\r\n        \"\"\"Set availability to False when disconnected.\"\"\"\r\n        self._attr_available = False\r\n        self.async_write_ha_state()\r\n\r\n    @callback\r\n    def handle_discovery_update(self, msg, connection):\r\n        \"\"\"Update entity config.\"\"\"\r\n        if CONF_REMOVE in msg:\r\n            if msg[CONF_REMOVE] == CHANGE_ENTITY_TYPE:\r\n                # recreate entity if component type changed\r\n                @callback\r\n                def recreate_entity():\r\n                    \"\"\"Create entity with new type.\"\"\"\r\n                    del msg[CONF_REMOVE]\r\n                    async_dispatcher_send(\r\n                        self.hass,\r\n                        NODERED_DISCOVERY.format(msg[CONF_COMPONENT]),\r\n                        msg,\r\n                        connection,\r\n                    )\r\n\r\n                self.async_on_remove(recreate_entity)\r\n\r\n            # Remove entity\r\n            self.hass.async_create_task(self.async_remove(force_remove=True))\r\n        else:\r\n            self.update_discovery_config(msg)\r\n\r\n            if self._bidirectional:\r\n                self._attr_available = True\r\n                self._message_id = msg[CONF_ID]\r\n                self._connection = connection\r\n                self._connection.subscriptions[\r\n                    msg[CONF_ID]\r\n                ] = self.handle_lost_connection\r\n            self.async_write_ha_state()\r\n\r\n    def update_discovery_config(self, msg):\r\n        \"\"\"Update entity config.\"\"\"\r\n        self._config = msg[CONF_CONFIG]\r\n        self._attr_icon = self._config.get(CONF_ICON)\r\n        self._attr_name = self._config.get(CONF_NAME, f\"{DOMAIN} {self._node_id}\")\r\n        self._attr_device_class = self._config.get(CONF_DEVICE_CLASS)\r\n        self._attr_unit_of_measurement = self._config.get(CONF_UNIT_OF_MEASUREMENT)\r\n\r\n    async def async_added_to_hass(self) -> None:\r\n        \"\"\"Run when entity about to be added to hass.\"\"\"\r\n\r\n        self._remove_signal_entity_update = async_dispatcher_connect(\r\n            self.hass,\r\n            NODERED_ENTITY.format(self._server_id, self._node_id),\r\n            self.handle_entity_update,\r\n        )\r\n        self._remove_signal_discovery_update = async_dispatcher_connect(\r\n            self.hass,\r\n            NODERED_DISCOVERY_UPDATED.format(self.unique_id),\r\n            self.handle_discovery_update,\r\n        )\r\n\r\n        if self._bidirectional:\r\n            self._connection.subscriptions[\r\n                self._message_id\r\n            ] = self.handle_lost_connection\r\n\r\n    async def async_will_remove_from_hass(self) -> None:\r\n        \"\"\"Run when entity will be removed from hass.\"\"\"\r\n        if self._remove_signal_entity_update is not None:\r\n            self._remove_signal_entity_update()\r\n        if self._remove_signal_discovery_update is not None:\r\n            self._remove_signal_discovery_update()\r\n\r\n        del self.hass.data[DOMAIN_DATA][ALREADY_DISCOVERED][self.unique_id]\r\n\r\n        # Remove the entity_id from the entity registry\r\n        entity_registry = async_get(self.hass)\r\n        entity_id = entity_registry.async_get_entity_id(\r\n            self._component,\r\n            DOMAIN,\r\n            self.unique_id,\r\n        )\r\n        if entity_id:\r\n            entity_registry.async_remove(entity_id)\r\n            _LOGGER.info(f\"Entity removed: {entity_id}\")\r\n\r\n\r\nasync def async_reload_entry(hass: HomeAssistant, entry: ConfigEntry):\r\n    \"\"\"Reload config entry.\"\"\"\r\n    await async_unload_entry(hass, entry)\r\n    await async_setup_entry(hass, entry)\r\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/binary_sensor.py",
    "content": "\"\"\"Binary sensor platform for nodered.\"\"\"\r\nfrom numbers import Number\r\n\r\nfrom homeassistant.components.binary_sensor import BinarySensorEntity\r\nfrom homeassistant.const import (\r\n    CONF_STATE,\r\n    STATE_HOME,\r\n    STATE_ON,\r\n    STATE_OPEN,\r\n    STATE_UNLOCKED,\r\n)\r\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\r\n\r\nfrom . import NodeRedEntity\r\nfrom .const import CONF_BINARY_SENSOR, NODERED_DISCOVERY_NEW\r\n\r\n\r\nasync def async_setup_entry(hass, config_entry, async_add_devices):\r\n    \"\"\"Set up sensor platform.\"\"\"\r\n\r\n    async def async_discover(config, connection):\r\n        await _async_setup_entity(hass, config, async_add_devices)\r\n\r\n    async_dispatcher_connect(\r\n        hass,\r\n        NODERED_DISCOVERY_NEW.format(CONF_BINARY_SENSOR),\r\n        async_discover,\r\n    )\r\n\r\n\r\nasync def _async_setup_entity(hass, config, async_add_devices):\r\n    \"\"\"Set up the Node-RED binary-sensor.\"\"\"\r\n    async_add_devices([NodeRedBinarySensor(hass, config)])\r\n\r\n\r\nclass NodeRedBinarySensor(NodeRedEntity, BinarySensorEntity):\r\n    \"\"\"Node-RED binary-sensor class.\"\"\"\r\n\r\n    on_states = (\r\n        \"1\",\r\n        \"true\",\r\n        \"yes\",\r\n        \"enable\",\r\n        STATE_ON,\r\n        STATE_OPEN,\r\n        STATE_HOME,\r\n        STATE_UNLOCKED,\r\n    )\r\n    _component = CONF_BINARY_SENSOR\r\n\r\n    def __init__(self, hass, config):\r\n        \"\"\"Initialize the binary sensor.\"\"\"\r\n        super().__init__(hass, config)\r\n        self._attr_state = config.get(CONF_STATE)\r\n\r\n    @property\r\n    def is_on(self):\r\n        \"\"\"Return true if the binary sensor is on.\"\"\"\r\n        value = self._attr_state\r\n\r\n        if value is None:\r\n            return None\r\n        if isinstance(value, bool):\r\n            return value\r\n        if isinstance(value, str):\r\n            value = value.lower().strip()\r\n            if value in NodeRedBinarySensor.on_states:\r\n                return True\r\n        elif isinstance(value, Number):\r\n            return value != 0\r\n\r\n        return False\r\n\r\n    def update_entity_state_attributes(self, msg):\r\n        \"\"\"Update entity state attributes.\"\"\"\r\n        super().update_entity_state_attributes(msg)\r\n        self._attr_state = msg.get(CONF_STATE)\r\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/button.py",
    "content": "\"\"\"Button platform for nodered.\"\"\"\nimport logging\n\nfrom homeassistant.components.button import ButtonEntity\nfrom homeassistant.components.websocket_api import event_message\nfrom homeassistant.const import CONF_ID, CONF_TYPE\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\n\nfrom . import NodeRedEntity\nfrom .const import CONF_BUTTON, NODERED_DISCOVERY_NEW\n\n_LOGGER = logging.getLogger(__name__)\nEVENT_TRIGGER_NODE = \"automation_triggered\"\n\n\nasync def async_setup_entry(hass, config_entry, async_add_entities):\n    \"\"\"Set up button platform.\"\"\"\n\n    async def async_discover(config, connection):\n        await _async_setup_entity(hass, config, async_add_entities, connection)\n\n    async_dispatcher_connect(\n        hass,\n        NODERED_DISCOVERY_NEW.format(CONF_BUTTON),\n        async_discover,\n    )\n\n\nasync def _async_setup_entity(hass, config, async_add_entities, connection):\n    \"\"\"Set up the Node-RED button.\"\"\"\n    async_add_entities([NodeRedButton(hass, config, connection)])\n\n\nclass NodeRedButton(NodeRedEntity, ButtonEntity):\n    \"\"\"Node-RED button class.\"\"\"\n\n    _bidirectional = True\n    _component = CONF_BUTTON\n\n    def __init__(self, hass, config, connection):\n        \"\"\"Initialize the button.\"\"\"\n        super().__init__(hass, config)\n        self._message_id = config[CONF_ID]\n        self._connection = connection\n\n    def press(self) -> None:\n        \"\"\"Handle the button press.\"\"\"\n        self._connection.send_message(\n            event_message(\n                self._message_id,\n                {\n                    CONF_TYPE: EVENT_TRIGGER_NODE,\n                    \"data\": {\n                        \"entity\": self.hass.states.get(self.entity_id),\n                    },\n                },\n            )\n        )\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/config_flow.py",
    "content": "\"\"\"Adds config flow for Node-RED.\"\"\"\nfrom homeassistant import config_entries\n\nfrom .const import CONF_NAME, DOMAIN\n\n\n@config_entries.HANDLERS.register(DOMAIN)\nclass NodeRedFlowHandler(config_entries.ConfigFlow):\n    \"\"\"Config flow for Node-RED.\"\"\"\n\n    VERSION = 1\n    CONNECTION_CLASS = config_entries.CONN_CLASS_LOCAL_PUSH\n\n    def __init__(self):\n        \"\"\"Initialize.\"\"\"\n        self._errors = {}\n\n    async def async_step_user(self, user_input=None):\n        \"\"\"Handle a user initiated set up flow to create a webhook.\"\"\"\n        if self._async_current_entries():\n            return self.async_abort(reason=\"single_instance_allowed\")\n        if self.hass.data.get(DOMAIN):\n            return self.async_abort(reason=\"single_instance_allowed\")\n\n        if user_input is None:\n            return self.async_show_form(step_id=\"user\")\n        return self.async_create_entry(\n            title=CONF_NAME,\n            data={},\n        )\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/const.py",
    "content": "\"\"\"Constants for Node-RED.\"\"\"\r\n# Base component constants\r\nDOMAIN = \"nodered\"\r\nDOMAIN_DATA = f\"{DOMAIN}_data\"\r\nVERSION = \"1.0.9\"\r\n\r\nISSUE_URL = \"https://github.com/zachowj/hass-node-red/issues\"\r\n\r\n# Configuration\r\nCONF_ATTRIBUTES = \"attributes\"\r\nCONF_BINARY_SENSOR = \"binary_sensor\"\r\nCONF_BUTTON = \"button\"\r\nCONF_COMPONENT = \"component\"\r\nCONF_CONFIG = \"config\"\r\nCONF_CONNECTION = \"connection\"\r\nCONF_DATA = \"data\"\r\nCONF_DEVICE_INFO = \"device_info\"\r\nCONF_DEVICE_TRIGGER = \"device_trigger\"\r\nCONF_ENABLED = \"enabled\"\r\nCONF_LAST_RESET = \"last_reset\"\r\nCONF_NAME = \"name\"\r\nCONF_NODE_ID = \"node_id\"\r\nCONF_OUTPUT_PATH = \"output_path\"\r\nCONF_PAYLOAD = \"payload\"\r\nCONF_REMOVE = \"remove\"\r\nCONF_SENSOR = \"sensor\"\r\nCONF_SERVER_ID = \"server_id\"\r\nCONF_SKIP_CONDITION = \"skip_condition\"\r\nCONF_STATE_CLASS = \"state_class\"\r\nCONF_SUB_TYPE = \"sub_type\"\r\nCONF_SWITCH = \"switch\"\r\nCONF_TRIGGER_ENTITY_ID = \"trigger_entity_id\"\r\nCONF_VERSION = \"version\"\r\n\r\nNODERED_DISCOVERY = \"nodered_discovery\"\r\nNODERED_DISCOVERY_NEW = \"nodered_discovery_new_{}\"\r\nNODERED_DISCOVERY_UPDATED = \"nodered_discovery_updated_{}\"\r\nNODERED_ENTITY = \"nodered_entity_{}_{}\"\r\n\r\nSERVICE_TRIGGER = \"trigger\"\r\n\r\n# Defaults\r\nNAME = \"Node-RED Companion\"\r\nSWITCH_ICON = \"mdi:electric-switch-closed\"\r\n\r\nSTARTUP_MESSAGE = f\"\"\"\r\n-------------------------------------------------------------------\r\n{NAME}\r\nVersion: {VERSION}\r\nThis is a custom integration!\r\nIf you have any issues with this you need to open an issue here:\r\n{ISSUE_URL}\r\n-------------------------------------------------------------------\r\n\"\"\"\r\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/discovery.py",
    "content": "\"\"\"Support for Node-RED discovery.\"\"\"\nimport asyncio\nimport logging\n\nfrom homeassistant.helpers.dispatcher import (\n    async_dispatcher_connect,\n    async_dispatcher_send,\n)\nfrom homeassistant.helpers.typing import HomeAssistantType\n\nfrom .const import (\n    CONF_BINARY_SENSOR,\n    CONF_BUTTON,\n    CONF_COMPONENT,\n    CONF_NODE_ID,\n    CONF_REMOVE,\n    CONF_SENSOR,\n    CONF_SERVER_ID,\n    CONF_SWITCH,\n    DOMAIN,\n    DOMAIN_DATA,\n    NODERED_DISCOVERY,\n    NODERED_DISCOVERY_NEW,\n    NODERED_DISCOVERY_UPDATED,\n)\n\nSUPPORTED_COMPONENTS = [\n    CONF_BINARY_SENSOR,\n    CONF_BUTTON,\n    CONF_SENSOR,\n    CONF_SWITCH,\n]\n\n_LOGGER = logging.getLogger(__name__)\n\nALREADY_DISCOVERED = \"discovered_components\"\nCHANGE_ENTITY_TYPE = \"change_entity_type\"\nCONFIG_ENTRY_LOCK = \"config_entry_lock\"\nCONFIG_ENTRY_IS_SETUP = \"config_entry_is_setup\"\nDISCOVERY_DISPATCHED = \"discovery_dispatched\"\n\n\nasync def start_discovery(\n    hass: HomeAssistantType, hass_config, config_entry=None\n) -> bool:\n    \"\"\"Initialize of Node-RED Discovery.\"\"\"\n\n    async def async_device_message_received(msg, connection):\n        \"\"\"Process the received message.\"\"\"\n        component = msg[CONF_COMPONENT]\n        server_id = msg[CONF_SERVER_ID]\n        node_id = msg[CONF_NODE_ID]\n\n        if component not in SUPPORTED_COMPONENTS:\n            _LOGGER.warning(f\"Integration {component} is not supported\")\n            return\n\n        discovery_hash = f\"{DOMAIN}-{server_id}-{node_id}\"\n        data = hass.data[DOMAIN_DATA]\n\n        _LOGGER.debug(f\"Discovery message: {msg}\")\n\n        if ALREADY_DISCOVERED not in data:\n            data[ALREADY_DISCOVERED] = {}\n        if discovery_hash in data[ALREADY_DISCOVERED]:\n\n            if data[ALREADY_DISCOVERED][discovery_hash] != component:\n                # Remove old\n                log_text = f\"Changing {data[ALREADY_DISCOVERED][discovery_hash]} to\"\n                msg[CONF_REMOVE] = CHANGE_ENTITY_TYPE\n            elif CONF_REMOVE in msg:\n                log_text = \"Removing\"\n            else:\n                # Dispatch update\n                log_text = \"Updating\"\n\n            _LOGGER.info(f\"{log_text} {component} {server_id} {node_id}\")\n\n            data[ALREADY_DISCOVERED][discovery_hash] = component\n            async_dispatcher_send(\n                hass, NODERED_DISCOVERY_UPDATED.format(discovery_hash), msg, connection\n            )\n        else:\n            # Add component\n            _LOGGER.info(f\"Creating {component} {server_id} {node_id}\")\n            data[ALREADY_DISCOVERED][discovery_hash] = component\n\n            async with data[CONFIG_ENTRY_LOCK]:\n                if component not in data[CONFIG_ENTRY_IS_SETUP]:\n                    await hass.config_entries.async_forward_entry_setup(\n                        config_entry, component\n                    )\n                    data[CONFIG_ENTRY_IS_SETUP].add(component)\n\n            async_dispatcher_send(\n                hass, NODERED_DISCOVERY_NEW.format(component), msg, connection\n            )\n\n    hass.data[DOMAIN_DATA][CONFIG_ENTRY_LOCK] = asyncio.Lock()\n    hass.data[DOMAIN_DATA][CONFIG_ENTRY_IS_SETUP] = set()\n\n    hass.data[DOMAIN_DATA][DISCOVERY_DISPATCHED] = async_dispatcher_connect(\n        hass,\n        NODERED_DISCOVERY,\n        async_device_message_received,\n    )\n\n\ndef stop_discovery(hass: HomeAssistantType):\n    \"\"\"Remove discovery dispatcher.\"\"\"\n    hass.data[DOMAIN_DATA][DISCOVERY_DISPATCHED]()\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/manifest.json",
    "content": "{\r\n  \"codeowners\": [\r\n    \"@zachowj\"\r\n  ],\r\n  \"config_flow\": true,\r\n  \"dependencies\": [],\r\n  \"documentation\": \"https://zachowj.github.io/node-red-contrib-home-assistant-websocket/guide/custom_integration/\",\r\n  \"domain\": \"nodered\",\r\n  \"iot_class\": \"local_push\",\r\n  \"issue_tracker\": \"https://github.com/zachowj/hass-node-red/issues\",\r\n  \"name\": \"Node-RED Companion\",\r\n  \"version\": \"1.0.9\"\r\n}\r\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/sensor.py",
    "content": "\"\"\"Sensor platform for nodered.\"\"\"\r\nfrom datetime import datetime\r\nimport logging\r\nfrom typing import Optional, Union\r\n\r\nfrom dateutil import parser\r\nfrom homeassistant.components.sensor import SensorDeviceClass, SensorEntity\r\nfrom homeassistant.const import CONF_STATE, CONF_UNIT_OF_MEASUREMENT\r\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\r\n\r\nfrom . import NodeRedEntity\r\nfrom .const import (\r\n    CONF_CONFIG,\r\n    CONF_LAST_RESET,\r\n    CONF_SENSOR,\r\n    CONF_STATE_CLASS,\r\n    NODERED_DISCOVERY_NEW,\r\n)\r\n\r\n_LOGGER = logging.getLogger(__name__)\r\n\r\n\r\nasync def async_setup_entry(hass, config_entry, async_add_entities):\r\n    \"\"\"Set up sensor platform.\"\"\"\r\n\r\n    async def async_discover(config, connection):\r\n        await _async_setup_entity(hass, config, async_add_entities)\r\n\r\n    async_dispatcher_connect(\r\n        hass,\r\n        NODERED_DISCOVERY_NEW.format(CONF_SENSOR),\r\n        async_discover,\r\n    )\r\n\r\n\r\nasync def _async_setup_entity(hass, config, async_add_entities):\r\n    \"\"\"Set up the Node-RED sensor.\"\"\"\r\n    async_add_entities([NodeRedSensor(hass, config)])\r\n\r\n\r\nclass NodeRedSensor(NodeRedEntity, SensorEntity):\r\n    \"\"\"Node-RED Sensor class.\"\"\"\r\n\r\n    _component = CONF_SENSOR\r\n\r\n    def __init__(self, hass, config):\r\n        \"\"\"Initialize the sensor.\"\"\"\r\n        super().__init__(hass, config)\r\n        self._attr_unit_of_measurement = None\r\n        self._attr_native_value = self.convert_state(config.get(CONF_STATE))\r\n        self._attr_native_unit_of_measurement = self._config.get(\r\n            CONF_UNIT_OF_MEASUREMENT\r\n        )\r\n        self._attr_state_class = self._config.get(CONF_STATE_CLASS)\r\n\r\n    @property\r\n    def last_reset(self) -> Optional[datetime]:\r\n        \"\"\"Return the last reset.\"\"\"\r\n        reset = self._config.get(CONF_LAST_RESET)\r\n        if reset is not None:\r\n            try:\r\n                return parser.parse(reset)\r\n            except (ValueError, TypeError):\r\n                _LOGGER.error(\r\n                    f\"Invalid ISO date string ({reset}): {self.entity_id} requires last_reset to be an iso date formatted string\"\r\n                )\r\n\r\n        return None\r\n\r\n    def convert_state(self, state) -> Union[datetime, float, int, str, bool]:\r\n        \"\"\"Convert state if needed.\"\"\"\r\n        if state is not None and self.device_class == SensorDeviceClass.TIMESTAMP:\r\n            try:\r\n                return parser.parse(state)\r\n            except (ValueError, TypeError):\r\n                _LOGGER.error(\r\n                    f\"Invalid ISO date string ({state}): {self.entity_id} has a timestamp device class\"\r\n                )\r\n                return None\r\n\r\n        return state\r\n\r\n    def update_entity_state_attributes(self, msg):\r\n        \"\"\"Update entity state attributes.\"\"\"\r\n        super().update_entity_state_attributes(msg)\r\n        self._attr_native_value = self.convert_state(msg.get(CONF_STATE))\r\n\r\n    def update_discovery_config(self, msg):\r\n        \"\"\"Update entity config.\"\"\"\r\n        super().update_discovery_config(msg)\r\n        self._attr_native_unit_of_measurement = msg[CONF_CONFIG].get(\r\n            CONF_UNIT_OF_MEASUREMENT\r\n        )\r\n        self._attr_unit_of_measurement = None\r\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/services.yaml",
    "content": "trigger:\n  description: Trigger a Node-RED Node\n  target:\n    entity:\n      integration: nodered\n      domain: switch\n  fields:\n    trigger_entity_id:\n      description: Entity Id to trigger the event node with. Only needed if the node is not triggered by a single entity.\n      example: sun.sun\n    skip_condition:\n      description: Skip conditions of the node (defaults to false)\n      example: true\n    output_path:\n      description: Which output of the node to use (defaults to true, the top output). Only used when skip_condition is set to true.\n      example: true\n    payload:\n      description: The payload the node will output when triggered. Works only when triggering an entity node, not an event node.\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/switch.py",
    "content": "\"\"\"Sensor platform for nodered.\"\"\"\r\nimport json\r\nimport logging\r\n\r\nfrom homeassistant.components.websocket_api import event_message\r\nfrom homeassistant.const import (\r\n    CONF_ENTITY_ID,\r\n    CONF_ICON,\r\n    CONF_ID,\r\n    CONF_STATE,\r\n    CONF_TYPE,\r\n    EVENT_HOMEASSISTANT_START,\r\n    EVENT_STATE_CHANGED,\r\n)\r\nfrom homeassistant.core import CoreState, callback\r\nfrom homeassistant.helpers import entity_platform, trigger\r\nimport homeassistant.helpers.config_validation as cv\r\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\r\nfrom homeassistant.helpers.entity import ToggleEntity\r\nimport voluptuous as vol\r\n\r\nfrom . import NodeRedEntity\r\nfrom .const import (\r\n    CONF_CONFIG,\r\n    CONF_DATA,\r\n    CONF_DEVICE_TRIGGER,\r\n    CONF_OUTPUT_PATH,\r\n    CONF_PAYLOAD,\r\n    CONF_REMOVE,\r\n    CONF_SKIP_CONDITION,\r\n    CONF_SUB_TYPE,\r\n    CONF_SWITCH,\r\n    CONF_TRIGGER_ENTITY_ID,\r\n    DOMAIN,\r\n    NODERED_DISCOVERY_NEW,\r\n    SERVICE_TRIGGER,\r\n    SWITCH_ICON,\r\n)\r\nfrom .utils import NodeRedJSONEncoder\r\n\r\n_LOGGER = logging.getLogger(__name__)\r\n\r\nSERVICE_TRIGGER_SCHEMA = vol.Schema(\r\n    {\r\n        vol.Required(CONF_ENTITY_ID): cv.entity_ids,\r\n        vol.Optional(CONF_TRIGGER_ENTITY_ID): cv.entity_id,\r\n        vol.Optional(CONF_SKIP_CONDITION): cv.boolean,\r\n        vol.Optional(CONF_OUTPUT_PATH): cv.boolean,\r\n        vol.Optional(CONF_PAYLOAD): vol.Extra,\r\n    }\r\n)\r\nEVENT_TRIGGER_NODE = \"automation_triggered\"\r\nEVENT_DEVICE_TRIGGER = \"device_trigger\"\r\n\r\nTYPE_SWITCH = \"switch\"\r\nTYPE_DEVICE_TRIGGER = \"device_trigger\"\r\n\r\n\r\nasync def async_setup_entry(hass, config_entry, async_add_entities):\r\n    \"\"\"Set up the Switch platform.\"\"\"\r\n\r\n    async def async_discover(config, connection):\r\n        await _async_setup_entity(hass, config, async_add_entities, connection)\r\n\r\n    async_dispatcher_connect(\r\n        hass,\r\n        NODERED_DISCOVERY_NEW.format(CONF_SWITCH),\r\n        async_discover,\r\n    )\r\n\r\n    platform = entity_platform.current_platform.get()\r\n\r\n    platform.async_register_entity_service(\r\n        SERVICE_TRIGGER, SERVICE_TRIGGER_SCHEMA, \"async_trigger_node\"\r\n    )\r\n\r\n\r\nasync def _async_setup_entity(hass, config, async_add_entities, connection):\r\n    \"\"\"Set up the Node-RED Switch.\"\"\"\r\n\r\n    switch_type = config.get(CONF_SUB_TYPE, TYPE_SWITCH)\r\n    switch_class = (\r\n        NodeRedDeviceTrigger if switch_type == TYPE_DEVICE_TRIGGER else NodeRedSwitch\r\n    )\r\n    async_add_entities([switch_class(hass, config, connection)])\r\n\r\n\r\nclass NodeRedSwitch(NodeRedEntity, ToggleEntity):\r\n    \"\"\"Node-RED Switch class.\"\"\"\r\n\r\n    _component = CONF_SWITCH\r\n    _bidirectional = True\r\n\r\n    def __init__(self, hass, config, connection):\r\n        \"\"\"Initialize the switch.\"\"\"\r\n        super().__init__(hass, config)\r\n        self._message_id = config[CONF_ID]\r\n        self._connection = connection\r\n\r\n        self._attr_state = config.get(CONF_STATE, True)\r\n        self._attr_icon = self._config.get(CONF_ICON, SWITCH_ICON)\r\n\r\n    @property\r\n    def is_on(self) -> bool:\r\n        \"\"\"Return the state of the switch.\"\"\"\r\n        return self._attr_state\r\n\r\n    async def async_turn_off(self, **kwargs) -> None:\r\n        \"\"\"Turn off the switch.\"\"\"\r\n        self._update_node_red(False)\r\n\r\n    async def async_turn_on(self, **kwargs) -> None:\r\n        \"\"\"Turn on the switch.\"\"\"\r\n        self._update_node_red(True)\r\n\r\n    async def async_trigger_node(self, **kwargs) -> None:\r\n        \"\"\"Trigger node in Node-RED.\"\"\"\r\n        data = {}\r\n        data[CONF_ENTITY_ID] = kwargs.get(CONF_TRIGGER_ENTITY_ID)\r\n        data[CONF_SKIP_CONDITION] = kwargs.get(CONF_SKIP_CONDITION, False)\r\n        data[CONF_OUTPUT_PATH] = kwargs.get(CONF_OUTPUT_PATH, True)\r\n        if kwargs.get(CONF_PAYLOAD) is not None:\r\n            data[CONF_PAYLOAD] = kwargs[CONF_PAYLOAD]\r\n\r\n        self._connection.send_message(\r\n            event_message(\r\n                self._message_id,\r\n                {CONF_TYPE: EVENT_TRIGGER_NODE, CONF_DATA: data},\r\n            )\r\n        )\r\n\r\n    def _update_node_red(self, state):\r\n        self._connection.send_message(\r\n            event_message(\r\n                self._message_id, {CONF_TYPE: EVENT_STATE_CHANGED, CONF_STATE: state}\r\n            )\r\n        )\r\n\r\n    def update_entity_state_attributes(self, msg):\r\n        \"\"\"Update the entity state attributes.\"\"\"\r\n        super().update_entity_state_attributes(msg)\r\n        self._attr_state = msg.get(CONF_STATE)\r\n\r\n    def update_discovery_config(self, msg):\r\n        \"\"\"Update the entity config.\"\"\"\r\n        super().update_discovery_config(msg)\r\n        self._attr_icon = msg[CONF_CONFIG].get(CONF_ICON, SWITCH_ICON)\r\n\r\n\r\nclass NodeRedDeviceTrigger(NodeRedSwitch):\r\n    \"\"\"Node-RED Device Trigger class.\"\"\"\r\n\r\n    def __init__(self, hass, config, connection):\r\n        \"\"\"Initialize the switch.\"\"\"\r\n        super().__init__(hass, config, connection)\r\n        self._trigger_config = config[CONF_DEVICE_TRIGGER]\r\n        self._unsubscribe_device_trigger = None\r\n\r\n    @callback\r\n    def handle_lost_connection(self):\r\n        \"\"\"Set remove device trigger when disconnected.\"\"\"\r\n        super().handle_lost_connection()\r\n        self.remove_device_trigger()\r\n\r\n    async def add_device_trigger(self):\r\n        \"\"\"Add device trigger.\"\"\"\r\n\r\n        if self.hass.state == CoreState.running:\r\n            await self._attach_triggers()\r\n        else:\r\n            self._unsub_start = self.hass.bus.async_listen_once(\r\n                EVENT_HOMEASSISTANT_START, self._attach_triggers\r\n            )\r\n\r\n    async def _attach_triggers(self, start_event=None) -> None:\r\n        try:\r\n            trigger_config = await trigger.async_validate_trigger_config(\r\n                self.hass, [self._trigger_config]\r\n            )\r\n            self._unsubscribe_device_trigger = await trigger.async_initialize_triggers(\r\n                self.hass,\r\n                trigger_config,\r\n                self.forward_trigger,\r\n                DOMAIN,\r\n                DOMAIN,\r\n                _LOGGER.log,\r\n            )\r\n        except vol.MultipleInvalid as ex:\r\n            _LOGGER.error(\r\n                f\"Error initializing device trigger '{self._node_id}': {str(ex)}\",\r\n            )\r\n\r\n    @callback\r\n    def forward_trigger(self, event, context=None):\r\n        \"\"\"Forward events to websocket.\"\"\"\r\n        message = event_message(\r\n            self._message_id,\r\n            {\"type\": EVENT_DEVICE_TRIGGER, \"data\": event[\"trigger\"]},\r\n        )\r\n        self._connection.send_message(\r\n            json.dumps(message, cls=NodeRedJSONEncoder, allow_nan=False)\r\n        )\r\n\r\n    def remove_device_trigger(self):\r\n        \"\"\"Remove device trigger.\"\"\"\r\n        self._trigger_config = None\r\n        if self._unsubscribe_device_trigger is not None:\r\n            _LOGGER.info(f\"removed device triger - {self._server_id} {self._node_id}\")\r\n            self._unsubscribe_device_trigger()\r\n            self._unsubscribe_device_trigger = None\r\n\r\n    @callback\r\n    async def handle_discovery_update(self, msg, connection):\r\n        \"\"\"Update entity config.\"\"\"\r\n        if CONF_REMOVE not in msg and self._trigger_config != msg[CONF_DEVICE_TRIGGER]:\r\n            self.remove_device_trigger()\r\n            self._trigger_config = msg[CONF_DEVICE_TRIGGER]\r\n            await self.add_device_trigger()\r\n\r\n        super().handle_discovery_update(msg, connection)\r\n\r\n    async def async_added_to_hass(self):\r\n        \"\"\"Run when entity about to be added to hass.\"\"\"\r\n        await super().async_added_to_hass()\r\n\r\n        await self.add_device_trigger()\r\n\r\n    async def async_will_remove_from_hass(self) -> None:\r\n        \"\"\"Run when entity will be removed from hass.\"\"\"\r\n        self.remove_device_trigger()\r\n        await super().async_will_remove_from_hass()\r\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/translations/de.json",
    "content": "{\n    \"config\": {\n        \"step\": {\n            \"user\": {\n                \"title\": \"Node-RED Begleiter\",\n                \"description\": \"Möchtest du den Node-RED Begleiter wirklich einrichten?\"\n            }\n        },\n        \"abort\": {\n            \"single_instance_allowed\": \"Es ist kann nur eine Konfiguration für den Node-RED Begleiter geben.\"\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/translations/dk.json",
    "content": "{\n    \"config\": {\n        \"step\": {\n            \"user\": {\n                \"description\": \"Er du sikker på, at du vil konfigurere Node-RED Companion?\"\n            }\n        },\n        \"abort\": {\n            \"single_instance_allowed\": \"Kun en enkelt konfiguration af Node-RED Companion er tilladt.\"\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/translations/en.json",
    "content": "{\n    \"config\": {\n        \"step\": {\n            \"user\": {\n                \"description\": \"Do you want to add Node-RED Companion to Home Assistant?\"\n            }\n        },\n        \"abort\": {\n            \"single_instance_allowed\": \"Already configured. Only a single configuration possible.\"\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/translations/fr.json",
    "content": "{\n    \"config\": {\n        \"step\": {\n            \"user\": {\n                \"description\": \"Voulez-vous ajouter Node-RED Companion à Home Assistant ?\"             \n            }\n        },\n        \"abort\": {\n            \"single_instance_allowed\": \"Déjà configuré. Une seule configuration possible à la fois.\"\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/translations/nb.json",
    "content": "{\n    \"config\": {\n        \"step\": {\n            \"user\": {\n                \"description\": \"Er du sikker på at du vil konfigurere Node-RED?\"\n            }\n        },\n        \"abort\": {\n            \"single_instance_allowed\": \"Bare en enkelt konfigurasjon av Node-RED er tillatt.\"\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/translations/pt-BR.json",
    "content": "{\n    \"config\": {\n        \"step\": {\n            \"user\": {\n                \"description\": \"Tem certeza de que deseja configurar o Node-RED Companion?\"\n            }\n        },\n        \"abort\": {\n            \"single_instance_allowed\": \"Apenas uma única configuração do Node-RED Companion é permitida.\"\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/translations/sv.json",
    "content": "{\n    \"config\": {\n        \"step\": {\n            \"user\": {\n                \"description\": \"Vill du lägga till Node-RED Companion till Home Assistant?\"\n            }\n        },\n        \"abort\": {\n            \"single_instance_allowed\": \"Redan konfigurerad. Bara en konfiguration är möjlig.\"\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/utils.py",
    "content": "\"\"\"Helpers for node-red.\"\"\"\nfrom datetime import timedelta\nfrom typing import Any\n\nfrom homeassistant.helpers.json import JSONEncoder\n\n\nclass NodeRedJSONEncoder(JSONEncoder):\n    \"\"\"JSONEncoder that supports timedelta objects and falls back to the Home Assistant Encoder.\"\"\"\n\n    def default(self, o: Any) -> Any:\n        \"\"\"Convert timedelta objects.\n\n        Hand other objects to the Home Assistant JSONEncoder.\n        \"\"\"\n        if isinstance(o, timedelta):\n            return o.total_seconds()\n\n        return JSONEncoder.default(self, o)\n"
  },
  {
    "path": "home-assistant/custom_components/nodered/websocket.py",
    "content": "\"\"\"Websocket API for Node-RED.\"\"\"\nimport json\nimport logging\n\nfrom homeassistant.components import device_automation\nfrom homeassistant.components.device_automation.exceptions import (\n    DeviceNotFound,\n    InvalidDeviceAutomationConfig,\n)\nfrom homeassistant.components.device_automation.trigger import (\n    TRIGGER_SCHEMA,\n    DeviceAutomationType,\n)\nfrom homeassistant.components.websocket_api import (\n    async_register_command,\n    async_response,\n    error_message,\n    event_message,\n    require_admin,\n    result_message,\n    websocket_command,\n)\nfrom homeassistant.const import (\n    CONF_DOMAIN,\n    CONF_ID,\n    CONF_NAME,\n    CONF_STATE,\n    CONF_TYPE,\n    CONF_WEBHOOK_ID,\n)\nfrom homeassistant.core import callback\nfrom homeassistant.helpers import config_validation as cv\nfrom homeassistant.helpers.dispatcher import async_dispatcher_send\nfrom homeassistant.helpers.typing import HomeAssistantType\nimport voluptuous as vol\n\nfrom .const import (\n    CONF_ATTRIBUTES,\n    CONF_COMPONENT,\n    CONF_CONFIG,\n    CONF_DEVICE_INFO,\n    CONF_DEVICE_TRIGGER,\n    CONF_NODE_ID,\n    CONF_REMOVE,\n    CONF_SERVER_ID,\n    CONF_SUB_TYPE,\n    DOMAIN,\n    NODERED_DISCOVERY,\n    NODERED_ENTITY,\n    VERSION,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\n\ndef register_websocket_handlers(hass: HomeAssistantType):\n    \"\"\"Register the websocket handlers.\"\"\"\n\n    async_register_command(hass, websocket_version)\n    async_register_command(hass, websocket_webhook)\n    async_register_command(hass, websocket_discovery)\n    async_register_command(hass, websocket_entity)\n    async_register_command(hass, websocket_device_action)\n\n\n@require_admin\n@async_response\n@websocket_command(\n    {\n        vol.Required(CONF_TYPE): \"nodered/device_action\",\n        vol.Required(\"action\"): cv.DEVICE_ACTION_SCHEMA,\n    }\n)\nasync def websocket_device_action(hass, connection, msg):\n    \"\"\"Sensor command.\"\"\"\n    context = connection.context(msg)\n    platform = await device_automation.async_get_device_automation_platform(\n        hass, msg[\"action\"][CONF_DOMAIN], DeviceAutomationType.ACTION\n    )\n\n    try:\n        await platform.async_call_action_from_config(hass, msg[\"action\"], {}, context)\n        connection.send_message(result_message(msg[CONF_ID], {\"success\": True}))\n    except InvalidDeviceAutomationConfig as err:\n        connection.send_message(error_message(msg[CONF_ID], \"invalid_config\", str(err)))\n    except DeviceNotFound as err:\n        connection.send_message(\n            error_message(msg[CONF_ID], \"device_not_found\", str(err))\n        )\n\n\n@require_admin\n@websocket_command(\n    {\n        vol.Required(CONF_TYPE): \"nodered/discovery\",\n        vol.Required(CONF_COMPONENT): cv.string,\n        vol.Required(CONF_SERVER_ID): cv.string,\n        vol.Required(CONF_NODE_ID): cv.string,\n        vol.Optional(CONF_CONFIG, default={}): dict,\n        vol.Optional(CONF_STATE): vol.Any(bool, str, int, float, None),\n        vol.Optional(CONF_ATTRIBUTES): dict,\n        vol.Optional(CONF_REMOVE): bool,\n        vol.Optional(CONF_DEVICE_INFO): dict,\n        vol.Optional(CONF_DEVICE_TRIGGER): TRIGGER_SCHEMA,\n        vol.Optional(CONF_SUB_TYPE): str,\n    }\n)\ndef websocket_discovery(hass, connection, msg):\n    \"\"\"Sensor command.\"\"\"\n    async_dispatcher_send(\n        hass, NODERED_DISCOVERY.format(msg[CONF_COMPONENT]), msg, connection\n    )\n    connection.send_message(result_message(msg[CONF_ID], {\"success\": True}))\n\n\n@require_admin\n@websocket_command(\n    {\n        vol.Required(CONF_TYPE): \"nodered/entity\",\n        vol.Required(CONF_SERVER_ID): cv.string,\n        vol.Required(CONF_NODE_ID): cv.string,\n        vol.Required(CONF_STATE): vol.Any(bool, str, int, float, None),\n        vol.Optional(CONF_ATTRIBUTES, default={}): dict,\n    }\n)\ndef websocket_entity(hass, connection, msg):\n    \"\"\"Sensor command.\"\"\"\n\n    async_dispatcher_send(\n        hass, NODERED_ENTITY.format(msg[CONF_SERVER_ID], msg[CONF_NODE_ID]), msg\n    )\n    connection.send_message(result_message(msg[CONF_ID], {\"success\": True}))\n\n\n@require_admin\n@websocket_command({vol.Required(CONF_TYPE): \"nodered/version\"})\ndef websocket_version(hass, connection, msg):\n    \"\"\"Version command.\"\"\"\n\n    connection.send_message(result_message(msg[CONF_ID], VERSION))\n\n\n@require_admin\n@async_response\n@websocket_command(\n    {\n        vol.Required(CONF_TYPE): \"nodered/webhook\",\n        vol.Required(CONF_WEBHOOK_ID): cv.string,\n        vol.Required(CONF_NAME): cv.string,\n        vol.Required(CONF_SERVER_ID): cv.string,\n    }\n)\nasync def websocket_webhook(hass, connection, msg):\n    \"\"\"Create webhook command.\"\"\"\n    webhook_id = msg[CONF_WEBHOOK_ID]\n\n    @callback\n    async def handle_webhook(hass, id, request):\n        \"\"\"Handle webhook callback.\"\"\"\n        body = await request.text()\n        try:\n            payload = json.loads(body) if body else {}\n        except ValueError:\n            payload = body\n\n        data = {\n            \"payload\": payload,\n            \"headers\": dict(request.headers),\n            \"params\": dict(request.query),\n        }\n\n        _LOGGER.debug(f\"Webhook received {id[:15]}..: {data}\")\n        connection.send_message(event_message(msg[CONF_ID], {\"data\": data}))\n\n    def remove_webhook() -> None:\n        \"\"\"Remove webhook command.\"\"\"\n        try:\n            hass.components.webhook.async_unregister(webhook_id)\n\n        except ValueError:\n            pass\n\n        _LOGGER.info(f\"Webhook removed: {webhook_id[:15]}..\")\n        connection.send_message(result_message(msg[CONF_ID], {\"success\": True}))\n\n    try:\n        hass.components.webhook.async_register(\n            DOMAIN, msg[CONF_NAME], webhook_id, handle_webhook\n        )\n    except ValueError:\n        connection.send_message(result_message(msg[CONF_ID], {\"success\": False}))\n        return\n\n    _LOGGER.info(f\"Webhook created: {webhook_id[:15]}..\")\n    connection.subscriptions[msg[CONF_ID]] = remove_webhook\n    connection.send_message(result_message(msg[CONF_ID], {\"success\": True}))\n"
  },
  {
    "path": "home-assistant/custom_components/rocketlaunchlive/__init__.py",
    "content": "\"\"\"The Rocket Launch Live integration.\"\"\"\nimport asyncio\n\nimport voluptuous as vol\nimport logging\nfrom datetime import timedelta\n\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.core import HomeAssistant\nfrom homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed\nfrom homeassistant.exceptions import ConfigEntryNotReady, PlatformNotReady\n\nfrom rocketlaunchlive import RocketLaunchLive\n\nfrom .const import DOMAIN, COORDINATOR, ROCKET_API\n\nCONFIG_SCHEMA = vol.Schema({DOMAIN: vol.Schema({})}, extra=vol.ALLOW_EXTRA)\n_LOGGER = logging.getLogger(__name__)\n\nPLATFORMS = [\"sensor\"]\n\nasync def async_setup(hass: HomeAssistant, config: dict):\n    \"\"\"Set up the Rocket Launch Live component.\"\"\"\n    hass.data.setdefault(DOMAIN, {})\n\n    return True\n\nasync def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):\n    \"\"\"Set up Rocket Launch Live from a config entry.\"\"\"\n    polling_interval = 60\n\n    conf = entry.data\n\n    if \"api_key\" in conf:\n        api = RocketLaunchLive(key=conf[\"api_key\"])\n    else:\n        api = RocketLaunchLive()\n\n    try:\n        await api.get_next_launches()\n    except ConnectionError as error:\n        _LOGGER.debug(f\"Rocket Launch Live API: {error}\")\n        raise PlatformNotReady from error\n        return False\n    except ValueError as error:\n        _LOGGER.debug(f\"Rocket Launch Live API: {error}\")\n        raise ConfigEntryNotReady from error\n        return False\n\n    coordinator = RocketLaunchLiveUpdater(\n        hass, \n        api=api, \n        name=\"RocketLaunchLive\", \n        polling_interval=polling_interval,\n    )\n\n    await coordinator.async_refresh()\n    \n    if not coordinator.last_update_success:\n        raise ConfigEntryNotReady\n\n    hass.data[DOMAIN][entry.entry_id] = {\n        COORDINATOR: coordinator,\n        ROCKET_API: api\n    }\n\n    for component in PLATFORMS:\n        _LOGGER.info(\"Setting up platform: %s\", component)\n        hass.async_create_task(\n            hass.config_entries.async_forward_entry_setup(entry, component)\n        )\n\n    return True\n\n\nasync def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):\n    \"\"\"Unload a config entry.\"\"\"\n    unload_ok = all(\n        await asyncio.gather(\n            *[\n                hass.config_entries.async_forward_entry_unload(entry, component)\n                for component in PLATFORMS\n            ]\n        )\n    )\n    if unload_ok:\n        hass.data[DOMAIN].pop(entry.entry_id)\n\n    return unload_ok\n\nclass RocketLaunchLiveUpdater(DataUpdateCoordinator):\n    \"\"\"Class to manage fetching update data from the Rocket Launch Live API.\"\"\"\n\n    def __init__(\n        self,\n        hass: HomeAssistant,\n        api: str,\n        name: str,\n        polling_interval: int,\n    ):\n        \"\"\"Initialize the global Rocket Launch Live data updater.\"\"\"\n        self.api = api\n\n        super().__init__(\n            hass = hass,\n            logger = _LOGGER,\n            name = name,\n            update_interval = timedelta(seconds=polling_interval),\n        )\n\n    async def _async_update_data(self):\n        \"\"\"Fetch data from Rocket Launch Live API.\"\"\"\n\n        try:\n            rocket_data = await self.api.get_next_launches()\n        except ConnectionError as error:\n            _LOGGER.info(f\"Rocket Launch Live API: {error}\")\n            raise PlatformNotReady from error\n        except ValueError as error:\n            _LOGGER.info(f\"Rocket Launch Live API: {error}\")\n            raise UpdateFailed from error\n\n        launches = {}\n        launch_id = 0\n        for launch in rocket_data[\"result\"]:\n            launches[launch_id] = launch\n            launch_id += 1\n        return launches\n"
  },
  {
    "path": "home-assistant/custom_components/rocketlaunchlive/config_flow.py",
    "content": "\"\"\"Config flow for Rocket Launch Live - Next 5 Launches.\"\"\"\nimport logging\nimport voluptuous as vol\n\nfrom rocketlaunchlive import RocketLaunchLive\n\nfrom homeassistant import config_entries\nfrom homeassistant.helpers import config_entry_flow\n\nfrom .const import DOMAIN\n\n_LOGGER = logging.getLogger(__name__)\n\nclass ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):\n    \"\"\"Handle a config flow for Rocket Launch Live.\"\"\"\n\n    VERSION = 1\n    CONNECTION_CLASS = config_entries.CONN_CLASS_CLOUD_POLL\n\n    async def async_step_user(self, user_input=None):\n        \"\"\"Handle the initial step.\"\"\"\n        errors = {}\n\n        config_entry = self.hass.config_entries.async_entries(DOMAIN)\n        if config_entry:\n            return self.async_abort(reason=\"single_instance_allowed\")\n\n        if user_input is not None:\n            if \"api_key\" in user_input:\n                key = user_input[\"api_key\"]\n                api_client = RocketLaunchLive(key=key)\n            else:\n                api_client = RocketLaunchLive()\n\n            try:\n                await api_client.get_next_launches()\n            except ValueError:\n                errors[\"base\"] = \"invalid_auth\"\n            except ConnectionError:\n                errors[\"base\"] = \"cannot_connect\"\n            except Exception:  # pylint: disable=broad-except\n                _LOGGER.exception(\"Unexpected exception\")\n                errors[\"base\"] = \"unknown\"\n            else:\n                if \"api_key\" in user_input:\n                    await self.async_set_unique_id(user_input[\"api_key\"])\n                self._abort_if_unique_id_configured()\n                return self.async_create_entry(title=\"Rocket Launch Live\", data=user_input)\n\n        return self.async_show_form(\n            step_id=\"user\",\n            data_schema=vol.Schema(\n                {\n                    vol.Optional(\"api_key\"): str,\n                }\n            ),\n            errors=errors,\n        )\n"
  },
  {
    "path": "home-assistant/custom_components/rocketlaunchlive/const.py",
    "content": "\"\"\"Constants for the Rocket Launch Live integration.\"\"\"\n\nDOMAIN = \"rocketlaunchlive\"\nCOORDINATOR = \"coordinator\"\nROCKET_API = \"rocket_api\"\nATTR_IDENTIFIERS = \"identifiers\"\nATTR_MANUFACTURER = \"manufacturer\"\nATTR_MODEL = \"model\"\n"
  },
  {
    "path": "home-assistant/custom_components/rocketlaunchlive/manifest.json",
    "content": "{\n    \"domain\": \"rocketlaunchlive\",\n    \"name\": \"Rocket Launch Live - Next 5 Launches\",\n    \"config_flow\": true,\n    \"documentation\": \"https://github.com/djtimca/harocketlaunchlive\",\n    \"requirements\": [\n      \"rocketlaunchlive==0.0.2\"\n    ],\n    \"ssdp\": [],\n    \"zeroconf\": [],\n    \"homekit\": {},\n    \"dependencies\": [],\n    \"codeowners\": [\n      \"@djtimca\"\n    ],\n    \"version\": \"009\"\n  }"
  },
  {
    "path": "home-assistant/custom_components/rocketlaunchlive/sensor.py",
    "content": "\"\"\"Definition and setup of the Space Launch Live Sensors for Home Assistant.\"\"\"\n\nimport datetime\nimport logging\nimport dateutil\nimport time\n\nfrom homeassistant.util.dt import as_local, as_timestamp\nfrom homeassistant.components.sensor import ENTITY_ID_FORMAT\nfrom homeassistant.const import LENGTH_KILOMETERS, SPEED_KILOMETERS_PER_HOUR, ATTR_NAME\nfrom homeassistant.helpers.entity import Entity\nfrom homeassistant.helpers.update_coordinator import (\n    CoordinatorEntity,\n    DataUpdateCoordinator,\n    UpdateFailed,\n)\nfrom . import RocketLaunchLiveUpdater\n\nfrom .const import ATTR_IDENTIFIERS, ATTR_MANUFACTURER, ATTR_MODEL, DOMAIN, COORDINATOR\n\n_LOGGER = logging.getLogger(__name__)\n\n\nasync def async_setup_entry(hass, entry, async_add_entities):\n    \"\"\"Set up the sensor platforms.\"\"\"\n\n    coordinator = hass.data[DOMAIN][entry.entry_id][COORDINATOR]\n    sensors = []\n    sensor_count = 0\n\n    for launch_id, launch in coordinator.data.items():\n        sensor_count += 1\n        sensors.append(\n            RocketLaunchSensor(\n                coordinator,\n                sensor_count,\n                launch_id,\n                launch,\n            )\n        )\n\n    async_add_entities(sensors)\n\nclass RocketLaunchSensor(CoordinatorEntity):\n    \"\"\"Defines a Rocket Launch Live launch sensor.\"\"\"\n\n    def __init__(\n        self,\n        coordinator: RocketLaunchLiveUpdater,\n        sensor_count: int,\n        launch_id: str,\n        launch: dict,\n    ):\n        \"\"\"Initialize entity.\"\"\"\n\n        super().__init__(coordinator=coordinator)\n\n        self._name = f\"Rocket Launch {sensor_count}\"\n        self._unique_id = f\"rocket_launch_{sensor_count}\"\n        self._state = self.get_state(launch)\n        self._icon = \"mdi:rocket\"\n        self._launch_id = sensor_count -1\n        self._attrs = self.get_attrs(launch)\n\n    @property\n    def unique_id(self):\n        \"\"\"Return the Home Assistant unique id.\"\"\"\n        return self._unique_id\n\n    @property\n    def name(self):\n        \"\"\"Return the name for Home Assistant.\"\"\"\n        return self._name\n\n    @property\n    def icon(self):\n        \"\"\"Return the assigned icon.\"\"\"\n        return self._icon\n\n    @property\n    def extra_state_attributes(self):\n        \"\"\"Return the device attributes.\"\"\"\n        attrs = self.get_attrs(self.coordinator.data[self._launch_id])\n        return attrs\n\n    @property\n    def device_info(self):\n        \"\"\"Return the device info for entity registry.\"\"\"\n        return {\n            ATTR_IDENTIFIERS: {(DOMAIN, \"next_5_launches\")},\n            ATTR_NAME: \"Rocket Launch Live\",\n            ATTR_MANUFACTURER: \"rocketlaunch.live\",\n            ATTR_MODEL: \"Next 5 Launches\",\n        }\n\n    @property\n    def state(self):\n        \"\"\"Return the current state of the sensor.\"\"\"\n        state = self.get_state(self.coordinator.data[self._launch_id])\n        return state\n\n    async def async_update(self):\n        \"\"\"Update the data coordinator.\"\"\"\n        await self.coordinator.async_request_refresh()\n\n    async def async_added_to_hass(self):\n        \"\"\"Subscribe to updates.\"\"\"\n        self.async_on_remove(\n            self.coordinator.async_add_listener(self.async_write_ha_state)\n        )    \n\n    def get_state(self, launch:dict):\n        \"\"\"Return a standardized string state.\"\"\"\n\n        return f\"{launch['name']} ({launch['provider']['name']})\"\n\n    def get_attrs(self, launch:dict):\n        \"\"\"Return standardized attrs.\"\"\"\n\n        attrs = {}\n        attrs[\"name\"] = launch[\"name\"]\n        attrs[\"provider\"] = launch[\"provider\"][\"name\"]\n        attrs[\"vehicle\"] = launch[\"vehicle\"][\"name\"]\n        attrs[\"launch_pad\"] = f\"{launch['pad']['location']['name']} ({launch['pad']['name']})\"\n        attrs[\"launch_location\"] = launch[\"pad\"][\"location\"][\"country\"]\n\n        missions = \"\"\n        for mission in launch[\"missions\"]:\n            missions = f\"{missions}{mission['name']} |\"\n        attrs[\"launch_missions\"] = missions\n        attrs[\"launch_description\"] = launch[\"launch_description\"]\n\n        attrs[\"launch_media_link\"] = \"\"\n\n        for this_media in launch[\"media\"]:\n            if this_media.get(\"ldfeatured\"):\n                attrs[\"launch_media_link\"] = f\"https://www.youtube.com/watch?v={this_media.get('youtube_vidid')}\"\n\n        attrs[\"launch_24h_warning\"] = \"false\"\n        attrs[\"launch_20m_warning\"] = \"false\"\n        attrs[\"launch_target_timestamp\"] = \"\"\n\n        if launch.get(\"win_open\"):\n            launch_timestamp = as_timestamp(dateutil.parser.parse(launch[\"win_open\"]))\n            launch_target = as_local(dateutil.parser.parse(launch[\"win_open\"]))\n            attrs[\"launch_target\"] = launch_target.strftime(\"%d-%b-%y %I:%M %p\")\n            attrs[\"launch_target_timestamp\"] = int(launch_timestamp)\n\n            if launch_timestamp < (time.time() + (24 * 60 * 60)) and launch_timestamp > time.time():\n                attrs[\"launch_24h_warning\"] = \"true\"\n\n            if launch_timestamp < (time.time() + (20 * 60)) and launch_timestamp > time.time():\n                attrs[\"launch_20m_warning\"] = \"true\"\n            \n        else:\n            attrs[\"launch_target\"] = \"NA\"\n\n        if launch[\"est_date\"].get(\"year\") and launch[\"est_date\"].get(\"month\") and launch[\"est_date\"].get(\"day\"):\n            year = str(launch[\"est_date\"][\"year\"])\n            month = str(launch[\"est_date\"][\"month\"])\n            day = str(launch[\"est_date\"][\"day\"])\n\n            if len(month)==1:\n                month = f\"0{month}\"\n\n            if len(day)==1:\n                day = f\"0{day}\"\n\n            attrs[\"est_launch_date\"] = datetime.datetime.fromisoformat(\n                f\"{year}-{month}-{day}\"\n            )\n        else:\n            attrs[\"est_launch_date\"] = \"NA\"\n\n        attrs[\"launch_date_target\"] = launch[\"date_str\"]\n\n        tag_string = \"\"\n        for tag in launch[\"tags\"]:\n            tag_string = f\"{tag_string}{tag['text']} | \"\n\n        attrs[\"tags\"] = tag_string[:255] if len(tag_string) > 255 else tag_string\n\n        if launch.get(\"weather_summary\"):\n            attrs[\"weather_summary\"] = launch[\"weather_summary\"].replace(\"\\n\", \", \")\n        else:\n            attrs[\"weather_summary\"] = \"TBD\"\n        attrs[\"weather_temp\"] = launch[\"weather_temp\"]\n        attrs[\"last_updated\"] = launch[\"modified\"]\n\n        return attrs\n\n"
  },
  {
    "path": "home-assistant/custom_components/rocketlaunchlive/strings.json",
    "content": "{\n  \"title\": \"Rocket Launch Live - Next 5 Launches\",\n  \"config\": {\n    \"step\": {\n      \"user\": {\n        \"data\": {\n          \"api_key\": \"Optional: Enter your paid RocketLaunch.live API key.\"\n        }\n      }\n    },\n    \"error\": {\n      \"cannot_connect\": \"[%key:common::config_flow::error::cannot_connect%]\",\n      \"invalid_auth\": \"[%key:common::config_flow::error::invalid_auth%]\",\n      \"unknown\": \"[%key:common::config_flow::error::unknown%]\"\n    },\n    \"abort\": {\n      \"single_instance_allowed\": \"[%key:common::config_flow::abort::single_instance_allowed%]\"\n    }\n  }\n}"
  },
  {
    "path": "home-assistant/custom_components/rocketlaunchlive/translations/en.json",
    "content": "{\n  \"title\": \"Rocket Launch Live - Next 5 Launches\",\n  \"config\": {\n    \"step\": {\n      \"user\": {\n        \"data\": {\n          \"api_key\": \"Optional: Enter your paid RocketLaunch.live API key.\"\n        }\n      }\n    },\n    \"error\": {\n      \"cannot_connect\": \"[%key:common::config_flow::error::cannot_connect%]\",\n      \"invalid_auth\": \"[%key:common::config_flow::error::invalid_auth%]\",\n      \"unknown\": \"[%key:common::config_flow::error::unknown%]\"\n    },\n    \"abort\": {\n      \"single_instance_allowed\": \"[%key:common::config_flow::abort::single_instance_allowed%]\"\n    }\n  }\n}"
  },
  {
    "path": "home-assistant/custom_components/samsung_multi_room/__init__.py",
    "content": "\n__version__ = '1.0.0'"
  },
  {
    "path": "home-assistant/custom_components/samsung_multi_room/manifest.json",
    "content": "{\n  \"domain\": \"soundbar\",\n  \"vetsion\": \"1.0\",\n  \"name\": \"SamsungMultiRoom\",\n  \"documentation\": \"http://macbury.ninja\",\n  \"requirements\": [\n    \"xmltodict==0.11.0\"\n  ],\n  \"dependencies\": [],\n  \"codeowners\": [\n    \"@macbury\"\n  ]\n}\n"
  },
  {
    "path": "home-assistant/custom_components/samsung_multi_room/media_player.py",
    "content": "import urllib.parse\nimport async_timeout\nimport aiohttp\nimport asyncio\nimport logging\nimport voluptuous as vol\nimport homeassistant.util as util\nimport voluptuous as vol\n\nfrom datetime import timedelta\nfrom homeassistant.helpers.aiohttp_client import async_get_clientsession\n\n_LOGGER      = logging.getLogger(__name__)\n\nMIN_TIME_BETWEEN_SCANS = timedelta(seconds=3)\nMIN_TIME_BETWEEN_FORCED_SCANS = timedelta(seconds=1)\n\nfrom homeassistant.helpers import config_validation as cv\n\nfrom homeassistant.components.media_player.const import (\n  MEDIA_TYPE_CHANNEL,\n  SUPPORT_TURN_ON,\n  SUPPORT_TURN_OFF,\n  SUPPORT_VOLUME_MUTE,\n  SUPPORT_SELECT_SOURCE,\n  SUPPORT_VOLUME_SET,\n)\n\nfrom homeassistant.components.media_player import (\n  MediaPlayerDevice\n)\n\nfrom homeassistant.const import (\n  CONF_NAME,\n  CONF_HOST,\n  STATE_IDLE,\n  STATE_PLAYING,\n  STATE_OFF\n)\n\nMULTI_ROOM_SOURCE_TYPE = [\n  'optical',\n  'soundshare',\n  'hdmi',\n  'wifi',\n  'aux',\n  'bt'\n]\n\nBOOL_OFF = 'off'\nBOOL_ON = 'on'\nTIMEOUT = 10\nSUPPORT_SAMSUNG_MULTI_ROOM = SUPPORT_VOLUME_SET | SUPPORT_VOLUME_MUTE | SUPPORT_SELECT_SOURCE\n\nCONF_MAX_VOLUME = 'max_volume'\nCONF_PORT = 'port'\n\nPLATFORM_SCHEMA = vol.Schema({\n  vol.Optional('platform', default='samsung_multi_room'): cv.string,\n  vol.Optional(CONF_NAME, default='soundbar'): cv.string,\n  vol.Optional(CONF_HOST, default='127.0.0.1'): cv.string,\n  vol.Optional(CONF_PORT, default='55001'): cv.string,\n  vol.Optional(CONF_MAX_VOLUME, default='100'): cv.string\n})\n\nclass MultiRoomApi():\n  def __init__(self, ip, port, session, hass):\n    self.session = session\n    self.hass = hass\n    self.ip = ip\n    self.port = port\n    self.endpoint = 'http://{0}:{1}'.format(ip, port)\n\n  async def _exec_cmd(self, cmd, key_to_extract):\n    import xmltodict\n    query = urllib.parse.urlencode({ \"cmd\": cmd }, quote_via=urllib.parse.quote)\n    url = '{0}/UIC?{1}'.format(self.endpoint, query)\n\n    with async_timeout.timeout(TIMEOUT, loop=self.hass.loop):\n      _LOGGER.debug(\"Executing: {} with cmd: {}\".format(url, cmd))\n      response = await self.session.get(url)\n      data = await response.text()\n      _LOGGER.debug(data)\n      response = xmltodict.parse(data)\n      if key_to_extract in response['UIC']['response']:\n        return response['UIC']['response'][key_to_extract]\n      else:\n        return None\n\n  async def _exec_get(self, action, key_to_extract):\n    return await self._exec_cmd('<name>{0}</name>'.format(action), key_to_extract)\n\n  async def _exec_set(self, action, property_name, value):\n    if type(value) is str:\n      value_type = 'str'\n    else:\n      value_type = 'dec'\n    cmd = '<name>{0}</name><p type=\"{3}\" name=\"{1}\" val=\"{2}\"/>'.format(action, property_name, value, value_type)\n    return await self._exec_cmd(cmd, property_name)\n\n  async def get_main_info(self):\n    return await self._exec_get('GetMainInfo')\n\n  async def get_volume(self):\n    return int(await self._exec_get('GetVolume', 'volume'))\n\n  async def set_volume(self, volume):\n    return await self._exec_set('SetVolume', 'volume', int(volume))\n\n  async def get_speaker_name(self):\n    return await self._exec_get('GetSpkName', 'spkname')\n\n  async def get_muted(self):\n    return await self._exec_get('GetMute', 'mute') == BOOL_ON\n\n  async def set_muted(self, mute):\n    if mute:\n      return await self._exec_set('SetMute', 'mute', BOOL_ON)\n    else:\n      return await self._exec_set('SetMute', 'mute', BOOL_OFF)\n\n  async def get_source(self):\n    return await self._exec_get('GetFunc', 'function')\n\n  async def set_source(self, source):\n    return await self._exec_set('SetFunc', 'function', source)\n\nclass MultiRoomDevice(MediaPlayerDevice):\n  def __init__(self, name, max_volume, api):\n    _LOGGER.info('Initializing MultiRoomDevice')\n    self._name = name\n    self.api = api\n    self._state = STATE_OFF\n    self._current_source = None\n    self._volume = 0\n    self._muted = False\n    self._max_volume = max_volume\n\n  @property\n  def supported_features(self):\n    return SUPPORT_SAMSUNG_MULTI_ROOM\n\n  @property\n  def name(self):\n    return self._name\n\n  @property\n  def state(self):\n    return self._state\n\n  @property\n  def volume_level(self):\n    return self._volume\n\n  async def async_set_volume_level(self, volume):\n    await self.api.set_volume(volume * self._max_volume)\n    await self.async_update()\n\n  @property\n  def source(self):\n    return self._current_source\n\n  @property\n  def source_list(self):\n    return sorted(MULTI_ROOM_SOURCE_TYPE)\n\n  async def async_select_source(self, source):\n    await self.api.set_source(source)\n    await self.async_update()\n\n  @property\n  def is_volume_muted(self):\n    return self._muted\n\n  async def async_mute_volume(self, mute):\n    self._muted = mute\n    await self.api.set_muted(self._muted)\n    await self.async_update()\n\n  @util.Throttle(MIN_TIME_BETWEEN_SCANS, MIN_TIME_BETWEEN_FORCED_SCANS)\n  async def async_update(self):\n    _LOGGER.info('Refreshing state...')\n    self._current_source = await self.api.get_source()\n    self._volume = await self.api.get_volume() / self._max_volume\n    self._muted = await self.api.get_muted()\n    if self._current_source:\n      self._state = STATE_PLAYING\n    else:\n      self._state = STATE_OFF\n\n\ndef setup_platform(hass, config, add_devices, discovery_info=None):\n  _LOGGER.error('Setup of the soundbar')\n  ip = config.get(CONF_HOST)\n  port = config.get(CONF_PORT)\n  name = config.get(CONF_NAME)\n  max_volume = int(config.get(CONF_MAX_VOLUME))\n  session = async_get_clientsession(hass)\n  api = MultiRoomApi(ip, port, session, hass)\n  add_devices([MultiRoomDevice(name, max_volume, api)], True)\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/__init__.py",
    "content": "\"\"\"\nSupport for LG SmartThinQ device.\n\"\"\"\n\nfrom __future__ import annotations\n\nfrom datetime import timedelta\nimport logging\n\nfrom .wideq import (\n    UNIT_TEMP_CELSIUS,\n    UNIT_TEMP_FAHRENHEIT,\n    DeviceInfo as LGDeviceInfo,\n    DeviceType,\n    get_lge_device,\n)\nfrom .wideq.core_async import ClientAsync\nfrom .wideq.core_exceptions import (\n    InvalidCredentialError,\n    MonitorRefreshError,\n    MonitorUnavailableError,\n    NotConnectedError,\n)\n\nfrom homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry\nfrom homeassistant.const import (\n    CONF_REGION,\n    CONF_TOKEN,\n    MAJOR_VERSION,\n    MINOR_VERSION,\n    TEMP_CELSIUS,\n    Platform,\n    __version__,\n)\nfrom homeassistant.core import HomeAssistant, callback\nfrom homeassistant.exceptions import ConfigEntryNotReady\nfrom homeassistant.helpers import device_registry as dr\nfrom homeassistant.helpers.aiohttp_client import async_get_clientsession\nfrom homeassistant.helpers.entity import DeviceInfo\nfrom homeassistant.helpers.update_coordinator import DataUpdateCoordinator\n\nfrom .const import (\n    CLIENT,\n    CONF_LANGUAGE,\n    CONF_OAUTH_URL,\n    CONF_USE_API_V2,\n    DOMAIN,\n    MIN_HA_MAJ_VER,\n    MIN_HA_MIN_VER,\n    LGE_DEVICES,\n    STARTUP,\n    __min_ha_version__,\n)\n\nSMARTTHINQ_PLATFORMS = [\n    Platform.BINARY_SENSOR,\n    Platform.CLIMATE,\n    Platform.FAN,\n    Platform.HUMIDIFIER,\n    Platform.SENSOR,\n    Platform.SWITCH\n]\n\nMAX_DISC_COUNT = 4\nUNSUPPORTED_DEVICES = \"unsupported_devices\"\n\nSCAN_INTERVAL = timedelta(seconds=30)\n_LOGGER = logging.getLogger(__name__)\n\n\nclass LGEAuthentication:\n    \"\"\"Class to authenticate connection with LG ThinQ.\"\"\"\n\n    def __init__(self, region: str, language: str) -> None:\n        \"\"\"Initialize the class.\"\"\"\n        self._region = region\n        self._language = language\n\n    async def get_login_url(self, hass: HomeAssistant) -> str | None:\n        \"\"\"Get an url to login in browser.\"\"\"\n        session = async_get_clientsession(hass)\n        try:\n            return await ClientAsync.get_oauth_url(\n                self._region, self._language, aiohttp_session=session\n            )\n        except Exception as exc:\n            _LOGGER.exception(\"Error retrieving login URL from ThinQ\", exc_info=exc)\n\n        return None\n\n    @staticmethod\n    async def get_auth_info_from_url(hass: HomeAssistant, callback_url: str) -> dict[str, str] | None:\n        \"\"\"Retrieve auth info from redirect url.\"\"\"\n        session = async_get_clientsession(hass)\n        try:\n            return await ClientAsync.oauth_info_from_url(callback_url, aiohttp_session=session)\n        except Exception as exc:\n            _LOGGER.exception(\"Error retrieving OAuth info from ThinQ\", exc_info=exc)\n\n        return None\n\n    async def create_client_from_login(self, hass: HomeAssistant, username: str, password: str) -> ClientAsync:\n        \"\"\"Create a new client using username and password.\"\"\"\n        session = async_get_clientsession(hass)\n        return await ClientAsync.from_login(\n            username,\n            password,\n            country=self._region,\n            language=self._language,\n            aiohttp_session=session,\n        )\n\n    async def create_client_from_token(\n            self, hass: HomeAssistant, token: str, oauth_url: str | None = None\n    ) -> ClientAsync:\n        \"\"\"Create a new client using refresh token.\"\"\"\n        session = async_get_clientsession(hass)\n        return await ClientAsync.from_token(\n            token,\n            oauth_url,\n            country=self._region,\n            language=self._language,\n            aiohttp_session=session,\n            # enable_emulation=True,\n        )\n\n\ndef is_valid_ha_version() -> bool:\n    \"\"\"Check if HA version is valid for this integration.\"\"\"\n    return (\n        MAJOR_VERSION > MIN_HA_MAJ_VER or\n        (MAJOR_VERSION == MIN_HA_MAJ_VER and MINOR_VERSION >= MIN_HA_MIN_VER)\n    )\n\n\ndef _notify_error(hass, notification_id, title, message) -> None:\n    \"\"\"Notify user with persistent notification\"\"\"\n    hass.async_create_task(\n        hass.services.async_call(\n            domain='persistent_notification', service='create', service_data={\n                'title': title,\n                'message': message,\n                'notification_id': f\"{DOMAIN}.{notification_id}\"\n            }\n        )\n    )\n\n\nasync def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:\n    \"\"\"Set up SmartThinQ integration from a config entry.\"\"\"\n\n    if not is_valid_ha_version():\n        msg = \"This integration require at least HomeAssistant version \" \\\n              f\" {__min_ha_version__}, you are running version {__version__}.\" \\\n              \" Please upgrade HomeAssistant to continue use this integration.\"\n        _notify_error(hass, \"inv_ha_version\", \"SmartThinQ Sensors\", msg)\n        _LOGGER.warning(msg)\n        return False\n\n    refresh_token = entry.data[CONF_TOKEN]\n    region = entry.data[CONF_REGION]\n    language = entry.data[CONF_LANGUAGE]\n    oauth_url = entry.data.get(CONF_OAUTH_URL)\n    use_api_v2 = entry.data.get(CONF_USE_API_V2, False)\n\n    if not use_api_v2:\n        _LOGGER.warning(\n            \"Integration configuration is using ThinQ APIv1 that is unsupported. Please reconfigure\"\n        )\n        # Launch config entries setup\n        hass.async_create_task(\n            hass.config_entries.flow.async_init(\n                DOMAIN, context={\"source\": SOURCE_IMPORT}, data=entry.data\n            )\n        )\n        return False\n\n    _LOGGER.info(STARTUP)\n    _LOGGER.info(\n        \"Initializing ThinQ platform with region: %s - language: %s\",\n        region,\n        language,\n    )\n\n    # if network is not connected we can have some error\n    # raising ConfigEntryNotReady platform setup will be retried\n    lge_auth = LGEAuthentication(region, language)\n    try:\n        client = await lge_auth.create_client_from_token(hass, refresh_token, oauth_url)\n\n    except InvalidCredentialError:\n        msg = \"Invalid ThinQ credential error, integration setup aborted.\" \\\n              \" Please use the LG App on your mobile device to ensure your\" \\\n              \" credentials are correct, then restart HomeAssistant.\" \\\n              \" If your credential changed, you must reconfigure integration\"\n        _notify_error(hass, \"inv_credential\", \"SmartThinQ Sensors\", msg)\n        _LOGGER.error(msg)\n        return False\n\n    except Exception as exc:\n        _LOGGER.warning(\n            \"Connection not available. ThinQ platform not ready\", exc_info=True\n        )\n        raise ConfigEntryNotReady(\"ThinQ platform not ready\") from exc\n\n    if not client.has_devices:\n        _LOGGER.error(\"No ThinQ devices found. Component setup aborted\")\n        return False\n\n    _LOGGER.info(\"ThinQ client connected\")\n\n    try:\n        lge_devices, unsupported_devices = await lge_devices_setup(hass, client)\n    except Exception as exc:\n        _LOGGER.warning(\n            \"Connection not available. ThinQ platform not ready\", exc_info=True\n        )\n        raise ConfigEntryNotReady(\"ThinQ platform not ready\") from exc\n\n    # remove device not available anymore\n    cleanup_orphan_lge_devices(hass, entry.entry_id, client)\n\n    hass.data[DOMAIN] = {\n        CLIENT: client,\n        LGE_DEVICES: lge_devices,\n        UNSUPPORTED_DEVICES: unsupported_devices,\n    }\n    hass.config_entries.async_setup_platforms(entry, SMARTTHINQ_PLATFORMS)\n\n    return True\n\n\nasync def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:\n    \"\"\"Unload a config entry.\"\"\"\n    if unload_ok := await hass.config_entries.async_unload_platforms(\n        entry, SMARTTHINQ_PLATFORMS\n    ):\n        hass.data.pop(DOMAIN)\n\n    return unload_ok\n\n\nclass LGEDevice:\n\n    def __init__(self, device, hass):\n        \"\"\"initialize a LGE Device.\"\"\"\n\n        self._device = device\n        self._hass = hass\n        self._name = device.device_info.name\n        self._device_id = device.device_info.id\n        self._type = device.device_info.type\n        self._mac = device.device_info.macaddress\n        self._firmware = device.device_info.firmware\n\n        self._model = f\"{device.device_info.model_name}\"\n        self._id = f\"{self._type.name}:{self._device_id}\"\n\n        self._state = None\n        self._coordinator = None\n        self._disc_count = 0\n        self._available = True\n\n    @property\n    def available(self) -> bool:\n        return self._available\n\n    @property\n    def assumed_state(self) -> bool:\n        \"\"\"Return True if unable to access real state of the entity.\"\"\"\n        return self._available and self._disc_count >= MAX_DISC_COUNT\n\n    @property\n    def device(self):\n        \"\"\"The device instance\"\"\"\n        return self._device\n\n    @property\n    def name(self) -> str:\n        \"\"\"The device name\"\"\"\n        return self._name\n\n    @property\n    def type(self) -> DeviceType:\n        \"\"\"The device type\"\"\"\n        return self._type\n\n    @property\n    def unique_id(self) -> str:\n        \"\"\"Device unique ID\"\"\"\n        return self._id\n\n    @property\n    def state(self):\n        \"\"\"Current device state\"\"\"\n        return self._state\n\n    @property\n    def available_features(self) -> dict:\n        return self._device.available_features\n\n    @property\n    def device_info(self) -> DeviceInfo:\n        data = DeviceInfo(\n            identifiers={(DOMAIN, self._device_id)},\n            name=self._name,\n            manufacturer=\"LG\",\n            model=f\"{self._model} ({self._type.name})\",\n        )\n        if self._firmware:\n            data[\"sw_version\"] = self._firmware\n        if self._mac:\n            data[\"connections\"] = {(dr.CONNECTION_NETWORK_MAC, self._mac)}\n\n        return data\n\n    @property\n    def coordinator(self) -> DataUpdateCoordinator | None:\n        return self._coordinator\n\n    async def init_device(self) -> bool:\n        \"\"\"Init the device status and start coordinator.\"\"\"\n        if not await self._device.init_device_info():\n            return False\n        self._state = self._device.status\n        self._model = f\"{self._model}-{self._device.model_info.model_type}\"\n\n        # Create status update coordinator\n        await self._create_coordinator()\n\n        # Initialize device features\n        _ = self._state.device_features\n\n        return True\n\n    async def _create_coordinator(self) -> None:\n        \"\"\"Get the coordinator for a specific device.\"\"\"\n        coordinator = DataUpdateCoordinator(\n            self._hass,\n            _LOGGER,\n            name=f\"{DOMAIN}-{self._name}\",\n            update_method=self._async_update,\n            # Polling interval. Will only be polled if there are subscribers.\n            update_interval=SCAN_INTERVAL\n        )\n        await coordinator.async_refresh()\n        self._coordinator = coordinator\n\n    async def _async_update(self):\n        \"\"\"Async update used by coordinator.\"\"\"\n        await self._async_state_update()\n        return self._state\n\n    async def _async_state_update(self):\n        \"\"\"Update device state.\"\"\"\n        _LOGGER.debug(\"Updating ThinQ device %s\", self._name)\n        if self._disc_count < MAX_DISC_COUNT:\n            self._disc_count += 1\n\n        try:\n            # method poll should return None if status is not yet available\n            # or due to temporary connection failure that will be restored\n            state = await self._device.poll()\n\n        except (MonitorRefreshError, NotConnectedError):\n            # These exceptions are raised when device is not connected (turned off)\n            # or unreachable due to network or API errors\n            # If device status is \"on\" we reset the status, otherwise we just\n            # ignore and use previous known state\n            state = None\n            if self._state.is_on and self._disc_count >= MAX_DISC_COUNT:\n                _LOGGER.warning(\n                    \"Status for device %s was reset because disconnected or unreachable\",\n                    self._name,\n                )\n                self._state = self._device.reset_status()\n\n        except MonitorUnavailableError:\n            # This exception is raised when issue with ThinQ persist\n            # In this case available is set to false and device status\n            # is reset to avoid confusion when connection is restored\n            if not self._available:\n                return\n            _LOGGER.warning(\n                \"Status for device %s was reset because ThinQ connection not available\",\n                self._name,\n            )\n            self._available = False\n            self._state = self._device.reset_status()\n            return\n\n        self._available = True\n        if state:\n            _LOGGER.debug(\"ThinQ status updated\")\n            # l = dir(state)\n            # _LOGGER.debug('Status attributes: %s', l)\n            self._disc_count = 0\n            self._state = state\n\n\nasync def lge_devices_setup(\n    hass: HomeAssistant, client: ClientAsync\n) -> tuple[dict[DeviceType, list[LGEDevice]], dict[DeviceType, list[LGDeviceInfo]]]:\n    \"\"\"Query connected devices from LG ThinQ.\"\"\"\n    _LOGGER.info(\"Starting LGE ThinQ devices...\")\n\n    wrapped_devices: dict[DeviceType, list[LGEDevice]] = {}\n    unsupported_devices: dict[DeviceType, list[LGDeviceInfo]] = {}\n    device_count = 0\n    temp_unit = UNIT_TEMP_CELSIUS\n    if hass.config.units.temperature_unit != TEMP_CELSIUS:\n        temp_unit = UNIT_TEMP_FAHRENHEIT\n\n    for device in client.devices:\n        device_id = device.id\n        device_name = device.name\n        device_type = device.type\n        network_type = device.network_type\n        model_name = device.model_name\n        device_count += 1\n\n        lge_dev = get_lge_device(client, device, temp_unit)\n        if not lge_dev:\n            _LOGGER.info(\n                \"Found unsupported LGE Device. Name: %s - Type: %s - NetworkType: %s - InfoUrl: %s\",\n                device_name,\n                device_type.name,\n                network_type.name,\n                device.model_info_url,\n            )\n            unsupported_devices.setdefault(device_type, []).append(device)\n            continue\n\n        dev = LGEDevice(lge_dev, hass)\n        if not await dev.init_device():\n            _LOGGER.error(\n                \"Error initializing LGE Device. Name: %s - Type: %s - InfoUrl: %s\",\n                device_name,\n                device_type.name,\n                device.model_info_url,\n            )\n            continue\n\n        wrapped_devices.setdefault(device_type, []).append(dev)\n        _LOGGER.info(\n            \"LGE Device added. Name: %s - Type: %s - Model: %s - ID: %s\",\n            device_name,\n            device_type.name,\n            model_name,\n            device_id,\n        )\n\n    _LOGGER.info(\"Founds %s LGE device(s)\", str(device_count))\n    return wrapped_devices, unsupported_devices\n\n\n@callback\ndef cleanup_orphan_lge_devices(\n    hass: HomeAssistant, entry_id: str, client: ClientAsync\n) -> None:\n    \"\"\"Delete devices that are not registered in LG client app\"\"\"\n\n    # Load lg devices from registry\n    device_registry = dr.async_get(hass)\n    all_lg_dev_entries = dr.async_entries_for_config_entry(\n        device_registry, entry_id\n    )\n\n    # get list of valid devices\n    valid_lg_dev_ids = []\n    for device in client.devices:\n        dev = device_registry.async_get_device({(DOMAIN, device.id)})\n        if dev is not None:\n            valid_lg_dev_ids.append(dev.id)\n\n    # clean-up invalid devices\n    for dev_entry in all_lg_dev_entries:\n        dev_id = dev_entry.id\n        if dev_id in valid_lg_dev_ids:\n            continue\n        device_registry.async_remove_device(dev_id)\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/binary_sensor.py",
    "content": "\"\"\"Support for ThinQ device bynary sensors.\"\"\"\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass\nimport logging\nfrom typing import Any, Callable, Tuple\n\nfrom .wideq import (\n    FEAT_AUTODOOR,\n    FEAT_CHILDLOCK,\n    FEAT_DOORCLOSE,\n    FEAT_DOORLOCK,\n    FEAT_DOOROPEN,\n    FEAT_DUALZONE,\n    FEAT_EXTRADRY,\n    FEAT_HIGHTEMP,\n    FEAT_NIGHTDRY,\n    FEAT_STANDBY,\n    FEAT_REMOTESTART,\n    FEAT_RINSEREFILL,\n    FEAT_SALTREFILL,\n    FEAT_WATER_TANK_FULL,\n    DeviceType,\n)\n\nfrom homeassistant.components.binary_sensor import (\n    BinarySensorDeviceClass,\n    BinarySensorEntity,\n    BinarySensorEntityDescription,\n)\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.const import STATE_OFF, STATE_ON\nfrom homeassistant.core import HomeAssistant\nfrom homeassistant.helpers.entity_platform import AddEntitiesCallback\nfrom homeassistant.helpers.update_coordinator import CoordinatorEntity\n\nfrom . import LGEDevice\nfrom .const import DEFAULT_ICON, DOMAIN, LGE_DEVICES\nfrom .device_helpers import (\n    DEVICE_ICONS,\n    STATE_LOOKUP,\n    WASH_DEVICE_TYPES,\n    LGERangeDevice,\n    LGERefrigeratorDevice,\n    LGEWashDevice,\n    get_entity_name,\n    get_multiple_devices_types,\n)\nfrom .sensor import (\n    ATTR_DOOR_OPEN,\n    ATTR_ERROR_STATE,\n    ATTR_RUN_COMPLETED,\n)\n\n# range sensor attributes\nATTR_COOKTOP_STATE = \"cooktop_state\"\nATTR_OVEN_STATE = \"oven_state\"\n\n_LOGGER = logging.getLogger(__name__)\n\nRUN_COMPLETED_PREFIX = {\n    DeviceType.WASHER: \"Wash\",\n    DeviceType.DRYER: \"Dry\",\n    DeviceType.STYLER: \"Style\",\n    DeviceType.DISHWASHER: \"Wash\",\n}\n\n\n@dataclass\nclass ThinQBinarySensorEntityDescription(BinarySensorEntityDescription):\n    \"\"\"A class that describes ThinQ binary sensor entities.\"\"\"\n\n    icon_on: str | None = None\n    value_fn: Callable[[Any], bool | str] | None = None\n\n\nWASH_DEV_BINARY_SENSORS: Tuple[ThinQBinarySensorEntityDescription, ...] = (\n    ThinQBinarySensorEntityDescription(\n        key=ATTR_RUN_COMPLETED,\n        name=\"<Run> completed\",\n        value_fn=lambda x: x.run_completed,\n    ),\n    ThinQBinarySensorEntityDescription(\n        key=ATTR_ERROR_STATE,\n        name=\"Error state\",\n        device_class=BinarySensorDeviceClass.PROBLEM,\n        value_fn=lambda x: x.error_state,\n    ),\n    ThinQBinarySensorEntityDescription(\n        key=FEAT_STANDBY,\n        name=\"Standby\",\n        entity_registry_enabled_default=False,\n    ),\n    ThinQBinarySensorEntityDescription(\n        key=FEAT_CHILDLOCK,\n        name=\"Child lock\",\n        icon=\"mdi:account-off-outline\",\n        icon_on=\"mdi:account-lock\",\n        entity_registry_enabled_default=False,\n    ),\n    ThinQBinarySensorEntityDescription(\n        key=FEAT_DOORCLOSE,\n        name=\"Door close\",\n        icon=\"mdi:alpha-o-box-outline\",\n        icon_on=\"mdi:alpha-c-box\",\n        entity_registry_enabled_default=False,\n    ),\n    ThinQBinarySensorEntityDescription(\n        key=FEAT_DOORLOCK,\n        name=\"Door lock\",\n        icon=\"mdi:lock-open-variant-outline\",\n        icon_on=\"mdi:lock\",\n        entity_registry_enabled_default=False,\n    ),\n    ThinQBinarySensorEntityDescription(\n        key=FEAT_DOOROPEN,\n        name=\"Door open\",\n        device_class=BinarySensorDeviceClass.OPENING,\n        entity_registry_enabled_default=False,\n    ),\n    ThinQBinarySensorEntityDescription(\n        key=FEAT_AUTODOOR,\n        name=\"Auto door\",\n        icon=\"mdi:auto-upload\",\n        entity_registry_enabled_default=False,\n    ),\n    ThinQBinarySensorEntityDescription(\n        key=FEAT_REMOTESTART,\n        name=\"Remote start\",\n        entity_registry_enabled_default=False,\n    ),\n    ThinQBinarySensorEntityDescription(\n        key=FEAT_DUALZONE,\n        name=\"Dual zone\",\n        entity_registry_enabled_default=False,\n    ),\n    ThinQBinarySensorEntityDescription(\n        key=FEAT_RINSEREFILL,\n        name=\"Rinse refill\",\n        entity_registry_enabled_default=False,\n    ),\n    ThinQBinarySensorEntityDescription(\n        key=FEAT_SALTREFILL,\n        name=\"Salt refill\",\n        entity_registry_enabled_default=False,\n    ),\n    ThinQBinarySensorEntityDescription(\n        key=FEAT_HIGHTEMP,\n        name=\"High temp\",\n        device_class=BinarySensorDeviceClass.HEAT,\n        entity_registry_enabled_default=False,\n    ),\n    ThinQBinarySensorEntityDescription(\n        key=FEAT_EXTRADRY,\n        name=\"Extra dry\",\n        entity_registry_enabled_default=False,\n    ),\n    ThinQBinarySensorEntityDescription(\n        key=FEAT_NIGHTDRY,\n        name=\"Night dry\",\n        entity_registry_enabled_default=False,\n    ),\n)\nREFRIGERATOR_BINARY_SENSORS: Tuple[ThinQBinarySensorEntityDescription, ...] = (\n    ThinQBinarySensorEntityDescription(\n        key=ATTR_DOOR_OPEN,\n        name=\"Door open\",\n        device_class=BinarySensorDeviceClass.DOOR,\n        value_fn=lambda x: x.dooropen_state,\n    ),\n)\nRANGE_BINARY_SENSORS: Tuple[ThinQBinarySensorEntityDescription, ...] = (\n    ThinQBinarySensorEntityDescription(\n        key=ATTR_COOKTOP_STATE,\n        name=\"Cooktop state\",\n        device_class=BinarySensorDeviceClass.HEAT,\n        value_fn=lambda x: x.cooktop_state,\n    ),\n    ThinQBinarySensorEntityDescription(\n        key=ATTR_OVEN_STATE,\n        name=\"Oven state\",\n        device_class=BinarySensorDeviceClass.HEAT,\n        value_fn=lambda x: x.oven_state,\n    ),\n)\nDEHUMIDIFIER_BINARY_SENSORS: Tuple[ThinQBinarySensorEntityDescription, ...] = (\n    ThinQBinarySensorEntityDescription(\n        key=FEAT_WATER_TANK_FULL,\n        name=\"Water Tank Full\",\n    ),\n)\n\n\ndef _binary_sensor_exist(lge_device: LGEDevice, sensor_desc: ThinQBinarySensorEntityDescription) -> bool:\n    \"\"\"Check if a sensor exist for device.\"\"\"\n    if sensor_desc.value_fn is not None:\n        return True\n\n    feature = sensor_desc.key\n    if feature in lge_device.available_features:\n        return True\n\n    return False\n\n\nasync def async_setup_entry(\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback\n) -> None:\n    \"\"\"Set up the LGE binary sensors.\"\"\"\n    entry_config = hass.data[DOMAIN]\n    lge_devices = entry_config.get(LGE_DEVICES)\n    if not lge_devices:\n        return\n\n    _LOGGER.debug(\"Starting LGE ThinQ binary sensors setup...\")\n    lge_sensors = []\n\n    # add WASH devices\n    lge_sensors.extend(\n        [\n            LGEBinarySensor(lge_device, sensor_desc, LGEWashDevice(lge_device))\n            for sensor_desc in WASH_DEV_BINARY_SENSORS\n            for lge_device in get_multiple_devices_types(lge_devices, WASH_DEVICE_TYPES)\n            if _binary_sensor_exist(lge_device, sensor_desc)\n        ]\n    )\n\n    # add refrigerators\n    lge_sensors.extend(\n        [\n            LGEBinarySensor(lge_device, sensor_desc, LGERefrigeratorDevice(lge_device))\n            for sensor_desc in REFRIGERATOR_BINARY_SENSORS\n            for lge_device in lge_devices.get(DeviceType.REFRIGERATOR, [])\n            if _binary_sensor_exist(lge_device, sensor_desc)\n        ]\n    )\n\n    # add ranges\n    lge_sensors.extend(\n        [\n            LGEBinarySensor(lge_device, sensor_desc, LGERangeDevice(lge_device))\n            for sensor_desc in RANGE_BINARY_SENSORS\n            for lge_device in lge_devices.get(DeviceType.RANGE, [])\n            if _binary_sensor_exist(lge_device, sensor_desc)\n        ]\n    )\n\n    # add dehumidifier\n    lge_sensors.extend(\n        [\n            LGEBinarySensor(lge_device, sensor_desc)\n            for sensor_desc in DEHUMIDIFIER_BINARY_SENSORS\n            for lge_device in lge_devices.get(DeviceType.DEHUMIDIFIER, [])\n            if _binary_sensor_exist(lge_device, sensor_desc)\n        ]\n    )\n\n    async_add_entities(lge_sensors)\n\n\ndef get_binary_sensor_name(device, ent_key, ent_name) -> str:\n    \"\"\"Get the name for the binary sensor\"\"\"\n    name = get_entity_name(device, ent_key, ent_name)\n    if ent_key == ATTR_RUN_COMPLETED:\n        name = name.replace(\n            \"<Run>\", RUN_COMPLETED_PREFIX.get(device.type, \"Run\")\n        )\n\n    return name\n\n\nclass LGEBinarySensor(CoordinatorEntity, BinarySensorEntity):\n    \"\"\"Class to monitor binary sensors for LGE device\"\"\"\n\n    entity_description = ThinQBinarySensorEntityDescription\n\n    def __init__(\n            self,\n            api: LGEDevice,\n            description: ThinQBinarySensorEntityDescription,\n            wrapped_device=None,\n    ):\n        \"\"\"Initialize the binary sensor.\"\"\"\n        super().__init__(api.coordinator)\n        self._api = api\n        self._wrap_device = wrapped_device\n        self.entity_description = description\n        self._attr_name = get_binary_sensor_name(api, description.key, description.name)\n        self._attr_unique_id = f\"{api.unique_id}-{description.key}\"\n        self._attr_device_info = api.device_info\n\n        self._is_on = None\n\n    @property\n    def is_on(self):\n        \"\"\"Return true if the binary sensor is on.\"\"\"\n        self._is_on = self._get_on_state()\n        return self._is_on\n\n    @property\n    def icon(self):\n        \"\"\"Return the icon to use in the frontend, if any.\"\"\"\n        if self.entity_description.icon_on and self._is_on:\n            return self.entity_description.icon_on\n        ent_icon = self.entity_description.icon\n        if ent_icon and ent_icon == DEFAULT_ICON:\n            return DEVICE_ICONS.get(self._api.type)\n        return super().icon\n\n    @property\n    def available(self) -> bool:\n        \"\"\"Return True if entity is available.\"\"\"\n        return self._api.available\n\n    @property\n    def assumed_state(self) -> bool:\n        \"\"\"Return True if unable to access real state of the entity.\"\"\"\n        return self._api.assumed_state\n\n    def _get_on_state(self):\n        \"\"\"Return true if the binary sensor is on.\"\"\"\n        ret_val = self._get_sensor_state()\n        if ret_val is None:\n            return False\n        if isinstance(ret_val, bool):\n            return ret_val\n        ret_val = ret_val.lower()\n        if ret_val == STATE_ON:\n            return True\n        state = STATE_LOOKUP.get(ret_val, STATE_OFF)\n        return state == STATE_ON\n\n    def _get_sensor_state(self):\n        if self._wrap_device and self.entity_description.value_fn is not None:\n            return self.entity_description.value_fn(self._wrap_device)\n\n        if self._api.state:\n            feature = self.entity_description.key\n            return self._api.state.device_features.get(feature)\n\n        return None\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/climate.py",
    "content": "\"\"\"Platform for LGE climate integration.\"\"\"\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass\nfrom datetime import timedelta\nimport logging\nfrom typing import Any, Awaitable, Callable, List, Tuple\n\nfrom .wideq import (\n    FEAT_HUMIDITY,\n    FEAT_OUT_WATER_TEMP,\n    UNIT_TEMP_FAHRENHEIT,\n    DeviceType,\n)\nfrom .wideq.ac import AirConditionerDevice, ACMode\n\nfrom homeassistant.components.climate import ClimateEntity, ClimateEntityDescription\nfrom homeassistant.components.climate.const import (\n    ATTR_HVAC_MODE,\n    DEFAULT_MAX_TEMP,\n    DEFAULT_MIN_TEMP,\n    ClimateEntityFeature,\n    HVACMode,\n)\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS, TEMP_FAHRENHEIT\nfrom homeassistant.core import HomeAssistant\nfrom homeassistant.helpers.entity_platform import AddEntitiesCallback\nfrom homeassistant.helpers.update_coordinator import CoordinatorEntity\n\nfrom . import LGEDevice\nfrom .const import DOMAIN, LGE_DEVICES\nfrom .device_helpers import (\n    TEMP_UNIT_LOOKUP,\n    LGERefrigeratorDevice,\n    get_entity_name,\n)\n\n# general ac attributes\nATTR_FRIDGE = \"fridge\"\nATTR_FREEZER = \"freezer\"\n\nHVAC_MODE_LOOKUP: dict[str, HVACMode] = {\n    ACMode.ENERGY_SAVER.name: HVACMode.AUTO,\n    ACMode.AI.name: HVACMode.AUTO,\n    ACMode.HEAT.name: HVACMode.HEAT,\n    ACMode.DRY.name: HVACMode.DRY,\n    ACMode.COOL.name: HVACMode.COOL,\n    ACMode.FAN.name: HVACMode.FAN_ONLY,\n    ACMode.ACO.name: HVACMode.HEAT_COOL,\n}\n\nATTR_SWING_HORIZONTAL = \"swing_mode_horizontal\"\nATTR_SWING_VERTICAL = \"swing_mode_vertical\"\nSWING_PREFIX = [\"Vertical\", \"Horizontal\"]\n\nSCAN_INTERVAL = timedelta(seconds=120)\n\n_LOGGER = logging.getLogger(__name__)\n\n\n@dataclass\nclass ThinQRefClimateRequiredKeysMixin:\n    \"\"\"Mixin for required keys.\"\"\"\n    range_temp_fn: Callable[[Any], List[float]]\n    set_temp_fn: Callable[[Any, float], Awaitable[None]]\n    temp_fn: Callable[[Any], float | str]\n\n\n@dataclass\nclass ThinQRefClimateEntityDescription(\n    ClimateEntityDescription, ThinQRefClimateRequiredKeysMixin\n):\n    \"\"\"A class that describes ThinQ climate entities.\"\"\"\n\n\nREFRIGERATOR_CLIMATE: Tuple[ThinQRefClimateEntityDescription, ...] = (\n    ThinQRefClimateEntityDescription(\n        key=ATTR_FRIDGE,\n        name=\"Fridge\",\n        icon=\"mdi:fridge-top\",\n        range_temp_fn=lambda x: x.device.fridge_target_temp_range,\n        set_temp_fn=lambda x, y: x.device.set_fridge_target_temp(y),\n        temp_fn=lambda x: x.temp_fridge,\n    ),\n    ThinQRefClimateEntityDescription(\n        key=ATTR_FREEZER,\n        name=\"Freezer\",\n        icon=\"mdi:fridge-bottom\",\n        range_temp_fn=lambda x: x.device.freezer_target_temp_range,\n        set_temp_fn=lambda x, y: x.device.set_freezer_target_temp(y),\n        temp_fn=lambda x: x.temp_freezer,\n    ),\n)\n\n\ndef remove_prefix(text: str, prefix: str) -> str:\n    \"\"\"Remove a prefix from a string.\"\"\"\n    if text.startswith(prefix):\n        return text[len(prefix):]\n    return text\n\n\nasync def async_setup_entry(\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback\n) -> None:\n    \"\"\"Set up LGE device climate based on config_entry.\"\"\"\n    entry_config = hass.data[DOMAIN]\n    lge_devices = entry_config.get(LGE_DEVICES)\n    if not lge_devices:\n        return\n\n    _LOGGER.debug(\"Starting LGE ThinQ climate setup...\")\n    lge_climates = []\n\n    # AC devices\n    lge_climates.extend(\n        [\n            LGEACClimate(lge_device)\n            for lge_device in lge_devices.get(DeviceType.AC, [])\n        ]\n    )\n\n    # Refrigerator devices\n    lge_climates.extend(\n        [\n            LGERefrigeratorClimate(lge_device, refrigerator_desc)\n            for refrigerator_desc in REFRIGERATOR_CLIMATE\n            for lge_device in lge_devices.get(DeviceType.REFRIGERATOR, [])\n        ]\n    )\n\n    async_add_entities(lge_climates)\n\n\nclass LGEClimate(CoordinatorEntity, ClimateEntity):\n    \"\"\"Base climate device.\"\"\"\n\n    def __init__(self, api: LGEDevice):\n        \"\"\"Initialize the climate.\"\"\"\n        super().__init__(api.coordinator)\n        self._api = api\n        self._attr_device_info = api.device_info\n\n    @property\n    def should_poll(self) -> bool:\n        \"\"\"Return True if entity has to be polled for state.\n\n        We overwrite coordinator property default setting because we need\n        to poll to avoid the effect that after changing a climate settings\n        it is immediately set to prev state. The async_update method here\n        do nothing because the real update is performed by coordinator.\n        \"\"\"\n        return True\n\n    async def async_update(self) -> None:\n        \"\"\"Update the entity.\n\n        This is a fake update, real update is done by coordinator.\n        \"\"\"\n        return\n\n    @property\n    def available(self) -> bool:\n        \"\"\"Return True if entity is available.\"\"\"\n        return self._api.available\n\n\nclass LGEACClimate(LGEClimate):\n    \"\"\"Air-to-Air climate device.\"\"\"\n\n    def __init__(self, api: LGEDevice) -> None:\n        \"\"\"Initialize the climate.\"\"\"\n        super().__init__(api)\n        self._device: AirConditionerDevice = api.device\n        self._attr_name = api.name\n        self._attr_unique_id = f\"{api.unique_id}-AC\"\n        self._attr_fan_modes = self._device.fan_speeds\n        self._attr_swing_modes = [\n            f\"{SWING_PREFIX[0]}{mode}\" for mode in self._device.vertical_step_modes\n        ] + [\n            f\"{SWING_PREFIX[1]}{mode}\" for mode in self._device.horizontal_step_modes\n        ]\n\n        self._hvac_mode_lookup: dict[str, HVACMode] | None = None\n        self._support_ver_swing = len(self._device.vertical_step_modes) > 0\n        self._support_hor_swing = len(self._device.horizontal_step_modes) > 0\n        self._set_hor_swing = self._support_hor_swing and not self._support_ver_swing\n\n    def _available_hvac_modes(self) -> dict[str, HVACMode]:\n        \"\"\"Return available hvac modes from lookup dict.\"\"\"\n        if self._hvac_mode_lookup is None:\n            modes = {}\n            for key, mode in HVAC_MODE_LOOKUP.items():\n                if key in self._device.op_modes:\n                    # invert key and mode to avoid duplicated HVAC modes\n                    modes[mode] = key\n            self._hvac_mode_lookup = {v: k for k, v in modes.items()}\n        return self._hvac_mode_lookup\n\n    def _get_swing_mode(self, hor_mode=False) -> str | None:\n        \"\"\"Return the current swing mode for vert of hor mode.\"\"\"\n        if hor_mode:\n            mode = self._api.state.horizontal_step_mode\n        else:\n            mode = self._api.state.vertical_step_mode\n        if mode:\n            return f\"{SWING_PREFIX[1 if hor_mode else 0]}{mode}\"\n        return None\n\n    @property\n    def supported_features(self) -> int:\n        \"\"\"Return the list of supported features.\"\"\"\n        features = ClimateEntityFeature.TARGET_TEMPERATURE\n        if len(self.fan_modes) > 0:\n            features |= ClimateEntityFeature.FAN_MODE\n        if self._support_ver_swing or self._support_hor_swing:\n            features |= ClimateEntityFeature.SWING_MODE\n        return features\n\n    @property\n    def extra_state_attributes(self):\n        \"\"\"Return the optional state attributes with device specific additions.\"\"\"\n        attr = {}\n        if self._support_hor_swing:\n            attr[ATTR_SWING_HORIZONTAL] = self._get_swing_mode(True)\n        if self._support_ver_swing:\n            attr[ATTR_SWING_VERTICAL] = self._get_swing_mode(False)\n\n        return attr\n\n    @property\n    def target_temperature_step(self) -> float:\n        \"\"\"Return the supported step of target temperature.\"\"\"\n        return self._device.target_temperature_step\n\n    @property\n    def temperature_unit(self) -> str:\n        \"\"\"Return the unit of measurement used by the platform.\"\"\"\n        if self._device.temperature_unit == UNIT_TEMP_FAHRENHEIT:\n            return TEMP_FAHRENHEIT\n        return TEMP_CELSIUS\n\n    @property\n    def hvac_mode(self) -> HVACMode:\n        \"\"\"Return hvac operation ie. heat, cool mode.\"\"\"\n        op_mode: str | None = self._api.state.operation_mode\n        if not self._api.state.is_on or op_mode is None:\n            return HVACMode.OFF\n        modes = self._available_hvac_modes()\n        return modes.get(op_mode, HVACMode.AUTO)\n\n    async def async_set_hvac_mode(self, hvac_mode: HVACMode) -> None:\n        \"\"\"Set new target hvac mode.\"\"\"\n        if hvac_mode == HVACMode.OFF:\n            await self._device.power(False)\n            return\n\n        modes = self._available_hvac_modes()\n        reverse_lookup = {v: k for k, v in modes.items()}\n        operation_mode = reverse_lookup.get(hvac_mode)\n        if operation_mode is None:\n            raise ValueError(f\"Invalid hvac_mode [{hvac_mode}]\")\n\n        if self.hvac_mode == HVACMode.OFF:\n            await self._device.power(True)\n        await self._device.set_op_mode(operation_mode)\n\n    @property\n    def hvac_modes(self) -> list[HVACMode]:\n        \"\"\"Return the list of available hvac operation modes.\"\"\"\n        modes = self._available_hvac_modes()\n        return [HVACMode.OFF] + list(modes.values())\n\n    @property\n    def current_temperature(self) -> float:\n        \"\"\"Return the current temperature.\"\"\"\n        curr_temp = None\n        if self._device.is_air_to_water:\n            curr_temp = self._api.state.device_features.get(FEAT_OUT_WATER_TEMP)\n        if curr_temp is None:\n            curr_temp = self._api.state.current_temp\n        return curr_temp\n\n    @property\n    def current_humidity(self) -> int | None:\n        return self._api.state.device_features.get(FEAT_HUMIDITY)\n\n    @property\n    def target_temperature(self) -> float:\n        \"\"\"Return the temperature we try to reach.\"\"\"\n        return self._api.state.target_temp\n\n    async def async_set_temperature(self, **kwargs) -> None:\n        \"\"\"Set new target temperature.\"\"\"\n        if hvac_mode := kwargs.get(ATTR_HVAC_MODE):\n            await self.async_set_hvac_mode(HVACMode(hvac_mode))\n\n        if new_temp := kwargs.get(ATTR_TEMPERATURE):\n            await self._device.set_target_temp(new_temp)\n\n    @property\n    def fan_mode(self) -> str | None:\n        \"\"\"Return the fan setting.\"\"\"\n        return self._api.state.fan_speed\n\n    async def async_set_fan_mode(self, fan_mode: str) -> None:\n        \"\"\"Set new target fan mode.\"\"\"\n        if fan_mode not in self.fan_modes:\n            raise ValueError(f\"Invalid fan mode [{fan_mode}]\")\n        await self._device.set_fan_speed(fan_mode)\n\n    @property\n    def swing_mode(self) -> str | None:\n        \"\"\"Return the swing mode setting.\"\"\"\n        if self._set_hor_swing and self._support_hor_swing:\n            return self._get_swing_mode(True)\n        return self._get_swing_mode(False)\n\n    async def async_set_swing_mode(self, swing_mode: str) -> None:\n        \"\"\"Set new target swing mode.\"\"\"\n        avl_mode = False\n        curr_mode = None\n        set_hor_swing = swing_mode.startswith(SWING_PREFIX[1])\n        dev_mode = remove_prefix(\n            swing_mode, SWING_PREFIX[1 if set_hor_swing else 0]\n        )\n        if set_hor_swing:\n            if dev_mode in self._device.horizontal_step_modes:\n                avl_mode = True\n                curr_mode = self._api.state.horizontal_step_mode\n        elif swing_mode.startswith(SWING_PREFIX[0]):\n            if dev_mode in self._device.vertical_step_modes:\n                avl_mode = True\n                curr_mode = self._api.state.vertical_step_mode\n\n        if not avl_mode:\n            raise ValueError(f\"Invalid swing_mode [{swing_mode}].\")\n\n        if curr_mode != dev_mode:\n            if set_hor_swing:\n                await self._device.set_horizontal_step_mode(dev_mode)\n            else:\n                await self._device.set_vertical_step_mode(dev_mode)\n        self._set_hor_swing = set_hor_swing\n\n    async def async_turn_on(self) -> None:\n        \"\"\"Turn the entity on.\"\"\"\n        await self._device.power(True)\n\n    async def async_turn_off(self) -> None:\n        \"\"\"Turn the entity off.\"\"\"\n        await self._device.power(False)\n\n    @property\n    def min_temp(self) -> float:\n        \"\"\"Return the minimum temperature.\"\"\"\n        if (min_value := self._device.target_temperature_min) is not None:\n            return min_value\n        return self._device.conv_temp_unit(DEFAULT_MIN_TEMP)\n\n    @property\n    def max_temp(self) -> float:\n        \"\"\"Return the maximum temperature.\"\"\"\n        if (max_value := self._device.target_temperature_max) is not None:\n            return max_value\n        return self._device.conv_temp_unit(DEFAULT_MAX_TEMP)\n\n\nclass LGERefrigeratorClimate(LGEClimate):\n    \"\"\"Refrigerator climate device.\"\"\"\n\n    entity_description = ThinQRefClimateEntityDescription\n\n    def __init__(\n            self,\n            api: LGEDevice,\n            description: ThinQRefClimateEntityDescription,\n    ) -> None:\n        \"\"\"Initialize the climate.\"\"\"\n        super().__init__(api)\n        self._wrap_device = LGERefrigeratorDevice(api)\n        self.entity_description = description\n        self._attr_name = get_entity_name(api, description.key, description.name)\n        self._attr_unique_id = f\"{api.unique_id}-{description.key}-AC\"\n        self._attr_hvac_modes = [HVACMode.AUTO]\n        self._attr_hvac_mode = HVACMode.AUTO\n\n    @property\n    def supported_features(self) -> int:\n        \"\"\"Return the list of supported features.\"\"\"\n        if not self._wrap_device.device.set_values_allowed:\n            return 0\n        return ClimateEntityFeature.TARGET_TEMPERATURE\n\n    @property\n    def target_temperature_step(self) -> float:\n        \"\"\"Return the supported step of target temperature.\"\"\"\n        return self._wrap_device.device.target_temperature_step\n\n    @property\n    def temperature_unit(self) -> str:\n        \"\"\"Return the unit of measurement used by the platform.\"\"\"\n        if self._api.state:\n            unit = self._api.state.temp_unit\n            return TEMP_UNIT_LOOKUP.get(unit, TEMP_CELSIUS)\n        return TEMP_CELSIUS\n\n    @property\n    def current_temperature(self) -> float | None:\n        \"\"\"Return the current temperature.\"\"\"\n        curr_temp = self.entity_description.temp_fn(self._wrap_device)\n        if curr_temp is None:\n            return None\n        try:\n            return int(curr_temp)\n        except ValueError:\n            return None\n\n    @property\n    def target_temperature(self) -> float | None:\n        \"\"\"Return the temperature we try to reach.\"\"\"\n        return self.current_temperature\n\n    async def async_set_temperature(self, **kwargs) -> None:\n        \"\"\"Set new target temperature.\"\"\"\n        if new_temp := kwargs.get(ATTR_TEMPERATURE):\n            await self.entity_description.set_temp_fn(self._wrap_device, new_temp)\n\n    @property\n    def min_temp(self) -> float:\n        \"\"\"Return the minimum temperature.\"\"\"\n        return self.entity_description.range_temp_fn(self._wrap_device)[0]\n\n    @property\n    def max_temp(self) -> float:\n        return self.entity_description.range_temp_fn(self._wrap_device)[1]\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/config_flow.py",
    "content": "\"\"\"Config flow for LG SmartThinQ.\"\"\"\nfrom __future__ import annotations\n\nimport logging\nfrom pycountry import countries as py_countries, languages as py_languages\nimport re\nfrom typing import Any\n\nimport voluptuous as vol\n\nfrom .wideq.core_async import ClientAsync\n\nfrom homeassistant import config_entries\nfrom homeassistant.core import callback\nfrom homeassistant.const import (\n    CONF_BASE,\n    CONF_PASSWORD,\n    CONF_REGION,\n    CONF_TOKEN,\n    CONF_USERNAME,\n    __version__,\n)\nfrom homeassistant.data_entry_flow import FlowResult\n\nfrom .const import (\n    DOMAIN,\n    CONF_LANGUAGE,\n    CONF_OAUTH_URL,\n    CONF_USE_API_V2,\n    __min_ha_version__,\n)\nfrom . import LGEAuthentication, is_valid_ha_version\n\nCONF_LOGIN = \"login_url\"\nCONF_URL = \"callback_url\"\nCONF_USE_REDIRECT = \"use_redirect\"\n\nRESULT_SUCCESS = 0\nRESULT_FAIL = 1\nRESULT_NO_DEV = 2\n\n_LOGGER = logging.getLogger(__name__)\n\nCOUNTRIES = {\n    country.alpha_2: f\"{country.name} - {country.alpha_2}\"\n    for country in sorted(py_countries, key=lambda x: x.name)\n}\n\nLANGUAGES = {\n    language.alpha_2: f\"{language.name} - {language.alpha_2}\"\n    for language in sorted(py_languages, key=lambda x: x.name)\n    if hasattr(language, \"alpha_2\")\n}\n\n\nclass SmartThinQFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):\n    \"\"\"Handle SmartThinQ config flow.\"\"\"\n\n    VERSION = 1\n    CONNECTION_CLASS = config_entries.CONN_CLASS_CLOUD_POLL\n\n    def __init__(self) -> None:\n        \"\"\"Initialize flow.\"\"\"\n        self._region: str | None = None\n        self._language: str | None = None\n        self._token: str | None = None\n        self._oauth_url: str | None = None\n\n        self._user_lang: str | None = None\n        self._login_url: str | None = None\n        self._error: str | None = None\n        self._is_import = False\n\n    @staticmethod\n    def _validate_region_language(region: str, language: str) -> str | None:\n        \"\"\"Validate format of region and language.\"\"\"\n        region_regex = re.compile(r\"^[A-Z]{2,3}$\")\n        if not region_regex.match(region):\n            return \"invalid_region\"\n\n        if len(language) == 2:\n            language_regex = re.compile(r\"^[a-z]{2,3}$\")\n        else:\n            language_regex = re.compile(r\"^[a-z]{2,3}-[A-Z]{2,3}$\")\n        if not language_regex.match(language):\n            return \"invalid_language\"\n\n        return None\n\n    async def async_step_import(\n        self, import_config: dict[str, Any] | None = None\n    ) -> FlowResult:\n        \"\"\"Import a config entry.\"\"\"\n        self._is_import = True\n        self._region = import_config.get(CONF_REGION)\n        language: str | None = import_config.get(CONF_LANGUAGE)\n        if language:\n            self._user_lang = language[0:2]\n        return await self.async_step_user()\n\n    async def async_step_user(\n        self, user_input: dict[str, Any] | None = None\n    ) -> FlowResult:\n        \"\"\"Handle a flow initialized by the user interface\"\"\"\n\n        if not is_valid_ha_version():\n            return self.async_abort(\n                reason=\"unsupported_version\",\n                description_placeholders={\n                    \"req_ver\": __min_ha_version__, \"run_ver\": __version__\n                },\n            )\n\n        if self._is_import:\n            self._error = \"invalid_config\"\n        elif self._async_current_entries():\n            return self.async_abort(reason=\"single_instance_allowed\")\n\n        if not user_input:\n            return self._show_form()\n\n        username = user_input.get(CONF_USERNAME)\n        password = user_input.get(CONF_PASSWORD)\n        region = user_input[CONF_REGION]\n        language = user_input[CONF_LANGUAGE]\n        use_redirect = user_input[CONF_USE_REDIRECT]\n\n        if error := self._validate_region_language(region, language):\n            return self._show_form(errors=error)\n        self._region = region\n        self._user_lang = language\n        self._language = language\n        if len(language) == 2:\n            self._language += f\"-{region}\"\n\n        if not use_redirect and not (username and password):\n            return self._show_form(errors=\"no_user_info\")\n\n        if not use_redirect:\n            client, result = await self._check_connection(username, password)\n            if result != RESULT_SUCCESS:\n                return await self._manage_error(result, True)\n            auth_info = client.oauth_info\n            self._token = auth_info[\"refresh_token\"]\n            self._oauth_url = auth_info[\"oauth_url\"]\n            return self._save_config_entry()\n\n        lge_auth = LGEAuthentication(self._region, self._language)\n        self._login_url = await lge_auth.get_login_url(self.hass)\n        if not self._login_url:\n            return self._show_form(\"error_url\")\n\n        return await self.async_step_url()\n\n    async def async_step_url(\n        self, user_input: dict[str, Any] | None = None\n    ) -> FlowResult:\n        \"\"\"Parse the response url for oauth data and submit for save.\"\"\"\n        if not user_input:\n            return self._show_form(step_id=\"url\")\n\n        url = user_input[CONF_URL]\n        lge_auth = LGEAuthentication(self._region, self._language)\n        oauth_info = await lge_auth.get_auth_info_from_url(self.hass, url)\n        if not oauth_info:\n            return self._show_form(errors=\"invalid_url\", step_id=\"url\")\n\n        self._token = oauth_info[\"refresh_token\"]\n        self._oauth_url = oauth_info[\"oauth_url\"]\n\n        _, result = await self._check_connection()\n        if result != RESULT_SUCCESS:\n            return await self._manage_error(result)\n        return self._save_config_entry()\n\n    async def _check_connection(\n        self, username: str | None = None, password: str | None = None\n    ) -> tuple[ClientAsync | None, int]:\n        \"\"\"Test the connection to ThinQ.\"\"\"\n\n        lge_auth = LGEAuthentication(self._region, self._language)\n        try:\n            if username and password:\n                client = await lge_auth.create_client_from_login(\n                    self.hass, username, password\n                )\n            else:\n                client = await lge_auth.create_client_from_token(\n                    self.hass, self._token, self._oauth_url\n                )\n        except Exception as exc:\n            _LOGGER.exception(\"Error connecting to ThinQ\", exc_info=exc)\n            return None, RESULT_FAIL\n\n        if not client:\n            return None, RESULT_NO_DEV\n\n        if not client.has_devices:\n            return None, RESULT_NO_DEV\n\n        return client, RESULT_SUCCESS\n\n    async def _manage_error(self, error_code: int, is_user_step=False) -> FlowResult:\n        \"\"\"Manage the error result.\"\"\"\n        if error_code == RESULT_NO_DEV:\n            return self.async_abort(reason=\"no_smartthinq_devices\")\n\n        self._error = \"unknown\"\n        if error_code == RESULT_FAIL:\n            self._error = \"invalid_credentials\"\n\n        if is_user_step:\n            return self._show_form()\n        return await self.async_step_user()\n\n    @callback\n    def _save_config_entry(self) -> FlowResult:\n        \"\"\"Save the entry.\"\"\"\n\n        data = {\n            CONF_REGION: self._region,\n            CONF_LANGUAGE: self._language,\n            CONF_TOKEN: self._token,\n            CONF_OAUTH_URL: self._oauth_url,\n            CONF_USE_API_V2: True,\n        }\n\n        # if an entry exists, we are reconfiguring\n        if entries := self._async_current_entries():\n            entry = entries[0]\n            self.hass.config_entries.async_update_entry(\n                entry=entry, data=data,\n            )\n            self.hass.async_create_task(\n                self.hass.config_entries.async_reload(entry.entry_id)\n            )\n            return self.async_abort(reason=\"reconfigured\")\n\n        return self.async_create_entry(title=\"LGE Devices\", data=data)\n\n    @callback\n    def _prepare_form_schema(self, step_id=\"user\") -> vol.Schema:\n        \"\"\"Prepare the user forms schema.\"\"\"\n        if step_id == \"url\":\n            return vol.Schema(\n                {\n                    vol.Required(CONF_LOGIN, default=self._login_url): str,\n                    vol.Required(CONF_URL): str,\n                }\n            )\n\n        return vol.Schema(\n            {\n                vol.Optional(CONF_USERNAME, default=\"\"): str,\n                vol.Optional(CONF_PASSWORD, default=\"\"): str,\n                vol.Required(CONF_REGION, default=self._region or \"\"): vol.In(COUNTRIES),\n                vol.Required(CONF_LANGUAGE, default=self._user_lang or \"\"): vol.In(LANGUAGES),\n                vol.Required(CONF_USE_REDIRECT, default=False): bool,\n            }\n        )\n\n    @callback\n    def _show_form(self, errors: str | None = None, step_id=\"user\") -> FlowResult:\n        \"\"\"Show the form to the user.\"\"\"\n        base_err = errors or self._error\n        self._error = None\n        schema = self._prepare_form_schema(step_id)\n\n        return self.async_show_form(\n            step_id=step_id,\n            data_schema=schema,\n            errors={CONF_BASE: base_err} if base_err else None,\n        )\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/const.py",
    "content": "\"\"\"\nSupport to interface with LGE ThinQ Devices.\n\"\"\"\n\n__version__ = \"0.23.3\"\nPROJECT_URL = \"https://github.com/ollo69/ha-smartthinq-sensors/\"\nISSUE_URL = \"{}issues\".format(PROJECT_URL)\n\nDOMAIN = \"smartthinq_sensors\"\n\nMIN_HA_MAJ_VER = 2022\nMIN_HA_MIN_VER = 5\n__min_ha_version__ = f\"{MIN_HA_MAJ_VER}.{MIN_HA_MIN_VER}.0\"\n\nCONF_LANGUAGE = \"language\"\nCONF_OAUTH_URL = \"outh_url\"\nCONF_USE_API_V2 = \"use_api_v2\"\n\nCLIENT = \"client\"\nLGE_DEVICES = \"lge_devices\"\n\nDEFAULT_ICON = \"def_icon\"\nDEFAULT_SENSOR = \"default\"\n\nSTARTUP = \"\"\"\n-------------------------------------------------------------------\n{}\nVersion: {}\nThis is a custom component\nIf you have any issues with this you need to open an issue here:\n{}\n-------------------------------------------------------------------\n\"\"\".format(\n    DOMAIN, __version__, ISSUE_URL\n)\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/device_helpers.py",
    "content": "\"\"\"Helper class for ThinQ devices\"\"\"\n\nimport logging\n\nfrom .wideq import (\n    STATE_OPTIONITEM_OFF,\n    STATE_OPTIONITEM_ON,\n    UNIT_TEMP_CELSIUS,\n    UNIT_TEMP_FAHRENHEIT,\n    WM_DEVICE_TYPES,\n    DeviceType,\n)\n\nfrom homeassistant.const import (\n    STATE_ON,\n    STATE_OFF,\n    TEMP_CELSIUS,\n    TEMP_FAHRENHEIT,\n)\n\nfrom .const import DEFAULT_SENSOR\n\nSTATE_LOOKUP = {\n    STATE_OPTIONITEM_OFF: STATE_OFF,\n    STATE_OPTIONITEM_ON: STATE_ON,\n}\n\nTEMP_UNIT_LOOKUP = {\n    UNIT_TEMP_CELSIUS: TEMP_CELSIUS,\n    UNIT_TEMP_FAHRENHEIT: TEMP_FAHRENHEIT,\n}\n\n_LOGGER = logging.getLogger(__name__)\n\nDEVICE_ICONS = {\n    DeviceType.WASHER: \"mdi:washing-machine\",\n    DeviceType.DRYER: \"mdi:tumble-dryer\",\n    DeviceType.STYLER: \"mdi:palette-swatch-outline\",\n    DeviceType.DISHWASHER: \"mdi:dishwasher\",\n    DeviceType.REFRIGERATOR: \"mdi:fridge-outline\",\n    DeviceType.RANGE: \"mdi:stove\",\n}\n\nWASH_DEVICE_TYPES = [\n    *WM_DEVICE_TYPES,\n    DeviceType.DISHWASHER,\n    DeviceType.STYLER,\n]\n\n\ndef get_multiple_devices_types(lge_devices: dict, dev_types: list) -> list:\n    \"\"\"Return a list of devices of multiple types.\"\"\"\n    return [\n        dev\n        for dev_type, devices in lge_devices.items()\n        for dev in devices\n        if dev_type in dev_types\n    ]\n\n\ndef get_entity_name(device, ent_key, ent_name) -> str:\n    \"\"\"Get the name for the entity\"\"\"\n    name_slug = device.name\n    if ent_key == DEFAULT_SENSOR:\n        return name_slug\n\n    name = ent_name or ent_key\n    if not ent_name:\n        feat_name = device.available_features.get(ent_key)\n        if feat_name and feat_name != ent_key:\n            name = feat_name.replace(\"_\", \" \").capitalize()\n\n    return f\"{name_slug} {name}\"\n\n\nclass LGEBaseDevice:\n    \"\"\"A wrapper to monitor LGE devices\"\"\"\n    def __init__(self, api_device):\n        \"\"\"Initialize the device.\"\"\"\n        self._api = api_device\n\n    @staticmethod\n    def format_time(hours, minutes):\n        \"\"\"Return a time in format hh:mm:ss based on input hours and minutes.\"\"\"\n        if not minutes:\n            return \"0:00:00\"\n\n        if not hours:\n            int_minutes = int(minutes)\n            if int_minutes >= 60:\n                int_hours = int(int_minutes / 60)\n                minutes = str(int_minutes - (int_hours * 60))\n                hours = str(int_hours)\n            else:\n                hours = \"0\"\n\n        if int(minutes) < 10:\n            minutes = f\"0{int(minutes)}\"\n        remain_time = [hours, minutes, \"00\"]\n        return \":\".join(remain_time)\n\n    @property\n    def device(self):\n        \"\"\"The API device\"\"\"\n        return self._api.device\n\n    @property\n    def is_power_on(self):\n        \"\"\"Current power state\"\"\"\n        if self._api.state:\n            if self._api.state.is_on:\n                return True\n        return False\n\n    @property\n    def power_state(self):\n        \"\"\"Current power state\"\"\"\n        if self.is_power_on:\n            return STATE_ON\n        return STATE_OFF\n\n    def get_features_attributes(self):\n        ret_val = {}\n        if self._api.state:\n            states = self._api.state.device_features\n        else:\n            states = {}\n        features = self._api.available_features\n        for feat_key, feat_name in features.items():\n            ret_val[feat_name] = states.get(feat_key)\n        return ret_val\n\n\nclass LGEWashDevice(LGEBaseDevice):\n    \"\"\"A wrapper to monitor LGE Wash devices\"\"\"\n\n    @property\n    def run_completed(self):\n        if self._api.state:\n            if self._api.state.is_run_completed:\n                return STATE_ON\n        return STATE_OFF\n\n    @property\n    def error_state(self):\n        if self._api.state:\n            if self._api.state.is_error:\n                return STATE_ON\n        return STATE_OFF\n\n    @property\n    def initial_time(self):\n        if self._api.state:\n            if self._api.state.is_on:\n                return self.format_time(\n                    self._api.state.initialtime_hour, self._api.state.initialtime_min\n                )\n        return self.format_time(None, None)\n\n    @property\n    def remain_time(self):\n        if self._api.state:\n            if self._api.state.is_on:\n                return self.format_time(\n                    self._api.state.remaintime_hour, self._api.state.remaintime_min\n                )\n        return self.format_time(None, None)\n\n    @property\n    def reserve_time(self):\n        if self._api.state:\n            if self._api.state.is_on:\n                return self.format_time(\n                    self._api.state.reservetime_hour, self._api.state.reservetime_min\n                )\n        return self.format_time(None, None)\n\n    @property\n    def current_course(self):\n        if self._api.state:\n            if self._api.state.is_on:\n                course = self._api.state.current_course\n                if course:\n                    return course\n                smart_course = self._api.state.current_smartcourse\n                if smart_course:\n                    return smart_course\n        return \"-\"\n\n\nclass LGERefrigeratorDevice(LGEBaseDevice):\n    \"\"\"A wrapper to monitor LGE Refrigerator devices\"\"\"\n\n    @property\n    def temp_fridge(self):\n        if self._api.state:\n            return self._api.state.temp_fridge\n        return None\n\n    @property\n    def temp_freezer(self):\n        if self._api.state:\n            return self._api.state.temp_freezer\n        return None\n\n    @property\n    def temp_unit(self):\n        if self._api.state:\n            unit = self._api.state.temp_unit\n            return TEMP_UNIT_LOOKUP.get(unit, TEMP_CELSIUS)\n        return TEMP_CELSIUS\n\n    @property\n    def dooropen_state(self):\n        if self._api.state:\n            state = self._api.state.door_opened_state\n            return STATE_LOOKUP.get(state, STATE_OFF)\n        return STATE_OFF\n\n\nclass LGEACDevice(LGEBaseDevice):\n    \"\"\"A wrapper to monitor LGE AC devices\"\"\"\n\n    @property\n    def curr_temp(self):\n        if self._api.state:\n            return self._api.state.current_temp\n        return None\n\n    @property\n    def temp_unit(self):\n        unit = self._api.device.temperature_unit\n        return TEMP_UNIT_LOOKUP.get(unit, TEMP_CELSIUS)\n\n\nclass LGERangeDevice(LGEBaseDevice):\n    \"\"\"A wrapper to monitor LGE range devices\"\"\"\n\n    @property\n    def cooktop_state(self):\n        \"\"\"Current cooktop state\"\"\"\n        if self._api.state:\n            if self._api.state.is_cooktop_on:\n                return STATE_ON\n        return STATE_OFF\n\n    @property\n    def oven_state(self):\n        \"\"\"Current oven state\"\"\"\n        if self._api.state:\n            if self._api.state.is_oven_on:\n                return STATE_ON\n        return STATE_OFF\n\n    @property\n    def oven_lower_target_temp(self):\n        if self._api.state:\n            return self._api.state.oven_lower_target_temp\n        return None\n\n    @property\n    def oven_upper_target_temp(self):\n        if self._api.state:\n            return self._api.state.oven_upper_target_temp\n        return None\n\n    @property\n    def oven_temp_unit(self):\n        if self._api.state:\n            unit = self._api.state.oven_temp_unit\n            return TEMP_UNIT_LOOKUP.get(unit, TEMP_CELSIUS)\n        return TEMP_CELSIUS\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/diagnostics.py",
    "content": "\"\"\"Diagnostics support for LG ThinQ.\"\"\"\nfrom __future__ import annotations\n\nfrom homeassistant.components.diagnostics import async_redact_data\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.const import CONF_TOKEN\nfrom homeassistant.core import HomeAssistant, callback\nfrom homeassistant.helpers import device_registry as dr, entity_registry as er\n\nfrom . import UNSUPPORTED_DEVICES\nfrom .const import DOMAIN, LGE_DEVICES\n\nTO_REDACT = {CONF_TOKEN}\nTO_REDACT_DEV = {\"macAddress\", \"ssid\", \"userNo\"}\n\n\nasync def async_get_config_entry_diagnostics(\n    hass: HomeAssistant, entry: ConfigEntry\n) -> dict:\n    \"\"\"Return diagnostics for a config entry.\"\"\"\n    return _async_get_diagnostics(hass, entry)\n\n\nasync def async_get_device_diagnostics(\n    hass: HomeAssistant, entry: ConfigEntry, device: dr.DeviceEntry\n) -> dict:\n    \"\"\"Return diagnostics for a device entry.\"\"\"\n    return _async_get_diagnostics(hass, entry, device)\n\n\n@callback\ndef _async_get_diagnostics(\n    hass: HomeAssistant,\n    entry: ConfigEntry,\n    device: dr.DeviceEntry | None = None,\n) -> dict:\n    \"\"\"Return diagnostics for a config or a device entry.\"\"\"\n    diag_data = {\"entry\": async_redact_data(entry.as_dict(), TO_REDACT)}\n\n    lg_device_id = None\n    if device:\n        lg_device_id = next(iter(device.identifiers))[1]\n\n    devs_data = _async_devices_as_dict(hass, lg_device_id)\n    diag_data[LGE_DEVICES] = devs_data\n\n    if device:\n        return diag_data\n\n    # Get info for unsupported device if diagnostic is for the config entry\n    unsup_devices = hass.data[DOMAIN].get(UNSUPPORTED_DEVICES, {})\n    unsup_data = {}\n    for dev_type, devices in unsup_devices.items():\n        unsup_devs = [\n            async_redact_data(device.as_dict(), TO_REDACT_DEV)\n            for device in devices\n        ]\n        unsup_data[dev_type.name] = unsup_devs\n\n    if unsup_data:\n        diag_data[UNSUPPORTED_DEVICES] = unsup_data\n\n    return diag_data\n\n\n@callback\ndef _async_devices_as_dict(\n    hass: HomeAssistant, lg_device_id: str | None = None\n) -> dict:\n    \"\"\"Represent a LGE devices as a dictionary.\"\"\"\n\n    lge_devices = hass.data[DOMAIN].get(LGE_DEVICES, {})\n    devs_data = {}\n    for dev_type, devices in lge_devices.items():\n        lge_devs = {}\n        for lge_device in devices:\n            device = lge_device.device\n            if lg_device_id and device.device_info.id != lg_device_id:\n                continue\n\n            lge_devs[lge_device.unique_id] = {\n                \"device_info\": async_redact_data(\n                    device.device_info.as_dict(), TO_REDACT_DEV\n                ),\n                \"model_info\": device.model_info.as_dict(),\n                \"device_status\": device.status.data if device.status else None,\n                \"home_assistant\": _async_device_ha_info(hass, device.device_info.id)\n            }\n            if lg_device_id:\n                return {dev_type.name: lge_devs}\n\n        if lge_devs:\n            devs_data[dev_type.name] = lge_devs\n\n    return devs_data\n\n\n@callback\ndef _async_device_ha_info(\n    hass: HomeAssistant, lg_device_id: str\n) -> dict | None:\n    \"\"\"Gather information how this ThinQ device is represented in Home Assistant.\"\"\"\n\n    device_registry = dr.async_get(hass)\n    entity_registry = er.async_get(hass)\n    hass_device = device_registry.async_get_device(\n        identifiers={(DOMAIN, lg_device_id)}\n    )\n    if not hass_device:\n        return None\n\n    data = {\n        \"name\": hass_device.name,\n        \"name_by_user\": hass_device.name_by_user,\n        \"model\": hass_device.model,\n        \"manufacturer\": hass_device.manufacturer,\n        \"sw_version\": hass_device.sw_version,\n        \"disabled\": hass_device.disabled,\n        \"disabled_by\": hass_device.disabled_by,\n        \"entities\": {},\n    }\n\n    hass_entities = er.async_entries_for_device(\n        entity_registry,\n        device_id=hass_device.id,\n        include_disabled_entities=True,\n    )\n\n    for entity_entry in hass_entities:\n        if entity_entry.platform != DOMAIN:\n            continue\n        state = hass.states.get(entity_entry.entity_id)\n        state_dict = None\n        if state:\n            state_dict = dict(state.as_dict())\n            # The entity_id is already provided at root level.\n            state_dict.pop(\"entity_id\", None)\n            # The context doesn't provide useful information in this case.\n            state_dict.pop(\"context\", None)\n\n        data[\"entities\"][entity_entry.entity_id] = {\n            \"name\": entity_entry.name,\n            \"original_name\": entity_entry.original_name,\n            \"disabled\": entity_entry.disabled,\n            \"disabled_by\": entity_entry.disabled_by,\n            \"entity_category\": entity_entry.entity_category,\n            \"device_class\": entity_entry.device_class,\n            \"original_device_class\": entity_entry.original_device_class,\n            \"icon\": entity_entry.icon,\n            \"original_icon\": entity_entry.original_icon,\n            \"unit_of_measurement\": entity_entry.unit_of_measurement,\n            \"state\": state_dict,\n        }\n\n    return data\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/fan.py",
    "content": "\"\"\"Platform for LGE fan integration.\"\"\"\nfrom __future__ import annotations\n\nfrom datetime import timedelta\nimport logging\n\nfrom .wideq import DeviceType\nfrom .wideq.fan import FanDevice\n\nfrom homeassistant.components.fan import FanEntity, FanEntityFeature\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.core import HomeAssistant\nfrom homeassistant.helpers.entity_platform import AddEntitiesCallback\nfrom homeassistant.helpers.update_coordinator import CoordinatorEntity\nfrom homeassistant.util.percentage import ordered_list_item_to_percentage, percentage_to_ordered_list_item\n\nfrom . import LGEDevice\nfrom .const import DOMAIN, LGE_DEVICES\n\n\nATTR_FAN_MODE = \"fan_mode\"\nATTR_FAN_MODES = \"fan_modes\"\n\nSCAN_INTERVAL = timedelta(seconds=120)\n\n_LOGGER = logging.getLogger(__name__)\n\n\nasync def async_setup_entry(\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback\n) -> None:\n    \"\"\"Set up LGE device fan based on config_entry.\"\"\"\n    entry_config = hass.data[DOMAIN]\n    lge_devices = entry_config.get(LGE_DEVICES)\n    if not lge_devices:\n        return\n\n    _LOGGER.debug(\"Starting LGE ThinQ fan setup...\")\n    lge_fan = []\n\n    # Fan devices\n    lge_fan.extend(\n        [\n            LGEFan(lge_device)\n            for lge_device in lge_devices.get(DeviceType.FAN, [])\n        ]\n    )\n\n    # Air Purifier devices\n    lge_fan.extend(\n        [\n            LGEFan(lge_device, icon=\"mdi:air-purifier\")\n            for lge_device in lge_devices.get(DeviceType.AIR_PURIFIER, [])\n        ]\n    )\n\n    async_add_entities(lge_fan)\n\n\nclass LGEBaseFan(CoordinatorEntity, FanEntity):\n    \"\"\"Base fan device.\"\"\"\n\n    def __init__(self, api: LGEDevice):\n        \"\"\"Initialize the base fan.\"\"\"\n        super().__init__(api.coordinator)\n        self._api = api\n        self._attr_device_info = api.device_info\n\n    @property\n    def should_poll(self) -> bool:\n        \"\"\"Return True if entity has to be polled for state.\n\n        We overwrite coordinator property default setting because we need\n        to poll to avoid the effect that after changing a climate settings\n        it is immediately set to prev state. The async_update method here\n        do nothing because the real update is performed by coordinator.\n        \"\"\"\n        return True\n\n    async def async_update(self) -> None:\n        \"\"\"Update the entity.\n\n        This is a fake update, real update is done by coordinator.\n        \"\"\"\n        return\n\n    @property\n    def available(self) -> bool:\n        \"\"\"Return True if entity is available.\"\"\"\n        return self._api.available\n\n\nclass LGEFan(LGEBaseFan):\n    \"\"\"LG Fan device.\"\"\"\n\n    def __init__(self, api: LGEDevice, *, icon: str = None) -> None:\n        \"\"\"Initialize the fan.\"\"\"\n        super().__init__(api)\n        self._device: FanDevice = api.device\n        self._attr_name = api.name\n        self._attr_unique_id = f\"{api.unique_id}-FAN\"\n        if icon:\n            self._attr_icon = icon\n        self._attr_speed_count = len(self._device.fan_speeds)\n        if len(self._device.fan_presets) > 0:\n            self._attr_preset_modes = self._device.fan_presets\n\n    @property\n    def supported_features(self) -> int:\n        \"\"\"Return the list of supported features.\"\"\"\n        features = 0\n        if self.speed_count > 0:\n            features |= FanEntityFeature.SET_SPEED\n        if self.preset_modes is not None:\n            features |= FanEntityFeature.PRESET_MODE\n        return features\n\n    @property\n    def extra_state_attributes(self):\n        \"\"\"Return the optional state attributes with device specific additions.\"\"\"\n        state = {}\n        if fan_modes := self._device.fan_speeds:\n            state[ATTR_FAN_MODES] = fan_modes\n            if fan_mode := self._api.state.fan_speed:\n                state[ATTR_FAN_MODE] = fan_mode\n\n        return state\n\n    @property\n    def percentage(self) -> int | None:\n        \"\"\"Return the current speed percentage.\"\"\"\n        if not self._api.state.is_on:\n            return 0\n        if self._api.state.fan_speed is None and self._api.state.fan_preset:\n            return None\n        if self.speed_count == 0:\n            return 100\n        return ordered_list_item_to_percentage(\n            self._device.fan_speeds, self._api.state.fan_speed\n        )\n\n    @property\n    def preset_mode(self) -> str | None:\n        \"\"\"Return the current preset mode, e.g., auto, smart, interval, favorite.\"\"\"\n        if self.preset_modes is None:\n            return None\n        if not self._api.state.is_on:\n            return None\n        return self._api.state.fan_preset\n\n    async def async_set_percentage(self, percentage: int) -> None:\n        \"\"\"Set the speed of the fan, as a percentage.\"\"\"\n        if percentage == 0 and self.preset_mode is None:\n            await self.async_turn_off()\n            return\n        if not self._api.state.is_on:\n            await self._device.power(True)\n        if self.speed_count == 0:\n            return\n        named_speed = percentage_to_ordered_list_item(self._device.fan_speeds, percentage)\n        await self._device.set_fan_speed(named_speed)\n\n    async def async_set_preset_mode(self, preset_mode: str) -> None:\n        \"\"\"Set new preset mode.\"\"\"\n        if self.preset_modes is None:\n            raise NotImplementedError()\n        if not self._api.state.is_on:\n            await self._device.power(True)\n        await self._device.set_fan_preset(preset_mode)\n\n    async def async_turn_on(\n        self,\n        percentage: int | None = None,\n        preset_mode: str | None = None,\n        **kwargs,\n    ) -> None:\n        \"\"\"Turn on the fan.\"\"\"\n        if percentage:\n            await self.async_set_percentage(percentage)\n        elif preset_mode and self.preset_modes:\n            await self.async_set_preset_mode(preset_mode)\n        else:\n            await self._device.power(True)\n\n    async def async_turn_off(self, **kwargs) -> None:\n        \"\"\"Turn the entity off.\"\"\"\n        await self._device.power(False)\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/humidifier.py",
    "content": "\"\"\"Platform for LGE humidifier integration.\"\"\"\nfrom __future__ import annotations\n\nfrom datetime import timedelta\nimport logging\nimport voluptuous as vol\n\nfrom .wideq import FEAT_HUMIDITY, FEAT_TARGET_HUMIDITY, DeviceType\nfrom .wideq.dehumidifier import DeHumidifierDevice\n\nfrom homeassistant.components.humidifier import HumidifierEntity, HumidifierDeviceClass\nfrom homeassistant.components.humidifier.const import (\n    DEFAULT_MAX_HUMIDITY,\n    DEFAULT_MIN_HUMIDITY,\n    HumidifierEntityFeature,\n)\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.core import HomeAssistant\nfrom homeassistant.helpers import config_validation as cv\nfrom homeassistant.helpers.entity_platform import AddEntitiesCallback, current_platform\nfrom homeassistant.helpers.update_coordinator import CoordinatorEntity\n\nfrom . import LGEDevice\nfrom .const import DOMAIN, LGE_DEVICES\n\nATTR_CURRENT_HUMIDITY = \"current_humidity\"\nATTR_FAN_MODE = \"fan_mode\"\nATTR_FAN_MODES = \"fan_modes\"\nSERVICE_SET_FAN_MODE = \"set_fan_mode\"\n\nSCAN_INTERVAL = timedelta(seconds=120)\n\n_LOGGER = logging.getLogger(__name__)\n\n\nasync def async_setup_entry(\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback\n) -> None:\n    \"\"\"Set up LGE device humidifier based on config_entry.\"\"\"\n    entry_config = hass.data[DOMAIN]\n    lge_devices = entry_config.get(LGE_DEVICES)\n    if not lge_devices:\n        return\n\n    _LOGGER.debug(\"Starting LGE ThinQ humidifier setup...\")\n    lge_humidifier = []\n\n    # DeHumidifier devices\n    lge_humidifier.extend(\n        [\n            LGEDeHumidifier(lge_device)\n            for lge_device in lge_devices.get(DeviceType.DEHUMIDIFIER, [])\n        ]\n    )\n\n    async_add_entities(lge_humidifier)\n\n    # register services\n    platform = current_platform.get()\n    platform.async_register_entity_service(\n        SERVICE_SET_FAN_MODE,\n        {vol.Required(ATTR_FAN_MODE): cv.string},\n        \"async_set_fan_mode\",\n    )\n\n\nclass LGEBaseHumidifier(CoordinatorEntity, HumidifierEntity):\n    \"\"\"Base humidifier device.\"\"\"\n\n    def __init__(self, api: LGEDevice):\n        \"\"\"Initialize the humidifier.\"\"\"\n        super().__init__(api.coordinator)\n        self._api = api\n        self._attr_device_info = api.device_info\n\n    @property\n    def should_poll(self) -> bool:\n        \"\"\"Return True if entity has to be polled for state.\n\n        We overwrite coordinator property default setting because we need\n        to poll to avoid the effect that after changing a climate settings\n        it is immediately set to prev state. The async_update method here\n        do nothing because the real update is performed by coordinator.\n        \"\"\"\n        return True\n\n    async def async_update(self) -> None:\n        \"\"\"Update the entity.\n\n        This is a fake update, real update is done by coordinator.\n        \"\"\"\n        return\n\n    @property\n    def available(self) -> bool:\n        \"\"\"Return True if entity is available.\"\"\"\n        return self._api.available\n\n\nclass LGEDeHumidifier(LGEBaseHumidifier):\n    \"\"\"LG DeHumidifier device.\"\"\"\n\n    def __init__(self, api: LGEDevice) -> None:\n        \"\"\"Initialize the dehumidifier.\"\"\"\n        super().__init__(api)\n        self._device: DeHumidifierDevice = api.device\n        self._attr_name = api.name\n        self._attr_unique_id = f\"{api.unique_id}-DEHUM\"\n        self._attr_device_class = HumidifierDeviceClass.DEHUMIDIFIER\n        self._attr_available_modes = self._device.op_modes\n\n    @property\n    def supported_features(self) -> int:\n        \"\"\"Return the list of supported features.\"\"\"\n        if self.available_modes:\n            return HumidifierEntityFeature.MODES\n        return 0\n\n    @property\n    def extra_state_attributes(self):\n        \"\"\"Return the optional state attributes with device specific additions.\"\"\"\n        state = {}\n        if humidity := self._api.state.device_features.get(FEAT_HUMIDITY):\n            state[ATTR_CURRENT_HUMIDITY] = humidity\n        if fan_modes := self._device.fan_speeds:\n            state[ATTR_FAN_MODES] = fan_modes\n            if fan_mode := self._api.state.fan_speed:\n                state[ATTR_FAN_MODE] = fan_mode\n\n        return state\n\n    @property\n    def is_on(self) -> bool | None:\n        \"\"\"Return True if entity is on.\"\"\"\n        return self._api.state.is_on\n\n    @property\n    def mode(self) -> str | None:\n        \"\"\"Return current operation.\"\"\"\n        return self._api.state.operation_mode\n\n    async def async_set_mode(self, mode: str) -> None:\n        \"\"\"Set new target mode.\"\"\"\n        if mode not in self.available_modes:\n            raise ValueError(f\"Invalid mode [{mode}]\")\n        await self._device.set_op_mode(mode)\n\n    @property\n    def target_humidity(self) -> int | None:\n        \"\"\"Return the humidity we try to reach.\"\"\"\n        return self._api.state.device_features.get(FEAT_TARGET_HUMIDITY)\n\n    async def async_set_humidity(self, humidity: int) -> None:\n        \"\"\"Set new target humidity.\"\"\"\n        humidity_step = self._device.target_humidity_step or 1\n        target_humidity = humidity + (humidity % humidity_step)\n        await self._device.set_target_humidity(target_humidity)\n\n    async def async_turn_on(self, **kwargs) -> None:\n        \"\"\"Turn the entity on.\"\"\"\n        await self._device.power(True)\n\n    async def async_turn_off(self, **kwargs) -> None:\n        \"\"\"Turn the entity off.\"\"\"\n        await self._device.power(False)\n\n    @property\n    def min_humidity(self) -> int:\n        \"\"\"Return the minimum humidity.\"\"\"\n        if (min_value := self._device.target_humidity_min) is not None:\n            return min_value\n\n        return DEFAULT_MIN_HUMIDITY\n\n    @property\n    def max_humidity(self) -> int:\n        \"\"\"Return the maximum humidity.\"\"\"\n        if (max_value := self._device.target_humidity_max) is not None:\n            return max_value\n\n        return DEFAULT_MAX_HUMIDITY\n\n    async def async_set_fan_mode(self, fan_mode: str) -> None:\n        \"\"\"Set new fan mode.\"\"\"\n        if fan_mode not in self._device.fan_speeds:\n            raise ValueError(f\"Invalid fan mode [{fan_mode}]\")\n        await self._device.set_fan_speed(fan_mode)\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/manifest.json",
    "content": "{\n  \"domain\": \"smartthinq_sensors\",\n  \"name\": \"SmartThinQ LGE Sensors\",\n  \"documentation\": \"https://github.com/ollo69/ha-smartthinq-sensors\",\n  \"issue_tracker\": \"https://github.com/ollo69/ha-smartthinq-sensors/issues\",\n  \"dependencies\": [],\n  \"codeowners\": [\"@ollo69\"],\n  \"requirements\": [\n    \"pycountry>=20.7.3\",\n    \"xmltodict>=0.12.0\",\n    \"chardet>=4.0.0\"\n  ],\n  \"config_flow\": true,\n  \"iot_class\": \"cloud_polling\",\n  \"version\": \"0.23.3\"\n}\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/sensor.py",
    "content": "\"\"\"Support for ThinQ device sensors.\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass\nimport logging\nfrom typing import Any, Callable, Tuple\n\nfrom .wideq import (\n    FEAT_COOKTOP_LEFT_FRONT_STATE,\n    FEAT_COOKTOP_LEFT_REAR_STATE,\n    FEAT_COOKTOP_CENTER_STATE,\n    FEAT_COOKTOP_RIGHT_FRONT_STATE,\n    FEAT_COOKTOP_RIGHT_REAR_STATE,\n    FEAT_DRYLEVEL,\n    FEAT_ENERGY_CURRENT,\n    FEAT_ERROR_MSG,\n    FEAT_FILTER_BOTTOM_LIFE,\n    FEAT_FILTER_DUST_LIFE,\n    FEAT_FILTER_MAIN_LIFE,\n    FEAT_FILTER_MID_LIFE,\n    FEAT_FILTER_TOP_LIFE,\n    FEAT_HALFLOAD,\n    FEAT_HOT_WATER_TEMP,\n    FEAT_HUMIDITY,\n    FEAT_IN_WATER_TEMP,\n    FEAT_OUT_WATER_TEMP,\n    FEAT_OVEN_LOWER_CURRENT_TEMP,\n    FEAT_OVEN_LOWER_STATE,\n    FEAT_OVEN_UPPER_CURRENT_TEMP,\n    FEAT_OVEN_UPPER_STATE,\n    FEAT_PM1,\n    FEAT_PM10,\n    FEAT_PM25,\n    FEAT_PRE_STATE,\n    FEAT_PROCESS_STATE,\n    FEAT_RUN_STATE,\n    FEAT_SPINSPEED,\n    FEAT_TARGET_HUMIDITY,\n    FEAT_TEMPCONTROL,\n    FEAT_TUBCLEAN_COUNT,\n    FEAT_WATERTEMP,\n    WM_DEVICE_TYPES,\n    DeviceType,\n)\n\nfrom homeassistant.components.sensor import (\n    SensorDeviceClass,\n    SensorEntity,\n    SensorEntityDescription,\n    SensorStateClass,\n)\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.const import (\n    CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,\n    PERCENTAGE,\n    POWER_WATT,\n    STATE_UNAVAILABLE,\n)\nfrom homeassistant.core import HomeAssistant\nfrom homeassistant.helpers.entity_platform import AddEntitiesCallback, current_platform\nfrom homeassistant.helpers.update_coordinator import CoordinatorEntity\n\nfrom . import LGEDevice\nfrom .const import DEFAULT_ICON, DEFAULT_SENSOR, DOMAIN, LGE_DEVICES\nfrom .device_helpers import (\n    DEVICE_ICONS,\n    WASH_DEVICE_TYPES,\n    LGEACDevice,\n    LGERangeDevice,\n    LGERefrigeratorDevice,\n    LGEWashDevice,\n    get_entity_name,\n    get_multiple_devices_types,\n)\n\n# service definition\nSERVICE_REMOTE_START = \"remote_start\"\nSERVICE_WAKE_UP = \"wake_up\"\n\n# general sensor attributes\nATTR_CURRENT_COURSE = \"current_course\"\nATTR_ERROR_STATE = \"error_state\"\nATTR_INITIAL_TIME = \"initial_time\"\nATTR_REMAIN_TIME = \"remain_time\"\nATTR_RESERVE_TIME = \"reserve_time\"\nATTR_RUN_COMPLETED = \"run_completed\"\n\n# refrigerator sensor attributes\nATTR_DOOR_OPEN = \"door_open\"\nATTR_FRIDGE_TEMP = \"fridge_temp\"\nATTR_FREEZER_TEMP = \"freezer_temp\"\nATTR_TEMP_UNIT = \"temp_unit\"\n\n# ac sensor attributes\nATTR_ROOM_TEMP = \"room_temperature\"\n\n# range sensor attributes\nATTR_OVEN_LOWER_TARGET_TEMP = \"oven_lower_target_temp\"\nATTR_OVEN_UPPER_TARGET_TEMP = \"oven_upper_target_temp\"\nATTR_OVEN_TEMP_UNIT = \"oven_temp_unit\"\n\n# supported features\nSUPPORT_REMOTE_START = 1\nSUPPORT_WAKE_UP = 2\n\n_LOGGER = logging.getLogger(__name__)\n\n\n@dataclass\nclass ThinQSensorEntityDescription(SensorEntityDescription):\n    \"\"\"A class that describes ThinQ sensor entities.\"\"\"\n\n    unit_fn: Callable[[Any], str] | None = None\n    value_fn: Callable[[Any], float | str] | None = None\n\n\nWASH_DEV_SENSORS: Tuple[ThinQSensorEntityDescription, ...] = (\n    ThinQSensorEntityDescription(\n        key=DEFAULT_SENSOR,\n        icon=DEFAULT_ICON,\n        value_fn=lambda x: x.power_state,\n    ),\n    ThinQSensorEntityDescription(\n        key=ATTR_CURRENT_COURSE,\n        name=\"Current course\",\n        icon=\"mdi:pin-outline\",\n        value_fn=lambda x: x.current_course,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_RUN_STATE,\n        name=\"Run state\",\n        icon=DEFAULT_ICON,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_PROCESS_STATE,\n        name=\"Process state\",\n        icon=DEFAULT_ICON,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_SPINSPEED,\n        name=\"Spin speed\",\n        icon=\"mdi:rotate-3d\",\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_WATERTEMP,\n        name=\"Water temp\",\n        icon=\"mdi:thermometer-lines\",\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_TEMPCONTROL,\n        name=\"Temp control\",\n        icon=\"mdi:thermometer-lines\",\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_DRYLEVEL,\n        name=\"Dry level\",\n        icon=\"mdi:tumble-dryer\",\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_ERROR_MSG,\n        name=\"Error message\",\n        icon=\"mdi:alert-circle-outline\",\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_PRE_STATE,\n        name=\"Pre state\",\n        icon=DEFAULT_ICON,\n        entity_registry_enabled_default=False,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_TUBCLEAN_COUNT,\n        name=\"Tub clean counter\",\n        icon=DEFAULT_ICON,\n        entity_registry_enabled_default=False,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_HALFLOAD,\n        name=\"Half load\",\n        icon=\"mdi:circle-half-full\",\n        entity_registry_enabled_default=False,\n    ),\n    ThinQSensorEntityDescription(\n        key=ATTR_INITIAL_TIME,\n        name=\"Initial time\",\n        icon=\"mdi:clock-outline\",\n        value_fn=lambda x: x.initial_time,\n        entity_registry_enabled_default=False,\n    ),\n    ThinQSensorEntityDescription(\n        key=ATTR_REMAIN_TIME,\n        name=\"Remaining time\",\n        icon=\"mdi:clock-outline\",\n        value_fn=lambda x: x.remain_time,\n        entity_registry_enabled_default=False,\n    ),\n    ThinQSensorEntityDescription(\n        key=ATTR_RESERVE_TIME,\n        name=\"Countdown time\",\n        icon=\"mdi:clock-outline\",\n        value_fn=lambda x: x.reserve_time,\n        entity_registry_enabled_default=False,\n    ),\n)\nREFRIGERATOR_SENSORS: Tuple[ThinQSensorEntityDescription, ...] = (\n    ThinQSensorEntityDescription(\n        key=DEFAULT_SENSOR,\n        icon=DEFAULT_ICON,\n        value_fn=lambda x: x.power_state,\n    ),\n    ThinQSensorEntityDescription(\n        key=ATTR_FRIDGE_TEMP,\n        name=\"Fridge temp\",\n        state_class=SensorStateClass.MEASUREMENT,\n        device_class=SensorDeviceClass.TEMPERATURE,\n        unit_fn=lambda x: x.temp_unit,\n        value_fn=lambda x: x.temp_fridge,\n    ),\n    ThinQSensorEntityDescription(\n        key=ATTR_FREEZER_TEMP,\n        name=\"Freezer temp\",\n        state_class=SensorStateClass.MEASUREMENT,\n        device_class=SensorDeviceClass.TEMPERATURE,\n        unit_fn=lambda x: x.temp_unit,\n        value_fn=lambda x: x.temp_freezer,\n    ),\n)\nAC_SENSORS: Tuple[ThinQSensorEntityDescription, ...] = (\n    ThinQSensorEntityDescription(\n        key=ATTR_ROOM_TEMP,\n        name=\"Room temperature\",\n        state_class=SensorStateClass.MEASUREMENT,\n        device_class=SensorDeviceClass.TEMPERATURE,\n        unit_fn=lambda x: x.temp_unit,\n        value_fn=lambda x: x.curr_temp,\n        entity_registry_enabled_default=False,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_HOT_WATER_TEMP,\n        name=\"Hot water temperature\",\n        state_class=SensorStateClass.MEASUREMENT,\n        device_class=SensorDeviceClass.TEMPERATURE,\n        unit_fn=lambda x: x.temp_unit,\n        entity_registry_enabled_default=False,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_IN_WATER_TEMP,\n        name=\"In water temperature\",\n        state_class=SensorStateClass.MEASUREMENT,\n        device_class=SensorDeviceClass.TEMPERATURE,\n        unit_fn=lambda x: x.temp_unit,\n        entity_registry_enabled_default=False,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_OUT_WATER_TEMP,\n        name=\"Out water temperature\",\n        state_class=SensorStateClass.MEASUREMENT,\n        device_class=SensorDeviceClass.TEMPERATURE,\n        unit_fn=lambda x: x.temp_unit,\n        entity_registry_enabled_default=False,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_ENERGY_CURRENT,\n        name=\"Energy current\",\n        state_class=SensorStateClass.MEASUREMENT,\n        device_class=SensorDeviceClass.POWER,\n        native_unit_of_measurement=POWER_WATT,\n        entity_registry_enabled_default=False,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_HUMIDITY,\n        name=\"Humidity\",\n        state_class=SensorStateClass.MEASUREMENT,\n        device_class=SensorDeviceClass.HUMIDITY,\n        native_unit_of_measurement=PERCENTAGE,\n        entity_registry_enabled_default=False,\n    ),\n)\nRANGE_SENSORS: Tuple[ThinQSensorEntityDescription, ...] = (\n    ThinQSensorEntityDescription(\n        key=DEFAULT_SENSOR,\n        icon=DEFAULT_ICON,\n        value_fn=lambda x: x.power_state,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_COOKTOP_LEFT_FRONT_STATE,\n        name=\"Cooktop left front state\",\n        icon=\"mdi:arrow-left-bold-box-outline\",\n        entity_registry_enabled_default=False,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_COOKTOP_LEFT_REAR_STATE,\n        name=\"Cooktop left rear state\",\n        icon=\"mdi:arrow-left-bold-box\",\n        entity_registry_enabled_default=False,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_COOKTOP_CENTER_STATE,\n        name=\"Cooktop center state\",\n        icon=\"mdi:minus-box-outline\",\n        entity_registry_enabled_default=False,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_COOKTOP_RIGHT_FRONT_STATE,\n        name=\"Cooktop right front state\",\n        icon=\"mdi:arrow-right-bold-box-outline\",\n        entity_registry_enabled_default=False,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_COOKTOP_RIGHT_REAR_STATE,\n        name=\"Cooktop right rear state\",\n        icon=\"mdi:arrow-right-bold-box\",\n        entity_registry_enabled_default=False,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_OVEN_LOWER_STATE,\n        name=\"Oven lower state\",\n        icon=\"mdi:inbox-arrow-down\",\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_OVEN_UPPER_STATE,\n        name=\"Oven upper state\",\n        icon=\"mdi:inbox-arrow-up\",\n    ),\n    ThinQSensorEntityDescription(\n        key=ATTR_OVEN_LOWER_TARGET_TEMP,\n        name=\"Oven lower target temperature\",\n        state_class=SensorStateClass.MEASUREMENT,\n        device_class=SensorDeviceClass.TEMPERATURE,\n        unit_fn=lambda x: x.oven_temp_unit,\n        value_fn=lambda x: x.oven_lower_target_temp,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_OVEN_LOWER_CURRENT_TEMP,\n        name=\"Oven lower current temperature\",\n        state_class=SensorStateClass.MEASUREMENT,\n        device_class=SensorDeviceClass.TEMPERATURE,\n        unit_fn=lambda x: x.oven_temp_unit,\n    ),\n    ThinQSensorEntityDescription(\n        key=ATTR_OVEN_UPPER_TARGET_TEMP,\n        name=\"Oven upper target temperature\",\n        state_class=SensorStateClass.MEASUREMENT,\n        device_class=SensorDeviceClass.TEMPERATURE,\n        unit_fn=lambda x: x.oven_temp_unit,\n        value_fn=lambda x: x.oven_upper_target_temp,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_OVEN_UPPER_CURRENT_TEMP,\n        name=\"Oven upper current temperature\",\n        state_class=SensorStateClass.MEASUREMENT,\n        device_class=SensorDeviceClass.TEMPERATURE,\n        unit_fn=lambda x: x.oven_temp_unit,\n    ),\n)\nAIR_PURIFIER_SENSORS: Tuple[ThinQSensorEntityDescription, ...] = (\n    ThinQSensorEntityDescription(\n        key=FEAT_HUMIDITY,\n        name=\"Current Humidity\",\n        state_class=SensorStateClass.MEASUREMENT,\n        device_class=SensorDeviceClass.HUMIDITY,\n        native_unit_of_measurement=PERCENTAGE,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_PM1,\n        name=\"PM1\",\n        state_class=SensorStateClass.MEASUREMENT,\n        device_class=SensorDeviceClass.PM1,\n        native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_PM10,\n        name=\"PM10\",\n        state_class=SensorStateClass.MEASUREMENT,\n        device_class=SensorDeviceClass.PM10,\n        native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_PM25,\n        name=\"PM2.5\",\n        state_class=SensorStateClass.MEASUREMENT,\n        device_class=SensorDeviceClass.PM25,\n        native_unit_of_measurement=CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_FILTER_MAIN_LIFE,\n        name=\"Filter Remaining Life (Main)\",\n        icon=\"mdi:air-filter\",\n        state_class=SensorStateClass.MEASUREMENT,\n        native_unit_of_measurement=PERCENTAGE,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_FILTER_BOTTOM_LIFE,\n        name=\"Filter Remaining Life (Bottom)\",\n        icon=\"mdi:air-filter\",\n        state_class=SensorStateClass.MEASUREMENT,\n        native_unit_of_measurement=PERCENTAGE,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_FILTER_DUST_LIFE,\n        name=\"Filter Remaining Life (Dust)\",\n        icon=\"mdi:air-filter\",\n        state_class=SensorStateClass.MEASUREMENT,\n        native_unit_of_measurement=PERCENTAGE,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_FILTER_MID_LIFE,\n        name=\"Filter Remaining Life (Middle)\",\n        icon=\"mdi:air-filter\",\n        state_class=SensorStateClass.MEASUREMENT,\n        native_unit_of_measurement=PERCENTAGE,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_FILTER_TOP_LIFE,\n        name=\"Filter Remaining Life (Top)\",\n        icon=\"mdi:air-filter\",\n        state_class=SensorStateClass.MEASUREMENT,\n        native_unit_of_measurement=PERCENTAGE,\n    ),\n)\nDEHUMIDIFIER_SENSORS: Tuple[ThinQSensorEntityDescription, ...] = (\n    ThinQSensorEntityDescription(\n        key=FEAT_HUMIDITY,\n        name=\"Current Humidity\",\n        state_class=SensorStateClass.MEASUREMENT,\n        device_class=SensorDeviceClass.HUMIDITY,\n        native_unit_of_measurement=PERCENTAGE,\n    ),\n    ThinQSensorEntityDescription(\n        key=FEAT_TARGET_HUMIDITY,\n        name=\"Target Humidity\",\n        state_class=SensorStateClass.MEASUREMENT,\n        device_class=SensorDeviceClass.HUMIDITY,\n        native_unit_of_measurement=PERCENTAGE,\n        entity_registry_enabled_default=False,\n    ),\n)\n\n\ndef _sensor_exist(lge_device: LGEDevice, sensor_desc: ThinQSensorEntityDescription) -> bool:\n    \"\"\"Check if a sensor exist for device.\"\"\"\n    if sensor_desc.value_fn is not None:\n        return True\n\n    feature = sensor_desc.key\n    if feature in lge_device.available_features:\n        return True\n\n    return False\n\n\nasync def async_setup_entry(\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback\n) -> None:\n    \"\"\"Set up the LGE sensors.\"\"\"\n    entry_config = hass.data[DOMAIN]\n    lge_devices = entry_config.get(LGE_DEVICES)\n    if not lge_devices:\n        return\n\n    _LOGGER.debug(\"Starting LGE ThinQ sensors setup...\")\n    lge_sensors = []\n\n    # add WASH devices\n    lge_sensors.extend(\n        [\n            LGEWashDeviceSensor(lge_device, sensor_desc)\n            for sensor_desc in WASH_DEV_SENSORS\n            for lge_device in get_multiple_devices_types(lge_devices, WASH_DEVICE_TYPES)\n            if _sensor_exist(lge_device, sensor_desc)\n        ]\n    )\n\n    # add refrigerators\n    lge_sensors.extend(\n        [\n            LGERefrigeratorSensor(lge_device, sensor_desc)\n            for sensor_desc in REFRIGERATOR_SENSORS\n            for lge_device in lge_devices.get(DeviceType.REFRIGERATOR, [])\n            if _sensor_exist(lge_device, sensor_desc)\n        ]\n    )\n\n    # add AC\n    lge_sensors.extend(\n        [\n            LGESensor(lge_device, sensor_desc, LGEACDevice(lge_device))\n            for sensor_desc in AC_SENSORS\n            for lge_device in lge_devices.get(DeviceType.AC, [])\n            if _sensor_exist(lge_device, sensor_desc)\n        ]\n    )\n\n    # add ranges\n    lge_sensors.extend(\n        [\n            LGERangeSensor(lge_device, sensor_desc)\n            for sensor_desc in RANGE_SENSORS\n            for lge_device in lge_devices.get(DeviceType.RANGE, [])\n            if _sensor_exist(lge_device, sensor_desc)\n        ]\n    )\n\n    # add air purifiers\n    lge_sensors.extend(\n        [\n            LGESensor(lge_device, sensor_desc)\n            for sensor_desc in AIR_PURIFIER_SENSORS\n            for lge_device in lge_devices.get(DeviceType.AIR_PURIFIER, [])\n            if _sensor_exist(lge_device, sensor_desc)\n        ]\n    )\n\n    # add dehumidifier\n    lge_sensors.extend(\n        [\n            LGESensor(lge_device, sensor_desc)\n            for sensor_desc in DEHUMIDIFIER_SENSORS\n            for lge_device in lge_devices.get(DeviceType.DEHUMIDIFIER, [])\n            if _sensor_exist(lge_device, sensor_desc)\n        ]\n    )\n\n    async_add_entities(lge_sensors)\n\n    # register services\n    platform = current_platform.get()\n    platform.async_register_entity_service(\n        SERVICE_REMOTE_START,\n        {},\n        \"async_remote_start\",\n        [SUPPORT_REMOTE_START],\n    )\n    platform.async_register_entity_service(\n        SERVICE_WAKE_UP,\n        {},\n        \"async_wake_up\",\n        [SUPPORT_WAKE_UP],\n    )\n\n\nclass LGESensor(CoordinatorEntity, SensorEntity):\n    \"\"\"Class to monitor sensors for LGE device\"\"\"\n\n    entity_description = ThinQSensorEntityDescription\n\n    def __init__(\n            self,\n            api: LGEDevice,\n            description: ThinQSensorEntityDescription,\n            wrapped_device=None,\n    ):\n        \"\"\"Initialize the sensor.\"\"\"\n        super().__init__(api.coordinator)\n        self._api = api\n        self._wrap_device = wrapped_device\n        self.entity_description = description\n        self._attr_name = get_entity_name(api, description.key, description.name)\n        self._attr_unique_id = api.unique_id\n        if description.key != DEFAULT_SENSOR:\n            self._attr_unique_id += f\"-{description.key}\"\n        self._attr_device_info = api.device_info\n        self._is_default = description.key == DEFAULT_SENSOR\n\n    @property\n    def supported_features(self):\n        if self._is_default and self._api.type in WM_DEVICE_TYPES:\n            return SUPPORT_REMOTE_START | SUPPORT_WAKE_UP\n        return None\n\n    @property\n    def native_value(self) -> float | int | str | None:\n        \"\"\"Return the state of the sensor.\"\"\"\n        if not self.available:\n            return STATE_UNAVAILABLE\n        return self._get_sensor_state()\n\n    @property\n    def native_unit_of_measurement(self) -> str | None:\n        \"\"\"Return the unit of measurement of the sensor, if any.\"\"\"\n        if self._wrap_device and self.entity_description.unit_fn is not None:\n            return self.entity_description.unit_fn(self._wrap_device)\n        return super().native_unit_of_measurement\n\n    @property\n    def icon(self):\n        \"\"\"Return the icon to use in the frontend, if any.\"\"\"\n        ent_icon = self.entity_description.icon\n        if ent_icon and ent_icon == DEFAULT_ICON:\n            return DEVICE_ICONS.get(self._api.type)\n        return super().icon\n\n    @property\n    def available(self) -> bool:\n        \"\"\"Return True if entity is available.\"\"\"\n        return self._api.available\n\n    @property\n    def assumed_state(self) -> bool:\n        \"\"\"Return True if unable to access real state of the entity.\"\"\"\n        return self._api.assumed_state\n\n    def _get_sensor_state(self):\n        \"\"\"Get current sensor state\"\"\"\n        if self._wrap_device and self.entity_description.value_fn is not None:\n            return self.entity_description.value_fn(self._wrap_device)\n\n        if self._api.state:\n            feature = self.entity_description.key\n            return self._api.state.device_features.get(feature)\n\n        return None\n\n    async def async_remote_start(self):\n        \"\"\"Call the remote start command for WM devices.\"\"\"\n        if self._api.type not in WM_DEVICE_TYPES:\n            raise NotImplementedError()\n        await self._api.device.remote_start()\n\n    async def async_wake_up(self):\n        \"\"\"Call the wakeup command for WM devices.\"\"\"\n        if self._api.type not in WM_DEVICE_TYPES:\n            raise NotImplementedError()\n        await self._api.device.wake_up()\n\n\nclass LGEWashDeviceSensor(LGESensor):\n    \"\"\"A sensor to monitor LGE Wash devices\"\"\"\n\n    def __init__(\n            self,\n            api: LGEDevice,\n            description: ThinQSensorEntityDescription,\n    ):\n        \"\"\"Initialize the sensor.\"\"\"\n        super().__init__(api, description, LGEWashDevice(api))\n\n    @property\n    def extra_state_attributes(self):\n        \"\"\"Return the optional state attributes.\"\"\"\n        if not self._is_default:\n            return None\n\n        data = {\n            ATTR_RUN_COMPLETED: self._wrap_device.run_completed,\n            ATTR_ERROR_STATE: self._wrap_device.error_state,\n            ATTR_INITIAL_TIME: self._wrap_device.initial_time,\n            ATTR_REMAIN_TIME: self._wrap_device.remain_time,\n            ATTR_RESERVE_TIME: self._wrap_device.reserve_time,\n            ATTR_CURRENT_COURSE: self._wrap_device.current_course,\n        }\n        features = self._wrap_device.get_features_attributes()\n        data.update(features)\n\n        return data\n\n\nclass LGERefrigeratorSensor(LGESensor):\n    \"\"\"A sensor to monitor LGE Refrigerator devices\"\"\"\n\n    def __init__(\n            self,\n            api: LGEDevice,\n            description: ThinQSensorEntityDescription,\n    ):\n        \"\"\"Initialize the sensor.\"\"\"\n        super().__init__(api, description, LGERefrigeratorDevice(api))\n\n    @property\n    def extra_state_attributes(self):\n        \"\"\"Return the optional state attributes.\"\"\"\n        if not self._is_default:\n            return None\n\n        data = {\n            ATTR_FRIDGE_TEMP: self._wrap_device.temp_fridge,\n            ATTR_FREEZER_TEMP: self._wrap_device.temp_freezer,\n            ATTR_TEMP_UNIT: self._wrap_device.temp_unit,\n            ATTR_DOOR_OPEN: self._wrap_device.dooropen_state,\n        }\n\n        if self._api.state:\n            features = self._wrap_device.get_features_attributes()\n            data.update(features)\n\n        return data\n\n\nclass LGERangeSensor(LGESensor):\n    \"\"\"A sensor to monitor LGE range devices\"\"\"\n\n    def __init__(\n            self,\n            api: LGEDevice,\n            description: ThinQSensorEntityDescription,\n    ):\n        \"\"\"Initialize the sensor.\"\"\"\n        super().__init__(api, description, LGERangeDevice(api))\n\n    @property\n    def extra_state_attributes(self):\n        \"\"\"Return the optional state attributes.\"\"\"\n        if not self._is_default:\n            return None\n\n        data = {\n            ATTR_OVEN_LOWER_TARGET_TEMP: self._wrap_device.oven_lower_target_temp,\n            ATTR_OVEN_UPPER_TARGET_TEMP: self._wrap_device.oven_upper_target_temp,\n            ATTR_OVEN_TEMP_UNIT: self._wrap_device.oven_temp_unit,\n        }\n        features = self._wrap_device.get_features_attributes()\n        data.update(features)\n\n        return data\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/services.yaml",
    "content": "remote_start:\n  name: Remote Start\n  description: Send to ThinQ device the remote start command.\n  target:\n    entity:\n      integration: smartthinq_sensors\n      domain: sensor\n\nwake_up:\n  name: WakeUp\n  description: Send to ThinQ device the wakeup command.\n  target:\n    entity:\n      integration: smartthinq_sensors\n      domain: sensor\n\nset_fan_mode:\n  name: Set fan mode\n  description: Set fan operation for dehumidifier device.\n  target:\n    entity:\n      integration: smartthinq_sensors\n      domain: humidifier\n  fields:\n    fan_mode:\n      name: Fan mode\n      description: New value of fan mode.\n      required: true\n      example: \"low\"\n      selector:\n        text:\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/switch.py",
    "content": "\"\"\"Support for ThinQ device switches.\"\"\"\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass\nfrom datetime import timedelta\nimport logging\nfrom typing import Any, Awaitable, Callable, Tuple\n\nfrom .wideq import (\n    FEAT_ECOFRIENDLY,\n    FEAT_EXPRESSFRIDGE,\n    FEAT_EXPRESSMODE,\n    FEAT_ICEPLUS,\n    WM_DEVICE_TYPES,\n    DeviceType,\n)\n\nfrom homeassistant.components.switch import (\n    SwitchDeviceClass,\n    SwitchEntity,\n    SwitchEntityDescription,\n)\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.const import STATE_OFF, STATE_ON\nfrom homeassistant.core import HomeAssistant\nfrom homeassistant.helpers.entity_platform import AddEntitiesCallback\nfrom homeassistant.helpers.update_coordinator import CoordinatorEntity\n\nfrom . import LGEDevice\nfrom .const import DOMAIN, LGE_DEVICES\nfrom .device_helpers import (\n    STATE_LOOKUP,\n    LGEBaseDevice,\n    get_entity_name,\n    get_multiple_devices_types,\n)\n\n# general sensor attributes\nATTR_POWER_OFF = \"power_off\"\n\nSCAN_INTERVAL = timedelta(seconds=120)\n\n_LOGGER = logging.getLogger(__name__)\n\n\n@dataclass\nclass ThinQSwitchEntityDescription(SwitchEntityDescription):\n    \"\"\"A class that describes ThinQ switch entities.\"\"\"\n\n    available_fn: Callable[[Any], bool] | None = None\n    turn_off_fn: Callable[[Any], Awaitable[None]] | None = None\n    turn_on_fn: Callable[[Any], Awaitable[None]] | None = None\n    value_fn: Callable[[Any], bool] | None = None\n\n\nWASH_DEV_SWITCH: Tuple[ThinQSwitchEntityDescription, ...] = (\n    ThinQSwitchEntityDescription(\n        key=ATTR_POWER_OFF,\n        name=\"Power off\",\n        value_fn=lambda x: x.is_power_on,\n        turn_off_fn=lambda x: x.device.power_off(),\n        available_fn=lambda x: x.is_power_on,\n    ),\n)\nREFRIGERATOR_SWITCH: Tuple[ThinQSwitchEntityDescription, ...] = (\n    ThinQSwitchEntityDescription(\n        key=FEAT_ECOFRIENDLY,\n        name=\"Eco friendly\",\n        icon=\"mdi:gauge-empty\",\n        turn_off_fn=lambda x: x.device.set_eco_friendly(False),\n        turn_on_fn=lambda x: x.device.set_eco_friendly(True),\n        available_fn=lambda x: x.is_power_on,\n    ),\n    ThinQSwitchEntityDescription(\n        key=FEAT_EXPRESSFRIDGE,\n        name=\"Express fridge\",\n        icon=\"mdi:coolant-temperature\",\n        turn_off_fn=lambda x: x.device.set_express_fridge(False),\n        turn_on_fn=lambda x: x.device.set_express_fridge(True),\n        available_fn=lambda x: x.device.set_values_allowed,\n    ),\n    ThinQSwitchEntityDescription(\n        key=FEAT_EXPRESSMODE,\n        name=\"Express mode\",\n        icon=\"mdi:snowflake\",\n        turn_off_fn=lambda x: x.device.set_express_mode(False),\n        turn_on_fn=lambda x: x.device.set_express_mode(True),\n        available_fn=lambda x: x.device.set_values_allowed,\n    ),\n    ThinQSwitchEntityDescription(\n        key=FEAT_ICEPLUS,\n        name=\"Ice plus\",\n        icon=\"mdi:snowflake\",\n        turn_off_fn=lambda x: x.device.set_ice_plus(False),\n        turn_on_fn=lambda x: x.device.set_ice_plus(True),\n        available_fn=lambda x: x.device.set_values_allowed,\n    ),\n)\n\nAC_DUCT_SWITCH = ThinQSwitchEntityDescription(\n    key=\"duct-zone\",\n    name=\"Zone\",\n)\n\n\ndef _switch_exist(lge_device: LGEDevice, switch_desc: ThinQSwitchEntityDescription) -> bool:\n    \"\"\"Check if a switch exist for device.\"\"\"\n    if switch_desc.value_fn is not None:\n        return True\n\n    feature = switch_desc.key\n    if feature in lge_device.available_features:\n        return True\n\n    return False\n\n\nasync def async_setup_entry(\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback\n) -> None:\n    \"\"\"Set up the LGE switch.\"\"\"\n    entry_config = hass.data[DOMAIN]\n    lge_devices = entry_config.get(LGE_DEVICES)\n    if not lge_devices:\n        return\n\n    _LOGGER.debug(\"Starting LGE ThinQ switch setup...\")\n    lge_switch = []\n\n    # add WM devices\n    lge_switch.extend(\n        [\n            LGESwitch(lge_device, switch_desc)\n            for switch_desc in WASH_DEV_SWITCH\n            for lge_device in get_multiple_devices_types(lge_devices, WM_DEVICE_TYPES)\n            if _switch_exist(lge_device, switch_desc)\n        ]\n    )\n\n    # add refrigerators\n    lge_switch.extend(\n        [\n            LGESwitch(lge_device, switch_desc)\n            for switch_desc in REFRIGERATOR_SWITCH\n            for lge_device in lge_devices.get(DeviceType.REFRIGERATOR, [])\n            if _switch_exist(lge_device, switch_desc)\n        ]\n    )\n\n    # add AC duct zone switch\n    lge_switch.extend(\n        [\n            LGEDuctSwitch(lge_device, duct_zone)\n            for lge_device in lge_devices.get(DeviceType.AC, [])\n            for duct_zone in lge_device.device.duct_zones\n        ]\n    )\n\n    async_add_entities(lge_switch)\n\n\nclass LGESwitch(CoordinatorEntity, SwitchEntity):\n    \"\"\"Class to control switches for LGE device\"\"\"\n\n    entity_description = ThinQSwitchEntityDescription\n\n    def __init__(\n            self,\n            api: LGEDevice,\n            description: ThinQSwitchEntityDescription,\n    ):\n        \"\"\"Initialize the switch.\"\"\"\n        super().__init__(api.coordinator)\n        self._api = api\n        self._wrap_device = LGEBaseDevice(api)\n        self.entity_description = description\n        self._attr_name = get_entity_name(api, description.key, description.name)\n        self._attr_unique_id = f\"{api.unique_id}-{description.key}-switch\"\n        self._attr_device_class = SwitchDeviceClass.SWITCH\n        self._attr_device_info = api.device_info\n\n    @property\n    def should_poll(self) -> bool:\n        \"\"\"Return True if entity has to be polled for state.\n\n        We overwrite coordinator property default setting because we need\n        to poll to avoid the effect that after changing switch state\n        it is immediately set to prev state. The async_update method here\n        do nothing because the real update is performed by coordinator.\n        \"\"\"\n        return True\n\n    async def async_update(self) -> None:\n        \"\"\"Update the entity.\n\n        This is a fake update, real update is done by coordinator.\n        \"\"\"\n        return\n\n    @property\n    def is_on(self):\n        \"\"\"Return the state of the switch.\"\"\"\n        ret_val = self._get_switch_state()\n        if ret_val is None:\n            return False\n        if isinstance(ret_val, bool):\n            return ret_val\n        if ret_val == STATE_ON:\n            return True\n        state = STATE_LOOKUP.get(ret_val, STATE_OFF)\n        return state == STATE_ON\n\n    @property\n    def available(self) -> bool:\n        \"\"\"Return True if entity is available.\"\"\"\n        is_avail = True\n        if self.entity_description.available_fn is not None:\n            is_avail = self.entity_description.available_fn(self._wrap_device)\n        return self._api.available and is_avail\n\n    async def async_turn_off(self, **kwargs):\n        \"\"\"Turn the entity off.\"\"\"\n        if self.entity_description.turn_off_fn is None:\n            raise NotImplementedError()\n        if self.is_on:\n            await self.entity_description.turn_off_fn(self._wrap_device)\n\n    async def async_turn_on(self, **kwargs):\n        \"\"\"Turn the entity on.\"\"\"\n        if self.entity_description.turn_on_fn is None:\n            raise NotImplementedError()\n        if not self.is_on:\n            await self.entity_description.turn_on_fn(self._wrap_device)\n\n    def _get_switch_state(self):\n        \"\"\"Get current switch state\"\"\"\n        if self.entity_description.value_fn is not None:\n            return self.entity_description.value_fn(self._wrap_device)\n\n        if self._api.state:\n            feature = self.entity_description.key\n            return self._api.state.device_features.get(feature)\n\n        return None\n\n\nclass LGEDuctSwitch(LGESwitch):\n    \"\"\"Class to control switches for LGE AC duct device\"\"\"\n\n    def __init__(\n            self,\n            api: LGEDevice,\n            duct_zone: str\n    ):\n        \"\"\"Initialize the switch.\"\"\"\n        super().__init__(api, AC_DUCT_SWITCH)\n        self._attr_name += f\" {duct_zone}\"\n        self._attr_unique_id += f\"-{duct_zone}\"\n        self._zone = duct_zone\n\n    @property\n    def is_on(self):\n        \"\"\"Return the state of the switch.\"\"\"\n        return self._wrap_device.device.get_duct_zone(self._zone)\n\n    @property\n    def available(self) -> bool:\n        \"\"\"Return True if entity is available.\"\"\"\n        return (\n            self._wrap_device.device.is_duct_zone_enabled(self._zone)\n            and self._wrap_device.is_power_on\n        )\n\n    async def async_turn_off(self, **kwargs):\n        \"\"\"Turn the entity off.\"\"\"\n        self._wrap_device.device.set_duct_zone(self._zone, False)\n\n    async def async_turn_on(self, **kwargs):\n        \"\"\"Turn the entity on.\"\"\"\n        self._wrap_device.device.set_duct_zone(self._zone, True)\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/translations/el.json",
    "content": "{\n    \"config\": {\n        \"abort\": {\n            \"single_instance_allowed\": \"Επιτρέπεται μόνο μία διαμόρφωση των αισθητήρων LGE SmartThinQ.\",\n            \"no_smartthinq_devices\": \"Δεν βρέθηκαν συσκευές SmartThinQ. Η ρύθμιση στοιχείων ματαιώθηκε.\",\n            \"unsupported_version\": \"Αυτή η ενσωμάτωση απαιτεί τουλάχιστον την έκδοση HomeAssistant {req_ver}, εκτελείτε την έκδοση {run_ver}.\"\n        },\n        \"error\": {\n            \"error_url\": \"Σφάλμα κατά την ανάκτηση της διεύθυνσης URL σύνδεσης από το ThinQ.\",\n            \"invalid_region\": \"Μη έγκυρη μορφή περιοχής.\",\n            \"invalid_language\": \"Μη έγκυρη μορφή γλώσσας.\",\n            \"invalid_url\": \"Μη έγκυρη διεύθυνση URL ανακατεύθυνσης. Βεβαιωθείτε ότι έχετε πρόσβαση στην εφαρμογή ThinQ στο τηλέφωνό σας. Μπορείτε να λάβετε υποστήριξη [εδώ](https://git.io/JTjid).\",\n            \"invalid_credentials\": \"Δεν είναι έγκυρα τα διαπιστευτήρια SmartThinQ. Δοκιμάστε ξανά και βεβαιωθείτε ότι έχετε πρόσβαση στην εφαρμογή ThinQ στο τηλέφωνό σας.\",\n            \"no_user_info\": \"Απαιτείται όνομα χρήστη και κωδικός πρόσβασης.\",\n            \"unknown\": \"Άγνωστο σφάλμα.\"\n        },\n        \"step\": {\n            \"user\": {\n                \"data\": {\n                    \"username\": \"Όνομα χρήστη λογαριασμού LG\",\n                    \"password\": \"Κωδικός πρόσβασης\",\n                    \"region\": \"Κωδικός χώρας\",\n                    \"language\": \"Κωδικός γλώσσας\",\n                    \"use_redirect\": \"Χρήση μεθόδου ελέγχου ταυτότητας ανακατεύθυνσης URL\",\n                    \"use_tls_v1\": \"Βίαιη χρήση του πρωτοκόλλου TLSv1 (μερικές φορές απαιτείται)\",\n                    \"exclude_dh\": \"Μην χρησιμοποιείτε το DH cypher (σε περίπτωση σφάλματος όπου 'το κλειδί dh είναι πολύ μικρό΄)\"\n                },\n                \"description\": \"Επιλέξτε τις πληροφορίες τοπικής προσαρμογής του λογαριασμού SmartThinQ.\",\n                \"title\": \"SmartThinQ LGE Αισθητήρες\"\n            },\n            \"url\": {\n                \"data\": {\n                    \"login_url\": \"Διεύθυνση URL σύνδεσης SmartThinQ\",\n                    \"callback_url\": \"Διεύθυνση URL ανακατεύθυνσης\"\n                },\n                \"description\": \"Χρησιμοποιήστε τη διεύθυνση URL στο πρώτο πεδίο για να εκτελέσετε τη σύνδεση στο SmartThinQ με τα διαπιστευτήριά σας και, στη συνέχεια, επικολλήστε τη διεύθυνση URL όπου το πρόγραμμα περιήγησης ανακατευθύνεται μετά τη σύνδεση στο δεύτερο πεδίο. Μοιραστείτε σχόλια σχετικά με τη ρύθμιση [εδώ](https://git.io/JU166).\",\n                \"title\": \"Αισθητήρες LGE SmartThinQ - Έλεγχος ταυτότητας\"\n            },\n            \"token\": {\n                \"data\": {\n                    \"token\": \"Ανανέωση διακριτικού\"\n                },\n                \"description\": \"Αποθηκεύστε το διακριτικό που δημιουργήθηκε για μελλοντική χρήση και, στη συνέχεια, επιβεβαιώστε για να ολοκληρώσετε τη ρύθμιση παραμέτρων.\",\n                \"title\": \"SmartThinQ LGE Αισθητήρες - Νέο διακριτικό ανανέωσης\"\n            }\n        },\n        \"title\": \"SmartThinQ LGE Αισθητήρες\"\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/translations/en.json",
    "content": "{\n    \"config\": {\n        \"abort\": {\n            \"single_instance_allowed\": \"Only a single configuration of SmartThinQ LGE Sensors is allowed.\",\n            \"no_smartthinq_devices\": \"No SmartThinQ devices found. Component setup aborted.\",\n            \"unsupported_version\": \"This integration require at least HomeAssistant version {req_ver}, you are running version {run_ver}.\",\n            \"reconfigured\": \"Configuration successfully completed.\"\n        },\n        \"error\": {\n            \"error_url\": \"Error retrieving login URL from ThinQ.\",\n            \"invalid_region\": \"Invalid region format.\",\n            \"invalid_language\": \"Invalid language format.\",\n            \"invalid_url\": \"Invalid redirection URL. Make sure you can access the ThinQ app on your phone. You can get support [over here](https://git.io/JTjid).\",\n            \"invalid_credentials\": \"Invalid SmartThinQ credentials. Try again, and make sure you can access the ThinQ app on your phone.\",\n            \"invalid_config\": \"Found invalid configuration, please reconfigure.\",\n            \"no_user_info\": \"User Name and Password are required.\",\n            \"unknown\": \"Unknown error.\"\n        },\n        \"step\": {\n            \"user\": {\n                \"data\": {\n                    \"username\": \"LG account user name\",\n                    \"password\": \"Password\",\n                    \"region\": \"Country Code\",\n                    \"language\": \"Language Code\",\n                    \"use_redirect\": \"Use URL redirect authentication method\",\n                    \"use_tls_v1\": \"Force use of protocol TLSv1 (sometimes required)\",\n                    \"exclude_dh\": \"Do not use DH cypher (in case 'dh key too small' error)\"\n                },\n                \"description\": \"Insert your SmartThinQ account access information.\",\n                \"title\": \"SmartThinQ LGE Sensors\"\n            },\n            \"url\": {\n                \"data\": {\n                    \"login_url\": \"SmartThinQ login URL\",\n                    \"callback_url\": \"Redirection URL\"\n                },\n                \"description\": \"Use the URL in the first field to perform login to SmartThinQ with your credentials, then paste the URL where the browser is redirected after the login in the second field. Share feedback about your setup [here](https://git.io/JU166).\",\n                \"title\": \"SmartThinQ LGE Sensors - Authentication\"\n            },\n            \"token\": {\n                \"data\": {\n                    \"token\": \"Refresh Token\"\n                },\n                \"description\": \"Save the generated token for future use, then confirm to complete the configuration.\",\n                \"title\": \"SmartThinQ LGE Sensors - New refresh token\"\n            }\n        },\n        \"title\": \"SmartThinQ LGE Sensors\"\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/translations/es.json",
    "content": "{\n    \"config\": {\n        \"abort\": {\n            \"single_instance_allowed\": \"Solo se permite una única configuración de SmartThinQ LGE Sensors.\",\n            \"no_smartthinq_devices\": \"No se encontraron dispositivos SmartThinQ. Configuración del componente interrumpida.\"\n        },\n        \"error\": {\n            \"invalid_region\": \"Formato de país no válido.\",\n            \"invalid_language\": \"Formato de idioma no válido.\",\n            \"invalid_url\": \"URL de redireccionamiento no válida\",\n            \"invalid_credentials\": \"Credenciales SmartThinQ no válidas.\"\n        },\n        \"step\": {\n            \"user\": {\n                \"data\": {\n                    \"region\": \"Codigo País\",\n                    \"language\": \"Codigo Idioma\"\n                },\n                \"description\": \"Inserta tu información de acceso a SmartThinQ.\",\n                \"title\": \"Sensores SmartThinQ LGE\"\n            },\n            \"url\": {\n                \"data\": {\n                    \"login_url\": \"URL de acceso a SmartThinQ\",\n                    \"callback_url\": \"URL de redireccionamiento\"\n                },\n                \"description\": \"Usa la URL en el primer campo para iniciar sesión con tus credenciales de SmartThinQ, luego pega en el segundo campo la URL donde se redirige el navegador después del inicio de sesión.\",\n                \"title\": \"Sensores SmartThinQ LGE - Autenticación\"\n            },\n            \"token\": {\n                \"data\": {\n                    \"token\": \"Actualización de Token\"\n                },\n                \"description\": \"Guarda el Token generado para futuros usos, luego confirma para completar la configuración.\",\n                \"title\": \"Sensores SmartThinQ LGE - Nueva Actualización de Token\"\n            }\n        },\n        \"title\": \"Sensores SmartThinQ LGE\"\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/translations/hr.json",
    "content": "{\n    \"config\": {\n        \"abort\": {\n            \"single_instance_allowed\": \"Samo jedna konfiguracija SmartThinQ LGE Senzora je dozvoljena.\",\n            \"no_smartthinq_devices\": \"Nije pronađen niti jedan SmartThinQ uređaj. Podešavanje komponente prekinuto.\"\n        },\n        \"error\": {\n            \"invalid_region\": \"Neispravan format regije.\",\n            \"invalid_language\": \"Neispravan format jezika.\",\n            \"invalid_url\": \"Neispravan URL za preusmjeravanje.\",\n            \"invalid_credentials\": \"Neispravne SmartThinQ vjerodajnice.\"\n        },\n        \"step\": {\n            \"user\": {\n                \"data\": {\n                    \"region\": \"Kod za državu\",\n                    \"language\": \"Kod za jezik\"\n                },\n                \"description\": \"Odaberite podatke o lokalizaciji računa SmartThinQ.\",\n                \"title\": \"SmartThinQ LGE Senzori\"\n            },\n            \"url\": {\n                \"data\": {\n                    \"login_url\": \"SmartThinQ URL za prijavu\",\n                    \"callback_url\": \"URL za preusmjeravanje\"\n                },\n                \"description\": \"Upotrijebite URL u prvom polju za prijavu na SmartThinQ sa svojim vjerodajnicama, a u drugo polje zalijepite URL na koji je preglednik preusmjeren poslije prijave. Podijelite povratne informacije o svojoj implementaciji [ovdje](https://git.io/JU166).\",\n                \"title\": \"SmartThinQ LGE Senzori - autentikacija\"\n            },\n            \"token\": {\n                \"data\": {\n                    \"token\": \"Osvježite token\"\n                },\n                \"description\": \"Sačuvajte token za buduću upotrebu, a zatim potvrdite da biste dovršili konfiguraciju.\",\n                \"title\": \"SmartThinQ LGE Senzori - Novi token\"\n            }\n        },\n        \"title\": \"SmartThinQ LGE Senzoris\"\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/translations/it.json",
    "content": "{\n    \"config\": {\n        \"abort\": {\n            \"single_instance_allowed\": \"E' consentita una sola configurazione di SmartThinQ LGE Sensors.\",\n            \"no_smartthinq_devices\": \"Nessun dispositivo SmartThinQ trovato. Component setup interrotto.\",\n            \"unsupported_version\": \"Questa integrazione richiede almeno la versione {req_ver} di HomeAssistant, tu stai usando la versione {run_ver}.\",\n            \"reconfigured\": \"Configurazione completata con successo.\"\n        },\n        \"error\": {\n            \"error_url\": \"Errore nel recuperare l'URL di login da ThinQ.\",\n            \"invalid_region\": \"Formato Paese non valido.\",\n            \"invalid_language\": \"Formato lingua non valido.\",\n            \"invalid_url\": \"URL di reindizzamento non valido. Accertati di poter accedere alla app ThinQ sul tuo smartphone. Puoi richiedere supporto [qui](https://git.io/JTjid).\",\n            \"invalid_credentials\": \"Credenziali SmartThinQ non valide. Riprova, assicurandoti prima di poter accedere dall'applicazione ThinQ sul telefono\",\n            \"invalid_config\": \"Trovata configurazione non valida, riconfigurare.\",\n            \"no_user_info\": \"Nome utente e Password sono campi obbligatori.\",\n            \"unknown\": \"Errore sconosciuto.\"\n        },\n        \"step\": {\n            \"user\": {\n                \"data\": {\n                    \"username\": \"Nome utente account LG\",\n                    \"password\": \"Password\",\n                    \"region\": \"Codice Paese\",\n                    \"language\": \"Codice Lingua\",\n                    \"use_redirect\": \"Usa l'autenticazione basata su URL redirect\",\n                    \"use_tls_v1\": \"Forza l'utilizzo del protocollo TLSv1 (richiesto in alcuni casi)\",\n                    \"exclude_dh\": \"Non utilizzare il cypher DH (in caso di errore 'dh key too small')\"\n                },\n                \"description\": \"Imposta le informazioni di accesso del tuo account SmartThinQ.\",\n                \"title\": \"SmartThinQ LGE Sensors\"\n            },\n            \"url\": {\n                \"data\": {\n                    \"login_url\": \"URL di accesso a SmartThinQ\",\n                    \"callback_url\": \"URL di reindirizzamento\"\n                },\n                \"description\": \"Utilizzare l'URL del primo campo per eseguire l'accesso con le proprie credenziali a SmartThinQ, poi incollare l'URL in cui si viene reindirizzati con il browser dopo l'accesso nel secondo campo. Condividi i tuoi feedback sul setup [qui](https://git.io/JU166).\",\n                \"title\": \"SmartThinQ LGE Sensors - Autenticazione\"\n            },\n            \"token\": {\n                \"data\": {\n                    \"token\": \"Aggiornamento Token\"\n                },\n                \"description\": \"Salvare il token generato per un utilizzo futuro, poi confermare per completare la configurazione.\",\n                \"title\": \"SmartThinQ LGE Sensors - Nuovo aggiornamento Token\"\n            }\n        },\n        \"title\": \"SmartThinQ LGE Sensors\"\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/translations/nb.json",
    "content": "{\n    \"config\": {\n        \"abort\": {\n            \"single_instance_allowed\": \"Only a single configuration of SmartThinQ LGE Sensors is allowed.\",\n            \"no_smartthinq_devices\": \"No SmartThinQ devices found. Component setup aborted.\"\n        },\n        \"error\": {\n            \"invalid_region\": \"Ugyldig regionformat.\",\n            \"invalid_language\": \"Ugyldig språkformat.\",\n            \"invalid_url\": \"Ugyldig URL for omdirigering.\",\n            \"invalid_credentials\": \"Ugyldige SmartThinQ-legitimasjoner.\"\n        },\n        \"step\": {\n            \"user\": {\n                \"data\": {\n                    \"region\": \"Landskode\",\n                    \"language\": \"Språkkode\"\n                },\n                \"description\": \"Velg informasjon om lokalisering av SmartThinQ-kontoen.\",\n                \"title\": \"SmartThinQ LGE-sensorer\"\n            },\n            \"url\": {\n                \"data\": {\n                    \"login_url\": \"SmartThinQ påloggings-URL\",\n                    \"callback_url\": \"Omadresserings-URL\"\n                },\n                \"description\": \"Bruk URL-en i det første feltet for å utføre pålogging til SmartThinQ med legitimasjonen din, og lim deretter inn URL-en der nettleseren blir omdirigert etter påloggingen i det andre feltet. Del tilbakemeldinger om oppsettet ditt [her] (https://git.io/JU166).\",\n                \"title\": \"SmartThinQ LGE-sensorer - autentisering\"\n            },\n            \"token\": {\n                \"data\": {\n                    \"token\": \"Oppdater Token\"\n                },\n                \"description\": \"Lagre det genererte tokenet for fremtidig bruk, og bekreft deretter for å fullføre konfigurasjonen.\",\n                \"title\": \"SmartThinQ LGE-sensorer - Nytt oppdateringstoken\"\n            }\n        },\n        \"title\": \"SmartThinQ LGE-sensorer\"\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/translations/pl.json",
    "content": "{\r\n    \"config\": {\r\n        \"abort\": {\r\n            \"single_instance_allowed\": \"Dozwolona jest tylko jedna konfiguracja SmartThinQ LGE Sensors.\",\r\n            \"no_smartthinq_devices\": \"Nie znaleziono urządzeń SmartThinQ. Konfiguracja komponentów przerwana.\",\r\n            \"unsupported_version\": \"Ta integracja wymaga HomeAssistanta w wersji co najmniej {req_ver}, Ty używasz wersji {run_ver}.\"\r\n        },\r\n        \"error\": {\r\n            \"error_url\": \"Błąd pobierania URL logowania z ThinQ.\",\r\n            \"invalid_region\": \"Nieprawidłowy format regionu.\",\r\n            \"invalid_language\": \"Niepoprawny format języka.\",\r\n            \"invalid_url\": \"Nieprawidłowy adres URL przekierowania.\",\r\n            \"invalid_credentials\": \"Nieprawidłowe dane logowania SmartThinQ.\",\r\n            \"no_user_info\": \"Nazwa użytkownika i hasło są wymagane.\"\r\n        },\r\n        \"step\": {\r\n            \"user\": {\r\n                \"data\": {\r\n                    \"username\": \"Nazwa użytkownika konta LG\",\r\n                    \"password\": \"Hasło\",\r\n                    \"region\": \"Region\",\r\n                    \"language\": \"Język\",\r\n                    \"use_redirect\": \"Użyj metody bezpośredniego uwierzytelniania\",\r\n                    \"use_tls_v1\": \"Wymuś użycie protokołu TLSv1 (czasami wymagane)\",\r\n                    \"exclude_dh\": \"Nie używaj szyfrowania DH (w przypadku błędu 'dh key too small')\"\r\n                },\r\n                \"description\": \"Podaj swoje ustawienia regionalne dla SmartThinQ.\",\r\n                \"title\": \"SmartThinQ LGE Sensors\"\r\n            },\r\n            \"url\": {\r\n                \"data\": {\r\n                    \"login_url\": \"SmartThinQ login URL\",\r\n                    \"callback_url\": \"URL przekierowania\"\r\n                },\r\n                \"description\": \"Skopiuj i otwórz adres URL z pierwszego pola, aby zalogować się do SmartThinQ, a następnie po zalogowaniu się na konto SmartThinQ w drugie pole wklej adres URL, na który przekierowała cię przeglądarka po zalogowaniu.\",\r\n                \"title\": \"SmartThinQ LGE Sensors - Autoryzacja\"\r\n            },\r\n            \"token\": {\r\n                \"data\": {\r\n                    \"token\": \"Odśwież Token\"\r\n                },\r\n                \"description\": \"Zapisz wygenerowany token, może się przydać w przyszłości, a następnie potwierdź, aby zakończyć konfigurację.\",\r\n                \"title\": \"SmartThinQ LGE Sensors - token został zapisany\"\r\n            }\r\n        },\r\n        \"title\": \"SmartThinQ LGE Sensors\"\r\n    }\r\n}\r\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/translations/pt-BR.json",
    "content": "{\n    \"config\": {\n        \"abort\": {\n            \"single_instance_allowed\": \"É apenas permitida uma única configuração do SmartThinQ LGE Sensors.\",\n            \"no_smartthinq_devices\": \"Não foram encontrados dispositivos SmartThinQ. Configuração do componente interrompida.\",\n            \"unsupported_version\": \"Esta integração requer pelo menos a versão {req_ver} do HomeAssistant, você está na versão {run_ver}.\"\n        },\n        \"error\": {\n            \"error_url\": \"Ocorreu um erro na tentativa de encontrar o endereço ThinQ.\",\n            \"invalid_region\": \"Formato de região inválido.\",\n            \"invalid_language\": \"Formato de idioma inválido.\",\n            \"invalid_url\": \"URL de redirecionamento inválida. Certifique-se que tem acesso ao app ThinQ através do smartphone. Pode obter ajuda [aqui](https://git.io/JTjid).\",\n            \"invalid_credentials\": \"Credenciais SmartThinQ inválidas. Tente novamente e verifique se você tem acesso ao app ThinQ em seu smartphone.\",\n            \"no_user_info\": \"Usuário e Senha são requiridos.\"\n        },\n        \"step\": {\n            \"user\": {\n                \"data\": {\n                    \"username\": \"Usuário da conta LG\",\n                    \"password\": \"Senha\",\n                    \"region\": \"Código do país\",\n                    \"language\": \"Código do idioma\",\n                    \"use_redirect\": \"Use o método de autenticação de URL de redirecionamento.\",\n                    \"use_tls_v1\": \"Forçar o uso do protocolo TLSv1 (às vezes é necessário)\",\n                    \"exclude_dh\": \"Não use a cifra DH (no caso de erro 'chave dh muito pequena')\"\n                },\n                \"description\": \"Selecione a localização da sua conta SmartThinQ.\",\n                \"title\": \"SmartThinQ LGE Sensors\"\n            },\n            \"url\": {\n                \"data\": {\n                    \"login_url\": \"URL de login SmartThinQ\",\n                    \"callback_url\": \"URL de redirecionamento\"\n                },\n                \"description\": \"Copie a URL do primeiro campo no seu navegador e use para efetuar login na sua conta SmartThinQ. Após o login será redirecionado, copie a URL de redirecionamento do navegador e cole no segundo campo. Deixe seu feedback [aqui](https://git.io/JU166).\",\n                \"title\": \"SmartThinQ LGE Sensors - Autenticação\"\n            },\n            \"token\": {\n                \"data\": {\n                    \"token\": \"Atualizar Token\"\n                },\n                \"description\": \"Guarde o token gerado para uso no futuro e confirme para concluir a configuração.\",\n                \"title\": \"SmartThinQ LGE Sensors - Atualizar token\"\n            }\n        },\n        \"title\": \"SmartThinQ LGE Sensors\"\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/translations/pt.json",
    "content": "{\n    \"config\": {\n        \"abort\": {\n            \"single_instance_allowed\": \"Apenas é permitida uma única configuração do SmartThinQ LGE Sensors.\",\n            \"no_smartthinq_devices\": \"Não foram encontrados dispositivos SmartThinQ. Configuração do componente interrompida.\",\n            \"unsupported_version\": \"Esta integração requer pelo menos a versão {req_ver} do HomeAssistant. A versão atual é {run_ver}.\"\n        },\n        \"error\": {\n            \"error_url\": \"Ocorreu um erro a tentar encontrar o endereço do ThinQ.\",\n            \"invalid_region\": \"Formato da região inválido.\",\n            \"invalid_language\": \"Formato do idioma inválido.\",\n            \"invalid_url\": \"URL de redirecionamento inválido. Certifique-se que tem acesso à app ThinQ através do smartphone. Pode obter ajuda [aqui](https://git.io/JTjid).\",\n            \"invalid_credentials\": \"Credenciais SmartThinQ inválidas. Tente novamente e verifique se tem acesso à app ThinQ através do seu smartphone.\",\n            \"no_user_info\": \"O nome de utilizador e senha são obrigatórios.\"\n        },\n        \"step\": {\n            \"user\": {\n                \"data\": {\n                    \"username\": \"Utilizador da conta LG\",\n                    \"password\": \"Senha\",\n                    \"region\": \"Código do país\",\n                    \"language\": \"Código do idioma\",\n                    \"use_redirect\": \"Use o método de autenticação de URL de redirecionamento.\",\n                    \"use_tls_v1\": \"Forçar o uso do protocolo TLSv1 (às vezes é necessário)\",\n                    \"exclude_dh\": \"Não use a cifra DH (no caso de erro 'chave dh muito pequena')\"\n                },\n                \"description\": \"Selecione a localização da sua conta SmartThinQ.\",\n                \"title\": \"Sensores SmartThinQ LGE\"\n            },\n            \"url\": {\n                \"data\": {\n                    \"login_url\": \"URL de acesso ao SmartThinQ\",\n                    \"callback_url\": \"URL de redirecionamento\"\n                },\n                \"description\": \"Usar o URL do primeiro campo para iniciar sessão no SmartThinQ, depois colar no segundo campo o URL para onde foi redirecionado depois da autenticação efectuada. Deixe a sua opinião acerca da configuração [aqui](https://git.io/JU166).\",\n                \"title\": \"SmartThinQ LGE Sensors - Autenticação\"\n            },\n            \"token\": {\n                \"data\": {\n                    \"token\": \"Atualizar Token\"\n                },\n                \"description\": \"Guarde o token gerado para uso futuro e confirmar para concluir a configuração.\",\n                \"title\": \"SmartThinQ LGE Sensors - Actualizar token\"\n            }\n        },\n        \"title\": \"Sensores SmartThinQ LGE\"\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/translations/sk.json",
    "content": "{\n    \"config\": {\n        \"abort\": {\n            \"single_instance_allowed\": \"Len jedna konfigurácia SmartThinQ LGE Sensors je povolená.\",\n            \"no_smartthinq_devices\": \"Nebolo nájdené SmartThinQ zariadenie. Nastavenie komponentu bolo prerušené.\"\n        },\n        \"error\": {\n            \"invalid_region\": \"Nesprávny formát regiónu.\",\n            \"invalid_language\": \"Nesprávny formát jazyka.\",\n            \"invalid_url\": \"Nesrpávna spätná URL.\",\n            \"invalid_credentials\": \"Nesprávne SmartThinQ prihlásenie.\"\n        },\n        \"step\": {\n            \"user\": {\n                \"data\": {\n                    \"region\": \"Región\",\n                    \"language\": \"Jazyk\"\n                },\n                \"description\": \"Vyplňte informácie o prístupe k SmartThinQ.\",\n                \"title\": \"SmartThinQ LGE Sensors\"\n            },\n            \"url\": {\n                \"data\": {\n                    \"login_url\": \"SmartThinQ prihlasovacie URL\",\n                    \"callback_url\": \"Spätná URL\"\n                },\n                \"description\": \"Pomocou URL v prvom poli vykonajte prihlásenie do SmartThinQ a potom vložte URL, ktorú vygeneruje prehliadač po prihlásení, do druhého poľa.\",\n                \"title\": \"SmartThinQ LGE Sensors - Autentifikácia\"\n            },\n            \"token\": {\n                \"data\": {\n                    \"token\": \"Obnovte Token\"\n                },\n                \"description\": \"Uložte vygenerovaný token pre budúce použitie a potom potvrďte dokončenie konfigurácie.\",\n                \"title\": \"SmartThinQ LGE Sensors - Nový obnovený token\"\n            }\n        },\n        \"title\": \"SmartThinQ LGE Sensors\"\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/wideq/__init__.py",
    "content": "\"\"\"\nSupport for LG SmartThinQ device.\n\"\"\"\n\nfrom .const import *\nfrom .device_info import *\nfrom .factory import get_lge_device\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/wideq/ac.py",
    "content": "\"\"\"------------------for AC\"\"\"\nimport enum\nimport logging\nfrom typing import Optional\n\nfrom .const import (\n    FEAT_ENERGY_CURRENT,\n    FEAT_HUMIDITY,\n    FEAT_HOT_WATER_TEMP,\n    FEAT_IN_WATER_TEMP,\n    FEAT_OUT_WATER_TEMP,\n    UNIT_TEMP_CELSIUS,\n    UNIT_TEMP_FAHRENHEIT,\n)\nfrom .core_exceptions import InvalidRequestError\nfrom .device import Device, DeviceStatus\n\nLABEL_VANE_HSTEP = \"@AC_MAIN_WIND_DIRECTION_STEP_LEFT_RIGHT_W\"\nLABEL_VANE_VSTEP = \"@AC_MAIN_WIND_DIRECTION_STEP_UP_DOWN_W\"\nLABEL_VANE_HSWING = \"@AC_MAIN_WIND_DIRECTION_SWING_LEFT_RIGHT_W\"\nLABEL_VANE_VSWING = \"@AC_MAIN_WIND_DIRECTION_SWING_UP_DOWN_W\"\nLABEL_VANE_SWIRL = \"@AC_MAIN_WIND_DIRECTION_SWIRL_W\"\n\nCTRL_BASIC = [\"Control\", \"basicCtrl\"]\nCTRL_WIND_DIRECTION = [\"Control\", \"wDirCtrl\"]\nCTRL_MISC = [\"Control\", \"miscCtrl\"]\n# CTRL_SETTING = \"settingInfo\"\n# CTRL_WIND_MODE = \"wModeCtrl\"\n\nDUCT_ZONE_V1 = \"DuctZone\"\nDUCT_ZONE_V1_TYPE = \"DuctZoneType\"\nSTATE_POWER_V1 = \"InOutInstantPower\"\n\nSUPPORT_OPERATION_MODE = [\"SupportOpMode\", \"support.airState.opMode\"]\nSUPPORT_WIND_STRENGTH = [\"SupportWindStrength\", \"support.airState.windStrength\"]\nSUPPORT_RAC_SUBMODE = [\"SupportRACSubMode\", \"support.racSubMode\"]\n\nSTATE_OPERATION = [\"Operation\", \"airState.operation\"]\nSTATE_OPERATION_MODE = [\"OpMode\", \"airState.opMode\"]\nSTATE_CURRENT_TEMP = [\"TempCur\", \"airState.tempState.current\"]\nSTATE_HOT_WATER_TEMP = [\"HotWaterTempCur\", \"airState.tempState.hotWaterCurrent\"]\nSTATE_IN_WATER_TEMP = [\"WaterInTempCur\", \"airState.tempState.inWaterCurrent\"]\nSTATE_OUT_WATER_TEMP = [\"WaterTempCur\", \"airState.tempState.outWaterCurrent\"]\nSTATE_TARGET_TEMP = [\"TempCfg\", \"airState.tempState.target\"]\nSTATE_WIND_STRENGTH = [\"WindStrength\", \"airState.windStrength\"]\nSTATE_WDIR_HSTEP = [\"WDirHStep\", \"airState.wDir.hStep\"]\nSTATE_WDIR_VSTEP = [\"WDirVStep\", \"airState.wDir.vStep\"]\nSTATE_WDIR_HSWING = [\"WDirLeftRight\", \"airState.wDir.leftRight\"]\nSTATE_WDIR_VSWING = [\"WDirUpDown\", \"airState.wDir.upDown\"]\nSTATE_POWER = [STATE_POWER_V1, \"airState.energy.onCurrent\"]\nSTATE_HUMIDITY = [\"SensorHumidity\", \"airState.humidity.current\"]\nSTATE_DUCT_ZONE = [\"ZoneControl\", \"airState.ductZone.state\"]\n\nCMD_STATE_OPERATION = [CTRL_BASIC, \"Set\", STATE_OPERATION]\nCMD_STATE_OP_MODE = [CTRL_BASIC, \"Set\", STATE_OPERATION_MODE]\nCMD_STATE_TARGET_TEMP = [CTRL_BASIC, \"Set\", STATE_TARGET_TEMP]\nCMD_STATE_WIND_STRENGTH = [CTRL_BASIC, \"Set\", STATE_WIND_STRENGTH]\nCMD_STATE_WDIR_HSTEP = [CTRL_WIND_DIRECTION, \"Set\", STATE_WDIR_HSTEP]\nCMD_STATE_WDIR_VSTEP = [CTRL_WIND_DIRECTION, \"Set\", STATE_WDIR_VSTEP]\nCMD_STATE_WDIR_HSWING = [CTRL_WIND_DIRECTION, \"Set\", STATE_WDIR_HSWING]\nCMD_STATE_WDIR_VSWING = [CTRL_WIND_DIRECTION, \"Set\", STATE_WDIR_VSWING]\nCMD_STATE_DUCT_ZONES = [CTRL_MISC, \"Set\", [DUCT_ZONE_V1, \"airState.ductZone.control\"]]\n\nCMD_ENABLE_EVENT_V2 = [\"allEventEnable\", \"Set\", \"airState.mon.timeout\"]\n\n# STATE_CURRENT_HUMIDITY_V2 = \"airState.humidity.current\"\n# STATE_AUTODRY_MODE_V2 = \"airState.miscFuncState.autoDry\"\n# STATE_AIRCLEAN_MODE_V2 = \"airState.wMode.airClean\"\n# STATE_FILTER_MAX_TIME_V2 = \"airState.filterMngStates.maxTime\"\n# STATE_FILTER_REMAIN_TIME_V2 = \"airState.filterMngStates.useTime\"\n\nDEFAULT_MIN_TEMP = 16\nDEFAULT_MAX_TEMP = 30\nMIN_AWHP_TEMP = 5\nMAX_AWHP_TEMP = 80\n\nTEMP_STEP_WHOLE = 1.0\nTEMP_STEP_HALF = 0.5\n\nADD_FEAT_POLL_INTERVAL = 300  # 5 minutes\n\nZONE_OFF = \"0\"\nZONE_ON = \"1\"\nZONE_ST_CUR = \"current\"\nZONE_ST_NEW = \"new\"\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass ACOp(enum.Enum):\n    \"\"\"Whether a device is on or off.\"\"\"\n\n    OFF = \"@AC_MAIN_OPERATION_OFF_W\"\n    ON = \"@AC_MAIN_OPERATION_ON_W\"\n    RIGHT_ON = \"@AC_MAIN_OPERATION_RIGHT_ON_W\"  # Right fan only.\n    LEFT_ON = \"@AC_MAIN_OPERATION_LEFT_ON_W\"  # Left fan only.\n    ALL_ON = \"@AC_MAIN_OPERATION_ALL_ON_W\"  # Both fans (or only fan) on.\n\n\nclass ACMode(enum.Enum):\n    \"\"\"The operation mode for an AC/HVAC device.\"\"\"\n\n    COOL = \"@AC_MAIN_OPERATION_MODE_COOL_W\"\n    DRY = \"@AC_MAIN_OPERATION_MODE_DRY_W\"\n    FAN = \"@AC_MAIN_OPERATION_MODE_FAN_W\"\n    HEAT = \"@AC_MAIN_OPERATION_MODE_HEAT_W\"\n    ACO = \"@AC_MAIN_OPERATION_MODE_ACO_W\"\n    AI = \"@AC_MAIN_OPERATION_MODE_AI_W\"\n    AIRCLEAN = \"@AC_MAIN_OPERATION_MODE_AIRCLEAN_W\"\n    AROMA = \"@AC_MAIN_OPERATION_MODE_AROMA_W\"\n    ENERGY_SAVING = \"@AC_MAIN_OPERATION_MODE_ENERGY_SAVING_W\"\n    ENERGY_SAVER = \"@AC_MAIN_OPERATION_MODE_ENERGY_SAVER_W\"\n\n\nclass ACFanSpeed(enum.Enum):\n    \"\"\"The fan speed for an AC/HVAC device.\"\"\"\n\n    SLOW = \"@AC_MAIN_WIND_STRENGTH_SLOW_W\"\n    SLOW_LOW = \"@AC_MAIN_WIND_STRENGTH_SLOW_LOW_W\"\n    LOW = \"@AC_MAIN_WIND_STRENGTH_LOW_W\"\n    LOW_MID = \"@AC_MAIN_WIND_STRENGTH_LOW_MID_W\"\n    MID = \"@AC_MAIN_WIND_STRENGTH_MID_W\"\n    MID_HIGH = \"@AC_MAIN_WIND_STRENGTH_MID_HIGH_W\"\n    HIGH = \"@AC_MAIN_WIND_STRENGTH_HIGH_W\"\n    POWER = \"@AC_MAIN_WIND_STRENGTH_POWER_W\"\n    AUTO = \"@AC_MAIN_WIND_STRENGTH_AUTO_W\"\n    NATURE = \"@AC_MAIN_WIND_STRENGTH_NATURE_W\"\n    R_LOW = \"@AC_MAIN_WIND_STRENGTH_LOW_RIGHT_W\"\n    R_MID = \"@AC_MAIN_WIND_STRENGTH_MID_RIGHT_W\"\n    R_HIGH = \"@AC_MAIN_WIND_STRENGTH_HIGH_RIGHT_W\"\n    L_LOW = \"@AC_MAIN_WIND_STRENGTH_LOW_LEFT_W\"\n    L_MID = \"@AC_MAIN_WIND_STRENGTH_MID_LEFT_W\"\n    L_HIGH = \"@AC_MAIN_WIND_STRENGTH_HIGH_LEFT_W\"\n\n\nclass ACVStepMode(enum.Enum):\n    \"\"\"The vertical step mode for an AC/HVAC device.\n\n    Blades are numbered vertically from 1 (topmost)\n    to 6.\n\n    All is 100.\n    \"\"\"\n\n    Off = \"@OFF\"\n    Top = \"@1\"\n    MiddleTop1 = \"@2\"\n    MiddleTop2 = \"@3\"\n    MiddleBottom2 = \"@4\"\n    MiddleBottom1 = \"@5\"\n    Bottom = \"@6\"\n    Swing = \"@100\"\n\n\nclass ACHStepMode(enum.Enum):\n    \"\"\"The horizontal step mode for an AC/HVAC device.\n    Blades are numbered horizontally from 1 (leftmost)\n    to 5.\n    Left half goes from 1-3, and right half goes from\n    3-5.\n    All is 100.\n    \"\"\"\n\n    Off = \"@OFF\"\n    Left = \"@1\"\n    MiddleLeft = \"@2\"\n    Center = \"@3\"\n    MiddleRight = \"@4\"\n    Right = \"@5\"\n    LeftHalf = \"@13\"\n    RightHalf = \"@35\"\n    Swing = \"@100\"\n\n\nclass ACSwingMode(enum.Enum):\n    \"\"\"The swing mode for an AC/HVAC device.\"\"\"\n\n    SwingOff = \"@OFF\"\n    SwingOn = \"@ON\"\n\n\nclass AirConditionerDevice(Device):\n    \"\"\"A higher-level interface for a AC.\"\"\"\n\n    def __init__(self, client, device, temp_unit=UNIT_TEMP_CELSIUS):\n        super().__init__(client, device, AirConditionerStatus(self, None))\n        self._temperature_unit = (\n            UNIT_TEMP_FAHRENHEIT if temp_unit == UNIT_TEMP_FAHRENHEIT else UNIT_TEMP_CELSIUS\n        )\n        self._is_air_to_water = None\n        self._supported_operation = None\n        self._supported_op_modes = None\n        self._supported_fan_speeds = None\n        self._supported_horizontal_steps = None\n        self._supported_horizontal_swings = None\n        self._supported_vertical_steps = None\n        self._supported_vertical_swings = None\n        self._temperature_range = None\n        self._temperature_step = TEMP_STEP_WHOLE\n        self._duct_zones = {}\n\n        self._current_power = 0\n        self._current_power_supported = True\n\n        self._f2c_map = None\n        self._c2f_map = None\n\n    def _f2c(self, value):\n        \"\"\"Get a dictionary mapping Fahrenheit to Celsius temperatures for\n        this device.\n\n        Unbelievably, SmartThinQ devices have their own lookup tables\n        for mapping the two temperature scales. You can get *close* by\n        using a real conversion between the two temperature scales, but\n        precise control requires using the custom LUT.\n        \"\"\"\n        if self._temperature_unit == UNIT_TEMP_CELSIUS:\n            return value\n\n        if self._f2c_map is None:\n            mapping = self.model_info.value(\"TempFahToCel\").options\n            self._f2c_map = {int(f): c for f, c in mapping.items()}\n        return self._f2c_map.get(value, value)\n\n    def conv_temp_unit(self, value):\n        \"\"\"Get an inverse mapping from Celsius to Fahrenheit.\n\n        Just as unbelievably, this is not exactly the inverse of the\n        `f2c` map. There are a few values in this reverse mapping that\n        are not in the other.\n        \"\"\"\n        if self._temperature_unit == UNIT_TEMP_CELSIUS:\n            return float(value)\n\n        if self._c2f_map is None:\n            mapping = self.model_info.value(\"TempCelToFah\").options\n            out = {}\n            for c, f in mapping.items():\n                try:\n                    c_num = int(c)\n                except ValueError:\n                    c_num = float(c)\n                out[c_num] = f\n            self._c2f_map = out\n        return self._c2f_map.get(value, value)\n\n    def _adjust_temperature_step(self, target_temp):\n        if self._temperature_step != TEMP_STEP_WHOLE:\n            return\n        if target_temp is None:\n            return\n        if int(target_temp) != target_temp:\n            self._temperature_step = TEMP_STEP_HALF\n\n    def _get_supported_operations(self):\n        \"\"\"Get a list of the ACOp Operations the device supports.\"\"\"\n\n        if not self._supported_operation:\n            key = self._get_state_key(STATE_OPERATION)\n            mapping = self.model_info.value(key).options\n            self._supported_operation = [ACOp(o) for o in mapping.values()]\n        return self._supported_operation\n\n    def _supported_on_operation(self):\n        \"\"\"Get the most correct \"On\" operation the device supports.\n        :raises ValueError: If ALL_ON is not supported, but there are\n            multiple supported ON operations. If a model raises this,\n            its behaviour needs to be determined so this function can\n            make a better decision.\n        \"\"\"\n\n        operations = self._get_supported_operations()\n\n        # This ON operation appears to be supported in newer AC models\n        if ACOp.ALL_ON in operations:\n            return ACOp.ALL_ON\n\n        # This ON operation appears to be supported in V2 AC models, to check\n        if ACOp.ON in operations:\n            return ACOp.ON\n\n        # Older models, or possibly just the LP1419IVSM, do not support ALL_ON,\n        # instead advertising only a single operation of RIGHT_ON.\n        # Thus, if there's only one ON operation, we use that.\n        single_op = [op for op in operations if op != ACOp.OFF]\n        if len(single_op) == 1:\n            return single_op[0]\n\n        # Hypothetically, the API could return multiple ON operations, neither\n        # of which are ALL_ON. This will raise in that case, as we don't know\n        # what that model will expect us to do to turn everything on.\n        # Or, this code will never actually be reached! We can only hope. :)\n        raise ValueError(\n            f\"could not determine correct 'on' operation:\"\n            f\" too many reported operations: '{str(operations)}'\"\n        )\n\n    def _get_temperature_range(self):\n        \"\"\"Get valid temperature range for model.\"\"\"\n\n        if not self._temperature_range:\n            if not self.model_info:\n                return None\n\n            if self.is_air_to_water:\n                min_temp = MIN_AWHP_TEMP\n                max_temp = MAX_AWHP_TEMP\n            else:\n                key = self._get_state_key(STATE_TARGET_TEMP)\n                range_info = self.model_info.value(key)\n                if not range_info:\n                    min_temp = DEFAULT_MIN_TEMP\n                    max_temp = DEFAULT_MAX_TEMP\n                else:\n                    min_temp = min(range_info.min, DEFAULT_MIN_TEMP)\n                    max_temp = max(range_info.max, DEFAULT_MAX_TEMP)\n            self._temperature_range = [min_temp, max_temp]\n        return self._temperature_range\n\n    def _is_vane_mode_supported(self, mode):\n        \"\"\"Check if a specific vane mode is supported.\"\"\"\n        supp_key = self._get_state_key(SUPPORT_RAC_SUBMODE)\n        if not self.model_info.enum_value(supp_key, mode):\n            return False\n        return True\n\n    def is_duct_zone_enabled(self, zone: str) -> bool:\n        \"\"\"Get if a specific zone is enabled\"\"\"\n        return zone in self._duct_zones\n\n    def get_duct_zone(self, zone: str) -> bool:\n        \"\"\"Get the status for a specific zone\"\"\"\n        if zone not in self._duct_zones:\n            return False\n        cur_zone = self._duct_zones[zone]\n        if ZONE_ST_NEW in cur_zone:\n            return cur_zone[ZONE_ST_NEW] == ZONE_ON\n        return cur_zone[ZONE_ST_CUR] == ZONE_ON\n\n    def set_duct_zone(self, zone: str, status: bool):\n        \"\"\"Set the status for a specific zone\"\"\"\n        if zone not in self._duct_zones:\n            return\n        self._duct_zones[zone][ZONE_ST_NEW] = ZONE_ON if status else ZONE_OFF\n\n    @property\n    def duct_zones(self) -> list:\n        \"\"\"Return a list of available duct zones\"\"\"\n        return [key for key in self._duct_zones]\n\n    async def update_duct_zones(self):\n        \"\"\"Update the current duct zones status.\"\"\"\n        states = await self._get_duct_zones()\n        if not states:\n            return\n\n        duct_zones = {}\n        send_update = False\n        for zone, state in states.items():\n            cur_status = state[ZONE_ST_CUR]\n            new_status = None\n            if zone in self._duct_zones:\n                new_status = self._duct_zones[zone].get(ZONE_ST_NEW)\n                if new_status and new_status != cur_status:\n                    send_update = True\n            duct_zones[zone] = {ZONE_ST_CUR: new_status or cur_status}\n\n        self._duct_zones = duct_zones\n        if send_update:\n            await self._set_duct_zones(duct_zones)\n\n    async def _get_duct_zones(self) -> dict:\n        \"\"\"Get the status of the zones (for ThinQ1 only zone configured).\n\n        return value is a dict with this format:\n        - key: The zone index. A string containing a number\n        - value: another dict with:\n            - key: \"current\"\n            - value: \"1\" if zone is ON else \"0\"\n        \"\"\"\n\n        # first check if duct is supported\n        if not self._status:\n            return {}\n\n        duct_state = -1\n        # duct zone type is available only for some ThinQ1 devices\n        if not self._status.duct_zones_type:\n            duct_state = self._status.duct_zones_state\n        if not duct_state:\n            return {}\n\n        # get real duct zones states\n        \"\"\"\n        For device that provide duct_state in payload we transform \n        the value in the status in binary and than we create the result. \n        We always have 8 duct zone.\n        \"\"\"\n        if duct_state > 0:\n            bin_arr = [x for x in reversed(f\"{duct_state:08b}\")]\n            return {\n                str(v+1): {ZONE_ST_CUR: k} for v, k in enumerate(bin_arr)\n            }\n\n        \"\"\"\n        For ThinQ1 devices result is a list of dicts with these keys:\n        - \"No\": The zone index. A string containing a number,\n          starting from 1.\n        - \"Cfg\": Whether the zone is enabled. A string, either \"1\" or\n          \"0\".\n        - \"State\": Whether the zone is open. Also \"1\" or \"0\".\n        \"\"\"\n        zones = await self._get_config(DUCT_ZONE_V1)\n        return {\n            zone[\"No\"]: {ZONE_ST_CUR: zone[\"State\"]}\n            for zone in zones\n            if zone[\"Cfg\"] == \"1\"\n        }\n\n    async def _set_duct_zones(self, zones: dict):\n        \"\"\"Turn off or on the device's zones.\n\n        The `zones` parameter is the same returned by _get_duct_zones()\n        \"\"\"\n\n        # Ensure at least one zone is enabled: we can't turn all zones\n        # off simultaneously.\n        on_count = sum(int(zone[ZONE_ST_CUR]) for zone in zones.values())\n        if on_count == 0:\n            _LOGGER.warning(\"Turn off all duct zones is not allowed\")\n            return\n\n        zone_cmd = \"/\".join(\n            f\"{key}_{value[ZONE_ST_CUR]}\" for key, value in zones.items()\n        )\n        keys = self._get_cmd_keys(CMD_STATE_DUCT_ZONES)\n        await self.set(keys[0], keys[1], key=keys[2], value=zone_cmd)\n\n    @property\n    def is_air_to_water(self):\n        \"\"\"Return if is a Air To Water device.\"\"\"\n        if self._is_air_to_water is None:\n            if not self.model_info:\n                return False\n            self._is_air_to_water = self.model_info.model_type == \"AWHP\"\n        return self._is_air_to_water\n\n    @property\n    def op_modes(self):\n        \"\"\"Return a list of available operation modes.\"\"\"\n        if self._supported_op_modes is None:\n            key = self._get_state_key(SUPPORT_OPERATION_MODE)\n            if not self.model_info.is_enum_type(key):\n                self._supported_op_modes = []\n                return []\n            mapping = self.model_info.value(key).options\n            mode_list = [e.value for e in ACMode]\n            self._supported_op_modes = [ACMode(o).name for o in mapping.values() if o in mode_list]\n        return self._supported_op_modes\n\n    @property\n    def fan_speeds(self):\n        \"\"\"Return a list of available fan speeds.\"\"\"\n        if self._supported_fan_speeds is None:\n            key = self._get_state_key(SUPPORT_WIND_STRENGTH)\n            if not self.model_info.is_enum_type(key):\n                self._supported_fan_speeds = []\n                return []\n            mapping = self.model_info.value(key).options\n            mode_list = [e.value for e in ACFanSpeed]\n            self._supported_fan_speeds = [ACFanSpeed(o).name for o in mapping.values() if o in mode_list]\n        return self._supported_fan_speeds\n\n    @property\n    def horizontal_step_modes(self):\n        \"\"\"Return a list of available horizontal step modes.\"\"\"\n        if self._supported_horizontal_steps is None:\n            self._supported_horizontal_steps = []\n            if not self._is_vane_mode_supported(LABEL_VANE_HSTEP):\n                return []\n\n            key = self._get_state_key(STATE_WDIR_HSTEP)\n            values = self.model_info.value(key)\n            if not hasattr(values, \"options\"):\n                return []\n\n            mapping = values.options\n            mode_list = [e.value for e in ACHStepMode]\n            self._supported_horizontal_steps = [\n                ACHStepMode(o).name for o in mapping.values() if o in mode_list\n            ]\n        return self._supported_horizontal_steps\n\n    @property\n    def horizontal_swing_modes(self):\n        \"\"\"Return a list of available horizontal swing modes.\"\"\"\n        if self._supported_horizontal_swings is None:\n            self._supported_horizontal_swings = []\n            if len(self.horizontal_step_modes) > 0:\n                return []\n            if not self._is_vane_mode_supported(LABEL_VANE_HSWING):\n                return []\n\n            self._supported_horizontal_swings = [e.name for e in ACSwingMode]\n        return self._supported_horizontal_swings\n\n    @property\n    def vertical_step_modes(self):\n        \"\"\"Return a list of available vertical step modes.\"\"\"\n        if self._supported_vertical_steps is None:\n            self._supported_vertical_steps = []\n            if not self._is_vane_mode_supported(LABEL_VANE_VSTEP):\n                return []\n\n            key = self._get_state_key(STATE_WDIR_VSTEP)\n            values = self.model_info.value(key)\n            if not hasattr(values, \"options\"):\n                return []\n\n            mapping = values.options\n            mode_list = [e.value for e in ACVStepMode]\n            self._supported_vertical_steps = [\n                ACVStepMode(o).name for o in mapping.values() if o in mode_list\n            ]\n        return self._supported_vertical_steps\n\n    @property\n    def vertical_swing_modes(self):\n        \"\"\"Return a list of available vertical swing modes.\"\"\"\n        if self._supported_vertical_swings is None:\n            self._supported_vertical_swings = []\n            if len(self.vertical_step_modes) > 0:\n                return []\n            if not self._is_vane_mode_supported(LABEL_VANE_VSWING):\n                return []\n\n            self._supported_vertical_swings = [e.name for e in ACSwingMode]\n        return self._supported_vertical_swings\n\n    @property\n    def temperature_unit(self):\n        \"\"\"Return the unit used for temperature.\"\"\"\n        return self._temperature_unit\n\n    @property\n    def target_temperature_step(self):\n        \"\"\"Return target temperature step used.\"\"\"\n        return self._temperature_step\n\n    @property\n    def target_temperature_min(self):\n        \"\"\"Return minimum value for target temperature.\"\"\"\n        temp_range = self._get_temperature_range()\n        if not temp_range:\n            return None\n        return self.conv_temp_unit(temp_range[0])\n\n    @property\n    def target_temperature_max(self):\n        \"\"\"Return maximum value for target temperature.\"\"\"\n        temp_range = self._get_temperature_range()\n        if not temp_range:\n            return None\n        return self.conv_temp_unit(temp_range[1])\n\n    async def power(self, turn_on):\n        \"\"\"Turn on or off the device (according to a boolean).\"\"\"\n\n        op = self._supported_on_operation() if turn_on else ACOp.OFF\n        keys = self._get_cmd_keys(CMD_STATE_OPERATION)\n        op_value = self.model_info.enum_value(keys[2], op.value)\n        await self.set(keys[0], keys[1], key=keys[2], value=op_value)\n\n    async def set_op_mode(self, mode):\n        \"\"\"Set the device's operating mode to an `OpMode` value.\"\"\"\n\n        if mode not in self.op_modes:\n            raise ValueError(f\"Invalid operating mode: {mode}\")\n        keys = self._get_cmd_keys(CMD_STATE_OP_MODE)\n        mode_value = self.model_info.enum_value(keys[2], ACMode[mode].value)\n        await self.set(keys[0], keys[1], key=keys[2], value=mode_value)\n\n    async def set_fan_speed(self, speed):\n        \"\"\"Set the fan speed to a value from the `ACFanSpeed` enum.\"\"\"\n\n        if speed not in self.fan_speeds:\n            raise ValueError(f\"Invalid fan speed: {speed}\")\n        keys = self._get_cmd_keys(CMD_STATE_WIND_STRENGTH)\n        speed_value = self.model_info.enum_value(keys[2], ACFanSpeed[speed].value)\n        await self.set(keys[0], keys[1], key=keys[2], value=speed_value)\n\n    async def set_horizontal_step_mode(self, mode):\n        \"\"\"Set the horizontal step to a value from the `ACHStepMode` enum.\"\"\"\n\n        if mode not in self.horizontal_step_modes:\n            raise ValueError(f\"Invalid horizontal step mode: {mode}\")\n        keys = self._get_cmd_keys(CMD_STATE_WDIR_HSTEP)\n        step_mode = self.model_info.enum_value(keys[2], ACHStepMode[mode].value)\n        await self.set(keys[0], keys[1], key=keys[2], value=step_mode)\n\n    async def set_horizontal_swing_mode(self, mode):\n        \"\"\"Set the horizontal swing to a value from the `ACSwingMode` enum.\"\"\"\n\n        if mode not in self.horizontal_swing_modes:\n            raise ValueError(f\"Invalid horizontal swing mode: {mode}\")\n        keys = self._get_cmd_keys(CMD_STATE_WDIR_HSWING)\n        swing_mode = self.model_info.enum_value(keys[2], ACSwingMode[mode].value)\n        await self.set(keys[0], keys[1], key=keys[2], value=swing_mode)\n\n    async def set_vertical_step_mode(self, mode):\n        \"\"\"Set the vertical step to a value from the `ACVStepMode` enum.\"\"\"\n\n        if mode not in self.vertical_step_modes:\n            raise ValueError(f\"Invalid vertical step mode: {mode}\")\n        keys = self._get_cmd_keys(CMD_STATE_WDIR_VSTEP)\n        step_mode = self.model_info.enum_value(keys[2], ACVStepMode[mode].value)\n        await self.set(keys[0], keys[1], key=keys[2], value=step_mode)\n\n    async def set_vertical_swing_mode(self, mode):\n        \"\"\"Set the vertical swing to a value from the `ACSwingMode` enum.\"\"\"\n\n        if mode not in self.vertical_swing_modes:\n            raise ValueError(f\"Invalid vertical swing mode: {mode}\")\n        keys = self._get_cmd_keys(CMD_STATE_WDIR_VSWING)\n        swing_mode = self.model_info.enum_value(keys[2], ACSwingMode[mode].value)\n        await self.set(keys[0], keys[1], key=keys[2], value=swing_mode)\n\n    async def set_target_temp(self, temp):\n        \"\"\"Set the device's target temperature in Celsius degrees.\"\"\"\n\n        range_info = self._get_temperature_range()\n        conv_temp = self._f2c(temp)\n        if range_info and not (range_info[0] <= conv_temp <= range_info[1]):\n            raise ValueError(f\"Target temperature out of range: {temp}\")\n        keys = self._get_cmd_keys(CMD_STATE_TARGET_TEMP)\n        await self.set(keys[0], keys[1], key=keys[2], value=conv_temp)\n\n    async def get_power(self):\n        \"\"\"Get the instant power usage in watts of the whole unit\"\"\"\n        if not self._current_power_supported:\n            return 0\n\n        try:\n            value = await self._get_config(STATE_POWER_V1)\n            return value[STATE_POWER_V1]\n        except (ValueError, InvalidRequestError):\n            # Device does not support whole unit instant power usage\n            self._current_power_supported = False\n            return 0\n\n    async def set(self, ctrl_key, command, *, key=None, value=None, data=None, ctrl_path=None):\n        \"\"\"Set a device's control for `key` to `value`.\"\"\"\n        await super().set(\n            ctrl_key, command, key=key, value=value, data=data, ctrl_path=ctrl_path\n        )\n        if self._status:\n            self._status.update_status(key, value)\n\n    def reset_status(self):\n        self._status = AirConditionerStatus(self, None)\n        return self._status\n\n    async def _get_device_info(self):\n        \"\"\"Call additional method to get device information for API v1.\n\n        Called by 'device_poll' method using a lower poll rate\n        \"\"\"\n        # this command is to get power usage on V1 device\n        if not self.is_air_to_water:\n            self._current_power = await self.get_power()\n\n    async def _pre_update_v2(self):\n        \"\"\"Call additional methods before data update for v2 API.\"\"\"\n        # this command is to get power and temp info on V2 device\n        keys = self._get_cmd_keys(CMD_ENABLE_EVENT_V2)\n        await self.set(keys[0], keys[1], key=keys[2], value=\"70\", ctrl_path=\"control\")\n\n    async def poll(self) -> Optional[\"AirConditionerStatus\"]:\n        \"\"\"Poll the device's current state.\"\"\"\n\n        res = await self.device_poll(\n            thinq1_additional_poll=ADD_FEAT_POLL_INTERVAL,\n            thinq2_query_device=True,\n        )\n        if not res:\n            return None\n        if self._should_poll and not self.is_air_to_water:\n            res[STATE_POWER_V1] = self._current_power\n\n        self._status = AirConditionerStatus(self, res)\n        if self._temperature_step == TEMP_STEP_WHOLE:\n            self._adjust_temperature_step(self._status.target_temp)\n\n        # manage duct devices, does nothing if not ducted\n        try:\n            await self.update_duct_zones()\n        except Exception as ex:\n            _LOGGER.exception(\"Duct zone control failed\", exc_info=ex)\n\n        return self._status\n\n\nclass AirConditionerStatus(DeviceStatus):\n    \"\"\"Higher-level information about a AC's current status.\"\"\"\n\n    def __init__(self, device, data):\n        super().__init__(device, data)\n        self._operation = None\n\n    def _str_to_temp(self, s):\n        \"\"\"Convert a string to either an `int` or a `float` temperature.\"\"\"\n        temp = self._str_to_num(s)\n        if not temp:  # value 0 return None!!!\n            return None\n        return self._device.conv_temp_unit(temp)\n\n    def _get_operation(self):\n        if self._operation is None:\n            key = self._get_state_key(STATE_OPERATION)\n            operation = self.lookup_enum(key, True)\n            if not operation:\n                return None\n            self._operation = operation\n        try:\n            return ACOp(self._operation)\n        except ValueError:\n            return None\n\n    def update_status(self, key, value):\n        if not super().update_status(key, value):\n            return False\n        if key in STATE_OPERATION:\n            self._operation = None\n        return True\n\n    @property\n    def is_on(self):\n        op = self._get_operation()\n        if not op:\n            return False\n        return op != ACOp.OFF\n\n    @property\n    def operation(self):\n        op = self._get_operation()\n        if not op:\n            return None\n        return op.name\n\n    @property\n    def operation_mode(self):\n        key = self._get_state_key(STATE_OPERATION_MODE)\n        if (value := self.lookup_enum(key, True)) is None:\n            return None\n        try:\n            return ACMode(value).name\n        except ValueError:\n            return None\n\n    @property\n    def fan_speed(self):\n        key = self._get_state_key(STATE_WIND_STRENGTH)\n        if (value := self.lookup_enum(key, True)) is None:\n            return None\n        try:\n            return ACFanSpeed(value).name\n        except ValueError:\n            return None\n\n    @property\n    def horizontal_step_mode(self):\n        key = self._get_state_key(STATE_WDIR_HSTEP)\n        if (value := self.lookup_enum(key, True)) is None:\n            return None\n        try:\n            return ACHStepMode(value).name\n        except ValueError:\n            return None\n\n    @property\n    def horizontal_swing_mode(self):\n        key = self._get_state_key(STATE_WDIR_HSWING)\n        if (value := self.lookup_enum(key, True)) is None:\n            return None\n        try:\n            return ACSwingMode(value).name\n        except ValueError:\n            return None\n\n    @property\n    def vertical_step_mode(self):\n        key = self._get_state_key(STATE_WDIR_VSTEP)\n        if (value := self.lookup_enum(key, True)) is None:\n            return None\n        try:\n            return ACVStepMode(value).name\n        except ValueError:\n            return None\n\n    @property\n    def vertical_swing_mode(self):\n        key = self._get_state_key(STATE_WDIR_VSWING)\n        if (value := self.lookup_enum(key, True)) is None:\n            return None\n        try:\n            return ACSwingMode(value).name\n        except ValueError:\n            return None\n\n    @property\n    def current_temp(self):\n        key = self._get_state_key(STATE_CURRENT_TEMP)\n        return self._str_to_temp(self._data.get(key))\n\n    @property\n    def target_temp(self):\n        key = self._get_state_key(STATE_TARGET_TEMP)\n        return self._str_to_temp(self._data.get(key))\n\n    @property\n    def hot_water_current_temp(self):\n        if not self.is_info_v2:\n            return None\n        key = self._get_state_key(STATE_HOT_WATER_TEMP)\n        value = self._str_to_temp(self._data.get(key))\n        return self._update_feature(\n            FEAT_HOT_WATER_TEMP, value, False\n        )\n\n    @property\n    def in_water_current_temp(self):\n        if not self.is_info_v2:\n            return None\n        key = self._get_state_key(STATE_IN_WATER_TEMP)\n        value = self._str_to_temp(self._data.get(key))\n        return self._update_feature(\n            FEAT_IN_WATER_TEMP, value, False\n        )\n\n    @property\n    def out_water_current_temp(self):\n        if not self.is_info_v2:\n            return None\n        key = self._get_state_key(STATE_OUT_WATER_TEMP)\n        value = self._str_to_temp(self._data.get(key))\n        return self._update_feature(\n            FEAT_OUT_WATER_TEMP, value, False\n        )\n\n    @property\n    def energy_current(self):\n        key = self._get_state_key(STATE_POWER)\n        value = self._data.get(key)\n        if value is not None and self.is_info_v2 and not self.is_on:\n            # decrease power for V2 device that always return 50 when standby\n            new_value = self.to_int_or_none(value)\n            if new_value and new_value <= 50:\n                value = 5.0\n        return self._update_feature(\n            FEAT_ENERGY_CURRENT, value, False\n        )\n\n    @property\n    def humidity(self):\n        key = self._get_state_key(STATE_HUMIDITY)\n        if (value := self.to_int_or_none(self.lookup_range(key))) is None:\n            return None\n        if value >= 100:\n            value = value / 10\n        return self._update_feature(\n            FEAT_HUMIDITY, value, False\n        )\n\n    @property\n    def duct_zones_state(self):\n        key = self._get_state_key(STATE_DUCT_ZONE)\n        return self.to_int_or_none(self._data.get(key))\n\n    @property\n    def duct_zones_type(self):\n        if self.is_info_v2:\n            return None\n        return self.to_int_or_none(self._data.get(DUCT_ZONE_V1_TYPE))\n\n    def _update_features(self):\n        _ = [\n            self.hot_water_current_temp,\n            self.in_water_current_temp,\n            self.out_water_current_temp,\n            self.energy_current,\n            self.humidity,\n        ]\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/wideq/airpurifier.py",
    "content": "\"\"\"------------------for Air Purifier\"\"\"\nimport enum\nimport logging\nfrom typing import Optional\n\nfrom .const import (\n    FEAT_FILTER_BOTTOM_LIFE,\n    FEAT_FILTER_DUST_LIFE,\n    FEAT_FILTER_MAIN_LIFE,\n    FEAT_FILTER_MID_LIFE,\n    FEAT_FILTER_TOP_LIFE,\n    FEAT_HUMIDITY,\n    FEAT_PM1,\n    FEAT_PM10,\n    FEAT_PM25,\n)\nfrom .device import Device, DeviceStatus\n\nCTRL_BASIC = [\"Control\", \"basicCtrl\"]\n\nSUPPORT_OPERATION_MODE = [\"SupportOpMode\", \"support.airState.opMode\"]\nSUPPORT_WIND_STRENGTH = [\"SupportWindStrength\", \"support.airState.windStrength\"]\nSUPPORT_MFILTER = [\"SupportMFilter\", \"support.mFilter\"]\nSUPPORT_AIR_POLUTION = [\"SupportAirPolution\", \"support.airPolution\"]\n\nSTATE_OPERATION = [\"Operation\", \"airState.operation\"]\nSTATE_OPERATION_MODE = [\"OpMode\", \"airState.opMode\"]\nSTATE_WIND_STRENGTH = [\"WindStrength\", \"airState.windStrength\"]\n\nSTATE_HUMIDITY = [\"SensorHumidity\", \"airState.humidity.current\"]\nSTATE_PM1 = [\"SensorPM1\", \"airState.quality.PM1\"]\nSTATE_PM10 = [\"SensorPM10\", \"airState.quality.PM10\"]\nSTATE_PM25 = [\"SensorPM2\", \"airState.quality.PM2\"]\n\nCMD_STATE_OPERATION = [CTRL_BASIC, \"Set\", STATE_OPERATION]\nCMD_STATE_OP_MODE = [CTRL_BASIC, \"Set\", STATE_OPERATION_MODE]\nCMD_STATE_WIND_STRENGTH = [CTRL_BASIC, \"Set\", STATE_WIND_STRENGTH]\n\nFILTER_TYPES = [\n    [\n        FEAT_FILTER_MAIN_LIFE,\n        [\"FilterUse\", \"airState.filterMngStates.useTime\"],\n        [\"FilterMax\", \"airState.filterMngStates.maxTime\"],\n        None,\n    ],\n    [\n        FEAT_FILTER_TOP_LIFE,\n        [\"FilterUseTop\", \"airState.filterMngStates.useTimeTop\"],\n        [\"FilterMaxTop\", \"airState.filterMngStates.maxTimeTop\"],\n        [\"@SUPPORT_TOP_HUMIDIFILTER\", \"@SUPPORT_D_PLUS_TOP\"],\n    ],\n    [\n        FEAT_FILTER_MID_LIFE,\n        [\"FilterUseMiddle\", \"airState.filterMngStates.useTimeMiddle\"],\n        [\"FilterMaxMiddle\", \"airState.filterMngStates.maxTimeMiddle\"],\n        [\"@SUPPORT_MID_HUMIDIFILTER\"],\n    ],\n    [\n        FEAT_FILTER_BOTTOM_LIFE,\n        [\"FilterUseBottom\", \"airState.filterMngStates.useTimeBottom\"],\n        [\"FilterMaxBottom\", \"airState.filterMngStates.maxTimeBottom\"],\n        [\"@SUPPORT_BOTTOM_PREFILTER\"],\n    ],\n    [\n        FEAT_FILTER_DUST_LIFE,\n        [\"FilterUseDeodor\", \"airState.filterMngStates.useTimeDeodor\"],\n        [\"FilterMaxDeodor\", \"airState.filterMngStates.maxTimeDeodor\"],\n        [\"@SUPPORT_BOTTOM_DUSTCOLLECTION\"],\n    ],\n]\n\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass AirPurifierOp(enum.Enum):\n    \"\"\"Whether a device is on or off.\"\"\"\n\n    OFF = \"@operation_off\"\n    ON = \"@operation_on\"\n\n\nclass AirPurifierMode(enum.Enum):\n    \"\"\"The operation mode for a AirPurifier device.\"\"\"\n\n    CLEAN = \"@AP_MAIN_MID_OPMODE_CLEAN_W\"\n    SILENT = \"@AP_MAIN_MID_OPMODE_SILENT_W\"\n    HUMIDITY = \"@AP_MAIN_MID_OPMODE_HUMIDITY_W\"\n\n\nclass AirPurifierFanSpeed(enum.Enum):\n    \"\"\"The fan speed for a AirPurifier device.\"\"\"\n\n    LOW = \"@AP_MAIN_MID_WINDSTRENGTH_LOW_W\"\n    MID = \"@AP_MAIN_MID_WINDSTRENGTH_MID_W\"\n    HIGH = \"@AP_MAIN_MID_WINDSTRENGTH_HIGH_W\"\n\n\nclass AirPurifierFanPreset(enum.Enum):\n    \"\"\"The fan preset for a AirPurifier device.\"\"\"\n\n    POWER = \"@AP_MAIN_MID_WINDSTRENGTH_POWER_W\"\n    AUTO = \"@AP_MAIN_MID_WINDSTRENGTH_AUTO_W\"\n\n\nclass AirPurifierDevice(Device):\n    \"\"\"A higher-level interface for a Air Purifier.\"\"\"\n\n    def __init__(self, client, device):\n        super().__init__(client, device, AirPurifierStatus(self, None))\n        self._supported_op_modes = None\n        self._supported_fan_speeds = None\n        self._supported_fan_presets = None\n\n    @property\n    def op_modes(self):\n        \"\"\"Return a list of available operation modes.\"\"\"\n        if self._supported_op_modes is None:\n            key = self._get_state_key(SUPPORT_OPERATION_MODE)\n            if not self.model_info.is_enum_type(key):\n                self._supported_op_modes = []\n                return []\n            mapping = self.model_info.value(key).options\n            mode_list = [e.value for e in AirPurifierMode]\n            self._supported_op_modes = [AirPurifierMode(o).name for o in mapping.values() if o in mode_list]\n        return self._supported_op_modes\n\n    @property\n    def fan_speeds(self):\n        \"\"\"Return a list of available fan speeds.\"\"\"\n        if self._supported_fan_speeds is None:\n            key = self._get_state_key(SUPPORT_WIND_STRENGTH)\n            if not self.model_info.is_enum_type(key):\n                self._supported_fan_speeds = []\n                self._supported_fan_presets = []\n                return []\n            mapping = self.model_info.value(key).options\n            mode_list = [e.value for e in AirPurifierFanSpeed]\n            preset_list = [e.value for e in AirPurifierFanPreset]\n            self._supported_fan_speeds = [AirPurifierFanSpeed(o).name for o in mapping.values() if o in mode_list]\n            self._supported_fan_presets = [AirPurifierFanPreset(o).name for o in mapping.values() if o in preset_list]\n        return self._supported_fan_speeds\n\n    @property\n    def fan_presets(self):\n        \"\"\"Return a list of available fan presets.\"\"\"\n        if self._supported_fan_presets is None:\n            _ = self.fan_speeds\n        return self._supported_fan_presets\n\n    async def power(self, turn_on):\n        \"\"\"Turn on or off the device (according to a boolean).\"\"\"\n\n        op = AirPurifierOp.ON if turn_on else AirPurifierOp.OFF\n        keys = self._get_cmd_keys(CMD_STATE_OPERATION)\n        op_value = self.model_info.enum_value(keys[2], op.value)\n        await self.set(keys[0], keys[1], key=keys[2], value=op_value)\n\n    async def set_op_mode(self, mode):\n        \"\"\"Set the device's operating mode to an `OpMode` value.\"\"\"\n\n        if mode not in self.op_modes:\n            raise ValueError(f\"Invalid operating mode: {mode}\")\n        keys = self._get_cmd_keys(CMD_STATE_OP_MODE)\n        mode_value = self.model_info.enum_value(keys[2], AirPurifierMode[mode].value)\n        await self.set(keys[0], keys[1], key=keys[2], value=mode_value)\n\n    async def set_fan_speed(self, speed):\n        \"\"\"Set the fan speed to a value from the `AirPurifierFanSpeed` enum.\"\"\"\n\n        if speed not in self.fan_speeds:\n            raise ValueError(f\"Invalid fan speed: {speed}\")\n        keys = self._get_cmd_keys(CMD_STATE_WIND_STRENGTH)\n        speed_value = self.model_info.enum_value(keys[2], AirPurifierFanSpeed[speed].value)\n        await self.set(keys[0], keys[1], key=keys[2], value=speed_value)\n\n    async def set_fan_preset(self, preset):\n        \"\"\"Set the fan preset to a value from the `AirPurifierFanPreset` enum.\"\"\"\n\n        if preset not in self.fan_presets:\n            raise ValueError(f\"Invalid fan preset: {preset}\")\n        keys = self._get_cmd_keys(CMD_STATE_WIND_STRENGTH)\n        speed_value = self.model_info.enum_value(keys[2], AirPurifierFanPreset[preset].value)\n        await self.set(keys[0], keys[1], key=keys[2], value=speed_value)\n\n    async def set(self, ctrl_key, command, *, key=None, value=None, data=None, ctrl_path=None):\n        \"\"\"Set a device's control for `key` to `value`.\"\"\"\n        await super().set(\n            ctrl_key, command, key=key, value=value, data=data, ctrl_path=ctrl_path\n        )\n        if key is not None and self._status:\n            self._status.update_status(key, value)\n\n    def reset_status(self):\n        self._status = AirPurifierStatus(self, None)\n        return self._status\n\n    async def poll(self) -> Optional[\"AirPurifierStatus\"]:\n        \"\"\"Poll the device's current state.\"\"\"\n\n        res = await self.device_poll()\n        if not res:\n            return None\n\n        self._status = AirPurifierStatus(self, res)\n        return self._status\n\n\nclass AirPurifierStatus(DeviceStatus):\n    \"\"\"Higher-level information about a Air Purifier's current status.\"\"\"\n\n    def __init__(self, device, data):\n        super().__init__(device, data)\n        self._operation = None\n\n    def _get_operation(self):\n        if self._operation is None:\n            key = self._get_state_key(STATE_OPERATION)\n            operation = self.lookup_enum(key, True)\n            if not operation:\n                return None\n            self._operation = operation\n        try:\n            return AirPurifierOp(self._operation)\n        except ValueError:\n            return None\n\n    def update_status(self, key, value):\n        if not super().update_status(key, value):\n            return False\n        if key in STATE_OPERATION:\n            self._operation = None\n        return True\n\n    @property\n    def is_on(self):\n        op = self._get_operation()\n        if not op:\n            return False\n        return op != AirPurifierOp.OFF\n\n    @property\n    def operation(self):\n        op = self._get_operation()\n        if not op:\n            return None\n        return op.name\n\n    @property\n    def operation_mode(self):\n        key = self._get_state_key(STATE_OPERATION_MODE)\n        if (value := self.lookup_enum(key, True)) is None:\n            return None\n        try:\n            return AirPurifierMode(value).name\n        except ValueError:\n            return None\n\n    @property\n    def fan_speed(self):\n        key = self._get_state_key(STATE_WIND_STRENGTH)\n        if (value := self.lookup_enum(key, True)) is None:\n            return None\n        try:\n            return AirPurifierFanSpeed(value).name\n        except ValueError:\n            return None\n\n    @property\n    def fan_preset(self):\n        key = self._get_state_key(STATE_WIND_STRENGTH)\n        if (value := self.lookup_enum(key, True)) is None:\n            return None\n        try:\n            return AirPurifierFanPreset(value).name\n        except ValueError:\n            return None\n\n    @property\n    def current_humidity(self):\n        support_key = self._get_state_key(SUPPORT_AIR_POLUTION)\n        if self._device.model_info.enum_value(support_key, \"@SENSOR_HUMID_SUPPORT\") is None:\n            return None\n        key = self._get_state_key(STATE_HUMIDITY)\n        if (value := self.to_int_or_none(self.lookup_range(key))) is None:\n            return None\n        return self._update_feature(FEAT_HUMIDITY, value, False)\n\n    @property\n    def pm1(self):\n        support_key = self._get_state_key(SUPPORT_AIR_POLUTION)\n        if self._device.model_info.enum_value(support_key, \"@PM1_0_SUPPORT\") is None:\n            return None\n        key = self._get_state_key(STATE_PM1)\n        if (value := self.lookup_range(key)) is None:\n            return None\n        return self._update_feature(FEAT_PM1, value, False)\n\n    @property\n    def pm10(self):\n        support_key = self._get_state_key(SUPPORT_AIR_POLUTION)\n        if self._device.model_info.enum_value(support_key, \"@PM10_SUPPORT\") is None:\n            return None\n        key = self._get_state_key(STATE_PM10)\n        if (value := self.lookup_range(key)) is None:\n            return None\n        return self._update_feature(FEAT_PM10, value, False)\n\n    @property\n    def pm25(self):\n        support_key = self._get_state_key(SUPPORT_AIR_POLUTION)\n        if self._device.model_info.enum_value(support_key, \"@PM2_5_SUPPORT\") is None:\n            return None\n        key = self._get_state_key(STATE_PM25)\n        if (value := self.lookup_range(key)) is None:\n            return None\n        return self._update_feature(FEAT_PM25, value, False)\n\n    def _get_filter_life(self, use_time_status, max_time_status, support_key, filter_types=None):\n        if filter_types:\n            supported = False\n            for filter_type in filter_types:\n                if self._device.model_info.enum_value(support_key, filter_type) is not None:\n                    supported = True\n                    break\n            if not supported:\n                return None\n\n        key_max_status = self._get_state_key(max_time_status)\n        max_time = self.to_int_or_none(\n            self.lookup_enum(key_max_status, True)\n        )\n        if max_time is None:\n            max_time = self.to_int_or_none(\n                self.lookup_range(key_max_status)\n            )\n            if max_time is None:\n                return None\n            if max_time < 10:  # because is an enum\n                return None\n\n        use_time = self.to_int_or_none(\n            self.lookup_range(self._get_state_key(use_time_status))\n        )\n        if use_time is None:\n            return None\n        if max_time < use_time:\n            return None\n\n        try:\n            return int((use_time/max_time)*100)\n        except ValueError:\n            return None\n\n    @property\n    def filters_life(self):\n        \"\"\"Return percentage status for all filters\"\"\"\n        result = {}\n\n        # Get the filter feature key\n        support_key = self._get_state_key(SUPPORT_MFILTER)\n\n        for filter_def in FILTER_TYPES:\n            status = self._get_filter_life(filter_def[1], filter_def[2], support_key, filter_def[3])\n            if status is not None:\n                self._update_feature(filter_def[0], status, False)\n                result[filter_def[0]] = status\n\n        return result\n\n    def _update_features(self):\n        _ = [\n            self.current_humidity,\n            self.pm1,\n            self.pm10,\n            self.pm25,\n            self.filters_life,\n        ]\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/wideq/const.py",
    "content": "\"\"\"LG SmartThinQ constants.\"\"\"\n\n# default core settings\nDEFAULT_COUNTRY = \"US\"\nDEFAULT_LANGUAGE = \"en-US\"\nDEFAULT_TIMEOUT = 10  # seconds\n\n# state options\nSTATE_OPTIONITEM_OFF = \"off\"\nSTATE_OPTIONITEM_ON = \"on\"\nSTATE_OPTIONITEM_NONE = \"-\"\nSTATE_OPTIONITEM_UNKNOWN = \"unknown\"\n\n# unit temp\nUNIT_TEMP_CELSIUS = \"celsius\"\nUNIT_TEMP_FAHRENHEIT = \"fahrenheit\"\n\n# ac devices features\nFEAT_ENERGY_CURRENT = \"energy_current\"\nFEAT_HUMIDITY = \"humidity\"\nFEAT_HOT_WATER_TEMP = \"hot_water_temperature\"\nFEAT_IN_WATER_TEMP = \"in_water_temperature\"\nFEAT_OUT_WATER_TEMP = \"out_water_temperature\"\n\n# wash devices features\nFEAT_DRYLEVEL = \"dry_level\"\nFEAT_ERROR_MSG = \"error_message\"\nFEAT_PRE_STATE = \"pre_state\"\nFEAT_PROCESS_STATE = \"process_state\"\nFEAT_RUN_STATE = \"run_state\"\nFEAT_SPINSPEED = \"spin_speed\"\nFEAT_TEMPCONTROL = \"temp_control\"\nFEAT_TIMEDRY = \"time_dry\"\nFEAT_TUBCLEAN_COUNT = \"tubclean_count\"\nFEAT_WATERTEMP = \"water_temp\"\n\nFEAT_AUTODOOR = \"auto_door\"\nFEAT_CHILDLOCK = \"child_lock\"\nFEAT_CREASECARE = \"crease_care\"\nFEAT_DELAYSTART = \"delay_start\"\nFEAT_DOORCLOSE = \"door_close\"\nFEAT_DOORLOCK = \"door_lock\"\nFEAT_DOOROPEN = \"door_open\"\nFEAT_DUALZONE = \"dual_zone\"\nFEAT_ENERGYSAVER = \"energy_saver\"\nFEAT_EXTRADRY = \"extra_dry\"\nFEAT_HALFLOAD = \"half_load\"\nFEAT_HIGHTEMP = \"high_temp\"\nFEAT_MEDICRINSE = \"medic_rinse\"\nFEAT_NIGHTDRY = \"night_dry\"\nFEAT_PREWASH = \"pre_wash\"\nFEAT_REMOTESTART = \"remote_start\"\nFEAT_RINSEREFILL = \"rinse_refill\"\nFEAT_SALTREFILL = \"salt_refill\"\nFEAT_STANDBY = \"standby\"\nFEAT_STEAM = \"steam\"\nFEAT_STEAMSOFTENER = \"steam_softener\"\nFEAT_TURBOWASH = \"turbo_wash\"\n\n# SPECIALS GTI\nFEAT_ANTICREASE = \"anti_crease\"\nFEAT_DAMPDRYBEEP = \"damp_dry_beep\"\nFEAT_ECOHYBRID = \"eco_hybrid\"\nFEAT_HANDIRON = \"hand_iron\"\nFEAT_RESERVATION = \"reservation\"\nFEAT_SELFCLEAN = \"self_clean\"\n\n# refrigerator device features\nFEAT_ECOFRIENDLY = \"eco_friendly\"\nFEAT_EXPRESSMODE = \"express_mode\"\nFEAT_EXPRESSFRIDGE = \"express_fridge\"\nFEAT_FRESHAIRFILTER = \"fresh_air_filter\"\nFEAT_ICEPLUS = \"ice_plus\"\nFEAT_SMARTSAVINGMODE = \"smart_saving_mode\"\n# FEAT_SMARTSAVING_STATE = \"smart_saving_state\"\nFEAT_WATERFILTERUSED_MONTH = \"water_filter_used_month\"\n\n# range device features\nFEAT_COOKTOP_LEFT_FRONT_STATE = \"cooktop_left_front_state\"\nFEAT_COOKTOP_LEFT_REAR_STATE = \"cooktop_left_rear_state\"\nFEAT_COOKTOP_CENTER_STATE = \"cooktop_center_state\"\nFEAT_COOKTOP_RIGHT_FRONT_STATE = \"cooktop_right_front_state\"\nFEAT_COOKTOP_RIGHT_REAR_STATE = \"cooktop_right_rear_state\"\nFEAT_OVEN_LOWER_CURRENT_TEMP = \"oven_lower_current_temp\"\nFEAT_OVEN_LOWER_STATE = \"oven_lower_state\"\nFEAT_OVEN_UPPER_CURRENT_TEMP = \"oven_upper_current_temp\"\nFEAT_OVEN_UPPER_STATE = \"oven_upper_state\"\n\n# air purifier and dehumidifier device features\nFEAT_FILTER_BOTTOM_LIFE = \"filter_bottom_life\"\nFEAT_FILTER_DUST_LIFE = \"filter_dust_life\"\nFEAT_FILTER_MAIN_LIFE = \"filter_main_life\"\nFEAT_FILTER_MID_LIFE = \"filter_mid_life\"\nFEAT_FILTER_TOP_LIFE = \"filter_top_life\"\nFEAT_PM1 = \"pm1\"\nFEAT_PM10 = \"pm10\"\nFEAT_PM25 = \"pm25\"\nFEAT_TARGET_HUMIDITY = \"target_humidity\"\nFEAT_WATER_TANK_FULL = \"water_tank_full\"\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/wideq/core_async.py",
    "content": "\"\"\"A low-level, general abstraction for the LG SmartThinQ API.\n\"\"\"\nfrom __future__ import annotations\n\nimport aiohttp\nimport asyncio\nimport base64\nimport chardet\nimport hashlib\nimport hmac\nimport json\nimport logging\nimport os\nimport uuid\nimport xmltodict\n\nfrom datetime import datetime\nfrom typing import Any, Dict, Generator, Optional\nfrom urllib.parse import urljoin, urlencode, urlparse, parse_qs, quote\n\nfrom . import core_exceptions as exc\nfrom .const import DEFAULT_COUNTRY, DEFAULT_LANGUAGE, DEFAULT_TIMEOUT\nfrom .core_util import add_end_slash, as_list, gen_uuid\nfrom .device_info import DeviceInfo\n\n# The core version\nCORE_VERSION = \"coreAsync\"\n\n# enable logging of auth information\nLOG_AUTH_INFO = False\n\n# v2\nV2_API_KEY = \"VGhpblEyLjAgU0VSVklDRQ==\"\nV2_CLIENT_ID = \"65260af7e8e6547b51fdccf930097c51eb9885a508d3fddfa9ee6cdec22ae1bd\"\nV2_SVC_PHASE = \"OP\"\nV2_APP_LEVEL = \"PRD\"\nV2_APP_OS = \"LINUX\"\nV2_APP_TYPE = \"NUTS\"\nV2_APP_VER = \"3.0.1700\"\n\n# new\nV2_GATEWAY_URL = \"https://route.lgthinq.com:46030/v1/service/application/gateway-uri\"\nV2_AUTH_PATH = \"/oauth/1.0/oauth2/token\"\nV2_USER_INFO = \"/users/profile\"\nV2_EMP_SESS_URL = \"https://emp-oauth.lgecloud.com/emp/oauth2/token/empsession\"\nOAUTH_REDIRECT_URI = \"https://kr.m.lgaccount.com/login/iabClose\"\nAPPLICATION_KEY = \"6V1V8H2BN5P9ZQGOI5DAQ92YZBDO3EK9\"  # for spx login\nOAUTH_CLIENT_KEY = 'LGAO722A02'\n\n# orig\nDATA_ROOT = \"lgedmRoot\"\nGATEWAY_URL = \"https://kic.lgthinq.com:46030/api/common/gatewayUriList\"\nSECURITY_KEY = \"nuts_securitykey\"\nSVC_CODE = \"SVC202\"\nCLIENT_ID = \"LGAO221A02\"\nOAUTH_SECRET_KEY = \"c053c2a6ddeb7ad97cb0eed0dcb31cf8\"\nDATE_FORMAT = \"%a, %d %b %Y %H:%M:%S +0000\"\n\nAPI2_ERRORS = {\n    \"0101\": exc.DeviceNotFound,\n    \"0102\": exc.NotLoggedInError,\n    \"0106\": exc.NotConnectedError,\n    \"0100\": exc.FailedRequestError,\n    \"0110\": exc.InvalidCredentialError,\n    \"9999\": exc.NotConnectedError,  # This come as \"other errors\", we manage as not connected.\n    9000: exc.InvalidRequestError,  # Surprisingly, an integer (not a string).\n}\n\nDEFAULT_TOKEN_VALIDITY = 3600  # seconds\nTOKEN_EXP_LIMIT = 60  # will expire within 60 seconds\n\n# minimum time between 2 consecutive call for device snapshot updates (in seconds)\nMIN_TIME_BETWEEN_UPDATE = 25\n\n_LOGGER = logging.getLogger(__name__)\n\n\ndef parse_oauth_callback(url: str):\n    \"\"\"Parse the URL to which an OAuth login redirected to obtain two\n    tokens: an access token for API credentials, and a refresh token for\n    getting updated access tokens.\n    \"\"\"\n\n    params = parse_qs(urlparse(url).query)\n    return {k: v[0] for k, v in params.items()}\n\n\ndef oauth_info_from_url(url: str) -> dict:\n    \"\"\"Return authentication info using an OAuth callback URL.\"\"\"\n    parsed_info = parse_oauth_callback(url)\n\n    result = {\n        \"oauth_url\": parsed_info[\"oauth2_backend_url\"],\n        \"user_number\": None,\n    }\n    if \"refresh_token\" in parsed_info:\n        result[\"access_token\"] = parsed_info.get(\"access_token\")\n        result[\"token_validity\"] = str(DEFAULT_TOKEN_VALIDITY)\n        result[\"refresh_token\"] = parsed_info[\"refresh_token\"]\n    elif \"code\" in parsed_info:\n        result[\"user_number\"] = parsed_info.get(\"user_number\")\n        result[\"auth_code\"] = parsed_info[\"code\"]\n    else:\n        return {}\n\n    return result\n\n\nclass CoreAsync:\n    \"\"\"Class for Core SmartThinQ Api async calls.\"\"\"\n\n    def __init__(\n        self,\n        country: str = DEFAULT_COUNTRY,\n        language: str = DEFAULT_LANGUAGE,\n        *,\n        timeout: int = DEFAULT_TIMEOUT,\n        session: aiohttp.ClientSession | None = None,\n    ):\n        \"\"\"\n        Create the CoreAsync object\n\n        Parameters:\n            country: ThinQ account country\n            language: ThinQ account language\n            timeout: the http timeout (default = 10 sec.)\n            session: the AioHttp session to use (if None a new session is created)\n        \"\"\"\n\n        self._country = country\n        self._language = language\n        self._timeout = timeout\n\n        if session:\n            self._session = session\n            self._managed_session = False\n        else:\n            self._session = aiohttp.ClientSession()\n            self._managed_session = True\n\n    @property\n    def country(self):\n        \"\"\"Return the used country.\"\"\"\n        return self._country\n\n    @property\n    def language(self):\n        \"\"\"Return the used language.\"\"\"\n        return self._language\n\n    async def close(self):\n        \"\"\"Close the managed session on exit.\"\"\"\n        if self._managed_session:\n            await self._session.close()\n\n    @staticmethod\n    async def _get_json_resp(response: aiohttp.ClientResponse) -> dict:\n        \"\"\"Try to get the json content from request response.\"\"\"\n\n        # first, we try to get the response json content\n        try:\n            return await response.json()\n        except ValueError as ex:\n            resp_text = await response.text(errors='replace')\n            _LOGGER.debug(\"Error decoding json response %s: %s\", resp_text, ex)\n\n        # if fails, we try to convert text from xml to json\n        try:\n            return xmltodict.parse(resp_text)\n        except Exception:\n            raise exc.InvalidResponseError(resp_text) from None\n\n    @staticmethod\n    def _oauth2_signature(message: str, secret: str) -> str:\n        \"\"\"Get the base64-encoded SHA-1 HMAC digest of a string, as used in\n        OAauth2 request signatures.\n\n        Both the `secret` and `message` are given as text strings. We use\n        their UTF-8 equivalents.\n        \"\"\"\n\n        secret_bytes = secret.encode(\"utf8\")\n        hashed = hmac.new(secret_bytes, message.encode(\"utf8\"), hashlib.sha1)\n        digest = hashed.digest()\n        return base64.b64encode(digest).decode(\"utf8\")\n\n    @staticmethod\n    def _thinq2_headers(\n        extra_headers: dict | None = None,\n        access_token: str | None = None,\n        user_number: str | None = None,\n        country=DEFAULT_COUNTRY,\n        language=DEFAULT_LANGUAGE,\n    ) -> dict:\n        \"\"\"Prepare API2 header.\"\"\"\n\n        headers = {\n            \"Accept\": \"application/json\",\n            \"Content-type\": \"application/json;charset=UTF-8\",\n            \"x-api-key\": V2_API_KEY,\n            \"x-client-id\": V2_CLIENT_ID,\n            \"x-country-code\": country,\n            \"x-language-code\": language,\n            \"x-message-id\": gen_uuid(),\n            \"x-service-code\": SVC_CODE,\n            \"x-service-phase\": V2_SVC_PHASE,\n            \"x-thinq-app-level\": V2_APP_LEVEL,\n            \"x-thinq-app-os\": V2_APP_OS,\n            \"x-thinq-app-type\": V2_APP_TYPE,\n            \"x-thinq-app-ver\": V2_APP_VER,\n            \"x-thinq-security-key\": SECURITY_KEY,\n        }\n\n        if access_token:\n            headers[\"x-emp-token\"] = access_token\n\n        if user_number:\n            headers[\"x-user-no\"] = user_number\n\n        add_headers = extra_headers or {}\n        return {**headers, **add_headers}\n\n    async def http_get_bytes(\n        self,\n        url: str,\n    ) -> bytes:\n        \"\"\"Make a generic HTTP request.\"\"\"\n        async with self._session.get(\n            url=url,\n        ) as resp:\n            result = await resp.content.read()\n\n        return result\n\n    async def thinq2_get(\n        self,\n        url: str,\n        access_token: str | None = None,\n        user_number: str | None = None,\n        headers: dict | None = None,\n    ) -> dict:\n        \"\"\"Make an HTTP request in the format used by the API2 servers.\"\"\"\n\n        _LOGGER.debug(\"thinq2_get before: %s\", url)\n\n        async with self._session.get(\n            url=url,\n            headers=self._thinq2_headers(\n                access_token=access_token,\n                user_number=user_number,\n                extra_headers=headers or {},\n                country=self._country,\n                language=self._language,\n            ),\n            timeout=self._timeout,\n            raise_for_status=False,\n        ) as resp:\n            out = await self._get_json_resp(resp)\n\n        _LOGGER.debug(\"thinq2_get after: %s\", out)\n\n        if \"resultCode\" not in out:\n            raise exc.APIError(\"-1\", out)\n\n        res = self._manage_lge_result(out, True)\n        return res[\"result\"]\n\n    async def lgedm2_post(\n        self,\n        url: str,\n        data: dict | None = None,\n        access_token: str | None = None,\n        user_number: str | None = None,\n        headers: dict | None = None,\n        is_api_v2=False,\n    ) -> dict:\n        \"\"\"Make an HTTP request in the format used by the API servers.\"\"\"\n\n        _LOGGER.debug(\"lgedm2_post before: %s\", url)\n\n        async with self._session.post(\n            url=url,\n            json=data if is_api_v2 else {DATA_ROOT: data},\n            headers=self._thinq2_headers(\n                access_token=access_token,\n                user_number=user_number,\n                extra_headers=headers or {},\n                country=self._country,\n                language=self._language,\n            ),\n            timeout=self._timeout,\n            raise_for_status=False,\n        ) as resp:\n            out = await self._get_json_resp(resp)\n\n        _LOGGER.debug(\"lgedm2_post after: %s\", out)\n\n        return self._manage_lge_result(out, is_api_v2)\n\n    @staticmethod\n    def _manage_lge_result(result: dict, is_api_v2=False) -> dict:\n        \"\"\"Manage the result from a get or a post to lge server.\"\"\"\n\n        if is_api_v2:\n            if \"resultCode\" in result:\n                code = result[\"resultCode\"]\n                if code != \"0000\":\n                    if code in API2_ERRORS:\n                        raise API2_ERRORS[code]()\n                    message = result.get(\"result\", \"error\")\n                    raise exc.APIError(code, message)\n\n            return result\n\n        msg = result.get(DATA_ROOT)\n        if not msg:\n            raise exc.APIError(\"-1\", result)\n\n        if \"returnCd\" in msg:\n            code = msg[\"returnCd\"]\n            if code != \"0000\":\n                if code in API2_ERRORS:\n                    raise API2_ERRORS[code]()\n                message = msg[\"returnMsg\"]\n                raise exc.APIError(code, message)\n\n        return msg\n\n    async def gateway_info(self):\n        \"\"\"Return ThinQ gateway information.\"\"\"\n        return await self.thinq2_get(V2_GATEWAY_URL)\n\n    async def auth_user_login(\n        self, login_base_url, emp_base_url, username, encrypted_pwd\n    ):\n        \"\"\"Perform a login with username and password.\n           password must be encrypted using hashlib with hash512 algorythm.\n        \"\"\"\n\n        _LOGGER.debug(\"auth_user_login - Enter\")\n\n        headers = {\n            \"Accept\": \"application/json\",\n            \"X-Application-Key\": APPLICATION_KEY,\n            \"X-Client-App-Key\": CLIENT_ID,\n            \"X-Lge-Svccode\": \"SVC709\",\n            \"X-Device-Type\": \"M01\",\n            \"X-Device-Platform\": \"ADR\",\n            \"X-Device-Language-Type\": \"IETF\",\n            \"X-Device-Publish-Flag\": \"Y\",\n            \"X-Device-Country\": self._country,\n            \"X-Device-Language\": self._language,\n            \"Content-Type\": \"application/x-www-form-urlencoded;charset=UTF-8\",\n            \"Access-Control-Allow-Origin\": \"*\",\n            \"Accept-Encoding\": \"gzip, deflate, br\",\n            \"Accept-Language\": \"en-US,en;q=0.9\",\n        }\n\n        url = urljoin(login_base_url, \"preLogin\")\n        pre_login_data = {\n          \"user_auth2\": encrypted_pwd,\n          \"log_param\": f\"login request / user_id : {username} / third_party : null / svc_list : SVC202,SVC710 / 3rd_service : \",\n        }\n\n        async with self._session.post(\n            url=url, data=pre_login_data, headers=headers, timeout=self._timeout, raise_for_status=False\n        ) as resp:\n            pre_login = await resp.json()\n\n        _LOGGER.debug(\"auth_user_login - preLogin data: %s\", pre_login)\n        headers[\"X-Signature\"] = pre_login[\"signature\"]\n        headers[\"X-Timestamp\"] = pre_login[\"tStamp\"]\n\n        # try login with username and hashed password\n        _LOGGER.debug(\"auth_user_login - getting account_data\")\n        data = {\n          \"user_auth2\": pre_login[\"encrypted_pw\"],\n          \"password_hash_prameter_flag\": \"Y\",\n          \"svc_list\": \"SVC202,SVC710\",  # SVC202=LG SmartHome, SVC710=EMP OAuth\n        }\n        emp_login_url = urljoin(emp_base_url, 'emp/v2.0/account/session/' + quote(username))\n\n        async with self._session.post(\n            url=emp_login_url, data=data, headers=headers, timeout=self._timeout, raise_for_status=False\n        ) as resp:\n            account_data = await resp.json()\n\n        _LOGGER.debug(\"auth_user_login - account_data: %s\", account_data)\n        account = account_data[\"account\"]\n\n        #  const {code, message} = err.response.data.error;\n        #  if (code === 'MS.001.03') {\n        #    throw new AuthenticationError('Your account was already used to registered in '+ message +'.');\n        #  }\n\n        # dynamic get secret key for emp signature\n        _LOGGER.debug(\"auth_user_login - getting secret_data\")\n        emp_search_key_url = urljoin(login_base_url, \"searchKey?key_name=OAUTH_SECRETKEY&sever_type=OP\")\n\n        async with self._session.get(\n            url=emp_search_key_url, timeout=self._timeout, raise_for_status=False\n        ) as resp:\n            secret_data = json.loads(await resp.text())  # this return data as plain/text\n\n        _LOGGER.debug(\"auth_user_login - secret_data: %s\", secret_data)\n        secret_key = secret_data[\"returnData\"]\n\n        # get token data\n        _LOGGER.debug(\"auth_user_login - getting token_data\")\n        emp_data = {\n          \"account_type\": account[\"userIDType\"],\n          \"client_id\": CLIENT_ID,\n          \"country_code\": account[\"country\"],\n          \"username\": account[\"userID\"],\n        }\n\n        parse_url = urlparse(V2_EMP_SESS_URL)\n        timestamp = datetime.utcnow().strftime(DATE_FORMAT)\n        req_url = f\"{parse_url.path}?{urlencode(emp_data)}\"\n        signature = self._oauth2_signature(f\"{req_url}\\n{timestamp}\", secret_key)\n\n        emp_headers = {\n          \"lgemp-x-app-key\": OAUTH_CLIENT_KEY,\n          \"lgemp-x-date\": timestamp,\n          \"lgemp-x-session-key\": account[\"loginSessionID\"],\n          \"lgemp-x-signature\": signature,\n          \"Accept\": \"application/json\",\n          \"X-Device-Type\": \"M01\",\n          \"X-Device-Platform\": \"ADR\",\n          \"Content-Type\": \"application/x-www-form-urlencoded\",\n          \"Access-Control-Allow-Origin\": \"*\",\n          \"Accept-Encoding\": \"gzip, deflate, br\",\n          \"Accept-Language\": \"en-US,en;q=0.9\",\n          \"User-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.44\",\n        }\n\n        async with self._session.post(\n            url=V2_EMP_SESS_URL, headers=emp_headers, data=emp_data, timeout=self._timeout, raise_for_status=False\n        ) as resp:\n            token_data = await resp.json()\n\n        if LOG_AUTH_INFO:\n            _LOGGER.debug(\"auth_user_login - token_data: %s\", token_data)\n        _LOGGER.debug(\"auth_user_login - token_data retrieved\")\n\n        if token_data[\"status\"] != 1:\n            raise exc.TokenError()\n\n        _LOGGER.debug(\"auth_user_login - Exit\")\n        return token_data\n\n    async def get_oauth_url(self):\n        \"\"\"Return url used for oauth2 authentication.\"\"\"\n\n        headers = {\n          \"Accept\": \"application/json\",\n          \"x-thinq-application-key\": \"wideq\",\n          \"x-thinq-security-key\": SECURITY_KEY,\n        },\n\n        async with self._session.post(\n            url=GATEWAY_URL,\n            json={DATA_ROOT: {\"countryCode\": self._country, \"langCode\": self._language}},\n            headers=headers,\n            timeout=self._timeout,\n            raise_for_status=False,\n        ) as resp:\n            out = await resp.json()\n\n        gateway = self._manage_lge_result(out)\n        return gateway[\"oauthUri\"]\n\n    async def get_user_number(self, oauth_url, access_token):\n        \"\"\"Get the user number used by API requests based on access token.\"\"\"\n\n        url = urljoin(oauth_url, V2_USER_INFO)\n        timestamp = datetime.utcnow().strftime(DATE_FORMAT)\n        sig = self._oauth2_signature(f\"{V2_USER_INFO}\\n{timestamp}\", OAUTH_SECRET_KEY)\n\n        headers = {\n          \"Accept\": \"application/json\",\n          \"Authorization\": f\"Bearer {access_token}\",\n          \"X-Lge-Svccode\": SVC_CODE,\n          \"X-Application-Key\": APPLICATION_KEY,\n          \"lgemp-x-app-key\": CLIENT_ID,\n          \"X-Device-Type\": \"M01\",\n          \"X-Device-Platform\": \"ADR\",\n          \"x-lge-oauth-date\": timestamp,\n          \"x-lge-oauth-signature\": sig,\n        }\n\n        try:\n            async with self._session.get(\n                url=url, headers=headers, timeout=self._timeout, raise_for_status=False\n            ) as resp:\n                res_data = await resp.json()\n        except Exception as ex:\n            raise exc.AuthenticationError() from ex\n\n        if res_data[\"status\"] != 1:\n            raise exc.AuthenticationError(\"Failed to retrieve User Number\")\n        if LOG_AUTH_INFO:\n            _LOGGER.debug(res_data)\n\n        return res_data[\"account\"][\"userNo\"]\n\n    async def _auth_request(self, oauth_url, data, *, log_auth_info=False):\n        \"\"\"Use an auth code to log into the v2 API and obtain an access token\n        and refresh token.\n        \"\"\"\n        url = urljoin(oauth_url, V2_AUTH_PATH)\n        timestamp = datetime.utcnow().strftime(DATE_FORMAT)\n        req_url = f\"{V2_AUTH_PATH}?{urlencode(data)}\"\n        sig = self._oauth2_signature(f\"{req_url}\\n{timestamp}\", OAUTH_SECRET_KEY)\n\n        headers = {\n            \"x-lge-appkey\": CLIENT_ID,\n            \"x-lge-oauth-signature\": sig,\n            \"x-lge-oauth-date\": timestamp,\n            \"Accept\": \"application/json\",\n        }\n\n        async with self._session.post(\n            url=url, headers=headers, data=data, timeout=self._timeout, raise_for_status=False\n        ) as resp:\n            if resp.status != 200:\n                raise exc.TokenError()\n            res_data = await resp.json()\n\n        if log_auth_info:\n            _LOGGER.debug(\"Auth request result: %s\", res_data)\n        else:\n            _LOGGER.debug(\"Authorization request completed successfully\")\n\n        return res_data\n\n    async def auth_code_login(self, oauth_url, auth_code):\n        \"\"\"Get a new access_token using an authorization_code\n\n        May raise a `tokenError`.\n        \"\"\"\n\n        out = await self._auth_request(\n            oauth_url,\n            {\n                \"code\": auth_code,\n                \"grant_type\": \"authorization_code\",\n                \"redirect_uri\": OAUTH_REDIRECT_URI,\n            },\n            log_auth_info=LOG_AUTH_INFO,\n        )\n\n        return out[\"access_token\"], out.get(\"expires_in\"), out[\"refresh_token\"]\n\n    async def refresh_auth(self, oauth_root, refresh_token):\n        \"\"\"Get a new access_token using a refresh_token.\n\n        May raise a `TokenError`.\n        \"\"\"\n        out = await self._auth_request(\n            oauth_root,\n            {\"grant_type\": \"refresh_token\", \"refresh_token\": refresh_token},\n            log_auth_info=LOG_AUTH_INFO,\n        )\n\n        return out[\"access_token\"], out[\"expires_in\"]\n\n\nclass Gateway(object):\n    def __init__(self, gw_info: dict, core: CoreAsync) -> None:\n        self.auth_base = add_end_slash(gw_info[\"empUri\"])\n        self.emp_base_uri = add_end_slash(gw_info[\"empTermsUri\"])\n        self.login_base_uri = add_end_slash(gw_info[\"empSpxUri\"])\n        self.thinq1_uri = add_end_slash(gw_info[\"thinq1Uri\"])\n        self.thinq2_uri = add_end_slash(gw_info[\"thinq2Uri\"])\n        self._core = core\n\n    @property\n    def core(self) -> CoreAsync:\n        \"\"\"Return the API core.\"\"\"\n        return self._core\n\n    @property\n    def country(self) -> str:\n        \"\"\"Return the API core used country.\"\"\"\n        return self._core.country\n\n    @property\n    def language(self) -> str:\n        \"\"\"Return the API core used language.\"\"\"\n        return self._core.language\n\n    async def close(self):\n        \"\"\"Close the core aiohttp session.\"\"\"\n        await self._core.close()\n\n    @classmethod\n    async def discover(cls, core: CoreAsync) -> Gateway:\n        \"\"\"Return an instance of gateway class.\"\"\"\n        gw_info = await core.gateway_info()\n        return cls(gw_info, core)\n\n    def oauth_url(self, *, redirect_uri=None, state=None, use_oauth2=True) -> str:\n        \"\"\"Construct the URL for users to log in (in a browser) to start an\n        authenticated session.\n        \"\"\"\n\n        url = urljoin(self.login_base_uri, \"login/signIn\")\n\n        state_param = \"oauth2State\" if use_oauth2 else \"state\"\n        query = {\n            \"country\": self.country,\n            \"language\": self.language,\n            \"client_id\": CLIENT_ID,\n            \"svc_list\": SVC_CODE,\n            \"svc_integrated\": \"Y\",\n            \"show_thirdparty_login\": \"LGE,MYLG,GGL,AMZ,FBK,APPL\",\n            \"division\": \"ha:T20\",\n            state_param: state or uuid.uuid1().hex,\n            \"show_select_country\": \"N\",\n        }\n        if redirect_uri or not use_oauth2:\n            query[\"redirect_uri\"] = redirect_uri or OAUTH_REDIRECT_URI\n\n        url_query = urlencode(query)\n        return f\"{url}?{url_query}\"\n\n    def dump(self) -> dict:\n        return {\n            \"empUri\": self.auth_base,\n            \"empTermsUri\": self.emp_base_uri,\n            \"empSpxUri\": self.login_base_uri,\n            \"thinq1Uri\": self.thinq1_uri,\n            \"thinq2Uri\": self.thinq2_uri,\n            \"country\": self.country,\n            \"language\": self.language,\n        }\n\n\nclass Auth(object):\n    \"\"\"ThinQ authentication object\"\"\"\n\n    def __init__(\n        self,\n        gateway: Gateway,\n        refresh_token: str,\n        oauth_url: str | None = None,\n        access_token: str | None = None,\n        token_validity: str | None = None,\n        user_number: str | None = None,\n    ) -> None:\n        \"\"\"Initialize ThinQ authentication\"\"\"\n        self._gateway: Gateway = gateway\n        self.refresh_token = refresh_token\n        self.oauth_url = oauth_url\n        self.access_token = access_token\n        self.token_validity = int(token_validity) if token_validity else DEFAULT_TOKEN_VALIDITY\n        self.user_number = user_number\n        self._token_created_on = datetime.utcnow() if access_token else datetime.min\n\n    @property\n    def gateway(self) -> Gateway:\n        \"\"\"Return Gateway instance for this Auth.\"\"\"\n        return self._gateway\n\n    @staticmethod\n    async def oauth_info_from_url(url: str, core: CoreAsync) -> dict:\n        \"\"\"Return authentication info using an OAuth callback URL.\"\"\"\n        result = oauth_info_from_url(url)\n\n        if auth_code := result.pop(\"auth_code\", None):\n            access_token, token_validity, refresh_token = await core.auth_code_login(\n                result[\"oauth_url\"], auth_code\n            )\n            return {\n                **result,\n                \"access_token\": access_token,\n                \"token_validity\": token_validity,\n                \"refresh_token\": refresh_token,\n            }\n\n        return result\n\n    @classmethod\n    async def from_url(cls, gateway: Gateway, url: str) -> Auth | None:\n        \"\"\"Create an authentication using an OAuth callback URL.\"\"\"\n        oauth_info = await cls.oauth_info_from_url(url, gateway.core)\n        if not oauth_info:\n            return None\n\n        return cls(\n            gateway,\n            oauth_info[\"refresh_token\"],\n            oauth_info[\"oauth_url\"],\n            oauth_info[\"access_token\"],\n            oauth_info[\"token_validity\"],\n            oauth_info[\"user_number\"],\n        )\n\n    @classmethod\n    async def from_user_login(\n        cls, gateway: Gateway, username: str, password: str\n    ) -> Auth:\n        \"\"\"Perform authentication, returning a new Auth object.\"\"\"\n        hash_pwd = hashlib.sha512()\n        hash_pwd.update(password.encode(\"utf8\"))\n        try:\n            token_info = await gateway.core.auth_user_login(\n                gateway.login_base_uri,\n                gateway.emp_base_uri,\n                username,\n                hash_pwd.hexdigest(),\n            )\n        except Exception as ex:\n            raise exc.AuthenticationError() from ex\n\n        refresh_token = token_info[\"refresh_token\"]\n        oauth_url = token_info[\"oauth2_backend_url\"]\n        access_token = token_info[\"access_token\"]\n        token_validity = token_info[\"expires_in\"]\n        user_number = await gateway.core.get_user_number(oauth_url, access_token)\n\n        return cls(\n            gateway, refresh_token, oauth_url, access_token, token_validity, user_number\n        )\n\n    def start_session(self):\n        \"\"\"Start an API session for the logged-in user. Return the\n        Session object and a list of the user's devices.\n        \"\"\"\n        return Session(self)\n\n    async def refresh(self, force_refresh=False) -> Auth:\n        \"\"\"Refresh the authentication token, returning a new Auth object.\"\"\"\n\n        access_token = self.access_token\n\n        if not self.oauth_url:\n            self.oauth_url = await self._gateway.core.get_oauth_url()\n\n        get_new_token: bool = force_refresh or (access_token is None)\n        if not get_new_token:\n            diff = (datetime.utcnow() - self._token_created_on).total_seconds()\n            if (self.token_validity - diff) <= TOKEN_EXP_LIMIT:\n                get_new_token = True\n\n        if get_new_token:\n            _LOGGER.debug(\"Request new access token\")\n            access_token, token_validity = await self._gateway.core.refresh_auth(\n                self.oauth_url, self.refresh_token\n            )\n        else:\n            token_validity = str(self.token_validity)\n\n        if not self.user_number:\n            self.user_number = await self._gateway.core.get_user_number(\n                self.oauth_url, access_token\n            )\n\n        if not get_new_token:\n            return self\n\n        return Auth(\n            self._gateway,\n            self.refresh_token,\n            self.oauth_url,\n            access_token,\n            token_validity,\n            self.user_number,\n        )\n\n    def refresh_gateway(self, gateway: Gateway) -> None:\n        \"\"\"Refresh the gateway.\"\"\"\n        self._gateway = gateway\n\n    def dump(self) -> dict:\n        \"\"\"Return a dict of dumped Auth class.\"\"\"\n        return {\n            \"refresh_token\": self.refresh_token,\n            \"oauth_url\": self.oauth_url,\n            \"access_token\": self.access_token,\n            \"expires_in\": self.token_validity,\n            \"user_number\": self.user_number,\n        }\n\n    @classmethod\n    def load(cls, gateway: Gateway, data: dict) -> Auth:\n        \"\"\"Return an Auth class.\"\"\"\n        return cls(\n            gateway,\n            data[\"refresh_token\"],\n            data[\"oauth_url\"],\n            data.get(\"access_token\"),\n            data.get(\"expires_in\"),\n            data[\"user_number\"],\n        )\n\n\nclass Session(object):\n    def __init__(self, auth: Auth, session_id=0) -> None:\n        self._auth = auth\n        self.session_id = session_id\n        self._common_lang_pack_url = None\n\n    @property\n    def common_lang_pack_url(self):\n        return self._common_lang_pack_url\n\n    async def refresh_auth(self) -> Auth:\n        \"\"\"Refresh associated authentication\"\"\"\n        self._auth = await self._auth.refresh()\n        return self._auth\n\n    async def post(self, path: str, data: dict | None = None) -> dict:\n        \"\"\"Make a POST request to the APIv1 server.\n\n        This is like `lgedm_post`, but it pulls the context for the\n        request from an active Session.\n        \"\"\"\n\n        url = urljoin(self._auth.gateway.thinq1_uri, path)\n        return await self._auth.gateway.core.lgedm2_post(\n            url,\n            data,\n            self._auth.access_token,\n            self._auth.user_number,\n            is_api_v2=False,\n        )\n\n    async def post2(self, path: str, data: dict | None = None) -> dict:\n        \"\"\"Make a POST request to the APIv2 server.\n\n        This is like `lgedm_post`, but it pulls the context for the\n        request from an active Session.\n        \"\"\"\n        url = urljoin(self._auth.gateway.thinq2_uri, path)\n        return await self._auth.gateway.core.lgedm2_post(\n            url,\n            data,\n            self._auth.access_token,\n            self._auth.user_number,\n            is_api_v2=True,\n        )\n\n    async def get(self, path: str) -> dict:\n        \"\"\"Make a GET request to the APIv1 server.\"\"\"\n\n        url = urljoin(self._auth.gateway.thinq1_uri, path)\n        return await self._auth.gateway.core.thinq2_get(\n            url,\n            self._auth.access_token,\n            self._auth.user_number,\n        )\n\n    async def get2(self, path: str) -> dict:\n        \"\"\"Make a GET request to the APIv2 server.\"\"\"\n\n        url = urljoin(self._auth.gateway.thinq2_uri, path)\n        return await self._auth.gateway.core.thinq2_get(\n            url,\n            self._auth.access_token,\n            self._auth.user_number,\n        )\n\n    async def get_devices(self):\n        \"\"\"Get a list of devices associated with the user's account.\n\n        Return a list of dicts with information about the devices.\n        \"\"\"\n        dashboard = await self.get2(\"service/application/dashboard\")\n        if self._common_lang_pack_url is None:\n            self._common_lang_pack_url = dashboard.get(\"langPackCommonUri\")\n        return as_list(dashboard.get(\"item\", []))\n\n    async def monitor_start(self, device_id):\n        \"\"\"Begin monitoring a device's status.\n\n        Return a \"work ID\" that can be used to retrieve the result of\n        monitoring.\n        \"\"\"\n\n        res = await self.post(\n            \"rti/rtiMon\",\n            {\n                \"cmd\": \"Mon\",\n                \"cmdOpt\": \"Start\",\n                \"deviceId\": device_id,\n                \"workId\": gen_uuid(),\n            },\n        )\n        return res[\"workId\"]\n\n    async def monitor_poll(self, device_id, work_id):\n        \"\"\"Get the result of a monitoring task.\n\n        `work_id` is a string ID retrieved from `monitor_start`. Return\n        a status result, which is a bytestring, or None if the\n        monitoring is not yet ready.\n\n        May raise a `MonitorError`, in which case the right course of\n        action is probably to restart the monitoring task.\n        \"\"\"\n\n        work_list = [{\"deviceId\": device_id, \"workId\": work_id}]\n        res = (await self.post(\"rti/rtiResult\", {\"workList\": work_list}))[\"workList\"]\n\n        # When monitoring first starts, it usually takes a few\n        # iterations before data becomes available. In the initial\n        # \"warmup\" phase, `returnCode` is missing from the response.\n        if \"returnCode\" not in res:\n            return None\n\n        # Check for errors.\n        code = res[\"returnCode\"]\n        if code != \"0000\":\n            raise exc.MonitorError(device_id, code)\n\n        # The return data may or may not be present, depending on the\n        # monitoring task status.\n        if \"returnData\" in res:\n            # The main response payload is base64-encoded binary data in\n            # the `returnData` field. This sometimes contains JSON data\n            # and sometimes other binary data.\n            return base64.b64decode(res[\"returnData\"])\n\n        return None\n\n    async def monitor_stop(self, device_id, work_id):\n        \"\"\"Stop monitoring a device.\"\"\"\n\n        await self.post(\n            \"rti/rtiMon\",\n            {\"cmd\": \"Mon\", \"cmdOpt\": \"Stop\", \"deviceId\": device_id, \"workId\": work_id},\n        )\n\n    async def set_device_controls(\n            self,\n            device_id,\n            ctrl_key,\n            command=None,\n            value=None,\n            data=None,\n    ):\n        \"\"\"Control a device's settings.\n\n        `values` is a key/value map containing the settings to update.\n        \"\"\"\n        res = {}\n        payload = None\n        if isinstance(ctrl_key, dict):\n            payload = ctrl_key\n        elif command is not None:\n            payload = {\n                \"cmd\": ctrl_key,\n                \"cmdOpt\": command,\n                \"value\": value or \"\",\n                \"data\": data or \"\",\n            }\n\n        if payload:\n            payload.update({\n                \"deviceId\": device_id,\n                \"workId\": gen_uuid(),\n            })\n            res = await self.post(\"rti/rtiControl\", payload)\n            _LOGGER.debug(\"Set V1 result: %s\", str(res))\n\n        return res\n\n    async def set_device_v2_controls(\n            self,\n            device_id,\n            ctrl_key,\n            command=None,\n            key=None,\n            value=None,\n            *,\n            ctrl_path=None,\n    ):\n        \"\"\"Control a device's settings based on api V2.\"\"\"\n\n        res = {}\n        payload = None\n        path = ctrl_path or \"control-sync\"\n        cmd_path = f\"service/devices/{device_id}/{path}\"\n        if isinstance(ctrl_key, dict):\n            payload = ctrl_key\n        elif command is not None:\n            payload = {\n                \"ctrlKey\": ctrl_key,\n                \"command\": command,\n                \"dataKey\": key or \"\",\n                \"dataValue\": value or \"\",\n            }\n\n        if payload:\n            res = await self.post2(cmd_path, payload)\n            _LOGGER.debug(\"Set V2 result: %s\", str(res))\n\n        return res\n\n    async def get_device_config(self, device_id, key, category=\"Config\"):\n        \"\"\"Get a device configuration option.\n\n        The `category` string should probably either be \"Config\" or\n        \"Control\"; the right choice appears to depend on the key.\n        \"\"\"\n\n        res = await self.post(\n            \"rti/rtiControl\",\n            {\n                \"cmd\": category,\n                \"cmdOpt\": \"Get\",\n                \"value\": key,\n                \"deviceId\": device_id,\n                \"workId\": gen_uuid(),\n                \"data\": \"\",\n            },\n        )\n        return res[\"returnData\"]\n\n    async def get_device_v2_settings(self, device_id):\n        \"\"\"Get a device's settings based on api V2.\"\"\"\n        return await self.get2(f\"service/devices/{device_id}\")\n\n    async def delete_permission(self, device_id):\n        \"\"\"Delete permission on V1 device after a control command\"\"\"\n        await self.post(\"rti/delControlPermission\", {\"deviceId\": device_id})\n\n\nclass ClientAsync(object):\n    \"\"\"A higher-level API wrapper that provides a session more easily\n        and allows serialization of state.\n        \"\"\"\n\n    def __init__(\n        self,\n        auth: Auth,\n        session: Optional[Session] = None,\n        country: str = DEFAULT_COUNTRY,\n        language: str = DEFAULT_LANGUAGE,\n        *,\n        enable_emulation: bool = False\n    ) -> None:\n        \"\"\"Initialize the client.\"\"\"\n        # The three steps required to get access to call the API.\n        self._auth: Auth = auth\n        self._session: Optional[Session] = session\n        self._last_device_update = datetime.utcnow()\n        self._lock = asyncio.Lock()\n        # The last list of devices we got from the server. This is the\n        # raw JSON list data describing the devices.\n        self._devices = None\n\n        # Cached model info data. This is a mapping from URLs to JSON\n        # responses.\n        self._model_url_info: Dict[str, Any] = {}\n        self._common_lang_pack = None\n\n        # Locale information used to discover a gateway, if necessary.\n        self._country = country\n        self._language = language\n\n        # enable emulation mode for debug / test\n        self._emulation = enable_emulation\n\n    def _inject_thinq2_device(self):\n        \"\"\"This is used only for debug\"\"\"\n        data_file = os.path.join(\n            os.path.dirname(os.path.realpath(__file__)), \"deviceV2.txt\"\n        )\n        try:\n            with open(data_file, \"r\") as f:\n                device_v2 = json.load(f)\n        except FileNotFoundError:\n            return\n        for d in device_v2:\n            self._devices.append(d)\n            _LOGGER.debug(\"Injected debug device: %s\", d)\n\n    async def _load_devices(self, force_update: bool = False):\n        \"\"\"Load dict with available devices.\"\"\"\n        if self._session and (self._devices is None or force_update):\n            self._devices = await self._session.get_devices()\n            if self.emulation:\n                # for debug\n                self._inject_thinq2_device()\n\n    @property\n    def api_version(self):\n        \"\"\"Return core API version.\"\"\"\n        return CORE_VERSION\n\n    @property\n    def auth(self) -> Auth:\n        \"\"\"Return the Auth object associated to this client.\"\"\"\n        if not self._auth:\n            assert False, \"unauthenticated\"\n        return self._auth\n\n    @property\n    def session(self) -> Session:\n        \"\"\"Return the Session object associated to this client.\"\"\"\n        if not self._session:\n            self._session = self.auth.start_session()\n        return self._session\n\n    @property\n    def has_devices(self) -> bool:\n        \"\"\"Return True if there are devices associated.\"\"\"\n        return True if self._devices else False\n\n    @property\n    def devices(self) -> Generator[DeviceInfo, None, None] | None:\n        \"\"\"DeviceInfo objects describing the user's devices.\"\"\"\n        if self._devices is None:\n            return None\n        return (DeviceInfo(d) for d in self._devices)\n\n    @property\n    def emulation(self) -> bool:\n        \"\"\"Return if emulation is enabled.\"\"\"\n        return self._emulation\n\n    @property\n    def oauth_info(self) -> dict:\n        \"\"\"Return current auth info.\"\"\"\n        return {\n            \"refresh_token\": self.auth.refresh_token,\n            \"oauth_url\": self.auth.oauth_url,\n            \"access_token\": self.auth.access_token,\n            \"user_number\": self.auth.user_number,\n        }\n\n    async def close(self):\n        \"\"\"Close the active managed core http session.\"\"\"\n        await self._auth.gateway.close()\n\n    async def refresh_devices(self):\n        \"\"\"Refresh the devices' information for this client\"\"\"\n        async with self._lock:\n            call_time = datetime.utcnow()\n            difference = (call_time - self._last_device_update).total_seconds()\n            if difference <= MIN_TIME_BETWEEN_UPDATE:\n                return\n            await self._load_devices(True)\n            self._last_device_update = call_time\n\n    def get_device(self, device_id) -> DeviceInfo | None:\n        \"\"\"Look up a DeviceInfo object by device ID.\n            \n        Return None if the device does not exist.\n        \"\"\"\n        if not self._devices:\n            return None\n        for device in self.devices:\n            if device.id == device_id:\n                return device\n        return None\n\n    async def refresh(self, refresh_gateway=False) -> None:\n        \"\"\"Refresh client connection.\"\"\"\n        if refresh_gateway:\n            gateway = await Gateway.discover(self.auth.gateway.core)\n            self.auth.refresh_gateway(gateway)\n        self._auth = await self.auth.refresh(True)\n        self._session = self.auth.start_session()\n        await self._load_devices()\n\n    async def refresh_auth(self) -> None:\n        \"\"\"Refresh auth token if requested.\"\"\"\n        if self._session:\n            self._auth = await self._session.refresh_auth()\n        else:\n            await self.refresh()\n\n    @classmethod\n    async def from_login(\n        cls,\n        username: str,\n        password: str,\n        *,\n        country: str = DEFAULT_COUNTRY,\n        language: str = DEFAULT_LANGUAGE,\n        aiohttp_session: aiohttp.ClientSession | None = None,\n        enable_emulation: bool = False,\n    ) -> ClientAsync:\n        \"\"\"Construct a client using username and password.\n\n            This allows simpler state storage (e.g., for human-written\n            configuration) but it is a little less efficient because we need\n            to reload the gateway servers and restart the session.\n            \"\"\"\n\n        gateway = await Gateway.discover(\n            CoreAsync(country, language, session=aiohttp_session)\n        )\n        auth = await Auth.from_user_login(gateway, username, password)\n        client = cls(auth=auth, country=country, language=language, enable_emulation=enable_emulation)\n        client._session = auth.start_session()\n        await client._load_devices()\n        return client\n\n    @classmethod\n    async def from_token(\n        cls,\n        refresh_token: str,\n        oauth_url: str | None = None,\n        *,\n        country: str = DEFAULT_COUNTRY,\n        language: str = DEFAULT_LANGUAGE,\n        aiohttp_session: aiohttp.ClientSession | None = None,\n        enable_emulation: bool = False,\n    ) -> ClientAsync:\n        \"\"\"Construct a client using just a refresh token.\n            \n            This allows simpler state storage (e.g., for human-written\n            configuration) but it is a little less efficient because we need\n            to reload the gateway servers and restart the session.\n            \"\"\"\n\n        gateway = await Gateway.discover(\n            CoreAsync(country, language, session=aiohttp_session)\n        )\n        auth = Auth(gateway, refresh_token, oauth_url)\n        client = cls(auth=auth, country=country, language=language, enable_emulation=enable_emulation)\n        await client.refresh()\n        return client\n\n    @staticmethod\n    async def get_oauth_url(\n        country: str = DEFAULT_COUNTRY,\n        language: str = DEFAULT_LANGUAGE,\n        *,\n        aiohttp_session: aiohttp.ClientSession | None = None,\n    ) -> str:\n        \"\"\"Return an url to use to login in a browser.\"\"\"\n        gateway = await Gateway.discover(\n            CoreAsync(country, language, session=aiohttp_session)\n        )\n        await gateway.close()\n        return gateway.oauth_url()\n\n    @staticmethod\n    async def oauth_info_from_url(\n        url: str, aiohttp_session: aiohttp.ClientSession | None = None\n    ) -> dict:\n        \"\"\"Return authentication info from an OAuth callback URL.\"\"\"\n        core = CoreAsync(session=aiohttp_session)\n        result = await Auth.oauth_info_from_url(url, core)\n        await core.close()\n        return result\n\n    async def _load_json_info(self, info_url: str):\n        \"\"\"Load JSON data from specific url.\"\"\"\n        if not info_url:\n            return {}\n\n        content = await self._auth.gateway.core.http_get_bytes(info_url)\n\n        # we use chardet to detect correct encoding and convert to unicode string\n        encoding = chardet.detect(content)['encoding']\n        try:\n            str_content = str(content, encoding, errors='replace')\n        except (LookupError, TypeError):\n            # A LookupError is raised if the encoding was not found which could\n            # indicate a misspelling or similar mistake.\n            #\n            # A TypeError can be raised if encoding is None\n            #\n            # So we try blindly encoding.\n            str_content = str(content, errors='replace')\n\n        enc_resp = str_content.encode()\n        return json.loads(enc_resp)\n\n    async def common_lang_pack(self):\n        \"\"\"Load JSON common lang pack from specific url.\"\"\"\n        if self._devices is None:\n            return {}\n        if self._common_lang_pack is None and self._session:\n            self._common_lang_pack = (\n                await self._load_json_info(self._session.common_lang_pack_url)\n            ).get(\"pack\", {})\n        return self._common_lang_pack\n\n    async def model_url_info(self, url, device=None):\n        \"\"\"For a DeviceInfo object, get a ModelInfo object describing\n            the model's capabilities.\n            \"\"\"\n        if not url:\n            return {}\n        if url not in self._model_url_info:\n            if device:\n                _LOGGER.info(\n                    \"Loading model info for %s. Model: %s, Url: %s\",\n                    device.name,\n                    device.model_name,\n                    url,\n                )\n            self._model_url_info[url] = await self._load_json_info(url)\n        return self._model_url_info[url]\n\n    def dump(self) -> Dict[str, Any]:\n        \"\"\"Serialize the client state.\"\"\"\n\n        out = {\n            \"model_url_info\": self._model_url_info,\n        }\n\n        if self._auth:\n            out[\"auth\"] = self._auth.dump()\n            out[\"gateway\"] = self._auth.gateway.dump()\n\n        if self._session:\n            out[\"session\"] = self._session.session_id\n\n        out[\"country\"] = self._country\n        out[\"language\"] = self._language\n\n        return out\n\n    @classmethod\n    def load(cls, state: Dict[str, Any]) -> ClientAsync | None:\n        \"\"\"Load a client from serialized state.\"\"\"\n\n        auth = None\n        gateway = None\n        if \"gateway\" in state:\n            data = state[\"gateway\"]\n            gateway = Gateway(\n                data,\n                CoreAsync(\n                    data.get(\"country\", DEFAULT_COUNTRY),\n                    data.get(\"language\", DEFAULT_LANGUAGE),\n                )\n            )\n\n        if \"auth\" in state and gateway:\n            data = state[\"auth\"]\n            auth = Auth.load(gateway, data)\n\n        if not auth:\n            return None\n\n        client = cls(auth)\n\n        if \"session\" in state:\n            client._session = Session(client.auth, state[\"session\"])\n\n        if \"model_info\" in state:\n            client._model_info = state[\"model_info\"]\n\n        if \"country\" in state:\n            client._country = state[\"country\"]\n\n        if \"language\" in state:\n            client._language = state[\"language\"]\n\n        return client\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/wideq/core_exceptions.py",
    "content": "class APIError(Exception):\n    \"\"\"An error reported by the API.\"\"\"\n\n    def __init__(self, code, message):\n        self.code = code\n        self.message = message\n        super().__init__(self.message)\n\n\nclass NotLoggedInError(APIError):\n    \"\"\"The session is not valid or expired.\"\"\"\n    def __init__(self):\n        pass\n\n\nclass NotConnectedError(APIError):\n    \"\"\"The service can't contact the specified device.\"\"\"\n    def __init__(self):\n        pass\n\n\nclass FailedRequestError(APIError):\n    \"\"\"A failed request typically indicates an unsupported control on a\n    device.\n    \"\"\"\n    def __init__(self):\n        pass\n\n\nclass InvalidRequestError(APIError):\n    \"\"\"The server rejected a request as invalid.\"\"\"\n    def __init__(self):\n        pass\n\n\nclass InvalidResponseError(APIError):\n    \"\"\"The server provide an invalid response.\"\"\"\n    def __init__(self, resp_msg):\n        super().__init__(\"\", resp_msg)\n\n\nclass InvalidCredentialError(APIError):\n    \"\"\"The server rejected connection.\"\"\"\n    def __init__(self):\n        pass\n\n\nclass TokenError(APIError):\n    \"\"\"An authentication token was rejected.\"\"\"\n    def __init__(self):\n        pass\n\n\nclass DeviceNotFound(APIError):\n    \"\"\"Device ID not valid.\"\"\"\n    def __init__(self):\n        pass\n\n\nclass MonitorError(APIError):\n    \"\"\"Monitoring a device failed, possibly because the monitoring\n    session failed and needs to be restarted.\n    \"\"\"\n\n    def __init__(self, device_id, code):\n        self.device_id = device_id\n        super().__init__(code, \"Wideq Monitor Error\")\n\n\nclass InvalidDeviceStatus(Exception):\n    \"\"\"Device exception occurred when status of device is not valid.\"\"\"\n    pass\n\n\nclass AuthenticationError(Exception):\n    \"\"\"API exception occurred when fail to authenticate.\"\"\"\n\n    def __init__(self, message=None):\n        if not message:\n            self.message = \"Authentication Error\"\n        else:\n            self.message = message\n        super().__init__(self.message)\n\n\nclass MonitorRefreshError(Exception):\n    \"\"\"Refresh a device status failed.\"\"\"\n\n    def __init__(self, device_id, message):\n        self.device_id = device_id\n        self.message = message\n        super().__init__(self.message)\n\n\nclass MonitorUnavailableError(Exception):\n    \"\"\"Refresh a device status failed because connection unavailable.\"\"\"\n\n    def __init__(self, device_id, message):\n        self.device_id = device_id\n        self.message = message\n        super().__init__(self.message)\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/wideq/core_util.py",
    "content": "\"\"\"\nSupport for LG SmartThinQ device.\n\"\"\"\nimport uuid\n\n\ndef as_list(obj):\n    \"\"\"Wrap non-lists in lists.\n\n    If `obj` is a list, return it unchanged. Otherwise, return a\n    single-element list containing it.\n    \"\"\"\n\n    if isinstance(obj, list):\n        return obj\n    else:\n        return [obj]\n\n\ndef add_end_slash(url: str):\n    \"\"\"Add final slash to url.\"\"\"\n    if not url.endswith(\"/\"):\n        return url + \"/\"\n    return url\n\n\ndef gen_uuid():\n    return str(uuid.uuid4())\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/wideq/dehumidifier.py",
    "content": "\"\"\"------------------for Dehumidifier\"\"\"\nimport enum\nimport logging\nfrom typing import Optional\n\nfrom .const import (\n    FEAT_HUMIDITY,\n    FEAT_TARGET_HUMIDITY,\n    FEAT_WATER_TANK_FULL,\n)\nfrom .core_exceptions import InvalidRequestError\nfrom .device import Device, DeviceStatus\n\nCTRL_BASIC = [\"Control\", \"basicCtrl\"]\nSTATE_POWER_V1 = \"InOutInstantPower\"\n\nSUPPORT_OPERATION_MODE = [\"SupportOpMode\", \"support.airState.opMode\"]\nSUPPORT_WIND_STRENGTH = [\"SupportWindStrength\", \"support.airState.windStrength\"]\nSUPPORT_AIR_POLUTION = [\"SupportAirPolution\", \"support.airPolution\"]\n\nSTATE_OPERATION = [\"Operation\", \"airState.operation\"]\nSTATE_OPERATION_MODE = [\"OpMode\", \"airState.opMode\"]\nSTATE_TARGET_HUM = [\"HumidityCfg\", \"airState.humidity.desired\"]\nSTATE_WIND_STRENGTH = [\"WindStrength\", \"airState.windStrength\"]\n\nSTATE_CURRENT_HUM = [\"SensorHumidity\", \"airState.humidity.current\"]\nSTATE_PM1 = [\"SensorPM1\", \"airState.quality.PM1\"]\nSTATE_PM10 = [\"SensorPM10\", \"airState.quality.PM10\"]\nSTATE_PM25 = [\"SensorPM2\", \"airState.quality.PM2\"]\nSTATE_TANK_LIGHT = [\"WatertankLight\", \"airState.miscFuncState.watertankLight\"]\n\nSTATE_POWER = [STATE_POWER_V1, \"airState.energy.onCurrent\"]\n\nCMD_STATE_OPERATION = [CTRL_BASIC, \"Set\", STATE_OPERATION]\nCMD_STATE_OP_MODE = [CTRL_BASIC, \"Set\", STATE_OPERATION_MODE]\nCMD_STATE_TARGET_HUM = [CTRL_BASIC, \"Set\", STATE_TARGET_HUM]\nCMD_STATE_WIND_STRENGTH = [CTRL_BASIC, \"Set\", STATE_WIND_STRENGTH]\n\nCMD_ENABLE_EVENT_V2 = [\"allEventEnable\", \"Set\", \"airState.mon.timeout\"]\n\nDEFAULT_MIN_HUM = 30\nDEFAULT_MAX_HUM = 70\nDEFAULT_STEP_HUM = 5\n\nADD_FEAT_POLL_INTERVAL = 300  # 5 minutes\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass DHumOp(enum.Enum):\n    \"\"\"Whether a device is on or off.\"\"\"\n\n    OFF = \"@operation_off\"\n    ON = \"@operation_on\"\n\n\nclass DHumMode(enum.Enum):\n    \"\"\"The operation mode for a Dehumidifier device.\"\"\"\n\n    SMART = \"@AP_MAIN_MID_OPMODE_SMART_DEHUM_W\"\n    FAST = \"@AP_MAIN_MID_OPMODE_FAST_DEHUM_W\"\n    CILENT = \"@AP_MAIN_MID_OPMODE_CILENT_DEHUM_W\"\n    CONC_DRY = \"@AP_MAIN_MID_OPMODE_CONCENTRATION_DRY_W\"\n    CLOTH_DRY = \"@AP_MAIN_MID_OPMODE_CLOTHING_DRY_W\"\n    IONIZER = \"@AP_MAIN_MID_OPMODE_IONIZER_W\"\n\n\nclass DHumFanSpeed(enum.Enum):\n    \"\"\"The fan speed for a Dehumidifier device.\"\"\"\n\n    LOW = \"@AP_MAIN_MID_WINDSTRENGTH_DHUM_LOW_W\"\n    MID = \"@AP_MAIN_MID_WINDSTRENGTH_DHUM_MID_W\"\n    HIGH = \"@AP_MAIN_MID_WINDSTRENGTH_DHUM_HIGH_W\"\n\n\nclass DeHumidifierDevice(Device):\n    \"\"\"A higher-level interface for DeHumidifier.\"\"\"\n\n    def __init__(self, client, device):\n        super().__init__(client, device, DeHumidifierStatus(self, None))\n        self._supported_op_modes = None\n        self._supported_fan_speeds = None\n        self._humidity_range = None\n        self._humidity_step = DEFAULT_STEP_HUM\n\n        self._current_power = 0\n        self._current_power_supported = True\n\n    def _get_humidity_range(self):\n        \"\"\"Get valid humidity range for model.\"\"\"\n\n        if not self._humidity_range:\n            if not self.model_info:\n                return None\n\n            key = self._get_state_key(STATE_TARGET_HUM)\n            range_info = self.model_info.value(key)\n            if not range_info:\n                min_hum = DEFAULT_MIN_HUM\n                max_hum = DEFAULT_MAX_HUM\n            else:\n                min_hum = min(range_info.min, DEFAULT_MIN_HUM)\n                max_hum = max(range_info.max, DEFAULT_MAX_HUM)\n            self._humidity_range = [min_hum, max_hum]\n\n        return self._humidity_range\n\n    @property\n    def op_modes(self):\n        \"\"\"Return a list of available operation modes.\"\"\"\n        if self._supported_op_modes is None:\n            key = self._get_state_key(SUPPORT_OPERATION_MODE)\n            if not self.model_info.is_enum_type(key):\n                self._supported_op_modes = []\n                return []\n            mapping = self.model_info.value(key).options\n            mode_list = [e.value for e in DHumMode]\n            self._supported_op_modes = [DHumMode(o).name for o in mapping.values() if o in mode_list]\n        return self._supported_op_modes\n\n    @property\n    def fan_speeds(self):\n        \"\"\"Return a list of available fan speeds.\"\"\"\n        if self._supported_fan_speeds is None:\n            key = self._get_state_key(SUPPORT_WIND_STRENGTH)\n            if not self.model_info.is_enum_type(key):\n                self._supported_fan_speeds = []\n                return []\n            mapping = self.model_info.value(key).options\n            mode_list = [e.value for e in DHumFanSpeed]\n            self._supported_fan_speeds = [DHumFanSpeed(o).name for o in mapping.values() if o in mode_list]\n        return self._supported_fan_speeds\n\n    @property\n    def target_humidity_step(self):\n        \"\"\"Return target humidity step used.\"\"\"\n        return self._humidity_step\n\n    @property\n    def target_humidity_min(self):\n        \"\"\"Return minimum value for target humidity.\"\"\"\n        if not (hum_range := self._get_humidity_range()):\n            return None\n        return hum_range[0]\n\n    @property\n    def target_humidity_max(self):\n        \"\"\"Return maximum value for target humidity.\"\"\"\n        if not (hum_range := self._get_humidity_range()):\n            return None\n        return hum_range[1]\n\n    async def power(self, turn_on):\n        \"\"\"Turn on or off the device (according to a boolean).\"\"\"\n\n        op = DHumOp.ON if turn_on else DHumOp.OFF\n        keys = self._get_cmd_keys(CMD_STATE_OPERATION)\n        op_value = self.model_info.enum_value(keys[2], op.value)\n        if self._should_poll:\n            # different power command for ThinQ1 devices\n            cmd = \"Start\" if turn_on else \"Stop\"\n            await self.set(keys[0], keys[2], key=None, value=cmd)\n            self._status.update_status(keys[2], op_value)\n            return\n        await self.set(keys[0], keys[1], key=keys[2], value=op_value)\n\n    async def set_op_mode(self, mode):\n        \"\"\"Set the device's operating mode to an `OpMode` value.\"\"\"\n\n        if mode not in self.op_modes:\n            raise ValueError(f\"Invalid operating mode: {mode}\")\n        keys = self._get_cmd_keys(CMD_STATE_OP_MODE)\n        mode_value = self.model_info.enum_value(keys[2], DHumMode[mode].value)\n        await self.set(keys[0], keys[1], key=keys[2], value=mode_value)\n\n    async def set_fan_speed(self, speed):\n        \"\"\"Set the fan speed to a value from the `ACFanSpeed` enum.\"\"\"\n\n        if speed not in self.fan_speeds:\n            raise ValueError(f\"Invalid fan speed: {speed}\")\n        keys = self._get_cmd_keys(CMD_STATE_WIND_STRENGTH)\n        speed_value = self.model_info.enum_value(keys[2], DHumFanSpeed[speed].value)\n        await self.set(keys[0], keys[1], key=keys[2], value=speed_value)\n\n    async def set_target_humidity(self, humidity):\n        \"\"\"Set the device's target humidity.\"\"\"\n\n        range_info = self._get_humidity_range()\n        if range_info and not (range_info[0] <= humidity <= range_info[1]):\n            raise ValueError(f\"Target humidity out of range: {humidity}\")\n        keys = self._get_cmd_keys(CMD_STATE_TARGET_HUM)\n        await self.set(keys[0], keys[1], key=keys[2], value=humidity)\n\n    async def get_power(self):\n        \"\"\"Get the instant power usage in watts of the whole unit\"\"\"\n        if not self._current_power_supported:\n            return 0\n\n        try:\n            value = await self._get_config(STATE_POWER_V1)\n            return value[STATE_POWER_V1]\n        except (ValueError, InvalidRequestError):\n            # Device does not support whole unit instant power usage\n            self._current_power_supported = False\n            return 0\n\n    async def set(self, ctrl_key, command, *, key=None, value=None, data=None, ctrl_path=None):\n        \"\"\"Set a device's control for `key` to `value`.\"\"\"\n        await super().set(\n            ctrl_key, command, key=key, value=value, data=data, ctrl_path=ctrl_path\n        )\n        if key is not None and self._status:\n            self._status.update_status(key, value)\n\n    def reset_status(self):\n        self._status = DeHumidifierStatus(self, None)\n        return self._status\n\n    # async def _get_device_info(self):\n    #    \"\"\"Call additional method to get device information for API v1.\n    #\n    #    Called by 'device_poll' method using a lower poll rate\n    #    \"\"\"\n    #    # this command is to get power usage on V1 device\n    #    self._current_power = await self.get_power()\n\n    # async def _pre_update_v2(self):\n    #    \"\"\"Call additional methods before data update for v2 API.\"\"\"\n    #    # this command is to get power and temp info on V2 device\n    #    keys = self._get_cmd_keys(CMD_ENABLE_EVENT_V2)\n    #    await self.set(keys[0], keys[1], key=keys[2], value=\"70\", ctrl_path=\"control\")\n\n    async def poll(self) -> Optional[\"DeHumidifierStatus\"]:\n        \"\"\"Poll the device's current state.\"\"\"\n\n        res = await self.device_poll()\n        # res = await self.device_poll(\n        #     thinq1_additional_poll=ADD_FEAT_POLL_INTERVAL,\n        #     thinq2_query_device=True,\n        # )\n        if not res:\n            return None\n        # if self._should_poll:\n        #     res[AC_STATE_POWER_V1] = self._current_power\n\n        self._status = DeHumidifierStatus(self, res)\n\n        return self._status\n\n\nclass DeHumidifierStatus(DeviceStatus):\n    \"\"\"Higher-level information about a DeHumidifier's current status.\"\"\"\n\n    def __init__(self, device, data):\n        super().__init__(device, data)\n        self._operation = None\n\n    def _get_operation(self):\n        if self._operation is None:\n            key = self._get_state_key(STATE_OPERATION)\n            operation = self.lookup_enum(key, True)\n            if not operation:\n                return None\n            self._operation = operation\n        try:\n            return DHumOp(self._operation)\n        except ValueError:\n            return None\n\n    def update_status(self, key, value):\n        if not super().update_status(key, value):\n            return False\n        if key in STATE_OPERATION:\n            self._operation = None\n        return True\n\n    @property\n    def is_on(self):\n        op = self._get_operation()\n        if not op:\n            return False\n        return op != DHumOp.OFF\n\n    @property\n    def operation(self):\n        op = self._get_operation()\n        if not op:\n            return None\n        return op.name\n\n    @property\n    def operation_mode(self):\n        key = self._get_state_key(STATE_OPERATION_MODE)\n        if (value := self.lookup_enum(key, True)) is None:\n            return None\n        try:\n            return DHumMode(value).name\n        except ValueError:\n            return None\n\n    @property\n    def fan_speed(self):\n        key = self._get_state_key(STATE_WIND_STRENGTH)\n        if (value := self.lookup_enum(key, True)) is None:\n            return None\n        try:\n            return DHumFanSpeed(value).name\n        except ValueError:\n            return None\n\n    @property\n    def current_humidity(self):\n        support_key = self._get_state_key(SUPPORT_AIR_POLUTION)\n        if self._device.model_info.enum_value(support_key, \"@SENSOR_HUMID_SUPPORT\") is None:\n            return None\n        key = self._get_state_key(STATE_CURRENT_HUM)\n        if (value := self.to_int_or_none(self.lookup_range(key))) is None:\n            return None\n        return self._update_feature(FEAT_HUMIDITY, value, False)\n\n    @property\n    def target_humidity(self):\n        key = self._get_state_key(STATE_TARGET_HUM)\n        if (value := self.to_int_or_none(self.lookup_range(key))) is None:\n            return None\n        return self._update_feature(FEAT_TARGET_HUMIDITY, value, False)\n\n    @property\n    def water_tank_full(self):\n        key = self._get_state_key(STATE_TANK_LIGHT)\n        if (value := self.lookup_enum(key)) is None:\n            return None\n        return self._update_feature(FEAT_WATER_TANK_FULL, value)\n\n    def _update_features(self):\n        _ = [\n            self.current_humidity,\n            self.target_humidity,\n            self.water_tank_full,\n        ]\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/wideq/device.py",
    "content": "\"\"\"A high-level, convenient abstraction for interacting with the LG\nSmartThinQ API for most use cases.\n\"\"\"\nimport aiohttp\nimport asyncio\nimport base64\nfrom collections import namedtuple\nfrom datetime import datetime, timedelta\nimport enum\nimport json\nimport logging\nfrom numbers import Number\nfrom typing import Any, Optional\n\nfrom . import core_exceptions as core_exc\nfrom .const import (\n    STATE_OPTIONITEM_NONE,\n    STATE_OPTIONITEM_OFF,\n    STATE_OPTIONITEM_ON,\n    STATE_OPTIONITEM_UNKNOWN,\n    UNIT_TEMP_CELSIUS,\n    UNIT_TEMP_FAHRENHEIT,\n)\nfrom .core_async import ClientAsync\nfrom .device_info import DeviceInfo, PlatformType\n\nBIT_OFF = \"OFF\"\nBIT_ON = \"ON\"\n\nLABEL_BIT_OFF = \"@CP_OFF_EN_W\"\nLABEL_BIT_ON = \"@CP_ON_EN_W\"\n\nLOCAL_LANG_PACK = {\n    LABEL_BIT_OFF: STATE_OPTIONITEM_OFF,\n    LABEL_BIT_ON: STATE_OPTIONITEM_ON,\n    BIT_OFF: STATE_OPTIONITEM_OFF,\n    BIT_ON: STATE_OPTIONITEM_ON,\n    \"CLOSE\": STATE_OPTIONITEM_OFF,\n    \"OPEN\": STATE_OPTIONITEM_ON,\n    \"UNLOCK\": STATE_OPTIONITEM_OFF,\n    \"LOCK\": STATE_OPTIONITEM_ON,\n    \"INITIAL_BIT_OFF\": STATE_OPTIONITEM_OFF,\n    \"INITIAL_BIT_ON\": STATE_OPTIONITEM_ON,\n    \"IGNORE\": STATE_OPTIONITEM_NONE,\n    \"NOT_USE\": \"Not Used\",\n}\n\nMIN_TIME_BETWEEN_CLI_REFRESH = 10  # seconds\nMAX_RETRIES = 3\nMAX_UPDATE_FAIL_ALLOWED = 10\nSLEEP_BETWEEN_RETRIES = 2  # seconds\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass UnitTempModes(enum.Enum):\n    Celsius = UNIT_TEMP_CELSIUS\n    Fahrenheit = UNIT_TEMP_FAHRENHEIT\n\n\nclass Monitor(object):\n    \"\"\"A monitoring task for a device.\n        \n        This task is robust to some API-level failures. If the monitoring\n        task expires, it attempts to start a new one automatically. This\n        makes one `Monitor` object suitable for long-term monitoring.\n        \"\"\"\n    _client_lock = asyncio.Lock()\n    _client_connected = True\n    _critical_error = False\n    _last_client_refresh = datetime.min\n    _not_logged_count = 0\n\n    def __init__(self, client, device_id: str, platform_type=PlatformType.THINQ1, device_type: str = None) -> None:\n        \"\"\"Initialize monitor class.\"\"\"\n        self._client: ClientAsync = client\n        self._device_id = device_id\n        self._platform_type = platform_type\n        self._device_descr = device_id\n        if device_type:\n            self._device_descr += f\" ({device_type})\"\n        self._work_id: Optional[str] = None\n        self._disconnected = True\n        self._has_error = False\n\n    def _raise_error(self, msg, *, not_logged=False, exc: Exception = None, exc_info=False):\n        \"\"\"Log and raise error with different level depending on condition.\"\"\"\n        if not_logged and Monitor._client_connected:\n            Monitor._client_connected = False\n            self._has_error = True\n            _LOGGER.warning(\"%s (device: %s)\", msg, self._device_descr, exc_info=exc_info)\n\n        log_lev = logging.DEBUG\n        if not self._has_error:\n            self._has_error = True\n            if Monitor._client_connected:\n                log_lev = logging.WARNING\n        _LOGGER.log(log_lev, \"Device %s: %s\", self._device_descr, msg, exc_info=exc_info)\n\n        if not Monitor._critical_error and Monitor._not_logged_count >= MAX_UPDATE_FAIL_ALLOWED:\n            Monitor._critical_error = True\n            _LOGGER.error(msg, exc_info=exc_info)\n\n        if Monitor._critical_error:\n            raise core_exc.MonitorUnavailableError(self._device_id, msg) from exc\n        raise core_exc.MonitorRefreshError(self._device_id, msg) from exc\n\n    async def _refresh_auth(self):\n        \"\"\"Refresh the devices shared client auth token\"\"\"\n        async with Monitor._client_lock:\n            await self._client.refresh_auth()\n\n    async def _refresh_client(self):\n        \"\"\"Refresh the devices shared client\"\"\"\n        async with Monitor._client_lock:\n            if Monitor._client_connected:\n                return True\n            call_time = datetime.utcnow()\n            difference = (call_time - Monitor._last_client_refresh).total_seconds()\n            if difference <= MIN_TIME_BETWEEN_CLI_REFRESH:\n                return False\n\n            Monitor._last_client_refresh = call_time\n            refresh_gateway = False\n            if Monitor._not_logged_count >= 30:\n                Monitor._not_logged_count = 0\n                refresh_gateway = True\n            Monitor._not_logged_count += 1\n            _LOGGER.debug(\"ThinQ client not connected. Trying to reconnect...\")\n            await self._client.refresh(refresh_gateway)\n            _LOGGER.warning(\"ThinQ client successfully reconnected\")\n            Monitor._client_connected = True\n            Monitor._critical_error = False\n            Monitor._not_logged_count = 0\n            return True\n\n    async def refresh(self, query_device=False) -> Optional[any]:\n        \"\"\"Update device state\"\"\"\n        _LOGGER.debug(\"Updating ThinQ device %s\", self._device_descr)\n\n        state = None\n        for iteration in range(MAX_RETRIES):\n            _LOGGER.debug(\"Polling...\")\n            # Wait one second between iteration\n            if iteration > 0:\n                await asyncio.sleep(SLEEP_BETWEEN_RETRIES)\n\n            try:\n                if not await self._restart_monitor():\n                    self._raise_error(\n                        \"Connection to ThinQ not available. Client refresh error\",\n                        not_logged=True,\n                    )\n                state = await self.poll(query_device)\n\n            except core_exc.NotConnectedError:\n                self._disconnected = True\n                self._has_error = False\n                _LOGGER.debug(\"Device %s not connected. Status not available\", self._device_descr)\n                raise\n\n            except core_exc.DeviceNotFound:\n                self._raise_error(\"Device ID is invalid, status update failed\")\n\n            except core_exc.InvalidResponseError as exc:\n                self._raise_error(\"Received invalid response, status update failed\", exc=exc, exc_info=True)\n\n            except core_exc.NotLoggedInError as exc:\n                # This could be raised by an expired token\n                self._raise_error(\n                    \"Connection to ThinQ failed. ThinQ API error\",\n                    not_logged=True,\n                    exc=exc,\n                )\n\n            except (core_exc.InvalidCredentialError, core_exc.TokenError) as exc:\n                self._raise_error(\n                    \"Connection to ThinQ failed. Invalid Credential or Invalid Token\",\n                    not_logged=True,\n                    exc=exc,\n                )\n\n            except (asyncio.TimeoutError, aiohttp.ServerTimeoutError) as exc:\n                # These are network errors, refresh client is not required\n                self._raise_error(\"Connection to ThinQ failed. Timeout error\", exc=exc)\n\n            except aiohttp.ClientError as exc:\n                # These are network errors, refresh client is not required\n                self._raise_error(\"Connection to ThinQ failed. Network connection error\", exc=exc)\n\n            except Exception as exc:\n                self._raise_error(\n                    \"Unexpected error while updating device status\",\n                    not_logged=True,\n                    exc=exc,\n                    exc_info=True,\n                )\n\n            else:\n                if state:\n                    _LOGGER.debug(\"ThinQ status updated\")\n                    # l = dir(state)\n                    # _LOGGER.debug('Status attributes: %s', l)\n                    break\n\n                else:\n                    _LOGGER.debug(\"No status available yet\")\n                    continue\n\n        self._has_error = False\n        return state\n\n    async def _restart_monitor(self) -> bool:\n        \"\"\"Restart the device monitor\"\"\"\n\n        if Monitor._client_connected:\n            # try to refresh auth token before it expires\n            await self._refresh_auth()\n        else:\n            self._disconnected = True\n            if not await self._refresh_client():\n                return False\n\n        if not self._disconnected:\n            return True\n\n        await self.start()\n        self._disconnected = False\n        return True\n\n    async def start(self) -> None:\n        \"\"\"Start monitor for ThinQ1 device.\"\"\"\n        if self._platform_type != PlatformType.THINQ1:\n            return\n        self._work_id = await self._client.session.monitor_start(self._device_id)\n\n    async def stop(self) -> None:\n        \"\"\"Stop monitor for ThinQ1 device.\"\"\"\n        if not self._work_id:\n            return\n        work_id = self._work_id\n        self._work_id = None\n        await self._client.session.monitor_stop(self._device_id, work_id)\n\n    async def poll(self, query_device=False) -> Optional[any]:\n        \"\"\"Get the current status data (a bytestring) or None if the\n            device is not yet ready.\n            \"\"\"\n        if self._platform_type == PlatformType.THINQ1:\n            return await self._poll_v1()\n        return await self._poll_v2(query_device)\n\n    async def _poll_v1(self) -> Optional[bytes]:\n        \"\"\"Get the current status data (a bytestring) or None if the\n            device is not yet ready.\n            \"\"\"\n        if not self._work_id:\n            await self.start()\n            if not self._work_id:\n                return None\n        try:\n            return await self._client.session.monitor_poll(self._device_id, self._work_id)\n        except core_exc.MonitorError:\n            # Try to restart the task.\n            await self.stop()\n            return None\n\n    async def _poll_v2(self, query_device=False) -> Optional[any]:\n        \"\"\"Get the current status data (a json str) or None if the\n            device is not yet ready.\n            \"\"\"\n        if self._platform_type != PlatformType.THINQ2:\n            return None\n        if query_device:\n            result = await self._client.session.get_device_v2_settings(self._device_id)\n            return result.get(\"snapshot\")\n\n        await self._client.refresh_devices()\n        device_data = self._client.get_device(self._device_id)\n        if device_data:\n            return device_data.snapshot\n        return None\n\n    @staticmethod\n    def decode_json(data: bytes) -> dict[str, Any]:\n        \"\"\"Decode a bytestring that encodes JSON status data.\"\"\"\n\n        return json.loads(data.decode(\"utf8\"))\n\n    async def poll_json(self) -> Optional[dict[str, Any]]:\n        \"\"\"For devices where status is reported via JSON data, get the\n            decoded status result (or None if status is not available).\n            \"\"\"\n\n        data = await self.poll()\n        return self.decode_json(data) if data else None\n\n    async def __aenter__(self) -> \"Monitor\":\n        await self.start()\n        return self\n\n    async def __aexit__(self, exc_type, exc_value, exc_traceback) -> None:\n        await self.stop()\n\n\nEnumValue = namedtuple(\"EnumValue\", [\"options\"])\nRangeValue = namedtuple(\"RangeValue\", [\"min\", \"max\", \"step\"])\nBitValue = namedtuple(\"BitValue\", [\"options\"])\nReferenceValue = namedtuple(\"ReferenceValue\", [\"reference\"])\n\n\nclass ModelInfo(object):\n    \"\"\"A description of a device model's capabilities.\n        \"\"\"\n\n    def __init__(self, data):\n        self._data = data\n        self._bit_keys = {}\n\n    @property\n    def is_info_v2(self):\n        return False\n\n    def as_dict(self):\n        \"\"\"Return the data dictionary\"\"\"\n        if not self._data:\n            return {}\n        return self._data.copy()\n\n    @property\n    def model_type(self):\n        return self._data.get(\"Info\", {}).get(\"modelType\", \"\")\n\n    def config_value(self, key):\n        return self._data.get(\"Config\", {}).get(key, \"\")\n\n    def value_type(self, name):\n        if name in self._data[\"Value\"]:\n            return self._data[\"Value\"][name].get(\"type\")\n        return None\n\n    def value_exist(self, name):\n        return name in self._data[\"Value\"]\n\n    def is_enum_type(self, key):\n        if (value_type := self.value_type(key)) is None:\n            return False\n        return value_type in (\"Enum\", \"enum\")\n\n    def value(self, name):\n        \"\"\"Look up information about a value.\n        \n        Return either an `EnumValue` or a `RangeValue`.\n        \"\"\"\n        d = self._data[\"Value\"][name]\n        if d[\"type\"] in (\"Enum\", \"enum\"):\n            return EnumValue(d[\"option\"])\n        elif d[\"type\"] == \"Range\":\n            return RangeValue(\n                d[\"option\"][\"min\"], d[\"option\"][\"max\"], d[\"option\"].get(\"step\", 0)\n            )\n        elif d[\"type\"] == \"Bit\":\n            bit_values = {}\n            for bit in d[\"option\"]:\n                bit_values[bit[\"startbit\"]] = {\n                    \"value\": bit[\"value\"],\n                    \"length\": bit[\"length\"],\n                }\n            return BitValue(bit_values)\n        elif d[\"type\"] == \"Reference\":\n            ref = d[\"option\"][0]\n            return ReferenceValue(self._data[ref])\n        elif d[\"type\"] == \"Boolean\":\n            return EnumValue({\"0\": BIT_OFF, \"1\": BIT_ON})\n        elif d[\"type\"] == \"String\":\n            pass\n        else:\n            _LOGGER.error(\n                \"ModelInfo: unsupported value type (%s) - value: %s\",\n                d[\"type\"],\n                d,\n            )\n            return None\n\n    def default(self, name):\n        \"\"\"Get the default value, if it exists, for a given value.\n        \"\"\"\n\n        return self._data.get(\"Value\", {}).get(name, {}).get(\"default\")\n\n    def enum_value(self, key, name):\n        \"\"\"Look up the encoded value for a friendly enum name.\n        \"\"\"\n        if not self.value_type(key):\n            return None\n\n        options = self.value(key).options\n        options_inv = {v: k for k, v in options.items()}  # Invert the map.\n        return options_inv.get(name)\n\n    def enum_name(self, key, value):\n        \"\"\"Look up the friendly enum name for an encoded value.\n        \"\"\"\n        if not self.value_type(key):\n            return None\n\n        values = self.value(key)\n        if not hasattr(values, \"options\"):\n            return None\n        options = values.options\n        return options.get(value, \"\")\n\n    def enum_index(self, key, index):\n        \"\"\"Look up the friendly enum name for an indexed value.\n        \"\"\"\n        return self.enum_name(key, index)\n\n    def range_name(self, key):\n        \"\"\"Look up the value of a RangeValue.  Not very useful other than for comprehension\n        \"\"\"\n\n        return key\n\n    def bit_name(self, key, bit_index, value):\n        \"\"\"Look up the friendly name for an encoded bit value\n        \"\"\"\n        if not self.value_type(key):\n            return str(value)\n\n        options = self.value(key).options\n\n        if not self.value_type(options[bit_index][\"value\"]):\n            return str(value)\n\n        enum_options = self.value(options[bit_index][\"value\"]).options\n        return enum_options[value]\n\n    def _get_bit_key(self, key):\n\n        def search_bit_key(key, data):\n            if not data:\n                return {}\n            for i in range(1, 4):\n                opt_key = f\"Option{str(i)}\"\n                option = data.get(opt_key)\n                if not option:\n                    continue\n                for opt in option.get(\"option\", []):\n                    if key == opt.get(\"value\", \"\"):\n                        start_bit = opt.get(\"startbit\")\n                        length = opt.get(\"length\", 1)\n                        if start_bit is None:\n                            return {}\n                        return {\n                            \"option\": opt_key,\n                            \"startbit\": start_bit,\n                            \"length\": length,\n                        }\n            return {}\n\n        bit_key = self._bit_keys.get(key)\n        if bit_key is None:\n            data = self._data.get(\"Value\")\n            bit_key = search_bit_key(key, data)\n            self._bit_keys[key] = bit_key\n\n        return bit_key\n\n    def bit_value(self, key, values):\n        \"\"\"Look up the bit value for an specific key\n        \"\"\"\n        bit_key = self._get_bit_key(key)\n        if not bit_key:\n            return None\n        value = None if not values else values.get(bit_key[\"option\"])\n        if not value:\n            return \"0\"\n        bit_value = int(value)\n        start_bit = bit_key[\"startbit\"]\n        length = bit_key[\"length\"]\n        val = 0\n        for i in range(0, length):\n            bit_index = 2 ** (start_bit + i)\n            bit = 1 if bit_value & bit_index else 0\n            val += bit * (2 ** i)\n        return str(val)\n\n    def reference_name(self, key, value, ref_key=\"_comment\"):\n        \"\"\"Look up the friendly name for an encoded reference value\n        \"\"\"\n        value = str(value)\n        if not self.value_type(key):\n            return None\n\n        reference = self.value(key).reference\n\n        if value in reference:\n            ref_key_value = reference[value].get(ref_key)\n            if ref_key_value:\n                return ref_key_value\n            return reference[value].get(\"label\")\n        return None\n\n    @property\n    def binary_control_data(self):\n        \"\"\"Check that type of control is BINARY(BYTE).\n        \"\"\"\n        return self._data[\"ControlWifi\"][\"type\"] == \"BINARY(BYTE)\"\n\n    def get_control_cmd(self, cmd_key, ctrl_key=None):\n        \"\"\"Get the payload used to send the command.\"\"\"\n        control = None\n        if \"ControlWifi\" in self._data:\n            control_data = self._data[\"ControlWifi\"].get(\"action\", {}).get(cmd_key)\n            if control_data:\n                control = control_data.copy()  # we copy so that we can manipulate\n                if ctrl_key:\n                    control[\"cmd\"] = ctrl_key\n        return control\n\n    @property\n    def byte_monitor_data(self):\n        \"\"\"Check that type of monitoring is BINARY(BYTE).\"\"\"\n        return self._data[\"Monitoring\"][\"type\"] == \"BINARY(BYTE)\"\n\n    @property\n    def hex_monitor_data(self):\n        \"\"\"Check that type of monitoring is BINARY(HEX).\"\"\"\n        return self._data[\"Monitoring\"][\"type\"] == \"BINARY(HEX)\"\n\n    def decode_monitor_byte(self, data):\n        \"\"\"Decode binary byte encoded status data.\"\"\"\n\n        decoded = {}\n        total_bytes = len(data)\n        for item in self._data[\"Monitoring\"][\"protocol\"]:\n            key = item[\"value\"]\n            value = 0\n            start_byte: int = item[\"startByte\"]\n            end_byte: int = start_byte + item[\"length\"]\n            if total_bytes >= end_byte:\n                for v in data[start_byte: end_byte]:\n                    value = (value << 8) + v\n            decoded[key] = str(value)\n        return decoded\n\n    def decode_monitor_hex(self, data):\n        \"\"\"Decode binary hex encoded status data.\"\"\"\n\n        decoded = {}\n        hex_list = data.decode(\"utf8\").split(\",\")\n        total_bytes = len(hex_list)\n        for item in self._data[\"Monitoring\"][\"protocol\"]:\n            key = item[\"value\"]\n            value = 0\n            start_byte: int = item[\"startByte\"]\n            end_byte: int = start_byte + item[\"length\"]\n            if total_bytes >= end_byte:\n                for i in range(start_byte, end_byte):\n                    value = (value << 8) + int(hex_list[i], 16)\n            decoded[key] = str(value)\n        return decoded\n\n    @staticmethod\n    def decode_monitor_json(data):\n        \"\"\"Decode a bytestring that encodes JSON status data.\"\"\"\n        return json.loads(data.decode(\"utf8\"))\n\n    def decode_monitor(self, data):\n        \"\"\"Decode  status data.\"\"\"\n\n        if self.byte_monitor_data:\n            return self.decode_monitor_byte(data)\n        if self.hex_monitor_data:\n            return self.decode_monitor_hex(data)\n        return self.decode_monitor_json(data)\n\n    @staticmethod\n    def _get_current_temp_key(key: str, data):\n        \"\"\"Special case for oven current temperature, that in protocol\n        is represented with a suffix \"F\" or \"C\" depending from the unit\n        \"\"\"\n        if key.count(\"CurrentTemperature\") == 0:\n            return key\n        new_key = key[:-1]\n        if not new_key.endswith(\"CurrentTemperature\"):\n            return key\n        unit_key = f\"{new_key}Unit\"\n        if unit_key not in data:\n            return key\n        if data[unit_key][0] == key[-1]:\n            return f\"{new_key}Value\"\n        return key\n\n    def decode_snapshot(self, data, key):\n        \"\"\"Decode  status data.\"\"\"\n        decoded = {}\n        if self._data[\"Monitoring\"][\"type\"] != \"THINQ2\":\n            return decoded\n        info = data.get(key)\n        if not info:\n            return decoded\n\n        protocol = self._data[\"Monitoring\"][\"protocol\"]\n        if isinstance(protocol, list):\n            for elem in protocol:\n                if super_set := elem.get(\"superSet\"):\n                    key = elem[\"value\"]\n                    value = data\n                    for ident in super_set.split(\".\"):\n                        if value is None:\n                            break\n                        pr_key = self._get_current_temp_key(ident, value)\n                        value = value.get(pr_key)\n                    if value is not None:\n                        if isinstance(value, Number):\n                            value = int(value)\n                        decoded[key] = str(value)\n            return decoded\n\n        convert_rule = self._data.get(\"ConvertingRule\", {})\n        for data_key, value_key in protocol.items():\n            value = \"\"\n            raw_value = info.get(data_key)\n            if raw_value is not None:\n                value = str(raw_value)\n                if isinstance(raw_value, Number):\n                    value = str(int(raw_value))\n                elif value_key in convert_rule:\n                    value_rules = convert_rule[value_key].get(\"MonitoringConvertingRule\", {})\n                    if raw_value in value_rules:\n                        value = value_rules[raw_value]\n            decoded[value_key] = str(value)\n        return decoded\n\n\nclass ModelInfoV2(object):\n    \"\"\"A description of a device model's capabilities.\n        Type V2.\n        \"\"\"\n\n    def __init__(self, data):\n        self._data = data\n\n    @property\n    def is_info_v2(self):\n        return True\n\n    def as_dict(self):\n        \"\"\"Return the data dictionary\"\"\"\n        if not self._data:\n            return {}\n        return self._data.copy()\n\n    @property\n    def model_type(self):\n        return self._data.get(\"Info\", {}).get(\"modelType\", \"\")\n\n    def config_value(self, key):\n        return self._data.get(\"Config\", {}).get(key, \"\")\n\n    def value_type(self, name):\n        if name in self._data[\"MonitoringValue\"]:\n            return self._data[\"MonitoringValue\"][name].get(\"dataType\")\n        return None\n\n    def is_enum_type(self, key):\n        if (value_type := self.value_type(key)) is None:\n            return False\n        return value_type in (\"Enum\", \"enum\")\n\n    def value_exist(self, name):\n        return name in self._data[\"MonitoringValue\"]\n\n    def data_root(self, name):\n        if name in self._data[\"MonitoringValue\"]:\n            if \"dataType\" in self._data[\"MonitoringValue\"][name]:\n                return self._data[\"MonitoringValue\"][name]\n            ref = self._data[\"MonitoringValue\"][name].get(\"ref\")\n            if ref:\n                return self._data.get(ref)\n\n        return None\n\n    def value(self, data):\n        \"\"\"Look up information about a value.\n        \n        Return either an `EnumValue` or a `RangeValue`.\n        \"\"\"\n        data_type = data.get(\"dataType\")\n        if not data_type:\n            return data\n        elif data_type in (\"Enum\", \"enum\"):\n            return data[\"valueMapping\"]\n        elif data_type == \"range\":\n            return RangeValue(data[\"valueMapping\"][\"min\"], data[\"valueMapping\"][\"max\"], 1)\n        # elif d['dataType'] == 'Bit':\n        #    bit_values = {}\n        #    for bit in d['option']:\n        #        bit_values[bit['startbit']] = {\n        #        'value' : bit['value'],\n        #        'length' : bit['length'],\n        #        }\n        #    return BitValue(\n        #            bit_values\n        #            )\n        # elif d['dataType'] == 'Reference':\n        #    ref =  d['option'][0]\n        #    return ReferenceValue(\n        #            self.data[ref]\n        #            )\n        elif data_type in (\"Boolean\", \"boolean\"):\n            ret_val = {\"BOOL\": True}\n            ret_val.update(data[\"valueMapping\"])\n            return ret_val\n        # elif d['dataType'] == 'String':\n        #    pass\n        else:\n            _LOGGER.error(\n                \"ModelInfoV2: unsupported value type (%s) - value: %s\",\n                data_type,\n                data,\n            )\n            return None\n\n    def default(self, name):\n        \"\"\"Get the default value, if it exists, for a given value.\n        \"\"\"\n        data = self.data_root(name)\n        if data:\n            return data.get(\"default\")\n\n        return None\n\n    def enum_value(self, key, name):\n        \"\"\"Look up the encoded value for a friendly enum name.\n        \"\"\"\n        data = self.data_root(key)\n        if not data:\n            return None\n\n        options = self.value(data)\n        options_inv = {v[\"label\"]: k for k, v in options.items() if v.get(\"label\")}  # Invert the map.\n        return options_inv.get(name)\n\n    def enum_name(self, key, value):\n        \"\"\"Look up the friendly enum name for an encoded value.\n        \"\"\"\n        data = self.data_root(key)\n        if not data:\n            return None\n\n        options = self.value(data)\n        item = options.get(value, {})\n        if options.get(\"BOOL\", False):\n            index = item.get(\"index\", 0)\n            return BIT_ON if index == 1 else BIT_OFF\n        return item.get(\"label\", \"\")\n\n    def enum_index(self, key, index):\n        \"\"\"Look up the friendly enum name for an indexed value.\n        \"\"\"\n        data = self.data_root(key)\n        if not data:\n            return None\n\n        options = self.value(data)\n        for item in options.values():\n            idx = item.get(\"index\", -1)\n            if idx == index:\n                return item.get(\"label\", \"\")\n\n        return \"\"\n\n    def range_name(self, key):\n        \"\"\"Look up the value of a RangeValue.  Not very useful other than for comprehension\n        \"\"\"\n        return key\n\n    def bit_name(self, key, bit_index, value):\n        \"\"\"Look up the friendly name for an encoded bit value\n        \"\"\"\n        return None\n\n    def bit_value(self, key, value):\n        \"\"\"Look up the bit value for an specific key\n            Not used in model V2\n            \"\"\"\n        return None\n\n    def reference_name(self, key, value, ref_key=\"_comment\"):\n        \"\"\"Look up the friendly name for an encoded reference value\n        \"\"\"\n        data = self.data_root(key)\n        if not data:\n            return None\n\n        reference = self.value(data)\n\n        if value in reference:\n            ref_key_value = reference[value].get(ref_key)\n            if ref_key_value:\n                return ref_key_value\n            return reference[value].get(\"label\")\n        return None\n\n    def target_key(self, key, value, target):\n        \"\"\"Look up the friendly name for an encoded reference value\n        \"\"\"\n        data = self.data_root(key)\n        if not data:\n            return None\n\n        return data.get(\"targetKey\", {}).get(target, {}).get(value)\n\n    @property\n    def binary_control_data(self):\n        \"\"\"Check that type of control is BINARY(BYTE).\n        \"\"\"\n        return False\n\n    def get_control_cmd(self, cmd_key, ctrl_key=None):\n        \"\"\"Get the payload used to send the command.\"\"\"\n        control = None\n        if \"ControlWifi\" in self._data:\n            control_data = self._data[\"ControlWifi\"].get(cmd_key)\n            if control_data:\n                control = control_data.copy()  # we copy so that we can manipulate\n                if ctrl_key:\n                    control[\"ctrlKey\"] = ctrl_key\n        return control\n\n    @property\n    def binary_monitor_data(self):\n        \"\"\"Check that type of monitoring is BINARY(BYTE).\n        \"\"\"\n        return False\n\n    def decode_monitor_binary(self, data):\n        \"\"\"Decode binary encoded status data.\n        \"\"\"\n\n        return {}\n\n    def decode_monitor_json(self, data):\n        \"\"\"Decode a bytestring that encodes JSON status data.\"\"\"\n\n        return json.loads(data.decode(\"utf8\"))\n\n    def decode_monitor(self, data):\n        \"\"\"Decode  status data.\"\"\"\n\n        if self.binary_monitor_data:\n            return self.decode_monitor_binary(data)\n        else:\n            return self.decode_monitor_json(data)\n\n    def decode_snapshot(self, data, key):\n        \"\"\"Decode  status data.\"\"\"\n        return data.get(key)\n\n\nclass ModelInfoV2AC(ModelInfo):\n    \"\"\"A description of a device model's capabilities.\n        Type V2AC and other models with \"data_type in Value.\n        \"\"\"\n\n    @staticmethod\n    def valid_value_data(value_data):\n        \"\"\"Determine if valid Value data is in this model.\"\"\"\n        first_value = list(value_data.values())[0]\n        if \"data_type\" in first_value:\n            return True\n        return False\n\n    @property\n    def is_info_v2(self):\n        return True\n\n    def value_type(self, name):\n        if name in self._data[\"Value\"]:\n            return self._data[\"Value\"][name].get(\"data_type\")\n        return None\n\n    def value(self, name):\n        \"\"\"Look up information about a value.\n\n        Return either an `EnumValue` or a `RangeValue`.\n        \"\"\"\n        d = self._data[\"Value\"][name]\n        if d[\"data_type\"] in (\"Enum\", \"enum\"):\n            return EnumValue(d[\"value_mapping\"])\n        elif d[\"data_type\"] in (\"Range\", \"range\"):\n            return RangeValue(\n                d[\"value_validation\"][\"min\"], d[\"value_validation\"][\"max\"], d[\"value_validation\"].get(\"step\", 0)\n            )\n        # elif d[\"type\"] == \"Bit\":\n        #    bit_values = {}\n        #    for bit in d[\"option\"]:\n        #        bit_values[bit[\"startbit\"]] = {\n        #            \"value\": bit[\"value\"],\n        #            \"length\": bit[\"length\"],\n        #        }\n        #    return BitValue(bit_values)\n        # elif d[\"type\"] == \"Reference\":\n        #    ref = d[\"option\"][0]\n        #    return ReferenceValue(self._data[ref])\n        # elif d[\"type\"] == \"Boolean\":\n        #    return EnumValue({\"0\": \"False\", \"1\": \"True\"})\n        elif d[\"data_type\"] == \"String\":\n            pass\n        else:\n            assert False, \"unsupported value type {}\".format(d[\"data_type\"])\n\n    def decode_snapshot(self, data, key):\n        return data\n\n\nclass Device(object):\n    \"\"\"A higher-level interface to a specific device.\n        \n    Unlike `DeviceInfo`, which just stores data *about* a device,\n    `Device` objects refer to their client and can perform operations\n    regarding the device.\n    \"\"\"\n\n    def __init__(self, client: ClientAsync, device: DeviceInfo, status=None, available_features=None):\n        \"\"\"Create a wrapper for a `DeviceInfo` object associated with a\n        `Client`.\n        \"\"\"\n\n        self._client = client\n        self._device_info = device\n        self._status = status\n        self._model_data = None\n        self._model_info = None\n        self._model_lang_pack = None\n        self._product_lang_pack = None\n        self._should_poll = device.platform_type == PlatformType.THINQ1\n        self._mon = Monitor(client, device.id, device.platform_type, device.type.name)\n        self._control_set = 0\n        self._last_additional_poll: Optional[datetime] = None\n        self._available_features = available_features or {}\n\n        # for logging unknown states received\n        self._unknown_states = []\n\n    @property\n    def client(self):\n        return self._client\n\n    @property\n    def device_info(self):\n        return self._device_info\n\n    @property\n    def model_info(self):\n        return self._model_info\n\n    @property\n    def available_features(self) -> dict:\n        return self._available_features\n\n    @property\n    def status(self):\n        if not self._model_info:\n            return None\n        return self._status\n\n    def reset_status(self):\n        self._status = None\n        return self._status\n\n    async def init_device_info(self) -> bool:\n        \"\"\"Initialize the information for the device\"\"\"\n\n        if self._model_info is None:\n            if self._model_data is None:\n                self._model_data = await self._client.model_url_info(\n                    self._device_info.model_info_url,\n                    self._device_info,\n                )\n\n            model_data = self._model_data\n            if \"Monitoring\" in model_data and \"Value\" in model_data:\n                if ModelInfoV2AC.valid_value_data(model_data[\"Value\"]):\n                    # this are V2 models with format similar to V1\n                    self._model_info = ModelInfoV2AC(model_data)\n                else:\n                    # this are old V1 model\n                    self._model_info = ModelInfo(model_data)\n            elif \"MonitoringValue\" in model_data:\n                # this are new V2 devices\n                self._model_info = ModelInfoV2(model_data)\n            elif \"ControlDevice\" in model_data and \"Value\" in model_data:\n                # this are new V2 ac\n                self._model_info = ModelInfoV2AC(model_data)\n\n        if self._model_info is not None:\n            # load model language pack\n            if self._model_lang_pack is None:\n                self._model_lang_pack = await self._client.model_url_info(\n                    self._device_info.model_lang_pack_url\n                )\n\n            # load product language pack\n            if self._product_lang_pack is None:\n                self._product_lang_pack = await self._client.model_url_info(\n                    self._device_info.product_lang_pack_url\n                )\n\n            return True\n\n        return False\n\n    def _get_state_key(self, key_name):\n        \"\"\"Get the key used for state from an array based on info type\"\"\"\n        if isinstance(key_name, list):\n            return key_name[1 if self.model_info.is_info_v2 else 0]\n        return key_name\n\n    def _get_cmd_keys(self, key_name):\n        \"\"\"Get the keys used for control based on info type\"\"\"\n        ctrl = self._get_state_key(key_name[0])\n        cmd = self._get_state_key(key_name[1])\n        key = self._get_state_key(key_name[2])\n\n        return [ctrl, cmd, key]\n\n    async def _set_control(\n            self,\n            ctrl_key,\n            command=None,\n            *,\n            key=None,\n            value=None,\n            data=None,\n            ctrl_path=None,\n    ):\n        \"\"\"Set a device's control for `key` to `value`.\n        \"\"\"\n        if self._client.emulation:\n            return\n\n        if self._should_poll:\n            await self._client.session.set_device_controls(\n                self._device_info.id,\n                ctrl_key,\n                command,\n                {key: value} if key and value else value,\n                {key: data} if key and data else data,\n            )\n            self._control_set = 2\n            return\n\n        await self._client.session.set_device_v2_controls(\n            self._device_info.id,\n            ctrl_key,\n            command,\n            key,\n            value,\n            ctrl_path=ctrl_path,\n        )\n\n    def _prepare_command(self, ctrl_key, command, key, value):\n        \"\"\"Prepare command for specific device.\n        Overwrite for specific device settings.\n        \"\"\"\n        return None\n\n    async def set(self, ctrl_key, command, *, key=None, value=None, data=None, ctrl_path=None):\n        \"\"\"Set a device's control for `key` to `value`.\"\"\"\n        log_level = logging.INFO if self._client.emulation else logging.DEBUG\n        full_key = self._prepare_command(ctrl_key, command, key, value)\n        if full_key:\n            _LOGGER.log(\n                log_level,\n                \"Setting new state for device %s: %s\",\n                self._device_info.id, str(full_key),\n            )\n            await self._set_control(full_key, ctrl_path=ctrl_path)\n        else:\n            _LOGGER.log(\n                log_level,\n                \"Setting new state for device %s:  %s - %s - %s - %s\",\n                self._device_info.id, ctrl_key, command, key, value,\n            )\n            await self._set_control(\n                ctrl_key, command, key=key, value=value, data=data, ctrl_path=ctrl_path\n            )\n\n    async def _get_config(self, key):\n        \"\"\"Look up a device's configuration for a given value.\n            \n        The response is parsed as base64-encoded JSON.\n        \"\"\"\n        if not self._should_poll:\n            return\n        data = await self._client.session.get_device_config(self._device_info.id, key)\n        if self._control_set == 0:\n            self._control_set = 1\n        return json.loads(base64.b64decode(data).decode(\"utf8\"))\n\n    async def _get_control(self, key):\n        \"\"\"Look up a device's control value.\n            \"\"\"\n        if not self._should_poll:\n            return\n        data = await self._client.session.get_device_config(\n            self._device_info.id, key, \"Control\",\n        )\n        if self._control_set == 0:\n            self._control_set = 1\n\n        # The response comes in a funky key/value format: \"(key:value)\".\n        _, value = data[1:-1].split(\":\")\n        return value\n\n    async def _pre_update_v2(self):\n        \"\"\"Call additional methods before data update for v2 API.\n\n        Override in specific device to call requested methods\n        \"\"\"\n        return\n\n    async def _get_device_snapshot(self, query_device=False):\n        \"\"\"Get snapshot for ThinQ2 devices.\n\n        Perform dedicated device query if query_device is set to true,\n        otherwise use the dashboard result\n        \"\"\"\n        if self._client.emulation:\n            query_device = False\n\n        if query_device:\n            try:\n                await self._pre_update_v2()\n            except Exception as exc:\n                _LOGGER.debug(\"Error %s calling pre_update function\", exc)\n\n        return await self._mon.refresh(query_device)\n\n    async def _delete_permission(self):\n        \"\"\"Remove permission acquired in set command.\"\"\"\n        if not self._should_poll:\n            return\n        if self._control_set <= 0:\n            return\n        if self._control_set == 1:\n            await self._client.session.delete_permission(self._device_info.id)\n        self._control_set -= 1\n\n    async def _get_device_info(self):\n        \"\"\"Call additional method to get device information for V1 API.\n\n        Override in specific device to call requested methods\n        \"\"\"\n        return\n\n    async def _additional_poll(self, poll_interval: int):\n        \"\"\"Perform dedicated additional device poll with a slower rate.\"\"\"\n        if not self._should_poll:\n            return\n        if poll_interval <= 0:\n            return\n        call_time = datetime.utcnow()\n        if self._last_additional_poll is None:\n            self._last_additional_poll = (\n                call_time - timedelta(seconds=max(poll_interval - 10, 1))\n            )\n        difference = (call_time - self._last_additional_poll).total_seconds()\n        if difference >= poll_interval:\n            self._last_additional_poll = call_time\n            await self._get_device_info()\n\n    async def device_poll(\n            self,\n            snapshot_key=\"\",\n            *,\n            thinq1_additional_poll=0,\n            thinq2_query_device=False,\n    ):\n        \"\"\"Poll the device's current state.\n        Monitoring for thinq1 devices must be started first with `monitor_start`.\n\n        Return either a `Status` object or `None` if the status is not yet available.\n\n        :param snapshot_key: the key used to extract the thinq2 snapshot from payload.\n        :param thinq1_additional_poll: run an additional poll command for thinq1 devices\n            at specified rate (0 means disabled).\n        :param thinq2_query_device: if True query thinq2 devices with dedicated command\n            instead using dashboard.\n        \"\"\"\n\n        # load device info at first call if not loaded before\n        if self._model_info is None:\n            if not await self.init_device_info():\n                return None\n\n        # ThinQ V2 - Monitor data is with device info\n        if not self._should_poll:\n            snapshot = await self._get_device_snapshot(thinq2_query_device)\n            if not snapshot:\n                return None\n            return self._model_info.decode_snapshot(snapshot, snapshot_key)\n\n        # ThinQ V1 - Monitor data must be polled \"\"\"\n        data = await self._mon.refresh()\n        if not data:\n            return None\n\n        res = self._model_info.decode_monitor(data)\n        # do additional poll\n        if res and thinq1_additional_poll > 0:\n            try:\n                await self._additional_poll(thinq1_additional_poll)\n            except Exception as exc:\n                _LOGGER.debug(\"Error %s calling additional poll methods\", exc)\n\n        # remove control permission if previously set\n        await self._delete_permission()\n\n        return res\n\n    def _get_feature_title(self, feature_name, item_key):\n        \"\"\"Override this function to manage feature title per device type\"\"\"\n        return feature_name\n\n    def feature_title(self, feature_name, item_key=None, status=None, allow_none=False):\n        title = self._available_features.get(feature_name)\n        if title is None:\n            if status is None and not allow_none:\n                return None\n            title = self._get_feature_title(feature_name, item_key)\n            if not title:\n                return None\n            self._available_features[feature_name] = title\n        return title\n\n    def get_enum_text(self, enum_name):\n\n        if not enum_name:\n            return STATE_OPTIONITEM_NONE\n\n        text_value = LOCAL_LANG_PACK.get(enum_name)\n        if not text_value and self._model_lang_pack:\n            text_value = self._model_lang_pack.get(\"pack\", {}).get(enum_name)\n        if not text_value and self._product_lang_pack:\n            text_value = self._product_lang_pack.get(\"pack\", {}).get(enum_name)\n        if not text_value:\n            text_value = enum_name\n\n        return text_value\n\n    def is_unknown_status(self, status):\n\n        if status in self._unknown_states:\n            return False\n\n        self._unknown_states.append(status)\n        return True\n\n\nclass DeviceStatus(object):\n    \"\"\"A higher-level interface to a specific device status.\"\"\"\n\n    def __init__(self, device, data):\n        self._device = device\n        self._data = {} if data is None else data\n        self._device_features: dict[str, Any] = {}\n        self._features_updated = False\n\n    @staticmethod\n    def int_or_none(value):\n        if value is not None and isinstance(value, Number):\n            return str(int(value))\n        return None\n\n    @staticmethod\n    def to_int_or_none(value):\n        if value is None:\n            return None\n        try:\n            return int(value)\n        except ValueError:\n            return None\n\n    @staticmethod\n    def _str_to_num(s):\n        \"\"\"Convert a string to either an `int` or a `float`.\n\n        Troublingly, the API likes values like \"18\", without a trailing\n        \".0\", for whole numbers. So we use `int`s for integers and\n        `float`s for non-whole numbers.\n        \"\"\"\n        if not s:\n            return None\n\n        f = float(s)\n        if f == int(f):\n            return int(f)\n        return f\n\n    @property\n    def has_data(self):\n        return True if self._data else False\n\n    @property\n    def data(self):\n        return self._data\n\n    @property\n    def is_on(self) -> bool:\n        return False\n\n    @property\n    def is_info_v2(self):\n        return self._device.model_info.is_info_v2\n\n    def _get_state_key(self, key_name):\n        if isinstance(key_name, list):\n            return key_name[1 if self.is_info_v2 else 0]\n        return key_name\n\n    def _get_data_key(self, keys):\n        if not self._data:\n            return \"\"\n        if isinstance(keys, list):\n            for key in keys:\n                if key in self._data:\n                    return key\n        elif keys in self._data:\n            return keys\n\n        return \"\"\n\n    def _set_unknown(self, status, key, status_type):\n        if status:\n            return status\n\n        if self._device.is_unknown_status(key):\n            _LOGGER.warning(\n                \"ThinQ: received unknown %s status '%s' of type '%s'\",\n                self._device.device_info.type.name,\n                key,\n                status_type,\n            )\n\n        return STATE_OPTIONITEM_UNKNOWN\n\n    def update_status(self, key, value):\n        if key in self._data:\n            self._data[key] = value\n            return True\n        return False\n\n    def key_exist(self, keys):\n        if isinstance(keys, list):\n            for key in keys:\n                if self._device.model_info.value_exist(key):\n                    return True\n            return False\n        return self._device.model_info.value_exist(keys)\n\n    def lookup_enum(self, key, data_is_num=False):\n        curr_key = self._get_data_key(key)\n        if not curr_key:\n            return None\n        value = self._data[curr_key]\n        if data_is_num:\n            value = str(int(value))\n\n        return self._device.model_info.enum_name(\n            curr_key, value\n        )\n\n    def lookup_range(self, key):\n        curr_key = self._get_data_key(key)\n        if not curr_key:\n            return None\n        return self._data[curr_key]\n\n    def lookup_reference(self, key, ref_key=\"_comment\"):\n        curr_key = self._get_data_key(key)\n        if not curr_key:\n            return None\n        return self._device.model_info.reference_name(\n            curr_key, self._data[curr_key], ref_key\n        )\n\n    def lookup_bit_enum(self, key):\n        if not self._data:\n            str_val = \"\"\n        else:\n            str_val = self._data.get(key)\n            if not str_val:\n                str_val = self._device.model_info.bit_value(\n                    key, self._data\n                )\n\n        if str_val is None:\n            return None\n        ret_val = self._device.model_info.enum_name(key, str_val)\n\n        # exception because doorlock bit\n        # is not inside the model enum\n        if key == \"DoorLock\" and ret_val is None:\n            if str_val == \"1\":\n                return LABEL_BIT_ON\n            return LABEL_BIT_OFF\n\n        return ret_val\n\n    def lookup_bit(self, key):\n        enum_val = self.lookup_bit_enum(key)\n        if enum_val is None:\n            return None\n        bit_val = LOCAL_LANG_PACK.get(enum_val, STATE_OPTIONITEM_OFF)\n        if bit_val == STATE_OPTIONITEM_ON:\n            return STATE_OPTIONITEM_ON\n        return STATE_OPTIONITEM_OFF\n\n    def _update_feature(self, key, status, get_text=True, item_key=None, *, allow_none=False):\n        \"\"\"Update the status features.\"\"\"\n        if not self._device.feature_title(key, item_key, status, allow_none):\n            return None\n\n        if status is None and not allow_none:\n            status = STATE_OPTIONITEM_NONE\n\n        if status == STATE_OPTIONITEM_NONE:\n            get_text = False\n\n        if status is None or not get_text:\n            value = status\n        else:\n            value = self._device.get_enum_text(status)\n\n        self._device_features[key] = value\n        return value\n\n    def _update_features(self):\n        \"\"\"Override this function to manage device features\"\"\"\n        raise NotImplementedError()\n\n    @property\n    def device_features(self) -> dict[str, Any]:\n        if not self._features_updated:\n            self._update_features()\n            self._features_updated = True\n        return self._device_features\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/wideq/device_info.py",
    "content": "\"\"\"Definition for SmartThinQ device type and information.\"\"\"\n\nimport enum\nimport logging\nfrom typing import Any, Dict, Optional\n\nfrom .const import STATE_OPTIONITEM_UNKNOWN\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass DeviceType(enum.Enum):\n    \"\"\"The category of device.\"\"\"\n\n    REFRIGERATOR = 101\n    KIMCHI_REFRIGERATOR = 102\n    WATER_PURIFIER = 103\n    WASHER = 201\n    DRYER = 202\n    STYLER = 203\n    DISHWASHER = 204\n    TOWER_WASHER = 221\n    TOWER_DRYER = 222\n    RANGE = 301\n    MICROWAVE = 302\n    COOKTOP = 303\n    HOOD = 304\n    AC = 401\n    AIR_PURIFIER = 402\n    DEHUMIDIFIER = 403\n    FAN = 405\n    WATER_HEATER = 406\n    AIR_PURIFIER_FAN = 410\n    ROBOT_KING = 501\n    TV = 701\n    BOILER = 801\n    SPEAKER = 901\n    HOMEVU = 902\n    ARCH = 1001\n    MISSG = 3001\n    SENSOR = 3002\n    SOLAR_SENSOR = 3102\n    IOT_LIGHTING = 3003\n    IOT_MOTION_SENSOR = 3004\n    IOT_SMART_PLUG = 3005\n    IOT_DUST_SENSOR = 3006\n    EMS_AIR_STATION = 4001\n    AIR_SENSOR = 4003\n    PURICARE_AIR_DETECTOR = 4004\n    V2PHONE = 6001\n    HOMEROBOT = 9000\n    UNKNOWN = STATE_OPTIONITEM_UNKNOWN\n\n\nWM_DEVICE_TYPES = [\n    DeviceType.DRYER,\n    DeviceType.TOWER_DRYER,\n    DeviceType.TOWER_WASHER,\n    DeviceType.WASHER,\n]\n\n\nclass PlatformType(enum.Enum):\n    \"\"\"The category of device.\"\"\"\n\n    THINQ1 = \"thinq1\"\n    THINQ2 = \"thinq2\"\n    UNKNOWN = STATE_OPTIONITEM_UNKNOWN\n\n\nclass NetworkType(enum.Enum):\n    \"\"\"The type of network.\"\"\"\n\n    WIFI = \"02\"\n    NFC3 = \"03\"\n    NFC4 = \"04\"\n    UNKNOWN = STATE_OPTIONITEM_UNKNOWN\n\n\nclass DeviceInfo(object):\n    \"\"\"Details about a user's device.\n\n    This is populated from a JSON dictionary provided by the API.\n    \"\"\"\n\n    def __init__(self, data: Dict[str, Any]) -> None:\n        self._data = data\n        self._device_id = None\n        self._device_type = None\n        self._platform_type = None\n        self._network_type = None\n\n    def as_dict(self):\n        \"\"\"Return the data dictionary\"\"\"\n        if not self._data:\n            return {}\n        return self._data.copy()\n\n    def _get_data_key(self, keys):\n        for key in keys:\n            if key in self._data:\n                return key\n        return \"\"\n\n    def _get_data_value(self, key, default: Any = STATE_OPTIONITEM_UNKNOWN):\n        if isinstance(key, list):\n            vkey = self._get_data_key(key)\n        else:\n            vkey = key\n\n        return self._data.get(vkey, default)\n\n    @property\n    def model_id(self) -> str:\n        return self._get_data_value([\"modelName\", \"modelNm\"])\n\n    @property\n    def id(self) -> str:\n        if self._device_id is None:\n            self._device_id = self._get_data_value(\"deviceId\")\n        return self._device_id\n\n    @property\n    def model_info_url(self) -> str:\n        return self._get_data_value(\n            [\"modelJsonUrl\", \"modelJsonUri\"], default=None\n        )\n\n    @property\n    def model_lang_pack_url(self) -> str:\n        return self._get_data_value(\n            [\"langPackModelUrl\", \"langPackModelUri\"], default=None\n        )\n\n    @property\n    def product_lang_pack_url(self) -> str:\n        return self._get_data_value(\n            [\"langPackProductTypeUrl\", \"langPackProductTypeUri\"], default=None\n        )\n\n    @property\n    def name(self) -> str:\n        return self._get_data_value(\"alias\")\n\n    @property\n    def model_name(self) -> str:\n        return self._get_data_value([\"modelName\", \"modelNm\"])\n\n    @property\n    def macaddress(self) -> Optional[str]:\n        return self._data.get(\"macAddress\")\n\n    @property\n    def firmware(self) -> Optional[str]:\n        if fw := self._data.get(\"fwVer\"):\n            return fw\n        if \"modemInfo\" in self._data:\n            if fw := self._data[\"modemInfo\"].get(\"appVersion\"):\n                return fw\n        return None\n\n    @property\n    def devicestate(self) -> str:\n        \"\"\"The kind of device, as a `DeviceType` value.\"\"\"\n        return self._get_data_value(\"deviceState\")\n\n    @property\n    def isonline(self) -> bool:\n        \"\"\"The kind of device, as a `DeviceType` value.\"\"\"\n        return self._data.get(\"online\", False)\n\n    @property\n    def type(self) -> DeviceType:\n        \"\"\"The kind of device, as a `DeviceType` value.\"\"\"\n        if self._device_type is None:\n            device_type = self._get_data_value(\"deviceType\")\n            try:\n                ret_val = DeviceType(device_type)\n            except ValueError:\n                _LOGGER.warning(\"Device %s: unknown device type with id %s\", self.id, device_type)\n                ret_val = DeviceType.UNKNOWN\n            self._device_type = ret_val\n        return self._device_type\n\n    @property\n    def platform_type(self) -> PlatformType:\n        \"\"\"The kind of platform, as a `PlatformType` value.\"\"\"\n        if self._platform_type is None:\n            # for the moment if unavailable set THINQ1, probably not available in APIv1\n            plat_type = self._data.get(\"platformType\", PlatformType.THINQ1.value)\n            try:\n                ret_val = PlatformType(plat_type)\n            except ValueError:\n                _LOGGER.warning(\"Device %s: unknown platform type with id %s\", self.id, plat_type)\n                ret_val = PlatformType.UNKNOWN\n            self._platform_type = ret_val\n        return self._platform_type\n\n    @property\n    def network_type(self) -> NetworkType:\n        \"\"\"The kind of network, as a `NetworkType` value.\"\"\"\n        if self._network_type is None:\n            # for the moment we set WIFI if not available\n            net_type = self._data.get(\"networkType\", NetworkType.WIFI.value)\n            try:\n                ret_val = NetworkType(net_type)\n            except ValueError:\n                _LOGGER.warning(\"Device %s: unknown network type with id %s\", self.id, net_type)\n                # for the moment we set WIFI if unknown\n                ret_val = NetworkType.WIFI\n            self._network_type = ret_val\n        return self._network_type\n\n    @property\n    def snapshot(self) -> Optional[Dict[str, Any]]:\n        return self._data.get(\"snapshot\")\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/wideq/dishwasher.py",
    "content": "\"\"\"------------------for DishWasher\"\"\"\nimport logging\nfrom typing import Optional\n\nfrom .const import (\n    FEAT_AUTODOOR,\n    FEAT_CHILDLOCK,\n    FEAT_DELAYSTART,\n    FEAT_DOOROPEN,\n    FEAT_DUALZONE,\n    FEAT_ENERGYSAVER,\n    FEAT_ERROR_MSG,\n    FEAT_EXTRADRY,\n    FEAT_HALFLOAD,\n    FEAT_HIGHTEMP,\n    FEAT_NIGHTDRY,\n    FEAT_PROCESS_STATE,\n    FEAT_RINSEREFILL,\n    FEAT_RUN_STATE,\n    FEAT_SALTREFILL,\n    FEAT_TUBCLEAN_COUNT,\n    STATE_OPTIONITEM_NONE,\n)\nfrom .device import Device, DeviceStatus\n\nSTATE_DISHWASHER_POWER_OFF = \"@DW_STATE_POWER_OFF_W\"\nSTATE_DISHWASHER_END = [\n    \"@DW_STATE_END_W\",\n    \"@DW_STATE_COMPLETE_W\",\n]\nSTATE_DISHWASHER_ERROR_OFF = \"OFF\"\nSTATE_DISHWASHER_ERROR_NO_ERROR = [\n    \"ERROR_NOERROR\",\n    \"ERROR_NOERROR_TITLE\",\n    \"No Error\",\n    \"No_Error\",\n]\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass DishWasherDevice(Device):\n    \"\"\"A higher-level interface for a dishwasher.\"\"\"\n    def __init__(self, client, device):\n        super().__init__(client, device, DishWasherStatus(self, None))\n\n    def reset_status(self):\n        self._status = DishWasherStatus(self, None)\n        return self._status\n\n    async def poll(self) -> Optional[\"DishWasherStatus\"]:\n        \"\"\"Poll the device's current state.\"\"\"\n\n        res = await self.device_poll(\"dishwasher\")\n        if not res:\n            return None\n\n        self._status = DishWasherStatus(self, res)\n        return self._status\n\n\nclass DishWasherStatus(DeviceStatus):\n    \"\"\"Higher-level information about a dishwasher's current status.\n\n    :param device: The Device instance.\n    :param data: JSON data from the API.\n    \"\"\"\n    def __init__(self, device, data):\n        super().__init__(device, data)\n        self._run_state = None\n        self._process = None\n        self._error = None\n\n    def _get_run_state(self):\n        if not self._run_state:\n            state = self.lookup_enum([\"State\", \"state\"])\n            if not state:\n                self._run_state = STATE_DISHWASHER_POWER_OFF\n            else:\n                self._run_state = state\n        return self._run_state\n\n    def _get_process(self):\n        if not self._process:\n            process = self.lookup_enum([\"Process\", \"process\"])\n            if not process:\n                self._process = STATE_OPTIONITEM_NONE\n            else:\n                self._process = process\n        return self._process\n\n    def _get_error(self):\n        if not self._error:\n            error = self.lookup_reference([\"Error\", \"error\"], ref_key=\"title\")\n            if not error:\n                self._error = STATE_DISHWASHER_ERROR_OFF\n            else:\n                self._error = error\n        return self._error\n\n    @property\n    def is_on(self):\n        run_state = self._get_run_state()\n        return run_state != STATE_DISHWASHER_POWER_OFF\n\n    @property\n    def is_run_completed(self):\n        run_state = self._get_run_state()\n        process = self._get_process()\n        if run_state in STATE_DISHWASHER_END or (\n            run_state == STATE_DISHWASHER_POWER_OFF and process in STATE_DISHWASHER_END\n        ):\n            return True\n        return False\n\n    @property\n    def is_error(self):\n        if not self.is_on:\n            return False\n        error = self._get_error()\n        if error in STATE_DISHWASHER_ERROR_NO_ERROR or error == STATE_DISHWASHER_ERROR_OFF:\n            return False\n        return True\n\n    @property\n    def current_course(self):\n        if self.is_info_v2:\n            course_key = self._device.model_info.config_value(\n                \"courseType\"\n            )\n        else:\n            course_key = [\"APCourse\", \"Course\"]\n        course = self.lookup_reference(course_key, ref_key=\"name\")\n        return self._device.get_enum_text(course)\n\n    @property\n    def current_smartcourse(self):\n        if self.is_info_v2:\n            course_key = self._device.model_info.config_value(\n                \"smartCourseType\"\n            )\n        else:\n            course_key = \"SmartCourse\"\n        smart_course = self.lookup_reference(course_key, ref_key=\"name\")\n        return self._device.get_enum_text(smart_course)\n\n    @property\n    def initialtime_hour(self):\n        if self.is_info_v2:\n            return DeviceStatus.int_or_none(self._data.get(\"initialTimeHour\"))\n        return self._data.get(\"Initial_Time_H\")\n\n    @property\n    def initialtime_min(self):\n        if self.is_info_v2:\n            return DeviceStatus.int_or_none(self._data.get(\"initialTimeMinute\"))\n        return self._data.get(\"Initial_Time_M\")\n\n    @property\n    def remaintime_hour(self):\n        if self.is_info_v2:\n            return DeviceStatus.int_or_none(self._data.get(\"remainTimeHour\"))\n        return self._data.get(\"Remain_Time_H\")\n\n    @property\n    def remaintime_min(self):\n        if self.is_info_v2:\n            return DeviceStatus.int_or_none(self._data.get(\"remainTimeMinute\"))\n        return self._data.get(\"Remain_Time_M\")\n\n    @property\n    def reservetime_hour(self):\n        if self.is_info_v2:\n            return DeviceStatus.int_or_none(self._data.get(\"reserveTimeHour\"))\n        return self._data.get(\"Reserve_Time_H\")\n\n    @property\n    def reservetime_min(self):\n        if self.is_info_v2:\n            return DeviceStatus.int_or_none(self._data.get(\"reserveTimeMinute\"))\n        return self._data.get(\"Reserve_Time_M\")\n\n    @property\n    def run_state(self):\n        run_state = self._get_run_state()\n        if run_state == STATE_DISHWASHER_POWER_OFF:\n            run_state = STATE_OPTIONITEM_NONE\n        return self._update_feature(\n            FEAT_RUN_STATE, run_state\n        )\n\n    @property\n    def process_state(self):\n        process = self._get_process()\n        return self._update_feature(\n            FEAT_PROCESS_STATE, process\n        )\n\n    @property\n    def halfload_state(self):\n        if self.is_info_v2:\n            half_load = self.lookup_bit_enum(\"halfLoad\")\n        else:\n            half_load = self.lookup_bit_enum(\"HalfLoad\")\n        if not half_load:\n            half_load = STATE_OPTIONITEM_NONE\n        return self._update_feature(\n            FEAT_HALFLOAD, half_load\n        )\n\n    @property\n    def error_msg(self):\n        if not self.is_error:\n            error = STATE_OPTIONITEM_NONE\n        else:\n            error = self._get_error()\n        return self._update_feature(\n            FEAT_ERROR_MSG, error\n        )\n\n    @property\n    def tubclean_count(self):\n        if self.is_info_v2:\n            result = DeviceStatus.int_or_none(self._data.get(\"tclCount\"))\n        else:\n            result = self._data.get(\"TclCount\")\n        if result is None:\n            result = \"N/A\"\n        return self._update_feature(\n            FEAT_TUBCLEAN_COUNT, result, False\n        )\n\n    @property\n    def door_opened_state(self):\n        status = self.lookup_bit(\n            \"door\" if self.is_info_v2 else \"Door\"\n        )\n        return self._update_feature(\n            FEAT_DOOROPEN, status, False\n        )\n\n    @property\n    def childlock_state(self):\n        status = self.lookup_bit(\n            \"childLock\" if self.is_info_v2 else \"ChildLock\"\n        )\n        return self._update_feature(\n            FEAT_CHILDLOCK, status, False\n        )\n\n    @property\n    def rinserefill_state(self):\n        status = self.lookup_bit(\n            \"rinseRefill\" if self.is_info_v2 else \"RinseRefill\"\n        )\n        return self._update_feature(\n            FEAT_RINSEREFILL, status, False\n        )\n\n    @property\n    def saltrefill_state(self):\n        status = self.lookup_bit(\n            \"saltRefill\" if self.is_info_v2 else \"SaltRefill\"\n        )\n        return self._update_feature(\n            FEAT_SALTREFILL, status, False\n        )\n\n    @property\n    def dualzone_state(self):\n        status = self.lookup_bit(\n            \"dualZone\" if self.is_info_v2 else \"DualZone\"\n        )\n        return self._update_feature(\n            FEAT_DUALZONE, status, False\n        )\n\n    @property\n    def delaystart_state(self):\n        status = self.lookup_bit(\n            \"delayStart\" if self.is_info_v2 else \"DelayStart\"\n        )\n        return self._update_feature(\n            FEAT_DELAYSTART, status, False\n        )\n\n    @property\n    def energysaver_state(self):\n        status = self.lookup_bit(\n            \"energySaver\" if self.is_info_v2 else \"EnergySaver\"\n        )\n        return self._update_feature(\n            FEAT_ENERGYSAVER, status, False\n        )\n\n    @property\n    def autodoor_state(self):\n        status = self.lookup_bit(\n            \"autoDoor\" if self.is_info_v2 else \"AutoDoor\"\n        )\n        return self._update_feature(\n            FEAT_AUTODOOR, status, False\n        )\n\n    @property\n    def hightemp_state(self):\n        status = self.lookup_bit(\n            \"highTemp\" if self.is_info_v2 else \"HighTemp\"\n        )\n        return self._update_feature(\n            FEAT_HIGHTEMP, status, False\n        )\n\n    @property\n    def extradry_state(self):\n        status = self.lookup_bit(\n            \"extraDry\" if self.is_info_v2 else \"ExtraDry\"\n        )\n        return self._update_feature(\n            FEAT_EXTRADRY, status, False\n        )\n\n    @property\n    def nightdry_state(self):\n        status = self.lookup_bit(\n            \"nightDry\" if self.is_info_v2 else \"NightDry\"\n        )\n        return self._update_feature(\n            FEAT_NIGHTDRY, status, False\n        )\n\n    def _update_features(self):\n        _ = [\n            self.run_state,\n            self.process_state,\n            self.halfload_state,\n            self.error_msg,\n            self.tubclean_count,\n            self.door_opened_state,\n            self.childlock_state,\n            self.autodoor_state,\n            self.rinserefill_state,\n            self.saltrefill_state,\n            self.dualzone_state,\n            self.delaystart_state,\n            self.energysaver_state,\n            self.hightemp_state,\n            self.extradry_state,\n            self.nightdry_state,\n        ]\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/wideq/factory.py",
    "content": "\nfrom .ac import AirConditionerDevice\nfrom .airpurifier import AirPurifierDevice\nfrom .dehumidifier import DeHumidifierDevice\nfrom .dishwasher import DishWasherDevice\nfrom .fan import FanDevice\nfrom .range import RangeDevice\nfrom .refrigerator import RefrigeratorDevice\nfrom .styler import StylerDevice\nfrom .washerDryer import WMDevice\n\nfrom .const import UNIT_TEMP_CELSIUS\nfrom .device_info import (\n    WM_DEVICE_TYPES,\n    DeviceInfo,\n    DeviceType,\n    NetworkType,\n    PlatformType,\n)\n\n\ndef get_lge_device(client, device: DeviceInfo, temp_unit=UNIT_TEMP_CELSIUS):\n    \"\"\"Return a device based on the device type.\"\"\"\n\n    device_type = device.type\n    platform_type = device.platform_type\n    network_type = device.network_type\n\n    if platform_type == PlatformType.UNKNOWN:\n        return None\n    if network_type != NetworkType.WIFI:\n        return None\n\n    if device_type == DeviceType.AC:\n        return AirConditionerDevice(client, device, temp_unit)\n    if device_type == DeviceType.AIR_PURIFIER:\n        return AirPurifierDevice(client, device)\n    if device_type == DeviceType.DEHUMIDIFIER:\n        return DeHumidifierDevice(client, device)\n    if device_type == DeviceType.DISHWASHER:\n        return DishWasherDevice(client, device)\n    if device_type == DeviceType.FAN:\n        return FanDevice(client, device)\n    if device_type == DeviceType.RANGE:\n        return RangeDevice(client, device)\n    if device_type == DeviceType.REFRIGERATOR:\n        return RefrigeratorDevice(client, device)\n    if device_type == DeviceType.STYLER:\n        return StylerDevice(client, device)\n    if device_type in WM_DEVICE_TYPES:\n        return WMDevice(client, device)\n\n    return None\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/wideq/fan.py",
    "content": "\"\"\"------------------for Fan\"\"\"\nimport enum\nimport logging\nfrom typing import Optional\n\nfrom .device import Device, DeviceStatus\n\nCTRL_BASIC = [\"Control\", \"basicCtrl\"]\n\nSUPPORT_OPERATION_MODE = [\"SupportOpMode\", \"support.airState.opMode\"]\nSUPPORT_WIND_STRENGTH = [\"SupportWindStrength\", \"support.airState.windStrength\"]\n\nSTATE_OPERATION = [\"Operation\", \"airState.operation\"]\nSTATE_OPERATION_MODE = [\"OpMode\", \"airState.opMode\"]\nSTATE_WIND_STRENGTH = [\"WindStrength\", \"airState.windStrength\"]\n\nCMD_STATE_OPERATION = [CTRL_BASIC, \"Set\", STATE_OPERATION]\nCMD_STATE_OP_MODE = [CTRL_BASIC, \"Set\", STATE_OPERATION_MODE]\nCMD_STATE_WIND_STRENGTH = [CTRL_BASIC, \"Set\", STATE_WIND_STRENGTH]\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass FanOp(enum.Enum):\n    \"\"\"Whether a device is on or off.\"\"\"\n\n    OFF = \"@OFF\"\n    ON = \"@ON\"\n\n\nclass FanMode(enum.Enum):\n    \"\"\"The operation mode for a Fan device.\"\"\"\n\n    NORMAL = \"@FAN_MAIN_OPERATION_MODE_NORMAL_W\"\n\n\nclass FanSpeed(enum.Enum):\n    \"\"\"The fan speed for a Fan device.\"\"\"\n\n    LOWEST_LOW = \"@LOWST_LOW\"\n    LOWEST = \"@LOWST\"\n    LOW = \"@LOW\"\n    LOW_MID = \"@LOW_MED\"\n    MID = \"@MED\"\n    MID_HIGH = \"@MED_HIGH\"\n    HIGH = \"@HIGH\"\n    TURBO = \"@TURBO\"\n\n\nclass FanDevice(Device):\n    \"\"\"A higher-level interface for Fan.\"\"\"\n\n    def __init__(self, client, device):\n        super().__init__(client, device, FanStatus(self, None))\n        self._supported_fan_speeds = None\n\n    @property\n    def fan_speeds(self):\n        \"\"\"Return a list of available fan speeds.\"\"\"\n        if self._supported_fan_speeds is None:\n            key = self._get_state_key(SUPPORT_WIND_STRENGTH)\n            if not self.model_info.is_enum_type(key):\n                self._supported_fan_speeds = []\n                return []\n            mapping = self.model_info.value(key).options\n            mode_list = [e.value for e in FanSpeed]\n            self._supported_fan_speeds = [FanSpeed(o).name for o in mapping.values() if o in mode_list]\n        return self._supported_fan_speeds\n\n    @property\n    def fan_presets(self):\n        \"\"\"Return a list of available fan presets.\"\"\"\n        return []\n\n    async def power(self, turn_on):\n        \"\"\"Turn on or off the device (according to a boolean).\"\"\"\n\n        op = FanOp.ON if turn_on else FanOp.OFF\n        keys = self._get_cmd_keys(CMD_STATE_OPERATION)\n        op_value = self.model_info.enum_value(keys[2], op.value)\n        if self._should_poll:\n            # different power command for ThinQ1 devices\n            cmd = \"Start\" if turn_on else \"Stop\"\n            await self.set(keys[0], keys[2], key=None, value=cmd)\n            self._status.update_status(keys[2], op_value)\n            return\n        await self.set(keys[0], keys[1], key=keys[2], value=op_value)\n\n    async def set_fan_speed(self, speed):\n        \"\"\"Set the fan speed to a value from the `FanSpeed` enum.\"\"\"\n\n        if speed not in self.fan_speeds:\n            raise ValueError(f\"Invalid fan speed: {speed}\")\n        keys = self._get_cmd_keys(CMD_STATE_WIND_STRENGTH)\n        speed_value = self.model_info.enum_value(keys[2], FanSpeed[speed].value)\n        await self.set(keys[0], keys[1], key=keys[2], value=speed_value)\n\n    async def set_fan_preset(self, preset):\n        \"\"\"Set the fan preset to a value from the `FanPreset` enum.\"\"\"\n\n        raise ValueError(f\"Invalid fan preset: {preset}\")\n\n    async def set(self, ctrl_key, command, *, key=None, value=None, data=None, ctrl_path=None):\n        \"\"\"Set a device's control for `key` to `value`.\"\"\"\n        await super().set(\n            ctrl_key, command, key=key, value=value, data=data, ctrl_path=ctrl_path\n        )\n        if key is not None and self._status:\n            self._status.update_status(key, value)\n\n    def reset_status(self):\n        self._status = FanStatus(self, None)\n        return self._status\n\n    async def poll(self) -> Optional[\"FanStatus\"]:\n        \"\"\"Poll the device's current state.\"\"\"\n\n        res = await self.device_poll()\n        if not res:\n            return None\n\n        self._status = FanStatus(self, res)\n\n        return self._status\n\n\nclass FanStatus(DeviceStatus):\n    \"\"\"Higher-level information about a Fan's current status.\"\"\"\n\n    def __init__(self, device, data):\n        super().__init__(device, data)\n        self._operation = None\n\n    def _get_operation(self):\n        if self._operation is None:\n            key = self._get_state_key(STATE_OPERATION)\n            operation = self.lookup_enum(key, True)\n            if not operation:\n                return None\n            self._operation = operation\n        try:\n            return FanOp(self._operation)\n        except ValueError:\n            return None\n\n    def update_status(self, key, value):\n        if not super().update_status(key, value):\n            return False\n        if key in STATE_OPERATION:\n            self._operation = None\n        return True\n\n    @property\n    def is_on(self):\n        op = self._get_operation()\n        if not op:\n            return False\n        return op != FanOp.OFF\n\n    @property\n    def operation(self):\n        op = self._get_operation()\n        if not op:\n            return None\n        return op.name\n\n    @property\n    def fan_speed(self):\n        key = self._get_state_key(STATE_WIND_STRENGTH)\n        if (value := self.lookup_enum(key, True)) is None:\n            return None\n        try:\n            return FanSpeed(value).name\n        except ValueError:\n            return None\n\n    @property\n    def fan_preset(self):\n        return None\n\n    def _update_features(self):\n        return\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/wideq/range.py",
    "content": "\"\"\"------------------for Oven\"\"\"\nimport logging\nfrom typing import Optional\n\nfrom .const import (\n    FEAT_COOKTOP_LEFT_FRONT_STATE,\n    FEAT_COOKTOP_LEFT_REAR_STATE,\n    FEAT_COOKTOP_CENTER_STATE,\n    FEAT_COOKTOP_RIGHT_FRONT_STATE,\n    FEAT_COOKTOP_RIGHT_REAR_STATE,\n    FEAT_OVEN_LOWER_CURRENT_TEMP,\n    FEAT_OVEN_LOWER_STATE,\n    FEAT_OVEN_UPPER_CURRENT_TEMP,\n    FEAT_OVEN_UPPER_STATE,\n    STATE_OPTIONITEM_NONE,\n    STATE_OPTIONITEM_OFF,\n    UNIT_TEMP_CELSIUS,\n    UNIT_TEMP_FAHRENHEIT,\n)\nfrom .device import (\n    BIT_OFF,\n    Device,\n    DeviceStatus,\n    UnitTempModes,\n)\n\nOVEN_TEMP_UNIT = {\n    \"0\": UnitTempModes.Fahrenheit,\n    \"1\": UnitTempModes.Celsius,\n    \"FAHRENHEIT\": UnitTempModes.Fahrenheit,\n    \"CELSIUS\": UnitTempModes.Celsius,\n}\n\nITEM_STATE_OFF = \"@OV_STATE_INITIAL_W\"\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass RangeDevice(Device):\n    \"\"\"A higher-level interface for a cooking range.\"\"\"\n\n    def __init__(self, client, device):\n        super().__init__(client, device, RangeStatus(self, None))\n\n    def reset_status(self):\n        self._status = RangeStatus(self, None)\n        return self._status\n\n    async def poll(self) -> Optional[\"RangeStatus\"]:\n        \"\"\"Poll the device's current state.\"\"\"\n\n        res = await self.device_poll(\"ovenState\")\n        if not res:\n            return None\n\n        self._status = RangeStatus(self, res)\n        return self._status\n\n\nclass RangeStatus(DeviceStatus):\n    \"\"\"Higher-level information about an range's current status.\n\n    :param device: The Device instance.\n    :param data: JSON data from the API.\n    \"\"\"\n\n    def __init__(self, device, data):\n        super().__init__(device, data)\n        self._oven_temp_unit = None\n\n    def _get_oven_temp_unit(self):\n        if not self._oven_temp_unit:\n            oven_temp_unit = self.lookup_enum(\"MonTempUnit\")\n            if not oven_temp_unit:\n                self._oven_temp_unit = STATE_OPTIONITEM_NONE\n            else:\n                self._oven_temp_unit = (\n                    OVEN_TEMP_UNIT.get(oven_temp_unit, UnitTempModes.Celsius)\n                ).value\n        return self._oven_temp_unit\n\n    @property\n    def is_on(self):\n        return self.is_cooktop_on or self.is_oven_on\n\n    @property\n    def oven_temp_unit(self):\n        return self._get_oven_temp_unit()\n\n    @property\n    def is_cooktop_on(self):\n        result = [\n            self.cooktop_left_front_state,\n            self.cooktop_left_rear_state,\n            self.cooktop_center_state,\n            self.cooktop_right_front_state,\n            self.cooktop_right_rear_state,\n        ]\n        for r in result:\n            if r and r != STATE_OPTIONITEM_OFF:\n                return True\n        return False\n\n    @property\n    def cooktop_left_front_state(self):\n        \"\"\"For some cooktops (maybe depending on firmware or model), the\n        five burners do not report individual status. Instead, the \n        cooktop_left_front reports aggregated status for all burners.\n        \"\"\"\n        status = self.lookup_enum(\"LFState\")\n        if status and status == ITEM_STATE_OFF:\n            status = BIT_OFF\n        return self._update_feature(\n            FEAT_COOKTOP_LEFT_FRONT_STATE, status\n        )\n\n    @property\n    def cooktop_left_rear_state(self):\n        status = self.lookup_enum(\"LRState\")\n        if status and status == ITEM_STATE_OFF:\n            status = BIT_OFF\n        return self._update_feature(\n            FEAT_COOKTOP_LEFT_REAR_STATE, status\n        )\n\n    @property\n    def cooktop_center_state(self):\n        status = self.lookup_enum(\"CenterState\")\n        if status and status == ITEM_STATE_OFF:\n            status = BIT_OFF\n        return self._update_feature(\n            FEAT_COOKTOP_CENTER_STATE, status\n        )\n\n    @property\n    def cooktop_right_front_state(self):\n        status = self.lookup_enum(\"RFState\")\n        if status and status == ITEM_STATE_OFF:\n            status = BIT_OFF\n        return self._update_feature(\n            FEAT_COOKTOP_RIGHT_FRONT_STATE, status\n        )\n\n    @property\n    def cooktop_right_rear_state(self):\n        status = self.lookup_enum(\"RRState\")\n        if status and status == ITEM_STATE_OFF:\n            status = BIT_OFF\n        return self._update_feature(\n            FEAT_COOKTOP_RIGHT_REAR_STATE, status\n        )\n\n    @property\n    def is_oven_on(self):\n        result = [\n            self.oven_lower_state,\n            self.oven_upper_state,\n        ]\n        for r in result:\n            if r and r != STATE_OPTIONITEM_OFF:\n                return True\n        return False\n    \n    @property\n    def oven_lower_state(self):\n        status = self.lookup_enum(\"LowerOvenState\")\n        if status and status == ITEM_STATE_OFF:\n            status = BIT_OFF\n        return self._update_feature(\n            FEAT_OVEN_LOWER_STATE, status\n        )\n\n    @property\n    def oven_upper_state(self):\n        status = self.lookup_enum(\"UpperOvenState\")\n        if status and status == ITEM_STATE_OFF:\n            status = BIT_OFF\n        return self._update_feature(\n            FEAT_OVEN_UPPER_STATE, status\n        )\n\n    @property\n    def oven_lower_target_temp(self):\n        unit = self.oven_temp_unit\n        if unit == UNIT_TEMP_FAHRENHEIT:\n            key = \"LowerTargetTemp_F\"\n        elif unit == UNIT_TEMP_CELSIUS:\n            key = \"LowerTargetTemp_C\"\n        else:\n            return None\n        return self._data.get(key)\n\n    @property\n    def oven_upper_target_temp(self):\n        unit = self.oven_temp_unit\n        if unit == UNIT_TEMP_FAHRENHEIT:\n            key = \"UpperTargetTemp_F\"\n        elif unit == UNIT_TEMP_CELSIUS:\n            key = \"UpperTargetTemp_C\"\n        else:\n            return None\n        return self._data.get(key)\n\n    @property\n    def oven_lower_current_temp(self):\n        unit = self.oven_temp_unit\n        if unit == UNIT_TEMP_FAHRENHEIT:\n            key = \"LowerCookTemp_F\"\n        elif unit == UNIT_TEMP_CELSIUS:\n            key = \"LowerCookTemp_C\"\n        else:\n            return None\n        status = self._data.get(key)\n        return self._update_feature(\n            FEAT_OVEN_LOWER_CURRENT_TEMP, status, False\n        )\n\n    @property\n    def oven_upper_current_temp(self):\n        unit = self.oven_temp_unit\n        if unit == UNIT_TEMP_FAHRENHEIT:\n            key = \"UpperCookTemp_F\"\n        elif unit == UNIT_TEMP_CELSIUS:\n            key = \"UpperCookTemp_C\"\n        else:\n            return None\n        status = self._data.get(key)\n        return self._update_feature(\n            FEAT_OVEN_UPPER_CURRENT_TEMP, status, False\n        )\n\n    def _update_features(self):\n        _ = [\n            self.cooktop_left_front_state,\n            self.cooktop_left_rear_state,\n            self.cooktop_center_state,\n            self.cooktop_right_front_state,\n            self.cooktop_right_rear_state,\n            self.oven_lower_state,\n            self.oven_lower_current_temp,\n            self.oven_upper_state,\n            self.oven_upper_current_temp,\n        ]\n        return\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/wideq/refrigerator.py",
    "content": "\"\"\"------------------for Refrigerator\"\"\"\nimport base64\nimport json\nimport logging\nfrom typing import Optional\n\nfrom .const import (\n    FEAT_ECOFRIENDLY,\n    FEAT_EXPRESSMODE,\n    FEAT_EXPRESSFRIDGE,\n    FEAT_FRESHAIRFILTER,\n    FEAT_ICEPLUS,\n    FEAT_SMARTSAVINGMODE,\n    FEAT_WATERFILTERUSED_MONTH,\n    STATE_OPTIONITEM_NONE,\n    UNIT_TEMP_FAHRENHEIT,\n)\nfrom .device import (\n    LABEL_BIT_OFF,\n    LABEL_BIT_ON,\n    Device,\n    DeviceStatus,\n    UnitTempModes,\n)\n\nFEATURE_DESCR = {\n    \"@RE_TERM_EXPRESS_FREEZE_W\": \"express_freeze\",\n    \"@RE_TERM_EXPRESS_FRIDGE_W\": \"express_cool\",\n    \"@RE_TERM_ICE_PLUS_W\": \"ice_plus\",\n}\n\nREFRTEMPUNIT = {\n    \"Ｆ\": UnitTempModes.Fahrenheit,\n    \"℃\": UnitTempModes.Celsius,\n    \"˚F\": UnitTempModes.Fahrenheit,\n    \"˚C\": UnitTempModes.Celsius,\n}\n\n# REFRTEMPUNIT = {\n#     \"\\uff26\": UnitTempModes.Fahrenheit,\n#     \"\\u2103\": UnitTempModes.Celsius,\n#     \"\\u02daF\": UnitTempModes.Fahrenheit,\n#     \"\\u02daC\": UnitTempModes.Celsius,\n# }\n\nDEFAULT_FRIDGE_RANGE_C = [1, 10]\nDEFAULT_FRIDGE_RANGE_F = [30, 45]\nDEFAULT_FREEZER_RANGE_C = [-24, -14]\nDEFAULT_FREEZER_RANGE_F = [-8, 6]\n\nREFR_ROOT_DATA = \"refState\"\nCTRL_BASIC = [\"Control\", \"basicCtrl\"]\n\nSTATE_ECO_FRIENDLY = [\"EcoFriendly\", \"ecoFriendly\"]\nSTATE_ICE_PLUS = [\"IcePlus\", \"\"]\nSTATE_EXPRESS_FRIDGE = [\"\", \"expressFridge\"]\nSTATE_EXPRESS_MODE = [\"\", \"expressMode\"]\nSTATE_FRIDGE_TEMP = [\"TempRefrigerator\", \"fridgeTemp\"]\nSTATE_FREEZER_TEMP = [\"TempFreezer\", \"freezerTemp\"]\n\nCMD_STATE_ECO_FRIENDLY = [CTRL_BASIC, [\"SetControl\", \"basicCtrl\"], STATE_ECO_FRIENDLY]\nCMD_STATE_ICE_PLUS = [CTRL_BASIC, [\"SetControl\", \"basicCtrl\"], STATE_ICE_PLUS]\nCMD_STATE_EXPRESS_FRIDGE = [CTRL_BASIC, [\"SetControl\", \"basicCtrl\"], STATE_EXPRESS_FRIDGE]\nCMD_STATE_EXPRESS_MODE = [CTRL_BASIC, [\"SetControl\", \"basicCtrl\"], STATE_EXPRESS_MODE]\nCMD_STATE_FRIDGE_TEMP = [CTRL_BASIC, [\"SetControl\", \"basicCtrl\"], STATE_FRIDGE_TEMP]\nCMD_STATE_FREEZER_TEMP = [CTRL_BASIC, [\"SetControl\", \"basicCtrl\"], STATE_FREEZER_TEMP]\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass RefrigeratorDevice(Device):\n    \"\"\"A higher-level interface for a dryer.\"\"\"\n    def __init__(self, client, device):\n        super().__init__(client, device, RefrigeratorStatus(self, None))\n        self._temp_unit = None\n        self._fridge_temps = None\n        self._fridge_ranges = None\n        self._freezer_temps = None\n        self._freezer_ranges = None\n\n    def _get_feature_info(self, item_key):\n        config = self.model_info.config_value(\"visibleItems\")\n        if not config or not isinstance(config, list):\n            return None\n        if self.model_info.is_info_v2:\n            feature_key = \"feature\"\n        else:\n            feature_key = \"Feature\"\n        for item in config:\n            feature_value = item.get(feature_key, \"\")\n            if feature_value and feature_value == item_key:\n                return item\n        return None\n\n    def _get_feature_title(self, feature_name, item_key):\n        item_info = self._get_feature_info(item_key)\n        if not item_info:\n            return None\n        if self.model_info.is_info_v2:\n            title_key = \"monTitle\"\n        else:\n            title_key = \"Title\"\n        title_value = item_info.get(title_key)\n        if not title_value:\n            return feature_name\n        return FEATURE_DESCR.get(title_value, feature_name)\n\n    def _prepare_command_v1(self, cmd, key, value):\n        \"\"\"Prepare command for specific ThinQ1 device.\"\"\"\n        data_key = \"value\"\n        if cmd.get(data_key, \"\") == \"ControlData\":\n            data_key = \"data\"\n        str_data = cmd.get(data_key)\n\n        if str_data:\n            status_data = self._status.data\n            for dt_key, dt_value in status_data.items():\n                if dt_key == key:\n                    dt_value = value\n                str_data = str_data.replace(f\"{{{{{dt_key}}}}}\", dt_value)\n\n            json_data = json.loads(str_data)\n            _LOGGER.debug(\"Command data content: %s\", str(json_data))\n            if self.model_info.binary_control_data:\n                cmd[\"format\"] = \"B64\"\n                json_data = base64.b64encode(bytes(json_data)).decode(\"ascii\")\n            cmd[data_key] = json_data\n\n        return cmd\n\n    def _prepare_command_v2(self, cmd, key, value):\n        \"\"\"Prepare command for specific ThinQ2 device.\"\"\"\n        data_set = cmd.pop(\"data\", None)\n        if not data_set:\n            data_set = {REFR_ROOT_DATA: {key: value}}\n        else:\n            for cmd_key in data_set[REFR_ROOT_DATA].keys():\n                data_set[REFR_ROOT_DATA][cmd_key] = (\n                    value if cmd_key == key else \"IGNORE\"\n                )\n        cmd[\"dataSetList\"] = data_set\n\n        return cmd\n\n    def _prepare_command(self, ctrl_key, command, key, value):\n        \"\"\"Prepare command for specific device.\"\"\"\n        cmd = self.model_info.get_control_cmd(command, ctrl_key)\n        if not cmd:\n            return None\n\n        if self.model_info.is_info_v2:\n            return self._prepare_command_v2(cmd, key, value)\n        return self._prepare_command_v1(cmd, key, value)\n\n    def _set_temp_unit(self, unit=None):\n        \"\"\"Set the configured temperature unit.\"\"\"\n        if unit and unit != STATE_OPTIONITEM_NONE:\n            if not self._temp_unit or unit != self._temp_unit:\n                self._temp_unit = unit\n                self._fridge_temps = None\n                self._freezer_temps = None\n        return\n\n    def _get_temp_unit(self, unit=None):\n        \"\"\"Get the configured temperature unit.\"\"\"\n        if unit:\n            self._set_temp_unit(unit)\n        return self._temp_unit\n\n    def _get_temps_v1(self, key):\n        \"\"\"Get valid values for temps for V2 models\"\"\"\n        unit = self._get_temp_unit()\n        if unit:\n            unit_key = \"_F\" if unit == UNIT_TEMP_FAHRENHEIT else \"_C\"\n            if self.model_info.value_exist(key + unit_key):\n                key = key + unit_key\n        value_type = self.model_info.value_type(key)\n        if not value_type or value_type not in (\"enum\", \"Enum\"):\n            return {}\n        return self.model_info.value(key).options\n\n    def _get_temps_v2(self, key, unit_key=None):\n        \"\"\"Get valid values for temps for V1 models\"\"\"\n        if unit_key:\n            ref_key = self.model_info.target_key(\n                key, unit_key, \"tempUnit\"\n            )\n            key = ref_key or key\n        value_type = self.model_info.value_type(key)\n        if not value_type or value_type not in (\"enum\", \"Enum\"):\n            return {}\n        ret_val = {}\n        data = self.model_info.data_root(key)\n        temp_values = self.model_info.value(data)\n        for key, value in temp_values.items():\n            ref_val = value.get(\"label\")\n            if not ref_val or ref_val == \"IGNORE\":\n                continue\n            ret_val[key] = ref_val\n        return ret_val\n\n    @staticmethod\n    def _get_temp_ranges(temps):\n        \"\"\"Get min and max values inside a dict.\"\"\"\n        min_val = 100\n        max_val = -100\n        for value in temps.values():\n            try:\n                int_val = int(value)\n            except ValueError:\n                continue\n            if int_val < min_val:\n                min_val = int_val\n            if int_val > max_val:\n                max_val = int_val\n        if min_val > max_val:\n            return None\n        return [min_val, max_val]\n\n    @staticmethod\n    def _get_temp_key(temps, value):\n        \"\"\"Get temp_key based on his value.\"\"\"\n        if not temps:\n            return None\n\n        str_val = str(int(value))\n        for key, temp_val in temps.items():\n            if str_val == temp_val:\n                try:\n                    return int(key)\n                except ValueError:\n                    return None\n        return None\n\n    def get_fridge_temps(self, unit=None, unit_key=None):\n        \"\"\"Get valid values for fridge temp\"\"\"\n        self._set_temp_unit(unit)\n        if self._fridge_temps is None:\n            key = self._get_state_key(STATE_FRIDGE_TEMP)\n            if self.model_info.is_info_v2:\n                self._fridge_temps = self._get_temps_v2(key, unit_key)\n            else:\n                self._fridge_temps = self._get_temps_v1(key)\n            self._fridge_ranges = self._get_temp_ranges(self._fridge_temps)\n        return self._fridge_temps\n\n    def get_freezer_temps(self, unit=None, unit_key=None):\n        \"\"\"Get valid values for freezer temp\"\"\"\n        self._set_temp_unit(unit)\n        if self._freezer_temps is None:\n            key = self._get_state_key(STATE_FREEZER_TEMP)\n            if self.model_info.is_info_v2:\n                self._freezer_temps = self._get_temps_v2(key, unit_key)\n            else:\n                self._freezer_temps = self._get_temps_v1(key)\n            self._freezer_ranges = self._get_temp_ranges(self._freezer_temps)\n        return self._freezer_temps\n\n    @property\n    def target_temperature_step(self):\n        \"\"\"Return target temperature step used.\"\"\"\n        return 1\n\n    @property\n    def fridge_target_temp_range(self):\n        \"\"\"Return range value for fridge target temperature.\"\"\"\n        if self._fridge_ranges is None:\n            unit = self._get_temp_unit() or STATE_OPTIONITEM_NONE\n            if unit == UNIT_TEMP_FAHRENHEIT:\n                return DEFAULT_FRIDGE_RANGE_F\n            return DEFAULT_FRIDGE_RANGE_C\n        return self._fridge_ranges\n\n    @property\n    def freezer_target_temp_range(self):\n        \"\"\"Return range value for freezer target temperature.\"\"\"\n        if self._freezer_ranges is None:\n            unit = self._get_temp_unit() or STATE_OPTIONITEM_NONE\n            if unit == UNIT_TEMP_FAHRENHEIT:\n                return DEFAULT_FREEZER_RANGE_F\n            return DEFAULT_FREEZER_RANGE_C\n        return self._freezer_ranges\n\n    @property\n    def set_values_allowed(self):\n        if not self._status or not self._status.is_on:\n            return False\n        if self._status.eco_friendly_enabled:\n            return False\n        return True\n\n    async def _set_feature(self, turn_on: bool, state_key, cmd_key):\n        \"\"\"Switch a feature.\"\"\"\n\n        status_key = self._get_state_key(state_key)\n        if not status_key:\n            return\n        status_name = LABEL_BIT_ON if turn_on else LABEL_BIT_OFF\n        status_value = self.model_info.enum_value(status_key, status_name)\n        if not status_value:\n            return\n        keys = self._get_cmd_keys(cmd_key)\n        await self.set(keys[0], keys[1], key=keys[2], value=status_value)\n        self._status.update_status(status_key, status_value, True)\n\n    async def set_eco_friendly(self, turn_on=False):\n        \"\"\"Switch the echo friendly status.\"\"\"\n        await self._set_feature(turn_on, STATE_ECO_FRIENDLY, CMD_STATE_ECO_FRIENDLY)\n\n    async def set_ice_plus(self, turn_on=False):\n        \"\"\"Switch the ice plus status.\"\"\"\n        if self.model_info.is_info_v2:\n            return\n        if not self.set_values_allowed:\n            return\n        await self._set_feature(turn_on, STATE_ICE_PLUS, CMD_STATE_ICE_PLUS)\n\n    async def set_express_fridge(self, turn_on=False):\n        \"\"\"Switch the express fridge status.\"\"\"\n        if not self.model_info.is_info_v2:\n            return\n        if not self.set_values_allowed:\n            return\n        await self._set_feature(turn_on, STATE_EXPRESS_FRIDGE, CMD_STATE_EXPRESS_FRIDGE)\n\n    async def set_express_mode(self, turn_on=False):\n        \"\"\"Switch the express mode status.\"\"\"\n        if not self.model_info.is_info_v2:\n            return\n        if not self.set_values_allowed:\n            return\n        await self._set_feature(turn_on, STATE_EXPRESS_MODE, CMD_STATE_EXPRESS_MODE)\n\n    async def set_fridge_target_temp(self, temp):\n        \"\"\"Set the fridge target temperature.\"\"\"\n        if not self.set_values_allowed:\n            return\n\n        temp_key = self._get_temp_key(self._fridge_temps, temp)\n        if not temp_key:\n            raise ValueError(f\"Target fridge temperature not valid: {temp}\")\n        if not self.model_info.is_info_v2:\n            temp_key = str(temp_key)\n\n        status_key = self._get_state_key(STATE_FRIDGE_TEMP)\n        keys = self._get_cmd_keys(CMD_STATE_FRIDGE_TEMP)\n        await self.set(keys[0], keys[1], key=keys[2], value=temp_key)\n        self._status.update_status(status_key, temp_key, False)\n\n    async def set_freezer_target_temp(self, temp):\n        \"\"\"Set the freezer target temperature.\"\"\"\n        if not self.set_values_allowed:\n            return\n\n        temp_key = self._get_temp_key(self._freezer_temps, temp)\n        if not temp_key:\n            raise ValueError(f\"Target freezer temperature not valid: {temp}\")\n        if not self.model_info.is_info_v2:\n            temp_key = str(temp_key)\n\n        status_key = self._get_state_key(STATE_FREEZER_TEMP)\n        keys = self._get_cmd_keys(CMD_STATE_FREEZER_TEMP)\n        await self.set(keys[0], keys[1], key=keys[2], value=temp_key)\n        self._status.update_status(status_key, temp_key, False)\n\n    def reset_status(self):\n        self._status = RefrigeratorStatus(self, None)\n        return self._status\n\n    async def poll(self) -> Optional[\"RefrigeratorStatus\"]:\n        \"\"\"Poll the device's current state.\"\"\"\n\n        res = await self.device_poll(REFR_ROOT_DATA)\n        if not res:\n            return None\n\n        self._status = RefrigeratorStatus(self, res)\n        return self._status\n\n\nclass RefrigeratorStatus(DeviceStatus):\n    \"\"\"Higher-level information about a refrigerator's current status.\n\n    :param device: The Device instance.\n    :param data: JSON data from the API.\n    \"\"\"\n    def __init__(self, device, data):\n        super().__init__(device, data)\n        self._temp_unit = None\n        self._eco_friendly_state = None\n        self._sabbath_state = None\n\n    def _get_eco_friendly_state(self):\n        if self._eco_friendly_state is None:\n            state = self.lookup_enum(STATE_ECO_FRIENDLY)\n            if not state:\n                self._eco_friendly_state = \"\"\n            else:\n                self._eco_friendly_state = state\n        return self._eco_friendly_state\n\n    def _get_sabbath_state(self):\n        if self._sabbath_state is None:\n            state = self.lookup_enum([\"Sabbath\", \"sabbathMode\"])\n            if not state:\n                self._sabbath_state = \"\"\n            else:\n                self._sabbath_state = state\n        return self._sabbath_state\n\n    def _get_default_index(self, key_mode, key_index):\n        config = self._device.model_info.config_value(key_mode)\n        if not config or not isinstance(config, dict):\n            return None\n        return config.get(key_index)\n\n    def _get_default_name_index(self, key_mode, key_index):\n        index = self._get_default_index(key_mode, key_index)\n        if index is None:\n            return None\n        return self._device.model_info.enum_index(key_index, index)\n\n    def _get_default_temp_index(self, key_mode, key_index):\n        config = self._get_default_index(key_mode, key_index)\n        if not config or not isinstance(config, dict):\n            return None\n        unit = self._get_temp_unit() or STATE_OPTIONITEM_NONE\n        unit_key = \"tempUnit_F\" if unit == UNIT_TEMP_FAHRENHEIT else \"tempUnit_C\"\n        return config.get(unit_key)\n\n    def _get_temp_unit(self):\n        if not self._temp_unit:\n            temp_unit = self.lookup_enum([\"TempUnit\", \"tempUnit\"])\n            if not temp_unit:\n                return None\n            self._temp_unit = (\n                REFRTEMPUNIT.get(temp_unit, UnitTempModes.Celsius)\n            ).value\n        return self._temp_unit\n\n    def _get_temp_key(self, key):\n        temp_key = None\n        if self.eco_friendly_enabled:\n            temp_key = self._get_default_temp_index(\"ecoFriendlyDefaultIndex\", key)\n        if temp_key is None:\n            if self.is_info_v2:\n                temp_key = self.int_or_none(self._data.get(key))\n            else:\n                temp_key = self._data.get(key)\n            if temp_key is None:\n                return None\n        return str(temp_key)\n\n    def update_status(self, key, value, upd_features=False):\n        if not super().update_status(key, value):\n            return False\n        self._eco_friendly_state = None\n        if upd_features:\n            self._update_features()\n        return True\n\n    @property\n    def is_on(self):\n        return self.has_data\n\n    @property\n    def temp_fridge(self):\n        index = 0\n        unit_key = None\n        if self.is_info_v2:\n            unit_key = self._data.get(\"tempUnit\")\n            index = 1\n        temp_key = self._get_temp_key(STATE_FRIDGE_TEMP[index])\n        if temp_key is None:\n            return STATE_OPTIONITEM_NONE\n        temp_lists = self._device.get_fridge_temps(self._get_temp_unit(), unit_key)\n        return temp_lists.get(temp_key, temp_key)\n\n    @property\n    def temp_freezer(self):\n        index = 0\n        unit_key = None\n        if self.is_info_v2:\n            unit_key = self._data.get(\"tempUnit\")\n            index = 1\n        temp_key = self._get_temp_key(STATE_FREEZER_TEMP[index])\n        if temp_key is None:\n            return STATE_OPTIONITEM_NONE\n        temp_lists = self._device.get_freezer_temps(self._get_temp_unit(), unit_key)\n        return temp_lists.get(temp_key, temp_key)\n\n    @property\n    def temp_unit(self):\n        return self._get_temp_unit() or STATE_OPTIONITEM_NONE\n\n    @property\n    def door_opened_state(self):\n        if self.is_info_v2:\n            state = self._data.get(\"atLeastOneDoorOpen\")\n        else:\n            state = self.lookup_enum(\"DoorOpenState\")\n        if not state:\n            return STATE_OPTIONITEM_NONE\n        return self._device.get_enum_text(state)\n\n    @property\n    def eco_friendly_enabled(self):\n        state = self._get_eco_friendly_state()\n        if not state:\n            return False\n        return True if state == LABEL_BIT_ON else False\n\n    @property\n    def eco_friendly_state(self):\n        key = STATE_ECO_FRIENDLY[1 if self.is_info_v2 else 0]\n        status = self._get_eco_friendly_state()\n        return self._update_feature(\n            FEAT_ECOFRIENDLY, status, True, key\n        )\n\n    @property\n    def ice_plus_status(self):\n        if self.is_info_v2:\n            return None\n        key = STATE_ICE_PLUS[0]\n        status = self.lookup_enum(key)\n        return self._update_feature(\n            FEAT_ICEPLUS, status, True, key\n        )\n\n    @property\n    def express_fridge_status(self):\n        if not self.is_info_v2:\n            return None\n        key = STATE_EXPRESS_FRIDGE[1]\n        status = self.lookup_enum(key)\n        return self._update_feature(\n            FEAT_EXPRESSFRIDGE, status, True, key\n        )\n\n    @property\n    def express_mode_status(self):\n        if not self.is_info_v2:\n            return None\n        key = STATE_EXPRESS_MODE[1]\n        status = self.lookup_enum(key)\n        return self._update_feature(\n            FEAT_EXPRESSMODE, status, True, key\n        )\n\n    @property\n    def smart_saving_state(self):\n        state = self.lookup_enum([\"SmartSavingModeStatus\", \"smartSavingRun\"])\n        if not state:\n            return STATE_OPTIONITEM_NONE\n        return self._device.get_enum_text(state)\n\n    @property\n    def smart_saving_mode(self):\n        if self.is_info_v2:\n            key = \"smartSavingMode\"\n        else:\n            key = \"SmartSavingMode\"\n        status = self.lookup_enum(key)\n        return self._update_feature(\n            FEAT_SMARTSAVINGMODE, status, True, key\n        )\n\n    @property\n    def fresh_air_filter_status(self):\n        if self.is_info_v2:\n            key = \"freshAirFilter\"\n        else:\n            key = \"FreshAirFilter\"\n        status = self.lookup_enum(key)\n        return self._update_feature(\n            FEAT_FRESHAIRFILTER, status, True, key\n        )\n\n    @property\n    def water_filter_used_month(self):\n        if self.is_info_v2:\n            key = \"waterFilter\"\n        else:\n            key = \"WaterFilterUsedMonth\"\n\n        counter = None\n        if self.is_info_v2:\n            status = self._data.get(key)\n            if status:\n                counters = status.split(\"_\", 1)\n                if len(counters) > 1:\n                    counter = counters[0]\n        else:\n            counter = self._data.get(key)\n        value = \"N/A\" if not counter else counter\n        return self._update_feature(\n            FEAT_WATERFILTERUSED_MONTH, value, False, key\n        )\n\n    @property\n    def locked_state(self):\n        state = self.lookup_enum(\"LockingStatus\")\n        if not state:\n            return STATE_OPTIONITEM_NONE\n        return self._device.get_enum_text(state)\n\n    @property\n    def active_saving_status(self):\n        return self._data.get(\"ActiveSavingStatus\", \"N/A\")\n\n    def _update_features(self):\n        _ = [\n            self.eco_friendly_state,\n            self.ice_plus_status,\n            self.express_fridge_status,\n            self.express_mode_status,\n            self.smart_saving_mode,\n            self.fresh_air_filter_status,\n            self.water_filter_used_month,\n        ]\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/wideq/styler.py",
    "content": "\"\"\"------------------for Styler\"\"\"\nimport logging\nfrom typing import Optional\n\nfrom .const import (\n    FEAT_CHILDLOCK,\n    FEAT_ERROR_MSG,\n    FEAT_NIGHTDRY,\n    FEAT_PRE_STATE,\n    FEAT_REMOTESTART,\n    FEAT_RUN_STATE,\n    STATE_OPTIONITEM_NONE,\n)\nfrom .device import Device, DeviceStatus\n\nSTATE_STYLER_POWER_OFF = \"@ST_STATE_POWER_OFF_W\"\nSTATE_STYLER_END = [\n    \"@ST_STATE_END_W\",\n    \"@ST_STATE_COMPLETE_W\",\n]\nSTATE_STYLER_ERROR_OFF = \"OFF\"\nSTATE_STYLER_ERROR_NO_ERROR = [\n    \"ERROR_NOERROR\",\n    \"ERROR_NOERROR_TITLE\",\n    \"No Error\",\n    \"No_Error\",\n]\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass StylerDevice(Device):\n    \"\"\"A higher-level interface for a styler.\"\"\"\n    def __init__(self, client, device):\n        super().__init__(client, device, StylerStatus(self, None))\n\n    def reset_status(self):\n        self._status = StylerStatus(self, None)\n        return self._status\n\n    async def poll(self) -> Optional[\"StylerStatus\"]:\n        \"\"\"Poll the device's current state.\"\"\"\n\n        res = await self.device_poll(\"styler\")\n        if not res:\n            return None\n\n        self._status = StylerStatus(self, res)\n        return self._status\n\n\nclass StylerStatus(DeviceStatus):\n    \"\"\"Higher-level information about a styler's current status.\n\n    :param device: The Device instance.\n    :param data: JSON data from the API.\n    \"\"\"\n    def __init__(self, device, data):\n        super().__init__(device, data)\n        self._run_state = None\n        self._pre_state = None\n        self._error = None\n\n    def _get_run_state(self):\n        if not self._run_state:\n            state = self.lookup_enum([\"State\", \"state\"])\n            if not state:\n                self._run_state = STATE_STYLER_POWER_OFF\n            else:\n                self._run_state = state\n        return self._run_state\n\n    def _get_pre_state(self):\n        if not self._pre_state:\n            state = self.lookup_enum([\"PreState\", \"preState\"])\n            if not state:\n                self._pre_state = STATE_STYLER_POWER_OFF\n            else:\n                self._pre_state = state\n        return self._pre_state\n\n    def _get_error(self):\n        if not self._error:\n            error = self.lookup_reference([\"Error\", \"error\"], ref_key=\"title\")\n            if not error:\n                self._error = STATE_STYLER_ERROR_OFF\n            else:\n                self._error = error\n        return self._error\n\n    def update_status(self, key, value, upd_features=False):\n        if not super().update_status(key, value):\n            return False\n        self._run_state = None\n        if upd_features:\n            self._update_features()\n        return True\n\n    @property\n    def is_on(self):\n        run_state = self._get_run_state()\n        return run_state != STATE_STYLER_POWER_OFF\n\n    @property\n    def is_run_completed(self):\n        run_state = self._get_run_state()\n        pre_state = self._get_pre_state()\n        if run_state in STATE_STYLER_END or (\n            run_state == STATE_STYLER_POWER_OFF and pre_state in STATE_STYLER_END\n        ):\n            return True\n        return False\n\n    @property\n    def is_error(self):\n        if not self.is_on:\n            return False\n        error = self._get_error()\n        if error in STATE_STYLER_ERROR_NO_ERROR or error == STATE_STYLER_ERROR_OFF:\n            return False\n        return True\n\n    @property\n    def current_course(self):\n        if self.is_info_v2:\n            course_key = self._device.model_info.config_value(\n                \"courseType\"\n            )\n        else:\n            course_key = [\"APCourse\", \"Course\"]\n        course = self.lookup_reference(course_key, ref_key=\"name\")\n        return self._device.get_enum_text(course)\n\n    @property\n    def current_smartcourse(self):\n        if self.is_info_v2:\n            course_key = self._device.model_info.config_value(\n                \"smartCourseType\"\n            )\n        else:\n            course_key = \"SmartCourse\"\n        smart_course = self.lookup_reference(course_key, ref_key=\"name\")\n        return self._device.get_enum_text(smart_course)\n\n    @property\n    def initialtime_hour(self):\n        if self.is_info_v2:\n            return DeviceStatus.int_or_none(self._data.get(\"initialTimeHour\"))\n        return self._data.get(\"Initial_Time_H\")\n\n    @property\n    def initialtime_min(self):\n        if self.is_info_v2:\n            return DeviceStatus.int_or_none(self._data.get(\"initialTimeMinute\"))\n        return self._data.get(\"Initial_Time_M\")\n\n    @property\n    def remaintime_hour(self):\n        if self.is_info_v2:\n            return DeviceStatus.int_or_none(self._data.get(\"remainTimeHour\"))\n        return self._data.get(\"Remain_Time_H\")\n\n    @property\n    def remaintime_min(self):\n        if self.is_info_v2:\n            return DeviceStatus.int_or_none(self._data.get(\"remainTimeMinute\"))\n        return self._data.get(\"Remain_Time_M\")\n\n    @property\n    def reservetime_hour(self):\n        if self.is_info_v2:\n            return DeviceStatus.int_or_none(self._data.get(\"reserveTimeHour\"))\n        return self._data.get(\"Reserve_Time_H\")\n\n    @property\n    def reservetime_min(self):\n        if self.is_info_v2:\n            return DeviceStatus.int_or_none(self._data.get(\"reserveTimeMinute\"))\n        return self._data.get(\"Reserve_Time_M\")\n\n    @property\n    def run_state(self):\n        run_state = self._get_run_state()\n        if run_state == STATE_STYLER_POWER_OFF:\n            run_state = STATE_OPTIONITEM_NONE\n        return self._update_feature(\n            FEAT_RUN_STATE, run_state\n        )\n\n    @property\n    def pre_state(self):\n        pre_state = self._get_pre_state()\n        if pre_state == STATE_STYLER_POWER_OFF:\n            pre_state = STATE_OPTIONITEM_NONE\n        return self._update_feature(\n            FEAT_PRE_STATE, pre_state\n        )\n\n    @property\n    def error_msg(self):\n        if not self.is_error:\n            error = STATE_OPTIONITEM_NONE\n        else:\n            error = self._get_error()\n        return self._update_feature(\n            FEAT_ERROR_MSG, error\n        )\n\n    @property\n    def childlock_state(self):\n        status = self.lookup_bit(\n            \"childLock\" if self.is_info_v2 else \"ChildLock\"\n        )\n        return self._update_feature(\n            FEAT_CHILDLOCK, status, False\n        )\n\n    @property\n    def nightdry_state(self):\n        status = self.lookup_bit(\n            \"nightDry\" if self.is_info_v2 else \"NightDry\"\n        )\n        return self._update_feature(\n            FEAT_NIGHTDRY, status, False\n        )\n\n    @property\n    def remotestart_state(self):\n        status = self.lookup_bit(\n            \"remoteStart\" if self.is_info_v2 else \"RemoteStart\"\n        )\n        return self._update_feature(\n            FEAT_REMOTESTART, status, False\n        )\n\n    def _update_features(self):\n        _ = [\n            self.run_state,\n            self.pre_state,\n            self.error_msg,\n            self.childlock_state,\n            self.nightdry_state,\n            self.remotestart_state,\n        ]\n"
  },
  {
    "path": "home-assistant/custom_components/smartthinq_sensors/wideq/washerDryer.py",
    "content": "\"\"\"------------------for Washer and Dryer\"\"\"\nimport base64\nimport json\nimport logging\nfrom typing import Optional\n\nfrom .const import (\n    FEAT_ANTICREASE,\n    FEAT_CHILDLOCK,\n    FEAT_CREASECARE,\n    FEAT_DAMPDRYBEEP,\n    FEAT_DOORCLOSE,\n    FEAT_DOORLOCK,\n    FEAT_DRYLEVEL,\n    FEAT_ECOHYBRID,\n    FEAT_ERROR_MSG,\n    FEAT_HANDIRON,\n    FEAT_MEDICRINSE,\n    FEAT_PRE_STATE,\n    FEAT_PROCESS_STATE,\n    FEAT_PREWASH,\n    FEAT_REMOTESTART,\n    FEAT_RESERVATION,\n    FEAT_RUN_STATE,\n    FEAT_SELFCLEAN,\n    FEAT_SPINSPEED,\n    FEAT_STANDBY,\n    FEAT_STEAM,\n    FEAT_STEAMSOFTENER,\n    FEAT_TEMPCONTROL,\n    FEAT_TIMEDRY,\n    FEAT_TUBCLEAN_COUNT,\n    FEAT_TURBOWASH,\n    FEAT_WATERTEMP,\n    STATE_OPTIONITEM_NONE,\n    STATE_OPTIONITEM_OFF,\n    STATE_OPTIONITEM_ON,\n)\nfrom .core_exceptions import InvalidDeviceStatus\nfrom .device import Device, DeviceStatus\nfrom .device_info import DeviceType\n\nSTATE_WM_POWER_OFF = \"@WM_STATE_POWER_OFF_W\"\nSTATE_WM_END = [\n    \"@WM_STATE_END_W\",\n    \"@WM_STATE_COMPLETE_W\",\n]\nSTATE_WM_ERROR_OFF = \"OFF\"\nSTATE_WM_ERROR_NO_ERROR = [\n    \"ERROR_NOERROR\",\n    \"ERROR_NOERROR_TITLE\",\n    \"No Error\",\n    \"No_Error\",\n]\n\nWM_ROOT_DATA = \"washerDryer\"\n\nPOWER_STATUS_KEY = [\"State\", \"state\"]\nREMOTE_START_KEY = [\"RemoteStart\", \"remoteStart\"]\n\nCMD_POWER_OFF = [[\"Control\", \"WMControl\"], [\"Power\", \"WMOff\"], [\"Off\", None]]\nCMD_WAKE_UP = [[\"Control\", \"WMWakeup\"], [\"Operation\", \"WMWakeup\"], [\"WakeUp\", None]]\nCMD_REMOTE_START = [[\"Control\", \"WMStart\"], [\"OperationStart\", \"WMStart\"], [\"Start\", \"WMStart\"]]\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass WMDevice(Device):\n    \"\"\"A higher-level interface for washer and dryer.\"\"\"\n    def __init__(self, client, device):\n        super().__init__(client, device, WMStatus(self, None))\n        self._remote_start_status = None\n\n    def _update_status(self, key, value):\n        if self._status:\n            status_key = self._get_state_key(key)\n            status_value = self.model_info.enum_value(status_key, value)\n            if status_value:\n                self._status.update_status(status_key, status_value)\n\n    def _get_course_info(self, course_key, course_id):\n        \"\"\"Get definition for a specific course ID.\"\"\"\n        if course_key is None:\n            return None\n        if self.model_info.is_info_v2:\n            return self.model_info.data_root(course_key).get(course_id)\n        return self.model_info.value(course_key).reference.get(course_id)\n\n    def _update_course_info(self, data, course_id=None):\n        \"\"\"Save information in the data payload for a specific course\n        or default course if not already available.\n        \"\"\"\n        ret_data = data.copy()\n        if self.model_info.is_info_v2:\n            n_course_key = self.model_info.config_value(\"courseType\")\n            s_course_key = self.model_info.config_value(\"smartCourseType\")\n            def_course_id = self.model_info.config_value(\"defaultCourse\")\n        else:\n            n_course_key = \"APCourse\" if self.model_info.value_exist(\"APCourse\") else \"Course\"\n            s_course_key = \"SmartCourse\"\n            def_course_id = str(self.model_info.config_value(\"defaultCourseId\"))\n        if course_id is None:\n            # check if this course is defined in data payload\n            for course_key in [n_course_key, s_course_key]:\n                course_id = str(data.get(course_key))\n                if self._get_course_info(course_key, course_id):\n                    return ret_data\n            course_id = def_course_id\n\n        # save information for specific or default course\n        course_info = self._get_course_info(n_course_key, course_id)\n        if course_info:\n            ret_data[n_course_key] = course_id\n            for func_key in course_info[\"function\"]:\n                key = func_key.get(\"value\")\n                data = func_key.get(\"default\")\n                if key and data:\n                    ret_data[key] = data\n\n        return ret_data\n\n    def _prepare_command_v1(self, cmd, key):\n        \"\"\"Prepare command for specific ThinQ1 device.\"\"\"\n        if \"data\" in cmd:\n            str_data = cmd[\"data\"]\n            status_data = self._update_course_info(self._remote_start_status)\n            for dt_key, dt_value in status_data.items():\n                # for start command we set initial bit to 1, assuming that\n                # is the 1st bit of Option2. This probably should be reviewed\n                # to use right address from model_info\n                if key and key == \"Start\" and dt_key == \"Option2\":\n                    dt_value = str(int(dt_value) | 1)\n                str_data = str_data.replace(f\"{{{{{dt_key}}}}}\", dt_value)\n            _LOGGER.debug(\"Command data content: %s\", str_data)\n            encode = cmd.pop(\"encode\", False)\n            if encode:\n                cmd[\"format\"] = \"B64\"\n                str_list = json.loads(str_data)\n                str_data = base64.b64encode(bytes(str_list)).decode(\"ascii\")\n            cmd[\"data\"] = str_data\n        return cmd\n\n    def _prepare_command_v2(self, cmd, key):\n        \"\"\"Prepare command for specific ThinQ2 device.\"\"\"\n        data_set = cmd.pop(\"data\", None)\n        if not data_set:\n            return cmd\n\n        if key and key == \"WMStart\":\n            status_data = self._update_course_info(self._remote_start_status)\n            n_course_key = self.model_info.config_value(\"courseType\")\n            s_course_key = self.model_info.config_value(\"smartCourseType\")\n            cmd_data_set = {}\n\n            for cmd_key, cmd_value in data_set[WM_ROOT_DATA].items():\n                if cmd_key in [\"course\", \"Course\", \"ApCourse\", n_course_key]:\n                    course_data = status_data.get(n_course_key, \"NOT_SELECTED\")\n                    course_type = self.model_info.reference_name(\n                        n_course_key, course_data, ref_key=\"courseType\"\n                    )\n                    if course_type:\n                        cmd_data_set[n_course_key] = course_data\n                        cmd_data_set[\"courseType\"] = course_type\n                    else:\n                        cmd_data_set[n_course_key] = \"NOT_SELECTED\"\n                elif cmd_key in [\"smartCourse\", \"SmartCourse\", s_course_key]:\n                    course_data = status_data.get(s_course_key, \"NOT_SELECTED\")\n                    course_type = self.model_info.reference_name(\n                        s_course_key, course_data, ref_key=\"courseType\"\n                    )\n                    if course_type:\n                        cmd_data_set[s_course_key] = course_data\n                        cmd_data_set[\"courseType\"] = course_type\n                    else:\n                        cmd_data_set[s_course_key] = \"NOT_SELECTED\"\n                elif cmd_key == \"initialBit\":\n                    cmd_data_set[cmd_key] = \"INITIAL_BIT_ON\"\n                else:\n                    cmd_data_set[cmd_key] = status_data.get(cmd_key, cmd_value)\n            data_set[WM_ROOT_DATA] = cmd_data_set\n\n        cmd[\"dataSetList\"] = data_set\n\n        return cmd\n\n    def _prepare_command(self, ctrl_key, command, key, value):\n        \"\"\"Prepare command for specific device.\"\"\"\n        cmd = self.model_info.get_control_cmd(command, ctrl_key)\n        if not cmd:\n            return None\n\n        if self.model_info.is_info_v2:\n            return self._prepare_command_v2(cmd, key)\n        return self._prepare_command_v1(cmd, key)\n\n    async def power_off(self):\n        \"\"\"Power off the device.\"\"\"\n        keys = self._get_cmd_keys(CMD_POWER_OFF)\n        await self.set(keys[0], keys[1], value=keys[2])\n        self._update_status(POWER_STATUS_KEY, STATE_WM_POWER_OFF)\n\n    async def wake_up(self):\n        \"\"\"Wakeup the device.\"\"\"\n        keys = self._get_cmd_keys(CMD_WAKE_UP)\n        await self.set(keys[0], keys[1], value=keys[2])\n\n    async def remote_start(self):\n        \"\"\"Remote start the device.\"\"\"\n        if not self._remote_start_status:\n            raise InvalidDeviceStatus()\n\n        keys = self._get_cmd_keys(CMD_REMOTE_START)\n        await self.set(keys[0], keys[1], key=keys[2])\n\n    def reset_status(self):\n        tcl_count = None\n        if self._status:\n            tcl_count = self._status.tubclean_count\n        self._status = WMStatus(self, None, tcl_count)\n        return self._status\n\n    def _set_remote_start_opt(self, res):\n        \"\"\"Save the status to use for remote start.\"\"\"\n\n        status_key = self._get_state_key(REMOTE_START_KEY)\n        remote_enabled = self._status.lookup_bit(status_key) == STATE_OPTIONITEM_ON\n        if not self._remote_start_status:\n            if remote_enabled:\n                self._remote_start_status = res\n        elif not remote_enabled:\n            self._remote_start_status = None\n\n    async def poll(self) -> Optional[\"WMStatus\"]:\n        \"\"\"Poll the device's current state.\"\"\"\n\n        res = await self.device_poll(WM_ROOT_DATA)\n        if not res:\n            return None\n\n        self._status = WMStatus(self, res)\n        self._set_remote_start_opt(res)\n        return self._status\n\n\nclass WMStatus(DeviceStatus):\n    \"\"\"Higher-level information about a WM current status.\n\n    :param device: The Device instance.\n    :param data: JSON data from the API.\n    \"\"\"\n    def __init__(self, device, data, tcl_count: str = None):\n        super().__init__(device, data)\n        self._run_state = None\n        self._pre_state = None\n        self._process_state = None\n        self._error = None\n        self._tcl_count = tcl_count\n\n    def _get_run_state(self):\n        if not self._run_state:\n            state = self.lookup_enum(POWER_STATUS_KEY)\n            if not state:\n                self._run_state = STATE_WM_POWER_OFF\n            else:\n                self._run_state = state\n        return self._run_state\n\n    def _get_pre_state(self):\n        if not self._pre_state:\n            if not self.key_exist([\"PreState\", \"preState\"]):\n                return None\n            state = self.lookup_enum([\"PreState\", \"preState\"])\n            if not state:\n                self._pre_state = STATE_WM_POWER_OFF\n            else:\n                self._pre_state = state\n        return self._pre_state\n\n    def _get_process_state(self):\n        if not self._process_state:\n            if not self.key_exist([\"ProcessState\", \"processState\"]):\n                return None\n            state = self.lookup_enum([\"ProcessState\", \"processState\"])\n            if not state:\n                self._process_state = STATE_OPTIONITEM_NONE\n            else:\n                self._process_state = state\n        return self._process_state\n\n    def _get_error(self):\n        if not self._error:\n            error = self.lookup_reference([\"Error\", \"error\"], ref_key=\"title\")\n            if not error:\n                self._error = STATE_WM_ERROR_OFF\n            else:\n                self._error = error\n        return self._error\n\n    def update_status(self, key, value, upd_features=False):\n        if not super().update_status(key, value):\n            return False\n        self._run_state = None\n        if upd_features:\n            self._update_features()\n        return True\n\n    @property\n    def is_on(self):\n        run_state = self._get_run_state()\n        return run_state != STATE_WM_POWER_OFF\n\n    @property\n    def is_dryer(self):\n        if self._device.device_info.type in [DeviceType.DRYER, DeviceType.TOWER_DRYER]:\n            return True\n        return False\n\n    @property\n    def is_run_completed(self):\n        run_state = self._get_run_state()\n        pre_state = self._get_pre_state()\n        if pre_state is None:\n            pre_state = self._get_process_state() or STATE_OPTIONITEM_NONE\n        if run_state in STATE_WM_END or (\n            run_state == STATE_WM_POWER_OFF and pre_state in STATE_WM_END\n        ):\n            return True\n        return False\n\n    @property\n    def is_error(self):\n        if not self.is_on:\n            return False\n        error = self._get_error()\n        if error in STATE_WM_ERROR_NO_ERROR or error == STATE_WM_ERROR_OFF:\n            return False\n        return True\n\n    @property\n    def current_course(self):\n        if self.is_info_v2:\n            course_key = self._device.model_info.config_value(\"courseType\")\n        else:\n            course_key = [\"APCourse\", \"Course\"]\n        course = self.lookup_reference(course_key, ref_key=\"name\")\n        return self._device.get_enum_text(course)\n\n    @property\n    def current_smartcourse(self):\n        if self.is_info_v2:\n            course_key = self._device.model_info.config_value(\"smartCourseType\")\n        else:\n            course_key = \"SmartCourse\"\n        smart_course = self.lookup_reference(course_key, ref_key=\"name\")\n        return self._device.get_enum_text(smart_course)\n\n    @property\n    def initialtime_hour(self):\n        if self.is_info_v2:\n            return DeviceStatus.int_or_none(self._data.get(\"initialTimeHour\"))\n        return self._data.get(\"Initial_Time_H\")\n\n    @property\n    def initialtime_min(self):\n        if self.is_info_v2:\n            return DeviceStatus.int_or_none(self._data.get(\"initialTimeMinute\"))\n        return self._data.get(\"Initial_Time_M\")\n\n    @property\n    def remaintime_hour(self):\n        if self.is_info_v2:\n            return DeviceStatus.int_or_none(self._data.get(\"remainTimeHour\"))\n        return self._data.get(\"Remain_Time_H\")\n\n    @property\n    def remaintime_min(self):\n        if self.is_info_v2:\n            return DeviceStatus.int_or_none(self._data.get(\"remainTimeMinute\"))\n        return self._data.get(\"Remain_Time_M\")\n\n    @property\n    def reservetime_hour(self):\n        if self.is_info_v2:\n            return DeviceStatus.int_or_none(self._data.get(\"reserveTimeHour\"))\n        return self._data.get(\"Reserve_Time_H\")\n\n    @property\n    def reservetime_min(self):\n        if self.is_info_v2:\n            return DeviceStatus.int_or_none(self._data.get(\"reserveTimeMinute\"))\n        return self._data.get(\"Reserve_Time_M\")\n\n    @property\n    def run_state(self):\n        run_state = self._get_run_state()\n        if run_state == STATE_WM_POWER_OFF:\n            run_state = STATE_OPTIONITEM_NONE\n        return self._update_feature(\n            FEAT_RUN_STATE, run_state\n        )\n\n    @property\n    def pre_state(self):\n        pre_state = self._get_pre_state()\n        if pre_state is None:\n            return None\n        if pre_state == STATE_WM_POWER_OFF:\n            pre_state = STATE_OPTIONITEM_NONE\n        return self._update_feature(\n            FEAT_PRE_STATE, pre_state\n        )\n\n    @property\n    def process_state(self):\n        process = self._get_process_state()\n        if process is None:\n            return None\n        return self._update_feature(\n            FEAT_PROCESS_STATE, process\n        )\n\n    @property\n    def error_msg(self):\n        if not self.is_error:\n            error = STATE_OPTIONITEM_NONE\n        else:\n            error = self._get_error()\n        return self._update_feature(\n            FEAT_ERROR_MSG, error\n        )\n\n    @property\n    def spin_option_state(self):\n        if not self.key_exist([\"SpinSpeed\", \"spin\"]):\n            return None\n        spin_speed = self.lookup_enum([\"SpinSpeed\", \"spin\"])\n        if not spin_speed:\n            spin_speed = STATE_OPTIONITEM_NONE\n        return self._update_feature(\n            FEAT_SPINSPEED, spin_speed\n        )\n\n    @property\n    def water_temp_option_state(self):\n        if not self.key_exist([\"WTemp\", \"WaterTemp\", \"temp\"]):\n            return None\n        if self.key_exist(\"temp\") and self.is_dryer:\n            return None\n        water_temp = self.lookup_enum([\"WTemp\", \"WaterTemp\", \"temp\"])\n        if not water_temp:\n            water_temp = STATE_OPTIONITEM_NONE\n        return self._update_feature(\n            FEAT_WATERTEMP, water_temp\n        )\n\n    @property\n    def dry_level_option_state(self):\n        if not self.key_exist([\"DryLevel\", \"dryLevel\"]):\n            return None\n        dry_level = self.lookup_enum([\"DryLevel\", \"dryLevel\"])\n        if not dry_level:\n            dry_level = STATE_OPTIONITEM_NONE\n        return self._update_feature(\n            FEAT_DRYLEVEL, dry_level\n        )\n\n    @property\n    def temp_control_option_state(self):\n        if not self.key_exist([\"TempControl\", \"tempControl\", \"temp\"]):\n            return None\n        if self.key_exist(\"temp\") and not self.is_dryer:\n            return None\n        temp_control = self.lookup_enum([\"TempControl\", \"tempControl\", \"temp\"])\n        if not temp_control:\n            temp_control = STATE_OPTIONITEM_NONE\n        return self._update_feature(\n            FEAT_TEMPCONTROL, temp_control\n        )\n\n    @property\n    def time_dry_option_state(self):\n        \"\"\"Get the time dry setting.\"\"\"\n        if not self.key_exist(\"TimeDry\"):\n            return None\n        time_dry = self.lookup_enum(\"TimeDry\")\n        if not time_dry:\n            time_dry = STATE_OPTIONITEM_NONE\n        return self._update_feature(\n            FEAT_TIMEDRY, time_dry, False\n        )\n\n    @property\n    def eco_hybrid_option_state(self):\n        if not self.key_exist([\"EcoHybrid\", \"ecoHybrid\"]):\n            return None\n        eco_hybrid = self.lookup_enum([\"EcoHybrid\", \"ecoHybrid\"])\n        if not eco_hybrid:\n            eco_hybrid = STATE_OPTIONITEM_NONE\n        return self._update_feature(\n            FEAT_ECOHYBRID, eco_hybrid\n        )\n\n    @property\n    def tubclean_count(self):\n        if not self.key_exist(\"TCLCount\"):\n            return None\n        if self.is_info_v2:\n            result = self.int_or_none(self._data.get(\"TCLCount\"))\n        else:\n            result = self._data.get(\"TCLCount\")\n        if result is None:\n            result = self._tcl_count or \"N/A\"\n        return self._update_feature(\n            FEAT_TUBCLEAN_COUNT, result, False\n        )\n\n    @property\n    def standby_state(self):\n        if not self.key_exist([\"Standby\", \"standby\"]):\n            return None\n        status = self.lookup_enum([\"Standby\", \"standby\"])\n        if not status:\n            status = STATE_OPTIONITEM_OFF\n        return self._update_feature(\n            FEAT_STANDBY, status\n        )\n\n    @property\n    def remotestart_state(self):\n        status = self.lookup_bit(\n            REMOTE_START_KEY[1] if self.is_info_v2 else REMOTE_START_KEY[0]\n        )\n        return self._update_feature(\n            FEAT_REMOTESTART, status, False\n        )\n\n    @property\n    def doorlock_state(self):\n        status = self.lookup_bit(\n            \"doorLock\" if self.is_info_v2 else \"DoorLock\"\n        )\n        return self._update_feature(\n            FEAT_DOORLOCK, status, False\n        )\n\n    @property\n    def doorclose_state(self):\n        status = self.lookup_bit(\n            \"doorClose\" if self.is_info_v2 else \"DoorClose\"\n        )\n        return self._update_feature(\n            FEAT_DOORCLOSE, status, False\n        )\n\n    @property\n    def childlock_state(self):\n        status = self.lookup_bit(\n            \"childLock\" if self.is_info_v2 else \"ChildLock\"\n        )\n        return self._update_feature(\n            FEAT_CHILDLOCK, status, False\n        )\n\n    @property\n    def creasecare_state(self):\n        status = self.lookup_bit(\n            \"creaseCare\" if self.is_info_v2 else \"CreaseCare\"\n        )\n        return self._update_feature(\n            FEAT_CREASECARE, status, False\n        )\n\n    @property\n    def steam_state(self):\n        status = self.lookup_bit(\n            \"steam\" if self.is_info_v2 else \"Steam\"\n        )\n        return self._update_feature(\n            FEAT_STEAM, status, False\n        )\n\n    @property\n    def steam_softener_state(self):\n        status = self.lookup_bit(\n            \"steamSoftener\" if self.is_info_v2 else \"SteamSoftener\"\n        )\n        return self._update_feature(\n            FEAT_STEAMSOFTENER, status, False\n        )\n\n    @property\n    def prewash_state(self):\n        status = self.lookup_bit(\n            \"preWash\" if self.is_info_v2 else \"PreWash\"\n        )\n        return self._update_feature(\n            FEAT_PREWASH, status, False\n        )\n\n    @property\n    def turbowash_state(self):\n        status = self.lookup_bit(\n            \"turboWash\" if self.is_info_v2 else \"TurboWash\"\n        )\n        return self._update_feature(\n            FEAT_TURBOWASH, status, False\n        )\n\n    @property\n    def medicrinse_state(self):\n        status = self.lookup_bit(\n            \"medicRinse\" if self.is_info_v2 else \"MedicRinse\"\n        )\n        return self._update_feature(\n            FEAT_MEDICRINSE, status, False\n        )\n\n    @property\n    def dampdrybeep_state(self):\n        status = self.lookup_bit(\n            \"dampDryBeep\" if self.is_info_v2 else \"DampDryBeep\"\n        )\n        return self._update_feature(\n            FEAT_DAMPDRYBEEP, status, False\n        )\n\n    @property\n    def reservation_state(self):\n        status = self.lookup_bit(\n            \"reservation\" if self.is_info_v2 else \"Reservation\"\n        )\n        return self._update_feature(\n            FEAT_RESERVATION, status, False\n        )\n\n    @property\n    def handiron_state(self):\n        status = self.lookup_bit(\n            \"handIron\" if self.is_info_v2 else \"HandIron\"\n        )\n        return self._update_feature(\n            FEAT_HANDIRON, status, False\n        )\n\n    @property\n    def selfclean_state(self):\n        status = self.lookup_bit(\n            \"selfClean\" if self.is_info_v2 else \"SelfClean\"\n        )\n        return self._update_feature(\n            FEAT_SELFCLEAN, status, False\n        )\n\n    @property\n    def anticrease_state(self):\n        status = self.lookup_bit(\n            \"antiCrease\" if self.is_info_v2 else \"AntiCrease\"\n        )\n        return self._update_feature(\n            FEAT_ANTICREASE, status, False\n        )\n\n    def _update_features(self):\n        _ = [\n            self.run_state,\n            self.pre_state,\n            self.process_state,\n            self.error_msg,\n            self.spin_option_state,\n            self.water_temp_option_state,\n            self.dry_level_option_state,\n            self.temp_control_option_state,\n            # self.time_dry_option_state,\n            self.eco_hybrid_option_state,\n            self.tubclean_count,\n            self.standby_state,\n            self.remotestart_state,\n            self.doorlock_state,\n            self.doorclose_state,\n            self.childlock_state,\n            self.creasecare_state,\n            self.steam_state,\n            self.steam_softener_state,\n            self.prewash_state,\n            self.turbowash_state,\n            self.medicrinse_state,\n            self.dampdrybeep_state,\n            self.reservation_state,\n            self.handiron_state,\n            self.selfclean_state,\n            self.anticrease_state,\n        ]\n"
  },
  {
    "path": "home-assistant/custom_components/spacex/__init__.py",
    "content": "\"\"\"The SpaceX integration.\"\"\"\nimport asyncio\nfrom datetime import timedelta\nimport logging\n\nfrom spacexpypi import SpaceX\nimport voluptuous as vol\n\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.core import HomeAssistant\nfrom homeassistant.exceptions import ConfigEntryNotReady\nfrom homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed\n\nfrom .const import COORDINATOR, DOMAIN, SPACEX_API\n\nCONFIG_SCHEMA = vol.Schema({DOMAIN: vol.Schema({})}, extra=vol.ALLOW_EXTRA)\n_LOGGER = logging.getLogger(__name__)\n\nPLATFORMS = [\"binary_sensor\", \"sensor\"]\n\n\nasync def async_setup(hass: HomeAssistant, config: dict):\n    \"\"\"Set up the SpaceX component.\"\"\"\n    hass.data.setdefault(DOMAIN, {})\n\n    return True\n\n\nasync def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry):\n    \"\"\"Set up SpaceX from a config entry.\"\"\"\n    polling_interval = 25\n    api = SpaceX()\n\n    try:\n        await api.get_next_launch()\n    except ConnectionError as error:\n        _LOGGER.debug(\"SpaceX API Error: %s\", error)\n        return False\n        raise ConfigEntryNotReady from error\n    except ValueError as error:\n        _LOGGER.debug(\"SpaceX API Error: %s\", error)\n        return False\n        raise ConfigEntryNotReady from error\n\n    coordinator = SpaceXUpdateCoordinator(\n        hass,\n        api=api,\n        name=\"SpaceX\",\n        polling_interval=polling_interval,\n    )\n\n    await coordinator.async_refresh()\n\n    if not coordinator.last_update_success:\n        raise ConfigEntryNotReady\n\n    hass.data[DOMAIN][entry.entry_id] = {COORDINATOR: coordinator, SPACEX_API: api}\n\n    for component in PLATFORMS:\n        _LOGGER.info(\"Setting up platform: %s\", component)\n        hass.async_create_task(\n            hass.config_entries.async_forward_entry_setup(entry, component)\n        )\n\n    return True\n\n\nasync def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry):\n    \"\"\"Unload a config entry.\"\"\"\n    unload_ok = all(\n        await asyncio.gather(\n            *[\n                hass.config_entries.async_forward_entry_unload(entry, component)\n                for component in PLATFORMS\n            ]\n        )\n    )\n    if unload_ok:\n        hass.data[DOMAIN].pop(entry.entry_id)\n\n    return unload_ok\n\nclass SpaceXUpdateCoordinator(DataUpdateCoordinator):\n    \"\"\"Class to manage fetching update data from the SpaceX endpoint.\"\"\"\n\n    def __init__(\n        self,\n        hass: HomeAssistant,\n        api: str,\n        name: str,\n        polling_interval: int,\n    ):\n        \"\"\"Initialize the global SpaceX data updater.\"\"\"\n        self.api = api\n\n        super().__init__(\n            hass = hass,\n            logger = _LOGGER,\n            name = name,\n            update_interval = timedelta(seconds=polling_interval),\n        )\n\n    async def _async_update_data(self):\n        \"\"\"Fetch data from SpaceX.\"\"\"\n        try:\n            _LOGGER.debug(\"Updating the coordinator data.\")\n            spacex_starman = await self.api.get_roadster_status()\n            spacex_next_launch = await self.api.get_next_launch()\n            spacex_latest_launch = await self.api.get_latest_launch()\n\n            return {\n                \"starman\": spacex_starman,\n                \"next_launch\": spacex_next_launch,\n                \"latest_launch\": spacex_latest_launch,\n            }\n        except ConnectionError as error:\n            _LOGGER.info(\"SpaceX API: %s\", error)\n            raise UpdateFailed from error\n        except ValueError as error:\n            _LOGGER.info(\"SpaceX API: %s\", error)\n            raise UpdateFailed from error\n\n        \n\n"
  },
  {
    "path": "home-assistant/custom_components/spacex/binary_sensor.py",
    "content": "\"\"\"Definition and setup of the SpaceX Binary Sensors for Home Assistant.\"\"\"\n\nimport logging\nimport time\n\nfrom homeassistant.helpers.update_coordinator import (\n    CoordinatorEntity,\n    DataUpdateCoordinator,\n    UpdateFailed,\n)\nfrom homeassistant.components.binary_sensor import BinarySensorEntity\nfrom homeassistant.const import ATTR_NAME\nfrom homeassistant.components.sensor import ENTITY_ID_FORMAT\nfrom . import SpaceXUpdateCoordinator\nfrom .const import ATTR_IDENTIFIERS, ATTR_MANUFACTURER, ATTR_MODEL, DOMAIN, COORDINATOR\n\n_LOGGER = logging.getLogger(__name__)\n\n\nasync def async_setup_entry(hass, entry, async_add_entities):\n    \"\"\"Set up the binary sensor platforms.\"\"\"\n\n    coordinator = hass.data[DOMAIN][entry.entry_id][COORDINATOR]\n    sensors = []\n\n    sensors.append(\n        SpaceXBinarySensor(\n            coordinator,\n            \"Next Launch Confirmed\",\n            \"spacex_next_launch_confirmed\",\n            \"mdi:check-circle\",\n            \"spacexlaunch\",\n        )\n    )\n\n    sensors.append(\n        SpaceXBinarySensor(\n            coordinator,\n            \"Launch within 24 Hours\",\n            \"spacex_launch_24_hour_warning\",\n            \"mdi:rocket\",\n            \"spacexlaunch\",\n        )\n    )\n\n    sensors.append(\n        SpaceXBinarySensor(\n            coordinator,\n            \"Launch within 20 Minutes\",\n            \"spacex_launch_20_minute_warning\",\n            \"mdi:rocket-launch\",\n            \"spacexlaunch\",\n        )\n    )\n\n    async_add_entities(sensors)\n\n\nclass SpaceXBinarySensor(BinarySensorEntity):\n    \"\"\"Defines a SpaceX Binary sensor.\"\"\"\n\n    def __init__(\n        self, \n        coordinator: SpaceXUpdateCoordinator, \n        name: str, \n        entity_id: str, \n        icon: str,\n        device_identifier: str,\n        ):\n        \"\"\"Initialize Entities.\"\"\"\n\n        self._name = name\n        self._unique_id = f\"spacex_{entity_id}\"\n        self._state = None\n        self._icon = icon\n        self._kind = entity_id\n        self._device_identifier = device_identifier\n        self.coordinator = coordinator\n        self.attrs = {}\n\n    @property\n    def should_poll(self) -> bool:\n        \"\"\"No need to poll. Coordinator notifies entity of updates.\"\"\"\n        return False\n\n    @property\n    def available(self) -> bool:\n        \"\"\"Return if entity is available.\"\"\"\n        return self.coordinator.last_update_success\n\n    @property\n    def unique_id(self):\n        \"\"\"Return the unique Home Assistant friendly identifier for this entity.\"\"\"\n        return self._unique_id\n\n    @property\n    def name(self):\n        \"\"\"Return the friendly name of this entity.\"\"\"\n        return self._name\n\n    @property\n    def icon(self):\n        \"\"\"Return the icon for this entity.\"\"\"\n        launch_data = self.coordinator.data[\"next_launch\"]\n\n        if self._kind == \"spacex_next_launch_confirmed\":\n            if launch_data.get(\"tbd\") is True:\n                return \"mdi:do-not-disturb\"\n            else:\n                return \"mdi:check-circle\"\n\n        else:\n            return self._icon\n\n    @property\n    def extra_state_attributes(self):\n        \"\"\"Return the attributes.\"\"\"\n        return self.attrs\n\n    @property\n    def device_info(self):\n        \"\"\"Define the device based on device_identifier.\"\"\"\n\n        device_name = \"SpaceX Launches\"\n        device_model = \"Launch\"\n\n        if self._device_identifier != \"spacexlaunch\":\n            device_name = \"SpaceX Starman\"\n            device_model = \"Starman\"\n\n        return {\n            ATTR_IDENTIFIERS: {(DOMAIN, self._device_identifier)},\n            ATTR_NAME: device_name,\n            ATTR_MANUFACTURER: \"SpaceX\",\n            ATTR_MODEL: device_model,\n        }\n\n    @property\n    def is_on(self) -> bool:\n        \"\"\"Return the state.\"\"\"\n        launch_data = self.coordinator.data[\"next_launch\"]\n\n        if self._kind == \"spacex_next_launch_confirmed\":\n            if launch_data[\"tbd\"] is True:\n                return False\n            else:\n                return True\n\n        elif self._kind == \"spacex_launch_24_hour_warning\":\n            if launch_data[\"date_unix\"] < (\n                time.time() + (24 * 60 * 60)\n            ) and launch_data[\"date_unix\"] > (time.time()):\n                return True\n            else:\n                return False\n\n        elif self._kind == \"spacex_launch_20_minute_warning\":\n            if launch_data[\"date_unix\"] < (\n                time.time() + (20 * 60)\n            ) and launch_data[\"date_unix\"] > (time.time()):\n                return True\n            else:\n                return False\n\n    async def async_update(self):\n        \"\"\"Update SpaceX Binary Sensor Entity.\"\"\"\n        await self.coordinator.async_request_refresh()\n        \n    async def async_added_to_hass(self):\n        \"\"\"Subscribe to updates.\"\"\"\n        self.async_on_remove(\n            self.coordinator.async_add_listener(self.async_write_ha_state)\n        )\n"
  },
  {
    "path": "home-assistant/custom_components/spacex/config_flow.py",
    "content": "\"\"\"Config flow for SpaceX Launches and Starman.\"\"\"\nfrom spacexpypi import SpaceX\n\nfrom homeassistant.helpers import config_entry_flow\n\nfrom .const import DOMAIN\n\n\nasync def _async_has_devices(hass) -> bool:\n    \"\"\"Return if there are devices that can be discovered.\"\"\"\n    api_client = SpaceX()\n\n    devices = await api_client.get_next_launch()\n    return len(devices) > 0\n\n\nconfig_entry_flow.register_discovery_flow(\n    DOMAIN,\n    \"SpaceX Launches and Starman\",\n    _async_has_devices,\n)\n"
  },
  {
    "path": "home-assistant/custom_components/spacex/const.py",
    "content": "\"\"\"Constants for the SpaceX integration.\"\"\"\n\nDOMAIN = \"spacex\"\nCOORDINATOR = \"coordinator\"\nSPACEX_API = \"spacex_api\"\nATTR_IDENTIFIERS = \"identifiers\"\nATTR_MANUFACTURER = \"manufacturer\"\nATTR_MODEL = \"model\"\n"
  },
  {
    "path": "home-assistant/custom_components/spacex/manifest.json",
    "content": "{\n  \"domain\": \"spacex\",\n  \"name\": \"SpaceX Launches and Starman\",\n  \"config_flow\": true,\n  \"documentation\": \"https://github.com/djtimca/haspacex\",\n  \"issue_tracker\": \"https://github.com/djtimca/HASpaceX/issues\",\n  \"requirements\": [\n    \"spacexpypi==0.0.12\"\n  ],\n  \"ssdp\": [],\n  \"zeroconf\": [],\n  \"homekit\": {},\n  \"dependencies\": [],\n  \"codeowners\": [\n    \"@djtimca\"\n  ],\n  \"version\": \"029\",\n  \"iot_class\": \"cloud_polling\"\n}\n"
  },
  {
    "path": "home-assistant/custom_components/spacex/sensor.py",
    "content": "\"\"\"Definition and setup of the SpaceX Binary Sensors for Home Assistant.\"\"\"\n\nimport logging\nimport time\nimport datetime\n\nfrom homeassistant.util.dt import as_local, utc_from_timestamp\nfrom homeassistant.components.sensor import ENTITY_ID_FORMAT, DEVICE_CLASS_TIMESTAMP\nfrom homeassistant.const import LENGTH_KILOMETERS, SPEED_KILOMETERS_PER_HOUR, ATTR_NAME\nfrom homeassistant.helpers.entity import Entity\nfrom homeassistant.helpers.update_coordinator import (\n    CoordinatorEntity,\n    DataUpdateCoordinator,\n    UpdateFailed,\n)\nfrom . import SpaceXUpdateCoordinator\n\nfrom .const import ATTR_IDENTIFIERS, ATTR_MANUFACTURER, ATTR_MODEL, DOMAIN, COORDINATOR\n\n_LOGGER = logging.getLogger(__name__)\n\n\nasync def async_setup_entry(hass, entry, async_add_entities):\n    \"\"\"Set up the sensor platforms.\"\"\"\n\n    coordinator = hass.data[DOMAIN][entry.entry_id][COORDINATOR]\n    sensors = []\n\n    sensors.append(\n        SpaceXSensor(\n            coordinator,\n            \"Next Launch Mission\",\n            \"spacex_next_launch_mission\",\n            \"mdi:information-outline\",\n            \"spacexlaunch\",\n        )\n    )\n\n    sensors.append(\n        SpaceXSensor(\n            coordinator,\n            \"Next Launch Day\",\n            \"spacex_next_launch_day\",\n            \"mdi:calendar\",\n            \"spacexlaunch\",\n        )\n    )\n\n    sensors.append(\n        SpaceXSensor(\n            coordinator,\n            \"Next Launch Time\",\n            \"spacex_next_launch_time\",\n            \"mdi:clock-outline\",\n            \"spacexlaunch\",\n        )\n    )\n\n    sensors.append(\n        SpaceXSensor(\n            coordinator,\n            \"Next Launch Countdown\",\n            \"spacex_next_launch_countdown\",\n            \"mdi:clock-outline\",\n            \"spacexlaunch\",\n        )\n    )\n\n    sensors.append(\n        SpaceXSensor(\n            coordinator,\n            \"Next Launch Site\",\n            \"spacex_next_launch_site\",\n            \"mdi:map-marker\",\n            \"spacexlaunch\",\n        )\n    )\n\n    sensors.append(\n        SpaceXSensor(\n            coordinator,\n            \"Next Launch Rocket\",\n            \"spacex_next_launch_rocket\",\n            \"mdi:rocket\",\n            \"spacexlaunch\",\n        )\n    )\n\n    sensors.append(\n        SpaceXSensor(\n            coordinator,\n            \"Next Launch Payload\",\n            \"spacex_next_launch_payload\",\n            \"mdi:package\",\n            \"spacexlaunch\",\n        )\n    )\n\n    sensors.append(\n        SpaceXSensor(\n            coordinator,\n            \"Next Confirmed Launch Day\",\n            \"spacex_next_confirmed_launch_day\",\n            \"mdi:calendar\",\n            \"spacexlaunch\"\n        )\n    )\n\n    sensors.append(\n        SpaceXSensor(\n            coordinator,\n            \"Next Confirmed Launch Time\",\n            \"spacex_next_confirmed_launch_time\",\n            \"mdi:clock-outline\",\n            \"spacexlaunch\"\n        )\n    )\n\n    sensors.append(\n        SpaceXSensor(\n            coordinator,\n            \"Latest Launch Mission\",\n            \"spacex_latest_launch_mission\",\n            \"mdi:information-outline\",\n            \"spacexlaunch\",\n        )\n    )\n\n    sensors.append(\n        SpaceXSensor(\n            coordinator,\n            \"Latest Launch Day\",\n            \"spacex_latest_launch_day\",\n            \"mdi:calendar\",\n            \"spacexlaunch\",\n        )\n    )\n\n    sensors.append(\n        SpaceXSensor(\n            coordinator,\n            \"Latest Launch Time\",\n            \"spacex_latest_launch_time\",\n            \"mdi:clock-outline\",\n            \"spacexlaunch\",\n        )\n    )\n\n    sensors.append(\n        SpaceXSensor(\n            coordinator,\n            \"Latest Launch Site\",\n            \"spacex_latest_launch_site\",\n            \"mdi:map-marker\",\n            \"spacexlaunch\",\n        )\n    )\n\n    sensors.append(\n        SpaceXSensor(\n            coordinator,\n            \"Latest Launch Rocket\",\n            \"spacex_latest_launch_rocket\",\n            \"mdi:rocket\",\n            \"spacexlaunch\",\n        )\n    )\n\n    sensors.append(\n        SpaceXSensor(\n            coordinator,\n            \"Latest Launch Payload\",\n            \"spacex_latest_launch_payload\",\n            \"mdi:package\",\n            \"spacexlaunch\",\n        )\n    )\n\n    sensors.append(\n        SpaceXSensor(\n            coordinator,\n            \"Starman Speed\",\n            \"spacex_starman_speed\",\n            \"mdi:account-star\",\n            \"spacexstarman\",\n        )\n    )\n\n    sensors.append(\n        SpaceXSensor(\n            coordinator,\n            \"Starman Distance\",\n            \"spacex_starman_distance\",\n            \"mdi:map-marker-distance\",\n            \"spacexstarman\",\n        )\n    )\n\n    async_add_entities(sensors)\n\n\nclass SpaceXSensor(CoordinatorEntity):\n    \"\"\"Defines a SpaceX Binary sensor.\"\"\"\n\n    def __init__(\n        self, \n        coordinator: SpaceXUpdateCoordinator, \n        name: str, \n        entity_id: str, \n        icon:str, \n        device_identifier:str,\n        ):\n        \"\"\"Initialize Entities.\"\"\"\n\n        super().__init__(coordinator=coordinator)\n\n        self._name = name\n        self._unique_id = f\"spacex_{entity_id}\"\n        self._state = None\n        self._icon = icon\n        self._kind = entity_id\n        self._device_identifier = device_identifier\n        self._unit_of_measure = None\n        self.attrs = {}\n\n        if self._kind == \"spacex_starman_speed\":\n            self._unit_of_measure = SPEED_KILOMETERS_PER_HOUR\n\n        elif self._kind == \"spacex_starman_distance\":\n            self._unit_of_measure = LENGTH_KILOMETERS\n\n\n    @property\n    def unique_id(self):\n        \"\"\"Return the unique Home Assistant friendly identifier for this entity.\"\"\"\n        return self._unique_id\n\n    @property\n    def name(self):\n        \"\"\"Return the friendly name of this entity.\"\"\"\n        return self._name\n\n    @property\n    def icon(self):\n        \"\"\"Return the icon for this entity.\"\"\"\n        return self._icon\n\n    @property\n    def unit_of_measurement(self):\n        \"\"\"Return the unit of measurement for this entity.\"\"\"\n        return self._unit_of_measure\n\n    @property\n    def extra_state_attributes(self):\n        \"\"\"Return the attributes.\"\"\"\n        coordinator_data = self.coordinator.data\n        starman_data = coordinator_data[\"starman\"]\n        launch_data = coordinator_data[\"next_launch\"]\n        latest_launch_data = coordinator_data[\"latest_launch\"]\n\n        if self._kind == \"spacex_next_launch_mission\":\n            self.attrs[\"mission_patch\"] = launch_data[\"links\"].get(\"patch\",{}).get(\"large\")\n            if launch_data.get(\"details\"):\n                self.attrs[\"details\"] = launch_data[\"details\"][0:255]\n                if len(launch_data[\"details\"]) > 255:\n                    self.attrs[\"details2\"] = launch_data[\"details\"][255:510]\n                else:\n                    self.attrs[\"details2\"] = \"\"\n                if len(launch_data[\"details\"]) > 510:\n                    self.attrs[\"details3\"] = launch_data[\"details\"][510:765]\n                else:\n                    self.attrs[\"details3\"] = \"\"\n            self.attrs[\"video_link\"] = launch_data[\"links\"].get(\"webcast\")\n\n        elif self._kind == \"spacex_next_launch_day\":\n            self.attrs[\"launch_date_unix\"] = launch_data[\"date_unix\"]\n            self.attrs[\"launch_date_utc\"] = launch_data[\"date_utc\"]\n\n        elif self._kind == \"spacex_next_launch_time\":\n            self.attrs[\"launch_time_24h\"] = self._state = as_local(utc_from_timestamp(\n                launch_data[\"date_unix\"]\n            )).strftime(\"%H:%M\")\n\n        elif self._kind == \"spacex_next_launch_countdown\":\n            if launch_data[\"tbd\"]:\n                self.attrs[\"t0_countdown\"] = \"NA\"\n            else:\n                t0_countdown = int(launch_data[\"date_unix\"]) - int(time.time())\n                day = t0_countdown // (24 * 3600)\n                t0_countdown = t0_countdown % (24 * 3600)\n                hour = t0_countdown // 3600\n                t0_countdown %= 3600\n                minutes = t0_countdown // 60\n                t0_countdown %= 60\n                seconds = t0_countdown\n\n                countdown_string = \"\"\n                if day > 0:\n                    countdown_string = f\"{day} days, \"\n\n                if hour > 0:\n                    countdown_string = f\"{countdown_string}{hour} hours, \"\n\n                if minutes > 0:\n                    countdown_string = f\"{countdown_string}{minutes} minutes, \"\n\n                countdown_string = f\"{countdown_string}{seconds} seconds until the launch of {launch_data['name']}.\"\n                \n                self.attrs[\"t0_countdown\"] = countdown_string\n\n        elif self._kind == \"spacex_next_confirmed_launch_day\":\n            if launch_data[\"tbd\"]:\n                self.attrs[\"launch_date_unix\"] = \"NA\"\n                self.attrs[\"launch_date_utc\"] = \"NA\"\n            else:\n                self.attrs[\"launch_date_unix\"] = launch_data[\"date_unix\"]\n                self.attrs[\"launch_date_utc\"] = launch_data[\"date_utc\"]\n\n        elif self._kind == \"spacex_next_confirmed_launch_time\":\n            self.attrs[\"launch_time_24h\"] = self._state = as_local(utc_from_timestamp(\n                launch_data[\"date_unix\"]\n            )).strftime(\"%H:%M\")\n\n        elif self._kind == \"spacex_next_launch_site\":\n            self.attrs[\"short_name\"] = launch_data[\"launch_site\"][\"name\"]\n\n        elif self._kind == \"spacex_next_launch_rocket\":\n            core_counter = 1\n            for this_core in launch_data[\"cores_detail\"]:\n                if this_core.get(\"details\"):\n                    self.attrs[\"core_\" + str(core_counter) + \"_serial\"] = this_core[\"details\"].get(\"serial\")\n                    self.attrs[\"core_\" + str(core_counter) + \"_block\"] = this_core[\"details\"].get(\"block\")\n\n                self.attrs[\"core_\" + str(core_counter) + \"_flight\"] = this_core.get(\n                    \"flight\"\n                )\n                \n                self.attrs[\n                    \"core_\" + str(core_counter) + \"_landing_intent\"\n                ] = this_core.get(\"landing_attempt\")\n                \n                if this_core.get(\"landpad\"):\n                    self.attrs[\"core_\" + str(core_counter) + \"_lz\"] = this_core[\"landpad\"][\n                        \"name\"\n                    ]\n                    self.attrs[\"core_\" + str(core_counter) + \"_lz_long\"] = this_core[\"landpad\"][\n                        \"full_name\"\n                    ]\n                else:\n                    self.attrs[\"core_\" + str(core_counter) + \"_lz\"] = \"NA\"\n                    self.attrs[\"core_\" + str(core_counter) + \"_lz_long\"] = \"NA\"\n                \n                core_counter = core_counter + 1\n\n            if launch_data.get(\"fairings\"):\n                self.attrs[\"fairings_reused\"] = launch_data.get(\"fairings\",{}).get(\n                    \"reused\"\n                )\n            else:\n                self.attrs[\"fairings_reused\"] = \"NA\"\n        \n        elif self._kind == \"spacex_next_launch_payload\":\n            if len(launch_data[\"payloads_detail\"]):\n                if len(launch_data[\"payloads_detail\"][0][\"nationalities\"]):\n                    self.attrs[\"nationality\"] = launch_data[\"payloads_detail\"][0][\"nationalities\"][0]\n                else:\n                    self.attrs[\"nationality\"] = \"NA\"\n                if len(launch_data[\"payloads_detail\"][0][\"manufacturers\"]):\n                    self.attrs[\"manufacturer\"] = launch_data[\"payloads_detail\"][0][\"manufacturers\"][0]\n                else:\n                    self.attrs[\"manufacturer\"] = \"NA\"\n\n            if launch_data[\"payloads_detail\"]:\n                self.attrs[\"payload_type\"] = launch_data[\"payloads_detail\"][0][\"type\"]\n                self.attrs[\"payload_mass\"] = (\n                    str(\n                        launch_data[\"payloads_detail\"][0][\"mass_kg\"]\n                    )\n                    + \" kg\"\n                )\n                self.attrs[\"payload_mass_us\"] = (\n                    str(\n                        launch_data[\"payloads_detail\"][0][\"mass_lbs\"]\n                    )\n                    + \" lbs\"\n                )\n                self.attrs[\"orbit\"] = launch_data[\"payloads_detail\"][0][\"orbit\"]\n            else:\n                self.attrs[\"payload_type\"] = \"\"\n                self.attrs[\"payload_mass\"] = \"\"\n                self.attrs[\"payload_mass_us\"] = \"\"\n           \n\n        elif self._kind == \"spacex_latest_launch_mission\":\n            self.attrs[\"mission_patch\"] = latest_launch_data[\"links\"].get(\"patch\",{}).get(\"large\")\n            if latest_launch_data.get(\"details\"):\n                self.attrs[\"details\"] = latest_launch_data[\"details\"][0:255]\n                if len(latest_launch_data[\"details\"]) > 255:\n                    self.attrs[\"details2\"] = latest_launch_data[\"details\"][255:510]\n                else:\n                    self.attrs[\"details2\"] = \"\"\n                if len(latest_launch_data[\"details\"]) > 510:\n                    self.attrs[\"details3\"] = latest_launch_data[\"details\"][510:765]\n                else:\n                    self.attrs[\"details3\"] = \"\"\n            self.attrs[\"video_link\"] = latest_launch_data[\"links\"].get(\"webcast\")\n\n        elif self._kind == \"spacex_latest_launch_day\":\n            self.attrs[\"launch_date_unix\"] = latest_launch_data[\"date_unix\"]\n            self.attrs[\"launch_date_utc\"] = latest_launch_data[\"date_utc\"]\n\n        elif self._kind == \"spacex_latest_launch_time\":\n            self.attrs[\"launch_time_24h\"] = self._state = as_local(utc_from_timestamp(\n                latest_launch_data[\"date_unix\"]\n            )).strftime(\"%H:%M\")\n\n        elif self._kind == \"spacex_latest_launch_site\":\n            self.attrs[\"short_name\"] = latest_launch_data[\"launch_site\"][\"name\"]\n\n        elif self._kind == \"spacex_latest_launch_rocket\":\n            core_counter = 1\n            for this_core in latest_launch_data[\"cores_detail\"]:\n                if this_core.get(\"details\"):\n                    self.attrs[\"core_\" + str(core_counter) + \"_serial\"] = this_core.get(\"details\",{}).get(\n                        \"serial\"\n                    )\n                    self.attrs[\"core_\" + str(core_counter) + \"_block\"] = this_core.get(\"details\",{}).get(\n                        \"block\"\n                    )\n                else:\n                    self.attrs[\"core_\" + str(core_counter) + \"_serial\"] = None\n                    self.attrs[\"core_\" + str(core_counter) + \"_block\"] = None\n\n                self.attrs[\"core_\" + str(core_counter) + \"_flight\"] = this_core.get(\n                    \"flight\"\n                )\n                \n                self.attrs[\n                    \"core_\" + str(core_counter) + \"_landing_intent\"\n                ] = this_core.get(\"landing_attempt\")\n\n                if this_core.get(\"landpad\"):\n                    self.attrs[\"core_\" + str(core_counter) + \"_lz\"] = this_core.get(\"landpad\",{}).get(\n                        \"name\"\n                    )\n\n                    self.attrs[\"core_\" + str(core_counter) + \"_lz_long\"] = this_core.get(\"landpad\",{}).get(\n                        \"full_name\"\n                    )\n                else:\n                    self.attrs[\"core_\" + str(core_counter) + \"_lz\"] = None\n                    self.attrs[\"core_\" + str(core_counter) + \"_lz_long\"] = None\n\n                core_counter = core_counter + 1\n            \n            if latest_launch_data.get(\"fairings\"):\n                self.attrs[\"fairings_reused\"] = latest_launch_data[\"fairings\"].get(\n                        \"reused\"\n                    )\n\n        elif self._kind == \"spacex_latest_launch_payload\":\n            if len(latest_launch_data[\"payloads_detail\"]):\n                if len(latest_launch_data[\"payloads_detail\"][0][\"nationalities\"]):\n                    self.attrs[\"nationality\"] = latest_launch_data[\"payloads_detail\"][0][\"nationalities\"][0]\n                else:\n                    self.attrs[\"nationality\"] = \"NA\"\n                if len(latest_launch_data[\"payloads_detail\"][0][\"manufacturers\"]):\n                    self.attrs[\"manufacturer\"] = latest_launch_data[\"payloads_detail\"][0][\"manufacturers\"][0]\n                else:\n                    self.attrs[\"manufacturer\"] = \"NA\"\n                \n                self.attrs[\"payload_type\"] = latest_launch_data[\"payloads_detail\"][0][\"type\"]\n                self.attrs[\"payload_mass\"] = (\n                    str(\n                        latest_launch_data[\"payloads_detail\"][0][\"mass_kg\"]\n                    )\n                    + \" kg\"\n                )\n                self.attrs[\"payload_mass_us\"] = (\n                    str(\n                        latest_launch_data[\"payloads_detail\"][0][\"mass_lbs\"]\n                    )\n                    + \" lbs\"\n                )\n                self.attrs[\"orbit\"] = latest_launch_data[\"payloads_detail\"][0][\"orbit\"]\n\n\n        elif self._kind == \"spacex_starman_speed\":\n            self.attrs[\"machspeed\"] = float(starman_data[\"speed_kph\"]) / 1235\n\n        elif self._kind == \"spacex_starman_distance\":\n            self.attrs[\"au_distance\"] = float(starman_data[\"earth_distance_km\"]) / (1.496 * (10**8))\n\n        return self.attrs\n\n    @property\n    def device_info(self):\n        \"\"\"Define the device based on device_identifier.\"\"\"\n\n        device_name = \"SpaceX Launches\"\n        device_model = \"Launch\"\n\n        if self._device_identifier != \"spacexlaunch\":\n            device_name = \"SpaceX Starman\"\n            device_model = \"Starman\"\n\n        return {\n            ATTR_IDENTIFIERS: {(DOMAIN, self._device_identifier)},\n            ATTR_NAME: device_name,\n            ATTR_MANUFACTURER: \"SpaceX\",\n            ATTR_MODEL: device_model,\n        }\n\n    @property\n    def state(self):\n        \"\"\"Return the state.\"\"\"\n        coordinator_data = self.coordinator.data\n        starman_data = coordinator_data[\"starman\"]\n        launch_data = coordinator_data[\"next_launch\"]\n        latest_launch_data = coordinator_data[\"latest_launch\"]\n\n        if self._kind == \"spacex_next_launch_mission\":\n            self._state = launch_data[\"name\"]\n\n        elif self._kind == \"spacex_next_launch_day\":\n            self._state = as_local(utc_from_timestamp(\n                launch_data[\"date_unix\"]\n            )).strftime(\"%d-%b-%Y\")\n            \n        elif self._kind == \"spacex_next_launch_time\":\n            self._state = as_local(utc_from_timestamp(\n                launch_data[\"date_unix\"]\n            )).strftime(\"%I:%M %p\")\n\n        elif self._kind == \"spacex_next_launch_countdown\":\n            if launch_data[\"tbd\"]:\n                self._state = None\n            else:\n                t0_countdown = int(launch_data[\"date_unix\"]) - int(time.time())\n                self._state = str(datetime.timedelta(seconds=t0_countdown))\n\n        elif self._kind == \"spacex_next_confirmed_launch_day\":\n            if launch_data[\"tbd\"]:\n                self._state = None\n            else:\n                self._state = as_local(utc_from_timestamp(\n                    launch_data[\"date_unix\"]\n                )).strftime(\"%d-%b-%Y\")\n\n        elif self._kind == \"spacex_next_confirmed_launch_time\":\n            if launch_data[\"tbd\"]:\n                self._state = None\n            else:\n                self._state = as_local(utc_from_timestamp(\n                    launch_data[\"date_unix\"]\n                )).strftime(\"%I:%M %p\")\n\n        elif self._kind == \"spacex_next_launch_site\":\n            self._state = launch_data[\"launch_site\"][\"full_name\"]\n\n        elif self._kind == \"spacex_next_launch_rocket\":\n            self._state = launch_data[\"rocket\"][\"name\"]\n\n        elif self._kind == \"spacex_next_launch_payload\":\n            if launch_data[\"payloads_detail\"]:\n                self._state = launch_data[\"payloads_detail\"][0][\"name\"]\n            else:\n                self._state = \"\"\n\n        elif self._kind == \"spacex_latest_launch_mission\":\n            self._state = latest_launch_data[\"name\"]\n            \n        elif self._kind == \"spacex_latest_launch_day\":\n            self._state = as_local(utc_from_timestamp(\n                latest_launch_data[\"date_unix\"]\n            )).strftime(\"%d-%b-%Y\")\n            \n        elif self._kind == \"spacex_latest_launch_time\":\n            self._state = as_local(utc_from_timestamp(\n                latest_launch_data[\"date_unix\"]\n            )).strftime(\"%I:%M %p\")\n\n        elif self._kind == \"spacex_latest_launch_site\":\n            self._state = latest_launch_data[\"launch_site\"][\"full_name\"]\n\n        elif self._kind == \"spacex_latest_launch_rocket\":\n            self._state = latest_launch_data[\"rocket\"][\"name\"]\n            \n        elif self._kind == \"spacex_latest_launch_payload\":\n            self._state = latest_launch_data[\"payloads_detail\"][0][\"name\"]\n            \n        elif self._kind == \"spacex_starman_speed\":\n            self._state = int(starman_data[\"speed_kph\"])\n            self._unit_of_measure = SPEED_KILOMETERS_PER_HOUR\n\n        elif self._kind == \"spacex_starman_distance\":\n            self._state = int(starman_data[\"earth_distance_km\"])\n            self._unit_of_measure = LENGTH_KILOMETERS\n            \n        return self._state\n\n    async def async_update(self):\n        \"\"\"Update SpaceX Binary Sensor Entity.\"\"\"\n        await self.coordinator.async_request_refresh()\n        _LOGGER.debug(\"Updating state of the sensors.\")\n        \n    async def async_added_to_hass(self):\n        \"\"\"Subscribe to updates.\"\"\"\n        self.async_on_remove(\n            self.coordinator.async_add_listener(self.async_write_ha_state)\n        )\n"
  },
  {
    "path": "home-assistant/custom_components/spacex/strings.json",
    "content": "{\n  \"title\": \"SpaceX Launches and Starman\",\n  \"config\": {\n    \"step\": {\n      \"confirm\": {\n        \"description\": \"[%key:common::config_flow::description::confirm_setup%]\"\n      }\n    },\n    \"abort\": {\n      \"single_instance_allowed\": \"[%key:common::config_flow::abort::single_instance_allowed%]\",\n      \"no_devices_found\": \"[%key:common::config_flow::abort::no_devices_found%]\"\n    }\n  }\n}"
  },
  {
    "path": "home-assistant/custom_components/spacex/translations/en.json",
    "content": "{\n    \"config\": {\n        \"abort\": {\n            \"no_devices_found\": \"[%key:common::config_flow::abort::no_devices_found%]\",\n            \"single_instance_allowed\": \"[%key:common::config_flow::abort::single_instance_allowed%]\"\n        },\n        \"step\": {\n            \"confirm\": {\n                \"description\": \"Are you sure you want to install the SpaceX integration?\"\n            }\n        }\n    },\n    \"title\": \"SpaceX Launches and Starman\"\n}"
  },
  {
    "path": "home-assistant/custom_components/spotify_cover_sensor/__init__.py",
    "content": "\n__version__ = '1.0.0'"
  },
  {
    "path": "home-assistant/custom_components/spotify_cover_sensor/manifest.json",
    "content": "{\n  \"domain\": \"spotify_cover\",\n  \"name\": \"SpotifyCoverSensor\",\n  \"documentation\": \"http://macbury.ninja\",\n  \"requirements\": [\n    \"colorthief==0.2.1\",\n    \"spotipy-homeassistant==2.4.4.dev1\"\n  ],\n  \"dependencies\": [],\n  \"codeowners\": [\n    \"@macbury\"\n  ]\n}"
  },
  {
    "path": "home-assistant/custom_components/spotify_cover_sensor/sensor.py",
    "content": "import urllib.request\nimport logging\nimport asyncio\nimport os\nimport json\nimport tempfile\n\nfrom homeassistant.helpers.event import async_track_state_change\nfrom homeassistant.helpers.entity import Entity\nfrom homeassistant.components.spotify.media_player import (\n  CONF_CACHE_PATH,\n  CONF_CLIENT_ID,\n  CONF_CLIENT_SECRET,\n  DEFAULT_CACHE_PATH,\n  SCOPE,\n  AUTH_CALLBACK_PATH\n)\n\nfrom homeassistant.const import (\n  STATE_PLAYING,\n  STATE_OFF,\n  STATE_ON\n)\n\nLOGGER       = logging.getLogger(__name__)\n\nclass SpotifyCoverSensor(Entity):\n  def __init__(self, hass, config):\n    self.hass = hass\n    self.config = config\n    self._state = STATE_OFF\n    self._name  = 'spotify_cover'\n    self._player = None\n    self._oauth = None\n    self.token_info = None\n    self._dominant_color = None\n    self._accent_color_1 = None\n    self._accent_color_2 = None\n    self._accent_color_3 = None\n    self._load_token()\n    self._listen_for_media_player_state_change()\n\n  def _listen_for_media_player_state_change(self):\n    media_players = self.hass.states.entity_ids('media_player')\n    async_track_state_change(self.hass, media_players, self._on_player_state_change)\n\n  @asyncio.coroutine\n  def _on_player_state_change(self, entity_id, old_state, new_state):\n    self.schedule_update_ha_state()\n\n  @property\n  def state(self):\n    return self._state\n\n  @property\n  def name(self):\n    return self._name\n\n  @property\n  def state_attributes(self):\n    return {\n      'dominant_rgb': self._dominant_color,\n      'accent_rgb_1': self._accent_color_1,\n      'accent_rgb_2': self._accent_color_2,\n      'accent_rgb_3': self._accent_color_3\n    }\n\n  def update(self):\n    LOGGER.info(\"Updating sensor information using spotify api\")\n    self._prepare_player()\n\n    self._state = STATE_OFF\n\n    if self._player is None:\n      LOGGER.warning(\"Player is disabled\")\n      return\n\n    if self._token_expired():\n      LOGGER.warning(\"Spotify failed to update, token expired.\")\n      return \n\n    current = self._player.current_playback()\n    if current is None:\n      return\n\n    if current.get('is_playing'):\n      item = current.get('item')\n      self._state = item.get('album').get('id')\n      album_id = item.get('album').get('id')\n      cover_url = item.get('album').get('images')[-2].get('url')\n      \n      self._state = STATE_ON\n\n      colors = self._fetch_colors(album_id, cover_url)\n      self._dominant_color = colors['dominant']\n      self._accent_color_1 = colors['accent_1']\n      self._accent_color_2 = colors['accent_2']\n      self._accent_color_3 = colors['accent_3']\n\n  def _fetch_cover(self, album_id, cover_url):\n    cover_path = os.path.join(tempfile.gettempdir(), 'cover_'+album_id+'.png')\n    if os.path.isfile(cover_path):\n      return cover_path\n    \n    LOGGER.info('Downloading ' + cover_url + ' to ' + cover_path)\n    urllib.request.urlretrieve(cover_url, cover_path)\n    return cover_path\n\n  def _format_color(self, color):\n    return { 'r': color[0], 'g': color[1], 'b': color[2] }\n\n  def _fetch_colors(self, album_id, cover_url):\n    cover_path = self._fetch_cover(album_id, cover_url)\n    cover_json = os.path.join(tempfile.gettempdir(), 'cover_'+album_id+'.json')\n\n    # if os.path.isfile(cover_json) is False:\n    #   from colorthief import ColorThief\n\n    #   color_thief = ColorThief(cover_path)\n    #   pallete = color_thief.get_palette(color_count=4, quality=1)\n    #   colors = {\n    #     'dominant': pallete[0],\n    #     'accent_1': pallete[1],\n    #     'accent_2': pallete[2],\n    #     'accent_3': pallete[3]\n    #   }\n    #   file = open(cover_json, 'w')\n    #   file.write(json.dumps(colors))\n    #   file.close()\n\n    return json.load(open(cover_json, 'r'))\n\n  def _load_token(self):\n    try:\n      import spotipy.oauth2\n      callback_url = '{}{}'.format(self.hass.config.api.base_url, AUTH_CALLBACK_PATH)\n      cache = self.config.get(CONF_CACHE_PATH, self.hass.config.path(DEFAULT_CACHE_PATH))\n      self.oauth = spotipy.oauth2.SpotifyOAuth(\n            self.config.get(CONF_CLIENT_ID), self.config.get(CONF_CLIENT_SECRET),\n            callback_url, scope=SCOPE,\n            cache_path=cache)\n      self.token_info = self.oauth.get_cached_token()\n    except Exception as e:\n      LOGGER.error(\"Could not refresh token\")\n      LOGGER.error(e)\n\n  def _token_expired(self):\n    return self.token_info is None or self.oauth.is_token_expired(self.token_info)\n\n  def _prepare_player(self):\n    if self._token_expired():\n      self._load_token()\n      self._player = None\n\n    if self._token_expired():\n      return None\n\n    if self._player is None:\n      import spotipy\n      self._player = spotipy.Spotify(auth=self.token_info.get('access_token'))\n\ndef setup_platform(hass, config, add_devices, discovery_info=None):\n  add_devices([SpotifyCoverSensor(hass, config)])\n  return True\n"
  },
  {
    "path": "home-assistant/custom_components/tauron_amiplus/manifest.json",
    "content": "{\n  \"domain\": \"tauron_amiplus\",\n  \"name\": \"Tauron AMIplus\",\n  \"documentation\": \"https://github.com/PiotrMachowski/Home-Assistant-custom-components-Tauron-AMIplus\",\n  \"dependencies\": [],\n  \"codeowners\": [\"@PiotrMachowski\"],\n  \"requirements\": [\"requests\"]\n}"
  },
  {
    "path": "home-assistant/custom_components/tauron_amiplus/sensor.py",
    "content": "import datetime\nimport logging\nfrom datetime import timedelta\n\nimport homeassistant.helpers.config_validation as cv\nimport requests\nimport voluptuous as vol\nfrom homeassistant.components.sensor import PLATFORM_SCHEMA\nfrom homeassistant.const import (CONF_USERNAME, CONF_PASSWORD, CONF_NAME, CONF_MONITORED_VARIABLES)\nfrom homeassistant.helpers.entity import Entity\nfrom homeassistant.util import Throttle\n\n_LOGGER = logging.getLogger(__name__)\n\nCONF_METER_ID = 'energy_meter_id'\nCONF_GENERATION = 'check_generation'\n\nDEFAULT_NAME = 'Tauron AMIPlus'\n\nMIN_TIME_BETWEEN_UPDATES = datetime.timedelta(seconds=60)\n\nZONE = 'zone'\nCONSUMPTION_DAILY = 'consumption_daily'\nCONSUMPTION_MONTHLY = 'consumption_monthly'\nCONSUMPTION_YEARLY = 'consumption_yearly'\nGENERATION_DAILY = 'generation_daily'\nGENERATION_MONTHLY = 'generation_monthly'\nGENERATION_YEARLY = 'generation_yearly'\n\nSENSOR_TYPES = {\n    ZONE: [timedelta(minutes=1), None],\n    CONSUMPTION_DAILY: [timedelta(hours=1), 'kWh', 'sum', ('generation', 'OZEValue')],\n    CONSUMPTION_MONTHLY: [timedelta(hours=1), 'kWh', 'sum', ('generation', 'OZEValue')],\n    CONSUMPTION_YEARLY: [timedelta(hours=1), 'kWh', 'sum', ('generation', 'OZEValue')],\n    GENERATION_DAILY: [timedelta(hours=1), 'kWh', 'OZEValue', ('consumption', 'sum')],\n    GENERATION_MONTHLY: [timedelta(hours=1), 'kWh', 'OZEValue', ('consumption', 'sum')],\n    GENERATION_YEARLY: [timedelta(hours=1), 'kWh', 'OZEValue', ('consumption', 'sum')]\n}\n\nTARIFF_G12 = 'G12'\n\nPLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({\n    vol.Required(CONF_USERNAME): cv.string,\n    vol.Required(CONF_PASSWORD): cv.string,\n    vol.Required(CONF_METER_ID): cv.string,\n    vol.Required(CONF_MONITORED_VARIABLES, default=[]):\n        vol.All(cv.ensure_list, [vol.In(SENSOR_TYPES)]),\n    vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,\n    vol.Optional(CONF_GENERATION, default=False): cv.boolean,\n})\n\n\ndef setup_platform(hass, config, add_entities, discovery_info=None):\n    name = config.get(CONF_NAME)\n    username = config.get(CONF_USERNAME)\n    password = config.get(CONF_PASSWORD)\n    meter_id = config.get(CONF_METER_ID)\n    generation = config.get(CONF_GENERATION)\n    dev = []\n    for variable in config[CONF_MONITORED_VARIABLES]:\n        dev.append(TauronAmiplusSensor(name, username, password, meter_id, generation, variable))\n    add_entities(dev, True)\n\n\ndef calculate_configuration(username, password, meter_id, days_before=2):\n    payload_login = {\n        \"username\": username,\n        \"password\": password,\n        \"service\": \"https://elicznik.tauron-dystrybucja.pl\"\n    }\n    session = requests.session()\n    session.request(\"POST\", TauronAmiplusSensor.url_login, data=payload_login,\n                    headers=TauronAmiplusSensor.headers)\n    session.request(\"POST\", TauronAmiplusSensor.url_login, data=payload_login,\n                    headers=TauronAmiplusSensor.headers)\n    config_date = (datetime.datetime.now() - datetime.timedelta(days_before))\n    payload = {\n        \"dane[chartDay]\": config_date.strftime('%d.%m.%Y'),\n        \"dane[paramType]\": \"day\",\n        \"dane[smartNr]\": meter_id,\n        \"dane[chartType]\": 1\n    }\n    response = session.request(\"POST\", TauronAmiplusSensor.url_charts,\n                               data={**TauronAmiplusSensor.payload_charts, **payload},\n                               headers=TauronAmiplusSensor.headers)\n    json_data = response.json()\n    zones = json_data['dane']['zone']\n    parsed_zones = []\n    for zone in zones:\n        start = datetime.time(hour=int(zone['start'][11:]))\n        stop = datetime.time(hour=int(zone['stop'][11:]))\n        parsed_zones.append({'start': start, 'stop': stop})\n    calculated_zones = []\n    for i in range(0, len(parsed_zones)):\n        next_i = (i + 1) % len(parsed_zones)\n        start = datetime.time(parsed_zones[i]['stop'].hour)\n        stop = datetime.time(parsed_zones[next_i]['start'].hour)\n        calculated_zones.append({'start': start, 'stop': stop})\n    power_zones = {1: parsed_zones, 2: calculated_zones}\n    tariff = list(json_data['dane']['chart'].values())[0]['Taryfa']\n    return power_zones, tariff, config_date.strftime('%d.%m.%Y, %H:%M')\n\n\nclass TauronAmiplusSensor(Entity):\n    url_login = \"https://logowanie.tauron-dystrybucja.pl/login\"\n    url_charts = \"https://elicznik.tauron-dystrybucja.pl/index/charts\"\n    headers = {\n        'cache-control': \"no-cache\",\n    }\n    payload_charts = {\n        \"dane[cache]\": 0,\n        \"dane[chartType]\": 2\n    }\n\n    def __init__(self, name, username, password, meter_id, generation, sensor_type):\n        self.client_name = name\n        self.username = username\n        self.password = password\n        self.meter_id = meter_id\n        self.additional_param_enabled = generation or sensor_type.startswith(\"generation\")\n        self.sensor_type = sensor_type\n        self.unit = SENSOR_TYPES[sensor_type][1]\n        configuration = calculate_configuration(username, password, meter_id)\n        self.power_zones = configuration[0]\n        self.mode = configuration[1]\n        self.power_zones_last_update = configuration[2]\n        self.power_zones_last_update_tech = datetime.datetime.now() - datetime.timedelta(days=1)\n        self.data = None\n        self.params = {}\n        self._state = None\n        self.update = Throttle(SENSOR_TYPES[sensor_type][0])(self._update)\n        if not sensor_type == ZONE:\n            self.state_param = SENSOR_TYPES[sensor_type][2]\n            self.additional_param_name = SENSOR_TYPES[sensor_type][3][0]\n            self.additional_param = SENSOR_TYPES[sensor_type][3][1]\n\n    @property\n    def name(self):\n        return '{} {}'.format(self.client_name, self.sensor_type)\n\n    @property\n    def state(self):\n        return self._state\n\n    @property\n    def device_state_attributes(self):\n        _params = {'tariff': self.mode, 'updated': self.power_zones_last_update, **self.params}\n        return _params\n\n    @property\n    def unit_of_measurement(self):\n        return self.unit\n\n    @property\n    def icon(self):\n        return 'mdi:counter'\n\n    def _update(self):\n        self.update_configuration()\n        if self.sensor_type == ZONE:\n            self.update_zone()\n        elif self.sensor_type.endswith(\"daily\"):\n            self.update_values_daily()\n        elif self.sensor_type.endswith(\"monthly\"):\n            self.update_values_monthly()\n        elif self.sensor_type.endswith(\"yearly\"):\n            self.update_values_yearly()\n\n    def get_session(self):\n        payload_login = {\n            \"username\": self.username,\n            \"password\": self.password,\n            \"service\": \"https://elicznik.tauron-dystrybucja.pl\"\n        }\n        session = requests.session()\n        session.request(\"POST\", TauronAmiplusSensor.url_login, data=payload_login,\n                        headers=TauronAmiplusSensor.headers)\n        session.request(\"POST\", TauronAmiplusSensor.url_login, data=payload_login,\n                        headers=TauronAmiplusSensor.headers)\n        return session\n\n    def update_configuration(self):\n        now_datetime = datetime.datetime.now()\n        if (now_datetime - datetime.timedelta(days=1)) >= self.power_zones_last_update_tech and now_datetime.hour >= 10:\n            config = calculate_configuration(self.username, self.password, self.meter_id, 1)\n            self.power_zones = config[0]\n            self.mode = config[1]\n            self.power_zones_last_update = config[2]\n            self.power_zones_last_update_tech = now_datetime\n\n    def update_zone(self):\n        if self.mode == TARIFF_G12:\n            parsed_zones = self.power_zones[1]\n            now_time = datetime.datetime.now().time()\n            if len(list(filter(lambda x: x['start'] <= now_time < x['stop'], parsed_zones))) > 0:\n                self._state = 1\n            else:\n                self._state = 2\n            self.params = {}\n            for power_zone in self.power_zones:\n                pz_name = 'zone{} '.format(power_zone)\n                pz = str(list(map(lambda x: x['start'].strftime('%H:%M') + ' - ' + x['stop'].strftime('%H:%M'),\n                                  self.power_zones[power_zone]))).replace('[', '').replace(']', '').replace(\"'\", '')\n                self.params[pz_name] = pz\n        else:\n            self._state = 1\n\n    def update_values_daily(self):\n        session = self.get_session()\n        payload = {\n            \"dane[chartDay]\": (datetime.datetime.now() - datetime.timedelta(1)).strftime('%d.%m.%Y'),\n            \"dane[paramType]\": \"day\",\n            \"dane[smartNr]\": self.meter_id,\n            \"dane[checkOZE]\": \"on\" if self.additional_param_enabled else \"off\"\n        }\n        response = session.request(\"POST\", TauronAmiplusSensor.url_charts,\n                                   data={**TauronAmiplusSensor.payload_charts, **payload},\n                                   headers=TauronAmiplusSensor.headers)\n        correct_data = False\n        if response.status_code == 200 and response.text.startswith('{\"name\"') and response.json()['isFull']:\n            correct_data = True\n        else:\n            session = self.get_session()\n            payload = {\n                \"dane[chartDay]\": (datetime.datetime.now() - datetime.timedelta(2)).strftime('%d.%m.%Y'),\n                \"dane[paramType]\": \"day\",\n                \"dane[smartNr]\": self.meter_id,\n                \"dane[checkOZE]\": \"on\" if self.additional_param_enabled else \"off\"\n            }\n            response = session.request(\"POST\", TauronAmiplusSensor.url_charts,\n                                       data={**TauronAmiplusSensor.payload_charts, **payload},\n                                       headers=TauronAmiplusSensor.headers)\n            if response.status_code == 200 and response.text.startswith('{\"name\"'):\n                correct_data = True\n        if correct_data:\n            json_data = response.json()\n            self._state = round(float(json_data[self.state_param]), 3)\n            if self.mode == TARIFF_G12:\n                values = list(json_data['dane']['chart'].values())\n                z1 = list(filter(lambda x: x['Zone'] == '1', values))\n                z2 = list(filter(lambda x: x['Zone'] == '2', values))\n                sum_z1 = round(sum(float(val['EC']) for val in z1), 3)\n                sum_z2 = round(sum(float(val['EC']) for val in z2), 3)\n                day = values[0]['Date']\n                self.params = {'zone1': sum_z1, 'zone2': sum_z2, 'day': day}\n            if self.additional_param_enabled:\n                self.params = {**self.params, self.additional_param_name: round(float(json_data[self.additional_param]), 3)}\n\n    def update_values_monthly(self):\n        session = self.get_session()\n        payload = {\n            \"dane[chartMonth]\": datetime.datetime.now().month,\n            \"dane[chartYear]\": datetime.datetime.now().year,\n            \"dane[paramType]\": \"month\",\n            \"dane[smartNr]\": self.meter_id,\n            \"dane[checkOZE]\": \"on\" if self.additional_param_enabled else \"off\"\n        }\n        response = session.request(\"POST\", TauronAmiplusSensor.url_charts,\n                                   data={**TauronAmiplusSensor.payload_charts, **payload},\n                                   headers=TauronAmiplusSensor.headers)\n        if response.status_code == 200 and response.text.startswith('{\"name\"'):\n            json_data = response.json()\n            self._state = round(float(json_data[self.state_param]), 3)\n            self.params = {}\n            if self.mode == TARIFF_G12:\n                values = json_data['dane']['chart']\n                z1 = list(filter(lambda x: 'tariff1' in x, values))\n                z2 = list(filter(lambda x: 'tariff2' in x, values))\n                sum_z1 = round(sum(float(val['tariff1']) for val in z1), 3)\n                sum_z2 = round(sum(float(val['tariff2']) for val in z2), 3)\n                self.params = {'zone1': sum_z1, 'zone2': sum_z2}\n            if self.additional_param_enabled:\n                self.params = {**self.params, self.additional_param_name: round(float(json_data[self.additional_param]), 3)}\n\n    def update_values_yearly(self):\n        session = self.get_session()\n        payload = {\n            \"dane[chartYear]\": datetime.datetime.now().year,\n            \"dane[paramType]\": \"year\",\n            \"dane[smartNr]\": self.meter_id,\n            \"dane[chartType]\": 2,\n            \"dane[checkOZE]\": \"on\" if self.additional_param_enabled else \"off\"\n        }\n        response = session.request(\"POST\", TauronAmiplusSensor.url_charts,\n                                   data={**TauronAmiplusSensor.payload_charts, **payload},\n                                   headers=TauronAmiplusSensor.headers)\n        if response.status_code == 200 and response.text.startswith('{\"name\"'):\n            json_data = response.json()\n            self._state = round(float(json_data[self.state_param]), 3)\n            self.params = {}\n            if self.mode == TARIFF_G12:\n                values = json_data['dane']['chart']\n                z1 = list(filter(lambda x: 'tariff1' in x, values))\n                z2 = list(filter(lambda x: 'tariff2' in x, values))\n                sum_z1 = round(sum(float(val['tariff1']) for val in z1), 3)\n                sum_z2 = round(sum(float(val['tariff2']) for val in z2), 3)\n                self.params = {'zone1': sum_z1, 'zone2': sum_z2}\n            if self.additional_param_enabled:\n                self.params = {**self.params, self.additional_param_name: round(float(json_data[self.additional_param]), 3)}\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/__init__.py",
    "content": "\"\"\"Support for Tuya Smart devices.\"\"\"\n\nimport itertools\nfrom typing import Any\nimport logging\nimport json\n\nimport voluptuous as vol\n\nfrom tuya_iot import (\n    ProjectType,\n    TuyaDevice,\n    TuyaDeviceListener,\n    TuyaDeviceManager,\n    TuyaHomeManager,\n    TuyaOpenAPI,\n    TuyaOpenMQ,\n    tuya_logger\n)\n\nfrom .aes_cbc import AES_ACCOUNT_KEY, KEY_KEY, XOR_KEY\nfrom .aes_cbc import AesCBC as Aes\n\nimport homeassistant.helpers.config_validation as cv\nfrom homeassistant.config_entries import ConfigEntry, SOURCE_IMPORT\nfrom homeassistant.core import HomeAssistant, callback\nfrom homeassistant.helpers import device_registry\nfrom homeassistant.helpers.dispatcher import dispatcher_send\nfrom homeassistant.data_entry_flow import UnknownFlow, UnknownStep\n\nfrom .const import (\n    CONF_ACCESS_ID,\n    CONF_ACCESS_SECRET,\n    CONF_APP_TYPE,\n    CONF_COUNTRY_CODE,\n    CONF_ENDPOINT,\n    CONF_PASSWORD,\n    CONF_PROJECT_TYPE,\n    CONF_USERNAME,\n    DOMAIN,\n    PLATFORMS,\n    TUYA_DEVICE_MANAGER,\n    TUYA_DISCOVERY_NEW,\n    TUYA_HA_DEVICES,\n    TUYA_HA_SIGNAL_UPDATE_ENTITY,\n    TUYA_HA_TUYA_MAP,\n    TUYA_HOME_MANAGER,\n    TUYA_MQTT_LISTENER,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\nCONFIG_SCHEMA = vol.Schema(\n    vol.All(\n        cv.deprecated(DOMAIN),\n        {\n            DOMAIN: vol.Schema(\n                {\n                    vol.Required(CONF_PROJECT_TYPE): int,\n                    vol.Required(CONF_ENDPOINT): cv.string,\n                    vol.Required(CONF_ACCESS_ID): cv.string,\n                    vol.Required(CONF_ACCESS_SECRET): cv.string,\n                    CONF_USERNAME: cv.string,\n                    CONF_PASSWORD: cv.string,\n                    CONF_COUNTRY_CODE: cv.string,\n                    CONF_APP_TYPE: cv.string,\n                }\n            )\n        },\n    ),\n    extra=vol.ALLOW_EXTRA,\n)\n\ndef entry_decrypt(hass: HomeAssistant, entry: ConfigEntry, init_entry_data):\n    \"\"\"Decript or encrypt entry info.\"\"\"\n    aes = Aes()\n    # decrypt the new account info\n    if XOR_KEY in init_entry_data:\n        _LOGGER.info(\"tuya.__init__.exist_xor_cache-->True\")\n        key_iv = aes.xor_decrypt(init_entry_data[XOR_KEY], init_entry_data[KEY_KEY])\n        cbc_key = key_iv[0:16]\n        cbc_iv = key_iv[16:32]\n        decrpyt_str = aes.cbc_decrypt(cbc_key, cbc_iv, init_entry_data[AES_ACCOUNT_KEY])\n        # _LOGGER.info(f\"tuya.__init__.exist_xor_cache:::decrpyt_str-->{decrpyt_str}\")\n        entry_data = aes.json_to_dict(decrpyt_str)\n    else:\n        # if not exist xor cache, use old account info\n        _LOGGER.info(\"tuya.__init__.exist_xor_cache-->False\")\n        entry_data = init_entry_data\n        cbc_key = aes.random_16()\n        cbc_iv = aes.random_16()\n        access_id = init_entry_data[CONF_ACCESS_ID]\n        access_id_entry = aes.cbc_encrypt(cbc_key, cbc_iv, access_id)\n        c = cbc_key + cbc_iv\n        c_xor_entry = aes.xor_encrypt(c, access_id_entry)\n        # account info encrypted with AES-CBC\n        user_input_encrpt = aes.cbc_encrypt(\n            cbc_key, cbc_iv, json.dumps(dict(init_entry_data))\n        )\n        # udpate old account info\n        hass.config_entries.async_update_entry(\n            entry,\n            data={\n                AES_ACCOUNT_KEY: user_input_encrpt,\n                XOR_KEY: c_xor_entry,\n                KEY_KEY: access_id_entry,\n            },\n        )\n    return entry_data\n\nasync def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:\n    \"\"\"Async setup hass config entry.\"\"\"\n\n    _LOGGER.debug(\"tuya.__init__.async_setup_entry-->%s\", entry.data)\n\n    hass.data[DOMAIN] = {entry.entry_id: {TUYA_HA_TUYA_MAP: {}, TUYA_HA_DEVICES: set()}}\n\n    success = await _init_tuya_sdk(hass, entry)\n    if not success:\n        return False\n\n    return True\n\n\nasync def _init_tuya_sdk(hass: HomeAssistant, entry: ConfigEntry) -> bool:\n    entry_data = entry_decrypt(hass, entry, entry.data)\n    project_type = ProjectType(entry_data[CONF_PROJECT_TYPE])\n\n    api = TuyaOpenAPI(\n        entry_data[CONF_ENDPOINT],\n        entry_data[CONF_ACCESS_ID],\n        entry_data[CONF_ACCESS_SECRET],\n        project_type,\n    )\n\n    api.set_dev_channel(\"hass\")\n\n    if project_type == ProjectType.INDUSTY_SOLUTIONS:\n        response = await hass.async_add_executor_job(\n            api.login, entry_data[CONF_USERNAME], entry_data[CONF_PASSWORD]\n        )\n    else:\n        response = await hass.async_add_executor_job(\n            api.login,\n            entry_data[CONF_USERNAME],\n            entry_data[CONF_PASSWORD],\n            entry_data[CONF_COUNTRY_CODE],\n            entry_data[CONF_APP_TYPE],\n\n        )\n\n    if response.get(\"success\", False) is False:\n        _LOGGER.error(\"Tuya login error response: %s\", response)\n        return False\n\n    tuya_mq = TuyaOpenMQ(api)\n    tuya_mq.start()\n\n    device_manager = TuyaDeviceManager(api, tuya_mq)\n\n    # Get device list\n    home_manager = TuyaHomeManager(api, tuya_mq, device_manager)\n    await hass.async_add_executor_job(home_manager.update_device_cache)\n    hass.data[DOMAIN][entry.entry_id][TUYA_HOME_MANAGER] = home_manager\n\n    listener = DeviceListener(hass, entry)\n    hass.data[DOMAIN][entry.entry_id][TUYA_MQTT_LISTENER] = listener\n    device_manager.add_device_listener(listener)\n    hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER] = device_manager\n\n    # Clean up device entities\n    await cleanup_device_registry(hass, entry)\n\n    _LOGGER.debug(\"init support type->%s\", PLATFORMS)\n\n    hass.config_entries.async_setup_platforms(entry, PLATFORMS)\n\n    return True\n\n\nasync def cleanup_device_registry(hass: HomeAssistant, entry: ConfigEntry) -> None:\n    \"\"\"Remove deleted device registry entry if there are no remaining entities.\"\"\"\n\n    device_registry_object = device_registry.async_get(hass)\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n\n    for dev_id, device_entry in list(device_registry_object.devices.items()):\n        for item in device_entry.identifiers:\n            if DOMAIN == item[0] and item[1] not in device_manager.device_map:\n                device_registry_object.async_remove_device(dev_id)\n                break\n\n\n@callback\ndef async_remove_hass_device(hass: HomeAssistant, device_id: str) -> None:\n    \"\"\"Remove device from hass cache.\"\"\"\n    device_registry_object = device_registry.async_get(hass)\n    for device_entry in list(device_registry_object.devices.values()):\n        if device_id in list(device_entry.identifiers)[0]:\n            device_registry_object.async_remove_device(device_entry.id)\n\n\nasync def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:\n    \"\"\"Unloading the Tuya platforms.\"\"\"\n    _LOGGER.debug(\"integration unload\")\n    unload = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)\n    if unload:\n        device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n        device_manager.mq.stop()\n        device_manager.remove_device_listener(\n            hass.data[DOMAIN][entry.entry_id][TUYA_MQTT_LISTENER]\n        )\n\n        hass.data.pop(DOMAIN)\n\n    return unload\n\nasync def async_setup(hass: HomeAssistant, config):\n    \"\"\"Set up the Tuya integration.\"\"\"\n    tuya_logger.setLevel(_LOGGER.level)\n    conf = config.get(DOMAIN)\n\n    _LOGGER.debug(f\"Tuya async setup conf {conf}\")\n    if conf is not None:\n\n        async def flow_init() -> Any:\n            try:\n                result = await hass.config_entries.flow.async_init(\n                    DOMAIN, context={\"source\": SOURCE_IMPORT}, data=conf\n                )\n            except UnknownFlow as flow:\n                _LOGGER.error(flow.args)\n            except UnknownStep as step:\n                _LOGGER.error(step.args)\n            except ValueError as err:\n                _LOGGER.error(err.args)\n            _LOGGER.info(\"Tuya async setup flow_init\")\n            return result\n\n        hass.async_create_task(flow_init())\n\n    return True\n\n\n\nclass DeviceListener(TuyaDeviceListener):\n    \"\"\"Device Update Listener.\"\"\"\n\n    def __init__(self, hass: HomeAssistant, entry: ConfigEntry) -> None:\n        \"\"\"Init DeviceListener.\"\"\"\n\n        self.hass = hass\n        self.entry = entry\n\n    def update_device(self, device: TuyaDevice) -> None:\n        \"\"\"Update device status.\"\"\"\n        if device.id in self.hass.data[DOMAIN][self.entry.entry_id][TUYA_HA_DEVICES]:\n            _LOGGER.debug(\n                \"_update-->%s;->>%s\",\n                self,\n                device.id,\n            )\n            dispatcher_send(self.hass, f\"{TUYA_HA_SIGNAL_UPDATE_ENTITY}_{device.id}\")\n\n    def add_device(self, device: TuyaDevice) -> None:\n        \"\"\"Add device added listener.\"\"\"\n        device_add = False\n\n        if device.category in itertools.chain(\n            *self.hass.data[DOMAIN][self.entry.entry_id][TUYA_HA_TUYA_MAP].values()\n        ):\n            ha_tuya_map = self.hass.data[DOMAIN][self.entry.entry_id][TUYA_HA_TUYA_MAP]\n            self.hass.add_job(async_remove_hass_device, self.hass, device.id)\n\n            for domain, tuya_list in ha_tuya_map.items():\n                if device.category in tuya_list:\n                    device_add = True\n                    _LOGGER.debug(\n                        \"Add device category->%s; domain-> %s\",\n                        device.category,\n                        domain,\n                    )\n                    self.hass.data[DOMAIN][self.entry.entry_id][TUYA_HA_DEVICES].add(\n                        device.id\n                    )\n                    dispatcher_send(\n                        self.hass, TUYA_DISCOVERY_NEW.format(domain), [device.id]\n                    )\n\n        if device_add:\n            device_manager = self.hass.data[DOMAIN][self.entry.entry_id][\n                TUYA_DEVICE_MANAGER\n            ]\n            device_manager.mq.stop()\n            tuya_mq = TuyaOpenMQ(device_manager.api)\n            tuya_mq.start()\n\n            device_manager.mq = tuya_mq\n            tuya_mq.add_message_listener(device_manager.on_message)\n\n    def remove_device(self, device_id: str) -> None:\n        \"\"\"Add device removed listener.\"\"\"\n        _LOGGER.debug(\"tuya remove device:%s\", device_id)\n        self.hass.add_job(async_remove_hass_device, self.hass, device_id)\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/aes_cbc.py",
    "content": "\"\"\"AES-CBC encryption and decryption for account info.\"\"\"\n\nimport base64 as b64\nimport json\nimport random\nfrom binascii import a2b_hex, b2a_hex\n\nfrom Crypto.Cipher import AES\n\nAES_ACCOUNT_KEY = \"o0o0o0\"\nXOR_KEY = \"00oo00\"\nKEY_KEY = \"oo00oo\"\n\n\nclass AesCBC:\n\n    # random_16\n    def random_16(self):\n        str = \"\"\n        return str.join(\n            random.choice(\"abcdefghijklmnopqrstuvwxyz!@#$%^&*1234567890\")\n            for i in range(16)\n        )\n\n    # add_to_16\n    def add_to_16(self, text):\n        if len(text.encode(\"utf-8\")) % 16:\n            add = 16 - (len(text.encode(\"utf-8\")) % 16)\n        else:\n            add = 0\n        text = text + (\"\\0\" * add)\n        return text.encode(\"utf-8\")\n\n    # cbc_encryption\n    def cbc_encrypt(self, key, iv, text):\n        key = key.encode(\"utf-8\")\n        mode = AES.MODE_CBC\n        iv = bytes(iv, encoding=\"utf8\")\n        text = self.add_to_16(text)\n        cryptos = AES.new(key, mode, iv)\n        cipher_text = cryptos.encrypt(text)\n        return str(b2a_hex(cipher_text), encoding=\"utf-8\")\n\n    # cbc_decryption\n    def cbc_decrypt(self, key, iv, text):\n        key = key.encode(\"utf-8\")\n        iv = bytes(iv, encoding=\"utf8\")\n        mode = AES.MODE_CBC\n        cryptos = AES.new(key, mode, iv)\n        plain_text = cryptos.decrypt(a2b_hex(text))\n        return bytes.decode(plain_text).rstrip(\"\\0\")\n\n    # xor_encrypt\n    def xor_encrypt(self, data, key):\n        lkey = len(key)\n        secret = []\n        num = 0\n        for each in data:\n            if num >= lkey:\n                num = num % lkey\n            secret.append(chr(ord(each) ^ ord(key[num])))\n            num += 1\n        return b64.b64encode(\"\".join(secret).encode()).decode()\n\n    # xor_decrypt\n    def xor_decrypt(self, secret, key):\n        tips = b64.b64decode(secret.encode()).decode()\n        lkey = len(key)\n        secret = []\n        num = 0\n        for each in tips:\n            if num >= lkey:\n                num = num % lkey\n            secret.append(chr(ord(each) ^ ord(key[num])))\n            num += 1\n        return \"\".join(secret)\n\n    # json to dict\n    def json_to_dict(self, json_str):\n        return json.loads(json_str)\n\n    # confuse str\n    def b64_encrypt(self, text):\n        return b64.b64encode(text.encode()).decode()\n\n    # unconfuse str\n    def b64_decrypt(self, text):\n        return b64.b64decode(text).decode()\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/alarm_control_panel.py",
    "content": "\"\"\"Support for Tuya Alarm Control.\"\"\"\n\nimport logging\nfrom typing import Callable\n\nfrom homeassistant.components.alarm_control_panel import DOMAIN as DEVICE_DOMAIN\nfrom homeassistant.components.alarm_control_panel import (\n    SUPPORT_ALARM_TRIGGER,\n    AlarmControlPanelEntity,\n)\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.const import STATE_ALARM_ARMING, STATE_ALARM_TRIGGERED\nfrom homeassistant.core import HomeAssistant, callback\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\nfrom homeassistant.helpers.entity_platform import AddEntitiesCallback\nfrom homeassistant.helpers.entity import Entity\nfrom tuya_iot import TuyaDevice, TuyaDeviceManager\n\nfrom .base import TuyaHaEntity\nfrom .const import (\n    DOMAIN,\n    TUYA_DEVICE_MANAGER,\n    TUYA_DISCOVERY_NEW,\n    TUYA_HA_DEVICES,\n    TUYA_HA_TUYA_MAP,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\nTUYA_SUPPORT_TYPE = [\n    \"ywbj\",  # Smoke Detector\n    \"rqbj\",  # Gas Detector\n    \"pir\",  # PIR Detector\n]\n\n# Smoke Detector\n# https://developer.tuya.com/en/docs/iot/s?id=K9gf48r5i2iiy\n\nDPCODE_SMOKE_SENSOR_STATE = \"smoke_sensor_state\"\nDPCODE_GAS_SENSOR_STATE = \"gas_sensor_state\"\nDPCODE_PIR = \"pir\"\n\n\nasync def async_setup_entry(\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback\n) -> None:\n    \"\"\"Set up tuya alarm dynamically through tuya discovery.\"\"\"\n    _LOGGER.debug(\"alarm init\")\n\n    hass.data[DOMAIN][entry.entry_id][TUYA_HA_TUYA_MAP][\n         DEVICE_DOMAIN\n    ] = TUYA_SUPPORT_TYPE\n\n    @callback\n    def async_discover_device(dev_ids):\n        \"\"\"Discover and add a discovered tuya sensor.\"\"\"\n        _LOGGER.debug(\"alarm add->\", dev_ids)\n        if not dev_ids:\n            return\n        entities = entities = _setup_entities(hass, entry, dev_ids)\n        for entity in entities:\n            hass.data[DOMAIN][entry.entry_id][TUYA_HA_DEVICES].add(entity.unique_id)\n        async_add_entities(entities)\n    entry.async_on_unload(\n        async_dispatcher_connect(\n            hass, TUYA_DISCOVERY_NEW.format(DEVICE_DOMAIN), async_discover_device\n        )\n    )\n\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    device_ids = []\n    for (device_id, device) in device_manager.device_map.items():\n        if device.category in TUYA_SUPPORT_TYPE:\n            device_ids.append(device_id)\n    async_discover_device(device_ids)\n\n\ndef _setup_entities(\n    hass: HomeAssistant, entry: ConfigEntry, device_ids: list[str]\n) -> list[Entity]:\n    \"\"\"Set up Tuya Switch device.\"\"\"\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    entities: list[Entity] = []\n    for device_id in device_ids:\n        device = device_manager.device_map[device_id]\n        if device is None:\n            continue\n\n        if DPCODE_SMOKE_SENSOR_STATE in device.status:\n            entities.append(\n                TuyaHaAlarm(\n                    device,\n                    device_manager,\n                    (\n                        lambda d: STATE_ALARM_TRIGGERED\n                        if d.status.get(DPCODE_SMOKE_SENSOR_STATE, 1) == \"1\"\n                        else STATE_ALARM_ARMING\n                    ),\n                )\n            )\n        if DPCODE_GAS_SENSOR_STATE in device.status:\n            entities.append(\n                TuyaHaAlarm(\n                    device,\n                    device_manager,\n                    (\n                        lambda d: STATE_ALARM_TRIGGERED\n                        if d.status.get(DPCODE_GAS_SENSOR_STATE, 1) == \"1\"\n                        else STATE_ALARM_ARMING\n                    ),\n                )\n            )\n        if DPCODE_PIR in device.stastus:\n            entities.append(\n                TuyaHaAlarm(\n                    device,\n                    device_manager,\n                    (\n                        lambda d: STATE_ALARM_TRIGGERED\n                        if d.status.get(DPCODE_GAS_SENSOR_STATE, \"none\") == \"pir\"\n                        else STATE_ALARM_ARMING\n                    ),\n                )\n            )\n\n    return entities\n\n\nclass TuyaHaAlarm(TuyaHaEntity, AlarmControlPanelEntity):\n    \"\"\"Tuya Alarm Device.\"\"\"\n\n    def __init__(self, device: TuyaDevice, device_manager: TuyaDeviceManager, sensor_is_on: Callable[..., str]) -> None:\n        \"\"\"Init TuyaHaAlarm.\"\"\"\n        super().__init__(device, device_manager)\n        self._is_on = sensor_is_on\n\n    @property\n    def state(self):\n        \"\"\"Return is alarm on.\"\"\"\n        return self._is_on(self.tuya_device)\n\n    @property\n    def supported_features(self) -> int:\n        \"\"\"Return the list of supported features.\"\"\"\n        return SUPPORT_ALARM_TRIGGER\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/base.py",
    "content": "\"\"\"Tuya Home Assistant Base Device Model.\"\"\"\nfrom __future__ import annotations\n\nfrom typing import Any\n\nfrom tuya_iot import TuyaDevice, TuyaDeviceManager\n\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\nfrom homeassistant.helpers.entity import Entity\n\nfrom .const import DOMAIN, TUYA_HA_SIGNAL_UPDATE_ENTITY\n\n\nclass TuyaHaEntity(Entity):\n    \"\"\"Tuya base device.\"\"\"\n\n    def __init__(self, device: TuyaDevice, device_manager: TuyaDeviceManager) -> None:\n        \"\"\"Init TuyaHaEntity.\"\"\"\n        super().__init__()\n\n        self.tuya_device = device\n        self.tuya_device_manager = device_manager\n\n    @staticmethod\n    def remap(old_value, old_min, old_max, new_min, new_max):\n        \"\"\"Remap old_value to new_value.\"\"\"\n        new_value = ((old_value - old_min) / (old_max - old_min)) * (\n            new_max - new_min\n        ) + new_min\n        return new_value\n\n    @property\n    def should_poll(self) -> bool:\n        \"\"\"Hass should not poll.\"\"\"\n        return False\n\n    @property\n    def unique_id(self) -> str | None:\n        \"\"\"Return a unique ID.\"\"\"\n        return f\"ty{self.tuya_device.id}\"\n\n    @property\n    def name(self) -> str | None:\n        \"\"\"Return Tuya device name.\"\"\"\n        return self.tuya_device.name\n\n    @property\n    def device_info(self):\n        \"\"\"Return a device description for device registry.\"\"\"\n        _device_info = {\n            \"identifiers\": {(DOMAIN, f\"{self.tuya_device.id}\")},\n            \"manufacturer\": \"tuya\",\n            \"name\": self.tuya_device.name,\n            \"model\": self.tuya_device.product_name,\n        }\n        return _device_info\n\n    @property\n    def available(self) -> bool:\n        \"\"\"Return if the device is available.\"\"\"\n        return self.tuya_device.online\n\n    async def async_added_to_hass(self):\n        \"\"\"Call when entity is added to hass.\"\"\"\n        self.async_on_remove(\n            async_dispatcher_connect(\n                self.hass,\n                f\"{TUYA_HA_SIGNAL_UPDATE_ENTITY}_{self.tuya_device.id}\",\n                self.async_write_ha_state,\n            )\n        )\n\n    def _send_command(self, commands: list[dict[str, Any]]) -> None:\n        \"\"\"Send command to the device.\"\"\"\n        self.tuya_device_manager.send_commands(self.tuya_device.id, commands)\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/binary_sensor.py",
    "content": "\"\"\"Support for Tuya Binary Sensor.\"\"\"\nfrom __future__ import annotations\n\nimport json\nimport logging\nfrom threading import Timer\nfrom typing import Callable\n\nfrom homeassistant.components.binary_sensor import (\n    DEVICE_CLASS_BATTERY,\n    DEVICE_CLASS_DOOR,\n    DEVICE_CLASS_GARAGE_DOOR,\n    DEVICE_CLASS_GAS,\n    DEVICE_CLASS_MOISTURE,\n    DEVICE_CLASS_MOTION,\n    DEVICE_CLASS_PROBLEM,\n    DEVICE_CLASS_SMOKE,\n)\nfrom homeassistant.components.binary_sensor import DOMAIN as DEVICE_DOMAIN\nfrom homeassistant.components.binary_sensor import BinarySensorEntity\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.core import HomeAssistant, callback\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\nfrom homeassistant.helpers.entity_platform import AddEntitiesCallback\nfrom homeassistant.helpers.entity import Entity\nfrom tuya_iot import TuyaDevice, TuyaDeviceManager\n\nfrom .base import TuyaHaEntity\nfrom .const import (\n    DOMAIN,\n    TUYA_DEVICE_MANAGER,\n    TUYA_DISCOVERY_NEW,\n    TUYA_HA_DEVICES,\n    TUYA_HA_TUYA_MAP,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\nTUYA_SUPPORT_TYPE = [\n    \"mcs\",  # Door Window Sensor\n    \"ywbj\",  # Smoke Detector\n    \"rqbj\",  # Gas Detector\n    \"pir\",  # PIR Detector\n    \"sj\",  # Water Detector\n    \"sos\",  # Emergency Button\n    \"hps\",  # Human Presence Sensor\n    \"ms\",  # Residential Lock\n    \"ckmkzq\",  # Garage Door Opener\n]\n\n# Door Window Sensor\n# https://developer.tuya.com/en/docs/iot/s?id=K9gf48hm02l8m\n\nDPCODE_SWITCH = \"switch\"\n\n\nDPCODE_BATTERY_STATE = \"battery_state\"\n\nDPCODE_DOORCONTACT_STATE = \"doorcontact_state\"\nDPCODE_SMOKE_SENSOR_STATE = \"smoke_sensor_state\"\nDPCODE_SMOKE_SENSOR_STATUS = \"smoke_sensor_status\"\nDPCODE_GAS_SENSOR_STATE = \"gas_sensor_state\"\nDPCODE_PIR = \"pir\"\nDPCODE_WATER_SENSOR_STATE = \"watersensor_state\"\nDPCODE_SOS_STATE = \"sos_state\"\nDPCODE_PRESENCE_STATE = \"presence_state\"\nDPCODE_TEMPER_ALRAM = \"temper_alarm\"\nDPCODE_DOORLOCK_STATE = \"closed_opened\"\n\n\nasync def async_setup_entry(\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback\n) -> None:\n    \"\"\"Set up tuya binary sensors dynamically through tuya discovery.\"\"\"\n    _LOGGER.debug(\"binary sensor init\")\n\n    hass.data[DOMAIN][entry.entry_id][TUYA_HA_TUYA_MAP][\n        DEVICE_DOMAIN\n    ] = TUYA_SUPPORT_TYPE\n\n    @callback\n    def async_discover_device(dev_ids):\n        \"\"\"Discover and add a discovered tuya sensor.\"\"\"\n        _LOGGER.debug(f\"binary sensor add->{dev_ids}\")\n        if not dev_ids:\n            return\n        entities = _setup_entities(hass, entry, dev_ids)\n        for entity in entities:\n            hass.data[DOMAIN][entry.entry_id][TUYA_HA_DEVICES].add(entity._attr_unique_id)\n        async_add_entities(entities)\n\n    entry.async_on_unload(\n        async_dispatcher_connect(\n            hass, TUYA_DISCOVERY_NEW.format(DEVICE_DOMAIN), async_discover_device\n        )\n    )\n\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    device_ids = []\n    for (device_id, device) in device_manager.device_map.items():\n        if device.category in TUYA_SUPPORT_TYPE:\n            device_ids.append(device_id)\n    async_discover_device(device_ids)\n\n\ndef _setup_entities(\n    hass: HomeAssistant, entry: ConfigEntry, device_ids: list[str]\n) -> list[Entity]:\n    \"\"\"Set up Tuya Switch device.\"\"\"\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    entities: list[Entity] = []\n    for device_id in device_ids:\n        device = device_manager.device_map[device_id]\n        if device is None:\n            continue\n\n        if DPCODE_DOORLOCK_STATE in device.status:\n            entities.append(\n                TuyaHaBSensor(\n                    device,\n                    device_manager,\n                    DEVICE_CLASS_DOOR,\n                    DPCODE_DOORLOCK_STATE,\n                    (lambda d: d.status.get(DPCODE_DOORLOCK_STATE, \"none\") != \"closed\"),\n                )\n            )\n        if DPCODE_DOORCONTACT_STATE in device.status:\n            if device.category == \"ckmkzq\":\n                device_class_d = DEVICE_CLASS_GARAGE_DOOR\n            else:\n                device_class_d = DEVICE_CLASS_DOOR\n            entities.append(\n                TuyaHaBSensor(\n                    device,\n                    device_manager,\n                    device_class_d,\n                    DPCODE_DOORCONTACT_STATE,\n                    (lambda d: d.status.get(DPCODE_DOORCONTACT_STATE, False)),\n                )\n            )\n        if DPCODE_SWITCH in device.status:\n            entities.append(\n                TuyaHaBSensor(\n                    device,\n                    device_manager,\n                    DEVICE_CLASS_DOOR,\n                    DPCODE_SWITCH,\n                    (lambda d: d.status.get(DPCODE_SWITCH, False)),\n                )\n            )\n        if DPCODE_SMOKE_SENSOR_STATE in device.status:\n            entities.append(\n                TuyaHaBSensor(\n                    device,\n                    device_manager,\n                    DEVICE_CLASS_SMOKE,\n                    DPCODE_SMOKE_SENSOR_STATE,\n                    (lambda d: d.status.get(DPCODE_SMOKE_SENSOR_STATE, 1) == \"1\"),\n                )\n            )\n        if DPCODE_SMOKE_SENSOR_STATUS in device.status:\n            entities.append(\n                TuyaHaBSensor(\n                    device,\n                    device_manager,\n                    DEVICE_CLASS_SMOKE,\n                    DPCODE_SMOKE_SENSOR_STATUS,\n                    (\n                        lambda d: d.status.get(DPCODE_SMOKE_SENSOR_STATUS, \"normal\")\n                        == \"alarm\"\n                    ),\n                )\n            )\n        if DPCODE_BATTERY_STATE in device.status:\n            entities.append(\n                TuyaHaBSensor(\n                    device,\n                    device_manager,\n                    DEVICE_CLASS_BATTERY,\n                    DPCODE_BATTERY_STATE,\n                    (lambda d: d.status.get(DPCODE_BATTERY_STATE, \"normal\") == \"low\"),\n                )\n            )\n        if DPCODE_TEMPER_ALRAM in device.status:\n            entities.append(\n                TuyaHaBSensor(\n                    device,\n                    device_manager,\n                    DEVICE_CLASS_MOTION,\n                    DPCODE_TEMPER_ALRAM,\n                    (lambda d: d.status.get(DPCODE_TEMPER_ALRAM, False)),\n                )\n            )\n        if DPCODE_GAS_SENSOR_STATE in device.status:\n            entities.append(\n                TuyaHaBSensor(\n                    device,\n                    device_manager,\n                    DEVICE_CLASS_GAS,\n                    DPCODE_GAS_SENSOR_STATE,\n                    (lambda d: d.status.get(DPCODE_GAS_SENSOR_STATE, 1) == \"1\"),\n                )\n            )\n        if DPCODE_PIR in device.status:\n            entities.append(\n                TuyaHaBSensor(\n                    device,\n                    device_manager,\n                    DEVICE_CLASS_MOTION,\n                    DPCODE_PIR,\n                    (lambda d: d.status.get(DPCODE_PIR, \"none\") == \"pir\"),\n                )\n            )\n        if DPCODE_WATER_SENSOR_STATE in device.status:\n            entities.append(\n                TuyaHaBSensor(\n                    device,\n                    device_manager,\n                    DEVICE_CLASS_MOISTURE,\n                    DPCODE_WATER_SENSOR_STATE,\n                    (\n                        lambda d: d.status.get(DPCODE_WATER_SENSOR_STATE, \"normal\")\n                        == \"alarm\"\n                    ),\n                )\n            )\n        if DPCODE_SOS_STATE in device.status:\n            entities.append(\n                TuyaHaBSensor(\n                    device,\n                    device_manager,\n                    DEVICE_CLASS_PROBLEM,\n                    DPCODE_SOS_STATE,\n                    (lambda d: d.status.get(DPCODE_SOS_STATE, False)),\n                )\n            )\n        if DPCODE_PRESENCE_STATE in device.status:\n            entities.append(\n                TuyaHaBSensor(\n                    device,\n                    device_manager,\n                    DEVICE_CLASS_MOTION,\n                    DPCODE_PRESENCE_STATE,\n                    (\n                        lambda d: d.status.get(DPCODE_PRESENCE_STATE, \"none\")\n                        == \"presence\"\n                    ),\n                )\n            )\n\n    return entities\n\n\nclass TuyaHaBSensor(TuyaHaEntity, BinarySensorEntity):\n    \"\"\"Tuya Binary Sensor Device.\"\"\"\n\n    def __init__(\n        self,\n        device: TuyaDevice,\n        device_manager: TuyaDeviceManager,\n        sensor_type: str,\n        sensor_code: str,\n        sensor_is_on: Callable[..., bool],\n    ) -> None:\n        \"\"\"Init TuyaHaBSensor.\"\"\"\n        super().__init__(device, device_manager)\n        self._type = sensor_type\n        self._code = sensor_code\n        self._is_on = sensor_is_on\n        self._attr_unique_id = f\"{super().unique_id}{self._code}\"\n        self._attr_name = f\"{self.tuya_device.name}_{self._code}\"\n        self._attr_device_class = self._type\n        self._attr_available = True\n\n    @property\n    def is_on(self):\n        \"\"\"Return true if the binary sensor is on.\"\"\"\n        return self._is_on(self.tuya_device)\n\n    @property\n    def unique_id(self) -> str | None:\n        \"\"\"Return a unique ID.\"\"\"\n        return self._attr_unique_id\n\n    def reset_pir(self):\n        self.tuya_device.status[DPCODE_PIR] = \"none\"\n        self.schedule_update_ha_state()\n\n    def schedule_update_ha_state(self, force_refresh: bool = False) -> None:\n\n        if self._code == DPCODE_PIR:\n            pir_range = json.loads(\n                self.tuya_device.status_range.get(DPCODE_PIR, {}).values\n            ).get(\"range\")\n            if len(pir_range) == 1 and self.tuya_device.status[DPCODE_PIR] == \"pir\":\n                timer = Timer(10, lambda: self.reset_pir())\n                timer.start()\n\n        super().schedule_update_ha_state(force_refresh)\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/climate.py",
    "content": "\"\"\"Support for Tuya Climate.\"\"\"\n\nfrom __future__ import annotations\n\nimport json\nimport logging\nfrom typing import Any\n\nfrom tuya_iot import TuyaDevice, TuyaDeviceManager\n\nfrom homeassistant.components.climate import DOMAIN as DEVICE_DOMAIN, ClimateEntity\nfrom homeassistant.components.climate.const import (\n    HVAC_MODE_AUTO,\n    HVAC_MODE_COOL,\n    HVAC_MODE_DRY,\n    HVAC_MODE_FAN_ONLY,\n    HVAC_MODE_HEAT,\n    HVAC_MODE_OFF,\n    SUPPORT_FAN_MODE,\n    SUPPORT_SWING_MODE,\n    SUPPORT_TARGET_HUMIDITY,\n    SUPPORT_TARGET_TEMPERATURE,\n)\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.const import TEMP_CELSIUS, TEMP_FAHRENHEIT\nfrom homeassistant.core import HomeAssistant, callback\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\nfrom homeassistant.helpers.entity import Entity\nfrom homeassistant.helpers.entity_platform import AddEntitiesCallback\n\nfrom .base import TuyaHaEntity\nfrom .const import (\n    DOMAIN,\n    TUYA_DEVICE_MANAGER,\n    TUYA_DISCOVERY_NEW,\n    TUYA_HA_DEVICES,\n    TUYA_HA_TUYA_MAP,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\n\n# Air Conditioner\n# https://developer.tuya.com/en/docs/iot/f?id=K9gf46qujdmwb\nDPCODE_SWITCH = \"switch\"\nDPCODE_TEMP_SET = \"temp_set\"\nDPCODE_TEMP_SET_F = \"temp_set_f\"\nDPCODE_MODE = \"mode\"\nDPCODE_HUMIDITY_SET = \"humidity_set\"\nDPCODE_FAN_SPEED_ENUM = \"fan_speed_enum\"\n\n# Temperature unit\nDPCODE_TEMP_UNIT_CONVERT = \"temp_unit_convert\"\nDPCODE_C_F = \"c_f\"\n\n# swing flap switch\nDPCODE_SWITCH_HORIZONTAL = \"switch_horizontal\"\nDPCODE_SWITCH_VERTICAL = \"switch_vertical\"\n\n# status\nDPCODE_TEMP_CURRENT = \"temp_current\"\nDPCODE_TEMP_CURRENT_F = \"temp_current_f\"\nDPCODE_HUMIDITY_CURRENT = \"humidity_current\"\n\nSWING_OFF = \"swing_off\"\nSWING_VERTICAL = \"swing_vertical\"\nSWING_HORIZONTAL = \"swing_horizontal\"\nSWING_BOTH = \"swing_both\"\n\nDEFAULT_MIN_TEMP = 7\nDEFAULT_MAX_TEMP = 35\n\nTUYA_HVAC_TO_HA = {\n    \"hot\": HVAC_MODE_HEAT,\n    \"cold\": HVAC_MODE_COOL,\n    \"wet\": HVAC_MODE_DRY,\n    \"wind\": HVAC_MODE_FAN_ONLY,\n    \"auto\": HVAC_MODE_AUTO,\n}\n\nTUYA_SUPPORT_TYPE = {\n    \"kt\",  # Air conditioner\n    \"qn\",  # Heater\n    \"wk\",  # Thermostat\n}\n\n\nasync def async_setup_entry(\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback\n) -> None:\n    \"\"\"Set up tuya climate dynamically through tuya discovery.\"\"\"\n    _LOGGER.debug(\"climate init\")\n\n    hass.data[DOMAIN][entry.entry_id][TUYA_HA_TUYA_MAP][\n        DEVICE_DOMAIN\n    ] = TUYA_SUPPORT_TYPE\n\n    @callback\n    def async_discover_device(dev_ids: list[str]) -> None:\n        \"\"\"Discover and add a discovered tuya climate.\"\"\"\n        _LOGGER.debug(\"climate add-> %s\", dev_ids)\n        if not dev_ids:\n            return\n        entities = _setup_entities(hass, entry, dev_ids)\n        async_add_entities(entities)\n\n    entry.async_on_unload(\n        async_dispatcher_connect(\n            hass, TUYA_DISCOVERY_NEW.format(DEVICE_DOMAIN), async_discover_device\n        )\n    )\n\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    device_ids = []\n    for (device_id, device) in device_manager.device_map.items():\n        if device.category in TUYA_SUPPORT_TYPE:\n            device_ids.append(device_id)\n    async_discover_device(device_ids)\n\n\ndef _setup_entities(\n    hass: HomeAssistant, entry: ConfigEntry, device_ids: list[str]\n) -> list[Entity]:\n    \"\"\"Set up Tuya Climate.\"\"\"\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    entities: list[Entity] = []\n    for device_id in device_ids:\n        device = device_manager.device_map[device_id]\n        if device is None:\n            continue\n        entities.append(TuyaHaClimate(device, device_manager))\n        hass.data[DOMAIN][entry.entry_id][TUYA_HA_DEVICES].add(device_id)\n    return entities\n\n\nclass TuyaHaClimate(TuyaHaEntity, ClimateEntity):\n    \"\"\"Tuya Switch Device.\"\"\"\n\n    def __init__(self, device: TuyaDevice, device_manager: TuyaDeviceManager) -> None:\n        \"\"\"Init Tuya Ha Climate.\"\"\"\n        super().__init__(device, device_manager)\n        if DPCODE_C_F in self.tuya_device.status:\n            self.dp_temp_unit = DPCODE_C_F\n        else:\n            self.dp_temp_unit = DPCODE_TEMP_UNIT_CONVERT\n\n    def get_temp_set_scale(self) -> int | None:\n        \"\"\"Get temperature set scale.\"\"\"\n        dp_temp_set = DPCODE_TEMP_SET if self.is_celsius() else DPCODE_TEMP_SET_F\n        temp_set_value_range_item = self.tuya_device.status_range.get(dp_temp_set)\n        if not temp_set_value_range_item:\n            return None\n\n        temp_set_value_range = json.loads(temp_set_value_range_item.values)\n        return temp_set_value_range.get(\"scale\")\n\n    def get_temp_current_scale(self) -> int | None:\n        \"\"\"Get temperature current scale.\"\"\"\n        dp_temp_current = (\n            DPCODE_TEMP_CURRENT if self.is_celsius() else DPCODE_TEMP_CURRENT_F\n        )\n        temp_current_value_range_item = self.tuya_device.status_range.get(\n            dp_temp_current\n        )\n        if not temp_current_value_range_item:\n            return None\n\n        temp_current_value_range = json.loads(temp_current_value_range_item.values)\n        return temp_current_value_range.get(\"scale\")\n\n    # Functions\n\n    def set_hvac_mode(self, hvac_mode: str) -> None:\n        \"\"\"Set new target hvac mode.\"\"\"\n        commands = []\n        if hvac_mode == HVAC_MODE_OFF:\n            commands.append({\"code\": DPCODE_SWITCH, \"value\": False})\n        else:\n            commands.append({\"code\": DPCODE_SWITCH, \"value\": True})\n\n        for tuya_mode, ha_mode in TUYA_HVAC_TO_HA.items():\n            if ha_mode == hvac_mode:\n                commands.append({\"code\": DPCODE_MODE, \"value\": tuya_mode})\n                break\n\n        self._send_command(commands)\n\n    def set_fan_mode(self, fan_mode: str) -> None:\n        \"\"\"Set new target fan mode.\"\"\"\n        self._send_command([{\"code\": DPCODE_FAN_SPEED_ENUM, \"value\": fan_mode}])\n\n    def set_humidity(self, humidity: float) -> None:\n        \"\"\"Set new target humidity.\"\"\"\n        self._send_command([{\"code\": DPCODE_HUMIDITY_SET, \"value\": int(humidity)}])\n\n    def set_swing_mode(self, swing_mode: str) -> None:\n        \"\"\"Set new target swing operation.\"\"\"\n        if swing_mode == SWING_BOTH:\n            commands = [\n                {\"code\": DPCODE_SWITCH_VERTICAL, \"value\": True},\n                {\"code\": DPCODE_SWITCH_HORIZONTAL, \"value\": True},\n            ]\n        elif swing_mode == SWING_HORIZONTAL:\n            commands = [\n                {\"code\": DPCODE_SWITCH_VERTICAL, \"value\": False},\n                {\"code\": DPCODE_SWITCH_HORIZONTAL, \"value\": True},\n            ]\n        elif swing_mode == SWING_VERTICAL:\n            commands = [\n                {\"code\": DPCODE_SWITCH_VERTICAL, \"value\": True},\n                {\"code\": DPCODE_SWITCH_HORIZONTAL, \"value\": False},\n            ]\n        else:\n            commands = [\n                {\"code\": DPCODE_SWITCH_VERTICAL, \"value\": False},\n                {\"code\": DPCODE_SWITCH_HORIZONTAL, \"value\": False},\n            ]\n\n        self._send_command(commands)\n\n    def set_temperature(self, **kwargs: Any) -> None:\n        \"\"\"Set new target temperature.\"\"\"\n        _LOGGER.debug(\"climate temp-> %s\", kwargs)\n        code = DPCODE_TEMP_SET if self.is_celsius() else DPCODE_TEMP_SET_F\n        temp_set_scale = self.get_temp_set_scale()\n        if not temp_set_scale:\n            return\n\n        self._send_command(\n            [\n                {\n                    \"code\": code,\n                    \"value\": int(kwargs[\"temperature\"] * (10 ** temp_set_scale)),\n                }\n            ]\n        )\n\n    def is_celsius(self) -> bool:\n        \"\"\"Return True if device reports in Celsius.\"\"\"\n        if (\n            self.dp_temp_unit in self.tuya_device.status\n            and self.tuya_device.status.get(self.dp_temp_unit).lower() == \"c\"\n        ):\n            return True\n        if (\n            DPCODE_TEMP_SET in self.tuya_device.status\n            or DPCODE_TEMP_CURRENT in self.tuya_device.status\n        ):\n            return True\n        return False\n\n    @property\n    def temperature_unit(self) -> str:\n        \"\"\"Return true if fan is on.\"\"\"\n        if self.is_celsius():\n            return TEMP_CELSIUS\n        return TEMP_FAHRENHEIT\n\n    @property\n    def current_temperature(self) -> float | None:\n        \"\"\"Return the current temperature.\"\"\"\n        if (\n            DPCODE_TEMP_CURRENT not in self.tuya_device.status\n            and DPCODE_TEMP_CURRENT_F not in self.tuya_device.status\n        ):\n            return None\n\n        temp_current_scale = self.get_temp_current_scale()\n        if not temp_current_scale:\n            return None\n\n        if self.is_celsius():\n            temperature = self.tuya_device.status.get(DPCODE_TEMP_CURRENT)\n            if not temperature:\n                return None\n            return temperature * 1.0 / (10 ** temp_current_scale)\n\n        temperature = self.tuya_device.status.get(DPCODE_TEMP_CURRENT_F)\n        if not temperature:\n            return None\n        return temperature * 1.0 / (10 ** temp_current_scale)\n\n    @property\n    def current_humidity(self) -> int:\n        \"\"\"Return the current humidity.\"\"\"\n        return int(self.tuya_device.status.get(DPCODE_HUMIDITY_CURRENT, 0))\n\n    @property\n    def target_temperature(self) -> float | None:\n        \"\"\"Return the temperature currently set to be reached.\"\"\"\n        temp_set_scale = self.get_temp_set_scale()\n        if temp_set_scale is None:\n            return None\n\n        dpcode_temp_set = self.tuya_device.status.get(DPCODE_TEMP_SET)\n        if dpcode_temp_set is None:\n            return None\n\n        return dpcode_temp_set * 1.0 / (10 ** temp_set_scale)\n\n    @property\n    def max_temp(self) -> float:\n        \"\"\"Return the maximum temperature.\"\"\"\n        scale = self.get_temp_set_scale()\n        if scale is None:\n            return DEFAULT_MAX_TEMP\n\n        if self.is_celsius():\n            if DPCODE_TEMP_SET not in self.tuya_device.function:\n                return DEFAULT_MAX_TEMP\n\n            function_item = self.tuya_device.function.get(DPCODE_TEMP_SET)\n            if function_item is None:\n                return DEFAULT_MAX_TEMP\n\n            temp_value = json.loads(function_item.values)\n\n            temp_max = temp_value.get(\"max\")\n            if temp_max is None:\n                return DEFAULT_MAX_TEMP\n            return temp_max * 1.0 / (10 ** scale)\n        if DPCODE_TEMP_SET_F not in self.tuya_device.function:\n            return DEFAULT_MAX_TEMP\n\n        function_item_f = self.tuya_device.function.get(DPCODE_TEMP_SET_F)\n        if function_item_f is None:\n            return DEFAULT_MAX_TEMP\n\n        temp_value_f = json.loads(function_item_f.values)\n\n        temp_max_f = temp_value_f.get(\"max\")\n        if temp_max_f is None:\n            return DEFAULT_MAX_TEMP\n        return temp_max_f * 1.0 / (10 ** scale)\n\n    @property\n    def min_temp(self) -> float:\n        \"\"\"Return the minimum temperature.\"\"\"\n        temp_set_scal = self.get_temp_set_scale()\n        if temp_set_scal is None:\n            return DEFAULT_MIN_TEMP\n\n        if self.is_celsius():\n            if DPCODE_TEMP_SET not in self.tuya_device.function:\n                return DEFAULT_MIN_TEMP\n\n            function_temp_item = self.tuya_device.function.get(DPCODE_TEMP_SET)\n            if function_temp_item is None:\n                return DEFAULT_MIN_TEMP\n            temp_value = json.loads(function_temp_item.values)\n            temp_min = temp_value.get(\"min\")\n            if temp_min is None:\n                return DEFAULT_MIN_TEMP\n            return temp_min * 1.0 / (10 ** temp_set_scal)\n\n        if DPCODE_TEMP_SET_F not in self.tuya_device.function:\n            return DEFAULT_MIN_TEMP\n\n        temp_value_temp_f = self.tuya_device.function.get(DPCODE_TEMP_SET_F)\n        if temp_value_temp_f is None:\n            return DEFAULT_MIN_TEMP\n        temp_value_f = json.loads(temp_value_temp_f.values)\n\n        temp_min_f = temp_value_f.get(\"min\")\n        if temp_min_f is None:\n            return DEFAULT_MIN_TEMP\n\n        return temp_min_f * 1.0 / (10 ** temp_set_scal)\n\n    @property\n    def target_temperature_step(self) -> float | None:\n        \"\"\"Return target temperature setp.\"\"\"\n        if (\n            DPCODE_TEMP_SET not in self.tuya_device.status_range\n            and DPCODE_TEMP_SET_F not in self.tuya_device.status_range\n        ):\n            return 1.0\n        temp_set_value_range = json.loads(\n            self.tuya_device.status_range.get(\n                DPCODE_TEMP_SET if self.is_celsius() else DPCODE_TEMP_SET_F\n            ).values\n        )\n        step = temp_set_value_range.get(\"step\")\n        if step is None:\n            return None\n\n        temp_set_scale = self.get_temp_set_scale()\n        if temp_set_scale is None:\n            return None\n\n        return step * 1.0 / (10 ** temp_set_scale)\n\n    @property\n    def target_humidity(self) -> int:\n        \"\"\"Return target humidity.\"\"\"\n        return int(self.tuya_device.status.get(DPCODE_HUMIDITY_SET, 0))\n\n    @property\n    def hvac_mode(self) -> str:\n        \"\"\"Return hvac mode.\"\"\"\n        if not self.tuya_device.status.get(DPCODE_SWITCH, False):\n            return HVAC_MODE_OFF\n        if DPCODE_MODE not in self.tuya_device.status:\n            return HVAC_MODE_OFF\n        if self.tuya_device.status.get(DPCODE_MODE) is not None:\n            return TUYA_HVAC_TO_HA[self.tuya_device.status[DPCODE_MODE]]\n        return HVAC_MODE_OFF\n\n    @property\n    def hvac_modes(self) -> list[str]:\n        \"\"\"Return hvac modes for select.\"\"\"\n        if DPCODE_MODE not in self.tuya_device.function:\n            return []\n        modes = json.loads(self.tuya_device.function.get(DPCODE_MODE, {}).values).get(\n            \"range\"\n        )\n\n        hvac_modes = [HVAC_MODE_OFF]\n        for tuya_mode, ha_mode in TUYA_HVAC_TO_HA.items():\n            if tuya_mode in modes:\n                hvac_modes.append(ha_mode)\n\n        return hvac_modes\n\n    @property\n    def fan_mode(self) -> str | None:\n        \"\"\"Return fan mode.\"\"\"\n        return self.tuya_device.status.get(DPCODE_FAN_SPEED_ENUM)\n\n    @property\n    def fan_modes(self) -> list[str]:\n        \"\"\"Return fan modes for select.\"\"\"\n        fan_speed_device_function = self.tuya_device.function.get(DPCODE_FAN_SPEED_ENUM)\n        if not fan_speed_device_function:\n            return []\n        return json.loads(fan_speed_device_function.values).get(\"range\", [])\n\n    @property\n    def swing_mode(self) -> str:\n        \"\"\"Return swing mode.\"\"\"\n        mode = 0\n        if (\n            DPCODE_SWITCH_HORIZONTAL in self.tuya_device.status\n            and self.tuya_device.status.get(DPCODE_SWITCH_HORIZONTAL)\n        ):\n            mode += 1\n        if (\n            DPCODE_SWITCH_VERTICAL in self.tuya_device.status\n            and self.tuya_device.status.get(DPCODE_SWITCH_VERTICAL)\n        ):\n            mode += 2\n\n        if mode == 3:\n            return SWING_BOTH\n        if mode == 2:\n            return SWING_VERTICAL\n        if mode == 1:\n            return SWING_HORIZONTAL\n        return SWING_OFF\n\n    @property\n    def swing_modes(self) -> list[str]:\n        \"\"\"Return swing mode for select.\"\"\"\n        return [SWING_OFF, SWING_HORIZONTAL, SWING_VERTICAL, SWING_BOTH]\n\n    @property\n    def supported_features(self) -> int:\n        \"\"\"Flag supported features.\"\"\"\n        supports = 0\n        if (\n            DPCODE_TEMP_SET in self.tuya_device.status\n            or DPCODE_TEMP_SET_F in self.tuya_device.status\n        ):\n            supports |= SUPPORT_TARGET_TEMPERATURE\n        if DPCODE_FAN_SPEED_ENUM in self.tuya_device.status:\n            supports |= SUPPORT_FAN_MODE\n        if DPCODE_HUMIDITY_SET in self.tuya_device.status:\n            supports |= SUPPORT_TARGET_HUMIDITY\n        if (\n            DPCODE_SWITCH_HORIZONTAL in self.tuya_device.status\n            or DPCODE_SWITCH_VERTICAL in self.tuya_device.status\n        ):\n            supports |= SUPPORT_SWING_MODE\n        return supports\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/config_flow.py",
    "content": "\"\"\"Config flow for Tuya.\"\"\"\n\nimport logging\n\nfrom tuya_iot import ProjectType, TuyaOpenAPI\nimport voluptuous as vol\n\nfrom homeassistant import config_entries\n\nfrom .const import (\n    CONF_ACCESS_ID,\n    CONF_ACCESS_SECRET,\n    CONF_APP_TYPE,\n    CONF_COUNTRY_CODE,\n    CONF_ENDPOINT,\n    CONF_PASSWORD,\n    CONF_PROJECT_TYPE,\n    CONF_USERNAME,\n    DOMAIN,\n    TUYA_APP_TYPES,\n    TUYA_ENDPOINTS,\n    TUYA_PROJECT_TYPE_SMART_HOME,\n    TUYA_PROJECT_TYPES,\n)\n\nRESULT_SINGLE_INSTANCE = \"single_instance_allowed\"\nRESULT_AUTH_FAILED = \"invalid_auth\"\nTUYA_ENDPOINT_BASE = \"https://openapi.tuyacn.com\"\nTUYA_ENDPOINT_OTHER = \"https://openapi.tuyaus.com\"\nCOUNTRY_CODE_CHINA = [\"86\", \"+86\", \"China\"]\n\n_LOGGER = logging.getLogger(__name__)\n\n# Project Type\nDATA_SCHEMA_PROJECT_TYPE = vol.Schema(\n    {\n        vol.Required(CONF_PROJECT_TYPE, default=TUYA_PROJECT_TYPE_SMART_HOME): vol.In(\n            TUYA_PROJECT_TYPES.keys()\n        )\n    }\n)\n\n# INDUSTY_SOLUTIONS Schema\nDATA_SCHEMA_INDUSTRY_SOLUTIONS = vol.Schema(\n    {\n        vol.Required(CONF_ENDPOINT): vol.In(TUYA_ENDPOINTS.keys()),\n        vol.Required(CONF_ACCESS_ID): str,\n        vol.Required(CONF_ACCESS_SECRET): str,\n        vol.Required(CONF_USERNAME): str,\n        vol.Required(CONF_PASSWORD): str,\n    }\n)\n\n# SMART_HOME Schema\nDATA_SCHEMA_SMART_HOME = vol.Schema(\n    {\n        vol.Required(CONF_ACCESS_ID): str,\n        vol.Required(CONF_ACCESS_SECRET): str,\n        vol.Required(CONF_APP_TYPE): vol.In(TUYA_APP_TYPES.keys()),\n        vol.Required(CONF_COUNTRY_CODE): str,\n        vol.Required(CONF_USERNAME): str,\n        vol.Required(CONF_PASSWORD): str,\n    }\n)\n\n\nclass TuyaConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):\n    \"\"\"Tuya Config Flow.\"\"\"\n\n    def __init__(self) -> None:\n        \"\"\"Init tuya config flow.\"\"\"\n        super().__init__()\n        self.conf_project_type = None\n\n    @staticmethod\n    def _try_login(user_input):\n        project_type = ProjectType(user_input[CONF_PROJECT_TYPE])\n        api = TuyaOpenAPI(\n            TUYA_ENDPOINTS[user_input[CONF_ENDPOINT]]\n            if project_type == ProjectType.INDUSTY_SOLUTIONS\n            else \"\",\n            user_input[CONF_ACCESS_ID],\n            user_input[CONF_ACCESS_SECRET],\n            project_type,\n        )\n        api.set_dev_channel(\"hass\")\n\n        if project_type == ProjectType.INDUSTY_SOLUTIONS:\n            response = api.login(user_input[CONF_USERNAME], user_input[CONF_PASSWORD])\n        else:\n            if user_input[CONF_COUNTRY_CODE] in COUNTRY_CODE_CHINA:\n                api.endpoint = TUYA_ENDPOINT_BASE\n            else:\n                api.endpoint = TUYA_ENDPOINT_OTHER\n\n            response = api.login(\n                user_input[CONF_USERNAME],\n                user_input[CONF_PASSWORD],\n                user_input[CONF_COUNTRY_CODE],\n                TUYA_APP_TYPES[user_input[CONF_APP_TYPE]],\n            )\n            if response.get(\"success\", False) and isinstance(\n                api.token_info.platform_url, str\n            ):\n                api.endpoint = api.token_info.platform_url\n                user_input[CONF_ENDPOINT] = api.token_info.platform_url\n\n        return response\n\n    async def async_step_user(self, user_input=None):\n        \"\"\"Step user.\"\"\"\n        if user_input is None:\n            return self.async_show_form(\n                step_id=\"user\", data_schema=DATA_SCHEMA_PROJECT_TYPE\n            )\n\n        self.conf_project_type = user_input[CONF_PROJECT_TYPE]\n\n        return await self.async_step_login()\n\n    async def async_step_login(self, user_input=None):\n        \"\"\"Step login.\"\"\"\n        errors = {}\n        if user_input is not None:\n            assert self.conf_project_type is not None\n            user_input[CONF_PROJECT_TYPE] = TUYA_PROJECT_TYPES[self.conf_project_type]\n\n            response = await self.hass.async_add_executor_job(\n                self._try_login, user_input\n            )\n\n            if response.get(\"success\", False):\n                _LOGGER.debug(\"Login success: %s\", response)\n                return self.async_create_entry(\n                    title=user_input[CONF_USERNAME],\n                    data=user_input,\n                )\n            errors[\"base\"] = RESULT_AUTH_FAILED\n            _LOGGER.error(\"Login failed: %s\", response)\n\n        if (ProjectType(TUYA_PROJECT_TYPES[self.conf_project_type]) == ProjectType.SMART_HOME):\n            return self.async_show_form(\n                step_id=\"login\", data_schema=DATA_SCHEMA_SMART_HOME, errors=errors\n            )\n\n        return self.async_show_form(\n            step_id=\"login\",\n            data_schema=DATA_SCHEMA_INDUSTRY_SOLUTIONS,\n            errors=errors,\n        )\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/const.py",
    "content": "\"\"\"Constants for the Tuya integration.\"\"\"\n\nDOMAIN = \"tuya_v2\"\n\nCONF_PROJECT_TYPE = \"tuya_project_type\"\nCONF_ENDPOINT = \"endpoint\"\nCONF_ACCESS_ID = \"access_id\"\nCONF_ACCESS_SECRET = \"access_secret\"\nCONF_USERNAME = \"username\"\nCONF_PASSWORD = \"password\"\nCONF_COUNTRY_CODE = \"country_code\"\nCONF_APP_TYPE = \"tuya_app_type\"\n\nTUYA_DISCOVERY_NEW = \"tuya_v2_discovery_new_{}\"\nTUYA_DEVICE_MANAGER = \"tuya_device_manager\"\nTUYA_HOME_MANAGER = \"tuya_home_manager\"\nTUYA_MQTT_LISTENER = \"tuya_mqtt_listener\"\nTUYA_HA_TUYA_MAP = \"tuya_ha_tuya_map\"\nTUYA_HA_DEVICES = \"tuya_ha_devices\"\n\nTUYA_HA_SIGNAL_UPDATE_ENTITY = \"tuya_entry_update\"\n\nTUYA_PROJECT_TYPE_INDUSTY_SOLUTIONS = \"Custom Development\"\nTUYA_PROJECT_TYPE_SMART_HOME = \"Smart Home PaaS\"\n\nTUYA_PROJECT_TYPES = {\n    TUYA_PROJECT_TYPE_SMART_HOME: 0,\n    TUYA_PROJECT_TYPE_INDUSTY_SOLUTIONS: 1,\n}\n\nTUYA_ENDPOINTS = {\n    \"America\": \"https://openapi.tuyaus.com\",\n    \"China\": \"https://openapi.tuyacn.com\",\n    \"Europe\": \"https://openapi.tuyaeu.com\",\n    \"India\": \"https://openapi.tuyain.com\",\n    \"Eastern America\": \"https://openapi-ueaz.tuyaus.com\",\n    \"Western Europe\": \"https://openapi-weaz.tuyaeu.com\",\n}\n\nTUYA_APP_TYPES = {\"TuyaSmart\": \"tuyaSmart\", \"Smart Life\": \"smartlife\"}\n\nPLATFORMS = [\n    \"binary_sensor\",\n    \"climate\",\n    \"cover\",\n    \"fan\",\n    \"humidifier\",\n    \"light\",\n    \"number\",\n    \"scene\",\n    \"select\",\n    \"sensor\",\n    \"switch\",\n    \"vacuum\",\n]\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/cover.py",
    "content": "\"\"\"Support for Tuya Cover.\"\"\"\nfrom __future__ import annotations\n\nimport logging\nfrom typing import Any\n\nfrom homeassistant.components.cover import DEVICE_CLASS_CURTAIN\nfrom homeassistant.components.cover import DOMAIN as DEVICE_DOMAIN\nfrom homeassistant.components.cover import (\n    SUPPORT_CLOSE,\n    SUPPORT_OPEN,\n    SUPPORT_SET_POSITION,\n    SUPPORT_STOP,\n    CoverEntity,\n)\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.core import HomeAssistant, callback\nfrom homeassistant.helpers.entity import Entity\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\n\nfrom .base import TuyaHaEntity\nfrom .const import (\n    DOMAIN,\n    TUYA_DEVICE_MANAGER,\n    TUYA_DISCOVERY_NEW,\n    TUYA_HA_DEVICES,\n    TUYA_HA_TUYA_MAP,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\nTUYA_SUPPORT_TYPE = {\"cl\", \"clkg\"}  # Curtain  # Curtain Switch\n\n# Curtain\n# https://developer.tuya.com/en/docs/iot/f?id=K9gf46o5mtfyc\nDPCODE_CONTROL = \"control\"\nDPCODE_PERCENT_CONTROL = \"percent_control\"\nDPCODE_PERCENT_STATE = \"percent_state\"\nDPCODE_SITUATION_SET = \"situation_set\"\n\nATTR_POSITION = \"position\"\n\n\nasync def async_setup_entry(\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities\n) -> None:\n    \"\"\"Set up tuya cover dynamically through tuya discovery.\"\"\"\n    _LOGGER.debug(\"cover init\")\n\n    hass.data[DOMAIN][entry.entry_id][TUYA_HA_TUYA_MAP][\n        DEVICE_DOMAIN\n    ] = TUYA_SUPPORT_TYPE\n\n    @callback\n    def async_discover_device(dev_ids):\n        \"\"\"Discover and add a discovered tuya cover.\"\"\"\n        _LOGGER.debug(f\"cover add-> {dev_ids}\")\n        if not dev_ids:\n            return\n        entities = _setup_entities(hass, entry, dev_ids)\n        async_add_entities(entities)\n\n    entry.async_on_unload(\n        async_dispatcher_connect(\n            hass, TUYA_DISCOVERY_NEW.format(DEVICE_DOMAIN), async_discover_device\n        )\n    )\n\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    device_ids = []\n    for (device_id, device) in device_manager.device_map.items():\n        if device.category in TUYA_SUPPORT_TYPE:\n            device_ids.append(device_id)\n    async_discover_device(device_ids)\n\n\ndef _setup_entities(\n    hass: HomeAssistant, entry: ConfigEntry, device_ids: list[str]\n) -> list[Entity]:\n    \"\"\"Set up Tuya Cover.\"\"\"\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    entities: list[Entity] = []\n    for device_id in device_ids:\n        device = device_manager.device_map[device_id]\n        if device is None:\n            continue\n        entities.append(TuyaHaCover(device, device_manager))\n        hass.data[DOMAIN][entry.entry_id][TUYA_HA_DEVICES].add(device_id)\n    return entities\n\n\nclass TuyaHaCover(TuyaHaEntity, CoverEntity):\n    \"\"\"Tuya Switch Device.\"\"\"\n\n    _attr_device_class = DEVICE_CLASS_CURTAIN\n\n    @property\n    def is_closed(self) -> bool | None:\n        \"\"\"Return is cover is closed.\"\"\"\n        return None\n\n    @property\n    def current_cover_position(self) -> int:\n        \"\"\"Return cover current position.\"\"\"\n        position = self.tuya_device.status.get(DPCODE_PERCENT_STATE, 0)\n        if DPCODE_SITUATION_SET not in self.tuya_device.status:\n            return 1 + int(0.98 * (100 - position))\n        elif self.tuya_device.status.get(DPCODE_SITUATION_SET) == \"fully_open\":\n            return 1 + 0.98 * position\n        else:\n            return 1 + int(0.98 * (100 - position))\n\n    def open_cover(self, **kwargs: Any) -> None:\n        \"\"\"Open the cover.\"\"\"\n        self._send_command([{\"code\": DPCODE_CONTROL, \"value\": \"open\"}])\n\n    def close_cover(self, **kwargs: Any) -> None:\n        \"\"\"Close cover.\"\"\"\n        self._send_command([{\"code\": DPCODE_CONTROL, \"value\": \"close\"}])\n\n    def stop_cover(self, **kwargs):\n        \"\"\"Stop the cover.\"\"\"\n        self._send_command([{\"code\": DPCODE_CONTROL, \"value\": \"stop\"}])\n\n    def set_cover_position(self, **kwargs):\n        \"\"\"Move the cover to a specific position.\"\"\"\n        _LOGGER.debug(f\"cover--> {kwargs}\")\n        self._send_command(\n            [{\"code\": DPCODE_PERCENT_CONTROL, \"value\": kwargs[ATTR_POSITION]}]\n        )\n\n    @property\n    def supported_features(self):\n        \"\"\"Flag supported features.\"\"\"\n        supports = SUPPORT_OPEN | SUPPORT_CLOSE | SUPPORT_STOP\n\n        if DPCODE_PERCENT_CONTROL in self.tuya_device.status:\n            supports = supports | SUPPORT_SET_POSITION\n\n        return supports\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/fan.py",
    "content": "\"\"\"Support for Tuya Fan.\"\"\"\nfrom __future__ import annotations\n\nimport json\nimport logging\nfrom typing import Any\n\nfrom tuya_iot import TuyaDevice, TuyaDeviceManager\n\nfrom homeassistant.components.fan import (\n    DIRECTION_FORWARD,\n    DIRECTION_REVERSE,\n    DOMAIN as DEVICE_DOMAIN,\n    SUPPORT_DIRECTION,\n    SUPPORT_OSCILLATE,\n    SUPPORT_PRESET_MODE,\n    SUPPORT_SET_SPEED,\n    FanEntity,\n)\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.core import HomeAssistant, callback\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\nfrom homeassistant.helpers.entity_platform import AddEntitiesCallback\nfrom homeassistant.util.percentage import (\n    ordered_list_item_to_percentage,\n    percentage_to_ordered_list_item,\n)\n\nfrom .base import TuyaHaEntity\nfrom .const import (\n    DOMAIN,\n    TUYA_DEVICE_MANAGER,\n    TUYA_DISCOVERY_NEW,\n    TUYA_HA_DEVICES,\n    TUYA_HA_TUYA_MAP,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\n\n# Fan\n# https://developer.tuya.com/en/docs/iot/f?id=K9gf45vs7vkge\nDPCODE_SWITCH = \"switch\"\nDPCODE_FAN_SPEED = \"fan_speed_percent\"\nDPCODE_MODE = \"mode\"\nDPCODE_SWITCH_HORIZONTAL = \"switch_horizontal\"\nDPCODE_FAN_DIRECTION = \"fan_direction\"\n\n# Air Purifier\n# https://developer.tuya.com/en/docs/iot/s?id=K9gf48r41mn81\nDPCODE_AP_FAN_SPEED = \"speed\"\nDPCODE_AP_FAN_SPEED_ENUM = \"fan_speed_enum\"\n\nTUYA_SUPPORT_TYPE = {\n    \"fs\",  # Fan\n    \"kj\",  # Air Purifier\n}\n\n\nasync def async_setup_entry(\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback\n) -> None:\n    \"\"\"Set up tuya fan dynamically through tuya discovery.\"\"\"\n    _LOGGER.debug(\"fan init\")\n\n    hass.data[DOMAIN][entry.entry_id][TUYA_HA_TUYA_MAP][\n        DEVICE_DOMAIN\n    ] = TUYA_SUPPORT_TYPE\n\n    @callback\n    def async_discover_device(dev_ids: list[str]) -> None:\n        \"\"\"Discover and add a discovered tuya fan.\"\"\"\n        _LOGGER.debug(\"fan add-> %s\", dev_ids)\n        if not dev_ids:\n            return\n        entities = _setup_entities(hass, entry, dev_ids)\n        async_add_entities(entities)\n\n    entry.async_on_unload(\n        async_dispatcher_connect(\n            hass, TUYA_DISCOVERY_NEW.format(DEVICE_DOMAIN), async_discover_device\n        )\n    )\n\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    device_ids = []\n    for (device_id, device) in device_manager.device_map.items():\n        if device.category in TUYA_SUPPORT_TYPE:\n            device_ids.append(device_id)\n    async_discover_device(device_ids)\n\n\ndef _setup_entities(\n    hass: HomeAssistant, entry: ConfigEntry, device_ids: list[str]\n) -> list[TuyaHaFan]:\n    \"\"\"Set up Tuya Fan.\"\"\"\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    entities = []\n    for device_id in device_ids:\n        device = device_manager.device_map[device_id]\n        if device is None:\n            continue\n        entities.append(TuyaHaFan(device, device_manager))\n        hass.data[DOMAIN][entry.entry_id][TUYA_HA_DEVICES].add(device_id)\n    return entities\n\n\nclass TuyaHaFan(TuyaHaEntity, FanEntity):\n    \"\"\"Tuya Fan Device.\"\"\"\n\n    def __init__(self, device: TuyaDevice, device_manager: TuyaDeviceManager) -> None:\n        \"\"\"Init Tuya Fan Device.\"\"\"\n        super().__init__(device, device_manager)\n\n        self.ha_preset_modes = []\n        if DPCODE_MODE in self.tuya_device.function:\n            self.ha_preset_modes = json.loads(\n                self.tuya_device.function[DPCODE_MODE].values\n            ).get(\"range\", [])\n\n        # Air purifier fan can be controlled either via the ranged values or via the enum.\n        # We will always prefer the enumeration if available\n        #   Enum is used for e.g. MEES SmartHIMOX-H06\n        #   Range is used for e.g. Concept CA3000\n        self.air_purifier_speed_range_len = 0\n        self.air_purifier_speed_range_enum = []\n        if self.tuya_device.category == \"kj\" and (\n            DPCODE_AP_FAN_SPEED_ENUM in self.tuya_device.function\n            or DPCODE_AP_FAN_SPEED in self.tuya_device.function\n        ):\n            if DPCODE_AP_FAN_SPEED_ENUM in self.tuya_device.function:\n                self.dp_code_speed_enum = DPCODE_AP_FAN_SPEED_ENUM\n            else:\n                self.dp_code_speed_enum = DPCODE_AP_FAN_SPEED\n\n            data = json.loads(\n                self.tuya_device.function[self.dp_code_speed_enum].values\n            ).get(\"range\")\n            if data:\n                self.air_purifier_speed_range_len = len(data)\n                self.air_purifier_speed_range_enum = data\n\n    def set_preset_mode(self, preset_mode: str) -> None:\n        \"\"\"Set the preset mode of the fan.\"\"\"\n        self._send_command([{\"code\": DPCODE_MODE, \"value\": preset_mode}])\n\n    def set_direction(self, direction: str) -> None:\n        \"\"\"Set the direction of the fan.\"\"\"\n        self._send_command([{\"code\": DPCODE_FAN_DIRECTION, \"value\": direction}])\n\n    def set_percentage(self, percentage: int) -> None:\n        \"\"\"Set the speed of the fan, as a percentage.\"\"\"\n        if self.tuya_device.category == \"kj\":\n            value_in_range = percentage_to_ordered_list_item(\n                self.air_purifier_speed_range_enum, percentage\n            )\n            self._send_command(\n                [\n                    {\n                        \"code\": self.dp_code_speed_enum,\n                        \"value\": value_in_range,\n                    }\n                ]\n            )\n        else:\n            self._send_command([{\"code\": DPCODE_FAN_SPEED, \"value\": percentage}])\n\n    def turn_off(self, **kwargs: Any) -> None:\n        \"\"\"Turn the fan off.\"\"\"\n        self._send_command([{\"code\": DPCODE_SWITCH, \"value\": False}])\n\n    def turn_on(\n        self,\n        speed: str = None,\n        percentage: int = None,\n        preset_mode: str = None,\n        **kwargs: Any,\n    ) -> None:\n        \"\"\"Turn on the fan.\"\"\"\n        self._send_command([{\"code\": DPCODE_SWITCH, \"value\": True}])\n\n    def oscillate(self, oscillating: bool) -> None:\n        \"\"\"Oscillate the fan.\"\"\"\n        self._send_command([{\"code\": DPCODE_SWITCH_HORIZONTAL, \"value\": oscillating}])\n\n    @property\n    def is_on(self) -> bool:\n        \"\"\"Return true if fan is on.\"\"\"\n        return self.tuya_device.status.get(DPCODE_SWITCH, False)\n\n    @property\n    def current_direction(self) -> str:\n        \"\"\"Return the current direction of the fan.\"\"\"\n        if self.tuya_device.status[DPCODE_FAN_DIRECTION]:\n            return DIRECTION_FORWARD\n        return DIRECTION_REVERSE\n\n    @property\n    def oscillating(self) -> bool:\n        \"\"\"Return true if the fan is oscillating.\"\"\"\n        return self.tuya_device.status.get(DPCODE_SWITCH_HORIZONTAL, False)\n\n    @property\n    def preset_modes(self) -> list[str]:\n        \"\"\"Return the list of available preset_modes.\"\"\"\n        return self.ha_preset_modes\n\n    @property\n    def preset_mode(self) -> str:\n        \"\"\"Return the current preset_mode.\"\"\"\n        return self.tuya_device.status[DPCODE_MODE]\n\n    @property\n    def percentage(self) -> int | None:\n        \"\"\"Return the current speed.\"\"\"\n        if not self.is_on:\n            return 0\n\n        if (\n            self.tuya_device.category == \"kj\"\n            and self.air_purifier_speed_range_len > 1\n            and not self.air_purifier_speed_range_enum\n            and DPCODE_AP_FAN_SPEED_ENUM in self.tuya_device.status\n        ):\n            # if air-purifier speed enumeration is supported we will prefer it.\n            return ordered_list_item_to_percentage(\n                self.air_purifier_speed_range_enum,\n                self.tuya_device.status[DPCODE_AP_FAN_SPEED_ENUM],\n            )\n\n        # some type may not have the fan_speed_percent key\n        return self.tuya_device.status.get(DPCODE_FAN_SPEED)\n\n    @property\n    def speed_count(self) -> int:\n        \"\"\"Return the number of speeds the fan supports.\"\"\"\n        if self.tuya_device.category == \"kj\":\n            return self.air_purifier_speed_range_len\n        return super().speed_count\n\n    @property\n    def supported_features(self):\n        \"\"\"Flag supported features.\"\"\"\n        supports = 0\n        if DPCODE_MODE in self.tuya_device.status:\n            supports |= SUPPORT_PRESET_MODE\n        if DPCODE_FAN_SPEED in self.tuya_device.status:\n            supports |= SUPPORT_SET_SPEED\n        if DPCODE_SWITCH_HORIZONTAL in self.tuya_device.status:\n            supports |= SUPPORT_OSCILLATE\n        if DPCODE_FAN_DIRECTION in self.tuya_device.status:\n            supports |= SUPPORT_DIRECTION\n\n        # Air Purifier specific\n        if (\n            DPCODE_AP_FAN_SPEED in self.tuya_device.status\n            or DPCODE_AP_FAN_SPEED_ENUM in self.tuya_device.status\n        ):\n            supports |= SUPPORT_SET_SPEED\n        return supports\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/humidifier.py",
    "content": "\"\"\"Support for Tuya Humidifiers.\"\"\"\nfrom __future__ import annotations\n\nimport json\nimport logging\n\nfrom homeassistant.components.humidifier import DEVICE_CLASSES\nfrom homeassistant.components.humidifier import DOMAIN as DEVICE_DOMAIN\nfrom homeassistant.components.humidifier import SUPPORT_MODES, HumidifierEntity\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.core import HomeAssistant, callback\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\nfrom homeassistant.helpers.entity_platform import AddEntitiesCallback\nfrom homeassistant.helpers.entity import Entity\nfrom tuya_iot import TuyaDevice, TuyaDeviceManager\n\nfrom .base import TuyaHaEntity\nfrom .const import (\n    DOMAIN,\n    TUYA_DEVICE_MANAGER,\n    TUYA_DISCOVERY_NEW,\n    TUYA_HA_DEVICES,\n    TUYA_HA_TUYA_MAP,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\nTUYA_SUPPORT_TYPE = {\n    \"jsq\",  # Humidifier\n    \"cs\",  # Dehumidifier\n}\n\n# Humidifier(jsq)\n# https://developers.home-assistant.io/docs/core/entity/humidifier\nDPCODE_MODE = \"mode\"\nDPCODE_SWITCH = \"switch\"\nDPCODE_SWITCH_SPRAY = \"switch_spray\"\nDPCODE_HUMIDITY_SET = \"humidity_set\"\nDPCODE_DEHUMIDITY_SET_VALUE = \"dehumidify_set_value\"\n\n\nasync def async_setup_entry(\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback\n):\n    \"\"\"Set up tuya sensors dynamically through tuya discovery.\"\"\"\n    _LOGGER.debug(\"humidifier init\")\n\n    hass.data[DOMAIN][entry.entry_id][TUYA_HA_TUYA_MAP][\n        DEVICE_DOMAIN\n    ] = TUYA_SUPPORT_TYPE\n\n    @callback\n    def async_discover_device(dev_ids):\n        \"\"\"Discover and add a discovered tuya sensor.\"\"\"\n        _LOGGER.debug(f\"humidifier add-> {dev_ids}\")\n        if not dev_ids:\n            return\n        entities = _setup_entities(hass, entry, dev_ids)\n        async_add_entities(entities)\n\n    entry.async_on_unload(\n        async_dispatcher_connect(\n            hass, TUYA_DISCOVERY_NEW.format(DEVICE_DOMAIN), async_discover_device\n        )\n    )\n\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    device_ids = []\n    for (device_id, device) in device_manager.device_map.items():\n        if device.category in TUYA_SUPPORT_TYPE:\n            device_ids.append(device_id)\n    async_discover_device(device_ids)\n\n\ndef _setup_entities(\n    hass: HomeAssistant, entry: ConfigEntry, device_ids: list[str]\n) -> list[Entity]:\n    \"\"\"Set up Tuya Switch device.\"\"\"\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    entities: list[Entity] = []\n    for device_id in device_ids:\n        device = device_manager.device_map[device_id]\n        if device is None:\n            continue\n\n        entities.append(TuyaHaHumidifier(device, device_manager))\n        hass.data[DOMAIN][entry.entry_id][TUYA_HA_DEVICES].add(device_id)\n    return entities\n\n\nclass TuyaHaHumidifier(TuyaHaEntity, HumidifierEntity):\n    \"\"\"Tuya Switch Device.\"\"\"\n\n    def __init__(self, device: TuyaDevice, device_manager: TuyaDeviceManager) -> None:\n        super().__init__(device, device_manager)\n        if (\n            DPCODE_SWITCH not in self.tuya_device.status\n            and DPCODE_SWITCH_SPRAY in self.tuya_device.status\n        ):\n            self.dp_switch = DPCODE_SWITCH_SPRAY\n        else:\n            self.dp_switch = DPCODE_SWITCH\n\n        if (\n            DPCODE_HUMIDITY_SET not in self.tuya_device.status\n            and DPCODE_DEHUMIDITY_SET_VALUE in self.tuya_device.status\n        ):\n            self.dp_humidity = DPCODE_DEHUMIDITY_SET_VALUE\n        else:\n            self.dp_humidity = DPCODE_HUMIDITY_SET\n\n    @property\n    def is_on(self):\n        \"\"\"Return the device is on or off.\"\"\"\n        return self.tuya_device.status.get(self.dp_switch, False)\n\n    @property\n    def mode(self):\n        \"\"\"Return the current mode.\"\"\"\n        return self.tuya_device.status.get(DPCODE_MODE)\n\n    @property\n    def available_modes(self):\n        \"\"\"Return a list of available modes.\"\"\"\n        return json.loads(self.tuya_device.function.get(DPCODE_MODE, {}).values).get(\n            \"range\"\n        )\n\n    @property\n    def target_humidity(self) -> int | None:\n        \"\"\"Return the humidity or dehumidity we try to reach.\"\"\"\n        if (\n            DPCODE_HUMIDITY_SET not in self.tuya_device.status\n            and DPCODE_DEHUMIDITY_SET_VALUE not in self.tuya_device.status\n        ):\n            return None\n        if DPCODE_HUMIDITY_SET in self.tuya_device.status:\n            return self.tuya_device.status.get(DPCODE_HUMIDITY_SET, 0)\n        else:\n            return self.tuya_device.status.get(DPCODE_DEHUMIDITY_SET_VALUE, 0)\n\n    @property\n    def supported_features(self):\n        \"\"\"Return humidifier or dehumidifier support features.\"\"\"\n        supports = 0\n        if DPCODE_MODE in self.tuya_device.status:\n            supports = supports | SUPPORT_MODES\n        return supports\n\n    @property\n    def device_class(self):\n        \"\"\"Return humidifier or dehumidifier device class.\"\"\"\n        if DPCODE_HUMIDITY_SET in self.tuya_device.status:\n            return DEVICE_CLASSES[0]\n        elif DPCODE_DEHUMIDITY_SET_VALUE in self.tuya_device.status:\n            return DEVICE_CLASSES[1]\n        else:\n            return None\n\n    def set_mode(self, mode):\n        \"\"\"Set new target preset mode.\"\"\"\n        self._send_command([{\"code\": DPCODE_MODE, \"value\": mode}])\n\n    def turn_on(self, **kwargs):\n        \"\"\"Turn the device on.\"\"\"\n        self._send_command([{\"code\": self.dp_switch, \"value\": True}])\n\n    def turn_off(self, **kwargs):\n        \"\"\"Turn the device off.\"\"\"\n        self._send_command([{\"code\": self.dp_switch, \"value\": False}])\n\n    def set_humidity(self, humidity):\n        \"\"\"Set new target humidity.\"\"\"\n        self._send_command([{\"code\": self.dp_humidity, \"value\": humidity}])\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/light.py",
    "content": "\"\"\"Support for the Tuya lights.\"\"\"\n\nfrom __future__ import annotations\n\nimport json\nimport logging\nfrom typing import Any\n\nfrom tuya_iot import TuyaDevice, TuyaDeviceManager\n\nfrom homeassistant.components.light import (\n    ATTR_BRIGHTNESS,\n    ATTR_COLOR_TEMP,\n    ATTR_HS_COLOR,\n    COLOR_MODE_BRIGHTNESS,\n    COLOR_MODE_COLOR_TEMP,\n    COLOR_MODE_HS,\n    COLOR_MODE_ONOFF,\n    DOMAIN as DEVICE_DOMAIN,\n    LightEntity,\n)\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.core import HomeAssistant, callback\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\nfrom homeassistant.helpers.entity import Entity\nfrom homeassistant.helpers.entity_platform import AddEntitiesCallback\n\nfrom .base import TuyaHaEntity\nfrom .const import (\n    DOMAIN,\n    TUYA_DEVICE_MANAGER,\n    TUYA_DISCOVERY_NEW,\n    TUYA_HA_DEVICES,\n    TUYA_HA_TUYA_MAP,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\n\n# Light(dj)\n# https://developer.tuya.com/en/docs/iot/f?id=K9i5ql3v98hn3\nDPCODE_SWITCH = \"switch_led\"\nDPCODE_WORK_MODE = \"work_mode\"\nDPCODE_BRIGHT_VALUE = \"bright_value\"\nDPCODE_TEMP_VALUE = \"temp_value\"\nDPCODE_COLOUR_DATA = \"colour_data\"\nDPCODE_COLOUR_DATA_V2 = \"colour_data_v2\"\nDPCODE_LIGHT = \"light\"\n\nMIREDS_MAX = 500\nMIREDS_MIN = 153\n\nHSV_HA_HUE_MIN = 0\nHSV_HA_HUE_MAX = 360\nHSV_HA_SATURATION_MIN = 0\nHSV_HA_SATURATION_MAX = 100\n\nWORK_MODE_WHITE = \"white\"\nWORK_MODE_COLOUR = \"colour\"\n\nTUYA_SUPPORT_TYPE = {\n    \"dj\",  # Light\n    \"dd\",  # Light strip\n    \"fwl\",  # Ambient light\n    \"dc\",  # Light string\n    \"jsq\",  # Humidifier's light\n    \"xdd\",  # Ceiling Light\n    \"xxj\",  # Diffuser's light\n    \"fs\",  # Fan\n}\n\nDEFAULT_HSV = {\n    \"h\": {\"min\": 1, \"scale\": 0, \"unit\": \"\", \"max\": 360, \"step\": 1},\n    \"s\": {\"min\": 1, \"scale\": 0, \"unit\": \"\", \"max\": 255, \"step\": 1},\n    \"v\": {\"min\": 1, \"scale\": 0, \"unit\": \"\", \"max\": 255, \"step\": 1},\n}\n\nDEFAULT_HSV_V2 = {\n    \"h\": {\"min\": 1, \"scale\": 0, \"unit\": \"\", \"max\": 360, \"step\": 1},\n    \"s\": {\"min\": 1, \"scale\": 0, \"unit\": \"\", \"max\": 1000, \"step\": 1},\n    \"v\": {\"min\": 1, \"scale\": 0, \"unit\": \"\", \"max\": 1000, \"step\": 1},\n}\n\n\nasync def async_setup_entry(\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback\n) -> None:\n    \"\"\"Set up tuya light dynamically through tuya discovery.\"\"\"\n    _LOGGER.debug(\"light init\")\n\n    hass.data[DOMAIN][entry.entry_id][TUYA_HA_TUYA_MAP][\n        DEVICE_DOMAIN\n    ] = TUYA_SUPPORT_TYPE\n\n    @callback\n    def async_discover_device(dev_ids: list[str]):\n        \"\"\"Discover and add a discovered tuya light.\"\"\"\n        _LOGGER.debug(\"light add-> %s\", dev_ids)\n        if not dev_ids:\n            return\n        entities = _setup_entities(hass, entry, dev_ids)\n        async_add_entities(entities)\n\n    entry.async_on_unload(\n        async_dispatcher_connect(\n            hass, TUYA_DISCOVERY_NEW.format(DEVICE_DOMAIN), async_discover_device\n        )\n    )\n\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    device_ids = []\n    for (device_id, device) in device_manager.device_map.items():\n        if device.category in TUYA_SUPPORT_TYPE:\n            device_ids.append(device_id)\n    async_discover_device(device_ids)\n\n\ndef _setup_entities(\n    hass, entry: ConfigEntry, device_ids: list[str]\n) -> list[TuyaHaLight]:\n    \"\"\"Set up Tuya Light device.\"\"\"\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    entities:list[Entity] = []\n    for device_id in device_ids:\n        device = device_manager.device_map[device_id]\n        if device is None:\n            continue\n\n        tuya_ha_light = TuyaHaLight(device, device_manager)\n        entities.append(tuya_ha_light)\n        hass.data[DOMAIN][entry.entry_id][TUYA_HA_DEVICES].add(\n            tuya_ha_light.tuya_device.id\n        )\n\n    return entities\n\n\nclass TuyaHaLight(TuyaHaEntity, LightEntity):\n    \"\"\"Tuya light device.\"\"\"\n\n    def __init__(self, device: TuyaDevice, device_manager: TuyaDeviceManager) -> None:\n        \"\"\"Init TuyaHaLight.\"\"\"\n        self.dp_code_bright = DPCODE_BRIGHT_VALUE\n        self.dp_code_temp = DPCODE_TEMP_VALUE\n        self.dp_code_colour = DPCODE_COLOUR_DATA\n\n        for key in device.function:\n            if key.startswith(DPCODE_BRIGHT_VALUE):\n                self.dp_code_bright = key\n            elif key.startswith(DPCODE_TEMP_VALUE):\n                self.dp_code_temp = key\n            elif key.startswith(DPCODE_COLOUR_DATA):\n                self.dp_code_colour = key\n\n        super().__init__(device, device_manager)\n\n    @property\n    def is_on(self) -> bool:\n        \"\"\"Return true if light is on.\"\"\"\n        return self.tuya_device.status.get(DPCODE_SWITCH, False)\n\n    def turn_on(self, **kwargs: Any) -> None:\n        \"\"\"Turn on or control the light.\"\"\"\n        commands = []\n        _LOGGER.debug(\"light kwargs-> %s\", kwargs)\n\n        if (\n            DPCODE_LIGHT in self.tuya_device.status\n            and DPCODE_SWITCH not in self.tuya_device.status\n        ):\n            commands += [{\"code\": DPCODE_LIGHT, \"value\": True}]\n        else:\n            commands += [{\"code\": DPCODE_SWITCH, \"value\": True}]\n\n        if ATTR_BRIGHTNESS in kwargs:\n            if self._work_mode().startswith(WORK_MODE_COLOUR):\n                colour_data = self._get_hsv()\n                v_range = self._tuya_hsv_v_range()\n                colour_data[\"v\"] = int(\n                    self.remap(kwargs[ATTR_BRIGHTNESS], 0, 255, v_range[0], v_range[1])\n                )\n                commands += [\n                    {\"code\": self.dp_code_colour, \"value\": json.dumps(colour_data)}\n                ]\n            else:\n                new_range = self._tuya_brightness_range()\n                tuya_brightness = int(\n                    self.remap(\n                        kwargs[ATTR_BRIGHTNESS], 0, 255, new_range[0], new_range[1]\n                    )\n                )\n                commands += [{\"code\": self.dp_code_bright, \"value\": tuya_brightness}]\n\n        if ATTR_HS_COLOR in kwargs:\n            colour_data = self._get_hsv()\n            # hsv h\n            colour_data[\"h\"] = int(kwargs[ATTR_HS_COLOR][0])\n            # hsv s\n            ha_s = kwargs[ATTR_HS_COLOR][1]\n            s_range = self._tuya_hsv_s_range()\n            colour_data[\"s\"] = int(\n                self.remap(\n                    ha_s,\n                    HSV_HA_SATURATION_MIN,\n                    HSV_HA_SATURATION_MAX,\n                    s_range[0],\n                    s_range[1],\n                )\n            )\n            # hsv v\n            ha_v = self.brightness\n            v_range = self._tuya_hsv_v_range()\n            colour_data[\"v\"] = int(self.remap(ha_v, 0, 255, v_range[0], v_range[1]))\n\n            commands += [\n                {\"code\": self.dp_code_colour, \"value\": json.dumps(colour_data)}\n            ]\n            if self.tuya_device.status[DPCODE_WORK_MODE] != \"colour\":\n                commands += [{\"code\": DPCODE_WORK_MODE, \"value\": \"colour\"}]\n\n        if ATTR_COLOR_TEMP in kwargs:\n            # temp color\n            new_range = self._tuya_temp_range()\n            color_temp = self.remap(\n                self.max_mireds - kwargs[ATTR_COLOR_TEMP] + self.min_mireds,\n                self.min_mireds,\n                self.max_mireds,\n                new_range[0],\n                new_range[1],\n            )\n            commands += [{\"code\": self.dp_code_temp, \"value\": int(color_temp)}]\n\n            # brightness\n            ha_brightness = self.brightness\n            new_range = self._tuya_brightness_range()\n            tuya_brightness = self.remap(\n                ha_brightness, 0, 255, new_range[0], new_range[1]\n            )\n            commands += [{\"code\": self.dp_code_bright, \"value\": int(tuya_brightness)}]\n\n            if self.tuya_device.status[DPCODE_WORK_MODE] != \"white\":\n                commands += [{\"code\": DPCODE_WORK_MODE, \"value\": \"white\"}]\n\n        self._send_command(commands)\n\n    def turn_off(self, **kwargs: Any) -> None:\n        \"\"\"Instruct the light to turn off.\"\"\"\n        if (\n            DPCODE_LIGHT in self.tuya_device.status\n            and DPCODE_SWITCH not in self.tuya_device.status\n        ):\n            commands = [{\"code\": DPCODE_LIGHT, \"value\": False}]\n        else:\n            commands = [{\"code\": DPCODE_SWITCH, \"value\": False}]\n        self._send_command(commands)\n\n    @property\n    def brightness(self) -> int | None:\n        \"\"\"Return the brightness of the light.\"\"\"\n        old_range = self._tuya_brightness_range()\n        brightness = self.tuya_device.status.get(self.dp_code_bright, 0)\n\n        if self._work_mode().startswith(WORK_MODE_COLOUR):\n            colour_json = self.tuya_device.status.get(self.dp_code_colour)\n            if not colour_json:\n                return None\n            colour_data = json.loads(colour_json)\n            v_range = self._tuya_hsv_v_range()\n            hsv_v = colour_data.get(\"v\", 0)\n            return int(self.remap(hsv_v, v_range[0], v_range[1], 0, 255))\n\n        return int(self.remap(brightness, old_range[0], old_range[1], 0, 255))\n\n    def _tuya_brightness_range(self) -> tuple[int, int]:\n        if self.dp_code_bright not in self.tuya_device.status:\n            return 0, 255\n        bright_item = self.tuya_device.function.get(self.dp_code_bright)\n        if not bright_item:\n            return 0, 255\n        bright_value = json.loads(bright_item.values)\n        return bright_value.get(\"min\", 0), bright_value.get(\"max\", 255)\n\n    @property\n    def hs_color(self) -> tuple[float, float] | None:\n        \"\"\"Return the hs_color of the light.\"\"\"\n        colour_json = self.tuya_device.status.get(self.dp_code_colour)\n        if not colour_json:\n            return None\n        colour_data = json.loads(colour_json)\n        s_range = self._tuya_hsv_s_range()\n        return colour_data.get(\"h\", 0), self.remap(\n            colour_data.get(\"s\", 0),\n            s_range[0],\n            s_range[1],\n            HSV_HA_SATURATION_MIN,\n            HSV_HA_SATURATION_MAX,\n        )\n\n    @property\n    def color_temp(self) -> int:\n        \"\"\"Return the color_temp of the light.\"\"\"\n        new_range = self._tuya_temp_range()\n        tuya_color_temp = self.tuya_device.status.get(self.dp_code_temp, 0)\n        return (\n            self.max_mireds\n            - self.remap(\n                tuya_color_temp,\n                new_range[0],\n                new_range[1],\n                self.min_mireds,\n                self.max_mireds,\n            )\n            + self.min_mireds\n        )\n\n    @property\n    def min_mireds(self) -> int:\n        \"\"\"Return color temperature min mireds.\"\"\"\n        return MIREDS_MIN\n\n    @property\n    def max_mireds(self) -> int:\n        \"\"\"Return color temperature max mireds.\"\"\"\n        return MIREDS_MAX\n\n    def _tuya_temp_range(self) -> tuple[int, int]:\n        temp_item = self.tuya_device.function.get(self.dp_code_temp)\n        if not temp_item:\n            return 0, 255\n        temp_value = json.loads(temp_item.values)\n        return temp_value.get(\"min\", 0), temp_value.get(\"max\", 255)\n\n    def _tuya_hsv_s_range(self) -> tuple[int, int]:\n        hsv_data_range = self._tuya_hsv_function()\n        if hsv_data_range is not None:\n            hsv_s = hsv_data_range.get(\"s\", {\"min\": 0, \"max\": 255})\n            return hsv_s.get(\"min\", 0), hsv_s.get(\"max\", 255)\n        return 0, 255\n\n    def _tuya_hsv_v_range(self) -> tuple[int, int]:\n        hsv_data_range = self._tuya_hsv_function()\n        if hsv_data_range is not None:\n            hsv_v = hsv_data_range.get(\"v\", {\"min\": 0, \"max\": 255})\n            return hsv_v.get(\"min\", 0), hsv_v.get(\"max\", 255)\n\n        return 0, 255\n\n    def _tuya_hsv_function(self) -> dict[str, dict] | None:\n        hsv_item = self.tuya_device.function.get(self.dp_code_colour)\n        if not hsv_item:\n            return None\n        hsv_data = json.loads(hsv_item.values)\n        if hsv_data:\n            return hsv_data\n        colour_json = self.tuya_device.status.get(self.dp_code_colour)\n        if not colour_json:\n            return None\n        colour_data = json.loads(colour_json)\n        if (\n            self.dp_code_colour == DPCODE_COLOUR_DATA_V2\n            or colour_data.get(\"v\", 0) > 255\n            or colour_data.get(\"s\", 0) > 255\n        ):\n            return DEFAULT_HSV_V2\n        return DEFAULT_HSV\n\n    def _work_mode(self) -> str:\n        return self.tuya_device.status.get(DPCODE_WORK_MODE, \"\")\n\n    def _get_hsv(self) -> dict[str, int]:\n        return json.loads(self.tuya_device.status[self.dp_code_colour])\n\n    @property\n    def supported_color_modes(self) -> set[str] | None:\n        \"\"\"Flag supported color modes.\"\"\"\n        color_modes = [COLOR_MODE_ONOFF]\n        if self.dp_code_bright in self.tuya_device.status:\n            color_modes.append(COLOR_MODE_BRIGHTNESS)\n\n        if self.dp_code_temp in self.tuya_device.status:\n            color_modes.append(COLOR_MODE_COLOR_TEMP)\n\n        if (\n            self.dp_code_colour in self.tuya_device.status\n            and len(self.tuya_device.status[self.dp_code_colour]) > 0\n        ):\n            color_modes.append(COLOR_MODE_HS)\n        return set(color_modes)\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/manifest.json",
    "content": "{\n  \"domain\": \"tuya_v2\",\n  \"name\": \"Tuya v2\",\n  \"version\": \"1.5.0\",\n  \"documentation\": \"https://github.com/tuya/tuya-home-assistant\",\n  \"requirements\": [\n    \"tuya-iot-py-sdk==0.4.1\"\n  ],\n  \"codeowners\": [\n    \"@Tuya\"\n  ],\n  \"config_flow\": true,\n  \"iot_class\": \"cloud_push\"\n}\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/number.py",
    "content": "\"\"\"Support for Tuya Number entities.\"\"\"\nfrom __future__ import annotations\n\nimport json\nimport logging\n\nfrom homeassistant.components.number import DOMAIN as DEVICE_DOMAIN\nfrom homeassistant.components.number import NumberEntity\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.core import HomeAssistant, callback\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\nfrom homeassistant.helpers.entity_platform import AddEntitiesCallback\nfrom homeassistant.helpers.entity import Entity\nfrom tuya_iot import TuyaDevice, TuyaDeviceManager\n\nfrom .base import TuyaHaEntity\nfrom .const import (\n    DOMAIN,\n    TUYA_DEVICE_MANAGER,\n    TUYA_DISCOVERY_NEW,\n    TUYA_HA_DEVICES,\n    TUYA_HA_TUYA_MAP,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\nTUYA_SUPPORT_TYPE = {\n    \"hps\",  # Human Presence Sensor\n    \"kfj\",  # Coffee Maker\n}\n\n# Switch(kg), Socket(cz), Power Strip(pc)\n# https://developer.tuya.com/docs/iot/open-api/standard-function/electrician-category/categorykgczpc?categoryId=486118\nDPCODE_SENSITIVITY = \"sensitivity\"\n\n# Coffee Maker\n# https://developer.tuya.com/en/docs/iot/f?id=K9gf4701ox167\nDPCODE_TEMPSET = \"temp_set\"\nDPCODE_WARMTIME = \"warm_time\"\nDPCODE_WATERSET = \"water_set\"\nDPCODE_POWDERSET = \"powder_set\"\nDPCODE_CLOUDRECIPE = \"cloud_recipe_number\"\n\n\nasync def async_setup_entry(\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback\n) -> None:\n    \"\"\"Set up tuya number dynamically through tuya discovery.\"\"\"\n    _LOGGER.debug(\"number init\")\n\n    hass.data[DOMAIN][entry.entry_id][TUYA_HA_TUYA_MAP][\n        DEVICE_DOMAIN\n    ] = TUYA_SUPPORT_TYPE\n\n    @callback\n    def async_discover_device(dev_ids):\n        \"\"\"Discover and add a discovered tuya number.\"\"\"\n        _LOGGER.debug(f\"number add-> {dev_ids}\")\n        if not dev_ids:\n            return\n        entities = _setup_entities(hass, entry, dev_ids)\n        for entrty in entitier:\n            hass.data[DOMAIN][entry.entry_id][TUYA_HA_DEVICES].add(entrty.unique_id)\n        async_add_entities(entities)\n\n    entry.async_on_unload(\n        async_dispatcher_connect(\n            hass, TUYA_DISCOVERY_NEW.format(DEVICE_DOMAIN), async_discover_device\n        )\n    )\n\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    device_ids = []\n    for (device_id, device) in device_manager.device_map.items():\n        if device.category in TUYA_SUPPORT_TYPE:\n            device_ids.append(device_id)\n    async_discover_device(device_ids)\n\n\ndef _setup_entities(\n    hass: HomeAssistant, entry: ConfigEntry, device_ids: list[str]\n) -> list[Entity]:\n    \"\"\"Set up Tuya Switch device.\"\"\"\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    entities: list[Entity] = []\n    for device_id in device_ids:\n        device = device_manager.device_map[device_id]\n        if device is None:\n            continue\n\n        if DPCODE_SENSITIVITY in device.status:\n            entities.append(TuyaHaNumber(device, device_manager, DPCODE_SENSITIVITY))\n\n        if DPCODE_TEMPSET in device.status:\n            entities.append(TuyaHaNumber(device, device_manager, DPCODE_TEMPSET))\n\n        if DPCODE_WARMTIME in device.status:\n            entities.append(TuyaHaNumber(device, device_manager, DPCODE_WARMTIME))\n\n        if DPCODE_WATERSET in device.status:\n            entities.append(TuyaHaNumber(device, device_manager, DPCODE_WATERSET))\n\n        if DPCODE_POWDERSET in device.status:\n            entities.append(TuyaHaNumber(device, device_manager, DPCODE_POWDERSET))\n\n        if DPCODE_CLOUDRECIPE in device.status:\n            entities.append(TuyaHaNumber(device, device_manager, DPCODE_CLOUDRECIPE))\n\n    return entities\n\n\nclass TuyaHaNumber(TuyaHaEntity, NumberEntity):\n    \"\"\"Tuya Device Number.\"\"\"\n\n    def __init__(\n        self, device: TuyaDevice, device_manager: TuyaDeviceManager, code: str = \"\"\n    ) -> None:\n        \"\"\"Init tuya number device.\"\"\"\n        self._code = code\n        super().__init__(device, device_manager)\n\n    def set_value(self, value: float) -> None:\n        \"\"\"Update the current value.\"\"\"\n        self._send_command([{\"code\": self._code, \"value\": int(value)}])\n\n    @property\n    def unique_id(self) -> str | None:\n        \"\"\"Return a unique ID.\"\"\"\n        return f\"{super().unique_id}{self._code}\"\n\n    @property\n    def name(self) -> str | None:\n        \"\"\"Return Tuya device name.\"\"\"\n        return f\"{self.tuya_device.name}{self._code}\"\n\n    @property\n    def value(self) -> float:\n        \"\"\"Return current value.\"\"\"\n        return self.tuya_device.status.get(self._code, 0)\n\n    @property\n    def min_value(self) -> float:\n        \"\"\"Return min value.\"\"\"\n        return self._get_code_range()[0]\n\n    @property\n    def max_value(self) -> float:\n        \"\"\"Return max value.\"\"\"\n        return self._get_code_range()[1]\n\n    @property\n    def step(self) -> float:\n        \"\"\"Return step.\"\"\"\n        return self._get_code_range()[2]\n\n    def _get_code_range(self) -> tuple[int, int, int]:\n        dp_range = json.loads(self.tuya_device.function.get(self._code).values)\n        return dp_range.get(\"min\", 0), dp_range.get(\"max\", 0), dp_range.get(\"step\", 0)\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/scene.py",
    "content": "\"\"\"Support for Tuya scenes.\"\"\"\nfrom __future__ import annotations\n\nimport logging\nfrom typing import Any\n\nfrom tuya_iot import TuyaHomeManager, TuyaScene\n\nfrom homeassistant.components.scene import Scene\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.core import HomeAssistant\nfrom homeassistant.helpers.entity_platform import AddEntitiesCallback\n\nfrom .const import DOMAIN, TUYA_HOME_MANAGER\n\n_LOGGER = logging.getLogger(__name__)\n\n\nasync def async_setup_entry(\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback\n) -> None:\n    \"\"\"Set up tuya scenes.\"\"\"\n    home_manager = hass.data[DOMAIN][entry.entry_id][TUYA_HOME_MANAGER]\n    scenes = await hass.async_add_executor_job(home_manager.query_scenes)\n    async_add_entities(TuyaHAScene(home_manager, scene) for scene in scenes)\n\n\nclass TuyaHAScene(Scene):\n    \"\"\"Tuya Scene Remote.\"\"\"\n\n    def __init__(self, home_manager: TuyaHomeManager, scene: TuyaScene) -> None:\n        \"\"\"Init Tuya Scene.\"\"\"\n        super().__init__()\n        self.home_manager = home_manager\n        self.scene = scene\n\n    @property\n    def should_poll(self) -> bool:\n        \"\"\"Hass should not poll.\"\"\"\n        return False\n\n    @property\n    def unique_id(self) -> str | None:\n        \"\"\"Return a unique ID.\"\"\"\n        return f\"tys{self.scene.scene_id}\"\n\n    @property\n    def name(self) -> str | None:\n        \"\"\"Return Tuya scene name.\"\"\"\n        return self.scene.name\n\n    @property\n    def device_info(self):\n        \"\"\"Return a device description for device registry.\"\"\"\n        return {\n            \"identifiers\": {(DOMAIN, f\"{self.unique_id}\")},\n            \"manufacturer\": \"tuya\",\n            \"name\": self.scene.name,\n            \"model\": \"Tuya Scene\",\n        }\n\n    @property\n    def available(self) -> bool:\n        \"\"\"Return if the scene is enabled.\"\"\"\n        return self.scene.enabled\n\n    def activate(self, **kwargs: Any) -> None:\n        \"\"\"Activate the scene.\"\"\"\n        self.home_manager.trigger_scene(self.scene.home_id, self.scene.scene_id)\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/select.py",
    "content": "\"\"\"Support for Tuya Select entities.\"\"\"\r\nfrom __future__ import annotations\r\n\r\nimport json\r\nimport logging\r\n\r\nfrom homeassistant.components.select import DOMAIN as DEVICE_DOMAIN\r\nfrom homeassistant.components.select import SelectEntity\r\nfrom homeassistant.config_entries import ConfigEntry\r\nfrom homeassistant.core import HomeAssistant, callback\r\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\r\nfrom homeassistant.helpers.entity import Entity\r\nfrom tuya_iot import TuyaDevice, TuyaDeviceManager\r\n\r\nfrom .base import TuyaHaEntity\r\nfrom .const import (\r\n    DOMAIN,\r\n    TUYA_DEVICE_MANAGER,\r\n    TUYA_DISCOVERY_NEW,\r\n    TUYA_HA_DEVICES,\r\n    TUYA_HA_TUYA_MAP,\r\n)\r\n\r\n_LOGGER = logging.getLogger(__name__)\r\n\r\nTUYA_SUPPORT_TYPE = {\r\n    \"xxj\", # Diffuser\r\n    \"kfj\", # Coffee Maker\r\n    \"sd\",  # Vacuum Robot\r\n}\r\n\r\nDPCODE_MODE = \"mode\"\r\nDPCODE_COUNTDOWN = \"countdown\"\r\nDPCODE_WORK_MODE = \"work_mode\"\r\nDPCODE_DIRECTIONCONTROL = \"direction_control\"\r\n\r\n# Coffee Maker\r\n# https://developer.tuya.com/en/docs/iot/f?id=K9gf4701ox167\r\nDPCODE_MATERIAL = \"material\"\r\nDPCODE_CONCENTRATIONSET = \"concentration_set\"\r\nDPCODE_CUPNUMBER = \"cup_number\"\r\n\r\n\r\nAUTO_GENERATE_DP_LIST = [\r\n    DPCODE_MODE,\r\n    DPCODE_COUNTDOWN,\r\n    DPCODE_WORK_MODE,\r\n    DPCODE_MATERIAL,\r\n    DPCODE_CONCENTRATIONSET,\r\n    DPCODE_CUPNUMBER,\r\n    DPCODE_DIRECTIONCONTROL\r\n]\r\n\r\n\r\nasync def async_setup_entry(\r\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities\r\n) -> None:\r\n    \"\"\"Set up tuya select dynamically through tuya discovery.\"\"\"\r\n    _LOGGER.info(\"select init\")\r\n\r\n    hass.data[DOMAIN][entry.entry_id][TUYA_HA_TUYA_MAP][\r\n        DEVICE_DOMAIN\r\n    ] = TUYA_SUPPORT_TYPE\r\n\r\n    @callback\r\n    def async_discover_device(dev_ids):\r\n        _LOGGER.info(f\"select add-> {dev_ids}\")\r\n        if not dev_ids:\r\n            return\r\n        entities = _setup_entities(hass, entry, dev_ids)\r\n        async_add_entities(entities)\r\n\r\n    entry.async_on_unload(\r\n        async_dispatcher_connect(\r\n            hass, TUYA_DISCOVERY_NEW.format(DEVICE_DOMAIN), async_discover_device\r\n        )\r\n    )\r\n\r\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\r\n    device_ids = []\r\n    for (device_id, device) in device_manager.device_map.items():\r\n        if device.category in TUYA_SUPPORT_TYPE:\r\n            device_ids.append(device_id)\r\n    async_discover_device(device_ids)\r\n\r\n\r\ndef get_auto_generate_data_points(status) -> list:\r\n    dps = []\r\n    for data_point in AUTO_GENERATE_DP_LIST:\r\n        if data_point in status:\r\n            dps.append(data_point)\r\n\r\n    return dps\r\n\r\n\r\ndef _setup_entities(\r\n    hass, entry: ConfigEntry, device_ids: list[str]\r\n) -> list[Entity]:\r\n    \"\"\"Set up Tuya Select.\"\"\"\r\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\r\n    entities:list[Entity] = []\r\n    for device_id in device_ids:\r\n        device = device_manager.device_map[device_id]\r\n        if device is None:\r\n            continue\r\n\r\n        for data_point in get_auto_generate_data_points(device.status):\r\n            entities.append(TuyaHaSelect(device, device_manager, data_point))\r\n            hass.data[DOMAIN][entry.entry_id][TUYA_HA_DEVICES].add(device_id)\r\n    return entities\r\n\r\n\r\nclass TuyaHaSelect(TuyaHaEntity, SelectEntity):\r\n    \"\"\"Tuya Select Device.\"\"\"\r\n\r\n    def __init__(\r\n        self, device: TuyaDevice, device_manager: TuyaDeviceManager, code: str = \"\"\r\n    ):\r\n        self._code = code\r\n        self._attr_current_option = None\r\n        super().__init__(device, device_manager)\r\n\r\n    @property\r\n    def unique_id(self) -> str | None:\r\n        return f\"{super().unique_id}{self._code}\"\r\n\r\n    @property\r\n    def name(self) -> str | None:\r\n        \"\"\"Return Tuya device name.\"\"\"\r\n        return self.tuya_device.name + self._code\r\n\r\n    @property\r\n    def current_option(self) -> str:\r\n        return self.tuya_device.status.get(self._code, None)\r\n\r\n    def select_option(self, option: str) -> None:\r\n        self._send_command([{\"code\": self._code, \"value\": option}])\r\n\r\n    @property\r\n    def options(self) -> list:\r\n        dp_range = json.loads(self.tuya_device.function.get(self._code).values)\r\n        return dp_range.get(\"range\", [])\r\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/sensor.py",
    "content": "\"\"\"Support for Tuya sensors.\"\"\"\nfrom __future__ import annotations\n\nimport json\nimport logging\n\nfrom homeassistant.components.sensor import (\n    DOMAIN as DEVICE_DOMAIN,\n    SensorEntity,\n    STATE_CLASS_MEASUREMENT,\n    STATE_CLASS_TOTAL_INCREASING,\n)\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.const import (\n    CONCENTRATION_PARTS_PER_MILLION,\n    DEVICE_CLASS_BATTERY,\n    DEVICE_CLASS_CO2,\n    DEVICE_CLASS_CURRENT,\n    DEVICE_CLASS_ENERGY,\n    DEVICE_CLASS_HUMIDITY,\n    DEVICE_CLASS_ILLUMINANCE,\n    DEVICE_CLASS_POWER,\n    DEVICE_CLASS_TEMPERATURE,\n    DEVICE_CLASS_VOLTAGE,\n    ENERGY_KILO_WATT_HOUR,\n    MASS_MILLIGRAMS,\n    PERCENTAGE,\n    TEMP_CELSIUS,\n    TIME_DAYS,\n    TIME_MINUTES,\n)\nfrom homeassistant.core import HomeAssistant, callback\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\nfrom homeassistant.helpers.entity_platform import AddEntitiesCallback\nfrom homeassistant.helpers.typing import StateType\nfrom homeassistant.helpers.entity import Entity\nfrom tuya_iot import TuyaDevice, TuyaDeviceManager\n\nfrom .base import TuyaHaEntity\nfrom .const import (\n    DOMAIN,\n    TUYA_DEVICE_MANAGER,\n    TUYA_DISCOVERY_NEW,\n    TUYA_HA_DEVICES,\n    TUYA_HA_TUYA_MAP,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\nTUYA_SUPPORT_TYPE = [\n    \"wsdcg\",  # Temperature and Humidity Sensor\n    \"mcs\",  # Door Window Sensor\n    \"ywbj\",  # Somke Detector\n    \"rqbj\",  # Gas Detector\n    \"pir\",  # PIR Detector\n    \"sj\",  # Water Detector\n    \"pm2.5\",  # PM2.5 Sensor\n    \"kg\",  # Switch\n    \"cz\",  # Socket\n    \"pc\",  # Power Strip\n    \"wk\",  # Thermostat\n    \"dlq\",  # Breaker\n    \"ldcg\",  # Luminance Sensor\n    \"ms\",  # Residential Lock\n    \"dj\",  # Smart RGB Plug\n    \"kj\",  # Air Purifier,\n    \"xxj\",  # Diffuser\n    \"zndb\",  # Smart Electricity Meter\n    \"wnykq\", # Smart IR\n]\n\n# Smoke Detector\n# https://developer.tuya.com/en/docs/iot/s?id=K9gf48r5i2iiy\nDPCODE_BATTERY = \"va_battery\"\nDPCODE_BATTERY_PERCENTAGE = \"battery_percentage\"\nDPCODE_BATTERY_CODE = \"battery\"\n\n\nDPCODE_TEMPERATURE = \"va_temperature\"\nDPCODE_HUMIDITY = \"va_humidity\"\n\nDPCODE_PM100_VALUE = \"pm100_value\"\nDPCODE_PM25_VALUE = \"pm25_value\"\nDPCODE_PM10_VALUE = \"pm10_value\"\n\nDPCODE_TEMP_CURRENT = \"temp_current\"\nDPCODE_HUMIDITY_VALUE = \"humidity_value\"\n\nDPCODE_CURRENT = \"cur_current\"\nDPCODE_POWER = \"cur_power\"\nDPCODE_VOLTAGE = \"cur_voltage\"\nDPCODE_TOTAL_FORWARD_ENERGY = \"total_forward_energy\"\nDPCODE_ADD_ELE = \"add_ele\"\n\nDPCODE_BRIGHT_VALUE = \"bright_value\"\n\n# Residential Lock\n# https://developer.tuya.com/en/docs/iot/f?id=K9i5ql58frxa2\nDPCODE_BATTERY_ZIGBEELOCK = \"residual_electricity\"\n\n# Air Purifier\n# https://developer.tuya.com/en/docs/iot/s?id=K9gf48r41mn81\nDPCODE_AP_PM25 = \"pm25\"  # PM25 - no units\nDPCODE_AP_FILTER = \"filter\"  # Filter cartridge utilization [%]\nDPCODE_AP_TEMP = \"temp\"  # Temperature [℃]\nDPCODE_AP_HUMIDITY = \"humidity\"  # Humidity [%]\nDPCODE_AP_TVOC = \"tvoc\"  # Total Volatile Organic Compounds [ppm]\nDPCODE_AP_ECO2 = \"eco2\"  # Carbon dioxide concentration [ppm]\nDPCODE_AP_FDAYS = \"filter_days\"  # Remaining days of the filter cartridge [day]\nDPCODE_AP_TTIME = \"total_time\"  # Total operating time [minute]\nDPCODE_AP_TPM = \"total_pm\"  # Total absorption of particles [mg]\nDPCODE_AP_COUNTDOWN = \"countdown_left\"  # Remaining time of countdown [minute]\n\n# Smart Electricity Meter (zndb)\n# https://developer.tuya.com/en/docs/iot/smart-meter?id=Kaiuz4gv6ack7\nDPCODE_FORWARD_ENERGY_TOTAL = \"forward_energy_total\"\nDPCODE_PHASE = [\"phase_a\", \"phase_b\", \"phase_c\"]\nJSON_CODE_CURRENT = \"electricCurrent\"\nJSON_CODE_POWER = \"power\"\nJSON_CODE_VOLTAGE = \"voltage\"\n\n# Door Window Sensor (mcs)\nDPCODE_BATTERY_VALUE = \"battery_value\"\n\nasync def async_setup_entry(\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback\n) -> None:\n    \"\"\"Set up tuya sensors dynamically through tuya discovery.\"\"\"\n    _LOGGER.debug(\"sensor init\")\n\n    hass.data[DOMAIN][entry.entry_id][TUYA_HA_TUYA_MAP][\n        DEVICE_DOMAIN\n    ] = TUYA_SUPPORT_TYPE\n\n    @callback\n    def async_discover_device(dev_ids: list[str]):\n        \"\"\"Discover and add a discovered tuya sensor.\"\"\"\n        _LOGGER.debug(f\"sensor add-> {dev_ids}\")\n        if not dev_ids:\n            return\n        entities = _setup_entities(hass, entry, dev_ids)\n        for entity in entities:\n            hass.data[DOMAIN][entry.entry_id][TUYA_HA_DEVICES].add(entity.unique_id)\n\n        async_add_entities(entities)\n\n    entry.async_on_unload(\n        async_dispatcher_connect(\n            hass, TUYA_DISCOVERY_NEW.format(DEVICE_DOMAIN), async_discover_device\n        )\n    )\n\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    device_ids = []\n    for (device_id, device) in device_manager.device_map.items():\n        if device.category in TUYA_SUPPORT_TYPE:\n            device_ids.append(device_id)\n    async_discover_device(device_ids)\n\n\ndef _setup_entities(\n    hass: HomeAssistant, entry: ConfigEntry, device_ids: list[str]\n) -> list[Entity]:\n    \"\"\"Set up Tuya Switch device.\"\"\"\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    entities: list[Entity] = []\n    for device_id in device_ids:\n        device = device_manager.device_map[device_id]\n        if device is None:\n            continue\n\n        if device.category == \"kj\":\n            if DPCODE_AP_PM25 in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        \"PM25\",\n                        DPCODE_AP_PM25,\n                        \"\",\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            elif DPCODE_AP_FILTER in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        \"Filter\",\n                        DPCODE_AP_FILTER,\n                        PERCENTAGE,\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            elif DPCODE_AP_TEMP in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_TEMPERATURE,\n                        DPCODE_AP_TEMP,\n                        TEMP_CELSIUS,\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            elif DPCODE_AP_HUMIDITY in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_HUMIDITY,\n                        DPCODE_AP_HUMIDITY,\n                        PERCENTAGE,\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            elif DPCODE_AP_TVOC in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        \"TVOC\",\n                        DPCODE_AP_TVOC,\n                        CONCENTRATION_PARTS_PER_MILLION,\n                        STATE_CLASS_TOTAL_INCREASING,\n                    )\n                )\n            elif DPCODE_AP_ECO2 in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_CO2,\n                        DPCODE_AP_ECO2,\n                        CONCENTRATION_PARTS_PER_MILLION,\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            elif DPCODE_AP_FDAYS in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        \"FilterDays\",\n                        DPCODE_AP_FDAYS,\n                        TIME_DAYS,\n                        None,\n                    )\n                )\n            elif DPCODE_AP_TTIME in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        \"TotalTime\",\n                        DPCODE_AP_TTIME,\n                        TIME_MINUTES,\n                        STATE_CLASS_TOTAL_INCREASING,\n                    )\n                )\n            elif DPCODE_AP_TPM in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        \"TotalPM\",\n                        DPCODE_AP_TPM,\n                        MASS_MILLIGRAMS,\n                        STATE_CLASS_TOTAL_INCREASING,\n                    )\n                )\n            elif DPCODE_AP_COUNTDOWN in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        \"Countdown\",\n                        DPCODE_AP_COUNTDOWN,\n                        TIME_MINUTES,\n                        None,\n                    )\n                )\n        else:\n            if DPCODE_BATTERY_ZIGBEELOCK in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_BATTERY,\n                        DPCODE_BATTERY_ZIGBEELOCK,\n                        PERCENTAGE,\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            if DPCODE_BATTERY in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_BATTERY,\n                        DPCODE_BATTERY,\n                        PERCENTAGE,\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            if DPCODE_BATTERY_PERCENTAGE in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_BATTERY,\n                        DPCODE_BATTERY_PERCENTAGE,\n                        PERCENTAGE,\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            if DPCODE_BATTERY_VALUE in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_BATTERY,\n                        DPCODE_BATTERY_VALUE,\n                        PERCENTAGE,\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            if DPCODE_BATTERY_CODE in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_BATTERY,\n                        DPCODE_BATTERY_CODE,\n                        PERCENTAGE,\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            if DPCODE_TEMPERATURE in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_TEMPERATURE,\n                        DPCODE_TEMPERATURE,\n                        TEMP_CELSIUS,\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            if DPCODE_TEMP_CURRENT in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_TEMPERATURE,\n                        DPCODE_TEMP_CURRENT,\n                        TEMP_CELSIUS,\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            if DPCODE_HUMIDITY in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_HUMIDITY,\n                        DPCODE_HUMIDITY,\n                        PERCENTAGE,\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            if DPCODE_HUMIDITY_VALUE in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_HUMIDITY,\n                        DPCODE_HUMIDITY_VALUE,\n                        PERCENTAGE,\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            if DPCODE_PM100_VALUE in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        \"PM10\",\n                        DPCODE_PM100_VALUE,\n                        \"ug/m³\",\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            if DPCODE_PM25_VALUE in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        \"PM2.5\",\n                        DPCODE_PM25_VALUE,\n                        \"ug/m³\",\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            if DPCODE_PM10_VALUE in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        \"PM1.0\",\n                        DPCODE_PM10_VALUE,\n                        \"ug/m³\",\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            if DPCODE_CURRENT in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_CURRENT,\n                        DPCODE_CURRENT,\n                        json.loads(device.status_range.get(DPCODE_CURRENT).values).get(\n                            \"unit\", 0\n                        ),\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            if DPCODE_POWER in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_POWER,\n                        DPCODE_POWER,\n                        json.loads(device.status_range.get(DPCODE_POWER).values).get(\n                            \"unit\", 0\n                        ),\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            if DPCODE_TOTAL_FORWARD_ENERGY in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_ENERGY,\n                        DPCODE_TOTAL_FORWARD_ENERGY,\n                        ENERGY_KILO_WATT_HOUR,\n                        STATE_CLASS_TOTAL_INCREASING,\n                    )\n                )\n            if DPCODE_ADD_ELE in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_ENERGY,\n                        DPCODE_ADD_ELE,\n                        ENERGY_KILO_WATT_HOUR,\n                        STATE_CLASS_TOTAL_INCREASING,\n                    )\n                )\n            if DPCODE_VOLTAGE in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_VOLTAGE,\n                        DPCODE_VOLTAGE,\n                        json.loads(device.status_range.get(DPCODE_VOLTAGE).values).get(\n                            \"unit\", 0\n                        ),\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            if DPCODE_BRIGHT_VALUE in device.status and device.category != \"dj\":\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_ILLUMINANCE,\n                        DPCODE_BRIGHT_VALUE,\n                        json.loads(\n                            device.status_range.get(DPCODE_BRIGHT_VALUE).values\n                        ).get(\"unit\", 0),\n                        STATE_CLASS_MEASUREMENT,\n                    )\n                )\n            if DPCODE_FORWARD_ENERGY_TOTAL in device.status:\n                entities.append(\n                    TuyaHaSensor(\n                        device,\n                        device_manager,\n                        DEVICE_CLASS_ENERGY,\n                        DPCODE_FORWARD_ENERGY_TOTAL,\n                        ENERGY_KILO_WATT_HOUR,\n                        STATE_CLASS_TOTAL_INCREASING,\n                    )\n                )\n            if device.category == \"zndb\":\n                for phase in DPCODE_PHASE:\n                    if phase in device.status:\n                        entities.append(\n                            TuyaHaSensor(\n                                device,\n                                device_manager,\n                                DEVICE_CLASS_CURRENT,\n                                phase + \"_\" + JSON_CODE_CURRENT,\n                                \"A\",\n                                STATE_CLASS_MEASUREMENT,\n                            )\n                        )\n                        entities.append(\n                            TuyaHaSensor(\n                                device,\n                                device_manager,\n                                DEVICE_CLASS_POWER,\n                                phase + \"_\" + JSON_CODE_POWER,\n                                \"kW\",\n                                STATE_CLASS_MEASUREMENT,\n                            )\n                        )\n                        entities.append(\n                            TuyaHaSensor(\n                                device,\n                                device_manager,\n                                DEVICE_CLASS_VOLTAGE,\n                                phase + \"_\" + JSON_CODE_VOLTAGE,\n                                \"V\",\n                                STATE_CLASS_MEASUREMENT,\n                            )\n                        )\n    return entities\n\n\nclass TuyaHaSensor(TuyaHaEntity, SensorEntity):\n    \"\"\"Tuya Sensor Device.\"\"\"\n\n    def __init__(\n        self,\n        device: TuyaDevice,\n        device_manager: TuyaDeviceManager,\n        sensor_type: str,\n        sensor_code: str,\n        sensor_unit: str,\n        sensor_state_class: str,\n    ) -> None:\n        \"\"\"Init TuyaHaSensor.\"\"\"\n        super().__init__(device, device_manager)\n        self._code = sensor_code\n        self._attr_device_class = sensor_type\n        self._attr_name = self.tuya_device.name + \"_\" + self._attr_device_class\n        self._attr_unique_id = f\"{super().unique_id}{self._code}\"\n        self._attr_unit_of_measurement = sensor_unit\n        self._attr_state_class = sensor_state_class\n        self._attr_available = True\n\n    @property\n    def unique_id(self) -> str | None:\n        \"\"\"Return a unique ID.\"\"\"\n        return self._attr_unique_id\n\n    @property\n    def state(self) -> StateType:\n        \"\"\"Return the state of the sensor.\"\"\"\n        if self.tuya_device.category == \"zndb\" and self._code.startswith(\"phase_\"):\n            __value = json.loads(self.tuya_device.status.get(self._code[:7])).get(\n                self._code[8:]\n            )\n            return __value\n\n        __value = self.tuya_device.status.get(self._code)\n        if self.tuya_device.status_range.get(self._code).type == \"Integer\":\n            __value_range = json.loads(\n                self.tuya_device.status_range.get(self._code).values\n            )\n            __state = (__value) * 1.0 / (10 ** __value_range.get(\"scale\"))\n            if __value_range.get(\"scale\") == 0:\n                return int(__state)\n            return f\"%.{__value_range.get('scale')}f\" % __state\n        return \"\"\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/strings.json",
    "content": "{\n  \"config\": {\n    \"flow_title\": \"Tuya configuration\",\n    \"step\": {\n      \"user\":{\n        \"title\":\"Tuya Integration\",\n        \"data\":{\n          \"tuya_project_type\": \"Tuya cloud project type\"\n        }\n      },\n      \"login\": {\n        \"title\": \"Tuya\",\n        \"description\": \"Enter your Tuya credential\",\n        \"data\": {\n          \"endpoint\": \"Availability Zone\",\n          \"access_id\": \"Access ID\",\n          \"access_secret\": \"Access Secret\",\n          \"tuya_app_type\": \"Mobile App\",\n          \"country_code\": \"Country Code\",\n          \"username\": \"Account\",\n          \"password\": \"Password\"\n        }\n      }\n    },\n    \"error\": {\n      \"invalid_auth\": \"[%key:common::config_flow::error::invalid_auth%]\"\n    }\n  }\n}"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/switch.py",
    "content": "#!/usr/bin/env python3\n\"\"\"Support for Tuya switches.\"\"\"\nfrom __future__ import annotations\n\nimport logging\nfrom typing import Any\n\nfrom tuya_iot import TuyaDevice, TuyaDeviceManager\n\nfrom homeassistant.components.switch import DOMAIN as DEVICE_DOMAIN, SwitchEntity\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.core import HomeAssistant\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\nfrom homeassistant.helpers.entity import Entity\nfrom homeassistant.helpers.entity_platform import AddEntitiesCallback\n\nfrom .base import TuyaHaEntity\nfrom .const import (\n    DOMAIN,\n    TUYA_DEVICE_MANAGER,\n    TUYA_DISCOVERY_NEW,\n    TUYA_HA_DEVICES,\n    TUYA_HA_TUYA_MAP,\n)\n\n_LOGGER = logging.getLogger(__name__)\n\nTUYA_SUPPORT_TYPE = {\n    \"kg\",  # Switch\n    \"cz\",  # Socket\n    \"pc\",  # Power Strip\n    \"bh\",  # Smart Kettle\n    \"dlq\",  # Breaker\n    \"tdq\", # Breaker\n    \"cwysj\",  # Pet Water Feeder\n    \"kj\",  # Air Purifier\n    \"xxj\",  # Diffuser\n    \"ckmkzq\",  # Garage Door Opener\n    \"zndb\",  # Smart Electricity Meter\n    \"fs\",  # Fan\n    \"sd\",  # Vacuum\n    \"zndb\" \"kfj\",  # Smart Electricity Meter  # Coffee Maker\n}\n\n# Switch(kg), Socket(cz), Power Strip(pc)\n# https://developer.tuya.com/en/docs/iot/categorykgczpc?id=Kaiuz08zj1l4y\nDPCODE_SWITCH = \"switch\"\n\n# Air Purifier\n# https://developer.tuya.com/en/docs/iot/categorykj?id=Kaiuz1atqo5l7\n# Pet Water Feeder\n# https://developer.tuya.com/en/docs/iot/f?id=K9gf46aewxem5\nDPCODE_ANION = \"anion\"  # Air Purifier - Ionizer unit\n# Air Purifier - Filter cartridge resetting; Pet Water Feeder - Filter cartridge resetting\nDPCODE_FRESET = \"filter_reset\"\nDPCODE_LIGHT = \"light\"  # Air Purifier - Light\nDPCODE_LOCK = \"lock\"  # Air Purifier - Child lock\n# Air Purifier - UV sterilization; Pet Water Feeder - UV sterilization\nDPCODE_UV = \"uv\"\nDPCODE_WET = \"wet\"  # Air Purifier - Humidification unit\nDPCODE_PRESET = \"pump_reset\"  # Pet Water Feeder - Water pump resetting\nDPCODE_WRESET = \"water_reset\"  # Pet Water Feeder - Resetting of water usage days\n\nDPCODE_START = \"start\"\n# Coffee Maker\n# https://developer.tuya.com/en/docs/iot/f?id=K9gf4701ox167\nDPCODE_PAUSE = \"pause\"\nDPCODE_WARM = \"warm\"\nDPCODE_CLEANING = \"cleaning\"\n# Fan\n# https://developer.tuya.com/en/docs/iot/f?id=K9gf45vs7vkge\nDPCODE_FAN_LIGHT = \"light\"\n\n# Vacuum\n#https://developer.tuya.com/en/docs/iot/fsd?id=K9gf487ck1tlo\nDPCODE_VOICE = \"voice_switch\"\n\n\nasync def async_setup_entry(\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback\n) -> None:\n    \"\"\"Set up tuya sensors dynamically through tuya discovery.\"\"\"\n    _LOGGER.debug(\"switch init\")\n\n    hass.data[DOMAIN][entry.entry_id][TUYA_HA_TUYA_MAP][\n        DEVICE_DOMAIN\n    ] = TUYA_SUPPORT_TYPE\n\n    def async_discover_device(dev_ids):\n        \"\"\"Discover and add a discovered tuya sensor.\"\"\"\n        _LOGGER.debug(\"switch add-> %s\", dev_ids)\n        if not dev_ids:\n            return\n        entities = _setup_entities(hass, entry, dev_ids)\n        async_add_entities(entities)\n\n    entry.async_on_unload(\n        async_dispatcher_connect(\n            hass, TUYA_DISCOVERY_NEW.format(DEVICE_DOMAIN), async_discover_device\n        )\n    )\n\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    device_ids = []\n    for (device_id, device) in device_manager.device_map.items():\n        if device.category in TUYA_SUPPORT_TYPE:\n            device_ids.append(device_id)\n    async_discover_device(device_ids)\n\n\ndef _setup_entities(hass, entry: ConfigEntry, device_ids: list[str]) -> list[Entity]:\n    \"\"\"Set up Tuya Switch device.\"\"\"\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    entities: list[Entity] = []\n    for device_id in device_ids:\n        device = device_manager.device_map[device_id]\n        if device is None:\n            continue\n\n        for function in device.function:\n            tuya_ha_switch = None\n            if device.category == \"kj\":\n                if function in [\n                    DPCODE_ANION,\n                    DPCODE_FRESET,\n                    DPCODE_LIGHT,\n                    DPCODE_LOCK,\n                    DPCODE_UV,\n                    DPCODE_WET,\n                    DPCODE_FAN_LIGHT,\n                ]:\n                    tuya_ha_switch = TuyaHaSwitch(device, device_manager, function)\n                    # Main device switch is handled by the Fan object\n            elif device.category == \"cwysj\":\n                if function in [DPCODE_FRESET, DPCODE_UV, DPCODE_PRESET, DPCODE_WRESET]:\n                    tuya_ha_switch = TuyaHaSwitch(device, device_manager, function)\n\n                elif function.startswith(DPCODE_SWITCH):\n                    entities.append(TuyaHaSwitch(device, device_manager, function))\n                    tuya_ha_switch = TuyaHaSwitch(device, device_manager, function)\n\n            elif device.category == \"kfj\":\n                if function in [\n                    DPCODE_SWITCH,\n                    DPCODE_START,\n                    DPCODE_PAUSE,\n                    DPCODE_WARM,\n                    DPCODE_CLEANING,\n                ]:\n                    entities.append(TuyaHaSwitch(device, device_manager, function))\n                    tuya_ha_switch = TuyaHaSwitch(device, device_manager, function)\n\t\t\t\t\t\n            elif device.category == \"sd\":\n                if function in [DPCODE_VOICE ]:\n                    entities.append(TuyaHaSwitch(device, device_manager, function))\n                    tuya_ha_switch = TuyaHaSwitch(device, device_manager, function)\n\n                    # Main device switch\n            else:\n                if function.startswith(DPCODE_START):\n                    tuya_ha_switch = TuyaHaSwitch(device, device_manager, function)\n                elif function.startswith(DPCODE_SWITCH):\n                    tuya_ha_switch = TuyaHaSwitch(device, device_manager, function)\n\n            if tuya_ha_switch is not None:\n                entities.append(tuya_ha_switch)\n                hass.data[DOMAIN][entry.entry_id][TUYA_HA_DEVICES].add(\n                    tuya_ha_switch.tuya_device.id\n                )\n    return entities\n\n\nclass TuyaHaSwitch(TuyaHaEntity, SwitchEntity):\n    \"\"\"Tuya Switch Device.\"\"\"\n\n    dp_code_switch = DPCODE_SWITCH\n    dp_code_start = DPCODE_START\n\n    def __init__(\n        self, device: TuyaDevice, device_manager: TuyaDeviceManager, dp_code: str = \"\"\n    ) -> None:\n        \"\"\"Init TuyaHaSwitch.\"\"\"\n        super().__init__(device, device_manager)\n\n        self.dp_code = dp_code\n        self.channel = (\n            dp_code.replace(DPCODE_SWITCH, \"\")\n            if dp_code.startswith(DPCODE_SWITCH)\n            else dp_code\n        )\n\n    @property\n    def unique_id(self) -> str | None:\n        \"\"\"Return a unique ID.\"\"\"\n        return f\"{super().unique_id}{self.channel}\"\n\n    @property\n    def name(self) -> str | None:\n        \"\"\"Return Tuya device name.\"\"\"\n        return f\"{self.tuya_device.name}{self.channel}\"\n\n    @property\n    def is_on(self) -> bool:\n        \"\"\"Return true if switch is on.\"\"\"\n        return self.tuya_device.status.get(self.dp_code, False)\n\n    def turn_on(self, **kwargs: Any) -> None:\n        \"\"\"Turn the switch on.\"\"\"\n        self._send_command([{\"code\": self.dp_code, \"value\": True}])\n\n    def turn_off(self, **kwargs: Any) -> None:\n        \"\"\"Turn the switch off.\"\"\"\n        self._send_command([{\"code\": self.dp_code, \"value\": False}])\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/translations/de.json",
    "content": "{\n    \"config\": {\n        \"flow_title\": \"Tuya Konfiguration\",\n        \"step\": {\n            \"user\":{\n                \"title\":\"Tuya Integration\",\n                \"data\":{\n                  \"tuya_project_type\": \"Tuya Cloud Projekttyp\"\n                }\n            },\n            \"login\": {\n                \"title\": \"Tuya\",\n                \"description\": \"Geben Sie Ihre Tuya Anmeldedaten ein.\",\n                \"data\": {\n                    \"endpoint\": \"Verfügbarkeitszone\",\n                    \"access_id\": \"Access ID\",\n                    \"access_secret\": \"Access Secret\",\n                    \"tuya_app_type\": \"Mobile App\",\n                    \"country_code\": \"Länder Code\",\n                    \"username\": \"Benutzername\",\n                    \"password\": \"Passwort\"\n                }\n            }\n        },\n        \"error\": {\n            \"invalid_auth\": \"Ungültige Authentifizierung\"\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/translations/en.json",
    "content": "{\n    \"config\": {\n        \"flow_title\": \"Tuya configuration\",\n        \"step\": {\n            \"user\":{\n                \"title\":\"Tuya Integration\",\n                \"data\":{\n                  \"tuya_project_type\": \"Tuya cloud project type\"\n                }\n            },\n            \"login\": {\n                \"title\": \"Tuya\",\n                \"description\": \"Enter your Tuya credential.\",\n                \"data\": {\n                    \"endpoint\": \"Availability Zone\",\n                    \"access_id\": \"Access ID\",\n                    \"access_secret\": \"Access Secret\",\n                    \"tuya_app_type\": \"Mobile App\",\n                    \"country_code\": \"Country Code\",\n                    \"username\": \"Account\",\n                    \"password\": \"Password\"\n                }\n            }\n        },\n        \"error\": {\n            \"invalid_auth\": \"Invalid authentication\"\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/translations/es.json",
    "content": "{\n    \"config\": {\n        \"flow_title\": \"Configuración de Tuya\",\n        \"step\": {\n            \"user\":{\n                \"title\":\"Integración Tuya\",\n                \"data\":{\n                  \"tuya_project_type\": \"Tipo de cloud Tuya\"\n                }\n            },\n            \"login\": {\n                \"title\": \"Tuya\",\n                \"description\": \"Ingrese su credencial Tuya.\",\n                \"data\": {\n                    \"endpoint\": \"Zona de disponibilidad\",\n                    \"access_id\": \"ID de acceso\",\n                    \"access_secret\": \"Secreto\",\n                    \"tuya_app_type\": \"Aplicación movil\",\n                    \"country_code\": \"Código de país\",\n                    \"username\": \"Cuenta\",\n                    \"password\": \"Contraseña\"\n                }\n            }\n        },\n        \"error\": {\n            \"invalid_auth\": \"Autenticación inválida\"\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/translations/fr.json",
    "content": "{\n    \"config\": {\n        \"flow_title\": \"Configuration de Tuya\",\n        \"step\": {\n            \"user\":{\n                \"title\":\"Intégration Tuya\",\n                \"data\":{\n                  \"tuya_project_type\": \"Type de projet cloud Tuya\"\n                }\n            },\n            \"login\": {\n                \"title\": \"Tuya\",\n                \"description\": \"Saisissez vos identifiants Tuya.\",\n                \"data\": {\n                    \"endpoint\": \"Région\",\n                    \"access_id\": \"Access ID\",\n                    \"access_secret\": \"Access Secret\",\n                    \"tuya_app_type\": \"App Mobile\",\n                    \"country_code\": \"Code Pays\",\n                    \"username\": \"Compte\",\n                    \"password\": \"Mot de passe\"\n                }\n            },\n            \"error\": {\n                \"invalid_auth\": \"Authentification invalide\"\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/translations/hi.json",
    "content": "{\n    \"config\": {\n        \"flow_title\": \"Tuya विन्यास\",\n        \"step\": {\n            \"user\":{\n                \"title\":\"Tuya एकीकरण\",\n                \"data\":{\n                  \"tuya_project_type\": \"Tuya क्लाउड प्रोजेक्ट टाइप\"\n                }\n            },\n            \"login\": {\n                \"title\": \"Tuya\",\n                \"description\": \"अपना Tuya क्रेडेंशियल दर्ज करें\",\n                \"data\": {\n                    \"endpoint\": \"उपलब्धता क्षेत्र\",\n                    \"access_id\": \"एक्सेस आईडी\",\n                    \"access_secret\": \"एक्सेस सीक्रेट\",\n                    \"tuya_app_type\": \"मोबाइल एप्लिकेशन\",\n                    \"country_code\": \"कंट्री कोड\",\n                    \"username\": \"अकाउंट\",\n                    \"password\": \"पासवर्ड\"\n                }\n            }\n        },\n        \"error\": {\n            \"invalid_auth\": \"अमान्य प्रमाणीकरण\"\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/translations/hu.json",
    "content": "{\r\n    \"config\": {\r\n        \"flow_title\": \"Tuya konfiguráció\",\r\n        \"step\": {\r\n            \"user\":{\r\n                \"title\":\"Tuya Integráció\",\r\n                \"data\":{\r\n                  \"tuya_project_type\": \"A Tuya cloud projekt típusa\"\r\n                }\r\n            },\r\n            \"login\": {\r\n                \"title\": \"Tuya\",\r\n                \"description\": \"Adja meg a Tuya hitelesítő adatait.\",\r\n                \"data\": {\r\n                    \"endpoint\": \"A rendelkezésre álló zóna\",\r\n                    \"access_id\": \"Hozzáférés azonosító\",\r\n                    \"access_secret\": \"Hozzáférés 'titok'\",\r\n                    \"tuya_app_type\": \"Mobil alkalmazás\",\r\n                    \"country_code\": \"Országkód\",\r\n                    \"username\": \"Felhasználónév\",\r\n                    \"password\": \"Jelszó\"\r\n                }\r\n            }\r\n        },\r\n        \"error\": {\r\n            \"invalid_auth\": \"Érvénytelen hitelesítés\"\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/translations/id.json",
    "content": "{\n    \"config\": {\n        \"flow_title\": \"Konfigurasi Tuya\",\n        \"step\": {\n            \"user\":{\n                \"title\":\"Integrasi Tuya\",\n                \"data\":{\n                  \"tuya_project_type\": \"Tipe dari Projek Tuya cloud\"\n                }\n            },\n            \"login\": {\n                \"title\": \"Tuya\",\n                \"description\": \"Masukkan kredensial dari Tuya Anda.\",\n                \"data\": {\n                    \"endpoint\": \"Zona yang Tersedia\",\n                    \"access_id\": \"Akses ID\",\n                    \"access_secret\": \"Akses Rahasia\",\n                    \"tuya_app_type\": \"Aplikasi Mobil\",\n                    \"country_code\": \"Kode Negara\",\n                    \"username\": \"Akun\",\n                    \"password\": \"Password\"\n                }\n            }\n        },\n        \"error\": {\n            \"invalid_auth\": \"Otentikasi Salah\"\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/translations/it.json",
    "content": "{\n    \"config\": {\n        \"flow_title\": \"Configurazione Tuya\",\n        \"step\": {\n            \"user\":{\n                \"title\":\"Integrazione Tuya\",\n                \"data\":{\n                  \"tuya_project_type\": \"Tipo di progetto cloud Tuya\"\n                }\n            },\n            \"login\": {\n                \"title\": \"Tuya\",\n                \"description\": \"Inserisci le tue credenziali Tuya.\",\n                \"data\": {\n                    \"endpoint\": \"Zona di disponibilità\",\n                    \"access_id\": \"ID di accesso\",\n                    \"access_secret\": \"Token segreto\",\n                    \"tuya_app_type\": \"Mobile App\",\n                    \"country_code\": \"Codice Paese\",\n                    \"username\": \"Account\",\n                    \"password\": \"Password\"\n                }\n            }\n        },\n        \"error\": {\n            \"invalid_auth\": \"Autenticazione non valida\"\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/translations/kn.json",
    "content": "{\n    \"config\": {\n        \"flow_title\": \"Tuya ಸಂರಚನೆ\",\n        \"step\": {\n            \"user\":{\n                \"title\":\"Tuya ಏಕೀಕರಣ\",\n                \"data\":{\n                  \"tuya_project_type\": \"Tuya ಕ್ಲೌಡ್ ಯೋಜನೆಯ ಪ್ರಕಾರ\"\n                }\n            },\n            \"login\": {\n                \"title\": \"Tuya\",\n                \"description\": \"ನಿಮ್ಮ Tuya ರುಜುವಾತು ನಮೂದಿಸಿ.\",\n                \"data\": {\n                    \"endpoint\": \"ಲಭ್ಯತೆ ವಲಯ\",\n                    \"access_id\": \"ಆಕ್ಸೇಸ್ ಐಡಿ\",\n                    \"access_secret\": \"ಆಕ್ಸೇಸ್ ಸೀಕ್ರೆಟ್\",\n                    \"tuya_app_type\": \"ಮೊಬೈಲ್ ಆಪ್\",\n                    \"country_code\": \"ಕಂಟ್ರೀ ಕೋಡ್\",\n                    \"username\": \"ಅಕೌಂಟ್\",\n                    \"password\": \"ಪಾಸ್ವರ್ಡ್\"\n                }\n            }\n        },\n        \"error\": {\n            \"invalid_auth\": \"ಅಮಾನ್ಯ ದದೃಢೀಕರಣ\"\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/translations/nl.json",
    "content": "{\n    \"config\": {\n        \"flow_title\": \"Tuya Configuratie\",\n        \"step\": {\n            \"user\":{\n                \"title\":\"Tuya Integratie\",\n                \"data\":{\n                  \"tuya_project_type\": \"Tuya cloud projecttype\"\n                }\n            },\n            \"login\": {\n                \"title\": \"Tuya\",\n                \"description\": \"Voer je Tuya aanmeldgegevens in.\",\n                \"data\": {\n                    \"endpoint\": \"Availability Zone\",\n                    \"access_id\": \"Access ID\",\n                    \"access_secret\": \"Access Secret\",\n                    \"tuya_app_type\": \"Mobile App\",\n                    \"country_code\": \"Landscode\",\n                    \"username\": \"Gebruikersnaam\",\n                    \"password\": \"Wachtwoord\"\n                }\n            }\n        },\n        \"error\": {\n            \"invalid_auth\": \"Authenticatiefout\"\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/translations/pt.json",
    "content": "{\n    \"config\": {\n        \"flow_title\": \"Configuração Tuya\",\n        \"step\": {\n            \"user\":{\n                \"title\":\"Integração Tuya\",\n                \"data\":{\n                  \"tuya_project_type\": \"Tipo de projeto Tuya Cloud\"\n                }\n            },\n            \"login\": {\n                \"title\": \"Tuya\",\n                \"description\": \"Insira as credenciais Tuya.\",\n                \"data\": {\n                    \"endpoint\": \"Região\",\n                    \"access_id\": \"Access ID\",\n                    \"access_secret\": \"Access Secret\",\n                    \"tuya_app_type\": \"Aplicativo\",\n                    \"country_code\": \"Código do País\",\n                    \"username\": \"Conta\",\n                    \"password\": \"Senha\"\n                }\n            }\n        },\n        \"error\": {\n            \"invalid_auth\": \"Autenticação inválida\"\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/translations/zh-Hans.json",
    "content": "{\n    \"config\": {\n        \"flow_title\": \"涂鸦配置\",\n        \"step\": {\n            \"user\":{\n                \"title\":\"Tuya插件\",\n                \"data\":{\n                  \"tuya_project_type\": \"涂鸦云项目类型\"\n                }\n            },\n            \"login\": {\n                \"title\": \"涂鸦\",\n                \"description\": \"请输入涂鸦账户信息。\",\n                \"data\": {\n                    \"endpoint\": \"可用区域\",\n                    \"access_id\": \"Access ID\",\n                    \"access_secret\": \"Access Secret\",\n                    \"tuya_app_type\": \"移动应用\",\n                    \"country_code\": \"国家码\",\n                    \"username\": \"账号\",\n                    \"password\": \"密码\"\n                }\n            }\n        },\n        \"error\": {\n            \"invalid_auth\": \"身份认证无效\"\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/translations/zh-Hant.json",
    "content": "{\n    \"config\": {\n        \"flow_title\": \"塗鴉設定\",\n        \"step\": {\n            \"user\":{\n                \"title\":\"Tuya 套件\",\n                \"data\":{\n                  \"tuya_project_type\": \"塗鴉雲端專案類型\"\n                }\n            },\n            \"login\": {\n                \"title\": \"塗鴉\",\n                \"description\": \"請輸入塗鴉帳號資訊。\",\n                \"data\": {\n                    \"endpoint\": \"區域\",\n                    \"access_id\": \"Access ID\",\n                    \"access_secret\": \"Access Secret\",\n                    \"tuya_app_type\": \"App\",\n                    \"country_code\": \"國家代碼\",\n                    \"username\": \"帳號\",\n                    \"password\": \"密碼\"\n                }\n            }\n        },\n        \"error\": {\n            \"invalid_auth\": \"帳號資訊有誤\"\n        }\n    }\n}\n"
  },
  {
    "path": "home-assistant/custom_components/tuya_v2/vacuum.py",
    "content": "#!/usr/bin/env python3\n\"\"\"Support for Tuya Vacuums.\"\"\"\nfrom __future__ import annotations\n\nimport logging\nfrom typing import Any\n\nfrom homeassistant.components.vacuum import DOMAIN as DEVICE_DOMAIN\nfrom homeassistant.components.vacuum import (\n    STATE_CLEANING,\n    STATE_DOCKED,\n    STATE_IDLE,\n    STATE_PAUSED,\n    STATE_RETURNING,\n    SUPPORT_BATTERY,\n    SUPPORT_PAUSE,\n    SUPPORT_RETURN_HOME,\n    SUPPORT_START,\n    SUPPORT_STATE,\n    SUPPORT_STATUS,\n    SUPPORT_STOP,\n    StateVacuumEntity,\n)\nfrom homeassistant.config_entries import ConfigEntry\nfrom homeassistant.core import HomeAssistant, callback\nfrom homeassistant.helpers.dispatcher import async_dispatcher_connect\nfrom homeassistant.helpers.entity import Entity\nfrom homeassistant.helpers.entity_platform import AddEntitiesCallback\n\nfrom .base import TuyaHaEntity\nfrom .const import (\n    DOMAIN,\n    TUYA_DEVICE_MANAGER,\n    TUYA_DISCOVERY_NEW,\n    TUYA_HA_DEVICES,\n    TUYA_HA_TUYA_MAP,\n)\n\n\n_LOGGER = logging.getLogger(__name__)\n\nTUYA_SUPPORT_TYPE = {\n    \"sd\",  # Robot Vaccuum\n}\n\n# Vacuum(sd),\n# https://developer.tuya.com/docs/iot/open-api/standard-function/electrician-category/categorykgczpc?categoryId=486118\nDPCODE_MODE = \"mode\"\nDPCODE_POWER = \"power\"  # Device switch\nDPCODE_POWER_GO = \"power_go\"  # Cleaning switch\nDPCODE_STATUS = \"status\"\nDPCODE_PAUSE = \"pause\"\nDPCODE_RETURN_HOME = \"switch_charge\"\n\nDPCODE_BATTERY = \"electricity_left\"\nDPCODE_LOCATE = \"seek\"\nDPCODE_STATUS_FULL = \"status_full\"\nDPCODE_CLEAN_AREA = \"clean_area\"\nDPCODE_CLEAN_TIME = \"clean_time\"\nDPCODE_CLEAN_RECORD = \"clean_record\"\n\nasync def async_setup_entry(\n    hass: HomeAssistant, entry: ConfigEntry, async_add_entities: AddEntitiesCallback\n) -> None:\n    \"\"\"Set up tuya vacuum dynamically through tuya discovery.\"\"\"\n    _LOGGER.debug(\"vacuum init\")\n\n    hass.data[DOMAIN][entry.entry_id][TUYA_HA_TUYA_MAP][\n        DEVICE_DOMAIN\n    ] = TUYA_SUPPORT_TYPE\n\n    @callback\n    def async_discover_device(dev_ids):\n        \"\"\"Discover and add a discovered tuya sensor.\"\"\"\n        _LOGGER.debug(f\"vacuum add -> {dev_ids}\")\n        if not dev_ids:\n            return\n        entities = _setup_entities(hass, entry, dev_ids)\n        async_add_entities(entities)\n\n    entry.async_on_unload(\n        async_dispatcher_connect(\n            hass, TUYA_DISCOVERY_NEW.format(DEVICE_DOMAIN), async_discover_device\n        )\n    )\n\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    device_ids = []\n    for (device_id, device) in device_manager.device_map.items():\n        if device.category in TUYA_SUPPORT_TYPE:\n            device_ids.append(device_id)\n    async_discover_device(device_ids)\n\n\ndef _setup_entities(\n    hass: HomeAssistant, entry: ConfigEntry, device_ids: list[str]\n) -> list[Entity]:\n    \"\"\"Set up Tuya Switch device.\"\"\"\n    device_manager = hass.data[DOMAIN][entry.entry_id][TUYA_DEVICE_MANAGER]\n    entities: list[Entity] = []\n    for device_id in device_ids:\n        device = device_manager.device_map[device_id]\n        if device is None:\n            continue\n\n        entities.append(TuyaHaVacuum(device, device_manager))\n        hass.data[DOMAIN][entry.entry_id][TUYA_HA_DEVICES].add(device_id)\n    return entities\n\n\nclass TuyaHaVacuum(TuyaHaEntity, StateVacuumEntity):\n    \"\"\"Tuya Vacuum Device.\"\"\"\n\n    @property\n    def name(self) -> str | None:\n        \"\"\"Return Tuya device name.\"\"\"\n        return self.tuya_device.name\n\n    @property\n    def battery_level(self) -> int | None:\n        \"\"\"Return Tuya device state.\"\"\"\n        return self.tuya_device.status.get(DPCODE_BATTERY)\n\t\t\n    @property\n    def device_state_attributes(self):\n        \"\"\"Return the optional state attributes with device specific additions.\"\"\"\n        attr = {}\n        if self.tuya_device.status.get(DPCODE_MODE):\n          attr[DPCODE_MODE] = self.tuya_device.status.get(DPCODE_MODE)\n        if self.tuya_device.status.get(DPCODE_STATUS):\n          attr[DPCODE_STATUS_FULL] = self.tuya_device.status.get(DPCODE_STATUS)\n        if self.tuya_device.status.get(DPCODE_CLEAN_AREA):\n          attr[DPCODE_CLEAN_AREA] = self.tuya_device.status.get(DPCODE_CLEAN_AREA)\n        if self.tuya_device.status.get(DPCODE_CLEAN_TIME):\n          attr[DPCODE_CLEAN_TIME] = self.tuya_device.status.get(DPCODE_CLEAN_TIME)\n        if self.tuya_device.status.get(DPCODE_CLEAN_RECORD):\n          attr[DPCODE_CLEAN_RECORD] = self.tuya_device.status.get(DPCODE_CLEAN_RECORD)\n        return attr\n\t\t\n    @property\n    def state(self):\n        \"\"\"Return Tuya device state.\"\"\"\n        if (\n            DPCODE_PAUSE in self.tuya_device.status\n            and self.tuya_device.status[DPCODE_PAUSE]\n        ):\n            return STATE_PAUSED\n\n        status = self.tuya_device.status.get(DPCODE_STATUS)\n\n        if status == \"standby\":\n            return STATE_IDLE\n        if status == \"goto_charge\" or status == \"docking\":\n            return STATE_RETURNING\n        if status == \"charging\" or status == \"charge_done\" or status == \"chargecompleted\":\n            return STATE_DOCKED\n        if status == \"pause\":\n            return STATE_PAUSED\n        return STATE_CLEANING\n\n    @property\n    def supported_features(self):\n        \"\"\"Flag supported features.\"\"\"\n        supports = 0\n        if DPCODE_PAUSE in self.tuya_device.status:\n            supports = supports | SUPPORT_PAUSE\n        if DPCODE_RETURN_HOME in self.tuya_device.status:\n            supports = supports | SUPPORT_RETURN_HOME\n        if DPCODE_STATUS in self.tuya_device.status:\n            supports = supports | SUPPORT_STATE\n            supports = supports | SUPPORT_STATUS\n        if DPCODE_POWER_GO in self.tuya_device.status:\n            supports = supports | SUPPORT_STOP\n            supports = supports | SUPPORT_START\n        if DPCODE_BATTERY in self.tuya_device.status:\n            supports = supports | SUPPORT_BATTERY\n        return supports\n\n    def start(self, **kwargs: Any) -> None:\n        \"\"\"Turn the device on.\"\"\"\n        _LOGGER.debug(f\"Starting {self.name}\")\n\n        self._send_command([{\"code\": DPCODE_POWER_GO, \"value\": True}])\n\n    def stop(self, **kwargs: Any) -> None:\n        \"\"\"Turn the device off.\"\"\"\n        _LOGGER.debug(f\"Stopping {self.name}\")\n        self._send_command([{\"code\": DPCODE_POWER_GO, \"value\": False}])\n\n    def pause(self, **kwargs: Any) -> None:\n        \"\"\"Pause the device.\"\"\"\n        _LOGGER.debug(f\"Pausing {self.name}\")\n        self._send_command([{\"code\": DPCODE_PAUSE, \"value\": True}])\n\n    def return_to_base(self, **kwargs: Any) -> None:\n        \"\"\"Return device to Dock\"\"\"\n        _LOGGER.debug(f\"Return to base device {self.name}\")\n        self._send_command([{\"code\": DPCODE_MODE, \"value\": \"chargego\"}])\n\t\t\n    def locate(self, **kwargs: Any) -> None:\n        \"\"\"Return device to Dock\"\"\"\n        _LOGGER.debug(f\"Locate the device {self.name}\")\n        self._send_command([{\"code\": DPCODE_LOCATE, \"value\": True}])\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/__init__.py",
    "content": "\"\"\"Xiaomi cloud map extractor.\"\"\"\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/camera.py",
    "content": "import io\nimport logging\nimport time\nfrom datetime import timedelta\nfrom enum import Enum\nfrom typing import Any, Dict, List, Optional\n\nfrom custom_components.xiaomi_cloud_map_extractor.common.map_data import MapData\nfrom custom_components.xiaomi_cloud_map_extractor.common.vacuum import XiaomiCloudVacuum\nfrom custom_components.xiaomi_cloud_map_extractor.types import Colors, Drawables, ImageConfig, Sizes, Texts\n\ntry:\n    from miio import RoborockVacuum, DeviceException\nexcept ImportError:\n    from miio import Vacuum as RoborockVacuum, DeviceException\nimport PIL.Image as Image\nimport voluptuous as vol\nfrom homeassistant.components.camera import Camera, ENTITY_ID_FORMAT, PLATFORM_SCHEMA, SUPPORT_ON_OFF\nfrom homeassistant.const import CONF_HOST, CONF_NAME, CONF_PASSWORD, CONF_TOKEN, CONF_USERNAME\nfrom homeassistant.helpers import config_validation as cv\nfrom homeassistant.helpers.entity import generate_entity_id\nfrom homeassistant.helpers.reload import async_setup_reload_service\n\nfrom custom_components.xiaomi_cloud_map_extractor.common.map_data_parser import MapDataParser\nfrom custom_components.xiaomi_cloud_map_extractor.common.xiaomi_cloud_connector import XiaomiCloudConnector\nfrom custom_components.xiaomi_cloud_map_extractor.const import *\nfrom custom_components.xiaomi_cloud_map_extractor.dreame.vacuum import DreameVacuum\nfrom custom_components.xiaomi_cloud_map_extractor.roidmi.vacuum import RoidmiVacuum\nfrom custom_components.xiaomi_cloud_map_extractor.unsupported.vacuum import UnsupportedVacuum\nfrom custom_components.xiaomi_cloud_map_extractor.viomi.vacuum import ViomiVacuum\nfrom custom_components.xiaomi_cloud_map_extractor.xiaomi.vacuum import XiaomiVacuum\n\n_LOGGER = logging.getLogger(__name__)\n\nSCAN_INTERVAL = timedelta(seconds=5)\n\nDEFAULT_TRIMS = {\n    CONF_LEFT: 0,\n    CONF_RIGHT: 0,\n    CONF_TOP: 0,\n    CONF_BOTTOM: 0\n}\n\nDEFAULT_SIZES = {\n    CONF_SIZE_VACUUM_RADIUS: 6,\n    CONF_SIZE_PATH_WIDTH: 1,\n    CONF_SIZE_IGNORED_OBSTACLE_RADIUS: 3,\n    CONF_SIZE_IGNORED_OBSTACLE_WITH_PHOTO_RADIUS: 3,\n    CONF_SIZE_OBSTACLE_RADIUS: 3,\n    CONF_SIZE_OBSTACLE_WITH_PHOTO_RADIUS: 3,\n    CONF_SIZE_CHARGER_RADIUS: 6\n}\n\nCOLOR_SCHEMA = vol.Or(\n    vol.All(vol.Length(min=3, max=3), vol.ExactSequence((cv.byte, cv.byte, cv.byte)), vol.Coerce(tuple)),\n    vol.All(vol.Length(min=4, max=4), vol.ExactSequence((cv.byte, cv.byte, cv.byte, cv.byte)), vol.Coerce(tuple))\n)\n\nPERCENT_SCHEMA = vol.All(vol.Coerce(float), vol.Range(min=0, max=100))\n\nPOSITIVE_FLOAT_SCHEMA = vol.All(vol.Coerce(float), vol.Range(min=0))\n\nPLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(\n    {\n        vol.Required(CONF_HOST): cv.string,\n        vol.Required(CONF_TOKEN): vol.All(str, vol.Length(min=32, max=32)),\n        vol.Required(CONF_USERNAME): cv.string,\n        vol.Required(CONF_PASSWORD): cv.string,\n        vol.Optional(CONF_COUNTRY, default=None): vol.Or(vol.In(CONF_AVAILABLE_COUNTRIES), vol.Equal(None)),\n        vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,\n        vol.Optional(CONF_AUTO_UPDATE, default=True): cv.boolean,\n        vol.Optional(CONF_COLORS, default={}): vol.Schema({\n            vol.In(CONF_AVAILABLE_COLORS): COLOR_SCHEMA\n        }),\n        vol.Optional(CONF_ROOM_COLORS, default={}): vol.Schema({\n            cv.positive_int: COLOR_SCHEMA\n        }),\n        vol.Optional(CONF_DRAW, default=[]): vol.All(cv.ensure_list, [vol.In(CONF_AVAILABLE_DRAWABLES)]),\n        vol.Optional(CONF_MAP_TRANSFORM, default={CONF_SCALE: 1, CONF_ROTATE: 0, CONF_TRIM: DEFAULT_TRIMS}):\n            vol.Schema({\n                vol.Optional(CONF_SCALE, default=1): POSITIVE_FLOAT_SCHEMA,\n                vol.Optional(CONF_ROTATE, default=0): vol.In([0, 90, 180, 270]),\n                vol.Optional(CONF_TRIM, default=DEFAULT_TRIMS): vol.Schema({\n                    vol.Optional(CONF_LEFT, default=0): PERCENT_SCHEMA,\n                    vol.Optional(CONF_RIGHT, default=0): PERCENT_SCHEMA,\n                    vol.Optional(CONF_TOP, default=0): PERCENT_SCHEMA,\n                    vol.Optional(CONF_BOTTOM, default=0): PERCENT_SCHEMA\n                }),\n            }),\n        vol.Optional(CONF_ATTRIBUTES, default=[]): vol.All(cv.ensure_list, [vol.In(CONF_AVAILABLE_ATTRIBUTES)]),\n        vol.Optional(CONF_TEXTS, default=[]):\n            vol.All(cv.ensure_list, [vol.Schema({\n                vol.Required(CONF_TEXT): cv.string,\n                vol.Required(CONF_X): vol.Coerce(float),\n                vol.Required(CONF_Y): vol.Coerce(float),\n                vol.Optional(CONF_COLOR, default=(0, 0, 0)): COLOR_SCHEMA,\n                vol.Optional(CONF_FONT, default=None): vol.Or(cv.string, vol.Equal(None)),\n                vol.Optional(CONF_FONT_SIZE, default=0): cv.positive_int\n            })]),\n        vol.Optional(CONF_SIZES, default=DEFAULT_SIZES): vol.Schema({\n            vol.Optional(CONF_SIZE_VACUUM_RADIUS,\n                         default=DEFAULT_SIZES[CONF_SIZE_VACUUM_RADIUS]): POSITIVE_FLOAT_SCHEMA,\n            vol.Optional(CONF_SIZE_PATH_WIDTH,\n                         default=DEFAULT_SIZES[CONF_SIZE_PATH_WIDTH]): POSITIVE_FLOAT_SCHEMA,\n            vol.Optional(CONF_SIZE_IGNORED_OBSTACLE_RADIUS,\n                         default=DEFAULT_SIZES[CONF_SIZE_IGNORED_OBSTACLE_RADIUS]): POSITIVE_FLOAT_SCHEMA,\n            vol.Optional(CONF_SIZE_IGNORED_OBSTACLE_WITH_PHOTO_RADIUS,\n                         default=DEFAULT_SIZES[CONF_SIZE_IGNORED_OBSTACLE_WITH_PHOTO_RADIUS]): POSITIVE_FLOAT_SCHEMA,\n            vol.Optional(CONF_SIZE_OBSTACLE_RADIUS,\n                         default=DEFAULT_SIZES[CONF_SIZE_OBSTACLE_RADIUS]): POSITIVE_FLOAT_SCHEMA,\n            vol.Optional(CONF_SIZE_OBSTACLE_WITH_PHOTO_RADIUS,\n                         default=DEFAULT_SIZES[CONF_SIZE_OBSTACLE_WITH_PHOTO_RADIUS]): POSITIVE_FLOAT_SCHEMA,\n            vol.Optional(CONF_SIZE_CHARGER_RADIUS,\n                         default=DEFAULT_SIZES[CONF_SIZE_CHARGER_RADIUS]): POSITIVE_FLOAT_SCHEMA\n        }),\n        vol.Optional(CONF_STORE_MAP_RAW, default=False): cv.boolean,\n        vol.Optional(CONF_STORE_MAP_IMAGE, default=False): cv.boolean,\n        vol.Optional(CONF_STORE_MAP_PATH, default=\"/tmp\"): cv.string,\n        vol.Optional(CONF_FORCE_API, default=None): vol.Or(vol.In(CONF_AVAILABLE_APIS), vol.Equal(None))\n    })\n\n\nasync def async_setup_platform(hass, config, async_add_entities, discovery_info=None):\n    await async_setup_reload_service(hass, DOMAIN, PLATFORMS)\n\n    host = config[CONF_HOST]\n    token = config[CONF_TOKEN]\n    username = config[CONF_USERNAME]\n    password = config[CONF_PASSWORD]\n    country = config[CONF_COUNTRY]\n    name = config[CONF_NAME]\n    should_poll = config[CONF_AUTO_UPDATE]\n    image_config = config[CONF_MAP_TRANSFORM]\n    colors = config[CONF_COLORS]\n    room_colors = config[CONF_ROOM_COLORS]\n    for room, color in room_colors.items():\n        colors[f\"{COLOR_ROOM_PREFIX}{room}\"] = color\n    drawables = config[CONF_DRAW]\n    sizes = config[CONF_SIZES]\n    texts = config[CONF_TEXTS]\n    if DRAWABLE_ALL in drawables:\n        drawables = CONF_AVAILABLE_DRAWABLES[1:]\n    attributes = config[CONF_ATTRIBUTES]\n    store_map_raw = config[CONF_STORE_MAP_RAW]\n    store_map_image = config[CONF_STORE_MAP_IMAGE]\n    store_map_path = config[CONF_STORE_MAP_PATH]\n    force_api = config[CONF_FORCE_API]\n    entity_id = generate_entity_id(ENTITY_ID_FORMAT, name, hass=hass)\n    async_add_entities([VacuumCamera(entity_id, host, token, username, password, country, name, should_poll,\n                                     image_config, colors, drawables, sizes, texts, attributes, store_map_raw,\n                                     store_map_image, store_map_path, force_api)])\n\n\nclass VacuumCamera(Camera):\n    def __init__(self, entity_id: str, host: str, token: str, username: str, password: str, country: str, name: str,\n                 should_poll: bool, image_config: ImageConfig, colors: Colors, drawables: Drawables, sizes: Sizes,\n                 texts: Texts, attributes: List[str], store_map_raw: bool, store_map_image: bool, store_map_path: str,\n                 force_api: str):\n        super().__init__()\n        self.entity_id = entity_id\n        self.content_type = CONTENT_TYPE\n        self._vacuum = RoborockVacuum(host, token)\n        self._connector = XiaomiCloudConnector(username, password)\n        self._status = CameraStatus.INITIALIZING\n        self._device = None\n        self._name = name\n        self._should_poll = should_poll\n        self._image_config = image_config\n        self._colors = colors\n        self._drawables = drawables\n        self._sizes = sizes\n        self._texts = texts\n        self._attributes = attributes\n        self._store_map_raw = store_map_raw\n        self._store_map_image = store_map_image\n        self._store_map_path = store_map_path\n        self._forced_api = force_api\n        self._used_api = None\n        self._map_saved = None\n        self._image = None\n        self._map_data = None\n        self._logged_in = False\n        self._logged_in_previously = True\n        self._received_map_name_previously = True\n        self._country = country\n\n    async def async_added_to_hass(self) -> None:\n        self.async_schedule_update_ha_state(True)\n\n    @property\n    def frame_interval(self) -> float:\n        return 1\n\n    def camera_image(self, width: Optional[int] = None, height: Optional[int] = None) -> Optional[bytes]:\n        return self._image\n\n    @property\n    def name(self) -> str:\n        return self._name\n\n    def turn_on(self):\n        self._should_poll = True\n\n    def turn_off(self):\n        self._should_poll = False\n\n    @property\n    def supported_features(self) -> int:\n        return SUPPORT_ON_OFF\n\n    @property\n    def extra_state_attributes(self) -> Dict[str, Any]:\n        attributes = {}\n        if self._map_data is not None:\n            attributes.update(self.extract_attributes(self._map_data, self._attributes, self._country))\n        if self._store_map_raw:\n            attributes[ATTRIBUTE_MAP_SAVED] = self._map_saved\n        if self._device is not None:\n            attributes[ATTR_MODEL] = self._device.model\n            attributes[ATTR_USED_API] = self._used_api\n        if self._connector.two_factor_auth_url is not None:\n            attributes[ATTR_TWO_FACTOR_AUTH] = self._connector.two_factor_auth_url\n        return attributes\n\n    @property\n    def should_poll(self) -> bool:\n        return self._should_poll\n\n    @staticmethod\n    def extract_attributes(map_data: MapData, attributes_to_return: List[str], country) -> Dict[str, Any]:\n        attributes = {}\n        rooms = []\n        if map_data.rooms is not None:\n            rooms = dict(filter(lambda x: x[0] is not None, ((x[0], x[1].name) for x in map_data.rooms.items())))\n            if len(rooms) == 0:\n                rooms = list(map_data.rooms.keys())\n        for name, value in {\n            ATTRIBUTE_CALIBRATION: map_data.calibration(),\n            ATTRIBUTE_CHARGER: map_data.charger,\n            ATTRIBUTE_CLEANED_ROOMS: map_data.cleaned_rooms,\n            ATTRIBUTE_COUNTRY: country,\n            ATTRIBUTE_GOTO: map_data.goto,\n            ATTRIBUTE_GOTO_PATH: map_data.goto_path,\n            ATTRIBUTE_GOTO_PREDICTED_PATH: map_data.predicted_path,\n            ATTRIBUTE_IGNORED_OBSTACLES: map_data.ignored_obstacles,\n            ATTRIBUTE_IGNORED_OBSTACLES_WITH_PHOTO: map_data.ignored_obstacles_with_photo,\n            ATTRIBUTE_IMAGE: map_data.image,\n            ATTRIBUTE_IS_EMPTY: map_data.image.is_empty,\n            ATTRIBUTE_MAP_NAME: map_data.map_name,\n            ATTRIBUTE_NO_GO_AREAS: map_data.no_go_areas,\n            ATTRIBUTE_NO_MOPPING_AREAS: map_data.no_mopping_areas,\n            ATTRIBUTE_OBSTACLES: map_data.obstacles,\n            ATTRIBUTE_OBSTACLES_WITH_PHOTO: map_data.obstacles_with_photo,\n            ATTRIBUTE_PATH: map_data.path,\n            ATTRIBUTE_ROOM_NUMBERS: rooms,\n            ATTRIBUTE_ROOMS: map_data.rooms,\n            ATTRIBUTE_VACUUM_POSITION: map_data.vacuum_position,\n            ATTRIBUTE_VACUUM_ROOM: map_data.vacuum_room,\n            ATTRIBUTE_VACUUM_ROOM_NAME: map_data.vacuum_room_name,\n            ATTRIBUTE_WALLS: map_data.walls,\n            ATTRIBUTE_ZONES: map_data.zones\n        }.items():\n            if name in attributes_to_return:\n                attributes[name] = value\n        return attributes\n\n    def update(self):\n        counter = 10\n        if self._status != CameraStatus.TWO_FACTOR_AUTH_REQUIRED and not self._logged_in:\n            self._handle_login()\n        if self._device is None and self._logged_in:\n            self._handle_device()\n        map_name = self._handle_map_name(counter)\n        if map_name == \"retry\" and self._device is not None:\n            self._status = CameraStatus.FAILED_TO_RETRIEVE_MAP_FROM_VACUUM\n        self._received_map_name_previously = map_name != \"retry\"\n        if self._logged_in and map_name != \"retry\" and self._device is not None:\n            self._handle_map_data(map_name)\n        else:\n            _LOGGER.debug(\"Unable to retrieve map, reasons: Logged in - %s, map name - %s, device retrieved - %s\",\n                          self._logged_in, map_name, self._device is not None)\n            self._set_map_data(MapDataParser.create_empty(self._colors, str(self._status)))\n        self._logged_in_previously = self._logged_in\n\n    def _handle_login(self):\n        _LOGGER.debug(\"Logging in...\")\n        self._logged_in = self._connector.login()\n        if self._logged_in is None:\n            _LOGGER.debug(\"2FA required\")\n            self._status = CameraStatus.TWO_FACTOR_AUTH_REQUIRED\n        elif self._logged_in:\n            _LOGGER.debug(\"Logged in\")\n            self._status = CameraStatus.LOGGED_IN\n        else:\n            _LOGGER.debug(\"Failed to log in\")\n            self._status = CameraStatus.FAILED_LOGIN\n            if self._logged_in_previously:\n                _LOGGER.error(\"Unable to log in, check credentials\")\n\n    def _handle_device(self):\n        _LOGGER.debug(\"Retrieving device info, country: %s\", self._country)\n        country, user_id, device_id, model = self._connector.get_device_details(self._vacuum.token, self._country)\n        if model is not None:\n            self._country = country\n            _LOGGER.debug(\"Retrieved device model: %s\", model)\n            self._device = self._create_device(user_id, device_id, model)\n            _LOGGER.debug(\"Created device, used api: %s\", self._used_api)\n        else:\n            _LOGGER.error(\"Failed to retrieve model\")\n            self._status = CameraStatus.FAILED_TO_RETRIEVE_DEVICE\n\n    def _handle_map_name(self, counter: int) -> str:\n        map_name = \"retry\"\n        if self._device is not None and not self._device.should_get_map_from_vacuum():\n            map_name = \"0\"\n        while map_name == \"retry\" and counter > 0:\n            _LOGGER.debug(\"Retrieving map name from device\")\n            time.sleep(0.1)\n            try:\n                map_name = self._vacuum.map()[0]\n                _LOGGER.debug(\"Map name %s\", map_name)\n            except OSError as exc:\n                _LOGGER.error(\"Got OSError while fetching the state: %s\", exc)\n            except DeviceException as exc:\n                if self._received_map_name_previously:\n                    _LOGGER.warning(\"Got exception while fetching the state: %s\", exc)\n                self._received_map_name_previously = False\n            finally:\n                counter = counter - 1\n        return map_name\n\n    def _handle_map_data(self, map_name: str):\n        _LOGGER.debug(\"Retrieving map from Xiaomi cloud\")\n        store_map_path = self._store_map_path if self._store_map_raw else None\n        map_data, map_stored = self._device.get_map(map_name, self._colors, self._drawables, self._texts,\n                                                    self._sizes, self._image_config, store_map_path)\n        if map_data is not None:\n            # noinspection PyBroadException\n            try:\n                _LOGGER.debug(\"Map data retrieved\")\n                self._map_saved = map_stored\n                if map_data.image.is_empty:\n                    _LOGGER.debug(\"Map is empty\")\n                    self._status = CameraStatus.EMPTY_MAP\n                    if self._map_data is None or self._map_data.image.is_empty:\n                        self._set_map_data(map_data)\n                else:\n                    _LOGGER.debug(\"Map is ok\")\n                    self._set_map_data(map_data)\n                    self._status = CameraStatus.OK\n            except:\n                _LOGGER.warning(\"Unable to parse map data\")\n                self._status = CameraStatus.UNABLE_TO_PARSE_MAP\n        else:\n            self._logged_in = False\n            _LOGGER.warning(\"Unable to retrieve map data\")\n            self._status = CameraStatus.UNABLE_TO_RETRIEVE_MAP\n\n    def _set_map_data(self, map_data: MapData):\n        img_byte_arr = io.BytesIO()\n        map_data.image.data.save(img_byte_arr, format='PNG')\n        self._image = img_byte_arr.getvalue()\n        self._map_data = map_data\n        self._store_image()\n\n    def _create_device(self, user_id: str, device_id: str, model: str) -> XiaomiCloudVacuum:\n        self._used_api = self._detect_api(model)\n        if self._used_api == CONF_AVAILABLE_API_XIAOMI:\n            return XiaomiVacuum(self._connector, self._country, user_id, device_id, model)\n        if self._used_api == CONF_AVAILABLE_API_VIOMI:\n            return ViomiVacuum(self._connector, self._country, user_id, device_id, model)\n        if self._used_api == CONF_AVAILABLE_API_ROIDMI:\n            return RoidmiVacuum(self._connector, self._country, user_id, device_id, model)\n        if self._used_api == CONF_AVAILABLE_API_DREAME:\n            return DreameVacuum(self._connector, self._country, user_id, device_id, model)\n        return UnsupportedVacuum(self._connector, self._country, user_id, device_id, model)\n\n    def _detect_api(self, model: str) -> Optional[str]:\n        if self._forced_api is not None:\n            return self._forced_api\n        if model in API_EXCEPTIONS:\n            return API_EXCEPTIONS[model]\n\n        def list_contains_model(prefixes, model_to_check):\n            return len(list(filter(lambda x: model_to_check.startswith(x), prefixes))) > 0\n\n        filtered = list(filter(lambda x: list_contains_model(x[1], model), AVAILABLE_APIS.items()))\n        if len(filtered) > 0:\n            return filtered[0][0]\n        return None\n\n    def _store_image(self):\n        if self._store_map_image:\n            try:\n                image = Image.open(io.BytesIO(self._image))\n                image.save(f\"{self._store_map_path}/map_image_{self._device.model}.png\")\n            except:\n                _LOGGER.warning(\"Error while saving image\")\n\n\nclass CameraStatus(Enum):\n    EMPTY_MAP = 'Empty map'\n    FAILED_LOGIN = 'Failed to login'\n    FAILED_TO_RETRIEVE_DEVICE = 'Failed to retrieve device'\n    FAILED_TO_RETRIEVE_MAP_FROM_VACUUM = 'Failed to retrieve map from vacuum'\n    INITIALIZING = 'Initializing'\n    NOT_LOGGED_IN = 'Not logged in'\n    OK = 'OK'\n    LOGGED_IN = 'Logged in'\n    TWO_FACTOR_AUTH_REQUIRED = 'Two factor auth required (see logs)'\n    UNABLE_TO_PARSE_MAP = 'Unable to parse map'\n    UNABLE_TO_RETRIEVE_MAP = 'Unable to retrieve map'\n\n    def __str__(self):\n        return str(self._value_)\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/common/__init__.py",
    "content": "\"\"\"Basic functionalities, common for all vacuums.\"\"\"\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/common/image_handler.py",
    "content": "import logging\nimport math\nfrom typing import Callable, Dict, List\n\nfrom PIL import Image, ImageDraw, ImageFont\nfrom PIL.Image import Image as ImageType\n\nfrom custom_components.xiaomi_cloud_map_extractor.common.map_data import Area, ImageData, Obstacle, Path, Point, Room, \\\n    Wall, Zone\nfrom custom_components.xiaomi_cloud_map_extractor.const import *\nfrom custom_components.xiaomi_cloud_map_extractor.types import Color, Colors, Sizes, Texts\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass ImageHandler:\n    COLORS = {\n        COLOR_MAP_INSIDE: (32, 115, 185),\n        COLOR_MAP_OUTSIDE: (19, 87, 148),\n        COLOR_MAP_WALL: (100, 196, 254),\n        COLOR_MAP_WALL_V2: (93, 109, 126),\n        COLOR_GREY_WALL: (93, 109, 126),\n        COLOR_CLEANED_AREA: (127, 127, 127, 127),\n        COLOR_PATH: (147, 194, 238),\n        COLOR_GOTO_PATH: (0, 255, 0),\n        COLOR_PREDICTED_PATH: (255, 255, 0),\n        COLOR_ZONES: (0xAD, 0xD8, 0xFF, 0x8F),\n        COLOR_ZONES_OUTLINE: (0xAD, 0xD8, 0xFF),\n        COLOR_VIRTUAL_WALLS: (255, 0, 0),\n        COLOR_NEW_DISCOVERED_AREA: (64, 64, 64),\n        COLOR_NO_GO_ZONES: (255, 33, 55, 127),\n        COLOR_NO_GO_ZONES_OUTLINE: (255, 0, 0),\n        COLOR_NO_MOPPING_ZONES: (163, 130, 211, 127),\n        COLOR_NO_MOPPING_ZONES_OUTLINE: (163, 130, 211),\n        COLOR_CHARGER: (0x66, 0xfe, 0xda, 0x7f),\n        COLOR_CHARGER_OUTLINE: (0x66, 0xfe, 0xda, 0x7f),\n        COLOR_ROBO: (0xff, 0xff, 0xff),\n        COLOR_ROBO_OUTLINE: (0, 0, 0),\n        COLOR_ROOM_NAMES: (0, 0, 0),\n        COLOR_OBSTACLE: (0, 0, 0, 128),\n        COLOR_IGNORED_OBSTACLE: (0, 0, 0, 128),\n        COLOR_OBSTACLE_WITH_PHOTO: (0, 0, 0, 128),\n        COLOR_IGNORED_OBSTACLE_WITH_PHOTO: (0, 0, 0, 128),\n        COLOR_UNKNOWN: (0, 0, 0),\n        COLOR_SCAN: (0xDF, 0xDF, 0xDF),\n        COLOR_ROOM_1: (240, 178, 122),\n        COLOR_ROOM_2: (133, 193, 233),\n        COLOR_ROOM_3: (217, 136, 128),\n        COLOR_ROOM_4: (52, 152, 219),\n        COLOR_ROOM_5: (205, 97, 85),\n        COLOR_ROOM_6: (243, 156, 18),\n        COLOR_ROOM_7: (88, 214, 141),\n        COLOR_ROOM_8: (245, 176, 65),\n        COLOR_ROOM_9: (252, 212, 81),\n        COLOR_ROOM_10: (72, 201, 176),\n        COLOR_ROOM_11: (84, 153, 199),\n        COLOR_ROOM_12: (133, 193, 233),\n        COLOR_ROOM_13: (245, 176, 65),\n        COLOR_ROOM_14: (82, 190, 128),\n        COLOR_ROOM_15: (72, 201, 176),\n        COLOR_ROOM_16: (165, 105, 189)\n    }\n    ROOM_COLORS = [COLOR_ROOM_1, COLOR_ROOM_2, COLOR_ROOM_3, COLOR_ROOM_4, COLOR_ROOM_5, COLOR_ROOM_6, COLOR_ROOM_7,\n                   COLOR_ROOM_8, COLOR_ROOM_9, COLOR_ROOM_10, COLOR_ROOM_11, COLOR_ROOM_12, COLOR_ROOM_13,\n                   COLOR_ROOM_14, COLOR_ROOM_15, COLOR_ROOM_16]\n\n    @staticmethod\n    def create_empty_map_image(colors: Colors, text: str = \"NO MAP\") -> ImageType:\n        color = ImageHandler.__get_color__(COLOR_MAP_OUTSIDE, colors)\n        image = Image.new('RGBA', (300, 200), color=color)\n        if sum(color[0:3]) > 382:\n            text_color = (0, 0, 0)\n        else:\n            text_color = (255, 255, 255)\n        draw = ImageDraw.Draw(image, \"RGBA\")\n        w, h = draw.textsize(text)\n        draw.text(((image.size[0] - w) / 2, (image.size[1] - h) / 2), text, fill=text_color)\n        return image\n\n    @staticmethod\n    def draw_path(image: ImageData, path: Path, sizes: Sizes, colors: Colors, scale: float):\n        ImageHandler.__draw_path__(image, path, sizes, ImageHandler.__get_color__(COLOR_PATH, colors), scale)\n\n    @staticmethod\n    def draw_goto_path(image: ImageData, path: Path, sizes: Sizes, colors: Colors, scale: float):\n        ImageHandler.__draw_path__(image, path, sizes, ImageHandler.__get_color__(COLOR_GOTO_PATH, colors), scale)\n\n    @staticmethod\n    def draw_predicted_path(image: ImageData, path: Path, sizes: Sizes, colors: Colors, scale: float):\n        ImageHandler.__draw_path__(image, path, sizes, ImageHandler.__get_color__(COLOR_PREDICTED_PATH, colors), scale)\n\n    @staticmethod\n    def draw_no_go_areas(image: ImageData, areas: List[Area], colors: Colors):\n        ImageHandler.__draw_areas__(image, areas,\n                                    ImageHandler.__get_color__(COLOR_NO_GO_ZONES, colors),\n                                    ImageHandler.__get_color__(COLOR_NO_GO_ZONES_OUTLINE, colors))\n\n    @staticmethod\n    def draw_no_mopping_areas(image: ImageData, areas: List[Area], colors: Colors):\n        ImageHandler.__draw_areas__(image, areas,\n                                    ImageHandler.__get_color__(COLOR_NO_MOPPING_ZONES, colors),\n                                    ImageHandler.__get_color__(COLOR_NO_MOPPING_ZONES_OUTLINE, colors))\n\n    @staticmethod\n    def draw_walls(image: ImageData, walls: List[Wall], colors: Colors):\n        draw = ImageDraw.Draw(image.data, 'RGBA')\n        for wall in walls:\n            draw.line(wall.to_img(image.dimensions).as_list(),\n                      ImageHandler.__get_color__(COLOR_VIRTUAL_WALLS, colors), width=2)\n\n    @staticmethod\n    def draw_zones(image: ImageData, zones: List[Zone], colors: Colors):\n        areas = [z.as_area() for z in zones]\n        ImageHandler.__draw_areas__(image, areas,\n                                    ImageHandler.__get_color__(COLOR_ZONES, colors),\n                                    ImageHandler.__get_color__(COLOR_ZONES_OUTLINE, colors))\n\n    @staticmethod\n    def draw_charger(image: ImageData, charger: Point, sizes: Sizes, colors: Colors):\n        color = ImageHandler.__get_color__(COLOR_CHARGER, colors)\n        outline = ImageHandler.__get_color__(COLOR_CHARGER_OUTLINE, colors)\n        radius = sizes[CONF_SIZE_CHARGER_RADIUS]\n        ImageHandler.__draw_pieslice__(image, charger, radius, outline, color)\n\n    @staticmethod\n    def draw_obstacles(image: ImageData, obstacles, sizes: Sizes, colors: Colors):\n        color = ImageHandler.__get_color__(COLOR_OBSTACLE, colors)\n        radius = sizes[CONF_SIZE_OBSTACLE_RADIUS]\n        ImageHandler.draw_all_obstacles(image, obstacles, radius, color)\n\n    @staticmethod\n    def draw_ignored_obstacles(image: ImageData, obstacles: List[Obstacle], sizes: Sizes, colors: Colors):\n        color = ImageHandler.__get_color__(COLOR_IGNORED_OBSTACLE, colors)\n        radius = sizes[CONF_SIZE_IGNORED_OBSTACLE_RADIUS]\n        ImageHandler.draw_all_obstacles(image, obstacles, radius, color)\n\n    @staticmethod\n    def draw_obstacles_with_photo(image: ImageData, obstacles: List[Obstacle], sizes: Sizes, colors: Colors):\n        color = ImageHandler.__get_color__(COLOR_OBSTACLE_WITH_PHOTO, colors)\n        radius = sizes[CONF_SIZE_OBSTACLE_WITH_PHOTO_RADIUS]\n        ImageHandler.draw_all_obstacles(image, obstacles, radius, color)\n\n    @staticmethod\n    def draw_ignored_obstacles_with_photo(image: ImageData, obstacles: List[Obstacle], sizes: Sizes, colors: Colors):\n        color = ImageHandler.__get_color__(COLOR_IGNORED_OBSTACLE_WITH_PHOTO, colors)\n        radius = sizes[CONF_SIZE_IGNORED_OBSTACLE_WITH_PHOTO_RADIUS]\n        ImageHandler.draw_all_obstacles(image, obstacles, radius, color)\n\n    @staticmethod\n    def draw_all_obstacles(image: ImageData, obstacles: List[Obstacle], radius: float, color: Color):\n        for obstacle in obstacles:\n            ImageHandler.__draw_circle__(image, obstacle, radius, color, color)\n\n    @staticmethod\n    def draw_vacuum_position(image: ImageData, vacuum_position: Point, sizes: Sizes, colors: Colors):\n        color = ImageHandler.__get_color__(COLOR_ROBO, colors)\n        outline = ImageHandler.__get_color__(COLOR_ROBO_OUTLINE, colors)\n        radius = sizes[CONF_SIZE_VACUUM_RADIUS]\n        ImageHandler.__draw_vacuum__(image, vacuum_position, radius, outline, color)\n\n    @staticmethod\n    def draw_room_names(image: ImageData, rooms: Dict[int, Room], colors: Colors):\n        color = ImageHandler.__get_color__(COLOR_ROOM_NAMES, colors)\n        for room in rooms.values():\n            p = room.point()\n            if p is not None:\n                point = p.to_img(image.dimensions)\n                ImageHandler.__draw_text__(image, room.name, point.x, point.y, color)\n\n    @staticmethod\n    def rotate(image: ImageData):\n        if image.dimensions.rotation == 90:\n            image.data = image.data.transpose(Image.ROTATE_90)\n        if image.dimensions.rotation == 180:\n            image.data = image.data.transpose(Image.ROTATE_180)\n        if image.dimensions.rotation == 270:\n            image.data = image.data.transpose(Image.ROTATE_270)\n\n    @staticmethod\n    def draw_texts(image: ImageData, texts: Texts):\n        for text_config in texts:\n            x = text_config[CONF_X] * image.data.size[0] / 100\n            y = text_config[CONF_Y] * image.data.size[1] / 100\n            ImageHandler.__draw_text__(image, text_config[CONF_TEXT], x, y, text_config[CONF_COLOR],\n                                       text_config[CONF_FONT], text_config[CONF_FONT_SIZE])\n\n    @staticmethod\n    def draw_layer(image: ImageData, layer_name: str):\n        ImageHandler.__draw_layer__(image, image.additional_layers[layer_name])\n\n    @staticmethod\n    def __use_transparency__(*colors):\n        return any(len(color) > 3 for color in colors)\n\n    @staticmethod\n    def __draw_vacuum__(image: ImageData, vacuum_pos, r, outline, fill):\n        def draw_func(draw: ImageDraw):\n            if vacuum_pos.a is None:\n                vacuum_pos.a = 0\n            point = vacuum_pos.to_img(image.dimensions)\n            r_scaled = r / 16\n            # main outline\n            coords = [point.x - r, point.y - r, point.x + r, point.y + r]\n            draw.ellipse(coords, outline=outline, fill=fill)\n            if r >= 8:\n                # secondary outline\n                r2 = r_scaled * 14\n                x = point.x\n                y = point.y\n                coords = [x - r2, y - r2, x + r2, y + r2]\n                draw.ellipse(coords, outline=outline, fill=None)\n            # bin cover\n            a1 = (vacuum_pos.a + 104) / 180 * math.pi\n            a2 = (vacuum_pos.a - 104) / 180 * math.pi\n            r2 = r_scaled * 13\n            x1 = point.x - r2 * math.cos(a1)\n            y1 = point.y + r2 * math.sin(a1)\n            x2 = point.x - r2 * math.cos(a2)\n            y2 = point.y + r2 * math.sin(a2)\n            draw.line([x1, y1, x2, y2], width=1, fill=outline)\n            # lidar\n            angle = vacuum_pos.a / 180 * math.pi\n            r2 = r_scaled * 3\n            x = point.x + r2 * math.cos(angle)\n            y = point.y - r2 * math.sin(angle)\n            r2 = r_scaled * 4\n            coords = [x - r2, y - r2, x + r2, y + r2]\n            draw.ellipse(coords, outline=outline, fill=fill)\n            # button\n            half_color = (\n                (outline[0] + fill[0]) // 2,\n                (outline[1] + fill[1]) // 2,\n                (outline[2] + fill[2]) // 2\n            )\n            r2 = r_scaled * 10\n            x = point.x + r2 * math.cos(angle)\n            y = point.y - r2 * math.sin(angle)\n            r2 = r_scaled * 2\n            coords = [x - r2, y - r2, x + r2, y + r2]\n            draw.ellipse(coords, outline=half_color, fill=half_color)\n\n        ImageHandler.__draw_on_new_layer__(image, draw_func, 1, ImageHandler.__use_transparency__(outline, fill))\n\n    @staticmethod\n    def __draw_circle__(image: ImageData, center: Point, r: float, outline: Color, fill: Color):\n        def draw_func(draw: ImageDraw):\n            point = center.to_img(image.dimensions)\n            coords = [point.x - r, point.y - r, point.x + r, point.y + r]\n            draw.ellipse(coords, outline=outline, fill=fill)\n\n        ImageHandler.__draw_on_new_layer__(image, draw_func, 1, ImageHandler.__use_transparency__(outline, fill))\n\n    @staticmethod\n    def __draw_pieslice__(image: ImageData, position, r, outline, fill):\n        def draw_func(draw: ImageDraw):\n            point = position.to_img(image.dimensions)\n            angle = -position.a if position.a is not None else 0\n            coords = [point.x - r, point.y - r, point.x + r, point.y + r]\n            draw.pieslice(coords, angle + 90, angle - 90, outline=\"black\", fill=fill)\n\n        ImageHandler.__draw_on_new_layer__(image, draw_func, 1, ImageHandler.__use_transparency__(outline, fill))\n\n    @staticmethod\n    def __draw_areas__(image: ImageData, areas: List[Area], fill: Color, outline: Color):\n        if len(areas) == 0:\n            return\n\n        use_transparency = ImageHandler.__use_transparency__(outline, fill)\n        for area in areas:\n            def draw_func(draw: ImageDraw):\n                draw.polygon(area.to_img(image.dimensions).as_list(), fill, outline)\n\n            ImageHandler.__draw_on_new_layer__(image, draw_func, 1, use_transparency)\n\n    @staticmethod\n    def __draw_path__(image: ImageData, path: Path, sizes: Sizes, color: Color, scale: float):\n        if len(path.path) < 1:\n            return\n\n        path_width = sizes[CONF_SIZE_PATH_WIDTH]\n\n        def draw_func(draw: ImageDraw):\n            for current_path in path.path:\n                if len(current_path) > 1:\n                    s = current_path[0].to_img(image.dimensions)\n                    for point in current_path[1:]:\n                        e = point.to_img(image.dimensions)\n                        draw.line([s.x * scale, s.y * scale, e.x * scale, e.y * scale],\n                                  width=int(scale * path_width), fill=color)\n                        s = e\n\n        ImageHandler.__draw_on_new_layer__(image, draw_func, scale, ImageHandler.__use_transparency__(color))\n\n    @staticmethod\n    def __draw_text__(image: ImageData, text: str, x: float, y: float, color: Color, font_file=None, font_size=None):\n        def draw_func(draw: ImageDraw):\n            font = ImageFont.load_default()\n            try:\n                if font_file is not None and font_size > 0:\n                    font = ImageFont.truetype(font_file, font_size)\n            except OSError:\n                _LOGGER.warning(\"Unable to find font file: %s\", font_file)\n            except ImportError:\n                _LOGGER.warning(\"Unable to open font: %s\", font_file)\n            finally:\n                w, h = draw.textsize(text, font)\n                draw.text((x - w / 2, y - h / 2), text, font=font, fill=color)\n\n        ImageHandler.__draw_on_new_layer__(image, draw_func, 1, ImageHandler.__use_transparency__(color))\n\n    @staticmethod\n    def __get_color__(name, colors: Colors, default_name: str = None) -> Color:\n        if name in colors:\n            return colors[name]\n        if default_name is None:\n            return ImageHandler.COLORS[name]\n        return ImageHandler.COLORS[default_name]\n\n    @staticmethod\n    def __draw_on_new_layer__(image: ImageData, draw_function: Callable, scale: float = 1, use_transparency=False):\n        if scale == 1 and not use_transparency:\n            draw = ImageDraw.Draw(image.data, \"RGBA\")\n            draw_function(draw)\n        else:\n            size = [int(image.data.size[0] * scale), int(image.data.size[1] * scale)]\n            layer = Image.new(\"RGBA\", size, (255, 255, 255, 0))\n            draw = ImageDraw.Draw(layer, \"RGBA\")\n            draw_function(draw)\n            if scale != 1:\n                layer = layer.resize(image.data.size, resample=Image.BOX)\n            ImageHandler.__draw_layer__(image, layer)\n\n    @staticmethod\n    def __draw_layer__(image: ImageData, layer: ImageType):\n        image.data = Image.alpha_composite(image.data, layer)\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/common/map_data.py",
    "content": "from __future__ import annotations\n\nfrom typing import Any, Callable, Dict, List, Optional, Set\n\nfrom PIL.Image import Image as ImageType\n\nfrom custom_components.xiaomi_cloud_map_extractor.const import *\nfrom custom_components.xiaomi_cloud_map_extractor.types import CalibrationPoints, ImageConfig\n\n\nclass Point:\n    def __init__(self, x: float, y: float, a=None):\n        self.x = x\n        self.y = y\n        self.a = a\n\n    def __str__(self) -> str:\n        if self.a is None:\n            return f\"({self.x}, {self.y})\"\n        return f\"({self.x}, {self.y}, a = {self.a})\"\n\n    def __repr__(self) -> str:\n        return self.__str__()\n\n    def __eq__(self, other: Point) -> bool:\n        return other is not None and self.x == other.x and self.y == other.y and self.a == other.a\n\n    def as_dict(self) -> Dict[str, Any]:\n        if self.a is None:\n            return {\n                ATTR_X: self.x,\n                ATTR_Y: self.y\n            }\n        return {\n            ATTR_X: self.x,\n            ATTR_Y: self.y,\n            ATTR_A: self.a\n        }\n\n    def to_img(self, image_dimensions) -> Point:\n        return image_dimensions.to_img(self)\n\n    def rotated(self, image_dimensions) -> Point:\n        alpha = image_dimensions.rotation\n        w = int(image_dimensions.width * image_dimensions.scale)\n        h = int(image_dimensions.height * image_dimensions.scale)\n        x = self.x\n        y = self.y\n        while alpha > 0:\n            tmp = y\n            y = w - x\n            x = tmp\n            tmp = h\n            h = w\n            w = tmp\n            alpha = alpha - 90\n        return Point(x, y)\n\n    def __mul__(self, other) -> Point:\n        return Point(self.x * other, self.y * other, self.a)\n\n    def __truediv__(self, other) -> Point:\n        return Point(self.x / other, self.y / other, self.a)\n\n\nclass Obstacle(Point):\n    def __init__(self, x: float, y: float, details: Dict[str, Any]):\n        super().__init__(x, y)\n        self.details = details\n\n    def as_dict(self) -> Dict[str, Any]:\n        return {**super(Obstacle, self).as_dict(), **self.details}\n\n    def __str__(self) -> str:\n        return f\"({self.x}, {self.y}, details = {self.details})\"\n\n\nclass ImageDimensions:\n    def __init__(self, top: int, left: int, height: int, width: int, scale: float, rotation: int,\n                 img_transformation: Callable[[Point], Point]):\n        self.top = top\n        self.left = left\n        self.height = height\n        self.width = width\n        self.scale = scale\n        self.rotation = rotation\n        self.img_transformation = img_transformation\n\n    def to_img(self, point: Point) -> Point:\n        p = self.img_transformation(point)\n        return Point((p.x - self.left) * self.scale, (self.height - (p.y - self.top) - 1) * self.scale)\n\n\nclass ImageData:\n    def __init__(self, size: int, top: int, left: int, height: int, width: int, image_config: ImageConfig,\n                 data: ImageType, img_transformation: Callable[[Point], Point], additional_layers: dict = None):\n        trim_left = int(image_config[CONF_TRIM][CONF_LEFT] * width / 100)\n        trim_right = int(image_config[CONF_TRIM][CONF_RIGHT] * width / 100)\n        trim_top = int(image_config[CONF_TRIM][CONF_TOP] * height / 100)\n        trim_bottom = int(image_config[CONF_TRIM][CONF_BOTTOM] * height / 100)\n        scale = image_config[CONF_SCALE]\n        rotation = image_config[CONF_ROTATE]\n        self.size = size\n        self.dimensions = ImageDimensions(top + trim_bottom,\n                                          left + trim_left,\n                                          height - trim_top - trim_bottom,\n                                          width - trim_left - trim_right,\n                                          scale,\n                                          rotation, img_transformation)\n        self.is_empty = height == 0 or width == 0\n        self.data = data\n        if additional_layers is None:\n            self.additional_layers = {}\n        else:\n            self.additional_layers = dict(filter(lambda l: l[1] is not None, additional_layers.items()))\n\n    def as_dict(self) -> Dict[str, Any]:\n        return {\n            ATTR_SIZE: self.size,\n            ATTR_OFFSET_Y: self.dimensions.top,\n            ATTR_OFFSET_X: self.dimensions.left,\n            ATTR_HEIGHT: self.dimensions.height,\n            ATTR_SCALE: self.dimensions.scale,\n            ATTR_ROTATION: self.dimensions.rotation,\n            ATTR_WIDTH: self.dimensions.width\n        }\n\n    @staticmethod\n    def create_empty(data: ImageType) -> ImageData:\n        image_config = {\n            CONF_TRIM: {\n                CONF_LEFT: 0,\n                CONF_RIGHT: 0,\n                CONF_TOP: 0,\n                CONF_BOTTOM: 0\n            },\n            CONF_SCALE: 1,\n            CONF_ROTATE: 0\n        }\n        return ImageData(0, 0, 0, 0, 0, image_config, data, lambda p: p)\n\n\nclass Path:\n    def __init__(self, point_length: Optional[int], point_size: Optional[int], angle: Optional[int],\n                 path: List[List[Point]]):\n        self.point_length = point_length\n        self.point_size = point_size\n        self.angle = angle\n        self.path = path\n\n    def as_dict(self) -> Dict[str, Any]:\n        return {\n            ATTR_POINT_LENGTH: self.point_length,\n            ATTR_POINT_SIZE: self.point_size,\n            ATTR_ANGLE: self.angle,\n            ATTR_PATH: self.path\n        }\n\n\nclass Zone:\n    def __init__(self, x0: float, y0: float, x1: float, y1: float):\n        self.x0 = x0\n        self.y0 = y0\n        self.x1 = x1\n        self.y1 = y1\n\n    def __str__(self) -> str:\n        return f\"[{self.x0}, {self.y0}, {self.x1}, {self.y1}]\"\n\n    def __repr__(self) -> str:\n        return self.__str__()\n\n    def as_dict(self) -> Dict[str, Any]:\n        return {\n            ATTR_X0: self.x0,\n            ATTR_Y0: self.y0,\n            ATTR_X1: self.x1,\n            ATTR_Y1: self.y1\n        }\n\n    def as_area(self) -> Area:\n        return Area(self.x0, self.y0, self.x0, self.y1, self.x1, self.y1, self.x1, self.y0)\n\n\nclass Room(Zone):\n    def __init__(self, number: int, x0: Optional[float], y0: Optional[float], x1: Optional[float], y1: Optional[float],\n                 name: str = None, pos_x: float = None, pos_y: float = None):\n        super().__init__(x0, y0, x1, y1)\n        self.number = number\n        self.name = name\n        self.pos_x = pos_x\n        self.pos_y = pos_y\n\n    def as_dict(self) -> Dict[str, Any]:\n        super_dict = {**super(Room, self).as_dict()}\n        if self.name is not None:\n            super_dict[ATTR_NAME] = self.name\n        if self.pos_x is not None:\n            super_dict[ATTR_X] = self.pos_x\n        if self.pos_y is not None:\n            super_dict[ATTR_Y] = self.pos_y\n        return super_dict\n\n    def __str__(self) -> str:\n        return f\"[number: {self.number}, name: {self.name}, {self.x0}, {self.y0}, {self.x1}, {self.y1}]\"\n\n    def __repr__(self) -> str:\n        return self.__str__()\n\n    def point(self) -> Optional[Point]:\n        if self.pos_x is not None and self.pos_y is not None and self.name is not None:\n            return Point(self.pos_x, self.pos_y)\n        return None\n\n\nclass Wall:\n    def __init__(self, x0: float, y0: float, x1: float, y1: float):\n        self.x0 = x0\n        self.y0 = y0\n        self.x1 = x1\n        self.y1 = y1\n\n    def __str__(self) -> str:\n        return f\"[{self.x0}, {self.y0}, {self.x1}, {self.y1}]\"\n\n    def __repr__(self) -> str:\n        return self.__str__()\n\n    def as_dict(self) -> Dict[str, Any]:\n        return {\n            ATTR_X0: self.x0,\n            ATTR_Y0: self.y0,\n            ATTR_X1: self.x1,\n            ATTR_Y1: self.y1\n        }\n\n    def to_img(self, image_dimensions) -> Wall:\n        p0 = Point(self.x0, self.y0).to_img(image_dimensions)\n        p1 = Point(self.x1, self.y1).to_img(image_dimensions)\n        return Wall(p0.x, p0.y, p1.x, p1.y)\n\n    def as_list(self) -> List[float]:\n        return [self.x0, self.y0, self.x1, self.y1]\n\n\nclass Area:\n    def __init__(self, x0: float, y0: float, x1: float, y1: float, x2: float, y2: float, x3: float, y3: float):\n        self.x0 = x0\n        self.y0 = y0\n        self.x1 = x1\n        self.y1 = y1\n        self.x2 = x2\n        self.y2 = y2\n        self.x3 = x3\n        self.y3 = y3\n\n    def __str__(self) -> str:\n        return f\"[{self.x0}, {self.y0}, {self.x1}, {self.y1}, {self.x2}, {self.y2}, {self.x3}, {self.y3}]\"\n\n    def __repr__(self) -> str:\n        return self.__str__()\n\n    def as_dict(self) -> Dict[str, Any]:\n        return {\n            ATTR_X0: self.x0,\n            ATTR_Y0: self.y0,\n            ATTR_X1: self.x1,\n            ATTR_Y1: self.y1,\n            ATTR_X2: self.x2,\n            ATTR_Y2: self.y2,\n            ATTR_X3: self.x3,\n            ATTR_Y3: self.y3\n        }\n\n    def as_list(self) -> List[float]:\n        return [self.x0, self.y0, self.x1, self.y1, self.x2, self.y2, self.x3, self.y3]\n\n    def to_img(self, image_dimensions) -> Area:\n        p0 = Point(self.x0, self.y0).to_img(image_dimensions)\n        p1 = Point(self.x1, self.y1).to_img(image_dimensions)\n        p2 = Point(self.x2, self.y2).to_img(image_dimensions)\n        p3 = Point(self.x3, self.y3).to_img(image_dimensions)\n        return Area(p0.x, p0.y, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y)\n\n\nclass MapData:\n    def __init__(self, calibration_center: float = 0, calibration_diff: float = 0):\n        self._calibration_center = calibration_center\n        self._calibration_diff = calibration_diff\n        self.blocks = None\n        self.charger: Optional[Point] = None\n        self.goto: Optional[List[Point]] = None\n        self.goto_path: Optional[Path] = None\n        self.image: Optional[ImageData] = None\n        self.no_go_areas: Optional[List[Area]] = None\n        self.no_mopping_areas: Optional[List[Area]] = None\n        self.obstacles: Optional[List[Obstacle]] = None\n        self.ignored_obstacles: Optional[List[Obstacle]] = None\n        self.obstacles_with_photo: Optional[List[Obstacle]] = None\n        self.ignored_obstacles_with_photo: Optional[List[Obstacle]] = None\n        self.path: Optional[Path] = None\n        self.predicted_path: Optional[Path] = None\n        self.rooms: Optional[Dict[int, Room]] = None\n        self.vacuum_position: Optional[Point] = None\n        self.vacuum_room: Optional[int] = None\n        self.vacuum_room_name: Optional[str] = None\n        self.walls: Optional[List[Wall]] = None\n        self.zones: Optional[List[Zone]] = None\n        self.cleaned_rooms: Optional[Set[int]] = None\n        self.map_name: Optional[str] = None\n\n    def calibration(self) -> Optional[CalibrationPoints]:\n        if self.image.is_empty:\n            return None\n        calibration_points = []\n        for point in [Point(self._calibration_center, self._calibration_center),\n                      Point(self._calibration_center + self._calibration_diff, self._calibration_center),\n                      Point(self._calibration_center, self._calibration_center + self._calibration_diff)]:\n            img_point = point.to_img(self.image.dimensions).rotated(self.image.dimensions)\n            calibration_points.append({\n                \"vacuum\": {\"x\": point.x, \"y\": point.y},\n                \"map\": {\"x\": int(img_point.x), \"y\": int(img_point.y)}\n            })\n        return calibration_points\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/common/map_data_parser.py",
    "content": "import logging\n\nfrom custom_components.xiaomi_cloud_map_extractor.common.image_handler import ImageHandler\nfrom custom_components.xiaomi_cloud_map_extractor.common.map_data import ImageData, MapData\nfrom custom_components.xiaomi_cloud_map_extractor.const import *\nfrom custom_components.xiaomi_cloud_map_extractor.types import Colors, Drawables, ImageConfig, Sizes, Texts\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass MapDataParser:\n\n    @staticmethod\n    def create_empty(colors: Colors, text: str) -> MapData:\n        map_data = MapData()\n        empty_map = ImageHandler.create_empty_map_image(colors, text)\n        map_data.image = ImageData.create_empty(empty_map)\n        return map_data\n\n    @staticmethod\n    def parse(raw: bytes, colors: Colors, drawables: Drawables, texts: Texts, sizes: Sizes,\n              image_config: ImageConfig, *args, **kwargs) -> MapData:\n        pass\n\n    @staticmethod\n    def draw_elements(colors: Colors, drawables: Drawables, sizes: Sizes, map_data: MapData, image_config: ImageConfig):\n        scale = float(image_config[CONF_SCALE])\n        for drawable in drawables:\n            if DRAWABLE_CHARGER == drawable and map_data.charger is not None:\n                ImageHandler.draw_charger(map_data.image, map_data.charger, sizes, colors)\n            if DRAWABLE_VACUUM_POSITION == drawable and map_data.vacuum_position is not None:\n                ImageHandler.draw_vacuum_position(map_data.image, map_data.vacuum_position, sizes, colors)\n            if DRAWABLE_OBSTACLES == drawable and map_data.obstacles is not None:\n                ImageHandler.draw_obstacles(map_data.image, map_data.obstacles, sizes, colors)\n            if DRAWABLE_IGNORED_OBSTACLES == drawable and map_data.ignored_obstacles is not None:\n                ImageHandler.draw_ignored_obstacles(map_data.image, map_data.ignored_obstacles, sizes, colors)\n            if DRAWABLE_OBSTACLES_WITH_PHOTO == drawable and map_data.obstacles_with_photo is not None:\n                ImageHandler.draw_obstacles_with_photo(map_data.image, map_data.obstacles_with_photo, sizes, colors)\n            if DRAWABLE_IGNORED_OBSTACLES_WITH_PHOTO == drawable and map_data.ignored_obstacles_with_photo is not None:\n                ImageHandler.draw_ignored_obstacles_with_photo(map_data.image, map_data.ignored_obstacles_with_photo,\n                                                               sizes, colors)\n            if DRAWABLE_PATH == drawable and map_data.path is not None:\n                ImageHandler.draw_path(map_data.image, map_data.path, sizes, colors, scale)\n            if DRAWABLE_GOTO_PATH == drawable and map_data.goto_path is not None:\n                ImageHandler.draw_goto_path(map_data.image, map_data.goto_path, sizes, colors, scale)\n            if DRAWABLE_PREDICTED_PATH == drawable and map_data.predicted_path is not None:\n                ImageHandler.draw_predicted_path(map_data.image, map_data.predicted_path, sizes, colors, scale)\n            if DRAWABLE_NO_GO_AREAS == drawable and map_data.no_go_areas is not None:\n                ImageHandler.draw_no_go_areas(map_data.image, map_data.no_go_areas, colors)\n            if DRAWABLE_NO_MOPPING_AREAS == drawable and map_data.no_mopping_areas is not None:\n                ImageHandler.draw_no_mopping_areas(map_data.image, map_data.no_mopping_areas, colors)\n            if DRAWABLE_VIRTUAL_WALLS == drawable and map_data.walls is not None:\n                ImageHandler.draw_walls(map_data.image, map_data.walls, colors)\n            if DRAWABLE_ZONES == drawable and map_data.zones is not None:\n                ImageHandler.draw_zones(map_data.image, map_data.zones, colors)\n            if DRAWABLE_CLEANED_AREA == drawable and DRAWABLE_CLEANED_AREA in map_data.image.additional_layers:\n                ImageHandler.draw_layer(map_data.image, drawable)\n            if DRAWABLE_ROOM_NAMES == drawable and map_data.rooms is not None:\n                ImageHandler.draw_room_names(map_data.image, map_data.rooms, colors)\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/common/vacuum.py",
    "content": "from abc import abstractmethod\nfrom typing import Optional, Tuple\n\nfrom custom_components.xiaomi_cloud_map_extractor.common.map_data import MapData\nfrom custom_components.xiaomi_cloud_map_extractor.common.map_data_parser import MapDataParser\nfrom custom_components.xiaomi_cloud_map_extractor.common.xiaomi_cloud_connector import XiaomiCloudConnector\nfrom custom_components.xiaomi_cloud_map_extractor.types import Colors, Drawables, ImageConfig, Sizes, Texts\n\n\nclass XiaomiCloudVacuum:\n\n    def __init__(self, connector: XiaomiCloudConnector, country: str, user_id: str, device_id: str, model: str):\n        self._connector = connector\n        self._country = country\n        self._user_id = user_id\n        self._device_id = device_id\n        self.model = model\n\n    def get_map(self,\n                map_name: str,\n                colors: Colors,\n                drawables: Drawables,\n                texts: Texts,\n                sizes: Sizes,\n                image_config: ImageConfig,\n                store_map_path: Optional[str] = None) -> Tuple[Optional[MapData], bool]:\n        response = self.get_raw_map_data(map_name)\n        if response is None:\n            return None, False\n        map_stored = False\n        if store_map_path is not None:\n            raw_map_file = open(f\"{store_map_path}/map_data_{self.model}.{self.get_map_archive_extension()}\", \"wb\")\n            raw_map_file.write(response)\n            raw_map_file.close()\n            map_stored = True\n        map_data = self.decode_map(response, colors, drawables, texts, sizes, image_config)\n        if map_data is None:\n            return None, map_stored\n        map_data.map_name = map_name\n        return map_data, map_stored\n\n    def get_raw_map_data(self, map_name: Optional[str]) -> Optional[bytes]:\n        if map_name is None:\n            return None\n        map_url = self.get_map_url(map_name)\n        return self._connector.get_raw_map_data(map_url)\n\n    def decode_map(self,\n                   raw_map: bytes,\n                   colors: Colors,\n                   drawables: Drawables,\n                   texts: Texts,\n                   sizes: Sizes,\n                   image_config: ImageConfig) -> Optional[MapData]:\n        return MapDataParser.create_empty(colors, f\"Vacuum\\n{self.model}\\nis not supported\")\n\n    @abstractmethod\n    def get_map_url(self, map_name: str) -> Optional[str]:\n        pass\n\n    @abstractmethod\n    def should_get_map_from_vacuum(self) -> bool:\n        pass\n\n    def get_map_archive_extension(self) -> str:\n        pass\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/common/vacuum_v2.py",
    "content": "from typing import Optional\n\nfrom custom_components.xiaomi_cloud_map_extractor.common.vacuum import XiaomiCloudVacuum\nfrom custom_components.xiaomi_cloud_map_extractor.common.xiaomi_cloud_connector import XiaomiCloudConnector\n\n\nclass XiaomiCloudVacuumV2(XiaomiCloudVacuum):\n\n    def __init__(self, connector: XiaomiCloudConnector, country: str, user_id: str, device_id: str, model: str):\n        super().__init__(connector, country, user_id, device_id, model)\n\n    def get_map_url(self, map_name: str) -> Optional[str]:\n        url = self._connector.get_api_url(self._country) + '/v2/home/get_interim_file_url'\n        params = {\n            \"data\": f'{{\"obj_name\":\"{self._user_id}/{self._device_id}/{map_name}\"}}'\n        }\n        api_response = self._connector.execute_api_call_encrypted(url, params)\n        if api_response is None or \"result\" not in api_response or \"url\" not in api_response[\"result\"]:\n            return None\n        return api_response[\"result\"][\"url\"]\n\n    def should_get_map_from_vacuum(self) -> bool:\n        return False\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/common/xiaomi_cloud_connector.py",
    "content": "import base64\nimport hashlib\nimport hmac\nimport json\nimport logging\nimport os\nimport random\nimport time\nfrom typing import Any, Dict, Optional, Tuple\nfrom Crypto.Cipher import ARC4\n\nimport requests\n\nfrom custom_components.xiaomi_cloud_map_extractor.const import *\n\n_LOGGER = logging.getLogger(__name__)\n\n\n# noinspection PyBroadException\nclass XiaomiCloudConnector:\n\n    def __init__(self, username: str, password: str):\n        self.two_factor_auth_url = None\n        self._username = username\n        self._password = password\n        self._agent = self.generate_agent()\n        self._device_id = self.generate_device_id()\n        self._session = requests.session()\n        self._sign = None\n        self._ssecurity = None\n        self._userId = None\n        self._cUserId = None\n        self._passToken = None\n        self._location = None\n        self._code = None\n        self._serviceToken = None\n\n    def login_step_1(self) -> bool:\n        url = \"https://account.xiaomi.com/pass/serviceLogin?sid=xiaomiio&_json=true\"\n        headers = {\n            \"User-Agent\": self._agent,\n            \"Content-Type\": \"application/x-www-form-urlencoded\"\n        }\n        cookies = {\n            \"userId\": self._username\n        }\n        try:\n            response = self._session.get(url, headers=headers, cookies=cookies, timeout=10)\n        except:\n            response = None\n        successful = response is not None and response.status_code == 200 and \"_sign\" in self.to_json(response.text)\n        if successful:\n            self._sign = self.to_json(response.text)[\"_sign\"]\n        return successful\n\n    def login_step_2(self) -> bool:\n        url = \"https://account.xiaomi.com/pass/serviceLoginAuth2\"\n        headers = {\n            \"User-Agent\": self._agent,\n            \"Content-Type\": \"application/x-www-form-urlencoded\"\n        }\n        fields = {\n            \"sid\": \"xiaomiio\",\n            \"hash\": hashlib.md5(str.encode(self._password)).hexdigest().upper(),\n            \"callback\": \"https://sts.api.io.mi.com/sts\",\n            \"qs\": \"%3Fsid%3Dxiaomiio%26_json%3Dtrue\",\n            \"user\": self._username,\n            \"_sign\": self._sign,\n            \"_json\": \"true\"\n        }\n        try:\n            response = self._session.post(url, headers=headers, params=fields, timeout=10)\n        except:\n            response = None\n        successful = response is not None and response.status_code == 200\n        if successful:\n            json_resp = self.to_json(response.text)\n            successful = \"ssecurity\" in json_resp and len(str(json_resp[\"ssecurity\"])) > 4\n            if successful:\n                self._ssecurity = json_resp[\"ssecurity\"]\n                self._userId = json_resp[\"userId\"]\n                self._cUserId = json_resp[\"cUserId\"]\n                self._passToken = json_resp[\"passToken\"]\n                self._location = json_resp[\"location\"]\n                self._code = json_resp[\"code\"]\n                self.two_factor_auth_url = None\n            else:\n                if \"notificationUrl\" in json_resp:\n                    _LOGGER.error(\n                        \"Additional authentication required. \" +\n                        \"Open following URL using device that has the same public IP, \" +\n                        \"as your Home Assistant instance: %s \",\n                        json_resp[\"notificationUrl\"])\n                    self.two_factor_auth_url = json_resp[\"notificationUrl\"]\n                    successful = None\n\n        return successful\n\n    def login_step_3(self) -> bool:\n        headers = {\n            \"User-Agent\": self._agent,\n            \"Content-Type\": \"application/x-www-form-urlencoded\"\n        }\n        try:\n            response = self._session.get(self._location, headers=headers, timeout=10)\n        except:\n            response = None\n        successful = response is not None and response.status_code == 200 and \"serviceToken\" in response.cookies\n        if successful:\n            self._serviceToken = response.cookies.get(\"serviceToken\")\n        return successful\n\n    def login(self) -> bool:\n        self._session.close()\n        self._session = requests.session()\n        self._agent = self.generate_agent()\n        self._device_id = self.generate_device_id()\n        self._session.cookies.set(\"sdkVersion\", \"accountsdk-18.8.15\", domain=\"mi.com\")\n        self._session.cookies.set(\"sdkVersion\", \"accountsdk-18.8.15\", domain=\"xiaomi.com\")\n        self._session.cookies.set(\"deviceId\", self._device_id, domain=\"mi.com\")\n        self._session.cookies.set(\"deviceId\", self._device_id, domain=\"xiaomi.com\")\n        return self.login_step_1() and self.login_step_2() and self.login_step_3()\n\n    def get_raw_map_data(self, map_url) -> Optional[bytes]:\n        if map_url is not None:\n            try:\n                response = self._session.get(map_url, timeout=10)\n            except:\n                response = None\n            if response is not None and response.status_code == 200:\n                return response.content\n        return None\n\n    def get_device_details(self, token: str,\n                           country: str) -> Tuple[Optional[str], Optional[str], Optional[str], Optional[str]]:\n        countries_to_check = CONF_AVAILABLE_COUNTRIES\n        if country is not None:\n            countries_to_check = [country]\n        for country in countries_to_check:\n            devices = self.get_devices(country)\n            if devices is None:\n                continue\n            found = list(filter(lambda d: str(d[\"token\"]).casefold() == str(token).casefold(),\n                                devices[\"result\"][\"list\"]))\n            if len(found) > 0:\n                user_id = found[0][\"uid\"]\n                device_id = found[0][\"did\"]\n                model = found[0][\"model\"]\n                return country, user_id, device_id, model\n        return None, None, None, None\n\n    def get_devices(self, country: str) -> Any:\n        url = self.get_api_url(country) + \"/home/device_list\"\n        params = {\n            \"data\": '{\"getVirtualModel\":false,\"getHuamiDevices\":0}'\n        }\n        return self.execute_api_call_encrypted(url, params)\n\n    def execute_api_call_encrypted(self, url: str, params: Dict[str, str]) -> Any:\n        headers = {\n            \"Accept-Encoding\": \"identity\",\n            \"User-Agent\": self._agent,\n            \"Content-Type\": \"application/x-www-form-urlencoded\",\n            \"x-xiaomi-protocal-flag-cli\": \"PROTOCAL-HTTP2\",\n            \"MIOT-ENCRYPT-ALGORITHM\": \"ENCRYPT-RC4\",\n        }\n        cookies = {\n            \"userId\": str(self._userId),\n            \"yetAnotherServiceToken\": str(self._serviceToken),\n            \"serviceToken\": str(self._serviceToken),\n            \"locale\": \"en_GB\",\n            \"timezone\": \"GMT+02:00\",\n            \"is_daylight\": \"1\",\n            \"dst_offset\": \"3600000\",\n            \"channel\": \"MI_APP_STORE\"\n        }\n        millis = round(time.time() * 1000)\n        nonce = self.generate_nonce(millis)\n        signed_nonce = self.signed_nonce(nonce)\n        fields = self.generate_enc_params(url, \"POST\", signed_nonce, nonce, params, self._ssecurity)\n\n        try:\n            response = self._session.post(url, headers=headers, cookies=cookies, params=fields, timeout=10)\n        except:\n            response = None\n        if response is not None and response.status_code == 200:\n            decoded = self.decrypt_rc4(self.signed_nonce(fields[\"_nonce\"]), response.text)\n            return json.loads(decoded)\n        return None\n\n    def get_api_url(self, country: str) -> str:\n        return \"https://\" + (\"\" if country == \"cn\" else (country + \".\")) + \"api.io.mi.com/app\"\n\n    def signed_nonce(self, nonce: str) -> str:\n        hash_object = hashlib.sha256(base64.b64decode(self._ssecurity) + base64.b64decode(nonce))\n        return base64.b64encode(hash_object.digest()).decode('utf-8')\n\n    @staticmethod\n    def generate_nonce(millis: int):\n        nonce_bytes = os.urandom(8) + (int(millis / 60000)).to_bytes(4, byteorder='big')\n        return base64.b64encode(nonce_bytes).decode()\n\n    @staticmethod\n    def generate_agent() -> str:\n        agent_id = \"\".join((chr(random.randint(65, 69)) for _ in range(13)))\n        return f\"Android-7.1.1-1.0.0-ONEPLUS A3010-136-{agent_id} APP/xiaomi.smarthome APPV/62830\"\n\n    @staticmethod\n    def generate_device_id() -> str:\n        return \"\".join((chr(random.randint(97, 122)) for _ in range(6)))\n\n    @staticmethod\n    def generate_signature(url, signed_nonce: str, nonce: str, params: Dict[str, str]) -> str:\n        signature_params = [url.split(\"com\")[1], signed_nonce, nonce]\n        for k, v in params.items():\n            signature_params.append(f\"{k}={v}\")\n        signature_string = \"&\".join(signature_params)\n        signature = hmac.new(base64.b64decode(signed_nonce), msg=signature_string.encode(), digestmod=hashlib.sha256)\n        return base64.b64encode(signature.digest()).decode()\n\n    @staticmethod\n    def generate_enc_signature(url, method: str, signed_nonce: str, params: Dict[str, str]) -> str:\n        signature_params = [str(method).upper(), url.split(\"com\")[1].replace(\"/app/\", \"/\")]\n        for k, v in params.items():\n            signature_params.append(f\"{k}={v}\")\n        signature_params.append(signed_nonce)\n        signature_string = \"&\".join(signature_params)\n        return base64.b64encode(hashlib.sha1(signature_string.encode('utf-8')).digest()).decode()\n\n    @staticmethod\n    def generate_enc_params(url: str, method: str, signed_nonce: str, nonce: str, params: Dict[str, str],\n                            ssecurity: str) -> Dict[str, str]:\n        params['rc4_hash__'] = XiaomiCloudConnector.generate_enc_signature(url, method, signed_nonce, params)\n        for k, v in params.items():\n            params[k] = XiaomiCloudConnector.encrypt_rc4(signed_nonce, v)\n        params.update({\n            'signature': XiaomiCloudConnector.generate_enc_signature(url, method, signed_nonce, params),\n            'ssecurity': ssecurity,\n            '_nonce': nonce,\n        })\n        return params\n\n    @staticmethod\n    def to_json(response_text: str) -> Any:\n        return json.loads(response_text.replace(\"&&&START&&&\", \"\"))\n\n    @staticmethod\n    def encrypt_rc4(password: str, payload: str) -> str:\n        r = ARC4.new(base64.b64decode(password))\n        r.encrypt(bytes(1024))\n        return base64.b64encode(r.encrypt(payload.encode())).decode()\n\n    @staticmethod\n    def decrypt_rc4(password: str, payload: str) -> bytes:\n        r = ARC4.new(base64.b64decode(password))\n        r.encrypt(bytes(1024))\n        return r.encrypt(base64.b64decode(payload))\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/const.py",
    "content": "DOMAIN = \"xiaomi_cloud_map_extractor\"\nPLATFORMS = [\"camera\"]\n\nCONF_ATTRIBUTES = \"attributes\"\nCONF_AUTO_UPDATE = \"auto_update\"\nCONF_AVAILABLE_API_DREAME = \"dreame\"\nCONF_AVAILABLE_API_ROIDMI = \"roidmi\"\nCONF_AVAILABLE_API_VIOMI = \"viomi\"\nCONF_AVAILABLE_API_XIAOMI = \"xiaomi\"\nCONF_AVAILABLE_COUNTRIES = [\"cn\", \"de\", \"us\", \"ru\", \"tw\", \"sg\", \"in\", \"i2\"]\nCONF_BOTTOM = \"bottom\"\nCONF_COLOR = \"color\"\nCONF_COLORS = \"colors\"\nCONF_COUNTRY = \"country\"\nCONF_DRAW = \"draw\"\nCONF_FORCE_API = \"force_api\"\nCONF_FONT = \"font\"\nCONF_FONT_SIZE = \"font_size\"\nCONF_LEFT = \"left\"\nCONF_MAP_TRANSFORM = \"map_transformation\"\nCONF_RIGHT = \"right\"\nCONF_ROOM_COLORS = \"room_colors\"\nCONF_ROTATE = \"rotate\"\nCONF_SCALE = \"scale\"\nCONF_SIZES = \"sizes\"\nCONF_SIZE_CHARGER_RADIUS = \"charger_radius\"\nCONF_SIZE_IGNORED_OBSTACLE_RADIUS = \"ignored_obstacle_radius\"\nCONF_SIZE_IGNORED_OBSTACLE_WITH_PHOTO_RADIUS = \"ignored_obstacle_with_photo_radius\"\nCONF_SIZE_OBSTACLE_RADIUS = \"obstacle_radius\"\nCONF_SIZE_OBSTACLE_WITH_PHOTO_RADIUS = \"obstacle_with_photo_radius\"\nCONF_SIZE_VACUUM_RADIUS = \"vacuum_radius\"\nCONF_SIZE_PATH_WIDTH = \"path_width\"\nCONF_STORE_MAP_RAW = \"store_map_raw\"\nCONF_STORE_MAP_IMAGE = \"store_map_image\"\nCONF_STORE_MAP_PATH = \"store_map_path\"\nCONF_TEXT = \"text\"\nCONF_TEXTS = \"texts\"\nCONF_TOP = \"top\"\nCONF_TRIM = \"trim\"\nCONF_X = \"x\"\nCONF_Y = \"y\"\n\nCONF_AVAILABLE_APIS = [CONF_AVAILABLE_API_XIAOMI, CONF_AVAILABLE_API_VIOMI, CONF_AVAILABLE_API_ROIDMI,\n                       CONF_AVAILABLE_API_DREAME]\n\nCONF_AVAILABLE_SIZES = [CONF_SIZE_VACUUM_RADIUS, CONF_SIZE_PATH_WIDTH, CONF_SIZE_IGNORED_OBSTACLE_RADIUS,\n                        CONF_SIZE_IGNORED_OBSTACLE_WITH_PHOTO_RADIUS, CONF_SIZE_OBSTACLE_RADIUS,\n                        CONF_SIZE_OBSTACLE_WITH_PHOTO_RADIUS, CONF_SIZE_CHARGER_RADIUS]\n\nMINIMAL_IMAGE_WIDTH = 20\nMINIMAL_IMAGE_HEIGHT = 20\nCONTENT_TYPE = \"image/png\"\nDEFAULT_NAME = \"Xiaomi Cloud Map Extractor\"\n\nATTRIBUTE_CALIBRATION = \"calibration_points\"\nATTRIBUTE_CHARGER = \"charger\"\nATTRIBUTE_CLEANED_ROOMS = \"cleaned_rooms\"\nATTRIBUTE_COUNTRY = \"country\"\nATTRIBUTE_GOTO = \"goto\"\nATTRIBUTE_GOTO_PATH = \"goto_path\"\nATTRIBUTE_GOTO_PREDICTED_PATH = \"goto_predicted_path\"\nATTRIBUTE_IGNORED_OBSTACLES = \"ignored_obstacles\"\nATTRIBUTE_IGNORED_OBSTACLES_WITH_PHOTO = \"ignored_obstacles_with_photo\"\nATTRIBUTE_IMAGE = \"image\"\nATTRIBUTE_IS_EMPTY = \"is_empty\"\nATTRIBUTE_MAP_NAME = \"map_name\"\nATTRIBUTE_MAP_SAVED = \"map_saved\"\nATTRIBUTE_NO_GO_AREAS = \"no_go_areas\"\nATTRIBUTE_NO_MOPPING_AREAS = \"no_mopping_areas\"\nATTRIBUTE_OBSTACLES = \"obstacles\"\nATTRIBUTE_OBSTACLES_WITH_PHOTO = \"obstacles_with_photo\"\nATTRIBUTE_PATH = \"path\"\nATTRIBUTE_ROOMS = \"rooms\"\nATTRIBUTE_ROOM_NUMBERS = \"room_numbers\"\nATTRIBUTE_VACUUM_POSITION = \"vacuum_position\"\nATTRIBUTE_VACUUM_ROOM = \"vacuum_room\"\nATTRIBUTE_VACUUM_ROOM_NAME = \"vacuum_room_name\"\nATTRIBUTE_WALLS = \"walls\"\nATTRIBUTE_ZONES = \"zones\"\n\nCONF_AVAILABLE_ATTRIBUTES = [ATTRIBUTE_CALIBRATION, ATTRIBUTE_CHARGER, ATTRIBUTE_CLEANED_ROOMS, ATTRIBUTE_COUNTRY,\n                             ATTRIBUTE_GOTO, ATTRIBUTE_GOTO_PATH, ATTRIBUTE_GOTO_PREDICTED_PATH,\n                             ATTRIBUTE_IGNORED_OBSTACLES, ATTRIBUTE_IGNORED_OBSTACLES_WITH_PHOTO, ATTRIBUTE_IMAGE,\n                             ATTRIBUTE_IS_EMPTY, ATTRIBUTE_MAP_NAME, ATTRIBUTE_NO_GO_AREAS, ATTRIBUTE_NO_MOPPING_AREAS,\n                             ATTRIBUTE_OBSTACLES, ATTRIBUTE_OBSTACLES_WITH_PHOTO, ATTRIBUTE_PATH, ATTRIBUTE_ROOMS,\n                             ATTRIBUTE_ROOM_NUMBERS, ATTRIBUTE_VACUUM_POSITION, ATTRIBUTE_VACUUM_ROOM,\n                             ATTRIBUTE_VACUUM_ROOM_NAME, ATTRIBUTE_WALLS, ATTRIBUTE_ZONES]\n\nATTR_A = \"a\"\nATTR_ANGLE = \"angle\"\nATTR_CONFIDENCE_LEVEL = \"confidence_level\"\nATTR_DESCRIPTION = \"description\"\nATTR_HEIGHT = \"height\"\nATTR_MODEL = \"model\"\nATTR_NAME = \"name\"\nATTR_OFFSET_X = \"offset_x\"\nATTR_OFFSET_Y = \"offset_y\"\nATTR_PATH = \"path\"\nATTR_PHOTO_NAME = \"photo_name\"\nATTR_POINT_LENGTH = \"point_length\"\nATTR_POINT_SIZE = \"point_size\"\nATTR_ROTATION = \"rotation\"\nATTR_SCALE = \"scale\"\nATTR_SIZE = \"size\"\nATTR_TWO_FACTOR_AUTH = \"url_2fa\"\nATTR_TYPE = \"type\"\nATTR_USED_API = \"used_api\"\nATTR_WIDTH = \"width\"\nATTR_X = \"x\"\nATTR_X0 = \"x0\"\nATTR_X1 = \"x1\"\nATTR_X2 = \"x2\"\nATTR_X3 = \"x3\"\nATTR_Y = \"y\"\nATTR_Y0 = \"y0\"\nATTR_Y1 = \"y1\"\nATTR_Y2 = \"y2\"\nATTR_Y3 = \"y3\"\n\nDRAWABLE_ALL = \"all\"\nDRAWABLE_CHARGER = \"charger\"\nDRAWABLE_CLEANED_AREA = \"cleaned_area\"\nDRAWABLE_GOTO_PATH = \"goto_path\"\nDRAWABLE_IGNORED_OBSTACLES = \"ignored_obstacles\"\nDRAWABLE_IGNORED_OBSTACLES_WITH_PHOTO = \"ignored_obstacles_with_photo\"\nDRAWABLE_NO_GO_AREAS = \"no_go_zones\"\nDRAWABLE_NO_MOPPING_AREAS = \"no_mopping_zones\"\nDRAWABLE_OBSTACLES = \"obstacles\"\nDRAWABLE_OBSTACLES_WITH_PHOTO = \"obstacles_with_photo\"\nDRAWABLE_PATH = \"path\"\nDRAWABLE_PREDICTED_PATH = \"predicted_path\"\nDRAWABLE_ROOM_NAMES = \"room_names\"\nDRAWABLE_VACUUM_POSITION = \"vacuum_position\"\nDRAWABLE_VIRTUAL_WALLS = \"virtual_walls\"\nDRAWABLE_ZONES = \"zones\"\n\nCONF_AVAILABLE_DRAWABLES = [DRAWABLE_ALL, DRAWABLE_CLEANED_AREA, DRAWABLE_CHARGER, DRAWABLE_GOTO_PATH,\n                            DRAWABLE_IGNORED_OBSTACLES, DRAWABLE_IGNORED_OBSTACLES_WITH_PHOTO, DRAWABLE_NO_GO_AREAS,\n                            DRAWABLE_NO_MOPPING_AREAS, DRAWABLE_OBSTACLES, DRAWABLE_OBSTACLES_WITH_PHOTO, DRAWABLE_PATH,\n                            DRAWABLE_PREDICTED_PATH, DRAWABLE_ROOM_NAMES, DRAWABLE_VACUUM_POSITION,\n                            DRAWABLE_VIRTUAL_WALLS, DRAWABLE_ZONES]\n\nCOLOR_ROOM_PREFIX = \"color_room_\"\n\nCOLOR_CHARGER = \"color_charger\"\nCOLOR_CHARGER_OUTLINE = \"color_charger_outline\"\nCOLOR_CLEANED_AREA = \"color_cleaned_area\"\nCOLOR_GOTO_PATH = \"color_goto_path\"\nCOLOR_GREY_WALL = \"color_grey_wall\"\nCOLOR_IGNORED_OBSTACLE = \"color_ignored_obstacle\"\nCOLOR_IGNORED_OBSTACLE_WITH_PHOTO = \"color_ignored_obstacle_with_photo\"\nCOLOR_MAP_INSIDE = \"color_map_inside\"\nCOLOR_MAP_OUTSIDE = \"color_map_outside\"\nCOLOR_MAP_WALL = \"color_map_wall\"\nCOLOR_MAP_WALL_V2 = \"color_map_wall_v2\"\nCOLOR_NEW_DISCOVERED_AREA = \"color_new_discovered_area\"\nCOLOR_NO_GO_ZONES = \"color_no_go_zones\"\nCOLOR_NO_GO_ZONES_OUTLINE = \"color_no_go_zones_outline\"\nCOLOR_NO_MOPPING_ZONES = \"color_no_mop_zones\"\nCOLOR_NO_MOPPING_ZONES_OUTLINE = \"color_no_mop_zones_outline\"\nCOLOR_OBSTACLE = \"color_obstacle\"\nCOLOR_OBSTACLE_WITH_PHOTO = \"color_obstacle_with_photo\"\nCOLOR_PATH = \"color_path\"\nCOLOR_PREDICTED_PATH = \"color_predicted_path\"\nCOLOR_ROBO = \"color_robo\"\nCOLOR_ROBO_OUTLINE = \"color_robo_outline\"\nCOLOR_ROOM_NAMES = \"color_room_names\"\nCOLOR_SCAN = \"color_scan\"\nCOLOR_UNKNOWN = \"color_unknown\"\nCOLOR_VIRTUAL_WALLS = \"color_virtual_walls\"\nCOLOR_ZONES = \"color_zones\"\nCOLOR_ZONES_OUTLINE = \"color_zones_outline\"\n\nCONF_AVAILABLE_COLORS = [COLOR_CHARGER, COLOR_CHARGER_OUTLINE, COLOR_CLEANED_AREA, COLOR_GOTO_PATH, COLOR_GREY_WALL,\n                         COLOR_IGNORED_OBSTACLE, COLOR_IGNORED_OBSTACLE_WITH_PHOTO, COLOR_MAP_INSIDE, COLOR_MAP_OUTSIDE,\n                         COLOR_MAP_WALL, COLOR_MAP_WALL_V2, COLOR_NEW_DISCOVERED_AREA, COLOR_NO_GO_ZONES,\n                         COLOR_NO_GO_ZONES_OUTLINE, COLOR_NO_MOPPING_ZONES, COLOR_NO_MOPPING_ZONES_OUTLINE,\n                         COLOR_OBSTACLE, COLOR_OBSTACLE_WITH_PHOTO, COLOR_PATH, COLOR_PREDICTED_PATH, COLOR_ROBO,\n                         COLOR_ROBO_OUTLINE, COLOR_ROOM_NAMES, COLOR_SCAN, COLOR_UNKNOWN, COLOR_VIRTUAL_WALLS,\n                         COLOR_ZONES, COLOR_ZONES_OUTLINE]\n\nCOLOR_ROOM_1 = \"color_room_1\"\nCOLOR_ROOM_2 = \"color_room_2\"\nCOLOR_ROOM_3 = \"color_room_3\"\nCOLOR_ROOM_4 = \"color_room_4\"\nCOLOR_ROOM_5 = \"color_room_5\"\nCOLOR_ROOM_6 = \"color_room_6\"\nCOLOR_ROOM_7 = \"color_room_7\"\nCOLOR_ROOM_8 = \"color_room_8\"\nCOLOR_ROOM_9 = \"color_room_9\"\nCOLOR_ROOM_10 = \"color_room_10\"\nCOLOR_ROOM_11 = \"color_room_11\"\nCOLOR_ROOM_12 = \"color_room_12\"\nCOLOR_ROOM_13 = \"color_room_13\"\nCOLOR_ROOM_14 = \"color_room_14\"\nCOLOR_ROOM_15 = \"color_room_15\"\nCOLOR_ROOM_16 = \"color_room_16\"\n\nCONF_DEFAULT_ROOM_COLORS = [COLOR_ROOM_1, COLOR_ROOM_2, COLOR_ROOM_3, COLOR_ROOM_4, COLOR_ROOM_5, COLOR_ROOM_6,\n                            COLOR_ROOM_7, COLOR_ROOM_8, COLOR_ROOM_9, COLOR_ROOM_10, COLOR_ROOM_11, COLOR_ROOM_12,\n                            COLOR_ROOM_13, COLOR_ROOM_14, COLOR_ROOM_15, COLOR_ROOM_16]\n\nAVAILABLE_APIS = {\n    CONF_AVAILABLE_API_DREAME: [\"dreame.vacuum.\"],\n    CONF_AVAILABLE_API_ROIDMI: [\"roidmi.vacuum.\", \"zhimi.vacuum.\"],\n    CONF_AVAILABLE_API_VIOMI: [\"viomi.vacuum.\"],\n    CONF_AVAILABLE_API_XIAOMI: [\"roborock.vacuum\", \"rockrobo.vacuum\"]\n}\n\nAPI_EXCEPTIONS = {\n    \"viomi.vacuum.v18\": CONF_AVAILABLE_API_ROIDMI\n}\n\nMM = 50\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/dreame/__init__.py",
    "content": ""
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/dreame/image_handler.py",
    "content": "import logging\nfrom enum import IntEnum\nfrom typing import Dict, Tuple\n\nfrom PIL import Image\nfrom PIL.Image import Image as ImageType\n\nfrom custom_components.xiaomi_cloud_map_extractor.common.image_handler import ImageHandler\nfrom custom_components.xiaomi_cloud_map_extractor.common.map_data import Room\nfrom custom_components.xiaomi_cloud_map_extractor.const import \\\n    CONF_SCALE, CONF_TRIM, CONF_LEFT, CONF_RIGHT, CONF_TOP, CONF_BOTTOM, \\\n    COLOR_MAP_OUTSIDE, COLOR_MAP_INSIDE, COLOR_MAP_WALL, COLOR_ROOM_PREFIX\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass ImageHandlerDreame(ImageHandler):\n    class PixelTypes(IntEnum):\n        NONE = 0\n        FLOOR = 1\n        WALL = 2\n\n    @staticmethod\n    def parse(raw_data: bytes, header, colors, image_config, map_data_type: str) -> Tuple[ImageType, Dict[int, Room]]:\n        scale = image_config[CONF_SCALE]\n        trim_left = int(image_config[CONF_TRIM][CONF_LEFT] * header.image_width / 100)\n        trim_right = int(image_config[CONF_TRIM][CONF_RIGHT] * header.image_width / 100)\n        trim_top = int(image_config[CONF_TRIM][CONF_TOP] * header.image_height / 100)\n        trim_bottom = int(image_config[CONF_TRIM][CONF_BOTTOM] * header.image_height / 100)\n        trimmed_height = header.image_height - trim_top - trim_bottom\n        trimmed_width = header.image_width - trim_left - trim_right\n        image = Image.new('RGBA', (trimmed_width, trimmed_height))\n        if header.image_width == 0 or header.image_height == 0:\n            return ImageHandler.create_empty_map_image(colors), {}\n        pixels = image.load()\n        rooms = {}\n\n        for img_y in range(trimmed_height):\n            for img_x in range(trimmed_width):\n                x = img_x\n                y = trimmed_height - img_y - 1\n                room_x = img_x + trim_left\n                room_y = img_y + trim_bottom\n\n                # TODO : use MapDataParserDreame.MapDataTypes enum\n                if map_data_type == \"regular\":\n                    px = raw_data[img_x + trim_left + header.image_width * (img_y + trim_bottom)]\n                    segment_id = px >> 2\n                    if 0 < segment_id < 62:\n                        if segment_id not in rooms:\n                            rooms[segment_id] = Room(segment_id, room_x, room_y, room_x, room_y)\n                        rooms[segment_id] = Room(segment_id,\n                                                 min(rooms[segment_id].x0, room_x), min(rooms[segment_id].y0, room_y),\n                                                 max(rooms[segment_id].x1, room_x), max(rooms[segment_id].y1, room_y))\n                        default = ImageHandler.ROOM_COLORS[segment_id >> 1]\n                        pixels[x, y] = ImageHandler.__get_color__(f\"{COLOR_ROOM_PREFIX}{segment_id}\", colors, default)\n                    else:\n                        masked_px = px & 0b00000011\n\n                        if masked_px == ImageHandlerDreame.PixelTypes.NONE:\n                            pixels[x, y] = ImageHandler.__get_color__(COLOR_MAP_OUTSIDE, colors)\n                        elif masked_px == ImageHandlerDreame.PixelTypes.FLOOR:\n                            pixels[x, y] = ImageHandler.__get_color__(COLOR_MAP_INSIDE, colors)\n                        elif masked_px == ImageHandlerDreame.PixelTypes.WALL:\n                            pixels[x, y] = ImageHandler.__get_color__(COLOR_MAP_WALL, colors)\n                        else:\n                            _LOGGER.warning(f'unhandled pixel type: {px}')\n                elif map_data_type == \"rism\":\n                    px = raw_data[img_x + trim_left + header.image_width * (img_y + trim_bottom)]\n                    segment_id = px & 0b01111111\n                    wall_flag = px >> 7\n\n                    if wall_flag:\n                        pixels[x, y] = ImageHandler.__get_color__(COLOR_MAP_WALL, colors)\n                    elif segment_id > 0:\n                        if segment_id not in rooms:\n                            rooms[segment_id] = Room(segment_id, room_x, room_y, room_x, room_y)\n                        rooms[segment_id] = Room(segment_id,\n                                                 min(rooms[segment_id].x0, room_x), min(rooms[segment_id].y0, room_y),\n                                                 max(rooms[segment_id].x1, room_x), max(rooms[segment_id].y1, room_y))\n                        default = ImageHandler.ROOM_COLORS[segment_id >> 1]\n                        pixels[x, y] = ImageHandler.__get_color__(f\"{COLOR_ROOM_PREFIX}{segment_id}\", colors, default)\n\n        if image_config[\"scale\"] != 1 and header.image_width != 0 and header.image_height != 0:\n            image = image.resize((int(trimmed_width * scale), int(trimmed_height * scale)), resample=Image.NEAREST)\n        return image, rooms\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/dreame/map_data_parser.py",
    "content": "import base64\nimport json\nimport logging\nimport re\nimport zlib\nfrom enum import Enum, IntEnum\nfrom typing import Dict, List, Optional, Tuple\n\nfrom custom_components.xiaomi_cloud_map_extractor.common.map_data import Area, ImageData, MapData, Path, Point, Room, \\\n    Wall\nfrom custom_components.xiaomi_cloud_map_extractor.common.map_data_parser import MapDataParser\nfrom custom_components.xiaomi_cloud_map_extractor.dreame.image_handler import ImageHandlerDreame\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass MapDataHeader:\n    def __init__(self):\n        self.map_index: Optional[int] = None\n        self.frame_type: Optional[int] = None\n        self.vacuum_position: Optional[Point] = None\n        self.charger_position: Optional[Point] = None\n        self.image_pixel_size: Optional[int] = None\n        self.image_width: Optional[int] = None\n        self.image_height: Optional[int] = None\n        self.image_left: Optional[int] = None\n        self.image_top: Optional[int] = None\n\n\nclass MapDataParserDreame(MapDataParser):\n    HEADER_SIZE = 27\n    PATH_REGEX = r'(?P<operator>[SL])(?P<x>-?\\d+),(?P<y>-?\\d+)'\n\n    class PathOperators(str, Enum):\n        START = \"S\"\n        RELATIVE_LINE = \"L\"\n\n    class FrameTypes(IntEnum):\n        I_FRAME = 73\n        P_FRAME = 80\n\n    class MapDataTypes(str, Enum):\n        REGULAR = \"regular\"\n        RISM = \"rism\"  # Room - information\n\n    @staticmethod\n    def decode_map(raw_map: str, colors, drawables, texts, sizes, image_config,\n                   map_data_type=MapDataTypes.REGULAR) -> MapData:\n        _LOGGER.debug(f'decoding {map_data_type} type map')\n        raw_map_string = raw_map.replace('_', '/').replace('-', '+')\n        unzipped = zlib.decompress(base64.decodebytes(raw_map_string.encode(\"utf8\")))\n        return MapDataParserDreame.parse(unzipped, colors, drawables, texts, sizes, image_config, map_data_type)\n\n    @staticmethod\n    def parse(raw: bytes, colors, drawables, texts, sizes, image_config,\n              map_data_type: MapDataTypes = MapDataTypes.REGULAR, *args, **kwargs) -> Optional[MapData]:\n        map_data = MapData(0, 1000)\n\n        header = MapDataParserDreame.parse_header(raw)\n\n        if header.frame_type != MapDataParserDreame.FrameTypes.I_FRAME:\n            _LOGGER.error(\"unsupported map frame type\")\n            return\n\n        if len(raw) >= MapDataParserDreame.HEADER_SIZE + header.image_width * header.image_height:\n            image_raw = raw[MapDataParserDreame.HEADER_SIZE:\n                            MapDataParserDreame.HEADER_SIZE + header.image_width * header.image_height]\n            additional_data_raw = raw[MapDataParserDreame.HEADER_SIZE + header.image_width * header.image_height:]\n            additional_data_json = json.loads(additional_data_raw.decode(\"utf8\"))\n            _LOGGER.debug(f'map additional_data: {additional_data_json}')\n\n            map_data.charger = header.charger_position\n            map_data.vacuum_position = header.vacuum_position\n\n            map_data.image, map_data.rooms = MapDataParserDreame.parse_image(image_raw, header, colors, image_config,\n                                                                             additional_data_json, map_data_type)\n\n            if additional_data_json.get(\"rism\") and \\\n                    additional_data_json.get(\"ris\") and additional_data_json[\"ris\"] == 2:\n                rism_map_data = MapDataParserDreame.decode_map(\n                    additional_data_json[\"rism\"],\n                    colors,\n                    drawables,\n                    texts,\n                    sizes,\n                    image_config,\n                    MapDataParserDreame.MapDataTypes.RISM\n                )\n                map_data.no_go_areas = rism_map_data.no_go_areas\n                map_data.no_mopping_areas = rism_map_data.no_mopping_areas\n                map_data.walls = rism_map_data.walls\n                map_data.rooms = rism_map_data.rooms\n                _LOGGER.debug(f\"rooms: {map_data.rooms}\")\n\n                if not rism_map_data.image.is_empty:\n                    map_data.image = rism_map_data.image\n\n            if additional_data_json.get(\"tr\"):\n                map_data.path = MapDataParserDreame.parse_path(additional_data_json[\"tr\"])\n\n            if additional_data_json.get(\"vw\"):\n                if additional_data_json[\"vw\"].get(\"rect\"):\n                    map_data.no_go_areas = MapDataParserDreame.parse_areas(additional_data_json[\"vw\"][\"rect\"])\n                if additional_data_json[\"vw\"].get(\"mop\"):\n                    map_data.no_mopping_areas = MapDataParserDreame.parse_areas(additional_data_json[\"vw\"][\"mop\"])\n                if additional_data_json[\"vw\"].get(\"line\"):\n                    map_data.walls = MapDataParserDreame.parse_virtual_walls(additional_data_json[\"vw\"][\"line\"])\n\n            if additional_data_json.get(\"sa\") and isinstance(additional_data_json[\"sa\"], list):\n                active_segment_ids = [sa[0] for sa in additional_data_json[\"sa\"]]\n\n            if not map_data.image.is_empty:\n                if map_data_type == MapDataParserDreame.MapDataTypes.REGULAR:\n                    MapDataParserDreame.draw_elements(colors, drawables, sizes, map_data, image_config)\n                    ImageHandlerDreame.rotate(map_data.image)\n\n        return map_data\n\n    @staticmethod\n    def parse_header(raw: bytes) -> Optional[MapDataHeader]:\n        header = MapDataHeader()\n\n        if not raw or len(raw) < MapDataParserDreame.HEADER_SIZE:\n            _LOGGER.error(\"wrong header size for map\")\n            return\n\n        header.map_index = MapDataParserDreame.read_int_16_le(raw)\n        header.frame_type = MapDataParserDreame.read_int_8(raw, 4)\n        header.vacuum_position = Point(\n            MapDataParserDreame.read_int_16_le(raw, 5),\n            MapDataParserDreame.read_int_16_le(raw, 7),\n            MapDataParserDreame.read_int_16_le(raw, 9)\n        )\n        header.charger_position = Point(\n            MapDataParserDreame.read_int_16_le(raw, 11),\n            MapDataParserDreame.read_int_16_le(raw, 13),\n            MapDataParserDreame.read_int_16_le(raw, 15)\n        )\n        header.image_pixel_size = MapDataParserDreame.read_int_16_le(raw, 17)\n        header.image_width = MapDataParserDreame.read_int_16_le(raw, 19)\n        header.image_height = MapDataParserDreame.read_int_16_le(raw, 21)\n        header.image_left = round(MapDataParserDreame.read_int_16_le(raw, 23) / header.image_pixel_size)\n        header.image_top = round(MapDataParserDreame.read_int_16_le(raw, 25) / header.image_pixel_size)\n\n        _LOGGER.debug(f'decoded map header : {header.__dict__}')\n\n        return header\n\n    @staticmethod\n    def parse_image(image_raw: bytes, header: MapDataHeader, colors, image_config,\n                    additional_data_json, map_data_type: MapDataTypes) -> Tuple[ImageData, Dict[int, Room]]:\n\n        _LOGGER.debug(f\"parse image for map {map_data_type}\")\n        image, image_rooms = ImageHandlerDreame.parse(image_raw, header, colors, image_config, map_data_type)\n\n        room_names = {}\n        if additional_data_json.get(\"seg_inf\"):\n            room_names = {int(k): base64.b64decode(v.get(\"name\")).decode('utf-8') for (k, v) in\n                          additional_data_json[\"seg_inf\"].items() if\n                          v.get(\"name\")}\n\n        rooms = {k: Room(\n            k,\n            (v.x0 + header.image_left) * header.image_pixel_size,\n            (v.y0 + header.image_top) * header.image_pixel_size,\n            (v.x1 + header.image_left) * header.image_pixel_size,\n            (v.y1 + header.image_top) * header.image_pixel_size,\n            room_names[k] if room_names.get(k) else str(k)\n        ) for (k, v) in image_rooms.items()}\n\n        return ImageData(\n            header.image_width * header.image_height,\n            header.image_top,\n            header.image_left,\n            header.image_height,\n            header.image_width,\n            image_config,\n            image,\n            lambda p: MapDataParserDreame.map_to_image(p, header.image_pixel_size)\n        ), rooms\n\n    @staticmethod\n    def map_to_image(p: Point, image_pixel_size: int) -> Point:\n        return Point(\n            p.x / image_pixel_size,\n            p.y / image_pixel_size\n        )\n\n    @staticmethod\n    def parse_path(path_string: str) -> Path:\n        r = re.compile(MapDataParserDreame.PATH_REGEX)\n        matches = [m.groupdict() for m in r.finditer(path_string)]\n\n        current_path = []\n        path_points = []\n        current_position = Point(0, 0)\n        for match in matches:\n            if match[\"operator\"] == MapDataParserDreame.PathOperators.START:\n                current_path = []\n                path_points.append(current_path)\n                current_position = Point(int(match[\"x\"]), int(match[\"y\"]))\n            elif match[\"operator\"] == MapDataParserDreame.PathOperators.RELATIVE_LINE:\n                current_position = Point(current_position.x + int(match[\"x\"]), current_position.y + int(match[\"y\"]))\n            else:\n                _LOGGER.error(f'invalid path operator {match[\"operator\"]}')\n            current_path.append(current_position)\n\n        return Path(None, None, None, path_points)\n\n    @staticmethod\n    def parse_areas(areas: list) -> List[Area]:\n        parsed_areas = []\n        for area in areas:\n            x_coords = sorted([area[0], area[2]])\n            y_coords = sorted([area[1], area[3]])\n            parsed_areas.append(\n                Area(\n                    x_coords[0], y_coords[0],\n                    x_coords[1], y_coords[0],\n                    x_coords[1], y_coords[1],\n                    x_coords[0], y_coords[1]\n                )\n            )\n        return parsed_areas\n\n    @staticmethod\n    def parse_virtual_walls(virtual_walls: list) -> List[Wall]:\n        return [Wall(virtual_wall[0], virtual_wall[1], virtual_wall[2], virtual_wall[3])\n                for virtual_wall in virtual_walls]\n\n    @staticmethod\n    def read_int_8(data: bytes, offset: int = 0):\n        return int.from_bytes(data[offset:offset + 1], byteorder='big', signed=True)\n\n    @staticmethod\n    def read_int_8_le(data: bytes, offset: int = 0):\n        return int.from_bytes(data[offset:offset + 1], byteorder='little', signed=True)\n\n    @staticmethod\n    def read_int_16(data: bytes, offset: int = 0):\n        return int.from_bytes(data[offset:offset + 2], byteorder='big', signed=True)\n\n    @staticmethod\n    def read_int_16_le(data: bytes, offset: int = 0):\n        return int.from_bytes(data[offset:offset + 2], byteorder='little', signed=True)\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/dreame/vacuum.py",
    "content": "from custom_components.xiaomi_cloud_map_extractor.common.map_data import MapData\nfrom custom_components.xiaomi_cloud_map_extractor.common.vacuum_v2 import XiaomiCloudVacuumV2\nfrom custom_components.xiaomi_cloud_map_extractor.common.xiaomi_cloud_connector import XiaomiCloudConnector\nfrom custom_components.xiaomi_cloud_map_extractor.dreame.map_data_parser import MapDataParserDreame\nfrom custom_components.xiaomi_cloud_map_extractor.types import Colors, Drawables, ImageConfig, Sizes, Texts\n\n\nclass DreameVacuum(XiaomiCloudVacuumV2):\n\n    def __init__(self, connector: XiaomiCloudConnector, country: str, user_id: str, device_id: str, model: str):\n        super().__init__(connector, country, user_id, device_id, model)\n\n    def get_map_archive_extension(self) -> str:\n        return \"b64\"\n\n    def decode_map(self,\n                   raw_map: bytes,\n                   colors: Colors,\n                   drawables: Drawables,\n                   texts: Texts,\n                   sizes: Sizes,\n                   image_config: ImageConfig) -> MapData:\n        raw_map_string = raw_map.decode()\n        return MapDataParserDreame.decode_map(raw_map_string, colors, drawables, texts, sizes, image_config)\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/manifest.json",
    "content": "{\n  \"domain\": \"xiaomi_cloud_map_extractor\",\n  \"name\": \"Xiaomi Cloud Map Extractor\",\n  \"documentation\": \"https://github.com/PiotrMachowski/Home-Assistant-custom-components-Xiaomi-Cloud-Map-Extractor\",\n  \"issue_tracker\": \"https://github.com/PiotrMachowski/Home-Assistant-custom-components-Xiaomi-Cloud-Map-Extractor/issues\",\n  \"dependencies\": [],\n  \"codeowners\": [\n    \"@PiotrMachowski\"\n  ],\n  \"requirements\": [\n    \"pillow\",\n    \"pybase64\",\n    \"python-miio\",\n    \"requests\",\n    \"pycryptodome\"\n  ],\n  \"version\": \"v2.2.0\",\n  \"iot_class\": \"cloud_polling\"\n}\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/roidmi/__init__.py",
    "content": ""
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/roidmi/image_handler.py",
    "content": "import logging\nfrom typing import Dict, List, Tuple\n\nfrom PIL import Image\nfrom PIL.Image import Image as ImageType\n\nfrom custom_components.xiaomi_cloud_map_extractor.common.image_handler import ImageHandler\nfrom custom_components.xiaomi_cloud_map_extractor.const import *\nfrom custom_components.xiaomi_cloud_map_extractor.types import Colors, ImageConfig\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass ImageHandlerRoidmi(ImageHandler):\n    MAP_WALL = 0\n    MAP_OUTSIDE = 127\n    MAP_UNKNOWN = 255\n\n    @staticmethod\n    def parse(raw_data: bytes, width: int, height: int, colors: Colors, image_config: ImageConfig,\n              room_numbers: List[int]) \\\n            -> Tuple[ImageType, Dict[int, Tuple[int, int, int, int]]]:\n        rooms = {}\n        scale = image_config[CONF_SCALE]\n        trim_left = int(image_config[CONF_TRIM][CONF_LEFT] * width / 100)\n        trim_right = int(image_config[CONF_TRIM][CONF_RIGHT] * width / 100)\n        trim_top = int(image_config[CONF_TRIM][CONF_TOP] * height / 100)\n        trim_bottom = int(image_config[CONF_TRIM][CONF_BOTTOM] * height / 100)\n        trimmed_height = height - trim_top - trim_bottom\n        trimmed_width = width - trim_left - trim_right\n        if trimmed_width == 0 or trimmed_height == 0:\n            return ImageHandler.create_empty_map_image(colors), rooms\n        image = Image.new('RGBA', (trimmed_width, trimmed_height))\n        pixels = image.load()\n        unknown_pixels = set()\n        for img_y in range(trimmed_height):\n            for img_x in range(trimmed_width):\n                pixel_type = raw_data[img_x + trim_left + width * (img_y + trim_bottom)]\n                x = img_x\n                y = trimmed_height - 1 - img_y\n                if pixel_type == ImageHandlerRoidmi.MAP_OUTSIDE:\n                    pixels[x, y] = ImageHandler.__get_color__(COLOR_MAP_OUTSIDE, colors)\n                elif pixel_type == ImageHandlerRoidmi.MAP_WALL:\n                    pixels[x, y] = ImageHandler.__get_color__(COLOR_MAP_WALL_V2, colors)\n                elif pixel_type == ImageHandlerRoidmi.MAP_UNKNOWN:\n                    pixels[x, y] = ImageHandler.__get_color__(COLOR_UNKNOWN, colors)\n                elif pixel_type in room_numbers:\n                    room_x = img_x + trim_left\n                    room_y = img_y + trim_bottom\n                    room_number = pixel_type\n                    if room_number not in rooms:\n                        rooms[room_number] = (room_x, room_y, room_x, room_y)\n                    else:\n                        rooms[room_number] = (min(rooms[room_number][0], room_x),\n                                              min(rooms[room_number][1], room_y),\n                                              max(rooms[room_number][2], room_x),\n                                              max(rooms[room_number][3], room_y))\n                    default = ImageHandler.ROOM_COLORS[room_number % len(ImageHandler.ROOM_COLORS)]\n                    pixels[x, y] = ImageHandler.__get_color__(f\"{COLOR_ROOM_PREFIX}{room_number}\", colors, default)\n                else:\n                    pixels[x, y] = ImageHandler.__get_color__(COLOR_UNKNOWN, colors)\n                    unknown_pixels.add(pixel_type)\n        if image_config[\"scale\"] != 1 and trimmed_width != 0 and trimmed_height != 0:\n            image = image.resize((int(trimmed_width * scale), int(trimmed_height * scale)), resample=Image.NEAREST)\n        if len(unknown_pixels) > 0:\n            _LOGGER.warning('unknown pixel_types: %s', unknown_pixels)\n        return image, rooms\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/roidmi/map_data_parser.py",
    "content": "import json\nimport logging\nimport math\nfrom typing import Dict, List, Optional, Tuple\n\nfrom custom_components.xiaomi_cloud_map_extractor.common.map_data import Area, ImageData, MapData, Path, Point, Room, \\\n    Wall\nfrom custom_components.xiaomi_cloud_map_extractor.common.map_data_parser import MapDataParser\nfrom custom_components.xiaomi_cloud_map_extractor.const import *\nfrom custom_components.xiaomi_cloud_map_extractor.roidmi.image_handler import ImageHandlerRoidmi\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass MapDataParserRoidmi(MapDataParser):\n\n    @staticmethod\n    def parse(raw: bytes, colors, drawables, texts, sizes, image_config, *args, **kwargs) -> MapData:\n        scale = float(image_config[CONF_SCALE])\n        map_image_size = raw.find(bytes([127, 123]))\n        map_image = raw[16:map_image_size + 1]\n        map_info_raw = raw[map_image_size + 1:]\n        map_info = json.loads(map_info_raw)\n        width = map_info[\"width\"]\n        height = map_info[\"height\"]\n        x_min = map_info[\"x_min\"]\n        y_min = map_info[\"y_min\"]\n        resolution = map_info[\"resolution\"]\n        x_min_calc = x_min / resolution\n        y_min_calc = y_min / resolution\n        map_data = MapData(0, 1000)\n        map_data.rooms = MapDataParserRoidmi.parse_rooms(map_info)\n        image = MapDataParserRoidmi.parse_image(map_image, width, height, x_min_calc, y_min_calc, resolution,\n                                                colors, image_config, map_data.rooms)\n        map_data.image = image\n        map_data.path = MapDataParserRoidmi.parse_path(map_info)\n        map_data.vacuum_position = MapDataParserRoidmi.parse_vacuum_position(map_info)\n        map_data.charger = MapDataParserRoidmi.parse_charger_position(map_info)\n        map_data.no_go_areas, map_data.no_mopping_areas, map_data.walls = MapDataParserRoidmi.parse_areas(map_info)\n        if not map_data.image.is_empty:\n            MapDataParserRoidmi.draw_elements(colors, drawables, sizes, map_data, image_config)\n            if len(map_data.rooms) > 0 and map_data.vacuum_position is not None:\n                map_data.vacuum_room = MapDataParserRoidmi.get_current_vacuum_room(map_image, map_data, width)\n                if map_data.vacuum_room is not None:\n                    map_data.vacuum_room_name = map_data.rooms[map_data.vacuum_room].name\n            ImageHandlerRoidmi.rotate(map_data.image)\n            ImageHandlerRoidmi.draw_texts(map_data.image, texts)\n        return map_data\n\n    @staticmethod\n    def get_current_vacuum_room(map_image: bytes, map_data: MapData, original_width: int) -> Optional[int]:\n        p = map_data.image.dimensions.img_transformation(map_data.vacuum_position)\n        room_number = map_image[int(p.x) + int(p.y) * original_width]\n        if room_number in map_data.rooms:\n            return room_number\n        return None\n\n    @staticmethod\n    def map_to_image(p: Point, resolution, min_x, min_y) -> Point:\n        return Point(p.x / 1000 / resolution - min_x, p.y / 1000 / resolution - min_y)\n\n    @staticmethod\n    def image_to_map(p: Point, resolution, min_x, min_y) -> Point:\n        return Point((p.x + min_x) * resolution * 1000, (p.y + min_y) * resolution * 1000)\n\n    @staticmethod\n    def parse_image(map_image: bytes, width: int, height: int, min_x: float, min_y: float, resolution: float,\n                    colors: Dict, image_config: Dict, rooms: Dict[int, Room]) -> ImageData:\n        image_top = 0\n        image_left = 0\n        room_numbers = list(rooms.keys())\n        image, rooms_raw = ImageHandlerRoidmi.parse(map_image, width, height, colors, image_config, room_numbers)\n        for number, room in rooms_raw.items():\n            pf = lambda p: MapDataParserRoidmi.image_to_map(p, resolution, min_x, min_y)\n            p1 = pf(Point(room[0] + image_left, room[1] + image_top))\n            p2 = pf(Point(room[2] + image_left, room[3] + image_top))\n            rooms[number].x0 = p1.x\n            rooms[number].y0 = p1.y\n            rooms[number].x1 = p2.x\n            rooms[number].y1 = p2.y\n        return ImageData(width * height, image_top, image_left, height, width, image_config, image,\n                         lambda p: MapDataParserRoidmi.map_to_image(p, resolution, min_x, min_y))\n\n    @staticmethod\n    def parse_path(map_info: dict) -> Path:\n        path_points = []\n        if \"posArray\" in map_info:\n            raw_points = json.loads(map_info[\"posArray\"])\n            for raw_point in raw_points:\n                point = Point(raw_point[0], raw_point[1])\n                path_points.append(point)\n        return Path(None, None, None, [path_points])\n\n    @staticmethod\n    def parse_vacuum_position(map_info: dict) -> Point:\n        vacuum_position = MapDataParserRoidmi.parse_position(map_info, \"robotPos\", \"robotPos\", \"robotPhi\")\n        if vacuum_position is None:\n            vacuum_position = MapDataParserRoidmi.parse_position(map_info, \"posX\", \"posY\", \"posPhi\")\n        return vacuum_position\n\n    @staticmethod\n    def parse_charger_position(map_info: dict) -> Point:\n        return MapDataParserRoidmi.parse_position(map_info, \"chargeHandlePos\", \"chargeHandlePos\", \"chargeHandlePhi\")\n\n    @staticmethod\n    def parse_position(map_info: dict, x_label: str, y_label: str, a_label: str) -> Optional[Point]:\n        position = None\n        if x_label not in map_info or y_label not in map_info:\n            return position\n        x = map_info[x_label]\n        y = map_info[y_label]\n        a = None\n        if x_label == y_label:\n            x = x[0]\n            y = y[1]\n        if a_label in map_info:\n            a = map_info[a_label] / 1000 * 180 / math.pi\n        position = Point(x, y, a)\n        return position\n\n    @staticmethod\n    def parse_rooms(map_info: dict) -> Dict[int, Room]:\n        rooms = {}\n        areas = []\n        if \"autoArea\" in map_info:\n            areas = map_info[\"autoArea\"]\n        elif \"autoAreaValue\" in map_info and map_info[\"autoAreaValue\"] is not None:\n            areas = map_info[\"autoAreaValue\"]\n        for area in areas:\n            id = area[\"id\"]\n            name = area[\"name\"]\n            pos_x = area[\"pos\"][0] if \"pos\" in area else None\n            pos_y = area[\"pos\"][1] if \"pos\" in area else None\n            rooms[id] = Room(id, None, None, None, None, name, pos_x, pos_y)\n        return rooms\n\n    @staticmethod\n    def parse_areas(map_info: dict) -> Tuple[List[Area], List[Area], List[Wall]]:\n        no_go_areas = []\n        no_mopping_areas = []\n        walls = []\n        if \"area\" in map_info:\n            areas = map_info[\"area\"]\n            for area in areas:\n                if \"active\" in area and area[\"active\"] == \"forbid\" and \"vertexs\" in area and len(area[\"vertexs\"]) == 4:\n                    vertexs = area[\"vertexs\"]\n                    x0 = vertexs[0][0]\n                    y0 = vertexs[0][1]\n                    x1 = vertexs[1][0]\n                    y1 = vertexs[1][1]\n                    x2 = vertexs[2][0]\n                    y2 = vertexs[2][1]\n                    x3 = vertexs[3][0]\n                    y3 = vertexs[3][1]\n                    no_area = Area(x0, y0, x1, y1, x2, y2, x3, y3)\n                    if \"forbidType\" in area and area[\"forbidType\"] == \"mop\":\n                        no_mopping_areas.append(no_area)\n                    if \"forbidType\" in area and area[\"forbidType\"] == \"all\":\n                        no_go_areas.append(no_area)\n                if \"active\" in area and area[\"active\"] == \"forbid\" and \"vertexs\" in area and len(area[\"vertexs\"]) == 2:\n                    vertexs = area[\"vertexs\"]\n                    x0 = vertexs[0][0]\n                    y0 = vertexs[0][1]\n                    x1 = vertexs[1][0]\n                    y1 = vertexs[1][1]\n                    wall = Wall(x0, y0, x1, y1)\n                    if \"forbidType\" in area and area[\"forbidType\"] == \"all\":\n                        walls.append(wall)\n        return no_go_areas, no_mopping_areas, walls\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/roidmi/vacuum.py",
    "content": "import gzip\n\nfrom custom_components.xiaomi_cloud_map_extractor.common.map_data import MapData\nfrom custom_components.xiaomi_cloud_map_extractor.common.vacuum_v2 import XiaomiCloudVacuumV2\nfrom custom_components.xiaomi_cloud_map_extractor.common.xiaomi_cloud_connector import XiaomiCloudConnector\nfrom custom_components.xiaomi_cloud_map_extractor.roidmi.map_data_parser import MapDataParserRoidmi\nfrom custom_components.xiaomi_cloud_map_extractor.types import Colors, Drawables, ImageConfig, Sizes, Texts\n\n\nclass RoidmiVacuum(XiaomiCloudVacuumV2):\n\n    def __init__(self, connector: XiaomiCloudConnector, country: str, user_id: str, device_id: str, model: str):\n        super().__init__(connector, country, user_id, device_id, model)\n\n    def decode_map(self,\n                   raw_map: bytes,\n                   colors: Colors,\n                   drawables: Drawables,\n                   texts: Texts,\n                   sizes: Sizes,\n                   image_config: ImageConfig) -> MapData:\n        unzipped = gzip.decompress(raw_map)\n        return MapDataParserRoidmi.parse(unzipped, colors, drawables, texts, sizes, image_config)\n\n    def get_map_archive_extension(self) -> str:\n        return \"gz\"\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/services.yaml",
    "content": "reload:\n  name: Reload\n  description: Reload all entities of Xiaomi Cloud Map Extractor platform\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/types.py",
    "content": "from typing import Any, Dict, List, Tuple, Union\n\nColor = Union[Tuple[int, int, int], Tuple[int, int, int, int]]\nColors = Dict[str, Color]\nDrawables = List[str]\nTexts = List[Any]\nSizes = Dict[str, float]\nImageConfig = Dict[str, Any]\nCalibrationPoints = List[Dict[str, Dict[str, Union[float, int]]]]\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/unsupported/__init__.py",
    "content": ""
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/unsupported/vacuum.py",
    "content": "from custom_components.xiaomi_cloud_map_extractor.common.vacuum_v2 import XiaomiCloudVacuumV2\n\n\nclass UnsupportedVacuum(XiaomiCloudVacuumV2):\n\n    def __init__(self, connector, country, user_id, device_id, model):\n        super().__init__(connector, country, user_id, device_id, model)\n\n    def get_map_archive_extension(self):\n        return \"unknown\"\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/viomi/__init__.py",
    "content": "\"\"\"Functionalities specific for Viomi vacuums.\"\"\"\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/viomi/image_handler.py",
    "content": "import logging\nfrom typing import Dict, Optional, Set, Tuple\n\nfrom PIL import Image\nfrom PIL.Image import Image as ImageType\n\nfrom custom_components.xiaomi_cloud_map_extractor.common.image_handler import ImageHandler\nfrom custom_components.xiaomi_cloud_map_extractor.const import *\nfrom custom_components.xiaomi_cloud_map_extractor.types import Colors, ImageConfig\nfrom custom_components.xiaomi_cloud_map_extractor.viomi.parsing_buffer import ParsingBuffer\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass ImageHandlerViomi(ImageHandler):\n    MAP_OUTSIDE = 0x00\n    MAP_WALL = 0xff\n    MAP_SCAN = 0x01\n    MAP_NEW_DISCOVERED_AREA = 0x02\n    MAP_ROOM_MIN = 10\n    MAP_ROOM_MAX = 59\n    MAP_SELECTED_ROOM_MIN = 60\n    MAP_SELECTED_ROOM_MAX = 109\n\n    @staticmethod\n    def parse(buf: ParsingBuffer, width: int, height: int, colors: Colors, image_config: ImageConfig,\n              draw_cleaned_area: bool) \\\n            -> Tuple[ImageType, Dict[int, Tuple[int, int, int, int]], Set[int], Optional[ImageType]]:\n        rooms = {}\n        cleaned_areas = set()\n        scale = image_config[CONF_SCALE]\n        trim_left = int(image_config[CONF_TRIM][CONF_LEFT] * width / 100)\n        trim_right = int(image_config[CONF_TRIM][CONF_RIGHT] * width / 100)\n        trim_top = int(image_config[CONF_TRIM][CONF_TOP] * height / 100)\n        trim_bottom = int(image_config[CONF_TRIM][CONF_BOTTOM] * height / 100)\n        trimmed_height = height - trim_top - trim_bottom\n        trimmed_width = width - trim_left - trim_right\n        if trimmed_width == 0 or trimmed_height == 0:\n            return ImageHandler.create_empty_map_image(colors), rooms, cleaned_areas, None\n        image = Image.new('RGBA', (trimmed_width, trimmed_height))\n        pixels = image.load()\n        cleaned_areas_layer = None\n        cleaned_areas_pixels = None\n        if draw_cleaned_area:\n            cleaned_areas_layer = Image.new('RGBA', (trimmed_width, trimmed_height))\n            cleaned_areas_pixels = cleaned_areas_layer.load()\n        buf.skip('trim_bottom', trim_bottom * width)\n        unknown_pixels = set()\n        for img_y in range(trimmed_height):\n            buf.skip('trim_left', trim_left)\n            for img_x in range(trimmed_width):\n                pixel_type = buf.get_uint8('pixel')\n                x = img_x\n                y = trimmed_height - 1 - img_y\n                if pixel_type == ImageHandlerViomi.MAP_OUTSIDE:\n                    pixels[x, y] = ImageHandler.__get_color__(COLOR_MAP_OUTSIDE, colors)\n                elif pixel_type == ImageHandlerViomi.MAP_WALL:\n                    pixels[x, y] = ImageHandler.__get_color__(COLOR_MAP_WALL_V2, colors)\n                elif pixel_type == ImageHandlerViomi.MAP_SCAN:\n                    pixels[x, y] = ImageHandler.__get_color__(COLOR_SCAN, colors)\n                elif pixel_type == ImageHandlerViomi.MAP_NEW_DISCOVERED_AREA:\n                    pixels[x, y] = ImageHandler.__get_color__(COLOR_NEW_DISCOVERED_AREA, colors)\n                elif ImageHandlerViomi.MAP_ROOM_MIN <= pixel_type <= ImageHandlerViomi.MAP_SELECTED_ROOM_MAX:\n                    room_x = img_x + trim_left\n                    room_y = img_y + trim_bottom\n                    if pixel_type < ImageHandlerViomi.MAP_SELECTED_ROOM_MIN:\n                        room_number = pixel_type\n                    else:\n                        room_number = pixel_type - ImageHandlerViomi.MAP_SELECTED_ROOM_MIN + ImageHandlerViomi.MAP_ROOM_MIN\n                        cleaned_areas.add(room_number)\n                        if draw_cleaned_area:\n                            cleaned_areas_pixels[x, y] = ImageHandler.__get_color__(COLOR_CLEANED_AREA, colors)\n                    if room_number not in rooms:\n                        rooms[room_number] = (room_x, room_y, room_x, room_y)\n                    else:\n                        rooms[room_number] = (min(rooms[room_number][0], room_x),\n                                              min(rooms[room_number][1], room_y),\n                                              max(rooms[room_number][2], room_x),\n                                              max(rooms[room_number][3], room_y))\n                    default = ImageHandler.ROOM_COLORS[room_number % len(ImageHandler.ROOM_COLORS)]\n                    pixels[x, y] = ImageHandler.__get_color__(f\"{COLOR_ROOM_PREFIX}{room_number}\", colors, default)\n                else:\n                    pixels[x, y] = ImageHandler.__get_color__(COLOR_UNKNOWN, colors)\n                    unknown_pixels.add(pixel_type)\n            buf.skip('trim_right', trim_right)\n        buf.skip('trim_top', trim_top * width)\n        if image_config[\"scale\"] != 1 and trimmed_width != 0 and trimmed_height != 0:\n            image = image.resize((int(trimmed_width * scale), int(trimmed_height * scale)), resample=Image.NEAREST)\n            if draw_cleaned_area:\n                cleaned_areas_layer = cleaned_areas_layer.resize(\n                    (int(trimmed_width * scale), int(trimmed_height * scale)), resample=Image.NEAREST)\n        if len(unknown_pixels) > 0:\n            _LOGGER.warning('unknown pixel_types: %s', unknown_pixels)\n        return image, rooms, cleaned_areas, cleaned_areas_layer\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/viomi/map_data_parser.py",
    "content": "import logging\nimport math\nfrom typing import Dict, List, Optional, Set, Tuple\n\nfrom custom_components.xiaomi_cloud_map_extractor.common.map_data import Area, ImageData, MapData, Path, Point, Room, \\\n    Wall, Zone\nfrom custom_components.xiaomi_cloud_map_extractor.common.map_data_parser import MapDataParser\nfrom custom_components.xiaomi_cloud_map_extractor.const import *\nfrom custom_components.xiaomi_cloud_map_extractor.types import Colors, Drawables, ImageConfig, Sizes, Texts\nfrom custom_components.xiaomi_cloud_map_extractor.viomi.image_handler import ImageHandlerViomi\nfrom custom_components.xiaomi_cloud_map_extractor.viomi.parsing_buffer import ParsingBuffer\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass MapDataParserViomi(MapDataParser):\n    FEATURE_ROBOT_STATUS = 0x00000001\n    FEATURE_IMAGE = 0x00000002\n    FEATURE_HISTORY = 0x00000004\n    FEATURE_CHARGE_STATION = 0x00000008\n    FEATURE_RESTRICTED_AREAS = 0x00000010\n    FEATURE_CLEANING_AREAS = 0x00000020\n    FEATURE_NAVIGATE = 0x00000040\n    FEATURE_REALTIME = 0x00000080\n    FEATURE_ROOMS = 0x00001000\n\n    POSITION_UNKNOWN = 1100\n\n    @staticmethod\n    def parse(raw: bytes, colors: Colors, drawables: Drawables, texts: Texts, sizes: Sizes,\n              image_config: ImageConfig, *args, **kwargs) -> MapData:\n        map_data = MapData(0, 1)\n        buf = ParsingBuffer('header', raw, 0, len(raw))\n        feature_flags = buf.get_uint32('feature_flags')\n        map_id = buf.peek_uint32('map_id')\n        _LOGGER.debug('feature_flags: 0x%x, map_id: %d', feature_flags, map_id)\n\n        if feature_flags & MapDataParserViomi.FEATURE_ROBOT_STATUS != 0:\n            MapDataParserViomi.parse_section(buf, 'robot_status', map_id)\n            buf.skip('unknown1', 0x28)\n\n        if feature_flags & MapDataParserViomi.FEATURE_IMAGE != 0:\n            MapDataParserViomi.parse_section(buf, 'image', map_id)\n            map_data.image, map_data.rooms, map_data.cleaned_rooms = \\\n                MapDataParserViomi.parse_image(buf, colors, image_config, DRAWABLE_CLEANED_AREA in drawables)\n\n        if feature_flags & MapDataParserViomi.FEATURE_HISTORY != 0:\n            MapDataParserViomi.parse_section(buf, 'history', map_id)\n            map_data.path = MapDataParserViomi.parse_history(buf)\n\n        if feature_flags & MapDataParserViomi.FEATURE_CHARGE_STATION != 0:\n            MapDataParserViomi.parse_section(buf, 'charge_station', map_id)\n            map_data.charger = MapDataParserViomi.parse_position(buf, 'pos', with_angle=True)\n            _LOGGER.debug('pos: %s', map_data.charger)\n\n        if feature_flags & MapDataParserViomi.FEATURE_RESTRICTED_AREAS != 0:\n            MapDataParserViomi.parse_section(buf, 'restricted_areas', map_id)\n            map_data.walls, map_data.no_go_areas = MapDataParserViomi.parse_restricted_areas(buf)\n\n        if feature_flags & MapDataParserViomi.FEATURE_CLEANING_AREAS != 0:\n            MapDataParserViomi.parse_section(buf, 'cleaning_areas', map_id)\n            map_data.zones = MapDataParserViomi.parse_cleaning_areas(buf)\n\n        if feature_flags & MapDataParserViomi.FEATURE_NAVIGATE != 0:\n            MapDataParserViomi.parse_section(buf, 'navigate', map_id)\n            buf.skip('unknown1', 4)\n            map_data.goto = MapDataParserViomi.parse_position(buf, 'pos')\n            foo = buf.get_float32('foo')\n            _LOGGER.debug('pos: %s, foo: %f', map_data.goto, foo)\n\n        if feature_flags & MapDataParserViomi.FEATURE_REALTIME != 0:\n            MapDataParserViomi.parse_section(buf, 'realtime', map_id)\n            buf.skip('unknown1', 5)\n            map_data.vacuum_position = MapDataParserViomi.parse_position(buf, 'pos', with_angle=True)\n            _LOGGER.debug('pos: %s', map_data.vacuum_position)\n\n        if feature_flags & 0x00000800 != 0:\n            MapDataParserViomi.parse_section(buf, 'unknown1', map_id)\n            MapDataParserViomi.parse_unknown_section(buf)\n\n        if feature_flags & MapDataParserViomi.FEATURE_ROOMS != 0:\n            MapDataParserViomi.parse_section(buf, 'rooms', map_id)\n            MapDataParserViomi.parse_rooms(buf, map_data.rooms)\n\n        if feature_flags & 0x00002000 != 0:\n            MapDataParserViomi.parse_section(buf, 'unknown2', map_id)\n            MapDataParserViomi.parse_unknown_section(buf)\n\n        if feature_flags & 0x00004000 != 0:\n            MapDataParserViomi.parse_section(buf, 'room_outlines', map_id)\n            MapDataParserViomi.parse_room_outlines(buf)\n\n        buf.check_empty()\n\n        if map_data.rooms is not None:\n            _LOGGER.debug('rooms: %s', [str(room) for number, room in map_data.rooms.items()])\n        if not map_data.image.is_empty:\n            MapDataParserViomi.draw_elements(colors, drawables, sizes, map_data, image_config)\n            if len(map_data.rooms) > 0 and map_data.vacuum_position is not None:\n                map_data.vacuum_room = MapDataParserViomi.get_current_vacuum_room(buf, map_data.vacuum_position)\n                if map_data.vacuum_room is not None:\n                    map_data.vacuum_room_name = map_data.rooms[map_data.vacuum_room].name\n                _LOGGER.debug('current vacuum room: %s', map_data.vacuum_room)\n            ImageHandlerViomi.rotate(map_data.image)\n            ImageHandlerViomi.draw_texts(map_data.image, texts)\n        return map_data\n\n    @staticmethod\n    def map_to_image(p: Point) -> Point:\n        return Point(p.x * 20 + 400, p.y * 20 + 400)\n\n    @staticmethod\n    def image_to_map(x: float) -> float:\n        return (x - 400) / 20\n\n    @staticmethod\n    def get_current_vacuum_room(buf: ParsingBuffer, vacuum_position: Point) -> Optional[int]:\n        vacuum_position_on_image = MapDataParserViomi.map_to_image(vacuum_position)\n        pixel_type = buf.get_at_image(int(vacuum_position_on_image.y) * 800 + int(vacuum_position_on_image.x))\n        if ImageHandlerViomi.MAP_ROOM_MIN <= pixel_type <= ImageHandlerViomi.MAP_ROOM_MAX:\n            return pixel_type\n        elif ImageHandlerViomi.MAP_SELECTED_ROOM_MIN <= pixel_type <= ImageHandlerViomi.MAP_SELECTED_ROOM_MAX:\n            return pixel_type - ImageHandlerViomi.MAP_SELECTED_ROOM_MIN + ImageHandlerViomi.MAP_ROOM_MIN\n        return None\n\n    @staticmethod\n    def parse_image(buf: ParsingBuffer, colors: Colors, image_config: ImageConfig, draw_cleaned_area: bool) \\\n            -> Tuple[ImageData, Dict[int, Room], Set[int]]:\n        buf.skip('unknown1', 0x08)\n        image_top = 0\n        image_left = 0\n        image_height = buf.get_uint32('image_height')\n        image_width = buf.get_uint32('image_width')\n        buf.skip('unknown2', 20)\n        image_size = image_height * image_width\n        _LOGGER.debug('width: %d, height: %d', image_width, image_height)\n        if image_width \\\n                - image_width * (image_config[CONF_TRIM][CONF_LEFT] + image_config[CONF_TRIM][CONF_RIGHT]) / 100 \\\n                < MINIMAL_IMAGE_WIDTH:\n            image_config[CONF_TRIM][CONF_LEFT] = 0\n            image_config[CONF_TRIM][CONF_RIGHT] = 0\n        if image_height \\\n                - image_height * (image_config[CONF_TRIM][CONF_TOP] + image_config[CONF_TRIM][CONF_BOTTOM]) / 100 \\\n                < MINIMAL_IMAGE_HEIGHT:\n            image_config[CONF_TRIM][CONF_TOP] = 0\n            image_config[CONF_TRIM][CONF_BOTTOM] = 0\n        buf.mark_as_image_beginning()\n        image, rooms_raw, cleaned_areas, cleaned_areas_layer = ImageHandlerViomi.parse(buf, image_width, image_height,\n                                                                                       colors, image_config,\n                                                                                       draw_cleaned_area)\n        _LOGGER.debug('img: number of rooms: %d, numbers: %s', len(rooms_raw), rooms_raw.keys())\n        rooms = {}\n        for number, room in rooms_raw.items():\n            rooms[number] = Room(number, MapDataParserViomi.image_to_map(room[0] + image_left),\n                                 MapDataParserViomi.image_to_map(room[1] + image_top),\n                                 MapDataParserViomi.image_to_map(room[2] + image_left),\n                                 MapDataParserViomi.image_to_map(room[3] + image_top))\n        return ImageData(image_size, image_top, image_left, image_height, image_width, image_config,\n                         image, MapDataParserViomi.map_to_image,\n                         additional_layers={DRAWABLE_CLEANED_AREA: cleaned_areas_layer}), rooms, cleaned_areas\n\n    @staticmethod\n    def parse_history(buf: ParsingBuffer) -> Path:\n        path_points = []\n        buf.skip('unknown1', 4)\n        history_count = buf.get_uint32('history_count')\n        for _ in range(history_count):\n            mode = buf.get_uint8('mode')  # 0: taxi, 1: working\n            path_points.append(MapDataParserViomi.parse_position(buf, 'path'))\n        return Path(len(path_points), 1, 0, [path_points])\n\n    @staticmethod\n    def parse_restricted_areas(buf: ParsingBuffer) -> Tuple[List[Wall], List[Area]]:\n        walls = []\n        areas = []\n        buf.skip('unknown1', 4)\n        area_count = buf.get_uint32('area_count')\n        for _ in range(area_count):\n            buf.skip('restricted.unknown1', 12)\n            p1 = MapDataParserViomi.parse_position(buf, 'p1')\n            p2 = MapDataParserViomi.parse_position(buf, 'p2')\n            p3 = MapDataParserViomi.parse_position(buf, 'p3')\n            p4 = MapDataParserViomi.parse_position(buf, 'p4')\n            buf.skip('restricted.unknown2', 48)\n            _LOGGER.debug('restricted: %s %s %s %s', p1, p2, p3, p4)\n            if p1 == p2 and p3 == p4:\n                walls.append(Wall(p1.x, p1.y, p3.x, p3.y))\n            else:\n                areas.append(Area(p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, p4.x, p4.y))\n        return walls, areas\n\n    @staticmethod\n    def parse_cleaning_areas(buf: ParsingBuffer) -> List[Zone]:\n        buf.skip('unknown1', 4)\n        area_count = buf.get_uint32('area_count')\n        zones = []\n        for _ in range(area_count):\n            buf.skip('area.unknown1', 12)\n            p1 = MapDataParserViomi.parse_position(buf, 'p1')\n            p2 = MapDataParserViomi.parse_position(buf, 'p2')\n            p3 = MapDataParserViomi.parse_position(buf, 'p3')\n            p4 = MapDataParserViomi.parse_position(buf, 'p4')\n            buf.skip('area.unknown2', 48)\n            zones.append(Zone(p1.x, p1.y, p3.x, p3.y))\n        return zones\n\n    @staticmethod\n    def parse_rooms(buf: ParsingBuffer, map_data_rooms: Dict[int, Room]):\n        map_name = buf.get_string_len8('map_name')\n        map_arg = buf.get_uint32('map_arg')\n        _LOGGER.debug('map#%d: %s', map_arg, map_name)\n        while map_arg > 1:\n            map_name = buf.get_string_len8('map_name')\n            map_arg = buf.get_uint32('map_arg')\n            _LOGGER.debug('map#%d: %s', map_arg, map_name)\n        room_count = buf.get_uint32('room_count')\n        for _ in range(room_count):\n            room_id = buf.get_uint8('room.id')\n            room_name = buf.get_string_len8('room.name')\n            if map_data_rooms is not None and room_id in map_data_rooms:\n                map_data_rooms[room_id].name = room_name\n            buf.skip('room.unknown1', 1)\n            room_text_pos = MapDataParserViomi.parse_position(buf, 'room.text_pos')\n            _LOGGER.debug('room#%d: %s %s', room_id, room_name, room_text_pos)\n        buf.skip('unknown1', 6)\n\n    @staticmethod\n    def parse_room_outlines(buf: ParsingBuffer):\n        buf.skip('unknown1', 51)\n        room_count = buf.get_uint32('room_count')\n        for _ in range(room_count):\n            room_id = buf.get_uint32('room.id')\n            segment_count = buf.get_uint32('room.segment_count')\n            for _ in range(segment_count):\n                buf.skip('unknown2', 5)\n            _LOGGER.debug('room#%d: segment_count: %d', room_id, segment_count)\n\n    @staticmethod\n    def parse_section(buf: ParsingBuffer, name: str, map_id: int):\n        buf.set_name(name)\n        magic = buf.get_uint32('magic')\n        if magic != map_id:\n            raise ValueError(\n                f\"error parsing section {name} at offset {buf._offs - 4:#x}: magic check failed. \" +\n                f\"Magic: {magic:#x}, Map ID: {map_id:#x}\")\n\n    @staticmethod\n    def parse_position(buf: ParsingBuffer, name: str, with_angle: bool = False) -> Optional[Point]:\n        x = buf.get_float32(name + '.x')\n        y = buf.get_float32(name + '.y')\n        if x == MapDataParserViomi.POSITION_UNKNOWN or y == MapDataParserViomi.POSITION_UNKNOWN:\n            return None\n        a = None\n        if with_angle:\n            a = buf.get_float32(name + '.a') * 180 / math.pi\n        return Point(x, y, a)\n\n    @staticmethod\n    def parse_unknown_section(buf: ParsingBuffer) -> bool:\n        n = buf._data[buf._offs:].find(buf._data[4:8])\n        if n >= 0:\n            buf._offs += n\n            buf._length -= n\n            return True\n        else:\n            buf._offs += buf._length\n            buf._length = 0\n            return False\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/viomi/parsing_buffer.py",
    "content": "import logging\n\nfrom struct import unpack_from\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass ParsingBuffer:\n    def __init__(self, name: str, data: bytes, start_offs: int, length: int):\n        self._name = name\n        self._data = data\n        self._offs = start_offs\n        self._length = length\n        self._image_beginning = None\n\n    def set_name(self, name: str):\n        self._name = name\n        _LOGGER.debug('SECTION %s: offset 0x%x', self._name, self._offs)\n\n    def mark_as_image_beginning(self):\n        self._image_beginning = self._offs\n\n    def get_at_image(self, offset) -> int:\n        return self._data[self._image_beginning + offset - 1]\n\n    def skip(self, field: str, n: int):\n        if self._length < n:\n            raise ValueError(f\"error parsing {self._name}.{field} at offset {self._offs:#x}: buffer underrun\")\n        self._offs += n\n        self._length -= n\n\n    def get_uint8(self, field: str) -> int:\n        if self._length < 1:\n            raise ValueError(f\"error parsing {self._name}.{field} at offset {self._offs:#x}: buffer underrun\")\n        self._offs += 1\n        self._length -= 1\n        return self._data[self._offs - 1]\n\n    def get_uint16(self, field: str) -> int:\n        if self._length < 2:\n            raise ValueError(f\"error parsing {self._name}.{field} at offset {self._offs:#x}: buffer underrun\")\n        self._offs += 2\n        self._length -= 2\n        return unpack_from('<H', self._data, self._offs - 2)[0]\n\n    def get_uint32(self, field: str) -> int:\n        if self._length < 4:\n            raise ValueError(f\"error parsing {self._name}.{field} at offset {self._offs:#x}: buffer underrun\")\n        self._offs += 4\n        self._length -= 4\n        return unpack_from('<L', self._data, self._offs - 4)[0]\n\n    def get_float32(self, field: str) -> float:\n        if self._length < 4:\n            raise ValueError(f\"error parsing {self._name}.{field} at offset {self._offs:#x}: buffer underrun\")\n        self._offs += 4\n        self._length -= 4\n        return unpack_from('<f', self._data, self._offs - 4)[0]\n\n    def get_string_len8(self, field: str) -> str:\n        n = self.get_uint8(field + '.len')\n        if self._length < n:\n            raise ValueError(f\"error parsing {self._name}.{field} at offset {self._offs:#x}: buffer underrun\")\n        self._offs += n\n        self._length -= n\n        return self._data[self._offs - n:self._offs].decode('UTF-8')\n\n    def peek_uint32(self, field: str) -> int:\n        if self._length < 4:\n            raise ValueError(f\"error parsing {self._name}.{field} at offset {self._offs:#x}: buffer underrun\")\n        return unpack_from('<L', self._data, self._offs)[0]\n\n    def check_empty(self):\n        if self._length == 0:\n            _LOGGER.debug('all of the data has been processed')\n        else:\n            _LOGGER.warning('%d bytes remained in the buffer', self._length)\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/viomi/vacuum.py",
    "content": "import zlib\n\nfrom custom_components.xiaomi_cloud_map_extractor.common.map_data import MapData\nfrom custom_components.xiaomi_cloud_map_extractor.common.vacuum_v2 import XiaomiCloudVacuumV2\nfrom custom_components.xiaomi_cloud_map_extractor.common.xiaomi_cloud_connector import XiaomiCloudConnector\nfrom custom_components.xiaomi_cloud_map_extractor.types import Colors, Drawables, ImageConfig, Sizes, Texts\nfrom custom_components.xiaomi_cloud_map_extractor.viomi.map_data_parser import MapDataParserViomi\n\n\nclass ViomiVacuum(XiaomiCloudVacuumV2):\n\n    def __init__(self, connector: XiaomiCloudConnector, country: str, user_id: str, device_id: str, model: str):\n        super().__init__(connector, country, user_id, device_id, model)\n\n    def decode_map(self,\n                   raw_map: bytes,\n                   colors: Colors,\n                   drawables: Drawables,\n                   texts: Texts,\n                   sizes: Sizes,\n                   image_config: ImageConfig) -> MapData:\n        unzipped = zlib.decompress(raw_map)\n        return MapDataParserViomi.parse(unzipped, colors, drawables, texts, sizes, image_config)\n\n    def get_map_archive_extension(self) -> str:\n        return \"zlib\"\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/xiaomi/__init__.py",
    "content": "\"\"\"Functionalities specific for Xiaomi and Roborock vacuums.\"\"\"\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/xiaomi/image_handler.py",
    "content": "import logging\nfrom typing import Tuple\n\nfrom PIL import Image\nfrom PIL.Image import Image as ImageType\n\nfrom custom_components.xiaomi_cloud_map_extractor.common.image_handler import ImageHandler\nfrom custom_components.xiaomi_cloud_map_extractor.const import *\nfrom custom_components.xiaomi_cloud_map_extractor.types import Colors, ImageConfig\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass ImageHandlerXiaomi(ImageHandler):\n    MAP_OUTSIDE = 0x00\n    MAP_WALL = 0x01\n    MAP_INSIDE = 0xFF\n    MAP_SCAN = 0x07\n\n    @staticmethod\n    def parse(raw_data: bytes, width: int, height: int, colors: Colors,\n              image_config: ImageConfig) -> Tuple[ImageType, dict]:\n        rooms = {}\n        scale = image_config[CONF_SCALE]\n        trim_left = int(image_config[CONF_TRIM][CONF_LEFT] * width / 100)\n        trim_right = int(image_config[CONF_TRIM][CONF_RIGHT] * width / 100)\n        trim_top = int(image_config[CONF_TRIM][CONF_TOP] * height / 100)\n        trim_bottom = int(image_config[CONF_TRIM][CONF_BOTTOM] * height / 100)\n        trimmed_height = height - trim_top - trim_bottom\n        trimmed_width = width - trim_left - trim_right\n        image = Image.new('RGBA', (trimmed_width, trimmed_height))\n        if width == 0 or height == 0:\n            return ImageHandler.create_empty_map_image(colors), {}\n        pixels = image.load()\n        for img_y in range(trimmed_height):\n            for img_x in range(trimmed_width):\n                pixel_type = raw_data[img_x + trim_left + width * (img_y + trim_bottom)]\n                x = img_x\n                y = trimmed_height - img_y - 1\n                if pixel_type == ImageHandlerXiaomi.MAP_OUTSIDE:\n                    pixels[x, y] = ImageHandler.__get_color__(COLOR_MAP_OUTSIDE, colors)\n                elif pixel_type == ImageHandlerXiaomi.MAP_WALL:\n                    pixels[x, y] = ImageHandler.__get_color__(COLOR_MAP_WALL, colors)\n                elif pixel_type == ImageHandlerXiaomi.MAP_INSIDE:\n                    pixels[x, y] = ImageHandler.__get_color__(COLOR_MAP_INSIDE, colors)\n                elif pixel_type == ImageHandlerXiaomi.MAP_SCAN:\n                    pixels[x, y] = ImageHandler.__get_color__(COLOR_SCAN, colors)\n                else:\n                    obstacle = pixel_type & 0x07\n                    if obstacle == 0:\n                        pixels[x, y] = ImageHandler.__get_color__(COLOR_GREY_WALL, colors)\n                    elif obstacle == 1:\n                        pixels[x, y] = ImageHandler.__get_color__(COLOR_MAP_WALL_V2, colors)\n                    elif obstacle == 7:\n                        room_number = (pixel_type & 0xFF) >> 3\n                        room_x = img_x + trim_left\n                        room_y = img_y + trim_bottom\n                        if room_number not in rooms:\n                            rooms[room_number] = (room_x, room_y, room_x, room_y)\n                        else:\n                            rooms[room_number] = (min(rooms[room_number][0], room_x),\n                                                  min(rooms[room_number][1], room_y),\n                                                  max(rooms[room_number][2], room_x),\n                                                  max(rooms[room_number][3], room_y))\n                        default = ImageHandler.ROOM_COLORS[room_number >> 1]\n                        pixels[x, y] = ImageHandler.__get_color__(f\"{COLOR_ROOM_PREFIX}{room_number}\", colors, default)\n                    else:\n                        pixels[x, y] = ImageHandler.__get_color__(COLOR_UNKNOWN, colors)\n        if image_config[\"scale\"] != 1 and width != 0 and height != 0:\n            image = image.resize((int(trimmed_width * scale), int(trimmed_height * scale)), resample=Image.NEAREST)\n        return image, rooms\n\n    @staticmethod\n    def get_room_at_pixel(raw_data: bytes, width: int, x: int, y: int) -> int:\n        room_number = None\n        pixel_type = raw_data[x + width * y]\n        if pixel_type not in [ImageHandlerXiaomi.MAP_INSIDE, ImageHandlerXiaomi.MAP_SCAN]:\n            if pixel_type & 0x07 == 7:\n                room_number = (pixel_type & 0xFF) >> 3\n        return room_number\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/xiaomi/map_data_parser.py",
    "content": "import logging\nfrom typing import Tuple\n\nfrom custom_components.xiaomi_cloud_map_extractor.common.map_data import *\nfrom custom_components.xiaomi_cloud_map_extractor.common.map_data_parser import MapDataParser\nfrom custom_components.xiaomi_cloud_map_extractor.types import Colors, Drawables, Sizes, Texts\nfrom custom_components.xiaomi_cloud_map_extractor.xiaomi.image_handler import ImageHandlerXiaomi\n\n_LOGGER = logging.getLogger(__name__)\n\n\nclass MapDataParserXiaomi(MapDataParser):\n    CHARGER = 1\n    IMAGE = 2\n    PATH = 3\n    GOTO_PATH = 4\n    GOTO_PREDICTED_PATH = 5\n    CURRENTLY_CLEANED_ZONES = 6\n    GOTO_TARGET = 7\n    ROBOT_POSITION = 8\n    NO_GO_AREAS = 9\n    VIRTUAL_WALLS = 10\n    BLOCKS = 11\n    NO_MOPPING_AREAS = 12\n    OBSTACLES = 13\n    IGNORED_OBSTACLES = 14\n    OBSTACLES_WITH_PHOTO = 15\n    IGNORED_OBSTACLES_WITH_PHOTO = 16\n    CARPET_MAP = 17\n    DIGEST = 1024\n    SIZE = 1024\n    KNOWN_OBSTACLE_TYPES = {\n        0: 'cable',\n        2: 'shoes',\n        3: 'poop',\n        5: 'extension cord',\n        9: 'weighting scale',\n        10: 'clothes'\n    }\n\n    @staticmethod\n    def parse(raw: bytes, colors: Colors, drawables: Drawables, texts: Texts, sizes: Sizes,\n              image_config: ImageConfig, *args, **kwargs) -> MapData:\n        map_data = MapData(25500, 1000)\n        map_header_length = MapDataParserXiaomi.get_int16(raw, 0x02)\n        map_data.major_version = MapDataParserXiaomi.get_int16(raw, 0x08)\n        map_data.minor_version = MapDataParserXiaomi.get_int16(raw, 0x0A)\n        map_data.map_index = MapDataParserXiaomi.get_int32(raw, 0x0C)\n        map_data.map_sequence = MapDataParserXiaomi.get_int32(raw, 0x10)\n        block_start_position = map_header_length\n        img_start = None\n        while block_start_position < len(raw):\n            block_header_length = MapDataParserXiaomi.get_int16(raw, block_start_position + 0x02)\n            header = MapDataParserXiaomi.get_bytes(raw, block_start_position, block_header_length)\n            block_type = MapDataParserXiaomi.get_int16(header, 0x00)\n            block_data_length = MapDataParserXiaomi.get_int32(header, 0x04)\n            block_data_start = block_start_position + block_header_length\n            data = MapDataParserXiaomi.get_bytes(raw, block_data_start, block_data_length)\n            if block_type == MapDataParserXiaomi.CHARGER:\n                map_data.charger = MapDataParserXiaomi.parse_object_position(block_data_length, data)\n            elif block_type == MapDataParserXiaomi.IMAGE:\n                img_start = block_start_position\n                image, rooms = MapDataParserXiaomi.parse_image(block_data_length, block_header_length, data, header,\n                                                               colors, image_config)\n                map_data.image = image\n                map_data.rooms = rooms\n            elif block_type == MapDataParserXiaomi.ROBOT_POSITION:\n                map_data.vacuum_position = MapDataParserXiaomi.parse_object_position(block_data_length, data)\n            elif block_type == MapDataParserXiaomi.PATH:\n                map_data.path = MapDataParserXiaomi.parse_path(block_start_position, header, raw)\n            elif block_type == MapDataParserXiaomi.GOTO_PATH:\n                map_data.goto_path = MapDataParserXiaomi.parse_path(block_start_position, header, raw)\n            elif block_type == MapDataParserXiaomi.GOTO_PREDICTED_PATH:\n                map_data.predicted_path = MapDataParserXiaomi.parse_path(block_start_position, header, raw)\n            elif block_type == MapDataParserXiaomi.CURRENTLY_CLEANED_ZONES:\n                map_data.zones = MapDataParserXiaomi.parse_zones(data, header)\n            elif block_type == MapDataParserXiaomi.GOTO_TARGET:\n                map_data.goto = MapDataParserXiaomi.parse_goto_target(data)\n            elif block_type == MapDataParserXiaomi.DIGEST:\n                map_data.is_valid = True\n            elif block_type == MapDataParserXiaomi.VIRTUAL_WALLS:\n                map_data.walls = MapDataParserXiaomi.parse_walls(data, header)\n            elif block_type == MapDataParserXiaomi.NO_GO_AREAS:\n                map_data.no_go_areas = MapDataParserXiaomi.parse_area(header, data)\n            elif block_type == MapDataParserXiaomi.NO_MOPPING_AREAS:\n                map_data.no_mopping_areas = MapDataParserXiaomi.parse_area(header, data)\n            elif block_type == MapDataParserXiaomi.OBSTACLES:\n                map_data.obstacles = MapDataParserXiaomi.parse_obstacles(data, header)\n            elif block_type == MapDataParserXiaomi.IGNORED_OBSTACLES:\n                map_data.ignored_obstacles = MapDataParserXiaomi.parse_obstacles(data, header)\n            elif block_type == MapDataParserXiaomi.OBSTACLES_WITH_PHOTO:\n                map_data.obstacles_with_photo = MapDataParserXiaomi.parse_obstacles(data, header)\n            elif block_type == MapDataParserXiaomi.IGNORED_OBSTACLES_WITH_PHOTO:\n                map_data.ignored_obstacles_with_photo = MapDataParserXiaomi.parse_obstacles(data, header)\n            elif block_type == MapDataParserXiaomi.BLOCKS:\n                block_pairs = MapDataParserXiaomi.get_int16(header, 0x08)\n                map_data.blocks = MapDataParserXiaomi.get_bytes(data, 0, block_pairs)\n            block_start_position = block_start_position + block_data_length + MapDataParserXiaomi.get_int8(header, 2)\n        if not map_data.image.is_empty:\n            MapDataParserXiaomi.draw_elements(colors, drawables, sizes, map_data, image_config)\n            if len(map_data.rooms) > 0 and map_data.vacuum_position is not None:\n                map_data.vacuum_room = MapDataParserXiaomi.get_current_vacuum_room(img_start, raw,\n                                                                                   map_data.vacuum_position)\n            ImageHandlerXiaomi.rotate(map_data.image)\n            ImageHandlerXiaomi.draw_texts(map_data.image, texts)\n        return map_data\n\n    @staticmethod\n    def map_to_image(p: Point) -> Point:\n        return Point(p.x / MM, p.y / MM)\n\n    @staticmethod\n    def image_to_map(x: float) -> float:\n        return x * MM\n\n    @staticmethod\n    def get_current_vacuum_room(block_start_position: int, raw: bytes, vacuum_position: Point) -> int:\n        block_header_length = MapDataParserXiaomi.get_int16(raw, block_start_position + 0x02)\n        header = MapDataParserXiaomi.get_bytes(raw, block_start_position, block_header_length)\n        block_data_length = MapDataParserXiaomi.get_int32(header, 0x04)\n        block_data_start = block_start_position + block_header_length\n        data = MapDataParserXiaomi.get_bytes(raw, block_data_start, block_data_length)\n        image_top = MapDataParserXiaomi.get_int32(header, block_header_length - 16)\n        image_left = MapDataParserXiaomi.get_int32(header, block_header_length - 12)\n        image_width = MapDataParserXiaomi.get_int32(header, block_header_length - 4)\n        p = MapDataParserXiaomi.map_to_image(vacuum_position)\n        room = ImageHandlerXiaomi.get_room_at_pixel(data, image_width, round(p.x - image_left), round(p.y - image_top))\n        return room\n\n    @staticmethod\n    def parse_image(block_data_length: int, block_header_length: int, data: bytes, header: bytes, colors: Colors,\n                    image_config: ImageConfig) -> Tuple[ImageData, Dict[int, Room]]:\n        image_size = block_data_length\n        image_top = MapDataParserXiaomi.get_int32(header, block_header_length - 16)\n        image_left = MapDataParserXiaomi.get_int32(header, block_header_length - 12)\n        image_height = MapDataParserXiaomi.get_int32(header, block_header_length - 8)\n        image_width = MapDataParserXiaomi.get_int32(header, block_header_length - 4)\n        if image_width \\\n                - image_width * (image_config[CONF_TRIM][CONF_LEFT] + image_config[CONF_TRIM][CONF_RIGHT]) / 100 \\\n                < MINIMAL_IMAGE_WIDTH:\n            image_config[CONF_TRIM][CONF_LEFT] = 0\n            image_config[CONF_TRIM][CONF_RIGHT] = 0\n        if image_height \\\n                - image_height * (image_config[CONF_TRIM][CONF_TOP] + image_config[CONF_TRIM][CONF_BOTTOM]) / 100 \\\n                < MINIMAL_IMAGE_HEIGHT:\n            image_config[CONF_TRIM][CONF_TOP] = 0\n            image_config[CONF_TRIM][CONF_BOTTOM] = 0\n        image, rooms_raw = ImageHandlerXiaomi.parse(data, image_width, image_height, colors, image_config)\n        rooms = {}\n        for number, room in rooms_raw.items():\n            rooms[number] = Room(number, MapDataParserXiaomi.image_to_map(room[0] + image_left),\n                                 MapDataParserXiaomi.image_to_map(room[1] + image_top),\n                                 MapDataParserXiaomi.image_to_map(room[2] + image_left),\n                                 MapDataParserXiaomi.image_to_map(room[3] + image_top))\n        return ImageData(image_size,\n                         image_top,\n                         image_left,\n                         image_height,\n                         image_width,\n                         image_config,\n                         image, MapDataParserXiaomi.map_to_image), rooms\n\n    @staticmethod\n    def parse_goto_target(data: bytes) -> Point:\n        x = MapDataParserXiaomi.get_int16(data, 0x00)\n        y = MapDataParserXiaomi.get_int16(data, 0x02)\n        return Point(x, y)\n\n    @staticmethod\n    def parse_object_position(block_data_length: int, data: bytes) -> Point:\n        x = MapDataParserXiaomi.get_int32(data, 0x00)\n        y = MapDataParserXiaomi.get_int32(data, 0x04)\n        a = None\n        if block_data_length > 8:\n            a = MapDataParserXiaomi.get_int32(data, 0x08)\n            if a > 0xFF:\n                a = (a & 0xFF) - 256\n        return Point(x, y, a)\n\n    @staticmethod\n    def parse_walls(data: bytes, header: bytes) -> List[Wall]:\n        wall_pairs = MapDataParserXiaomi.get_int16(header, 0x08)\n        walls = []\n        for wall_start in range(0, wall_pairs * 8, 8):\n            x0 = MapDataParserXiaomi.get_int16(data, wall_start + 0)\n            y0 = MapDataParserXiaomi.get_int16(data, wall_start + 2)\n            x1 = MapDataParserXiaomi.get_int16(data, wall_start + 4)\n            y1 = MapDataParserXiaomi.get_int16(data, wall_start + 6)\n            walls.append(Wall(x0, y0, x1, y1))\n        return walls\n\n    @staticmethod\n    def parse_obstacles(data: bytes, header: bytes) -> List[Obstacle]:\n        obstacle_pairs = MapDataParserXiaomi.get_int16(header, 0x08)\n        obstacles = []\n        if obstacle_pairs == 0:\n            return obstacles\n        obstacle_size = int(len(data) / obstacle_pairs)\n        for obstacle_start in range(0, obstacle_pairs * obstacle_size, obstacle_size):\n            x = MapDataParserXiaomi.get_int16(data, obstacle_start + 0)\n            y = MapDataParserXiaomi.get_int16(data, obstacle_start + 2)\n            details = {}\n            if obstacle_size >= 6:\n                details[ATTR_TYPE] = MapDataParserXiaomi.get_int16(data, obstacle_start + 4)\n                if details[ATTR_TYPE] in MapDataParserXiaomi.KNOWN_OBSTACLE_TYPES:\n                    details[ATTR_DESCRIPTION] = MapDataParserXiaomi.KNOWN_OBSTACLE_TYPES[details[ATTR_TYPE]]\n                if obstacle_size >= 10:\n                    u1 = MapDataParserXiaomi.get_int16(data, obstacle_start + 6)\n                    u2 = MapDataParserXiaomi.get_int16(data, obstacle_start + 8)\n                    details[ATTR_CONFIDENCE_LEVEL] = 0 if u2 == 0 else u1 * 10.0 / u2\n                    if obstacle_size == 28 and (data[obstacle_start + 12] & 0xFF) > 0:\n                        txt = MapDataParserXiaomi.get_bytes(data, obstacle_start + 12, 16)\n                        details[ATTR_PHOTO_NAME] = txt.decode('ascii')\n            obstacles.append(Obstacle(x, y, details))\n        return obstacles\n\n    @staticmethod\n    def parse_zones(data: bytes, header: bytes) -> List[Zone]:\n        zone_pairs = MapDataParserXiaomi.get_int16(header, 0x08)\n        zones = []\n        for zone_start in range(0, zone_pairs * 8, 8):\n            x0 = MapDataParserXiaomi.get_int16(data, zone_start + 0)\n            y0 = MapDataParserXiaomi.get_int16(data, zone_start + 2)\n            x1 = MapDataParserXiaomi.get_int16(data, zone_start + 4)\n            y1 = MapDataParserXiaomi.get_int16(data, zone_start + 6)\n            zones.append(Zone(x0, y0, x1, y1))\n        return zones\n\n    @staticmethod\n    def parse_path(block_start_position: int, header: bytes, raw: bytes) -> Path:\n        path_points = []\n        end_pos = MapDataParserXiaomi.get_int32(header, 0x04)\n        point_length = MapDataParserXiaomi.get_int32(header, 0x08)\n        point_size = MapDataParserXiaomi.get_int32(header, 0x0C)\n        angle = MapDataParserXiaomi.get_int32(header, 0x10)\n        start_pos = block_start_position + 0x14\n        for pos in range(start_pos, start_pos + end_pos, 4):\n            x = MapDataParserXiaomi.get_int16(raw, pos)\n            y = MapDataParserXiaomi.get_int16(raw, pos + 2)\n            path_points.append(Point(x, y))\n        return Path(point_length, point_size, angle, [path_points])\n\n    @staticmethod\n    def parse_area(header: bytes, data: bytes) -> List[Area]:\n        area_pairs = MapDataParserXiaomi.get_int16(header, 0x08)\n        areas = []\n        for area_start in range(0, area_pairs * 16, 16):\n            x0 = MapDataParserXiaomi.get_int16(data, area_start + 0)\n            y0 = MapDataParserXiaomi.get_int16(data, area_start + 2)\n            x1 = MapDataParserXiaomi.get_int16(data, area_start + 4)\n            y1 = MapDataParserXiaomi.get_int16(data, area_start + 6)\n            x2 = MapDataParserXiaomi.get_int16(data, area_start + 8)\n            y2 = MapDataParserXiaomi.get_int16(data, area_start + 10)\n            x3 = MapDataParserXiaomi.get_int16(data, area_start + 12)\n            y3 = MapDataParserXiaomi.get_int16(data, area_start + 14)\n            areas.append(Area(x0, y0, x1, y1, x2, y2, x3, y3))\n        return areas\n\n    @staticmethod\n    def get_bytes(data: bytes, start_index: int, size: int) -> bytes:\n        return data[start_index: start_index + size]\n\n    @staticmethod\n    def get_int8(data: bytes, address: int) -> int:\n        return data[address] & 0xFF\n\n    @staticmethod\n    def get_int16(data: bytes, address: int) -> int:\n        return \\\n            ((data[address + 0] << 0) & 0xFF) | \\\n            ((data[address + 1] << 8) & 0xFFFF)\n\n    @staticmethod\n    def get_int32(data: bytes, address: int) -> int:\n        return \\\n            ((data[address + 0] << 0) & 0xFF) | \\\n            ((data[address + 1] << 8) & 0xFFFF) | \\\n            ((data[address + 2] << 16) & 0xFFFFFF) | \\\n            ((data[address + 3] << 24) & 0xFFFFFFFF)\n"
  },
  {
    "path": "home-assistant/custom_components/xiaomi_cloud_map_extractor/xiaomi/vacuum.py",
    "content": "import gzip\nfrom typing import Optional\n\nfrom custom_components.xiaomi_cloud_map_extractor.common.map_data import MapData\nfrom custom_components.xiaomi_cloud_map_extractor.common.vacuum import XiaomiCloudVacuum\nfrom custom_components.xiaomi_cloud_map_extractor.types import Colors, Drawables, ImageConfig, Sizes, Texts\nfrom custom_components.xiaomi_cloud_map_extractor.xiaomi.map_data_parser import MapDataParserXiaomi\n\n\nclass XiaomiVacuum(XiaomiCloudVacuum):\n\n    def __init__(self, connector, country, user_id, device_id, model):\n        super().__init__(connector, country, user_id, device_id, model)\n\n    def get_map_url(self, map_name: str) -> Optional[str]:\n        url = self._connector.get_api_url(self._country) + \"/home/getmapfileurl\"\n        params = {\n            \"data\": '{\"obj_name\":\"' + map_name + '\"}'\n        }\n        api_response = self._connector.execute_api_call_encrypted(url, params)\n        if api_response is None or \\\n                \"result\" not in api_response or \\\n                api_response[\"result\"] is None or \\\n                \"url\" not in api_response[\"result\"]:\n            return None\n        return api_response[\"result\"][\"url\"]\n\n    def decode_map(self,\n                   raw_map: bytes,\n                   colors: Colors,\n                   drawables: Drawables,\n                   texts: Texts,\n                   sizes: Sizes,\n                   image_config: ImageConfig) -> MapData:\n        unzipped = gzip.decompress(raw_map)\n        return MapDataParserXiaomi.parse(unzipped, colors, drawables, texts, sizes, image_config)\n\n    def should_get_map_from_vacuum(self) -> bool:\n        return True\n\n    def get_map_archive_extension(self) -> str:\n        return \"gz\"\n"
  },
  {
    "path": "home-assistant/custom_components/yahoofinance/__init__.py",
    "content": "\"\"\"\r\nThe Yahoo finance component.\r\n\r\nhttps://github.com/iprak/yahoofinance\r\n\"\"\"\r\n\r\nfrom __future__ import annotations\r\n\r\nfrom datetime import timedelta\r\nimport logging\r\nfrom typing import Final, Union\r\n\r\nfrom homeassistant.const import CONF_SCAN_INTERVAL\r\nfrom homeassistant.core import HomeAssistant\r\nfrom homeassistant.helpers import discovery\r\nimport homeassistant.helpers.config_validation as cv\r\nfrom homeassistant.helpers.typing import ConfigType\r\nimport voluptuous as vol\r\n\r\nfrom custom_components.yahoofinance.coordinator import YahooSymbolUpdateCoordinator\r\n\r\nfrom .const import (\r\n    CONF_DECIMAL_PLACES,\r\n    CONF_INCLUDE_FIFTY_DAY_VALUES,\r\n    CONF_INCLUDE_POST_VALUES,\r\n    CONF_INCLUDE_PRE_VALUES,\r\n    CONF_INCLUDE_TWO_HUNDRED_DAY_VALUES,\r\n    CONF_SHOW_TRENDING_ICON,\r\n    CONF_SYMBOLS,\r\n    CONF_TARGET_CURRENCY,\r\n    DEFAULT_CONF_DECIMAL_PLACES,\r\n    DEFAULT_CONF_INCLUDE_FIFTY_DAY_VALUES,\r\n    DEFAULT_CONF_INCLUDE_POST_VALUES,\r\n    DEFAULT_CONF_INCLUDE_PRE_VALUES,\r\n    DEFAULT_CONF_INCLUDE_TWO_HUNDRED_DAY_VALUES,\r\n    DEFAULT_CONF_SHOW_TRENDING_ICON,\r\n    DOMAIN,\r\n    HASS_DATA_CONFIG,\r\n    HASS_DATA_COORDINATOR,\r\n    SERVICE_REFRESH,\r\n)\r\n\r\n_LOGGER = logging.getLogger(__name__)\r\nDEFAULT_SCAN_INTERVAL: Final = timedelta(hours=6)\r\nMINIMUM_SCAN_INTERVAL: Final = timedelta(seconds=30)\r\n\r\n\r\nBASIC_SYMBOL_SCHEMA = vol.All(cv.string, vol.Upper)\r\n\r\nCOMPLEX_SYMBOL_SCHEMA = vol.All(\r\n    dict,\r\n    vol.Schema(\r\n        {\r\n            vol.Required(\"symbol\"): BASIC_SYMBOL_SCHEMA,\r\n            vol.Optional(CONF_TARGET_CURRENCY): BASIC_SYMBOL_SCHEMA,\r\n        }\r\n    ),\r\n)\r\n\r\nCONFIG_SCHEMA = vol.Schema(\r\n    {\r\n        DOMAIN: vol.Schema(\r\n            {\r\n                vol.Required(CONF_SYMBOLS): vol.All(\r\n                    cv.ensure_list,\r\n                    [vol.Any(BASIC_SYMBOL_SCHEMA, COMPLEX_SYMBOL_SCHEMA)],\r\n                ),\r\n                vol.Optional(\r\n                    CONF_SCAN_INTERVAL, default=DEFAULT_SCAN_INTERVAL\r\n                ): vol.Any(\"none\", \"None\", cv.positive_time_period),\r\n                vol.Optional(CONF_TARGET_CURRENCY): vol.All(cv.string, vol.Upper),\r\n                vol.Optional(\r\n                    CONF_SHOW_TRENDING_ICON, default=DEFAULT_CONF_SHOW_TRENDING_ICON\r\n                ): cv.boolean,\r\n                vol.Optional(\r\n                    CONF_DECIMAL_PLACES, default=DEFAULT_CONF_DECIMAL_PLACES\r\n                ): vol.Coerce(int),\r\n                vol.Optional(\r\n                    CONF_INCLUDE_FIFTY_DAY_VALUES,\r\n                    default=DEFAULT_CONF_INCLUDE_FIFTY_DAY_VALUES,\r\n                ): cv.boolean,\r\n                vol.Optional(\r\n                    CONF_INCLUDE_POST_VALUES, default=DEFAULT_CONF_INCLUDE_POST_VALUES\r\n                ): cv.boolean,\r\n                vol.Optional(\r\n                    CONF_INCLUDE_PRE_VALUES, default=DEFAULT_CONF_INCLUDE_PRE_VALUES\r\n                ): cv.boolean,\r\n                vol.Optional(\r\n                    CONF_INCLUDE_TWO_HUNDRED_DAY_VALUES,\r\n                    default=DEFAULT_CONF_INCLUDE_TWO_HUNDRED_DAY_VALUES,\r\n                ): cv.boolean,\r\n            }\r\n        )\r\n    },\r\n    # The complete HA configuration is passed down to`async_setup`, allow the extra keys.\r\n    extra=vol.ALLOW_EXTRA,\r\n)\r\n\r\n\r\nclass SymbolDefinition:\r\n    \"\"\"Symbol definition.\"\"\"\r\n\r\n    symbol: str\r\n    target_currency: str\r\n\r\n    def __init__(self, symbol: str, target_currency: Union[str, None] = None) -> None:\r\n        \"\"\"Create a new symbol definition.\"\"\"\r\n        self.symbol = symbol\r\n        self.target_currency = target_currency\r\n\r\n    def __repr__(self) -> str:\r\n        \"\"\"Return the representation.\"\"\"\r\n        return f\"{self.symbol},{self.target_currency}\"\r\n\r\n    def __eq__(self, other: any) -> bool:\r\n        \"\"\"Return the comparison.\"\"\"\r\n        return (\r\n            isinstance(other, SymbolDefinition)\r\n            and self.symbol == other.symbol\r\n            and self.target_currency == other.target_currency\r\n        )\r\n\r\n    def __hash__(self) -> int:\r\n        \"\"\"Make hashable.\"\"\"\r\n        return hash((self.symbol, self.target_currency))\r\n\r\n\r\ndef parse_scan_interval(scan_interval: Union[timedelta, str]) -> timedelta:\r\n    \"\"\"Parse and validate scan_interval.\"\"\"\r\n    if isinstance(scan_interval, str):\r\n        if isinstance(scan_interval, str):\r\n            if scan_interval.lower() == \"none\":\r\n                scan_interval = None\r\n            else:\r\n                raise vol.Invalid(\r\n                    f\"Invalid {CONF_SCAN_INTERVAL} specified: {scan_interval}\"\r\n                )\r\n    elif scan_interval < MINIMUM_SCAN_INTERVAL:\r\n        raise vol.Invalid(\"Scan interval should be at least 30 seconds.\")\r\n\r\n    return scan_interval\r\n\r\n\r\ndef normalize_input(defined_symbols: list) -> tuple[list[str], list[SymbolDefinition]]:\r\n    \"\"\"Normalize input and remove duplicates.\"\"\"\r\n    symbols = set()\r\n    symbol_definitions: list[SymbolDefinition] = []\r\n\r\n    for value in defined_symbols:\r\n        if isinstance(value, str):\r\n            if value not in symbols:\r\n                symbols.add(value)\r\n                symbol_definitions.append(SymbolDefinition(value))\r\n        else:\r\n            symbol = value[\"symbol\"]\r\n            if symbol not in symbols:\r\n                symbols.add(symbol)\r\n                symbol_definitions.append(\r\n                    SymbolDefinition(symbol, value.get(CONF_TARGET_CURRENCY))\r\n                )\r\n\r\n    return (list(symbols), symbol_definitions)\r\n\r\n\r\nasync def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:\r\n    \"\"\"Set up the component.\"\"\"\r\n    domain_config = config.get(DOMAIN, {})\r\n    defined_symbols = domain_config.get(CONF_SYMBOLS, [])\r\n\r\n    symbols, symbol_definitions = normalize_input(defined_symbols)\r\n    domain_config[CONF_SYMBOLS] = symbol_definitions\r\n\r\n    scan_interval = parse_scan_interval(domain_config.get(CONF_SCAN_INTERVAL))\r\n\r\n    # Populate parsed value into domain_config\r\n    domain_config[CONF_SCAN_INTERVAL] = scan_interval\r\n\r\n    coordinator = YahooSymbolUpdateCoordinator(symbols, hass, scan_interval)\r\n\r\n    # Refresh coordinator to get initial symbol data\r\n    _LOGGER.info(\r\n        \"Requesting data from coordinator with update interval of %s.\", scan_interval\r\n    )\r\n    await coordinator.async_refresh()\r\n\r\n    # Pass down the coordinator and config to platforms.\r\n    hass.data[DOMAIN] = {\r\n        HASS_DATA_COORDINATOR: coordinator,\r\n        HASS_DATA_CONFIG: domain_config,\r\n    }\r\n\r\n    async def handle_refresh_symbols(_call) -> None:\r\n        \"\"\"Refresh symbol data.\"\"\"\r\n        _LOGGER.info(\"Processing refresh_symbols\")\r\n        await coordinator.async_request_refresh()\r\n\r\n    hass.services.async_register(\r\n        DOMAIN,\r\n        SERVICE_REFRESH,\r\n        handle_refresh_symbols,\r\n    )\r\n\r\n    if not coordinator.last_update_success:\r\n        _LOGGER.debug(\"Coordinator did not report any data, requesting async_refresh\")\r\n        hass.async_create_task(coordinator.async_request_refresh())\r\n\r\n    hass.async_create_task(\r\n        discovery.async_load_platform(hass, \"sensor\", DOMAIN, {}, config)\r\n    )\r\n\r\n    return True\r\n\r\n\r\ndef convert_to_float(value) -> float | None:\r\n    \"\"\"Convert specified value to float.\"\"\"\r\n    try:\r\n        return float(value)\r\n    except:  # noqa: E722 pylint: disable=bare-except\r\n        return None\r\n"
  },
  {
    "path": "home-assistant/custom_components/yahoofinance/const.py",
    "content": "\"\"\"Constants for Yahoo Finance sensor.\"\"\"\r\n\r\nfrom __future__ import annotations\r\n\r\nfrom typing import Final\r\n\r\n# Additional attributes exposed by the sensor\r\nATTR_CURRENCY_SYMBOL: Final = \"currencySymbol\"\r\nATTR_QUOTE_TYPE: Final = \"quoteType\"\r\nATTR_QUOTE_SOURCE_NAME: Final = \"quoteSourceName\"\r\nATTR_SYMBOL: Final = \"symbol\"\r\nATTR_TRENDING: Final = \"trending\"\r\nATTR_MARKET_STATE: Final = \"marketState\"\r\nATTR_DIVIDEND_DATE: Final = \"dividendDate\"\r\n\r\n# Hass data\r\nHASS_DATA_CONFIG: Final = \"config\"\r\nHASS_DATA_COORDINATOR: Final = \"coordinator\"\r\n\r\n# JSON data pieces\r\nDATA_CURRENCY_SYMBOL: Final = \"currency\"\r\nDATA_FINANCIAL_CURRENCY: Final = \"financialCurrency\"\r\nDATA_QUOTE_TYPE: Final = \"quoteType\"\r\nDATA_QUOTE_SOURCE_NAME: Final = \"quoteSourceName\"\r\nDATA_SHORT_NAME: Final = \"shortName\"\r\nDATA_MARKET_STATE: Final = \"marketState\"\r\nDATA_DIVIDEND_DATE: Final = \"dividendDate\"\r\n\r\nDATA_REGULAR_MARKET_PREVIOUS_CLOSE: Final = \"regularMarketPreviousClose\"\r\nDATA_REGULAR_MARKET_PRICE: Final = \"regularMarketPrice\"\r\n\r\nCONF_DECIMAL_PLACES: Final = \"decimal_places\"\r\nCONF_INCLUDE_FIFTY_DAY_VALUES: Final = \"include_fifty_day_values\"\r\nCONF_INCLUDE_POST_VALUES: Final = \"include_post_values\"\r\nCONF_INCLUDE_PRE_VALUES: Final = \"include_pre_values\"\r\nCONF_INCLUDE_TWO_HUNDRED_DAY_VALUES: Final = \"include_two_hundred_day_values\"\r\nCONF_SHOW_TRENDING_ICON: Final = \"show_trending_icon\"\r\nCONF_TARGET_CURRENCY: Final = \"target_currency\"\r\n\r\nDEFAULT_CONF_DECIMAL_PLACES: Final = 2\r\nDEFAULT_CONF_INCLUDE_FIFTY_DAY_VALUES: Final = True\r\nDEFAULT_CONF_INCLUDE_POST_VALUES: Final = True\r\nDEFAULT_CONF_INCLUDE_PRE_VALUES: Final = True\r\nDEFAULT_CONF_INCLUDE_TWO_HUNDRED_DAY_VALUES: Final = True\r\nDEFAULT_CONF_SHOW_TRENDING_ICON: Final = False\r\n\r\nDEFAULT_NUMERIC_DATA_GROUP: Final = \"default\"\r\n\r\n# Data keys grouped into categories. The values for the categories (except for DEFAULT_NUMERIC_DATA_GROUP)\r\n# can be conditionally pulled into attributes. The first value of the set is the key and the second\r\n# boolean value indicates if the attribute is a currency.\r\nNUMERIC_DATA_GROUPS: Final = {\r\n    DEFAULT_NUMERIC_DATA_GROUP: [\r\n        (\"averageDailyVolume10Day\", False),\r\n        (\"averageDailyVolume3Month\", False),\r\n        (\"regularMarketChange\", True),\r\n        (\"regularMarketChangePercent\", False),\r\n        (\"regularMarketDayHigh\", True),\r\n        (\"regularMarketDayLow\", True),\r\n        (DATA_REGULAR_MARKET_PREVIOUS_CLOSE, True),\r\n        (DATA_REGULAR_MARKET_PRICE, True),\r\n        (\"regularMarketVolume\", False),\r\n        (\"regularMarketTime\", False),\r\n        (DATA_DIVIDEND_DATE, False),\r\n    ],\r\n    CONF_INCLUDE_FIFTY_DAY_VALUES: [\r\n        (\"fiftyDayAverage\", True),\r\n        (\"fiftyDayAverageChange\", True),\r\n        (\"fiftyDayAverageChangePercent\", False),\r\n    ],\r\n    CONF_INCLUDE_PRE_VALUES: [\r\n        (\"preMarketChange\", True),\r\n        (\"preMarketChangePercent\", False),\r\n        (\"preMarketTime\", False),\r\n        (\"preMarketPrice\", True),\r\n    ],\r\n    CONF_INCLUDE_POST_VALUES: [\r\n        (\"postMarketChange\", True),\r\n        (\"postMarketChangePercent\", False),\r\n        (\"postMarketPrice\", True),\r\n        (\"postMarketTime\", False),\r\n    ],\r\n    CONF_INCLUDE_TWO_HUNDRED_DAY_VALUES: [\r\n        (\"twoHundredDayAverage\", True),\r\n        (\"twoHundredDayAverageChange\", True),\r\n        (\"twoHundredDayAverageChangePercent\", False),\r\n    ],\r\n}\r\n\r\n# Defaults for missing numeric keys\r\nNUMERIC_DATA_DEFAULTS: Final = {DATA_DIVIDEND_DATE: None}\r\n\r\nSTRING_DATA_KEYS: Final = [\r\n    DATA_CURRENCY_SYMBOL,\r\n    DATA_FINANCIAL_CURRENCY,\r\n    DATA_QUOTE_TYPE,\r\n    DATA_QUOTE_SOURCE_NAME,\r\n    DATA_SHORT_NAME,\r\n    DATA_MARKET_STATE,\r\n]\r\n\r\n\r\nATTRIBUTION: Final = \"Data provided by Yahoo Finance\"\r\nBASE: Final = \"https://query1.finance.yahoo.com/v7/finance/quote?symbols=\"\r\n\r\nCONF_SYMBOLS: Final = \"symbols\"\r\nDEFAULT_CURRENCY: Final = \"USD\"\r\nDEFAULT_CURRENCY_SYMBOL: Final = \"$\"\r\nDEFAULT_ICON: Final = \"mdi:currency-usd\"\r\nDOMAIN: Final = \"yahoofinance\"\r\nSERVICE_REFRESH: Final = \"refresh_symbols\"\r\n\r\nCURRENCY_CODES: Final = {\r\n    \"bdt\": \"৳\",\r\n    \"brl\": \"R$\",\r\n    \"btc\": \"₿\",\r\n    \"cny\": \"¥\",\r\n    \"eth\": \"Ξ\",\r\n    \"eur\": \"€\",\r\n    \"gbp\": \"£\",\r\n    \"ils\": \"₪\",\r\n    \"inr\": \"₹\",\r\n    \"jpy\": \"¥\",\r\n    \"krw\": \"₩\",\r\n    \"kzt\": \"лв\",\r\n    \"ngn\": \"₦\",\r\n    \"php\": \"₱\",\r\n    \"rial\": \"﷼\",\r\n    \"rub\": \"₽\",\r\n    \"sign\": \"\",\r\n    \"try\": \"₺\",\r\n    \"twd\": \"$\",\r\n    \"usd\": \"$\",\r\n}\r\n"
  },
  {
    "path": "home-assistant/custom_components/yahoofinance/coordinator.py",
    "content": "\"\"\"\r\nThe Yahoo finance component.\r\n\r\nhttps://github.com/iprak/yahoofinance\r\n\"\"\"\r\nfrom __future__ import annotations\r\n\r\nimport asyncio\r\nfrom datetime import timedelta\r\nfrom http import HTTPStatus\r\nimport logging\r\nfrom typing import Final\r\n\r\nimport aiohttp\r\nimport async_timeout\r\nfrom homeassistant.core import HomeAssistant, callback\r\nfrom homeassistant.helpers import event\r\nfrom homeassistant.helpers.aiohttp_client import async_get_clientsession\r\nfrom homeassistant.helpers.event import async_track_point_in_utc_time\r\nfrom homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed\r\nfrom homeassistant.util.dt import utcnow\r\n\r\nfrom .const import (\r\n    BASE,\r\n    DATA_REGULAR_MARKET_PRICE,\r\n    NUMERIC_DATA_DEFAULTS,\r\n    NUMERIC_DATA_GROUPS,\r\n    STRING_DATA_KEYS,\r\n)\r\n\r\n_LOGGER = logging.getLogger(__name__)\r\nWEBSESSION_TIMEOUT: Final = 15\r\nDELAY_ASYNC_REQUEST_REFRESH: Final = 5\r\nFAILURE_ASYNC_REQUEST_REFRESH: Final = 20\r\n\r\n\r\nclass YahooSymbolUpdateCoordinator(DataUpdateCoordinator):\r\n    \"\"\"Yahoo finance data update coordinator.\"\"\"\r\n\r\n    @staticmethod\r\n    def parse_symbol_data(symbol_data: dict) -> dict[str, any]:\r\n        \"\"\"Return data pieces which we care about, use 0 for missing numeric values.\"\"\"\r\n        data = {}\r\n\r\n        # get() ensures that we have an entry in symbol_data.\r\n        for data_group in NUMERIC_DATA_GROUPS.values():\r\n            for value in data_group:\r\n                key = value[0]\r\n\r\n                # Default value for most missing numeric keys is 0\r\n                default_value = NUMERIC_DATA_DEFAULTS.get(key, 0)\r\n\r\n                data[key] = symbol_data.get(key, default_value)\r\n\r\n        for key in STRING_DATA_KEYS:\r\n            data[key] = symbol_data.get(key)\r\n\r\n        return data\r\n\r\n    @staticmethod\r\n    def fix_conversion_symbol(symbol: str, symbol_data: any) -> str:\r\n        \"\"\"Fix the conversion symbol from data.\"\"\"\r\n\r\n        if symbol is None or symbol == \"\" or not symbol.endswith(\"=X\"):\r\n            return symbol\r\n\r\n        # Data analysis showed that data for conversion symbol has 'shortName': 'USD/EUR'\r\n        short_name = symbol_data[\"shortName\"] or \"\"\r\n        from_to = short_name.split(\"/\")\r\n        if len(from_to) != 2:\r\n            return symbol\r\n\r\n        from_currency = from_to[0]\r\n        to_currency = from_to[1]\r\n        if from_currency == \"\" or to_currency == \"\":\r\n            return symbol\r\n\r\n        conversion_symbol = f\"{from_currency}{to_currency}=X\"\r\n\r\n        if conversion_symbol != symbol:\r\n            _LOGGER.info(\r\n                \"Conversion symbol updated to %s from %s\", conversion_symbol, symbol\r\n            )\r\n\r\n        return conversion_symbol\r\n\r\n    def __init__(\r\n        self, symbols: list[str], hass: HomeAssistant, update_interval: timedelta\r\n    ) -> None:\r\n        \"\"\"Initialize.\"\"\"\r\n        self._symbols = symbols\r\n        self.data = None\r\n        self.loop = hass.loop\r\n        self.websession = async_get_clientsession(hass)\r\n        self._update_interval = update_interval\r\n        self._failure_update_interval = timedelta(seconds=FAILURE_ASYNC_REQUEST_REFRESH)\r\n\r\n        super().__init__(\r\n            hass,\r\n            _LOGGER,\r\n            name=\"YahooSymbolUpdateCoordinator\",\r\n            update_method=self._async_update,\r\n            update_interval=update_interval,\r\n        )\r\n\r\n    def get_next_update_interval(self) -> timedelta:\r\n        \"\"\"Get the update interval for the next async_track_point_in_utc_time call.\"\"\"\r\n        if self.last_update_success:\r\n            return self._update_interval\r\n        else:\r\n            _LOGGER.warning(\r\n                \"Error obtaining data, retrying in %d seconds.\",\r\n                FAILURE_ASYNC_REQUEST_REFRESH,\r\n            )\r\n            return self._failure_update_interval\r\n\r\n    @callback\r\n    def _schedule_refresh(self) -> None:\r\n        \"\"\"Schedule a refresh.\"\"\"\r\n        if self._unsub_refresh:\r\n            self._unsub_refresh()\r\n            self._unsub_refresh = None\r\n\r\n        # We _floor_ utcnow to create a schedule on a rounded second,\r\n        # minimizing the time between the point and the real activation.\r\n        # That way we obtain a constant update frequency,\r\n        # as long as the update process takes less than a second\r\n\r\n        update_interval = self.get_next_update_interval()\r\n        if update_interval is not None:\r\n            self._unsub_refresh = async_track_point_in_utc_time(\r\n                self.hass,\r\n                self._handle_refresh_interval,\r\n                utcnow().replace(microsecond=0) + update_interval,\r\n            )\r\n\r\n    def get_symbols(self) -> list[str]:\r\n        \"\"\"Return symbols tracked by the coordinator.\"\"\"\r\n        return self._symbols\r\n\r\n    async def _async_request_refresh_later(self, _now):\r\n        \"\"\"Request async_request_refresh.\"\"\"\r\n        await self.async_request_refresh()\r\n\r\n    def add_symbol(self, symbol: str) -> bool:\r\n        \"\"\"Add symbol to the symbol list.\"\"\"\r\n        if symbol not in self._symbols:\r\n            self._symbols.append(symbol)\r\n\r\n            # Request a refresh to get data for the missing symbol.\r\n            # This would have been called while data for sensor was being parsed.\r\n            # async_request_refresh has debouncing built into it, so multiple calls\r\n            # to add_symbol will still resut in single refresh.\r\n            event.async_call_later(\r\n                self.hass,\r\n                DELAY_ASYNC_REQUEST_REFRESH,\r\n                self._async_request_refresh_later,\r\n            )\r\n\r\n            _LOGGER.info(\r\n                \"Added %s and requested update in %d seconds.\",\r\n                symbol,\r\n                DELAY_ASYNC_REQUEST_REFRESH,\r\n            )\r\n            return True\r\n\r\n        return False\r\n\r\n    async def get_json(self) -> dict:\r\n        \"\"\"Get the JSON data.\"\"\"\r\n\r\n        url = BASE + \",\".join(self._symbols)\r\n        _LOGGER.debug(\"Requesting data from '%s'\", url)\r\n\r\n        try:\r\n            async with async_timeout.timeout(WEBSESSION_TIMEOUT):\r\n                response = await self.websession.get(url)\r\n\r\n                if response.status == HTTPStatus.OK:\r\n                    return await response.json()\r\n\r\n                _LOGGER.error(\"Received status %s for %s\", response.status, url)\r\n\r\n        except (asyncio.TimeoutError, aiohttp.ClientError):\r\n            _LOGGER.error(\"Timed out getting data from %s\", url)\r\n\r\n        return None\r\n\r\n    async def _async_update(self) -> dict:\r\n        \"\"\"\r\n        Return updated data if new JSON is valid.\r\n\r\n        The exception will get properly handled in the caller (DataUpdateCoordinator.async_refresh)\r\n        which also updates last_update_success. UpdateFailed is raised if JSON is invalid.\r\n        \"\"\"\r\n\r\n        json = await self.get_json()\r\n\r\n        if json is None:\r\n            raise UpdateFailed(\"No data received\")\r\n\r\n        if \"quoteResponse\" not in json:\r\n            raise UpdateFailed(\"Data invalid, 'quoteResponse' not found.\")\r\n\r\n        quoteResponse = json[\"quoteResponse\"]  # pylint: disable=invalid-name\r\n\r\n        if \"error\" in quoteResponse:\r\n            if quoteResponse[\"error\"] is not None:\r\n                raise UpdateFailed(quoteResponse[\"error\"])\r\n\r\n        if \"result\" not in quoteResponse:\r\n            raise UpdateFailed(\"Data invalid, no 'result' found\")\r\n\r\n        result = quoteResponse[\"result\"]\r\n        if result is None:\r\n            raise UpdateFailed(\"Data invalid, 'result' is None\")\r\n\r\n        (error_encountered, data) = self.process_json_result(result)\r\n\r\n        if error_encountered:\r\n            _LOGGER.info(\"Data = %s\", result)\r\n        else:\r\n            _LOGGER.debug(\"Data = %s\", result)\r\n\r\n        _LOGGER.info(\"All symbols updated\")\r\n        return data\r\n\r\n    def process_json_result(self, result) -> tuple[bool, dict]:\r\n        \"\"\"Process json result and return (error status, updated data).\"\"\"\r\n\r\n        # Using current data if available. If returned data is missing then we might be\r\n        # able to use previous data.\r\n        data = self.data or {}\r\n\r\n        symbols = self._symbols.copy()\r\n        error_encountered = False\r\n\r\n        for symbol_data in result:\r\n            symbol = symbol_data[\"symbol\"]\r\n\r\n            if symbol in symbols:\r\n                symbols.remove(symbol)\r\n            else:\r\n                # Sometimes data for USDEUR=X just contains EUR=X, try to fix such\r\n                # symbols. The source of truth is the symbol in the data since data\r\n                # pieces could be out of order.\r\n                fixed_symbol = self.fix_conversion_symbol(symbol, symbol_data)\r\n\r\n                if fixed_symbol in symbols:\r\n                    symbols.remove(fixed_symbol)\r\n                    symbol = fixed_symbol\r\n                else:\r\n                    _LOGGER.warning(\"Received %s not in symbol list\", symbol)\r\n                    error_encountered = True\r\n\r\n            data[symbol] = self.parse_symbol_data(symbol_data)\r\n\r\n            _LOGGER.debug(\r\n                \"Updated %s to %s\",\r\n                symbol,\r\n                data[symbol][DATA_REGULAR_MARKET_PRICE],\r\n            )\r\n\r\n        if len(symbols) > 0:\r\n            _LOGGER.warning(\"No data received for %s\", symbols)\r\n            error_encountered = True\r\n\r\n        return (error_encountered, data)\r\n"
  },
  {
    "path": "home-assistant/custom_components/yahoofinance/manifest.json",
    "content": "{\r\n  \"domain\": \"yahoofinance\",\r\n  \"name\": \"Yahoo Finance\",\r\n  \"documentation\": \"https://github.com/iprak/yahoofinance\",\r\n  \"requirements\": [],\r\n  \"dependencies\": [],\r\n  \"codeowners\": [\r\n    \"@iprak\"\r\n  ],\r\n  \"issue_tracker\": \"https://github.com/iprak/yahoofinance/issues\",\r\n  \"version\": \"1.1.6\"\r\n}\r\n"
  },
  {
    "path": "home-assistant/custom_components/yahoofinance/sensor.py",
    "content": "\"\"\"\r\nA component which presents Yahoo Finance stock quotes.\r\n\r\nhttps://github.com/iprak/yahoofinance\r\n\"\"\"\r\n\r\nfrom __future__ import annotations\r\n\r\nimport datetime\r\nimport logging\r\nfrom timeit import default_timer as timer\r\nfrom typing import Union\r\n\r\nfrom homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN\r\nfrom homeassistant.const import ATTR_ATTRIBUTION\r\nfrom homeassistant.helpers.entity import async_generate_entity_id\r\nfrom homeassistant.helpers.typing import StateType\r\nfrom homeassistant.helpers.update_coordinator import CoordinatorEntity\r\n\r\nfrom custom_components.yahoofinance import SymbolDefinition, convert_to_float\r\nfrom custom_components.yahoofinance.coordinator import YahooSymbolUpdateCoordinator\r\n\r\nfrom .const import (\r\n    ATTR_CURRENCY_SYMBOL,\r\n    ATTR_DIVIDEND_DATE,\r\n    ATTR_MARKET_STATE,\r\n    ATTR_QUOTE_SOURCE_NAME,\r\n    ATTR_QUOTE_TYPE,\r\n    ATTR_SYMBOL,\r\n    ATTR_TRENDING,\r\n    ATTRIBUTION,\r\n    CONF_DECIMAL_PLACES,\r\n    CONF_SHOW_TRENDING_ICON,\r\n    CONF_SYMBOLS,\r\n    CURRENCY_CODES,\r\n    DATA_CURRENCY_SYMBOL,\r\n    DATA_DIVIDEND_DATE,\r\n    DATA_FINANCIAL_CURRENCY,\r\n    DATA_MARKET_STATE,\r\n    DATA_QUOTE_SOURCE_NAME,\r\n    DATA_QUOTE_TYPE,\r\n    DATA_REGULAR_MARKET_PREVIOUS_CLOSE,\r\n    DATA_REGULAR_MARKET_PRICE,\r\n    DATA_SHORT_NAME,\r\n    DEFAULT_CURRENCY,\r\n    DEFAULT_ICON,\r\n    DEFAULT_NUMERIC_DATA_GROUP,\r\n    DOMAIN,\r\n    HASS_DATA_CONFIG,\r\n    HASS_DATA_COORDINATOR,\r\n    NUMERIC_DATA_GROUPS,\r\n)\r\n\r\n_LOGGER = logging.getLogger(__name__)\r\nENTITY_ID_FORMAT = SENSOR_DOMAIN + \".\" + DOMAIN + \"_{}\"\r\n\r\n\r\nasync def async_setup_platform(hass, _config, async_add_entities, _discovery_info=None):\r\n    \"\"\"Set up the Yahoo Finance sensor platform.\"\"\"\r\n\r\n    coordinator = hass.data[DOMAIN][HASS_DATA_COORDINATOR]\r\n    domain_config = hass.data[DOMAIN][HASS_DATA_CONFIG]\r\n    symbol_definitions: list[SymbolDefinition] = domain_config[CONF_SYMBOLS]\r\n\r\n    sensors = [\r\n        YahooFinanceSensor(hass, coordinator, symbol, domain_config)\r\n        for symbol in symbol_definitions\r\n    ]\r\n\r\n    async_add_entities(sensors, update_before_add=False)\r\n    _LOGGER.info(\"Entities added for %s\", [item.symbol for item in symbol_definitions])\r\n\r\n\r\nclass YahooFinanceSensor(CoordinatorEntity):\r\n    \"\"\"Represents a Yahoo finance entity.\"\"\"\r\n\r\n    _currency = DEFAULT_CURRENCY\r\n    _icon = DEFAULT_ICON\r\n    _market_price = None\r\n    _short_name = None\r\n    _target_currency = None\r\n    _original_currency = None\r\n    _last_available_timer = None\r\n\r\n    def __init__(\r\n        self,\r\n        hass,\r\n        coordinator: YahooSymbolUpdateCoordinator,\r\n        symbol_definition: SymbolDefinition,\r\n        domain_config,\r\n    ) -> None:\r\n        \"\"\"Initialize the YahooFinance entity.\"\"\"\r\n        super().__init__(coordinator)\r\n\r\n        symbol = symbol_definition.symbol\r\n        self._symbol = symbol\r\n        self._show_trending_icon = domain_config[CONF_SHOW_TRENDING_ICON]\r\n        self._decimal_places = domain_config[CONF_DECIMAL_PLACES]\r\n        self._previous_close = None\r\n        self._target_currency = symbol_definition.target_currency\r\n\r\n        self._unique_id = symbol\r\n        self.entity_id = async_generate_entity_id(ENTITY_ID_FORMAT, symbol, hass=hass)\r\n\r\n        # _attr_extra_state_attributes is returned by extra_state_attributes\r\n        self._attr_extra_state_attributes = {\r\n            ATTR_ATTRIBUTION: ATTRIBUTION,\r\n            ATTR_CURRENCY_SYMBOL: None,\r\n            ATTR_SYMBOL: symbol,\r\n            ATTR_QUOTE_TYPE: None,\r\n            ATTR_QUOTE_SOURCE_NAME: None,\r\n            ATTR_MARKET_STATE: None,\r\n        }\r\n\r\n        # List of groups to include as attributes\r\n        self._numeric_data_to_include = []\r\n\r\n        # pylint: disable=consider-using-dict-items\r\n\r\n        # Initialize all numeric attributes which we want to include to None\r\n        for group in NUMERIC_DATA_GROUPS:\r\n            if group == DEFAULT_NUMERIC_DATA_GROUP or domain_config.get(group, True):\r\n                for value in NUMERIC_DATA_GROUPS[group]:\r\n                    self._numeric_data_to_include.append(value)\r\n\r\n                    key = value[0]\r\n                    self._attr_extra_state_attributes[key] = None\r\n\r\n        # Delay initial data population to `available` which is called from `_async_write_ha_state`\r\n        _LOGGER.debug(\r\n            \"Created entity for target_currency=%s\",\r\n            self._target_currency,\r\n        )\r\n\r\n    @property\r\n    def unique_id(self) -> str:\r\n        \"\"\"Return a unique ID.\"\"\"\r\n        return self._unique_id\r\n\r\n    @property\r\n    def name(self) -> str:\r\n        \"\"\"Return the name of the sensor.\"\"\"\r\n        if self._short_name is not None:\r\n            return self._short_name\r\n\r\n        return self._symbol\r\n\r\n    @property\r\n    def state(self) -> StateType:\r\n        \"\"\"Return the state of the sensor.\"\"\"\r\n        return self._round(self._market_price)\r\n\r\n    @property\r\n    def unit_of_measurement(self) -> str:\r\n        \"\"\"Return the unit of measurement of this entity, if any.\"\"\"\r\n        return self._currency\r\n\r\n    @property\r\n    def icon(self) -> str:\r\n        \"\"\"Return the icon to use in the frontend, if any.\"\"\"\r\n        return self._icon\r\n\r\n    def _round(self, value: Union[float, None]) -> Union[float, int, None]:\r\n        \"\"\"Return formatted value based on decimal_places.\"\"\"\r\n        if value is None:\r\n            return None\r\n\r\n        if self._decimal_places < 0:\r\n            return value\r\n        if self._decimal_places == 0:\r\n            return int(value)\r\n\r\n        return round(value, self._decimal_places)\r\n\r\n    def _get_target_currency_conversion(self) -> Union[float, None]:\r\n        value = None\r\n\r\n        if self._target_currency and self._original_currency:\r\n            if self._target_currency == self._original_currency:\r\n                _LOGGER.info(\"%s No conversion necessary\", self._symbol)\r\n                return None\r\n\r\n            conversion_symbol = (\r\n                f\"{self._original_currency}{self._target_currency}=X\".upper()\r\n            )\r\n            data = self.coordinator.data\r\n\r\n            if data is not None:\r\n                symbol_data = data.get(conversion_symbol)\r\n\r\n                if symbol_data is not None:\r\n                    value = symbol_data[DATA_REGULAR_MARKET_PRICE]\r\n                    _LOGGER.debug(\"%s %s is %s\", self._symbol, conversion_symbol, value)\r\n                else:\r\n                    _LOGGER.debug(\r\n                        \"%s No data found for %s\",\r\n                        self._symbol,\r\n                        conversion_symbol,\r\n                    )\r\n                    self.coordinator.add_symbol(conversion_symbol)\r\n\r\n        return value\r\n\r\n    @staticmethod\r\n    def safe_convert(\r\n        value: Union[float, None], conversion: Union[float, None]\r\n    ) -> Union[float, None]:\r\n        \"\"\"Return the converted value. The original value is returned if there is no conversion.\"\"\"\r\n        if value is None:\r\n            return None\r\n        if conversion is None:\r\n            return value\r\n        return value * conversion\r\n\r\n    @staticmethod\r\n    def parse_dividend_date(dividend_date_timestamp) -> str | None:\r\n        \"\"\"Parse dividendDate JSON element.\"\"\"\r\n\r\n        dividend_date_timestamp = convert_to_float(dividend_date_timestamp)\r\n        if dividend_date_timestamp is None:\r\n            return None\r\n\r\n        dividend_date = datetime.datetime.utcfromtimestamp(dividend_date_timestamp)\r\n        dividend_date_date = dividend_date.date()\r\n        return dividend_date_date.isoformat()\r\n\r\n    def _update_original_currency(self, symbol_data) -> bool:\r\n        \"\"\"Update the original currency.\"\"\"\r\n\r\n        # Symbol currency does not change so calculate it only once\r\n        if self._original_currency is not None:\r\n            return\r\n\r\n        # Prefer currency over financialCurrency, for foreign symbols financialCurrency\r\n        # can represent the remote currency. But financialCurrency can also be None.\r\n        financial_currency = symbol_data[DATA_FINANCIAL_CURRENCY]\r\n        currency = symbol_data[DATA_CURRENCY_SYMBOL]\r\n\r\n        _LOGGER.debug(\r\n            \"%s currency=%s financialCurrency=%s\",\r\n            self._symbol,\r\n            currency,\r\n            financial_currency,\r\n        )\r\n\r\n        self._original_currency = currency or financial_currency or DEFAULT_CURRENCY\r\n\r\n    def _update_properties(self) -> None:\r\n        \"\"\"Update local fields.\"\"\"\r\n\r\n        data = self.coordinator.data\r\n        if data is None:\r\n            _LOGGER.debug(\"%s Coordinator data is None\", self._symbol)\r\n            return\r\n\r\n        symbol_data: dict = data.get(self._symbol)\r\n        if symbol_data is None:\r\n            _LOGGER.debug(\"%s Symbol data is None\", self._symbol)\r\n            return\r\n\r\n        self._update_original_currency(symbol_data)\r\n        conversion = self._get_target_currency_conversion()\r\n\r\n        self._short_name = symbol_data[DATA_SHORT_NAME]\r\n\r\n        market_price = symbol_data[DATA_REGULAR_MARKET_PRICE]\r\n        self._market_price = self.safe_convert(market_price, conversion)\r\n        # _market_price gets rounded in the `state` getter.\r\n\r\n        if conversion:\r\n            _LOGGER.info(\r\n                \"%s converted %s X %s = %s\",\r\n                self._symbol,\r\n                market_price,\r\n                conversion,\r\n                self._market_price,\r\n            )\r\n\r\n        self._previous_close = self.safe_convert(\r\n            symbol_data[DATA_REGULAR_MARKET_PREVIOUS_CLOSE], conversion\r\n        )\r\n\r\n        for value in self._numeric_data_to_include:\r\n            key = value[0]\r\n            attr_value = symbol_data[key]\r\n\r\n            # Convert if currency value\r\n            if value[1]:\r\n                attr_value = self.safe_convert(attr_value, conversion)\r\n\r\n            self._attr_extra_state_attributes[key] = self._round(attr_value)\r\n\r\n        # Add some other string attributes\r\n        self._attr_extra_state_attributes[ATTR_QUOTE_TYPE] = symbol_data[\r\n            DATA_QUOTE_TYPE\r\n        ]\r\n        self._attr_extra_state_attributes[ATTR_QUOTE_SOURCE_NAME] = symbol_data[\r\n            DATA_QUOTE_SOURCE_NAME\r\n        ]\r\n        self._attr_extra_state_attributes[ATTR_MARKET_STATE] = symbol_data[\r\n            DATA_MARKET_STATE\r\n        ]\r\n\r\n        self._attr_extra_state_attributes[\r\n            ATTR_DIVIDEND_DATE\r\n        ] = self.parse_dividend_date(symbol_data.get(DATA_DIVIDEND_DATE))\r\n\r\n        # Use target_currency if we have conversion data. Otherwise keep using the\r\n        # currency from data.\r\n        if conversion is not None:\r\n            currency = self._target_currency or self._original_currency\r\n        else:\r\n            currency = self._original_currency\r\n\r\n        self._currency = currency.upper()\r\n        lower_currency = self._currency.lower()\r\n\r\n        trending_state = self._calc_trending_state()\r\n\r\n        # Fall back to currency based icon if there is no trending state\r\n        if trending_state is not None:\r\n            self._attr_extra_state_attributes[ATTR_TRENDING] = trending_state\r\n\r\n            if self._show_trending_icon:\r\n                self._icon = f\"mdi:trending-{trending_state}\"\r\n            else:\r\n                self._icon = f\"mdi:currency-{lower_currency}\"\r\n        else:\r\n            self._icon = f\"mdi:currency-{lower_currency}\"\r\n\r\n        # If this one of the known currencies, then include the correct currency symbol.\r\n        # Don't show $ as the CurrencySymbol even if we can't get one.\r\n        self._attr_extra_state_attributes[ATTR_CURRENCY_SYMBOL] = CURRENCY_CODES.get(\r\n            lower_currency\r\n        )\r\n\r\n    def _calc_trending_state(self) -> Union[str, None]:\r\n        \"\"\"Return the trending state for the symbol.\"\"\"\r\n        if self._market_price is None or self._previous_close is None:\r\n            return None\r\n\r\n        if self._market_price > self._previous_close:\r\n            return \"up\"\r\n        if self._market_price < self._previous_close:\r\n            return \"down\"\r\n\r\n        return \"neutral\"\r\n\r\n    @property\r\n    def available(self) -> bool:\r\n        \"\"\"Return if entity is available.\"\"\"\r\n\r\n        current_timer = timer()\r\n\r\n        # Limit data update if available was invoked within 400 ms.\r\n        # This matched the slow entity reporting done in Entity.\r\n        if (self._last_available_timer is None) or (\r\n            (current_timer - self._last_available_timer) > 0.4\r\n        ):\r\n            self._update_properties()\r\n            self._last_available_timer = current_timer\r\n\r\n        return self.coordinator.last_update_success\r\n"
  },
  {
    "path": "home-assistant/custom_components/yahoofinance/services.yaml",
    "content": "# Describes the format of available services for yahoofinance\r\n\r\nrefresh_symbols:\r\n  description: Refresh data for all the symbols."
  },
  {
    "path": "home-assistant/docker-entrypoint.sh",
    "content": "#!/bin/bash -e\nexec python -m homeassistant --config /config"
  },
  {
    "path": "home-assistant/groups.yaml",
    "content": "family:\n  entities:\n    - person.arek\n    - person.ola\n\nwindows:\n  entities:\n    - binary_sensor.bedroom_window\n    - binary_sensor.living_room_window\n    - binary_sensor.balcone_door\n"
  },
  {
    "path": "home-assistant/known_devices.yaml.example",
    "content": "arek:\n  hide_if_away: false\n  icon:\n  mac: C9:37:AE:8E:0D:BD\n  name: life360 arek\n  picture: /local/arek.png\n  track: true\n\nola:\n  hide_if_away: false\n  icon:\n  mac: FA:A2:BD:12:9D:32\n  name: life360 ola\n  picture: /local/ola.png\n  track: true\n"
  },
  {
    "path": "home-assistant/lovelace/balcony.yaml",
    "content": "- type: custom:layout-card\n  layout: horizontal\n  max_columns: 3\n  cards:\n    - type: horizontal-stack\n      cards:\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.balcone_temperature\n          line_color: '#E53935'\n          hours_to_show: 24\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          extrema: true\n          show:\n            points: true\n            fill: fade\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.balcone_humidity\n          line_color: '#3949AB'\n          hours_to_show: 24\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          show:\n            points: true\n            fill: fade\n    - type: entities\n      show_header_toggle: false\n      entities:\n        - binary_sensor.balcone_door\n"
  },
  {
    "path": "home-assistant/lovelace/batchroom.yaml",
    "content": "- type: custom:layout-card\n  layout: vertical\n  max_columns: 3\n  cards:\n    - type: horizontal-stack\n      cards:\n        - type: entity-button\n          entity: light.bathroom\n          icon: mdi:ceiling-light\n    - type: custom:layout-break\n    - type: horizontal-stack\n      cards:\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.bathroom_temperature\n          line_color: '#E53935'\n          hours_to_show: 24\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          extrema: true\n          show:\n            points: true\n            fill: fade\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.bathroom_humidity\n          line_color: '#3949AB'\n          hours_to_show: 24\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          show:\n            points: true\n            fill: fade\n    - type: entities\n      show_header_toggle: false\n      entities:\n        - binary_sensor.bathroom_door\n    - type: entities\n      show_header_toggle: false\n      entities:\n        - sensor.arek_weight\n        - sensor.arek_bmi\n    - type: entities\n      show_header_toggle: false\n      entities:\n        - sensor.ola_weight \n        - sensor.ola_bmi\n"
  },
  {
    "path": "home-assistant/lovelace/bedroom.yaml",
    "content": "- type: custom:layout-card\n  layout: vertical\n  max_columns: 3\n  cards:\n    - type: horizontal-stack\n      cards:\n        - type: horizontal-stack\n          cards:\n            - type: custom:mini-graph-card\n              entities:\n                - sensor.corridor_temperature\n              line_color: '#E53935'\n              hours_to_show: 24\n              points_per_hour: 1\n              animate: true\n              hour24: true\n              extrema: true\n              show:\n                points: true\n                fill: fade\n            - type: custom:mini-graph-card\n              entities:\n                - sensor.corridor_humidity\n              line_color: '#3949AB'\n              hours_to_show: 24\n              points_per_hour: 1\n              animate: true\n              hour24: true\n              show:\n                points: true\n                fill: fade\n    - type: horizontal-stack\n      cards:\n        - type: horizontal-stack\n          cards:\n            - type: custom:mini-graph-card\n              entities:\n                - sensor.jakosc_powietrza_volatile_organic_compound\n              line_color: '#00838f'\n              hours_to_show: 24\n              points_per_hour: 1\n              animate: true\n              hour24: true\n              extrema: true\n              show:\n                points: true\n                fill: fade\n            - type: custom:mini-graph-card\n              entities:\n                - sensor.corridor_pressure\n              line_color: '#558b2f'\n              hours_to_show: 24\n              points_per_hour: 1\n              animate: true\n              hour24: true\n              show:\n                points: true\n                fill: fade\n\n    - type: horizontal-stack\n      cards:\n        - type: horizontal-stack\n          cards:\n            - type: custom:mini-graph-card\n              entities:\n                - sensor.jakosc_powietrza_carbon_dioxide\n              line_color: '#f9a825'\n              hours_to_show: 24\n              points_per_hour: 1\n              animate: true\n              hour24: true\n              extrema: true\n              show:\n                points: true\n                fill: fade\n            - type: custom:mini-graph-card\n              entities:\n                - sensor.jakosc_powietrza_formaldehyde\n              line_color: '#558b2f'\n              hours_to_show: 24\n              points_per_hour: 1\n              animate: true\n              hour24: true\n              show:\n                points: true\n                fill: fade\n\n    - type: custom:air-purifier-card\n      entity: fan.bedroom_air_purifier\n    - type: custom:layout-break\n    - type: horizontal-stack\n      cards:\n        - type: entity-button\n          entity: light.bedroom\n          icon: mdi:ceiling-light\n          icon_height: '159px'\n        - type: entity-button\n          entity: switch.giggid\n          icon: mdi:account-arrow-left\n\n    - type: custom:mini-media-player\n      entity: media_player.bedroom\n      name: 'Alexa'\n      icon: mdi:amazon-alexa\n      hide_power: true\n      hide_controls: false\n      hide_mute: true\n      hide_volume: true\n      show_progress: false\n      show_source: full\n    - type: thermostat\n      title: Bedroom\n      entity: climate.bedroom_thermostatic_valve\n"
  },
  {
    "path": "home-assistant/lovelace/briefing.yaml",
    "content": "- type: custom:layout-card\n  layout: horizontal\n  max_columns: 3\n  cards:\n    - type: vertical-stack\n      cards:\n        - type: \"custom:kkm-card\"\n          entity_id: sensor.arek_karta_miejsca\n        - type: custom:transit-card\n          entity: sensor.to_work_transit\n    - type: custom:qr-card\n      code: !env_var HOME_ASSISTANT_SSID_QR_CODE"
  },
  {
    "path": "home-assistant/lovelace/cameras.yaml",
    "content": "- type: custom:layout-card\n  layout: horizontal\n  max_columns: 3\n  cards:\n    - type: picture-entity\n      title: Kuchnia\n      entity: camera.him_cam\n      camera_view: 'live'\n    - type: picture-entity\n      entity: camera.main_square\n      camera_view: 'live'\n    - type: picture-entity\n      entity: camera.wawel\n      camera_view: 'live'\n"
  },
  {
    "path": "home-assistant/lovelace/corridor.yaml",
    "content": "- type: custom:layout-card\n  layout: horizontal\n  max_columns: 3\n  cards:\n    - type: horizontal-stack\n      cards:\n        - type: entity-button\n          entity: light.corridor\n          icon: mdi:ceiling-light\n          icon_height: '153px'\n        - type: light\n          entity: light.hall_balls\n          icon: mdi:spotlight-beam\n    - type: horizontal-stack\n      cards:\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.corridor_temperature\n          line_color: '#E53935'\n          hours_to_show: 24\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          extrema: true\n          show:\n            points: true\n            fill: fade\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.corridor_humidity\n          line_color: '#3949AB'\n          hours_to_show: 24\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          show:\n            points: true\n            fill: fade\n    - type: entities\n      show_header_toggle: false\n      entities:\n        - binary_sensor.main_door\n        - binary_sensor.cat_shitter_door\n        - binary_sensor.door_pantry\n        - binary_sensor.pawlacz_door\n        - binary_sensor.toolsheet_door\n"
  },
  {
    "path": "home-assistant/lovelace/dashboard.yaml",
    "content": "- type: custom:layout-card\n  layout: vertical\n  max_columns: 4\n  cards:\n    - type: horizontal-stack\n      cards:\n        - type: picture-entity\n          state_image:\n            home: /local/presence/ola/home.png\n            not_home: /local/presence/ola/away.png\n            codesthq: /local/presence/ola/codesthq.png\n          name: Ola\n          aspect_ratio: 16x10\n          entity: person.ola\n        - type: picture-glance\n          entities:\n            - person.arek\n            - sensor.arek_activity\n          state_image:\n            home: /local/presence/arek/home.png\n            not_home: /local/presence/arek/away.png\n            codesthq: /local/presence/arek/codesthq.png\n          name: Arek\n          aspect_ratio: 16x10\n          entity: person.arek\n\n    - type: map\n      dark_mode: false\n      default_zoom: 17\n      hours_to_show: 4\n      entities:\n        - person.arek\n        - person.ola\n\n    - type: iframe\n      url: https://www.ventusky.com/?p=50.02;19.89;7&l=rain-1h\n      aspect_ratio: 100%\n\n    - type: custom:layout-break\n\n    - type: weather-forecast\n      entity: weather.dark_sky\n    - type: horizontal-stack\n      cards:\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.mean_temperature\n          line_color: '#E53935'\n          hours_to_show: 24\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          extrema: true\n          show:\n            points: true\n            fill: fade\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.mean_humidity\n          line_color: '#3949AB'\n          hours_to_show: 24\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          show:\n            points: true\n            fill: fade\n\n    - type: horizontal-stack\n      cards:\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.mean_pressure\n          line_color: '#8ef26d'\n          hours_to_show: 24\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          extrema: true\n          show:\n            points: true\n            fill: fade\n    - type: custom:layout-break\n\n    - type: horizontal-stack\n      cards:\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.power_consumption\n          line_color: '#fcf800'\n          hours_to_show: 24\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          lower_bound: 0\n          show:\n            points: true\n            fill: fade\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.krakow_aqi\n            - sensor.mean_aqi\n          line_color: '#a8a8a8'\n          name: 'AQI'\n          hours_to_show: 24\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          lower_bound: 0\n          show:\n            points: true\n            fill: fade\n\n    - type: horizontal-stack\n      cards:\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.asuswrt_upload_speed\n          line_color: '#3CF'\n          hours_to_show: 24\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          extrema: true\n          show:\n            points: true\n            fill: fade\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.asuswrt_download_speed\n          line_color: '#FF9000'\n          hours_to_show: 24\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          show:\n            points: true\n            fill: fade\n\n    - type: horizontal-stack\n      cards:\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.speedtest_upload\n          line_color: '#66bb6a'\n          hours_to_show: 24\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          extrema: true\n          show:\n            points: true\n            fill: fade\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.speedtest_download\n          line_color: '#0DA035'\n          hours_to_show: 24\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          show:\n            points: true\n            fill: fade\n\n    - type: horizontal-stack\n      cards:\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.speedtest_ping\n          line_color: '#03a9f4'\n          hours_to_show: 24\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          extrema: true\n          show:\n            points: true\n            fill: fade\n"
  },
  {
    "path": "home-assistant/lovelace/desk.yaml",
    "content": "- type: custom:layout-card\n  layout: vertical\n  max_columns: 2\n  cards:\n    - type: horizontal-stack\n      cards:\n        - type: entity-button\n          entity: light.work_desk\n          icon: mdi:track-light\n          icon_height: '153px'\n        - type: entity-button\n          entity: switch.mac_mini\n          icon: mdi:apple\n          icon_height: '153px'\n    - type: entities\n      show_header_toggle: false\n      entities:\n        - scene.work\n    # - type: custom:linak-desk\n    #   entity: cover.desk\n    #   height:\n    #     min: 68\n    #     max: 128\n    #   presets:\n    #     - target: 100\n    #       label: 'Arek Praca'\n    #     - target: 128\n    #       label: 'Arek Majsterkowanie'\n    #     - target: 120\n    #       label: 'Ola Stanie'\n    #     - target: 60\n    #       label: 'Ola Praca'\n    - break\n    - type: custom:mini-media-player\n      entity: media_player.spotify\n      name: Spotify Player\n      artwork: full-cover\n      hide_power: true\n      hide_volume: false\n      show_progress: true\n    - type: custom:mini-media-player\n      entity: media_player.soundbar\n      name: Soundbar\n      artwork: none\n      icon: mdi:surround-sound\n      show_source: full\n      toggle_power: false\n      hide_power: true\n      hide_controls: true\n      hide_mute: false\n      hide_volume: false\n      show_progress: false\n      group: false\n    - break"
  },
  {
    "path": "home-assistant/lovelace/invest.yaml",
    "content": "- type: custom:layout-card\n  layout: veritical\n  max_columns: 4\n  cards:\n    - type: horizontal-stack\n      cards:\n        - type: gauge\n          max: 15\n          entity: sensor.current_portfolio_percent_performance\n\n    - type: horizontal-stack\n      cards:\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.obligacje\n          line_color: '#343a37'\n          hours_to_show: 720\n          animate: true\n          hour24: true\n          points_per_hour: 0.05\n          show:\n            points: true\n            fill: fade\n    - type: horizontal-stack\n      cards:\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.portfolio_market_value\n          line_color: '#9C27B0'\n          hours_to_show: 720\n          animate: true\n          hour24: true\n          points_per_hour: 0.05\n          show:\n            points: true\n            fill: fade\n    - type: custom:layout-card\n      layout: horizontal\n      max_columns: 1\n      cards:\n        - type: horizontal-stack\n          cards:\n            - type: custom:mini-graph-card\n              entities:\n                - sensor.all_portfolio_value\n              line_color: '#FFD700'\n              hours_to_show: 720\n              animate: true\n              hour24: true\n              points_per_hour: 0.05\n              show:\n                points: true\n                fill: fade\n\n\n"
  },
  {
    "path": "home-assistant/lovelace/kitchen.yaml",
    "content": "\n- type: custom:layout-card\n  layout: vertical\n  max_columns: 3\n  cards:\n    - type: horizontal-stack\n      cards:\n        - type: entity-button\n          entity: light.kitchen\n          icon: mdi:ceiling-light\n        - type: entity-button\n          entity: switch.pizza\n          icon: mdi:pizza\n    - type: horizontal-stack\n      cards:\n        - type: entity-button\n          entity: light.cooking\n          icon: mdi:stove\n        - type: entity-button\n          entity: light.coffee\n          icon: mdi:coffee\n    - type: custom:mini-media-player\n      entity: media_player.kitchen\n      name: 'Alexa'\n      icon: mdi:amazon-alexa\n      hide_power: true\n      hide_controls: false\n      hide_mute: true\n      hide_volume: true\n      show_progress: false\n      show_source: full\n    - type: custom:layout-break\n    - type: entity\n      entity: sensor.kitchen_next_timer\n    - type: custom:layout-break\n    - type: custom:xiaomi-vacuum-map-card\n      entity: vacuum.main_vacuum\n      map_source:\n        camera: camera.vacuum_map\n      calibration_source:\n        camera: true\n    - type: custom:layout-break\n    - type: horizontal-stack\n      cards:\n        - type: horizontal-stack\n          cards:\n            - type: custom:mini-graph-card\n              entities:\n                - sensor.kitchen_temperature\n              line_color: '#E53935'\n              hours_to_show: 24\n              points_per_hour: 1\n              animate: true\n              hour24: true\n              extrema: true\n              show:\n                points: true\n                fill: fade\n            - type: custom:mini-graph-card\n              entities:\n                - sensor.kitchen_humidity\n              line_color: '#3949AB'\n              hours_to_show: 24\n              points_per_hour: 1\n              animate: true\n              hour24: true\n              show:\n                points: true\n                fill: fade\n      \n    - type: thermostat\n      entity: climate.kitchen_thermostat\n"
  },
  {
    "path": "home-assistant/lovelace/living_room.yaml",
    "content": "- type: custom:layout-card\n  layout: vertical\n  max_columns: 3\n  cards:\n    - type: horizontal-stack\n      cards:\n        - type: horizontal-stack\n          cards:\n            - type: custom:mini-graph-card\n              entities:\n                - sensor.mean_living_room_temperature\n              line_color: '#E53935'\n              hours_to_show: 24\n              points_per_hour: 1\n              animate: true\n              hour24: true\n              extrema: true\n              show:\n                points: true\n                fill: fade\n            - type: custom:mini-graph-card\n              entities:\n                - sensor.mean_living_room_humidity\n              line_color: '#3949AB'\n              hours_to_show: 24\n              points_per_hour: 1\n              animate: true\n              hour24: true\n              show:\n                points: true\n                fill: fade\n\n    - type: thermostat\n      entity: climate.living_room_thermostat\n    - type: thermostat\n      entity: climate.air_condition\n    - type: custom:layout-break\n    - type: horizontal-stack\n      cards:\n        - type: entity-button\n          entity: light.main\n          icon: mdi:ceiling-light\n        - type: entity-button\n          entity: light.dinner_table\n          icon: mdi:ceiling-light\n    - type: horizontal-stack\n      cards:\n        - type: entity-button\n          entity: light.tv_stand\n          icon: mdi:track-light\n        - type: entity-button\n          entity: light.work_desk\n          icon: mdi:track-light\n    - type: horizontal-stack\n      cards:\n        - type: entity-button\n          entity: cover.living_room\n          icon: mdi:arrow-down-bold-box\n          name: 'Opuść rolety'\n          tap_action:\n            action: 'call-service'\n            service: 'cover.close_cover'\n            service_data:\n              entity_id: cover.living_room\n        - type: entity-button\n          entity: cover.living_room\n          icon: mdi:arrow-up-bold-box\n          name: 'Podnieś rolety'\n          tap_action:\n            action: 'call-service'\n            service: 'cover.open_cover'\n            service_data:\n              entity_id: cover.living_room\n    # Wallpaper and stuff\n    - type: humidifier\n      entity: humidifier.living_room_humidifer\n    - type: entities\n      title: Oczyszzczacz\n      show_header_toggle: false\n      entities:\n        - sensor.living_room_aqi\n        - fan.living_room_air_purifier\n    - type: custom:layout-break\n    - type: entities\n      title: Telewizor\n      show_header_toggle: false\n      entities:\n        - type: custom:mini-media-player\n          entity: media_player.tv\n          name: Ekran\n          artwork: none\n          icon: mdi:television\n          show_source: full\n          hide_power: false\n          hide_controls: false\n          hide_mute: true\n          hide_volume: true\n          show_progress: false\n          group: true\n          toggle_power: false\n\n        - type: custom:mini-media-player\n          entity: media_player.soundbar\n          name: Soundbar\n          artwork: none\n          icon: mdi:surround-sound\n          show_source: full\n          toggle_power: false\n          hide_power: true\n          hide_controls: true\n          hide_mute: false\n          hide_volume: false\n          show_progress: false\n          group: true\n\n        - type: custom:mini-media-player\n          entity: media_player.living_room\n          name: 'Alexa'\n          icon: mdi:amazon-alexa\n          hide_power: true\n          hide_controls: false\n          hide_mute: true\n          hide_volume: true\n          show_progress: false\n          show_source: false\n          group: true\n\n    - type: custom:mini-media-player\n      entity: media_player.playstation\n      name: Playstation Player\n      artwork: full-cover\n      power_color: true\n      hide_volume: true\n      show_progress: false\n      show_source: false\n      toggle_power: true\n\n"
  },
  {
    "path": "home-assistant/lovelace/main.yaml",
    "content": "{% set modules = [\n  '/local/custom-lovelace/vacuum/card.js',\n  '/local/custom-lovelace/air-purifier/card.js',\n\n  '/hacsfiles/mini-graph-card/mini-graph-card-bundle.js',\n  '/hacsfiles/mini-media-player/mini-media-player-bundle.js',\n  '/hacsfiles/weather-card/weather-card.js',\n  '/hacsfiles/lovelace-layout-card/layout-card.js',\n  '/hacsfiles/lovelace-card-tools/card-tools.js',\n  '/hacsfiles/lovelace-xiaomi-vacuum-map-card/xiaomi-vacuum-map-card.js',\n  ] %}\n\n{% set js = [\n  '/local/custom-lovelace/light-card.js'\n  ] %}\n\nresources:\n{% for p in modules %}\n  - url: !file {{ p }}\n    type: module\n{% endfor %}\n{% for p in js %}\n  - url: !file {{ p }}\n    type: js\n{% endfor %}\n\ncch:\n\ntitle: Smart House\nviews:\n  - title: Dashboard\n    path: dashboard\n    panel: true\n    icon: mdi:view-dashboard\n    cards: !include dashboard.yaml\n\n  - title: Salon\n    panel: true\n    path: living-room\n    icon: 'mdi:seat-recline-extra'\n    cards: !include living_room.yaml\n\n  - title: Sypialnia\n    panel: true\n    icon: mdi:bed\n    path: bedroom\n    cards: !include bedroom.yaml\n\n  - title: Kuchnia\n    panel: true\n    icon: mdi:fridge\n    path: kitchen\n    cards: !include kitchen.yaml\n\n  - title: Lazienka\n    panel: true\n    icon: mdi:shower\n    path: batchroom\n    cards: !include batchroom.yaml\n\n  - title: Korytarz\n    panel: true\n    icon: mdi:door-closed\n    path: corridor\n    cards: !include corridor.yaml\n\n  - title: Balkon\n    panel: true\n    icon: mdi:tree\n    path: balcony\n    cards: !include balcony.yaml\n\n  # - title: Kamery\n  #   panel: true\n  #   icon: mdi:cctv\n  #   path: cameras\n  #   cards: !include cameras.yaml\n\n  # - title: Praca\n  #   panel: true\n  #   icon: mdi:briefcase\n  #   path: work\n  #   cards: !include work.yaml\n\n  # - title: Network\n  #   icon: mdi:wifi\n  #   panel: true\n  #   path: network\n  #   cards: !include network.yaml\n\n  # - title: System\n  #   panel: true\n  #   path: system\n  #   icon: mdi:server-security\n  #   cards: !include system.yaml\n\n  # - title: Briefing\n  #   path: briefing\n  #   panel: true\n  #   icon: mdi:cast\n  #   cards: !include briefing.yaml\n"
  },
  {
    "path": "home-assistant/lovelace/network.yaml",
    "content": "- type: custom:layout-card\n  layout: vertical\n  max_columns: 3\n  cards:\n    - type: horizontal-stack\n      cards:\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.asuswrt_upload_speed\n          line_color: '#5e2f5d'\n          hours_to_show: 6\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          extrema: true\n          show:\n            points: true\n            fill: fade\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.asuswrt_download_speed\n          line_color: '#385e2f'\n          hours_to_show: 6\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          show:\n            points: true\n            fill: fade\n    - type: entities\n      title: AdGuard\n      show_header_toggle: false\n      entities:\n        - sensor.adguard_average_processing_speed\n        - sensor.adguard_dns_queries\n        - sensor.adguard_dns_queries_blocked\n        - sensor.adguard_dns_queries_blocked_ratio\n        - switch.adguard_parental_control\n        - switch.adguard_protection\n    - type: custom:monster-card\n      card:\n        type: entities\n        title: Have I Been Pwned\n      filter:\n        include:\n          - entity_id: \"sensor.breaches_*\"\n            state: '> 0'\n    - break\n    - type: entities\n      title: Internet\n      show_header_toggle: false\n      entities:\n        - sensor.speedtest_download\n        - sensor.speedtest_ping\n        - sensor.speedtest_upload\n        - sensor.asuswrt_upload\n        - sensor.asuswrt_upload_speed\n        - sensor.asuswrt_download_speed\n        - sensor.asuswrt_download\n\n    - type: custom:monster-card\n      card:\n        type: entities\n        title: Fail2Ban\n      filter:\n        include:\n          - entity_id: \"sensor.fail2ban*\"\n    - break\n    - type: custom:qr-card\n      code: !env_var HOME_ASSISTANT_SSID_QR_CODE"
  },
  {
    "path": "home-assistant/lovelace/smart-home.yaml",
    "content": "- type: custom:layout-card\n  layout: horizontal\n  max_columns: 3\n  cards:\n    - type: custom:monster-card\n      card:\n        type: entities\n        title: Things that are broken\n      filter:\n        include:\n          - state: \"unknown\"\n        exclude:\n          - entity_id: group.*\n\n    - type: custom:monster-card\n      show_empty: false\n      card:\n        type: glance\n        title: Low Battery Devices\n      filter:\n        include:\n          - entity_id: \"*battery_level*\"\n            state: '< 25'\n          - attributes:\n              battery: '< 25'\n          - attributes:\n              battery_level: '< 25'\n\n    - type: custom:monster-card\n      card:\n        type: entities\n        title: Automations\n      filter:\n        include:\n          - entity_id: \"automation.*\"\n    - type: custom:monster-card\n      card:\n        type: entities\n        title: Binary Sensors\n      filter:\n        include:\n          - entity_id: \"binary_sensor.*\"\n    - type: custom:monster-card\n      card:\n        type: entities\n        title: Z-Wave\n      filter:\n        include:\n          - entity_id: \"zwave.*\"\n    - type: custom:monster-card\n      card:\n        type: entities\n        title: Switches tests\n      filter:\n        include:\n          - entity_id: \"switch.*\""
  },
  {
    "path": "home-assistant/lovelace/system.yaml",
    "content": "- type: custom:layout-card\n  layout: vertical\n  max_columns: 3\n  cards:\n    - type: horizontal-stack\n      cards:\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.corridor_pawlacz_temperature\n          line_color: '#E53935'\n          hours_to_show: 24\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          extrema: true\n          show:\n            points: true\n            fill: fade\n        - type: custom:mini-graph-card\n          entities:\n            - sensor.mrpickle_system_temperature\n          line_color: '#E53935'\n          hours_to_show: 24\n          points_per_hour: 1\n          animate: true\n          hour24: true\n          extrema: true\n          show:\n            points: true\n            fill: fade\n    - type: custom:monster-card\n      show_empty: false\n      card:\n        type: glance\n        title: Low Battery Devices\n      filter:\n        include:\n          - entity_id: \"*battery_level*\"\n            state: '< 25'\n          - attributes:\n              battery: '< 25'\n          - attributes:\n              battery_level: '< 25'\n    - type: entities\n      show_header_toggle: false\n      entities:\n        - switch.rack_fan\n        - sensor.uptime\n    - break\n    - type: custom:monster-card\n      card:\n        type: entities\n        title: Automations\n      filter:\n        include:\n          - entity_id: \"automation.*\"\n    - break\n    - type: custom:monster-card\n      card:\n        type: entities\n        title: Z-Wave\n      filter:\n        include:\n          - entity_id: \"zwave.*\""
  },
  {
    "path": "home-assistant/lovelace/work.yaml",
    "content": "- type: custom:layout-card\n  layout: vertical\n  max_columns: 4\n  cards:\n    - type: horizontal-stack\n      cards:\n        - type: picture-entity\n          entity: sensor.arek_jedzenie\n          name: \"Zamówienie żarło?\"\n          state_image:\n            \"on\": /local/food_on.gif\n            \"off\": /local/food_off.gif\n\n        - type: picture-entity\n          entity: sensor.arek_czas_pracy\n          name: \"Fajrant?\"\n          state_image:\n            \"on\": /local/working_on.gif\n            \"off\": /local/working_off.gif\n    - break\n    - type: \"custom:kkm-card\"\n      entity_id: sensor.arek_karta_miejsca\n    - type: custom:transit-card\n      entity: sensor.back_from_work_transit\n"
  },
  {
    "path": "home-assistant/panels/vacuum_plan.html",
    "content": "<dom-module id=\"ha-panel-vacuum_plan\">\n\n    <template>\n      <style include=\"ha-style\">\n        .container-with-toolbar {\n          height: calc(100% - 64px);\n          vertical-align: top;\n          position: relative;\n        }\n\n        .inner-container {\n          overflow: scroll;\n          background: #000;\n          height: 100%;\n          width: 100%;\n        }\n\n        #output {\n          position: fixed;\n          top: 84px;\n          right: 20px;\n          width: 320px;\n        }\n\n        textarea {\n          width: 90%;\n          height: 90px;\n          color: #fff;\n          background: #000;\n          padding: 10px;\n          border: 2px solid #fff;\n          border-radius: 10px;\n        }\n\n        vacuum-map-controller-card {\n          height: 100%;\n          position: relative;\n        }\n      </style>\n  \n      <app-toolbar>\n        <ha-menu-button></ha-menu-button>\n        <div main-title>Vacuum Plan</div>\n      </app-toolbar>\n  \n      <div class='container-with-toolbar'>\n        <vacuum-map-controller-card hass=[[hass]]></vacuum-map-controller-card>\n      </div>\n    </template>\n  \n  </dom-module>\n  \n  <script>\n    const CANVAS_ORIGIN = 512\n    const SCALE = 2\n    const XIAOMI_SIZE = 25500\n    //(𝑥1,𝑦1)=(−𝑦,𝑥)\n    function toXiaomiUnitX(position) {\n      const ppmPosition = position / SCALE\n      const originPos = ppmPosition - CANVAS_ORIGIN\n      const partPos = originPos / CANVAS_ORIGIN\n      return Math.round(XIAOMI_SIZE - partPos * XIAOMI_SIZE)\n    }\n    function toXiaomiUnitY(position) {\n      const ppmPosition = position / SCALE\n      const originPos = ppmPosition + CANVAS_ORIGIN\n      const partPos = originPos / CANVAS_ORIGIN\n      return Math.round(XIAOMI_SIZE - partPos * XIAOMI_SIZE)\n    }\n    function rotatePoint({ x, y }) {\n      return { x: y, y: -x }\n    }\n\n    class HaVacuumPlan extends Polymer.Element {\n      static get is() { return 'ha-panel-vacuum_plan'; }\n  \n      static get properties() {\n        return {\n          hass: {\n            type: Object,\n          }\n        };\n      }\n    }\n\n    class VacuumMapControllerCard extends HTMLElement {\n      set hass(hass) {\n        this._hass = hass\n        if (!this.content) {\n          this.drag = false\n          this.origin = { x: 0, y: 0 }\n          this.current = { x: 0, y: 0 }\n          this.content = document.createElement('div')\n          this.content.className = \"inner-container\"\n          this.mapImg = document.createElement('img')\n          this.canvas = document.createElement('canvas')\n\n          this.canvas.width = this.canvas.height = 2048\n\n          this.output = document.createElement('div')\n          this.output.id = 'output'\n\n          this.serviceText = document.createElement('textarea')\n          this.content.appendChild(this.canvas)\n          this.output.appendChild(this.serviceText)\n          \n          this.ctx = this.canvas.getContext('2d')\n\n          this.mapImg.onload = () => {\n            this.draw()\n            this.mapImg.hidden = true\n          }\n          \n          this.content.appendChild(this.mapImg)\n\n          this.content.addEventListener('mousedown', (e) => {\n            e.preventDefault()\n            this.current.x = this.origin.x = e.clientX + this.content.scrollLeft - 64;\n            this.current.y = this.origin.y = e.clientY + this.content.scrollTop - 64;\n            this.drag = true;\n            this.draw()\n          }, false);\n\n          this.content.addEventListener('mouseup', (e) => {\n            e.preventDefault()\n            this.drag = false;\n          }, false);\n\n          this.content.addEventListener('mousemove', (e) => {\n            if (this.drag) {\n              e.preventDefault()\n              this.current.x = e.clientX + this.content.scrollLeft - 64;\n              this.current.y = e.clientY + this.content.scrollTop - 64;\n            }\n            this.draw()\n          }, false);\n\n          this.appendChild(this.content);\n          this.appendChild(this.output);\n        }\n        \n        this.mapImg.src = this.entity.attributes.entity_picture\n      }\n\n      draw() {\n        requestAnimationFrame(() => this.redraw())\n      }\n\n      redraw() {\n        this.ctx.fillStyle = '#000000';\n        this.ctx.rect(0, 0, this.canvas.width, this.canvas.height);\n        this.ctx.fill();\n\n        this.ctx.drawImage(this.mapImg, 0, 0);\n\n        const sy = Math.round(Math.min(this.origin.y, this.current.y))\n        const sx = Math.round(Math.min(this.origin.x, this.current.x))\n        const ey = Math.round(Math.max(this.origin.y, this.current.y))\n        const ex = Math.round(Math.max(this.origin.x, this.current.x))\n        const width = ex - sx\n        const height = ey - sy\n        if (width > 0 && height > 0) {\n          this.ctx.fillStyle = 'rgba(250, 200, 150, 0.4)';\n          this.ctx.fillRect(sx, sy, width, height);\n        }\n\n        this.updateTextArea()\n      }\n\n      /**\n       * the first two digits are the coordinates of the bottom left corner of the zone, the second two digits for the top right corner of the zone, and the last digit for number of times to clean a zone. \n       */\n      updateTextArea() {\n        const start = rotatePoint(this.origin)\n        const end = rotatePoint(this.current)\n        const sy = toXiaomiUnitY(Math.min(start.y, end.y))\n        const sx = toXiaomiUnitX(Math.min(start.x, end.x))\n        const ey = toXiaomiUnitY(Math.max(start.y, end.y))\n        const ex = toXiaomiUnitX(Math.max(start.x, end.x))\n        this.serviceText.value = \"- service: vacuum.send_command\\n\" +\n                                 \"  data:\\n\" +\n                                 \"    entity_id: vacuum.main_vacum\\n\" +\n                                 \"    command: app_zoned_clean\\n\" +\n                                 `    params: [[${ey}, ${ex}, ${sy}, ${sx}, 1]]`\n      }\n\n      get entity() {\n        return this._hass.states['camera.vacuum_grid_map']\n      }\n    }\n    customElements.define('vacuum-map-controller-card', VacuumMapControllerCard);\n    customElements.define(HaVacuumPlan.is, HaVacuumPlan);\n  </script>"
  },
  {
    "path": "home-assistant/panels/zwavegraph2.html",
    "content": "<!--   \n  https://gist.github.com/AdamNaj/cbf4d792a22f443fe9d354e4dca4de00\n\n  Version 1.0:\n    - based on the brilliant code by @NigelL - with cosmetic changes mostly about clarity and shaping of nodes based on their function\n\n  Version 2.0: (02 July 2019)\n    - you can now pan the graph by dragging it\n    - you can now zoom the graph with your mouse wheel\n    - the graph initially is scaled to fill the full screen width\n    - added minimap to visualize which part of the graph you can see at the oment on the screen\n    - added 2 more tree layouts (click on the top-legend) - they didn't necessarily help me make the graph more manageable for me, but may be useful to others in their topology\n    - added the ability to show all node connections if someone wants to see the full picture of their Z-Wave mesh\n    - fixed the broken new line in the node tooltips\n    - you can now click on the node to see the entity dialog\n\n  Version 2.1: (20 September 2019)\n    - added Tools to graph legends so you can easily navigate to Z-Wave Network Management\n    - fixed (hopefully) the problem with the graph requiring page reload then navigating to it\n\n  Version 2.2: (04 October 2019)\n    - ability to turn off node grouping. Having the nodes grouped requires editing locations defined in the zwcfg_*.cfg\n\n  Version 2.3: (03 February 2020)\n    - Graph background reflects theme background color after page reload\n    - Fixed problem where some removed nodes lingering in the device registry could cause wrong node info card to be displayed after clicking on nodes with higher ids\n\n-->\n\n<dom-module id='ha-panel-zwavegraph2'>\n  <template>\n    <style include=\"ha-style\">\n      .thumb {\n        border: 1px solid #ddd;\n        position: absolute;\n        bottom: 5px;\n        right: 5px;\n        margin: 1px;\n        padding: 1px;\n        overflow: hidden;\n      }\n\n      #miniSvg {\n        z-index: 110;\n        background: white;\n      }\n\n      #scopeContainer {\n        z-index: 120;\n      }\n\n      .content {\n        overflow: hidden;\n        position: absolute;\n        left: 0px;\n        top: 64px;\n        bottom: 0px;\n        right: 0px;\n        padding: 8px;\n      }\n\n      svg>.output {\n        fill: #3598DB;\n        stroke: #2470A2;\n      }\n\n      .node>rect {\n        stroke: black;\n      }\n\n      .node.layer-1>rect,\n      .edgePath.layer-1>path {\n        fill: #3598DB;\n        stroke: #2470A2;\n      }\n\n      .node.layer-1>polygon,\n      .node.layer-1>rect,\n      .edgePath.layer-1>path {\n        fill: #3598DB;\n        stroke: #2470A2;\n      }\n\n      .node.layer-1 text {\n        fill: #1E5B84;\n      }\n\n      .node.layer-2>polygon,\n      .node.layer-2>rect,\n      .edgePath.layer-2>path {\n        stroke: #1D8548;\n      }\n\n      .node.layer-2>rect,\n      .edgePath.layer-2>path {\n        fill: #1BBC9B;\n      }\n\n      .node.layer-2 text {\n        fill: #11512C;\n      }\n\n      .node.layer-3>polygon,\n      .node.layer-3>rect,\n      .edgePath.layer-3>path {\n        stroke: #1D8548;\n      }\n\n      .node.layer-3>rect,\n      .edgePath.layer-3>path {\n        fill: #2DCC70;\n      }\n\n      .node.layer-3 text {\n        fill: #1D8548;\n      }\n\n      .node.layer-4>polygon,\n      .node.layer-4>rect,\n      .edgePath.layer-4>path {\n        stroke: #D25400;\n      }\n\n      .node.layer-4>rect,\n      .edgePath.layer-4>path {\n        fill: #F1C40F;\n      }\n\n      .node.layer-5>polygon,\n      .node.layer-4 text {\n        fill: #D25400;\n      }\n\n      .node.layer-5>polygon,\n      .node.layer-5>rect,\n      .edgePath.layer-5>path {\n        stroke: #D25400;\n      }\n\n      .node.layer-5>rect,\n      .edgePath.layer-5>path {\n        fill: #E77E23;\n      }\n\n      .node.layer-5 text {\n        fill: #D25400;\n      }\n\n      .node.Error>polygon,\n      .node.Error>rect {\n        fill: #ff7676;\n        stroke: darkred;\n      }\n\n      .node.Error text {\n        fill: darkred;\n      }\n\n      .node.unset>rect {\n        stroke: #666;\n      }\n\n      .node.unset>polygon,\n      .node.unset>rect {\n        stroke: #666;\n        fill: lightgray;\n      }\n\n      .cluster>rect {\n        stroke: lightgray;\n        fill: #f8f8f8;\n        stroke-width: 1px;\n        stroke-linecap: round;\n      }\n\n      .cluster>.label {\n        /* stroke: gray; */\n        fill: lightgray;\n      }\n\n      .node.unset text {\n        fill: #666;\n      }\n\n      .node text {\n        font-size: 12px;\n      }\n\n      .edgePath.layer-1>path {\n        fill: transparent;\n      }\n\n      .edgePath path {\n        stroke: #333;\n        fill: #333;\n      }\n\n      .node>polygon {\n        opacity: 0.7;\n      }\n\n      .node>rect {\n        stroke-width: 1px;\n        stroke-linecap: round;\n      }\n    </style>\n\n    <app-header-layout has-scrolling-region>\n      <app-header slot=\"header\" fixed>\n        <app-toolbar>\n          <ha-menu-button narrow='[[narrow]]' show-menu='[[showMenu]]'></ha-menu-button>\n          <div main-title>Z-Wave Graph</div>\n        </app-toolbar>\n      </app-header>\n\n      <div class=\"content\" style=\"background: var(--primary-background-color);\">\n        <svg id=\"svg\" width=\"100%\" height=\"100%\"></svg>\n        <svg id=\"scopeContainer\" class=\"thumb\">\n          <g>\n            <rect id=\"scope\" fill=\"red\" fill-opacity=\"0.03\" stroke=\"red\" stroke-width=\"1px\" stroke-opacity=\"0.3\" x=\"0\"\n              y=\"0\" width=\"0\" height=\"0\" />\n            <line id=\"line1\" stroke=\"red\" stroke-width=\"1px\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" />\n            <line id=\"line2\" stroke=\"red\" stroke-width=\"1px\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"0\" />\n          </g>\n        </svg>\n        <svg id=\"miniSvg\" class=\"thumb\" style=\"background: var(--primary-background-color);\"></svg>\n      </div>\n\n    </app-header-layout>\n\n  </template>\n\n</dom-module>\n<script src=\"https://d3js.org/d3.v5.min.js\"></script>\n<script src=\"https://cdnjs.cloudflare.com/ajax/libs/dagre-d3/0.6.1/dagre-d3.js\"></script>\n<script src=\"https://d3js.org/topojson.v2.min.js\"></script>\n<script src=\"https://cdn.jsdelivr.net/npm/svg-pan-zoom@3.5.0/dist/svg-pan-zoom.min.js\"></script>\n\n<script>\n  class HaPanelZWave extends Polymer.Element {\n    static get is() {\n      return 'ha-panel-zwavegraph2';\n    }\n\n    static get properties() {\n      return {\n        // Home Assistant object\n        hass: Object,\n        // If should render in narrow mode\n        narrow: {\n          type: Boolean,\n          value: false,\n        },\n        // If sidebar is currently shown\n        showMenu: {\n          type: Boolean,\n          value: false,\n        },\n        // Home Assistant panel info99\n        // panel.config contains config passed to register_panel serverside\n        panel: Object,\n\n        controls: {\n          type: Object\n        },\n        controlsLoaded: {\n          type: Boolean,\n          value: false\n        },\n\n        settings: {\n          type: Boolean,\n          value: false\n        },\n\n      };\n    }\n\n    ready() {\n      super.ready();\n      this.$.svg.innerHTML = \"\"\n      var that = this;\n      setTimeout(function() {\n        that.paintGraph(\"network-simplex\", \"relevant\", \"z-wave\");\n      }, 100);\n    }\n\n    paintGraph(ranker, edgeVisibility, grouping) {\n      var legends = [{\n          shape: \"rect\",\n          color: \"#3598DB\",\n          stroke: \"#2470A2\",\n          textcolor: \"#2470A2\",\n          text: \"Hub\"\n        },\n        {\n          shape: \"rect\",\n          color: \"#1BBC9B\",\n          stroke: \"#1D8548\",\n          textcolor: \"#11512C\",\n          text: \"1 hop\"\n        },\n        {\n          shape: \"rect\",\n          color: \"#2DCC70\",\n          stroke: \"#1D8548\",\n          textcolor: \"#1D8548\",\n          text: \"2 hops\"\n        },\n        {\n          shape: \"rect\",\n          color: \"#F1C40F\",\n          stroke: \"#D25400\",\n          textcolor: \"#D25400\",\n          text: \"3 hops\"\n        },\n        {\n          shape: \"rect\",\n          color: \"E77E23\",\n          stroke: \"#D25400\",\n          textcolor: \"#D25400\",\n          text: \"4 hops\"\n        },\n        {\n          shape: \"rect\",\n          color: \"crimson\",\n          stroke: \"darkred\",\n          textcolor: \"darkred\",\n          text: \"Failed Node\"\n        },\n        {\n          shape: \"rect\",\n          color: \"lightgray\",\n          stroke: \"#666666\",\n          textcolor: \"#666666\",\n          text: \"Unconnected\"\n        }\n      ];\n\n      var layout = [{\n          shape: \"rect\",\n          color: \"#3598DB\",\n          stroke: \"#2470A2\",\n          textcolor: \"#2470A2\",\n          text: \"Network Simplex\",\n          ranker: \"network-simplex\",\n          cursor: \"pointer\"\n        },\n        {\n          shape: \"rect\",\n          color: \"#3598DB\",\n          stroke: \"#2470A2\",\n          textcolor: \"#2470A2\",\n          text: \"Tight Tree\",\n          ranker: \"tight-tree\",\n          cursor: \"pointer\"\n        },\n        {\n          shape: \"rect\",\n          color: \"#3598DB\",\n          stroke: \"#2470A2\",\n          textcolor: \"#2470A2\",\n          text: \"Longest Path\",\n          ranker: \"longest-path\",\n          cursor: \"pointer\"\n        }\n      ];\n\n      var edgesLegend = [{\n          shape: \"rect\",\n          color: \"#3598DB\",\n          stroke: \"#2470A2\",\n          textcolor: \"#2470A2\",\n          text: \"Relevant Neighbors\",\n          edges: \"relevant\",\n          cursor: \"pointer\"\n        },\n        {\n          shape: \"rect\",\n          color: \"#3598DB\",\n          stroke: \"#2470A2\",\n          textcolor: \"#2470A2\",\n          text: \"All Neighbors\",\n          edges: \"all\",\n          cursor: \"pointer\"\n        }\n      ];\n\n      var groupingLegend = [{\n          shape: \"rect\",\n          color: \"#3598DB\",\n          stroke: \"#2470A2\",\n          textcolor: \"#2470A2\",\n          text: \"Z-Wave Locations\",\n          grouping: \"z-wave\",\n          cursor: \"pointer\"\n        },\n        {\n          shape: \"rect\",\n          color: \"#3598DB\",\n          stroke: \"#2470A2\",\n          textcolor: \"#2470A2\",\n          text: \"Ungrouped\",\n          grouping: \"ungrouped\",\n          cursor: \"pointer\"\n        }\n      ];\n\n      var links = [{\n        shape: \"rect\",\n        color: \"#3598DB\",\n        stroke: \"#2470A2\",\n        textcolor: \"#2470A2\",\n        text: \"Network Management\",\n        cursor: \"hand\",\n        url: \"/config/zwave\",\n      }, ];\n\n      this.ranker = ranker;\n      this.edgeVisibility = edgeVisibility;\n      this.grouping = grouping;\n\n      var data = this.listNodes(this.hass);\n\n      var g = new dagreD3.graphlib.Graph({\n        compound: true\n      }).setGraph({});\n      g.graph().rankDir = \"BT\";\n      //g.graph().rankDir = 'RL';\n      g.graph().nodesep = 10;\n\n      g.graph().ranker = ranker;\n\n      // Create the renderer\n      var render = new dagreD3.render();\n\n      var svg = d3.select(this.$.svg);\n      var inner = svg.append(\"g\").attr(\"transform\", \"translate(20,200)scale(1)\");\n\n      g.graph().minlen = 0;\n\n      // Add our custom shape (a house)\n      render.shapes().house = this.renderHouse;\n      render.shapes().battery = this.renderBattery;\n\n      var groups = [];\n\n      var nodes = data[\"nodes\"];\n      // Set the parents to define which nodes belong to which cluster\n\n      // add nodes  to graph\n      for (var i = 0; i < nodes.length; i++) {\n        var node = nodes[i];\n        g.setNode(node.id, node);\n        if (this.grouping !== \"ungrouped\" && node.location != \"\" && node.location != undefined) {\n          g.setNode(node.location, {\n            label: node.location,\n            clusterLabelPos: 'bottom',\n            class: \"group\",\n            entityId: node.entity_id\n          });\n          g.setParent(node.id, node.location);\n        }\n      }\n\n      // add edges to graph\n      for (var i = 0; i < data[\"edges\"].length; i++) {\n        var edge = g.setEdge(\n          data[\"edges\"][i].from,\n          data[\"edges\"][i].to, {\n            label: \"\",\n            arrowhead: \"undirected\",\n            style: data[\"edges\"][i].style,\n            class: data[\"edges\"][i].class,\n            curve: d3.curveBundle.beta(0.2)\n            //curve: d3.curveBasis\n          })\n      }\n\n\n      // Run the renderer. This is what draws the final graph.\n      render(inner, g);\n\n\n      // create battery state gradients\n      for (let layer = 0; layer < legends.length; layer++) {\n        for (let percent = 0; percent <= 100; percent += 10) {\n          var grad = svg.append(\"defs\").append(\"linearGradient\").attr(\"id\", \"fill-\" + (layer + 1) + \"-\" + percent)\n            .attr(\"x1\", \"0%\").attr(\"x2\", \"0%\").attr(\"y1\", \"0%\").attr(\"y2\", \"100%\");\n          grad.append(\"stop\").attr(\"offset\", (100 - percent - 10) + \"%\").style(\"stop-color\", \"white\");\n          grad.append(\"stop\").attr(\"offset\", (100 - percent) + \"%\").style(\"stop-color\", legends[layer].color);\n        }\n      }\n\n      // Add the title element to be used for a tooltip (SVG functionality)\n      inner.selectAll(\"g.node\")\n        .append(\"title\").html(function (d) {\n          return g.node(d).title;\n        });\n\n      inner.selectAll(\"g.node\")\n        .attr(\"layer\", function (d) {\n          return g.node(d).layer;\n        })\n        .attr(\"fill\", function (d) {\n          if (g.node(d).battery_level === 100) {\n            return \"url(#fill-\" + g.node(d).layer + \"-100)\";\n          }\n          if (g.node(d).battery_level !== undefined) {\n            return \"url(#fill-\" + g.node(d).layer + \"-\" + Math.floor(g.node(d).battery_level / 10 % 10) + \"0)\";\n          }\n        });\n\n      inner.selectAll(\"g.edgePath\")\n        .attr(\"layer\", function (d) {\n          return g.edges(d).layer;\n        });\n\n      var that = this;\n      var handleClick = function (d, i, nodeList) { // Add interactivity\n        var nodeId = nodeList[i].id;\n        var node = nodes.find(function(element) {\n\t        return element.id == nodeId;\n\t      });\n        that.fire('hass-more-info', {\n          entityId: node.entity_id\n        });\n      };\n\n      // append handlers\n      svg.selectAll(\".node\")\n        .on(\"mouseover\", this.handleMouseOver)\n        .on(\"mouseout\", this.handleMouseOut)\n        .on(\"click\", handleClick);\n\n\n      this.addLegend(this.$, svg, legends, 5, 20, \"Node Colors\", ranker, this.edgeVisibility, this.grouping);\n      this.addLegend(this.$, svg, layout, 150, 20, \"Tree Layout\", ranker, this.edgeVisibility, this.grouping);\n      this.addLegend(this.$, svg, edgesLegend, 320, 20, \"Neighbors\", ranker, this.edgeVisibility, this.grouping);\n      this.addLegend(this.$, svg, groupingLegend, 510, 20, \"Grouping\", ranker, this.edgeVisibility, this.grouping);\n      this.addLegend(this.$, svg, links, 700, 20, \"Tools\", ranker, this.edgeVisibility, this.grouping);\n\n      this.$.miniSvg.innerHTML = this.$.svg.innerHTML;\n\n      var panZoomGraph = svgPanZoom(this.$.svg);\n\n      this.bindThumbnail(this.$);\n\n    }\n\n    listNodes(hass) {\n      let states = new Array();\n      for (let state in hass.states) {\n        states.push({\n          name: state,\n          entity: hass.states[state]\n        });\n      }\n      let zwaves = states.filter((s) => {\n        return s.name.indexOf(\"zwave.\") == 0 && s.entity.attributes[\"capabilities\"] !== undefined\n      });\n      let result = {\n        \"edges\": [],\n        \"nodes\": []\n      };\n\n      let hubNode = 0;\n      let neighbors = {};\n\n      for (let b in zwaves) {\n        let id = zwaves[b].entity.attributes[\"node_id\"];\n        let node = zwaves[b].entity;\n        if (node.attributes[\"capabilities\"].filter(\n            (s) => {\n              return s == \"primaryController\"\n            }).length > 0) {\n          hubNode = id;\n        }\n        neighbors[id] = node.attributes['neighbors'];\n\n        let entities = states.filter((s) => {\n          return ((s.name.indexOf(\"zwave.\") == -1) &&\n            (s.entity.attributes[\"node_id\"] == id))\n        });\n        let batlev = node.attributes.battery_level;\n\n        // create node\n        let entity = {\n          \"id\": id,\n          \"entity_id\": node.entity_id,\n          \"label\": \"[\" + id + (node.attributes[\"is_zwave_plus\"] ? \"+\" : \"\") + \"] \" + (node.attributes[\n            \"friendly_name\"] + \" (\" + node.attributes[\"averageResponseRTT\"] + \"ms)\").replace(/ /g, \"\\n\"),\n          \"class\": \"unset layer-7\",\n          \"layer\": 7,\n          \"rx\": \"6\",\n          \"ry\": \"6\",\n          \"neighbors\": neighbors[id],\n          \"battery_level\": batlev,\n          \"mains\": batlev,\n          \"location\": node.attributes[\"location\"],\n          \"failed\": node.attributes[\"is_failed\"],\n          \"title\": \"<b>\" + node.attributes[\"node_name\"] + \"</b>\\n\" +\n            \"\\n Entity ID: \" + node.entity_id +\n            \"\\n Node: \" + id + (node.attributes[\"is_zwave_plus\"] ? \"+\" : \"\") +\n            \"\\n Product Name: \" + node.attributes[\"product_name\"] +\n            \"\\n Average Request RTT: \" + node.attributes[\"averageResponseRTT\"] + \"ms\" +\n            \"\\n Power source: \" + (batlev != undefined ? \"battery (\" + batlev + \"%)\" : \"mains\") +\n            \"\\n \" + entities.length + \" entities\" +\n            \"\\n Neighbors: \" + node.attributes['neighbors'],\n          \"forwards\": (node.attributes.is_awake && node.attributes.is_ready && !node.attributes.is_failed &&\n            node.attributes.capabilities.includes(\"listening\")),\n        };\n\n        entity[\"shape\"] = id === hubNode ? \"house\" : (entity.forwards || batlev === undefined ? \"rect\" : \"battery\");\n\n        if (node.attributes[\"is_failed\"]) {\n          entity.label = \"FAILED: \" + entity.label;\n          entity[\"font.multi\"] = true;\n          entity[\"title\"] = \"<b>FAILED: </b>\" + entity.title;\n          entity[\"group\"] = \"Failed\";\n          entity[\"failed\"] = true;\n          entity[\"class\"] = \"Error\";\n        }\n\n        if (hubNode == id) {\n          entity.label = \"ZWave Hub\";\n          entity.borderWidth = 2;\n          entity.fixed = true;\n        }\n\n        result.nodes.push(entity);\n      }\n\n\n      if (hubNode > 0) {\n        let layer = 0;\n        let previousRow = [hubNode];\n        let mappedNodes = [hubNode];\n        let layers = [];\n\n        while (previousRow.length > 0) {\n          layer = layer + 1;\n          let nextRow = [];\n          let layerMembers = []\n          layers[layer] = layerMembers;\n\n          for (let target in previousRow) {\n\n            // assign node to layer\n            result.nodes.filter((n) => {\n                return ((n.id == previousRow[target]) && (n.group = \"unset\"))\n              })\n              .every((d) => {\n                d.class = \"layer-\" + layer;\n                d.layer = layer;\n                if (d.failed) {\n                  d.class = d.class + \" Error\"\n                }\n\n                if (d.neighbors !== undefined) {\n                  d.neighbors.forEach((n) => {\n                    d.class = d.class + \" neighbor-\" + n\n                  });\n                }\n              })\n\n            if (result.nodes.filter((n) => {\n                return ((n.id == previousRow[target]) && (n.forwards))\n              }).length > 0) {\n              let row = neighbors[previousRow[target]];\n              for (let node in row) {\n                if (neighbors[row[node]] !== undefined) {\n                  if (!mappedNodes.includes(row[node])) {\n                    layerMembers.push(row[node]);\n                    result.edges.push({\n                      \"from\": row[node],\n                      \"to\": previousRow[target],\n                      \"style\": \"\",\n                      \"class\": \"layer-\" + (layer + 1) + \" node-\" + row[node] + \" node-\" + previousRow[target],\n                      \"layer\": layer,\n                    });\n                    nextRow.push(row[node]);\n                  } else {\n                    // uncomment to show edges regardless of rows - mess!\n                    if (this.edgeVisibility === \"all\") {\n                      result.edges.push({\n                        \"from\": row[node],\n                        \"to\": previousRow[target],\n                        \"style\": \"stroke-dasharray: 5, 5; fill:transparent; \", //\"stroke: #ddd; stroke-width: 1px; fill:transparent; stroke-dasharray: 5, 5;\",\n                        \"class\": \"layer-\" + (layer + 1) + \" node-\" + row[node] + \" node-\" + previousRow[target]\n                      });\n                    }\n                  }\n                }\n              }\n            }\n          }\n\n          for (let idx in nextRow) {\n            mappedNodes.push(nextRow[idx]);\n          }\n          previousRow = nextRow;\n        }\n      }\n      return result;\n    }\n\n    // Add our custom shape (a house)\n    renderHouse(parent, bbox, node) {\n      var w = bbox.width,\n        h = bbox.height,\n        points = [{\n            x: 0,\n            y: 0\n          },\n          {\n            x: w,\n            y: 0\n          },\n          {\n            x: w,\n            y: -h\n          },\n          {\n            x: w / 2,\n            y: -h * 3 / 2\n          },\n          {\n            x: 0,\n            y: -h\n          }\n        ],\n        shapeSvg = parent.insert(\"polygon\", \":first-child\")\n        .attr(\"points\", points.map(function (d) {\n          return d.x + \",\" + d.y;\n        }).join(\" \"))\n        .attr(\"transform\", \"translate(\" + (-w / 2) + \",\" + (h * 3 / 4) + \")\");\n\n      node.intersect = function (point) {\n        return dagreD3.intersect.polygon(node, points, point);\n      };\n\n      return shapeSvg;\n    };\n\n    renderBattery(parent, bbox, node) {\n      var w = bbox.width,\n        h = bbox.height,\n        points = [{\n            x: 0,\n            y: 0\n          }, // bottom left\n          {\n            x: w,\n            y: 0\n          }, // bottom line\n          {\n            x: w,\n            y: -h\n          }, // right line\n          {\n            x: w * 7 / 10,\n            y: -h\n          }, // top right\n          {\n            x: w * 7 / 10,\n            y: -h * 20 / 17\n          }, // battery tip - right\n          {\n            x: w * 3 / 10,\n            y: -h * 20 / 17\n          }, // battery tip\n          {\n            x: w * 3 / 10,\n            y: -h\n          }, // battery tip - left\n          {\n            x: 0,\n            y: -h\n          }, // top left\n          {\n            x: 0,\n            y: -h\n          } // left line\n        ],\n\n        shapeSvg = parent.insert(\"polygon\", \":first-child\")\n        .attr(\"points\", points.map(function (d) {\n          return d.x + \",\" + d.y;\n        }).join(\" \"))\n        .attr(\"transform\", \"translate(\" + (-w / 2) + \",\" + (h * 2 / 4) + \")\");\n\n      node.intersect = function (point) {\n        return dagreD3.intersect.polygon(node, points, point);\n      };\n\n      return shapeSvg;\n    };\n\n    handleMouseOver(d, i, nodeList) { // Add interactivity\n\n      var svg;\n      for (let nodeNum in nodeList) {\n        let node = nodeList[nodeNum];\n        if (node.style !== undefined && node.id !== d) {\n          node.style.opacity = 0.1;\n          svg = node.ownerSVGElement\n        }\n      }\n\n      // Use D3 to select element, change color and size\n      svg.querySelectorAll(\".edgePath\")\n        .forEach(function (node) {\n          node.style.opacity = \"0.3\"\n        });\n\n      var edges = svg.querySelectorAll(\".edgePath.node-\" + d);\n      for (let i = 0; i < edges.length; i++) {\n        edges[i].style.opacity = \"1\"\n        edges[i].style['stroke-width'] = \"2\";\n      };\n\n      var neighbors = svg.querySelectorAll(\".node.neighbor-\" + d);\n      for (let i = 0; i < neighbors.length; i++) {\n        neighbors[i].style.opacity = \"0.7\"\n      };\n    };\n\n    handleMouseOut(d, i, nodeList) { // Add interactivity\n\n      var svg;\n      for (let nodeNum in nodeList) {\n        let node = nodeList[nodeNum];\n        if (node.style !== undefined && node.id !== d) {\n          node.style.opacity = 1;\n          svg = node.ownerSVGElement\n        }\n      }\n\n      // Use D3 to select element, change color and size\n      svg.querySelectorAll(\".edgePath\")\n        .forEach(function (node) {\n          node.style.opacity = \"1\";\n          node.style['stroke-width'] = \"1\";\n        });\n    };\n\n\n\n    addLegend($, svg, legends, startX, startY, title, ranker, edges, grouping) {\n\n      var that = this;\n\n      var handleClick = function (d, i, nodeList) {\n\n        if (nodeList[0].dataset.url !== undefined) {\n          window.location = nodeList[0].dataset.url;\n        }\n\n        var ranker = nodeList[0].dataset.ranker || that.ranker;\n        var edges = nodeList[0].dataset.edges || that.edgeVisibility;\n        var grouping = nodeList[0].dataset.grouping || that.grouping;\n\n        svg.selectAll(\"*\").remove();\n\n        // Destroy svgpanzoom\n        svgPanZoom($.svg).destroy();\n        svgPanZoom($.miniSvg).destroy();\n\n        that.paintGraph(ranker, edges, grouping);\n      }\n\n      var shape = svg.append('text')\n        .attr('x', startX)\n        .attr('y', startY + 5)\n        .text(title)\n        .attr('width', 10)\n        .attr('height', 10)\n        .style(\"font-weight\", \"800\");\n\n      for (var counter = 0; counter < legends.length; counter++) {\n\n        var isLink = legends[counter].url !== undefined;\n\n        if (isLink) {\n          var text = svg.append('text')\n            .attr(\"x\", startX)\n            .attr(\"y\", startY + 10 + 20 * (counter + 1))\n            .attr(\"class\", \"textselected\")\n            .attr('data-url', legends[counter].url)\n            .text(legends[counter].text)\n            .style(\"text-anchor\", \"start\")\n            .style(\"fill\", legends[counter].textcolor)\n            .style(\"font-size\", 15)\n            .style(\"text-decoration\", \"underline\")\n            .style(\"cursor\", legends[counter].cursor)\n            .on(\"click\", handleClick);\n        } else {\n\n          var shape = svg.append(legends[counter].shape)\n            .attr('x', startX)\n            .attr('y', startY + 20 * (counter + 1))\n            .attr('width', 10)\n            .attr('height', 10)\n            .style(\"stroke\", legends[counter].stroke)\n            .style(\"fill\", legends[counter].color)\n            .style(\"cursor\", legends[counter].cursor);\n\n          var text = svg.append('text')\n            .attr(\"x\", startX + 20)\n            .attr(\"y\", startY + 10 + 20 * (counter + 1))\n            .attr(\"class\", \"textselected\")\n            .text(legends[counter].text)\n            .style(\"text-anchor\", \"start\")\n            .style(\"fill\", legends[counter].textcolor)\n            .style(\"font-size\", 15)\n            .style(\"cursor\", legends[counter].cursor);\n\n          var dataLabel, dataValue, dataState;\n\n          if (legends[counter].ranker) {\n            dataLabel = 'data-ranker';\n            dataValue = legends[counter].ranker;\n            dataState = ranker;\n          }\n\n          if (legends[counter].edges) {\n            dataLabel = 'data-edges';\n            dataValue = legends[counter].edges;\n            dataState = edges;\n          }\n\n          if (legends[counter].grouping) {\n            dataLabel = 'data-grouping';\n            dataValue = legends[counter].grouping;\n            dataState = grouping;\n          }\n\n          if (dataLabel !== undefined) {\n            shape.attr(dataLabel, dataValue)\n              .on(\"click\", handleClick);\n            text.attr(dataLabel, dataValue)\n              .on(\"click\", handleClick);\n              if (dataValue !== dataState) {\n                shape.style(\"fill\", \"transparent\");\n              }\n          }\n        }\n      }\n    }\n\n    bindThumbnail($) {\n\n      var beforePanMain = function (oldPan, newPan) {\n        var stopHorizontal = false,\n          stopVertical = false,\n          gutterWidth = 100,\n          gutterHeight = 100\n          // Computed variables\n          ,\n          sizes = this.getSizes(),\n          leftLimit = -((sizes.viewBox.x + sizes.viewBox.width) * sizes.realZoom) + gutterWidth,\n          rightLimit = sizes.width - gutterWidth - (sizes.viewBox.x * sizes.realZoom),\n          topLimit = -((sizes.viewBox.y + sizes.viewBox.height) * sizes.realZoom) + gutterHeight,\n          bottomLimit = sizes.height - gutterHeight - (sizes.viewBox.y * sizes.realZoom);\n        customPan = {};\n        customPan.x = Math.max(leftLimit, Math.min(rightLimit, newPan.x));\n        customPan.y = Math.max(topLimit, Math.min(bottomLimit, newPan.y));\n        return customPan;\n      };\n\n      var main = svgPanZoom($.svg, {\n        zoomEnabled: true,\n        controlIconsEnabled: true,\n        fit: true,\n        center: true,\n        beforePan: beforePanMain\n      });\n\n      var thumb = svgPanZoom($.miniSvg, {\n        zoomEnabled: false,\n        panEnabled: false,\n        controlIconsEnabled: false,\n        dblClickZoomEnabled: false,\n        preventMouseEventsDefault: true,\n      });\n\n      var resizeTimer;\n      var interval = 300; //msec\n      window.addEventListener('resize', function (event) {\n        if (resizeTimer !== false) {\n          clearTimeout(resizeTimer);\n        }\n        resizeTimer = setTimeout(function () {\n          main.resize();\n          thumb.resize();\n        }, interval);\n      });\n\n      main.setOnZoom(function (level) {\n        thumb.updateThumbScope();\n      });\n\n      main.setOnPan(function (point) {\n        thumb.updateThumbScope();\n      });\n\n      var _updateThumbScope = function ($, main, thumb, scope, line1, line2) {\n        var mainPanX = main.getPan().x,\n          mainPanY = main.getPan().y,\n          mainWidth = main.getSizes().width,\n          mainHeight = main.getSizes().height,\n          mainZoom = main.getSizes().realZoom,\n          thumbPanX = thumb.getPan().x,\n          thumbPanY = thumb.getPan().y,\n          thumbZoom = thumb.getSizes().realZoom;\n\n        if (mainZoom === 0) {\n          return;\n        }\n\n        var thumByMainZoomRatio = thumbZoom / mainZoom;\n\n        var scopeX = thumbPanX - mainPanX * thumByMainZoomRatio;\n        var scopeY = thumbPanY - mainPanY * thumByMainZoomRatio;\n        var scopeWidth = mainWidth * thumByMainZoomRatio;\n        var scopeHeight = mainHeight * thumByMainZoomRatio;\n\n        $.scope.setAttribute(\"x\", scopeX + 1);\n        $.scope.setAttribute(\"y\", scopeY + 1);\n        $.scope.setAttribute(\"width\", scopeWidth - 2);\n        $.scope.setAttribute(\"height\", scopeHeight - 2);\n\n      };\n\n      thumb.updateThumbScope = function () {\n        var scope = $.scope;\n        var line1 = $.line1;\n        var line2 = $.line2;\n        _updateThumbScope($, main, thumb, scope, line1, line2);\n      }\n      thumb.updateThumbScope($);\n\n      var _updateMainViewPan = function (clientX, clientY, scopeContainer, main, thumb) {\n        var dim = scopeContainer.getBoundingClientRect(),\n          mainWidth = main.getSizes().width,\n          mainHeight = main.getSizes().height,\n          mainZoom = main.getSizes().realZoom,\n          thumbWidth = thumb.getSizes().width,\n          thumbHeight = thumb.getSizes().height,\n          thumbZoom = thumb.getSizes().realZoom;\n\n        var thumbPanX = clientX - dim.left - thumbWidth / 2;\n        var thumbPanY = clientY - dim.top - thumbHeight / 2;\n        var mainPanX = -thumbPanX * mainZoom / thumbZoom;\n        var mainPanY = -thumbPanY * mainZoom / thumbZoom;\n        main.pan({\n          x: mainPanX,\n          y: mainPanY\n        });\n      };\n\n      var updateMainViewPan = function (evt) {\n        if (evt.which == 0 && evt.button == 0) {\n          return false;\n        }\n        _updateMainViewPan(evt.clientX, evt.clientY, scopeContainer, main, thumb);\n      }\n\n      var scopeContainer = $.scopeContainer;\n      scopeContainer.addEventListener('click', function (evt) {\n        updateMainViewPan(evt);\n      });\n\n      scopeContainer.addEventListener('mousemove', function (evt) {\n        updateMainViewPan(evt);\n      });\n    }\n\n    fire(type, detail, options) {\n      options = options || {};\n      detail = (detail === null || detail === undefined) ? {} : detail;\n      const event = new Event(type, {\n        bubbles: options.bubbles === undefined ? true : options.bubbles,\n        cancelable: Boolean(options.cancelable),\n        composed: options.composed === undefined ? true : options.composed\n      });\n      event.detail = detail;\n      const node = options.node || this;\n      node.dispatchEvent(event);\n      return event;\n    }\n\n  }\n  customElements.define(HaPanelZWave.is, HaPanelZWave);\n</script>\n"
  },
  {
    "path": "home-assistant/scenes/tv.yaml",
    "content": "- name: Watching tv\n  entities:\n    light.tv_stand: on\n    light.main: off\n    light.dinner_table: off\n    light.work_desk: off\n    light.work_ambient_desk: off\n    cover.living_room: closed\n    media_player.tv: on"
  },
  {
    "path": "home-assistant/scenes/work.yaml",
    "content": "- name: Work\n  entities:\n    light.tv_stand: off\n    light.main: off\n    light.dinner_table: off\n    light.work_desk: on\n    light.work_ambient_desk: off\n    switch.macmini: on\n    cover.living_room: closed\n    media_player.tv: on"
  },
  {
    "path": "home-assistant/scripts/grocy.yaml",
    "content": "consume_pepsi:\r\n  alias: 'Consume pepsi'\r\n  sequence:\r\n    - service: grocy.consume_product\r\n      data:\r\n        product_id: 65\r\n        transaction_type: CONSUME\r\n        amount: 1\r\n    - service: notify.alexa_media_kitchen\r\n      data:\r\n        message: 'Congratulations! You have consumed one pepsi'\r\n        data:\r\n          type: announce\r\n          method: all"
  },
  {
    "path": "home-assistant/scripts/switch_off_mac_mini.sh",
    "content": "#!/usr/bin/env bash\n\nssh-keyscan -H 192.168.1.91 >> ~/.ssh/known_hosts\nssh -i /config/.storage/id_rsa macbury@192.168.1.91 'pmset sleepnow'"
  },
  {
    "path": "home-assistant/scripts/vacuum.yaml",
    "content": "find_vacuum:\n  alias: 'Find Vacuum'\n  sequence:\n    - service: vacuum.locate\n      entity_id:  vacuum.main_vacuum\n\nclean_bathroom:\n  alias: 'Clean bathroom'\n  sequence:\n    - service: vacuum.set_fan_speed\n      data:\n        entity_id:  vacuum.main_vacuum\n        fan_speed: Balanced\n    - service: vacuum.send_command\n      data:\n        entity_id: vacuum.main_vacuum\n        command: app_zoned_clean\n        params:\n          - [21491, 23981, 23433, 26272, 3]\n\nclean_kitchen:\n  alias: 'Clean kitchen'\n  sequence:\n    - service: vacuum.set_fan_speed\n      data:\n        entity_id:  vacuum.main_vacuum\n        fan_speed: Balanced\n    - service: vacuum.send_command\n      data:\n        entity_id: vacuum.main_vacuum\n        command: app_zoned_clean\n        params: \n          - [24927, 25102, 26621, 25874, 1]\n          - [23433, 24031, 27044, 25351, 1]\n          - [23657, 25002, 24579, 26147, 1]\n          - [23508, 24205, 26720, 24902, 2]\n\nclean_corridor:\n  alias: 'Clean corridor'\n  sequence:\n    - service: vacuum.set_fan_speed\n      data:\n        entity_id:  vacuum.main_vacuum\n        fan_speed: Balanced\n    - service: vacuum.send_command\n      data:\n        entity_id: vacuum.main_vacuum\n        command: app_zoned_clean\n        params:\n          - [19947, 25351, 21366, 27442, 3]\n          - [21142, 25973, 24703, 27492, 1]\n          - [22711, 26670, 24579, 27268, 2]\n\nclean_living_room:\n  alias: 'Clean living room'\n  sequence:\n    - service: vacuum.set_fan_speed\n      data:\n        entity_id: vacuum.main_vacuum\n        fan_speed: Balanced\n    - service: vacuum.send_command\n      data:\n        entity_id: vacuum.main_vacuum\n        command: app_zoned_clean\n        params:\n          - [21715, 27119, 22786, 28638, 1]\n          - [22188, 27965, 23856, 31053, 1]\n          - [21117, 30879, 24753, 33021, 1]\n          - [23682, 30157, 25126, 31178, 1]\n          - [24653, 29086, 25276, 30655, 1]\n          - [25126, 29559, 27492, 31252, 1]\n\nclean_bedroom:\n  alias: 'Clean bedroom'\n  sequence:\n    - service: vacuum.set_fan_speed\n      data:\n        entity_id:  vacuum.main_vacuum\n        fan_speed: Balanced\n    - service: vacuum.send_command\n      data:\n        entity_id:  vacuum.main_vacuum\n        command: app_zoned_clean\n        params:\n          - [24230, 25824, 27691, 29011, 3]\n\nstop_cleaning:\n  sequence:\n    - service: vacuum.return_to_base\n      entity_id:  vacuum.main_vacuum\n\nstart_cleaning:\n  sequence:\n    - service: vacuum.set_fan_speed\n      data:\n        entity_id:  vacuum.main_vacuum\n        fan_speed: Balanced\n    - service: vacuum.start\n      entity_id:  vacuum.main_vacuum\n"
  },
  {
    "path": "home-assistant/sensors/air_purifier.yaml",
    "content": "- platform: template\n  sensors:\n    main_cover_position:\n      unit_of_measurement: '%'\n      value_template: '{{ states.cover.living_room.attributes.current_position }}'\n\n"
  },
  {
    "path": "home-assistant/sensors/currency.yaml",
    "content": "- platform: currencylayer\n  api_key: !env_var HOME_ASSISTANT_CURRENCY_LAYER\n  base: PLN\n  quote:\n    - EUR\n    - USD\n    - GBP\n    - XBT\n"
  },
  {
    "path": "home-assistant/sensors/deluge.yaml",
    "content": "# - platform: deluge\r\n#   host: 0.0.0.0\r\n#   username: deluge\r\n#   password: ''\r\n#   monitored_variables:\r\n#     - current_status"
  },
  {
    "path": "home-assistant/sensors/fail2ban.yaml",
    "content": "- platform: fail2ban\n  jails:\n    - nginx-noscript\n    - nginx-http-auth\n    - nginx-badbots\n    - nginx-forbidden\n    - ssh\n    - ha\n  file_path: /fail2ban/fail2ban.log"
  },
  {
    "path": "home-assistant/sensors/food.yaml",
    "content": "- platform: mqtt\n  state_topic: \"poland/zboza/price\"\n  name: 'Cena Zboża'\n  icon: 'mdi:barley'\n  unit_of_measurement: 'zł netto/tonę'\n\n- platform: mqtt\n  state_topic: \"poland/wieprzowina/price\"\n  name: 'Cena Wieprzowina'\n  icon: 'mdi:pig'\n  unit_of_measurement: 'zł/kg'\n\n- platform: mqtt\n  state_topic: \"poland/wolowina/price\"\n  name: 'Cena Wołowina'\n  icon: 'mdi:cow'\n  unit_of_measurement: 'zł/kg'\n\n"
  },
  {
    "path": "home-assistant/sensors/fuel.yaml",
    "content": ""
  },
  {
    "path": "home-assistant/sensors/kkm.yaml",
    "content": "- platform: kkm\n  name: Arek Karta Miejsca\n  identity: !env_var HOME_ASSISTANT_KKM_IDENDITY\n  city_card: !env_var HOME_ASSISTANT_KKM_CITY_CARD\n"
  },
  {
    "path": "home-assistant/sensors/money.yaml",
    "content": " \n- platform: template\n  sensors:\n    all_portfolio_value:\n      friendly_name: \"Całkowity wynik\"\n      unit_of_measurement: 'zł'\n      value_template: >- \n        {{ float(states.sensor.obligacje.state) + float(states.sensor.portfolio_market_value.state) }}\n"
  },
  {
    "path": "home-assistant/sensors/places.yaml",
    "content": "- platform: google_geocode\n  name: geocode_arek\n  origin: device_tracker.arek\n  options: street_number, street, city\n  display_zone: hide\n  api_key: !env_var HOME_ASSISTANT_GOOGLE_CODE_API_KEY \n- platform: google_geocode\n  name: geocode_ola\n  origin: device_tracker.ola\n  options: street_number, street, city\n  display_zone: hide\n  api_key: !env_var HOME_ASSISTANT_GOOGLE_CODE_API_KEY \n\n- platform: template\n  sensors:\n    city_arek:\n      unit_of_measurement: 'city'\n      value_template: >-\n        {% if state_attr('sensor.geocode_arek', 'City') == None %}\n          Kraków\n        {% else %}\n          {{ state_attr('sensor.geocode_arek', 'City') }}\n        {% endif %}\n    city_ola:\n      unit_of_measurement: 'city'\n      value_template: >-\n        {% if state_attr('sensor.geocode_ola', 'City') == None %}\n          Kraków\n        {% else %}\n          {{ state_attr('sensor.geocode_ola', 'City') }}\n        {% endif %}"
  },
  {
    "path": "home-assistant/sensors/power.yaml",
    "content": "- platform: integration\n  source: sensor.power_consumption\n  name: energy_spent\n  unit_prefix: k\n  round: 4\n\n- platform: integration\n  source: sensor.cool_as_ice_energy_current\n  name: \"Air condition energy used\"\n  unit_prefix: k\n  round: 4\n"
  },
  {
    "path": "home-assistant/sensors/qnap.yaml",
    "content": "# - platform: qnap\n#   host: 192.168.1.181\n#   username: !env_var HOME_ASSISTANT_QNAP_USERNAME\n#   password: !env_var HOME_ASSISTANT_QNAP_PASSWORD\n#   verify_ssl: false # Shame\n#   monitored_conditions:\n#     - system_temp\n#     - status\n#     - cpu_usage\n#     - cpu_temp\n#     - memory_percent_used\n#     - network_tx\n#     - network_rx"
  },
  {
    "path": "home-assistant/sensors/scale.yaml",
    "content": "- platform: mqtt\n  name: \"Arek Weight\"\n  state_topic: \"home/miscale/Arek/weight\"\n  value_template: \"{{ value_json['Weight'] }}\"\n  unit_of_measurement: \"kg\"\n  json_attributes_topic: \"home/miscale/Arek/weight\"\n  icon: mdi:scale-bathroom\n\n- platform: mqtt\n  name: \"Arek BMI\"\n  state_topic: \"home/miscale/Arek/weight\"\n  value_template: \"{{ value_json['BMI'] }}\"\n  icon: mdi:human-pregnant\n\n- platform: mqtt\n  name: \"Ola Weight\"\n  state_topic: \"home/miscale/Ola/weight\"\n  value_template: \"{{ value_json['Weight'] }}\"\n  unit_of_measurement: \"kg\"\n  json_attributes_topic: \"home/miscale/Ola/weight\"\n  icon: mdi:scale-bathroom\n\n- platform: mqtt\n  name: \"Ola BMI\"\n  state_topic: \"home/miscale/Ola/weight\"\n  value_template: \"{{ value_json['BMI'] }}\"\n  icon: mdi:human-pregnant\n"
  },
  {
    "path": "home-assistant/sensors/sonarr.yaml",
    "content": ""
  },
  {
    "path": "home-assistant/sensors/space.yaml",
    "content": "- platform: rest\n  name: Starman\n  json_attributes:\n    - earth_distance_km\n  value_template: '{{ value_json[\"speed_kph\"] }}'\n  unit_of_measurement: \"km/h\"\n  resource: 'https://api.spacexdata.com/v2/info/roadster'\n\n- platform: rest\n  name: SpaceX\n  json_attributes:\n    - mission_name\n    - launch_site\n    - rocket\n  value_template: '{{ value_json[\"launch_date_unix\"] }}'\n  resource: 'https://api.spacexdata.com/v2/launches/next'\n\n- platform: template\n  sensors:\n    starman_speed:\n      friendly_name: 'Starman prędkosć'\n      value_template: '{{ states.sensor.starman.state | round(0) }}'\n      unit_of_measurement: 'km/h'\n    starman_earth_distance:\n      friendly_name: 'Starman odległość od ziemi'\n      value_template: '{{ (states.sensor.starman.attributes[\"earth_distance_km\"] | multiply(0.000001)) | round(2) }}'\n      unit_of_measurement: 'km x10⁶'\n    spacex_next_launch_day:\n      friendly_name: 'Następny start'\n      value_template: '{{ states.sensor.spacex.state | int | timestamp_custom(\"%d.%m.%Y\")}}'\n\n- platform: launch_library"
  },
  {
    "path": "home-assistant/sensors/spotify.yaml",
    "content": "# - platform: spotify_cover_sensor\n#   cache_path: '/config/spotify-token-cache.json'"
  },
  {
    "path": "home-assistant/sensors/statistics.yaml",
    "content": "- platform: min_max\n  name: mean_aqi\n  type: mean\n  round_digits: 0\n  entity_ids:\n    - sensor.living_room_aqi\n    - sensor.bedroom_aqi\n\n\n- platform: min_max\n  name: mean_humidity\n  type: mean\n  entity_ids:\n    - sensor.living_room_humidity\n    - sensor.bedroom_humidity\n    - sensor.bathroom_humidity\n    - sensor.corridor_humidity\n    - sensor.kitchen_humidity\n    - sensor.living_room_humidifier_humidity\n\n- platform: min_max\n  name: Mean Living Room Humidity\n  type: mean\n  entity_ids:\n    - sensor.living_room_humidity\n    - sensor.living_room_humidifier_humidity\n    - sensor.jakosc_powietrza_humidity\n- platform: min_max\n  name: Mean Living Room Temperature\n  type: mean\n  entity_ids:\n    - sensor.living_room_humidifier_temperature\n    - sensor.living_room_temperature\n    - sensor.cool_as_ice_room_temperature\n    - sensor.living_room_thermostat_air_temperature_2\n\n- platform: min_max\n  name: mean_temperature\n  type: mean\n  entity_ids:\n    - sensor.living_room_temperature\n    - sensor.bathroom_temperature\n    - sensor.bedroom_temperature\n    - sensor.corridor_temperature\n    - sensor.kitchen_temperature\n    - sensor.cool_as_ice_room_temperature\n    - sensor.living_room_thermostat_air_temperature_2\n    - sensor.bedroom_thermostat_air_temperature_2\n- platform: min_max\n  name: mean_pressure\n  type: mean\n  entity_ids:\n    - sensor.bathroom_pressure\n    - sensor.corridor_pressure\n    - sensor.kitchen_pressure\n\n- platform: statistics\n  entity_id: sensor.window_luminance\n  precision: 0\n  sampling_size: 20\n  max_age:\n    minutes: 45\n  name: stat_window_luminance\n"
  },
  {
    "path": "home-assistant/sensors/system.yaml",
    "content": "- platform: uptime\n"
  },
  {
    "path": "home-assistant/sensors/time.yaml",
    "content": "- platform: time_date\n  display_options:\n    - 'time'\n    - 'date'\n    - 'date_time'\n    - 'time_date'\n    - 'time_utc'\n    - 'beat'"
  },
  {
    "path": "home-assistant/sensors/trackers.yaml",
    "content": "- platform: template\n  sensors:\n    arek_last_update:\n      value_template: '{{ states.device_tracker.arek.attributes.last_seen }}'\n    ola_last_update:\n      value_template: '{{ states.device_tracker.arek.attributes.last_seen }}'"
  },
  {
    "path": "home-assistant/sensors/transit.yaml",
    "content": "- platform: mmpk\n  name: back_from_work_transit\n  stop_id: 130\n  direction: 'Wzgórza K.'\n\n- platform: mmpk\n  name: to_work_transit\n  stop_id: 2685\n  direction: 'Bronowice Małe'"
  },
  {
    "path": "home-assistant/sensors/vacuum.yaml",
    "content": "- platform: template\n  sensors:\n    vacuum_status:\n      friendly_name: \"Vacuum - Status\"\n      value_template: \"Status: {{ states.vacuum.main_vacuum.attributes.status }}\"\n    vacuum_battery:\n      friendly_name: \"Vacuum - Battery\"\n      value_template: \"Battery: {{ states.vacuum.main_vacuum.attributes.battery_level }}\"\n      device_class: battery\n      unit_of_measurement: '%'"
  },
  {
    "path": "home-assistant/sensors/weather.yaml",
    "content": "- platform: moon\n\n- platform: season\n  type: astronomical\n\n\n- platform: rest\n  name: Nowa Huta AQI\n  unit_of_measurement: AQI\n  resource: https://api.waqi.info/api/feed/@3403/obs.en.json\n  force_update: true\n  value_template: '{{ value_json.rxs.obs[0].msg.aqi }}'\n\n- platform: darksky\n  api_key: !env_var HOME_ASSISTANT_DARKSKY_API_KEY\n  monitored_conditions:\n    - temperature\n    - precip_probability\n    - apparent_temperature\n    - wind_speed\n    - wind_gust\n    - humidity\n    - pressure\n    - ozone\n    - uv_index\n    - nearest_storm_distance\n\n- platform: command_line\n  name: Vistula Water Level\n  command: curl --silent \"http://pogodynka.pl/hydro/wisla/\" | xmllint --html --xpath \"/html/body/div[2]/div[1]/div[2]/div[2]/div[2]/div[2]/table/tbody/tr[4]/td[6]\" - 2>/dev/null | tr -d 'a-z<>' | tr '/' '\\n'\n  unit_of_measurement: cm\n  scan_interval: 600\n  value_template: '{{ value.replace(\",\", \".\") | float }}'\n\n- platform: command_line\n  name: Vistula Alert Level\n  command: curl --silent \"http://pogodynka.pl/hydro/wisla/\" | xmllint --html --xpath \"/html/body/div[2]/div[1]/div[2]/div[2]/div[2]/div[2]/table/tbody/tr[4]/td[4]\" - 2>/dev/null | tr -d 'a-z<>' | tr '/' '\\n'\n  unit_of_measurement: cm\n  scan_interval: 600\n  value_template: '{{ value.replace(\",\", \".\") | float }}'\n\n\n- platform: it_will_rain\n  name: It will rain\n  entity_id: weather.dark_sky\n"
  },
  {
    "path": "home-assistant/sensors/work.yaml",
    "content": "- platform: template\n  sensors:\n    ordered_food:\n      value_template: '{{ states.sensor.arek_jedzenie.attributes.meal }}'\n\n"
  },
  {
    "path": "home-assistant/themes/caule-themes-pack-1/caule-themes-pack-1.yaml",
    "content": "#      ######      ###     ##     ##  ##        ######## \n#     ##    ##    ## ##    ##     ##  ##        ##       \n#     ##         ##   ##   ##     ##  ##        ##       \n#     ##        ##     ##  ##     ##  ##        ######   \n#     ##        #########  ##     ##  ##        ##       \n#     ##    ##  ##     ##  ##     ##  ##        ##       \n#      ######   ##     ##   #######   ########  ######## \n#\n#     ########  ##     ##  ########  ##     ##  ########   ######      \n#        ##     ##     ##  ##        ###   ###  ##        ##    ##  \n#        ##     ##     ##  ##        #### ####  ##        ##           \n#        ##     #########  ######    ## ### ##  ######     ######     \n#        ##     ##     ##  ##        ##     ##  ##              ##    \n#        ##     ##     ##  ##        ##     ##  ##        ##    ##  \n#        ##     ##     ##  ########  ##     ##  ########   ######   \n#\n#     ########      ###      ######   ##    ##       ##          #######  \n#     ##     ##    ## ##    ##    ##  ##   ##      ####         ##     ## \n#     ##     ##   ##   ##   ##        ##  ##         ##                ## \n#     ########   ##     ##  ##        #####          ##          #######  \n#     ##         #########  ##        ##  ##         ##                ## \n#     ##         ##     ##  ##    ##  ##   ##        ##    ###  ##     ## \n#     ##         ##     ##   ######   ##    ##     ######  ###   #######  \n#\n#\n#     Created by Ricardo Correia for the Home Assistant Brasil community\n#     There are 10 Main colors, totaling 40 different themes!\n#     Release 1.3\n#\n#     I want to ask only 2 things for those who benefit from these themes:\n#\n#     1) Join the HABR community on Discord: habr.ml\n#     2) Follow my creative studio on instagram: caulecriativo.com\n#\n#     ricardo.art.br\n#     github.com/orickcorreia\n#\n#     Make good use of the themes =)\n#\n#\n#     - Caule Black Rose\n#     - Caule Black Purple\n#     - Caule Black Blue \n#     - Caule Black Aqua\n#     - Caule Black Green\n#     - Caule Black Yellow\n#     - Caule Black Orange\n#     - Caule Black Coral\n#     - Caule Black Pink\n#     - Caule Black Gray\n#\n#     - Caule Dark Rose\n#     - Caule Dark Purple\n#     - Caule Dark Blue \n#     - Caule Dark Aqua\n#     - Caule Dark Green\n#     - Caule Dark Yellow\n#     - Caule Dark Orange\n#     - Caule Dark Coral\n#     - Caule Dark Pink\n#     - Caule Dark Gray\n#\n#     - Caule Light Rose\n#     - Caule Light Purple\n#     - Caule Light Blue \n#     - Caule Light Aqua\n#     - Caule Light Green\n#     - Caule Light Yellow\n#     - Caule Light Orange\n#     - Caule Light Coral\n#     - Caule Light Pink\n#     - Caule Light Gray\n#\n#     - Caule Black Rose Glass\n#     - Caule Black Purple Glass\n#     - Caule Black Blue Glass \n#     - Caule Black Aqua Glass\n#     - Caule Black Green Glass\n#     - Caule Black Yellow Glass\n#     - Caule Black Orange Glass\n#     - Caule Black Coral Glass\n#     - Caule Black Pink Glass\n#     - Caule Black Gray Glass \n#\n#\n\n\n#                                                                                  \n#    #####   #         ##     ####   #    # \n#    #    #  #        #  #   #    #  #   #  \n#    #####   #       #    #  #       ####   \n#    #    #  #       ######  #       #  #   \n#    #    #  #       #    #  #    #  #   #  \n#    #####   ######  #    #   ####   #    #  \n#                                                                         \n\nCaule Black Rose:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#aa3151\"\n  light-primary-color: \"#b8536d\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#393939\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#191919\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n##########################################\n\n\n\nCaule Black Purple:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#904eab\"\n  light-primary-color: \"#c983e4\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#393939\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#191919\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Black Blue:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#009bb5\"\n  light-primary-color: \"#5ed1eb\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#393939\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#191919\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Black Aqua:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#11ab93\"\n  light-primary-color: \"#62e3c8\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#393939\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#191919\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Black Green:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#6ca049\"\n  light-primary-color: \"#a1d77b\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#393939\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#191919\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Black Yellow:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#d6a245\"\n  light-primary-color: \"#ffd979\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#393939\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#191919\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Black Orange:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#d25f36\"\n  light-primary-color: \"#ff9568\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#393939\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#191919\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Black Coral:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#fa6e5e\"\n  light-primary-color: \"#ffa792\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#393939\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#191919\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Black Pink:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#f36f92\"\n  light-primary-color: \"#ffa8c9\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#393939\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#191919\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Black Gray:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#acacac\"\n  light-primary-color: \"#e2e2e2\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#393939\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#191919\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n#                                                                                                               \n#      ####   #         ##     ####    ####  \n#     #    #  #        #  #   #       #      \n#     #       #       #    #   ####    ####  \n#     #  ###  #       ######       #       # \n#     #    #  #       #    #  #    #  #    # \n#      ####   ######  #    #   ####    ####                                          \n#                                                                                               \n\nCaule Black Rose Glass:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Place the backgrounds in the folder  config/www/images/backgrounds \n  lovelace-background: 'center / cover no-repeat url(\"/hacsfiles/themes/caule-themes-pack-1/rose.jpg\") fixed'\n  # Main colors\n  primary-color: \"#aa3151\"\n  light-primary-color: \"#b8536d\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#5b5b5b\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"rgba(100, 100, 100, 0.15)\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Black Purple Glass:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Place the backgrounds in the folder  config/www/images/backgrounds \n  lovelace-background: 'center / cover no-repeat url(\"/hacsfiles/themes/caule-themes-pack-1/purple.jpg\") fixed'\n  # Main colors\n  primary-color: \"#904eab\"\n  light-primary-color: \"#c983e4\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#5b5b5b\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"rgba(100, 100, 100, 0.15)\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Black Blue Glass:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Place the backgrounds in the folder  config/www/images/backgrounds \n  lovelace-background: 'center / cover no-repeat url(\"/hacsfiles/themes/caule-themes-pack-1/blue.jpg\") fixed'\n  # Main colors\n  primary-color: \"#009bb5\"\n  light-primary-color: \"#5ed1eb\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#5b5b5b\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"rgba(100, 100, 100, 0.15)\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Black Aqua Glass:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Place the backgrounds in the folder  config/www/images/backgrounds \n  lovelace-background: 'center / cover no-repeat url(\"/hacsfiles/themes/caule-themes-pack-1/aqua.jpg\") fixed'\n  # Main colors\n  primary-color: \"#11ab93\"\n  light-primary-color: \"#62e3c8\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#5b5b5b\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"rgba(100, 100, 100, 0.15)\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Black Green Glass:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Place the backgrounds in the folder  config/www/images/backgrounds \n  lovelace-background: 'center / cover no-repeat url(\"/hacsfiles/themes/caule-themes-pack-1/green.jpg\") fixed'\n  # Main colors\n  primary-color: \"#6ca049\"\n  light-primary-color: \"#a1d77b\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#5b5b5b\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"rgba(100, 100, 100, 0.15)\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Black Yellow Glass:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Place the backgrounds in the folder  config/www/images/backgrounds \n  lovelace-background: 'center / cover no-repeat url(\"/hacsfiles/themes/caule-themes-pack-1/yellow.jpg\") fixed'\n  # Main colors\n  primary-color: \"#d6a245\"\n  light-primary-color: \"#ffd979\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#5b5b5b\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"rgba(100, 100, 100, 0.15)\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Black Orange Glass:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Place the backgrounds in the folder  config/www/images/backgrounds \n  lovelace-background: 'center / cover no-repeat url(\"/hacsfiles/themes/caule-themes-pack-1/orange.jpg\") fixed'\n  # Main colors\n  primary-color: \"#d25f36\"\n  light-primary-color: \"#ff9568\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#5b5b5b\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"rgba(100, 100, 100, 0.15)\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Black Coral Glass:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Place the backgrounds in the folder  config/www/images/backgrounds \n  lovelace-background: 'center / cover no-repeat url(\"/hacsfiles/themes/caule-themes-pack-1/coral.jpg\") fixed'\n  # Main colors\n  primary-color: \"#fa6e5e\"\n  light-primary-color: \"#ffa792\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#5b5b5b\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"rgba(100, 100, 100, 0.15)\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Black Pink Glass:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Place the backgrounds in the folder  config/www/images/backgrounds \n  lovelace-background: 'center / cover no-repeat url(\"/hacsfiles/themes/caule-themes-pack-1/pink.jpg\") fixed'\n  # Main colors\n  primary-color: \"#f36f92\"\n  light-primary-color: \"#ffa8c9\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#5b5b5b\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"rgba(100, 100, 100, 0.15)\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Black Gray Glass:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Place the backgrounds in the folder  config/www/images/backgrounds \n  lovelace-background: 'center / cover no-repeat url(\"/hacsfiles/themes/caule-themes-pack-1/gray.jpg\") fixed'\n  # Main colors\n  primary-color: \"#acacac\"\n  light-primary-color: \"#e2e2e2\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#0c0c0c\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#2c2c2c\"\n  disabled-color: \"#5b5b5b\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"rgba(100, 100, 100, 0.15)\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n#                                                                                                         \n#    #       #   ####   #    #  #####  \n#    #       #  #    #  #    #    #     \n#    #       #  #       ######    #   \n#    #       #  #  ###  #    #    #    \n#    #       #  #    #  #    #    #    \n#    ######  #   ####   #    #    #    \n#         \n                                                          \n\nCaule Light Rose:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#aa3151\"\n  light-primary-color: \"#b8536d\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#f2f2f2\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#ababab\"\n  disabled-color: \"#ababab\"\n  # Text colors\n  primary-text-color: \"#7f7f7f\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#ffffff\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: \"#ababab\"\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Light Purple:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#904eab\"\n  light-primary-color: \"#c983e4\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#f2f2f2\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#ababab\"\n  disabled-color: \"#ababab\"\n  # Text colors\n  primary-text-color: \"#7f7f7f\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#ffffff\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: \"#ababab\"\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Light Blue:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#009bb5\"\n  light-primary-color: \"#5ed1eb\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#f2f2f2\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#ababab\"\n  disabled-color: \"#ababab\"\n  # Text colors\n  primary-text-color: \"#7f7f7f\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#ffffff\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: \"#ababab\"\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Light Aqua:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#11ab93\"\n  light-primary-color: \"#62e3c8\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#f2f2f2\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#ababab\"\n  disabled-color: \"#ababab\"\n  # Text colors\n  primary-text-color: \"#7f7f7f\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#ffffff\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: \"#ababab\"\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Light Green:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#6ca049\"\n  light-primary-color: \"#a1d77b\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#f2f2f2\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#ababab\"\n  disabled-color: \"#ababab\"\n  # Text colors\n  primary-text-color: \"#7f7f7f\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#ffffff\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: \"#ababab\"\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Light Yellow:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#d6a245\"\n  light-primary-color: \"#ffd979\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#f2f2f2\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#ababab\"\n  disabled-color: \"#ababab\"\n  # Text colors\n  primary-text-color: \"#7f7f7f\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#ffffff\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: \"#ababab\"\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Light Orange:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#d25f36\"\n  light-primary-color: \"#ff9568\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#f2f2f2\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#ababab\"\n  disabled-color: \"#ababab\"\n  # Text colors\n  primary-text-color: \"#7f7f7f\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#ffffff\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: \"#ababab\"\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Light Coral:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#fa6e5e\"\n  light-primary-color: \"#ffa792\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#f2f2f2\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#ababab\"\n  disabled-color: \"#ababab\"\n  # Text colors\n  primary-text-color: \"#7f7f7f\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#ffffff\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: \"#ababab\"\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Light Pink:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#f36f92\"\n  light-primary-color: \"#ffa8c9\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#f2f2f2\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#ababab\"\n  disabled-color: \"#ababab\"\n  # Text colors\n  primary-text-color: \"#7f7f7f\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#ffffff\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: \"#ababab\"\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Light Gray:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#666666\"\n  light-primary-color: \"#989898\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#f2f2f2\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#ababab\"\n  disabled-color: \"#ababab\"\n  # Text colors\n  primary-text-color: \"#7f7f7f\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#ffffff\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: \"#ababab\"\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n#                             \n#    #####     ##    #####   #    # \n#    #    #   #  #   #    #  #   #  \n#    #    #  #    #  #    #  ####   \n#    #    #  ######  #####   #  #   \n#    #    #  #    #  #   #   #   #  \n#    #####   #    #  #    #  #    # \n#                                    \n                                \n\nCaule Dark Rose:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#aa3151\"\n  light-primary-color: \"#b8536d\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#1D1B1E\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#37373D\"\n  disabled-color: \"#666666\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#2A282D\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Dark Purple:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#904eab\"\n  light-primary-color: \"#c983e4\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#1D1B1E\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#37373D\"\n  disabled-color: \"#666666\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#2A282D\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Dark Blue:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#009bb5\"\n  light-primary-color: \"#5ed1eb\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#1D1B1E\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#37373D\"\n  disabled-color: \"#666666\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#2A282D\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Dark Aqua:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#11ab93\"\n  light-primary-color: \"#62e3c8\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#1D1B1E\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#37373D\"\n  disabled-color: \"#666666\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#2A282D\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Dark Green:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#6ca049\"\n  light-primary-color: \"#a1d77b\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#1D1B1E\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#37373D\"\n  disabled-color: \"#666666\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#2A282D\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Dark Yellow:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#d6a245\"\n  light-primary-color: \"#ffd979\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#1D1B1E\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#37373D\"\n  disabled-color: \"#666666\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#2A282D\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Dark Orange:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#d25f36\"\n  light-primary-color: \"#ff9568\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#1D1B1E\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#37373D\"\n  disabled-color: \"#666666\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#2A282D\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Dark Coral:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#fa6e5e\"\n  light-primary-color: \"#ffa792\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#1D1B1E\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#37373D\"\n  disabled-color: \"#666666\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#2A282D\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Dark Pink:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#f36f92\"\n  light-primary-color: \"#ffa8c9\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#1D1B1E\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#37373D\"\n  disabled-color: \"#666666\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors\n  ha-card-background: \"#2A282D\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)\n\n\n\n##########################################\n\n\n\nCaule Dark Gray:\n\n  # Change the value below 8px to 0px to remove the rounded corners\n  ha-card-border-radius: 8px\n  # Main colors\n  primary-color: \"#acacac\"\n  light-primary-color: \"#e2e2e2\"\n  graph-color: var(--primary-color)\n  primary-background-color: \"#1D1B1E\"\n  secondary-background-color: var(--primary-background-color)\n  divider-color: \"#37373D\"\n  disabled-color: \"#666666\"\n  # Text colors\n  primary-text-color: \"#e5e5e5\"\n  secondary-text-color: var(--disabled-color)\n  text-primary-color: \"#E5E5E5\"\n  disabled-text-color: var(--disabled-color)\n  # Sidebar colors\n  sidebar-icon-color: var(--primary-color)\n  sidebar-text-color: var(--primary-text-color)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: var(--light-primary-color)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Icons colors\n  state-icon-color: var(--disabled-color)\n  state-icon-active-color: var(--primary-color)\n  state-icon-unavailable-color: var(--primary-background-color)\n  # Settins and colors of Mini Media Player\n  mini-media-player-icon-color: var(--primary-color)\n  mini-media-player-accent-color: var(--primary-color)\n  mini-media-player-progress-height: 8px\n  # Papers slider colors\n  paper-slider-knob-color: var(--primary-color)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-container-color: var(--disabled-color)\n  # Labels colors\n  label-badge-background-color: var(--divider-color)\n  label-badge-text-color: var(--primary-text-color)\n  label-badge-red: var(--primary-color)\n  label-badge-blue: var(--light-primary-color)\n  # Cards colors \n  ha-card-background: \"#2A282D\"\n  paper-card-background-color: var(--ha-card-background)\n  paper-listbox-background-color: var(--primary-background-color)\n  # Toggle button colors\n  paper-toggle-button-checked-button-color: var(--primary-color)\n  paper-toggle-button-checked-bar-color: var(--light-primary-color)\n  paper-toggle-button-unchecked-button-color: var(--disabled-color)\n  paper-toggle-button-unchecked-bar-color: var(--primary-background-color)\n  # Switch colors\n  switch-checked-color: var(--paper-toggle-button-checked-button-color)\n  switch-unchecked-button-color: var(--paper-toggle-button-unchecked-button-color)\n  switch-unchecked-color: var(--paper-toggle-button-unchecked-bar-color)\n  switch-unchecked-track-color: var(--paper-toggle-button-unchecked-bar-color)\n  # Table colors\n  table-row-background-color: var(--divider-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  card-background-color: var(--primary-background-color)\n  #Animated icons\n  weather-icon-clear-night: url(\"/hacsfiles/themes/caule-themes-pack-1/clear-night.svg\")\n  weather-icon-cloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/cloudy.svg\")\n  weather-icon-fog: url(\"/hacsfiles/themes/caule-themes-pack-1/fog.svg\")\n  weather-icon-lightning: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning.svg\")\n  weather-icon-lightning-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/lightning-rainy.svg\")\n  weather-icon-partlycloudy: url(\"/hacsfiles/themes/caule-themes-pack-1/partlycloudy.svg\")\n  weather-icon-pouring: url(\"/hacsfiles/themes/caule-themes-pack-1/pouring.svg\")\n  weather-icon-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/rainy.svg\")\n  weather-icon-hail: url(\"/hacsfiles/themes/caule-themes-pack-1/hail.svg\")\n  weather-icon-snowy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy.svg\")\n  weather-icon-snowy-rainy: url(\"/hacsfiles/themes/caule-themes-pack-1/snowy-rainy.svg\")\n  weather-icon-sunny: url(\"/hacsfiles/themes/caule-themes-pack-1/sunny.svg\")\n  weather-icon-windy: url(\"/hacsfiles/themes/caule-themes-pack-1/windy.svg\")\n  weather-icon-windy-variant: url(\"/hacsfiles/themes/caule-themes-pack-1/windy-variant.svg\")\n  weather-icon-exceptional: url(\"/hacsfiles/themes/caule-themes-pack-1/exceptional.svg\")\n  # Shadown\n  ha-card-box-shadow: 'inset 0px 0px 0px 0px var(--divider-color)'\n  # HACS\n  hacs-badge-color: var(--primary-color)\n  link-text-color: var(--disabled-color)\n  markdown-code-background-color: var(--divider-color)\n  google-blue-500: var(--primary-color)\n  accent-color: var(--light-primary-color)\n  hacs-chip-color: var(--primary-color)"
  },
  {
    "path": "home-assistant/themes/google_dark_theme/google_dark_theme.yaml",
    "content": "# Theme based on Google app dark theme\n# Creator: Juan - @juanmtech\n# Website: https://www.juanmtech.com\n# YouTube Channel: https://youtube.com/juanmtech\n# My Home Assistant Config files: https://github.com/JuanMTech/Home_Assistant_files\n#\n#\nGoogle Dark Theme:\n  # Header:\n  app-header-background-color: rgb(23, 23, 23)\n  app-header-text-color: rgb(198, 203, 210)\n  # Main Interface Colors\n  primary-color: rgb(138, 180, 248)\n  light-primary-color: var(--primary-color)\n  primary-background-color: rgb(23, 23, 23)\n  secondary-background-color: rgb(32, 33, 36)\n  divider-color: var(--primary-background-color)\n  accent-color: rgb(138, 180, 248)\n  # Text\n  primary-text-color: rgb(242, 242, 242)\n  secondary-text-color: rgb(166, 166, 166)\n  text-primary-color: var(--primary-text-color)\n  disabled-text-color: rgba(184, 190, 199, 0.4)\n  # Sidebar Menu\n  sidebar-icon-color: rgb(169, 177, 188)\n  sidebar-text-color: rgb(198, 203, 210)\n  sidebar-background-color: rgb(32, 33, 36)\n  sidebar-selected-background-color: var(--primary-background-color)\n  sidebar-selected-icon-color: rgb(138, 180, 248)\n  sidebar-selected-text-color: var(--sidebar-selected-icon-color)\n  # Buttons\n  paper-item-icon-color: rgb(169, 177, 188)\n  paper-item-icon-active-color: rgb(138, 180, 248)\n  # States and Badges\n  state-icon-color: rgb(138, 180, 248)\n  state-icon-active-color: rgb(169, 177, 188)\n  state-icon-unavailable-color: var(--disabled-text-color)\n  # Sliders\n  paper-slider-knob-color: rgb(138, 180, 248)\n  paper-slider-knob-start-color: var(--paper-slider-knob-color)\n  paper-slider-pin-color: var(--paper-slider-knob-color)\n  paper-slider-active-color: var(--paper-slider-knob-color)\n  paper-slider-secondary-color: var(--light-primary-color)\n  # Labels\n  label-badge-background-color: rgb(32, 33, 36)\n  label-badge-text-color: rgb(198, 203, 210)\n  label-badge-red: rgb(208, 101, 104)\n  label-badge-green: rgb(128, 200, 132)\n  label-badge-blue: rgb(138, 180, 248)\n  label-badge-yellow: rgb(223, 194, 113)\n  label-badge-gray: rgb(95, 98, 103)\n  # Cards\n  card-background-color: rgb(32, 33, 36)\n  ha-card-border-radius: \"10px\"\n  ha-card-box-shadow: 1px 1px 5px 0px rgb(12, 12, 14)\n  paper-dialog-background-color: var(--card-background-color)\n  paper-listbox-background-color: var(--card-background-color)\n  paper-card-background-color: var(--card-background-color)\n  # Switches\n  switch-checked-button-color: rgb(138, 180, 248)\n  switch-checked-track-color: rgb(138, 180, 248)\n  switch-unchecked-button-color: rgb(172, 176, 185)\n  switch-unchecked-track-color: rgb(154, 160, 166)\n  # Toggles\n  paper-toggle-button-checked-button-color: var(--switch-checked-button-color)\n  paper-toggle-button-checked-bar-color: var(--switch-checked-track-color)\n  paper-toggle-button-unchecked-button-color: var(--switch-unchecked-button-color)\n  paper-toggle-button-unchecked-bar-color: var(--switch-unchecked-track-color)\n  # Table\n  table-row-background-color: var(--primary-background-color)\n  table-row-alternative-background-color: var(--secondary-background-color)\n  data-table-background-color: var(--primary-background-color)\n  mdc-checkbox-unchecked-color: rgb(169, 177, 188)\n  # Dropdowns\n  material-background-color: var(--secondary-background-color)\n  material-secondary-background-color: var(--primary-background-color)\n  mdc-theme-surface: var(--primary-background-color)\n  # Pre/Code\n  markdown-code-background-color: rgb(23, 23, 23)"
  },
  {
    "path": "home-assistant/www/community/lovelace-battery-entity-row/battery-entity-row.js",
    "content": "((LitElement) => {\n    console.info(\n        '%c BATTERY-ENTITY-ROW %c 1.3.1 ',\n        'color: cyan; background: black; font-weight: bold;',\n        'color: darkblue; background: white; font-weight: bold;',\n    );\n    const {html, css} = LitElement.prototype;\n\n    const defaultOnStates = ['on', 'charging', 'true'];\n\n    class BatteryEntityRow extends LitElement {\n\n        static get properties() {\n            return {\n                _hass: Object,\n                _config: Object,\n                stateObj: Object\n            }\n        }\n\n        static get styles() {\n            return css`\n          :host {\n            display: flex;\n            align-items: center;\n          }\n          .flex {\n            flex: 1;\n            margin-left: 16px;\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n            min-width: 0;\n          }\n          .info, state-badge {\n            cursor: pointer;\n          }\n          .secondary {\n            color: var(--secondary-text-color);\n          }\n          .good {\n            color: var(--label-badge-green);\n          }\n          .warning {\n            color: var(--label-badge-yellow);\n          }\n          .critical {\n            color: var(--label-badge-red);\n          }`;\n        }\n\n        render() {\n            if (!this._hass || !this._config) return html``;\n            if (!this.stateObj) return this.renderWarning();\n\n            const charging = this.getChargingState(this._config.charging)\n            const batteryValue = this.getBatteryLevel(this._config.attribute);\n\n            const isUnavailable = !batteryValue || ['unavailable', 'unknown'].includes(batteryValue);\n            const isNumeric = !isNaN(parseFloat(batteryValue)) && isFinite(batteryValue);\n\n            const numericValue = isUnavailable ? null : isNumeric ? batteryValue : this.parseStringValue(batteryValue);\n\n            const icon = this._config.icon || this.getIcon(numericValue, charging);\n            const color = this.getColor(numericValue);\n\n            const name = this._config.name || this.stateObj.attributes.friendly_name;\n            const unit = this._config.unit === false ? null : (this._config.unit || (isNumeric ? '%' : null));\n            const state = isUnavailable\n                ? this._hass.localize('state.default.unknown')\n                : html`${batteryValue}${unit && html`&nbsp;${unit}`}`;\n\n            return html`\n            <state-badge\n                .stateObj=\"${this.stateObj}\"\n                .overrideIcon=\"${icon}\"\n                @click=\"${this.moreInfo}\"\n                class=\"pointer ${color}\">\n            </state-badge>\n            <div class=\"flex\" @click=\"${this.moreInfo}\">\n                <div class=\"info\">${name}${this.renderSecondaryInfo()}</div>\n                <div class=\"state\">${state}</div>\n            </div>`;\n        }\n\n        renderSecondaryInfo() {\n            const secondaryInfo = this._config.secondary_info;\n            let content = undefined;\n\n            if (secondaryInfo === 'last-changed') {\n                content = html`<ha-relative-time .datetime=\"${this.stateObj.last_changed}\" .hass=\"${this._hass}\"></ha-relative-time>`;\n            } else if (secondaryInfo === 'last-updated') {\n                content = html`<ha-relative-time .datetime=\"${this.stateObj.last_updated}\" .hass=\"${this._hass}\"></ha-relative-time>`;\n            } else if (secondaryInfo in this.stateObj.attributes) {\n                content = this.stateObj.attributes[secondaryInfo];\n            }\n            return content ? html`<div class=\"secondary\">${content}</div>` : null;\n        }\n\n        renderWarning() {\n            return html`<hui-warning>\n                ${this._hass.localize('ui.panel.lovelace.warning.entity_not_found', 'entity', this._config.entity)}\n            </hui-warning>`;\n        }\n\n        setConfig(config) {\n            if (!config.entity) throw new Error('Please define a valid entity.');\n\n            this.moreInfo = () => this.fireEvent(this, 'hass-more-info', {entityId: config.entity});\n            this._config = config;\n        }\n\n        shouldUpdate(changedProps) {\n            return changedProps.has('stateObj');\n        }\n\n        set hass(hass) {\n            this._hass = hass;\n\n            if (hass && this._config) {\n                this.stateObj = this._config.entity in hass.states ? hass.states[this._config.entity] : null;\n            }\n        }\n\n        getBatteryLevel(attribute) {\n            let batteryValue = this.stateObj.state;\n            if (this.stateObj.attributes.battery) batteryValue = this.stateObj.attributes.battery;\n            if (this.stateObj.attributes.battery_level) batteryValue = this.stateObj.attributes.battery_level;\n            if (this.stateObj.attributes[attribute]) batteryValue = this.stateObj.attributes[attribute];\n            return !isNaN(parseFloat(batteryValue)) && isFinite(batteryValue)\n                ? Math.round(parseInt(batteryValue, 10)) : batteryValue;\n        }\n\n        getChargingState(chargingConfig) {\n            if (!chargingConfig) return false;\n            if (chargingConfig === true) {\n                return defaultOnStates.includes(this.stateObj.state.toString().toLowerCase());\n            }\n\n            const additionalStates = chargingConfig.state || [];\n            const onStates = defaultOnStates.concat(additionalStates).map(value => value.toString().toLowerCase());\n\n            const entity = (chargingConfig.entity && chargingConfig.entity in this._hass.states)\n                ? this._hass.states[chargingConfig.entity] : this.stateObj;\n            const state = chargingConfig.attribute ? entity.attributes[chargingConfig.attribute] : entity.state;\n            return onStates.includes(state.toString().toLowerCase());\n        }\n\n        getIcon(batteryLevel, charging) {\n            if (!batteryLevel) return 'mdi:battery-unknown';\n            const roundedLevel = Math.round(batteryLevel / 10) * 10;\n            return roundedLevel >= 100\n                ? (charging ? 'mdi:battery-charging-100' : 'mdi:battery')\n                : roundedLevel === 0\n                    ? (charging ? 'mdi:battery-charging-outline' : 'mdi:battery-outline')\n                    : (charging ? 'mdi:battery-charging-' : 'mdi:battery-') + roundedLevel;\n        }\n\n        getColor(batteryLevel) {\n            if (!batteryLevel) return 'unknown';\n            const warning = this._config.warning || 35;\n            const critical = this._config.critical || 15;\n            return (batteryLevel > warning)\n                ? 'good'\n                : (batteryLevel > critical)\n                    ? 'warning'\n                    : 'critical';\n        }\n\n        parseStringValue(v) {\n            const val = v.toString().toLowerCase();\n            if (['full', 'high', 'max', 'maximum'].includes(val)) return 90;\n            if (['medium', 'med', 'normal'].includes(val)) return 50;\n            if (['low', 'min', 'minimal'].includes(val)) return 10;\n            if (['empty', 'critical', 'none'].includes(val)) return 0;\n            return null;\n        }\n\n        fireEvent(node, type, detail = {}, options = {}) {\n            const event = new Event(type, {\n                bubbles: options.bubbles || true,\n                cancelable: options.cancelable || true,\n                composed: options.composed || true,\n            });\n            event.detail = detail;\n            node.dispatchEvent(event);\n        }\n    }\n\n    customElements.define('battery-entity-row', BatteryEntityRow);\n})(window.LitElement || Object.getPrototypeOf(customElements.get('hui-masonry-view') || customElements.get('hui-view')));\n"
  },
  {
    "path": "home-assistant/www/community/lovelace-card-tools/card-tools.js",
    "content": "!function(e){var t={};function r(o){if(t[o])return t[o].exports;var n=t[o]={i:o,l:!1,exports:{}};return e[o].call(n.exports,n,n.exports,r),n.l=!0,n.exports}r.m=e,r.c=t,r.d=function(e,t,o){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:o})},r.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var o=Object.create(null);if(r.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var n in e)r.d(o,n,function(t){return e[t]}.bind(null,n));return o},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,\"a\",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p=\"\",r(r.s=4)}([function(e,t,r){\"use strict\";function o(){return document.querySelector(\"hc-main\")?document.querySelector(\"hc-main\").hass:document.querySelector(\"home-assistant\")?document.querySelector(\"home-assistant\").hass:void 0}function n(e){return document.querySelector(\"hc-main\")?document.querySelector(\"hc-main\").provideHass(e):document.querySelector(\"home-assistant\")?document.querySelector(\"home-assistant\").provideHass(e):void 0}function s(){var e,t=document.querySelector(\"hc-main\");return t?((e=t._lovelaceConfig).current_view=t._lovelacePath,e):(t=(t=(t=(t=(t=(t=(t=(t=(t=document.querySelector(\"home-assistant\"))&&t.shadowRoot)&&t.querySelector(\"home-assistant-main\"))&&t.shadowRoot)&&t.querySelector(\"app-drawer-layout partial-panel-resolver\"))&&t.shadowRoot||t)&&t.querySelector(\"ha-panel-lovelace\"))&&t.shadowRoot)&&t.querySelector(\"hui-root\"))?((e=t.lovelace).current_view=t.___curView,e):null}function a(){var e=document.querySelector(\"hc-main\");return e=e?(e=(e=(e=e&&e.shadowRoot)&&e.querySelector(\"hc-lovelace\"))&&e.shadowRoot)&&e.querySelector(\"hui-view\")||e.querySelector(\"hui-panel-view\"):(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=document.querySelector(\"home-assistant\"))&&e.shadowRoot)&&e.querySelector(\"home-assistant-main\"))&&e.shadowRoot)&&e.querySelector(\"app-drawer-layout partial-panel-resolver\"))&&e.shadowRoot||e)&&e.querySelector(\"ha-panel-lovelace\"))&&e.shadowRoot)&&e.querySelector(\"hui-root\"))&&e.shadowRoot)&&e.querySelector(\"ha-app-layout\"))&&e.querySelector(\"#view\"))&&e.firstElementChild}async function i(){if(customElements.get(\"hui-view\"))return!0;await customElements.whenDefined(\"partial-panel-resolver\");const e=document.createElement(\"partial-panel-resolver\");if(e.hass={panels:[{url_path:\"tmp\",component_name:\"lovelace\"}]},e._updateRoutes(),await e.routerOptions.routes.tmp.load(),!customElements.get(\"ha-panel-lovelace\"))return!1;const t=document.createElement(\"ha-panel-lovelace\");return t.hass=o(),void 0===t.hass&&(await new Promise(e=>{window.addEventListener(\"connection-status\",t=>{console.log(t),e()},{once:!0})}),t.hass=o()),t.panel={config:{mode:null}},t._fetchConfig(),!0}r.d(t,\"a\",(function(){return o})),r.d(t,\"e\",(function(){return n})),r.d(t,\"c\",(function(){return s})),r.d(t,\"d\",(function(){return a})),r.d(t,\"b\",(function(){return i}))},function(e,t,r){\"use strict\";r.d(t,\"a\",(function(){return o}));let o=function(){if(window.fully&&\"function\"==typeof fully.getDeviceId)return fully.getDeviceId();if(!localStorage[\"lovelace-player-device-id\"]){const e=()=>Math.floor(1e5*(1+Math.random())).toString(16).substring(1);localStorage[\"lovelace-player-device-id\"]=`${e()}${e()}-${e()}${e()}`}return localStorage[\"lovelace-player-device-id\"]}()},function(module,__webpack_exports__,__webpack_require__){\"use strict\";__webpack_require__.d(__webpack_exports__,\"a\",(function(){return hasOldTemplate})),__webpack_require__.d(__webpack_exports__,\"b\",(function(){return parseOldTemplate}));var _hass_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(0),_deviceID_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(1);function hasOldTemplate(e){return/\\[\\[\\s+.*\\s+\\]\\]/.test(e)}function parseTemplateString(str,specialData={}){if(\"string\"!=typeof str)return text;const FUNCTION=/^[a-zA-Z0-9_]+\\(.*\\)$/,EXPR=/([^=<>!]+)\\s*(==|!=|<|>|<=|>=)\\s*([^=<>!]+)/,SPECIAL=/^\\{.+\\}$/,STRING=/^\"[^\"]*\"|'[^']*'$/;\"string\"==typeof specialData&&(specialData={}),specialData=Object.assign({user:Object(_hass_js__WEBPACK_IMPORTED_MODULE_0__.a)().user.name,browser:_deviceID_js__WEBPACK_IMPORTED_MODULE_1__.a,hash:location.hash.substr(1)||\" \"},specialData);const _parse_function=e=>{let t=[e.substr(0,e.indexOf(\"(\")).trim()];for(e=e.substr(e.indexOf(\"(\")+1);e;){let r=0,o=0,n=!1;for(;e[r];){let t=e[r++];if(t===n&&r>1&&\"\\\\\"!==e[r-2]?n=!1:\"\\\"'\".includes(t)&&(n=t),!n){if(\"(\"===t)o+=1;else if(\")\"===t){o-=1;continue}if(!(o>0)&&\",)\".includes(t))break}}t.push(e.substr(0,r-1).trim()),e=e.substr(r)}return t},_parse_special=e=>(e=e.substr(1,e.length-2),specialData[e]||`{${e}}`),_parse_entity=e=>{let t;if((e=e.split(\".\"))[0].match(SPECIAL))t=_parse_special(e.shift()),t=Object(_hass_js__WEBPACK_IMPORTED_MODULE_0__.a)().states[t]||t;else if(t=Object(_hass_js__WEBPACK_IMPORTED_MODULE_0__.a)().states[`${e.shift()}.${e.shift()}`],!e.length)return t.state;return e.forEach(e=>t=t[e]),t},_eval_expr=str=>{if(str=EXPR.exec(str),null===str)return!1;const lhs=parseTemplateString(str[1]),rhs=parseTemplateString(str[3]);var expr=\"\";return expr=parseFloat(lhs)!=lhs?`\"${lhs}\" ${str[2]} \"${rhs}\"`:`${parseFloat(lhs)} ${str[2]} ${parseFloat(rhs)}`,eval(expr)},_eval_function=e=>{if(\"if\"===e[0])return _eval_expr(e[1])?parseTemplateString(e[2]):parseTemplateString(e[3])};try{return str=str.trim(),str.match(STRING)?str.substr(1,str.length-2):str.match(SPECIAL)?_parse_special(str):str.match(FUNCTION)?_eval_function(_parse_function(str)):str.includes(\".\")?_parse_entity(str):str}catch(e){return`[[ Template matching failed: ${str} ]]`}}function parseOldTemplate(e,t={}){if(\"string\"!=typeof e)return e;return e=e.replace(/\\[\\[\\s(.*?)\\s\\]\\]/g,(e,r,o,n)=>parseTemplateString(r,t))}},function(e){e.exports=JSON.parse('{\"name\":\"card-tools\",\"private\":true,\"version\":\"2.1.2\",\"description\":\"Lovelace Card Tools\",\"scripts\":{\"build\":\"webpack\",\"watch\":\"webpack --watch --mode=development\"},\"repository\":{\"type\":\"git\",\"url\":\"github.com:thomasloven/card-tools\"},\"author\":\"Thomas Lovén\",\"license\":\"MIT\",\"devDependencies\":{\"webpack\":\"^4.44.1\",\"webpack-cli\":\"^3.3.12\"}}')},function(e,t,r){\"use strict\";r.r(t);const o=customElements.get(\"home-assistant-main\")?Object.getPrototypeOf(customElements.get(\"home-assistant-main\")):Object.getPrototypeOf(customElements.get(\"hui-view\")),n=o.prototype.html,s=o.prototype.css;var a=r(0);function i(e,t,r=null){if((e=new Event(e,{bubbles:!0,cancelable:!1,composed:!0})).detail=t||{},r)r.dispatchEvent(e);else{var o=Object(a.d)();o&&o.dispatchEvent(e)}}let c=window.cardHelpers;const l=new Promise(async(e,t)=>{c&&e();const r=async()=>{c=await window.loadCardHelpers(),window.cardHelpers=c,e()};window.loadCardHelpers?r():window.addEventListener(\"load\",async()=>{Object(a.b)(),window.loadCardHelpers&&r()})});function u(e,t){const r={type:\"error\",error:e,origConfig:t},o=document.createElement(\"hui-error-card\");return customElements.whenDefined(\"hui-error-card\").then(()=>{const e=document.createElement(\"hui-error-card\");e.setConfig(r),o.parentElement&&o.parentElement.replaceChild(e,o)}),l.then(()=>{i(\"ll-rebuild\",{},o)}),o}function d(e,t){if(!t||\"object\"!=typeof t||!t.type)return u(`No ${e} type configured`,t);let r=t.type;if(r=r.startsWith(\"custom:\")?r.substr(\"custom:\".length):`hui-${r}-${e}`,customElements.get(r))return function(e,t){let r=document.createElement(e);try{r.setConfig(JSON.parse(JSON.stringify(t)))}catch(e){r=u(e,t)}return l.then(()=>{i(\"ll-rebuild\",{},r)}),r}(r,t);const o=u(`Custom element doesn't exist: ${r}.`,t);o.style.display=\"None\";const n=setTimeout(()=>{o.style.display=\"\"},2e3);return customElements.whenDefined(r).then(()=>{clearTimeout(n),i(\"ll-rebuild\",{},o)}),o}function p(e){return c?c.createCardElement(e):d(\"card\",e)}function m(e){return c?c.createHuiElement(e):d(\"element\",e)}function h(e){if(c)return c.createRowElement(e);const t=new Set([\"call-service\",\"cast\",\"conditional\",\"divider\",\"section\",\"select\",\"weblink\"]),r={alert:\"toggle\",automation:\"toggle\",climate:\"climate\",cover:\"cover\",fan:\"toggle\",group:\"group\",input_boolean:\"toggle\",input_number:\"input-number\",input_select:\"input-select\",input_text:\"input-text\",light:\"toggle\",lock:\"lock\",media_player:\"media-player\",remote:\"toggle\",scene:\"scene\",script:\"script\",sensor:\"sensor\",timer:\"timer\",switch:\"toggle\",vacuum:\"toggle\",water_heater:\"climate\",input_datetime:\"input-datetime\",none:void 0};if(!e)return u(\"Invalid configuration given.\",e);if(\"string\"==typeof e&&(e={entity:e}),\"object\"!=typeof e||!e.entity&&!e.type)return u(\"Invalid configuration given.\",e);const o=e.type||\"default\";if(t.has(o)||o.startsWith(\"custom:\"))return d(\"row\",e);return d(\"entity-row\",{type:r[e.entity?e.entity.split(\".\",1)[0]:\"none\"]||\"text\",...e})}class f extends o{static get version(){return 2}static get properties(){return{noHass:{type:Boolean}}}setConfig(e){this._config=e,this.el?this.el.setConfig(e):(this.el=this.create(e),this._hass&&(this.el.hass=this._hass),this.noHass&&Object(a.e)(this))}set config(e){this.setConfig(e)}set hass(e){this._hass=e,this.el&&(this.el.hass=e)}createRenderRoot(){return this}render(){return n`${this.el}`}}const g=function(e,t){const r=Object.getOwnPropertyDescriptors(t.prototype);for(const[t,o]of Object.entries(r))\"constructor\"!==t&&Object.defineProperty(e.prototype,t,o);const o=Object.getOwnPropertyDescriptors(t);for(const[t,r]of Object.entries(o))\"prototype\"!==t&&Object.defineProperty(e,t,r);const n=Object.getPrototypeOf(t),s=Object.getOwnPropertyDescriptors(n.prototype);for(const[t,r]of Object.entries(s))\"constructor\"!==t&&Object.defineProperty(Object.getPrototypeOf(e).prototype,t,r);const a=Object.getOwnPropertyDescriptors(n);for(const[t,r]of Object.entries(a))\"prototype\"!==t&&Object.defineProperty(Object.getPrototypeOf(e),t,r)},_=customElements.get(\"card-maker\");if(!_||!_.version||_.version<2){class e extends f{create(e){return p(e)}getCardSize(){return this.firstElementChild&&this.firstElementChild.getCardSize?this.firstElementChild.getCardSize():1}}_?g(_,e):customElements.define(\"card-maker\",e)}const w=customElements.get(\"element-maker\");if(!w||!w.version||w.version<2){class e extends f{create(e){return m(e)}}w?g(w,e):customElements.define(\"element-maker\",e)}const y=customElements.get(\"entity-row-maker\");if(!y||!y.version||y.version<2){class e extends f{create(e){return h(e)}}y?g(y,e):customElements.define(\"entity-row-maker\",e)}var v=r(1);function b(e,t={}){return customElements.whenDefined(\"long-press\").then(()=>{document.body.querySelector(\"long-press\").bind(e)}),customElements.whenDefined(\"action-handler\").then(()=>{document.body.querySelector(\"action-handler\").bind(e,t)}),e}async function E(e,t,r=!1){let o=e;\"string\"==typeof t&&(t=t.split(/(\\$| )/));for(const[e,n]of t.entries())if(n.trim().length){if(!o)return null;o.localName&&o.localName.includes(\"-\")&&await customElements.whenDefined(o.localName),o.updateComplete&&await o.updateComplete,o=\"$\"===n?r&&e==t.length-1?[o.shadowRoot]:o.shadowRoot:r&&e==t.length-1?o.querySelectorAll(n):o.querySelector(n)}return o}async function O(e,t,r=!1,o=1e4){return Promise.race([E(e,t,r),new Promise((e,t)=>setTimeout(()=>t(new Error(\"timeout\")),o))]).catch(e=>{if(!e.message||\"timeout\"!==e.message)throw e;return null})}async function S(e,t=!1){const r=document.querySelector(\"hc-main\")||document.querySelector(\"home-assistant\");i(\"hass-more-info\",{entityId:e},r);const o=await O(r,\"$ ha-more-info-dialog\");return o.large=t,o}async function C(){const e=document.querySelector(\"home-assistant\")||document.querySelector(\"hc-root\");i(\"hass-more-info\",{entityId:\".\"},e);const t=await O(e,\"$ card-tools-popup\");t&&t.closeDialog()}async function x(e,t,r=!1,o={},n=!1){if(!customElements.get(\"card-tools-popup\")){const e=customElements.get(\"home-assistant-main\")?Object.getPrototypeOf(customElements.get(\"home-assistant-main\")):Object.getPrototypeOf(customElements.get(\"hui-view\")),t=e.prototype.html,r=e.prototype.css;class o extends e{static get properties(){return{open:{},large:{reflect:!0,type:Boolean},hass:{}}}updated(e){e.has(\"hass\")&&this.card&&(this.card.hass=this.hass)}closeDialog(){this.open=!1}async _makeCard(){const e=await window.loadCardHelpers();this.card=await e.createCardElement(this._card),this.card.hass=this.hass,this.requestUpdate()}async _applyStyles(){let e=await O(this,\"$ ha-dialog\");customElements.whenDefined(\"card-mod\").then(async()=>{if(!e)return;customElements.get(\"card-mod\").applyToElement(e,\"more-info\",this._style,{config:this._card},[],!1)})}async showDialog(e,t,r=!1,o={},n=!1){this.title=e,this._card=t,this.large=r,this._style=o,this.fullscreen=!!n,this._makeCard(),await this.updateComplete,this.open=!0,await this._applyStyles()}_enlarge(){this.large=!this.large}render(){return this.open?t`\n            <ha-dialog\n              open\n              @closed=${this.closeDialog}\n              .heading=${!0}\n              hideActions\n              @ll-rebuild=${this._makeCard}\n            >\n            ${this.fullscreen?t`<div slot=\"heading\"></div>`:t`\n                <app-toolbar slot=\"heading\">\n                  <mwc-icon-button\n                    .label=${\"dismiss\"}\n                    dialogAction=\"cancel\"\n                  >\n                    <ha-icon\n                      .icon=${\"mdi:close\"}\n                    ></ha-icon>\n                  </mwc-icon-button>\n                  <div class=\"main-title\" @click=${this._enlarge}>\n                    ${this.title}\n                  </div>\n                </app-toolbar>\n              `}\n              <div class=\"content\">\n                ${this.card}\n              </div>\n            </ha-dialog>\n          `:t``}static get styles(){return r`\n          ha-dialog {\n            --mdc-dialog-min-width: 400px;\n            --mdc-dialog-max-width: 600px;\n            --mdc-dialog-heading-ink-color: var(--primary-text-color);\n            --mdc-dialog-content-ink-color: var(--primary-text-color);\n            --justify-action-buttons: space-between;\n          }\n          @media all and (max-width: 450px), all and (max-height: 500px) {\n            ha-dialog {\n              --mdc-dialog-min-width: 100vw;\n              --mdc-dialog-max-width: 100vw;\n              --mdc-dialog-min-height: 100%;\n              --mdc-dialog-max-height: 100%;\n              --mdc-shape-medium: 0px;\n              --vertial-align-dialog: flex-end;\n            }\n          }\n\n          app-toolbar {\n            flex-shrink: 0;\n            color: var(--primary-text-color);\n            background-color: var(--secondary-background-color);\n          }\n\n          .main-title {\n            margin-left: 16px;\n            line-height: 1.3em;\n            max-height: 2.6em;\n            overflow: hidden;\n            display: -webkit-box;\n            -webkit-line-clamp: 2;\n            -webkit-box-orient: vertical;\n            text-overflow: ellipsis;\n          }\n          .content {\n            margin: -20px -24px;\n          }\n\n          @media all and (max-width: 450px), all and (max-height: 500px) {\n            app-toolbar {\n              background-color: var(--app-header-background-color);\n              color: var(--app-header-text-color, white);\n            }\n          }\n\n          @media all and (min-width: 451px) and (min-height: 501px) {\n            ha-dialog {\n              --mdc-dialog-max-width: 90vw;\n            }\n\n            .content {\n              width: 400px;\n            }\n            :host([large]) .content {\n              width: calc(90vw - 48px);\n            }\n\n            :host([large]) app-toolbar {\n              max-width: calc(90vw - 32px);\n            }\n          }\n          `}}customElements.define(\"card-tools-popup\",o)}const s=document.querySelector(\"home-assistant\")||document.querySelector(\"hc-root\");if(!s)return;let i=await O(s,\"$ card-tools-popup\");if(i||(i=document.createElement(\"card-tools-popup\"),s.shadowRoot.appendChild(i),Object(a.e)(i)),!window._moreInfoDialogListener){const e=async e=>{if(e.state&&\"cardToolsPopup\"in e.state)if(e.state.cardToolsPopup){const{title:t,card:r,large:o,style:n,fullscreen:s}=e.state.params;x(t,r,o,n,s)}else i.closeDialog()};window.addEventListener(\"popstate\",e),window._moreInfoDialogListener=!0}history.replaceState({cardToolsPopup:!1},\"\"),history.pushState({cardToolsPopup:!0,params:{title:e,card:t,large:r,style:o,fullscreen:n}},\"\"),i.showDialog(e,t,r,o,n)}function D(e,t,r){e||(e=Object(a.a)().connection);let o={user:Object(a.a)().user.name,browser:v.a,hash:location.hash.substr(1)||\" \",...r.variables},n=r.template,s=r.entity_ids;return e.subscribeMessage(e=>{let r=e.result;r=r.replace(/_\\([^)]*\\)/g,e=>Object(a.a)().localize(e.substring(2,e.length-1))||e),t(r)},{type:\"render_template\",template:n,variables:o,entity_ids:s})}var j=r(2);const T=Object(a.a)().callWS({type:\"config/area_registry/list\"}),P=Object(a.a)().callWS({type:\"config/device_registry/list\"}),k=Object(a.a)().callWS({type:\"config/entity_registry/list\"});async function q(){return window.cardToolsData=window.cardToolsData||{areas:await T,devices:await P,entities:await k},window.cardToolsData}function $(e){const t=window.cardToolsData;for(const r of t.areas)if(r.name.toLowerCase()===e.toLowerCase())return r;return null}function R(e){const t=window.cardToolsData;let r=[];if(!e)return r;for(const o of t.devices)o.area_id===e.area_id&&r.push(o);return r}function I(e){const t=window.cardToolsData;for(const r of t.devices)if(r.name.toLowerCase()===e.toLowerCase())return r;return null}function L(e){const t=window.cardToolsData;let r=[];if(!e)return r;for(const o of t.entities)o.device_id===e.id&&r.push(o.entity_id);return r}function M(e,t){window._registerCard||(window._customCardButtons=[],window._registerCard=(e,t)=>{window._customCardButtons.push({el:e,name:t})},customElements.whenDefined(\"hui-card-picker\").then(()=>{customElements.get(\"hui-card-picker\").prototype.firstUpdated=function(){this._customCardButtons=document.createElement(\"div\"),this._customCardButtons.classList.add(\"cards-container\"),this._customCardButtons.id=\"custom\",this._customCardButtons.style.borderTop=\"1px solid var(--primary-color)\",window._customCardButtons.forEach,this.shadowRoot.appendChild(this._customCardButtons),window._customCardButtons.forEach(e=>{const t=document.createElement(\"mwc-button\");t.type=\"custom:\"+e.el,t.innerHTML=e.name,t.addEventListener(\"click\",this._cardPicked),this._customCardButtons.appendChild(t)})}})),window._registerCard(e,t)}q();const B=async e=>{await(async()=>{if(customElements.get(\"developer-tools-event\"))return;await customElements.whenDefined(\"partial-panel-resolver\");const e=document.createElement(\"partial-panel-resolver\");e.hass={panels:[{url_path:\"tmp\",component_name:\"developer-tools\"}]},e._updateRoutes(),await e.routerOptions.routes.tmp.load(),await customElements.whenDefined(\"developer-tools-router\");const t=document.createElement(\"developer-tools-router\");await t.routerOptions.routes.event.load()})();return document.createElement(\"developer-tools-event\")._computeParsedEventData(e)};class N{static checkVersion(e){}static args(){}static logger(){}static get localize(){return Object(a.a)().localize}static get deviceID(){return v.a}static get fireEvent(){return i}static get hass(){return Object(a.a)()}static get lovelace(){return Object(a.c)()}static get lovelace_view(){return a.d}static get provideHass(){return a.e}static get LitElement(){return o}static get LitHtml(){return n}static get LitCSS(){return s}static get longpress(){return b}static get createCard(){return p}static get createElement(){return m}static get createEntityRow(){return h}static get moreInfo(){return S}static get popUp(){return x}static get closePopUp(){return C}static get hasTemplate(){return e=>{return t=e,!!String(t).includes(\"{%\")||!!String(t).includes(\"{{\")||void 0||Object(j.a)(e);var t}}static parseTemplate(e,t,r={}){return\"string\"==typeof e?Object(j.b)(e,t):async function(e,t,r={}){for(var o in e||(e=e()),r={},r=Object.assign({user:e.user.name,browser:v.a,hash:location.hash.substr(1)||\" \"},r)){var n=new RegExp(`\\\\{${o}\\\\}`,\"g\");t=t.replace(n,r[o])}return e.callApi(\"POST\",\"template\",{template:t})}(e,t,r)}static get subscribeRenderTemplate(){return D}static get getData(){return q}static get areaByName(){return $}static get areaDevices(){return R}static get deviceByName(){return I}static get deviceEntities(){return L}static get registerCard(){return M}static get yaml2json(){return B}static get selectTree(){return O}}const A=r(3);customElements.get(\"card-tools\")||(customElements.define(\"card-tools\",N),window.cardTools=customElements.get(\"card-tools\"),console.info(`%cCARD-TOOLS ${A.version} IS INSTALLED\\n  %cDeviceID: ${customElements.get(\"card-tools\").deviceID}`,\"color: green; font-weight: bold\",\"\"))}]);"
  },
  {
    "path": "home-assistant/www/community/lovelace-card-tools/webpack.config.js",
    "content": "const path = require('path');\n\nmodule.exports = {\n  entry: './src/main.js',\n  mode: 'production',\n  output: {\n    filename: 'card-tools.js',\n    path: path.resolve(__dirname)\n  }\n};\n"
  },
  {
    "path": "home-assistant/www/community/lovelace-layout-card/layout-card.js",
    "content": "function t(t,e,i,o){var s,n=arguments.length,a=n<3?e:null===o?o=Object.getOwnPropertyDescriptor(e,i):o;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)a=Reflect.decorate(t,e,i,o);else for(var r=t.length-1;r>=0;r--)(s=t[r])&&(a=(n<3?s(a):n>3?s(e,i,a):s(e,i))||a);return n>3&&a&&Object.defineProperty(e,i,a),a}const e=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,i=Symbol(),o=new Map;class s{constructor(t,e){if(this._$cssResult$=!0,e!==i)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t}get styleSheet(){let t=o.get(this.cssText);return e&&void 0===t&&(o.set(this.cssText,t=new CSSStyleSheet),t.replaceSync(this.cssText)),t}toString(){return this.cssText}}const n=(t,...e)=>{const o=1===t.length?t[0]:e.reduce(((e,i,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(i)+t[o+1]),t[0]);return new s(o,i)},a=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const i of t.cssRules)e+=i.cssText;return(t=>new s(\"string\"==typeof t?t:t+\"\",i))(e)})(t):t;var r;const l=window.trustedTypes,d=l?l.emptyScript:\"\",c=window.reactiveElementPolyfillSupport,h={toAttribute(t,e){switch(e){case Boolean:t=t?d:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){let i=t;switch(e){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},u=(t,e)=>e!==t&&(e==e||t==t),p={attribute:!0,type:String,converter:h,reflect:!1,hasChanged:u};class v extends HTMLElement{constructor(){super(),this._$Et=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Ei=null,this.o()}static addInitializer(t){var e;null!==(e=this.l)&&void 0!==e||(this.l=[]),this.l.push(t)}static get observedAttributes(){this.finalize();const t=[];return this.elementProperties.forEach(((e,i)=>{const o=this._$Eh(i,e);void 0!==o&&(this._$Eu.set(o,i),t.push(o))})),t}static createProperty(t,e=p){if(e.state&&(e.attribute=!1),this.finalize(),this.elementProperties.set(t,e),!e.noAccessor&&!this.prototype.hasOwnProperty(t)){const i=\"symbol\"==typeof t?Symbol():\"__\"+t,o=this.getPropertyDescriptor(t,i,e);void 0!==o&&Object.defineProperty(this.prototype,t,o)}}static getPropertyDescriptor(t,e,i){return{get(){return this[e]},set(o){const s=this[t];this[e]=o,this.requestUpdate(t,s,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)||p}static finalize(){if(this.hasOwnProperty(\"finalized\"))return!1;this.finalized=!0;const t=Object.getPrototypeOf(this);if(t.finalize(),this.elementProperties=new Map(t.elementProperties),this._$Eu=new Map,this.hasOwnProperty(\"properties\")){const t=this.properties,e=[...Object.getOwnPropertyNames(t),...Object.getOwnPropertySymbols(t)];for(const i of e)this.createProperty(i,t[i])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(t){const e=[];if(Array.isArray(t)){const i=new Set(t.flat(1/0).reverse());for(const t of i)e.unshift(a(t))}else void 0!==t&&e.push(a(t));return e}static _$Eh(t,e){const i=e.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}o(){var t;this._$Ep=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$Em(),this.requestUpdate(),null===(t=this.constructor.l)||void 0===t||t.forEach((t=>t(this)))}addController(t){var e,i;(null!==(e=this._$Eg)&&void 0!==e?e:this._$Eg=[]).push(t),void 0!==this.renderRoot&&this.isConnected&&(null===(i=t.hostConnected)||void 0===i||i.call(t))}removeController(t){var e;null===(e=this._$Eg)||void 0===e||e.splice(this._$Eg.indexOf(t)>>>0,1)}_$Em(){this.constructor.elementProperties.forEach(((t,e)=>{this.hasOwnProperty(e)&&(this._$Et.set(e,this[e]),delete this[e])}))}createRenderRoot(){var t;const i=null!==(t=this.shadowRoot)&&void 0!==t?t:this.attachShadow(this.constructor.shadowRootOptions);return((t,i)=>{e?t.adoptedStyleSheets=i.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):i.forEach((e=>{const i=document.createElement(\"style\"),o=window.litNonce;void 0!==o&&i.setAttribute(\"nonce\",o),i.textContent=e.cssText,t.appendChild(i)}))})(i,this.constructor.elementStyles),i}connectedCallback(){var t;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostConnected)||void 0===e?void 0:e.call(t)}))}enableUpdating(t){}disconnectedCallback(){var t;null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostDisconnected)||void 0===e?void 0:e.call(t)}))}attributeChangedCallback(t,e,i){this._$AK(t,i)}_$ES(t,e,i=p){var o,s;const n=this.constructor._$Eh(t,i);if(void 0!==n&&!0===i.reflect){const a=(null!==(s=null===(o=i.converter)||void 0===o?void 0:o.toAttribute)&&void 0!==s?s:h.toAttribute)(e,i.type);this._$Ei=t,null==a?this.removeAttribute(n):this.setAttribute(n,a),this._$Ei=null}}_$AK(t,e){var i,o,s;const n=this.constructor,a=n._$Eu.get(t);if(void 0!==a&&this._$Ei!==a){const t=n.getPropertyOptions(a),r=t.converter,l=null!==(s=null!==(o=null===(i=r)||void 0===i?void 0:i.fromAttribute)&&void 0!==o?o:\"function\"==typeof r?r:null)&&void 0!==s?s:h.fromAttribute;this._$Ei=a,this[a]=l(e,t.type),this._$Ei=null}}requestUpdate(t,e,i){let o=!0;void 0!==t&&(((i=i||this.constructor.getPropertyOptions(t)).hasChanged||u)(this[t],e)?(this._$AL.has(t)||this._$AL.set(t,e),!0===i.reflect&&this._$Ei!==t&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(t,i))):o=!1),!this.isUpdatePending&&o&&(this._$Ep=this._$E_())}async _$E_(){this.isUpdatePending=!0;try{await this._$Ep}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var t;if(!this.isUpdatePending)return;this.hasUpdated,this._$Et&&(this._$Et.forEach(((t,e)=>this[e]=t)),this._$Et=void 0);let e=!1;const i=this._$AL;try{e=this.shouldUpdate(i),e?(this.willUpdate(i),null===(t=this._$Eg)||void 0===t||t.forEach((t=>{var e;return null===(e=t.hostUpdate)||void 0===e?void 0:e.call(t)})),this.update(i)):this._$EU()}catch(t){throw e=!1,this._$EU(),t}e&&this._$AE(i)}willUpdate(t){}_$AE(t){var e;null===(e=this._$Eg)||void 0===e||e.forEach((t=>{var e;return null===(e=t.hostUpdated)||void 0===e?void 0:e.call(t)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$Ep}shouldUpdate(t){return!0}update(t){void 0!==this._$EC&&(this._$EC.forEach(((t,e)=>this._$ES(e,this[e],t))),this._$EC=void 0),this._$EU()}updated(t){}firstUpdated(t){}}var g;v.finalized=!0,v.elementProperties=new Map,v.elementStyles=[],v.shadowRootOptions={mode:\"open\"},null==c||c({ReactiveElement:v}),(null!==(r=globalThis.reactiveElementVersions)&&void 0!==r?r:globalThis.reactiveElementVersions=[]).push(\"1.3.0\");const _=globalThis.trustedTypes,f=_?_.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,m=`lit$${(Math.random()+\"\").slice(9)}$`,y=\"?\"+m,b=`<${y}>`,$=document,w=(t=\"\")=>$.createComment(t),C=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,E=Array.isArray,A=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,x=/-->/g,S=/>/g,M=/>|[ \t\\n\f\\r](?:([^\\s\"'>=/]+)([ \t\\n\f\\r]*=[ \t\\n\f\\r]*(?:[^ \t\\n\f\\r\"'`<>=]|(\"|')|))|$)/g,T=/'/g,O=/\"/g,k=/^(?:script|style|textarea|title)$/i,U=(t=>(e,...i)=>({_$litType$:t,strings:e,values:i}))(1),L=Symbol.for(\"lit-noChange\"),P=Symbol.for(\"lit-nothing\"),R=new WeakMap,z=$.createTreeWalker($,129,null,!1),H=(t,e)=>{const i=t.length-1,o=[];let s,n=2===e?\"<svg>\":\"\",a=A;for(let e=0;e<i;e++){const i=t[e];let r,l,d=-1,c=0;for(;c<i.length&&(a.lastIndex=c,l=a.exec(i),null!==l);)c=a.lastIndex,a===A?\"!--\"===l[1]?a=x:void 0!==l[1]?a=S:void 0!==l[2]?(k.test(l[2])&&(s=RegExp(\"</\"+l[2],\"g\")),a=M):void 0!==l[3]&&(a=M):a===M?\">\"===l[0]?(a=null!=s?s:A,d=-1):void 0===l[1]?d=-2:(d=a.lastIndex-l[2].length,r=l[1],a=void 0===l[3]?M:'\"'===l[3]?O:T):a===O||a===T?a=M:a===x||a===S?a=A:(a=M,s=void 0);const h=a===M&&t[e+1].startsWith(\"/>\")?\" \":\"\";n+=a===A?i+b:d>=0?(o.push(r),i.slice(0,d)+\"$lit$\"+i.slice(d)+m+h):i+m+(-2===d?(o.push(void 0),e):h)}const r=n+(t[i]||\"<?>\")+(2===e?\"</svg>\":\"\");if(!Array.isArray(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return[void 0!==f?f.createHTML(r):r,o]};class j{constructor({strings:t,_$litType$:e},i){let o;this.parts=[];let s=0,n=0;const a=t.length-1,r=this.parts,[l,d]=H(t,e);if(this.el=j.createElement(l,i),z.currentNode=this.el.content,2===e){const t=this.el.content,e=t.firstChild;e.remove(),t.append(...e.childNodes)}for(;null!==(o=z.nextNode())&&r.length<a;){if(1===o.nodeType){if(o.hasAttributes()){const t=[];for(const e of o.getAttributeNames())if(e.endsWith(\"$lit$\")||e.startsWith(m)){const i=d[n++];if(t.push(e),void 0!==i){const t=o.getAttribute(i.toLowerCase()+\"$lit$\").split(m),e=/([.?@])?(.*)/.exec(i);r.push({type:1,index:s,name:e[2],strings:t,ctor:\".\"===e[1]?G:\"?\"===e[1]?W:\"@\"===e[1]?F:D})}else r.push({type:6,index:s})}for(const e of t)o.removeAttribute(e)}if(k.test(o.tagName)){const t=o.textContent.split(m),e=t.length-1;if(e>0){o.textContent=_?_.emptyScript:\"\";for(let i=0;i<e;i++)o.append(t[i],w()),z.nextNode(),r.push({type:2,index:++s});o.append(t[e],w())}}}else if(8===o.nodeType)if(o.data===y)r.push({type:2,index:s});else{let t=-1;for(;-1!==(t=o.data.indexOf(m,t+1));)r.push({type:7,index:s}),t+=m.length-1}s++}}static createElement(t,e){const i=$.createElement(\"template\");return i.innerHTML=t,i}}function N(t,e,i=t,o){var s,n,a,r;if(e===L)return e;let l=void 0!==o?null===(s=i._$Cl)||void 0===s?void 0:s[o]:i._$Cu;const d=C(e)?void 0:e._$litDirective$;return(null==l?void 0:l.constructor)!==d&&(null===(n=null==l?void 0:l._$AO)||void 0===n||n.call(l,!1),void 0===d?l=void 0:(l=new d(t),l._$AT(t,i,o)),void 0!==o?(null!==(a=(r=i)._$Cl)&&void 0!==a?a:r._$Cl=[])[o]=l:i._$Cu=l),void 0!==l&&(e=N(t,l._$AS(t,e.values),l,o)),e}class I{constructor(t,e){this.v=[],this._$AN=void 0,this._$AD=t,this._$AM=e}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}p(t){var e;const{el:{content:i},parts:o}=this._$AD,s=(null!==(e=null==t?void 0:t.creationScope)&&void 0!==e?e:$).importNode(i,!0);z.currentNode=s;let n=z.nextNode(),a=0,r=0,l=o[0];for(;void 0!==l;){if(a===l.index){let e;2===l.type?e=new B(n,n.nextSibling,this,t):1===l.type?e=new l.ctor(n,l.name,l.strings,this,t):6===l.type&&(e=new Q(n,this,t)),this.v.push(e),l=o[++r]}a!==(null==l?void 0:l.index)&&(n=z.nextNode(),a++)}return s}m(t){let e=0;for(const i of this.v)void 0!==i&&(void 0!==i.strings?(i._$AI(t,i,e),e+=i.strings.length-2):i._$AI(t[e])),e++}}class B{constructor(t,e,i,o){var s;this.type=2,this._$AH=P,this._$AN=void 0,this._$AA=t,this._$AB=e,this._$AM=i,this.options=o,this._$Cg=null===(s=null==o?void 0:o.isConnected)||void 0===s||s}get _$AU(){var t,e;return null!==(e=null===(t=this._$AM)||void 0===t?void 0:t._$AU)&&void 0!==e?e:this._$Cg}get parentNode(){let t=this._$AA.parentNode;const e=this._$AM;return void 0!==e&&11===t.nodeType&&(t=e.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,e=this){t=N(this,t,e),C(t)?t===P||null==t||\"\"===t?(this._$AH!==P&&this._$AR(),this._$AH=P):t!==this._$AH&&t!==L&&this.$(t):void 0!==t._$litType$?this.T(t):void 0!==t.nodeType?this.k(t):(t=>{var e;return E(t)||\"function\"==typeof(null===(e=t)||void 0===e?void 0:e[Symbol.iterator])})(t)?this.S(t):this.$(t)}A(t,e=this._$AB){return this._$AA.parentNode.insertBefore(t,e)}k(t){this._$AH!==t&&(this._$AR(),this._$AH=this.A(t))}$(t){this._$AH!==P&&C(this._$AH)?this._$AA.nextSibling.data=t:this.k($.createTextNode(t)),this._$AH=t}T(t){var e;const{values:i,_$litType$:o}=t,s=\"number\"==typeof o?this._$AC(t):(void 0===o.el&&(o.el=j.createElement(o.h,this.options)),o);if((null===(e=this._$AH)||void 0===e?void 0:e._$AD)===s)this._$AH.m(i);else{const t=new I(s,this),e=t.p(this.options);t.m(i),this.k(e),this._$AH=t}}_$AC(t){let e=R.get(t.strings);return void 0===e&&R.set(t.strings,e=new j(t)),e}S(t){E(this._$AH)||(this._$AH=[],this._$AR());const e=this._$AH;let i,o=0;for(const s of t)o===e.length?e.push(i=new B(this.A(w()),this.A(w()),this,this.options)):i=e[o],i._$AI(s),o++;o<e.length&&(this._$AR(i&&i._$AB.nextSibling,o),e.length=o)}_$AR(t=this._$AA.nextSibling,e){var i;for(null===(i=this._$AP)||void 0===i||i.call(this,!1,!0,e);t&&t!==this._$AB;){const e=t.nextSibling;t.remove(),t=e}}setConnected(t){var e;void 0===this._$AM&&(this._$Cg=t,null===(e=this._$AP)||void 0===e||e.call(this,t))}}class D{constructor(t,e,i,o,s){this.type=1,this._$AH=P,this._$AN=void 0,this.element=t,this.name=e,this._$AM=o,this.options=s,i.length>2||\"\"!==i[0]||\"\"!==i[1]?(this._$AH=Array(i.length-1).fill(new String),this.strings=i):this._$AH=P}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(t,e=this,i,o){const s=this.strings;let n=!1;if(void 0===s)t=N(this,t,e,0),n=!C(t)||t!==this._$AH&&t!==L,n&&(this._$AH=t);else{const o=t;let a,r;for(t=s[0],a=0;a<s.length-1;a++)r=N(this,o[i+a],e,a),r===L&&(r=this._$AH[a]),n||(n=!C(r)||r!==this._$AH[a]),r===P?t=P:t!==P&&(t+=(null!=r?r:\"\")+s[a+1]),this._$AH[a]=r}n&&!o&&this.C(t)}C(t){t===P?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,null!=t?t:\"\")}}class G extends D{constructor(){super(...arguments),this.type=3}C(t){this.element[this.name]=t===P?void 0:t}}const q=_?_.emptyScript:\"\";class W extends D{constructor(){super(...arguments),this.type=4}C(t){t&&t!==P?this.element.setAttribute(this.name,q):this.element.removeAttribute(this.name)}}class F extends D{constructor(t,e,i,o,s){super(t,e,i,o,s),this.type=5}_$AI(t,e=this){var i;if((t=null!==(i=N(this,t,e,0))&&void 0!==i?i:P)===L)return;const o=this._$AH,s=t===P&&o!==P||t.capture!==o.capture||t.once!==o.once||t.passive!==o.passive,n=t!==P&&(o===P||s);s&&this.element.removeEventListener(this.name,this,o),n&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){var e,i;\"function\"==typeof this._$AH?this._$AH.call(null!==(i=null===(e=this.options)||void 0===e?void 0:e.host)&&void 0!==i?i:this.element,t):this._$AH.handleEvent(t)}}class Q{constructor(t,e,i){this.element=t,this.type=6,this._$AN=void 0,this._$AM=e,this.options=i}get _$AU(){return this._$AM._$AU}_$AI(t){N(this,t)}}const V=window.litHtmlPolyfillSupport;var K,J;null==V||V(j,B),(null!==(g=globalThis.litHtmlVersions)&&void 0!==g?g:globalThis.litHtmlVersions=[]).push(\"2.2.0\");class Y extends v{constructor(){super(...arguments),this.renderOptions={host:this},this._$Dt=void 0}createRenderRoot(){var t,e;const i=super.createRenderRoot();return null!==(t=(e=this.renderOptions).renderBefore)&&void 0!==t||(e.renderBefore=i.firstChild),i}update(t){const e=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Dt=((t,e,i)=>{var o,s;const n=null!==(o=null==i?void 0:i.renderBefore)&&void 0!==o?o:e;let a=n._$litPart$;if(void 0===a){const t=null!==(s=null==i?void 0:i.renderBefore)&&void 0!==s?s:null;n._$litPart$=a=new B(e.insertBefore(w(),t),t,void 0,null!=i?i:{})}return a._$AI(t),a})(e,this.renderRoot,this.renderOptions)}connectedCallback(){var t;super.connectedCallback(),null===(t=this._$Dt)||void 0===t||t.setConnected(!0)}disconnectedCallback(){var t;super.disconnectedCallback(),null===(t=this._$Dt)||void 0===t||t.setConnected(!1)}render(){return L}}Y.finalized=!0,Y._$litElement$=!0,null===(K=globalThis.litElementHydrateSupport)||void 0===K||K.call(globalThis,{LitElement:Y});const Z=globalThis.litElementPolyfillSupport;null==Z||Z({LitElement:Y}),(null!==(J=globalThis.litElementVersions)&&void 0!==J?J:globalThis.litElementVersions=[]).push(\"3.2.0\");const X=(t,e)=>\"method\"===e.kind&&e.descriptor&&!(\"value\"in e.descriptor)?{...e,finisher(i){i.createProperty(e.key,t)}}:{kind:\"field\",key:Symbol(),placement:\"own\",descriptor:{},originalKey:e.key,initializer(){\"function\"==typeof e.initializer&&(this[e.key]=e.initializer.call(this))},finisher(i){i.createProperty(e.key,t)}};function tt(t){return(e,i)=>void 0!==i?((t,e,i)=>{e.constructor.createProperty(i,t)})(t,e,i):X(t,e)}function et(t){return tt({...t,state:!0})}var it;null===(it=window.HTMLSlotElement)||void 0===it||it.prototype.assignedElements;var ot={},st={},nt={};Object.defineProperty(nt,\"__esModule\",{value:!0});nt.ContentRect=function(t){if(\"getBBox\"in t){var e=t.getBBox();return Object.freeze({height:e.height,left:0,top:0,width:e.width})}var i=window.getComputedStyle(t);return Object.freeze({height:parseFloat(i.height||\"0\"),left:parseFloat(i.paddingLeft||\"0\"),top:parseFloat(i.paddingTop||\"0\"),width:parseFloat(i.width||\"0\")})},Object.defineProperty(st,\"__esModule\",{value:!0});var at=nt,rt=function(){function t(t){this.target=t,this.$$broadcastWidth=this.$$broadcastHeight=0}return Object.defineProperty(t.prototype,\"broadcastWidth\",{get:function(){return this.$$broadcastWidth},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"broadcastHeight\",{get:function(){return this.$$broadcastHeight},enumerable:!0,configurable:!0}),t.prototype.isActive=function(){var t=at.ContentRect(this.target);return!!t&&(t.width!==this.broadcastWidth||t.height!==this.broadcastHeight)},t}();st.ResizeObservation=rt;var lt={};Object.defineProperty(lt,\"__esModule\",{value:!0});var dt=nt,ct=function(t){this.target=t,this.contentRect=dt.ContentRect(t)};lt.ResizeObserverEntry=ct,Object.defineProperty(ot,\"__esModule\",{value:!0});var ht=st,ut=lt,pt=[],vt=function(){function t(t){this.$$observationTargets=[],this.$$activeTargets=[],this.$$skippedTargets=[];var e=function(t){if(void 0===t)return\"Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.\";if(\"function\"!=typeof t)return\"Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.\"}(t);if(e)throw TypeError(e);this.$$callback=t}return t.prototype.observe=function(t){var e,i=ft(\"observe\",t);if(i)throw TypeError(i);mt(this.$$observationTargets,t)>=0||(this.$$observationTargets.push(new ht.ResizeObservation(t)),e=this,pt.indexOf(e)<0&&(pt.push(e),Et()))},t.prototype.unobserve=function(t){var e=ft(\"unobserve\",t);if(e)throw TypeError(e);var i=mt(this.$$observationTargets,t);i<0||(this.$$observationTargets.splice(i,1),0===this.$$observationTargets.length&&_t(this))},t.prototype.disconnect=function(){this.$$observationTargets=[],this.$$activeTargets=[],_t(this)},t}(),gt=ot.ResizeObserver=vt;function _t(t){var e=pt.indexOf(t);e>=0&&(pt.splice(e,1),xt())}function ft(t,e){return void 0===e?\"Failed to execute '\"+t+\"' on 'ResizeObserver': 1 argument required, but only 0 present.\":e&&e.nodeType===window.Node.ELEMENT_NODE?void 0:\"Failed to execute '\"+t+\"' on 'ResizeObserver': parameter 1 is not of type 'Element'.\"}function mt(t,e){for(var i=0;i<t.length;i+=1)if(t[i].target===e)return i;return-1}var yt,bt=function(t){pt.forEach((function(e){e.$$activeTargets=[],e.$$skippedTargets=[],e.$$observationTargets.forEach((function(i){i.isActive()&&(wt(i.target)>t?e.$$activeTargets.push(i):e.$$skippedTargets.push(i))}))}))},$t=function(){var t=1/0;return pt.forEach((function(e){if(e.$$activeTargets.length){var i=[];e.$$activeTargets.forEach((function(e){var o=new ut.ResizeObserverEntry(e.target);i.push(o),e.$$broadcastWidth=o.contentRect.width,e.$$broadcastHeight=o.contentRect.height;var s=wt(e.target);s<t&&(t=s)})),e.$$callback(i,e),e.$$activeTargets=[]}})),t},wt=function(t){for(var e=0;t.parentNode;)t=t.parentNode,e+=1;return e},Ct=function(){var t,e=0;for(bt(e);pt.some((function(t){return!!t.$$activeTargets.length}));)e=$t(),bt(e);pt.some((function(t){return!!t.$$skippedTargets.length}))&&(t=new window.ErrorEvent(\"ResizeLoopError\",{message:\"ResizeObserver loop completed with undelivered notifications.\"}),window.dispatchEvent(t))},Et=function(){yt||At()},At=function(){yt=window.requestAnimationFrame((function(){Ct(),At()}))},xt=function(){yt&&!pt.some((function(t){return!!t.$$observationTargets.length}))&&(window.cancelAnimationFrame(yt),yt=void 0)};ot.install=function(){return window.ResizeObserver=vt};class St extends Y{constructor(){super(...arguments),this.cards=[],this._editMode=!1,this._editorLoaded=!1}async setConfig(t){this._config=Object.assign({},t),this._config.view_layout&&void 0===this._config.layout&&(this._config.layout=this._config.view_layout)}async updated(t){var e,i,o,s,n;if(t.has(\"lovelace\")&&(null===(e=this.lovelace)||void 0===e?void 0:e.editMode)!=(null===(i=t.get(\"lovelace\"))||void 0===i?void 0:i.editMode)){if((null===(o=this.lovelace)||void 0===o?void 0:o.editMode)&&!this._editorLoaded){this._editorLoaded=!0;{const t=document.createElement(\"hui-masonry-view\");t.lovelace={editMode:!0},t.willUpdate(new Map)}}this.cards.forEach((t=>{var e;return t.editMode=null===(e=this.lovelace)||void 0===e?void 0:e.editMode})),this._editMode=null!==(n=null===(s=this.lovelace)||void 0===s?void 0:s.editMode)&&void 0!==n&&n}}_shouldShow(t,e,i){var o,s,n,a,r,l,d,c;return\"always\"===(null===(o=e.view_layout)||void 0===o?void 0:o.show)||\"never\"!==(null===(s=e.view_layout)||void 0===s?void 0:s.show)&&((\"shown\"!==(null===(a=null===(n=e.view_layout)||void 0===n?void 0:n.show)||void 0===a?void 0:a.sidebar)||\"auto\"!==(null===(r=this.hass)||void 0===r?void 0:r.dockedSidebar)&&!this.narrow)&&!(\"hidden\"===(null===(d=null===(l=e.view_layout)||void 0===l?void 0:l.show)||void 0===d?void 0:d.sidebar)&&\"docked\"===(null===(c=this.hass)||void 0===c?void 0:c.dockedSidebar)&&!this.narrow))}getCardElement(t){var e;if(!(null===(e=this.lovelace)||void 0===e?void 0:e.editMode))return t.card;const i=document.createElement(\"hui-card-options\");return i.hass=this.hass,i.lovelace=this.lovelace,i.path=[this.index,t.index],t.card.editMode=!0,i.appendChild(t.card),!1===t.show&&(i.style.border=\"1px solid red\"),i}_addCard(){this.dispatchEvent(new CustomEvent(\"ll-create-card\"))}_render_fab(){var t;return!0==!(null===(t=this.lovelace)||void 0===t?void 0:t.editMode)?U``:U`\n      <ha-fab .label=${\"Add card\"} extended @click=${this._addCard}>\n        <ha-icon slot=\"icon\" .icon=${\"mdi:plus\"}></ha-icon>\n      </ha-fab>\n    `}static get _fab_styles(){return n`\n      ha-fab {\n        position: sticky;\n        float: right;\n        right: calc(16px + env(safe-area-inset-right));\n        bottom: calc(16px + env(safe-area-inset-bottom));\n        z-index: 1;\n      }\n    `}}t([tt()],St.prototype,\"cards\",void 0),t([tt()],St.prototype,\"index\",void 0),t([tt()],St.prototype,\"narrow\",void 0),t([tt()],St.prototype,\"hass\",void 0),t([tt()],St.prototype,\"lovelace\",void 0),t([tt()],St.prototype,\"_editMode\",void 0),t([tt()],St.prototype,\"_config\",void 0);class Mt extends St{constructor(){super(...arguments),this._mediaQueries=[]}async setConfig(t){var e,i,o,s;await super.setConfig(t);for(const t of this._config.cards)if(\"string\"!=typeof(null===(e=t.view_layout)||void 0===e?void 0:e.show)&&(null===(o=null===(i=t.view_layout)||void 0===i?void 0:i.show)||void 0===o?void 0:o.mediaquery)){const e=window.matchMedia(`${t.view_layout.show.mediaquery}`);this._mediaQueries.push(e),e.addEventListener(\"change\",(()=>this._makeLayout()))}else this._mediaQueries.push(null);this._observer&&this._observer.disconnect(),this._observer=new gt((()=>{this._updateSize()})),this._cardObserver&&this._cardObserver.disconnect(),(null===(s=t.layout)||void 0===s?void 0:s.reflow)&&(this._cardObserver=new MutationObserver((t=>{for(const e of t)\"attributes\"!==e.type||\"style\"!==e.attributeName&&\"hidden\"!==e.attributeName||this._makeLayout()})))}async updated(t){var e;await super.updated(t),(t.has(\"_columns\")||t.has(\"cards\"))&&this._makeLayout(),t.has(\"_editMode\")&&this._makeLayout(),(t.has(\"narrow\")||t.has(\"hass\")&&(null===(e=t.get(\"hass\"))||void 0===e?void 0:e.dockedSidebar)!=this.hass.dockedSidebar)&&(this._updateSize(),this._makeLayout())}async firstUpdated(){var t,e,i,o,s,n,a,r,l,d,c,h,u,p,v,g;this._updateSize();const _=(null===(t=this._config.layout)||void 0===t?void 0:t.width)||300,f=(null===(e=this._config.layout)||void 0===e?void 0:e.max_width)||((null===(i=this._config.layout)||void 0===i?void 0:i.width)?Math.ceil(1.5*(null===(o=this._config.layout)||void 0===o?void 0:o.width)):500),m=(null===(s=this._config.layout)||void 0===s?void 0:s.width)?2*this._config.layout.width:600,y=document.createElement(\"style\");y.innerHTML=`\\n      :host {\\n        --column-max-width: ${f}px;\\n        --column-width: ${_}px;\\n        --column-widths: ${null!==(a=null===(n=this._config.layout)||void 0===n?void 0:n.column_widths)&&void 0!==a?a:\"none\"};\\n        --layout-margin: ${null!==(l=null===(r=this._config.layout)||void 0===r?void 0:r.margin)&&void 0!==l?l:\"4px 4px 0px 4px\"};\\n        --layout-padding: ${null!==(c=null===(d=this._config.layout)||void 0===d?void 0:d.padding)&&void 0!==c?c:\"0px\"};\\n        --card-margin: ${null!==(u=null===(h=this._config.layout)||void 0===h?void 0:h.card_margin)&&void 0!==u?u:\"var(--masonry-view-card-margin, 4px 4px 8px)\"};\\n        --layout-height: ${null!==(v=null===(p=this._config.layout)||void 0===p?void 0:p.height)&&void 0!==v?v:\"auto\"};\\n        --layout-overflow: ${void 0!==(null===(g=this._config.layout)||void 0===g?void 0:g.height)?\"auto\":\"visible\"};\\n      }\\n      @media (max-width: ${f}px) {\\n        .column:first-child > * {\\n          margin-left: 0;\\n        }\\n        .column:last-child > * {\\n          margin-right: 0;\\n        }\\n      }\\n      @media (max-width: ${m-1}px) {\\n        .column {\\n          --column-max-width: ${m}px;\\n        }\\n      }\\n    `,this.shadowRoot.appendChild(y)}connectedCallback(){super.connectedCallback(),this._updateSize()}disconnectedCallback(){super.disconnectedCallback(),this._observer.disconnect()}async _updateSize(){var t,e,i;let o=this.getBoundingClientRect().width,s=0;s=Math.floor(o/((null===(t=this._config.layout)||void 0===t?void 0:t.width)||300)),s=Math.min(s,(null===(e=this._config.layout)||void 0===e?void 0:e.max_cols)||(\"docked\"===(null===(i=this.hass)||void 0===i?void 0:i.dockedSidebar)?3:4)),s=Math.max(s,1),s!==this._columns&&(this._columns=s)}_shouldShow(t,e,i){var o;if(!super._shouldShow(t,e,i))return!1;if(null===(o=this._config.layout)||void 0===o?void 0:o.reflow){if(\"none\"===getComputedStyle(t).display)return!1;if(!0===t.hidden)return!1}const s=this._mediaQueries[i];return!s||!!s.matches}isBreak(t){return\"layout-break\"===t.localName}async _makeLayout(){this._makeColumnLayout()}async _makeColumnLayout(){var t;if(this._observer.disconnect(),this._cardObserver&&this._cardObserver.disconnect(),!this._columns)return;let e=[];for(let t=0;t<this._columns;t++){const t=document.createElement(\"div\");t.classList.add(\"column\"),t.length=0,e.push(t)}let i=this.cards.map(((t,e)=>{const i=this._config.cards[e];return{card:t,config:i,index:e,show:this._shouldShow(t,i,e)}}));await this._placeColumnCards(e,i.filter((t=>{var e;return(null===(e=this.lovelace)||void 0===e?void 0:e.editMode)||t.show}))),e=e.filter((t=>t.childElementCount>0)),(null===(t=this._config.layout)||void 0===t?void 0:t.rtl)&&e.reverse();const o=this.shadowRoot.querySelector(\"#columns\");for(;o.firstChild;)o.removeChild(o.firstChild);if(this._cardObserver)for(const t of this.cards)this._cardObserver.observe(t,{attributes:!0});for(const t of e)o.appendChild(t);this.requestUpdate(),await this.updateComplete,this._observer.observe(this)}async _placeColumnCards(t,e){}render(){return U`\n      <div id=\"columns\"></div>\n      ${this._render_fab()}\n    `}static get styles(){return[this._fab_styles,n`\n        :host {\n          display: block;\n          height: 100%;\n          box-sizing: border-box;\n          overflow-y: var(--layout-overflow);\n        }\n\n        #columns {\n          display: grid;\n          grid-auto-columns: minmax(\n            var(--column-width),\n            var(--column-max-width)\n          );\n          grid-template-columns: var(--column-widths);\n          justify-content: center;\n          justify-items: center;\n          margin: var(--layout-margin);\n          padding: var(--layout-padding);\n          height: var(--layout-height);\n          overflow-y: var(--layout-overflow);\n        }\n        .column {\n          grid-row: 1/2;\n          max-width: var(--column-max-width);\n          width: 100%;\n        }\n        .column > * {\n          display: block;\n          margin: var(--card-margin);\n        }\n      `]}}t([tt()],Mt.prototype,\"_columns\",void 0),t([tt()],Mt.prototype,\"_config\",void 0);customElements.define(\"masonry-layout\",class extends Mt{async _placeColumnCards(t,e){var i;const o=(null===(i=this._config.layout)||void 0===i?void 0:i.min_height)||5;function s(){let e=0;for(let i=0;i<t.length;i++){if(t[i].length&&t[i].length<o)return t[i];t[i].length<t[e].length&&(e=i)}return t[e]}for(const t of e){const e=s();e.appendChild(this.getCardElement(t)),e.length+=t.card.getCardSize?await Promise.race([t.card.getCardSize(),new Promise((t=>setTimeout((()=>t(1)),500)))]):1}}});customElements.define(\"horizontal-layout\",class extends Mt{async _placeColumnCards(t,e){var i,o;let s=0;for(const n of e){s+=1,(null===(i=n.config.view_layout)||void 0===i?void 0:i.column)&&(s=n.config.view_layout.column);const e=t[(s-1)%t.length];e.appendChild(this.getCardElement(n)),this.isBreak(n.card)&&(s=0,(null===(o=this.lovelace)||void 0===o?void 0:o.editMode)||e.removeChild(n.card))}}});customElements.define(\"vertical-layout\",class extends Mt{async _placeColumnCards(t,e){var i;let o=1;for(const s of e){(null===(i=s.config.view_layout)||void 0===i?void 0:i.column)&&(o=s.config.view_layout.column);t[(o-1)%t.length].appendChild(this.getCardElement(s)),this.isBreak(s.card)&&(o+=1)}}});class Tt extends HTMLElement{setConfig(){this.style.display=\"none\";const t=document.createElement(\"ha-card\");t.innerHTML=\"BREAK\",t.style.cssText=\"\\n      background: red;\\n      text-align: center;\\n      font-size: large;\\n      color: white;\\n      padding: 16px;\\n      \",this.appendChild(t)}getCardSize(){return 0}set editMode(t){this.style.display=t?\"block\":\"none\"}static getConfigElement(){return document.createElement(\"layout-break-editor\")}static getStubConfig(){return{}}}customElements.define(\"layout-break\",Tt),window.customCards=window.customCards||[],window.customCards.push({type:\"layout-break\",name:\"Layout Break\",preview:!1,description:\"Forces a break in the layout flow. For use with layout-card or special layouts.\"});class Ot extends HTMLElement{setConfig(t){const e=document.createElement(\"div\");e.innerHTML=\"BREAK\",this.appendChild(e)}}customElements.define(\"layout-break-editor\",Ot);customElements.define(\"grid-layout\",class extends St{constructor(){super(...arguments),this._mediaQueries=[],this._layoutMQs=[]}async setConfig(t){var e,i,o,s,n;await super.setConfig(t);for(const t of this._config.cards)if(\"string\"!=typeof(null===(e=t.view_layout)||void 0===e?void 0:e.show)&&(null===(o=null===(i=t.view_layout)||void 0===i?void 0:i.show)||void 0===o?void 0:o.mediaquery)){const e=window.matchMedia(`${t.view_layout.show.mediaquery}`);this._mediaQueries.push(e),e.addEventListener(\"change\",(()=>this._placeCards()))}else this._mediaQueries.push(null);if(null===(s=this._config.layout)||void 0===s?void 0:s.mediaquery)for(const[t,e]of Object.entries(null===(n=this._config.layout)||void 0===n?void 0:n.mediaquery)){const e=window.matchMedia(t);this._layoutMQs.push(e),e.addEventListener(\"change\",(()=>this._setGridStyles()))}this._setGridStyles()}async updated(t){await super.updated(t),(t.has(\"cards\")||t.has(\"_editMode\"))&&this._placeCards()}async firstUpdated(){var t,e,i,o,s,n,a;this._setGridStyles();const r=document.createElement(\"style\");r.innerHTML=`\\n      :host {\\n        --layout-margin: ${null!==(e=null===(t=this._config.layout)||void 0===t?void 0:t.margin)&&void 0!==e?e:\"4px 4px 0px 4px\"};\\n        --layout-padding: ${null!==(o=null===(i=this._config.layout)||void 0===i?void 0:i.padding)&&void 0!==o?o:\"0px\"};\\n        --layout-height: ${null!==(n=null===(s=this._config.layout)||void 0===s?void 0:s.height)&&void 0!==n?n:\"auto\"};\\n        --layout-overflow: ${void 0!==(null===(a=this._config.layout)||void 0===a?void 0:a.height)?\"auto\":\"visible\"};\\n      }`,this.shadowRoot.appendChild(r)}_setGridStyles(){var t;const e=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector(\"#root\");if(!e)return;const i=t=>{for(const[i,o]of Object.entries(t))(i.startsWith(\"grid\")||\"grid\"===i||\"place-items\"===i||\"place-content\"===i)&&e.style.setProperty(i,o)};e.style.cssText=\"\",this._config.layout&&i(this._config.layout);for(const t of this._layoutMQs)if(t.matches){i(this._config.layout.mediaquery[t.media]);break}}_shouldShow(t,e,i){if(!super._shouldShow(t,e,i))return!1;const o=this._mediaQueries[i];return!o||!!o.matches}_placeCards(){var t,e;const i=this.shadowRoot.querySelector(\"#root\");for(;i.firstChild;)i.removeChild(i.firstChild);let o=this.cards.map(((t,e)=>{const i=this._config.cards[e];return{card:t,config:i,index:e,show:this._shouldShow(t,i,e)}}));for(const s of o.filter((t=>{var e;return(null===(e=this.lovelace)||void 0===e?void 0:e.editMode)||t.show}))){const o=this.getCardElement(s);for(const[i,n]of Object.entries(null!==(e=null===(t=s.config)||void 0===t?void 0:t.view_layout)&&void 0!==e?e:{}))(i.startsWith(\"grid\")||\"place-self\"===i)&&o.style.setProperty(i,n);i.appendChild(o)}}render(){return U` <div id=\"root\"></div>\n      ${this._render_fab()}`}static get styles(){return[this._fab_styles,n`\n        :host {\n          height: 100%;\n          box-sizing: border-box;\n        }\n        #root {\n          display: grid;\n          justify-content: stretch;\n          margin: var(--layout-margin);\n          padding: var(--layout-padding);\n          height: var(--layout-height);\n          overflow-y: var(--layout-overflow);\n        }\n        #root > * {\n          margin: var(--masonry-view-card-margin, 4px 4px 8px);\n        }\n      `]}});class kt extends Y{constructor(){super(...arguments),this.editMode=!1,this.isPanel=!1,this._cards=[]}setConfig(t){this._config=Object.assign({},t),this._config.entities&&(this._config.cards=this._config.entities.map((t=>t.type?t:Object.assign(Object.assign({},t),{type:\"entity\"}))));let e=t.layout_type;e?((null==e?void 0:e.endsWith(\"-layout\"))||(e+=\"-layout\"),e.startsWith(\"custom:\")&&(e=e.substring(\"custom:\".length))):e=\"hui-masonry-view\",this._layoutType=e}async updated(t){var e;if(super.updated(t),t.has(\"_layoutType\")||t.has(\"_config\")){const t={type:this._layoutType,layout:this._config.layout||this._config.layout_options,cards:this._config.cards},i=document.createElement(this._layoutType);null===(e=i.setConfig)||void 0===e||e.call(i,t),this._layoutElement=i,await this._createCards(),this._layoutElement.hass=this.hass,this._layoutElement.narrow=!1,this._layoutElement.lovelace=Object.assign(Object.assign({},this._getLovelace()),{editMode:!1}),this._layoutElement.index=1}t.has(\"hass\")&&(this._cards.forEach((t=>{t.hass=this.hass})),this._layoutElement&&(this._layoutElement.hass=this.hass)),t.has(\"_cards\")&&this._layoutElement&&(this._layoutElement.cards=this._cards),t.has(\"editMode\")&&this._layoutElement&&(this._layoutElement.lovelace=Object.assign(Object.assign({},this._getLovelace()),{editMode:!1}))}_getLovelace(t=this){return t.lovelace?t.lovelace:\"home-assistant\"!==t.localName?t.parentElement&&t.parentElement.host?this._getLovelace(t.parentElement.host):t.parentNode&&t.parentNode.host?this._getLovelace(t.parentNode.host):t.parentElement?this._getLovelace(t.parentElement):t.parentNode?this._getLovelace(t.parentNode):void 0:void 0}_createCard(t,e){const i=e.createCardElement(t);return i.addEventListener(\"ll-rebuild\",(e=>{e.stopPropagation(),this._rebuildCard(i,t)})),i.hass=this.hass,i}async _createCards(){const t=await window.loadCardHelpers();this._cards=this._config.cards.map((e=>this._createCard(e,t)))}async _rebuildCard(t,e){const i=await window.loadCardHelpers(),o=this._createCard(e,i);t.parentElement&&t.parentElement.replaceChild(o,t),this._cards=this._cards.map((e=>e===t?o:e))}render(){return U`${this._layoutElement}`}static get styles(){return n`\n      :host(:not(:first-child)) {\n        margin-top: 0 !important;\n      }\n      :host(:not(:last-child)) {\n        margin-bottom: 0 !important;\n      }\n    `}static getConfigElement(){return document.createElement(\"layout-card-editor\")}static getStubConfig(){return{layout_type:\"masonry\",layout:{},cards:[]}}}t([tt()],kt.prototype,\"hass\",void 0),t([tt()],kt.prototype,\"editMode\",void 0),t([tt()],kt.prototype,\"isPanel\",void 0),t([tt()],kt.prototype,\"_config\",void 0),t([tt()],kt.prototype,\"_cards\",void 0),t([tt()],kt.prototype,\"_layoutElement\",void 0),t([tt()],kt.prototype,\"_layoutType\",void 0),customElements.define(\"layout-card\",kt),window.customCards=window.customCards||[],window.customCards.push({type:\"layout-card\",name:\"Layout Card\",preview:!1,description:\"Like a stack card, but with way more control.\"});const Ut=[{value:\"custom:masonry-layout\",label:\"Masonry (layout-card)\"},{value:\"custom:horizontal-layout\",label:\"Horizontal (layout-card)\"},{value:\"custom:vertical-layout\",label:\"Vertical (layout-card)\"},{value:\"custom:grid-layout\",label:\"Grid (layout-card)\"}],Lt=[\"masonry\",\"sidebar\",\"panel\"];class Pt extends Y{constructor(){super(...arguments),this._selectedTab=0,this._selectedCard=0,this._cardGUIMode=!0,this._cardGUIModeAvailable=!0,this._schema=t=>[{name:\"layout_type\",selector:{select:{options:[...Lt.map((e=>({value:e,label:t(`ui.panel.lovelace.editor.edit_view.types.${e}`)}))),...Ut]}}},{name:\"layout\",selector:{object:{}}}]}setConfig(t){this._config=t}firstUpdated(){(async()=>{var t,e;if(customElements.get(\"ha-form\"))return;const i=await(null===(e=(t=window).loadCardHelpers)||void 0===e?void 0:e.call(t));if(!i)return;const o=await i.createCardElement({type:\"entity\"});o&&await o.getConfigElement()})()}_handleSwitchTab(t){this._selectedTab=parseInt(t.detail.index,10)}_editCard(t){t.stopPropagation(),\"add-card\"!==t.target.id?(this._cardGUIMode=!0,this._cardEditorEl&&(this._cardEditorEl.GUImode=!0),this._cardGUIModeAvailable=!0,this._selectedCard=parseInt(t.detail.selected,10)):this._selectedCard=this._config.cards.length}_addCard(t){t.stopPropagation();const e=[...this._config.cards];e.push(t.detail.config),this._config=Object.assign(Object.assign({},this._config),{cards:e}),this._selectedCard=this._config.cards.length-1,this.dispatchEvent(new CustomEvent(\"config-changed\",{detail:{config:this._config}}))}_updateCard(t){t.stopPropagation();const e=[...this._config.cards];e[this._selectedCard]=t.detail.config,this._config=Object.assign(Object.assign({},this._config),{cards:e}),this._cardGUIModeAvailable=t.detail.guiModeAvailable,this.dispatchEvent(new CustomEvent(\"config-changed\",{detail:{config:this._config}}))}_GUIModeChange(t){t.stopPropagation(),this._cardGUIMode=t.detail.guiMode,this._cardGUIModeAvailable=t.detail.guiModeAvailable}_toggleMode(t){this._cardEditorEl.toggleMode()}_moveCard(t){const e=this._selectedCard,i=e+t.currentTarget.move,o=[...this._config.cards],s=o.splice(e,1)[0];o.splice(i,0,s),this._config=Object.assign(Object.assign({},this._config),{cards:o}),this._selectedCard=i,this.dispatchEvent(new CustomEvent(\"config-changed\",{detail:{config:this._config}}))}_deleteCard(){const t=[...this._config.cards];t.splice(this._selectedCard,1),this._config=Object.assign(Object.assign({},this._config),{cards:t}),this._selectedCard=Math.max(0,this._selectedCard-1),this.dispatchEvent(new CustomEvent(\"config-changed\",{detail:{config:this._config}}))}_valueChanged(t){t.stopPropagation();const e=t.detail.value;this.dispatchEvent(new CustomEvent(\"config-changed\",{detail:{config:e}}))}_computeLabel(t){return\"layout_type\"===t.name?this.hass.localize(\"ui.panel.lovelace.editor.edit_view.type\"):\"layout\"===t.name?\"Layout options (layout-card)\":void 0}render(){return this.hass&&this._config?U`\n      <div class=\"card-config\">\n        <div class=\"toolbar\">\n          <mwc-tab-bar\n            .activeIndex=${this._selectedTab}\n            @MDCTabBar:activated=${this._handleSwitchTab}\n          >\n            <mwc-tab .label=${\"Layout\"}></mwc-tab>\n            <mwc-tab .label=${\"Cards\"}></mwc-tab>\n          </mwc-tab-bar>\n        </div>\n        <div id=\"editor\">\n          ${[this._renderLayoutEditor,this._renderCardsEditor][this._selectedTab].bind(this)()}\n        </div>\n      </div>\n    `:U``}_renderLayoutEditor(){const t=this._schema(this.hass.localize),e=Object.assign({},this._config);return U`\n      <p>\n        See\n        <a\n          href=\"https://github.com/thomasloven/lovelace-layout-card\"\n          target=\"_blank\"\n          rel=\"no referrer\"\n        >\n          layout-card on github\n        </a>\n        for usage instructions.\n      </p>\n      <ha-form\n        .hass=${this.hass}\n        .data=${e}\n        .schema=${t}\n        .computeLabel=${this._computeLabel}\n        @value-changed=${this._valueChanged}\n      ></ha-form>\n    `}_renderCardsEditor(){const t=this._selectedCard,e=this._config.cards.length;return this._config.entities?U`\n        This layout-card has the <code>entities</code> parameter set. You cannot\n        manually select cards.\n      `:U`\n      <div class=\"cards\">\n        <div class=\"toolbar\">\n          <paper-tabs\n            scrollable\n            .selected=${t}\n            @iron-activate=${this._editCard}\n          >\n            ${this._config.cards.map(((t,e)=>U` <paper-tab> ${e+1} </paper-tab> `))}\n          </paper-tabs>\n          <paper-tabs\n            id=\"add-card\"\n            .selected=${t==e?\"0\":void 0}\n            @iron-activate=${this._editCard}\n          >\n            <paper-tab>\n              <ha-icon .icon=${\"mdi:plus\"}></ha-icon>\n            </paper-tab>\n          </paper-tabs>\n        </div>\n        <div id=\"editor\">\n          ${t<e?U`\n                <div class=\"card-options\">\n                  <mwc-button\n                    @click=${this._toggleMode}\n                    .disabled=${!this._cardGUIModeAvailable}\n                    class=\"gui-mode-button\"\n                  >\n                    ${this.hass.localize(this._cardEditorEl||this._cardGUIMode?\"ui.panel.lovelace.editor.edit_card.show_code_editor\":\"ui.panel.lovelace.editor.edit_card.show_visual_editor\")}\n                  </mwc-button>\n                  <mwc-icon-button\n                    .disabled=${0===t}\n                    @click=${this._moveCard}\n                    .move=${-1}\n                  >\n                    <ha-icon .icon=${\"mdi:arrow-left\"}></ha-icon>\n                  </mwc-icon-button>\n                  <mwc-icon-button\n                    .disabled=${t===e-1}\n                    @click=${this._moveCard}\n                    .move=${1}\n                  >\n                    <ha-icon .icon=${\"mdi:arrow-right\"}></ha-icon>\n                  </mwc-icon-button>\n                  <mwc-icon-button @click=${this._deleteCard}>\n                    <ha-icon .icon=${\"mdi:delete\"}></ha-icon>\n                  </mwc-icon-button>\n                </div>\n                <hui-card-element-editor\n                  .hass=${this.hass}\n                  .value=${this._config.cards[t]}\n                  .lovelace=${this.lovelace}\n                  @config-changed=${this._updateCard}\n                  @GUImode-changed=${this._GUIModeChange}\n                ></hui-card-element-editor>\n              `:U`\n                <hui-card-picker\n                  .hass=${this.hass}\n                  .lovelace=${this.lovelace}\n                  @config-changed=${this._addCard}\n                ></hui-card-picker>\n              `}\n        </div>\n      </div>\n    `}static get styles(){return[n`\n        mwc-tab-bar {\n          border-bottom: 1px solid var(--divider-color);\n        }\n\n        .layout,\n        .cards #editor {\n          margin-top: 8px;\n          border: 1px solid var(--divider-color);\n          padding: 12px;\n        }\n\n        .cards .toolbar {\n          display: flex;\n          --paper-tabs-selection-bar-color: var(--primary-color);\n          --paper-tab-ink: var(--primary-color);\n        }\n        paper-tabs {\n          display: flex;\n          font-size: 14px;\n          flex-grow: 1;\n        }\n        #add-card {\n          max-width: 32px;\n          padding: 0;\n        }\n\n        .cards .card-options {\n          display: flex;\n          justify-content: flex-end;\n          width: 100%;\n        }\n        #editor {\n          border: 1px solid var(--divider-color);\n          padding: 12px;\n        }\n        .gui-mode-button {\n          margin-right: auto;\n        }\n\n        a {\n          color: var(--primary-color);\n        }\n      `]}}t([tt()],Pt.prototype,\"_config\",void 0),t([tt()],Pt.prototype,\"lovelace\",void 0),t([tt()],Pt.prototype,\"hass\",void 0),t([et()],Pt.prototype,\"_selectedTab\",void 0),t([et()],Pt.prototype,\"_selectedCard\",void 0),t([et()],Pt.prototype,\"_cardGUIMode\",void 0),t([et()],Pt.prototype,\"_cardGUIModeAvailable\",void 0),t([function(t,e){return(({finisher:t,descriptor:e})=>(i,o)=>{var s;if(void 0===o){const o=null!==(s=i.originalKey)&&void 0!==s?s:i.key,n=null!=e?{kind:\"method\",placement:\"prototype\",key:o,descriptor:e(i.key)}:{...i,key:o};return null!=t&&(n.finisher=function(e){t(e,o)}),n}{const s=i.constructor;void 0!==e&&Object.defineProperty(i,o,e(o)),null==t||t(s,o)}})({descriptor:i=>{const o={get(){var e,i;return null!==(i=null===(e=this.renderRoot)||void 0===e?void 0:e.querySelector(t))&&void 0!==i?i:null},enumerable:!0,configurable:!0};if(e){const e=\"symbol\"==typeof i?Symbol():\"__\"+i;o.get=function(){var i,o;return void 0===this[e]&&(this[e]=null!==(o=null===(i=this.renderRoot)||void 0===i?void 0:i.querySelector(t))&&void 0!==o?o:null),this[e]}}return o}})}(\"hui-card-element-editor\")],Pt.prototype,\"_cardEditorEl\",void 0),customElements.define(\"layout-card-editor\",Pt),customElements.whenDefined(\"hui-card-element-editor\").then((()=>{const t=customElements.get(\"hui-card-element-editor\"),e=t.prototype.getConfigElement;t.prototype.getConfigElement=async function(){const t=await e.bind(this)();if(t){const e=t.setConfig;t.setConfig=function(t){let i=JSON.parse(JSON.stringify(t));this._layoutData=i.view_layout,delete i.view_layout,e.bind(this)(i)}}return t};const i=t.prototype._handleUIConfigChanged;t.prototype._handleUIConfigChanged=function(t){this._configElement&&this._configElement._layoutData&&(t.detail.config.view_layout=this._configElement._layoutData),i.bind(this)(t)}})),customElements.whenDefined(\"hui-view-editor\").then((()=>{const t=customElements.get(\"hui-view-editor\"),e=t.prototype.firstUpdated;t.prototype.firstUpdated=function(){null==e||e.bind(this)(),this._oldSchema=this._schema,this._schema=t=>{const e=this._oldSchema(t),i=e[e.length-1];return\"layout\"===i.name||(i.selector.select.options.push(...Ut),e.push({name:\"layout\",selector:{object:{}}})),e};const t=document.createElement(\"p\");t.innerHTML='\\n      You have layout-card installed which adds some options to this dialog. <br/>\\n      Please see\\n        <a\\n          href=\"https://github.com/thomasloven/lovelace-layout-card\"\\n          target=\"_blank\"\\n          rel=\"no referrer\"\\n        >\\n          layout-card on github\\n        </a>\\n        for usage instructions.\\n        <style>\\n          p {padding: 16px 0 0; margin-bottom: 0;}\\n          a {color: var(--primary-color);}\\n        </style>\\n    ',this.shadowRoot.appendChild(t),this.requestUpdate()}}));class Rt extends HTMLElement{setConfig(t){var e,i;this.height=null!==(e=t.height)&&void 0!==e?e:50,this.size=null!==(i=t.size)&&void 0!==i?i:Math.ceil(this.height/50),this.style.cssText=`\\n      display: block;\\n      height: ${this.height}px;\\n    `}getCardSize(){return this.size}static getConfigElement(){return document.createElement(\"gap-card-editor\")}static getStubConfig(){return{}}}customElements.define(\"gap-card\",Rt),window.customCards=window.customCards||[],window.customCards.push({type:\"gap-card\",name:\"Gap Card\",preview:!1,description:\"Add a customizable gap in the layout.\"});class zt extends Y{setConfig(t){this._config=t}heightChanged(t){const e=Object.assign({},this._config);delete e.height,t.detail.value&&(e.height=parseInt(t.detail.value)),this._config=e,this.dispatchEvent(new CustomEvent(\"config-changed\",{detail:{config:e}}))}sizeChanged(t){const e=Object.assign({},this._config);delete e.size,t.detail.value&&(e.size=parseInt(t.detail.value)),this._config=e,this.dispatchEvent(new CustomEvent(\"config-changed\",{detail:{config:e}}))}render(){return U`\n      <paper-input\n        .label=${\"Height (px) (optional)\"}\n        type=\"number\"\n        .value=${this._config.height}\n        @value-changed=${this.heightChanged}\n      ></paper-input>\n      <paper-input\n        .label=${\"Layout size (optional)\"}\n        type=\"number\"\n        .value=${this._config.size}\n        @value-changed=${this.sizeChanged}\n      ></paper-input>\n    `}}t([tt()],zt.prototype,\"_config\",void 0),customElements.define(\"gap-card-editor\",zt);var Ht=\"2.4.2\";console.groupCollapsed(`%cLAYOUT-CARD ${Ht} IS INSTALLED`,\"color: green; font-weight: bold\"),console.log(\"Readme:\",\"https://github.com/thomasloven/lovelace-layout-card\"),console.groupEnd();\n"
  },
  {
    "path": "home-assistant/www/community/lovelace-layout-card/rollup.config.js",
    "content": "import nodeResolve from \"@rollup/plugin-node-resolve\";\nimport json from \"@rollup/plugin-json\";\nimport commonjs from \"@rollup/plugin-commonjs\";\nimport typescript from \"rollup-plugin-typescript2\";\nimport { terser } from \"rollup-plugin-terser\";\nimport babel from \"@rollup/plugin-babel\";\n\nconst dev = process.env.ROLLUP_WATCH;\n\nexport default {\n  input: \"src/main.ts\",\n  output: {\n    file: \"layout-card.js\",\n    format: \"es\",\n  },\n  plugins: [\n    nodeResolve(),\n    commonjs(),\n    json(),\n    typescript(),\n    babel({\n      exclude: \"node_modules/**\",\n    }),\n    !dev && terser({ format: { comments: false } }),\n  ],\n};\n"
  },
  {
    "path": "home-assistant/www/community/lovelace-xiaomi-vacuum-map-card/xiaomi-vacuum-map-card.js",
    "content": "function e(e,t,a,i){var n,r=arguments.length,o=r<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,a):i;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)o=Reflect.decorate(e,t,a,i);else for(var l=e.length-1;l>=0;l--)(n=e[l])&&(o=(r<3?n(o):r>3?n(t,a,o):n(t,a))||o);return r>3&&o&&Object.defineProperty(t,a,o),o\n/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */}const t=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,a=Symbol(),i=new Map;class n{constructor(e,t){if(this._$cssResult$=!0,t!==a)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=e}get styleSheet(){let e=i.get(this.cssText);return t&&void 0===e&&(i.set(this.cssText,e=new CSSStyleSheet),e.replaceSync(this.cssText)),e}toString(){return this.cssText}}const r=(e,...t)=>{const i=1===e.length?e[0]:t.reduce(((t,a,i)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if(\"number\"==typeof e)return e;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+e+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(a)+e[i+1]),e[0]);return new n(i,a)},o=t?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t=\"\";for(const a of e.cssRules)t+=a.cssText;return(e=>new n(\"string\"==typeof e?e:e+\"\",a))(t)})(e):e\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */;var l;const s=window.trustedTypes,c=s?s.emptyScript:\"\",d=window.reactiveElementPolyfillSupport,u={toAttribute(e,t){switch(t){case Boolean:e=e?c:null;break;case Object:case Array:e=null==e?e:JSON.stringify(e)}return e},fromAttribute(e,t){let a=e;switch(t){case Boolean:a=null!==e;break;case Number:a=null===e?null:Number(e);break;case Object:case Array:try{a=JSON.parse(e)}catch(e){a=null}}return a}},m=(e,t)=>t!==e&&(t==t||e==e),p={attribute:!0,type:String,converter:u,reflect:!1,hasChanged:m};class _ extends HTMLElement{constructor(){super(),this._$Et=new Map,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Ei=null,this.o()}static addInitializer(e){var t;null!==(t=this.l)&&void 0!==t||(this.l=[]),this.l.push(e)}static get observedAttributes(){this.finalize();const e=[];return this.elementProperties.forEach(((t,a)=>{const i=this._$Eh(a,t);void 0!==i&&(this._$Eu.set(i,a),e.push(i))})),e}static createProperty(e,t=p){if(t.state&&(t.attribute=!1),this.finalize(),this.elementProperties.set(e,t),!t.noAccessor&&!this.prototype.hasOwnProperty(e)){const a=\"symbol\"==typeof e?Symbol():\"__\"+e,i=this.getPropertyDescriptor(e,a,t);void 0!==i&&Object.defineProperty(this.prototype,e,i)}}static getPropertyDescriptor(e,t,a){return{get(){return this[t]},set(i){const n=this[e];this[t]=i,this.requestUpdate(e,n,a)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)||p}static finalize(){if(this.hasOwnProperty(\"finalized\"))return!1;this.finalized=!0;const e=Object.getPrototypeOf(this);if(e.finalize(),this.elementProperties=new Map(e.elementProperties),this._$Eu=new Map,this.hasOwnProperty(\"properties\")){const e=this.properties,t=[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)];for(const a of t)this.createProperty(a,e[a])}return this.elementStyles=this.finalizeStyles(this.styles),!0}static finalizeStyles(e){const t=[];if(Array.isArray(e)){const a=new Set(e.flat(1/0).reverse());for(const e of a)t.unshift(o(e))}else void 0!==e&&t.push(o(e));return t}static _$Eh(e,t){const a=t.attribute;return!1===a?void 0:\"string\"==typeof a?a:\"string\"==typeof e?e.toLowerCase():void 0}o(){var e;this._$Ep=new Promise((e=>this.enableUpdating=e)),this._$AL=new Map,this._$Em(),this.requestUpdate(),null===(e=this.constructor.l)||void 0===e||e.forEach((e=>e(this)))}addController(e){var t,a;(null!==(t=this._$Eg)&&void 0!==t?t:this._$Eg=[]).push(e),void 0!==this.renderRoot&&this.isConnected&&(null===(a=e.hostConnected)||void 0===a||a.call(e))}removeController(e){var t;null===(t=this._$Eg)||void 0===t||t.splice(this._$Eg.indexOf(e)>>>0,1)}_$Em(){this.constructor.elementProperties.forEach(((e,t)=>{this.hasOwnProperty(t)&&(this._$Et.set(t,this[t]),delete this[t])}))}createRenderRoot(){var e;const a=null!==(e=this.shadowRoot)&&void 0!==e?e:this.attachShadow(this.constructor.shadowRootOptions);return((e,a)=>{t?e.adoptedStyleSheets=a.map((e=>e instanceof CSSStyleSheet?e:e.styleSheet)):a.forEach((t=>{const a=document.createElement(\"style\"),i=window.litNonce;void 0!==i&&a.setAttribute(\"nonce\",i),a.textContent=t.cssText,e.appendChild(a)}))})(a,this.constructor.elementStyles),a}connectedCallback(){var e;void 0===this.renderRoot&&(this.renderRoot=this.createRenderRoot()),this.enableUpdating(!0),null===(e=this._$Eg)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostConnected)||void 0===t?void 0:t.call(e)}))}enableUpdating(e){}disconnectedCallback(){var e;null===(e=this._$Eg)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostDisconnected)||void 0===t?void 0:t.call(e)}))}attributeChangedCallback(e,t,a){this._$AK(e,a)}_$ES(e,t,a=p){var i,n;const r=this.constructor._$Eh(e,a);if(void 0!==r&&!0===a.reflect){const o=(null!==(n=null===(i=a.converter)||void 0===i?void 0:i.toAttribute)&&void 0!==n?n:u.toAttribute)(t,a.type);this._$Ei=e,null==o?this.removeAttribute(r):this.setAttribute(r,o),this._$Ei=null}}_$AK(e,t){var a,i,n;const r=this.constructor,o=r._$Eu.get(e);if(void 0!==o&&this._$Ei!==o){const e=r.getPropertyOptions(o),l=e.converter,s=null!==(n=null!==(i=null===(a=l)||void 0===a?void 0:a.fromAttribute)&&void 0!==i?i:\"function\"==typeof l?l:null)&&void 0!==n?n:u.fromAttribute;this._$Ei=o,this[o]=s(t,e.type),this._$Ei=null}}requestUpdate(e,t,a){let i=!0;void 0!==e&&(((a=a||this.constructor.getPropertyOptions(e)).hasChanged||m)(this[e],t)?(this._$AL.has(e)||this._$AL.set(e,t),!0===a.reflect&&this._$Ei!==e&&(void 0===this._$EC&&(this._$EC=new Map),this._$EC.set(e,a))):i=!1),!this.isUpdatePending&&i&&(this._$Ep=this._$E_())}async _$E_(){this.isUpdatePending=!0;try{await this._$Ep}catch(e){Promise.reject(e)}const e=this.scheduleUpdate();return null!=e&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){var e;if(!this.isUpdatePending)return;this.hasUpdated,this._$Et&&(this._$Et.forEach(((e,t)=>this[t]=e)),this._$Et=void 0);let t=!1;const a=this._$AL;try{t=this.shouldUpdate(a),t?(this.willUpdate(a),null===(e=this._$Eg)||void 0===e||e.forEach((e=>{var t;return null===(t=e.hostUpdate)||void 0===t?void 0:t.call(e)})),this.update(a)):this._$EU()}catch(e){throw t=!1,this._$EU(),e}t&&this._$AE(a)}willUpdate(e){}_$AE(e){var t;null===(t=this._$Eg)||void 0===t||t.forEach((e=>{var t;return null===(t=e.hostUpdated)||void 0===t?void 0:t.call(e)})),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EU(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$Ep}shouldUpdate(e){return!0}update(e){void 0!==this._$EC&&(this._$EC.forEach(((e,t)=>this._$ES(t,this[t],e))),this._$EC=void 0),this._$EU()}updated(e){}firstUpdated(e){}}\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nvar g;_.finalized=!0,_.elementProperties=new Map,_.elementStyles=[],_.shadowRootOptions={mode:\"open\"},null==d||d({ReactiveElement:_}),(null!==(l=globalThis.reactiveElementVersions)&&void 0!==l?l:globalThis.reactiveElementVersions=[]).push(\"1.3.2\");const v=globalThis.trustedTypes,h=v?v.createPolicy(\"lit-html\",{createHTML:e=>e}):void 0,f=`lit$${(Math.random()+\"\").slice(9)}$`,b=\"?\"+f,y=`<${b}>`,k=document,A=(e=\"\")=>k.createComment(e),x=e=>null===e||\"object\"!=typeof e&&\"function\"!=typeof e,z=Array.isArray,E=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,w=/-->/g,S=/>/g,P=/>|[ \t\\n\f\\r](?:([^\\s\"'>=/]+)([ \t\\n\f\\r]*=[ \t\\n\f\\r]*(?:[^ \t\\n\f\\r\"'`<>=]|(\"|')|))|$)/g,M=/'/g,C=/\"/g,T=/^(?:script|style|textarea|title)$/i,$=e=>(t,...a)=>({_$litType$:e,strings:t,values:a}),N=$(1),R=$(2),j=Symbol.for(\"lit-noChange\"),O=Symbol.for(\"lit-nothing\"),L=new WeakMap,I=k.createTreeWalker(k,129,null,!1),D=(e,t)=>{const a=e.length-1,i=[];let n,r=2===t?\"<svg>\":\"\",o=E;for(let t=0;t<a;t++){const a=e[t];let l,s,c=-1,d=0;for(;d<a.length&&(o.lastIndex=d,s=o.exec(a),null!==s);)d=o.lastIndex,o===E?\"!--\"===s[1]?o=w:void 0!==s[1]?o=S:void 0!==s[2]?(T.test(s[2])&&(n=RegExp(\"</\"+s[2],\"g\")),o=P):void 0!==s[3]&&(o=P):o===P?\">\"===s[0]?(o=null!=n?n:E,c=-1):void 0===s[1]?c=-2:(c=o.lastIndex-s[2].length,l=s[1],o=void 0===s[3]?P:'\"'===s[3]?C:M):o===C||o===M?o=P:o===w||o===S?o=E:(o=P,n=void 0);const u=o===P&&e[t+1].startsWith(\"/>\")?\" \":\"\";r+=o===E?a+y:c>=0?(i.push(l),a.slice(0,c)+\"$lit$\"+a.slice(c)+f+u):a+f+(-2===c?(i.push(void 0),t):u)}const l=r+(e[a]||\"<?>\")+(2===t?\"</svg>\":\"\");if(!Array.isArray(e)||!e.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return[void 0!==h?h.createHTML(l):l,i]};class U{constructor({strings:e,_$litType$:t},a){let i;this.parts=[];let n=0,r=0;const o=e.length-1,l=this.parts,[s,c]=D(e,t);if(this.el=U.createElement(s,a),I.currentNode=this.el.content,2===t){const e=this.el.content,t=e.firstChild;t.remove(),e.append(...t.childNodes)}for(;null!==(i=I.nextNode())&&l.length<o;){if(1===i.nodeType){if(i.hasAttributes()){const e=[];for(const t of i.getAttributeNames())if(t.endsWith(\"$lit$\")||t.startsWith(f)){const a=c[r++];if(e.push(t),void 0!==a){const e=i.getAttribute(a.toLowerCase()+\"$lit$\").split(f),t=/([.?@])?(.*)/.exec(a);l.push({type:1,index:n,name:t[2],strings:e,ctor:\".\"===t[1]?G:\"?\"===t[1]?K:\"@\"===t[1]?q:Z})}else l.push({type:6,index:n})}for(const t of e)i.removeAttribute(t)}if(T.test(i.tagName)){const e=i.textContent.split(f),t=e.length-1;if(t>0){i.textContent=v?v.emptyScript:\"\";for(let a=0;a<t;a++)i.append(e[a],A()),I.nextNode(),l.push({type:2,index:++n});i.append(e[t],A())}}}else if(8===i.nodeType)if(i.data===b)l.push({type:2,index:n});else{let e=-1;for(;-1!==(e=i.data.indexOf(f,e+1));)l.push({type:7,index:n}),e+=f.length-1}n++}}static createElement(e,t){const a=k.createElement(\"template\");return a.innerHTML=e,a}}function F(e,t,a=e,i){var n,r,o,l;if(t===j)return t;let s=void 0!==i?null===(n=a._$Cl)||void 0===n?void 0:n[i]:a._$Cu;const c=x(t)?void 0:t._$litDirective$;return(null==s?void 0:s.constructor)!==c&&(null===(r=null==s?void 0:s._$AO)||void 0===r||r.call(s,!1),void 0===c?s=void 0:(s=new c(e),s._$AT(e,a,i)),void 0!==i?(null!==(o=(l=a)._$Cl)&&void 0!==o?o:l._$Cl=[])[i]=s:a._$Cu=s),void 0!==s&&(t=F(e,s._$AS(e,t.values),s,i)),t}class V{constructor(e,t){this.v=[],this._$AN=void 0,this._$AD=e,this._$AM=t}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}p(e){var t;const{el:{content:a},parts:i}=this._$AD,n=(null!==(t=null==e?void 0:e.creationScope)&&void 0!==t?t:k).importNode(a,!0);I.currentNode=n;let r=I.nextNode(),o=0,l=0,s=i[0];for(;void 0!==s;){if(o===s.index){let t;2===s.type?t=new H(r,r.nextSibling,this,e):1===s.type?t=new s.ctor(r,s.name,s.strings,this,e):6===s.type&&(t=new B(r,this,e)),this.v.push(t),s=i[++l]}o!==(null==s?void 0:s.index)&&(r=I.nextNode(),o++)}return n}m(e){let t=0;for(const a of this.v)void 0!==a&&(void 0!==a.strings?(a._$AI(e,a,t),t+=a.strings.length-2):a._$AI(e[t])),t++}}class H{constructor(e,t,a,i){var n;this.type=2,this._$AH=O,this._$AN=void 0,this._$AA=e,this._$AB=t,this._$AM=a,this.options=i,this._$Cg=null===(n=null==i?void 0:i.isConnected)||void 0===n||n}get _$AU(){var e,t;return null!==(t=null===(e=this._$AM)||void 0===e?void 0:e._$AU)&&void 0!==t?t:this._$Cg}get parentNode(){let e=this._$AA.parentNode;const t=this._$AM;return void 0!==t&&11===e.nodeType&&(e=t.parentNode),e}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(e,t=this){e=F(this,e,t),x(e)?e===O||null==e||\"\"===e?(this._$AH!==O&&this._$AR(),this._$AH=O):e!==this._$AH&&e!==j&&this.$(e):void 0!==e._$litType$?this.T(e):void 0!==e.nodeType?this.k(e):(e=>{var t;return z(e)||\"function\"==typeof(null===(t=e)||void 0===t?void 0:t[Symbol.iterator])})(e)?this.S(e):this.$(e)}M(e,t=this._$AB){return this._$AA.parentNode.insertBefore(e,t)}k(e){this._$AH!==e&&(this._$AR(),this._$AH=this.M(e))}$(e){this._$AH!==O&&x(this._$AH)?this._$AA.nextSibling.data=e:this.k(k.createTextNode(e)),this._$AH=e}T(e){var t;const{values:a,_$litType$:i}=e,n=\"number\"==typeof i?this._$AC(e):(void 0===i.el&&(i.el=U.createElement(i.h,this.options)),i);if((null===(t=this._$AH)||void 0===t?void 0:t._$AD)===n)this._$AH.m(a);else{const e=new V(n,this),t=e.p(this.options);e.m(a),this.k(t),this._$AH=e}}_$AC(e){let t=L.get(e.strings);return void 0===t&&L.set(e.strings,t=new U(e)),t}S(e){z(this._$AH)||(this._$AH=[],this._$AR());const t=this._$AH;let a,i=0;for(const n of e)i===t.length?t.push(a=new H(this.M(A()),this.M(A()),this,this.options)):a=t[i],a._$AI(n),i++;i<t.length&&(this._$AR(a&&a._$AB.nextSibling,i),t.length=i)}_$AR(e=this._$AA.nextSibling,t){var a;for(null===(a=this._$AP)||void 0===a||a.call(this,!1,!0,t);e&&e!==this._$AB;){const t=e.nextSibling;e.remove(),e=t}}setConnected(e){var t;void 0===this._$AM&&(this._$Cg=e,null===(t=this._$AP)||void 0===t||t.call(this,e))}}class Z{constructor(e,t,a,i,n){this.type=1,this._$AH=O,this._$AN=void 0,this.element=e,this.name=t,this._$AM=i,this.options=n,a.length>2||\"\"!==a[0]||\"\"!==a[1]?(this._$AH=Array(a.length-1).fill(new String),this.strings=a):this._$AH=O}get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}_$AI(e,t=this,a,i){const n=this.strings;let r=!1;if(void 0===n)e=F(this,e,t,0),r=!x(e)||e!==this._$AH&&e!==j,r&&(this._$AH=e);else{const i=e;let o,l;for(e=n[0],o=0;o<n.length-1;o++)l=F(this,i[a+o],t,o),l===j&&(l=this._$AH[o]),r||(r=!x(l)||l!==this._$AH[o]),l===O?e=O:e!==O&&(e+=(null!=l?l:\"\")+n[o+1]),this._$AH[o]=l}r&&!i&&this.C(e)}C(e){e===O?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,null!=e?e:\"\")}}class G extends Z{constructor(){super(...arguments),this.type=3}C(e){this.element[this.name]=e===O?void 0:e}}const X=v?v.emptyScript:\"\";class K extends Z{constructor(){super(...arguments),this.type=4}C(e){e&&e!==O?this.element.setAttribute(this.name,X):this.element.removeAttribute(this.name)}}class q extends Z{constructor(e,t,a,i,n){super(e,t,a,i,n),this.type=5}_$AI(e,t=this){var a;if((e=null!==(a=F(this,e,t,0))&&void 0!==a?a:O)===j)return;const i=this._$AH,n=e===O&&i!==O||e.capture!==i.capture||e.once!==i.once||e.passive!==i.passive,r=e!==O&&(i===O||n);n&&this.element.removeEventListener(this.name,this,i),r&&this.element.addEventListener(this.name,this,e),this._$AH=e}handleEvent(e){var t,a;\"function\"==typeof this._$AH?this._$AH.call(null!==(a=null===(t=this.options)||void 0===t?void 0:t.host)&&void 0!==a?a:this.element,e):this._$AH.handleEvent(e)}}class B{constructor(e,t,a){this.element=e,this.type=6,this._$AN=void 0,this._$AM=t,this.options=a}get _$AU(){return this._$AM._$AU}_$AI(e){F(this,e)}}const Y=window.litHtmlPolyfillSupport;\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nvar W,J;null==Y||Y(U,H),(null!==(g=globalThis.litHtmlVersions)&&void 0!==g?g:globalThis.litHtmlVersions=[]).push(\"2.2.3\");class Q extends _{constructor(){super(...arguments),this.renderOptions={host:this},this._$Dt=void 0}createRenderRoot(){var e,t;const a=super.createRenderRoot();return null!==(e=(t=this.renderOptions).renderBefore)&&void 0!==e||(t.renderBefore=a.firstChild),a}update(e){const t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Dt=((e,t,a)=>{var i,n;const r=null!==(i=null==a?void 0:a.renderBefore)&&void 0!==i?i:t;let o=r._$litPart$;if(void 0===o){const e=null!==(n=null==a?void 0:a.renderBefore)&&void 0!==n?n:null;r._$litPart$=o=new H(t.insertBefore(A(),e),e,void 0,null!=a?a:{})}return o._$AI(e),o})(t,this.renderRoot,this.renderOptions)}connectedCallback(){var e;super.connectedCallback(),null===(e=this._$Dt)||void 0===e||e.setConnected(!0)}disconnectedCallback(){var e;super.disconnectedCallback(),null===(e=this._$Dt)||void 0===e||e.setConnected(!1)}render(){return j}}Q.finalized=!0,Q._$litElement$=!0,null===(W=globalThis.litElementHydrateSupport)||void 0===W||W.call(globalThis,{LitElement:Q});const ee=globalThis.litElementPolyfillSupport;null==ee||ee({LitElement:Q}),(null!==(J=globalThis.litElementVersions)&&void 0!==J?J:globalThis.litElementVersions=[]).push(\"3.2.0\");\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst te=e=>t=>\"function\"==typeof t?((e,t)=>(window.customElements.define(e,t),t))(e,t):((e,t)=>{const{kind:a,elements:i}=t;return{kind:a,elements:i,finisher(t){window.customElements.define(e,t)}}})(e,t)\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */,ae=(e,t)=>\"method\"===t.kind&&t.descriptor&&!(\"value\"in t.descriptor)?{...t,finisher(a){a.createProperty(t.key,e)}}:{kind:\"field\",key:Symbol(),placement:\"own\",descriptor:{},originalKey:t.key,initializer(){\"function\"==typeof t.initializer&&(this[t.key]=t.initializer.call(this))},finisher(a){a.createProperty(t.key,e)}};function ie(e){return(t,a)=>void 0!==a?((e,t,a)=>{t.constructor.createProperty(a,e)})(e,t,a):ae(e,t)\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */}function ne(e){return ie({...e,state:!0})}\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */var re,oe,le;null===(re=window.HTMLSlotElement)||void 0===re||re.prototype.assignedElements,function(e){e.language=\"language\",e.system=\"system\",e.comma_decimal=\"comma_decimal\",e.decimal_comma=\"decimal_comma\",e.space_comma=\"space_comma\",e.none=\"none\"}(oe||(oe={})),function(e){e.language=\"language\",e.system=\"system\",e.am_pm=\"12\",e.twenty_four=\"24\"}(le||(le={}));var se=[\"closed\",\"locked\",\"off\"],ce=function(e,t,a,i){i=i||{},a=null==a?{}:a;var n=new Event(t,{bubbles:void 0===i.bubbles||i.bubbles,cancelable:Boolean(i.cancelable),composed:void 0===i.composed||i.composed});return n.detail=a,e.dispatchEvent(n),n},de=function(e){ce(window,\"haptic\",e)},ue=function(e,t,a,i){if(i||(i={action:\"more-info\"}),!i.confirmation||i.confirmation.exemptions&&i.confirmation.exemptions.some((function(e){return e.user===t.user.id}))||(de(\"warning\"),confirm(i.confirmation.text||\"Are you sure you want to \"+i.action+\"?\")))switch(i.action){case\"more-info\":(a.entity||a.camera_image)&&ce(e,\"hass-more-info\",{entityId:a.entity?a.entity:a.camera_image});break;case\"navigate\":i.navigation_path&&function(e,t,a){void 0===a&&(a=!1),a?history.replaceState(null,\"\",t):history.pushState(null,\"\",t),ce(window,\"location-changed\",{replace:a})}(0,i.navigation_path);break;case\"url\":i.url_path&&window.open(i.url_path);break;case\"toggle\":a.entity&&(function(e,t){(function(e,t,a){void 0===a&&(a=!0);var i,n=function(e){return e.substr(0,e.indexOf(\".\"))}(t),r=\"group\"===n?\"homeassistant\":n;switch(n){case\"lock\":i=a?\"unlock\":\"lock\";break;case\"cover\":i=a?\"open_cover\":\"close_cover\";break;default:i=a?\"turn_on\":\"turn_off\"}e.callService(r,i,{entity_id:t})})(e,t,se.includes(e.states[t].state))}(t,a.entity),de(\"success\"));break;case\"call-service\":if(!i.service)return void de(\"failure\");var n=i.service.split(\".\",2);t.callService(n[0],n[1],i.service_data,i.target),de(\"success\");break;case\"fire-dom-event\":ce(e,\"ll-custom\",i)}};function me(e){return void 0!==e&&\"none\"!==e.action}var pe={version:\"Verze\",invalid_configuration:\"Neplatná konfigurace {0}\",description:\"Karta pomocí které můžete ovládat váš vysavač\",old_configuration:\"Detekována zastaralá konfigurace. Upravte prosím konfiguraci nebo kartu vytvořte znovu od začátku.\",old_configuration_migration_link:\"Návod na úpravu konfigurace\"},_e={invalid:\"Neplatná šablona\",vacuum_goto:\"Přesun na bod\",vacuum_goto_predefined:\"Přesun na bod ze seznamu\",vacuum_clean_segment:\"Úklid místnosti\",vacuum_clean_point:\"Úklid bodu\",vacuum_clean_point_predefined:\"Úklid bodu ze seznamu\",vacuum_clean_zone:\"Úklid oblasti\",vacuum_clean_zone_predefined:\"Úklid oblasti ze seznamu\",vacuum_follow_path:\"Trasa\"},ge={preset:{entity:{missing:'Chybějící položka \"entity\"'},preset_name:{missing:'Chybějící položka \"preset_name\"'},platform:{invalid:\"Neplatná platforma vysavače: {0}\"},map_source:{missing:'Chybějící položka \"map_source\"',none_provided:\"Chybějící odkaz na kameru nebo obrázek s mapou\",ambiguous:\"Povolen pouze jeden zdroj mapy\"},calibration_source:{missing:'Chybějící položka \"calibration_source\"',ambiguous:\"Povolen pouze jeden zdroj kalibrace\",none_provided:\"Chybějící zdroj kalibrace\",calibration_points:{invalid_number:\"Požadovány 3 nebo 4 kalibrační body\",missing_map:\"Každý kalibrační bod musí obsahovat souřadnice mapy\",missing_vacuum:\"Každý kalibrační bod musí obsahovat souřadnice vysavače\",missing_coordinate:'Souřadnice mapy i vysavače musí vždy obsahovat položku \"x\" a \"y\"'}},icons:{invalid:'Neplatná konfigurace pro položku \"icons\"',icon:{missing:'Každý záznam v seznamu ikon musí vždy obsahovat položku \"icon\"'}},tiles:{invalid:'Neplatná konfigurace pro položku \"tiles\"',entity:{missing:'Každý záznam v seznamu dlaždic musí vždy obsahovat položku \"entity\"'},label:{missing:'Každý záznam v seznamu dlaždic musí vždy obsahovat položku \"label\"'}},map_modes:{invalid:'Neplatná konfigurace pro položku \"map_modes\"',icon:{missing:\"Chybějící ikona pro mapový režim\"},name:{missing:\"Chybějící název pro mapový režim\"},template:{invalid:\"Neplatná šablona: {0}\"},predefined_selections:{not_applicable:\"Režim {0} nepodporuje výběr z přednastavených možností\",zones:{missing:\"Chybějící konfigurace oblastí\",invalid_parameters_number:\"Každá oblast musí mít 4 parametry\"},points:{position:{missing:\"Chybějící konfigurace bodů\",invalid_parameters_number:\"Každý bod musí mít 2 parametry\"}},rooms:{id:{missing:\"Chybějící identifikátor místnosti\",invalid_format:\"Neplatný identifikátor místnosti: {0}\"},outline:{invalid_parameters_number:\"Každý bod ohraničení místnosti musí mít 2 parametry\"}},label:{x:{missing:'Popisek musí mít položku \"x\"'},y:{missing:'Popisek musí mít položku \"y\"'},text:{missing:'Popisek musí mít položku \"text\"'}},icon:{x:{missing:'Ikona musí mít položku \"x\"'},y:{missing:'Ikona musí mít položku \"y\"'},name:{missing:'Ikona musí mít položku \"name\"'}}},service_call_schema:{missing:\"Chybějící formát volání služby\",service:{missing:'Formát volání služby musí obsahovat položku \"service\"',invalid:\"Neplatná služba: {0}\"}}}},invalid_entities:\"Neplatné entity:\",invalid_calibration:\"Neplatná kalibrace, prosím zkontrolujte konfiguraci\"},ve={status:{label:\"Stav\",value:{Starting:\"Zapínání\",\"Charger disconnected\":\"Nabíječka odpojena\",Idle:\"Nečinný\",\"Remote control active\":\"Dálkové ovládání aktivní\",Cleaning:\"Uklízení\",\"Returning home\":\"Návrat do základny\",\"Manual mode\":\"Manuální režim\",Charging:\"Nabíjení\",\"Charging problem\":\"Problém s nabíjením\",Paused:\"Pozastaven\",\"Spot cleaning\":\"Uklízení bodu\",Error:\"Chyba\",\"Shutting down\":\"Vypínání\",Updating:\"Probíhá aktualizace\",Docking:\"Parkování\",\"Going to target\":\"Přesun na bod\",\"Zoned cleaning\":\"Uklízení oblasti\",\"Segment cleaning\":\"Uklízení místnosti\",\"Emptying the bin\":\"Vyprazdňování zásobníku\",\"Charging complete\":\"Nabíjení dokončeno\",\"Device offline\":\"Zařízení je nedostupné\"}},battery_level:{label:\"Baterie\"},fan_speed:{label:\"Stupeň vysávání\",value:{Silent:\"Tichý\",Standard:\"Standardní\",Medium:\"Střední\",Turbo:\"Turbo\",Auto:\"Automatický\",Gentle:\"Slabý\"}},sensor_dirty_left:{label:\"Čistota senzorů\"},filter_left:{label:\"Životnost filtru\"},main_brush_left:{label:\"Životnost hlavního kartáče\"},side_brush_left:{label:\"Životnost bočních kartáčů\"},cleaning_count:{label:\"Počet úklidů\"},cleaned_area:{label:\"Uklizená plocha\"},cleaning_time:{label:\"Doba uklízení\"},mop_left:{label:\"Životnost mopu\"}},he={vacuum_start:\"Zahájit úklid\",vacuum_pause:\"Pozastavit úklid\",vacuum_stop:\"Ukončit úklid\",vacuum_return_to_base:\"Návrat do základny\",vacuum_clean_spot:\"Uklidit bod\",vacuum_locate:\"Najít\",vacuum_set_fan_speed:\"Nastavit stupeň vysávání\"},fe={hour_shortcut:\"h\",meter_shortcut:\"m\",meter_squared_shortcut:\"m²\",minute_shortcut:\"min\"},be={success:\"Volání služby bylo úspěšné\",no_selection:\"Nebyl proveden žádný výběr\",failed:\"Volání služby selhalo\"},ye={description:{before_link:\"Tento editor podporuje pouze základní konfiguraci s použitím entity kamera vytvořené pomocí \",link_text:\"Xiaomi Cloud Map Extractor\",after_link:\". Pro pokročilá nastavení použijte editor kódu.\"},label:{name:\"Titulek (volitelná položka)\",entity:\"Entita vysavače (povinná položka)\",camera:\"Entita kamery (povinná položka)\",vacuum_platform:\"Platforma vysavače (povinná položka)\",map_locked:\"Uzamčení mapy\",two_finger_pan:\"Posuv mapy dvěma prsty\"}},ke={common:pe,map_mode:_e,validation:ge,tile:ve,icon:he,unit:fe,popups:be,editor:ye},Ae=Object.freeze({__proto__:null,common:pe,map_mode:_e,validation:ge,tile:ve,icon:he,unit:fe,popups:be,editor:ye,default:ke}),xe={version:\"Version\",invalid_configuration:\"Ugyldig konfiguration {0}\",description:\"Et kort som lader dig styre din robotstøvsuger\",old_configuration:\"Gammel opsætning fundet. Juster dine indstillinger til det seneste format, eller lav et nyt kort fra bunden.\",old_configuration_migration_link:\"Migrerings vejledning\"},ze={invalid:\"Ugyldigt template!\",vacuum_goto:\"Klik & Gå\",vacuum_goto_predefined:\"Punkter\",vacuum_clean_segment:\"Rum\",vacuum_clean_zone:\"Zone rengøring\",vacuum_clean_zone_predefined:\"Zoner\",vacuum_follow_path:\"Sti\"},Ee={preset:{entity:{missing:\"Mangler indstilling: entity\"},preset_name:{missing:\"Mangler indstilling: preset_name\"},platform:{invalid:\"Ugyldig støvsuger platform: {0}\"},map_source:{missing:\"Mangler indstilling: map_source\",none_provided:\"Intet kamera eller billede er angivet\",ambiguous:\"Kun en kort-kilde tilladt\"},calibration_source:{missing:\"Mangler indstilling: calibration_source\",ambiguous:\"Kun en kalibrerings-kilde tilladt\",none_provided:\"Ingen kalibrerings kilde angivet\",calibration_points:{invalid_number:\"Nøjagtigt 3 eller 4 kalibreringspunkter påkrævet\",missing_map:\"Alle kalibreringspunkter skal indeholde kort koordinater\",missing_vacuum:\"Alle kalibreringspunkter skal indeholde støvsuger koordinater\",missing_coordinate:\"Kort og støvsugers kalibreringspunkter skal indeholde både x og y koordinater\"}},icons:{invalid:\"Fejl i konfiguration: icons\",icon:{missing:\"Alle punkter i icons listen skal indeholde icon egenskaben\"}},tiles:{invalid:\"Fejl i konfiguration: tiles\",entity:{missing:\"Alle punkter i tiles listen skal indehold entity egenskaben\"},label:{missing:\"Alle punkter i tiles listen skal indehold label egenskaben\"}},map_modes:{invalid:\"Fejl i konfiguration: map_modes\",icon:{missing:\"Ikon mangler\"},name:{missing:\"Navn mangler\"},template:{invalid:\"Ugyldigt template: {0}\"},predefined_selections:{not_applicable:\"Mode {0} understøtter ikke predefinerede valg\",zones:{missing:\"Zone konfiguration mangler\",invalid_parameters_number:\"En zone skal indeholde 4 parametre.\"},points:{position:{missing:\"Punkt konfiguration mangler\",invalid_parameters_number:\"Et punkt skal indeholde 2 parametre\"}},rooms:{id:{missing:\"Rummets id mangler\",invalid_format:\"Ugyldigt rum id: {0}\"},outline:{invalid_parameters_number:\"Et punkt i rummets kant skal indeholde 2 parametre\"}},label:{x:{missing:\"Label skal indeholde egenskaben x\"},y:{missing:\"Label skal indeholde egenskaben y\"},text:{missing:\"Label skal indeholde egenskaben text\"}},icon:{x:{missing:\"Icon skal indeholde egenskaben x\"},y:{missing:\"Icon skal indeholde egenskaben y\"},name:{missing:\"Icon skal indeholde egenskaben name\"}}},service_call_schema:{missing:\"Service-kald indstillingerne mangler\",service:{missing:\"Service-kald indstillinger skal indeholde en service\",invalid:\"Ugyldig service: {0}\"}}}},invalid_entities:\"Ugyldige entiteter:\",invalid_calibration:\"Ugyldig kalibrering, du bedes gennemgå din konfiguration\"},we={status:{label:\"Status\",value:{Starting:\"Starter\",\"Charger disconnected\":\"Oplader koblet fra\",Idle:\"Ledig\",\"Remote control active\":\"Fjernstyring aktivt\",Cleaning:\"Rengører\",\"Returning home\":\"Vender hjem\",\"Manual mode\":\"Manuel tilstand\",Charging:\"Oplader\",\"Charging problem\":\"Opladnings-problem\",Paused:\"Sat på pause\",\"Spot cleaning\":\"Spot rengøring\",Error:\"Fejl\",\"Shutting down\":\"Slukker\",Updating:\"Opdaterer\",Docking:\"Docker\",\"Going to target\":\"Går til mål\",\"Zoned cleaning\":\"Zone rengøring\",\"Segment cleaning\":\"Segment rengøring\",\"Emptying the bin\":\"Tømmes\",\"Charging complete\":\"Fuldt opladt\",\"Device offline\":\"Enhed offline\"}},battery_level:{label:\"Batteri\"},fan_speed:{label:\"Hastighed\",value:{Silent:\"Stille\",Standard:\"Standard\",Medium:\"Medium\",Turbo:\"Turbo\",Auto:\"Auto\",Gentle:\"Mild\"}},sensor_dirty_left:{label:\"Sensor vedl.\"},filter_left:{label:\"Filter vedl.\"},main_brush_left:{label:\"Hovedbørste vedl.\"},side_brush_left:{label:\"Sidebørste vedl.\"},cleaning_count:{label:\"Rengøringstæller\"},cleaned_area:{label:\"Rengjort areal\"},cleaning_time:{label:\"Rengørings tid\"}},Se={vacuum_start:\"Start\",vacuum_pause:\"Pause\",vacuum_stop:\"Stop\",vacuum_return_to_base:\"Returner\",vacuum_clean_spot:\"Spotrengør\",vacuum_locate:\"Find\",vacuum_set_fan_speed:\"Skift hastighed\"},Pe={hour_shortcut:\"t\",meter_shortcut:\"m\",meter_squared_shortcut:\"m²\",minute_shortcut:\"min\"},Me={success:\"Succes!\",no_selection:\"Intet valg angivet\",failed:\"Service-kald fejlede\"},Ce={description:{before_link:\"Den visuelle editor understøtter kun kun en konfiguration med en kamera entitet lavet med \",link_text:\"Xiaomi Cloud Map Extractor\",after_link:\". For en mere advanceret konfiguration, brug YAML mode.\"},label:{name:\"Titel (valgfrit)\",entity:\"Støvsuger entitet (påkrævet)\",camera:\"Kamera entitet (påkrævet)\",vacuum_platform:\"Støvsuger platform (påkrævet)\",map_locked:\"Kort låst (valgfrit)\",two_finger_pan:\"To-finger panorering (valgfrit)\"}},Te={common:xe,map_mode:ze,validation:Ee,tile:we,icon:Se,unit:Pe,popups:Me,editor:Ce},$e={version:\"Version\",invalid_configuration:\"Ungültige Konfiguration {0}\",description:\"Eine Karte, mit der Sie Ihren Staubsauger kontrollieren können.\",old_configuration:\"Es wurde eine alte Konfiguration erkannt. Passen Sie Ihre Konfiguration an das neueste Schema an oder erstellen Sie eine neue Karte von Grund auf.\",old_configuration_migration_link:\"Migrationsanleitung\"},Ne={invalid:\"Ungültige Vorlage!\",vacuum_goto:\"Pin & Go\",vacuum_goto_predefined:\"Punkte\",vacuum_clean_segment:\"Räume\",vacuum_clean_point:\"Reinige Punkte\",vacuum_clean_point_predefined:\"Punkte\",vacuum_clean_zone:\"Zone reinigen\",vacuum_clean_zone_predefined:\"Zonenliste\",vacuum_follow_path:\"Pfad\"},Re={preset:{entity:{missing:\"Fehlende Eigenschaft: entity\"},preset_name:{missing:\"Fehlende Eigenschaft: preset_name,\"},platform:{invalid:\"Ungültige Staubsauger-Plattform: {0}\"},map_source:{missing:\"Fehlende Eigenschaft: map_source\",none_provided:\"Keine Kamera und kein Bild vorhanden\",ambiguous:\"Nur eine Kartenquelle erlaubt\"},calibration_source:{missing:\"Fehlende Eigenschaft: calibration_source\",ambiguous:\"Nur eine Kalibrierungsquelle erlaubt\",none_provided:\"Keine Kalibrierungsquelle vorhanden\",calibration_points:{invalid_number:\"Genau 3 oder 4 Kalibrierungspunkte erforderlich\",missing_map:\"Jeder Kalibrierungspunkt muss Kartenkoordinaten enthalten\",missing_vacuum:\"Jeder Kalibrierungspunkt muss Stabsauger-Koordinaten enthalten\",missing_coordinate:\"Karten- und Vakuumkalibrierungspunkte müssen sowohl x- als auch y-Koordinaten enthalten\"}},icons:{invalid:\"Fehler in der Konfiguration: icons\",icon:{missing:\"Jeder Eintrag der Icon-Liste muss die Ikoneneigenschaft\"}},tiles:{invalid:\"Fehler in der Konfiguration: tiles\",entity:{missing:\"Jeder Eintrag der Kachel-Liste muss eine Entität enthalten\"},label:{missing:\"Jeder Eintrag der Kachel-Liste muss ein Label enthalten\"}},map_modes:{invalid:\"Fehler in der Konfiguration: map_modes\",icon:{missing:\"Fehlendes Symbol für den Kartenmodus\"},name:{missing:\"Fehlender Name für den Kartenmodus\"},template:{invalid:\"Ungültige Vorlage: {0}\"},predefined_selections:{not_applicable:\"Modus {0} unterstützt keine vordefinierte Auswahl\",zones:{missing:\"Fehlende Zonenkonfiguration\",invalid_parameters_number:\"Jede Zone muss 4 Parameter haben\"},points:{position:{missing:\"Konfiguration der fehlenden Punkte\",invalid_parameters_number:\"Jeder Punkt muss 2 Parameter haben\"}},rooms:{id:{missing:\"Fehlende Raum ID\",invalid_format:\"Ungültige Raum ID: {0}\"},outline:{invalid_parameters_number:\"Jeder Punkt des Raumes muss 2 Parameter haben.\"}},label:{x:{missing:\"Das Label muss die Eigenschaft x haben\"},y:{missing:\"Das Label muss die Eigenschaft y haben\"},text:{missing:\"Das Label muss eine Text-Eigenschaft haben\"}},icon:{x:{missing:\"Das Icon muss die Eigenschaft x haben\"},y:{missing:\"Das Icon muss die Eigenschaft y haben\"},name:{missing:\"Das Icon muss eine Text-Eigenschaft haben\"}}},service_call_schema:{missing:\"Fehlendes Schema des Service-Aufrufs\",service:{missing:\"Schema des Service-Aufrufs muss Dienst enthalten\",invalid:\"Ungültiger Service: {0}\"}}}},invalid_entities:\"Ungültige Entitäten:\",invalid_calibration:\"Ungültige Kalibrierung, bitte überprüfen Sie Ihre Konfiguration\"},je={status:{label:\"Status\",value:{Starting:\"Starte\",\"Charger disconnected\":\"Ladegerät getrennt\",Idle:\"Inaktiv\",\"Remote control active\":\"Fernsteuerung aktiv\",Cleaning:\"Säubern\",\"Returning home\":\"Kehre zur Ladestation zurück\",\"Manual mode\":\"Manueller Modus\",Charging:\"Lade\",\"Charging problem\":\"Lade-Problem\",Paused:\"Pause\",\"Spot cleaning\":\"Spot-Reinigung\",Error:\"Fehler\",\"Shutting down\":\"Herunterfahren\",Updating:\"Aktualisiere\",Docking:\"Andocken\",\"Going to target\":\"Fahre zum Ziel\",\"Zoned cleaning\":\"Zonen-Reinigung\",\"Segment cleaning\":\"Segment-Reinigung\",\"Emptying the bin\":\"Leere den Staubbehälter\",\"Charging complete\":\"Ladung vollständig\",\"Device offline\":\"Gerät offline\"}},battery_level:{label:\"Batterie\"},fan_speed:{label:\"Lüftergeschwindigkeit\",value:{Silent:\"Leise\",Standard:\"Standard\",Medium:\"Medium\",Turbo:\"Turbo\",Auto:\"Auto\",Gentle:\"Sanft\"}},sensor_dirty_left:{label:\"Sensoren verbleibend\"},filter_left:{label:\"Filter verbleibend\"},main_brush_left:{label:\"Hauptbürste verbleibend\"},side_brush_left:{label:\"Seitenbürste verbleibend\"},cleaning_count:{label:\"Anzahl der Reinigungen\"},cleaned_area:{label:\"Gereinigte Fläche\"},cleaning_time:{label:\"Zeit der Reinigung\"}},Oe={vacuum_start:\"Start\",vacuum_pause:\"Pause\",vacuum_stop:\"Stop\",vacuum_return_to_base:\"Rückkehr zur Basis\",vacuum_clean_spot:\"Reinige Stelle\",vacuum_locate:\"Finden\",vacuum_set_fan_speed:\"Lüftergeschwindigkeit ändern\"},Le={hour_shortcut:\"h\",meter_shortcut:\"m\",meter_squared_shortcut:\"m²\",minute_shortcut:\"min\"},Ie={success:\"Erfolg!\",no_selection:\"Keine Auswahl vorgesehen\",failed:\"Der Dienst konnte nicht aufgerufen werden\"},De={description:{before_link:\"Dieser visuelle Editor unterstützt nur eine einfache Konfiguration mit einer Kameraeinheit, die mit \",link_text:\"Xiaomi Cloud Map Extractor\",after_link:\". Für erweiterte Einstellungen verwenden Sie den YAML-Modus.\"},label:{name:\"Titel (optional)\",entity:\"Staubsauger Entität (required)\",camera:\"Kamera Entität (required)\",vacuum_platform:\"Staubsauger-Plattform (required)\",map_locked:\"Karte gesperrt (optional)\",two_finger_pan:\"Zwei-Finger-Pan (optional)\"}},Ue={common:$e,map_mode:Ne,validation:Re,tile:je,icon:Oe,unit:Le,popups:Ie,editor:De},Fe={version:\"Έκδοση\",invalid_configuration:\"Μη αποδεκτές ρυθμίσεις {0}\",description:\"Μία κάρτα που σας επιτρέπει να ελέγξετε την σκούπα σας\",old_configuration:\"Ανιχνεύθυκαν παλιές ρυθμίσεις. Προσαρμόστε τις ρυθμίσεις σας στο πιο πρόσφατο μοντέλο ή δημιουργήστε μια νέα κάρτα από την αρχή.\",old_configuration_migration_link:\"Οδηγός μετατροπής παλιών ρυθμίσεων\"},Ve={invalid:\"Μη αποδεκτό πρότυπο!\",vacuum_goto:\"Πήγαινε Εδώ\",vacuum_goto_predefined:\"Σημεία\",vacuum_clean_segment:\"Δωμάτια\",vacuum_clean_point:\"Σκούπισμα σε σημείο\",vacuum_clean_point_predefined:\"Σημεία\",vacuum_clean_zone:\"Σκούπισμα σε ζώνη\",vacuum_clean_zone_predefined:\"Λίστα ζωνών καθαρισμού\",vacuum_follow_path:\"Διαδρομή\"},He={preset:{entity:{missing:\"Λείπει η ιδιότητα: entity\"},preset_name:{missing:\"Λείπει η ιδιότητα: preset_name\"},platform:{invalid:\"Μη αποδεκτή πλατφόρμα σκούπας: {0}\"},map_source:{missing:\"Λείπει η ιδιότητα: map_source\",none_provided:\"Δεν ρυθμίστηκε ούτε κάμερα ούτε εικόνα\",ambiguous:\"Επιτρέπεται μόνο μία πηγή χάρτη\"},calibration_source:{missing:\"Λείπει η ιδιότητα: calibration_source\",ambiguous:\"Επιτρέπεται μόνο μία πηγή βαθμονόμησης\",none_provided:\"Δεν ρυθμίστηκε πηγή βαθμονόμησης\",calibration_points:{invalid_number:\"Απαιτούνται ακριβώς 3 ή 4 σημεία βαθμονόμησης\",missing_map:\"Κάθε σημείο βαθμονόμησης πρέπει να περιέχει συντεταγμένες του χάρτη\",missing_vacuum:\"Κάθε σημείο βαθμονόμησης πρέπει να περιέχει συντεταγμένες της σκούπας\",missing_coordinate:\"Τα σημεία βαθμονόμησης του χάρτη και της σκούπας πρέπει να περιέχουν συντεταγμένες x και y\"}},icons:{invalid:\"Λάθος στις ρυθμίσεις: icons\",icon:{missing:\"Κάθε εγγραφή icon πρέπει να περιέχει μια ιδιότητα icon\"}},tiles:{invalid:\"Λάθος στις ρυθμίσεις: tiles\",entity:{missing:\"Κάθε εγγραφή tile πρέπει να περιέχει entity\"},label:{missing:\"Κάθε εγγραφή tile πρέπει να περιέχει label\"}},map_modes:{invalid:\"Λάθος στις ρυθμίσεις: map_modes\",icon:{missing:\"Λείπει το εικονίδιο του τρόπου λειτουργίας χάρτη\"},name:{missing:\"Λείπει το όνομα του τρόπου λειτουργίας χάρτη\"},template:{invalid:\"Μη αποδεκτό πρότυπο: {0}\"},predefined_selections:{not_applicable:\"Η λειτουργία {0} δεν υποστηρίζει προκαθορισμένες επιλογές\",zones:{missing:\"Λείπει η ρύθμιση ζωνών καθαρισμού\",invalid_parameters_number:\"Κάθε ζώνη καθαρισμού πρέπει να έχει 4 παραμέτρους\"},points:{position:{missing:\"Λείπει η ρύθμιση σημείων\",invalid_parameters_number:\"Each point must have 2 parameters\"}},rooms:{id:{missing:\"Λείπει το αναγνωριστικό του δωματίου\",invalid_format:\"Λάθος αναγνωριστικό δωματίου: {0}\"},outline:{invalid_parameters_number:\"Κάθε σημείο του περιγράμματος του δωματίου πρέπει να έχει 2 παραμέτρους\"}},label:{x:{missing:\"Η ταμπέλα πρέπει να έχει ιδιότητα x\"},y:{missing:\"Η ταμπέλα πρέπει να έχει ιδιότητα y\"},text:{missing:\"Η ταμπέλα πρέπει να έχει ιδιότητα κειμένου\"}},icon:{x:{missing:\"Το εικονίδιο πρέπει να έχει ιδιότητα x\"},y:{missing:\"Το εικονίδιο πρέπει να έχει ιδιότητα y\"},name:{missing:\"Το εικονίδιο πρέπει να έχει ιδιότητα ονόματος\"}}},service_call_schema:{missing:\"Λείπει το μοντέλο κλήσης υπηρεσίας\",service:{missing:\"Το μοντέλο κλήσης υπηρεσίας πρέπει να εμπεριέχει υπηρεσία\",invalid:\"Μη έγκυρη υπηρεσία: {0}\"}}}},invalid_entities:\"Λάθος οντότητες:\",invalid_calibration:\"Λάθος βαθμονόμηση, παρακαλώ ελέγξτε τις ρυθμίσεις σας\"},Ze={status:{label:\"Κατάσταση\",value:{Starting:\"Γίνεται εκκίνηση\",\"Charger disconnected\":\"Αποσυνδέθηκε από τη φόρτιση\",Idle:\"Σε αδράνεια\",\"Remote control active\":\"Χειροκίνητος έλεγχος ενεργός\",Cleaning:\"Γίνεται καθαρισμός\",\"Returning home\":\"Επιστροφή στη βάση\",\"Manual mode\":\"Χειροκίνητη λειτουργία\",Charging:\"Σε φόρτιση\",\"Charging problem\":\"Πρόβλημα φόρτισης\",Paused:\"Σε παύση\",\"Spot cleaning\":\"Καθαρισμός σημείου\",Error:\"Σφάλμα\",\"Shutting down\":\"Γίνεται τερματισμός\",Updating:\"Γίνεται αναβάθμιση\",Docking:\"Σύνδεση στη βάση\",\"Going to target\":\"Πορεία προς προορισμό\",\"Zoned cleaning\":\"Καθαρισμός ζώνης\",\"Segment cleaning\":\"Καθαρισμός τμήματος\",\"Emptying the bin\":\"Άδειασμα κάδου\",\"Charging complete\":\"Φόρτιση πλήρης\",\"Device offline\":\"Συσκευή εκτός δικτύου\"}},battery_level:{label:\"Μπαταρία\"},fan_speed:{label:\"Ταχύτητα ανεμιστήρα\",value:{Silent:\"Αθόρυβο\",Standard:\"Τυπικό\",Medium:\"Μέτριο\",Turbo:\"Τούρμπο\",Auto:\"Αυτόματο\",Gentle:\"Ήπιο\"}},sensor_dirty_left:{label:\"Συντήρηση αισθητήρων\"},filter_left:{label:\"Συντήρηση φίλτρου\"},main_brush_left:{label:\"Συντήρηση κύριας βούρτσας\"},side_brush_left:{label:\"Συντήρηση πλαϊνής βούρτσας\"},cleaning_count:{label:\"Αριθμός σκουπισμάτων\"},cleaned_area:{label:\"Έκταση που καθαρίστηκε\"},cleaning_time:{label:\"Χρόνος καθαρισμού\"},mop_left:{label:\"Συντήρηση σφουγγαρίστρας\"}},Ge={vacuum_start:\"Έναρξη\",vacuum_pause:\"Παύση\",vacuum_stop:\"Διακοπή\",vacuum_return_to_base:\"Επιστροφή στη βάση\",vacuum_clean_spot:\"Καθαρισμός σημείου\",vacuum_locate:\"Εντοπισμός\",vacuum_set_fan_speed:\"Αλλαγή ταχύτητας ανεμιστήρα\"},Xe={hour_shortcut:\"ω\",meter_shortcut:\"μ\",meter_squared_shortcut:\"τ.μ.\",minute_shortcut:\"λεπ\"},Ke={success:\"Επιτυχία!\",no_selection:\"Δεν δόθηκε επιλογή\",failed:\"Αποτυχία κλήσης υπηρεσίας\"},qe={description:{before_link:\"Αυτό η οπτική διεπαφή επεξεργασίας υποστηρίζει μόνο βασικές ρυθμίσεις με μια οντότητα κάμερας που δημιουργήθηκε χρησιμοποιώντας \",link_text:\"Xiaomi Cloud Map Extractor\",after_link:\". Για πιο εξελιγμένες ρυθμίσεις χρησιμοποιήστε τη μέθοδο επεξεργασίας αρχείου YAML.\"},label:{name:\"Τίτλος (προεραιτικό)\",entity:\"Οντότητα σκούπας (απαραίτητο)\",camera:\"Οντότητα κάμερας (απαραίτητο)\",vacuum_platform:\"Πλατφόρμα σκούπας (απαραίτητο)\",map_locked:\"Κλείδωμα χάρτη (προεραιτικό)\",two_finger_pan:\"Μετακίνηση με δύο δάχτυλα (προεραιτικό)\"}},Be={common:Fe,map_mode:Ve,validation:He,tile:Ze,icon:Ge,unit:Xe,popups:Ke,editor:qe},Ye={version:\"Version\",invalid_configuration:\"Invalid configuration {0}\",description:\"A card that lets you control your vacuum\",old_configuration:\"Old configuration detected. Adjust your config to the latest schema or create a new card from the scratch.\",old_configuration_migration_link:\"Migration guide\"},We={invalid:\"Invalid template!\",vacuum_goto:\"Pin & Go\",vacuum_goto_predefined:\"Points\",vacuum_clean_segment:\"Rooms\",vacuum_clean_point:\"Clean point\",vacuum_clean_point_predefined:\"Points\",vacuum_clean_zone:\"Zone cleanup\",vacuum_clean_zone_predefined:\"Zones list\",vacuum_follow_path:\"Path\"},Je={preset:{entity:{missing:\"Missing property: entity\"},preset_name:{missing:\"Missing property: preset_name\"},platform:{invalid:\"Invalid vacuum platform: {0}\"},map_source:{missing:\"Missing property: map_source\",none_provided:\"No camera neither image provided\",ambiguous:\"Only one map source allowed\"},calibration_source:{missing:\"Missing property: calibration_source\",ambiguous:\"Only one calibration source allowed\",none_provided:\"No calibration source provided\",calibration_points:{invalid_number:\"Exactly 3 or 4 calibration points required\",missing_map:\"Each calibration point must contain map coordinates\",missing_vacuum:\"Each calibration point must contain vacuum coordinates\",missing_coordinate:\"Map and vacuum calibration points must contain both x and y coordinate\"}},icons:{invalid:\"Error in configuration: icons\",icon:{missing:\"Each entry of icons list must contain icon property\"}},tiles:{invalid:\"Error in configuration: tiles\",entity:{missing:\"Each entry of tiles list must contain entity\"},label:{missing:\"Each entry of tiles list must contain label\"}},map_modes:{invalid:\"Error in configuration: map_modes\",icon:{missing:\"Missing icon of map mode\"},name:{missing:\"Missing name of map mode\"},template:{invalid:\"Invalid template: {0}\"},predefined_selections:{not_applicable:\"Mode {0} does not support predefined selections\",zones:{missing:\"Missing zones configuration\",invalid_parameters_number:\"Each zone must have 4 parameters\"},points:{position:{missing:\"Missing points configuration\",invalid_parameters_number:\"Each point must have 2 parameters\"}},rooms:{id:{missing:\"Missing room id\",invalid_format:\"Invalid room id: {0}\"},outline:{invalid_parameters_number:\"Each point of room outline must have 2 parameters\"}},label:{x:{missing:\"Label must have x property\"},y:{missing:\"Label must have y property\"},text:{missing:\"Label must have text property\"}},icon:{x:{missing:\"Icon must have x property\"},y:{missing:\"Icon must have y property\"},name:{missing:\"Icon must have name property\"}}},service_call_schema:{missing:\"Missing service call schema\",service:{missing:\"Service call schema must contain service\",invalid:\"Invalid service: {0}\"}}}},invalid_entities:\"Invalid entities:\",invalid_calibration:\"Invalid calibration, please check your configuration\"},Qe={status:{label:\"Status\",value:{Starting:\"Starting\",\"Charger disconnected\":\"Charger disconnected\",Idle:\"Idle\",\"Remote control active\":\"Remote control active\",Cleaning:\"Cleaning\",\"Returning home\":\"Returning home\",\"Manual mode\":\"Manual mode\",Charging:\"Charging\",\"Charging problem\":\"Charging problem\",Paused:\"Paused\",\"Spot cleaning\":\"Spot cleaning\",Error:\"Error\",\"Shutting down\":\"Shutting down\",Updating:\"Updating\",Docking:\"Docking\",\"Going to target\":\"Going to target\",\"Zoned cleaning\":\"Zoned cleaning\",\"Segment cleaning\":\"Segment cleaning\",\"Emptying the bin\":\"Emptying the bin\",\"Charging complete\":\"Charging complete\",\"Device offline\":\"Device offline\"}},battery_level:{label:\"Battery\"},fan_speed:{label:\"Fan speed\",value:{Silent:\"Silent\",Standard:\"Standard\",Medium:\"Medium\",Turbo:\"Turbo\",Auto:\"Auto\",Gentle:\"Gentle\"}},sensor_dirty_left:{label:\"Sensors left\"},filter_left:{label:\"Filter left\"},main_brush_left:{label:\"Main brush left\"},side_brush_left:{label:\"Side brush left\"},cleaning_count:{label:\"Cleaning count\"},cleaned_area:{label:\"Cleaned area\"},cleaning_time:{label:\"Cleaning time\"},mop_left:{label:\"Mop left\"}},et={vacuum_start:\"Start\",vacuum_pause:\"Pause\",vacuum_stop:\"Stop\",vacuum_return_to_base:\"Return to base\",vacuum_clean_spot:\"Clean spot\",vacuum_locate:\"Locate\",vacuum_set_fan_speed:\"Change fan speed\"},tt={hour_shortcut:\"h\",meter_shortcut:\"m\",meter_squared_shortcut:\"m²\",minute_shortcut:\"min\"},at={success:\"Success!\",no_selection:\"No selection provided\",failed:\"Failed to call service\"},it={description:{before_link:\"This visual editor supports only a basic configuration with a camera entity created using \",link_text:\"Xiaomi Cloud Map Extractor\",after_link:\". For more advanced setup use YAML mode.\"},label:{name:\"Title (optional)\",entity:\"Vacuum entity (required)\",camera:\"Camera entity (required)\",vacuum_platform:\"Vacuum platform (required)\",map_locked:\"Map locked (optional)\",two_finger_pan:\"Two finger pan (optional)\"}},nt={common:Ye,map_mode:We,validation:Je,tile:Qe,icon:et,unit:tt,popups:at,editor:it},rt={version:\"Version\",invalid_configuration:\"Configuración inválida {0}\",description:\"Una tarjeta para controlar tu aspiradora\",old_configuration:\"Configuración antigua detectada. Ajusta la configuración al formato actual o crea una nueva tarjeta.\",old_configuration_migration_link:\"Guía de migrado.\"},ot={invalid:\"Plantilla inválida!\",vacuum_goto:\"Marcar e ir\",vacuum_goto_predefined:\"Puntos\",vacuum_clean_segment:\"Habitaciones\",vacuum_clean_point:\"Punto limpio\",vacuum_clean_point_predefined:\"Puntos\",vacuum_clean_zone:\"Limpiar zona\",vacuum_clean_zone_predefined:\"Lista de zonas\",vacuum_follow_path:\"Ruta\"},lt={preset:{entity:{missing:\"Propiedad no encontrada: entity\"},preset_name:{missing:\"Propiedad no encontrada: preset_name\"},platform:{invalid:\"Plataforma de aspiradora inválida: {0}\"},map_source:{missing:\"Propiedad no encontrada: map_source\",none_provided:\"Sin cámara ni imagen proporcionada\",ambiguous:\"Solo se permite una fuente de mapa\"},calibration_source:{missing:\"Propiedad no encontrada: calibration_source\",ambiguous:\"Solo se permite una fuente de calibración\",none_provided:\"No se proporciona fuente de calibración\",calibration_points:{invalid_number:\"Se requieren 3 o 4 puntos de calibración\",missing_map:\"Cada punto de calibración debe contener las coordenadas del mapa\",missing_vacuum:\"Cada punto de calibración debe contener las coordenadas de la aspiradora\",missing_coordinate:\"Los puntos de calibración de la aspiradora y del mapa deben contener las coordenadas x e y\"}},icons:{invalid:\"Error en la configuración: icons\",icon:{missing:\"Cada entrada de la lista de iconos debe contener la propiedad del icono.\"}},tiles:{invalid:\"Error en la configuración: tiles\",entity:{missing:\"Cada entrada de la lista de mosaicos debe contener la entidad.\"},label:{missing:\"Cada entrada de la lista de mosaicos debe contener una etiqueta.\"}},map_modes:{invalid:\"Error en la configuración: map_modes\",icon:{missing:\"Falta el icono del modo de mapa\"},name:{missing:\"Falta el nombre del modo de mapa\"},template:{invalid:\"Plantilla inválida: {0}\"},predefined_selections:{not_applicable:\"El modo {0} no admite selecciones predefinidas\",zones:{missing:\"Faltan configuraciones de zonas\",invalid_parameters_number:\"Cada zona debe tener 4 parámetros\"},points:{position:{missing:\"Faltan configuraciones de puntos\",invalid_parameters_number:\"Cada punto debe tener 2 parámetros\"}},rooms:{id:{missing:\"Falta la identificación de la habitación\",invalid_format:\"Identificación de la habitación inválida: {0}\"},outline:{invalid_parameters_number:\"Cada punto del contorno de la habitación debe tener 2 parámetros\"}},label:{x:{missing:\"La etiqueta debe tener la propiedad x\"},y:{missing:\"La etiqueta debe tener la propiedad y\"},text:{missing:\"La etiqueta debe tener la propiedad text\"}},icon:{x:{missing:\"El ícono debe tener la propiedad x\"},y:{missing:\"El ícono debe tener la propiedad y\"},name:{missing:\"El ícono debe tener la propiedad name\"}}},service_call_schema:{missing:\"Falta un esquema de llamada de servicio\",service:{missing:\"El esquema de llamada de servicio debe contener service\",invalid:\"Servicio inválido: {0}\"}}}},invalid_entities:\"Entidades inválidas:\",invalid_calibration:\"Calibración inválida, verifique la configuración.\"},st={status:{label:\"Estado\",value:{Starting:\"Comenzando\",\"Charger disconnected\":\"Cargador desconectado\",Idle:\"Inactivo\",\"Remote control active\":\"Control remoto activo\",Cleaning:\"Limpiando\",\"Returning home\":\"Volviendo a la base\",\"Manual mode\":\"Modo manual\",Charging:\"Cargando\",\"Charging problem\":\"Error de carga\",Paused:\"Pausado\",\"Spot cleaning\":\"Limpieza de manchas\",Error:\"Error\",\"Shutting down\":\"Apagando\",Updating:\"Actualizando\",Docking:\"Docking\",\"Going to target\":\"Ir al objetivo\",\"Zoned cleaning\":\"Limpieza por zonas\",\"Segment cleaning\":\"Limpieza por segmentos\",\"Emptying the bin\":\"Vaciando el depósito de mugre\",\"Charging complete\":\"Carga completa\",\"Device offline\":\"Dispositivo desconectado\"}},battery_level:{label:\"Batería\"},fan_speed:{label:\"Velocidad del ventilador\",value:{Silent:\"Silencioso\",Standard:\"Normal\",Medium:\"Medio\",Turbo:\"Turbo\",Auto:\"Automático\",Gentle:\"Suave\"}},sensor_dirty_left:{label:\"Sensor izquierdo\"},filter_left:{label:\"Filtro derecho\"},main_brush_left:{label:\"Cepillo principal izquierdo\"},side_brush_left:{label:\"Cepillo lateral izquierdo\"},cleaning_count:{label:\"Contador de limpieza\"},cleaned_area:{label:\"Área limpia\"},cleaning_time:{label:\"Tiempo de limpieza\"},mop_left:{label:\"Mopa izquierda\"}},ct={vacuum_start:\"Comenzar\",vacuum_pause:\"Pausar\",vacuum_stop:\"Detener\",vacuum_return_to_base:\"Volver a la base\",vacuum_clean_spot:\"Punto limpio\",vacuum_locate:\"Localizar\",vacuum_set_fan_speed:\"Cambiar la velocidad del ventilador\"},dt={hour_shortcut:\"h\",meter_shortcut:\"m\",meter_squared_shortcut:\"m²\",minute_shortcut:\"min\"},ut={success:\"Listo!\",no_selection:\"No se ha proporcionado ninguna selección\",failed:\"No se pudo llamar al servicio\"},mt={description:{before_link:\"Este editor visual solo admite una configuración básica con una entidad de cámara creada utilizando \",link_text:\"Xiaomi Cloud Map Extractor\",after_link:\". Para una configuración más avanzada, utilice el modo YAML.\"},label:{name:\"Título (opcional)\",entity:\"Entidad de la aspiradora (requerido)\",camera:\"Entidad de la cámara (requerido)\",vacuum_platform:\"Plataforma de la aspiradora (requerido)\",map_locked:\"Bloquear mapa (opcional)\",two_finger_pan:\"Mover con dos dedos (opcional)\"}},pt={common:rt,map_mode:ot,validation:lt,tile:st,icon:ct,unit:dt,popups:ut,editor:mt},_t={version:\"Version\",invalid_configuration:\"Configuration invalide {0}\",description:\"Une carte qui vous permet de contrôler votre robot aspirateur\",old_configuration:\"Ancienne configuration détectée. Ajustez votre configuration à la nouvelle version ou récréez totalement une nouvelle carte.\",old_configuration_migration_link:\"Guide de migration\"},gt={invalid:\"Template incorrect !\",vacuum_goto:\"Cible\",vacuum_goto_predefined:\"Points\",vacuum_clean_segment:\"Pièces\",vacuum_clean_point:\"Nettoyage ciblé\",vacuum_clean_point_predefined:\"Points\",vacuum_clean_zone:\"Nettoyage de zone\",vacuum_clean_zone_predefined:\"Liste des zones\",vacuum_follow_path:\"Chemin\"},vt={preset:{entity:{missing:\"Paramètre manquant : entity\"},preset_name:{missing:\"Paramètre manquant : preset_name\"},platform:{invalid:\"Plateforme incorrecte : {0}\"},map_source:{missing:\"Paramètre manquant : map_source\",none_provided:\"Aucune caméra ou image fournie\",ambiguous:\"Une seule source de carte autorisée\"},calibration_source:{missing:\"Paramètre manquant : calibration_source\",ambiguous:\"Une seule source de calibration autorisée\",none_provided:\"Aucune source de calibration fournie\",calibration_points:{invalid_number:\"3 ou 4 points de calibration sont nécessaires\",missing_map:\"Chaque point de calibration doit avoir des coordonnées de carte\",missing_vacuum:\"Chaque point de calibration doit avoir des coordonnées de robot\",missing_coordinate:\"Tous les points de calibration doivent avoir des coordonnées x et y\"}},icons:{invalid:\"Erreur de configuration : icônes\",icon:{missing:\"Chaque élément de la liste d'icônes doit avoir une propriété « icon »\"}},tiles:{invalid:\"Erreur de configuration : tuiles\",entity:{missing:\"Chaque élément de la liste de tuiles doit avoir une propriété « entity »\"},label:{missing:\"Chaque élément de la liste de tuiles doit avoir une propriété « label »\"}},map_modes:{invalid:\"Erreur de configuration : modes de carte\",icon:{missing:\"Icône de mode de carte manquante\"},name:{missing:\"Nom de mode de carte manquant\"},template:{invalid:\"Template incorrect : {0}\"},predefined_selections:{not_applicable:\"Ce mode {0} ne supporte pas les sélections prédéfinies\",zones:{missing:\"Configuration des zones manquante\",invalid_parameters_number:\"Chaque zone doit avoir 4 paramètres\"},points:{position:{missing:\"Configuration des points manquante\",invalid_parameters_number:\"Chaque point doit avoir 2 paramètres\"}},rooms:{id:{missing:\"id de pièce manquant\",invalid_format:\"id de pièce incorrect : {0}\"},outline:{invalid_parameters_number:\"Chaque point de contour de pièce doit avoir 2 paramètres\"}},label:{x:{missing:\"L'étiquette doit avoir une propriété « x »\"},y:{missing:\"L'étiquette doit avoir une propriété « y »\"},text:{missing:\"L'étiquette doit avoir une propriété « text »\"}},icon:{x:{missing:\"L'icône doit avoir une propriété x property\"},y:{missing:\"L'icône doit avoir une propriété y property\"},name:{missing:\"L'icône doit avoir une propriété « name »\"}}},service_call_schema:{missing:\"Schema d'appel du service manquant\",service:{missing:\"Le schema doit contenir un service\",invalid:\"Service incorrect : {0}\"}}}},invalid_entities:\"Entités incorrectes :\",invalid_calibration:\"Calibration incorrecte, vérifiez votre configuration\"},ht={status:{label:\"Statut\",value:{Starting:\"Démarrage...\",\"Charger disconnected\":\"Chargeur déconnecté\",Idle:\"Inactif\",\"Remote control active\":\"Télécommande active\",Cleaning:\"Nettoyage\",\"Returning home\":\"Retour à la station\",\"Manual mode\":\"Mode manuel\",Charging:\"En charge\",\"Charging problem\":\"Problème de chargement\",Paused:\"En pause\",\"Spot cleaning\":\"Nettoyage ciblé\",Error:\"Erreur\",\"Shutting down\":\"Arrêt en cours...\",Updating:\"Mise à jour\",Docking:\"Retour à la station\",\"Going to target\":\"En route vers la cible\",\"Zoned cleaning\":\"Nettoyage de zone\",\"Segment cleaning\":\"Nettoyage de pièce\",\"Emptying the bin\":\"Vidage du réservoir\",\"Charging complete\":\"Chargement terminé\",\"Device offline\":\"Hors ligne\"}},battery_level:{label:\"Batterie\"},fan_speed:{label:\"Puissance\",value:{Silent:\"Silencieux\",Standard:\"Standard\",Medium:\"Moyen\",Turbo:\"Turbo\",Auto:\"Auto\",Gentle:\"Calme\"}},sensor_dirty_left:{label:\"Capteurs\"},filter_left:{label:\"Filtre\"},main_brush_left:{label:\"Brosse principale\"},side_brush_left:{label:\"Brosse latérale\"},cleaning_count:{label:\"Nombre de nettoyages\"},cleaned_area:{label:\"Surface nettoyée\"},cleaning_time:{label:\"Durée de nettoyage\"},mop_left:{label:\"Serpillère\"}},ft={vacuum_start:\"Démarrage\",vacuum_pause:\"Pause\",vacuum_stop:\"Stop\",vacuum_return_to_base:\"Retour à la station\",vacuum_clean_spot:\"Nettoyage ciblé\",vacuum_locate:\"Localiser\",vacuum_set_fan_speed:\"Changer la puissance\"},bt={hour_shortcut:\"h\",meter_shortcut:\"m\",meter_squared_shortcut:\"m²\",minute_shortcut:\"min\"},yt={success:\"Réussi !\",no_selection:\"Sélection non fournie\",failed:\"L'appel au service a échoué\"},kt={description:{before_link:\"Cet éditeur visuel ne permet qu'une configuration de base avec une entité caméra créée avec \",link_text:\"Xiaomi Cloud Map Extractor\",after_link:\". Pour un paramétrage plus avancé, utilisez le mode YAML.\"},label:{name:\"Titre (optionnel)\",entity:\"Entité de l'aspirateur (obligatoire)\",camera:\"Entité de la caméra (obligatoire)\",vacuum_platform:\"Plateforme (obligatoire)\",map_locked:\"Carte verrouillée (optionnel)\",two_finger_pan:\"Déplacement à deux doigts (optionnel)\"}},At={common:_t,map_mode:gt,validation:vt,tile:ht,icon:ft,unit:bt,popups:yt,editor:kt},xt={version:\"גירסה\",invalid_configuration:\"תצורה לא חוקית {0}\",description:\"כרטיס המאפשר לך לשלוט בשואב שלך\",old_configuration:\"זוהתה תצורה ישנה. התאם את התצורה שלך לסכמה העדכנית ביותר או צור כרטיס חדש מההתחלה.\",old_configuration_migration_link:\"מדריך להגירה\"},zt={invalid:\"תבנית לא חוקית!\",vacuum_goto:\"נעץ וסע\",vacuum_goto_predefined:\"נקודות\",vacuum_clean_segment:\"חדרים\",vacuum_clean_point:\"נקה נקודה\",vacuum_clean_point_predefined:\"נקודות\",vacuum_clean_zone:\"ניקוי אזור\",vacuum_clean_zone_predefined:\"רשימת אזורים\",vacuum_follow_path:\"נתיב\"},Et={preset:{entity:{missing:\"נכס חסר: ישות\"},preset_name:{missing:\"חסר מאפיין: preset_name\"},platform:{invalid:\"פלטפורמת שואב לא חוקית: {0}\"},map_source:{missing:\"נכס חסר: map_source\",none_provided:\"לא סופקה אף תמונה\",ambiguous:\"מותר רק מקור מפה אחד\"},calibration_source:{missing:\"חסר מאפיין: calibration_source\",ambiguous:\"מותר רק מקור כיול אחד\",none_provided:\"לא סופק מקור כיול\",calibration_points:{invalid_number:\"דרושות בדיוק 3 או 4 נקודות כיול\",missing_map:\"כל נקודת כיול חייבת להכיל קואורדינטות מפה\",missing_vacuum:\"כל נקודת כיול חייבת להכיל קואורדינטות שואב\",missing_coordinate:\"נקודות כיול במפה ובשואב חייבות להכיל גם קואורדינטות x וגם y\"}},icons:{invalid:\"שגיאה בתצורה: סמלילים\",icon:{missing:\"כל כניסה של רשימת הסמלילים חייבת להכיל מאפיין סמליל\"}},tiles:{invalid:\"שגיאה בתצורה: אריחים\",entity:{missing:\"כל ערך של רשימת אריחים חייב להכיל ישות\"},label:{missing:\"כל כניסה של רשימת אריחים חייבת להכיל תווית\"}},map_modes:{invalid:\"שגיאה בתצורה: map_modes\",icon:{missing:\"חסר סמליל של מצב מפה\"},name:{missing:\"חסר שם של מצב מפה\"},template:{invalid:\"תבנית לא חוקית: {0}\"},predefined_selections:{not_applicable:\"מצב {0} אינו תומך בבחירות מוגדרות מראש\",zones:{missing:\"תצורת אזורים חסרים\",invalid_parameters_number:\"כל אזור חייב לכלול 4 פרמטרים\"},points:{position:{missing:\"תצורת נקודות חסרות\",invalid_parameters_number:\"לכל נקודה חייבת להיות 2 פרמטרים\"}},rooms:{id:{missing:\"מזהה חדר חסר\",invalid_format:\"מזהה חדר לא חוקי: {0}\"},outline:{invalid_parameters_number:\"כל נקודה של מתאר החדר חייבת להיות בעלת 2 פרמטרים\"}},label:{x:{missing:\"חייב להיות מאפיין x לתבנית\"},y:{missing:\"חייב להיות מאפיין y לתבנית\"},text:{missing:\"חייב להיות מאפיין שם לתבנית\"}},icon:{x:{missing:\"חייב להיות מאפיין x לסמליל\"},y:{missing:\"חייב להיות מאפיין y לסמליל\"},name:{missing:\"חייב להיות מאפיין שם לסמליל\"}}},service_call_schema:{missing:\"סכימת קריאת שירות חסרה\",service:{missing:\"סכימת קריאת השירות חייבת להכיל שירות\",invalid:\"שירות לא חוקי: {0}\"}}}},invalid_entities:\"ישויות לא חוקיות:\",invalid_calibration:\"כיול לא חוקי, אנא בדוק את התצורה שלך\"},wt={status:{label:\"סטטוס\"},battery_level:{label:\"סוללה\"},fan_speed:{label:\"מהירות מאוורר\"},sensor_dirty_left:{label:\"נותר לחיישנים\"},filter_left:{label:\"נותר למסנן\"},main_brush_left:{label:\"נותר למברשת ראשית\"},side_brush_left:{label:\"נותר למברשת צד\"},cleaning_count:{label:\"כמות נקיונות\"},cleaned_area:{label:\"שטח שנוקה\"},cleaning_time:{label:\"זמן ניקיון\"},mop_left:{label:\"נותר למטלית\"}},St={vacuum_start:\"התחל\",vacuum_pause:\"השהה\",vacuum_stop:\"עצור\",vacuum_return_to_base:\"חוזר לתחנת עגינה\",vacuum_clean_spot:\"ניקוי נקודה\",vacuum_locate:\"איתור\",vacuum_set_fan_speed:\"שנה מהירות מאוורר\"},Pt={hour_shortcut:\"ש\",meter_shortcut:\"מ\",meter_squared_shortcut:\"m²\",minute_shortcut:\"דק\"},Mt={success:\"הצליח!\",no_selection:\"לא סופקה בחירה\",failed:\"התקשרות לשירות נכשלה\"},Ct={description:{before_link:\"עורך חזותי זה תומך רק בתצורה בסיסית עם ישות מצלמה שנוצרה באמצעות \",link_text:\"Xiaomi Cloud Map Extractor\",after_link:\". להגדרה מתקדמת יותר השתמש במצב YAML.\"},label:{name:\"כותרת (אופציונלי)\",entity:\"יישות שואב (נדרש)\",camera:\"יישות מצלמה (נדרש)\",vacuum_platform:\"פלטפורמת שואב (נדרש)\",map_locked:\"נעילת מפה (אופציונלי)\",two_finger_pan:\"צביטת שתי אצבעות (אופציונלי)\"}},Tt={common:xt,map_mode:zt,validation:Et,tile:wt,icon:St,unit:Pt,popups:Mt,editor:Ct},$t={version:\"Verzió\",invalid_configuration:\"Érvénytelen konfiguráció {0}\",description:\"Egy kártya, amely lehetővé teszi a vákuum szabályozását\",old_configuration:\"Régi konfiguráció észlelve. Állítsa be a konfigurációt a legújabb sémához, vagy hozzon létre egy új kártyát.\",old_configuration_migration_link:\"Migrációs útmutató\"},Nt={invalid:\"Érvénytelen sablon!\",vacuum_goto:\"Pin & Go\",vacuum_goto_predefined:\"Pontok\",vacuum_clean_segment:\"Szobák\",vacuum_clean_zone:\"Zóna takarítás\",vacuum_clean_zone_predefined:\"Zónák listája\",vacuum_follow_path:\"Pálya\"},Rt={preset:{entity:{missing:\"Hiányzó tulajdonság: entity\"},preset_name:{missing:\"Hiányzó tulajdonság: preset_name\"},platform:{invalid:\"Érvénytelen vákuumplatform: {0}\"},map_source:{missing:\"Hiányzó tulajdonság: map_source\",none_provided:\"Nincs kamera és kép sem biztosított\",ambiguous:\"Csak egy térképforrás engedélyezett\"},calibration_source:{missing:\"Hiányzó tulajdonság: calibration_source\",ambiguous:\"Csak egy kalibrációs forrás engedélyezett\",none_provided:\"Nincs megadva kalibrációs forrás\",calibration_points:{invalid_number:\"Pontosan 3 vagy 4 kalibrációs pont szükséges\",missing_map:\"Minden kalibrációs pontnak tartalmaznia kell a térkép koordinátáit\",missing_vacuum:\"Minden kalibrációs pontnak vákuumkoordinátákat kell tartalmaznia\",missing_coordinate:\"A térképi és vákuumkalibrációs pontoknak x és y koordinátát is tartalmazniuk kell\"}},icons:{invalid:\"Hiba a konfigurációban: icons\",icon:{missing:\"Az ikonlista minden bejegyzésének tartalmaznia kell az ikon tulajdonságot\"}},tiles:{invalid:\"Hiba a konfigurációban: tiles\",entity:{missing:\"A csempelista minden bejegyzésének tartalmaznia kell entitást\"},label:{missing:\"A csempelista minden bejegyzésének tartalmaznia kell egy címkét\"}},map_modes:{invalid:\"Hiba a konfigurációban: map_modes\",icon:{missing:\"Hiányzik a térkép mód ikonja\"},name:{missing:\"A térképmód neve hiányzik\"},template:{invalid:\"Érvénytelen sablon: {0}\"},predefined_selections:{not_applicable:\"A(z) {0} mód nem támogatja az előre meghatározott kijelöléseket\",zones:{missing:\"Hiányzó zónák konfigurációja\",invalid_parameters_number:\"Minden zónának 4 paraméterrel kell rendelkeznie\"},points:{position:{missing:\"Hiányzó pontok konfigurációja\",invalid_parameters_number:\"Minden pontnak 2 paraméterrel kell rendelkeznie\"}},rooms:{id:{missing:\"Hiányzó szoba id\",invalid_format:\"Érvénytelen szoba id: {0}\"},outline:{invalid_parameters_number:\"A helyiség körvonalának minden pontján 2 paraméterrel kell rendelkeznie\"}},label:{x:{missing:\"A címkének x tulajdonsággal kell rendelkeznie\"},y:{missing:\"A címkének y tulajdonsággal kell rendelkeznie\"},text:{missing:\"A címkének szövegtulajdonsággal kell rendelkeznie\"}},icon:{x:{missing:\"Az ikonnak x tulajdonsággal kell rendelkeznie\"},y:{missing:\"Az ikonnak y tulajdonsággal kell rendelkeznie\"},name:{missing:\"Az ikonnak név tulajdonsággal kell rendelkeznie\"}}},service_call_schema:{missing:\"Hiányzó szolgáltatáshívási séma\",service:{missing:\"A szolgáltatáshívási sémának tartalmaznia kell a szolgáltatást\",invalid:\"Érvénytelen szolgáltatás: {0}\"}}}},invalid_entities:\"Érvénytelen entitások:\",invalid_calibration:\"Érvénytelen kalibráció, ellenőrizze a konfigurációt\"},jt={status:{label:\"Státusz\"},battery_level:{label:\"Akkumulátor\"},fan_speed:{label:\"Ventilátor üzemmód\"},sensor_dirty_left:{label:\"Szenzorok\"},filter_left:{label:\"Szűrő\"},main_brush_left:{label:\"Fő kefe\"},side_brush_left:{label:\"Oldalkefe\"},cleaning_count:{label:\"Takarítás számláló\"},cleaned_area:{label:\"Tisztított terület\"},cleaning_time:{label:\"Takarítási idő\"}},Ot={vacuum_start:\"Indítás\",vacuum_pause:\"Szünet\",vacuum_stop:\"Álljon meg\",vacuum_return_to_base:\"Vissza a bázisra\",vacuum_clean_spot:\"Clean spot\",vacuum_locate:\"Robot megkeresése\",vacuum_set_fan_speed:\"Ventilátor üzemmódjának módosítása\"},Lt={hour_shortcut:\"h\",meter_shortcut:\"m\",meter_squared_shortcut:\"m²\",minute_shortcut:\"min\"},It={success:\"Siker!\",no_selection:\"Nincs kiválasztva\",failed:\"Nem sikerült meghívni a szolgáltatást\"},Dt={description:{before_link:\"Ez a vizuális szerkesztő csak az alapkonfigurációt támogatja a segítségével létrehozott kameraentitással \",link_text:\"Xiaomi Cloud Map Extractor\",after_link:\". A fejlettebb beállításhoz használja a YAML módot.\"},label:{name:\"Cím (nem kötelező)\",entity:\"Vákuum entitás (kötelező)\",camera:\"Kamera entitás (kötelező)\",vacuum_platform:\"Vákuumos platform (szükséges)\",map_locked:\"Térkép zárolva (opcionális)\",two_finger_pan:\"Kétujjas pásztázás (opcionális)\"}},Ut={common:$t,map_mode:Nt,validation:Rt,tile:jt,icon:Ot,unit:Lt,popups:It,editor:Dt},Ft={version:\"Útgáfa\",invalid_configuration:\"Ógildar stillingar {0}\",description:\"Spjald sem leyfir þér að stjórna ryksuguvélmenni þínu\",old_configuration:\"Gamlar stillingar fundust. Uppfærðu stillingarnar fyrir nýjustu útgáfu eða búðu til nýtt spjald frá grunni.\",old_configuration_migration_link:\"Aðlögunar leiðbeiningar\"},Vt={invalid:\"Ógilt sniðmát!\",vacuum_goto:\"Velja og af stað!\",vacuum_goto_predefined:\"Deplar\",vacuum_clean_segment:\"Herbergi\",vacuum_clean_point:\"Hreinn depill\",vacuum_clean_point_predefined:\"Deplar\",vacuum_clean_zone:\"Þrífa svæði\",vacuum_clean_zone_predefined:\"Svæðislistar\",vacuum_follow_path:\"Ferill\"},Ht={preset:{entity:{missing:\"Vantar einingu: entity\"},preset_name:{missing:\"Vantar einingu: preset_name\"},platform:{invalid:\"Rangt ryksugu sniðmát: {0}\"},map_source:{missing:\"Vantar einingu: map_source\",none_provided:\"Enginn myndavél né mynd er skráð\",ambiguous:\"Aðeins einn uppruni fyrir kort leyfður\"},calibration_source:{missing:\"Vantar einindi: calibration_source\",ambiguous:\"Aðeins ein kvörðunar stilling leyfð\",none_provided:\"Engin kvörðunarstilling er skilgreind\",calibration_points:{invalid_number:\":Þú verður að skilagreina nákvæmlega 3 eða 4 kvörðunar punkta\",missing_map:\"Hver punktur verður að vera hnit á kortinu\",missing_vacuum:\"Hver punktur á kortinu verður að vera hnit fyrir ryksuguna.\",missing_coordinate:\"Kort og ryksugu stillingar verða að innihalda x og y hnit\"}},icons:{invalid:\"Villa í stillingum: icons\",icon:{missing:'Hver færsla fyrir smámynd verður að innihalda \"icon\" stillingu'}},tiles:{invalid:\"Villa í stillingum: tiles\",entity:{missing:'Hver færsla á lista verður að innihalda \"entity\"'},label:{missing:'Hver færsla á lista verður að innihalda \"label\"'}},map_modes:{invalid:\"Villa í stillingum: map_modes\",icon:{missing:'Það vantar \"icon\" fyrir kortaham'},name:{missing:'Það vantar \"name\" einindið fyrir kortaham'},template:{invalid:\"Rangt sniðmát: {0}\"},predefined_selections:{not_applicable:\"Hamur {0} styður ekki fyrirfram skilgreint val\",zones:{missing:\"Það vantar skilgreiningar fyrir svæði\",invalid_parameters_number:\"Hvert svæði verður að hafa 4 færibreytur\"},points:{position:{missing:\"Það vantar stillingar fyrir hnit\",invalid_parameters_number:\"Hvert hnit verður að hafa 2 færibreytur\"}},rooms:{id:{missing:\"Það vantar auðkenni herbergis\",invalid_format:\"Vitlaust auðkenni : {0}\"},outline:{invalid_parameters_number:\"Hvert hnit í útlínum fyrir herbergi verður að innihalda 2 færibreytur\"}},label:{x:{missing:\"Merkimiði verður að innihalda x einingu\"},y:{missing:\"Merkimiði verður að innihalda y einingu\"},text:{missing:'Merkimiði verður að innihalda \"text\" einingu'}},icon:{x:{missing:\"Smámynd verður að innihalda x einingu\"},y:{missing:\"Smámynd verður að innihalda y einingu\"},name:{missing:'Smámynd verður að innihalda \"name\" einingu'}}},service_call_schema:{missing:\"Skema fyrir þjónustukall vantar\",service:{missing:'Skema fyrir þjónustukall verður að innihalda \"service\"',invalid:\"Röng þjónusta: {0}\"}}}},invalid_entities:\"Röng einindi:\",invalid_calibration:\"Röng kvörðun, athugaðu stillingarnar þínar\"},Zt={status:{label:\"Staða\",value:{Starting:\"Ræsi\",\"Charger disconnected\":\"Hleðslutæki aftengt\",Idle:\"Aðgerðarlaus\",\"Remote control active\":\"Fjarstýring virk\",Cleaning:\"Að þrífa\",\"Returning home\":\"Á leiðinni heim\",\"Manual mode\":\"Handvirk stýring\",Charging:\"Í hleðslu\",\"Charging problem\":\"Vandamál við hleðslu\",Paused:\"Í bið\",\"Spot cleaning\":\"Hreinsa blett\",Error:\"Villa\",\"Shutting down\":\"Slekk á\",Updating:\"Uppfæri\",Docking:\"Við hleðslustöð\",\"Going to target\":\"Fer á skotmark\",\"Zoned cleaning\":\"Þrífa svæði\",\"Segment cleaning\":\"Þrífa herbergi\",\"Emptying the bin\":\"Tæma ruslatunnu\",\"Charging complete\":\"Hleðslu lokið\",\"Device offline\":\"Tæki er ótengt\"}},battery_level:{label:\"Rafhlaða\"},fan_speed:{label:\"Viftuhraði\",value:{Silent:\"Hljóðlátur\",Standard:\"Venjulegur\",Medium:\"Miðlungs\",Turbo:\"Túrbó\",Auto:\"Sjálfvirkt\",Gentle:\"Þægilegur\"}},sensor_dirty_left:{label:\"Vegg og fallskynjarar eftir\"},filter_left:{label:\"Sía eftir\"},main_brush_left:{label:\"Aðalbursti eftir\"},side_brush_left:{label:\"Hliðarbursti eftir\"},cleaning_count:{label:\"Fjöldi þrifa\"},cleaned_area:{label:\"Svæði þrifið\"},cleaning_time:{label:\"Þriftími\"},mop_left:{label:\"Moppa eftir\"}},Gt={vacuum_start:\"Ræsa\",vacuum_pause:\"Gera hlé\",vacuum_stop:\"Stoppa\",vacuum_return_to_base:\"Tilbaka á stöð\",vacuum_clean_spot:\"Hreinsa blett\",vacuum_locate:\"Finna\",vacuum_set_fan_speed:\"Breyta viftuhraða\"},Xt={hour_shortcut:\"k\",meter_shortcut:\"m\",meter_squared_shortcut:\"m²\",minute_shortcut:\"mín\"},Kt={success:\"Virkaði!\",no_selection:\"Ekkert val\",failed:\"Villa við þjónustukall\"},qt={description:{before_link:'Sjónrænn ritill styður aðeins grunn stillingar með \"camera\" einingunni sem notar ',link_text:\"Xiaomi Cloud Map Extractor\",after_link:\". Fyrir ítarstillingar, notaðu YAML ham.\"},label:{name:\"Titill (valkvætt)\",entity:\"Vacuum eining (nauðsynlegt)\",camera:\"Camera eining (nauðsynlegt)\",vacuum_platform:\"Vacuum platform (nauðsynlegt)\",map_locked:\"Læsa korti (valkvætt)\",two_finger_pan:\"Val með 2 fingrum (valkvætt)\"}},Bt={common:Ft,map_mode:Vt,validation:Ht,tile:Zt,icon:Gt,unit:Xt,popups:Kt,editor:qt},Yt={version:\"Versione\",invalid_configuration:\"Configurazione non valida {0}\",description:\"Una card per controllare il tuo robot aspirapolvere\",old_configuration:\"Trovata una vecchia configurazione. Correggi la configurazione all'ultima possibile o crea una nuova card.\",old_configuration_migration_link:\"Guida Migrazione\"},Wt={invalid:\"Template non valido!\",vacuum_goto:\"Pin & Go\",vacuum_goto_predefined:\"Punti\",vacuum_clean_segment:\"Stanze\",vacuum_clean_zone:\"Pulizia a Zone\",vacuum_clean_zone_predefined:\"Lista Zone\",vacuum_follow_path:\"Percorso\"},Jt={preset:{entity:{missing:\"Proprietà Mancante: entity\"},preset_name:{missing:\"Proprietà Mancante: preset_name\"},platform:{invalid:\"Piattaforma aspirapolvere non valida: {0}\"},map_source:{missing:\"Proprietà Mancante: map_source\",none_provided:\"Inserire camera o immagine\",ambiguous:\"È consentita una sola sorgente della mappa\"},calibration_source:{missing:\"Proprietà Mancante: calibration_source\",ambiguous:\"È consentita una solo una sorgente di calibrazione\",none_provided:\"Nessuna fonte di calibrazione fornita\",calibration_points:{invalid_number:\"Esattamente 3 o 4 punti di calibrazione richiesti\",missing_map:\"Ogni punto di calibrazione deve contenere le coordinate della mappa\",missing_vacuum:\"Ciascun punto di calibrazione deve contenere le coordinate dell'aspirapolvere\",missing_coordinate:\"I punti di calibrazione della mappa e dell'aspirapolvere devono contenere sia le coordinate x che y\"}},icons:{invalid:\"Errore nella configurazione: icons\",icon:{missing:\"Ogni voce dell'elenco delle icone deve contenere la proprietà dell'icona\"}},tiles:{invalid:\"Errore nella configurazione: tiles\",entity:{missing:\"Ogni voce dell'elenco 'tile' deve contenere una entity\"},label:{missing:\"Ogni voce dell'elenco 'tile' deve contenere una label\"}},map_modes:{invalid:\"Errore nella configurazione: map_modes\",icon:{missing:\"Icona della modalità mappa mancante\"},name:{missing:\"Nome della modalità mappa mancante\"},template:{invalid:\"Template non valido: {0}\"},predefined_selections:{not_applicable:\"Modalità {0} non supporta le selezioni predefinite\",zones:{missing:\"Configurazione zone mancante\",invalid_parameters_number:\"Ogni zona deve avere 4 parametri\"},points:{position:{missing:\"Configurazione punti mancante\",invalid_parameters_number:\"Ogni punto deve avere 2 parametri\"}},rooms:{id:{missing:\"ID stanza mancante\",invalid_format:\"ID stanza non valido: {0}\"},outline:{invalid_parameters_number:\"Ogni punto del contorno della stanza deve avere 2 parametri\"}},label:{x:{missing:\"Label deve avere la proprietà x\"},y:{missing:\"Label deve avere la proprietà y\"},text:{missing:\"Label deve avere la proprietà text\"}},icon:{x:{missing:\"Icon deve avere la proprietà x\"},y:{missing:\"Icon deve avere la proprietà y\"},name:{missing:\"Icon deve avere la proprietà name\"}}},service_call_schema:{missing:\"Schema della chiamata al servizio mancante\",service:{missing:\"La chiamata al servizio deve contenere un servizio\",invalid:\"Servizio non valido: {0}\"}}}},invalid_entities:\"Entità non valide:\",invalid_calibration:\"Calibrazione non valida, per favore controlla la configurazione\"},Qt={status:{label:\"Stato\",value:{Starting:\"Avvio\",\"Charger disconnected\":\"Caricabatterie scollegato\",Idle:\"Riposo\",\"Remote control active\":\"Controllo remoto attivo\",Cleaning:\"Pulizia\",\"Returning home\":\"Ritorno alla base\",\"Manual mode\":\"Modalità Manuale\",Charging:\"Caricamento\",\"Charging problem\":\"Problema di ricarica\",Paused:\"Pausa\",\"Spot cleaning\":\"Pulizia a punti\",Error:\"Errore\",\"Shutting down\":\"Spegnimento\",Updating:\"Aggiornamento in corso\",Docking:\"In base\",\"Going to target\":\"Andando al punto\",\"Zoned cleaning\":\"Pulizia a zone\",\"Segment cleaning\":\"Pulizia segmenti\",\"Emptying the bin\":\"Svuotare il contenitore\",\"Charging complete\":\"Carica Completata\",\"Device offline\":\"Device offline\"}},battery_level:{label:\"Batteria\"},fan_speed:{label:\"Velocità Ventola\",value:{Silent:\"Silenzioso\",Standard:\"Standard\",Medium:\"Media\",Turbo:\"Turbo\",Auto:\"Auto\",Gentle:\"Delicato\"}},sensor_dirty_left:{label:\"Sensori\"},filter_left:{label:\"Filtro\"},main_brush_left:{label:\"Spazzola Principale\"},side_brush_left:{label:\"Spazzola laterale\"},cleaning_count:{label:\"Conteggio pulizia\"},cleaned_area:{label:\"Area pulita\"},cleaning_time:{label:\"Tempo di pulizia\"},mop_left:{label:\"Panno\"}},ea={vacuum_start:\"Avvia\",vacuum_pause:\"Pausa\",vacuum_stop:\"Stop\",vacuum_return_to_base:\"Ritorna alla base\",vacuum_clean_spot:\"Pulizia spot\",vacuum_locate:\"Localizza\",vacuum_set_fan_speed:\"Cambia velocità ventola\"},ta={hour_shortcut:\"h\",meter_shortcut:\"m\",meter_squared_shortcut:\"m²\",minute_shortcut:\"min\"},aa={success:\"Confermato!\",no_selection:\"Nessuna Selezione\",failed:\"Chiamata al servizio fallita\"},ia={description:{before_link:\"Questo editor visivo supporta solo una configurazione di base con un'entità telecamera creata utilizzando \",link_text:\"Xiaomi Cloud Map Extractor\",after_link:\". Per una configurazione più avanzata usa la modalità YAML.\"},label:{name:\"Titolo (opzionale)\",entity:\"Entità Aspirapolvere (obbligatorio)\",camera:\"Entità camera (obbligatorio)\",vacuum_platform:\"Piattaforma aspirapolvere (obbligatorio)\",map_locked:\"Blocco mappa (opzionale)\",two_finger_pan:\"Zoom a due dita (opzionale)\"}},na={common:Yt,map_mode:Wt,validation:Jt,tile:Qt,icon:ea,unit:ta,popups:aa,editor:ia},ra={version:\"Versie\",invalid_configuration:\"Ongeldige configuratie {0}\",description:\"Een kaart waarmee je jouw robotstofzuiger kunt bedienen.\",old_configuration:\"Oude configuratie gevonden. Pas je configuratie aan op basis van de nieuwe versie of maak een volledig nieuwe kaart.\",old_configuration_migration_link:\"Uitleg configuratie aanpassen\"},oa={invalid:\"Ongeldig sjabloon!\",vacuum_goto:\"Pin & Go\",vacuum_goto_predefined:\"Punten\",vacuum_clean_segment:\"Kamers\",vacuum_clean_point:\"Schoonmaak punten\",vacuum_clean_point_predefined:\"Punten\",vacuum_clean_zone:\"Zone schoonmaak\",vacuum_clean_zone_predefined:\"Zone lijst\",vacuum_follow_path:\"Pad\"},la={preset:{entity:{missing:\"Ontbrekende parameter: entity\"},preset_name:{missing:\"Ontbrekende parameter: preset_name\"},platform:{invalid:\"Ongeldig stofzuigerplatform: {0}\"},map_source:{missing:\"Ontbrekende parameter: map_source\",none_provided:\"Geen camera of afbeelding opgegeven\",ambiguous:\"Slechts één kaartbron toegestaan\"},calibration_source:{missing:\"Ontbrekende parameter: calibration_source\",ambiguous:\"Slechts één kalibratiebron toegestaan\",none_provided:\"Geen kalibratiebron opgegeven\",calibration_points:{invalid_number:\"Precies 3 of 4 kalibratiepunten vereist\",missing_map:\"Elk kalibratiepunt moet kaart coördinaten bevatten\",missing_vacuum:\"Elk kalibratiepunt moet stofzuiger coördinaten bevatten\",missing_coordinate:\"Kaart en stofzuiger kalibratiepunten moeten zowel een x als y coödinaat bevatten\"}},icons:{invalid:\"Fout in configuratie: icons\",icon:{missing:\"Elk item in de lijst moet de eigenschap « icon » bevatten\"}},tiles:{invalid:\"Fout in configuratie: tiles\",entity:{missing:\"Elk item in de lijst moet de eigenschap « entity » bevatten\"},label:{missing:\"Elk item in de lijst moet de eigenschap « label » bevatten\"}},map_modes:{invalid:\"Fout in configuratie: map_modes\",icon:{missing:\"Pictogram van kaartmodus ontbreekt\"},name:{missing:\"Naam van kaartmodus ontbreekt\"},template:{invalid:\"Ongeldig sjabloon: {0}\"},predefined_selections:{not_applicable:\"Modus {0} ondersteunt geen vooraf gedefinieerde selecties\",zones:{missing:\"Zone configuratie ontbreekt\",invalid_parameters_number:\"Elke zone moet 4 coördinaten hebben\"},points:{position:{missing:\"Punten configuratie ontbreekt\",invalid_parameters_number:\"Elk punt moet 2 coördinaten hebben\"}},rooms:{id:{missing:\"Kamer id ontbreekt\",invalid_format:\"Ongeldige kamer id: {0}\"},outline:{invalid_parameters_number:\"Elk punt van de kamer omtrek moet 2 coördinaten hebben\"}},label:{x:{missing:\"Elk label moet de eigenschap « x » bevatten\"},y:{missing:\"Elk label moet de eigenschap « y » bevatten\"},text:{missing:\"Elk label moet de eigenschap « text » bevatten\"}},icon:{x:{missing:\"Elk pictogram moet de eigenschap « x » bevatten\"},y:{missing:\"Elk pictogram moet de eigenschap « y » bevatten\"},name:{missing:\"Elk pictogram moet de eigenschap « name » bevatten\"}}},service_call_schema:{missing:\"Serviceoproep schema\",service:{missing:\"Serviceoproep schema moet een service bevatten\",invalid:\"Ongeldige service: {0}\"}}}},invalid_entities:\"Ongeldige entiteiten:\",invalid_calibration:\"Ongeldige kalibratie, controleer je configuratie\"},sa={status:{label:\"Status\",value:{Starting:\"Starten\",\"Charger disconnected\":\"Lader niet aangesloten\",Idle:\"Inactief\",\"Remote control active\":\"Afstandsbediening actief\",Cleaning:\"Schoonmaken\",\"Returning home\":\"Terugkeren naar basisstation\",\"Manual mode\":\"Handmatige modus\",Charging:\"Laden\",\"Charging problem\":\"Laadprobleem\",Paused:\"Gepauzeerd\",\"Spot cleaning\":\"Spot schoonmaken\",Error:\"Fout\",\"Shutting down\":\"Afsluiten\",Updating:\"Updaten\",Docking:\"Docking\",\"Going to target\":\"Onderweg naar doel\",\"Zoned cleaning\":\"Zone schoonmaken\",\"Segment cleaning\":\"Kamers schoonmaken\",\"Emptying the bin\":\"Opvangbak leegmaken\",\"Charging complete\":\"Opladen voltooid\",\"Device offline\":\"Apparaat offline\"}},battery_level:{label:\"Batterij\"},fan_speed:{label:\"Fan snelheid\",value:{Silent:\"Stil\",Standard:\"Standaard\",Medium:\"Medium\",Turbo:\"Turbo\",Auto:\"Automatisch\",Gentle:\"Zacht\"}},sensor_dirty_left:{label:\"Sensors\"},filter_left:{label:\"Filter\"},main_brush_left:{label:\"Hoofdborstel\"},side_brush_left:{label:\"Zijborstel\"},cleaning_count:{label:\"Schoonmaakteller\"},cleaned_area:{label:\"Oppervlakte\"},cleaning_time:{label:\"Schoonmaaktijd\"},mop_left:{label:\"Dweil\"}},ca={vacuum_start:\"Start\",vacuum_pause:\"Pause\",vacuum_stop:\"Stop\",vacuum_return_to_base:\"Terug naar basisstation\",vacuum_clean_spot:\"Spot schoonmaak\",vacuum_locate:\"Lokaliseren\",vacuum_set_fan_speed:\"Fan snelheid aanpassen\"},da={hour_shortcut:\"u\",meter_shortcut:\"m\",meter_squared_shortcut:\"m²\",minute_shortcut:\"min\"},ua={success:\"Succes!\",no_selection:\"Geen selectie opgegeven\",failed:\"Fout bij aanroepen service\"},ma={description:{before_link:\"Deze grafische editor ondersteunt slechts een basis configuratie met een camera entiteit welke gemaakt is met \",link_text:\"Xiaomi Cloud Map Extractor\",after_link:\". Gebruik de YAML modus voor een geavanceerde configuratie.\"},label:{name:\"Titel (optioneel)\",entity:\"Stofzuiger entiteit (verplicht)\",camera:\"Camera entiteit (verplicht)\",vacuum_platform:\"stofzuigerplatform (verplicht)\",map_locked:\"Kaart vergrendelen (optioneel)\",two_finger_pan:\"Kaart verplaatsen met twee vingers (optioneel)\"}},pa={common:ra,map_mode:oa,validation:la,tile:sa,icon:ca,unit:da,popups:ua,editor:ma},_a={version:\"Wersja\",invalid_configuration:\"Nieprawidłowa konfiguracja {0}\",description:\"Karta pozwalająca na kontrolowanie odkurzacza\",old_configuration:\"Wykryto starą wersję konfiguracji. Dostosuj kartę do najnowszej wersji, albo utwórz ją od nowa.\",old_configuration_migration_link:\"Przewodnik po migracji\"},ga={invalid:\"Nieprawidłowa wartość template\",vacuum_goto:\"Idź do punktu\",vacuum_goto_predefined:\"Zapisane punkty\",vacuum_clean_segment:\"Pokoje\",vacuum_clean_point:\"Sprzątanie punktowe\",vacuum_clean_point_predefined:\"Zapisane punkty\",vacuum_clean_zone:\"Sprzątanie strefowe\",vacuum_clean_zone_predefined:\"Zapisane strefy\",vacuum_follow_path:\"Ścieżka\"},va={preset:{entity:{missing:\"Brakujący parametr: entity\"},preset_name:{missing:\"Brakujący parametr: preset_name\"},platform:{invalid:\"Nieprawidłowa platforma odkurzacza: {0}\"},map_source:{missing:\"Brakujący parametr: map_source\",none_provided:\"Nie podano źródła mapy\",ambiguous:\"Można podać tylko jedno źródło mapy\"},calibration_source:{missing:\"Brakujący parametr: calibration_source\",ambiguous:\"Można podać tylko jedno źródło kalibracji\",none_provided:\"Nie podano źródła kalibracji\",calibration_points:{invalid_number:\"Wymagane 3 bądź 4 punkty kalibracyjne\",missing_map:\"Każdy punkt kalibracyjny musi posiadać współrzędne na mapie\",missing_vacuum:\"Każdy punkt kalibracyjny musi posiadać współrzędne w układzie odkurzacza\",missing_coordinate:\"Każdy punkt kalibracyjny musi mieć współrzędne x i y\"}},icons:{invalid:\"Błąd w konfiguracji: icons\",icon:{missing:'Każda pozycja na liście ikon musi posiadać parametr \"icon\"'}},tiles:{invalid:\"Błąd w konfiguracji: tiles\",entity:{missing:'Każda pozycja na liście kafelków musi posiadać parametr \"entity\"'},label:{missing:'Każda pozycja na liście kafelków musi posiadać parametr \"label\"'}},map_modes:{invalid:\"Błąd w konfiguracji: map_modes\",icon:{missing:\"Brakująca ikona szablonu trybu mapy\"},name:{missing:\"Brakująca nazwa szablonu trybu mapy\"},template:{invalid:\"Nieprawidłowy szablon trybu mapy: {0}\"},predefined_selections:{not_applicable:\"Szablon {0} nie wspiera zapisywania zaznaczeń\",zones:{missing:\"Brakująca lista zapisanych stref\",invalid_parameters_number:\"Każda zapisana strefa musi posiadać 4 współrzędne\"},points:{position:{missing:\"Brakująca lista zapisanych punktów\",invalid_parameters_number:\"Każdy zapisany punkt musi posiadać 2 współrzędne\"}},rooms:{id:{missing:\"Brakujący identyfikator pokoju\",invalid_format:\"Nieprawidłowy identyfikator pokoju: {0}\"},outline:{invalid_parameters_number:\"Każdy punkt obrysu pokoju musi posiadać 2 współrzędne\"}},label:{x:{missing:\"Każda etykieta musi posiadać współrzędną x\"},y:{missing:\"Każda etykieta musi posiadać współrzędną y\"},text:{missing:\"Każda etykieta musi posiadać tekst\"}},icon:{x:{missing:\"Każda ikona musi posiadać współrzędną x\"},y:{missing:\"Każda ikona musi posiadać współrzędną y\"},name:{missing:'Każda ikona musi posiadać parametr \"name\"'}}},service_call_schema:{missing:\"Brakujący schemat wywołania usługi\",service:{missing:\"Każdy schemat usługi musi posiadać podaną nazwę usługi  \",invalid:\"Nieprawidłowa usługa: {0}\"}}}},invalid_entities:\"Nieprawidłowe encje:\",invalid_calibration:\"Nieprawidłowa kalibracja, sprawdź konfigurację\"},ha={status:{label:\"Status\",value:{Starting:\"Uruchamianie\",\"Charger disconnected\":\"Ładowarka odłączona\",Idle:\"Nieaktywny\",\"Remote control active\":\"Zdalne sterowanie\",Cleaning:\"Sprzątanie\",\"Returning home\":\"Powrót do stacji\",\"Manual mode\":\"Tryb manualny\",Charging:\"Ładowanie\",\"Charging problem\":\"Problem z ładowaniem\",Paused:\"Wstrzymany\",\"Spot cleaning\":\"Sprzątanie punktowe\",Error:\"Błąd\",\"Shutting down\":\"Wyłączanie\",Updating:\"Aktualizowanie\",Docking:\"Dokowanie\",\"Going to target\":\"W drodze do celu\",\"Zoned cleaning\":\"Sprzątanie strefowe\",\"Segment cleaning\":\"Sprzątanie pokoju\",\"Emptying the bin\":\"Opróżnianie pojemnika\",\"Charging complete\":\"Ładowanie zakończone\",\"Device offline\":\"Offline\"}},battery_level:{label:\"Bateria\"},fan_speed:{label:\"Wentylator\",value:{Silent:\"Cichy\",Standard:\"Normalny\",Medium:\"Średni\",Turbo:\"Turbo\",Auto:\"Automatyczny\",Gentle:\"Delikatny\"}},sensor_dirty_left:{label:\"Sensory\"},filter_left:{label:\"Filtr\"},main_brush_left:{label:\"Główna szczotka\"},side_brush_left:{label:\"Boczna szczotka\"},cleaning_count:{label:\"Licznik sprzątań\"},cleaned_area:{label:\"Powierzchnia\"},cleaning_time:{label:\"Czas sprzątania\"},mop_left:{label:\"Mop\"}},fa={vacuum_start:\"Uruchom\",vacuum_pause:\"Wstrzymaj\",vacuum_stop:\"Zatrzymaj\",vacuum_return_to_base:\"Wróć do stacji dokującej\",vacuum_clean_spot:\"Wyczyść miejsce\",vacuum_locate:\"Zlokalizuj\",vacuum_set_fan_speed:\"Zmień prędkość wentylatora\"},ba={hour_shortcut:\"h\",meter_shortcut:\"m\",meter_squared_shortcut:\"m²\",minute_shortcut:\"min\"},ya={success:\"Usługa wywołana!\",no_selection:\"Nie wybrano zaznaczenia\",failed:\"Błąd wywołania usługi\"},ka={description:{before_link:\"Ten edytor interfejsu wspiera jedynie podstawową konfigurację dla kamery utworzonej przy użyciu \",link_text:\"Xiaomi Cloud Map Extractora\",after_link:\". W celu bardziej zaawansowanej konfiguracji użyj trybu YAML.\"},label:{name:\"Tytuł (opcjonalny)\",entity:\"Encja odkurzacza (wymagana)\",camera:\"Kamera z mapą (wymagana)\",vacuum_platform:\"Platforma integracji odkurzacza (wymagana)\",map_locked:\"Blokada mapy (opcjonalna)\",two_finger_pan:\"Przesuwanie mapy dwoma palcami (opcjonalne)\"}},Aa={common:_a,map_mode:ga,validation:va,tile:ha,icon:fa,unit:ba,popups:ya,editor:ka},xa={version:\"Versão\",invalid_configuration:\"configuração inválida {0}\",description:\"Um cartão que permite que você controlar seu aspirador\",old_configuration:\"Configuração antiga detectada. Ajuste sua configuração para a versão mais recente ou crie um novo cartão do zero.\",old_configuration_migration_link:\"Guia de migração\"},za={invalid:\"template inválido!\",vacuum_goto:\"Click & vai\",vacuum_goto_predefined:\"Local\",vacuum_clean_segment:\"Quartos\",vacuum_clean_zone:\"Limpar zona\",vacuum_clean_zone_predefined:\"Lista de zonas\",vacuum_follow_path:\"Seguir caminho\"},Ea={preset:{entity:{missing:\"Propriedade ausente: entidade\"},preset_name:{missing:\"Propriedade ausente: preset_name\"},platform:{invalid:\"Plataforma de aspirador inválida: {0}\"},map_source:{missing:\"Propriedade ausente: map_source\",none_provided:\"Nenhuma câmera nem imagem fornecida\",ambiguous:\"Apenas uma fonte de mapa permitida\"},calibration_source:{missing:\"Propriedade ausente: calibration_source\",ambiguous:\"Apenas uma fonte de calibração permitida\",none_provided:\"Nenhuma fonte de calibração fornecida\",calibration_points:{invalid_number:\"Exatamente 3 ou 4 pontos de calibração são necessários\",missing_map:\"Cada ponto de calibração deve conter coordenadas do mapa\",missing_vacuum:\"Cada ponto de calibração deve conter coordenadas do aspirador\",missing_coordinate:\"Os pontos de calibração do mapa e do aspirador devem conter as coordenadas x e y\"}},icons:{invalid:\"Erro na configuração: icones\",icon:{missing:\"Cada entrada na lista de ícones deve conter a propriedade do ícone\"}},tiles:{invalid:\"Erro na configuração: tiles\",entity:{missing:\"Cada entrada da lista de tiles deve conter entidade\"},label:{missing:\"Cada entrada da lista de tiles deve conter label\"}},map_modes:{invalid:\"Erro na configuração: map_modes\",icon:{missing:\"Falta o ícone no modo de mapa\"},name:{missing:\"Falta o nome no modo de mapa\"},template:{invalid:\"Template inválido: {0}\"},predefined_selections:{not_applicable:\"O modo {0} não oferece suporte a seleções predefinidas\",zones:{missing:\"Falta a Configuração de zonas\",invalid_parameters_number:\"Cada zona deve ter 4 parâmetros\"},points:{position:{missing:\"Falta a configuração do local\",invalid_parameters_number:\"Cada local deve ter 2 parâmetros\"}},rooms:{id:{missing:\"Falta o id do quarto\",invalid_format:\"Id inválido do quarto: {0}\"},outline:{invalid_parameters_number:\"Cada local da borda do quarto deve ter 2 parâmetros\"}},label:{x:{missing:\"A label deve ter a propriedade x\"},y:{missing:\"A label deve ter a propriedade y\"},text:{missing:\"A label deve ter um texto\"}},icon:{x:{missing:\"O ícone deve ter a propriedade x\"},y:{missing:\"O ícone deve ter a propriedade y\"},name:{missing:\"O ícone deve ter um nome\"}}},service_call_schema:{missing:\"Falta o call service\",service:{missing:\"O call service deve conter o serviço\",invalid:\"serviço inválido: {0}\"}}}},invalid_entities:\"entidades inválidas:\",invalid_calibration:\"Calibração inválida, verifique sua configuração\"},wa={status:{label:\"Status\"},battery_level:{label:\"Bateria\"},fan_speed:{label:\"Velocidade\"},sensor_dirty_left:{label:\"Sensores\"},filter_left:{label:\"Filtro\"},main_brush_left:{label:\"Escova principal\"},side_brush_left:{label:\"Escova lateral\"},cleaning_count:{label:\"Contagem de limpezas\"},cleaned_area:{label:\"Área limpa\"},cleaning_time:{label:\"Tempo de limpeza\"}},Sa={vacuum_start:\"Começar\",vacuum_pause:\"Pausar\",vacuum_stop:\"Parar\",vacuum_return_to_base:\"Voltar para a base\",vacuum_clean_spot:\"Limpar local\",vacuum_locate:\"Localizar\",vacuum_set_fan_speed:\"Mudar velocidade\"},Pa={hour_shortcut:\"h\",meter_shortcut:\"m\",meter_squared_shortcut:\"m²\",minute_shortcut:\"min\"},Ma={success:\"Successo!\",no_selection:\"Nenhuma seleção fornecida\",failed:\"Falha em chamar o serviço\"},Ca={description:{before_link:\"Este editor suporta apenas uma configuração básica usando uma entidade de câmera\",link_text:\"Xiaomi Cloud Map Extractor\",after_link:\". Para um setup avancado use o YAML mode.\"},label:{name:\"Título (opicional)\",entity:\"Entidade do aspirador (Obrigatório)\",camera:\"Entidade da camera (Obrigatório)\",vacuum_platform:\"Plataforma do aspirador (Obrigatório)\",map_locked:\"Mapa travado (Opicional)\",two_finger_pan:\"Movimente com dois dedos (Opicional)\"}},Ta={common:xa,map_mode:za,validation:Ea,tile:wa,icon:Sa,unit:Pa,popups:Ma,editor:Ca},$a={version:\"Версия\",invalid_configuration:\"Неверная конфигурация {0}\",description:\"Карточка, позволяющая управлять вашим пылесосом\",old_configuration:\"Обнаружена устаревшая конфигурация. Приведите ваш конфиг в соответствие с новой версией, или создайте новую карточку с нуля.\",old_configuration_migration_link:\"Руководство по переходу с предыдущих версий.\"},Na={invalid:\"Неверный шаблон!\",vacuum_goto:\"Точка назначения\",vacuum_goto_predefined:\"Предустановленные точки\",vacuum_clean_segment:\"Комнаты\",vacuum_clean_point:\"Уборка точки\",vacuum_clean_point_predefined:\"Список точек\",vacuum_clean_zone:\"Уборка зоны\",vacuum_clean_zone_predefined:\"Список зон\",vacuum_follow_path:\"Путь\"},Ra={preset:{entity:{missing:\"Не указано свойство: entity\"},preset_name:{missing:\"Не указано свойство: preset_name\"},platform:{invalid:\"Неверная платформа: {0}\"},map_source:{missing:\"Не указано свойство: map_source\",none_provided:\"Не предоставлена ни камера ни изображение\",ambiguous:\"Допустим только один источник для карты\"},calibration_source:{missing:\"Не указано свойство: calibration_source\",ambiguous:\"Допустим только один источник для калибровки\",none_provided:\"Не предоставлен источник калибровки\",calibration_points:{invalid_number:\"Для калибровки требуется 3 или 4 точки\",missing_map:\"Каждая точка калибровки должна содержать координаты карты\",missing_vacuum:\"Каждая точка калибровки должна содержать координаты пылесоса\",missing_coordinate:\"Калибровочные точки карты и пылесоса должны содержать как x так и y координаты\"}},icons:{invalid:\"Ошибка в конфигурации: icons\",icon:{missing:\"Каждое вхождение в списке иконок должен содержать icon property\"}},tiles:{invalid:\"Ошибка в конфигурации: tiles\",entity:{missing:\"Каждое вхождение в списке плиток должно содержать entity\"},label:{missing:\"Каждое вхождение в списке плиток должно содержать label\"}},map_modes:{invalid:\"Ошибка в конфигурации: map_modes\",icon:{missing:\"Не указана иконка для влажной уборки\"},name:{missing:\"Не указано имя для влажной уборки\"},template:{invalid:\"Неверный шаблон: {0}\"},predefined_selections:{not_applicable:\"Режим {0} не поддерживает предустановленые элементы\",zones:{missing:\"Не указана конфигурация зоны\",invalid_parameters_number:\"Каждая зона должна содержать 4 параметра\"},points:{position:{missing:\"Не указана конфигурация для точек\",invalid_parameters_number:\"Каждая точка должна содержать 2 параметра\"}},rooms:{id:{missing:\"Не указан id комнаты\",invalid_format:\"Некорректный id комнаты: {0}\"},outline:{invalid_parameters_number:\"Каждая точка контура комнаты должна содержать 2 параметра\"}},label:{x:{missing:\"Ярлык должен содержать свойство x\"},y:{missing:\"Ярлык должен содержать свойство y\"},text:{missing:\"Ярлык должен содержать свойство text\"}},icon:{x:{missing:\"Иконка должна содержать свойство x\"},y:{missing:\"Иконка должна содержать свойство y\"},name:{missing:\"Иконка должна содержать свойство name\"}}},service_call_schema:{missing:\"Отсутствует схема вызова службы\",service:{missing:\"Схема вызова службы должна содержать service\",invalid:\"Некорректная служба: {0}\"}}}},invalid_entities:\"Некорректные сущности:\",invalid_calibration:\"Некорректная калибровка, проверьте вашу конфигурацию\"},ja={status:{label:\"Статус\",value:{Starting:\"Начало уборки\",\"Charger disconnected\":\"Зарядное устройство отключено\",Idle:\"Ожидание\",\"Remote control active\":\"Включено управление через пульт\",Cleaning:\"Уборка\",\"Returning home\":\"Возвращение на базу\",\"Manual mode\":\"Ручной режим\",Charging:\"Зарядка\",\"Charging problem\":\"Проблема с зарядкой\",Paused:\"Пауза\",\"Spot cleaning\":\"Уборка точки\",Error:\"Ошибка\",\"Shutting down\":\"Выключение\",Updating:\"Обновление\",Docking:\"Остановка у базы\",\"Going to target\":\"Направление до точки\",\"Zoned cleaning\":\"Уборка зоны\",\"Segment cleaning\":\"Уборка\",\"Emptying the bin\":\"Очистка бака\",\"Charging complete\":\"Зарядка завершена\",\"Device offline\":\"Устройство не в сети\"}},battery_level:{label:\"Уровень заряда\"},fan_speed:{label:\"Мощность всасывания\",value:{Silent:\"Тихий\",Standard:\"Стандарт\",Medium:\"Средний\",Turbo:\"Турбо\",Auto:\"Авто\",Gentle:\"Слабый\"}},sensor_dirty_left:{label:\"Уровень загрязнения датчиков\"},filter_left:{label:\"Ресурс фильтра\"},main_brush_left:{label:\"Ресурс основной щётки\"},side_brush_left:{label:\"Ресурс боковой щётки\"},cleaning_count:{label:\"Число уборок\"},cleaned_area:{label:\"Площадь уборки\"},cleaning_time:{label:\"Время уборки\"},mop_left:{label:\"Ресурс тряпки\"}},Oa={vacuum_start:\"Старт\",vacuum_pause:\"Пауза\",vacuum_stop:\"Стоп\",vacuum_return_to_base:\"Вернуть к базе\",vacuum_clean_spot:\"Убрать точку\",vacuum_locate:\"Обнаружить\",vacuum_set_fan_speed:\"Изменить мощность всасывания\"},La={hour_shortcut:\"ч\",meter_shortcut:\"м\",meter_squared_shortcut:\"м²\",minute_shortcut:\"мин\"},Ia={success:\"Успех!\",no_selection:\"Ничего не выбрано\",failed:\"Не удалось вызвать службу\"},Da={description:{before_link:\"Данный редактор поддерживает только базовую конфигурацию с камерой, созданной посредством\",link_text:\"Xiaomi Cloud Map Extractor\",after_link:\". Для более тонкой настройки, используйте YAML-мод.\"},label:{name:\"Заголовок (опционально)\",entity:\"Сущность пылесоса (обязательно)\",camera:\"Сущность камеры (обязательно)\",vacuum_platform:\"Платформа пылесоса (обязательно)\",map_locked:\"Блокировка карты (опционально)\",two_finger_pan:\"Перемещение жестом двумя пальцами (опционально)\"}},Ua={common:$a,map_mode:Na,validation:Ra,tile:ja,icon:Oa,unit:La,popups:Ia,editor:Da},Fa={version:\"Verzia\",invalid_configuration:\"Neplatná konfigurácia {0}\",description:\"Karta pomocou ktorej môžete ovládať váš vysávač\",old_configuration:\"Detekovaná zastaralá konfigurácia. Upravte prosím konfiguráciu alebo kartu vytvorte znovu od začiatku.\",old_configuration_migration_link:\"Návod na úpravu konfigurácie\"},Va={invalid:\"Neplatná šablóna\",vacuum_goto:\"Presun na bod\",vacuum_goto_predefined:\"Presun na bod zo zoznamu\",vacuum_clean_segment:\"Upratovanie miestnosti\",vacuum_clean_point:\"Upratovanie bodu\",vacuum_clean_point_predefined:\"Upratovanie bodu zo zoznamu\",vacuum_clean_zone:\"Upratovanie oblasti\",vacuum_clean_zone_predefined:\"Upratovanie oblasti zo zoznamu\",vacuum_follow_path:\"Trasa\"},Ha={preset:{entity:{missing:'Chýbajúca položka \"entity\"'},preset_name:{missing:'Chýbajúca položka \"preset_name\"'},platform:{invalid:\"Neplatná platforma vysávača: {0}\"},map_source:{missing:'Chýbajúca položka \"map_source\"',none_provided:\"Chýbajúci odkaz na kameru alebo obrázok s mapou\",ambiguous:\"Povolený iba jeden zdroj mapy\"},calibration_source:{missing:'Chýbajúca položka \"calibration_source\"',ambiguous:\"Povolený iba jeden zdroj kalibrácie\",none_provided:\"Chýbajúci zdroj kalibrácie\",calibration_points:{invalid_number:\"Požadované 3 alebo 4 kalibračné body\",missing_map:\"Každý kalibračný bod musí obsahovať súradnice mapy\",missing_vacuum:\"Každý kalibračný bod musí obsahovať súradnice vysávača\",missing_coordinate:'Súradnice mapy aj vysávače musia vždy obsahovať položku \"x\" a \"y\"'}},icons:{invalid:'Neplatná konfigurácia pre položku \"icons\"',icon:{missing:'Každý záznam v zozname ikon musí vždy obsahovať položku \"icon\"'}},tiles:{invalid:'Neplatná konfigurácia pre položku \"tiles\"',entity:{missing:'Každý záznam v zozname dlaždíc musí vždy obsahovať položku \"entity\"'},label:{missing:'Každý záznam v zozname dlaždíc musí vždy obsahovať položku \"label\"'}},map_modes:{invalid:'Neplatná konfigurácia pre položku \"map_modes\"',icon:{missing:\"Chýbajúca ikona pre mapový režim\"},name:{missing:\"Chýbajúci názov pre mapový režim\"},template:{invalid:\"Neplatná šablóna: {0}\"},predefined_selections:{not_applicable:\"Režim {0} nepodporuje výber z prednastavených možností\",zones:{missing:\"Chýbajúce konfigurácie oblastí\",invalid_parameters_number:\"Každá oblasť musí mať 4 parametre\"},points:{position:{missing:\"Chýbajúce konfigurácie bodov\",invalid_parameters_number:\"Každý bod musí mať 2 parametre\"}},rooms:{id:{missing:\"Chýbajúci ID miestnosti\",invalid_format:\"Neplatný ID miestnosti: {0}\"},outline:{invalid_parameters_number:\"Každý bod ohraničenia miestnosti musí mať 2 parametre\"}},label:{x:{missing:'Štítok musí mať položku \"x\"'},y:{missing:'Štítok musí mať položku \"y\"'},text:{missing:'Štítok musí mať položku \"text\"'}},icon:{x:{missing:'Ikona musí mať položku \"x\"'},y:{missing:'Ikona musí mať položku \"y\"'},name:{missing:'Ikona musí mať položku \"name\"'}}},service_call_schema:{missing:\"Chýbajúci formát volania služby\",service:{missing:'Formát volania služby musí obsahovať položku \"service\"',invalid:\"Neplatná služba: {0}\"}}}},invalid_entities:\"Neplatné entity:\",invalid_calibration:\"Neplatná kalibrácia, prosím skontrolujte konfiguráciu\"},Za={status:{label:\"Stav\",value:{Starting:\"Zapínanie\",\"Charger disconnected\":\"Nabíječka odpojena\",Idle:\"Nečinný\",\"Remote control active\":\"Diaľkové ovládanie aktívne\",Cleaning:\"Upratovanie\",\"Returning home\":\"Návrat do základne\",\"Manual mode\":\"Manuálny režim\",Charging:\"Nabíjanie\",\"Charging problem\":\"Problém s nabíjaním\",Paused:\"Pozastavený\",\"Spot cleaning\":\"Upratovanie bodu\",Error:\"Chyba\",\"Shutting down\":\"Vypínanie\",Updating:\"Prebieha aktualizácia\",Docking:\"Parkovanie\",\"Going to target\":\"Presun na bod\",\"Zoned cleaning\":\"Upratovanie oblasti\",\"Segment cleaning\":\"Upratovanie miestnosti\",\"Emptying the bin\":\"Vyprázdňovanie zásobníka\",\"Charging complete\":\"Nabíjanie dokončené\",\"Device offline\":\"Zariadenie je nedostupné\"}},battery_level:{label:\"Batéria\"},fan_speed:{label:\"Stupeň vysávania\",value:{Silent:\"Tiché\",Standard:\"Štandardné\",Medium:\"Stredné\",Turbo:\"Turbo\",Auto:\"Automatické\",Gentle:\"Slabé\"}},sensor_dirty_left:{label:\"Čistota senzorov\"},filter_left:{label:\"Životnosť filtra\"},main_brush_left:{label:\"Životnosť hlavnej kefy\"},side_brush_left:{label:\"Životnosť bočej kefy\"},cleaning_count:{label:\"Počet upratovaní\"},cleaned_area:{label:\"Uprataná plocha\"},cleaning_time:{label:\"Doba upratovania\"},mop_left:{label:\"Životnosť mopu\"}},Ga={vacuum_start:\"Začať upratovanie\",vacuum_pause:\"Pozastaviť upratovanie\",vacuum_stop:\"Ukončiť upratovanie\",vacuum_return_to_base:\"Návrat do základne\",vacuum_clean_spot:\"Upratať bod\",vacuum_locate:\"Nájsť\",vacuum_set_fan_speed:\"Nastaviť stupeň vysávania\"},Xa={hour_shortcut:\"h\",meter_shortcut:\"m\",meter_squared_shortcut:\"m²\",minute_shortcut:\"min\"},Ka={success:\"Volanie služby bolo úspešné\",no_selection:\"Nebol vykonaný žiadny výber\",failed:\"Volanie služby zlyhalo\"},qa={description:{before_link:\"Tento editor podporuje iba základnú konfiguráciu s použitím entity kamera vytvorené pomocou \",link_text:\"Xiaomi Cloud Map Extractor\",after_link:\". Pre pokročilé nastavenia použite editor kódu.\"},label:{name:\"Titulok (voliteľná položka)\",entity:\"Entita vysávača (povinná položka)\",camera:\"Entita kamery (povinná položka)\",vacuum_platform:\"Platforma vysávača (povinná položka)\",map_locked:\"Uzamknutie mapy\",two_finger_pan:\"Posuv mapy dvoma prstami\"}},Ba={common:Fa,map_mode:Va,validation:Ha,tile:Za,icon:Ga,unit:Xa,popups:Ka,editor:qa},Ya={version:\"Version\",invalid_configuration:\"Ogiltig configuration {0}\",description:\"Ett kort som låter dig kontrollera din dammsugare\",old_configuration:\"Gammal konfiguration upptäckt. Editera din konfiguration till senaste schema eller skapa ett nytt kort från början.\",old_configuration_migration_link:\"Guide för migrering\"},Wa={invalid:\"Ogiltig template!\",vacuum_goto:\"Klicka & Gå\",vacuum_goto_predefined:\"Punkter\",vacuum_clean_segment:\"Rum\",vacuum_clean_point:\"Städpunkt\",vacuum_clean_point_predefined:\"Punkter\",vacuum_clean_zone:\"Zonstädning\",vacuum_clean_zone_predefined:\"Zonlista\",vacuum_follow_path:\"Bana\"},Ja={preset:{entity:{missing:\"Saknar egenskap: entity\"},preset_name:{missing:\"Saknar egenskap: preset_name\"},platform:{invalid:\"Ogiltig dammsugarplattform: {0}\"},map_source:{missing:\"Saknar egenskap: map_source\",none_provided:\"Ingen kamera elle bild angiven\",ambiguous:\"Endast en kartkälla tillåts\"},calibration_source:{missing:\"Saknar egenskap: calibration_source\",ambiguous:\"Endast en kalibreringskälla tillåts\",none_provided:\"Ingen kallibreringskälla angiven\",calibration_points:{invalid_number:\"Exakt 3 eller 4 kalibreringspunkter krävs\",missing_map:\"Varje kalibreringspunkt måste innehålla koordinater för karta\",missing_vacuum:\"Varje kalibreringspunkt måste innehålla koordinater för dammsugare\",missing_coordinate:\"Kalibreringspunkter för karta och dammsugare måste innehålla både x och y koordinater\"}},icons:{invalid:\"Fel i konfigurationen: icons\",icon:{missing:\"Varje post med icons måste innehålla icon-egenskap\"}},tiles:{invalid:\"Fel i konfigurationen: tiles\",entity:{missing:\"Varje post med tiles måste innehålla entity\"},label:{missing:\"Varje post med tiles måste innehålla label\"}},map_modes:{invalid:\"Fel i konfigurationen: map_modes\",icon:{missing:\"Saknar ikon för map mode\"},name:{missing:\"Saknar namn för map mode\"},template:{invalid:\"Ogiltig template: {0}\"},predefined_selections:{not_applicable:\"Läge {0} har inte stöd för fördefinierade val\",zones:{missing:\"Zonens konfiguration saknas\",invalid_parameters_number:\"Varje zon måste ha 4 parametrar\"},points:{position:{missing:\"Punktens konfiguration saknas\",invalid_parameters_number:\"Varje punkt måste ha 2 parametrar\"}},rooms:{id:{missing:\"Rummets id saknas\",invalid_format:\"Felaktigt id för rum: {0}\"},outline:{invalid_parameters_number:\"Varje punk för rumskonturen måste ha 2 parametrar\"}},label:{x:{missing:\"Label måste ha egenskapen x\"},y:{missing:\"Label måste ha egenskapen y\"},text:{missing:\"Label måste ha egenskapen text\"}},icon:{x:{missing:\"Icon måste ha egenskapen x\"},y:{missing:\"Icon måste ha egenskapen y\"},name:{missing:\"Icon måste ha egenskapen name\"}}},service_call_schema:{missing:\"Service call schema saknas\",service:{missing:\"Service call schema måste innehålla service\",invalid:\"Ogiltig service: {0}\"}}}},invalid_entities:\"Ogiltiga entiteter:\",invalid_calibration:\"Ogiltig kalibrering, vänligen se över din konfiguration\"},Qa={status:{label:\"Status\",value:{Starting:\"Startar\",\"Charger disconnected\":\"Laddare frånkopplad\",Idle:\"Inaktiv\",\"Remote control active\":\"Fjärrkontroll aktiv\",Cleaning:\"Städar\",\"Returning home\":\"Återvänder hem\",\"Manual mode\":\"Manuellt läge\",Charging:\"Laddar\",\"Charging problem\":\"Laddningsproblem\",Paused:\"Pausad\",\"Spot cleaning\":\"Spot-rengöring\",Error:\"Fel\",\"Shutting down\":\"Stänger av\",Updating:\"Uppdaterar\",Docking:\"Dockar\",\"Going to target\":\"Går till destination\",\"Zoned cleaning\":\"Städning av zon\",\"Segment cleaning\":\"Städning av rum\",\"Emptying the bin\":\"Tömmer behållaren\",\"Charging complete\":\"Färdigladdad\",\"Device offline\":\"Enhet offline\"}},battery_level:{label:\"Batteri\"},fan_speed:{label:\"Fläkthastighet\",value:{Silent:\"Tyst\",Standard:\"Standard\",Medium:\"Medium\",Turbo:\"Turbo\",Auto:\"Auto\",Gentle:\"Försiktig\"}},sensor_dirty_left:{label:\"Sensorer kvar\"},filter_left:{label:\"Filter kvar\"},main_brush_left:{label:\"Huvudborste kvar\"},side_brush_left:{label:\"Sidoborste kvar\"},cleaning_count:{label:\"Antal städningar\"},cleaned_area:{label:\"Städat område\"},cleaning_time:{label:\"Städtid\"},mop_left:{label:\"Mopp kvar\"}},ei={vacuum_start:\"Start\",vacuum_pause:\"Paus\",vacuum_stop:\"Stopp\",vacuum_return_to_base:\"Återgå till basen\",vacuum_clean_spot:\"Spot-rengöring\",vacuum_locate:\"Lokalisera\",vacuum_set_fan_speed:\"Ändra fläkthastighet\"},ti={hour_shortcut:\"h\",meter_shortcut:\"m\",meter_squared_shortcut:\"m²\",minute_shortcut:\"min\"},ai={success:\"Lyckades!\",no_selection:\"Inget urval tillhandahålls\",failed:\"Mysslyckades kalla på tjänsten\"},ii={description:{before_link:\"Denna visuella redigerare stöder endast en grundläggande konfiguration med en kameraenhet skapad med hjälp av \",link_text:\"Xiaomi Cloud Map Extractor\",after_link:\". Använd YAML-läget för avancerade inställningar.\"},label:{name:\"Titel (valfritt)\",entity:\"Dammsugar-entitet (obligatoriskt)\",camera:\"Kamera-entitet (obligatoriskt)\",vacuum_platform:\"Dammsugarplattform (obligatoriskt)\",map_locked:\"Låst karta (valfritt)\",two_finger_pan:\"Panorering med två fingrar (valfritt)\"}},ni={common:Ya,map_mode:Wa,validation:Ja,tile:Qa,icon:ei,unit:ti,popups:ai,editor:ii},ri={version:\"Sürüm\",invalid_configuration:\"Geçersiz yapılandırma {0}\",description:\"Vakumunuzu kontrol etmenizi sağlayan bir kart\",old_configuration:\"Eski yapılandırma algılandı. Yapılandırmanızı en son şemaya göre ayarlayın veya sıfırdan yeni bir kart oluşturun.\",old_configuration_migration_link:\"Taşıma kılavuzu\"},oi={invalid:\"Geçersiz şablon!\",vacuum_goto:\"Sabitle ve Git\",vacuum_goto_predefined:\"Noktalar\",vacuum_clean_segment:\"Odalar\",vacuum_clean_point:\"Temiz alan\",vacuum_clean_point_predefined:\"Noktalar\",vacuum_clean_zone:\"Bölge temizliği\",vacuum_clean_zone_predefined:\"Bölge listesi\",vacuum_follow_path:\"Yol\"},li={preset:{entity:{missing:\"Eksik özellik: varlık\"},preset_name:{missing:\"Eksik özellik: ön_ayar_adı(preset_name)\"},platform:{invalid:\"Geçersiz vakum platformu: {0}\"},map_source:{missing:\"Eksik özellik: harita kaynağı (map_source)\",none_provided:\"Kamera yok, görüntü de sağlanmadı\",ambiguous:\"Yalnızca bir harita kaynağına izin verilir\"},calibration_source:{missing:\"Eksik özellik: kalibrasyon_kaynak (calibration_source)\",ambiguous:\"Yalnızca bir kalibrasyon kaynağına izin verilir\",none_provided:\"Kalibrasyon kaynağı sağlanmadı\",calibration_points:{invalid_number:\"Tam olarak 3 veya 4 kalibrasyon noktası gerekli\",missing_map:\"Her kalibrasyon noktası harita koordinatlarını içermelidir\",missing_vacuum:\"Her kalibrasyon noktası vakum koordinatlarını içermelidir\",missing_coordinate:\"Harita ve vakum kalibrasyon noktaları hem x hem de y koordinatını içermelidir\"}},icons:{invalid:\"Yapılandırmada hata: simgeler\",icon:{missing:\"Simgeler listesinin her girişi, simge özelliği içermelidir\"}},tiles:{invalid:\"Yapılandırmada hata: döşemeler\",entity:{missing:\"Kutucuk listesinin her girişi varlık içermelidir\"},label:{missing:\"Fayans listesinin her girişi etiket içermelidir\"}},map_modes:{invalid:\"Yapılandırmada hata: map_modes\",icon:{missing:\"Harita modunun eksik simgesi\"},name:{missing:\"Harita modunun adı eksik\"},template:{invalid:\"Geçersiz şablon: {0}\"},predefined_selections:{not_applicable:\"Mod {0} önceden tanımlanmış seçimleri desteklemiyor\",zones:{missing:\"Eksik bölge yapılandırması\",invalid_parameters_number:\"Her bölgenin 4 parametresi olmalıdır\"},points:{position:{missing:\"Eksik nokta yapılandırması\",invalid_parameters_number:\"Her noktanın 2 parametresi olmalıdır\"}},rooms:{id:{missing:\"Eksik oda kimliği\",invalid_format:\"Geçersiz oda kimliği: {0}\"},outline:{invalid_parameters_number:\"Oda anahattının her noktası 2 parametreye sahip olmalıdır\"}},label:{x:{missing:\"Etiketin x özelliği olmalıdır\"},y:{missing:\"Etiketin y özelliği olmalıdır\"},text:{missing:\"Etiketin metin özelliği olmalıdır\"}},icon:{x:{missing:\"Simgenin x özelliği olmalıdır\"},y:{missing:\"Simgenin y özelliği olmalıdır\"},name:{missing:\"Simge isim özelliğine sahip olmalıdır\"}}},service_call_schema:{missing:\"Eksik servis çağrısı şeması\",service:{missing:\"Servis çağrısı şeması servis içermelidir\",invalid:\"Geçersiz hizmet: {0}\"}}}},invalid_entities:\"Geçersiz varlıklar:\",invalid_calibration:\"Geçersiz kalibrasyon, lütfen yapılandırmanızı kontrol edin\"},si={status:{label:\"Durum\",value:{Starting:\"Başlangıç\",\"Charger disconnected\":\"Şarj cihazının bağlantısı kesildi\",Idle:\"Idle\",\"Remote control active\":\"Uzaktan kumanda aktif\",Cleaning:\"Temizleme\",\"Returning home\":\"Eve dönüş\",\"Manual mode\":\"Manual mod\",Charging:\"Şarj oluyor\",\"Charging problem\":\"Şarj sorunu\",Paused:\"Duraklatıldı\",\"Spot cleaning\":\"Nokta temizleme\",Error:\"Hata\",\"Shutting down\":\"Kapatılıyor\",Updating:\"Güncelleniyor\",Docking:\"Yerleştirme\",\"Going to target\":\"Hedefe gidiyor\",\"Zoned cleaning\":\"Bölgeli temizlik\",\"Segment cleaning\":\"Segment temizliği\",\"Emptying the bin\":\"Çöp haznesini boşalt\",\"Charging complete\":\"Şarj tamamlandı\",\"Device offline\":\"Cihaz çevrimdışı\"}},battery_level:{label:\"Pil\"},fan_speed:{label:\"Süpürme Modu\",value:{Silent:\"Sessiz\",Standard:\"Standart\",Medium:\"Orta\",Turbo:\"Güçlü\",Auto:\"Otomatik\",Gentle:\"Uysal\"}},sensor_dirty_left:{label:\"Sensör kirli\"},filter_left:{label:\"Filtre\"},main_brush_left:{label:\"Ana Fırça\"},side_brush_left:{label:\"Yan Fırça\"},cleaning_count:{label:\"Temizleme sayısı\"},cleaned_area:{label:\"Temizlenmiş alan\"},cleaning_time:{label:\"Temizlik zamanı\"},mop_left:{label:\"Paspaslama\"}},ci={vacuum_start:\"Başlat\",vacuum_pause:\"Duraklat\",vacuum_stop:\"Durdur\",vacuum_return_to_base:\"Üniteye geri dön\",vacuum_clean_spot:\"Temiz nokta\",vacuum_locate:\"Bul\",vacuum_set_fan_speed:\"Fan hızını değiştir\"},di={hour_shortcut:\"S\",meter_shortcut:\"D\",meter_squared_shortcut:\"m²\",minute_shortcut:\"Sn\"},ui={success:\"Başarı!\",no_selection:\"Seçim sağlanmadı\",failed:\"Servis aranamadı\"},mi={description:{before_link:\"Bu görsel düzenleyici, kullanılarak oluşturulan bir kamera varlığı ile yalnızca temel bir yapılandırmayı destekler.\",link_text:\"Xiaomi Bulut Haritası Çıkarıcı\",after_link:\". Daha gelişmiş kurulum için YAML modunu kullanın.\"},label:{name:\"Başlık (isteğe bağlı)\",entity:\"Vakum varlığı (gerekli)\",camera:\"Kamera varlığı (gerekli)\",vacuum_platform:\"Vakum platformu (gerekli)\",map_locked:\"Harita kilitli (isteğe bağlı)\",two_finger_pan:\"İki parmaklı tava (isteğe bağlı)\"}},pi={common:ri,map_mode:oi,validation:li,tile:si,icon:ci,unit:di,popups:ui,editor:mi},_i={version:\"Version\",invalid_configuration:\"Недійсна конфігурація {0}\",description:\"Картка, яка дає змогу контролювати пилосос\",old_configuration:\"Виявлено стару конфігурацію. Налаштуйте конфігурацію до останньої схеми або створіть нову картку з початку.\",old_configuration_migration_link:\"Посібник з міграції\"},gi={invalid:\"Недійсний шаблон!\",vacuum_goto:\"Рух до цілі\",vacuum_goto_predefined:\"Збережені точки\",vacuum_clean_segment:\"Кімнати\",vacuum_clean_point:\"Точкове прибирання\",vacuum_clean_point_predefined:\"Збережені точки\",vacuum_clean_zone:\"Зональне прибирання\",vacuum_clean_zone_predefined:\"Список зон\",vacuum_follow_path:\"Шлях\"},vi={preset:{entity:{missing:\"Відсутній параметр: entity\"},preset_name:{missing:\"Відсутній параметр: preset_name\"},platform:{invalid:\"Недійсна платформа пилососа: {0}\"},map_source:{missing:\"Відсутній параметр: map_source\",none_provided:\"Не вказано джерело мапи\",ambiguous:\"Дозволено тільки одне джерело мапи\"},calibration_source:{missing:\"Відсутній параметр: calibration_source\",ambiguous:\"Дозволено тільки одне джерело калібрування\",none_provided:\"Не вказано джерело калібрування\",calibration_points:{invalid_number:\"Потрібні 3 або 4 точки калібрування\",missing_map:\"Кожна точка калібрування повинна мати координати на мапі\",missing_vacuum:\"Кожна точка калібрування повинна мати координати в системі пилососа\",missing_coordinate:\"Кожна точка калібрування повинна мати координати x і y\"}},icons:{invalid:\"Помилка в конфігурації: icons\",icon:{missing:'Кожен елемент у списку піктограм повинен мати параметр \"icon\"'}},tiles:{invalid:\"Помилка в конфігурації: tiles\",entity:{missing:'Кожен елемент у списку плиток повинен мати параметр \"entity\"'},label:{missing:'Кожен елемент у списку плиток повинен мати параметр \"label\"'}},map_modes:{invalid:\"Помилка в конфігурації: map_modes\",icon:{missing:\"Відсутня піктограма шаблону режиму мапи\"},name:{missing:\"Відсутня назва шаблону режиму мапи\"},template:{invalid:\"Недійсний шаблон: {0}\"},predefined_selections:{not_applicable:\"Шаблон {0} не підтримує збереження вибраних елементів\",zones:{missing:\"Відсутній список збережених зон\",invalid_parameters_number:\"Кожна збережена зона повинна мати 4 координати\"},points:{position:{missing:\"Відсутній список збережених точок\",invalid_parameters_number:\"Кожна записана точка повинна мати 2 координати\"}},rooms:{id:{missing:\"Відсутній ідентифікатор кімнати\",invalid_format:\"Недійсний ідентифікатор кімнати: {0}\"},outline:{invalid_parameters_number:\"Кожна точка контуру кімнати повинна мати 2 координати\"}},label:{x:{missing:\"Кожна мітка повинна мати координату x\"},y:{missing:\"Кожна мітка повинна мати координату y\"},text:{missing:\"Кожна мітка повинна містити текст\"}},icon:{x:{missing:\"Кожна піктограма повинна мати координату x\"},y:{missing:\"Кожна піктограма повинна мати координату y\"},name:{missing:'Кожна піктограма повинна мати параметр \"name\"'}}},service_call_schema:{missing:\"Відсутня схема виклику служби\",service:{missing:\"Кожна схема служби повинна мати назву служби\",invalid:\"Недійсна служба: {0}\"}}}},invalid_entities:\"Недійсні сутності:\",invalid_calibration:\"Неправильне калібрування, перевірте конфігурацію\"},hi={status:{label:\"Статус\",value:{Starting:\"Початок\",\"Charger disconnected\":\"Зарядний пристрій відключено\",Idle:\"Неактивний\",\"Remote control active\":\"Пульт\",Cleaning:\"Прибирання\",\"Returning home\":\"Повернення до док-станції\",\"Manual mode\":\"Ручний режим\",Charging:\"Заряджання\",\"Charging problem\":\"Проблема з заряджанням\",Paused:\"Призупинено\",\"Spot cleaning\":\"Точкове очищення\",Error:\"Помилка\",\"Shutting down\":\"Вимкнення\",Updating:\"Оновлення\",Docking:\"Стиковка\",\"Going to target\":\"По шляху до цілі\",\"Zoned cleaning\":\"Зональне прибирання\",\"Segment cleaning\":\"Прибирання кімнати\",\"Emptying the bin\":\"Спорожнення контейнера\",\"Charging complete\":\"Заряджання завершено\",\"Device offline\":\"Офлайн\"}},battery_level:{label:\"Батарея\"},fan_speed:{label:\"Потужність\",value:{Silent:\"Тихий\",Standard:\"Стандарт\",Medium:\"Середній\",Turbo:\"Турбо\",Auto:\"Авто\",Gentle:\"Делікатний\"}},sensor_dirty_left:{label:\"Сенсор\"},filter_left:{label:\"Фільтр\"},main_brush_left:{label:\"Основна щітка\"},side_brush_left:{label:\"Бокова щітка\"},cleaning_count:{label:\"Лічильник прибирань\"},cleaned_area:{label:\"Прибрано\"},cleaning_time:{label:\"Час прибирання\"},mop_left:{label:\"Швабра\"}},fi={vacuum_start:\"Старт\",vacuum_pause:\"Пауза\",vacuum_stop:\"Стоп\",vacuum_return_to_base:\"Повернення на базу\",vacuum_clean_spot:\"Прибрати місце\",vacuum_locate:\"Пошук\",vacuum_set_fan_speed:\"Зміна потужності\"},bi={hour_shortcut:\"h\",meter_shortcut:\"m\",meter_squared_shortcut:\"m²\",minute_shortcut:\"min\"},yi={success:\"Успіх!\",no_selection:\"Виділення не зроблено\",failed:\"Не вдалося викликати службу\"},ki={description:{before_link:\"Цей редактор інтерфейсу підтримує лише базову конфігурацію для камери, створеної за допомогою \",link_text:\"Xiaomi Cloud Map Extractor\",after_link:\". Для більш розширеного налаштування використовуйте режим YAML.\"},label:{name:\"Назва (опція)\",entity:\"Сутність пилососу (необхідно)\",camera:\"Сутність камери (необхідно)\",vacuum_platform:\"Платформа інтеграції пилососу (необхідно)\",map_locked:\"Блокування мапи (опція)\",two_finger_pan:\"Переміщеня мапи двома пальцями (опція)\"}},Ai={common:_i,map_mode:gi,validation:vi,tile:hi,icon:fi,unit:bi,popups:yi,editor:ki},xi={version:\"版本\",invalid_configuration:\"配置无效 {0}\",description:\"一个可以控制扫地机的卡片\",old_configuration:\"检测到旧版本的配置。请按照新版本说明修改配置或者重新创建新卡片\",old_configuration_migration_link:\"迁移向导\"},zi={invalid:\"模板无效！\",vacuum_goto:\"指哪到哪\",vacuum_goto_predefined:\"目标点\",vacuum_clean_segment:\"选区清扫\",vacuum_clean_point:\"局部清扫\",vacuum_clean_point_predefined:\"自定义局部清扫\",vacuum_clean_zone:\"划区清扫\",vacuum_clean_zone_predefined:\"自定义区域清扫\",vacuum_follow_path:\"路径规划\"},Ei={preset:{entity:{missing:\"缺少属性：entity\"},preset_name:{missing:\"缺少属性：preset_name\"},platform:{invalid:\"扫地机平台无效：{0}\"},map_source:{missing:\"缺少属性：map_source\",none_provided:\"未提供摄像头或者图像\",ambiguous:\"只允许一张地图\"},calibration_source:{missing:\"缺少属性：calibration_source\",ambiguous:\"只允许一个校准源\",none_provided:\"未提供校准源\",calibration_points:{invalid_number:\"需要3或4个校准点\",missing_map:\"每个校准点必须包含地图坐标\",missing_vacuum:\"每个校准点必须包含扫地机坐标\",missing_coordinate:\"地图校准点和扫地机校准点必须同时包含x坐标和y坐标\"}},icons:{invalid:\"配置错误：icons\",icon:{missing:\"图标列表中每一条记录必须包含icon属性\"}},tiles:{invalid:\"配置错误：tiles\",entity:{missing:\"板块列表中每一条记录必须包含实体\"},label:{missing:\"板块列表中每一条记录必须包含标签\"}},map_modes:{invalid:\"配置错误：map_modes\",icon:{missing:\"缺少该地图模式的图标\"},name:{missing:\"缺少该地图模式的名称\"},template:{invalid:\"模板无效：{0}\"},predefined_selections:{not_applicable:\"模式 {0} 不支持选择预置\",zones:{missing:\"缺少区域配置\",invalid_parameters_number:\"每个区域必须包含4个参数\"},points:{position:{missing:\"缺少坐标点配置\",invalid_parameters_number:\"每个坐标点必须包含2个参数\"}},rooms:{id:{missing:\"缺少房间id\",invalid_format:\"房间id无效：{0}\"},outline:{invalid_parameters_number:\"每个房间边框必须包含2个参数\"}},label:{x:{missing:\"标签必须包含x值\"},y:{missing:\"标签必须包含y值\"},text:{missing:\"标签必须包含文本值\"}},icon:{x:{missing:\"图标必须包含x值\"},y:{missing:\"标题必须包含y值\"},name:{missing:\"标题必须包含名称\"}}},service_call_schema:{missing:\"缺少服务调用架构\",service:{missing:\"服务调用架构必须包含服务\",invalid:\"服务无效：{0}\"}}}},invalid_entities:\"实体无效：\",invalid_calibration:\"校准无效，请检查配置\"},wi={status:{label:\"状态\",value:{Starting:\"开始清扫\",\"Charger disconnected\":\"与充电座断开\",Idle:\"空闲\",\"Remote control active\":\"开始遥控模式\",Cleaning:\"清扫中\",\"Returning home\":\"正在回充\",\"Manual mode\":\"手动模式\",Charging:\"正在充电\",\"Charging problem\":\"充电错误\",Paused:\"暂停\",\"Spot cleaning\":\"局部清扫\",Error:\"错误\",\"Shutting down\":\"正在关机\",Updating:\"正在更新\",Docking:\"停靠\",\"Going to target\":\"正在前往目标点\",\"Zoned cleaning\":\"划区清扫\",\"Segment cleaning\":\"选区清扫\",\"Emptying the bin\":\"清理尘盒\",\"Charging complete\":\"充电完成\",\"Device offline\":\"设备离线\"}},battery_level:{label:\"剩余电量\"},fan_speed:{label:\"吸力\",value:{Silent:\"安静\",Standard:\"标准\",Medium:\"强力\",Turbo:\"MAX\",Auto:\"自动\",Gentle:\"轻柔\"}},sensor_dirty_left:{label:\"传感器维护剩余\"},filter_left:{label:\"滤网剩余\"},main_brush_left:{label:\"主刷剩余\"},side_brush_left:{label:\"边刷剩余\"},cleaning_count:{label:\"总清扫次数\"},cleaned_area:{label:\"总清扫面积\"},cleaning_time:{label:\"总清扫时间\"},mop_left:{label:\"拖布剩余\"}},Si={vacuum_start:\"开始\",vacuum_pause:\"暂停\",vacuum_stop:\"结束\",vacuum_return_to_base:\"回充\",vacuum_clean_spot:\"局部清扫\",vacuum_locate:\"定位\",vacuum_set_fan_speed:\"更改吸力\"},Pi={hour_shortcut:\"小时\",meter_shortcut:\"米\",meter_squared_shortcut:\"平米\",minute_shortcut:\"分钟\"},Mi={success:\"指令发送成功！\",no_selection:\"未提供选择\",failed:\"调用服务失败\"},Ci={description:{before_link:\"该可视化编辑器仅支持一些基本配置，且必须使用以下集成创建的摄像机实体：\",link_text:\"Xiaomi Cloud Map Extractor\",after_link:\"。想要使用高级设置，请使用YAML模式\"},label:{name:\"标题（可选）\",entity:\"扫地机实体（必填）\",camera:\"摄像机实体（必填）\",vacuum_platform:\"扫地机平台（必填）\",map_locked:\"地图锁定（可选）\",two_finger_pan:\"双指缩放（可选）\"}},Ti={common:xi,map_mode:zi,validation:Ei,tile:wi,icon:Si,unit:Pi,popups:Mi,editor:Ci},$i={version:\"版本\",invalid_configuration:\"設定錯誤 {0}\",description:\"一張能讓您控制掃地機器人的卡片\",old_configuration:\"檢測到設定已過時，請按照新版本說明並進行修正或重新新增一張新的卡片\",old_configuration_migration_link:\"移轉指南\"},Ni={invalid:\"模板錯誤!\",vacuum_goto:\"指哪到哪\",vacuum_goto_predefined:\"目標點\",vacuum_clean_segment:\"選區清掃\",vacuum_clean_point:\"局部清掃\",vacuum_clean_point_predefined:\"局部目標\",vacuum_clean_zone:\"劃區清掃\",vacuum_clean_zone_predefined:\"目標區域\",vacuum_follow_path:\"路徑規劃\"},Ri={preset:{entity:{missing:\"設定錯誤: entity\"},preset_name:{missing:\"設定錯誤: preset_name\"},platform:{invalid:\"錯誤的 vacuum platform: {0}\"},map_source:{missing:\"設定錯誤: map_source\",none_provided:\"未提供攝影機或圖片\",ambiguous:\"只允許一張地圖源\"},calibration_source:{missing:\"設定錯誤: calibration_source\",ambiguous:\"只允許一個校準源\",none_provided:\"未提供校準源\",calibration_points:{invalid_number:\"需要 3 或 4 個校準點\",missing_map:\"每個校準點必須包含地圖座標\",missing_vacuum:\"每個校準點必須包含吸塵器座標\",missing_coordinate:\"地圖校準點和吸塵器校準點必須同時包含 x 座標和 y 座標\"}},icons:{invalid:\"設定錯誤: icons\",icon:{missing:\"Icon list 必須包含 icon\"}},tiles:{invalid:\"設定錯誤: tiles\",entity:{missing:\"tiles list 必須包含 entity\"},label:{missing:\"tiles list 必須包含 label\"}},map_modes:{invalid:\"設定錯誤: map_modes\",icon:{missing:\"Map modes 的 icon(圖標) 設定錯誤\"},name:{missing:\"Map modes 的 name(名稱) 設定錯誤\"},template:{invalid:\"模板錯誤: {0}\"},predefined_selections:{not_applicable:\"Mode {0} 不支援 predefined selections\",zones:{missing:\"zones 設定錯誤\",invalid_parameters_number:\"zones 必須包含 4 個參數\"},points:{position:{missing:\"points 設定錯誤\",invalid_parameters_number:\"points 必須包含 2 個參數\"}},rooms:{id:{missing:\"room id 錯誤\",invalid_format:\"room id 錯誤: {0}\"},outline:{invalid_parameters_number:\"room 的 point(座標) 必須包含 2 個參數\"}},label:{x:{missing:\"label 必須包含 x 值\"},y:{missing:\"label 必須包含 y 值\"},text:{missing:\"label 必須包含 text\"}},icon:{x:{missing:\"icon 必須包含 x 值\"},y:{missing:\"icon 必須包含 y 值\"},name:{missing:\"icon 必須包含 name\"}}},service_call_schema:{missing:\"服務執行失敗\",service:{missing:\"執行服務(service)必須包含該服務(service)\",invalid:\"服務錯誤: {0}\"}}}},invalid_entities:\"錯誤的 entities(實體): \",invalid_calibration:\"calibration(校準)失敗，請檢查設定\"},ji={status:{label:\"狀態\",value:{Starting:\"開始清掃\",\"Charger disconnected\":\"與充電座斷開\",Idle:\"閒置\",\"Remote control active\":\"開始遙控模式\",Cleaning:\"清掃中\",\"Returning home\":\"回充中\",\"Manual mode\":\"手動模式\",Charging:\"充電中\",\"Charging problem\":\"充電錯誤\",Paused:\"暫停\",\"Spot cleaning\":\"局部清掃\",Error:\"錯誤\",\"Shutting down\":\"關機中\",Updating:\"更新中\",Docking:\"Docking\",\"Going to target\":\"正在行進至目標點\",\"Zoned cleaning\":\"劃區清掃\",\"Segment cleaning\":\"選區清掃\",\"Emptying the bin\":\"清理集塵盒\",\"Charging complete\":\"充電完成\",\"Device offline\":\"裝置離線\"}},battery_level:{label:\"剩餘電量\"},fan_speed:{label:\"吸力\",value:{Silent:\"安靜\",Standard:\"標準\",Medium:\"強力\",Turbo:\"MAX\",Auto:\"自動\",Gentle:\"拖地\"}},sensor_dirty_left:{label:\"感應器剩餘\"},filter_left:{label:\"濾網剩餘\"},main_brush_left:{label:\"主刷剩餘\"},side_brush_left:{label:\"邊刷剩餘\"},cleaning_count:{label:\"累積清掃次數\"},cleaned_area:{label:\"累積清掃面積\"},cleaning_time:{label:\"累積清掃時間\"},mop_left:{label:\"抹布剩餘\"}},Oi={vacuum_start:\"開始\",vacuum_pause:\"暫停\",vacuum_stop:\"停止\",vacuum_return_to_base:\"回充\",vacuum_clean_spot:\"局部清掃\",vacuum_locate:\"定位\",vacuum_set_fan_speed:\"調整吸力\"},Li={hour_shortcut:\"小時\",meter_shortcut:\"m\",meter_squared_shortcut:\"m²\",minute_shortcut:\"分鐘\"},Ii={success:\"Success!\",no_selection:\"未選擇目標\",failed:\"執行服務失敗\"},Di={description:{before_link:\"此面板僅支援基本的設定，並且只能使用以下的附加元件新增攝影機實體: \",link_text:\"Xiaomi Cloud Map Extractor\",after_link:\"。如需更豐富的進階設定，請使用 YAML 編輯\"},label:{name:\"標題（選填）\",entity:\"掃地機器人實體（必填）\",camera:\"攝影機實體（必填）\",vacuum_platform:\"vacuum platform（必填）\",map_locked:\"鎖定地圖（選填）\",two_finger_pan:\"雙指縮放（選填）\"}},Ui={common:$i,map_mode:Ni,validation:Ri,tile:ji,icon:Oi,unit:Li,popups:Ii,editor:Di};const Fi={cs:Ae,da:Object.freeze({__proto__:null,common:xe,map_mode:ze,validation:Ee,tile:we,icon:Se,unit:Pe,popups:Me,editor:Ce,default:Te}),de:Object.freeze({__proto__:null,common:$e,map_mode:Ne,validation:Re,tile:je,icon:Oe,unit:Le,popups:Ie,editor:De,default:Ue}),el:Object.freeze({__proto__:null,common:Fe,map_mode:Ve,validation:He,tile:Ze,icon:Ge,unit:Xe,popups:Ke,editor:qe,default:Be}),en:Object.freeze({__proto__:null,common:Ye,map_mode:We,validation:Je,tile:Qe,icon:et,unit:tt,popups:at,editor:it,default:nt}),es:Object.freeze({__proto__:null,common:rt,map_mode:ot,validation:lt,tile:st,icon:ct,unit:dt,popups:ut,editor:mt,default:pt}),fr:Object.freeze({__proto__:null,common:_t,map_mode:gt,validation:vt,tile:ht,icon:ft,unit:bt,popups:yt,editor:kt,default:At}),he:Object.freeze({__proto__:null,common:xt,map_mode:zt,validation:Et,tile:wt,icon:St,unit:Pt,popups:Mt,editor:Ct,default:Tt}),hu:Object.freeze({__proto__:null,common:$t,map_mode:Nt,validation:Rt,tile:jt,icon:Ot,unit:Lt,popups:It,editor:Dt,default:Ut}),is:Object.freeze({__proto__:null,common:Ft,map_mode:Vt,validation:Ht,tile:Zt,icon:Gt,unit:Xt,popups:Kt,editor:qt,default:Bt}),it:Object.freeze({__proto__:null,common:Yt,map_mode:Wt,validation:Jt,tile:Qt,icon:ea,unit:ta,popups:aa,editor:ia,default:na}),nl:Object.freeze({__proto__:null,common:ra,map_mode:oa,validation:la,tile:sa,icon:ca,unit:da,popups:ua,editor:ma,default:pa}),pl:Object.freeze({__proto__:null,common:_a,map_mode:ga,validation:va,tile:ha,icon:fa,unit:ba,popups:ya,editor:ka,default:Aa}),\"pt-BR\":Object.freeze({__proto__:null,common:xa,map_mode:za,validation:Ea,tile:wa,icon:Sa,unit:Pa,popups:Ma,editor:Ca,default:Ta}),ru:Object.freeze({__proto__:null,common:$a,map_mode:Na,validation:Ra,tile:ja,icon:Oa,unit:La,popups:Ia,editor:Da,default:Ua}),sk:Object.freeze({__proto__:null,common:Fa,map_mode:Va,validation:Ha,tile:Za,icon:Ga,unit:Xa,popups:Ka,editor:qa,default:Ba}),sv:Object.freeze({__proto__:null,common:Ya,map_mode:Wa,validation:Ja,tile:Qa,icon:ei,unit:ti,popups:ai,editor:ii,default:ni}),tr:Object.freeze({__proto__:null,common:ri,map_mode:oi,validation:li,tile:si,icon:ci,unit:di,popups:ui,editor:mi,default:pi}),uk:Object.freeze({__proto__:null,common:_i,map_mode:gi,validation:vi,tile:hi,icon:fi,unit:bi,popups:yi,editor:ki,default:Ai}),zh:Object.freeze({__proto__:null,common:xi,map_mode:zi,validation:Ei,tile:wi,icon:Si,unit:Pi,popups:Mi,editor:Ci,default:Ti}),\"zh-Hant\":Object.freeze({__proto__:null,common:$i,map_mode:Ni,validation:Ri,tile:ji,icon:Oi,unit:Li,popups:Ii,editor:Di,default:Ui})};function Vi(e,t=\"\",a=\"\",i=\"\",n=e){const r=\"en\";if(!i)try{i=JSON.parse(localStorage.getItem(\"selectedLanguage\")||'\"en\"')}catch(e){i=(localStorage.getItem(\"selectedLanguage\")||r).replace(/['\"]+/g,\"\")}let o;try{o=Hi(e,null!=i?i:r)}catch(t){o=Hi(e,r)}return void 0===o&&(o=Hi(e,r)),o=null!=o?o:n,\"\"!==t&&\"\"!==a&&(o=o.replace(t,a)),o}function Hi(e,t){try{return e.split(\".\").reduce(((e,t)=>e[t]),Fi[t])}catch(e){return}}function Zi(e,t,a){return\"string\"==typeof e?Vi(e,\"\",\"\",t,a):Vi(...e,t,a)}function Gi(e,t,a,i){var n,r;return Zi(e,null!==(n=null==a?void 0:a.language)&&void 0!==n?n:null===(r=null==t?void 0:t.locale)||void 0===r?void 0:r.language,i)}var Xi={defaultTemplates:[\"vacuum_clean_zone\",\"vacuum_goto\"],templates:{vacuum_clean_segment:{name:\"map_mode.vacuum_clean_segment\",icon:\"mdi:floor-plan\",selection_type:\"ROOM\",repeats_type:\"REPEAT\",max_repeats:3,service_call_schema:{service:\"xiaomi_miio.vacuum_clean_segment\",service_data:{segments:\"[[selection]]\",entity_id:\"[[entity_id]]\"}}},vacuum_clean_zone:{name:\"map_mode.vacuum_clean_zone\",icon:\"mdi:select-drag\",selection_type:\"MANUAL_RECTANGLE\",coordinates_rounding:!0,max_selections:5,repeats_type:\"EXTERNAL\",max_repeats:3,service_call_schema:{service:\"xiaomi_miio.vacuum_clean_zone\",service_data:{zone:\"[[selection]]\",repeats:\"[[repeats]]\",entity_id:\"[[entity_id]]\"}}},vacuum_clean_zone_predefined:{name:\"map_mode.vacuum_clean_zone_predefined\",icon:\"mdi:floor-plan\",selection_type:\"PREDEFINED_RECTANGLE\",max_selections:5,coordinates_rounding:!0,repeats_type:\"EXTERNAL\",max_repeats:3,service_call_schema:{service:\"xiaomi_miio.vacuum_clean_zone\",service_data:{zone:\"[[selection]]\",repeats:\"[[repeats]]\",entity_id:\"[[entity_id]]\"}}},vacuum_goto:{name:\"map_mode.vacuum_goto\",icon:\"mdi:map-marker-plus\",selection_type:\"MANUAL_POINT\",coordinates_rounding:!0,repeats_type:\"NONE\",service_call_schema:{service:\"xiaomi_miio.vacuum_goto\",service_data:{x_coord:\"[[point_x]]\",y_coord:\"[[point_y]]\",entity_id:\"[[entity_id]]\"}}},vacuum_goto_predefined:{name:\"map_mode.vacuum_goto_predefined\",icon:\"mdi:map-marker\",selection_type:\"PREDEFINED_POINT\",coordinates_rounding:!0,repeats_type:\"NONE\",service_call_schema:{service:\"xiaomi_miio.vacuum_goto\",service_data:{x_coord:\"[[point_x]]\",y_coord:\"[[point_y]]\",entity_id:\"[[entity_id]]\"}}},vacuum_follow_path:{name:\"map_mode.vacuum_follow_path\",icon:\"mdi:map-marker-path\",selection_type:\"MANUAL_PATH\",coordinates_rounding:!0,repeats_type:\"NONE\",service_call_schema:{service:\"script.vacuum_follow_path\",service_data:{service:\"xiaomi_miio.vacuum_goto\",mode:\"individual\",path:\"[[selection]]\",entity_id:\"[[entity_id]]\"}}}}},Ki={from_attributes:[{attribute:\"sensor_dirty_left\",label:\"tile.sensor_dirty_left.label\",icon:\"mdi:eye-outline\",unit:\"unit.hour_shortcut\"},{attribute:\"filter_left\",label:\"tile.filter_left.label\",icon:\"mdi:air-filter\",unit:\"unit.hour_shortcut\"},{attribute:\"main_brush_left\",label:\"tile.main_brush_left.label\",icon:\"mdi:brush\",unit:\"unit.hour_shortcut\"},{attribute:\"side_brush_left\",label:\"tile.side_brush_left.label\",icon:\"mdi:brush\",unit:\"unit.hour_shortcut\"},{attribute:\"cleaning_count\",label:\"tile.cleaning_count.label\",icon:\"mdi:counter\"}],from_sensors:[{unique_id_prefix:\"consumable_sensor_dirty_left_\",label:\"tile.sensor_dirty_left.label\",unit:\"unit.hour_shortcut\",multiplier:.0002777777777777778},{unique_id_prefix:\"consumable_filter_left_\",label:\"tile.filter_left.label\",unit:\"unit.hour_shortcut\",multiplier:.0002777777777777778},{unique_id_prefix:\"consumable_main_brush_left_\",label:\"tile.main_brush_left.label\",unit:\"unit.hour_shortcut\",multiplier:.0002777777777777778},{unique_id_prefix:\"consumable_side_brush_left_\",label:\"tile.side_brush_left.label\",unit:\"unit.hour_shortcut\",multiplier:.0002777777777777778},{unique_id_prefix:\"clean_history_count_\",label:\"tile.cleaning_count.label\"}]},qi={map_modes:Xi,sensors_from:\"2021.11.0\",tiles:Ki},Bi=Object.freeze({__proto__:null,map_modes:Xi,sensors_from:\"2021.11.0\",tiles:Ki,default:qi}),Yi={defaultTemplates:[\"vacuum_clean_zone\",\"vacuum_goto\"],templates:{vacuum_clean_segment:{name:\"map_mode.vacuum_clean_segment\",icon:\"mdi:floor-plan\",selection_type:\"ROOM\",repeats_type:\"REPEAT\",max_repeats:3,service_call_schema:{service:\"vacuum.vacuum_clean_segment\",service_data:{segments:\"[[selection]]\",entity_id:\"[[entity_id]]\"}}},vacuum_clean_zone:{name:\"map_mode.vacuum_clean_zone\",icon:\"mdi:select-drag\",selection_type:\"MANUAL_RECTANGLE\",coordinates_rounding:!1,max_selections:5,repeats_type:\"EXTERNAL\",max_repeats:3,service_call_schema:{service:\"vacuum.vacuum_clean_zone\",service_data:{zone:\"[[selection]]\",repeats:\"[[repeats]]\",entity_id:\"[[entity_id]]\"}}},vacuum_clean_zone_predefined:{name:\"map_mode.vacuum_clean_zone_predefined\",icon:\"mdi:floor-plan\",selection_type:\"PREDEFINED_RECTANGLE\",max_selections:5,coordinates_rounding:!1,repeats_type:\"EXTERNAL\",max_repeats:3,service_call_schema:{service:\"vacuum.vacuum_clean_zone\",service_data:{zone:\"[[selection]]\",repeats:\"[[repeats]]\",entity_id:\"[[entity_id]]\"}}},vacuum_goto:{name:\"map_mode.vacuum_goto\",icon:\"mdi:map-marker-plus\",selection_type:\"MANUAL_POINT\",coordinates_rounding:!1,repeats_type:\"NONE\",service_call_schema:{service:\"vacuum.vacuum_goto\",service_data:{x_coord:\"[[point_x]]\",y_coord:\"[[point_y]]\",entity_id:\"[[entity_id]]\"}}},vacuum_goto_predefined:{name:\"map_mode.vacuum_goto_predefined\",icon:\"mdi:map-marker\",selection_type:\"PREDEFINED_POINT\",coordinates_rounding:!1,repeats_type:\"NONE\",service_call_schema:{service:\"vacuum.vacuum_goto\",service_data:{x_coord:\"[[point_x]]\",y_coord:\"[[point_y]]\",entity_id:\"[[entity_id]]\"}}},vacuum_follow_path:{name:\"map_mode.vacuum_follow_path\",icon:\"mdi:map-marker-path\",selection_type:\"MANUAL_PATH\",coordinates_rounding:!1,repeats_type:\"NONE\",service_call_schema:{service:\"script.vacuum_follow_path\",service_data:{service:\"vacuum.vacuum_goto\",mode:\"individual\",path:\"[[selection]]\",entity_id:\"[[entity_id]]\"}}}}},Wi={from_attributes:[{attribute:\"cleaned_area\",label:\"tile.cleaned_area.label\",icon:\"mdi:texture-box\",unit:\"unit.meter_squared_shortcut\"},{attribute:\"cleaning_time\",label:\"tile.cleaning_time.label\",icon:\"mdi:timer-sand\",unit:\"unit.minute_shortcut\"}]},Ji={map_modes:Yi,tiles:Wi},Qi=Object.freeze({__proto__:null,map_modes:Yi,tiles:Wi,default:Ji}),en={defaultTemplates:[\"vacuum_clean_zone\",\"vacuum_clean_point\"],templates:{vacuum_clean_zone:{name:\"map_mode.vacuum_clean_zone\",icon:\"mdi:select-drag\",selection_type:\"MANUAL_RECTANGLE\",coordinates_rounding:!1,max_selections:5,repeats_type:\"EXTERNAL\",max_repeats:3,service_call_schema:{service:\"vacuum.xiaomi_clean_zone\",service_data:{zone:\"[[selection]]\",repeats:\"[[repeats]]\",entity_id:\"[[entity_id]]\"}}},vacuum_clean_zone_predefined:{name:\"map_mode.vacuum_clean_zone_predefined\",icon:\"mdi:floor-plan\",selection_type:\"PREDEFINED_RECTANGLE\",max_selections:5,coordinates_rounding:!1,repeats_type:\"EXTERNAL\",max_repeats:3,service_call_schema:{service:\"vacuum.xiaomi_clean_zone\",service_data:{zone:\"[[selection]]\",repeats:\"[[repeats]]\",entity_id:\"[[entity_id]]\"}}},vacuum_clean_point:{name:\"map_mode.vacuum_clean_point\",icon:\"mdi:map-marker-plus\",selection_type:\"MANUAL_POINT\",coordinates_rounding:!1,repeats_type:\"NONE\",service_call_schema:{service:\"vacuum.xiaomi_clean_point\",service_data:{point:\"[[selection]]\",entity_id:\"[[entity_id]]\"}}},vacuum_clean_point_predefined:{name:\"map_mode.vacuum_clean_point_predefined\",icon:\"mdi:map-marker\",selection_type:\"PREDEFINED_POINT\",coordinates_rounding:!1,repeats_type:\"NONE\",service_call_schema:{service:\"vacuum.xiaomi_clean_point\",service_data:{point:\"[[selection]]\",entity_id:\"[[entity_id]]\"}}},vacuum_clean_segment:{name:\"map_mode.vacuum_clean_segment\",icon:\"mdi:floor-plan\",selection_type:\"ROOM\",max_selections:1,repeats_type:\"EXTERNAL\",max_repeats:3,service_call_schema:{service:\"vacuum.send_command\",service_data:{entity_id:\"[[entity_id]]\",command:\"set_mode_withroom\",params:\"[ 0, [[repeats]], 1, [[selection_unwrapped]] ]|[[jsonify]]\"}}}}},tn={from_attributes:[{attribute:\"filter_left\",label:\"tile.filter_left.label\",icon:\"mdi:air-filter\",unit:\"unit.hour_shortcut\"},{attribute:\"main_brush_left\",label:\"tile.main_brush_left.label\",icon:\"mdi:brush\",unit:\"unit.hour_shortcut\"},{attribute:\"side_brush_left\",label:\"tile.side_brush_left.label\",icon:\"mdi:brush\",unit:\"unit.hour_shortcut\"},{attribute:\"mop_left\",label:\"tile.mop_left.label\",icon:\"mdi:format-color-fill\",unit:\"unit.hour_shortcut\"}]},an={map_modes:en,tiles:tn},nn=Object.freeze({__proto__:null,map_modes:en,tiles:tn,default:an}),rn={defaultTemplates:[],templates:{vacuum_clean_segment:{name:\"map_mode.vacuum_clean_segment\",icon:\"mdi:floor-plan\",selection_type:\"ROOM\",repeats_type:\"REPEAT\",max_repeats:3,service_call_schema:{service:\"mqtt.publish\",service_data:{topic:\"[[topic]]/custom_command\",payload:'{ \"command\": \"segmented_cleanup\", \"segment_ids\": [[selection]], \"repeats\": [[repeats]], \"afterCleaning\": \"Base\" }'}}},vacuum_goto_predefined:{name:\"map_mode.vacuum_goto_predefined\",icon:\"mdi:map-marker\",selection_type:\"ROOM\",repeats_type:\"NONE\",service_call_schema:{service:\"mqtt.publish\",service_data:{topic:\"[[topic]]/custom_command\",payload:'{ \"command\": \"go_to\", \"spot_id\": \"[[selection_unwrapped]]\" }'}}}}},on={from_attributes:[{attribute:\"filter\",label:\"tile.filter_left.label\",icon:\"mdi:air-filter\",unit:\"unit.hour_shortcut\"},{attribute:\"mainBrush\",label:\"tile.main_brush_left.label\",icon:\"mdi:brush\",unit:\"unit.hour_shortcut\"},{attribute:\"sideBrush\",label:\"tile.side_brush_left.label\",icon:\"mdi:brush\",unit:\"unit.hour_shortcut\"}]},ln={map_modes:rn,tiles:on},sn=Object.freeze({__proto__:null,map_modes:rn,tiles:on,default:ln}),cn={defaultTemplates:[\"vacuum_clean_zone\",\"vacuum_goto\"],templates:{vacuum_clean_segment:{name:\"map_mode.vacuum_clean_segment\",icon:\"mdi:floor-plan\",selection_type:\"ROOM\",repeats_type:\"REPEAT\",max_repeats:3,service_call_schema:{service:\"vacuum.send_command\",service_data:{command:\"app_segment_clean\",params:\"[[selection]]\",entity_id:\"[[entity_id]]\"}}},vacuum_clean_zone:{name:\"map_mode.vacuum_clean_zone\",icon:\"mdi:select-drag\",selection_type:\"MANUAL_RECTANGLE\",coordinates_rounding:!0,max_selections:5,repeats_type:\"INTERNAL\",max_repeats:3,service_call_schema:{service:\"vacuum.send_command\",service_data:{command:\"app_zoned_clean\",params:\"[[selection]]\",entity_id:\"[[entity_id]]\"}}},vacuum_clean_zone_predefined:{name:\"map_mode.vacuum_clean_zone_predefined\",icon:\"mdi:floor-plan\",selection_type:\"PREDEFINED_RECTANGLE\",max_selections:5,coordinates_rounding:!0,repeats_type:\"INTERNAL\",max_repeats:3,service_call_schema:{service:\"vacuum.send_command\",service_data:{command:\"app_zoned_clean\",params:\"[[selection]]\",entity_id:\"[[entity_id]]\"}}},vacuum_goto:{name:\"map_mode.vacuum_goto\",icon:\"mdi:map-marker-plus\",selection_type:\"MANUAL_POINT\",coordinates_rounding:!0,repeats_type:\"NONE\",service_call_schema:{service:\"vacuum.send_command\",service_data:{command:\"app_goto_target\",params:\"[[selection]]\",entity_id:\"[[entity_id]]\"}}},vacuum_goto_predefined:{name:\"map_mode.vacuum_goto_predefined\",icon:\"mdi:map-marker\",selection_type:\"PREDEFINED_POINT\",coordinates_rounding:!0,repeats_type:\"NONE\",service_call_schema:{service:\"vacuum.send_command\",service_data:{command:\"app_goto_target\",params:\"[[selection]]\",entity_id:\"[[entity_id]]\"}}},vacuum_follow_path:{name:\"map_mode.vacuum_follow_path\",icon:\"mdi:map-marker-path\",selection_type:\"MANUAL_PATH\",coordinates_rounding:!0,repeats_type:\"NONE\",service_call_schema:{service:\"script.vacuum_follow_path\",service_data:{service:\"vacuum.send_command\",mode:\"send_command\",path:\"[[selection]]\",entity_id:\"[[entity_id]]\"}}}}},dn={from_attributes:[],from_sensors:[]},un={map_modes:cn,tiles:dn},mn=Object.freeze({__proto__:null,map_modes:cn,tiles:dn,default:un}),pn={defaultTemplates:[\"vacuum_clean_segment\"],templates:{vacuum_clean_segment:{name:\"map_mode.vacuum_clean_segment\",icon:\"mdi:floor-plan\",selection_type:\"ROOM\",repeats_type:\"NONE\",service_call_schema:{service:\"neato.custom_cleaning\",service_data:{zone:\"[[selection_unwrapped]]\",entity_id:\"[[entity_id]]\"}}}}},_n={from_attributes:[{attribute:\"clean_area\",label:\"tile.cleaned_area.label\",icon:\"mdi:texture-box\",unit:\"unit.meter_squared_shortcut\"}]},gn={map_modes:pn,tiles:_n},vn=Object.freeze({__proto__:null,map_modes:pn,tiles:_n,default:gn});const hn=(e,t,a)=>{En(a);const i=function(e,t){const a=bn(e),i=bn(t),n=a.pop(),r=i.pop(),o=An(a,i);return 0!==o?o:n&&r?An(n.split(\".\"),r.split(\".\")):n||r?n?-1:1:0}(e,t);return xn[a].includes(i)},fn=/^v?(\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+)(?:\\.([x*]|\\d+))?(?:-([\\da-z\\-]+(?:\\.[\\da-z\\-]+)*))?(?:\\+[\\da-z\\-]+(?:\\.[\\da-z\\-]+)*)?)?)?$/i,bn=e=>{if(\"string\"!=typeof e)throw new TypeError(\"Invalid argument expected string\");const t=e.match(fn);if(!t)throw new Error(`Invalid argument not valid semver ('${e}' received)`);return t.shift(),t},yn=e=>{const t=parseInt(e,10);return isNaN(t)?e:t},kn=(e,t)=>{const[a,i]=((e,t)=>typeof e!=typeof t?[String(e),String(t)]:[e,t])(yn(e),yn(t));return a>i?1:a<i?-1:0},An=(e,t)=>{for(let a=0;a<Math.max(e.length,t.length);a++){const i=kn(e[a]||0,t[a]||0);if(0!==i)return i}return 0},xn={\">\":[1],\">=\":[0,1],\"=\":[0],\"<=\":[-1,0],\"<\":[-1]},zn=Object.keys(xn),En=e=>{if(\"string\"!=typeof e)throw new TypeError(\"Invalid operator type, expected string but got \"+typeof e);if(-1===zn.indexOf(e))throw new Error(`Invalid operator, expected one of ${zn.join(\"|\")}`)};class wn{static getPlatforms(){return Array.from(wn.TEMPLATES.keys())}static isValidModeTemplate(e,t){return void 0!==t&&Object.keys(this.getPlatformTemplate(e).map_modes.templates).includes(t)}static getModeTemplate(e,t){return this.getPlatformTemplate(e).map_modes.templates[t]}static generateDefaultModes(e){return this.getPlatformTemplate(e).map_modes.defaultTemplates.map((e=>({template:e})))}static getTilesFromAttributesTemplates(e){var t;return null!==(t=this.getPlatformTemplate(e).tiles.from_attributes)&&void 0!==t?t:[]}static getTilesFromSensorsTemplates(e){var t;return null!==(t=this.getPlatformTemplate(e).tiles.from_sensors)&&void 0!==t?t:[]}static usesSensors(e,t){const a=this.getPlatformTemplate(t).sensors_from;return!!a&&hn(e.config.version.replace(/\\.*[a-z].*/,\"\"),a,\">=\")}static getPlatformTemplate(e){var t,a;return null!==(a=null!==(t=this.TEMPLATES.get(e))&&void 0!==t?t:this.TEMPLATES.get(this.DEFAULT_PLATFORM))&&void 0!==a?a:{templates:[],defaultTemplates:{}}}}wn.DEFAULT_PLATFORM=\"default\",wn.KRZYSZTOFHAJDAMOWICZ_MIIO2_PLATFORM=\"KrzysztofHajdamowicz/miio2\",wn.MAROTOWEB_VIOMISE_PLATFORM=\"marotoweb/viomise\",wn.RAND256_VALETUDO_RE_PLATFORM=\"rand256/ValetudoRE\",wn.SEND_COMMAND_PLATFORM=\"send_command\",wn.NEATO_PLATFORM=\"Neato\",wn.TEMPLATES=new Map([[wn.DEFAULT_PLATFORM,Bi],[wn.KRZYSZTOFHAJDAMOWICZ_MIIO2_PLATFORM,Qi],[wn.MAROTOWEB_VIOMISE_PLATFORM,nn],[wn.RAND256_VALETUDO_RE_PLATFORM,sn],[wn.SEND_COMMAND_PLATFORM,mn],[wn.NEATO_PLATFORM,vn]]);const Sn=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAADwCAYAAABxLb1rAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH5QsWDwwxfsgRyAAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAtkSURBVHja7d19zCVXXQfw725368JuC7JtUWKXKiLUF7aQVhRYSUEUGiGAaEUJEkBAMWZVasQivlQrxVZAFgIiiYCgIWDiGxZECoKKS60FxQCW1yLU0hcXWlraZdc/znmSeWbvs8+duTNz99l+PslNdp699/zuzD33d+ecOedMAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAoNh2n+3VWkicneWiSByT5xiTbk3w1yS1Jbkjy8fr41yT/mOTAgjHvmeRRSR6T5CFJTq2PE5P8X5Lrk/xHkquSvCPJfy3wme1O8tga7/QkpyXZkeTGGue/k1xeH/+jmh+zpqozzJk0Dh/lcTDJbUm+lOQTSd6T5DVJnpXkm3rGfPY6MZuPq+co7+FJ9ncoc+Xx9SQfSPL8JCd13IddSV6d5PaOMT+e5NeS3KtDrPPql2HeGIeSvCXJ/QaqC9cm2dahnFNar9+7QWL2ebxoSXXm8MiPbRMfr2XkoYV37lCSf07yY0k2LyEBbkpySX0fi34wP9jh/e9N8rUF492a5IJ14uxI8lcLxLgzyS8PVBcuWEIyuuA4SoBD15m7WgIcNA9tzjA2Jfn+JG9N8uEkD5747PVVSX6l1aR/b5JnJjkzycm1WfHNSb6nNo9fkeTfe8bbmuRNSV5Wy11xXZLLahK9b5K71eb3mfXsbV+Sz7bKunuSRx4l1r1rE/3xrb/vr0ntrNoE/oYk35JkT/0xaDZ9tyS5NMkfDfCZv7A23aa0jJhDm7LO3JW79HrnoXbm3df6/xNqIrlPDfL0JH9SP8B2Jv5akqf12IG3tcqZ55T2ia3X3JLkRzvEvF+S3699gPOeAf7hjF+ei2o/4zwf0uOT/Gfj9X9zlB+oK1qxbkjy1Dni3D3JS2acFV/Yoy78bWv7JROcjS0j5r4Rv5xT1Zm1fKbx2usGaiWOcbyWlof67tzWJM9I8skZH/DTJ0iA7T6/J/U88KfV/rL1EuBTZxzkH+8Rb0uSX6/N07Uq84tasf63nsF28TOtJHiw9pV2qQvnt758X60VcMxktIyYYyXAKevM8Z4AR8tDi+7c9iRvbJVxe5KzR0yA92k9f+yrZNuSfLHDF2we5yZ5w4y/n1o7e5sf5Lk9Y1zaes//1LEuPCXJE1p/e93IyWgZMfdt8DpzV06AC+ehoXbuda1yPlx/ucZIgA9rPf9tIyfAn2/FuyLjDSX6zVas1y9Q1t2SfLpV3vd1TEZJuVLePJN84MgJcOqY+zZ4nZEAO+ahzSPswM/VpsuKByX5qZE+1C0zmrFj+oXW9iX14A5tU5Lntf522QLl3ZYy7KLpeT3K+dVWX8zvTvDFXUbMjVhn6JGHxkiAd+bIYQu/ONJOtgf5Prg2Hcdw3yT3b2x/Ksk7R4p1ZsrV3xX7B2jev6E2o5vNqK4+kOSvG9srg83HtIyYG7HO0CMPbR4p+DtTOiNX7E73wbjz+GQrCe5I8tqUISFDayeMK0b8Jd/T2n7/AGVenzKQdsWu+ujqha1EeskElXkZMTdanaFHHhorAR5OmbrT9OiRYrWbdk9K8rEkL0iZBjeUs2ecmYylPX7pyoHK/dA6cebx0ZRO5hWPTPK4kSvyMmJutDpDjzy0ecTgV7W2v2ukOH8wI9YZKWP7PpYybu7dKQNQn1Ur5bYecdpN60+PeOxOaW1/dqByP7dOnHm9OGUox4rfG7kuTRXz+Rl2ZsOUdWYZhj5ek+ehMStt+8PeNVKc25P88FF+XXfWrL83yR/Xs6Avp/SrXZwyCX0eO1vbN4947Nrzgw8MVO6BdeLM69qsvjq3O8lPjlyRlxFzUVPWGXrkoTET4Jdb2yeNGOuG2ix6TpJr5nj+1iTnpPQt/VtNnues85p7rrN/Q2ofq1sHKveW1vbJC5R1cSuhXpTVU7zGsIyYi5iyztAjD42ZAKce63QoZezPd6RcRLgoZaWIL83x2ocn+WDKmK213DlhQm8nqu0DlbtjwC/kTVl9MeKMJD878mc8dsxX1Xrb5/E7S64zyzD08Zo8D42ZAIf8snVxuJ7Rvbg2fU9LWQThh1LGlL01ZTjCrGPxyhy56MBa73/nyF/0pnsMVG67nBsXLO/lSb7Q2L5wgi/5MmIOdfaxM0ztqHlozAR4xjpt8Sldl+Tv69nD+SmXwnenrI7SHpbw0jV+NdoXEE4fuUm/Zr/FAk5fJ05XtyX5rcb2qem2dNVGidnXlHWGHnlozAR4Vmv76mPswHwkyXNz5OjwB2b2dKv2QOQfGPG9tY/V2QOV2+7nvGqAMl+f1eMLfymrB3GPYRkx+5iyztAjD42ZAB/b+PehJO86Rg/QnyX5l9bfvnvG89rPefSI76k98HnPAGXubCX2TyX5/ADlfj2rl9janrJiyZiWEbOPKesMPfLQWAlwT8p0rhXvTVnK6Vj1kXX6DZIybOb6xva3pixYOYaPZvXFm4cm+c4Fy3xG6/N+z4Dv9+0p91ZZ8ZyMM/Nn2TG7mrLO0CMPjZEAT0gZhNx06TF+oO5obX9xxnMOpUyza7ow41ztPpzSP5lWM6+vbSmTw5teO/B7bi5asDXTXOVbRswupqwz9MhDYyTAl2b1ZPV3J/m7kXZyb8rV3kX3o7k01MGs3Tf2siRfaWw/LN3utTHLuSkr2rbty+qZD89MuYNYHxcl+bbG9vsy3PS65q9r83M+P+PfGmEZMbuass7QMQ8NmQBPTBlG0jxTOZB+yy7Na0vKFcF/WKD588SsvjhweavZ0nRzyhSspouT/ESPuJtrAn9XZk9Juy6rx7xtSvLnKVevu3h26zM52DpzGlJz0YJNM47V8RKziynrDAvkoUUWInxySr9V8/V3pPuE9a4Lor4gqxfL/NN0m3P8tJSl1pvveb2+tk058g5th+rp9rzj9R6XskDjevd3OCHlhkjNWDfX971eM2p7yn002nMw50l+ay1OOo83Ze35n3uP8ZhjLYk/ZZ1Zy2dy/C+IulAemudmJCfVpHRObW68MkeuNLxy274f6bHziyTA5uNDKSsqPyblTmkn1j6ieyX53vqluHJGhXzunO/z5JTb77Xj3pgyUPe8lLF722oFf0DKQOzLUm5a3n7d0SrzvTP7XsBX1l+53fVsYGvKLQIeUc84Pj/jNa+Zs/9pkWR0Rta+7ePeYzzmmDdFmrLOHM8JcLQ8NNQ9P/dn/WXLm82zRe4L/NMpQyIWfc9fqWV1PdV+9QCxb8r607m2J/nLBWIcTLltaN+68JSOx+blEyfAoWKOfV/gKevMFAnwWLsvcN88NEjgD9b+tK79U4veGH1X7Qf8RI/3fEeSN2exmRZ7UtYc6xr76pS5xzs6xDov5V7GXeL8RVYPBZgiAZ6SMuVoygQ4RMwpbow+dZ25qyXATnloS4edP5wyufvW2g/1hXpqvr+ejg8xqLaPzyX5jfr49pSlsR5Uv/S76unySbWJe6A2Oa6uzZG3Z/aQly7eXx/3Txno+oiUW1furE3urfWYXVv7cN6XsjLwNT1ivSPlStZDUgZ4nlub+KfVL8VNKeMHr0mZ+nd5Zs97HtsNtX/rt4/zmBuhzhxvjtU8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASf4fJ6JYBxmOptUAAAAASUVORK5CYII=\";let Pn=class extends Q{constructor(){super(...arguments),this._initialized=!1}setConfig(e){this._config=e,this.loadCardHelpers()}shouldUpdate(){return this._initialized||this._initialize(),!0}get _title(){var e;return(null===(e=this._config)||void 0===e?void 0:e.title)||\"\"}get _entity(){var e;return(null===(e=this._config)||void 0===e?void 0:e.entity)||\"\"}get _vacuum_platform(){var e;return(null===(e=this._config)||void 0===e?void 0:e.vacuum_platform)||\"\"}get _camera(){var e,t;return(null===(t=null===(e=this._config)||void 0===e?void 0:e.map_source)||void 0===t?void 0:t.camera)||\"\"}get _map_locked(){var e;return(null===(e=this._config)||void 0===e?void 0:e.map_locked)||!1}get _two_finger_pan(){var e;return(null===(e=this._config)||void 0===e?void 0:e.two_finger_pan)||!1}render(){if(!this.hass||!this._helpers)return N``;this._helpers.importMoreInfoControl(\"climate\");const e=Object.keys(this.hass.states),t=e.filter((e=>\"camera\"===e.substr(0,e.indexOf(\".\")))),a=e.filter((e=>\"vacuum\"===e.substr(0,e.indexOf(\".\")))),i=wn.getPlatforms();return N`\n            <div class=\"card-config\">\n                <div class=\"description\">\n                    ${this._localize(\"editor.description.before_link\")}<a\n                        target=\"_blank\"\n                        href=\"https://github.com/PiotrMachowski/Home-Assistant-custom-components-Xiaomi-Cloud-Map-Extractor\"\n                        >${this._localize(\"editor.description.link_text\")}</a\n                    >${this._localize(\"editor.description.after_link\")}\n                </div>\n                <div class=\"values\">\n                    <ha-textfield\n                        label=${this._localize(\"editor.label.name\")}\n                        .value=${this._title}\n                        .configValue=${\"title\"}\n                        @input=${this._titleChanged}></ha-textfield>\n                </div>\n                <div class=\"values\">\n                    <ha-select\n                        naturalMenuWidth\n                        fixedMenuPosition\n                        label=${this._localize(\"editor.label.entity\")}\n                        @selected=${this._entityChanged}\n                        @closed=${e=>e.stopPropagation()}\n                        .configValue=${\"entity\"}\n                        .value=${this._entity}>\n                        ${a.map((e=>N` <mwc-list-item .value=\"${e}\">${e}</mwc-list-item> `))}\n                    </ha-select>\n                </div>\n                <div class=\"values\">\n                    <ha-select\n                        naturalMenuWidth\n                        fixedMenuPosition\n                        label=${this._localize(\"editor.label.vacuum_platform\")}\n                        @selected=${this._entityChanged}\n                        @closed=${e=>e.stopPropagation()}\n                        .configValue=${\"vacuum_platform\"}\n                        .value=${this._vacuum_platform}>\n                        ${i.map((e=>N` <mwc-list-item .value=\"${e}\">${e}</mwc-list-item> `))}\n                    </ha-select>\n                </div>\n                <div class=\"values\">\n                    <ha-select\n                        naturalMenuWidth\n                        fixedMenuPosition\n                        label=${this._localize(\"editor.label.camera\")}\n                        @selected=${this._cameraChanged}\n                        @closed=${e=>e.stopPropagation()}\n                        .configValue=${\"camera\"}\n                        .value=${this._camera}>\n                        ${t.map((e=>N` <mwc-list-item .value=\"${e}\">${e}</mwc-list-item> `))}\n                    </ha-select>\n                </div>\n                <div class=\"values\">\n                    <ha-formfield class=\"switch-wrapper\" .label=${this._localize(\"editor.label.map_locked\")}>\n                        <ha-switch\n                            .checked=${this._map_locked}\n                            .configValue=${\"map_locked\"}\n                            @change=${this._valueChanged}></ha-switch>\n                    </ha-formfield>\n                </div>\n                <div class=\"values\">\n                    <ha-formfield class=\"switch-wrapper\" .label=${this._localize(\"editor.label.two_finger_pan\")}>\n                        <ha-switch\n                            .checked=${this._two_finger_pan}\n                            .configValue=${\"two_finger_pan\"}\n                            @change=${this._valueChanged}></ha-switch>\n                    </ha-formfield>\n                </div>\n            </div>\n        `}_initialize(){void 0!==this.hass&&void 0!==this._config&&void 0!==this._helpers&&(this._initialized=!0)}async loadCardHelpers(){this._helpers=await window.loadCardHelpers()}_entityChanged(e){this._valueChanged(e)}_cameraChanged(e){if(!this._config||!this.hass)return;const t=e.target.value;if(this._camera===t)return;const a=Object.assign({},this._config);a.map_source={camera:t},a.calibration_source={camera:!0},this._config=a,ce(this,\"config-changed\",{config:this._config})}_titleChanged(e){this._valueChanged(e)}_valueChanged(e){if(!this._config||!this.hass)return;const t=e.target;if(this[`_${t.configValue}`]!==t.value){if(t.configValue)this._config=Object.assign(Object.assign({},this._config),{[t.configValue]:void 0!==t.checked?t.checked:t.value});else{const e=Object.assign({},this._config);delete e[t.configValue],this._config=e}ce(this,\"config-changed\",{config:this._config})}}_localize(e){return Gi(e,this.hass)}static get styles(){return r`\n            .values {\n                padding-left: 16px;\n                margin: 8px;\n                display: grid;\n            }\n\n            .switch-wrapper {\n                padding: 8px;\n            }\n        `}};e([ie({attribute:!1})],Pn.prototype,\"hass\",void 0),e([ne()],Pn.prototype,\"_config\",void 0),e([ne()],Pn.prototype,\"_helpers\",void 0),Pn=e([te(\"xiaomi-vacuum-map-card-editor\")],Pn);const Mn=\"ontouchstart\"in window||navigator.maxTouchPoints>0;class Cn extends HTMLElement{constructor(){super(),this.holdTime=500,this.held=!1,this.ripple=document.createElement(\"mwc-ripple\")}connectedCallback(){Object.assign(this.style,{position:\"absolute\",width:Mn?\"100px\":\"50px\",height:Mn?\"100px\":\"50px\",transform:\"translate(-50%, -50%)\",pointerEvents:\"none\",zIndex:\"999\"}),this.appendChild(this.ripple),this.ripple.primary=!0,[\"touchcancel\",\"mouseout\",\"mouseup\",\"touchmove\",\"mousewheel\",\"wheel\",\"scroll\"].forEach((e=>{document.addEventListener(e,(()=>{clearTimeout(this.timer),this.stopAnimation(),this.timer=void 0}),{passive:!0})}))}bind(e,t){if(e.actionHandler)return;e.actionHandler=!0,e.addEventListener(\"contextmenu\",(e=>{const t=e||window.event;return t.preventDefault&&t.preventDefault(),t.stopPropagation&&t.stopPropagation(),t.cancelBubble=!0,t.returnValue=!1,!1}));const a=e=>{let t,a;this.held=!1,e.touches?(t=e.touches[0].pageX,a=e.touches[0].pageY):(t=e.pageX,a=e.pageY),this.timer=window.setTimeout((()=>{this.startAnimation(t,a),this.held=!0}),this.holdTime)},i=a=>{a.preventDefault(),[\"touchend\",\"touchcancel\"].includes(a.type)&&void 0===this.timer||(clearTimeout(this.timer),this.stopAnimation(),this.timer=void 0,this.held?ce(e,\"action\",{action:\"hold\"}):t.hasDoubleClick?\"click\"===a.type&&a.detail<2||!this.dblClickTimeout?this.dblClickTimeout=window.setTimeout((()=>{this.dblClickTimeout=void 0,ce(e,\"action\",{action:\"tap\"})}),250):(clearTimeout(this.dblClickTimeout),this.dblClickTimeout=void 0,ce(e,\"action\",{action:\"double_tap\"})):ce(e,\"action\",{action:\"tap\"}))};e.addEventListener(\"touchstart\",a,{passive:!0}),e.addEventListener(\"touchend\",i),e.addEventListener(\"touchcancel\",i),e.addEventListener(\"mousedown\",a,{passive:!0}),e.addEventListener(\"click\",i),e.addEventListener(\"keyup\",(e=>{13===e.keyCode&&i(e)}))}startAnimation(e,t){Object.assign(this.style,{left:`${e}px`,top:`${t}px`,display:null}),this.ripple.disabled=!1,this.ripple.active=!0,this.ripple.unbounded=!0}stopAnimation(){this.ripple.active=!1,this.ripple.disabled=!0,this.style.display=\"none\"}}customElements.define(\"action-handler-xiaomi-vacuum-map-card\",Cn);const Tn=(e,t)=>{const a=(()=>{const e=document.body;if(e.querySelector(\"action-handler-xiaomi-vacuum-map-card\"))return e.querySelector(\"action-handler-xiaomi-vacuum-map-card\");const t=document.createElement(\"action-handler-xiaomi-vacuum-map-card\");return e.appendChild(t),t})();a&&a.bind(e,t)},$n=(e=>(...t)=>({_$litDirective$:e,values:t}))(class extends class{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,a){this._$Ct=e,this._$AM=t,this._$Ci=a}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}}{update(e,[t]){return Tn(e.element,t),j}render(e){}});class Nn{constructor(e){this.id=-1,this.nativePointer=e,this.pageX=e.pageX,this.pageY=e.pageY,this.clientX=e.clientX,this.clientY=e.clientY,self.Touch&&e instanceof Touch?this.id=e.identifier:Rn(e)&&(this.id=e.pointerId)}getCoalesced(){return\"getCoalescedEvents\"in this.nativePointer?this.nativePointer.getCoalescedEvents().map((e=>new Nn(e))):[this]}}const Rn=e=>self.PointerEvent&&e instanceof PointerEvent,jn=()=>{};class On{constructor(e,{start:t=(()=>!0),move:a=jn,end:i=jn,rawUpdates:n=!1}={}){this._element=e,this.startPointers=[],this.currentPointers=[],this._pointerStart=e=>{if(0===e.button&&this._triggerPointerStart(new Nn(e),e))if(Rn(e)){(e.target&&\"setPointerCapture\"in e.target?e.target:this._element).setPointerCapture(e.pointerId),this._element.addEventListener(this._rawUpdates?\"pointerrawupdate\":\"pointermove\",this._move),this._element.addEventListener(\"pointerup\",this._pointerEnd),this._element.addEventListener(\"pointercancel\",this._pointerEnd)}else window.addEventListener(\"mousemove\",this._move),window.addEventListener(\"mouseup\",this._pointerEnd)},this._touchStart=e=>{for(const t of Array.from(e.changedTouches))this._triggerPointerStart(new Nn(t),e)},this._move=e=>{const t=this.currentPointers.slice(),a=\"changedTouches\"in e?Array.from(e.changedTouches).map((e=>new Nn(e))):[new Nn(e)],i=[];for(const e of a){const t=this.currentPointers.findIndex((t=>t.id===e.id));-1!==t&&(i.push(e),this.currentPointers[t]=e)}0!==i.length&&this._moveCallback(t,i,e)},this._triggerPointerEnd=(e,t)=>{const a=this.currentPointers.findIndex((t=>t.id===e.id));if(-1===a)return!1;this.currentPointers.splice(a,1),this.startPointers.splice(a,1);const i=\"touchcancel\"===t.type||\"pointercancel\"===t.type;return this._endCallback(e,t,i),!0},this._pointerEnd=e=>{if(this._triggerPointerEnd(new Nn(e),e))if(Rn(e)){if(this.currentPointers.length)return;this._element.removeEventListener(this._rawUpdates?\"pointerrawupdate\":\"pointermove\",this._move),this._element.removeEventListener(\"pointerup\",this._pointerEnd),this._element.removeEventListener(\"pointercancel\",this._pointerEnd)}else window.removeEventListener(\"mousemove\",this._move),window.removeEventListener(\"mouseup\",this._pointerEnd)},this._touchEnd=e=>{for(const t of Array.from(e.changedTouches))this._triggerPointerEnd(new Nn(t),e)},this._startCallback=t,this._moveCallback=a,this._endCallback=i,this._rawUpdates=n&&\"onpointerrawupdate\"in window,self.PointerEvent?this._element.addEventListener(\"pointerdown\",this._pointerStart):(this._element.addEventListener(\"mousedown\",this._pointerStart),this._element.addEventListener(\"touchstart\",this._touchStart),this._element.addEventListener(\"touchmove\",this._move),this._element.addEventListener(\"touchend\",this._touchEnd),this._element.addEventListener(\"touchcancel\",this._touchEnd))}stop(){this._element.removeEventListener(\"pointerdown\",this._pointerStart),this._element.removeEventListener(\"mousedown\",this._pointerStart),this._element.removeEventListener(\"touchstart\",this._touchStart),this._element.removeEventListener(\"touchmove\",this._move),this._element.removeEventListener(\"touchend\",this._touchEnd),this._element.removeEventListener(\"touchcancel\",this._touchEnd),this._element.removeEventListener(this._rawUpdates?\"pointerrawupdate\":\"pointermove\",this._move),this._element.removeEventListener(\"pointerup\",this._pointerEnd),this._element.removeEventListener(\"pointercancel\",this._pointerEnd),window.removeEventListener(\"mousemove\",this._move),window.removeEventListener(\"mouseup\",this._pointerEnd)}_triggerPointerStart(e,t){return!!this._startCallback(e,t)&&(this.currentPointers.push(e),this.startPointers.push(e),!0)}}var Ln,In,Dn,Un;!function(e){e[e.MANUAL_RECTANGLE=0]=\"MANUAL_RECTANGLE\",e[e.PREDEFINED_RECTANGLE=1]=\"PREDEFINED_RECTANGLE\",e[e.ROOM=2]=\"ROOM\",e[e.MANUAL_PATH=3]=\"MANUAL_PATH\",e[e.MANUAL_POINT=4]=\"MANUAL_POINT\",e[e.PREDEFINED_POINT=5]=\"PREDEFINED_POINT\"}(Ln||(Ln={})),function(e){e[e.NONE=0]=\"NONE\",e[e.INTERNAL=1]=\"INTERNAL\",e[e.EXTERNAL=2]=\"EXTERNAL\",e[e.REPEAT=3]=\"REPEAT\"}(In||(In={})),function(e){e.ENTITY_ID=\"[[entity_id]]\",e.SELECTION=\"[[selection]]\",e.SELECTION_SIZE=\"[[selection_size]]\",e.SELECTION_UNWRAPPED=\"[[selection_unwrapped]]\",e.REPEATS=\"[[repeats]]\",e.POINT_X=\"[[point_x]]\",e.POINT_Y=\"[[point_y]]\"}(Dn||(Dn={}));class Fn{constructor(e,t,a,i){this.domain=e,this.service=t,this.serviceData=a,this.target=i}}!function(e){e.JSONIFY=\"|[[jsonify]]\"}(Un||(Un={}));class Vn{constructor(e){this.service=e.service,this.serviceData=e.service_data,this.target=e.target}apply(e,t,a,i){const n=n=>Vn.getReplacedValue(n,e,t,a,i);let r,o;this.serviceData&&(r=this.getFilledTemplate(this.serviceData,n)),this.target&&(o=this.getFilledTemplate(this.target,n));const l=this.service.split(\".\");return new Fn(l[0],l[1],r,o)}getFilledTemplate(e,t){const a=JSON.parse(JSON.stringify(e));return this.replacer(a,t),a}replacer(e,t){for(const[a,i]of Object.entries(e))\"object\"==typeof i?this.replacer(i,t):\"string\"==typeof i&&(e[a]=t(i))}static getReplacedValue(e,t,a,i,n){var r;const o=r=>{switch(r){case Dn.ENTITY_ID:return t;case Dn.SELECTION:return a;case Dn.SELECTION_SIZE:return a.length;case Dn.SELECTION_UNWRAPPED:return JSON.stringify(a).replaceAll(\"[\",\"\").replaceAll(\"]\",\"\").replaceAll('\"',\"\");case Dn.REPEATS:return i;case Dn.POINT_X:return this.isPoint(a)?a[0]:e;case Dn.POINT_Y:return this.isPoint(a)?a[1]:e;default:return r in n?n[r]:null}};return null!==(r=o(e))&&void 0!==r?r:Vn.replaceInStr(e,n,o)}static replaceInStr(e,t,a){let i=e;return[...Object.values(Dn),...Object.keys(t)].forEach((e=>{let t=a(e);\"object\"==typeof t&&(t=JSON.stringify(t)),i=i.replaceAll(e,`${t}`)})),i.endsWith(Un.JSONIFY)?JSON.parse(i.replace(Un.JSONIFY,\"\")):i}static isPoint(e){return\"number\"==typeof e[0]&&2==e.length}}class Hn{constructor(e,t,a){var i,n,r,o,l,s,c,d,u;this.config=t,this.name=null!==(i=t.name)&&void 0!==i?i:Zi(\"map_mode.invalid\",a),this.icon=null!==(n=t.icon)&&void 0!==n?n:\"mdi:help\",this.selectionType=t.selection_type?Ln[t.selection_type]:Ln.PREDEFINED_POINT,this.maxSelections=null!==(r=t.max_selections)&&void 0!==r?r:999,this.coordinatesRounding=null===(o=t.coordinates_rounding)||void 0===o||o,this.runImmediately=null!==(l=t.run_immediately)&&void 0!==l&&l,this.repeatsType=t.repeats_type?In[t.repeats_type]:In.NONE,this.maxRepeats=null!==(s=t.max_repeats)&&void 0!==s?s:1,this.serviceCallSchema=new Vn(null!==(c=t.service_call_schema)&&void 0!==c?c:{}),this.predefinedSelections=null!==(d=t.predefined_selections)&&void 0!==d?d:[],this.variables=Object.fromEntries(Object.entries(null!==(u=t.variables)&&void 0!==u?u:{}).map((([e,t])=>[`[[${e}]]`,t]))),this._applyTemplateIfPossible(e,t,a),Hn.PREDEFINED_SELECTION_TYPES.includes(this.selectionType)||(this.runImmediately=!1)}_applyTemplateIfPossible(e,t,a){if(!t.template||!wn.isValidModeTemplate(e,t.template))return;const i=wn.getModeTemplate(e,t.template);!t.name&&i.name&&(this.name=Zi(i.name,a)),!t.icon&&i.icon&&(this.icon=i.icon),!t.selection_type&&i.selection_type&&(this.selectionType=Ln[i.selection_type]),!t.max_selections&&i.max_selections&&(this.maxSelections=i.max_selections),void 0===t.coordinates_rounding&&void 0!==i.coordinates_rounding&&(this.coordinatesRounding=i.coordinates_rounding),void 0===t.run_immediately&&void 0!==i.run_immediately&&(this.runImmediately=i.run_immediately),!t.repeats_type&&i.repeats_type&&(this.repeatsType=In[i.repeats_type]),!t.max_repeats&&i.max_repeats&&(this.maxRepeats=i.max_repeats),!t.service_call_schema&&i.service_call_schema&&(this.serviceCallSchema=new Vn(i.service_call_schema))}getServiceCall(e,t,a){return this.serviceCallSchema.apply(e,t,a,this.variables)}}Hn.PREDEFINED_SELECTION_TYPES=[Ln.PREDEFINED_RECTANGLE,Ln.ROOM,Ln.PREDEFINED_POINT];class Zn{constructor(e,t){this.x=e,this.y=t}}function Gn(e){e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation()}function Xn(e,t){const a=e.indexOf(t,0);return a>-1&&e.splice(a,1),a}function Kn(e,t){var a,i,n,r,o;const l=new Set;return e.entity&&l.add(e.entity),e.map_source.camera&&l.add(e.map_source.camera),e.calibration_source.entity&&l.add(e.calibration_source.entity),(null!==(a=e.conditions)&&void 0!==a?a:[]).map((e=>null==e?void 0:e.entity)).forEach((e=>{e&&l.add(e)})),(null!==(i=e.icons)&&void 0!==i?i:[]).filter((e=>e.conditions)).flatMap((e=>e.conditions)).map((e=>null==e?void 0:e.entity)).forEach((e=>{e&&l.add(e)})),(null!==(n=e.tiles)&&void 0!==n?n:[]).forEach((e=>l.add(e.entity))),(null!==(r=e.tiles)&&void 0!==r?r:[]).filter((e=>e.conditions)).flatMap((e=>e.conditions)).map((e=>null==e?void 0:e.entity)).forEach((e=>{e&&l.add(e)})),(null!==(o=e.map_modes)&&void 0!==o?o:[]).map((a=>{var i;return new Hn(null!==(i=e.vacuum_platform)&&void 0!==i?i:\"default\",a,t)})).forEach((e=>function(e){const t=new Set;switch(e.selectionType){case Ln.PREDEFINED_RECTANGLE:e.predefinedSelections.map((e=>e)).filter((e=>\"string\"==typeof e.zones)).forEach((e=>t.add(e.zones.split(\".attributes.\")[0])));break;case Ln.PREDEFINED_POINT:e.predefinedSelections.map((e=>e)).filter((e=>\"string\"==typeof e.position)).forEach((e=>t.add(e.position.split(\".attributes.\")[0])))}return t}(e).forEach((e=>l.add(e))))),l}function qn(e,t){var a;return(null!==(a=e.conditions)&&void 0!==a?a:[]).every((e=>function(e,t){const a=e.attribute?t.states[e.entity].attributes[e.attribute]:t.states[e.entity].state;return e.value?a==e.value:!!e.value_not&&a!=e.value_not}(e,t)))}function Bn(e,t){return e?t():null}function Yn(e,t){return a=>{e.hass&&t&&a.detail.action&&function(e,t,a,i){var n;\"double_tap\"===i&&a.double_tap_action?n=a.double_tap_action:\"hold\"===i&&a.hold_action?n=a.hold_action:\"tap\"===i&&a.tap_action&&(n=a.tap_action),ue(e,t,a,n)}(e,e.hass,t,a.detail.action)}}function Wn(e,t,a){let i,n;return e instanceof MouseEvent&&(i=e.offsetX,n=e.offsetY),window.TouchEvent&&e instanceof TouchEvent&&e.touches&&(i=(e.touches[0].clientX-t.getBoundingClientRect().x)/a,n=(e.touches[0].clientY-t.getBoundingClientRect().y)/a),new Zn(i,n)}function Jn(e,t){return t?Math.sqrt((t.clientX-e.clientX)**2+(t.clientY-e.clientY)**2):0}function Qn(e,t){return t?{clientX:(e.clientX+t.clientX)/2,clientY:(e.clientY+t.clientY)/2}:e}function er(e,t){return\"number\"==typeof e?e:e.trimRight().endsWith(\"%\")?t*parseFloat(e)/100:parseFloat(e)}let tr;function ar(){return tr||(tr=document.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\"))}function ir(){return ar().createSVGMatrix()}function nr(){return ar().createSVGPoint()}class rr extends HTMLElement{constructor(){super(),this._transform=ir(),this._enablePan=!0,this._locked=!1,this._twoFingerPan=!1,new MutationObserver((()=>this._stageElChange())).observe(this,{childList:!0});const e=new On(this,{start:(t,a)=>!(a.target.classList.contains(\"draggable\")&&e.currentPointers.length<2)&&(!(2===e.currentPointers.length||!this._positioningEl||this.locked)&&((this.enablePan||1==e.currentPointers.length||a instanceof PointerEvent&&\"mouse\"==a.pointerType)&&(this.enablePan=!0),!0)),move:t=>{this.enablePan&&this._onPointerMove(t,e.currentPointers)},end:(t,a,i)=>(this.twoFingerPan&&1==e.currentPointers.length&&(this.enablePan=!1),Gn(a),!1)});this.addEventListener(\"wheel\",(e=>this._onWheel(e)))}static get observedAttributes(){return[\"min-scale\",\"max-scale\",\"no-default-pan\",\"two-finger-pan\",\"locked\"]}attributeChangedCallback(e,t,a){\"min-scale\"===e&&this.scale<this.minScale&&this.setTransform({scale:this.minScale}),\"max-scale\"===e&&this.scale>this.maxScale&&this.setTransform({scale:this.maxScale}),\"no-default-pan\"===e&&(this.enablePan=!(\"1\"==a||\"true\"==a)),\"two-finger-pan\"===e&&(\"1\"==a||\"true\"==a?(this.twoFingerPan=!0,this.enablePan=!1):(this.twoFingerPan=!1,this.enablePan=!0)),\"locked\"===e&&(this.locked=\"1\"==a||\"true\"==a)}get minScale(){const e=this.getAttribute(\"min-scale\");if(!e)return.01;const t=parseFloat(e);return Number.isFinite(t)?Math.max(.01,t):.01}set minScale(e){e&&this.setAttribute(\"min-scale\",String(e))}get maxScale(){const e=this.getAttribute(\"max-scale\");if(!e)return 100;const t=parseFloat(e);return Number.isFinite(t)?Math.min(100,t):100}set maxScale(e){e&&this.setAttribute(\"max-scale\",String(e))}set enablePan(e){this._enablePan=e,this._enablePan?this._enablePan&&\"none\"!=this.style.touchAction&&(this.style.touchAction=\"none\"):this.style.touchAction=\"pan-y pan-x\"}get enablePan(){return this._enablePan}set locked(e){this._locked=e}get locked(){return this._locked}set twoFingerPan(e){this._twoFingerPan=e}get twoFingerPan(){return this._twoFingerPan}connectedCallback(){this._stageElChange()}get x(){return this._transform.e}get y(){return this._transform.f}get scale(){return this._transform.a}scaleTo(e,t={}){let{originX:a=0,originY:i=0}=t;const{relativeTo:n=\"content\",allowChangeEvent:r=!1}=t,o=\"content\"===n?this._positioningEl:this;if(!o||!this._positioningEl)return void this.setTransform({scale:e,allowChangeEvent:r});const l=o.getBoundingClientRect();if(a=er(a,l.width),i=er(i,l.height),\"content\"===n)a+=this.x,i+=this.y;else{const e=this._positioningEl.getBoundingClientRect();a-=e.left,i-=e.top}this._applyChange({allowChangeEvent:r,originX:a,originY:i,scaleDiff:e/this.scale})}setTransform(e={}){const{scale:t=this.scale,allowChangeEvent:a=!1}=e;let{x:i=this.x,y:n=this.y}=e;if(!this._positioningEl)return void this._updateTransform(t,i,n,a);const r=this.getBoundingClientRect(),o=this._positioningEl.getBoundingClientRect();if(!r.width||!r.height)return void this._updateTransform(t,i,n,a);let l=nr();l.x=o.left-r.left,l.y=o.top-r.top;let s=nr();s.x=o.width+l.x,s.y=o.height+l.y;const c=ir().translate(i,n).scale(t).multiply(this._transform.inverse());l=l.matrixTransform(c),s=s.matrixTransform(c),l.x>r.width?i+=r.width-l.x:s.x<0&&(i+=-s.x),l.y>r.height?n+=r.height-l.y:s.y<0&&(n+=-s.y),this._updateTransform(t,i,n,a)}_updateTransform(e,t,a,i){if(!(e<this.minScale)&&!(e>this.maxScale)&&(e!==this.scale||t!==this.x||a!==this.y)&&(this._transform.e=t,this._transform.f=a,this._transform.d=this._transform.a=e,this.style.setProperty(\"--x\",this.x+\"px\"),this.style.setProperty(\"--y\",this.y+\"px\"),this.style.setProperty(\"--scale\",this.scale+\"\"),i)){const e=new Event(\"change\",{bubbles:!0});this.dispatchEvent(e)}}_stageElChange(){this._positioningEl=void 0,0!==this.children.length&&(this._positioningEl=this.children[0],this.children.length>1&&console.warn(\"<pinch-zoom> must not have more than one child.\"),this.setTransform({allowChangeEvent:!0}))}_onWheel(e){if(!this._positioningEl||this.locked)return;e.preventDefault();const t=this._positioningEl.getBoundingClientRect();let{deltaY:a}=e;const{ctrlKey:i,deltaMode:n}=e;1===n&&(a*=15);const r=1-a/(i?100:300);this._applyChange({scaleDiff:r,originX:e.clientX-t.left,originY:e.clientY-t.top,allowChangeEvent:!0})}_onPointerMove(e,t){if(!this._positioningEl)return;const a=this._positioningEl.getBoundingClientRect(),i=Qn(e[0],e[1]),n=Qn(t[0],t[1]),r=i.clientX-a.left,o=i.clientY-a.top,l=Jn(e[0],e[1]),s=Jn(t[0],t[1]),c=l?s/l:1;this._applyChange({originX:r,originY:o,scaleDiff:c,panX:n.clientX-i.clientX,panY:n.clientY-i.clientY,allowChangeEvent:!0})}_applyChange(e={}){const{panX:t=0,panY:a=0,originX:i=0,originY:n=0,scaleDiff:r=1,allowChangeEvent:o=!1}=e,l=ir().translate(t,a).translate(i,n).translate(this.x,this.y).scale(r).translate(-i,-n).scale(this.scale);this.setTransform({allowChangeEvent:o,scale:l.a,x:l.e,y:l.f})}}customElements.define(\"pinch-zoom\",rr);class or{constructor(e){this._context=e}scaled(e){return e/this._context.scale()}scaledCss(e){return parseFloat(this._context.cssEvaluator(e))/this._context.scale()}realScaled(e){return e/this._context.realScale()}realScaled2(e){return e*this._context.realScale()}realScaled2Point(e){return[this.realScaled2(e[0]),this.realScaled2(e[1])]}realScaledPoint(e){return[this.realScaled(e[0]),this.realScaled(e[1])]}update(){this._context.update()}localize(e){return this._context.localize(e)}getMousePosition(e){return this._context.mousePositionCalculator(e)}vacuumToRealMap(e,t){var a;const i=null===(a=this._context.coordinatesConverter())||void 0===a?void 0:a.vacuumToMap(e,t);if(!i)throw Error(\"Missing calibration\");return i}vacuumToScaledMap(e,t){return this.realScaled2Point(this.vacuumToRealMap(e,t))}scaledMapToVacuum(e,t){const[a,i]=this.realScaledPoint([e,t]);return this.realMapToVacuum(a,i)}realMapToVacuum(e,t){var a;const i=null===(a=this._context.coordinatesConverter())||void 0===a?void 0:a.mapToVacuum(e,t);if(!i)throw Error(\"Missing calibration\");return this._context.roundMap(i)}renderIcon(e,t,a){const i=e?this.vacuumToScaledMap(e.x,e.y):[];return R`${Bn(null!=e&&i.length>0,(()=>R`\n                <foreignObject class=\"icon-foreign-object\"\n                               style=\"--x-icon: ${i[0]}px; --y-icon: ${i[1]}px;\"\n                               x=\"${i[0]}px\" y=\"${i[1]}px\" width=\"36px\" height=\"36px\">         \n                    <body xmlns=\"http://www.w3.org/1999/xhtml\">\n                      <div class=\"map-icon-wrapper ${a} clickable\" @click=\"${t}\" >\n                          <ha-icon icon=\"${null==e?void 0:e.name}\" style=\"background: transparent;\"></ha-icon>\n                      </div>\n                    </body>\n                </foreignObject>\n            `))}`}renderLabel(e,t){const a=e?this.vacuumToScaledMap(e.x,e.y):[];return R`${Bn(null!=e&&a.length>0,(()=>{var i,n;return R`\n                <text class=\"label-text ${t}\"\n                      x=\"${a[0]+this.scaled(null!==(i=null==e?void 0:e.offset_x)&&void 0!==i?i:0)}px\"\n                      y=\"${a[1]+this.scaled(null!==(n=null==e?void 0:e.offset_y)&&void 0!==n?n:0)}px\">\n                    ${null==e?void 0:e.text}\n                </text>\n            `}))}`}vacuumToMapRect([e,t,a,i]){const n=[e,t],r=[a,t],o=[a,i],l=[e,i],s=this.vacuumToScaledMap(e,t),c=this.vacuumToScaledMap(a,t),d=this.vacuumToScaledMap(a,i),u=this.vacuumToScaledMap(e,i),m=[n,r,o,l,n,r,o,l],p=[s,c,d,u,s,c,d,u],_=[s,c,d,u],g=p.indexOf(or.findTopLeft(_)),v=p.slice(g,g+4),h=this._isCounterClockwise(v),f=m.slice(g,g+4);return h?[or._reverse(v),or._reverse(f)]:[v,f]}_isCounterClockwise(e){let t=0;return e.forEach(((a,i)=>t+=(e[(i+1)%4][0]-a[0])*(e[(i+1)%4][1]+a[1]))),t<0}static findTopLeft(e){const t=e.sort(((e,t)=>e[1]-t[1]))[0],a=e.indexOf(t),i=e[(a+1)%4],n=e[(a+3)%4],r=or.calcAngle(t,i)<or.calcAngle(t,n)?i:n;return r[0]<t[0]?r:t}static calcAngle(e,t){let a=Math.atan2(t[1]-e[1],t[0]-e[0]);return a>Math.PI/2&&(a=Math.PI-a),a}static _reverse([e,t,a,i]){return[e,i,a,t]}static get styles(){return r`\n            .icon-foreign-object {\n                overflow: visible;\n                pointer-events: none;\n            }\n\n            .map-icon-wrapper {\n                position: center;\n                display: flex;\n                align-items: center;\n                justify-content: center;\n                pointer-events: auto;\n            }\n        `}}var lr;!function(e){e[e.NONE=0]=\"NONE\",e[e.RESIZE=1]=\"RESIZE\",e[e.MOVE=2]=\"MOVE\"}(lr||(lr={}));class sr extends or{constructor(e,t,a,i,n,r){super(r),this._id=n,this._dragMode=lr.NONE,this._vacRect=this._toVacuumFromDimensions(e,t,a,i),this._vacRectSnapshot=this._vacRect}render(){const e=this._vacRect,t=this.vacuumToMapRect(e)[0],a=t[0],i=t[2],n=t[3],r=sr.calcAngle(t[0],t[3]);return R`\n            <g class=\"manual-rectangle-wrapper ${this.isSelected()?\"selected\":\"\"}\"\n               style=\"--x-resize:${i[0]}px; \n                      --y-resize:${i[1]}px;\n                      --x-delete:${n[0]}px;\n                      --y-delete:${n[1]}px;\n                      --x-description:${a[0]}px;\n                      --y-description:${a[1]}px;\n                      --angle-description: ${r}rad;\">\n                <polygon class=\"manual-rectangle draggable movable\"\n                         @mousedown=\"${e=>this._startDrag(e)}\"\n                         @mousemove=\"${e=>this._drag(e)}\"\n                         @mouseup=\"${e=>this._endDrag(e)}\"\n                         @touchstart=\"${e=>this._startDrag(e)}\"\n                         @touchmove=\"${e=>this._drag(e)}\"\n                         @touchend=\"${e=>this._endDrag(e)}\"\n                         @touchleave=\"${e=>this._endDrag(e)}\"\n                         @touchcancel=\"${e=>this._endDrag(e)}\"\n                         points=\"${sr._toPoints(t)}\">\n                </polygon>\n                <g class=\"manual-rectangle-description\">\n                    <text>\n                        ${this._id} ${this._getDimensions()}\n                    </text>\n                </g>\n                <circle class=\"manual-rectangle-delete-circle clickable\"\n                        @mouseup=\"${e=>this._delete(e)}\"></circle>\n                <path class=\"manual-rectangle-delete-icon\"\n                      d=\"M19,6.41L17.59,5L12,10.59L6.41,5L5,6.41L10.59,12L5,17.59L6.41,19L12,13.41L17.59,19L19,17.59L13.41,12L19,6.41Z\">\n                </path>\n                <circle class=\"manual-rectangle-resize-circle draggable resizer\"\n                        @mousedown=\"${e=>this._startDrag(e)}\"\n                        @mousemove=\"${e=>this._drag(e)}\"\n                        @mouseup=\"${e=>this._endDrag(e)}\"\n                        @touchstart=\"${e=>this._startDrag(e)}\"\n                        @touchmove=\"${e=>this._drag(e)}\"\n                        @touchend=\"${e=>this._endDrag(e)}\"\n                        @touchleave=\"${e=>this._endDrag(e)}\"\n                        @touchcancel=\"${e=>this._endDrag(e)}\">\n                </circle>\n                <path class=\"manual-rectangle-resize-icon\"\n                      d=\"M13,21H21V13H19V17.59L6.41,5H11V3H3V11H5V6.41L17.59,19H13V21Z\">\n                </path>\n            </g>\n        `}isSelected(){return null!=this._selectedElement}_getDimensions(){const[e,t,a,i]=this.toVacuum(),n=Math.abs(a-e),r=Math.abs(i-t),o=this._context.roundingEnabled()?1e3:1,l=e=>(e/o).toFixed(1);return`${l(n)}${this.localize(\"unit.meter_shortcut\")} x ${l(r)}${this.localize(\"unit.meter_shortcut\")}`}_startDrag(e){var t;if(window.TouchEvent&&e instanceof TouchEvent&&e.touches.length>1)return;if(!e.target.classList.contains(\"draggable\"))return;if(!(null===(t=e.target.parentElement)||void 0===t?void 0:t.classList.contains(\"manual-rectangle-wrapper\")))return;if(!e.target.parentElement)return;Gn(e),this._selectedTarget=e.target;const a=e.target;a.classList.contains(\"movable\")?this._dragMode=lr.MOVE:a.classList.contains(\"resizer\")?this._dragMode=lr.RESIZE:this._dragMode=lr.NONE,this._selectedElement=e.target.parentElement,this._vacRectSnapshot=[...this._vacRect];const i=this.getMousePosition(e);this._startPointSnapshot=this.scaledMapToVacuum(i.x,i.y),this.update()}externalDrag(e){this._drag(e)}_drag(e){if(!(window.TouchEvent&&e instanceof TouchEvent&&e.touches.length>1)&&this._selectedElement){Gn(e);const t=this.getMousePosition(e);if(t){const e=this.scaledMapToVacuum(t.x,t.y),a=e[0]-this._startPointSnapshot[0],i=e[1]-this._startPointSnapshot[1];switch(this._dragMode){case lr.MOVE:this._vacRect=[this._vacRectSnapshot[0]+a,this._vacRectSnapshot[1]+i,this._vacRectSnapshot[2]+a,this._vacRectSnapshot[3]+i],this._setup(this.vacuumToMapRect(this._vacRect)[0]);break;case lr.RESIZE:const e=this.vacuumToMapRect(this._vacRectSnapshot)[1][0],t=[...this._vacRect];e[0]===this._vacRectSnapshot[0]?this._vacRect[2]=this._vacRectSnapshot[2]+a:this._vacRect[0]=this._vacRectSnapshot[0]+a,e[1]===this._vacRectSnapshot[1]?this._vacRect[3]=this._vacRectSnapshot[3]+i:this._vacRect[1]=this._vacRectSnapshot[1]+i,Math.sign(this._vacRect[0]-this._vacRect[2])==Math.sign(t[0]-t[2])&&Math.sign(this._vacRect[1]-this._vacRect[3])==Math.sign(t[1]-t[3])||(this._vacRect=t),this._setup(this.vacuumToMapRect(this._vacRect)[0]);case lr.NONE:}}}}_setup(e){var t,a,i,n,r,o,l,s,c,d,u,m,p,_,g,v,h;null===(i=null===(a=null===(t=this._selectedElement)||void 0===t?void 0:t.children)||void 0===a?void 0:a.item(0))||void 0===i||i.setAttribute(\"points\",sr._toPoints(e));const f=e[0],b=e[2],y=e[3],k=sr.calcAngle(e[0],e[3]);null===(r=null===(n=this._selectedElement)||void 0===n?void 0:n.style)||void 0===r||r.setProperty(\"--x-resize\",b[0]+\"px\"),null===(l=null===(o=this._selectedElement)||void 0===o?void 0:o.style)||void 0===l||l.setProperty(\"--y-resize\",b[1]+\"px\"),null===(c=null===(s=this._selectedElement)||void 0===s?void 0:s.style)||void 0===c||c.setProperty(\"--x-delete\",y[0]+\"px\"),null===(u=null===(d=this._selectedElement)||void 0===d?void 0:d.style)||void 0===u||u.setProperty(\"--y-delete\",y[1]+\"px\"),null===(p=null===(m=this._selectedElement)||void 0===m?void 0:m.style)||void 0===p||p.setProperty(\"--x-description\",f[0]+\"px\"),null===(g=null===(_=this._selectedElement)||void 0===_?void 0:_.style)||void 0===g||g.setProperty(\"--y-description\",f[1]+\"px\"),null===(h=null===(v=this._selectedElement)||void 0===v?void 0:v.style)||void 0===h||h.setProperty(\"--angle-description\",k+\"rad\")}_endDrag(e){Gn(e),this._selectedElement=null,this._selectedTarget=null,this.update()}_delete(e){Gn(e);const t=Xn(this._context.selectedManualRectangles(),this);if(t>-1){for(let e=t;e<this._context.selectedManualRectangles().length;e++)this._context.selectedManualRectangles()[e]._id=(e+1).toString();de(\"selection\"),this._context.update()}}static _toPoints(e){const t=e.filter((e=>!isNaN(e[0])&&!isNaN(e[1]))).map((e=>e.join(\", \"))).join(\" \");return 3==t.length&&console.error(`Points: ${t}`),t}_toVacuumFromDimensions(e,t,a,i){const n=this.realScaled(e),r=this.realScaled(t),o=this.realScaled(a),l=this.realScaled(i),s=this.realMapToVacuum(n,r),c=this.realMapToVacuum(n+o,r+l),d=[s[0],c[0]].sort(),u=[s[1],c[1]].sort();return[d[0],u[0],d[1],u[1]]}toVacuum(e=null){const[t,a,i,n]=this._vacRect,r=[Math.min(t,i),Math.min(a,n),Math.max(t,i),Math.max(a,n)];return null!=e?[...r,e]:r}static get styles(){return r`\n            .resizer {\n                cursor: nwse-resize;\n            }\n\n            .movable {\n                cursor: move;\n            }\n\n            .manual-rectangle-wrapper {\n            }\n\n            .manual-rectangle-wrapper.selected {\n            }\n\n            .manual-rectangle {\n                stroke: var(--map-card-internal-manual-rectangle-line-color);\n                stroke-linejoin: round;\n                stroke-dasharray: calc(var(--map-card-internal-manual-rectangle-line-segment-line) / var(--map-scale)),\n                    calc(var(--map-card-internal-manual-rectangle-line-segment-gap) / var(--map-scale));\n                fill: var(--map-card-internal-manual-rectangle-fill-color);\n                stroke-width: calc(var(--map-card-internal-manual-rectangle-line-width) / var(--map-scale));\n            }\n\n            .manual-rectangle-wrapper.selected > .manual-rectangle {\n                stroke: var(--map-card-internal-manual-rectangle-line-color-selected);\n                fill: var(--map-card-internal-manual-rectangle-fill-color-selected);\n            }\n\n            .manual-rectangle-description {\n                transform: translate(\n                        calc(\n                            var(--x-description) + var(--map-card-internal-manual-rectangle-description-offset-x) /\n                                var(--map-scale)\n                        ),\n                        calc(\n                            var(--y-description) + var(--map-card-internal-manual-rectangle-description-offset-y) /\n                                var(--map-scale)\n                        )\n                    )\n                    rotate(var(--angle-description));\n                font-size: calc(var(--map-card-internal-manual-rectangle-description-font-size) / var(--map-scale));\n                fill: var(--map-card-internal-manual-rectangle-description-color);\n                background: transparent;\n            }\n\n            .manual-rectangle-delete-circle {\n                r: calc(var(--map-card-internal-manual-rectangle-delete-circle-radius) / var(--map-scale));\n                cx: var(--x-delete);\n                cy: var(--y-delete);\n                stroke: var(--map-card-internal-manual-rectangle-delete-circle-line-color);\n                fill: var(--map-card-internal-manual-rectangle-delete-circle-fill-color);\n                stroke-width: calc(\n                    var(--map-card-internal-manual-rectangle-delete-circle-line-width) / var(--map-scale)\n                );\n            }\n\n            .manual-rectangle-delete-icon {\n                fill: var(--map-card-internal-manual-rectangle-delete-icon-color);\n                transform: translate(\n                        calc(var(--x-delete) - 8.5px / var(--map-scale)),\n                        calc(var(--y-delete) - 8.5px / var(--map-scale))\n                    )\n                    scale(calc(0.71 / var(--map-scale)));\n                pointer-events: none;\n            }\n\n            .manual-rectangle-wrapper.selected > .manual-rectangle-delete-circle {\n                stroke: var(--map-card-internal-manual-rectangle-delete-circle-line-color-selected);\n                fill: var(--map-card-internal-manual-rectangle-delete-circle-fill-color-selected);\n                opacity: 50%;\n            }\n\n            .manual-rectangle-wrapper.selected > .manual-rectangle-delete-icon {\n                fill: var(--map-card-internal-manual-rectangle-delete-icon-color-selected);\n                opacity: 50%;\n            }\n\n            .manual-rectangle-resize-circle {\n                r: calc(var(--map-card-internal-manual-rectangle-resize-circle-radius) / var(--map-scale));\n                cx: var(--x-resize);\n                cy: var(--y-resize);\n                stroke: var(--map-card-internal-manual-rectangle-resize-circle-line-color);\n                fill: var(--map-card-internal-manual-rectangle-resize-circle-fill-color);\n                stroke-width: calc(\n                    var(--map-card-internal-manual-rectangle-resize-circle-line-width) / var(--map-scale)\n                );\n            }\n\n            .manual-rectangle-resize-icon {\n                fill: var(--map-card-internal-manual-rectangle-resize-icon-color);\n                transform: translate(\n                        calc(var(--x-resize) - 8.5px / var(--map-scale)),\n                        calc(var(--y-resize) - 8.5px / var(--map-scale))\n                    )\n                    scale(calc(0.71 / var(--map-scale)));\n                pointer-events: none;\n            }\n\n            .manual-rectangle-wrapper.selected > .manual-rectangle-resize-circle {\n                stroke: var(--map-card-internal-manual-rectangle-resize-circle-line-color-selected);\n                fill: var(--map-card-internal-manual-rectangle-resize-circle-fill-color-selected);\n                opacity: 50%;\n            }\n\n            .manual-rectangle-wrapper.selected > .manual-rectangle-resize-icon {\n                fill: var(--map-card-internal-manual-rectangle-resize-icon-color-selected);\n                opacity: 50%;\n            }\n        `}}class cr{constructor(e,t,a,i,n,r,o,l,s,c,d,u,m,p){this.scale=e,this.realScale=t,this.mousePositionCalculator=a,this.update=i,this.coordinatesConverter=n,this.selectedManualRectangles=r,this.selectedPredefinedRectangles=o,this.selectedRooms=l,this.selectedPredefinedPoint=s,this.roundingEnabled=c,this.maxSelections=d,this.cssEvaluator=u,this.runImmediately=m,this.localize=p}roundMap([e,t]){return this.roundingEnabled()?[Math.round(e),Math.round(t)]:[e,t]}}class dr extends or{constructor(e,t,a){super(a),this._x=e,this._y=t}}class ur extends dr{constructor(e,t,a){super(e,t,a)}render(){return R`\n            <g class=\"manual-point-wrapper\" style=\"--x-point:${this._x}px; --y-point:${this._y}px;\">\n                <circle class=\"manual-point\"></circle>\n            </g>\n        `}imageX(){return this.realScaled(this._x)}imageY(){return this.realScaled(this._y)}toVacuum(e=null){const[t,a]=this.realMapToVacuum(this.imageX(),this.imageY());return null===e?[t,a]:[t,a,e]}static get styles(){return r`\n            .manual-point-wrapper {\n                stroke: var(--map-card-internal-manual-point-line-color);\n                stroke-width: calc(var(--map-card-internal-manual-point-line-width) / var(--map-scale));\n                --radius: calc(var(--map-card-internal-manual-point-radius) / var(--map-scale));\n            }\n\n            .manual-point {\n                cx: var(--x-point);\n                cy: var(--y-point);\n                r: var(--radius);\n                fill: var(--map-card-internal-manual-point-fill-color);\n            }\n        `}}class mr extends or{constructor(e,t,a){super(a),this.x=e,this.y=t}imageX(){return this.realScaled(this.x)}imageY(){return this.realScaled(this.y)}renderMask(){return R`\n            <circle style=\"r: var(--radius)\"\n                    cx=\"${this.x}\"\n                    cy=\"${this.y}\"\n                    fill=\"black\">\n            </circle>`}render(){return R`\n            <circle class=\"manual-path-point\"\n                    cx=\"${this.x}\"\n                    cy=\"${this.y}\">\n            </circle>`}}class pr extends or{constructor(e,t){super(t),this.points=e}render(){if(0===this.points.length)return R``;const e=this.points.map((e=>e.x)),t=this.points.map((e=>e.y)),a=Math.max(...e),i=Math.min(...e),n=Math.max(...t),r=Math.min(...t);return R`\n            <g class=\"manual-path-wrapper\">\n                <defs>\n                    <mask id=\"manual-path-circles-filter\">\n                        <rect x=\"${i}\" y=\"${r}\" width=\"${a-i}\" height=\"${n-r}\"\n                              fill=\"white\"></rect>\n                        ${this.points.map((e=>e.renderMask()))}\n                    </mask>\n                </defs>\n                ${this.points.map((e=>e.render()))}\n                <polyline class=\"manual-path-line\"\n                          points=\"${this.points.map((e=>`${e.x},${e.y}`)).join(\" \")}\"\n                          mask=\"url(#manual-path-circles-filter)\">\n                </polyline>\n            </g>\n        `}toVacuum(e=null){return this.points.map((t=>{const[a,i]=this.realMapToVacuum(t.imageX(),t.imageY());return null===e?[a,i]:[a,i,e]}))}addPoint(e,t){this.points.push(new mr(e,t,this._context))}clear(){this.points=[]}removeLast(){this.points.pop()}static get styles(){return r`\n            .manual-path-wrapper {\n                --radius: calc(var(--map-card-internal-manual-path-point-radius) / var(--map-scale));\n            }\n\n            .manual-path-line {\n                fill: transparent;\n                stroke: var(--map-card-internal-manual-path-line-color);\n                stroke-width: calc(var(--map-card-internal-manual-path-line-width) / var(--map-scale));\n            }\n\n            .manual-path-point {\n                r: var(--radius);\n                stroke: var(--map-card-internal-manual-path-point-line-color);\n                fill: var(--map-card-internal-manual-path-point-fill-color);\n                stroke-width: calc(var(--map-card-internal-manual-path-point-line-width) / var(--map-scale));\n            }\n        `}}class _r extends or{constructor(e,t){var a;super(t),this._config=e,this._selected=!1,this._iconConfig=null!==(a=this._config.icon)&&void 0!==a?a:{x:this._config.position[0],y:this._config.position[1],name:\"mdi:map-marker\"}}render(){return R`\n            <g class=\"predefined-point-wrapper ${this._selected?\"selected\":\"\"}\">\n                ${this.renderIcon(this._iconConfig,(()=>this._click()),\"predefined-point-icon-wrapper\")}\n                ${this.renderLabel(this._config.label,\"predefined-point-label\")}\n            </g>\n        `}_click(){if(this._selected=!this._selected,de(\"selection\"),this._selected){const e=this._context.selectedPredefinedPoint().pop();void 0!==e&&(e._selected=!1),this._context.selectedPredefinedPoint().push(this)}else Xn(this._context.selectedPredefinedPoint(),this);if(this._context.runImmediately())return this._selected=!1,void Xn(this._context.selectedPredefinedPoint(),this);this.update()}toVacuum(e=null){return\"string\"==typeof this._config.position?[0,0]:null===e?this._config.position:[...this._config.position,e]}static get styles(){return r`\n            .predefined-point-wrapper {\n            }\n\n            .predefined-point-icon-wrapper {\n                x: var(--x-icon);\n                y: var(--y-icon);\n                height: var(--map-card-internal-predefined-point-icon-wrapper-size);\n                width: var(--map-card-internal-predefined-point-icon-wrapper-size);\n                border-radius: var(--map-card-internal-small-radius);\n                transform-box: fill-box;\n                overflow: hidden;\n                transform: translate(\n                        calc(var(--map-card-internal-predefined-point-icon-wrapper-size) / -2),\n                        calc(var(--map-card-internal-predefined-point-icon-wrapper-size) / -2)\n                    )\n                    scale(calc(1 / var(--map-scale)));\n                background: var(--map-card-internal-predefined-point-icon-background-color);\n                color: var(--map-card-internal-predefined-point-icon-color);\n                --mdc-icon-size: var(--map-card-internal-predefined-point-icon-size);\n                transition: color var(--map-card-internal-transitions-duration) ease,\n                    background var(--map-card-internal-transitions-duration) ease;\n            }\n\n            .predefined-point-label {\n                text-anchor: middle;\n                dominant-baseline: middle;\n                pointer-events: none;\n                font-size: calc(var(--map-card-internal-predefined-point-label-font-size) / var(--map-scale));\n                fill: var(--map-card-internal-predefined-point-label-color);\n                transition: color var(--map-card-internal-transitions-duration) ease,\n                    background var(--map-card-internal-transitions-duration) ease;\n            }\n\n            .predefined-point-wrapper.selected > * > .predefined-point-icon-wrapper {\n                background: var(--map-card-internal-predefined-point-icon-background-color-selected);\n                color: var(--map-card-internal-predefined-point-icon-color-selected);\n            }\n\n            .predefined-point-wrapper.selected > .predefined-point-label {\n                fill: var(--map-card-internal-predefined-point-label-color-selected);\n            }\n        `}static getFromEntities(e,t,a){return e.predefinedSelections.map((e=>e)).filter((e=>\"string\"==typeof e.position)).map((e=>e.position.split(\".attributes.\"))).flatMap((e=>{const a=t.states[e[0]],i=2===e.length?a.attributes[e[1]]:a.state;let n;try{n=JSON.parse(i)}catch(e){n=i}return n})).map((e=>new _r({position:e,label:void 0,icon:{x:e[0],y:e[1],name:\"mdi:map-marker\"}},a())))}}class gr extends or{constructor(e,t){super(t),this._config=e,this._selected=!1}render(){let e=[];\"string\"!=typeof this._config.zones&&(e=this._config.zones);const t=e.map((e=>this.vacuumToMapRect(e)[0]));return R`\n            <g class=\"predefined-rectangle-wrapper ${this._selected?\"selected\":\"\"}\">\n                ${t.map((e=>R`\n                    <polygon class=\"predefined-rectangle clickable\"\n                             points=\"${e.map((e=>e.join(\", \"))).join(\" \")}\"\n                             @click=\"${()=>this._click()}\">\n                    </polygon>\n                `))}\n                ${this.renderIcon(this._config.icon,(()=>this._click()),\"predefined-rectangle-icon-wrapper\")}\n                ${this.renderLabel(this._config.label,\"predefined-rectangle-label\")}\n            </g>\n        `}_click(){if(!this._selected&&this._context.selectedPredefinedRectangles().map((e=>e.size())).reduce(((e,t)=>e+t),0)+this.size()>this._context.maxSelections())de(\"failure\");else{if(this._selected=!this._selected,this._selected?this._context.selectedPredefinedRectangles().push(this):Xn(this._context.selectedPredefinedRectangles(),this),this._context.runImmediately())return this._selected=!1,void Xn(this._context.selectedPredefinedRectangles(),this);de(\"selection\"),this.update()}}size(){return this._config.zones.length}toVacuum(e){return\"string\"==typeof this._config.zones?[]:null===e?this._config.zones:this._config.zones.map((t=>[...t,e]))}static get styles(){return r`\n            .predefined-rectangle-wrapper {\n            }\n\n            .predefined-rectangle-wrapper.selected {\n            }\n\n            .predefined-rectangle {\n                width: var(--width);\n                height: var(--height);\n                x: var(--x);\n                y: var(--y);\n                stroke: var(--map-card-internal-predefined-rectangle-line-color);\n                stroke-linejoin: round;\n                stroke-dasharray: calc(\n                        var(--map-card-internal-predefined-rectangle-line-segment-line) / var(--map-scale)\n                    ),\n                    calc(var(--map-card-internal-predefined-rectangle-line-segment-gap) / var(--map-scale));\n                fill: var(--map-card-internal-predefined-rectangle-fill-color);\n                stroke-width: calc(var(--map-card-internal-predefined-rectangle-line-width) / var(--map-scale));\n                transition: stroke var(--map-card-internal-transitions-duration) ease,\n                    fill var(--map-card-internal-transitions-duration) ease;\n            }\n\n            .predefined-rectangle-icon-wrapper {\n                x: var(--x-icon);\n                y: var(--y-icon);\n                height: var(--map-card-internal-predefined-rectangle-icon-wrapper-size);\n                width: var(--map-card-internal-predefined-rectangle-icon-wrapper-size);\n                border-radius: var(--map-card-internal-small-radius);\n                transform-box: fill-box;\n                transform: translate(\n                        calc(var(--map-card-internal-predefined-rectangle-icon-wrapper-size) / -2),\n                        calc(var(--map-card-internal-predefined-rectangle-icon-wrapper-size) / -2)\n                    )\n                    scale(calc(1 / var(--map-scale)));\n                background: var(--map-card-internal-predefined-rectangle-icon-background-color);\n                color: var(--map-card-internal-predefined-rectangle-icon-color);\n                --mdc-icon-size: var(--map-card-internal-predefined-rectangle-icon-size);\n                transition: color var(--map-card-internal-transitions-duration) ease,\n                    background var(--map-card-internal-transitions-duration) ease;\n            }\n\n            .predefined-rectangle-label {\n                text-anchor: middle;\n                dominant-baseline: middle;\n                pointer-events: none;\n                font-size: calc(var(--map-card-internal-predefined-rectangle-label-font-size) / var(--map-scale));\n                fill: var(--map-card-internal-predefined-rectangle-label-color);\n                transition: color var(--map-card-internal-transitions-duration) ease,\n                    background var(--map-card-internal-transitions-duration) ease;\n            }\n\n            .predefined-rectangle-wrapper.selected > .predefined-rectangle {\n                stroke: var(--map-card-internal-predefined-rectangle-line-color-selected);\n                fill: var(--map-card-internal-predefined-rectangle-fill-color-selected);\n            }\n\n            .predefined-rectangle-wrapper.selected > * > .predefined-rectangle-icon-wrapper {\n                background: var(--map-card-internal-predefined-rectangle-icon-background-color-selected);\n                color: var(--map-card-internal-predefined-rectangle-icon-color-selected);\n            }\n\n            .predefined-rectangle-wrapper.selected > .predefined-rectangle-label {\n                fill: var(--map-card-internal-predefined-rectangle-label-color-selected);\n            }\n        `}static getFromEntities(e,t,a){return e.predefinedSelections.map((e=>e)).filter((e=>\"string\"==typeof e.zones)).map((e=>e.zones.split(\".attributes.\"))).flatMap((e=>{const a=t.states[e[0]],i=2===e.length?a.attributes[e[1]]:a.state;let n;try{n=JSON.parse(i)}catch(e){n=i}return n})).map((e=>new gr({zones:[e],label:void 0,icon:{x:(e[0]+e[2])/2,y:(e[1]+e[3])/2,name:\"mdi:broom\"}},a())))}}class vr extends or{constructor(e,t){super(t),this._config=e,this._selected=!1}render(){var e,t;const a=(null!==(t=null===(e=this._config)||void 0===e?void 0:e.outline)&&void 0!==t?t:[]).map((e=>this.vacuumToScaledMap(e[0],e[1])));return R`\n            <g class=\"room-wrapper ${this._selected?\"selected\":\"\"} \n            room-${`${this._config.id}`.replace(\" \",\"_\")}-wrapper\">\n                <polygon class=\"room-outline clickable\"\n                         points=\"${a.map((e=>e.join(\", \"))).join(\" \")}\"\n                         @click=\"${()=>this._click()}\">\n                </polygon>\n                ${this.renderIcon(this._config.icon,(()=>this._click()),\"room-icon-wrapper\")}\n                ${this.renderLabel(this._config.label,\"room-label\")}\n            </g>\n        `}toVacuum(){return this._config.id}_click(){if(!this._selected&&this._context.selectedRooms().length>=this._context.maxSelections())de(\"failure\");else{if(this._selected=!this._selected,this._selected?this._context.selectedRooms().push(this):Xn(this._context.selectedRooms(),this),this._context.runImmediately())return this._selected=!1,void Xn(this._context.selectedRooms(),this);de(\"selection\"),this.update()}}static get styles(){return r`\n            .room-wrapper {\n            }\n\n            .room-outline {\n                stroke: var(--map-card-internal-room-outline-line-color);\n                stroke-width: calc(var(--map-card-internal-room-outline-line-width) / var(--map-scale));\n                fill: var(--map-card-internal-room-outline-fill-color);\n                stroke-linejoin: round;\n                stroke-dasharray: calc(var(--map-card-internal-room-outline-line-segment-line) / var(--map-scale)),\n                    calc(var(--map-card-internal-room-outline-line-segment-gap) / var(--map-scale));\n                transition: stroke var(--map-card-internal-transitions-duration) ease,\n                    fill var(--map-card-internal-transitions-duration) ease;\n            }\n\n            .room-icon-wrapper {\n                x: var(--x-icon);\n                y: var(--y-icon);\n                height: var(--map-card-internal-room-icon-wrapper-size);\n                width: var(--map-card-internal-room-icon-wrapper-size);\n                border-radius: var(--map-card-internal-small-radius);\n                transform-box: fill-box;\n                overflow: hidden;\n                transform: translate(\n                        calc(var(--map-card-internal-room-icon-wrapper-size) / -2),\n                        calc(var(--map-card-internal-room-icon-wrapper-size) / -2)\n                    )\n                    scale(calc(1 / var(--map-scale)));\n                background: var(--map-card-internal-room-icon-background-color);\n                color: var(--map-card-internal-room-icon-color);\n                --mdc-icon-size: var(--map-card-internal-room-icon-size);\n                transition: color var(--map-card-internal-transitions-duration) ease,\n                    background var(--map-card-internal-transitions-duration) ease;\n            }\n\n            .room-label {\n                text-anchor: middle;\n                dominant-baseline: middle;\n                pointer-events: none;\n                font-size: calc(var(--map-card-internal-room-label-font-size) / var(--map-scale));\n                fill: var(--map-card-internal-room-label-color);\n                transition: color var(--map-card-internal-transitions-duration) ease,\n                    background var(--map-card-internal-transitions-duration) ease;\n            }\n\n            .room-wrapper.selected > .room-outline {\n                stroke: var(--map-card-internal-room-outline-line-color-selected);\n                fill: var(--map-card-internal-room-outline-fill-color-selected);\n            }\n\n            .room-wrapper.selected > * > .room-icon-wrapper {\n                background: var(--map-card-internal-room-icon-background-color-selected);\n                color: var(--map-card-internal-room-icon-color-selected);\n            }\n\n            .room-wrapper.selected > .room-label {\n                fill: var(--map-card-internal-room-label-color-selected);\n            }\n        `}}function hr(e){return void 0===e.x?[\"validation.preset.map_modes.predefined_selections.icon.x.missing\"]:void 0===e.y?[\"validation.preset.map_modes.predefined_selections.icon.y.missing\"]:e.name?[]:[\"validation.preset.map_modes.predefined_selections.icon.name.missing\"]}function fr(e){return void 0===e.x?[\"validation.preset.map_modes.predefined_selections.label.x.missing\"]:void 0===e.y?[\"validation.preset.map_modes.predefined_selections.label.y.missing\"]:e.text?[]:[\"validation.preset.map_modes.predefined_selections.label.text.missing\"]}function br(e,t,a){var i,n;if(!t)return[\"validation.preset.map_modes.invalid\"];if(t.template&&!wn.isValidModeTemplate(e,t.template))return[[\"validation.preset.map_modes.template.invalid\",\"{0}\",t.template]];const r=[];t.template||t.icon||r.push(\"validation.preset.map_modes.icon.missing\"),t.template||t.name||r.push(\"validation.preset.map_modes.name.missing\"),t.template||t.service_call_schema||r.push(\"validation.preset.map_modes.service_call_schema.missing\");const o=new Hn(e,t,a);switch(o.selectionType){case Ln.PREDEFINED_RECTANGLE:o.predefinedSelections.flatMap((e=>function(e){const t=e,a=[];return t.zones||a.push(\"validation.preset.map_modes.predefined_selections.zones.missing\"),\"string\"!=typeof t.zones&&t.zones.filter((e=>4!=e.length)).length>0&&a.push(\"validation.preset.map_modes.predefined_selections.zones.invalid_parameters_number\"),t.icon&&hr(t.icon).forEach((e=>a.push(e))),t.label&&fr(t.label).forEach((e=>a.push(e))),a}(e))).forEach((e=>r.push(e)));break;case Ln.ROOM:o.predefinedSelections.flatMap((e=>function(e){var t;const a=e,i=[];return void 0===a.id&&i.push(\"validation.preset.map_modes.predefined_selections.rooms.id.missing\"),a.id.toString().match(/^[A-Za-z0-9 _]+$/i)||i.push([\"validation.preset.map_modes.predefined_selections.rooms.id.invalid_format\",\"{0}\",a.id.toString()]),(null!==(t=a.outline)&&void 0!==t?t:[]).filter((e=>2!=e.length)).length>0&&i.push(\"validation.preset.map_modes.predefined_selections.rooms.outline.invalid_parameters_number\"),a.icon&&hr(a.icon).forEach((e=>i.push(e))),a.label&&fr(a.label).forEach((e=>i.push(e))),i}(e))).forEach((e=>r.push(e)));break;case Ln.PREDEFINED_POINT:o.predefinedSelections.flatMap((e=>function(e){var t;const a=e,i=[];return a.position||i.push(\"validation.preset.map_modes.predefined_selections.points.position.missing\"),\"string\"!=typeof a.position&&2!=(null===(t=a.position)||void 0===t?void 0:t.length)&&i.push(\"validation.preset.map_modes.predefined_selections.points.position.invalid_parameters_number\"),a.icon&&hr(a.icon).forEach((e=>i.push(e))),a.label&&fr(a.label).forEach((e=>i.push(e))),i}(e))).forEach((e=>r.push(e)));break;case Ln.MANUAL_RECTANGLE:case Ln.MANUAL_PATH:case Ln.MANUAL_POINT:null!==(n=null===(i=o.predefinedSelections)||void 0===i?void 0:i.length)&&void 0!==n&&n&&r.push([\"validation.preset.map_modes.predefined_selections.not_applicable\",\"{0}\",Ln[o.selectionType]])}return t.service_call_schema&&function(e){return e.service?e.service.includes(\".\")?[]:[[\"validation.preset.map_modes.service_call_schema.service.invalid\",\"{0}\",e.service]]:[\"validation.preset.map_modes.service_call_schema.service.missing\"]}(t.service_call_schema).forEach((e=>r.push(e))),r}function yr(e,t,a){var i,n,r,o;const l=[],s=new Map([[\"entity\",\"validation.preset.entity.missing\"],[\"map_source\",\"validation.preset.map_source.missing\"],[\"calibration_source\",\"validation.preset.calibration_source.missing\"]]),c=Object.keys(e);var d,u;s.forEach(((e,t)=>{c.includes(t)||l.push(e)})),e.map_source&&(d=e.map_source,d.camera||d.image?d.camera&&d.image?[\"validation.preset.map_source.ambiguous\"]:[]:[\"validation.preset.map_source.none_provided\"]).forEach((e=>l.push(e))),e.calibration_source&&(u=e.calibration_source,Object.keys(u).filter((e=>\"attribute\"!=e)).length>1?[\"validation.preset.calibration_source.ambiguous\"]:u.calibration_points?[3,4].includes(u.calibration_points.length)?u.calibration_points.flatMap((e=>function(e){const t=[];return(null==e?void 0:e.map)||t.push(\"validation.preset.calibration_source.calibration_points.missing_map\"),(null==e?void 0:e.vacuum)||t.push(\"validation.preset.calibration_source.calibration_points.missing_vacuum\"),[null==e?void 0:e.map,null==e?void 0:e.vacuum].filter((e=>void 0===e.x||void 0===e.y)).length>0&&t.push(\"validation.preset.calibration_source.calibration_points.missing_coordinate\"),t}(e))):[\"validation.preset.calibration_source.calibration_points.invalid_number\"]:[]).forEach((e=>l.push(e))),e.vacuum_platform&&!wn.getPlatforms().includes(e.vacuum_platform)&&l.push([\"validation.preset.platform.invalid\",\"{0}\",e.vacuum_platform]);const m=null!==(i=e.vacuum_platform)&&void 0!==i?i:\"default\";return(null!==(n=e.icons)&&void 0!==n?n:[]).flatMap((e=>function(e){if(!e)return[\"validation.preset.icons.invalid\"];const t=[];return e.icon||t.push(\"validation.preset.icons.icon.missing\"),t}(e))).forEach((e=>l.push(e))),(null!==(r=e.tiles)&&void 0!==r?r:[]).flatMap((e=>function(e){if(!e)return[\"validation.preset.tiles.invalid\"];const t=[];return e.entity||t.push(\"validation.preset.tiles.entity.missing\"),e.label||t.push(\"validation.preset.tiles.label.missing\"),t}(e))).forEach((e=>l.push(e))),(null!==(o=e.map_modes)&&void 0!==o?o:[]).flatMap((e=>br(m,e,a))).forEach((e=>l.push(e))),!e.preset_name&&t&&l.push(\"validation.preset.preset_name.missing\"),l}class kr{static generate(e,t,a,i){if(!e)return new Promise((e=>e([])));const n=wn.usesSensors(e,a),r=e.states[t],o=[];return r?(o.push(...this.getCommonTiles(r,t,i)),n?this.addTilesFromSensors(e,t,a,o,i):new Promise((e=>e(this.addTilesFromAttributes(r,t,a,o,i))))):new Promise((e=>e(o)))}static getCommonTiles(e,t,a){const i=[];return\"status\"in e.attributes&&i.push({entity:t,label:Zi(\"tile.status.label\",a),attribute:\"status\",icon:\"mdi:robot-vacuum\",translations:this.generateTranslationKeys([\"Starting\",\"Charger disconnected\",\"Idle\",\"Remote control active\",\"Cleaning\",\"Returning home\",\"Manual mode\",\"Charging\",\"Charging problem\",\"Paused\",\"Spot cleaning\",\"Error\",\"Shutting down\",\"Updating\",\"Docking\",\"Going to target\",\"Zoned cleaning\",\"Segment cleaning\",\"Emptying the bin\",\"Charging complete\",\"Device offline\"],\"status\",a)}),\"battery_level\"in e.attributes&&\"battery_icon\"in e.attributes&&i.push({entity:t,label:Zi(\"tile.battery_level.label\",a),attribute:\"battery_level\",icon:e.attributes.battery_icon,unit:\"%\"}),\"battery_level\"in e.attributes&&!(\"battery_icon\"in e.attributes)&&i.push({entity:t,label:Zi(\"tile.battery_level.label\",a),attribute:\"battery_level\",icon:\"mdi:battery\",unit:\"%\"}),\"fan_speed\"in e.attributes&&i.push({entity:t,label:Zi(\"tile.fan_speed.label\",a),attribute:\"fan_speed\",icon:\"mdi:fan\",translations:this.generateTranslationKeys([\"Silent\",\"Standard\",\"Medium\",\"Turbo\",\"Auto\",\"Gentle\"],\"fan_speed\",a)}),i}static addTilesFromAttributes(e,t,a,i,n){return wn.getTilesFromAttributesTemplates(a).filter((t=>t.attribute in e.attributes)).forEach((e=>i.push({entity:t,label:Zi(e.label,n),attribute:e.attribute,icon:e.icon,unit:e.unit?Zi(e.unit,n):void 0,precision:e.precision,multiplier:e.multiplier}))),i}static async addTilesFromSensors(e,t,a,i,n){const r=(await async function(e,t){const a=(await e.callWS({type:\"entity/source\",entity_id:[t]}))[t].config_entry,i=(await e.callWS({type:\"config/entity_registry/list\"})).filter((e=>e.config_entry_id===a));return Promise.all(i.map((t=>e.callWS({type:\"config/entity_registry/get\",entity_id:t.entity_id}))))}(e,t)).filter((e=>null===e.disabled_by)),o=r.filter((e=>e.entity_id===t))[0].unique_id;return wn.getTilesFromSensorsTemplates(a).map((e=>({tile:e,entity:r.filter((t=>t.unique_id===`${e.unique_id_prefix}${o}`))}))).flatMap((e=>e.entity.map((t=>this.mapToTile(t,e.tile.label,e.tile.unit,e.tile.multiplier,n))))).forEach((e=>i.push(e))),new Promise((e=>e(i)))}static mapToTile(e,t,a,i,n){var r;return{entity:e.entity_id,label:Zi(t,n),icon:null!==(r=e.icon)&&void 0!==r?r:e.original_icon,multiplier:i||void 0,precision:i?1:void 0,unit:a?Zi(a,n):void 0}}static generateTranslationKeys(e,t,a){const i={};return e.forEach((e=>{const n=Zi(`tile.${t}.value.${e}`,a,\"\");n&&(i[e]=n)})),i}}class Ar{static generate(e,t,a){var i;if(!e)return[];const n=e.states[t],r=n&&n.attributes,o=[];this.isFeatureSupported(n,8192)&&o.push({icon:\"mdi:play\",conditions:[{entity:t,value_not:\"cleaning\"},{entity:t,value_not:\"error\"},{entity:t,value_not:\"returning\"}],tooltip:Zi(\"icon.vacuum_start\",a),tap_action:{action:\"call-service\",service:\"vacuum.start\",service_data:{entity_id:t}}}),this.isFeatureSupported(n,4)&&o.push({icon:\"mdi:pause\",conditions:[{entity:t,value_not:\"docked\"},{entity:t,value_not:\"idle\"},{entity:t,value_not:\"error\"},{entity:t,value_not:\"paused\"}],tooltip:Zi(\"icon.vacuum_pause\",a),tap_action:{action:\"call-service\",service:\"vacuum.pause\",service_data:{entity_id:t}}}),this.isFeatureSupported(n,8)&&o.push({icon:\"mdi:stop\",conditions:[{entity:t,value_not:\"docked\"},{entity:t,value_not:\"idle\"},{entity:t,value_not:\"error\"},{entity:t,value_not:\"paused\"}],tooltip:Zi(\"icon.vacuum_stop\",a),tap_action:{action:\"call-service\",service:\"vacuum.stop\",service_data:{entity_id:t}}}),this.isFeatureSupported(n,16)&&o.push({icon:\"mdi:home-map-marker\",conditions:[{entity:t,value_not:\"docked\"},{entity:t,value_not:\"returning\"}],tooltip:Zi(\"icon.vacuum_return_to_base\",a),tap_action:{action:\"call-service\",service:\"vacuum.return_to_base\",service_data:{entity_id:t}}}),this.isFeatureSupported(n,1024)&&o.push({icon:\"mdi:target-variant\",conditions:[{entity:t,value_not:\"docked\"},{entity:t,value_not:\"error\"},{entity:t,value_not:\"cleaning\"},{entity:t,value_not:\"returning\"}],tooltip:Zi(\"icon.vacuum_clean_spot\",a),tap_action:{action:\"call-service\",service:\"vacuum.clean_spot\",service_data:{entity_id:t}}}),this.isFeatureSupported(n,512)&&o.push({icon:\"mdi:map-marker\",tooltip:Zi(\"icon.vacuum_locate\",a),tap_action:{action:\"call-service\",service:\"vacuum.locate\",service_data:{entity_id:t}}});const l=r&&null!==(i=n.attributes.fan_speed_list)&&void 0!==i?i:[];for(let e=0;e<l.length;e++){const i=l[e],n=l[(e+1)%l.length];o.push({icon:i in this._ICON_MAPPING?this._ICON_MAPPING[i]:\"mdi:fan-alert\",conditions:[{entity:t,attribute:\"fan_speed\",value:i}],tooltip:Zi(\"icon.vacuum_set_fan_speed\",a),tap_action:{action:\"call-service\",service:\"vacuum.set_fan_speed\",service_data:{entity_id:t,fan_speed:n}}})}return 0!=l.length&&o.push({icon:\"mdi:fan-alert\",conditions:l.map((e=>({entity:t,attribute:\"fan_speed\",value_not:e}))),tooltip:Zi(\"icon.vacuum_set_fan_speed\",a),tap_action:{action:\"call-service\",service:\"vacuum.set_fan_speed\",service_data:{entity_id:t,fan_speed:l[0]}}}),o}static isFeatureSupported(e,t){var a;return e&&e.attributes&&((null!==(a=e.attributes.supported_features)&&void 0!==a?a:0)&t)===t}}Ar._ICON_MAPPING={Silent:\"mdi:fan-remove\",Standard:\"mdi:fan-speed-1\",Medium:\"mdi:fan-speed-2\",Turbo:\"mdi:fan-speed-3\",Auto:\"mdi:fan-auto\",Gentle:\"mdi:waves\"};class xr{static render(e,t){var a,i,n,r;let o=e.attribute?t.hass.states[e.entity].attributes[e.attribute]:t.hass.states[e.entity].state;\"number\"!=typeof o&&isNaN(+o)||(o=parseFloat(o.toString())*(null!==(a=e.multiplier)&&void 0!==a?a:1),null!=e.precision&&(o=o.toFixed(e.precision)));const l=null!==(i=e.translations)&&void 0!==i?i:{};return o in l&&(o=l[o]),N`\n            <div\n                class=\"tile-wrapper clickable ripple\"\n                .title=${null!==(n=e.tooltip)&&void 0!==n?n:\"\"}\n                @action=${Yn(t,e)}\n                .actionHandler=${$n({hasHold:me(null==e?void 0:e.hold_action),hasDoubleClick:me(null==e?void 0:e.double_tap_action)})}>\n                <div class=\"tile-title\">${e.label}</div>\n                <div class=\"tile-value-wrapper\">\n                    ${Bn(!!e.icon,(()=>N` <div class=\"tile-icon\">\n                            <ha-icon icon=\"${e.icon}\"></ha-icon>\n                        </div>`))}\n                    <div class=\"tile-value\">${o}${null!==(r=e.unit)&&void 0!==r?r:\"\"}</div>\n                </div>\n            </div>\n        `}static get styles(){return r`\n            .tile-wrapper {\n                min-width: fit-content;\n                width: 80px;\n                padding: 10px;\n                border-radius: var(--map-card-internal-small-radius);\n                background-color: var(--map-card-internal-tertiary-color);\n                flex-grow: 1;\n                overflow: hidden;\n                color: var(--map-card-internal-tertiary-text-color);\n            }\n\n            .tile-title {\n                font-size: smaller;\n            }\n\n            .tile-value-wrapper {\n                display: inline-flex;\n                align-items: flex-end;\n                padding-top: 5px;\n            }\n\n            .tile-icon {\n                padding-right: 5px;\n            }\n\n            .tile-value {\n            }\n        `}}class zr{static render(e,t){var a;return N`\n            <paper-button\n                class=\"vacuum-actions-item clickable ripple\"\n                .title=${null!==(a=e.tooltip)&&void 0!==a?a:\"\"}\n                @action=${Yn(t,e)}\n                .actionHandler=${$n({hasHold:me(null==e?void 0:e.hold_action),hasDoubleClick:me(null==e?void 0:e.double_tap_action)})}>\n                <ha-icon icon=\"${e.icon}\"></ha-icon>\n            </paper-button>\n        `}static get styles(){return r`\n            .vacuum-actions-item {\n                float: left;\n                width: 50px;\n                height: 50px;\n                display: flex;\n                justify-content: center;\n                align-items: center;\n                background-color: transparent;\n            }\n        `}}class Er{static render(){return N`\n            <div id=\"toast\">\n                <div id=\"toast-icon\">\n                    <ha-icon icon=\"mdi:check\" style=\"vertical-align: center\"></ha-icon>\n                </div>\n                <div id=\"toast-text\">Success!</div>\n            </div>\n        `}static get styles(){return r`\n            #toast {\n                visibility: hidden;\n                display: inline-flex;\n                width: calc(100% - 60px);\n                min-height: 50px;\n                color: var(--primary-text-color);\n                text-align: center;\n                border-radius: var(--map-card-internal-small-radius);\n                padding-inline-start: 30px;\n                position: absolute;\n                z-index: 1;\n                bottom: 30px;\n                font-size: 17px;\n            }\n\n            #toast #toast-icon {\n                display: flex;\n                justify-content: center;\n                align-items: center;\n                width: 50px;\n                background-color: var(--map-card-internal-primary-color);\n                border-start-start-radius: var(--map-card-internal-small-radius);\n                border-end-start-radius: var(--map-card-internal-small-radius);\n                color: #0f0;\n            }\n\n            #toast #toast-text {\n                box-sizing: border-box;\n                display: flex;\n                align-items: center;\n                padding-left: 10px;\n                padding-right: 10px;\n                -moz-box-sizing: border-box;\n                -webkit-box-sizing: border-box;\n                background-color: var(--paper-listbox-background-color);\n                color: var(--primary-text-color);\n                vertical-align: middle;\n                overflow: hidden;\n                border-color: var(--map-card-internal-primary-color);\n                border-style: solid;\n                border-width: 1px;\n                border-start-end-radius: var(--map-card-internal-small-radius);\n                border-end-end-radius: var(--map-card-internal-small-radius);\n            }\n\n            #toast.show {\n                visibility: visible;\n                -webkit-animation: fadein 0.5s, stay 1s 1s, fadeout 0.5s 1.5s;\n                animation: fadein 0.5s, stay 1s 1s, fadeout 0.5s 1.5s;\n            }\n\n            @-webkit-keyframes fadein {\n                from {\n                    bottom: 0;\n                    opacity: 0;\n                }\n                to {\n                    bottom: 30px;\n                    opacity: 1;\n                }\n            }\n            @keyframes fadein {\n                from {\n                    bottom: 0;\n                    opacity: 0;\n                }\n                to {\n                    bottom: 30px;\n                    opacity: 1;\n                }\n            }\n            @-webkit-keyframes stay {\n            }\n            @keyframes stay {\n            }\n            @-webkit-keyframes fadeout {\n                from {\n                    bottom: 30px;\n                    opacity: 1;\n                }\n                to {\n                    bottom: 60px;\n                    opacity: 0;\n                }\n            }\n            @keyframes fadeout {\n                from {\n                    bottom: 30px;\n                    opacity: 1;\n                }\n                to {\n                    bottom: 60px;\n                    opacity: 0;\n                }\n            }\n        `}}class wr{static render(e,t,a){const i=()=>e[t];return N`\n            <ha-button-menu class=\"modes-dropdown-menu\">\n                <div class=\"modes-dropdown-menu-button\" slot=\"trigger\" alt=\"bottom align\">\n                    <paper-button class=\"modes-dropdown-menu-button-button\">\n                        <ha-icon icon=\"${i().icon}\" class=\"dropdown-icon\"></ha-icon>\n                    </paper-button>\n                    <div class=\"modes-dropdown-menu-button-text\">${i().name}</div>\n                </div>\n                ${e.map(((i,n)=>N`<mwc-list-item\n                        ?activated=${t===n}\n                        @click=${()=>a(n)}>\n                            <div class=\"modes-dropdown-menu-entry clickable ${t===n?\"selected\":\"\"}\">\n                                <div\n                                    class=\"modes-dropdown-menu-entry-button-wrapper ${0===n?\"first\":\"\"} ${n===e.length-1?\"last\":\"\"} ${t===n?\"selected\":\"\"}\">\n                                    <paper-button\n                                        class=\"modes-dropdown-menu-entry-button ${t===n?\"selected\":\"\"}\">\n                                        <ha-icon icon=\"${i.icon}\"></ha-icon>\n                                    </paper-button>\n                                </div>\n                                <div class=\"modes-dropdown-menu-entry-text\">${i.name}</div>\n                            </div>\n                    </mwc-list-item>`))}\n            </ha-button-menu>\n        `}static get styles(){return r`\n            .modes-dropdown-menu {\n                --mdc-menu-item-height: 50px;\n                --mdc-theme-primary: transparent;\n                --mdc-list-vertical-padding: 0px;\n                --mdc-list-side-padding: 0px;\n                --mdc-shape-medium: var(--map-card-internal-big-radius);\n                --mdc-ripple-color: transparent;\n            }\n\n            .modes-dropdown-menu-button {\n                display: inline-flex;\n            }\n\n            .modes-dropdown-menu-button-button {\n                width: 50px;\n                height: 50px;\n                border-radius: var(--map-card-internal-big-radius);\n                display: flex;\n                justify-content: center;\n                background-color: var(--map-card-internal-primary-color);\n                align-items: center;\n            }\n\n            .modes-dropdown-menu-button-text {\n                display: inline-flex;\n                line-height: 50px;\n                background-color: transparent;\n                padding-left: 10px;\n                padding-right: 15px;\n            }\n\n            .modes-dropdown-menu-entry {\n                display: inline-flex;\n                width: 100%;\n            }\n\n            .modes-dropdown-menu-entry.selected {\n                border-radius: var(--map-card-internal-big-radius);\n                background-color: var(--map-card-internal-primary-color);\n                color: var(--map-card-internal-primary-text-color);\n            }\n\n            .modes-dropdown-menu-entry-button-wrapper.first:not(.selected) {\n                border-top-left-radius: var(--map-card-internal-big-radius);\n                border-top-right-radius: var(--map-card-internal-big-radius);\n            }\n\n            .modes-dropdown-menu-entry-button-wrapper.last:not(.selected) {\n                border-bottom-left-radius: var(--map-card-internal-big-radius);\n                border-bottom-right-radius: var(--map-card-internal-big-radius);\n            }\n\n            .modes-dropdown-menu-entry-button.selected {\n                border-start-start-radius: var(--map-card-internal-big-radius);\n                border-end-start-radius: var(--map-card-internal-big-radius);\n                background-color: var(--map-card-internal-primary-color);\n                color: var(--map-card-internal-primary-text-color);\n            }\n\n            .modes-dropdown-menu-entry-button-wrapper {\n                background-color: var(--map-card-internal-secondary-color);\n                color: var(--map-card-internal-secondary-text-color);\n                overflow: hidden;\n            }\n\n            .modes-dropdown-menu-entry-button {\n                width: 50px;\n                height: 50px;\n                display: flex;\n                justify-content: center;\n                align-items: center;\n                background-color: var(--map-card-internal-secondary-color);\n                color: var(--map-card-internal-secondary-text-color);\n            }\n\n            .modes-dropdown-menu-entry-text {\n                display: inline-flex;\n                line-height: 50px;\n                background-color: transparent;\n                padding-left: 10px;\n                padding-right: 15px;\n            }\n\n            .modes-dropdown-menu-listbox {\n                padding: 0;\n                background-color: transparent;\n            }\n        `}}function Sr(e,t){return Array.isArray(t)?[e.a*t[0]+e.c*t[1]+e.e,e.b*t[0]+e.d*t[1]+e.f]:{x:e.a*t.x+e.c*t.y+e.e,y:e.b*t.x+e.d*t.y+e.f}}function Pr(...e){const t=(e,t)=>({a:e.a*t.a+e.c*t.b,c:e.a*t.c+e.c*t.d,e:e.a*t.e+e.c*t.f+e.e,b:e.b*t.a+e.d*t.b,d:e.b*t.c+e.d*t.d,f:e.b*t.e+e.d*t.f+e.f});switch((e=Array.isArray(e[0])?e[0]:e).length){case 0:throw new Error(\"no matrices provided\");case 1:return e[0];case 2:return t(e[0],e[1]);default:{const[a,i,...n]=e;return Pr(t(a,i),...n)}}}function Mr(e,t){const a=null!=e[0].x?e[0].x:e[0][0],i=null!=e[0].y?e[0].y:e[0][1],n=null!=t[0].x?t[0].x:t[0][0],r=null!=t[0].y?t[0].y:t[0][1],o=null!=e[1].x?e[1].x:e[1][0],l=null!=e[1].y?e[1].y:e[1][1],s=null!=t[1].x?t[1].x:t[1][0],c=null!=t[1].y?t[1].y:t[1][1],d=null!=e[2].x?e[2].x:e[2][0],u=null!=e[2].y?e[2].y:e[2][1],m=null!=t[2].x?t[2].x:t[2][0],p=null!=t[2].y?t[2].y:t[2][1],_={a:n-m,b:r-p,c:s-m,d:c-p,e:m,f:p},g=function(e){const{a:t,b:a,c:i,d:n,e:r,f:o}=e,l=t*n-a*i;return{a:n/l,b:a/-l,c:i/-l,d:t/l,e:(n*r-i*o)/-l,f:(a*r-t*o)/l}}({a:a-d,b:i-u,c:o-d,d:l-u,e:d,f:u});return function(e,t=1e10){return{a:Math.round(e.a*t)/t,b:Math.round(e.b*t)/t,c:Math.round(e.c*t)/t,d:Math.round(e.d*t)/t,e:Math.round(e.e*t)/t,f:Math.round(e.f*t)/t}}(Pr([_,g]))}function Cr(e,t,a,i){this.message=e,this.expected=t,this.found=a,this.location=i,this.name=\"SyntaxError\",\"function\"==typeof Error.captureStackTrace&&Error.captureStackTrace(this,Cr)}!function(e,t){function a(){this.constructor=e}a.prototype=t.prototype,e.prototype=new a}(Cr,Error),Cr.buildMessage=function(e,t,a){var i={literal:function(e){return'\"'+r(e.text)+'\"'},class:function(e){var t=e.parts.map((function(e){return Array.isArray(e)?o(e[0])+\"-\"+o(e[1]):o(e)}));return\"[\"+(e.inverted?\"^\":\"\")+t+\"]\"},any:function(){return\"any character\"},end:function(){return\"end of input\"},other:function(e){return e.description},not:function(e){return\"not \"+l(e.expected)}};function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}function r(e){return e.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,'\\\\\"').replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,(function(e){return\"\\\\x0\"+n(e)})).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,(function(e){return\"\\\\x\"+n(e)}))}function o(e){return e.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\]/g,\"\\\\]\").replace(/\\^/g,\"\\\\^\").replace(/-/g,\"\\\\-\").replace(/\\0/g,\"\\\\0\").replace(/\\t/g,\"\\\\t\").replace(/\\n/g,\"\\\\n\").replace(/\\r/g,\"\\\\r\").replace(/[\\x00-\\x0F]/g,(function(e){return\"\\\\x0\"+n(e)})).replace(/[\\x10-\\x1F\\x7F-\\x9F]/g,(function(e){return\"\\\\x\"+n(e)}))}function l(e){return i[e.type](e)}return\"Expected \"+function(e){var t,a,i=e.map(l);if(i.sort(),i.length>0){for(t=1,a=1;t<i.length;t++)i[t-1]!==i[t]&&(i[a]=i[t],a++);i.length=a}switch(i.length){case 1:return i[0];case 2:return i[0]+\" or \"+i[1];default:return i.slice(0,-1).join(\", \")+\", or \"+i[i.length-1]}}(e)+\" but \"+function(e){return e?'\"'+r(e)+'\"':\"end of input\"}(t)+\" found.\"};var Tr,$r,Nr,Rr=(Tr=function(e,t){function a(e){var t;return\"object\"==typeof e?\"object\"==typeof(t=e[0])?[e.length,t.length]:[e.length]:[]}function i(e,t,a,n){if(a===t.length-1)return n(e);var r,o=t[a],l=Array(o);for(r=o-1;r>=0;r--)l[r]=i(e[r],t,a+1,n);return l}function n(e){var t,a=e.length,i=Array(a);for(t=a-1;-1!==t;--t)i[t]=e[t];return i}function r(e){if(\"object\"!=typeof e)return e;var t=n;return i(e,a(e),0,t)}function o(e,t,a){void 0===a&&(a=0);var i,n=e[a],r=Array(n);if(a===e.length-1){for(i=n-2;i>=0;i-=2)r[i+1]=t,r[i]=t;return-1===i&&(r[0]=t),r}for(i=n-1;i>=0;i--)r[i]=o(e,t,a+1);return r}function l(e){return function(e){var t,a,i,n,r=e.length,o=Array(r);for(t=r-1;t>=0;t--){for(n=Array(r),a=t+2,i=r-1;i>=a;i-=2)n[i]=0,n[i-1]=0;for(i>t&&(n[i]=0),n[t]=e[t],i=t-1;i>=1;i-=2)n[i]=0,n[i-1]=0;0===i&&(n[0]=0),o[t]=n}return o}(o([e],1))}function s(e,t){var a,i,n,r,o,l,s,c,d,u,m;for(r=e.length,o=t.length,l=t[0].length,s=Array(r),a=r-1;a>=0;a--){for(c=Array(l),d=e[a],n=l-1;n>=0;n--){for(u=d[o-1]*t[o-1][n],i=o-2;i>=1;i-=2)m=i-1,u+=d[i]*t[i][n]+d[m]*t[m][n];0===i&&(u+=d[0]*t[0][n]),c[n]=u}s[a]=c}return s}function c(e,t){var a,i,n=e.length,r=e[n-1]*t[n-1];for(a=n-2;a>=1;a-=2)i=a-1,r+=e[a]*t[a]+e[i]*t[i];return 0===a&&(r+=e[0]*t[0]),r}function d(e){var t,a,i,n,r,o=e.length,l=e[0].length,s=Array(l);for(a=0;a<l;a++)s[a]=Array(o);for(t=o-1;t>=1;t-=2){for(n=e[t],i=e[t-1],a=l-1;a>=1;--a)(r=s[a])[t]=n[a],r[t-1]=i[a],(r=s[--a])[t]=n[a],r[t-1]=i[a];0===a&&((r=s[0])[t]=n[0],r[t-1]=i[0])}if(0===t){for(i=e[0],a=l-1;a>=1;--a)s[a][0]=i[a],s[--a][0]=i[a];0===a&&(s[0][0]=i[0])}return s}function u(e,t,i){if(i){var n=t;t=e,e=n}var o,u=[[e[0],e[1],1,0,0,0,-1*t[0]*e[0],-1*t[0]*e[1]],[0,0,0,e[0],e[1],1,-1*t[1]*e[0],-1*t[1]*e[1]],[e[2],e[3],1,0,0,0,-1*t[2]*e[2],-1*t[2]*e[3]],[0,0,0,e[2],e[3],1,-1*t[3]*e[2],-1*t[3]*e[3]],[e[4],e[5],1,0,0,0,-1*t[4]*e[4],-1*t[4]*e[5]],[0,0,0,e[4],e[5],1,-1*t[5]*e[4],-1*t[5]*e[5]],[e[6],e[7],1,0,0,0,-1*t[6]*e[6],-1*t[6]*e[7]],[0,0,0,e[6],e[7],1,-1*t[7]*e[6],-1*t[7]*e[7]]],m=t;try{o=function(e){var t,i,n,o,s,c,d,u,m=a(e),p=Math.abs,_=m[0],g=m[1],v=r(e),h=l(_);for(c=0;c<g;++c){var f=-1,b=-1;for(s=c;s!==_;++s)(d=p(v[s][c]))>b&&(f=s,b=d);for(i=v[f],v[f]=v[c],v[c]=i,o=h[f],h[f]=h[c],h[c]=o,u=i[c],d=c;d!==g;++d)i[d]/=u;for(d=g-1;-1!==d;--d)o[d]/=u;for(s=_-1;-1!==s;--s)if(s!==c){for(t=v[s],n=h[s],u=t[c],d=c+1;d!==g;++d)t[d]-=i[d]*u;for(d=g-1;d>0;--d)n[d]-=o[d]*u,n[--d]-=o[d]*u;0===d&&(n[0]-=o[0]*u)}}return h}(s(d(u),u))}catch(e){return[1,0,0,0,1,0,0,0]}for(var p,_=function(e,t){var a,i=e.length,n=Array(i);for(a=i-1;a>=0;a--)n[a]=c(e[a],t);return n}(s(o,d(u)),m),g=0;g<_.length;g++)_[g]=(p=_[g],Math.round(1e10*p)/1e10);return _[8]=1,_}Object.defineProperty(t,\"__esModule\",{value:!0}),t.default=function(e,t){var a=u(e,t,!1);return function(e,t){return function(e,t,a){var i=[];return i[0]=(e[0]*t+e[1]*a+e[2])/(e[6]*t+e[7]*a+1),i[1]=(e[3]*t+e[4]*a+e[5])/(e[6]*t+e[7]*a+1),i}(a,e,t)}}},Tr($r={exports:{}},$r.exports),$r.exports),jr=function(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,\"default\")?e.default:e}(Rr);!function(e){e[e.AFFINE=0]=\"AFFINE\",e[e.PERSPECTIVE=1]=\"PERSPECTIVE\"}(Nr||(Nr={}));class Or{constructor(e){const t=null==e?void 0:e.map((e=>e.map)),a=null==e?void 0:e.map((e=>e.vacuum));if(t&&a)if(3===t.length)this.transformMode=Nr.AFFINE,this.mapToVacuumMatrix=Mr(t,a),this.vacuumToMapMatrix=Mr(a,t),this.calibrated=!(!this.mapToVacuumMatrix||!this.vacuumToMapMatrix);else{this.transformMode=Nr.PERSPECTIVE;const e=t.flatMap((e=>[e.x,e.y])),i=a.flatMap((e=>[e.x,e.y]));this.mapToVacuumTransformer=jr(e,i),this.vacuumToMapTransformer=jr(i,e),this.calibrated=!0}else this.calibrated=!1}mapToVacuum(e,t){if(this.transformMode===Nr.AFFINE&&this.mapToVacuumMatrix)return Sr(this.mapToVacuumMatrix,[e,t]);if(this.transformMode===Nr.PERSPECTIVE&&this.mapToVacuumTransformer)return this.mapToVacuumTransformer(e,t);throw Error(\"Missing calibration\")}vacuumToMap(e,t){if(this.transformMode===Nr.AFFINE&&this.vacuumToMapMatrix)return Sr(this.vacuumToMapMatrix,[e,t]);if(this.transformMode===Nr.PERSPECTIVE&&this.vacuumToMapTransformer)return this.vacuumToMapTransformer(e,t);throw Error(\"Missing calibration\")}}const Lr=\"   XIAOMI-VACUUM-MAP-CARD\",Ir=`   ${Zi(\"common.version\")} v2.0.11`,Dr=Math.max(Lr.length,Ir.length)+3,Ur=(e,t)=>e+\" \".repeat(t-e.length);console.info(`%c${Ur(Lr,Dr)}\\n%c${Ur(Ir,Dr)}`,\"color: orange; font-weight: bold; background: black\",\"color: white; font-weight: bold; background: dimgray\");const Fr=window;Fr.customCards=Fr.customCards||[],Fr.customCards.push({type:\"xiaomi-vacuum-map-card\",name:\"Xiaomi Vacuum Map Card\",description:Zi(\"common.description\"),preview:!0});let Vr=class extends Q{constructor(){super(...arguments),this.oldConfig=!1,this.repeats=1,this.selectedMode=0,this.mapLocked=!1,this.configErrors=[],this.connected=!1,this.watchedEntities=[],this.selectedManualRectangles=[],this.selectedManualPath=new pr([],this._getContext()),this.selectedPredefinedRectangles=[],this.selectedRooms=[],this.selectedPredefinedPoint=[],this.selectablePredefinedRectangles=[],this.selectableRooms=[],this.selectablePredefinedPoints=[],this.modes=[]}static async getConfigElement(){return document.createElement(\"xiaomi-vacuum-map-card-editor\")}static getStubConfig(e){const t=Object.keys(e.states),a=t.filter((e=>\"camera\"===e.substr(0,e.indexOf(\".\")))).filter((t=>null==e?void 0:e.states[t].attributes.calibration_points)),i=t.filter((e=>\"vacuum\"===e.substr(0,e.indexOf(\".\"))));if(0!==a.length&&0!==i.length)return{type:\"custom:xiaomi-vacuum-map-card\",map_source:{camera:a[0]},calibration_source:{camera:!0},entity:i[0],vacuum_platform:\"default\"}}set hass(e){const t=!this._hass&&e;this._hass=e,this.lastHassUpdate=new Date,t&&this._firstHass()}get hass(){return this._hass}setConfig(e){if(!e)throw new Error(this._localize(\"common.invalid_configuration\"));this.config=e,function(e){return e.map_image||e.map_camera}(e)?this.oldConfig=!0:(this.configErrors=function(e){var t,a,i;const n=[],r=(null!==(a=null===(t=e.additional_presets)||void 0===t?void 0:t.length)&&void 0!==a?a:0)>0;return yr(e,r,e.language).forEach((e=>n.push(e))),null===(i=e.additional_presets)||void 0===i||i.flatMap((t=>yr(t,r,e.language))).forEach((e=>n.push(e))),n.map((t=>Zi(t,e.language)))}(this.config),this.configErrors.length>0||(this.watchedEntities=function(e){var t;const a=new Set;return[e,...null!==(t=e.additional_presets)&&void 0!==t?t:[]].flatMap((t=>[...Kn(t,e.language)])).forEach((e=>a.add(e))),[...a]}(this.config),this._setPresetIndex(0,!1,!0),this.requestUpdate(\"config\")))}getCardSize(){return 12}_getCurrentPreset(){return this.currentPreset}_getCalibration(e){var t,a,i,n,r,o,l;return e.calibration_source.identity?[{map:{x:0,y:0},vacuum:{x:0,y:0}},{map:{x:1,y:0},vacuum:{x:1,y:0}},{map:{x:0,y:1},vacuum:{x:0,y:1}}]:e.calibration_source.calibration_points&&[3,4].includes(e.calibration_source.calibration_points.length)?e.calibration_source.calibration_points:this.hass?e.calibration_source.entity&&!(null===(t=e.calibration_source)||void 0===t?void 0:t.attribute)?JSON.parse(null===(a=this.hass.states[e.calibration_source.entity])||void 0===a?void 0:a.state):e.calibration_source.entity&&(null===(i=e.calibration_source)||void 0===i?void 0:i.attribute)?null===(n=this.hass.states[e.calibration_source.entity])||void 0===n?void 0:n.attributes[e.calibration_source.attribute]:e.calibration_source.camera?null===(l=this.hass.states[null!==(o=null===(r=e.map_source)||void 0===r?void 0:r.camera)&&void 0!==o?o:\"\"])||void 0===l?void 0:l.attributes.calibration_points:void 0:void 0}_firstHass(){if(0===this.configErrors.length&&!this.oldConfig){const e=this._getAllPresets(),t=this._getAllAvailablePresets(),a=e.indexOf(t[0]);this._setPresetIndex(a,!1,!0)}}_getAllPresets(){var e;return[this.config,...null!==(e=this.config.additional_presets)&&void 0!==e?e:[]]}_getAllAvailablePresets(){const e=this._getAllPresets(),t=e.filter((e=>{var t,a;return 0===(null!==(a=null===(t=e.conditions)||void 0===t?void 0:t.length)&&void 0!==a?a:0)||qn(e,this.hass)}));return 0===t.length?[e[0]]:t}_getPreviousPresetIndex(){const e=this._getAllPresets(),t=e.filter(((e,t)=>{var a,i;return t<this.presetIndex&&(0===(null!==(i=null===(a=e.conditions)||void 0===a?void 0:a.length)&&void 0!==i?i:0)||qn(e,this.hass))}));return 0==t.length?-1:e.indexOf(t[t.length-1])}_getNextPresetIndex(){const e=this._getAllPresets(),t=e.filter(((e,t)=>{var a,i;return t>this.presetIndex&&(0===(null!==(i=null===(a=e.conditions)||void 0===a?void 0:a.length)&&void 0!==i?i:0)||qn(e,this.hass))}));return 0==t.length?-1:e.indexOf(t[0])}_openPreviousPreset(){const e=this._getPreviousPresetIndex();e>=0&&this._setPresetIndex(e,!0)}_openNextPreset(){const e=this._getNextPresetIndex();e>=0&&this._setPresetIndex(e,!0)}_setPresetIndex(e,t=!1,a=!1){var i,n,r,o,l,s,c,d,u,m,p,_,g,v;if((e=Math.min(Math.max(e,0),null!==(n=null===(i=this.config.additional_presets)||void 0===i?void 0:i.length)&&void 0!==n?n:0))===this.presetIndex&&!a)return;const h=0===e?this.config:(null!==(r=this.config.additional_presets)&&void 0!==r?r:[])[e-1];this.mapLocked||null===(o=this._getPinchZoom())||void 0===o||o.setTransform({scale:1,x:0,y:0,allowChangeEvent:!0}),t&&de(\"selection\"),this.mapLocked=null!==(l=null==h?void 0:h.map_locked)&&void 0!==l&&l,this.selectedMode=0,this.realScale=1,this.mapScale=1,this.mapX=0,this.mapY=0,this.hass&&this._updateCalibration(h);const f=null!==(s=h.vacuum_platform)&&void 0!==s?s:\"default\";this.modes=(0===(null!==(d=null===(c=h.map_modes)||void 0===c?void 0:c.length)&&void 0!==d?d:0)?wn.generateDefaultModes(f):null!==(u=h.map_modes)&&void 0!==u?u:[]).map((e=>new Hn(f,e,this.config.language))),this.presetIndex=e,this.currentPreset=h;const b=-1===(null!==(p=null===(m=h.icons)||void 0===m?void 0:m.length)&&void 0!==p?p:-1)?Ar.generate(this.hass,h.entity,this.config.language):h.append_icons?[...Ar.generate(this.hass,h.entity,this.config.language),...null!==(_=h.icons)&&void 0!==_?_:[]]:h.icons,y=-1===(null!==(v=null===(g=h.tiles)||void 0===g?void 0:g.length)&&void 0!==v?v:-1)?kr.generate(this.hass,h.entity,f,this.config.language):h.append_tiles?kr.generate(this.hass,h.entity,f,this.config.language).then((e=>{var t;return[...e,...null!==(t=h.tiles)&&void 0!==t?t:[]]})):new Promise((e=>{var t;return e(null!==(t=h.tiles)&&void 0!==t?t:[])}));y.then((e=>this._setPreset(Object.assign(Object.assign({},h),{tiles:e,icons:b})))).then((()=>setTimeout((()=>this.requestUpdate()),100))).then((()=>this._setCurrentMode(0,!1))),t&&this.currentPreset.activate_on_switch&&this._executePresetsActivation()}_executePresetsActivation(){if(this.currentPreset.activate){const e=new Vn(this.currentPreset.activate).apply(this.currentPreset.entity,[],0,{});this.hass.callService(e.domain,e.service,e.serviceData,e.target).then((()=>de(\"success\")))}}_setPreset(e){this.currentPreset=e}_updateCalibration(e){this.coordinatesConverter=void 0;const t=this._getCalibration(e);this.coordinatesConverter=new Or(t)}_getMapSrc(e){if(e.map_source.camera){if(this.connected&&this.lastHassUpdate&&this.lastHassUpdate.getTime()+36e4>=(new Date).getTime()){return`${this.hass.hassUrl(this.hass.states[e.map_source.camera].attributes.entity_picture)}&v=${+new Date}`}return Sn}return e.map_source.image?`${e.map_source.image}`:Sn}shouldUpdate(e){return!!this.config&&function(e,t,a,i){if(t.has(\"config\")||a)return!0;const n=t.get(\"hass\");return!n||e.some((e=>n.states[e]!==(null==i?void 0:i.states[e])))}(this.watchedEntities,e,!1,this.hass)}render(){var e,t,a,i,n,r,o,l,s,c,d,u;if(this.oldConfig)return this._showOldConfig();if(this.configErrors.length>0)return this._showConfigErrors(this.configErrors);const m=function(e,t){const a=Object.keys(t.states);return e.filter((e=>!a.includes(e)))}(this.watchedEntities,this.hass);if(m.length>0)return this._showInvalidEntities(m);const p=\"rtl\"===(null===(e=getComputedStyle(this))||void 0===e?void 0:e.getPropertyValue(\"direction\"));let _=this._getCurrentPreset();const g=this._getAllPresets();let v=this._getAllAvailablePresets(),h=v.indexOf(g[this.presetIndex]);-1===h&&(this._firstHass(),_=this._getCurrentPreset(),v=this._getAllAvailablePresets(),h=v.indexOf(g[this.presetIndex])),this._updateCalibration(_);const f=_.tiles,b=_.icons,y=this.modes,k=this._getMapSrc(_),A=!!this.coordinatesConverter&&this.coordinatesConverter.calibrated,x=A?this._createMapControls():[],z=N`\n            <div\n                id=\"map-zoomer-content\"\n                style=\"\n                 margin-top: ${-1*(null!==(a=null===(t=_.map_source.crop)||void 0===t?void 0:t.top)&&void 0!==a?a:0)}px;\n                 margin-bottom: ${-1*(null!==(n=null===(i=_.map_source.crop)||void 0===i?void 0:i.bottom)&&void 0!==n?n:0)}px;\n                 margin-left: ${-1*(null!==(o=null===(r=_.map_source.crop)||void 0===r?void 0:r.left)&&void 0!==o?o:0)}px;\n                 margin-right: ${-1*(null!==(s=null===(l=_.map_source.crop)||void 0===l?void 0:l.right)&&void 0!==s?s:0)}px;\">\n                <img\n                    id=\"map-image\"\n                    alt=\"camera_image\"\n                    class=\"${this.mapScale*this.realScale>1?\"zoomed\":\"\"}\"\n                    src=\"${k}\"\n                    @load=\"${()=>this._calculateBasicScale()}\" />\n                <div id=\"map-image-overlay\">\n                    <svg\n                        xmlns=\"http://www.w3.org/2000/svg\"\n                        version=\"2.0\"\n                        id=\"svg-wrapper\"\n                        width=\"100%\"\n                        height=\"100%\"\n                        @mousedown=\"${e=>this._mouseDown(e)}\"\n                        @mousemove=\"${e=>this._mouseMove(e)}\"\n                        @mouseup=\"${e=>this._mouseUp(e)}\">\n                        ${A?this._drawSelection():null}\n                    </svg>\n                </div>\n            </div>\n        `;return N`\n            <ha-card style=\"--map-scale: ${this.mapScale}; --real-scale: ${this.realScale};\">\n                ${Bn((null!==(c=this.config.title)&&void 0!==c?c:\"\").length>0,(()=>N`<h1 class=\"card-header\">${this.config.title}</h1>`))}\n                ${Bn(v.length>1,(()=>N`\n                        <div class=\"preset-selector-wrapper\">\n                            <div\n                                class=\"preset-selector-icon-wrapper\"\n                                @click=\"${()=>this._openPreviousPreset()}\">\n                                <ha-icon\n                                    icon=\"mdi:chevron-${p?\"right\":\"left\"}\"\n                                    class=\"preset-selector-icon ${-1===this._getPreviousPresetIndex()?\"disabled\":\"\"}\">\n                                </ha-icon>\n                            </div>\n                            <div\n                                class=\"preset-label-wrapper ${_.activate?\"clickable\":\"\"}\"\n                                @click=\"${()=>this._executePresetsActivation()}\">\n                                <div class=\"preset-label\">${_.preset_name}</div>\n                                <div class=\"preset-indicator\">\n                                    ${new Array(v.length).fill(0).map(((e,t)=>t===h?\"●\":\"○\"))}\n                                </div>\n                            </div>\n                            <div class=\"preset-selector-icon-wrapper\" @click=\"${()=>this._openNextPreset()}\">\n                                <ha-icon\n                                    icon=\"mdi:chevron-${p?\"left\":\"right\"}\"\n                                    class=\"preset-selector-icon ${-1===this._getNextPresetIndex()?\"disabled\":\"\"}\">\n                                </ha-icon>\n                            </div>\n                        </div>\n                    `))}\n                <div class=\"map-wrapper\">\n                    <pinch-zoom\n                        min-scale=\"0.5\"\n                        id=\"map-zoomer\"\n                        @change=\"${this._calculateScale}\"\n                        two-finger-pan=\"${_.two_finger_pan}\"\n                        locked=\"${this.mapLocked}\"\n                        style=\"touch-action: none;\">\n                        ${z}\n                    </pinch-zoom>\n                    <div id=\"map-zoomer-overlay\">\n                        <div style=\"right: 0; top: 0; position: absolute;\">\n                            <ha-icon\n                                icon=\"${this.mapLocked?\"mdi:lock\":\"mdi:lock-open\"}\"\n                                class=\"standalone-icon-on-map clickable ripple\"\n                                @click=\"${this._toggleLock}\"></ha-icon>\n                        </div>\n                        <div class=\"map-zoom-icons\" style=\"visibility: ${this.mapLocked?\"hidden\":\"visible\"}\">\n                            <ha-icon\n                                icon=\"mdi:restore\"\n                                class=\"icon-on-map clickable ripple\"\n                                @click=\"${this._restoreMap}\"></ha-icon>\n                            <div class=\"map-zoom-icons-main\">\n                                <ha-icon\n                                    icon=\"mdi:magnify-minus\"\n                                    class=\"icon-on-map clickable ripple\"\n                                    @click=\"${this._zoomOut}\"></ha-icon>\n                                <ha-icon\n                                    icon=\"mdi:magnify-plus\"\n                                    class=\"icon-on-map clickable ripple\"\n                                    @click=\"${this._zoomIn}\"></ha-icon>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n                ${Bn(!A,(()=>this._showInvalidCalibrationWarning()))}\n                <div class=\"controls-wrapper\">\n                    ${Bn(A&&(y.length>1||x.length>0),(()=>N`\n                            <div class=\"map-controls-wrapper\">\n                                <div class=\"map-controls\">\n                                    ${Bn(y.length>1,(()=>wr.render(y,this.selectedMode,(e=>this._setCurrentMode(e)))))}\n                                    ${Bn(x.length>0,(()=>N` <div class=\"map-actions-list\">${x}</div> `))}\n                                </div>\n                            </div>\n                        `))}\n                    ${Bn(0!==(null!==(d=null==b?void 0:b.length)&&void 0!==d?d:0),(()=>N`\n                            <div class=\"vacuum-controls\">\n                                <div class=\"vacuum-actions-list\">\n                                    ${null==b?void 0:b.filter((e=>qn(e,this.hass))).map((e=>zr.render(e,this)))}\n                                </div>\n                            </div>\n                        `))}\n                    ${Bn(0!==(null!==(u=null==f?void 0:f.length)&&void 0!==u?u:0),(()=>N`\n                            <div class=\"tiles-wrapper\">\n                                ${null==f?void 0:f.filter((e=>qn(e,this.hass))).map((e=>xr.render(e,this)))}\n                            </div>\n                        `))}\n                </div>\n                ${Er.render()}\n            </ha-card>\n        `}_createMapControls(){const e=[],t=this._getCurrentMode();return t?(t.selectionType===Ln.MANUAL_RECTANGLE&&e.push(N`\n                <paper-button class=\"map-actions-item clickable ripple\" @click=\"${()=>this._addRectangle()}\">\n                    <ha-icon icon=\"mdi:plus\"></ha-icon>\n                </paper-button>\n            `),t.selectionType===Ln.MANUAL_PATH&&e.push(N`\n                <paper-button\n                    class=\"map-actions-item clickable ripple\"\n                    @click=\"${()=>{this.selectedManualPath.removeLast(),de(\"selection\"),this.requestUpdate()}}\">\n                    <ha-icon icon=\"mdi:undo-variant\"></ha-icon>\n                </paper-button>\n                <paper-button\n                    class=\"map-actions-item clickable ripple\"\n                    @click=\"${()=>{this.selectedManualPath.clear(),de(\"selection\"),this.requestUpdate()}}\">\n                    <ha-icon icon=\"mdi:delete-empty\"></ha-icon>\n                </paper-button>\n            `),t.repeatsType!==In.NONE&&e.push(N`\n                <paper-button\n                    class=\"map-actions-item clickable ripple\"\n                    @click=\"${()=>{this.repeats=this.repeats%t.maxRepeats+1,de(\"selection\")}}\">\n                    <div>×${this.repeats}</div>\n                </paper-button>\n            `),t.runImmediately||e.push(N`\n                <paper-button\n                    class=\"map-actions-item main clickable ripple\"\n                    @action=\"${this._handleRunAction()}\"\n                    .actionHandler=\"${$n({hasHold:!0,hasDoubleClick:!0})}\">\n                    <ha-icon icon=\"mdi:play\"></ha-icon>\n                    <ha-icon\n                        icon=\"${t.icon}\"\n                        style=\"position: absolute; transform: scale(0.5) translate(15px, -20px)\"></ha-icon>\n                </paper-button>\n            `),e):[]}_getContext(){return new cr((()=>this.mapScale),(()=>this.realScale),(e=>this._getMousePosition(e)),(()=>this.requestUpdate()),(()=>this.coordinatesConverter),(()=>this.selectedManualRectangles),(()=>this.selectedPredefinedRectangles),(()=>this.selectedRooms),(()=>this.selectedPredefinedPoint),(()=>this._getCurrentMode().coordinatesRounding),(()=>this._getCurrentMode().maxSelections),(e=>this._getCssProperty(e)),(()=>this._runImmediately()),(e=>this._localize(e)))}_getMousePosition(e){return Wn(e,this._getSvgWrapper(),this.mapScale)}_setCurrentMode(e,t=!0){const a=this.modes[e];switch(this.selectedManualRectangles=[],this.selectedManualPoint=void 0,this.selectedManualPath.clear(),this.selectedPredefinedRectangles=[],this.selectedRooms=[],this.selectedPredefinedPoint=[],this.selectablePredefinedRectangles=[],this.selectableRooms=[],this.selectablePredefinedPoints=[],null==a?void 0:a.selectionType){case Ln.PREDEFINED_RECTANGLE:const e=gr.getFromEntities(a,this.hass,(()=>this._getContext())),t=a.predefinedSelections.map((e=>e)).filter((e=>\"string\"!=typeof e.zones)).map((e=>new gr(e,this._getContext())));this.selectablePredefinedRectangles=e.concat(t);break;case Ln.ROOM:this.selectableRooms=a.predefinedSelections.map((e=>new vr(e,this._getContext())));break;case Ln.PREDEFINED_POINT:const i=_r.getFromEntities(a,this.hass,(()=>this._getContext())),n=a.predefinedSelections.map((e=>e)).filter((e=>\"string\"!=typeof e.position)).map((e=>new _r(e,this._getContext())));this.selectablePredefinedPoints=i.concat(n)}this.selectedMode!=e&&t&&de(\"selection\"),this.selectedMode=e}_getCurrentMode(){return this.modes[this.selectedMode]}_getSelection(e){var t,a;const i=e.repeatsType===In.INTERNAL?this.repeats:null;let n=[];switch(e.selectionType){case Ln.MANUAL_RECTANGLE:n=this.selectedManualRectangles.map((e=>e.toVacuum(i)));break;case Ln.PREDEFINED_RECTANGLE:n=this.selectedPredefinedRectangles.map((e=>e.toVacuum(i))).reduce(((e,t)=>e.concat(t)),[]);break;case Ln.ROOM:const e=this.selectedRooms.map((e=>e.toVacuum()));n=[...e,...i&&e.length>0?[i]:[]];break;case Ln.MANUAL_PATH:n=this.selectedManualPath.toVacuum(i);break;case Ln.MANUAL_POINT:n=null!==(a=null===(t=this.selectedManualPoint)||void 0===t?void 0:t.toVacuum(i))&&void 0!==a?a:[];break;case Ln.PREDEFINED_POINT:n=this.selectedPredefinedPoint.map((e=>e.toVacuum(i))).reduce(((e,t)=>e.concat(t)),[])}return e.repeatsType===In.REPEAT&&(n=Array(this.repeats).fill(0).flatMap((()=>n))),n}_runImmediately(){return!!this._getCurrentMode().runImmediately&&(this._run(!1),!0)}_run(e){var t,a;const i=this._getCurrentPreset(),n=this._getCurrentMode(),r=this._getSelection(n);if(0==r.length)this._showToast(\"popups.no_selection\",\"mdi:close\",!1),de(\"failure\");else{const a=this.repeats,o=n.getServiceCall(i.entity,r,a),l=JSON.stringify(o,null,2);e||null!==(t=this.config.debug)&&void 0!==t&&t?(this._showToast(\"popups.success\",\"mdi:check\",!0),console.log(l),window.alert(l),de(\"success\")):this.hass.callService(o.domain,o.service,o.serviceData,o.target).then((()=>{this._showToast(\"popups.success\",\"mdi:check\",!0),de(\"success\")}),(e=>{this._showToast(\"popups.failed\",\"mdi:close\",!1,e.message),de(\"failure\")}))}(null===(a=i.clean_selection_on_start)||void 0===a||a)&&this._setCurrentMode(this.selectedMode)}updated(e){this._updateElements()}connectedCallback(){super.connectedCallback(),this.connected=!0,this._updateElements(),this._delay(100).then((()=>this.requestUpdate()))}disconnectedCallback(){super.disconnectedCallback(),this.connected=!1}_updateElements(){var e,t,a;const i=null===(a=null===(t=null===(e=this.shadowRoot)||void 0===e?void 0:e.querySelector(\".modes-dropdown-menu\"))||void 0===t?void 0:t.shadowRoot)||void 0===a?void 0:a.querySelector(\".dropdown-content\");i&&(i.style.borderRadius=this._getCssProperty(\"--map-card-internal-big-radius\")),this._delay(100).then((()=>this._calculateBasicScale()))}_drawSelection(){var e,t,a;switch(null===(e=this._getCurrentMode())||void 0===e?void 0:e.selectionType){case Ln.MANUAL_RECTANGLE:return R`${this.selectedManualRectangles.map((e=>e.render()))}`;case Ln.PREDEFINED_RECTANGLE:return R`${this.selectablePredefinedRectangles.map((e=>e.render()))}`;case Ln.ROOM:return R`${this.selectableRooms.map((e=>e.render()))}`;case Ln.MANUAL_PATH:return R`${null===(t=this.selectedManualPath)||void 0===t?void 0:t.render()}`;case Ln.MANUAL_POINT:return R`${null===(a=this.selectedManualPoint)||void 0===a?void 0:a.render()}`;case Ln.PREDEFINED_POINT:return R`${this.selectablePredefinedPoints.map((e=>e.render()))}`;default:return null}}_toggleLock(){this.mapLocked=!this.mapLocked,de(\"selection\"),this._delay(500).then((()=>this.requestUpdate()))}_addRectangle(){var e,t,a,i,n,r,o,l;const s=this._getCurrentPreset(),c=null!==(t=null===(e=s.map_source.crop)||void 0===e?void 0:e.top)&&void 0!==t?t:0,d=null!==(i=null===(a=s.map_source.crop)||void 0===a?void 0:a.bottom)&&void 0!==i?i:0,u=null!==(r=null===(n=s.map_source.crop)||void 0===n?void 0:n.left)&&void 0!==r?r:0,m=null!==(l=null===(o=s.map_source.crop)||void 0===o?void 0:o.right)&&void 0!==l?l:0;if(this._calculateBasicScale(),this.selectedManualRectangles.length>=this._getCurrentMode().maxSelections)return void de(\"failure\");const p=this.realImageHeight*this.realScale-c-d,_=this.realImageWidth*this.realScale-u-m,g=(this.selectedManualRectangles.length+1).toString(),v=(_/3+u-this.mapX)/this.mapScale,h=(p/3+c-this.mapY)/this.mapScale,f=_/3/this.mapScale,b=p/3/this.mapScale;this.selectedManualRectangles.push(new sr(v,h,f,b,g,this._getContext())),de(\"selection\"),this.requestUpdate()}_mouseDown(e){e instanceof MouseEvent&&0!=e.button||(this.shouldHandleMouseUp=!0)}_mouseMove(e){e.target.classList.contains(\"draggable\")||(this.selectedManualRectangles.filter((e=>e.isSelected())).forEach((t=>t.externalDrag(e))),this.shouldHandleMouseUp=!1)}_mouseUp(e){if(!(e instanceof MouseEvent&&0!=e.button)&&this.shouldHandleMouseUp){const{x:t,y:a}=Wn(e,this._getSvgWrapper(),1);switch(this._getCurrentMode().selectionType){case Ln.MANUAL_PATH:de(\"selection\"),this.selectedManualPath.addPoint(t,a);break;case Ln.MANUAL_POINT:de(\"selection\"),this.selectedManualPoint=new ur(t,a,this._getContext());break;default:return}Gn(e),this.requestUpdate()}this.shouldHandleMouseUp=!1}_handleRunAction(){return e=>{if(this.hass&&e.detail.action)switch(e.detail.action){case\"tap\":this._run(!1);break;case\"hold\":this._run(!0);break;case\"double_tap\":console.log(JSON.stringify(Object.assign(Object.assign({},this._getCurrentPreset()),{additional_presets:void 0,title:void 0,type:void 0}),null,2)),window.alert(\"Configuration available in browser's console\"),de(\"success\")}}}_restoreMap(){const e=this._getMapZoomerContent();e.style.transitionDuration=this._getCssProperty(\"--map-card-internal-transitions-duration\"),this._getPinchZoom().setTransform({scale:1,x:0,y:0,allowChangeEvent:!0}),this.mapScale=1,de(\"selection\"),this._delay(300).then((()=>e.style.transitionDuration=\"0s\"))}_getCssProperty(e){return getComputedStyle(this._getMapImage()).getPropertyValue(e)}_zoomIn(){de(\"selection\"),this._updateScale(1.5)}_zoomOut(){de(\"selection\"),this._updateScale(1/1.5)}_updateScale(e){const t=this._getMapZoomerContent(),a=this._getPinchZoom(),i=this._getPinchZoom().getBoundingClientRect();this.mapScale=Math.max(this.mapScale*e,.5),t.style.transitionDuration=\"200ms\",a.scaleTo(this.mapScale,{originX:i.left+i.width/2,originY:i.top+i.height/2,relativeTo:\"container\",allowChangeEvent:!0}),this._delay(300).then((()=>t.style.transitionDuration=\"0s\"))}_calculateBasicScale(){const e=this._getMapImage();e&&e.naturalWidth>0&&(this.realImageWidth=e.naturalWidth,this.realImageHeight=e.naturalHeight,this.realScale=e.width/e.naturalWidth)}_calculateScale(){const e=this._getPinchZoom();this.mapScale=e.scale,this.mapX=e.x,this.mapY=e.y}_getPinchZoom(){var e;return null===(e=this.shadowRoot)||void 0===e?void 0:e.getElementById(\"map-zoomer\")}_getMapImage(){var e;return null===(e=this.shadowRoot)||void 0===e?void 0:e.getElementById(\"map-image\")}_getMapZoomerContent(){var e;return null===(e=this.shadowRoot)||void 0===e?void 0:e.getElementById(\"map-zoomer-content\")}_getSvgWrapper(){var e;return null===(e=this.shadowRoot)||void 0===e?void 0:e.querySelector(\"#svg-wrapper\")}_showConfigErrors(e){e.forEach((e=>console.error(e)));const t=document.createElement(\"hui-error-card\");return t.setConfig({type:\"error\",error:e[0],origConfig:this.config}),N` ${t} `}_showOldConfig(){return N`\n            <hui-warning>\n                <h1>Xiaomi Vacuum Map Card ${\"v2.0.11\"}</h1>\n                <p>${this._localize(\"common.old_configuration\")}</p>\n                <p>\n                    <a\n                        href=\"https://github.com/PiotrMachowski/lovelace-xiaomi-vacuum-map-card#migrating-from-v1xx\"\n                        target=\"_blank\"\n                        >${this._localize(\"common.old_configuration_migration_link\")}</a\n                    >\n                </p>\n            </hui-warning>\n        `}_showInvalidEntities(e){return N`\n            <hui-warning>\n                <h1>${this._localize(\"validation.invalid_entities\")}</h1>\n                <ul>\n                    ${e.map((e=>N` <li>\n                            <pre>${e}</pre>\n                        </li>`))}\n                </ul>\n            </hui-warning>\n        `}_showInvalidCalibrationWarning(){return N` <hui-warning>${this._localize(\"validation.invalid_calibration\")}</hui-warning> `}_localize(e){return Gi(e,this.hass,this.config)}async _delay(e){await new Promise((t=>setTimeout((()=>t()),e)))}_showToast(e,t,a,i=\"\"){var n,r,o;const l=null===(n=this.shadowRoot)||void 0===n?void 0:n.getElementById(\"toast\"),s=null===(r=this.shadowRoot)||void 0===r?void 0:r.getElementById(\"toast-text\"),c=null===(o=this.shadowRoot)||void 0===o?void 0:o.getElementById(\"toast-icon\");l&&s&&c&&(l.className=\"show\",s.innerText=this._localize(e)+(i?`\\n${i}`:\"\"),c.children[0].setAttribute(\"icon\",t),c.style.color=a?\"var(--map-card-internal-toast-successful-icon-color)\":\"var(--map-card-internal-toast-unsuccessful-icon-color)\",this._delay(2e3).then((()=>l.className=l.className.replace(\"show\",\"\"))))}static get styles(){return r`\n            ha-card {\n                overflow: hidden;\n                display: flow-root;\n                --map-card-internal-primary-color: var(--map-card-primary-color, var(--slider-color));\n                --map-card-internal-primary-text-color: var(--map-card-primary-text-color, var(--primary-text-color));\n                --map-card-internal-secondary-color: var(--map-card-secondary-color, var(--slider-secondary-color));\n                --map-card-internal-secondary-text-color: var(\n                    --map-card-secondary-text-color,\n                    var(--text-light-primary-color)\n                );\n                --map-card-internal-tertiary-color: var(--map-card-tertiary-color, var(--secondary-background-color));\n                --map-card-internal-tertiary-text-color: var(--map-card-tertiary-text-color, var(--primary-text-color));\n                --map-card-internal-disabled-text-color: var(\n                    --map-card-disabled-text-color,\n                    var(--disabled-text-color)\n                );\n                --map-card-internal-zoomer-background: var(\n                    --map-card-zoomer-background,\n                    var(--map-card-internal-tertiary-color)\n                );\n                --map-card-internal-ripple-color: var(--map-card-ripple-color, #7a7f87);\n                --map-card-internal-big-radius: var(--map-card-big-radius, 25px);\n                --map-card-internal-small-radius: var(--map-card-small-radius, 18px);\n                --map-card-internal-predefined-point-icon-wrapper-size: var(\n                    --map-card-predefined-point-icon-wrapper-size,\n                    36px\n                );\n                --map-card-internal-predefined-point-icon-size: var(--map-card-predefined-point-icon-size, 24px);\n                --map-card-internal-predefined-point-icon-color: var(\n                    --map-card-predefined-point-icon-color,\n                    var(--map-card-internal-secondary-text-color)\n                );\n                --map-card-internal-predefined-point-icon-color-selected: var(\n                    --map-card-predefined-point-icon-color-selected,\n                    var(--map-card-internal-primary-text-color)\n                );\n                --map-card-internal-predefined-point-icon-background-color: var(\n                    --map-card-predefined-point-icon-background-color,\n                    var(--map-card-internal-secondary-color)\n                );\n                --map-card-internal-predefined-point-icon-background-color-selected: var(\n                    --map-card-predefined-point-icon-background-color-selected,\n                    var(--map-card-internal-primary-color)\n                );\n                --map-card-internal-predefined-point-label-color: var(\n                    --map-card-predefined-point-label-color,\n                    var(--map-card-internal-secondary-text-color)\n                );\n                --map-card-internal-predefined-point-label-color-selected: var(\n                    --map-card-predefined-point-label-color-selected,\n                    var(--map-card-internal-primary-text-color)\n                );\n                --map-card-internal-predefined-point-label-font-size: var(\n                    --map-card-predefined-point-label-font-size,\n                    12px\n                );\n                --map-card-internal-manual-point-radius: var(--map-card-manual-point-radius, 5px);\n                --map-card-internal-manual-point-line-color: var(--map-card-manual-point-line-color, yellow);\n                --map-card-internal-manual-point-fill-color: var(--map-card-manual-point-fill-color, transparent);\n                --map-card-internal-manual-point-line-width: var(--map-card-manual-point-line-width, 1px);\n                --map-card-internal-manual-path-point-radius: var(--map-card-manual-path-point-radius, 5px);\n                --map-card-internal-manual-path-point-line-color: var(--map-card-manual-path-point-line-color, yellow);\n                --map-card-internal-manual-path-point-fill-color: var(\n                    --map-card-manual-path-point-fill-color,\n                    transparent\n                );\n                --map-card-internal-manual-path-point-line-width: var(--map-card-manual-path-point-line-width, 1px);\n                --map-card-internal-manual-path-line-color: var(--map-card-manual-path-line-color, yellow);\n                --map-card-internal-manual-path-line-width: var(--map-card-manual-path-line-width, 1px);\n                --map-card-internal-predefined-rectangle-line-width: var(\n                    --map-card-predefined-rectangle-line-width,\n                    1px\n                );\n                --map-card-internal-predefined-rectangle-line-color: var(\n                    --map-card-predefined-rectangle-line-color,\n                    white\n                );\n                --map-card-internal-predefined-rectangle-fill-color: var(\n                    --map-card-predefined-rectangle-fill-color,\n                    transparent\n                );\n                --map-card-internal-predefined-rectangle-line-color-selected: var(\n                    --map-card-predefined-rectangle-line-color-selected,\n                    white\n                );\n                --map-card-internal-predefined-rectangle-fill-color-selected: var(\n                    --map-card-predefined-rectangle-fill-color-selected,\n                    rgba(255, 255, 255, 0.2)\n                );\n                --map-card-internal-predefined-rectangle-line-segment-line: var(\n                    --map-card-predefined-rectangle-line-segment-line,\n                    10px\n                );\n                --map-card-internal-predefined-rectangle-line-segment-gap: var(\n                    --map-card-predefined-rectangle-line-segment-gap,\n                    5px\n                );\n                --map-card-internal-predefined-rectangle-icon-wrapper-size: var(\n                    --map-card-predefined-rectangle-icon-wrapper-size,\n                    36px\n                );\n                --map-card-internal-predefined-rectangle-icon-size: var(\n                    --map-card-predefined-rectangle-icon-size,\n                    24px\n                );\n                --map-card-internal-predefined-rectangle-icon-color: var(\n                    --map-card-predefined-rectangle-icon-color,\n                    var(--map-card-internal-secondary-text-color)\n                );\n                --map-card-internal-predefined-rectangle-icon-color-selected: var(\n                    --map-card-predefined-rectangle-icon-color-selected,\n                    var(--map-card-internal-primary-text-color)\n                );\n                --map-card-internal-predefined-rectangle-icon-background-color: var(\n                    --map-card-predefined-rectangle-icon-background-color,\n                    var(--map-card-internal-secondary-color)\n                );\n                --map-card-internal-predefined-rectangle-icon-background-color-selected: var(\n                    --map-card-predefined-rectangle-icon-background-color-selected,\n                    var(--map-card-internal-primary-color)\n                );\n                --map-card-internal-predefined-rectangle-label-color: var(\n                    --map-card-predefined-rectangle-label-color,\n                    var(--map-card-internal-secondary-text-color)\n                );\n                --map-card-internal-predefined-rectangle-label-color-selected: var(\n                    --map-card-predefined-rectangle-label-color-selected,\n                    var(--map-card-internal-primary-text-color)\n                );\n                --map-card-internal-predefined-rectangle-label-font-size: var(\n                    --map-card-predefined-rectangle-label-font-size,\n                    12px\n                );\n                --map-card-internal-manual-rectangle-line-width: var(--map-card-manual-rectangle-line-width, 1px);\n                --map-card-internal-manual-rectangle-line-color: var(--map-card-manual-rectangle-line-color, white);\n                --map-card-internal-manual-rectangle-fill-color: var(\n                    --map-card-manual-rectangle-fill-color,\n                    rgba(255, 255, 255, 0.2)\n                );\n                --map-card-internal-manual-rectangle-line-color-selected: var(\n                    --map-card-manual-rectangle-line-color-selected,\n                    white\n                );\n                --map-card-internal-manual-rectangle-fill-color-selected: var(\n                    --map-card-manual-rectangle-fill-color-selected,\n                    transparent\n                );\n                --map-card-internal-manual-rectangle-line-segment-line: var(\n                    --map-card-manual-rectangle-line-segment-line,\n                    10px\n                );\n                --map-card-internal-manual-rectangle-line-segment-gap: var(\n                    --map-card-manual-rectangle-line-segment-gap,\n                    5px\n                );\n                --map-card-internal-manual-rectangle-description-color: var(\n                    --map-card-manual-rectangle-description-color,\n                    white\n                );\n                --map-card-internal-manual-rectangle-description-font-size: var(\n                    --map-card-manual-rectangle-description-font-size,\n                    12px\n                );\n                --map-card-internal-manual-rectangle-description-offset-x: var(\n                    --map-card-manual-rectangle-description-offset-x,\n                    2px\n                );\n                --map-card-internal-manual-rectangle-description-offset-y: var(\n                    --map-card-manual-rectangle-description-offset-y,\n                    -8px\n                );\n                --map-card-internal-manual-rectangle-delete-circle-radius: var(\n                    --map-card-manual-rectangle-delete-circle-radius,\n                    13px\n                );\n                --map-card-internal-manual-rectangle-delete-circle-line-color: var(\n                    --map-card-manual-rectangle-delete-circle-line-color,\n                    white\n                );\n                --map-card-internal-manual-rectangle-delete-circle-fill-color: var(\n                    --map-card-manual-rectangle-delete-circle-fill-color,\n                    var(--map-card-internal-secondary-color)\n                );\n                --map-card-internal-manual-rectangle-delete-circle-line-color-selected: var(\n                    --map-card-manual-rectangle-delete-circle-line-color-selected,\n                    white\n                );\n                --map-card-internal-manual-rectangle-delete-circle-fill-color-selected: var(\n                    --map-card-manual-rectangle-delete-circle-fill-color-selected,\n                    var(--map-card-internal-primary-color)\n                );\n                --map-card-internal-manual-rectangle-delete-circle-line-width: var(\n                    --map-card-manual-rectangle-delete-circle-line-width,\n                    1px\n                );\n                --map-card-internal-manual-rectangle-delete-icon-color: var(\n                    --map-card-manual-rectangle-delete-icon-color,\n                    var(--map-card-internal-secondary-text-color)\n                );\n                --map-card-internal-manual-rectangle-delete-icon-color-selected: var(\n                    --map-card-manual-rectangle-delete-icon-color-selected,\n                    var(--map-card-internal-primary-text-color)\n                );\n                --map-card-internal-manual-rectangle-resize-circle-radius: var(\n                    --map-card-manual-rectangle-resize-circle-radius,\n                    13px\n                );\n                --map-card-internal-manual-rectangle-resize-circle-line-color: var(\n                    --map-card-manual-rectangle-resize-circle-line-color,\n                    white\n                );\n                --map-card-internal-manual-rectangle-resize-circle-fill-color: var(\n                    --map-card-manual-rectangle-resize-circle-fill-color,\n                    var(--map-card-internal-secondary-color)\n                );\n                --map-card-internal-manual-rectangle-resize-circle-line-color-selected: var(\n                    --map-card-manual-rectangle-resize-circle-line-color-selected,\n                    white\n                );\n                --map-card-internal-manual-rectangle-resize-circle-fill-color-selected: var(\n                    --map-card-manual-rectangle-resize-circle-fill-color-selected,\n                    var(--map-card-internal-primary-color)\n                );\n                --map-card-internal-manual-rectangle-resize-circle-line-width: var(\n                    --map-card-manual-rectangle-resize-circle-line-width,\n                    1px\n                );\n                --map-card-internal-manual-rectangle-resize-icon-color: var(\n                    --map-card-manual-rectangle-resize-icon-color,\n                    var(--map-card-internal-secondary-text-color)\n                );\n                --map-card-internal-manual-rectangle-resize-icon-color-selected: var(\n                    --map-card-manual-rectangle-resize-icon-color-selected,\n                    var(--map-card-internal-primary-text-color)\n                );\n                --map-card-internal-room-outline-line-color: var(--map-card-room-outline-line-color, white);\n                --map-card-internal-room-outline-line-width: var(--map-card-room-outline-line-width, 1px);\n                --map-card-internal-room-outline-line-segment-line: var(\n                    --map-card-room-outline-line-segment-line,\n                    10px\n                );\n                --map-card-internal-room-outline-line-segment-gap: var(--map-card-room-outline-line-segment-gap, 5px);\n                --map-card-internal-room-outline-fill-color: var(--map-card-room-outline-fill-color, transparent);\n                --map-card-internal-room-outline-line-color-selected: var(\n                    --map-card-room-outline-line-color-selected,\n                    white\n                );\n                --map-card-internal-room-outline-fill-color-selected: var(\n                    --map-card-room-outline-fill-color-selected,\n                    rgba(255, 255, 255, 0.3)\n                );\n                --map-card-internal-room-icon-wrapper-size: var(--map-card-room-icon-wrapper-size, 36px);\n                --map-card-internal-room-icon-size: var(--map-card-room-icon-size, 24px);\n                --map-card-internal-room-icon-color: var(\n                    --map-card-room-icon-color,\n                    var(--map-card-internal-secondary-text-color)\n                );\n                --map-card-internal-room-icon-color-selected: var(\n                    --map-card-room-icon-color-selected,\n                    var(--map-card-internal-primary-text-color)\n                );\n                --map-card-internal-room-icon-background-color: var(\n                    --map-card-room-icon-background-color,\n                    var(--map-card-internal-secondary-color)\n                );\n                --map-card-internal-room-icon-background-color-selected: var(\n                    --map-card-room-icon-background-color-selected,\n                    var(--map-card-internal-primary-color)\n                );\n                --map-card-internal-room-label-color: var(\n                    --map-card-room-label-color,\n                    var(--map-card-internal-secondary-text-color)\n                );\n                --map-card-internal-room-label-color-selected: var(\n                    --map-card-room-label-color-selected,\n                    var(--map-card-internal-primary-text-color)\n                );\n                --map-card-internal-room-label-font-size: var(--map-card-room-label-font-size, 12px);\n                --map-card-internal-toast-successful-icon-color: var(\n                    --map-card-toast-successful-icon-color,\n                    rgb(0, 255, 0)\n                );\n                --map-card-internal-toast-unsuccessful-icon-color: var(\n                    --map-card-toast-unsuccessful-icon-color,\n                    rgb(255, 0, 0)\n                );\n                --map-card-internal-transitions-duration: var(--map-card-transitions-duration, 200ms);\n            }\n\n            .clickable {\n                cursor: pointer;\n            }\n\n            .preset-selector-wrapper {\n                width: 100%;\n                display: inline-flex;\n                align-content: center;\n                justify-content: space-between;\n                align-items: center;\n            }\n\n            .preset-selector-icon-wrapper {\n                height: 44px;\n                width: 44px;\n                display: grid;\n                place-items: center;\n            }\n\n            .preset-selector-icon {\n                cursor: pointer;\n            }\n\n            .preset-selector-icon.disabled {\n                color: var(--map-card-internal-disabled-text-color);\n                cursor: default;\n            }\n\n            .preset-label-wrapper {\n                display: flex;\n                flex-direction: column;\n                align-items: center;\n            }\n\n            .preset-indicator {\n                line-height: 50%;\n            }\n\n            .map-wrapper {\n                position: relative;\n                height: max-content;\n            }\n\n            #map-zoomer {\n                overflow: hidden;\n                display: block;\n                --scale: 1;\n                --x: 0;\n                --y: 0;\n                background: var(--map-card-internal-zoomer-background);\n            }\n\n            #map-zoomer-content {\n                transform: translate(var(--x), var(--y)) scale(var(--scale));\n                transform-origin: 0 0;\n                position: relative;\n            }\n\n            #map-image {\n                width: 100%;\n                margin-bottom: -6px;\n            }\n\n            #map-image.zoomed {\n                image-rendering: pixelated;\n            }\n\n            #map-image-overlay {\n                position: absolute;\n                top: 0;\n                left: 0;\n                width: 100%;\n                height: 100%;\n            }\n\n            .standalone-icon-on-map {\n                background-color: var(--map-card-internal-secondary-color);\n                color: var(--map-card-internal-secondary-text-color);\n                border-radius: var(--map-card-internal-small-radius);\n                margin: 5px;\n                width: 36px;\n                height: 36px;\n                display: flex;\n                justify-content: center;\n                align-items: center;\n            }\n\n            .map-zoom-icons {\n                right: 0;\n                bottom: 0;\n                position: absolute;\n                display: inline-flex;\n                background-color: var(--map-card-internal-secondary-color);\n                color: var(--map-card-internal-secondary-text-color);\n                border-radius: var(--map-card-internal-small-radius);\n                margin: 5px;\n                direction: ltr;\n            }\n\n            .map-zoom-icons-main {\n                display: inline-flex;\n                border-radius: var(--map-card-internal-small-radius);\n                background-color: var(--map-card-internal-primary-color);\n                color: var(--map-card-internal-primary-text-color);\n            }\n\n            .icon-on-map {\n                touch-action: auto;\n                pointer-events: auto;\n                height: 36px;\n                width: 36px;\n                display: flex;\n                justify-content: center;\n                align-items: center;\n            }\n\n            .controls-wrapper {\n                margin: 15px;\n            }\n\n            .controls-wrapper > * {\n                margin-top: 10px;\n                margin-bottom: 10px;\n            }\n\n            .map-controls {\n                width: 100%;\n                display: inline-flex;\n                gap: 10px;\n                place-content: space-between;\n                flex-wrap: wrap;\n            }\n\n            .map-actions-list {\n                border-radius: var(--map-card-internal-big-radius);\n                overflow: hidden;\n                background-color: var(--map-card-internal-secondary-color);\n                color: var(--map-card-internal-secondary-text-color);\n                margin-inline-start: auto;\n                display: inline-flex;\n                height: min-content;\n            }\n\n            .map-actions-item.main {\n                border-radius: var(--map-card-internal-big-radius);\n                background-color: var(--map-card-internal-primary-color);\n                color: var(--map-card-internal-primary-text-color);\n            }\n\n            .map-actions-item {\n                width: 50px;\n                height: 50px;\n                display: flex;\n                justify-content: center;\n                align-items: center;\n                background-color: transparent;\n            }\n\n            .vacuum-controls {\n                display: flex;\n                justify-content: center;\n                align-items: center;\n            }\n\n            .vacuum-actions-list {\n                float: right;\n                border-radius: var(--map-card-internal-big-radius);\n                overflow: hidden;\n                background-color: var(--map-card-internal-secondary-color);\n                color: var(--map-card-internal-secondary-text-color);\n            }\n\n            .tiles-wrapper {\n                display: flex;\n                flex-wrap: wrap;\n                justify-content: space-evenly;\n                align-items: stretch;\n                gap: 5px;\n            }\n\n            .ripple {\n                position: relative;\n                overflow: hidden;\n                transform: translate3d(0, 0, 0);\n            }\n\n            .ripple:after {\n                content: \"\";\n                display: block;\n                position: absolute;\n                border-radius: 50%;\n                width: 100%;\n                height: 100%;\n                top: 0;\n                left: 0;\n                pointer-events: none;\n                background-image: radial-gradient(circle, var(--map-card-internal-ripple-color) 2%, transparent 10.01%);\n                background-repeat: no-repeat;\n                background-position: 50%;\n                transform: scale(10, 10);\n                opacity: 0;\n                transition: transform 0.5s, opacity 1s;\n            }\n\n            .ripple:active:after {\n                transform: scale(0, 0);\n                opacity: 0.7;\n                transition: 0s;\n            }\n\n            ${or.styles}\n            ${sr.styles}\n            ${gr.styles}\n            ${pr.styles}\n            ${ur.styles}\n            ${_r.styles}\n            ${vr.styles}\n            ${wr.styles}\n            ${zr.styles}\n            ${xr.styles}\n            ${Er.styles}\n        `}};e([ie({attribute:!1})],Vr.prototype,\"_hass\",void 0),e([ne()],Vr.prototype,\"oldConfig\",void 0),e([ne()],Vr.prototype,\"config\",void 0),e([ne()],Vr.prototype,\"presetIndex\",void 0),e([ne()],Vr.prototype,\"realScale\",void 0),e([ne()],Vr.prototype,\"realImageWidth\",void 0),e([ne()],Vr.prototype,\"realImageHeight\",void 0),e([ne()],Vr.prototype,\"mapScale\",void 0),e([ne()],Vr.prototype,\"mapX\",void 0),e([ne()],Vr.prototype,\"mapY\",void 0),e([ne()],Vr.prototype,\"repeats\",void 0),e([ne()],Vr.prototype,\"selectedMode\",void 0),e([ne()],Vr.prototype,\"mapLocked\",void 0),e([ne()],Vr.prototype,\"configErrors\",void 0),e([ne()],Vr.prototype,\"connected\",void 0),Vr=e([te(\"xiaomi-vacuum-map-card\")],Vr);export{Vr as XiaomiVacuumMapCard};\n"
  },
  {
    "path": "home-assistant/www/community/mini-graph-card/mini-graph-card-bundle.js",
    "content": "(function(){\"use strict\";function a(){var b=M([\"\"]);return a=function(){return b},b}function b(){var a=M([\"\\n          <div class=\\\"info__item\\\">\\n            <span class=\\\"info__item__type\\\">\",\"</span>\\n            <span class=\\\"info__item__value\\\">\\n              \",\" \",\"\\n            </span>\\n            <span class=\\\"info__item__time\\\">\\n              \",\"\\n            </span>\\n          </div>\\n        \"]);return b=function(){return a},a}function c(){var a=M([\"\\n      <div class=\\\"info flex\\\">\\n        \",\"\\n      </div>\\n    \"]);return c=function(){return a},a}function d(){var a=M([\"\\n      <div class=\\\"graph__labels --secondary flex\\\">\\n        <span class=\\\"label--max\\\">\",\"</span>\\n        <span class=\\\"label--min\\\">\",\"</span>\\n      </div>\\n    \"]);return d=function(){return a},a}function e(){var a=M([\"\\n      <div class=\\\"graph__labels --primary flex\\\">\\n        <span class=\\\"label--max\\\">\",\"</span>\\n        <span class=\\\"label--min\\\">\",\"</span>\\n      </div>\\n    \"]);return e=function(){return a},a}function f(){var a=M([\"\\n      <svg width='100%' height=\",\" viewBox='0 0 500 \",\"'\\n        @click=\",\">\\n        <g>\\n          <defs>\\n            \",\"\\n          </defs>\\n          \",\"\\n          \",\"\\n          \",\"\\n          \",\"\\n          \",\"\\n        </g>\\n        \",\"\\n      </svg>\"]);return f=function(){return a},a}function g(){var a=M([\"<g class='bars' ?anim=\",\">\",\"</g>\"]);return g=function(){return a},a}function h(){var a=M([\"\\n        <rect class='bar' x=\",\" y=\",\"\\n          height=\",\" width=\",\" fill=\",\"\\n          @mouseover=\",\"\\n          @mouseout=\",\">\\n          \",\"\\n        </rect>\"]);return h=function(){return a},a}function j(){var a=M([\"\\n          <animate attributeName='y' from=\",\" to=\",\" dur='1s' fill='remove'\\n            calcMode='spline' keyTimes='0; 1' keySplines='0.215 0.61 0.355 1'>\\n          </animate>\"]);return j=function(){return a},a}function k(){var a=M([\"\\n      <rect class='fill--rect'\\n        ?inactive=\",\"\\n        id=\",\"\\n        fill=\",\" height=\\\"100%\\\" width=\\\"100%\\\"\\n        mask=\",\"\\n      />\"]);return k=function(){return a},a}function l(){var a=M([\"\\n      <rect class='line--rect'\\n        ?inactive=\",\"\\n        id=\",\"\\n        fill=\",\" height=\\\"100%\\\" width=\\\"100%\\\"\\n        mask=\",\"\\n      />\"]);return l=function(){return a},a}function m(){var a=M([\"\",\"\"]);return m=function(){return a},a}function n(){var a=M([\"\\n            <stop stop-color=\",\" offset=\",\" />\\n          \"]);return n=function(){return a},a}function o(){var a=M([\"\\n        <linearGradient id=\",\" gradientTransform=\\\"rotate(90)\\\">\\n          \",\"\\n        </linearGradient>\"]);return o=function(){return a},a}function p(){var a=M([\"\\n      <g class='line--points'\\n        ?tooltip=\",\"\\n        ?inactive=\",\"\\n        ?init=\",\"\\n        anim=\",\"\\n        style=\\\"animation-delay: \",\"\\\"\\n        fill=\",\"\\n        stroke=\",\"\\n        stroke-width=\",\">\\n        \",\"\\n      </g>\"]);return p=function(){return a},a}function q(){var a=M([\"\\n      <circle\\n        class='line--point'\\n        ?inactive=\",\"\\n        style=\",\"\\n        stroke=\",\"\\n        fill=\",\"\\n        cx=\",\" cy=\",\" r=\",\"\\n        @mouseover=\",\"\\n        @mouseout=\",\"\\n      />\\n    \"]);return q=function(){return a},a}function r(){var a=M([\"\\n      <mask id=\",\">\\n        \",\"\\n      </mask>\\n    \"]);return r=function(){return a},a}function s(){var a=M([\"\\n      <path\\n        class='line'\\n        .id=\",\"\\n        anim=\",\" ?init=\",\"\\n        style=\\\"animation-delay: \",\"\\\"\\n        fill='none'\\n        stroke-dasharray=\",\" stroke-dashoffset=\",\"\\n        stroke=\",\"\\n        stroke-width=\",\"\\n        d=\",\"\\n      />\"]);return s=function(){return a},a}function t(){var a=M([\"\\n      <defs>\\n        <linearGradient id=\",\" x1=\\\"0%\\\" y1=\\\"0%\\\" x2=\\\"0%\\\" y2=\\\"100%\\\">\\n          <stop stop-color='white' offset='0%' stop-opacity='1'/>\\n          <stop stop-color='white' offset='100%' stop-opacity='.15'/>\\n        </linearGradient>\\n        <mask id=\",\">\\n          <rect width=\\\"100%\\\" height=\\\"100%\\\" fill=\",\" />\\n        </mask>\\n      </defs>\\n      <mask id=\",\">\\n        <path class='fill'\\n          type=\",\"\\n          .id=\",\" anim=\",\" ?init=\",\"\\n          style=\\\"animation-delay: \",\"\\\"\\n          fill='white'\\n          mask=\",\"\\n          d=\",\"\\n        />\\n      </mask>\"]);return t=function(){return a},a}function u(){var a=M([\"\\n      <svg width='10' height='10'>\\n        <rect width='10' height='10' fill=\",\" />\\n      </svg>\\n    \"]);return u=function(){return a},a}function v(){var a=M([\"\\n          <div class=\\\"graph__legend__item\\\"\\n            @click=\",\"\\n            @mouseenter=\",\"\\n            @mouseleave=\",\">\\n            \",\"\\n            <span class=\\\"ellipsis\\\">\",\"</span>\\n          </div>\\n        \"]);return v=function(){return a},a}function w(){var a=M([\"\\n      <div class=\\\"graph__legend\\\">\\n        \",\"\\n      </div>\\n    \"]);return w=function(){return a},a}function x(){var a=M([\"\\n      <div class=\\\"graph\\\">\\n        <div class=\\\"graph__container\\\">\\n          \",\"\\n          \",\"\\n          <div class=\\\"graph__container__svg\\\">\\n            \",\"\\n          </div>\\n        </div>\\n        \",\"\\n      </div>\"]);return x=function(){return a},a}function y(){var a=M([\"\\n          <span>\",\"</span> -\\n          <span>\",\"</span>\\n        \"]);return y=function(){return a},a}function z(){var a=M([\"\\n          <span>\",\"</span>\\n        \"]);return z=function(){return a},a}function A(){var a=M([\"\\n      <div class=\\\"state__time\\\">\\n        \",\"\\n      </div>\\n    \"]);return A=function(){return a},a}function B(){var a=M([\"\\n        <div\\n          class=\\\"state \",\"\\\"\\n          @click=\",\"\\n          style=\",\">\\n          \",\"\\n          <span class=\\\"state__value ellipsis\\\">\\n            \",\"\\n          </span>\\n          <span class=\\\"state__uom ellipsis\\\">\\n            \",\"\\n          </span>\\n          \",\"\\n        </div>\\n      \"]);return B=function(){return a},a}function C(){var a=M([\"\\n        <div class=\\\"states flex\\\" loc=\",\">\\n          \",\"\\n          <div class=\\\"states--secondary\\\">\",\"</div>\\n          \",\"\\n        </div>\\n      \"]);return C=function(){return a},a}function D(){var a=M([\"\\n      <div class=\\\"name flex\\\">\\n        <span class=\\\"ellipsis\\\" style=\",\">\",\"</span>\\n      </div>\\n    \"]);return D=function(){return a},a}function E(){var a=M([\"\\n      <div class=\\\"icon\\\" loc=\",\"\\n        style=\",\">\\n        <ha-icon .icon=\",\"></ha-icon>\\n      </div>\\n    \"]);return E=function(){return a},a}function F(){var a=M([\"\\n          <div class=\\\"header flex\\\" loc=\",\" style=\\\"font-size: \",\"px;\\\">\\n            \",\" \",\"\\n          </div>\\n        \"]);return F=function(){return a},a}function G(){var a=M([\"\"]);return G=function(){return a},a}function H(){var a=M([\"\\n          <div>\\n            Entity not available: \",\"\\n          </div>\\n        \"]);return H=function(){return a},a}function I(){var a=M([\"\\n      <hui-warning>\\n        <div>mini-graph-card</div>\\n        \",\"\\n      </hui-warning>\\n    \"]);return I=function(){return a},a}function J(){var a=M([\"\\n      <ha-card\\n        class=\\\"flex\\\"\\n        ?group=\",\"\\n        ?fill=\",\"\\n        ?points=\",\"\\n        ?labels=\",\"\\n        ?labels-secondary=\",\"\\n        ?gradient=\",\"\\n        ?hover=\",\"\\n        style=\\\"font-size: \",\"px;\\\"\\n        @click=\",\"\\n      >\\n        \",\" \",\" \",\" \",\"\\n      </ha-card>\\n    \"]);return J=function(){return a},a}function K(){var a=M([\"\"]);return K=function(){return a},a}function L(){var a=M([\"\\n  :host {\\n    display: flex;\\n    flex-direction: column;\\n  }\\n  ha-card {\\n    flex-direction: column;\\n    flex: 1;\\n    padding: 16px 0;\\n    position: relative;\\n    overflow: hidden;\\n  }\\n  ha-card > div {\\n    padding: 0px 16px 16px 16px;\\n  }\\n  ha-card > div:last-child {\\n    padding-bottom: 0;\\n  }\\n  ha-card[points] .line--points,\\n  ha-card[labels] .graph__labels.--primary {\\n    opacity: 0;\\n    transition: opacity .25s;\\n    animation: none;\\n  }\\n  ha-card[labels-secondary] .graph__labels.--secondary {\\n    opacity: 0;\\n    transition: opacity .25s;\\n    animation: none;\\n  }\\n  ha-card[points]:hover .line--points,\\n  ha-card:hover .graph__labels.--primary,\\n  ha-card:hover .graph__labels.--secondary {\\n      opacity: 1;\\n  }\\n  ha-card[fill] {\\n    padding-bottom: 0;\\n  }\\n  ha-card[fill] .graph {\\n    padding: 0;\\n    order: 10;\\n  }\\n  ha-card[fill] path {\\n    stroke-linecap: initial;\\n    stroke-linejoin: initial;\\n  }\\n  ha-card[fill] .graph__legend {\\n    order: -1;\\n    padding: 0 16px 8px 16px;\\n  }\\n  ha-card[fill] .info {\\n    padding-bottom: 16px;\\n  }\\n  ha-card[group] {\\n    box-shadow: none;\\n    padding: 0;\\n  }\\n  ha-card[group] > div {\\n    padding-left: 0;\\n    padding-right: 0;\\n  }\\n  ha-card[group] .graph__legend {\\n    padding-left: 0;\\n    padding-right: 0;\\n  }\\n  ha-card[hover] {\\n    cursor: pointer;\\n  }\\n  .flex {\\n    display: flex;\\n    display: -webkit-flex;\\n    min-width: 0;\\n  }\\n  .header {\\n    justify-content: space-between;\\n  }\\n  .header[loc=\\\"center\\\"] {\\n    justify-content: space-around;\\n  }\\n  .header[loc=\\\"left\\\"] {\\n    align-self: flex-start;\\n  }\\n  .header[loc=\\\"right\\\"] {\\n    align-self: flex-end;\\n  }\\n  .name {\\n    align-items: center;\\n    min-width: 0;\\n    letter-spacing: var(--mcg-title-letter-spacing, normal);\\n  }\\n  .name > span {\\n    font-size: 1.2em;\\n    font-weight: var(--mcg-title-font-weight, 500);\\n    max-height: 1.4em;\\n    min-height: 1.4em;\\n    opacity: .65;\\n  }\\n  .icon {\\n    color: var(--paper-item-icon-color, #44739e);\\n    display: inline-block;\\n    flex: 0 0 1.7em;\\n    text-align: center;\\n  }\\n  .icon > ha-icon {\\n    height: 1.7em;\\n    width: 1.7em;\\n  }\\n  .icon[loc=\\\"left\\\"] {\\n    order: -1;\\n    margin-right: .6em;\\n    margin-left: 0;\\n  }\\n  .icon[loc=\\\"state\\\"] {\\n    align-self: center;\\n  }\\n  .states {\\n    align-items: flex-start;\\n    font-weight: 300;\\n    justify-content: space-between;\\n    flex-wrap: nowrap;\\n  }\\n  .states .icon {\\n    align-self: center;\\n    margin-left: 0;\\n  }\\n  .states[loc=\\\"center\\\"] {\\n    justify-content: space-evenly;\\n  }\\n  .states[loc=\\\"right\\\"] > .state {\\n    margin-left: auto;\\n    order: 2;\\n  }\\n  .states[loc=\\\"center\\\"] .states--secondary,\\n  .states[loc=\\\"right\\\"] .states--secondary {\\n    margin-left: 0;\\n  }\\n  .states[loc=\\\"center\\\"] .states--secondary {\\n    align-items: center;\\n  }\\n  .states[loc=\\\"right\\\"] .states--secondary {\\n    align-items: flex-start;\\n  }\\n  .states[loc=\\\"center\\\"] .state__time {\\n    left: 50%;\\n    transform: translateX(-50%);\\n  }\\n  .states > .icon > ha-icon {\\n    height: 2em !important;\\n    width: 2em !important;\\n  }\\n  .states--secondary {\\n    display: flex;\\n    flex-flow: column;\\n    flex-wrap: wrap;\\n    align-items: flex-end;\\n    margin-left: 1rem;\\n    min-width: 0;\\n    margin-left: 1.4em;\\n  }\\n  .states--secondary:empty {\\n    display: none;\\n  }\\n  .state {\\n    position: relative;\\n    display: flex;\\n    flex-wrap: nowrap;\\n    max-width: 100%;\\n    min-width: 0;\\n  }\\n  .state--small {\\n    font-size: .6em;\\n    margin-bottom: .6rem;\\n    flex-wrap: nowrap;\\n  }\\n  .state--small > svg {\\n    position: absolute;\\n    left: -1.6em;\\n    align-self: center;\\n    height: 1em;\\n    width: 1em;\\n    border-radius: 100%;\\n    margin-right: 1em;\\n  }\\n  .state--small:last-child {\\n    margin-bottom: 0;\\n  }\\n  .states--secondary > :only-child {\\n    font-size: 1em;\\n    margin-bottom: 0;\\n  }\\n  .states--secondary > :only-child svg {\\n    display: none;\\n  }\\n  .state__value {\\n    display: inline-block;\\n    font-size: 2.4em;\\n    margin-right: .25rem;\\n    line-height: 1.2em;\\n  }\\n  .state__uom {\\n    flex: 1;\\n    align-self: flex-end;\\n    display: inline-block;\\n    font-size: 1.4em;\\n    font-weight: 400;\\n    line-height: 1.6em;\\n    margin-top: .1em;\\n    opacity: .6;\\n    vertical-align: bottom;\\n  }\\n  .state--small .state__uom {\\n    flex: 1;\\n  }\\n  .state__time {\\n    font-size: .95rem;\\n    font-weight: 500;\\n    bottom: -1.1rem;\\n    left: 0;\\n    opacity: .75;\\n    position: absolute;\\n    white-space: nowrap;\\n    animation: fade .15s cubic-bezier(0.215, 0.61, 0.355, 1);\\n  }\\n  .states[loc=\\\"right\\\"] .state__time {\\n    left: initial;\\n    right: 0;\\n  }\\n  .graph {\\n    align-self: flex-end;\\n    box-sizing: border-box;\\n    display: flex;\\n    flex-direction: column;\\n    margin-top: auto;\\n    width: 100%;\\n  }\\n  .graph__container {\\n    display: flex;\\n    flex-direction: row;\\n    position: relative;\\n  }\\n  .graph__container__svg {\\n    cursor: default;\\n    flex: 1;\\n  }\\n  svg {\\n    overflow: hidden;\\n    display: block;\\n  }\\n  path {\\n    stroke-linecap: round;\\n    stroke-linejoin: round;\\n  }\\n  .fill[anim=\\\"false\\\"] {\\n    animation: reveal .25s cubic-bezier(0.215, 0.61, 0.355, 1) forwards;\\n  }\\n  .fill[anim=\\\"false\\\"][type=\\\"fade\\\"] {\\n    animation: reveal-2 .25s cubic-bezier(0.215, 0.61, 0.355, 1) forwards;\\n  }\\n  .line--points[anim=\\\"false\\\"],\\n  .line[anim=\\\"false\\\"] {\\n    animation: pop .25s cubic-bezier(0.215, 0.61, 0.355, 1) forwards;\\n  }\\n  .line--points[inactive],\\n  .line--rect[inactive],\\n  .fill--rect[inactive] {\\n    opacity: 0 !important;\\n    animation: none !important;\\n    transition: all .15s !important;\\n  }\\n  .line--points[tooltip] .line--point[inactive] {\\n    opacity: 0;\\n  }\\n  .line--point {\\n    cursor: pointer;\\n    fill: var(--primary-background-color, white);\\n    stroke-width: inherit;\\n  }\\n  .line--point:hover {\\n    fill: var(--mcg-hover, inherit) !important;\\n  }\\n  .bars {\\n    animation: pop .25s cubic-bezier(0.215, 0.61, 0.355, 1);\\n  }\\n  .bars[anim] {\\n    animation: bars .5s cubic-bezier(0.215, 0.61, 0.355, 1);\\n  }\\n  .bar {\\n    transition: opacity .25s cubic-bezier(0.215, 0.61, 0.355, 1);\\n  }\\n  .bar:hover {\\n    opacity: .5;\\n    cursor: pointer;\\n  }\\n  ha-card[gradient] .line--point:hover {\\n    fill: var(--primary-text-color, white);\\n  }\\n  path,\\n  .line--points,\\n  .fill {\\n    opacity: 0;\\n  }\\n  .line--points[anim=\\\"true\\\"][init] {\\n    animation: pop .5s cubic-bezier(0.215, 0.61, 0.355, 1) forwards;\\n  }\\n  .fill[anim=\\\"true\\\"][init] {\\n    animation: reveal .5s cubic-bezier(0.215, 0.61, 0.355, 1) forwards;\\n  }\\n  .fill[anim=\\\"true\\\"][init][type=\\\"fade\\\"] {\\n    animation: reveal-2 .5s cubic-bezier(0.215, 0.61, 0.355, 1) forwards;\\n  }\\n  .line[anim=\\\"true\\\"][init] {\\n    animation: dash 1s cubic-bezier(0.215, 0.61, 0.355, 1) forwards;\\n  }\\n  .graph__labels.--secondary {\\n    right: 0;\\n    margin-right: 0px;\\n  }\\n  .graph__labels {\\n    align-items: flex-start;\\n    flex-direction: column;\\n    font-size: calc(.15em + 8.5px);\\n    font-weight: 400;\\n    justify-content: space-between;\\n    margin-right: 10px;\\n    padding: .6em;\\n    position: absolute;\\n    pointer-events: none;\\n    top: 0; bottom: 0;\\n    opacity: .75;\\n  }\\n  .graph__labels > span {\\n    cursor: pointer;\\n    background: var(--primary-background-color, white);\\n    border-radius: 1em;\\n    padding: .2em .6em;\\n    box-shadow: 0 1px 3px rgba(0,0,0,.12), 0 1px 2px rgba(0,0,0,.24);\\n  }\\n  .graph__legend {\\n    display: flex;\\n    flex-direction: row;\\n    justify-content: space-evenly;\\n    padding-top: 16px;\\n    flex-wrap: wrap;\\n  }\\n  .graph__legend__item {\\n    cursor: pointer;\\n    display: flex;\\n    min-width: 0;\\n    margin: .4em;\\n    align-items: center\\n  }\\n  .graph__legend__item span {\\n    opacity: .75;\\n    margin-left: .4em;\\n  }\\n  .graph__legend__item svg {\\n    border-radius: 100%;\\n    min-width: 10px;\\n  }\\n  .info {\\n    justify-content: space-between;\\n    align-items: middle;\\n  }\\n  .info__item {\\n    display: flex;\\n    flex-flow: column;\\n    text-align: center;\\n  }\\n  .info__item:last-child {\\n    align-items: flex-end;\\n    text-align: right;\\n  }\\n  .info__item:first-child {\\n    align-items: flex-start;\\n    text-align: left;\\n  }\\n  .info__item__type {\\n    text-transform: capitalize;\\n    font-weight: 500;\\n    opacity: .9;\\n  }\\n  .info__item__time,\\n  .info__item__value {\\n    opacity: .75;\\n  }\\n  .ellipsis {\\n    overflow: hidden;\\n    text-overflow: ellipsis;\\n    white-space: nowrap;\\n  }\\n  @keyframes fade {\\n    0% { opacity: 0; }\\n  }\\n  @keyframes reveal {\\n    0% { opacity: 0; }\\n    100% { opacity: .15; }\\n  }\\n  @keyframes reveal-2 {\\n    0% { opacity: 0; }\\n    100% { opacity: .4; }\\n  }\\n  @keyframes pop {\\n    0% { opacity: 0; }\\n    100% { opacity: 1; }\\n  }\\n  @keyframes bars {\\n    0% { opacity: 0; }\\n    50% { opacity: 0; }\\n    100% { opacity: 1; }\\n  }\\n  @keyframes dash {\\n    0% {\\n      opacity: 0;\\n    }\\n    25% {\\n      opacity: 1;\\n    }\\n    100% {\\n      opacity: 1;\\n      stroke-dashoffset: 0;\\n    }\\n  }\"]);return L=function(){return a},a}function M(a,b){return b||(b=a.slice(0)),Object.freeze(Object.defineProperties(a,{raw:{value:Object.freeze(b)}}))}function N(a,b){var c=Object.keys(a);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(a);b&&(d=d.filter(function(b){return Object.getOwnPropertyDescriptor(a,b).enumerable})),c.push.apply(c,d)}return c}function O(a){for(var b,c=1;c<arguments.length;c++)b=null==arguments[c]?{}:arguments[c],c%2?N(Object(b),!0).forEach(function(c){P(a,c,b[c])}):Object.getOwnPropertyDescriptors?Object.defineProperties(a,Object.getOwnPropertyDescriptors(b)):N(Object(b)).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))});return a}function P(a,b,c){return b in a?Object.defineProperty(a,b,{value:c,enumerable:!0,configurable:!0,writable:!0}):a[b]=c,a}function Q(a,b,c,d,e,f,g){try{var h=a[f](g),i=h.value}catch(a){return void c(a)}h.done?b(i):Promise.resolve(i).then(d,e)}function R(a){return function(){var b=this,c=arguments;return new Promise(function(d,e){function f(a){Q(h,d,e,f,g,\"next\",a)}function g(a){Q(h,d,e,f,g,\"throw\",a)}var h=a.apply(b,c);f(void 0)})}}function S(a){return W(a)||V(a)||U(a)||T()}function T(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function U(a,b){if(a){if(\"string\"==typeof a)return X(a,b);var c=Object.prototype.toString.call(a).slice(8,-1);return\"Object\"===c&&a.constructor&&(c=a.constructor.name),\"Map\"===c||\"Set\"===c?Array.from(a):\"Arguments\"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?X(a,b):void 0}}function V(a){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(a))return Array.from(a)}function W(a){if(Array.isArray(a))return X(a)}function X(a,b){(null==b||b>a.length)&&(b=a.length);for(var c=0,d=Array(b);c<b;c++)d[c]=a[c];return d}(function(a){\"function\"==typeof define&&define.amd?define(a):a()})(function(){var Ia=Number.isNaN,Ja=Math.log10,Ka=Math.ceil,La=Math.pow,Ma=Math.min,Na=Math.max,Oa=String.fromCharCode,Pa=Math.floor,Qa=Math.abs,Ra=Math.round;function i(a,b){for(var{element:{content:d},parts:c}=a,e=document.createTreeWalker(d,133,null,!1),f=eb(c),g=c[f],h=-1,i=0,j=[],k=null;e.nextNode();){h++;var l=e.currentNode;for(l.previousSibling===k&&(k=null),b.has(l)&&(j.push(l),null===k&&(k=l)),null!==k&&i++;g!==void 0&&g.index===h;)g.index=null===k?g.index-i:-1,f=eb(c,f),g=c[f]}j.forEach(a=>a.parentNode.removeChild(a))}function M(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null,{element:{content:e},parts:d}=a;if(null===c||void 0===c)return void e.appendChild(b);for(var f=document.createTreeWalker(e,133,null,!1),g=eb(d),h=0,i=-1;f.nextNode();){i++;var j=f.currentNode;for(j===c&&(h=db(b),c.parentNode.insertBefore(b,c));-1!==g&&d[g].index===i;){if(0<h){for(;-1!==g;)d[g].index+=h,g=eb(d,g);return}g=eb(d,g)}}}function T(a){var b=zb.get(a.type);void 0===b&&(b={stringsArray:new WeakMap,keyString:new Map},zb.set(a.type,b));var c=b.stringsArray.get(a.strings);if(void 0!==c)return c;var d=a.strings.join(Va);return c=b.keyString.get(d),void 0===c&&(c=new Za(a,a.getTemplateElement()),b.keyString.set(d,c)),b.stringsArray.set(a.strings,c),c}function U(a,b){a=a||[],b=b||{};try{return new Blob(a,b)}catch(f){if(\"TypeError\"!==f.name)throw f;for(var c=\"undefined\"==typeof BlobBuilder?\"undefined\"==typeof MSBlobBuilder?\"undefined\"==typeof MozBlobBuilder?WebKitBlobBuilder:MozBlobBuilder:MSBlobBuilder:BlobBuilder,d=new c,e=0;e<a.length;e+=1)d.append(a[e]);return d.getBlob(b.type)}}function W(a,b){b&&a.then(function(a){b(null,a)},function(a){b(a)})}function Z(a,b,c){\"function\"==typeof b&&a.then(b),\"function\"==typeof c&&a.catch(c)}function $(a){return\"string\"!=typeof a&&(console.warn(\"\".concat(a,\" used as a key, but it is not a string.\")),a+=\"\"),a}function _(){if(arguments.length&&\"function\"==typeof arguments[arguments.length-1])return arguments[arguments.length-1]}function aa(a){for(var b=a.length,c=new ArrayBuffer(b),d=new Uint8Array(c),e=0;e<b;e++)d[e]=a.charCodeAt(e);return c}function ba(a){return new ec(function(b){var c=a.transaction(\"local-forage-detect-blob-support\",\"readwrite\"),d=U([\"\"]);c.objectStore(\"local-forage-detect-blob-support\").put(d,\"key\"),c.onabort=function(a){a.preventDefault(),a.stopPropagation(),b(!1)},c.oncomplete=function(){var a=navigator.userAgent.match(/Chrome\\/(\\d+)/),c=navigator.userAgent.match(/Edge\\//);b(c||!a||43<=parseInt(a[1],10))}}).catch(function(){return!1})}function ca(a){return\"boolean\"==typeof dc?ec.resolve(dc):ba(a).then(function(a){return dc=a,dc})}function da(a){var b=fc[a.name],c={};c.promise=new ec(function(a,b){c.resolve=a,c.reject=b}),b.deferredOperations.push(c),b.dbReady=b.dbReady?b.dbReady.then(function(){return c.promise}):c.promise}function ea(a){var b=fc[a.name],c=b.deferredOperations.pop();if(c)return c.resolve(),c.promise}function fa(a,b){var c=fc[a.name],d=c.deferredOperations.pop();if(d)return d.reject(b),d.promise}function ga(a,b){return new ec(function(c,d){if(fc[a.name]=fc[a.name]||qa(),a.db)if(b)da(a),a.db.close();else return c(a.db);var e=[a.name];b&&e.push(a.version);var f=cc.open.apply(cc,e);b&&(f.onupgradeneeded=function(b){var c=f.result;try{c.createObjectStore(a.storeName),1>=b.oldVersion&&c.createObjectStore(\"local-forage-detect-blob-support\")}catch(c){if(\"ConstraintError\"===c.name)console.warn(\"The database \\\"\"+a.name+\"\\\" has been upgraded from version \"+b.oldVersion+\" to version \"+b.newVersion+\", but the storage \\\"\"+a.storeName+\"\\\" already exists.\");else throw c}}),f.onerror=function(a){a.preventDefault(),d(f.error)},f.onsuccess=function(){c(f.result),ea(a)}})}function ha(a){return ga(a,!1)}function ia(a){return ga(a,!0)}function ja(a,b){if(!a.db)return!0;var c=!a.db.objectStoreNames.contains(a.storeName),d=a.version<a.db.version,e=a.version>a.db.version;if(d&&(a.version!==b&&console.warn(\"The database \\\"\"+a.name+\"\\\" can't be downgraded from version \"+a.db.version+\" to version \"+a.version+\".\"),a.version=a.db.version),e||c){if(c){var f=a.db.version+1;f>a.version&&(a.version=f)}return!0}return!1}function ka(a){return new ec(function(b,c){var d=new FileReader;d.onerror=c,d.onloadend=function(c){var d=btoa(c.target.result||\"\");b({__local_forage_encoded_blob:!0,data:d,type:a.type})},d.readAsBinaryString(a)})}function la(a){var b=aa(atob(a.data));return U([b],{type:a.type})}function ma(a){return a&&a.__local_forage_encoded_blob}function na(a){var b=this,c=b._initReady().then(function(){var a=fc[b._dbInfo.name];if(a&&a.dbReady)return a.dbReady});return Z(c,a,a),c}function oa(a){da(a);for(var b,c=fc[a.name],d=c.forages,e=0;e<d.length;e++)b=d[e],b._dbInfo.db&&(b._dbInfo.db.close(),b._dbInfo.db=null);return a.db=null,ha(a).then(b=>(a.db=b,ja(a)?ia(a):b)).then(b=>{a.db=c.db=b;for(var e=0;e<d.length;e++)d[e]._dbInfo.db=b}).catch(b=>{throw fa(a,b),b})}function pa(a,b,c,d){d===void 0&&(d=1);try{var e=a.db.transaction(a.storeName,b);c(null,e)}catch(e){if(0<d&&(!a.db||\"InvalidStateError\"===e.name||\"NotFoundError\"===e.name))return ec.resolve().then(()=>{if(!a.db||\"NotFoundError\"===e.name&&!a.db.objectStoreNames.contains(a.storeName)&&a.version<=a.db.version)return a.db&&(a.version=a.db.version+1),ia(a)}).then(()=>oa(a).then(function(){pa(a,b,c,d-1)})).catch(c);c(e)}}function qa(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function ra(a){var b,c,d,e,f,g=.75*a.length,h=a.length,j=0;\"=\"===a[a.length-1]&&(g--,\"=\"===a[a.length-2]&&g--);var k=new ArrayBuffer(g),l=new Uint8Array(k);for(b=0;b<h;b+=4)c=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\".indexOf(a[b]),d=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\".indexOf(a[b+1]),e=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\".indexOf(a[b+2]),f=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\".indexOf(a[b+3]),l[j++]=c<<2|d>>4,l[j++]=(15&d)<<4|e>>2,l[j++]=(3&e)<<6|63&f;return k}function sa(a){var b,c=new Uint8Array(a),d=\"\";for(b=0;b<c.length;b+=3)d+=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"[c[b]>>2],d+=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"[(3&c[b])<<4|c[b+1]>>4],d+=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"[(15&c[b+1])<<2|c[b+2]>>6],d+=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"[63&c[b+2]];return 2==c.length%3?d=d.substring(0,d.length-1)+\"=\":1==c.length%3&&(d=d.substring(0,d.length-2)+\"==\"),d}function ta(a,b,c,d){a.executeSql(\"CREATE TABLE IF NOT EXISTS \".concat(b.storeName,\" \")+\"(id INTEGER PRIMARY KEY, key unique, value)\",[],c,d)}function ua(a,b,c,d,e,f){a.executeSql(c,d,e,function(a,g){g.code===g.SYNTAX_ERR?a.executeSql(\"SELECT name FROM sqlite_master WHERE type='table' AND name = ?\",[b.storeName],function(a,h){h.rows.length?f(a,g):ta(a,b,function(){a.executeSql(c,d,e,f)},f)},f):f(a,g)},f)}function va(a,b,c,d){var e=this;a=$(a);var f=new ec(function(f,g){e.ready().then(function(){void 0===b&&(b=null);var h=b,i=e._dbInfo;i.serializer.serialize(b,function(b,j){j?g(j):i.db.transaction(function(c){ua(c,i,\"INSERT OR REPLACE INTO \".concat(i.storeName,\" \")+\"(key, value) VALUES (?, ?)\",[a,b],function(){f(h)},function(a,b){g(b)})},function(b){if(b.code===b.QUOTA_ERR){if(0<d)return void f(va.apply(e,[a,h,c,d-1]));g(b)}})})}).catch(g)});return W(f,c),f}function wa(a){return new ec(function(b,c){a.transaction(function(d){d.executeSql(\"SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'\",[],function(c,d){for(var e=[],f=0;f<d.rows.length;f++)e.push(d.rows.item(f).name);b({db:a,storeNames:e})},function(a,b){c(b)})},function(a){c(a)})})}function xa(){try{return\"undefined\"!=typeof localStorage&&\"setItem\"in localStorage&&!!localStorage.setItem}catch(a){return!1}}function ya(a,b){var c=a.name+\"/\";return a.storeName!==b.storeName&&(c+=a.storeName+\"/\"),c}function za(){try{return localStorage.setItem(\"_localforage_support_test\",!0),localStorage.removeItem(\"_localforage_support_test\"),!1}catch(a){return!0}}function Aa(){return!za()||0<localStorage.length}function Ba(a,b){a[b]=function(){var c=arguments;return a.ready().then(function(){return a[b].apply(a,c)})}}function Ca(){for(var a,b=1;b<arguments.length;b++)if(a=arguments[b],a)for(var c in a)a.hasOwnProperty(c)&&(arguments[0][c]=rc(a[c])?a[c].slice():a[c]);return arguments[0]}function Da(a,b){for(var c=[],d=0,e=a.length;d<e;d++)c.push(a[d].substr(0,b));return c}function Ea(a){for(var b=[],c=1;c<arguments.length;c++)b[c-1]=arguments[c];for(var d,e=0,f=b;e<f.length;e++)for(var g in d=f[e],d)a[g]=d[g];return a}function Fa(a,b,c){if(void 0===c&&(c={}),\"string\"!=typeof b)throw new Error(\"Invalid format in fecha parse\");if(b=Xc[b]||b,1e3<a.length)return null;var d=new Date,e={year:d.getFullYear(),month:0,day:1,hour:0,minute:0,second:0,millisecond:0,isPm:null,timezoneOffset:null},f=[],g=[],h=b.replace(Fc,function(a,b){return g.push(Oc(b)),\"@@@\"}),j={},k={};h=Oc(h).replace(Bc,function(a){var b=Wc[a],c=b[0],d=b[1],e=b[3];if(j[c])throw new Error(\"Invalid format. \"+c+\" specified twice in format\");return j[c]=!0,e&&(k[e]=!0),f.push(b),\"(\"+d+\")\"}),Object.keys(k).forEach(function(a){if(!j[a])throw new Error(\"Invalid format. \"+a+\" is required in specified format\")}),h=h.replace(/@@@/g,function(){return g.shift()});var l=a.match(new RegExp(h,\"i\"));if(!l)return null;for(var m=Ea(Ea({},Mc),c),n=1;n<l.length;n++){var o=f[n-1],p=o[0],q=o[2],r=q?q(l[n],m):+l[n];if(null==r)return null;e[p]=r}1===e.isPm&&null!=e.hour&&12!=+e.hour?e.hour=+e.hour+12:0===e.isPm&&12==+e.hour&&(e.hour=0);for(var s=new Date(e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond),t=[[\"month\",\"getMonth\"],[\"day\",\"getDate\"],[\"hour\",\"getHours\"],[\"minute\",\"getMinutes\"],[\"second\",\"getSeconds\"]],n=0,u=t.length;n<u;n++)if(j[t[n][0]]&&e[t[n][0]]!==s[t[n][1]]())return null;return null==e.timezoneOffset?s:new Date(Date.UTC(e.year,e.month,e.day,e.hour,e.minute-e.timezoneOffset,e.second,e.millisecond))}function Ga(a){return a.substr(0,a.indexOf(\".\"))}function Ha(a,b){if(a in bd)return bd[a];return\"alarm_control_panel\"===a?\"armed_home\"===b?\"hass:bell-plus\":\"armed_night\"===b?\"hass:bell-sleep\":\"disarmed\"===b?\"hass:bell-outline\":\"triggered\"===b?\"hass:bell-ring\":\"hass:bell\":\"binary_sensor\"===a?b&&\"off\"===b?\"hass:radiobox-blank\":\"hass:checkbox-marked-circle\":\"cover\"===a?\"closed\"===b?\"hass:window-closed\":\"hass:window-open\":\"lock\"===a?b&&\"unlocked\"===b?\"hass:lock-open\":\"hass:lock\":\"media_player\"===a?b&&\"off\"!==b&&\"idle\"!==b?\"hass:cast-connected\":\"hass:cast\":\"zwave\"===a?\"dead\"===b?\"hass:emoticon-dead\":\"sleeping\"===b?\"hass:sleep\":\"initializing\"===b?\"hass:timer-sand\":\"hass:z-wave\":(console.warn(\"Unable to find icon for domain \"+a+\" (\"+b+\")\"),\"hass:bookmark\")}var Sa=\"undefined\"!=typeof window&&null!=window.customElements&&window.customElements.polyfillWrapFlushCallback!==void 0,Ta=function(a,b){for(var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null,d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;b!==c;){var e=b.nextSibling;a.insertBefore(b,d),b=e}},Ua=function(a,b){for(var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;b!==c;){var d=b.nextSibling;a.removeChild(b),b=d}},Va=\"{{lit-\".concat((Math.random()+\"\").slice(2),\"}}\"),Wa=\"<!--\".concat(Va,\"-->\"),Xa=new RegExp(\"\".concat(Va,\"|\").concat(Wa)),Ya=\"$lit$\";class Za{constructor(a,b){this.parts=[],this.element=b;for(var c,d=[],e=[],f=document.createTreeWalker(b.content,133,null,!1),g=0,h=-1,j=0,{strings:k,values:{length:l}}=a;j<l;){if(c=f.nextNode(),null===c){f.currentNode=e.pop();continue}if(h++,1===c.nodeType){if(c.hasAttributes()){for(var m=c.attributes,{length:n}=m,o=0,p=0;p<n;p++)$a(m[p].name,Ya)&&o++;for(;0<o--;){var q=k[j],r=cb.exec(q)[2],t=r.toLowerCase()+Ya,u=c.getAttribute(t);c.removeAttribute(t);var B=u.split(Xa);this.parts.push({type:\"attribute\",index:h,name:r,strings:B}),j+=B.length-1}}\"TEMPLATE\"===c.tagName&&(e.push(c),f.currentNode=c.content)}else if(3===c.nodeType){var C=c.data;if(0<=C.indexOf(Va)){for(var v=c.parentNode,w=C.split(Xa),x=w.length-1,y=0;y<x;y++){var z=void 0,A=w[y];if(\"\"===A)z=bb();else{var D=cb.exec(A);null!==D&&$a(D[2],Ya)&&(A=A.slice(0,D.index)+D[1]+D[2].slice(0,-Ya.length)+D[3]),z=document.createTextNode(A)}v.insertBefore(z,c),this.parts.push({type:\"node\",index:++h})}\"\"===w[x]?(v.insertBefore(bb(),c),d.push(c)):c.data=w[x],j+=x}}else if(8===c.nodeType)if(c.data===Va){var E=c.parentNode;(null===c.previousSibling||h===g)&&(h++,E.insertBefore(bb(),c)),g=h,this.parts.push({type:\"node\",index:h}),null===c.nextSibling?c.data=\"\":(d.push(c),h--),j++}else for(var F=-1;-1!==(F=c.data.indexOf(Va,F+1));)this.parts.push({type:\"node\",index:-1}),j++}for(var G of d)G.parentNode.removeChild(G)}}var $a=(a,b)=>{var c=a.length-b.length;return 0<=c&&a.slice(c)===b},ab=a=>-1!==a.index,bb=()=>document.createComment(\"\"),cb=/([ \\x09\\x0a\\x0c\\x0d])([^\\0-\\x1F\\x7F-\\x9F \"'>=/]+)([ \\x09\\x0a\\x0c\\x0d]*=[ \\x09\\x0a\\x0c\\x0d]*(?:[^ \\x09\\x0a\\x0c\\x0d\"'`<>=]*|\"[^\"]*|'[^']*))$/,db=a=>{for(var b=11===a.nodeType?0:1,c=document.createTreeWalker(a,133,null,!1);c.nextNode();)b++;return b},eb=function(a){for(var b,c=1<arguments.length&&void 0!==arguments[1]?arguments[1]:-1,d=c+1;d<a.length;d++)if(b=a[d],ab(b))return d;return-1},fb=new WeakMap,gb=a=>\"function\"==typeof a&&fb.has(a),hb={},ib={};class jb{constructor(a,b,c){this.__parts=[],this.template=a,this.processor=b,this.options=c}update(a){var b=0;for(var c of this.__parts)void 0!==c&&c.setValue(a[b]),b++;for(var d of this.__parts)void 0!==d&&d.commit()}_clone(){for(var a,b=Sa?this.template.element.content.cloneNode(!0):document.importNode(this.template.element.content,!0),c=[],d=this.template.parts,e=document.createTreeWalker(b,133,null,!1),f=0,g=0,h=e.nextNode();f<d.length;){if(a=d[f],!ab(a)){this.__parts.push(void 0),f++;continue}for(;g<a.index;)g++,\"TEMPLATE\"===h.nodeName&&(c.push(h),e.currentNode=h.content),null===(h=e.nextNode())&&(e.currentNode=c.pop(),h=e.nextNode());if(\"node\"===a.type){var j=this.processor.handleTextExpression(this.options);j.insertAfterNode(h.previousSibling),this.__parts.push(j)}else{var i;(i=this.__parts).push.apply(i,S(this.processor.handleAttributeExpressions(h,a.name,a.strings,this.options)))}f++}return Sa&&(document.adoptNode(b),customElements.upgrade(b)),b}}var kb=window.trustedTypes&&trustedTypes.createPolicy(\"lit-html\",{createHTML:a=>a}),lb=\" \".concat(Va,\" \");class mb{constructor(a,b,c,d){this.strings=a,this.values=b,this.type=c,this.processor=d}getHTML(){for(var a=this.strings.length-1,b=\"\",c=!1,d=0;d<a;d++){var e=this.strings[d],f=e.lastIndexOf(\"<!--\");c=(-1<f||c)&&-1===e.indexOf(\"-->\",f+1);var g=cb.exec(e);b+=null===g?e+(c?lb:Wa):e.substr(0,g.index)+g[1]+g[2]+Ya+g[3]+Va}return b+=this.strings[a],b}getTemplateElement(){var a=document.createElement(\"template\"),b=this.getHTML();return void 0!==kb&&(b=kb.createHTML(b)),a.innerHTML=b,a}}class nb extends mb{getHTML(){return\"<svg>\".concat(super.getHTML(),\"</svg>\")}getTemplateElement(){var a=super.getTemplateElement(),b=a.content,c=b.firstChild;return b.removeChild(c),Ta(b,c.firstChild),a}}var ob=a=>null===a||\"object\"!=typeof a&&\"function\"!=typeof a,pb=a=>Array.isArray(a)||!!(a&&a[Symbol.iterator]);class qb{constructor(a,b,c){this.dirty=!0,this.element=a,this.name=b,this.strings=c,this.parts=[];for(var d=0;d<c.length-1;d++)this.parts[d]=this._createPart()}_createPart(){return new rb(this)}_getValue(){var a=this.strings,b=a.length-1,c=this.parts;if(1===b&&\"\"===a[0]&&\"\"===a[1]){var f=c[0].value;if(\"symbol\"==typeof f)return f+\"\";if(\"string\"==typeof f||!pb(f))return f}for(var d=\"\",e=0;e<b;e++){d+=a[e];var g=c[e];if(void 0!==g){var h=g.value;if(ob(h)||!pb(h))d+=\"string\"==typeof h?h:h+\"\";else for(var j of h)d+=\"string\"==typeof j?j:j+\"\"}}return d+=a[b],d}commit(){this.dirty&&(this.dirty=!1,this.element.setAttribute(this.name,this._getValue()))}}class rb{constructor(a){this.value=void 0,this.committer=a}setValue(a){a===hb||ob(a)&&a===this.value||(this.value=a,!gb(a)&&(this.committer.dirty=!0))}commit(){for(;gb(this.value);){var a=this.value;this.value=hb,a(this)}this.value===hb||this.committer.commit()}}class sb{constructor(a){this.value=void 0,this.__pendingValue=void 0,this.options=a}appendInto(a){this.startNode=a.appendChild(bb()),this.endNode=a.appendChild(bb())}insertAfterNode(a){this.startNode=a,this.endNode=a.nextSibling}appendIntoPart(a){a.__insert(this.startNode=bb()),a.__insert(this.endNode=bb())}insertAfterPart(a){a.__insert(this.startNode=bb()),this.endNode=a.endNode,a.endNode=this.startNode}setValue(a){this.__pendingValue=a}commit(){if(null!==this.startNode.parentNode){for(;gb(this.__pendingValue);){var b=this.__pendingValue;this.__pendingValue=hb,b(this)}var a=this.__pendingValue;a===hb||(ob(a)?a!==this.value&&this.__commitText(a):a instanceof mb?this.__commitTemplateResult(a):a instanceof Node?this.__commitNode(a):pb(a)?this.__commitIterable(a):a===ib?(this.value=ib,this.clear()):this.__commitText(a))}}__insert(a){this.endNode.parentNode.insertBefore(a,this.endNode)}__commitNode(a){this.value===a||(this.clear(),this.__insert(a),this.value=a)}__commitText(a){var b=this.startNode.nextSibling;a=null==a?\"\":a;var c=\"string\"==typeof a?a:a+\"\";b===this.endNode.previousSibling&&3===b.nodeType?b.data=c:this.__commitNode(document.createTextNode(c)),this.value=a}__commitTemplateResult(a){var b=this.options.templateFactory(a);if(this.value instanceof jb&&this.value.template===b)this.value.update(a.values);else{var c=new jb(b,a.processor,this.options),d=c._clone();c.update(a.values),this.__commitNode(d),this.value=c}}__commitIterable(a){Array.isArray(this.value)||(this.value=[],this.clear());var b,c=this.value,d=0;for(var e of a)b=c[d],void 0===b&&(b=new sb(this.options),c.push(b),0===d?b.appendIntoPart(this):b.insertAfterPart(c[d-1])),b.setValue(e),b.commit(),d++;d<c.length&&(c.length=d,this.clear(b&&b.endNode))}clear(){var a=0<arguments.length&&arguments[0]!==void 0?arguments[0]:this.startNode;Ua(this.startNode.parentNode,a.nextSibling,this.endNode)}}class tb{constructor(a,b,c){if(this.value=void 0,this.__pendingValue=void 0,2!==c.length||\"\"!==c[0]||\"\"!==c[1])throw new Error(\"Boolean attributes can only contain a single expression\");this.element=a,this.name=b,this.strings=c}setValue(a){this.__pendingValue=a}commit(){for(;gb(this.__pendingValue);){var b=this.__pendingValue;this.__pendingValue=hb,b(this)}if(this.__pendingValue!==hb){var a=!!this.__pendingValue;this.value!==a&&(a?this.element.setAttribute(this.name,\"\"):this.element.removeAttribute(this.name),this.value=a),this.__pendingValue=hb}}}class ub extends qb{constructor(a,b,c){super(a,b,c),this.single=2===c.length&&\"\"===c[0]&&\"\"===c[1]}_createPart(){return new vb(this)}_getValue(){return this.single?this.parts[0].value:super._getValue()}commit(){this.dirty&&(this.dirty=!1,this.element[this.name]=this._getValue())}}class vb extends rb{}var wb=!1;(()=>{try{var a={get capture(){return wb=!0,!1}};window.addEventListener(\"test\",a,a),window.removeEventListener(\"test\",a,a)}catch(a){}})();class xb{constructor(a,b,c){this.value=void 0,this.__pendingValue=void 0,this.element=a,this.eventName=b,this.eventContext=c,this.__boundHandleEvent=a=>this.handleEvent(a)}setValue(a){this.__pendingValue=a}commit(){for(;gb(this.__pendingValue);){var d=this.__pendingValue;this.__pendingValue=hb,d(this)}if(this.__pendingValue!==hb){var a=this.__pendingValue,b=this.value,c=null==a||null!=b&&(a.capture!==b.capture||a.once!==b.once||a.passive!==b.passive);c&&this.element.removeEventListener(this.eventName,this.__boundHandleEvent,this.__options),null!=a&&(null==b||c)&&(this.__options=yb(a),this.element.addEventListener(this.eventName,this.__boundHandleEvent,this.__options)),this.value=a,this.__pendingValue=hb}}handleEvent(a){\"function\"==typeof this.value?this.value.call(this.eventContext||this.element,a):this.value.handleEvent(a)}}var yb=a=>a&&(wb?{capture:a.capture,passive:a.passive,once:a.once}:a.capture),zb=new Map,Ab=new WeakMap,Bb=(a,b,c)=>{var d=Ab.get(b);d===void 0&&(Ua(b,b.firstChild),Ab.set(b,d=new sb(Object.assign({templateFactory:T},c))),d.appendInto(b)),d.setValue(a),d.commit()};var Cb=new class a{handleAttributeExpressions(a,b,c,d){var e=b[0];if(\".\"===e){var g=new ub(a,b.slice(1),c);return g.parts}if(\"@\"===e)return[new xb(a,b.slice(1),d.eventContext)];if(\"?\"===e)return[new tb(a,b.slice(1),c)];var f=new qb(a,b,c);return f.parts}handleTextExpression(a){return new sb(a)}};\"undefined\"!=typeof window&&(window.litHtmlVersions||(window.litHtmlVersions=[])).push(\"1.3.0\");var Db=function(a){for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];return new mb(a,c,\"html\",Cb)},Eb=function(a){for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];return new nb(a,c,\"svg\",Cb)},Fb=(a,b)=>\"\".concat(a,\"--\").concat(b),Gb=!0;\"undefined\"==typeof window.ShadyCSS?Gb=!1:\"undefined\"==typeof window.ShadyCSS.prepareTemplateDom&&(console.warn(\"Incompatible ShadyCSS version detected. Please update to at least @webcomponents/webcomponentsjs@2.0.2 and @webcomponents/shadycss@1.3.1.\"),Gb=!1);var Hb,Ib=a=>b=>{var c=Fb(b.type,a),d=zb.get(c);void 0===d&&(d={stringsArray:new WeakMap,keyString:new Map},zb.set(c,d));var e=d.stringsArray.get(b.strings);if(void 0!==e)return e;var f=b.strings.join(Va);if(e=d.keyString.get(f),void 0===e){var g=b.getTemplateElement();Gb&&window.ShadyCSS.prepareTemplateDom(g,a),e=new Za(b,g),d.keyString.set(f,e)}return d.stringsArray.set(b.strings,e),e},Jb=[\"html\",\"svg\"],Kb=a=>{Jb.forEach(b=>{var c=zb.get(Fb(b,a));c!==void 0&&c.keyString.forEach(a=>{var{element:{content:b}}=a,c=new Set;Array.from(b.querySelectorAll(\"style\")).forEach(a=>{c.add(a)}),i(a,c)})})},Lb=new Set,Mb=(a,b,c)=>{Lb.add(a);var d=!c?document.createElement(\"template\"):c.element,e=b.querySelectorAll(\"style\"),{length:f}=e;if(0===f)return void window.ShadyCSS.prepareTemplateStyles(d,a);for(var g,h=document.createElement(\"style\"),j=0;j<f;j++)g=e[j],g.parentNode.removeChild(g),h.textContent+=g.textContent;Kb(a);var k=d.content;!c?k.insertBefore(h,k.firstChild):M(c,h,k.firstChild),window.ShadyCSS.prepareTemplateStyles(d,a);var l=k.querySelector(\"style\");if(window.ShadyCSS.nativeShadow&&null!==l)b.insertBefore(l.cloneNode(!0),b.firstChild);else if(!!c){k.insertBefore(h,k.firstChild);var m=new Set;m.add(h),i(c,m)}},Nb=(a,b,c)=>{if(!c||\"object\"!=typeof c||!c.scopeName)throw new Error(\"The `scopeName` option is required.\");var d=c.scopeName,e=Ab.has(b),f=Gb&&11===b.nodeType&&!!b.host,g=f&&!Lb.has(d),h=g?document.createDocumentFragment():b;if(Bb(a,h,Object.assign({templateFactory:Ib(d)},c)),g){var i=Ab.get(h);Ab.delete(h);var j=i.value instanceof jb?i.value.template:void 0;Mb(d,h,j),Ua(b,b.firstChild),b.appendChild(h),Ab.set(b,i)}!e&&f&&window.ShadyCSS.styleElement(b.host)};window.JSCompiler_renameProperty=a=>a;var Ob={toAttribute(a,b){return b===Boolean?a?\"\":null:b===Object||b===Array?null==a?a:JSON.stringify(a):a},fromAttribute(a,b){return b===Boolean?null!==a:b===Number?null===a?null:+a:b===Object||b===Array?JSON.parse(a):a}},Pb=(a,b)=>b!==a&&(b===b||a===a),Qb={attribute:!0,type:String,converter:Ob,reflect:!1,hasChanged:Pb},Rb=1,Sb=4,Tb=8,Ub=16,Vb=\"finalized\";class Wb extends HTMLElement{constructor(){super(),this.initialize()}static get observedAttributes(){this.finalize();var a=[];return this._classProperties.forEach((b,c)=>{var d=this._attributeNameForProperty(c,b);void 0!==d&&(this._attributeToPropertyMap.set(d,c),a.push(d))}),a}static _ensureClassProperties(){if(!this.hasOwnProperty(JSCompiler_renameProperty(\"_classProperties\",this))){this._classProperties=new Map;var a=Object.getPrototypeOf(this)._classProperties;a!==void 0&&a.forEach((a,b)=>this._classProperties.set(b,a))}}static createProperty(a){var b=1<arguments.length&&void 0!==arguments[1]?arguments[1]:Qb;if(this._ensureClassProperties(),this._classProperties.set(a,b),!(b.noAccessor||this.prototype.hasOwnProperty(a))){var c=\"symbol\"==typeof a?Symbol():\"__\".concat(a),d=this.getPropertyDescriptor(a,c,b);void 0!==d&&Object.defineProperty(this.prototype,a,d)}}static getPropertyDescriptor(a,b,c){return{get(){return this[b]},set(d){var e=this[a];this[b]=d,this.requestUpdateInternal(a,e,c)},configurable:!0,enumerable:!0}}static getPropertyOptions(a){return this._classProperties&&this._classProperties.get(a)||Qb}static finalize(){var a=Object.getPrototypeOf(this);if(a.hasOwnProperty(Vb)||a.finalize(),this[Vb]=!0,this._ensureClassProperties(),this._attributeToPropertyMap=new Map,this.hasOwnProperty(JSCompiler_renameProperty(\"properties\",this))){var b=this.properties,c=[].concat(S(Object.getOwnPropertyNames(b)),S(\"function\"==typeof Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(b):[]));for(var d of c)this.createProperty(d,b[d])}}static _attributeNameForProperty(a,b){var c=b.attribute;return!1===c?void 0:\"string\"==typeof c?c:\"string\"==typeof a?a.toLowerCase():void 0}static _valueHasChanged(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:Pb;return c(a,b)}static _propertyValueFromAttribute(a,b){var c=b.type,d=b.converter||Ob,e=\"function\"==typeof d?d:d.fromAttribute;return e?e(a,c):a}static _propertyValueToAttribute(a,b){if(void 0!==b.reflect){var c=b.type,d=b.converter,e=d&&d.toAttribute||Ob.toAttribute;return e(a,c)}}initialize(){this._updateState=0,this._updatePromise=new Promise(a=>this._enableUpdatingResolver=a),this._changedProperties=new Map,this._saveInstanceProperties(),this.requestUpdateInternal()}_saveInstanceProperties(){this.constructor._classProperties.forEach((a,b)=>{if(this.hasOwnProperty(b)){var c=this[b];delete this[b],this._instanceProperties||(this._instanceProperties=new Map),this._instanceProperties.set(b,c)}})}_applyInstanceProperties(){this._instanceProperties.forEach((a,b)=>this[b]=a),this._instanceProperties=void 0}connectedCallback(){this.enableUpdating()}enableUpdating(){this._enableUpdatingResolver!==void 0&&(this._enableUpdatingResolver(),this._enableUpdatingResolver=void 0)}disconnectedCallback(){}attributeChangedCallback(a,b,c){b!==c&&this._attributeToProperty(a,c)}_propertyToAttribute(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:Qb,d=this.constructor,e=d._attributeNameForProperty(a,c);if(e!==void 0){var f=d._propertyValueToAttribute(b,c);if(f===void 0)return;this._updateState|=Tb,null==f?this.removeAttribute(e):this.setAttribute(e,f),this._updateState&=~Tb}}_attributeToProperty(a,b){if(!(this._updateState&Tb)){var c=this.constructor,d=c._attributeToPropertyMap.get(a);if(void 0!==d){var e=c.getPropertyOptions(d);this._updateState|=Ub,this[d]=c._propertyValueFromAttribute(b,e),this._updateState&=~Ub}}}requestUpdateInternal(a,b,c){var d=!0;if(a!==void 0){var e=this.constructor;c=c||e.getPropertyOptions(a),e._valueHasChanged(this[a],b,c.hasChanged)?(!this._changedProperties.has(a)&&this._changedProperties.set(a,b),!0===c.reflect&&!(this._updateState&Ub)&&(this._reflectingProperties===void 0&&(this._reflectingProperties=new Map),this._reflectingProperties.set(a,c))):d=!1}!this._hasRequestedUpdate&&d&&(this._updatePromise=this._enqueueUpdate())}requestUpdate(a,b){return this.requestUpdateInternal(a,b),this.updateComplete}_enqueueUpdate(){var a=this;return R(function*(){a._updateState|=Sb;try{yield a._updatePromise}catch(a){}var b=a.performUpdate();return null!=b&&(yield b),!a._hasRequestedUpdate})()}get _hasRequestedUpdate(){return this._updateState&Sb}get hasUpdated(){return this._updateState&Rb}performUpdate(){if(this._hasRequestedUpdate){this._instanceProperties&&this._applyInstanceProperties();var a=!1,b=this._changedProperties;try{a=this.shouldUpdate(b),a?this.update(b):this._markUpdated()}catch(b){throw a=!1,this._markUpdated(),b}a&&(!(this._updateState&Rb)&&(this._updateState|=Rb,this.firstUpdated(b)),this.updated(b))}}_markUpdated(){this._changedProperties=new Map,this._updateState&=~Sb}get updateComplete(){return this._getUpdateComplete()}_getUpdateComplete(){return this._updatePromise}shouldUpdate(){return!0}update(){this._reflectingProperties!==void 0&&0<this._reflectingProperties.size&&(this._reflectingProperties.forEach((a,b)=>this._propertyToAttribute(b,this[b],a)),this._reflectingProperties=void 0),this._markUpdated()}updated(){}firstUpdated(){}}Hb=Vb,Wb[Hb]=!0;var Xb=window.ShadowRoot&&(window.ShadyCSS===void 0||window.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,Yb=Symbol();class Zb{constructor(a,b){if(b!==Yb)throw new Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=a}get styleSheet(){return void 0===this._styleSheet&&(Xb?(this._styleSheet=new CSSStyleSheet,this._styleSheet.replaceSync(this.cssText)):this._styleSheet=null),this._styleSheet}toString(){return this.cssText}}var $b=a=>new Zb(a+\"\",Yb),_b=a=>{if(a instanceof Zb)return a.cssText;if(\"number\"==typeof a)return a;throw new Error(\"Value passed to 'css' function must be a 'css' function result: \".concat(a,\". Use 'unsafeCSS' to pass non-literal values, but\\n            take care to ensure page security.\"))};(window.litElementVersions||(window.litElementVersions=[])).push(\"2.4.0\");var ac={};class bc extends Wb{static getStyles(){return this.styles}static _getUniqueStyles(){if(!this.hasOwnProperty(JSCompiler_renameProperty(\"_styles\",this))){var a=this.getStyles();if(Array.isArray(a)){var b=(a,c)=>a.reduceRight((a,c)=>Array.isArray(c)?b(c,a):(a.add(c),a),c),c=b(a,new Set),d=[];c.forEach(a=>d.unshift(a)),this._styles=d}else this._styles=void 0===a?[]:[a];this._styles=this._styles.map(a=>{if(a instanceof CSSStyleSheet&&!Xb){var b=Array.prototype.slice.call(a.cssRules).reduce((a,b)=>a+b.cssText,\"\");return $b(b)}return a})}}initialize(){super.initialize(),this.constructor._getUniqueStyles(),this.renderRoot=this.createRenderRoot(),window.ShadowRoot&&this.renderRoot instanceof window.ShadowRoot&&this.adoptStyles()}createRenderRoot(){return this.attachShadow({mode:\"open\"})}adoptStyles(){var a=this.constructor._styles;0===a.length||(window.ShadyCSS===void 0||window.ShadyCSS.nativeShadow?Xb?this.renderRoot.adoptedStyleSheets=a.map(a=>a instanceof CSSStyleSheet?a:a.styleSheet):this._needsShimAdoptedStyleSheets=!0:window.ShadyCSS.ScopingShim.prepareAdoptedCssText(a.map(a=>a.cssText),this.localName))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&window.ShadyCSS!==void 0&&window.ShadyCSS.styleElement(this)}update(a){var b=this.render();super.update(a),b!==ac&&this.constructor.render(b,this.renderRoot,{scopeName:this.localName,eventContext:this}),this._needsShimAdoptedStyleSheets&&(this._needsShimAdoptedStyleSheets=!1,this.constructor._styles.forEach(a=>{var b=document.createElement(\"style\");b.textContent=a.cssText,this.renderRoot.appendChild(b)}))}render(){return ac}}bc.finalized=!0,bc.render=Nb;var cc=function(){try{if(\"undefined\"!=typeof indexedDB)return indexedDB;if(\"undefined\"!=typeof webkitIndexedDB)return webkitIndexedDB;if(\"undefined\"!=typeof mozIndexedDB)return mozIndexedDB;if(\"undefined\"!=typeof OIndexedDB)return OIndexedDB;if(\"undefined\"!=typeof msIndexedDB)return msIndexedDB}catch(a){}}();\"undefined\"==typeof Promise&&require(\"lie/polyfill\");var dc,ec=Promise,fc={},gc=Object.prototype.toString,hc={_driver:\"asyncStorage\",_initStorage:function(a){function b(){return ec.resolve()}var c=this,d={db:null};if(a)for(var e in a)d[e]=a[e];var f=fc[d.name];f||(f=qa(),fc[d.name]=f),f.forages.push(c),c._initReady||(c._initReady=c.ready,c.ready=na);for(var g,h=[],i=0;i<f.forages.length;i++)g=f.forages[i],g!==c&&h.push(g._initReady().catch(b));var l=f.forages.slice(0);return ec.all(h).then(function(){return d.db=f.db,ha(d)}).then(function(a){return d.db=a,ja(d,c._defaultConfig.version)?ia(d):a}).then(function(a){d.db=f.db=a,c._dbInfo=d;for(var b,e=0;e<l.length;e++)b=l[e],b!==c&&(b._dbInfo.db=d.db,b._dbInfo.version=d.version)})},_support:function(){try{if(!cc||!cc.open)return!1;var a=\"undefined\"!=typeof openDatabase&&/(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)&&!/BlackBerry/.test(navigator.platform),b=\"function\"==typeof fetch&&-1!==fetch.toString().indexOf(\"[native code\");return(!a||b)&&\"undefined\"!=typeof indexedDB&&\"undefined\"!=typeof IDBKeyRange}catch(a){return!1}}(),iterate:function(a,b){var c=this,d=new ec(function(b,d){c.ready().then(function(){pa(c._dbInfo,\"readonly\",function(e,f){if(e)return d(e);try{var g=f.objectStore(c._dbInfo.storeName),h=g.openCursor(),i=1;h.onsuccess=function(){var c=h.result;if(c){var d=c.value;ma(d)&&(d=la(d));var e=a(d,c.key,i++);void 0===e?c.continue():b(e)}else b()},h.onerror=function(){d(h.error)}}catch(a){d(a)}})}).catch(d)});return W(d,b),d},getItem:function(a,b){var c=this;a=$(a);var d=new ec(function(b,d){c.ready().then(function(){pa(c._dbInfo,\"readonly\",function(e,f){if(e)return d(e);try{var g=f.objectStore(c._dbInfo.storeName),h=g.get(a);h.onsuccess=function(){var a=h.result;void 0===a&&(a=null),ma(a)&&(a=la(a)),b(a)},h.onerror=function(){d(h.error)}}catch(a){d(a)}})}).catch(d)});return W(d,b),d},setItem:function(a,b,c){var d=this;a=$(a);var e=new ec(function(c,f){var g;d.ready().then(function(){return g=d._dbInfo,\"[object Blob]\"===gc.call(b)?ca(g.db).then(function(a){return a?b:ka(b)}):b}).then(function(b){pa(d._dbInfo,\"readwrite\",function(e,g){if(e)return f(e);try{var h=g.objectStore(d._dbInfo.storeName);null===b&&(b=void 0);var i=h.put(b,a);g.oncomplete=function(){void 0===b&&(b=null),c(b)},g.onabort=g.onerror=function(){var a=i.error?i.error:i.transaction.error;f(a)}}catch(a){f(a)}})}).catch(f)});return W(e,c),e},removeItem:function(a,b){var c=this;a=$(a);var d=new ec(function(b,d){c.ready().then(function(){pa(c._dbInfo,\"readwrite\",function(e,f){if(e)return d(e);try{var g=f.objectStore(c._dbInfo.storeName),h=g.delete(a);f.oncomplete=function(){b()},f.onerror=function(){d(h.error)},f.onabort=function(){var a=h.error?h.error:h.transaction.error;d(a)}}catch(a){d(a)}})}).catch(d)});return W(d,b),d},clear:function(a){var b=this,c=new ec(function(a,c){b.ready().then(function(){pa(b._dbInfo,\"readwrite\",function(d,e){if(d)return c(d);try{var f=e.objectStore(b._dbInfo.storeName),g=f.clear();e.oncomplete=function(){a()},e.onabort=e.onerror=function(){var a=g.error?g.error:g.transaction.error;c(a)}}catch(a){c(a)}})}).catch(c)});return W(c,a),c},length:function(a){var b=this,c=new ec(function(a,c){b.ready().then(function(){pa(b._dbInfo,\"readonly\",function(d,e){if(d)return c(d);try{var f=e.objectStore(b._dbInfo.storeName),g=f.count();g.onsuccess=function(){a(g.result)},g.onerror=function(){c(g.error)}}catch(a){c(a)}})}).catch(c)});return W(c,a),c},key:function(a,b){var c=this,d=new ec(function(b,d){return 0>a?void b(null):void c.ready().then(function(){pa(c._dbInfo,\"readonly\",function(e,f){if(e)return d(e);try{var g=f.objectStore(c._dbInfo.storeName),h=!1,i=g.openKeyCursor();i.onsuccess=function(){var c=i.result;return c?void(0===a?b(c.key):h?b(c.key):(h=!0,c.advance(a))):void b(null)},i.onerror=function(){d(i.error)}}catch(a){d(a)}})}).catch(d)});return W(d,b),d},keys:function(a){var b=this,c=new ec(function(a,c){b.ready().then(function(){pa(b._dbInfo,\"readonly\",function(d,e){if(d)return c(d);try{var f=e.objectStore(b._dbInfo.storeName),g=f.openKeyCursor(),h=[];g.onsuccess=function(){var b=g.result;return b?void(h.push(b.key),b.continue()):void a(h)},g.onerror=function(){c(g.error)}}catch(a){c(a)}})}).catch(c)});return W(c,a),c},dropInstance:function(a,b){b=_.apply(this,arguments);var c=this.config();a=\"function\"!=typeof a&&a||{},a.name||(a.name=a.name||c.name,a.storeName=a.storeName||c.storeName);var d,e=this;if(!a.name)d=ec.reject(\"Invalid arguments\");else{var f=a.name===c.name&&e._dbInfo.db,g=f?ec.resolve(e._dbInfo.db):ha(a).then(b=>{var c=fc[a.name],d=c.forages;c.db=b;for(var e=0;e<d.length;e++)d[e]._dbInfo.db=b;return b});d=a.storeName?g.then(b=>{if(b.objectStoreNames.contains(a.storeName)){var c=b.version+1;da(a);var d=fc[a.name],e=d.forages;b.close();for(var g,h=0;h<e.length;h++)g=e[h],g._dbInfo.db=null,g._dbInfo.version=c;var f=new ec((b,d)=>{var e=cc.open(a.name,c);e.onerror=a=>{var b=e.result;b.close(),d(a)},e.onupgradeneeded=()=>{var b=e.result;b.deleteObjectStore(a.storeName)},e.onsuccess=()=>{var a=e.result;a.close(),b(a)}});return f.then(a=>{d.db=a;for(var b,c=0;c<e.length;c++)b=e[c],b._dbInfo.db=a,ea(b._dbInfo)}).catch(b=>{throw(fa(a,b)||ec.resolve()).catch(()=>{}),b})}}):g.then(b=>{da(a);var c=fc[a.name],d=c.forages;b.close();for(var e,f=0;f<d.length;f++)e=d[f],e._dbInfo.db=null;var g=new ec((b,c)=>{var d=cc.deleteDatabase(a.name);d.onerror=d.onblocked=a=>{var b=d.result;b&&b.close(),c(a)},d.onsuccess=()=>{var a=d.result;a&&a.close(),b(a)}});return g.then(a=>{c.db=a;for(var b,e=0;e<d.length;e++)b=d[e],ea(b._dbInfo)}).catch(b=>{throw(fa(a,b)||ec.resolve()).catch(()=>{}),b})})}return W(d,b),d}},ic=/^~~local_forage_type~([^~]+)~/,jc=\"__lfsc__:\".length,kc=jc+\"arbf\".length,lc=Object.prototype.toString,mc={serialize:function(a,b){var c=\"\";if(a&&(c=lc.call(a)),a&&(\"[object ArrayBuffer]\"===c||a.buffer&&\"[object ArrayBuffer]\"===lc.call(a.buffer))){var d,e=\"__lfsc__:\";a instanceof ArrayBuffer?(d=a,e+=\"arbf\"):(d=a.buffer,\"[object Int8Array]\"===c?e+=\"si08\":\"[object Uint8Array]\"===c?e+=\"ui08\":\"[object Uint8ClampedArray]\"===c?e+=\"uic8\":\"[object Int16Array]\"===c?e+=\"si16\":\"[object Uint16Array]\"===c?e+=\"ur16\":\"[object Int32Array]\"===c?e+=\"si32\":\"[object Uint32Array]\"===c?e+=\"ui32\":\"[object Float32Array]\"===c?e+=\"fl32\":\"[object Float64Array]\"===c?e+=\"fl64\":b(new Error(\"Failed to get type for BinaryArray\"))),b(e+sa(d))}else if(\"[object Blob]\"===c){var f=new FileReader;f.onload=function(){var c=\"~~local_forage_type~\"+a.type+\"~\"+sa(this.result);b(\"__lfsc__:blob\"+c)},f.readAsArrayBuffer(a)}else try{b(JSON.stringify(a))}catch(c){console.error(\"Couldn't convert value into a JSON string: \",a),b(null,c)}},deserialize:function(a){if(a.substring(0,jc)!==\"__lfsc__:\")return JSON.parse(a);var b,c=a.substring(kc),d=a.substring(jc,kc);if(d===\"blob\"&&ic.test(c)){var e=c.match(ic);b=e[1],c=c.substring(e[0].length)}var f=ra(c);switch(d){case\"arbf\":return f;case\"blob\":return U([f],{type:b});case\"si08\":return new Int8Array(f);case\"ui08\":return new Uint8Array(f);case\"uic8\":return new Uint8ClampedArray(f);case\"si16\":return new Int16Array(f);case\"ur16\":return new Uint16Array(f);case\"si32\":return new Int32Array(f);case\"ui32\":return new Uint32Array(f);case\"fl32\":return new Float32Array(f);case\"fl64\":return new Float64Array(f);default:throw new Error(\"Unkown type: \"+d);}},stringToBuffer:ra,bufferToString:sa},nc={_driver:\"webSQLStorage\",_initStorage:function(a){var b=this,c={db:null};if(a)for(var d in a)c[d]=\"string\"==typeof a[d]?a[d]:a[d].toString();var e=new ec(function(a,d){try{c.db=openDatabase(c.name,c.version+\"\",c.description,c.size)}catch(a){return d(a)}c.db.transaction(function(e){ta(e,c,function(){b._dbInfo=c,a()},function(a,b){d(b)})},d)});return c.serializer=mc,e},_support:function(){return\"function\"==typeof openDatabase}(),iterate:function(a,b){var c=this,d=new ec(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){ua(c,e,\"SELECT * FROM \".concat(e.storeName),[],function(c,d){for(var f=d.rows,g=f.length,h=0;h<g;h++){var j=f.item(h),k=j.value;if(k&&(k=e.serializer.deserialize(k)),k=a(k,j.key,h+1),void 0!==k)return void b(k)}b()},function(a,b){d(b)})})}).catch(d)});return W(d,b),d},getItem:function(a,b){var c=this;a=$(a);var d=new ec(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){ua(c,e,\"SELECT * FROM \".concat(e.storeName,\" WHERE key = ? LIMIT 1\"),[a],function(a,c){var d=c.rows.length?c.rows.item(0).value:null;d&&(d=e.serializer.deserialize(d)),b(d)},function(a,b){d(b)})})}).catch(d)});return W(d,b),d},setItem:function(a,b,c){return va.apply(this,[a,b,c,1])},removeItem:function(a,b){var c=this;a=$(a);var d=new ec(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){ua(c,e,\"DELETE FROM \".concat(e.storeName,\" WHERE key = ?\"),[a],function(){b()},function(a,b){d(b)})})}).catch(d)});return W(d,b),d},clear:function(a){var b=this,c=new ec(function(a,c){b.ready().then(function(){var d=b._dbInfo;d.db.transaction(function(b){ua(b,d,\"DELETE FROM \".concat(d.storeName),[],function(){a()},function(a,b){c(b)})})}).catch(c)});return W(c,a),c},length:function(a){var b=this,c=new ec(function(a,c){b.ready().then(function(){var d=b._dbInfo;d.db.transaction(function(b){ua(b,d,\"SELECT COUNT(key) as c FROM \".concat(d.storeName),[],function(b,c){var d=c.rows.item(0).c;a(d)},function(a,b){c(b)})})}).catch(c)});return W(c,a),c},key:function(a,b){var c=this,d=new ec(function(b,d){c.ready().then(function(){var e=c._dbInfo;e.db.transaction(function(c){ua(c,e,\"SELECT key FROM \".concat(e.storeName,\" WHERE id = ? LIMIT 1\"),[a+1],function(a,c){var d=c.rows.length?c.rows.item(0).key:null;b(d)},function(a,b){d(b)})})}).catch(d)});return W(d,b),d},keys:function(a){var b=this,c=new ec(function(a,c){b.ready().then(function(){var d=b._dbInfo;d.db.transaction(function(b){ua(b,d,\"SELECT key FROM \".concat(d.storeName),[],function(b,c){for(var d=[],e=0;e<c.rows.length;e++)d.push(c.rows.item(e).key);a(d)},function(a,b){c(b)})})}).catch(c)});return W(c,a),c},dropInstance:function(a,b){b=_.apply(this,arguments);var c=this.config();a=\"function\"!=typeof a&&a||{},a.name||(a.name=a.name||c.name,a.storeName=a.storeName||c.storeName);var d,e=this;return d=a.name?new ec(function(b){var d;d=a.name===c.name?e._dbInfo.db:openDatabase(a.name,\"\",\"\",0),a.storeName?b({db:d,storeNames:[a.storeName]}):b(wa(d))}).then(function(a){return new ec(function(b,c){a.db.transaction(function(d){function e(a){return new ec(function(b,c){d.executeSql(\"DROP TABLE IF EXISTS \".concat(a),[],function(){b()},function(a,b){c(b)})})}for(var f=[],g=0,h=a.storeNames.length;g<h;g++)f.push(e(a.storeNames[g]));ec.all(f).then(function(){b()}).catch(function(a){c(a)})},function(a){c(a)})})}):ec.reject(\"Invalid arguments\"),W(d,b),d}},oc={_driver:\"localStorageWrapper\",_initStorage:function(a){var b=this,c={};if(a)for(var d in a)c[d]=a[d];return(c.keyPrefix=ya(a,b._defaultConfig),!Aa())?ec.reject():(b._dbInfo=c,c.serializer=mc,ec.resolve())},_support:xa(),iterate:function(a,b){var c=this,d=c.ready().then(function(){for(var b,d=c._dbInfo,e=d.keyPrefix,f=e.length,g=localStorage.length,h=1,j=0;j<g;j++)if(b=localStorage.key(j),0===b.indexOf(e)){var k=localStorage.getItem(b);if(k&&(k=d.serializer.deserialize(k)),k=a(k,b.substring(f),h++),void 0!==k)return k}});return W(d,b),d},getItem:function(a,b){var c=this;a=$(a);var d=c.ready().then(function(){var b=c._dbInfo,d=localStorage.getItem(b.keyPrefix+a);return d&&(d=b.serializer.deserialize(d)),d});return W(d,b),d},setItem:function(a,b,c){var d=this;a=$(a);var e=d.ready().then(function(){void 0===b&&(b=null);var c=b;return new ec(function(e,f){var g=d._dbInfo;g.serializer.serialize(b,function(b,d){if(d)f(d);else try{localStorage.setItem(g.keyPrefix+a,b),e(c)}catch(a){(\"QuotaExceededError\"===a.name||\"NS_ERROR_DOM_QUOTA_REACHED\"===a.name)&&f(a),f(a)}})})});return W(e,c),e},removeItem:function(a,b){var c=this;a=$(a);var d=c.ready().then(function(){var b=c._dbInfo;localStorage.removeItem(b.keyPrefix+a)});return W(d,b),d},clear:function(a){var b=this,c=b.ready().then(function(){for(var a,c=b._dbInfo.keyPrefix,d=localStorage.length-1;0<=d;d--)a=localStorage.key(d),0===a.indexOf(c)&&localStorage.removeItem(a)});return W(c,a),c},length:function(a){var b=this,c=b.keys().then(function(a){return a.length});return W(c,a),c},key:function(a,b){var c=this,d=c.ready().then(function(){var b,d=c._dbInfo;try{b=localStorage.key(a)}catch(a){b=null}return b&&(b=b.substring(d.keyPrefix.length)),b});return W(d,b),d},keys:function(a){var b=this,c=b.ready().then(function(){for(var a,c=b._dbInfo,d=localStorage.length,e=[],f=0;f<d;f++)a=localStorage.key(f),0===a.indexOf(c.keyPrefix)&&e.push(a.substring(c.keyPrefix.length));return e});return W(c,a),c},dropInstance:function(a,b){if(b=_.apply(this,arguments),a=\"function\"!=typeof a&&a||{},!a.name){var c=this.config();a.name=a.name||c.name,a.storeName=a.storeName||c.storeName}var d,e=this;return d=a.name?new ec(function(b){a.storeName?b(ya(a,e._defaultConfig)):b(\"\".concat(a.name,\"/\"))}).then(function(a){for(var b,c=localStorage.length-1;0<=c;c--)b=localStorage.key(c),0===b.indexOf(a)&&localStorage.removeItem(b)}):ec.reject(\"Invalid arguments\"),W(d,b),d}},pc=(a,b)=>a===b||\"number\"==typeof a&&\"number\"==typeof b&&isNaN(a)&&isNaN(b),qc=(a,b)=>{for(var c=a.length,d=0;d<c;){if(pc(a[d],b))return!0;d++}return!1},rc=Array.isArray||function(a){return\"[object Array]\"===Object.prototype.toString.call(a)},sc={},tc={},uc={INDEXEDDB:hc,WEBSQL:nc,LOCALSTORAGE:oc},vc=[uc.INDEXEDDB._driver,uc.WEBSQL._driver,uc.LOCALSTORAGE._driver],wc=[\"dropInstance\"],xc=[\"clear\",\"getItem\",\"iterate\",\"key\",\"keys\",\"length\",\"removeItem\",\"setItem\"].concat(wc),yc={description:\"\",driver:vc.slice(),name:\"localforage\",size:4980736,storeName:\"keyvaluepairs\",version:1};class zc{constructor(a){for(var d in uc)if(uc.hasOwnProperty(d)){var b=uc[d],c=b._driver;this[d]=c,sc[c]||this.defineDriver(b)}this._defaultConfig=Ca({},yc),this._config=Ca({},this._defaultConfig,a),this._driverSet=null,this._initDriver=null,this._ready=!1,this._dbInfo=null,this._wrapLibraryMethodsWithReady(),this.setDriver(this._config.driver).catch(()=>{})}config(a){if(\"object\"==typeof a){if(this._ready)return new Error(\"Can't call config() after localforage has been used.\");for(var b in a){if(\"storeName\"==b&&(a[b]=a[b].replace(/\\W/g,\"_\")),\"version\"==b&&\"number\"!=typeof a[b])return new Error(\"Database version must be a number.\");this._config[b]=a[b]}return!(\"driver\"in a&&a.driver)||this.setDriver(this._config.driver)}return\"string\"==typeof a?this._config[a]:this._config}defineDriver(a,b,c){var d=new ec(function(b,c){try{var d=a._driver,e=new Error(\"Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver\");if(!a._driver)return void c(e);for(var f=xc.concat(\"_initStorage\"),g=0,h=f.length;g<h;g++){var j=f[g],k=!qc(wc,j);if((k||a[j])&&\"function\"!=typeof a[j])return void c(e)}(function configureMissingMethods(){for(var b,c=function(a){return function(){var b=new Error(\"Method \".concat(a,\" is not implemented by the current driver\")),c=ec.reject(b);return W(c,arguments[arguments.length-1]),c}},d=0,e=wc.length;d<e;d++)b=wc[d],a[b]||(a[b]=c(b))})();var l=function(c){sc[d]&&console.info(\"Redefining LocalForage driver: \".concat(d)),sc[d]=a,tc[d]=c,b()};\"_support\"in a?a._support&&\"function\"==typeof a._support?a._support().then(l,c):l(!!a._support):l(!0)}catch(a){c(a)}});return Z(d,b,c),d}driver(){return this._driver||null}getDriver(a,b,c){var d=sc[a]?ec.resolve(sc[a]):ec.reject(new Error(\"Driver not found.\"));return Z(d,b,c),d}getSerializer(a){var b=ec.resolve(mc);return Z(b,a),b}ready(a){var b=this,c=b._driverSet.then(()=>(null===b._ready&&(b._ready=b._initDriver()),b._ready));return Z(c,a,a),c}setDriver(a,b,c){function d(){g._config.driver=g.driver()}function e(a){return g._extend(a),d(),g._ready=g._initStorage(g._config),g._ready}function f(a){return function(){function b(){for(;c<a.length;){var h=a[c];return c++,g._dbInfo=null,g._ready=null,g.getDriver(h).then(e).catch(b)}d();var f=new Error(\"No available storage method found.\");return g._driverSet=ec.reject(f),g._driverSet}var c=0;return b()}}var g=this;rc(a)||(a=[a]);var h=this._getSupportedDrivers(a),i=null===this._driverSet?ec.resolve():this._driverSet.catch(()=>ec.resolve());return this._driverSet=i.then(()=>{var a=h[0];return g._dbInfo=null,g._ready=null,g.getDriver(a).then(a=>{g._driver=a._driver,d(),g._wrapLibraryMethodsWithReady(),g._initDriver=f(h)})}).catch(()=>{d();var a=new Error(\"No available storage method found.\");return g._driverSet=ec.reject(a),g._driverSet}),Z(this._driverSet,b,c),this._driverSet}supports(a){return!!tc[a]}_extend(a){Ca(this,a)}_getSupportedDrivers(a){for(var b,c=[],d=0,e=a.length;d<e;d++)b=a[d],this.supports(b)&&c.push(b);return c}_wrapLibraryMethodsWithReady(){for(var a=0,b=xc.length;a<b;a++)Ba(this,xc[a])}createInstance(a){return new zc(a)}}var Ac=new zc,Bc=/d{1,4}|M{1,4}|YY(?:YY)?|S{1,3}|Do|ZZ|Z|([HhMsDm])\\1?|[aA]|\"[^\"]*\"|'[^']*'/g,Cc=\"[1-9]\\\\d?\",Dc=\"\\\\d\\\\d\",Ec=\"[^\\\\s]+\",Fc=/\\[([^]*?)\\]/gm,Gc=function(a){return function(b,c){var d=c[a].map(function(a){return a.toLowerCase()}),e=d.indexOf(b.toLowerCase());return-1<e?e:null}},Hc=[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],Ic=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],Jc=Da(Ic,3),Kc=Da(Hc,3),Lc={dayNamesShort:Kc,dayNames:Hc,monthNamesShort:Jc,monthNames:Ic,amPm:[\"am\",\"pm\"],DoFn:function(a){return a+[\"th\",\"st\",\"nd\",\"rd\"][3<a%10?0:(10==a-a%10?0:1)*a%10]}},Mc=Ea({},Lc),Nc=function(a){return Mc=Ea(Mc,a)},Oc=function(a){return a.replace(/[|\\\\{()[^$+*?.-]/g,\"\\\\$&\")},Pc=function(a,b){for(void 0===b&&(b=2),a+=\"\";a.length<b;)a=\"0\"+a;return a},Qc={D:function(a){return a.getDate()+\"\"},DD:function(a){return Pc(a.getDate())},Do:function(a,b){return b.DoFn(a.getDate())},d:function(a){return a.getDay()+\"\"},dd:function(a){return Pc(a.getDay())},ddd:function(a,b){return b.dayNamesShort[a.getDay()]},dddd:function(a,b){return b.dayNames[a.getDay()]},M:function(a){return a.getMonth()+1+\"\"},MM:function(a){return Pc(a.getMonth()+1)},MMM:function(a,b){return b.monthNamesShort[a.getMonth()]},MMMM:function(a,b){return b.monthNames[a.getMonth()]},YY:function(a){return Pc(a.getFullYear()+\"\",4).substr(2)},YYYY:function(a){return Pc(a.getFullYear(),4)},h:function(a){return(a.getHours()%12||12)+\"\"},hh:function(a){return Pc(a.getHours()%12||12)},H:function(a){return a.getHours()+\"\"},HH:function(a){return Pc(a.getHours())},m:function(a){return a.getMinutes()+\"\"},mm:function(a){return Pc(a.getMinutes())},s:function(a){return a.getSeconds()+\"\"},ss:function(a){return Pc(a.getSeconds())},S:function(a){return Ra(a.getMilliseconds()/100)+\"\"},SS:function(a){return Pc(Ra(a.getMilliseconds()/10),2)},SSS:function(a){return Pc(a.getMilliseconds(),3)},a:function(a,b){return 12>a.getHours()?b.amPm[0]:b.amPm[1]},A:function(a,b){return 12>a.getHours()?b.amPm[0].toUpperCase():b.amPm[1].toUpperCase()},ZZ:function(a){var b=a.getTimezoneOffset();return(0<b?\"-\":\"+\")+Pc(100*Pa(Qa(b)/60)+Qa(b)%60,4)},Z:function(a){var b=a.getTimezoneOffset();return(0<b?\"-\":\"+\")+Pc(Pa(Qa(b)/60),2)+\":\"+Pc(Qa(b)%60,2)}},Rc=function(a){return+a-1},Sc=[null,Cc],Tc=[null,Ec],Uc=[\"isPm\",Ec,function(a,b){var c=a.toLowerCase();if(c===b.amPm[0])return 0;return c===b.amPm[1]?1:null}],Vc=[\"timezoneOffset\",\"[^\\\\s]*?[\\\\+\\\\-]\\\\d\\\\d:?\\\\d\\\\d|[^\\\\s]*?Z?\",function(a){var b=(a+\"\").match(/([+-]|\\d\\d)/gi);if(b){var c=60*+b[1]+parseInt(b[2],10);return\"+\"===b[0]?c:-c}return 0}],Wc={D:[\"day\",Cc],DD:[\"day\",Dc],Do:[\"day\",Cc+Ec,function(a){return parseInt(a,10)}],M:[\"month\",Cc,Rc],MM:[\"month\",Dc,Rc],YY:[\"year\",Dc,function(a){var b=new Date,c=+(\"\"+b.getFullYear()).substr(0,2);return+(\"\"+(68<+a?c-1:c)+a)}],h:[\"hour\",Cc,void 0,\"isPm\"],hh:[\"hour\",Dc,void 0,\"isPm\"],H:[\"hour\",Cc],HH:[\"hour\",Dc],m:[\"minute\",Cc],mm:[\"minute\",Dc],s:[\"second\",Cc],ss:[\"second\",Dc],YYYY:[\"year\",\"\\\\d{4}\"],S:[\"millisecond\",\"\\\\d\",function(a){return 100*+a}],SS:[\"millisecond\",Dc,function(a){return 10*+a}],SSS:[\"millisecond\",\"\\\\d{3}\"],d:Sc,dd:Sc,ddd:Tc,dddd:Tc,MMM:[\"month\",Ec,Gc(\"monthNamesShort\")],MMMM:[\"month\",Ec,Gc(\"monthNames\")],a:Uc,A:Uc,ZZ:Vc,Z:Vc},Xc={default:\"ddd MMM DD YYYY HH:mm:ss\",shortDate:\"M/D/YY\",mediumDate:\"MMM D, YYYY\",longDate:\"MMMM D, YYYY\",fullDate:\"dddd, MMMM D, YYYY\",isoDate:\"YYYY-MM-DD\",isoDateTime:\"YYYY-MM-DDTHH:mm:ssZ\",shortTime:\"HH:mm\",mediumTime:\"HH:mm:ss\",longTime:\"HH:mm:ss.SSS\"},Yc=function(a,b,c){if(void 0===b&&(b=Xc[\"default\"]),void 0===c&&(c={}),\"number\"==typeof a&&(a=new Date(a)),\"[object Date]\"!==Object.prototype.toString.call(a)||isNaN(a.getTime()))throw new Error(\"Invalid Date pass to format\");b=Xc[b]||b;var d=[];b=b.replace(Fc,function(a,b){return d.push(b),\"@@@\"});var e=Ea(Ea({},Mc),c);return b=b.replace(Bc,function(b){return Qc[b](a,e)}),b.replace(/@@@/g,function(){return d.shift()})},Zc={format:Yc,parse:Fa,defaultI18n:Lc,setGlobalDateI18n:Nc,setGlobalDateMasks:function setGlobalDateMasks(a){return Ea(Xc,a)}},$c=function(){try{new Date().toLocaleDateString(\"i\")}catch(a){return\"RangeError\"===a.name}return!1}()?function(a,b){return a.toLocaleDateString(b,{year:\"numeric\",month:\"long\",day:\"numeric\"})}:function(a){return Zc.format(a,\"mediumDate\")},_c=function(){try{new Date().toLocaleString(\"i\")}catch(a){return\"RangeError\"===a.name}return!1}()?function(a,b){return a.toLocaleString(b,{year:\"numeric\",month:\"long\",day:\"numeric\",hour:\"numeric\",minute:\"2-digit\"})}:function(a){return Zc.format(a,\"haDateTime\")},ad=function(){try{new Date().toLocaleTimeString(\"i\")}catch(a){return\"RangeError\"===a.name}return!1}()?function(a,b){return a.toLocaleTimeString(b,{hour:\"numeric\",minute:\"2-digit\"})}:function(a){return Zc.format(a,\"shortTime\")},bd={alert:\"hass:alert\",automation:\"hass:playlist-play\",calendar:\"hass:calendar\",camera:\"hass:video\",climate:\"hass:thermostat\",configurator:\"hass:settings\",conversation:\"hass:text-to-speech\",device_tracker:\"hass:account\",fan:\"hass:fan\",group:\"hass:google-circles-communities\",history_graph:\"hass:chart-line\",homeassistant:\"hass:home-assistant\",homekit:\"hass:home-automation\",image_processing:\"hass:image-filter-frames\",input_boolean:\"hass:drawing\",input_datetime:\"hass:calendar-clock\",input_number:\"hass:ray-vertex\",input_select:\"hass:format-list-bulleted\",input_text:\"hass:textbox\",light:\"hass:lightbulb\",mailbox:\"hass:mailbox\",notify:\"hass:comment-alert\",person:\"hass:account\",plant:\"hass:flower\",proximity:\"hass:apple-safari\",remote:\"hass:remote\",scene:\"hass:google-pages\",script:\"hass:file-document\",sensor:\"hass:eye\",simple_alarm:\"hass:bell\",sun:\"hass:white-balance-sunny\",switch:\"hass:flash\",timer:\"hass:timer\",updater:\"hass:cloud-upload\",vacuum:\"hass:robot-vacuum\",water_heater:\"hass:thermometer\",weblink:\"hass:open-in-new\"},N={humidity:\"hass:water-percent\",illuminance:\"hass:brightness-5\",temperature:\"hass:thermometer\",pressure:\"hass:gauge\",power:\"hass:flash\",signal_strength:\"hass:wifi\"},cd={binary_sensor:function(a){var b=a.state&&\"off\"===a.state;switch(a.attributes.device_class){case\"battery\":return b?\"hass:battery\":\"hass:battery-outline\";case\"cold\":return b?\"hass:thermometer\":\"hass:snowflake\";case\"connectivity\":return b?\"hass:server-network-off\":\"hass:server-network\";case\"door\":return b?\"hass:door-closed\":\"hass:door-open\";case\"garage_door\":return b?\"hass:garage\":\"hass:garage-open\";case\"gas\":case\"power\":case\"problem\":case\"safety\":case\"smoke\":return b?\"hass:shield-check\":\"hass:alert\";case\"heat\":return b?\"hass:thermometer\":\"hass:fire\";case\"light\":return b?\"hass:brightness-5\":\"hass:brightness-7\";case\"lock\":return b?\"hass:lock\":\"hass:lock-open\";case\"moisture\":return b?\"hass:water-off\":\"hass:water\";case\"motion\":return b?\"hass:walk\":\"hass:run\";case\"occupancy\":return b?\"hass:home-outline\":\"hass:home\";case\"opening\":return b?\"hass:square\":\"hass:square-outline\";case\"plug\":return b?\"hass:power-plug-off\":\"hass:power-plug\";case\"presence\":return b?\"hass:home-outline\":\"hass:home\";case\"sound\":return b?\"hass:music-note-off\":\"hass:music-note\";case\"vibration\":return b?\"hass:crop-portrait\":\"hass:vibrate\";case\"window\":return b?\"hass:window-closed\":\"hass:window-open\";default:return b?\"hass:radiobox-blank\":\"hass:checkbox-marked-circle\";}},cover:function(a){var b=\"closed\"!==a.state;switch(a.attributes.device_class){case\"garage\":return b?\"hass:garage-open\":\"hass:garage\";case\"door\":return b?\"hass:door-open\":\"hass:door-closed\";case\"shutter\":return b?\"hass:window-shutter-open\":\"hass:window-shutter\";case\"blind\":return b?\"hass:blinds-open\":\"hass:blinds\";case\"window\":return b?\"hass:window-open\":\"hass:window-closed\";default:return Ha(\"cover\",a.state);}},sensor:function(b){var c=b.attributes.device_class;if(c&&c in N)return N[c];if(\"battery\"===c){var d=+b.state;if(isNaN(d))return\"hass:battery-unknown\";var a=10*Ra(d/10);return 100<=a?\"hass:battery\":0>=a?\"hass:battery-alert\":\"hass:battery-\"+a}var e=b.attributes.unit_of_measurement;return\"\\xB0C\"===e||\"\\xB0F\"===e?\"hass:thermometer\":Ha(\"sensor\")},input_datetime:function(a){return a.attributes.has_date?a.attributes.has_time?Ha(\"input_datetime\"):\"hass:calendar\":\"hass:clock\"}},P=function(a){if(!a)return\"hass:bookmark\";if(a.attributes.icon)return a.attributes.icon;var b=Ga(a.entity_id);return b in cd?cd[b](a):Ha(b,a.state)},Q=function(a){var b={exports:{}};return a(b,b.exports),b.exports}(function(a){(function(b){a.exports=b()})(function(a){function b(e,f){var g=e[0],h=e[1],i=e[2],j=e[3];g+=0|(h&i|~h&j)+f[0]-680876936,g=0|(g<<7|g>>>25)+h,j+=0|(g&h|~g&i)+f[1]-389564586,j=0|(j<<12|j>>>20)+g,i+=0|(j&g|~j&h)+f[2]+606105819,i=0|(i<<17|i>>>15)+j,h+=0|(i&j|~i&g)+f[3]-1044525330,h=0|(h<<22|h>>>10)+i,g+=0|(h&i|~h&j)+f[4]-176418897,g=0|(g<<7|g>>>25)+h,j+=0|(g&h|~g&i)+f[5]+1200080426,j=0|(j<<12|j>>>20)+g,i+=0|(j&g|~j&h)+f[6]-1473231341,i=0|(i<<17|i>>>15)+j,h+=0|(i&j|~i&g)+f[7]-45705983,h=0|(h<<22|h>>>10)+i,g+=0|(h&i|~h&j)+f[8]+1770035416,g=0|(g<<7|g>>>25)+h,j+=0|(g&h|~g&i)+f[9]-1958414417,j=0|(j<<12|j>>>20)+g,i+=0|(j&g|~j&h)+f[10]-42063,i=0|(i<<17|i>>>15)+j,h+=0|(i&j|~i&g)+f[11]-1990404162,h=0|(h<<22|h>>>10)+i,g+=0|(h&i|~h&j)+f[12]+1804603682,g=0|(g<<7|g>>>25)+h,j+=0|(g&h|~g&i)+f[13]-40341101,j=0|(j<<12|j>>>20)+g,i+=0|(j&g|~j&h)+f[14]-1502002290,i=0|(i<<17|i>>>15)+j,h+=0|(i&j|~i&g)+f[15]+1236535329,h=0|(h<<22|h>>>10)+i,g+=0|(h&j|i&~j)+f[1]-165796510,g=0|(g<<5|g>>>27)+h,j+=0|(g&i|h&~i)+f[6]-1069501632,j=0|(j<<9|j>>>23)+g,i+=0|(j&h|g&~h)+f[11]+643717713,i=0|(i<<14|i>>>18)+j,h+=0|(i&g|j&~g)+f[0]-373897302,h=0|(h<<20|h>>>12)+i,g+=0|(h&j|i&~j)+f[5]-701558691,g=0|(g<<5|g>>>27)+h,j+=0|(g&i|h&~i)+f[10]+38016083,j=0|(j<<9|j>>>23)+g,i+=0|(j&h|g&~h)+f[15]-660478335,i=0|(i<<14|i>>>18)+j,h+=0|(i&g|j&~g)+f[4]-405537848,h=0|(h<<20|h>>>12)+i,g+=0|(h&j|i&~j)+f[9]+568446438,g=0|(g<<5|g>>>27)+h,j+=0|(g&i|h&~i)+f[14]-1019803690,j=0|(j<<9|j>>>23)+g,i+=0|(j&h|g&~h)+f[3]-187363961,i=0|(i<<14|i>>>18)+j,h+=0|(i&g|j&~g)+f[8]+1163531501,h=0|(h<<20|h>>>12)+i,g+=0|(h&j|i&~j)+f[13]-1444681467,g=0|(g<<5|g>>>27)+h,j+=0|(g&i|h&~i)+f[2]-51403784,j=0|(j<<9|j>>>23)+g,i+=0|(j&h|g&~h)+f[7]+1735328473,i=0|(i<<14|i>>>18)+j,h+=0|(i&g|j&~g)+f[12]-1926607734,h=0|(h<<20|h>>>12)+i,g+=0|(h^i^j)+f[5]-378558,g=0|(g<<4|g>>>28)+h,j+=0|(g^h^i)+f[8]-2022574463,j=0|(j<<11|j>>>21)+g,i+=0|(j^g^h)+f[11]+1839030562,i=0|(i<<16|i>>>16)+j,h+=0|(i^j^g)+f[14]-35309556,h=0|(h<<23|h>>>9)+i,g+=0|(h^i^j)+f[1]-1530992060,g=0|(g<<4|g>>>28)+h,j+=0|(g^h^i)+f[4]+1272893353,j=0|(j<<11|j>>>21)+g,i+=0|(j^g^h)+f[7]-155497632,i=0|(i<<16|i>>>16)+j,h+=0|(i^j^g)+f[10]-1094730640,h=0|(h<<23|h>>>9)+i,g+=0|(h^i^j)+f[13]+681279174,g=0|(g<<4|g>>>28)+h,j+=0|(g^h^i)+f[0]-358537222,j=0|(j<<11|j>>>21)+g,i+=0|(j^g^h)+f[3]-722521979,i=0|(i<<16|i>>>16)+j,h+=0|(i^j^g)+f[6]+76029189,h=0|(h<<23|h>>>9)+i,g+=0|(h^i^j)+f[9]-640364487,g=0|(g<<4|g>>>28)+h,j+=0|(g^h^i)+f[12]-421815835,j=0|(j<<11|j>>>21)+g,i+=0|(j^g^h)+f[15]+530742520,i=0|(i<<16|i>>>16)+j,h+=0|(i^j^g)+f[2]-995338651,h=0|(h<<23|h>>>9)+i,g+=0|(i^(h|~j))+f[0]-198630844,g=0|(g<<6|g>>>26)+h,j+=0|(h^(g|~i))+f[7]+1126891415,j=0|(j<<10|j>>>22)+g,i+=0|(g^(j|~h))+f[14]-1416354905,i=0|(i<<15|i>>>17)+j,h+=0|(j^(i|~g))+f[5]-57434055,h=0|(h<<21|h>>>11)+i,g+=0|(i^(h|~j))+f[12]+1700485571,g=0|(g<<6|g>>>26)+h,j+=0|(h^(g|~i))+f[3]-1894986606,j=0|(j<<10|j>>>22)+g,i+=0|(g^(j|~h))+f[10]-1051523,i=0|(i<<15|i>>>17)+j,h+=0|(j^(i|~g))+f[1]-2054922799,h=0|(h<<21|h>>>11)+i,g+=0|(i^(h|~j))+f[8]+1873313359,g=0|(g<<6|g>>>26)+h,j+=0|(h^(g|~i))+f[15]-30611744,j=0|(j<<10|j>>>22)+g,i+=0|(g^(j|~h))+f[6]-1560198380,i=0|(i<<15|i>>>17)+j,h+=0|(j^(i|~g))+f[13]+1309151649,h=0|(h<<21|h>>>11)+i,g+=0|(i^(h|~j))+f[4]-145523070,g=0|(g<<6|g>>>26)+h,j+=0|(h^(g|~i))+f[11]-1120210379,j=0|(j<<10|j>>>22)+g,i+=0|(g^(j|~h))+f[2]+718787259,i=0|(i<<15|i>>>17)+j,h+=0|(j^(i|~g))+f[9]-343485551,h=0|(h<<21|h>>>11)+i,e[0]=0|g+e[0],e[1]=0|h+e[1],e[2]=0|i+e[2],e[3]=0|j+e[3]}function c(a){var b,c=[];for(b=0;64>b;b+=4)c[b>>2]=a.charCodeAt(b)+(a.charCodeAt(b+1)<<8)+(a.charCodeAt(b+2)<<16)+(a.charCodeAt(b+3)<<24);return c}function d(b){var a,c=[];for(a=0;64>a;a+=4)c[a>>2]=b[a]+(b[a+1]<<8)+(b[a+2]<<16)+(b[a+3]<<24);return c}function e(a){var d,e,f,g,h,j,k=a.length,l=[1732584193,-271733879,-1732584194,271733878];for(d=64;d<=k;d+=64)b(l,c(a.substring(d-64,d)));for(a=a.substring(d-64),e=a.length,f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],d=0;d<e;d+=1)f[d>>2]|=a.charCodeAt(d)<<(d%4<<3);if(f[d>>2]|=128<<(d%4<<3),55<d)for(b(l,f),d=0;16>d;d+=1)f[d]=0;return g=8*k,g=g.toString(16).match(/(.*?)(.{0,8})$/),h=parseInt(g[2],16),j=parseInt(g[1],16)||0,f[14]=h,f[15]=j,b(l,f),l}function f(c){var e,f,g,h,j,k,l=c.length,m=[1732584193,-271733879,-1732584194,271733878];for(e=64;e<=l;e+=64)b(m,d(c.subarray(e-64,e)));for(c=e-64<l?c.subarray(e-64):new Uint8Array(0),f=c.length,g=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],e=0;e<f;e+=1)g[e>>2]|=c[e]<<(e%4<<3);if(g[e>>2]|=128<<(e%4<<3),55<e)for(b(m,g),e=0;16>e;e+=1)g[e]=0;return h=8*l,h=h.toString(16).match(/(.*?)(.{0,8})$/),j=parseInt(h[2],16),k=parseInt(h[1],16)||0,g[14]=j,g[15]=k,b(m,g),m}function g(a){var b,c=\"\";for(b=0;4>b;b+=1)c+=o[15&a>>8*b+4]+o[15&a>>8*b];return c}function h(a){var b;for(b=0;b<a.length;b+=1)a[b]=g(a[b]);return a.join(\"\")}function i(a){return /[\\u0080-\\uFFFF]/.test(a)&&(a=unescape(encodeURIComponent(a))),a}function j(a,b){var c,d=a.length,e=new ArrayBuffer(d),f=new Uint8Array(e);for(c=0;c<d;c+=1)f[c]=a.charCodeAt(c);return b?f:e}function k(a){return Oa.apply(null,new Uint8Array(a))}function l(a,b,c){var d=new Uint8Array(a.byteLength+b.byteLength);return d.set(new Uint8Array(a)),d.set(new Uint8Array(b),a.byteLength),c?d:d.buffer}function m(a){var b,c=[],d=a.length;for(b=0;b<d-1;b+=2)c.push(parseInt(a.substr(b,2),16));return Oa.apply(String,c)}function n(){this.reset()}var o=[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\"];if(\"5d41402abc4b2a76b9719d911017c592\"!==h(e(\"hello\")));return\"undefined\"==typeof ArrayBuffer||ArrayBuffer.prototype.slice||function(){function b(a,b){return a=0|a||0,0>a?Na(a+b,0):Ma(a,b)}ArrayBuffer.prototype.slice=function(c,d){var e,f,g,h,i=this.byteLength,j=b(c,i),k=i;return(d!==a&&(k=b(d,i)),j>k)?new ArrayBuffer(0):(e=k-j,f=new ArrayBuffer(e),g=new Uint8Array(f),h=new Uint8Array(this,j,e),g.set(h),f)}}(),n.prototype.append=function(a){return this.appendBinary(i(a)),this},n.prototype.appendBinary=function(a){this._buff+=a,this._length+=a.length;var d,e=this._buff.length;for(d=64;d<=e;d+=64)b(this._hash,c(this._buff.substring(d-64,d)));return this._buff=this._buff.substring(d-64),this},n.prototype.end=function(a){var b,c,d=this._buff,e=d.length,f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(b=0;b<e;b+=1)f[b>>2]|=d.charCodeAt(b)<<(b%4<<3);return this._finish(f,e),c=h(this._hash),a&&(c=m(c)),this.reset(),c},n.prototype.reset=function(){return this._buff=\"\",this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},n.prototype.getState=function(){return{buff:this._buff,length:this._length,hash:this._hash.slice()}},n.prototype.setState=function(a){return this._buff=a.buff,this._length=a.length,this._hash=a.hash,this},n.prototype.destroy=function(){delete this._hash,delete this._buff,delete this._length},n.prototype._finish=function(a,c){var d,e,f,g=c;if(a[g>>2]|=128<<(g%4<<3),55<g)for(b(this._hash,a),g=0;16>g;g+=1)a[g]=0;d=8*this._length,d=d.toString(16).match(/(.*?)(.{0,8})$/),e=parseInt(d[2],16),f=parseInt(d[1],16)||0,a[14]=e,a[15]=f,b(this._hash,a)},n.hash=function(a,b){return n.hashBinary(i(a),b)},n.hashBinary=function(a,b){var c=e(a),d=h(c);return b?m(d):d},n.ArrayBuffer=function(){this.reset()},n.ArrayBuffer.prototype.append=function(a){var c,e=l(this._buff.buffer,a,!0),f=e.length;for(this._length+=a.byteLength,c=64;c<=f;c+=64)b(this._hash,d(e.subarray(c-64,c)));return this._buff=c-64<f?new Uint8Array(e.buffer.slice(c-64)):new Uint8Array(0),this},n.ArrayBuffer.prototype.end=function(a){var b,c,d=this._buff,e=d.length,f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(b=0;b<e;b+=1)f[b>>2]|=d[b]<<(b%4<<3);return this._finish(f,e),c=h(this._hash),a&&(c=m(c)),this.reset(),c},n.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._hash=[1732584193,-271733879,-1732584194,271733878],this},n.ArrayBuffer.prototype.getState=function(){var a=n.prototype.getState.call(this);return a.buff=k(a.buff),a},n.ArrayBuffer.prototype.setState=function(a){return a.buff=j(a.buff,!0),n.prototype.setState.call(this,a)},n.ArrayBuffer.prototype.destroy=n.prototype.destroy,n.ArrayBuffer.prototype._finish=n.prototype._finish,n.ArrayBuffer.hash=function(a,b){var c=f(new Uint8Array(a)),d=h(c);return b?m(d):d},n})}),dd=Oa,ed=a=>fd(a,16,function(b){return dd(b)}),fd=(a,b,c)=>{if(null==a)return\"\";var d,e,f,g={},h={},j=\"\",k=\"\",l=\"\",m=2,n=3,o=2,p=[],q=0,r=0;for(f=0;f<a.length;f+=1)if(j=a.charAt(f),Object.prototype.hasOwnProperty.call(g,j)||(g[j]=n++,h[j]=!0),k=l+j,Object.prototype.hasOwnProperty.call(g,k))l=k;else{if(Object.prototype.hasOwnProperty.call(h,l)){if(256>l.charCodeAt(0)){for(d=0;d<o;d++)q<<=1,r==b-1?(r=0,p.push(c(q)),q=0):r++;for(e=l.charCodeAt(0),d=0;8>d;d++)q=q<<1|1&e,r==b-1?(r=0,p.push(c(q)),q=0):r++,e>>=1}else{for(e=1,d=0;d<o;d++)q=q<<1|e,r==b-1?(r=0,p.push(c(q)),q=0):r++,e=0;for(e=l.charCodeAt(0),d=0;16>d;d++)q=q<<1|1&e,r==b-1?(r=0,p.push(c(q)),q=0):r++,e>>=1}m--,0==m&&(m=La(2,o),o++),delete h[l]}else for(e=g[l],d=0;d<o;d++)q=q<<1|1&e,r==b-1?(r=0,p.push(c(q)),q=0):r++,e>>=1;m--,0==m&&(m=La(2,o),o++),g[k]=n++,l=j+\"\"}if(\"\"!==l){if(Object.prototype.hasOwnProperty.call(h,l)){if(256>l.charCodeAt(0)){for(d=0;d<o;d++)q<<=1,r==b-1?(r=0,p.push(c(q)),q=0):r++;for(e=l.charCodeAt(0),d=0;8>d;d++)q=q<<1|1&e,r==b-1?(r=0,p.push(c(q)),q=0):r++,e>>=1}else{for(e=1,d=0;d<o;d++)q=q<<1|e,r==b-1?(r=0,p.push(c(q)),q=0):r++,e=0;for(e=l.charCodeAt(0),d=0;16>d;d++)q=q<<1|1&e,r==b-1?(r=0,p.push(c(q)),q=0):r++,e>>=1}m--,0==m&&(m=La(2,o),o++),delete h[l]}else for(e=g[l],d=0;d<o;d++)q=q<<1|1&e,r==b-1?(r=0,p.push(c(q)),q=0):r++,e>>=1;m--,0==m&&(m=La(2,o),o++)}for(e=2,d=0;d<o;d++)q=q<<1|1&e,r==b-1?(r=0,p.push(c(q)),q=0):r++,e>>=1;for(;;)if(q<<=1,r==b-1){p.push(c(q));break}else r++;return p.join(\"\")},gd=a=>null==a?\"\":\"\"==a?null:hd(a.length,32768,function(b){return a.charCodeAt(b)}),hd=(a,b,d)=>{var e,f,g,h,j,k,l,m=[],n=4,o=4,p=3,q=\"\",r=[],s={val:d(0),position:b,index:1};for(e=0;3>e;e+=1)m[e]=e;for(g=0,j=La(2,2),k=1;k!=j;)h=s.val&s.position,s.position>>=1,0==s.position&&(s.position=b,s.val=d(s.index++)),g|=(0<h?1:0)*k,k<<=1;switch(g){case 0:for(g=0,j=La(2,8),k=1;k!=j;)h=s.val&s.position,s.position>>=1,0==s.position&&(s.position=b,s.val=d(s.index++)),g|=(0<h?1:0)*k,k<<=1;l=dd(g);break;case 1:for(g=0,j=La(2,16),k=1;k!=j;)h=s.val&s.position,s.position>>=1,0==s.position&&(s.position=b,s.val=d(s.index++)),g|=(0<h?1:0)*k,k<<=1;l=dd(g);break;case 2:return\"\";}for(m[3]=l,f=l,r.push(l);;){if(s.index>a)return\"\";for(g=0,j=La(2,p),k=1;k!=j;)h=s.val&s.position,s.position>>=1,0==s.position&&(s.position=b,s.val=d(s.index++)),g|=(0<h?1:0)*k,k<<=1;switch(l=g){case 0:for(g=0,j=La(2,8),k=1;k!=j;)h=s.val&s.position,s.position>>=1,0==s.position&&(s.position=b,s.val=d(s.index++)),g|=(0<h?1:0)*k,k<<=1;m[o++]=dd(g),l=o-1,n--;break;case 1:for(g=0,j=La(2,16),k=1;k!=j;)h=s.val&s.position,s.position>>=1,0==s.position&&(s.position=b,s.val=d(s.index++)),g|=(0<h?1:0)*k,k<<=1;m[o++]=dd(g),l=o-1,n--;break;case 2:return r.join(\"\");}if(0==n&&(n=La(2,p),p++),m[l])q=m[l];else if(l===o)q=f+f.charAt(0);else return null;r.push(q),m[o++]=f+q.charAt(0),n--,f=q,0==n&&(n=La(2,p),p++)}},id=(a,b)=>a.reduce((a,c)=>+c[b]<+a[b]?c:a,a[0]),jd=(a,b)=>a.reduce((a,c)=>a+ +c[b],0)/a.length,kd=(a,b)=>a.reduce((a,c)=>+c[b]>+a[b]?c:a,a[0]),ld=function(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:\"en-US\";return a.toLocaleString(c,O({hour:\"numeric\",minute:\"numeric\"},b))},md=a=>a*3600*1000,nd=(c,a,b)=>{var d=+c.replace(\"#\",\"0x\"),e=d>>16,f=255&d>>8,g=255&d,h=+a.replace(\"#\",\"0x\");return\"#\".concat((0|16777216+(e+b*((h>>16)-e)<<16)+(f+b*((255&h>>8)-f)<<8)+(g+b*((255&h)-g))).toString(16).slice(1))},od=a=>ed(JSON.stringify(a)),pd=a=>\"string\"==typeof a?JSON.parse(gd(a)):a,qd=function(){for(var a=arguments.length,b=Array(a),c=0;c<a;c++)b[c]=arguments[c];return b.find(a=>\"undefined\"!=typeof a)},rd=(c,a)=>c.length===a.length&&c.every((b,c)=>b===a[c]),sd=a=>{console.warn(\"mini-graph-card: \",a)},td=\"https://github.com/kalkih/mini-graph-card/blob/master/README.md\",ud=14,vd=96,wd={humidity:\"hass:water-percent\",illuminance:\"hass:brightness-5\",temperature:\"hass:thermometer\",battery:\"hass:battery\",pressure:\"hass:gauge\",power:\"hass:flash\",signal_strength:\"hass:wifi\",motion:\"hass:walk\",door:\"hass:door-closed\",window:\"hass:window-closed\",presence:\"hass:account\",light:\"hass:lightbulb\"},xd=[\"var(--accent-color)\",\"#3498db\",\"#e74c3c\",\"#9b59b6\",\"#f1c40f\",\"#2ecc71\",\"#1abc9c\",\"#34495e\",\"#e67e22\",\"#7f8c8d\",\"#27ae60\",\"#2980b9\",\"#8e44ad\"],yd=[\"entity\",\"line\",\"length\",\"fill\",\"points\",\"tooltip\",\"abs\",\"config\"],zd={name:!0,icon:!0,state:!0,graph:\"line\",labels:\"hover\",labels_secondary:\"hover\",extrema:!1,legend:!0,fill:!0,points:\"hover\"},Ad=0,X=1,Y=2,V=3600000;class Bd{constructor(a,b,c){var d=3<arguments.length&&arguments[3]!==void 0?arguments[3]:24,e=4<arguments.length&&arguments[4]!==void 0?arguments[4]:1,f=5<arguments.length&&arguments[5]!==void 0?arguments[5]:\"avg\",g=6<arguments.length&&arguments[6]!==void 0?arguments[6]:\"interval\",h=!(7<arguments.length&&arguments[7]!==void 0)||arguments[7],i=!!(8<arguments.length&&arguments[8]!==void 0)&&arguments[8],j={avg:this._average,median:this._median,max:this._maximum,min:this._minimum,first:this._first,last:this._last,sum:this._sum,delta:this._delta,diff:this._diff};this._history=void 0,this.coords=[],this.width=a-2*c[Ad],this.height=b-4*c[X],this.margin=c,this._max=0,this._min=0,this.points=e,this.hours=d,this.aggregateFuncName=f,this._calcPoint=j[f]||this._average,this._smoothing=h,this._logarithmic=i,this._groupBy=g,this._endTime=0}get max(){return this._max}set max(a){this._max=a}get min(){return this._min}set min(a){this._min=a}set history(a){this._history=a}update(){var a=0<arguments.length&&void 0!==arguments[0]?arguments[0]:void 0;if(a&&(this._history=a),!!this._history){this._updateEndTime();var b=this._history.reduce((a,b)=>this._reducer(a,b),[]);b[0]&&b[0].length&&(b[0]=[b[0][b[0].length-1]]);var c=Ka(this.hours*this.points);b.length=c,this.coords=this._calcPoints(b),this.min=Ma.apply(Math,S(this.coords.map(a=>+a[Y]))),this.max=Na.apply(Math,S(this.coords.map(a=>+a[Y])))}}_reducer(a,b){var c=this._endTime-new Date(b.last_changed).getTime(),d=c/V*this.points-this.hours*this.points,e=0>d?Pa(Qa(d)):0;return a[e]||(a[e]=[]),a[e].push(b),a}_calcPoints(a){var b=[],c=this.width/(this.hours*this.points-1);c=Number.isFinite(c)?c:this.width;for(var d=a.filter(Boolean)[0],e=[this._calcPoint(d),this._lastValue(d)],f=(a,d)=>{var f=c*d+this.margin[Ad];return a&&(e=[this._calcPoint(a),this._lastValue(a)]),b.push([f,0,a?e[0]:e[1]])},g=0;g<a.length;g+=1)f(a[g],g);return b}_calcY(a){var b=this._logarithmic?Ja(Na(1,this.max)):this.max,c=this._logarithmic?Ja(Na(1,this.min)):this.min,d=(b-c)/this.height||1,e=a.map(a=>{var b=this._logarithmic?Ja(Na(1,a[Y])):a[Y],e=this.height-(b-c)/d+2*this.margin[X];return[a[Ad],e,a[Y]]});return e}getPoints(){var{coords:a}=this;1===a.length&&(a[1]=[this.width+this.margin[Ad],0,a[0][Y]]),a=this._calcY(this.coords);var b,c,d=a[0];a.shift();var e=a.map((a,e)=>{b=a,c=this._smoothing?this._midPoint(d[Ad],d[X],b[Ad],b[X]):b;var f=this._smoothing?(b[Y]+d[Y])/2:b[Y];return d=b,[c[Ad],c[X],f,e+1]});return e}getPath(){var{coords:a}=this;1===a.length&&(a[1]=[this.width+this.margin[Ad],0,a[0][Y]]),a=this._calcY(this.coords);var b,c,d=\"\",e=a[0];return d+=\"M\".concat(e[Ad],\",\").concat(e[X]),a.forEach(a=>{b=a,c=this._smoothing?this._midPoint(e[Ad],e[X],b[Ad],b[X]):b,d+=\" \".concat(c[Ad],\",\").concat(c[X]),d+=\" Q \".concat(b[Ad],\",\").concat(b[X]),e=b}),d+=\" \".concat(b[Ad],\",\").concat(b[X]),d}computeGradient(a,b){var c=b?Ja(Na(1,this._max))-Ja(Na(1,this._min)):this._max-this._min;return a.map((a,d,e)=>{var f;if(a.value>this._max&&e[d+1]){var h=(this._max-e[d+1].value)/(a.value-e[d+1].value);f=nd(e[d+1].color,a.color,h)}else if(a.value<this._min&&e[d-1]){var i=(e[d-1].value-this._min)/(e[d-1].value-a.value);f=nd(e[d-1].color,a.color,i)}var g;return g=0>=c?0:b?(Ja(Na(1,this._max))-Ja(Na(1,a.value)))*(100/c):(this._max-a.value)*(100/c),{color:f||a.color,offset:g}})}getFill(a){var b=this.height+4*this.margin[X],c=a;return c+=\" L \".concat(this.width-2*this.margin[Ad],\", \").concat(b),c+=\" L \".concat(this.coords[0][Ad],\", \").concat(b,\" z\"),c}getBars(a,b){var c=2<arguments.length&&arguments[2]!==void 0?arguments[2]:4,d=this._calcY(this.coords),e=(this.width-c)/Ka(this.hours*this.points)/b;return d.map((d,f)=>({x:e*f*b+e*a+c,y:d[X],height:this.height-d[X]+4*this.margin[X],width:e-c,value:d[Y]}))}_midPoint(a,b,c,d){return[(a-c)/2+c,(b-d)/2+d]}_average(a){return a.reduce((a,b)=>a+parseFloat(b.state),0)/a.length}_median(a){var b=S(a).sort((c,a)=>parseFloat(c)-parseFloat(a)),c=Pa((b.length-1)/2);return 1==b.length%2?parseFloat(b[c].state):(parseFloat(b[c].state)+parseFloat(b[c+1].state))/2}_maximum(a){return Na.apply(Math,S(a.map(a=>a.state)))}_minimum(a){return Ma.apply(Math,S(a.map(a=>a.state)))}_first(a){return parseFloat(a[0].state)}_last(a){return parseFloat(a[a.length-1].state)}_sum(a){return a.reduce((a,b)=>a+parseFloat(b.state),0)}_delta(a){return this._maximum(a)-this._minimum(a)}_diff(a){return this._last(a)-this._first(a)}_lastValue(a){return[\"delta\",\"diff\"].includes(this.aggregateFuncName)?0:parseFloat(a[a.length-1].state)||0}_updateEndTime(){switch(this._endTime=new Date,this._groupBy){case\"month\":this._endTime.setMonth(this._endTime.getMonth()+1),this._endTime.setDate(1);break;case\"date\":this._endTime.setDate(this._endTime.getDate()+1),this._endTime.setHours(0,0,0,0);break;case\"hour\":this._endTime.setHours(this._endTime.getHours()+1),this._endTime.setMinutes(0,0,0);}}}var Cd=function css(a){for(var b=arguments.length,c=Array(1<b?b-1:0),d=1;d<b;d++)c[d-1]=arguments[d];var e=c.reduce((b,c,d)=>b+_b(c)+a[d+1],a[0]);return new Zb(e,Yb)}(L()),Dd=(a,b,c,d,f)=>{var g;switch(d.action){case\"more-info\":{g=new Event(\"hass-more-info\",{composed:!0}),g.detail={entityId:f},a.dispatchEvent(g);break}case\"navigate\":{if(!d.navigation_path)return;window.history.pushState(null,\"\",d.navigation_path),g=new Event(\"location-changed\",{composed:!0}),g.detail={replace:!1},window.dispatchEvent(g);break}case\"call-service\":{if(!d.service)return;var[h,i]=d.service.split(\".\",2),j=O({},d.service_data);b.callService(h,i,j);break}case\"url\":{if(!d.url)return;window.location.href=d.url;break}case\"fire-dom-event\":{g=new Event(\"ll-custom\",{composed:!0,bubbles:!0}),g.detail=d,a.dispatchEvent(g);break}}},Ed=(a,b)=>{for(var c=b,d=a.length;c<d;c+=1)if(null!=a[c].value)return c;throw new Error(\"Error in threshold interpolation: could not find right-nearest valued stop. Do the first and last thresholds have a set \\\"value\\\"?\")},Fd=a=>{if(!a||!a.length)return a;if(null==a[0].value||null==a[a.length-1].value)throw new Error(\"The first and last thresholds must have a set \\\"value\\\".\\n See \".concat(td));var b=0,c=null;return a.map((d,e)=>{if(null!=d.value)return b=e,O({},d);null==c?c=Ed(a,e):e>c&&(b=c,c=Ed(a,e));var f=a[b].value,g=a[c].value,h=(g-f)/(c-b);return{color:\"string\"==typeof d?d:d.color,value:h*e+f}})},Gd=(a,b)=>{var c=Fd(a);if(c.sort((c,a)=>a.value-c.value),\"smooth\"===b)return c;var d,e=(d=[]).concat.apply(d,S(c.map((a,b)=>[a,{value:a.value-1e-4,color:c[b+1]?c[b+1].color:a.color}])));return e},Hd=a=>{if(!Array.isArray(a.entities))throw new Error(\"Please provide the \\\"entities\\\" option as a list.\\n See \".concat(td));if(a.line_color_above||a.line_color_below)throw new Error(\"\\\"line_color_above/line_color_below\\\" was removed, please use \\\"color_thresholds\\\".\\n See \".concat(td));var b=O(O({animate:!1,hour24:!1,font_size:ud,font_size_header:14,height:100,hours_to_show:24,points_per_hour:.5,aggregate_func:\"avg\",group_by:\"interval\",line_color:[].concat(xd),color_thresholds:[],color_thresholds_transition:\"smooth\",line_width:5,bar_spacing:4,compress:!0,smoothing:!0,state_map:[],cache:!0,value_factor:0,tap_action:{action:\"more-info\"}},JSON.parse(JSON.stringify(a))),{},{show:O(O({},zd),a.show)});b.entities.forEach((a,c)=>{\"string\"==typeof a&&(b.entities[c]={entity:a})}),b.state_map.forEach((a,c)=>{\"string\"==typeof a&&(b.state_map[c]={value:a,label:a}),b.state_map[c].label=b.state_map[c].label||b.state_map[c].value}),\"string\"==typeof a.line_color&&(b.line_color=[a.line_color].concat(xd)),b.font_size=a.font_size/100*ud||ud,b.color_thresholds=Gd(b.color_thresholds,b.color_thresholds_transition);var c=24<b.hours_to_show?{day:\"numeric\",weekday:\"short\"}:{},d=b.hour24?{hourCycle:\"h23\"}:{hour12:!0};switch(b.format=O(O({},d),c),b.group_by){case\"date\":b.points_per_hour=1/24;break;case\"hour\":b.points_per_hour=1;}if(\"bar\"===b.show.graph){var e=b.entities.length;b.hours_to_show*b.points_per_hour*e>vd&&(b.points_per_hour=vd/(b.hours_to_show*e),sd(\"Not enough space, adjusting points_per_hour to \".concat(b.points_per_hour)))}return b},Id=\"0.11.0\";Ac.config({name:\"mini-graph-card\",version:1,storeName:\"entity_history_cache\",description:\"Mini graph card uses caching for the entity history\"}),Ac.iterate((a,b)=>{var c=b.endsWith(\"-raw\")?a:pd(a),d=new Date;d.setHours(d.getHours()-c.hours_to_show),(a.version!==Id||new Date(c.last_fetched)<d)&&Ac.removeItem(b)}).catch(a=>{console.warn(\"Purging has errored: \",a)}),console.info(\"%c MINI-GRAPH-CARD %c \".concat(Id,\" \"),\"color: white; background: coral; font-weight: 700;\",\"color: coral; background: white; font-weight: 700;\");class Jd extends bc{constructor(){super(),this.id=Math.random().toString(36).substr(2,9),this.config={},this.bound=[0,0],this.boundSecondary=[0,0],this.length=[],this.entity=[],this.line=[],this.bar=[],this.abs=[],this.fill=[],this.points=[],this.gradient=[],this.tooltip={},this.updateQueue=[],this.updating=!1,this.stateChanged=!1,this.initial=!0,this._md5Config=void 0}static get styles(){return Cd}set hass(a){this._hass=a;var b=!1,c=[];this.config.entities.forEach((d,e)=>{this.config.entities[e].index=e;var f=a&&a.states[d.entity]||void 0;f&&this.entity[e]!==f&&(this.entity[e]=f,c.push(\"\".concat(f.entity_id,\"-\").concat(e)),b=!0)}),b&&(this.stateChanged=!0,this.entity=S(this.entity),this.config.update_interval||this.updating?this.updateQueue=[].concat(c,S(this.updateQueue)):setTimeout(()=>{this.updateQueue=[].concat(c,S(this.updateQueue)),this.updateData()},this.initial?0:1e3))}static get properties(){return{id:String,_hass:{},config:{},entity:[],Graph:[],line:[],shadow:[],length:Number,bound:[],boundSecondary:[],abs:[],tooltip:{},updateQueue:[],color:String}}setConfig(a){this.config=Hd(a,this.config),this._md5Config=Q.hash(JSON.stringify(this.config));var b=!rd(this.config.entities||[],a.entities);(!this.Graph||b)&&(this._hass&&(this.hass=this._hass),this.Graph=this.config.entities.map(a=>new Bd(500,this.config.height,[this.config.show.fill?0:this.config.line_width,this.config.line_width],this.config.hours_to_show,this.config.points_per_hour,a.aggregate_func||this.config.aggregate_func,this.config.group_by,qd(a.smoothing,this.config.smoothing,!a.entity.startsWith(\"binary_sensor.\")),this.config.logarithmic)))}connectedCallback(){super.connectedCallback(),this.config.update_interval&&(window.requestAnimationFrame(()=>{this.updateOnInterval()}),this.interval=setInterval(()=>this.updateOnInterval(),1e3*this.config.update_interval))}disconnectedCallback(){this.interval&&clearInterval(this.interval),super.disconnectedCallback()}shouldUpdate(a){if(yd.some(b=>a.has(b)))return this.color=this.intColor(void 0===this.tooltip.value?this.entity[0]&&this.entity[0].state:this.tooltip.value,this.tooltip.entity||0),!0}firstUpdated(){this.initial=!1}updated(a){this.config.animate&&a.has(\"line\")&&(this.length.length<this.entity.length?(this.shadowRoot.querySelectorAll(\"svg path.line\").forEach(a=>{this.length[a.id]=a.getTotalLength()}),this.length=S(this.length)):this.length=Array(this.entity.length).fill(\"none\"))}render(){var{config:a}=0<arguments.length&&arguments[0]!==void 0?arguments[0]:this;return a&&this.entity&&this._hass?this.config.entities.some((a,b)=>void 0===this.entity[b])?this.renderWarnings():Db(J(),a.group,a.show.graph&&a.show.fill,\"hover\"===a.show.points,\"hover\"===a.show.labels,\"hover\"===a.show.labels_secondary,0<a.color_thresholds.length,\"none\"!==a.tap_action.action,a.font_size,b=>this.handlePopup(b,a.tap_action.entity||this.entity[0]),this.renderHeader(),this.renderStates(),this.renderGraph(),this.renderInfo()):Db(K())}renderWarnings(){return Db(I(),this.config.entities.map((a,b)=>this.entity[b]?Db(G()):Db(H(),this.config.entities[b].entity)))}renderHeader(){var{show:a,align_icon:b,align_header:c,font_size_header:d}=this.config;return a.name||a.icon&&\"state\"!==b?Db(F(),c,d,this.renderName(),\"state\"===b?\"\":this.renderIcon()):\"\"}renderIcon(){var{icon:a,icon_adaptive_color:b}=this.config.show;return a?Db(E(),this.config.align_icon,b?\"color: \".concat(this.color,\";\"):\"\",this.computeIcon(this.entity[0])):\"\"}renderName(){if(this.config.show.name){var a=void 0===this.tooltip.entity?this.config.name||this.computeName(0):this.computeName(this.tooltip.entity),b=this.config.show.name_adaptive_color?\"opacity: 1; color: \".concat(this.color,\";\"):\"\";return Db(D(),b,a)}}renderStates(){var[a]=this.config.entities;if(this.config.show.state)return Db(C(),this.config.align_state,this.renderState(a,0),this.config.entities.map((a,b)=>0<b&&this.renderState(a,b)||\"\"),\"state\"===this.config.align_icon?this.renderIcon():\"\")}getEntityState(a){var b=this.config.entities[a];return\"last\"===this.config.show.state?this.points[a][this.points[a].length-1][Y]:b.attribute?this.entity[a].attributes[b.attribute]:this.entity[a].state}renderState(a,b){var c=0===b;if(c||a.show_state){var{entity:d,value:e}=this.tooltip,f=this.getEntityState(b);return Db(B(),!c&&\"state--small\",a=>this.handlePopup(a,this.entity[b]),a.state_adaptive_color?\"color: \".concat(this.computeColor(f,b),\";\"):\"\",a.show_indicator?this.renderIndicator(f,b):\"\",this.computeState(c&&e||f),this.computeUom(c&&d||b),c&&this.renderStateTime()||\"\")}}renderStateTime(){return void 0===this.tooltip.value?void 0:Db(A(),this.tooltip.label?Db(z(),this.tooltip.label):Db(y(),this.tooltip.time[0],this.tooltip.time[1]))}renderGraph(){return this.config.show.graph?Db(x(),this.renderLabels(),this.renderLabelsSecondary(),this.renderSvg(),this.renderLegend()):\"\"}renderLegend(){return 1>=this.visibleLegends.length||!this.config.show.legend?void 0:Db(w(),this.visibleLegends.map(a=>Db(v(),b=>this.handlePopup(b,this.entity[a.index]),()=>this.setTooltip(a.index,-1,this.getEntityState(a.index),\"Current\"),()=>this.tooltip={},this.renderIndicator(this.entity[a.index].state,a.index),this.computeName(a.index))))}renderIndicator(a,b){return Eb(u(),this.intColor(a,b))}renderSvgFill(a,b){if(a){var c=\"fade\"===this.config.show.fill,d=this.length[b]||!1===this.config.entities[b].show_line;return Eb(t(),\"fill-grad-\".concat(this.id,\"-\").concat(b),\"fill-grad-mask-\".concat(this.id,\"-\").concat(b),\"url(#fill-grad-\".concat(this.id,\"-\").concat(b,\")\"),\"fill-\".concat(this.id,\"-\").concat(b),this.config.show.fill,b,this.config.animate,d,this.config.animate?\"\".concat(.5*b,\"s\"):\"0s\",c?\"url(#fill-grad-mask-\".concat(this.id,\"-\").concat(b,\")\"):\"\",this.fill[b])}}renderSvgLine(a,b){if(a){var c=Eb(s(),b,this.config.animate,this.length[b],this.config.animate?\"\".concat(.5*b,\"s\"):\"0s\",this.length[b]||\"none\",this.length[b]||\"none\",\"white\",this.config.line_width,this.line[b]);return Eb(r(),\"line-\".concat(this.id,\"-\").concat(b),c)}}renderSvgPoint(a,b){var c=this.gradient[b]?this.computeColor(a[Y],b):\"inherit\";return Eb(q(),this.tooltip.index!==a[3],\"--mcg-hover: \".concat(c,\";\"),c,c,a[Ad],a[X],this.config.line_width,()=>this.setTooltip(b,a[3],a[Y]),()=>this.tooltip={})}renderSvgPoints(a,b){if(a){var c=this.computeColor(this.entity[b].state,b);return Eb(p(),this.tooltip.entity===b,void 0!==this.tooltip.entity&&this.tooltip.entity!==b,this.length[b],this.config.animate&&\"hover\"!==this.config.show.points,this.config.animate?\"\".concat(.5*b+.5,\"s\"):\"0s\",c,c,this.config.line_width/2,a.map(a=>this.renderSvgPoint(a,b)))}}renderSvgGradient(a){if(a){var b=a.map((a,b)=>a?Eb(o(),\"grad-\".concat(this.id,\"-\").concat(b),a.map(a=>Eb(n(),a.color,\"\".concat(a.offset,\"%\")))):void 0);return Eb(m(),b)}}renderSvgLineRect(a,b){if(a){var c=this.gradient[b]?\"url(#grad-\".concat(this.id,\"-\").concat(b,\")\"):this.computeColor(this.entity[b].state,b);return Eb(l(),void 0!==this.tooltip.entity&&this.tooltip.entity!==b,\"rect-\".concat(this.id,\"-\").concat(b),c,\"url(#line-\".concat(this.id,\"-\").concat(b,\")\"))}}renderSvgFillRect(a,b){if(a){var c=this.gradient[b]?\"url(#grad-\".concat(this.id,\"-\").concat(b,\")\"):this.intColor(this.entity[b].state,b);return Eb(k(),void 0!==this.tooltip.entity&&this.tooltip.entity!==b,\"fill-rect-\".concat(this.id,\"-\").concat(b),c,\"url(#fill-\".concat(this.id,\"-\").concat(b,\")\"))}}renderSvgBars(a,b){if(a){var c=a.map((a,c)=>{var d=this.config.animate?Eb(j(),this.config.height,a.y):\"\",e=this.computeColor(a.value,b);return Eb(h(),a.x,a.y,a.height,a.width,e,()=>this.setTooltip(b,c,a.value),()=>this.tooltip={},d)});return Eb(g(),this.config.animate,c)}}renderSvg(){var{height:a}=this.config;return Eb(f(),0===a?0:\"100%\",a,a=>a.stopPropagation(),this.renderSvgGradient(this.gradient),this.fill.map((a,b)=>this.renderSvgFill(a,b)),this.fill.map((a,b)=>this.renderSvgFillRect(a,b)),this.line.map((a,b)=>this.renderSvgLine(a,b)),this.line.map((a,b)=>this.renderSvgLineRect(a,b)),this.bar.map((a,b)=>this.renderSvgBars(a,b)),this.points.map((a,b)=>this.renderSvgPoints(a,b)))}setTooltip(a,b,c){var d=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null,{points_per_hour:e,hours_to_show:f,format:g}=this.config,h=1>f&&1>e?e*f:1/e,i=Qa(b+1-Ka(f*e)),j=this.getEndDate(),k=1/60;j.setMilliseconds(j.getMilliseconds()-md(h*i+k));var l=ld(j,g,this._hass.language);j.setMilliseconds(j.getMilliseconds()-md(h-k));var m=ld(j,g,this._hass.language);this.tooltip={value:c,id:i,entity:a,time:[m,l],index:b,label:d}}renderLabels(){return this.config.show.labels&&0!==this.primaryYaxisSeries.length?Db(e(),this.computeState(this.bound[1]),this.computeState(this.bound[0])):void 0}renderLabelsSecondary(){return this.config.show.labels_secondary&&0!==this.secondaryYaxisSeries.length?Db(d(),this.computeState(this.boundSecondary[1]),this.computeState(this.boundSecondary[0])):void 0}renderInfo(){return 0<this.abs.length?Db(c(),this.abs.map(a=>Db(b(),a.type,this.computeState(a.state),this.computeUom(0),\"avg\"===a.type?\"\":ld(new Date(a.last_changed),this.config.format,this._hass.language)))):Db(a())}handlePopup(a,b){a.stopPropagation(),Dd(this,this._hass,this.config,this.config.tap_action,b.entity_id||b)}computeColor(a,b){var{color_thresholds:c,line_color:d}=this.config,e=O(O({color:d[b]||d[0]},c.slice(-1)[0]),c.find(b=>b.value<(+a||0)));return this.config.entities[b].color||e.color}get visibleEntities(){return this.config.entities.filter(a=>!1!==a.show_graph)}get primaryYaxisEntities(){return this.visibleEntities.filter(a=>a.y_axis===void 0||\"primary\"===a.y_axis)}get secondaryYaxisEntities(){return this.visibleEntities.filter(a=>\"secondary\"===a.y_axis)}get visibleLegends(){return this.visibleEntities.filter(a=>!1!==a.show_legend)}get primaryYaxisSeries(){return this.primaryYaxisEntities.map(a=>this.Graph[a.index])}get secondaryYaxisSeries(){return this.secondaryYaxisEntities.map(a=>this.Graph[a.index])}intColor(a,b){var c,{color_thresholds:d,line_color:e}=this.config,f=+a||0;if(0<d.length)if(\"bar\"===this.config.show.graph){var{color:j}=d.find(a=>a.value<f)||d.slice(-1)[0];c=j}else{var g=d.findIndex(a=>a.value<f),h=d[g],i=d[g-1];if(i){var k=(i.value-a)/(i.value-h.value);c=nd(i.color,h.color,k)}else c=g?d[d.length-1].color:d[0].color}return this.config.entities[b].color||c||e[b]||e[0]}computeName(a){return this.config.entities[a].name||this.entity[a].attributes.friendly_name}computeIcon(a){return this.config.icon||a.attributes.icon||P(a)||wd.temperature}computeUom(a){return this.config.entities[a].unit||this.config.unit||this.entity[a].attributes.unit_of_measurement||\"\"}computeState(a){if(0<this.config.state_map.length){var f=Number.isInteger(a)?this.config.state_map[a]:this.config.state_map.find(b=>b.value===a);if(f)return f.label;sd(\"value [\".concat(a,\"] not found in state_map\"))}var b=\"string\"==typeof a?parseFloat(a.replace(/,/g,\".\")):+a;var c=this.config.decimals,d=10**this.config.value_factor;if(c===void 0||Ia(c)||Ia(b))return this.numberFormat(Ra(100*(b*d))/100,this._hass.language);var e=10**c;return this.numberFormat((Ra(b*d*e)/e).toFixed(c),this._hass.language,c)}numberFormat(a,b,c){return!Ia(+a)&&Intl?new Intl.NumberFormat(b,{minimumFractionDigits:c}).format(+a):a.toString()}updateOnInterval(){this.stateChanged&&!this.updating&&(this.stateChanged=!1,this.updateData())}updateData(){var a=arguments,b=this;return R(function*(){var{config:c}=0<a.length&&void 0!==a[0]?a[0]:b;b.updating=!0;var d=b.getEndDate(),e=new Date(d);e.setMilliseconds(e.getMilliseconds()-md(c.hours_to_show));try{var f=b.entity.map((a,c)=>b.updateEntity(a,c,e,d));yield Promise.all(f)}catch(a){sd(a)}if(c.show.graph&&b.entity.forEach((a,c)=>{a&&b.Graph[c].update()}),b.updateBounds(),c.show.graph){var g=0;b.entity.forEach((a,d)=>{if(a&&0!==b.Graph[d].coords.length){var e=\"secondary\"===c.entities[d].y_axis?b.boundSecondary:b.bound;if([b.Graph[d].min,b.Graph[d].max]=[e[0],e[1]],\"bar\"===c.show.graph){var f=b.visibleEntities.length;b.bar[d]=b.Graph[d].getBars(g,f,c.bar_spacing),g+=1}else{var h=b.Graph[d].getPath();!1!==c.entities[d].show_line&&(b.line[d]=h),c.show.fill&&!1!==c.entities[d].show_fill&&(b.fill[d]=b.Graph[d].getFill(h)),c.show.points&&!1!==c.entities[d].show_points&&(b.points[d]=b.Graph[d].getPoints()),0<c.color_thresholds.length&&!c.entities[d].color&&(b.gradient[d]=b.Graph[d].computeGradient(c.color_thresholds,b.config.logarithmic))}}}),b.line=S(b.line)}b.updating=!1,b.setNextUpdate()})()}getBoundary(a,b,c,d){if(!(a in Math))throw new Error(\"The type \\\"\".concat(a,\"\\\" is not present on the Math object\"));return void 0===c?Math[a].apply(Math,S(b.map(b=>b[a])))||d:\"~\"===c[0]?Math[a].apply(Math,[+c.substr(1)].concat(S(b.map(b=>b[a])))):c}getBoundaries(a,b,c,d,e){var f=[this.getBoundary(\"min\",a,b,d[0],e),this.getBoundary(\"max\",a,c,d[1],e)];if(e){var g=Qa(f[0]-f[1]),h=parseFloat(e)-g;0<h&&(f=[f[0]-h/2,f[1]+h/2])}return f}updateBounds(){var{config:a}=0<arguments.length&&arguments[0]!==void 0?arguments[0]:this;this.bound=this.getBoundaries(this.primaryYaxisSeries,a.lower_bound,a.upper_bound,this.bound,a.min_bound_range),this.boundSecondary=this.getBoundaries(this.secondaryYaxisSeries,a.lower_bound_secondary,a.upper_bound_secondary,this.boundSecondary,a.min_bound_range_secondary)}getCache(a,b){var c=this;return R(function*(){var d=yield Ac.getItem(\"\".concat(a,\"_\").concat(c._md5Config).concat(b?\"\":\"_raw\"));return d?b?pd(d):d:null})()}setCache(a,b,c){var d=this;return R(function*(){return c?Ac.setItem(\"\".concat(a,\"_\").concat(d._md5Config),od(b)):Ac.setItem(\"\".concat(a,\"_\").concat(d._md5Config,\"_raw\"),b)})()}updateEntity(a,b,c,d){var e=this;return R(function*(){if(a&&e.updateQueue.includes(\"\".concat(a.entity_id,\"-\").concat(b))&&!1!==e.config.entities[b].show_graph){e.updateQueue=e.updateQueue.filter(c=>c!==\"\".concat(a.entity_id,\"-\").concat(b));var f=[],g=c,h=!1,i=e.config.cache?yield e.getCache(\"\".concat(a.entity_id,\"_\").concat(b),e.config.useCompress):void 0;if(i&&i.hours_to_show===e.config.hours_to_show){f=i.data;var k=f.findIndex(a=>new Date(a.last_changed)>c);-1===k?f=[]:(0<k&&(k-=1,f[k].last_changed=c),f=f.slice(k,f.length),h=!0);var l=new Date(i.last_fetched);l>g&&(g=new Date(l-1))}var j=yield e.fetchRecent(a.entity_id,g,d,!e.config.entities[b].attribute&&h,!!e.config.entities[b].attribute);if(j[0]&&0<j[0].length&&(e.config.entities[b].attribute&&h&&j[0].shift(),(0<e.config.state_map.length||e.config.entities[b].attribute)&&j[0].forEach(a=>{e.config.entities[b].attribute&&(a.state=a.attributes[e.config.entities[b].attribute],delete a.attributes),0<e.config.state_map.length&&e._convertState(a)}),j=j[0].filter(a=>!Ia(parseFloat(a.state))),j=j.map(a=>({last_changed:e.config.entities[b].attribute?a.last_updated:a.last_changed,state:a.state})),f=[].concat(S(f),S(j)),e.config.cache&&e.setCache(\"\".concat(a.entity_id,\"_\").concat(b),{hours_to_show:e.config.hours_to_show,last_fetched:new Date,data:f,version:Id},e.config.useCompress).catch(a=>{sd(a),Ac.clear()})),0!==f.length)if(e.entity[0]&&a.entity_id===e.entity[0].entity_id&&e.updateExtrema(f),!0===e.config.entities[b].fixed_value){var m=f[f.length-1];e.Graph[b].history=[m,m]}else e.Graph[b].history=f}})()}fetchRecent(a,b,c,d,e){var f=this;return R(function*(){var g=\"history/period\";return b&&(g+=\"/\".concat(b.toISOString())),g+=\"?filter_entity_id=\".concat(a),c&&(g+=\"&end_time=\".concat(c.toISOString())),d&&(g+=\"&skip_initial_state\"),e||(g+=\"&minimal_response\"),e&&(g+=\"&significant_changes_only=0\"),f._hass.callApi(\"GET\",g)})()}updateExtrema(a){var{extrema:b,average:c}=this.config.show;this.abs=[].concat(S(b?[O({type:\"min\"},id(a,\"state\"))]:[]),S(c?[{type:\"avg\",state:jd(a,\"state\")}]:[]),S(b?[O({type:\"max\"},kd(a,\"state\"))]:[]))}_convertState(a){var b=this.config.state_map.findIndex(b=>b.value===a.state);-1===b||(a.state=b)}getEndDate(){var a=new Date;switch(this.config.group_by){case\"date\":a.setDate(a.getDate()+1),a.setHours(0,0,0);break;case\"hour\":a.setHours(a.getHours()+1),a.setMinutes(0,0);}return a}setNextUpdate(){if(!this.config.update_interval){var a=1/this.config.points_per_hour;clearInterval(this.interval),this.interval=setInterval(()=>{this.updating||this.updateData()},a*V)}}getCardSize(){return 3}}customElements.define(\"mini-graph-card\",Jd),window.customCards=window.customCards||[],window.customCards.push({type:\"mini-graph-card\",name:\"Mini Graph Card\",preview:!1,description:\"The Mini Graph card is a minimalistic and customizable graph card\"})})})();\n"
  },
  {
    "path": "home-assistant/www/community/mini-media-player/mini-media-player-bundle.js",
    "content": "/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\nfunction t(t,e,i,r){var o,n=arguments.length,s=n<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,i):r;if(\"object\"==typeof Reflect&&\"function\"==typeof Reflect.decorate)s=Reflect.decorate(t,e,i,r);else for(var a=t.length-1;a>=0;a--)(o=t[a])&&(s=(n<3?o(s):n>3?o(e,i,s):o(e,i))||s);return n>3&&s&&Object.defineProperty(e,i,s),s\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */}const e=\"undefined\"!=typeof window&&null!=window.customElements&&void 0!==window.customElements.polyfillWrapFlushCallback,i=(t,e,i=null)=>{for(;e!==i;){const i=e.nextSibling;t.removeChild(e),e=i}},r=`{{lit-${String(Math.random()).slice(2)}}}`,o=`\\x3c!--${r}--\\x3e`,n=new RegExp(`${r}|${o}`);class s{constructor(t,e){this.parts=[],this.element=e;const i=[],o=[],s=document.createTreeWalker(e.content,133,null,!1);let l=0,p=-1,u=0;const{strings:d,values:{length:m}}=t;for(;u<m;){const t=s.nextNode();if(null!==t){if(p++,1===t.nodeType){if(t.hasAttributes()){const e=t.attributes,{length:i}=e;let r=0;for(let t=0;t<i;t++)a(e[t].name,\"$lit$\")&&r++;for(;r-- >0;){const e=d[u],i=h.exec(e)[2],r=i.toLowerCase()+\"$lit$\",o=t.getAttribute(r);t.removeAttribute(r);const s=o.split(n);this.parts.push({type:\"attribute\",index:p,name:i,strings:s}),u+=s.length-1}}\"TEMPLATE\"===t.tagName&&(o.push(t),s.currentNode=t.content)}else if(3===t.nodeType){const e=t.data;if(e.indexOf(r)>=0){const r=t.parentNode,o=e.split(n),s=o.length-1;for(let e=0;e<s;e++){let i,n=o[e];if(\"\"===n)i=c();else{const t=h.exec(n);null!==t&&a(t[2],\"$lit$\")&&(n=n.slice(0,t.index)+t[1]+t[2].slice(0,-\"$lit$\".length)+t[3]),i=document.createTextNode(n)}r.insertBefore(i,t),this.parts.push({type:\"node\",index:++p})}\"\"===o[s]?(r.insertBefore(c(),t),i.push(t)):t.data=o[s],u+=s}}else if(8===t.nodeType)if(t.data===r){const e=t.parentNode;null!==t.previousSibling&&p!==l||(p++,e.insertBefore(c(),t)),l=p,this.parts.push({type:\"node\",index:p}),null===t.nextSibling?t.data=\"\":(i.push(t),p--),u++}else{let e=-1;for(;-1!==(e=t.data.indexOf(r,e+1));)this.parts.push({type:\"node\",index:-1}),u++}}else s.currentNode=o.pop()}for(const t of i)t.parentNode.removeChild(t)}}const a=(t,e)=>{const i=t.length-e.length;return i>=0&&t.slice(i)===e},l=t=>-1!==t.index,c=()=>document.createComment(\"\"),h=/([ \\x09\\x0a\\x0c\\x0d])([^\\0-\\x1F\\x7F-\\x9F \"'>=/]+)([ \\x09\\x0a\\x0c\\x0d]*=[ \\x09\\x0a\\x0c\\x0d]*(?:[^ \\x09\\x0a\\x0c\\x0d\"'`<>=]*|\"[^\"]*|'[^']*))$/;function p(t,e){const{element:{content:i},parts:r}=t,o=document.createTreeWalker(i,133,null,!1);let n=d(r),s=r[n],a=-1,l=0;const c=[];let h=null;for(;o.nextNode();){a++;const t=o.currentNode;for(t.previousSibling===h&&(h=null),e.has(t)&&(c.push(t),null===h&&(h=t)),null!==h&&l++;void 0!==s&&s.index===a;)s.index=null!==h?-1:s.index-l,n=d(r,n),s=r[n]}c.forEach((t=>t.parentNode.removeChild(t)))}const u=t=>{let e=11===t.nodeType?0:1;const i=document.createTreeWalker(t,133,null,!1);for(;i.nextNode();)e++;return e},d=(t,e=-1)=>{for(let i=e+1;i<t.length;i++){const e=t[i];if(l(e))return i}return-1};\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nconst m=new WeakMap,g=t=>(...e)=>{const i=t(...e);return m.set(i,!0),i},f=t=>\"function\"==typeof t&&m.has(t),v={},_={};\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nclass y{constructor(t,e,i){this.__parts=[],this.template=t,this.processor=e,this.options=i}update(t){let e=0;for(const i of this.__parts)void 0!==i&&i.setValue(t[e]),e++;for(const t of this.__parts)void 0!==t&&t.commit()}_clone(){const t=e?this.template.element.content.cloneNode(!0):document.importNode(this.template.element.content,!0),i=[],r=this.template.parts,o=document.createTreeWalker(t,133,null,!1);let n,s=0,a=0,c=o.nextNode();for(;s<r.length;)if(n=r[s],l(n)){for(;a<n.index;)a++,\"TEMPLATE\"===c.nodeName&&(i.push(c),o.currentNode=c.content),null===(c=o.nextNode())&&(o.currentNode=i.pop(),c=o.nextNode());if(\"node\"===n.type){const t=this.processor.handleTextExpression(this.options);t.insertAfterNode(c.previousSibling),this.__parts.push(t)}else this.__parts.push(...this.processor.handleAttributeExpressions(c,n.name,n.strings,this.options));s++}else this.__parts.push(void 0),s++;return e&&(document.adoptNode(t),customElements.upgrade(t)),t}}\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */const b=window.trustedTypes&&trustedTypes.createPolicy(\"lit-html\",{createHTML:t=>t}),w=` ${r} `;class x{constructor(t,e,i,r){this.strings=t,this.values=e,this.type=i,this.processor=r}getHTML(){const t=this.strings.length-1;let e=\"\",i=!1;for(let n=0;n<t;n++){const t=this.strings[n],s=t.lastIndexOf(\"\\x3c!--\");i=(s>-1||i)&&-1===t.indexOf(\"--\\x3e\",s+1);const a=h.exec(t);e+=null===a?t+(i?w:o):t.substr(0,a.index)+a[1]+a[2]+\"$lit$\"+a[3]+r}return e+=this.strings[t],e}getTemplateElement(){const t=document.createElement(\"template\");let e=this.getHTML();return void 0!==b&&(e=b.createHTML(e)),t.innerHTML=e,t}}\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */const k=t=>null===t||!(\"object\"==typeof t||\"function\"==typeof t),S=t=>Array.isArray(t)||!(!t||!t[Symbol.iterator]);class ${constructor(t,e,i){this.dirty=!0,this.element=t,this.name=e,this.strings=i,this.parts=[];for(let t=0;t<i.length-1;t++)this.parts[t]=this._createPart()}_createPart(){return new P(this)}_getValue(){const t=this.strings,e=t.length-1,i=this.parts;if(1===e&&\"\"===t[0]&&\"\"===t[1]){const t=i[0].value;if(\"symbol\"==typeof t)return String(t);if(\"string\"==typeof t||!S(t))return t}let r=\"\";for(let o=0;o<e;o++){r+=t[o];const e=i[o];if(void 0!==e){const t=e.value;if(k(t)||!S(t))r+=\"string\"==typeof t?t:String(t);else for(const e of t)r+=\"string\"==typeof e?e:String(e)}}return r+=t[e],r}commit(){this.dirty&&(this.dirty=!1,this.element.setAttribute(this.name,this._getValue()))}}class P{constructor(t){this.value=void 0,this.committer=t}setValue(t){t===v||k(t)&&t===this.value||(this.value=t,f(t)||(this.committer.dirty=!0))}commit(){for(;f(this.value);){const t=this.value;this.value=v,t(this)}this.value!==v&&this.committer.commit()}}class C{constructor(t){this.value=void 0,this.__pendingValue=void 0,this.options=t}appendInto(t){this.startNode=t.appendChild(c()),this.endNode=t.appendChild(c())}insertAfterNode(t){this.startNode=t,this.endNode=t.nextSibling}appendIntoPart(t){t.__insert(this.startNode=c()),t.__insert(this.endNode=c())}insertAfterPart(t){t.__insert(this.startNode=c()),this.endNode=t.endNode,t.endNode=this.startNode}setValue(t){this.__pendingValue=t}commit(){if(null===this.startNode.parentNode)return;for(;f(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=v,t(this)}const t=this.__pendingValue;t!==v&&(k(t)?t!==this.value&&this.__commitText(t):t instanceof x?this.__commitTemplateResult(t):t instanceof Node?this.__commitNode(t):S(t)?this.__commitIterable(t):t===_?(this.value=_,this.clear()):this.__commitText(t))}__insert(t){this.endNode.parentNode.insertBefore(t,this.endNode)}__commitNode(t){this.value!==t&&(this.clear(),this.__insert(t),this.value=t)}__commitText(t){const e=this.startNode.nextSibling,i=\"string\"==typeof(t=null==t?\"\":t)?t:String(t);e===this.endNode.previousSibling&&3===e.nodeType?e.data=i:this.__commitNode(document.createTextNode(i)),this.value=t}__commitTemplateResult(t){const e=this.options.templateFactory(t);if(this.value instanceof y&&this.value.template===e)this.value.update(t.values);else{const i=new y(e,t.processor,this.options),r=i._clone();i.update(t.values),this.__commitNode(r),this.value=i}}__commitIterable(t){Array.isArray(this.value)||(this.value=[],this.clear());const e=this.value;let i,r=0;for(const o of t)i=e[r],void 0===i&&(i=new C(this.options),e.push(i),0===r?i.appendIntoPart(this):i.insertAfterPart(e[r-1])),i.setValue(o),i.commit(),r++;r<e.length&&(e.length=r,this.clear(i&&i.endNode))}clear(t=this.startNode){i(this.startNode.parentNode,t.nextSibling,this.endNode)}}class E{constructor(t,e,i){if(this.value=void 0,this.__pendingValue=void 0,2!==i.length||\"\"!==i[0]||\"\"!==i[1])throw new Error(\"Boolean attributes can only contain a single expression\");this.element=t,this.name=e,this.strings=i}setValue(t){this.__pendingValue=t}commit(){for(;f(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=v,t(this)}if(this.__pendingValue===v)return;const t=!!this.__pendingValue;this.value!==t&&(t?this.element.setAttribute(this.name,\"\"):this.element.removeAttribute(this.name),this.value=t),this.__pendingValue=v}}class M extends ${constructor(t,e,i){super(t,e,i),this.single=2===i.length&&\"\"===i[0]&&\"\"===i[1]}_createPart(){return new T(this)}_getValue(){return this.single?this.parts[0].value:super._getValue()}commit(){this.dirty&&(this.dirty=!1,this.element[this.name]=this._getValue())}}class T extends P{}let O=!1;(()=>{try{const t={get capture(){return O=!0,!1}};window.addEventListener(\"test\",t,t),window.removeEventListener(\"test\",t,t)}catch(t){}})();class A{constructor(t,e,i){this.value=void 0,this.__pendingValue=void 0,this.element=t,this.eventName=e,this.eventContext=i,this.__boundHandleEvent=t=>this.handleEvent(t)}setValue(t){this.__pendingValue=t}commit(){for(;f(this.__pendingValue);){const t=this.__pendingValue;this.__pendingValue=v,t(this)}if(this.__pendingValue===v)return;const t=this.__pendingValue,e=this.value,i=null==t||null!=e&&(t.capture!==e.capture||t.once!==e.once||t.passive!==e.passive),r=null!=t&&(null==e||i);i&&this.element.removeEventListener(this.eventName,this.__boundHandleEvent,this.__options),r&&(this.__options=V(t),this.element.addEventListener(this.eventName,this.__boundHandleEvent,this.__options)),this.value=t,this.__pendingValue=v}handleEvent(t){\"function\"==typeof this.value?this.value.call(this.eventContext||this.element,t):this.value.handleEvent(t)}}const V=t=>t&&(O?{capture:t.capture,passive:t.passive,once:t.once}:t.capture)\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */;function N(t){let e=L.get(t.type);void 0===e&&(e={stringsArray:new WeakMap,keyString:new Map},L.set(t.type,e));let i=e.stringsArray.get(t.strings);if(void 0!==i)return i;const o=t.strings.join(r);return i=e.keyString.get(o),void 0===i&&(i=new s(t,t.getTemplateElement()),e.keyString.set(o,i)),e.stringsArray.set(t.strings,i),i}const L=new Map,D=new WeakMap;\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */const j=new\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nclass{handleAttributeExpressions(t,e,i,r){const o=e[0];if(\".\"===o){return new M(t,e.slice(1),i).parts}if(\"@\"===o)return[new A(t,e.slice(1),r.eventContext)];if(\"?\"===o)return[new E(t,e.slice(1),i)];return new $(t,e,i).parts}handleTextExpression(t){return new C(t)}};\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\"undefined\"!=typeof window&&(window.litHtmlVersions||(window.litHtmlVersions=[])).push(\"1.4.1\");const I=(t,...e)=>new x(t,e,\"html\",j)\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */,R=(t,e)=>`${t}--${e}`;let z=!0;void 0===window.ShadyCSS?z=!1:void 0===window.ShadyCSS.prepareTemplateDom&&(console.warn(\"Incompatible ShadyCSS version detected. Please update to at least @webcomponents/webcomponentsjs@2.0.2 and @webcomponents/shadycss@1.3.1.\"),z=!1);const F=t=>e=>{const i=R(e.type,t);let o=L.get(i);void 0===o&&(o={stringsArray:new WeakMap,keyString:new Map},L.set(i,o));let n=o.stringsArray.get(e.strings);if(void 0!==n)return n;const a=e.strings.join(r);if(n=o.keyString.get(a),void 0===n){const i=e.getTemplateElement();z&&window.ShadyCSS.prepareTemplateDom(i,t),n=new s(e,i),o.keyString.set(a,n)}return o.stringsArray.set(e.strings,n),n},U=[\"html\",\"svg\"],q=new Set,B=(t,e,i)=>{q.add(t);const r=i?i.element:document.createElement(\"template\"),o=e.querySelectorAll(\"style\"),{length:n}=o;if(0===n)return void window.ShadyCSS.prepareTemplateStyles(r,t);const s=document.createElement(\"style\");for(let t=0;t<n;t++){const e=o[t];e.parentNode.removeChild(e),s.textContent+=e.textContent}(t=>{U.forEach((e=>{const i=L.get(R(e,t));void 0!==i&&i.keyString.forEach((t=>{const{element:{content:e}}=t,i=new Set;Array.from(e.querySelectorAll(\"style\")).forEach((t=>{i.add(t)})),p(t,i)}))}))})(t);const a=r.content;i?function(t,e,i=null){const{element:{content:r},parts:o}=t;if(null==i)return void r.appendChild(e);const n=document.createTreeWalker(r,133,null,!1);let s=d(o),a=0,l=-1;for(;n.nextNode();)for(l++,n.currentNode===i&&(a=u(e),i.parentNode.insertBefore(e,i));-1!==s&&o[s].index===l;){if(a>0){for(;-1!==s;)o[s].index+=a,s=d(o,s);return}s=d(o,s)}}(i,s,a.firstChild):a.insertBefore(s,a.firstChild),window.ShadyCSS.prepareTemplateStyles(r,t);const l=a.querySelector(\"style\");if(window.ShadyCSS.nativeShadow&&null!==l)e.insertBefore(l.cloneNode(!0),e.firstChild);else if(i){a.insertBefore(s,a.firstChild);const t=new Set;t.add(s),p(i,t)}};window.JSCompiler_renameProperty=(t,e)=>t;const G={toAttribute(t,e){switch(e){case Boolean:return t?\"\":null;case Object:case Array:return null==t?t:JSON.stringify(t)}return t},fromAttribute(t,e){switch(e){case Boolean:return null!==t;case Number:return null===t?null:Number(t);case Object:case Array:return JSON.parse(t)}return t}},H=(t,e)=>e!==t&&(e==e||t==t),W={attribute:!0,type:String,converter:G,reflect:!1,hasChanged:H};class X extends HTMLElement{constructor(){super(),this.initialize()}static get observedAttributes(){this.finalize();const t=[];return this._classProperties.forEach(((e,i)=>{const r=this._attributeNameForProperty(i,e);void 0!==r&&(this._attributeToPropertyMap.set(r,i),t.push(r))})),t}static _ensureClassProperties(){if(!this.hasOwnProperty(JSCompiler_renameProperty(\"_classProperties\",this))){this._classProperties=new Map;const t=Object.getPrototypeOf(this)._classProperties;void 0!==t&&t.forEach(((t,e)=>this._classProperties.set(e,t)))}}static createProperty(t,e=W){if(this._ensureClassProperties(),this._classProperties.set(t,e),e.noAccessor||this.prototype.hasOwnProperty(t))return;const i=\"symbol\"==typeof t?Symbol():`__${t}`,r=this.getPropertyDescriptor(t,i,e);void 0!==r&&Object.defineProperty(this.prototype,t,r)}static getPropertyDescriptor(t,e,i){return{get(){return this[e]},set(r){const o=this[t];this[e]=r,this.requestUpdateInternal(t,o,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this._classProperties&&this._classProperties.get(t)||W}static finalize(){const t=Object.getPrototypeOf(this);if(t.hasOwnProperty(\"finalized\")||t.finalize(),this.finalized=!0,this._ensureClassProperties(),this._attributeToPropertyMap=new Map,this.hasOwnProperty(JSCompiler_renameProperty(\"properties\",this))){const t=this.properties,e=[...Object.getOwnPropertyNames(t),...\"function\"==typeof Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(t):[]];for(const i of e)this.createProperty(i,t[i])}}static _attributeNameForProperty(t,e){const i=e.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}static _valueHasChanged(t,e,i=H){return i(t,e)}static _propertyValueFromAttribute(t,e){const i=e.type,r=e.converter||G,o=\"function\"==typeof r?r:r.fromAttribute;return o?o(t,i):t}static _propertyValueToAttribute(t,e){if(void 0===e.reflect)return;const i=e.type,r=e.converter;return(r&&r.toAttribute||G.toAttribute)(t,i)}initialize(){this._updateState=0,this._updatePromise=new Promise((t=>this._enableUpdatingResolver=t)),this._changedProperties=new Map,this._saveInstanceProperties(),this.requestUpdateInternal()}_saveInstanceProperties(){this.constructor._classProperties.forEach(((t,e)=>{if(this.hasOwnProperty(e)){const t=this[e];delete this[e],this._instanceProperties||(this._instanceProperties=new Map),this._instanceProperties.set(e,t)}}))}_applyInstanceProperties(){this._instanceProperties.forEach(((t,e)=>this[e]=t)),this._instanceProperties=void 0}connectedCallback(){this.enableUpdating()}enableUpdating(){void 0!==this._enableUpdatingResolver&&(this._enableUpdatingResolver(),this._enableUpdatingResolver=void 0)}disconnectedCallback(){}attributeChangedCallback(t,e,i){e!==i&&this._attributeToProperty(t,i)}_propertyToAttribute(t,e,i=W){const r=this.constructor,o=r._attributeNameForProperty(t,i);if(void 0!==o){const t=r._propertyValueToAttribute(e,i);if(void 0===t)return;this._updateState=8|this._updateState,null==t?this.removeAttribute(o):this.setAttribute(o,t),this._updateState=-9&this._updateState}}_attributeToProperty(t,e){if(8&this._updateState)return;const i=this.constructor,r=i._attributeToPropertyMap.get(t);if(void 0!==r){const t=i.getPropertyOptions(r);this._updateState=16|this._updateState,this[r]=i._propertyValueFromAttribute(e,t),this._updateState=-17&this._updateState}}requestUpdateInternal(t,e,i){let r=!0;if(void 0!==t){const o=this.constructor;i=i||o.getPropertyOptions(t),o._valueHasChanged(this[t],e,i.hasChanged)?(this._changedProperties.has(t)||this._changedProperties.set(t,e),!0!==i.reflect||16&this._updateState||(void 0===this._reflectingProperties&&(this._reflectingProperties=new Map),this._reflectingProperties.set(t,i))):r=!1}!this._hasRequestedUpdate&&r&&(this._updatePromise=this._enqueueUpdate())}requestUpdate(t,e){return this.requestUpdateInternal(t,e),this.updateComplete}async _enqueueUpdate(){this._updateState=4|this._updateState;try{await this._updatePromise}catch(t){}const t=this.performUpdate();return null!=t&&await t,!this._hasRequestedUpdate}get _hasRequestedUpdate(){return 4&this._updateState}get hasUpdated(){return 1&this._updateState}performUpdate(){if(!this._hasRequestedUpdate)return;this._instanceProperties&&this._applyInstanceProperties();let t=!1;const e=this._changedProperties;try{t=this.shouldUpdate(e),t?this.update(e):this._markUpdated()}catch(e){throw t=!1,this._markUpdated(),e}t&&(1&this._updateState||(this._updateState=1|this._updateState,this.firstUpdated(e)),this.updated(e))}_markUpdated(){this._changedProperties=new Map,this._updateState=-5&this._updateState}get updateComplete(){return this._getUpdateComplete()}_getUpdateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._updatePromise}shouldUpdate(t){return!0}update(t){void 0!==this._reflectingProperties&&this._reflectingProperties.size>0&&(this._reflectingProperties.forEach(((t,e)=>this._propertyToAttribute(e,this[e],t))),this._reflectingProperties=void 0),this._markUpdated()}updated(t){}firstUpdated(t){}}X.finalized=!0;\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nconst J=t=>e=>\"function\"==typeof e?((t,e)=>(window.customElements.define(t,e),e))(t,e):((t,e)=>{const{kind:i,elements:r}=e;return{kind:i,elements:r,finisher(e){window.customElements.define(t,e)}}})(t,e),Y=(t,e)=>\"method\"===e.kind&&e.descriptor&&!(\"value\"in e.descriptor)?Object.assign(Object.assign({},e),{finisher(i){i.createProperty(e.key,t)}}):{kind:\"field\",key:Symbol(),placement:\"own\",descriptor:{},initializer(){\"function\"==typeof e.initializer&&(this[e.key]=e.initializer.call(this))},finisher(i){i.createProperty(e.key,t)}};function Z(t){return(e,i)=>void 0!==i?((t,e,i)=>{e.constructor.createProperty(i,t)})(t,e,i):Y(t,e)}const K=t=>function(t){return Z({attribute:!1,hasChanged:null==t?void 0:t.hasChanged})}(t)\n/**\n@license\nCopyright (c) 2019 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at\nhttp://polymer.github.io/LICENSE.txt The complete set of authors may be found at\nhttp://polymer.github.io/AUTHORS.txt The complete set of contributors may be\nfound at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as\npart of the polymer project is also subject to an additional IP rights grant\nfound at http://polymer.github.io/PATENTS.txt\n*/,Q=window.ShadowRoot&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,tt=Symbol();class et{constructor(t,e){if(e!==tt)throw new Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t}get styleSheet(){return void 0===this._styleSheet&&(Q?(this._styleSheet=new CSSStyleSheet,this._styleSheet.replaceSync(this.cssText)):this._styleSheet=null),this._styleSheet}toString(){return this.cssText}}const it=(t,...e)=>{const i=e.reduce(((e,i,r)=>e+(t=>{if(t instanceof et)return t.cssText;if(\"number\"==typeof t)return t;throw new Error(`Value passed to 'css' function must be a 'css' function result: ${t}. Use 'unsafeCSS' to pass non-literal values, but\\n            take care to ensure page security.`)})(i)+t[r+1]),t[0]);return new et(i,tt)};\n/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n(window.litElementVersions||(window.litElementVersions=[])).push(\"2.5.1\");const rt={};class ot extends X{static getStyles(){return this.styles}static _getUniqueStyles(){if(this.hasOwnProperty(JSCompiler_renameProperty(\"_styles\",this)))return;const t=this.getStyles();if(Array.isArray(t)){const e=(t,i)=>t.reduceRight(((t,i)=>Array.isArray(i)?e(i,t):(t.add(i),t)),i),i=e(t,new Set),r=[];i.forEach((t=>r.unshift(t))),this._styles=r}else this._styles=void 0===t?[]:[t];this._styles=this._styles.map((t=>{if(t instanceof CSSStyleSheet&&!Q){const e=Array.prototype.slice.call(t.cssRules).reduce(((t,e)=>t+e.cssText),\"\");return new et(String(e),tt)}return t}))}initialize(){super.initialize(),this.constructor._getUniqueStyles(),this.renderRoot=this.createRenderRoot(),window.ShadowRoot&&this.renderRoot instanceof window.ShadowRoot&&this.adoptStyles()}createRenderRoot(){return this.attachShadow(this.constructor.shadowRootOptions)}adoptStyles(){const t=this.constructor._styles;0!==t.length&&(void 0===window.ShadyCSS||window.ShadyCSS.nativeShadow?Q?this.renderRoot.adoptedStyleSheets=t.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet)):this._needsShimAdoptedStyleSheets=!0:window.ShadyCSS.ScopingShim.prepareAdoptedCssText(t.map((t=>t.cssText)),this.localName))}connectedCallback(){super.connectedCallback(),this.hasUpdated&&void 0!==window.ShadyCSS&&window.ShadyCSS.styleElement(this)}update(t){const e=this.render();super.update(t),e!==rt&&this.constructor.render(e,this.renderRoot,{scopeName:this.localName,eventContext:this}),this._needsShimAdoptedStyleSheets&&(this._needsShimAdoptedStyleSheets=!1,this.constructor._styles.forEach((t=>{const e=document.createElement(\"style\");e.textContent=t.cssText,this.renderRoot.appendChild(e)})))}render(){return rt}}ot.finalized=!0,ot.render=(t,e,r)=>{if(!r||\"object\"!=typeof r||!r.scopeName)throw new Error(\"The `scopeName` option is required.\");const o=r.scopeName,n=D.has(e),s=z&&11===e.nodeType&&!!e.host,a=s&&!q.has(o),l=a?document.createDocumentFragment():e;if(((t,e,r)=>{let o=D.get(e);void 0===o&&(i(e,e.firstChild),D.set(e,o=new C(Object.assign({templateFactory:N},r))),o.appendInto(e)),o.setValue(t),o.commit()})(t,l,Object.assign({templateFactory:F(o)},r)),a){const t=D.get(l);D.delete(l);const r=t.value instanceof y?t.value.template:void 0;B(o,l,r),i(e,e.firstChild),e.appendChild(l),D.set(e,t)}!n&&s&&window.ShadyCSS.styleElement(e.host)},ot.shadowRootOptions={mode:\"open\"};\n/**\n * @license\n * Copyright (c) 2018 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\nclass nt{constructor(t){this.classes=new Set,this.changed=!1,this.element=t;const e=(t.getAttribute(\"class\")||\"\").split(/\\s+/);for(const t of e)this.classes.add(t)}add(t){this.classes.add(t),this.changed=!0}remove(t){this.classes.delete(t),this.changed=!0}commit(){if(this.changed){let t=\"\";this.classes.forEach((e=>t+=e+\" \")),this.element.setAttribute(\"class\",t)}}}const st=new WeakMap,at=g((t=>e=>{if(!(e instanceof P)||e instanceof T||\"class\"!==e.committer.name||e.committer.parts.length>1)throw new Error(\"The `classMap` directive must be used in the `class` attribute and must be the only part in the attribute.\");const{committer:i}=e,{element:r}=i;let o=st.get(e);void 0===o&&(r.setAttribute(\"class\",i.strings.join(\" \")),st.set(e,o=new Set));const n=r.classList||new nt(r);o.forEach((e=>{e in t||(n.remove(e),o.delete(e))}));for(const e in t){const i=t[e];i!=o.has(e)&&(i?(n.add(e),o.add(e)):(n.remove(e),o.delete(e)))}\"function\"==typeof n.commit&&n.commit()})),lt=new WeakMap,ct=g((t=>e=>{if(!(e instanceof P)||e instanceof T||\"style\"!==e.committer.name||e.committer.parts.length>1)throw new Error(\"The `styleMap` directive must be used in the style attribute and must be the only part in the attribute.\");const{committer:i}=e,{style:r}=i.element;let o=lt.get(e);void 0===o&&(r.cssText=i.strings.join(\" \"),lt.set(e,o=new Set)),o.forEach((e=>{e in t||(o.delete(e),-1===e.indexOf(\"-\")?r[e]=null:r.removeProperty(e))}));for(const e in t)o.add(e),-1===e.indexOf(\"-\")?r[e]=t[e]:r.setProperty(e,t[e])}));var ht=function(){if(\"undefined\"!=typeof Map)return Map;function t(t,e){var i=-1;return t.some((function(t,r){return t[0]===e&&(i=r,!0)})),i}return function(){function e(){this.__entries__=[]}return Object.defineProperty(e.prototype,\"size\",{get:function(){return this.__entries__.length},enumerable:!0,configurable:!0}),e.prototype.get=function(e){var i=t(this.__entries__,e),r=this.__entries__[i];return r&&r[1]},e.prototype.set=function(e,i){var r=t(this.__entries__,e);~r?this.__entries__[r][1]=i:this.__entries__.push([e,i])},e.prototype.delete=function(e){var i=this.__entries__,r=t(i,e);~r&&i.splice(r,1)},e.prototype.has=function(e){return!!~t(this.__entries__,e)},e.prototype.clear=function(){this.__entries__.splice(0)},e.prototype.forEach=function(t,e){void 0===e&&(e=null);for(var i=0,r=this.__entries__;i<r.length;i++){var o=r[i];t.call(e,o[1],o[0])}},e}()}(),pt=\"undefined\"!=typeof window&&\"undefined\"!=typeof document&&window.document===document,ut=\"undefined\"!=typeof global&&global.Math===Math?global:\"undefined\"!=typeof self&&self.Math===Math?self:\"undefined\"!=typeof window&&window.Math===Math?window:Function(\"return this\")(),dt=\"function\"==typeof requestAnimationFrame?requestAnimationFrame.bind(ut):function(t){return setTimeout((function(){return t(Date.now())}),1e3/60)};var mt=[\"top\",\"right\",\"bottom\",\"left\",\"width\",\"height\",\"size\",\"weight\"],gt=\"undefined\"!=typeof MutationObserver,ft=function(){function t(){this.connected_=!1,this.mutationEventsAdded_=!1,this.mutationsObserver_=null,this.observers_=[],this.onTransitionEnd_=this.onTransitionEnd_.bind(this),this.refresh=function(t,e){var i=!1,r=!1,o=0;function n(){i&&(i=!1,t()),r&&a()}function s(){dt(n)}function a(){var t=Date.now();if(i){if(t-o<2)return;r=!0}else i=!0,r=!1,setTimeout(s,e);o=t}return a}(this.refresh.bind(this),20)}return t.prototype.addObserver=function(t){~this.observers_.indexOf(t)||this.observers_.push(t),this.connected_||this.connect_()},t.prototype.removeObserver=function(t){var e=this.observers_,i=e.indexOf(t);~i&&e.splice(i,1),!e.length&&this.connected_&&this.disconnect_()},t.prototype.refresh=function(){this.updateObservers_()&&this.refresh()},t.prototype.updateObservers_=function(){var t=this.observers_.filter((function(t){return t.gatherActive(),t.hasActive()}));return t.forEach((function(t){return t.broadcastActive()})),t.length>0},t.prototype.connect_=function(){pt&&!this.connected_&&(document.addEventListener(\"transitionend\",this.onTransitionEnd_),window.addEventListener(\"resize\",this.refresh),gt?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener(\"DOMSubtreeModified\",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){pt&&this.connected_&&(document.removeEventListener(\"transitionend\",this.onTransitionEnd_),window.removeEventListener(\"resize\",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener(\"DOMSubtreeModified\",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(t){var e=t.propertyName,i=void 0===e?\"\":e;mt.some((function(t){return!!~i.indexOf(t)}))&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),vt=function(t,e){for(var i=0,r=Object.keys(e);i<r.length;i++){var o=r[i];Object.defineProperty(t,o,{value:e[o],enumerable:!1,writable:!1,configurable:!0})}return t},_t=function(t){return t&&t.ownerDocument&&t.ownerDocument.defaultView||ut},yt=$t(0,0,0,0);function bt(t){return parseFloat(t)||0}function wt(t){for(var e=[],i=1;i<arguments.length;i++)e[i-1]=arguments[i];return e.reduce((function(e,i){return e+bt(t[\"border-\"+i+\"-width\"])}),0)}function xt(t){var e=t.clientWidth,i=t.clientHeight;if(!e&&!i)return yt;var r=_t(t).getComputedStyle(t),o=function(t){for(var e={},i=0,r=[\"top\",\"right\",\"bottom\",\"left\"];i<r.length;i++){var o=r[i],n=t[\"padding-\"+o];e[o]=bt(n)}return e}(r),n=o.left+o.right,s=o.top+o.bottom,a=bt(r.width),l=bt(r.height);if(\"border-box\"===r.boxSizing&&(Math.round(a+n)!==e&&(a-=wt(r,\"left\",\"right\")+n),Math.round(l+s)!==i&&(l-=wt(r,\"top\",\"bottom\")+s)),!function(t){return t===_t(t).document.documentElement}(t)){var c=Math.round(a+n)-e,h=Math.round(l+s)-i;1!==Math.abs(c)&&(a-=c),1!==Math.abs(h)&&(l-=h)}return $t(o.left,o.top,a,l)}var kt=\"undefined\"!=typeof SVGGraphicsElement?function(t){return t instanceof _t(t).SVGGraphicsElement}:function(t){return t instanceof _t(t).SVGElement&&\"function\"==typeof t.getBBox};function St(t){return pt?kt(t)?function(t){var e=t.getBBox();return $t(0,0,e.width,e.height)}(t):xt(t):yt}function $t(t,e,i,r){return{x:t,y:e,width:i,height:r}}var Pt=function(){function t(t){this.broadcastWidth=0,this.broadcastHeight=0,this.contentRect_=$t(0,0,0,0),this.target=t}return t.prototype.isActive=function(){var t=St(this.target);return this.contentRect_=t,t.width!==this.broadcastWidth||t.height!==this.broadcastHeight},t.prototype.broadcastRect=function(){var t=this.contentRect_;return this.broadcastWidth=t.width,this.broadcastHeight=t.height,t},t}(),Ct=function(t,e){var i=function(t){var e=t.x,i=t.y,r=t.width,o=t.height,n=\"undefined\"!=typeof DOMRectReadOnly?DOMRectReadOnly:Object,s=Object.create(n.prototype);return vt(s,{x:e,y:i,width:r,height:o,top:i,right:e+r,bottom:o+i,left:e}),s}(e);vt(this,{target:t,contentRect:i})},Et=function(){function t(t,e,i){if(this.activeObservations_=[],this.observations_=new ht,\"function\"!=typeof t)throw new TypeError(\"The callback provided as parameter 1 is not a function.\");this.callback_=t,this.controller_=e,this.callbackCtx_=i}return t.prototype.observe=function(t){if(!arguments.length)throw new TypeError(\"1 argument required, but only 0 present.\");if(\"undefined\"!=typeof Element&&Element instanceof Object){if(!(t instanceof _t(t).Element))throw new TypeError('parameter 1 is not of type \"Element\".');var e=this.observations_;e.has(t)||(e.set(t,new Pt(t)),this.controller_.addObserver(this),this.controller_.refresh())}},t.prototype.unobserve=function(t){if(!arguments.length)throw new TypeError(\"1 argument required, but only 0 present.\");if(\"undefined\"!=typeof Element&&Element instanceof Object){if(!(t instanceof _t(t).Element))throw new TypeError('parameter 1 is not of type \"Element\".');var e=this.observations_;e.has(t)&&(e.delete(t),e.size||this.controller_.removeObserver(this))}},t.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},t.prototype.gatherActive=function(){var t=this;this.clearActive(),this.observations_.forEach((function(e){e.isActive()&&t.activeObservations_.push(e)}))},t.prototype.broadcastActive=function(){if(this.hasActive()){var t=this.callbackCtx_,e=this.activeObservations_.map((function(t){return new Ct(t.target,t.broadcastRect())}));this.callback_.call(t,e,t),this.clearActive()}},t.prototype.clearActive=function(){this.activeObservations_.splice(0)},t.prototype.hasActive=function(){return this.activeObservations_.length>0},t}(),Mt=\"undefined\"!=typeof WeakMap?new WeakMap:new ht,Tt=function t(e){if(!(this instanceof t))throw new TypeError(\"Cannot call a class as a function.\");if(!arguments.length)throw new TypeError(\"1 argument required, but only 0 present.\");var i=ft.getInstance(),r=new Et(e,i,this);Mt.set(this,r)};[\"observe\",\"unobserve\",\"disconnect\"].forEach((function(t){Tt.prototype[t]=function(){var e;return(e=Mt.get(this))[t].apply(e,arguments)}}));var Ot=void 0!==ut.ResizeObserver?ut.ResizeObserver:Tt;const At={repeat:!0,shuffle:!0,power_state:!0,artwork_border:!0,icon_state:!0,sound_mode:!0,runtime:!0,runtime_remaining:!0,volume:!1,volume_level:!0,controls:!1,play_pause:!1,play_stop:!0,prev:!1,next:!1,jump:!0,state_label:!1,progress:!1,icon:!1,name:!1,info:!1},Vt={OFF:\"off\",ALL:\"all\",ONE:\"one\"},Nt=\"mdi:cast\",Lt=\"mdi:chevron-down\",Dt=\"mdi:speaker-multiple\",jt={true:\"mdi:volume-off\",false:\"mdi:volume-high\"},It=\"mdi:skip-next\",Rt={true:\"mdi:pause\",false:\"mdi:play\"},zt=\"mdi:power\",Ft=\"mdi:skip-previous\",Ut=\"mdi:shuffle\",qt={[Vt.OFF]:\"mdi:repeat-off\",[Vt.ONE]:\"mdi:repeat-once\",[Vt.ALL]:\"mdi:repeat\"},Bt={true:\"mdi:stop\",false:\"mdi:play\"},Gt=\"mdi:volume-minus\",Ht=\"mdi:volume-plus\",Wt=\"mdi:fast-forward\",Xt=\"mdi:rewind\",Jt=[\"entity\",\"groupMgmtEntity\",\"_overflow\",\"break\",\"thumbnail\",\"prevThumbnail\",\"edit\",\"idle\",\"cardHeight\",\"backgroundColor\",\"foregroundColor\"],Yt=[\"media_duration\",\"media_position\",\"media_position_updated_at\"],Zt=[{attr:\"media_title\"},{attr:\"media_artist\"},{attr:\"media_series_title\"},{attr:\"media_season\",prefix:\"S\"},{attr:\"media_episode\",prefix:\"E\"},{attr:\"app_name\"}],Kt=\"sonos\",Qt=\"squeezebox\",te=\"soundtouch\",ee=\"media_player\",ie=\"heos\";var re;!function(t){t.MORE_INFO=\"more-info\",t.NAVIGATE=\"navigate\",t.CALL_SERVICE=\"call-service\",t.URL=\"url\",t.FIRE_DOM_EVENT=\"fire-dom-event\",t.NONE=\"none\"}(re||(re={}));const oe=t=>{var e;(t=>{if(void 0===t.entity)throw new Error(\"You need to specify the required entity option.\");if(\"media_player\"!==t.entity.split(\".\")[0])throw new Error(\"Specify an entity from within the media_player domain.\");if(void 0===t.type)throw new Error(\"You need to specify the required type option.\")})(t);const i=Object.assign(Object.assign({artwork:\"default\",info:\"default\",group:!1,volume_stateless:!1,more_info:!0,source:\"default\",sound_mode:\"default\",toggle_power:!0,tap_action:{action:re.MORE_INFO},jump_amount:10},t),{hide:Object.assign(Object.assign({},At),t.hide),speaker_group:Object.assign(Object.assign({show_group_count:!0,platform:\"sonos\",supports_master:!0,entities:[]},t.sonos),t.speaker_group),shortcuts:Object.assign({label:\"Shortcuts...\"},t.shortcuts),max_volume:null!==(e=Number(t.max_volume))&&void 0!==e?e:100,min_volume:Number(t.min_volume)||0});return i.collapse=i.hide.controls||i.hide.volume,i.info=i.collapse&&\"scroll\"!==i.info?\"short\":i.info,i.flow=i.hide.icon&&i.hide.name&&i.hide.info,i};var ne;!function(t){t.PLAYING=\"playing\",t.PAUSED=\"paused\",t.IDLE=\"idle\",t.OFF=\"off\",t.ON=\"on\",t.UNAVAILABLE=\"unavailable\",t.UNKNOWN=\"unknown\",t.STANDBY=\"standby\"}(ne||(ne={}));class se{constructor(t,e,i){this.hass=t||{},this.config=e||{},this.entity=i||{},this.state=i.state,this._entityId=i&&i.entity_id||this.config.entity,this._attr=i.attributes||{},this.idle=!!e.idle_view&&this.idleView,this._active=this.isActive}get id(){return this.entity.entity_id}get icon(){return this._attr.icon}get isPaused(){return this.state===ne.PAUSED}get isPlaying(){return this.state===ne.PLAYING}get isIdle(){return this.state===ne.IDLE}get isStandby(){return this.state===ne.STANDBY}get isUnavailable(){return this.state===ne.UNAVAILABLE}get isOff(){return this.state===ne.OFF}get isActive(){return!this.isOff&&!this.isUnavailable&&!this.idle||!1}get shuffle(){return this._attr.shuffle||!1}get repeat(){return this._attr.repeat||Vt.OFF}get content(){return this._attr.media_content_type||\"none\"}get mediaDuration(){return this._attr.media_duration||0}get updatedAt(){return this._attr.media_position_updated_at||0}get position(){return this._attr.media_position||0}get name(){return this._attr.friendly_name||\"\"}get groupCount(){return this.group.length}get isGrouped(){return this.group.length>1}get group(){return this.platform===Qt?this._attr.sync_group||[]:this.platform===ee||this.platform===ie||this.platform===Kt?this._attr.group_members||[]:this._attr[`${this.platform}_group`]||[]}get platform(){return this.config.speaker_group.platform}get master(){return this.supportsMaster&&this.group[0]||this._entityId}get isMaster(){return this.master===this._entityId}get sources(){return this._attr.source_list||[]}get source(){return this._attr.source||\"\"}get soundModes(){return this._attr.sound_mode_list||[]}get soundMode(){return this._attr.sound_mode||\"\"}get muted(){return this._attr.is_volume_muted||!1}get vol(){return this._attr.volume_level||0}get picture(){return this._attr.entity_picture_local||this._attr.entity_picture}get hasArtwork(){return!!this.picture&&\"none\"!==this.config.artwork&&this._active&&!this.idle}get mediaInfo(){return Zt.map((t=>Object.assign({text:this._attr[t.attr],prefix:\"\"},t))).filter((t=>t.text))}get hasProgress(){return!this.config.hide.progress&&!this.idle&&Yt.every((t=>t in this._attr))}get supportsPrev(){return!!this._attr.supported_features&&(16|this._attr.supported_features)===this._attr.supported_features}get supportsNext(){return!!this._attr.supported_features&&(32|this._attr.supported_features)===this._attr.supported_features}get progress(){return this.isPlaying?this.position+(Date.now()-new Date(this.updatedAt).getTime())/1e3:this.position}get idleView(){const t=this.config.idle_view;return!!((null==t?void 0:t.when_idle)&&this.isIdle||(null==t?void 0:t.when_standby)&&this.isStandby||(null==t?void 0:t.when_paused)&&this.isPaused)||!(!this.updatedAt||!(null==t?void 0:t.after)||this.isPlaying)&&this.checkIdleAfter(t.after)}get trackIdle(){var t,e;return Boolean(this._active&&!this.isPlaying&&this.updatedAt&&(null===(e=null===(t=this.config)||void 0===t?void 0:t.idle_view)||void 0===e?void 0:e.after))}checkIdleAfter(t){const e=(Date.now()-new Date(this.updatedAt).getTime())/1e3;return this.idle=e>60*t,this._active=this.isActive,this.idle}get supportsShuffle(){return void 0!==this._attr.shuffle}get supportsRepeat(){return void 0!==this._attr.repeat}get supportsMute(){return void 0!==this._attr.is_volume_muted}get supportsVolumeSet(){return void 0!==this._attr.volume_level}get supportsMaster(){return this.platform!==Qt&&this.config.speaker_group.supports_master}async fetchArtwork(){const t=this._attr.entity_picture_local?this.hass.hassUrl(this.picture):this.picture;try{const e=await fetch(new Request(t)),i=(t=>{let e=\"\";return[].slice.call(new Uint8Array(t)).forEach((t=>e+=String.fromCharCode(t))),window.btoa(e)})(await e.arrayBuffer());return`url(data:${e.headers.get(\"Content-Type\")||\"image/jpeg\"};base64,${i})`}catch(t){return!1}}getAttribute(t){return this._attr[t]}toggle(t){return this.config.toggle_power?this.callService(t,\"toggle\"):this.isOff?this.callService(t,\"turn_on\"):void this.callService(t,\"turn_off\")}toggleMute(t){this.config.speaker_group.sync_volume?this.group.forEach((e=>{this.callService(t,\"volume_mute\",{entity_id:e,is_volume_muted:!this.muted})})):this.callService(t,\"volume_mute\",{is_volume_muted:!this.muted})}toggleShuffle(t){this.callService(t,\"shuffle_set\",{shuffle:!this.shuffle})}toggleRepeat(t){const e=Object.values(Vt),{length:i}=e,r=e.indexOf(this.repeat)-1,o=e[(r-1%i+i)%i];this.callService(t,\"repeat_set\",{repeat:o})}setSource(t,e){this.callService(t,\"select_source\",{source:e})}setMedia(t,e){this.callService(t,\"play_media\",Object.assign({},e))}playPause(t){this.callService(t,\"media_play_pause\")}playStop(t){this.isPlaying?this.callService(t,\"media_stop\"):this.callService(t,\"media_play\")}setSoundMode(t,e){this.callService(t,\"select_sound_mode\",{sound_mode:e})}next(t){this.callService(t,\"media_next_track\")}prev(t){this.callService(t,\"media_previous_track\")}stop(t){this.callService(t,\"media_stop\")}volumeUp(t){this.supportsVolumeSet&&this.config.volume_step&&this.config.volume_step>0?this.callService(t,\"volume_set\",{entity_id:this._entityId,volume_level:Math.min(this.vol+this.config.volume_step/100,1)}):this.callService(t,\"volume_up\")}volumeDown(t){this.supportsVolumeSet&&this.config.volume_step&&this.config.volume_step>0?this.callService(t,\"volume_set\",{entity_id:this._entityId,volume_level:Math.max(this.vol-this.config.volume_step/100,0)}):this.callService(t,\"volume_down\")}seek(t,e){this.callService(t,\"media_seek\",{seek_position:e})}jump(t,e){const i=this.progress+e,r=Math.min(Math.max(i,0),Number(this.mediaDuration)||i);this.callService(t,\"media_seek\",{seek_position:r})}setVolume(t,e){this.config.speaker_group.sync_volume&&this.config.speaker_group.entities?this.group.forEach((i=>{var r;const o=null===(r=this.config.speaker_group.entities)||void 0===r?void 0:r.find((t=>t.entity_id===i));if(void 0===o)return;let n=e;o.volume_offset&&(n+=o.volume_offset/100,n>1&&(n=1),n<0&&(n=0)),this.callService(t,\"volume_set\",{entity_id:i,volume_level:n})})):this.callService(t,\"volume_set\",{entity_id:this._entityId,volume_level:e})}handleGroupChange(t,e,i){const{platform:r}=this,o={entity_id:e};if(i)switch(o.master=this._entityId,r){case te:return this.handleSoundtouch(t,this.isGrouped?\"ADD_ZONE_SLAVE\":\"CREATE_ZONE\",e);case Qt:return this.callService(t,\"sync\",{entity_id:this._entityId,other_player:e},Qt);case ee:case Kt:return this.callService(t,\"join\",{entity_id:this._entityId,group_members:e},ee);case ie:return this.callService(t,\"join\",{entity_id:this._entityId,group_members:this.group.concat(\"string\"==typeof e?[e]:e)},ee);default:return this.callService(t,\"join\",o,r)}else switch(r){case te:return this.handleSoundtouch(t,\"REMOVE_ZONE_SLAVE\",e);case Qt:return this.callService(t,\"unsync\",o,Qt);case ee:case Kt:return this.callService(t,\"unjoin\",{entity_id:e},ee);case ie:return this.callService(t,\"unjoin\",{entity_id:\"string\"==typeof e?e:e[0]},ee);default:return this.callService(t,\"unjoin\",o,r)}}handleSoundtouch(t,e,i){return this.callService(t,e,{master:this.master,slaves:i},te,!0)}toggleScript(t,e,i={}){const[,r]=e.split(\".\");this.callService(t,r,Object.assign({},i),\"script\")}toggleService(t,e,i={}){t.stopPropagation();const[r,o]=e.split(\".\");this.hass.callService(r,o,Object.assign({},i))}callService(t,e,i,r=\"media_player\",o=!1){t.stopPropagation(),this.hass.callService(r,e,Object.assign(Object.assign({},!o&&{entity_id:this._entityId}),i))}}const ae=it`\n  :host {\n    overflow: visible !important;\n    display: block;\n    --mmp-scale: var(--mini-media-player-scale, 1);\n    --mmp-unit: calc(var(--mmp-scale) * 40px);\n    --mmp-name-font-weight: var(--mini-media-player-name-font-weight, 400);\n    --mmp-accent-color: var(--mini-media-player-accent-color, var(--accent-color, #f39c12));\n    --mmp-base-color: var(--mini-media-player-base-color, var(--primary-text-color, #000));\n    --mmp-overlay-color: var(--mini-media-player-overlay-color, rgba(0, 0, 0, 0.5));\n    --mmp-overlay-color-stop: var(--mini-media-player-overlay-color-stop, 25%);\n    --mmp-overlay-base-color: var(--mini-media-player-overlay-base-color, #fff);\n    --mmp-overlay-accent-color: var(--mini-media-player-overlay-accent-color, --mmp-accent-color);\n    --mmp-text-color: var(--mini-media-player-base-color, var(--primary-text-color, #000));\n    --mmp-media-cover-info-color: var(--mini-media-player-media-cover-info-color, --mmp-text-color);\n    --mmp-text-color-inverted: var(--disabled-text-color);\n    --mmp-active-color: var(--mmp-accent-color);\n    --mmp-button-color: var(--mini-media-player-button-color, rgba(255, 255, 255, 0.25));\n    --mmp-icon-color: var(\n      --mini-media-player-icon-color,\n      var(--mini-media-player-base-color, var(--paper-item-icon-color, #44739e))\n    );\n    --mmp-icon-active-color: var(--paper-item-icon-active-color, --mmp-active-color);\n    --mmp-info-opacity: 0.75;\n    --mmp-bg-opacity: var(--mini-media-player-background-opacity, 1);\n    --mmp-artwork-opacity: var(--mini-media-player-artwork-opacity, 1);\n    --mmp-progress-height: var(--mini-media-player-progress-height, 6px);\n    --mdc-theme-primary: var(--mmp-text-color);\n    --mdc-theme-on-primary: var(--mmp-text-color);\n    --paper-checkbox-unchecked-color: var(--mmp-text-color);\n    --paper-checkbox-label-color: var(--mmp-text-color);\n    color: var(--mmp-text-color);\n  }\n  ha-card.--bg {\n    --mmp-info-opacity: 0.75;\n  }\n  ha-card.--has-artwork[artwork='material'],\n  ha-card.--has-artwork[artwork*='cover'] {\n    --mmp-accent-color: var(\n      --mini-media-player-overlay-accent-color,\n      var(--mini-media-player-accent-color, var(--accent-color, #f39c12))\n    );\n    --mmp-text-color: var(--mmp-overlay-base-color);\n    --mmp-text-color-inverted: #000;\n    --mmp-active-color: rgba(255, 255, 255, 0.5);\n    --mmp-icon-color: var(--mmp-text-color);\n    --mmp-icon-active-color: var(--mmp-text-color);\n    --mmp-info-opacity: 0.75;\n    --paper-slider-container-color: var(--mini-media-player-overlay-color, rgba(255, 255, 255, 0.75)) !important;\n    --mdc-theme-primary: var(--mmp-text-color);\n    --mdc-theme-on-primary: var(--mmp-text-color);\n    --paper-checkbox-unchecked-color: var(--mmp-text-color);\n    --paper-checkbox-label-color: var(--mmp-text-color);\n    --switch-checked-color: var(--mmp-accent-color);\n    --switch-checked-button-color: var(--mmp-accent-color);\n    --switch-checked-track-color: var(--mmp-accent-color);\n    --switch-unchecked-color: var(--mmp-text-color);\n    --switch-unchecked-button-color: var(--mmp-text-color);\n    --switch-unchecked-track-color: var(--mmp-text-color);\n    color: var(--mmp-text-color);\n  }\n  ha-card {\n    cursor: default;\n    display: flex;\n    background: transparent;\n    overflow: visible;\n    padding: 0;\n    position: relative;\n    color: inherit;\n    font-size: calc(var(--mmp-unit) * 0.35);\n    --mdc-icon-button-size: calc(var(--mmp-unit));\n    --mdc-icon-size: calc(var(--mmp-unit) * 0.6);\n  }\n  ha-card.--group {\n    box-shadow: none;\n    --mmp-progress-height: var(--mini-media-player-progress-height, 4px);\n  }\n  ha-card.--more-info {\n    cursor: pointer;\n  }\n  .mmp__bg,\n  .mmp-player,\n  .mmp__container {\n    border-radius: var(--ha-card-border-radius, 0);\n  }\n  .mmp__container {\n    overflow: hidden;\n    height: 100%;\n    width: 100%;\n    position: absolute;\n    pointer-events: none;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0);\n  }\n  ha-card:before {\n    content: '';\n    padding-top: 0px;\n    transition: padding-top 0.5s cubic-bezier(0.21, 0.61, 0.35, 1);\n    will-change: padding-top;\n  }\n  ha-card.--initial .entity__artwork,\n  ha-card.--initial .entity__icon {\n    animation-duration: 0.001s;\n  }\n  ha-card.--initial:before,\n  ha-card.--initial .mmp-player {\n    transition: none;\n  }\n  header {\n    display: none;\n  }\n  ha-card[artwork='full-cover'].--has-artwork:before {\n    padding-top: 56%;\n  }\n  ha-card[artwork='full-cover'].--has-artwork[content='music']:before,\n  ha-card[artwork='full-cover-fit'].--has-artwork:before {\n    padding-top: 100%;\n  }\n  .mmp__bg {\n    background: var(--ha-card-background, var(--card-background-color, var(--paper-card-background-color, white)));\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    overflow: hidden;\n    -webkit-transform: translateZ(0);\n    transform: translateZ(0);\n    opacity: var(--mmp-bg-opacity);\n  }\n  ha-card[artwork='material'].--has-artwork .mmp__bg,\n  ha-card[artwork*='cover'].--has-artwork .mmp__bg {\n    opacity: var(--mmp-artwork-opacity);\n    background: transparent;\n  }\n  ha-card[artwork='material'].--has-artwork .cover {\n    height: 100%;\n    right: 0;\n    left: unset;\n    animation: fade-in 4s cubic-bezier(0.21, 0.61, 0.35, 1) !important;\n  }\n  ha-card[artwork='material'].--has-artwork .cover.--prev {\n    animation: fade-in 1s linear reverse forwards !important;\n  }\n  ha-card[artwork='material'].--has-artwork .cover-gradient {\n    position: absolute;\n    height: 100%;\n    right: 0;\n    left: 0;\n    opacity: 1;\n  }\n  ha-card.--group .mmp__bg {\n    background: transparent;\n  }\n  ha-card.--inactive .cover {\n    opacity: 0;\n  }\n  ha-card.--inactive .cover.--bg {\n    opacity: 1;\n  }\n  .cover-gradient {\n    transition: opacity 0.45s linear;\n    opacity: 0;\n  }\n  .cover,\n  .cover:before {\n    display: block;\n    opacity: 0;\n    position: absolute;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    left: 0;\n    transition: opacity 0.75s linear, width 0.05s cubic-bezier(0.21, 0.61, 0.35, 1);\n    will-change: opacity;\n  }\n  .cover:before {\n    content: '';\n    background: var(--mmp-overlay-color);\n  }\n  .cover {\n    animation: fade-in 0.5s cubic-bezier(0.21, 0.61, 0.35, 1);\n    background-size: cover;\n    background-repeat: no-repeat;\n    background-position: center center;\n    border-radius: var(--ha-card-border-radius, 0);\n    overflow: hidden;\n  }\n  .cover.--prev {\n    animation: fade-in 0.5s linear reverse forwards;\n  }\n  .cover.--bg {\n    opacity: 1;\n  }\n  ha-card[artwork*='full-cover'].--has-artwork .mmp-player {\n    background: linear-gradient(to top, var(--mmp-overlay-color) var(--mmp-overlay-color-stop), transparent 100%);\n    border-bottom-left-radius: var(--ha-card-border-radius, 0);\n    border-bottom-right-radius: var(--ha-card-border-radius, 0);\n  }\n  ha-card.--has-artwork .cover,\n  ha-card.--has-artwork[artwork='cover'] .cover:before {\n    opacity: 0.999;\n  }\n  ha-card[artwork='default'] .cover {\n    display: none;\n  }\n  ha-card.--bg .cover {\n    display: block;\n  }\n  ha-card[artwork='material'].--has-artwork .cover {\n    background-size: cover;\n  }\n  ha-card[artwork='full-cover-fit'].--has-artwork .cover {\n    background-color: black;\n    background-size: contain;\n  }\n  .mmp-player {\n    align-self: flex-end;\n    box-sizing: border-box;\n    position: relative;\n    padding: 16px;\n    transition: padding 0.25s ease-out;\n    width: 100%;\n    will-change: padding;\n  }\n  ha-card.--group .mmp-player {\n    padding: 2px 0;\n  }\n  .flex {\n    display: flex;\n    display: -ms-flexbox;\n    display: -webkit-flex;\n    flex-direction: row;\n  }\n  .mmp-player__core {\n    position: relative;\n  }\n  .entity__info {\n    justify-content: center;\n    display: flex;\n    flex-direction: column;\n    margin-left: 8px;\n    position: relative;\n    overflow: hidden;\n    user-select: none;\n  }\n  ha-card.--rtl .entity__info {\n    margin-left: auto;\n    margin-right: calc(var(--mmp-unit) / 5);\n  }\n  ha-card[content='movie'] .attr__media_season,\n  ha-card[content='movie'] .attr__media_episode {\n    display: none;\n  }\n  .entity__icon {\n    color: var(--mmp-icon-color);\n  }\n  .entity__icon[color] {\n    color: var(--mmp-icon-active-color);\n  }\n  .entity__artwork,\n  .entity__icon {\n    animation: fade-in 0.25s ease-out;\n    background-position: center center;\n    background-repeat: no-repeat;\n    background-size: cover;\n    border-radius: 100%;\n    height: var(--mmp-unit);\n    width: var(--mmp-unit);\n    min-width: var(--mmp-unit);\n    line-height: var(--mmp-unit);\n    margin-right: calc(var(--mmp-unit) / 5);\n    position: relative;\n    text-align: center;\n    will-change: border-color;\n    transition: border-color 0.25s ease-out;\n  }\n  ha-card.--rtl .entity__artwork,\n  ha-card.--rtl .entity__icon {\n    margin-right: auto;\n  }\n  .entity__artwork[border] {\n    border: 2px solid var(--primary-text-color);\n    box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    -webkit-box-sizing: border-box;\n  }\n  .entity__artwork[border][state='playing'] {\n    border-color: var(--mmp-accent-color);\n  }\n  .entity__info__name,\n  .entity__info__media[short] {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .entity__info__name {\n    line-height: calc(var(--mmp-unit) / 2);\n    color: var(--mmp-text-color);\n    font-weight: var(--mmp-name-font-weight);\n  }\n  .entity__info__media {\n    color: var(--secondary-text-color);\n    max-height: 6em;\n    word-break: break-word;\n    opacity: var(--mmp-info-opacity);\n    transition: color 0.5s;\n  }\n  .entity__info__media[short] {\n    max-height: calc(var(--mmp-unit) / 2);\n    overflow: hidden;\n  }\n  .attr__app_name {\n    display: none;\n  }\n  .attr__app_name:first-child,\n  .attr__app_name:first-of-type {\n    display: inline;\n  }\n  .mmp-player__core[inactive] .entity__info__media {\n    color: var(--mmp-text-color);\n    max-width: 200px;\n    opacity: 0.5;\n  }\n  .entity__info__media[short-scroll] {\n    max-height: calc(var(--mmp-unit) / 2);\n    white-space: nowrap;\n  }\n  .entity__info__media[scroll] > span {\n    visibility: hidden;\n  }\n  .entity__info__media[scroll] > div {\n    animation: move linear infinite;\n  }\n  .entity__info__media[scroll] .marquee {\n    animation: slide linear infinite;\n  }\n  .entity__info__media[scroll] .marquee,\n  .entity__info__media[scroll] > div {\n    animation-duration: inherit;\n    visibility: visible;\n  }\n  .entity__info__media[scroll] {\n    animation-duration: 10s;\n    mask-image: linear-gradient(to right, transparent 0%, black 5%, black 95%, transparent 100%);\n    -webkit-mask-image: linear-gradient(to right, transparent 0%, black 5%, black 95%, transparent 100%);\n  }\n  .marquee {\n    visibility: hidden;\n    position: absolute;\n    white-space: nowrap;\n  }\n  ha-card[artwork*='cover'].--has-artwork .entity__info__media,\n  ha-card.--bg .entity__info__media {\n    color: var(--mmp-media-cover-info-color);\n  }\n  .entity__info__media span:before {\n    content: ' - ';\n  }\n  .entity__info__media span:first-of-type:before {\n    content: '';\n  }\n  .entity__info__media span:empty {\n    display: none;\n  }\n  .mmp-player__adds {\n    margin-left: calc(var(--mmp-unit) * 1.2);\n    position: relative;\n  }\n  ha-card.--rtl .mmp-player__adds {\n    margin-left: auto;\n    margin-right: calc(var(--mmp-unit) * 1.2);\n  }\n  .mmp-player__adds > *:nth-child(2) {\n    margin-top: 0px;\n  }\n  mmp-powerstrip {\n    flex: 1;\n    justify-content: flex-end;\n    margin-right: 0;\n    margin-left: auto;\n    width: auto;\n    max-width: 100%;\n  }\n  mmp-media-controls {\n    flex-wrap: wrap;\n  }\n  ha-card.--flow mmp-powerstrip {\n    justify-content: space-between;\n    margin-left: auto;\n  }\n  ha-card.--flow.--rtl mmp-powerstrip {\n    margin-right: auto;\n  }\n  ha-card.--flow .entity__info {\n    display: none;\n  }\n  ha-card.--responsive .mmp-player__adds {\n    margin-left: 0;\n  }\n  ha-card.--responsive.--rtl .mmp-player__adds {\n    margin-right: 0;\n  }\n  ha-card.--responsive .mmp-player__adds > mmp-media-controls {\n    padding: 0;\n  }\n  ha-card.--progress .mmp-player {\n    padding-bottom: calc(16px + calc(var(--mini-media-player-progress-height, 6px) - 6px));\n  }\n  ha-card.--progress.--group .mmp-player {\n    padding-bottom: calc(10px + calc(var(--mini-media-player-progress-height, 6px) - 6px));\n  }\n  ha-card.--runtime .mmp-player {\n    padding-bottom: calc(16px + 16px + var(--mini-media-player-progress-height, 0px));\n  }\n  ha-card.--runtime.--group .mmp-player {\n    padding-bottom: calc(16px + 12px + var(--mini-media-player-progress-height, 0px));\n  }\n  ha-card.--inactive .mmp-player {\n    padding: 16px;\n  }\n  ha-card.--inactive.--group .mmp-player {\n    padding: 2px 0;\n  }\n  .mmp-player div:empty {\n    display: none;\n  }\n  @keyframes slide {\n    100% {\n      transform: translateX(-100%);\n    }\n  }\n  @keyframes move {\n    from {\n      transform: translateX(100%);\n    }\n    to {\n      transform: translateX(0);\n    }\n  }\n  @keyframes fade-in {\n    from {\n      opacity: 0;\n    }\n    to {\n      opacity: 1;\n    }\n  }\n  ha-switch {\n    padding: 16px 6px;\n  }\n`,le=it`\n  .ellipsis {\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .label {\n    margin: 0 8px;\n  }\n  ha-icon {\n    width: calc(var(--mmp-unit) * 0.6);\n    height: calc(var(--mmp-unit) * 0.6);\n  }\n  ha-icon-button {\n    width: var(--mmp-unit);\n    height: var(--mmp-unit);\n    color: var(--mmp-text-color, var(--primary-text-color));\n    transition: color 0.25s;\n  }\n  ha-icon-button[color] {\n    color: var(--mmp-accent-color, var(--accent-color)) !important;\n    opacity: 1 !important;\n  }\n  ha-icon-button[inactive] {\n    opacity: 0.5;\n  }\n  ha-icon-button ha-icon,\n  mmp-icon-button ha-icon {\n    display: flex;\n  }\n`;var ce=(t,e,i,r,o)=>{let n;switch(r.action){case\"more-info\":n=new Event(\"hass-more-info\",{composed:!0}),n.detail={entityId:r.entity||o},t.dispatchEvent(n);break;case\"navigate\":if(!r.navigation_path)return;window.history.pushState(null,\"\",r.navigation_path),n=new Event(\"location-changed\",{composed:!0}),n.detail={replace:!1},window.dispatchEvent(n);break;case\"call-service\":{if(!r.service)return;const[t,i]=r.service.split(\".\",2),o={...r.service_data};e.callService(t,i,o);break}case\"url\":if(!r.url)return;r.new_tab?window.open(r.url,\"_blank\"):window.location.href=r.url;break;case\"fire-dom-event\":n=new Event(\"ll-custom\",{composed:!0,bubbles:!0}),n.detail=r,t.dispatchEvent(n)}r.haptic&&((t,e)=>{const i=new Event(\"haptic\",{composed:!0});i.detail={haptic:e},t.dispatchEvent(i)})(t,r.haptic)};var he,pe,ue,de=(he=function(t,e){var i;window,i=function(){return function(t){var e={};function i(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,i),o.l=!0,o.exports}return i.m=t,i.c=e,i.d=function(t,e,r){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},i.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&\"object\"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,\"default\",{enumerable:!0,value:t}),2&e&&\"string\"!=typeof t)for(var o in t)i.d(r,o,function(e){return t[e]}.bind(null,o));return r},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,\"a\",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p=\"\",i(i.s=10)}([function(t,e,i){Object.defineProperty(e,\"__esModule\",{value:!0}),e.assignDeep=e.mapValues=void 0,e.mapValues=function(t,e){var i={};for(var r in t)if(t.hasOwnProperty(r)){var o=t[r];i[r]=e(o)}return i},e.assignDeep=function t(e){for(var i=[],r=1;r<arguments.length;r++)i[r-1]=arguments[r];return i.forEach((function(i){if(i)for(var r in i)if(i.hasOwnProperty(r)){var o=i[r];Array.isArray(o)?e[r]=o.slice(0):\"object\"==typeof o?(e[r]||(e[r]={}),t(e[r],o)):e[r]=o}})),e}},function(t,e,i){var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,\"__esModule\",{value:!0});var o=i(7),n=r(i(8)),s=i(0),a=function(){function t(e,i){this._src=e,this.opts=s.assignDeep({},t.DefaultOpts,i)}return t.use=function(t){this._pipeline=t},t.from=function(t){return new n.default(t)},Object.defineProperty(t.prototype,\"result\",{get:function(){return this._result},enumerable:!1,configurable:!0}),t.prototype._process=function(e,i){this.opts.quantizer,e.scaleDown(this.opts);var r=o.buildProcessOptions(this.opts,i);return t._pipeline.process(e.getImageData(),r)},t.prototype.palette=function(){return this.swatches()},t.prototype.swatches=function(){throw new Error(\"Method deprecated. Use `Vibrant.result.palettes[name]` instead\")},t.prototype.getPalette=function(){var t=this,e=arguments[0],i=arguments[1],r=\"string\"==typeof e?e:\"default\",o=\"string\"==typeof e?i:e,n=new this.opts.ImageClass;return n.load(this._src).then((function(e){return t._process(e,{generators:[r]})})).then((function(e){return t._result=e,e.palettes[r]})).then((function(t){return n.remove(),o&&o(void 0,t),t})).catch((function(t){return n.remove(),o&&o(t),Promise.reject(t)}))},t.prototype.getPalettes=function(){var t=this,e=arguments[0],i=arguments[1],r=Array.isArray(e)?e:[\"*\"],o=Array.isArray(e)?i:e,n=new this.opts.ImageClass;return n.load(this._src).then((function(e){return t._process(e,{generators:r})})).then((function(e){return t._result=e,e.palettes})).then((function(t){return n.remove(),o&&o(void 0,t),t})).catch((function(t){return n.remove(),o&&o(t),Promise.reject(t)}))},t.DefaultOpts={colorCount:64,quality:5,filters:[]},t}();e.default=a},function(t,e,i){Object.defineProperty(e,\"__esModule\",{value:!0}),e.applyFilters=e.ImageBase=void 0;var r=function(){function t(){}return t.prototype.scaleDown=function(t){var e=this.getWidth(),i=this.getHeight(),r=1;if(t.maxDimension>0){var o=Math.max(e,i);o>t.maxDimension&&(r=t.maxDimension/o)}else r=1/t.quality;r<1&&this.resize(e*r,i*r,r)},t}();e.ImageBase=r,e.applyFilters=function(t,e){if(e.length>0)for(var i=t.data,r=i.length/4,o=void 0,n=void 0,s=void 0,a=void 0,l=void 0,c=0;c<r;c++){n=i[0+(o=4*c)],s=i[o+1],a=i[o+2],l=i[o+3];for(var h=0;h<e.length;h++)if(!e[h](n,s,a,l)){i[o+3]=0;break}}return t}},function(t,e,i){Object.defineProperty(e,\"__esModule\",{value:!0}),e.Swatch=void 0;var r=i(4),o=function(){function t(t,e){this._rgb=t,this._population=e}return t.applyFilters=function(t,e){return e.length>0?t.filter((function(t){for(var i=t.r,r=t.g,o=t.b,n=0;n<e.length;n++)if(!e[n](i,r,o,255))return!1;return!0})):t},t.clone=function(e){return new t(e._rgb,e._population)},Object.defineProperty(t.prototype,\"r\",{get:function(){return this._rgb[0]},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"g\",{get:function(){return this._rgb[1]},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"b\",{get:function(){return this._rgb[2]},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"rgb\",{get:function(){return this._rgb},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"hsl\",{get:function(){if(!this._hsl){var t=this._rgb,e=t[0],i=t[1],o=t[2];this._hsl=r.rgbToHsl(e,i,o)}return this._hsl},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"hex\",{get:function(){if(!this._hex){var t=this._rgb,e=t[0],i=t[1],o=t[2];this._hex=r.rgbToHex(e,i,o)}return this._hex},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"population\",{get:function(){return this._population},enumerable:!1,configurable:!0}),t.prototype.toJSON=function(){return{rgb:this.rgb,population:this.population}},t.prototype.getRgb=function(){return this._rgb},t.prototype.getHsl=function(){return this.hsl},t.prototype.getPopulation=function(){return this._population},t.prototype.getHex=function(){return this.hex},t.prototype.getYiq=function(){if(!this._yiq){var t=this._rgb;this._yiq=(299*t[0]+587*t[1]+114*t[2])/1e3}return this._yiq},Object.defineProperty(t.prototype,\"titleTextColor\",{get:function(){return this._titleTextColor&&(this._titleTextColor=this.getYiq()<200?\"#fff\":\"#000\"),this._titleTextColor},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,\"bodyTextColor\",{get:function(){return this._bodyTextColor&&(this._bodyTextColor=this.getYiq()<150?\"#fff\":\"#000\"),this._bodyTextColor},enumerable:!1,configurable:!0}),t.prototype.getTitleTextColor=function(){return this.titleTextColor},t.prototype.getBodyTextColor=function(){return this.bodyTextColor},t}();e.Swatch=o},function(t,e,i){function r(t){var e=/^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(t);if(!e)throw new RangeError(\"'\"+t+\"' is not a valid hex color\");return[e[1],e[2],e[3]].map((function(t){return parseInt(t,16)}))}function o(t,e,i){return e/=255,i/=255,t=(t/=255)>.04045?Math.pow((t+.005)/1.055,2.4):t/12.92,e=e>.04045?Math.pow((e+.005)/1.055,2.4):e/12.92,i=i>.04045?Math.pow((i+.005)/1.055,2.4):i/12.92,[.4124*(t*=100)+.3576*(e*=100)+.1805*(i*=100),.2126*t+.7152*e+.0722*i,.0193*t+.1192*e+.9505*i]}function n(t,e,i){return e/=100,i/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(e=e>.008856?Math.pow(e,1/3):7.787*e+16/116)-16,500*(t-e),200*(e-(i=i>.008856?Math.pow(i,1/3):7.787*i+16/116))]}function s(t,e,i){var r=o(t,e,i);return n(r[0],r[1],r[2])}function a(t,e){var i=t[0],r=t[1],o=t[2],n=e[0],s=e[1],a=e[2],l=i-n,c=r-s,h=o-a,p=Math.sqrt(r*r+o*o),u=n-i,d=Math.sqrt(s*s+a*a)-p,m=Math.sqrt(l*l+c*c+h*h),g=Math.sqrt(m)>Math.sqrt(Math.abs(u))+Math.sqrt(Math.abs(d))?Math.sqrt(m*m-u*u-d*d):0;return u/=1,d/=1*(1+.045*p),g/=1*(1+.015*p),Math.sqrt(u*u+d*d+g*g)}function l(t,e){return a(s.apply(void 0,t),s.apply(void 0,e))}Object.defineProperty(e,\"__esModule\",{value:!0}),e.getColorDiffStatus=e.hexDiff=e.rgbDiff=e.deltaE94=e.rgbToCIELab=e.xyzToCIELab=e.rgbToXyz=e.hslToRgb=e.rgbToHsl=e.rgbToHex=e.hexToRgb=e.DELTAE94_DIFF_STATUS=void 0,e.DELTAE94_DIFF_STATUS={NA:0,PERFECT:1,CLOSE:2,GOOD:10,SIMILAR:50},e.hexToRgb=r,e.rgbToHex=function(t,e,i){return\"#\"+((1<<24)+(t<<16)+(e<<8)+i).toString(16).slice(1,7)},e.rgbToHsl=function(t,e,i){t/=255,e/=255,i/=255;var r=Math.max(t,e,i),o=Math.min(t,e,i),n=0,s=0,a=(r+o)/2;if(r!==o){var l=r-o;switch(s=a>.5?l/(2-r-o):l/(r+o),r){case t:n=(e-i)/l+(e<i?6:0);break;case e:n=(i-t)/l+2;break;case i:n=(t-e)/l+4}n/=6}return[n,s,a]},e.hslToRgb=function(t,e,i){var r,o,n;function s(t,e,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}if(0===e)r=o=n=i;else{var a=i<.5?i*(1+e):i+e-i*e,l=2*i-a;r=s(l,a,t+1/3),o=s(l,a,t),n=s(l,a,t-1/3)}return[255*r,255*o,255*n]},e.rgbToXyz=o,e.xyzToCIELab=n,e.rgbToCIELab=s,e.deltaE94=a,e.rgbDiff=l,e.hexDiff=function(t,e){return l(r(t),r(e))},e.getColorDiffStatus=function(t){return t<e.DELTAE94_DIFF_STATUS.NA?\"N/A\":t<=e.DELTAE94_DIFF_STATUS.PERFECT?\"Perfect\":t<=e.DELTAE94_DIFF_STATUS.CLOSE?\"Close\":t<=e.DELTAE94_DIFF_STATUS.GOOD?\"Good\":t<e.DELTAE94_DIFF_STATUS.SIMILAR?\"Similar\":\"Wrong\"}},function(t,e,i){var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},o=r(i(6)),n=r(i(9));o.default.DefaultOpts.ImageClass=n.default,t.exports=o.default},function(t,e,i){var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,\"__esModule\",{value:!0});var o=r(i(1));o.default.DefaultOpts.quantizer=\"mmcq\",o.default.DefaultOpts.generators=[\"default\"],o.default.DefaultOpts.filters=[\"default\"],e.default=o.default},function(t,e,i){Object.defineProperty(e,\"__esModule\",{value:!0}),e.buildProcessOptions=void 0;var r=i(0);e.buildProcessOptions=function(t,e){var i=t.colorCount,o=t.quantizer,n=t.generators,s=t.filters,a={colorCount:i},l=\"string\"==typeof o?{name:o,options:{}}:o;return l.options=r.assignDeep({},a,l.options),r.assignDeep({},{quantizer:l,generators:n,filters:s},e)}},function(t,e,i){var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,\"__esModule\",{value:!0});var o=r(i(1)),n=i(0),s=function(){function t(t,e){void 0===e&&(e={}),this._src=t,this._opts=n.assignDeep({},o.default.DefaultOpts,e)}return t.prototype.maxColorCount=function(t){return this._opts.colorCount=t,this},t.prototype.maxDimension=function(t){return this._opts.maxDimension=t,this},t.prototype.addFilter=function(t){return this._opts.filters?this._opts.filters.push(t):this._opts.filters=[t],this},t.prototype.removeFilter=function(t){if(this._opts.filters){var e=this._opts.filters.indexOf(t);e>0&&this._opts.filters.splice(e)}return this},t.prototype.clearFilters=function(){return this._opts.filters=[],this},t.prototype.quality=function(t){return this._opts.quality=t,this},t.prototype.useImageClass=function(t){return this._opts.ImageClass=t,this},t.prototype.useGenerator=function(t,e){return this._opts.generators||(this._opts.generators=[]),this._opts.generators.push(e?{name:t,options:e}:t),this},t.prototype.useQuantizer=function(t,e){return this._opts.quantizer=e?{name:t,options:e}:t,this},t.prototype.build=function(){return new o.default(this._src,this._opts)},t.prototype.getPalette=function(t){return this.build().getPalette(t)},t.prototype.getSwatches=function(t){return this.build().getPalette(t)},t}();e.default=s},function(t,e,i){var r,o=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])},r(t,e)},function(t,e){function i(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)});Object.defineProperty(e,\"__esModule\",{value:!0});var n=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype._initCanvas=function(){var t=this.image,e=this._canvas=document.createElement(\"canvas\"),i=e.getContext(\"2d\");if(!i)throw new ReferenceError(\"Failed to create canvas context\");this._context=i,e.className=\"@vibrant/canvas\",e.style.display=\"none\",this._width=e.width=t.width,this._height=e.height=t.height,i.drawImage(t,0,0),document.body.appendChild(e)},e.prototype.load=function(t){var e,i,r,o,n,s,a,l=this;if(\"string\"==typeof t)e=document.createElement(\"img\"),i=t,(a=new URL(i,location.href)).protocol===location.protocol&&a.host===location.host&&a.port===location.port||(r=window.location.href,o=i,n=new URL(r),s=new URL(o),n.protocol===s.protocol&&n.hostname===s.hostname&&n.port===s.port)||(e.crossOrigin=\"anonymous\"),e.src=i;else{if(!(t instanceof HTMLImageElement))return Promise.reject(new Error(\"Cannot load buffer as an image in browser\"));e=t,i=t.src}return this.image=e,new Promise((function(t,r){var o=function(){l._initCanvas(),t(l)};e.complete?o():(e.onload=o,e.onerror=function(t){return r(new Error(\"Fail to load image: \"+i))})}))},e.prototype.clear=function(){this._context.clearRect(0,0,this._width,this._height)},e.prototype.update=function(t){this._context.putImageData(t,0,0)},e.prototype.getWidth=function(){return this._width},e.prototype.getHeight=function(){return this._height},e.prototype.resize=function(t,e,i){var r=this,o=r._canvas,n=r._context,s=r.image;this._width=o.width=t,this._height=o.height=e,n.scale(i,i),n.drawImage(s,0,0)},e.prototype.getPixelCount=function(){return this._width*this._height},e.prototype.getImageData=function(){return this._context.getImageData(0,0,this._width,this._height)},e.prototype.remove=function(){this._canvas&&this._canvas.parentNode&&this._canvas.parentNode.removeChild(this._canvas)},e}(i(2).ImageBase);e.default=n},function(t,e,i){var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},o=i(5),n=r(i(11));o.use(n.default),t.exports=o},function(t,e,i){var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,\"__esModule\",{value:!0});var o=r(i(12)),n=r(i(16)),s=(new(i(17).BasicPipeline)).filter.register(\"default\",(function(t,e,i,r){return r>=125&&!(t>250&&e>250&&i>250)})).quantizer.register(\"mmcq\",o.default).generator.register(\"default\",n.default);e.default=s},function(t,e,i){var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,\"__esModule\",{value:!0});var o=i(3),n=r(i(13)),s=r(i(15));function a(t,e){for(var i=t.size();t.size()<e;){var r=t.pop();if(!(r&&r.count()>0))break;var o=r.split(),n=o[0],s=o[1];if(t.push(n),s&&s.count()>0&&t.push(s),t.size()===i)break;i=t.size()}}e.default=function(t,e){if(0===t.length||e.colorCount<2||e.colorCount>256)throw new Error(\"Wrong MMCQ parameters\");var i=n.default.build(t);i.histogram.colorCount;var r=new s.default((function(t,e){return t.count()-e.count()}));r.push(i),a(r,.75*e.colorCount);var l=new s.default((function(t,e){return t.count()*t.volume()-e.count()*e.volume()}));return l.contents=r.contents,a(l,e.colorCount-l.size()),function(t){for(var e=[];t.size();){var i=t.pop(),r=i.avg();r[0],r[1],r[2],e.push(new o.Swatch(r,i.count()))}return e}(l)}},function(t,e,i){var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,\"__esModule\",{value:!0});var o=r(i(14)),n=function(){function t(t,e,i,r,o,n,s){this.histogram=s,this._volume=-1,this._count=-1,this.dimension={r1:t,r2:e,g1:i,g2:r,b1:o,b2:n}}return t.build=function(e){var i=new o.default(e,{sigBits:5});return new t(i.rmin,i.rmax,i.gmin,i.gmax,i.bmin,i.bmax,i)},t.prototype.invalidate=function(){this._volume=this._count=-1,this._avg=null},t.prototype.volume=function(){if(this._volume<0){var t=this.dimension,e=t.r1,i=t.r2,r=t.g1,o=t.g2,n=t.b1,s=t.b2;this._volume=(i-e+1)*(o-r+1)*(s-n+1)}return this._volume},t.prototype.count=function(){if(this._count<0){for(var t=this.histogram,e=t.hist,i=t.getColorIndex,r=this.dimension,o=r.r1,n=r.r2,s=r.g1,a=r.g2,l=r.b1,c=r.b2,h=0,p=o;p<=n;p++)for(var u=s;u<=a;u++)for(var d=l;d<=c;d++)h+=e[i(p,u,d)];this._count=h}return this._count},t.prototype.clone=function(){var e=this.histogram,i=this.dimension;return new t(i.r1,i.r2,i.g1,i.g2,i.b1,i.b2,e)},t.prototype.avg=function(){if(!this._avg){var t=this.histogram,e=t.hist,i=t.getColorIndex,r=this.dimension,o=r.r1,n=r.r2,s=r.g1,a=r.g2,l=r.b1,c=r.b2,h=0,p=void 0,u=void 0,d=void 0;p=u=d=0;for(var m=o;m<=n;m++)for(var g=s;g<=a;g++)for(var f=l;f<=c;f++){var v=e[i(m,g,f)];h+=v,p+=v*(m+.5)*8,u+=v*(g+.5)*8,d+=v*(f+.5)*8}this._avg=h?[~~(p/h),~~(u/h),~~(d/h)]:[~~(8*(o+n+1)/2),~~(8*(s+a+1)/2),~~(8*(l+c+1)/2)]}return this._avg},t.prototype.contains=function(t){var e=t[0],i=t[1],r=t[2],o=this.dimension,n=o.r1,s=o.r2,a=o.g1,l=o.g2,c=o.b1,h=o.b2;return i>>=3,r>>=3,(e>>=3)>=n&&e<=s&&i>=a&&i<=l&&r>=c&&r<=h},t.prototype.split=function(){var t=this.histogram,e=t.hist,i=t.getColorIndex,r=this.dimension,o=r.r1,n=r.r2,s=r.g1,a=r.g2,l=r.b1,c=r.b2,h=this.count();if(!h)return[];if(1===h)return[this.clone()];var p,u,d=n-o+1,m=a-s+1,g=c-l+1,f=Math.max(d,m,g),v=null;p=u=0;var _=null;if(f===d){_=\"r\",v=new Uint32Array(n+1);for(var y=o;y<=n;y++){p=0;for(var b=s;b<=a;b++)for(var w=l;w<=c;w++)p+=e[i(y,b,w)];u+=p,v[y]=u}}else if(f===m)for(_=\"g\",v=new Uint32Array(a+1),b=s;b<=a;b++){for(p=0,y=o;y<=n;y++)for(w=l;w<=c;w++)p+=e[i(y,b,w)];u+=p,v[b]=u}else for(_=\"b\",v=new Uint32Array(c+1),w=l;w<=c;w++){for(p=0,y=o;y<=n;y++)for(b=s;b<=a;b++)p+=e[i(y,b,w)];u+=p,v[w]=u}for(var x=-1,k=new Uint32Array(v.length),S=0;S<v.length;S++){var $=v[S];x<0&&$>u/2&&(x=S),k[S]=u-$}var P=this;return function(t){var e=t+\"1\",i=t+\"2\",r=P.dimension[e],o=P.dimension[i],n=P.clone(),s=P.clone(),a=x-r,l=o-x;for(a<=l?(o=Math.min(o-1,~~(x+l/2)),o=Math.max(0,o)):(o=Math.max(r,~~(x-1-a/2)),o=Math.min(P.dimension[i],o));!v[o];)o++;for(var c=k[o];!c&&v[o-1];)c=k[--o];return n.dimension[i]=o,s.dimension[e]=o+1,[n,s]}(_)},t}();e.default=n},function(t,e,i){Object.defineProperty(e,\"__esModule\",{value:!0});var r=function(){function t(t,e){this.pixels=t,this.opts=e;var i=e.sigBits,r=function(t,e,r){return(t<<2*i)+(e<<i)+r};this.getColorIndex=r;var o,n,s,a,l,c,h,p,u,d=8-i,m=new Uint32Array(1<<3*i);o=s=l=0,n=a=c=Number.MAX_VALUE;for(var g=t.length/4,f=0;f<g;){var v=4*f;f++,h=t[v+0],p=t[v+1],u=t[v+2],0!==t[v+3]&&(m[r(h>>=d,p>>=d,u>>=d)]+=1,h>o&&(o=h),h<n&&(n=h),p>s&&(s=p),p<a&&(a=p),u>l&&(l=u),u<c&&(c=u))}this._colorCount=m.reduce((function(t,e){return e>0?t+1:t}),0),this.hist=m,this.rmax=o,this.rmin=n,this.gmax=s,this.gmin=a,this.bmax=l,this.bmin=c}return Object.defineProperty(t.prototype,\"colorCount\",{get:function(){return this._colorCount},enumerable:!1,configurable:!0}),t}();e.default=r},function(t,e,i){Object.defineProperty(e,\"__esModule\",{value:!0});var r=function(){function t(t){this._comparator=t,this.contents=[],this._sorted=!1}return t.prototype._sort=function(){this._sorted||(this.contents.sort(this._comparator),this._sorted=!0)},t.prototype.push=function(t){this.contents.push(t),this._sorted=!1},t.prototype.peek=function(t){return this._sort(),t=\"number\"==typeof t?t:this.contents.length-1,this.contents[t]},t.prototype.pop=function(){return this._sort(),this.contents.pop()},t.prototype.size=function(){return this.contents.length},t.prototype.map=function(t){return this._sort(),this.contents.map(t)},t}();e.default=r},function(t,e,i){Object.defineProperty(e,\"__esModule\",{value:!0});var r=i(3),o=i(4),n={targetDarkLuma:.26,maxDarkLuma:.45,minLightLuma:.55,targetLightLuma:.74,minNormalLuma:.3,targetNormalLuma:.5,maxNormalLuma:.7,targetMutesSaturation:.3,maxMutesSaturation:.4,targetVibrantSaturation:1,minVibrantSaturation:.35,weightSaturation:3,weightLuma:6.5,weightPopulation:.5};function s(t,e,i,r,o,n,s,a,l,c){var h=null,p=0;return e.forEach((function(e){var u=e.hsl,d=u[1],m=u[2];if(d>=a&&d<=l&&m>=o&&m<=n&&!function(t,e){return t.Vibrant===e||t.DarkVibrant===e||t.LightVibrant===e||t.Muted===e||t.DarkMuted===e||t.LightMuted===e}(t,e)){var g=function(t,e,i,r,o,n,s){function a(t,e){return 1-Math.abs(t-e)}return function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];for(var i=0,r=0,o=0;o<t.length;o+=2){var n=t[o],s=t[o+1];i+=n*s,r+=s}return i/r}(a(t,e),s.weightSaturation,a(i,r),s.weightLuma,o/n,s.weightPopulation)}(d,s,m,r,e.population,i,c);(null===h||g>p)&&(h=e,p=g)}})),h}e.default=function(t,e){e=Object.assign({},n,e);var i=function(t){var e=0;return t.forEach((function(t){e=Math.max(e,t.population)})),e}(t),a=function(t,e,i){var r={Vibrant:null,DarkVibrant:null,LightVibrant:null,Muted:null,DarkMuted:null,LightMuted:null};return r.Vibrant=s(r,t,e,i.targetNormalLuma,i.minNormalLuma,i.maxNormalLuma,i.targetVibrantSaturation,i.minVibrantSaturation,1,i),r.LightVibrant=s(r,t,e,i.targetLightLuma,i.minLightLuma,1,i.targetVibrantSaturation,i.minVibrantSaturation,1,i),r.DarkVibrant=s(r,t,e,i.targetDarkLuma,0,i.maxDarkLuma,i.targetVibrantSaturation,i.minVibrantSaturation,1,i),r.Muted=s(r,t,e,i.targetNormalLuma,i.minNormalLuma,i.maxNormalLuma,i.targetMutesSaturation,0,i.maxMutesSaturation,i),r.LightMuted=s(r,t,e,i.targetLightLuma,i.minLightLuma,1,i.targetMutesSaturation,0,i.maxMutesSaturation,i),r.DarkMuted=s(r,t,e,i.targetDarkLuma,0,i.maxDarkLuma,i.targetMutesSaturation,0,i.maxMutesSaturation,i),r}(t,i,e);return function(t,e,i){if(!t.Vibrant&&!t.DarkVibrant&&!t.LightVibrant){if(!t.DarkVibrant&&t.DarkMuted){var n=t.DarkMuted.hsl,s=n[0],a=n[1],l=n[2];l=i.targetDarkLuma,t.DarkVibrant=new r.Swatch(o.hslToRgb(s,a,l),0)}if(!t.LightVibrant&&t.LightMuted){var c=t.LightMuted.hsl;s=c[0],a=c[1],l=c[2],l=i.targetDarkLuma,t.DarkVibrant=new r.Swatch(o.hslToRgb(s,a,l),0)}}if(!t.Vibrant&&t.DarkVibrant){var h=t.DarkVibrant.hsl;s=h[0],a=h[1],l=h[2],l=i.targetNormalLuma,t.Vibrant=new r.Swatch(o.hslToRgb(s,a,l),0)}else if(!t.Vibrant&&t.LightVibrant){var p=t.LightVibrant.hsl;s=p[0],a=p[1],l=p[2],l=i.targetNormalLuma,t.Vibrant=new r.Swatch(o.hslToRgb(s,a,l),0)}if(!t.DarkVibrant&&t.Vibrant){var u=t.Vibrant.hsl;s=u[0],a=u[1],l=u[2],l=i.targetDarkLuma,t.DarkVibrant=new r.Swatch(o.hslToRgb(s,a,l),0)}if(!t.LightVibrant&&t.Vibrant){var d=t.Vibrant.hsl;s=d[0],a=d[1],l=d[2],l=i.targetLightLuma,t.LightVibrant=new r.Swatch(o.hslToRgb(s,a,l),0)}if(!t.Muted&&t.Vibrant){var m=t.Vibrant.hsl;s=m[0],a=m[1],l=m[2],l=i.targetMutesSaturation,t.Muted=new r.Swatch(o.hslToRgb(s,a,l),0)}if(!t.DarkMuted&&t.DarkVibrant){var g=t.DarkVibrant.hsl;s=g[0],a=g[1],l=g[2],l=i.targetMutesSaturation,t.DarkMuted=new r.Swatch(o.hslToRgb(s,a,l),0)}if(!t.LightMuted&&t.LightVibrant){var f=t.LightVibrant.hsl;s=f[0],a=f[1],l=f[2],l=i.targetMutesSaturation,t.LightMuted=new r.Swatch(o.hslToRgb(s,a,l),0)}}(a,0,e),a}},function(t,e,i){var r=this&&this.__awaiter||function(t,e,i,r){return new(i||(i=Promise))((function(o,n){function s(t){try{l(r.next(t))}catch(t){n(t)}}function a(t){try{l(r.throw(t))}catch(t){n(t)}}function l(t){var e;t.done?o(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(s,a)}l((r=r.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var i,r,o,n,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return n={next:a(0),throw:a(1),return:a(2)},\"function\"==typeof Symbol&&(n[Symbol.iterator]=function(){return this}),n;function a(n){return function(a){return function(n){if(i)throw new TypeError(\"Generator is already executing.\");for(;s;)try{if(i=1,r&&(o=2&n[0]?r.return:n[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,n[1])).done)return o;switch(r=0,o&&(n=[2&n[0],o.value]),n[0]){case 0:case 1:o=n;break;case 4:return s.label++,{value:n[1],done:!1};case 5:s.label++,r=n[1],n=[0];continue;case 7:n=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==n[0]&&2!==n[0])){s=0;continue}if(3===n[0]&&(!o||n[1]>o[0]&&n[1]<o[3])){s.label=n[1];break}if(6===n[0]&&s.label<o[1]){s.label=o[1],o=n;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(n);break}o[2]&&s.ops.pop(),s.trys.pop();continue}n=e.call(t,s)}catch(t){n=[6,t],r=0}finally{i=o=0}if(5&n[0])throw n[1];return{value:n[0]?n[1]:void 0,done:!0}}([n,a])}}};Object.defineProperty(e,\"__esModule\",{value:!0}),e.BasicPipeline=e.Stage=void 0;var n=i(2),s=function(){function t(t){this.pipeline=t,this._map={}}return t.prototype.names=function(){return Object.keys(this._map)},t.prototype.has=function(t){return!!this._map[t]},t.prototype.get=function(t){return this._map[t]},t.prototype.register=function(t,e){return this._map[t]=e,this.pipeline},t}();e.Stage=s;var a=function(){function t(){this.filter=new s(this),this.quantizer=new s(this),this.generator=new s(this)}return t.prototype._buildProcessTasks=function(t){var e=this,i=t.filters,r=t.quantizer,o=t.generators;return 1===o.length&&\"*\"===o[0]&&(o=this.generator.names()),{filters:i.map((function(t){return n(e.filter,t)})),quantizer:n(this.quantizer,r),generators:o.map((function(t){return n(e.generator,t)}))};function n(t,e){var i,r;return\"string\"==typeof e?i=e:(i=e.name,r=e.options),{name:i,fn:t.get(i),options:r}}},t.prototype.process=function(t,e){return r(this,void 0,void 0,(function(){var i,r,n,s,a,l,c;return o(this,(function(o){switch(o.label){case 0:return i=this._buildProcessTasks(e),r=i.filters,n=i.quantizer,s=i.generators,[4,this._filterColors(r,t)];case 1:return a=o.sent(),[4,this._generateColors(n,a)];case 2:return l=o.sent(),[4,this._generatePalettes(s,l)];case 3:return c=o.sent(),[2,{colors:l,palettes:c}]}}))}))},t.prototype._filterColors=function(t,e){return Promise.resolve(n.applyFilters(e,t.map((function(t){return t.fn}))))},t.prototype._generateColors=function(t,e){return Promise.resolve(t.fn(e.data,t.options))},t.prototype._generatePalettes=function(t,e){return r(this,void 0,void 0,(function(){var i;return o(this,(function(r){switch(r.label){case 0:return[4,Promise.all(t.map((function(t){var i=t.fn,r=t.options;return Promise.resolve(i(e,r))})))];case 1:return i=r.sent(),[2,Promise.resolve(i.reduce((function(e,i,r){return e[t[r].name]=i,e}),{}))]}}))}))},t}();e.BasicPipeline=a}])},t.exports=i()},he(pe={exports:{}},pe.exports),pe.exports),me=(ue=de)&&ue.__esModule&&Object.prototype.hasOwnProperty.call(ue,\"default\")?ue.default:ue;const ge=(t,e,i)=>{const r=[t,e,i].map((t=>{let e=t;return e/=255,e<=.03928?e/12.92:((e+.055)/1.055)**2.4}));return.2126*r[0]+.7152*r[1]+.0722*r[2]},fe=(t,e)=>Math.round(100*(((t,e)=>{const i=ge(...t),r=ge(...e);return(Math.max(i,r)+.05)/(Math.min(i,r)+.05)})(t,e)+Number.EPSILON))/100;me._pipeline.generator.register(\"default\",(t=>{t.sort(((t,e)=>e.population-t.population));const e=t[0];let i;const r=new Map,o=(t,i)=>(r.has(t)||r.set(t,fe(e.rgb,i)),r.get(t)>4.5);for(let e=1;e<t.length&&void 0===i;e++){if(o(t[e].hex,t[e].rgb)){i=t[e].rgb;break}const r=t[e];for(let n=e+1;n<t.length;n++){const e=t[n];if(!(Math.abs(r.rgb[0]-e.rgb[0])+Math.abs(r.rgb[1]-e.rgb[1])+Math.abs(r.rgb[2]-e.rgb[2])>150)&&o(e.hex,e.rgb)){i=e.rgb;break}}}return void 0===i&&(i=e.getYiq()<200?[255,255,255]:[0,0,0]),[new e.constructor(i,0).hex,e.hex]}));customElements.get(\"ha-slider\")||customElements.define(\"ha-slider\",class extends(customElements.get(\"paper-slider\")){}),customElements.get(\"ha-icon-button\")||customElements.define(\"ha-icon-button\",class extends(customElements.get(\"paper-icon-button\")){}),customElements.get(\"ha-icon\")||customElements.define(\"ha-icon\",class extends(customElements.get(\"iron-icon\")){});const ve={en:{placeholder:{tts:\"Text to speech\"},label:{leave:\"Leave\",ungroup:\"Ungroup\",group_all:\"Group all\",send:\"Send\",master:\"Master\"},state:{idle:\"Idle\",unavailable:\"Unavailable\"},title:{speaker_management:\"Group management\"}},de:{placeholder:{tts:\"Text zum Sprechen\"},label:{leave:\"Verlassen\",ungroup:\"Teilen\",group_all:\"Gruppieren\",send:\"Senden\",master:\"Master\"},state:{idle:\"Pause\",unavailable:\"Nicht verfügbar\"},title:{speaker_management:\"Wiedergabe auf\"}},fr:{placeholder:{tts:\"Texte à lire\"},label:{leave:\"Quitter\",ungroup:\"Dégrouper\",group_all:\"Grouper tous\",send:\"Envoyer\"},state:{idle:\"Inactif\",unavailable:\"Indisponible\"},title:{speaker_management:\"Gestion des groupes\"}},hu:{placeholder:{tts:\"Szövegfelolvasás\"},label:{leave:\"Kilépés\",ungroup:\"Összes ki\",group_all:\"Összes be\",send:\"Küldés\",master:\"Forrás\"},state:{idle:\"Tétlen\",unavailable:\"Nem elérhető\"},title:{speaker_management:\"Hangszórók csoportosítása\"}},no:{placeholder:{tts:\"Tekst til tale\"},label:{leave:\"Forlat\",ungroup:\"Oppløs gruppe\",group_all:\"Grupper alle\",send:\"Send\",master:\"Master\"},state:{idle:\"Inaktiv\",unavailable:\"Utilgjengelig\"},title:{speaker_management:\"Gruppestyring\"}},pl:{placeholder:{tts:\"Zamień tekst na mowę\"},label:{leave:\"Opuść\",ungroup:\"Usuń grupę\",group_all:\"Grupuj wszystkie\",send:\"Wyślij\"},state:{idle:\"nieaktywny\",unavailable:\"niedostępny\"},title:{speaker_management:\"Zarządzanie grupą\"}},uk:{placeholder:{tts:\"Текст для відтворення\"},label:{leave:\"Залишити\",ungroup:\"Розгрупувати\",group_all:\"Згрупувати всі\",send:\"Надіслати\",master:\"Головний\"},state:{idle:\"бездіяльність\",unavailable:\"недоступний\"},title:{speaker_management:\"Управління групою\"}},cz:{placeholder:{tts:\"Převeď text na řeč\"},label:{leave:\"Odejít\",ungroup:\"Zrušit seskupení\",group_all:\"Seskupit vše\",send:\"Poslat\",master:\"Master\"},state:{idle:\"Nečinný\",unavailable:\"Nedostupný\"},title:{speaker_management:\"Správa skupin\"}},ru:{placeholder:{tts:\"Преобразование текста в речь\"},label:{leave:\"Покинуть\",ungroup:\"Разгруппировать\",group_all:\"Сгруппировать все\",send:\"Отправить\",master:\"Мастер\"},state:{idle:\"Бездействие\",unavailable:\"Недоступен\"},title:{speaker_management:\"Управление группой\"}},es:{placeholder:{tts:\"Texto a voz\"},label:{leave:\"Salir\",ungroup:\"Desagrupar\",group_all:\"Agrupar todos\",send:\"Enviar\",master:\"Maestro\"},state:{idle:\"Inactivo\",unavailable:\"No disponible\"},title:{speaker_management:\"Gestión de grupo\"}},zh:{placeholder:{tts:\"播放文本\"},label:{leave:\"退出\",ungroup:\"取消组合\",group_all:\"组合全部\",send:\"发送\",master:\"主要的\"},state:{idle:\"空闲\",unavailable:\"不可用\"},title:{speaker_management:\"组合管理\"}},ca:{placeholder:{tts:\"Text a veu\"},label:{leave:\"Sortir\",ungroup:\"Desagrupar\",group_all:\"Agrupar-los tots\",send:\"Enviar\",master:\"Mestre\"},state:{idle:\"Inactiu\",unavailable:\"No disponible\"},title:{speaker_management:\"Gestió del grup\"}}},_e=(t,e)=>e.split(\".\").reduce(((t,e)=>t&&t[e]||null),t),ye=(t,e,i,r=\"unknown\")=>{const o=t.selectedLanguage||t.language,n=o.split(\"-\")[0];return ve[o]&&_e(ve[o],e)||t.resources[o]&&i&&t.resources[o][i]||ve[n]&&_e(ve[n],e)||_e(ve.en,e)||r};let be=class extends ot{render(){return I`\n      <ha-switch .checked=${this.checked} ?disabled=${this.disabled}></ha-switch>\n      <span ?disabled=${this.disabled}>\n        <slot>${this.label}</slot>\n      </span>\n    `}static get styles(){return it`\n      :host {\n        display: flex;\n        padding: 0.6em 0;\n        align-items: center;\n      }\n      span {\n        margin-left: 1em;\n        font-weight: 400;\n      }\n      span[disabled] {\n        opacity: 0.65;\n      }\n    `}};t([Z({attribute:!1})],be.prototype,\"checked\",void 0),t([Z({attribute:!1})],be.prototype,\"disabled\",void 0),t([Z({attribute:!1})],be.prototype,\"label\",void 0),be=t([J(\"mmp-checkbox\")],be);let we=class extends ot{render(){return I`\n      <mmp-checkbox\n        .checked=${this.checked}\n        .disabled=${this.disabled}\n        @change=\"${t=>t.stopPropagation()}\"\n        @click=\"${this.handleClick}\"\n      >\n        ${this.item.name} ${this.master?I`<span class=\"master\">(${ye(this.hass,\"label.master\")})</span>`:\"\"}\n      </mmp-checkbox>\n    `}handleClick(t){t.stopPropagation(),t.preventDefault(),this.disabled||this.dispatchEvent(new CustomEvent(\"change\",{detail:{entity:this.item.entity_id,checked:!this.checked}}))}static get styles(){return it`\n      .master {\n        font-weight: 500;\n      }\n    `}};t([Z({attribute:!1})],we.prototype,\"hass\",void 0),t([Z({attribute:!1})],we.prototype,\"item\",void 0),t([Z({attribute:!1})],we.prototype,\"checked\",void 0),t([Z({attribute:!1})],we.prototype,\"disabled\",void 0),t([Z({attribute:!1})],we.prototype,\"master\",void 0),we=t([J(\"mmp-group-item\")],we);let xe=class extends ot{render(){return I`\n      <div class=\"container\">\n        <div class=\"slot-container\">\n          <slot></slot>\n        </div>\n        <paper-ripple></paper-ripple>\n      </div>\n    `}static get styles(){return it`\n      :host {\n        position: relative;\n        box-sizing: border-box;\n        margin: 4px;\n        min-width: 0;\n        overflow: hidden;\n        transition: background 0.5s;\n        border-radius: 4px;\n        font-weight: 500;\n      }\n      :host([raised]) {\n        background: var(--mmp-button-color);\n        min-height: calc(var(--mmp-unit) * 0.8);\n        box-shadow: 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14),\n          0px 1px 5px 0px rgba(0, 0, 0, 0.12);\n      }\n      :host([color]) {\n        background: var(--mmp-active-color);\n        transition: background 0.25s;\n        opacity: 1;\n      }\n      :host([faded]) {\n        opacity: 0.75;\n      }\n      :host([disabled]) {\n        opacity: 0.25;\n        pointer-events: none;\n      }\n      .container {\n        height: 100%;\n        width: 100%;\n      }\n      .slot-container {\n        height: 100%;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        margin: 0 8px;\n        width: auto;\n      }\n      paper-ripple {\n        position: absolute;\n        left: 0;\n        right: 0;\n        top: 0;\n        bottom: 0;\n      }\n    `}};xe=t([J(\"mmp-button\")],xe);let ke=class extends ot{get group(){return this.player.group}get master(){return this.player.master}get isMaster(){return this.player.isMaster}get isGrouped(){return this.player.isGrouped}handleGroupChange(t){const{entity:e,checked:i}=t.detail;this.player.handleGroupChange(t,e,i)}render(){if(!this.visible)return I``;const{group:t,isMaster:e,isGrouped:i}=this,{id:r}=this.player;return I`\n      <div class=\"mmp-group-list\">\n        <span class=\"mmp-group-list__title\">${ye(this.hass,\"title.speaker_management\")}</span>\n        ${this.entities.map((t=>this.renderItem(t,r)))}\n        <div class=\"mmp-group-list__buttons\">\n          <mmp-button raised ?disabled=${!i} @click=${t=>this.player.handleGroupChange(t,r,!1)}>\n            <span>${ye(this.hass,\"label.leave\")}</span>\n          </mmp-button>\n          ${i&&e?I`\n                <mmp-button raised @click=${e=>this.player.handleGroupChange(e,t,!1)}>\n                  <span>${ye(this.hass,\"label.ungroup\")}</span>\n                </mmp-button>\n              `:I``}\n          <mmp-button\n            raised\n            ?disabled=${!e}\n            @click=${t=>this.player.handleGroupChange(t,this.entities.map((t=>t.entity_id)),!0)}\n          >\n            <span>${ye(this.hass,\"label.group_all\")}</span>\n          </mmp-button>\n        </div>\n      </div>\n    `}renderItem(t,e){const i=t.entity_id;return I` <mmp-group-item\n      @change=${this.handleGroupChange}\n      .item=${t}\n      .hass=${this.hass}\n      .checked=${i===e||this.group.includes(i)}\n      .disabled=${i===e||!this.isMaster}\n      .master=${i===this.master}\n    />`}static get styles(){return it`\n      .mmp-group-list {\n        display: flex;\n        flex-direction: column;\n        margin-left: 8px;\n        margin-bottom: 8px;\n      }\n      .mmp-group-list__title {\n        font-weight: 500;\n        letter-spacing: 0.1em;\n        margin: 8px 0 4px;\n        text-transform: uppercase;\n      }\n      .mmp-group-list__buttons {\n        display: flex;\n      }\n      mmp-button {\n        margin: 8px 8px 0 0;\n        min-width: 0;\n        text-transform: uppercase;\n        text-align: center;\n        width: 50%;\n        --mdc-theme-primary: transparent;\n      }\n    `}};t([Z({attribute:!1})],ke.prototype,\"hass\",void 0),t([Z({attribute:!1})],ke.prototype,\"entities\",void 0),t([Z({attribute:!1})],ke.prototype,\"player\",void 0),t([Z({attribute:!1})],ke.prototype,\"visible\",void 0),ke=t([J(\"mmp-group-list\")],ke);customElements.define(\"mmp-dropdown\",class extends ot{static get properties(){return{items:[],label:String,selected:String,id:String,isOpen:Boolean}}get selectedIndex(){return this.items.map((t=>t.id)).indexOf(this.selected)}firstUpdated(){const t=this.shadowRoot.querySelector(\"#menu\"),e=this.shadowRoot.querySelector(\"#button\");t.anchor=e}render(){return I`\n      <div\n        class='mmp-dropdown'\n        @click=${t=>t.stopPropagation()}\n        ?open=${this.isOpen}>\n        ${this.icon?I`\n          <ha-icon-button\n            id='button'\n            class='mmp-dropdown__button icon'\n            .icon=${Lt}\n            @click=${this.toggleMenu}>\n            <ha-icon .icon=${Lt}></ha-icon>\n          </ha-icon-button>\n        `:I`\n          <mmp-button id='button' class='mmp-dropdown__button' \n            @click=${this.toggleMenu}>\n            <div>\n              <span class='mmp-dropdown__label ellipsis'>\n                ${this.selected||this.label}\n              </span>\n              <ha-icon class='mmp-dropdown__icon' .icon=${Lt}></ha-icon>\n            </div>\n          </mmp-button>\n        `}\n        <mwc-menu\n          @closed=${this.handleClose}\n          @selected=${this.onChange}\n          activatable\n          id='menu'\n          corner='BOTTOM_RIGHT'\n          menuCorner='END'>\n          ${this.items.map((t=>I`\n            <mwc-list-item value=${t.id||t.name}>\n              ${t.icon?I`<ha-icon .icon=${t.icon}></ha-icon>`:\"\"}\n              ${t.name?I`<span class='mmp-dropdown__item__label'>${t.name}</span>`:\"\"}\n            </mwc-list-item>`))}\n        </mwc-menu>\n      </div>\n    `}onChange(t){const{index:e}=t.detail;e!==this.selectedIndex&&this.items[e]&&this.dispatchEvent(new CustomEvent(\"change\",{detail:this.items[e]}))}handleClose(t){t.stopPropagation(),this.isOpen=!1}toggleMenu(){const t=this.shadowRoot.querySelector(\"#menu\");t.open=!t.open,this.isOpen=t.open}static get styles(){return[le,it`\n        :host {\n          display: block;\n        }\n        :host([faded]) {\n          opacity: .75;\n        }\n        :host[small] .mmp-dropdown__label {\n          max-width: 60px;\n          display: block;\n          position: relative;\n          width: auto;\n          text-transform: initial;\n        }\n        :host[full] .mmp-dropdown__label {\n          max-width: none;\n        }\n        .mmp-dropdown {\n          padding: 0;\n          display: block;\n          position: relative;\n        }\n        .mmp-dropdown__button {\n          display: flex;\n          font-size: 1em;\n          justify-content: space-between;\n          align-items: center;\n          height: calc(var(--mmp-unit) - 4px);\n          margin: 2px 0;\n        }\n        .mmp-dropdown__button.icon {\n          height: var(--mmp-unit);\n          margin: 0;\n        }\n        .mmp-dropdown__button > div {\n          display: flex;\n          flex: 1;\n          justify-content: space-between;\n          align-items: center;\n          height: calc(var(--mmp-unit) - 4px);\n          max-width: 100%;\n        }\n        .mmp-dropdown__label {\n          text-align: left;\n          text-transform: none;\n        }\n        .mmp-dropdown__icon {\n          height: auto;\n          width: calc(var(--mmp-unit) * .6);\n          min-width: calc(var(--mmp-unit) * .6);\n        }\n        mwc-list-item > *:nth-child(2) {\n          margin-left: 4px;\n        }\n        .mmp-dropdown[open] mmp-button ha-icon {\n          color: var(--mmp-accent-color);\n          transform: rotate(180deg);\n        }\n        .mmp-dropdown[open] mmp-icon-button {\n          color: var(--mmp-accent-color);\n          transform: rotate(180deg);\n        }\n        .mmp-dropdown[open] mmp-icon-button[focused] {\n          color: var(--mmp-text-color);\n          transform: rotate(0deg);\n        }\n      `]}});customElements.define(\"mmp-shortcuts\",class extends ot{static get properties(){return{player:{},shortcuts:{}}}get buttons(){return this.shortcuts.buttons}get list(){return this.shortcuts.list}get show(){return!this.shortcuts.hide_when_off||this.player.isActive}get active(){return this.player.getAttribute(this.shortcuts.attribute)}get height(){return this.shortcuts.column_height||36}render(){if(!this.show)return I``;const{active:t}=this,e=this.list?I`\n      <mmp-dropdown class='mmp-shortcuts__dropdown'\n        @change=${this.handleShortcut}\n        .items=${this.list}\n        .label=${this.shortcuts.label}\n        .selected=${t}>\n      </mmp-dropdown>\n    `:\"\",i=this.buttons?I`\n      <div class='mmp-shortcuts__buttons'>\n        ${this.buttons.map((e=>I`\n          <mmp-button\n            style=\"${ct(this.shortcutStyle(e))}\"\n            raised\n            columns=${this.shortcuts.columns}\n            ?color=${e.id===t}\n            class='mmp-shortcuts__button'\n            @click=${t=>this.handleShortcut(t,e)}>\n            <div align=${this.shortcuts.align_text}>\n              ${e.icon?I`<ha-icon .icon=${e.icon}></ha-icon>`:\"\"}\n              ${e.image?I`<img src=${e.image}>`:\"\"}\n              ${e.name?I`<span class=\"ellipsis\">${e.name}</span>`:\"\"}\n            </div>\n          </mmp-button>`))}\n      </div>\n    `:\"\";return I`\n      ${i}\n      ${e}\n    `}handleShortcut(t,e){const{type:i,id:r,data:o}=e||t.detail;if(\"source\"===i)return this.player.setSource(t,r);if(\"service\"===i)return this.player.toggleService(t,r,o);if(\"script\"===i)return this.player.toggleScript(t,r,o);if(\"sound_mode\"===i)return this.player.setSoundMode(t,r);const n={media_content_type:i,media_content_id:r};this.player.setMedia(t,n)}shortcutStyle(t){return{\"min-height\":`${this.height}px`,...t.cover&&{\"background-image\":`url(${t.cover})`}}}static get styles(){return[le,it`\n        .mmp-shortcuts__buttons {\n          box-sizing: border-box;\n          display: flex;\n          flex-wrap: wrap;\n          margin-top: 8px;\n        }\n        .mmp-shortcuts__button {\n          min-width: calc(50% - 8px);\n          flex: 1;\n          background-size: cover;\n          background-repeat: no-repeat;\n          background-position: center center;\n        }\n        .mmp-shortcuts__button > div {\n          display: flex;\n          justify-content: center;\n          align-items: center;\n          width: 100%;\n          padding: .2em 0;\n        }\n        .mmp-shortcuts__button > div[align='left'] {\n          justify-content: flex-start;\n        }\n        .mmp-shortcuts__button > div[align='right'] {\n          justify-content: flex-end;\n        }\n        .mmp-shortcuts__button[columns='1'] {\n          min-width: calc(100% - 8px);\n        }\n        .mmp-shortcuts__button[columns='3'] {\n          min-width: calc(33.33% - 8px);\n        }\n        .mmp-shortcuts__button[columns='4'] {\n          min-width: calc(25% - 8px);\n        }\n        .mmp-shortcuts__button[columns='5'] {\n          min-width: calc(20% - 8px);\n        }\n        .mmp-shortcuts__button[columns='6'] {\n          min-width: calc(16.66% - 8px);\n        }\n        .mmp-shortcuts__button > div > span {\n          line-height: calc(var(--mmp-unit) * .6);\n          text-transform: initial;\n        }\n        .mmp-shortcuts__button > div > ha-icon {\n          width: calc(var(--mmp-unit) * .6);\n          height: calc(var(--mmp-unit) * .6);\n        }\n        .mmp-shortcuts__button > div > *:nth-child(2) {\n          margin-left: 4px;\n        }\n        .mmp-shortcuts__button > div > img {\n          height: 24px;\n        }\n      `]}});customElements.define(\"mmp-tts\",class extends ot{static get properties(){return{hass:{},config:{},player:{}}}get label(){return ye(this.hass,\"placeholder.tts\",\"ui.card.media_player.text_to_speak\",\"Say\")}get input(){return this.shadowRoot.getElementById(\"tts-input\")}get message(){return this.input.value}render(){return I`\n      <paper-input\n        id=\"tts-input\"\n        class=\"mmp-tts__input\"\n        no-label-float\n        placeholder=\"${this.label}...\"\n        @click=${t=>t.stopPropagation()}\n      >\n      </paper-input>\n      <mmp-button class=\"mmp-tts__button\" @click=${this.handleTts}>\n        <span>${ye(this.hass,\"label.send\")}</span>\n      </mmp-button>\n    `}handleTts(t){const{config:e,message:i}=this,r={message:i,entity_id:e.entity_id||this.player.id,...\"group\"===e.entity_id&&{entity_id:this.player.group},...e.data};switch(e.language&&(r.language=e.language),e.platform){case\"alexa\":this.hass.callService(\"notify\",\"alexa_media\",{message:i,data:{type:e.type||\"tts\",...e.data},target:r.entity_id});break;case\"sonos\":this.hass.callService(\"script\",\"sonos_say\",{sonos_entity:r.entity_id,volume:e.volume||.5,message:i,...e.data});break;case\"webos\":this.hass.callService(\"notify\",r.entity_id.split(\".\").slice(-1)[0],{message:i,...e.data});break;case\"ga\":this.hass.callService(\"notify\",\"ga_broadcast\",{message:i,...e.data});break;case\"service\":{const[t,o]=(e.data.service||\"\").split(\".\"),n={[e.data.message_field||\"message\"]:i,entity_id:r.entity_id,...e.language?{language:r.language}:{},...e.data.service_data||{}};this.hass.callService(t,o,n);break}default:this.hass.callService(\"tts\",`${e.platform}_say`,r)}t.stopPropagation(),this.reset()}reset(){this.input.value=\"\"}static get styles(){return it`\n      :host {\n        align-items: center;\n        margin-left: 8px;\n        display: flex;\n      }\n      .mmp-tts__input {\n        cursor: text;\n        flex: 1;\n        margin-right: 8px;\n        --paper-input-container-input: {\n          font-size: 1em;\n        };\n      }\n      ha-card[rtl] .mmp-tts__input {\n        margin-right: auto;\n        margin-left: 8px;\n      }\n      .mmp-tts__button {\n        margin: 0;\n        height: 30px;\n        padding: 0 .4em;\n      }\n      paper-input {\n        opacity: .75;\n        --paper-input-container-color: var(--mmp-text-color);\n        --paper-input-container-input-color: var(--mmp-text-color);\n        --paper-input-container-focus-color: var(--mmp-text-color);\n        --paper-input-container: {\n          padding: 0;\n        };\n      }\n      paper-input[focused] {\n        opacity: 1;\n      }\n\n      ha-card[artwork*='cover'][has-artwork] paper-input {\n        --paper-input-container-color: #FFFFFF;\n        --paper-input-container-input-color: #FFFFFF;\n        --paper-input-container-focus-color: #FFFFFF;\n      }\n    `}});var Se=t=>{let e=Math.abs(parseInt(\"\"+t%60,10)),i=Math.abs(parseInt(\"\"+t/60%60,10)),r=Math.abs(parseInt(\"\"+t/3600%24,10));return r=r<10?`0${r}`:r,i=i<10?`0${i}`:i,e=e<10?`0${e}`:e,`${\"00\"!==r?`${r}:`:\"\"}${i}:${e}`};customElements.define(\"mmp-progress\",class extends ot{static get properties(){return{_player:{},showTime:Boolean,showRemainingTime:Boolean,progress:Number,duration:Number,tracker:{},seekProgress:Number,seekWidth:Number,track:Boolean}}set player(t){this._player=t,this.hasProgress&&this.trackProgress()}get duration(){return this.player.mediaDuration}get player(){return this._player}get hasProgress(){return this.player.hasProgress}get width(){return this.shadowRoot.querySelector(\".mmp-progress\").offsetWidth}get offset(){return this.getBoundingClientRect().left}get classes(){return at({transiting:!this.seekProgress,seeking:this.seekProgress})}render(){return I`\n      <div class='mmp-progress'\n        @touchstart=${this.initSeek}\n        @touchend=${this.handleSeek}\n        @mousedown=${this.initSeek}\n        @mouseup=${this.handleSeek}\n        @mouseleave=${this.resetSeek}\n        @click=${t=>t.stopPropagation()}\n        ?paused=${!this.player.isPlaying}>\n        ${this.showTime?I`\n          <div class='mmp-progress__duration'>\n            <span>${Se(this.seekProgress||this.progress)}</span>\n            <div>\n              ${this.showTime?I`\n                <span class='mmp-progress__duration__remaining'>\n                  -${Se(this.duration-(this.seekProgress||this.progress))} |\n                </span>\n              `:\"\"}\n              <span>${Se(this.duration)}</span>\n            </div>\n          </div>\n        `:\"\"}\n        <paper-progress class=${this.classes}\n          value=${this.seekProgress||this.progress}\n          max=${this.duration}>\n        </paper-progress>\n      </div>\n    `}trackProgress(){this.progress=this.player.progress,this.tracker||(this.tracker=setInterval((()=>this.trackProgress()),1e3)),this.player.isPlaying||(clearInterval(this.tracker),this.tracker=null)}initSeek(t){const e=t.offsetX||t.touches[0].pageX-this.offset;this.seekWidth=this.width,this.seekProgress=this.calcProgress(e),this.addEventListener(\"touchmove\",this.moveSeek),this.addEventListener(\"mousemove\",this.moveSeek)}resetSeek(){this.seekProgress=null,this.removeEventListener(\"touchmove\",this.moveSeek),this.removeEventListener(\"mousemove\",this.moveSeek)}moveSeek(t){t.preventDefault();const e=t.offsetX||t.touches[0].pageX-this.offset;this.seekProgress=this.calcProgress(e)}handleSeek(t){this.resetSeek();const e=t.offsetX||t.changedTouches[0].pageX-this.offset,i=this.calcProgress(e);this.player.seek(t,i)}disconnectedCallback(){super.disconnectedCallback(),this.resetSeek(),clearInterval(this.tracker),this.tracker=null}connectedCallback(){super.connectedCallback(),this.hasProgress&&this.trackProgress()}calcProgress(t){const e=t/this.seekWidth*this.duration;return Math.min(Math.max(e,.1),this.duration)}static get styles(){return it`\n      .mmp-progress {\n        cursor: pointer;\n        left: 0; right: 0; bottom: 0;\n        position: absolute;\n        pointer-events: auto;\n        min-height: calc(var(--mmp-progress-height) + 10px);\n      }\n      .mmp-progress__duration {\n        left: calc(var(--ha-card-border-radius, 4px) / 2);\n        right: calc(var(--ha-card-border-radius, 4px) / 2);\n        bottom: calc(var(--mmp-progress-height) + 6px);\n        position: absolute;\n        display: flex;\n        justify-content: space-between;\n        font-size: .8em;\n        padding: 0 6px;\n        z-index: 2\n      }\n      .mmp-progress__duration__remaining {\n        opacity: .5;\n      }\n      paper-progress {\n        height: var(--mmp-progress-height);\n        --paper-progress-height: var(--mmp-progress-height);\n        bottom: 0;\n        position: absolute;\n        width: 100%;\n        transition: height 0;\n        z-index: 1;\n        --paper-progress-active-color: var(--mmp-accent-color);\n        --paper-progress-container-color: rgba(100,100,100,.15);\n        --paper-progress-transition-duration: 1s;\n        --paper-progress-transition-timing-function: linear;\n        --paper-progress-transition-delay: 0s;\n      }\n      paper-progress.seeking {\n        transition: height .15s ease-out;\n        height: calc(var(--mmp-progress-height) + 4px);\n        --paper-progress-height: calc(var(--mmp-progress-height) + 4px);\n      }\n      .mmp-progress[paused] paper-progress {\n        --paper-progress-active-color: var(--disabled-text-color, rgba(150,150,150,.5));\n      }\n    `}});let $e=class extends ot{get source(){return this.player.source}get alternatives(){return this.player.sources.map((t=>({name:t,id:t,type:\"source\"})))}render(){return I`\n      <mmp-dropdown\n        @change=${this.handleSource}\n        .items=${this.alternatives}\n        .label=${this.source}\n        .selected=${this.source}\n        .icon=${this.icon}\n      ></mmp-dropdown>\n    `}handleSource(t){const{id:e}=t.detail;this.player.setSource(t,e)}static get styles(){return it`\n      :host {\n        max-width: 120px;\n        min-width: var(--mmp-unit);\n      }\n      :host([full]) {\n        max-width: none;\n      }\n    `}};t([Z({attribute:!1})],$e.prototype,\"player\",void 0),t([Z({attribute:!1})],$e.prototype,\"icon\",void 0),$e=t([J(\"mmp-source-menu\")],$e);let Pe=class extends ot{constructor(){super(...arguments),this.selected=void 0}get mode(){return this.player.soundMode}get alternatives(){return this.player.soundModes.map((t=>({name:t,id:t,type:\"soundMode\"})))}render(){return I`\n      <mmp-dropdown\n        @change=${this.handleChange}\n        .items=${this.alternatives}\n        .label=${this.mode}\n        .selected=${this.selected||this.mode}\n        .icon=${this.icon}\n      ></mmp-dropdown>\n    `}handleChange(t){const{id:e}=t.detail;this.player.setSoundMode(t,e),this.selected=e}static get styles(){return it`\n      :host {\n        max-width: 120px;\n        min-width: var(--mmp-unit);\n      }\n      :host([full]) {\n        max-width: none;\n      }\n    `}};t([Z({attribute:!1})],Pe.prototype,\"player\",void 0),t([Z({attribute:!1})],Pe.prototype,\"icon\",void 0),t([K()],Pe.prototype,\"selected\",void 0),Pe=t([J(\"mmp-sound-menu\")],Pe);customElements.define(\"mmp-media-controls\",class extends ot{static get properties(){return{player:{},config:{},break:Boolean}}get showShuffle(){return!this.config.hide.shuffle&&this.player.supportsShuffle}get showRepeat(){return!this.config.hide.repeat&&this.player.supportsRepeat}get maxVol(){return this.config.max_volume||100}get minVol(){return this.config.min_volume||0}get vol(){return Math.round(100*this.player.vol)}get jumpAmount(){return this.config.jump_amount||10}render(){const{hide:t}=this.config;return I`\n      ${t.volume?I``:this.renderVolControls(this.player.muted)}\n      ${this.renderShuffleButton()}\n      ${this.renderRepeatButton()}\n      ${t.controls?I``:I`\n        <div class='flex mmp-media-controls__media' ?flow=${this.config.flow||this.break}>\n          ${!t.prev&&this.player.supportsPrev?I`\n            <ha-icon-button\n              @click=${t=>this.player.prev(t)}\n              .icon=${Ft}>\n             <ha-icon .icon=${Ft}></ha-icon>\n            </ha-icon-button>`:\"\"}\n          ${this.renderJumpBackwardButton()}\n          ${this.renderPlayButtons()}\n          ${this.renderJumpForwardButton()}\n          ${!t.next&&this.player.supportsNext?I`\n            <ha-icon-button\n              @click=${t=>this.player.next(t)}\n              .icon=${It}>\n             <ha-icon .icon=${It}></ha-icon>\n            </ha-icon-button>`:\"\"}\n        </div>\n      `}\n    `}renderShuffleButton(){return this.showShuffle?I`\n      <div class='flex mmp-media-controls__shuffle'>\n        <ha-icon-button\n          class='shuffle-button'\n          @click=${t=>this.player.toggleShuffle(t)}\n          .icon=${Ut}\n          ?color=${this.player.shuffle}>\n          <ha-icon .icon=${Ut}></ha-icon>\n        </ha-icon-button>\n      </div>\n    `:I``}renderRepeatButton(){if(!this.showRepeat)return I``;const t=[Vt.ONE,Vt.ALL].includes(this.player.repeat);return I`\n      <div class='flex mmp-media-controls__repeat'>\n        <ha-icon-button\n          class='repeat-button'\n          @click=${t=>this.player.toggleRepeat(t)}\n          .icon=${qt[this.player.repeat]}\n          ?color=${t}>\n          <ha-icon .icon=${qt[this.player.repeat]}></ha-icon>\n        </ha-icon-button>\n      </div>\n    `}renderVolControls(t){const e=this.config.volume_stateless?this.renderVolButtons(t):this.renderVolSlider(t),i=at({\"--buttons\":this.config.volume_stateless,\"mmp-media-controls__volume\":!0,flex:!0}),r=!this.config.hide.volume_level;return I`\n      <div class=${i}>\n        ${e}\n        ${r?this.renderVolLevel():\"\"}\n      </div>`}renderVolSlider(t){return I`\n      ${this.renderMuteButton(t)}\n      <ha-slider\n        @change=${this.handleVolumeChange}\n        @click=${t=>t.stopPropagation()}\n        ?disabled=${t}\n        min=${this.minVol} max=${this.maxVol}\n        value=${100*this.player.vol}\n        step=${this.config.volume_step||1}\n        dir=${\"ltr\"}\n        ignore-bar-touch pin>\n      </ha-slider>\n    `}renderVolButtons(t){return I`\n      ${this.renderMuteButton(t)}\n      <ha-icon-button\n        @click=${t=>this.player.volumeDown(t)}\n        .icon=${Gt}>\n          <ha-icon .icon=${Gt}></ha-icon>\n      </ha-icon-button>\n      <ha-icon-button\n        @click=${t=>this.player.volumeUp(t)}\n        .icon=${Ht}>\n          <ha-icon .icon=${Ht}></ha-icon>\n      </ha-icon-button>\n    `}renderVolLevel(){return I`\n      <span class=\"mmp-media-controls__volume__level\">${this.vol}%</span>\n    `}renderMuteButton(t){if(!this.config.hide.mute)switch(this.config.replace_mute){case\"play\":case\"play_pause\":return I`\n          <ha-icon-button\n            @click=${t=>this.player.playPause(t)}\n            .icon=${Rt[this.player.isPlaying]}>\n            <ha-icon .icon=${Rt[this.player.isPlaying]}></ha-icon>\n          </ha-icon-button>\n        `;case\"stop\":return I`\n          <ha-icon-button\n            @click=${t=>this.player.stop(t)}\n            .icon=${Bt.true}>\n            <ha-icon .icon=${Bt.true}></ha-icon>\n          </ha-icon-button>\n        `;case\"play_stop\":return I`\n          <ha-icon-button\n            @click=${t=>this.player.playStop(t)}\n            .icon=${Bt[this.player.isPlaying]}>\n            <ha-icon .icon=${Bt[this.player.isPlaying]}></ha-icon>\n          </ha-icon-button>\n        `;case\"next\":return I`\n          <ha-icon-button\n            @click=${t=>this.player.next(t)}\n            .icon=${It}>\n            <ha-icon .icon=${It}></ha-icon>\n          </ha-icon-button>\n        `;default:if(!this.player.supportsMute)return;return I`\n          <ha-icon-button\n            @click=${t=>this.player.toggleMute(t)}\n            .icon=${jt[t]}>\n            <ha-icon .icon=${jt[t]}></ha-icon>\n          </ha-icon-button>\n        `}}renderPlayButtons(){const{hide:t}=this.config;return I`\n      ${t.play_pause?I``:I`\n        <ha-icon-button\n          @click=${t=>this.player.playPause(t)}\n          .icon=${Rt[this.player.isPlaying]}>\n            <ha-icon .icon=${Rt[this.player.isPlaying]}></ha-icon>\n        </ha-icon-button>\n      `}\n      ${t.play_stop?I``:I`\n        <ha-icon-button\n          @click=${t=>this.handleStop(t)}\n          .icon=${t.play_pause?Bt[this.player.isPlaying]:Bt.true}>\n            <ha-icon .icon=${t.play_pause?Bt[this.player.isPlaying]:Bt.true}></ha-icon>\n        </ha-icon-button>\n      `}\n    `}renderJumpForwardButton(){return this.config.hide.jump||!this.player.hasProgress?I``:I`\n      <ha-icon-button\n        @click=${t=>this.player.jump(t,this.jumpAmount)}\n        .icon=${Wt}>\n        <ha-icon .icon=${Wt}></ha-icon>\n      </ha-icon-button>\n    `}renderJumpBackwardButton(){return this.config.hide.jump||!this.player.hasProgress?I``:I`\n      <ha-icon-button\n        @click=${t=>this.player.jump(t,-this.jumpAmount)}\n        .icon=${Xt}>\n        <ha-icon .icon=${Xt}></ha-icon>\n      </ha-icon-button>\n    `}handleStop(t){return this.config.hide.play_pause?this.player.playStop(t):this.player.stop(t)}handleVolumeChange(t){const e=parseFloat(t.target.value)/100;this.player.setVolume(t,e)}static get styles(){return[le,it`\n        :host {\n          display: flex;\n          width: 100%;\n          justify-content: space-between;\n        }\n        .flex {\n          display: flex;\n          flex: 1;\n          justify-content: space-between;\n        }\n        ha-slider {\n          max-width: none;\n          min-width: 100px;\n          width: 100%;\n          --paper-slider-active-color: var(--mmp-accent-color);\n          --paper-slider-knob-color: var(--mmp-accent-color);\n        }\n        ha-icon-button {\n          min-width: var(--mmp-unit);\n        }\n        .mmp-media-controls__volume {\n          flex: 100;\n          max-height: var(--mmp-unit);\n          align-items: center;\n        }\n        .mmp-media-controls__volume.--buttons {\n          justify-content: left;\n        }\n        .mmp-media-controls__media {\n          margin-right: 0;\n          margin-left: auto;\n          justify-content: inherit;\n        }\n        .mmp-media-controls__media[flow] {\n          max-width: none;\n          justify-content: space-between;\n        }\n        .mmp-media-controls__shuffle,\n        .mmp-media-controls__repeat {\n          flex: 3;\n          flex-shrink: 200;\n          justify-content: center;\n        }\n      `]}});customElements.define(\"mmp-powerstrip\",class extends ot{static get properties(){return{hass:{},player:{},config:{},groupVisible:Boolean,idle:Boolean}}get icon(){return this.config.speaker_group.icon||Dt}get showGroupButton(){return this.config.speaker_group.entities.length>0}get showPowerButton(){return!this.config.hide.power}get powerColor(){return this.player.isActive&&!this.config.hide.power_state}get sourceSize(){return\"icon\"===this.config.source||this.hasControls||this.idle}get soundSize(){return\"icon\"===this.config.sound_mode||this.hasControls||this.idle}get hasControls(){return this.player.isActive&&this.config.hide.controls!==this.config.hide.volume}get hasSource(){return this.player.sources.length>0&&!this.config.hide.source}get hasSoundMode(){return this.player.soundModes.length>0&&!this.config.hide.sound_mode}get showLabel(){return!this.config.hide.state_label}render(){return this.player.isUnavailable&&this.showLabel?I`\n        <span class=\"label ellipsis\"> ${ye(this.hass,\"state.unavailable\",\"state.default.unavailable\")} </span>\n      `:I`\n      ${this.idle?this.renderIdleView:\"\"}\n      ${this.hasControls?I` <mmp-media-controls .player=${this.player} .config=${this.config}> </mmp-media-controls> `:\"\"}\n      ${this.hasSource?I` <mmp-source-menu .player=${this.player} .icon=${this.sourceSize} ?full=${\"full\"===this.config.source}>\n          </mmp-source-menu>`:\"\"}\n      ${this.hasSoundMode?I` <mmp-sound-menu\n            .player=${this.player}\n            .icon=${this.soundSize}\n            ?full=${\"full\"===this.config.sound_mode}\n          >\n          </mmp-sound-menu>`:\"\"}\n      ${this.showGroupButton?I` <ha-icon-button\n            class=\"group-button\"\n            .icon=${this.icon}\n            ?inactive=${!this.player.isGrouped}\n            ?color=${this.groupVisible}\n            @click=${this.handleGroupClick}\n          >\n            <ha-icon .icon=${this.icon}></ha-icon>\n          </ha-icon-button>`:\"\"}\n      ${this.showPowerButton?I` <ha-icon-button\n            class=\"power-button\"\n            .icon=${zt}\n            @click=${t=>this.player.toggle(t)}\n            ?color=${this.powerColor}\n          >\n            <ha-icon .icon=${zt}></ha-icon>\n          </ha-icon-button>`:\"\"}\n    `}handleGroupClick(t){t.stopPropagation(),this.dispatchEvent(new CustomEvent(\"toggleGroupList\"))}get renderIdleView(){return this.player.isPaused?I` <ha-icon-button .icon=${Rt[this.player.isPlaying]} @click=${t=>this.player.playPause(t)}>\n        <ha-icon .icon=${Rt[this.player.isPlaying]}></ha-icon>\n      </ha-icon-button>`:this.showLabel?I` <span class=\"label ellipsis\"> ${ye(this.hass,\"state.idle\",\"state.media_player.idle\")} </span> `:I``}static get styles(){return[le,it`\n        :host {\n          display: flex;\n          line-height: var(--mmp-unit);\n          max-height: var(--mmp-unit);\n        }\n        :host([flow]) mmp-media-controls {\n          max-width: unset;\n        }\n        mmp-media-controls {\n          max-width: calc(var(--mmp-unit) * 5);\n          line-height: initial;\n          justify-content: flex-end;\n        }\n        .group-button {\n          --mdc-icon-size: calc(var(--mmp-unit) * 0.5);\n        }\n        ha-icon-button {\n          min-width: var(--mmp-unit);\n        }\n      `]}});let Ce=class extends ot{constructor(){super(...arguments),this.initial=!0,this.picture=void 0,this.thumbnail=\"\",this.prevThumbnail=\"\",this.edit=!1,this.rtl=!1,this.cardHeight=0,this.foregroundColor=\"\",this.backgroundColor=\"\",this.break=!1}set hass(t){if(!t)return;const e=t.states[this.config.entity];if(this._hass=t,e&&this.entity!==e&&(this.entity=e,this.player=new se(t,this.config,e),this.rtl=this.computeRTL(t),this.idle=this.player.idle,this.player.trackIdle&&this.updateIdleStatus()),this.config&&this.config.speaker_group&&this.config.speaker_group.group_mgmt_entity){const e=t.states[this.config.speaker_group.group_mgmt_entity];e&&this.groupMgmtEntity!==e&&(this.groupMgmtEntity=e,this.groupMgmtPlayer=new se(t,this.config,e))}}get hass(){return this._hass}static async getConfigElement(){return await Promise.resolve().then((function(){return Le})),document.createElement(\"mini-media-player-editor\")}static get styles(){return[le,ae]}set overflow(t){this._overflow!==t&&(this._overflow=t)}get overflow(){return this._overflow}get name(){return this.config.name||this.player.name}setConfig(t){this.config=oe(t)}shouldUpdate(t){return void 0===this.break&&this.computeRect(this),t.has(\"prevThumbnail\")&&this.prevThumbnail&&setTimeout((()=>{this.prevThumbnail=\"\"}),1e3),t.has(\"player\")&&\"material\"===this.config.artwork&&this.setColors(),Jt.some((e=>t.has(e)))&&Boolean(this.player)}firstUpdated(){new Ot((t=>{t.forEach((t=>{window.requestAnimationFrame((()=>{\"scroll\"===this.config.info&&this.computeOverflow(),this._resizeTimer||(this.computeRect(t),this._resizeTimer=setTimeout((()=>{this._resizeTimer=void 0,this._resizeEntry&&(this.computeRect(this._resizeEntry),this.measureCard())}),250)),this._resizeEntry=t}))}))})).observe(this),setTimeout((()=>this.initial=!1),250),this.edit=this.config.speaker_group.expanded||!1}updated(){\"scroll\"===this.config.info&&setTimeout((()=>{this.computeOverflow()}),10)}render({config:t}=this){return this.computeArtwork(),I`\n      <ha-card\n        class=${this.computeClasses()}\n        style=${this.computeStyles()}\n        @click=${t=>this.handlePopup(t)}\n        artwork=${t.artwork}\n        content=${this.player.content}\n      >\n        <div class=\"mmp__bg\">${this.renderBackground()} ${this.renderArtwork()} ${this.renderGradient()}</div>\n        <div class=\"mmp-player\">\n          <div class=\"mmp-player__core flex\" ?inactive=${this.player.idle}>\n            ${this.renderIcon()}\n            <div class=\"entity__info\">${this.renderEntityName()} ${this.renderMediaInfo()}</div>\n            <mmp-powerstrip\n              @toggleGroupList=${this.toggleGroupList}\n              .hass=${this.hass}\n              .player=${this.player}\n              .config=${t}\n              .groupVisible=${this.edit}\n              .idle=${this.idle}\n              ?flow=${t.flow}\n            >\n            </mmp-powerstrip>\n          </div>\n          <div class=\"mmp-player__adds\">\n            ${!t.collapse&&this.player.isActive?I`\n                  <mmp-media-controls .player=${this.player} .config=${t} .break=${this.break}>\n                  </mmp-media-controls>\n                `:\"\"}\n            <mmp-shortcuts .player=${this.player} .shortcuts=${t.shortcuts}> </mmp-shortcuts>\n            ${t.tts?I` <mmp-tts .config=${t.tts} .hass=${this.hass} .player=${this.player}> </mmp-tts> `:\"\"}\n            <mmp-group-list\n              .hass=${this.hass}\n              .visible=${this.edit}\n              .entities=${t.speaker_group.entities}\n              .player=${this.groupMgmtPlayer?this.groupMgmtPlayer:this.player}\n              >>\n            </mmp-group-list>\n          </div>\n        </div>\n        <div class=\"mmp__container\">\n          ${this.player.isActive&&this.player.hasProgress?I`\n                <mmp-progress\n                  .player=${this.player}\n                  .showTime=${!this.config.hide.runtime}\n                  .showRemainingTime=${!this.config.hide.runtime_remaining}\n                >\n                </mmp-progress>\n              `:\"\"}\n        </div>\n      </ha-card>\n    `}computeClasses({config:t}=this){return at({\"--responsive\":this.break||t.hide.icon,\"--initial\":this.initial,\"--bg\":t.background||!1,\"--group\":t.group,\"--more-info\":\"none\"!==t.tap_action.action,\"--has-artwork\":this.player.hasArtwork&&this.thumbnail,\"--flow\":t.flow,\"--collapse\":t.collapse,\"--rtl\":this.rtl,\"--progress\":this.player.hasProgress,\"--runtime\":!t.hide.runtime&&this.player.hasProgress,\"--inactive\":!this.player.isActive})}renderArtwork(){if(!this.thumbnail||\"default\"===this.config.artwork)return;const t={backgroundImage:this.thumbnail,backgroundColor:this.backgroundColor||\"\",width:\"material\"===this.config.artwork&&this.player.isActive?`${this.cardHeight}px`:\"100%\"},e={backgroundImage:this.prevThumbnail,width:\"material\"===this.config.artwork?`${this.cardHeight}px`:\"\"};return I` <div class=\"cover\" style=${ct(t)}></div>\n      ${this.prevThumbnail&&I` <div class=\"cover --prev\" style=${ct(e)}></div> `}`}renderGradient(){if(\"material\"!==this.config.artwork)return;const t={backgroundImage:`linear-gradient(to left,\\n        transparent 0,\\n        ${this.backgroundColor} ${this.cardHeight}px,\\n        ${this.backgroundColor} 100%)`};return I`<div class=\"cover-gradient\" style=${ct(t)}></div>`}renderBackground(){if(this.config.background)return I`\n      <div class=\"cover --bg\" style=${ct({backgroundImage:`url(${this.config.background})`})}></div>\n    `}handlePopup(t){t.stopPropagation(),ce(this,this._hass,this.config,this.config.tap_action,this.player.id)}renderIcon(){if(this.config.hide.icon)return;if(this.player.isActive&&this.thumbnail&&\"default\"===this.config.artwork)return I` <div\n        class=\"entity__artwork\"\n        style=\"background-image: ${this.thumbnail};\"\n        ?border=${!this.config.hide.artwork_border}\n        state=${this.player.state}\n      >\n        ${\" \"}\n      </div>`;if(null!=this.config.icon_image)return I` <div class=\"entity__icon\">\n        <img src=\"${this.config.icon_image}\" height=\"100%\" />\n      </div>`;const t=!this.config.hide.icon_state&&this.player.isActive;return I` <div class=\"entity__icon\" ?color=${t}>\n      <ha-icon .icon=${this.computeIcon()}></ha-icon>\n    </div>`}renderEntityName(){if(!this.config.hide.name)return I` <div class=\"entity__info__name\">${this.name} ${this.speakerCount()}</div>`}renderMediaInfo(){if(this.config.hide.info)return;const t=this.player.mediaInfo;return I` <div\n      class=\"entity__info__media\"\n      ?short=${\"short\"===this.config.info||!this.player.isActive}\n      ?short-scroll=${\"scroll\"===this.config.info}\n      ?scroll=${this.overflow}\n      style=\"animation-duration: ${this.overflow}s;\"\n    >\n      ${\"scroll\"===this.config.info?I` <div>\n            <div class=\"marquee\">\n              ${t.map((t=>I`<span class=${`attr__${t.attr}`}>${t.prefix+t.text}</span>`))}\n            </div>\n          </div>`:\"\"}\n      ${t.map((t=>I`<span class=${`attr__${t.attr}`}>${t.prefix+t.text}</span>`))}\n    </div>`}speakerCount(){if(this.config.speaker_group.show_group_count){const t=this.groupMgmtPlayer?this.groupMgmtPlayer.groupCount:this.player.groupCount;return t>1?\" +\"+(t-1):\"\"}}computeStyles(){const{scale:t}=this.config;return ct(Object.assign(Object.assign({},t&&{\"--mmp-unit\":40*t+\"px\"}),this.foregroundColor&&this.player.isActive&&{\"--mmp-text-color\":this.foregroundColor,\"--mmp-icon-color\":this.foregroundColor,\"--mmp-icon-active-color\":this.foregroundColor,\"--mmp-accent-color\":this.foregroundColor,\"--paper-slider-container-color\":this.foregroundColor,\"--secondary-text-color\":this.foregroundColor,\"--mmp-media-cover-info-color\":this.foregroundColor}))}async computeArtwork(){const{picture:t,hasArtwork:e}=this.player;if(e&&t!==this.picture){this.picture=t;const e=await this.player.fetchArtwork();this.thumbnail&&(this.prevThumbnail=this.thumbnail),this.thumbnail=e||`url(${t})`}}computeIcon(){return this.config.icon?this.config.icon:this.player.icon||Nt}measureCard(){var t;const e=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector(\"ha-card\");e&&(this.cardHeight=e.offsetHeight)}computeOverflow(){var t;const e=null===(t=this.shadowRoot)||void 0===t?void 0:t.querySelector(\".marquee\");if(e&&e.parentNode){const t=e.clientWidth>e.parentNode.clientWidth;this.overflow=t&&this.player.isActive?7.5+e.clientWidth/50:void 0}}computeRect(t){if(\"contentRect\"in t){const{left:e,width:i}=t.contentRect;this.break=i+2*e<390}else{const{left:e,width:i}=t.getBoundingClientRect();this.break=i+2*e<390}}computeRTL(t){const e=t.language||\"en\";return t.translationMetadata.translations[e]&&t.translationMetadata.translations[e].isRTL||!1}toggleGroupList(){this.edit=!this.edit}updateIdleStatus(){var t,e;const i=null===(e=null===(t=this.config)||void 0===t?void 0:t.idle_view)||void 0===e?void 0:e.after;if(!i)return;this._idleTracker&&clearTimeout(this._idleTracker);const r=(Date.now()-new Date(this.player.updatedAt).getTime())/1e3;this._idleTracker=setTimeout((()=>{this.idle=this.player.checkIdleAfter(i),this.player.idle=this.idle,this._idleTracker=void 0}),1e3*(60*i-r))}getCardSize(){return this.config.collapse?1:2}async setColors(){if(this.player.picture!==this.picture){if(!this.player.picture)return this.foregroundColor=\"\",void(this.backgroundColor=\"\");try{[this.foregroundColor,this.backgroundColor]=await(async t=>new me(t,{colorCount:16}).getPalette())(this.player.picture)}catch(t){console.error(\"Error getting Image Colors\",t),this.foregroundColor=\"\",this.backgroundColor=\"\"}}}};t([Z({attribute:!1})],Ce.prototype,\"hass\",null),t([K()],Ce.prototype,\"_overflow\",void 0),t([K()],Ce.prototype,\"initial\",void 0),t([K()],Ce.prototype,\"picture\",void 0),t([K()],Ce.prototype,\"thumbnail\",void 0),t([K()],Ce.prototype,\"prevThumbnail\",void 0),t([K()],Ce.prototype,\"edit\",void 0),t([K()],Ce.prototype,\"rtl\",void 0),t([K()],Ce.prototype,\"cardHeight\",void 0),t([K()],Ce.prototype,\"foregroundColor\",void 0),t([K()],Ce.prototype,\"backgroundColor\",void 0),t([K()],Ce.prototype,\"config\",void 0),t([K()],Ce.prototype,\"_hass\",void 0),t([K()],Ce.prototype,\"entity\",void 0),t([K()],Ce.prototype,\"player\",void 0),t([K()],Ce.prototype,\"idle\",void 0),t([K()],Ce.prototype,\"groupMgmtPlayer\",void 0),t([K()],Ce.prototype,\"groupMgmtEntity\",void 0),t([K()],Ce.prototype,\"break\",void 0),t([K()],Ce.prototype,\"_resizeEntry\",void 0),t([K()],Ce.prototype,\"_resizeTimer\",void 0),t([K()],Ce.prototype,\"_idleTracker\",void 0),Ce=t([J(\"mini-media-player\")],Ce),window.customCards=window.customCards||[],window.customCards.push({type:\"mini-media-player\",name:\"Mini Media Player\",preview:!1,description:\"A minimalistic yet customizable media player card\"});const Ee=[\"cover\",\"full-cover\",\"material\",\"cover-fit\",\"none\"],Me=[\"icon\",\"full\"],Te=[\"icon\",\"full\"],Oe=[\"short\",\"scroll\"],Ae=[\"play_pause\",\"stop\",\"play_stop\",\"next\"],Ve=(t,e=!1)=>{const i=t.map((t=>({name:t,id:t})));return e&&i.push({name:\"Default\",id:void 0}),i};class Ne extends ot{static get styles(){return[ae,it`\n        .editor-side-by-side {\n          display: flex;\n          margin: 16px 0;\n        }\n        .editor-side-by-side > * {\n          flex: 1;\n          padding-right: 4px;\n        }\n        .editor-label {\n          margin-left: 6px;\n          font-size: 0.8em;\n          opacity: 0.75;\n        }\n      `]}static get properties(){return{hass:{},_config:{}}}setConfig(t){this._config=Object.assign({},oe,t)}get getMediaPlayerEntities(){return Object.keys(this.hass.states).filter((t=>\"media_player\"===t.substr(0,t.indexOf(\".\"))))}get _group(){return this._config.group||!1}get _volume_stateless(){return this._config.volume_stateless||!1}get _toggle_power(){return this._config.toggle_power||!0}render(){if(!this.hass)return I``;const t=this.getMediaPlayerEntities.map((t=>({name:t,id:t})));return I`\n      <div class=\"card-config\">\n        <div class=\"overall-config\">\n          <span class=\"editor-label\">Entity (required)</span>\n          <mmp-dropdown\n            class=\"mmp-shortcuts__dropdown\"\n            @change=${({detail:t})=>this.valueChanged({target:{configValue:\"entity\",value:t.id}})}\n            .items=${t}\n            .label=${\"Select entity\"}\n            .selected=${this._config.entity}\n          >\n          </mmp-dropdown>\n\n          <div class=\"editor-side-by-side\">\n            <paper-input\n              label=\"Name\"\n              .value=\"${this._config.name}\"\n              .configValue=\"${\"name\"}\"\n              @value-changed=${this.valueChanged}\n            ></paper-input>\n\n            <paper-input\n              label=\"Icon\"\n              .value=\"${this._config.icon}\"\n              .configValue=\"${\"icon\"}\"\n              @value-changed=${this.valueChanged}\n            ></paper-input>\n\n            <paper-input\n              label=\"Icon Image\"\n              .value=\"${this._config.icon_image}\"\n              .configValue=\"${\"icon_image\"}\"\n              @value-changed=${this.valueChanged}\n            ></paper-input>\n          </div>\n\n          <div class=\"editor-side-by-side\">\n            <ha-formfield label=\"Group cards\">\n              <ha-switch .checked=${this._group} .configValue=\"${\"group\"}\" @change=${this.valueChanged}></ha-switch>\n            </ha-formfield>\n\n            <ha-formfield label=\"Swap volume slider for buttons\">\n              <ha-switch\n                .checked=\"${this._volume_stateless}\"\n                .configValue=\"${\"volume_stateless\"}\"\n                @change=${this.valueChanged}\n              ></ha-switch>\n            </ha-formfield>\n\n            <ha-formfield label=\"Toggle power button behavior\">\n              <ha-switch\n                .checked=\"${this._toggle_power}\"\n                .configValue=\"${\"toggle_power\"}\"\n                @change=${this.valueChanged}\n              ></ha-switch>\n            </ha-formfield>\n          </div>\n\n          <div class=\"editor-side-by-side\">\n            <div>\n              <span class=\"editor-label\">Artwork</span>\n              <mmp-dropdown\n                class=\"mmp-shortcuts__dropdown\"\n                @change=${({detail:t})=>this.valueChanged({target:{configValue:\"artwork\",value:t.id}})}\n                .items=${Ve(Ee,!0)}\n                .label=${\"Default\"}\n                .selected=${this._config.artwork}\n              >\n              </mmp-dropdown>\n            </div>\n            <div>\n              <span class=\"editor-label\">Source</span>\n              <mmp-dropdown\n                class=\"mmp-shortcuts__dropdown\"\n                @change=${({detail:t})=>this.valueChanged({target:{configValue:\"source\",value:t.id}})}\n                .items=${Ve(Me,!0)}\n                .label=${\"Default\"}\n                .selected=${this._config.source}\n              >\n              </mmp-dropdown>\n            </div>\n            <div>\n              <span class=\"editor-label\">Sound mode</span>\n              <mmp-dropdown\n                class=\"mmp-shortcuts__dropdown\"\n                @change=${({detail:t})=>this.valueChanged({target:{configValue:\"sound_mode\",value:t.id}})}\n                .items=${Ve(Te,!0)}\n                .label=${\"Default\"}\n                .selected=${this._config.sound_mode}\n              >\n              </mmp-dropdown>\n            </div>\n          </div>\n\n          <div class=\"editor-side-by-side\">\n            <div>\n              <span class=\"editor-label\">Info</span>\n              <mmp-dropdown\n                class=\"mmp-shortcuts__dropdown\"\n                @change=${({detail:t})=>this.valueChanged({target:{configValue:\"info\",value:t.id}})}\n                .items=${Ve(Oe,!0)}\n                .label=${\"Default\"}\n                .selected=${this._config.info}\n              >\n              </mmp-dropdown>\n            </div>\n\n            <div>\n              <span class=\"editor-label\">Replace Mute</span>\n              <mmp-dropdown\n                class=\"mmp-shortcuts__dropdown\"\n                @change=${({detail:t})=>this.valueChanged({target:{configValue:\"replace_mute\",value:t.id}})}\n                .items=${Ve(Ae,!0)}\n                .label=${\"Default\"}\n                .selected=${this._config.replace_mute}\n              >\n              </mmp-dropdown>\n            </div>\n          </div>\n\n          <div class=\"editor-side-by-side\">\n            <paper-input\n              label=\"Volume Step (1-100)\"\n              .value=\"${this._config.volume_step}\"\n              .configValue=\"${\"volume_step\"}\"\n              @value-changed=${this.valueChanged}\n            ></paper-input>\n\n            <paper-input\n              label=\"Max Volume (1-100)\"\n              .value=\"${this._config.max_volume}\"\n              .configValue=\"${\"max_volume\"}\"\n              @value-changed=${this.valueChanged}\n            ></paper-input>\n\n            <paper-input\n              label=\"Min Volume (1-100)\"\n              .value=\"${this._config.min_volume}\"\n              .configValue=\"${\"min_volume\"}\"\n              @value-changed=${this.valueChanged}\n            ></paper-input>\n          </div>\n\n          <div class=\"editor-side-by-side\">\n            <paper-input\n              label=\"Background\"\n              .value=\"${this._config.background}\"\n              .configValue=\"${\"background\"}\"\n              @value-changed=${this.valueChanged}\n            ></paper-input>\n\n            <paper-input\n              label=\"Scale\"\n              .value=\"${this._config.scale}\"\n              .configValue=\"${\"scale\"}\"\n              @value-changed=${this.valueChanged}\n            ></paper-input>\n          </div>\n\n          <div>\n            Settings for Tap actions, TTS, hiding UI elements, idle view, speaker groups and shortcuts can only be\n            configured in the code editor\n          </div>\n        </div>\n      </div>\n    `}valueChanged(t){if(!this._config||!this.hass)return;const{target:e}=t;this[`_${e.configValue}`]!==e.value&&(e.configValue&&(\"\"===e.value?delete this._config[e.configValue]:this._config={...this._config,[e.configValue]:void 0!==e.checked?e.checked:e.value}),((t,e,i={},r={})=>{const o=new Event(e,{bubbles:void 0===r.bubbles||r.bubbles,cancelable:Boolean(r.cancelable),composed:void 0===r.composed||r.composed});o.detail=i,t.dispatchEvent(o)})(this,\"config-changed\",{config:this._config}))}}customElements.define(\"mini-media-player-editor\",Ne);var Le=Object.freeze({__proto__:null,default:Ne});\n"
  },
  {
    "path": "home-assistant/www/community/weather-card/weather-card-editor.js",
    "content": "const fireEvent = (node, type, detail, options) => {\n  options = options || {};\n  detail = detail === null || detail === undefined ? {} : detail;\n  const event = new Event(type, {\n    bubbles: options.bubbles === undefined ? true : options.bubbles,\n    cancelable: Boolean(options.cancelable),\n    composed: options.composed === undefined ? true : options.composed,\n  });\n  event.detail = detail;\n  node.dispatchEvent(event);\n  return event;\n};\n\nif (\n  !customElements.get(\"ha-switch\") &&\n  customElements.get(\"paper-toggle-button\")\n) {\n  customElements.define(\"ha-switch\", customElements.get(\"paper-toggle-button\"));\n}\n\nconst LitElement = customElements.get(\"hui-masonry-view\") ? Object.getPrototypeOf(customElements.get(\"hui-masonry-view\")) : Object.getPrototypeOf(customElements.get(\"hui-view\"));\nconst html = LitElement.prototype.html;\nconst css = LitElement.prototype.css;\n\nconst HELPERS = window.loadCardHelpers();\n\nexport class WeatherCardEditor extends LitElement {\n  setConfig(config) {\n    this._config = { ...config };\n  }\n\n  static get properties() {\n    return { hass: {}, _config: {} };\n  }\n\n  get _entity() {\n    return this._config.entity || \"\";\n  }\n\n  get _name() {\n    return this._config.name || \"\";\n  }\n\n  get _icons() {\n    return this._config.icons || \"\";\n  }\n\n  get _current() {\n    return this._config.current !== false;\n  }\n\n  get _details() {\n    return this._config.details !== false;\n  }\n\n  get _forecast() {\n    return this._config.forecast !== false;\n  }\n\n  get _hourly_forecast() {\n    return this._config.hourly_forecast !== false;\n  }\n\n  get _number_of_forecasts() {\n    return this._config.number_of_forecasts || 5;\n  }\n\n  firstUpdated() {\n    HELPERS.then(help => {\n      if (help.importMoreInfoControl) {\n        help.importMoreInfoControl(\"fan\");\n      }\n    })\n  }\n  \n  render() {\n    if (!this.hass) {\n      return html``;\n    }\n\n    const entities = Object.keys(this.hass.states).filter(\n      (eid) => eid.substr(0, eid.indexOf(\".\")) === \"weather\"\n    );\n\n    return html`\n      <div class=\"card-config\">\n        <div>\n          <paper-input\n            label=\"Name\"\n            .value=\"${this._name}\"\n            .configValue=\"${\"name\"}\"\n            @value-changed=\"${this._valueChanged}\"\n          ></paper-input>\n          <paper-input\n            label=\"Icons location\"\n            .value=\"${this._icons}\"\n            .configValue=\"${\"icons\"}\"\n            @value-changed=\"${this._valueChanged}\"\n          ></paper-input>\n          ${customElements.get(\"ha-entity-picker\")\n            ? html`\n                <ha-entity-picker\n                  .hass=\"${this.hass}\"\n                  .value=\"${this._entity}\"\n                  .configValue=${\"entity\"}\n                  domain-filter=\"weather\"\n                  @change=\"${this._valueChanged}\"\n                  allow-custom-entity\n                ></ha-entity-picker>\n              `\n            : html`\n                <paper-dropdown-menu\n                  label=\"Entity\"\n                  @value-changed=\"${this._valueChanged}\"\n                  .configValue=\"${\"entity\"}\"\n                >\n                  <paper-listbox\n                    slot=\"dropdown-content\"\n                    .selected=\"${entities.indexOf(this._entity)}\"\n                  >\n                    ${entities.map((entity) => {\n                      return html` <paper-item>${entity}</paper-item> `;\n                    })}\n                  </paper-listbox>\n                </paper-dropdown-menu>\n              `}\n          <div class=\"switches\">\n            <div class=\"switch\">\n              <ha-switch\n                .checked=${this._current}\n                .configValue=\"${\"current\"}\"\n                @change=\"${this._valueChanged}\"\n              ></ha-switch\n              ><span>Show current</span>\n            </div>\n            <div class=\"switch\">\n              <ha-switch\n                .checked=${this._details}\n                .configValue=\"${\"details\"}\"\n                @change=\"${this._valueChanged}\"\n              ></ha-switch\n              ><span>Show details</span>\n            </div>\n            <div class=\"switch\">\n              <ha-switch\n                .checked=${this._forecast}\n                .configValue=\"${\"forecast\"}\"\n                @change=\"${this._valueChanged}\"\n              ></ha-switch\n              ><span>Show forecast</span>\n            </div>\n            <div class=\"switch\">\n              <ha-switch\n                .checked=${this._hourly_forecast}\n                .configValue=\"${\"hourly_forecast\"}\"\n                @change=\"${this._valueChanged}\"\n              ></ha-switch\n              ><span>Show hourly forecast</span>\n            </div>\n          </div>\n          <paper-input\n            label=\"Number of future forcasts\"\n            type=\"number\"\n            min=\"1\"\n            max=\"8\"\n            value=${this._number_of_forecasts}\n            .configValue=\"${\"number_of_forecasts\"}\"\n            @value-changed=\"${this._valueChanged}\"\n          ></paper-input>\n        </div>\n      </div>\n    `;\n  }\n\n  _valueChanged(ev) {\n    if (!this._config || !this.hass) {\n      return;\n    }\n    const target = ev.target;\n    if (this[`_${target.configValue}`] === target.value) {\n      return;\n    }\n    if (target.configValue) {\n      if (target.value === \"\") {\n        delete this._config[target.configValue];\n      } else {\n        this._config = {\n          ...this._config,\n          [target.configValue]:\n            target.checked !== undefined ? target.checked : target.value,\n        };\n      }\n    }\n    fireEvent(this, \"config-changed\", { config: this._config });\n  }\n\n  static get styles() {\n    return css`\n      .switches {\n        margin: 8px 0;\n        display: flex;\n        justify-content: space-between;\n      }\n      .switch {\n        display: flex;\n        align-items: center;\n        justify-items: center;\n      }\n      .switches span {\n        padding: 0 16px;\n      }\n    `;\n  }\n}\n\ncustomElements.define(\"weather-card-editor\", WeatherCardEditor);\n"
  },
  {
    "path": "home-assistant/www/community/weather-card/weather-card.js",
    "content": "const LitElement = customElements.get(\"hui-masonry-view\") ? Object.getPrototypeOf(customElements.get(\"hui-masonry-view\")) : Object.getPrototypeOf(customElements.get(\"hui-view\"));\nconst html = LitElement.prototype.html;\nconst css = LitElement.prototype.css;\n\nconst weatherIconsDay = {\n  clear: \"day\",\n  \"clear-night\": \"night\",\n  cloudy: \"cloudy\",\n  fog: \"cloudy\",\n  hail: \"rainy-7\",\n  lightning: \"thunder\",\n  \"lightning-rainy\": \"thunder\",\n  partlycloudy: \"cloudy-day-3\",\n  pouring: \"rainy-6\",\n  rainy: \"rainy-5\",\n  snowy: \"snowy-6\",\n  \"snowy-rainy\": \"rainy-7\",\n  sunny: \"day\",\n  windy: \"cloudy\",\n  \"windy-variant\": \"cloudy-day-3\",\n  exceptional: \"!!\",\n};\n\nconst weatherIconsNight = {\n  ...weatherIconsDay,\n  clear: \"night\",\n  sunny: \"night\",\n  partlycloudy: \"cloudy-night-3\",\n  \"windy-variant\": \"cloudy-night-3\",\n};\n\nconst windDirections = [\n  \"N\",\n  \"NNE\",\n  \"NE\",\n  \"ENE\",\n  \"E\",\n  \"ESE\",\n  \"SE\",\n  \"SSE\",\n  \"S\",\n  \"SSW\",\n  \"SW\",\n  \"WSW\",\n  \"W\",\n  \"WNW\",\n  \"NW\",\n  \"NNW\",\n  \"N\",\n];\n\nwindow.customCards = window.customCards || [];\nwindow.customCards.push({\n  type: \"weather-card\",\n  name: \"Weather Card\",\n  description: \"A custom weather card with animated icons.\",\n  preview: true,\n  documentationURL: \"https://github.com/bramkragten/weather-card\",\n});\n\nconst fireEvent = (node, type, detail, options) => {\n  options = options || {};\n  detail = detail === null || detail === undefined ? {} : detail;\n  const event = new Event(type, {\n    bubbles: options.bubbles === undefined ? true : options.bubbles,\n    cancelable: Boolean(options.cancelable),\n    composed: options.composed === undefined ? true : options.composed,\n  });\n  event.detail = detail;\n  node.dispatchEvent(event);\n  return event;\n};\n\nfunction hasConfigOrEntityChanged(element, changedProps) {\n  if (changedProps.has(\"_config\")) {\n    return true;\n  }\n\n  const oldHass = changedProps.get(\"hass\");\n  if (oldHass) {\n    return (\n      oldHass.states[element._config.entity] !==\n        element.hass.states[element._config.entity] ||\n      oldHass.states[\"sun.sun\"] !== element.hass.states[\"sun.sun\"]\n    );\n  }\n\n  return true;\n}\n\nclass WeatherCard extends LitElement {\n  static get properties() {\n    return {\n      _config: {},\n      hass: {},\n    };\n  }\n\n  static async getConfigElement() {\n    await import(\"./weather-card-editor.js\");\n    return document.createElement(\"weather-card-editor\");\n  }\n\n  static getStubConfig(hass, unusedEntities, allEntities) {\n    let entity = unusedEntities.find((eid) => eid.split(\".\")[0] === \"weather\");\n    if (!entity) {\n      entity = allEntities.find((eid) => eid.split(\".\")[0] === \"weather\");\n    }\n    return { entity };\n  }\n\n  setConfig(config) {\n    if (!config.entity) {\n      throw new Error(\"Please define a weather entity\");\n    }\n    this._config = config;\n  }\n\n  shouldUpdate(changedProps) {\n    return hasConfigOrEntityChanged(this, changedProps);\n  }\n\n  render() {\n    if (!this._config || !this.hass) {\n      return html``;\n    }\n\n    this.numberElements = 0;\n\n    const stateObj = this.hass.states[this._config.entity];\n\n    if (!stateObj) {\n      return html`\n        <style>\n          .not-found {\n            flex: 1;\n            background-color: yellow;\n            padding: 8px;\n          }\n        </style>\n        <ha-card>\n          <div class=\"not-found\">\n            Entity not available: ${this._config.entity}\n          </div>\n        </ha-card>\n      `;\n    }\n\n    return html`\n      <ha-card @click=\"${this._handleClick}\">\n        ${this._config.current !== false ? this.renderCurrent(stateObj) : \"\"}\n        ${this._config.details !== false ? this.renderDetails(stateObj) : \"\"}\n        ${this._config.forecast !== false\n          ? this.renderForecast(stateObj.attributes.forecast)\n          : \"\"}\n      </ha-card>\n    `;\n  }\n\n  renderCurrent(stateObj) {\n    this.numberElements++;\n\n    return html`\n      <div class=\"current ${this.numberElements > 1 ? \"spacer\" : \"\"}\">\n        <span\n          class=\"icon bigger\"\n          style=\"background: none, url('${this.getWeatherIcon(\n            stateObj.state.toLowerCase(),\n            this.hass.states[\"sun.sun\"]\n          )}') no-repeat; background-size: contain;\"\n          >${stateObj.state}\n        </span>\n        ${this._config.name\n          ? html` <span class=\"title\"> ${this._config.name} </span> `\n          : \"\"}\n        <span class=\"temp\"\n          >${this.getUnit(\"temperature\") == \"°F\"\n            ? Math.round(stateObj.attributes.temperature)\n            : stateObj.attributes.temperature}</span\n        >\n        <span class=\"tempc\"> ${this.getUnit(\"temperature\")}</span>\n      </div>\n    `;\n  }\n\n  renderDetails(stateObj) {\n    const sun = this.hass.states[\"sun.sun\"];\n    let next_rising;\n    let next_setting;\n\n    if (sun) {\n      next_rising = new Date(sun.attributes.next_rising);\n      next_setting = new Date(sun.attributes.next_setting);\n    }\n\n    this.numberElements++;\n\n    return html`\n      <ul class=\"variations ${this.numberElements > 1 ? \"spacer\" : \"\"}\">\n        <li>\n          <ha-icon icon=\"mdi:water-percent\"></ha-icon>\n          ${stateObj.attributes.humidity}<span class=\"unit\"> % </span>\n        </li>\n        <li>\n          <ha-icon icon=\"mdi:weather-windy\"></ha-icon> ${windDirections[\n            parseInt((stateObj.attributes.wind_bearing + 11.25) / 22.5)\n          ]}\n          ${stateObj.attributes.wind_speed}<span class=\"unit\">\n            ${this.getUnit(\"length\")}/h\n          </span>\n        </li>\n        <li>\n          <ha-icon icon=\"mdi:gauge\"></ha-icon>\n          ${stateObj.attributes.pressure}\n          <span class=\"unit\">\n            ${this.getUnit(\"air_pressure\")}\n          </span>\n        </li>\n        <li>\n          <ha-icon icon=\"mdi:weather-fog\"></ha-icon> ${stateObj.attributes\n            .visibility}<span class=\"unit\">\n            ${this.getUnit(\"length\")}\n          </span>\n        </li>\n        ${next_rising\n          ? html`\n              <li>\n                <ha-icon icon=\"mdi:weather-sunset-up\"></ha-icon>\n                ${next_rising.toLocaleTimeString()}\n              </li>\n            `\n          : \"\"}\n        ${next_setting\n          ? html`\n              <li>\n                <ha-icon icon=\"mdi:weather-sunset-down\"></ha-icon>\n                ${next_setting.toLocaleTimeString()}\n              </li>\n            `\n          : \"\"}\n      </ul>\n    `;\n  }\n\n  renderForecast(forecast) {\n    if (!forecast || forecast.length === 0) {\n      return html``;\n    }\n\n    const lang = this.hass.selectedLanguage || this.hass.language;\n\n    this.numberElements++;\n    return html`\n      <div class=\"forecast clear ${this.numberElements > 1 ? \"spacer\" : \"\"}\">\n        ${forecast\n          .slice(\n            0,\n            this._config.number_of_forecasts\n              ? this._config.number_of_forecasts\n              : 5\n          )\n          .map(\n            (daily) => html`\n              <div class=\"day\">\n                <div class=\"dayname\">\n                  ${this._config.hourly_forecast\n                    ? new Date(daily.datetime).toLocaleTimeString(lang, {\n                        hour: \"2-digit\",\n                        minute: \"2-digit\",\n                      })\n                    : new Date(daily.datetime).toLocaleDateString(lang, {\n                        weekday: \"short\",\n                      })}\n                </div>\n                <i\n                  class=\"icon\"\n                  style=\"background: none, url('${this.getWeatherIcon(\n                    daily.condition.toLowerCase()\n                  )}') no-repeat; background-size: contain\"\n                ></i>\n                <div class=\"highTemp\">\n                  ${daily.temperature}${this.getUnit(\"temperature\")}\n                </div>\n                ${daily.templow !== undefined\n                  ? html`\n                      <div class=\"lowTemp\">\n                        ${daily.templow}${this.getUnit(\"temperature\")}\n                      </div>\n                    `\n                  : \"\"}\n                ${!this._config.hide_precipitation &&\n                daily.precipitation !== undefined &&\n                daily.precipitation !== null\n                  ? html`\n                      <div class=\"precipitation\">\n                        ${Math.round(daily.precipitation*10)/10} ${this.getUnit(\"precipitation\")}\n                      </div>\n                    `\n                  : \"\"}\n                ${!this._config.hide_precipitation &&\n                daily.precipitation_probability !== undefined &&\n                daily.precipitation_probability !== null\n                  ? html`\n                      <div class=\"precipitation_probability\">\n                        ${Math.round(daily.precipitation_probability)} ${this.getUnit(\"precipitation_probability\")}\n                      </div>\n                    `\n                  : \"\"}\n              </div>\n            `\n          )}\n      </div>\n    `;\n  }\n\n  getWeatherIcon(condition, sun) {\n    return `${\n      this._config.icons\n        ? this._config.icons\n        : \"https://cdn.jsdelivr.net/gh/bramkragten/weather-card/dist/icons/\"\n    }${\n      sun && sun.state == \"below_horizon\"\n        ? weatherIconsNight[condition]\n        : weatherIconsDay[condition]\n    }.svg`;\n  }\n\n  getUnit(measure) {\n    const lengthUnit = this.hass.config.unit_system.length;\n    switch (measure) {\n      case \"air_pressure\":\n        return lengthUnit === \"km\" ? \"hPa\" : \"inHg\";\n      case \"length\":\n        return lengthUnit;\n      case \"precipitation\":\n        return lengthUnit === \"km\" ? \"mm\" : \"in\";\n      case \"precipitation_probability\":\n        return \"%\";\n      default:\n        return this.hass.config.unit_system[measure] || \"\";\n    }\n  }\n\n  _handleClick() {\n    fireEvent(this, \"hass-more-info\", { entityId: this._config.entity });\n  }\n\n  getCardSize() {\n    return 3;\n  }\n\n  static get styles() {\n    return css`\n      ha-card {\n        cursor: pointer;\n        margin: auto;\n        overflow: hidden;\n        padding-top: 1.3em;\n        padding-bottom: 1.3em;\n        padding-left: 1em;\n        padding-right: 1em;\n        position: relative;\n      }\n\n      .spacer {\n        padding-top: 1em;\n      }\n\n      .clear {\n        clear: both;\n      }\n\n      .title {\n        position: absolute;\n        left: 3em;\n        font-weight: 300;\n        font-size: 3em;\n        color: var(--primary-text-color);\n      }\n\n      .temp {\n        font-weight: 300;\n        font-size: 4em;\n        color: var(--primary-text-color);\n        position: absolute;\n        right: 1em;\n      }\n\n      .tempc {\n        font-weight: 300;\n        font-size: 1.5em;\n        vertical-align: super;\n        color: var(--primary-text-color);\n        position: absolute;\n        right: 1em;\n        margin-top: -14px;\n        margin-right: 7px;\n      }\n\n      @media (max-width: 460px) {\n        .title {\n          font-size: 2.2em;\n          left: 4em;\n        }\n        .temp {\n          font-size: 3em;\n        }\n        .tempc {\n          font-size: 1em;\n        }\n      }\n\n      .current {\n        padding: 1.2em 0;\n        margin-bottom: 3.5em;\n      }\n\n      .variations {\n        display: flex;\n        flex-flow: row wrap;\n        justify-content: space-between;\n        font-weight: 300;\n        color: var(--primary-text-color);\n        list-style: none;\n        padding: 0 1em;\n        margin: 0;\n      }\n\n      .variations ha-icon {\n        height: 22px;\n        margin-right: 5px;\n        color: var(--paper-item-icon-color);\n      }\n\n      .variations li {\n        flex-basis: auto;\n        width: 50%;\n      }\n\n      .variations li:nth-child(2n) {\n        text-align: right;\n      }\n\n      .variations li:nth-child(2n) ha-icon {\n        margin-right: 0;\n        margin-left: 8px;\n        float: right;\n      }\n\n      .unit {\n        font-size: 0.8em;\n      }\n\n      .forecast {\n        width: 100%;\n        margin: 0 auto;\n        display: flex;\n      }\n\n      .day {\n        flex: 1;\n        display: block;\n        text-align: center;\n        color: var(--primary-text-color);\n        border-right: 0.1em solid #d9d9d9;\n        line-height: 2;\n        box-sizing: border-box;\n      }\n\n      .dayname {\n        text-transform: uppercase;\n      }\n\n      .forecast .day:first-child {\n        margin-left: 0;\n      }\n\n      .forecast .day:nth-last-child(1) {\n        border-right: none;\n        margin-right: 0;\n      }\n\n      .highTemp {\n        font-weight: bold;\n      }\n\n      .lowTemp {\n        color: var(--secondary-text-color);\n      }\n\n      .precipitation {\n        color: var(--primary-text-color);\n        font-weight: 300;\n      }\n\n      .icon.bigger {\n        width: 10em;\n        height: 10em;\n        margin-top: -4em;\n        position: absolute;\n        left: 0em;\n      }\n\n      .icon {\n        width: 50px;\n        height: 50px;\n        margin-right: 5px;\n        display: inline-block;\n        vertical-align: middle;\n        background-size: contain;\n        background-position: center center;\n        background-repeat: no-repeat;\n        text-indent: -9999px;\n      }\n\n      .weather {\n        font-weight: 300;\n        font-size: 1.5em;\n        color: var(--primary-text-color);\n        text-align: left;\n        position: absolute;\n        top: -0.5em;\n        left: 6em;\n        word-wrap: break-word;\n        width: 30%;\n      }\n    `;\n  }\n}\ncustomElements.define(\"weather-card\", WeatherCard);\n"
  },
  {
    "path": "home-assistant/www/custom-lovelace/air-purifier/card.js",
    "content": "import { LitElement, html } from 'https://unpkg.com/@polymer/lit-element@0.6.5/lit-element.js?module';\n\nconst styles = html`\n  <style>\n    :host {\n      display: flex;\n      flex: 1;\n      flex-direction: column;\n    }\n    ha-card {\n      background-color: #36455f;\n      // background: #36435d;\n      flex-direction: column;\n      flex: 1;\n      position: relative;\n      padding: 0px;\n      border-radius: 4px;\n      overflow: hidden;\n    }\n\n    .preview {\n      background: transparent no-repeat center url('/local/custom-lovelace/air-purifier/working.gif');\n      height: 220px;\n      background-size: 280px 280px;\n      display: flex;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      cursor: pointer;\n    }\n\n    .preview.idle {\n      background-image: url('/local/custom-lovelace/air-purifier/standby.gif');\n      background-size: 280px 280px;\n    }\n\n    .current-aqi {\n      font-size: 48px;\n      font-weight: bold;\n      align-self: center;\n      line-height: 48px;\n      padding: 5px 10px;\n      border-radius: 2px;\n      background: rgba(0, 0, 0, 0.6);\n    }\n\n    .current-aqi sup {\n      font-size: 16px;\n      line-height: 16px;\n      font-weight: normal;\n    }\n\n    .number-off {\n      opacity: 0.2;\n    }\n\n    .toolbar {\n      background: #fff;\n      min-height: 30px;\n      display: flex;\n      flex-direction: row;\n      justify-content: space-evenly;\n      padding: 0px;\n    }\n\n    .stats {\n      border-top: 1px solid rgba(255, 255, 255, 0.2);\n      display: flex;\n      flex-direction: row;\n      justify-content: space-evenly;\n    }\n\n    .stats-block {\n      margin: 10px 0px;\n      text-align: center;\n      border-right: 1px solid rgba(255, 255, 255, 0.2);\n      flex-grow: 1;\n    }\n\n    .stats-block:last-child {\n      border: 0px;\n    }\n\n    .stats-hours {\n      font-size: 20px;\n      font-weight: bold;\n    }\n\n    .toolbar ha-icon-button {\n      color: #319ef9;\n      flex-direction: column;\n      width: 44px;\n      height: 54px;\n      padding-right: 10px;\n    }\n\n    .toolbar ha-icon-button:active {\n      opacity: 0.4;\n      background: rgba(0, 0, 0, 0.1);\n    }\n\n    .toolbar ha-icon-button:last-child {\n      margin-right: 0px;\n    }\n\n    .toolbar ha-button {\n      color: #319ef9;\n      flex-direction: row;\n    }\n\n    .toolbar ha-icon {\n      color: #319ef9;\n      padding-right: 15px;\n    }\n\n    .toolbar-split {\n      padding-right: 15px;\n    }\n\n    .toolbar-item {\n      opacity: 0.5;\n    }\n\n    .toolbar-item-on {\n      opacity: 1.0;\n    }\n  </style>\n`\n\nclass AirPurifierCard extends LitElement {\n  static get properties() {\n    return {\n      hass: Object,\n      config: Object,\n    }\n  }\n\n  get entity() {\n    return this.hass.states[this.config.entity]\n  }\n\n  handleMore() {\n    const e = new Event('hass-more-info', { bubbles: true, composed: true })\n    e.detail = { entityId: this.entity.entity_id }\n    this.dispatchEvent(e);\n  }\n\n  handleSpeed(e) {\n    const fan_speed = e.target.getAttribute('value');\n    this.callService('set_fan_speed', {\n      fan_speed\n    });\n  }\n\n  callService(service, options = {}) {\n    this.hass.callService('fan', service, {\n      entity_id: this.config.entity,\n      ...options\n    });\n  }\n\n  callXiaomiService(service, options = {}) {\n    this.hass.callService('xiaomi_miio', service, {\n      entity_id: this.config.entity,\n      ...options\n    });\n  }\n\n  renderAQI(aqi) {\n    let prefix = '';\n    if (aqi < 10) {\n      prefix = html`<span class=\"number-off\">00</span>`\n    } else if (aqi < 100) {\n      prefix = html`<span class=\"number-off\">0</span>`\n    }\n    return html`\n      ${prefix}<span class=\"number-on\">${aqi}</span>\n    `\n  }\n\n  renderStats() {\n    const {\n      attributes: {\n        filter_life_remaining,\n        motor_speed\n      }\n    } = this.entity\n\n    return html`\n      <div class=\"stats-block\">\n        <span class=\"stats-hours\">${filter_life_remaining}</span> <sup>%</sup>\n        <div class=\"stats-subtitle\">Filter remaining</div>\n      </div>\n      <div class=\"stats-block\">\n        <span class=\"stats-hours\">${motor_speed}</span> <sup>RPM</sup>\n        <div class=\"stats-subtitle\">Motor speed</div>\n      </div>\n    `\n  }\n\n  render() {\n    if (!this.entity) {\n      return html`<ha-card>Loading component</ha-card>`\n    }\n    const { state, attributes: { aqi } } = this.entity\n    const on = state === 'on';\n    const off = !on;\n\n    return html`\n      ${styles}\n      <ha-card>\n        <div class=\"preview ${off && 'idle'}\" @click='${(e) => this.handleMore()}' ?more-info=true>\n          <div class=\"current-aqi\">\n            ${this.renderAQI(aqi)}\n            <sup>AQI</sup>\n          </div>\n        </div>\n        <div class=\"stats\">${this.renderStats()}</div>\n        ${this.renderToolbar()}\n      </ha-card>\n    `\n  }\n\n  setFavorite(level) {\n    this.callService('turn_on')\n    setTimeout(() => {\n      this.callService('set_speed', { speed: 'Favorite' })\n    }, 500)\n    setTimeout(() => {\n      this.callXiaomiService('fan_set_favorite_level', { level })\n    }, 1000)\n  }\n\n  renderToolbar() {\n    const { state, attributes: { favorite_level, mode } } = this.entity\n\n    return html`\n      <div class=\"toolbar\">\n        <ha-icon-button  icon=\"mdi:power-standby\"\n                            title=\"Power\"\n                            class=\"toolbar-split toolbar-item ${state == 'on' && 'toolbar-item-on'}\"\n                            @click='${(e) => this.callService('toggle')}'>\n        </ha-icon-button>\n        <div class=\"fill-gap\"></div>\n\n        <ha-icon-button  icon=\"mdi:weather-night\"\n                            title=\"Sleep\"\n                            class=\"toolbar-item ${mode == 'silent' && 'toolbar-item-on'}\"\n                            @click='${(e) => this.callService('set_speed', { speed: 'Silent' })}'>\n        </ha-icon-button>\n\n        <ha-icon-button  icon=\"mdi:circle-slice-3\"\n                            title=\"30%\"\n                            class=\"toolbar-item ${mode == 'favorite' && favorite_level == 3 && 'toolbar-item-on'}\"\n                            @click='${(e) => this.setFavorite(3)}'>\n        </ha-icon-button>\n\n        <ha-icon-button  icon=\"mdi:circle-slice-4\"\n                            title=\"50%\"\n                            class=\"toolbar-item ${mode == 'favorite' && favorite_level == 6 && 'toolbar-item-on'}\"\n                            @click='${(e) => this.setFavorite(6)}'>\n        </ha-icon-button>\n        <ha-icon-button  icon=\"mdi:circle-slice-6\"\n                            title=\"70%\"\n                            class=\"toolbar-item ${mode == 'favorite' && favorite_level == 8 && 'toolbar-item-on'}\"\n                            @click='${(e) => this.setFavorite(8)}'>\n        </ha-icon-button>\n        <ha-icon-button  icon=\"mdi:circle-slice-8\"\n                            title=\"100%\"\n                            class=\"toolbar-item ${mode == 'favorite' && favorite_level == 12 && 'toolbar-item-on'}\"\n                            @click='${(e) => this.setFavorite(12)}'>\n        </ha-icon-button>\n        <ha-icon-button  icon=\"mdi:brightness-auto\"\n                            title=\"Auto\"\n                            class=\"toolbar-item ${mode == 'auto' && 'toolbar-item-on'}\"\n                            @click='${(e) => this.callService('set_speed', { speed: 'Auto' })}'>\n        </ha-icon-button>\n      </div>\n    `\n  }\n\n  setConfig(config) {\n    this.config = config;\n  }\n\n  getCardSize() {\n    return 1;\n  }\n}\n\ncustomElements.define('air-purifier-card', AirPurifierCard);\n"
  },
  {
    "path": "home-assistant/www/custom-lovelace/card-tools.js",
    "content": "customElements.define('card-tools',\nclass {\n  static CUSTOM_TYPE_PREFIX() { return \"custom:\"}\n  static version() { return \"0.3\"}\n\n  static v() {return version};\n\n  static checkVersion(v) {\n    if (this.version() < v) {\n      throw new Error(`Old version of card-tools found. Get the latest version of card-tools.js from https://github.com/thomasloven/lovelace-card-tools`);\n    }\n  }\n\n  static litElement() {\n    return Object.getPrototypeOf(customElements.get('hui-error-entity-row'));\n  }\n\n  static litHtml() {\n    return this.litElement().prototype.html;\n  }\n\n  static hass() {\n    return document.querySelector('home-assistant').hass;\n  }\n\n  static fireEvent(ev, detail, entity=null) {\n    ev = new Event(ev, {\n      bubbles: true,\n      cancelable: false,\n      composed: true,\n    });\n    ev.detail = detail || {};\n    if(entity) {\n      entity.dispatchEvent(ev);\n    } else {\n    document\n      .querySelector(\"home-assistant\")\n      .shadowRoot.querySelector(\"home-assistant-main\")\n      .shadowRoot.querySelector(\"app-drawer-layout partial-panel-resolver\")\n      .shadowRoot.querySelector(\"ha-panel-lovelace\")\n      .shadowRoot.querySelector(\"hui-root\")\n      .shadowRoot.querySelector(\"ha-app-layout #view\")\n      .firstElementChild\n      .dispatchEvent(ev);\n    }\n  }\n\n  static createThing(thing, config) {\n    const _createThing = (tag, config) => {\n      const element = document.createElement(tag);\n      try {\n        element.setConfig(config);\n      } catch (err) {\n        console.error(tag, err);\n        return _createError(err.message, config);\n      }\n      return element;\n    };\n\n    const _createError = (error, config) => {\n      return _createThing(\"hui-error-card\", {\n        type: \"error\",\n        error,\n        config,\n      });\n    };\n\n    if(!config || typeof config !== \"object\" || !config.type)\n      return _createError(`No ${thing} type configured`, config);\n    let tag = config.type;\n    if(config.error) {\n      const err = config.error;\n      delete config.error;\n      return _createError(err, config);\n    }\n    if(tag.startsWith(this.CUSTOM_TYPE_PREFIX()))\n      tag = tag.substr(this.CUSTOM_TYPE_PREFIX().length);\n    else\n      tag = `hui-${tag}-${thing}`;\n\n    if(customElements.get(tag))\n      return _createThing(tag, config);\n\n    // If element doesn't exist (yet) create an error\n    const element = _createError(\n      `Custom element doesn't exist: ${tag}.`,\n      config\n    );\n    element.style.display = \"None\";\n    const time = setTimeout(() => {\n      element.style.display = \"\";\n    }, 2000);\n    // Remove error if element is defined later\n    customElements.whenDefined(tag).then(() => {\n      clearTimeout(timer);\n      this.fireEvent(\"ll-rebuild\", {}, element);\n    });\n\n    return element;\n  }\n\n  static createCard(config) {\n    return this.createThing(\"card\", config);\n  }\n\n  static createElement(config) {\n    return this.createThing(\"element\", config);\n  }\n\n  static createEntityRow(config) {\n    const SPECIAL_TYPES = new Set([\n      \"call-service\",\n      \"divider\",\n      \"section\",\n      \"weblink\",\n    ]);\n    const DEFAULT_ROWS = {\n      alert: \"toggle\",\n      automation: \"toggle\",\n      climate: \"climate\",\n      cover: \"cover\",\n      fan: \"toggle\",\n      group: \"group\",\n      input_boolean: \"toggle\",\n      input_number: \"input-number\",\n      input_select: \"input-select\",\n      input_text: \"input-text\",\n      light: \"toggle\",\n      media_player: \"media-player\",\n      lock: \"lock\",\n      scene: \"scene\",\n      script: \"script\",\n      sensor: \"sensor\",\n      timer: \"timer\",\n      switch: \"toggle\",\n      vacuum: \"toggle\",\n      water_heater: \"climate\",\n    };\n\n    if(!config || typeof config !== \"object\" || (!config.entity && !config.type)) {\n      Object.assign(config, {error: \"Invalid config given\"});\n      return this.createThing(\"\", config);\n    }\n\n    const type = config.type || \"default\";\n    if(SPECIAL_TYPES.has(type) || type.startsWith(this.CUSTOM_TYPE_PREFIX()))\n      return this.createThing(\"row\", config);\n\n    const domain = config.entity.split(\".\", 1)[0];\n    Object.assign(config, {type: DEFAULT_ROWS[domain] || \"text\"});\n    return this.createThing(\"entity-row\", config);\n  }\n\n  static deviceID() {\n    const ID_STORAGE_KEY = 'lovelace-player-device-id';\n    if(window['fully'] && typeof fully.getDeviceId === \"function\")\n      return fully.getDeviceId();\n    if(!localStorage[ID_STORAGE_KEY])\n    {\n      const s4 = () => {\n        return Math.floor((1+Math.random())*100000).toString(16).substring(1);\n      }\n      localStorage[ID_STORAGE_KEY] = `${s4()}${s4()}-${s4()}${s4()}`;\n    }\n    return localStorage[ID_STORAGE_KEY];\n  }\n\n  static moreInfo(entity) {\n    this.fireEvent(\"hass-more-info\", {entityId: entity});\n  }\n\n  static longpress(element) {\n    customElements.whenDefined(\"long-press\").then(() => {\n      const longpress = document.body.querySelector(\"long-press\");\n      longpress.bind(element);\n    });\n    return element;\n  }\n\n  static hasTemplate(text) {\n    return /\\[\\[\\s+.*\\s+\\]\\]/.test(text);\n  }\n\n  static parseTemplate(text, error) {\n    if(typeof(text) !== \"string\") return text;\n    const _parse = (str) => {\n      try {\n        str = str.replace(/^\\[\\[\\s+|\\s+\\]\\]$/g, '')\n        const parts = str.split(\".\");\n        let v = this.hass().states[`${parts[0]}.${parts[1]}`];\n        parts.shift();\n        parts.shift();\n        parts.forEach(item => v = v[item]);\n        return v;\n      } catch (err) {\n        return error || `[[ Template matching failed ${str} ]]`;\n      }\n    }\n    text = text.replace(/(\\[\\[\\s.*?\\s\\]\\])/g, (str, p1, offset, s) => _parse(str));\n    return text;\n  }\n\n  static args() {\n    var url = document.currentScript.src\n    url = url.substr(url.indexOf(\"?\")+1)\n    let args = {};\n    url.split(\"&\").forEach((a) => {\n      if(a.indexOf(\"=\")) {\n        var parts = a.split(\"=\");\n        args[parts[0]] = parts[1]\n      } else {\n        args[a] = true;\n      }\n    });\n    return args;\n  }\n\n  static localize(key, def=\"\") {\n    const language = this.hass().language;\n    if(this.hass().resources[language] && this.hass().resources[language][key])\n      return this.hass().resources[language][key];\n    return def;\n  }\n\n});\n\n// Global definition of cardTools\nvar cardTools = customElements.get('card-tools');\n\nconsole.info(`%cCARD-TOOLS IS INSTALLED\n%cDeviceID: ${customElements.get('card-tools').deviceID()}`,\n\"color: green; font-weight: bold\",\n\"\");\n"
  },
  {
    "path": "home-assistant/www/custom-lovelace/compact-custom-header-editor.js",
    "content": "import {\n  LitElement,\n  html,\n  fireEvent,\n  defaultConfig,\n  hass,\n  newSidebar\n} from \"./compact-custom-header.js\";\n\nconst buttonOptions = [\"show\", \"hide\", \"clock\", \"overflow\"];\nconst overflowOptions = [\"show\", \"hide\", \"clock\"];\nconst swipeAnimation = [\"none\", \"swipe\", \"fade\", \"flip\"];\nlet lovelace;\n\nexport class CompactCustomHeaderEditor extends LitElement {\n  static get properties() {\n    return {\n      _config: {}\n    };\n  }\n\n  firstUpdated() {\n    let ll = document.querySelector(\"home-assistant\");\n    ll = ll && ll.shadowRoot;\n    ll = ll && ll.querySelector(\"home-assistant-main\");\n    ll = ll && ll.shadowRoot;\n    ll = ll && ll.querySelector(\"app-drawer-layout partial-panel-resolver\");\n    ll = (ll && ll.shadowRoot) || ll;\n    ll = ll && ll.querySelector(\"ha-panel-lovelace\");\n    ll = ll && ll.shadowRoot;\n    lovelace = ll && ll.querySelector(\"hui-root\").lovelace;\n\n    let loader = this.parentNode.querySelector(\".lds-ring\");\n    loader.parentNode.removeChild(loader);\n    this._config = lovelace.config.cch ? deepcopy(lovelace.config.cch) : {};\n  }\n\n  render() {\n    if (!this._config || !lovelace) return html``;\n    return html`\n      <div @click=\"${this._close}\" class=\"title_control\">\n        X\n      </div>\n      ${this.renderStyle()}\n      <cch-config-editor\n        .defaultConfig=\"${defaultConfig}\"\n        .config=\"${this._config}\"\n        @cch-config-changed=\"${this._configChanged}\"\n      >\n      </cch-config-editor>\n      <h4 class=\"underline\">Exceptions</h4>\n      <br />\n      ${this._config.exceptions\n        ? this._config.exceptions.map((exception, index) => {\n            return html`\n              <cch-exception-editor\n                .config=\"${this._config}\"\n                .exception=\"${exception}\"\n                .index=\"${index}\"\n                @cch-exception-changed=\"${this._exceptionChanged}\"\n                @cch-exception-delete=\"${this._exceptionDelete}\"\n              >\n              </cch-exception-editor>\n            `;\n          })\n        : \"\"}\n      <br />\n      ${this._mwc_button\n        ? html`\n            <mwc-button @click=\"${this._addException}\"\n              >Add Exception\n            </mwc-button>\n          `\n        : html`\n            <paper-button @click=\"${this._addException}\"\n              >Add Exception\n            </paper-button>\n          `}\n\n      <h4 class=\"underline\">Current User</h4>\n      <p style=\"font-size:16pt\">${hass.user.name}</p>\n      <h4 class=\"underline\">Current User Agent</h4>\n      <br />\n      ${navigator.userAgent}\n      <br />\n      <h4\n        style=\"background:var(--paper-card-background-color);\n      margin-bottom:-20px;\"\n        class=\"underline\"\n      >\n        ${!this.exception\n          ? html`\n              ${this._save_button}\n            `\n          : \"\"}\n        ${!this.exception\n          ? html`\n              ${this._cancel_button}\n            `\n          : \"\"}\n      </h4>\n    `;\n  }\n\n  get _mwc_button() {\n    return customElements.get(\"mwc-button\") ? true : false;\n  }\n\n  _close() {\n    let editor = this.parentNode.parentNode.parentNode.querySelector(\"editor\");\n    this.parentNode.parentNode.parentNode.removeChild(editor);\n  }\n\n  _save() {\n    for (var key in this._config) {\n      if (this._config[key] == defaultConfig[key]) {\n        delete this._config[key];\n      }\n    }\n    let newConfig = {\n      ...lovelace.config,\n      ...{ cch: this._config }\n    };\n    try {\n      lovelace.saveConfig(newConfig).then(() => {\n        location.reload(true);\n      });\n    } catch (e) {\n      alert(\"Save failed: \" + e);\n    }\n  }\n\n  get _save_button() {\n    return this._mwc_button\n      ? html`\n          <mwc-button raised @click=\"${this._save}\">Save and Reload</mwc-button>\n        `\n      : html`\n          <paper-button raised @click=\"${this._save}\"\n            >Save and Reload</paper-button\n          >\n        `;\n  }\n  get _cancel_button() {\n    return this._mwc_button\n      ? html`\n          <mwc-button raised @click=\"${this._close}\">Cancel</mwc-button>\n        `\n      : html`\n          <paper-button raised @click=\"${this._close}\">Cancel</paper-button>\n        `;\n  }\n\n  _addException() {\n    let newExceptions;\n    if (this._config.exceptions) {\n      newExceptions = this._config.exceptions.slice(0);\n      newExceptions.push({\n        conditions: {},\n        config: {}\n      });\n    } else {\n      newExceptions = [\n        {\n          conditions: {},\n          config: {}\n        }\n      ];\n    }\n    this._config = {\n      ...this._config,\n      exceptions: newExceptions\n    };\n\n    fireEvent(this, \"config-changed\", {\n      config: this._config\n    });\n  }\n\n  _configChanged(ev) {\n    if (!this._config) {\n      return;\n    }\n    this._config = {\n      ...this._config,\n      ...ev.detail.config\n    };\n    fireEvent(this, \"config-changed\", {\n      config: this._config\n    });\n  }\n\n  _exceptionChanged(ev) {\n    if (!this._config) {\n      return;\n    }\n    const target = ev.target.index;\n    const newExceptions = this._config.exceptions.slice(0);\n    newExceptions[target] = ev.detail.exception;\n    this._config = {\n      ...this._config,\n      exceptions: newExceptions\n    };\n\n    fireEvent(this, \"config-changed\", {\n      config: this._config\n    });\n  }\n\n  _exceptionDelete(ev) {\n    if (!this._config) {\n      return;\n    }\n    const target = ev.target;\n    const newExceptions = this._config.exceptions.slice(0);\n    newExceptions.splice(target.index, 1);\n    this._config = {\n      ...this._config,\n      exceptions: newExceptions\n    };\n\n    fireEvent(this, \"config-changed\", {\n      config: this._config\n    });\n    this.requestUpdate();\n  }\n\n  renderStyle() {\n    return html`\n      <style>\n        h3,\n        h4 {\n          font-size: 16pt;\n          margin-bottom: 5px;\n          width: 100%;\n        }\n        paper-button {\n          margin: 0;\n          background-color: var(--primary-color);\n          color: var(--text-primary-color, #fff);\n        }\n        .toggle-button {\n          margin: 4px;\n          background-color: transparent;\n          color: var(--primary-color);\n        }\n        .title_control {\n          color: var(--text-dark-color);\n          font-weight: bold;\n          font-size: 22px;\n          float: right;\n          cursor: pointer;\n          margin: -10px -5px -5px -5px;\n        }\n        .user_agent {\n          display: block;\n          margin-left: auto;\n          margin-right: auto;\n          padding: 5px;\n          border: 0;\n          resize: none;\n          width: 100%;\n        }\n        .underline {\n          width: 100%;\n          background: var(--dark-color);\n          color: var(--text-dark-color);\n          padding: 5px;\n          width: calc(100% + 30px);\n          margin-left: calc(0% - 20px);\n        }\n      </style>\n    `;\n  }\n}\n\ncustomElements.define(\n  \"compact-custom-header-editor\",\n  CompactCustomHeaderEditor\n);\n\nexport class CchConfigEditor extends LitElement {\n  static get properties() {\n    return {\n      defaultConfig: {},\n      config: {},\n      exception: {},\n      _closed: {}\n    };\n  }\n\n  get _clock() {\n    return (\n      this.getConfig(\"menu\") == \"clock\" ||\n      this.getConfig(\"voice\") == \"clock\" ||\n      this.getConfig(\"notifications\") == \"clock\" ||\n      this.getConfig(\"options\") == \"clock\"\n    );\n  }\n\n  getConfig(item) {\n    return this.config[item] !== undefined\n      ? this.config[item]\n      : this.defaultConfig[item];\n  }\n\n  render() {\n    this.exception = this.exception !== undefined && this.exception !== false;\n    return html`\n      <custom-style>\n        <style is=\"custom-style\">\n          a {\n            color: var(--text-dark-color);\n            text-decoration: none;\n          }\n          .card-header {\n            margin-top: -5px;\n            @apply --paper-font-headline;\n          }\n          .card-header paper-icon-button {\n            margin-top: -5px;\n            float: right;\n          }\n        </style>\n      </custom-style>\n      ${!this.exception\n        ? html`\n            <h1 style=\"margin-top:-20px;margin-bottom:0;\" class=\"underline\">\n              Compact Custom Header\n            </h1>\n            <h4\n              style=\"margin-top:-5px;padding-top:10px;font-size:12pt;\"\n              class=\"underline\"\n            >\n              <a\n                href=\"https://maykar.github.io/compact-custom-header/\"\n                target=\"_blank\"\n              >\n                <ha-icon icon=\"mdi:help-circle\" style=\"margin-top:-5px;\">\n                </ha-icon>\n                Docs&nbsp;&nbsp;&nbsp;</a\n              >\n              <a\n                href=\"https://github.com/maykar/compact-custom-header\"\n                target=\"_blank\"\n              >\n                <ha-icon icon=\"mdi:github-circle\" style=\"margin-top:-5px;\">\n                </ha-icon>\n                Github&nbsp;&nbsp;&nbsp;</a\n              >\n              <a\n                href=\"https://community.home-assistant.io/t/compact-custom-header\"\n                target=\"_blank\"\n              >\n                <ha-icon icon=\"hass:home-assistant\" style=\"margin-top:-5px;\">\n                </ha-icon>\n                Forums</a\n              >\n            </h4>\n            ${this.getConfig(\"warning\")\n              ? html`\n                  <br />\n                  <div class=\"warning\">\n                    Modifying options marked with a\n                    <iron-icon\n                      icon=\"hass:alert\"\n                      style=\"width:20px;margin-top:-6px;\"\n                    ></iron-icon\n                    >or hiding the options button will remove your ability to\n                    edit from the UI. You can disable CCH by adding\n                    \"?disable_cch\" to the end of your URL to temporarily restore\n                    the default header.\n                  </div>\n                  <br />\n                `\n              : \"\"}\n          `\n        : \"\"}\n      ${this.renderStyle()}\n      <div class=\"side-by-side\">\n        <paper-toggle-button\n          class=\"${this.exception && this.config.disable === undefined\n            ? \"inherited\"\n            : \"\"}\"\n          ?checked=\"${this.getConfig(\"disable\") !== false}\"\n          .configValue=\"${\"disable\"}\"\n          @change=\"${this._valueChanged}\"\n          title=\"Completely disable CCH. Useful for exceptions.\"\n        >\n          Disable CCH\n        </paper-toggle-button>\n        <paper-toggle-button\n          class=\"${this.exception && this.config.header === undefined\n            ? \"inherited\"\n            : \"\"}\"\n          ?checked=\"${this.getConfig(\"header\") !== false &&\n            this.getConfig(\"kiosk_mode\") == false}\"\n          .configValue=\"${\"header\"}\"\n          @change=\"${this._valueChanged}\"\n          title=\"Turn off to hide the header completely.\"\n        >\n          Display Header\n          ${this.getConfig(\"warning\")\n            ? html`\n                <iron-icon icon=\"hass:alert\" class=\"alert\"></iron-icon>\n              `\n            : \"\"}\n        </paper-toggle-button>\n        <paper-toggle-button\n          class=\"${this.exception && this.config.kiosk_mode === undefined\n            ? \"inherited\"\n            : \"\"}\"\n          ?checked=\"${this.getConfig(\"kiosk_mode\") !== false}\"\n          .configValue=\"${\"kiosk_mode\"}\"\n          @change=\"${this._valueChanged}\"\n          title=\"Hide the header, close the sidebar, and disable sidebar swipe.\"\n        >\n          Kiosk Mode\n          ${this.getConfig(\"warning\")\n            ? html`\n                <iron-icon icon=\"hass:alert\" class=\"alert\"></iron-icon>\n              `\n            : \"\"}\n        </paper-toggle-button>\n        <paper-toggle-button\n          class=\"${this.exception && this.config.redirect === undefined\n            ? \"inherited\"\n            : \"\"}\"\n          ?checked=\"${this.getConfig(\"redirect\") !== false}\"\n          .configValue=\"${\"redirect\"}\"\n          @change=\"${this._valueChanged}\"\n          title=\"Auto-redirect away from hidden tabs.\"\n        >\n          Hidden Tab Redirect\n        </paper-toggle-button>\n        <paper-toggle-button\n          class=\"${this.exception && this.config.chevrons === undefined\n            ? \"inherited\"\n            : \"\"}\"\n          ?checked=\"${this.getConfig(\"chevrons\") !== false}\"\n          .configValue=\"${\"chevrons\"}\"\n          @change=\"${this._valueChanged}\"\n          title=\"View scrolling controls in header.\"\n        >\n          Display Tab Chevrons\n        </paper-toggle-button>\n        <paper-toggle-button\n          style=\"${newSidebar ? \"\" : \"display:none;\"}\"\n          class=\"${this.exception && this.config.disable_sidebar === undefined\n            ? \"inherited\"\n            : \"\"}\"\n          ?checked=\"${this.getConfig(\"disable_sidebar\") !== false ||\n            this.getConfig(\"kiosk_mode\") !== false}\"\n          .configValue=\"${\"disable_sidebar\"}\"\n          @change=\"${this._valueChanged}\"\n          title=\"Hides and prevents sidebar from opening.\"\n        >\n          Hide & Disable Sidebar\n        </paper-toggle-button>\n        <paper-toggle-button\n          style=\"${newSidebar ? \"display:none;\" : \"\"}\"\n          class=\"${this.exception && this.config.sidebar_closed === undefined\n            ? \"inherited\"\n            : \"\"}\"\n          ?checked=\"${this.getConfig(\"sidebar_closed\") !== false ||\n            this.getConfig(\"kiosk_mode\") !== false}\"\n          .configValue=\"${\"sidebar_closed\"}\"\n          @change=\"${this._valueChanged}\"\n          title=\"Closes the sidebar on opening Lovelace.\"\n        >\n          Close Sidebar\n        </paper-toggle-button>\n        <paper-toggle-button\n          style=\"${newSidebar ? \"display:none;\" : \"\"}\"\n          class=\"${this.exception && this.config.sidebar_swipe === undefined\n            ? \"inherited\"\n            : \"\"}\"\n          ?checked=\"${this.getConfig(\"sidebar_swipe\") !== false &&\n            this.getConfig(\"kiosk_mode\") == false}\"\n          .configValue=\"${\"sidebar_swipe\"}\"\n          @change=\"${this._valueChanged}\"\n          title=\"Swipe to open sidebar on mobile devices.\"\n        >\n          Swipe Open Sidebar\n        </paper-toggle-button>\n        ${!this.exception\n          ? html`\n              <paper-toggle-button\n                class=\"${this.exception && this.config.warning === undefined\n                  ? \"inherited\"\n                  : \"\"}\"\n                ?checked=\"${this.getConfig(\"warning\") !== false}\"\n                .configValue=\"${\"warning\"}\"\n                @change=\"${this._valueChanged}\"\n                title=\"Toggle warnings in this editor.\"\n              >\n                Display CCH Warnings\n              </paper-toggle-button>\n            `\n          : \"\"}\n      </div>\n      <h4 class=\"underline\">Menu Items</h4>\n      <div class=\"side-by-side\">\n        <paper-toggle-button\n          class=\"${this.exception && this.config.hide_config === undefined\n            ? \"inherited\"\n            : \"\"}\"\n          ?checked=\"${this.getConfig(\"hide_config\") !== false}\"\n          .configValue=\"${\"hide_config\"}\"\n          @change=\"${this._valueChanged}\"\n          title='Hide \"Configure UI\" in options menu.'\n        >\n          Hide \"Configure UI\"\n          ${this.getConfig(\"warning\")\n            ? html`\n                <iron-icon icon=\"hass:alert\" class=\"alert\"></iron-icon>\n              `\n            : \"\"}\n        </paper-toggle-button>\n        <paper-toggle-button\n          class=\"${this.exception && this.config.hide_help === undefined\n            ? \"inherited\"\n            : \"\"}\"\n          ?checked=\"${this.getConfig(\"hide_help\") !== false}\"\n          .configValue=\"${\"hide_help\"}\"\n          @change=\"${this._valueChanged}\"\n          title='Hide \"Help\" in options menu.'\n        >\n          Hide \"Help\"\n        </paper-toggle-button>\n        <paper-toggle-button\n          class=\"${this.exception && this.config.hide_unused === undefined\n            ? \"inherited\"\n            : \"\"}\"\n          ?checked=\"${this.getConfig(\"hide_unused\") !== false}\"\n          .configValue=\"${\"hide_unused\"}\"\n          @change=\"${this._valueChanged}\"\n          title='Hide \"Help\" in options menu.'\n        >\n          Hide \"Unused Entities\"\n        </paper-toggle-button>\n      </div>\n      <h4 class=\"underline\">Buttons</h4>\n      <div class=\"buttons side-by-side\">\n        <div\n          class=\"${this.exception && this.config.menu === undefined\n            ? \"inherited\"\n            : \"\"}\"\n        >\n          <iron-icon icon=\"hass:menu\"></iron-icon>\n          <paper-dropdown-menu\n            @value-changed=\"${this._valueChanged}\"\n            label=\"Menu Button:\"\n            .configValue=\"${\"menu\"}\"\n          >\n            <paper-listbox\n              slot=\"dropdown-content\"\n              .selected=\"${buttonOptions.indexOf(this.getConfig(\"menu\"))}\"\n            >\n              ${buttonOptions.map(option => {\n                return html`\n                  <paper-item>${option}</paper-item>\n                `;\n              })}\n            </paper-listbox>\n          </paper-dropdown-menu>\n        </div>\n        <div\n          class=\"${this.exception && this.config.voice === undefined\n            ? \"inherited\"\n            : \"\"}\"\n        >\n          <iron-icon icon=\"hass:microphone\"></iron-icon>\n          <paper-dropdown-menu\n            @value-changed=\"${this._valueChanged}\"\n            label=\"Voice Button:\"\n            .configValue=\"${\"voice\"}\"\n          >\n            <paper-listbox\n              slot=\"dropdown-content\"\n              .selected=\"${buttonOptions.indexOf(this.getConfig(\"voice\"))}\"\n            >\n              ${buttonOptions.map(option => {\n                return html`\n                  <paper-item>${option}</paper-item>\n                `;\n              })}\n            </paper-listbox>\n          </paper-dropdown-menu>\n        </div>\n      </div>\n      <div\n        class=\"buttons side-by-side\"\n        style=\"${newSidebar ? \"width:50%;\" : \"\"}\"\n      >\n        <div\n          class=\"${this.exception && this.config.options === undefined\n            ? \"inherited\"\n            : \"\"}\"\n        >\n          <iron-icon icon=\"hass:dots-vertical\"></iron-icon>\n          <paper-dropdown-menu\n            @value-changed=\"${this._valueChanged}\"\n            label=\"Options Button:\"\n            .configValue=\"${\"options\"}\"\n          >\n            <paper-listbox\n              slot=\"dropdown-content\"\n              .selected=\"${overflowOptions.indexOf(this.getConfig(\"options\"))}\"\n            >\n              ${overflowOptions.map(option => {\n                return html`\n                  <paper-item>${option}</paper-item>\n                `;\n              })}\n            </paper-listbox>\n          </paper-dropdown-menu>\n        </div>\n        <div\n          style=\"${newSidebar ? \"display:none;\" : \"\"}\"\n          class=\"${this.exception && this.config.notifications === undefined\n            ? \"inherited\"\n            : \"\"}\"\n        >\n          <iron-icon icon=\"hass:bell\"></iron-icon>\n          <paper-dropdown-menu\n            @value-changed=\"${this._valueChanged}\"\n            label=\"Notifications Button:\"\n            .configValue=\"${\"notifications\"}\"\n          >\n            <paper-listbox\n              slot=\"dropdown-content\"\n              .selected=\"${buttonOptions.indexOf(\n                this.getConfig(\"notifications\")\n              )}\"\n            >\n              ${buttonOptions.map(option => {\n                return html`\n                  <paper-item>${option}</paper-item>\n                `;\n              })}\n            </paper-listbox>\n          </paper-dropdown-menu>\n        </div>\n      </div>\n      ${this._clock\n        ? html`\n            <h4 class=\"underline\">Clock Options</h4>\n            <div class=\"side-by-side\">\n              <paper-dropdown-menu\n                class=\"${this.exception &&\n                this.getConfig(\"clock_format\") === undefined\n                  ? \"inherited\"\n                  : \"\"}\"\n                label=\"Clock format\"\n                @value-changed=\"${this._valueChanged}\"\n                .configValue=\"${\"clock_format\"}\"\n              >\n                <paper-listbox\n                  slot=\"dropdown-content\"\n                  .selected=\"${this.getConfig(\"clock_format\") === \"24\" ? 1 : 0}\"\n                >\n                  <paper-item>12</paper-item>\n                  <paper-item>24</paper-item>\n                </paper-listbox>\n              </paper-dropdown-menu>\n              <paper-input\n                class=\"${this.exception && this.config.date_locale === undefined\n                  ? \"inherited\"\n                  : \"\"}\"\n                label=\"Date Locale:\"\n                .value=\"${this.getConfig(\"date_locale\")}\"\n                .configValue=\"${\"date_locale\"}\"\n                @value-changed=\"${this._valueChanged}\"\n              >\n              </paper-input>\n\n              <div class=\"side-by-side\">\n                <paper-toggle-button\n                  class=\"${this.exception &&\n                  this.config.clock_am_pm === undefined\n                    ? \"inherited\"\n                    : \"\"}\"\n                  ?checked=\"${this.getConfig(\"clock_am_pm\") !== false}\"\n                  .configValue=\"${\"clock_am_pm\"}\"\n                  @change=\"${this._valueChanged}\"\n                >\n                  AM / PM</paper-toggle-button\n                >\n                <paper-toggle-button\n                  class=\"${this.exception &&\n                  this.config.clock_date === undefined\n                    ? \"inherited\"\n                    : \"\"}\"\n                  ?checked=\"${this.getConfig(\"clock_date\") !== false}\"\n                  .configValue=\"${\"clock_date\"}\"\n                  @change=\"${this._valueChanged}\"\n                >\n                  Date</paper-toggle-button\n                >\n              </div>\n            </div>\n          `\n        : \"\"}\n      <h4 class=\"underline\">Tabs</h4>\n      <paper-dropdown-menu id=\"tabs\" @value-changed=\"${this._tabVisibility}\">\n        <paper-listbox\n          slot=\"dropdown-content\"\n          .selected=\"${this.getConfig(\"show_tabs\").length > 0 ? \"1\" : \"0\"}\"\n        >\n          <paper-item>Hide Tabs</paper-item>\n          <paper-item>Show Tabs</paper-item>\n        </paper-listbox>\n      </paper-dropdown-menu>\n      <div class=\"side-by-side\">\n        <div\n          id=\"show\"\n          style=\"display:${this.getConfig(\"show_tabs\").length > 0\n            ? \"initial\"\n            : \"none\"}\"\n        >\n          <paper-input\n            class=\"${this.exception && this.config.show_tabs === undefined\n              ? \"inherited\"\n              : \"\"}\"\n            label=\"Comma-separated list of tab numbers to show:\"\n            .value=\"${this.getConfig(\"show_tabs\")}\"\n            .configValue=\"${\"show_tabs\"}\"\n            @value-changed=\"${this._valueChanged}\"\n          >\n          </paper-input>\n        </div>\n        <div\n          id=\"hide\"\n          style=\"display:${this.getConfig(\"show_tabs\").length > 0\n            ? \"none\"\n            : \"initial\"}\"\n        >\n          <paper-input\n            class=\"${this.exception && this.config.hide_tabs === undefined\n              ? \"inherited\"\n              : \"\"}\"\n            label=\"Comma-separated list of tab numbers to hide:\"\n            .value=\"${this.getConfig(\"hide_tabs\")}\"\n            .configValue=\"${\"hide_tabs\"}\"\n            @value-changed=\"${this._valueChanged}\"\n          >\n          </paper-input>\n        </div>\n        <paper-input\n          class=\"${this.exception && this.config.default_tab === undefined\n            ? \"inherited\"\n            : \"\"}\"\n          label=\"Default tab:\"\n          .value=\"${this.getConfig(\"default_tab\")}\"\n          .configValue=\"${\"default_tab\"}\"\n          @value-changed=\"${this._valueChanged}\"\n        >\n        </paper-input>\n      </div>\n      <h4 class=\"underline\">Swipe Navigation</h4>\n      <div class=\"side-by-side\">\n        <paper-toggle-button\n          class=\"${this.exception && this.config.swipe === undefined\n            ? \"inherited\"\n            : \"\"}\"\n          ?checked=\"${this.getConfig(\"swipe\") !== false}\"\n          .configValue=\"${\"swipe\"}\"\n          @change=\"${this._valueChanged}\"\n          title=\"Toggle Swipe Navigation\"\n        >\n          Swipe Navigation\n        </paper-toggle-button>\n        ${this.config.swipe\n          ? html`\n        <paper-toggle-button\n          class=\"${\n            this.exception && this.config.swipe_wrap === undefined\n              ? \"inherited\"\n              : \"\"\n          }\"\n          ?checked=\"${this.getConfig(\"swipe_wrap\") !== false}\"\n          .configValue=\"${\"swipe_wrap\"}\"\n          @change=\"${this._valueChanged}\"\n          title=\"Wrap from first to last tab and vice versa.\"\n        >\n          Wrapping\n        </paper-toggle-button>\n        <paper-toggle-button\n          class=\"${\n            this.exception && this.config.swipe_prevent_default === undefined\n              ? \"inherited\"\n              : \"\"\n          }\"\n          ?checked=\"${this.getConfig(\"swipe_prevent_default\") !== false}\"\n          .configValue=\"${\"swipe_prevent_default\"}\"\n          @change=\"${this._valueChanged}\"\n          title=\"Prevent browsers default horizontal swipe action.\"\n        >\n          Prevent Default\n        </paper-toggle-button>\n        <div\n        class=\"${\n          this.exception && this.config.swipe_animate === undefined\n            ? \"inherited\"\n            : \"\"\n        }\"\n      >\n      </div>\n      <div class=\"side-by-side\">\n        <paper-dropdown-menu\n          @value-changed=\"${this._valueChanged}\"\n          label=\"Swipe Animation:\"\n          .configValue=\"${\"swipe_animate\"}\"\n        >\n          <paper-listbox\n            slot=\"dropdown-content\"\n            .selected=\"${swipeAnimation.indexOf(\n              this.getConfig(\"swipe_animate\")\n            )}\"\n          >\n            ${swipeAnimation.map(option => {\n              return html`\n                <paper-item>${option}</paper-item>\n              `;\n            })}\n          </paper-listbox>\n        </paper-dropdown-menu>\n      </div>\n      <paper-input\n      class=\"${\n        this.exception && this.config.swipe_amount === undefined\n          ? \"inherited\"\n          : \"\"\n      }\"\n      label=\"Percentage of screen width needed for swipe:\"\n      .value=\"${this.getConfig(\"swipe_amount\")}\"\n      .configValue=\"${\"swipe_amount\"}\"\n      @value-changed=\"${this._valueChanged}\"\n    >\n    </paper-input>\n        </div>\n        <paper-input\n        class=\"${\n          this.exception && this.config.swipe_skip === undefined\n            ? \"inherited\"\n            : \"\"\n        }\"\n        label=\"Comma-separated list of tabs to skip over on swipe:\"\n        .value=\"${this.getConfig(\"swipe_skip\")}\"\n        .configValue=\"${\"swipe_skip\"}\"\n        @value-changed=\"${this._valueChanged}\"\n      >\n      </paper-input>\n      </div>\n    `\n          : \"\"}\n      </div>\n    `;\n  }\n\n  _toggleCard() {\n    this._closed = !this._closed;\n    fireEvent(this, \"iron-resize\");\n  }\n\n  _tabVisibility() {\n    let show = this.shadowRoot.querySelector('[id=\"show\"]');\n    let hide = this.shadowRoot.querySelector('[id=\"hide\"]');\n    if (this.shadowRoot.querySelector('[id=\"tabs\"]').value == \"Hide Tabs\") {\n      show.style.display = \"none\";\n      hide.style.display = \"initial\";\n    } else {\n      hide.style.display = \"none\";\n      show.style.display = \"initial\";\n    }\n  }\n\n  _valueChanged(ev) {\n    if (!this.config) {\n      return;\n    }\n    const target = ev.target;\n    if (this[`_${target.configValue}`] === target.value) {\n      return;\n    }\n    if (target.configValue) {\n      if (target.value === \"\") {\n        delete this.config[target.configValue];\n      } else {\n        this.config = {\n          ...this.config,\n          [target.configValue]:\n            target.checked !== undefined ? target.checked : target.value\n        };\n      }\n    }\n    fireEvent(this, \"cch-config-changed\", {\n      config: this.config\n    });\n  }\n\n  renderStyle() {\n    return html`\n      <style>\n        h3,\n        h4 {\n          font-size: 16pt;\n          margin-bottom: 5px;\n          width: 100%;\n        }\n        paper-toggle-button {\n          padding-top: 16px;\n        }\n        iron-icon {\n          padding-right: 5px;\n        }\n        iron-input {\n          max-width: 115px;\n        }\n        .inherited {\n          opacity: 0.4;\n        }\n        .inherited:hover {\n          opacity: 1;\n        }\n        .side-by-side {\n          display: flex;\n          flex-wrap: wrap;\n        }\n        .side-by-side > * {\n          flex: 1;\n          padding-right: 4px;\n          flex-basis: 33%;\n        }\n        .buttons > div {\n          display: flex;\n          align-items: center;\n        }\n        .buttons > div paper-dropdown-menu {\n          flex-grow: 1;\n        }\n        .buttons > div iron-icon {\n          padding-right: 15px;\n          padding-top: 20px;\n          margin-left: -3px;\n        }\n        .buttons > div:nth-of-type(2n) iron-icon {\n          padding-left: 20px;\n        }\n        .warning {\n          background-color: #455a64;\n          padding: 10px;\n          color: #ffcd4c;\n          border-radius: 5px;\n        }\n        .alert {\n          color: #ffcd4c;\n          width: 20px;\n          margin-top: -6px;\n        }\n        [closed] {\n          overflow: hidden;\n          height: 52px;\n        }\n        paper-card {\n          margin-top: 10px;\n          width: 100%;\n          transition: all 0.5s ease;\n        }\n        .underline {\n          width: 100%;\n          background: var(--dark-color);\n          color: var(--text-dark-color);\n          padding: 5px;\n          width: calc(100% + 30px);\n          margin-left: calc(0% - 20px);\n        }\n      </style>\n    `;\n  }\n}\n\ncustomElements.define(\"cch-config-editor\", CchConfigEditor);\n\nexport class CchExceptionEditor extends LitElement {\n  static get properties() {\n    return {\n      config: {},\n      exception: {},\n      _closed: {}\n    };\n  }\n\n  constructor() {\n    super();\n    this._closed = true;\n  }\n\n  render() {\n    if (!this.exception) {\n      return html``;\n    }\n    return html`\n      ${this.renderStyle()}\n      <custom-style>\n        <style is=\"custom-style\">\n          .card-header {\n            margin-top: -5px;\n            @apply --paper-font-headline;\n          }\n          .card-header paper-icon-button {\n            margin-top: -5px;\n            float: right;\n          }\n        </style>\n      </custom-style>\n      <paper-card ?closed=${this._closed}>\n        <div class=\"card-content\">\n          <div class=\"card-header\">\n            ${Object.values(this.exception.conditions).join(\", \") ||\n              \"New Exception\"}\n            <paper-icon-button\n              icon=\"${this._closed ? \"mdi:chevron-down\" : \"mdi:chevron-up\"}\"\n              @click=\"${this._toggleCard}\"\n            >\n            </paper-icon-button>\n            <paper-icon-button\n              ?hidden=${this._closed}\n              icon=\"mdi:delete\"\n              @click=\"${this._deleteException}\"\n            >\n            </paper-icon-button>\n          </div>\n          <h4 class=\"underline\">Conditions</h4>\n          <cch-conditions-editor\n            .conditions=\"${this.exception.conditions}\"\n            @cch-conditions-changed=\"${this._conditionsChanged}\"\n          >\n          </cch-conditions-editor>\n          <h4 class=\"underline\">Config</h4>\n          <cch-config-editor\n            exception\n            .defaultConfig=\"${{ ...defaultConfig, ...this.config }}\"\n            .config=\"${this.exception.config}\"\n            @cch-config-changed=\"${this._configChanged}\"\n          >\n          </cch-config-editor>\n        </div>\n      </paper-card>\n    `;\n  }\n\n  renderStyle() {\n    return html`\n      <style>\n        h3,\n        h4 {\n          font-size: 16pt;\n          margin-bottom: 5px;\n          width: 100%;\n        }\n        [closed] {\n          overflow: hidden;\n          height: 52px;\n        }\n        paper-card {\n          margin-top: 10px;\n          width: 100%;\n          transition: all 0.5s ease;\n        }\n        .underline {\n          width: 100%;\n          background: var(--dark-color);\n          color: var(--text-dark-color);\n          padding: 5px;\n          width: calc(100% + 30px);\n          margin-left: calc(0% - 20px);\n        }\n      </style>\n    `;\n  }\n\n  _toggleCard() {\n    this._closed = !this._closed;\n    fireEvent(this, \"iron-resize\");\n  }\n\n  _deleteException() {\n    fireEvent(this, \"cch-exception-delete\");\n  }\n\n  _conditionsChanged(ev) {\n    if (!this.exception) {\n      return;\n    }\n    const newException = {\n      ...this.exception,\n      conditions: ev.detail.conditions\n    };\n    fireEvent(this, \"cch-exception-changed\", {\n      exception: newException\n    });\n  }\n\n  _configChanged(ev) {\n    ev.stopPropagation();\n    if (!this.exception) {\n      return;\n    }\n    const newException = { ...this.exception, config: ev.detail.config };\n    fireEvent(this, \"cch-exception-changed\", {\n      exception: newException\n    });\n  }\n}\n\ncustomElements.define(\"cch-exception-editor\", CchExceptionEditor);\n\nexport class CchConditionsEditor extends LitElement {\n  static get properties() {\n    return {\n      conditions: {}\n    };\n  }\n\n  get _user() {\n    return this.conditions.user || \"\";\n  }\n\n  get _user_agent() {\n    return this.conditions.user_agent || \"\";\n  }\n\n  get _media_query() {\n    return this.conditions.media_query || \"\";\n  }\n\n  render() {\n    if (!this.conditions) {\n      return html``;\n    }\n    return html`\n      <paper-input\n        label=\"User\"\n        .value=\"${this._user}\"\n        .configValue=\"${\"user\"}\"\n        @value-changed=\"${this._valueChanged}\"\n      >\n      </paper-input>\n      <paper-input\n        label=\"User agent\"\n        .value=\"${this._user_agent}\"\n        .configValue=\"${\"user_agent\"}\"\n        @value-changed=\"${this._valueChanged}\"\n      >\n      </paper-input>\n      <paper-input\n        label=\"Media query\"\n        .value=\"${this._media_query}\"\n        .configValue=\"${\"media_query\"}\"\n        @value-changed=\"${this._valueChanged}\"\n      >\n      </paper-input>\n    `;\n  }\n\n  _valueChanged(ev) {\n    if (!this.conditions) {\n      return;\n    }\n    const target = ev.target;\n    if (this[`_${target.configValue}`] === target.value) {\n      return;\n    }\n    if (target.configValue) {\n      if (target.value === \"\") {\n        delete this.conditions[target.configValue];\n      } else {\n        this.conditions = {\n          ...this.conditions,\n          [target.configValue]: target.value\n        };\n      }\n    }\n    fireEvent(this, \"cch-conditions-changed\", {\n      conditions: this.conditions\n    });\n  }\n}\n\ncustomElements.define(\"cch-conditions-editor\", CchConditionsEditor);\n\nfunction deepcopy(value) {\n  if (!(!!value && typeof value == \"object\")) {\n    return value;\n  }\n  if (Object.prototype.toString.call(value) == \"[object Date]\") {\n    return new Date(value.getTime());\n  }\n  if (Array.isArray(value)) {\n    return value.map(deepcopy);\n  }\n  var result = {};\n  Object.keys(value).forEach(function(key) {\n    result[key] = deepcopy(value[key]);\n  });\n  return result;\n}\n"
  },
  {
    "path": "home-assistant/www/custom-lovelace/compact-custom-header.js",
    "content": "export const LitElement = Object.getPrototypeOf(\n  customElements.get(\"ha-panel-lovelace\")\n);\nexport const html = LitElement.prototype.html;\nexport const hass = document.querySelector(\"home-assistant\").hass;\n\nexport const fireEvent = (node, type, detail, options) => {\n  options = options || {};\n  detail = detail === null || detail === undefined ? {} : detail;\n  const event = new Event(type, {\n    bubbles: options.bubbles === undefined ? true : options.bubbles,\n    cancelable: Boolean(options.cancelable),\n    composed: options.composed === undefined ? true : options.composed\n  });\n  event.detail = detail;\n  node.dispatchEvent(event);\n  return event;\n};\n\nexport const defaultConfig = {\n  header: true,\n  disable: false,\n  menu: \"show\",\n  voice: \"show\",\n  notifications: \"show\",\n  options: \"show\",\n  clock_format: 12,\n  clock_am_pm: true,\n  clock_date: false,\n  date_locale: hass.language,\n  chevrons: false,\n  redirect: true,\n  background: \"\",\n  hide_tabs: [],\n  show_tabs: [],\n  default_tab: [],\n  kiosk_mode: false,\n  sidebar_swipe: true,\n  sidebar_closed: false,\n  disable_sidebar: false,\n  hide_help: false,\n  hide_config: false,\n  hide_unused: false,\n  tab_color: {},\n  button_color: {},\n  swipe: false,\n  swipe_amount: \"15\",\n  swipe_animate: \"none\",\n  swipe_skip: \"\",\n  swipe_wrap: true,\n  swipe_prevent_default: false,\n  warning: true\n};\n\nlet root = document.querySelector(\"home-assistant\");\nroot = root && root.shadowRoot;\nroot = root && root.querySelector(\"home-assistant-main\");\nconst main = root;\nroot = root && root.shadowRoot;\nroot = root && root.querySelector(\"app-drawer-layout partial-panel-resolver\");\nroot = (root && root.shadowRoot) || root;\nroot = root && root.querySelector(\"ha-panel-lovelace\");\nroot = root && root.shadowRoot;\nroot = root && root.querySelector(\"hui-root\");\nconst lovelace = root.lovelace;\nroot = root.shadowRoot;\n\nexport const newSidebar = !root.querySelector(\"hui-notification-drawer\");\n\nlet notifications = notificationCount();\nconst header = root.querySelector(\"app-header\");\nlet cchConfig = buildConfig(lovelace.config.cch || {});\nconst view = root.querySelector(\"ha-app-layout\").querySelector('[id=\"view\"]');\n\nlet defaultTabRedirect = false;\nlet sidebarClosed = false;\nlet editMode = header.className == \"edit-mode\";\nlet firstRun = true;\nlet condState = [];\nlet prevColor = {};\nlet prevState = [];\nlet buttons = {};\n\nrun();\nbreakingChangeNotification();\n\nfunction run() {\n  const disable = cchConfig.disable;\n  const urlDisable = window.location.href.includes(\"disable_cch\");\n  const tabContainer = root.querySelector(\"paper-tabs\");\n  const tabs = tabContainer\n    ? Array.from(tabContainer.querySelectorAll(\"paper-tab\"))\n    : [];\n  if (firstRun || buttons == undefined) {\n    buttons = getButtonElements(tabContainer);\n  }\n  if (!buttons.menu || !buttons.options || header.className == \"edit-mode\") {\n    return;\n  }\n\n  if (!disable && !urlDisable) {\n    insertEditMenu(tabs);\n    if (!editMode) {\n      styleButtons(tabs);\n      styleHeader(tabContainer, tabs, header);\n      hideTabs(tabContainer, tabs);\n      defaultTab(tabs, tabContainer);\n    }\n    if (firstRun) sidebarMod();\n    hideMenuItems();\n    for (const button in buttons) {\n      if (cchConfig[button] == \"clock\") insertClock(button);\n    }\n    if (!editMode) tabContainerMargin(tabContainer);\n    if (cchConfig.swipe) swipeNavigation(tabs, tabContainer);\n  }\n  if (!disable && firstRun) observers(tabContainer, tabs, urlDisable, header);\n  fireEvent(header, \"iron-resize\");\n  firstRun = false;\n}\n\nfunction buildConfig(config) {\n  let exceptionConfig = {};\n  let highestMatch = 0;\n  if (config.exceptions) {\n    config.exceptions.forEach(exception => {\n      const matches = countMatches(exception.conditions);\n      if (matches > highestMatch) {\n        highestMatch = matches;\n        exceptionConfig = exception.config;\n      }\n    });\n  }\n\n  if (\n    exceptionConfig.hide_tabs &&\n    config.show_tabs &&\n    exceptionConfig.hide_tabs.length &&\n    config.show_tabs.length\n  ) {\n    delete config.show_tabs;\n  } else if (\n    exceptionConfig.show_tabs &&\n    config.hide_tabs &&\n    exceptionConfig.show_tabs.length &&\n    config.hide_tabs.length\n  ) {\n    delete config.hide_tabs;\n  }\n\n  return { ...defaultConfig, ...config, ...exceptionConfig };\n\n  function countMatches(conditions) {\n    const userVars = { user: hass.user.name, user_agent: navigator.userAgent };\n    let count = 0;\n    for (const cond in conditions) {\n      if (\n        userVars[cond] == conditions[cond] ||\n        (cond == \"user_agent\" && userVars[cond].includes(conditions[cond])) ||\n        (cond == \"media_query\" && window.matchMedia(conditions[cond]).matches)\n      ) {\n        count++;\n      } else {\n        return 0;\n      }\n    }\n    return count;\n  }\n}\n\nfunction observers(tabContainer, tabs, urlDisable, header) {\n  const callback = function (mutations) {\n    mutations.forEach(mutation => {\n      if (mutation.target.className == \"edit-mode\") {\n        editMode = true;\n        if (!cchConfig.disable) removeStyles(tabContainer, tabs, header);\n        buttons.options = root.querySelector(\"paper-menu-button\");\n        insertEditMenu(tabs);\n      } else if (mutation.target.nodeName == \"APP-HEADER\") {\n        for (let node of mutation.addedNodes) {\n          if (node.nodeName == \"APP-TOOLBAR\") {\n            editMode = false;\n            buttons = getButtonElements(tabContainer);\n            run();\n            return;\n          }\n        }\n      } else if (mutation.addedNodes.length) {\n        if (mutation.addedNodes[0].nodeName == \"HUI-UNUSED-ENTITIES\") return;\n        let editor = root\n          .querySelector(\"ha-app-layout\")\n          .querySelector(\"editor\");\n        if (editor) root.querySelector(\"ha-app-layout\").removeChild(editor);\n        if (!editMode && !urlDisable && cchConfig.conditional_styles) {\n          conditionalStyling(tabs, header);\n        }\n      }\n    });\n  };\n  new MutationObserver(callback).observe(view, { childList: true });\n  new MutationObserver(callback).observe(root.querySelector(\"app-header\"), {\n    childList: true\n  });\n\n  if (!urlDisable) {\n    window.hassConnection.then(({ conn }) => {\n      conn.socket.onmessage = () => {\n        notifications = notificationCount();\n        if (cchConfig.conditional_styles && !editMode) {\n          conditionalStyling(tabs, header);\n        }\n      };\n    });\n  }\n}\n\nfunction notificationCount() {\n  if (newSidebar) {\n    let badge = main.shadowRoot\n      .querySelector(\"ha-sidebar\")\n      .shadowRoot.querySelector(\"span.notification-badge\");\n    if (!badge) {\n      return 0;\n    } else {\n      return parseInt(badge.innerHTML);\n    }\n  }\n  let i = 0;\n  let drawer = root\n    .querySelector(\"hui-notification-drawer\")\n    .shadowRoot.querySelector(\".notifications\");\n  for (let notification of drawer.querySelectorAll(\".notification\")) {\n    if (notification.style.display !== \"none\") i++;\n  }\n  return i;\n}\n\nfunction getButtonElements(tabContainer) {\n  let buttons = {};\n  buttons.options = root.querySelector(\"paper-menu-button\");\n  if (!editMode) {\n    buttons.menu = root.querySelector(\"ha-menu-button\");\n    buttons.voice = root.querySelector(\"ha-start-voice-button\");\n    if (!newSidebar) {\n      buttons.notifications = root.querySelector(\"hui-notifications-button\");\n    }\n  }\n  if (buttons.menu && newSidebar) {\n    new MutationObserver(() => {\n      if (buttons.menu.style.visibility == \"hidden\") {\n        buttons.menu.style.display = \"none\";\n      } else {\n        buttons.menu.style.display = \"\";\n      }\n      tabContainerMargin(tabContainer);\n    }).observe(buttons.menu, { attributeFilter: [\"style\"] });\n  }\n  return buttons;\n}\n\nfunction tabContainerMargin(tabContainer) {\n  let marginRight = 0;\n  let marginLeft = 15;\n  for (const button in buttons) {\n    let visible = buttons[button].style.display !== \"none\";\n    if (cchConfig[button] == \"show\" && visible) {\n      if (button == \"menu\") marginLeft += 45;\n      else marginRight += 45;\n    } else if (cchConfig[button] == \"clock\" && visible) {\n      const clockWidth =\n        (cchConfig.clock_format == 12 && cchConfig.clock_am_pm) ||\n          cchConfig.clock_date\n          ? 110\n          : 80;\n      if (button == \"menu\") marginLeft += clockWidth + 15;\n      else marginRight += clockWidth;\n    }\n  }\n  if (tabContainer) {\n    tabContainer.style.marginRight = marginRight + \"px\";\n    tabContainer.style.marginLeft = marginLeft + \"px\";\n  }\n}\n\nfunction hideMenuItems() {\n  if (cchConfig.hide_help || cchConfig.hide_config) {\n    let menuItems = buttons.options\n      .querySelector(\"paper-listbox\")\n      .querySelectorAll(\"paper-item\");\n    for (let item of menuItems) {\n      if (item.innerHTML.includes(\"Help\") && cchConfig.hide_help) {\n        item.parentNode.removeChild(item);\n      } else if (\n        item.innerHTML.includes(\"Unused entities\") &&\n        cchConfig.hide_unused\n      ) {\n        item.parentNode.removeChild(item);\n      } else if (\n        item.innerHTML.includes(\"Configure UI\") &&\n        cchConfig.hide_config\n      ) {\n        item.parentNode.removeChild(item);\n      }\n    }\n  }\n}\n\nfunction insertEditMenu(tabs) {\n  if (cchConfig.hide_tabs && buttons.options && editMode) {\n    let show_tabs = document.createElement(\"paper-item\");\n    show_tabs.setAttribute(\"id\", \"show_tabs\");\n    show_tabs.addEventListener(\"click\", () => {\n      for (let i = 0; i < tabs.length; i++) {\n        tabs[i].style.removeProperty(\"display\");\n      }\n    });\n    show_tabs.innerHTML = \"Show all tabs\";\n    insertMenuItem(buttons.options.querySelector(\"paper-listbox\"), show_tabs);\n\n    let cchSettings = document.createElement(\"paper-item\");\n    cchSettings.setAttribute(\"id\", \"cch_settings\");\n    cchSettings.addEventListener(\"click\", () => {\n      showEditor();\n    });\n    cchSettings.innerHTML = \"CCH Settings\";\n    insertMenuItem(buttons.options.querySelector(\"paper-listbox\"), cchSettings);\n  }\n}\n\nfunction removeStyles(tabContainer, tabs, header) {\n  let header_colors = root.querySelector('[id=\"cch_header_colors\"]');\n  if (tabContainer) {\n    tabContainer.style.marginLeft = \"\";\n    tabContainer.style.marginRight = \"\";\n  }\n  header.style.background = null;\n  view.style.minHeight = \"\";\n  view.style.marginTop = \"\";\n  view.style.paddingTop = \"\";\n  view.style.boxSizing = \"\";\n  if (root.querySelector('[id=\"cch_iron_selected\"]')) {\n    root.querySelector('[id=\"cch_iron_selected\"]').outerHTML = \"\";\n  }\n  if (header_colors) header_colors.parentNode.removeChild(header_colors);\n  for (let i = 0; i < tabs.length; i++) {\n    tabs[i].style.color = \"\";\n  }\n}\n\nfunction styleHeader(tabContainer, tabs, header) {\n  if (!cchConfig.header || cchConfig.kiosk_mode) {\n    header.style.display = \"none\";\n    view.style.minHeight = \"100vh\";\n  } else {\n    view.style.minHeight = \"100vh\";\n    view.style.marginTop = \"-48.5px\";\n    view.style.paddingTop = \"0\";\n    view.style.boxSizing = \"border-box\";\n    let cchThemeBg = getComputedStyle(document.body).getPropertyValue(\n      \"--cch-background\"\n    );\n    header.style.background =\n      cchConfig.background || cchThemeBg || \"var(--primary-color)\";\n    if (!tabContainer) {\n      header.querySelector(\"app-toolbar\").style.background =\n        cchConfig.background || cchThemeBg || \"var(--primary-color)\";\n    }\n  }\n\n  if (newSidebar)\n    main.shadowRoot\n      .querySelector(\"ha-sidebar\")\n      .shadowRoot.querySelector(\".menu\").style = \"height:49px;\";\n  let indicator = cchConfig.tab_indicator_color;\n  if (\n    indicator &&\n    !root.querySelector('[id=\"cch_header_colors\"]') &&\n    !editMode\n  ) {\n    let style = document.createElement(\"style\");\n    style.setAttribute(\"id\", \"cch_header_colors\");\n    style.innerHTML = `\n          paper-tabs {\n            ${\n      indicator\n        ? `--paper-tabs-selection-bar-color: ${indicator} !important`\n        : \"var(--cch-tab-indicator-color) !important\"\n      }\n          }\n        `;\n    root.appendChild(style);\n  }\n\n  let conditionalTabs = cchConfig.conditional_styles\n    ? JSON.stringify(cchConfig.conditional_styles).includes(\"tab\")\n    : false;\n  if (\n    !root.querySelector('[id=\"cch_iron_selected\"]') &&\n    !editMode &&\n    !conditionalTabs &&\n    tabContainer\n  ) {\n    let style = document.createElement(\"style\");\n    style.setAttribute(\"id\", \"cch_iron_selected\");\n    style.innerHTML = `\n            .iron-selected {\n              ${\n      cchConfig.active_tab_color\n        ? `color: ${cchConfig.active_tab_color + \" !important\"}`\n        : \"var(--cch-active-tab-color)\"\n      }\n            }\n          `;\n    tabContainer.appendChild(style);\n  }\n  let all_tabs_color = cchConfig.all_tabs_color || \"var(--cch-all-tabs-color)\";\n  if (\n    (cchConfig.tab_color && Object.keys(cchConfig.tab_color).length) ||\n    all_tabs_color\n  ) {\n    for (let i = 0; i < tabs.length; i++) {\n      tabs[i].style.color = cchConfig.tab_color[i] || all_tabs_color;\n    }\n  }\n\n  if (tabContainer) {\n    // Shift the header up to hide unused portion.\n    root.querySelector(\"app-toolbar\").style.marginTop = \"-64px\";\n\n    if (!cchConfig.chevrons) {\n      // Hide chevrons.\n      let chevron = tabContainer.shadowRoot.querySelectorAll(\n        '[icon^=\"paper-tabs:chevron\"]'\n      );\n      chevron[0].style.display = \"none\";\n      chevron[1].style.display = \"none\";\n    } else {\n      // Remove space taken up by \"not-visible\" chevron.\n      let style = document.createElement(\"style\");\n      style.setAttribute(\"id\", \"cch_chevron\");\n      style.innerHTML = `\n            .not-visible {\n              display:none;\n            }\n          `;\n      tabContainer.shadowRoot.appendChild(style);\n    }\n  }\n}\n\nfunction styleButtons(tabs) {\n  let topMargin = tabs.length > 0 ? \"margin-top:111px;\" : \"\";\n  buttons = reverseObject(buttons);\n  for (const button in buttons) {\n    if (!buttons[button]) continue;\n    if (button == \"options\" && cchConfig[button] == \"overflow\") {\n      cchConfig[button] = \"show\";\n    }\n    if (cchConfig[button] == \"show\" || cchConfig[button] == \"clock\") {\n      if (button == \"menu\") {\n        let paperIconButton = buttons[button].querySelector(\"paper-icon-button\")\n          ? buttons[button].querySelector(\"paper-icon-button\")\n          : buttons[button].shadowRoot.querySelector(\"paper-icon-button\");\n        if (!paperIconButton) continue;\n        paperIconButton.style.cssText = `\n          z-index:1;\n          ${topMargin}\n          ${button == \"options\" ? \"margin-right:-5px; padding:0;\" : \"\"}\n        `;\n      } else {\n        buttons[button].style.cssText = `\n              z-index:1;\n              ${topMargin}\n              ${button == \"options\" ? \"margin-right:-5px; padding:0;\" : \"\"}\n            `;\n      }\n    } else if (cchConfig[button] == \"overflow\") {\n      const menu_items = buttons.options.querySelector(\"paper-listbox\");\n      let paperIconButton = buttons[button].querySelector(\"paper-icon-button\")\n        ? buttons[button].querySelector(\"paper-icon-button\")\n        : buttons[button].shadowRoot.querySelector(\"paper-icon-button\");\n      if (paperIconButton.hasAttribute(\"hidden\")) {\n        continue;\n      }\n      const id = `menu_item_${button}`;\n      if (!menu_items.querySelector(`[id=\"${id}\"]`)) {\n        const wrapper = document.createElement(\"paper-item\");\n        wrapper.setAttribute(\"id\", id);\n        wrapper.innerText = getTranslation(button);\n        wrapper.appendChild(buttons[button]);\n        wrapper.addEventListener(\"click\", () => {\n          paperIconButton.click();\n        });\n        paperIconButton.style.pointerEvents = \"none\";\n        insertMenuItem(menu_items, wrapper);\n        if (button == \"notifications\" && !newSidebar) {\n          let style = document.createElement(\"style\");\n          style.innerHTML = `\n                .indicator {\n                  top: 5px;\n                  right: 0px;\n                  width: 10px;\n                  height: 10px;\n                  ${\n            cchConfig.notify_indicator_color\n              ? `background-color:${cchConfig.notify_indicator_color}`\n              : \"\"\n            }\n                }\n                .indicator > div{\n                  display:none;\n                }\n              `;\n          paperIconButton.parentNode.appendChild(style);\n        }\n      }\n    } else if (cchConfig[button] == \"hide\") {\n      buttons[button].style.display = \"none\";\n    }\n    if (newSidebar && (cchConfig.kiosk_mode || cchConfig.disable_sidebar)) {\n      buttons.menu.style.display = \"none\";\n    }\n  }\n\n  // Use color vars set in HA theme.\n  buttons.menu.style.color = \"var(--cch-button-color-menu)\";\n  if (!newSidebar) {\n    buttons.notifications.style.color = \"var(--cch-button-color-notifications)\";\n  }\n  buttons.voice.style.color = \"var(--cch-button-color-voice)\";\n  buttons.options.style.color = \"var(--cch-button-color-options)\";\n  if (cchConfig.all_buttons_color) {\n    root.querySelector(\"app-toolbar\").style.color =\n      cchConfig.all_buttons_color || \"var(--cch-all-buttons-color)\";\n  }\n\n  // Use colors set in CCH config.\n  for (const button in buttons) {\n    if (cchConfig.button_color[button]) {\n      buttons[button].style.color = cchConfig.button_color[button];\n    }\n  }\n\n  if (cchConfig.notify_indicator_color && cchConfig.notifications == \"show\") {\n    let style = document.createElement(\"style\");\n    style.innerHTML = `\n          .indicator {\n            background-color:${cchConfig.notify_indicator_color ||\n      \"var(--cch-notify-indicator-color)\"} !important;\n            color: ${cchConfig.notify_text_color ||\n      \"var(--cch-notify-text-color), var(--primary-text-color)\"};\n          }\n        `;\n    if (!newSidebar) buttons.notifications.shadowRoot.appendChild(style);\n  }\n}\n\nfunction getTranslation(button) {\n  switch (button) {\n    case \"notifications\":\n      return hass.localize(\"ui.notification_drawer.title\");\n    default:\n      return button.charAt(0).toUpperCase() + button.slice(1);\n  }\n}\n\nfunction defaultTab(tabs, tabContainer) {\n  if (cchConfig.default_tab && !defaultTabRedirect && tabContainer) {\n    let default_tab = cchConfig.default_tab;\n    let activeTab = tabs.indexOf(tabContainer.querySelector(\".iron-selected\"));\n    if (\n      activeTab != default_tab &&\n      activeTab == 0 &&\n      !cchConfig.hide_tabs.includes(default_tab)\n    ) {\n      tabs[default_tab].click();\n    }\n    defaultTabRedirect = true;\n  }\n}\n\nfunction sidebarMod() {\n  let menu = buttons.menu.querySelector(\"paper-icon-button\");\n  let sidebar = main.shadowRoot.querySelector(\"app-drawer\");\n\n  if (!newSidebar) {\n    if (!cchConfig.sidebar_swipe || cchConfig.kiosk_mode) {\n      sidebar.removeAttribute(\"swipe-open\");\n    }\n    if ((cchConfig.sidebar_closed || cchConfig.kiosk_mode) && !sidebarClosed) {\n      if (sidebar.hasAttribute(\"opened\")) menu.click();\n      sidebarClosed = true;\n    }\n  } else if (\n    newSidebar &&\n    (cchConfig.disable_sidebar || cchConfig.kiosk_mode)\n  ) {\n    sidebar.style.display = \"none\";\n    sidebar.addEventListener(\n      \"mouseenter\",\n      function (event) {\n        event.stopPropagation();\n      },\n      true\n    );\n    let style = document.createElement(\"style\");\n    style.type = \"text/css\";\n    style.appendChild(\n      document.createTextNode(\n        \":host(:not([expanded])) {width: 0px !important;}\"\n      )\n    );\n    main.shadowRoot.querySelector(\"ha-sidebar\").shadowRoot.appendChild(style);\n\n    style = document.createElement(\"style\");\n    style.type = \"text/css\";\n    style.appendChild(\n      document.createTextNode(\":host {--app-drawer-width: 0px !important;}\")\n    );\n    main.shadowRoot.appendChild(style);\n  }\n}\n\nfunction hideTabs(tabContainer, tabs) {\n  let hidden_tabs = String(cchConfig.hide_tabs).length\n    ? String(cchConfig.hide_tabs)\n      .replace(/\\s+/g, \"\")\n      .split(\",\")\n    : null;\n  let shown_tabs = String(cchConfig.show_tabs).length\n    ? String(cchConfig.show_tabs)\n      .replace(/\\s+/g, \"\")\n      .split(\",\")\n    : null;\n\n  // Set the tab config source.\n  if (!hidden_tabs && shown_tabs) {\n    let all_tabs = [];\n    shown_tabs = buildRanges(shown_tabs);\n    for (let i = 0; i < tabs.length; i++) all_tabs.push(i);\n    // Invert shown_tabs to hidden_tabs.\n    hidden_tabs = all_tabs.filter(el => !shown_tabs.includes(el));\n  } else {\n    hidden_tabs = buildRanges(hidden_tabs);\n  }\n\n  // Hide tabs.\n  for (const tab of hidden_tabs) {\n    if (!tabs[tab]) continue;\n    tabs[tab].style.display = \"none\";\n  }\n\n  if (cchConfig.redirect && tabContainer) {\n    const activeTab = tabContainer.querySelector(\"paper-tab.iron-selected\");\n    const activeTabIndex = tabs.indexOf(activeTab);\n    // Is the current tab hidden and is there at least one tab is visible.\n    if (\n      hidden_tabs.includes(activeTabIndex) &&\n      hidden_tabs.length != tabs.length\n    ) {\n      let i = 0;\n      // Find the first visible tab and navigate.\n      while (hidden_tabs.includes(i)) {\n        i++;\n      }\n      tabs[i].click();\n    }\n  }\n  return hidden_tabs;\n}\n\nfunction insertMenuItem(menu_items, element) {\n  let first_item = menu_items.querySelector(\"paper-item\");\n  if (!menu_items.querySelector(`[id=\"${element.id}\"]`)) {\n    first_item.parentNode.insertBefore(element, first_item);\n  }\n}\n\nfunction insertClock(button) {\n  const clock_button = buttons[button].querySelector(\"paper-icon-button\")\n    ? buttons[button]\n    : buttons[button].shadowRoot;\n  const clockIcon = clock_button.querySelector(\"paper-icon-button\");\n  const clockIronIcon = clockIcon.shadowRoot.querySelector(\"iron-icon\");\n  const clockWidth =\n    (cchConfig.clock_format == 12 && cchConfig.clock_am_pm) ||\n      cchConfig.clock_date\n      ? 110\n      : 80;\n\n  if (\n    !newSidebar &&\n    cchConfig.notifications == \"clock\" &&\n    cchConfig.clock_date &&\n    !buttons.notifications.shadowRoot.querySelector('[id=\"cch_indicator\"]')\n  ) {\n    let style = document.createElement(\"style\");\n    style.setAttribute(\"id\", \"cch_indicator\");\n    style.innerHTML = `\n          .indicator {\n            top: unset;\n            bottom: -3px;\n            right: 0px;\n            width: 90%;\n            height: 3px;\n            border-radius: 0;\n            ${\n      cchConfig.notify_indicator_color\n        ? `background-color:${cchConfig.notify_indicator_color}`\n        : \"\"\n      }\n          }\n          .indicator > div{\n            display:none;\n          }\n        `;\n    buttons.notifications.shadowRoot.appendChild(style);\n  }\n\n  let clockElement = clockIronIcon.parentNode.getElementById(\"cch_clock\");\n  if (cchConfig.menu == \"clock\") {\n    buttons.menu.style.marginTop = \"111px\";\n    buttons.menu.style.zIndex = \"1\";\n  }\n  if (!clockElement) {\n    clockIcon.style.cssText = `\n              margin-right:-5px;\n              width:${clockWidth}px;\n              text-align: center;\n            `;\n    clockElement = document.createElement(\"p\");\n    clockElement.setAttribute(\"id\", \"cch_clock\");\n    let clockAlign = \"center\";\n    let padding = \"\";\n    let fontSize = \"\";\n    if (cchConfig.clock_date && cchConfig.menu == \"clock\") {\n      clockAlign = \"left\";\n      padding = \"margin-right:-20px\";\n      fontSize = \"font-size:12pt\";\n    } else if (cchConfig.clock_date) {\n      clockAlign = \"right\";\n      padding = \"margin-left:-20px\";\n      fontSize = \"font-size:12pt\";\n    }\n    clockElement.style.cssText = `\n              margin-top: ${cchConfig.clock_date ? \"-4px\" : \"2px\"};\n              text-align: ${clockAlign};\n              ${padding};\n              ${fontSize};\n            `;\n    clockIronIcon.parentNode.insertBefore(clockElement, clockIronIcon);\n    clockIronIcon.style.display = \"none\";\n  }\n\n  const clockFormat = {\n    hour12: cchConfig.clock_format != 24,\n    hour: \"2-digit\",\n    minute: \"2-digit\"\n  };\n  updateClock(clockElement, clockFormat);\n}\n\nfunction updateClock(clock, clockFormat) {\n  let date = new Date();\n  let locale = cchConfig.date_locale || hass.language;\n  let time = date.toLocaleTimeString([], clockFormat);\n  let options = {\n    weekday: \"short\",\n    month: \"2-digit\",\n    day: \"2-digit\"\n  };\n  date = cchConfig.clock_date\n    ? `</br>${date.toLocaleDateString(locale, options)}`\n    : \"\";\n  if (!cchConfig.clock_am_pm && cchConfig.clock_format == 12) {\n    clock.innerHTML = time.slice(0, -3) + date;\n  } else {\n    clock.innerHTML = time + date;\n  }\n  window.setTimeout(() => updateClock(clock, clockFormat), 60000);\n}\n\n// Abandon all hope, ye who enter here.\nfunction conditionalStyling(tabs, header) {\n  let _hass = document.querySelector(\"home-assistant\").hass;\n  const conditional_styles = cchConfig.conditional_styles;\n  let tabContainer = tabs[0] ? tabs[0].parentNode : \"\";\n  let elem, color, bg, hide, onIcon, offIcon, iconElem;\n\n  const styleElements = () => {\n    if (bg && elem == \"background\") header.style.background = bg;\n    else if (color) elem.style.color = color;\n    if (onIcon && iconElem) iconElem.setAttribute(\"icon\", onIcon);\n    if (hide && elem !== \"background\" && !editMode) {\n      elem.style.display = \"none\";\n    }\n  };\n\n  const getElements = (key, elemArray, i, obj, styling) => {\n    elem = elemArray[key];\n    color = styling[i][obj][key].color;\n    onIcon = styling[i][obj][key].on_icon;\n    offIcon = styling[i][obj][key].off_icon;\n    hide = styling[i][obj][key].hide;\n    if (!prevColor[key]) {\n      prevColor[key] = window\n        .getComputedStyle(elem, null)\n        .getPropertyValue(\"color\");\n    }\n  };\n\n  let styling = [];\n  if (Array.isArray(conditional_styles)) {\n    for (let i = 0; i < conditional_styles.length; i++) {\n      styling.push(Object.assign({}, conditional_styles[i]));\n    }\n  } else {\n    styling.push(Object.assign({}, conditional_styles));\n  }\n\n  for (let i = 0; i < styling.length; i++) {\n    let template = styling[i].template;\n    if (template) {\n      if (!template.length) template = [template];\n      template.forEach(template => {\n        templates(template, tabs, _hass, header);\n      });\n    } else {\n      let entity = styling[i].entity;\n      if (_hass.states[entity] == undefined && entity !== \"notifications\") {\n        console.log(`CCH conditional styling: ${entity} does not exist.`);\n        continue;\n      }\n      if (entity == \"notifications\") condState[i] = notifications;\n      else condState[i] = _hass.states[entity].state;\n\n      if (condState[i] !== prevState[i] || !condState.length) {\n        prevState[i] = condState[i];\n        let above = styling[i].condition.above;\n        let below = styling[i].condition.below;\n\n        for (const obj in styling[i]) {\n          let key;\n          if (styling[i][obj]) {\n            key = Object.keys(styling[i][obj])[0];\n          }\n          if (obj == \"background\") {\n            elem = \"background\";\n            color = styling[i][obj].color;\n            bg = styling[i][obj];\n            iconElem = false;\n            if (!prevColor[obj]) {\n              prevColor[obj] = window\n                .getComputedStyle(header, null)\n                .getPropertyValue(\"background\");\n            }\n          } else if (obj == \"button\") {\n            if (newSidebar && key == \"notifications\") continue;\n            getElements(key, buttons, i, obj, styling);\n            if (key == \"menu\") {\n              iconElem = elem\n                .querySelector(\"paper-icon-button\")\n                .shadowRoot.querySelector(\"iron-icon\");\n            } else {\n              iconElem = elem.shadowRoot\n                .querySelector(\"paper-icon-button\")\n                .shadowRoot.querySelector(\"iron-icon\");\n            }\n          } else if (obj == \"tab\") {\n            getElements(key, tabs, i, obj, styling);\n            iconElem = elem.querySelector(\"ha-icon\");\n          }\n\n          if (condState[i] == styling[i].condition.state) {\n            styleElements();\n          } else if (\n            above !== undefined &&\n            below !== undefined &&\n            condState[i] > above &&\n            condState[i] < below\n          ) {\n            styleElements();\n          } else if (\n            above !== undefined &&\n            below == undefined &&\n            condState[i] > above\n          ) {\n            styleElements();\n          } else if (\n            above == undefined &&\n            below !== undefined &&\n            condState[i] < below\n          ) {\n            styleElements();\n          } else {\n            if (elem !== \"background\" && hide && elem.style.display == \"none\") {\n              elem.style.display = \"\";\n            }\n            if (bg && elem == \"background\") {\n              header.style.background = prevColor[obj];\n            } else if (\n              obj !== \"background\" &&\n              obj !== \"entity\" &&\n              obj !== \"condition\"\n            ) {\n              elem.style.color = prevColor[key];\n            }\n            if (onIcon && offIcon) {\n              iconElem.setAttribute(\"icon\", offIcon);\n            }\n          }\n        }\n      }\n    }\n  }\n  tabContainerMargin(tabContainer);\n}\n\nfunction templates(template, tabs, _hass, header) {\n  // Variables for templates.\n  let states = _hass.states;\n  let entity = states;\n\n  const templateEval = template => {\n    try {\n      if (template.includes(\"return\")) {\n        return eval(`(function() {${template}}())`);\n      } else {\n        return eval(template);\n      }\n    } catch (e) {\n      console.log(\"CCH styling template failed.\");\n      console.log(e);\n    }\n  };\n\n  for (const condition in template) {\n    if (condition == \"tab\") {\n      for (const tab in template[condition]) {\n        let tempCond = template[condition][tab];\n        if (!tempCond.length) tempCond = [tempCond];\n        tempCond.forEach(templateObj => {\n          let tabIndex = parseInt(Object.keys(template[condition]));\n          let styleTarget = Object.keys(templateObj);\n          let tabTemplate = templateObj[styleTarget];\n          let tabElement = tabs[tabIndex];\n          if (styleTarget == \"icon\") {\n            tabElement\n              .querySelector(\"ha-icon\")\n              .setAttribute(\"icon\", templateEval(tabTemplate, entity));\n          } else if (styleTarget == \"color\") {\n            tabElement.style.color = templateEval(tabTemplate, entity);\n          } else if (styleTarget == \"display\") {\n            templateEval(tabTemplate, entity) == \"show\"\n              ? (tabElement.style.display = \"\")\n              : (tabElement.style.display = \"none\");\n          }\n        });\n      }\n    } else if (condition == \"button\") {\n      for (const button in template[condition]) {\n        let tempCond = template[condition][button];\n        if (!tempCond.length) tempCond = [tempCond];\n        tempCond.forEach(templateObj => {\n          let buttonName = Object.keys(template[condition]);\n          if (newSidebar && buttonName == \"notifications\") return;\n          let styleTarget = Object.keys(templateObj);\n          let buttonElem = buttons[buttonName];\n          let tempCond = templateObj[styleTarget];\n          let iconTarget = buttonElem.querySelector(\"paper-icon-button\")\n            ? buttonElem.querySelector(\"paper-icon-button\")\n            : buttonElem.shadowRoot.querySelector(\"paper-icon-button\");\n          if (styleTarget == \"icon\") {\n            iconTarget.setAttribute(\"icon\", templateEval(tempCond, entity));\n          } else if (styleTarget == \"color\") {\n            iconTarget.shadowRoot.querySelector(\n              \"iron-icon\"\n            ).style.color = templateEval(tempCond, entity);\n          } else if (styleTarget == \"display\") {\n            templateEval(tempCond, entity) == \"show\"\n              ? (buttonElem.style.display = \"\")\n              : (buttonElem.style.display = \"none\");\n          }\n        });\n      }\n    } else if (condition == \"background\") {\n      header.style.background = templateEval(template[condition], entity);\n    }\n  }\n}\n\n// Get range (e.g., \"5 to 9\") and build (5,6,7,8,9).\nfunction buildRanges(array) {\n  if (!array) array = [];\n  const sortNumber = (a, b) => a - b;\n  const range = (start, end) =>\n    new Array(end - start + 1).fill(undefined).map((_, i) => i + start);\n\n  for (let i = 0; i < array.length; i++) {\n    if (array[i].length > 1 && array[i].includes(\"to\")) {\n      let split = array[i].split(\"to\");\n      array.splice(i, 1);\n      array = array.concat(range(parseInt(split[0]), parseInt(split[1])));\n    }\n  }\n  for (let i = 0; i < array.length; i++) array[i] = parseInt(array[i]);\n  return array.sort(sortNumber);\n}\n\nfunction showEditor() {\n  window.scrollTo(0, 0);\n  import(\"./compact-custom-header-editor.js?v=1.3.0\").then(() => {\n    document.createElement(\"compact-custom-header-editor\");\n  });\n  if (!root.querySelector(\"ha-app-layout\").querySelector(\"editor\")) {\n    const container = document.createElement(\"editor\");\n    const nest = document.createElement(\"div\");\n    const loader = document.createElement(\"div\");\n    loader.classList.add(\"lds-ring\");\n    loader.innerHTML = \"<div></div><div></div><div></div><div></div>\";\n    const cchEditor = document.createElement(\"compact-custom-header-editor\");\n    nest.style.cssText = `\n      padding: 20px;\n      max-width: 600px;\n      margin: 15px auto;\n      background: var(--paper-card-background-color);\n      border: 6px solid var(--paper-card-background-color);\n    `;\n    container.style.cssText = `\n      width: 100%;\n      min-height: 100%;\n      box-sizing: border-box;\n      position: absolute;\n      background: var(--background-color, grey);\n      z-index: 2;\n      padding: 5px;\n    `;\n    nest.innerHTML += `\n      <style>\n      .lds-ring {\n        left: 50%;\n        margin-left: -32px;\n        display: inline-block;\n        position: relative;\n        width: 64px;\n        height: 64px;\n      }\n      .lds-ring div {\n        box-sizing: border-box;\n        display: block;\n        position: absolute;\n        width: 51px;\n        height: 51px;\n        margin: 6px;\n        border: 6px solid #fff;\n        border-radius: 50%;\n        animation: lds-ring 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n        border-color: var(--primary-color) transparent transparent transparent;\n      }\n      .lds-ring div:nth-child(1) {\n        animation-delay: -0.45s;\n      }\n      .lds-ring div:nth-child(2) {\n        animation-delay: -0.3s;\n      }\n      .lds-ring div:nth-child(3) {\n        animation-delay: -0.15s;\n      }\n      @keyframes lds-ring {\n        0% {\n          transform: rotate(0deg);\n        }\n        100% {\n          transform: rotate(360deg);\n        }\n      }\n      </style>\n      `;\n    root.querySelector(\"ha-app-layout\").insertBefore(container, view);\n    container.appendChild(nest);\n    nest.appendChild(loader);\n    nest.appendChild(cchEditor);\n  }\n}\n\nfunction reverseObject(object) {\n  let newObject = {};\n  let keys = [];\n  for (let key in object) keys.push(key);\n  for (let i = keys.length - 1; i >= 0; i--) {\n    let value = object[keys[i]];\n    newObject[keys[i]] = value;\n  }\n  return newObject;\n}\n\nfunction swipeNavigation(tabs, tabContainer) {\n  // To make it easier to update lovelace-swipe-navigation\n  // keep this as close to the standalone lovelace addon as possible.\n  let swipe_amount = cchConfig.swipe_amount || 15;\n  let animate = cchConfig.swipe_animate || \"none\";\n  let skip_tabs = cchConfig.swipe_skip\n    ? buildRanges(cchConfig.swipe_skip.split(\",\"))\n    : [];\n  let wrap = cchConfig.swipe_wrap != undefined ? cchConfig.swipe_wrap : true;\n  let prevent_default =\n    cchConfig.swipe_prevent_default != undefined\n      ? cchConfig.swipe_prevent_default\n      : false;\n\n  swipe_amount /= Math.pow(10, 2);\n  const appLayout = root.querySelector(\"ha-app-layout\");\n  let xDown, yDown, xDiff, yDiff, activeTab, firstTab, lastTab, left;\n\n  appLayout.addEventListener(\"touchstart\", handleTouchStart, { passive: true });\n  appLayout.addEventListener(\"touchmove\", handleTouchMove, { passive: false });\n  appLayout.addEventListener(\"touchend\", handleTouchEnd, { passive: true });\n\n  function handleTouchStart(event) {\n    let ignored = [\"APP-HEADER\", \"HA-SLIDER\", \"SWIPE-CARD\", \"HUI-MAP-CARD\"];\n    let path = (event.composedPath && event.composedPath()) || event.path;\n    if (path) {\n      for (let element of path) {\n        if (element.nodeName == \"HUI-VIEW\") break;\n        else if (ignored.indexOf(element.nodeName) > -1) return;\n      }\n    }\n    xDown = event.touches[0].clientX;\n    yDown = event.touches[0].clientY;\n    if (!lastTab) filterTabs();\n    activeTab = tabs.indexOf(tabContainer.querySelector(\".iron-selected\"));\n  }\n\n  function handleTouchMove(event) {\n    if (xDown && yDown) {\n      xDiff = xDown - event.touches[0].clientX;\n      yDiff = yDown - event.touches[0].clientY;\n      if (Math.abs(xDiff) > Math.abs(yDiff) && prevent_default) {\n        event.preventDefault();\n      }\n    }\n  }\n\n  function handleTouchEnd() {\n    if (activeTab < 0 || Math.abs(xDiff) < Math.abs(yDiff)) {\n      xDown = yDown = xDiff = yDiff = null;\n      return;\n    }\n    if (xDiff > Math.abs(screen.width * swipe_amount)) {\n      left = false;\n      activeTab == tabs.length - 1 ? click(firstTab) : click(activeTab + 1);\n    } else if (xDiff < -Math.abs(screen.width * swipe_amount)) {\n      left = true;\n      activeTab == 0 ? click(lastTab) : click(activeTab - 1);\n    }\n    xDown = yDown = xDiff = yDiff = null;\n  }\n\n  function filterTabs() {\n    tabs = tabs.filter(element => {\n      return (\n        !skip_tabs.includes(tabs.indexOf(element)) &&\n        getComputedStyle(element, null).display != \"none\"\n      );\n    });\n    firstTab = wrap ? 0 : null;\n    lastTab = wrap ? tabs.length - 1 : null;\n  }\n\n  function click(index) {\n    if (\n      (activeTab == 0 && !wrap && left) ||\n      (activeTab == tabs.length - 1 && !wrap && !left)\n    ) {\n      return;\n    }\n    if (animate == \"swipe\") {\n      let _in = left ? `${screen.width / 1.5}px` : `-${screen.width / 1.5}px`;\n      let _out = left ? `-${screen.width / 1.5}px` : `${screen.width / 1.5}px`;\n      view.style.transitionDuration = \"200ms\";\n      view.style.opacity = 0;\n      view.style.transform = `translateX(${_in})`;\n      view.style.transition = \"transform 0.20s, opacity 0.20s\";\n      setTimeout(function () {\n        tabs[index].dispatchEvent(\n          new MouseEvent(\"click\", { bubbles: false, cancelable: true })\n        );\n        view.style.transitionDuration = \"0ms\";\n        view.style.transform = `translateX(${_out})`;\n        view.style.transition = \"transform 0s\";\n      }, 210);\n      setTimeout(function () {\n        view.style.transitionDuration = \"200ms\";\n        view.style.opacity = 1;\n        view.style.transform = `translateX(0px)`;\n        view.style.transition = \"transform 0.20s, opacity 0.20s\";\n      }, 215);\n    } else if (animate == \"fade\") {\n      view.style.transitionDuration = \"200ms\";\n      view.style.transition = \"opacity 0.20s\";\n      view.style.opacity = 0;\n      setTimeout(function () {\n        tabs[index].dispatchEvent(\n          new MouseEvent(\"click\", { bubbles: false, cancelable: true })\n        );\n        view.style.transitionDuration = \"0ms\";\n        view.style.opacity = 0;\n        view.style.transition = \"opacity 0s\";\n      }, 210);\n      setTimeout(function () {\n        view.style.transitionDuration = \"200ms\";\n        view.style.transition = \"opacity 0.20s\";\n        view.style.opacity = 1;\n      }, 250);\n    } else if (animate == \"flip\") {\n      view.style.transitionDuration = \"200ms\";\n      view.style.transform = \"rotatey(90deg)\";\n      view.style.transition = \"transform 0.20s, opacity 0.20s\";\n      view.style.opacity = 0.25;\n      setTimeout(function () {\n        tabs[index].dispatchEvent(\n          new MouseEvent(\"click\", { bubbles: false, cancelable: true })\n        );\n      }, 210);\n      setTimeout(function () {\n        view.style.transitionDuration = \"200ms\";\n        view.style.transform = \"rotatey(0deg)\";\n        view.style.transition = \"transform 0.20s, opacity 0.20s\";\n        view.style.opacity = 1;\n      }, 250);\n    } else {\n      tabs[index].dispatchEvent(\n        new MouseEvent(\"click\", { bubbles: false, cancelable: true })\n      );\n    }\n  }\n}\n\nfunction breakingChangeNotification() {\n  if (\n    lovelace.config.cch == undefined &&\n    JSON.stringify(lovelace.config.views).includes(\n      \"custom:compact-custom-header\"\n    )\n  ) {\n    hass.callService(\"persistent_notification\", \"create\", {\n      title: \"CCH Breaking Change\",\n      notification_id: \"CCH_Breaking_Change\",\n      message:\n        \"Compact-Custom-Header's configuration method has changed. You are \" +\n        \"receiving this notification because you have updated CCH, but are \" +\n        \"using the old config method. Please, visit the [upgrade guide]\" +\n        \"(https://maykar.github.io/compact-custom-header/1_1_0_upgrade/) \" +\n        \"for more info.\"\n    });\n  }\n}\n"
  },
  {
    "path": "home-assistant/www/custom-lovelace/courtain/card.js",
    "content": "import { LitElement, html } from 'https://unpkg.com/@polymer/lit-element@0.6.5/lit-element.js?module';\n\nconst styles = html`\n  <style>\n    :host {\n      display: flex;\n      flex: 1;\n      flex-direction: column;\n    }\n    ha-card {\n      flex-direction: column;\n      flex: 1;\n      position: relative;\n      padding: 0px;\n      border-radius: 4px;\n      overflow: hidden;\n    }\n\n    .preview {\n      display: flex;\n      flex-direction: row;\n      background: #ef7f02; /* fallback for old browsers */\n      background: -webkit-linear-gradient(to bottom, #ef7f02, #cc6d02); /* Chrome 10-25, Safari 5.1-6 */\n      background: linear-gradient(to bottom, #ef7f02, #cc6d02); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */\n      overflow: hidden;\n      position: relative;\n      min-height: 365px;\n    }\n\n    .preview .toolbar {\n      width: 164px;\n    }\n\n    .preview .knob {\n      background: #fff;\n      position: absolute;\n      right: 55px;\n      top: 100px;\n      border-radius: 35px;\n      width: 50px;\n      overflow: hidden;\n      height: 196px;\n    }\n\n    .preview .knob .knob-button {\n      display: block;\n      height: 98px;\n      width: 50px;\n    }\n\n    .preview .knob .knob-button ha-icon {\n      width: 50px;\n      height: 98px;\n      color: #030303;\n    }\n\n    .preview .knob .knob-button:active {\n      background: rgba(0, 0, 0, 0.06);\n    }\n\n    .courtain-container {\n      position: relative;\n    }\n\n    .courtain-preview {\n      flex: 1;\n      border-right: 1px solid rgba(255, 255, 255, 0.1);\n    }\n\n    .courtain-engine {\n      background: #fffdfa;\n      width: 100%;\n      height: 40px;\n      z-index: 10;\n      position: absolute;\n      top: 0px;\n    }\n\n    .courtain-slate {\n      background: #fffdfa;\n      opacity: 0.9;\n      width: 100%;\n      height: 20px;\n      position: absolute;\n    }\n\n    .courtain-fabric {\n      background: #ffab51;\n      width: 100%;\n      height: 365px;\n      opacity: 0.5;\n      position: relative;\n      transition: all 0.2s linear;\n    }\n\n    .presets-container {\n      position: absolute;\n      right: 10px;\n      top: 10px;\n    }\n  </style>\n`\n\nclass CourtainCard extends LitElement {\n  static get properties() {\n    return {\n      hass: Object,\n      config: Object,\n      stepBy: Object,\n      targetHeight: Object\n    }\n  }\n\n  get entity() {\n    return this.hass.states[this.config.entity]\n  }\n\n  get alpha() {\n    return (this.targetHeight - this.minHeight) / (this.maxHeight - this.minHeight)\n  }\n\n  get maxHeight() {\n    return this.config.height.max\n  }\n\n  get minHeight() {\n    return this.config.height.min\n  }\n\n  handleMore() {\n    const e = new Event('hass-more-info', { bubbles: true, composed: true })\n    e.detail = { entityId: this.entity.entity_id }\n    this.dispatchEvent(e);\n  }\n\n  callService(service, options = {}) {\n    this.hass.callService('cover', service, {\n      entity_id: this.config.entity,\n      ...options\n    });\n  }\n\n  handlePreset(e) {\n    const height = parseInt(e.target.getAttribute('value'))\n    this.targetHeight = height\n    this.updateHeight()\n  }\n\n  renderPresets() {\n    const presets = this.config.presets\n    const selected = presets.find(({ target }) => target == this.targetHeight)\n    const preset = selected ? selected.label : 'Custom'\n\n    return html`\n      <paper-menu-button class='preset-menu' slot='dropdown-trigger'\n        .horizontalAlign=${'right'} .verticalAlign=${'top'}\n        .verticalOffset=${40} .noAnimations=${true}\n        @click='${(e) => e.stopPropagation()}'>\n        <paper-button class='preset-menu__button' slot='dropdown-trigger'>\n          <span class='preset-menu__preset' show=${true}>\n            ${preset}\n          </span>\n          <ha-icon icon=\"mdi:unfold-more-horizontal\"></ha-icon>\n        </paper-button>\n        <paper-listbox slot='dropdown-content' selected=${preset}\n          @click='${(e) => this.handlePreset(e)}'>\n          ${presets.map(item => html`<paper-item value=${item.target}>${item.label}</paper-item>`)}\n        </paper-listbox>\n      </paper-menu-button>`;\n  }\n\n  tick() {\n    this.targetHeight += this.stepBy\n    if (this.targetHeight > this.maxHeight) {\n      this.targetHeight = this.maxHeight\n    } else if (this.targetHeight < this.minHeight) {\n      this.targetHeight = this.minHeight\n    } else {\n      this.updateHeight()\n      this.tickTimer = setTimeout(() => this.tick(), 100)\n    }\n  }\n\n  updateHeight() {\n    this.callService('set_cover_position', { position: Math.round(this.alpha * 100) })\n  }\n\n  incPressed(e) {\n    this.stepBy = 1\n    this.tick()\n  }\n\n  decPressed(e) {\n    this.stepBy = -1\n    this.tick()\n  }\n\n  cancelPress(e) {\n    this.stepBy = 0\n    if (this.tickTimer) {\n      clearTimeout(this.tickTimer)\n      this.tickTimer = null\n    }\n  }\n\n  calculateOffset(maxValue) {\n    return Math.round(maxValue * (1.0 - this.alpha))\n  }\n\n  render() {\n    return html`\n      ${styles}\n      <ha-card>\n        <div class=\"preview\">\n          <div class=\"courtain-preview\">\n            <div class=\"courtain-container\">\n              <div class=\"courtain-fabric\" style=\"transform: translateY(0px)\">\n                <div class=\"courtain-slate\" style=\"top: 20px;\"></div>\n                <div class=\"courtain-slate\" style=\"top: 60px;\"></div>\n                <div class=\"courtain-slate\" style=\"top: 100px;\"></div>\n                <div class=\"courtain-slate\" style=\"top: 140px;\"></div>\n                <div class=\"courtain-slate\" style=\"top: 180px;\"></div>\n                <div class=\"courtain-slate\" style=\"top: 220px;\"></div>\n                <div class=\"courtain-slate\" style=\"top: 260px;\"></div>\n                <div class=\"courtain-slate\" style=\"top: 300px;\"></div>\n                <div class=\"courtain-slate\" style=\"top: 340px;\"></div>\n              </div>\n              <div class=\"courtain-engine\"></div>\n            </div>\n          </div>\n\n          <div class=\"toolbar\">\n            <div class=\"knob\">\n              <div class=\"knob-button\" \n                  @touchstart='${() => this.incPressed()}' \n                  @mousedown='${() => this.incPressed()}' \n                  @touchend='${() => this.cancelPress()}'\n                  @mouseup='${() => this.cancelPress()}'>\n                <ha-icon icon=\"mdi:chevron-up\"></ha-icon>\n              </div>\n\n              <div class=\"knob-button\" \n                  @touchstart='${() => this.decPressed()}' \n                  @mousedown='${() => this.decPressed()}' \n                  @touchend='${() => this.cancelPress()}'\n                  @mouseup='${() => this.cancelPress()}'>\n                <ha-icon icon=\"mdi:chevron-down\"></ha-icon>\n              </div>\n            </div>\n\n            <div class=\"presets-container\">\n              ${this.renderPresets()}\n\n              <paper-icon-button icon=\"hass:dots-vertical\" @click='${() => this.handleMore()}' />\n            </div>\n          </div>\n        </div>\n      </ha-card>\n    `\n  }\n\n  setConfig(config) {\n    this.config = config;\n    this.targetHeight = config.height.min\n  }\n\n  getCardSize() {\n    return 2;\n  }\n}\n\ncustomElements.define('courtain-card', CourtainCard);"
  },
  {
    "path": "home-assistant/www/custom-lovelace/light-card.js",
    "content": "class LightCard extends HTMLElement {\n\n  constructor() {\n    super();\n    this.attachShadow({ mode: 'open' });\n    this.delay;\n  }\n\n  setConfig(config) {\n    if (!config.entity) {\n      throw new Error('You need to define an entity');\n    }\n    const root = this.shadowRoot;\n    if (root.lastChild) root.removeChild(root.lastChild);\n    const card = document.createElement('ha-card');\n    const content = document.createElement('paper-button');\n    card.appendChild(content);\n    const bulbIcon = document.createElement('ha-icon');\n\n    bulbIcon.style.display = 'block';\n    bulbIcon.style.margin = 'auto';\n    const cardConfig = Object.assign({}, config);\n    bulbIcon.style.width = `${cardConfig.size ? cardConfig.size : \"40%\"}`;\n    bulbIcon.style.height = `${cardConfig.size ? cardConfig.size : \"40%\"}`;\n    if (!cardConfig.bulb_icon){\n      cardConfig.bulb_icon = 'mdi:lightbulb';\n    }\n    bulbIcon.icon = cardConfig.bulb_icon;\n    content.addEventListener('click', event => {\n      this._fire('hass-more-info', { entityId: cardConfig.entity });\n    });\n    content.appendChild(bulbIcon);\n    root.appendChild(card);\n    this._config = cardConfig;\n\n  }\n\n\n  set hass(hass) {\n\n    const entityId = this._config.entity;\n    const state = hass.states[entityId];\n    if (!state) {\n      return\n    }\n    const stateStr = state ? state.state : 'unavailable';\n    if (state.attributes.rgb_color) {\n      this.shadowRoot.children[0].children[0].children[0].style.color = `rgb(${state.attributes.rgb_color.join(',')})`;\n    } else if (state.state === 'on') {\n      this.shadowRoot.children[0].children[0].children[0].style.color = `rgb(255, 218, 109)`;\n    }\n    if (state.state === 'off') {\n      this.shadowRoot.children[0].children[0].children[0].style.color = \"var(--disabled-text-color)\";\n    }\n  }\n\n  _fire(type, detail, options) {\n    const node = this.shadowRoot;\n    options = options || {};\n    detail = (detail === null || detail === undefined) ? {} : detail;\n    const event = new Event(type, {\n      bubbles: options.bubbles === undefined ? true : options.bubbles,\n      cancelable: Boolean(options.cancelable),\n      composed: options.composed === undefined ? true : options.composed\n    });\n    event.detail = detail;\n    node.dispatchEvent(event);\n    return event;\n  }\n\n\n  getCardSize() {\n    return 3;\n  }\n}\n\ncustomElements.define('light-card', LightCard);\n"
  },
  {
    "path": "home-assistant/www/custom-lovelace/linak-desk/card.js",
    "content": "import { LitElement, html } from 'https://unpkg.com/@polymer/lit-element@0.6.5/lit-element.js?module';\n\nconst styles = html`\n  <style>\n    :host {\n      display: flex;\n      flex: 1;\n      flex-direction: column;\n    }\n    ha-card {\n      flex-direction: column;\n      flex: 1;\n      position: relative;\n      padding: 0px;\n      border-radius: 4px;\n      overflow: hidden;\n    }\n\n    .preview {\n      background: #77a9d1; /* fallback for old browsers */\n      background: -webkit-linear-gradient(to bottom, #77a9d1, #528cbb); /* Chrome 10-25, Safari 5.1-6 */\n      background: linear-gradient(to bottom, #77a9d1, #528cbb); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */\n      overflow: hidden;\n      position: relative;\n      min-height: 365px;\n    }\n\n    .preview img {\n      position: absolute;\n      bottom: 0px;\n      transition: all 0.2s linear;\n    }\n\n    .preview .knob {\n      background: #fff;\n      position: absolute;\n      right: 25px;\n      top: 86px;\n      border-radius: 35px;\n      width: 50px;\n      overflow: hidden;\n      height: 196px;\n    }\n\n    .preview .knob .knob-button {\n      display: block;\n      height: 98px;\n      width: 50px;\n    }\n\n    .preview .knob .knob-button ha-icon {\n      width: 50px;\n      height: 98px;\n      color: #030303;\n    }\n\n    .preview .knob .knob-button:active {\n      background: rgba(0, 0, 0, 0.06);\n    }\n\n    .height {\n      position: absolute;\n      left: 30px;\n      top: 60px;\n      font-size: 32px;\n      font-weight: bold;\n      transition: all 0.2s linear;\n    }\n\n    .height span {\n      opacity: 0.6;\n    }\n\n    .presets-container {\n      position: absolute;\n      right: 10px;\n      top: 10px;\n    }\n  </style>\n`\n\nclass LinakDeskCard extends LitElement {\n  static get properties() {\n    return {\n      hass: Object,\n      config: Object,\n      stepBy: Object,\n      targetHeight: Object\n    }\n  }\n\n  get entity() {\n    return this.hass.states[this.config.entity]\n  }\n\n  get alpha() {\n    return (this.targetHeight - this.minHeight) / (this.maxHeight - this.minHeight)\n  }\n\n  get maxHeight() {\n    return this.config.height.max\n  }\n\n  get minHeight() {\n    return this.config.height.min\n  }\n\n  handleMore() {\n    const e = new Event('hass-more-info', { bubbles: true, composed: true })\n    e.detail = { entityId: this.entity.entity_id }\n    this.dispatchEvent(e);\n  }\n\n  callService(service, options = {}) {\n    this.hass.callService('cover', service, {\n      entity_id: this.config.entity,\n      ...options\n    });\n  }\n\n  handlePreset(e) {\n    const height = parseInt(e.target.getAttribute('value'))\n    this.targetHeight = height\n    this.updateHeight()\n  }\n\n  renderPresets() {\n    const presets = this.config.presets\n    const selected = presets.find(({ target }) => target == this.targetHeight)\n    const preset = selected ? selected.label : 'Custom'\n\n    return html`\n      <paper-menu-button class='preset-menu' slot='dropdown-trigger'\n        .horizontalAlign=${'right'} .verticalAlign=${'top'}\n        .verticalOffset=${40} .noAnimations=${true}\n        @click='${(e) => e.stopPropagation()}'>\n        <paper-button class='preset-menu__button' slot='dropdown-trigger'>\n          <span class='preset-menu__preset' show=${true}>\n            ${preset}\n          </span>\n          <ha-icon icon=\"mdi:unfold-more-horizontal\"></ha-icon>\n        </paper-button>\n        <paper-listbox slot='dropdown-content' selected=${preset}\n          @click='${(e) => this.handlePreset(e)}'>\n          ${presets.map(item => html`<paper-item value=${item.target}>${item.label}</paper-item>`)}\n        </paper-listbox>\n      </paper-menu-button>`;\n  }\n\n  tick() {\n    this.targetHeight += this.stepBy\n    if (this.targetHeight > this.maxHeight) {\n      this.targetHeight = this.maxHeight\n    } else if (this.targetHeight < this.minHeight) {\n      this.targetHeight = this.minHeight\n    } else {\n      this.tickTimer = setTimeout(() => this.tick(), 100)\n    }\n  }\n\n  updateHeight() {\n    this.callService('set_cover_position', { position: Math.round(this.alpha * 100) })\n  }\n\n  incPressed(e) {\n    this.stepBy = 1\n    this.tick()\n  }\n\n  decPressed(e) {\n    this.stepBy = -1\n    this.tick()\n  }\n\n  cancelPress(e) {\n    this.updateHeight()\n    this.stepBy = 0\n    if (this.tickTimer) {\n      clearTimeout(this.tickTimer)\n      this.tickTimer = null\n    }\n  }\n\n  calculateOffset(maxValue) {\n    return Math.round(maxValue * (1.0 - this.alpha))\n  }\n\n  render() {\n    return html`\n      ${styles}\n      <ha-card>\n        <div class=\"preview\">\n          <img src=\"/local/custom-lovelace/linak-desk/table_top.png\" style=\"transform: translateY(${this.calculateOffset(90)}px);\" />\n          <img src=\"/local/custom-lovelace/linak-desk/table_middle.png\" style=\"transform: translateY(${this.calculateOffset(60)}px);\" />\n          <img src=\"/local/custom-lovelace/linak-desk/table_bottom.png\" />\n\n          <div class=\"height\" style=\"transform: translateY(${this.calculateOffset(90)}px);\">\n            ${this.targetHeight}\n            <span>cm</span>\n          </div>\n\n          <div class=\"knob\">\n            <div class=\"knob-button\" \n                 @touchstart='${() => this.incPressed()}' \n                 @mousedown='${() => this.incPressed()}' \n                 @touchend='${() => this.cancelPress()}'\n                 @mouseup='${() => this.cancelPress()}'>\n              <ha-icon icon=\"mdi:chevron-up\"></ha-icon>\n            </div>\n\n            <div class=\"knob-button\" \n                 @touchstart='${() => this.decPressed()}' \n                 @mousedown='${() => this.decPressed()}' \n                 @touchend='${() => this.cancelPress()}'\n                 @mouseup='${() => this.cancelPress()}'>\n              <ha-icon icon=\"mdi:chevron-down\"></ha-icon>\n            </div>\n          </div>\n\n          <div class=\"presets-container\">\n            ${this.renderPresets()}\n\n            <paper-icon-button icon=\"hass:dots-vertical\" @click='${() => this.handleMore()}' />\n          </div>\n        </div>\n      </ha-card>\n    `\n  }\n\n  setConfig(config) {\n    this.config = config;\n    this.targetHeight = config.height.min\n  }\n\n  getCardSize() {\n    return 2;\n  }\n}\n\ncustomElements.define('linak-desk', LinakDeskCard);"
  },
  {
    "path": "home-assistant/www/custom-lovelace/qr-card/card.js",
    "content": "import { LitElement, html } from 'https://unpkg.com/@polymer/lit-element@0.6.5/lit-element.js?module';\n\nconst styles = html`\n  <style>\n    :host {\n      display: flex;\n      flex: 1;\n      flex-direction: column;\n    }\n    ha-card {\n      background-color: #36455f;\n      flex-direction: column;\n      flex: 1;\n      position: relative;\n      padding: 0px;\n      border-radius: 2px;\n      overflow: hidden;\n    }\n\n    ha-card img {\n      width: 100%;\n      image-rendering: crisp-edges;\n    }\n  </style>\n`\n\nclass QRCard extends LitElement {\n  static get properties() {\n    return {\n      hass: Object,\n      config: Object,\n      src: {\n        type: String,\n        notify: true,\n        reflectToAttribute: true,\n      },\n    }\n  }\n\n  render() {\n    const { code } = this.config\n    QRCode.toDataURL(code, { errorCorrectionLevel: 'H' } , (err, url) => {\n      this.src = url\n    })\n\n    return html`\n      ${styles}\n      <ha-card>\n        <img src=\"${this.src}\" />\n      </ha-card>\n    `\n  }\n\n  setConfig(config) {\n    this.config = config;\n  }\n\n  getCardSize() {\n    return 1;\n  }\n}\n\ncustomElements.define('qr-card', QRCard);\n"
  },
  {
    "path": "home-assistant/www/custom-lovelace/qr-card/qrcode.js",
    "content": "var webpack=function(t){var e={};function r(n){if(e[n])return e[n].exports;var o=e[n]={i:n,l:!1,exports:{}};return t[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,\"a\",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p=\"\",r(r.s=9)}([function(t,e){var r,n=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];e.getSymbolSize=function(t){if(!t)throw new Error('\"version\" cannot be null or undefined');if(t<1||t>40)throw new Error('\"version\" should be in range from 1 to 40');return 4*t+17},e.getSymbolTotalCodewords=function(t){return n[t]},e.getBCHDigit=function(t){for(var e=0;0!==t;)e++,t>>>=1;return e},e.setToSJISFunction=function(t){if(\"function\"!=typeof t)throw new Error('\"toSJISFunc\" is not a valid function.');r=t},e.isKanjiModeEnabled=function(){return void 0!==r},e.toSJIS=function(t){return r(t)}},function(t,e,r){var n=r(6),o=r(7);e.NUMERIC={id:\"Numeric\",bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:\"Alphanumeric\",bit:2,ccBits:[9,11,13]},e.BYTE={id:\"Byte\",bit:4,ccBits:[8,16,16]},e.KANJI={id:\"Kanji\",bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(t,e){if(!t.ccBits)throw new Error(\"Invalid mode: \"+t);if(!n.isValid(e))throw new Error(\"Invalid version: \"+e);return e>=1&&e<10?t.ccBits[0]:e<27?t.ccBits[1]:t.ccBits[2]},e.getBestModeForData=function(t){return o.testNumeric(t)?e.NUMERIC:o.testAlphanumeric(t)?e.ALPHANUMERIC:o.testKanji(t)?e.KANJI:e.BYTE},e.toString=function(t){if(t&&t.id)return t.id;throw new Error(\"Invalid mode\")},e.isValid=function(t){return t&&t.bit&&t.ccBits},e.from=function(t,r){if(e.isValid(t))return t;try{return function(t){if(\"string\"!=typeof t)throw new Error(\"Param is not a string\");switch(t.toLowerCase()){case\"numeric\":return e.NUMERIC;case\"alphanumeric\":return e.ALPHANUMERIC;case\"kanji\":return e.KANJI;case\"byte\":return e.BYTE;default:throw new Error(\"Unknown mode: \"+t)}}(t)}catch(t){return r}}},function(t,e,r){\"use strict\";var n=r(3),o=2147483647;function i(t,e,r){return\"number\"==typeof t?s(t):function(t,e,r){if(\"number\"==typeof t)throw new TypeError('\"value\" argument must not be a number');if(\"undefined\"!=typeof ArrayBuffer&&t instanceof ArrayBuffer)return function(t,e,r){if(e<0||t.byteLength<e)throw new RangeError(\"'offset' is out of bounds\");if(t.byteLength<e+(r||0))throw new RangeError(\"'length' is out of bounds\");var n;n=void 0===e&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,e):new Uint8Array(t,e,r);return n.__proto__=i.prototype,n}(t,e,r);if(\"string\"==typeof t)return function(t){var e=0|c(t),r=u(e),n=r.write(t);n!==e&&(r=r.slice(0,n));return r}(t);return function(t){if(i.isBuffer(t)){var e=0|a(t.length),r=u(e);return 0===r.length?r:(t.copy(r,0,0,e),r)}if(t){if(\"undefined\"!=typeof ArrayBuffer&&t.buffer instanceof ArrayBuffer||\"length\"in t)return\"number\"!=typeof t.length||(n=t.length)!=n?u(0):f(t);if(\"Buffer\"===t.type&&Array.isArray(t.data))return f(t.data)}var n;throw new TypeError(\"First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.\")}(t)}(t,e,r)}function a(t){if(t>=o)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+o.toString(16)+\" bytes\");return 0|t}function u(t){var e=new Uint8Array(t);return e.__proto__=i.prototype,e}function s(t){return u(t<0?0:0|a(t))}function f(t){for(var e=t.length<0?0:0|a(t.length),r=u(e),n=0;n<e;n+=1)r[n]=255&t[n];return r}function h(t,e){var r;e=e||1/0;for(var n=t.length,o=null,i=[],a=0;a<n;++a){if((r=t.charCodeAt(a))>55295&&r<57344){if(!o){if(r>56319){(e-=3)>-1&&i.push(239,191,189);continue}if(a+1===n){(e-=3)>-1&&i.push(239,191,189);continue}o=r;continue}if(r<56320){(e-=3)>-1&&i.push(239,191,189),o=r;continue}r=65536+(o-55296<<10|r-56320)}else o&&(e-=3)>-1&&i.push(239,191,189);if(o=null,r<128){if((e-=1)<0)break;i.push(r)}else if(r<2048){if((e-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error(\"Invalid code point\");if((e-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function c(t){return i.isBuffer(t)?t.length:\"undefined\"!=typeof ArrayBuffer&&\"function\"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer)?t.byteLength:(\"string\"!=typeof t&&(t=\"\"+t),0===t.length?0:h(t).length)}i.prototype.__proto__=Uint8Array.prototype,i.__proto__=Uint8Array,\"undefined\"!=typeof Symbol&&Symbol.species&&i[Symbol.species]===i&&Object.defineProperty(i,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),i.prototype.write=function(t,e,r){void 0===e?(r=this.length,e=0):void 0===r&&\"string\"==typeof e?(r=this.length,e=0):isFinite(e)&&(e|=0,isFinite(r)?r|=0:r=void 0);var n=this.length-e;if((void 0===r||r>n)&&(r=n),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");return function(t,e,r,n){return function(t,e,r,n){for(var o=0;o<n&&!(o+r>=e.length||o>=t.length);++o)e[o+r]=t[o];return o}(h(e,t.length-r),t,r,n)}(this,t,e,r)},i.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t);var n=this.subarray(t,e);return n.__proto__=i.prototype,n},i.prototype.copy=function(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError(\"targetStart out of bounds\");if(r<0||r>=this.length)throw new RangeError(\"sourceStart out of bounds\");if(n<0)throw new RangeError(\"sourceEnd out of bounds\");n>this.length&&(n=this.length),t.length-e<n-r&&(n=t.length-e+r);var o,i=n-r;if(this===t&&r<e&&e<n)for(o=i-1;o>=0;--o)t[o+e]=this[o+r];else if(i<1e3)for(o=0;o<i;++o)t[o+e]=this[o+r];else Uint8Array.prototype.set.call(t,this.subarray(r,r+i),e);return i},i.prototype.fill=function(t,e,r){if(\"string\"==typeof t){if(\"string\"==typeof e?(e=0,r=this.length):\"string\"==typeof r&&(r=this.length),1===t.length){var n=t.charCodeAt(0);n<256&&(t=n)}}else\"number\"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<r)throw new RangeError(\"Out of range index\");if(r<=e)return this;var o;if(e>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),\"number\"==typeof t)for(o=e;o<r;++o)this[o]=t;else{var a=i.isBuffer(t)?t:new i(t),u=a.length;for(o=0;o<r-e;++o)this[o+e]=a[o%u]}return this},i.concat=function(t,e){if(!n(t))throw new TypeError('\"list\" argument must be an Array of Buffers');if(0===t.length)return u(null);var r;if(void 0===e)for(e=0,r=0;r<t.length;++r)e+=t[r].length;var o=s(e),a=0;for(r=0;r<t.length;++r){var f=t[r];if(!i.isBuffer(f))throw new TypeError('\"list\" argument must be an Array of Buffers');f.copy(o,a),a+=f.length}return o},i.byteLength=c,i.prototype._isBuffer=!0,i.isBuffer=function(t){return!(null==t||!t._isBuffer)},t.exports=i},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return\"[object Array]\"==r.call(t)}},function(t,e){e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2},e.isValid=function(t){return t&&void 0!==t.bit&&t.bit>=0&&t.bit<4},e.from=function(t,r){if(e.isValid(t))return t;try{return function(t){if(\"string\"!=typeof t)throw new Error(\"Param is not a string\");switch(t.toLowerCase()){case\"l\":case\"low\":return e.L;case\"m\":case\"medium\":return e.M;case\"q\":case\"quartile\":return e.Q;case\"h\":case\"high\":return e.H;default:throw new Error(\"Unknown EC Level: \"+t)}}(t)}catch(t){return r}}},function(t,e,r){var n=r(4),o=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],i=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];e.getBlocksCount=function(t,e){switch(e){case n.L:return o[4*(t-1)+0];case n.M:return o[4*(t-1)+1];case n.Q:return o[4*(t-1)+2];case n.H:return o[4*(t-1)+3];default:return}},e.getTotalCodewordsCount=function(t,e){switch(e){case n.L:return i[4*(t-1)+0];case n.M:return i[4*(t-1)+1];case n.Q:return i[4*(t-1)+2];case n.H:return i[4*(t-1)+3];default:return}}},function(t,e,r){var n=r(0),o=r(5),i=r(4),a=r(1),u=r(3),s=n.getBCHDigit(7973);function f(t,e){return a.getCharCountIndicator(t,e)+4}function h(t,e){var r=0;return t.forEach(function(t){var n=f(t.mode,e);r+=n+t.getBitsLength()}),r}e.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40},e.from=function(t,r){return e.isValid(t)?parseInt(t,10):r},e.getCapacity=function(t,r,i){if(!e.isValid(t))throw new Error(\"Invalid QR Code version\");void 0===i&&(i=a.BYTE);var u=8*(n.getSymbolTotalCodewords(t)-o.getTotalCodewordsCount(t,r));if(i===a.MIXED)return u;var s=u-f(i,t);switch(i){case a.NUMERIC:return Math.floor(s/10*3);case a.ALPHANUMERIC:return Math.floor(s/11*2);case a.KANJI:return Math.floor(s/13);case a.BYTE:default:return Math.floor(s/8)}},e.getBestVersionForData=function(t,r){var n,o=i.from(r,i.M);if(u(t)){if(t.length>1)return function(t,r){for(var n=1;n<=40;n++)if(h(t,n)<=e.getCapacity(n,r,a.MIXED))return n}(t,o);if(0===t.length)return 1;n=t[0]}else n=t;return function(t,r,n){for(var o=1;o<=40;o++)if(r<=e.getCapacity(o,n,t))return o}(n.mode,n.getLength(),o)},e.getEncodedBits=function(t){if(!e.isValid(t)||t<7)throw new Error(\"Invalid QR Code version\");for(var r=t<<12;n.getBCHDigit(r)-s>=0;)r^=7973<<n.getBCHDigit(r)-s;return t<<12|r}},function(t,e){var r=\"(?:[　-〿]|[぀-ゟ]|[゠-ヿ]|[＀-￯]|[一-龯]|[★-☆]|[←-↕]|※|[‐―‘’‥…“”∥≠]|[Α-ё]|[§¨±´×÷])+\";e.KANJI=new RegExp(r,\"g\"),e.BYTE_KANJI=new RegExp(\"[^A-Z0-9 $%*+-./:]+\",\"g\"),e.BYTE=new RegExp(\"(?:(?![A-Z0-9 $%*+-./:]|(?:[　-〿]|[぀-ゟ]|[゠-ヿ]|[＀-￯]|[一-龯]|[★-☆]|[←-↕]|※|[‐―‘’‥…“”∥≠]|[Α-ё]|[§¨±´×÷])+).)+\",\"g\"),e.NUMERIC=new RegExp(\"[0-9]+\",\"g\"),e.ALPHANUMERIC=new RegExp(\"[A-Z $%*+-./:]+\",\"g\");var n=new RegExp(\"^\"+r+\"$\"),o=new RegExp(\"^[0-9]+$\"),i=new RegExp(\"^[A-Z0-9 $%*+-./:]+$\");e.testKanji=function(t){return n.test(t)},e.testNumeric=function(t){return o.test(t)},e.testAlphanumeric=function(t){return i.test(t)}},function(t,e){function r(t){if(\"string\"!=typeof t)throw new Error(\"Color should be defined as hex string\");var e=t.slice().replace(\"#\",\"\").split(\"\");if(e.length<3||5===e.length||e.length>8)throw new Error(\"Invalid hex color: \"+t);3!==e.length&&4!==e.length||(e=Array.prototype.concat.apply([],e.map(function(t){return[t,t]}))),6===e.length&&e.push(\"F\",\"F\");var r=parseInt(e.join(\"\"),16);return{r:r>>24&255,g:r>>16&255,b:r>>8&255,a:255&r}}e.getOptions=function(t){t||(t={}),t.color||(t.color={});var e=void 0===t.margin||null===t.margin||t.margin<0?4:t.margin;return{scale:t.scale||4,margin:e,color:{dark:r(t.color.dark||\"#000000ff\"),light:r(t.color.light||\"#ffffffff\")},type:t.type,rendererOpts:t.rendererOpts||{}}},e.qrToImageData=function(t,e,r,n,o){for(var i=e.modules.size,a=e.modules.data,u=r*n,s=i*n+2*u,f=[o.light,o.dark],h=0;h<s;h++)for(var c=0;c<s;c++){var l=4*(h*s+c),g=o.light;if(h>=u&&c>=u&&h<s-u&&c<s-u)g=f[a[Math.floor((h-u)/n)*i+Math.floor((c-u)/n)]];t[l++]=g.r,t[l++]=g.g,t[l++]=g.b,t[l]=g.a}}},function(t,e,r){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0});var n=r(10),o=r.n(n);r.d(e,\"QRCode\",function(){return o.a})},function(t,e,r){var n=r(11),o=r(27),i=r(28);function a(t,e,r,o,i){var a=arguments.length-1;if(a<2)throw new Error(\"Too few arguments provided\");if(2===a?(i=r,r=e,e=o=void 0):3===a&&(e.getContext&&void 0===i?(i=o,o=void 0):(i=o,o=r,r=e,e=void 0)),\"function\"!=typeof i)throw new Error(\"Callback required as last argument\");try{i(null,t(n.create(r,o),e,o))}catch(t){i(t)}}e.create=n.create,e.toCanvas=a.bind(null,o.render),e.toDataURL=a.bind(null,o.renderToDataURL),e.toString=a.bind(null,function(t,e,r){return i.render(t,r)}),e.qrcodedraw=function(){return{draw:e.toCanvas}}},function(t,e,r){var n=r(2),o=r(0),i=r(4),a=r(12),u=r(13),s=r(14),f=r(15),h=r(16),c=r(5),l=r(17),g=r(6),d=r(20),p=r(1),v=r(21),w=r(3);function y(t,e,r){var n,o,i=t.size,a=d.getEncodedBits(e,r);for(n=0;n<15;n++)o=1==(a>>n&1),n<6?t.set(n,8,o,!0):n<8?t.set(n+1,8,o,!0):t.set(i-15+n,8,o,!0),n<8?t.set(8,i-n-1,o,!0):n<9?t.set(8,15-n-1+1,o,!0):t.set(8,15-n-1,o,!0);t.set(i-8,8,1,!0)}function m(t,e,r){var i=new a;r.forEach(function(e){i.put(e.mode.bit,4),i.put(e.getLength(),p.getCharCountIndicator(e.mode,t)),e.write(i)});var u=8*(o.getSymbolTotalCodewords(t)-c.getTotalCodewordsCount(t,e));for(i.getLengthInBits()+4<=u&&i.put(0,4);i.getLengthInBits()%8!=0;)i.putBit(0);for(var s=(u-i.getLengthInBits())/8,f=0;f<s;f++)i.put(f%2?17:236,8);return function(t,e,r){for(var i=o.getSymbolTotalCodewords(e),a=c.getTotalCodewordsCount(e,r),u=i-a,s=c.getBlocksCount(e,r),f=s-i%s,h=Math.floor(i/s),g=Math.floor(u/s),d=g+1,p=h-g,v=new l(p),w=0,y=new Array(s),m=new Array(s),E=0,b=new n(t.buffer),B=0;B<s;B++){var A=B<f?g:d;y[B]=b.slice(w,w+A),m[B]=v.encode(y[B]),w+=A,E=Math.max(E,A)}var C,T,I=new n(i),P=0;for(C=0;C<E;C++)for(T=0;T<s;T++)C<y[T].length&&(I[P++]=y[T][C]);for(C=0;C<p;C++)for(T=0;T<s;T++)I[P++]=m[T][C];return I}(i,t,e)}function E(t,e,r){var n;if(w(t))n=v.fromArray(t);else{if(\"string\"!=typeof t)throw new Error(\"Invalid data\");var i=e;if(!i){var a=v.rawSplit(t);i=g.getBestVersionForData(a,r)}n=v.fromString(t,i||40)}var c=g.getBestVersionForData(n,r);if(!c)throw new Error(\"The amount of data is too big to be stored in a QR Code\");if(e){if(e<c)throw new Error(\"\\nThe chosen QR Code version cannot contain this amount of data.\\nMinimum version required to store current data is: \"+c+\".\\n\")}else e=c;var l=m(e,r,n),d=o.getSymbolSize(e),p=new u(d);!function(t,e){for(var r=t.size,n=f.getPositions(e),o=0;o<n.length;o++)for(var i=n[o][0],a=n[o][1],u=-1;u<=7;u++)if(!(i+u<=-1||r<=i+u))for(var s=-1;s<=7;s++)a+s<=-1||r<=a+s||(u>=0&&u<=6&&(0===s||6===s)||s>=0&&s<=6&&(0===u||6===u)||u>=2&&u<=4&&s>=2&&s<=4?t.set(i+u,a+s,!0,!0):t.set(i+u,a+s,!1,!0))}(p,e),function(t){for(var e=t.size,r=8;r<e-8;r++){var n=r%2==0;t.set(r,6,n,!0),t.set(6,r,n,!0)}}(p),function(t,e){for(var r=s.getPositions(e),n=0;n<r.length;n++)for(var o=r[n][0],i=r[n][1],a=-2;a<=2;a++)for(var u=-2;u<=2;u++)-2===a||2===a||-2===u||2===u||0===a&&0===u?t.set(o+a,i+u,!0,!0):t.set(o+a,i+u,!1,!0)}(p,e),y(p,r,0),e>=7&&function(t,e){for(var r,n,o,i=t.size,a=g.getEncodedBits(e),u=0;u<18;u++)r=Math.floor(u/3),n=u%3+i-8-3,o=1==(a>>u&1),t.set(r,n,o,!0),t.set(n,r,o,!0)}(p,e),function(t,e){for(var r=t.size,n=-1,o=r-1,i=7,a=0,u=r-1;u>0;u-=2)for(6===u&&u--;;){for(var s=0;s<2;s++)if(!t.isReserved(o,u-s)){var f=!1;a<e.length&&(f=1==(e[a]>>>i&1)),t.set(o,u-s,f),-1==--i&&(a++,i=7)}if((o+=n)<0||r<=o){o-=n,n=-n;break}}}(p,l);var E=h.getBestMask(p,y.bind(null,p,r));return h.applyMask(E,p),y(p,r,E),{modules:p,version:e,errorCorrectionLevel:r,maskPattern:E,segments:n}}e.create=function(t,e){if(void 0===t||\"\"===t)throw new Error(\"No input text\");var r,n=i.M;return void 0!==e&&(n=i.from(e.errorCorrectionLevel,i.M),r=g.from(e.version),e.toSJISFunc&&o.setToSJISFunction(e.toSJISFunc)),E(t,r,n)}},function(t,e){function r(){this.buffer=[],this.length=0}r.prototype={get:function(t){var e=Math.floor(t/8);return 1==(this.buffer[e]>>>7-t%8&1)},put:function(t,e){for(var r=0;r<e;r++)this.putBit(1==(t>>>e-r-1&1))},getLengthInBits:function(){return this.length},putBit:function(t){var e=Math.floor(this.length/8);this.buffer.length<=e&&this.buffer.push(0),t&&(this.buffer[e]|=128>>>this.length%8),this.length++}},t.exports=r},function(t,e,r){var n=r(2);function o(t){if(!t||t<1)throw new Error(\"BitMatrix size must be defined and greater than 0\");this.size=t,this.data=new n(t*t),this.data.fill(0),this.reservedBit=new n(t*t),this.reservedBit.fill(0)}o.prototype.set=function(t,e,r,n){var o=t*this.size+e;this.data[o]=r,n&&(this.reservedBit[o]=!0)},o.prototype.get=function(t,e){return this.data[t*this.size+e]},o.prototype.xor=function(t,e,r){this.data[t*this.size+e]^=r},o.prototype.isReserved=function(t,e){return this.reservedBit[t*this.size+e]},t.exports=o},function(t,e,r){var n=r(0).getSymbolSize;e.getRowColCoords=function(t){if(1===t)return[];for(var e=Math.floor(t/7)+2,r=n(t),o=145===r?26:2*Math.ceil((r-13)/(2*e-2)),i=[r-7],a=1;a<e-1;a++)i[a]=i[a-1]-o;return i.push(6),i.reverse()},e.getPositions=function(t){for(var r=[],n=e.getRowColCoords(t),o=n.length,i=0;i<o;i++)for(var a=0;a<o;a++)0===i&&0===a||0===i&&a===o-1||i===o-1&&0===a||r.push([n[i],n[a]]);return r}},function(t,e,r){var n=r(0).getSymbolSize;e.getPositions=function(t){var e=n(t);return[[0,0],[e-7,0],[0,e-7]]}},function(t,e){e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var r=3,n=3,o=40,i=10;function a(t,r,n){switch(t){case e.Patterns.PATTERN000:return(r+n)%2==0;case e.Patterns.PATTERN001:return r%2==0;case e.Patterns.PATTERN010:return n%3==0;case e.Patterns.PATTERN011:return(r+n)%3==0;case e.Patterns.PATTERN100:return(Math.floor(r/2)+Math.floor(n/3))%2==0;case e.Patterns.PATTERN101:return r*n%2+r*n%3==0;case e.Patterns.PATTERN110:return(r*n%2+r*n%3)%2==0;case e.Patterns.PATTERN111:return(r*n%3+(r+n)%2)%2==0;default:throw new Error(\"bad maskPattern:\"+t)}}e.getPenaltyN1=function(t){for(var e=t.size,n=0,o=0,i=0,a=null,u=null,s=0;s<e;s++){o=i=0,a=u=null;for(var f=0;f<e;f++){var h=t.get(s,f);h===a?o++:(o>=5&&(n+=r+(o-5)),a=h,o=1),(h=t.get(f,s))===u?i++:(i>=5&&(n+=r+(i-5)),u=h,i=1)}o>=5&&(n+=r+(o-5)),i>=5&&(n+=r+(i-5))}return n},e.getPenaltyN2=function(t){for(var e=t.size,r=0,o=0;o<e-1;o++)for(var i=0;i<e-1;i++){var a=t.get(o,i)+t.get(o,i+1)+t.get(o+1,i)+t.get(o+1,i+1);4!==a&&0!==a||r++}return r*n},e.getPenaltyN3=function(t){for(var e=t.size,r=0,n=0,i=0,a=0;a<e;a++){n=i=0;for(var u=0;u<e;u++)n=n<<1&2047|t.get(a,u),u>=10&&(1488===n||93===n)&&r++,i=i<<1&2047|t.get(u,a),u>=10&&(1488===i||93===i)&&r++}return r*o},e.getPenaltyN4=function(t){for(var e=0,r=t.data.length,n=0;n<r;n++)e+=t.data[n];return Math.abs(Math.ceil(100*e/r/5)-10)*i},e.applyMask=function(t,e){for(var r=e.size,n=0;n<r;n++)for(var o=0;o<r;o++)e.isReserved(o,n)||e.xor(o,n,a(t,o,n))},e.getBestMask=function(t,r){for(var n=Object.keys(e.Patterns).length,o=0,i=1/0,a=0;a<n;a++){r(a),e.applyMask(a,t);var u=e.getPenaltyN1(t)+e.getPenaltyN2(t)+e.getPenaltyN3(t)+e.getPenaltyN4(t);e.applyMask(a,t),u<i&&(i=u,o=a)}return o}},function(t,e,r){var n=r(2),o=r(18);function i(t){this.genPoly=void 0,this.degree=t,this.degree&&this.initialize(this.degree)}i.prototype.initialize=function(t){this.degree=t,this.genPoly=o.generateECPolynomial(this.degree)},i.prototype.encode=function(t){if(!this.genPoly)throw new Error(\"Encoder not initialized\");var e=new n(this.degree);e.fill(0);var r=n.concat([t,e],t.length+this.degree),i=o.mod(r,this.genPoly),a=this.degree-i.length;if(a>0){var u=new n(this.degree);return u.fill(0),i.copy(u,a),u}return i},t.exports=i},function(t,e,r){var n=r(2),o=r(19);e.mul=function(t,e){var r=new n(t.length+e.length-1);r.fill(0);for(var i=0;i<t.length;i++)for(var a=0;a<e.length;a++)r[i+a]^=o.mul(t[i],e[a]);return r},e.mod=function(t,e){for(var r=new n(t);r.length-e.length>=0;){for(var i=r[0],a=0;a<e.length;a++)r[a]^=o.mul(e[a],i);for(var u=0;u<r.length&&0===r[u];)u++;r=r.slice(u)}return r},e.generateECPolynomial=function(t){for(var r=new n([1]),i=0;i<t;i++)r=e.mul(r,[1,o.exp(i)]);return r}},function(t,e,r){var n=r(2),o=new n(512),i=new n(256);!function(){for(var t=1,e=0;e<255;e++)o[e]=t,i[t]=e,256&(t<<=1)&&(t^=285);for(e=255;e<512;e++)o[e]=o[e-255]}(),e.log=function(t){if(t<1)throw new Error(\"log(\"+t+\")\");return i[t]},e.exp=function(t){return o[t]},e.mul=function(t,e){return 0===t||0===e?0:o[i[t]+i[e]]}},function(t,e,r){var n=r(0),o=n.getBCHDigit(1335);e.getEncodedBits=function(t,e){for(var r=t.bit<<3|e,i=r<<10;n.getBCHDigit(i)-o>=0;)i^=1335<<n.getBCHDigit(i)-o;return 21522^(r<<10|i)}},function(t,e,r){var n=r(1),o=r(22),i=r(23),a=r(24),u=r(25),s=r(7),f=r(0),h=r(26);function c(t){return unescape(encodeURIComponent(t)).length}function l(t,e,r){for(var n,o=[];null!==(n=t.exec(r));)o.push({data:n[0],index:n.index,mode:e,length:n[0].length});return o}function g(t){var e,r,o=l(s.NUMERIC,n.NUMERIC,t),i=l(s.ALPHANUMERIC,n.ALPHANUMERIC,t);return f.isKanjiModeEnabled()?(e=l(s.BYTE,n.BYTE,t),r=l(s.KANJI,n.KANJI,t)):(e=l(s.BYTE_KANJI,n.BYTE,t),r=[]),o.concat(i,e,r).sort(function(t,e){return t.index-e.index}).map(function(t){return{data:t.data,mode:t.mode,length:t.length}})}function d(t,e){switch(e){case n.NUMERIC:return o.getBitsLength(t);case n.ALPHANUMERIC:return i.getBitsLength(t);case n.KANJI:return u.getBitsLength(t);case n.BYTE:return a.getBitsLength(t)}}function p(t,e){var r,s=n.getBestModeForData(t);if((r=n.from(e,s))!==n.BYTE&&r.bit<s.bit)throw new Error('\"'+t+'\" cannot be encoded with mode '+n.toString(r)+\".\\n Suggested mode is: \"+n.toString(s));switch(r!==n.KANJI||f.isKanjiModeEnabled()||(r=n.BYTE),r){case n.NUMERIC:return new o(t);case n.ALPHANUMERIC:return new i(t);case n.KANJI:return new u(t);case n.BYTE:return new a(t)}}e.fromArray=function(t){return t.reduce(function(t,e){return\"string\"==typeof e?t.push(p(e,null)):e.data&&t.push(p(e.data,e.mode)),t},[])},e.fromString=function(t,r){for(var o=function(t,e){for(var r={},o={start:{}},i=[\"start\"],a=0;a<t.length;a++){for(var u=t[a],s=[],f=0;f<u.length;f++){var h=u[f],c=\"\"+a+f;s.push(c),r[c]={node:h,lastCount:0},o[c]={};for(var l=0;l<i.length;l++){var g=i[l];r[g]&&r[g].node.mode===h.mode?(o[g][c]=d(r[g].lastCount+h.length,h.mode)-d(r[g].lastCount,h.mode),r[g].lastCount+=h.length):(r[g]&&(r[g].lastCount=h.length),o[g][c]=d(h.length,h.mode)+4+n.getCharCountIndicator(h.mode,e))}}i=s}for(l=0;l<i.length;l++)o[i[l]].end=0;return{map:o,table:r}}(function(t){for(var e=[],r=0;r<t.length;r++){var o=t[r];switch(o.mode){case n.NUMERIC:e.push([o,{data:o.data,mode:n.ALPHANUMERIC,length:o.length},{data:o.data,mode:n.BYTE,length:o.length}]);break;case n.ALPHANUMERIC:e.push([o,{data:o.data,mode:n.BYTE,length:o.length}]);break;case n.KANJI:e.push([o,{data:o.data,mode:n.BYTE,length:c(o.data)}]);break;case n.BYTE:e.push([{data:o.data,mode:n.BYTE,length:c(o.data)}])}}return e}(g(t,f.isKanjiModeEnabled())),r),i=h.find_path(o.map,\"start\",\"end\"),a=[],u=1;u<i.length-1;u++)a.push(o.table[i[u]].node);return e.fromArray(function(t){return t.reduce(function(t,e){var r=t.length-1>=0?t[t.length-1]:null;return r&&r.mode===e.mode?(t[t.length-1].data+=e.data,t):(t.push(e),t)},[])}(a))},e.rawSplit=function(t){return e.fromArray(g(t,f.isKanjiModeEnabled()))}},function(t,e,r){var n=r(1);function o(t){this.mode=n.NUMERIC,this.data=t.toString()}o.getBitsLength=function(t){return 10*Math.floor(t/3)+(t%3?t%3*3+1:0)},o.prototype.getLength=function(){return this.data.length},o.prototype.getBitsLength=function(){return o.getBitsLength(this.data.length)},o.prototype.write=function(t){var e,r,n;for(e=0;e+3<=this.data.length;e+=3)r=this.data.substr(e,3),n=parseInt(r,10),t.put(n,10);var o=this.data.length-e;o>0&&(r=this.data.substr(e),n=parseInt(r,10),t.put(n,3*o+1))},t.exports=o},function(t,e,r){var n=r(1),o=[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"A\",\"B\",\"C\",\"D\",\"E\",\"F\",\"G\",\"H\",\"I\",\"J\",\"K\",\"L\",\"M\",\"N\",\"O\",\"P\",\"Q\",\"R\",\"S\",\"T\",\"U\",\"V\",\"W\",\"X\",\"Y\",\"Z\",\" \",\"$\",\"%\",\"*\",\"+\",\"-\",\".\",\"/\",\":\"];function i(t){this.mode=n.ALPHANUMERIC,this.data=t}i.getBitsLength=function(t){return 11*Math.floor(t/2)+t%2*6},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(t){var e;for(e=0;e+2<=this.data.length;e+=2){var r=45*o.indexOf(this.data[e]);r+=o.indexOf(this.data[e+1]),t.put(r,11)}this.data.length%2&&t.put(o.indexOf(this.data[e]),6)},t.exports=i},function(t,e,r){var n=r(2),o=r(1);function i(t){this.mode=o.BYTE,this.data=new n(t)}i.getBitsLength=function(t){return 8*t},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(t){for(var e=0,r=this.data.length;e<r;e++)t.put(this.data[e],8)},t.exports=i},function(t,e,r){var n=r(1),o=r(0);function i(t){this.mode=n.KANJI,this.data=t}i.getBitsLength=function(t){return 13*t},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(t){var e;for(e=0;e<this.data.length;e++){var r=o.toSJIS(this.data[e]);if(r>=33088&&r<=40956)r-=33088;else{if(!(r>=57408&&r<=60351))throw new Error(\"Invalid SJIS character: \"+this.data[e]+\"\\nMake sure your charset is UTF-8\");r-=49472}r=192*(r>>>8&255)+(255&r),t.put(r,13)}},t.exports=i},function(t,e,r){\"use strict\";var n={single_source_shortest_paths:function(t,e,r){var o={},i={};i[e]=0;var a,u,s,f,h,c,l,g=n.PriorityQueue.make();for(g.push(e,0);!g.empty();)for(s in u=(a=g.pop()).value,f=a.cost,h=t[u]||{})h.hasOwnProperty(s)&&(c=f+h[s],l=i[s],(void 0===i[s]||l>c)&&(i[s]=c,g.push(s,c),o[s]=u));if(void 0!==r&&void 0===i[r]){var d=[\"Could not find a path from \",e,\" to \",r,\".\"].join(\"\");throw new Error(d)}return o},extract_shortest_path_from_predecessor_list:function(t,e){for(var r=[],n=e;n;)r.push(n),t[n],n=t[n];return r.reverse(),r},find_path:function(t,e,r){var o=n.single_source_shortest_paths(t,e,r);return n.extract_shortest_path_from_predecessor_list(o,r)},PriorityQueue:{make:function(t){var e,r=n.PriorityQueue,o={};for(e in t=t||{},r)r.hasOwnProperty(e)&&(o[e]=r[e]);return o.queue=[],o.sorter=t.sorter||r.default_sorter,o},default_sorter:function(t,e){return t.cost-e.cost},push:function(t,e){var r={value:t,cost:e};this.queue.push(r),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return 0===this.queue.length}}};t.exports=n},function(t,e,r){var n=r(8);e.render=function(t,e,r){var o=r,i=e;void 0!==o||e&&e.getContext||(o=e,e=void 0),e||(i=function(){try{return document.createElement(\"canvas\")}catch(t){throw new Error(\"You need to specify a canvas element\")}}()),o=n.getOptions(o);var a=(t.modules.size+2*o.margin)*o.scale,u=i.getContext(\"2d\"),s=u.createImageData(a,a);return n.qrToImageData(s.data,t,o.margin,o.scale,o.color),function(t,e,r){t.clearRect(0,0,e.width,e.height),e.style||(e.style={}),e.height=r,e.width=r,e.style.height=r+\"px\",e.style.width=r+\"px\"}(u,i,a),u.putImageData(s,0,0),i},e.renderToDataURL=function(t,r,n){var o=n;void 0!==o||r&&r.getContext||(o=r,r=void 0),o||(o={});var i=e.render(t,r,o),a=o.type||\"image/png\",u=o.rendererOpts||{};return i.toDataURL(a,u.quality)}},function(t,e,r){var n=r(8);function o(t){return'fill=\"rgb('+[t.r,t.g,t.b].join(\",\")+')\" fill-opacity=\"'+(t.a/255).toFixed(2)+'\"'}e.render=function(t,e){var r=n.getOptions(e),i=t.modules.size,a=t.modules.data,u=(i+2*r.margin)*r.scale,s='<?xml version=\"1.0\" encoding=\"utf-8\"?>\\n';s+='<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\\n',s+='<svg version=\"1.1\" baseProfile=\"full\"',s+=' width=\"'+u+'\" height=\"'+u+'\"',s+=' viewBox=\"0 0 '+u+\" \"+u+'\"',s+=' xmlns=\"http://www.w3.org/2000/svg\"',s+=' xmlns:xlink=\"http://www.w3.org/1999/xlink\"',s+=' xmlns:ev=\"http://www.w3.org/2001/xml-events\">\\n',s+='<rect x=\"0\" y=\"0\" width=\"'+u+'\" height=\"'+u+'\" '+o(r.color.light)+\" />\\n\",s+='<defs><rect id=\"p\" width=\"'+r.scale+'\" height=\"'+r.scale+'\" /></defs>\\n',s+=\"<g \"+o(r.color.dark)+\">\\n\";for(var f=0;f<i;f++)for(var h=0;h<i;h++){if(a[f*i+h])s+='<use x=\"'+(r.margin+h)*r.scale+'\" y=\"'+(r.margin+f)*r.scale+'\" xlink:href=\"#p\" />\\n'}return s+=\"</g>\\n\",s+=\"</svg>\"}}]);\nwindow.QRCode = webpack.QRCode;"
  },
  {
    "path": "home-assistant/www/custom-lovelace/thermostat/card.js",
    "content": "import ThermostatUI from './lib.js?v=10'\n\nclass ThermostatCard extends HTMLElement {\n  constructor() {\n    super();\n    this.attachShadow({ mode: 'open' });\n  }\n  set hass(hass) {\n    const config = this._config;\n\n    const ambient_temperature = parseFloat(hass.states[config.temperature].state);\n    const target_temperature = parseFloat(hass.states[config.target_temperature].state);\n\n    const options = {\n      min_value: 4,\n      max_value: 28,\n      ambient_temperature,\n      hvac_state: 'heat'\n    }\n\n    if (!this.thermostat.in_control || this._hass == null) {\n      options.target_temperature = target_temperature;\n    }\n\n    this.thermostat.updateState(options);\n    this._hass = hass;\n  }\n\n  _controlSetPoints() {\n    const config = this._config;\n    const options = {\n      entity_id: config.target_temperature,\n      value: parseFloat(this.thermostat.temperature.target)\n    };\n\n    this._hass.callService('input_number', 'set_value', options);\n  }\n\n  setConfig(config) {\n    // // Check config\n    // if (!config.entity && config.entity.split(\".\")[0] === 'climate') {\n    //   throw new Error('Please define an entity');\n    // }\n\n    // Cleanup DOM\n    const root = this.shadowRoot;\n    if (root.lastChild) root.removeChild(root.lastChild);\n\n    // Prepare config defaults\n    const cardConfig = Object.assign({}, config);\n    cardConfig.hvac = Object.assign({}, config.hvac);\n    if (!cardConfig.diameter) cardConfig.diameter = 400;\n    if (!cardConfig.pending) cardConfig.pending = 2;\n    if (!cardConfig.idle_zone) cardConfig.idle_zone = 2;\n    if (!cardConfig.step) cardConfig.step = 0.5;\n    if (!cardConfig.highlight_tap) cardConfig.highlight_tap = true;\n    if (!cardConfig.no_card) cardConfig.no_card = false;\n    if (!cardConfig.chevron_size) cardConfig.chevron_size = 50;\n    if (!cardConfig.num_ticks) cardConfig.num_ticks = 150;\n    if (!cardConfig.tick_degrees) cardConfig.tick_degrees = 300;\n    if (!cardConfig.hvac.states) cardConfig.hvac.states = { 'off': 'off', 'heat': 'heat', 'cool': 'cool', };\n\n    // Extra config values generated for simplicity of updates\n    cardConfig.radius = cardConfig.diameter / 2;\n    cardConfig.ticks_outer_radius = cardConfig.diameter / 30;\n    cardConfig.ticks_inner_radius = cardConfig.diameter / 8;\n    cardConfig.offset_degrees = 180 - (360 - cardConfig.tick_degrees) / 2;\n    cardConfig.control = this._controlSetPoints.bind(this);\n    this.thermostat = new ThermostatUI(cardConfig);\n\n    if (cardConfig.no_card === true) {\n      root.appendChild(this.thermostat.container);\n    }\n    else {\n      const card = document.createElement('div');\n      card.style.padding = '5%';\n      card.appendChild(this.thermostat.container);\n      root.appendChild(card);\n    }\n    this._config = cardConfig;\n  }\n}\ncustomElements.define('thermostat-card', ThermostatCard);\n"
  },
  {
    "path": "home-assistant/www/custom-lovelace/thermostat/lib.js",
    "content": "export default class ThermostatUI {\n  get container() {\n    return this._container\n  }\n  set dual(val) {\n    this._dual = val\n  }\n  get dual() {\n    return this._dual;\n  }\n  get in_control() {\n    return this._in_control;\n  }\n  get temperature() {\n    return {\n      low: this._low,\n      high: this._high,\n      target: this._target,\n    }\n  }\n  get ambient() {\n    return this._ambient;\n  }\n  set temperature(val) {\n    this._ambient = val.ambient;\n    this._low = val.low;\n    this._high = val.high;\n    this._target = val.target;\n    if (this._low && this._high) this.dual = true;\n  }\n  constructor(config) {\n    this._config = config; // need certain options for updates\n    this._ticks = []; // need for dynamic tick updates\n    this._controls = []; // need for managing highlight and clicks\n    this._dual = false; // by default is single temperature\n    this._container = document.createElement('div');\n    this._container.className = 'dial_container';\n    const style = document.createElement('style');\n    style.textContent = this._renderStyle();\n    if (config.title) this._container.appendChild(this._buildTitle(config.title));\n    this._container.appendChild(style);\n    const root = this._buildCore(config.diameter);\n    root.appendChild(this._buildDial(config.radius));\n    root.appendChild(this._buildTicks(config.num_ticks));\n    root.appendChild(this._buildRing(config.radius));\n    root.appendChild(this._buildLeaf(config.radius));\n    root.appendChild(this._buildThermoIcon(config.radius));\n    root.appendChild(this._buildDialSlot(1));\n    root.appendChild(this._buildDialSlot(2));\n    root.appendChild(this._buildDialSlot(3));\n\n    root.appendChild(this._buildText(config.radius, 'ambient', 0));\n    root.appendChild(this._buildText(config.radius, 'target', 0));\n    root.appendChild(this._buildText(config.radius, 'low', -config.radius / 2.5));\n    root.appendChild(this._buildText(config.radius, 'high', config.radius / 3));\n    root.appendChild(this._buildChevrons(config.radius, 0, 'low', 0.7, -config.radius / 2.5));\n    root.appendChild(this._buildChevrons(config.radius, 0, 'high', 0.7, config.radius / 3));\n    root.appendChild(this._buildChevrons(config.radius, 0, 'target', 1, 0));\n    root.appendChild(this._buildChevrons(config.radius, 180, 'low', 0.7, -config.radius / 2.5));\n    root.appendChild(this._buildChevrons(config.radius, 180, 'high', 0.7, config.radius / 3));\n    root.appendChild(this._buildChevrons(config.radius, 180, 'target', 1, 0));\n\n    this._container.appendChild(root);\n    this._root = root;\n    this._buildControls(config.radius);\n    this._root.addEventListener('click', () => this._enableControls());\n  }\n\n  updateState(options) {\n    const config = this._config;\n    const away = options.away || false;\n    this.min_value = options.min_value;\n    this.max_value = options.max_value;\n    this.hvac_state = options.hvac_state;\n\n    if (options.ambient_temperature != null) {\n      this._ambient = options.ambient_temperature;\n    }\n\n    if (options.target_temperature != null) {\n      this._target = options.target_temperature;\n    }\n\n    this._updateClass('has_dual', this.dual);\n    let tick_label, from, to;\n    const tick_indexes = [];\n    const ambient_index = SvgUtil.restrictToRange(Math.round((this.ambient - this.min_value) / (this.max_value - this.min_value) * config.num_ticks), 0, config.num_ticks - 1);\n    const target_index = SvgUtil.restrictToRange(Math.round((this._target - this.min_value) / (this.max_value - this.min_value) * config.num_ticks), 0, config.num_ticks - 1);\n    const high_index = SvgUtil.restrictToRange(Math.round((this._high - this.min_value) / (this.max_value - this.min_value) * config.num_ticks), 0, config.num_ticks - 1);\n    const low_index = SvgUtil.restrictToRange(Math.round((this._low - this.min_value) / (this.max_value - this.min_value) * config.num_ticks), 0, config.num_ticks - 1);\n    if (!this.dual) {\n      tick_label = [this._target, this.ambient].sort();\n      this._updateTemperatureSlot(tick_label[0], -8, `temperature_slot_1`);\n      this._updateTemperatureSlot(tick_label[1], 8, `temperature_slot_2`);\n      switch (this.hvac_state) {\n        case 'cool':\n          // active ticks\n          if (target_index < ambient_index) {\n            from = target_index;\n            to = ambient_index;\n          }\n          break;\n        case 'heat':\n          // active ticks\n          if (target_index > ambient_index) {\n            from = ambient_index;\n            to = target_index;\n          }\n          break;\n        default:\n      }\n    } else {\n      tick_label = [this._low, this._high, this.ambient].sort();\n      this._updateTemperatureSlot(null, 0, `temperature_slot_1`);\n      this._updateTemperatureSlot(null, 0, `temperature_slot_2`);\n      this._updateTemperatureSlot(null, 0, `temperature_slot_3`);\n      switch (this.hvac_state) {\n        case 'cool':\n          // active ticks\n          if (high_index < ambient_index) {\n            from = high_index;\n            to = ambient_index;\n            this._updateTemperatureSlot(this.ambient, 8, `temperature_slot_3`);\n            this._updateTemperatureSlot(this._high, -8, `temperature_slot_2`);\n          }\n          break;\n        case 'heat':\n          // active ticks\n          if (low_index > ambient_index) {\n            from = ambient_index;\n            to = low_index;\n            this._updateTemperatureSlot(this.ambient, -8, `temperature_slot_1`);\n            this._updateTemperatureSlot(this._low, 8, `temperature_slot_2`);\n          }\n          break;\n        case 'off':\n          // active ticks\n          if (high_index < ambient_index) {\n            from = high_index;\n            to = ambient_index;\n            this._updateTemperatureSlot(this.ambient, 8, `temperature_slot_3`);\n            this._updateTemperatureSlot(this._high, -8, `temperature_slot_2`);\n          }\n          if (low_index > ambient_index) {\n            from = ambient_index;\n            to = low_index;\n            this._updateTemperatureSlot(this.ambient, -8, `temperature_slot_1`);\n            this._updateTemperatureSlot(this._low, 8, `temperature_slot_2`);\n          }\n          break;\n        default:\n      }\n    }\n    tick_label.forEach(item => tick_indexes.push(SvgUtil.restrictToRange(Math.round((item - this.min_value) / (this.max_value - this.min_value) * config.num_ticks), 0, config.num_ticks - 1)));\n    this._updateTicks(from, to, tick_indexes);\n    this._updateClass('has-leaf', away);\n    this._updateHvacState();\n    this._updateText('ambient', this.ambient);\n    this._updateEdit(false);\n    this._updateClass('has-thermo', false);\n  }\n\n  _temperatureControlClicked(index) {\n    const config = this._config;\n    let chevron;\n    this._root.querySelectorAll('path.dial__chevron').forEach(el => SvgUtil.setClass(el, 'pressed', false));\n    if (this.in_control) {\n      if (this.dual) {\n        switch (index) {\n          case 0:\n            // clicked top left \n            chevron = this._root.querySelectorAll('path.dial__chevron--low')[1];\n            this._low = this._low + config.step;\n            if ((this._low + config.idle_zone) >= this._high) this._low = this._high - config.idle_zone;\n            break;\n          case 1:\n            // clicked top right\n            chevron = this._root.querySelectorAll('path.dial__chevron--high')[1];\n            this._high = this._high + config.step;\n            if (this._high > this.max_value) this._high = this.max_value;\n            break;\n          case 2:\n            // clicked bottom right\n            chevron = this._root.querySelectorAll('path.dial__chevron--high')[0];\n            this._high = this._high - config.step;\n            if ((this._high - config.idle_zone) <= this._low) this._high = this._low + config.idle_zone;\n            break;\n          case 3:\n            // clicked bottom left\n            chevron = this._root.querySelectorAll('path.dial__chevron--low')[0];\n            this._low = this._low - config.step;\n            if (this._low < this.min_value) this._low = this.min_value;\n            break;\n        }\n        SvgUtil.setClass(chevron, 'pressed', true);\n        setTimeout(() => SvgUtil.setClass(chevron, 'pressed', false), 200);\n        if (config.highlight_tap)\n          SvgUtil.setClass(this._controls[index], 'control-visible', true);\n      }\n      else {\n        if (index < 2) {\n          // clicked top\n          chevron = this._root.querySelectorAll('path.dial__chevron--target')[1];\n          this._target = this._target + config.step;\n          if (this._target > this.max_value) this._target = this.max_value;\n          if (config.highlight_tap) {\n            SvgUtil.setClass(this._controls[0], 'control-visible', true);\n            SvgUtil.setClass(this._controls[1], 'control-visible', true);\n          }\n        } else {\n          // clicked bottom\n          chevron = this._root.querySelectorAll('path.dial__chevron--target')[0];\n          this._target = this._target - config.step;\n          if (this._target < this.min_value) this._target = this.min_value;\n          if (config.highlight_tap) {\n            SvgUtil.setClass(this._controls[2], 'control-visible', true);\n            SvgUtil.setClass(this._controls[3], 'control-visible', true);\n          }\n        }\n        SvgUtil.setClass(chevron, 'pressed', true);\n        setTimeout(() => SvgUtil.setClass(chevron, 'pressed', false), 200);\n      }\n      if (config.highlight_tap) {\n        setTimeout(() => {\n          SvgUtil.setClass(this._controls[0], 'control-visible', false);\n          SvgUtil.setClass(this._controls[1], 'control-visible', false);\n          SvgUtil.setClass(this._controls[2], 'control-visible', false);\n          SvgUtil.setClass(this._controls[3], 'control-visible', false);\n        }, 200);\n      }\n    } else {\n      this._enableControls();\n    }\n  }\n\n  _updateEdit(show_edit) {\n    SvgUtil.setClass(this._root, 'dial--edit', show_edit);\n  }\n\n  _enableControls() {\n    const config = this._config;\n    const target = this.temperature.target;\n    this._in_control = true;\n    this._updateClass('in_control', this.in_control);\n    if (this._timeoutHandler) clearTimeout(this._timeoutHandler);\n    this._updateEdit(true);\n    this._updateClass('has-thermo', true);\n    this._updateText('target', target);\n    this._updateText('low', this.temperature.low);\n    this._updateText('high', this.temperature.high);\n    this._timeoutHandler = setTimeout(() => {\n      this._updateText('ambient', this.ambient);\n      this._updateEdit(false);\n      this._updateClass('has-thermo', false);\n      this._in_control = false;\n      this._updateClass('in_control', this.in_control);\n      config.control(target);\n    }, config.pending * 1000);\n  }\n\n  _updateClass(class_name, flag) {\n    SvgUtil.setClass(this._root, class_name, flag);\n  }\n\n  _updateText(id, value) {\n    const lblTarget = this._root.querySelector(`#${id}`).querySelectorAll('tspan');\n    const text = Math.floor(value);\n    if (value) {\n      lblTarget[0].textContent = text;\n      if (value % 1 != 0) {\n        lblTarget[1].textContent = Math.round(value % 1 * 10);\n      } else {\n        lblTarget[1].textContent = '';\n      }\n    }\n    if (this.in_control && id == 'target' && this.dual) {\n      lblTarget[0].textContent = '·';\n    }\n  }\n\n  _updateTemperatureSlot(value, offset, slot) {\n    const config = this._config;\n    const lblSlot1 = this._root.querySelector(`#${slot}`)\n    lblSlot1.textContent = value != null ? SvgUtil.superscript(value) : '';\n    const peggedValue = SvgUtil.restrictToRange(value, this.min_value, this.max_value);\n    const position = [config.radius, config.ticks_outer_radius - (config.ticks_outer_radius - config.ticks_inner_radius) / 2];\n    let degs = config.tick_degrees * (peggedValue - this.min_value) / (this.max_value - this.min_value) - config.offset_degrees + offset;\n    const pos = SvgUtil.rotatePoint(position, degs, [config.radius, config.radius]);\n    SvgUtil.attributes(lblSlot1, {\n      x: pos[0],\n      y: pos[1]\n    });\n  }\n\n  _updateHvacState() {\n    this._root.classList.forEach(c => {\n      if (c.indexOf('dial--state--') != -1)\n        this._root.classList.remove(c);\n    });\n    this._root.classList.add('dial--state--' + this.hvac_state);\n  }\n\n  _updateTicks(from, to, large_ticks) {\n    const config = this._config;\n\n    const tickPoints = [\n      [config.radius - 1, config.ticks_outer_radius],\n      [config.radius + 1, config.ticks_outer_radius],\n      [config.radius + 1, config.ticks_inner_radius],\n      [config.radius - 1, config.ticks_inner_radius]\n    ];\n    const tickPointsLarge = [\n      [config.radius - 1.5, config.ticks_outer_radius],\n      [config.radius + 1.5, config.ticks_outer_radius],\n      [config.radius + 1.5, config.ticks_inner_radius + 20],\n      [config.radius - 1.5, config.ticks_inner_radius + 20]\n    ];\n\n    this._ticks.forEach((tick, index) => {\n      let isLarge = false;\n      let isActive = (index >= from && index <= to) ? 'active' : '';\n      large_ticks.forEach(i => isLarge = isLarge || (index == i));\n      if (isLarge) isActive += ' large';\n      const theta = config.tick_degrees / config.num_ticks;\n      SvgUtil.attributes(tick, {\n        d: SvgUtil.pointsToPath(SvgUtil.rotatePoints(isLarge ? tickPointsLarge : tickPoints, index * theta - config.offset_degrees, [config.radius, config.radius])),\n        class: isActive\n      });\n    });\n  }\n\n  _buildCore(diameter) {\n    return SvgUtil.createSVGElement('svg', {\n      width: '100%',\n      height: '100%',\n      viewBox: '0 0 ' + diameter + ' ' + diameter,\n      class: 'dial'\n    })\n  }\n\n  _buildTitle(title) {\n    const lblTitle = document.createElement('div');\n    lblTitle.className = 'dial_title';\n    lblTitle.textContent = title;\n    return lblTitle;\n  }\n\n  // build black dial\n  _buildDial(radius) {\n    return SvgUtil.createSVGElement('circle', {\n      cx: radius,\n      cy: radius,\n      r: radius,\n      class: 'dial__shape'\n    })\n  }\n  // build circle around\n  _buildRing(radius) {\n    return SvgUtil.createSVGElement('path', {\n      d: SvgUtil.donutPath(radius, radius, radius - 4, radius - 8),\n      class: 'dial__editableIndicator',\n    })\n  }\n\n  _buildTicks(num_ticks) {\n    const tick_element = SvgUtil.createSVGElement('g', {\n      class: 'dial__ticks'\n    });\n    for (let i = 0; i < num_ticks; i++) {\n      const tick = SvgUtil.createSVGElement('path', {})\n      this._ticks.push(tick);\n      tick_element.appendChild(tick);\n    }\n    return tick_element;\n  }\n\n  _buildLeaf(radius) {\n    const leafScale = radius / 5 / 100;\n    const leafDef = [\"M\", 3, 84, \"c\", 24, 17, 51, 18, 73, -6, \"C\", 100, 52,\n      100, 22, 100, 4, \"c\", -13, 15, -37, 9, -70, 19, \"C\", 4, 32, 0, 63, 0,\n      76, \"c\", 6, -7, 18, -17, 33, -23, 24, -9, 34, -9, 48, -20, -9, 10,\n      -20, 16, -43, 24, \"C\", 22, 63, 8, 78, 3, 84, \"z\"].map((x) => isNaN(x) ? x : x * leafScale).join(' ');\n    const translate = [radius - (leafScale * 100 * 0.5), radius * 1.5]\n    return SvgUtil.createSVGElement('path', {\n      class: 'dial__ico__leaf',\n      d: leafDef,\n      transform: 'translate(' + translate[0] + ',' + translate[1] + ')'\n    });\n  }\n\n  _buildChevrons(radius, rotation, id, scale, offset) {\n    const config = this._config;\n    const translation = rotation > 0 ? -1 : 1;\n    const width = config.chevron_size;\n    const chevron_def = [\"M\", 0, 0, \"L\", width / 2, width * 0.3, \"L\", width, 0].map((x) => isNaN(x) ? x : x * scale).join(' ');\n    const translate = [radius - width / 2 * scale * translation + offset, radius + 70 * scale * 1.1 * translation];\n    const chevron = SvgUtil.createSVGElement('path', {\n      class: `dial__chevron dial__chevron--${id}`,\n      d: chevron_def,\n      transform: `translate(${translate[0]},${translate[1]}) rotate(${rotation})`\n    });\n    return chevron;\n  }\n\n  _buildThermoIcon(radius) {\n    const thermoScale = radius / 3 / 100;\n    const thermoDef = 'M 37.999 38.261 V 7 c 0 -3.859 -3.141 -7 -7 -7 s -7 3.141 -7 7 v 31.261 c -3.545 2.547 -5.421 6.769 -4.919 11.151 c 0.629 5.482 5.066 9.903 10.551 10.512 c 0.447 0.05 0.895 0.074 1.339 0.074 c 2.956 0 5.824 -1.08 8.03 -3.055 c 2.542 -2.275 3.999 -5.535 3.999 -8.943 C 42.999 44.118 41.14 40.518 37.999 38.261 Z M 37.666 55.453 c -2.146 1.921 -4.929 2.8 -7.814 2.482 c -4.566 -0.506 -8.261 -4.187 -8.785 -8.752 c -0.436 -3.808 1.28 -7.471 4.479 -9.56 l 0.453 -0.296 V 38 h 1 c 0.553 0 1 -0.447 1 -1 s -0.447 -1 -1 -1 h -1 v -3 h 1 c 0.553 0 1 -0.447 1 -1 s -0.447 -1 -1 -1 h -1 v -3 h 1 c 0.553 0 1 -0.447 1 -1 s -0.447 -1 -1 -1 h -1 v -3 h 1 c 0.553 0 1 -0.447 1 -1 s -0.447 -1 -1 -1 h -1 v -3 h 1 c 0.553 0 1 -0.447 1 -1 s -0.447 -1 -1 -1 h -1 v -3 h 1 c 0.553 0 1 -0.447 1 -1 s -0.447 -1 -1 -1 h -1 V 8 h 1 c 0.553 0 1 -0.447 1 -1 s -0.447 -1 -1 -1 H 26.1 c 0.465 -2.279 2.484 -4 4.899 -4 c 2.757 0 5 2.243 5 5 v 1 h -1 c -0.553 0 -1 0.447 -1 1 s 0.447 1 1 1 h 1 v 3 h -1 c -0.553 0 -1 0.447 -1 1 s 0.447 1 1 1 h 1 v 3 h -1 c -0.553 0 -1 0.447 -1 1 s 0.447 1 1 1 h 1 v 3 h -1 c -0.553 0 -1 0.447 -1 1 s 0.447 1 1 1 h 1 v 3 h -1 c -0.553 0 -1 0.447 -1 1 s 0.447 1 1 1 h 1 v 3 h -1 c -0.553 0 -1 0.447 -1 1 s 0.447 1 1 1 h 1 v 4.329 l 0.453 0.296 c 2.848 1.857 4.547 4.988 4.547 8.375 C 40.999 50.841 39.784 53.557 37.666 55.453 Z'.split(' ').map((x) => isNaN(x) ? x : x * thermoScale).join(' ');\n    const translate = [radius - (thermoScale * 100 * 0.3), radius * 1.65]\n    return SvgUtil.createSVGElement('path', {\n      class: 'dial__ico__thermo',\n      d: thermoDef,\n      transform: 'translate(' + translate[0] + ',' + translate[1] + ')'\n    });\n  }\n\n  _buildDialSlot(index) {\n    return SvgUtil.createSVGElement('text', {\n      class: 'dial__lbl dial__lbl--ring',\n      id: `temperature_slot_${index}`\n    })\n  }\n\n  _buildText(radius, name, offset) {\n    const target = SvgUtil.createSVGElement('text', {\n      x: radius + offset,\n      y: radius,\n      class: `dial__lbl dial__lbl--${name}`,\n      id: name\n    });\n    const text = SvgUtil.createSVGElement('tspan', {\n    });\n    // hack\n    if (name == 'target' || name == 'ambient') offset += 20;\n    const superscript = SvgUtil.createSVGElement('tspan', {\n      x: radius + radius / 3.1 + offset,\n      y: radius - radius / 6,\n      class: `dial__lbl--super--${name}`\n    });\n    target.appendChild(text);\n    target.appendChild(superscript);\n    return target;\n  }\n\n  _buildControls(radius) {\n    let startAngle = 270;\n    let loop = 4;\n    for (let index = 0; index < loop; index++) {\n      const angle = 360 / loop;\n      const sector = SvgUtil.anglesToSectors(radius, startAngle, angle);\n      const controlsDef = 'M' + sector.L + ',' + sector.L + ' L' + sector.L + ',0 A' + sector.L + ',' + sector.L + ' 1 0,1 ' + sector.X + ', ' + sector.Y + ' z';\n      const path = SvgUtil.createSVGElement('path', {\n        class: 'dial__temperatureControl',\n        fill: 'blue',\n        d: controlsDef,\n        transform: 'rotate(' + sector.R + ', ' + sector.L + ', ' + sector.L + ')'\n      });\n      this._controls.push(path);\n      path.addEventListener('click', () => this._temperatureControlClicked(index));\n      this._root.appendChild(path);\n      startAngle = startAngle + angle;\n    }\n  }\n\n  _renderStyle() {\n    return `\n      .dial_container {\n        padding: 8px;\n      }\n      .dial_title {\n        font-size: 20px;\n        padding: 8px;\n        text-align: center;\n        color: var(--secondary-text-color);\n      }\n      .dial {\n        user-select: none;\n      \n        --thermostat-off-fill: #222;\n        --thermostat-path-color: rgba(255, 255, 255, 0.3);\n        --thermostat-heat-fill: #E36304;\n        --thermostat-cool-fill: #007AF1;\n        --thermostat-path-active-color: rgba(255, 255, 255, 0.8);\n        --thermostat-path-active-color-large: rgba(255, 255, 255, 1);\n        --thermostat-text-color: white;\n      }\n      .dial.has-thermo .dial__ico__leaf {\n        visibility: hidden;\n      }\n      .dial .dial__shape {\n        transition: fill 0.5s;\n      }\n      .dial__ico__leaf {\n        fill: #13EB13;\n        opacity: 0;\n        transition: opacity 0.5s;\n        pointer-events: none;\n      }\n      .dial.has-leaf .dial__ico__leaf {\n        display: block;\n        opacity: 1;\n        pointer-events: initial;\n      }\n      .dial__ico__thermo {\n        fill: var(--thermostat-path-active-color);\n        opacity: 0;\n        transition: opacity 0.5s;\n        pointer-events: none;\n      }\n      .dial.has-thermo .dial__ico__thermo {\n        display: block;\n        opacity: 1;\n        pointer-events: initial;\n      }\n      .dial__editableIndicator {\n        fill: white;\n        fill-rule: evenodd;\n        opacity: 0;\n        transition: opacity 0.5s;\n      }\n      .dial__temperatureControl {\n        fill: white;\n        opacity: 0;\n        transition: opacity 0.2s;\n      }\n      .dial__temperatureControl.control-visible {\n        opacity: 0.2;\n      }\n      .dial--edit .dial__editableIndicator {\n        opacity: 1;\n      }\n      .dial--state--off .dial__shape {\n        fill: var(--thermostat-off-fill);\n      }\n      .dial--state--heat .dial__shape {\n        fill: var(--thermostat-heat-fill);\n      }\n      .dial--state--cool .dial__shape {\n        fill: var(--thermostat-cool-fill);\n      }\n      .dial__ticks path {\n        fill: var(--thermostat-path-color);\n      }\n      .dial__ticks path.active {\n        fill: var(--thermostat-path-active-color);\n      }\n      .dial__ticks path.active.large {\n        fill: var(--thermostat-path-active-color-large);\n      }\n      .dial text, .dial text tspan {\n        fill: var(--thermostat-text-color);\n        text-anchor: middle;\n        font-family: Helvetica, sans-serif;\n        alignment-baseline: central;\n        dominant-baseline: central;\n      }\n      .dial__lbl--target {\n        font-size: 120px;\n        font-weight: bold;\n        visibility: hidden;\n      }\n      .dial__lbl--low, .dial__lbl--high {\n        font-size: 90px;\n        font-weight: bold;\n        visibility: hidden;\n      }\n      .dial.in_control .dial__lbl--target {\n        visibility: visible;\n      }\n      .dial.in_control .dial__lbl--low {\n        visibility: visible;\n      }\n      .dial.in_control .dial__lbl--high {\n        visibility: visible;\n      }\n      .dial__lbl--ambient {\n        font-size: 120px;\n        font-weight: bold;\n        visibility: visible;\n      }\n      .dial.in_control.has_dual .dial__chevron--low,\n      .dial.in_control.has_dual .dial__chevron--high {\n        visibility: visible;\n      }\n      .dial.in_control .dial__chevron--target {\n        visibility: visible;\n      }\n      .dial.in_control.has_dual .dial__chevron--target {\n        visibility: hidden;\n      }\n      .dial .dial__chevron {\n        visibility: hidden;\n        fill: none;\n        stroke: var(--thermostat-text-color);\n        stroke-width: 4px;\n        opacity: 0.3;\n      }\n      .dial .dial__chevron.pressed {\n        opacity: 1;\n      }\n      .dial.in_control .dial__lbl--ambient {\n        visibility: hidden;\n      }\n      .dial__lbl--super--ambient, .dial__lbl--super--target {\n        font-size: 40px;\n        font-weight: bold;\n      }\n      .dial__lbl--super--high, .dial__lbl--super--low {\n        font-size: 30px;\n        font-weight: bold;\n      }\n      .dial__lbl--ring {\n        font-size: 22px;\n        font-weight: bold;\n      }`\n  }\n}\n\nclass SvgUtil {\n  static createSVGElement(tag, attributes) {\n    const element = document.createElementNS('http://www.w3.org/2000/svg', tag);\n    this.attributes(element, attributes)\n    return element;\n  }\n  static attributes(element, attrs) {\n    for (let i in attrs) {\n      element.setAttribute(i, attrs[i]);\n    }\n  }\n  // Rotate a cartesian point about given origin by X degrees\n  static rotatePoint(point, angle, origin) {\n    const radians = angle * Math.PI / 180;\n    const x = point[0] - origin[0];\n    const y = point[1] - origin[1];\n    const x1 = x * Math.cos(radians) - y * Math.sin(radians) + origin[0];\n    const y1 = x * Math.sin(radians) + y * Math.cos(radians) + origin[1];\n    return [x1, y1];\n  }\n  // Rotate an array of cartesian points about a given origin by X degrees\n  static rotatePoints(points, angle, origin) {\n    return points.map((point) => this.rotatePoint(point, angle, origin));\n  }\n  // Given an array of points, return an SVG path string representing the shape they define\n  static pointsToPath(points) {\n    return points.map((point, iPoint) => (iPoint > 0 ? 'L' : 'M') + point[0] + ' ' + point[1]).join(' ') + 'Z';\n  }\n  static circleToPath(cx, cy, r) {\n    return [\n      \"M\", cx, \",\", cy,\n      \"m\", 0 - r, \",\", 0,\n      \"a\", r, \",\", r, 0, 1, \",\", 0, r * 2, \",\", 0,\n      \"a\", r, \",\", r, 0, 1, \",\", 0, 0 - r * 2, \",\", 0,\n      \"z\"\n    ].join(' ').replace(/\\s,\\s/g, \",\");\n  }\n  static donutPath(cx, cy, rOuter, rInner) {\n    return this.circleToPath(cx, cy, rOuter) + \" \" + this.circleToPath(cx, cy, rInner);\n  }\n\n  static superscript(number) {\n    return `${Math.floor(number)}${number % 1 != 0 ? '⁵' : ''}`;\n  }\n\n  // Restrict a number to a min + max range\n  static restrictToRange(val, min, max) {\n    if (val < min) return min;\n    if (val > max) return max;\n    return val;\n  }\n  static setClass(el, className, state) {\n    el.classList[state ? 'add' : 'remove'](className);\n  }\n\n  static anglesToSectors(radius, startAngle, angle) {\n    let aRad = 0 // Angle in Rad\n    let z = 0 // Size z\n    let x = 0 // Side x\n    let X = 0 // SVG X coordinate\n    let Y = 0 // SVG Y coordinate\n    const aCalc = (angle > 180) ? 360 - angle : angle;\n    aRad = aCalc * Math.PI / 180;\n    z = Math.sqrt(2 * radius * radius - (2 * radius * radius * Math.cos(aRad)));\n    if (aCalc <= 90) {\n      x = radius * Math.sin(aRad);\n    }\n    else {\n      x = radius * Math.sin((180 - aCalc) * Math.PI / 180);\n    }\n    Y = Math.sqrt(z * z - x * x);\n    if (angle <= 180) {\n      X = radius + x;\n    }\n    else {\n      X = radius - x;\n    }\n    return {\n      L: radius,\n      X: X,\n      Y: Y,\n      R: startAngle\n    }\n  }\n}"
  },
  {
    "path": "home-assistant/www/custom-lovelace/thermostat-card/LICENSE",
    "content": "The MIT License\n\nOriginal work Copyright (c) 2015 Dal Hundal\nModified work Copyright (c) 2018 Marius-Stefan Ciotlos & Silas Baronda\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "home-assistant/www/custom-lovelace/thermostat-card/README.md",
    "content": "# Thermostat Card\n\nA simple thermostat implemented in CSS based on <a href=\"https://codepen.io/dalhundal/pen/KpabZB/\">Nest Thermostat Control</a> by Dal Hundal\n (<a href=\"https://codepen.io/dalhundal\">@dalhundal</a>) on <a href=\"https://codepen.io\">CodePen</a>\n\n![thermostat](https://user-images.githubusercontent.com/7738048/42817026-7972be8e-89d5-11e8-994f-e5f556fb46fc.png)\n\n### TODO\nThere are many things still missing, but I'll add below those that I know of\n- [ ] Allow canceling of schedules for thermostats like Ecobee\n- [ ] Allow settings Away mode\n- [ ] Allow changing of Opration mode\n- [ ] Add support for multiple entities for different functions (zwave thermostats hot/cold, tado away mode, etc)\n- [ ] Title scaling\n\n**Options**\n\n| Name | Type | Default | Description\n| ---- | ---- | ------- | -----------\n| type | string | **Required** | `custom:thermostat-card`\n| entity | string | **Required** | The entity id of climate entity. Example: `climate.hvac`\n| title | string | optional | Card title\n| no_card | boolean | false | Set to true to avoid the card background and use the custom element in picture-elements.\n| hvac | object | optional | Allows mapping of custom states or using a custom attribute for state\n| step | number | 0.5 | The step to use when increasing or decreasing temperature\n| highlight_tap | boolean | false | Show the tap area highlight when changing temperature settings\n| chevron_size | number | 50 | Size of chevrons for temperature adjutment\n| pending | number | 3 | Seconds to wait in control mode until state changes are sent back to the server\n| idle_zone | number | 2 | Degrees of minimum difference between set points when thermostat supports both heating and cooling\n| ambient_temperature | string | optional | An entity id of a sensor to use as `ambient_temperature` instead of the one provided by the thermostat\n\n**hvac** object \n\n| Name | Type | Default | Description\n| ---- | ---- | ------- | -----------\n| states | optional | optional | A list of states. See examples.\n| attribute | string | optional | An attribute of the entity to use as state\n\n**Example**\n\n```yaml\nresources:\n  - url: /local/custom-lovelace/thermostat-card/thermostat-card.js?v=1\n    type: module\nname: My Awesome Home\nviews:\n  - title: Home\n    cards:\n      - type: custom:thermostat-card\n        title: Bedroom\n        entity: climate.ecobee\n```\n\n**Example with custom hvac_states**\n\n```yaml\nresources:\n  - url: /local/custom-lovelace/thermostat-card/thermostat-card.js?v=1\n    type: module\nname: My Awesome Home\nviews:\n  - title: Home\n    cards:\n      - type: custom:thermostat-card\n        title: Bedroom\n        entity: climate.hvac\n        chevron_size: 100\n        hvac:\n          states:\n            'Off': 'off'\n            'Cooling': 'cool'\n            'Heating': 'heat'\n          attribute: operation_mode\n```\n\nExample with external ambient sensor\n```yaml\n- type: custom:thermostat-card\n  title: Bedroom\n  entity: climate.ecobee\n  ambient_temperature: sensor.bedroom_temperature\n```\n\n⚠️ Make sure you set type to `module` when including the resource file.\n\n## License\nThis card uses MIT License as it uses a CodePen gist.\n\n## Credits\n[@silasb](https://github.com/silasb)\n[@ciotlosm](https://github.com/ciotlosm)"
  },
  {
    "path": "home-assistant/www/custom-lovelace/thermostat-card/VERSION",
    "content": "0.1.1"
  },
  {
    "path": "home-assistant/www/custom-lovelace/thermostat-card/changelog.md",
    "content": "## 0.1.1\nFix #155 for increments being only .5\n\n## 0.1.0\nAdd ability to specify external sensor for ambient temperature\n\n## 0.0.2\nFix alignment on Firefox\n\n## 0.0.1\nInitial release that supports versioning"
  },
  {
    "path": "home-assistant/www/custom-lovelace/thermostat-card/thermostat-card.js",
    "content": "import ThermostatUI from './thermostat-card.lib.js?v=0.1.1'\nclass ThermostatCard extends HTMLElement {\n  constructor() {\n    super();\n    this.attachShadow({ mode: 'open' });\n  }\n  set hass(hass) {\n    const config = this._config;\n    const entity = hass.states[config.entity];\n    let ambient_temperature = entity.attributes.current_temperature;\n    if (config.ambient_temperature && hass.states[config.ambient_temperature])\n      ambient_temperature = hass.states[config.ambient_temperature].state;\n    let hvac_state;\n    if (config.hvac.attribute)\n      hvac_state = entity.attributes[config.hvac.attribute];\n    else\n      hvac_state = entity.state;\n    const new_state = {\n      min_value: entity.attributes.min_temp,\n      max_value: entity.attributes.max_temp,\n      ambient_temperature: ambient_temperature,\n      target_temperature: entity.attributes.temperature,\n      target_temperature_low: entity.attributes.target_temp_low,\n      target_temperature_high: entity.attributes.target_temp_high,\n      hvac_state: config.hvac.states[hvac_state] || 'off',\n      away: (entity.attributes.away_mode == 'on' ? true : false),\n    }\n    if (!this._saved_state ||\n      (this._saved_state.min_value != new_state.min_value ||\n        this._saved_state.max_value != new_state.max_value ||\n        this._saved_state.ambient_temperature != new_state.ambient_temperature ||\n        this._saved_state.target_temperature != new_state.target_temperature ||\n        this._saved_state.target_temperature_low != new_state.target_temperature_low ||\n        this._saved_state.target_temperature_high != new_state.target_temperature_high ||\n        this._saved_state.hvac_state != new_state.hvac_state ||\n        this._saved_state.away != new_state.away)) {\n      this._saved_state = new_state;\n      this.thermostat.updateState(new_state);\n    }\n    this._hass = hass;\n  }\n\n  _controlSetPoints() {\n    if (this.thermostat.dual) {\n      if (this.thermostat.temperature.high != this._saved_state.target_temperature_high ||\n        this.thermostat.temperature.low != this._saved_state.target_temperature_low)\n        this._hass.callService('climate', 'set_temperature', {\n          entity_id: this._config.entity,\n          target_temp_high: this.thermostat.temperature.high,\n          target_temp_low: this.thermostat.temperature.low,\n        });\n    } else {\n      if (this.thermostat.temperature.target != this._saved_state.target_temperature)\n        this._hass.callService('climate', 'set_temperature', {\n          entity_id: this._config.entity,\n          temperature: this.thermostat.temperature.target,\n        });\n    }\n  }\n\n  setConfig(config) {\n    // Check config\n    if (!config.entity && config.entity.split(\".\")[0] === 'climate') {\n      throw new Error('Please define an entity');\n    }\n\n    // Cleanup DOM\n    const root = this.shadowRoot;\n    if (root.lastChild) root.removeChild(root.lastChild);\n\n    // Prepare config defaults\n    const cardConfig = Object.assign({}, config);\n    cardConfig.hvac = Object.assign({}, config.hvac);\n    if (!cardConfig.diameter) cardConfig.diameter = 400;\n    if (!cardConfig.pending) cardConfig.pending = 3;\n    if (!cardConfig.idle_zone) cardConfig.idle_zone = 2;\n    if (!cardConfig.step) cardConfig.step = 0.5;\n    if (!cardConfig.highlight_tap) cardConfig.highlight_tap = false;\n    if (!cardConfig.no_card) cardConfig.no_card = false;\n    if (!cardConfig.chevron_size) cardConfig.chevron_size = 50;\n    if (!cardConfig.num_ticks) cardConfig.num_ticks = 150;\n    if (!cardConfig.tick_degrees) cardConfig.tick_degrees = 300;\n    if (!cardConfig.hvac.states) cardConfig.hvac.states = { 'off': 'off', 'heat': 'heat', 'cool': 'cool', };\n\n    // Extra config values generated for simplicity of updates\n    cardConfig.radius = cardConfig.diameter / 2;\n    cardConfig.ticks_outer_radius = cardConfig.diameter / 30;\n    cardConfig.ticks_inner_radius = cardConfig.diameter / 8;\n    cardConfig.offset_degrees = 180 - (360 - cardConfig.tick_degrees) / 2;\n    cardConfig.control = this._controlSetPoints.bind(this);\n    this.thermostat = new ThermostatUI(cardConfig);\n\n    if (cardConfig.no_card === true) {\n      root.appendChild(this.thermostat.container);\n    }\n    else {\n      const card = document.createElement('ha-card');\n      card.style.padding = '5%';\n      card.appendChild(this.thermostat.container);\n      root.appendChild(card);\n    }\n    this._config = cardConfig;\n  }\n}\ncustomElements.define('thermostat-card', ThermostatCard);"
  },
  {
    "path": "home-assistant/www/custom-lovelace/thermostat-card/thermostat-card.lib.js",
    "content": "export default class ThermostatUI {\n  get container() {\n    return this._container\n  }\n  set dual(val) {\n    this._dual = val\n  }\n  get dual() {\n    return this._dual;\n  }\n  get in_control() {\n    return this._in_control;\n  }\n  get temperature() {\n    return {\n      low: this._low,\n      high: this._high,\n      target: this._target,\n    }\n  }\n  get ambient() {\n    return this._ambient;\n  }\n  set temperature(val) {\n    this._ambient = val.ambient;\n    this._low = val.low;\n    this._high = val.high;\n    this._target = val.target;\n    if (this._low && this._high) this.dual = true;\n  }\n  constructor(config) {\n    this._config = config; // need certain options for updates\n    this._ticks = []; // need for dynamic tick updates\n    this._controls = []; // need for managing highlight and clicks\n    this._dual = false; // by default is single temperature\n    this._container = document.createElement('div');\n    this._container.className = 'dial_container';\n    const style = document.createElement('style');\n    style.textContent = this._renderStyle();\n    if (config.title) this._container.appendChild(this._buildTitle(config.title));\n    this._container.appendChild(style);\n    const root = this._buildCore(config.diameter);\n    root.appendChild(this._buildDial(config.radius));\n    root.appendChild(this._buildTicks(config.num_ticks));\n    root.appendChild(this._buildRing(config.radius));\n    root.appendChild(this._buildLeaf(config.radius));\n    root.appendChild(this._buildThermoIcon(config.radius));\n    root.appendChild(this._buildDialSlot(1));\n    root.appendChild(this._buildDialSlot(2));\n    root.appendChild(this._buildDialSlot(3));\n\n    root.appendChild(this._buildText(config.radius, 'ambient', 0));\n    root.appendChild(this._buildText(config.radius, 'target', 0));\n    root.appendChild(this._buildText(config.radius, 'low', -config.radius / 2.5));\n    root.appendChild(this._buildText(config.radius, 'high', config.radius / 3));\n    root.appendChild(this._buildChevrons(config.radius, 0, 'low', 0.7, -config.radius / 2.5));\n    root.appendChild(this._buildChevrons(config.radius, 0, 'high', 0.7, config.radius / 3));\n    root.appendChild(this._buildChevrons(config.radius, 0, 'target', 1, 0));\n    root.appendChild(this._buildChevrons(config.radius, 180, 'low', 0.7, -config.radius / 2.5));\n    root.appendChild(this._buildChevrons(config.radius, 180, 'high', 0.7, config.radius / 3));\n    root.appendChild(this._buildChevrons(config.radius, 180, 'target', 1, 0));\n\n    this._container.appendChild(root);\n    this._root = root;\n    this._buildControls(config.radius);\n    this._root.addEventListener('click', () => this._enableControls());\n  }\n\n  updateState(options) {\n    const config = this._config;\n    const away = options.away || false;\n    this.min_value = options.min_value;\n    this.max_value = options.max_value;\n    this.hvac_state = options.hvac_state;\n    this.temperature = {\n      low: options.target_temperature_low,\n      high: options.target_temperature_high,\n      target: options.target_temperature,\n      ambient: options.ambient_temperature,\n    }\n\n    this._updateClass('has_dual', this.dual);\n    let tick_label, from, to;\n    const tick_indexes = [];\n    const ambient_index = SvgUtil.restrictToRange(Math.round((this.ambient - this.min_value) / (this.max_value - this.min_value) * config.num_ticks), 0, config.num_ticks - 1);\n    const target_index = SvgUtil.restrictToRange(Math.round((this._target - this.min_value) / (this.max_value - this.min_value) * config.num_ticks), 0, config.num_ticks - 1);\n    const high_index = SvgUtil.restrictToRange(Math.round((this._high - this.min_value) / (this.max_value - this.min_value) * config.num_ticks), 0, config.num_ticks - 1);\n    const low_index = SvgUtil.restrictToRange(Math.round((this._low - this.min_value) / (this.max_value - this.min_value) * config.num_ticks), 0, config.num_ticks - 1);\n    if (!this.dual) {\n      tick_label = [this._target, this.ambient].sort();\n      this._updateTemperatureSlot(tick_label[0], -8, `temperature_slot_1`);\n      this._updateTemperatureSlot(tick_label[1], 8, `temperature_slot_2`);\n      switch (this.hvac_state) {\n        case 'cool':\n          // active ticks\n          if (target_index < ambient_index) {\n            from = target_index;\n            to = ambient_index;\n          }\n          break;\n        case 'heat':\n          // active ticks\n          if (target_index > ambient_index) {\n            from = ambient_index;\n            to = target_index;\n          }\n          break;\n        default:\n      }\n    } else {\n      tick_label = [this._low, this._high, this.ambient].sort();\n      this._updateTemperatureSlot(null, 0, `temperature_slot_1`);\n      this._updateTemperatureSlot(null, 0, `temperature_slot_2`);\n      this._updateTemperatureSlot(null, 0, `temperature_slot_3`);\n      switch (this.hvac_state) {\n        case 'cool':\n          // active ticks\n          if (high_index < ambient_index) {\n            from = high_index;\n            to = ambient_index;\n            this._updateTemperatureSlot(this.ambient, 8, `temperature_slot_3`);\n            this._updateTemperatureSlot(this._high, -8, `temperature_slot_2`);\n          }\n          break;\n        case 'heat':\n          // active ticks\n          if (low_index > ambient_index) {\n            from = ambient_index;\n            to = low_index;\n            this._updateTemperatureSlot(this.ambient, -8, `temperature_slot_1`);\n            this._updateTemperatureSlot(this._low, 8, `temperature_slot_2`);\n          }\n          break;\n        case 'off':\n          // active ticks\n          if (high_index < ambient_index) {\n            from = high_index;\n            to = ambient_index;\n            this._updateTemperatureSlot(this.ambient, 8, `temperature_slot_3`);\n            this._updateTemperatureSlot(this._high, -8, `temperature_slot_2`);\n          }\n          if (low_index > ambient_index) {\n            from = ambient_index;\n            to = low_index;\n            this._updateTemperatureSlot(this.ambient, -8, `temperature_slot_1`);\n            this._updateTemperatureSlot(this._low, 8, `temperature_slot_2`);\n          }\n          break;\n        default:\n      }\n    }\n    tick_label.forEach(item => tick_indexes.push(SvgUtil.restrictToRange(Math.round((item - this.min_value) / (this.max_value - this.min_value) * config.num_ticks), 0, config.num_ticks - 1)));\n    this._updateTicks(from, to, tick_indexes);\n    this._updateClass('has-leaf', away);\n    this._updateHvacState();\n    this._updateText('ambient', this.ambient);\n    this._updateEdit(false);\n    this._updateClass('has-thermo', false);\n  }\n\n  _temperatureControlClicked(index) {\n    const config = this._config;\n    let chevron;\n    this._root.querySelectorAll('path.dial__chevron').forEach(el => SvgUtil.setClass(el, 'pressed', false));\n    if (this.in_control) {\n      if (this.dual) {\n        switch (index) {\n          case 0:\n            // clicked top left \n            chevron = this._root.querySelectorAll('path.dial__chevron--low')[1];\n            this._low = this._low + config.step;\n            if ((this._low + config.idle_zone) >= this._high) this._low = this._high - config.idle_zone;\n            break;\n          case 1:\n            // clicked top right\n            chevron = this._root.querySelectorAll('path.dial__chevron--high')[1];\n            this._high = this._high + config.step;\n            if (this._high > this.max_value) this._high = this.max_value;\n            break;\n          case 2:\n            // clicked bottom right\n            chevron = this._root.querySelectorAll('path.dial__chevron--high')[0];\n            this._high = this._high - config.step;\n            if ((this._high - config.idle_zone) <= this._low) this._high = this._low + config.idle_zone;\n            break;\n          case 3:\n            // clicked bottom left\n            chevron = this._root.querySelectorAll('path.dial__chevron--low')[0];\n            this._low = this._low - config.step;\n            if (this._low < this.min_value) this._low = this.min_value;\n            break;\n        }\n        SvgUtil.setClass(chevron, 'pressed', true);\n        setTimeout(() => SvgUtil.setClass(chevron, 'pressed', false), 200);\n        if (config.highlight_tap)\n          SvgUtil.setClass(this._controls[index], 'control-visible', true);\n      }\n      else {\n        if (index < 2) {\n          // clicked top\n          chevron = this._root.querySelectorAll('path.dial__chevron--target')[1];\n          this._target = this._target + config.step;\n          if (this._target > this.max_value) this._target = this.max_value;\n          if (config.highlight_tap) {\n            SvgUtil.setClass(this._controls[0], 'control-visible', true);\n            SvgUtil.setClass(this._controls[1], 'control-visible', true);\n          }\n        } else {\n          // clicked bottom\n          chevron = this._root.querySelectorAll('path.dial__chevron--target')[0];\n          this._target = this._target - config.step;\n          if (this._target < this.min_value) this._target = this.min_value;\n          if (config.highlight_tap) {\n            SvgUtil.setClass(this._controls[2], 'control-visible', true);\n            SvgUtil.setClass(this._controls[3], 'control-visible', true);\n          }\n        }\n        SvgUtil.setClass(chevron, 'pressed', true);\n        setTimeout(() => SvgUtil.setClass(chevron, 'pressed', false), 200);\n      }\n      if (config.highlight_tap) {\n        setTimeout(() => {\n          SvgUtil.setClass(this._controls[0], 'control-visible', false);\n          SvgUtil.setClass(this._controls[1], 'control-visible', false);\n          SvgUtil.setClass(this._controls[2], 'control-visible', false);\n          SvgUtil.setClass(this._controls[3], 'control-visible', false);\n        }, 200);\n      }\n    } else {\n      this._enableControls();\n    }\n  }\n\n  _updateEdit(show_edit) {\n    SvgUtil.setClass(this._root, 'dial--edit', show_edit);\n  }\n\n  _enableControls() {\n    const config = this._config;\n    this._in_control = true;\n    this._updateClass('in_control', this.in_control);\n    if (this._timeoutHandler) clearTimeout(this._timeoutHandler);\n    this._updateEdit(true);\n    this._updateClass('has-thermo', true);\n    this._updateText('target', this.temperature.target);\n    this._updateText('low', this.temperature.low);\n    this._updateText('high', this.temperature.high);\n    this._timeoutHandler = setTimeout(() => {\n      this._updateText('ambient', this.ambient);\n      this._updateEdit(false);\n      this._updateClass('has-thermo', false);\n      this._in_control = false;\n      this._updateClass('in_control', this.in_control);\n      config.control();\n    }, config.pending * 1000);\n  }\n\n  _updateClass(class_name, flag) {\n    SvgUtil.setClass(this._root, class_name, flag);\n  }\n\n  _updateText(id, value) {\n    const lblTarget = this._root.querySelector(`#${id}`).querySelectorAll('tspan');\n    const text = Math.floor(value);\n    if (value) {\n      lblTarget[0].textContent = text;\n      if (value % 1 != 0) {\n        lblTarget[1].textContent = Math.round(value % 1 * 10);\n      } else {\n        lblTarget[1].textContent = '';\n      }\n    }\n    if (this.in_control && id == 'target' && this.dual) {\n      lblTarget[0].textContent = '·';\n    }\n  }\n\n  _updateTemperatureSlot(value, offset, slot) {\n    const config = this._config;\n    const lblSlot1 = this._root.querySelector(`#${slot}`)\n    lblSlot1.textContent = value != null ? SvgUtil.superscript(value) : '';\n    const peggedValue = SvgUtil.restrictToRange(value, this.min_value, this.max_value);\n    const position = [config.radius, config.ticks_outer_radius - (config.ticks_outer_radius - config.ticks_inner_radius) / 2];\n    let degs = config.tick_degrees * (peggedValue - this.min_value) / (this.max_value - this.min_value) - config.offset_degrees + offset;\n    const pos = SvgUtil.rotatePoint(position, degs, [config.radius, config.radius]);\n    SvgUtil.attributes(lblSlot1, {\n      x: pos[0],\n      y: pos[1]\n    });\n  }\n\n  _updateHvacState() {\n    this._root.classList.forEach(c => {\n      if (c.indexOf('dial--state--') != -1)\n        this._root.classList.remove(c);\n    });\n    this._root.classList.add('dial--state--' + this.hvac_state);\n  }\n\n  _updateTicks(from, to, large_ticks) {\n    const config = this._config;\n\n    const tickPoints = [\n      [config.radius - 1, config.ticks_outer_radius],\n      [config.radius + 1, config.ticks_outer_radius],\n      [config.radius + 1, config.ticks_inner_radius],\n      [config.radius - 1, config.ticks_inner_radius]\n    ];\n    const tickPointsLarge = [\n      [config.radius - 1.5, config.ticks_outer_radius],\n      [config.radius + 1.5, config.ticks_outer_radius],\n      [config.radius + 1.5, config.ticks_inner_radius + 20],\n      [config.radius - 1.5, config.ticks_inner_radius + 20]\n    ];\n\n    this._ticks.forEach((tick, index) => {\n      let isLarge = false;\n      let isActive = (index >= from && index <= to) ? 'active' : '';\n      large_ticks.forEach(i => isLarge = isLarge || (index == i));\n      if (isLarge) isActive += ' large';\n      const theta = config.tick_degrees / config.num_ticks;\n      SvgUtil.attributes(tick, {\n        d: SvgUtil.pointsToPath(SvgUtil.rotatePoints(isLarge ? tickPointsLarge : tickPoints, index * theta - config.offset_degrees, [config.radius, config.radius])),\n        class: isActive\n      });\n    });\n  }\n\n  _buildCore(diameter) {\n    return SvgUtil.createSVGElement('svg', {\n      width: '100%',\n      height: '100%',\n      viewBox: '0 0 ' + diameter + ' ' + diameter,\n      class: 'dial'\n    })\n  }\n\n  _buildTitle(title) {\n    const lblTitle = document.createElement('div');\n    lblTitle.className = 'dial_title';\n    lblTitle.textContent = title;\n    return lblTitle;\n  }\n\n  // build black dial\n  _buildDial(radius) {\n    return SvgUtil.createSVGElement('circle', {\n      cx: radius,\n      cy: radius,\n      r: radius,\n      class: 'dial__shape'\n    })\n  }\n  // build circle around\n  _buildRing(radius) {\n    return SvgUtil.createSVGElement('path', {\n      d: SvgUtil.donutPath(radius, radius, radius - 4, radius - 8),\n      class: 'dial__editableIndicator',\n    })\n  }\n\n  _buildTicks(num_ticks) {\n    const tick_element = SvgUtil.createSVGElement('g', {\n      class: 'dial__ticks'\n    });\n    for (let i = 0; i < num_ticks; i++) {\n      const tick = SvgUtil.createSVGElement('path', {})\n      this._ticks.push(tick);\n      tick_element.appendChild(tick);\n    }\n    return tick_element;\n  }\n\n  _buildLeaf(radius) {\n    const leafScale = radius / 5 / 100;\n    const leafDef = [\"M\", 3, 84, \"c\", 24, 17, 51, 18, 73, -6, \"C\", 100, 52,\n      100, 22, 100, 4, \"c\", -13, 15, -37, 9, -70, 19, \"C\", 4, 32, 0, 63, 0,\n      76, \"c\", 6, -7, 18, -17, 33, -23, 24, -9, 34, -9, 48, -20, -9, 10,\n      -20, 16, -43, 24, \"C\", 22, 63, 8, 78, 3, 84, \"z\"].map((x) => isNaN(x) ? x : x * leafScale).join(' ');\n    const translate = [radius - (leafScale * 100 * 0.5), radius * 1.5]\n    return SvgUtil.createSVGElement('path', {\n      class: 'dial__ico__leaf',\n      d: leafDef,\n      transform: 'translate(' + translate[0] + ',' + translate[1] + ')'\n    });\n  }\n\n  _buildChevrons(radius, rotation, id, scale, offset) {\n    const config = this._config;\n    const translation = rotation > 0 ? -1 : 1;\n    const width = config.chevron_size;\n    const chevron_def = [\"M\", 0, 0, \"L\", width / 2, width * 0.3, \"L\", width, 0].map((x) => isNaN(x) ? x : x * scale).join(' ');\n    const translate = [radius - width / 2 * scale * translation + offset, radius + 70 * scale * 1.1 * translation];\n    const chevron = SvgUtil.createSVGElement('path', {\n      class: `dial__chevron dial__chevron--${id}`,\n      d: chevron_def,\n      transform: `translate(${translate[0]},${translate[1]}) rotate(${rotation})`\n    });\n    return chevron;\n  }\n\n  _buildThermoIcon(radius) {\n    const thermoScale = radius / 3 / 100;\n    const thermoDef = 'M 37.999 38.261 V 7 c 0 -3.859 -3.141 -7 -7 -7 s -7 3.141 -7 7 v 31.261 c -3.545 2.547 -5.421 6.769 -4.919 11.151 c 0.629 5.482 5.066 9.903 10.551 10.512 c 0.447 0.05 0.895 0.074 1.339 0.074 c 2.956 0 5.824 -1.08 8.03 -3.055 c 2.542 -2.275 3.999 -5.535 3.999 -8.943 C 42.999 44.118 41.14 40.518 37.999 38.261 Z M 37.666 55.453 c -2.146 1.921 -4.929 2.8 -7.814 2.482 c -4.566 -0.506 -8.261 -4.187 -8.785 -8.752 c -0.436 -3.808 1.28 -7.471 4.479 -9.56 l 0.453 -0.296 V 38 h 1 c 0.553 0 1 -0.447 1 -1 s -0.447 -1 -1 -1 h -1 v -3 h 1 c 0.553 0 1 -0.447 1 -1 s -0.447 -1 -1 -1 h -1 v -3 h 1 c 0.553 0 1 -0.447 1 -1 s -0.447 -1 -1 -1 h -1 v -3 h 1 c 0.553 0 1 -0.447 1 -1 s -0.447 -1 -1 -1 h -1 v -3 h 1 c 0.553 0 1 -0.447 1 -1 s -0.447 -1 -1 -1 h -1 v -3 h 1 c 0.553 0 1 -0.447 1 -1 s -0.447 -1 -1 -1 h -1 V 8 h 1 c 0.553 0 1 -0.447 1 -1 s -0.447 -1 -1 -1 H 26.1 c 0.465 -2.279 2.484 -4 4.899 -4 c 2.757 0 5 2.243 5 5 v 1 h -1 c -0.553 0 -1 0.447 -1 1 s 0.447 1 1 1 h 1 v 3 h -1 c -0.553 0 -1 0.447 -1 1 s 0.447 1 1 1 h 1 v 3 h -1 c -0.553 0 -1 0.447 -1 1 s 0.447 1 1 1 h 1 v 3 h -1 c -0.553 0 -1 0.447 -1 1 s 0.447 1 1 1 h 1 v 3 h -1 c -0.553 0 -1 0.447 -1 1 s 0.447 1 1 1 h 1 v 3 h -1 c -0.553 0 -1 0.447 -1 1 s 0.447 1 1 1 h 1 v 4.329 l 0.453 0.296 c 2.848 1.857 4.547 4.988 4.547 8.375 C 40.999 50.841 39.784 53.557 37.666 55.453 Z'.split(' ').map((x) => isNaN(x) ? x : x * thermoScale).join(' ');\n    const translate = [radius - (thermoScale * 100 * 0.3), radius * 1.65]\n    return SvgUtil.createSVGElement('path', {\n      class: 'dial__ico__thermo',\n      d: thermoDef,\n      transform: 'translate(' + translate[0] + ',' + translate[1] + ')'\n    });\n  }\n\n  _buildDialSlot(index) {\n    return SvgUtil.createSVGElement('text', {\n      class: 'dial__lbl dial__lbl--ring',\n      id: `temperature_slot_${index}`\n    })\n  }\n\n  _buildText(radius, name, offset) {\n    const target = SvgUtil.createSVGElement('text', {\n      x: radius + offset,\n      y: radius,\n      class: `dial__lbl dial__lbl--${name}`,\n      id: name\n    });\n    const text = SvgUtil.createSVGElement('tspan', {\n    });\n    // hack\n    if (name == 'target' || name == 'ambient') offset += 20;\n    const superscript = SvgUtil.createSVGElement('tspan', {\n      x: radius + radius / 3.1 + offset,\n      y: radius - radius / 6,\n      class: `dial__lbl--super--${name}`\n    });\n    target.appendChild(text);\n    target.appendChild(superscript);\n    return target;\n  }\n\n  _buildControls(radius) {\n    let startAngle = 270;\n    let loop = 4;\n    for (let index = 0; index < loop; index++) {\n      const angle = 360 / loop;\n      const sector = SvgUtil.anglesToSectors(radius, startAngle, angle);\n      const controlsDef = 'M' + sector.L + ',' + sector.L + ' L' + sector.L + ',0 A' + sector.L + ',' + sector.L + ' 1 0,1 ' + sector.X + ', ' + sector.Y + ' z';\n      const path = SvgUtil.createSVGElement('path', {\n        class: 'dial__temperatureControl',\n        fill: 'blue',\n        d: controlsDef,\n        transform: 'rotate(' + sector.R + ', ' + sector.L + ', ' + sector.L + ')'\n      });\n      this._controls.push(path);\n      path.addEventListener('click', () => this._temperatureControlClicked(index));\n      this._root.appendChild(path);\n      startAngle = startAngle + angle;\n    }\n  }\n\n  _renderStyle() {\n    return `\n      .dial_container {\n        padding: 8px;\n      }\n      .dial_title {\n        font-size: 20px;\n        padding: 8px;\n        text-align: center;\n        color: var(--secondary-text-color);\n      }\n      .dial {\n        user-select: none;\n      \n        --thermostat-off-fill: #222;\n        --thermostat-path-color: rgba(255, 255, 255, 0.3);\n        --thermostat-heat-fill: #E36304;\n        --thermostat-cool-fill: #007AF1;\n        --thermostat-path-active-color: rgba(255, 255, 255, 0.8);\n        --thermostat-path-active-color-large: rgba(255, 255, 255, 1);\n        --thermostat-text-color: white;\n      }\n      .dial.has-thermo .dial__ico__leaf {\n        visibility: hidden;\n      }\n      .dial .dial__shape {\n        transition: fill 0.5s;\n      }\n      .dial__ico__leaf {\n        fill: #13EB13;\n        opacity: 0;\n        transition: opacity 0.5s;\n        pointer-events: none;\n      }\n      .dial.has-leaf .dial__ico__leaf {\n        display: block;\n        opacity: 1;\n        pointer-events: initial;\n      }\n      .dial__ico__thermo {\n        fill: var(--thermostat-path-active-color);\n        opacity: 0;\n        transition: opacity 0.5s;\n        pointer-events: none;\n      }\n      .dial.has-thermo .dial__ico__thermo {\n        display: block;\n        opacity: 1;\n        pointer-events: initial;\n      }\n      .dial__editableIndicator {\n        fill: white;\n        fill-rule: evenodd;\n        opacity: 0;\n        transition: opacity 0.5s;\n      }\n      .dial__temperatureControl {\n        fill: white;\n        opacity: 0;\n        transition: opacity 0.2s;\n      }\n      .dial__temperatureControl.control-visible {\n        opacity: 0.2;\n      }\n      .dial--edit .dial__editableIndicator {\n        opacity: 1;\n      }\n      .dial--state--off .dial__shape {\n        fill: var(--thermostat-off-fill);\n      }\n      .dial--state--heat .dial__shape {\n        fill: var(--thermostat-heat-fill);\n      }\n      .dial--state--cool .dial__shape {\n        fill: var(--thermostat-cool-fill);\n      }\n      .dial__ticks path {\n        fill: var(--thermostat-path-color);\n      }\n      .dial__ticks path.active {\n        fill: var(--thermostat-path-active-color);\n      }\n      .dial__ticks path.active.large {\n        fill: var(--thermostat-path-active-color-large);\n      }\n      .dial text, .dial text tspan {\n        fill: var(--thermostat-text-color);\n        text-anchor: middle;\n        font-family: Helvetica, sans-serif;\n        alignment-baseline: central;\n        dominant-baseline: central;\n      }\n      .dial__lbl--target {\n        font-size: 120px;\n        font-weight: bold;\n        visibility: hidden;\n      }\n      .dial__lbl--low, .dial__lbl--high {\n        font-size: 90px;\n        font-weight: bold;\n        visibility: hidden;\n      }\n      .dial.in_control .dial__lbl--target {\n        visibility: visible;\n      }\n      .dial.in_control .dial__lbl--low {\n        visibility: visible;\n      }\n      .dial.in_control .dial__lbl--high {\n        visibility: visible;\n      }\n      .dial__lbl--ambient {\n        font-size: 120px;\n        font-weight: bold;\n        visibility: visible;\n      }\n      .dial.in_control.has_dual .dial__chevron--low,\n      .dial.in_control.has_dual .dial__chevron--high {\n        visibility: visible;\n      }\n      .dial.in_control .dial__chevron--target {\n        visibility: visible;\n      }\n      .dial.in_control.has_dual .dial__chevron--target {\n        visibility: hidden;\n      }\n      .dial .dial__chevron {\n        visibility: hidden;\n        fill: none;\n        stroke: var(--thermostat-text-color);\n        stroke-width: 4px;\n        opacity: 0.3;\n      }\n      .dial .dial__chevron.pressed {\n        opacity: 1;\n      }\n      .dial.in_control .dial__lbl--ambient {\n        visibility: hidden;\n      }\n      .dial__lbl--super--ambient, .dial__lbl--super--target {\n        font-size: 40px;\n        font-weight: bold;\n      }\n      .dial__lbl--super--high, .dial__lbl--super--low {\n        font-size: 30px;\n        font-weight: bold;\n      }\n      .dial__lbl--ring {\n        font-size: 22px;\n        font-weight: bold;\n      }`\n  }\n}\n\nclass SvgUtil {\n  static createSVGElement(tag, attributes) {\n    const element = document.createElementNS('http://www.w3.org/2000/svg', tag);\n    this.attributes(element, attributes)\n    return element;\n  }\n  static attributes(element, attrs) {\n    for (let i in attrs) {\n      element.setAttribute(i, attrs[i]);\n    }\n  }\n  // Rotate a cartesian point about given origin by X degrees\n  static rotatePoint(point, angle, origin) {\n    const radians = angle * Math.PI / 180;\n    const x = point[0] - origin[0];\n    const y = point[1] - origin[1];\n    const x1 = x * Math.cos(radians) - y * Math.sin(radians) + origin[0];\n    const y1 = x * Math.sin(radians) + y * Math.cos(radians) + origin[1];\n    return [x1, y1];\n  }\n  // Rotate an array of cartesian points about a given origin by X degrees\n  static rotatePoints(points, angle, origin) {\n    return points.map((point) => this.rotatePoint(point, angle, origin));\n  }\n  // Given an array of points, return an SVG path string representing the shape they define\n  static pointsToPath(points) {\n    return points.map((point, iPoint) => (iPoint > 0 ? 'L' : 'M') + point[0] + ' ' + point[1]).join(' ') + 'Z';\n  }\n  static circleToPath(cx, cy, r) {\n    return [\n      \"M\", cx, \",\", cy,\n      \"m\", 0 - r, \",\", 0,\n      \"a\", r, \",\", r, 0, 1, \",\", 0, r * 2, \",\", 0,\n      \"a\", r, \",\", r, 0, 1, \",\", 0, 0 - r * 2, \",\", 0,\n      \"z\"\n    ].join(' ').replace(/\\s,\\s/g, \",\");\n  }\n  static donutPath(cx, cy, rOuter, rInner) {\n    return this.circleToPath(cx, cy, rOuter) + \" \" + this.circleToPath(cx, cy, rInner);\n  }\n\n  static superscript(number) {\n    return `${Math.floor(number)}${number % 1 != 0 ? '⁵' : ''}`;\n  }\n\n  // Restrict a number to a min + max range\n  static restrictToRange(val, min, max) {\n    if (val < min) return min;\n    if (val > max) return max;\n    return val;\n  }\n  static setClass(el, className, state) {\n    el.classList[state ? 'add' : 'remove'](className);\n  }\n\n  static anglesToSectors(radius, startAngle, angle) {\n    let aRad = 0 // Angle in Rad\n    let z = 0 // Size z\n    let x = 0 // Side x\n    let X = 0 // SVG X coordinate\n    let Y = 0 // SVG Y coordinate\n    const aCalc = (angle > 180) ? 360 - angle : angle;\n    aRad = aCalc * Math.PI / 180;\n    z = Math.sqrt(2 * radius * radius - (2 * radius * radius * Math.cos(aRad)));\n    if (aCalc <= 90) {\n      x = radius * Math.sin(aRad);\n    }\n    else {\n      x = radius * Math.sin((180 - aCalc) * Math.PI / 180);\n    }\n    Y = Math.sqrt(z * z - x * x);\n    if (angle <= 180) {\n      X = radius + x;\n    }\n    else {\n      X = radius - x;\n    }\n    return {\n      L: radius,\n      X: X,\n      Y: Y,\n      R: startAngle\n    }\n  }\n}"
  },
  {
    "path": "home-assistant/www/custom-lovelace/transit/card.js",
    "content": "import { LitElement, html } from 'https://unpkg.com/@polymer/lit-element@0.6.5/lit-element.js?module';\n\nconst styles = html`\n  <style>\n    :host {\n      display: flex;\n      flex: 1;\n      flex-direction: column;\n    }\n    ha-card {\n      flex-direction: column;\n      flex: 1;\n      position: relative;\n      padding: 0px;\n      border-radius: 4px;\n      overflow: hidden;\n      background: #fff;\n      color: #484761;\n    }\n\n    .departure {\n      display: flex;\n      flex-direction: row;\n      border-bottom: 1px solid #e5e4e9;\n    }\n\n    .departure:last-child {\n      border-bottom: 0px;\n    }\n\n    .departure .minutes {\n      padding: 10px 0;\n      width: 35%;\n      border-right: 1px solid #e5e4e9;\n      text-align: center;\n      background-color: #f5f5f8;\n      font-size: 42px;\n      font-weight: 700;\n    }\n\n    .departure .minutes span {\n      font-size: 16px;\n      text-align: left;\n    }\n\n    .departure .details {\n      flex: 1;\n      display: flex;\n      flex-direction: column;\n    }\n\n    .departure .details-summary {\n      flex: 1;\n      display: flex;\n      align-items: center;\n      padding: 5px 0;\n    }\n\n    .departure .details-summary .details-line {\n      flex: 1;\n      padding-left: 20px;\n    }\n\n    .departure .details-direction {\n      text-align: right;\n      font-weight: 300;\n      font-size: 13px;\n      background-color: #f5f5f8;\n      padding-top: 3px;\n      padding-bottom: 3px;\n      padding-right: 20px;\n    }\n\n    .details-departure {\n      padding-right: 20px;\n      font-weight: bold;\n      text-decoration: underline;\n    }\n  </style>\n`\n\nclass TransitCard extends LitElement {\n  static get properties() {\n    return {\n      hass: Object,\n      config: Object\n    }\n  }\n\n  get entity() {\n    return this.hass.states[this.config.entity]\n  }\n\n  buildDepartureItem(departure) {\n    const { line, direction, time } = departure\n    const minutesLeft = Math.round((Date.parse(time.date) - Date.now()) / 1000 / 60)\n    return html`\n      <div class=\"departure\">\n        <div class=\"minutes\">\n          ${minutesLeft} <span>min</span>\n        </div>\n        <div class=\"details\">\n          <div class=\"details-summary\">\n            <div class=\"details-line\">\n              <ha-icon icon=\"${line.kind == 'tram' ? 'mdi:train' : 'mdi:bus'}\"></ha-icon>\n              ${line.name}\n            </div>\n\n            <div class=\"details-departure\">\n              ${time.formatted}\n            </div>\n          </div>\n\n          <div class=\"details-direction\">\n            <ha-icon icon=\"mdi:arrow-right\"></ha-icon>\n            ${direction.target.name}\n          </div>\n        </div>\n      </div>\n    `\n  }\n\n  render() {\n    const { attributes: { departures } } = this.entity\n\n    return html`\n      ${styles}\n      <ha-card>\n        <div class=\"departures\">\n          ${departures.map((departure) => this.buildDepartureItem(departure))}\n        </div>\n      </ha-card>\n    `\n  }\n\n  setConfig(config) {\n    this.config = config;\n  }\n\n  getCardSize() {\n    return 1;\n  }\n}\n\ncustomElements.define('transit-card', TransitCard);"
  },
  {
    "path": "home-assistant/www/custom-lovelace/vacuum/card.js",
    "content": "import { LitElement, html } from 'https://unpkg.com/@polymer/lit-element@0.6.5/lit-element.js?module';\n\nconst styles = html`\n  <style>\n    :host {\n      display: flex;\n      flex: 1;\n      flex-direction: column;\n    }\n    ha-card {\n      flex-direction: column;\n      flex: 1;\n      position: relative;\n      padding: 0px;\n      border-radius: 4px;\n      overflow: hidden;\n    }\n\n    .preview {\n      background: #319ef9; /* fallback for old browsers */\n      background: -webkit-linear-gradient(to bottom, #319ef9, #1566ba); /* Chrome 10-25, Safari 5.1-6 */\n      background: linear-gradient(to bottom, #319ef9, #1566ba); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */\n      cursor: pointer;\n      overflow: hidden;\n      position: relative;\n    }\n\n    .vacuum {\n      display: block;\n      max-width: 90%;\n      image-rendering: crisp-edges;\n      margin: 30px auto 20px auto;\n    }\n\n    .fill-gap {\n      flex-grow: 1;\n    }\n\n    .vacuum.cleaning {\n      animation: cleaning 1s steps(5, end) infinite;\n    }\n\n    .battery {\n      text-align: right;\n      font-weight: bold;\n      padding: 15px;\n    }\n\n    .status {\n      font-weight: bold;\n      padding: 15px 20px;\n      text-align: left;\n    }\n\n    .stats {\n      border-top: 1px solid rgba(255, 255, 255, 0.2);\n      display: flex;\n      flex-direction: row;\n      justify-content: space-evenly;\n    }\n\n    .stats-block {\n      margin: 10px 0px;\n      text-align: center;\n      border-right: 1px solid rgba(255, 255, 255, 0.2);\n      flex-grow: 1;\n    }\n\n    .stats-block:last-child {\n      border: 0px;\n    }\n\n    .stats-hours {\n      font-size: 20px;\n      font-weight: bold;\n    }\n\n    @keyframes cleaning {\n      0% {\n        transform: translate(0);\n      }\n\n      20% {\n        transform: translate(-2px, 2px);\n      }\n      40% {\n        transform: translate(-2px, -2px);\n      }\n      60% {\n        transform: translate(2px, 2px);\n      }\n      80% {\n        transform: translate(2px, -2px);\n      }\n      100% {\n        transform: translate(0);\n      }\n    }\n\n    ha-icon {\n      color: #fff;\n    }\n\n    .toolbar {\n      background: #fff;\n      min-height: 30px;\n      display: flex;\n      flex-direction: row;\n      justify-content: space-evenly;\n    }\n\n    .toolbar ha-icon-button {\n      color: #319ef9;\n      flex-direction: column;\n      width: 44px;\n      height: 54px;\n    }\n\n    .toolbar paper-button {\n      color: #319ef9;\n      flex-direction: column;\n      margin-right: 10px;\n      padding: 15px 10px;\n      cursor: pointer;\n    }\n\n    .toolbar ha-icon-button:last-child {\n      margin-right: 0px;\n    }\n\n    .toolbar ha-icon-button:active, .toolbar paper-button:active {\n      opacity: 0.4;\n      background: rgba(0, 0, 0, 0.1);\n    }\n\n    .toolbar paper-button {\n      color: #319ef9;\n      flex-direction: row;\n    }\n\n    .toolbar ha-icon {\n      color: #319ef9;\n      padding-right: 15px;\n    }\n\n    .header {\n      display: flex;\n      flex-direction: row;\n      justify-content: space-between;\n    }\n\n    .source-menu {\n      padding: 0;\n      margin-top: 15px;\n    }\n\n    .toolbar-split {\n      padding-right: 15px;\n    }\n  </style>\n`\n\nclass VacuumCard extends LitElement {\n  static get properties() {\n    return {\n      hass: Object,\n      config: Object,\n      mapUrl: String\n    }\n  }\n\n  get entity() {\n    return this.hass.states[this.config.entity]\n  }\n\n  get map() {\n    return this.hass.states[this.config.map]\n  }\n\n  firstUpdated() {\n    this.refresh()\n  }\n\n  refresh() {\n    const cleaning = this.entity.state !== 'docked'\n\n    const url = this.map.attributes.entity_picture + `&t=${(new Date()).getTime()}`\n    const img = new Image(); \n    img.onload = () => {\n      this.mapUrl = url\n      this.requestUpdate();\n      setTimeout(() => this.refresh(), cleaning ? 1000 : 5000)\n    }\n    img.src = url\n  }\n\n  handleMore() {\n    const e = new Event('hass-more-info', { bubbles: true, composed: true })\n    e.detail = { entityId: this.entity.entity_id }\n    this.dispatchEvent(e);\n  }\n\n  handleSpeed(e) {\n    const fan_speed = e.target.getAttribute('value');\n    this.callService('set_fan_speed', {\n      fan_speed\n    });\n  }\n\n  callService(service, options = {}) {\n    this.hass.callService('vacuum', service, {\n      entity_id: this.config.entity,\n      ...options\n    });\n  }\n\n  renderSource() {\n    const {\n      attributes: {\n        fan_speed: source,\n        fan_speed_list: sources\n      }\n    } = this.entity;\n\n    const selected = sources.indexOf(source);\n    return html`\n      <paper-menu-button class='source-menu' slot='dropdown-trigger'\n        .horizontalAlign=${'right'} .verticalAlign=${'top'}\n        .verticalOffset=${40} .noAnimations=${true}\n        @click='${(e) => e.stopPropagation()}'>\n        <paper-button class='source-menu__button' slot='dropdown-trigger'>\n          <span class='source-menu__source' show=${true}>\n            ${source}\n          </span>\n          <ha-icon icon=\"mdi:fan\"></ha-icon>\n        </paper-button>\n        <paper-listbox slot='dropdown-content' selected=${selected}\n          @click='${(e) => this.handleSpeed(e)}'>\n          ${sources.map(item => html`<paper-item value=${item}>${item}</paper-item>`)}\n        </paper-listbox>\n      </paper-menu-button>`;\n  }\n\n  renderVacuumStats() {\n    const { \n      attributes: {\n        main_brush_left,\n        side_brush_left,\n        filter_left,\n        sensor_dirty_left\n      }\n    } = this.entity\n\n    return html`\n      <div class=\"stats-block\">\n        <span class=\"stats-hours\">${filter_left}</span> <sup>hours</sup>\n        <div class=\"stats-subtitle\">Filter</div>\n      </div>\n      <div class=\"stats-block\">\n        <span class=\"stats-hours\">${side_brush_left}</span> <sup>hours</sup>\n        <div class=\"stats-subtitle\">Side brush</div>\n      </div>\n      <div class=\"stats-block\">\n        <span class=\"stats-hours\">${main_brush_left}</span> <sup>hours</sup>\n        <div class=\"stats-subtitle\">Main brush</div>\n      </div>\n      <div class=\"stats-block\">\n        <span class=\"stats-hours\">${sensor_dirty_left}</span> <sup>hours</sup>\n        <div class=\"stats-subtitle\">Sensors</div>\n      </div>\n    `\n  }\n\n  renderCleaningStats() {\n    const { \n      attributes: {\n        cleaned_area,\n        cleaning_time\n      }\n    } = this.entity\n\n    return html`\n      <div class=\"stats-block\">\n        <span class=\"stats-hours\">${cleaned_area}</span> m<sup>2</sup>\n        <div class=\"stats-subtitle\">Cleaning area</div>\n      </div>\n      <div class=\"stats-block\">\n        <span class=\"stats-hours\">${cleaning_time}</span> minutes\n        <div class=\"stats-subtitle\">Cleaning time</div>\n      </div>\n    `\n  }\n\n  renderCleaningToolbar() {\n    return html`\n      <div class=\"toolbar\">\n        <paper-button @click='${(e) => this.callService('return_to_base')}'>\n          <ha-icon icon=\"hass:home-map-marker\" ></ha-icon>\n          Return to dock\n        </paper-button>\n      </div>\n    `\n  }\n\n  renderDockedToolbar() {\n    const { actions } = this.config\n    const buttons = actions.map(({ name, service, icon }) => {\n      const execute = () => {\n        const args = service.split('.')\n        this.hass.callService(args[0], args[1]);\n      }\n      return html`<ha-icon-button icon=\"${icon}\" title=\"${name}\" @click='${execute}'></ha-icon-button>`\n    })\n\n    return html`\n      <div class=\"toolbar\">\n        <ha-icon-button  icon=\"hass:play\" \n                            title=\"Clean\" class=\"toolbar-icon\"\n                            @click='${(e) => this.callService('start')}'>\n        </ha-icon-button>\n        <ha-icon-button  icon=\"mdi:crosshairs-gps\" \n                            title=\"Locate vacuum\" class=\"toolbar-split\"\n                            @click='${(e) => this.callService('locate')}'>\n        </ha-icon-button>\n        <div class=\"fill-gap\"></div>\n        ${buttons}\n      </div>\n    `\n  }\n\n  render() {\n    const { \n      state, \n      attributes: {\n        status,\n        battery_level,\n        battery_icon,\n      }\n    } = this.entity\n\n    const cleaning = state !== 'docked'\n\n    return html`\n      ${styles}\n      <ha-card>\n        <div class=\"preview\" @click='${(e) => this.handleMore()}' ?more-info=true>\n          <div class=\"header\">\n            <div class=\"status\">${status}</div>\n            <div>\n              ${this.renderSource()}\n            </div>\n            <div class=\"battery\">\n              ${battery_level}% <ha-icon icon=\"${battery_icon}\"></ha-icon>\n            </div>\n          </div>\n\n          <img class=\"vacuum\" src=\"${this.mapUrl}\" />\n\n          <div class=\"stats\">\n            ${cleaning ? this.renderCleaningStats() : this.renderVacuumStats()}\n          </div>\n        </div>\n        ${cleaning ? this.renderCleaningToolbar() : this.renderDockedToolbar()}\n      </ha-card>\n    `\n  }\n\n  setConfig(config) {\n    this.config = config;\n  }\n\n  getCardSize() {\n    return 2;\n  }\n}\n\ncustomElements.define('vacuum-card', VacuumCard);\n"
  },
  {
    "path": "home-assistant/www/custom_ui/.gitkeep",
    "content": ""
  },
  {
    "path": "home-assistant/www/custom_ui/dynamic-wallpaper.js",
    "content": "const Wallpaper = {\n  viewDiv: null,\n  hass: null,\n  entityId: null,\n\n  timeOfDay: () => {\n    if (!Wallpaper.hass) {\n      return 'evening'\n    }\n\n    const entity = Wallpaper.hass.states[Wallpaper.entityId]\n    const {\n      state,\n      attributes: {\n        next_dawn,\n        next_dusk,\n        next_midnight,\n        next_noon,\n        next_rising,\n        next_setting\n      }\n    } = entity\n\n    const nextDawn = new Date(next_dawn); // świt\n    const nextRising = new Date(next_rising); // wschód\n    const nextNoon = new Date(next_noon); // południe\n    const nextSetting = new Date(next_setting); // zachód\n    const nextDusk = new Date(next_dusk); // zmierzch\n    const nextMidnight = new Date(next_midnight); // północ\n\n    const now = new Date();\n\n    let timeOfDay = 'night';\n\n    if (nextRising > nextSetting) {\n      if (nextRising < now) {\n        timeOfDay = 'morning';\n      } else {\n        timeOfDay = 'afternoon';\n      }\n    } else {\n      if (nextDusk < now) {\n        timeOfDay = 'evening';\n      } else {\n        timeOfDay = 'night';\n      }\n    }\n\n    return timeOfDay\n  },\n\n  refresh: () => {\n    Wallpaper.viewDiv.style.background = `linear-gradient( rgba(0,0,0,.5), rgba(0,0,0,.5) ), url(\"/local/wallpapers/${Wallpaper.timeOfDay()}.png\") fixed center bottom/cover`;\n    Wallpaper.viewDiv.style.marginTop = '0px';\n    window.dispatchEvent(new Event('resize'))\n  }\n}\n\nconst docRoot = document.querySelector('home-assistant').shadowRoot;\nconst main = docRoot.querySelector('home-assistant-main').shadowRoot;\nconst viewDiv = main.querySelector('ha-panel-lovelace').shadowRoot.querySelector('hui-root').shadowRoot.querySelector('ha-app-layout').querySelector('[id=\"view\"]');\n\nWallpaper.viewDiv = viewDiv\n\nsetInterval(Wallpaper.refresh, 100)\n\nclass DynamicWallpaper extends HTMLElement {\n  set hass(hass) {\n    Wallpaper.hass = hass\n    Wallpaper.entityId = this.config.entity\n    Wallpaper.refresh()\n  }\n\n  setConfig(config) {\n    this.config = config;\n  }\n\n  getCardSize() {\n    return 0;\n  }\n}\n\ncustomElements.define('dynamic-wallpaper', DynamicWallpaper);\n"
  },
  {
    "path": "home-assistant/www/custom_ui/kkm-card.js",
    "content": "import { LitElement, html } from 'https://unpkg.com/@polymer/lit-element@0.6.5/lit-element.js?module';\n\nconst styles = html`\n  <style>\n    :host {\n      display: flex;\n      flex: 1;\n      flex-direction: column;\n    }\n    ha-card {\n      flex-direction: column;\n      flex: 1;\n      padding: 16px;\n      position: relative;\n      cursor: pointer;\n    }\n\n    ha-card > div {\n      padding: 20px 0 0 8px;\n    }\n    ha-card > div:first-child {\n      padding-top: 0;\n    }\n    .flex {\n      display: flex;\n      display: -webkit-flex;\n      min-width: 0;\n    }\n    .name {\n      align-items: center;\n      min-width: 0;\n      opacity: .8;\n    }\n    .name > span {\n      font-size: 1.2rem;\n      font-weight: 500;\n      max-height: 1.4rem;\n      opacity: .75;\n    }\n    .icon {\n      color: var(--paper-item-icon-color, #44739e);\n      display: inline-block;\n      flex: 0 0 24px;\n      margin-right: 8px;\n      text-align: center;\n      width: 24px;\n    }\n\n    .subinfo {\n      color: var(--paper-item-icon-color, #44739e);\n      font-size: 1.0em;\n      margin-top: 0px;\n      padding-top: 3px;\n      padding-left: 40px;\n    }\n\n    .info {\n      flex-wrap: wrap;\n      font-weight: 300;\n      text-align: center;\n    }\n\n    .state {\n      display: inline-block;\n      font-size: 3.4em;\n      line-height: 1em;\n      margin-right: 4px;\n      max-size: 100%;\n    }\n\n    .uom {\n      align-self: flex-end;\n      display: inline-block;\n      font-size: 2.4em;\n      font-weight: 400;\n      line-height: 1.2em;\n      margin-top: .1em;\n      opacity: .6;\n      vertical-align: bottom;\n    }\n    \n    .ellipsis {\n      overflow: hidden;\n      text-overflow: ellipsis;\n      white-space: nowrap;\n    }\n  </style>\n`\n\nclass KKMCard extends LitElement {\n  static get properties() {\n    return {\n      hass: Object,\n      config: Object,\n    }\n  }\n\n  get entity() {\n    return this.hass.states[this.config.entity_id]\n  }\n\n  handleMore() {\n    const e = new Event('hass-more-info', { bubbles: true, composed: true })\n    e.detail = { entityId: this.entity.entity_id }\n    this.dispatchEvent(e);\n  }\n\n  render() {\n    const { state, attributes: { friendly_name, days, lines, expire_at } } = this.entity\n    return html`\n      ${styles}\n      <ha-card @click='${(e) => this.handleMore()}' ?more-info=true>\n        <div class='header flex'>\n          <div class='icon'>\n            <ha-icon icon='mdi:train'></ha-icon>\n          </div>\n          <div class='name flex'>\n            <span class='ellipsis'>${friendly_name}</span>\n          </div>\n        </div>\n        <div class='subinfo flex'>\n          <b>Linie: </b> ${lines.join(', ')}\n        </div>\n        <div class='info'>\n          <span class='state ellipsis'>${days}</span>\n          <span class='uom ellipsis'>dni</span>\n        </div>\n      </ha-card>\n    `\n  }\n\n  setConfig(config) {\n    this.config = config;\n  }\n\n  // @TODO: This requires more intelligent logic\n  getCardSize() {\n    return 1;\n  }\n}\n\ncustomElements.define('kkm-card', KKMCard);"
  },
  {
    "path": "home-assistant/www/custom_ui/monster-card.js",
    "content": "class MonsterCard extends HTMLElement {\n\n  _getEntities(hass, filters) {\n    function _filterEntityId(stateObj, pattern) {\n      if (pattern.indexOf('*') === -1) {\n        return stateObj.entity_id === pattern;\n      }\n      const regEx = new RegExp(`^${pattern.replace(/\\*/g, '.*')}$`, 'i');\n      return stateObj.entity_id.search(regEx) === 0;\n    }\n    function _filterName(stateObj, pattern) {\n      let compareEntity = stateObj.attributes.title ? stateObj.attributes.title : stateObj.attributes.friendly_name;\n      if (!compareEntity) compareEntity = stateObj.entity_id;\n      if (pattern.indexOf('*') === -1) {\n        return compareEntity === pattern;\n      }\n      const regEx = new RegExp(`^${pattern.replace(/\\*/g, '.*')}$`, 'i');\n      return compareEntity.search(regEx) === 0;\n    }\n    // Allows '< 300' in b\n    function _complexCompare(a, b) {\n      const _compare = {\n        '>': (x, y) => x > y,\n        '<': (x, y) => x < y,\n        '<=': (x, y) => x <= y,\n        '>=': (x, y) => x >= y,\n        '=': (x, y) => x === y,\n      };\n      let operator = '=';\n      let y = b;\n      let x = a;\n      if (!isNaN(a) && typeof (b) == 'string'\n        && b.split(\" \").length > 1) {\n        [operator, y] = b.split(' ', 2);\n        x = parseFloat(a);\n      }\n      return _compare[operator](x, y);\n    }\n    const entities = new Map();\n    filters.forEach((filter) => {\n      const filters = [];\n      if (filter.domain) {\n        filters.push(stateObj => stateObj.entity_id.split('.', 1)[0] === filter.domain);\n      }\n      if (filter.attributes) {\n        Object.keys(filter.attributes).forEach(key => {\n          filters.push(stateObj => _complexCompare(stateObj.attributes[key], filter.attributes[key]));\n        });\n      }\n      if (filter.entity_id) {\n        filters.push(stateObj => _filterEntityId(stateObj, filter.entity_id));\n      }\n      if (filter.name) {\n        filters.push(stateObj => _filterName(stateObj, filter.name));\n      }\n      if (filter.state) {\n        filters.push(stateObj => _complexCompare(stateObj.state, filter.state));\n      }\n\n      const options = filter.options ? filter.options : {}\n\n      Object.keys(hass.states).sort().forEach(key => {\n        if (filters.every(filterFunc => filterFunc(hass.states[key]))) {\n          entities.set(hass.states[key].entity_id, Object.assign({ \"entity\": hass.states[key].entity_id }, options));\n        }\n      });\n    });\n    return Array.from(entities.values());\n  }\n\n  setConfig(config) {\n    if (!config.filter.include || !Array.isArray(config.filter.include)) {\n      throw new Error('Please define filters');\n    }\n\n    if (this.lastChild) this.removeChild(this.lastChild);\n\n    const cardConfig = Object.assign({}, config);\n    if (!cardConfig.card) cardConfig.card = {};\n    if (config.card.entities) delete config.card.entities;\n    if (!cardConfig.card.type) cardConfig.card.type = 'entities';\n\n    const element = document.createElement(`hui-${cardConfig.card.type}-card`);\n    this.appendChild(element);\n\n    this._config = cardConfig;\n  }\n\n  set hass(hass) {\n    const config = this._config;\n    let entities = this._getEntities(hass, config.filter.include);\n    if (config.filter.exclude) {\n      const excludeEntities = this._getEntities(hass, config.filter.exclude).map(entity => entity.entity);\n      entities = entities.filter(entity => !excludeEntities.includes(entity.entity));\n    }\n\n\n\n    if (entities.length === 0 && config.show_empty === false) {\n      this.style.display = 'none';\n    } else {\n      if (config.when && (hass.states[config.when.entity].state == config.when.state) || !config.when) {\n        this.style.display = 'block';\n      } else {\n        this.style.display = 'none';\n      }\n    }\n\n    if (!config.card.entities || config.card.entities.length !== entities.length ||\n      !config.card.entities.every((value, index) => value.entity === entities[index].entity)) {\n      config.card.entities = entities;\n      this.lastChild.setConfig(config.card);\n    }\n    this.lastChild.hass = hass;\n  }\n\n  getCardSize() {\n    return 'getCardSize' in this.lastChild ? this.lastChild.getCardSize() : 1;\n  }\n}\n\ncustomElements.define('monster-card', MonsterCard);\n"
  },
  {
    "path": "home-assistant/www/js/lovelace-swiper.js",
    "content": "//Config\nconst swiperWrapAround = true;\nconst swiperHorizontalSwipeIgnore = 20;\n\nvar xDown = null;\nvar xUp = null;\nvar yDown = null;\nvar yUp = null;\n\nconst paperTabs = document.querySelectorAll('home-assistant')[0].shadowRoot.querySelector('home-assistant-main').shadowRoot.querySelector('app-drawer-layout').querySelector('ha-panel-lovelace').shadowRoot.querySelector('hui-root').shadowRoot.querySelectorAll('paper-tab');\nconst numberOfTabs = paperTabs.length;\n\ndocument.body.addEventListener('touchstart', handleTouchStart, false);\ndocument.body.addEventListener('touchmove', storeTouchMove, false);\ndocument.body.addEventListener('touchend', handleTouchEnd, false);\n\nfunction getCurrentTabIndex() {\n  for (let i = 0; i < numberOfTabs; i++) { \n    if(paperTabs[i].classList.contains('iron-selected')) {\n      return i;\n    }\n  }\n}\n\nfunction getTouches(evt) {\n  return evt.touches ||        // browser API\n    evt.originalEvent.touches; // jQuery\n}\n\nfunction handleTouchStart(evt) {\n  xDown = getTouches(evt)[0].clientX;\n  yDown = getTouches(evt)[0].clientY;\n  xUp = xDown;\n  yUp = yDown;\n}\n\nfunction storeTouchMove(evt) {\n  xUp = getTouches(evt)[0].clientX;\n  yUp = getTouches(evt)[0].clientY;\n}\n\nfunction handleTouchEnd(evt) {\n    if(!xUp || !yUp) {\n      return;\n    }\n    evt.stopPropagation();\n    var xDiff = xDown - xUp;\n    var yDiff = yDown - yUp;\n    if (Math.abs(xDiff) < swiperHorizontalSwipeIgnore) {\n      //ignore minor swipe horizontal\n      return;\n    }\n    if (Math.abs(xDiff) > Math.abs(yDiff)) {\n    var currentIndex = getCurrentTabIndex();\n    var targetIndex = currentIndex;\n    if (xDiff > 0) {\n      /* right to left swipe */\n      if(currentIndex === numberOfTabs-1) {\n\t\tif(!swiperWrapAround) {\n\t\t  return;\n\t\t}\n\t\ttargetIndex = 0;\n      } else {\n        targetIndex = currentIndex+1;\n      }\n    } else {\n      /* left to right swipe */\n      if(currentIndex === 0) {\n\t\tif(!swiperWrapAround) {\n\t\t  return;\n\t\t}\n\t\ttargetIndex = numberOfTabs-1;\n      } else {\n        targetIndex = currentIndex-1;\n      }\n    }\n    paperTabs[targetIndex].dispatchEvent(new MouseEvent('click', {shiftKey: true}));\n  }\n  xDown = null;\n  xUp = null;\n  yDown = null;\n  yUp = null;\n}"
  },
  {
    "path": "home-assistant/www/kiosk/kiosk.js",
    "content": "const { ipcRenderer } = require('electron')\nclass KioskApp {\n  constructor() {\n    const style = document.createElement('style');\n    style.type = 'text/css';\n    style.appendChild(document.createTextNode(`\n      ::-webkit-scrollbar { \n        display: none; \n      }\n    `));\n\n    document.body.appendChild(style);\n\n    document.body.addEventListener('touchstart', function(e) {\n      ipcRenderer.send('kiosk:wake');\n    });\n    ipcRenderer.send('kiosk:wake');\n  }\n}\n\nwindow.kioskApp = new KioskApp();\n"
  },
  {
    "path": "home-assistant/www/ping.txt",
    "content": "kopytko\n"
  },
  {
    "path": "home-assistant/zwave_device_config.yaml",
    "content": "sensor.fibaro_system_fgrm223_roller_shutter_controller_3_energy:\n  ignored: false\n  polling_intensity: 10\nsensor.cover_power:\n  ignored: false\n  polling_intensity: 10\ncover.living_room:\n  ignored: false\n  polling_intensity: 10\n"
  },
  {
    "path": "mkdocs.yml",
    "content": "nav:\n  - Home: index.md\n  - Getting Started: Software/GettingStarted.md\n  - Hardware: Hardware/index.md\n  - Home Assistant:\n    - Screens: HomeAssistant/Screens/index.md\n    - Presence Detection: HomeAssistant/PresenceDetection.md\n    - Custom Components: HomeAssistant/Components.md\n    - Lovelace: HomeAssistant/Lovelace/index.md\n    - Vacuum: HomeAssistant/Vacuum/index.md\n    - AppDaemon: HomeAssistant/AppDaemon.md\n    - Voice Control: HomeAssistant/VoiceControl/index.md\n  - Software:\n    - Overview: Software/Overview.md\n    - Nginx: Software/Nginx.md\n    - Dashboard: Software/TvDashboard.md\n    - AdGuard: Software/PiHole.md\n    - DeGoogling: Software/Degoogling.md\n    - EspHome: Software/EspHome.md\n    - Development: Software/Development.md\n    - Upgrading: Software/Upgrading.md \n    - Control Scripts: Software/ControlScript.md\n    - Ports: Software/Ports.md\n    - Encryption: Software/Encryption.md\n    - Backup: Software/Backup.md\n  - Services:\n    - Uptime Robot: Services/UpTimeRobot.md\n  - DIY:\n    - Riggad Lamp: DIY/RiggadLamp/index.md\n    - Led Strips: DIY/LedStrips/index.md\n    - Cat Feeder: DIY/CatFeeder/index.md\n  - References: References.md\n\ntheme:\n  logo: './logo.svg'\n  font: false\n  name: 'material'\n  palette:\n    primary: 'Red'\n    accent: 'Red'\nrepo_name: 'macbury/SmartHouse'\nrepo_url: 'https://github.com/macbury/SmartHouse'\nextra:\n  disqus: macbury-github-io\n  social:\n    - link: 'http://macbury.ninja'\n      type: 'globe'\n    - type: 'github'\n      link: 'https://github.com/macbury/SmartHouse/'\n    - type: 'twitter'\n      link: 'https://twitter.com/macbury'\n    - type: 'linkedin'\n      link: 'https://www.linkedin.com/in/arkadiusz-buras-83041810/'\nmarkdown_extensions:\n  - codehilite\n  - toc:\n      permalink: true\n  - pymdownx.emoji:\n      emoji_generator: !!python/name:pymdownx.emoji.to_svg\n\ncopyright: 'Copyright &copy; 2019 Buras Arkadiusz'\nsite_author: 'Arkadiusz Buras'\nsite_name: MacBury Smart House\nsite_url: 'https://macbury.github.io/SmartHouse'\nsite_description: 'All stuff that is needed to run my smart house'\n"
  },
  {
    "path": "mosquitto/mosquitto.conf",
    "content": "allow_anonymous false\npassword_file /mosquitto/data/users.db\n\npersistence true\npersistence_location /mosquitto/data/\nlog_dest stdout\nlog_dest file /mosquitto/log/mosquitto.log\nport 4105\n"
  },
  {
    "path": "nextcloud/Dockerfile",
    "content": "FROM nextcloud:24.0.1-fpm\r\n\r\nRUN set -ex; \\\r\n    \\\r\n    apt-get update; \\\r\n    apt-get install -y --no-install-recommends \\\r\n        ffmpeg \\\r\n        libmagickcore-6.q16-6-extra \\\r\n        procps \\\r\n        smbclient \\\r\n        supervisor \\\r\n#       libreoffice \\\r\n    ; \\\r\n    rm -rf /var/lib/apt/lists/*\r\n\r\nRUN set -ex; \\\r\n    \\\r\n    savedAptMark=\"$(apt-mark showmanual)\"; \\\r\n    \\\r\n    apt-get update; \\\r\n    apt-get install -y --no-install-recommends \\\r\n        libbz2-dev \\\r\n        libc-client-dev \\\r\n        libkrb5-dev \\\r\n        libsmbclient-dev \\\r\n    ; \\\r\n    \\\r\n    docker-php-ext-configure imap --with-kerberos --with-imap-ssl; \\\r\n    docker-php-ext-install \\\r\n        bz2 \\\r\n        imap \\\r\n    ; \\\r\n    pecl install smbclient; \\\r\n    docker-php-ext-enable smbclient; \\\r\n    \\\r\n# reset apt-mark's \"manual\" list so that \"purge --auto-remove\" will remove all build dependencies\r\n    apt-mark auto '.*' > /dev/null; \\\r\n    apt-mark manual $savedAptMark; \\\r\n    ldd \"$(php -r 'echo ini_get(\"extension_dir\");')\"/*.so \\\r\n        | awk '/=>/ { print $3 }' \\\r\n        | sort -u \\\r\n        | xargs -r dpkg-query -S \\\r\n        | cut -d: -f1 \\\r\n        | sort -u \\\r\n        | xargs -rt apt-mark manual; \\\r\n    \\\r\n    apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \\\r\n    rm -rf /var/lib/apt/lists/*\r\n\r\nRUN mkdir -p \\\r\n    /var/log/supervisord \\\r\n    /var/run/supervisord \\\r\n;\r\n\r\nCOPY supervisord.conf /\r\nCOPY www.conf /usr/local/etc/php-fpm.d/www.conf\r\nENV NEXTCLOUD_UPDATE=1\r\n\r\nCMD [\"/usr/bin/supervisord\", \"-c\", \"/supervisord.conf\"]\r\n"
  },
  {
    "path": "nextcloud/Upgrade.md",
    "content": "docker exec -u 33 -it support_nextcloud_1 bash\n./occ maintenance:mode --on\n./occ upgrade\n./occ maintenance:mode --off\n"
  },
  {
    "path": "nextcloud/supervisord.conf",
    "content": "[supervisord]\r\nnodaemon=true\r\nlogfile=/var/log/supervisord/supervisord.log\r\npidfile=/var/run/supervisord/supervisord.pid\r\nchildlogdir=/var/log/supervisord/\r\nlogfile_maxbytes=50MB                           ; maximum size of logfile before rotation\r\nlogfile_backups=10                              ; number of backed up logfiles\r\nloglevel=error\r\n\r\n[program:php-fpm]\r\nstdout_logfile=/dev/stdout\r\nstdout_logfile_maxbytes=0\r\nstderr_logfile=/dev/stderr\r\nstderr_logfile_maxbytes=0\r\ncommand=php-fpm\r\n\r\n[program:cron]\r\nstdout_logfile=/dev/stdout\r\nstdout_logfile_maxbytes=0\r\nstderr_logfile=/dev/stderr\r\nstderr_logfile_maxbytes=0\r\ncommand=/cron.sh\r\n"
  },
  {
    "path": "nextcloud/www.conf",
    "content": "; Start a new pool named 'www'.\n; the variable $pool can be used in any directive and will be replaced by the\n; pool name ('www' here)\n[www]\n\n; Per pool prefix\n; It only applies on the following directives:\n; - 'access.log'\n; - 'slowlog'\n; - 'listen' (unixsocket)\n; - 'chroot'\n; - 'chdir'\n; - 'php_values'\n; - 'php_admin_values'\n; When not set, the global prefix (or NONE) applies instead.\n; Note: This directive can also be relative to the global prefix.\n; Default Value: none\n;prefix = /path/to/pools/$pool\n\n; Unix user/group of processes\n; Note: The user is mandatory. If the group is not set, the default user's group\n;       will be used.\nuser = www-data\ngroup = www-data\n\n; The address on which to accept FastCGI requests.\n; Valid syntaxes are:\n;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on\n;                            a specific port;\n;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on\n;                            a specific port;\n;   'port'                 - to listen on a TCP socket to all addresses\n;                            (IPv6 and IPv4-mapped) on a specific port;\n;   '/path/to/unix/socket' - to listen on a unix socket.\n; Note: This value is mandatory.\nlisten = 127.0.0.1:9000\n\n; Set listen(2) backlog.\n; Default Value: 511 (-1 on FreeBSD and OpenBSD)\n;listen.backlog = 511\n\n; Set permissions for unix socket, if one is used. In Linux, read/write\n; permissions must be set in order to allow connections from a web server. Many\n; BSD-derived systems allow connections regardless of permissions. The owner\n; and group can be specified either by name or by their numeric IDs.\n; Default Values: user and group are set as the running user\n;                 mode is set to 0660\n;listen.owner = www-data\n;listen.group = www-data\n;listen.mode = 0660\n; When POSIX Access Control Lists are supported you can set them using\n; these options, value is a comma separated list of user/group names.\n; When set, listen.owner and listen.group are ignored\n;listen.acl_users =\n;listen.acl_groups =\n\n; List of addresses (IPv4/IPv6) of FastCGI clients which are allowed to connect.\n; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original\n; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address\n; must be separated by a comma. If this value is left blank, connections will be\n; accepted from any ip address.\n; Default Value: any\n;listen.allowed_clients = 127.0.0.1\n\n; Specify the nice(2) priority to apply to the pool processes (only if set)\n; The value can vary from -19 (highest priority) to 20 (lower priority)\n; Note: - It will only work if the FPM master process is launched as root\n;       - The pool processes will inherit the master process priority\n;         unless it specified otherwise\n; Default Value: no set\n; process.priority = -19\n\n; Set the process dumpable flag (PR_SET_DUMPABLE prctl) even if the process user\n; or group is different than the master process user. It allows to create process\n; core dump and ptrace the process for the pool user.\n; Default Value: no\n; process.dumpable = yes\n\n; Choose how the process manager will control the number of child processes.\n; Possible Values:\n;   static  - a fixed number (pm.max_children) of child processes;\n;   dynamic - the number of child processes are set dynamically based on the\n;             following directives. With this process management, there will be\n;             always at least 1 children.\n;             pm.max_children      - the maximum number of children that can\n;                                    be alive at the same time.\n;             pm.start_servers     - the number of children created on startup.\n;             pm.min_spare_servers - the minimum number of children in 'idle'\n;                                    state (waiting to process). If the number\n;                                    of 'idle' processes is less than this\n;                                    number then some children will be created.\n;             pm.max_spare_servers - the maximum number of children in 'idle'\n;                                    state (waiting to process). If the number\n;                                    of 'idle' processes is greater than this\n;                                    number then some children will be killed.\n;  ondemand - no children are created at startup. Children will be forked when\n;             new requests will connect. The following parameter are used:\n;             pm.max_children           - the maximum number of children that\n;                                         can be alive at the same time.\n;             pm.process_idle_timeout   - The number of seconds after which\n;                                         an idle process will be killed.\n; Note: This value is mandatory.\npm = dynamic\n\n; The number of child processes to be created when pm is set to 'static' and the\n; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'.\n; This value sets the limit on the number of simultaneous requests that will be\n; served. Equivalent to the ApacheMaxClients directive with mpm_prefork.\n; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP\n; CGI. The below defaults are based on a server without much resources. Don't\n; forget to tweak pm.* to fit your needs.\n; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand'\n; Note: This value is mandatory.\npm.max_children = 120\n\n; The number of child processes created on startup.\n; Note: Used only when pm is set to 'dynamic'\n; Default Value: (min_spare_servers + max_spare_servers) / 2\npm.start_servers = 12\n\n; The desired minimum number of idle server processes.\n; Note: Used only when pm is set to 'dynamic'\n; Note: Mandatory when pm is set to 'dynamic'\npm.min_spare_servers = 6\n\n; The desired maximum number of idle server processes.\n; Note: Used only when pm is set to 'dynamic'\n; Note: Mandatory when pm is set to 'dynamic'\npm.max_spare_servers = 18\n\n; The number of seconds after which an idle process will be killed.\n; Note: Used only when pm is set to 'ondemand'\n; Default Value: 10s\n;pm.process_idle_timeout = 10s;\n\n; The number of requests each child process should execute before respawning.\n; This can be useful to work around memory leaks in 3rd party libraries. For\n; endless request processing specify '0'. Equivalent to PHP_FCGI_MAX_REQUESTS.\n; Default Value: 0\n;pm.max_requests = 500\n\n; The URI to view the FPM status page. If this value is not set, no URI will be\n; recognized as a status page. It shows the following information:\n;   pool                 - the name of the pool;\n;   process manager      - static, dynamic or ondemand;\n;   start time           - the date and time FPM has started;\n;   start since          - number of seconds since FPM has started;\n;   accepted conn        - the number of request accepted by the pool;\n;   listen queue         - the number of request in the queue of pending\n;                          connections (see backlog in listen(2));\n;   max listen queue     - the maximum number of requests in the queue\n;                          of pending connections since FPM has started;\n;   listen queue len     - the size of the socket queue of pending connections;\n;   idle processes       - the number of idle processes;\n;   active processes     - the number of active processes;\n;   total processes      - the number of idle + active processes;\n;   max active processes - the maximum number of active processes since FPM\n;                          has started;\n;   max children reached - number of times, the process limit has been reached,\n;                          when pm tries to start more children (works only for\n;                          pm 'dynamic' and 'ondemand');\n; Value are updated in real time.\n; Example output:\n;   pool:                 www\n;   process manager:      static\n;   start time:           01/Jul/2011:17:53:49 +0200\n;   start since:          62636\n;   accepted conn:        190460\n;   listen queue:         0\n;   max listen queue:     1\n;   listen queue len:     42\n;   idle processes:       4\n;   active processes:     11\n;   total processes:      15\n;   max active processes: 12\n;   max children reached: 0\n;\n; By default the status page output is formatted as text/plain. Passing either\n; 'html', 'xml' or 'json' in the query string will return the corresponding\n; output syntax. Example:\n;   http://www.foo.bar/status\n;   http://www.foo.bar/status?json\n;   http://www.foo.bar/status?html\n;   http://www.foo.bar/status?xml\n;\n; By default the status page only outputs short status. Passing 'full' in the\n; query string will also return status for each pool process.\n; Example:\n;   http://www.foo.bar/status?full\n;   http://www.foo.bar/status?json&full\n;   http://www.foo.bar/status?html&full\n;   http://www.foo.bar/status?xml&full\n; The Full status returns for each process:\n;   pid                  - the PID of the process;\n;   state                - the state of the process (Idle, Running, ...);\n;   start time           - the date and time the process has started;\n;   start since          - the number of seconds since the process has started;\n;   requests             - the number of requests the process has served;\n;   request duration     - the duration in       s of the requests;\n;   request method       - the request method (GET, POST, ...);\n;   request URI          - the request URI with the query string;\n;   content length       - the content length of the request (only with POST);\n;   user                 - the user (PHP_AUTH_USER) (or '-' if not set);\n;   script               - the main script called (or '-' if not set);\n;   last request cpu     - the %cpu the last request consumed\n;                          it's always 0 if the process is not in Idle state\n;                          because CPU calculation is done when the request\n;                          processing has terminated;\n;   last request memory  - the max amount of memory the last request consumed\n;                          it's always 0 if the process is not in Idle state\n;                          because memory calculation is done when the request\n;                          processing has terminated;\n; If the process is in Idle state, then informations are related to the\n; last request the process has served. Otherwise informations are related to\n; the current request being served.\n; Example output:\n;   ************************\n;   pid:                  31330\n;   state:                Running\n;   start time:           01/Jul/2011:17:53:49 +0200\n;   start since:          63087\n;   requests:             12808\n;   request duration:     1250261\n;   request method:       GET\n;   request URI:          /test_mem.php?N=10000\n;   content length:       0\n;   user:                 -\n;   script:               /home/fat/web/docs/php/test_mem.php\n;   last request cpu:     0.00\n;   last request memory:  0\n;\n; Note: There is a real-time FPM status monitoring sample web page available\n;       It's available in: /usr/local/share/php/fpm/status.html\n;\n; Note: The value must start with a leading slash (/). The value can be\n;       anything, but it may not be a good idea to use the .php extension or it\n;       may conflict with a real PHP file.\n; Default Value: not set\n;pm.status_path = /status\n\n; The address on which to accept FastCGI status request. This creates a new\n; invisible pool that can handle requests independently. This is useful\n; if the main pool is busy with long running requests because it is still possible\n; to get the status before finishing the long running requests.\n;\n; Valid syntaxes are:\n;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on\n;                            a specific port;\n;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on\n;                            a specific port;\n;   'port'                 - to listen on a TCP socket to all addresses\n;                            (IPv6 and IPv4-mapped) on a specific port;\n;   '/path/to/unix/socket' - to listen on a unix socket.\n; Default Value: value of the listen option\n;pm.status_listen = 127.0.0.1:9001\n\n; The ping URI to call the monitoring page of FPM. If this value is not set, no\n; URI will be recognized as a ping page. This could be used to test from outside\n; that FPM is alive and responding, or to\n; - create a graph of FPM availability (rrd or such);\n; - remove a server from a group if it is not responding (load balancing);\n; - trigger alerts for the operating team (24/7).\n; Note: The value must start with a leading slash (/). The value can be\n;       anything, but it may not be a good idea to use the .php extension or it\n;       may conflict with a real PHP file.\n; Default Value: not set\n;ping.path = /ping\n\n; This directive may be used to customize the response of a ping request. The\n; response is formatted as text/plain with a 200 response code.\n; Default Value: pong\n;ping.response = pong\n\n; The access log file\n; Default: not set\n;access.log = log/$pool.access.log\n\n; The access log format.\n; The following syntax is allowed\n;  %%: the '%' character\n;  %C: %CPU used by the request\n;      it can accept the following format:\n;      - %{user}C for user CPU only\n;      - %{system}C for system CPU only\n;      - %{total}C  for user + system CPU (default)\n;  %d: time taken to serve the request\n;      it can accept the following format:\n;      - %{seconds}d (default)\n;      - %{milliseconds}d\n;      - %{mili}d\n;      - %{microseconds}d\n;      - %{micro}d\n;  %e: an environment variable (same as $_ENV or $_SERVER)\n;      it must be associated with embraces to specify the name of the env\n;      variable. Some examples:\n;      - server specifics like: %{REQUEST_METHOD}e or %{SERVER_PROTOCOL}e\n;      - HTTP headers like: %{HTTP_HOST}e or %{HTTP_USER_AGENT}e\n;  %f: script filename\n;  %l: content-length of the request (for POST request only)\n;  %m: request method\n;  %M: peak of memory allocated by PHP\n;      it can accept the following format:\n;      - %{bytes}M (default)\n;      - %{kilobytes}M\n;      - %{kilo}M\n;      - %{megabytes}M\n;      - %{mega}M\n;  %n: pool name\n;  %o: output header\n;      it must be associated with embraces to specify the name of the header:\n;      - %{Content-Type}o\n;      - %{X-Powered-By}o\n;      - %{Transfert-Encoding}o\n;      - ....\n;  %p: PID of the child that serviced the request\n;  %P: PID of the parent of the child that serviced the request\n;  %q: the query string\n;  %Q: the '?' character if query string exists\n;  %r: the request URI (without the query string, see %q and %Q)\n;  %R: remote IP address\n;  %s: status (response code)\n;  %t: server time the request was received\n;      it can accept a strftime(3) format:\n;      %d/%b/%Y:%H:%M:%S %z (default)\n;      The strftime(3) format must be encapsuled in a %{<strftime_format>}t tag\n;      e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t\n;  %T: time the log has been written (the request has finished)\n;      it can accept a strftime(3) format:\n;      %d/%b/%Y:%H:%M:%S %z (default)\n;      The strftime(3) format must be encapsuled in a %{<strftime_format>}t tag\n;      e.g. for a ISO8601 formatted timestring, use: %{%Y-%m-%dT%H:%M:%S%z}t\n;  %u: remote user\n;\n; Default: \"%R - %u %t \\\"%m %r\\\" %s\"\n;access.format = \"%R - %u %t \\\"%m %r%Q%q\\\" %s %f %{mili}d %{kilo}M %C%%\"\n\n; The log file for slow requests\n; Default Value: not set\n; Note: slowlog is mandatory if request_slowlog_timeout is set\n;slowlog = log/$pool.log.slow\n\n; The timeout for serving a single request after which a PHP backtrace will be\n; dumped to the 'slowlog' file. A value of '0s' means 'off'.\n; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)\n; Default Value: 0\n;request_slowlog_timeout = 0\n\n; Depth of slow log stack trace.\n; Default Value: 20\n;request_slowlog_trace_depth = 20\n\n; The timeout for serving a single request after which the worker process will\n; be killed. This option should be used when the 'max_execution_time' ini option\n; does not stop script execution for some reason. A value of '0' means 'off'.\n; Available units: s(econds)(default), m(inutes), h(ours), or d(ays)\n; Default Value: 0\n;request_terminate_timeout = 0\n\n; The timeout set by 'request_terminate_timeout' ini option is not engaged after\n; application calls 'fastcgi_finish_request' or when application has finished and\n; shutdown functions are being called (registered via register_shutdown_function).\n; This option will enable timeout limit to be applied unconditionally\n; even in such cases.\n; Default Value: no\n;request_terminate_timeout_track_finished = no\n\n; Set open file descriptor rlimit.\n; Default Value: system defined value\n;rlimit_files = 1024\n\n; Set max core size rlimit.\n; Possible Values: 'unlimited' or an integer greater or equal to 0\n; Default Value: system defined value\n;rlimit_core = 0\n\n; Chroot to this directory at the start. This value must be defined as an\n; absolute path. When this value is not set, chroot is not used.\n; Note: you can prefix with '$prefix' to chroot to the pool prefix or one\n; of its subdirectories. If the pool prefix is not set, the global prefix\n; will be used instead.\n; Note: chrooting is a great security feature and should be used whenever\n;       possible. However, all PHP paths will be relative to the chroot\n;       (error_log, sessions.save_path, ...).\n; Default Value: not set\n;chroot =\n\n; Chdir to this directory at the start.\n; Note: relative path can be used.\n; Default Value: current directory or / when chroot\n;chdir = /var/www\n\n; Redirect worker stdout and stderr into main error log. If not set, stdout and\n; stderr will be redirected to /dev/null according to FastCGI specs.\n; Note: on highloaded environment, this can cause some delay in the page\n; process time (several ms).\n; Default Value: no\n;catch_workers_output = yes\n\n; Decorate worker output with prefix and suffix containing information about\n; the child that writes to the log and if stdout or stderr is used as well as\n; log level and time. This options is used only if catch_workers_output is yes.\n; Settings to \"no\" will output data as written to the stdout or stderr.\n; Default value: yes\n;decorate_workers_output = no\n\n; Clear environment in FPM workers\n; Prevents arbitrary environment variables from reaching FPM worker processes\n; by clearing the environment in workers before env vars specified in this\n; pool configuration are added.\n; Setting to \"no\" will make all environment variables available to PHP code\n; via getenv(), $_ENV and $_SERVER.\n; Default Value: yes\n;clear_env = no\n\n; Limits the extensions of the main script FPM will allow to parse. This can\n; prevent configuration mistakes on the web server side. You should only limit\n; FPM to .php extensions to prevent malicious users to use other extensions to\n; execute php code.\n; Note: set an empty value to allow all extensions.\n; Default Value: .php\n;security.limit_extensions = .php .php3 .php4 .php5 .php7\n\n; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from\n; the current environment.\n; Default Value: clean env\n;env[HOSTNAME] = $HOSTNAME\n;env[PATH] = /usr/local/bin:/usr/bin:/bin\n;env[TMP] = /tmp\n;env[TMPDIR] = /tmp\n;env[TEMP] = /tmp\n\n; Additional php.ini defines, specific to this pool of workers. These settings\n; overwrite the values previously defined in the php.ini. The directives are the\n; same as the PHP SAPI:\n;   php_value/php_flag             - you can set classic ini defines which can\n;                                    be overwritten from PHP call 'ini_set'.\n;   php_admin_value/php_admin_flag - these directives won't be overwritten by\n;                                     PHP call 'ini_set'\n; For php_*flag, valid values are on, off, 1, 0, true, false, yes or no.\n\n; Defining 'extension' will load the corresponding shared extension from\n; extension_dir. Defining 'disable_functions' or 'disable_classes' will not\n; overwrite previously defined php.ini values, but will append the new value\n; instead.\n\n; Note: path INI options can be relative and will be expanded with the prefix\n; (pool, global or /usr/local)\n\n; Default Value: nothing is defined by default except the values in php.ini and\n;                specified at startup with the -d argument\n;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com\n;php_flag[display_errors] = off\n;php_admin_value[error_log] = /var/log/fpm-php.www.log\n;php_admin_flag[log_errors] = on\n;php_admin_value[memory_limit] = 32M\n\n\n\n\n\n"
  },
  {
    "path": "node-red/Dockerfile",
    "content": "FROM nodered/node-red:latest-12\n\nUSER root\n\nRUN apk update && apk add py3-setuptools ffmpeg\nRUN curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl\nRUN chmod a+rx /usr/local/bin/youtube-dl\nRUN youtube-dl --version\nUSER node-red\n\n"
  },
  {
    "path": "notes/Dockerfile",
    "content": "FROM ubuntu:16.04\n\nENV PROJECT_DIR=/data/src/\n\nRUN DEBIAN_FRONTEND=noninteractive \\\n    apt-get -y update && \\\n    apt-get -y install git build-essential ruby-dev ruby-rails libz-dev libmysqlclient-dev curl tzdata && \\\n    curl -sL https://deb.nodesource.com/setup_6.x | bash - && \\\n    apt-get -y update && \\\n    apt-get -y install nodejs && \\\n    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \\\n    apt-get autoremove -y && \\\n    apt-get clean\n\nWORKDIR $PROJECT_DIR\n\nRUN git clone https://github.com/standardfile/ruby-server.git $PROJECT_DIR\nADD entrypoint .\nRUN chmod +x entrypoint\nRUN bundle install\nRUN bundle exec rake assets:precompile\n\nEXPOSE 3000\n\nENTRYPOINT [ \"./docker/entrypoint\" ]\nCMD [ \"start\" ]"
  },
  {
    "path": "notes/entrypoint",
    "content": "#!/usr/bin/env sh\n# $0 is a script name,\n# $1, $2, $3 etc are passed arguments\n# $1 is our command\nCMD=$1\n\ncase \"$CMD\" in\n  'start' )\n    echo `pwd`\n    rm -f /data/src/tmp/pids/server.pid\n    bundle exec rails s -b 0.0.0.0\n    ;;\n\n  'bootstrap' )\n    bundle exec rails db:create db:migrate\n    ;;\n\n   * )\n    # Run custom command. Thanks to this line we can still use\n    # \"docker run our_image /bin/bash\" and it will work\n    exec \"$@\"\n    ;;\nesac"
  },
  {
    "path": "orion/Dockerfile",
    "content": "FROM ubuntu:18.04\n\nEXPOSE 5000\n\nRUN apt-get update && apt-get install \\\n  -y --no-install-recommends curl libmysqlclient-dev python-dev python python-setuptools python-pip build-essential git ca-certificates\n\n\nRUN pip install setuptools --upgrade\nRUN git clone https://github.com/LINKIWI/orion-server.git /server\n\nWORKDIR /server\n\nRUN pip install -r requirements.txt\nRUN mkdir -p /etc/orion\nADD config.json /etc/orion/config.json\n\nENV PYTHONPATH /server\nADD entrypoint.sh .\nADD web/index.html .\nADD web/main.js .\nRUN chmod +x ./entrypoint.sh\nCMD [\"bash\", \"entrypoint.sh\"]"
  },
  {
    "path": "orion/config.example.json",
    "content": "{\n  \"database\": {\n    \"host\": \"mysql\",\n    \"port\": 3306,\n    \"name\": \"orion\",\n    \"user\": \"orion\",\n    \"password\": \"super-secret-password\"\n  },\n  \"redis\": {\n    \"addr\": \"redis:6379\"\n  },\n  \"frontend_url\": \"http://orion.example.com\",\n  \"mapbox_access_token\": \"pk.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"\n}"
  },
  {
    "path": "orion/entrypoint.sh",
    "content": "python -m SimpleHTTPServer 8080 &\npython orion/server.py"
  },
  {
    "path": "panel/index.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"UTF-8\">\n    <style type=\"text/css\">\n      body, html {\n        height: 100%;\n      }\n\n      body {\n        display: flex;\n        flex-direction: column;\n        padding: 0px;\n        margin: 0px;\n        background: #20232a;\n        border: none;\n        color: #202020;\n        font-size: 15px;\n        -webkit-font-smoothing: antialiased;\n        -moz-osx-font-smoothing: grayscale;\n        align-items: center;\n        justify-content: center;\n      }\n\n      img {\n        width: 128px;\n        height: 128px;\n      }\n\n      .ha-iframe {\n        z-index: 1000;\n        position: absolute;\n        top: 0px;\n        bottom: 0px;\n        left: 0px;\n        right: 0px;\n        width: 100%;\n        height: 100%;\n        background: #fff;\n        border: 0px;\n      }\n\n      .spinner {\n        width: 50px;\n        height: 40px;\n        text-align: center;\n        font-size: 10px;\n        margin: 10px auto;\n      }\n\n      .spinner > div {\n        background-color: #fff;\n        height: 100%;\n        width: 6px;\n        display: inline-block;\n        \n        -webkit-animation: sk-stretchdelay 1.2s infinite ease-in-out;\n        animation: sk-stretchdelay 1.2s infinite ease-in-out;\n      }\n\n      .spinner .rect2 {\n        -webkit-animation-delay: -1.1s;\n        animation-delay: -1.1s;\n      }\n\n      .spinner .rect3 {\n        -webkit-animation-delay: -1.0s;\n        animation-delay: -1.0s;\n      }\n\n      .spinner .rect4 {\n        -webkit-animation-delay: -0.9s;\n        animation-delay: -0.9s;\n      }\n\n      .spinner .rect5 {\n        -webkit-animation-delay: -0.8s;\n        animation-delay: -0.8s;\n      }\n\n      @-webkit-keyframes sk-stretchdelay {\n        0%, 40%, 100% { -webkit-transform: scaleY(0.4) }  \n        20% { -webkit-transform: scaleY(1.0) }\n      }\n\n      @keyframes sk-stretchdelay {\n        0%, 40%, 100% { \n          transform: scaleY(0.4);\n          -webkit-transform: scaleY(0.4);\n        }  20% { \n          transform: scaleY(1.0);\n          -webkit-transform: scaleY(1.0);\n        }\n      }\n    </style>\n  </head>\n  <body>\n    <div class=\"container\">\n      <img src=\"./logo.svg\" />\n      <div class=\"spinner\">\n        <div class=\"rect1\"></div>\n        <div class=\"rect2\"></div>\n        <div class=\"rect3\"></div>\n        <div class=\"rect4\"></div>\n        <div class=\"rect5\"></div>\n      </div>\n    </div>\n\n    <script>\n      require('./renderer.js')\n    </script>\n  </body>\n</html>\n"
  },
  {
    "path": "panel/main.js",
    "content": "// Modules to control application life and create native browser window\nconst { app, BrowserWindow, ipcMain } = require('electron')\nconst WakeUp = require('./wakeup')\nconst argv = require('yargs').argv\n\napp.commandLine.appendSwitch('--enable-touch-events')\napp.commandLine.appendSwitch('touch-events', 'enabled');\napp.commandLine.appendSwitch('pinch', 'enabled');\napp.commandLine.appendSwitch('smooth-scrolling', 'enabled');\napp.commandLine.appendSwitch('scroll-prediction', 'enabled');\n\nif (!argv.host) {\n  console.error(\"Set --host= flag to point your home assistant instance\")\n  process.exit(127)\n}\n\n// Keep a global reference of the window object, if you don't, the window will\n// be closed automatically when the JavaScript object is garbage collected.\nlet mainWindow\n\nconst extendHaScript = `\n  const script = document.createElement('script');\n  script.type = \"module\";\n  script.src = '/local/kiosk/kiosk.js?'+(new Date()).getTime();\n  document.body.appendChild(script);\n`\n\nfunction createWindow () {\n  const production = !!argv.production\n  // Create the browser window.\n  mainWindow = new BrowserWindow({\n    title: 'SmartHouse',\n    width: 1366, \n    height: 768,\n    movable: !production,\n    alwaysOnTop: production,\n    fullscreen: production,\n    showCursor: false,\n    acceptFirstMouse: true,\n    kiosk: production,\n    webPreferences: {\n      devTools: !production,\n      experimentalFeatures: true,\n      nodeIntegration: true,\n      plugins: true,\n      allowDisplayingInsecureContent: true,\n      scrollBounce: false\n    }\n  })\n\n  // and load the index.html of the app.\n  mainWindow.loadFile('index.html')\n  mainWindow.argv = argv\n\n  // Open the DevTools.\n  if (argv.dev) {\n    mainWindow.webContents.openDevTools()\n  }\n\n  // Emitted when the window is closed.\n  mainWindow.on('closed', function () {\n    // Dereference the window object, usually you would store windows\n    // in an array if your app supports multi windows, this is the time\n    // when you should delete the corresponding element.\n    mainWindow = null\n  })\n\n  const { webContents } = mainWindow\n\n  //http://simurai.com/electron.atom.io/docs/tutorial/using-widevine-cdm-plugin/#getting-the-plugin\n  // Allow embedding spotify web player in iframe :P\n  webContents.session.webRequest.onHeadersReceived({}, (d, c) => {     \n    if(d.responseHeaders['x-frame-options'] ||\n        d.responseHeaders['X-Frame-Options'] || \n        d.responseHeaders['Content-Security-Policy'] ||\n        d.responseHeaders['content-security-policy']){\n      delete d.responseHeaders['x-frame-options'];\n      delete d.responseHeaders['X-Frame-Options'];\n      delete d.responseHeaders['Content-Security-Policy'];\n      delete d.responseHeaders['content-security-policy'];\n    }\n\n    c({cancel: false, responseHeaders: d.responseHeaders, statusLine: d.statusLine});\n  });\n\n  const wakeUp = new WakeUp();\n  wakeUp.screenOn();\n  webContents.on(\"did-finish-load\", () => {\n    if (webContents.getURL().match(argv.host)) {\n      wakeUp.screenOn();\n      console.log(\"Loaded home assistant instance!\");\n      webContents.executeJavaScript(extendHaScript);\n    }\n  })\n\n  ipcMain.on('kiosk:wake', (event, arg) => {\n    wakeUp.reset();\n  })\n}\n\n// This method will be called when Electron has finished\n// initialization and is ready to create browser windows.\n// Some APIs can only be used after this event occurs.\napp.on('ready', createWindow)\n\n// Quit when all windows are closed.\napp.on('window-all-closed', function () {\n  // On macOS it is common for applications and their menu bar\n  // to stay active until the user quits explicitly with Cmd + Q\n  if (process.platform !== 'darwin') {\n    app.quit()\n  }\n})\n\napp.on('activate', function () {\n  // On macOS it's common to re-create a window in the app when the\n  // dock icon is clicked and there are no other windows open.\n  if (mainWindow === null) {\n    createWindow()\n  }\n})\n\n// In this file you can include the rest of your app's specific main process\n// code. You can also put them in separate files and require them here.\n"
  },
  {
    "path": "panel/package.json",
    "content": "{\n  \"name\": \"SmartHouse\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"main.js\",\n  \"scripts\": {\n    \"start\": \"electron .\",\n    \"dev\": \"electron . --dev\"\n  },\n  \"repository\": \"https://github.com/electron/electron-quick-start\",\n  \"keywords\": [\n    \"Electron\",\n    \"quick\",\n    \"start\",\n    \"tutorial\",\n    \"demo\"\n  ],\n  \"author\": \"GitHub\",\n  \"license\": \"CC0-1.0\",\n  \"devDependencies\": {\n    \"electron\": \"^4.0.1\"\n  },\n  \"dependencies\": {\n    \"yargs\": \"^12.0.5\"\n  }\n}\n"
  },
  {
    "path": "panel/renderer.js",
    "content": "const { remote } = require('electron')\nconst electron = require('electron');\n\nasync function waithForHa() {\n  const host = remote.getCurrentWindow().argv.host\n  try {\n    const resp = await fetch(host)\n    if (resp.ok) {\n      window.location.href = host\n    } else {\n      setTimeout(waithForHa, 5000)\n    }\n  } catch (e) {\n    setTimeout(waithForHa, 5000)\n  }\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  const webFrame = electron.webFrame;\n  webFrame.setZoomLevel(1.0);\n  webFrame.setVisualZoomLevelLimits(1, 1);\n  webFrame.setLayoutZoomLevelLimits(0, 0);\n  document.body.requestPointerLock();\n  waithForHa();\n})"
  },
  {
    "path": "panel/wakeup.js",
    "content": "const exec = require('child_process').exec;\n\nclass WakeUp {\n  constructor() {\n    this.timeout = null\n  }\n\n  reset() {\n    if (this.timeout != null) {\n      clearTimeout(this.timeout);\n      this.timeout = null;\n    }\n    this.timeout = setTimeout(() => this.screenOff(), 25 * 1000)\n  }\n\n  screenOff() {\n    console.log(\"Screen off\");\n    try {\n      exec(\"xset -display :0.0 dpms force off\", null);\n    } catch(e) {\n      console.error(e);\n    }\n  }\n\n  screenOn() {\n    console.log(\"Screen on\");\n    try {\n      exec(\"xset -display :0.0 dpms force on\", null);\n    } catch(e) {\n      console.error(e);\n    }\n  }\n}\n\nmodule.exports = WakeUp"
  },
  {
    "path": "postgresql/init-user-db.sh",
    "content": "#!/bin/bash\nset -e\n\npsql -v ON_ERROR_STOP=1 --username \"$POSTGRES_USER\" --dbname \"$POSTGRES_DB\" <<-EOSQL\n  CREATE USER nextcloud WITH PASSWORD 'nextcloud';\n  CREATE DATABASE nextcloud;\n  GRANT ALL PRIVILEGES ON DATABASE nextcloud TO nextcloud;\nEOSQL"
  },
  {
    "path": "provision/.gitkeep",
    "content": ""
  },
  {
    "path": "provision/install_roles.yml",
    "content": "- src: geerlingguy.nginx\n- src: weareinteractive.ufw\n- src: nickjj.fail2ban\n- src: geerlingguy.certbot\n- src: geerlingguy.nodejs\n- src: petermosmans.customize-gnome\n- src: brianhartsock.netatalk\n- src: oefenweb.postfix\n- src: mikolak-net.raspi_config\n- src: elboletaire.transmission\n- src: aeimer.install_bat"
  },
  {
    "path": "provision/inventory.ini.example",
    "content": "[master]\n127.0.0.1     ansible_connection=ssh        ansible_user=vagrant        ansible_port=2222\n\n[panel]\n127.0.0.1     ansible_connection=ssh        ansible_user=vagrant        ansible_port=2222\n\n[gateway]\n127.0.0.1     ansible_connection=ssh        ansible_user=vagrant        ansible_port=2222\n\n[vacuum]\n192.168.1.222 ansible_connection=ssh        ansible_user=root           ansible_port=22\n\n[cat_feeder]\n192.168.1.222 ansible_connection=ssh        ansible_user=root           ansible_port=22\n\n[decibel_meter]\n192.168.1.169 ansible_connection=ssh        ansible_user=pi        ansible_port=22"
  },
  {
    "path": "provision/inventory.vagrant.ini",
    "content": "[master]\n127.0.0.1     ansible_connection=ssh        ansible_user=vagrant        ansible_port=2222\n"
  },
  {
    "path": "provision/playbook.yml",
    "content": "- hosts: all\n  become: yes\n  tasks:\n    - name: include vars from provision/vars.yml\n      include_vars:\n        file: vars.yml\n\n# - hosts: all\n#   become: yes\n#   roles:\n#     - aeimer.install_bat\n\n#- name: Doh dns\n#  import_playbook: playbooks/doh_dns/doh_dns.yaml\n\n# - name: Basic packages\n#   import_playbook: playbooks/packages.yaml\n\n# - name: Zwave\n#   import_playbook: playbooks/zwave/zwave.yaml\n\n# - name: Matrix\n#   import_playbook: playbooks/matrix/matrix.yaml\n\n# - name: Mastodon\n#   import_playbook: playbooks/mastodon/mastodon.yaml\n\n# - name: House keeping\n#   import_playbook: playbooks/housekeeping.yaml\n\n# - name: Basic firewall rules\n#   import_playbook: playbooks/firewall.yaml\n\n# - name: Install docker\n#   import_playbook: playbooks/docker/docker.yaml\n\n# - name: Install HomeAssistant\n#   import_playbook: playbooks/home-assistant/home-assistant.yaml\n\n# - name: Install transfer\n#   import_playbook: playbooks/transfer/transfer.yaml\n\n# - name: Install anarchopi\n#   import_playbook: playbooks/anarchopi/anarchopi.yaml\n\n#- name: Install master of stonks\n#  import_playbook: playbooks/master_of_stonks/master_of_stonks.yaml\n\n# - name: Install detox\n#   import_playbook: playbooks/detox/detox.yaml\n\n#- name: Install smasher\n#  import_playbook: playbooks/smasher/smasher.yaml\n\n# - name: Ad blocking stuff\n#   import_playbook: playbooks/ads/ads.yaml\n\n# - name: Grafana\n#   import_playbook: playbooks/grafana/grafana.yaml\n\n#- name: Errbit\n#  import_playbook: playbooks/errbit/errbit.yaml\n\n\n# - name: Speed test help tool\n#   import_playbook: playbooks/speedtest/speedtest.yaml\n\n# - name: Install notes\n#   import_playbook: playbooks/notes/notes.yaml\n\n# - name: Install gotify\n#   import_playbook: playbooks/gotify/gotify.yaml\n\n# - name: Install blog\n#   import_playbook: playbooks/blog/blog.yaml\n\n# - name: Install ci\n#   import_playbook: playbooks/ci/ci.yaml\n\n# - name: Install git\n#   import_playbook: playbooks/git/git.yaml\n\n# - name: Install grocy\n#   import_playbook: playbooks/grocy/grocy.yaml\n\n# - name: Install node-red\n#   import_playbook: playbooks/node-red/node-red.yaml\n\n# - name: Install bitcoin\n#   import_playbook: playbooks/bitcoin/bitcoin.yaml\n\n# - name: Install rss-bridge\n#   import_playbook: playbooks/rss_bridge/rss_bridge.yaml\n\n# - name: Install EspHome\n#   import_playbook: playbooks/esphome/esphome.yaml\n\n# - name: Install Ethereum Private Network\n#   import_playbook: playbooks/ethereum/ethereum.yaml\n\n# - name: Install Youtube Downloader\n#   import_playbook: playbooks/ytd/ytd.yaml\n\n# - name: Install Youtube Downloader\n#   import_playbook: playbooks/tv/tv.yaml\n\n# - name: Install torrents\n#   import_playbook: playbooks/torrents/torrents.yaml\n\n# - name: Install simple client\n#   import_playbook: playbooks/youtube/youtube.yaml\n\n# - name: Install simplelogin client\n#   import_playbook: playbooks/simplelogin/simplelogin.yaml\n\n- name: Install media emby\n  import_playbook: playbooks/media/media.yaml\n\n# - name: Install nextcloud\n#   import_playbook: playbooks/nextcloud/nextcloud.yaml\n\n# - name: Install media photos\n#   import_playbook: playbooks/photos/photos.yaml\n\n# - name: Install cat feeder\n#   import_playbook: playbooks/cat_feeder/cat.yaml\n\n# - name: Install Decibel Meter\n#   import_playbook: playbooks/decibel_meter/decibel_meter.yaml\n\n\n\n# - hosts: master\n#   become: yes\n#   roles:\n#     - role: geerlingguy.certbot\n#   vars:\n#     certbot_auto_renew: false\n#     certbot_admin_email: \"{{ email }}\"\n#     certbot_create_if_missing: true\n#     certbot_certs:\n#       - domains:\n#         - \"macbury.ninja\"\n\n# - hosts: master\n#   become: yes\n#   roles:\n#     - role: geerlingguy.certbot\n#   vars:\n#     certbot_auto_renew: false\n#     certbot_admin_email: \"{{ email }}\"\n#     certbot_create_if_missing: true\n#     certbot_certs:\n#       - domains:\n#         - \"{{ rss_domain }}\"\n\n# - hosts: master\n#   become: yes\n#   roles:\n#     - role: geerlingguy.certbot\n#   vars:\n#     certbot_auto_renew: false\n#     certbot_admin_email: \"{{ email }}\"\n#     certbot_create_if_missing: true\n#     certbot_certs:\n#       - domains:\n#         - \"{{ podcast_domain }}\"\n\n# - hosts: master\n#   become: yes\n#   roles:\n#     - role: geerlingguy.certbot\n#   vars:\n#     certbot_auto_renew: false\n#     certbot_admin_email: \"{{ email }}\"\n#     certbot_create_if_missing: true\n#     certbot_certs:\n#       - domains:\n#         - \"{{ monio_domain }}\"\n\n\n\n# Nginx\n# - hosts: master\n#   become: yes\n#   roles:\n#     - role: geerlingguy.nginx\n#   handlers:\n#     - name: restart nginx\n#       become: yes\n#       service:\n#         name: nginx\n#         enabled: yes\n#         state: restarted\n#   tasks:\n    # - name: Create /etc/nginx/sites-enabled/rss.conf\n    #   template:\n    #     src: ./etc/nginx/sites-enabled/rss.conf.j2\n    #     dest: /etc/nginx/sites-enabled/rss.conf\n    #   notify:\n    #     - reload nginx\n    #     - restart nginx\n#     - name: Create /etc/nginx/sites-enabled/notes.conf\n#       template:\n#         src: ./etc/nginx/sites-enabled/notes.conf.j2\n#         dest: /etc/nginx/sites-enabled/notes.conf\n#       notify:\n#         - reload nginx\n#         - restart nginx\n#     - name: Create /etc/nginx/sites-enabled/blog.conf\n#       template:\n#         src: ./etc/nginx/sites-enabled/blog.conf.j2\n#         dest: /etc/nginx/sites-enabled/blog.conf\n#       notify:\n#         - reload nginx\n#         - restart nginx\n\n    # - name: Create /etc/nginx/sites-enabled/monio.conf\n    #   template:\n    #     src: ./etc/nginx/sites-enabled/monio.conf.j2\n    #     dest: /etc/nginx/sites-enabled/monio.conf\n    #   notify:\n    #     - reload nginx\n    #     - restart nginx\n\n#     - name: Create /etc/nginx/sites-enabled/honeytap.conf\n#       template:\n#         src: ./etc/nginx/sites-enabled/default.conf.j2\n#         dest: /etc/nginx/sites-enabled/default\n#       notify:\n#         - reload nginx\n#         - restart nginx\n#     - name: Create /var/www/html/index.html\n#       template:\n#         src: ./var/www/html/index.html\n#         dest: /var/www/html/index.html\n#       notify:\n#         - reload nginx\n#         - restart nginx\n#     - name: Create /var/www/html/403.html\n#       template:\n#         src: ./var/www/html/403.html\n#         dest: /var/www/html/403.html\n#       notify:\n#         - reload nginx\n#         - restart nginx\n# Home Assistant\n# - hosts: master\n#   become: yes\n#   handlers:\n#     - name: reload systemctl\n#       become: yes\n#       command: systemctl daemon-reload\n#     - name: restart systemd-resolved\n#       service:\n#         name: systemd-resolved\n#         state: restarted\n#     - name: reload afp\n#       service:\n#         name: netatalk\n#         state: restarted\n#   tasks:\n#     - name: Fallback resolver to pihole and then try cloudflare on boot\n#       become: yes\n#       shell: 'ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf'\n#       notify:\n#         - restart systemd-resolved\n#     - name: Fallback resolver to pihole and then try cloudflare on boot\n#       become: yes\n#       template:\n#         force: yes\n#         src: ./etc/systemd/resolved.conf\n#         dest: /etc/systemd/resolved.conf\n#       notify:\n#         - restart systemd-resolved\n#     - name: Creates app directory\n#       file:\n#         path: /smart-house\n#         state: directory\n#         owner: \"{{ ansible_user }}\"\n#         group: \"{{ ansible_user }}\"\n#     - name: Create smart-house.service\n#       template:\n#         src: ./lib/systemd/system/smart-house.service.j2\n#         dest: /lib/systemd/system/smart-house.service\n#       notify:\n#         - reload systemctl\n#     - name: Create pihole.service\n#       template:\n#         src: ./lib/systemd/system/pihole.service.j2\n#         dest: /lib/systemd/system/pihole.service\n#       notify:\n#         - reload systemctl\n#     - name: Create support.service\n#       template:\n#         src: ./lib/systemd/system/support.service.j2\n#         dest: /lib/systemd/system/support.service\n#       notify:\n#         - reload systemctl\n    # - name: Create health.service\n    #   template:\n    #     src: ./lib/systemd/system/health.service.j2\n    #     dest: /lib/systemd/system/health.service\n    #   notify:\n    #     - reload systemctl\n\n#     - name: Create media.service\n#       template:\n#         src: ./lib/systemd/system/media.service.j2\n#         dest: /lib/systemd/system/media.service\n#       notify:\n#         - reload systemctl\n#     - name: Append domain to /etc/hosts\n#       lineinfile:\n#         dest: /etc/hosts\n#         line: \"192.168.1.12 {{ domain }}\"\n#         regexp: \"{{ domain }}\"\n#         state: present\n#         insertafter: EOF\n#         create: True\n\n# Setup oh my zsh\n# - hosts:\n#     - master\n#     - dev\n#   become: yes\n#   tasks:\n#     - name: Updating current user\n#       user:\n#         name: '{{ ansible_user }}'\n#         append: yes\n#         shell: /usr/bin/zsh\n#     - name: Updating root user\n#       user:\n#         name: 'root'\n#         append: yes\n#         shell: /usr/bin/zsh\n#     - name: Install oh-my-zsh to current user\n#       become: no\n#       git:\n#         repo: 'https://github.com/robbyrussell/oh-my-zsh.git'\n#         dest: '~/.oh-my-zsh'\n#     - name: 'Copy ~/.zshrc'\n#       become: no\n#       shell: 'cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc'\n#     - name: Install oh-my-zsh to root\n#       git:\n#         repo: 'https://github.com/robbyrussell/oh-my-zsh.git'\n#         dest: '~/.oh-my-zsh'\n#     - name: 'Copy ~/.zshrc'\n#       shell: 'cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc'\n\n# # # Shell and configs\n# - hosts: master\n#   tasks:\n#     - name: Remove /smart-house/lost+found\n#       become: yes\n#       file:\n#         path: /smart-house/lost+found\n#         state: absent\n#     - name: Clone smart-house repo\n#       git:\n#         repo: 'git@github.com:macbury/SmartHouse.git'\n#         dest: /smart-house\n#         accept_hostkey: yes\n#         update: no\n#     - name: Creates grafana directory\n#       become: yes\n#       file:\n#         path: /smart-house/.docker/data/grafana\n#         state: directory\n#         owner: \"472\"\n#         group: \"472\"\n#     - name: Creates log directory\n#       become: yes\n#       file:\n#         path: /smart-house/.docker/log/\n#         state: directory\n#         owner: \"root\"\n#         group: \"root\"\n#     - name: Creates pihole directory\n#       become: yes\n#       file:\n#         path: /smart-house/.docker/data/pihole/dnsmasq.d/\n#         state: directory\n#     - name: Dns script\n#       become: yes\n#       template:\n#         src: ./etc/dnsmasq.d/02-localhosts.conf.j2\n#         dest: /smart-house/.docker/data/pihole/dnsmasq.d/02-localhosts.conf\n#     - name: Domain list\n#       become: yes\n#       template:\n#         src: ./etc/pihole/lan.list.j2\n#         dest: /smart-house/.docker/data/pihole/pihole/lan.list\n#     - name: Create symbolic link for bin/smart-hose\n#       become: yes\n#       file:\n#         src: \"/smart-house/bin/smart-house\"\n#         dest: \"/usr/bin/smart-house\"\n#         state: link\n    # - name: Copy example .env.home-assistant.example\n    #   shell: 'cp /smart-house/.env.home-assistant.example /smart-house/.env.home-assistant'\n    #   args:\n    #     creates: '/smart-house/.env.home-assistant'\n    # - name: Copy example .env.influxdb.example\n    #   shell: 'cp /smart-house/.env.influxdb.example /smart-house/.env.influxdb'\n    #   args:\n    #     creates: '/smart-house/.env.influxdb'\n    # - name: Copy example .env.pihole.example\n    #   shell: 'cp /smart-house/.env.pihole.example /smart-house/.env.pihole'\n    #   args:\n    #     creates: '/smart-house/.env.pihole'\n    # - name: Copy example .env.postgresql.example\n    #   shell: 'cp /smart-house/.env.postgresql.example /smart-house/.env.postgresql'\n    #   args:\n    #     creates: '/smart-house/.env.postgresql'\n    # - name: Copy example .env.grafana.example\n    #   shell: 'cp /smart-house/.env.grafana.example /smart-house/.env.grafana'\n    #   args:\n    #     creates: '/smart-house/.env.grafana'\n    # - name: Copy example .env.crontab.example\n    #   shell: 'cp /smart-house/.env.crontab.example /smart-house/.env.crontab'\n    #   args:\n    #     creates: '/smart-house/.env.crontab'\n    # - name: create .env.local file\n    #   template:\n    #     src: .env.local.j2\n    #     dest: /smart-house/.env.local\n    #   vars:\n    #     env:\n    #       HOME_ASSISTANT_DOMAIN: \"{{ domain }}\"\n    #       HOME_ASSISTANT_URL: \"https://{{ domain }}\"\n    # - name: Insert SMART_HOUSE_DIR env variable to current user\n    #   lineinfile:\n    #     path: \"~/.zshrc\"\n    #     line: \"export SMART_HOUSE_DIR=/smart-house\"\n    # - name: Insert SMART_HOUSE_DIR env variable to root\n    #   become: yes\n    #   lineinfile:\n    #     path: \"~/.zshrc\"\n    #     line: \"export SMART_HOUSE_DIR=/smart-house\"\n    # - name: 'pip3 packages'\n    #   become: yes\n    #   pip:\n    #     executable: /usr/bin/pip3\n    #     requirements: '/smart-house/requirements.txt'\n\n# # # Setup cron\n# - hosts: master\n#   become: yes\n#   tasks:\n#     - name: Add crontab entry for refreshing dns\n#       cron:\n#         name: \"ddns\"\n#         minute: \"*/15\"\n#         job: \"/usr/bin/zsh -l -c 'SMART_HOUSE_DIR=/smart-house smart-house ddns' >> /tmp/ddns.log 2>&1\"\n#     - name: Add crontab entry for certs\n#       cron:\n#         name: \"certs\"\n#         hour: \"4\"\n#         minute: \"0\"\n#         job: \"/usr/bin/zsh -l -c 'SMART_HOUSE_DIR=/smart-house smart-house certbot' >> /tmp/certbot.log 2>&1\"\n#     - name: Add crontab entry for backup\n#       cron:\n#         name: \"backup\"\n#         hour: \"1\"\n#         minute: \"0\"\n#         job: \"/usr/bin/zsh -l -c 'SMART_HOUSE_DIR=/smart-house smart-house backup' >> /tmp/backup.log 2>&1\"\n#     - name: Cleanup docker shit\n#       cron:\n#         name: 'docker'\n#         hour: \"3\"\n#         minute: \"0\"\n#         job: \"/usr/bin/zsh -l -c 'docker system prune -f'\"\n#     - name: Cleanup old logs\n#       cron:\n#         name: 'logs'\n#         hour: \"22\"\n#         minute: \"0\"\n#         job: '/usr/bin/zsh -l -c \"rm /tmp/*.log\"'\n#     - name: Cleanup covers\n#       cron:\n#         name: 'cover'\n#         hour: \"2\"\n#         minute: \"0\"\n#         job: '/usr/bin/zsh -l -c \"rm /tmp/cover_*\"'\n# # # Setup mosquitto passwd\n# - hosts: master\n#   become: yes\n#   tasks:\n#     - name: Install mosquitto\n#       apt:\n#         name: mosquitto\n#     - name: Disable mosquitto service on ubuntu desktop\n#       service:\n#         name: mosquitto\n#         state: stopped\n#     - name: Creates mosquitto docker directory\n#       file:\n#         path: /smart-house/.docker/data/mosquitto\n#         state: directory\n#         owner: \"1883\"\n#         group: \"1883\"\n#     - name: Create mosquitto/users.db\n#       file:\n#         path: /smart-house/.docker/data/mosquitto/users.db\n#         state: touch\n#         owner: \"1883\"\n#         group: \"1883\"\n#     - name: Create mosquitto.log\n#       file:\n#         path: /smart-house/.docker/log/mosquitto.log\n#         state: touch\n#         owner: \"1883\"\n#         group: \"1883\"\n\n# # # Setup AFP\n# - hosts: master\n#   become: yes\n#   roles:\n#     - role: brianhartsock.netatalk\n#   vars:\n#     netatalk_shares:\n#       - /smart-house \"Config\" allow:macbury cnidscheme:cdb\"\n\n# # # Install kiosk on panel\n# - hosts: panel\n#   tasks:\n#     - name: Create kiosk.service\n#       template:\n#         src: ./lib/systemd/system/kiosk.service.j2\n#         dest: /lib/systemd/system/kiosk.service\n#       notify:\n#         - reload systemctl\n#     - name: Clone smart-house repo\n#       git:\n#         repo: 'git@github.com:macbury/SmartHouse.git'\n#         dest: /smart-house\n#         accept_hostkey: yes\n#         update: yes\n#     - name: Install electron\n#       shell: 'cd /smart-house/panel && npm install'\n# # # Gnome\n# - hosts: panel\n#   tasks:\n#     - name: Download GNOME Shell gestures extensions\n#       get_url:\n#         url: \"https://extensions.gnome.org/extension-data/disable-gestures%40mattbell.com.au.v2.shell-extension.zip\"\n#         dest: \"/tmp/disable-gesture.zip\"\n#     - name: Create GNOME gestures extension directories\n#       file:\n#         path: /home/{{ ansible_user }}/.local/share/gnome-shell/extensions/disable-gestures@mattbell.com.au\n#         state: directory\n#     - name: Unzip GNOME gestures extensions\n#       unarchive:\n#         src: \"/tmp/disable-gesture.zip\"\n#         dest: \"/home/{{ ansible_user }}/.local/share/gnome-shell/extensions/disable-gestures@mattbell.com.au\"\n#         remote_src: yes\n#     - name: Enable gnome gestures extension\n#       shell: 'gnome-shell-extension-tool -e disable-gestures@mattbell.com.au'\n#       ignore_errors: yes\n#     - name: Download GNOME Shell onboard extensions\n#       get_url:\n#         url: \"https://extensions.gnome.org/extension-data/onboard%40simon.schumann.web.de.v4.shell-extension.zip\"\n#         dest: \"/tmp/onboard.zip\"\n#     - name: Create GNOME onboard extension directories\n#       file:\n#         path: /home/{{ ansible_user }}/.local/share/gnome-shell/extensions/onboardintegration@simon.schumann.web.de\n#         state: directory\n#     - name: Unzip GNOME onboard extensions\n#       unarchive:\n#         src: \"/tmp/disable-gesture.zip\"\n#         dest: \"/home/{{ ansible_user }}/.local/share/gnome-shell/extensions/onboardintegration@simon.schumann.web.de\"\n#         remote_src: yes\n#     - name: Enable gnome onboard extension\n#       shell: 'gnome-shell-extension-tool -e onboardintegration@simon.schumann.web.de'\n#       ignore_errors: yes\n\n# # # Fail2Ban setup\n# - hosts: master\n#   become: yes\n#   roles:\n#     - role: nickjj.fail2ban\n#   handlers:\n#     - name: restart fail2ban\n#       service:\n#         name: fail2ban\n#         state: restarted\n#   tasks:\n#     - name: Copy filter nginx-http-auth.conf to fail2ban\n#       template:\n#         force: yes\n#         src: ./etc/fail2ban/filter.d/nginx-http-auth.conf\n#         dest: /etc/fail2ban/filter.d/nginx-http-auth.conf\n#       notify:\n#         - restart fail2ban\n#     - name: Copy filter nginx-badbots.conf to fail2ban\n#       template:\n#         force: yes\n#         src: ./etc/fail2ban/filter.d/nginx-badbots.conf\n#         dest: /etc/fail2ban/filter.d/nginx-badbots.conf\n#       notify:\n#         - restart fail2ban\n#     - name: Copy filter nginx-forbidden.conf to fail2ban\n#       template:\n#         force: yes\n#         src: ./etc/fail2ban/filter.d/nginx-forbidden.conf\n#         dest: /etc/fail2ban/filter.d/nginx-forbidden.conf\n#       notify:\n#         - restart fail2ban\n#     - name: Copy filter ha.conf to fail2ban\n#       template:\n#         force: yes\n#         src: ./etc/fail2ban/filter.d/ha.conf\n#         dest: /etc/fail2ban/filter.d/ha.conf\n#       notify:\n#         - restart fail2ban\n#     - name: Copy filter mosquitto-auth.conf to fail2ban\n#       template:\n#         force: yes\n#         src: ./etc/fail2ban/filter.d/mosquitto-auth.conf\n#         dest: /etc/fail2ban/filter.d/mosquitto-auth.conf\n#       notify:\n#         - restart fail2ban\n#     - name: Copy jail ha.conf to fail2ban\n#       template:\n#         force: yes\n#         src: ./etc/fail2ban/jail.d/ha.conf\n#         dest: /etc/fail2ban/jail.d/ha.conf\n#       notify:\n#         - restart fail2ban\n#     - name: Create symbolic link for fail2ban\n#       become: yes\n#       file:\n#         src: \"/var/log/fail2ban.log\"\n#         dest: \"/smart-house/.docker/log/fail2ban.log\"\n#         state: link\n"
  },
  {
    "path": "provision/playbooks/anarchopi/adguard/adguard.yaml",
    "content": "# - hosts: anarchopi\r\n#   become: yes\r\n#   tasks:\r\n#     - name: Check if adguard is installed\r\n#       command: 'AdGuardHome --version'\r\n#       register: adguard_is_installed\r\n#       ignore_errors: True\r\n#     - name: Download ADGuard\r\n#       when: adguard_is_installed is failed\r\n#       get_url:\r\n#         url: https://github.com/AdguardTeam/AdGuardHome/releases/download/v0.105.1/AdGuardHome_linux_armv7.tar.gz\r\n#         dest: /tmp/AdGuardHome_linux_arm.tar.gz\r\n#     - name: Extract ADGuard\r\n#       when: adguard_is_installed is failed\r\n#       unarchive:\r\n#         remote_src: yes\r\n#         src: /tmp/AdGuardHome_linux_arm.tar.gz\r\n#         dest: /tmp\r\n#     - name: Copy adguard to /usr/bin\r\n#       when: adguard_is_installed is failed\r\n#       copy:\r\n#         remote_src: yes\r\n#         src: /tmp/AdGuardHome/AdGuardHome\r\n#         dest: /usr/bin/AdGuardHome\r\n#         owner: root\r\n#         group: root\r\n#         mode: '0555'\r\n#     - name: Install Adguard\r\n#       become: yes\r\n#       when: adguard_is_installed is failed\r\n#       command: \r\n#         cmd: 'AdGuardHome -s install'\r\n#         chdir: /root\r\n\r\n# - hosts: anarchopi\r\n#   become: yes\r\n#   roles:\r\n#     - role: weareinteractive.ufw\r\n#   vars:\r\n#     ansible_os_family: 'Debian'\r\n#     ufw_reset: no\r\n#     ufw_logging: \"off\"\r\n#     ufw_rules:\r\n#       - { port: 22, rule: allow, comment: \"Allow ssh\" }\r\n#       - { port: 53, rule: allow, comment: \"Adguard DNS\" }\r\n#       - { port: 3000, rule: allow, comment: \"Adguard install WebUI\" }\r\n#       - { port: 6300, rule: allow, comment: \"Adguard WebUI\" }\r\n#       - { port: 68, rule: allow, comment: 'Allow Adguard DNS' }\r\n#       - { port: 853, rule: allow, comment: 'Allow Adguard DNS' }\r\n#       - { port: 67, rule: allow, comment: 'Allow PiHole DNS' }\r\n\r\n# - hosts: master\r\n#   become: yes\r\n#   roles:\r\n#     - role: geerlingguy.certbot\r\n#   vars:\r\n#     certbot_auto_renew: false\r\n#     certbot_admin_email: \"{{ email }}\"\r\n#     certbot_create_if_missing: true\r\n#     certbot_certs:\r\n#       - domains:\r\n#         - \"{{ adguard_domain }}\"\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/ads.conf\r\n      template:\r\n        src: ads.conf.j2\r\n        dest: /etc/nginx/sites-enabled/ads.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n"
  },
  {
    "path": "provision/playbooks/anarchopi/adguard/ads.conf.j2",
    "content": "upstream adguard {\r\n  server 192.168.1.157:80 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ adguard_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  ssl_certificate /etc/letsencrypt/live/{{ adguard_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ adguard_domain }}/privkey.pem;\r\n  server_name {{ adguard_domain }};\r\n\r\n  location / {\r\n    allow 192.168.0.0/16;\r\n    allow 10.0.0.0/16;\r\n    deny all;\r\n    proxy_pass http://adguard/;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}"
  },
  {
    "path": "provision/playbooks/anarchopi/anarchopi.yaml",
    "content": "# https://stadicus.github.io/RaspiBolt/\r\n# https://mynodebtc.com/\r\n\r\n# - hosts: \r\n#     - anarchopi\r\n#     - media\r\n#   become: yes\r\n#   tasks:\r\n#     - apt:\r\n#         name: build-essential\r\n#     - apt:\r\n#         name: libffi-dev\r\n#     - apt:\r\n#         name: libssl-dev\r\n#     - name: Install cryptsetup\r\n#       apt:\r\n#         name: cryptsetup\r\n#     - name: smb\r\n#       apt:\r\n#         name: cifs-utils\r\n\r\n# - hosts: master\r\n#   become: yes\r\n#   roles:\r\n#     - role: weareinteractive.ufw\r\n#   vars:\r\n#     ufw_reset: no\r\n#     ufw_rules:\r\n#       - { port: 9051, rule: allow, comment: \"Allow tor\" }\r\n\r\n# - name: Configure torrents\r\n#   import_playbook: torrents/torrents.yaml\r\n\r\n# - name: Configure ipfs\r\n#   import_playbook: ipfs/ipfs.yaml\r\n\r\n- name: Configure adguard\r\n  import_playbook: adguard/adguard.yaml\r\n"
  },
  {
    "path": "provision/playbooks/anarchopi/bin/unlock-hard-drive",
    "content": "sudo cryptsetup luksOpen /dev/sda1 encrypted\r\nsudo mount -t ext4 /dev/mapper/encrypted /data\r\nsudo systemctl start transmission-daemon.service"
  },
  {
    "path": "provision/playbooks/anarchopi/bitcoind/bitcoin.yaml",
    "content": "- hosts: anarchopi\r\n  become: yes\r\n  roles:\r\n    - role: weareinteractive.ufw\r\n  vars:\r\n    bitcoin_version: 0.20.0\r\n    ufw_reset: no\r\n    ufw_logging: \"off\"\r\n    ufw_rules:\r\n      - { port: 8333, rule: allow, comment: \"Expose p2p bitcoin port\" }\r\n      - { port: 8332, rule: allow, comment: \"Expose p2p bitcoin port\" }\r\n      - { port: 50001, rule: allow, comment: \"Expose rpc bitcoin port\" }\r\n      \r\n  tasks:\r\n    - name: Create bitcoins group\r\n      group:\r\n        name: bitcoin\r\n    - name: Create bitcoin user\r\n      user:\r\n        name: bitcoin\r\n        group: bitcoin\r\n    - name: Create directory\r\n      file:\r\n        group: bitcoin\r\n        owner: bitcoin\r\n        path: /data/bitcoin\r\n        state: directory\r\n    - name: Create symbolic link\r\n      become: yes\r\n      file:\r\n        group: bitcoin\r\n        owner: bitcoin\r\n        src: /data/bitcoin\r\n        dest: /home/bitcoin/.bitcoin\r\n        state: link\r\n    - name: Check if bitcoin is installed\r\n      command: 'bitcoind --version'\r\n      register: bitcoin_is_installed\r\n      ignore_errors: True\r\n    - name: Download bitcoin core\r\n      when: bitcoin_is_installed is failed\r\n      get_url:\r\n        url:  https://bitcoincore.org/bin/bitcoin-core-{{ bitcoin_version }}/bitcoin-{{ bitcoin_version }}-arm-linux-gnueabihf.tar.gz\r\n        dest: /tmp/bitcoin.tar.gz\r\n    - name: Extract bitcoin core\r\n      when: bitcoin_is_installed is failed\r\n      unarchive:\r\n        remote_src: yes\r\n        src: /tmp/bitcoin.tar.gz\r\n        dest: /tmp\r\n    - name: Install bitcoin core\r\n      when: bitcoin_is_installed is failed\r\n      command: install -m 0755 -o root -g root -t /usr/local/bin /tmp/bitcoin-{{ bitcoin_version }}/bin/*\r\n    - name: Create bitcoind.service\r\n      template:\r\n        src: bitcoind.service\r\n        dest: /lib/systemd/system/bitcoind.service\r\n    - name: Restart service bitcoind.service\r\n      systemd:\r\n        state: started\r\n        daemon_reload: yes\r\n        name: bitcoind\r\n\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/btc-explorer.conf\r\n      template:\r\n        src: btc_explorer.conf.j2\r\n        dest: /etc/nginx/sites-enabled/btc-explorer.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx"
  },
  {
    "path": "provision/playbooks/anarchopi/bitcoind/bitcoind.service",
    "content": "# RaspiBolt: systemd unit for bitcoind\r\n# /etc/systemd/system/bitcoind.service\r\n\r\n[Unit]\r\nDescription=Bitcoin daemon\r\nAfter=network.target\r\n\r\n[Service]\r\n\r\n# Service execution\r\n###################\r\n\r\nExecStart=/usr/local/bin/bitcoind -daemon \\\r\n                                  -pid=/run/bitcoind/bitcoind.pid \\\r\n                                  -conf=/data/bitcoin/bitcoin.conf \\\r\n                                  -datadir=/data/bitcoin\r\n\r\n\r\n# Process management\r\n####################\r\n\r\nType=forking\r\nPIDFile=/run/bitcoind/bitcoind.pid\r\nRestart=on-failure\r\nTimeoutSec=300\r\nRestartSec=30\r\n\r\n\r\n# Directory creation and permissions\r\n####################################\r\n\r\n# Run as bitcoin:bitcoin\r\nUser=bitcoin\r\nGroup=bitcoin\r\n\r\n# /run/bitcoind\r\nRuntimeDirectory=bitcoind\r\nRuntimeDirectoryMode=0710\r\n\r\n\r\n# Hardening measures\r\n####################\r\n\r\n# Provide a private /tmp and /var/tmp.\r\nPrivateTmp=true\r\n\r\n# Mount /usr, /boot/ and /etc read-only for the process.\r\nProtectSystem=full\r\n\r\n# Deny access to /home, /root and /run/user\r\nProtectHome=true\r\n\r\n# Disallow the process and all of its children to gain\r\n# new privileges through execve().\r\nNoNewPrivileges=true\r\n\r\n# Use a new /dev namespace only populated with API pseudo devices\r\n# such as /dev/null, /dev/zero and /dev/random.\r\nPrivateDevices=true\r\n\r\n# Deny the creation of writable and executable memory mappings.\r\nMemoryDenyWriteExecute=true\r\n\r\n[Install]\r\nWantedBy=multi-user.target\r\n\r\n"
  },
  {
    "path": "provision/playbooks/anarchopi/bitcoind/btc_explorer.conf.j2",
    "content": "upstream btc_explorer {\r\n  server 192.168.1.157:80 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ btc_explorer_domain }};\r\n\r\n  location / {\r\n    allow 192.168.0.0/16;\r\n    allow 10.0.0.0/16;\r\n    deny all;\r\n    proxy_pass http://btc_explorer/;\r\n\r\n    proxy_set_header Host $host;\r\n    proxy_set_header X-Real-IP $remote_addr;\r\n    proxy_http_version 1.1;\r\n    proxy_set_header Upgrade $http_upgrade;\r\n    proxy_set_header Connection \"upgrade\";\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}"
  },
  {
    "path": "provision/playbooks/anarchopi/electrum/backup.j2",
    "content": "#!/usr/bin/env bash\r\n\r\nmkdir -p /data/backup/raspibolt\r\nrm /data/backup/raspibolt/bitcoin.tar\r\ntar cvf /data/backup/raspibolt/bitcoin.tar ~/.bitcoin/bitcoin.conf ~/.bitcoin/wallet.dat ~/.bitcoin/peers.dat ~/.bitcoin/banlist.dat\r\nrm /data/backup/raspibolt/lnd.tar\r\ntar cvf /data/backup/raspibolt/lnd.tar ~/.lnd/lnd.conf\r\nrm /data/backup/raspibolt/lnd_channels.json\r\nlncli exportchanbackup --all --output_file /data/backup/raspibolt/lnd_channels.json"
  },
  {
    "path": "provision/playbooks/anarchopi/electrum/electrs.service",
    "content": "# /etc/systemd/system/electrs.service\r\n\r\n[Unit]\r\nDescription=Electrs daemon\r\nWants=bitcoind.service\r\nAfter=bitcoind.service\r\n\r\n[Service]\r\n\r\n# Service execution\r\n###################\r\n\r\nExecStart=/usr/local/bin/electrs --conf /data/electrs/electrs.conf\r\n\r\n\r\n# Process management\r\n####################\r\n\r\nType=simple\r\nRestart=always\r\nTimeoutSec=120\r\nRestartSec=30\r\nKillMode=process\r\n\r\n\r\n# Directory creation and permissions\r\n####################################\r\n\r\nUser=bitcoin\r\nGroup=bitcoin\r\n\r\n# /run/electrs\r\nRuntimeDirectory=electrs\r\nRuntimeDirectoryMode=0710\r\n\r\n\r\n# Hardening measures\r\n####################\r\n\r\n# Provide a private /tmp and /var/tmp.\r\nPrivateTmp=true\r\n\r\n# Mount /usr, /boot/ and /etc read-only for the process.\r\nProtectSystem=full\r\n\r\n# Disallow the process and all of its children to gain\r\n# new privileges through execve().\r\nNoNewPrivileges=true\r\n\r\n# Use a new /dev namespace only populated with API pseudo devices\r\n# such as /dev/null, /dev/zero and /dev/random.\r\nPrivateDevices=true\r\n\r\n# Deny the creation of writable and executable memory mappings.\r\nMemoryDenyWriteExecute=true\r\n\r\n[Install]\r\nWantedBy=multi-user.target"
  },
  {
    "path": "provision/playbooks/anarchopi/electrum/electrum.conf.j2",
    "content": "upstream electrum {\r\n  server 192.168.1.157:50001 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  ssl_certificate /etc/letsencrypt/live/{{ electrum_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ electrum_domain }}/privkey.pem;\r\n  ssl_session_cache shared:SSL:1m;\r\n  ssl_session_timeout 4h;\r\n  ssl_protocols TLSv1.2 TLSv1.3;\r\n  ssl_prefer_server_ciphers on;\r\n  server_name {{ electrum_domain }};\r\n\r\n  location / {\r\n    proxy_pass         http://electrum;\r\n    proxy_http_version 1.1;\r\n\r\n    # Ensuring it can use websockets\r\n    proxy_set_header   Upgrade $http_upgrade;\r\n    proxy_set_header   Connection \"upgrade\";\r\n    proxy_set_header   X-Real-IP $remote_addr;\r\n    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header   X-Forwarded-Proto http;\r\n    proxy_redirect     http:// $scheme://;\r\n\r\n    # The proxy must preserve the host because gotify verifies the host with the origin\r\n    # for WebSocket connections\r\n    proxy_set_header   Host $http_host;\r\n\r\n    # These sets the timeout so that the websocket can stay alive\r\n    proxy_connect_timeout   7m;\r\n    proxy_send_timeout      7m;\r\n    proxy_read_timeout      7m;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}"
  },
  {
    "path": "provision/playbooks/anarchopi/electrum/electrum.yaml",
    "content": "- hosts: master\r\n  become: yes\r\n  vars:\r\n    certbot_auto_renew: false\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ electrum_domain }}\"\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n    - role: geerlingguy.certbot\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/electrum.conf\r\n      template:\r\n        src: electrum.conf.j2\r\n        dest: /etc/nginx/sites-enabled/electrum.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n\r\n- hosts: anarchopi\r\n  become: yes\r\n  roles:\r\n    - role: weareinteractive.ufw\r\n  vars:\r\n    ufw_reset: no\r\n    ufw_logging: \"off\"\r\n    ufw_rules:\r\n      - { port: 50001, rule: allow, comment: \"Expose electrs rpc\" }\r\n      - { port: 50002, rule: allow, comment: \"Expose electrs\" }\r\n  tasks:\r\n    - name: Install clang\r\n      apt:\r\n        name: clang\r\n    - name: Install cmake\r\n      apt:\r\n        name: cmake \r\n    - name: Check if rust is installed\r\n      command: 'rustc --version'\r\n      register: rust_is_installed\r\n      ignore_errors: True\r\n    - name: Download rust\r\n      when: rust_is_installed is failed\r\n      get_url:\r\n        url: https://static.rust-lang.org/dist/rust-1.42.0-armv7-unknown-linux-gnueabihf.tar.gz\r\n        dest: /tmp/rust.tar.gz\r\n    - name: Extract rust\r\n      when: rust_is_installed is failed\r\n      unarchive:\r\n        remote_src: yes\r\n        src: /tmp/rust.tar.gz\r\n        dest: /tmp\r\n    - name: Install rust\r\n      when: rust_is_installed is failed\r\n      command: bash /tmp/rust-1.42.0-armv7-unknown-linux-gnueabihf/install.sh\r\n    - name: Check if electrs is installed\r\n      command: 'electrs  --help'\r\n      register: electrs_is_installed\r\n      ignore_errors: True\r\n    - name: Clone electrs repo\r\n      when: electrs_is_installed is failed\r\n      git:\r\n        repo: https://github.com/romanz/electrs.git\r\n        dest: /home/pi/electrs\r\n        accept_hostkey: yes\r\n        update: yes\r\n    - name: Compile electrs\r\n      when: electrs_is_installed is failed\r\n      command: \r\n        cmd: 'cargo build --release'\r\n        chdir: /home/pi/electrs\r\n    - name: Install electrs\r\n      when: electrs_is_installed is failed\r\n      copy:\r\n        remote_src: true\r\n        src: /home/pi/electrs/target/release/electrs\r\n        dest: /usr/local/bin/\r\n    - name: Create directory\r\n      file:\r\n        group: bitcoin\r\n        owner: bitcoin\r\n        path: /data/electrs\r\n        state: directory\r\n    - name: Create symbolic link\r\n      become: yes\r\n      file:\r\n        group: bitcoin\r\n        owner: bitcoin\r\n        src: /data/electrs\r\n        dest: /home/bitcoin/.electrs\r\n        state: link\r\n    - name: Create backup directory\r\n      file:\r\n        group: bitcoin\r\n        owner: bitcoin\r\n        path: /data/backup/\r\n        state: directory\r\n    - name: Mount backup directory\r\n      mount:\r\n        state: mounted\r\n        fstype: cifs\r\n        opts: \"domain=mr-pickle.here,username={{ qnap_username }},password={{ qnap_password }},file_mode=0664,dir_mode=0775,gid=bitcoin,uid=bitcoin\"\r\n        src: \"//mr-pickle.here/SDDisk1\"\r\n        path: \"/data/backup\"\r\n    - name: Upload backup script\r\n      template:\r\n        src: backup.j2\r\n        dest: /usr/local/bin/raspibolt-backup\r\n        mode: '0555'\r\n    - name: Create electrs.service\r\n      template:\r\n        src: electrs.service\r\n        dest: /lib/systemd/system/electrs.service\r\n    - name: Restart service electrs.service\r\n      systemd:\r\n        state: started\r\n        daemon_reload: yes\r\n        name: electrs"
  },
  {
    "path": "provision/playbooks/anarchopi/ipfs/ipfs.conf.j2",
    "content": "upstream ipfs {\n  server 192.168.1.157:8088 fail_timeout=30 max_fails=5 max_conns=20;\n}\n\nupstream ipfs-api {\n  server 192.168.1.157:5001 fail_timeout=30 max_fails=5 max_conns=20;\n}\n\n\nserver {\n  listen 80;\n  listen [::]:80;\n  server_name webui-{{ ipfs_domain }};\n  \n  access_log /var/log/nginx/ipfs.good.log;\n  error_log  /var/log/nginx/ipfs.bad.log;\n\n  proxy_next_upstream error;\n  proxy_buffering off;\n  proxy_buffer_size 4k;\n  proxy_temp_path /tmp/nginx;\n  proxy_hide_header Access-Control-Allow-Headers;\n  proxy_hide_header Access-Control-Expose-Headers;\n  proxy_read_timeout 1800s;\n\n  location / {\n    allow 192.168.0.0/16;\n    allow 10.0.0.0/16;\n    deny all;\n\n    proxy_pass http://ipfs-api;\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"upgrade\";\n    proxy_max_temp_file_size    0;\n  }\n\n  error_page 403 404 @error;\n\n  location @error {\n    root /var/www;\n    try_files /403.html /403.html;\n  }\n\n  client_max_body_size 50M;\n  keepalive_timeout 10;\n}\n\n\nserver {\n  listen 443 ssl;\n  ssl        on;\n  ssl_certificate /etc/letsencrypt/live/{{ ipfs_domain }}/fullchain.pem;\n  ssl_certificate_key /etc/letsencrypt/live/{{ ipfs_domain }}/privkey.pem;\n  server_name {{ ipfs_domain }};\n\n  access_log /var/log/nginx/ipfs.access.log;\n  error_log  /var/log/nginx/ipfs.error.log;\n\n  proxy_next_upstream error;\n  proxy_buffering off;\n  proxy_buffer_size 4k;\n  proxy_temp_path /tmp/nginx;\n  proxy_hide_header Access-Control-Allow-Headers;\n  proxy_hide_header Access-Control-Expose-Headers;\n  proxy_read_timeout 1800s;\n\n  location / {\n    proxy_pass http://ipfs/;\n    proxy_set_header Host $http_host;\n    proxy_cache_bypass $http_upgrade;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    proxy_max_temp_file_size    0;\n  }\n\n\n  error_page 403 404 @error;\n\n  location @error {\n    root /var/www;\n    try_files /403.html /403.html;\n  }\n\n  client_max_body_size 50M;\n  keepalive_timeout 10;\n}\n"
  },
  {
    "path": "provision/playbooks/anarchopi/ipfs/ipfs.service",
    "content": "[Unit]\r\nDescription=IPFS daemon\r\nWants=network.target\r\nAfter=network.target\r\n[Service]\r\nUser=ipfs\r\nGroup=ipfs\r\nType=simple\r\nEnvironment=IPFS_PATH=/mnt/hdd/ipfs\r\nExecStart=/usr/local/bin/ipfs daemon --migrate\r\nExecStop=/usr/bin/pkill -f ipfs\r\nRestart=on-failure\r\nRestartSec=10s\r\n[Install]\r\nWantedBy=multi-user.target"
  },
  {
    "path": "provision/playbooks/anarchopi/ipfs/ipfs.yaml",
    "content": "# - hosts: master\r\n#   become: yes\r\n#   roles:\r\n#     - role: geerlingguy.nginx\r\n#     - role: geerlingguy.certbot\r\n#   vars:\r\n#     certbot_auto_renew: false\r\n#     certbot_admin_email: \"{{ email }}\"\r\n#     certbot_create_if_missing: true\r\n#     certbot_certs:\r\n#       - domains:\r\n#         - \"{{ ipfs_domain }}\"\r\n#   handlers:\r\n#     - name: restart nginx\r\n#       become: yes\r\n#       service:\r\n#         name: nginx\r\n#         enabled: yes\r\n#         state: restarted\r\n#   tasks:\r\n#     - name: Create /etc/nginx/sites-enabled/ipfs.conf\r\n#       template:\r\n#         src: ipfs.conf.j2\r\n#         dest: /etc/nginx/sites-enabled/ipfs.conf\r\n#       notify:\r\n#         - reload nginx\r\n#         - restart nginx\r\n\r\n- hosts: media\r\n  become: yes\r\n  vars:\r\n    ipfs_ver: v0.7.0\r\n  tasks:\r\n    - name: Create ipfs group\r\n      group:\r\n        name: ipfs\r\n    - name: Create ipfs user\r\n      user:\r\n        name: ipfs\r\n        group: ipfs\r\n    - name: Check if ipfs is installed\r\n      command: 'ipfs --version'\r\n      register: ipfs_is_installed\r\n      ignore_errors: True\r\n    - name: Download ipfs core\r\n      when: ipfs_is_installed is failed\r\n      get_url:\r\n        url: https://dist.ipfs.io/go-ipfs/{{ ipfs_ver }}/go-ipfs_{{ ipfs_ver }}_linux-amd64.tar.gz\r\n        dest: /tmp/ipfs-{{ ipfs_ver }}.tar.gz\r\n    - name: Extract ipfs core\r\n      when: ipfs_is_installed is failed\r\n      unarchive:\r\n        remote_src: yes\r\n        src: /tmp/ipfs-{{ ipfs_ver }}.tar.gz\r\n        dest: /tmp\r\n    - name: Install ipfs core\r\n      when: ipfs_is_installed is failed\r\n      command: bash /tmp/go-ipfs/install.sh\r\n    - name: Create ipfs.service\r\n      template:\r\n        src: ipfs.service\r\n        dest: /lib/systemd/system/ipfs.service\r\n    - name: Restart service ipfs.service\r\n      systemd:\r\n        state: started\r\n        daemon_reload: yes\r\n        name: ipfs\r\n    # - name: Mount backup directory\r\n    #   mount:\r\n    #     state: mounted\r\n    #     fstype: cifs\r\n    #     opts: \"domain=192.168.1.181,username={{ qnap_username }},password={{ qnap_password }},file_mode=0664,dir_mode=0775,gid=bitcoin,uid=bitcoin\"\r\n    #     src: \"//192.168.1.181/SDDisk1\"\r\n    #     path: \"/mnt/hdd/backup\""
  },
  {
    "path": "provision/playbooks/anarchopi/lnd/lnd.service",
    "content": "# RaspiBolt: systemd unit for lnd\r\n# /etc/systemd/system/lnd.service\r\n\r\n[Unit]\r\nDescription=LND Lightning Network Daemon\r\nWants=bitcoind.service\r\nAfter=bitcoind.service\r\n\r\n[Service]\r\n\r\n# Service execution\r\n###################\r\n\r\nExecStart=/usr/local/bin/lnd\r\n\r\n\r\n# Process management\r\n####################\r\n\r\nType=simple\r\nRestart=always\r\nRestartSec=30\r\nTimeoutSec=240\r\nLimitNOFILE=128000\r\n\r\n\r\n# Directory creation and permissions\r\n####################################\r\n\r\n# Run as bitcoin:bitcoin\r\nUser=bitcoin\r\nGroup=bitcoin\r\n\r\n# /run/lightningd\r\nRuntimeDirectory=lightningd\r\nRuntimeDirectoryMode=0710\r\n\r\n\r\n# Hardening measures\r\n####################\r\n\r\n# Provide a private /tmp and /var/tmp.\r\nPrivateTmp=true\r\n\r\n# Mount /usr, /boot/ and /etc read-only for the process.\r\nProtectSystem=full\r\n\r\n# Disallow the process and all of its children to gain\r\n# new privileges through execve().\r\nNoNewPrivileges=true\r\n\r\n# Use a new /dev namespace only populated with API pseudo devices\r\n# such as /dev/null, /dev/zero and /dev/random.\r\nPrivateDevices=true\r\n\r\n# Deny the creation of writable and executable memory mappings.\r\nMemoryDenyWriteExecute=true\r\n\r\n\r\n[Install]\r\nWantedBy=multi-user.target\r\n\r\n"
  },
  {
    "path": "provision/playbooks/anarchopi/lnd/lnd.yaml",
    "content": "- hosts: anarchopi\r\n  become: yes\r\n  roles:\r\n    - role: weareinteractive.ufw\r\n  vars:\r\n    lnd_version: v0.10.2-beta.rc1\r\n    ufw_reset: no\r\n    ufw_logging: \"off\"\r\n    ufw_rules:\r\n      - { port: 9735, rule: allow, comment: \"Expose lnd\" }\r\n  tasks:\r\n    - name: Check if lnd is installed\r\n      command: 'lnd --version'\r\n      register: lnd_is_installed\r\n      ignore_errors: True\r\n    - name: Download lnd core\r\n      when: lnd_is_installed is failed\r\n      get_url:\r\n        url: https://github.com/lightningnetwork/lnd/releases/download/{{ lnd_version }}/lnd-linux-armv7-{{ lnd_version }}.tar.gz\r\n        dest: /tmp/lnd.tar.gz\r\n    - name: Extract lnd\r\n      when: lnd_is_installed is failed\r\n      unarchive:\r\n        remote_src: yes\r\n        src: /tmp/lnd.tar.gz\r\n        dest: /tmp\r\n    - name: Install lnd\r\n      when: lnd_is_installed is failed\r\n      command: install -m 0755 -o root -g root -t /usr/local/bin /tmp/lnd-{{ lnd_version }}/*\r\n    - name: Create directory\r\n      file:\r\n        group: bitcoin\r\n        owner: bitcoin\r\n        path: /data/lnd\r\n        state: directory\r\n    - name: Create symbolic link\r\n      become: yes\r\n      file:\r\n        group: bitcoin\r\n        owner: bitcoin\r\n        src: /data/lnd\r\n        dest: /home/bitcoin/.lnd\r\n        state: link\r\n    - name: Create lnd.service\r\n      template:\r\n        src: lnd.service\r\n        dest: /lib/systemd/system/lnd.service\r\n    - name: Restart service lnd.service\r\n      systemd:\r\n        state: started\r\n        daemon_reload: yes\r\n        name: lnd\r\n"
  },
  {
    "path": "provision/playbooks/anarchopi/torrents/torrents.conf.j2",
    "content": "upstream torrents {\r\n  server 192.168.1.200:9091 fail_timeout=5;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ torrents_domain }};\r\n\r\n  location / {\r\n    allow 192.168.0.0/16;\r\n    allow 10.0.0.0/16;\r\n    deny all;\r\n    proxy_pass http://torrents/;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}"
  },
  {
    "path": "provision/playbooks/anarchopi/torrents/torrents.yaml",
    "content": "\r\n- hosts:\r\n    - media\r\n  become: yes\r\n  tasks:\r\n    - name: Create transmission group\r\n      group:\r\n        name: transmission\r\n    - name: Create transmission user\r\n      user:\r\n        name: transmission\r\n        group: transmission\r\n\r\n- hosts: \r\n    - media\r\n  become: yes\r\n  roles:\r\n    - role: elboletaire.transmission\r\n      sudo: yes\r\n      transmission_user: transmission\r\n      transmission_watch_dir_enabled: false\r\n      transmission_rpc_auth_required: true\r\n      transmission_password: transmission\r\n      transmission_rpc_whitelist_enabled: false\r\n      transmission_incomplete_dir_enabled: true\r\n      transmission_incomplete_dir: /home/transmission/torrents\r\n      transmission_download_dir: /home/transmission/downloaded\r\n      transmission_blocklist_enabled: true\r\n      transmission_blocklist_url: http://john.bitsurge.net/public/biglist.p2p.gz\r\n      transmission_ratio_limit: 2.0\r\n      transmission_ratio_limit_enabled: true\r\n  tasks:\r\n    - name: Create movies directory\r\n      file:\r\n        group: transmission\r\n        owner: transmission\r\n        path: /home/transmission/downloaded/{{ item.share }}\r\n        state: directory\r\n      loop:\r\n        - { share: 'Movies' }\r\n        - { share: 'MoviesAndTV' }\r\n        - { share: 'Music' }\r\n    - name: mount movies directory\r\n      mount:\r\n        state: mounted\r\n        fstype: cifs\r\n        opts: \"domain=192.168.1.181,username={{ qnap_username }},password={{ qnap_password }},file_mode=0664,dir_mode=0775,gid=transmission,uid=transmission\"\r\n        src: \"//192.168.1.181/{{ item.share }}\"\r\n        path: \"/home/transmission/downloaded/{{ item.share }}\"\r\n      loop:\r\n        - { share: 'Movies' }\r\n        - { share: 'MoviesAndTV' }\r\n        - { share: 'Music' }\r\n\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/torrents.conf\r\n      template:\r\n        src: torrents.conf.j2\r\n        dest: /etc/nginx/sites-enabled/torrents.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n\r\n- hosts: media\r\n  become: yes\r\n  roles:\r\n    - role: weareinteractive.ufw\r\n  vars:\r\n    ansible_os_family: 'Debian'\r\n    ufw_reset: no\r\n    ufw_logging: \"off\"\r\n    ufw_rules:\r\n      - { port: 9091, rule: allow, comment: \"Transmission webui\" }"
  },
  {
    "path": "provision/playbooks/blog/blog.conf.j2",
    "content": "upstream blog {\n  server 192.168.1.157:8088 fail_timeout=30 max_fails=5 max_conns=20;\n}\n\nserver {\n  listen 80;\n  listen [::]:80;\n  server_name h7mgmdxjv6h3p23cclcewudcej4adhyeb5emgleoru4wf2ibioklgzqd.onion;\n  \n\n  location / {\n    proxy_pass http://blog/ipns/QmSufpGo5wJNgbwATFeF2sxGUcGTabVGT1fSBkRJpzrMJn/;\n    proxy_set_header Host $host;\n\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"upgrade\";\n\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\n    proxy_intercept_errors on;\n    error_page 404 = http://$server_name;\n  }\n\n  error_page 404 403 @error;\n\n  location @error {\n    root /var/www;\n    try_files /403.html /403.html;\n  }\n\n  client_max_body_size 50M;\n  keepalive_timeout 10;\n}\n\n\nserver {\n  listen 80;\n  listen [::]:80;\n  server_name macbury.ninja;\n  return 301 https://$server_name$request_uri;\n}\n\nserver {\n  listen 443 ssl;\n  ssl        on;\n  ssl_certificate /etc/letsencrypt/live/macbury.ninja/fullchain.pem;\n  ssl_certificate_key /etc/letsencrypt/live/macbury.ninja/privkey.pem;\n  server_name macbury.ninja;\n\n  location / {\n    proxy_pass http://blog/;\n    proxy_set_header Host $host;\n\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"upgrade\";\n\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\n    proxy_intercept_errors on;\n    error_page 404 = https://$server_name;\n  }\n\n  error_page 403 @error;\n\n  location @error {\n    root /var/www;\n    try_files /403.html /403.html;\n  }\n\n  client_max_body_size 50M;\n  keepalive_timeout 10;\n}\n"
  },
  {
    "path": "provision/playbooks/blog/blog.yaml",
    "content": "# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/blog.conf\r\n      template:\r\n        src: blog.conf.j2\r\n        dest: /etc/nginx/sites-enabled/blog.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx"
  },
  {
    "path": "provision/playbooks/cat_feeder/cat-motion.service",
    "content": "[Unit]\r\nDescription=Led Service\r\nAfter=network.target ntpdate.service\r\n\r\n[Service]\r\nEnvironment=PATH=/pussificator:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\r\nExecStartPre=/bin/bash -c 'test -p /tmp/motion-status || /bin/mknod /tmp/motion-status p'\r\nExecStart=/usr/bin/python3 -u src/motion.py </tmp/motion-status\r\nWorkingDirectory=/pussificator\r\nStandardOutput=inherit\r\nStandardError=inherit\r\nStartLimitBurst=1000\r\nRestart=always\r\nRestartSec=90\r\nUser=root\r\n\r\n[Install]\r\nWantedBy=multi-user.target"
  },
  {
    "path": "provision/playbooks/cat_feeder/cat.yaml",
    "content": "- hosts: cat_feeder\r\n  become: yes\r\n  roles:\r\n    - role: weareinteractive.ufw\r\n  vars:\r\n    ufw_reset: yes\r\n    ufw_logging: \"off\"\r\n    ufw_rules:\r\n      - { port: 22, rule: allow, comment: 'Allow SSH' }\r\n      - { port: 137, rule: allow, comment: 'Samba' }\r\n      - { port: 138, rule: allow, comment: 'Samba' }\r\n      - { port: 139, rule: allow, comment: 'Samba' }\r\n      - { port: 445, rule: allow, comment: 'Samba' }\r\n      - { port: 80, rule: allow, comment: 'MotionEye UI' }\r\n      - { port: 8081, rule: allow, comment: 'MotionEye Stream' }\r\n      - { port: 61208, rule: allow, comment: 'Glances' }\r\n\r\n- hosts: cat_feeder\r\n  become: yes\r\n  tasks:\r\n    - name: cifs\r\n      apt:\r\n        name: cifs-utils\r\n    - name: samba\r\n      apt:\r\n        name: samba\r\n    - name: htop\r\n      apt:\r\n        name: htop\r\n    - name: wiringpi\r\n      apt:\r\n        name: wiringpi\r\n    - name: git\r\n      apt:\r\n        name: git\r\n- hosts: cat_feeder\r\n  become: yes\r\n  roles:\r\n    - role: mikolak-net.raspi_config\r\n  vars:\r\n      raspi_config_expanded_filesystem: yes\r\n      raspi_config_locale: en_US.UTF-8\r\n      raspi_config_hostname: CatFeeder\r\n      raspi_config_enable_camera: yes\r\n\r\n- hosts: cat_feeder\r\n  become: yes\r\n  tasks:\r\n    - name: ffmpeg\r\n      apt:\r\n        name: ffmpeg\r\n    - name: libmariadb3\r\n      apt:\r\n        name: libmariadb3\r\n    - name: libpq5\r\n      apt:\r\n        name: libpq5\r\n    - name: libmicrohttpd12\r\n      apt:\r\n        name: libmicrohttpd12\r\n    - name: python-pip\r\n      apt:\r\n        name: python-pip\r\n    - name: python-dev\r\n      apt:\r\n        name: python-dev\r\n    - name: python3-dev\r\n      apt:\r\n        name: python3-dev\r\n    - name: libssl-dev\r\n      apt:\r\n        name: libssl-dev\r\n    - name: libcurl4-openssl-dev\r\n      apt:\r\n        name: libcurl4-openssl-dev\r\n    - name: libjpeg-dev\r\n      apt:\r\n        name: libjpeg-dev\r\n    - name: libz-dev\r\n      apt:\r\n        name: libz-dev\r\n    - name: Download motion eye\r\n      get_url:\r\n        url: https://github.com/Motion-Project/motion/releases/download/release-4.2.2/pi_buster_motion_4.2.2-1_armhf.deb\r\n        dest: \"/tmp/motioneye.deb\"\r\n    - name: Install motioneye\r\n      apt: \r\n        deb: /tmp/motioneye.deb\r\n      sudo: true\r\n    - name: 'motioneye pip package'\r\n      pip:\r\n        name: motioneye\r\n\r\n- hosts: cat_feeder\r\n  become: yes\r\n  tasks:\r\n    - name: 'Install glances'\r\n      pip:\r\n        name: glances\r\n    - name: 'Install bottle'\r\n      pip:\r\n        name: bottle\r\n    - name: Create glances.service\r\n      template:\r\n        src: ./glances.service\r\n        dest: /lib/systemd/system/glances.service\r\n    - name: enable glances service\r\n      systemd:\r\n        name: glances\r\n        state: started\r\n        enabled: yes\r\n        daemon_reload: yes\r\n\r\n- hosts: cat_feeder\r\n  become: yes\r\n  tasks:\r\n    - name: Clone pussificator repo\r\n      git:\r\n        repo: https://github.com/macbury/pussificator.git\r\n        dest: /pussificator\r\n        accept_hostkey: yes\r\n        update: no\r\n    - name: Install pussificator dependencies\r\n      become: yes\r\n      pip:\r\n        executable: /usr/bin/pip3\r\n        requirements: /pussificator/requirements.txt\r\n    - name: Create cat-motion.service\r\n      template:\r\n        src: ./cat-motion.service\r\n        dest: /lib/systemd/system/cat-motion.service\r\n    - name: enable cat-motion service\r\n      systemd:\r\n        name: cat-motion\r\n        state: started\r\n        enabled: yes\r\n        daemon_reload: yes\r\n    - name: Create servo.service\r\n      template:\r\n        src: ./servo.service\r\n        dest: /lib/systemd/system/servo.service\r\n    - name: enable servo service\r\n      systemd:\r\n        name: servo\r\n        state: started\r\n        enabled: yes\r\n        daemon_reload: yes\r\n    - name: Create led.service\r\n      template:\r\n        src: ./led.service\r\n        dest: /lib/systemd/system/led.service\r\n    - name: enable led service\r\n      systemd:\r\n        name: led\r\n        state: started\r\n        enabled: yes\r\n        daemon_reload: yes\r\n\r\n- hosts: cat_feeder\r\n  become: yes\r\n  tasks:\r\n    - name: Creates motione eye dir\r\n      file:\r\n        path: /etc/motioneye/\r\n        state: directory\r\n    - name: Creates motione media dir\r\n      file:\r\n        path: /home/pi/motion_eye\r\n        state: directory\r\n        owner: \"pi\"\r\n        group: \"pi\"\r\n    - name: Create motion eye config\r\n      template:\r\n        src: ./motioneye.conf\r\n        dest: /etc/motioneye/motioneye.conf\r\n    - name: Create motioneye.service\r\n      template:\r\n        src: ./motioneye.service\r\n        dest: /lib/systemd/system/motioneye.service\r\n    - name: enable motioneye service\r\n      systemd:\r\n        name: motioneye\r\n        state: started\r\n        enabled: yes\r\n        daemon_reload: yes\r\n\r\n"
  },
  {
    "path": "provision/playbooks/cat_feeder/glances.service",
    "content": "[Unit]\r\nDescription=Glances\r\nAfter=network.target\r\n\r\n[Service]\r\nExecStart=/usr/local/bin/glances -w\r\nRestart=on-abort\r\n\r\n[Install]\r\nWantedBy=multi-user.target"
  },
  {
    "path": "provision/playbooks/cat_feeder/led.service",
    "content": "[Unit]\r\nDescription=Servo Service\r\nAfter=network.target ntpdate.service\r\n\r\n[Service]\r\nEnvironment=PATH=/pussificator:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\r\nExecStart=/usr/bin/python3 -u src/led.py\r\nWorkingDirectory=/pussificator/\r\nStandardOutput=inherit\r\nStandardError=inherit\r\nStartLimitBurst=1000\r\nRestart=always\r\nRestartSec=90\r\nUser=root\r\n\r\n[Install]\r\nWantedBy=multi-user.target"
  },
  {
    "path": "provision/playbooks/cat_feeder/motioneye.conf",
    "content": "\r\n# path to the configuration directory (must be writable by motionEye)\r\nconf_path /etc/motioneye\r\n\r\n# path to the directory where pid files go (must be writable by motionEye)\r\nrun_path /var/run\r\n\r\n# path to the directory where log files go (must be writable by motionEye)\r\nlog_path /var/log\r\n\r\n# default output path for media files (must be writable by motionEye)\r\nmedia_path /home/pi/motion_eye\r\n\r\n# the log level (use quiet, error, warning, info or debug)\r\nlog_level info\r\n\r\n# the IP address to listen on\r\n# (0.0.0.0 for all interfaces, 127.0.0.1 for localhost)\r\nlisten 0.0.0.0\r\n\r\n# the TCP port to listen on\r\nport 80\r\n\r\n# path to the motion binary to use (automatically detected if commented)\r\n#motion_binary /usr/bin/motion\r\n\r\n# whether motion HTTP control interface listens on\r\n# localhost or on all interfaces\r\nmotion_control_localhost true\r\n\r\n# the TCP port that motion HTTP control interface listens on\r\nmotion_control_port 7999\r\n\r\n# interval in seconds at which motionEye checks if motion is running\r\nmotion_check_interval 10\r\n\r\n# whether to restart the motion daemon when an error occurs while communicating with it\r\nmotion_restart_on_errors false\r\n\r\n# interval in seconds at which motionEye checks the SMB mounts\r\nmount_check_interval 300\r\n\r\n# interval in seconds at which the janitor is called\r\n# to remove old pictures and movies\r\ncleanup_interval 43200\r\n\r\n# timeout in seconds to wait for response from a remote motionEye server\r\nremote_request_timeout 10\r\n\r\n# timeout in seconds to wait for mjpg data from the motion daemon\r\nmjpg_client_timeout 10\r\n\r\n# timeout in seconds after which an idle mjpg client is removed\r\n# (set to 0 to disable)\r\nmjpg_client_idle_timeout 10\r\n\r\n# enable SMB shares (requires motionEye to run as root) \r\nsmb_shares false\r\n\r\n# the directory where the SMB mount points will be created\r\nsmb_mount_root /media\r\n\r\n# path to the wpa_supplicant.conf file\r\n# (enable this to configure wifi settings from the UI)\r\n#wpa_supplicant_conf /etc/wpa_supplicant.conf\r\n\r\n# path to the localtime file\r\n# (enable this to configure the system time zone from the UI)\r\n#local_time_file /etc/localtime\r\n\r\n# enables shutdown and rebooting after changing system settings\r\n# (such as wifi settings or time zone)\r\nenable_reboot false\r\n\r\n# timeout in seconds to use when talking to the SMTP server\r\nsmtp_timeout 60\r\n\r\n# timeout in seconds to wait for media files list\r\nlist_media_timeout 120\r\n\r\n# timeout in seconds to wait for media files list, when sending emails\r\nlist_media_timeout_email 10\r\n\r\n# timeout in seconds to wait for zip file creation\r\nzip_timeout 500\r\n\r\n# timeout in seconds to wait for timelapse creation\r\ntimelapse_timeout 500\r\n\r\n# enable adding and removing cameras from UI\r\nadd_remove_cameras true\r\n\r\n# enables HTTP basic authentication scheme (in addition to, not instead of the signature mechanism)\r\nhttp_basic_auth false\r\n\r\n# overrides the hostname (useful if motionEye runs behind a reverse proxy)\r\n# server_name motionEye\r\n"
  },
  {
    "path": "provision/playbooks/cat_feeder/motioneye.service",
    "content": "[Unit]\r\nDescription=motionEye Server\r\n\r\n[Service]\r\nExecStart=/usr/local/bin/meyectl startserver -c /etc/motioneye/motioneye.conf\r\nRestart=on-abort\r\n\r\n[Install]\r\nWantedBy=multi-user.target\r\n"
  },
  {
    "path": "provision/playbooks/cat_feeder/servo.service",
    "content": "[Unit]\r\nDescription=Servo Service\r\nAfter=network.target ntpdate.service\r\n\r\n[Service]\r\nEnvironment=PATH=/pussificator:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\r\nExecStart=/usr/bin/python3 -u src/servo.py\r\nWorkingDirectory=/pussificator/\r\nStandardOutput=inherit\r\nStandardError=inherit\r\nStartLimitBurst=1000\r\nRestart=always\r\nRestartSec=90\r\nUser=root\r\n\r\n[Install]\r\nWantedBy=multi-user.target"
  },
  {
    "path": "provision/playbooks/ci/ci.conf.j2",
    "content": "upstream ci {\r\n  server 127.0.0.1:4282 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ ci_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  ssl_certificate /etc/letsencrypt/live/{{ ci_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ ci_domain }}/privkey.pem;\r\n  server_name {{ ci_domain }};\r\n\r\n  location / {\r\n    proxy_pass         http://ci;\r\n    proxy_http_version 1.1;\r\n\r\n    # Ensuring it can use websockets\r\n    proxy_set_header   Upgrade $http_upgrade;\r\n    proxy_set_header   Connection \"upgrade\";\r\n    proxy_set_header   X-Real-IP $remote_addr;\r\n    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header   X-Forwarded-Proto http;\r\n    proxy_redirect     http:// $scheme://;\r\n\r\n    # The proxy must preserve the host because gotify verifies the host with the origin\r\n    # for WebSocket connections\r\n    proxy_set_header   Host $http_host;\r\n\r\n    # These sets the timeout so that the websocket can stay alive\r\n    proxy_connect_timeout   7m;\r\n    proxy_send_timeout      7m;\r\n    proxy_read_timeout      7m;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}\r\n"
  },
  {
    "path": "provision/playbooks/ci/ci.yaml",
    "content": "- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_auto_renew: false\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ ci_domain }}\"\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/ci.conf\r\n      template:\r\n        src: ci.conf.j2\r\n        dest: /etc/nginx/sites-enabled/ci.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n"
  },
  {
    "path": "provision/playbooks/decibel_meter/asound.conf",
    "content": "options snd_rpi_googlemihat_soundcard index=0\r\n\r\npcm.softvol {\r\n    type softvol\r\n    slave.pcm dmix\r\n    control {\r\n        name Master\r\n        card 0\r\n    }\r\n}\r\n\r\npcm.micboost {\r\n    type route\r\n    slave.pcm dsnoop\r\n    ttable {\r\n        0.0 30.0\r\n        1.1 30.0\r\n    }\r\n}\r\n\r\npcm.!default {\r\n    type asym\r\n    playback.pcm \"plug:softvol\"\r\n    capture.pcm \"plug:micboost\"\r\n}\r\n\r\nctl.!default {\r\n    type hw\r\n    card 0\r\n}"
  },
  {
    "path": "provision/playbooks/decibel_meter/configure-driver.sh",
    "content": "#!/bin/bash\n#\n# Copyright 2017 Google 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\nset -o errexit\n\nif [[ $EUID -ne 0 ]]; then\n   echo \"This script must be run as root (use sudo)\" 1>&2\n   exit 1\nfi\n\nset -e\n\nsed -i \\\n  -e \"s/^dtparam=audio=on/#\\0/\" \\\n  -e \"s/^#\\(dtparam=i2s=on\\)/\\1/\" \\\n  /boot/config.txt\ngrep -q \"dtoverlay=i2s-mmap\" /boot/config.txt || \\\n  echo \"dtoverlay=i2s-mmap\" >> /boot/config.txt\ngrep -q \"dtoverlay=googlevoicehat-soundcard\" /boot/config.txt || \\\n  echo \"dtoverlay=googlevoicehat-soundcard\" >> /boot/config.txt\ngrep -q \"dtparam=i2s=on\" /boot/config.txt || \\\n  echo \"dtparam=i2s=on\" >> /boot/config.txt\n"
  },
  {
    "path": "provision/playbooks/decibel_meter/decibel_meter.yaml",
    "content": "- hosts: decibel_meter\r\n  become: yes\r\n  roles:\r\n    - role: weareinteractive.ufw\r\n  vars:\r\n    ufw_reset: yes\r\n    ufw_logging: \"off\"\r\n    ufw_rules:\r\n      - { port: 22, rule: allow, comment: 'Allow SSH' }\r\n      - { port: 137, rule: allow, comment: 'Samba' }\r\n      - { port: 138, rule: allow, comment: 'Samba' }\r\n      - { port: 139, rule: allow, comment: 'Samba' }\r\n      - { port: 445, rule: allow, comment: 'Samba' }\r\n      - { port: 61208, rule: allow, comment: 'Glances' }\r\n\r\n- hosts: decibel_meter\r\n  become: yes\r\n  tasks:\r\n    - name: cifs\r\n      apt:\r\n        name: cifs-utils\r\n    - name: samba\r\n      apt:\r\n        name: samba\r\n    - name: htop\r\n      apt:\r\n        name: htop\r\n    - name: wiringpi\r\n      apt:\r\n        name: wiringpi\r\n    - name: git\r\n      apt:\r\n        name: git\r\n    - name: libffi-dev\r\n      apt:\r\n        name: libffi-dev\r\n\r\n- hosts: decibel_meter\r\n  become: yes\r\n  roles:\r\n    - role: mikolak-net.raspi_config\r\n  vars:\r\n      raspi_config_expanded_filesystem: yes\r\n      raspi_config_locale: en_US.UTF-8\r\n      raspi_config_hostname: DecibelMeter\r\n      raspi_config_enable_camera: yes\r\n\r\n- hosts: decibel_meter\r\n  become: yes\r\n  tasks:\r\n    - name: 'Install glances'\r\n      pip:\r\n        name: glances\r\n    - name: 'Install bottle'\r\n      pip:\r\n        name: bottle\r\n    - name: Create glances.service\r\n      template:\r\n        src: ./glances.service\r\n        dest: /lib/systemd/system/glances.service\r\n    - name: enable glances service\r\n      systemd:\r\n        name: glances\r\n        state: started\r\n        enabled: yes\r\n        daemon_reload: yes\r\n\r\n- hosts: decibel_meter\r\n  become: yes\r\n  tasks:\r\n    - name: Create asound confg\r\n      template:\r\n        src: ./asound.conf\r\n        dest: /etc/asound.conf\r\n    - name: Configure sound driver\r\n      script: ./configure-driver.sh\r\n\r\n- hosts: decibel_meter\r\n  tasks:\r\n    - name: Clone decibel repo\r\n      git:\r\n        repo: https://github.com/macbury/decibel_meter.git\r\n        dest: /decibel_meter\r\n        accept_hostkey: yes\r\n        update: no\r\n\r\n- hosts: decibel_meter\r\n  become: yes\r\n  tasks:\r\n    - name: Install dependencies\r\n      become: yes\r\n      pip:\r\n        executable: /usr/bin/pip\r\n        requirements: /decibel_meter/requirements.txt\r\n    - name: Create meter.service\r\n      template:\r\n        src: ./meter.service\r\n        dest: /lib/systemd/system/meter.service\r\n    - name: enable meter service\r\n      systemd:\r\n        name: meter\r\n        state: started\r\n        enabled: yes\r\n        daemon_reload: yes"
  },
  {
    "path": "provision/playbooks/decibel_meter/glances.service",
    "content": "[Unit]\r\nDescription=Glances\r\nAfter=network.target\r\n\r\n[Service]\r\nExecStart=/usr/local/bin/glances -w\r\nRestart=on-abort\r\n\r\n[Install]\r\nWantedBy=multi-user.target"
  },
  {
    "path": "provision/playbooks/decibel_meter/meter.service",
    "content": "[Unit]\r\nDescription=Meter Service\r\nAfter=network.target ntpdate.service\r\n\r\n[Service]\r\nEnvironment=PATH=/decibel_meter:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\r\nExecStart=/usr/bin/python -u src/meter.py\r\nWorkingDirectory=/decibel_meter/\r\nStandardOutput=inherit\r\nStandardError=inherit\r\nStartLimitBurst=1000\r\nRestart=always\r\nRestartSec=90\r\nUser=root\r\n\r\n[Install]\r\nWantedBy=multi-user.target"
  },
  {
    "path": "provision/playbooks/detox/detox.conf.j2",
    "content": "upstream detox {\r\n  server 127.0.0.1:11000 fail_timeout=5;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ detox_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  ssl_certificate /etc/letsencrypt/live/{{ detox_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ detox_domain }}/privkey.pem;\r\n  server_name {{ detox_domain }};\r\n\r\n  location / {\r\n    proxy_pass         http://detox;\r\n\r\n    proxy_http_version 1.1;\r\n    proxy_set_header Upgrade $http_upgrade;\r\n    proxy_set_header Connection \"upgrade\";\r\n\r\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header Host $http_host;\r\n    proxy_redirect off;\r\n\r\n    # These sets the timeout so that the websocket can stay alive\r\n    proxy_connect_timeout   7m;\r\n    proxy_send_timeout      7m;\r\n    proxy_read_timeout      7m;\r\n  }\r\n\r\n  # Proxy download\r\n  location ~* ^/warpipe/http(s?)://(.*?)/(.*) {\r\n    # How to resove remote URLs, you may want to update this depending\r\n    # on your setup, in our case it’s inside a Docker container with\r\n    # dnsmasq running.\r\n    resolver 9.9.9.9 ipv6=off;\r\n    # Do not allow people to mess with this location directly\r\n    # Only internal redirects are allowed\r\n    internal;\r\n\r\n    # Extract download url from the request\r\n    set $download_uri $3;\r\n    set $download_host $2;\r\n    set $download_protocol $1;\r\n\r\n    expires 10d;\r\n\r\n    proxy_set_header Host $download_host;\r\n    proxy_hide_header Authorization;\r\n    proxy_hide_header Cookie;\r\n    proxy_hide_header Content-Disposition;\r\n    proxy_hide_header X-Frame-Options;\r\n    proxy_hide_header Set-Cookie;\r\n\r\n    proxy_ignore_headers    X-Accel-Limit-Rate X-Accel-Expires Expires Cache-Control Set-Cookie Vary;\r\n    proxy_hide_header       Content-Security-Policy;\r\n    proxy_hide_header       Content-Security-Policy-Report-Only;\r\n    proxy_hide_header       Expect-CT;\r\n    proxy_hide_header       Expires;\r\n    proxy_hide_header       Feature-Policy;\r\n    proxy_hide_header       P3P;\r\n    proxy_hide_header       Pragma;\r\n    proxy_hide_header       Public-Key-Pins;\r\n    proxy_hide_header       Public-Key-Pins-Report-Only;\r\n    proxy_hide_header       Referrer-Policy;\r\n    proxy_hide_header       Report-To;\r\n    proxy_hide_header       Set-Cookie;\r\n    proxy_hide_header       Source-Age;\r\n    proxy_hide_header       Strict-Transport-Security;\r\n    proxy_hide_header       Timing-Allow-Origin;\r\n    proxy_hide_header       Vary;\r\n    proxy_hide_header       Via;\r\n    proxy_hide_header       X-Cache;\r\n    proxy_hide_header       X-Cache-Hits;\r\n    proxy_hide_header       X-Content-Type-Options;\r\n    proxy_hide_header       X-GitHub-Request-Id;\r\n    proxy_hide_header       X-hello;\r\n    proxy_hide_header       X-Fastly-Request-ID;\r\n    proxy_hide_header       X-Frame-Options;\r\n    proxy_hide_header       X-XSS-Protection;\r\n    proxy_hide_header       X-Runtime;\r\n    proxy_hide_header       X-Served-By;\r\n    proxy_hide_header       x-amz-cf-id;\r\n    proxy_hide_header       x-amz-id-2;\r\n    proxy_hide_header       x-amz-meta-server-side-encryption;\r\n    proxy_hide_header       x-amz-request-id;\r\n    proxy_hide_header       x-amz-server-side-encryption;\r\n    proxy_hide_header       CF-Cache-Status;\r\n    proxy_hide_header       CF-RAY;\r\n    proxy_read_timeout 60;\r\n    # Compose download url\r\n    set $download_url http$download_protocol://$download_host/$download_uri$is_args$args;\r\n    proxy_set_header Authorization \"\";\r\n    # Do not touch local disks when proxying\r\n    # content to clients\r\n    proxy_max_temp_file_size 0;\r\n\r\n    # Download the file and send it to client\r\n    proxy_ssl_server_name on;\r\n    proxy_ssl_verify off;\r\n    proxy_pass $download_url;\r\n    proxy_ssl_session_reuse off;\r\n    proxy_intercept_errors on;\r\n    error_page 301 302 307 = @handle_proxy_redirect;\r\n  }\r\n\r\n  location @handle_proxy_redirect {\r\n    proxy_read_timeout 30;\r\n    resolver 9.9.9.9 ipv6=off;\r\n    set $saved_redirect_location '$upstream_http_location';\r\n    proxy_pass $saved_redirect_location;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}\r\n"
  },
  {
    "path": "provision/playbooks/detox/detox.yaml",
    "content": "- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_install_from_source: true\r\n    certbot_keep_updated: true\r\n    certbot_auto_renew: true\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ detox_domain }}\"\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/detox.conf\r\n      template:\r\n        src: detox.conf.j2\r\n        dest: /etc/nginx/sites-enabled/detox.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n"
  },
  {
    "path": "provision/playbooks/docker/docker-netshare.service",
    "content": "[Unit]\nDescription=Docker Netshare Support For Samba\nDocumentation=\nAfter=network.target\n\n[Service]\nType=simple\nWorkingDirectory=/home/macbury\nExecStart=/usr/bin/docker-volume-netshare cifs -a 1.39\nRestart=always\n\n[Install]\nWantedBy=multi-user.target"
  },
  {
    "path": "provision/playbooks/docker/docker.yaml",
    "content": "\r\n- hosts: \r\n    - master\r\n    - dev\r\n    - media\r\n  become: yes\r\n  handlers:\r\n    - name: reload systemctl\r\n      become: yes\r\n      command: systemctl daemon-reload\r\n    - name: restart systemd-resolved\r\n      service:\r\n        name: systemd-resolved\r\n        state: restarted\r\n  tasks:\r\n    - apt:\r\n        name: nfs-common\r\n    - name: Ensure a locale exists\r\n      locale_gen:\r\n        name: en_GB.UTF-8\r\n        state: present\r\n    - name: Adding docker apt-key\r\n      apt_key:\r\n        url: https://download.docker.com/linux/ubuntu/gpg\r\n        state: present\r\n    - name: 'Adding repository'\r\n      apt_repository:\r\n        repo: deb [arch=amd64] https://download.docker.com/linux/ubuntu {{ ansible_lsb.codename }}  stable\r\n        state: present\r\n    - name: Update repositories cache and install \"docker-ce\" package\r\n      apt:\r\n        name: docker-ce\r\n        update_cache: yes\r\n    - name: Install pip\r\n      apt:\r\n        name: python3-pip\r\n        update_cache: yes\r\n    - name: 'Docker compose'\r\n      pip:\r\n        name: docker-compose\r\n    - name: Adding user {{ ansible_user }} to group docker\r\n      user:\r\n        name: '{{ ansible_user }}'\r\n        group: docker\r\n        append: yes\r\n"
  },
  {
    "path": "provision/playbooks/doh_dns/doh_dns.confg.j2",
    "content": "\r\n  # This is our upstream connection to the njs translation process\r\n  upstream dohloop {\r\n    zone dohloop 64k;\r\n    server 127.0.0.1:8053;\r\n  }\r\n\r\n  # This virtual server accepts HTTP/2 over HTTPS\r\n  server {\r\n    listen 443 ssl http2;\r\n    ssl_certificate /etc/letsencrypt/live/{{ dns_domain }}/fullchain.pem;\r\n    ssl_certificate_key /etc/letsencrypt/live/{{ dns_domain }}/privkey.pem;\r\n    server_name {{ dns_domain }};\r\n\r\n    # Return 404 for non-DoH requests\r\n    location / {\r\n      return 404 \"404 Not Found\\n\";\r\n    }\r\n\r\n    # Here we downgrade the HTTP/2 request to HTTP/1.1 and forward it to\r\n    # the DoH loop service\r\n    location /dns-query {\r\n      proxy_http_version 1.1;\r\n      proxy_set_header Connection \"\";\r\n      proxy_pass http://dohloop;\r\n    }\r\n  }\r\n\r\n# https://github.com/TuxInvader/nginx-dns\r\n# stream {\r\n#   # Import the JavaScript file that processes the DoH(?) packets\r\n#   js_include /etc/nginx/nginx-dns/njs.d/nginx_stream.js;\r\n\r\n#   # DNS upstream pool (can also be DoT)\r\n#   upstream dns {\r\n#     zone dns 64k;\r\n#     server 192.168.1.157:53;\r\n#   }\r\n\r\n#   # DNS over HTTPS (gateway) translation process\r\n#   # Upstream can be either DNS (TCP) or DoT \r\n#   server {\r\n#     listen 127.0.0.1:8053;\r\n#     js_filter dns_filter_doh_request;\r\n#     proxy_pass dns;\r\n#   }\r\n# }\r\n"
  },
  {
    "path": "provision/playbooks/doh_dns/doh_dns.yaml",
    "content": "- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_install_from_source: true\r\n    certbot_keep_updated: true\r\n    certbot_auto_renew: true\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ dns_domain }}\"\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/doh_dns.conf\r\n      template:\r\n        src: doh_dns.confg.j2\r\n        dest: /etc/nginx/sites-enabled/doh_dns.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n"
  },
  {
    "path": "provision/playbooks/errbit/errbit.conf.j2",
    "content": "upstream errbit {\r\n  server localhost:4666 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ errbit_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  ssl_certificate /etc/letsencrypt/live/{{ errbit_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ errbit_domain }}/privkey.pem;\r\n  server_name {{ errbit_domain }};\r\n\r\n  location / {\r\n    proxy_set_header Host $host;\r\n    proxy_set_header X-Real-IP $remote_addr;\r\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header X-Forwarded-Proto $scheme;\r\n    proxy_set_header Proxy \"\";\r\n    proxy_pass_header Server;\r\n\r\n    proxy_pass http://errbit;\r\n    proxy_buffering on;\r\n    proxy_redirect off;\r\n    proxy_http_version 1.1;\r\n    proxy_set_header Upgrade $http_upgrade;\r\n    proxy_set_header Connection $connection_upgrade;\r\n\r\n    tcp_nodelay on;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_body_buffer_size 1000m;\r\n  client_max_body_size 1000m;\r\n  keepalive_timeout 1m;\r\n}\r\n"
  },
  {
    "path": "provision/playbooks/errbit/errbit.yaml",
    "content": "\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_install_from_source: true\r\n    certbot_keep_updated: true\r\n    certbot_auto_renew: false\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_create_method: standalone\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ errbit_domain }}\"\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/errbit.conf\r\n      template:\r\n        src: errbit.conf.j2\r\n        dest: /etc/nginx/sites-enabled/errbit.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n"
  },
  {
    "path": "provision/playbooks/esphome/esphome.conf.j2",
    "content": "upstream esphome {\r\n  server 127.0.0.1:6052 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ esphome_domain }};\r\n\r\n  location / {\r\n    allow 192.168.0.0/16;\r\n    allow 10.0.0.0/16;\r\n    deny all;\r\n    proxy_pass http://esphome/;\r\n    proxy_set_header Host $host;\r\n\r\n    proxy_http_version 1.1;\r\n    proxy_set_header Upgrade $http_upgrade;\r\n    proxy_set_header Connection \"upgrade\";\r\n\r\n    proxy_set_header X-Real-IP $remote_addr;\r\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}\r\n"
  },
  {
    "path": "provision/playbooks/esphome/esphome.yaml",
    "content": "\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/esphome.conf\r\n      template:\r\n        src: esphome.conf.j2\r\n        dest: /etc/nginx/sites-enabled/esphome.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx"
  },
  {
    "path": "provision/playbooks/ethereum/ethereum.conf.j2",
    "content": "upstream ethereum {\r\n  server 127.0.0.1:8545 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ ethereum_domain }};\r\n\r\n  location / {\r\n    allow 192.168.0.0/16;\r\n    allow 10.0.0.0/16;\r\n    deny all;\r\n    proxy_pass http://ethereum/;\r\n    proxy_set_header Host $host;\r\n\r\n    proxy_http_version 1.1;\r\n    proxy_set_header Upgrade $http_upgrade;\r\n    proxy_set_header Connection \"upgrade\";\r\n\r\n    proxy_set_header X-Real-IP $remote_addr;\r\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}"
  },
  {
    "path": "provision/playbooks/ethereum/ethereum.yaml",
    "content": "\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/ethereum.conf\r\n      template:\r\n        src: ethereum.conf.j2\r\n        dest: /etc/nginx/sites-enabled/ethereum.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: weareinteractive.ufw\r\n  vars:\r\n    ufw_reset: no\r\n    ufw_logging: \"off\"\r\n    ufw_rules:\r\n      - { port: 30303, rule: allow, comment: 'Allow geth p2p' }"
  },
  {
    "path": "provision/playbooks/firewall.yaml",
    "content": "- hosts:\r\n    - master\r\n    - media\r\n  become: yes\r\n  roles:\r\n    - role: weareinteractive.ufw\r\n  vars:\r\n    ansible_os_family: Debian\r\n    ufw_reset: yes\r\n    ufw_logging: \"off\"\r\n    ufw_rules:\r\n      - { port: 8008, rule: allow, comment: 'Synapse' }\r\n      - { port: 8448, rule: allow, comment: 'Synapse' }\r\n      - { port: 9050, rule: allow, comment: \"Tor Control Port\" }\r\n      - { port: 8123, rule: allow, comment: 'HomeAssistant' }\r\n      - { port: 3128, rule: allow, comment: 'squid' }\r\n      - { port: 22, rule: allow, comment: 'Allow SSH' }\r\n      - { port: 80, rule: allow, comment: 'Allow HTTP' }\r\n      - { port: 1514, rule: allow, comment: 'Allow SysLog UDP' }\r\n      - { port: 443, rule: allow, comment: 'Allow HTTPS' }\r\n      - { port: 4105, rule: allow, comment: 'Allow MQTT' }\r\n      - { port: 987, rule: allow, comment: 'Allow PS4' }\r\n      - { port: 997, rule: allow, comment: 'Allow PS4' }\r\n      - { from_ip: '192.168.1.229', comment: 'Allow PS4 console access' }\r\n      - { port: 4001, rule: allow, comment: 'Allow IPFS swarm' }\r\n      - { port: 5001, rule: allow, comment: 'Allow IPFS API' }\r\n      - { port: 548, rule: allow, comment: 'Allow AFP' }\r\n      - { port: 427, rule: allow, comment: 'Allow AFP' }\r\n      - { port: 7000, rule: allow, comment: 'Allow mkdocs dev server' }\r\n      - { port: 9898, rule: allow, comment: 'Allow xiaomi aqara multicast shit' }\r\n      - { port: 1080, rule: allow, comment: 'Sonoff HTTP' }\r\n      - { port: 1081, rule: allow, comment: 'Sonoff HTTPs' }\r\n      - { port: 1443, rule: allow, comment: 'Sonoff Websocket' }\r\n      - { port: 137, rule: allow, comment: 'Samba' }\r\n      - { port: 138, rule: allow, comment: 'Samba' }\r\n      - { port: 139, rule: allow, comment: 'Samba' }\r\n      - { port: 445, rule: allow, comment: 'Samba' }\r\n      - { from_ip: '127.0.0.1/24', comment: 'Allow localhost' }\r\n      - { from_ip: '192.168.0.1/24', comment: 'Allow local network' }\r\n      - { from_ip: '10.0.0.1/24', comment: 'Allow vpn network' }\r\n      - { from_ip: '10.0.1.1/24', comment: 'Allow vpn network' }\r\n      - { from_ip: '10.0.2.1/24', comment: 'Allow vpn network' }\r\n      - { port: 32400, rule: allow, comment: 'Plex companion' }\r\n      - { port: 3005, rule: allow, comment: 'Plex companion' }\r\n      - { port: 5353, rule: allow, comment: 'Plex bonjur shit' }\r\n      - { port: 1900, rule: allow, comment: 'Plex dlna shit' }\r\n      - { port: 8324, rule: allow, comment: 'Plex other shit' }\r\n      - { port: 32469, rule: allow, comment: 'Plex other shit' }\r\n      - { port: 32410, rule: allow, comment: 'Plex GDM network discover' }\r\n      - { port: 32412, rule: allow, comment: 'Plex GDM network discover' }\r\n      - { port: 32413, rule: allow, comment: 'Plex GDM network discover' }\r\n      - { port: 32414, rule: allow, comment: 'Plex GDM network discover' }\r\n      - { port: 58846, rule: allow, comment: 'Deluge shit' }\r\n      - { port: 10005, rule: allow, from_ip: '192.168.1.222', comment: 'Allow only vacuum to access this port' }\r\n     \r\n"
  },
  {
    "path": "provision/playbooks/git/git.conf.j2",
    "content": "upstream git {\r\n  server 127.0.0.1:3282 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ git_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  ssl_certificate /etc/letsencrypt/live/{{ git_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ git_domain }}/privkey.pem;\r\n  server_name {{ git_domain }};\r\n\r\n  location / {\r\n    proxy_pass         http://git;\r\n    proxy_http_version 1.1;\r\n\r\n    # Ensuring it can use websockets\r\n    proxy_set_header   Upgrade $http_upgrade;\r\n    proxy_set_header   Connection \"upgrade\";\r\n    proxy_set_header   X-Real-IP $remote_addr;\r\n    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header   X-Forwarded-Proto http;\r\n    proxy_redirect     http:// $scheme://;\r\n\r\n    # The proxy must preserve the host because gotify verifies the host with the origin\r\n    # for WebSocket connections\r\n    proxy_set_header   Host $http_host;\r\n\r\n    # These sets the timeout so that the websocket can stay alive\r\n    proxy_connect_timeout   7m;\r\n    proxy_send_timeout      7m;\r\n    proxy_read_timeout      7m;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}\r\n"
  },
  {
    "path": "provision/playbooks/git/git.yaml",
    "content": "- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_auto_renew: false\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ git_domain }}\"\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/git.conf\r\n      template:\r\n        src: git.conf.j2\r\n        dest: /etc/nginx/sites-enabled/git.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: weareinteractive.ufw\r\n  vars:\r\n    ufw_reset: no\r\n    ufw_logging: \"off\"\r\n    ufw_rules:\r\n      - { port: 2222, rule: allow, comment: 'Allow git ssh' }\r\n\r\n"
  },
  {
    "path": "provision/playbooks/gotify/gotify.conf.j2",
    "content": "upstream gotify {\r\n  server 127.0.0.1:5580 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ gotify_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  ssl_certificate /etc/letsencrypt/live/{{ gotify_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ gotify_domain }}/privkey.pem;\r\n  server_name {{ gotify_domain }};\r\n\r\n  location / {\r\n    proxy_pass         http://gotify;\r\n    proxy_http_version 1.1;\r\n\r\n    # Ensuring it can use websockets\r\n    proxy_set_header   Upgrade $http_upgrade;\r\n    proxy_set_header   Connection \"upgrade\";\r\n    proxy_set_header   X-Real-IP $remote_addr;\r\n    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header   X-Forwarded-Proto http;\r\n    proxy_redirect     http:// $scheme://;\r\n\r\n    # The proxy must preserve the host because gotify verifies the host with the origin\r\n    # for WebSocket connections\r\n    proxy_set_header   Host $http_host;\r\n\r\n    # These sets the timeout so that the websocket can stay alive\r\n    proxy_connect_timeout   7m;\r\n    proxy_send_timeout      7m;\r\n    proxy_read_timeout      7m;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}"
  },
  {
    "path": "provision/playbooks/gotify/gotify.yaml",
    "content": "- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_auto_renew: false\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ gotify_domain }}\"\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/gotify.conf\r\n      template:\r\n        src: gotify.conf.j2\r\n        dest: /etc/nginx/sites-enabled/gotify.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx"
  },
  {
    "path": "provision/playbooks/grafana/grafana.conf.j2",
    "content": "upstream grafana {\n  server localhost:4100 fail_timeout=0;\n}\n\nserver {\n  listen 80;\n  listen [::]:80;\n  server_name {{ grafana_domain }};\n\n  location / {\n    allow 192.168.0.0/16;\n    allow 192.168.1.0/16;\n    allow 192.168.2.0/16;\n    allow 10.0.0.0/16;\n    deny all;\n    proxy_pass http://grafana/;\n  }\n\n  error_page 404 403 @error;\n\n  location @error {\n    root /var/www;\n    try_files /403.html /403.html;\n  }\n\n  client_max_body_size 50M;\n  keepalive_timeout 10;\n}"
  },
  {
    "path": "provision/playbooks/grafana/grafana.yaml",
    "content": "- hosts: master\n  become: yes\n  roles:\n    - role: geerlingguy.nginx\n  handlers:\n    - name: restart nginx\n      become: yes\n      service:\n        name: nginx\n        enabled: yes\n        state: restarted\n  tasks:\n    - name: Create /etc/nginx/sites-enabled/grafana.conf\n      template:\n        src: grafana.conf.j2\n        dest: /etc/nginx/sites-enabled/grafana.conf\n      notify:\n        - reload nginx\n        - restart nginx\n"
  },
  {
    "path": "provision/playbooks/grocy/grocy.conf.j2",
    "content": "upstream grocy {\r\n  server 127.0.0.1:59000 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ grocy_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  ssl_certificate /etc/letsencrypt/live/{{ grocy_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ grocy_domain }}/privkey.pem;\r\n  server_name {{ grocy_domain }};\r\n\r\n  location / {\r\n    proxy_pass         http://grocy;\r\n    proxy_http_version 1.1;\r\n\r\n    # Ensuring it can use websockets\r\n    proxy_set_header   Upgrade $http_upgrade;\r\n    proxy_set_header   Connection \"upgrade\";\r\n    proxy_set_header   X-Real-IP $remote_addr;\r\n    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header   X-Forwarded-Proto http;\r\n    proxy_redirect     http:// $scheme://;\r\n\r\n    # The proxy must preserve the host because gotify verifies the host with the origin\r\n    # for WebSocket connections\r\n    proxy_set_header   Host $http_host;\r\n\r\n    # These sets the timeout so that the websocket can stay alive\r\n    proxy_connect_timeout   7m;\r\n    proxy_send_timeout      7m;\r\n    proxy_read_timeout      7m;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}"
  },
  {
    "path": "provision/playbooks/grocy/grocy.yaml",
    "content": "- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_auto_renew: false\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ grocy_domain }}\"\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/grocy.conf\r\n      template:\r\n        src: grocy.conf.j2\r\n        dest: /etc/nginx/sites-enabled/grocy.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx"
  },
  {
    "path": "provision/playbooks/home-assistant/home-assistant.conf.j2",
    "content": "upstream hass {\n  server 127.0.0.1:8123 fail_timeout=0;\n}\n\nserver {\n  listen 80;\n  listen [::]:80;\n  server_name {{ domain }};\n  return 301 https://$server_name$request_uri;\n}\n\nserver {\n  listen {{ home_assistant_external_port }} ssl;\n  ssl        on;\n  ssl_certificate /etc/letsencrypt/live/{{ domain }}/fullchain.pem;\n  ssl_certificate_key /etc/letsencrypt/live/{{ domain }}/privkey.pem;\n  server_name {{ domain }};\n\n  location / {\n    proxy_pass http://hass/;\n    proxy_set_header Host $host;\n\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"upgrade\";\n\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n  }\n}\n\nserver {\n  listen 443 ssl;\n  ssl        on;\n  ssl_certificate /etc/letsencrypt/live/{{ domain }}/fullchain.pem;\n  ssl_certificate_key /etc/letsencrypt/live/{{ domain }}/privkey.pem;\n  server_name {{ domain }};\n\n  location /api/alexa/flash_briefings {\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_pass http://hass/api/alexa/flash_briefings/status;\n  }\n\n  location /api/alexa/smart_home {\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_pass http://hass/api/alexa/smart_home;\n  }\n\n  location /ff-sync {\n    proxy_set_header Host $http_host;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_redirect off;\n    proxy_read_timeout 120;\n    proxy_connect_timeout 10;\n    proxy_pass http://127.0.0.1:5555/;\n  }\n\n  location /orion/api/ {\n    allow 192.168.0.0/16;\n    allow 10.0.0.0/16;\n    deny all;\n    proxy_set_header Host $http_host;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_redirect off;\n    proxy_read_timeout 120;\n    proxy_connect_timeout 10;\n    proxy_pass http://127.0.0.1:5500/api;\n  }\n\n  location /graylog/ {\n    allow 192.168.0.0/16;\n    allow 10.0.0.0/16;\n    deny all;\n    proxy_set_header Host $http_host;\n    proxy_set_header X-Forwarded-Host $host;\n    proxy_set_header X-Forwarded-Server $host;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Graylog-Server-URL https://$server_name/graylog/;\n    rewrite          ^/graylog/(.*)$  /$1  break;\n    proxy_pass       http://127.0.0.1:9000;\n  }\n\n  location /orion {\n    allow 192.168.0.0/16;\n    allow 10.0.0.0/16;\n    deny all;\n    proxy_set_header Host $http_host;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_redirect off;\n    proxy_read_timeout 120;\n    proxy_connect_timeout 10;\n    proxy_pass http://127.0.0.1:5501/;\n  }\n\n  location /api/webhook {\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header Host $host;\n    proxy_pass http://hass/api/webhook;\n  }\n\n  location /ping.txt {\n    proxy_set_header Host $host;\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_pass http://hass/local/ping.txt;\n  }\n\n  location / {\n    allow 192.168.0.0/16;\n    allow 10.0.0.0/16;\n    deny all;\n    proxy_pass http://hass/;\n    proxy_set_header Host $host;\n\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"upgrade\";\n\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n  }\n\n  error_page 404 403 @error;\n\n  location @error {\n    root /var/www;\n    try_files /403.html /403.html;\n  }\n\n  client_max_body_size 50M;\n  keepalive_timeout 10;\n}"
  },
  {
    "path": "provision/playbooks/home-assistant/home-assistant.yaml",
    "content": "- hosts: master\n  become: yes\n  roles:\n    - role: geerlingguy.certbot\n  vars:\n    certbot_install_from_source: true\n    certbot_keep_updated: true\n    certbot_auto_renew: false\n    certbot_admin_email: \"{{ email }}\"\n    certbot_create_if_missing: true\n    certbot_create_method: standalone\n    certbot_certs:\n      - domains:\n        - \"{{ domain }}\"\n\n# Nginx\n- hosts: master\n  become: yes\n  roles:\n    - role: geerlingguy.nginx\n  handlers:\n    - name: restart nginx\n      become: yes\n      service:\n        name: nginx\n        enabled: yes\n        state: restarted\n  tasks:\n    - name: Create /etc/nginx/sites-enabled/home-assistant.conf\n      template:\n        src: ./home-assistant.conf.j2\n        dest: /etc/nginx/sites-enabled/home-assistant.conf\n      notify:\n        - reload nginx\n        - restart nginx\n\n- hosts: master\n  become: yes\n  roles:\n    - role: weareinteractive.ufw\n  vars:\n    ufw_reset: no\n    ufw_logging: \"off\"\n    ufw_rules:\n      - { port: \"{{ home_assistant_external_port }}\", rule: allow, comment: 'External ha port' }"
  },
  {
    "path": "provision/playbooks/housekeeping.yaml",
    "content": "# Ensure tmpfs\r\n- hosts: all\r\n  become: yes\r\n  tasks:\r\n    - name: Make /tmp as tmpfs\r\n      mount:\r\n        boot: yes\r\n        src: tmpfs\r\n        fstype: 'tmpfs'\r\n        path: '/tmp'\r\n        state: mounted\r\n        opts: 'rw,nodev,nosuid,size=200M'\r\n\r\n# Encrypt disk\r\n- hosts: master\r\n  become: yes\r\n  tasks:\r\n    - name: Check if already encrypted\r\n      command: 'grep \"/dev/mapper/smart-house\" /etc/fstab'\r\n      register: is_encrypted\r\n      ignore_errors: True\r\n    - name: Unmount smart-house\r\n      when: is_encrypted is failed\r\n      mount:\r\n        path: \"/smart-house\"\r\n        src: \"{{encrypted_disk}}\"\r\n        state: unmounted\r\n    - name: Encrypting smart house partition\r\n      when: is_encrypted is failed\r\n      shell: echo {{ disk_password }} | cryptsetup --verbose --batch-mode luksFormat {{encrypted_disk}}\r\n    - name: Open encrypted disk\r\n      when: is_encrypted is failed\r\n      shell: echo {{ disk_password }} | cryptsetup luksOpen {{encrypted_disk}} smart-house\r\n    - name: mkfs on {{encrypted_disk}}\r\n      when: is_encrypted is failed\r\n      command: 'mkfs.ext4 -L smart-house /dev/mapper/smart-house'\r\n    - name: Mount smart-house\r\n      mount:\r\n        path: \"/smart-house\"\r\n        src: \"/dev/mapper/smart-house\"\r\n        state: mounted\r\n        opts: 'sync,rw,noauto'\r\n        fstype: 'ext4'\r\n    - name: Create smart-house-unlock script\r\n      template:\r\n        src: ./smart-house-unlock\r\n        dest: /usr/bin/smart-house-unlock\r\n        mode: '777'"
  },
  {
    "path": "provision/playbooks/master_of_stonks/master_of_stonks.yaml",
    "content": "- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_install_from_source: true\r\n    certbot_keep_updated: true\r\n    certbot_auto_renew: true\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ master_of_stonks_domain }}\"\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/mos.conf\r\n      template:\r\n        src: mos.j2\r\n        dest: /etc/nginx/sites-enabled/mos.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n"
  },
  {
    "path": "provision/playbooks/master_of_stonks/mos.j2",
    "content": "upstream mos {\r\n  server localhost:8522 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ master_of_stonks_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  ssl_certificate /etc/letsencrypt/live/{{ master_of_stonks_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ master_of_stonks_domain }}/privkey.pem;\r\n  server_name {{ master_of_stonks_domain }};\r\n\r\n  location / {\r\n    proxy_set_header Host $host;\r\n    proxy_set_header X-Real-IP $remote_addr;\r\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header X-Forwarded-Proto $scheme;\r\n    proxy_set_header Proxy \"\";\r\n    proxy_pass_header Server;\r\n\r\n    proxy_pass http://mos;\r\n    proxy_buffering on;\r\n    proxy_redirect off;\r\n    proxy_http_version 1.1;\r\n    proxy_set_header Upgrade $http_upgrade;\r\n    proxy_set_header Connection $connection_upgrade;\r\n\r\n    tcp_nodelay on;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_body_buffer_size 1000m;\r\n  client_max_body_size 1000m;\r\n  keepalive_timeout 1m;\r\n}"
  },
  {
    "path": "provision/playbooks/mastodon/mastodon.conf.j2",
    "content": "map $http_upgrade $connection_upgrade {\r\n  default upgrade;\r\n  ''      close;\r\n}\r\n\r\nupstream mastodon_backend {\r\n    server 127.0.0.1:7730 fail_timeout=0;\r\n}\r\n\r\nupstream mastodon_streaming {\r\n    server 127.0.0.1:7740 fail_timeout=0;\r\n}\r\n\r\nproxy_cache_path /var/cache/nginx levels=1:2 keys_zone=CACHE:10m inactive=7d max_size=1g;\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ mastodon_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  # For the federation port\r\n  listen 8448 ssl default_server;\r\n  listen [::]:8448 ssl default_server;\r\n  ssl_certificate /etc/letsencrypt/live/{{ mastodon_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ mastodon_domain }}/privkey.pem;\r\n  server_name {{ mastodon_domain }};\r\n\r\n  keepalive_timeout    70;\r\n  sendfile             on;\r\n  client_max_body_size 80m;\r\n\r\n  root /smart-house/.docker/data/mastodon;\r\n\r\n  gzip on;\r\n  gzip_disable \"msie6\";\r\n  gzip_vary on;\r\n  gzip_proxied any;\r\n  gzip_comp_level 6;\r\n  gzip_buffers 16 8k;\r\n  gzip_http_version 1.1;\r\n  gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;\r\n\r\n  add_header Strict-Transport-Security \"max-age=31536000\";\r\n\r\n  location / {\r\n    try_files $uri @proxy;\r\n  }\r\n\r\n  location ~ ^/(emoji|packs|system/accounts/avatars|system/media_attachments/files) {\r\n    add_header Cache-Control \"public, max-age=31536000, immutable\";\r\n    add_header Strict-Transport-Security \"max-age=31536000\";\r\n    try_files $uri @proxy;\r\n  }\r\n\r\n  location /sw.js {\r\n    add_header Cache-Control \"public, max-age=0\";\r\n    add_header Strict-Transport-Security \"max-age=31536000\";\r\n    try_files $uri @proxy;\r\n  }\r\n\r\n  location @proxy {\r\n    proxy_set_header Host $host;\r\n    proxy_set_header X-Real-IP $remote_addr;\r\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header X-Forwarded-Proto $scheme;\r\n    proxy_set_header Proxy \"\";\r\n    proxy_pass_header Server;\r\n\r\n    proxy_pass http://mastodon_backend;\r\n    proxy_buffering on;\r\n    proxy_redirect off;\r\n    proxy_http_version 1.1;\r\n    proxy_set_header Upgrade $http_upgrade;\r\n    proxy_set_header Connection $connection_upgrade;\r\n\r\n    proxy_cache CACHE;\r\n    proxy_cache_valid 200 7d;\r\n    proxy_cache_valid 410 24h;\r\n    proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;\r\n    add_header X-Cached $upstream_cache_status;\r\n    add_header Strict-Transport-Security \"max-age=31536000\";\r\n\r\n    tcp_nodelay on;\r\n  }\r\n\r\n  location /api/v1/streaming {\r\n    proxy_set_header Host $host;\r\n    proxy_set_header X-Real-IP $remote_addr;\r\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header X-Forwarded-Proto $scheme;\r\n    proxy_set_header Proxy \"\";\r\n\r\n    proxy_pass http://mastodon_streaming;\r\n    proxy_buffering off;\r\n    proxy_redirect off;\r\n    proxy_http_version 1.1;\r\n    proxy_set_header Upgrade $http_upgrade;\r\n    proxy_set_header Connection $connection_upgrade;\r\n\r\n    tcp_nodelay on;\r\n  }\r\n\r\n  error_page 500 501 502 503 504 /500.html;\r\n}"
  },
  {
    "path": "provision/playbooks/mastodon/mastodon.yaml",
    "content": "- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_install_from_source: true\r\n    certbot_keep_updated: true\r\n    certbot_auto_renew: false\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_create_method: standalone\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ mastodon_domain }}\"\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/mastodon.conf\r\n      template:\r\n        src: mastodon.conf.j2\r\n        dest: /etc/nginx/sites-enabled/mastodon.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n\r\n"
  },
  {
    "path": "provision/playbooks/matrix/im.conf.j2",
    "content": "upstream im {\r\n  server 127.0.0.1:18008 fail_timeout=0;\r\n}\r\n\r\nupstream riot {\r\n  server 127.0.0.1:18010 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ im_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  # For the federation port\r\n  listen 8448 ssl default_server;\r\n  listen [::]:8448 ssl default_server;\r\n  ssl_certificate /etc/letsencrypt/live/{{ im_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ im_domain }}/privkey.pem;\r\n  server_name {{ im_domain }};\r\n\r\n  location /.well-known/matrix/server {\r\n    return 200 '{\"m.server\": \"{{ im_domain }}\"}';\r\n    add_header Content-Type application/json;\r\n  }\r\n  location /.well-known/matrix/client {\r\n    return 200 '{\"m.homeserver\": {\"base_url\": \"{{ im_domain }}\"},\"m.identity_server\": {\"base_url\": \"https://vector.im\"}}';\r\n    add_header Content-Type application/json;\r\n    add_header \"Access-Control-Allow-Origin\" *;\r\n  }\r\n\r\n  location ~* ^(\\/_synapse\\/admin) {\r\n    allow 192.168.0.0/16;\r\n    allow 10.0.0.0/16;\r\n    deny all;\r\n\r\n    proxy_pass http://im;\r\n    proxy_set_header X-Forwarded-For $remote_addr;\r\n    # Nginx by default only allows file uploads up to 1M in size\r\n    # Increase client_max_body_size to match max_upload_size defined in homeserver.yaml\r\n    client_max_body_size 50M;\r\n  }\r\n\r\n  location ~* ^(\\/_matrix|\\/_synapse\\/client) {\r\n    proxy_pass http://im;\r\n    proxy_set_header X-Forwarded-For $remote_addr;\r\n    # Nginx by default only allows file uploads up to 1M in size\r\n    # Increase client_max_body_size to match max_upload_size defined in homeserver.yaml\r\n    client_max_body_size 50M;\r\n  }\r\n\r\n  location / {\r\n    proxy_pass http://riot;\r\n    proxy_set_header X-Forwarded-For $remote_addr;\r\n    # Nginx by default only allows file uploads up to 1M in size\r\n    # Increase client_max_body_size to match max_upload_size defined in homeserver.yaml\r\n    client_max_body_size 50M;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_body_buffer_size 1000m;\r\n  client_max_body_size 1000m;\r\n  keepalive_timeout 1m;\r\n}"
  },
  {
    "path": "provision/playbooks/matrix/matrix.yaml",
    "content": "- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_install_from_source: true\r\n    certbot_keep_updated: true\r\n    certbot_auto_renew: false\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_create_method: standalone\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ im_domain }}\"\r\n\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_install_from_source: true\r\n    certbot_keep_updated: true\r\n    certbot_auto_renew: false\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_create_method: standalone\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ jitsi_domain }}\"\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/im.conf\r\n      template:\r\n        src: im.conf.j2\r\n        dest: /etc/nginx/sites-enabled/im.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n    - name: Add an apt key for jitsi\r\n      apt_key:\r\n        url: https://download.jitsi.org/jitsi-key.gpg.key\r\n        state: present\r\n    - name: Add jitsi deb source\r\n      apt_repository:\r\n        repo: deb https://download.jitsi.org stable/\r\n        state: present\r\n        filename: jitsi\r\n\r\n    # - name: Install jitsi-meet\r\n    #   apt:\r\n    #     name: jitsi-meet\r\n\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: weareinteractive.ufw\r\n  vars:\r\n    ufw_reset: no\r\n    ufw_logging: \"off\"\r\n    ufw_rules:\r\n      - { port: 8448, rule: allow, comment: 'Matrix federation port' }\r\n      - { port: 10000, rule: allow, comment: 'for general network video/audio communications' }\r\n      - { port: 5349, rule: allow, comment: 'for fallback network video/audio communications over TCP (when UDP is blocked for example), served by coturn' }\r\n"
  },
  {
    "path": "provision/playbooks/media/audiobook.conf.j2",
    "content": "upstream audiobook {\r\n  server 192.168.1.200:13378 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ audio_book_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  ssl_certificate /etc/letsencrypt/live/{{ audio_book_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ audio_book_domain }}/privkey.pem;\r\n  server_name {{ audio_book_domain }};\r\n\r\n  location / {\r\n    proxy_set_header Host $host;\r\n    proxy_set_header X-Real-IP $remote_addr;\r\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header X-Forwarded-Proto $scheme;\r\n    proxy_set_header Proxy \"\";\r\n    proxy_pass_header Server;\r\n\r\n    proxy_pass http://media;\r\n    proxy_buffering on;\r\n    proxy_redirect off;\r\n    proxy_http_version 1.1;\r\n    proxy_set_header Upgrade $http_upgrade;\r\n    proxy_set_header Connection $connection_upgrade;\r\n\r\n    add_header X-Cached $upstream_cache_status;\r\n    add_header Strict-Transport-Security \"max-age=31536000\";\r\n\r\n    tcp_nodelay on;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_body_buffer_size 1000m;\r\n  client_max_body_size 1000m;\r\n  keepalive_timeout 1m;\r\n}\r\n"
  },
  {
    "path": "provision/playbooks/media/glances.service",
    "content": "[Unit]\nDescription=Glances\nAfter=network.target\n\n[Service]\nExecStart=/usr/local/bin/glances -w\nRestart=on-abort\n\n[Install]\nWantedBy=multi-user.target"
  },
  {
    "path": "provision/playbooks/media/media.conf.j2",
    "content": "upstream media {\r\n  server 192.168.1.200:8096 fail_timeout=0;\r\n}\r\n\r\nproxy_cache_path /tmp/media levels=1:2 keys_zone=MEDIA_CACHE:10m inactive=7d max_size=100m;\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ media_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  ssl_certificate /etc/letsencrypt/live/{{ media_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ media_domain }}/privkey.pem;\r\n  server_name {{ media_domain }};\r\n\r\n  location / {\r\n    proxy_set_header Host $host;\r\n    proxy_set_header X-Real-IP $remote_addr;\r\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header X-Forwarded-Proto $scheme;\r\n    proxy_set_header Proxy \"\";\r\n    proxy_pass_header Server;\r\n\r\n    proxy_pass http://media;\r\n    proxy_buffering on;\r\n    proxy_redirect off;\r\n    proxy_http_version 1.1;\r\n    proxy_set_header Upgrade $http_upgrade;\r\n    proxy_set_header Connection $connection_upgrade;\r\n\r\n    proxy_cache MEDIA_CACHE;\r\n    proxy_cache_valid 200 7d;\r\n    proxy_cache_valid 410 24h;\r\n    proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;\r\n    add_header X-Cached $upstream_cache_status;\r\n    add_header Strict-Transport-Security \"max-age=31536000\";\r\n\r\n    tcp_nodelay on;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_body_buffer_size 1000m;\r\n  client_max_body_size 1000m;\r\n  keepalive_timeout 1m;\r\n}"
  },
  {
    "path": "provision/playbooks/media/media.yaml",
    "content": "- hosts: master\r\n  become: yes\r\n  roles:\r\n     - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_auto_renew: false\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ audio_book_domain }}\"\r\n\r\n# - hosts: master\r\n#   become: yes\r\n#   roles:\r\n#     - role: geerlingguy.certbot\r\n#   vars:\r\n#     certbot_auto_renew: false\r\n#     certbot_admin_email: \"{{ email }}\"\r\n#     certbot_create_if_missing: true\r\n#     certbot_certs:\r\n#       - domains:\r\n#         - \"{{ media_domain }}\"\r\n\r\n# - hosts: master\r\n#   become: yes\r\n#   roles:\r\n#     - role: geerlingguy.certbot\r\n#   vars:\r\n#     certbot_install_from_source: true\r\n#     certbot_keep_updated: true\r\n#     certbot_auto_renew: false\r\n#     certbot_admin_email: \"{{ email }}\"\r\n#     certbot_create_if_missing: true\r\n#     certbot_create_method: standalone\r\n#     certbot_certs:\r\n#       - domains:\r\n#         - \"{{ plex_domain }}\"\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/audiobook.conf\r\n      template:\r\n        src: audiobook.conf.j2\r\n        dest: /etc/nginx/sites-enabled/audiobook.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n#     - name: Create /etc/nginx/sites-enabled/media.conf\r\n#       template:\r\n#         src: media.conf.j2\r\n#         dest: /etc/nginx/sites-enabled/media.conf\r\n#       notify:\r\n#         - reload nginx\r\n#         - restart nginx\r\n#     - name: Create /etc/nginx/sites-enabled/plex.conf\r\n#       template:\r\n#         src: plex.conf.j2\r\n#         dest: /etc/nginx/sites-enabled/plex.conf\r\n#       notify:\r\n#         - reload nginx\r\n#         - restart nginx\r\n\r\n#     - name: Create /etc/nginx/sites-enabled/sonarr.conf\r\n#       template:\r\n#         src: sonarr.conf.j2\r\n#         dest: /etc/nginx/sites-enabled/sonarr.conf\r\n#       notify:\r\n#         - reload nginx\r\n#         - restart nginx\r\n\r\n\r\n# - hosts: \r\n#     - media\r\n#     - master\r\n#   become: yes\r\n#   roles:\r\n#     - role: weareinteractive.ufw\r\n#   vars:\r\n#     ansible_os_family: 'Debian'\r\n#     ufw_reset: no\r\n#     ufw_logging: \"off\"\r\n#     ufw_rules:\r\n#       - { port: 22, rule: allow, comment: 'ssh' }\r\n#       - { port: 7359, rule: allow, comment: 'Emby port' }\r\n#       - { port: 1900, rule: allow, comment: 'Emby port' }\r\n#       - { port: 32400, rule: allow, comment: 'Plex companion' }\r\n#       - { port: 3005, rule: allow, comment: 'Plex companion' }\r\n#       - { port: 5353, rule: allow, comment: 'Plex bonjur shit' }\r\n#       - { port: 1900, rule: allow, comment: 'Plex dlna shit' }\r\n#       - { port: 8324, rule: allow, comment: 'Plex other shit' }\r\n#       - { port: 32469, rule: allow, comment: 'Plex other shit' }\r\n#       - { port: 32410, rule: allow, comment: 'Plex GDM network discover' }\r\n#       - { port: 32412, rule: allow, comment: 'Plex GDM network discover' }\r\n#       - { port: 32413, rule: allow, comment: 'Plex GDM network discover' }\r\n#       - { port: 32414, rule: allow, comment: 'Plex GDM network discover' }\r\n#       - { port: 8096, rule: allow, comment: 'Emby webui' }\r\n#       - { port: 61208, rule: allow, comment: 'Glances' }\r\n\r\n\r\n- hosts: \r\n    - media\r\n  become: yes\r\n  tasks:\r\n    - name: Create movies directory\r\n      file:\r\n        group: emby\r\n        owner: emby\r\n        path: /var/lib/emby/content/{{ item.share }}\r\n        state: directory\r\n      loop:\r\n        - { share: 'Movies' }\r\n        - { share: 'MoviesAndTV' }\r\n        - { share: 'Music' }\r\n        - { share: 'Public' }\r\n    - name: mount movies directory\r\n      mount:\r\n        state: mounted\r\n        fstype: cifs\r\n        opts: \"domain=192.168.1.181,username={{ qnap_username }},password={{ qnap_password }},noperm,iocharset=utf8,file_mode=0775,dir_mode=0775,gid=emby,uid=emby\"\r\n        src: \"//192.168.1.181/{{ item.share }}\"\r\n        path: \"/var/lib/emby/content/{{ item.share }}\"\r\n      loop:\r\n        - { share: 'Movies' }\r\n        - { share: 'MoviesAndTV' }\r\n        - { share: 'Music' }\r\n        - { share: 'Public' }\r\n"
  },
  {
    "path": "provision/playbooks/media/plex.conf.j2",
    "content": "upstream plex-stream {\r\n  server 127.0.0.1:32400 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ plex_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  ssl_certificate /etc/letsencrypt/live/{{ plex_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ plex_domain }}/privkey.pem;\r\n  server_name {{ plex_domain }};\r\n\r\n  location / {\r\n    proxy_pass         http://plex-stream;\r\n    proxy_http_version 1.1;\r\n\r\nproxy_set_header X-Plex-Client-Identifier $http_x_plex_client_identifier;\r\n    proxy_set_header X-Plex-Device $http_x_plex_device;\r\n    proxy_set_header X-Plex-Device-Name $http_x_plex_device_name;\r\n    proxy_set_header X-Plex-Platform $http_x_plex_platform;\r\n    proxy_set_header X-Plex-Platform-Version $http_x_plex_platform_version;\r\n    proxy_set_header X-Plex-Product $http_x_plex_product;\r\n    proxy_set_header X-Plex-Token $http_x_plex_token;\r\n    proxy_set_header X-Plex-Version $http_x_plex_version;\r\n    proxy_set_header X-Plex-Nocache $http_x_plex_nocache;\r\n    proxy_set_header X-Plex-Provides $http_x_plex_provides;\r\n    proxy_set_header X-Plex-Device-Vendor $http_x_plex_device_vendor;\r\n    proxy_set_header X-Plex-Model $http_x_plex_model;\r\n\r\n    # Ensuring it can use websockets\r\n    proxy_set_header   Upgrade $http_upgrade;\r\n    proxy_set_header   Connection \"upgrade\";\r\n    proxy_set_header   X-Real-IP $remote_addr;\r\n    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header   X-Forwarded-Proto http;\r\n    proxy_redirect     http:// $scheme://;\r\n\r\n    # The proxy must preserve the host because media verifies the host with the origin\r\n    # for WebSocket connections\r\n    proxy_set_header   Host $http_host;\r\n\r\n    # These sets the timeout so that the websocket can stay alive\r\n    proxy_connect_timeout   7m;\r\n    proxy_send_timeout      7m;\r\n    proxy_read_timeout      7m;\r\n\r\n    proxy_max_temp_file_size 0;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_body_buffer_size 1000m;\r\n  client_max_body_size 1000m;\r\n  keepalive_timeout 1m;\r\n}\r\n"
  },
  {
    "path": "provision/playbooks/media/sonarr.conf.j2",
    "content": "upstream sonarr {\r\n  server 127.0.0.1:8989 fail_timeout=0;\r\n}\r\n\r\n\r\nserver {\r\n  listen 80;\r\n  server_name {{ sonarr_domain }};\r\n\r\n  location / {\r\n    allow 192.168.0.0/16;\r\n    allow 10.0.0.0/16;\r\n    allow 10.8.0.0/16;\r\n    deny all;\r\n\r\n    proxy_pass         http://sonarr;\r\n    proxy_http_version 1.1;\r\n\r\n    # Ensuring it can use websockets\r\n    proxy_set_header   Upgrade $http_upgrade;\r\n    proxy_set_header   Connection \"upgrade\";\r\n    proxy_set_header   X-Real-IP $remote_addr;\r\n    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header   X-Forwarded-Proto http;\r\n    proxy_redirect     http:// $scheme://;\r\n\r\n    # The proxy must preserve the host because media verifies the host with the origin\r\n    # for WebSocket connections\r\n    proxy_set_header   Host $http_host;\r\n\r\n    # These sets the timeout so that the websocket can stay alive\r\n    proxy_connect_timeout   7m;\r\n    proxy_send_timeout      7m;\r\n    proxy_read_timeout      7m;\r\n\r\n    proxy_max_temp_file_size 0;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_body_buffer_size 1000m;\r\n  client_max_body_size 1000m;\r\n  keepalive_timeout 1m;\r\n}\r\n"
  },
  {
    "path": "provision/playbooks/nextcloud/nextcloud.conf.j2",
    "content": "upstream nc {\r\n  server 127.0.0.1:4333 fail_timeout=5;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ nextcloud_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  ssl_certificate /etc/letsencrypt/live/{{ nextcloud_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ nextcloud_domain }}/privkey.pem;\r\n  server_name {{ nextcloud_domain }};\r\n\r\n  add_header X-Frame-Options \"SAMEORIGIN\";\r\n  add_header X-XSS-Protection \"1; mode=block\";\r\n\r\n\r\n  location / {\r\n    proxy_pass         http://nc;\r\n    proxy_http_version 1.1;\r\n\r\n    # Ensuring it can use websockets\r\n    proxy_set_header   Upgrade $http_upgrade;\r\n    proxy_set_header   Connection \"upgrade\";\r\n    proxy_set_header   X-Real-IP $remote_addr;\r\n    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header   X-Forwarded-Proto http;\r\n    proxy_redirect     http:// $scheme://;\r\n\r\n    # The proxy must preserve the host because nextcloud verifies the host with the origin\r\n    # for WebSocket connections\r\n    proxy_set_header   Host $http_host;\r\n\r\n    # These sets the timeout so that the websocket can stay alive\r\n    proxy_connect_timeout   7m;\r\n    proxy_send_timeout      7m;\r\n    proxy_read_timeout      7m;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 250M;\r\n  keepalive_timeout 10;\r\n}\r\n"
  },
  {
    "path": "provision/playbooks/nextcloud/nextcloud.yaml",
    "content": "- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_install_from_source: true\r\n    certbot_keep_updated: true\r\n    certbot_auto_renew: false\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_create_method: standalone\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ oo_domain }}\"\r\n\r\n\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_auto_renew: false\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ nextcloud_domain }}\"\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/nextcloud.conf\r\n      template:\r\n        src: nextcloud.conf.j2\r\n        dest: /etc/nginx/sites-enabled/nextcloud.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n    - name: Create /etc/nginx/sites-enabled/oo.conf\r\n      template:\r\n        src: oo.conf.j2\r\n        dest: /etc/nginx/sites-enabled/oo.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n"
  },
  {
    "path": "provision/playbooks/nextcloud/oo.conf.j2",
    "content": "upstream oo {\r\n  server 127.0.0.1:59111 fail_timeout=5;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ oo_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  ssl_certificate /etc/letsencrypt/live/{{ oo_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ oo_domain }}/privkey.pem;\r\n  server_name {{ oo_domain }};\r\n\r\n\r\n  location / {\r\n    proxy_pass         http://oo;\r\n    proxy_http_version 1.1;\r\n\r\n    # Ensuring it can use websockets\r\n    proxy_set_header   Upgrade $http_upgrade;\r\n    proxy_set_header   Connection \"upgrade\";\r\n    proxy_set_header   X-Real-IP $remote_addr;\r\n    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header   X-Forwarded-Proto http;\r\n    proxy_redirect     http:// $scheme://;\r\n\r\n    # The proxy must preserve the host because nextcloud verifies the host with the origin\r\n    # for WebSocket connections\r\n    proxy_set_header   Host $http_host;\r\n\r\n    # These sets the timeout so that the websocket can stay alive\r\n    proxy_connect_timeout   7m;\r\n    proxy_send_timeout      7m;\r\n    proxy_read_timeout      7m;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 250M;\r\n  keepalive_timeout 10;\r\n}\r\n"
  },
  {
    "path": "provision/playbooks/node-red/node-red.conf.j2",
    "content": "upstream red {\r\n  server 127.0.0.1:51880 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ red_domain }};\r\n\r\n  location / {\r\n    allow 192.168.0.0/16;\r\n    allow 10.0.0.0/16;\r\n    deny all;\r\n    proxy_pass http://red/;\r\n\r\n    proxy_set_header Host $host;\r\n    proxy_set_header X-Real-IP $remote_addr;\r\n    proxy_http_version 1.1;\r\n    proxy_set_header Upgrade $http_upgrade;\r\n    proxy_set_header Connection \"upgrade\";\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}"
  },
  {
    "path": "provision/playbooks/node-red/node-red.yaml",
    "content": "# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/node-red.conf\r\n      template:\r\n        src: node-red.conf.j2\r\n        dest: /etc/nginx/sites-enabled/node-red.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n"
  },
  {
    "path": "provision/playbooks/notes/notes.conf.j2",
    "content": "upstream notes {\n  server 127.0.0.1:12005 fail_timeout=0;\n}\n\nserver {\n  listen 80;\n  listen [::]:80;\n  server_name notes.{{ domain }};\n  return 301 https://$server_name$request_uri;\n}\n\nserver {\n  listen 443 ssl;\n  ssl        on;\n  ssl_certificate /etc/letsencrypt/live/notes.{{ domain }}/fullchain.pem;\n  ssl_certificate_key /etc/letsencrypt/live/notes.{{ domain }}/privkey.pem;\n  server_name notes.{{ domain }};\n\n  location = /api/auth {\n    deny all;\n  }\n\n  location = /auth {\n    deny all;\n  }\n\n  location / {\n    proxy_pass http://notes/;\n    proxy_set_header Host $host;\n\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"upgrade\";\n\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n  }\n\n  error_page 404 403 @error;\n\n  location @error {\n    root /var/www;\n    try_files /403.html /403.html;\n  }\n\n  client_max_body_size 50M;\n  keepalive_timeout 10;\n}"
  },
  {
    "path": "provision/playbooks/notes/notes.yaml",
    "content": "- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_auto_renew: false\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_certs:\r\n      - domains:\r\n        - \"notes.{{ domain }}\"\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/notes.conf\r\n      template:\r\n        src: notes.conf.j2\r\n        dest: /etc/nginx/sites-enabled/notes.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx"
  },
  {
    "path": "provision/playbooks/packages.yaml",
    "content": "\r\n\r\n- hosts: all\r\n  become: yes\r\n  tasks:\r\n    - name: Install sshfs\r\n      apt:\r\n        name: sshfs\r\n    - name: Install htop\r\n      apt:\r\n        name: htop\r\n    - name: Install ufw\r\n      apt:\r\n        name: ufw\r\n    - name: Install zsh\r\n      apt:\r\n        name: zsh\r\n    - name: Install git\r\n      apt:\r\n        name: git\r\n    - name: Install zip\r\n      apt:\r\n        name: zip\r\n    - name: Install AFP\r\n      apt:\r\n        name: netatalk\r\n    - name: 'Python pip'\r\n      apt:\r\n        name: python-pip\r\n    - name: 'Python pip3'\r\n      apt:\r\n        name: python3-pip\r\n    - name: 'Python pip3'\r\n      apt:\r\n        name: smbclient\r\n\r\n- hosts: master\r\n  become: yes\r\n  tasks:\r\n    - name: Install nginx\r\n      apt:\r\n        name: nginx\r\n    - name: Install cryptsetup\r\n      apt:\r\n        name: cryptsetup\r\n    - name: Install go\r\n      apt:\r\n        name: golang\r\n    - name: Install xpath stuff\r\n      apt:\r\n        name: libxml2-utils\r\n    - name: Install ccrypt for dustcloud\r\n      apt:\r\n        name: ccrypt\r\n    - name: Install dos2unix for dustcloud\r\n      apt:\r\n        name: dos2unix\r\n    - name: PSQL\r\n      apt:\r\n        name: postgresql-client\r\n    - name: smb\r\n      apt:\r\n        name: cifs-utils\r\n    - name: samba\r\n      apt:\r\n        name: samba\r\n    - name: lovelace-dev\r\n      apt:\r\n        name: fswatch\r\n    - name: mc\r\n      apt:\r\n        name: mc\r\n\r\n- hosts: panel\r\n  become: yes\r\n  tasks:\r\n    - name: Install onboard\r\n      apt:\r\n        name: onboard\r\n    - name: 'Controling backlight'\r\n      apt:\r\n        name: xbacklight\r\n    - name: 'Dconf editor'\r\n      apt:\r\n        name: dconf-editor"
  },
  {
    "path": "provision/playbooks/photos/photos.conf.j2",
    "content": "upstream photos {\r\n  server 127.0.0.1:2342 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ photos_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  ssl_certificate /etc/letsencrypt/live/{{ photos_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ photos_domain }}/privkey.pem;\r\n  server_name {{ photos_domain }};\r\n\r\n  location / {\r\n    allow 192.168.0.0/16;\r\n    allow 10.0.0.0/16;\r\n    deny all;\r\n    proxy_pass         http://photos;\r\n    proxy_http_version 1.1;\r\n\r\n    # Ensuring it can use websockets\r\n    proxy_set_header   Upgrade $http_upgrade;\r\n    proxy_set_header   Connection \"upgrade\";\r\n    proxy_set_header   X-Real-IP $remote_addr;\r\n    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header   X-Forwarded-Proto http;\r\n    proxy_redirect     http:// $scheme://;\r\n\r\n    # The proxy must preserve the host because photos verifies the host with the origin\r\n    # for WebSocket connections\r\n    proxy_set_header   Host $http_host;\r\n\r\n    # These sets the timeout so that the websocket can stay alive\r\n    proxy_connect_timeout   7m;\r\n    proxy_send_timeout      7m;\r\n    proxy_read_timeout      7m;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}"
  },
  {
    "path": "provision/playbooks/photos/photos.yaml",
    "content": "- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_auto_renew: false\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ photos_domain }}\"\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/photos.conf\r\n      template:\r\n        src: photos.conf.j2\r\n        dest: /etc/nginx/sites-enabled/photos.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n"
  },
  {
    "path": "provision/playbooks/rss_bridge/rss_bridge.conf.j2",
    "content": "upstream rss_bridge {\r\n  server 127.0.0.1:59900 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ rss_bridge_domain }};\r\n\r\n  location / {\r\n    allow 192.168.0.0/16;\r\n    allow 10.0.0.0/16;\r\n    deny all;\r\n    proxy_pass http://rss_bridge/;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}"
  },
  {
    "path": "provision/playbooks/rss_bridge/rss_bridge.yaml",
    "content": "\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/rss_bridge.conf\r\n      template:\r\n        src: rss_bridge.conf.j2\r\n        dest: /etc/nginx/sites-enabled/rss_bridge.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx"
  },
  {
    "path": "provision/playbooks/simplelogin/pgsql-relay-domains.cf.j2",
    "content": "# postgres config\nhosts = localhost:4101\nuser = simplelogin\npassword = {{ simplelogin_password }}\ndbname = simplelogin\n\nquery = SELECT domain FROM custom_domain WHERE domain='%s' AND verified=true UNION SELECT '%s' WHERE '%s' = '{{ simplelogin_domain }}' LIMIT 1;"
  },
  {
    "path": "provision/playbooks/simplelogin/pgsql-transport-maps.cf.j2",
    "content": "# postgres config\nhosts = localhost:4101\nuser = simplelogin\npassword = {{ simplelogin_password }}\ndbname = simplelogin\n\n# forward to smtp:127.0.0.1:20381 for custom domain AND email domain\nquery = SELECT 'smtp:127.0.0.1:20381' FROM custom_domain WHERE domain = '%s' AND verified=true UNION SELECT 'smtp:127.0.0.1:20381' WHERE '%s' = '{{ simplelogin_domain }}' LIMIT 1;\n"
  },
  {
    "path": "provision/playbooks/simplelogin/simple-login.conf.j2",
    "content": "upstream simple-login {\n  server 127.0.0.1:7777 fail_timeout=0;\n}\n\nserver {\n  listen 80;\n  listen [::]:80;\n  server_name {{ simplelogin_domain }};\n  return 301 https://$server_name$request_uri;\n}\n\nserver {\n  listen 443 ssl;\n  ssl        on;\n  ssl_certificate /etc/letsencrypt/live/{{ simplelogin_domain }}/fullchain.pem;\n  ssl_certificate_key /etc/letsencrypt/live/{{ simplelogin_domain }}/privkey.pem;\n  server_name {{ simplelogin_domain }};\n\n  location / {\n    proxy_pass         http://simple-login;\n    proxy_http_version 1.1;\n\n    # Ensuring it can use websockets\n    proxy_set_header   Upgrade $http_upgrade;\n    proxy_set_header   Connection \"upgrade\";\n    proxy_set_header   X-Real-IP $remote_addr;\n    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header   X-Forwarded-Proto http;\n    proxy_redirect     http:// $scheme://;\n\n    # The proxy must preserve the host because simple-login verifies the host with the origin\n    # for WebSocket connections\n    proxy_set_header   Host $http_host;\n\n    # These sets the timeout so that the websocket can stay alive\n    proxy_connect_timeout   7m;\n    proxy_send_timeout      7m;\n    proxy_read_timeout      7m;\n  }\n\n  location /auth/register {\n    allow 192.168.0.0/16;\n    allow 10.0.0.0/16;\n    deny all;\n    proxy_pass         http://simple-login;\n    proxy_http_version 1.1;\n\n    # Ensuring it can use websockets\n    proxy_set_header   Upgrade $http_upgrade;\n    proxy_set_header   Connection \"upgrade\";\n    proxy_set_header   X-Real-IP $remote_addr;\n    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header   X-Forwarded-Proto http;\n    proxy_redirect     http:// $scheme://;\n\n    # The proxy must preserve the host because simple-login verifies the host with the origin\n    # for WebSocket connections\n    proxy_set_header   Host $http_host;\n\n    # These sets the timeout so that the websocket can stay alive\n    proxy_connect_timeout   7m;\n    proxy_send_timeout      7m;\n    proxy_read_timeout      7m;\n  }\n\n  error_page 404 403 @error;\n\n  location @error {\n    root /var/www;\n    try_files /403.html /403.html;\n  }\n\n  client_max_body_size 50M;\n  keepalive_timeout 10;\n}"
  },
  {
    "path": "provision/playbooks/simplelogin/simplelogin.yaml",
    "content": "- hosts: master\n  become: yes\n  roles:\n    - role: geerlingguy.certbot\n  vars:\n    certbot_auto_renew: false\n    certbot_admin_email: \"{{ email }}\"\n    certbot_create_if_missing: true\n    certbot_certs:\n      - domains:\n        - \"{{ simplelogin_domain }}\"\n\n\n- hosts: master\n  become: yes\n  roles:\n    - role: weareinteractive.ufw\n  vars:\n    ufw_reset: no\n    ufw_logging: \"off\"\n    ufw_rules:\n      - { port: 25, rule: allow, comment: 'Allow postfix' }\n\n- hosts: master\n  become: yes\n  tasks:\n    - name: Install postfix\n      apt:\n        name: postfix\n    - name: Install postfix postgres support\n      apt:\n        name: postfix-pgsql\n\n- hosts: master\n  become: yes\n  roles:\n    - role: oefenweb.postfix\n  vars:\n    postfix_raw_options:\n      - |\n        myhostname = {{ simplelogin_domain }}\n        mydomain = {{ simplelogin_domain }}\n        myorigin = {{ simplelogin_domain }}\n        mydestination = localhost\n        mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 240.0.0.0/24\n        relay_domains = pgsql:/etc/postfix/pgsql-relay-domains.cf\n        transport_maps = pgsql:/etc/postfix/pgsql-transport-maps.cf\n        smtpd_delay_reject = yes\n        smtpd_helo_required = yes\n        smtpd_helo_restrictions = permit_mynetworks, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostname, permit\n        smtpd_sender_restrictions = permit_mynetworks, reject_non_fqdn_sender, reject_unknown_sender_domain, permit\n        smtpd_recipient_restrictions = reject_unauth_pipelining, reject_non_fqdn_recipient, reject_unknown_recipient_domain, permit_mynetworks, reject_unauth_destination, reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net, permit\n\n- hosts: master\n  become: yes\n  roles:\n    - role: geerlingguy.nginx\n  handlers:\n    - name: restart nginx\n      become: yes\n      service:\n        name: nginx\n        enabled: yes\n        state: restarted\n  tasks:\n    - name: Create /etc/nginx/sites-enabled/simple-login.conf\n      template:\n        src: simple-login.conf.j2\n        dest: /etc/nginx/sites-enabled/simple-login.conf\n      notify:\n        - reload nginx\n        - restart nginx\n\n- hosts: master\n  become: yes\n  handlers:\n    - name: restart postfix\n      become: yes\n      service:\n        name: postfix\n        enabled: yes\n        state: restarted\n  tasks:\n    - name: Create /etc/postfix/pgsql-relay-domains.cf\n      template:\n        src: pgsql-relay-domains.cf.j2\n        dest: /etc/postfix/pgsql-relay-domains.cf\n      notify:\n        - restart postfix\n    - name: Create /etc/postfix/pgsql-transport-maps.cf\n      template:\n        src: pgsql-transport-maps.cf.j2\n        dest: /etc/postfix/pgsql-transport-maps.cf\n      notify:\n        - restart postfix"
  },
  {
    "path": "provision/playbooks/smart-house-unlock",
    "content": "#!/usr/bin/env bash\n\nsudo cryptsetup luksOpen {{encrypted_disk}} smart-house && sudo mount /dev/mapper/smart-house /smart-house\nsync\nsmart-house health start\nsmart-house media mount\nsmart-house pihole start\nsmart-house support start\nsmart-house zwave start\nsmart-house media start\nsmart-house restart\nsudo systemctl restart fail2ban"
  },
  {
    "path": "provision/playbooks/smasher/smasher.conf.j2",
    "content": "upstream smasher {\r\n  server 127.0.0.1:14001 fail_timeout=5;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ smasher_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  ssl_certificate /etc/letsencrypt/live/{{ smasher_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ smasher_domain }}/privkey.pem;\r\n  server_name {{ smasher_domain }};\r\n\r\n  location / {\r\n    proxy_pass         http://smasher;\r\n\r\n    proxy_http_version 1.1;\r\n    proxy_set_header Upgrade $http_upgrade;\r\n    proxy_set_header Connection \"upgrade\";\r\n\r\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header Host $http_host;\r\n    proxy_redirect off;\r\n\r\n    # These sets the timeout so that the websocket can stay alive\r\n    proxy_connect_timeout   7m;\r\n    proxy_send_timeout      7m;\r\n    proxy_read_timeout      7m;\r\n  }\r\n\r\n  # Proxy download\r\n  location ~* ^/warpipe/http(s?)://(.*?)/(.*) {\r\n    # How to resove remote URLs, you may want to update this depending\r\n    # on your setup, in our case it’s inside a Docker container with\r\n    # dnsmasq running.\r\n    resolver 9.9.9.9 ipv6=off;\r\n    # Do not allow people to mess with this location directly\r\n    # Only internal redirects are allowed\r\n    internal;\r\n\r\n    # Extract download url from the request\r\n    set $download_uri $3;\r\n    set $download_host $2;\r\n    set $download_protocol $1;\r\n\r\n    expires 10d;\r\n\r\n    proxy_set_header Host $download_host;\r\n    proxy_hide_header Authorization;\r\n    proxy_hide_header Cookie;\r\n    proxy_hide_header Content-Disposition;\r\n    proxy_hide_header X-Frame-Options;\r\n    proxy_hide_header Set-Cookie;\r\n\r\n    proxy_ignore_headers    X-Accel-Limit-Rate X-Accel-Expires Expires Cache-Control Set-Cookie Vary;\r\n    proxy_hide_header       Content-Security-Policy;\r\n    proxy_hide_header       Content-Security-Policy-Report-Only;\r\n    proxy_hide_header       Expect-CT;\r\n    proxy_hide_header       Expires;\r\n    proxy_hide_header       Feature-Policy;\r\n    proxy_hide_header       P3P;\r\n    proxy_hide_header       Pragma;\r\n    proxy_hide_header       Public-Key-Pins;\r\n    proxy_hide_header       Public-Key-Pins-Report-Only;\r\n    proxy_hide_header       Referrer-Policy;\r\n    proxy_hide_header       Report-To;\r\n    proxy_hide_header       Set-Cookie;\r\n    proxy_hide_header       Source-Age;\r\n    proxy_hide_header       Strict-Transport-Security;\r\n    proxy_hide_header       Timing-Allow-Origin;\r\n    proxy_hide_header       Vary;\r\n    proxy_hide_header       Via;\r\n    proxy_hide_header       X-Cache;\r\n    proxy_hide_header       X-Cache-Hits;\r\n    proxy_hide_header       X-Content-Type-Options;\r\n    proxy_hide_header       X-GitHub-Request-Id;\r\n    proxy_hide_header       X-hello;\r\n    proxy_hide_header       X-Fastly-Request-ID;\r\n    proxy_hide_header       X-Frame-Options;\r\n    proxy_hide_header       X-XSS-Protection;\r\n    proxy_hide_header       X-Runtime;\r\n    proxy_hide_header       X-Served-By;\r\n    proxy_hide_header       x-amz-cf-id;\r\n    proxy_hide_header       x-amz-id-2;\r\n    proxy_hide_header       x-amz-meta-server-side-encryption;\r\n    proxy_hide_header       x-amz-request-id;\r\n    proxy_hide_header       x-amz-server-side-encryption;\r\n    proxy_hide_header       CF-Cache-Status;\r\n    proxy_hide_header       CF-RAY;\r\n    proxy_read_timeout 60;\r\n    # Compose download url\r\n    set $download_url http$download_protocol://$download_host/$download_uri$is_args$args;\r\n    proxy_set_header Authorization \"\";\r\n    # Do not touch local disks when proxying\r\n    # content to clients\r\n    proxy_max_temp_file_size 0;\r\n\r\n    # Download the file and send it to client\r\n    proxy_ssl_server_name on;\r\n    proxy_ssl_verify off;\r\n    proxy_pass $download_url;\r\n    proxy_ssl_session_reuse off;\r\n    proxy_intercept_errors on;\r\n    error_page 301 302 307 = @handle_proxy_redirect;\r\n  }\r\n\r\n  location @handle_proxy_redirect {\r\n    proxy_read_timeout 30;\r\n    resolver 9.9.9.9 ipv6=off;\r\n    set $saved_redirect_location '$upstream_http_location';\r\n    proxy_pass $saved_redirect_location;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}\r\n"
  },
  {
    "path": "provision/playbooks/smasher/smasher.yaml",
    "content": "- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_install_from_source: true\r\n    certbot_keep_updated: true\r\n    certbot_auto_renew: true\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ smasher_domain }}\"\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/smasher.conf\r\n      template:\r\n        src: smasher.conf.j2\r\n        dest: /etc/nginx/sites-enabled/smasher.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n"
  },
  {
    "path": "provision/playbooks/speedtest/speedtest.conf.j2",
    "content": "upstream speedtest {\r\n  server 127.0.0.1:6888 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ speedtest_domain }};\r\n\r\n  location / {\r\n    allow 192.168.0.0/16;\r\n    allow 10.0.0.0/16;\r\n    deny all;\r\n    proxy_pass http://speedtest/;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}"
  },
  {
    "path": "provision/playbooks/speedtest/speedtest.yaml",
    "content": "\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/speedtest.conf\r\n      template:\r\n        src: speedtest.conf.j2\r\n        dest: /etc/nginx/sites-enabled/speedtest.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx"
  },
  {
    "path": "provision/playbooks/transfer/transfer.conf.j2",
    "content": "upstream transfer {\r\n  server 127.0.0.1:18031 fail_timeout=5;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ transfer_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  ssl_certificate /etc/letsencrypt/live/{{ transfer_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ transfer_domain }}/privkey.pem;\r\n  server_name {{ transfer_domain }};\r\n\r\n  location / {\r\n    proxy_pass         http://transfer;\r\n      client_max_body_size 2G;\r\n    proxy_http_version 1.1;\r\n    proxy_set_header Upgrade $http_upgrade;\r\n    proxy_set_header Connection \"upgrade\";\r\n\r\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header Host $http_host;\r\n    proxy_redirect off;\r\n\r\n    # These sets the timeout so that the websocket can stay alive\r\n    proxy_connect_timeout   7m;\r\n    proxy_send_timeout      7m;\r\n    proxy_read_timeout      7m;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}\r\n"
  },
  {
    "path": "provision/playbooks/transfer/transfer.yaml",
    "content": "- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_install_from_source: true\r\n    certbot_keep_updated: true\r\n    certbot_auto_renew: true\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ transfer_domain }}\"\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/transfer.conf\r\n      template:\r\n        src: transfer.conf.j2\r\n        dest: /etc/nginx/sites-enabled/transfer.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n"
  },
  {
    "path": "provision/playbooks/vacuum/upload_map.sh",
    "content": "#!/bin/bash\n\nVACUUM_SERVER=192.168.1.12\nVACUUM_PORT=10005\n\nSLAM_LOG=/var/run/shm/SLAM_fprintf.log\nMAP_FILES=$(find /var/run/shm/ -iname '*.ppm')\nset -- $MAP_FILES\nMAP_FILE=$1\n\nif [ ! -f $SLAM_LOG ]; then\n    echo \"$SLAM_LOG missing...\"\n    exit 0\nfi\nif [ -z \"$MAP_FILE\" ] || [ ! -f $MAP_FILE ]; then\n    echo \"Map file missing...\"\n    exit 0\nfi\n\ncp $MAP_FILE /tmp/mapfile\ncp $SLAM_LOG /tmp/slamlog\n\necho SLAM_LOG=$SLAM_LOG\necho MAP_FILE=$MAP_FILE\n\n# Send stuff to endpoint\nprintf \"Sending... $MAP_FILE and $SLAM_LOG\"\ncurl --write-out '%{http_code}' --silent --output /dev/null -X POST -F map=@/tmp/mapfile -F log=@/tmp/slamlog http://$VACUUM_SERVER:$VACUUM_PORT/map"
  },
  {
    "path": "provision/playbooks/vacuum/vacuum.yaml",
    "content": "# Install map script for vacuum\r\n\r\n- hosts: vacuum\r\n  become: yes\r\n  tasks:\r\n    - name: Install curl\r\n      apt:\r\n        name: curl\r\n    - name: Create /root/watch_map.sh\r\n      template:\r\n        src: watch_map.sh\r\n        dest: /root/watch_map.sh\r\n    - name: Create /root/upload_map.sh\r\n      template:\r\n        src: upload_map.sh\r\n        dest: /root/upload_map.sh\r\n    - name: Add crontab entry for health-check\r\n      cron:\r\n        name: \"start watch map script\"\r\n        reboot: true\r\n        job: \"sh /root/watch_map.sh >> /tmp/watch_map.log 2>&1\"\r\n    - name: Reboot vacuum to start watch map in background\r\n      reboot:\r\n"
  },
  {
    "path": "provision/playbooks/vacuum/watch_map.sh",
    "content": "#!/bin/bash\nexport TERM=xterm\nwatch -n1 ./upload_map.sh"
  },
  {
    "path": "provision/playbooks/youtube/youtube.conf.j2",
    "content": "upstream youtube {\r\n  server 127.0.0.1:7883 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ youtube_domain }};\r\n  return 301 https://$server_name$request_uri;\r\n}\r\n\r\nserver {\r\n  listen 443 ssl;\r\n  ssl        on;\r\n  ssl_certificate /etc/letsencrypt/live/{{ youtube_domain }}/fullchain.pem;\r\n  ssl_certificate_key /etc/letsencrypt/live/{{ youtube_domain }}/privkey.pem;\r\n  server_name {{ youtube_domain }};\r\n\r\n  location / {\r\n    proxy_pass         http://youtube;\r\n    proxy_http_version 1.1;\r\n\r\n    # Ensuring it can use websockets\r\n    proxy_set_header   Upgrade $http_upgrade;\r\n    proxy_set_header   Connection \"upgrade\";\r\n    proxy_set_header   X-Real-IP $remote_addr;\r\n    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;\r\n    proxy_set_header   X-Forwarded-Proto http;\r\n    proxy_redirect     http:// $scheme://;\r\n\r\n    # The proxy must preserve the host because youtube verifies the host with the origin\r\n    # for WebSocket connections\r\n    proxy_set_header   Host $http_host;\r\n\r\n    # These sets the timeout so that the websocket can stay alive\r\n    proxy_connect_timeout   7m;\r\n    proxy_send_timeout      7m;\r\n    proxy_read_timeout      7m;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}"
  },
  {
    "path": "provision/playbooks/youtube/youtube.yaml",
    "content": "- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.certbot\r\n  vars:\r\n    certbot_auto_renew: false\r\n    certbot_admin_email: \"{{ email }}\"\r\n    certbot_create_if_missing: true\r\n    certbot_certs:\r\n      - domains:\r\n        - \"{{ youtube_domain }}\"\r\n\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/youtube.conf\r\n      template:\r\n        src: youtube.conf.j2\r\n        dest: /etc/nginx/sites-enabled/youtube.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx"
  },
  {
    "path": "provision/playbooks/ytd/ytd.conf.j2",
    "content": "upstream ytd {\r\n  server 127.0.0.1:7887 fail_timeout=0;\r\n}\r\n\r\nserver {\r\n  listen 80;\r\n  listen [::]:80;\r\n  server_name {{ ytd_domain }};\r\n\r\n  location / {\r\n    allow 192.168.0.0/16;\r\n    allow 10.0.0.0/16;\r\n    deny all;\r\n    proxy_pass http://ytd/;\r\n    proxy_set_header Host $host;\r\n\r\n    proxy_http_version 1.1;\r\n    proxy_set_header Upgrade $http_upgrade;\r\n    proxy_set_header Connection \"upgrade\";\r\n\r\n    proxy_set_header X-Real-IP $remote_addr;\r\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n  }\r\n\r\n  error_page 404 403 @error;\r\n\r\n  location @error {\r\n    root /var/www;\r\n    try_files /403.html /403.html;\r\n  }\r\n\r\n  client_max_body_size 50M;\r\n  keepalive_timeout 10;\r\n}"
  },
  {
    "path": "provision/playbooks/ytd/ytd.yaml",
    "content": "\r\n# Nginx\r\n- hosts: master\r\n  become: yes\r\n  roles:\r\n    - role: geerlingguy.nginx\r\n  handlers:\r\n    - name: restart nginx\r\n      become: yes\r\n      service:\r\n        name: nginx\r\n        enabled: yes\r\n        state: restarted\r\n  tasks:\r\n    - name: Create /etc/nginx/sites-enabled/ytd.conf\r\n      template:\r\n        src: ytd.conf.j2\r\n        dest: /etc/nginx/sites-enabled/ytd.conf\r\n      notify:\r\n        - reload nginx\r\n        - restart nginx\r\n"
  },
  {
    "path": "provision/playbooks/zwave/zwave.service.j2",
    "content": "[Unit]\nConditionPathExists=/smart-house/.env.home-assistant\nDescription=Smart House Support\nRequires=docker.service\nAfter=docker.service\n\n[Service]\nEnvironment=SMART_HOUSE_DIR=/smart-house\nRestart=always\nUser=root\nStandardOutput=syslog\nStandardError=syslog\n\nExecStart=/usr/bin/zsh -l -c \"/usr/bin/smart-house zwave up\"\nExecStop=/usr/bin/zsh -l -c \"/usr/bin/smart-house zwave down\"\n\n[Install]\nWantedBy=multi-user.target"
  },
  {
    "path": "provision/playbooks/zwave/zwave.yaml",
    "content": "- hosts: master\n  become: yes\n  tasks:\n    - name: Create zwave.service\n      template:\n        src: zwave.service.j2\n        dest: /lib/systemd/system/zwave.service\n    - name: Reload daemon\n      systemd:\n        daemon_reload: yes\n    - name: Reload service zwave, in all cases\n      systemd:\n        name: zwave\n        state: reloaded\n        enabled: yes"
  },
  {
    "path": "provision/templates/404.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n  <meta name=\"viewport\" id=\"viewport-meta\" content=\"initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no\">\n  <title>You should not pass</title>\n  <style>\n\n  * {\n    box-sizing: border-box;\n    margin: 0;\n    padding: 0;\n  }\n\n  html,\n  body {\n    overflow: hidden;\n    pointer-events: none;\n    -webkit-user-select: none;\n       -moz-user-select: none;\n        -ms-user-select: none;\n            user-select: none;\n  }\n\n  body {\n    background: #111;\n    color: #bbb;\n    cursor: default;\n    font: normal 300%/1.5 monospace;\n    position: fixed;\n    top: 0;\n    left: 0;\n    height: 100%;\n    width: 100%;\n  }\n\n  i {\n    display: block;\n    -webkit-box-flex: 0;\n        -ms-flex: none;\n            flex: none;\n    font-style: normal;\n    text-align: center;\n    width: 1.125em;\n  }\n\n  .back {\n    -ms-flex-line-pack: start;\n        align-content: flex-start;\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex;\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n    -webkit-box-pack: start;\n        -ms-flex-pack: start;\n            justify-content: flex-start;\n    height: 100%;\n    left: 0;\n    position: fixed;\n    top: 0;\n    width: 100%;\n  }\n\n  .back i {\n    opacity: 0.4;\n  }\n\n  .text {\n    left: 3.375em;\n    position: absolute;\n    top: 3em;\n    width: 10.125em;\n  }\n  .text span {\n    display: -webkit-box;\n    display: -ms-flexbox;\n    display: flex;\n  }\n  .text span.fourzerofour i {\n    color: red !important;\n  }\n  .text i {\n    background-color: #111;\n    color: #fff;\n  }\n\n  </style>\n  <script\n    src=\"https://code.jquery.com/jquery-3.4.1.slim.min.js\"\n    integrity=\"sha256-pasqAKBDmFT4eHoN2ndd6lN370kFiGUFyTiUHWhU7k8=\"\n    crossorigin=\"anonymous\"></script>\n</head>\n<body>\n\n  <div class=\"back\"></div>\n  <div class=\"text\">\n    <span>\n      <i>Y</i>\n      <i>O</i>\n      <i>U</i>\n      <i> </i>\n      <i>S</i>\n      <i>H</i>\n      <i>A</i>\n      <i>L</i>\n      <i>L</i>\n      <i> </i>\n      <i>N</i>\n      <i>O</i>\n      <i>T</i>\n      <i> </i>\n      <i>P</i>\n      <i>A</i>\n      <i>S</i>\n      <i>S</i>\n    </span>\n    <span class=\"fourzerofour\"><i>4</i><i>0</i><i>3</i></span>\n  </div>\n\n  <script>\n\n  function digits(){\n    var num = Math.round(($(document).width()*$(document).height())/(58*43)),\n        arr = [];\n    for (var i = 0, l = num; i < l; i++) {\n      arr.push('<i>'+Math.floor((Math.random() * 2) + 0)+'</i>');\n    }\n    $('.back').append(arr);\n  }\n\n  function tamper() {\n    var d = $(\".back i\"),\n        e = d.eq(Math.floor((Math.random() * d.length)));\n    if ( e.html() == 1 ) {\n      e.html('0');\n    } else {\n      e.html('1');\n    }\n  }\n\n  setInterval(function () {\n    tamper();\n  }, 100);\n\n  $(window).on('load resize', function () {\n    digits(function () {\n      tamper();\n    });\n  });\n\n  </script>\n\n</body>\n</html>"
  },
  {
    "path": "provision/templates/etc/default/cloudflared.j2",
    "content": "# Commandline args for cloudflared, generated by ansible\r\nCLOUDFLARED_OPTS=--port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query"
  },
  {
    "path": "provision/templates/etc/dnsmasq.d/02-localhosts.conf.j2",
    "content": "addn-hosts=/etc/pihole/lan.list"
  },
  {
    "path": "provision/templates/etc/fail2ban/filter.d/ha.conf",
    "content": "[INCLUDES]\nbefore = common.conf\n\n[Definition]\nfailregex = ^%(__prefix_line)s.*Login attempt or request with invalid authentication from <HOST>.*$\n\nignoreregex =\n\n[Init]\ndatepattern = ^%%Y-%%m-%%d %%H:%%M:%%S"
  },
  {
    "path": "provision/templates/etc/fail2ban/filter.d/mosquitto-auth.conf",
    "content": "[Definition]\n\nfailregex = Client connection from <HOST> failed\nignoreregex ="
  },
  {
    "path": "provision/templates/etc/fail2ban/filter.d/nginx-badbots.conf",
    "content": "\n# Fail2Ban configuration file\n#\n# Regexp to catch known spambots and software alike. Please verify\n# that it is your intent to block IPs which were driven by\n# above mentioned bots.\n\n\n[Definition]\n\nbadbotscustom = EmailCollector|WebEMailExtrac|TrackBack/1\\.02|sogou music spider\nbadbots = Atomic_Email_Hunter/4\\.0|atSpider/1\\.0|autoemailspider|bwh3_user_agent|China Local Browse 2\\.6|ContactBot/0\\.2|ContentSmartz|DataCha0s/2\\.0|DBrowse$\n\nfailregex = ^<HOST> -.*\"(GET|POST|HEAD).*HTTP.*\"(?:%(badbots)s|%(badbotscustom)s)\"$\n\nignoreregex =\n\n# DEV Notes:\n# List of bad bots fetched from http://www.user-agents.org\n# Generated on Thu Nov  7 14:23:35 PST 2013 by files/gen_badbots.\n#\n# Author: Yaroslav Halchenko\n\n"
  },
  {
    "path": "provision/templates/etc/fail2ban/filter.d/nginx-forbidden.conf",
    "content": "[Definition]\nfailregex = ^ \\[error\\] \\d+#\\d+: .* forbidden .*, client: <HOST>, .*$\nignoreregex = "
  },
  {
    "path": "provision/templates/etc/fail2ban/filter.d/nginx-http-auth.conf",
    "content": "# fail2ban filter configuration for nginx\n\n\n[Definition]\n\n\nfailregex = ^ \\[error\\] \\d+#\\d+: \\*\\d+ user \"\\S+\":? (password mismatch|was not found in \".*\"), client: <HOST>, server: \\S*, request: \"\\S+ \\S+ HTTP/\\d+\\.\\d+\",$\n\nignoreregex =\n\n# DEV NOTES:\n# Based on samples in https://github.com/fail2ban/fail2ban/pull/43/files\n# Extensive search of all nginx auth failures not done yet.\n#\n# Author: Daniel Black"
  },
  {
    "path": "provision/templates/etc/fail2ban/filter.d/nginx-noscript.conf",
    "content": "[Definition]\n\nfailregex = ^<HOST> -.*GET.*(\\.php|\\.asp|\\.exe|\\.pl|\\.cgi|\\.scgi)\n\nignoreregex =\n"
  },
  {
    "path": "provision/templates/etc/fail2ban/jail.d/ha.conf",
    "content": "[DEFAULT]\n\n# Action \"%(action_mwl)s\" will ban the IP and send an email notification including whois data and log entries.\naction = %(action_mwl)s\n\n[ha]\nenabled = true\nfilter = ha\nlogpath = /smart-house/home-assistant/home-assistant.log\n# Maximum amount of login attempts before IP is blocked\nmaxretry = 3\n\n[sshd]\nenabled = true\n\n[mosquitto-auth]\nenabled = true\nfilter = mosquitto-auth\nlogpath  = /smart-house/.docker/log/mosquitto.log\nmaxretry = 6\n\n[nginx-http-auth]\nenabled  = true\nfilter   = nginx-http-auth\nport     = http,https\nlogpath  = /var/log/nginx/error.log\n\n[nginx-badbots]\nenabled  = true\nport     = http,https\nfilter   = nginx-badbots\nlogpath  = /var/log/nginx/access.log\nmaxretry = 2\n\n[nginx-forbidden]\nenabled = true\nfilter = nginx-forbidden\nport = http,https\nlogpath = /var/log/nginx/*error*.log\nfindtime = 60\nbantime = 6000\nmaxretry = 3"
  },
  {
    "path": "provision/templates/etc/nginx/sites-enabled/.gitkeep",
    "content": ""
  },
  {
    "path": "provision/templates/etc/nginx/sites-enabled/airsonic.conf.j2",
    "content": "upstream airsonic {\n  server 127.0.0.1:4040 fail_timeout=0;\n}\n\nserver {\n  listen 80;\n  listen [::]:80;\n  server_name {{ airsonic_domain }};\n  return 301 https://$server_name$request_uri;\n}\n\nserver {\n  listen 443 ssl;\n  ssl        on;\n  ssl_certificate /etc/letsencrypt/live/{{ airsonic_domain }}/fullchain.pem;\n  ssl_certificate_key /etc/letsencrypt/live/{{ airsonic_domain }}/privkey.pem;\n  server_name {{ airsonic_domain }};\n\n  location / {\n    proxy_pass http://airsonic/;\n    proxy_set_header Host $host;\n\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"upgrade\";\n\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n  }\n\n  error_page 404 403 @error;\n\n  location @error {\n    root /var/www;\n    try_files /403.html /403.html;\n  }\n\n  client_max_body_size 50M;\n  keepalive_timeout 10;\n}"
  },
  {
    "path": "provision/templates/etc/nginx/sites-enabled/default.conf.j2",
    "content": "server {\n  listen 80 default_server;\n\n  root /var/www/html;\n\n  location ~ / {\n    allow 192.168.0.0/24;\n    allow 192.168.1.0/24;\n    allow 10.0.0.0/24;\n    allow 10.0.2.0/24;\n    deny all;\n    expires max;\n    try_files /index.html =404;\n  }\n\n  error_page 403 https://www.youtube.com/watch?v=Ucmy0Yw141U;\n}"
  },
  {
    "path": "provision/templates/etc/nginx/sites-enabled/firefly.conf.j2",
    "content": "upstream firefly {\n  server 127.0.0.1:10001 fail_timeout=0;\n}\n\nserver {\n  listen 80;\n  listen [::]:80;\n  server_name budget.{{ domain }};\n  return 301 https://$server_name$request_uri;\n}\n\nserver {\n  listen 443 ssl;\n  ssl        on;\n  ssl_certificate /etc/letsencrypt/live/budget.{{ domain }}/fullchain.pem;\n  ssl_certificate_key /etc/letsencrypt/live/budget.{{ domain }}/privkey.pem;\n  server_name budget.{{ domain }};\n\n  location / {\n    allow 192.168.0.0/16;\n    allow 10.0.0.0/16;\n    deny all;\n    proxy_pass http://firefly/;\n    proxy_set_header Host $host;\n\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"upgrade\";\n\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n  }\n\n  error_page 404 403 @error;\n\n  location @error {\n    root /var/www;\n    try_files /403.html /403.html;\n  }\n\n  client_max_body_size 50M;\n  keepalive_timeout 10;\n}"
  },
  {
    "path": "provision/templates/etc/nginx/sites-enabled/monio.conf.j2",
    "content": "upstream monio {\n  server 127.0.0.1:14000 fail_timeout=0;\n}\n\nserver {\n  listen 80;\n  listen [::]:80;\n  server_name {{ monio_domain }};\n  return 301 https://$server_name$request_uri;\n}\n\nserver {\n  listen 443 ssl;\n  ssl        on;\n  ssl_certificate /etc/letsencrypt/live/{{ monio_domain }}/fullchain.pem;\n  ssl_certificate_key /etc/letsencrypt/live/{{ monio_domain }}/privkey.pem;\n  server_name {{ monio_domain }};\n\n  location / {\n    proxy_pass http://monio/;\n    proxy_set_header Host $host;\n\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"upgrade\";\n\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header Host $http_host;\n    proxy_set_header X-NginX-Proxy true;\n    proxy_set_header X-Forwarded-Proto $scheme;\n  }\n\n  error_page 404 403 @error;\n\n  location @error {\n    root /var/www;\n    try_files /403.html /403.html;\n  }\n\n  client_max_body_size 50M;\n  keepalive_timeout 10;\n}"
  },
  {
    "path": "provision/templates/etc/nginx/sites-enabled/podcast.conf.j2",
    "content": "upstream podcast {\n  server 127.0.0.1:13000 fail_timeout=0;\n}\n\nserver {\n  listen 80;\n  listen [::]:80;\n  server_name {{ podcast_domain }};\n  return 301 https://$server_name$request_uri;\n}\n\nserver {\n  listen 443 ssl;\n  ssl        on;\n  ssl_certificate /etc/letsencrypt/live/{{ podcast_domain }}/fullchain.pem;\n  ssl_certificate_key /etc/letsencrypt/live/{{ podcast_domain }}/privkey.pem;\n  server_name {{ podcast_domain }};\n\n  location / {\n    proxy_pass http://podcast/;\n    proxy_set_header Host $host;\n\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"upgrade\";\n\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n    proxy_set_header Host $http_host;\n    proxy_set_header X-NginX-Proxy true;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    proxy_set_header X-Sendfile-Type X-Accel-Redirect;\n    proxy_set_header X-Accel-Mapping /smart-house/.docker/data/podjira/=/storage/;\n  }\n\n  error_page 404 403 @error;\n\n  location @error {\n    root /var/www;\n    try_files /403.html /403.html;\n  }\n\n  client_max_body_size 50M;\n  keepalive_timeout 10;\n}"
  },
  {
    "path": "provision/templates/etc/nginx/sites-enabled/rss.conf.j2",
    "content": "upstream rss {\n  server 127.0.0.1:12008 fail_timeout=0;\n}\n\nserver {\n  listen 80;\n  listen [::]:80;\n  server_name {{ rss_domain }};\n  return 301 https://$server_name$request_uri;\n}\n\nserver {\n  listen 443 ssl;\n  ssl        on;\n  ssl_certificate /etc/letsencrypt/live/{{ rss_domain }}/fullchain.pem;\n  ssl_certificate_key /etc/letsencrypt/live/{{ rss_domain }}/privkey.pem;\n  server_name {{ rss_domain }};\n\n  location / {\n    proxy_pass http://rss/;\n    proxy_set_header Host $host;\n\n    proxy_http_version 1.1;\n    proxy_set_header Upgrade $http_upgrade;\n    proxy_set_header Connection \"upgrade\";\n\n    proxy_set_header X-Real-IP $remote_addr;\n    proxy_set_header X-Forwarded-Proto $scheme;\n    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n  }\n\n  error_page 404 403 @error;\n\n  location @error {\n    root /var/www;\n    try_files /403.html /403.html;\n  }\n\n  client_max_body_size 50M;\n  keepalive_timeout 10;\n}"
  },
  {
    "path": "provision/templates/etc/pihole/lan.list.j2",
    "content": "{{ ansible_default_ipv4.address }} {{ domain }}\n{{ ansible_default_ipv4.address }} budget.{{ domain }}\n{{ ansible_default_ipv4.address }} {{ ipfs_domain }}\n{{ ansible_default_ipv4.address }} api-{{ ipfs_domain }}\n192.168.1.181 mr-pickle.here"
  },
  {
    "path": "provision/templates/etc/systemd/bt-mqtt-gateway.service",
    "content": "[Unit]\nDescription=Bluetooth MQTT gateway\nDocumentation=https://github.com/zewelor/bt-mqtt-gateway\nAfter=network.target\n\n[Service]\nType=simple\nWorkingDirectory=/home/pi/bt-mqtt-gateway\nExecStart=/home/pi/bt-mqtt-gateway/gateway.py\nRestart=always\n\n[Install]\nWantedBy=multi-user.target"
  },
  {
    "path": "provision/templates/etc/systemd/resolved.conf",
    "content": "#  This file is part of systemd.\n#\n#  systemd is free software; you can redistribute it and/or modify it\n#  under the terms of the GNU Lesser General Public License as published by\n#  the Free Software Foundation; either version 2.1 of the License, or\n#  (at your option) any later version.\n#\n# Entries in this file show the compile time defaults.\n# You can change settings by editing this file.\n# Defaults can be restored by simply deleting this file.\n#\n# See resolved.conf(5) for details\n\n[Resolve]\nDNS=192.168.1.157\nFallbackDNS=1.1.1.1\n#Domains=\n#LLMNR=no\n#MulticastDNS=no\n#DNSSEC=no\nCache=no\nDNSStubListener=no\n\n\n"
  },
  {
    "path": "provision/templates/home/pi/mqtt2rf/config.yaml.j2",
    "content": "rf_switch:\n  command_topic: 'home/rf_emitter/set'\n  state_topic: 'home/rf_emitter'\n  gpio: 3\n  pulselength: 321\n  protocol: 1\n\nmqtt:\n  host: '{{ mqtt_host }}'\n  port: {{ mqtt_port }}\n  username: '{{ mqtt_username }}'\n  password: '{{ mqtt_password }}'"
  },
  {
    "path": "provision/templates/lib/systemd/system/cloudflared.service.j2",
    "content": "[Unit]\r\nDescription=cloudflared DNS over HTTPS proxy\r\nAfter=syslog.target network-online.target\r\n\r\n[Service]\r\nType=simple\r\nUser=cloudflared\r\nEnvironmentFile=/etc/default/cloudflared\r\nExecStart=/usr/local/bin/cloudflared proxy-dns $CLOUDFLARED_OPTS\r\nRestart=on-failure\r\nRestartSec=10\r\nKillMode=process\r\n\r\n[Install]\r\nWantedBy=multi-user.target"
  },
  {
    "path": "provision/templates/lib/systemd/system/health.service.j2",
    "content": "[Unit]\nConditionPathExists=/smart-house/.env.home-assistant\nDescription=Smart House Health stuff\nRequires=docker.service\nAfter=docker.service\n\n[Service]\nEnvironment=SMART_HOUSE_DIR=/smart-house\nRestart=always\nUser=root\nStandardOutput=syslog\nStandardError=syslog\n\nExecStart=/usr/bin/zsh -l -c \"/usr/bin/smart-house health up\"\nExecStop=/usr/bin/zsh -l -c \"/usr/bin/smart-house health down\"\n\n[Install]\nWantedBy=multi-user.target"
  },
  {
    "path": "provision/templates/lib/systemd/system/kiosk.service.j2",
    "content": "[Unit]\nDescription=Kiosk UI\nConditionPathExists=/smart-house/.env.home-assistant\nAfter=network.target\n\n[Service]\nType=simple\nUser={{ ansible_user }}\nGroup={{ ansible_user }}\nLimitNOFILE=1024\n\nRestart=on-failure\nRestartSec=10\nEnvironment=DISPLAY=:0.0\n\nWorkingDirectory=/smart-house/\nExecStart=/usr/bin/zsh -l -c \"source /home/{{ ansible_user }}/.zshrc && cd /smart-house/panel && npx electron . --host=https://{{ domain }} --production\"\n\nPermissionsStartOnly=true\nStandardOutput=syslog\nStandardError=syslog\nSyslogIdentifier=panel\n\n[Install]\nWantedBy=multi-user.target"
  },
  {
    "path": "provision/templates/lib/systemd/system/media.service.j2",
    "content": "[Unit]\nConditionPathExists=/smart-house/.env.home-assistant\nDescription=Smart House Media\nRequires=docker.service\nAfter=docker.service\n\n[Service]\nEnvironment=SMART_HOUSE_DIR=/smart-house\nRestart=always\nUser=root\nStandardOutput=syslog\nStandardError=syslog\n\nExecStart=/usr/bin/zsh -l -c \"/usr/bin/smart-house media up\"\nExecStop=/usr/bin/zsh -l -c \"/usr/bin/smart-house media down\"\n\n[Install]\nWantedBy=multi-user.target"
  },
  {
    "path": "provision/templates/lib/systemd/system/smart-house.service.j2",
    "content": "[Unit]\nConditionPathExists=/smart-house/.env.home-assistant\nDescription=Smart House\nRequires=docker.service\nAfter=docker.service\n\n[Service]\nEnvironment=SMART_HOUSE_DIR=/smart-house\nRestart=always\nUser=root\nStandardOutput=syslog\nStandardError=syslog\n\nExecStart=/usr/bin/zsh -l -c \"/usr/bin/smart-house docker-compose up\"\nExecStop=/usr/bin/zsh -l -c \"/usr/bin/smart-house docker-compose down\"\n\n[Install]\nWantedBy=multi-user.target"
  },
  {
    "path": "provision/templates/lib/systemd/system/support.service.j2",
    "content": "[Unit]\nConditionPathExists=/smart-house/.env.home-assistant\nDescription=Smart House Support\nRequires=docker.service\nAfter=docker.service\n\n[Service]\nEnvironment=SMART_HOUSE_DIR=/smart-house\nRestart=always\nUser=root\nStandardOutput=syslog\nStandardError=syslog\n\nExecStart=/usr/bin/zsh -l -c \"/usr/bin/smart-house support up\"\nExecStop=/usr/bin/zsh -l -c \"/usr/bin/smart-house support down\"\n\n[Install]\nWantedBy=multi-user.target"
  },
  {
    "path": "provision/templates/var/www/html/403.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <title>The end</title>\n  <meta http-equiv=\"refresh\" content=\"60\" />\n  <style>\n    body {\n      padding: 0px;\n      margin: 0px;\n      display: flex;\n      background: #000;\n    }\n\n    canvas {\n      display: block;\n      position:absolute;\n      top:0;\n      left:0;\n    }\n  </style>\n</head>\n<body>\n  <canvas id=\"canvas\">Canvas is not supported in your browser.</canvas>\n  <canvas id=\"canvas2\">Canvas is not supported in your browser.</canvas>\n  <script type=\"text/javascript\">\n    var canvas = document.getElementById( 'canvas' ),\n\t\tctx = canvas.getContext( '2d' ),\n    canvas2 = document.getElementById( 'canvas2' ),\n    ctx2 = canvas2.getContext( '2d' ),\n\t\t// full screen dimensions\n\t\tcw = window.innerWidth,\n\t\tch = window.innerHeight,\n    charArr = ['0','0','1', '1'],\n    maxCharCount = 200,\n    fallingCharArr = [],\n    fontSize = 24,\n    maxColums = cw/(fontSize);\n    canvas.width = canvas2.width = cw;\n    canvas.height = canvas2.height = ch;\n\n\n    function randomInt( min, max ) {\n    \treturn Math.floor(Math.random() * ( max - min ) + min);\n    }\n\n    function randomFloat( min, max ) {\n    \treturn Math.random() * ( max - min ) + min;\n    }\n\n    function Point(x,y)\n    {\n      this.x = x;\n      this.y = y;\n    }\n\n    Point.prototype.draw = function(ctx){\n\n      this.value = charArr[randomInt(0,charArr.length-1)].toUpperCase();\n      this.speed = randomFloat(1,5);\n\n\n      ctx2.fillStyle = \"rgba(255,255,255,0.8)\";\n      ctx2.font = fontSize+\"px san-serif\";\n      ctx2.fillText(this.value,this.x,this.y);\n\n        ctx.fillStyle = \"#0F0\";\n        ctx.font = fontSize+\"px san-serif\";\n        ctx.fillText(this.value,this.x,this.y);\n\n\n\n        this.y += this.speed;\n        if(this.y > ch)\n        {\n          this.y = randomFloat(-100,0);\n          this.speed = randomFloat(2,5);\n        }\n    }\n\n    for(var i = 0; i < maxColums ; i++) {\n      fallingCharArr.push(new Point(i*fontSize,randomFloat(-500,0)));\n    }\n\n\n    var update = function()\n    {\n\n    ctx.fillStyle = \"rgba(0,0,0,0.05)\";\n    ctx.fillRect(0,0,cw,ch);\n\n    ctx2.clearRect(0,0,cw,ch);\n\n      var i = fallingCharArr.length;\n\n      while (i--) {\n        fallingCharArr[i].draw(ctx);\n        var v = fallingCharArr[i];\n      }\n\n      requestAnimationFrame(update);\n    }\n\n    update();\n  </script>\n</body>\n</html>\n"
  },
  {
    "path": "provision/templates/var/www/html/index.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n  <title>Dupa nie internet</title>\n</head>\n<body>\n  <p>Dupa nie internet!</p>\n</body>\n</html>"
  },
  {
    "path": "provision/vars.yml.example",
    "content": "partition_size: '130G'\nencrypted_disk: /dev/sda3\ndisk_password: 'admin1234'\nemail:\ndomain: 'test.local'\nipfs_domain: 'ipfs.test.local'\n\nipfs_peer_id: asda\nipfs_private_key: ''\nipfs_storage_max: 20GB\nipfs_version: v0.4.21\nipfs_http_api_listen_multiaddress: /ip4/0.0.0.0/tcp/5001\nipfs_http_gateway_listen_multiaddress: /ip4/0.0.0.0/tcp/8080"
  },
  {
    "path": "requirements.txt",
    "content": "homeassistant\nrequests\nJinja2>=2.10.1\nruamel.yaml==0.15.86 \nmkdocs>=1.1\nmkdocs-material\npygments\npymdown-extensions"
  },
  {
    "path": "scripts/health.sh",
    "content": "#!/usr/bin/env bash\nSUBCOMMAND=${1}\n\nfunction health_command_create-account() {\n  docker-compose --file docker-compose.health.yaml --project-name health run --rm eth geth account new --password /settings/password.txt --datadir /data\n}\n\nfunction health_command_eth-sh() {\n  docker-compose --file docker-compose.health.yaml --project-name health run --rm eth sh\n}\n\nfunction health_command_eth-console() {\n  docker-compose --file docker-compose.health.yaml --project-name health run --rm eth geth attach\n}\n\nfunction health_command_up() {\n  docker-compose --file docker-compose.health.yaml --project-name health up\n}\n\nfunction health_command_docker-compose() {\n  docker-compose --file docker-compose.health.yaml --project-name health $SUBCOMMAND_ARGS\n}\n\nfunction health_command_down() {\n  docker-compose --file docker-compose.health.yaml --project-name health down\n}\n\nfunction health_command_logs() {\n  docker-compose --file docker-compose.health.yaml --project-name health logs\n}\n\nfunction health_command_build() {\n  docker-compose --file docker-compose.health.yaml --project-name health build\n}\n\nfunction health_command_start() {\n  sudo systemctl start health;\n}\n\nfunction health_command_stop() {\n  sudo systemctl stop health;\n}\n\n\nfunction health_command_restart() {\n  sudo systemctl restart health;\n}\n\nfunction health_command_help() {\n  echo \"\n  🏡  SmartHouse health\n\n  $ smart-house health help                                  - print this help message\n  $ smart-house health start                                 - start all health stuff\n  $ smart-house health stop                                  - stop all health stuff\n  $ smart-house health restart                               - restart all health stuff\n  \"\n}\n\nfunction health_validate_command() {\n  if [ \"$(type -t health_command_${SUBCOMMAND})\" = function ]; then\n    return 0\n  elif [ -z \"$SUBCOMMAND\" ]; then\n    health_command_help;\n    return 1\n  else\n    echo \"Unknown health command: ${SUBCOMMAND}\";\n    return 1\n  fi\n}\n\nfunction health_execute_command() {\n  if ! health_validate_command; then\n    return 1\n  fi\n  health_command_${SUBCOMMAND} ${COMMAND_ARGS}\n  return $?\n}\n\nif ! health_execute_command; then\n  return 1\nfi"
  },
  {
    "path": "scripts/media.sh",
    "content": "#!/usr/bin/env bash\nSUBCOMMAND=${1}\ndeclare -a MEDIA_SHARES=(\"Movies\" \"MoviesAndTV\" \"Music\" \"Books\" \"SDDisk1\" \"Multimedia\" \"homes\")\n\nfunction media_command_mount() {\n  for share in \"${MEDIA_SHARES[@]}\"\n  do\n    mount_share $share\n  done\n}\n\nfunction media_command_unmount() {\n  for share in \"${MEDIA_SHARES[@]}\"\n  do\n    unmount_share $share\n  done\n}\n\nfunction media_command_up() {\n  docker-compose --file docker-compose.media.yaml --project-name media up\n}\n\nfunction media_command_down() {\n  docker-compose --file docker-compose.media.yaml --project-name media down --remove-orphans\n}\n\nfunction media_command_logs() {\n  docker-compose --file docker-compose.media.yaml --project-name media logs -f\n}\n\nfunction media_command_start() {\n  sudo systemctl start media;\n}\n\nfunction media_command_stop() {\n  sudo systemctl stop media;\n}\n\nfunction media_command_restart() {\n  sudo systemctl restart media;\n}\n\nfunction media_command_help() {\n  echo \"\n  🏡  SmartHouse Media\n\n  $ smart-house media help                                  - print this help message\n  $ smart-house media start                                 - start all media stuff\n  $ smart-house media stop                                  - stop all media stuff\n  $ smart-house media restart                               - restart all media stuff\n  $ smart-house media mount                                 - mount media shares\n  $ smart-house media unmount                               - unmount media shares\n  \"\n}\n\nfunction media_validate_command() {\n  if [ \"$(type -t media_command_${SUBCOMMAND})\" = function ]; then\n    return 0\n  elif [ -z \"$SUBCOMMAND\" ]; then\n    media_command_help;\n    return 1\n  else\n    echo \"Unknown media command: ${SUBCOMMAND}\";\n    return 1\n  fi\n}\n\nfunction media_execute_command() {\n  if ! media_validate_command; then\n    return 1\n  fi\n  media_command_${SUBCOMMAND} ${COMMAND_ARGS}\n  return $?\n}\n\nif ! media_execute_command; then\n  return 1\nfi\n"
  },
  {
    "path": "scripts/pihole.sh",
    "content": "#!/usr/bin/env bash\nSUBCOMMAND=${1}\n\nfunction pihole_command_start() {\n  sudo systemctl start pihole\n}\n\nfunction pihole_command_stop() {\n  sudo systemctl stop pihole\n}\n\nfunction pihole_command_status() {\n  sudo systemctl status pihole\n}\n\nfunction pihole_command_restart() {\n  sudo systemctl restart pihole\n}\n\nfunction pihole_command_up() {\n  docker run \\\n    --name adguardhome \\\n    -v \"$SMART_HOUSE_DIR/.docker/data/adguard/work:/opt/adguardhome/work\" \\\n    -v \"$SMART_HOUSE_DIR/.docker/data/adguard/conf:/opt/adguardhome/conf\" \\\n    --net=host \\\n    --rm \\\n    -p 53:53/tcp \\\n    -p 53:53/udp \\\n    -p 67:67/udp \\\n    -p 68:68/tcp \\\n    -p 68:68/udp \\\n    -p 6080:80/tcp \\\n    -p 6443:443/tcp \\\n    -p 853:853/tcp \\\n    -p 6300:3000/tcp \\\n    adguard/adguardhome\n}\n\nfunction pihole_command_help() {\n  echo \"\n  🏡  SmartHouse PiHole\n\n  $ smart-house pihole help                                  - print this help message\n  $ smart-house pihole up                                    - up pihole\n  $ smart-house pihole start                                 - start pihole\n  $ smart-house pihole stop                                  - stop pihole\n  $ smart-house pihole restart                               - restart pihole\n  \"\n}\n\nfunction pihole_validate_command() {\n  if [ \"$(type -t pihole_command_${SUBCOMMAND})\" = function ]; then\n    return 0\n  elif [ -z \"$SUBCOMMAND\" ]; then\n    pihole_command_help;\n    return 1\n  else\n    echo \"Unknown media command: ${SUBCOMMAND}\";\n    return 1\n  fi\n}\n\nfunction pihole_execute_command() {\n  if ! pihole_validate_command; then\n    return 1\n  fi\n  pihole_command_${SUBCOMMAND} ${COMMAND_ARGS}\n  return $?\n}\n\nif ! pihole_execute_command; then\n  return 1\nfi"
  },
  {
    "path": "scripts/smart-house.sh",
    "content": "#!/usr/bin/env bash\n\nfunction smart_house_load_variables() {\n  if [ ! -f ${SMART_HOUSE_DIR}/$1 ]; then\n    echo \"File ${SMART_HOUSE_DIR}/$1 do not exists!\"\n    exit 1;\n  fi;\n\n  export $(cat \"${SMART_HOUSE_DIR}/$1\";)\n}\n\nfunction smart_house_validate_command() {\n  if [ \"$(type -t smart_house_command_${COMMAND})\" = function ]; then\n    return 0\n  elif [ -z \"$COMMAND\" ]; then\n    smart_house_command_help;\n    return 1\n  else\n    echo \"Unknown command: ${COMMAND}\";\n    return 1\n  fi\n}\n\nfunction smart_house_command_bans() {\n  fail2ban-client status | grep \"Jail list:\" | sed \"s/ //g\" | awk '{split($2,a,\",\");for(i in a) system(\"fail2ban-client status \" a[i])}' | grep \"Status\\|IP list\";\n}\n\nfunction smart_house_command_restart() {\n  smart_house_command_stop;\n  smart_house_command_start;\n}\n\nfunction smart_house_command_quick-restart() {\n  docker-compose restart home-assistant\n}\n\nfunction smart_house_command_cleanup() {\n  docker rmi $(docker images -q -f dangling=true)\n  ​docker volume rm $(docker volume ls -qf dangling=true)\n}\n\nfunction smart_house_command_bash() {\n  docker-compose run --rm home-assistant bash\n}\n\nfunction smart_house_command_ipfs() {\n  docker-compose exec ipfs ipfs $COMMAND_ARGS\n}\n\nfunction smart_house_command_env() {\n  env\n}\n\nfunction smart_house_command_ps() {\n  docker-compose ps\n}\n\nfunction smart_house_command_update-monio() {\n  docker pull macbury/mon.io:latest;\n  smart-house support restart;\n}\n\nfunction unmount_share() {\n  declare share=$1\n  sudo umount /mnt/$share\n}\n\nfunction mount_share() {\n  declare share=$1\n  echo \"Mounting $share\"\n  sudo mkdir -p /mnt/$share\n  unmount_share $share\n\n  sudo mount -t cifs //mr-pickle.here/$share /mnt/$share -o username=$HOME_ASSISTANT_QNAP_USERNAME -o password=$HOME_ASSISTANT_QNAP_PASSWORD -o gid=samba,file_mode=0664,dir_mode=0775,noperm\n}\n\nfunction smart_house_command_enpass() {\n  ENPASS_BACKUP_DIRECTORY=\"/mnt/homes/nextcloud/$(date +\"%Y%m%d_%H%M%S\")/\";\n  ENPASS_DIRECTORY=/smart-house/.docker/data/nextcloud_next/data/macbury/files/Enpass;\n  mount_share \"homes\";\n  mkdir -p $ENPASS_BACKUP_DIRECTORY;\n  cp -R $ENPASS_DIRECTORY $ENPASS_BACKUP_DIRECTORY;\n  unmount_share \"homes\";\n}\n\nfunction smart_house_command_backup() {\n  smart_house_command_enpass;\n  BACKUP_STORAGE=/mnt/homes/SmartHouse;\n  TIMESTAMP=$(date +%Y/%m/%d_%H:%M:%S);\n  BACKUP_FOLDER=\"$SMART_HOUSE_DIR/.backups/\";\n  BACKUP_FILE=\"${BACKUP_FOLDER}smart-house_$(date +\"%Y%m%d_%H%M%S\").zip\";\n  mkdir -p $BACKUP_FOLDER;\n  echo \"Stoping services...\"\n  systemctl stop smart-house;\n  systemctl stop support;\n  systemctl stop media;\n  systemctl stop health;\n  echo \"Compressing data\"\n  echo $BACKUP_FILE\n  zip -1 -r $BACKUP_FILE $SMART_HOUSE_DIR -x\"smart-house/tmp/**/*\" -x\"smart-house/.docker/data/plex/config/Library/Application Support/Plex Media Server/Metadata/**/*\" -x\"smart-house/tmp\" -x\"*.log\" -x\"*.backups\" -x\"smart-house/.docker/data/plex/config/Library/Application Support/Plex Media Server/Cache/**/*\" -x\"smart-house/.docker/data/plex/config/Library/Application Support/Plex Media Server/Media/**/*\" -x\"*.AppleDouble\" -x\"smart-house/.docker/data/dpodcast\";\n  echo \"Starting services\"\n  systemctl start support;\n  systemctl start smart-house;\n  systemctl start media;\n  systemctl start health;\n  echo \"Waiting for services to boot\"\n  sleep 60;\n  echo \"Mounting backup storage\"\n  mount_share \"homes\";\n  echo \"Copy data to nas\"\n  rsync -ah --progress $BACKUP_FILE $BACKUP_STORAGE;\n  echo $TIMESTAMP > .backups/performed_at.txt\n  echo \"Clearing old data\"\n  rm $BACKUP_FILE;\n  find $BACKUP_STORAGE -mtime +3 -type f -delete;\n  smart_house_command_enpass;\n  #unmount_share \"homes\";\n  echo \"Done\"\n}\n\nfunction smart_house_command_build() {\n  sudo docker-compose build $COMMAND_ARGS;\n}\n\nfunction smart_house_command_upgrade() {\n  sudo docker-compose build home-assistant;\n  sudo docker image prune -f\n  sudo docker volume prune -f\n}\n\nfunction smart_house_command_add-mosquitto-user() {\n  random_password=$(openssl rand -base64 32 | rev | cut -b 2- | rev);\n  mkdir -p $SMART_HOUSE_DIR/.docker/data/mosquitto;\n  mosquitto_passwd -b $SMART_HOUSE_DIR/.docker/data/mosquitto/users.db $COMMAND_ARGS $random_password;\n\n  echo \"Username: $COMMAND_ARGS\";\n  echo \"Password: $random_password\";\n}\n\nfunction smart_house_command_docs() {\n  export LC_ALL=C.UTF-8\n  export LANG=C.UTF-8\n  mkdocs serve --livereload --dev-addr 0.0.0.0:7000\n}\n\nfunction smart_house_command_ddns() {\n  bin/ddns.py $MAIN_DOMAIN $HOME_ASSISTANT_SUBDOMAIN 1;\n  bin/ddns.py $MAIN_DOMAIN notes.$HOME_ASSISTANT_SUBDOMAIN 0;\n  bin/ddns.py $MAIN_DOMAIN $HOME_ASSISTANT_VPNDOMAIN 0;\n  bin/ddns.py $MAIN_DOMAIN podcast.$HOME_ASSISTANT_SUBDOMAIN 0;\n  bin/ddns.py $MAIN_DOMAIN rss 0;\n  bin/ddns.py $MAIN_DOMAIN ads 0;\n  bin/ddns.py $MAIN_DOMAIN gotify 0;\n  bin/ddns.py $MAIN_DOMAIN monio 0;\n  bin/ddns.py $MAIN_DOMAIN youtube 0;\n}\n\nfunction smart_house_command_certbot() {\n  systemctl stop nginx;\n  certbot renew --no-self-upgrade;\n  systemctl start nginx;\n}\n\nfunction smart_house_command_logs() {\n  eval \"docker-compose logs --tail=1000 -f ${COMMAND_ARGS}\"\n}\n\nfunction smart_house_command_docker-compose() {\n  eval \"docker-compose ${COMMAND_ARGS}\"\n}\n\nfunction smart_home_command_disable-aotec-blinking() {\n  echo -e '\\x01\\x08\\x00\\xF2\\x51\\x01\\x00\\x05\\x01\\x51' | cu -l $HOME_ASSISTANT_ZWAVE_DEV -s 115200\n}\n\nfunction smart_house_command_stop() {\n  sudo systemctl stop smart-house;\n}\n\nfunction smart_house_command_dev() {\n  export HOME_ASSISTANT_LOGGER=debug;\n  smart_house_command_lovelace;\n  docker-compose down;\n  docker-compose kill;\n  docker-compose up --remove-orphans;\n}\n\nfunction smart_house_command_psql() {\n  PGPASSWORD=$POSTGRES_PASSWORD psql --host localhost --username=$POSTGRES_USER --port=4101 $POSTGRES_DB;\n}\n\nfunction smart_house_command_lovelace() {\n  python3 $SMART_HOUSE_DIR/bin/lovelace-gen.py $SMART_HOUSE_DIR/home-assistant/lovelace\n}\n\nfunction smart_house_command_lovelace-dev() {\n  smart_house_command_lovelace;\n  echo \"Watching lovelace directory for changes...\";\n  while true; do\n    fswatch -r -1 $SMART_HOUSE_DIR/home-assistant/lovelace/ $SMART_HOUSE_DIR/home-assistant/www/ --include=.yaml\n    smart_house_command_lovelace;\n    echo \"Regenerated config!\";\n    sleep 1;\n  done\n}\n\nfunction smart_house_command_validate-config() {\n  HOME_ASSISTANT_DB_URL=sqlite:///tmp/test hass -c home-assistant/ --script check_config --info all\n}\n\nfunction smart_house_command_health-check() {\n  docker ps | grep smart-house | grep unhealthy;\n  local status=$?;\n  if [ $status -eq 0 ]; then\n    echo \"Unhealthy containers, fire in the hole!\";\n    smart_house_command_restart;\n  fi\n}\n\nfunction smart_house_command_unban() {\n  sudo fail2ban-client set ha unbanip ${COMMAND_ARGS};\n  sudo fail2ban-client set nginx-noscript unbanip ${COMMAND_ARGS};\n  sudo fail2ban-client set nginx-http-auth unbanip ${COMMAND_ARGS};\n  sudo fail2ban-client set nginx-badbots unbanip ${COMMAND_ARGS};\n  sudo fail2ban-client set nginx-forbidden unbanip ${COMMAND_ARGS};\n  sudo fail2ban-client set mosquitto-auth unbanip ${COMMAND_ARGS};\n}\n\nfunction smart_house_command_start() {\n  smart_house_command_lovelace;\n  sudo systemctl start smart-house;\n  sudo systemctl restart fail2ban;\n}\n\nfunction smart_house_command_status() {\n  sudo systemctl status smart-house;\n}\n\nfunction smart_house_execute_command() {\n  if ! smart_house_validate_command; then\n    return 1\n  fi\n  smart_house_command_${COMMAND} ${COMMAND_ARGS}\n  return $?\n}\n\nfunction smart_house_command_media() {\n  source \"${SMART_HOUSE_DIR}/scripts/media.sh\"\n}\n\nfunction smart_house_command_support() {\n  source \"${SMART_HOUSE_DIR}/scripts/support.sh\"\n}\n\nfunction smart_house_command_health() {\n  source \"${SMART_HOUSE_DIR}/scripts/health.sh\"\n}\n\nfunction smart_house_command_zwave() {\n  source \"${SMART_HOUSE_DIR}/scripts/zwave.sh\"\n}\n"
  },
  {
    "path": "scripts/support.sh",
    "content": "#!/usr/bin/env bash\nSUBCOMMAND=${1}\nshift 1\nSUBCOMMAND_ARGS=${@}\n\nfunction support_command_up() {\n  docker-compose --file docker-compose.support.yaml --project-name support up\n}\n\nfunction support_command_fix() {\n  /usr/local/bin/docker-compose --file docker-compose.support.yaml --project-name support restart influxdb;\n  /usr/local/bin/docker-compose --file docker-compose.support.yaml --project-name support restart rss-bridge;\n}\n\nfunction support_command_down() {\n  docker-compose --file docker-compose.support.yaml --project-name support down\n}\n\nfunction support_command_docker-compose() {\n  docker-compose --file docker-compose.support.yaml --project-name support $SUBCOMMAND_ARGS\n}\n\nfunction support_command_logs() {\n  docker-compose --file docker-compose.support.yaml --project-name support logs --tail=100 -f\n}\n\nfunction support_command_mysql() {\n  docker-compose --file docker-compose.support.yaml --project-name support run --rm mysql bash -l -c \"mysql -h mysql -u root --password=$MYSQL_ROOT_PASSWORD\"\n}\n\nfunction support_command_start() {\n  sudo systemctl start support;\n}\n\nfunction support_command_stop() {\n  sudo systemctl stop support;\n}\n\nfunction support_command_restart() {\n  support_command_stop;\n  support_command_start;\n}\n\nfunction support_command_health-check() {\n  docker ps | grep support | grep unhealthy;\n  local status=$?;\n  if [ $status -eq 0 ]; then\n    echo \"Unhealthy containers, fire in the hole!\";\n    support_command_restart;\n  fi\n}\n\nfunction support_command_docker-compose() {\n  eval \"docker-compose --file docker-compose.support.yaml --project-name support ${SUBCOMMAND_ARGS}\"\n}\n\nfunction support_command_help() {\n  echo \"\n  🏡  SmartHouse support\n\n  $ smart-house support help                                  - print this help message\n  $ smart-house support start                                 - start all support stuff\n  $ smart-house support stop                                  - stop all support stuff\n  $ smart-house support restart                               - restart all support stuff\n  $ smart-house support docker-compose                        - manage docker compose\n  $ smart-house support mysql                                 - connect to mysql\n  \"\n}\n\nfunction support_validate_command() {\n  if [ \"$(type -t support_command_${SUBCOMMAND})\" = function ]; then\n    return 0\n  elif [ -z \"$SUBCOMMAND\" ]; then\n    support_command_help;\n    return 1\n  else\n    echo \"Unknown media command: ${SUBCOMMAND}\";\n    return 1\n  fi\n}\n\nfunction support_execute_command() {\n  if ! support_validate_command; then\n    return 1\n  fi\n  support_command_${SUBCOMMAND} ${COMMAND_ARGS}\n  return $?\n}\n\nif ! support_execute_command; then\n  return 1\nfi\n"
  },
  {
    "path": "scripts/zwave.sh",
    "content": "#!/usr/bin/env bash\nSUBCOMMAND=${1}\nshift 1\nSUBCOMMAND_ARGS=${@}\n\nfunction zwave_command_up() {\n  docker-compose --file docker-compose.zwave.yaml --project-name zwave up\n}\n\nfunction zwave_command_down() {\n  docker-compose --file docker-compose.zwave.yaml --project-name zwave down\n}\n\nfunction zwave_command_docker-compose() {\n  docker-compose --file docker-compose.zwave.yaml --project-name zwave $SUBCOMMAND_ARGS\n}\n\nfunction zwave_command_logs() {\n  docker-compose --file docker-compose.zwave.yaml --project-name zwave logs --tail=100 -f\n}\n\nfunction zwave_command_start() {\n  sudo systemctl start zwave;\n}\n\nfunction zwave_command_stop() {\n  sudo systemctl stop zwave;\n}\n\nfunction zwave_command_restart() {\n  zwave_command_stop;\n  zwave_command_start;\n}\n\nfunction zwave_command_docker-compose() {\n  eval \"docker-compose --file docker-compose.zwave.yaml --project-name zwave ${SUBCOMMAND_ARGS}\"\n}\n\nfunction zwave_command_help() {\n  echo \"\n  🏡  SmartHouse zwave\n\n  $ smart-house zwave help                                  - print this help message\n  $ smart-house zwave start                                 - start all zwave stuff\n  $ smart-house zwave stop                                  - stop all zwave stuff\n  $ smart-house zwave restart                               - restart all zwave stuff\n  $ smart-house zwave docker-compose                        - manage docker compose\n  $ smart-house zwave mysql                                 - connect to mysql\n  \"\n}\n\nfunction zwave_validate_command() {\n  if [ \"$(type -t zwave_command_${SUBCOMMAND})\" = function ]; then\n    return 0\n  elif [ -z \"$SUBCOMMAND\" ]; then\n    zwave_command_help;\n    return 1\n  else\n    echo \"Unknown media command: ${SUBCOMMAND}\";\n    return 1\n  fi\n}\n\nfunction zwave_execute_command() {\n  if ! zwave_validate_command; then\n    return 1\n  fi\n  zwave_command_${SUBCOMMAND} ${COMMAND_ARGS}\n  return $?\n}\n\nif ! zwave_execute_command; then\n  return 1\nfi\n"
  },
  {
    "path": "tor/Dockerfile",
    "content": "FROM alpine:latest\r\n\r\nRUN apk update \\\r\n && apk upgrade \\\r\n && apk add tor \\\r\n && rm /var/cache/apk/*\r\n\r\nEXPOSE 9051\r\nADD ./torrc /etc/tor/torrc\r\n\r\nRUN mkdir /data\r\nUSER tor\r\nUSER root\r\nRUN chown tor /data\r\nUSER tor\r\nCMD /usr/bin/tor -f /etc/tor/torrc"
  },
  {
    "path": "tor/torrc",
    "content": "ControlPort 127.0.0.1:9051\r\nCookieAuthentication 1\r\n\r\nCookieAuthFileGroupReadable 1\r\nSOCKSPort 0.0.0.0:9050\r\n\r\nAvoidDiskWrites 1\r\nDataDirectory /data\r\n\r\nHiddenServiceDir /data/services/macbury.ninja/\r\nHiddenServicePort 80 127.0.0.1:80\r\n\r\nHiddenServiceDir /data/services/electrs/\r\nHiddenServiceVersion 3\r\nHiddenServicePort 50002 192.168.1.157:50002\r\n\r\nHiddenServiceDir /data/services/bitcoin/\r\nHiddenServiceVersion 3\r\nHiddenServicePort 8333 192.168.1.157:8333\r\n"
  },
  {
    "path": "vacuum/.gitignore",
    "content": "public/**/*.png\n"
  },
  {
    "path": "vacuum/Dockerfile",
    "content": "FROM node:12.2.0-stretch\n\nRUN mkdir /app\nWORKDIR /app\n\nRUN apt-get update && apt-get install -y imagemagick build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev\n\nCOPY ./package.json .\nCOPY ./yarn.lock .\n\nRUN yarn\n\nCOPY index.js .\nCOPY map.js .\n\nRUN mkdir /app/public\n\nENTRYPOINT [ \"yarn\", \"start\" ]"
  },
  {
    "path": "vacuum/bin/build",
    "content": "#!/bin/bash\ndocker build . -t vacuum\ndocker run -t vacuum -p 3000:3000"
  },
  {
    "path": "vacuum/bin/run",
    "content": "docker run -p 3000:3000 --rm -t vacuum"
  },
  {
    "path": "vacuum/bin/upload",
    "content": "#!/bin/bash\n\ncurl -X POST -F map=@./fixtures/map.ppm -F log=@./fixtures/SLAM_fprintf.log http://0.0.0.0:3000/map\n"
  },
  {
    "path": "vacuum/index.js",
    "content": "const express = require('express')\nconst app = express()\nconst multipart = require('connect-multiparty')();\nconst port = 3000\nconst process = require('./map')\n\nconst outputPath = __dirname + '/public/map'\n\napp.use(express.static('public'))\n\napp.post('/map', multipart, async function (req, res) {\n  const { log, map } = req.files\n  console.log(\"Processing: \", [map.path, log.path])\n  await process(map.path, log.path, outputPath)\n  res.send({ success: true })\n})\n\napp.listen(port, '0.0.0.0', () => console.log(`Example app listening 0.0.0.0 on port ${port}!`))"
  },
  {
    "path": "vacuum/map.js",
    "content": "const fs = require('fs')\nconst { exec: oldExec } = require('child_process');\nconst { createCanvas, loadImage } = require('canvas')\n\nconst SCALE = 2\n\nfunction exec(cmd) {\n  return new Promise((resolve) => {\n    oldExec(cmd, resolve)\n  })\n}\n\nfunction nextTick() {\n  return new Promise((resolve) => {\n    setImmediate(resolve)\n  })\n}\n\nfunction save(path, canvas) {\n  return new Promise((resolve) => {\n    const out = fs.createWriteStream(path)\n    const stream = canvas.createPNGStream()\n    stream.pipe(out)\n    out.on('finish', resolve)\n  })\n}\n\nasync function loadCanvas(path) {\n  await exec(`convert ${path} /tmp/map.png`)\n  const image = await loadImage('/tmp/map.png')\n  const canvas = createCanvas(image.width, image.height)\n  const ctx = canvas.getContext('2d')\n  ctx.drawImage(image, 0, 0)\n\n  return canvas\n}\n\nfunction rotate(srcCanvas, degrees){\n  const canvas = createCanvas(srcCanvas.width, srcCanvas.height)\n  const context = canvas.getContext('2d')\n  context.clearRect(0,0,canvas.width,canvas.height);\n\n  // save the unrotated context of the canvas so we can restore it later\n  // the alternative is to untranslate & unrotate after drawing\n  context.save();\n\n  // move to the center of the canvas\n  // move to the center of the canvas\n  context.translate(canvas.width/2,canvas.height/2);\n\n  // rotate the canvas to the specified degrees\n  context.rotate((degrees*Math.PI)/180);\n\n  // draw the image\n  // since the context is rotated, the image will be rotated also\n  context.drawImage(srcCanvas,-srcCanvas.width/2,-srcCanvas.width/2);\n\n  // we’re done with the rotating so restore the unrotated context\n  context.restore();\n\n  return canvas\n}\n\nasync function process(ppmPath, logPath, outputPath) {\n  const srcCanvas = await loadCanvas(ppmPath)\n  const srcCtx = srcCanvas.getContext('2d')\n\n  let canvas = createCanvas(srcCanvas.width * SCALE, srcCanvas.height * SCALE)\n  \n  const center = {\n    x: canvas.width / 2,\n    y: canvas.height / 2,\n  }\n\n  let dstCtx = canvas.getContext(\"2d\")\n\n  dstCtx.clearRect(0, 0, canvas.width, canvas.height)\n\n  for (let x = 0; x < srcCanvas.width; x++) {\n    const data = srcCtx.getImageData(x, 0, 1, srcCanvas.height).data\n    for (let y = 0; y < srcCanvas.height; y++) {\n      const r = data[y * 4]\n      if (r == 0) {\n        dstCtx.fillStyle = 'rgba(255, 255, 255, 0.8)'\n        dstCtx.fillRect(x*SCALE, y*SCALE, SCALE, SCALE)\n      } else if (r == 255 || r == 78) {\n        dstCtx.fillStyle = 'rgba(255, 255, 255, 0.3)'\n        dstCtx.fillRect(x*SCALE, y*SCALE, SCALE, SCALE)\n      }\n    }\n    if (x % 1000 == 0) {\n      await nextTick()\n    }\n  }\n\n  canvas = rotate(canvas, 0)\n  dstCtx = canvas.getContext(\"2d\")\n\n  const lines = fs.readFileSync(logPath).toString().split('\\n');\n  const points = []\n  for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n    const line = lines[lineIndex];\n    if (match = line.match(/estimate (-{0,1}\\d+.\\d+) (-{0,1}\\d+.\\d+)/)) {\n      const y = center.y - (Math.round((parseFloat(match[2]) * 20)) * SCALE)\n      const x = center.x + (Math.round((parseFloat(match[1]) * 20)) * SCALE)\n\n      points.push({ x, y })\n    }\n  }\n\n  dstCtx.fillStyle = 'rgba(0, 255, 0, 1)'\n  dstCtx.fillRect(center.x, center.y, SCALE, SCALE)\n  await save(`${outputPath}.grid.png`, canvas)  \n\n  dstCtx.strokeStyle = 'rgb(255, 255, 255)'\n  dstCtx.beginPath()\n  let waypoint = null\n  for (let index = 0; index < points.length; index++) {\n    waypoint = points[index]\n    const { x, y } = waypoint\n    \n    if (index == 0) {\n      dstCtx.moveTo(x + 0.5, y + 0.5)\n    } else {\n      dstCtx.lineTo(x + 0.5, y + 0.5)\n    }\n  }\n  dstCtx.stroke()\n\n  dstCtx.fillStyle = 'rgb(0, 255, 0)'\n  dstCtx.beginPath();\n  dstCtx.arc(center.x, center.y, 3, 0, 2 * Math.PI);\n  dstCtx.fill();\n\n  if (waypoint) {\n    dstCtx.fillStyle = 'rgb(255, 255, 0)'\n    dstCtx.beginPath();\n    dstCtx.arc(waypoint.x, waypoint.y, 4, 0, 2 * Math.PI);\n    dstCtx.fill();\n  }\n\n  await save(`/tmp/full.png`, canvas)\n\n  await exec(`convert -trim /tmp/full.png ${outputPath}.png`) // auto crop\n  console.log('The PNG file was created.')\n}\n\nmodule.exports = process"
  },
  {
    "path": "vacuum/package.json",
    "content": "{\n  \"scripts\": {\n    \"start\": \"node index.js\"\n  },\n  \"dependencies\": {\n    \"canvas\": \"^2.5.0\",\n    \"connect-multiparty\": \"^2.2.0\",\n    \"express\": \"^4.17.0\"\n  }\n}\n"
  },
  {
    "path": "vacuum/public/.gitkeep",
    "content": ""
  },
  {
    "path": "vacuum/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n  <title>Xiaomi Vacuum Zone Cleaning Generator</title>\n\n  <style>\n    body {\n      margin: 0px;\n      padding: 0px;\n      background: #000000;\n    }\n\n    #output {\n      position: fixed;\n      top: 20px;\n      right: 20px;\n      width: 320px;\n    }\n\n    textarea {\n      width: 100%;\n    }\n  </style>\n\n  <script>\n    // https://hackernoon.com/how-i-set-up-room-cleaning-automation-with-google-home-home-assistant-and-xiaomi-vacuum-cleaner-9149e0267e6d\n    const origin = { x: 0, y: 0 }\n    const current = { x: 0, y: 0 }\n\n    const canvasOrigin = 512\n    const SCALE = 2\n\n    const XIAOMI_SIZE = 25500\n\n    document.addEventListener('DOMContentLoaded', () => {\n      const map = document.body\n      const mapImg = document.createElement('img')\n      const canvas = document.getElementById('canvas')\n      const serviceText = document.getElementById('service')\n      const ctx = canvas.getContext('2d')\n      let drag = false\n\n      mapImg.onload = () => {\n        map.scrollLeft = (mapImg.clientWidth - map.clientWidth) / 2\n        map.scrollTop = (mapImg.clientHeight - map.clientHeight) / 2\n\n        draw()\n        mapImg.hidden = true\n      }\n\n      mapImg.src = './map.grid.png'\n      document.body.appendChild(mapImg)\n\n      canvas.addEventListener('mousedown', function(e) {\n        current.x = origin.x = e.pageX - this.offsetLeft;\n        current.y = origin.y = e.pageY - this.offsetTop;\n        drag = true;\n        draw()\n      }, false);\n  \n      canvas.addEventListener('mouseup', function(e) {\n        drag = false;\n      }, false);\n  \n      canvas.addEventListener('mousemove', function(e) {\n        if (drag) {\n          current.x = e.pageX - this.offsetLeft\n          current.y = e.pageY - this.offsetTop\n        }\n\n        draw()\n      }, false);\n\n      function draw() {\n        requestAnimationFrame(redraw)\n      }\n\n      //(𝑥1,𝑦1)=(−𝑦,𝑥)\n      function toXiaomiUnitX(position) {\n        const ppmPosition = position / SCALE\n        const originPos = ppmPosition - canvasOrigin\n        const partPos = originPos / canvasOrigin\n        return Math.round(XIAOMI_SIZE - partPos * XIAOMI_SIZE)\n      }\n\n      function toXiaomiUnitY(position) {\n        const ppmPosition = position / SCALE\n        const originPos = ppmPosition + canvasOrigin\n        const partPos = originPos / canvasOrigin\n        return Math.round(XIAOMI_SIZE - partPos * XIAOMI_SIZE)\n      }\n\n      function rotatePoint({ x, y }) {\n        return { x: y, y: -x }\n      }\n\n      /**\n       * the first two digits are the coordinates of the bottom left corner of the zone, the second two digits for the top right corner of the zone, and the last digit for number of times to clean a zone. \n       */\n      function updateTextArea() {\n        const start = rotatePoint(origin)\n        const end = rotatePoint(current)\n\n        const sy = toXiaomiUnitY(Math.min(start.y, end.y))\n        const sx = toXiaomiUnitX(Math.min(start.x, end.x))\n\n        const ey = toXiaomiUnitY(Math.max(start.y, end.y))\n        const ex = toXiaomiUnitX(Math.max(start.x, end.x))\n\n        serviceText.value = \"- service: vacuum.send_command\\n\" +\n                            \"  data:\\n\" +\n                            \"    entity_id: vacuum.main_vacum\\n\" +\n                            \"    command: app_zoned_clean\\n\" +\n                            `    params: [[${ey}, ${ex}, ${sy}, ${sx}, 1]]`\n      }\n\n      function redraw() {\n        ctx.fillStyle = '#000000';\n        ctx.rect(0, 0, canvas.width, canvas.height);\n        ctx.fill();\n        ctx.drawImage(mapImg, 0, 0);\n\n        const sy = Math.round(Math.min(origin.y, current.y))\n        const sx = Math.round(Math.min(origin.x, current.x))\n\n        const ey = Math.round(Math.max(origin.y, current.y))\n        const ex = Math.round(Math.max(origin.x, current.x))\n\n        const width = ex - sx\n        const height = ey - sy\n\n        if (width > 0 && height > 0) {\n          ctx.fillStyle = 'rgba(250, 200, 150, 0.4)';\n          ctx.fillRect(sx, sy, width, height);\n        }\n        updateTextArea()\n      }\n    })\n  </script>\n</head>\n<body>\n    <canvas id=\"canvas\" width=\"2048\" height=\"2048\"></canvas>\n\n  <div id=\"output\">\n    <textarea id=\"service\" cols=\"30\" rows=\"10\" readonly></textarea>\n  </div>\n</body>\n</html>"
  },
  {
    "path": "youtube/Dockerfile",
    "content": "FROM archlinux/base\r\n\r\nRUN pacman -Sy --noconfirm shards crystal imagemagick librsvg \\\r\n    which pkgconf gcc ttf-liberation && \\\r\n    git clone https://github.com/omarroth/invidious\r\n\r\nWORKDIR /invidious\r\n\r\nRUN shards && \\\r\n    crystal build src/invidious.cr\r\n\r\nEXPOSE 3000\r\n\r\nCMD [ \"/invidious/invidious\" ]"
  },
  {
    "path": "zwave/Dockerfile",
    "content": "FROM alpine:3.13\n\nWORKDIR /app\n\nRUN apk add --no-cache \\\n      nodejs\n\n# Build tools required to install serialport, a zwave-js dependency\nRUN apk add --no-cache \\\n      g++ \\\n      git \\\n      linux-headers \\\n      make \\\n      npm \\\n      python3\n\nRUN npm install npm@latest -g\n\nWORKDIR /app\n\nARG ZWAVE_JS_PACKAGE=zwave-js@9.3.0\nARG ZWAVE_JS_SERVER_PACKAGE=@zwave-js/server@1.17.0\nARG NPM_INSTALL_FLAGS=\n\nRUN npm install ${NPM_INSTALL_FLAGS} ${ZWAVE_JS_SERVER_PACKAGE} ${ZWAVE_JS_PACKAGE}\n\nRUN apk add --no-cache \\\n      jq\n\nWORKDIR /app\n\nENV NODE_ENV=production\n\nCOPY docker-entrypoint.sh /usr/local/bin/\nCOPY options.js .\nRUN mkdir -p /cache/config /cache/db /logs\n\nVOLUME \"/cache\"\nEXPOSE 3000\n\nENV PATH=/app/node_modules/.bin:$PATH\n\nENV USB_PATH=/dev/zwave\nENV LOGFILENAME=/logs/zwave_%DATE%.log\n# Path to persistent device configuration DB\nENV ZWAVEJS_EXTERNAL_CONFIG=/cache/db\n\nRUN ls\nENTRYPOINT [\"docker-entrypoint.sh\"]\n"
  },
  {
    "path": "zwave/docker-entrypoint.sh",
    "content": "#!/bin/sh\nset -e\n\nif [ -z \"$1\" ]; then\n  if [ ! -c \"$USB_PATH\" ]; then\n    echo \"USB path \\\"$USB_PATH\\\" does not exist or is not a character device\"\n    exit 1\n  fi\n\n  if [ -n \"$NETWORK_KEY\" ]; then\n    echo \"NETWORK_KEY is deprecated, use S0_LEGACY_KEY instead\"\n  fi\n\n  set -- zwave-server --config options.js \"$USB_PATH\"\n  echo \"Starting zwave-server:\" \"$@\"\nelif [ \"$1\" = \"server\" ]; then\n  shift\n  set -- zwave-server \"$@\"\nelif [ \"$1\" = \"client\" ]; then\n  shift\n  set -- zwave-client \"$@\"\nfi\n\nexec \"$@\"\n"
  },
  {
    "path": "zwave/options.js",
    "content": "function getLogConfig() {\n  config = {\n    forceConsole: true,\n  };\n\n  if (process.env.LOGFILENAME) {\n    config.filename = process.env.LOGFILENAME;\n  }\n\n  return config;\n}\n\n// Obtain the security keys from the environment variables.\n// The server and driver don't allow blank or undefined keys,\n// so skip any unset/blank environment variables. The server checks\n// the key lengths and converts to a Buffer for us.\nfunction getSecurityKeys() {\n  const env_keys = {\n    S2_AccessControl: process.env.S2_ACCESS_CONTROL_KEY,\n    S2_Authenticated: process.env.S2_AUTHENTICATED_KEY,\n    S2_Unauthenticated: process.env.S2_UNAUTHENTICATED_KEY,\n    S0_Legacy: process.env.S0_LEGACY_KEY || process.env.NETWORK_KEY,\n  };\n\n  keys = {};\n  for (const [name, key] of Object.entries(env_keys)) {\n    if (key) {\n      keys[name] = key;\n    }\n  }\n\n  return keys;\n}\n\nmodule.exports = {\n  logConfig: getLogConfig(),\n  storage: {\n    cacheDir: \"/cache\",\n    deviceConfigPriorityDir: \"/cache/config\",\n  },\n  securityKeys: getSecurityKeys(),\n};\n"
  }
]